diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..b14201b --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,108 @@ +name: GE-CI + +on: + push: + branches: master + paths-ignore: + - 'tools/**' + pull_request: + branches: master + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + buildus: + + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + + - name: Install Depedencies + run: | + sudo apt update + sudo apt install binutils-mips-linux-gnu make + + - name: Get US File + env: + FILE_US: ${{ secrets.SECRET_FILE_US }} + run: wget -O baserom.u.z64 $FILE_US + + - name: Extract US Assets + run: ./extract_baserom.u.sh + + - name: Make US + run: make -j VERSION=US + + - name: Make report + run: make -C tools/report + + - name: Stats + run: python3 tools/ge-stats.py --version us --report + #git diff HEAD^ HEAD --name-only + + # expected args + # 1481 15854 12774 232276 564 1312 652 20330 15471 269772 49 336 tools/report/index.html "src/game/bond.c" + + # Replace this with Git push to repo + # but somehow avoid loop + + #- uses: actions/download-artifact@v2 + # with: + # name: my-artifact + # path: tools/report/index.html + - name: Upload output files + + uses: dmnemec/copy_file_to_another_repo_action@v1.0.4 + + env: + API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} + API_TOKEN_USER: ${{ secrets.API_TOKEN_USER }} + API_TOKEN_EMAIL: ${{ secrets.API_TOKEN_EMAIL }} + + with: + destination_repo: 'kholdfuzion/goldeneyestatus' + user_email: $API_TOKEN_EMAIL + user_name: $API_TOKEN_USER + source_file: | + tools/report/cursor.cur + tools/report/index.html + tools/report/sfx.ogg + tools/report/background.jpg + + buildjp: + + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + + - name: Install Depedencies + run: | + sudo apt update + sudo apt install binutils-mips-linux-gnu make + + - name: Get US File + env: + FILE_US: ${{ secrets.SECRET_FILE_US }} + run: wget -O baserom.u.z64 $FILE_US + + - name: Get JP File + env: + FILE_JP: ${{ secrets.SECRET_FILE_JP }} + run: wget -O baserom.j.z64 $FILE_JP + + - name: Extract US Assets + run: ./extract_baserom.u.sh + + - name: Extract JP Assets + run: ./extract_diff.j.sh + + - name: Make JP + run: make -j VERSION=JP + + - name: Stats + run: python3 tools/ge-stats.py --version jp + +#need way of telling report that JAP passed/failed diff --git a/.gitignore b/.gitignore index 7b2aadc..8cb5fc6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.rz *.tmp *.z64 +*.o /.vs 021990.bin 0219D0.bin @@ -47,3 +48,6 @@ ge007.j.elf ge007.u.bin ge007.u.elf lib/libultra_rom.a +tools/aaa_rip/aaa_rip +tools/extractor/extractor +notes/ \ No newline at end of file diff --git a/Makefile b/Makefile index 6664be3..6293390 100644 --- a/Makefile +++ b/Makefile @@ -83,8 +83,10 @@ CODEFILES := $(foreach dir,src,$(wildcard $(dir)/*.c)) CODEOBJECTS := $(foreach file,$(CODEFILES),$(BUILD_DIR)/$(file:.c=.o)) LIBULTRA := lib/libultra_rom.a -ULTRAFILES := $(foreach dir,src/libultra,$(wildcard $(dir)/*.s)) -ULTRAOBJECTS := $(foreach file,$(ULTRAFILES),$(BUILD_DIR)/$(file:.s=.o)) +ULTRAFILES_S := $(foreach dir,src/libultra,$(wildcard $(dir)/*.s)) +ULTRAFILES_C := $(foreach dir,src/libultra,$(wildcard $(dir)/*.c)) +ULTRAOBJECTS := $(foreach file,$(ULTRAFILES_S),$(BUILD_DIR)/$(file:.s=.o)) \ + $(foreach file,$(ULTRAFILES_C),$(BUILD_DIR)/$(file:.c=.o)) GAMEFILES := $(foreach dir,src/game,$(wildcard $(dir)/*.c)) GAMEOBJECTS := $(foreach file,$(GAMEFILES),$(BUILD_DIR)/$(file:.c=.o)) @@ -124,7 +126,8 @@ OBJECTS := $(RSPOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(OBSEGMENT) INCLUDE := -I . -I include -I include/ultra64 -I src -I src/game -I src/inflate CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc -CFLAGS := -Wo,-loopunroll,0 -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm $(CFLAGWARNING) -woff 819,820,852,821,838 -signed $(INCLUDE) -mips2 $(LCDEFS) +CFLAGS := 0 -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm $(CFLAGWARNING) -woff 819,820,852,821,838 -signed $(INCLUDE) -mips2 $(LCDEFS) -DTARGET_N64 +CFLAGS_LIBULTRA := 0 -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm $(CFLAGWARNING) -woff 819,820,852,821,838 -signed $(INCLUDE) -mips2 $(LCDEFS) -DTARGET_N64 LD := $(TOOLCHAIN)ld LD_SCRIPT := ge007.$(COUNTRYCODE).ld @@ -156,6 +159,9 @@ clean: $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONT_OBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) +$(BUILD_DIR)/src/libultra/%.o: src/libultra/%.c + $(CC) -c $(CFLAGS_LIBULTRA) -o $@ $< + $(BUILD_DIR)/rsp/%.bin: rsp/*.s $(ARMIPS) -sym $@.sym -strequ CODE_FILE $(BUILD_DIR)/rsp/$*.bin -strequ DATA_FILE $(BUILD_DIR)/rsp/$*_data.bin $< diff --git a/assets/GlobalImageTable.c b/assets/GlobalImageTable.c index 3415796..f1b2e70 100644 --- a/assets/GlobalImageTable.c +++ b/assets/GlobalImageTable.c @@ -1,7 +1,7 @@ #include "ultra64.h" #include "bondconstants.h" #include "bondtypes.h" -#include +#include "PR/gbi.h" struct sGlobalImageTable GlobalImageTable = { { //globalDL_0x000 diff --git a/assets/images/image_externs.h b/assets/images/image_externs.h index d2a43d3..2c93579 100644 --- a/assets/images/image_externs.h +++ b/assets/images/image_externs.h @@ -1,4 +1,5 @@ //I should be autogenerated by tools +//and have meaningful names given #ifndef _IMAGE_EXTERNS_H_ #define _IMAGE_EXTERNS_H_ #include "ultra64.h" @@ -2702,4 +2703,2706 @@ #define _image2697_size 0x201 #define _image2698_size 0x53D +typedef enum IMAGEIDS { + _image1_ID = 1, + _image2_ID, + _image3_ID, + _image4_ID, + _image5_ID, + _image6_ID, + _image7_ID, + _image8_ID, + _image9_ID, + _image10_ID, + _image11_ID, + _image12_ID, + _image13_ID, + _image14_ID, + _image15_ID, + _image16_ID, + _image17_ID, + _image18_ID, + _image19_ID, + _image20_ID, + _image21_ID, + _image22_ID, + _image23_ID, + _image24_ID, + _image25_ID, + _image26_ID, + _image27_ID, + _image28_ID, + _image29_ID, + _image30_ID, + _image31_ID, + _image32_ID, + _image33_ID, + _image34_ID, + _image35_ID, + _image36_ID, + _image37_ID, + _image38_ID, + _image39_ID, + _image40_ID, + _image41_ID, + _image42_ID, + _image43_ID, + _image44_ID, + _image45_ID, + _image46_ID, + _image47_ID, + _image48_ID, + _image49_ID, + _image50_ID, + _image51_ID, + _image52_ID, + _image53_ID, + _image54_ID, + _image55_ID, + _image56_ID, + _image57_ID, + _image58_ID, + _image59_ID, + _image60_ID, + _image61_ID, + _image62_ID, + _image63_ID, + _image64_ID, + _image65_ID, + _image66_ID, + _image67_ID, + _image68_ID, + _image69_ID, + _image70_ID, + _image71_ID, + _image72_ID, + _image73_ID, + _image74_ID, + _image75_ID, + _image76_ID, + _image77_ID, + _image78_ID, + _image79_ID, + _image80_ID, + _image81_ID, + _image82_ID, + _image83_ID, + _image84_ID, + _image85_ID, + _image86_ID, + _image87_ID, + _image88_ID, + _image89_ID, + _image90_ID, + _image91_ID, + _image92_ID, + _image93_ID, + _image94_ID, + _image95_ID, + _image96_ID, + _image97_ID, + _image98_ID, + _image99_ID, + _image100_ID, + _image101_ID, + _image102_ID, + _image103_ID, + _image104_ID, + _image105_ID, + _image106_ID, + _image107_ID, + _image108_ID, + _image109_ID, + _image110_ID, + _image111_ID, + _image112_ID, + _image113_ID, + _image114_ID, + _image115_ID, + _image116_ID, + _image117_ID, + _image118_ID, + _image119_ID, + _image120_ID, + _image121_ID, + _image122_ID, + _image123_ID, + _image124_ID, + _image125_ID, + _image126_ID, + _image127_ID, + _image128_ID, + _image129_ID, + _image130_ID, + _image131_ID, + _image132_ID, + _image133_ID, + _image134_ID, + _image135_ID, + _image136_ID, + _image137_ID, + _image138_ID, + _image139_ID, + _image140_ID, + _image141_ID, + _image142_ID, + _image143_ID, + _image144_ID, + _image145_ID, + _image146_ID, + _image147_ID, + _image148_ID, + _image149_ID, + _image150_ID, + _image151_ID, + _image152_ID, + _image153_ID, + _image154_ID, + _image155_ID, + _image156_ID, + _image157_ID, + _image158_ID, + _image159_ID, + _image160_ID, + _image161_ID, + _image162_ID, + _image163_ID, + _image164_ID, + _image165_ID, + _image166_ID, + _image167_ID, + _image168_ID, + _image169_ID, + _image170_ID, + _image171_ID, + _image172_ID, + _image173_ID, + _image174_ID, + _image175_ID, + _image176_ID, + _image177_ID, + _image178_ID, + _image179_ID, + _image180_ID, + _image181_ID, + _image182_ID, + _image183_ID, + _image184_ID, + _image185_ID, + _image186_ID, + _image187_ID, + _image188_ID, + _image189_ID, + _image190_ID, + _image191_ID, + _image192_ID, + _image193_ID, + _image194_ID, + _image195_ID, + _image196_ID, + _image197_ID, + _image198_ID, + _image199_ID, + _image200_ID, + _image201_ID_LIGHT, + _image202_ID, + _image203_ID_LIGHT, + _image204_ID, + _image205_ID_LIGHT, + _image206_ID, + _image207_ID, + _image208_ID, + _image209_ID, + _image210_ID, + _image211_ID, + _image212_ID, + _image213_ID, + _image214_ID, + _image215_ID, + _image216_ID, + _image217_ID, + _image218_ID, + _image219_ID, + _image220_ID, + _image221_ID, + _image222_ID, + _image223_ID, + _image224_ID, + _image225_ID, + _image226_ID, + _image227_ID, + _image228_ID, + _image229_ID, + _image230_ID, + _image231_ID, + _image232_ID, + _image233_ID, + _image234_ID, + _image235_ID, + _image236_ID, + _image237_ID, + _image238_ID, + _image239_ID, + _image240_ID, + _image241_ID, + _image242_ID, + _image243_ID, + _image244_ID, + _image245_ID, + _image246_ID, + _image247_ID, + _image248_ID, + _image249_ID, + _image250_ID, + _image251_ID, + _image252_ID_LIGHT, + _image253_ID, + _image254_ID_LIGHT, + _image255_ID_LIGHT, + _image256_ID_LIGHT, + _image257_ID, + _image258_ID, + _image259_ID, + _image260_ID, + _image261_ID, + _image262_ID, + _image263_ID, + _image264_ID, + _image265_ID, + _image266_ID, + _image267_ID, + _image268_ID, + _image269_ID, + _image270_ID, + _image271_ID, + _image272_ID, + _image273_ID, + _image274_ID, + _image275_ID, + _image276_ID, + _image277_ID, + _image278_ID, + _image279_ID, + _image280_ID, + _image281_ID, + _image282_ID, + _image283_ID, + _image284_ID, + _image285_ID, + _image286_ID, + _image287_ID, + _image288_ID, + _image289_ID, + _image290_ID, + _image291_ID, + _image292_ID, + _image293_ID, + _image294_ID, + _image295_ID, + _image296_ID, + _image297_ID, + _image298_ID, + _image299_ID, + _image300_ID, + _image301_ID, + _image302_ID, + _image303_ID, + _image304_ID, + _image305_ID, + _image306_ID, + _image307_ID, + _image308_ID, + _image309_ID, + _image310_ID, + _image311_ID, + _image312_ID, + _image313_ID, + _image314_ID, + _image315_ID, + _image316_ID, + _image317_ID, + _image318_ID, + _image319_ID, + _image320_ID, + _image321_ID, + _image322_ID, + _image323_ID, + _image324_ID, + _image325_ID, + _image326_ID, + _image327_ID, + _image328_ID, + _image329_ID, + _image330_ID, + _image331_ID, + _image332_ID, + _image333_ID, + _image334_ID, + _image335_ID, + _image336_ID, + _image337_ID, + _image338_ID, + _image339_ID, + _image340_ID, + _image341_ID, + _image342_ID, + _image343_ID, + _image344_ID, + _image345_ID, + _image346_ID, + _image347_ID, + _image348_ID, + _image349_ID, + _image350_ID, + _image351_ID, + _image352_ID, + _image353_ID, + _image354_ID, + _image355_ID, + _image356_ID, + _image357_ID, + _image358_ID, + _image359_ID, + _image360_ID, + _image361_ID, + _image362_ID, + _image363_ID, + _image364_ID, + _image365_ID, + _image366_ID, + _image367_ID, + _image368_ID, + _image369_ID, + _image370_ID, + _image371_ID, + _image372_ID, + _image373_ID, + _image374_ID, + _image375_ID, + _image376_ID, + _image377_ID, + _image378_ID, + _image379_ID, + _image380_ID, + _image381_ID, + _image382_ID, + _image383_ID, + _image384_ID, + _image385_ID, + _image386_ID, + _image387_ID, + _image388_ID, + _image389_ID, + _image390_ID, + _image391_ID, + _image392_ID, + _image393_ID, + _image394_ID, + _image395_ID, + _image396_ID, + _image397_ID, + _image398_ID, + _image399_ID, + _image400_ID, + _image401_ID, + _image402_ID, + _image403_ID, + _image404_ID, + _image405_ID, + _image406_ID, + _image407_ID, + _image408_ID, + _image409_ID, + _image410_ID, + _image411_ID, + _image412_ID, + _image413_ID, + _image414_ID, + _image415_ID, + _image416_ID, + _image417_ID, + _image418_ID, + _image419_ID, + _image420_ID, + _image421_ID, + _image422_ID, + _image423_ID, + _image424_ID, + _image425_ID, + _image426_ID, + _image427_ID, + _image428_ID_LIGHT, + _image429_ID, + _image430_ID, + _image431_ID, + _image432_ID, + _image433_ID, + _image434_ID, + _image435_ID, + _image436_ID, + _image437_ID, + _image438_ID, + _image439_ID, + _image440_ID, + _image441_ID, + _image442_ID, + _image443_ID, + _image444_ID, + _image445_ID, + _image446_ID, + _image447_ID, + _image448_ID, + _image449_ID, + _image450_ID, + _image451_ID, + _image452_ID, + _image453_ID, + _image454_ID, + _image455_ID, + _image456_ID, + _image457_ID, + _image458_ID, + _image459_ID, + _image460_ID, + _image461_ID, + _image462_ID, + _image463_ID, + _image464_ID, + _image465_ID, + _image466_ID, + _image467_ID, + _image468_ID, + _image469_ID, + _image470_ID, + _image471_ID, + _image472_ID, + _image473_ID, + _image474_ID, + _image475_ID, + _image476_ID, + _image477_ID, + _image478_ID, + _image479_ID, + _image480_ID, + _image481_ID, + _image482_ID, + _image483_ID, + _image484_ID, + _image485_ID, + _image486_ID, + _image487_ID, + _image488_ID, + _image489_ID, + _image490_ID, + _image491_ID, + _image492_ID, + _image493_ID, + _image494_ID, + _image495_ID, + _image496_ID, + _image497_ID, + _image498_ID, + _image499_ID, + _image500_ID, + _image501_ID, + _image502_ID, + _image503_ID, + _image504_ID, + _image505_ID, + _image506_ID, + _image507_ID, + _image508_ID, + _image509_ID, + _image510_ID, + _image511_ID, + _image512_ID, + _image513_ID, + _image514_ID, + _image515_ID, + _image516_ID, + _image517_ID, + _image518_ID, + _image519_ID, + _image520_ID, + _image521_ID, + _image522_ID, + _image523_ID, + _image524_ID, + _image525_ID, + _image526_ID, + _image527_ID, + _image528_ID, + _image529_ID, + _image530_ID, + _image531_ID, + _image532_ID, + _image533_ID, + _image534_ID, + _image535_ID, + _image536_ID, + _image537_ID, + _image538_ID, + _image539_ID, + _image540_ID, + _image541_ID, + _image542_ID, + _image543_ID, + _image544_ID, + _image545_ID, + _image546_ID, + _image547_ID, + _image548_ID, + _image549_ID, + _image550_ID, + _image551_ID, + _image552_ID, + _image553_ID, + _image554_ID, + _image555_ID, + _image556_ID, + _image557_ID, + _image558_ID, + _image559_ID, + _image560_ID, + _image561_ID, + _image562_ID, + _image563_ID, + _image564_ID, + _image565_ID, + _image566_ID, + _image567_ID, + _image568_ID, + _image569_ID, + _image570_ID, + _image571_ID, + _image572_ID, + _image573_ID, + _image574_ID, + _image575_ID, + _image576_ID, + _image577_ID, + _image578_ID, + _image579_ID, + _image580_ID, + _image581_ID, + _image582_ID, + _image583_ID, + _image584_ID, + _image585_ID, + _image586_ID, + _image587_ID, + _image588_ID, + _image589_ID, + _image590_ID, + _image591_ID, + _image592_ID, + _image593_ID, + _image594_ID, + _image595_ID, + _image596_ID, + _image597_ID, + _image598_ID, + _image599_ID, + _image600_ID, + _image601_ID, + _image602_ID, + _image603_ID, + _image604_ID, + _image605_ID, + _image606_ID, + _image607_ID, + _image608_ID, + _image609_ID, + _image610_ID, + _image611_ID, + _image612_ID, + _image613_ID, + _image614_ID, + _image615_ID, + _image616_ID, + _image617_ID, + _image618_ID, + _image619_ID, + _image620_ID, + _image621_ID, + _image622_ID, + _image623_ID, + _image624_ID, + _image625_ID, + _image626_ID, + _image627_ID, + _image628_ID, + _image629_ID, + _image630_ID, + _image631_ID, + _image632_ID, + _image633_ID, + _image634_ID, + _image635_ID, + _image636_ID, + _image637_ID, + _image638_ID, + _image639_ID, + _image640_ID, + _image641_ID, + _image642_ID, + _image643_ID, + _image644_ID, + _image645_ID, + _image646_ID, + _image647_ID, + _image648_ID, + _image649_ID, + _image650_ID, + _image651_ID, + _image652_ID, + _image653_ID, + _image654_ID, + _image655_ID, + _image656_ID, + _image657_ID, + _image658_ID, + _image659_ID, + _image660_ID, + _image661_ID, + _image662_ID, + _image663_ID, + _image664_ID, + _image665_ID, + _image666_ID, + _image667_ID, + _image668_ID, + _image669_ID, + _image670_ID, + _image671_ID, + _image672_ID, + _image673_ID, + _image674_ID, + _image675_ID, + _image676_ID, + _image677_ID, + _image678_ID, + _image679_ID, + _image680_ID, + _image681_ID, + _image682_ID, + _image683_ID, + _image684_ID, + _image685_ID, + _image686_ID, + _image687_ID, + _image688_ID, + _image689_ID, + _image690_ID, + _image691_ID, + _image692_ID, + _image693_ID, + _image694_ID, + _image695_ID, + _image696_ID, + _image697_ID, + _image698_ID, + _image699_ID, + _image700_ID, + _image701_ID, + _image702_ID, + _image703_ID, + _image704_ID, + _image705_ID, + _image706_ID, + _image707_ID, + _image708_ID, + _image709_ID, + _image710_ID, + _image711_ID, + _image712_ID, + _image713_ID, + _image714_ID, + _image715_ID, + _image716_ID, + _image717_ID, + _image718_ID, + _image719_ID, + _image720_ID, + _image721_ID, + _image722_ID, + _image723_ID, + _image724_ID, + _image725_ID, + _image726_ID, + _image727_ID, + _image728_ID, + _image729_ID, + _image730_ID, + _image731_ID, + _image732_ID, + _image733_ID, + _image734_ID, + _image735_ID, + _image736_ID, + _image737_ID, + _image738_ID, + _image739_ID, + _image740_ID, + _image741_ID, + _image742_ID, + _image743_ID, + _image744_ID, + _image745_ID, + _image746_ID, + _image747_ID, + _image748_ID, + _image749_ID, + _image750_ID, + _image751_ID, + _image752_ID, + _image753_ID, + _image754_ID, + _image755_ID, + _image756_ID, + _image757_ID, + _image758_ID, + _image759_ID, + _image760_ID, + _image761_ID, + _image762_ID, + _image763_ID, + _image764_ID, + _image765_ID, + _image766_ID, + _image767_ID, + _image768_ID, + _image769_ID, + _image770_ID, + _image771_ID, + _image772_ID, + _image773_ID, + _image774_ID, + _image775_ID, + _image776_ID, + _image777_ID, + _image778_ID, + _image779_ID, + _image780_ID, + _image781_ID, + _image782_ID, + _image783_ID, + _image784_ID, + _image785_ID, + _image786_ID, + _image787_ID, + _image788_ID, + _image789_ID, + _image790_ID, + _image791_ID, + _image792_ID, + _image793_ID, + _image794_ID, + _image795_ID, + _image796_ID, + _image797_ID, + _image798_ID, + _image799_ID, + _image800_ID, + _image801_ID, + _image802_ID, + _image803_ID, + _image804_ID, + _image805_ID, + _image806_ID, + _image807_ID, + _image808_ID, + _image809_ID, + _image810_ID, + _image811_ID, + _image812_ID, + _image813_ID, + _image814_ID, + _image815_ID, + _image816_ID, + _image817_ID, + _image818_ID, + _image819_ID, + _image820_ID, + _image821_ID, + _image822_ID, + _image823_ID, + _image824_ID, + _image825_ID, + _image826_ID, + _image827_ID, + _image828_ID, + _image829_ID, + _image830_ID, + _image831_ID, + _image832_ID, + _image833_ID, + _image834_ID, + _image835_ID, + _image836_ID, + _image837_ID, + _image838_ID, + _image839_ID, + _image840_ID, + _image841_ID, + _image842_ID, + _image843_ID, + _image844_ID, + _image845_ID, + _image846_ID, + _image847_ID, + _image848_ID, + _image849_ID, + _image850_ID, + _image851_ID, + _image852_ID, + _image853_ID, + _image854_ID, + _image855_ID, + _image856_ID, + _image857_ID, + _image858_ID, + _image859_ID, + _image860_ID, + _image861_ID, + _image862_ID, + _image863_ID, + _image864_ID, + _image865_ID, + _image866_ID, + _image867_ID, + _image868_ID, + _image869_ID, + _image870_ID, + _image871_ID, + _image872_ID, + _image873_ID, + _image874_ID, + _image875_ID, + _image876_ID, + _image877_ID, + _image878_ID, + _image879_ID, + _image880_ID, + _image881_ID, + _image882_ID, + _image883_ID, + _image884_ID, + _image885_ID, + _image886_ID, + _image887_ID, + _image888_ID, + _image889_ID, + _image890_ID, + _image891_ID, + _image892_ID, + _image893_ID, + _image894_ID, + _image895_ID, + _image896_ID, + _image897_ID, + _image898_ID, + _image899_ID, + _image900_ID, + _image901_ID, + _image902_ID, + _image903_ID, + _image904_ID, + _image905_ID, + _image906_ID, + _image907_ID, + _image908_ID, + _image909_ID, + _image910_ID, + _image911_ID, + _image912_ID, + _image913_ID, + _image914_ID, + _image915_ID, + _image916_ID, + _image917_ID, + _image918_ID, + _image919_ID, + _image920_ID, + _image921_ID, + _image922_ID, + _image923_ID, + _image924_ID, + _image925_ID, + _image926_ID, + _image927_ID, + _image928_ID, + _image929_ID, + _image930_ID, + _image931_ID, + _image932_ID, + _image933_ID, + _image934_ID, + _image935_ID, + _image936_ID, + _image937_ID, + _image938_ID, + _image939_ID, + _image940_ID, + _image941_ID, + _image942_ID, + _image943_ID, + _image944_ID, + _image945_ID, + _image946_ID, + _image947_ID, + _image948_ID, + _image949_ID, + _image950_ID, + _image951_ID, + _image952_ID, + _image953_ID, + _image954_ID, + _image955_ID, + _image956_ID, + _image957_ID, + _image958_ID, + _image959_ID, + _image960_ID, + _image961_ID, + _image962_ID, + _image963_ID, + _image964_ID, + _image965_ID, + _image966_ID, + _image967_ID, + _image968_ID, + _image969_ID, + _image970_ID, + _image971_ID, + _image972_ID, + _image973_ID, + _image974_ID, + _image975_ID, + _image976_ID, + _image977_ID, + _image978_ID, + _image979_ID, + _image980_ID, + _image981_ID, + _image982_ID_LIGHT, + _image983_ID, + _image984_ID, + _image985_ID, + _image986_ID, + _image987_ID, + _image988_ID, + _image989_ID, + _image990_ID, + _image991_ID, + _image992_ID, + _image993_ID, + _image994_ID, + _image995_ID, + _image996_ID, + _image997_ID, + _image998_ID, + _image999_ID, + _image1000_ID, + _image1001_ID, + _image1002_ID, + _image1003_ID, + _image1004_ID, + _image1005_ID, + _image1006_ID, + _image1007_ID, + _image1008_ID, + _image1009_ID, + _image1010_ID, + _image1011_ID, + _image1012_ID, + _image1013_ID, + _image1014_ID, + _image1015_ID, + _image1016_ID, + _image1017_ID, + _image1018_ID, + _image1019_ID, + _image1020_ID, + _image1021_ID, + _image1022_ID, + _image1023_ID, + _image1024_ID, + _image1025_ID, + _image1026_ID, + _image1027_ID, + _image1028_ID, + _image1029_ID, + _image1030_ID, + _image1031_ID, + _image1032_ID, + _image1033_ID, + _image1034_ID, + _image1035_ID, + _image1036_ID, + _image1037_ID, + _image1038_ID, + _image1039_ID, + _image1040_ID, + _image1041_ID, + _image1042_ID, + _image1043_ID, + _image1044_ID, + _image1045_ID, + _image1046_ID, + _image1047_ID, + _image1048_ID, + _image1049_ID, + _image1050_ID, + _image1051_ID, + _image1052_ID, + _image1053_ID, + _image1054_ID, + _image1055_ID, + _image1056_ID, + _image1057_ID, + _image1058_ID, + _image1059_ID, + _image1060_ID, + _image1061_ID, + _image1062_ID, + _image1063_ID, + _image1064_ID, + _image1065_ID, + _image1066_ID, + _image1067_ID, + _image1068_ID, + _image1069_ID, + _image1070_ID, + _image1071_ID, + _image1072_ID, + _image1073_ID, + _image1074_ID, + _image1075_ID, + _image1076_ID, + _image1077_ID, + _image1078_ID, + _image1079_ID, + _image1080_ID, + _image1081_ID, + _image1082_ID, + _image1083_ID, + _image1084_ID, + _image1085_ID, + _image1086_ID, + _image1087_ID, + _image1088_ID, + _image1089_ID, + _image1090_ID, + _image1091_ID, + _image1092_ID, + _image1093_ID, + _image1094_ID, + _image1095_ID, + _image1096_ID, + _image1097_ID, + _image1098_ID, + _image1099_ID, + _image1100_ID, + _image1101_ID, + _image1102_ID, + _image1103_ID, + _image1104_ID, + _image1105_ID, + _image1106_ID, + _image1107_ID, + _image1108_ID, + _image1109_ID, + _image1110_ID, + _image1111_ID, + _image1112_ID, + _image1113_ID, + _image1114_ID, + _image1115_ID, + _image1116_ID, + _image1117_ID, + _image1118_ID, + _image1119_ID, + _image1120_ID, + _image1121_ID, + _image1122_ID, + _image1123_ID, + _image1124_ID, + _image1125_ID, + _image1126_ID, + _image1127_ID, + _image1128_ID, + _image1129_ID, + _image1130_ID, + _image1131_ID, + _image1132_ID, + _image1133_ID, + _image1134_ID, + _image1135_ID, + _image1136_ID, + _image1137_ID, + _image1138_ID, + _image1139_ID, + _image1140_ID, + _image1141_ID, + _image1142_ID, + _image1143_ID, + _image1144_ID, + _image1145_ID, + _image1146_ID, + _image1147_ID, + _image1148_ID, + _image1149_ID, + _image1150_ID, + _image1151_ID, + _image1152_ID, + _image1153_ID, + _image1154_ID, + _image1155_ID, + _image1156_ID, + _image1157_ID, + _image1158_ID, + _image1159_ID, + _image1160_ID, + _image1161_ID, + _image1162_ID, + _image1163_ID, + _image1164_ID, + _image1165_ID, + _image1166_ID, + _image1167_ID, + _image1168_ID, + _image1169_ID, + _image1170_ID, + _image1171_ID, + _image1172_ID, + _image1173_ID, + _image1174_ID, + _image1175_ID, + _image1176_ID, + _image1177_ID, + _image1178_ID, + _image1179_ID, + _image1180_ID, + _image1181_ID, + _image1182_ID, + _image1183_ID, + _image1184_ID, + _image1185_ID, + _image1186_ID, + _image1187_ID, + _image1188_ID, + _image1189_ID, + _image1190_ID, + _image1191_ID, + _image1192_ID, + _image1193_ID, + _image1194_ID, + _image1195_ID, + _image1196_ID, + _image1197_ID, + _image1198_ID, + _image1199_ID, + _image1200_ID, + _image1201_ID, + _image1202_ID, + _image1203_ID, + _image1204_ID, + _image1205_ID, + _image1206_ID, + _image1207_ID, + _image1208_ID, + _image1209_ID, + _image1210_ID, + _image1211_ID, + _image1212_ID, + _image1213_ID, + _image1214_ID, + _image1215_ID, + _image1216_ID, + _image1217_ID, + _image1218_ID, + _image1219_ID, + _image1220_ID, + _image1221_ID, + _image1222_ID, + _image1223_ID, + _image1224_ID, + _image1225_ID, + _image1226_ID, + _image1227_ID, + _image1228_ID, + _image1229_ID, + _image1230_ID, + _image1231_ID, + _image1232_ID, + _image1233_ID, + _image1234_ID, + _image1235_ID, + _image1236_ID, + _image1237_ID, + _image1238_ID, + _image1239_ID, + _image1240_ID, + _image1241_ID, + _image1242_ID, + _image1243_ID, + _image1244_ID, + _image1245_ID, + _image1246_ID, + _image1247_ID, + _image1248_ID, + _image1249_ID, + _image1250_ID, + _image1251_ID, + _image1252_ID, + _image1253_ID, + _image1254_ID, + _image1255_ID, + _image1256_ID, + _image1257_ID, + _image1258_ID, + _image1259_ID, + _image1260_ID, + _image1261_ID, + _image1262_ID, + _image1263_ID, + _image1264_ID, + _image1265_ID, + _image1266_ID, + _image1267_ID, + _image1268_ID, + _image1269_ID, + _image1270_ID, + _image1271_ID, + _image1272_ID, + _image1273_ID, + _image1274_ID, + _image1275_ID, + _image1276_ID, + _image1277_ID, + _image1278_ID, + _image1279_ID, + _image1280_ID, + _image1281_ID, + _image1282_ID, + _image1283_ID, + _image1284_ID, + _image1285_ID, + _image1286_ID, + _image1287_ID, + _image1288_ID, + _image1289_ID, + _image1290_ID, + _image1291_ID, + _image1292_ID, + _image1293_ID, + _image1294_ID, + _image1295_ID, + _image1296_ID, + _image1297_ID, + _image1298_ID, + _image1299_ID, + _image1300_ID, + _image1301_ID, + _image1302_ID, + _image1303_ID, + _image1304_ID, + _image1305_ID, + _image1306_ID, + _image1307_ID, + _image1308_ID, + _image1309_ID, + _image1310_ID, + _image1311_ID, + _image1312_ID, + _image1313_ID, + _image1314_ID, + _image1315_ID, + _image1316_ID, + _image1317_ID, + _image1318_ID, + _image1319_ID, + _image1320_ID, + _image1321_ID, + _image1322_ID, + _image1323_ID, + _image1324_ID, + _image1325_ID, + _image1326_ID, + _image1327_ID, + _image1328_ID, + _image1329_ID, + _image1330_ID, + _image1331_ID, + _image1332_ID, + _image1333_ID, + _image1334_ID, + _image1335_ID, + _image1336_ID, + _image1337_ID, + _image1338_ID, + _image1339_ID, + _image1340_ID, + _image1341_ID, + _image1342_ID, + _image1343_ID, + _image1344_ID, + _image1345_ID, + _image1346_ID, + _image1347_ID, + _image1348_ID, + _image1349_ID, + _image1350_ID, + _image1351_ID, + _image1352_ID, + _image1353_ID, + _image1354_ID, + _image1355_ID, + _image1356_ID, + _image1357_ID, + _image1358_ID, + _image1359_ID, + _image1360_ID, + _image1361_ID, + _image1362_ID, + _image1363_ID, + _image1364_ID, + _image1365_ID, + _image1366_ID, + _image1367_ID, + _image1368_ID, + _image1369_ID, + _image1370_ID, + _image1371_ID, + _image1372_ID, + _image1373_ID, + _image1374_ID, + _image1375_ID, + _image1376_ID, + _image1377_ID, + _image1378_ID, + _image1379_ID, + _image1380_ID, + _image1381_ID, + _image1382_ID, + _image1383_ID_LIGHT, + _image1384_ID, + _image1385_ID, + _image1386_ID, + _image1387_ID, + _image1388_ID, + _image1389_ID, + _image1390_ID, + _image1391_ID, + _image1392_ID, + _image1393_ID, + _image1394_ID, + _image1395_ID, + _image1396_ID, + _image1397_ID, + _image1398_ID, + _image1399_ID, + _image1400_ID, + _image1401_ID, + _image1402_ID, + _image1403_ID, + _image1404_ID, + _image1405_ID, + _image1406_ID, + _image1407_ID, + _image1408_ID, + _image1409_ID, + _image1410_ID, + _image1411_ID, + _image1412_ID, + _image1413_ID, + _image1414_ID, + _image1415_ID, + _image1416_ID, + _image1417_ID, + _image1418_ID, + _image1419_ID, + _image1420_ID, + _image1421_ID, + _image1422_ID, + _image1423_ID, + _image1424_ID, + _image1425_ID, + _image1426_ID, + _image1427_ID, + _image1428_ID, + _image1429_ID, + _image1430_ID, + _image1431_ID, + _image1432_ID, + _image1433_ID, + _image1434_ID, + _image1435_ID, + _image1436_ID, + _image1437_ID, + _image1438_ID, + _image1439_ID, + _image1440_ID, + _image1441_ID, + _image1442_ID, + _image1443_ID, + _image1444_ID, + _image1445_ID, + _image1446_ID, + _image1447_ID, + _image1448_ID, + _image1449_ID, + _image1450_ID, + _image1451_ID, + _image1452_ID, + _image1453_ID, + _image1454_ID, + _image1455_ID, + _image1456_ID, + _image1457_ID, + _image1458_ID, + _image1459_ID, + _image1460_ID, + _image1461_ID, + _image1462_ID, + _image1463_ID, + _image1464_ID, + _image1465_ID, + _image1466_ID, + _image1467_ID, + _image1468_ID, + _image1469_ID, + _image1470_ID, + _image1471_ID, + _image1472_ID, + _image1473_ID, + _image1474_ID, + _image1475_ID, + _image1476_ID, + _image1477_ID, + _image1478_ID, + _image1479_ID, + _image1480_ID, + _image1481_ID, + _image1482_ID, + _image1483_ID, + _image1484_ID, + _image1485_ID, + _image1486_ID, + _image1487_ID, + _image1488_ID, + _image1489_ID, + _image1490_ID, + _image1491_ID, + _image1492_ID, + _image1493_ID, + _image1494_ID, + _image1495_ID, + _image1496_ID, + _image1497_ID, + _image1498_ID, + _image1499_ID, + _image1500_ID, + _image1501_ID, + _image1502_ID, + _image1503_ID, + _image1504_ID, + _image1505_ID, + _image1506_ID, + _image1507_ID, + _image1508_ID, + _image1509_ID, + _image1510_ID, + _image1511_ID, + _image1512_ID, + _image1513_ID, + _image1514_ID, + _image1515_ID, + _image1516_ID, + _image1517_ID, + _image1518_ID, + _image1519_ID, + _image1520_ID, + _image1521_ID, + _image1522_ID, + _image1523_ID, + _image1524_ID, + _image1525_ID, + _image1526_ID, + _image1527_ID, + _image1528_ID, + _image1529_ID, + _image1530_ID, + _image1531_ID, + _image1532_ID, + _image1533_ID, + _image1534_ID, + _image1535_ID, + _image1536_ID, + _image1537_ID, + _image1538_ID, + _image1539_ID, + _image1540_ID, + _image1541_ID, + _image1542_ID, + _image1543_ID, + _image1544_ID, + _image1545_ID, + _image1546_ID, + _image1547_ID, + _image1548_ID, + _image1549_ID, + _image1550_ID, + _image1551_ID, + _image1552_ID, + _image1553_ID, + _image1554_ID, + _image1555_ID, + _image1556_ID, + _image1557_ID, + _image1558_ID, + _image1559_ID, + _image1560_ID, + _image1561_ID, + _image1562_ID, + _image1563_ID, + _image1564_ID, + _image1565_ID, + _image1566_ID, + _image1567_ID, + _image1568_ID, + _image1569_ID, + _image1570_ID, + _image1571_ID, + _image1572_ID, + _image1573_ID, + _image1574_ID, + _image1575_ID, + _image1576_ID, + _image1577_ID, + _image1578_ID, + _image1579_ID, + _image1580_ID, + _image1581_ID, + _image1582_ID, + _image1583_ID, + _image1584_ID, + _image1585_ID, + _image1586_ID, + _image1587_ID, + _image1588_ID, + _image1589_ID, + _image1590_ID, + _image1591_ID, + _image1592_ID, + _image1593_ID, + _image1594_ID, + _image1595_ID, + _image1596_ID, + _image1597_ID, + _image1598_ID, + _image1599_ID, + _image1600_ID, + _image1601_ID, + _image1602_ID, + _image1603_ID, + _image1604_ID, + _image1605_ID, + _image1606_ID, + _image1607_ID, + _image1608_ID, + _image1609_ID, + _image1610_ID, + _image1611_ID, + _image1612_ID, + _image1613_ID, + _image1614_ID, + _image1615_ID, + _image1616_ID, + _image1617_ID, + _image1618_ID, + _image1619_ID, + _image1620_ID, + _image1621_ID, + _image1622_ID, + _image1623_ID, + _image1624_ID, + _image1625_ID, + _image1626_ID, + _image1627_ID, + _image1628_ID, + _image1629_ID, + _image1630_ID, + _image1631_ID, + _image1632_ID, + _image1633_ID, + _image1634_ID, + _image1635_ID, + _image1636_ID, + _image1637_ID, + _image1638_ID, + _image1639_ID, + _image1640_ID, + _image1641_ID, + _image1642_ID, + _image1643_ID, + _image1644_ID, + _image1645_ID, + _image1646_ID, + _image1647_ID, + _image1648_ID, + _image1649_ID, + _image1650_ID, + _image1651_ID, + _image1652_ID, + _image1653_ID, + _image1654_ID, + _image1655_ID, + _image1656_ID, + _image1657_ID, + _image1658_ID, + _image1659_ID, + _image1660_ID, + _image1661_ID, + _image1662_ID, + _image1663_ID, + _image1664_ID, + _image1665_ID, + _image1666_ID, + _image1667_ID, + _image1668_ID, + _image1669_ID, + _image1670_ID, + _image1671_ID, + _image1672_ID, + _image1673_ID, + _image1674_ID, + _image1675_ID, + _image1676_ID, + _image1677_ID, + _image1678_ID, + _image1679_ID, + _image1680_ID, + _image1681_ID, + _image1682_ID, + _image1683_ID, + _image1684_ID, + _image1685_ID, + _image1686_ID, + _image1687_ID, + _image1688_ID, + _image1689_ID, + _image1690_ID, + _image1691_ID, + _image1692_ID, + _image1693_ID, + _image1694_ID, + _image1695_ID, + _image1696_ID, + _image1697_ID, + _image1698_ID, + _image1699_ID, + _image1700_ID, + _image1701_ID, + _image1702_ID, + _image1703_ID, + _image1704_ID, + _image1705_ID, + _image1706_ID, + _image1707_ID, + _image1708_ID, + _image1709_ID, + _image1710_ID, + _image1711_ID, + _image1712_ID, + _image1713_ID, + _image1714_ID, + _image1715_ID, + _image1716_ID, + _image1717_ID, + _image1718_ID, + _image1719_ID, + _image1720_ID, + _image1721_ID, + _image1722_ID, + _image1723_ID, + _image1724_ID, + _image1725_ID, + _image1726_ID, + _image1727_ID, + _image1728_ID, + _image1729_ID, + _image1730_ID, + _image1731_ID, + _image1732_ID, + _image1733_ID, + _image1734_ID, + _image1735_ID, + _image1736_ID, + _image1737_ID, + _image1738_ID, + _image1739_ID, + _image1740_ID, + _image1741_ID, + _image1742_ID, + _image1743_ID, + _image1744_ID, + _image1745_ID, + _image1746_ID, + _image1747_ID, + _image1748_ID, + _image1749_ID, + _image1750_ID, + _image1751_ID, + _image1752_ID, + _image1753_ID, + _image1754_ID, + _image1755_ID, + _image1756_ID, + _image1757_ID, + _image1758_ID, + _image1759_ID, + _image1760_ID, + _image1761_ID, + _image1762_ID, + _image1763_ID, + _image1764_ID, + _image1765_ID, + _image1766_ID, + _image1767_ID, + _image1768_ID, + _image1769_ID, + _image1770_ID, + _image1771_ID, + _image1772_ID, + _image1773_ID, + _image1774_ID, + _image1775_ID, + _image1776_ID, + _image1777_ID, + _image1778_ID, + _image1779_ID, + _image1780_ID, + _image1781_ID, + _image1782_ID, + _image1783_ID, + _image1784_ID, + _image1785_ID, + _image1786_ID, + _image1787_ID, + _image1788_ID, + _image1789_ID, + _image1790_ID, + _image1791_ID, + _image1792_ID, + _image1793_ID, + _image1794_ID, + _image1795_ID, + _image1796_ID, + _image1797_ID, + _image1798_ID, + _image1799_ID, + _image1800_ID, + _image1801_ID, + _image1802_ID, + _image1803_ID, + _image1804_ID, + _image1805_ID, + _image1806_ID, + _image1807_ID, + _image1808_ID, + _image1809_ID, + _image1810_ID, + _image1811_ID, + _image1812_ID, + _image1813_ID, + _image1814_ID, + _image1815_ID, + _image1816_ID, + _image1817_ID, + _image1818_ID, + _image1819_ID, + _image1820_ID, + _image1821_ID, + _image1822_ID, + _image1823_ID, + _image1824_ID, + _image1825_ID, + _image1826_ID, + _image1827_ID, + _image1828_ID, + _image1829_ID, + _image1830_ID, + _image1831_ID, + _image1832_ID, + _image1833_ID, + _image1834_ID, + _image1835_ID, + _image1836_ID, + _image1837_ID, + _image1838_ID, + _image1839_ID, + _image1840_ID, + _image1841_ID, + _image1842_ID, + _image1843_ID, + _image1844_ID, + _image1845_ID, + _image1846_ID, + _image1847_ID, + _image1848_ID, + _image1849_ID, + _image1850_ID, + _image1851_ID, + _image1852_ID, + _image1853_ID, + _image1854_ID, + _image1855_ID, + _image1856_ID, + _image1857_ID, + _image1858_ID, + _image1859_ID, + _image1860_ID, + _image1861_ID, + _image1862_ID, + _image1863_ID, + _image1864_ID, + _image1865_ID, + _image1866_ID, + _image1867_ID, + _image1868_ID, + _image1869_ID, + _image1870_ID, + _image1871_ID, + _image1872_ID, + _image1873_ID, + _image1874_ID, + _image1875_ID, + _image1876_ID, + _image1877_ID, + _image1878_ID, + _image1879_ID, + _image1880_ID, + _image1881_ID, + _image1882_ID, + _image1883_ID, + _image1884_ID, + _image1885_ID, + _image1886_ID, + _image1887_ID, + _image1888_ID, + _image1889_ID, + _image1890_ID, + _image1891_ID, + _image1892_ID, + _image1893_ID, + _image1894_ID, + _image1895_ID, + _image1896_ID, + _image1897_ID, + _image1898_ID, + _image1899_ID, + _image1900_ID, + _image1901_ID, + _image1902_ID, + _image1903_ID, + _image1904_ID, + _image1905_ID, + _image1906_ID, + _image1907_ID, + _image1908_ID, + _image1909_ID, + _image1910_ID, + _image1911_ID, + _image1912_ID, + _image1913_ID, + _image1914_ID, + _image1915_ID, + _image1916_ID, + _image1917_ID, + _image1918_ID, + _image1919_ID, + _image1920_ID, + _image1921_ID, + _image1922_ID, + _image1923_ID, + _image1924_ID, + _image1925_ID, + _image1926_ID, + _image1927_ID, + _image1928_ID, + _image1929_ID, + _image1930_ID, + _image1931_ID, + _image1932_ID, + _image1933_ID, + _image1934_ID, + _image1935_ID, + _image1936_ID, + _image1937_ID, + _image1938_ID, + _image1939_ID, + _image1940_ID, + _image1941_ID, + _image1942_ID, + _image1943_ID, + _image1944_ID, + _image1945_ID, + _image1946_ID, + _image1947_ID, + _image1948_ID, + _image1949_ID, + _image1950_ID, + _image1951_ID, + _image1952_ID, + _image1953_ID, + _image1954_ID, + _image1955_ID, + _image1956_ID, + _image1957_ID, + _image1958_ID, + _image1959_ID, + _image1960_ID, + _image1961_ID, + _image1962_ID, + _image1963_ID, + _image1964_ID, + _image1965_ID, + _image1966_ID, + _image1967_ID, + _image1968_ID, + _image1969_ID, + _image1970_ID, + _image1971_ID, + _image1972_ID, + _image1973_ID, + _image1974_ID, + _image1975_ID, + _image1976_ID, + _image1977_ID, + _image1978_ID, + _image1979_ID, + _image1980_ID, + _image1981_ID, + _image1982_ID, + _image1983_ID, + _image1984_ID, + _image1985_ID, + _image1986_ID, + _image1987_ID, + _image1988_ID, + _image1989_ID, + _image1990_ID, + _image1991_ID, + _image1992_ID, + _image1993_ID, + _image1994_ID, + _image1995_ID, + _image1996_ID, + _image1997_ID, + _image1998_ID, + _image1999_ID, + _image2000_ID, + _image2001_ID, + _image2002_ID, + _image2003_ID, + _image2004_ID, + _image2005_ID, + _image2006_ID, + _image2007_ID, + _image2008_ID, + _image2009_ID, + _image2010_ID, + _image2011_ID, + _image2012_ID, + _image2013_ID, + _image2014_ID, + _image2015_ID, + _image2016_ID, + _image2017_ID, + _image2018_ID, + _image2019_ID, + _image2020_ID, + _image2021_ID, + _image2022_ID, + _image2023_ID, + _image2024_ID, + _image2025_ID, + _image2026_ID, + _image2027_ID, + _image2028_ID, + _image2029_ID, + _image2030_ID, + _image2031_ID, + _image2032_ID, + _image2033_ID, + _image2034_ID, + _image2035_ID, + _image2036_ID, + _image2037_ID, + _image2038_ID, + _image2039_ID, + _image2040_ID, + _image2041_ID, + _image2042_ID, + _image2043_ID, + _image2044_ID, + _image2045_ID, + _image2046_ID, + _image2047_ID, + _image2048_ID, + _image2049_ID, + _image2050_ID, + _image2051_ID, + _image2052_ID, + _image2053_ID, + _image2054_ID, + _image2055_ID, + _image2056_ID, + _image2057_ID, + _image2058_ID, + _image2059_ID, + _image2060_ID, + _image2061_ID, + _image2062_ID, + _image2063_ID, + _image2064_ID, + _image2065_ID, + _image2066_ID, + _image2067_ID, + _image2068_ID, + _image2069_ID, + _image2070_ID, + _image2071_ID, + _image2072_ID, + _image2073_ID, + _image2074_ID, + _image2075_ID, + _image2076_ID, + _image2077_ID, + _image2078_ID, + _image2079_ID, + _image2080_ID, + _image2081_ID, + _image2082_ID, + _image2083_ID, + _image2084_ID, + _image2085_ID, + _image2086_ID, + _image2087_ID, + _image2088_ID, + _image2089_ID, + _image2090_ID, + _image2091_ID, + _image2092_ID, + _image2093_ID, + _image2094_ID, + _image2095_ID, + _image2096_ID, + _image2097_ID, + _image2098_ID, + _image2099_ID, + _image2100_ID, + _image2101_ID, + _image2102_ID, + _image2103_ID, + _image2104_ID, + _image2105_ID, + _image2106_ID, + _image2107_ID, + _image2108_ID, + _image2109_ID, + _image2110_ID, + _image2111_ID, + _image2112_ID, + _image2113_ID, + _image2114_ID, + _image2115_ID, + _image2116_ID, + _image2117_ID, + _image2118_ID, + _image2119_ID, + _image2120_ID, + _image2121_ID, + _image2122_ID, + _image2123_ID, + _image2124_ID, + _image2125_ID, + _image2126_ID, + _image2127_ID, + _image2128_ID, + _image2129_ID, + _image2130_ID, + _image2131_ID, + _image2132_ID, + _image2133_ID, + _image2134_ID, + _image2135_ID, + _image2136_ID, + _image2137_ID, + _image2138_ID, + _image2139_ID, + _image2140_ID, + _image2141_ID, + _image2142_ID, + _image2143_ID, + _image2144_ID, + _image2145_ID, + _image2146_ID, + _image2147_ID, + _image2148_ID, + _image2149_ID, + _image2150_ID, + _image2151_ID, + _image2152_ID, + _image2153_ID, + _image2154_ID, + _image2155_ID, + _image2156_ID, + _image2157_ID, + _image2158_ID, + _image2159_ID, + _image2160_ID, + _image2161_ID, + _image2162_ID, + _image2163_ID, + _image2164_ID, + _image2165_ID, + _image2166_ID, + _image2167_ID, + _image2168_ID, + _image2169_ID, + _image2170_ID, + _image2171_ID, + _image2172_ID, + _image2173_ID, + _image2174_ID, + _image2175_ID, + _image2176_ID, + _image2177_ID, + _image2178_ID, + _image2179_ID, + _image2180_ID, + _image2181_ID, + _image2182_ID, + _image2183_ID, + _image2184_ID, + _image2185_ID, + _image2186_ID, + _image2187_ID, + _image2188_ID, + _image2189_ID, + _image2190_ID, + _image2191_ID, + _image2192_ID, + _image2193_ID, + _image2194_ID, + _image2195_ID, + _image2196_ID, + _image2197_ID, + _image2198_ID, + _image2199_ID, + _image2200_ID, + _image2201_ID, + _image2202_ID, + _image2203_ID, + _image2204_ID, + _image2205_ID, + _image2206_ID, + _image2207_ID, + _image2208_ID, + _image2209_ID, + _image2210_ID, + _image2211_ID, + _image2212_ID, + _image2213_ID, + _image2214_ID, + _image2215_ID, + _image2216_ID, + _image2217_ID, + _image2218_ID, + _image2219_ID, + _image2220_ID, + _image2221_ID, + _image2222_ID, + _image2223_ID, + _image2224_ID, + _image2225_ID, + _image2226_ID, + _image2227_ID, + _image2228_ID, + _image2229_ID, + _image2230_ID, + _image2231_ID, + _image2232_ID, + _image2233_ID, + _image2234_ID, + _image2235_ID, + _image2236_ID, + _image2237_ID, + _image2238_ID, + _image2239_ID, + _image2240_ID, + _image2241_ID, + _image2242_ID, + _image2243_ID, + _image2244_ID, + _image2245_ID, + _image2246_ID, + _image2247_ID, + _image2248_ID, + _image2249_ID, + _image2250_ID, + _image2251_ID, + _image2252_ID, + _image2253_ID, + _image2254_ID, + _image2255_ID, + _image2256_ID, + _image2257_ID, + _image2258_ID, + _image2259_ID, + _image2260_ID, + _image2261_ID, + _image2262_ID, + _image2263_ID, + _image2264_ID, + _image2265_ID, + _image2266_ID, + _image2267_ID, + _image2268_ID, + _image2269_ID, + _image2270_ID, + _image2271_ID, + _image2272_ID, + _image2273_ID, + _image2274_ID, + _image2275_ID, + _image2276_ID, + _image2277_ID, + _image2278_ID, + _image2279_ID, + _image2280_ID, + _image2281_ID, + _image2282_ID, + _image2283_ID, + _image2284_ID, + _image2285_ID, + _image2286_ID, + _image2287_ID, + _image2288_ID, + _image2289_ID, + _image2290_ID, + _image2291_ID, + _image2292_ID, + _image2293_ID, + _image2294_ID, + _image2295_ID, + _image2296_ID, + _image2297_ID, + _image2298_ID, + _image2299_ID, + _image2300_ID, + _image2301_ID, + _image2302_ID, + _image2303_ID, + _image2304_ID, + _image2305_ID, + _image2306_ID, + _image2307_ID, + _image2308_ID, + _image2309_ID, + _image2310_ID, + _image2311_ID, + _image2312_ID, + _image2313_ID, + _image2314_ID, + _image2315_ID, + _image2316_ID, + _image2317_ID, + _image2318_ID, + _image2319_ID, + _image2320_ID, + _image2321_ID, + _image2322_ID, + _image2323_ID, + _image2324_ID, + _image2325_ID, + _image2326_ID, + _image2327_ID, + _image2328_ID, + _image2329_ID, + _image2330_ID, + _image2331_ID, + _image2332_ID, + _image2333_ID, + _image2334_ID, + _image2335_ID, + _image2336_ID, + _image2337_ID, + _image2338_ID, + _image2339_ID, + _image2340_ID, + _image2341_ID, + _image2342_ID, + _image2343_ID, + _image2344_ID, + _image2345_ID, + _image2346_ID, + _image2347_ID, + _image2348_ID, + _image2349_ID, + _image2350_ID, + _image2351_ID, + _image2352_ID, + _image2353_ID, + _image2354_ID, + _image2355_ID, + _image2356_ID, + _image2357_ID, + _image2358_ID, + _image2359_ID, + _image2360_ID, + _image2361_ID, + _image2362_ID, + _image2363_ID, + _image2364_ID, + _image2365_ID, + _image2366_ID, + _image2367_ID, + _image2368_ID, + _image2369_ID, + _image2370_ID, + _image2371_ID, + _image2372_ID, + _image2373_ID, + _image2374_ID, + _image2375_ID, + _image2376_ID, + _image2377_ID, + _image2378_ID, + _image2379_ID, + _image2380_ID, + _image2381_ID, + _image2382_ID, + _image2383_ID, + _image2384_ID, + _image2385_ID, + _image2386_ID, + _image2387_ID, + _image2388_ID, + _image2389_ID, + _image2390_ID, + _image2391_ID, + _image2392_ID, + _image2393_ID, + _image2394_ID, + _image2395_ID, + _image2396_ID, + _image2397_ID, + _image2398_ID, + _image2399_ID, + _image2400_ID, + _image2401_ID, + _image2402_ID, + _image2403_ID, + _image2404_ID, + _image2405_ID, + _image2406_ID, + _image2407_ID, + _image2408_ID, + _image2409_ID, + _image2410_ID, + _image2411_ID, + _image2412_ID, + _image2413_ID, + _image2414_ID, + _image2415_ID, + _image2416_ID, + _image2417_ID, + _image2418_ID, + _image2419_ID, + _image2420_ID, + _image2421_ID, + _image2422_ID, + _image2423_ID, + _image2424_ID, + _image2425_ID, + _image2426_ID, + _image2427_ID, + _image2428_ID, + _image2429_ID, + _image2430_ID, + _image2431_ID, + _image2432_ID, + _image2433_ID, + _image2434_ID, + _image2435_ID, + _image2436_ID, + _image2437_ID, + _image2438_ID, + _image2439_ID, + _image2440_ID, + _image2441_ID, + _image2442_ID, + _image2443_ID, + _image2444_ID, + _image2445_ID, + _image2446_ID, + _image2447_ID, + _image2448_ID, + _image2449_ID, + _image2450_ID, + _image2451_ID, + _image2452_ID, + _image2453_ID, + _image2454_ID, + _image2455_ID, + _image2456_ID, + _image2457_ID, + _image2458_ID, + _image2459_ID, + _image2460_ID, + _image2461_ID, + _image2462_ID, + _image2463_ID, + _image2464_ID, + _image2465_ID, + _image2466_ID, + _image2467_ID, + _image2468_ID, + _image2469_ID, + _image2470_ID, + _image2471_ID, + _image2472_ID, + _image2473_ID, + _image2474_ID, + _image2475_ID, + _image2476_ID, + _image2477_ID, + _image2478_ID, + _image2479_ID, + _image2480_ID, + _image2481_ID, + _image2482_ID, + _image2483_ID, + _image2484_ID, + _image2485_ID, + _image2486_ID, + _image2487_ID, + _image2488_ID, + _image2489_ID, + _image2490_ID, + _image2491_ID, + _image2492_ID, + _image2493_ID, + _image2494_ID, + _image2495_ID, + _image2496_ID, + _image2497_ID, + _image2498_ID, + _image2499_ID, + _image2500_ID, + _image2501_ID, + _image2502_ID, + _image2503_ID, + _image2504_ID, + _image2505_ID, + _image2506_ID, + _image2507_ID, + _image2508_ID, + _image2509_ID, + _image2510_ID, + _image2511_ID, + _image2512_ID, + _image2513_ID, + _image2514_ID, + _image2515_ID, + _image2516_ID, + _image2517_ID, + _image2518_ID, + _image2519_ID, + _image2520_ID, + _image2521_ID, + _image2522_ID, + _image2523_ID, + _image2524_ID, + _image2525_ID, + _image2526_ID, + _image2527_ID, + _image2528_ID, + _image2529_ID, + _image2530_ID, + _image2531_ID, + _image2532_ID, + _image2533_ID, + _image2534_ID, + _image2535_ID, + _image2536_ID, + _image2537_ID, + _image2538_ID, + _image2539_ID, + _image2540_ID, + _image2541_ID, + _image2542_ID, + _image2543_ID, + _image2544_ID, + _image2545_ID, + _image2546_ID, + _image2547_ID, + _image2548_ID, + _image2549_ID, + _image2550_ID, + _image2551_ID, + _image2552_ID, + _image2553_ID, + _image2554_ID, + _image2555_ID, + _image2556_ID, + _image2557_ID, + _image2558_ID, + _image2559_ID, + _image2560_ID, + _image2561_ID, + _image2562_ID, + _image2563_ID, + _image2564_ID, + _image2565_ID, + _image2566_ID, + _image2567_ID, + _image2568_ID, + _image2569_ID, + _image2570_ID, + _image2571_ID, + _image2572_ID, + _image2573_ID, + _image2574_ID, + _image2575_ID, + _image2576_ID, + _image2577_ID, + _image2578_ID, + _image2579_ID, + _image2580_ID, + _image2581_ID, + _image2582_ID, + _image2583_ID, + _image2584_ID, + _image2585_ID, + _image2586_ID, + _image2587_ID, + _image2588_ID, + _image2589_ID, + _image2590_ID, + _image2591_ID, + _image2592_ID, + _image2593_ID, + _image2594_ID, + _image2595_ID, + _image2596_ID, + _image2597_ID, + _image2598_ID, + _image2599_ID, + _image2600_ID, + _image2601_ID, + _image2602_ID, + _image2603_ID, + _image2604_ID, + _image2605_ID, + _image2606_ID, + _image2607_ID, + _image2608_ID, + _image2609_ID, + _image2610_ID, + _image2611_ID, + _image2612_ID, + _image2613_ID, + _image2614_ID, + _image2615_ID, + _image2616_ID, + _image2617_ID, + _image2618_ID, + _image2619_ID, + _image2620_ID, + _image2621_ID, + _image2622_ID, + _image2623_ID, + _image2624_ID, + _image2625_ID, + _image2626_ID, + _image2627_ID, + _image2628_ID, + _image2629_ID, + _image2630_ID, + _image2631_ID, + _image2632_ID, + _image2633_ID, + _image2634_ID, + _image2635_ID, + _image2636_ID, + _image2637_ID, + _image2638_ID, + _image2639_ID, + _image2640_ID, + _image2641_ID, + _image2642_ID, + _image2643_ID, + _image2644_ID, + _image2645_ID, + _image2646_ID, + _image2647_ID, + _image2648_ID, + _image2649_ID, + _image2650_ID, + _image2651_ID, + _image2652_ID, + _image2653_ID, + _image2654_ID, + _image2655_ID, + _image2656_ID, + _image2657_ID, + _image2658_ID, + _image2659_ID, + _image2660_ID, + _image2661_ID, + _image2662_ID, + _image2663_ID, + _image2664_ID, + _image2665_ID, + _image2666_ID, + _image2667_ID, + _image2668_ID, + _image2669_ID, + _image2670_ID, + _image2671_ID, + _image2672_ID, + _image2673_ID, + _image2674_ID, + _image2675_ID, + _image2676_ID, + _image2677_ID, + _image2678_ID, + _image2679_ID, + _image2680_ID, + _image2681_ID, + _image2682_ID, + _image2683_ID, + _image2684_ID, + _image2685_ID, + _image2686_ID, + _image2687_ID, + _image2688_ID, + _image2689_ID, + _image2690_ID, + _image2691_ID, + _image2692_ID, + _image2693_ID, + _image2694_ID, + _image2695_ID, + _image2696_ID, + _image2697_ID, + _image2698_ID +} IMAGEIDS; + + #endif diff --git a/assets/obseg/bg/bg_all_p.h b/assets/obseg/bg/bg_all_p.h index f728c45..a3f51d4 100644 --- a/assets/obseg/bg/bg_all_p.h +++ b/assets/obseg/bg/bg_all_p.h @@ -31,7 +31,7 @@ struct portal_data_table_entry u16 control_bytes; }; -struct xyzpoint +struct coord { float x; float y; @@ -45,7 +45,7 @@ struct portal_3_point char padding1; char padding2; char padding3; - struct xyzpoint points[3]; + struct coord points[3]; }; struct portal_4_point @@ -54,7 +54,7 @@ struct portal_4_point char padding1; char padding2; char padding3; - struct xyzpoint points[4]; + struct coord points[4]; }; struct portal_5_point @@ -63,7 +63,7 @@ struct portal_5_point char padding1; char padding2; char padding3; - struct xyzpoint points[5]; + struct coord points[5]; }; struct portal_6_point @@ -72,7 +72,7 @@ struct portal_6_point char padding1; char padding2; char padding3; - struct xyzpoint points[6]; + struct coord points[6]; }; extern struct room_data_table_entry room_data_table[]; diff --git a/assets/obseg/brief/UbrieftraZ.c b/assets/obseg/brief/UbrieftraZ.c index 3f1b147..c823c6d 100644 --- a/assets/obseg/brief/UbrieftraZ.c +++ b/assets/obseg/brief/UbrieftraZ.c @@ -8,7 +8,7 @@ struct BriefStruct UbrieftraZ = { TEXT(LTRA, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LTRA, 4), DIFFICULTY_AGENT}, /* Destroy break units */ + {TEXT(LTRA, 4), DIFFICULTY_AGENT}, /* Destroy brake units */ {TEXT(LTRA, 5), DIFFICULTY_AGENT}, /* Rescue Natalya */ {TEXT(LTRA, 6), DIFFICULTY_SECRET}, /* Locate Janus secret base */ {TEXT(LTRA, 7), DIFFICULTY_00}, /* Crack Boris' password */ diff --git a/clean_baserom.sh b/clean_baserom.sh index 84121a9..5342dc8 100755 --- a/clean_baserom.sh +++ b/clean_baserom.sh @@ -19,7 +19,7 @@ if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then fi if [ "$DOALL" == "1" ] || [ $1 == 'images' ]; then - while IFS=, read -r offset size name + while IFS=, read -r offset size name compressed extract do echo "removing $name" rm -f $name diff --git a/extract_baserom.u.sh b/extract_baserom.u.sh index 6a8e79b..a2922e5 100644 --- a/extract_baserom.u.sh +++ b/extract_baserom.u.sh @@ -1,40 +1,83 @@ #!/bin/bash -if [ -z "$1" ]; then - DOALL="1" - echo "Processing Everything" + +#set defaults +DOALL="1" +BASEROM="baserom.u.z64" + +clear + +if [ -z "$2" ]; then + if [ -z "$1" ]; then + #No Args + echo "Processing Everything" + elif [ "$1" = "files" ] || [ "$1" = "images" ]; then + #Arg1 is "files" or "images" + DOALL="0" + echo "Processing $1 Only" + else + #Arg1 is ROM + BASEROM=$1 + echo "Processing Everything using $BASEROM" + fi +else + BASEROM=$2 + if [ "$1" = "files" ] || [ "$1" != "images" ]; then + #Arg1 is "files" or "images + DOALL="0" + echo "Processing $1 Only using $BASEROM" + else + echo "Processing Everything using $BASEROM" + fi fi + true="1" -mkdir assets assets/font assets/images assets/images/split assets/music assets/ramrom assets/obseg assets/obseg/bg assets/obseg/brief assets/obseg/chr assets/obseg/gun assets/obseg/prop assets/obseg/setup assets/obseg/setup/u assets/obseg/stan assets/obseg/text assets/obseg/text/u + +DIRs='assets assets/font assets/images assets/images/split assets/music assets/ramrom assets/obseg assets/obseg/bg assets/obseg/brief assets/obseg/chr assets/obseg/gun assets/obseg/prop assets/obseg/setup assets/obseg/setup/u assets/obseg/stan assets/obseg/text assets/obseg/text/u' + +for DIR in $DIRs +do + # if dir not exist, make + if [ ! -d $DIR ]; then + mkdir $DIR + fi +done + +#build/rebuild extractor +[ ! -x tools/extractor/extractor ] && make -C tools/extractor if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then echo "Processing Files" - while IFS=, read -r offset size name compressed extract - do - if [ "$extract" == "$true" ]; then - if [ "$compressed" == "$true" ]; then - echo "Extracting compressed $name, $size bytes..." - dd bs=1 skip=$offset count=$size if=baserom.u.z64 of=$name status=none - # Add the gZip Header to a new file using the name given in command - echo -n -e \\x1F\\x8B\\x08\\x00\\x00\\x00\\x00\\x00\\x02\\x03 > $name.temp - # Add the contents of the compressed file minus the 1172 to the new file - cat $name | tail --bytes=+3 >> $name.temp - # copy the new file over the old compressed file - cat $name.temp > $name.zip - # decompress the Z file to the filename given in the command - cat $name.zip | gzip --quiet --decompress > $name.bin - # remove the compressed Z file - rm $name.temp $name.zip $name - echo "Successfully Decompressed $name" + if [ -x tools/extractor/extractor ]; then + tools/extractor/extractor "$BASEROM" filelist.u.csv + else + while IFS=, read -r offset size name compressed extract + do + if [ "$extract" == "$true" ]; then + if [ "$compressed" == "$true" ]; then + echo "Extracting compressed $name, $size bytes..." + dd bs=1 skip=$offset count=$size if="$BASEROM" of=$name status=none + # Add the gZip Header to a new file using the name given in command + echo -n -e \\x1F\\x8B\\x08\\x00\\x00\\x00\\x00\\x00\\x02\\x03 > $name.temp + # Add the contents of the compressed file minus the 1172 to the new file + cat $name | tail --bytes=+3 >> $name.temp + # copy the new file over the old compressed file + cat $name.temp > $name.zip + # decompress the Z file to the filename given in the command + cat $name.zip | gzip --quiet --decompress > $name + # remove the compressed Z file + rm $name.temp $name.zip + echo "Successfully Decompressed $name" + else + echo "Extracting uncompressed $name, $size bytes..." + dd bs=1 skip=$offset count=$size if="$BASEROM" of=$name status=none + echo "Successfully Extracted $name" + fi else - echo "Extracting uncompressed $name, $size bytes..." - dd bs=1 skip=$offset count=$size if=baserom.u.z64 of=$name status=none - echo "Successfully Extracted $name" + echo "skip $name" fi - else - echo "skip $name" - fi - done < filelist.u.csv + done < filelist.u.csv + fi #filelist.u.csv should follow pattern of: #offset,size,name,compressed,extract #formatting matters, no comments, no extra lines, unix line endings only @@ -42,15 +85,19 @@ if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then fi if [ "$DOALL" == "1" ] || [ $1 == 'images' ]; then - echo "Processing Imagess" - while IFS=, read -r offset size name - do - echo "Extracting $name, $size bytes..." - dd bs=1 skip=$offset count=$size if=baserom.u.z64 of=$name status=none - echo "Successfully Extracted $name" - done < imagelist.u.csv + echo "Processing Images" + if [ -x tools/extractor/extractor ]; then + tools/extractor/extractor "$BASEROM" imagelist.u.csv + else + while IFS=, read -r offset size name + do + echo "Extracting $name, $size bytes..." + dd bs=1 skip=$offset count=$size if="$BASEROM" of=$name status=none + echo "Successfully Extracted $name" + done < imagelist.u.csv + fi #imageslist.u.csv should follow pattern of: - #offset,size,name + #offset,size,name,compressed,extract #formatting matters, no comments, no extra lines, unix line endings only #and always end with a newline fi diff --git a/filelist.u.csv b/filelist.u.csv index c50219e..9f31eaf 100644 --- a/filelist.u.csv +++ b/filelist.u.csv @@ -30,69 +30,69 @@ 3901424,397216,assets/music/instruments.tbl,0,1 4298640,4,assets/music/number_music_samples,0,0 4298644,504,assets/music/table_music_data.bin,0,0 -4299148,42,assets/music/Mno_music,1,1 -4299190,470,assets/music/Msolo_death_abrev,1,1 -4299660,2222,assets/music/Mintro_eye,1,1 -4301882,3050,assets/music/Mtrain,1,1 -4304932,3488,assets/music/Mdepot,1,1 -4308420,3480,assets/music/Mjungle_unused,1,1 -4311900,3520,assets/music/Mcitadel,1,1 -4315420,2766,assets/music/Mfacility,1,1 -4318186,2910,assets/music/Mcontrol,1,1 -4321096,3588,assets/music/Mdam,1,1 -4324684,3552,assets/music/Mfrigate,1,1 -4328236,2388,assets/music/Marchives,1,1 -4330624,3696,assets/music/Msilo,1,1 -4334320,3948,assets/music/Mjungle_perimeter_unused,1,1 -4338268,3330,assets/music/Mstreets,1,1 -4341598,1650,assets/music/Mbunker1,1,1 -4343248,1664,assets/music/Mbunker2,1,1 -4344912,2456,assets/music/Mstatue,1,1 -4347368,2522,assets/music/Melevator_control,1,1 -4349890,3424,assets/music/Mcradle,1,1 -4353314,42,assets/music/Mnull1,1,1 -4353356,1606,assets/music/Melevator_wc,1,1 -4354962,3482,assets/music/Megyptian,1,1 -4358444,994,assets/music/Mfolders,1,1 -4359438,498,assets/music/Mwatchmusic,1,1 -4359936,3186,assets/music/Maztec,1,1 -4363122,3628,assets/music/Mwatercaverns,1,1 -4366750,870,assets/music/Mdeathsolo,1,1 -4367620,3510,assets/music/Msurface2,1,1 -4371130,2208,assets/music/Mtrainx,1,1 -4373338,42,assets/music/Mnull2,1,1 -4373380,2392,assets/music/Mfacilityx,1,1 -4375772,1980,assets/music/Mdepotx,1,1 -4377752,1352,assets/music/Mcontrolx,1,1 -4379104,1876,assets/music/Mwatercavernsx,1,1 -4380980,1312,assets/music/Mdamx,1,1 -4382292,1474,assets/music/Mfrigatex,1,1 -4383766,1828,assets/music/Marchivesx,1,1 -4385594,2292,assets/music/Msilox,1,1 -4387886,42,assets/music/Mnull3,1,1 -4387928,1644,assets/music/Mstreetsx,1,1 -4389572,1958,assets/music/Mbunker1x,1,1 -4391530,1614,assets/music/Mbunker2x,1,1 -4393144,2070,assets/music/Mjunglex,1,1 -4395214,1074,assets/music/Mnint_rare_logo,1,1 -4396288,1720,assets/music/Mstatuex,1,1 -4398008,2262,assets/music/Maztecx,1,1 -4400270,2224,assets/music/Megyptianx,1,1 -4402494,1738,assets/music/Mcradlex,1,1 -4404232,2122,assets/music/Mcuba,1,1 -4406354,3358,assets/music/Mrunway,1,1 -4409712,730,assets/music/Mrunway_plane,1,1 -4410442,1832,assets/music/Msurface2x,1,1 -4412274,1314,assets/music/Mwindblowing,1,1 -4413588,524,assets/music/Mmultideath_alt,1,1 -4414112,1928,assets/music/Mjungle,1,1 -4416040,1570,assets/music/Mrunwayx,1,1 -4417610,3432,assets/music/Msurface1,1,1 -4421042,712,assets/music/Mmultiplayerdeath,1,1 -4421754,1832,assets/music/Msurface1x,1,1 -4423586,668,assets/music/Msurface2_ending,1,1 -4424254,358,assets/music/Mstatue_ending,1,1 -4424612,700,assets/music/Mfrigate_outro,1,1 +4299148,42,assets/music/Mno_music.bin,1,1 +4299190,470,assets/music/Msolo_death_abrev.bin,1,1 +4299660,2222,assets/music/Mintro_eye.bin,1,1 +4301882,3050,assets/music/Mtrain.bin,1,1 +4304932,3488,assets/music/Mdepot.bin,1,1 +4308420,3480,assets/music/Mjungle_unused.bin,1,1 +4311900,3520,assets/music/Mcitadel.bin,1,1 +4315420,2766,assets/music/Mfacility.bin,1,1 +4318186,2910,assets/music/Mcontrol.bin,1,1 +4321096,3588,assets/music/Mdam.bin,1,1 +4324684,3552,assets/music/Mfrigate.bin,1,1 +4328236,2388,assets/music/Marchives.bin,1,1 +4330624,3696,assets/music/Msilo.bin,1,1 +4334320,3948,assets/music/Mjungle_perimeter_unused.bin,1,1 +4338268,3330,assets/music/Mstreets.bin,1,1 +4341598,1650,assets/music/Mbunker1.bin,1,1 +4343248,1664,assets/music/Mbunker2.bin,1,1 +4344912,2456,assets/music/Mstatue.bin,1,1 +4347368,2522,assets/music/Melevator_control.bin,1,1 +4349890,3424,assets/music/Mcradle.bin,1,1 +4353314,42,assets/music/Mnull1.bin,1,1 +4353356,1606,assets/music/Melevator_wc.bin,1,1 +4354962,3482,assets/music/Megyptian.bin,1,1 +4358444,994,assets/music/Mfolders.bin,1,1 +4359438,498,assets/music/Mwatchmusic.bin,1,1 +4359936,3186,assets/music/Maztec.bin,1,1 +4363122,3628,assets/music/Mwatercaverns.bin,1,1 +4366750,870,assets/music/Mdeathsolo.bin,1,1 +4367620,3510,assets/music/Msurface2.bin,1,1 +4371130,2208,assets/music/Mtrainx.bin,1,1 +4373338,42,assets/music/Mnull2.bin,1,1 +4373380,2392,assets/music/Mfacilityx.bin,1,1 +4375772,1980,assets/music/Mdepotx.bin,1,1 +4377752,1352,assets/music/Mcontrolx.bin,1,1 +4379104,1876,assets/music/Mwatercavernsx.bin,1,1 +4380980,1312,assets/music/Mdamx.bin,1,1 +4382292,1474,assets/music/Mfrigatex.bin,1,1 +4383766,1828,assets/music/Marchivesx.bin,1,1 +4385594,2292,assets/music/Msilox.bin,1,1 +4387886,42,assets/music/Mnull3.bin,1,1 +4387928,1644,assets/music/Mstreetsx.bin,1,1 +4389572,1958,assets/music/Mbunker1x.bin,1,1 +4391530,1614,assets/music/Mbunker2x.bin,1,1 +4393144,2070,assets/music/Mjunglex.bin,1,1 +4395214,1074,assets/music/Mnint_rare_logo.bin,1,1 +4396288,1720,assets/music/Mstatuex.bin,1,1 +4398008,2262,assets/music/Maztecx.bin,1,1 +4400270,2224,assets/music/Megyptianx.bin,1,1 +4402494,1738,assets/music/Mcradlex.bin,1,1 +4404232,2122,assets/music/Mcuba.bin,1,1 +4406354,3358,assets/music/Mrunway.bin,1,1 +4409712,730,assets/music/Mrunway_plane.bin,1,1 +4410442,1832,assets/music/Msurface2x.bin,1,1 +4412274,1314,assets/music/Mwindblowing.bin,1,1 +4413588,524,assets/music/Mmultideath_alt.bin,1,1 +4414112,1928,assets/music/Mjungle.bin,1,1 +4416040,1570,assets/music/Mrunwayx.bin,1,1 +4417610,3432,assets/music/Msurface1.bin,1,1 +4421042,712,assets/music/Mmultiplayerdeath.bin,1,1 +4421754,1832,assets/music/Msurface1x.bin,1,1 +4423586,668,assets/music/Msurface2_ending.bin,1,1 +4424254,358,assets/music/Mstatue_ending.bin,1,1 +4424612,700,assets/music/Mfrigate_outro.bin,1,1 4425312,69104,assets/obseg/bg/bg_sev_all_p.bin,0,0 4494416,331584,assets/obseg/bg/bg_silo_all_p.bin,0,0 4826000,139472,assets/obseg/bg/bg_stat_all_p.bin,0,1 @@ -127,545 +127,545 @@ 7257072,4000,assets/obseg/bg/bg_lip_all_p.bin,0,0 7261072,0,assets/obseg/bg/bg_pam_all_p.bin,0,1 7261072,0,assets/obseg/bg/bg_wax_all_p.bin,0,1 -7261072,9344,assets/obseg/chr/CarmourguardZ,1,1 -7270416,14064,assets/obseg/chr/CbaronsamediZ,1,1 -7284480,9968,assets/obseg/chr/CbluecamguardZ,1,1 -7294448,7696,assets/obseg/chr/CbluemanZ,1,1 -7302144,7872,assets/obseg/chr/CbluewomanZ,1,1 -7310016,11280,assets/obseg/chr/CboilerbondZ,1,1 -7321296,13952,assets/obseg/chr/CboilertrevZ,1,1 -7335248,12576,assets/obseg/chr/CborisZ,1,1 -7347824,9952,assets/obseg/chr/CcamguardZ,1,1 -7357776,7680,assets/obseg/chr/CcardimanZ,1,1 -7365456,7808,assets/obseg/chr/CcheckmanZ,1,1 -7373264,9728,assets/obseg/chr/CcommguardZ,1,1 -7382992,11920,assets/obseg/chr/CdjbondZ,1,1 -7394912,7968,assets/obseg/chr/CfattechwomanZ,1,1 -7402880,10016,assets/obseg/chr/Cgreatguard2Z,1,1 -7412896,9856,assets/obseg/chr/CgreatguardZ,1,1 -7422752,9936,assets/obseg/chr/CgreyguardZ,1,1 -7432688,7616,assets/obseg/chr/CgreymanZ,1,1 -7440304,1488,assets/obseg/chr/CheadalanZ,1,1 -7441792,1392,assets/obseg/chr/CheadbZ,1,1 -7443184,976,assets/obseg/chr/CheadbalaclavaZ,1,1 -7444160,1696,assets/obseg/chr/CheadbikeZ,1,1 -7445856,3408,assets/obseg/chr/CheadbrosnanZ,1,1 -7449264,2976,assets/obseg/chr/CheadbrosnanboilerZ,1,1 -7452240,3712,assets/obseg/chr/CheadbrosnansnowZ,1,1 -7455952,3456,assets/obseg/chr/CheadbrosnansuitZ,1,1 -7459408,3008,assets/obseg/chr/CheadbrosnantimberZ,1,1 -7462416,1344,assets/obseg/chr/CheadchrisZ,1,1 -7463760,1408,assets/obseg/chr/CheaddaveZ,1,1 -7465168,1328,assets/obseg/chr/CheaddesZ,1,1 -7466496,1312,assets/obseg/chr/CheadduncanZ,1,1 -7467808,1408,assets/obseg/chr/CheaddwayneZ,1,1 -7469216,1392,assets/obseg/chr/CheadgrahamZ,1,1 -7470608,1328,assets/obseg/chr/CheadgrantZ,1,1 -7471936,1328,assets/obseg/chr/CheadjimZ,1,1 -7473264,1056,assets/obseg/chr/Cheadjoe2Z,1,1 -7474320,1392,assets/obseg/chr/CheadjoeZ,1,1 -7475712,1296,assets/obseg/chr/CheadjoelZ,1,1 -7477008,1376,assets/obseg/chr/CheadkarlZ,1,1 -7478384,1360,assets/obseg/chr/CheadkenZ,1,1 -7479744,1408,assets/obseg/chr/CheadleeZ,1,1 -7481152,1008,assets/obseg/chr/CheadmandyZ,1,1 -7482160,1040,assets/obseg/chr/CheadmarionZ,1,1 -7483200,1328,assets/obseg/chr/CheadmarkZ,1,1 -7484528,1376,assets/obseg/chr/CheadmartinZ,1,1 -7485904,1376,assets/obseg/chr/CheadmishkinZ,1,1 -7487280,1312,assets/obseg/chr/CheadneilZ,1,1 -7488592,1424,assets/obseg/chr/CheadpeteZ,1,1 -7490016,1296,assets/obseg/chr/CheadrobinZ,1,1 -7491312,1024,assets/obseg/chr/CheadsallyZ,1,1 -7492336,1408,assets/obseg/chr/CheadscottZ,1,1 -7493744,1504,assets/obseg/chr/CheadshaunZ,1,1 -7495248,1360,assets/obseg/chr/CheadsteveeZ,1,1 -7496608,1360,assets/obseg/chr/CheadstevehZ,1,1 -7497968,1168,assets/obseg/chr/CheadvivienZ,1,1 -7499136,11328,assets/obseg/chr/CjawsZ,1,1 -7510464,8208,assets/obseg/chr/CjeanwomanZ,1,1 -7518672,11168,assets/obseg/chr/CmaydayZ,1,1 -7529840,8528,assets/obseg/chr/CmoonfemaleZ,1,1 -7538368,9712,assets/obseg/chr/CmoonguardZ,1,1 -7548080,14528,assets/obseg/chr/CnatalyaZ,1,1 -7562608,9952,assets/obseg/chr/CnavyguardZ,1,1 -7572560,12592,assets/obseg/chr/CoddjobZ,1,1 -7585152,9808,assets/obseg/chr/ColiveguardZ,1,1 -7594960,13360,assets/obseg/chr/CorumovZ,1,1 -7608320,12416,assets/obseg/chr/CpilotZ,1,1 -7620736,10032,assets/obseg/chr/CredmanZ,1,1 -7630768,7216,assets/obseg/chr/CrusguardZ,1,1 -7637984,13104,assets/obseg/chr/CsnowbondZ,1,1 -7651088,11392,assets/obseg/chr/CsnowguardZ,1,1 -7662480,14624,assets/obseg/chr/CspicebondZ,1,1 -7677104,12832,assets/obseg/chr/Csuit_lf_handZ,1,1 -7689936,11664,assets/obseg/chr/CsuitbondZ,1,1 -7701600,9904,assets/obseg/chr/CtechmanZ,1,1 -7711504,8176,assets/obseg/chr/CtechwomanZ,1,1 -7719680,11568,assets/obseg/chr/CtimberbondZ,1,1 -7731248,14288,assets/obseg/chr/CtrevelyanZ,1,1 -7745536,9744,assets/obseg/chr/CtrevguardZ,1,1 -7755280,12144,assets/obseg/chr/CvalentinZ,1,1 -7767424,14832,assets/obseg/chr/CxeniaZ,1,1 -7782256,2576,assets/obseg/gun/Gak47Z,1,1 -7784832,912,assets/obseg/gun/GaudiotapeZ,1,1 -7785744,6160,assets/obseg/gun/GautoshotZ,1,1 -7791904,1536,assets/obseg/gun/GblackboxZ,1,1 -7793440,256,assets/obseg/gun/GblueprintsZ,1,1 -7793696,1936,assets/obseg/gun/GbombcaseZ,1,1 -7795632,1520,assets/obseg/gun/GbombdefuserZ,1,1 -7797152,1936,assets/obseg/gun/GbriefcaseZ,1,1 -7799088,2416,assets/obseg/gun/GbugZ,1,1 -7801504,848,assets/obseg/gun/GbugdetectorZ,1,1 -7802352,848,assets/obseg/gun/GbungeeZ,1,1 -7803200,1152,assets/obseg/gun/GcameraZ,1,1 -7804352,608,assets/obseg/gun/GcartblueZ,1,1 -7804960,304,assets/obseg/gun/GcartridgeZ,1,1 -7805264,528,assets/obseg/gun/GcartrifleZ,1,1 -7805792,512,assets/obseg/gun/GcartshellZ,1,1 -7806304,320,assets/obseg/gun/GcircuitboardZ,1,1 -7806624,496,assets/obseg/gun/GclipboardZ,1,1 -7807120,848,assets/obseg/gun/GcreditcardZ,1,1 -7807968,848,assets/obseg/gun/GdarkglassesZ,1,1 -7808816,320,assets/obseg/gun/GdatathiefZ,1,1 -7809136,368,assets/obseg/gun/GdattapeZ,1,1 -7809504,1408,assets/obseg/gun/GdoordecoderZ,1,1 -7810912,848,assets/obseg/gun/GdoorexploderZ,1,1 -7811760,864,assets/obseg/gun/GdossierredZ,1,1 -7812624,848,assets/obseg/gun/GdynamiteZ,1,1 -7813472,592,assets/obseg/gun/GexplosivefloppyZ,1,1 -7814064,848,assets/obseg/gun/GexplosivepenZ,1,1 -7814912,2032,assets/obseg/gun/GextinguisherZ,1,1 -7816944,848,assets/obseg/gun/GfingergunZ,1,1 -7817792,5888,assets/obseg/gun/GfistZ,1,1 -7823680,848,assets/obseg/gun/GflarepistolZ,1,1 -7824528,3232,assets/obseg/gun/Gfnp90Z,1,1 -7827760,2608,assets/obseg/gun/GgaskeyringZ,1,1 -7830368,848,assets/obseg/gun/GgoldbarZ,1,1 -7831216,2480,assets/obseg/gun/GgoldeneyekeyZ,1,1 -7833696,6112,assets/obseg/gun/GgoldengunZ,1,1 -7839808,6496,assets/obseg/gun/GgoldwppkZ,1,1 -7846304,2608,assets/obseg/gun/GgrenadeZ,1,1 -7848912,4224,assets/obseg/gun/GgrenadelaunchZ,1,1 -7853136,848,assets/obseg/gun/GheroinZ,1,1 -7853984,7856,assets/obseg/gun/GjoypadZ,1,1 -7861840,1936,assets/obseg/gun/GkeyanalysercaseZ,1,1 -7863776,2544,assets/obseg/gun/GkeyboltZ,1,1 -7866320,304,assets/obseg/gun/GkeycardZ,1,1 -7866624,3408,assets/obseg/gun/GkeyyaleZ,1,1 -7870032,6864,assets/obseg/gun/GknifeZ,1,1 -7876896,3568,assets/obseg/gun/GlaserZ,1,1 -7880464,848,assets/obseg/gun/GlectreZ,1,1 -7881312,848,assets/obseg/gun/GlockexploderZ,1,1 -7882160,2592,assets/obseg/gun/Gm16Z,1,1 -7884752,240,assets/obseg/gun/GmapZ,1,1 -7884992,1600,assets/obseg/gun/GmicrocameraZ,1,1 -7886592,848,assets/obseg/gun/GmicrocodeZ,1,1 -7887440,848,assets/obseg/gun/GmicrofilmZ,1,1 -7888288,848,assets/obseg/gun/GmoneyZ,1,1 -7889136,3040,assets/obseg/gun/Gmp5kZ,1,1 -7892176,3328,assets/obseg/gun/Gmp5ksilZ,1,1 -7895504,848,assets/obseg/gun/GpitongunZ,1,1 -7896352,464,assets/obseg/gun/GplansZ,1,1 -7896816,848,assets/obseg/gun/GplastiqueZ,1,1 -7897664,1376,assets/obseg/gun/GpolarizedglassesZ,1,1 -7899040,2032,assets/obseg/gun/GproximitymineZ,1,1 -7901072,2496,assets/obseg/gun/GremotemineZ,1,1 -7903568,4640,assets/obseg/gun/GrocketlaunchZ,1,1 -7908208,7568,assets/obseg/gun/GrugerZ,1,1 -7915776,1936,assets/obseg/gun/GsafecrackercaseZ,1,1 -7917712,3808,assets/obseg/gun/GshotgunZ,1,1 -7921520,6496,assets/obseg/gun/GsilverwppkZ,1,1 -7928016,4608,assets/obseg/gun/GskorpionZ,1,1 -7932624,4208,assets/obseg/gun/GsniperrifleZ,1,1 -7936832,3200,assets/obseg/gun/GspectreZ,1,1 -7940032,848,assets/obseg/gun/GspooltapeZ,1,1 -7940880,848,assets/obseg/gun/GspyfileZ,1,1 -7941728,416,assets/obseg/gun/GstafflistZ,1,1 -7942144,7776,assets/obseg/gun/GtaserZ,1,1 -7949920,6896,assets/obseg/gun/GthrowknifeZ,1,1 -7956816,2752,assets/obseg/gun/GtimedmineZ,1,1 -7959568,13312,assets/obseg/gun/GtriggerZ,1,1 -7972880,6944,assets/obseg/gun/Gtt33Z,1,1 -7979824,2320,assets/obseg/gun/GuziZ,1,1 -7982144,528,assets/obseg/gun/GvideotapeZ,1,1 -7982672,5216,assets/obseg/gun/GwatchcommunicatorZ,1,1 -7987888,5216,assets/obseg/gun/GwatchgeigercounterZ,1,1 -7993104,5216,assets/obseg/gun/GwatchidentifierZ,1,1 -7998320,13312,assets/obseg/gun/GwatchlaserZ,1,1 -8011632,5200,assets/obseg/gun/GwatchmagnetattractZ,1,1 -8016832,5216,assets/obseg/gun/GwatchmagnetrepelZ,1,1 -8022048,1936,assets/obseg/gun/GweaponcaseZ,1,1 -8023984,7312,assets/obseg/gun/GwppkZ,1,1 -8031296,7488,assets/obseg/gun/GwppksilZ,1,1 -8038784,848,assets/obseg/gun/GwristdartZ,1,1 -8039632,9600,assets/obseg/prop/PICBMZ,1,1 -8049232,1968,assets/obseg/prop/PICBM_noseZ,1,1 -8051200,480,assets/obseg/prop/Pak47magZ,1,1 -8051680,352,assets/obseg/prop/Palarm1Z,1,1 -8052032,416,assets/obseg/prop/Palarm2Z,1,1 -8052448,576,assets/obseg/prop/Pammo_crate1Z,1,1 -8053024,576,assets/obseg/prop/Pammo_crate2Z,1,1 -8053600,592,assets/obseg/prop/Pammo_crate3Z,1,1 -8054192,624,assets/obseg/prop/Pammo_crate4Z,1,1 -8054816,704,assets/obseg/prop/Pammo_crate5Z,1,1 -8055520,7264,assets/obseg/prop/PapcZ,1,1 -8062784,480,assets/obseg/prop/Parchsecdoor1Z,1,1 -8063264,464,assets/obseg/prop/Parchsecdoor2Z,1,1 -8063728,3584,assets/obseg/prop/ParticZ,1,1 -8067312,2320,assets/obseg/prop/PartictrailerZ,1,1 -8069632,576,assets/obseg/prop/PbarricadeZ,1,1 -8070208,848,assets/obseg/prop/Pbin1Z,1,1 -8071056,224,assets/obseg/prop/Pblotter1Z,1,1 -8071280,1184,assets/obseg/prop/PbodyarmourZ,1,1 -8072464,1056,assets/obseg/prop/PbodyarmourvestZ,1,1 -8073520,512,assets/obseg/prop/PbollardZ,1,1 -8074032,368,assets/obseg/prop/PbombZ,1,1 -8074400,400,assets/obseg/prop/Pbook1Z,1,1 -8074800,1776,assets/obseg/prop/Pbookshelf1Z,1,1 -8076576,368,assets/obseg/prop/Pborg_crateZ,1,1 -8076944,512,assets/obseg/prop/PboxcartridgesZ,1,1 -8077456,1072,assets/obseg/prop/Pboxes2x4Z,1,1 -8078528,1088,assets/obseg/prop/Pboxes3x4Z,1,1 -8079616,1632,assets/obseg/prop/Pboxes4x4Z,1,1 -8081248,880,assets/obseg/prop/PbrakeunitZ,1,1 -8082128,1408,assets/obseg/prop/Pbridge_console1aZ,1,1 -8083536,1376,assets/obseg/prop/Pbridge_console1bZ,1,1 -8084912,1408,assets/obseg/prop/Pbridge_console2aZ,1,1 -8086320,1264,assets/obseg/prop/Pbridge_console2bZ,1,1 -8087584,1360,assets/obseg/prop/Pbridge_console3aZ,1,1 -8088944,1424,assets/obseg/prop/Pbridge_console3bZ,1,1 -8090368,3296,assets/obseg/prop/PcarbmwZ,1,1 -8093664,512,assets/obseg/prop/Pcard_box1Z,1,1 -8094176,576,assets/obseg/prop/Pcard_box2Z,1,1 -8094752,496,assets/obseg/prop/Pcard_box3Z,1,1 -8095248,432,assets/obseg/prop/Pcard_box4Z,1,1 -8095680,512,assets/obseg/prop/Pcard_box5Z,1,1 -8096192,496,assets/obseg/prop/Pcard_box6Z,1,1 -8096688,3072,assets/obseg/prop/PcarescortZ,1,1 -8099760,3120,assets/obseg/prop/PcargolfZ,1,1 -8102880,4416,assets/obseg/prop/PcarweirdZ,1,1 -8107296,5632,assets/obseg/prop/PcarzilZ,1,1 -8112928,896,assets/obseg/prop/PcctvZ,1,1 -8113824,1376,assets/obseg/prop/PchraudiotapeZ,1,1 -8115200,864,assets/obseg/prop/PchrautoshotZ,1,1 -8116064,2176,assets/obseg/prop/PchrblackboxZ,1,1 -8118240,336,assets/obseg/prop/PchrblueprintsZ,1,1 -8118576,496,assets/obseg/prop/PchrbombcaseZ,1,1 -8119072,2272,assets/obseg/prop/PchrbombdefuserZ,1,1 -8121344,400,assets/obseg/prop/PchrbriefcaseZ,1,1 -8121744,3504,assets/obseg/prop/PchrbugZ,1,1 -8125248,368,assets/obseg/prop/PchrbugdetectorZ,1,1 -8125616,368,assets/obseg/prop/PchrbungeeZ,1,1 -8125984,1680,assets/obseg/prop/PchrcameraZ,1,1 -8127664,416,assets/obseg/prop/PchrcircuitboardZ,1,1 -8128080,640,assets/obseg/prop/PchrclipboardZ,1,1 -8128720,368,assets/obseg/prop/PchrcreditcardZ,1,1 -8129088,368,assets/obseg/prop/PchrdarkglassesZ,1,1 -8129456,416,assets/obseg/prop/PchrdatathiefZ,1,1 -8129872,496,assets/obseg/prop/PchrdattapeZ,1,1 -8130368,2144,assets/obseg/prop/PchrdoordecoderZ,1,1 -8132512,368,assets/obseg/prop/PchrdoorexploderZ,1,1 -8132880,1232,assets/obseg/prop/PchrdossierredZ,1,1 -8134112,368,assets/obseg/prop/PchrdynamiteZ,1,1 -8134480,368,assets/obseg/prop/PchrexplosivepenZ,1,1 -8134848,1280,assets/obseg/prop/PchrextinguisherZ,1,1 -8136128,368,assets/obseg/prop/PchrfingergunZ,1,1 -8136496,368,assets/obseg/prop/PchrflarepistolZ,1,1 -8136864,1120,assets/obseg/prop/Pchrfnp90Z,1,1 -8137984,3856,assets/obseg/prop/PchrgaskeyringZ,1,1 -8141840,368,assets/obseg/prop/PchrgoldbarZ,1,1 -8142208,624,assets/obseg/prop/PchrgoldenZ,1,1 -8142832,3744,assets/obseg/prop/PchrgoldeneyekeyZ,1,1 -8146576,368,assets/obseg/prop/PchrgoldwppkZ,1,1 -8146944,880,assets/obseg/prop/PchrgrenadeZ,1,1 -8147824,912,assets/obseg/prop/PchrgrenadelaunchZ,1,1 -8148736,624,assets/obseg/prop/PchrgrenaderoundZ,1,1 -8149360,368,assets/obseg/prop/PchrheroinZ,1,1 -8149728,1008,assets/obseg/prop/PchrkalashZ,1,1 -8150736,496,assets/obseg/prop/PchrkeyanalysercaseZ,1,1 -8151232,3744,assets/obseg/prop/PchrkeyboltZ,1,1 -8154976,5216,assets/obseg/prop/PchrkeyyaleZ,1,1 -8160192,512,assets/obseg/prop/PchrknifeZ,1,1 -8160704,960,assets/obseg/prop/PchrlaserZ,1,1 -8161664,368,assets/obseg/prop/PchrlectreZ,1,1 -8162032,368,assets/obseg/prop/PchrlockexploderZ,1,1 -8162400,976,assets/obseg/prop/Pchrm16Z,1,1 -8163376,336,assets/obseg/prop/PchrmapZ,1,1 -8163712,2288,assets/obseg/prop/PchrmicrocameraZ,1,1 -8166000,368,assets/obseg/prop/PchrmicrocodeZ,1,1 -8166368,368,assets/obseg/prop/PchrmicrofilmZ,1,1 -8166736,368,assets/obseg/prop/PchrmoneyZ,1,1 -8167104,896,assets/obseg/prop/Pchrmp5kZ,1,1 -8168000,1040,assets/obseg/prop/Pchrmp5ksilZ,1,1 -8169040,368,assets/obseg/prop/PchrpitongunZ,1,1 -8169408,656,assets/obseg/prop/PchrplansZ,1,1 -8170064,1120,assets/obseg/prop/PchrplastiqueZ,1,1 -8171184,2240,assets/obseg/prop/PchrpolarizedglassesZ,1,1 -8173424,1120,assets/obseg/prop/PchrproximitymineZ,1,1 -8174544,1120,assets/obseg/prop/PchrremotemineZ,1,1 -8175664,1456,assets/obseg/prop/PchrrocketZ,1,1 -8177120,992,assets/obseg/prop/PchrrocketlaunchZ,1,1 -8178112,992,assets/obseg/prop/PchrrugerZ,1,1 -8179104,496,assets/obseg/prop/PchrsafecrackercaseZ,1,1 -8179600,848,assets/obseg/prop/PchrshotgunZ,1,1 -8180448,368,assets/obseg/prop/PchrsilverwppkZ,1,1 -8180816,896,assets/obseg/prop/PchrskorpionZ,1,1 -8181712,912,assets/obseg/prop/PchrsniperrifleZ,1,1 -8182624,880,assets/obseg/prop/PchrspectreZ,1,1 -8183504,368,assets/obseg/prop/PchrspooltapeZ,1,1 -8183872,368,assets/obseg/prop/PchrspyfileZ,1,1 -8184240,544,assets/obseg/prop/PchrstafflistZ,1,1 -8184784,448,assets/obseg/prop/PchrtesttubeZ,1,1 -8185232,544,assets/obseg/prop/PchrthrowknifeZ,1,1 -8185776,1328,assets/obseg/prop/PchrtimedmineZ,1,1 -8187104,656,assets/obseg/prop/Pchrtt33Z,1,1 -8187760,720,assets/obseg/prop/PchruziZ,1,1 -8188480,720,assets/obseg/prop/PchrvideotapeZ,1,1 -8189200,512,assets/obseg/prop/PchrweaponcaseZ,1,1 -8189712,576,assets/obseg/prop/PchrwppkZ,1,1 -8190288,736,assets/obseg/prop/PchrwppksilZ,1,1 -8191024,368,assets/obseg/prop/PchrwristdartZ,1,1 -8191392,1664,assets/obseg/prop/Pconsole1Z,1,1 -8193056,1664,assets/obseg/prop/Pconsole2Z,1,1 -8194720,1680,assets/obseg/prop/Pconsole3Z,1,1 -8196400,1056,assets/obseg/prop/Pconsole_sev2aZ,1,1 -8197456,1216,assets/obseg/prop/Pconsole_sev2bZ,1,1 -8198672,1088,assets/obseg/prop/Pconsole_sev2cZ,1,1 -8199760,1072,assets/obseg/prop/Pconsole_sev2dZ,1,1 -8200832,1072,assets/obseg/prop/Pconsole_sev_GEaZ,1,1 -8201904,1072,assets/obseg/prop/Pconsole_sev_GEbZ,1,1 -8202976,1152,assets/obseg/prop/Pconsole_sevaZ,1,1 -8204128,1136,assets/obseg/prop/Pconsole_sevbZ,1,1 -8205264,1072,assets/obseg/prop/Pconsole_sevcZ,1,1 -8206336,1072,assets/obseg/prop/Pconsole_sevdZ,1,1 -8207408,400,assets/obseg/prop/Pcryptdoor1aZ,1,1 -8207808,400,assets/obseg/prop/Pcryptdoor1bZ,1,1 -8208208,400,assets/obseg/prop/Pcryptdoor2aZ,1,1 -8208608,400,assets/obseg/prop/Pcryptdoor2bZ,1,1 -8209008,624,assets/obseg/prop/Pcryptdoor3Z,1,1 -8209632,384,assets/obseg/prop/Pcryptdoor4Z,1,1 -8210016,640,assets/obseg/prop/PdamchaindoorZ,1,1 -8210656,544,assets/obseg/prop/PdamgatedoorZ,1,1 -8211200,880,assets/obseg/prop/PdamtundoorZ,1,1 -8212080,416,assets/obseg/prop/Pdepot_door_steelZ,1,1 -8212496,576,assets/obseg/prop/Pdepot_gate_entryZ,1,1 -8213072,384,assets/obseg/prop/Pdesk1Z,1,1 -8213456,384,assets/obseg/prop/Pdesk2Z,1,1 -8213840,576,assets/obseg/prop/Pdesk_arecibo1Z,1,1 -8214416,768,assets/obseg/prop/Pdesk_lamp2Z,1,1 -8215184,6384,assets/obseg/prop/Pdest_engineZ,1,1 -8221568,1632,assets/obseg/prop/Pdest_exocetZ,1,1 -8223200,1648,assets/obseg/prop/Pdest_gunZ,1,1 -8224848,2208,assets/obseg/prop/Pdest_harpoonZ,1,1 -8227056,4016,assets/obseg/prop/Pdest_seawolfZ,1,1 -8231072,448,assets/obseg/prop/Pdisc_readerZ,1,1 -8231520,400,assets/obseg/prop/Pdisk_drive1Z,1,1 -8231920,384,assets/obseg/prop/Pdoor_azt_chairZ,1,1 -8232304,1088,assets/obseg/prop/Pdoor_azt_deskZ,1,1 -8233392,912,assets/obseg/prop/Pdoor_azt_desk_topZ,1,1 -8234304,560,assets/obseg/prop/Pdoor_aztecZ,1,1 -8234864,768,assets/obseg/prop/Pdoor_dest1Z,1,1 -8235632,960,assets/obseg/prop/Pdoor_dest2Z,1,1 -8236592,1376,assets/obseg/prop/Pdoor_eyelidZ,1,1 -8237968,2640,assets/obseg/prop/Pdoor_irisZ,1,1 -8240608,752,assets/obseg/prop/Pdoor_mfZ,1,1 -8241360,880,assets/obseg/prop/Pdoor_roller1Z,1,1 -8242240,576,assets/obseg/prop/Pdoor_roller2Z,1,1 -8242816,576,assets/obseg/prop/Pdoor_roller3Z,1,1 -8243392,608,assets/obseg/prop/Pdoor_roller4Z,1,1 -8244000,304,assets/obseg/prop/Pdoor_rollertrainZ,1,1 -8244304,608,assets/obseg/prop/Pdoor_st_arec1Z,1,1 -8244912,736,assets/obseg/prop/Pdoor_st_arec2Z,1,1 -8245648,416,assets/obseg/prop/Pdoor_winZ,1,1 -8246064,1136,assets/obseg/prop/PdoorconsoleZ,1,1 -8247200,880,assets/obseg/prop/PdoorpanelZ,1,1 -8248080,336,assets/obseg/prop/Pdoorprison1Z,1,1 -8248416,512,assets/obseg/prop/PdoorstatgateZ,1,1 -8248928,288,assets/obseg/prop/PexplosionbitZ,1,1 -8249216,384,assets/obseg/prop/Pfiling_cabinet1Z,1,1 -8249600,304,assets/obseg/prop/PflagZ,1,1 -8249904,800,assets/obseg/prop/PfloppyZ,1,1 -8250704,416,assets/obseg/prop/Pfnp90magZ,1,1 -8251120,896,assets/obseg/prop/Pgas_plant_met1_do1Z,1,1 -8252016,480,assets/obseg/prop/Pgas_plant_sw2_do1Z,1,1 -8252496,512,assets/obseg/prop/Pgas_plant_sw3_do1Z,1,1 -8253008,352,assets/obseg/prop/Pgas_plant_sw4_do1Z,1,1 -8253360,656,assets/obseg/prop/Pgas_plant_sw_do1Z,1,1 -8254016,528,assets/obseg/prop/Pgas_plant_wc_cub1Z,1,1 -8254544,528,assets/obseg/prop/PgasbarrelZ,1,1 -8255072,1344,assets/obseg/prop/PgasbarrelsZ,1,1 -8256416,1376,assets/obseg/prop/Pgasplant_clear_doorZ,1,1 -8257792,1456,assets/obseg/prop/PgastankZ,1,1 -8259248,352,assets/obseg/prop/Pglassware1Z,1,1 -8259600,656,assets/obseg/prop/Pglassware2Z,1,1 -8260256,528,assets/obseg/prop/Pglassware3Z,1,1 -8260784,1408,assets/obseg/prop/Pglassware4Z,1,1 -8262192,3760,assets/obseg/prop/PgoldeneyelogoZ,1,1 -8265952,512,assets/obseg/prop/PgoldenshellsZ,1,1 -8266464,2000,assets/obseg/prop/PgroundgunZ,1,1 -8268464,1856,assets/obseg/prop/Pgun_runway1Z,1,1 -8270320,672,assets/obseg/prop/PhatberetZ,1,1 -8270992,720,assets/obseg/prop/PhatberetblueZ,1,1 -8271712,736,assets/obseg/prop/PhatberetredZ,1,1 -8272448,208,assets/obseg/prop/PhatchboltZ,1,1 -8272656,544,assets/obseg/prop/PhatchdoorZ,1,1 -8273200,368,assets/obseg/prop/PhatchsevxZ,1,1 -8273568,560,assets/obseg/prop/PhatfurryZ,1,1 -8274128,544,assets/obseg/prop/PhatfurryblackZ,1,1 -8274672,528,assets/obseg/prop/PhatfurrybrownZ,1,1 -8275200,560,assets/obseg/prop/PhathelmetZ,1,1 -8275760,560,assets/obseg/prop/PhathelmetgreyZ,1,1 -8276320,992,assets/obseg/prop/PhatmoonZ,1,1 -8277312,784,assets/obseg/prop/PhatpeakedZ,1,1 -8278096,592,assets/obseg/prop/PhattbirdZ,1,1 -8278688,624,assets/obseg/prop/PhattbirdbrownZ,1,1 -8279312,16928,assets/obseg/prop/PhelicopterZ,1,1 -8296240,6000,assets/obseg/prop/PhindZ,1,1 -8302240,4448,assets/obseg/prop/PjeepZ,1,1 -8306688,608,assets/obseg/prop/Pjerry_can1Z,1,1 -8307296,1920,assets/obseg/prop/Pjungle3_treeZ,1,1 -8309216,1328,assets/obseg/prop/Pjungle5_treeZ,1,1 -8310544,848,assets/obseg/prop/Pkey_holderZ,1,1 -8311392,368,assets/obseg/prop/Pkeyboard1Z,1,1 -8311760,672,assets/obseg/prop/Pkit_units1Z,1,1 -8312432,976,assets/obseg/prop/PlabbenchZ,1,1 -8313408,624,assets/obseg/prop/PlandmineZ,1,1 -8314032,4032,assets/obseg/prop/PlegalpageZ,1,1 -8318064,352,assets/obseg/prop/Pletter_tray1Z,1,1 -8318416,400,assets/obseg/prop/Plocker3Z,1,1 -8318816,400,assets/obseg/prop/Plocker4Z,1,1 -8319216,320,assets/obseg/prop/Pm16magZ,1,1 -8319536,512,assets/obseg/prop/PmagnumshellsZ,1,1 -8320048,768,assets/obseg/prop/Pmainframe1Z,1,1 -8320816,720,assets/obseg/prop/Pmainframe2Z,1,1 -8321536,832,assets/obseg/prop/Pmetal_chair1Z,1,1 -8322368,448,assets/obseg/prop/Pmetal_crate1Z,1,1 -8322816,448,assets/obseg/prop/Pmetal_crate2Z,1,1 -8323264,448,assets/obseg/prop/Pmetal_crate3Z,1,1 -8323712,448,assets/obseg/prop/Pmetal_crate4Z,1,1 -8324160,6368,assets/obseg/prop/PmilcopterZ,1,1 -8330528,8960,assets/obseg/prop/PmiltruckZ,1,1 -8339488,2576,assets/obseg/prop/Pmissile_rack2Z,1,1 -8342064,992,assets/obseg/prop/Pmissile_rackZ,1,1 -8343056,832,assets/obseg/prop/PmodemboxZ,1,1 -8343888,3776,assets/obseg/prop/PmotorbikeZ,1,1 -8347664,336,assets/obseg/prop/Pmp5kmagZ,1,1 -8348000,10976,assets/obseg/prop/PnintendologoZ,1,1 -8358976,624,assets/obseg/prop/Poil_drum1Z,1,1 -8359600,752,assets/obseg/prop/Poil_drum2Z,1,1 -8360352,752,assets/obseg/prop/Poil_drum3Z,1,1 -8361104,752,assets/obseg/prop/Poil_drum5Z,1,1 -8361856,784,assets/obseg/prop/Poil_drum6Z,1,1 -8362640,768,assets/obseg/prop/Poil_drum7Z,1,1 -8363408,2640,assets/obseg/prop/PpadlockZ,1,1 -8366048,1104,assets/obseg/prop/PpalmZ,1,1 -8367152,1232,assets/obseg/prop/PpalmtreeZ,1,1 -8368384,320,assets/obseg/prop/Pphone1Z,1,1 -8368704,9696,assets/obseg/prop/PplaneZ,1,1 -8378400,960,assets/obseg/prop/Pplant11Z,1,1 -8379360,912,assets/obseg/prop/Pplant1Z,1,1 -8380272,864,assets/obseg/prop/Pplant2Z,1,1 -8381136,1040,assets/obseg/prop/Pplant2bZ,1,1 -8382176,1104,assets/obseg/prop/Pplant3Z,1,1 -8383280,432,assets/obseg/prop/Pradio_unit1Z,1,1 -8383712,448,assets/obseg/prop/Pradio_unit2Z,1,1 -8384160,448,assets/obseg/prop/Pradio_unit3Z,1,1 -8384608,448,assets/obseg/prop/Pradio_unit4Z,1,1 -8385056,1632,assets/obseg/prop/ProofgunZ,1,1 -8386688,848,assets/obseg/prop/PsafeZ,1,1 -8387536,1264,assets/obseg/prop/PsafedoorZ,1,1 -8388800,5488,assets/obseg/prop/Psat1_reflectZ,1,1 -8394288,288,assets/obseg/prop/PsatboxZ,1,1 -8394576,1120,assets/obseg/prop/PsatdishZ,1,1 -8395696,416,assets/obseg/prop/Psec_panelZ,1,1 -8396112,656,assets/obseg/prop/Psev_door3Z,1,1 -8396768,912,assets/obseg/prop/Psev_door3_windZ,1,1 -8397680,992,assets/obseg/prop/Psev_door4_windZ,1,1 -8398672,848,assets/obseg/prop/Psev_doorZ,1,1 -8399520,816,assets/obseg/prop/Psev_door_v1Z,1,1 -8400336,944,assets/obseg/prop/Psev_trislideZ,1,1 -8401280,3872,assets/obseg/prop/PsevdishZ,1,1 -8405152,736,assets/obseg/prop/PsevdoormetslideZ,1,1 -8405888,368,assets/obseg/prop/PsevdoornowindZ,1,1 -8406256,1072,assets/obseg/prop/PsevdoorwindZ,1,1 -8407328,944,assets/obseg/prop/PsevdoorwoodZ,1,1 -8408272,10752,assets/obseg/prop/PshuttleZ,1,1 -8419024,3120,assets/obseg/prop/Pshuttle_door_lZ,1,1 -8422144,3328,assets/obseg/prop/Pshuttle_door_rZ,1,1 -8425472,416,assets/obseg/prop/PsilencerZ,1,1 -8425888,576,assets/obseg/prop/Psilo_lift_doorZ,1,1 -8426464,752,assets/obseg/prop/PsilotopdoorZ,1,1 -8427216,352,assets/obseg/prop/PskorpionmagZ,1,1 -8427568,368,assets/obseg/prop/PspectremagZ,1,1 -8427936,3392,assets/obseg/prop/PspeedboatZ,1,1 -8431328,12608,assets/obseg/prop/Pst_pete_room_1iZ,1,1 -8443936,12768,assets/obseg/prop/Pst_pete_room_2iZ,1,1 -8456704,12096,assets/obseg/prop/Pst_pete_room_3tZ,1,1 -8468800,13712,assets/obseg/prop/Pst_pete_room_5cZ,1,1 -8482512,13328,assets/obseg/prop/Pst_pete_room_6cZ,1,1 -8495840,624,assets/obseg/prop/Psteel_door1Z,1,1 -8496464,688,assets/obseg/prop/Psteel_door2Z,1,1 -8497152,720,assets/obseg/prop/Psteel_door2bZ,1,1 -8497872,720,assets/obseg/prop/Psteel_door3Z,1,1 -8498592,704,assets/obseg/prop/Pstool1Z,1,1 -8499296,400,assets/obseg/prop/Pswipe_card2Z,1,1 -8499696,656,assets/obseg/prop/Pswivel_chair1Z,1,1 -8500352,6816,assets/obseg/prop/PtankZ,1,1 -8507168,7824,assets/obseg/prop/PtigerZ,1,1 -8514992,2176,assets/obseg/prop/Ptorpedo_rackZ,1,1 -8517168,976,assets/obseg/prop/Ptrain_door2Z,1,1 -8518144,1056,assets/obseg/prop/Ptrain_door3Z,1,1 -8519200,624,assets/obseg/prop/Ptrain_doorZ,1,1 -8519824,832,assets/obseg/prop/PtrainextdoorZ,1,1 -8520656,320,assets/obseg/prop/Ptt33magZ,1,1 -8520976,1312,assets/obseg/prop/Ptuning_console1Z,1,1 -8522288,464,assets/obseg/prop/Ptv1Z,1,1 -8522752,416,assets/obseg/prop/Ptv4screenZ,1,1 -8523168,1744,assets/obseg/prop/Ptv_holderZ,1,1 -8524912,208,assets/obseg/prop/PtvscreenZ,1,1 -8525120,320,assets/obseg/prop/PuzimagZ,1,1 -8525440,1552,assets/obseg/prop/PvertdoorZ,1,1 -8526992,5552,assets/obseg/prop/PwalletbondZ,1,1 -8532544,240,assets/obseg/prop/PwindowZ,1,1 -8532784,224,assets/obseg/prop/Pwindow_cor11Z,1,1 -8533008,224,assets/obseg/prop/Pwindow_lib_lg1Z,1,1 -8533232,240,assets/obseg/prop/Pwindow_lib_sm1Z,1,1 -8533472,640,assets/obseg/prop/Pwood_lg_crate1Z,1,1 -8534112,544,assets/obseg/prop/Pwood_lg_crate2Z,1,1 -8534656,544,assets/obseg/prop/Pwood_md_crate3Z,1,1 -8535200,608,assets/obseg/prop/Pwood_sm_crate4Z,1,1 -8535808,608,assets/obseg/prop/Pwood_sm_crate5Z,1,1 -8536416,544,assets/obseg/prop/Pwood_sm_crate6Z,1,1 -8536960,880,assets/obseg/prop/Pwooden_table1Z,1,1 -8537840,320,assets/obseg/prop/PwppkmagZ,1,1 -8538160,6448,assets/obseg/stan/Tbg_ame_all_p_stanZ,1,1 -8544608,23792,assets/obseg/stan/Tbg_arch_all_p_stanZ,1,1 -8568400,33616,assets/obseg/stan/Tbg_arec_all_p_stanZ,1,1 -8602016,36800,assets/obseg/stan/Tbg_ark_all_p_stanZ,1,1 -8638816,6448,assets/obseg/stan/Tbg_ash_all_p_stanZ,1,1 -8645264,21888,assets/obseg/stan/Tbg_azt_all_p_stanZ,1,1 -8667152,10032,assets/obseg/stan/Tbg_cat_all_p_stanZ,1,1 -8677184,20208,assets/obseg/stan/Tbg_cave_all_p_stanZ,1,1 -8697392,10512,assets/obseg/stan/Tbg_crad_all_p_stanZ,1,1 -8707904,12400,assets/obseg/stan/Tbg_cryp_all_p_stanZ,1,1 -8720304,41952,assets/obseg/stan/Tbg_dam_all_p_stanZ,1,1 -8762256,28480,assets/obseg/stan/Tbg_depo_all_p_stanZ,1,1 -8790736,26864,assets/obseg/stan/Tbg_dest_all_p_stanZ,1,1 -8817600,2832,assets/obseg/stan/Tbg_dish_all_p_stanZ,1,1 -8820432,6448,assets/obseg/stan/Tbg_imp_all_p_stanZ,1,1 -8826880,29008,assets/obseg/stan/Tbg_jun_all_p_stanZ,1,1 -8855888,2752,assets/obseg/stan/Tbg_len_all_p_stanZ,1,1 -8858640,6400,assets/obseg/stan/Tbg_oat_all_p_stanZ,1,1 -8865040,18064,assets/obseg/stan/Tbg_pete_all_p_stanZ,1,1 -8883104,7632,assets/obseg/stan/Tbg_ref_all_p_stanZ,1,1 -8890736,6784,assets/obseg/stan/Tbg_run_all_p_stanZ,1,1 -8897520,15824,assets/obseg/stan/Tbg_sev_all_p_stanZ,1,1 -8913344,20288,assets/obseg/stan/Tbg_sevb_all_p_stanZ,1,1 -8933632,37680,assets/obseg/stan/Tbg_sevx_all_p_stanZ,1,1 -8971312,37024,assets/obseg/stan/Tbg_silo_all_p_stanZ,1,1 -9008336,20160,assets/obseg/stan/Tbg_stat_all_p_stanZ,1,1 -9028496,9168,assets/obseg/stan/Tbg_tra_all_p_stanZ,1,1 +7261072,9344,assets/obseg/chr/CarmourguardZ.bin,1,1 +7270416,14064,assets/obseg/chr/CbaronsamediZ.bin,1,1 +7284480,9968,assets/obseg/chr/CbluecamguardZ.bin,1,1 +7294448,7696,assets/obseg/chr/CbluemanZ.bin,1,1 +7302144,7872,assets/obseg/chr/CbluewomanZ.bin,1,1 +7310016,11280,assets/obseg/chr/CboilerbondZ.bin,1,1 +7321296,13952,assets/obseg/chr/CboilertrevZ.bin,1,1 +7335248,12576,assets/obseg/chr/CborisZ.bin,1,1 +7347824,9952,assets/obseg/chr/CcamguardZ.bin,1,1 +7357776,7680,assets/obseg/chr/CcardimanZ.bin,1,1 +7365456,7808,assets/obseg/chr/CcheckmanZ.bin,1,1 +7373264,9728,assets/obseg/chr/CcommguardZ.bin,1,1 +7382992,11920,assets/obseg/chr/CdjbondZ.bin,1,1 +7394912,7968,assets/obseg/chr/CfattechwomanZ.bin,1,1 +7402880,10016,assets/obseg/chr/Cgreatguard2Z.bin,1,1 +7412896,9856,assets/obseg/chr/CgreatguardZ.bin,1,1 +7422752,9936,assets/obseg/chr/CgreyguardZ.bin,1,1 +7432688,7616,assets/obseg/chr/CgreymanZ.bin,1,1 +7440304,1488,assets/obseg/chr/CheadalanZ.bin,1,1 +7441792,1392,assets/obseg/chr/CheadbZ.bin,1,1 +7443184,976,assets/obseg/chr/CheadbalaclavaZ.bin,1,1 +7444160,1696,assets/obseg/chr/CheadbikeZ.bin,1,1 +7445856,3408,assets/obseg/chr/CheadbrosnanZ.bin,1,1 +7449264,2976,assets/obseg/chr/CheadbrosnanboilerZ.bin,1,1 +7452240,3712,assets/obseg/chr/CheadbrosnansnowZ.bin,1,1 +7455952,3456,assets/obseg/chr/CheadbrosnansuitZ.bin,1,1 +7459408,3008,assets/obseg/chr/CheadbrosnantimberZ.bin,1,1 +7462416,1344,assets/obseg/chr/CheadchrisZ.bin,1,1 +7463760,1408,assets/obseg/chr/CheaddaveZ.bin,1,1 +7465168,1328,assets/obseg/chr/CheaddesZ.bin,1,1 +7466496,1312,assets/obseg/chr/CheadduncanZ.bin,1,1 +7467808,1408,assets/obseg/chr/CheaddwayneZ.bin,1,1 +7469216,1392,assets/obseg/chr/CheadgrahamZ.bin,1,1 +7470608,1328,assets/obseg/chr/CheadgrantZ.bin,1,1 +7471936,1328,assets/obseg/chr/CheadjimZ.bin,1,1 +7473264,1056,assets/obseg/chr/Cheadjoe2Z.bin,1,1 +7474320,1392,assets/obseg/chr/CheadjoeZ.bin,1,1 +7475712,1296,assets/obseg/chr/CheadjoelZ.bin,1,1 +7477008,1376,assets/obseg/chr/CheadkarlZ.bin,1,1 +7478384,1360,assets/obseg/chr/CheadkenZ.bin,1,1 +7479744,1408,assets/obseg/chr/CheadleeZ.bin,1,1 +7481152,1008,assets/obseg/chr/CheadmandyZ.bin,1,1 +7482160,1040,assets/obseg/chr/CheadmarionZ.bin,1,1 +7483200,1328,assets/obseg/chr/CheadmarkZ.bin,1,1 +7484528,1376,assets/obseg/chr/CheadmartinZ.bin,1,1 +7485904,1376,assets/obseg/chr/CheadmishkinZ.bin,1,1 +7487280,1312,assets/obseg/chr/CheadneilZ.bin,1,1 +7488592,1424,assets/obseg/chr/CheadpeteZ.bin,1,1 +7490016,1296,assets/obseg/chr/CheadrobinZ.bin,1,1 +7491312,1024,assets/obseg/chr/CheadsallyZ.bin,1,1 +7492336,1408,assets/obseg/chr/CheadscottZ.bin,1,1 +7493744,1504,assets/obseg/chr/CheadshaunZ.bin,1,1 +7495248,1360,assets/obseg/chr/CheadsteveeZ.bin,1,1 +7496608,1360,assets/obseg/chr/CheadstevehZ.bin,1,1 +7497968,1168,assets/obseg/chr/CheadvivienZ.bin,1,1 +7499136,11328,assets/obseg/chr/CjawsZ.bin,1,1 +7510464,8208,assets/obseg/chr/CjeanwomanZ.bin,1,1 +7518672,11168,assets/obseg/chr/CmaydayZ.bin,1,1 +7529840,8528,assets/obseg/chr/CmoonfemaleZ.bin,1,1 +7538368,9712,assets/obseg/chr/CmoonguardZ.bin,1,1 +7548080,14528,assets/obseg/chr/CnatalyaZ.bin,1,1 +7562608,9952,assets/obseg/chr/CnavyguardZ.bin,1,1 +7572560,12592,assets/obseg/chr/CoddjobZ.bin,1,1 +7585152,9808,assets/obseg/chr/ColiveguardZ.bin,1,1 +7594960,13360,assets/obseg/chr/CorumovZ.bin,1,1 +7608320,12416,assets/obseg/chr/CpilotZ.bin,1,1 +7620736,10032,assets/obseg/chr/CredmanZ.bin,1,1 +7630768,7216,assets/obseg/chr/CrusguardZ.bin,1,1 +7637984,13104,assets/obseg/chr/CsnowbondZ.bin,1,1 +7651088,11392,assets/obseg/chr/CsnowguardZ.bin,1,1 +7662480,14624,assets/obseg/chr/CspicebondZ.bin,1,1 +7677104,12832,assets/obseg/chr/Csuit_lf_handZ.bin,1,1 +7689936,11664,assets/obseg/chr/CsuitbondZ.bin,1,1 +7701600,9904,assets/obseg/chr/CtechmanZ.bin,1,1 +7711504,8176,assets/obseg/chr/CtechwomanZ.bin,1,1 +7719680,11568,assets/obseg/chr/CtimberbondZ.bin,1,1 +7731248,14288,assets/obseg/chr/CtrevelyanZ.bin,1,1 +7745536,9744,assets/obseg/chr/CtrevguardZ.bin,1,1 +7755280,12144,assets/obseg/chr/CvalentinZ.bin,1,1 +7767424,14832,assets/obseg/chr/CxeniaZ.bin,1,1 +7782256,2576,assets/obseg/gun/Gak47Z.bin,1,1 +7784832,912,assets/obseg/gun/GaudiotapeZ.bin,1,1 +7785744,6160,assets/obseg/gun/GautoshotZ.bin,1,1 +7791904,1536,assets/obseg/gun/GblackboxZ.bin,1,1 +7793440,256,assets/obseg/gun/GblueprintsZ.bin,1,1 +7793696,1936,assets/obseg/gun/GbombcaseZ.bin,1,1 +7795632,1520,assets/obseg/gun/GbombdefuserZ.bin,1,1 +7797152,1936,assets/obseg/gun/GbriefcaseZ.bin,1,1 +7799088,2416,assets/obseg/gun/GbugZ.bin,1,1 +7801504,848,assets/obseg/gun/GbugdetectorZ.bin,1,1 +7802352,848,assets/obseg/gun/GbungeeZ.bin,1,1 +7803200,1152,assets/obseg/gun/GcameraZ.bin,1,1 +7804352,608,assets/obseg/gun/GcartblueZ.bin,1,1 +7804960,304,assets/obseg/gun/GcartridgeZ.bin,1,1 +7805264,528,assets/obseg/gun/GcartrifleZ.bin,1,1 +7805792,512,assets/obseg/gun/GcartshellZ.bin,1,1 +7806304,320,assets/obseg/gun/GcircuitboardZ.bin,1,1 +7806624,496,assets/obseg/gun/GclipboardZ.bin,1,1 +7807120,848,assets/obseg/gun/GcreditcardZ.bin,1,1 +7807968,848,assets/obseg/gun/GdarkglassesZ.bin,1,1 +7808816,320,assets/obseg/gun/GdatathiefZ.bin,1,1 +7809136,368,assets/obseg/gun/GdattapeZ.bin,1,1 +7809504,1408,assets/obseg/gun/GdoordecoderZ.bin,1,1 +7810912,848,assets/obseg/gun/GdoorexploderZ.bin,1,1 +7811760,864,assets/obseg/gun/GdossierredZ.bin,1,1 +7812624,848,assets/obseg/gun/GdynamiteZ.bin,1,1 +7813472,592,assets/obseg/gun/GexplosivefloppyZ.bin,1,1 +7814064,848,assets/obseg/gun/GexplosivepenZ.bin,1,1 +7814912,2032,assets/obseg/gun/GextinguisherZ.bin,1,1 +7816944,848,assets/obseg/gun/GfingergunZ.bin,1,1 +7817792,5888,assets/obseg/gun/GfistZ.bin,1,1 +7823680,848,assets/obseg/gun/GflarepistolZ.bin,1,1 +7824528,3232,assets/obseg/gun/Gfnp90Z.bin,1,1 +7827760,2608,assets/obseg/gun/GgaskeyringZ.bin,1,1 +7830368,848,assets/obseg/gun/GgoldbarZ.bin,1,1 +7831216,2480,assets/obseg/gun/GgoldeneyekeyZ.bin,1,1 +7833696,6112,assets/obseg/gun/GgoldengunZ.bin,1,1 +7839808,6496,assets/obseg/gun/GgoldwppkZ.bin,1,1 +7846304,2608,assets/obseg/gun/GgrenadeZ.bin,1,1 +7848912,4224,assets/obseg/gun/GgrenadelaunchZ.bin,1,1 +7853136,848,assets/obseg/gun/GheroinZ.bin,1,1 +7853984,7856,assets/obseg/gun/GjoypadZ.bin,1,1 +7861840,1936,assets/obseg/gun/GkeyanalysercaseZ.bin,1,1 +7863776,2544,assets/obseg/gun/GkeyboltZ.bin,1,1 +7866320,304,assets/obseg/gun/GkeycardZ.bin,1,1 +7866624,3408,assets/obseg/gun/GkeyyaleZ.bin,1,1 +7870032,6864,assets/obseg/gun/GknifeZ.bin,1,1 +7876896,3568,assets/obseg/gun/GlaserZ.bin,1,1 +7880464,848,assets/obseg/gun/GlectreZ.bin,1,1 +7881312,848,assets/obseg/gun/GlockexploderZ.bin,1,1 +7882160,2592,assets/obseg/gun/Gm16Z.bin,1,1 +7884752,240,assets/obseg/gun/GmapZ.bin,1,1 +7884992,1600,assets/obseg/gun/GmicrocameraZ.bin,1,1 +7886592,848,assets/obseg/gun/GmicrocodeZ.bin,1,1 +7887440,848,assets/obseg/gun/GmicrofilmZ.bin,1,1 +7888288,848,assets/obseg/gun/GmoneyZ.bin,1,1 +7889136,3040,assets/obseg/gun/Gmp5kZ.bin,1,1 +7892176,3328,assets/obseg/gun/Gmp5ksilZ.bin,1,1 +7895504,848,assets/obseg/gun/GpitongunZ.bin,1,1 +7896352,464,assets/obseg/gun/GplansZ.bin,1,1 +7896816,848,assets/obseg/gun/GplastiqueZ.bin,1,1 +7897664,1376,assets/obseg/gun/GpolarizedglassesZ.bin,1,1 +7899040,2032,assets/obseg/gun/GproximitymineZ.bin,1,1 +7901072,2496,assets/obseg/gun/GremotemineZ.bin,1,1 +7903568,4640,assets/obseg/gun/GrocketlaunchZ.bin,1,1 +7908208,7568,assets/obseg/gun/GrugerZ.bin,1,1 +7915776,1936,assets/obseg/gun/GsafecrackercaseZ.bin,1,1 +7917712,3808,assets/obseg/gun/GshotgunZ.bin,1,1 +7921520,6496,assets/obseg/gun/GsilverwppkZ.bin,1,1 +7928016,4608,assets/obseg/gun/GskorpionZ.bin,1,1 +7932624,4208,assets/obseg/gun/GsniperrifleZ.bin,1,1 +7936832,3200,assets/obseg/gun/GspectreZ.bin,1,1 +7940032,848,assets/obseg/gun/GspooltapeZ.bin,1,1 +7940880,848,assets/obseg/gun/GspyfileZ.bin,1,1 +7941728,416,assets/obseg/gun/GstafflistZ.bin,1,1 +7942144,7776,assets/obseg/gun/GtaserZ.bin,1,1 +7949920,6896,assets/obseg/gun/GthrowknifeZ.bin,1,1 +7956816,2752,assets/obseg/gun/GtimedmineZ.bin,1,1 +7959568,13312,assets/obseg/gun/GtriggerZ.bin,1,1 +7972880,6944,assets/obseg/gun/Gtt33Z.bin,1,1 +7979824,2320,assets/obseg/gun/GuziZ.bin,1,1 +7982144,528,assets/obseg/gun/GvideotapeZ.bin,1,1 +7982672,5216,assets/obseg/gun/GwatchcommunicatorZ.bin,1,1 +7987888,5216,assets/obseg/gun/GwatchgeigercounterZ.bin,1,1 +7993104,5216,assets/obseg/gun/GwatchidentifierZ.bin,1,1 +7998320,13312,assets/obseg/gun/GwatchlaserZ.bin,1,1 +8011632,5200,assets/obseg/gun/GwatchmagnetattractZ.bin,1,1 +8016832,5216,assets/obseg/gun/GwatchmagnetrepelZ.bin,1,1 +8022048,1936,assets/obseg/gun/GweaponcaseZ.bin,1,1 +8023984,7312,assets/obseg/gun/GwppkZ.bin,1,1 +8031296,7488,assets/obseg/gun/GwppksilZ.bin,1,1 +8038784,848,assets/obseg/gun/GwristdartZ.bin,1,1 +8039632,9600,assets/obseg/prop/PICBMZ.bin,1,1 +8049232,1968,assets/obseg/prop/PICBM_noseZ.bin,1,1 +8051200,480,assets/obseg/prop/Pak47magZ.bin,1,1 +8051680,352,assets/obseg/prop/Palarm1Z.bin,1,1 +8052032,416,assets/obseg/prop/Palarm2Z.bin,1,1 +8052448,576,assets/obseg/prop/Pammo_crate1Z.bin,1,1 +8053024,576,assets/obseg/prop/Pammo_crate2Z.bin,1,1 +8053600,592,assets/obseg/prop/Pammo_crate3Z.bin,1,1 +8054192,624,assets/obseg/prop/Pammo_crate4Z.bin,1,1 +8054816,704,assets/obseg/prop/Pammo_crate5Z.bin,1,1 +8055520,7264,assets/obseg/prop/PapcZ.bin,1,1 +8062784,480,assets/obseg/prop/Parchsecdoor1Z.bin,1,1 +8063264,464,assets/obseg/prop/Parchsecdoor2Z.bin,1,1 +8063728,3584,assets/obseg/prop/ParticZ.bin,1,1 +8067312,2320,assets/obseg/prop/PartictrailerZ.bin,1,1 +8069632,576,assets/obseg/prop/PbarricadeZ.bin,1,1 +8070208,848,assets/obseg/prop/Pbin1Z.bin,1,1 +8071056,224,assets/obseg/prop/Pblotter1Z.bin,1,1 +8071280,1184,assets/obseg/prop/PbodyarmourZ.bin,1,1 +8072464,1056,assets/obseg/prop/PbodyarmourvestZ.bin,1,1 +8073520,512,assets/obseg/prop/PbollardZ.bin,1,1 +8074032,368,assets/obseg/prop/PbombZ.bin,1,1 +8074400,400,assets/obseg/prop/Pbook1Z.bin,1,1 +8074800,1776,assets/obseg/prop/Pbookshelf1Z.bin,1,1 +8076576,368,assets/obseg/prop/Pborg_crateZ.bin,1,1 +8076944,512,assets/obseg/prop/PboxcartridgesZ.bin,1,1 +8077456,1072,assets/obseg/prop/Pboxes2x4Z.bin,1,1 +8078528,1088,assets/obseg/prop/Pboxes3x4Z.bin,1,1 +8079616,1632,assets/obseg/prop/Pboxes4x4Z.bin,1,1 +8081248,880,assets/obseg/prop/PbrakeunitZ.bin,1,1 +8082128,1408,assets/obseg/prop/Pbridge_console1aZ.bin,1,1 +8083536,1376,assets/obseg/prop/Pbridge_console1bZ.bin,1,1 +8084912,1408,assets/obseg/prop/Pbridge_console2aZ.bin,1,1 +8086320,1264,assets/obseg/prop/Pbridge_console2bZ.bin,1,1 +8087584,1360,assets/obseg/prop/Pbridge_console3aZ.bin,1,1 +8088944,1424,assets/obseg/prop/Pbridge_console3bZ.bin,1,1 +8090368,3296,assets/obseg/prop/PcarbmwZ.bin,1,1 +8093664,512,assets/obseg/prop/Pcard_box1Z.bin,1,1 +8094176,576,assets/obseg/prop/Pcard_box2Z.bin,1,1 +8094752,496,assets/obseg/prop/Pcard_box3Z.bin,1,1 +8095248,432,assets/obseg/prop/Pcard_box4Z.bin,1,1 +8095680,512,assets/obseg/prop/Pcard_box5Z.bin,1,1 +8096192,496,assets/obseg/prop/Pcard_box6Z.bin,1,1 +8096688,3072,assets/obseg/prop/PcarescortZ.bin,1,1 +8099760,3120,assets/obseg/prop/PcargolfZ.bin,1,1 +8102880,4416,assets/obseg/prop/PcarweirdZ.bin,1,1 +8107296,5632,assets/obseg/prop/PcarzilZ.bin,1,1 +8112928,896,assets/obseg/prop/PcctvZ.bin,1,1 +8113824,1376,assets/obseg/prop/PchraudiotapeZ.bin,1,1 +8115200,864,assets/obseg/prop/PchrautoshotZ.bin,1,1 +8116064,2176,assets/obseg/prop/PchrblackboxZ.bin,1,1 +8118240,336,assets/obseg/prop/PchrblueprintsZ.bin,1,1 +8118576,496,assets/obseg/prop/PchrbombcaseZ.bin,1,1 +8119072,2272,assets/obseg/prop/PchrbombdefuserZ.bin,1,1 +8121344,400,assets/obseg/prop/PchrbriefcaseZ.bin,1,1 +8121744,3504,assets/obseg/prop/PchrbugZ.bin,1,1 +8125248,368,assets/obseg/prop/PchrbugdetectorZ.bin,1,1 +8125616,368,assets/obseg/prop/PchrbungeeZ.bin,1,1 +8125984,1680,assets/obseg/prop/PchrcameraZ.bin,1,1 +8127664,416,assets/obseg/prop/PchrcircuitboardZ.bin,1,1 +8128080,640,assets/obseg/prop/PchrclipboardZ.bin,1,1 +8128720,368,assets/obseg/prop/PchrcreditcardZ.bin,1,1 +8129088,368,assets/obseg/prop/PchrdarkglassesZ.bin,1,1 +8129456,416,assets/obseg/prop/PchrdatathiefZ.bin,1,1 +8129872,496,assets/obseg/prop/PchrdattapeZ.bin,1,1 +8130368,2144,assets/obseg/prop/PchrdoordecoderZ.bin,1,1 +8132512,368,assets/obseg/prop/PchrdoorexploderZ.bin,1,1 +8132880,1232,assets/obseg/prop/PchrdossierredZ.bin,1,1 +8134112,368,assets/obseg/prop/PchrdynamiteZ.bin,1,1 +8134480,368,assets/obseg/prop/PchrexplosivepenZ.bin,1,1 +8134848,1280,assets/obseg/prop/PchrextinguisherZ.bin,1,1 +8136128,368,assets/obseg/prop/PchrfingergunZ.bin,1,1 +8136496,368,assets/obseg/prop/PchrflarepistolZ.bin,1,1 +8136864,1120,assets/obseg/prop/Pchrfnp90Z.bin,1,1 +8137984,3856,assets/obseg/prop/PchrgaskeyringZ.bin,1,1 +8141840,368,assets/obseg/prop/PchrgoldbarZ.bin,1,1 +8142208,624,assets/obseg/prop/PchrgoldenZ.bin,1,1 +8142832,3744,assets/obseg/prop/PchrgoldeneyekeyZ.bin,1,1 +8146576,368,assets/obseg/prop/PchrgoldwppkZ.bin,1,1 +8146944,880,assets/obseg/prop/PchrgrenadeZ.bin,1,1 +8147824,912,assets/obseg/prop/PchrgrenadelaunchZ.bin,1,1 +8148736,624,assets/obseg/prop/PchrgrenaderoundZ.bin,1,1 +8149360,368,assets/obseg/prop/PchrheroinZ.bin,1,1 +8149728,1008,assets/obseg/prop/PchrkalashZ.bin,1,1 +8150736,496,assets/obseg/prop/PchrkeyanalysercaseZ.bin,1,1 +8151232,3744,assets/obseg/prop/PchrkeyboltZ.bin,1,1 +8154976,5216,assets/obseg/prop/PchrkeyyaleZ.bin,1,1 +8160192,512,assets/obseg/prop/PchrknifeZ.bin,1,1 +8160704,960,assets/obseg/prop/PchrlaserZ.bin,1,1 +8161664,368,assets/obseg/prop/PchrlectreZ.bin,1,1 +8162032,368,assets/obseg/prop/PchrlockexploderZ.bin,1,1 +8162400,976,assets/obseg/prop/Pchrm16Z.bin,1,1 +8163376,336,assets/obseg/prop/PchrmapZ.bin,1,1 +8163712,2288,assets/obseg/prop/PchrmicrocameraZ.bin,1,1 +8166000,368,assets/obseg/prop/PchrmicrocodeZ.bin,1,1 +8166368,368,assets/obseg/prop/PchrmicrofilmZ.bin,1,1 +8166736,368,assets/obseg/prop/PchrmoneyZ.bin,1,1 +8167104,896,assets/obseg/prop/Pchrmp5kZ.bin,1,1 +8168000,1040,assets/obseg/prop/Pchrmp5ksilZ.bin,1,1 +8169040,368,assets/obseg/prop/PchrpitongunZ.bin,1,1 +8169408,656,assets/obseg/prop/PchrplansZ.bin,1,1 +8170064,1120,assets/obseg/prop/PchrplastiqueZ.bin,1,1 +8171184,2240,assets/obseg/prop/PchrpolarizedglassesZ.bin,1,1 +8173424,1120,assets/obseg/prop/PchrproximitymineZ.bin,1,1 +8174544,1120,assets/obseg/prop/PchrremotemineZ.bin,1,1 +8175664,1456,assets/obseg/prop/PchrrocketZ.bin,1,1 +8177120,992,assets/obseg/prop/PchrrocketlaunchZ.bin,1,1 +8178112,992,assets/obseg/prop/PchrrugerZ.bin,1,1 +8179104,496,assets/obseg/prop/PchrsafecrackercaseZ.bin,1,1 +8179600,848,assets/obseg/prop/PchrshotgunZ.bin,1,1 +8180448,368,assets/obseg/prop/PchrsilverwppkZ.bin,1,1 +8180816,896,assets/obseg/prop/PchrskorpionZ.bin,1,1 +8181712,912,assets/obseg/prop/PchrsniperrifleZ.bin,1,1 +8182624,880,assets/obseg/prop/PchrspectreZ.bin,1,1 +8183504,368,assets/obseg/prop/PchrspooltapeZ.bin,1,1 +8183872,368,assets/obseg/prop/PchrspyfileZ.bin,1,1 +8184240,544,assets/obseg/prop/PchrstafflistZ.bin,1,1 +8184784,448,assets/obseg/prop/PchrtesttubeZ.bin,1,1 +8185232,544,assets/obseg/prop/PchrthrowknifeZ.bin,1,1 +8185776,1328,assets/obseg/prop/PchrtimedmineZ.bin,1,1 +8187104,656,assets/obseg/prop/Pchrtt33Z.bin,1,1 +8187760,720,assets/obseg/prop/PchruziZ.bin,1,1 +8188480,720,assets/obseg/prop/PchrvideotapeZ.bin,1,1 +8189200,512,assets/obseg/prop/PchrweaponcaseZ.bin,1,1 +8189712,576,assets/obseg/prop/PchrwppkZ.bin,1,1 +8190288,736,assets/obseg/prop/PchrwppksilZ.bin,1,1 +8191024,368,assets/obseg/prop/PchrwristdartZ.bin,1,1 +8191392,1664,assets/obseg/prop/Pconsole1Z.bin,1,1 +8193056,1664,assets/obseg/prop/Pconsole2Z.bin,1,1 +8194720,1680,assets/obseg/prop/Pconsole3Z.bin,1,1 +8196400,1056,assets/obseg/prop/Pconsole_sev2aZ.bin,1,1 +8197456,1216,assets/obseg/prop/Pconsole_sev2bZ.bin,1,1 +8198672,1088,assets/obseg/prop/Pconsole_sev2cZ.bin,1,1 +8199760,1072,assets/obseg/prop/Pconsole_sev2dZ.bin,1,1 +8200832,1072,assets/obseg/prop/Pconsole_sev_GEaZ.bin,1,1 +8201904,1072,assets/obseg/prop/Pconsole_sev_GEbZ.bin,1,1 +8202976,1152,assets/obseg/prop/Pconsole_sevaZ.bin,1,1 +8204128,1136,assets/obseg/prop/Pconsole_sevbZ.bin,1,1 +8205264,1072,assets/obseg/prop/Pconsole_sevcZ.bin,1,1 +8206336,1072,assets/obseg/prop/Pconsole_sevdZ.bin,1,1 +8207408,400,assets/obseg/prop/Pcryptdoor1aZ.bin,1,1 +8207808,400,assets/obseg/prop/Pcryptdoor1bZ.bin,1,1 +8208208,400,assets/obseg/prop/Pcryptdoor2aZ.bin,1,1 +8208608,400,assets/obseg/prop/Pcryptdoor2bZ.bin,1,1 +8209008,624,assets/obseg/prop/Pcryptdoor3Z.bin,1,1 +8209632,384,assets/obseg/prop/Pcryptdoor4Z.bin,1,1 +8210016,640,assets/obseg/prop/PdamchaindoorZ.bin,1,1 +8210656,544,assets/obseg/prop/PdamgatedoorZ.bin,1,1 +8211200,880,assets/obseg/prop/PdamtundoorZ.bin,1,1 +8212080,416,assets/obseg/prop/Pdepot_door_steelZ.bin,1,1 +8212496,576,assets/obseg/prop/Pdepot_gate_entryZ.bin,1,1 +8213072,384,assets/obseg/prop/Pdesk1Z.bin,1,1 +8213456,384,assets/obseg/prop/Pdesk2Z.bin,1,1 +8213840,576,assets/obseg/prop/Pdesk_arecibo1Z.bin,1,1 +8214416,768,assets/obseg/prop/Pdesk_lamp2Z.bin,1,1 +8215184,6384,assets/obseg/prop/Pdest_engineZ.bin,1,1 +8221568,1632,assets/obseg/prop/Pdest_exocetZ.bin,1,1 +8223200,1648,assets/obseg/prop/Pdest_gunZ.bin,1,1 +8224848,2208,assets/obseg/prop/Pdest_harpoonZ.bin,1,1 +8227056,4016,assets/obseg/prop/Pdest_seawolfZ.bin,1,1 +8231072,448,assets/obseg/prop/Pdisc_readerZ.bin,1,1 +8231520,400,assets/obseg/prop/Pdisk_drive1Z.bin,1,1 +8231920,384,assets/obseg/prop/Pdoor_azt_chairZ.bin,1,1 +8232304,1088,assets/obseg/prop/Pdoor_azt_deskZ.bin,1,1 +8233392,912,assets/obseg/prop/Pdoor_azt_desk_topZ.bin,1,1 +8234304,560,assets/obseg/prop/Pdoor_aztecZ.bin,1,1 +8234864,768,assets/obseg/prop/Pdoor_dest1Z.bin,1,1 +8235632,960,assets/obseg/prop/Pdoor_dest2Z.bin,1,1 +8236592,1376,assets/obseg/prop/Pdoor_eyelidZ.bin,1,1 +8237968,2640,assets/obseg/prop/Pdoor_irisZ.bin,1,1 +8240608,752,assets/obseg/prop/Pdoor_mfZ.bin,1,1 +8241360,880,assets/obseg/prop/Pdoor_roller1Z.bin,1,1 +8242240,576,assets/obseg/prop/Pdoor_roller2Z.bin,1,1 +8242816,576,assets/obseg/prop/Pdoor_roller3Z.bin,1,1 +8243392,608,assets/obseg/prop/Pdoor_roller4Z.bin,1,1 +8244000,304,assets/obseg/prop/Pdoor_rollertrainZ.bin,1,1 +8244304,608,assets/obseg/prop/Pdoor_st_arec1Z.bin,1,1 +8244912,736,assets/obseg/prop/Pdoor_st_arec2Z.bin,1,1 +8245648,416,assets/obseg/prop/Pdoor_winZ.bin,1,1 +8246064,1136,assets/obseg/prop/PdoorconsoleZ.bin,1,1 +8247200,880,assets/obseg/prop/PdoorpanelZ.bin,1,1 +8248080,336,assets/obseg/prop/Pdoorprison1Z.bin,1,1 +8248416,512,assets/obseg/prop/PdoorstatgateZ.bin,1,1 +8248928,288,assets/obseg/prop/PexplosionbitZ.bin,1,1 +8249216,384,assets/obseg/prop/Pfiling_cabinet1Z.bin,1,1 +8249600,304,assets/obseg/prop/PflagZ.bin,1,1 +8249904,800,assets/obseg/prop/PfloppyZ.bin,1,1 +8250704,416,assets/obseg/prop/Pfnp90magZ.bin,1,1 +8251120,896,assets/obseg/prop/Pgas_plant_met1_do1Z.bin,1,1 +8252016,480,assets/obseg/prop/Pgas_plant_sw2_do1Z.bin,1,1 +8252496,512,assets/obseg/prop/Pgas_plant_sw3_do1Z.bin,1,1 +8253008,352,assets/obseg/prop/Pgas_plant_sw4_do1Z.bin,1,1 +8253360,656,assets/obseg/prop/Pgas_plant_sw_do1Z.bin,1,1 +8254016,528,assets/obseg/prop/Pgas_plant_wc_cub1Z.bin,1,1 +8254544,528,assets/obseg/prop/PgasbarrelZ.bin,1,1 +8255072,1344,assets/obseg/prop/PgasbarrelsZ.bin,1,1 +8256416,1376,assets/obseg/prop/Pgasplant_clear_doorZ.bin,1,1 +8257792,1456,assets/obseg/prop/PgastankZ.bin,1,1 +8259248,352,assets/obseg/prop/Pglassware1Z.bin,1,1 +8259600,656,assets/obseg/prop/Pglassware2Z.bin,1,1 +8260256,528,assets/obseg/prop/Pglassware3Z.bin,1,1 +8260784,1408,assets/obseg/prop/Pglassware4Z.bin,1,1 +8262192,3760,assets/obseg/prop/PgoldeneyelogoZ.bin,1,1 +8265952,512,assets/obseg/prop/PgoldenshellsZ.bin,1,1 +8266464,2000,assets/obseg/prop/PgroundgunZ.bin,1,1 +8268464,1856,assets/obseg/prop/Pgun_runway1Z.bin,1,1 +8270320,672,assets/obseg/prop/PhatberetZ.bin,1,1 +8270992,720,assets/obseg/prop/PhatberetblueZ.bin,1,1 +8271712,736,assets/obseg/prop/PhatberetredZ.bin,1,1 +8272448,208,assets/obseg/prop/PhatchboltZ.bin,1,1 +8272656,544,assets/obseg/prop/PhatchdoorZ.bin,1,1 +8273200,368,assets/obseg/prop/PhatchsevxZ.bin,1,1 +8273568,560,assets/obseg/prop/PhatfurryZ.bin,1,1 +8274128,544,assets/obseg/prop/PhatfurryblackZ.bin,1,1 +8274672,528,assets/obseg/prop/PhatfurrybrownZ.bin,1,1 +8275200,560,assets/obseg/prop/PhathelmetZ.bin,1,1 +8275760,560,assets/obseg/prop/PhathelmetgreyZ.bin,1,1 +8276320,992,assets/obseg/prop/PhatmoonZ.bin,1,1 +8277312,784,assets/obseg/prop/PhatpeakedZ.bin,1,1 +8278096,592,assets/obseg/prop/PhattbirdZ.bin,1,1 +8278688,624,assets/obseg/prop/PhattbirdbrownZ.bin,1,1 +8279312,16928,assets/obseg/prop/PhelicopterZ.bin,1,1 +8296240,6000,assets/obseg/prop/PhindZ.bin,1,1 +8302240,4448,assets/obseg/prop/PjeepZ.bin,1,1 +8306688,608,assets/obseg/prop/Pjerry_can1Z.bin,1,1 +8307296,1920,assets/obseg/prop/Pjungle3_treeZ.bin,1,1 +8309216,1328,assets/obseg/prop/Pjungle5_treeZ.bin,1,1 +8310544,848,assets/obseg/prop/Pkey_holderZ.bin,1,1 +8311392,368,assets/obseg/prop/Pkeyboard1Z.bin,1,1 +8311760,672,assets/obseg/prop/Pkit_units1Z.bin,1,1 +8312432,976,assets/obseg/prop/PlabbenchZ.bin,1,1 +8313408,624,assets/obseg/prop/PlandmineZ.bin,1,1 +8314032,4032,assets/obseg/prop/PlegalpageZ.bin,1,1 +8318064,352,assets/obseg/prop/Pletter_tray1Z.bin,1,1 +8318416,400,assets/obseg/prop/Plocker3Z.bin,1,1 +8318816,400,assets/obseg/prop/Plocker4Z.bin,1,1 +8319216,320,assets/obseg/prop/Pm16magZ.bin,1,1 +8319536,512,assets/obseg/prop/PmagnumshellsZ.bin,1,1 +8320048,768,assets/obseg/prop/Pmainframe1Z.bin,1,1 +8320816,720,assets/obseg/prop/Pmainframe2Z.bin,1,1 +8321536,832,assets/obseg/prop/Pmetal_chair1Z.bin,1,1 +8322368,448,assets/obseg/prop/Pmetal_crate1Z.bin,1,1 +8322816,448,assets/obseg/prop/Pmetal_crate2Z.bin,1,1 +8323264,448,assets/obseg/prop/Pmetal_crate3Z.bin,1,1 +8323712,448,assets/obseg/prop/Pmetal_crate4Z.bin,1,1 +8324160,6368,assets/obseg/prop/PmilcopterZ.bin,1,1 +8330528,8960,assets/obseg/prop/PmiltruckZ.bin,1,1 +8339488,2576,assets/obseg/prop/Pmissile_rack2Z.bin,1,1 +8342064,992,assets/obseg/prop/Pmissile_rackZ.bin,1,1 +8343056,832,assets/obseg/prop/PmodemboxZ.bin,1,1 +8343888,3776,assets/obseg/prop/PmotorbikeZ.bin,1,1 +8347664,336,assets/obseg/prop/Pmp5kmagZ.bin,1,1 +8348000,10976,assets/obseg/prop/PnintendologoZ.bin,1,1 +8358976,624,assets/obseg/prop/Poil_drum1Z.bin,1,1 +8359600,752,assets/obseg/prop/Poil_drum2Z.bin,1,1 +8360352,752,assets/obseg/prop/Poil_drum3Z.bin,1,1 +8361104,752,assets/obseg/prop/Poil_drum5Z.bin,1,1 +8361856,784,assets/obseg/prop/Poil_drum6Z.bin,1,1 +8362640,768,assets/obseg/prop/Poil_drum7Z.bin,1,1 +8363408,2640,assets/obseg/prop/PpadlockZ.bin,1,1 +8366048,1104,assets/obseg/prop/PpalmZ.bin,1,1 +8367152,1232,assets/obseg/prop/PpalmtreeZ.bin,1,1 +8368384,320,assets/obseg/prop/Pphone1Z.bin,1,1 +8368704,9696,assets/obseg/prop/PplaneZ.bin,1,1 +8378400,960,assets/obseg/prop/Pplant11Z.bin,1,1 +8379360,912,assets/obseg/prop/Pplant1Z.bin,1,1 +8380272,864,assets/obseg/prop/Pplant2Z.bin,1,1 +8381136,1040,assets/obseg/prop/Pplant2bZ.bin,1,1 +8382176,1104,assets/obseg/prop/Pplant3Z.bin,1,1 +8383280,432,assets/obseg/prop/Pradio_unit1Z.bin,1,1 +8383712,448,assets/obseg/prop/Pradio_unit2Z.bin,1,1 +8384160,448,assets/obseg/prop/Pradio_unit3Z.bin,1,1 +8384608,448,assets/obseg/prop/Pradio_unit4Z.bin,1,1 +8385056,1632,assets/obseg/prop/ProofgunZ.bin,1,1 +8386688,848,assets/obseg/prop/PsafeZ.bin,1,1 +8387536,1264,assets/obseg/prop/PsafedoorZ.bin,1,1 +8388800,5488,assets/obseg/prop/Psat1_reflectZ.bin,1,1 +8394288,288,assets/obseg/prop/PsatboxZ.bin,1,1 +8394576,1120,assets/obseg/prop/PsatdishZ.bin,1,1 +8395696,416,assets/obseg/prop/Psec_panelZ.bin,1,1 +8396112,656,assets/obseg/prop/Psev_door3Z.bin,1,1 +8396768,912,assets/obseg/prop/Psev_door3_windZ.bin,1,1 +8397680,992,assets/obseg/prop/Psev_door4_windZ.bin,1,1 +8398672,848,assets/obseg/prop/Psev_doorZ.bin,1,1 +8399520,816,assets/obseg/prop/Psev_door_v1Z.bin,1,1 +8400336,944,assets/obseg/prop/Psev_trislideZ.bin,1,1 +8401280,3872,assets/obseg/prop/PsevdishZ.bin,1,1 +8405152,736,assets/obseg/prop/PsevdoormetslideZ.bin,1,1 +8405888,368,assets/obseg/prop/PsevdoornowindZ.bin,1,1 +8406256,1072,assets/obseg/prop/PsevdoorwindZ.bin,1,1 +8407328,944,assets/obseg/prop/PsevdoorwoodZ.bin,1,1 +8408272,10752,assets/obseg/prop/PshuttleZ.bin,1,1 +8419024,3120,assets/obseg/prop/Pshuttle_door_lZ.bin,1,1 +8422144,3328,assets/obseg/prop/Pshuttle_door_rZ.bin,1,1 +8425472,416,assets/obseg/prop/PsilencerZ.bin,1,1 +8425888,576,assets/obseg/prop/Psilo_lift_doorZ.bin,1,1 +8426464,752,assets/obseg/prop/PsilotopdoorZ.bin,1,1 +8427216,352,assets/obseg/prop/PskorpionmagZ.bin,1,1 +8427568,368,assets/obseg/prop/PspectremagZ.bin,1,1 +8427936,3392,assets/obseg/prop/PspeedboatZ.bin,1,1 +8431328,12608,assets/obseg/prop/Pst_pete_room_1iZ.bin,1,1 +8443936,12768,assets/obseg/prop/Pst_pete_room_2iZ.bin,1,1 +8456704,12096,assets/obseg/prop/Pst_pete_room_3tZ.bin,1,1 +8468800,13712,assets/obseg/prop/Pst_pete_room_5cZ.bin,1,1 +8482512,13328,assets/obseg/prop/Pst_pete_room_6cZ.bin,1,1 +8495840,624,assets/obseg/prop/Psteel_door1Z.bin,1,1 +8496464,688,assets/obseg/prop/Psteel_door2Z.bin,1,1 +8497152,720,assets/obseg/prop/Psteel_door2bZ.bin,1,1 +8497872,720,assets/obseg/prop/Psteel_door3Z.bin,1,1 +8498592,704,assets/obseg/prop/Pstool1Z.bin,1,1 +8499296,400,assets/obseg/prop/Pswipe_card2Z.bin,1,1 +8499696,656,assets/obseg/prop/Pswivel_chair1Z.bin,1,1 +8500352,6816,assets/obseg/prop/PtankZ.bin,1,1 +8507168,7824,assets/obseg/prop/PtigerZ.bin,1,1 +8514992,2176,assets/obseg/prop/Ptorpedo_rackZ.bin,1,1 +8517168,976,assets/obseg/prop/Ptrain_door2Z.bin,1,1 +8518144,1056,assets/obseg/prop/Ptrain_door3Z.bin,1,1 +8519200,624,assets/obseg/prop/Ptrain_doorZ.bin,1,1 +8519824,832,assets/obseg/prop/PtrainextdoorZ.bin,1,1 +8520656,320,assets/obseg/prop/Ptt33magZ.bin,1,1 +8520976,1312,assets/obseg/prop/Ptuning_console1Z.bin,1,1 +8522288,464,assets/obseg/prop/Ptv1Z.bin,1,1 +8522752,416,assets/obseg/prop/Ptv4screenZ.bin,1,1 +8523168,1744,assets/obseg/prop/Ptv_holderZ.bin,1,1 +8524912,208,assets/obseg/prop/PtvscreenZ.bin,1,1 +8525120,320,assets/obseg/prop/PuzimagZ.bin,1,1 +8525440,1552,assets/obseg/prop/PvertdoorZ.bin,1,1 +8526992,5552,assets/obseg/prop/PwalletbondZ.bin,1,1 +8532544,240,assets/obseg/prop/PwindowZ.bin,1,1 +8532784,224,assets/obseg/prop/Pwindow_cor11Z.bin,1,1 +8533008,224,assets/obseg/prop/Pwindow_lib_lg1Z.bin,1,1 +8533232,240,assets/obseg/prop/Pwindow_lib_sm1Z.bin,1,1 +8533472,640,assets/obseg/prop/Pwood_lg_crate1Z.bin,1,1 +8534112,544,assets/obseg/prop/Pwood_lg_crate2Z.bin,1,1 +8534656,544,assets/obseg/prop/Pwood_md_crate3Z.bin,1,1 +8535200,608,assets/obseg/prop/Pwood_sm_crate4Z.bin,1,1 +8535808,608,assets/obseg/prop/Pwood_sm_crate5Z.bin,1,1 +8536416,544,assets/obseg/prop/Pwood_sm_crate6Z.bin,1,1 +8536960,880,assets/obseg/prop/Pwooden_table1Z.bin,1,1 +8537840,320,assets/obseg/prop/PwppkmagZ.bin,1,1 +8538160,6448,assets/obseg/stan/Tbg_ame_all_p_stanZ.bin,1,1 +8544608,23792,assets/obseg/stan/Tbg_arch_all_p_stanZ.bin,1,1 +8568400,33616,assets/obseg/stan/Tbg_arec_all_p_stanZ.bin,1,1 +8602016,36800,assets/obseg/stan/Tbg_ark_all_p_stanZ.bin,1,1 +8638816,6448,assets/obseg/stan/Tbg_ash_all_p_stanZ.bin,1,1 +8645264,21888,assets/obseg/stan/Tbg_azt_all_p_stanZ.bin,1,1 +8667152,10032,assets/obseg/stan/Tbg_cat_all_p_stanZ.bin,1,1 +8677184,20208,assets/obseg/stan/Tbg_cave_all_p_stanZ.bin,1,1 +8697392,10512,assets/obseg/stan/Tbg_crad_all_p_stanZ.bin,1,1 +8707904,12400,assets/obseg/stan/Tbg_cryp_all_p_stanZ.bin,1,1 +8720304,41952,assets/obseg/stan/Tbg_dam_all_p_stanZ.bin,1,1 +8762256,28480,assets/obseg/stan/Tbg_depo_all_p_stanZ.bin,1,1 +8790736,26864,assets/obseg/stan/Tbg_dest_all_p_stanZ.bin,1,1 +8817600,2832,assets/obseg/stan/Tbg_dish_all_p_stanZ.bin,1,1 +8820432,6448,assets/obseg/stan/Tbg_imp_all_p_stanZ.bin,1,1 +8826880,29008,assets/obseg/stan/Tbg_jun_all_p_stanZ.bin,1,1 +8855888,2752,assets/obseg/stan/Tbg_len_all_p_stanZ.bin,1,1 +8858640,6400,assets/obseg/stan/Tbg_oat_all_p_stanZ.bin,1,1 +8865040,18064,assets/obseg/stan/Tbg_pete_all_p_stanZ.bin,1,1 +8883104,7632,assets/obseg/stan/Tbg_ref_all_p_stanZ.bin,1,1 +8890736,6784,assets/obseg/stan/Tbg_run_all_p_stanZ.bin,1,1 +8897520,15824,assets/obseg/stan/Tbg_sev_all_p_stanZ.bin,1,1 +8913344,20288,assets/obseg/stan/Tbg_sevb_all_p_stanZ.bin,1,1 +8933632,37680,assets/obseg/stan/Tbg_sevx_all_p_stanZ.bin,1,1 +8971312,37024,assets/obseg/stan/Tbg_silo_all_p_stanZ.bin,1,1 +9008336,20160,assets/obseg/stan/Tbg_stat_all_p_stanZ.bin,1,1 +9028496,9168,assets/obseg/stan/Tbg_tra_all_p_stanZ.bin,1,1 9037664,32,assets/obseg/brief/UbriefarchZ,1,0 9037696,32,assets/obseg/brief/UbriefarkZ,1,0 9037728,32,assets/obseg/brief/UbriefaztZ,1,0 @@ -686,66 +686,66 @@ 9038208,32,assets/obseg/brief/UbriefsiloZ,1,0 9038240,32,assets/obseg/brief/UbriefstatueZ,1,0 9038272,32,assets/obseg/brief/UbrieftraZ,1,0 -9038304,1824,assets/obseg/setup/Ump_setupameZ,1,1 -9040128,11680,assets/obseg/setup/u/Ump_setuparchZ,1,1 -9051808,7488,assets/obseg/setup/Ump_setuparkZ,1,1 -9059296,1776,assets/obseg/setup/Ump_setupashZ,1,1 -9061072,9568,assets/obseg/setup/Ump_setupcaveZ,1,1 -9070640,2400,assets/obseg/setup/Ump_setupcradZ,1,1 -9073040,3424,assets/obseg/setup/Ump_setupcrypZ,1,1 -9076464,1008,assets/obseg/setup/Ump_setupdishZ,1,1 -9077472,1600,assets/obseg/setup/Ump_setupimpZ,1,1 -9079072,848,assets/obseg/setup/Ump_setupoatZ,1,1 -9079920,1040,assets/obseg/setup/Ump_setuprefZ,1,1 -9080960,4880,assets/obseg/setup/Ump_setupsevbZ,1,1 -9085840,3712,assets/obseg/setup/Ump_setupstatueZ,1,1 -9089552,17936,assets/obseg/setup/UsetuparchZ,1,1 -9107488,15248,assets/obseg/setup/UsetuparkZ,1,1 -9122736,10496,assets/obseg/setup/UsetupaztZ,1,1 -9133232,15968,assets/obseg/setup/UsetupcaveZ,1,1 -9149200,15104,assets/obseg/setup/UsetupcontrolZ,1,1 -9164304,7216,assets/obseg/setup/u/UsetupcradZ,1,1 -9171520,7824,assets/obseg/setup/UsetupcrypZ,1,1 -9179344,17104,assets/obseg/setup/UsetupdamZ,1,1 -9196448,12176,assets/obseg/setup/UsetupdepoZ,1,1 -9208624,9040,assets/obseg/setup/u/UsetupdestZ,1,1 -9217664,14080,assets/obseg/setup/u/UsetupjunZ,1,1 -9231744,1488,assets/obseg/setup/u/UsetuplenZ,1,1 -9233232,12160,assets/obseg/setup/UsetuppeteZ,1,1 -9245392,6240,assets/obseg/setup/UsetuprunZ,1,1 -9251632,9824,assets/obseg/setup/UsetupsevbZ,1,1 -9261456,6704,assets/obseg/setup/UsetupsevbunkerZ,1,1 -9268160,17168,assets/obseg/setup/UsetupsevxZ,1,1 -9285328,16624,assets/obseg/setup/UsetupsevxbZ,1,1 -9301952,10832,assets/obseg/setup/u/UsetupsiloZ,1,1 -9312784,10192,assets/obseg/setup/u/UsetupstatueZ,1,1 -9322976,12848,assets/obseg/setup/u/UsetuptraZ,1,1 +9038304,1824,assets/obseg/setup/Ump_setupameZ.bin,1,1 +9040128,11680,assets/obseg/setup/u/Ump_setuparchZ.bin,1,1 +9051808,7488,assets/obseg/setup/Ump_setuparkZ.bin,1,1 +9059296,1776,assets/obseg/setup/Ump_setupashZ.bin,1,1 +9061072,9568,assets/obseg/setup/Ump_setupcaveZ.bin,1,1 +9070640,2400,assets/obseg/setup/Ump_setupcradZ.bin,1,1 +9073040,3424,assets/obseg/setup/Ump_setupcrypZ.bin,1,1 +9076464,1008,assets/obseg/setup/Ump_setupdishZ.bin,1,1 +9077472,1600,assets/obseg/setup/Ump_setupimpZ.bin,1,1 +9079072,848,assets/obseg/setup/Ump_setupoatZ.bin,1,1 +9079920,1040,assets/obseg/setup/Ump_setuprefZ.bin,1,1 +9080960,4880,assets/obseg/setup/Ump_setupsevbZ.bin,1,1 +9085840,3712,assets/obseg/setup/Ump_setupstatueZ.bin,1,1 +9089552,17936,assets/obseg/setup/UsetuparchZ.bin,1,1 +9107488,15248,assets/obseg/setup/UsetuparkZ.bin,1,1 +9122736,10496,assets/obseg/setup/UsetupaztZ.bin,1,1 +9133232,15968,assets/obseg/setup/UsetupcaveZ.bin,1,1 +9149200,15104,assets/obseg/setup/UsetupcontrolZ.bin,1,1 +9164304,7216,assets/obseg/setup/u/UsetupcradZ.bin,1,1 +9171520,7824,assets/obseg/setup/UsetupcrypZ.bin,1,1 +9179344,17104,assets/obseg/setup/UsetupdamZ.bin,1,1 +9196448,12176,assets/obseg/setup/UsetupdepoZ.bin,1,1 +9208624,9040,assets/obseg/setup/u/UsetupdestZ.bin,1,1 +9217664,14080,assets/obseg/setup/u/UsetupjunZ.bin,1,1 +9231744,1488,assets/obseg/setup/u/UsetuplenZ.bin,1,1 +9233232,12160,assets/obseg/setup/UsetuppeteZ.bin,1,1 +9245392,6240,assets/obseg/setup/UsetuprunZ.bin,1,1 +9251632,9824,assets/obseg/setup/UsetupsevbZ.bin,1,1 +9261456,6704,assets/obseg/setup/UsetupsevbunkerZ.bin,1,1 +9268160,17168,assets/obseg/setup/UsetupsevxZ.bin,1,1 +9285328,16624,assets/obseg/setup/UsetupsevxbZ.bin,1,1 +9301952,10832,assets/obseg/setup/u/UsetupsiloZ.bin,1,1 +9312784,10192,assets/obseg/setup/u/UsetupstatueZ.bin,1,1 +9322976,12848,assets/obseg/setup/u/UsetuptraZ.bin,1,1 9335824,16,assets/obseg/text/LameE,1,0 9335840,16,assets/obseg/text/LameJ,1,0 9335856,1584,assets/obseg/text/LarchE,1,0 -9337440,1632,assets/obseg/text/LarchJ,1,1 +9337440,1632,assets/obseg/text/LarchJ.bin,1,1 9339072,1488,assets/obseg/text/LarecE,1,0 -9340560,1424,assets/obseg/text/u/LarecJ,1,1 +9340560,1424,assets/obseg/text/u/LarecJ.bin,1,1 9341984,1696,assets/obseg/text/LarkE,1,0 -9343680,1712,assets/obseg/text/u/LarkJ,1,1 +9343680,1712,assets/obseg/text/u/LarkJ.bin,1,1 9345392,16,assets/obseg/text/LashE,1,0 9345408,16,assets/obseg/text/LashJ,1,0 9345424,1088,assets/obseg/text/LaztE,1,0 -9346512,1200,assets/obseg/text/u/LaztJ,1,1 +9346512,1200,assets/obseg/text/u/LaztJ.bin,1,1 9347712,16,assets/obseg/text/LcatE,1,0 9347728,16,assets/obseg/text/LcatJ,1,0 9347744,1024,assets/obseg/text/LcaveE,1,0 -9348768,1120,assets/obseg/text/LcaveJ,1,1 +9348768,1120,assets/obseg/text/LcaveJ.bin,1,1 9349888,1232,assets/obseg/text/LcradE,1,0 -9351120,1200,assets/obseg/text/u/LcradJ,1,1 +9351120,1200,assets/obseg/text/u/LcradJ.bin,1,1 9352320,592,assets/obseg/text/LcrypE,1,0 -9352912,704,assets/obseg/text/u/LcrypJ,1,1 +9352912,704,assets/obseg/text/u/LcrypJ.bin,1,1 9353616,1104,assets/obseg/text/LdamE,1,0 -9354720,1136,assets/obseg/text/u/LdamJ,1,1 +9354720,1136,assets/obseg/text/u/LdamJ.bin,1,1 9355856,880,assets/obseg/text/LdepoE,1,0 -9356736,832,assets/obseg/text/u/LdepoJ,1,1 +9356736,832,assets/obseg/text/u/LdepoJ.bin,1,1 9357568,1168,assets/obseg/text/LdestE,1,0 -9358736,1120,assets/obseg/text/LdestJ,1,1 +9358736,1120,assets/obseg/text/LdestJ.bin,1,1 9359856,16,assets/obseg/text/LdishE,1,0 9359872,16,assets/obseg/text/LdishJ,1,0 9359888,16,assets/obseg/text/LearE,1,0 @@ -753,59 +753,59 @@ 9359920,16,assets/obseg/text/LeldE,1,0 9359936,16,assets/obseg/text/LeldJ,1,0 9359952,1824,assets/obseg/text/LgunE,1,0 -9361776,1872,assets/obseg/text/u/LgunJ,1,1 +9361776,1872,assets/obseg/text/u/LgunJ.bin,1,1 9363648,16,assets/obseg/text/LimpE,1,0 9363664,16,assets/obseg/text/LimpJ,1,0 9363680,1312,assets/obseg/text/LjunE,1,0 -9364992,1344,assets/obseg/text/u/LjunJ,1,1 +9364992,1344,assets/obseg/text/u/LjunJ.bin,1,1 9366336,16,assets/obseg/text/LleeE,1,0 9366352,16,assets/obseg/text/LleeJ,1,0 9366368,1600,assets/obseg/text/LlenE,1,0 -9367968,688,assets/obseg/text/u/LlenJ,1,1 +9367968,688,assets/obseg/text/u/LlenJ.bin,1,1 9368656,16,assets/obseg/text/LlipE,1,0 9368672,16,assets/obseg/text/LlipJ,1,0 9368688,16,assets/obseg/text/LlueE,1,0 9368704,16,assets/obseg/text/LlueJ,1,0 9368720,672,assets/obseg/text/LmiscE,1,0 -9369392,736,assets/obseg/text/u/LmiscJ,1,1 +9369392,736,assets/obseg/text/u/LmiscJ.bin,1,1 9370128,416,assets/obseg/text/LmpmenuE,1,0 -9370544,400,assets/obseg/text/u/LmpmenuJ,1,1 +9370544,400,assets/obseg/text/u/LmpmenuJ.bin,1,1 9370944,192,assets/obseg/text/LmpweaponsE,1,0 -9371136,224,assets/obseg/text/u/LmpweaponsJ,1,1 +9371136,224,assets/obseg/text/u/LmpweaponsJ.bin,1,1 9371360,16,assets/obseg/text/LoatE,1,0 9371376,16,assets/obseg/text/LoatJ,1,0 9371392,560,assets/obseg/text/LoptionsE,1,0 -9371952,592,assets/obseg/text/u/LoptionsJ,1,1 +9371952,592,assets/obseg/text/u/LoptionsJ.bin,1,1 9372544,16,assets/obseg/text/LpamE,1,0 9372560,16,assets/obseg/text/LpamJ,1,0 9372576,1152,assets/obseg/text/LpeteE,1,0 -9373728,1136,assets/obseg/text/u/LpeteJ,1,1 +9373728,1136,assets/obseg/text/u/LpeteJ.bin,1,1 9374864,672,assets/obseg/text/LpropobjE,1,0 -9375536,704,assets/obseg/text/u/LpropobjJ,1,1 +9375536,704,assets/obseg/text/u/LpropobjJ.bin,1,1 9376240,16,assets/obseg/text/LrefE,1,0 9376256,16,assets/obseg/text/LrefJ,1,0 9376272,16,assets/obseg/text/LritE,1,0 9376288,16,assets/obseg/text/LritJ,1,0 9376304,624,assets/obseg/text/LrunE,1,0 -9376928,656,assets/obseg/text/LrunJ,1,1 +9376928,656,assets/obseg/text/LrunJ.bin,1,1 9377584,1376,assets/obseg/text/LsevE,1,0 -9378960,1296,assets/obseg/text/u/LsevJ,1,1 +9378960,1296,assets/obseg/text/u/LsevJ.bin,1,1 9380256,1872,assets/obseg/text/LsevbE,1,0 -9382128,2032,assets/obseg/text/u/LsevbJ,1,1 +9382128,2032,assets/obseg/text/u/LsevbJ.bin,1,1 9384160,1120,assets/obseg/text/LsevxE,1,0 -9385280,960,assets/obseg/text/u/LsevxJ,1,1 +9385280,960,assets/obseg/text/u/LsevxJ.bin,1,1 9386240,1168,assets/obseg/text/LsevxbE,1,0 -9387408,1104,assets/obseg/text/LsevxbJ,1,1 +9387408,1104,assets/obseg/text/LsevxbJ.bin,1,1 9388512,16,assets/obseg/text/LshoE,1,0 9388528,16,assets/obseg/text/LshoJ,1,0 9388544,1456,assets/obseg/text/LsiloE,1,0 -9390000,1504,assets/obseg/text/u/LsiloJ,1,1 +9390000,1504,assets/obseg/text/u/LsiloJ.bin,1,1 9391504,2336,assets/obseg/text/LstatE,1,0 -9393840,2160,assets/obseg/text/u/LstatJ,1,1 +9393840,2160,assets/obseg/text/u/LstatJ.bin,1,1 9396000,2752,assets/obseg/text/LtitleE,1,0 -9398752,2960,assets/obseg/text/u/LtitleJ,1,1 +9398752,2960,assets/obseg/text/u/LtitleJ.bin,1,1 9401712,1072,assets/obseg/text/LtraE,1,0 -9402784,1056,assets/obseg/text/u/LtraJ,1,1 +9402784,1056,assets/obseg/text/u/LtraJ.bin,1,1 9403840,16,assets/obseg/text/LwaxE,1,0 9403856,16,assets/obseg/text/LwaxJ,1,0 9403872,16,assets/obseg/ob__ob_end.seg,0,1 diff --git a/imagelist.u.csv b/imagelist.u.csv index a7129a4..74c53b5 100644 --- a/imagelist.u.csv +++ b/imagelist.u.csv @@ -1,2699 +1,2699 @@ -9403888,1876,assets/images/split/image1.bin -9405764,362,assets/images/split/image2.bin -9406126,2420,assets/images/split/image3.bin -9408546,907,assets/images/split/image4.bin -9409453,339,assets/images/split/image5.bin -9409792,606,assets/images/split/image6.bin -9410398,958,assets/images/split/image7.bin -9411356,26,assets/images/split/image8.bin -9411382,26,assets/images/split/image9.bin -9411408,895,assets/images/split/image10.bin -9412303,913,assets/images/split/image11.bin -9413216,224,assets/images/split/image12.bin -9413440,932,assets/images/split/image13.bin -9414372,1187,assets/images/split/image14.bin -9415559,1143,assets/images/split/image15.bin -9416702,1137,assets/images/split/image16.bin -9417839,1196,assets/images/split/image17.bin -9419035,986,assets/images/split/image18.bin -9420021,26,assets/images/split/image19.bin -9420047,26,assets/images/split/image20.bin -9420073,1561,assets/images/split/image21.bin -9421634,309,assets/images/split/image22.bin -9421943,1525,assets/images/split/image23.bin -9423468,863,assets/images/split/image24.bin -9424331,848,assets/images/split/image25.bin -9425179,1548,assets/images/split/image26.bin -9426727,197,assets/images/split/image27.bin -9426924,166,assets/images/split/image28.bin -9427090,181,assets/images/split/image29.bin -9427271,989,assets/images/split/image30.bin -9428260,1020,assets/images/split/image31.bin -9429280,776,assets/images/split/image32.bin -9430056,774,assets/images/split/image33.bin -9430830,1610,assets/images/split/image34.bin -9432440,1484,assets/images/split/image35.bin -9433924,1696,assets/images/split/image36.bin -9435620,1734,assets/images/split/image37.bin -9437354,1003,assets/images/split/image38.bin -9438357,275,assets/images/split/image39.bin -9438632,551,assets/images/split/image40.bin -9439183,537,assets/images/split/image41.bin -9439720,555,assets/images/split/image42.bin -9440275,546,assets/images/split/image43.bin -9440821,1341,assets/images/split/image44.bin -9442162,1372,assets/images/split/image45.bin -9443534,1007,assets/images/split/image46.bin -9444541,410,assets/images/split/image47.bin -9444951,1108,assets/images/split/image48.bin -9446059,1726,assets/images/split/image49.bin -9447785,636,assets/images/split/image50.bin -9448421,1510,assets/images/split/image51.bin -9449931,824,assets/images/split/image52.bin -9450755,1232,assets/images/split/image53.bin -9451987,1440,assets/images/split/image54.bin -9453427,1170,assets/images/split/image55.bin -9454597,792,assets/images/split/image56.bin -9455389,270,assets/images/split/image57.bin -9455659,241,assets/images/split/image58.bin -9455900,281,assets/images/split/image59.bin -9456181,678,assets/images/split/image60.bin -9456859,416,assets/images/split/image61.bin -9457275,34,assets/images/split/image62.bin -9457309,276,assets/images/split/image63.bin -9457585,156,assets/images/split/image64.bin -9457741,933,assets/images/split/image65.bin -9458674,888,assets/images/split/image66.bin -9459562,836,assets/images/split/image67.bin -9460398,247,assets/images/split/image68.bin -9460645,923,assets/images/split/image69.bin -9461568,429,assets/images/split/image70.bin -9461997,484,assets/images/split/image71.bin -9462481,725,assets/images/split/image72.bin -9463206,198,assets/images/split/image73.bin -9463404,199,assets/images/split/image74.bin -9463603,691,assets/images/split/image75.bin -9464294,418,assets/images/split/image76.bin -9464712,400,assets/images/split/image77.bin -9465112,1505,assets/images/split/image78.bin -9466617,687,assets/images/split/image79.bin -9467304,222,assets/images/split/image80.bin -9467526,500,assets/images/split/image81.bin -9468026,1508,assets/images/split/image82.bin -9469534,441,assets/images/split/image83.bin -9469975,1523,assets/images/split/image84.bin -9471498,551,assets/images/split/image85.bin -9472049,727,assets/images/split/image86.bin -9472776,942,assets/images/split/image87.bin -9473718,761,assets/images/split/image88.bin -9474479,3114,assets/images/split/image89.bin -9477593,3069,assets/images/split/image90.bin -9480662,3121,assets/images/split/image91.bin -9483783,2840,assets/images/split/image92.bin -9486623,3014,assets/images/split/image93.bin -9489637,3176,assets/images/split/image94.bin -9492813,3237,assets/images/split/image95.bin -9496050,3028,assets/images/split/image96.bin -9499078,2941,assets/images/split/image97.bin -9502019,3032,assets/images/split/image98.bin -9505051,3137,assets/images/split/image99.bin -9508188,2975,assets/images/split/image100.bin -9511163,3046,assets/images/split/image101.bin -9514209,3310,assets/images/split/image102.bin -9517519,3334,assets/images/split/image103.bin -9520853,2977,assets/images/split/image104.bin -9523830,2855,assets/images/split/image105.bin -9526685,3352,assets/images/split/image106.bin -9530037,3274,assets/images/split/image107.bin -9533311,2650,assets/images/split/image108.bin -9535961,2166,assets/images/split/image109.bin -9538127,2218,assets/images/split/image110.bin -9540345,2255,assets/images/split/image111.bin -9542600,1940,assets/images/split/image112.bin -9544540,2682,assets/images/split/image113.bin -9547222,3218,assets/images/split/image114.bin -9550440,2954,assets/images/split/image115.bin -9553394,2643,assets/images/split/image116.bin -9556037,3056,assets/images/split/image117.bin -9559093,3340,assets/images/split/image118.bin -9562433,3276,assets/images/split/image119.bin -9565709,2552,assets/images/split/image120.bin -9568261,3265,assets/images/split/image121.bin -9571526,3387,assets/images/split/image122.bin -9574913,3437,assets/images/split/image123.bin -9578350,3056,assets/images/split/image124.bin -9581406,2432,assets/images/split/image125.bin -9583838,2961,assets/images/split/image126.bin -9586799,3233,assets/images/split/image127.bin -9590032,2690,assets/images/split/image128.bin -9592722,3194,assets/images/split/image129.bin -9595916,3403,assets/images/split/image130.bin -9599319,3461,assets/images/split/image131.bin -9602780,3190,assets/images/split/image132.bin -9605970,2985,assets/images/split/image133.bin -9608955,3418,assets/images/split/image134.bin -9612373,3408,assets/images/split/image135.bin -9615781,3125,assets/images/split/image136.bin -9618906,2701,assets/images/split/image137.bin -9621607,3366,assets/images/split/image138.bin -9624973,2853,assets/images/split/image139.bin -9627826,2201,assets/images/split/image140.bin -9630027,1143,assets/images/split/image141.bin -9631170,1157,assets/images/split/image142.bin -9632327,1110,assets/images/split/image143.bin -9633437,2112,assets/images/split/image144.bin -9635549,2122,assets/images/split/image145.bin -9637671,2155,assets/images/split/image146.bin -9639826,1986,assets/images/split/image147.bin -9641812,530,assets/images/split/image148.bin -9642342,587,assets/images/split/image149.bin -9642929,329,assets/images/split/image150.bin -9643258,293,assets/images/split/image151.bin -9643551,784,assets/images/split/image152.bin -9644335,311,assets/images/split/image153.bin -9644646,295,assets/images/split/image154.bin -9644941,315,assets/images/split/image155.bin -9645256,705,assets/images/split/image156.bin -9645961,956,assets/images/split/image157.bin -9646917,1422,assets/images/split/image158.bin -9648339,326,assets/images/split/image159.bin -9648665,315,assets/images/split/image160.bin -9648980,563,assets/images/split/image161.bin -9649543,737,assets/images/split/image162.bin -9650280,796,assets/images/split/image163.bin -9651076,779,assets/images/split/image164.bin -9651855,831,assets/images/split/image165.bin -9652686,757,assets/images/split/image166.bin -9653443,830,assets/images/split/image167.bin -9654273,782,assets/images/split/image168.bin -9655055,851,assets/images/split/image169.bin -9655906,1143,assets/images/split/image170.bin -9657049,761,assets/images/split/image171.bin -9657810,603,assets/images/split/image172.bin -9658413,186,assets/images/split/image173.bin -9658599,678,assets/images/split/image174.bin -9659277,938,assets/images/split/image175.bin -9660215,572,assets/images/split/image176.bin -9660787,2014,assets/images/split/image177.bin -9662801,625,assets/images/split/image178.bin -9663426,755,assets/images/split/image179.bin -9664181,788,assets/images/split/image180.bin -9664969,296,assets/images/split/image181.bin -9665265,505,assets/images/split/image182.bin -9665770,691,assets/images/split/image183.bin -9666461,519,assets/images/split/image184.bin -9666980,603,assets/images/split/image185.bin -9667583,1353,assets/images/split/image186.bin -9668936,1099,assets/images/split/image187.bin -9670035,895,assets/images/split/image188.bin -9670930,1568,assets/images/split/image189.bin -9672498,1107,assets/images/split/image190.bin -9673605,1388,assets/images/split/image191.bin -9674993,1431,assets/images/split/image192.bin -9676424,1302,assets/images/split/image193.bin -9677726,648,assets/images/split/image194.bin -9678374,712,assets/images/split/image195.bin -9679086,1431,assets/images/split/image196.bin -9680517,1149,assets/images/split/image197.bin -9681666,671,assets/images/split/image198.bin -9682337,675,assets/images/split/image199.bin -9683012,330,assets/images/split/image200.bin -9683342,1210,assets/images/split/image201.bin -9684552,1018,assets/images/split/image202.bin -9685570,1327,assets/images/split/image203.bin -9686897,1120,assets/images/split/image204.bin -9688017,1377,assets/images/split/image205.bin -9689394,1271,assets/images/split/image206.bin -9690665,1033,assets/images/split/image207.bin -9691698,1603,assets/images/split/image208.bin -9693301,2859,assets/images/split/image209.bin -9696160,3134,assets/images/split/image210.bin -9699294,1400,assets/images/split/image211.bin -9700694,207,assets/images/split/image212.bin -9700901,656,assets/images/split/image213.bin -9701557,1238,assets/images/split/image214.bin -9702795,224,assets/images/split/image215.bin -9703019,622,assets/images/split/image216.bin -9703641,334,assets/images/split/image217.bin -9703975,480,assets/images/split/image218.bin -9704455,281,assets/images/split/image219.bin -9704736,984,assets/images/split/image220.bin -9705720,1033,assets/images/split/image221.bin -9706753,1010,assets/images/split/image222.bin -9707763,1033,assets/images/split/image223.bin -9708796,1090,assets/images/split/image224.bin -9709886,1085,assets/images/split/image225.bin -9710971,1014,assets/images/split/image226.bin -9711985,691,assets/images/split/image227.bin -9712676,895,assets/images/split/image228.bin -9713571,617,assets/images/split/image229.bin -9714188,553,assets/images/split/image230.bin -9714741,899,assets/images/split/image231.bin -9715640,1498,assets/images/split/image232.bin -9717138,833,assets/images/split/image233.bin -9717971,302,assets/images/split/image234.bin -9718273,1364,assets/images/split/image235.bin -9719637,925,assets/images/split/image236.bin -9720562,1174,assets/images/split/image237.bin -9721736,1257,assets/images/split/image238.bin -9722993,967,assets/images/split/image239.bin -9723960,991,assets/images/split/image240.bin -9724951,1024,assets/images/split/image241.bin -9725975,581,assets/images/split/image242.bin -9726556,502,assets/images/split/image243.bin -9727058,351,assets/images/split/image244.bin -9727409,1144,assets/images/split/image245.bin -9728553,525,assets/images/split/image246.bin -9729078,738,assets/images/split/image247.bin -9729816,199,assets/images/split/image248.bin -9730015,180,assets/images/split/image249.bin -9730195,152,assets/images/split/image250.bin -9730347,199,assets/images/split/image251.bin -9730546,809,assets/images/split/image252.bin -9731355,673,assets/images/split/image253.bin -9732028,717,assets/images/split/image254.bin -9732745,1032,assets/images/split/image255.bin -9733777,1003,assets/images/split/image256.bin -9734780,463,assets/images/split/image257.bin -9735243,829,assets/images/split/image258.bin -9736072,647,assets/images/split/image259.bin -9736719,806,assets/images/split/image260.bin -9737525,896,assets/images/split/image261.bin -9738421,689,assets/images/split/image262.bin -9739110,708,assets/images/split/image263.bin -9739818,558,assets/images/split/image264.bin -9740376,1412,assets/images/split/image265.bin -9741788,424,assets/images/split/image266.bin -9742212,79,assets/images/split/image267.bin -9742291,1368,assets/images/split/image268.bin -9743659,727,assets/images/split/image269.bin -9744386,1410,assets/images/split/image270.bin -9745796,694,assets/images/split/image271.bin -9746490,1302,assets/images/split/image272.bin -9747792,1248,assets/images/split/image273.bin -9749040,1945,assets/images/split/image274.bin -9750985,1920,assets/images/split/image275.bin -9752905,2060,assets/images/split/image276.bin -9754965,1959,assets/images/split/image277.bin -9756924,1924,assets/images/split/image278.bin -9758848,1715,assets/images/split/image279.bin -9760563,666,assets/images/split/image280.bin -9761229,905,assets/images/split/image281.bin -9762134,750,assets/images/split/image282.bin -9762884,799,assets/images/split/image283.bin -9763683,802,assets/images/split/image284.bin -9764485,1400,assets/images/split/image285.bin -9765885,798,assets/images/split/image286.bin -9766683,1064,assets/images/split/image287.bin -9767747,1217,assets/images/split/image288.bin -9768964,1145,assets/images/split/image289.bin -9770109,1273,assets/images/split/image290.bin -9771382,1163,assets/images/split/image291.bin -9772545,991,assets/images/split/image292.bin -9773536,1350,assets/images/split/image293.bin -9774886,1328,assets/images/split/image294.bin -9776214,1323,assets/images/split/image295.bin -9777537,1007,assets/images/split/image296.bin -9778544,1088,assets/images/split/image297.bin -9779632,930,assets/images/split/image298.bin -9780562,783,assets/images/split/image299.bin -9781345,771,assets/images/split/image300.bin -9782116,771,assets/images/split/image301.bin -9782887,884,assets/images/split/image302.bin -9783771,1333,assets/images/split/image303.bin -9785104,639,assets/images/split/image304.bin -9785743,200,assets/images/split/image305.bin -9785943,573,assets/images/split/image306.bin -9786516,687,assets/images/split/image307.bin -9787203,1376,assets/images/split/image308.bin -9788579,901,assets/images/split/image309.bin -9789480,949,assets/images/split/image310.bin -9790429,1351,assets/images/split/image311.bin -9791780,815,assets/images/split/image312.bin -9792595,904,assets/images/split/image313.bin -9793499,636,assets/images/split/image314.bin -9794135,636,assets/images/split/image315.bin -9794771,581,assets/images/split/image316.bin -9795352,581,assets/images/split/image317.bin -9795933,582,assets/images/split/image318.bin -9796515,678,assets/images/split/image319.bin -9797193,321,assets/images/split/image320.bin -9797514,536,assets/images/split/image321.bin -9798050,1115,assets/images/split/image322.bin -9799165,1515,assets/images/split/image323.bin -9800680,1563,assets/images/split/image324.bin -9802243,1581,assets/images/split/image325.bin -9803824,1567,assets/images/split/image326.bin -9805391,1601,assets/images/split/image327.bin -9806992,1619,assets/images/split/image328.bin -9808611,1525,assets/images/split/image329.bin -9810136,836,assets/images/split/image330.bin -9810972,902,assets/images/split/image331.bin -9811874,921,assets/images/split/image332.bin -9812795,864,assets/images/split/image333.bin -9813659,353,assets/images/split/image334.bin -9814012,282,assets/images/split/image335.bin -9814294,307,assets/images/split/image336.bin -9814601,298,assets/images/split/image337.bin -9814899,840,assets/images/split/image338.bin -9815739,1319,assets/images/split/image339.bin -9817058,922,assets/images/split/image340.bin -9817980,1006,assets/images/split/image341.bin -9818986,984,assets/images/split/image342.bin -9819970,1115,assets/images/split/image343.bin -9821085,232,assets/images/split/image344.bin -9821317,290,assets/images/split/image345.bin -9821607,1037,assets/images/split/image346.bin -9822644,993,assets/images/split/image347.bin -9823637,193,assets/images/split/image348.bin -9823830,271,assets/images/split/image349.bin -9824101,770,assets/images/split/image350.bin -9824871,533,assets/images/split/image351.bin -9825404,213,assets/images/split/image352.bin -9825617,818,assets/images/split/image353.bin -9826435,456,assets/images/split/image354.bin -9826891,168,assets/images/split/image355.bin -9827059,906,assets/images/split/image356.bin -9827965,704,assets/images/split/image357.bin -9828669,1098,assets/images/split/image358.bin -9829767,987,assets/images/split/image359.bin -9830754,861,assets/images/split/image360.bin -9831615,845,assets/images/split/image361.bin -9832460,1334,assets/images/split/image362.bin -9833794,960,assets/images/split/image363.bin -9834754,1224,assets/images/split/image364.bin -9835978,973,assets/images/split/image365.bin -9836951,532,assets/images/split/image366.bin -9837483,756,assets/images/split/image367.bin -9838239,950,assets/images/split/image368.bin -9839189,990,assets/images/split/image369.bin -9840179,622,assets/images/split/image370.bin -9840801,622,assets/images/split/image371.bin -9841423,1375,assets/images/split/image372.bin -9842798,1418,assets/images/split/image373.bin -9844216,823,assets/images/split/image374.bin -9845039,1023,assets/images/split/image375.bin -9846062,949,assets/images/split/image376.bin -9847011,949,assets/images/split/image377.bin -9847960,818,assets/images/split/image378.bin -9848778,1020,assets/images/split/image379.bin -9849798,964,assets/images/split/image380.bin -9850762,1094,assets/images/split/image381.bin -9851856,1018,assets/images/split/image382.bin -9852874,609,assets/images/split/image383.bin -9853483,1333,assets/images/split/image384.bin -9854816,1389,assets/images/split/image385.bin -9856205,1103,assets/images/split/image386.bin -9857308,2429,assets/images/split/image387.bin -9859737,2306,assets/images/split/image388.bin -9862043,2349,assets/images/split/image389.bin -9864392,2324,assets/images/split/image390.bin -9866716,2433,assets/images/split/image391.bin -9869149,2302,assets/images/split/image392.bin -9871451,2293,assets/images/split/image393.bin -9873744,2168,assets/images/split/image394.bin -9875912,545,assets/images/split/image395.bin -9876457,1136,assets/images/split/image396.bin -9877593,1318,assets/images/split/image397.bin -9878911,1254,assets/images/split/image398.bin -9880165,1061,assets/images/split/image399.bin -9881226,859,assets/images/split/image400.bin -9882085,1077,assets/images/split/image401.bin -9883162,1081,assets/images/split/image402.bin -9884243,828,assets/images/split/image403.bin -9885071,780,assets/images/split/image404.bin -9885851,767,assets/images/split/image405.bin -9886618,691,assets/images/split/image406.bin -9887309,1321,assets/images/split/image407.bin -9888630,845,assets/images/split/image408.bin -9889475,525,assets/images/split/image409.bin -9890000,925,assets/images/split/image410.bin -9890925,753,assets/images/split/image411.bin -9891678,435,assets/images/split/image412.bin -9892113,526,assets/images/split/image413.bin -9892639,363,assets/images/split/image414.bin -9893002,519,assets/images/split/image415.bin -9893521,399,assets/images/split/image416.bin -9893920,463,assets/images/split/image417.bin -9894383,447,assets/images/split/image418.bin -9894830,1750,assets/images/split/image419.bin -9896580,988,assets/images/split/image420.bin -9897568,1760,assets/images/split/image421.bin -9899328,547,assets/images/split/image422.bin -9899875,483,assets/images/split/image423.bin -9900358,344,assets/images/split/image424.bin -9900702,385,assets/images/split/image425.bin -9901087,1107,assets/images/split/image426.bin -9902194,1374,assets/images/split/image427.bin -9903568,1467,assets/images/split/image428.bin -9905035,1317,assets/images/split/image429.bin -9906352,1837,assets/images/split/image430.bin -9908189,1214,assets/images/split/image431.bin -9909403,755,assets/images/split/image432.bin -9910158,1084,assets/images/split/image433.bin -9911242,998,assets/images/split/image434.bin -9912240,1579,assets/images/split/image435.bin -9913819,797,assets/images/split/image436.bin -9914616,768,assets/images/split/image437.bin -9915384,1615,assets/images/split/image438.bin -9916999,1527,assets/images/split/image439.bin -9918526,1637,assets/images/split/image440.bin -9920163,968,assets/images/split/image441.bin -9921131,971,assets/images/split/image442.bin -9922102,870,assets/images/split/image443.bin -9922972,1718,assets/images/split/image444.bin -9924690,1826,assets/images/split/image445.bin -9926516,2215,assets/images/split/image446.bin -9928731,2252,assets/images/split/image447.bin -9930983,1008,assets/images/split/image448.bin -9931991,827,assets/images/split/image449.bin -9932818,580,assets/images/split/image450.bin -9933398,512,assets/images/split/image451.bin -9933910,503,assets/images/split/image452.bin -9934413,1139,assets/images/split/image453.bin -9935552,964,assets/images/split/image454.bin -9936516,987,assets/images/split/image455.bin -9937503,480,assets/images/split/image456.bin -9937983,493,assets/images/split/image457.bin -9938476,1325,assets/images/split/image458.bin -9939801,1151,assets/images/split/image459.bin -9940952,592,assets/images/split/image460.bin -9941544,646,assets/images/split/image461.bin -9942190,180,assets/images/split/image462.bin -9942370,163,assets/images/split/image463.bin -9942533,486,assets/images/split/image464.bin -9943019,430,assets/images/split/image465.bin -9943449,645,assets/images/split/image466.bin -9944094,547,assets/images/split/image467.bin -9944641,506,assets/images/split/image468.bin -9945147,1954,assets/images/split/image469.bin -9947101,1950,assets/images/split/image470.bin -9949051,320,assets/images/split/image471.bin -9949371,630,assets/images/split/image472.bin -9950001,656,assets/images/split/image473.bin -9950657,612,assets/images/split/image474.bin -9951269,1156,assets/images/split/image475.bin -9952425,966,assets/images/split/image476.bin -9953391,835,assets/images/split/image477.bin -9954226,827,assets/images/split/image478.bin -9955053,809,assets/images/split/image479.bin -9955862,973,assets/images/split/image480.bin -9956835,321,assets/images/split/image481.bin -9957156,1312,assets/images/split/image482.bin -9958468,1139,assets/images/split/image483.bin -9959607,1216,assets/images/split/image484.bin -9960823,897,assets/images/split/image485.bin -9961720,944,assets/images/split/image486.bin -9962664,1010,assets/images/split/image487.bin -9963674,1118,assets/images/split/image488.bin -9964792,1168,assets/images/split/image489.bin -9965960,937,assets/images/split/image490.bin -9966897,923,assets/images/split/image491.bin -9967820,866,assets/images/split/image492.bin -9968686,680,assets/images/split/image493.bin -9969366,1465,assets/images/split/image494.bin -9970831,187,assets/images/split/image495.bin -9971018,186,assets/images/split/image496.bin -9971204,183,assets/images/split/image497.bin -9971387,265,assets/images/split/image498.bin -9971652,225,assets/images/split/image499.bin -9971877,1182,assets/images/split/image500.bin -9973059,1139,assets/images/split/image501.bin -9974198,860,assets/images/split/image502.bin -9975058,823,assets/images/split/image503.bin -9975881,638,assets/images/split/image504.bin -9976519,584,assets/images/split/image505.bin -9977103,571,assets/images/split/image506.bin -9977674,338,assets/images/split/image507.bin -9978012,691,assets/images/split/image508.bin -9978703,392,assets/images/split/image509.bin -9979095,631,assets/images/split/image510.bin -9979726,517,assets/images/split/image511.bin -9980243,420,assets/images/split/image512.bin -9980663,158,assets/images/split/image513.bin -9980821,812,assets/images/split/image514.bin -9981633,1199,assets/images/split/image515.bin -9982832,266,assets/images/split/image516.bin -9983098,312,assets/images/split/image517.bin -9983410,319,assets/images/split/image518.bin -9983729,1236,assets/images/split/image519.bin -9984965,327,assets/images/split/image520.bin -9985292,647,assets/images/split/image521.bin -9985939,157,assets/images/split/image522.bin -9986096,749,assets/images/split/image523.bin -9986845,607,assets/images/split/image524.bin -9987452,266,assets/images/split/image525.bin -9987718,736,assets/images/split/image526.bin -9988454,883,assets/images/split/image527.bin -9989337,426,assets/images/split/image528.bin -9989763,749,assets/images/split/image529.bin -9990512,331,assets/images/split/image530.bin -9990843,1156,assets/images/split/image531.bin -9991999,746,assets/images/split/image532.bin -9992745,69,assets/images/split/image533.bin -9992814,484,assets/images/split/image534.bin -9993298,964,assets/images/split/image535.bin -9994262,1072,assets/images/split/image536.bin -9995334,805,assets/images/split/image537.bin -9996139,662,assets/images/split/image538.bin -9996801,1175,assets/images/split/image539.bin -9997976,828,assets/images/split/image540.bin -9998804,687,assets/images/split/image541.bin -9999491,249,assets/images/split/image542.bin -9999740,1046,assets/images/split/image543.bin -10000786,835,assets/images/split/image544.bin -10001621,1516,assets/images/split/image545.bin -10003137,1892,assets/images/split/image546.bin -10005029,1902,assets/images/split/image547.bin -10006931,1835,assets/images/split/image548.bin -10008766,1068,assets/images/split/image549.bin -10009834,968,assets/images/split/image550.bin -10010802,1035,assets/images/split/image551.bin -10011837,1767,assets/images/split/image552.bin -10013604,1679,assets/images/split/image553.bin -10015283,1538,assets/images/split/image554.bin -10016821,1538,assets/images/split/image555.bin -10018359,1525,assets/images/split/image556.bin -10019884,1734,assets/images/split/image557.bin -10021618,1529,assets/images/split/image558.bin -10023147,1707,assets/images/split/image559.bin -10024854,1896,assets/images/split/image560.bin -10026750,1644,assets/images/split/image561.bin -10028394,1581,assets/images/split/image562.bin -10029975,1590,assets/images/split/image563.bin -10031565,1537,assets/images/split/image564.bin -10033102,1704,assets/images/split/image565.bin -10034806,1695,assets/images/split/image566.bin -10036501,1606,assets/images/split/image567.bin -10038107,378,assets/images/split/image568.bin -10038485,2029,assets/images/split/image569.bin -10040514,1846,assets/images/split/image570.bin -10042360,1903,assets/images/split/image571.bin -10044263,2050,assets/images/split/image572.bin -10046313,2028,assets/images/split/image573.bin -10048341,1904,assets/images/split/image574.bin -10050245,1793,assets/images/split/image575.bin -10052038,2030,assets/images/split/image576.bin -10054068,867,assets/images/split/image577.bin -10054935,1214,assets/images/split/image578.bin -10056149,1169,assets/images/split/image579.bin -10057318,500,assets/images/split/image580.bin -10057818,201,assets/images/split/image581.bin -10058019,1534,assets/images/split/image582.bin -10059553,1527,assets/images/split/image583.bin -10061080,1548,assets/images/split/image584.bin -10062628,1541,assets/images/split/image585.bin -10064169,1039,assets/images/split/image586.bin -10065208,1024,assets/images/split/image587.bin -10066232,1122,assets/images/split/image588.bin -10067354,1308,assets/images/split/image589.bin -10068662,1245,assets/images/split/image590.bin -10069907,1329,assets/images/split/image591.bin -10071236,1196,assets/images/split/image592.bin -10072432,1130,assets/images/split/image593.bin -10073562,1427,assets/images/split/image594.bin -10074989,891,assets/images/split/image595.bin -10075880,1210,assets/images/split/image596.bin -10077090,1422,assets/images/split/image597.bin -10078512,433,assets/images/split/image598.bin -10078945,1377,assets/images/split/image599.bin -10080322,1619,assets/images/split/image600.bin -10081941,1920,assets/images/split/image601.bin -10083861,1617,assets/images/split/image602.bin -10085478,481,assets/images/split/image603.bin -10085959,1402,assets/images/split/image604.bin -10087361,1317,assets/images/split/image605.bin -10088678,1461,assets/images/split/image606.bin -10090139,358,assets/images/split/image607.bin -10090497,325,assets/images/split/image608.bin -10090822,1694,assets/images/split/image609.bin -10092516,2105,assets/images/split/image610.bin -10094621,1404,assets/images/split/image611.bin -10096025,2010,assets/images/split/image612.bin -10098035,702,assets/images/split/image613.bin -10098737,616,assets/images/split/image614.bin -10099353,667,assets/images/split/image615.bin -10100020,646,assets/images/split/image616.bin -10100666,622,assets/images/split/image617.bin -10101288,593,assets/images/split/image618.bin -10101881,926,assets/images/split/image619.bin -10102807,276,assets/images/split/image620.bin -10103083,611,assets/images/split/image621.bin -10103694,1432,assets/images/split/image622.bin -10105126,1128,assets/images/split/image623.bin -10106254,1146,assets/images/split/image624.bin -10107400,293,assets/images/split/image625.bin -10107693,446,assets/images/split/image626.bin -10108139,267,assets/images/split/image627.bin -10108406,328,assets/images/split/image628.bin -10108734,320,assets/images/split/image629.bin -10109054,328,assets/images/split/image630.bin -10109382,1458,assets/images/split/image631.bin -10110840,1000,assets/images/split/image632.bin -10111840,621,assets/images/split/image633.bin -10112461,961,assets/images/split/image634.bin -10113422,973,assets/images/split/image635.bin -10114395,85,assets/images/split/image636.bin -10114480,612,assets/images/split/image637.bin -10115092,870,assets/images/split/image638.bin -10115962,447,assets/images/split/image639.bin -10116409,1848,assets/images/split/image640.bin -10118257,812,assets/images/split/image641.bin -10119069,1363,assets/images/split/image642.bin -10120432,908,assets/images/split/image643.bin -10121340,301,assets/images/split/image644.bin -10121641,726,assets/images/split/image645.bin -10122367,445,assets/images/split/image646.bin -10122812,1187,assets/images/split/image647.bin -10123999,409,assets/images/split/image648.bin -10124408,701,assets/images/split/image649.bin -10125109,612,assets/images/split/image650.bin -10125721,510,assets/images/split/image651.bin -10126231,1260,assets/images/split/image652.bin -10127491,620,assets/images/split/image653.bin -10128111,587,assets/images/split/image654.bin -10128698,837,assets/images/split/image655.bin -10129535,889,assets/images/split/image656.bin -10130424,164,assets/images/split/image657.bin -10130588,171,assets/images/split/image658.bin -10130759,85,assets/images/split/image659.bin -10130844,1025,assets/images/split/image660.bin -10131869,834,assets/images/split/image661.bin -10132703,1241,assets/images/split/image662.bin -10133944,1205,assets/images/split/image663.bin -10135149,196,assets/images/split/image664.bin -10135345,226,assets/images/split/image665.bin -10135571,1511,assets/images/split/image666.bin -10137082,1014,assets/images/split/image667.bin -10138096,997,assets/images/split/image668.bin -10139093,957,assets/images/split/image669.bin -10140050,1084,assets/images/split/image670.bin -10141134,841,assets/images/split/image671.bin -10141975,1081,assets/images/split/image672.bin -10143056,889,assets/images/split/image673.bin -10143945,866,assets/images/split/image674.bin -10144811,875,assets/images/split/image675.bin -10145686,792,assets/images/split/image676.bin -10146478,675,assets/images/split/image677.bin -10147153,129,assets/images/split/image678.bin -10147282,634,assets/images/split/image679.bin -10147916,1258,assets/images/split/image680.bin -10149174,1443,assets/images/split/image681.bin -10150617,1408,assets/images/split/image682.bin -10152025,1278,assets/images/split/image683.bin -10153303,314,assets/images/split/image684.bin -10153617,478,assets/images/split/image685.bin -10154095,742,assets/images/split/image686.bin -10154837,674,assets/images/split/image687.bin -10155511,787,assets/images/split/image688.bin -10156298,831,assets/images/split/image689.bin -10157129,543,assets/images/split/image690.bin -10157672,278,assets/images/split/image691.bin -10157950,162,assets/images/split/image692.bin -10158112,333,assets/images/split/image693.bin -10158445,1101,assets/images/split/image694.bin -10159546,593,assets/images/split/image695.bin -10160139,508,assets/images/split/image696.bin -10160647,529,assets/images/split/image697.bin -10161176,452,assets/images/split/image698.bin -10161628,388,assets/images/split/image699.bin -10162016,543,assets/images/split/image700.bin -10162559,343,assets/images/split/image701.bin -10162902,828,assets/images/split/image702.bin -10163730,138,assets/images/split/image703.bin -10163868,525,assets/images/split/image704.bin -10164393,520,assets/images/split/image705.bin -10164913,884,assets/images/split/image706.bin -10165797,662,assets/images/split/image707.bin -10166459,498,assets/images/split/image708.bin -10166957,351,assets/images/split/image709.bin -10167308,1214,assets/images/split/image710.bin -10168522,789,assets/images/split/image711.bin -10169311,1242,assets/images/split/image712.bin -10170553,589,assets/images/split/image713.bin -10171142,1548,assets/images/split/image714.bin -10172690,192,assets/images/split/image715.bin -10172882,366,assets/images/split/image716.bin -10173248,850,assets/images/split/image717.bin -10174098,253,assets/images/split/image718.bin -10174351,499,assets/images/split/image719.bin -10174850,593,assets/images/split/image720.bin -10175443,539,assets/images/split/image721.bin -10175982,177,assets/images/split/image722.bin -10176159,552,assets/images/split/image723.bin -10176711,536,assets/images/split/image724.bin -10177247,851,assets/images/split/image725.bin -10178098,1062,assets/images/split/image726.bin -10179160,453,assets/images/split/image727.bin -10179613,921,assets/images/split/image728.bin -10180534,1009,assets/images/split/image729.bin -10181543,457,assets/images/split/image730.bin -10182000,408,assets/images/split/image731.bin -10182408,455,assets/images/split/image732.bin -10182863,1335,assets/images/split/image733.bin -10184198,1307,assets/images/split/image734.bin -10185505,1187,assets/images/split/image735.bin -10186692,1518,assets/images/split/image736.bin -10188210,1496,assets/images/split/image737.bin -10189706,1413,assets/images/split/image738.bin -10191119,1346,assets/images/split/image739.bin -10192465,1410,assets/images/split/image740.bin -10193875,1097,assets/images/split/image741.bin -10194972,1179,assets/images/split/image742.bin -10196151,1389,assets/images/split/image743.bin -10197540,1470,assets/images/split/image744.bin -10199010,1499,assets/images/split/image745.bin -10200509,1028,assets/images/split/image746.bin -10201537,1278,assets/images/split/image747.bin -10202815,1420,assets/images/split/image748.bin -10204235,1379,assets/images/split/image749.bin -10205614,1458,assets/images/split/image750.bin -10207072,1403,assets/images/split/image751.bin -10208475,1163,assets/images/split/image752.bin -10209638,1198,assets/images/split/image753.bin -10210836,1300,assets/images/split/image754.bin -10212136,1436,assets/images/split/image755.bin -10213572,1384,assets/images/split/image756.bin -10214956,1466,assets/images/split/image757.bin -10216422,1425,assets/images/split/image758.bin -10217847,520,assets/images/split/image759.bin -10218367,510,assets/images/split/image760.bin -10218877,1285,assets/images/split/image761.bin -10220162,927,assets/images/split/image762.bin -10221089,178,assets/images/split/image763.bin -10221267,167,assets/images/split/image764.bin -10221434,103,assets/images/split/image765.bin -10221537,1375,assets/images/split/image766.bin -10222912,510,assets/images/split/image767.bin -10223422,801,assets/images/split/image768.bin -10224223,305,assets/images/split/image769.bin -10224528,339,assets/images/split/image770.bin -10224867,1154,assets/images/split/image771.bin -10226021,1548,assets/images/split/image772.bin -10227569,601,assets/images/split/image773.bin -10228170,899,assets/images/split/image774.bin -10229069,120,assets/images/split/image775.bin -10229189,1228,assets/images/split/image776.bin -10230417,1347,assets/images/split/image777.bin -10231764,1468,assets/images/split/image778.bin -10233232,881,assets/images/split/image779.bin -10234113,1474,assets/images/split/image780.bin -10235587,1250,assets/images/split/image781.bin -10236837,1605,assets/images/split/image782.bin -10238442,1339,assets/images/split/image783.bin -10239781,1096,assets/images/split/image784.bin -10240877,504,assets/images/split/image785.bin -10241381,296,assets/images/split/image786.bin -10241677,364,assets/images/split/image787.bin -10242041,967,assets/images/split/image788.bin -10243008,573,assets/images/split/image789.bin -10243581,1580,assets/images/split/image790.bin -10245161,1538,assets/images/split/image791.bin -10246699,1503,assets/images/split/image792.bin -10248202,1640,assets/images/split/image793.bin -10249842,1656,assets/images/split/image794.bin -10251498,1517,assets/images/split/image795.bin -10253015,1600,assets/images/split/image796.bin -10254615,624,assets/images/split/image797.bin -10255239,588,assets/images/split/image798.bin -10255827,612,assets/images/split/image799.bin -10256439,225,assets/images/split/image800.bin -10256664,152,assets/images/split/image801.bin -10256816,451,assets/images/split/image802.bin -10257267,671,assets/images/split/image803.bin -10257938,415,assets/images/split/image804.bin -10258353,464,assets/images/split/image805.bin -10258817,783,assets/images/split/image806.bin -10259600,987,assets/images/split/image807.bin -10260587,325,assets/images/split/image808.bin -10260912,665,assets/images/split/image809.bin -10261577,1056,assets/images/split/image810.bin -10262633,600,assets/images/split/image811.bin -10263233,670,assets/images/split/image812.bin -10263903,821,assets/images/split/image813.bin -10264724,457,assets/images/split/image814.bin -10265181,1145,assets/images/split/image815.bin -10266326,479,assets/images/split/image816.bin -10266805,729,assets/images/split/image817.bin -10267534,1078,assets/images/split/image818.bin -10268612,611,assets/images/split/image819.bin -10269223,1539,assets/images/split/image820.bin -10270762,1391,assets/images/split/image821.bin -10272153,68,assets/images/split/image822.bin -10272221,593,assets/images/split/image823.bin -10272814,388,assets/images/split/image824.bin -10273202,683,assets/images/split/image825.bin -10273885,886,assets/images/split/image826.bin -10274771,1109,assets/images/split/image827.bin -10275880,1334,assets/images/split/image828.bin -10277214,1256,assets/images/split/image829.bin -10278470,1369,assets/images/split/image830.bin -10279839,1401,assets/images/split/image831.bin -10281240,1694,assets/images/split/image832.bin -10282934,1882,assets/images/split/image833.bin -10284816,1707,assets/images/split/image834.bin -10286523,957,assets/images/split/image835.bin -10287480,790,assets/images/split/image836.bin -10288270,1236,assets/images/split/image837.bin -10289506,590,assets/images/split/image838.bin -10290096,1909,assets/images/split/image839.bin -10292005,1962,assets/images/split/image840.bin -10293967,1675,assets/images/split/image841.bin -10295642,1677,assets/images/split/image842.bin -10297319,1402,assets/images/split/image843.bin -10298721,1393,assets/images/split/image844.bin -10300114,762,assets/images/split/image845.bin -10300876,1134,assets/images/split/image846.bin -10302010,910,assets/images/split/image847.bin -10302920,1187,assets/images/split/image848.bin -10304107,183,assets/images/split/image849.bin -10304290,1532,assets/images/split/image850.bin -10305822,783,assets/images/split/image851.bin -10306605,965,assets/images/split/image852.bin -10307570,460,assets/images/split/image853.bin -10308030,505,assets/images/split/image854.bin -10308535,389,assets/images/split/image855.bin -10308924,734,assets/images/split/image856.bin -10309658,655,assets/images/split/image857.bin -10310313,1106,assets/images/split/image858.bin -10311419,795,assets/images/split/image859.bin -10312214,1788,assets/images/split/image860.bin -10314002,1802,assets/images/split/image861.bin -10315804,529,assets/images/split/image862.bin -10316333,728,assets/images/split/image863.bin -10317061,447,assets/images/split/image864.bin -10317508,557,assets/images/split/image865.bin -10318065,403,assets/images/split/image866.bin -10318468,1256,assets/images/split/image867.bin -10319724,294,assets/images/split/image868.bin -10320018,255,assets/images/split/image869.bin -10320273,796,assets/images/split/image870.bin -10321069,379,assets/images/split/image871.bin -10321448,352,assets/images/split/image872.bin -10321800,67,assets/images/split/image873.bin -10321867,400,assets/images/split/image874.bin -10322267,47,assets/images/split/image875.bin -10322314,334,assets/images/split/image876.bin -10322648,314,assets/images/split/image877.bin -10322962,47,assets/images/split/image878.bin -10323009,57,assets/images/split/image879.bin -10323066,81,assets/images/split/image880.bin -10323147,41,assets/images/split/image881.bin -10323188,75,assets/images/split/image882.bin -10323263,43,assets/images/split/image883.bin -10323306,221,assets/images/split/image884.bin -10323527,1792,assets/images/split/image885.bin -10325319,584,assets/images/split/image886.bin -10325903,335,assets/images/split/image887.bin -10326238,364,assets/images/split/image888.bin -10326602,1016,assets/images/split/image889.bin -10327618,688,assets/images/split/image890.bin -10328306,447,assets/images/split/image891.bin -10328753,944,assets/images/split/image892.bin -10329697,1001,assets/images/split/image893.bin -10330698,976,assets/images/split/image894.bin -10331674,882,assets/images/split/image895.bin -10332556,1490,assets/images/split/image896.bin -10334046,1809,assets/images/split/image897.bin -10335855,1650,assets/images/split/image898.bin -10337505,1226,assets/images/split/image899.bin -10338731,1002,assets/images/split/image900.bin -10339733,551,assets/images/split/image901.bin -10340284,958,assets/images/split/image902.bin -10341242,852,assets/images/split/image903.bin -10342094,854,assets/images/split/image904.bin -10342948,949,assets/images/split/image905.bin -10343897,1053,assets/images/split/image906.bin -10344950,697,assets/images/split/image907.bin -10345647,429,assets/images/split/image908.bin -10346076,1299,assets/images/split/image909.bin -10347375,1220,assets/images/split/image910.bin -10348595,1135,assets/images/split/image911.bin -10349730,1245,assets/images/split/image912.bin -10350975,1627,assets/images/split/image913.bin -10352602,919,assets/images/split/image914.bin -10353521,751,assets/images/split/image915.bin -10354272,790,assets/images/split/image916.bin -10355062,790,assets/images/split/image917.bin -10355852,152,assets/images/split/image918.bin -10356004,424,assets/images/split/image919.bin -10356428,630,assets/images/split/image920.bin -10357058,1945,assets/images/split/image921.bin -10359003,668,assets/images/split/image922.bin -10359671,912,assets/images/split/image923.bin -10360583,954,assets/images/split/image924.bin -10361537,2214,assets/images/split/image925.bin -10363751,830,assets/images/split/image926.bin -10364581,1548,assets/images/split/image927.bin -10366129,1616,assets/images/split/image928.bin -10367745,567,assets/images/split/image929.bin -10368312,860,assets/images/split/image930.bin -10369172,787,assets/images/split/image931.bin -10369959,478,assets/images/split/image932.bin -10370437,445,assets/images/split/image933.bin -10370882,617,assets/images/split/image934.bin -10371499,336,assets/images/split/image935.bin -10371835,1078,assets/images/split/image936.bin -10372913,358,assets/images/split/image937.bin -10373271,397,assets/images/split/image938.bin -10373668,513,assets/images/split/image939.bin -10374181,1056,assets/images/split/image940.bin -10375237,726,assets/images/split/image941.bin -10375963,730,assets/images/split/image942.bin -10376693,815,assets/images/split/image943.bin -10377508,697,assets/images/split/image944.bin -10378205,669,assets/images/split/image945.bin -10378874,506,assets/images/split/image946.bin -10379380,639,assets/images/split/image947.bin -10380019,241,assets/images/split/image948.bin -10380260,1511,assets/images/split/image949.bin -10381771,1649,assets/images/split/image950.bin -10383420,1323,assets/images/split/image951.bin -10384743,2168,assets/images/split/image952.bin -10386911,1945,assets/images/split/image953.bin -10388856,1508,assets/images/split/image954.bin -10390364,1544,assets/images/split/image955.bin -10391908,1384,assets/images/split/image956.bin -10393292,1473,assets/images/split/image957.bin -10394765,1509,assets/images/split/image958.bin -10396274,1908,assets/images/split/image959.bin -10398182,647,assets/images/split/image960.bin -10398829,647,assets/images/split/image961.bin -10399476,1888,assets/images/split/image962.bin -10401364,2122,assets/images/split/image963.bin -10403486,2157,assets/images/split/image964.bin -10405643,2153,assets/images/split/image965.bin -10407796,2110,assets/images/split/image966.bin -10409906,2097,assets/images/split/image967.bin -10412003,2126,assets/images/split/image968.bin -10414129,2080,assets/images/split/image969.bin -10416209,645,assets/images/split/image970.bin -10416854,753,assets/images/split/image971.bin -10417607,1227,assets/images/split/image972.bin -10418834,2175,assets/images/split/image973.bin -10421009,2221,assets/images/split/image974.bin -10423230,2175,assets/images/split/image975.bin -10425405,2175,assets/images/split/image976.bin -10427580,2210,assets/images/split/image977.bin -10429790,2175,assets/images/split/image978.bin -10431965,2330,assets/images/split/image979.bin -10434295,601,assets/images/split/image980.bin -10434896,1654,assets/images/split/image981.bin -10436550,1654,assets/images/split/image982.bin -10438204,74,assets/images/split/image983.bin -10438278,880,assets/images/split/image984.bin -10439158,775,assets/images/split/image985.bin -10439933,785,assets/images/split/image986.bin -10440718,1306,assets/images/split/image987.bin -10442024,410,assets/images/split/image988.bin -10442434,17,assets/images/split/image989.bin -10442451,297,assets/images/split/image990.bin -10442748,322,assets/images/split/image991.bin -10443070,401,assets/images/split/image992.bin -10443471,384,assets/images/split/image993.bin -10443855,316,assets/images/split/image994.bin -10444171,354,assets/images/split/image995.bin -10444525,294,assets/images/split/image996.bin -10444819,373,assets/images/split/image997.bin -10445192,862,assets/images/split/image998.bin -10446054,562,assets/images/split/image999.bin -10446616,1290,assets/images/split/image1000.bin -10447906,1036,assets/images/split/image1001.bin -10448942,969,assets/images/split/image1002.bin -10449911,1232,assets/images/split/image1003.bin -10451143,1261,assets/images/split/image1004.bin -10452404,615,assets/images/split/image1005.bin -10453019,826,assets/images/split/image1006.bin -10453845,240,assets/images/split/image1007.bin -10454085,1169,assets/images/split/image1008.bin -10455254,653,assets/images/split/image1009.bin -10455907,434,assets/images/split/image1010.bin -10456341,1554,assets/images/split/image1011.bin -10457895,1822,assets/images/split/image1012.bin -10459717,409,assets/images/split/image1013.bin -10460126,1709,assets/images/split/image1014.bin -10461835,499,assets/images/split/image1015.bin -10462334,905,assets/images/split/image1016.bin -10463239,871,assets/images/split/image1017.bin -10464110,767,assets/images/split/image1018.bin -10464877,889,assets/images/split/image1019.bin -10465766,1166,assets/images/split/image1020.bin -10466932,1311,assets/images/split/image1021.bin -10468243,1349,assets/images/split/image1022.bin -10469592,778,assets/images/split/image1023.bin -10470370,947,assets/images/split/image1024.bin -10471317,1142,assets/images/split/image1025.bin -10472459,554,assets/images/split/image1026.bin -10473013,150,assets/images/split/image1027.bin -10473163,817,assets/images/split/image1028.bin -10473980,1103,assets/images/split/image1029.bin -10475083,817,assets/images/split/image1030.bin -10475900,835,assets/images/split/image1031.bin -10476735,173,assets/images/split/image1032.bin -10476908,1490,assets/images/split/image1033.bin -10478398,1160,assets/images/split/image1034.bin -10479558,1143,assets/images/split/image1035.bin -10480701,1235,assets/images/split/image1036.bin -10481936,1562,assets/images/split/image1037.bin -10483498,1167,assets/images/split/image1038.bin -10484665,1275,assets/images/split/image1039.bin -10485940,1339,assets/images/split/image1040.bin -10487279,1696,assets/images/split/image1041.bin -10488975,530,assets/images/split/image1042.bin -10489505,743,assets/images/split/image1043.bin -10490248,677,assets/images/split/image1044.bin -10490925,580,assets/images/split/image1045.bin -10491505,304,assets/images/split/image1046.bin -10491809,348,assets/images/split/image1047.bin -10492157,860,assets/images/split/image1048.bin -10493017,1654,assets/images/split/image1049.bin -10494671,717,assets/images/split/image1050.bin -10495388,1902,assets/images/split/image1051.bin -10497290,1827,assets/images/split/image1052.bin -10499117,1970,assets/images/split/image1053.bin -10501087,1555,assets/images/split/image1054.bin -10502642,552,assets/images/split/image1055.bin -10503194,1490,assets/images/split/image1056.bin -10504684,519,assets/images/split/image1057.bin -10505203,1438,assets/images/split/image1058.bin -10506641,408,assets/images/split/image1059.bin -10507049,1356,assets/images/split/image1060.bin -10508405,1294,assets/images/split/image1061.bin -10509699,483,assets/images/split/image1062.bin -10510182,1316,assets/images/split/image1063.bin -10511498,982,assets/images/split/image1064.bin -10512480,658,assets/images/split/image1065.bin -10513138,365,assets/images/split/image1066.bin -10513503,965,assets/images/split/image1067.bin -10514468,1467,assets/images/split/image1068.bin -10515935,1338,assets/images/split/image1069.bin -10517273,1443,assets/images/split/image1070.bin -10518716,1818,assets/images/split/image1071.bin -10520534,1034,assets/images/split/image1072.bin -10521568,1761,assets/images/split/image1073.bin -10523329,1827,assets/images/split/image1074.bin -10525156,1150,assets/images/split/image1075.bin -10526306,640,assets/images/split/image1076.bin -10526946,899,assets/images/split/image1077.bin -10527845,740,assets/images/split/image1078.bin -10528585,320,assets/images/split/image1079.bin -10528905,230,assets/images/split/image1080.bin -10529135,1514,assets/images/split/image1081.bin -10530649,1224,assets/images/split/image1082.bin -10531873,1295,assets/images/split/image1083.bin -10533168,228,assets/images/split/image1084.bin -10533396,72,assets/images/split/image1085.bin -10533468,1452,assets/images/split/image1086.bin -10534920,539,assets/images/split/image1087.bin -10535459,863,assets/images/split/image1088.bin -10536322,518,assets/images/split/image1089.bin -10536840,363,assets/images/split/image1090.bin -10537203,1131,assets/images/split/image1091.bin -10538334,1343,assets/images/split/image1092.bin -10539677,1002,assets/images/split/image1093.bin -10540679,1003,assets/images/split/image1094.bin -10541682,1307,assets/images/split/image1095.bin -10542989,1162,assets/images/split/image1096.bin -10544151,1224,assets/images/split/image1097.bin -10545375,1110,assets/images/split/image1098.bin -10546485,902,assets/images/split/image1099.bin -10547387,1264,assets/images/split/image1100.bin -10548651,1366,assets/images/split/image1101.bin -10550017,1331,assets/images/split/image1102.bin -10551348,1002,assets/images/split/image1103.bin -10552350,1256,assets/images/split/image1104.bin -10553606,1358,assets/images/split/image1105.bin -10554964,1304,assets/images/split/image1106.bin -10556268,1183,assets/images/split/image1107.bin -10557451,1354,assets/images/split/image1108.bin -10558805,1335,assets/images/split/image1109.bin -10560140,1333,assets/images/split/image1110.bin -10561473,998,assets/images/split/image1111.bin -10562471,1200,assets/images/split/image1112.bin -10563671,1325,assets/images/split/image1113.bin -10564996,1333,assets/images/split/image1114.bin -10566329,1132,assets/images/split/image1115.bin -10567461,1242,assets/images/split/image1116.bin -10568703,1029,assets/images/split/image1117.bin -10569732,1281,assets/images/split/image1118.bin -10571013,1413,assets/images/split/image1119.bin -10572426,698,assets/images/split/image1120.bin -10573124,672,assets/images/split/image1121.bin -10573796,796,assets/images/split/image1122.bin -10574592,412,assets/images/split/image1123.bin -10575004,216,assets/images/split/image1124.bin -10575220,1832,assets/images/split/image1125.bin -10577052,1197,assets/images/split/image1126.bin -10578249,805,assets/images/split/image1127.bin -10579054,1260,assets/images/split/image1128.bin -10580314,2049,assets/images/split/image1129.bin -10582363,2019,assets/images/split/image1130.bin -10584382,1623,assets/images/split/image1131.bin -10586005,1074,assets/images/split/image1132.bin -10587079,2474,assets/images/split/image1133.bin -10589553,895,assets/images/split/image1134.bin -10590448,1246,assets/images/split/image1135.bin -10591694,1451,assets/images/split/image1136.bin -10593145,1548,assets/images/split/image1137.bin -10594693,666,assets/images/split/image1138.bin -10595359,318,assets/images/split/image1139.bin -10595677,489,assets/images/split/image1140.bin -10596166,955,assets/images/split/image1141.bin -10597121,1086,assets/images/split/image1142.bin -10598207,1061,assets/images/split/image1143.bin -10599268,688,assets/images/split/image1144.bin -10599956,213,assets/images/split/image1145.bin -10600169,335,assets/images/split/image1146.bin -10600504,297,assets/images/split/image1147.bin -10600801,848,assets/images/split/image1148.bin -10601649,828,assets/images/split/image1149.bin -10602477,852,assets/images/split/image1150.bin -10603329,401,assets/images/split/image1151.bin -10603730,1226,assets/images/split/image1152.bin -10604956,803,assets/images/split/image1153.bin -10605759,903,assets/images/split/image1154.bin -10606662,1948,assets/images/split/image1155.bin -10608610,1798,assets/images/split/image1156.bin -10610408,720,assets/images/split/image1157.bin -10611128,762,assets/images/split/image1158.bin -10611890,1176,assets/images/split/image1159.bin -10613066,1183,assets/images/split/image1160.bin -10614249,775,assets/images/split/image1161.bin -10615024,1353,assets/images/split/image1162.bin -10616377,1253,assets/images/split/image1163.bin -10617630,1006,assets/images/split/image1164.bin -10618636,1031,assets/images/split/image1165.bin -10619667,1507,assets/images/split/image1166.bin -10621174,1345,assets/images/split/image1167.bin -10622519,1331,assets/images/split/image1168.bin -10623850,1081,assets/images/split/image1169.bin -10624931,1520,assets/images/split/image1170.bin -10626451,1457,assets/images/split/image1171.bin -10627908,884,assets/images/split/image1172.bin -10628792,37,assets/images/split/image1173.bin -10628829,676,assets/images/split/image1174.bin -10629505,576,assets/images/split/image1175.bin -10630081,527,assets/images/split/image1176.bin -10630608,873,assets/images/split/image1177.bin -10631481,551,assets/images/split/image1178.bin -10632032,289,assets/images/split/image1179.bin -10632321,617,assets/images/split/image1180.bin -10632938,473,assets/images/split/image1181.bin -10633411,586,assets/images/split/image1182.bin -10633997,539,assets/images/split/image1183.bin -10634536,1142,assets/images/split/image1184.bin -10635678,1713,assets/images/split/image1185.bin -10637391,1382,assets/images/split/image1186.bin -10638773,1448,assets/images/split/image1187.bin -10640221,1343,assets/images/split/image1188.bin -10641564,94,assets/images/split/image1189.bin -10641658,746,assets/images/split/image1190.bin -10642404,958,assets/images/split/image1191.bin -10643362,341,assets/images/split/image1192.bin -10643703,198,assets/images/split/image1193.bin -10643901,834,assets/images/split/image1194.bin -10644735,982,assets/images/split/image1195.bin -10645717,809,assets/images/split/image1196.bin -10646526,1998,assets/images/split/image1197.bin -10648524,1492,assets/images/split/image1198.bin -10650016,1569,assets/images/split/image1199.bin -10651585,2035,assets/images/split/image1200.bin -10653620,1902,assets/images/split/image1201.bin -10655522,1964,assets/images/split/image1202.bin -10657486,483,assets/images/split/image1203.bin -10657969,652,assets/images/split/image1204.bin -10658621,722,assets/images/split/image1205.bin -10659343,952,assets/images/split/image1206.bin -10660295,1348,assets/images/split/image1207.bin -10661643,1226,assets/images/split/image1208.bin -10662869,1318,assets/images/split/image1209.bin -10664187,1397,assets/images/split/image1210.bin -10665584,1211,assets/images/split/image1211.bin -10666795,1397,assets/images/split/image1212.bin -10668192,1490,assets/images/split/image1213.bin -10669682,1439,assets/images/split/image1214.bin -10671121,317,assets/images/split/image1215.bin -10671438,1764,assets/images/split/image1216.bin -10673202,1661,assets/images/split/image1217.bin -10674863,745,assets/images/split/image1218.bin -10675608,883,assets/images/split/image1219.bin -10676491,354,assets/images/split/image1220.bin -10676845,273,assets/images/split/image1221.bin -10677118,195,assets/images/split/image1222.bin -10677313,542,assets/images/split/image1223.bin -10677855,1082,assets/images/split/image1224.bin -10678937,1357,assets/images/split/image1225.bin -10680294,653,assets/images/split/image1226.bin -10680947,963,assets/images/split/image1227.bin -10681910,961,assets/images/split/image1228.bin -10682871,940,assets/images/split/image1229.bin -10683811,1438,assets/images/split/image1230.bin -10685249,841,assets/images/split/image1231.bin -10686090,984,assets/images/split/image1232.bin -10687074,1107,assets/images/split/image1233.bin -10688181,1055,assets/images/split/image1234.bin -10689236,1711,assets/images/split/image1235.bin -10690947,925,assets/images/split/image1236.bin -10691872,768,assets/images/split/image1237.bin -10692640,994,assets/images/split/image1238.bin -10693634,907,assets/images/split/image1239.bin -10694541,810,assets/images/split/image1240.bin -10695351,1038,assets/images/split/image1241.bin -10696389,819,assets/images/split/image1242.bin -10697208,709,assets/images/split/image1243.bin -10697917,613,assets/images/split/image1244.bin -10698530,876,assets/images/split/image1245.bin -10699406,1342,assets/images/split/image1246.bin -10700748,1200,assets/images/split/image1247.bin -10701948,408,assets/images/split/image1248.bin -10702356,1257,assets/images/split/image1249.bin -10703613,668,assets/images/split/image1250.bin -10704281,739,assets/images/split/image1251.bin -10705020,729,assets/images/split/image1252.bin -10705749,630,assets/images/split/image1253.bin -10706379,739,assets/images/split/image1254.bin -10707118,939,assets/images/split/image1255.bin -10708057,585,assets/images/split/image1256.bin -10708642,218,assets/images/split/image1257.bin -10708860,887,assets/images/split/image1258.bin -10709747,1351,assets/images/split/image1259.bin -10711098,999,assets/images/split/image1260.bin -10712097,771,assets/images/split/image1261.bin -10712868,498,assets/images/split/image1262.bin -10713366,296,assets/images/split/image1263.bin -10713662,434,assets/images/split/image1264.bin -10714096,260,assets/images/split/image1265.bin -10714356,1188,assets/images/split/image1266.bin -10715544,830,assets/images/split/image1267.bin -10716374,1356,assets/images/split/image1268.bin -10717730,1121,assets/images/split/image1269.bin -10718851,761,assets/images/split/image1270.bin -10719612,1357,assets/images/split/image1271.bin -10720969,481,assets/images/split/image1272.bin -10721450,551,assets/images/split/image1273.bin -10722001,501,assets/images/split/image1274.bin -10722502,830,assets/images/split/image1275.bin -10723332,726,assets/images/split/image1276.bin -10724058,417,assets/images/split/image1277.bin -10724475,203,assets/images/split/image1278.bin -10724678,1264,assets/images/split/image1279.bin -10725942,403,assets/images/split/image1280.bin -10726345,880,assets/images/split/image1281.bin -10727225,942,assets/images/split/image1282.bin -10728167,1048,assets/images/split/image1283.bin -10729215,439,assets/images/split/image1284.bin -10729654,664,assets/images/split/image1285.bin -10730318,2068,assets/images/split/image1286.bin -10732386,2058,assets/images/split/image1287.bin -10734444,2068,assets/images/split/image1288.bin -10736512,2058,assets/images/split/image1289.bin -10738570,1548,assets/images/split/image1290.bin -10740118,1085,assets/images/split/image1291.bin -10741203,1537,assets/images/split/image1292.bin -10742740,1548,assets/images/split/image1293.bin -10744288,1436,assets/images/split/image1294.bin -10745724,1519,assets/images/split/image1295.bin -10747243,1518,assets/images/split/image1296.bin -10748761,1548,assets/images/split/image1297.bin -10750309,1548,assets/images/split/image1298.bin -10751857,1185,assets/images/split/image1299.bin -10753042,1262,assets/images/split/image1300.bin -10754304,1504,assets/images/split/image1301.bin -10755808,1548,assets/images/split/image1302.bin -10757356,1548,assets/images/split/image1303.bin -10758904,1548,assets/images/split/image1304.bin -10760452,2068,assets/images/split/image1305.bin -10762520,2058,assets/images/split/image1306.bin -10764578,2058,assets/images/split/image1307.bin -10766636,2058,assets/images/split/image1308.bin -10768694,1529,assets/images/split/image1309.bin -10770223,1548,assets/images/split/image1310.bin -10771771,2022,assets/images/split/image1311.bin -10773793,2028,assets/images/split/image1312.bin -10775821,2043,assets/images/split/image1313.bin -10777864,2058,assets/images/split/image1314.bin -10779922,2060,assets/images/split/image1315.bin -10781982,2058,assets/images/split/image1316.bin -10784040,2058,assets/images/split/image1317.bin -10786098,2053,assets/images/split/image1318.bin -10788151,1513,assets/images/split/image1319.bin -10789664,1493,assets/images/split/image1320.bin -10791157,1513,assets/images/split/image1321.bin -10792670,1106,assets/images/split/image1322.bin -10793776,1548,assets/images/split/image1323.bin -10795324,1548,assets/images/split/image1324.bin -10796872,2068,assets/images/split/image1325.bin -10798940,2068,assets/images/split/image1326.bin -10801008,2058,assets/images/split/image1327.bin -10803066,2056,assets/images/split/image1328.bin -10805122,2058,assets/images/split/image1329.bin -10807180,2058,assets/images/split/image1330.bin -10809238,2058,assets/images/split/image1331.bin -10811296,2058,assets/images/split/image1332.bin -10813354,1178,assets/images/split/image1333.bin -10814532,1515,assets/images/split/image1334.bin -10816047,1335,assets/images/split/image1335.bin -10817382,1545,assets/images/split/image1336.bin -10818927,1517,assets/images/split/image1337.bin -10820444,1286,assets/images/split/image1338.bin -10821730,899,assets/images/split/image1339.bin -10822629,1269,assets/images/split/image1340.bin -10823898,2068,assets/images/split/image1341.bin -10825966,2068,assets/images/split/image1342.bin -10828034,2058,assets/images/split/image1343.bin -10830092,2058,assets/images/split/image1344.bin -10832150,2058,assets/images/split/image1345.bin -10834208,2058,assets/images/split/image1346.bin -10836266,2058,assets/images/split/image1347.bin -10838324,2058,assets/images/split/image1348.bin -10840382,2068,assets/images/split/image1349.bin -10842450,2068,assets/images/split/image1350.bin -10844518,2058,assets/images/split/image1351.bin -10846576,2058,assets/images/split/image1352.bin -10848634,2058,assets/images/split/image1353.bin -10850692,2058,assets/images/split/image1354.bin -10852750,2058,assets/images/split/image1355.bin -10854808,2058,assets/images/split/image1356.bin -10856866,789,assets/images/split/image1357.bin -10857655,643,assets/images/split/image1358.bin -10858298,646,assets/images/split/image1359.bin -10858944,1158,assets/images/split/image1360.bin -10860102,1526,assets/images/split/image1361.bin -10861628,1548,assets/images/split/image1362.bin -10863176,1545,assets/images/split/image1363.bin -10864721,1223,assets/images/split/image1364.bin -10865944,830,assets/images/split/image1365.bin -10866774,1063,assets/images/split/image1366.bin -10867837,474,assets/images/split/image1367.bin -10868311,1555,assets/images/split/image1368.bin -10869866,1218,assets/images/split/image1369.bin -10871084,1251,assets/images/split/image1370.bin -10872335,1107,assets/images/split/image1371.bin -10873442,1147,assets/images/split/image1372.bin -10874589,636,assets/images/split/image1373.bin -10875225,807,assets/images/split/image1374.bin -10876032,737,assets/images/split/image1375.bin -10876769,823,assets/images/split/image1376.bin -10877592,590,assets/images/split/image1377.bin -10878182,496,assets/images/split/image1378.bin -10878678,819,assets/images/split/image1379.bin -10879497,210,assets/images/split/image1380.bin -10879707,1211,assets/images/split/image1381.bin -10880918,40,assets/images/split/image1382.bin -10880958,38,assets/images/split/image1383.bin -10880996,826,assets/images/split/image1384.bin -10881822,633,assets/images/split/image1385.bin -10882455,1538,assets/images/split/image1386.bin -10883993,787,assets/images/split/image1387.bin -10884780,787,assets/images/split/image1388.bin -10885567,1349,assets/images/split/image1389.bin -10886916,1023,assets/images/split/image1390.bin -10887939,1122,assets/images/split/image1391.bin -10889061,1021,assets/images/split/image1392.bin -10890082,399,assets/images/split/image1393.bin -10890481,590,assets/images/split/image1394.bin -10891071,940,assets/images/split/image1395.bin -10892011,1423,assets/images/split/image1396.bin -10893434,1374,assets/images/split/image1397.bin -10894808,1047,assets/images/split/image1398.bin -10895855,1222,assets/images/split/image1399.bin -10897077,1413,assets/images/split/image1400.bin -10898490,1126,assets/images/split/image1401.bin -10899616,2383,assets/images/split/image1402.bin -10901999,2288,assets/images/split/image1403.bin -10904287,2305,assets/images/split/image1404.bin -10906592,2349,assets/images/split/image1405.bin -10908941,2368,assets/images/split/image1406.bin -10911309,2313,assets/images/split/image1407.bin -10913622,2368,assets/images/split/image1408.bin -10915990,2289,assets/images/split/image1409.bin -10918279,452,assets/images/split/image1410.bin -10918731,371,assets/images/split/image1411.bin -10919102,341,assets/images/split/image1412.bin -10919443,785,assets/images/split/image1413.bin -10920228,658,assets/images/split/image1414.bin -10920886,555,assets/images/split/image1415.bin -10921441,509,assets/images/split/image1416.bin -10921950,461,assets/images/split/image1417.bin -10922411,515,assets/images/split/image1418.bin -10922926,642,assets/images/split/image1419.bin -10923568,590,assets/images/split/image1420.bin -10924158,479,assets/images/split/image1421.bin -10924637,532,assets/images/split/image1422.bin -10925169,1047,assets/images/split/image1423.bin -10926216,500,assets/images/split/image1424.bin -10926716,1505,assets/images/split/image1425.bin -10928221,93,assets/images/split/image1426.bin -10928314,1366,assets/images/split/image1427.bin -10929680,353,assets/images/split/image1428.bin -10930033,345,assets/images/split/image1429.bin -10930378,1215,assets/images/split/image1430.bin -10931593,643,assets/images/split/image1431.bin -10932236,814,assets/images/split/image1432.bin -10933050,308,assets/images/split/image1433.bin -10933358,590,assets/images/split/image1434.bin -10933948,278,assets/images/split/image1435.bin -10934226,240,assets/images/split/image1436.bin -10934466,274,assets/images/split/image1437.bin -10934740,979,assets/images/split/image1438.bin -10935719,979,assets/images/split/image1439.bin -10936698,999,assets/images/split/image1440.bin -10937697,1098,assets/images/split/image1441.bin -10938795,283,assets/images/split/image1442.bin -10939078,300,assets/images/split/image1443.bin -10939378,373,assets/images/split/image1444.bin -10939751,638,assets/images/split/image1445.bin -10940389,456,assets/images/split/image1446.bin -10940845,737,assets/images/split/image1447.bin -10941582,511,assets/images/split/image1448.bin -10942093,760,assets/images/split/image1449.bin -10942853,667,assets/images/split/image1450.bin -10943520,632,assets/images/split/image1451.bin -10944152,671,assets/images/split/image1452.bin -10944823,593,assets/images/split/image1453.bin -10945416,654,assets/images/split/image1454.bin -10946070,622,assets/images/split/image1455.bin -10946692,722,assets/images/split/image1456.bin -10947414,913,assets/images/split/image1457.bin -10948327,1074,assets/images/split/image1458.bin -10949401,315,assets/images/split/image1459.bin -10949716,634,assets/images/split/image1460.bin -10950350,623,assets/images/split/image1461.bin -10950973,1285,assets/images/split/image1462.bin -10952258,1246,assets/images/split/image1463.bin -10953504,1202,assets/images/split/image1464.bin -10954706,827,assets/images/split/image1465.bin -10955533,727,assets/images/split/image1466.bin -10956260,438,assets/images/split/image1467.bin -10956698,498,assets/images/split/image1468.bin -10957196,1699,assets/images/split/image1469.bin -10958895,1699,assets/images/split/image1470.bin -10960594,639,assets/images/split/image1471.bin -10961233,603,assets/images/split/image1472.bin -10961836,420,assets/images/split/image1473.bin -10962256,1410,assets/images/split/image1474.bin -10963666,541,assets/images/split/image1475.bin -10964207,1309,assets/images/split/image1476.bin -10965516,1272,assets/images/split/image1477.bin -10966788,1159,assets/images/split/image1478.bin -10967947,872,assets/images/split/image1479.bin -10968819,892,assets/images/split/image1480.bin -10969711,1930,assets/images/split/image1481.bin -10971641,73,assets/images/split/image1482.bin -10971714,75,assets/images/split/image1483.bin -10971789,51,assets/images/split/image1484.bin -10971840,958,assets/images/split/image1485.bin -10972798,190,assets/images/split/image1486.bin -10972988,424,assets/images/split/image1487.bin -10973412,1742,assets/images/split/image1488.bin -10975154,1652,assets/images/split/image1489.bin -10976806,1798,assets/images/split/image1490.bin -10978604,1732,assets/images/split/image1491.bin -10980336,1758,assets/images/split/image1492.bin -10982094,1792,assets/images/split/image1493.bin -10983886,1724,assets/images/split/image1494.bin -10985610,1765,assets/images/split/image1495.bin -10987375,1643,assets/images/split/image1496.bin -10989018,1851,assets/images/split/image1497.bin -10990869,998,assets/images/split/image1498.bin -10991867,1028,assets/images/split/image1499.bin -10992895,925,assets/images/split/image1500.bin -10993820,746,assets/images/split/image1501.bin -10994566,1396,assets/images/split/image1502.bin -10995962,270,assets/images/split/image1503.bin -10996232,528,assets/images/split/image1504.bin -10996760,351,assets/images/split/image1505.bin -10997111,785,assets/images/split/image1506.bin -10997896,943,assets/images/split/image1507.bin -10998839,1271,assets/images/split/image1508.bin -11000110,650,assets/images/split/image1509.bin -11000760,564,assets/images/split/image1510.bin -11001324,658,assets/images/split/image1511.bin -11001982,645,assets/images/split/image1512.bin -11002627,1353,assets/images/split/image1513.bin -11003980,502,assets/images/split/image1514.bin -11004482,12,assets/images/split/image1515.bin -11004494,360,assets/images/split/image1516.bin -11004854,400,assets/images/split/image1517.bin -11005254,592,assets/images/split/image1518.bin -11005846,1402,assets/images/split/image1519.bin -11007248,1068,assets/images/split/image1520.bin -11008316,1279,assets/images/split/image1521.bin -11009595,803,assets/images/split/image1522.bin -11010398,479,assets/images/split/image1523.bin -11010877,1283,assets/images/split/image1524.bin -11012160,421,assets/images/split/image1525.bin -11012581,748,assets/images/split/image1526.bin -11013329,1157,assets/images/split/image1527.bin -11014486,1832,assets/images/split/image1528.bin -11016318,547,assets/images/split/image1529.bin -11016865,971,assets/images/split/image1530.bin -11017836,346,assets/images/split/image1531.bin -11018182,231,assets/images/split/image1532.bin -11018413,374,assets/images/split/image1533.bin -11018787,436,assets/images/split/image1534.bin -11019223,707,assets/images/split/image1535.bin -11019930,680,assets/images/split/image1536.bin -11020610,570,assets/images/split/image1537.bin -11021180,582,assets/images/split/image1538.bin -11021762,576,assets/images/split/image1539.bin -11022338,636,assets/images/split/image1540.bin -11022974,746,assets/images/split/image1541.bin -11023720,1201,assets/images/split/image1542.bin -11024921,1140,assets/images/split/image1543.bin -11026061,1157,assets/images/split/image1544.bin -11027218,2006,assets/images/split/image1545.bin -11029224,2177,assets/images/split/image1546.bin -11031401,1066,assets/images/split/image1547.bin -11032467,1468,assets/images/split/image1548.bin -11033935,1836,assets/images/split/image1549.bin -11035771,2193,assets/images/split/image1550.bin -11037964,1884,assets/images/split/image1551.bin -11039848,2268,assets/images/split/image1552.bin -11042116,2378,assets/images/split/image1553.bin -11044494,2340,assets/images/split/image1554.bin -11046834,2416,assets/images/split/image1555.bin -11049250,590,assets/images/split/image1556.bin -11049840,2468,assets/images/split/image1557.bin -11052308,823,assets/images/split/image1558.bin -11053131,1544,assets/images/split/image1559.bin -11054675,1548,assets/images/split/image1560.bin -11056223,2535,assets/images/split/image1561.bin -11058758,2524,assets/images/split/image1562.bin -11061282,2498,assets/images/split/image1563.bin -11063780,504,assets/images/split/image1564.bin -11064284,593,assets/images/split/image1565.bin -11064877,562,assets/images/split/image1566.bin -11065439,507,assets/images/split/image1567.bin -11065946,1472,assets/images/split/image1568.bin -11067418,1031,assets/images/split/image1569.bin -11068449,2537,assets/images/split/image1570.bin -11070986,2214,assets/images/split/image1571.bin -11073200,2408,assets/images/split/image1572.bin -11075608,1477,assets/images/split/image1573.bin -11077085,1050,assets/images/split/image1574.bin -11078135,902,assets/images/split/image1575.bin -11079037,990,assets/images/split/image1576.bin -11080027,626,assets/images/split/image1577.bin -11080653,917,assets/images/split/image1578.bin -11081570,848,assets/images/split/image1579.bin -11082418,748,assets/images/split/image1580.bin -11083166,804,assets/images/split/image1581.bin -11083970,710,assets/images/split/image1582.bin -11084680,1822,assets/images/split/image1583.bin -11086502,1807,assets/images/split/image1584.bin -11088309,857,assets/images/split/image1585.bin -11089166,969,assets/images/split/image1586.bin -11090135,928,assets/images/split/image1587.bin -11091063,875,assets/images/split/image1588.bin -11091938,183,assets/images/split/image1589.bin -11092121,1275,assets/images/split/image1590.bin -11093396,1343,assets/images/split/image1591.bin -11094739,1233,assets/images/split/image1592.bin -11095972,1805,assets/images/split/image1593.bin -11097777,732,assets/images/split/image1594.bin -11098509,934,assets/images/split/image1595.bin -11099443,411,assets/images/split/image1596.bin -11099854,972,assets/images/split/image1597.bin -11100826,40,assets/images/split/image1598.bin -11100866,53,assets/images/split/image1599.bin -11100919,567,assets/images/split/image1600.bin -11101486,933,assets/images/split/image1601.bin -11102419,910,assets/images/split/image1602.bin -11103329,677,assets/images/split/image1603.bin -11104006,655,assets/images/split/image1604.bin -11104661,12,assets/images/split/image1605.bin -11104673,475,assets/images/split/image1606.bin -11105148,1883,assets/images/split/image1607.bin -11107031,632,assets/images/split/image1608.bin -11107663,12,assets/images/split/image1609.bin -11107675,983,assets/images/split/image1610.bin -11108658,341,assets/images/split/image1611.bin -11108999,1019,assets/images/split/image1612.bin -11110018,941,assets/images/split/image1613.bin -11110959,1436,assets/images/split/image1614.bin -11112395,305,assets/images/split/image1615.bin -11112700,953,assets/images/split/image1616.bin -11113653,1268,assets/images/split/image1617.bin -11114921,335,assets/images/split/image1618.bin -11115256,949,assets/images/split/image1619.bin -11116205,1174,assets/images/split/image1620.bin -11117379,366,assets/images/split/image1621.bin -11117745,971,assets/images/split/image1622.bin -11118716,1255,assets/images/split/image1623.bin -11119971,434,assets/images/split/image1624.bin -11120405,2144,assets/images/split/image1625.bin -11122549,2170,assets/images/split/image1626.bin -11124719,1788,assets/images/split/image1627.bin -11126507,335,assets/images/split/image1628.bin -11126842,762,assets/images/split/image1629.bin -11127604,767,assets/images/split/image1630.bin -11128371,308,assets/images/split/image1631.bin -11128679,724,assets/images/split/image1632.bin -11129403,1278,assets/images/split/image1633.bin -11130681,1332,assets/images/split/image1634.bin -11132013,899,assets/images/split/image1635.bin -11132912,874,assets/images/split/image1636.bin -11133786,753,assets/images/split/image1637.bin -11134539,876,assets/images/split/image1638.bin -11135415,314,assets/images/split/image1639.bin -11135729,55,assets/images/split/image1640.bin -11135784,921,assets/images/split/image1641.bin -11136705,745,assets/images/split/image1642.bin -11137450,1055,assets/images/split/image1643.bin -11138505,812,assets/images/split/image1644.bin -11139317,1470,assets/images/split/image1645.bin -11140787,717,assets/images/split/image1646.bin -11141504,781,assets/images/split/image1647.bin -11142285,1486,assets/images/split/image1648.bin -11143771,1832,assets/images/split/image1649.bin -11145603,1148,assets/images/split/image1650.bin -11146751,1522,assets/images/split/image1651.bin -11148273,64,assets/images/split/image1652.bin -11148337,1724,assets/images/split/image1653.bin -11150061,2474,assets/images/split/image1654.bin -11152535,2042,assets/images/split/image1655.bin -11154577,1022,assets/images/split/image1656.bin -11155599,1230,assets/images/split/image1657.bin -11156829,700,assets/images/split/image1658.bin -11157529,1488,assets/images/split/image1659.bin -11159017,1389,assets/images/split/image1660.bin -11160406,1937,assets/images/split/image1661.bin -11162343,2385,assets/images/split/image1662.bin -11164728,1933,assets/images/split/image1663.bin -11166661,590,assets/images/split/image1664.bin -11167251,781,assets/images/split/image1665.bin -11168032,2358,assets/images/split/image1666.bin -11170390,1233,assets/images/split/image1667.bin -11171623,1358,assets/images/split/image1668.bin -11172981,374,assets/images/split/image1669.bin -11173355,1441,assets/images/split/image1670.bin -11174796,1414,assets/images/split/image1671.bin -11176210,12,assets/images/split/image1672.bin -11176222,1122,assets/images/split/image1673.bin -11177344,1527,assets/images/split/image1674.bin -11178871,1844,assets/images/split/image1675.bin -11180715,1850,assets/images/split/image1676.bin -11182565,1735,assets/images/split/image1677.bin -11184300,1945,assets/images/split/image1678.bin -11186245,1125,assets/images/split/image1679.bin -11187370,1630,assets/images/split/image1680.bin -11189000,1179,assets/images/split/image1681.bin -11190179,1664,assets/images/split/image1682.bin -11191843,2444,assets/images/split/image1683.bin -11194287,2336,assets/images/split/image1684.bin -11196623,2333,assets/images/split/image1685.bin -11198956,2494,assets/images/split/image1686.bin -11201450,1647,assets/images/split/image1687.bin -11203097,1553,assets/images/split/image1688.bin -11204650,1459,assets/images/split/image1689.bin -11206109,327,assets/images/split/image1690.bin -11206436,1690,assets/images/split/image1691.bin -11208126,1333,assets/images/split/image1692.bin -11209459,1034,assets/images/split/image1693.bin -11210493,796,assets/images/split/image1694.bin -11211289,720,assets/images/split/image1695.bin -11212009,703,assets/images/split/image1696.bin -11212712,2456,assets/images/split/image1697.bin -11215168,449,assets/images/split/image1698.bin -11215617,692,assets/images/split/image1699.bin -11216309,796,assets/images/split/image1700.bin -11217105,904,assets/images/split/image1701.bin -11218009,1006,assets/images/split/image1702.bin -11219015,2267,assets/images/split/image1703.bin -11221282,2137,assets/images/split/image1704.bin -11223419,874,assets/images/split/image1705.bin -11224293,2391,assets/images/split/image1706.bin -11226684,2463,assets/images/split/image1707.bin -11229147,2512,assets/images/split/image1708.bin -11231659,1686,assets/images/split/image1709.bin -11233345,446,assets/images/split/image1710.bin -11233791,673,assets/images/split/image1711.bin -11234464,1368,assets/images/split/image1712.bin -11235832,443,assets/images/split/image1713.bin -11236275,695,assets/images/split/image1714.bin -11236970,643,assets/images/split/image1715.bin -11237613,592,assets/images/split/image1716.bin -11238205,705,assets/images/split/image1717.bin -11238910,1249,assets/images/split/image1718.bin -11240159,876,assets/images/split/image1719.bin -11241035,775,assets/images/split/image1720.bin -11241810,746,assets/images/split/image1721.bin -11242556,705,assets/images/split/image1722.bin -11243261,2371,assets/images/split/image1723.bin -11245632,2243,assets/images/split/image1724.bin -11247875,2311,assets/images/split/image1725.bin -11250186,12,assets/images/split/image1726.bin -11250198,2514,assets/images/split/image1727.bin -11252712,2483,assets/images/split/image1728.bin -11255195,2448,assets/images/split/image1729.bin -11257643,1022,assets/images/split/image1730.bin -11258665,1034,assets/images/split/image1731.bin -11259699,1095,assets/images/split/image1732.bin -11260794,1048,assets/images/split/image1733.bin -11261842,2099,assets/images/split/image1734.bin -11263941,2025,assets/images/split/image1735.bin -11265966,833,assets/images/split/image1736.bin -11266799,369,assets/images/split/image1737.bin -11267168,1543,assets/images/split/image1738.bin -11268711,1421,assets/images/split/image1739.bin -11270132,951,assets/images/split/image1740.bin -11271083,1024,assets/images/split/image1741.bin -11272107,1114,assets/images/split/image1742.bin -11273221,1810,assets/images/split/image1743.bin -11275031,550,assets/images/split/image1744.bin -11275581,1045,assets/images/split/image1745.bin -11276626,1333,assets/images/split/image1746.bin -11277959,1908,assets/images/split/image1747.bin -11279867,1960,assets/images/split/image1748.bin -11281827,1901,assets/images/split/image1749.bin -11283728,636,assets/images/split/image1750.bin -11284364,681,assets/images/split/image1751.bin -11285045,267,assets/images/split/image1752.bin -11285312,834,assets/images/split/image1753.bin -11286146,485,assets/images/split/image1754.bin -11286631,507,assets/images/split/image1755.bin -11287138,1480,assets/images/split/image1756.bin -11288618,923,assets/images/split/image1757.bin -11289541,1046,assets/images/split/image1758.bin -11290587,1106,assets/images/split/image1759.bin -11291693,1064,assets/images/split/image1760.bin -11292757,667,assets/images/split/image1761.bin -11293424,466,assets/images/split/image1762.bin -11293890,1626,assets/images/split/image1763.bin -11295516,2404,assets/images/split/image1764.bin -11297920,2236,assets/images/split/image1765.bin -11300156,2280,assets/images/split/image1766.bin -11302436,2538,assets/images/split/image1767.bin -11304974,2475,assets/images/split/image1768.bin -11307449,2485,assets/images/split/image1769.bin -11309934,908,assets/images/split/image1770.bin -11310842,1369,assets/images/split/image1771.bin -11312211,1639,assets/images/split/image1772.bin -11313850,1402,assets/images/split/image1773.bin -11315252,1152,assets/images/split/image1774.bin -11316404,416,assets/images/split/image1775.bin -11316820,246,assets/images/split/image1776.bin -11317066,791,assets/images/split/image1777.bin -11317857,894,assets/images/split/image1778.bin -11318751,1562,assets/images/split/image1779.bin -11320313,1205,assets/images/split/image1780.bin -11321518,313,assets/images/split/image1781.bin -11321831,322,assets/images/split/image1782.bin -11322153,401,assets/images/split/image1783.bin -11322554,769,assets/images/split/image1784.bin -11323323,450,assets/images/split/image1785.bin -11323773,871,assets/images/split/image1786.bin -11324644,989,assets/images/split/image1787.bin -11325633,902,assets/images/split/image1788.bin -11326535,830,assets/images/split/image1789.bin -11327365,778,assets/images/split/image1790.bin -11328143,744,assets/images/split/image1791.bin -11328887,832,assets/images/split/image1792.bin -11329719,872,assets/images/split/image1793.bin -11330591,981,assets/images/split/image1794.bin -11331572,987,assets/images/split/image1795.bin -11332559,1239,assets/images/split/image1796.bin -11333798,1176,assets/images/split/image1797.bin -11334974,1181,assets/images/split/image1798.bin -11336155,746,assets/images/split/image1799.bin -11336901,884,assets/images/split/image1800.bin -11337785,1676,assets/images/split/image1801.bin -11339461,1838,assets/images/split/image1802.bin -11341299,2274,assets/images/split/image1803.bin -11343573,2080,assets/images/split/image1804.bin -11345653,2209,assets/images/split/image1805.bin -11347862,2106,assets/images/split/image1806.bin -11349968,502,assets/images/split/image1807.bin -11350470,468,assets/images/split/image1808.bin -11350938,756,assets/images/split/image1809.bin -11351694,318,assets/images/split/image1810.bin -11352012,371,assets/images/split/image1811.bin -11352383,1656,assets/images/split/image1812.bin -11354039,665,assets/images/split/image1813.bin -11354704,1443,assets/images/split/image1814.bin -11356147,2572,assets/images/split/image1815.bin -11358719,2531,assets/images/split/image1816.bin -11361250,2537,assets/images/split/image1817.bin -11363787,2368,assets/images/split/image1818.bin -11366155,2482,assets/images/split/image1819.bin -11368637,2406,assets/images/split/image1820.bin -11371043,2529,assets/images/split/image1821.bin -11373572,2345,assets/images/split/image1822.bin -11375917,2376,assets/images/split/image1823.bin -11378293,2536,assets/images/split/image1824.bin -11380829,2509,assets/images/split/image1825.bin -11383338,2468,assets/images/split/image1826.bin -11385806,2401,assets/images/split/image1827.bin -11388207,2405,assets/images/split/image1828.bin -11390612,2313,assets/images/split/image1829.bin -11392925,915,assets/images/split/image1830.bin -11393840,343,assets/images/split/image1831.bin -11394183,651,assets/images/split/image1832.bin -11394834,786,assets/images/split/image1833.bin -11395620,2521,assets/images/split/image1834.bin -11398141,2309,assets/images/split/image1835.bin -11400450,2344,assets/images/split/image1836.bin -11402794,631,assets/images/split/image1837.bin -11403425,636,assets/images/split/image1838.bin -11404061,278,assets/images/split/image1839.bin -11404339,455,assets/images/split/image1840.bin -11404794,260,assets/images/split/image1841.bin -11405054,648,assets/images/split/image1842.bin -11405702,1565,assets/images/split/image1843.bin -11407267,389,assets/images/split/image1844.bin -11407656,2137,assets/images/split/image1845.bin -11409793,2207,assets/images/split/image1846.bin -11412000,2024,assets/images/split/image1847.bin -11414024,2470,assets/images/split/image1848.bin -11416494,2221,assets/images/split/image1849.bin -11418715,2239,assets/images/split/image1850.bin -11420954,2345,assets/images/split/image1851.bin -11423299,2393,assets/images/split/image1852.bin -11425692,2363,assets/images/split/image1853.bin -11428055,2288,assets/images/split/image1854.bin -11430343,2232,assets/images/split/image1855.bin -11432575,2355,assets/images/split/image1856.bin -11434930,1243,assets/images/split/image1857.bin -11436173,2369,assets/images/split/image1858.bin -11438542,1731,assets/images/split/image1859.bin -11440273,2116,assets/images/split/image1860.bin -11442389,810,assets/images/split/image1861.bin -11443199,1546,assets/images/split/image1862.bin -11444745,934,assets/images/split/image1863.bin -11445679,272,assets/images/split/image1864.bin -11445951,694,assets/images/split/image1865.bin -11446645,1829,assets/images/split/image1866.bin -11448474,1278,assets/images/split/image1867.bin -11449752,12,assets/images/split/image1868.bin -11449764,2255,assets/images/split/image1869.bin -11452019,2378,assets/images/split/image1870.bin -11454397,2472,assets/images/split/image1871.bin -11456869,1932,assets/images/split/image1872.bin -11458801,2526,assets/images/split/image1873.bin -11461327,276,assets/images/split/image1874.bin -11461603,1407,assets/images/split/image1875.bin -11463010,450,assets/images/split/image1876.bin -11463460,2004,assets/images/split/image1877.bin -11465464,2021,assets/images/split/image1878.bin -11467485,2531,assets/images/split/image1879.bin -11470016,1981,assets/images/split/image1880.bin -11471997,1192,assets/images/split/image1881.bin -11473189,186,assets/images/split/image1882.bin -11473375,1489,assets/images/split/image1883.bin -11474864,2412,assets/images/split/image1884.bin -11477276,2170,assets/images/split/image1885.bin -11479446,2048,assets/images/split/image1886.bin -11481494,1136,assets/images/split/image1887.bin -11482630,529,assets/images/split/image1888.bin -11483159,522,assets/images/split/image1889.bin -11483681,810,assets/images/split/image1890.bin -11484491,999,assets/images/split/image1891.bin -11485490,611,assets/images/split/image1892.bin -11486101,2572,assets/images/split/image1893.bin -11488673,1548,assets/images/split/image1894.bin -11490221,1520,assets/images/split/image1895.bin -11491741,1642,assets/images/split/image1896.bin -11493383,802,assets/images/split/image1897.bin -11494185,895,assets/images/split/image1898.bin -11495080,895,assets/images/split/image1899.bin -11495975,788,assets/images/split/image1900.bin -11496763,819,assets/images/split/image1901.bin -11497582,412,assets/images/split/image1902.bin -11497994,562,assets/images/split/image1903.bin -11498556,337,assets/images/split/image1904.bin -11498893,374,assets/images/split/image1905.bin -11499267,1961,assets/images/split/image1906.bin -11501228,1946,assets/images/split/image1907.bin -11503174,2354,assets/images/split/image1908.bin -11505528,2253,assets/images/split/image1909.bin -11507781,2254,assets/images/split/image1910.bin -11510035,260,assets/images/split/image1911.bin -11510295,755,assets/images/split/image1912.bin -11511050,1460,assets/images/split/image1913.bin -11512510,830,assets/images/split/image1914.bin -11513340,1294,assets/images/split/image1915.bin -11514634,1530,assets/images/split/image1916.bin -11516164,1124,assets/images/split/image1917.bin -11517288,12,assets/images/split/image1918.bin -11517300,1399,assets/images/split/image1919.bin -11518699,1411,assets/images/split/image1920.bin -11520110,2212,assets/images/split/image1921.bin -11522322,850,assets/images/split/image1922.bin -11523172,727,assets/images/split/image1923.bin -11523899,859,assets/images/split/image1924.bin -11524758,963,assets/images/split/image1925.bin -11525721,1143,assets/images/split/image1926.bin -11526864,1151,assets/images/split/image1927.bin -11528015,657,assets/images/split/image1928.bin -11528672,2293,assets/images/split/image1929.bin -11530965,2312,assets/images/split/image1930.bin -11533277,2515,assets/images/split/image1931.bin -11535792,2249,assets/images/split/image1932.bin -11538041,672,assets/images/split/image1933.bin -11538713,2104,assets/images/split/image1934.bin -11540817,2037,assets/images/split/image1935.bin -11542854,789,assets/images/split/image1936.bin -11543643,1302,assets/images/split/image1937.bin -11544945,1131,assets/images/split/image1938.bin -11546076,773,assets/images/split/image1939.bin -11546849,1246,assets/images/split/image1940.bin -11548095,1131,assets/images/split/image1941.bin -11549226,800,assets/images/split/image1942.bin -11550026,1685,assets/images/split/image1943.bin -11551711,2414,assets/images/split/image1944.bin -11554125,2461,assets/images/split/image1945.bin -11556586,2454,assets/images/split/image1946.bin -11559040,910,assets/images/split/image1947.bin -11559950,584,assets/images/split/image1948.bin -11560534,716,assets/images/split/image1949.bin -11561250,121,assets/images/split/image1950.bin -11561371,1564,assets/images/split/image1951.bin -11562935,1166,assets/images/split/image1952.bin -11564101,1370,assets/images/split/image1953.bin -11565471,1315,assets/images/split/image1954.bin -11566786,1618,assets/images/split/image1955.bin -11568404,1347,assets/images/split/image1956.bin -11569751,1239,assets/images/split/image1957.bin -11570990,1379,assets/images/split/image1958.bin -11572369,966,assets/images/split/image1959.bin -11573335,1094,assets/images/split/image1960.bin -11574429,618,assets/images/split/image1961.bin -11575047,1377,assets/images/split/image1962.bin -11576424,601,assets/images/split/image1963.bin -11577025,1879,assets/images/split/image1964.bin -11578904,1810,assets/images/split/image1965.bin -11580714,1067,assets/images/split/image1966.bin -11581781,370,assets/images/split/image1967.bin -11582151,860,assets/images/split/image1968.bin -11583011,1017,assets/images/split/image1969.bin -11584028,1428,assets/images/split/image1970.bin -11585456,2442,assets/images/split/image1971.bin -11587898,2315,assets/images/split/image1972.bin -11590213,2501,assets/images/split/image1973.bin -11592714,2275,assets/images/split/image1974.bin -11594989,2377,assets/images/split/image1975.bin -11597366,2319,assets/images/split/image1976.bin -11599685,2572,assets/images/split/image1977.bin -11602257,2400,assets/images/split/image1978.bin -11604657,2396,assets/images/split/image1979.bin -11607053,435,assets/images/split/image1980.bin -11607488,1061,assets/images/split/image1981.bin -11608549,1900,assets/images/split/image1982.bin -11610449,1909,assets/images/split/image1983.bin -11612358,431,assets/images/split/image1984.bin -11612789,374,assets/images/split/image1985.bin -11613163,704,assets/images/split/image1986.bin -11613867,916,assets/images/split/image1987.bin -11614783,774,assets/images/split/image1988.bin -11615557,1373,assets/images/split/image1989.bin -11616930,1342,assets/images/split/image1990.bin -11618272,377,assets/images/split/image1991.bin -11618649,381,assets/images/split/image1992.bin -11619030,439,assets/images/split/image1993.bin -11619469,460,assets/images/split/image1994.bin -11619929,385,assets/images/split/image1995.bin -11620314,240,assets/images/split/image1996.bin -11620554,544,assets/images/split/image1997.bin -11621098,2456,assets/images/split/image1998.bin -11623554,2487,assets/images/split/image1999.bin -11626041,2413,assets/images/split/image2000.bin -11628454,2236,assets/images/split/image2001.bin -11630690,2234,assets/images/split/image2002.bin -11632924,2180,assets/images/split/image2003.bin -11635104,2340,assets/images/split/image2004.bin -11637444,2066,assets/images/split/image2005.bin -11639510,630,assets/images/split/image2006.bin -11640140,412,assets/images/split/image2007.bin -11640552,254,assets/images/split/image2008.bin -11640806,689,assets/images/split/image2009.bin -11641495,617,assets/images/split/image2010.bin -11642112,1896,assets/images/split/image2011.bin -11644008,185,assets/images/split/image2012.bin -11644193,228,assets/images/split/image2013.bin -11644421,321,assets/images/split/image2014.bin -11644742,783,assets/images/split/image2015.bin -11645525,320,assets/images/split/image2016.bin -11645845,920,assets/images/split/image2017.bin -11646765,387,assets/images/split/image2018.bin -11647152,303,assets/images/split/image2019.bin -11647455,344,assets/images/split/image2020.bin -11647799,430,assets/images/split/image2021.bin -11648229,469,assets/images/split/image2022.bin -11648698,196,assets/images/split/image2023.bin -11648894,920,assets/images/split/image2024.bin -11649814,703,assets/images/split/image2025.bin -11650517,1889,assets/images/split/image2026.bin -11652406,286,assets/images/split/image2027.bin -11652692,955,assets/images/split/image2028.bin -11653647,1620,assets/images/split/image2029.bin -11655267,1463,assets/images/split/image2030.bin -11656730,1647,assets/images/split/image2031.bin -11658377,1731,assets/images/split/image2032.bin -11660108,1024,assets/images/split/image2033.bin -11661132,776,assets/images/split/image2034.bin -11661908,898,assets/images/split/image2035.bin -11662806,1444,assets/images/split/image2036.bin -11664250,689,assets/images/split/image2037.bin -11664939,1089,assets/images/split/image2038.bin -11666028,500,assets/images/split/image2039.bin -11666528,423,assets/images/split/image2040.bin -11666951,2304,assets/images/split/image2041.bin -11669255,2036,assets/images/split/image2042.bin -11671291,293,assets/images/split/image2043.bin -11671584,410,assets/images/split/image2044.bin -11671994,1370,assets/images/split/image2045.bin -11673364,560,assets/images/split/image2046.bin -11673924,782,assets/images/split/image2047.bin -11674706,2372,assets/images/split/image2048.bin -11677078,641,assets/images/split/image2049.bin -11677719,597,assets/images/split/image2050.bin -11678316,1105,assets/images/split/image2051.bin -11679421,958,assets/images/split/image2052.bin -11680379,443,assets/images/split/image2053.bin -11680822,1738,assets/images/split/image2054.bin -11682560,1963,assets/images/split/image2055.bin -11684523,967,assets/images/split/image2056.bin -11685490,2418,assets/images/split/image2057.bin -11687908,12,assets/images/split/image2058.bin -11687920,406,assets/images/split/image2059.bin -11688326,635,assets/images/split/image2060.bin -11688961,426,assets/images/split/image2061.bin -11689387,2433,assets/images/split/image2062.bin -11691820,2411,assets/images/split/image2063.bin -11694231,2307,assets/images/split/image2064.bin -11696538,581,assets/images/split/image2065.bin -11697119,303,assets/images/split/image2066.bin -11697422,1163,assets/images/split/image2067.bin -11698585,762,assets/images/split/image2068.bin -11699347,1062,assets/images/split/image2069.bin -11700409,1547,assets/images/split/image2070.bin -11701956,1211,assets/images/split/image2071.bin -11703167,906,assets/images/split/image2072.bin -11704073,1119,assets/images/split/image2073.bin -11705192,1170,assets/images/split/image2074.bin -11706362,783,assets/images/split/image2075.bin -11707145,1033,assets/images/split/image2076.bin -11708178,918,assets/images/split/image2077.bin -11709096,2478,assets/images/split/image2078.bin -11711574,1960,assets/images/split/image2079.bin -11713534,2226,assets/images/split/image2080.bin -11715760,734,assets/images/split/image2081.bin -11716494,936,assets/images/split/image2082.bin -11717430,1717,assets/images/split/image2083.bin -11719147,1578,assets/images/split/image2084.bin -11720725,7,assets/images/split/image2085.bin -11720732,8,assets/images/split/image2086.bin -11720740,1245,assets/images/split/image2087.bin -11721985,291,assets/images/split/image2088.bin -11722276,943,assets/images/split/image2089.bin -11723219,209,assets/images/split/image2090.bin -11723428,1157,assets/images/split/image2091.bin -11724585,254,assets/images/split/image2092.bin -11724839,1061,assets/images/split/image2093.bin -11725900,218,assets/images/split/image2094.bin -11726118,787,assets/images/split/image2095.bin -11726905,120,assets/images/split/image2096.bin -11727025,170,assets/images/split/image2097.bin -11727195,50,assets/images/split/image2098.bin -11727245,971,assets/images/split/image2099.bin -11728216,256,assets/images/split/image2100.bin -11728472,1196,assets/images/split/image2101.bin -11729668,274,assets/images/split/image2102.bin -11729942,1365,assets/images/split/image2103.bin -11731307,288,assets/images/split/image2104.bin -11731595,1459,assets/images/split/image2105.bin -11733054,306,assets/images/split/image2106.bin -11733360,1517,assets/images/split/image2107.bin -11734877,322,assets/images/split/image2108.bin -11735199,1451,assets/images/split/image2109.bin -11736650,311,assets/images/split/image2110.bin -11736961,1408,assets/images/split/image2111.bin -11738369,309,assets/images/split/image2112.bin -11738678,1318,assets/images/split/image2113.bin -11739996,301,assets/images/split/image2114.bin -11740297,2297,assets/images/split/image2115.bin -11742594,2246,assets/images/split/image2116.bin -11744840,2094,assets/images/split/image2117.bin -11746934,2245,assets/images/split/image2118.bin -11749179,412,assets/images/split/image2119.bin -11749591,2299,assets/images/split/image2120.bin -11751890,1889,assets/images/split/image2121.bin -11753779,1739,assets/images/split/image2122.bin -11755518,1778,assets/images/split/image2123.bin -11757296,1747,assets/images/split/image2124.bin -11759043,1931,assets/images/split/image2125.bin -11760974,1852,assets/images/split/image2126.bin -11762826,1938,assets/images/split/image2127.bin -11764764,1909,assets/images/split/image2128.bin -11766673,1149,assets/images/split/image2129.bin -11767822,1572,assets/images/split/image2130.bin -11769394,1548,assets/images/split/image2131.bin -11770942,1548,assets/images/split/image2132.bin -11772490,1548,assets/images/split/image2133.bin -11774038,1546,assets/images/split/image2134.bin -11775584,3015,assets/images/split/image2135.bin -11778599,1300,assets/images/split/image2136.bin -11779899,1159,assets/images/split/image2137.bin -11781058,2557,assets/images/split/image2138.bin -11783615,2399,assets/images/split/image2139.bin -11786014,1989,assets/images/split/image2140.bin -11788003,2215,assets/images/split/image2141.bin -11790218,1881,assets/images/split/image2142.bin -11792099,1680,assets/images/split/image2143.bin -11793779,1636,assets/images/split/image2144.bin -11795415,1715,assets/images/split/image2145.bin -11797130,2062,assets/images/split/image2146.bin -11799192,1951,assets/images/split/image2147.bin -11801143,1909,assets/images/split/image2148.bin -11803052,1919,assets/images/split/image2149.bin -11804971,1721,assets/images/split/image2150.bin -11806692,1606,assets/images/split/image2151.bin -11808298,1609,assets/images/split/image2152.bin -11809907,1620,assets/images/split/image2153.bin -11811527,1408,assets/images/split/image2154.bin -11812935,1291,assets/images/split/image2155.bin -11814226,1285,assets/images/split/image2156.bin -11815511,1323,assets/images/split/image2157.bin -11816834,2098,assets/images/split/image2158.bin -11818932,2023,assets/images/split/image2159.bin -11820955,2003,assets/images/split/image2160.bin -11822958,1927,assets/images/split/image2161.bin -11824885,538,assets/images/split/image2162.bin -11825423,744,assets/images/split/image2163.bin -11826167,910,assets/images/split/image2164.bin -11827077,149,assets/images/split/image2165.bin -11827226,643,assets/images/split/image2166.bin -11827869,513,assets/images/split/image2167.bin -11828382,142,assets/images/split/image2168.bin -11828524,1017,assets/images/split/image2169.bin -11829541,847,assets/images/split/image2170.bin -11830388,1624,assets/images/split/image2171.bin -11832012,1140,assets/images/split/image2172.bin -11833152,540,assets/images/split/image2173.bin -11833692,1321,assets/images/split/image2174.bin -11835013,1104,assets/images/split/image2175.bin -11836117,1111,assets/images/split/image2176.bin -11837228,487,assets/images/split/image2177.bin -11837715,1249,assets/images/split/image2178.bin -11838964,414,assets/images/split/image2179.bin -11839378,644,assets/images/split/image2180.bin -11840022,923,assets/images/split/image2181.bin -11840945,869,assets/images/split/image2182.bin -11841814,1381,assets/images/split/image2183.bin -11843195,1537,assets/images/split/image2184.bin -11844732,1612,assets/images/split/image2185.bin -11846344,1594,assets/images/split/image2186.bin -11847938,1605,assets/images/split/image2187.bin -11849543,909,assets/images/split/image2188.bin -11850452,921,assets/images/split/image2189.bin -11851373,1116,assets/images/split/image2190.bin -11852489,846,assets/images/split/image2191.bin -11853335,1039,assets/images/split/image2192.bin -11854374,1067,assets/images/split/image2193.bin -11855441,290,assets/images/split/image2194.bin -11855731,1509,assets/images/split/image2195.bin -11857240,1491,assets/images/split/image2196.bin -11858731,1437,assets/images/split/image2197.bin -11860168,1387,assets/images/split/image2198.bin -11861555,1415,assets/images/split/image2199.bin -11862970,1418,assets/images/split/image2200.bin -11864388,378,assets/images/split/image2201.bin -11864766,1527,assets/images/split/image2202.bin -11866293,1526,assets/images/split/image2203.bin -11867819,1421,assets/images/split/image2204.bin -11869240,1494,assets/images/split/image2205.bin -11870734,1514,assets/images/split/image2206.bin -11872248,1318,assets/images/split/image2207.bin -11873566,491,assets/images/split/image2208.bin -11874057,459,assets/images/split/image2209.bin -11874516,492,assets/images/split/image2210.bin -11875008,1084,assets/images/split/image2211.bin -11876092,1090,assets/images/split/image2212.bin -11877182,1083,assets/images/split/image2213.bin -11878265,1083,assets/images/split/image2214.bin -11879348,1718,assets/images/split/image2215.bin -11881066,432,assets/images/split/image2216.bin -11881498,431,assets/images/split/image2217.bin -11881929,433,assets/images/split/image2218.bin -11882362,450,assets/images/split/image2219.bin -11882812,795,assets/images/split/image2220.bin -11883607,820,assets/images/split/image2221.bin -11884427,816,assets/images/split/image2222.bin -11885243,837,assets/images/split/image2223.bin -11886080,455,assets/images/split/image2224.bin -11886535,136,assets/images/split/image2225.bin -11886671,50,assets/images/split/image2226.bin -11886721,84,assets/images/split/image2227.bin -11886805,1609,assets/images/split/image2228.bin -11888414,1713,assets/images/split/image2229.bin -11890127,1717,assets/images/split/image2230.bin -11891844,1128,assets/images/split/image2231.bin -11892972,186,assets/images/split/image2232.bin -11893158,395,assets/images/split/image2233.bin -11893553,143,assets/images/split/image2234.bin -11893696,735,assets/images/split/image2235.bin -11894431,737,assets/images/split/image2236.bin -11895168,1027,assets/images/split/image2237.bin -11896195,430,assets/images/split/image2238.bin -11896625,736,assets/images/split/image2239.bin -11897361,2529,assets/images/split/image2240.bin -11899890,2547,assets/images/split/image2241.bin -11902437,1461,assets/images/split/image2242.bin -11903898,1220,assets/images/split/image2243.bin -11905118,1112,assets/images/split/image2244.bin -11906230,1917,assets/images/split/image2245.bin -11908147,3026,assets/images/split/image2246.bin -11911173,2511,assets/images/split/image2247.bin -11913684,1667,assets/images/split/image2248.bin -11915351,880,assets/images/split/image2249.bin -11916231,3211,assets/images/split/image2250.bin -11919442,1499,assets/images/split/image2251.bin -11920941,1508,assets/images/split/image2252.bin -11922449,1428,assets/images/split/image2253.bin -11923877,1435,assets/images/split/image2254.bin -11925312,1042,assets/images/split/image2255.bin -11926354,478,assets/images/split/image2256.bin -11926832,731,assets/images/split/image2257.bin -11927563,811,assets/images/split/image2258.bin -11928374,860,assets/images/split/image2259.bin -11929234,691,assets/images/split/image2260.bin -11929925,2106,assets/images/split/image2261.bin -11932031,1438,assets/images/split/image2262.bin -11933469,1770,assets/images/split/image2263.bin -11935239,426,assets/images/split/image2264.bin -11935665,848,assets/images/split/image2265.bin -11936513,1179,assets/images/split/image2266.bin -11937692,1792,assets/images/split/image2267.bin -11939484,1999,assets/images/split/image2268.bin -11941483,1995,assets/images/split/image2269.bin -11943478,1749,assets/images/split/image2270.bin -11945227,1268,assets/images/split/image2271.bin -11946495,1197,assets/images/split/image2272.bin -11947692,528,assets/images/split/image2273.bin -11948220,834,assets/images/split/image2274.bin -11949054,167,assets/images/split/image2275.bin -11949221,448,assets/images/split/image2276.bin -11949669,851,assets/images/split/image2277.bin -11950520,1036,assets/images/split/image2278.bin -11951556,954,assets/images/split/image2279.bin -11952510,1024,assets/images/split/image2280.bin -11953534,3646,assets/images/split/image2281.bin -11957180,1058,assets/images/split/image2282.bin -11958238,1024,assets/images/split/image2283.bin -11959262,661,assets/images/split/image2284.bin -11959923,1493,assets/images/split/image2285.bin -11961416,547,assets/images/split/image2286.bin -11961963,600,assets/images/split/image2287.bin -11962563,578,assets/images/split/image2288.bin -11963141,442,assets/images/split/image2289.bin -11963583,467,assets/images/split/image2290.bin -11964050,252,assets/images/split/image2291.bin -11964302,494,assets/images/split/image2292.bin -11964796,442,assets/images/split/image2293.bin -11965238,491,assets/images/split/image2294.bin -11965729,574,assets/images/split/image2295.bin -11966303,1379,assets/images/split/image2296.bin -11967682,443,assets/images/split/image2297.bin -11968125,397,assets/images/split/image2298.bin -11968522,640,assets/images/split/image2299.bin -11969162,157,assets/images/split/image2300.bin -11969319,788,assets/images/split/image2301.bin -11970107,967,assets/images/split/image2302.bin -11971074,1377,assets/images/split/image2303.bin -11972451,995,assets/images/split/image2304.bin -11973446,1247,assets/images/split/image2305.bin -11974693,1068,assets/images/split/image2306.bin -11975761,1540,assets/images/split/image2307.bin -11977301,241,assets/images/split/image2308.bin -11977542,823,assets/images/split/image2309.bin -11978365,1098,assets/images/split/image2310.bin -11979463,1279,assets/images/split/image2311.bin -11980742,407,assets/images/split/image2312.bin -11981149,767,assets/images/split/image2313.bin -11981916,684,assets/images/split/image2314.bin -11982600,774,assets/images/split/image2315.bin -11983374,996,assets/images/split/image2316.bin -11984370,649,assets/images/split/image2317.bin -11985019,666,assets/images/split/image2318.bin -11985685,1199,assets/images/split/image2319.bin -11986884,1087,assets/images/split/image2320.bin -11987971,1008,assets/images/split/image2321.bin -11988979,1012,assets/images/split/image2322.bin -11989991,1055,assets/images/split/image2323.bin -11991046,966,assets/images/split/image2324.bin -11992012,1053,assets/images/split/image2325.bin -11993065,720,assets/images/split/image2326.bin -11993785,659,assets/images/split/image2327.bin -11994444,998,assets/images/split/image2328.bin -11995442,526,assets/images/split/image2329.bin -11995968,887,assets/images/split/image2330.bin -11996855,923,assets/images/split/image2331.bin -11997778,1308,assets/images/split/image2332.bin -11999086,690,assets/images/split/image2333.bin -11999776,1284,assets/images/split/image2334.bin -12001060,1453,assets/images/split/image2335.bin -12002513,739,assets/images/split/image2336.bin -12003252,1023,assets/images/split/image2337.bin -12004275,423,assets/images/split/image2338.bin -12004698,706,assets/images/split/image2339.bin -12005404,237,assets/images/split/image2340.bin -12005641,722,assets/images/split/image2341.bin -12006363,1284,assets/images/split/image2342.bin -12007647,1085,assets/images/split/image2343.bin -12008732,1049,assets/images/split/image2344.bin -12009781,693,assets/images/split/image2345.bin -12010474,1548,assets/images/split/image2346.bin -12012022,669,assets/images/split/image2347.bin -12012691,1262,assets/images/split/image2348.bin -12013953,1265,assets/images/split/image2349.bin -12015218,566,assets/images/split/image2350.bin -12015784,852,assets/images/split/image2351.bin -12016636,654,assets/images/split/image2352.bin -12017290,1018,assets/images/split/image2353.bin -12018308,1234,assets/images/split/image2354.bin -12019542,1412,assets/images/split/image2355.bin -12020954,1022,assets/images/split/image2356.bin -12021976,1195,assets/images/split/image2357.bin -12023171,1140,assets/images/split/image2358.bin -12024311,1136,assets/images/split/image2359.bin -12025447,1088,assets/images/split/image2360.bin -12026535,1228,assets/images/split/image2361.bin -12027763,1231,assets/images/split/image2362.bin -12028994,1191,assets/images/split/image2363.bin -12030185,394,assets/images/split/image2364.bin -12030579,422,assets/images/split/image2365.bin -12031001,330,assets/images/split/image2366.bin -12031331,899,assets/images/split/image2367.bin -12032230,508,assets/images/split/image2368.bin -12032738,389,assets/images/split/image2369.bin -12033127,977,assets/images/split/image2370.bin -12034104,1204,assets/images/split/image2371.bin -12035308,1397,assets/images/split/image2372.bin -12036705,1037,assets/images/split/image2373.bin -12037742,2035,assets/images/split/image2374.bin -12039777,1581,assets/images/split/image2375.bin -12041358,780,assets/images/split/image2376.bin -12042138,1046,assets/images/split/image2377.bin -12043184,1092,assets/images/split/image2378.bin -12044276,426,assets/images/split/image2379.bin -12044702,545,assets/images/split/image2380.bin -12045247,1608,assets/images/split/image2381.bin -12046855,1056,assets/images/split/image2382.bin -12047911,1021,assets/images/split/image2383.bin -12048932,1027,assets/images/split/image2384.bin -12049959,1032,assets/images/split/image2385.bin -12050991,1109,assets/images/split/image2386.bin -12052100,1020,assets/images/split/image2387.bin -12053120,1032,assets/images/split/image2388.bin -12054152,787,assets/images/split/image2389.bin -12054939,813,assets/images/split/image2390.bin -12055752,635,assets/images/split/image2391.bin -12056387,693,assets/images/split/image2392.bin -12057080,1306,assets/images/split/image2393.bin -12058386,996,assets/images/split/image2394.bin -12059382,659,assets/images/split/image2395.bin -12060041,908,assets/images/split/image2396.bin -12060949,1171,assets/images/split/image2397.bin -12062120,790,assets/images/split/image2398.bin -12062910,730,assets/images/split/image2399.bin -12063640,694,assets/images/split/image2400.bin -12064334,772,assets/images/split/image2401.bin -12065106,654,assets/images/split/image2402.bin -12065760,895,assets/images/split/image2403.bin -12066655,1548,assets/images/split/image2404.bin -12068203,1548,assets/images/split/image2405.bin -12069751,958,assets/images/split/image2406.bin -12070709,1548,assets/images/split/image2407.bin -12072257,596,assets/images/split/image2408.bin -12072853,1225,assets/images/split/image2409.bin -12074078,1548,assets/images/split/image2410.bin -12075626,1599,assets/images/split/image2411.bin -12077225,1521,assets/images/split/image2412.bin -12078746,1791,assets/images/split/image2413.bin -12080537,1594,assets/images/split/image2414.bin -12082131,746,assets/images/split/image2415.bin -12082877,1055,assets/images/split/image2416.bin -12083932,829,assets/images/split/image2417.bin -12084761,933,assets/images/split/image2418.bin -12085694,814,assets/images/split/image2419.bin -12086508,1018,assets/images/split/image2420.bin -12087526,865,assets/images/split/image2421.bin -12088391,1818,assets/images/split/image2422.bin -12090209,1940,assets/images/split/image2423.bin -12092149,1698,assets/images/split/image2424.bin -12093847,545,assets/images/split/image2425.bin -12094392,1016,assets/images/split/image2426.bin -12095408,796,assets/images/split/image2427.bin -12096204,497,assets/images/split/image2428.bin -12096701,194,assets/images/split/image2429.bin -12096895,522,assets/images/split/image2430.bin -12097417,1481,assets/images/split/image2431.bin -12098898,171,assets/images/split/image2432.bin -12099069,310,assets/images/split/image2433.bin -12099379,854,assets/images/split/image2434.bin -12100233,785,assets/images/split/image2435.bin -12101018,1485,assets/images/split/image2436.bin -12102503,481,assets/images/split/image2437.bin -12102984,851,assets/images/split/image2438.bin -12103835,775,assets/images/split/image2439.bin -12104610,378,assets/images/split/image2440.bin -12104988,1465,assets/images/split/image2441.bin -12106453,828,assets/images/split/image2442.bin -12107281,884,assets/images/split/image2443.bin -12108165,1013,assets/images/split/image2444.bin -12109178,1132,assets/images/split/image2445.bin -12110310,770,assets/images/split/image2446.bin -12111080,1190,assets/images/split/image2447.bin -12112270,945,assets/images/split/image2448.bin -12113215,681,assets/images/split/image2449.bin -12113896,547,assets/images/split/image2450.bin -12114443,165,assets/images/split/image2451.bin -12114608,1170,assets/images/split/image2452.bin -12115778,196,assets/images/split/image2453.bin -12115974,444,assets/images/split/image2454.bin -12116418,1081,assets/images/split/image2455.bin -12117499,764,assets/images/split/image2456.bin -12118263,776,assets/images/split/image2457.bin -12119039,85,assets/images/split/image2458.bin -12119124,527,assets/images/split/image2459.bin -12119651,268,assets/images/split/image2460.bin -12119919,369,assets/images/split/image2461.bin -12120288,942,assets/images/split/image2462.bin -12121230,1812,assets/images/split/image2463.bin -12123042,182,assets/images/split/image2464.bin -12123224,225,assets/images/split/image2465.bin -12123449,531,assets/images/split/image2466.bin -12123980,624,assets/images/split/image2467.bin -12124604,1383,assets/images/split/image2468.bin -12125987,1267,assets/images/split/image2469.bin -12127254,346,assets/images/split/image2470.bin -12127600,418,assets/images/split/image2471.bin -12128018,594,assets/images/split/image2472.bin -12128612,648,assets/images/split/image2473.bin -12129260,859,assets/images/split/image2474.bin -12130119,1300,assets/images/split/image2475.bin -12131419,566,assets/images/split/image2476.bin -12131985,2104,assets/images/split/image2477.bin -12134089,940,assets/images/split/image2478.bin -12135029,856,assets/images/split/image2479.bin -12135885,756,assets/images/split/image2480.bin -12136641,446,assets/images/split/image2481.bin -12137087,370,assets/images/split/image2482.bin -12137457,845,assets/images/split/image2483.bin -12138302,1370,assets/images/split/image2484.bin -12139672,1427,assets/images/split/image2485.bin -12141099,738,assets/images/split/image2486.bin -12141837,591,assets/images/split/image2487.bin -12142428,731,assets/images/split/image2488.bin -12143159,1263,assets/images/split/image2489.bin -12144422,1232,assets/images/split/image2490.bin -12145654,861,assets/images/split/image2491.bin -12146515,913,assets/images/split/image2492.bin -12147428,15,assets/images/split/image2493.bin -12147443,1362,assets/images/split/image2494.bin -12148805,472,assets/images/split/image2495.bin -12149277,1293,assets/images/split/image2496.bin -12150570,1448,assets/images/split/image2497.bin -12152018,1239,assets/images/split/image2498.bin -12153257,906,assets/images/split/image2499.bin -12154163,739,assets/images/split/image2500.bin -12154902,1130,assets/images/split/image2501.bin -12156032,1071,assets/images/split/image2502.bin -12157103,913,assets/images/split/image2503.bin -12158016,2328,assets/images/split/image2504.bin -12160344,2220,assets/images/split/image2505.bin -12162564,2340,assets/images/split/image2506.bin -12164904,2443,assets/images/split/image2507.bin -12167347,2491,assets/images/split/image2508.bin -12169838,2459,assets/images/split/image2509.bin -12172297,1469,assets/images/split/image2510.bin -12173766,1030,assets/images/split/image2511.bin -12174796,1065,assets/images/split/image2512.bin -12175861,1129,assets/images/split/image2513.bin -12176990,1111,assets/images/split/image2514.bin -12178101,892,assets/images/split/image2515.bin -12178993,1333,assets/images/split/image2516.bin -12180326,1897,assets/images/split/image2517.bin -12182223,1968,assets/images/split/image2518.bin -12184191,1943,assets/images/split/image2519.bin -12186134,1780,assets/images/split/image2520.bin -12187914,1503,assets/images/split/image2521.bin -12189417,1863,assets/images/split/image2522.bin -12191280,2095,assets/images/split/image2523.bin -12193375,2442,assets/images/split/image2524.bin -12195817,2330,assets/images/split/image2525.bin -12198147,1781,assets/images/split/image2526.bin -12199928,980,assets/images/split/image2527.bin -12200908,1106,assets/images/split/image2528.bin -12202014,1255,assets/images/split/image2529.bin -12203269,2055,assets/images/split/image2530.bin -12205324,1961,assets/images/split/image2531.bin -12207285,1695,assets/images/split/image2532.bin -12208980,2253,assets/images/split/image2533.bin -12211233,1786,assets/images/split/image2534.bin -12213019,774,assets/images/split/image2535.bin -12213793,1099,assets/images/split/image2536.bin -12214892,1042,assets/images/split/image2537.bin -12215934,2027,assets/images/split/image2538.bin -12217961,2341,assets/images/split/image2539.bin -12220302,2393,assets/images/split/image2540.bin -12222695,2465,assets/images/split/image2541.bin -12225160,2384,assets/images/split/image2542.bin -12227544,1918,assets/images/split/image2543.bin -12229462,2606,assets/images/split/image2544.bin -12232068,2251,assets/images/split/image2545.bin -12234319,2334,assets/images/split/image2546.bin -12236653,2319,assets/images/split/image2547.bin -12238972,2280,assets/images/split/image2548.bin -12241252,1961,assets/images/split/image2549.bin -12243213,2528,assets/images/split/image2550.bin -12245741,2235,assets/images/split/image2551.bin -12247976,2323,assets/images/split/image2552.bin -12250299,1717,assets/images/split/image2553.bin -12252016,2109,assets/images/split/image2554.bin -12254125,2141,assets/images/split/image2555.bin -12256266,2112,assets/images/split/image2556.bin -12258378,1578,assets/images/split/image2557.bin -12259956,1655,assets/images/split/image2558.bin -12261611,1031,assets/images/split/image2559.bin -12262642,2231,assets/images/split/image2560.bin -12264873,2285,assets/images/split/image2561.bin -12267158,2356,assets/images/split/image2562.bin -12269514,1840,assets/images/split/image2563.bin -12271354,1793,assets/images/split/image2564.bin -12273147,1925,assets/images/split/image2565.bin -12275072,2146,assets/images/split/image2566.bin -12277218,1945,assets/images/split/image2567.bin -12279163,2158,assets/images/split/image2568.bin -12281321,1819,assets/images/split/image2569.bin -12283140,1523,assets/images/split/image2570.bin -12284663,1843,assets/images/split/image2571.bin -12286506,1880,assets/images/split/image2572.bin -12288386,2599,assets/images/split/image2573.bin -12290985,2724,assets/images/split/image2574.bin -12293709,1889,assets/images/split/image2575.bin -12295598,1780,assets/images/split/image2576.bin -12297378,1586,assets/images/split/image2577.bin -12298964,1675,assets/images/split/image2578.bin -12300639,2429,assets/images/split/image2579.bin -12303068,2606,assets/images/split/image2580.bin -12305674,2456,assets/images/split/image2581.bin -12308130,2478,assets/images/split/image2582.bin -12310608,2469,assets/images/split/image2583.bin -12313077,2221,assets/images/split/image2584.bin -12315298,2456,assets/images/split/image2585.bin -12317754,2076,assets/images/split/image2586.bin -12319830,2286,assets/images/split/image2587.bin -12322116,2013,assets/images/split/image2588.bin -12324129,2180,assets/images/split/image2589.bin -12326309,2425,assets/images/split/image2590.bin -12328734,2148,assets/images/split/image2591.bin -12330882,2335,assets/images/split/image2592.bin -12333217,2230,assets/images/split/image2593.bin -12335447,1880,assets/images/split/image2594.bin -12337327,2099,assets/images/split/image2595.bin -12339426,2670,assets/images/split/image2596.bin -12342096,2103,assets/images/split/image2597.bin -12344199,2278,assets/images/split/image2598.bin -12346477,1321,assets/images/split/image2599.bin -12347798,1310,assets/images/split/image2600.bin -12349108,1412,assets/images/split/image2601.bin -12350520,1446,assets/images/split/image2602.bin -12351966,1407,assets/images/split/image2603.bin -12353373,1533,assets/images/split/image2604.bin -12354906,1226,assets/images/split/image2605.bin -12356132,1547,assets/images/split/image2606.bin -12357679,1382,assets/images/split/image2607.bin -12359061,1452,assets/images/split/image2608.bin -12360513,1157,assets/images/split/image2609.bin -12361670,1764,assets/images/split/image2610.bin -12363434,1290,assets/images/split/image2611.bin -12364724,1384,assets/images/split/image2612.bin -12366108,1558,assets/images/split/image2613.bin -12367666,1439,assets/images/split/image2614.bin -12369105,1428,assets/images/split/image2615.bin -12370533,1214,assets/images/split/image2616.bin -12371747,1356,assets/images/split/image2617.bin -12373103,1299,assets/images/split/image2618.bin -12374402,1853,assets/images/split/image2619.bin -12376255,1762,assets/images/split/image2620.bin -12378017,1780,assets/images/split/image2621.bin -12379797,1758,assets/images/split/image2622.bin -12381555,1647,assets/images/split/image2623.bin -12383202,1732,assets/images/split/image2624.bin -12384934,1435,assets/images/split/image2625.bin -12386369,1882,assets/images/split/image2626.bin -12388251,931,assets/images/split/image2627.bin -12389182,1658,assets/images/split/image2628.bin -12390840,1778,assets/images/split/image2629.bin -12392618,650,assets/images/split/image2630.bin -12393268,1346,assets/images/split/image2631.bin -12394614,53,assets/images/split/image2632.bin -12394667,1208,assets/images/split/image2633.bin -12395875,1315,assets/images/split/image2634.bin -12397190,1319,assets/images/split/image2635.bin -12398509,1530,assets/images/split/image2636.bin -12400039,1556,assets/images/split/image2637.bin -12401595,1289,assets/images/split/image2638.bin -12402884,1432,assets/images/split/image2639.bin -12404316,1467,assets/images/split/image2640.bin -12405783,1255,assets/images/split/image2641.bin -12407038,1261,assets/images/split/image2642.bin -12408299,1043,assets/images/split/image2643.bin -12409342,1074,assets/images/split/image2644.bin -12410416,1242,assets/images/split/image2645.bin -12411658,1300,assets/images/split/image2646.bin -12412958,1195,assets/images/split/image2647.bin -12414153,1231,assets/images/split/image2648.bin -12415384,1362,assets/images/split/image2649.bin -12416746,1212,assets/images/split/image2650.bin -12417958,1334,assets/images/split/image2651.bin -12419292,1551,assets/images/split/image2652.bin -12420843,1347,assets/images/split/image2653.bin -12422190,1358,assets/images/split/image2654.bin -12423548,1213,assets/images/split/image2655.bin -12424761,1219,assets/images/split/image2656.bin -12425980,1235,assets/images/split/image2657.bin -12427215,1161,assets/images/split/image2658.bin -12428376,1687,assets/images/split/image2659.bin -12430063,1602,assets/images/split/image2660.bin -12431665,1383,assets/images/split/image2661.bin -12433048,1308,assets/images/split/image2662.bin -12434356,1341,assets/images/split/image2663.bin -12435697,1389,assets/images/split/image2664.bin -12437086,1374,assets/images/split/image2665.bin -12438460,1115,assets/images/split/image2666.bin -12439575,1445,assets/images/split/image2667.bin -12441020,1451,assets/images/split/image2668.bin -12442471,1364,assets/images/split/image2669.bin -12443835,1302,assets/images/split/image2670.bin -12445137,1407,assets/images/split/image2671.bin -12446544,1212,assets/images/split/image2672.bin -12447756,160,assets/images/split/image2673.bin -12447916,248,assets/images/split/image2674.bin -12448164,919,assets/images/split/image2675.bin -12449083,188,assets/images/split/image2676.bin -12449271,1077,assets/images/split/image2677.bin -12450348,2572,assets/images/split/image2678.bin -12452920,1845,assets/images/split/image2679.bin -12454765,726,assets/images/split/image2680.bin -12455491,2270,assets/images/split/image2681.bin -12457761,631,assets/images/split/image2682.bin -12458392,947,assets/images/split/image2683.bin -12459339,948,assets/images/split/image2684.bin -12460287,705,assets/images/split/image2685.bin -12460992,708,assets/images/split/image2686.bin -12461700,2422,assets/images/split/image2687.bin -12464122,2504,assets/images/split/image2688.bin -12466626,2617,assets/images/split/image2689.bin -12469243,2159,assets/images/split/image2690.bin -12471402,896,assets/images/split/image2691.bin -12472298,1348,assets/images/split/image2692.bin -12473646,1299,assets/images/split/image2693.bin -12474945,1282,assets/images/split/image2694.bin -12476227,1252,assets/images/split/image2695.bin -12477479,419,assets/images/split/image2696.bin -12477898,513,assets/images/split/image2697.bin -12478411,1341,assets/images/split/image2698.bin -12479752,8,assets/images/split/image2699.bin +9403888,1876,assets/images/split/image1.bin,0,1 +9405764,362,assets/images/split/image2.bin,0,1 +9406126,2420,assets/images/split/image3.bin,0,1 +9408546,907,assets/images/split/image4.bin,0,1 +9409453,339,assets/images/split/image5.bin,0,1 +9409792,606,assets/images/split/image6.bin,0,1 +9410398,958,assets/images/split/image7.bin,0,1 +9411356,26,assets/images/split/image8.bin,0,1 +9411382,26,assets/images/split/image9.bin,0,1 +9411408,895,assets/images/split/image10.bin,0,1 +9412303,913,assets/images/split/image11.bin,0,1 +9413216,224,assets/images/split/image12.bin,0,1 +9413440,932,assets/images/split/image13.bin,0,1 +9414372,1187,assets/images/split/image14.bin,0,1 +9415559,1143,assets/images/split/image15.bin,0,1 +9416702,1137,assets/images/split/image16.bin,0,1 +9417839,1196,assets/images/split/image17.bin,0,1 +9419035,986,assets/images/split/image18.bin,0,1 +9420021,26,assets/images/split/image19.bin,0,1 +9420047,26,assets/images/split/image20.bin,0,1 +9420073,1561,assets/images/split/image21.bin,0,1 +9421634,309,assets/images/split/image22.bin,0,1 +9421943,1525,assets/images/split/image23.bin,0,1 +9423468,863,assets/images/split/image24.bin,0,1 +9424331,848,assets/images/split/image25.bin,0,1 +9425179,1548,assets/images/split/image26.bin,0,1 +9426727,197,assets/images/split/image27.bin,0,1 +9426924,166,assets/images/split/image28.bin,0,1 +9427090,181,assets/images/split/image29.bin,0,1 +9427271,989,assets/images/split/image30.bin,0,1 +9428260,1020,assets/images/split/image31.bin,0,1 +9429280,776,assets/images/split/image32.bin,0,1 +9430056,774,assets/images/split/image33.bin,0,1 +9430830,1610,assets/images/split/image34.bin,0,1 +9432440,1484,assets/images/split/image35.bin,0,1 +9433924,1696,assets/images/split/image36.bin,0,1 +9435620,1734,assets/images/split/image37.bin,0,1 +9437354,1003,assets/images/split/image38.bin,0,1 +9438357,275,assets/images/split/image39.bin,0,1 +9438632,551,assets/images/split/image40.bin,0,1 +9439183,537,assets/images/split/image41.bin,0,1 +9439720,555,assets/images/split/image42.bin,0,1 +9440275,546,assets/images/split/image43.bin,0,1 +9440821,1341,assets/images/split/image44.bin,0,1 +9442162,1372,assets/images/split/image45.bin,0,1 +9443534,1007,assets/images/split/image46.bin,0,1 +9444541,410,assets/images/split/image47.bin,0,1 +9444951,1108,assets/images/split/image48.bin,0,1 +9446059,1726,assets/images/split/image49.bin,0,1 +9447785,636,assets/images/split/image50.bin,0,1 +9448421,1510,assets/images/split/image51.bin,0,1 +9449931,824,assets/images/split/image52.bin,0,1 +9450755,1232,assets/images/split/image53.bin,0,1 +9451987,1440,assets/images/split/image54.bin,0,1 +9453427,1170,assets/images/split/image55.bin,0,1 +9454597,792,assets/images/split/image56.bin,0,1 +9455389,270,assets/images/split/image57.bin,0,1 +9455659,241,assets/images/split/image58.bin,0,1 +9455900,281,assets/images/split/image59.bin,0,1 +9456181,678,assets/images/split/image60.bin,0,1 +9456859,416,assets/images/split/image61.bin,0,1 +9457275,34,assets/images/split/image62.bin,0,1 +9457309,276,assets/images/split/image63.bin,0,1 +9457585,156,assets/images/split/image64.bin,0,1 +9457741,933,assets/images/split/image65.bin,0,1 +9458674,888,assets/images/split/image66.bin,0,1 +9459562,836,assets/images/split/image67.bin,0,1 +9460398,247,assets/images/split/image68.bin,0,1 +9460645,923,assets/images/split/image69.bin,0,1 +9461568,429,assets/images/split/image70.bin,0,1 +9461997,484,assets/images/split/image71.bin,0,1 +9462481,725,assets/images/split/image72.bin,0,1 +9463206,198,assets/images/split/image73.bin,0,1 +9463404,199,assets/images/split/image74.bin,0,1 +9463603,691,assets/images/split/image75.bin,0,1 +9464294,418,assets/images/split/image76.bin,0,1 +9464712,400,assets/images/split/image77.bin,0,1 +9465112,1505,assets/images/split/image78.bin,0,1 +9466617,687,assets/images/split/image79.bin,0,1 +9467304,222,assets/images/split/image80.bin,0,1 +9467526,500,assets/images/split/image81.bin,0,1 +9468026,1508,assets/images/split/image82.bin,0,1 +9469534,441,assets/images/split/image83.bin,0,1 +9469975,1523,assets/images/split/image84.bin,0,1 +9471498,551,assets/images/split/image85.bin,0,1 +9472049,727,assets/images/split/image86.bin,0,1 +9472776,942,assets/images/split/image87.bin,0,1 +9473718,761,assets/images/split/image88.bin,0,1 +9474479,3114,assets/images/split/image89.bin,0,1 +9477593,3069,assets/images/split/image90.bin,0,1 +9480662,3121,assets/images/split/image91.bin,0,1 +9483783,2840,assets/images/split/image92.bin,0,1 +9486623,3014,assets/images/split/image93.bin,0,1 +9489637,3176,assets/images/split/image94.bin,0,1 +9492813,3237,assets/images/split/image95.bin,0,1 +9496050,3028,assets/images/split/image96.bin,0,1 +9499078,2941,assets/images/split/image97.bin,0,1 +9502019,3032,assets/images/split/image98.bin,0,1 +9505051,3137,assets/images/split/image99.bin,0,1 +9508188,2975,assets/images/split/image100.bin,0,1 +9511163,3046,assets/images/split/image101.bin,0,1 +9514209,3310,assets/images/split/image102.bin,0,1 +9517519,3334,assets/images/split/image103.bin,0,1 +9520853,2977,assets/images/split/image104.bin,0,1 +9523830,2855,assets/images/split/image105.bin,0,1 +9526685,3352,assets/images/split/image106.bin,0,1 +9530037,3274,assets/images/split/image107.bin,0,1 +9533311,2650,assets/images/split/image108.bin,0,1 +9535961,2166,assets/images/split/image109.bin,0,1 +9538127,2218,assets/images/split/image110.bin,0,1 +9540345,2255,assets/images/split/image111.bin,0,1 +9542600,1940,assets/images/split/image112.bin,0,1 +9544540,2682,assets/images/split/image113.bin,0,1 +9547222,3218,assets/images/split/image114.bin,0,1 +9550440,2954,assets/images/split/image115.bin,0,1 +9553394,2643,assets/images/split/image116.bin,0,1 +9556037,3056,assets/images/split/image117.bin,0,1 +9559093,3340,assets/images/split/image118.bin,0,1 +9562433,3276,assets/images/split/image119.bin,0,1 +9565709,2552,assets/images/split/image120.bin,0,1 +9568261,3265,assets/images/split/image121.bin,0,1 +9571526,3387,assets/images/split/image122.bin,0,1 +9574913,3437,assets/images/split/image123.bin,0,1 +9578350,3056,assets/images/split/image124.bin,0,1 +9581406,2432,assets/images/split/image125.bin,0,1 +9583838,2961,assets/images/split/image126.bin,0,1 +9586799,3233,assets/images/split/image127.bin,0,1 +9590032,2690,assets/images/split/image128.bin,0,1 +9592722,3194,assets/images/split/image129.bin,0,1 +9595916,3403,assets/images/split/image130.bin,0,1 +9599319,3461,assets/images/split/image131.bin,0,1 +9602780,3190,assets/images/split/image132.bin,0,1 +9605970,2985,assets/images/split/image133.bin,0,1 +9608955,3418,assets/images/split/image134.bin,0,1 +9612373,3408,assets/images/split/image135.bin,0,1 +9615781,3125,assets/images/split/image136.bin,0,1 +9618906,2701,assets/images/split/image137.bin,0,1 +9621607,3366,assets/images/split/image138.bin,0,1 +9624973,2853,assets/images/split/image139.bin,0,1 +9627826,2201,assets/images/split/image140.bin,0,1 +9630027,1143,assets/images/split/image141.bin,0,1 +9631170,1157,assets/images/split/image142.bin,0,1 +9632327,1110,assets/images/split/image143.bin,0,1 +9633437,2112,assets/images/split/image144.bin,0,1 +9635549,2122,assets/images/split/image145.bin,0,1 +9637671,2155,assets/images/split/image146.bin,0,1 +9639826,1986,assets/images/split/image147.bin,0,1 +9641812,530,assets/images/split/image148.bin,0,1 +9642342,587,assets/images/split/image149.bin,0,1 +9642929,329,assets/images/split/image150.bin,0,1 +9643258,293,assets/images/split/image151.bin,0,1 +9643551,784,assets/images/split/image152.bin,0,1 +9644335,311,assets/images/split/image153.bin,0,1 +9644646,295,assets/images/split/image154.bin,0,1 +9644941,315,assets/images/split/image155.bin,0,1 +9645256,705,assets/images/split/image156.bin,0,1 +9645961,956,assets/images/split/image157.bin,0,1 +9646917,1422,assets/images/split/image158.bin,0,1 +9648339,326,assets/images/split/image159.bin,0,1 +9648665,315,assets/images/split/image160.bin,0,1 +9648980,563,assets/images/split/image161.bin,0,1 +9649543,737,assets/images/split/image162.bin,0,1 +9650280,796,assets/images/split/image163.bin,0,1 +9651076,779,assets/images/split/image164.bin,0,1 +9651855,831,assets/images/split/image165.bin,0,1 +9652686,757,assets/images/split/image166.bin,0,1 +9653443,830,assets/images/split/image167.bin,0,1 +9654273,782,assets/images/split/image168.bin,0,1 +9655055,851,assets/images/split/image169.bin,0,1 +9655906,1143,assets/images/split/image170.bin,0,1 +9657049,761,assets/images/split/image171.bin,0,1 +9657810,603,assets/images/split/image172.bin,0,1 +9658413,186,assets/images/split/image173.bin,0,1 +9658599,678,assets/images/split/image174.bin,0,1 +9659277,938,assets/images/split/image175.bin,0,1 +9660215,572,assets/images/split/image176.bin,0,1 +9660787,2014,assets/images/split/image177.bin,0,1 +9662801,625,assets/images/split/image178.bin,0,1 +9663426,755,assets/images/split/image179.bin,0,1 +9664181,788,assets/images/split/image180.bin,0,1 +9664969,296,assets/images/split/image181.bin,0,1 +9665265,505,assets/images/split/image182.bin,0,1 +9665770,691,assets/images/split/image183.bin,0,1 +9666461,519,assets/images/split/image184.bin,0,1 +9666980,603,assets/images/split/image185.bin,0,1 +9667583,1353,assets/images/split/image186.bin,0,1 +9668936,1099,assets/images/split/image187.bin,0,1 +9670035,895,assets/images/split/image188.bin,0,1 +9670930,1568,assets/images/split/image189.bin,0,1 +9672498,1107,assets/images/split/image190.bin,0,1 +9673605,1388,assets/images/split/image191.bin,0,1 +9674993,1431,assets/images/split/image192.bin,0,1 +9676424,1302,assets/images/split/image193.bin,0,1 +9677726,648,assets/images/split/image194.bin,0,1 +9678374,712,assets/images/split/image195.bin,0,1 +9679086,1431,assets/images/split/image196.bin,0,1 +9680517,1149,assets/images/split/image197.bin,0,1 +9681666,671,assets/images/split/image198.bin,0,1 +9682337,675,assets/images/split/image199.bin,0,1 +9683012,330,assets/images/split/image200.bin,0,1 +9683342,1210,assets/images/split/image201.bin,0,1 +9684552,1018,assets/images/split/image202.bin,0,1 +9685570,1327,assets/images/split/image203.bin,0,1 +9686897,1120,assets/images/split/image204.bin,0,1 +9688017,1377,assets/images/split/image205.bin,0,1 +9689394,1271,assets/images/split/image206.bin,0,1 +9690665,1033,assets/images/split/image207.bin,0,1 +9691698,1603,assets/images/split/image208.bin,0,1 +9693301,2859,assets/images/split/image209.bin,0,1 +9696160,3134,assets/images/split/image210.bin,0,1 +9699294,1400,assets/images/split/image211.bin,0,1 +9700694,207,assets/images/split/image212.bin,0,1 +9700901,656,assets/images/split/image213.bin,0,1 +9701557,1238,assets/images/split/image214.bin,0,1 +9702795,224,assets/images/split/image215.bin,0,1 +9703019,622,assets/images/split/image216.bin,0,1 +9703641,334,assets/images/split/image217.bin,0,1 +9703975,480,assets/images/split/image218.bin,0,1 +9704455,281,assets/images/split/image219.bin,0,1 +9704736,984,assets/images/split/image220.bin,0,1 +9705720,1033,assets/images/split/image221.bin,0,1 +9706753,1010,assets/images/split/image222.bin,0,1 +9707763,1033,assets/images/split/image223.bin,0,1 +9708796,1090,assets/images/split/image224.bin,0,1 +9709886,1085,assets/images/split/image225.bin,0,1 +9710971,1014,assets/images/split/image226.bin,0,1 +9711985,691,assets/images/split/image227.bin,0,1 +9712676,895,assets/images/split/image228.bin,0,1 +9713571,617,assets/images/split/image229.bin,0,1 +9714188,553,assets/images/split/image230.bin,0,1 +9714741,899,assets/images/split/image231.bin,0,1 +9715640,1498,assets/images/split/image232.bin,0,1 +9717138,833,assets/images/split/image233.bin,0,1 +9717971,302,assets/images/split/image234.bin,0,1 +9718273,1364,assets/images/split/image235.bin,0,1 +9719637,925,assets/images/split/image236.bin,0,1 +9720562,1174,assets/images/split/image237.bin,0,1 +9721736,1257,assets/images/split/image238.bin,0,1 +9722993,967,assets/images/split/image239.bin,0,1 +9723960,991,assets/images/split/image240.bin,0,1 +9724951,1024,assets/images/split/image241.bin,0,1 +9725975,581,assets/images/split/image242.bin,0,1 +9726556,502,assets/images/split/image243.bin,0,1 +9727058,351,assets/images/split/image244.bin,0,1 +9727409,1144,assets/images/split/image245.bin,0,1 +9728553,525,assets/images/split/image246.bin,0,1 +9729078,738,assets/images/split/image247.bin,0,1 +9729816,199,assets/images/split/image248.bin,0,1 +9730015,180,assets/images/split/image249.bin,0,1 +9730195,152,assets/images/split/image250.bin,0,1 +9730347,199,assets/images/split/image251.bin,0,1 +9730546,809,assets/images/split/image252.bin,0,1 +9731355,673,assets/images/split/image253.bin,0,1 +9732028,717,assets/images/split/image254.bin,0,1 +9732745,1032,assets/images/split/image255.bin,0,1 +9733777,1003,assets/images/split/image256.bin,0,1 +9734780,463,assets/images/split/image257.bin,0,1 +9735243,829,assets/images/split/image258.bin,0,1 +9736072,647,assets/images/split/image259.bin,0,1 +9736719,806,assets/images/split/image260.bin,0,1 +9737525,896,assets/images/split/image261.bin,0,1 +9738421,689,assets/images/split/image262.bin,0,1 +9739110,708,assets/images/split/image263.bin,0,1 +9739818,558,assets/images/split/image264.bin,0,1 +9740376,1412,assets/images/split/image265.bin,0,1 +9741788,424,assets/images/split/image266.bin,0,1 +9742212,79,assets/images/split/image267.bin,0,1 +9742291,1368,assets/images/split/image268.bin,0,1 +9743659,727,assets/images/split/image269.bin,0,1 +9744386,1410,assets/images/split/image270.bin,0,1 +9745796,694,assets/images/split/image271.bin,0,1 +9746490,1302,assets/images/split/image272.bin,0,1 +9747792,1248,assets/images/split/image273.bin,0,1 +9749040,1945,assets/images/split/image274.bin,0,1 +9750985,1920,assets/images/split/image275.bin,0,1 +9752905,2060,assets/images/split/image276.bin,0,1 +9754965,1959,assets/images/split/image277.bin,0,1 +9756924,1924,assets/images/split/image278.bin,0,1 +9758848,1715,assets/images/split/image279.bin,0,1 +9760563,666,assets/images/split/image280.bin,0,1 +9761229,905,assets/images/split/image281.bin,0,1 +9762134,750,assets/images/split/image282.bin,0,1 +9762884,799,assets/images/split/image283.bin,0,1 +9763683,802,assets/images/split/image284.bin,0,1 +9764485,1400,assets/images/split/image285.bin,0,1 +9765885,798,assets/images/split/image286.bin,0,1 +9766683,1064,assets/images/split/image287.bin,0,1 +9767747,1217,assets/images/split/image288.bin,0,1 +9768964,1145,assets/images/split/image289.bin,0,1 +9770109,1273,assets/images/split/image290.bin,0,1 +9771382,1163,assets/images/split/image291.bin,0,1 +9772545,991,assets/images/split/image292.bin,0,1 +9773536,1350,assets/images/split/image293.bin,0,1 +9774886,1328,assets/images/split/image294.bin,0,1 +9776214,1323,assets/images/split/image295.bin,0,1 +9777537,1007,assets/images/split/image296.bin,0,1 +9778544,1088,assets/images/split/image297.bin,0,1 +9779632,930,assets/images/split/image298.bin,0,1 +9780562,783,assets/images/split/image299.bin,0,1 +9781345,771,assets/images/split/image300.bin,0,1 +9782116,771,assets/images/split/image301.bin,0,1 +9782887,884,assets/images/split/image302.bin,0,1 +9783771,1333,assets/images/split/image303.bin,0,1 +9785104,639,assets/images/split/image304.bin,0,1 +9785743,200,assets/images/split/image305.bin,0,1 +9785943,573,assets/images/split/image306.bin,0,1 +9786516,687,assets/images/split/image307.bin,0,1 +9787203,1376,assets/images/split/image308.bin,0,1 +9788579,901,assets/images/split/image309.bin,0,1 +9789480,949,assets/images/split/image310.bin,0,1 +9790429,1351,assets/images/split/image311.bin,0,1 +9791780,815,assets/images/split/image312.bin,0,1 +9792595,904,assets/images/split/image313.bin,0,1 +9793499,636,assets/images/split/image314.bin,0,1 +9794135,636,assets/images/split/image315.bin,0,1 +9794771,581,assets/images/split/image316.bin,0,1 +9795352,581,assets/images/split/image317.bin,0,1 +9795933,582,assets/images/split/image318.bin,0,1 +9796515,678,assets/images/split/image319.bin,0,1 +9797193,321,assets/images/split/image320.bin,0,1 +9797514,536,assets/images/split/image321.bin,0,1 +9798050,1115,assets/images/split/image322.bin,0,1 +9799165,1515,assets/images/split/image323.bin,0,1 +9800680,1563,assets/images/split/image324.bin,0,1 +9802243,1581,assets/images/split/image325.bin,0,1 +9803824,1567,assets/images/split/image326.bin,0,1 +9805391,1601,assets/images/split/image327.bin,0,1 +9806992,1619,assets/images/split/image328.bin,0,1 +9808611,1525,assets/images/split/image329.bin,0,1 +9810136,836,assets/images/split/image330.bin,0,1 +9810972,902,assets/images/split/image331.bin,0,1 +9811874,921,assets/images/split/image332.bin,0,1 +9812795,864,assets/images/split/image333.bin,0,1 +9813659,353,assets/images/split/image334.bin,0,1 +9814012,282,assets/images/split/image335.bin,0,1 +9814294,307,assets/images/split/image336.bin,0,1 +9814601,298,assets/images/split/image337.bin,0,1 +9814899,840,assets/images/split/image338.bin,0,1 +9815739,1319,assets/images/split/image339.bin,0,1 +9817058,922,assets/images/split/image340.bin,0,1 +9817980,1006,assets/images/split/image341.bin,0,1 +9818986,984,assets/images/split/image342.bin,0,1 +9819970,1115,assets/images/split/image343.bin,0,1 +9821085,232,assets/images/split/image344.bin,0,1 +9821317,290,assets/images/split/image345.bin,0,1 +9821607,1037,assets/images/split/image346.bin,0,1 +9822644,993,assets/images/split/image347.bin,0,1 +9823637,193,assets/images/split/image348.bin,0,1 +9823830,271,assets/images/split/image349.bin,0,1 +9824101,770,assets/images/split/image350.bin,0,1 +9824871,533,assets/images/split/image351.bin,0,1 +9825404,213,assets/images/split/image352.bin,0,1 +9825617,818,assets/images/split/image353.bin,0,1 +9826435,456,assets/images/split/image354.bin,0,1 +9826891,168,assets/images/split/image355.bin,0,1 +9827059,906,assets/images/split/image356.bin,0,1 +9827965,704,assets/images/split/image357.bin,0,1 +9828669,1098,assets/images/split/image358.bin,0,1 +9829767,987,assets/images/split/image359.bin,0,1 +9830754,861,assets/images/split/image360.bin,0,1 +9831615,845,assets/images/split/image361.bin,0,1 +9832460,1334,assets/images/split/image362.bin,0,1 +9833794,960,assets/images/split/image363.bin,0,1 +9834754,1224,assets/images/split/image364.bin,0,1 +9835978,973,assets/images/split/image365.bin,0,1 +9836951,532,assets/images/split/image366.bin,0,1 +9837483,756,assets/images/split/image367.bin,0,1 +9838239,950,assets/images/split/image368.bin,0,1 +9839189,990,assets/images/split/image369.bin,0,1 +9840179,622,assets/images/split/image370.bin,0,1 +9840801,622,assets/images/split/image371.bin,0,1 +9841423,1375,assets/images/split/image372.bin,0,1 +9842798,1418,assets/images/split/image373.bin,0,1 +9844216,823,assets/images/split/image374.bin,0,1 +9845039,1023,assets/images/split/image375.bin,0,1 +9846062,949,assets/images/split/image376.bin,0,1 +9847011,949,assets/images/split/image377.bin,0,1 +9847960,818,assets/images/split/image378.bin,0,1 +9848778,1020,assets/images/split/image379.bin,0,1 +9849798,964,assets/images/split/image380.bin,0,1 +9850762,1094,assets/images/split/image381.bin,0,1 +9851856,1018,assets/images/split/image382.bin,0,1 +9852874,609,assets/images/split/image383.bin,0,1 +9853483,1333,assets/images/split/image384.bin,0,1 +9854816,1389,assets/images/split/image385.bin,0,1 +9856205,1103,assets/images/split/image386.bin,0,1 +9857308,2429,assets/images/split/image387.bin,0,1 +9859737,2306,assets/images/split/image388.bin,0,1 +9862043,2349,assets/images/split/image389.bin,0,1 +9864392,2324,assets/images/split/image390.bin,0,1 +9866716,2433,assets/images/split/image391.bin,0,1 +9869149,2302,assets/images/split/image392.bin,0,1 +9871451,2293,assets/images/split/image393.bin,0,1 +9873744,2168,assets/images/split/image394.bin,0,1 +9875912,545,assets/images/split/image395.bin,0,1 +9876457,1136,assets/images/split/image396.bin,0,1 +9877593,1318,assets/images/split/image397.bin,0,1 +9878911,1254,assets/images/split/image398.bin,0,1 +9880165,1061,assets/images/split/image399.bin,0,1 +9881226,859,assets/images/split/image400.bin,0,1 +9882085,1077,assets/images/split/image401.bin,0,1 +9883162,1081,assets/images/split/image402.bin,0,1 +9884243,828,assets/images/split/image403.bin,0,1 +9885071,780,assets/images/split/image404.bin,0,1 +9885851,767,assets/images/split/image405.bin,0,1 +9886618,691,assets/images/split/image406.bin,0,1 +9887309,1321,assets/images/split/image407.bin,0,1 +9888630,845,assets/images/split/image408.bin,0,1 +9889475,525,assets/images/split/image409.bin,0,1 +9890000,925,assets/images/split/image410.bin,0,1 +9890925,753,assets/images/split/image411.bin,0,1 +9891678,435,assets/images/split/image412.bin,0,1 +9892113,526,assets/images/split/image413.bin,0,1 +9892639,363,assets/images/split/image414.bin,0,1 +9893002,519,assets/images/split/image415.bin,0,1 +9893521,399,assets/images/split/image416.bin,0,1 +9893920,463,assets/images/split/image417.bin,0,1 +9894383,447,assets/images/split/image418.bin,0,1 +9894830,1750,assets/images/split/image419.bin,0,1 +9896580,988,assets/images/split/image420.bin,0,1 +9897568,1760,assets/images/split/image421.bin,0,1 +9899328,547,assets/images/split/image422.bin,0,1 +9899875,483,assets/images/split/image423.bin,0,1 +9900358,344,assets/images/split/image424.bin,0,1 +9900702,385,assets/images/split/image425.bin,0,1 +9901087,1107,assets/images/split/image426.bin,0,1 +9902194,1374,assets/images/split/image427.bin,0,1 +9903568,1467,assets/images/split/image428.bin,0,1 +9905035,1317,assets/images/split/image429.bin,0,1 +9906352,1837,assets/images/split/image430.bin,0,1 +9908189,1214,assets/images/split/image431.bin,0,1 +9909403,755,assets/images/split/image432.bin,0,1 +9910158,1084,assets/images/split/image433.bin,0,1 +9911242,998,assets/images/split/image434.bin,0,1 +9912240,1579,assets/images/split/image435.bin,0,1 +9913819,797,assets/images/split/image436.bin,0,1 +9914616,768,assets/images/split/image437.bin,0,1 +9915384,1615,assets/images/split/image438.bin,0,1 +9916999,1527,assets/images/split/image439.bin,0,1 +9918526,1637,assets/images/split/image440.bin,0,1 +9920163,968,assets/images/split/image441.bin,0,1 +9921131,971,assets/images/split/image442.bin,0,1 +9922102,870,assets/images/split/image443.bin,0,1 +9922972,1718,assets/images/split/image444.bin,0,1 +9924690,1826,assets/images/split/image445.bin,0,1 +9926516,2215,assets/images/split/image446.bin,0,1 +9928731,2252,assets/images/split/image447.bin,0,1 +9930983,1008,assets/images/split/image448.bin,0,1 +9931991,827,assets/images/split/image449.bin,0,1 +9932818,580,assets/images/split/image450.bin,0,1 +9933398,512,assets/images/split/image451.bin,0,1 +9933910,503,assets/images/split/image452.bin,0,1 +9934413,1139,assets/images/split/image453.bin,0,1 +9935552,964,assets/images/split/image454.bin,0,1 +9936516,987,assets/images/split/image455.bin,0,1 +9937503,480,assets/images/split/image456.bin,0,1 +9937983,493,assets/images/split/image457.bin,0,1 +9938476,1325,assets/images/split/image458.bin,0,1 +9939801,1151,assets/images/split/image459.bin,0,1 +9940952,592,assets/images/split/image460.bin,0,1 +9941544,646,assets/images/split/image461.bin,0,1 +9942190,180,assets/images/split/image462.bin,0,1 +9942370,163,assets/images/split/image463.bin,0,1 +9942533,486,assets/images/split/image464.bin,0,1 +9943019,430,assets/images/split/image465.bin,0,1 +9943449,645,assets/images/split/image466.bin,0,1 +9944094,547,assets/images/split/image467.bin,0,1 +9944641,506,assets/images/split/image468.bin,0,1 +9945147,1954,assets/images/split/image469.bin,0,1 +9947101,1950,assets/images/split/image470.bin,0,1 +9949051,320,assets/images/split/image471.bin,0,1 +9949371,630,assets/images/split/image472.bin,0,1 +9950001,656,assets/images/split/image473.bin,0,1 +9950657,612,assets/images/split/image474.bin,0,1 +9951269,1156,assets/images/split/image475.bin,0,1 +9952425,966,assets/images/split/image476.bin,0,1 +9953391,835,assets/images/split/image477.bin,0,1 +9954226,827,assets/images/split/image478.bin,0,1 +9955053,809,assets/images/split/image479.bin,0,1 +9955862,973,assets/images/split/image480.bin,0,1 +9956835,321,assets/images/split/image481.bin,0,1 +9957156,1312,assets/images/split/image482.bin,0,1 +9958468,1139,assets/images/split/image483.bin,0,1 +9959607,1216,assets/images/split/image484.bin,0,1 +9960823,897,assets/images/split/image485.bin,0,1 +9961720,944,assets/images/split/image486.bin,0,1 +9962664,1010,assets/images/split/image487.bin,0,1 +9963674,1118,assets/images/split/image488.bin,0,1 +9964792,1168,assets/images/split/image489.bin,0,1 +9965960,937,assets/images/split/image490.bin,0,1 +9966897,923,assets/images/split/image491.bin,0,1 +9967820,866,assets/images/split/image492.bin,0,1 +9968686,680,assets/images/split/image493.bin,0,1 +9969366,1465,assets/images/split/image494.bin,0,1 +9970831,187,assets/images/split/image495.bin,0,1 +9971018,186,assets/images/split/image496.bin,0,1 +9971204,183,assets/images/split/image497.bin,0,1 +9971387,265,assets/images/split/image498.bin,0,1 +9971652,225,assets/images/split/image499.bin,0,1 +9971877,1182,assets/images/split/image500.bin,0,1 +9973059,1139,assets/images/split/image501.bin,0,1 +9974198,860,assets/images/split/image502.bin,0,1 +9975058,823,assets/images/split/image503.bin,0,1 +9975881,638,assets/images/split/image504.bin,0,1 +9976519,584,assets/images/split/image505.bin,0,1 +9977103,571,assets/images/split/image506.bin,0,1 +9977674,338,assets/images/split/image507.bin,0,1 +9978012,691,assets/images/split/image508.bin,0,1 +9978703,392,assets/images/split/image509.bin,0,1 +9979095,631,assets/images/split/image510.bin,0,1 +9979726,517,assets/images/split/image511.bin,0,1 +9980243,420,assets/images/split/image512.bin,0,1 +9980663,158,assets/images/split/image513.bin,0,1 +9980821,812,assets/images/split/image514.bin,0,1 +9981633,1199,assets/images/split/image515.bin,0,1 +9982832,266,assets/images/split/image516.bin,0,1 +9983098,312,assets/images/split/image517.bin,0,1 +9983410,319,assets/images/split/image518.bin,0,1 +9983729,1236,assets/images/split/image519.bin,0,1 +9984965,327,assets/images/split/image520.bin,0,1 +9985292,647,assets/images/split/image521.bin,0,1 +9985939,157,assets/images/split/image522.bin,0,1 +9986096,749,assets/images/split/image523.bin,0,1 +9986845,607,assets/images/split/image524.bin,0,1 +9987452,266,assets/images/split/image525.bin,0,1 +9987718,736,assets/images/split/image526.bin,0,1 +9988454,883,assets/images/split/image527.bin,0,1 +9989337,426,assets/images/split/image528.bin,0,1 +9989763,749,assets/images/split/image529.bin,0,1 +9990512,331,assets/images/split/image530.bin,0,1 +9990843,1156,assets/images/split/image531.bin,0,1 +9991999,746,assets/images/split/image532.bin,0,1 +9992745,69,assets/images/split/image533.bin,0,1 +9992814,484,assets/images/split/image534.bin,0,1 +9993298,964,assets/images/split/image535.bin,0,1 +9994262,1072,assets/images/split/image536.bin,0,1 +9995334,805,assets/images/split/image537.bin,0,1 +9996139,662,assets/images/split/image538.bin,0,1 +9996801,1175,assets/images/split/image539.bin,0,1 +9997976,828,assets/images/split/image540.bin,0,1 +9998804,687,assets/images/split/image541.bin,0,1 +9999491,249,assets/images/split/image542.bin,0,1 +9999740,1046,assets/images/split/image543.bin,0,1 +10000786,835,assets/images/split/image544.bin,0,1 +10001621,1516,assets/images/split/image545.bin,0,1 +10003137,1892,assets/images/split/image546.bin,0,1 +10005029,1902,assets/images/split/image547.bin,0,1 +10006931,1835,assets/images/split/image548.bin,0,1 +10008766,1068,assets/images/split/image549.bin,0,1 +10009834,968,assets/images/split/image550.bin,0,1 +10010802,1035,assets/images/split/image551.bin,0,1 +10011837,1767,assets/images/split/image552.bin,0,1 +10013604,1679,assets/images/split/image553.bin,0,1 +10015283,1538,assets/images/split/image554.bin,0,1 +10016821,1538,assets/images/split/image555.bin,0,1 +10018359,1525,assets/images/split/image556.bin,0,1 +10019884,1734,assets/images/split/image557.bin,0,1 +10021618,1529,assets/images/split/image558.bin,0,1 +10023147,1707,assets/images/split/image559.bin,0,1 +10024854,1896,assets/images/split/image560.bin,0,1 +10026750,1644,assets/images/split/image561.bin,0,1 +10028394,1581,assets/images/split/image562.bin,0,1 +10029975,1590,assets/images/split/image563.bin,0,1 +10031565,1537,assets/images/split/image564.bin,0,1 +10033102,1704,assets/images/split/image565.bin,0,1 +10034806,1695,assets/images/split/image566.bin,0,1 +10036501,1606,assets/images/split/image567.bin,0,1 +10038107,378,assets/images/split/image568.bin,0,1 +10038485,2029,assets/images/split/image569.bin,0,1 +10040514,1846,assets/images/split/image570.bin,0,1 +10042360,1903,assets/images/split/image571.bin,0,1 +10044263,2050,assets/images/split/image572.bin,0,1 +10046313,2028,assets/images/split/image573.bin,0,1 +10048341,1904,assets/images/split/image574.bin,0,1 +10050245,1793,assets/images/split/image575.bin,0,1 +10052038,2030,assets/images/split/image576.bin,0,1 +10054068,867,assets/images/split/image577.bin,0,1 +10054935,1214,assets/images/split/image578.bin,0,1 +10056149,1169,assets/images/split/image579.bin,0,1 +10057318,500,assets/images/split/image580.bin,0,1 +10057818,201,assets/images/split/image581.bin,0,1 +10058019,1534,assets/images/split/image582.bin,0,1 +10059553,1527,assets/images/split/image583.bin,0,1 +10061080,1548,assets/images/split/image584.bin,0,1 +10062628,1541,assets/images/split/image585.bin,0,1 +10064169,1039,assets/images/split/image586.bin,0,1 +10065208,1024,assets/images/split/image587.bin,0,1 +10066232,1122,assets/images/split/image588.bin,0,1 +10067354,1308,assets/images/split/image589.bin,0,1 +10068662,1245,assets/images/split/image590.bin,0,1 +10069907,1329,assets/images/split/image591.bin,0,1 +10071236,1196,assets/images/split/image592.bin,0,1 +10072432,1130,assets/images/split/image593.bin,0,1 +10073562,1427,assets/images/split/image594.bin,0,1 +10074989,891,assets/images/split/image595.bin,0,1 +10075880,1210,assets/images/split/image596.bin,0,1 +10077090,1422,assets/images/split/image597.bin,0,1 +10078512,433,assets/images/split/image598.bin,0,1 +10078945,1377,assets/images/split/image599.bin,0,1 +10080322,1619,assets/images/split/image600.bin,0,1 +10081941,1920,assets/images/split/image601.bin,0,1 +10083861,1617,assets/images/split/image602.bin,0,1 +10085478,481,assets/images/split/image603.bin,0,1 +10085959,1402,assets/images/split/image604.bin,0,1 +10087361,1317,assets/images/split/image605.bin,0,1 +10088678,1461,assets/images/split/image606.bin,0,1 +10090139,358,assets/images/split/image607.bin,0,1 +10090497,325,assets/images/split/image608.bin,0,1 +10090822,1694,assets/images/split/image609.bin,0,1 +10092516,2105,assets/images/split/image610.bin,0,1 +10094621,1404,assets/images/split/image611.bin,0,1 +10096025,2010,assets/images/split/image612.bin,0,1 +10098035,702,assets/images/split/image613.bin,0,1 +10098737,616,assets/images/split/image614.bin,0,1 +10099353,667,assets/images/split/image615.bin,0,1 +10100020,646,assets/images/split/image616.bin,0,1 +10100666,622,assets/images/split/image617.bin,0,1 +10101288,593,assets/images/split/image618.bin,0,1 +10101881,926,assets/images/split/image619.bin,0,1 +10102807,276,assets/images/split/image620.bin,0,1 +10103083,611,assets/images/split/image621.bin,0,1 +10103694,1432,assets/images/split/image622.bin,0,1 +10105126,1128,assets/images/split/image623.bin,0,1 +10106254,1146,assets/images/split/image624.bin,0,1 +10107400,293,assets/images/split/image625.bin,0,1 +10107693,446,assets/images/split/image626.bin,0,1 +10108139,267,assets/images/split/image627.bin,0,1 +10108406,328,assets/images/split/image628.bin,0,1 +10108734,320,assets/images/split/image629.bin,0,1 +10109054,328,assets/images/split/image630.bin,0,1 +10109382,1458,assets/images/split/image631.bin,0,1 +10110840,1000,assets/images/split/image632.bin,0,1 +10111840,621,assets/images/split/image633.bin,0,1 +10112461,961,assets/images/split/image634.bin,0,1 +10113422,973,assets/images/split/image635.bin,0,1 +10114395,85,assets/images/split/image636.bin,0,1 +10114480,612,assets/images/split/image637.bin,0,1 +10115092,870,assets/images/split/image638.bin,0,1 +10115962,447,assets/images/split/image639.bin,0,1 +10116409,1848,assets/images/split/image640.bin,0,1 +10118257,812,assets/images/split/image641.bin,0,1 +10119069,1363,assets/images/split/image642.bin,0,1 +10120432,908,assets/images/split/image643.bin,0,1 +10121340,301,assets/images/split/image644.bin,0,1 +10121641,726,assets/images/split/image645.bin,0,1 +10122367,445,assets/images/split/image646.bin,0,1 +10122812,1187,assets/images/split/image647.bin,0,1 +10123999,409,assets/images/split/image648.bin,0,1 +10124408,701,assets/images/split/image649.bin,0,1 +10125109,612,assets/images/split/image650.bin,0,1 +10125721,510,assets/images/split/image651.bin,0,1 +10126231,1260,assets/images/split/image652.bin,0,1 +10127491,620,assets/images/split/image653.bin,0,1 +10128111,587,assets/images/split/image654.bin,0,1 +10128698,837,assets/images/split/image655.bin,0,1 +10129535,889,assets/images/split/image656.bin,0,1 +10130424,164,assets/images/split/image657.bin,0,1 +10130588,171,assets/images/split/image658.bin,0,1 +10130759,85,assets/images/split/image659.bin,0,1 +10130844,1025,assets/images/split/image660.bin,0,1 +10131869,834,assets/images/split/image661.bin,0,1 +10132703,1241,assets/images/split/image662.bin,0,1 +10133944,1205,assets/images/split/image663.bin,0,1 +10135149,196,assets/images/split/image664.bin,0,1 +10135345,226,assets/images/split/image665.bin,0,1 +10135571,1511,assets/images/split/image666.bin,0,1 +10137082,1014,assets/images/split/image667.bin,0,1 +10138096,997,assets/images/split/image668.bin,0,1 +10139093,957,assets/images/split/image669.bin,0,1 +10140050,1084,assets/images/split/image670.bin,0,1 +10141134,841,assets/images/split/image671.bin,0,1 +10141975,1081,assets/images/split/image672.bin,0,1 +10143056,889,assets/images/split/image673.bin,0,1 +10143945,866,assets/images/split/image674.bin,0,1 +10144811,875,assets/images/split/image675.bin,0,1 +10145686,792,assets/images/split/image676.bin,0,1 +10146478,675,assets/images/split/image677.bin,0,1 +10147153,129,assets/images/split/image678.bin,0,1 +10147282,634,assets/images/split/image679.bin,0,1 +10147916,1258,assets/images/split/image680.bin,0,1 +10149174,1443,assets/images/split/image681.bin,0,1 +10150617,1408,assets/images/split/image682.bin,0,1 +10152025,1278,assets/images/split/image683.bin,0,1 +10153303,314,assets/images/split/image684.bin,0,1 +10153617,478,assets/images/split/image685.bin,0,1 +10154095,742,assets/images/split/image686.bin,0,1 +10154837,674,assets/images/split/image687.bin,0,1 +10155511,787,assets/images/split/image688.bin,0,1 +10156298,831,assets/images/split/image689.bin,0,1 +10157129,543,assets/images/split/image690.bin,0,1 +10157672,278,assets/images/split/image691.bin,0,1 +10157950,162,assets/images/split/image692.bin,0,1 +10158112,333,assets/images/split/image693.bin,0,1 +10158445,1101,assets/images/split/image694.bin,0,1 +10159546,593,assets/images/split/image695.bin,0,1 +10160139,508,assets/images/split/image696.bin,0,1 +10160647,529,assets/images/split/image697.bin,0,1 +10161176,452,assets/images/split/image698.bin,0,1 +10161628,388,assets/images/split/image699.bin,0,1 +10162016,543,assets/images/split/image700.bin,0,1 +10162559,343,assets/images/split/image701.bin,0,1 +10162902,828,assets/images/split/image702.bin,0,1 +10163730,138,assets/images/split/image703.bin,0,1 +10163868,525,assets/images/split/image704.bin,0,1 +10164393,520,assets/images/split/image705.bin,0,1 +10164913,884,assets/images/split/image706.bin,0,1 +10165797,662,assets/images/split/image707.bin,0,1 +10166459,498,assets/images/split/image708.bin,0,1 +10166957,351,assets/images/split/image709.bin,0,1 +10167308,1214,assets/images/split/image710.bin,0,1 +10168522,789,assets/images/split/image711.bin,0,1 +10169311,1242,assets/images/split/image712.bin,0,1 +10170553,589,assets/images/split/image713.bin,0,1 +10171142,1548,assets/images/split/image714.bin,0,1 +10172690,192,assets/images/split/image715.bin,0,1 +10172882,366,assets/images/split/image716.bin,0,1 +10173248,850,assets/images/split/image717.bin,0,1 +10174098,253,assets/images/split/image718.bin,0,1 +10174351,499,assets/images/split/image719.bin,0,1 +10174850,593,assets/images/split/image720.bin,0,1 +10175443,539,assets/images/split/image721.bin,0,1 +10175982,177,assets/images/split/image722.bin,0,1 +10176159,552,assets/images/split/image723.bin,0,1 +10176711,536,assets/images/split/image724.bin,0,1 +10177247,851,assets/images/split/image725.bin,0,1 +10178098,1062,assets/images/split/image726.bin,0,1 +10179160,453,assets/images/split/image727.bin,0,1 +10179613,921,assets/images/split/image728.bin,0,1 +10180534,1009,assets/images/split/image729.bin,0,1 +10181543,457,assets/images/split/image730.bin,0,1 +10182000,408,assets/images/split/image731.bin,0,1 +10182408,455,assets/images/split/image732.bin,0,1 +10182863,1335,assets/images/split/image733.bin,0,1 +10184198,1307,assets/images/split/image734.bin,0,1 +10185505,1187,assets/images/split/image735.bin,0,1 +10186692,1518,assets/images/split/image736.bin,0,1 +10188210,1496,assets/images/split/image737.bin,0,1 +10189706,1413,assets/images/split/image738.bin,0,1 +10191119,1346,assets/images/split/image739.bin,0,1 +10192465,1410,assets/images/split/image740.bin,0,1 +10193875,1097,assets/images/split/image741.bin,0,1 +10194972,1179,assets/images/split/image742.bin,0,1 +10196151,1389,assets/images/split/image743.bin,0,1 +10197540,1470,assets/images/split/image744.bin,0,1 +10199010,1499,assets/images/split/image745.bin,0,1 +10200509,1028,assets/images/split/image746.bin,0,1 +10201537,1278,assets/images/split/image747.bin,0,1 +10202815,1420,assets/images/split/image748.bin,0,1 +10204235,1379,assets/images/split/image749.bin,0,1 +10205614,1458,assets/images/split/image750.bin,0,1 +10207072,1403,assets/images/split/image751.bin,0,1 +10208475,1163,assets/images/split/image752.bin,0,1 +10209638,1198,assets/images/split/image753.bin,0,1 +10210836,1300,assets/images/split/image754.bin,0,1 +10212136,1436,assets/images/split/image755.bin,0,1 +10213572,1384,assets/images/split/image756.bin,0,1 +10214956,1466,assets/images/split/image757.bin,0,1 +10216422,1425,assets/images/split/image758.bin,0,1 +10217847,520,assets/images/split/image759.bin,0,1 +10218367,510,assets/images/split/image760.bin,0,1 +10218877,1285,assets/images/split/image761.bin,0,1 +10220162,927,assets/images/split/image762.bin,0,1 +10221089,178,assets/images/split/image763.bin,0,1 +10221267,167,assets/images/split/image764.bin,0,1 +10221434,103,assets/images/split/image765.bin,0,1 +10221537,1375,assets/images/split/image766.bin,0,1 +10222912,510,assets/images/split/image767.bin,0,1 +10223422,801,assets/images/split/image768.bin,0,1 +10224223,305,assets/images/split/image769.bin,0,1 +10224528,339,assets/images/split/image770.bin,0,1 +10224867,1154,assets/images/split/image771.bin,0,1 +10226021,1548,assets/images/split/image772.bin,0,1 +10227569,601,assets/images/split/image773.bin,0,1 +10228170,899,assets/images/split/image774.bin,0,1 +10229069,120,assets/images/split/image775.bin,0,1 +10229189,1228,assets/images/split/image776.bin,0,1 +10230417,1347,assets/images/split/image777.bin,0,1 +10231764,1468,assets/images/split/image778.bin,0,1 +10233232,881,assets/images/split/image779.bin,0,1 +10234113,1474,assets/images/split/image780.bin,0,1 +10235587,1250,assets/images/split/image781.bin,0,1 +10236837,1605,assets/images/split/image782.bin,0,1 +10238442,1339,assets/images/split/image783.bin,0,1 +10239781,1096,assets/images/split/image784.bin,0,1 +10240877,504,assets/images/split/image785.bin,0,1 +10241381,296,assets/images/split/image786.bin,0,1 +10241677,364,assets/images/split/image787.bin,0,1 +10242041,967,assets/images/split/image788.bin,0,1 +10243008,573,assets/images/split/image789.bin,0,1 +10243581,1580,assets/images/split/image790.bin,0,1 +10245161,1538,assets/images/split/image791.bin,0,1 +10246699,1503,assets/images/split/image792.bin,0,1 +10248202,1640,assets/images/split/image793.bin,0,1 +10249842,1656,assets/images/split/image794.bin,0,1 +10251498,1517,assets/images/split/image795.bin,0,1 +10253015,1600,assets/images/split/image796.bin,0,1 +10254615,624,assets/images/split/image797.bin,0,1 +10255239,588,assets/images/split/image798.bin,0,1 +10255827,612,assets/images/split/image799.bin,0,1 +10256439,225,assets/images/split/image800.bin,0,1 +10256664,152,assets/images/split/image801.bin,0,1 +10256816,451,assets/images/split/image802.bin,0,1 +10257267,671,assets/images/split/image803.bin,0,1 +10257938,415,assets/images/split/image804.bin,0,1 +10258353,464,assets/images/split/image805.bin,0,1 +10258817,783,assets/images/split/image806.bin,0,1 +10259600,987,assets/images/split/image807.bin,0,1 +10260587,325,assets/images/split/image808.bin,0,1 +10260912,665,assets/images/split/image809.bin,0,1 +10261577,1056,assets/images/split/image810.bin,0,1 +10262633,600,assets/images/split/image811.bin,0,1 +10263233,670,assets/images/split/image812.bin,0,1 +10263903,821,assets/images/split/image813.bin,0,1 +10264724,457,assets/images/split/image814.bin,0,1 +10265181,1145,assets/images/split/image815.bin,0,1 +10266326,479,assets/images/split/image816.bin,0,1 +10266805,729,assets/images/split/image817.bin,0,1 +10267534,1078,assets/images/split/image818.bin,0,1 +10268612,611,assets/images/split/image819.bin,0,1 +10269223,1539,assets/images/split/image820.bin,0,1 +10270762,1391,assets/images/split/image821.bin,0,1 +10272153,68,assets/images/split/image822.bin,0,1 +10272221,593,assets/images/split/image823.bin,0,1 +10272814,388,assets/images/split/image824.bin,0,1 +10273202,683,assets/images/split/image825.bin,0,1 +10273885,886,assets/images/split/image826.bin,0,1 +10274771,1109,assets/images/split/image827.bin,0,1 +10275880,1334,assets/images/split/image828.bin,0,1 +10277214,1256,assets/images/split/image829.bin,0,1 +10278470,1369,assets/images/split/image830.bin,0,1 +10279839,1401,assets/images/split/image831.bin,0,1 +10281240,1694,assets/images/split/image832.bin,0,1 +10282934,1882,assets/images/split/image833.bin,0,1 +10284816,1707,assets/images/split/image834.bin,0,1 +10286523,957,assets/images/split/image835.bin,0,1 +10287480,790,assets/images/split/image836.bin,0,1 +10288270,1236,assets/images/split/image837.bin,0,1 +10289506,590,assets/images/split/image838.bin,0,1 +10290096,1909,assets/images/split/image839.bin,0,1 +10292005,1962,assets/images/split/image840.bin,0,1 +10293967,1675,assets/images/split/image841.bin,0,1 +10295642,1677,assets/images/split/image842.bin,0,1 +10297319,1402,assets/images/split/image843.bin,0,1 +10298721,1393,assets/images/split/image844.bin,0,1 +10300114,762,assets/images/split/image845.bin,0,1 +10300876,1134,assets/images/split/image846.bin,0,1 +10302010,910,assets/images/split/image847.bin,0,1 +10302920,1187,assets/images/split/image848.bin,0,1 +10304107,183,assets/images/split/image849.bin,0,1 +10304290,1532,assets/images/split/image850.bin,0,1 +10305822,783,assets/images/split/image851.bin,0,1 +10306605,965,assets/images/split/image852.bin,0,1 +10307570,460,assets/images/split/image853.bin,0,1 +10308030,505,assets/images/split/image854.bin,0,1 +10308535,389,assets/images/split/image855.bin,0,1 +10308924,734,assets/images/split/image856.bin,0,1 +10309658,655,assets/images/split/image857.bin,0,1 +10310313,1106,assets/images/split/image858.bin,0,1 +10311419,795,assets/images/split/image859.bin,0,1 +10312214,1788,assets/images/split/image860.bin,0,1 +10314002,1802,assets/images/split/image861.bin,0,1 +10315804,529,assets/images/split/image862.bin,0,1 +10316333,728,assets/images/split/image863.bin,0,1 +10317061,447,assets/images/split/image864.bin,0,1 +10317508,557,assets/images/split/image865.bin,0,1 +10318065,403,assets/images/split/image866.bin,0,1 +10318468,1256,assets/images/split/image867.bin,0,1 +10319724,294,assets/images/split/image868.bin,0,1 +10320018,255,assets/images/split/image869.bin,0,1 +10320273,796,assets/images/split/image870.bin,0,1 +10321069,379,assets/images/split/image871.bin,0,1 +10321448,352,assets/images/split/image872.bin,0,1 +10321800,67,assets/images/split/image873.bin,0,1 +10321867,400,assets/images/split/image874.bin,0,1 +10322267,47,assets/images/split/image875.bin,0,1 +10322314,334,assets/images/split/image876.bin,0,1 +10322648,314,assets/images/split/image877.bin,0,1 +10322962,47,assets/images/split/image878.bin,0,1 +10323009,57,assets/images/split/image879.bin,0,1 +10323066,81,assets/images/split/image880.bin,0,1 +10323147,41,assets/images/split/image881.bin,0,1 +10323188,75,assets/images/split/image882.bin,0,1 +10323263,43,assets/images/split/image883.bin,0,1 +10323306,221,assets/images/split/image884.bin,0,1 +10323527,1792,assets/images/split/image885.bin,0,1 +10325319,584,assets/images/split/image886.bin,0,1 +10325903,335,assets/images/split/image887.bin,0,1 +10326238,364,assets/images/split/image888.bin,0,1 +10326602,1016,assets/images/split/image889.bin,0,1 +10327618,688,assets/images/split/image890.bin,0,1 +10328306,447,assets/images/split/image891.bin,0,1 +10328753,944,assets/images/split/image892.bin,0,1 +10329697,1001,assets/images/split/image893.bin,0,1 +10330698,976,assets/images/split/image894.bin,0,1 +10331674,882,assets/images/split/image895.bin,0,1 +10332556,1490,assets/images/split/image896.bin,0,1 +10334046,1809,assets/images/split/image897.bin,0,1 +10335855,1650,assets/images/split/image898.bin,0,1 +10337505,1226,assets/images/split/image899.bin,0,1 +10338731,1002,assets/images/split/image900.bin,0,1 +10339733,551,assets/images/split/image901.bin,0,1 +10340284,958,assets/images/split/image902.bin,0,1 +10341242,852,assets/images/split/image903.bin,0,1 +10342094,854,assets/images/split/image904.bin,0,1 +10342948,949,assets/images/split/image905.bin,0,1 +10343897,1053,assets/images/split/image906.bin,0,1 +10344950,697,assets/images/split/image907.bin,0,1 +10345647,429,assets/images/split/image908.bin,0,1 +10346076,1299,assets/images/split/image909.bin,0,1 +10347375,1220,assets/images/split/image910.bin,0,1 +10348595,1135,assets/images/split/image911.bin,0,1 +10349730,1245,assets/images/split/image912.bin,0,1 +10350975,1627,assets/images/split/image913.bin,0,1 +10352602,919,assets/images/split/image914.bin,0,1 +10353521,751,assets/images/split/image915.bin,0,1 +10354272,790,assets/images/split/image916.bin,0,1 +10355062,790,assets/images/split/image917.bin,0,1 +10355852,152,assets/images/split/image918.bin,0,1 +10356004,424,assets/images/split/image919.bin,0,1 +10356428,630,assets/images/split/image920.bin,0,1 +10357058,1945,assets/images/split/image921.bin,0,1 +10359003,668,assets/images/split/image922.bin,0,1 +10359671,912,assets/images/split/image923.bin,0,1 +10360583,954,assets/images/split/image924.bin,0,1 +10361537,2214,assets/images/split/image925.bin,0,1 +10363751,830,assets/images/split/image926.bin,0,1 +10364581,1548,assets/images/split/image927.bin,0,1 +10366129,1616,assets/images/split/image928.bin,0,1 +10367745,567,assets/images/split/image929.bin,0,1 +10368312,860,assets/images/split/image930.bin,0,1 +10369172,787,assets/images/split/image931.bin,0,1 +10369959,478,assets/images/split/image932.bin,0,1 +10370437,445,assets/images/split/image933.bin,0,1 +10370882,617,assets/images/split/image934.bin,0,1 +10371499,336,assets/images/split/image935.bin,0,1 +10371835,1078,assets/images/split/image936.bin,0,1 +10372913,358,assets/images/split/image937.bin,0,1 +10373271,397,assets/images/split/image938.bin,0,1 +10373668,513,assets/images/split/image939.bin,0,1 +10374181,1056,assets/images/split/image940.bin,0,1 +10375237,726,assets/images/split/image941.bin,0,1 +10375963,730,assets/images/split/image942.bin,0,1 +10376693,815,assets/images/split/image943.bin,0,1 +10377508,697,assets/images/split/image944.bin,0,1 +10378205,669,assets/images/split/image945.bin,0,1 +10378874,506,assets/images/split/image946.bin,0,1 +10379380,639,assets/images/split/image947.bin,0,1 +10380019,241,assets/images/split/image948.bin,0,1 +10380260,1511,assets/images/split/image949.bin,0,1 +10381771,1649,assets/images/split/image950.bin,0,1 +10383420,1323,assets/images/split/image951.bin,0,1 +10384743,2168,assets/images/split/image952.bin,0,1 +10386911,1945,assets/images/split/image953.bin,0,1 +10388856,1508,assets/images/split/image954.bin,0,1 +10390364,1544,assets/images/split/image955.bin,0,1 +10391908,1384,assets/images/split/image956.bin,0,1 +10393292,1473,assets/images/split/image957.bin,0,1 +10394765,1509,assets/images/split/image958.bin,0,1 +10396274,1908,assets/images/split/image959.bin,0,1 +10398182,647,assets/images/split/image960.bin,0,1 +10398829,647,assets/images/split/image961.bin,0,1 +10399476,1888,assets/images/split/image962.bin,0,1 +10401364,2122,assets/images/split/image963.bin,0,1 +10403486,2157,assets/images/split/image964.bin,0,1 +10405643,2153,assets/images/split/image965.bin,0,1 +10407796,2110,assets/images/split/image966.bin,0,1 +10409906,2097,assets/images/split/image967.bin,0,1 +10412003,2126,assets/images/split/image968.bin,0,1 +10414129,2080,assets/images/split/image969.bin,0,1 +10416209,645,assets/images/split/image970.bin,0,1 +10416854,753,assets/images/split/image971.bin,0,1 +10417607,1227,assets/images/split/image972.bin,0,1 +10418834,2175,assets/images/split/image973.bin,0,1 +10421009,2221,assets/images/split/image974.bin,0,1 +10423230,2175,assets/images/split/image975.bin,0,1 +10425405,2175,assets/images/split/image976.bin,0,1 +10427580,2210,assets/images/split/image977.bin,0,1 +10429790,2175,assets/images/split/image978.bin,0,1 +10431965,2330,assets/images/split/image979.bin,0,1 +10434295,601,assets/images/split/image980.bin,0,1 +10434896,1654,assets/images/split/image981.bin,0,1 +10436550,1654,assets/images/split/image982.bin,0,1 +10438204,74,assets/images/split/image983.bin,0,1 +10438278,880,assets/images/split/image984.bin,0,1 +10439158,775,assets/images/split/image985.bin,0,1 +10439933,785,assets/images/split/image986.bin,0,1 +10440718,1306,assets/images/split/image987.bin,0,1 +10442024,410,assets/images/split/image988.bin,0,1 +10442434,17,assets/images/split/image989.bin,0,1 +10442451,297,assets/images/split/image990.bin,0,1 +10442748,322,assets/images/split/image991.bin,0,1 +10443070,401,assets/images/split/image992.bin,0,1 +10443471,384,assets/images/split/image993.bin,0,1 +10443855,316,assets/images/split/image994.bin,0,1 +10444171,354,assets/images/split/image995.bin,0,1 +10444525,294,assets/images/split/image996.bin,0,1 +10444819,373,assets/images/split/image997.bin,0,1 +10445192,862,assets/images/split/image998.bin,0,1 +10446054,562,assets/images/split/image999.bin,0,1 +10446616,1290,assets/images/split/image1000.bin,0,1 +10447906,1036,assets/images/split/image1001.bin,0,1 +10448942,969,assets/images/split/image1002.bin,0,1 +10449911,1232,assets/images/split/image1003.bin,0,1 +10451143,1261,assets/images/split/image1004.bin,0,1 +10452404,615,assets/images/split/image1005.bin,0,1 +10453019,826,assets/images/split/image1006.bin,0,1 +10453845,240,assets/images/split/image1007.bin,0,1 +10454085,1169,assets/images/split/image1008.bin,0,1 +10455254,653,assets/images/split/image1009.bin,0,1 +10455907,434,assets/images/split/image1010.bin,0,1 +10456341,1554,assets/images/split/image1011.bin,0,1 +10457895,1822,assets/images/split/image1012.bin,0,1 +10459717,409,assets/images/split/image1013.bin,0,1 +10460126,1709,assets/images/split/image1014.bin,0,1 +10461835,499,assets/images/split/image1015.bin,0,1 +10462334,905,assets/images/split/image1016.bin,0,1 +10463239,871,assets/images/split/image1017.bin,0,1 +10464110,767,assets/images/split/image1018.bin,0,1 +10464877,889,assets/images/split/image1019.bin,0,1 +10465766,1166,assets/images/split/image1020.bin,0,1 +10466932,1311,assets/images/split/image1021.bin,0,1 +10468243,1349,assets/images/split/image1022.bin,0,1 +10469592,778,assets/images/split/image1023.bin,0,1 +10470370,947,assets/images/split/image1024.bin,0,1 +10471317,1142,assets/images/split/image1025.bin,0,1 +10472459,554,assets/images/split/image1026.bin,0,1 +10473013,150,assets/images/split/image1027.bin,0,1 +10473163,817,assets/images/split/image1028.bin,0,1 +10473980,1103,assets/images/split/image1029.bin,0,1 +10475083,817,assets/images/split/image1030.bin,0,1 +10475900,835,assets/images/split/image1031.bin,0,1 +10476735,173,assets/images/split/image1032.bin,0,1 +10476908,1490,assets/images/split/image1033.bin,0,1 +10478398,1160,assets/images/split/image1034.bin,0,1 +10479558,1143,assets/images/split/image1035.bin,0,1 +10480701,1235,assets/images/split/image1036.bin,0,1 +10481936,1562,assets/images/split/image1037.bin,0,1 +10483498,1167,assets/images/split/image1038.bin,0,1 +10484665,1275,assets/images/split/image1039.bin,0,1 +10485940,1339,assets/images/split/image1040.bin,0,1 +10487279,1696,assets/images/split/image1041.bin,0,1 +10488975,530,assets/images/split/image1042.bin,0,1 +10489505,743,assets/images/split/image1043.bin,0,1 +10490248,677,assets/images/split/image1044.bin,0,1 +10490925,580,assets/images/split/image1045.bin,0,1 +10491505,304,assets/images/split/image1046.bin,0,1 +10491809,348,assets/images/split/image1047.bin,0,1 +10492157,860,assets/images/split/image1048.bin,0,1 +10493017,1654,assets/images/split/image1049.bin,0,1 +10494671,717,assets/images/split/image1050.bin,0,1 +10495388,1902,assets/images/split/image1051.bin,0,1 +10497290,1827,assets/images/split/image1052.bin,0,1 +10499117,1970,assets/images/split/image1053.bin,0,1 +10501087,1555,assets/images/split/image1054.bin,0,1 +10502642,552,assets/images/split/image1055.bin,0,1 +10503194,1490,assets/images/split/image1056.bin,0,1 +10504684,519,assets/images/split/image1057.bin,0,1 +10505203,1438,assets/images/split/image1058.bin,0,1 +10506641,408,assets/images/split/image1059.bin,0,1 +10507049,1356,assets/images/split/image1060.bin,0,1 +10508405,1294,assets/images/split/image1061.bin,0,1 +10509699,483,assets/images/split/image1062.bin,0,1 +10510182,1316,assets/images/split/image1063.bin,0,1 +10511498,982,assets/images/split/image1064.bin,0,1 +10512480,658,assets/images/split/image1065.bin,0,1 +10513138,365,assets/images/split/image1066.bin,0,1 +10513503,965,assets/images/split/image1067.bin,0,1 +10514468,1467,assets/images/split/image1068.bin,0,1 +10515935,1338,assets/images/split/image1069.bin,0,1 +10517273,1443,assets/images/split/image1070.bin,0,1 +10518716,1818,assets/images/split/image1071.bin,0,1 +10520534,1034,assets/images/split/image1072.bin,0,1 +10521568,1761,assets/images/split/image1073.bin,0,1 +10523329,1827,assets/images/split/image1074.bin,0,1 +10525156,1150,assets/images/split/image1075.bin,0,1 +10526306,640,assets/images/split/image1076.bin,0,1 +10526946,899,assets/images/split/image1077.bin,0,1 +10527845,740,assets/images/split/image1078.bin,0,1 +10528585,320,assets/images/split/image1079.bin,0,1 +10528905,230,assets/images/split/image1080.bin,0,1 +10529135,1514,assets/images/split/image1081.bin,0,1 +10530649,1224,assets/images/split/image1082.bin,0,1 +10531873,1295,assets/images/split/image1083.bin,0,1 +10533168,228,assets/images/split/image1084.bin,0,1 +10533396,72,assets/images/split/image1085.bin,0,1 +10533468,1452,assets/images/split/image1086.bin,0,1 +10534920,539,assets/images/split/image1087.bin,0,1 +10535459,863,assets/images/split/image1088.bin,0,1 +10536322,518,assets/images/split/image1089.bin,0,1 +10536840,363,assets/images/split/image1090.bin,0,1 +10537203,1131,assets/images/split/image1091.bin,0,1 +10538334,1343,assets/images/split/image1092.bin,0,1 +10539677,1002,assets/images/split/image1093.bin,0,1 +10540679,1003,assets/images/split/image1094.bin,0,1 +10541682,1307,assets/images/split/image1095.bin,0,1 +10542989,1162,assets/images/split/image1096.bin,0,1 +10544151,1224,assets/images/split/image1097.bin,0,1 +10545375,1110,assets/images/split/image1098.bin,0,1 +10546485,902,assets/images/split/image1099.bin,0,1 +10547387,1264,assets/images/split/image1100.bin,0,1 +10548651,1366,assets/images/split/image1101.bin,0,1 +10550017,1331,assets/images/split/image1102.bin,0,1 +10551348,1002,assets/images/split/image1103.bin,0,1 +10552350,1256,assets/images/split/image1104.bin,0,1 +10553606,1358,assets/images/split/image1105.bin,0,1 +10554964,1304,assets/images/split/image1106.bin,0,1 +10556268,1183,assets/images/split/image1107.bin,0,1 +10557451,1354,assets/images/split/image1108.bin,0,1 +10558805,1335,assets/images/split/image1109.bin,0,1 +10560140,1333,assets/images/split/image1110.bin,0,1 +10561473,998,assets/images/split/image1111.bin,0,1 +10562471,1200,assets/images/split/image1112.bin,0,1 +10563671,1325,assets/images/split/image1113.bin,0,1 +10564996,1333,assets/images/split/image1114.bin,0,1 +10566329,1132,assets/images/split/image1115.bin,0,1 +10567461,1242,assets/images/split/image1116.bin,0,1 +10568703,1029,assets/images/split/image1117.bin,0,1 +10569732,1281,assets/images/split/image1118.bin,0,1 +10571013,1413,assets/images/split/image1119.bin,0,1 +10572426,698,assets/images/split/image1120.bin,0,1 +10573124,672,assets/images/split/image1121.bin,0,1 +10573796,796,assets/images/split/image1122.bin,0,1 +10574592,412,assets/images/split/image1123.bin,0,1 +10575004,216,assets/images/split/image1124.bin,0,1 +10575220,1832,assets/images/split/image1125.bin,0,1 +10577052,1197,assets/images/split/image1126.bin,0,1 +10578249,805,assets/images/split/image1127.bin,0,1 +10579054,1260,assets/images/split/image1128.bin,0,1 +10580314,2049,assets/images/split/image1129.bin,0,1 +10582363,2019,assets/images/split/image1130.bin,0,1 +10584382,1623,assets/images/split/image1131.bin,0,1 +10586005,1074,assets/images/split/image1132.bin,0,1 +10587079,2474,assets/images/split/image1133.bin,0,1 +10589553,895,assets/images/split/image1134.bin,0,1 +10590448,1246,assets/images/split/image1135.bin,0,1 +10591694,1451,assets/images/split/image1136.bin,0,1 +10593145,1548,assets/images/split/image1137.bin,0,1 +10594693,666,assets/images/split/image1138.bin,0,1 +10595359,318,assets/images/split/image1139.bin,0,1 +10595677,489,assets/images/split/image1140.bin,0,1 +10596166,955,assets/images/split/image1141.bin,0,1 +10597121,1086,assets/images/split/image1142.bin,0,1 +10598207,1061,assets/images/split/image1143.bin,0,1 +10599268,688,assets/images/split/image1144.bin,0,1 +10599956,213,assets/images/split/image1145.bin,0,1 +10600169,335,assets/images/split/image1146.bin,0,1 +10600504,297,assets/images/split/image1147.bin,0,1 +10600801,848,assets/images/split/image1148.bin,0,1 +10601649,828,assets/images/split/image1149.bin,0,1 +10602477,852,assets/images/split/image1150.bin,0,1 +10603329,401,assets/images/split/image1151.bin,0,1 +10603730,1226,assets/images/split/image1152.bin,0,1 +10604956,803,assets/images/split/image1153.bin,0,1 +10605759,903,assets/images/split/image1154.bin,0,1 +10606662,1948,assets/images/split/image1155.bin,0,1 +10608610,1798,assets/images/split/image1156.bin,0,1 +10610408,720,assets/images/split/image1157.bin,0,1 +10611128,762,assets/images/split/image1158.bin,0,1 +10611890,1176,assets/images/split/image1159.bin,0,1 +10613066,1183,assets/images/split/image1160.bin,0,1 +10614249,775,assets/images/split/image1161.bin,0,1 +10615024,1353,assets/images/split/image1162.bin,0,1 +10616377,1253,assets/images/split/image1163.bin,0,1 +10617630,1006,assets/images/split/image1164.bin,0,1 +10618636,1031,assets/images/split/image1165.bin,0,1 +10619667,1507,assets/images/split/image1166.bin,0,1 +10621174,1345,assets/images/split/image1167.bin,0,1 +10622519,1331,assets/images/split/image1168.bin,0,1 +10623850,1081,assets/images/split/image1169.bin,0,1 +10624931,1520,assets/images/split/image1170.bin,0,1 +10626451,1457,assets/images/split/image1171.bin,0,1 +10627908,884,assets/images/split/image1172.bin,0,1 +10628792,37,assets/images/split/image1173.bin,0,1 +10628829,676,assets/images/split/image1174.bin,0,1 +10629505,576,assets/images/split/image1175.bin,0,1 +10630081,527,assets/images/split/image1176.bin,0,1 +10630608,873,assets/images/split/image1177.bin,0,1 +10631481,551,assets/images/split/image1178.bin,0,1 +10632032,289,assets/images/split/image1179.bin,0,1 +10632321,617,assets/images/split/image1180.bin,0,1 +10632938,473,assets/images/split/image1181.bin,0,1 +10633411,586,assets/images/split/image1182.bin,0,1 +10633997,539,assets/images/split/image1183.bin,0,1 +10634536,1142,assets/images/split/image1184.bin,0,1 +10635678,1713,assets/images/split/image1185.bin,0,1 +10637391,1382,assets/images/split/image1186.bin,0,1 +10638773,1448,assets/images/split/image1187.bin,0,1 +10640221,1343,assets/images/split/image1188.bin,0,1 +10641564,94,assets/images/split/image1189.bin,0,1 +10641658,746,assets/images/split/image1190.bin,0,1 +10642404,958,assets/images/split/image1191.bin,0,1 +10643362,341,assets/images/split/image1192.bin,0,1 +10643703,198,assets/images/split/image1193.bin,0,1 +10643901,834,assets/images/split/image1194.bin,0,1 +10644735,982,assets/images/split/image1195.bin,0,1 +10645717,809,assets/images/split/image1196.bin,0,1 +10646526,1998,assets/images/split/image1197.bin,0,1 +10648524,1492,assets/images/split/image1198.bin,0,1 +10650016,1569,assets/images/split/image1199.bin,0,1 +10651585,2035,assets/images/split/image1200.bin,0,1 +10653620,1902,assets/images/split/image1201.bin,0,1 +10655522,1964,assets/images/split/image1202.bin,0,1 +10657486,483,assets/images/split/image1203.bin,0,1 +10657969,652,assets/images/split/image1204.bin,0,1 +10658621,722,assets/images/split/image1205.bin,0,1 +10659343,952,assets/images/split/image1206.bin,0,1 +10660295,1348,assets/images/split/image1207.bin,0,1 +10661643,1226,assets/images/split/image1208.bin,0,1 +10662869,1318,assets/images/split/image1209.bin,0,1 +10664187,1397,assets/images/split/image1210.bin,0,1 +10665584,1211,assets/images/split/image1211.bin,0,1 +10666795,1397,assets/images/split/image1212.bin,0,1 +10668192,1490,assets/images/split/image1213.bin,0,1 +10669682,1439,assets/images/split/image1214.bin,0,1 +10671121,317,assets/images/split/image1215.bin,0,1 +10671438,1764,assets/images/split/image1216.bin,0,1 +10673202,1661,assets/images/split/image1217.bin,0,1 +10674863,745,assets/images/split/image1218.bin,0,1 +10675608,883,assets/images/split/image1219.bin,0,1 +10676491,354,assets/images/split/image1220.bin,0,1 +10676845,273,assets/images/split/image1221.bin,0,1 +10677118,195,assets/images/split/image1222.bin,0,1 +10677313,542,assets/images/split/image1223.bin,0,1 +10677855,1082,assets/images/split/image1224.bin,0,1 +10678937,1357,assets/images/split/image1225.bin,0,1 +10680294,653,assets/images/split/image1226.bin,0,1 +10680947,963,assets/images/split/image1227.bin,0,1 +10681910,961,assets/images/split/image1228.bin,0,1 +10682871,940,assets/images/split/image1229.bin,0,1 +10683811,1438,assets/images/split/image1230.bin,0,1 +10685249,841,assets/images/split/image1231.bin,0,1 +10686090,984,assets/images/split/image1232.bin,0,1 +10687074,1107,assets/images/split/image1233.bin,0,1 +10688181,1055,assets/images/split/image1234.bin,0,1 +10689236,1711,assets/images/split/image1235.bin,0,1 +10690947,925,assets/images/split/image1236.bin,0,1 +10691872,768,assets/images/split/image1237.bin,0,1 +10692640,994,assets/images/split/image1238.bin,0,1 +10693634,907,assets/images/split/image1239.bin,0,1 +10694541,810,assets/images/split/image1240.bin,0,1 +10695351,1038,assets/images/split/image1241.bin,0,1 +10696389,819,assets/images/split/image1242.bin,0,1 +10697208,709,assets/images/split/image1243.bin,0,1 +10697917,613,assets/images/split/image1244.bin,0,1 +10698530,876,assets/images/split/image1245.bin,0,1 +10699406,1342,assets/images/split/image1246.bin,0,1 +10700748,1200,assets/images/split/image1247.bin,0,1 +10701948,408,assets/images/split/image1248.bin,0,1 +10702356,1257,assets/images/split/image1249.bin,0,1 +10703613,668,assets/images/split/image1250.bin,0,1 +10704281,739,assets/images/split/image1251.bin,0,1 +10705020,729,assets/images/split/image1252.bin,0,1 +10705749,630,assets/images/split/image1253.bin,0,1 +10706379,739,assets/images/split/image1254.bin,0,1 +10707118,939,assets/images/split/image1255.bin,0,1 +10708057,585,assets/images/split/image1256.bin,0,1 +10708642,218,assets/images/split/image1257.bin,0,1 +10708860,887,assets/images/split/image1258.bin,0,1 +10709747,1351,assets/images/split/image1259.bin,0,1 +10711098,999,assets/images/split/image1260.bin,0,1 +10712097,771,assets/images/split/image1261.bin,0,1 +10712868,498,assets/images/split/image1262.bin,0,1 +10713366,296,assets/images/split/image1263.bin,0,1 +10713662,434,assets/images/split/image1264.bin,0,1 +10714096,260,assets/images/split/image1265.bin,0,1 +10714356,1188,assets/images/split/image1266.bin,0,1 +10715544,830,assets/images/split/image1267.bin,0,1 +10716374,1356,assets/images/split/image1268.bin,0,1 +10717730,1121,assets/images/split/image1269.bin,0,1 +10718851,761,assets/images/split/image1270.bin,0,1 +10719612,1357,assets/images/split/image1271.bin,0,1 +10720969,481,assets/images/split/image1272.bin,0,1 +10721450,551,assets/images/split/image1273.bin,0,1 +10722001,501,assets/images/split/image1274.bin,0,1 +10722502,830,assets/images/split/image1275.bin,0,1 +10723332,726,assets/images/split/image1276.bin,0,1 +10724058,417,assets/images/split/image1277.bin,0,1 +10724475,203,assets/images/split/image1278.bin,0,1 +10724678,1264,assets/images/split/image1279.bin,0,1 +10725942,403,assets/images/split/image1280.bin,0,1 +10726345,880,assets/images/split/image1281.bin,0,1 +10727225,942,assets/images/split/image1282.bin,0,1 +10728167,1048,assets/images/split/image1283.bin,0,1 +10729215,439,assets/images/split/image1284.bin,0,1 +10729654,664,assets/images/split/image1285.bin,0,1 +10730318,2068,assets/images/split/image1286.bin,0,1 +10732386,2058,assets/images/split/image1287.bin,0,1 +10734444,2068,assets/images/split/image1288.bin,0,1 +10736512,2058,assets/images/split/image1289.bin,0,1 +10738570,1548,assets/images/split/image1290.bin,0,1 +10740118,1085,assets/images/split/image1291.bin,0,1 +10741203,1537,assets/images/split/image1292.bin,0,1 +10742740,1548,assets/images/split/image1293.bin,0,1 +10744288,1436,assets/images/split/image1294.bin,0,1 +10745724,1519,assets/images/split/image1295.bin,0,1 +10747243,1518,assets/images/split/image1296.bin,0,1 +10748761,1548,assets/images/split/image1297.bin,0,1 +10750309,1548,assets/images/split/image1298.bin,0,1 +10751857,1185,assets/images/split/image1299.bin,0,1 +10753042,1262,assets/images/split/image1300.bin,0,1 +10754304,1504,assets/images/split/image1301.bin,0,1 +10755808,1548,assets/images/split/image1302.bin,0,1 +10757356,1548,assets/images/split/image1303.bin,0,1 +10758904,1548,assets/images/split/image1304.bin,0,1 +10760452,2068,assets/images/split/image1305.bin,0,1 +10762520,2058,assets/images/split/image1306.bin,0,1 +10764578,2058,assets/images/split/image1307.bin,0,1 +10766636,2058,assets/images/split/image1308.bin,0,1 +10768694,1529,assets/images/split/image1309.bin,0,1 +10770223,1548,assets/images/split/image1310.bin,0,1 +10771771,2022,assets/images/split/image1311.bin,0,1 +10773793,2028,assets/images/split/image1312.bin,0,1 +10775821,2043,assets/images/split/image1313.bin,0,1 +10777864,2058,assets/images/split/image1314.bin,0,1 +10779922,2060,assets/images/split/image1315.bin,0,1 +10781982,2058,assets/images/split/image1316.bin,0,1 +10784040,2058,assets/images/split/image1317.bin,0,1 +10786098,2053,assets/images/split/image1318.bin,0,1 +10788151,1513,assets/images/split/image1319.bin,0,1 +10789664,1493,assets/images/split/image1320.bin,0,1 +10791157,1513,assets/images/split/image1321.bin,0,1 +10792670,1106,assets/images/split/image1322.bin,0,1 +10793776,1548,assets/images/split/image1323.bin,0,1 +10795324,1548,assets/images/split/image1324.bin,0,1 +10796872,2068,assets/images/split/image1325.bin,0,1 +10798940,2068,assets/images/split/image1326.bin,0,1 +10801008,2058,assets/images/split/image1327.bin,0,1 +10803066,2056,assets/images/split/image1328.bin,0,1 +10805122,2058,assets/images/split/image1329.bin,0,1 +10807180,2058,assets/images/split/image1330.bin,0,1 +10809238,2058,assets/images/split/image1331.bin,0,1 +10811296,2058,assets/images/split/image1332.bin,0,1 +10813354,1178,assets/images/split/image1333.bin,0,1 +10814532,1515,assets/images/split/image1334.bin,0,1 +10816047,1335,assets/images/split/image1335.bin,0,1 +10817382,1545,assets/images/split/image1336.bin,0,1 +10818927,1517,assets/images/split/image1337.bin,0,1 +10820444,1286,assets/images/split/image1338.bin,0,1 +10821730,899,assets/images/split/image1339.bin,0,1 +10822629,1269,assets/images/split/image1340.bin,0,1 +10823898,2068,assets/images/split/image1341.bin,0,1 +10825966,2068,assets/images/split/image1342.bin,0,1 +10828034,2058,assets/images/split/image1343.bin,0,1 +10830092,2058,assets/images/split/image1344.bin,0,1 +10832150,2058,assets/images/split/image1345.bin,0,1 +10834208,2058,assets/images/split/image1346.bin,0,1 +10836266,2058,assets/images/split/image1347.bin,0,1 +10838324,2058,assets/images/split/image1348.bin,0,1 +10840382,2068,assets/images/split/image1349.bin,0,1 +10842450,2068,assets/images/split/image1350.bin,0,1 +10844518,2058,assets/images/split/image1351.bin,0,1 +10846576,2058,assets/images/split/image1352.bin,0,1 +10848634,2058,assets/images/split/image1353.bin,0,1 +10850692,2058,assets/images/split/image1354.bin,0,1 +10852750,2058,assets/images/split/image1355.bin,0,1 +10854808,2058,assets/images/split/image1356.bin,0,1 +10856866,789,assets/images/split/image1357.bin,0,1 +10857655,643,assets/images/split/image1358.bin,0,1 +10858298,646,assets/images/split/image1359.bin,0,1 +10858944,1158,assets/images/split/image1360.bin,0,1 +10860102,1526,assets/images/split/image1361.bin,0,1 +10861628,1548,assets/images/split/image1362.bin,0,1 +10863176,1545,assets/images/split/image1363.bin,0,1 +10864721,1223,assets/images/split/image1364.bin,0,1 +10865944,830,assets/images/split/image1365.bin,0,1 +10866774,1063,assets/images/split/image1366.bin,0,1 +10867837,474,assets/images/split/image1367.bin,0,1 +10868311,1555,assets/images/split/image1368.bin,0,1 +10869866,1218,assets/images/split/image1369.bin,0,1 +10871084,1251,assets/images/split/image1370.bin,0,1 +10872335,1107,assets/images/split/image1371.bin,0,1 +10873442,1147,assets/images/split/image1372.bin,0,1 +10874589,636,assets/images/split/image1373.bin,0,1 +10875225,807,assets/images/split/image1374.bin,0,1 +10876032,737,assets/images/split/image1375.bin,0,1 +10876769,823,assets/images/split/image1376.bin,0,1 +10877592,590,assets/images/split/image1377.bin,0,1 +10878182,496,assets/images/split/image1378.bin,0,1 +10878678,819,assets/images/split/image1379.bin,0,1 +10879497,210,assets/images/split/image1380.bin,0,1 +10879707,1211,assets/images/split/image1381.bin,0,1 +10880918,40,assets/images/split/image1382.bin,0,1 +10880958,38,assets/images/split/image1383.bin,0,1 +10880996,826,assets/images/split/image1384.bin,0,1 +10881822,633,assets/images/split/image1385.bin,0,1 +10882455,1538,assets/images/split/image1386.bin,0,1 +10883993,787,assets/images/split/image1387.bin,0,1 +10884780,787,assets/images/split/image1388.bin,0,1 +10885567,1349,assets/images/split/image1389.bin,0,1 +10886916,1023,assets/images/split/image1390.bin,0,1 +10887939,1122,assets/images/split/image1391.bin,0,1 +10889061,1021,assets/images/split/image1392.bin,0,1 +10890082,399,assets/images/split/image1393.bin,0,1 +10890481,590,assets/images/split/image1394.bin,0,1 +10891071,940,assets/images/split/image1395.bin,0,1 +10892011,1423,assets/images/split/image1396.bin,0,1 +10893434,1374,assets/images/split/image1397.bin,0,1 +10894808,1047,assets/images/split/image1398.bin,0,1 +10895855,1222,assets/images/split/image1399.bin,0,1 +10897077,1413,assets/images/split/image1400.bin,0,1 +10898490,1126,assets/images/split/image1401.bin,0,1 +10899616,2383,assets/images/split/image1402.bin,0,1 +10901999,2288,assets/images/split/image1403.bin,0,1 +10904287,2305,assets/images/split/image1404.bin,0,1 +10906592,2349,assets/images/split/image1405.bin,0,1 +10908941,2368,assets/images/split/image1406.bin,0,1 +10911309,2313,assets/images/split/image1407.bin,0,1 +10913622,2368,assets/images/split/image1408.bin,0,1 +10915990,2289,assets/images/split/image1409.bin,0,1 +10918279,452,assets/images/split/image1410.bin,0,1 +10918731,371,assets/images/split/image1411.bin,0,1 +10919102,341,assets/images/split/image1412.bin,0,1 +10919443,785,assets/images/split/image1413.bin,0,1 +10920228,658,assets/images/split/image1414.bin,0,1 +10920886,555,assets/images/split/image1415.bin,0,1 +10921441,509,assets/images/split/image1416.bin,0,1 +10921950,461,assets/images/split/image1417.bin,0,1 +10922411,515,assets/images/split/image1418.bin,0,1 +10922926,642,assets/images/split/image1419.bin,0,1 +10923568,590,assets/images/split/image1420.bin,0,1 +10924158,479,assets/images/split/image1421.bin,0,1 +10924637,532,assets/images/split/image1422.bin,0,1 +10925169,1047,assets/images/split/image1423.bin,0,1 +10926216,500,assets/images/split/image1424.bin,0,1 +10926716,1505,assets/images/split/image1425.bin,0,1 +10928221,93,assets/images/split/image1426.bin,0,1 +10928314,1366,assets/images/split/image1427.bin,0,1 +10929680,353,assets/images/split/image1428.bin,0,1 +10930033,345,assets/images/split/image1429.bin,0,1 +10930378,1215,assets/images/split/image1430.bin,0,1 +10931593,643,assets/images/split/image1431.bin,0,1 +10932236,814,assets/images/split/image1432.bin,0,1 +10933050,308,assets/images/split/image1433.bin,0,1 +10933358,590,assets/images/split/image1434.bin,0,1 +10933948,278,assets/images/split/image1435.bin,0,1 +10934226,240,assets/images/split/image1436.bin,0,1 +10934466,274,assets/images/split/image1437.bin,0,1 +10934740,979,assets/images/split/image1438.bin,0,1 +10935719,979,assets/images/split/image1439.bin,0,1 +10936698,999,assets/images/split/image1440.bin,0,1 +10937697,1098,assets/images/split/image1441.bin,0,1 +10938795,283,assets/images/split/image1442.bin,0,1 +10939078,300,assets/images/split/image1443.bin,0,1 +10939378,373,assets/images/split/image1444.bin,0,1 +10939751,638,assets/images/split/image1445.bin,0,1 +10940389,456,assets/images/split/image1446.bin,0,1 +10940845,737,assets/images/split/image1447.bin,0,1 +10941582,511,assets/images/split/image1448.bin,0,1 +10942093,760,assets/images/split/image1449.bin,0,1 +10942853,667,assets/images/split/image1450.bin,0,1 +10943520,632,assets/images/split/image1451.bin,0,1 +10944152,671,assets/images/split/image1452.bin,0,1 +10944823,593,assets/images/split/image1453.bin,0,1 +10945416,654,assets/images/split/image1454.bin,0,1 +10946070,622,assets/images/split/image1455.bin,0,1 +10946692,722,assets/images/split/image1456.bin,0,1 +10947414,913,assets/images/split/image1457.bin,0,1 +10948327,1074,assets/images/split/image1458.bin,0,1 +10949401,315,assets/images/split/image1459.bin,0,1 +10949716,634,assets/images/split/image1460.bin,0,1 +10950350,623,assets/images/split/image1461.bin,0,1 +10950973,1285,assets/images/split/image1462.bin,0,1 +10952258,1246,assets/images/split/image1463.bin,0,1 +10953504,1202,assets/images/split/image1464.bin,0,1 +10954706,827,assets/images/split/image1465.bin,0,1 +10955533,727,assets/images/split/image1466.bin,0,1 +10956260,438,assets/images/split/image1467.bin,0,1 +10956698,498,assets/images/split/image1468.bin,0,1 +10957196,1699,assets/images/split/image1469.bin,0,1 +10958895,1699,assets/images/split/image1470.bin,0,1 +10960594,639,assets/images/split/image1471.bin,0,1 +10961233,603,assets/images/split/image1472.bin,0,1 +10961836,420,assets/images/split/image1473.bin,0,1 +10962256,1410,assets/images/split/image1474.bin,0,1 +10963666,541,assets/images/split/image1475.bin,0,1 +10964207,1309,assets/images/split/image1476.bin,0,1 +10965516,1272,assets/images/split/image1477.bin,0,1 +10966788,1159,assets/images/split/image1478.bin,0,1 +10967947,872,assets/images/split/image1479.bin,0,1 +10968819,892,assets/images/split/image1480.bin,0,1 +10969711,1930,assets/images/split/image1481.bin,0,1 +10971641,73,assets/images/split/image1482.bin,0,1 +10971714,75,assets/images/split/image1483.bin,0,1 +10971789,51,assets/images/split/image1484.bin,0,1 +10971840,958,assets/images/split/image1485.bin,0,1 +10972798,190,assets/images/split/image1486.bin,0,1 +10972988,424,assets/images/split/image1487.bin,0,1 +10973412,1742,assets/images/split/image1488.bin,0,1 +10975154,1652,assets/images/split/image1489.bin,0,1 +10976806,1798,assets/images/split/image1490.bin,0,1 +10978604,1732,assets/images/split/image1491.bin,0,1 +10980336,1758,assets/images/split/image1492.bin,0,1 +10982094,1792,assets/images/split/image1493.bin,0,1 +10983886,1724,assets/images/split/image1494.bin,0,1 +10985610,1765,assets/images/split/image1495.bin,0,1 +10987375,1643,assets/images/split/image1496.bin,0,1 +10989018,1851,assets/images/split/image1497.bin,0,1 +10990869,998,assets/images/split/image1498.bin,0,1 +10991867,1028,assets/images/split/image1499.bin,0,1 +10992895,925,assets/images/split/image1500.bin,0,1 +10993820,746,assets/images/split/image1501.bin,0,1 +10994566,1396,assets/images/split/image1502.bin,0,1 +10995962,270,assets/images/split/image1503.bin,0,1 +10996232,528,assets/images/split/image1504.bin,0,1 +10996760,351,assets/images/split/image1505.bin,0,1 +10997111,785,assets/images/split/image1506.bin,0,1 +10997896,943,assets/images/split/image1507.bin,0,1 +10998839,1271,assets/images/split/image1508.bin,0,1 +11000110,650,assets/images/split/image1509.bin,0,1 +11000760,564,assets/images/split/image1510.bin,0,1 +11001324,658,assets/images/split/image1511.bin,0,1 +11001982,645,assets/images/split/image1512.bin,0,1 +11002627,1353,assets/images/split/image1513.bin,0,1 +11003980,502,assets/images/split/image1514.bin,0,1 +11004482,12,assets/images/split/image1515.bin,0,1 +11004494,360,assets/images/split/image1516.bin,0,1 +11004854,400,assets/images/split/image1517.bin,0,1 +11005254,592,assets/images/split/image1518.bin,0,1 +11005846,1402,assets/images/split/image1519.bin,0,1 +11007248,1068,assets/images/split/image1520.bin,0,1 +11008316,1279,assets/images/split/image1521.bin,0,1 +11009595,803,assets/images/split/image1522.bin,0,1 +11010398,479,assets/images/split/image1523.bin,0,1 +11010877,1283,assets/images/split/image1524.bin,0,1 +11012160,421,assets/images/split/image1525.bin,0,1 +11012581,748,assets/images/split/image1526.bin,0,1 +11013329,1157,assets/images/split/image1527.bin,0,1 +11014486,1832,assets/images/split/image1528.bin,0,1 +11016318,547,assets/images/split/image1529.bin,0,1 +11016865,971,assets/images/split/image1530.bin,0,1 +11017836,346,assets/images/split/image1531.bin,0,1 +11018182,231,assets/images/split/image1532.bin,0,1 +11018413,374,assets/images/split/image1533.bin,0,1 +11018787,436,assets/images/split/image1534.bin,0,1 +11019223,707,assets/images/split/image1535.bin,0,1 +11019930,680,assets/images/split/image1536.bin,0,1 +11020610,570,assets/images/split/image1537.bin,0,1 +11021180,582,assets/images/split/image1538.bin,0,1 +11021762,576,assets/images/split/image1539.bin,0,1 +11022338,636,assets/images/split/image1540.bin,0,1 +11022974,746,assets/images/split/image1541.bin,0,1 +11023720,1201,assets/images/split/image1542.bin,0,1 +11024921,1140,assets/images/split/image1543.bin,0,1 +11026061,1157,assets/images/split/image1544.bin,0,1 +11027218,2006,assets/images/split/image1545.bin,0,1 +11029224,2177,assets/images/split/image1546.bin,0,1 +11031401,1066,assets/images/split/image1547.bin,0,1 +11032467,1468,assets/images/split/image1548.bin,0,1 +11033935,1836,assets/images/split/image1549.bin,0,1 +11035771,2193,assets/images/split/image1550.bin,0,1 +11037964,1884,assets/images/split/image1551.bin,0,1 +11039848,2268,assets/images/split/image1552.bin,0,1 +11042116,2378,assets/images/split/image1553.bin,0,1 +11044494,2340,assets/images/split/image1554.bin,0,1 +11046834,2416,assets/images/split/image1555.bin,0,1 +11049250,590,assets/images/split/image1556.bin,0,1 +11049840,2468,assets/images/split/image1557.bin,0,1 +11052308,823,assets/images/split/image1558.bin,0,1 +11053131,1544,assets/images/split/image1559.bin,0,1 +11054675,1548,assets/images/split/image1560.bin,0,1 +11056223,2535,assets/images/split/image1561.bin,0,1 +11058758,2524,assets/images/split/image1562.bin,0,1 +11061282,2498,assets/images/split/image1563.bin,0,1 +11063780,504,assets/images/split/image1564.bin,0,1 +11064284,593,assets/images/split/image1565.bin,0,1 +11064877,562,assets/images/split/image1566.bin,0,1 +11065439,507,assets/images/split/image1567.bin,0,1 +11065946,1472,assets/images/split/image1568.bin,0,1 +11067418,1031,assets/images/split/image1569.bin,0,1 +11068449,2537,assets/images/split/image1570.bin,0,1 +11070986,2214,assets/images/split/image1571.bin,0,1 +11073200,2408,assets/images/split/image1572.bin,0,1 +11075608,1477,assets/images/split/image1573.bin,0,1 +11077085,1050,assets/images/split/image1574.bin,0,1 +11078135,902,assets/images/split/image1575.bin,0,1 +11079037,990,assets/images/split/image1576.bin,0,1 +11080027,626,assets/images/split/image1577.bin,0,1 +11080653,917,assets/images/split/image1578.bin,0,1 +11081570,848,assets/images/split/image1579.bin,0,1 +11082418,748,assets/images/split/image1580.bin,0,1 +11083166,804,assets/images/split/image1581.bin,0,1 +11083970,710,assets/images/split/image1582.bin,0,1 +11084680,1822,assets/images/split/image1583.bin,0,1 +11086502,1807,assets/images/split/image1584.bin,0,1 +11088309,857,assets/images/split/image1585.bin,0,1 +11089166,969,assets/images/split/image1586.bin,0,1 +11090135,928,assets/images/split/image1587.bin,0,1 +11091063,875,assets/images/split/image1588.bin,0,1 +11091938,183,assets/images/split/image1589.bin,0,1 +11092121,1275,assets/images/split/image1590.bin,0,1 +11093396,1343,assets/images/split/image1591.bin,0,1 +11094739,1233,assets/images/split/image1592.bin,0,1 +11095972,1805,assets/images/split/image1593.bin,0,1 +11097777,732,assets/images/split/image1594.bin,0,1 +11098509,934,assets/images/split/image1595.bin,0,1 +11099443,411,assets/images/split/image1596.bin,0,1 +11099854,972,assets/images/split/image1597.bin,0,1 +11100826,40,assets/images/split/image1598.bin,0,1 +11100866,53,assets/images/split/image1599.bin,0,1 +11100919,567,assets/images/split/image1600.bin,0,1 +11101486,933,assets/images/split/image1601.bin,0,1 +11102419,910,assets/images/split/image1602.bin,0,1 +11103329,677,assets/images/split/image1603.bin,0,1 +11104006,655,assets/images/split/image1604.bin,0,1 +11104661,12,assets/images/split/image1605.bin,0,1 +11104673,475,assets/images/split/image1606.bin,0,1 +11105148,1883,assets/images/split/image1607.bin,0,1 +11107031,632,assets/images/split/image1608.bin,0,1 +11107663,12,assets/images/split/image1609.bin,0,1 +11107675,983,assets/images/split/image1610.bin,0,1 +11108658,341,assets/images/split/image1611.bin,0,1 +11108999,1019,assets/images/split/image1612.bin,0,1 +11110018,941,assets/images/split/image1613.bin,0,1 +11110959,1436,assets/images/split/image1614.bin,0,1 +11112395,305,assets/images/split/image1615.bin,0,1 +11112700,953,assets/images/split/image1616.bin,0,1 +11113653,1268,assets/images/split/image1617.bin,0,1 +11114921,335,assets/images/split/image1618.bin,0,1 +11115256,949,assets/images/split/image1619.bin,0,1 +11116205,1174,assets/images/split/image1620.bin,0,1 +11117379,366,assets/images/split/image1621.bin,0,1 +11117745,971,assets/images/split/image1622.bin,0,1 +11118716,1255,assets/images/split/image1623.bin,0,1 +11119971,434,assets/images/split/image1624.bin,0,1 +11120405,2144,assets/images/split/image1625.bin,0,1 +11122549,2170,assets/images/split/image1626.bin,0,1 +11124719,1788,assets/images/split/image1627.bin,0,1 +11126507,335,assets/images/split/image1628.bin,0,1 +11126842,762,assets/images/split/image1629.bin,0,1 +11127604,767,assets/images/split/image1630.bin,0,1 +11128371,308,assets/images/split/image1631.bin,0,1 +11128679,724,assets/images/split/image1632.bin,0,1 +11129403,1278,assets/images/split/image1633.bin,0,1 +11130681,1332,assets/images/split/image1634.bin,0,1 +11132013,899,assets/images/split/image1635.bin,0,1 +11132912,874,assets/images/split/image1636.bin,0,1 +11133786,753,assets/images/split/image1637.bin,0,1 +11134539,876,assets/images/split/image1638.bin,0,1 +11135415,314,assets/images/split/image1639.bin,0,1 +11135729,55,assets/images/split/image1640.bin,0,1 +11135784,921,assets/images/split/image1641.bin,0,1 +11136705,745,assets/images/split/image1642.bin,0,1 +11137450,1055,assets/images/split/image1643.bin,0,1 +11138505,812,assets/images/split/image1644.bin,0,1 +11139317,1470,assets/images/split/image1645.bin,0,1 +11140787,717,assets/images/split/image1646.bin,0,1 +11141504,781,assets/images/split/image1647.bin,0,1 +11142285,1486,assets/images/split/image1648.bin,0,1 +11143771,1832,assets/images/split/image1649.bin,0,1 +11145603,1148,assets/images/split/image1650.bin,0,1 +11146751,1522,assets/images/split/image1651.bin,0,1 +11148273,64,assets/images/split/image1652.bin,0,1 +11148337,1724,assets/images/split/image1653.bin,0,1 +11150061,2474,assets/images/split/image1654.bin,0,1 +11152535,2042,assets/images/split/image1655.bin,0,1 +11154577,1022,assets/images/split/image1656.bin,0,1 +11155599,1230,assets/images/split/image1657.bin,0,1 +11156829,700,assets/images/split/image1658.bin,0,1 +11157529,1488,assets/images/split/image1659.bin,0,1 +11159017,1389,assets/images/split/image1660.bin,0,1 +11160406,1937,assets/images/split/image1661.bin,0,1 +11162343,2385,assets/images/split/image1662.bin,0,1 +11164728,1933,assets/images/split/image1663.bin,0,1 +11166661,590,assets/images/split/image1664.bin,0,1 +11167251,781,assets/images/split/image1665.bin,0,1 +11168032,2358,assets/images/split/image1666.bin,0,1 +11170390,1233,assets/images/split/image1667.bin,0,1 +11171623,1358,assets/images/split/image1668.bin,0,1 +11172981,374,assets/images/split/image1669.bin,0,1 +11173355,1441,assets/images/split/image1670.bin,0,1 +11174796,1414,assets/images/split/image1671.bin,0,1 +11176210,12,assets/images/split/image1672.bin,0,1 +11176222,1122,assets/images/split/image1673.bin,0,1 +11177344,1527,assets/images/split/image1674.bin,0,1 +11178871,1844,assets/images/split/image1675.bin,0,1 +11180715,1850,assets/images/split/image1676.bin,0,1 +11182565,1735,assets/images/split/image1677.bin,0,1 +11184300,1945,assets/images/split/image1678.bin,0,1 +11186245,1125,assets/images/split/image1679.bin,0,1 +11187370,1630,assets/images/split/image1680.bin,0,1 +11189000,1179,assets/images/split/image1681.bin,0,1 +11190179,1664,assets/images/split/image1682.bin,0,1 +11191843,2444,assets/images/split/image1683.bin,0,1 +11194287,2336,assets/images/split/image1684.bin,0,1 +11196623,2333,assets/images/split/image1685.bin,0,1 +11198956,2494,assets/images/split/image1686.bin,0,1 +11201450,1647,assets/images/split/image1687.bin,0,1 +11203097,1553,assets/images/split/image1688.bin,0,1 +11204650,1459,assets/images/split/image1689.bin,0,1 +11206109,327,assets/images/split/image1690.bin,0,1 +11206436,1690,assets/images/split/image1691.bin,0,1 +11208126,1333,assets/images/split/image1692.bin,0,1 +11209459,1034,assets/images/split/image1693.bin,0,1 +11210493,796,assets/images/split/image1694.bin,0,1 +11211289,720,assets/images/split/image1695.bin,0,1 +11212009,703,assets/images/split/image1696.bin,0,1 +11212712,2456,assets/images/split/image1697.bin,0,1 +11215168,449,assets/images/split/image1698.bin,0,1 +11215617,692,assets/images/split/image1699.bin,0,1 +11216309,796,assets/images/split/image1700.bin,0,1 +11217105,904,assets/images/split/image1701.bin,0,1 +11218009,1006,assets/images/split/image1702.bin,0,1 +11219015,2267,assets/images/split/image1703.bin,0,1 +11221282,2137,assets/images/split/image1704.bin,0,1 +11223419,874,assets/images/split/image1705.bin,0,1 +11224293,2391,assets/images/split/image1706.bin,0,1 +11226684,2463,assets/images/split/image1707.bin,0,1 +11229147,2512,assets/images/split/image1708.bin,0,1 +11231659,1686,assets/images/split/image1709.bin,0,1 +11233345,446,assets/images/split/image1710.bin,0,1 +11233791,673,assets/images/split/image1711.bin,0,1 +11234464,1368,assets/images/split/image1712.bin,0,1 +11235832,443,assets/images/split/image1713.bin,0,1 +11236275,695,assets/images/split/image1714.bin,0,1 +11236970,643,assets/images/split/image1715.bin,0,1 +11237613,592,assets/images/split/image1716.bin,0,1 +11238205,705,assets/images/split/image1717.bin,0,1 +11238910,1249,assets/images/split/image1718.bin,0,1 +11240159,876,assets/images/split/image1719.bin,0,1 +11241035,775,assets/images/split/image1720.bin,0,1 +11241810,746,assets/images/split/image1721.bin,0,1 +11242556,705,assets/images/split/image1722.bin,0,1 +11243261,2371,assets/images/split/image1723.bin,0,1 +11245632,2243,assets/images/split/image1724.bin,0,1 +11247875,2311,assets/images/split/image1725.bin,0,1 +11250186,12,assets/images/split/image1726.bin,0,1 +11250198,2514,assets/images/split/image1727.bin,0,1 +11252712,2483,assets/images/split/image1728.bin,0,1 +11255195,2448,assets/images/split/image1729.bin,0,1 +11257643,1022,assets/images/split/image1730.bin,0,1 +11258665,1034,assets/images/split/image1731.bin,0,1 +11259699,1095,assets/images/split/image1732.bin,0,1 +11260794,1048,assets/images/split/image1733.bin,0,1 +11261842,2099,assets/images/split/image1734.bin,0,1 +11263941,2025,assets/images/split/image1735.bin,0,1 +11265966,833,assets/images/split/image1736.bin,0,1 +11266799,369,assets/images/split/image1737.bin,0,1 +11267168,1543,assets/images/split/image1738.bin,0,1 +11268711,1421,assets/images/split/image1739.bin,0,1 +11270132,951,assets/images/split/image1740.bin,0,1 +11271083,1024,assets/images/split/image1741.bin,0,1 +11272107,1114,assets/images/split/image1742.bin,0,1 +11273221,1810,assets/images/split/image1743.bin,0,1 +11275031,550,assets/images/split/image1744.bin,0,1 +11275581,1045,assets/images/split/image1745.bin,0,1 +11276626,1333,assets/images/split/image1746.bin,0,1 +11277959,1908,assets/images/split/image1747.bin,0,1 +11279867,1960,assets/images/split/image1748.bin,0,1 +11281827,1901,assets/images/split/image1749.bin,0,1 +11283728,636,assets/images/split/image1750.bin,0,1 +11284364,681,assets/images/split/image1751.bin,0,1 +11285045,267,assets/images/split/image1752.bin,0,1 +11285312,834,assets/images/split/image1753.bin,0,1 +11286146,485,assets/images/split/image1754.bin,0,1 +11286631,507,assets/images/split/image1755.bin,0,1 +11287138,1480,assets/images/split/image1756.bin,0,1 +11288618,923,assets/images/split/image1757.bin,0,1 +11289541,1046,assets/images/split/image1758.bin,0,1 +11290587,1106,assets/images/split/image1759.bin,0,1 +11291693,1064,assets/images/split/image1760.bin,0,1 +11292757,667,assets/images/split/image1761.bin,0,1 +11293424,466,assets/images/split/image1762.bin,0,1 +11293890,1626,assets/images/split/image1763.bin,0,1 +11295516,2404,assets/images/split/image1764.bin,0,1 +11297920,2236,assets/images/split/image1765.bin,0,1 +11300156,2280,assets/images/split/image1766.bin,0,1 +11302436,2538,assets/images/split/image1767.bin,0,1 +11304974,2475,assets/images/split/image1768.bin,0,1 +11307449,2485,assets/images/split/image1769.bin,0,1 +11309934,908,assets/images/split/image1770.bin,0,1 +11310842,1369,assets/images/split/image1771.bin,0,1 +11312211,1639,assets/images/split/image1772.bin,0,1 +11313850,1402,assets/images/split/image1773.bin,0,1 +11315252,1152,assets/images/split/image1774.bin,0,1 +11316404,416,assets/images/split/image1775.bin,0,1 +11316820,246,assets/images/split/image1776.bin,0,1 +11317066,791,assets/images/split/image1777.bin,0,1 +11317857,894,assets/images/split/image1778.bin,0,1 +11318751,1562,assets/images/split/image1779.bin,0,1 +11320313,1205,assets/images/split/image1780.bin,0,1 +11321518,313,assets/images/split/image1781.bin,0,1 +11321831,322,assets/images/split/image1782.bin,0,1 +11322153,401,assets/images/split/image1783.bin,0,1 +11322554,769,assets/images/split/image1784.bin,0,1 +11323323,450,assets/images/split/image1785.bin,0,1 +11323773,871,assets/images/split/image1786.bin,0,1 +11324644,989,assets/images/split/image1787.bin,0,1 +11325633,902,assets/images/split/image1788.bin,0,1 +11326535,830,assets/images/split/image1789.bin,0,1 +11327365,778,assets/images/split/image1790.bin,0,1 +11328143,744,assets/images/split/image1791.bin,0,1 +11328887,832,assets/images/split/image1792.bin,0,1 +11329719,872,assets/images/split/image1793.bin,0,1 +11330591,981,assets/images/split/image1794.bin,0,1 +11331572,987,assets/images/split/image1795.bin,0,1 +11332559,1239,assets/images/split/image1796.bin,0,1 +11333798,1176,assets/images/split/image1797.bin,0,1 +11334974,1181,assets/images/split/image1798.bin,0,1 +11336155,746,assets/images/split/image1799.bin,0,1 +11336901,884,assets/images/split/image1800.bin,0,1 +11337785,1676,assets/images/split/image1801.bin,0,1 +11339461,1838,assets/images/split/image1802.bin,0,1 +11341299,2274,assets/images/split/image1803.bin,0,1 +11343573,2080,assets/images/split/image1804.bin,0,1 +11345653,2209,assets/images/split/image1805.bin,0,1 +11347862,2106,assets/images/split/image1806.bin,0,1 +11349968,502,assets/images/split/image1807.bin,0,1 +11350470,468,assets/images/split/image1808.bin,0,1 +11350938,756,assets/images/split/image1809.bin,0,1 +11351694,318,assets/images/split/image1810.bin,0,1 +11352012,371,assets/images/split/image1811.bin,0,1 +11352383,1656,assets/images/split/image1812.bin,0,1 +11354039,665,assets/images/split/image1813.bin,0,1 +11354704,1443,assets/images/split/image1814.bin,0,1 +11356147,2572,assets/images/split/image1815.bin,0,1 +11358719,2531,assets/images/split/image1816.bin,0,1 +11361250,2537,assets/images/split/image1817.bin,0,1 +11363787,2368,assets/images/split/image1818.bin,0,1 +11366155,2482,assets/images/split/image1819.bin,0,1 +11368637,2406,assets/images/split/image1820.bin,0,1 +11371043,2529,assets/images/split/image1821.bin,0,1 +11373572,2345,assets/images/split/image1822.bin,0,1 +11375917,2376,assets/images/split/image1823.bin,0,1 +11378293,2536,assets/images/split/image1824.bin,0,1 +11380829,2509,assets/images/split/image1825.bin,0,1 +11383338,2468,assets/images/split/image1826.bin,0,1 +11385806,2401,assets/images/split/image1827.bin,0,1 +11388207,2405,assets/images/split/image1828.bin,0,1 +11390612,2313,assets/images/split/image1829.bin,0,1 +11392925,915,assets/images/split/image1830.bin,0,1 +11393840,343,assets/images/split/image1831.bin,0,1 +11394183,651,assets/images/split/image1832.bin,0,1 +11394834,786,assets/images/split/image1833.bin,0,1 +11395620,2521,assets/images/split/image1834.bin,0,1 +11398141,2309,assets/images/split/image1835.bin,0,1 +11400450,2344,assets/images/split/image1836.bin,0,1 +11402794,631,assets/images/split/image1837.bin,0,1 +11403425,636,assets/images/split/image1838.bin,0,1 +11404061,278,assets/images/split/image1839.bin,0,1 +11404339,455,assets/images/split/image1840.bin,0,1 +11404794,260,assets/images/split/image1841.bin,0,1 +11405054,648,assets/images/split/image1842.bin,0,1 +11405702,1565,assets/images/split/image1843.bin,0,1 +11407267,389,assets/images/split/image1844.bin,0,1 +11407656,2137,assets/images/split/image1845.bin,0,1 +11409793,2207,assets/images/split/image1846.bin,0,1 +11412000,2024,assets/images/split/image1847.bin,0,1 +11414024,2470,assets/images/split/image1848.bin,0,1 +11416494,2221,assets/images/split/image1849.bin,0,1 +11418715,2239,assets/images/split/image1850.bin,0,1 +11420954,2345,assets/images/split/image1851.bin,0,1 +11423299,2393,assets/images/split/image1852.bin,0,1 +11425692,2363,assets/images/split/image1853.bin,0,1 +11428055,2288,assets/images/split/image1854.bin,0,1 +11430343,2232,assets/images/split/image1855.bin,0,1 +11432575,2355,assets/images/split/image1856.bin,0,1 +11434930,1243,assets/images/split/image1857.bin,0,1 +11436173,2369,assets/images/split/image1858.bin,0,1 +11438542,1731,assets/images/split/image1859.bin,0,1 +11440273,2116,assets/images/split/image1860.bin,0,1 +11442389,810,assets/images/split/image1861.bin,0,1 +11443199,1546,assets/images/split/image1862.bin,0,1 +11444745,934,assets/images/split/image1863.bin,0,1 +11445679,272,assets/images/split/image1864.bin,0,1 +11445951,694,assets/images/split/image1865.bin,0,1 +11446645,1829,assets/images/split/image1866.bin,0,1 +11448474,1278,assets/images/split/image1867.bin,0,1 +11449752,12,assets/images/split/image1868.bin,0,1 +11449764,2255,assets/images/split/image1869.bin,0,1 +11452019,2378,assets/images/split/image1870.bin,0,1 +11454397,2472,assets/images/split/image1871.bin,0,1 +11456869,1932,assets/images/split/image1872.bin,0,1 +11458801,2526,assets/images/split/image1873.bin,0,1 +11461327,276,assets/images/split/image1874.bin,0,1 +11461603,1407,assets/images/split/image1875.bin,0,1 +11463010,450,assets/images/split/image1876.bin,0,1 +11463460,2004,assets/images/split/image1877.bin,0,1 +11465464,2021,assets/images/split/image1878.bin,0,1 +11467485,2531,assets/images/split/image1879.bin,0,1 +11470016,1981,assets/images/split/image1880.bin,0,1 +11471997,1192,assets/images/split/image1881.bin,0,1 +11473189,186,assets/images/split/image1882.bin,0,1 +11473375,1489,assets/images/split/image1883.bin,0,1 +11474864,2412,assets/images/split/image1884.bin,0,1 +11477276,2170,assets/images/split/image1885.bin,0,1 +11479446,2048,assets/images/split/image1886.bin,0,1 +11481494,1136,assets/images/split/image1887.bin,0,1 +11482630,529,assets/images/split/image1888.bin,0,1 +11483159,522,assets/images/split/image1889.bin,0,1 +11483681,810,assets/images/split/image1890.bin,0,1 +11484491,999,assets/images/split/image1891.bin,0,1 +11485490,611,assets/images/split/image1892.bin,0,1 +11486101,2572,assets/images/split/image1893.bin,0,1 +11488673,1548,assets/images/split/image1894.bin,0,1 +11490221,1520,assets/images/split/image1895.bin,0,1 +11491741,1642,assets/images/split/image1896.bin,0,1 +11493383,802,assets/images/split/image1897.bin,0,1 +11494185,895,assets/images/split/image1898.bin,0,1 +11495080,895,assets/images/split/image1899.bin,0,1 +11495975,788,assets/images/split/image1900.bin,0,1 +11496763,819,assets/images/split/image1901.bin,0,1 +11497582,412,assets/images/split/image1902.bin,0,1 +11497994,562,assets/images/split/image1903.bin,0,1 +11498556,337,assets/images/split/image1904.bin,0,1 +11498893,374,assets/images/split/image1905.bin,0,1 +11499267,1961,assets/images/split/image1906.bin,0,1 +11501228,1946,assets/images/split/image1907.bin,0,1 +11503174,2354,assets/images/split/image1908.bin,0,1 +11505528,2253,assets/images/split/image1909.bin,0,1 +11507781,2254,assets/images/split/image1910.bin,0,1 +11510035,260,assets/images/split/image1911.bin,0,1 +11510295,755,assets/images/split/image1912.bin,0,1 +11511050,1460,assets/images/split/image1913.bin,0,1 +11512510,830,assets/images/split/image1914.bin,0,1 +11513340,1294,assets/images/split/image1915.bin,0,1 +11514634,1530,assets/images/split/image1916.bin,0,1 +11516164,1124,assets/images/split/image1917.bin,0,1 +11517288,12,assets/images/split/image1918.bin,0,1 +11517300,1399,assets/images/split/image1919.bin,0,1 +11518699,1411,assets/images/split/image1920.bin,0,1 +11520110,2212,assets/images/split/image1921.bin,0,1 +11522322,850,assets/images/split/image1922.bin,0,1 +11523172,727,assets/images/split/image1923.bin,0,1 +11523899,859,assets/images/split/image1924.bin,0,1 +11524758,963,assets/images/split/image1925.bin,0,1 +11525721,1143,assets/images/split/image1926.bin,0,1 +11526864,1151,assets/images/split/image1927.bin,0,1 +11528015,657,assets/images/split/image1928.bin,0,1 +11528672,2293,assets/images/split/image1929.bin,0,1 +11530965,2312,assets/images/split/image1930.bin,0,1 +11533277,2515,assets/images/split/image1931.bin,0,1 +11535792,2249,assets/images/split/image1932.bin,0,1 +11538041,672,assets/images/split/image1933.bin,0,1 +11538713,2104,assets/images/split/image1934.bin,0,1 +11540817,2037,assets/images/split/image1935.bin,0,1 +11542854,789,assets/images/split/image1936.bin,0,1 +11543643,1302,assets/images/split/image1937.bin,0,1 +11544945,1131,assets/images/split/image1938.bin,0,1 +11546076,773,assets/images/split/image1939.bin,0,1 +11546849,1246,assets/images/split/image1940.bin,0,1 +11548095,1131,assets/images/split/image1941.bin,0,1 +11549226,800,assets/images/split/image1942.bin,0,1 +11550026,1685,assets/images/split/image1943.bin,0,1 +11551711,2414,assets/images/split/image1944.bin,0,1 +11554125,2461,assets/images/split/image1945.bin,0,1 +11556586,2454,assets/images/split/image1946.bin,0,1 +11559040,910,assets/images/split/image1947.bin,0,1 +11559950,584,assets/images/split/image1948.bin,0,1 +11560534,716,assets/images/split/image1949.bin,0,1 +11561250,121,assets/images/split/image1950.bin,0,1 +11561371,1564,assets/images/split/image1951.bin,0,1 +11562935,1166,assets/images/split/image1952.bin,0,1 +11564101,1370,assets/images/split/image1953.bin,0,1 +11565471,1315,assets/images/split/image1954.bin,0,1 +11566786,1618,assets/images/split/image1955.bin,0,1 +11568404,1347,assets/images/split/image1956.bin,0,1 +11569751,1239,assets/images/split/image1957.bin,0,1 +11570990,1379,assets/images/split/image1958.bin,0,1 +11572369,966,assets/images/split/image1959.bin,0,1 +11573335,1094,assets/images/split/image1960.bin,0,1 +11574429,618,assets/images/split/image1961.bin,0,1 +11575047,1377,assets/images/split/image1962.bin,0,1 +11576424,601,assets/images/split/image1963.bin,0,1 +11577025,1879,assets/images/split/image1964.bin,0,1 +11578904,1810,assets/images/split/image1965.bin,0,1 +11580714,1067,assets/images/split/image1966.bin,0,1 +11581781,370,assets/images/split/image1967.bin,0,1 +11582151,860,assets/images/split/image1968.bin,0,1 +11583011,1017,assets/images/split/image1969.bin,0,1 +11584028,1428,assets/images/split/image1970.bin,0,1 +11585456,2442,assets/images/split/image1971.bin,0,1 +11587898,2315,assets/images/split/image1972.bin,0,1 +11590213,2501,assets/images/split/image1973.bin,0,1 +11592714,2275,assets/images/split/image1974.bin,0,1 +11594989,2377,assets/images/split/image1975.bin,0,1 +11597366,2319,assets/images/split/image1976.bin,0,1 +11599685,2572,assets/images/split/image1977.bin,0,1 +11602257,2400,assets/images/split/image1978.bin,0,1 +11604657,2396,assets/images/split/image1979.bin,0,1 +11607053,435,assets/images/split/image1980.bin,0,1 +11607488,1061,assets/images/split/image1981.bin,0,1 +11608549,1900,assets/images/split/image1982.bin,0,1 +11610449,1909,assets/images/split/image1983.bin,0,1 +11612358,431,assets/images/split/image1984.bin,0,1 +11612789,374,assets/images/split/image1985.bin,0,1 +11613163,704,assets/images/split/image1986.bin,0,1 +11613867,916,assets/images/split/image1987.bin,0,1 +11614783,774,assets/images/split/image1988.bin,0,1 +11615557,1373,assets/images/split/image1989.bin,0,1 +11616930,1342,assets/images/split/image1990.bin,0,1 +11618272,377,assets/images/split/image1991.bin,0,1 +11618649,381,assets/images/split/image1992.bin,0,1 +11619030,439,assets/images/split/image1993.bin,0,1 +11619469,460,assets/images/split/image1994.bin,0,1 +11619929,385,assets/images/split/image1995.bin,0,1 +11620314,240,assets/images/split/image1996.bin,0,1 +11620554,544,assets/images/split/image1997.bin,0,1 +11621098,2456,assets/images/split/image1998.bin,0,1 +11623554,2487,assets/images/split/image1999.bin,0,1 +11626041,2413,assets/images/split/image2000.bin,0,1 +11628454,2236,assets/images/split/image2001.bin,0,1 +11630690,2234,assets/images/split/image2002.bin,0,1 +11632924,2180,assets/images/split/image2003.bin,0,1 +11635104,2340,assets/images/split/image2004.bin,0,1 +11637444,2066,assets/images/split/image2005.bin,0,1 +11639510,630,assets/images/split/image2006.bin,0,1 +11640140,412,assets/images/split/image2007.bin,0,1 +11640552,254,assets/images/split/image2008.bin,0,1 +11640806,689,assets/images/split/image2009.bin,0,1 +11641495,617,assets/images/split/image2010.bin,0,1 +11642112,1896,assets/images/split/image2011.bin,0,1 +11644008,185,assets/images/split/image2012.bin,0,1 +11644193,228,assets/images/split/image2013.bin,0,1 +11644421,321,assets/images/split/image2014.bin,0,1 +11644742,783,assets/images/split/image2015.bin,0,1 +11645525,320,assets/images/split/image2016.bin,0,1 +11645845,920,assets/images/split/image2017.bin,0,1 +11646765,387,assets/images/split/image2018.bin,0,1 +11647152,303,assets/images/split/image2019.bin,0,1 +11647455,344,assets/images/split/image2020.bin,0,1 +11647799,430,assets/images/split/image2021.bin,0,1 +11648229,469,assets/images/split/image2022.bin,0,1 +11648698,196,assets/images/split/image2023.bin,0,1 +11648894,920,assets/images/split/image2024.bin,0,1 +11649814,703,assets/images/split/image2025.bin,0,1 +11650517,1889,assets/images/split/image2026.bin,0,1 +11652406,286,assets/images/split/image2027.bin,0,1 +11652692,955,assets/images/split/image2028.bin,0,1 +11653647,1620,assets/images/split/image2029.bin,0,1 +11655267,1463,assets/images/split/image2030.bin,0,1 +11656730,1647,assets/images/split/image2031.bin,0,1 +11658377,1731,assets/images/split/image2032.bin,0,1 +11660108,1024,assets/images/split/image2033.bin,0,1 +11661132,776,assets/images/split/image2034.bin,0,1 +11661908,898,assets/images/split/image2035.bin,0,1 +11662806,1444,assets/images/split/image2036.bin,0,1 +11664250,689,assets/images/split/image2037.bin,0,1 +11664939,1089,assets/images/split/image2038.bin,0,1 +11666028,500,assets/images/split/image2039.bin,0,1 +11666528,423,assets/images/split/image2040.bin,0,1 +11666951,2304,assets/images/split/image2041.bin,0,1 +11669255,2036,assets/images/split/image2042.bin,0,1 +11671291,293,assets/images/split/image2043.bin,0,1 +11671584,410,assets/images/split/image2044.bin,0,1 +11671994,1370,assets/images/split/image2045.bin,0,1 +11673364,560,assets/images/split/image2046.bin,0,1 +11673924,782,assets/images/split/image2047.bin,0,1 +11674706,2372,assets/images/split/image2048.bin,0,1 +11677078,641,assets/images/split/image2049.bin,0,1 +11677719,597,assets/images/split/image2050.bin,0,1 +11678316,1105,assets/images/split/image2051.bin,0,1 +11679421,958,assets/images/split/image2052.bin,0,1 +11680379,443,assets/images/split/image2053.bin,0,1 +11680822,1738,assets/images/split/image2054.bin,0,1 +11682560,1963,assets/images/split/image2055.bin,0,1 +11684523,967,assets/images/split/image2056.bin,0,1 +11685490,2418,assets/images/split/image2057.bin,0,1 +11687908,12,assets/images/split/image2058.bin,0,1 +11687920,406,assets/images/split/image2059.bin,0,1 +11688326,635,assets/images/split/image2060.bin,0,1 +11688961,426,assets/images/split/image2061.bin,0,1 +11689387,2433,assets/images/split/image2062.bin,0,1 +11691820,2411,assets/images/split/image2063.bin,0,1 +11694231,2307,assets/images/split/image2064.bin,0,1 +11696538,581,assets/images/split/image2065.bin,0,1 +11697119,303,assets/images/split/image2066.bin,0,1 +11697422,1163,assets/images/split/image2067.bin,0,1 +11698585,762,assets/images/split/image2068.bin,0,1 +11699347,1062,assets/images/split/image2069.bin,0,1 +11700409,1547,assets/images/split/image2070.bin,0,1 +11701956,1211,assets/images/split/image2071.bin,0,1 +11703167,906,assets/images/split/image2072.bin,0,1 +11704073,1119,assets/images/split/image2073.bin,0,1 +11705192,1170,assets/images/split/image2074.bin,0,1 +11706362,783,assets/images/split/image2075.bin,0,1 +11707145,1033,assets/images/split/image2076.bin,0,1 +11708178,918,assets/images/split/image2077.bin,0,1 +11709096,2478,assets/images/split/image2078.bin,0,1 +11711574,1960,assets/images/split/image2079.bin,0,1 +11713534,2226,assets/images/split/image2080.bin,0,1 +11715760,734,assets/images/split/image2081.bin,0,1 +11716494,936,assets/images/split/image2082.bin,0,1 +11717430,1717,assets/images/split/image2083.bin,0,1 +11719147,1578,assets/images/split/image2084.bin,0,1 +11720725,7,assets/images/split/image2085.bin,0,1 +11720732,8,assets/images/split/image2086.bin,0,1 +11720740,1245,assets/images/split/image2087.bin,0,1 +11721985,291,assets/images/split/image2088.bin,0,1 +11722276,943,assets/images/split/image2089.bin,0,1 +11723219,209,assets/images/split/image2090.bin,0,1 +11723428,1157,assets/images/split/image2091.bin,0,1 +11724585,254,assets/images/split/image2092.bin,0,1 +11724839,1061,assets/images/split/image2093.bin,0,1 +11725900,218,assets/images/split/image2094.bin,0,1 +11726118,787,assets/images/split/image2095.bin,0,1 +11726905,120,assets/images/split/image2096.bin,0,1 +11727025,170,assets/images/split/image2097.bin,0,1 +11727195,50,assets/images/split/image2098.bin,0,1 +11727245,971,assets/images/split/image2099.bin,0,1 +11728216,256,assets/images/split/image2100.bin,0,1 +11728472,1196,assets/images/split/image2101.bin,0,1 +11729668,274,assets/images/split/image2102.bin,0,1 +11729942,1365,assets/images/split/image2103.bin,0,1 +11731307,288,assets/images/split/image2104.bin,0,1 +11731595,1459,assets/images/split/image2105.bin,0,1 +11733054,306,assets/images/split/image2106.bin,0,1 +11733360,1517,assets/images/split/image2107.bin,0,1 +11734877,322,assets/images/split/image2108.bin,0,1 +11735199,1451,assets/images/split/image2109.bin,0,1 +11736650,311,assets/images/split/image2110.bin,0,1 +11736961,1408,assets/images/split/image2111.bin,0,1 +11738369,309,assets/images/split/image2112.bin,0,1 +11738678,1318,assets/images/split/image2113.bin,0,1 +11739996,301,assets/images/split/image2114.bin,0,1 +11740297,2297,assets/images/split/image2115.bin,0,1 +11742594,2246,assets/images/split/image2116.bin,0,1 +11744840,2094,assets/images/split/image2117.bin,0,1 +11746934,2245,assets/images/split/image2118.bin,0,1 +11749179,412,assets/images/split/image2119.bin,0,1 +11749591,2299,assets/images/split/image2120.bin,0,1 +11751890,1889,assets/images/split/image2121.bin,0,1 +11753779,1739,assets/images/split/image2122.bin,0,1 +11755518,1778,assets/images/split/image2123.bin,0,1 +11757296,1747,assets/images/split/image2124.bin,0,1 +11759043,1931,assets/images/split/image2125.bin,0,1 +11760974,1852,assets/images/split/image2126.bin,0,1 +11762826,1938,assets/images/split/image2127.bin,0,1 +11764764,1909,assets/images/split/image2128.bin,0,1 +11766673,1149,assets/images/split/image2129.bin,0,1 +11767822,1572,assets/images/split/image2130.bin,0,1 +11769394,1548,assets/images/split/image2131.bin,0,1 +11770942,1548,assets/images/split/image2132.bin,0,1 +11772490,1548,assets/images/split/image2133.bin,0,1 +11774038,1546,assets/images/split/image2134.bin,0,1 +11775584,3015,assets/images/split/image2135.bin,0,1 +11778599,1300,assets/images/split/image2136.bin,0,1 +11779899,1159,assets/images/split/image2137.bin,0,1 +11781058,2557,assets/images/split/image2138.bin,0,1 +11783615,2399,assets/images/split/image2139.bin,0,1 +11786014,1989,assets/images/split/image2140.bin,0,1 +11788003,2215,assets/images/split/image2141.bin,0,1 +11790218,1881,assets/images/split/image2142.bin,0,1 +11792099,1680,assets/images/split/image2143.bin,0,1 +11793779,1636,assets/images/split/image2144.bin,0,1 +11795415,1715,assets/images/split/image2145.bin,0,1 +11797130,2062,assets/images/split/image2146.bin,0,1 +11799192,1951,assets/images/split/image2147.bin,0,1 +11801143,1909,assets/images/split/image2148.bin,0,1 +11803052,1919,assets/images/split/image2149.bin,0,1 +11804971,1721,assets/images/split/image2150.bin,0,1 +11806692,1606,assets/images/split/image2151.bin,0,1 +11808298,1609,assets/images/split/image2152.bin,0,1 +11809907,1620,assets/images/split/image2153.bin,0,1 +11811527,1408,assets/images/split/image2154.bin,0,1 +11812935,1291,assets/images/split/image2155.bin,0,1 +11814226,1285,assets/images/split/image2156.bin,0,1 +11815511,1323,assets/images/split/image2157.bin,0,1 +11816834,2098,assets/images/split/image2158.bin,0,1 +11818932,2023,assets/images/split/image2159.bin,0,1 +11820955,2003,assets/images/split/image2160.bin,0,1 +11822958,1927,assets/images/split/image2161.bin,0,1 +11824885,538,assets/images/split/image2162.bin,0,1 +11825423,744,assets/images/split/image2163.bin,0,1 +11826167,910,assets/images/split/image2164.bin,0,1 +11827077,149,assets/images/split/image2165.bin,0,1 +11827226,643,assets/images/split/image2166.bin,0,1 +11827869,513,assets/images/split/image2167.bin,0,1 +11828382,142,assets/images/split/image2168.bin,0,1 +11828524,1017,assets/images/split/image2169.bin,0,1 +11829541,847,assets/images/split/image2170.bin,0,1 +11830388,1624,assets/images/split/image2171.bin,0,1 +11832012,1140,assets/images/split/image2172.bin,0,1 +11833152,540,assets/images/split/image2173.bin,0,1 +11833692,1321,assets/images/split/image2174.bin,0,1 +11835013,1104,assets/images/split/image2175.bin,0,1 +11836117,1111,assets/images/split/image2176.bin,0,1 +11837228,487,assets/images/split/image2177.bin,0,1 +11837715,1249,assets/images/split/image2178.bin,0,1 +11838964,414,assets/images/split/image2179.bin,0,1 +11839378,644,assets/images/split/image2180.bin,0,1 +11840022,923,assets/images/split/image2181.bin,0,1 +11840945,869,assets/images/split/image2182.bin,0,1 +11841814,1381,assets/images/split/image2183.bin,0,1 +11843195,1537,assets/images/split/image2184.bin,0,1 +11844732,1612,assets/images/split/image2185.bin,0,1 +11846344,1594,assets/images/split/image2186.bin,0,1 +11847938,1605,assets/images/split/image2187.bin,0,1 +11849543,909,assets/images/split/image2188.bin,0,1 +11850452,921,assets/images/split/image2189.bin,0,1 +11851373,1116,assets/images/split/image2190.bin,0,1 +11852489,846,assets/images/split/image2191.bin,0,1 +11853335,1039,assets/images/split/image2192.bin,0,1 +11854374,1067,assets/images/split/image2193.bin,0,1 +11855441,290,assets/images/split/image2194.bin,0,1 +11855731,1509,assets/images/split/image2195.bin,0,1 +11857240,1491,assets/images/split/image2196.bin,0,1 +11858731,1437,assets/images/split/image2197.bin,0,1 +11860168,1387,assets/images/split/image2198.bin,0,1 +11861555,1415,assets/images/split/image2199.bin,0,1 +11862970,1418,assets/images/split/image2200.bin,0,1 +11864388,378,assets/images/split/image2201.bin,0,1 +11864766,1527,assets/images/split/image2202.bin,0,1 +11866293,1526,assets/images/split/image2203.bin,0,1 +11867819,1421,assets/images/split/image2204.bin,0,1 +11869240,1494,assets/images/split/image2205.bin,0,1 +11870734,1514,assets/images/split/image2206.bin,0,1 +11872248,1318,assets/images/split/image2207.bin,0,1 +11873566,491,assets/images/split/image2208.bin,0,1 +11874057,459,assets/images/split/image2209.bin,0,1 +11874516,492,assets/images/split/image2210.bin,0,1 +11875008,1084,assets/images/split/image2211.bin,0,1 +11876092,1090,assets/images/split/image2212.bin,0,1 +11877182,1083,assets/images/split/image2213.bin,0,1 +11878265,1083,assets/images/split/image2214.bin,0,1 +11879348,1718,assets/images/split/image2215.bin,0,1 +11881066,432,assets/images/split/image2216.bin,0,1 +11881498,431,assets/images/split/image2217.bin,0,1 +11881929,433,assets/images/split/image2218.bin,0,1 +11882362,450,assets/images/split/image2219.bin,0,1 +11882812,795,assets/images/split/image2220.bin,0,1 +11883607,820,assets/images/split/image2221.bin,0,1 +11884427,816,assets/images/split/image2222.bin,0,1 +11885243,837,assets/images/split/image2223.bin,0,1 +11886080,455,assets/images/split/image2224.bin,0,1 +11886535,136,assets/images/split/image2225.bin,0,1 +11886671,50,assets/images/split/image2226.bin,0,1 +11886721,84,assets/images/split/image2227.bin,0,1 +11886805,1609,assets/images/split/image2228.bin,0,1 +11888414,1713,assets/images/split/image2229.bin,0,1 +11890127,1717,assets/images/split/image2230.bin,0,1 +11891844,1128,assets/images/split/image2231.bin,0,1 +11892972,186,assets/images/split/image2232.bin,0,1 +11893158,395,assets/images/split/image2233.bin,0,1 +11893553,143,assets/images/split/image2234.bin,0,1 +11893696,735,assets/images/split/image2235.bin,0,1 +11894431,737,assets/images/split/image2236.bin,0,1 +11895168,1027,assets/images/split/image2237.bin,0,1 +11896195,430,assets/images/split/image2238.bin,0,1 +11896625,736,assets/images/split/image2239.bin,0,1 +11897361,2529,assets/images/split/image2240.bin,0,1 +11899890,2547,assets/images/split/image2241.bin,0,1 +11902437,1461,assets/images/split/image2242.bin,0,1 +11903898,1220,assets/images/split/image2243.bin,0,1 +11905118,1112,assets/images/split/image2244.bin,0,1 +11906230,1917,assets/images/split/image2245.bin,0,1 +11908147,3026,assets/images/split/image2246.bin,0,1 +11911173,2511,assets/images/split/image2247.bin,0,1 +11913684,1667,assets/images/split/image2248.bin,0,1 +11915351,880,assets/images/split/image2249.bin,0,1 +11916231,3211,assets/images/split/image2250.bin,0,1 +11919442,1499,assets/images/split/image2251.bin,0,1 +11920941,1508,assets/images/split/image2252.bin,0,1 +11922449,1428,assets/images/split/image2253.bin,0,1 +11923877,1435,assets/images/split/image2254.bin,0,1 +11925312,1042,assets/images/split/image2255.bin,0,1 +11926354,478,assets/images/split/image2256.bin,0,1 +11926832,731,assets/images/split/image2257.bin,0,1 +11927563,811,assets/images/split/image2258.bin,0,1 +11928374,860,assets/images/split/image2259.bin,0,1 +11929234,691,assets/images/split/image2260.bin,0,1 +11929925,2106,assets/images/split/image2261.bin,0,1 +11932031,1438,assets/images/split/image2262.bin,0,1 +11933469,1770,assets/images/split/image2263.bin,0,1 +11935239,426,assets/images/split/image2264.bin,0,1 +11935665,848,assets/images/split/image2265.bin,0,1 +11936513,1179,assets/images/split/image2266.bin,0,1 +11937692,1792,assets/images/split/image2267.bin,0,1 +11939484,1999,assets/images/split/image2268.bin,0,1 +11941483,1995,assets/images/split/image2269.bin,0,1 +11943478,1749,assets/images/split/image2270.bin,0,1 +11945227,1268,assets/images/split/image2271.bin,0,1 +11946495,1197,assets/images/split/image2272.bin,0,1 +11947692,528,assets/images/split/image2273.bin,0,1 +11948220,834,assets/images/split/image2274.bin,0,1 +11949054,167,assets/images/split/image2275.bin,0,1 +11949221,448,assets/images/split/image2276.bin,0,1 +11949669,851,assets/images/split/image2277.bin,0,1 +11950520,1036,assets/images/split/image2278.bin,0,1 +11951556,954,assets/images/split/image2279.bin,0,1 +11952510,1024,assets/images/split/image2280.bin,0,1 +11953534,3646,assets/images/split/image2281.bin,0,1 +11957180,1058,assets/images/split/image2282.bin,0,1 +11958238,1024,assets/images/split/image2283.bin,0,1 +11959262,661,assets/images/split/image2284.bin,0,1 +11959923,1493,assets/images/split/image2285.bin,0,1 +11961416,547,assets/images/split/image2286.bin,0,1 +11961963,600,assets/images/split/image2287.bin,0,1 +11962563,578,assets/images/split/image2288.bin,0,1 +11963141,442,assets/images/split/image2289.bin,0,1 +11963583,467,assets/images/split/image2290.bin,0,1 +11964050,252,assets/images/split/image2291.bin,0,1 +11964302,494,assets/images/split/image2292.bin,0,1 +11964796,442,assets/images/split/image2293.bin,0,1 +11965238,491,assets/images/split/image2294.bin,0,1 +11965729,574,assets/images/split/image2295.bin,0,1 +11966303,1379,assets/images/split/image2296.bin,0,1 +11967682,443,assets/images/split/image2297.bin,0,1 +11968125,397,assets/images/split/image2298.bin,0,1 +11968522,640,assets/images/split/image2299.bin,0,1 +11969162,157,assets/images/split/image2300.bin,0,1 +11969319,788,assets/images/split/image2301.bin,0,1 +11970107,967,assets/images/split/image2302.bin,0,1 +11971074,1377,assets/images/split/image2303.bin,0,1 +11972451,995,assets/images/split/image2304.bin,0,1 +11973446,1247,assets/images/split/image2305.bin,0,1 +11974693,1068,assets/images/split/image2306.bin,0,1 +11975761,1540,assets/images/split/image2307.bin,0,1 +11977301,241,assets/images/split/image2308.bin,0,1 +11977542,823,assets/images/split/image2309.bin,0,1 +11978365,1098,assets/images/split/image2310.bin,0,1 +11979463,1279,assets/images/split/image2311.bin,0,1 +11980742,407,assets/images/split/image2312.bin,0,1 +11981149,767,assets/images/split/image2313.bin,0,1 +11981916,684,assets/images/split/image2314.bin,0,1 +11982600,774,assets/images/split/image2315.bin,0,1 +11983374,996,assets/images/split/image2316.bin,0,1 +11984370,649,assets/images/split/image2317.bin,0,1 +11985019,666,assets/images/split/image2318.bin,0,1 +11985685,1199,assets/images/split/image2319.bin,0,1 +11986884,1087,assets/images/split/image2320.bin,0,1 +11987971,1008,assets/images/split/image2321.bin,0,1 +11988979,1012,assets/images/split/image2322.bin,0,1 +11989991,1055,assets/images/split/image2323.bin,0,1 +11991046,966,assets/images/split/image2324.bin,0,1 +11992012,1053,assets/images/split/image2325.bin,0,1 +11993065,720,assets/images/split/image2326.bin,0,1 +11993785,659,assets/images/split/image2327.bin,0,1 +11994444,998,assets/images/split/image2328.bin,0,1 +11995442,526,assets/images/split/image2329.bin,0,1 +11995968,887,assets/images/split/image2330.bin,0,1 +11996855,923,assets/images/split/image2331.bin,0,1 +11997778,1308,assets/images/split/image2332.bin,0,1 +11999086,690,assets/images/split/image2333.bin,0,1 +11999776,1284,assets/images/split/image2334.bin,0,1 +12001060,1453,assets/images/split/image2335.bin,0,1 +12002513,739,assets/images/split/image2336.bin,0,1 +12003252,1023,assets/images/split/image2337.bin,0,1 +12004275,423,assets/images/split/image2338.bin,0,1 +12004698,706,assets/images/split/image2339.bin,0,1 +12005404,237,assets/images/split/image2340.bin,0,1 +12005641,722,assets/images/split/image2341.bin,0,1 +12006363,1284,assets/images/split/image2342.bin,0,1 +12007647,1085,assets/images/split/image2343.bin,0,1 +12008732,1049,assets/images/split/image2344.bin,0,1 +12009781,693,assets/images/split/image2345.bin,0,1 +12010474,1548,assets/images/split/image2346.bin,0,1 +12012022,669,assets/images/split/image2347.bin,0,1 +12012691,1262,assets/images/split/image2348.bin,0,1 +12013953,1265,assets/images/split/image2349.bin,0,1 +12015218,566,assets/images/split/image2350.bin,0,1 +12015784,852,assets/images/split/image2351.bin,0,1 +12016636,654,assets/images/split/image2352.bin,0,1 +12017290,1018,assets/images/split/image2353.bin,0,1 +12018308,1234,assets/images/split/image2354.bin,0,1 +12019542,1412,assets/images/split/image2355.bin,0,1 +12020954,1022,assets/images/split/image2356.bin,0,1 +12021976,1195,assets/images/split/image2357.bin,0,1 +12023171,1140,assets/images/split/image2358.bin,0,1 +12024311,1136,assets/images/split/image2359.bin,0,1 +12025447,1088,assets/images/split/image2360.bin,0,1 +12026535,1228,assets/images/split/image2361.bin,0,1 +12027763,1231,assets/images/split/image2362.bin,0,1 +12028994,1191,assets/images/split/image2363.bin,0,1 +12030185,394,assets/images/split/image2364.bin,0,1 +12030579,422,assets/images/split/image2365.bin,0,1 +12031001,330,assets/images/split/image2366.bin,0,1 +12031331,899,assets/images/split/image2367.bin,0,1 +12032230,508,assets/images/split/image2368.bin,0,1 +12032738,389,assets/images/split/image2369.bin,0,1 +12033127,977,assets/images/split/image2370.bin,0,1 +12034104,1204,assets/images/split/image2371.bin,0,1 +12035308,1397,assets/images/split/image2372.bin,0,1 +12036705,1037,assets/images/split/image2373.bin,0,1 +12037742,2035,assets/images/split/image2374.bin,0,1 +12039777,1581,assets/images/split/image2375.bin,0,1 +12041358,780,assets/images/split/image2376.bin,0,1 +12042138,1046,assets/images/split/image2377.bin,0,1 +12043184,1092,assets/images/split/image2378.bin,0,1 +12044276,426,assets/images/split/image2379.bin,0,1 +12044702,545,assets/images/split/image2380.bin,0,1 +12045247,1608,assets/images/split/image2381.bin,0,1 +12046855,1056,assets/images/split/image2382.bin,0,1 +12047911,1021,assets/images/split/image2383.bin,0,1 +12048932,1027,assets/images/split/image2384.bin,0,1 +12049959,1032,assets/images/split/image2385.bin,0,1 +12050991,1109,assets/images/split/image2386.bin,0,1 +12052100,1020,assets/images/split/image2387.bin,0,1 +12053120,1032,assets/images/split/image2388.bin,0,1 +12054152,787,assets/images/split/image2389.bin,0,1 +12054939,813,assets/images/split/image2390.bin,0,1 +12055752,635,assets/images/split/image2391.bin,0,1 +12056387,693,assets/images/split/image2392.bin,0,1 +12057080,1306,assets/images/split/image2393.bin,0,1 +12058386,996,assets/images/split/image2394.bin,0,1 +12059382,659,assets/images/split/image2395.bin,0,1 +12060041,908,assets/images/split/image2396.bin,0,1 +12060949,1171,assets/images/split/image2397.bin,0,1 +12062120,790,assets/images/split/image2398.bin,0,1 +12062910,730,assets/images/split/image2399.bin,0,1 +12063640,694,assets/images/split/image2400.bin,0,1 +12064334,772,assets/images/split/image2401.bin,0,1 +12065106,654,assets/images/split/image2402.bin,0,1 +12065760,895,assets/images/split/image2403.bin,0,1 +12066655,1548,assets/images/split/image2404.bin,0,1 +12068203,1548,assets/images/split/image2405.bin,0,1 +12069751,958,assets/images/split/image2406.bin,0,1 +12070709,1548,assets/images/split/image2407.bin,0,1 +12072257,596,assets/images/split/image2408.bin,0,1 +12072853,1225,assets/images/split/image2409.bin,0,1 +12074078,1548,assets/images/split/image2410.bin,0,1 +12075626,1599,assets/images/split/image2411.bin,0,1 +12077225,1521,assets/images/split/image2412.bin,0,1 +12078746,1791,assets/images/split/image2413.bin,0,1 +12080537,1594,assets/images/split/image2414.bin,0,1 +12082131,746,assets/images/split/image2415.bin,0,1 +12082877,1055,assets/images/split/image2416.bin,0,1 +12083932,829,assets/images/split/image2417.bin,0,1 +12084761,933,assets/images/split/image2418.bin,0,1 +12085694,814,assets/images/split/image2419.bin,0,1 +12086508,1018,assets/images/split/image2420.bin,0,1 +12087526,865,assets/images/split/image2421.bin,0,1 +12088391,1818,assets/images/split/image2422.bin,0,1 +12090209,1940,assets/images/split/image2423.bin,0,1 +12092149,1698,assets/images/split/image2424.bin,0,1 +12093847,545,assets/images/split/image2425.bin,0,1 +12094392,1016,assets/images/split/image2426.bin,0,1 +12095408,796,assets/images/split/image2427.bin,0,1 +12096204,497,assets/images/split/image2428.bin,0,1 +12096701,194,assets/images/split/image2429.bin,0,1 +12096895,522,assets/images/split/image2430.bin,0,1 +12097417,1481,assets/images/split/image2431.bin,0,1 +12098898,171,assets/images/split/image2432.bin,0,1 +12099069,310,assets/images/split/image2433.bin,0,1 +12099379,854,assets/images/split/image2434.bin,0,1 +12100233,785,assets/images/split/image2435.bin,0,1 +12101018,1485,assets/images/split/image2436.bin,0,1 +12102503,481,assets/images/split/image2437.bin,0,1 +12102984,851,assets/images/split/image2438.bin,0,1 +12103835,775,assets/images/split/image2439.bin,0,1 +12104610,378,assets/images/split/image2440.bin,0,1 +12104988,1465,assets/images/split/image2441.bin,0,1 +12106453,828,assets/images/split/image2442.bin,0,1 +12107281,884,assets/images/split/image2443.bin,0,1 +12108165,1013,assets/images/split/image2444.bin,0,1 +12109178,1132,assets/images/split/image2445.bin,0,1 +12110310,770,assets/images/split/image2446.bin,0,1 +12111080,1190,assets/images/split/image2447.bin,0,1 +12112270,945,assets/images/split/image2448.bin,0,1 +12113215,681,assets/images/split/image2449.bin,0,1 +12113896,547,assets/images/split/image2450.bin,0,1 +12114443,165,assets/images/split/image2451.bin,0,1 +12114608,1170,assets/images/split/image2452.bin,0,1 +12115778,196,assets/images/split/image2453.bin,0,1 +12115974,444,assets/images/split/image2454.bin,0,1 +12116418,1081,assets/images/split/image2455.bin,0,1 +12117499,764,assets/images/split/image2456.bin,0,1 +12118263,776,assets/images/split/image2457.bin,0,1 +12119039,85,assets/images/split/image2458.bin,0,1 +12119124,527,assets/images/split/image2459.bin,0,1 +12119651,268,assets/images/split/image2460.bin,0,1 +12119919,369,assets/images/split/image2461.bin,0,1 +12120288,942,assets/images/split/image2462.bin,0,1 +12121230,1812,assets/images/split/image2463.bin,0,1 +12123042,182,assets/images/split/image2464.bin,0,1 +12123224,225,assets/images/split/image2465.bin,0,1 +12123449,531,assets/images/split/image2466.bin,0,1 +12123980,624,assets/images/split/image2467.bin,0,1 +12124604,1383,assets/images/split/image2468.bin,0,1 +12125987,1267,assets/images/split/image2469.bin,0,1 +12127254,346,assets/images/split/image2470.bin,0,1 +12127600,418,assets/images/split/image2471.bin,0,1 +12128018,594,assets/images/split/image2472.bin,0,1 +12128612,648,assets/images/split/image2473.bin,0,1 +12129260,859,assets/images/split/image2474.bin,0,1 +12130119,1300,assets/images/split/image2475.bin,0,1 +12131419,566,assets/images/split/image2476.bin,0,1 +12131985,2104,assets/images/split/image2477.bin,0,1 +12134089,940,assets/images/split/image2478.bin,0,1 +12135029,856,assets/images/split/image2479.bin,0,1 +12135885,756,assets/images/split/image2480.bin,0,1 +12136641,446,assets/images/split/image2481.bin,0,1 +12137087,370,assets/images/split/image2482.bin,0,1 +12137457,845,assets/images/split/image2483.bin,0,1 +12138302,1370,assets/images/split/image2484.bin,0,1 +12139672,1427,assets/images/split/image2485.bin,0,1 +12141099,738,assets/images/split/image2486.bin,0,1 +12141837,591,assets/images/split/image2487.bin,0,1 +12142428,731,assets/images/split/image2488.bin,0,1 +12143159,1263,assets/images/split/image2489.bin,0,1 +12144422,1232,assets/images/split/image2490.bin,0,1 +12145654,861,assets/images/split/image2491.bin,0,1 +12146515,913,assets/images/split/image2492.bin,0,1 +12147428,15,assets/images/split/image2493.bin,0,1 +12147443,1362,assets/images/split/image2494.bin,0,1 +12148805,472,assets/images/split/image2495.bin,0,1 +12149277,1293,assets/images/split/image2496.bin,0,1 +12150570,1448,assets/images/split/image2497.bin,0,1 +12152018,1239,assets/images/split/image2498.bin,0,1 +12153257,906,assets/images/split/image2499.bin,0,1 +12154163,739,assets/images/split/image2500.bin,0,1 +12154902,1130,assets/images/split/image2501.bin,0,1 +12156032,1071,assets/images/split/image2502.bin,0,1 +12157103,913,assets/images/split/image2503.bin,0,1 +12158016,2328,assets/images/split/image2504.bin,0,1 +12160344,2220,assets/images/split/image2505.bin,0,1 +12162564,2340,assets/images/split/image2506.bin,0,1 +12164904,2443,assets/images/split/image2507.bin,0,1 +12167347,2491,assets/images/split/image2508.bin,0,1 +12169838,2459,assets/images/split/image2509.bin,0,1 +12172297,1469,assets/images/split/image2510.bin,0,1 +12173766,1030,assets/images/split/image2511.bin,0,1 +12174796,1065,assets/images/split/image2512.bin,0,1 +12175861,1129,assets/images/split/image2513.bin,0,1 +12176990,1111,assets/images/split/image2514.bin,0,1 +12178101,892,assets/images/split/image2515.bin,0,1 +12178993,1333,assets/images/split/image2516.bin,0,1 +12180326,1897,assets/images/split/image2517.bin,0,1 +12182223,1968,assets/images/split/image2518.bin,0,1 +12184191,1943,assets/images/split/image2519.bin,0,1 +12186134,1780,assets/images/split/image2520.bin,0,1 +12187914,1503,assets/images/split/image2521.bin,0,1 +12189417,1863,assets/images/split/image2522.bin,0,1 +12191280,2095,assets/images/split/image2523.bin,0,1 +12193375,2442,assets/images/split/image2524.bin,0,1 +12195817,2330,assets/images/split/image2525.bin,0,1 +12198147,1781,assets/images/split/image2526.bin,0,1 +12199928,980,assets/images/split/image2527.bin,0,1 +12200908,1106,assets/images/split/image2528.bin,0,1 +12202014,1255,assets/images/split/image2529.bin,0,1 +12203269,2055,assets/images/split/image2530.bin,0,1 +12205324,1961,assets/images/split/image2531.bin,0,1 +12207285,1695,assets/images/split/image2532.bin,0,1 +12208980,2253,assets/images/split/image2533.bin,0,1 +12211233,1786,assets/images/split/image2534.bin,0,1 +12213019,774,assets/images/split/image2535.bin,0,1 +12213793,1099,assets/images/split/image2536.bin,0,1 +12214892,1042,assets/images/split/image2537.bin,0,1 +12215934,2027,assets/images/split/image2538.bin,0,1 +12217961,2341,assets/images/split/image2539.bin,0,1 +12220302,2393,assets/images/split/image2540.bin,0,1 +12222695,2465,assets/images/split/image2541.bin,0,1 +12225160,2384,assets/images/split/image2542.bin,0,1 +12227544,1918,assets/images/split/image2543.bin,0,1 +12229462,2606,assets/images/split/image2544.bin,0,1 +12232068,2251,assets/images/split/image2545.bin,0,1 +12234319,2334,assets/images/split/image2546.bin,0,1 +12236653,2319,assets/images/split/image2547.bin,0,1 +12238972,2280,assets/images/split/image2548.bin,0,1 +12241252,1961,assets/images/split/image2549.bin,0,1 +12243213,2528,assets/images/split/image2550.bin,0,1 +12245741,2235,assets/images/split/image2551.bin,0,1 +12247976,2323,assets/images/split/image2552.bin,0,1 +12250299,1717,assets/images/split/image2553.bin,0,1 +12252016,2109,assets/images/split/image2554.bin,0,1 +12254125,2141,assets/images/split/image2555.bin,0,1 +12256266,2112,assets/images/split/image2556.bin,0,1 +12258378,1578,assets/images/split/image2557.bin,0,1 +12259956,1655,assets/images/split/image2558.bin,0,1 +12261611,1031,assets/images/split/image2559.bin,0,1 +12262642,2231,assets/images/split/image2560.bin,0,1 +12264873,2285,assets/images/split/image2561.bin,0,1 +12267158,2356,assets/images/split/image2562.bin,0,1 +12269514,1840,assets/images/split/image2563.bin,0,1 +12271354,1793,assets/images/split/image2564.bin,0,1 +12273147,1925,assets/images/split/image2565.bin,0,1 +12275072,2146,assets/images/split/image2566.bin,0,1 +12277218,1945,assets/images/split/image2567.bin,0,1 +12279163,2158,assets/images/split/image2568.bin,0,1 +12281321,1819,assets/images/split/image2569.bin,0,1 +12283140,1523,assets/images/split/image2570.bin,0,1 +12284663,1843,assets/images/split/image2571.bin,0,1 +12286506,1880,assets/images/split/image2572.bin,0,1 +12288386,2599,assets/images/split/image2573.bin,0,1 +12290985,2724,assets/images/split/image2574.bin,0,1 +12293709,1889,assets/images/split/image2575.bin,0,1 +12295598,1780,assets/images/split/image2576.bin,0,1 +12297378,1586,assets/images/split/image2577.bin,0,1 +12298964,1675,assets/images/split/image2578.bin,0,1 +12300639,2429,assets/images/split/image2579.bin,0,1 +12303068,2606,assets/images/split/image2580.bin,0,1 +12305674,2456,assets/images/split/image2581.bin,0,1 +12308130,2478,assets/images/split/image2582.bin,0,1 +12310608,2469,assets/images/split/image2583.bin,0,1 +12313077,2221,assets/images/split/image2584.bin,0,1 +12315298,2456,assets/images/split/image2585.bin,0,1 +12317754,2076,assets/images/split/image2586.bin,0,1 +12319830,2286,assets/images/split/image2587.bin,0,1 +12322116,2013,assets/images/split/image2588.bin,0,1 +12324129,2180,assets/images/split/image2589.bin,0,1 +12326309,2425,assets/images/split/image2590.bin,0,1 +12328734,2148,assets/images/split/image2591.bin,0,1 +12330882,2335,assets/images/split/image2592.bin,0,1 +12333217,2230,assets/images/split/image2593.bin,0,1 +12335447,1880,assets/images/split/image2594.bin,0,1 +12337327,2099,assets/images/split/image2595.bin,0,1 +12339426,2670,assets/images/split/image2596.bin,0,1 +12342096,2103,assets/images/split/image2597.bin,0,1 +12344199,2278,assets/images/split/image2598.bin,0,1 +12346477,1321,assets/images/split/image2599.bin,0,1 +12347798,1310,assets/images/split/image2600.bin,0,1 +12349108,1412,assets/images/split/image2601.bin,0,1 +12350520,1446,assets/images/split/image2602.bin,0,1 +12351966,1407,assets/images/split/image2603.bin,0,1 +12353373,1533,assets/images/split/image2604.bin,0,1 +12354906,1226,assets/images/split/image2605.bin,0,1 +12356132,1547,assets/images/split/image2606.bin,0,1 +12357679,1382,assets/images/split/image2607.bin,0,1 +12359061,1452,assets/images/split/image2608.bin,0,1 +12360513,1157,assets/images/split/image2609.bin,0,1 +12361670,1764,assets/images/split/image2610.bin,0,1 +12363434,1290,assets/images/split/image2611.bin,0,1 +12364724,1384,assets/images/split/image2612.bin,0,1 +12366108,1558,assets/images/split/image2613.bin,0,1 +12367666,1439,assets/images/split/image2614.bin,0,1 +12369105,1428,assets/images/split/image2615.bin,0,1 +12370533,1214,assets/images/split/image2616.bin,0,1 +12371747,1356,assets/images/split/image2617.bin,0,1 +12373103,1299,assets/images/split/image2618.bin,0,1 +12374402,1853,assets/images/split/image2619.bin,0,1 +12376255,1762,assets/images/split/image2620.bin,0,1 +12378017,1780,assets/images/split/image2621.bin,0,1 +12379797,1758,assets/images/split/image2622.bin,0,1 +12381555,1647,assets/images/split/image2623.bin,0,1 +12383202,1732,assets/images/split/image2624.bin,0,1 +12384934,1435,assets/images/split/image2625.bin,0,1 +12386369,1882,assets/images/split/image2626.bin,0,1 +12388251,931,assets/images/split/image2627.bin,0,1 +12389182,1658,assets/images/split/image2628.bin,0,1 +12390840,1778,assets/images/split/image2629.bin,0,1 +12392618,650,assets/images/split/image2630.bin,0,1 +12393268,1346,assets/images/split/image2631.bin,0,1 +12394614,53,assets/images/split/image2632.bin,0,1 +12394667,1208,assets/images/split/image2633.bin,0,1 +12395875,1315,assets/images/split/image2634.bin,0,1 +12397190,1319,assets/images/split/image2635.bin,0,1 +12398509,1530,assets/images/split/image2636.bin,0,1 +12400039,1556,assets/images/split/image2637.bin,0,1 +12401595,1289,assets/images/split/image2638.bin,0,1 +12402884,1432,assets/images/split/image2639.bin,0,1 +12404316,1467,assets/images/split/image2640.bin,0,1 +12405783,1255,assets/images/split/image2641.bin,0,1 +12407038,1261,assets/images/split/image2642.bin,0,1 +12408299,1043,assets/images/split/image2643.bin,0,1 +12409342,1074,assets/images/split/image2644.bin,0,1 +12410416,1242,assets/images/split/image2645.bin,0,1 +12411658,1300,assets/images/split/image2646.bin,0,1 +12412958,1195,assets/images/split/image2647.bin,0,1 +12414153,1231,assets/images/split/image2648.bin,0,1 +12415384,1362,assets/images/split/image2649.bin,0,1 +12416746,1212,assets/images/split/image2650.bin,0,1 +12417958,1334,assets/images/split/image2651.bin,0,1 +12419292,1551,assets/images/split/image2652.bin,0,1 +12420843,1347,assets/images/split/image2653.bin,0,1 +12422190,1358,assets/images/split/image2654.bin,0,1 +12423548,1213,assets/images/split/image2655.bin,0,1 +12424761,1219,assets/images/split/image2656.bin,0,1 +12425980,1235,assets/images/split/image2657.bin,0,1 +12427215,1161,assets/images/split/image2658.bin,0,1 +12428376,1687,assets/images/split/image2659.bin,0,1 +12430063,1602,assets/images/split/image2660.bin,0,1 +12431665,1383,assets/images/split/image2661.bin,0,1 +12433048,1308,assets/images/split/image2662.bin,0,1 +12434356,1341,assets/images/split/image2663.bin,0,1 +12435697,1389,assets/images/split/image2664.bin,0,1 +12437086,1374,assets/images/split/image2665.bin,0,1 +12438460,1115,assets/images/split/image2666.bin,0,1 +12439575,1445,assets/images/split/image2667.bin,0,1 +12441020,1451,assets/images/split/image2668.bin,0,1 +12442471,1364,assets/images/split/image2669.bin,0,1 +12443835,1302,assets/images/split/image2670.bin,0,1 +12445137,1407,assets/images/split/image2671.bin,0,1 +12446544,1212,assets/images/split/image2672.bin,0,1 +12447756,160,assets/images/split/image2673.bin,0,1 +12447916,248,assets/images/split/image2674.bin,0,1 +12448164,919,assets/images/split/image2675.bin,0,1 +12449083,188,assets/images/split/image2676.bin,0,1 +12449271,1077,assets/images/split/image2677.bin,0,1 +12450348,2572,assets/images/split/image2678.bin,0,1 +12452920,1845,assets/images/split/image2679.bin,0,1 +12454765,726,assets/images/split/image2680.bin,0,1 +12455491,2270,assets/images/split/image2681.bin,0,1 +12457761,631,assets/images/split/image2682.bin,0,1 +12458392,947,assets/images/split/image2683.bin,0,1 +12459339,948,assets/images/split/image2684.bin,0,1 +12460287,705,assets/images/split/image2685.bin,0,1 +12460992,708,assets/images/split/image2686.bin,0,1 +12461700,2422,assets/images/split/image2687.bin,0,1 +12464122,2504,assets/images/split/image2688.bin,0,1 +12466626,2617,assets/images/split/image2689.bin,0,1 +12469243,2159,assets/images/split/image2690.bin,0,1 +12471402,896,assets/images/split/image2691.bin,0,1 +12472298,1348,assets/images/split/image2692.bin,0,1 +12473646,1299,assets/images/split/image2693.bin,0,1 +12474945,1282,assets/images/split/image2694.bin,0,1 +12476227,1252,assets/images/split/image2695.bin,0,1 +12477479,419,assets/images/split/image2696.bin,0,1 +12477898,513,assets/images/split/image2697.bin,0,1 +12478411,1341,assets/images/split/image2698.bin,0,1 +12479752,8,assets/images/split/image2699.bin,0,1 diff --git a/include/PR/R4300.h b/include/PR/R4300.h new file mode 100644 index 0000000..932694d --- /dev/null +++ b/include/PR/R4300.h @@ -0,0 +1,453 @@ +/************************************************************************** + * * + * Copyright (C) 1995, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/************************************************************************** + * + * $Revision: 1.13 $ + * $Date: 1997/02/11 08:15:34 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/R4300.h,v $ + * + **************************************************************************/ + +#ifndef __R4300_H__ +#define __R4300_H__ + +#include + +/* + * Segment base addresses and sizes + */ +#define KUBASE 0 +#define KUSIZE 0x80000000 +#define K0BASE 0x80000000 +#define K0SIZE 0x20000000 +#define K1BASE 0xA0000000 +#define K1SIZE 0x20000000 +#define K2BASE 0xC0000000 +#define K2SIZE 0x20000000 + +/* + * Exception vectors + */ +#define SIZE_EXCVEC 0x80 /* Size of an exc. vec */ +#define UT_VEC K0BASE /* utlbmiss vector */ +#define R_VEC (K1BASE+0x1fc00000) /* reset vector */ +#define XUT_VEC (K0BASE+0x80) /* extended address tlbmiss */ +#define ECC_VEC (K0BASE+0x100) /* Ecc exception vector */ +#define E_VEC (K0BASE+0x180) /* Gen. exception vector */ + +/* + * Address conversion macros + */ +#ifdef _LANGUAGE_ASSEMBLY + +#define K0_TO_K1(x) ((x)|0xA0000000) /* kseg0 to kseg1 */ +#define K1_TO_K0(x) ((x)&0x9FFFFFFF) /* kseg1 to kseg0 */ +#define K0_TO_PHYS(x) ((x)&0x1FFFFFFF) /* kseg0 to physical */ +#define K1_TO_PHYS(x) ((x)&0x1FFFFFFF) /* kseg1 to physical */ +#define KDM_TO_PHYS(x) ((x)&0x1FFFFFFF) /* direct mapped to physical */ +#define PHYS_TO_K0(x) ((x)|0x80000000) /* physical to kseg0 */ +#define PHYS_TO_K1(x) ((x)|0xA0000000) /* physical to kseg1 */ + +#else /* _LANGUAGE_C */ + +#define K0_TO_K1(x) ((u32)(x)|0xA0000000) /* kseg0 to kseg1 */ +#define K1_TO_K0(x) ((u32)(x)&0x9FFFFFFF) /* kseg1 to kseg0 */ +#define K0_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg0 to physical */ +#define K1_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg1 to physical */ +#define KDM_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* direct mapped to physical */ +#define PHYS_TO_K0(x) ((u32)(x)|0x80000000) /* physical to kseg0 */ +#define PHYS_TO_K1(x) ((u32)(x)|0xA0000000) /* physical to kseg1 */ + +#endif /* _LANGUAGE_ASSEMBLY */ + +/* + * Address predicates + */ +#define IS_KSEG0(x) ((u32)(x) >= K0BASE && (u32)(x) < K1BASE) +#define IS_KSEG1(x) ((u32)(x) >= K1BASE && (u32)(x) < K2BASE) +#define IS_KSEGDM(x) ((u32)(x) >= K0BASE && (u32)(x) < K2BASE) +#define IS_KSEG2(x) ((u32)(x) >= K2BASE && (u32)(x) < KPTE_SHDUBASE) +#define IS_KPTESEG(x) ((u32)(x) >= KPTE_SHDUBASE) +#define IS_KUSEG(x) ((u32)(x) < K0BASE) + +/* + * TLB size constants + */ + +#define NTLBENTRIES 31 /* entry 31 is reserved by rdb */ + +#define TLBHI_VPN2MASK 0xffffe000 +#define TLBHI_VPN2SHIFT 13 +#define TLBHI_PIDMASK 0xff +#define TLBHI_PIDSHIFT 0 +#define TLBHI_NPID 255 /* 255 to fit in 8 bits */ + +#define TLBLO_PFNMASK 0x3fffffc0 +#define TLBLO_PFNSHIFT 6 +#define TLBLO_CACHMASK 0x38 /* cache coherency algorithm */ +#define TLBLO_CACHSHIFT 3 +#define TLBLO_UNCACHED 0x10 /* not cached */ +#define TLBLO_NONCOHRNT 0x18 /* Cacheable non-coherent */ +#define TLBLO_EXLWR 0x28 /* Exclusive write */ +#define TLBLO_D 0x4 /* writeable */ +#define TLBLO_V 0x2 /* valid bit */ +#define TLBLO_G 0x1 /* global access bit */ + +#define TLBINX_PROBE 0x80000000 +#define TLBINX_INXMASK 0x3f +#define TLBINX_INXSHIFT 0 + +#define TLBRAND_RANDMASK 0x3f +#define TLBRAND_RANDSHIFT 0 + +#define TLBWIRED_WIREDMASK 0x3f + +#define TLBCTXT_BASEMASK 0xff800000 +#define TLBCTXT_BASESHIFT 23 +#define TLBCTXT_BASEBITS 9 + +#define TLBCTXT_VPNMASK 0x7ffff0 +#define TLBCTXT_VPNSHIFT 4 + +#define TLBPGMASK_4K 0x0 +#define TLBPGMASK_16K 0x6000 +#define TLBPGMASK_64K 0x1e000 + +/* + * Status register + */ +#define SR_CUMASK 0xf0000000 /* coproc usable bits */ + +#define SR_CU3 0x80000000 /* Coprocessor 3 usable */ +#define SR_CU2 0x40000000 /* Coprocessor 2 usable */ +#define SR_CU1 0x20000000 /* Coprocessor 1 usable */ +#define SR_CU0 0x10000000 /* Coprocessor 0 usable */ +#define SR_RP 0x08000000 /* Reduced power (quarter speed) */ +#define SR_FR 0x04000000 /* MIPS III FP register mode */ +#define SR_RE 0x02000000 /* Reverse endian */ +#define SR_ITS 0x01000000 /* Instruction trace support */ +#define SR_BEV 0x00400000 /* Use boot exception vectors */ +#define SR_TS 0x00200000 /* TLB shutdown */ +#define SR_SR 0x00100000 /* Soft reset occured */ +#define SR_CH 0x00040000 /* Cache hit for last 'cache' op */ +#define SR_CE 0x00020000 /* Create ECC */ +#define SR_DE 0x00010000 /* ECC of parity does not cause error */ + +/* + * Interrupt enable bits + * (NOTE: bits set to 1 enable the corresponding level interrupt) + */ +#define SR_IMASK 0x0000ff00 /* Interrupt mask */ +#define SR_IMASK8 0x00000000 /* mask level 8 */ +#define SR_IMASK7 0x00008000 /* mask level 7 */ +#define SR_IMASK6 0x0000c000 /* mask level 6 */ +#define SR_IMASK5 0x0000e000 /* mask level 5 */ +#define SR_IMASK4 0x0000f000 /* mask level 4 */ +#define SR_IMASK3 0x0000f800 /* mask level 3 */ +#define SR_IMASK2 0x0000fc00 /* mask level 2 */ +#define SR_IMASK1 0x0000fe00 /* mask level 1 */ +#define SR_IMASK0 0x0000ff00 /* mask level 0 */ + +#define SR_IBIT8 0x00008000 /* bit level 8 */ +#define SR_IBIT7 0x00004000 /* bit level 7 */ +#define SR_IBIT6 0x00002000 /* bit level 6 */ +#define SR_IBIT5 0x00001000 /* bit level 5 */ +#define SR_IBIT4 0x00000800 /* bit level 4 */ +#define SR_IBIT3 0x00000400 /* bit level 3 */ +#define SR_IBIT2 0x00000200 /* bit level 2 */ +#define SR_IBIT1 0x00000100 /* bit level 1 */ + +#define SR_IMASKSHIFT 8 + +#define SR_KX 0x00000080 /* extended-addr TLB vec in kernel */ +#define SR_SX 0x00000040 /* xtended-addr TLB vec supervisor */ +#define SR_UX 0x00000020 /* xtended-addr TLB vec in user mode */ +#define SR_KSU_MASK 0x00000018 /* mode mask */ +#define SR_KSU_USR 0x00000010 /* user mode */ +#define SR_KSU_SUP 0x00000008 /* supervisor mode */ +#define SR_KSU_KER 0x00000000 /* kernel mode */ +#define SR_ERL 0x00000004 /* Error level, 1=>cache error */ +#define SR_EXL 0x00000002 /* Exception level, 1=>exception */ +#define SR_IE 0x00000001 /* interrupt enable, 1=>enable */ + +/* + * Cause Register + */ +#define CAUSE_BD 0x80000000 /* Branch delay slot */ +#define CAUSE_CEMASK 0x30000000 /* coprocessor error */ +#define CAUSE_CESHIFT 28 + +/* Interrupt pending bits */ +#define CAUSE_IP8 0x00008000 /* External level 8 pending - COMPARE */ +#define CAUSE_IP7 0x00004000 /* External level 7 pending - INT4 */ +#define CAUSE_IP6 0x00002000 /* External level 6 pending - INT3 */ +#define CAUSE_IP5 0x00001000 /* External level 5 pending - INT2 */ +#define CAUSE_IP4 0x00000800 /* External level 4 pending - INT1 */ +#define CAUSE_IP3 0x00000400 /* External level 3 pending - INT0 */ +#define CAUSE_SW2 0x00000200 /* Software level 2 pending */ +#define CAUSE_SW1 0x00000100 /* Software level 1 pending */ + +#define CAUSE_IPMASK 0x0000FF00 /* Pending interrupt mask */ +#define CAUSE_IPSHIFT 8 + +#define CAUSE_EXCMASK 0x0000007C /* Cause code bits */ + +#define CAUSE_EXCSHIFT 2 + +/* Cause register exception codes */ + +#define EXC_CODE(x) ((x)<<2) + +/* Hardware exception codes */ +#define EXC_INT EXC_CODE(0) /* interrupt */ +#define EXC_MOD EXC_CODE(1) /* TLB mod */ +#define EXC_RMISS EXC_CODE(2) /* Read TLB Miss */ +#define EXC_WMISS EXC_CODE(3) /* Write TLB Miss */ +#define EXC_RADE EXC_CODE(4) /* Read Address Error */ +#define EXC_WADE EXC_CODE(5) /* Write Address Error */ +#define EXC_IBE EXC_CODE(6) /* Instruction Bus Error */ +#define EXC_DBE EXC_CODE(7) /* Data Bus Error */ +#define EXC_SYSCALL EXC_CODE(8) /* SYSCALL */ +#define EXC_BREAK EXC_CODE(9) /* BREAKpoint */ +#define EXC_II EXC_CODE(10) /* Illegal Instruction */ +#define EXC_CPU EXC_CODE(11) /* CoProcessor Unusable */ +#define EXC_OV EXC_CODE(12) /* OVerflow */ +#define EXC_TRAP EXC_CODE(13) /* Trap exception */ +#define EXC_VCEI EXC_CODE(14) /* Virt. Coherency on Inst. fetch */ +#define EXC_FPE EXC_CODE(15) /* Floating Point Exception */ +#define EXC_WATCH EXC_CODE(23) /* Watchpoint reference */ +#define EXC_VCED EXC_CODE(31) /* Virt. Coherency on data read */ + +/* C0_PRID Defines */ +#define C0_IMPMASK 0xff00 +#define C0_IMPSHIFT 8 +#define C0_REVMASK 0xff +#define C0_MAJREVMASK 0xf0 +#define C0_MAJREVSHIFT 4 +#define C0_MINREVMASK 0xf + +/* + * Coprocessor 0 operations + */ +#define C0_READI 0x1 /* read ITLB entry addressed by C0_INDEX */ +#define C0_WRITEI 0x2 /* write ITLB entry addressed by C0_INDEX */ +#define C0_WRITER 0x6 /* write ITLB entry addressed by C0_RAND */ +#define C0_PROBE 0x8 /* probe for ITLB entry addressed by TLBHI */ +#define C0_RFE 0x10 /* restore for exception */ + +/* + * 'cache' instruction definitions + */ + +/* Target cache */ +#define CACH_PI 0x0 /* specifies primary inst. cache */ +#define CACH_PD 0x1 /* primary data cache */ +#define CACH_SI 0x2 /* secondary instruction cache */ +#define CACH_SD 0x3 /* secondary data cache */ + +/* Cache operations */ +#define C_IINV 0x0 /* index invalidate (inst, 2nd inst) */ +#define C_IWBINV 0x0 /* index writeback inval (d, sd) */ +#define C_ILT 0x4 /* index load tag (all) */ +#define C_IST 0x8 /* index store tag (all) */ +#define C_CDX 0xc /* create dirty exclusive (d, sd) */ +#define C_HINV 0x10 /* hit invalidate (all) */ +#define C_HWBINV 0x14 /* hit writeback inv. (d, sd) */ +#define C_FILL 0x14 /* fill (i) */ +#define C_HWB 0x18 /* hit writeback (i, d, sd) */ +#define C_HSV 0x1c /* hit set virt. (si, sd) */ + +/* + * Cache size definitions + */ +#define ICACHE_SIZE 0x4000 /* 16K */ +#define ICACHE_LINESIZE 32 /* 8 words */ +#define ICACHE_LINEMASK (ICACHE_LINESIZE-1) + +#define DCACHE_SIZE 0x2000 /* 8K */ +#define DCACHE_LINESIZE 16 /* 4 words */ +#define DCACHE_LINEMASK (DCACHE_LINESIZE-1) + +/* + * C0_CONFIG register definitions + */ +#define CONFIG_CM 0x80000000 /* 1 == Master-Checker enabled */ +#define CONFIG_EC 0x70000000 /* System Clock ratio */ +#define CONFIG_EC_1_1 0x6 /* System Clock ratio 1 :1 */ +#define CONFIG_EC_3_2 0x7 /* System Clock ratio 1.5 :1 */ +#define CONFIG_EC_2_1 0x0 /* System Clock ratio 2 :1 */ +#define CONFIG_EC_3_1 0x1 /* System Clock ratio 3 :1 */ +#define CONFIG_EP 0x0f000000 /* Transmit Data Pattern */ +#define CONFIG_SB 0x00c00000 /* Secondary cache block size */ + +#define CONFIG_SS 0x00200000 /* Split scache: 0 == I&D combined */ +#define CONFIG_SW 0x00100000 /* scache port: 0==128, 1==64 */ +#define CONFIG_EW 0x000c0000 /* System Port width: 0==64, 1==32 */ +#define CONFIG_SC 0x00020000 /* 0 -> 2nd cache present */ +#define CONFIG_SM 0x00010000 /* 0 -> Dirty Shared Coherency enabled*/ +#define CONFIG_BE 0x00008000 /* Endian-ness: 1 --> BE */ +#define CONFIG_EM 0x00004000 /* 1 -> ECC mode, 0 -> parity */ +#define CONFIG_EB 0x00002000 /* Block order:1->sequent,0->subblock */ + +#define CONFIG_IC 0x00000e00 /* Primary Icache size */ +#define CONFIG_DC 0x000001c0 /* Primary Dcache size */ +#define CONFIG_IB 0x00000020 /* Icache block size */ +#define CONFIG_DB 0x00000010 /* Dcache block size */ +#define CONFIG_CU 0x00000008 /* Update on Store-conditional */ +#define CONFIG_K0 0x00000007 /* K0SEG Coherency algorithm */ + +#define CONFIG_UNCACHED 0x00000002 /* K0 is uncached */ +#define CONFIG_NONCOHRNT 0x00000003 +#define CONFIG_COHRNT_EXLWR 0x00000005 +#define CONFIG_SB_SHFT 22 /* shift SB to bit position 0 */ +#define CONFIG_IC_SHFT 9 /* shift IC to bit position 0 */ +#define CONFIG_DC_SHFT 6 /* shift DC to bit position 0 */ +#define CONFIG_BE_SHFT 15 /* shift BE to bit position 0 */ + +/* + * C0_TAGLO definitions for setting/getting cache states and physaddr bits + */ +#define SADDRMASK 0xFFFFE000 /* 31..13 -> scache paddr bits 35..17 */ +#define SVINDEXMASK 0x00000380 /* 9..7: prim virt index bits 14..12 */ +#define SSTATEMASK 0x00001c00 /* bits 12..10 hold scache line state */ +#define SINVALID 0x00000000 /* invalid --> 000 == state 0 */ +#define SCLEANEXCL 0x00001000 /* clean exclusive --> 100 == state 4 */ +#define SDIRTYEXCL 0x00001400 /* dirty exclusive --> 101 == state 5 */ +#define SECC_MASK 0x0000007f /* low 7 bits are ecc for the tag */ +#define SADDR_SHIFT 4 /* shift STagLo (31..13) to 35..17 */ + +#define PADDRMASK 0xFFFFFF00 /* PTagLo31..8->prim paddr bits35..12 */ +#define PADDR_SHIFT 4 /* roll bits 35..12 down to 31..8 */ +#define PSTATEMASK 0x00C0 /* bits 7..6 hold primary line state */ +#define PINVALID 0x0000 /* invalid --> 000 == state 0 */ +#define PCLEANEXCL 0x0080 /* clean exclusive --> 10 == state 2 */ +#define PDIRTYEXCL 0x00C0 /* dirty exclusive --> 11 == state 3 */ +#define PPARITY_MASK 0x0001 /* low bit is parity bit (even). */ + +/* + * C0_CACHE_ERR definitions. + */ +#define CACHERR_ER 0x80000000 /* 0: inst ref, 1: data ref */ +#define CACHERR_EC 0x40000000 /* 0: primary, 1: secondary */ +#define CACHERR_ED 0x20000000 /* 1: data error */ +#define CACHERR_ET 0x10000000 /* 1: tag error */ +#define CACHERR_ES 0x08000000 /* 1: external ref, e.g. snoop*/ +#define CACHERR_EE 0x04000000 /* error on SysAD bus */ +#define CACHERR_EB 0x02000000 /* complicated, see spec. */ +#define CACHERR_EI 0x01000000 /* complicated, see spec. */ +#define CACHERR_SIDX_MASK 0x003ffff8 /* secondary cache index */ +#define CACHERR_PIDX_MASK 0x00000007 /* primary cache index */ +#define CACHERR_PIDX_SHIFT 12 /* bits 2..0 are paddr14..12 */ + +/* R4000 family supports hardware watchpoints: + * C0_WATCHLO: + * bits 31..3 are bits 31..3 of physaddr to watch + * bit 2: reserved; must be written as 0. + * bit 1: when set causes a watchpoint trap on load accesses to paddr. + * bit 0: when set traps on stores to paddr; + * C0_WATCHHI + * bits 31..4 are reserved and must be written as zeros. + * bits 3..0 are bits 35..32 of the physaddr to watch + */ +#define WATCHLO_WTRAP 0x00000001 +#define WATCHLO_RTRAP 0x00000002 +#define WATCHLO_ADDRMASK 0xfffffff8 +#define WATCHLO_VALIDMASK 0xfffffffb +#define WATCHHI_VALIDMASK 0x0000000f + +/* + * Coprocessor 0 registers + */ +#ifdef _LANGUAGE_ASSEMBLY +#define C0_INX $0 +#define C0_RAND $1 +#define C0_ENTRYLO0 $2 +#define C0_ENTRYLO1 $3 +#define C0_CONTEXT $4 +#define C0_PAGEMASK $5 /* page mask */ +#define C0_WIRED $6 /* # wired entries in tlb */ +#define C0_BADVADDR $8 +#define C0_COUNT $9 /* free-running counter */ +#define C0_ENTRYHI $10 +#define C0_SR $12 +#define C0_CAUSE $13 +#define C0_EPC $14 +#define C0_PRID $15 /* revision identifier */ +#define C0_COMPARE $11 /* counter comparison reg. */ +#define C0_CONFIG $16 /* hardware configuration */ +#define C0_LLADDR $17 /* load linked address */ +#define C0_WATCHLO $18 /* watchpoint */ +#define C0_WATCHHI $19 /* watchpoint */ +#define C0_ECC $26 /* S-cache ECC and primary parity */ +#define C0_CACHE_ERR $27 /* cache error status */ +#define C0_TAGLO $28 /* cache operations */ +#define C0_TAGHI $29 /* cache operations */ +#define C0_ERROR_EPC $30 /* ECC error prg. counter */ + +# else /* ! _LANGUAGE_ASSEMBLY */ + +#define C0_INX 0 +#define C0_RAND 1 +#define C0_ENTRYLO0 2 +#define C0_ENTRYLO1 3 +#define C0_CONTEXT 4 +#define C0_PAGEMASK 5 /* page mask */ +#define C0_WIRED 6 /* # wired entries in tlb */ +#define C0_BADVADDR 8 +#define C0_COUNT 9 /* free-running counter */ +#define C0_ENTRYHI 10 +#define C0_SR 12 +#define C0_CAUSE 13 +#define C0_EPC 14 +#define C0_PRID 15 /* revision identifier */ +#define C0_COMPARE 11 /* counter comparison reg. */ +#define C0_CONFIG 16 /* hardware configuration */ +#define C0_LLADDR 17 /* load linked address */ +#define C0_WATCHLO 18 /* watchpoint */ +#define C0_WATCHHI 19 /* watchpoint */ +#define C0_ECC 26 /* S-cache ECC and primary parity */ +#define C0_CACHE_ERR 27 /* cache error status */ +#define C0_TAGLO 28 /* cache operations */ +#define C0_TAGHI 29 /* cache operations */ +#define C0_ERROR_EPC 30 /* ECC error prg. counter */ + +#endif /* _LANGUAGE_ASSEMBLY */ + +/* + * floating-point status register + */ +#define FPCSR_FS 0x01000000 /* flush denorm to zero */ +#define FPCSR_C 0x00800000 /* condition bit */ +#define FPCSR_CE 0x00020000 /* cause: unimplemented operation */ +#define FPCSR_CV 0x00010000 /* cause: invalid operation */ +#define FPCSR_CZ 0x00008000 /* cause: division by zero */ +#define FPCSR_CO 0x00004000 /* cause: overflow */ +#define FPCSR_CU 0x00002000 /* cause: underflow */ +#define FPCSR_CI 0x00001000 /* cause: inexact operation */ +#define FPCSR_EV 0x00000800 /* enable: invalid operation */ +#define FPCSR_EZ 0x00000400 /* enable: division by zero */ +#define FPCSR_EO 0x00000200 /* enable: overflow */ +#define FPCSR_EU 0x00000100 /* enable: underflow */ +#define FPCSR_EI 0x00000080 /* enable: inexact operation */ +#define FPCSR_FV 0x00000040 /* flag: invalid operation */ +#define FPCSR_FZ 0x00000020 /* flag: division by zero */ +#define FPCSR_FO 0x00000010 /* flag: overflow */ +#define FPCSR_FU 0x00000008 /* flag: underflow */ +#define FPCSR_FI 0x00000004 /* flag: inexact operation */ +#define FPCSR_RM_MASK 0x00000003 /* rounding mode mask */ +#define FPCSR_RM_RN 0x00000000 /* round to nearest */ +#define FPCSR_RM_RZ 0x00000001 /* round to zero */ +#define FPCSR_RM_RP 0x00000002 /* round to positive infinity */ +#define FPCSR_RM_RM 0x00000003 /* round to negative infinity */ + +#endif /* __R4300_H */ diff --git a/include/PR/abi.h b/include/PR/abi.h new file mode 100644 index 0000000..2631214 --- /dev/null +++ b/include/PR/abi.h @@ -0,0 +1,841 @@ +#ifndef _ABI_H_ +#define _ABI_H_ + +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/************************************************************************** + * + * $Revision: 1.32 $ + * $Date: 1997/02/11 08:16:37 $ + * $Source: /exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/abi.h,v $ + * + **************************************************************************/ + +/* + * Header file for the Audio Binary Interface. + * This is included in the Media Binary Interface file + * mbi.h. + * + * This file follows the framework used for graphics. + * + */ + +/* Audio commands: */ +#define A_SPNOOP 0 +#define A_ADPCM 1 +#define A_CLEARBUFF 2 +#define A_RESAMPLE 5 +#define A_SETBUFF 8 +#define A_DMEMMOVE 10 +#define A_LOADADPCM 11 +#define A_MIXER 12 +#define A_INTERLEAVE 13 +#define A_SETLOOP 15 + +#ifndef VERSION_SH + +#define A_ENVMIXER 3 +#define A_LOADBUFF 4 +#define A_RESAMPLE 5 +#define A_SAVEBUFF 6 +#define A_SEGMENT 7 +#define A_SETVOL 9 +#define A_POLEF 14 + +#else + +#define A_ADDMIXER 4 +#define A_RESAMPLE_ZOH 6 +#define A_INTERL 17 +#define A_ENVSETUP1 18 +#define A_ENVMIXER 19 +#define A_LOADBUFF 20 +#define A_SAVEBUFF 21 +#define A_ENVSETUP2 22 +#define A_UNK_23 23 +#define A_HILOGAIN 24 +#define A_UNK_25 25 +#define A_DUPLICATE 26 +#define A_FILTER 27 + +#endif + +#define ACMD_SIZE 32 +/* + * Audio flags + */ + +#define A_INIT 0x01 +#define A_CONTINUE 0x00 +#define A_LOOP 0x02 +#define A_OUT 0x02 +#define A_LEFT 0x02 +#define A_RIGHT 0x00 +#define A_VOL 0x04 +#define A_RATE 0x00 +#define A_AUX 0x08 +#define A_NOAUX 0x00 +#define A_MAIN 0x00 +#define A_MIX 0x10 + +/* + * BEGIN C-specific section: (typedef's) + */ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/* + * Data Structures. + */ + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int gain:16; + unsigned int addr; +} Aadpcm; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int gain:16; + unsigned int addr; +} Apolef; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int pad1:16; + unsigned int addr; +} Aenvelope; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:8; + unsigned int dmem:16; + unsigned int pad2:16; + unsigned int count:16; +} Aclearbuff; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:8; + unsigned int pad2:16; + unsigned int inL:16; + unsigned int inR:16; +} Ainterleave; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:24; + unsigned int addr; +} Aloadbuff; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int pad1:16; + unsigned int addr; +} Aenvmixer; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int gain:16; + unsigned int dmemi:16; + unsigned int dmemo:16; +} Amixer; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int dmem2:16; + unsigned int addr; +} Apan; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int pitch:16; + unsigned int addr; +} Aresample; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int pad1:16; + unsigned int addr; +} Areverb; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:24; + unsigned int addr; +} Asavebuff; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:24; + unsigned int pad2:2; + unsigned int number:4; + unsigned int base:24; +} Asegment; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int dmemin:16; + unsigned int dmemout:16; + unsigned int count:16; +} Asetbuff; + +typedef struct { + unsigned int cmd:8; + unsigned int flags:8; + unsigned int vol:16; + unsigned int voltgt:16; + unsigned int volrate:16; +} Asetvol; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:8; + unsigned int dmemin:16; + unsigned int dmemout:16; + unsigned int count:16; +} Admemmove; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:8; + unsigned int count:16; + unsigned int addr; +} Aloadadpcm; + +typedef struct { + unsigned int cmd:8; + unsigned int pad1:8; + unsigned int pad2:16; + unsigned int addr; +} Asetloop; + +/* + * Generic Acmd Packet + */ + +typedef struct { + uintptr_t w0; + uintptr_t w1; +} Awords; + +typedef union { + Awords words; +#if IS_BIG_ENDIAN && !IS_64_BIT + Aadpcm adpcm; + Apolef polef; + Aclearbuff clearbuff; + Aenvelope envelope; + Ainterleave interleave; + Aloadbuff loadbuff; + Aenvmixer envmixer; + Aresample resample; + Areverb reverb; + Asavebuff savebuff; + Asegment segment; + Asetbuff setbuff; + Asetvol setvol; + Admemmove dmemmove; + Aloadadpcm loadadpcm; + Amixer mixer; + Asetloop setloop; +#endif + long long int force_union_align; /* dummy, force alignment */ +} Acmd; + +/* + * ADPCM State + */ +typedef short ADPCM_STATE[16]; + +/* + * Pole filter state + */ +typedef short POLEF_STATE[4]; + +/* + * Resampler state + */ +typedef short RESAMPLE_STATE[16]; + +/* + * Resampler constants + */ +#define UNITY_PITCH 0x8000 +#define MAX_RATIO 1.99996 /* within .03 cents of +1 octave */ + +/* + * Enveloper/Mixer state + */ +typedef short ENVMIX_STATE[40]; + +/* + * Macros to assemble the audio command list + */ + +/* + * Info about parameters: + * + * A "count" in the following macros is always measured in bytes. + * + * All volumes/gains are in Q1.15 signed fixed point numbers: + * 0x8000 is the minimum volume (-100%), negating the audio curve. + * 0x0000 is silent. + * 0x7fff is maximum volume (99.997%). + * + * All DRAM addresses refer to segmented addresses. A segment table shall + * first be set up by calling aSegment for each segment. When a DRAM + * address is later used as parameter, the 8 high bits will be an index + * to the segment table and the lower 24 bits are added to the base address + * stored in the segment table for this entry. The result is the physical address. + * + * Transfers to/from DRAM are executed using DMA and hence follow these restrictions: + * All DRAM addresses should be aligned by 8 bytes, or they will be + * rounded down to the nearest multiple of 8 bytes. + * All DRAM lengths should be aligned by 8 bytes, or they will be + * rounded up to the nearest multiple of 8 bytes. + */ + +/* + * Decompresses ADPCM data. + * Possible flags: A_INIT and A_LOOP. + * + * First set up internal data in DMEM: + * aLoadADPCM(cmd++, nEntries * 16, physicalAddressOfBook) + * aSetLoop(cmd++, physicalAddressOfLoopState) (if A_LOOP is set) + * + * Then before this command, call: + * aSetBuffer(cmd++, 0, in, out, count) + * + * Note: count will be rounded up to the nearest multiple of 32 bytes. + * + * ADPCM decompression works on a block of 16 (uncompressed) samples. + * The previous 2 samples and 9 bytes of input are decompressed to + * 16 new samples using the code book previously loaded. + * + * Before the algorithm starts, the previous 16 samples are loaded according to flag: + * A_INIT: all zeros + * A_LOOP: the address set by aSetLoop + * no flags: the DRAM address in the s parameter + * These 16 samples are immediately copied to the destination address. + * + * The result of "count" bytes will be written after these 16 initial samples. + * The last 16 samples written to the destination will also be written to + * the state address in DRAM. + */ +#define aADPCMdec(pkt, f, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_ADPCM, 24, 8) | _SHIFTL(f, 16, 8); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +#define aADPCM_23(pkt, f, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_UNK_23, 24, 8) | _SHIFTL(f, 16, 8); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Not used in SM64. + */ +#define aPoleFilter(pkt, f, g, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_POLEF, 24, 8) | _SHIFTL(f, 16, 8) | \ + _SHIFTL(g, 0, 16)); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Clears DMEM data, where d is address and c is count, by writing zeros. + * + * Note: c is rounded up to the nearest multiple of 16 bytes. + */ +#define aClearBuffer(pkt, d, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(d, 0, 24); \ + _a->words.w1 = (uintptr_t)(c); \ +} + +/* + * Mixes an envelope with mono sound into 2 or 4 channels. + * Possible flags: A_INIT, A_AUX (indicates that 4 channels should be used). + * + * Before this command, call: + * aSetBuffer(cmd++, 0, inBuf, dryLeft, count) + * aSetBuffer(cmd++, A_AUX, dryRight, wetLeft, wetRight) + * + * The first time (A_INIT is set), volume also needs to be set: + * aSetVolume(cmd++, A_VOL | A_LEFT, initialVolumeLeft, 0, 0) + * aSetVolume(cmd++, A_VOL | A_RIGHT, initialVolumeRight, 0, 0) + * aSetVolume32(cmd++, A_RATE | A_LEFT, targetVolumeLeft, rampLeft) + * aSetVolume32(cmd++, A_RATE | A_RIGHT, targetVolumeRight, rampRight) + * aSetVolume(cmd++, A_AUX, dryVolume, 0, wetVolume) + * + * This command will now mix samples in inBuf into the destination buffers (dry and wet), + * but with the volume increased (or decreased) from initial volumes to target volumes, + * with the specified ramp rate. Once the target volume is reached, the volume stays + * at that level. Before the samples are finally mixed (added) into the destination + * buffers (dry and wet), the volume is changed according to dryVolume and wetVolume. + * + * Note: count will be rounded up to the nearest multiple of 16 bytes. + * Note: the wet channels are used for reverb. + * + */ +#define aEnvMixer(pkt, f, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_ENVMIXER, 24, 8) | _SHIFTL(f, 16, 8); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Interleaves two mono channels into stereo. + * + * First call: + * aSetBuffer(cmd++, 0, 0, output, count) + * + * The count refers to the size of each input. Hence 2 * count bytes will be written out. + * A left sample will be placed before the right sample. + * + * Note: count will be rounded up to the nearest multiple of 16 bytes. + */ +#define aInterleave(pkt, l, r) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8); \ + _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \ +} + +/* + * Loads a buffer from DRAM to DMEM. + * + * First call: + * aSetBuffer(cmd++, 0, in, 0, count) + * + * The in parameter to aSetBuffer is the destination in DMEM and the + * s parameter to this command is the source in DRAM. + */ +#define aLoadBuffer(pkt, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Mixes audio. + * Possible flags: no flags used, although parameter present. + * + * First call: + * aSetBuffer(cmd++, 0, 0, 0, count) + * + * Input and output addresses are taken from the i and o parameters. + * The volume with which the input is changed is taken from the g parameter. + * After the volume of the input samples have been changed, the result + * is added to the output. + * + * Note: count will be rounded up to the nearest multiple of 32 bytes. + */ +#define aMix(pkt, f, g, i, o) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | _SHIFTL(f, 16, 8) | \ + _SHIFTL(g, 0, 16)); \ + _a->words.w1 = _SHIFTL(i,16, 16) | _SHIFTL(o, 0, 16); \ +} + +// Not present in the audio microcode. +#define aPan(pkt, f, d, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_PAN, 24, 8) | _SHIFTL(f, 16, 8) | \ + _SHIFTL(d, 0, 16)); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Resamples audio. + * Possible flags: A_INIT, A_OUT? (not used in SM64). + * + * First call: + * aSetBuffer(cmd++, 0, in, out, count) + * + * This command resamples the audio using the given frequency ratio (pitch) + * using a filter that uses a window of 4 source samples. This can be used + * either for just resampling audio to be able to be played back at a different + * sample rate, or to change the pitch if the result is played back at + * the same sample rate as the input. + * + * The frequency ratio is given in UQ1.15 fixed point format. + * For no change in frequency, use pitch 0x8000. + * For 1 octave up or downsampling to (roughly) half number of samples, use pitch 0xffff. + * For 1 octave down or upsampling to double as many samples, use pitch 0x4000. + * + * Note: count represents the number of output sample bytes and is rounded up to + * the nearest multiple of 16 bytes. + * + * The state consists of the four following source samples when the algorithm stopped as + * well as a fractional position, and is initialized to all zeros if A_INIT is given. + * Otherwise it is loaded from DRAM at address s. + * + * The algorithm starts by writing the four source samples from the state (or zero) + * to just before the input address given. It then creates one output sample by examining + * the four next source samples and then moving the source position zero or more + * samples forward. The first output sample (when A_INIT is given) is always 0. + * + * When "count" bytes have been written, the following four source samples + * are written to the state in DRAM as well as a fractional position. + */ +#define aResample(pkt, f, p, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_RESAMPLE, 24, 8) | _SHIFTL(f, 16, 8) |\ + _SHIFTL(p, 0, 16)); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Stores a buffer in DMEM to DRAM. + * + * First call: + * aSetBuffer(cmd++, 0, 0, out, count) + * + * The out parameter to aSetBuffer is the source in DMEM and the + * s parameter to this command is the destination in DRAM. + */ +#define aSaveBuffer(pkt, s) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Sets up an entry in the segment table. + * + * The s parameter is a segment index, 0 to 15. + * The b parameter is the base offset. + */ +#define aSegment(pkt, s, b) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_SEGMENT, 24, 8); \ + _a->words.w1 = _SHIFTL(s, 24, 8) | _SHIFTL(b, 0, 24); \ +} + +/* + * Sets internal DMEM buffer addresses used for later commands. + * See each command for how to use aSetBuffer. + */ +#define aSetBuffer(pkt, f, i, o, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_SETBUFF, 24, 8) | _SHIFTL(f, 16, 8) | \ + _SHIFTL(i, 0, 16)); \ + _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \ +} + +#define aInterl(pkt, f, i, o, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_INTERL, 24, 8) | _SHIFTL(f, 16, 8) | \ + _SHIFTL(i, 0, 16)); \ + _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \ +} + +/* + * Sets internal volume parameters. + * See aEnvMixer for more info. + */ +#define aSetVolume(pkt, f, v, t, r) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \ + _SHIFTL(v, 0, 16)); \ + _a->words.w1 = _SHIFTL(t, 16, 16) | _SHIFTL(r, 0, 16); \ +} + +/* + * Sets the address to ADPCM loop state. + * + * The a parameter is a DRAM address. + * See aADPCMdec for more info. + */ +#define aSetLoop(pkt, a) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + _a->words.w0 = _SHIFTL(A_SETLOOP, 24, 8); \ + _a->words.w1 = (uintptr_t)(a); \ +} + +/* + * Copies memory in DMEM. + * + * Copies c bytes from address i to address o. + * + * Note: count is rounded up to the nearest multiple of 16 bytes. + * + * Note: This acts as memcpy where 16 bytes are moved at a time, therefore + * if input and output overlap, output address should be less than input address. + */ +#define aDMEMMove(pkt, i, o, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_DMEMMOVE, 24, 8) | _SHIFTL(i, 0, 24); \ + _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \ +} + +/* + * Loads ADPCM book from DRAM into DMEM. + * + * This command loads ADPCM table entries from DRAM to DMEM. + * + * The count parameter c should be a multiple of 16 bytes. + * The d parameter is a DRAM address. + */ +#define aLoadADPCM(pkt, c, d) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_LOADADPCM, 24, 8) | _SHIFTL(c, 0, 24); \ + _a->words.w1 = (uintptr_t) (d); \ +} + +// This is a version of aSetVolume which takes a single 32-bit parameter +// instead of two 16-bit ones. According to AziAudio, it is used to set +// ramping values when neither bit 4 nor bit 8 is set in the flags parameter. +// It does not appear in the official abi.h header. +/* + * Sets internal volume parameters. + * See aEnvMixer for more info. + */ +#define aSetVolume32(pkt, f, v, tr) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \ + _SHIFTL(v, 0, 16)); \ + _a->words.w1 = (uintptr_t)(tr); \ +} + +#ifdef VERSION_SH +#undef aLoadBuffer +#undef aSaveBuffer +#undef aMix +#undef aEnvMixer +#undef aInterleave + +/* + * Mix two tracks by simple clamped addition. + * + * s: DMEM source track 1 + * d: DMEM source track 2 and destination + * c: number of bytes to write (rounded down to 16 byte alignment) + */ +#define aAddMixer(pkt, s, d, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_ADDMIXER, 24, 8) | \ + _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(0x7fff, 0, 16)); \ + _a->words.w1 = (_SHIFTL(s, 16, 16) | _SHIFTL(d, 0, 16)); \ +} + +/* + * Loads a buffer from DRAM to DMEM. + * + * s: DRAM source + * d: DMEM destination + * c: number of bytes to copy (rounded down to 16 byte alignment) + */ +#define aLoadBuffer(pkt, s, d, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8) | \ + _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(d, 0, 16); \ + _a->words.w1 = (uintptr_t)(s); \ +} + +/* + * Stores a buffer from DMEM to DRAM. + * + * s: DMEM source + * d: DRAM destination + * c: number of bytes to copy (rounded down to 16 byte alignment) + */ +#define aSaveBuffer(pkt, s, d, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8) | \ + _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(s, 0, 16); \ + _a->words.w1 = (uintptr_t)(d); \ +} + +/* + * Duplicates 128 bytes of data a number of times. + * + * 128 bytes are read from source DMEM address s. + * Then c identical copies of these bytes are written to DMEM address d. + */ +#define aDuplicate(pkt, s, d, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | \ + _SHIFTL(c, 16, 8) | _SHIFTL(s, 0, 16)); \ + _a->words.w1 = (_SHIFTL(d, 16, 16) | _SHIFTL(0x80, 0, 16)); \ +} + +/* + * Fast resample. + * + * Before this command, call: + * aSetBuffer(cmd++, 0, in, out, count) + * + * This works like the other resample command but just takes the "nearest" sample, + * instead of a function of the four nearest samples. + */ +#define aResampleZoh(pkt, pitch, start_fract) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_RESAMPLE_ZOH, 24, 8) | \ + _SHIFTL(pitch, 0, 16)); \ + _a->words.w1 = _SHIFTL(start_fract, 0, 16); \ +} + +/* + * Mixes audio. + * + * Input and output addresses are taken from the i and o parameters. + * The volume with which the input is changed is taken from the g parameter. + * After the volume of the input samples have been changed, the result + * is added to the output. + * + * Note: count is first rounded down to the nearest multiple of 16 bytes + * and then rounded up to the nearest multiple of 32 bytes. + */ +#define aMix(pkt, g, i, o, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | \ + _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(g, 0, 16)); \ + _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \ +} + +#define aEnvSetup1(pkt, a, b, c, d) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_ENVSETUP1, 24, 8) | \ + _SHIFTL(a, 16, 8) | _SHIFTL(b, 0, 16)); \ + _a->words.w1 = _SHIFTL(c, 16, 16) | _SHIFTL(d, 0, 16); \ +} + +#define aEnvSetup2(pkt, volLeft, volRight) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_ENVSETUP2, 24, 8); \ + _a->words.w1 = _SHIFTL(volLeft, 16, 16) | \ + _SHIFTL(volRight, 0, 16); \ +} + +#define aEnvMixer(pkt, inBuf, nSamples, bit1, bit2, bit3, dryLeft, dryRight, wetLeft, wetRight) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_ENVMIXER, 24, 8) | \ + _SHIFTL((inBuf) >> 4, 16, 8) | \ + _SHIFTL(nSamples, 8, 8)) | \ + _SHIFTL(bit1, 2, 1) | _SHIFTL(bit2, 1, 1) | \ + _SHIFTL(bit3, 0, 1); \ + _a->words.w1 = _SHIFTL((dryLeft) >> 4, 24, 8) | \ + _SHIFTL((dryRight) >> 4, 16, 8) | \ + _SHIFTL((wetLeft) >> 4, 8, 8) | \ + _SHIFTL((wetRight) >> 4, 0, 8); \ +} + +#define aInterleave(pkt, o, l, r, c) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8) | \ + _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(o, 0, 16); \ + _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \ +} + +// countOrBuf meaning depends on flag +#define aFilter(pkt, f, countOrBuf, addr) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_FILTER, 24, 8) | _SHIFTL((f), 16, 8) | \ + _SHIFTL((countOrBuf), 0, 16); \ + _a->words.w1 = (uintptr_t)(addr); \ +} + +#define aHilogain(pkt, id, buflen, i) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = _SHIFTL(A_HILOGAIN, 24, 8) | \ + _SHIFTL((id), 16, 8) | _SHIFTL((buflen), 0, 16); \ + _a->words.w1 = _SHIFTL((i), 16, 16); \ +} + +#define aUnknown25(pkt, f, g, i, o) \ +{ \ + Acmd *_a = (Acmd *)pkt; \ + \ + _a->words.w0 = (_SHIFTL(A_UNK_25, 24, 8) | \ + _SHIFTL((f), 16, 8) | _SHIFTL((g), 0, 16)); \ + _a->words.w1 = _SHIFTL((i), 16, 16) | _SHIFTL((o), 0, 16); \ +} + +#endif + +#endif /* _LANGUAGE_C */ + +#endif /* !_ABI_H_ */ diff --git a/include/PR/gbi.h b/include/PR/gbi.h new file mode 100644 index 0000000..ebfab07 --- /dev/null +++ b/include/PR/gbi.h @@ -0,0 +1,4801 @@ +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ +/************************************************************************** + * + * $Revision: 1.141 $ + * $Date: 1999/09/03 03:43:08 $ + * $Source: /exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/gbi.h,v $ + * + **************************************************************************/ + +#ifndef _GBI_H_ +#define _GBI_H_ + +#include + +/* + * To use the F3DEX ucodes, define F3DEX_GBI before include this file. + * + * #define F3DEX_GBI + * #include + * + * or + * + * cc -c -DF3DEX_GBI -I.... foo.c + * + */ + +/************************************************************************** + * + * Graphics Binary Interface + * + **************************************************************************/ + +/* + * Graphics Commands, 'xxx' parts may be generated from ucode + * + * The command format is + * + * |00xxxxxx| = DMA 0,..,127 + * |10xxxxxx| = Immediate Mode -65,..,-128 + * |11xxxxxx| = RDP cmds -1,..,-64 + * + * Note: in order for the RSP microcode to process RDP commands opaquely, + * we need to further identify those RDP commands that need DRAM address + * "fixup". To do this, we have the dummy command G_RDP_ADDR_FIXUP, and + * all |RDP commands| less than this are commands with embedded DRAM + * addresses. Further, the format of these commands should be similar so + * only one fixup routine is needed. + * + * Further explanation: + * The names of the commands are somewhat misleading. Here is clarification: + * + * - a 'DMA' type command has a pointer to additional data and + * causes a DMA transfer to bring that into DMEM. + * + * - an 'Immediate' type command isn't really 'immediate', in the + * traditional sense. This just means that the entire command fits + * in the 64-bit word, and the ucode can execute it 'immediately' + * without additional memory transfers. + * + * - an 'RDP' command is identified as such because the RDP + * commands can be passed-thru the RSP and sent to the RDP + * directly. One further confusing thing, is that some 'DP' + * macros below actually generate immediate commands, not + * not direct DP commands. + * + * IMPLEMENTATION NOTE: + * There is another group of RDP commands that includes the triangle commands + * generated by the RSP code. These are the raw commands the rasterizer + * hardware chews on, with slope info, etc. They will follow the RDP + * ordering... + * + * IMPLEMENTATION NOTE: + * The RDP hardware has some of these bit patterns wired up. If the hardware + * changes, we must adjust this table, likewise we can't change/add things + * once the hardware is frozen. (actually, the RDP hardware only looks at + * the lower 6 bits of the command byte) + * + */ + +#ifdef F3DEX_GBI_2E +# ifndef F3DEX_GBI_2 +# define F3DEX_GBI_2 +# endif +# define GBI_FLOATS +#endif + +#ifdef F3DEX_GBI_2 +# ifndef F3DEX_GBI +# define F3DEX_GBI +# endif +#define G_NOOP 0x00 +#define G_RDPHALF_2 0xf1 +#define G_SETOTHERMODE_H 0xe3 +#define G_SETOTHERMODE_L 0xe2 +#define G_RDPHALF_1 0xe1 +#define G_SPNOOP 0xe0 +#define G_ENDDL 0xdf +#define G_DL 0xde +#define G_LOAD_UCODE 0xdd +#define G_MOVEMEM 0xdc +#define G_MOVEWORD 0xdb +#define G_MTX 0xda +#define G_GEOMETRYMODE 0xd9 +#define G_POPMTX 0xd8 +#define G_TEXTURE 0xd7 +#define G_DMA_IO 0xd6 +#define G_SPECIAL_1 0xd5 +#define G_SPECIAL_2 0xd4 +#define G_SPECIAL_3 0xd3 + +#define G_VTX 0x01 +#define G_MODIFYVTX 0x02 +#define G_CULLDL 0x03 +#define G_BRANCH_Z 0x04 +#define G_TRI1 0x05 +#define G_TRI2 0x06 +#define G_QUAD 0x07 +#define G_LINE3D 0x08 +#else /* F3DEX_GBI_2 */ + +/* DMA commands: */ +#define G_SPNOOP 0 /* handle 0 gracefully */ +#define G_MTX 1 +#define G_RESERVED0 2 /* not implemeted */ +#define G_MOVEMEM 3 /* move a block of memory (up to 4 words) to dmem */ +#define G_VTX 4 +#define G_RESERVED1 5 /* not implemeted */ +#define G_DL 6 +#define G_RESERVED2 7 /* not implemeted */ +#define G_RESERVED3 8 /* not implemeted */ +#define G_SPRITE2D_BASE 9 /* sprite command */ + +/* IMMEDIATE commands: */ +#define G_IMMFIRST -65 +#define G_TRI1 (G_IMMFIRST-0) +#define G_CULLDL (G_IMMFIRST-1) +#define G_POPMTX (G_IMMFIRST-2) +#define G_MOVEWORD (G_IMMFIRST-3) +#define G_TEXTURE (G_IMMFIRST-4) +#define G_SETOTHERMODE_H (G_IMMFIRST-5) +#define G_SETOTHERMODE_L (G_IMMFIRST-6) +#define G_ENDDL (G_IMMFIRST-7) +#define G_SETGEOMETRYMODE (G_IMMFIRST-8) +#define G_CLEARGEOMETRYMODE (G_IMMFIRST-9) +#define G_LINE3D (G_IMMFIRST-10) +#define G_RDPHALF_1 (G_IMMFIRST-11) +#define G_RDPHALF_2 (G_IMMFIRST-12) +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define G_MODIFYVTX (G_IMMFIRST-13) +# define G_TRI2 (G_IMMFIRST-14) +# define G_BRANCH_Z (G_IMMFIRST-15) +# define G_LOAD_UCODE (G_IMMFIRST-16) +#else +# define G_RDPHALF_CONT (G_IMMFIRST-13) +#endif + +/* We are overloading 2 of the immediate commands + to keep the byte alignment of dmem the same */ + +#define G_SPRITE2D_SCALEFLIP (G_IMMFIRST-1) +#define G_SPRITE2D_DRAW (G_IMMFIRST-2) + +/* RDP commands: */ +#define G_NOOP 0xc0 /* 0 */ + +#endif /* F3DEX_GBI_2 */ + +/* RDP commands: */ +#define G_SETCIMG 0xff /* -1 */ +#define G_SETZIMG 0xfe /* -2 */ +#define G_SETTIMG 0xfd /* -3 */ +#define G_SETCOMBINE 0xfc /* -4 */ +#define G_SETENVCOLOR 0xfb /* -5 */ +#define G_SETPRIMCOLOR 0xfa /* -6 */ +#define G_SETBLENDCOLOR 0xf9 /* -7 */ +#define G_SETFOGCOLOR 0xf8 /* -8 */ +#define G_SETFILLCOLOR 0xf7 /* -9 */ +#define G_FILLRECT 0xf6 /* -10 */ +#define G_SETTILE 0xf5 /* -11 */ +#define G_LOADTILE 0xf4 /* -12 */ +#define G_LOADBLOCK 0xf3 /* -13 */ +#define G_SETTILESIZE 0xf2 /* -14 */ +#define G_LOADTLUT 0xf0 /* -16 */ +#define G_RDPSETOTHERMODE 0xef /* -17 */ +#define G_SETPRIMDEPTH 0xee /* -18 */ +#define G_SETSCISSOR 0xed /* -19 */ +#define G_SETCONVERT 0xec /* -20 */ +#define G_SETKEYR 0xeb /* -21 */ +#define G_SETKEYGB 0xea /* -22 */ +#define G_RDPFULLSYNC 0xe9 /* -23 */ +#define G_RDPTILESYNC 0xe8 /* -24 */ +#define G_RDPPIPESYNC 0xe7 /* -25 */ +#define G_RDPLOADSYNC 0xe6 /* -26 */ +#define G_TEXRECTFLIP 0xe5 /* -27 */ +#define G_TEXRECT 0xe4 /* -28 */ + + +/* + * The following commands are the "generated" RDP commands; the user + * never sees them, the RSP microcode generates them. + * + * The layout of the bits is magical, to save work in the ucode. + * These id's are -56, -52, -54, -50, -55, -51, -53, -49, ... + * edge, shade, texture, zbuff bits: estz + */ +#define G_TRI_FILL 0xc8 /* fill triangle: 11001000 */ +#define G_TRI_SHADE 0xcc /* shade triangle: 11001100 */ +#define G_TRI_TXTR 0xca /* texture triangle: 11001010 */ +#define G_TRI_SHADE_TXTR 0xce /* shade, texture triangle: 11001110 */ +#define G_TRI_FILL_ZBUFF 0xc9 /* fill, zbuff triangle: 11001001 */ +#define G_TRI_SHADE_ZBUFF 0xcd /* shade, zbuff triangle: 11001101 */ +#define G_TRI_TXTR_ZBUFF 0xcb /* texture, zbuff triangle: 11001011 */ +#define G_TRI_SHADE_TXTR_ZBUFF 0xcf /* shade, txtr, zbuff trngl: 11001111 */ + +/* + * A TRI_FILL triangle is just the edges. You need to set the DP + * to use primcolor, in order to see anything. (it is NOT a triangle + * that gets rendered in 'fill mode'. Triangles can't be rendered + * in 'fill mode') + * + * A TRI_SHADE is a gouraud triangle that has colors interpolated. + * Flat-shaded triangles (from the software) are still gouraud shaded, + * it's just the colors are all the same and the deltas are 0. + * + * Other triangle types, and combinations are more obvious. + */ + +/* masks to build RDP triangle commands: */ +#define G_RDP_TRI_FILL_MASK 0x08 +#define G_RDP_TRI_SHADE_MASK 0x04 +#define G_RDP_TRI_TXTR_MASK 0x02 +#define G_RDP_TRI_ZBUFF_MASK 0x01 + +/* + * HACK: + * This is a dreadful hack. For version 1.0 hardware, there are still + * some 'bowtie' hangs. This parameter can be increased to avoid + * the hangs. Every increase of 4 chops one scanline off of every + * triangle. Values of 4,8,12 should be sufficient to avoid any + * bowtie hang. + * + * Change this value, then recompile ALL of your program (including static + * display lists!) + * + * THIS WILL BE REMOVED FOR HARDWARE VERSION 2.0! + */ +#define BOWTIE_VAL 0 + + +/* gets added to RDP command, in order to test for addres fixup: */ +#define G_RDP_ADDR_FIXUP 3 /* |RDP cmds| <= this, do addr fixup */ +#ifdef _LANGUAGE_ASSEMBLY +#define G_RDP_TEXRECT_CHECK ((-1*G_TEXRECTFLIP)& 0xff) +#endif + +/* macros for command parsing: */ +#define GDMACMD(x) (x) +#define GIMMCMD(x) (G_IMMFIRST-(x)) +#define GRDPCMD(x) (0xff-(x)) + +#define G_DMACMDSIZ 128 +#define G_IMMCMDSIZ 64 +#define G_RDPCMDSIZ 64 + +/* + * Coordinate shift values, number of bits of fraction + */ +#define G_TEXTURE_IMAGE_FRAC 2 +#define G_TEXTURE_SCALE_FRAC 16 +#define G_SCALE_FRAC 8 +#define G_ROTATE_FRAC 16 + +/* + * Parameters to graphics commands + */ + +/* + * Data packing macros + */ + +/* + * Maximum z-buffer value, used to initialize the z-buffer. + * Note : this number is NOT the viewport z-scale constant. + * See the comment next to G_MAXZ for more info. + */ +#define G_MAXFBZ 0x3fff /* 3b exp, 11b mantissa */ + +#define GPACK_RGBA5551(r, g, b, a) ((((r)<<8) & 0xf800) | \ + (((g)<<3) & 0x7c0) | \ + (((b)>>2) & 0x3e) | ((a) & 0x1)) +#define GPACK_ZDZ(z, dz) ((z) << 2 | (dz)) + +/* + * G_MTX: parameter flags + */ +#ifdef F3DEX_GBI_2 +# define G_MTX_MODELVIEW 0x00 /* matrix types */ +# define G_MTX_PROJECTION 0x04 +# define G_MTX_MUL 0x00 /* concat or load */ +# define G_MTX_LOAD 0x02 +# define G_MTX_NOPUSH 0x00 /* push or not */ +# define G_MTX_PUSH 0x01 +#else /* F3DEX_GBI_2 */ +# define G_MTX_MODELVIEW 0x00 /* matrix types */ +# define G_MTX_PROJECTION 0x01 +# define G_MTX_MUL 0x00 /* concat or load */ +# define G_MTX_LOAD 0x02 +# define G_MTX_NOPUSH 0x00 /* push or not */ +# define G_MTX_PUSH 0x04 +#endif /* F3DEX_GBI_2 */ + +/* + * flags for G_SETGEOMETRYMODE + * (this rendering state is maintained in RSP) + * + * DO NOT USE THE LOW 8 BITS OF GEOMETRYMODE: + * The weird bit-ordering is for the micro-code: the lower byte + * can be OR'd in with G_TRI_SHADE (11001100) to construct + * the triangle command directly. Don't break it... + * + * DO NOT USE THE HIGH 8 BITS OF GEOMETRYMODE: + * The high byte is OR'd with 0x703 to form the clip code mask. + * If it is set to 0x04, this will cause near clipping to occur. + * If it is zero, near clipping will not occur. + * + * Further explanation: + * G_SHADE is necessary in order to see the color that you passed + * down with the vertex. If G_SHADE isn't set, you need to set the DP + * appropriately and use primcolor to see anything. + * + * G_SHADING_SMOOTH enabled means use all 3 colors of the triangle. + * If it is not set, then do 'flat shading', where only one vertex color + * is used (and all 3 vertices are set to that same color by the ucode) + * See the man page for gSP1Triangle(). + * + */ +#define G_ZBUFFER 0x00000001 +#define G_SHADE 0x00000004 /* enable Gouraud interp */ +/* rest of low byte reserved for setup ucode */ +#ifdef F3DEX_GBI_2 +# define G_TEXTURE_ENABLE 0x00000000 /* Ignored */ +# define G_SHADING_SMOOTH 0x00200000 /* flat or smooth shaded */ +# define G_CULL_FRONT 0x00000200 +# define G_CULL_BACK 0x00000400 +# define G_CULL_BOTH 0x00000600 /* To make code cleaner */ +#else +# define G_TEXTURE_ENABLE 0x00000002 /* Microcode use only */ +# define G_SHADING_SMOOTH 0x00000200 /* flat or smooth shaded */ +# define G_CULL_FRONT 0x00001000 +# define G_CULL_BACK 0x00002000 +# define G_CULL_BOTH 0x00003000 /* To make code cleaner */ +#endif +#define G_FOG 0x00010000 +#define G_LIGHTING 0x00020000 +#define G_TEXTURE_GEN 0x00040000 +#define G_TEXTURE_GEN_LINEAR 0x00080000 +#define G_LOD 0x00100000 /* NOT IMPLEMENTED */ +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define G_CLIPPING 0x00800000 +#else +# define G_CLIPPING 0x00000000 +#endif + +#ifdef _LANGUAGE_ASSEMBLY +#define G_FOG_H (G_FOG/0x10000) +#define G_LIGHTING_H (G_LIGHTING/0x10000) +#define G_TEXTURE_GEN_H (G_TEXTURE_GEN/0x10000) +#define G_TEXTURE_GEN_LINEAR_H (G_TEXTURE_GEN_LINEAR/0x10000) +#define G_LOD_H (G_LOD/0x10000) /* NOT IMPLEMENTED */ +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define G_CLIPPING_H (G_CLIPPING/0x10000) +#endif +#endif + +/* Need these defined for Sprite Microcode */ +#ifdef _LANGUAGE_ASSEMBLY +#define G_TX_LOADTILE 7 +#define G_TX_RENDERTILE 0 + +#define G_TX_NOMIRROR 0 +#define G_TX_WRAP 0 +#define G_TX_MIRROR 0x1 +#define G_TX_CLAMP 0x2 +#define G_TX_NOMASK 0 +#define G_TX_NOLOD 0 +#endif + +/* + * G_SETIMG fmt: set image formats + */ +#define G_IM_FMT_RGBA 0 +#define G_IM_FMT_YUV 1 +#define G_IM_FMT_CI 2 +#define G_IM_FMT_IA 3 +#define G_IM_FMT_I 4 + +/* + * G_SETIMG siz: set image pixel size + */ +#define G_IM_SIZ_4b 0 +#define G_IM_SIZ_8b 1 +#define G_IM_SIZ_16b 2 +#define G_IM_SIZ_32b 3 +#define G_IM_SIZ_DD 5 + +#define G_IM_SIZ_4b_BYTES 0 +#define G_IM_SIZ_4b_TILE_BYTES G_IM_SIZ_4b_BYTES +#define G_IM_SIZ_4b_LINE_BYTES G_IM_SIZ_4b_BYTES + +#define G_IM_SIZ_8b_BYTES 1 +#define G_IM_SIZ_8b_TILE_BYTES G_IM_SIZ_8b_BYTES +#define G_IM_SIZ_8b_LINE_BYTES G_IM_SIZ_8b_BYTES + +#define G_IM_SIZ_16b_BYTES 2 +#define G_IM_SIZ_16b_TILE_BYTES G_IM_SIZ_16b_BYTES +#define G_IM_SIZ_16b_LINE_BYTES G_IM_SIZ_16b_BYTES + +#define G_IM_SIZ_32b_BYTES 4 +#define G_IM_SIZ_32b_TILE_BYTES 2 +#define G_IM_SIZ_32b_LINE_BYTES 2 + +#define G_IM_SIZ_4b_LOAD_BLOCK G_IM_SIZ_16b +#define G_IM_SIZ_8b_LOAD_BLOCK G_IM_SIZ_16b +#define G_IM_SIZ_16b_LOAD_BLOCK G_IM_SIZ_16b +#define G_IM_SIZ_32b_LOAD_BLOCK G_IM_SIZ_32b + +#define G_IM_SIZ_4b_SHIFT 2 +#define G_IM_SIZ_8b_SHIFT 1 +#define G_IM_SIZ_16b_SHIFT 0 +#define G_IM_SIZ_32b_SHIFT 0 + +#define G_IM_SIZ_4b_INCR 3 +#define G_IM_SIZ_8b_INCR 1 +#define G_IM_SIZ_16b_INCR 0 +#define G_IM_SIZ_32b_INCR 0 + +/* + * G_SETCOMBINE: color combine modes + */ +/* Color combiner constants: */ +#define G_CCMUX_COMBINED 0 +#define G_CCMUX_TEXEL0 1 +#define G_CCMUX_TEXEL1 2 +#define G_CCMUX_PRIMITIVE 3 +#define G_CCMUX_SHADE 4 +#define G_CCMUX_ENVIRONMENT 5 +#define G_CCMUX_CENTER 6 +#define G_CCMUX_SCALE 6 +#define G_CCMUX_COMBINED_ALPHA 7 +#define G_CCMUX_TEXEL0_ALPHA 8 +#define G_CCMUX_TEXEL1_ALPHA 9 +#define G_CCMUX_PRIMITIVE_ALPHA 10 +#define G_CCMUX_SHADE_ALPHA 11 +#define G_CCMUX_ENV_ALPHA 12 +#define G_CCMUX_LOD_FRACTION 13 +#define G_CCMUX_PRIM_LOD_FRAC 14 +#define G_CCMUX_NOISE 7 +#define G_CCMUX_K4 7 +#define G_CCMUX_K5 15 +#define G_CCMUX_1 6 +#define G_CCMUX_0 31 + +/* Alpha combiner constants: */ +#define G_ACMUX_COMBINED 0 +#define G_ACMUX_TEXEL0 1 +#define G_ACMUX_TEXEL1 2 +#define G_ACMUX_PRIMITIVE 3 +#define G_ACMUX_SHADE 4 +#define G_ACMUX_ENVIRONMENT 5 +#define G_ACMUX_LOD_FRACTION 0 +#define G_ACMUX_PRIM_LOD_FRAC 6 +#define G_ACMUX_1 6 +#define G_ACMUX_0 7 + +/* typical CC cycle 1 modes */ +#define G_CC_PRIMITIVE 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE +#define G_CC_SHADE 0, 0, 0, SHADE, 0, 0, 0, SHADE + +#define G_CC_MODULATEI TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE +#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0 +#define G_CC_MODULATEIFADE TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT + +#define G_CC_MODULATERGB G_CC_MODULATEI +#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA +#define G_CC_MODULATERGBFADE G_CC_MODULATEIFADE + +#define G_CC_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0 +#define G_CC_MODULATEIFADEA TEXEL0, 0, SHADE, 0, TEXEL0, 0, ENVIRONMENT, 0 + +#define G_CC_MODULATEFADE TEXEL0, 0, SHADE, 0, ENVIRONMENT, 0, TEXEL0, 0 + +#define G_CC_MODULATERGBA G_CC_MODULATEIA +#define G_CC_MODULATERGBFADEA G_CC_MODULATEIFADEA + +#define G_CC_MODULATEI_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE +#define G_CC_MODULATEIA_PRIM TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0 +#define G_CC_MODULATEIDECALA_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0 + +#define G_CC_MODULATERGB_PRIM G_CC_MODULATEI_PRIM +#define G_CC_MODULATERGBA_PRIM G_CC_MODULATEIA_PRIM +#define G_CC_MODULATERGBDECALA_PRIM G_CC_MODULATEIDECALA_PRIM + +#define G_CC_FADE SHADE, 0, ENVIRONMENT, 0, SHADE, 0, ENVIRONMENT, 0 +#define G_CC_FADEA TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0 + +#define G_CC_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE +#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 +#define G_CC_DECALFADE 0, 0, 0, TEXEL0, 0, 0, 0, ENVIRONMENT + +#define G_CC_DECALFADEA 0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0 + +#define G_CC_BLENDI ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDIA ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0 +#define G_CC_BLENDIDECALA ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 + +#define G_CC_BLENDRGBA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDRGBDECALA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_BLENDRGBFADEA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT + +#define G_CC_ADDRGB TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_ADDRGBDECALA TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_ADDRGBFADE TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, ENVIRONMENT + +#define G_CC_REFLECTRGB ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_REFLECTRGBDECALA ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 + +#define G_CC_HILITERGB PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_HILITERGBA PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE +#define G_CC_HILITERGBDECALA PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 + +#define G_CC_SHADEDECALA 0, 0, 0, SHADE, 0, 0, 0, TEXEL0 +#define G_CC_SHADEFADEA 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT + +#define G_CC_BLENDPE PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0 +#define G_CC_BLENDPEDECALA PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0 + +/* oddball modes */ +#define _G_CC_BLENDPE ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0 +#define _G_CC_BLENDPEDECALA ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0 +#define _G_CC_TWOCOLORTEX PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE +/* used for 1-cycle sparse mip-maps, primitive color has color of lowest LOD */ +#define _G_CC_SPARSEST PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0 +#define G_CC_TEMPLERP TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0 + +/* typical CC cycle 1 modes, usually followed by other cycle 2 modes */ +#define G_CC_TRILERP TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0 +#define G_CC_INTERFERENCE TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0 + +/* + * One-cycle color convert operation + */ +#define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE + +/* + * NOTE: YUV2RGB expects TF step1 color conversion to occur in 2nd clock. + * Therefore, CC looks for step1 results in TEXEL1 + */ +#define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0 + +/* typical CC cycle 2 modes */ +#define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED +#define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE +#define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0 +#define G_CC_MODULATERGB2 G_CC_MODULATEI2 +#define G_CC_MODULATERGBA2 G_CC_MODULATEIA2 +#define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE +#define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0 +#define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2 +#define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2 +#define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE +/* + * ? +#define G_CC_DECALRGBA2 COMBINED, SHADE, COMBINED_ALPHA, SHADE, 0, 0, 0, SHADE +*/ +#define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE +#define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0 +#define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0 +#define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE +#define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED +#define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0 +#define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED + +/* + * G_SETOTHERMODE_L sft: shift count + */ +#define G_MDSFT_ALPHACOMPARE 0 +#define G_MDSFT_ZSRCSEL 2 +#define G_MDSFT_RENDERMODE 3 +#define G_MDSFT_BLENDER 16 + +/* + * G_SETOTHERMODE_H sft: shift count + */ +#define G_MDSFT_BLENDMASK 0 /* unsupported */ +#define G_MDSFT_ALPHADITHER 4 +#define G_MDSFT_RGBDITHER 6 + +#define G_MDSFT_COMBKEY 8 +#define G_MDSFT_TEXTCONV 9 +#define G_MDSFT_TEXTFILT 12 +#define G_MDSFT_TEXTLUT 14 +#define G_MDSFT_TEXTLOD 16 +#define G_MDSFT_TEXTDETAIL 17 +#define G_MDSFT_TEXTPERSP 19 +#define G_MDSFT_CYCLETYPE 20 +#define G_MDSFT_COLORDITHER 22 /* unsupported in HW 2.0 */ +#define G_MDSFT_PIPELINE 23 + +/* G_SETOTHERMODE_H gPipelineMode */ +#define G_PM_1PRIMITIVE (1 << G_MDSFT_PIPELINE) +#define G_PM_NPRIMITIVE (0 << G_MDSFT_PIPELINE) + +/* G_SETOTHERMODE_H gSetCycleType */ +#define G_CYC_1CYCLE (0 << G_MDSFT_CYCLETYPE) +#define G_CYC_2CYCLE (1 << G_MDSFT_CYCLETYPE) +#define G_CYC_COPY (2 << G_MDSFT_CYCLETYPE) +#define G_CYC_FILL (3 << G_MDSFT_CYCLETYPE) + +/* G_SETOTHERMODE_H gSetTexturePersp */ +#define G_TP_NONE (0 << G_MDSFT_TEXTPERSP) +#define G_TP_PERSP (1 << G_MDSFT_TEXTPERSP) + +/* G_SETOTHERMODE_H gSetTextureDetail */ +#define G_TD_CLAMP (0 << G_MDSFT_TEXTDETAIL) +#define G_TD_SHARPEN (1 << G_MDSFT_TEXTDETAIL) +#define G_TD_DETAIL (2 << G_MDSFT_TEXTDETAIL) + +/* G_SETOTHERMODE_H gSetTextureLOD */ +#define G_TL_TILE (0 << G_MDSFT_TEXTLOD) +#define G_TL_LOD (1 << G_MDSFT_TEXTLOD) + +/* G_SETOTHERMODE_H gSetTextureLUT */ +#define G_TT_NONE (0 << G_MDSFT_TEXTLUT) +#define G_TT_RGBA16 (2 << G_MDSFT_TEXTLUT) +#define G_TT_IA16 (3 << G_MDSFT_TEXTLUT) + +/* G_SETOTHERMODE_H gSetTextureFilter */ +#define G_TF_POINT (0 << G_MDSFT_TEXTFILT) +#define G_TF_AVERAGE (3 << G_MDSFT_TEXTFILT) +#define G_TF_BILERP (2 << G_MDSFT_TEXTFILT) + +/* G_SETOTHERMODE_H gSetTextureConvert */ +#define G_TC_CONV (0 << G_MDSFT_TEXTCONV) +#define G_TC_FILTCONV (5 << G_MDSFT_TEXTCONV) +#define G_TC_FILT (6 << G_MDSFT_TEXTCONV) + +/* G_SETOTHERMODE_H gSetCombineKey */ +#define G_CK_NONE (0 << G_MDSFT_COMBKEY) +#define G_CK_KEY (1 << G_MDSFT_COMBKEY) + +/* G_SETOTHERMODE_H gSetColorDither */ +#define G_CD_MAGICSQ (0 << G_MDSFT_RGBDITHER) +#define G_CD_BAYER (1 << G_MDSFT_RGBDITHER) +#define G_CD_NOISE (2 << G_MDSFT_RGBDITHER) + +#ifndef _HW_VERSION_1 +#define G_CD_DISABLE (3 << G_MDSFT_RGBDITHER) +#define G_CD_ENABLE G_CD_NOISE /* HW 1.0 compatibility mode */ +#else +#define G_CD_ENABLE (1 << G_MDSFT_COLORDITHER) +#define G_CD_DISABLE (0 << G_MDSFT_COLORDITHER) +#endif + +/* G_SETOTHERMODE_H gSetAlphaDither */ +#define G_AD_PATTERN (0 << G_MDSFT_ALPHADITHER) +#define G_AD_NOTPATTERN (1 << G_MDSFT_ALPHADITHER) +#define G_AD_NOISE (2 << G_MDSFT_ALPHADITHER) +#define G_AD_DISABLE (3 << G_MDSFT_ALPHADITHER) + +/* G_SETOTHERMODE_L gSetAlphaCompare */ +#define G_AC_NONE (0 << G_MDSFT_ALPHACOMPARE) +#define G_AC_THRESHOLD (1 << G_MDSFT_ALPHACOMPARE) +#define G_AC_DITHER (3 << G_MDSFT_ALPHACOMPARE) + +/* G_SETOTHERMODE_L gSetDepthSource */ +#define G_ZS_PIXEL (0 << G_MDSFT_ZSRCSEL) +#define G_ZS_PRIM (1 << G_MDSFT_ZSRCSEL) + +/* G_SETOTHERMODE_L gSetRenderMode */ +#define AA_EN 0x8 +#define Z_CMP 0x10 +#define Z_UPD 0x20 +#define IM_RD 0x40 +#define CLR_ON_CVG 0x80 +#define CVG_DST_CLAMP 0 +#define CVG_DST_WRAP 0x100 +#define CVG_DST_FULL 0x200 +#define CVG_DST_SAVE 0x300 +#define ZMODE_OPA 0 +#define ZMODE_INTER 0x400 +#define ZMODE_XLU 0x800 +#define ZMODE_DEC 0xc00 +#define CVG_X_ALPHA 0x1000 +#define ALPHA_CVG_SEL 0x2000 +#define FORCE_BL 0x4000 +#define TEX_EDGE 0x0000 /* used to be 0x8000 */ + +#define G_BL_CLR_IN 0 +#define G_BL_CLR_MEM 1 +#define G_BL_CLR_BL 2 +#define G_BL_CLR_FOG 3 +#define G_BL_1MA 0 +#define G_BL_A_MEM 1 +#define G_BL_A_IN 0 +#define G_BL_A_FOG 1 +#define G_BL_A_SHADE 2 +#define G_BL_1 2 +#define G_BL_0 3 + +#define GBL_c1(m1a, m1b, m2a, m2b) \ + (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18 +#define GBL_c2(m1a, m1b, m2a, m2b) \ + (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16 + +#define RM_AA_ZB_OPA_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_ZB_OPA_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_XLU_SURF(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_OPA_DECAL(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | ALPHA_CVG_SEL | \ + ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_ZB_OPA_DECAL(clk) \ + AA_EN | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \ + ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_XLU_DECAL(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_OPA_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ALPHA_CVG_SEL | ZMODE_INTER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_ZB_OPA_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ + ALPHA_CVG_SEL | ZMODE_INTER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_XLU_INTER(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ + FORCE_BL | ZMODE_INTER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_XLU_LINE(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_DEC_LINE(clk) \ + AA_EN | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_TEX_EDGE(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_TEX_INTER(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_SUB_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_ZB_PCL_SURF(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_OPA_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_TEX_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_ZB_SUB_TERR(clk) \ + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + + +#define RM_AA_OPA_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_RA_OPA_SURF(clk) \ + AA_EN | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_XLU_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \ + ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_XLU_LINE(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_DEC_LINE(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \ + ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_TEX_EDGE(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_SUB_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_AA_PCL_SURF(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_OPA_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_TEX_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_AA_SUB_TERR(clk) \ + AA_EN | IM_RD | CVG_DST_FULL | \ + ZMODE_OPA | ALPHA_CVG_SEL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + + +#define RM_ZB_OPA_SURF(clk) \ + Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \ + ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_ZB_XLU_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_OPA_DECAL(clk) \ + Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) + +#define RM_ZB_XLU_DECAL(clk) \ + Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_CLD_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_OVL_SURF(clk) \ + Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_ZB_PCL_SURF(clk) \ + Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \ + G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + + +#define RM_OPA_SURF(clk) \ + CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +#define RM_XLU_SURF(clk) \ + IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_TEX_EDGE(clk) \ + CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL |\ + ZMODE_OPA | TEX_EDGE | AA_EN | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +#define RM_CLD_SURF(clk) \ + IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define RM_PCL_SURF(clk) \ + CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ + G_AC_DITHER | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +#define RM_ADD(clk) \ + IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1) + +#define RM_NOOP(clk) \ + GBL_c##clk(0, 0, 0, 0) + +#define RM_VISCVG(clk) \ + IM_RD | FORCE_BL | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM) + +/* for rendering to an 8-bit framebuffer */ +#define RM_OPA_CI(clk) \ + CVG_DST_CLAMP | ZMODE_OPA | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +/* Custom version of RM_AA_ZB_XLU_SURF with Z_UPD */ +#define RM_CUSTOM_AA_ZB_XLU_SURF(clk) \ + RM_AA_ZB_XLU_SURF(clk) | Z_UPD + + +#define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1) +#define G_RM_AA_ZB_OPA_SURF2 RM_AA_ZB_OPA_SURF(2) +#define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1) +#define G_RM_AA_ZB_XLU_SURF2 RM_AA_ZB_XLU_SURF(2) +#define G_RM_AA_ZB_OPA_DECAL RM_AA_ZB_OPA_DECAL(1) +#define G_RM_AA_ZB_OPA_DECAL2 RM_AA_ZB_OPA_DECAL(2) +#define G_RM_AA_ZB_XLU_DECAL RM_AA_ZB_XLU_DECAL(1) +#define G_RM_AA_ZB_XLU_DECAL2 RM_AA_ZB_XLU_DECAL(2) +#define G_RM_AA_ZB_OPA_INTER RM_AA_ZB_OPA_INTER(1) +#define G_RM_AA_ZB_OPA_INTER2 RM_AA_ZB_OPA_INTER(2) +#define G_RM_AA_ZB_XLU_INTER RM_AA_ZB_XLU_INTER(1) +#define G_RM_AA_ZB_XLU_INTER2 RM_AA_ZB_XLU_INTER(2) +#define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1) +#define G_RM_AA_ZB_XLU_LINE2 RM_AA_ZB_XLU_LINE(2) +#define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1) +#define G_RM_AA_ZB_DEC_LINE2 RM_AA_ZB_DEC_LINE(2) +#define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1) +#define G_RM_AA_ZB_TEX_EDGE2 RM_AA_ZB_TEX_EDGE(2) +#define G_RM_AA_ZB_TEX_INTER RM_AA_ZB_TEX_INTER(1) +#define G_RM_AA_ZB_TEX_INTER2 RM_AA_ZB_TEX_INTER(2) +#define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1) +#define G_RM_AA_ZB_SUB_SURF2 RM_AA_ZB_SUB_SURF(2) +#define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1) +#define G_RM_AA_ZB_PCL_SURF2 RM_AA_ZB_PCL_SURF(2) +#define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1) +#define G_RM_AA_ZB_OPA_TERR2 RM_AA_ZB_OPA_TERR(2) +#define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1) +#define G_RM_AA_ZB_TEX_TERR2 RM_AA_ZB_TEX_TERR(2) +#define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1) +#define G_RM_AA_ZB_SUB_TERR2 RM_AA_ZB_SUB_TERR(2) + +#define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1) +#define G_RM_RA_ZB_OPA_SURF2 RM_RA_ZB_OPA_SURF(2) +#define G_RM_RA_ZB_OPA_DECAL RM_RA_ZB_OPA_DECAL(1) +#define G_RM_RA_ZB_OPA_DECAL2 RM_RA_ZB_OPA_DECAL(2) +#define G_RM_RA_ZB_OPA_INTER RM_RA_ZB_OPA_INTER(1) +#define G_RM_RA_ZB_OPA_INTER2 RM_RA_ZB_OPA_INTER(2) + +#define G_RM_AA_OPA_SURF RM_AA_OPA_SURF(1) +#define G_RM_AA_OPA_SURF2 RM_AA_OPA_SURF(2) +#define G_RM_AA_XLU_SURF RM_AA_XLU_SURF(1) +#define G_RM_AA_XLU_SURF2 RM_AA_XLU_SURF(2) +#define G_RM_AA_XLU_LINE RM_AA_XLU_LINE(1) +#define G_RM_AA_XLU_LINE2 RM_AA_XLU_LINE(2) +#define G_RM_AA_DEC_LINE RM_AA_DEC_LINE(1) +#define G_RM_AA_DEC_LINE2 RM_AA_DEC_LINE(2) +#define G_RM_AA_TEX_EDGE RM_AA_TEX_EDGE(1) +#define G_RM_AA_TEX_EDGE2 RM_AA_TEX_EDGE(2) +#define G_RM_AA_SUB_SURF RM_AA_SUB_SURF(1) +#define G_RM_AA_SUB_SURF2 RM_AA_SUB_SURF(2) +#define G_RM_AA_PCL_SURF RM_AA_PCL_SURF(1) +#define G_RM_AA_PCL_SURF2 RM_AA_PCL_SURF(2) +#define G_RM_AA_OPA_TERR RM_AA_OPA_TERR(1) +#define G_RM_AA_OPA_TERR2 RM_AA_OPA_TERR(2) +#define G_RM_AA_TEX_TERR RM_AA_TEX_TERR(1) +#define G_RM_AA_TEX_TERR2 RM_AA_TEX_TERR(2) +#define G_RM_AA_SUB_TERR RM_AA_SUB_TERR(1) +#define G_RM_AA_SUB_TERR2 RM_AA_SUB_TERR(2) + +#define G_RM_RA_OPA_SURF RM_RA_OPA_SURF(1) +#define G_RM_RA_OPA_SURF2 RM_RA_OPA_SURF(2) + +#define G_RM_ZB_OPA_SURF RM_ZB_OPA_SURF(1) +#define G_RM_ZB_OPA_SURF2 RM_ZB_OPA_SURF(2) +#define G_RM_ZB_XLU_SURF RM_ZB_XLU_SURF(1) +#define G_RM_ZB_XLU_SURF2 RM_ZB_XLU_SURF(2) +#define G_RM_ZB_OPA_DECAL RM_ZB_OPA_DECAL(1) +#define G_RM_ZB_OPA_DECAL2 RM_ZB_OPA_DECAL(2) +#define G_RM_ZB_XLU_DECAL RM_ZB_XLU_DECAL(1) +#define G_RM_ZB_XLU_DECAL2 RM_ZB_XLU_DECAL(2) +#define G_RM_ZB_CLD_SURF RM_ZB_CLD_SURF(1) +#define G_RM_ZB_CLD_SURF2 RM_ZB_CLD_SURF(2) +#define G_RM_ZB_OVL_SURF RM_ZB_OVL_SURF(1) +#define G_RM_ZB_OVL_SURF2 RM_ZB_OVL_SURF(2) +#define G_RM_ZB_PCL_SURF RM_ZB_PCL_SURF(1) +#define G_RM_ZB_PCL_SURF2 RM_ZB_PCL_SURF(2) + +#define G_RM_OPA_SURF RM_OPA_SURF(1) +#define G_RM_OPA_SURF2 RM_OPA_SURF(2) +#define G_RM_XLU_SURF RM_XLU_SURF(1) +#define G_RM_XLU_SURF2 RM_XLU_SURF(2) +#define G_RM_CLD_SURF RM_CLD_SURF(1) +#define G_RM_CLD_SURF2 RM_CLD_SURF(2) +#define G_RM_TEX_EDGE RM_TEX_EDGE(1) +#define G_RM_TEX_EDGE2 RM_TEX_EDGE(2) +#define G_RM_PCL_SURF RM_PCL_SURF(1) +#define G_RM_PCL_SURF2 RM_PCL_SURF(2) +#define G_RM_ADD RM_ADD(1) +#define G_RM_ADD2 RM_ADD(2) +#define G_RM_NOOP RM_NOOP(1) +#define G_RM_NOOP2 RM_NOOP(2) +#define G_RM_VISCVG RM_VISCVG(1) +#define G_RM_VISCVG2 RM_VISCVG(2) +#define G_RM_OPA_CI RM_OPA_CI(1) +#define G_RM_OPA_CI2 RM_OPA_CI(2) + +#define G_RM_CUSTOM_AA_ZB_XLU_SURF RM_CUSTOM_AA_ZB_XLU_SURF(1) +#define G_RM_CUSTOM_AA_ZB_XLU_SURF2 RM_CUSTOM_AA_ZB_XLU_SURF(2) + + +#define G_RM_FOG_SHADE_A GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA) +#define G_RM_FOG_PRIM_A GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA) +#define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) + +/* + * G_SETCONVERT: K0-5 + */ +#define G_CV_K0 175 +#define G_CV_K1 -43 +#define G_CV_K2 -89 +#define G_CV_K3 222 +#define G_CV_K4 114 +#define G_CV_K5 42 + +/* + * G_SETSCISSOR: interlace mode + */ +#define G_SC_NON_INTERLACE 0 +#define G_SC_ODD_INTERLACE 3 +#define G_SC_EVEN_INTERLACE 2 + +/* flags to inhibit pushing of the display list (on branch) */ +#define G_DL_PUSH 0x00 +#define G_DL_NOPUSH 0x01 + +/* + * BEGIN C-specific section: (typedef's) + */ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/* + * Data Structures + * + * NOTE: + * The DMA transfer hardware requires 64-bit aligned, 64-bit multiple- + * sized transfers. This important hardware optimization is unfortunately + * reflected in the programming interface, with some structures + * padded and alignment enforced. + * + * Since structures are aligned to the boundary of the "worst-case" + * element, we can't depend on the C compiler to align things + * properly. + * + * 64-bit structure alignment is enforced by wrapping structures with + * unions that contain a dummy "long long int". Why this works is + * explained in the ANSI C Spec, or on page 186 of the second edition + * of K&R, "The C Programming Language". + * + * The price we pay for this is a little awkwardness referencing the + * structures through the union. There is no memory penalty, since + * all the structures are at least 64-bits the dummy alignment field + * does not increase the size of the union. + * + * Static initialization of these union structures works because + * the ANSI C spec states that static initialization for unions + * works by using the first union element. We put the dummy alignment + * field last for this reason. + * + * (it's possible a newer 64-bit compiler from MIPS might make this + * easier with a flag, but we can't wait for it...) + * + */ + +/* + * Vertex (set up for use with colors) + */ +typedef struct { +#ifndef GBI_FLOATS + short ob[3]; /* x, y, z */ +#else + float ob[3]; /* x, y, z */ +#endif + unsigned short flag; + short tc[2]; /* texture coord */ + unsigned char cn[4]; /* color & alpha */ +} Vtx_t; + +/* + * Vertex (set up for use with normals) + */ +typedef struct { +#ifndef GBI_FLOATS + short ob[3]; /* x, y, z */ +#else + float ob[3]; /* x, y, z */ +#endif + unsigned short flag; + short tc[2]; /* texture coord */ + signed char n[3]; /* normal */ + unsigned char a; /* alpha */ +} Vtx_tn; + +typedef union { + Vtx_t v; /* Use this one for colors */ + Vtx_tn n; /* Use this one for normals */ + long long int force_structure_alignment; +} Vtx; + +/* + * Sprite structure + */ + +typedef struct { + void *SourceImagePointer; + void *TlutPointer; + short Stride; + short SubImageWidth; + short SubImageHeight; + char SourceImageType; + char SourceImageBitSize; + short SourceImageOffsetS; + short SourceImageOffsetT; + /* 20 bytes for above */ + + /* padding to bring structure size to 64 bit allignment */ + char dummy[4]; + +} uSprite_t; + +typedef union { + uSprite_t s; + + /* Need to make sure this is 64 bit aligned */ + long long int force_structure_allignment[3]; +} uSprite; + +/* + * Triangle face + */ +typedef struct { + unsigned char flag; + unsigned char v[3]; +} Tri; + +#ifndef GBI_FLOATS +/* + * 4x4 matrix, fixed point s15.16 format. + * First 8 words are integer portion of the 4x4 matrix + * Last 8 words are the fraction portion of the 4x4 matrix + */ +typedef s32 Mtx_t[4][4]; + +typedef union { + Mtx_t m; + long long int force_structure_alignment; +} Mtx; +#else +typedef struct { + float m[4][4]; +} Mtx; +#endif + +/* + * Viewport + */ + +/* + * + * This magic value is the maximum INTEGER z-range of the hardware + * (there are also 16-bits of fraction, which are introduced during + * any transformations). This is not just a good idea, it's the law. + * Feeding the hardware eventual z-coordinates (after any transforms + * or scaling) bigger than this, will not work. + * + * This number is DIFFERENT than G_MAXFBZ, which is the maximum value + * you want to use to initialize the z-buffer. + * + * The reason these are different is mildly interesting, but too long + * to explain here. It is basically the result of optimizations in the + * hardware. A more generic API might hide this detail from the users, + * but we don't have the ucode to do that... + * + */ +#define G_MAXZ 0x03ff /* 10 bits of integer screen-Z precision */ + +/* + * The viewport structure elements have 2 bits of fraction, necessary + * to accomodate the sub-pixel positioning scaling for the hardware. + * This can also be exploited to handle odd-sized viewports. + * + * Accounting for these fractional bits, using the default projection + * and viewing matrices, the viewport structure is initialized thusly: + * + * (SCREEN_WD/2)*4, (SCREEN_HT/2)*4, G_MAXZ, 0, + * (SCREEN_WD/2)*4, (SCREEN_HT/2)*4, 0, 0, + */ +typedef struct { + short vscale[4]; /* scale, 2 bits fraction */ + short vtrans[4]; /* translate, 2 bits fraction */ + /* both the above arrays are padded to 64-bit boundary */ +} Vp_t; + +typedef union { + Vp_t vp; + long long int force_structure_alignment; +} Vp; + +/* + * MOVEMEM indices + * + * Each of these indexes an entry in a dmem table + * which points to a 1-4 word block of dmem in + * which to store a 1-4 word DMA. + * + */ +#ifdef F3DEX_GBI_2 +/* 0,4 are reserved by G_MTX */ +# define G_MV_MMTX 2 +# define G_MV_PMTX 6 +# define G_MV_VIEWPORT 8 +# define G_MV_LIGHT 10 +# define G_MV_POINT 12 +# define G_MV_MATRIX 14 /* NOTE: this is in moveword table */ +# define G_MVO_LOOKATX (0*24) +# define G_MVO_LOOKATY (1*24) +# define G_MVO_L0 (2*24) +# define G_MVO_L1 (3*24) +# define G_MVO_L2 (4*24) +# define G_MVO_L3 (5*24) +# define G_MVO_L4 (6*24) +# define G_MVO_L5 (7*24) +# define G_MVO_L6 (8*24) +# define G_MVO_L7 (9*24) +#else /* F3DEX_GBI_2 */ +# define G_MV_VIEWPORT 0x80 +# define G_MV_LOOKATY 0x82 +# define G_MV_LOOKATX 0x84 +# define G_MV_L0 0x86 +# define G_MV_L1 0x88 +# define G_MV_L2 0x8a +# define G_MV_L3 0x8c +# define G_MV_L4 0x8e +# define G_MV_L5 0x90 +# define G_MV_L6 0x92 +# define G_MV_L7 0x94 +# define G_MV_TXTATT 0x96 +# define G_MV_MATRIX_1 0x9e /* NOTE: this is in moveword table */ +# define G_MV_MATRIX_2 0x98 +# define G_MV_MATRIX_3 0x9a +# define G_MV_MATRIX_4 0x9c +#endif /* F3DEX_GBI_2 */ + +/* + * MOVEWORD indices + * + * Each of these indexes an entry in a dmem table + * which points to a word in dmem in dmem where + * an immediate word will be stored. + * + */ +#define G_MW_MATRIX 0x00 /* NOTE: also used by movemem */ +#define G_MW_NUMLIGHT 0x02 +#define G_MW_CLIP 0x04 +#define G_MW_SEGMENT 0x06 +#define G_MW_FOG 0x08 +#define G_MW_LIGHTCOL 0x0a +#ifdef F3DEX_GBI_2 +# define G_MW_FORCEMTX 0x0c +#else /* F3DEX_GBI_2 */ +# define G_MW_POINTS 0x0c +#endif /* F3DEX_GBI_2 */ +#define G_MW_PERSPNORM 0x0e + +/* + * These are offsets from the address in the dmem table + */ +#define G_MWO_NUMLIGHT 0x00 +#define G_MWO_CLIP_RNX 0x04 +#define G_MWO_CLIP_RNY 0x0c +#define G_MWO_CLIP_RPX 0x14 +#define G_MWO_CLIP_RPY 0x1c +#define G_MWO_SEGMENT_0 0x00 +#define G_MWO_SEGMENT_1 0x01 +#define G_MWO_SEGMENT_2 0x02 +#define G_MWO_SEGMENT_3 0x03 +#define G_MWO_SEGMENT_4 0x04 +#define G_MWO_SEGMENT_5 0x05 +#define G_MWO_SEGMENT_6 0x06 +#define G_MWO_SEGMENT_7 0x07 +#define G_MWO_SEGMENT_8 0x08 +#define G_MWO_SEGMENT_9 0x09 +#define G_MWO_SEGMENT_A 0x0a +#define G_MWO_SEGMENT_B 0x0b +#define G_MWO_SEGMENT_C 0x0c +#define G_MWO_SEGMENT_D 0x0d +#define G_MWO_SEGMENT_E 0x0e +#define G_MWO_SEGMENT_F 0x0f +#define G_MWO_FOG 0x00 +#define G_MWO_aLIGHT_1 0x00 +#define G_MWO_bLIGHT_1 0x04 +#ifdef F3DEX_GBI_2 +#define G_MWO_aLIGHT_2 0x18 +#define G_MWO_bLIGHT_2 0x1c +#define G_MWO_aLIGHT_3 0x30 +#define G_MWO_bLIGHT_3 0x34 +#define G_MWO_aLIGHT_4 0x48 +#define G_MWO_bLIGHT_4 0x4c +#define G_MWO_aLIGHT_5 0x60 +#define G_MWO_bLIGHT_5 0x64 +#define G_MWO_aLIGHT_6 0x78 +#define G_MWO_bLIGHT_6 0x7c +#define G_MWO_aLIGHT_7 0x90 +#define G_MWO_bLIGHT_7 0x94 +#define G_MWO_aLIGHT_8 0xa8 +#define G_MWO_bLIGHT_8 0xac +#else +#define G_MWO_aLIGHT_2 0x20 +#define G_MWO_bLIGHT_2 0x24 +#define G_MWO_aLIGHT_3 0x40 +#define G_MWO_bLIGHT_3 0x44 +#define G_MWO_aLIGHT_4 0x60 +#define G_MWO_bLIGHT_4 0x64 +#define G_MWO_aLIGHT_5 0x80 +#define G_MWO_bLIGHT_5 0x84 +#define G_MWO_aLIGHT_6 0xa0 +#define G_MWO_bLIGHT_6 0xa4 +#define G_MWO_aLIGHT_7 0xc0 +#define G_MWO_bLIGHT_7 0xc4 +#define G_MWO_aLIGHT_8 0xe0 +#define G_MWO_bLIGHT_8 0xe4 +#endif +#define G_MWO_MATRIX_XX_XY_I 0x00 +#define G_MWO_MATRIX_XZ_XW_I 0x04 +#define G_MWO_MATRIX_YX_YY_I 0x08 +#define G_MWO_MATRIX_YZ_YW_I 0x0c +#define G_MWO_MATRIX_ZX_ZY_I 0x10 +#define G_MWO_MATRIX_ZZ_ZW_I 0x14 +#define G_MWO_MATRIX_WX_WY_I 0x18 +#define G_MWO_MATRIX_WZ_WW_I 0x1c +#define G_MWO_MATRIX_XX_XY_F 0x20 +#define G_MWO_MATRIX_XZ_XW_F 0x24 +#define G_MWO_MATRIX_YX_YY_F 0x28 +#define G_MWO_MATRIX_YZ_YW_F 0x2c +#define G_MWO_MATRIX_ZX_ZY_F 0x30 +#define G_MWO_MATRIX_ZZ_ZW_F 0x34 +#define G_MWO_MATRIX_WX_WY_F 0x38 +#define G_MWO_MATRIX_WZ_WW_F 0x3c +#define G_MWO_POINT_RGBA 0x10 +#define G_MWO_POINT_ST 0x14 +#define G_MWO_POINT_XYSCREEN 0x18 +#define G_MWO_POINT_ZSCREEN 0x1c + +/* + * Light structure. + * + * Note: only directional (infinite) lights are currently supported. + * + * Note: the weird order is for the DMEM alignment benefit of + * the microcode. + * + */ + +typedef struct { + unsigned char col[3]; /* diffuse light value (rgba) */ + char pad1; + unsigned char colc[3]; /* copy of diffuse light value (rgba) */ + char pad2; + signed char dir[3]; /* direction of light (normalized) */ + char pad3; +} Light_t; + +typedef struct { + unsigned char col[3]; /* ambient light value (rgba) */ + char pad1; + unsigned char colc[3]; /* copy of ambient light value (rgba) */ + char pad2; +} Ambient_t; + +typedef struct { + int x1,y1,x2,y2; /* texture offsets for highlight 1/2 */ +} Hilite_t; + +typedef union { + Light_t l; + long long int force_structure_alignment[2]; +} Light; + +typedef union { + Ambient_t l; + long long int force_structure_alignment[1]; +} Ambient; + +typedef struct { + Ambient a; + Light l[7]; +} Lightsn; + +typedef struct { + Ambient a; + Light l[1]; +} Lights0; + +typedef struct { + Ambient a; + Light l[1]; +} Lights1; + +typedef struct { + Ambient a; + Light l[2]; +} Lights2; + +typedef struct { + Ambient a; + Light l[3]; +} Lights3; + +typedef struct { + Ambient a; + Light l[4]; +} Lights4; + +typedef struct { + Ambient a; + Light l[5]; +} Lights5; + +typedef struct { + Ambient a; + Light l[6]; +} Lights6; + +typedef struct { + Ambient a; + Light l[7]; +} Lights7; + +typedef struct { + Light l[2]; +} LookAt; + +typedef union { + Hilite_t h; + long int force_structure_alignment[4]; +} Hilite; + +#define gdSPDefLights0(ar,ag,ab) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ { 0, 0, 0},0,{ 0, 0, 0},0,{ 0, 0, 0},0}}} } +#define gdSPDefLights1(ar,ag,ab,r1,g1,b1,x1,y1,z1) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}} } +#define gdSPDefLights2(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}} } +#define gdSPDefLights3(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}} } +#define gdSPDefLights4(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}} } +#define gdSPDefLights5(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ + {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}} } + + +#define gdSPDefLights6(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ + {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \ + {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}} } + + +#define gdSPDefLights7(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6,r7,g7,b7,x7,y7,z7) \ + { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \ + {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \ + {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \ + {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \ + {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \ + {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \ + {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}, \ + {{ {r7,g7,b7},0,{r7,g7,b7},0,{x7,y7,z7},0}}} } + + +#define gdSPDefLookAt(rightx,righty,rightz,upx,upy,upz) \ + { {{ {{0,0,0},0,{0,0,0},0,{rightx,righty,rightz},0}}, \ + { {{0,0x80,0},0,{0,0x80,0},0,{upx,upy,upz},0}}} } + +/* Don't declare these for F3D_OLD to avoid bss reordering */ +#ifndef F3D_OLD +/* + * Graphics DMA Packet + */ +typedef struct { + int cmd:8; + unsigned int par:8; + unsigned int len:16; + uintptr_t addr; +} Gdma; + +/* + * Graphics Immediate Mode Packet types + */ +typedef struct { + int cmd:8; + int pad:24; + Tri tri; +} Gtri; + +typedef struct { + int cmd:8; + int pad1:24; + int pad2:24; + unsigned char param:8; +} Gpopmtx; + +/* + * typedef struct { + * int cmd:8; + * int pad0:24; + * int pad1:4; + * int number:4; + * int base:24; + * } Gsegment; + */ +typedef struct { + int cmd:8; + int pad0:8; + int mw_index:8; + int number:8; + int pad1:8; + int base:24; +} Gsegment; + +typedef struct { + int cmd:8; + int pad0:8; + int sft:8; + int len:8; + unsigned int data:32; +} GsetothermodeL; + +typedef struct { + int cmd:8; + int pad0:8; + int sft:8; + int len:8; + unsigned int data:32; +} GsetothermodeH; + +typedef struct { + unsigned char cmd; + unsigned char lodscale; + unsigned char tile; + unsigned char on; + unsigned short s; + unsigned short t; +} Gtexture; + +typedef struct { + int cmd:8; + int pad:24; + Tri line; +} Gline3D; + +typedef struct { + int cmd:8; + int pad1:24; + short int pad2; + short int scale; +} Gperspnorm; + + +/* + * RDP Packet types + */ +typedef struct { + int cmd:8; + unsigned int fmt:3; + unsigned int siz:2; + unsigned int pad:7; + unsigned int wd:12; /* really only 10 bits, extra */ + uintptr_t dram; /* to account for 1024 */ +} Gsetimg; + +typedef struct { + int cmd:8; + unsigned int muxs0:24; + unsigned int muxs1:32; +} Gsetcombine; + +typedef struct { + int cmd:8; + unsigned char pad; + unsigned char prim_min_level; + unsigned char prim_level; + unsigned long color; +} Gsetcolor; + +typedef struct { + int cmd:8; + int x0:10; + int x0frac:2; + int y0:10; + int y0frac:2; + unsigned int pad:8; + int x1:10; + int x1frac:2; + int y1:10; + int y1frac:2; +} Gfillrect; + +typedef struct { + int cmd:8; + unsigned int fmt:3; + unsigned int siz:2; + unsigned int pad0:1; + unsigned int line:9; + unsigned int tmem:9; + unsigned int pad1:5; + unsigned int tile:3; + unsigned int palette:4; + unsigned int ct:1; + unsigned int mt:1; + unsigned int maskt:4; + unsigned int shiftt:4; + unsigned int cs:1; + unsigned int ms:1; + unsigned int masks:4; + unsigned int shifts:4; +} Gsettile; + +typedef struct { + int cmd:8; + unsigned int sl:12; + unsigned int tl:12; + int pad:5; + unsigned int tile:3; + unsigned int sh:12; + unsigned int th:12; +} Gloadtile; + +typedef Gloadtile Gloadblock; + +typedef Gloadtile Gsettilesize; + +typedef Gloadtile Gloadtlut; + +typedef struct { + unsigned int cmd:8; /* command */ + unsigned int xl:12; /* X coordinate of upper left */ + unsigned int yl:12; /* Y coordinate of upper left */ + unsigned int pad1:5; /* Padding */ + unsigned int tile:3; /* Tile descriptor index */ + unsigned int xh:12; /* X coordinate of lower right */ + unsigned int yh:12; /* Y coordinate of lower right */ + unsigned int s:16; /* S texture coord at top left */ + unsigned int t:16; /* T texture coord at top left */ + unsigned int dsdx:16;/* Change in S per change in X */ + unsigned int dtdy:16;/* Change in T per change in Y */ +} Gtexrect; + +/* + * Textured rectangles are 128 bits not 64 bits + */ +typedef struct { + unsigned long w0; + unsigned long w1; + unsigned long w2; + unsigned long w3; +} TexRect; +#endif + +#define MakeTexRect(xh,yh,flip,tile,xl,yl,s,t,dsdx,dtdy) \ + G_TEXRECT, xh, yh, 0, flip, 0, tile, xl, yl, s, t, dsdx, dtdy + +/* + * Generic Gfx Packet + */ +typedef struct { + uintptr_t w0; + uintptr_t w1; +} Gwords; + +/* + * This union is the fundamental type of the display list. + * It is, by law, exactly 64 bits in size. + * + * (Edit: except on 64-bit, where it is exactly 128 bit. On little-endian or + * 64-bit systems, only the 'words' member may be accessed; the rest of the + * structs don't have matching layouts for now.) + */ +typedef union { + Gwords words; +#if !defined(F3D_OLD) && IS_BIG_ENDIAN && !IS_64_BIT + Gdma dma; + Gtri tri; + Gline3D line; + Gpopmtx popmtx; + Gsegment segment; + GsetothermodeH setothermodeH; + GsetothermodeL setothermodeL; + Gtexture texture; + Gperspnorm perspnorm; + Gsetimg setimg; + Gsetcombine setcombine; + Gsetcolor setcolor; + Gfillrect fillrect; /* use for setscissor also */ + Gsettile settile; + Gloadtile loadtile; /* use for loadblock also, th is dxt */ + Gsettilesize settilesize; + Gloadtlut loadtlut; +#endif + long long int force_structure_alignment; +} Gfx; + +/* + * Macros to assemble the graphics display list + */ + +/* + * DMA macros + */ +#define gDma0p(pkt, c, s, l) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24); \ + _g->words.w1 = (uintptr_t)(s); \ +} + +#define gsDma0p(c, s, l) \ +{{ \ + _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (uintptr_t)(s) \ +}} + +#define gDma1p(pkt, c, s, l, p) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ + _SHIFTL((l), 0, 16)); \ + _g->words.w1 = (uintptr_t)(s); \ +} + +#define gsDma1p(c, s, l, p) \ +{{ \ + (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ + _SHIFTL((l), 0, 16)), \ + (uintptr_t)(s) \ +}} + +#define gDma2p(pkt, c, adrs, len, idx, ofs) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ + _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)); \ + _g->words.w1 = (uintptr_t)(adrs); \ +} +#define gsDma2p(c, adrs, len, idx, ofs) \ +{{ \ + (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ + _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)), \ + (uintptr_t)(adrs) \ +}} + +#define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0) +#define gsSPNoOp() gsDma0p(G_SPNOOP, 0, 0) + +#ifdef F3DEX_GBI_2 +# define gSPMatrix(pkt, m, p) \ + gDma2p((pkt),G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0) +# define gsSPMatrix(m, p) \ + gsDma2p( G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0) +#else /* F3DEX_GBI_2 */ +# define gSPMatrix(pkt, m, p) gDma1p(pkt, G_MTX, m, sizeof(Mtx), p) +# define gsSPMatrix(m, p) gsDma1p(G_MTX, m, sizeof(Mtx), p) +#endif /* F3DEX_GBI_2 */ + +#if defined(F3DEX_GBI_2) +/* + * F3DEX_GBI_2: G_VTX GBI format was changed. + * + * +--------+----+---+---+----+------+-+ + * G_VTX | cmd:8 |0000| n:8 |0000|v0+n:7|0| + * +-+---+--+----+---+---+----+------+-+ + * | |seg| address | + * +-+---+-----------------------------+ + */ +# define gSPVertex(pkt, v, n, v0) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = \ + _SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7); \ + _g->words.w1 = (uintptr_t)(v); \ +} +# define gsSPVertex(v, n, v0) \ +{{ \ + (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \ + (uintptr_t)(v) \ +}} +#elif (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +/* + * F3DEX_GBI: G_VTX GBI format was changed to support 64 vertice. + * + * +--------+--------+------+----------+ + * G_VTX | cmd:8 | v0:8 | n:6 |length:10 | + * +-+---+--+--------+------+----------+ + * | |seg| address | + * +-+---+-----------------------------+ + */ +# define gSPVertex(pkt, v, n, v0) \ + gDma1p((pkt),G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2) +# define gsSPVertex(v, n, v0) \ + gsDma1p(G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2) +#else +# define gSPVertex(pkt, v, n, v0) \ + gDma1p(pkt, G_VTX, v, sizeof(Vtx)*(n),((n)-1)<<4|(v0)) +# define gsSPVertex(v, n, v0) \ + gsDma1p(G_VTX, v, sizeof(Vtx)*(n), ((n)-1)<<4|(v0)) +#endif + + +#ifdef F3DEX_GBI_2 +# define gSPViewport(pkt, v) \ + gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) +# define gsSPViewport(v) \ + gsDma2p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) +#else /* F3DEX_GBI_2 */ +# define gSPViewport(pkt,v) \ + gDma1p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT) +# define gsSPViewport(v) \ + gsDma1p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT) +#endif /* F3DEX_GBI_2 */ + +#define gSPDisplayList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_PUSH) +#define gsSPDisplayList( dl) gsDma1p( G_DL,dl,0,G_DL_PUSH) + +#define gSPBranchList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_NOPUSH) +#define gsSPBranchList( dl) gsDma1p( G_DL,dl,0,G_DL_NOPUSH) + +#define gSPSprite2DBase(pkt, s) gDma1p(pkt, G_SPRITE2D_BASE, s, sizeof(uSprite), 0) +#define gsSPSprite2DBase(s) gsDma1p(G_SPRITE2D_BASE, s, sizeof(uSprite), 0) + +/* + * RSP short command (no DMA required) macros + */ +#define gImmp0(pkt, c) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ +} + +#define gsImmp0(c) \ +{{ \ + _SHIFTL((c), 24, 8) \ +}} + +#define gImmp1(pkt, c, p0) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = (uintptr_t)(p0); \ +} + +#define gsImmp1(c, p0) \ +{{ \ + _SHIFTL((c), 24, 8), (uintptr_t)(p0) \ +}} + +#define gImmp2(pkt, c, p0, p1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8); \ +} + +#define gsImmp2(c, p0, p1) \ +{{ \ + _SHIFTL((c), 24, 8), _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8)\ +}} + +#define gImmp3(pkt, c, p0, p1, p2) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL((c), 24, 8); \ + _g->words.w1 = (_SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8) | \ + _SHIFTL((p2), 0, 8)); \ +} + +#define gsImmp3(c, p0, p1, p2) \ +{{ \ + _SHIFTL((c), 24, 8), (_SHIFTL((p0), 16, 16) | \ + _SHIFTL((p1), 8, 8) | _SHIFTL((p2), 0, 8))\ +}} + +#define gImmp21(pkt, c, p0, p1, dat) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | \ + _SHIFTL((p1), 0, 8)); \ + _g->words.w1 = (uintptr_t) (dat); \ +} + +#define gsImmp21(c, p0, p1, dat) \ +{{ \ + _SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\ + (uintptr_t) (dat) \ +}} + +#ifdef F3DEX_GBI_2 +#define gMoveWd(pkt, index, offset, data) \ + gDma1p((pkt), G_MOVEWORD, data, offset, index) +#define gsMoveWd( index, offset, data) \ + gsDma1p( G_MOVEWORD, data, offset, index) +#else /* F3DEX_GBI_2 */ +#define gMoveWd(pkt, index, offset, data) \ + gImmp21((pkt), G_MOVEWORD, offset, index, data) +#define gsMoveWd( index, offset, data) \ + gsImmp21( G_MOVEWORD, offset, index, data) +#endif /* F3DEX_GBI_2 */ + +/* Sprite immediate macros, there is also a sprite dma macro above */ + +#define gSPSprite2DScaleFlip(pkt, sx, sy, fx, fy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \ + _SHIFTL((fx), 8, 8) | \ + _SHIFTL((fy), 0, 8)); \ + _g->words.w1 = (_SHIFTL((sx), 16, 16) | \ + _SHIFTL((sy), 0, 16)); \ +} + +#define gsSPSprite2DScaleFlip(sx, sy, fx, fy) \ +{{ \ + (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \ + _SHIFTL((fx), 8, 8) | \ + _SHIFTL((fy), 0, 8)), \ + (_SHIFTL((sx), 16, 16) | \ + _SHIFTL((sy), 0, 16)) \ +}} + +#define gSPSprite2DDraw(pkt, px, py) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)); \ + _g->words.w1 = (_SHIFTL((px), 16, 16) | \ + _SHIFTL((py), 0, 16)); \ +} + +#define gsSPSprite2DDraw(px, py) \ +{{ \ + (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)), \ + (_SHIFTL((px), 16, 16) | \ + _SHIFTL((py), 0, 16)) \ +}} + + +/* + * Note: the SP1Triangle() and line macros multiply the vertex indices + * by 10, this is an optimization for the microcode. + */ +#if (defined(F3DLP_GBI)||defined(F3DEX_GBI)) +# define __gsSP1Triangle_w1(v0, v1, v2) \ + (_SHIFTL((v0)*2,16,8)|_SHIFTL((v1)*2,8,8)|_SHIFTL((v2)*2,0,8)) +# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \ + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0): \ + __gsSP1Triangle_w1(v2, v0, v1)) +# define __gsSPLine3D_w1(v0, v1, wd) \ + (_SHIFTL((v0)*2,16,8)|_SHIFT((v1)*2,8,8)|_SHIFT((wd),0,8)) +# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ + (((flag) == 0) ? __gsSPLine3D_w1(v0, v1, wd): \ + __gsSPLine3D_w1(v1, v0, wd)) +# define __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag) \ + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3): \ + ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0): \ + __gsSP1Triangle_w1(v3, v0, v1)) +# define __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ + (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3): \ + ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0): \ + ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1): \ + __gsSP1Triangle_w1(v3, v1, v2)) +#else +# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \ + (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \ + _SHIFTL((v1)*10, 8,8)|_SHIFTL((v2)*10, 0,8)) +# define __gsSPLine3D_w1f(v0, v1, wd, flag) \ + (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \ + _SHIFTL((v1)*10, 8,8)|_SHIFTL((wd), 0,8)) +#endif + +#ifdef F3DEX_GBI_2 +/*** + *** 1 Triangle + ***/ +#define gSP1Triangle(pkt, v0, v1, v2, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_TRI1, 24, 8)| \ + __gsSP1Triangle_w1f(v0, v1, v2, flag); \ + _g->words.w1 = 0; \ +} +#define gsSP1Triangle(v0, v1, v2, flag) \ +{{ \ + _SHIFTL(G_TRI1, 24, 8)|__gsSP1Triangle_w1f(v0, v1, v2, flag), \ + 0 \ +}} + +/*** + *** Line + ***/ +#define gSPLine3D(pkt, v0, v1, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \ + __gsSPLine3D_w1f(v0, v1, 0, flag); \ + _g->words.w1 = 0; \ +} +#define gsSPLine3D(v0, v1, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, 0, flag), \ + 0 \ +}} + +/*** + *** LineW + ***/ +/* these macros are the same as SPLine3D, except they have an + * additional parameter for width. The width is added to the "minimum" + * thickness, which is 1.5 pixels. The units for width are in + * half-pixel units, so a width of 1 translates to (.5 + 1.5) or + * a 2.0 pixels wide line. + */ +#define gSPLineW3D(pkt, v0, v1, wd, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \ + __gsSPLine3D_w1f(v0, v1, wd, flag); \ + _g->words.w1 = 0; \ +} +#define gsSPLineW3D(v0, v1, wd, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, wd, flag), \ + 0 \ +}} + +/*** + *** 1 Quadrangle + ***/ +#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ + _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ +} + +#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ +{{ \ + (_SHIFTL(G_QUAD, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ + __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ +}} +#else /* F3DEX_GBI_2 */ + +/*** + *** 1 Triangle + ***/ +#define gSP1Triangle(pkt, v0, v1, v2, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ + _g->words.w1 = __gsSP1Triangle_w1f(v0, v1, v2, flag); \ +} +#define gsSP1Triangle(v0, v1, v2, flag) \ +{{ \ + _SHIFTL(G_TRI1, 24, 8), \ + __gsSP1Triangle_w1f(v0, v1, v2, flag) \ +}} + +/*** + *** Line + ***/ +#define gSPLine3D(pkt, v0, v1, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \ + _g->words.w1 = __gsSPLine3D_w1f(v0, v1, 0, flag); \ +} +#define gsSPLine3D(v0, v1, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8), \ + __gsSPLine3D_w1f(v0, v1, 0, flag) \ +}} + +/*** + *** LineW + ***/ +/* these macros are the same as SPLine3D, except they have an + * additional parameter for width. The width is added to the "minimum" + * thickness, which is 1.5 pixels. The units for width are in + * half-pixel units, so a width of 1 translates to (.5 + 1.5) or + * a 2.0 pixels wide line. + */ +#define gSPLineW3D(pkt, v0, v1, wd, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \ + _g->words.w1 = __gsSPLine3D_w1f(v0, v1, wd, flag); \ +} +#define gsSPLineW3D(v0, v1, wd, flag) \ +{{ \ + _SHIFTL(G_LINE3D, 24, 8), \ + __gsSPLine3D_w1f(v0, v1, wd, flag) \ +}} + +/*** + *** 1 Quadrangle + ***/ +#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ + _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ +} + +#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ +{{ \ + (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \ + __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \ +}} +#endif /* F3DEX_GBI_2 */ + +#if (defined(F3DLP_GBI)||defined(F3DEX_GBI)) +/*** + *** 2 Triangles + ***/ +#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \ + _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \ +} + +#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ +{{ \ + (_SHIFTL(G_TRI2, 24, 8)| \ + __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \ + __gsSP1Triangle_w1f(v10, v11, v12, flag1) \ +}} +#else +#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \ +{ \ + gSP1Triangle(pkt, v00, v01, v02, flag0); \ + gSP1Triangle(pkt, v10, v11, v12, flag1); \ +} +#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ + gsSP1Triangle(v00, v01, v02, flag0), \ + gsSP1Triangle(v10, v11, v12, flag1) +#endif /* F3DEX_GBI/F3DLP_GBI */ + +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +#define gSPCullDisplayList(pkt,vstart,vend) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \ + _SHIFTL((vstart)*2, 0, 16); \ + _g->words.w1 = _SHIFTL((vend)*2, 0, 16); \ +} + +#define gsSPCullDisplayList(vstart,vend) \ +{{ \ + _SHIFTL(G_CULLDL, 24, 8) | _SHIFTL((vstart)*2, 0, 16), \ + _SHIFTL((vend)*2, 0, 16) \ +}} + +#else +#define gSPCullDisplayList(pkt,vstart,vend) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \ + ((0x0f & (vstart))*40); \ + _g->words.w1 = (unsigned int)((0x0f & ((vend)+1))*40); \ +} + +#define gsSPCullDisplayList(vstart,vend) \ +{{ \ + _SHIFTL(G_CULLDL, 24, 8) | ((0x0f & (vstart))*40), \ + ((0x0f & ((vend)+1))*40) \ +}} +#endif + +#define gSPSegment(pkt, segment, base) \ + gMoveWd(pkt, G_MW_SEGMENT, (segment)*4, base) +#define gsSPSegment(segment, base) \ + gsMoveWd( G_MW_SEGMENT, (segment)*4, base) + +/* + * Clipping Macros + */ +#define FR_NEG_FRUSTRATIO_1 0x00000001 +#define FR_POS_FRUSTRATIO_1 0x0000ffff +#define FR_NEG_FRUSTRATIO_2 0x00000002 +#define FR_POS_FRUSTRATIO_2 0x0000fffe +#define FR_NEG_FRUSTRATIO_3 0x00000003 +#define FR_POS_FRUSTRATIO_3 0x0000fffd +#define FR_NEG_FRUSTRATIO_4 0x00000004 +#define FR_POS_FRUSTRATIO_4 0x0000fffc +#define FR_NEG_FRUSTRATIO_5 0x00000005 +#define FR_POS_FRUSTRATIO_5 0x0000fffb +#define FR_NEG_FRUSTRATIO_6 0x00000006 +#define FR_POS_FRUSTRATIO_6 0x0000fffa +/* + * r should be one of: FRUSTRATIO_1, FRUSTRATIO_2, FRUSTRATIO_3, ... FRUSTRATIO_6 + */ +#define gSPClipRatio(pkt, r) \ +{ \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r); \ + gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r); \ +} + +#define gsSPClipRatio(r) \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r), \ + gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r) + +/* + * Insert values into Matrix + * + * where = element of matrix (byte offset) + * num = new element (32 bit value replacing 2 int or 2 frac matrix + * componants + */ +#ifdef F3DEX_GBI_2 +#define gSPInsertMatrix(pkt, where, num) \ + ERROR!! gSPInsertMatrix is no longer supported. +#define gsSPInsertMatrix(where, num) \ + ERROR!! gsSPInsertMatrix is no longer supported. +#else +#define gSPInsertMatrix(pkt, where, num) \ + gMoveWd(pkt, G_MW_MATRIX, where, num) +#define gsSPInsertMatrix(where, num) \ + gsMoveWd(G_MW_MATRIX, where, num) +#endif + +/* + * Load new matrix directly + * + * mptr = pointer to matrix + */ +#ifdef F3DEX_GBI_2 +#define gSPForceMatrix(pkt, mptr) \ +{ gDma2p((pkt),G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0); \ + gMoveWd((pkt), G_MW_FORCEMTX,0,0x00010000); \ +} +#define gsSPForceMatrix(mptr) \ + gsDma2p(G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0), \ + gsMoveWd(G_MW_FORCEMTX,0,0x00010000) + +#else /* F3DEX_GBI_2 */ +#define gSPForceMatrix(pkt, mptr) \ +{ \ + gDma1p(pkt, G_MOVEMEM, mptr, 16, G_MV_MATRIX_1); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3); \ + gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4); \ +} +#define gsSPForceMatrix(mptr) \ + gsDma1p( G_MOVEMEM, mptr, 16, G_MV_MATRIX_1), \ + gsDma1p( G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2), \ + gsDma1p( G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3), \ + gsDma1p( G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4) +#endif /* F3DEX_GBI_2 */ + +/* + * Insert values into Points + * + * point = point number 0-15 + * where = which element of point to modify (byte offset into point) + * num = new value (32 bit) + */ +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define gSPModifyVertex(pkt, vtx, where, val) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_MODIFYVTX,24,8)| \ + _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16)); \ + _g->words.w1 = (unsigned int)(val); \ +} +# define gsSPModifyVertex(vtx, where, val) \ +{{ \ + _SHIFTL(G_MODIFYVTX,24,8)| \ + _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16), \ + (unsigned int)(val) \ +}} +#else +# define gSPModifyVertex(pkt, vtx, where, val) \ + gMoveWd(pkt, G_MW_POINTS, (vtx)*40+(where), val) +# define gsSPModifyVertex(vtx, where, val) \ + gsMoveWd(G_MW_POINTS, (vtx)*40+(where), val) +#endif + +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +/* + * gSPBranchLessZ Branch DL if (vtx.z) less than or equal (zval). + * + * dl = DL branch to + * vtx = Vertex + * zval = Screen depth + * near = Near plane + * far = Far plane + * flag = G_BZ_PERSP or G_BZ_ORTHO + */ + +#define G_BZ_PERSP 0 +#define G_BZ_ORTHO 1 + +#define G_DEPTOZSrg(zval, near, far, flag, zmin, zmax) \ +(((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ? \ + (1.0f-(float)(near)/(float)(zval)) / \ + (1.0f-(float)(near)/(float)(far )) : \ + ((float)(zval) - (float)(near)) / \ + ((float)(far ) - (float)(near))))) * \ + (((int)((zmax) - (zmin)))&~1) + (int)FTOFIX32(zmin)) + +#define G_DEPTOZS(zval, near, far, flag) \ + G_DEPTOZSrg(zval, near, far, flag, 0, G_MAXZ) + +#define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ + _g->words.w1 = (uintptr_t)(dl); \ + _g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \ + _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \ + _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax); \ +} + +#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \ +{{ _SHIFTL(G_RDPHALF_1,24,8), \ + (uintptr_t)(dl), }}, \ +{{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\ + G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), }} + +#define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag) \ + gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, 0, G_MAXZ) +#define gsSPBranchLessZ(dl, vtx, zval, near, far, flag) \ + gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, 0, G_MAXZ) + +/* + * gSPBranchLessZraw Branch DL if (vtx.z) less than or equal (raw zval). + * + * dl = DL branch to + * vtx = Vertex + * zval = Raw value of screen depth + */ +#define gSPBranchLessZraw(pkt, dl, vtx, zval) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ + _g->words.w1 = (uintptr_t)(dl); \ + _g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \ + _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \ + _g->words.w1 = (unsigned int)(zval); \ +} + +#define gsSPBranchLessZraw(dl, vtx, zval) \ +{{ _SHIFTL(G_RDPHALF_1,24,8), \ + (uintptr_t)(dl), }}, \ +{{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\ + (unsigned int)(zval), }} + +/* + * gSPLoadUcode RSP loads specified ucode. + * + * uc_start = ucode text section start + * uc_dstart = ucode data section start + */ +#define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ + _g->words.w1 = (uintptr_t)(uc_dstart); \ + _g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \ + _SHIFTL((int)(uc_dsize)-1,0,16)); \ + _g->words.w1 = (uintptr_t)(uc_start); \ +} + +#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \ +{{ _SHIFTL(G_RDPHALF_1,24,8), \ + (uintptr_t)(uc_dstart), }}, \ +{{ _SHIFTL(G_LOAD_UCODE,24,8)| \ + _SHIFTL((int)(uc_dsize)-1,0,16), \ + (uintptr_t)(uc_start), }} + +#define gSPLoadUcode(pkt, uc_start, uc_dstart) \ + gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) +#define gsSPLoadUcode(uc_start, uc_dstart) \ + gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) + +#define gSPLoadUcodeL(pkt, ucode) \ + gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(&##ucode##TextStart), \ + OS_K0_TO_PHYSICAL(&##ucode##DataStart)) +#define gsSPLoadUcodeL(ucode) \ + gsSPLoadUcode(OS_K0_TO_PHYSICAL(&##ucode##TextStart), \ + OS_K0_TO_PHYSICAL(&##ucode##DataStart)) +#endif + +#ifdef F3DEX_GBI_2 +/* + * gSPDma_io DMA to/from DMEM/IMEM for DEBUG. + */ +#define gSPDma_io(pkt, flag, dmem, dram, size) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \ + _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12); \ + _g->words.w1 = (uintptr_t)(dram); \ +} + +#define gsSPDma_io(flag, dmem, dram, size) \ +{{ \ + _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \ + _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12), \ + (uintptr_t)(dram) \ +}} + +#define gSPDmaRead(pkt,dmem,dram,size) gSPDma_io((pkt),0,(dmem),(dram),(size)) +#define gsSPDmaRead(dmem,dram,size) gsSPDma_io(0,(dmem),(dram),(size)) +#define gSPDmaWrite(pkt,dmem,dram,size) gSPDma_io((pkt),1,(dmem),(dram),(size)) +#define gsSPDmaWrite(dmem,dram,size) gsSPDma_io(1,(dmem),(dram),(size)) +#endif + +/* + * Lighting Macros + */ +#ifdef F3DEX_GBI_2 +# define NUML(n) ((n)*24) +#else +# define NUML(n) (((n)+1)*32 + 0x80000000) +#endif +#define NUMLIGHTS_0 1 +#define NUMLIGHTS_1 1 +#define NUMLIGHTS_2 2 +#define NUMLIGHTS_3 3 +#define NUMLIGHTS_4 4 +#define NUMLIGHTS_5 5 +#define NUMLIGHTS_6 6 +#define NUMLIGHTS_7 7 +/* + * n should be one of: NUMLIGHTS_0, NUMLIGHTS_1, ..., NUMLIGHTS_7 + * NOTE: in addition to the number of directional lights specified, + * there is always 1 ambient light + */ +#define gSPNumLights(pkt, n) \ + gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) +#define gsSPNumLights(n) \ + gsMoveWd( G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) + +#define LIGHT_1 1 +#define LIGHT_2 2 +#define LIGHT_3 3 +#define LIGHT_4 4 +#define LIGHT_5 5 +#define LIGHT_6 6 +#define LIGHT_7 7 +#define LIGHT_8 8 +/* + * l should point to a Light struct + * n should be one of: LIGHT_1, LIGHT_2, ..., LIGHT_8 + * NOTE: the highest numbered light is always the ambient light (eg if there are + * 3 directional lights defined: gsSPNumLights(NUMLIGHTS_3), then lights + * LIGHT_1 through LIGHT_3 will be the directional lights and light + * LIGHT_4 will be the ambient light. + */ +#ifdef F3DEX_GBI_2 +# define gSPLight(pkt, l, n) \ + gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24) +# define gsSPLight(l, n) \ + gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24) +#else /* F3DEX_GBI_2 */ +# define gSPLight(pkt, l, n) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0) +# define gsSPLight(l, n) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0) +#endif /* F3DEX_GBI_2 */ + +/* + * gSPLightColor changes color of light without recalculating light direction + * col is a 32 bit word with r,g,b,a (alpha is ignored) + * n should be one of LIGHT_1, LIGHT_2, ..., LIGHT_8 + */ +#define gSPLightColor(pkt, n, col) \ +{ \ + gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_a##n, col); \ + gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_b##n, col); \ +} +#define gsSPLightColor(n, col) \ + gsMoveWd(G_MW_LIGHTCOL, G_MWO_a##n, col), \ + gsMoveWd(G_MW_LIGHTCOL, G_MWO_b##n, col) + +/* These macros use a structure "name" which is init'd with the gdSPDefLights macros*/ + +#define gSPSetLights0(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_0); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.a,2); \ +} +#define gsSPSetLights0(name) \ + gsSPNumLights(NUMLIGHTS_0), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.a,2) + +#define gSPSetLights1(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_1); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.a,2); \ +} +#define gsSPSetLights1(name) \ + gsSPNumLights(NUMLIGHTS_1), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.a,2) + +#define gSPSetLights2(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_2); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.a,3); \ +} +#define gsSPSetLights2(name) \ + gsSPNumLights(NUMLIGHTS_2), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.a,3) + +#define gSPSetLights3(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_3); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.a,4); \ +} +#define gsSPSetLights3(name) \ + gsSPNumLights(NUMLIGHTS_3), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.a,4) + +#define gSPSetLights4(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_4); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.a,5); \ +} +#define gsSPSetLights4(name) \ + gsSPNumLights(NUMLIGHTS_4), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.a,5) + +#define gSPSetLights5(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_5); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.l[4],5); \ + gSPLight(pkt,&name.a,6); \ +} + +#define gsSPSetLights5(name) \ + gsSPNumLights(NUMLIGHTS_5), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.l[4],5), \ + gsSPLight(&name.a,6) + +#define gSPSetLights6(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_6); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.l[4],5); \ + gSPLight(pkt,&name.l[5],6); \ + gSPLight(pkt,&name.a,7); \ +} + +#define gsSPSetLights6(name) \ + gsSPNumLights(NUMLIGHTS_6), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.l[4],5), \ + gsSPLight(&name.l[5],6), \ + gsSPLight(&name.a,7) + +#define gSPSetLights7(pkt,name) \ +{ \ + gSPNumLights(pkt,NUMLIGHTS_7); \ + gSPLight(pkt,&name.l[0],1); \ + gSPLight(pkt,&name.l[1],2); \ + gSPLight(pkt,&name.l[2],3); \ + gSPLight(pkt,&name.l[3],4); \ + gSPLight(pkt,&name.l[4],5); \ + gSPLight(pkt,&name.l[5],6); \ + gSPLight(pkt,&name.l[6],7); \ + gSPLight(pkt,&name.a,8); \ +} + +#define gsSPSetLights7(name) \ + gsSPNumLights(NUMLIGHTS_7), \ + gsSPLight(&name.l[0],1), \ + gsSPLight(&name.l[1],2), \ + gsSPLight(&name.l[2],3), \ + gsSPLight(&name.l[3],4), \ + gsSPLight(&name.l[4],5), \ + gsSPLight(&name.l[5],6), \ + gsSPLight(&name.l[6],7), \ + gsSPLight(&name.a,8) + +/* + * Reflection/Hiliting Macros + */ +#ifdef F3DEX_GBI_2 +# define gSPLookAtX(pkt, l) \ + gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX) +# define gsSPLookAtX(l) \ + gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX) +# define gSPLookAtY(pkt, l) \ + gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY) +# define gsSPLookAtY(l) \ + gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY) +#else /* F3DEX_GBI_2 */ +# define gSPLookAtX(pkt, l) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX) +# define gsSPLookAtX(l) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX) +# define gSPLookAtY(pkt, l) \ + gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY) +# define gsSPLookAtY(l) \ + gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY) +#endif /* F3DEX_GBI_2 */ + +#define gSPLookAt(pkt, la) \ +{ \ + gSPLookAtX(pkt,la) \ + gSPLookAtY(pkt,(char *)(la)+16) \ +} +#define gsSPLookAt(la) \ + gsSPLookAtX(la), \ + gsSPLookAtY((char *)(la)+16) + +#define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \ + gDPSetTileSize(pkt, tile, (hilite)->h.x1 & 0xfff, (hilite)->h.y1 & 0xfff, \ + ((((width)-1)*4)+(hilite)->h.x1) & 0xfff, ((((height)-1)*4)+(hilite)->h.y1) & 0xfff) + +#define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \ + gDPSetTileSize(pkt, tile, (hilite)->h.x2 & 0xfff, (hilite)->h.y2 & 0xfff, \ + ((((width)-1)*4)+(hilite)->h.x2) & 0xfff, ((((height)-1)*4)+(hilite)->h.y2) & 0xfff) + + +/* + * FOG macros + * fm = z multiplier + * fo = z offset + * FOG FORMULA: alpha(fog) = (eyespace z) * fm + fo CLAMPED 0 to 255 + * note: (eyespace z) ranges -1 to 1 + * + * Alternate method of setting fog: + * min, max: range 0 to 1000: 0=nearplane, 1000=farplane + * min is where fog begins (usually less than max and often 0) + * max is where fog is thickest (usually 1000) + * + */ +#define gSPFogFactor(pkt, fm, fo) \ + gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16))) + +#define gsSPFogFactor(fm, fo) \ + gsMoveWd(G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16))) + +#define gSPFogPosition(pkt, min, max) \ + gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL((128000/((max)-(min))),16,16) | \ + _SHIFTL(((500-(min))*256/((max)-(min))),0,16))) + +#define gsSPFogPosition(min, max) \ + gsMoveWd(G_MW_FOG, G_MWO_FOG, \ + (_SHIFTL((128000/((max)-(min))),16,16) | \ + _SHIFTL(((500-(min))*256/((max)-(min))),0,16))) + +#ifdef F3DEX_GBI_2 +/* + * Macros to turn texture on/off + */ +# define gSPTexture(pkt, s, t, level, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \ + _SHIFTL(BOWTIE_VAL,16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \ + _SHIFTL((on),1,7)); \ + _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \ +} +# define gsSPTexture(s, t, level, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL(BOWTIE_VAL,16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\ + (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \ +}} +/* + * Different version of SPTexture macro, has an additional parameter + * which is currently reserved in the microcode. + */ +# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \ + _SHIFTL((xparam),16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \ + _SHIFTL((on),1,7)); \ + _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \ +} +# define gsSPTextureL(s, t, level, xparam, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL((xparam),16,8) | \ + _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\ + (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \ +}} +#else +/* + * Macros to turn texture on/off + */ +# define gSPTexture(pkt, s, t, level, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)|\ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \ + _SHIFTL((on),0,8)); \ + _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \ +} +# define gsSPTexture(s, t, level, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)| \ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \ + (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \ +}} +/* + * Different version of SPTexture macro, has an additional parameter + * which is currently reserved in the microcode. + */ +# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \ + _SHIFTL((on),0,8)); \ + _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \ +} +# define gsSPTextureL(s, t, level, xparam, tile, on) \ +{{ \ + (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \ + _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \ + (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \ +}} +#endif + +#ifndef F3D_OLD +# define gSPPerspNormalize(pkt, s) gMoveWd(pkt, G_MW_PERSPNORM, 0, (s)) +# define gsSPPerspNormalize(s) gsMoveWd( G_MW_PERSPNORM, 0, (s)) +#else +# define gSPPerspNormalize(pkt, s) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ + _g->words.w1 = (s); \ +} +# define gsSPPerspNormalize(s) \ +{{ \ + _SHIFTL(G_RDPHALF_1, 24, 8), \ + (s) \ +}} +#endif + +#ifdef F3DEX_GBI_2 +# define gSPPopMatrixN(pkt, n, num) gDma2p((pkt),G_POPMTX,(num)*64,64,2,0) +# define gsSPPopMatrixN(n, num) gsDma2p( G_POPMTX,(num)*64,64,2,0) +# define gSPPopMatrix(pkt, n) gSPPopMatrixN((pkt), (n), 1) +# define gsSPPopMatrix(n) gsSPPopMatrixN( (n), 1) +#else /* F3DEX_GBI_2 */ +# define gSPPopMatrix(pkt, n) gImmp1(pkt, G_POPMTX, n) +# define gsSPPopMatrix(n) gsImmp1( G_POPMTX, n) +#endif /* F3DEX_GBI_2 */ + +#define gSPEndDisplayList(pkt) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \ + _g->words.w1 = 0; \ +} + +#define gsSPEndDisplayList() \ +{{ \ + _SHIFTL(G_ENDDL, 24, 8), 0 \ +}} + +#ifdef F3DEX_GBI_2 +/* + * One gSPGeometryMode(pkt,c,s) GBI is equal to these two GBIs. + * + * gSPClearGeometryMode(pkt,c) + * gSPSetGeometryMode(pkt,s) + * + * gSPLoadGeometryMode(pkt, word) sets GeometryMode directly. + */ +#define gSPGeometryMode(pkt, c, s) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = _SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24);\ + _g->words.w1 = (u32)(s); \ +} + +#define gsSPGeometryMode(c, s) \ +{{ \ + (_SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24)),(u32)(s) \ +}} +#define gSPSetGeometryMode(pkt, word) gSPGeometryMode((pkt),0,(word)) +#define gsSPSetGeometryMode(word) gsSPGeometryMode(0,(word)) +#define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt),(word),0) +#define gsSPClearGeometryMode(word) gsSPGeometryMode((word),0) +#define gSPLoadGeometryMode(pkt, word) gSPGeometryMode((pkt),-1,(word)) +#define gsSPLoadGeometryMode(word) gsSPGeometryMode(-1,(word)) +#define gsSPGeometryModeSetFirst(c, s) gsSPGeometryMode(c, s) +#else /* F3DEX_GBI_2 */ +#define gSPSetGeometryMode(pkt, word) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \ + _g->words.w1 = (unsigned int)(word); \ +} + +#define gsSPSetGeometryMode(word) \ +{{ \ + _SHIFTL(G_SETGEOMETRYMODE, 24, 8), (unsigned int)(word) \ +}} + +#define gSPClearGeometryMode(pkt, word) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \ + _g->words.w1 = (unsigned int)(word); \ +} + +#define gsSPClearGeometryMode(word) \ +{{ \ + _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8), (unsigned int)(word) \ +}} + +/* + * gsSPGeometryMode + * In Fast3DEX2 it is better to use this, as the RSP geometry mode + * is able to be set and cleared in a single command. + */ +#define gsSPGeometryMode(c, s) \ + gsSPClearGeometryMode(c), \ + gsSPSetGeometryMode(s) +#define gsSPGeometryModeSetFirst(c, s) \ + gsSPSetGeometryMode(s), \ + gsSPClearGeometryMode(c) +#endif /* F3DEX_GBI_2 */ + +#ifdef F3DEX_GBI_2 +#define gSPSetOtherMode(pkt, cmd, sft, len, data) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)| \ + _SHIFTL((len)-1,0,8)); \ + _g->words.w1 = (unsigned int)(data); \ +} + +#define gsSPSetOtherMode(cmd, sft, len, data) \ +{{ \ + _SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)|_SHIFTL((len)-1,0,8), \ + (unsigned int)(data) \ +}} +#else +#define gSPSetOtherMode(pkt, cmd, sft, len, data) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | \ + _SHIFTL(len, 0, 8)); \ + _g->words.w1 = (unsigned int)(data); \ +} + +#define gsSPSetOtherMode(cmd, sft, len, data) \ +{{ \ + _SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | _SHIFTL(len, 0, 8), \ + (unsigned int)(data) \ +}} +#endif + +/* + * RDP setothermode register commands - register shadowed in RSP + */ +#define gDPPipelineMode(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) +#define gsDPPipelineMode(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) + +#define gDPSetCycleType(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) +#define gsDPSetCycleType(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) + +#define gDPSetTexturePersp(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) +#define gsDPSetTexturePersp(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) + +#define gDPSetTextureDetail(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) +#define gsDPSetTextureDetail(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) + +#define gDPSetTextureLOD(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) +#define gsDPSetTextureLOD(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) + +#define gDPSetTextureLUT(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) +#define gsDPSetTextureLUT(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) + +#define gDPSetTextureFilter(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) +#define gsDPSetTextureFilter(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) + +#define gDPSetTextureConvert(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) +#define gsDPSetTextureConvert(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) + +#define gDPSetCombineKey(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) +#define gsDPSetCombineKey(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) + +#ifndef _HW_VERSION_1 +#define gDPSetColorDither(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) +#define gsDPSetColorDither(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) +#else +#define gDPSetColorDither(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode) +#define gsDPSetColorDither(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode) +#endif + +#ifndef _HW_VERSION_1 +#define gDPSetAlphaDither(pkt, mode) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) +#define gsDPSetAlphaDither(mode) \ + gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) +#endif + +/* 'blendmask' is not supported anymore. + * The bits are reserved for future use. + * Fri May 26 13:45:55 PDT 1995 + */ +#define gDPSetBlendMask(pkt, mask) gDPNoOp(pkt) +#define gsDPSetBlendMask(mask) gsDPNoOp() + +#define gDPSetAlphaCompare(pkt, type) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) +#define gsDPSetAlphaCompare(type) \ + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) + +#define gDPSetDepthSource(pkt, src) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) +#define gsDPSetDepthSource(src) \ + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) + +#define gDPSetRenderMode(pkt, c0, c1) \ + gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \ + (c0) | (c1)) +#define gsDPSetRenderMode(c0, c1) \ + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \ + (c0) | (c1)) + +#define gSetImage(pkt, cmd, fmt, siz, width, i) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12); \ + _g->words.w1 = (uintptr_t)(i); \ +} + +#define gsSetImage(cmd, fmt, siz, width, i) \ +{{ \ + _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12), \ + (uintptr_t)(i) \ +}} + +#define gDPSetColorImage(pkt, f, s, w, i) gSetImage(pkt, G_SETCIMG, f, s, w, i) +#define gsDPSetColorImage(f, s, w, i) gsSetImage(G_SETCIMG, f, s, w, i) + + +/* use these for new code */ +#define gDPSetDepthImage(pkt, i) gSetImage(pkt, G_SETZIMG, 0, 0, 1, i) +#define gsDPSetDepthImage(i) gsSetImage(G_SETZIMG, 0, 0, 1, i) +/* kept for compatibility */ +#define gDPSetMaskImage(pkt, i) gDPSetDepthImage(pkt, i) +#define gsDPSetMaskImage(i) gsDPSetDepthImage(i) + +#define gDPSetTextureImage(pkt, f, s, w, i) gSetImage(pkt, G_SETTIMG, f, s, w, i) +#define gsDPSetTextureImage(f, s, w, i) gsSetImage(G_SETTIMG, f, s, w, i) + +/* + * RDP macros + */ + +#define gDPSetCombine(pkt, muxs0, muxs1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24);\ + _g->words.w1 = (unsigned int)(muxs1); \ +} + +#define gsDPSetCombine(muxs0, muxs1) \ +{{ \ + _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24), \ + (unsigned int)(muxs1) \ +}} + +#define GCCc0w0(saRGB0, mRGB0, saA0, mA0) \ + (_SHIFTL((saRGB0), 20, 4) | _SHIFTL((mRGB0), 15, 5) | \ + _SHIFTL((saA0), 12, 3) | _SHIFTL((mA0), 9, 3)) + +#define GCCc1w0(saRGB1, mRGB1) \ + (_SHIFTL((saRGB1), 5, 4) | _SHIFTL((mRGB1), 0, 5)) + +#define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0) \ + (_SHIFTL((sbRGB0), 28, 4) | _SHIFTL((aRGB0), 15, 3) | \ + _SHIFTL((sbA0), 12, 3) | _SHIFTL((aA0), 9, 3)) + +#define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1) \ + (_SHIFTL((sbRGB1), 24, 4) | _SHIFTL((saA1), 21, 3) | \ + _SHIFTL((mA1), 18, 3) | _SHIFTL((aRGB1), 6, 3) | \ + _SHIFTL((sbA1), 3, 3) | _SHIFTL((aA1), 0, 3)) + +#define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ + a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ + G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ + GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \ + 0, 24); \ + _g->words.w1 = (unsigned int)(GCCc0w1(G_CCMUX_##b0, \ + G_CCMUX_##d0, \ + G_ACMUX_##Ab0, \ + G_ACMUX_##Ad0) | \ + GCCc1w1(G_CCMUX_##b1, \ + G_ACMUX_##Aa1, \ + G_ACMUX_##Ac1, \ + G_CCMUX_##d1, \ + G_ACMUX_##Ab1, \ + G_ACMUX_##Ad1)); \ +} + +#define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ + a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ +{{ \ + _SHIFTL(G_SETCOMBINE, 24, 8) | \ + _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \ + G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \ + GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), 0, 24), \ + (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \ + G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \ + GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \ + G_ACMUX_##Ac1, G_CCMUX_##d1, \ + G_ACMUX_##Ab1, G_ACMUX_##Ad1)) \ +}} + +/* + * SetCombineMode macros are NOT redunant. It allow the C preprocessor + * to substitute single parameter which includes commas in the token and + * rescan for higher parameter count macro substitution. + * + * eg. gsDPSetCombineMode(G_CC_MODULATE, G_CC_MODULATE) turns into + * gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, + * TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0) + */ + +#define gDPSetCombineMode(pkt, a, b) gDPSetCombineLERP(pkt, a, b) +#define gsDPSetCombineMode(a, b) gsDPSetCombineLERP(a, b) + +#define gDPSetColor(pkt, c, d) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(c, 24, 8); \ + _g->words.w1 = (unsigned int)(d); \ +} + +#define gsDPSetColor(c, d) \ +{{ \ + _SHIFTL(c, 24, 8), (unsigned int)(d) \ +}} + +#define DPRGBColor(pkt, cmd, r, g, b, a) \ + gDPSetColor(pkt, cmd, \ + (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) +#define sDPRGBColor(cmd, r, g, b, a) \ + gsDPSetColor(cmd, \ + (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) + +#define gDPSetEnvColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETENVCOLOR, r,g,b,a) +#define gsDPSetEnvColor(r, g, b, a) \ + sDPRGBColor(G_SETENVCOLOR, r,g,b,a) +#define gDPSetBlendColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETBLENDCOLOR, r,g,b,a) +#define gsDPSetBlendColor(r, g, b, a) \ + sDPRGBColor(G_SETBLENDCOLOR, r,g,b,a) +#define gDPSetFogColor(pkt, r, g, b, a) \ + DPRGBColor(pkt, G_SETFOGCOLOR, r,g,b,a) +#define gsDPSetFogColor(r, g, b, a) \ + sDPRGBColor(G_SETFOGCOLOR, r,g,b,a) +#define gDPSetFillColor(pkt, d) \ + gDPSetColor(pkt, G_SETFILLCOLOR, (d)) +#define gsDPSetFillColor(d) \ + gsDPSetColor(G_SETFILLCOLOR, (d)) + +#define gDPSetPrimDepth(pkt, z, dz) \ + gDPSetColor(pkt, G_SETPRIMDEPTH, \ + _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16)) +#define gsDPSetPrimDepth(z, dz) \ + gsDPSetColor(G_SETPRIMDEPTH, _SHIFTL(z, 16, 16) | \ + _SHIFTL(dz, 0, 16)) + +#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \ + _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \ + _g->words.w1 = (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ + _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)); \ +} + +#define gsDPSetPrimColor(m, l, r, g, b, a) \ +{{ \ + (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | \ + _SHIFTL(l, 0, 8)), \ + (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | \ + _SHIFTL(a, 0, 8)) \ +}} + +/* + * gDPSetOtherMode (This is for expert user.) + * + * This command makes all othermode parameters set. + * Do not use this command in the same DL with another g*SPSetOtherMode DLs. + * + * [Usage] + * gDPSetOtherMode(pkt, modeA, modeB) + * + * 'modeA' is described all parameters of GroupA GBI command. + * 'modeB' is also described all parameters of GroupB GBI command. + * + * GroupA: + * gDPPipelineMode, gDPSetCycleType, gSPSetTexturePersp, + * gDPSetTextureDetail, gDPSetTextureLOD, gDPSetTextureLUT, + * gDPSetTextureFilter, gDPSetTextureConvert, gDPSetCombineKey, + * gDPSetColorDither, gDPSetAlphaDither + * + * GroupB: + * gDPSetAlphaCompare, gDPSetDepthSource, gDPSetRenderMode + * + * Use 'OR' operation to get modeA and modeB. + * + * modeA = G_PM_* | G_CYC_* | G_TP_* | G_TD_* | G_TL_* | G_TT_* | G_TF_* + * G_TC_* | G_CK_* | G_CD_* | G_AD_*; + * + * modeB = G_AC_* | G_ZS_* | G_RM_* | G_RM_*2; + */ +#define gDPSetOtherMode(pkt, mode0, mode1) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24);\ + _g->words.w1 = (unsigned int)(mode1); \ +} + +#define gsDPSetOtherMode(mode0, mode1) \ +{{ \ + _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24), \ + (unsigned int)(mode1) \ +}} + +/* + * Texturing macros + */ + +/* These are also defined defined above for Sprite Microcode */ + +#define G_TX_LOADTILE 7 +#define G_TX_RENDERTILE 0 + +#define G_TX_NOMIRROR 0 +#define G_TX_WRAP 0 +#define G_TX_MIRROR 0x1 +#define G_TX_CLAMP 0x2 +#define G_TX_NOMASK 0 +#define G_TX_NOLOD 0 + + +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +/* + * Dxt is the inverse of the number of 64-bit words in a line of + * the texture being loaded using the load_block command. If + * there are any 1's to the right of the 11th fractional bit, + * dxt should be rounded up. The following macros accomplish + * this. The 4b macros are a special case since 4-bit textures + * are loaded as 8-bit textures. Dxt is fixed point 1.11. RJM + */ +#define G_TX_DXT_FRAC 11 + +/* + * For RCP 2.0, the maximum number of texels that can be loaded + * using a load_block command is 2048. In order to load the total + * 4kB of Tmem, change the texel size when loading to be G_IM_SIZ_16b, + * then change the tile to the proper texel size after the load. + * The g*DPLoadTextureBlock macros already do this, so this change + * will be transparent if you use these macros. If you use + * the g*DPLoadBlock macros directly, you will need to handle this + * tile manipulation yourself. RJM. + */ +#ifdef _HW_VERSION_1 +#define G_TX_LDBLK_MAX_TXL 4095 +#else +#define G_TX_LDBLK_MAX_TXL 2047 +#endif /* _HW_VERSION_1 */ + +#define TXL2WORDS(txls, b_txl) MAX(1, ((txls)*(b_txl)/8)) +#define CALC_DXT(width, b_txl) \ + (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / \ + TXL2WORDS(width, b_txl)) + +#define TXL2WORDS_4b(txls) MAX(1, ((txls)/16)) +#define CALC_DXT_4b(width) \ + (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / \ + TXL2WORDS_4b(width)) + +#define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12); \ + _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | \ + _SHIFTL(lrt, 0, 12); \ +} + +#define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \ +{{ \ + _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12), \ + _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | _SHIFTL(lrt, 0, 12)\ +}} + +#define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt) \ + gDPLoadTileGeneric(pkt, G_SETTILESIZE, t, uls, ult, lrs, lrt) +#define gsDPSetTileSize(t, uls, ult, lrs, lrt) \ + gsDPLoadTileGeneric(G_SETTILESIZE, t, uls, ult, lrs, lrt) +#define gDPLoadTile(pkt, t, uls, ult, lrs, lrt) \ + gDPLoadTileGeneric(pkt, G_LOADTILE, t, uls, ult, lrs, lrt) +#define gsDPLoadTile(t, uls, ult, lrs, lrt) \ + gsDPLoadTileGeneric(G_LOADTILE, t, uls, ult, lrs, lrt) + +#define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt, \ + maskt, shiftt, cms, masks, shifts) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) |\ + _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | \ + _SHIFTL(tmem, 0, 9); \ + _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \ + _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \ + _SHIFTL(shiftt, 10, 4) |_SHIFTL(cms, 8, 2) | \ + _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4); \ +} + +#define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \ + maskt, shiftt, cms, masks, shifts) \ +{{ \ + (_SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) | \ + _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | _SHIFTL(tmem, 0, 9)),\ + (_SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \ + _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \ + _SHIFTL(shiftt, 10, 4) | _SHIFTL(cms, 8, 2) | \ + _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4)) \ +}} + +/* + * For RCP 2.0, the maximum number of texels that can be loaded + * using a load_block command is 2048. In order to load the total + * 4kB of Tmem, change the texel size when loading to be G_IM_SIZ_16b, + * then change the tile to the proper texel size after the load. + * The g*DPLoadTextureBlock macros already do this, so this change + * will be transparent if you use these macros. If you use + * the g*DPLoadBlock macros directly, you will need to handle this + * tile manipulation yourself. RJM. + */ +#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \ + _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ + _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) |\ + _SHIFTL(dxt, 0, 12)); \ +} + +#define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \ +{{ \ + (_SHIFTL(G_LOADBLOCK, 24, 8) | _SHIFTL(uls, 12, 12) | \ + _SHIFTL(ult, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | \ + _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) | \ + _SHIFTL(dxt, 0, 12)) \ +}} + +#define gDPLoadTLUTCmd(pkt, tile, count) \ +{ \ + Gfx *_g = (Gfx *)pkt; \ + \ + _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \ + _g->words.w1 = _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10);\ +} + +#define gsDPLoadTLUTCmd(tile, count) \ +{{ \ + _SHIFTL(G_LOADTLUT, 24, 8), \ + _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10) \ +}} + +#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * 1)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* Load fix rww 27jun95 */ +/* The S at the end means odd lines are already word Swapped */ + +#define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * Allow tmem address and render tile to be specified. + * The S at the end means odd lines are already word Swapped + */ +#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * siz##_LINE_BYTES)+7)>>3, tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + + +#define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, \ + (((width) * 1)+7)>>3, 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * allows tmem address to be specified + */ +#define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0, cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ + tmem, G_TX_RENDERTILE, pal, cmt, \ + maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * allows tmem address and render tile to be specified + */ +#define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ + tmem, rtile, pal, cmt, \ + maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * allows tmem address and render tile to be specified + */ +#define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ + gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \ + tmem, rtile, pal, cmt, \ + maskt, shiftt, cms, masks, shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ + masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* Here is the static form of the pre-swapped texture block loading */ +/* See gDPLoadTextureBlockS() for reference. Basically, just don't + calculate DxT, use 0 */ + +#define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, 0 , \ + cmt, maskt,shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* + * Allow tmem address to be specified + */ +#define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * Allow tmem address and render_tile to be specified + */ +#define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * Allow tmem address and render_tile to be specified, useful when loading + * mutilple tiles at a time. + */ +#define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, \ + height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \ + 0 , cmt, maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \ + CALC_DXT(width, siz##_BYTES)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, \ + ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* + * Allows tmem and render tile to be specified. Useful when loading + * several tiles at a time. + * + * Here is the static form of the pre-swapped texture block loading + * See gDPLoadTextureBlockS() for reference. Basically, just don't + * calculate DxT, use 0 + */ + +#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \ + gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0 , \ + cmt, maskt,shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \ + (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), tmem,\ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +#define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* Load fix rww 27jun95 */ +/* The S at the end means odd lines are already word Swapped */ + +#define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, 0 ); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * 4-bit load block. Useful when loading multiple tiles + */ +#define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height,\ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +/* + * 4-bit load block. Allows tmem and render tile to be specified. Useful when + * loading multiple tiles. The S means odd lines are already word swapped. + */ +#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height,\ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, 0 ); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + + +#define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \ + cmt, maskt, shiftt, cms, masks, shifts); \ + gDPLoadSync(pkt); \ + gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \ + (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ +} + +#define gsDPLoadTextureBlock_4b(timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +#define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +/* + * 4-bit load block. Allows tmem address and render tile to be specified. + * Useful when loading multiple tiles. + */ +#define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * 4-bit load block. Allows tmem address and render tile to be specified. + * Useful when loading multiple tiles. S means odd lines are already swapped. + */ +#define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + + +/* + * Allows tmem address to be specified + */ +#define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, \ + pal, cms, cmt, masks, maskt, shifts, shiftt) \ + \ + gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \ + gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \ + maskt, shiftt, cms, masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \ + CALC_DXT_4b(width)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \ + ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC) + +#ifndef _HW_VERSION_1 + +#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \ + uls, ult, lrs, lrt, pal, \ + cms, cmt, masks, maskt, shifts, shiftt) \ +{ \ + gDPSetTextureImage(pkt, fmt, siz, width, timg); \ + gDPSetTile(pkt, fmt, siz, \ + (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, \ + (uls)<>3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, \ + (uls)<>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,\ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, \ + (uls)<>3), \ + tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ + masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<>3), \ + tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, \ + (uls)<>1), timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, \ + masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, \ + (uls)<>1), timg); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \ + gDPPipeSync(pkt); \ + gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \ + (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, \ + (uls)<>1), timg), \ + gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, \ + (uls)<>1), timg), \ + gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), \ + tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ + masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (ult)<<(G_TEXTURE_IMAGE_FRAC), \ + (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \ + (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \ + gsDPPipeSync(), \ + gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), \ + tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, \ + (uls)<words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(uly)*4.0F), 0, 12); \ + _g->words.w1 = _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(lry)*4.0F), 0, 12); \ +} + + +#define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g = (Gfx *)pkt; \ + \ + _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((ulx)), 12, 12) | \ + _SHIFTL((int)((uly)), 0, 12); \ + _g->words.w1 = _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((lrx)), 12, 12) | \ + _SHIFTL((int)((lry)), 0, 12); \ +} + +#define gsDPSetScissor(mode, ulx, uly, lrx, lry) \ +{{ \ + _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(uly)*4.0F), 0, 12), \ + _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \ + _SHIFTL((int)((float)(lry)*4.0F), 0, 12) \ +}} + +#define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry) \ +{{ \ + _SHIFTL(G_SETSCISSOR, 24, 8) | \ + _SHIFTL((int)((ulx)), 12, 12) | \ + _SHIFTL((int)((uly)), 0, 12), \ + _SHIFTL(mode, 24, 2) | \ + _SHIFTL((int)(lrx), 12, 12) | \ + _SHIFTL((int)(lry), 0, 12) \ +}} + +/* Fraction never used in fill */ +#ifdef F3DEX_GBI_2E +#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g0 = (Gfx *)(pkt), *_g1 = (Gfx *)(pkt); \ + _g0->words.w0 = _SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL((lrx), 2, 22); \ + _g0->words.w1 = _SHIFTL((lry), 2, 22); \ + _g1->words.w0 = _SHIFTL((ulx), 2, 22); \ + _g1->words.w1 = _SHIFTL((uly), 2, 22); \ +} +#define gsDPFillRectangle(ulx, uly, lrx, lry) \ +{{ \ + (_SHIFTL(G_FILLRECT, 24, 8) | _SHIFTL((lrx), 2, 22)), \ + _SHIFTL((lry), 2, 22), \ +}}, \ +{{ \ + _SHIFTL((ulx), 2, 22), \ + _SHIFTL((uly), 2, 22), \ +}} +#else +#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL((lrx), 14, 10) | _SHIFTL((lry), 2, 10));\ + _g->words.w1 = (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10));\ +} +#define gsDPFillRectangle(ulx, uly, lrx, lry) \ +{{ \ + (_SHIFTL(G_FILLRECT, 24, 8) | _SHIFTL((lrx), 14, 10) | \ + _SHIFTL((lry), 2, 10)), \ + (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10)) \ +}} +#endif + +/* like gDPFillRectangle but accepts negative arguments */ +#ifndef F3DEX_GBI_2E +#define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ + _SHIFTL(MAX((lrx),0), 14, 10) | \ + _SHIFTL(MAX((lry),0), 2, 10)); \ + _g->words.w1 = (_SHIFTL(MAX((ulx),0), 14, 10) | \ + _SHIFTL(MAX((uly),0), 2, 10)); \ +} +#endif + +#define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) | \ + _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | \ + _SHIFTR(k2, 5, 4)); \ + _g->words.w1 = (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | \ + _SHIFTL(k4, 9, 9) | _SHIFTL(k5, 0, 9)); \ +} + +#define gsDPSetConvert(k0, k1, k2, k3, k4, k5) \ +{{ \ + (_SHIFTL(G_SETCONVERT, 24, 8) | \ + _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | _SHIFTR(k2, 5, 4)), \ + (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | _SHIFTL(k4, 9, 9) | \ + _SHIFTL(k5, 0, 9)) \ +}} + +#define gDPSetKeyR(pkt, cR, sR, wR) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8); \ + _g->words.w1 = (_SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | \ + _SHIFTL(sR, 0, 8)); \ +} + +#define gsDPSetKeyR(cR, sR, wR) \ +{{ \ + _SHIFTL(G_SETKEYR, 24, 8), \ + _SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | _SHIFTL(sR, 0, 8) \ +}} + +#define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24, 8) | \ + _SHIFTL(wG, 12, 12) | _SHIFTL(wB, 0, 12)); \ + _g->words.w1 = (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | \ + _SHIFTL(cB, 8, 8) | _SHIFTL(sB, 0, 8)); \ +} + +#define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB) \ +{{ \ + (_SHIFTL(G_SETKEYGB, 24, 8) | _SHIFTL(wG, 12, 12) | \ + _SHIFTL(wB, 0, 12)), \ + (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | _SHIFTL(cB, 8, 8) | \ + _SHIFTL(sB, 0, 8)) \ +}} + +#define gDPNoParam(pkt, cmd) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8); \ + _g->words.w1 = 0; \ +} + +#define gsDPNoParam(cmd) \ +{{ \ + _SHIFTL(cmd, 24, 8), 0 \ +}} + +#define gDPParam(pkt, cmd, param) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = _SHIFTL(cmd, 24, 8); \ + _g->words.w1 = (param); \ +} + +#define gsDPParam(cmd, param) \ +{{ \ + _SHIFTL(cmd, 24, 8), (param) \ +}} + +/* Notice that textured rectangles are 128-bit commands, therefore + * gsDPTextureRectangle() should not be used in display lists + * under normal circumstances (use gsSPTextureRectangle()). + * That is also why there is no gDPTextureRectangle() macros. + */ +#define gsDPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{{ \ + (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ +}}, \ +{{ \ + _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ + _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +}} + +#define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + if (pkt); \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + _g ++; \ + _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} + +#define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{{ \ + (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \ +}}, \ +{{ \ + _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ + _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +}} + +#define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + if (pkt); \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + _g ++; \ + _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} + +#ifdef F3D_OLD +# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\ +} + +#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +/* like gSPTextureRectangle but accepts negative position arguments */ +# define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(MAX((s16)(xh),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yh),0), 0, 12)); \ + _g->words.w1 = (_SHIFTL((tile), 24, 3) | \ + _SHIFTL(MAX((s16)(xl),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yl),0), 0, 12)); \ + gImmp1(pkt, G_RDPHALF_2, \ + (_SHIFTL(((s) - \ + (((s16)(xl) < 0) ? \ + (((s16)(dsdx) < 0) ? \ + (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \ + (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \ + 16, 16) | \ + _SHIFTL(((t) - \ + (((yl) < 0) ? \ + (((s16)(dtdy) < 0) ? \ + (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \ + (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \ + 0, 16))); \ + gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL((dsdx), 16, 16) | \ + _SHIFTL((dtdy), 0, 16))); \ +} + +# define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \ +} +#elif defined(F3DEX_GBI_2E) +# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g0 = (Gfx *)(pkt), *_g1 = (Gfx *)(pkt), *_g2 = (Gfx *)(pkt); \ + \ + _g0->words.w0 = _SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL((xh), 0, 24); \ + _g0->words.w1 = _SHIFTL((yh), 0, 24); \ + _g1->words.w0 = (_SHIFTL(tile, 24, 3) | _SHIFTL((xl), 0, 24)); \ + _g1->words.w1 = _SHIFTL((yl), 0, 24); \ + _g2->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g2->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} + +# define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{{ \ + (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL((xh), 0, 24)), \ + _SHIFTL((yh), 0, 24), \ +}}, \ +{{ \ + (_SHIFTL((tile), 24, 3) | _SHIFTL((xl), 0, 24)), \ + _SHIFTL((yl), 0, 24), \ +}}, \ +{{ \ + _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \ + _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \ +}} + +# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g0 = (Gfx *)(pkt), *_g1 = (Gfx *)(pkt), *_g2 = (Gfx *)(pkt); \ + \ + _g0->words.w0 = _SHIFTL(G_TEXRECTFLIP, 24, 8) | \ + _SHIFTL((xh), 0, 24); \ + _g0->words.w1 = _SHIFTL((yh), 0, 24); \ + _g1->words.w0 = (_SHIFTL(tile, 24, 3) | _SHIFTL((xl), 0, 24)); \ + _g1->words.w1 = _SHIFTL((yl), 0, 24); \ + _g2->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \ + _g2->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \ +} +#else +# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\ +} + +#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +/* like gSPTextureRectangle but accepts negative position arguments */ +# define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ + _SHIFTL(MAX((s16)(xh),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yh),0), 0, 12)); \ + _g->words.w1 = (_SHIFTL((tile), 24, 3) | \ + _SHIFTL(MAX((s16)(xl),0), 12, 12) | \ + _SHIFTL(MAX((s16)(yl),0), 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, \ + (_SHIFTL(((s) - \ + (((s16)(xl) < 0) ? \ + (((s16)(dsdx) < 0) ? \ + (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \ + (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \ + 16, 16) | \ + _SHIFTL(((t) - \ + (((yl) < 0) ? \ + (((s16)(dtdy) < 0) ? \ + (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \ + (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \ + 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \ + _SHIFTL((dtdy), 0, 16))); \ +} + +# define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ + {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ + _SHIFTL(yh, 0, 12)), \ + (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \ + gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \ + gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) + +# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\ + _SHIFTL(yh, 0, 12)); \ + _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \ + _SHIFTL(yl, 0, 12)); \ + gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ + gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \ +} +#endif + +#define gsDPWord(wordhi, wordlo) \ + gsImmp1(G_RDPHALF_1, (uintptr_t)(wordhi)), \ + gsImmp1(G_RDPHALF_2, (uintptr_t)(wordlo)) + +#define gDPWord(pkt, wordhi, wordlo) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + gImmp1(pkt, G_RDPHALF_1, (uintptr_t)(wordhi)); \ + gImmp1(pkt, G_RDPHALF_2, (uintptr_t)(wordlo)); \ +} + +#define gDPFullSync(pkt) gDPNoParam(pkt, G_RDPFULLSYNC) +#define gsDPFullSync() gsDPNoParam(G_RDPFULLSYNC) +#define gDPTileSync(pkt) gDPNoParam(pkt, G_RDPTILESYNC) +#define gsDPTileSync() gsDPNoParam(G_RDPTILESYNC) +#define gDPPipeSync(pkt) gDPNoParam(pkt, G_RDPPIPESYNC) +#define gsDPPipeSync() gsDPNoParam(G_RDPPIPESYNC) +#define gDPLoadSync(pkt) gDPNoParam(pkt, G_RDPLOADSYNC) +#define gsDPLoadSync() gsDPNoParam(G_RDPLOADSYNC) +#define gDPNoOp(pkt) gDPNoParam(pkt, G_NOOP) +#define gsDPNoOp() gsDPNoParam(G_NOOP) +#define gDPNoOpTag(pkt, tag) gDPParam(pkt, G_NOOP, tag) +#define gsDPNoOpTag(tag) gsDPParam(G_NOOP, tag) + +#endif /* _LANGUAGE_C */ + + +#endif /* _GBI_H_ */ diff --git a/include/PR/gs2dex.h b/include/PR/gs2dex.h new file mode 100644 index 0000000..ced4685 --- /dev/null +++ b/include/PR/gs2dex.h @@ -0,0 +1,392 @@ +/*--------------------------------------------------------------------- + Copyright (C) 1997, Nintendo. + + File gs2dex.h + Coded by Yoshitaka Yasumoto. Jul 31, 1997. + Modified by + Comments Header file for S2DEX ucode. + + $Id: gs2dex.h,v 1.21 1998/05/28 00:14:49 has Exp $ + ---------------------------------------------------------------------*/ + +#ifndef _GS2DEX_H_ +#define _GS2DEX_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include + +/*===========================================================================* + * Macro + *===========================================================================*/ +#define GS_CALC_DXT(line) (((1<< G_TX_DXT_FRAC)-1)/(line)+1) +#define GS_PIX2TMEM(pix, siz) ((pix)>>(4-(siz))) +#define GS_PIX2DXT(pix, siz) GS_CALC_DXT(GS_PIX2TMEM((pix), (siz))) + +/*===========================================================================* + * Data structures for S2DEX microcode + *===========================================================================*/ + +/*---------------------------------------------------------------------------* + * Background + *---------------------------------------------------------------------------*/ +#define G_BGLT_LOADBLOCK 0x0033 +#define G_BGLT_LOADTILE 0xfff4 + +#define G_BG_FLAG_FLIPS 0x01 +#define G_BG_FLAG_FLIPT 0x10 + +/* Non scalable background plane */ +typedef struct { + u16 imageX; /* x-coordinate of upper-left position of texture (u10.5) */ + u16 imageW; /* width of the texture (u10.2) */ + s16 frameX; /* upper-left position of transferred frame (s10.2) */ + u16 frameW; /* width of transferred frame (u10.2) */ + + u16 imageY; /* y-coordinate of upper-left position of texture (u10.5) */ + u16 imageH; /* height of the texture (u10.2) */ + s16 frameY; /* upper-left position of transferred frame (s10.2) */ + u16 frameH; /* height of transferred frame (u10.2) */ + + u64 *imagePtr; /* texture source address on DRAM */ + u16 imageLoad; /* which to use, LoadBlock or LoadTile */ + u8 imageFmt; /* format of texel - G_IM_FMT_* */ + u8 imageSiz; /* size of texel - G_IM_SIZ_* */ + u16 imagePal; /* pallet number */ + u16 imageFlip; /* right & left image inversion (Inverted by G_BG_FLAG_FLIPS) */ + + /* The following is set in the initialization routine guS2DInitBg(). There is no need for the user to set it. */ + u16 tmemW; /* TMEM width and Word size of frame 1 line. + At LoadBlock, GS_PIX2TMEM(imageW/4,imageSiz) + At LoadTile GS_PIX2TMEM(frameW/4,imageSiz)+1 */ + u16 tmemH; /* height of TMEM loadable at a time (s13.2) 4 times value + When the normal texture, 512/tmemW*4 + When the CI texture, 256/tmemW*4 */ + u16 tmemLoadSH; /* SH value + At LoadBlock, tmemSize/2-1 + At LoadTile, tmemW*16-1 */ + u16 tmemLoadTH; /* TH value or Stride value + At LoadBlock, GS_CALC_DXT(tmemW) + At LoadTile, tmemH-1 */ + u16 tmemSizeW; /* skip value of imagePtr for image 1-line + At LoadBlock, tmemW*2 + At LoadTile, GS_PIX2TMEM(imageW/4,imageSiz)*2 */ + u16 tmemSize; /* skip value of imagePtr for 1-loading + = tmemSizeW*tmemH */ +} uObjBg_t; /* 40 bytes */ + +/* Scalable background plane */ +typedef struct { + u16 imageX; /* x-coordinate of upper-left position of texture (u10.5) */ + u16 imageW; /* width of texture (u10.2) */ + s16 frameX; /* upper-left position of transferred frame (s10.2) */ + u16 frameW; /* width of transferred frame (u10.2) */ + + u16 imageY; /* y-coordinate of upper-left position of texture (u10.5) */ + u16 imageH; /* height of texture (u10.2) */ + s16 frameY; /* upper-left position of transferred frame (s10.2) */ + u16 frameH; /* height of transferred frame (u10.2) */ + + u64 *imagePtr; /* texture source address on DRAM */ + u16 imageLoad; /* Which to use, LoadBlock or LoadTile? */ + u8 imageFmt; /* format of texel - G_IM_FMT_* */ + u8 imageSiz; /* size of texel - G_IM_SIZ_* */ + u16 imagePal; /* pallet number */ + u16 imageFlip; /* right & left image inversion (Inverted by G_BG_FLAG_FLIPS) */ + + u16 scaleW; /* scale value of X-direction (u5.10) */ + u16 scaleH; /* scale value of Y-direction (u5.10) */ + s32 imageYorig; /* start point of drawing on image (s20.5) */ + + u8 padding[4]; + +} uObjScaleBg_t; /* 40 bytes */ + +typedef union { + uObjBg_t b; + uObjScaleBg_t s; + long long int force_structure_alignment; +} uObjBg; + +/*---------------------------------------------------------------------------* + * 2D Objects + *---------------------------------------------------------------------------*/ +#define G_OBJ_FLAG_FLIPS 1<<0 /* inversion to S-direction */ +#define G_OBJ_FLAG_FLIPT 1<<4 /* nversion to T-direction */ + +typedef struct { + s16 objX; /* s10.2 OBJ x-coordinate of upper-left end */ + u16 scaleW; /* u5.10 Scaling of u5.10 width direction */ + u16 imageW; /* u10.5 width of u10.5 texture (length of S-direction) */ + u16 paddingX; /* Unused - Always 0 */ + s16 objY; /* s10.2 OBJ y-coordinate of s10.2 OBJ upper-left end */ + u16 scaleH; /* u5.10 Scaling of u5.10 height direction */ + u16 imageH; /* u10.5 height of u10.5 texture (length of T-direction) */ + u16 paddingY; /* Unused - Always 0 */ + u16 imageStride; /* folding width of texel (In units of 64bit word) */ + u16 imageAdrs; /* texture header position in TMEM (In units of 64bit word) */ + u8 imageFmt; /* format of texel - G_IM_FMT_* */ + u8 imageSiz; /* size of texel - G_IM_SIZ_* */ + u8 imagePal; /* pallet number (0-7) */ + u8 imageFlags; /* The display flag - G_OBJ_FLAG_FLIP* */ +} uObjSprite_t; /* 24 bytes */ + +typedef union { + uObjSprite_t s; + long long int force_structure_alignment; +} uObjSprite; + +/*---------------------------------------------------------------------------* + * 2D Matrix + *---------------------------------------------------------------------------*/ +typedef struct { + s32 A, B, C, D; /* s15.16 */ + s16 X, Y; /* s10.2 */ + u16 BaseScaleX; /* u5.10 */ + u16 BaseScaleY; /* u5.10 */ +} uObjMtx_t; /* 24 bytes */ + +typedef union { + uObjMtx_t m; + long long int force_structure_alignment; +} uObjMtx; + +typedef struct { + s16 X, Y; /* s10.2 */ + u16 BaseScaleX; /* u5.10 */ + u16 BaseScaleY; /* u5.10 */ +} uObjSubMtx_t; /* 8 bytes */ + +typedef union { + uObjSubMtx_t m; + long long int force_structure_alignment; +} uObjSubMtx; + +/*---------------------------------------------------------------------------* + * Loading into TMEM + *---------------------------------------------------------------------------*/ +#define G_OBJLT_TXTRBLOCK 0x00001033 +#define G_OBJLT_TXTRTILE 0x00fc1034 +#define G_OBJLT_TLUT 0x00000030 + +#define GS_TB_TSIZE(pix,siz) (GS_PIX2TMEM((pix),(siz))-1) +#define GS_TB_TLINE(pix,siz) (GS_CALC_DXT(GS_PIX2TMEM((pix),(siz)))) + +typedef struct { + u32 type; /* G_OBJLT_TXTRBLOCK divided into types */ + u64 *image; /* texture source address on DRAM */ + u16 tmem; /* loaded TMEM word address (8byteWORD) */ + u16 tsize; /* Texture size, Specified by macro GS_TB_TSIZE() */ + u16 tline; /* width of Texture 1-line, Specified by macro GS_TB_TLINE() */ + u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12) */ + u32 flag; /* STATE flag */ + u32 mask; /* STATE mask */ +} uObjTxtrBlock_t; /* 24 bytes */ + +#define GS_TT_TWIDTH(pix,siz) ((GS_PIX2TMEM((pix), (siz))<<2)-1) +#define GS_TT_THEIGHT(pix,siz) (((pix)<<2)-1) + +typedef struct { + u32 type; /* G_OBJLT_TXTRTILE divided into types */ + u64 *image; /* texture source address on DRAM */ + u16 tmem; /* loaded TMEM word address (8byteWORD)*/ + u16 twidth; /* width of Texture (Specified by macro GS_TT_TWIDTH()) */ + u16 theight; /* height of Texture (Specified by macro GS_TT_THEIGHT()) */ + u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12) */ + u32 flag; /* STATE flag */ + u32 mask; /* STATE mask */ +} uObjTxtrTile_t; /* 24 bytes */ + +#define GS_PAL_HEAD(head) ((head)+256) +#define GS_PAL_NUM(num) ((num)-1) + +typedef struct { + u32 type; /* G_OBJLT_TLUT divided into types */ + u64 *image; /* texture source address on DRAM */ + u16 phead; /* pallet number of load header (Between 256 and 511) */ + u16 pnum; /* loading pallet number -1 */ + u16 zero; /* Assign 0 all the time */ + u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12)*/ + u32 flag; /* STATE flag */ + u32 mask; /* STATE mask */ +} uObjTxtrTLUT_t; /* 24 bytes */ + +typedef union { + uObjTxtrBlock_t block; + uObjTxtrTile_t tile; + uObjTxtrTLUT_t tlut; + long long int force_structure_alignment; +} uObjTxtr; + +/*---------------------------------------------------------------------------* + * Loading into TMEM & 2D Objects + *---------------------------------------------------------------------------*/ +typedef struct { + uObjTxtr txtr; + uObjSprite sprite; +} uObjTxSprite; /* 48 bytes */ + +/*===========================================================================* + * GBI Commands for S2DEX microcode + *===========================================================================*/ +/* GBI Header */ +#ifdef F3DEX_GBI_2 +#define G_OBJ_RECTANGLE_R 0xda +#define G_OBJ_MOVEMEM 0xdc +#define G_RDPHALF_0 0xe4 +#define G_OBJ_RECTANGLE 0x01 +#define G_OBJ_SPRITE 0x02 +#define G_SELECT_DL 0x04 +#define G_OBJ_LOADTXTR 0x05 +#define G_OBJ_LDTX_SPRITE 0x06 +#define G_OBJ_LDTX_RECT 0x07 +#define G_OBJ_LDTX_RECT_R 0x08 +#define G_BG_1CYC 0x09 +#define G_BG_COPY 0x0a +#define G_OBJ_RENDERMODE 0x0b +#else +#define G_BG_1CYC 0x01 +#define G_BG_COPY 0x02 +#define G_OBJ_RECTANGLE 0x03 +#define G_OBJ_SPRITE 0x04 +#define G_OBJ_MOVEMEM 0x05 +#define G_SELECT_DL 0xb0 +#define G_OBJ_RENDERMODE 0xb1 +#define G_OBJ_RECTANGLE_R 0xb2 +#define G_OBJ_LOADTXTR 0xc1 +#define G_OBJ_LDTX_SPRITE 0xc2 +#define G_OBJ_LDTX_RECT 0xc3 +#define G_OBJ_LDTX_RECT_R 0xc4 +#define G_RDPHALF_0 0xe4 +#endif + +/*---------------------------------------------------------------------------* + * Background wrapped screen + *---------------------------------------------------------------------------*/ +#define gSPBgRectangle(pkt, m, mptr) gDma0p((pkt),(m),(mptr),0) +#define gsSPBgRectangle(m, mptr) gsDma0p( (m),(mptr),0) +#define gSPBgRectCopy(pkt, mptr) gSPBgRectangle((pkt), G_BG_COPY, (mptr)) +#define gsSPBgRectCopy(mptr) gsSPBgRectangle( G_BG_COPY, (mptr)) +#define gSPBgRect1Cyc(pkt, mptr) gSPBgRectangle((pkt), G_BG_1CYC, (mptr)) +#define gsSPBgRect1Cyc(mptr) gsSPBgRectangle( G_BG_1CYC, (mptr)) + +/*---------------------------------------------------------------------------* + * 2D Objects + *---------------------------------------------------------------------------*/ +#define gSPObjSprite(pkt, mptr) gDma0p((pkt),G_OBJ_SPRITE, (mptr),0) +#define gsSPObjSprite(mptr) gsDma0p( G_OBJ_SPRITE, (mptr),0) +#define gSPObjRectangle(pkt, mptr) gDma0p((pkt),G_OBJ_RECTANGLE, (mptr),0) +#define gsSPObjRectangle(mptr) gsDma0p( G_OBJ_RECTANGLE, (mptr),0) +#define gSPObjRectangleR(pkt, mptr) gDma0p((pkt),G_OBJ_RECTANGLE_R,(mptr),0) +#define gsSPObjRectangleR(mptr) gsDma0p( G_OBJ_RECTANGLE_R,(mptr),0) + +/*---------------------------------------------------------------------------* + * 2D Matrix + *---------------------------------------------------------------------------*/ +#define gSPObjMatrix(pkt, mptr) gDma1p((pkt),G_OBJ_MOVEMEM,(mptr),0,23) +#define gsSPObjMatrix(mptr) gsDma1p( G_OBJ_MOVEMEM,(mptr),0,23) +#define gSPObjSubMatrix(pkt, mptr) gDma1p((pkt),G_OBJ_MOVEMEM,(mptr),2, 7) +#define gsSPObjSubMatrix(mptr) gsDma1p( G_OBJ_MOVEMEM,(mptr),2, 7) + +/*---------------------------------------------------------------------------* + * Loading into TMEM + *---------------------------------------------------------------------------*/ +#define gSPObjLoadTxtr(pkt, tptr) gDma0p((pkt),G_OBJ_LOADTXTR, (tptr),23) +#define gsSPObjLoadTxtr(tptr) gsDma0p( G_OBJ_LOADTXTR, (tptr),23) +#define gSPObjLoadTxSprite(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_SPRITE,(tptr),47) +#define gsSPObjLoadTxSprite(tptr) gsDma0p( G_OBJ_LDTX_SPRITE,(tptr),47) +#define gSPObjLoadTxRect(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_RECT, (tptr),47) +#define gsSPObjLoadTxRect(tptr) gsDma0p( G_OBJ_LDTX_RECT, (tptr),47) +#define gSPObjLoadTxRectR(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_RECT_R,(tptr),47) +#define gsSPObjLoadTxRectR(tptr) gsDma0p( G_OBJ_LDTX_RECT_R,(tptr),47) + +/*---------------------------------------------------------------------------* + * Select Display List + *---------------------------------------------------------------------------*/ +#define gSPSelectDL(pkt, mptr, sid, flag, mask) \ +{ gDma1p((pkt), G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \ + gDma1p((pkt), G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_PUSH); } +#define gsSPSelectDL(mptr, sid, flag, mask) \ +{ gsDma1p(G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \ + gsDma1p(G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_PUSH); } +#define gSPSelectBranchDL(pkt, mptr, sid, flag, mask) \ +{ gDma1p((pkt), G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \ + gDma1p((pkt), G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_NOPUSH); } +#define gsSPSelectBranchDL(mptr, sid, flag, mask) \ +{ gsDma1p(G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \ + gsDma1p(G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_NOPUSH); } + +/*---------------------------------------------------------------------------* + * Set general status + *---------------------------------------------------------------------------*/ +#define G_MW_GENSTAT 0x08 /* Note that it is the same value of G_MW_FOG */ + +#define gSPSetStatus(pkt, sid, val) \ + gMoveWd((pkt), G_MW_GENSTAT, (sid), (val)) +#define gsSPSetStatus(sid, val) \ + gsMoveWd( G_MW_GENSTAT, (sid), (val)) + +/*---------------------------------------------------------------------------* + * Set Object Render Mode + *---------------------------------------------------------------------------*/ +#define G_OBJRM_NOTXCLAMP 0x01 +#define G_OBJRM_XLU 0x02 /* Ignored */ +#define G_OBJRM_ANTIALIAS 0x04 /* Ignored */ +#define G_OBJRM_BILERP 0x08 +#define G_OBJRM_SHRINKSIZE_1 0x10 +#define G_OBJRM_SHRINKSIZE_2 0x20 +#define G_OBJRM_WIDEN 0x40 + +#define gSPObjRenderMode(pkt, mode) gImmp1((pkt),G_OBJ_RENDERMODE,(mode)) +#define gsSPObjRenderMode(mode) gsImmp1( G_OBJ_RENDERMODE,(mode)) + +/*===========================================================================* + * Render Mode Macro + *===========================================================================*/ +#define RM_RA_SPRITE(clk) \ + AA_EN | CVG_DST_CLAMP | \ + CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ + GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) + +#define G_RM_SPRITE G_RM_OPA_SURF +#define G_RM_SPRITE2 G_RM_OPA_SURF2 +#define G_RM_RA_SPRITE RM_RA_SPRITE(1) +#define G_RM_RA_SPRITE2 RM_RA_SPRITE(2) +#define G_RM_AA_SPRITE G_RM_AA_TEX_TERR +#define G_RM_AA_SPRITE2 G_RM_AA_TEX_TERR2 +#define G_RM_XLU_SPRITE G_RM_XLU_SURF +#define G_RM_XLU_SPRITE2 G_RM_XLU_SURF2 +#define G_RM_AA_XLU_SPRITE G_RM_AA_XLU_SURF +#define G_RM_AA_XLU_SPRITE2 G_RM_AA_XLU_SURF2 + +/*===========================================================================* + * External functions + *===========================================================================*/ +extern u64 gspS2DEX_fifoTextStart[], gspS2DEX_fifoTextEnd[]; +extern u64 gspS2DEX_fifoDataStart[], gspS2DEX_fifoDataEnd[]; +extern u64 gspS2DEX_fifo_dTextStart[], gspS2DEX_fifo_dTextEnd[]; +extern u64 gspS2DEX_fifo_dDataStart[], gspS2DEX_fifo_dDataEnd[]; +extern u64 gspS2DEX2_fifoTextStart[], gspS2DEX2_fifoTextEnd[]; +extern u64 gspS2DEX2_fifoDataStart[], gspS2DEX2_fifoDataEnd[]; +extern u64 gspS2DEX2_xbusTextStart[], gspS2DEX2_xbusTextEnd[]; +extern u64 gspS2DEX2_xbusDataStart[], gspS2DEX2_xbusDataEnd[]; +extern void guS2DInitBg(uObjBg *); + +#ifdef F3DEX_GBI_2 +# define guS2DEmuBgRect1Cyc guS2D2EmuBgRect1Cyc /*Wrapper*/ +# define guS2DEmuSetScissor guS2D2EmuSetScissor /*Wrapper*/ + extern void guS2D2EmuSetScissor(u32, u32, u32, u32, u8); + extern void guS2D2EmuBgRect1Cyc(Gfx **, uObjBg *); +#else + extern void guS2DEmuSetScissor(u32, u32, u32, u32, u8); + extern void guS2DEmuBgRect1Cyc(Gfx **, uObjBg *); +#endif + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif +#endif /* _GS2DEX_H_ */ + +/*======== End of gs2dex.h ========*/ diff --git a/include/ultra64/gu.h b/include/PR/gu.h similarity index 75% rename from include/ultra64/gu.h rename to include/PR/gu.h index d2ff3a8..6527777 100644 --- a/include/ultra64/gu.h +++ b/include/PR/gu.h @@ -1,6 +1,9 @@ #ifndef _ULTRA64_GU_H_ #define _ULTRA64_GU_H_ +#include +#include + #define GU_PI 3.1415926 /* Functions */ @@ -18,4 +21,9 @@ void guMtxIdent(Mtx *m); void guMtxIdentF(float mf[4][4]); void guMtxL2F(float mf[4][4], Mtx *m); void guNormalize(float *, float *, float *); + +/* Used only in Fast3DEX2 */ +void guLookAtReflect (Mtx *m, LookAt *l, float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp); #endif diff --git a/include/PR/libaudio.h b/include/PR/libaudio.h new file mode 100644 index 0000000..3fffe9c --- /dev/null +++ b/include/PR/libaudio.h @@ -0,0 +1,48 @@ +#ifndef _ULTRA64_LIBAUDIO_H_ +#define _ULTRA64_LIBAUDIO_H_ + +#include "abi.h" + +typedef struct +{ + u8 *offset; + s32 len; +#ifdef VERSION_SH + s8 magic[2]; // tbl: 0x0204, otherwise: 0x0203 + + // for ctl (else zeros): + union { + // unused, just for clarification (big endian) + struct { + u8 bank; + u8 ff; + u8 numInstruments; + u8 numDrums; + } as_u8; + + // used + struct { + s16 bankAndFf; + s16 numInstrumentsAndDrums; + } as_s16; + } ctl; +#endif +} ALSeqData; + +typedef struct +{ +#ifndef VERSION_SH + s16 revision; +#endif + s16 seqCount; +#ifdef VERSION_SH + s16 unk2; + u8 *data; + s32 pad[2]; +#endif + ALSeqData seqArray[1]; +} ALSeqFile; + +void alSeqFileNew(ALSeqFile *f, u8 *base); + +#endif diff --git a/include/ultra64/libultra.h b/include/PR/libultra.h similarity index 93% rename from include/ultra64/libultra.h rename to include/PR/libultra.h index 033a8d8..f0dab41 100644 --- a/include/ultra64/libultra.h +++ b/include/PR/libultra.h @@ -12,6 +12,7 @@ extern u32 osTvType; extern u32 osRomBase; extern u32 osResetType; +extern u32 osMemSize; extern u8 osAppNmiBuffer[64]; -extern u64 osClockRate; + #endif /* _LIBULTRA_H */ diff --git a/include/PR/mbi.h b/include/PR/mbi.h new file mode 100644 index 0000000..6b3cebf --- /dev/null +++ b/include/PR/mbi.h @@ -0,0 +1,102 @@ +#ifndef _MBI_H_ +#define _MBI_H_ + +#include "platform_info.h" + +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/************************************************************************** + * + * $Revision: 1.136 $ + * $Date: 1999/01/05 13:04:00 $ + * $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/mbi.h,v $ + * + **************************************************************************/ + +/* + * Header file for the Media Binary Interface + * + * NOTE: This file is included by the RSP microcode, so any C-specific + * constructs must be bracketed by #ifdef _LANGUAGE_C + * + */ + + +/* + * the SHIFT macros are used to build display list commands, inserting + * bit-fields into a 32-bit word. They take a value, a shift amount, + * and a width. + * + * For the left shift, the lower bits of the value are masked, + * then shifted left. + * + * For the right shift, the value is shifted right, then the lower bits + * are masked. + * + * (NOTE: _SHIFTL(v, 0, 32) won't work, just use an assignment) + * + */ +#define _SHIFTL(v, s, w) \ + ((unsigned int) (((unsigned int)(v) & ((0x01 << (w)) - 1)) << (s))) +#define _SHIFTR(v, s, w) \ + ((unsigned int)(((unsigned int)(v) >> (s)) & ((0x01 << (w)) - 1))) + +#define _SHIFT _SHIFTL /* old, for compatibility only */ + +#define G_ON (1) +#define G_OFF (0) + +/************************************************************************** + * + * Graphics Binary Interface + * + **************************************************************************/ + +#include + +/************************************************************************** + * + * Audio Binary Interface + * + **************************************************************************/ + +#include + +/************************************************************************** + * + * Task list + * + **************************************************************************/ + +#define M_GFXTASK 1 +#define M_AUDTASK 2 +#define M_VIDTASK 3 +#define M_HVQTASK 6 +#define M_HVQMTASK 7 + +/************************************************************************** + * + * Segment macros and definitions + * + **************************************************************************/ + +#define NUM_SEGMENTS (16) +#define SEGMENT_OFFSET(a) ((unsigned int)(a) & 0x00ffffff) +#define SEGMENT_NUMBER(a) (((unsigned int)(a) << 4) >> 28) +#define SEGMENT_ADDR(num, off) (((num) << 24) + (off)) + +#ifndef NULL +#define NULL 0 +#endif + +#endif /* !_MBI_H_ */ diff --git a/include/PR/os_ai.h b/include/PR/os_ai.h new file mode 100644 index 0000000..f89d87c --- /dev/null +++ b/include/PR/os_ai.h @@ -0,0 +1,92 @@ + +/*==================================================================== + * os_ai.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_ai.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:04 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_AI_H_ +#define _OS_AI_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Audio interface (Ai) */ +extern u32 osAiGetStatus(void); +extern u32 osAiGetLength(void); +extern s32 osAiSetFrequency(u32); +extern s32 osAiSetNextBuffer(void *, u32); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_AI_H_ */ diff --git a/include/PR/os_cache.h b/include/PR/os_cache.h new file mode 100644 index 0000000..93d53c5 --- /dev/null +++ b/include/PR/os_cache.h @@ -0,0 +1,96 @@ + +/*==================================================================== + * os_cache.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_cache.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:04 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_CACHE_H_ +#define _OS_CACHE_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + +#define OS_DCACHE_ROUNDUP_ADDR(x) (void *)(((((u32)(x)+0xf)/0x10)*0x10)) +#define OS_DCACHE_ROUNDUP_SIZE(x) (u32)(((((u32)(x)+0xf)/0x10)*0x10)) + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Cache operations and macros */ + +extern void osInvalDCache(void *, size_t); +extern void osInvalICache(void *, size_t); +extern void osWritebackDCache(void *, size_t); +extern void osWritebackDCacheAll(void); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_CACHE_H_ */ diff --git a/include/PR/os_cont.h b/include/PR/os_cont.h new file mode 100644 index 0000000..15ee60f --- /dev/null +++ b/include/PR/os_cont.h @@ -0,0 +1,207 @@ + +/*==================================================================== + * os_cont.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_cont.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:05 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_CONT_H_ +#define _OS_CONT_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include +#include "os_message.h" + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + +/* + * Structure for controllers + */ + +typedef struct { + u16 type; /* Controller Type */ + u8 status; /* Controller status */ + u8 errnum; +}OSContStatus; + +typedef struct { + u16 button; + s8 stick_x; /* -80 <= stick_x <= 80 */ + s8 stick_y; /* -80 <= stick_y <= 80 */ + u8 errnum; +} OSContPad; + +typedef struct { + void *address; /* Ram pad Address: 11 bits */ + u8 databuffer[32]; /* address of the data buffer */ + u8 addressCrc; /* CRC code for address */ + u8 dataCrc; /* CRC code for data */ + u8 errnum; +} OSContRamIo; + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* + * Controllers number + */ + +#ifndef _HW_VERSION_1 +#define MAXCONTROLLERS 4 +#else +#define MAXCONTROLLERS 6 +#endif + +/* controller errors */ +#define CONT_NO_RESPONSE_ERROR 0x8 +#define CONT_OVERRUN_ERROR 0x4 +#ifdef _HW_VERSION_1 +#define CONT_FRAME_ERROR 0x2 +#define CONT_COLLISION_ERROR 0x1 +#endif + +/* Controller type */ + +#define CONT_ABSOLUTE 0x0001 +#define CONT_RELATIVE 0x0002 +#define CONT_JOYPORT 0x0004 +#define CONT_EEPROM 0x8000 +#define CONT_EEP16K 0x4000 +#define CONT_TYPE_MASK 0x1f07 +#define CONT_TYPE_NORMAL 0x0005 +#define CONT_TYPE_MOUSE 0x0002 +#define CONT_TYPE_VOICE 0x0100 + +/* Controller status */ + +#define CONT_CARD_ON 0x01 +#define CONT_CARD_PULL 0x02 +#define CONT_ADDR_CRC_ER 0x04 +#define CONT_EEPROM_BUSY 0x80 + +/* Buttons */ + +#define CONT_A 0x8000 +#define CONT_B 0x4000 +#define CONT_G 0x2000 +#define CONT_START 0x1000 +#define CONT_UP 0x0800 +#define CONT_DOWN 0x0400 +#define CONT_LEFT 0x0200 +#define CONT_RIGHT 0x0100 +#define CONT_L 0x0020 +#define CONT_R 0x0010 +#define CONT_E 0x0008 +#define CONT_D 0x0004 +#define CONT_C 0x0002 +#define CONT_F 0x0001 + +/* Nintendo's official button names */ + +#define A_BUTTON CONT_A +#define B_BUTTON CONT_B +#define L_TRIG CONT_L +#define R_TRIG CONT_R +#define Z_TRIG CONT_G +#define START_BUTTON CONT_START +#define U_JPAD CONT_UP +#define L_JPAD CONT_LEFT +#define R_JPAD CONT_RIGHT +#define D_JPAD CONT_DOWN +#define U_CBUTTONS CONT_E +#define L_CBUTTONS CONT_C +#define R_CBUTTONS CONT_F +#define D_CBUTTONS CONT_D + +/* Controller error number */ + +#define CONT_ERR_NO_CONTROLLER PFS_ERR_NOPACK /* 1 */ +#define CONT_ERR_CONTRFAIL CONT_OVERRUN_ERROR /* 4 */ +#define CONT_ERR_INVALID PFS_ERR_INVALID /* 5 */ +#define CONT_ERR_DEVICE PFS_ERR_DEVICE /* 11 */ +#define CONT_ERR_NOT_READY 12 +#define CONT_ERR_VOICE_MEMORY 13 +#define CONT_ERR_VOICE_WORD 14 +#define CONT_ERR_VOICE_NO_RESPONSE 15 + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Controller interface */ + +extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *); +extern s32 osContReset(OSMesgQueue *, OSContStatus *); +extern s32 osContStartQuery(OSMesgQueue *); +extern s32 osContStartReadData(OSMesgQueue *); +#ifndef _HW_VERSION_1 +extern s32 osContSetCh(u8); +#endif +extern void osContGetQuery(OSContStatus *); +extern void osContGetReadData(OSContPad *); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_CONT_H_ */ diff --git a/include/PR/os_eeprom.h b/include/PR/os_eeprom.h new file mode 100644 index 0000000..b3bca81 --- /dev/null +++ b/include/PR/os_eeprom.h @@ -0,0 +1,107 @@ + +/*==================================================================== + * os_eeprom.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_eeprom.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:06 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_EEPROM_H_ +#define _OS_EEPROM_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include +#include "os_message.h" + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* EEPROM TYPE */ + +#define EEPROM_TYPE_4K 0x01 +#define EEPROM_TYPE_16K 0x02 + +/* definition for EEPROM */ + +#define EEPROM_MAXBLOCKS 64 +#define EEP16K_MAXBLOCKS 256 +#define EEPROM_BLOCK_SIZE 8 + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* EEPROM interface */ + +extern s32 osEepromProbe(OSMesgQueue *); +extern s32 osEepromRead(OSMesgQueue *, u8, u8 *); +extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *); +extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int); +extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_EEPROM_H_ */ diff --git a/include/PR/os_exception.h b/include/PR/os_exception.h new file mode 100644 index 0000000..245e5e6 --- /dev/null +++ b/include/PR/os_exception.h @@ -0,0 +1,119 @@ + +/*==================================================================== + * os_exception.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_exception.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:07 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_EXCEPTION_H_ +#define _OS_EXCEPTION_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + +typedef u32 OSIntMask; +typedef u32 OSHWIntr; + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* Flags for debugging purpose */ + +#define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */ +#define OS_FLAG_FAULT 2 /* CPU fault has occurred */ + +/* Interrupt masks */ + +#define OS_IM_NONE 0x00000001 +#define OS_IM_SW1 0x00000501 +#define OS_IM_SW2 0x00000601 +#define OS_IM_CART 0x00000c01 +#define OS_IM_PRENMI 0x00001401 +#define OS_IM_RDBWRITE 0x00002401 +#define OS_IM_RDBREAD 0x00004401 +#define OS_IM_COUNTER 0x00008401 +#define OS_IM_CPU 0x0000ff01 +#define OS_IM_SP 0x00010401 +#define OS_IM_SI 0x00020401 +#define OS_IM_AI 0x00040401 +#define OS_IM_VI 0x00080401 +#define OS_IM_PI 0x00100401 +#define OS_IM_DP 0x00200401 +#define OS_IM_ALL 0x003fff01 +#define RCP_IMASK 0x003f0000 +#define RCP_IMASKSHIFT 16 + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Interrupt operations */ + +extern OSIntMask osGetIntMask(void); +extern OSIntMask osSetIntMask(OSIntMask); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_EXCEPTION_H_ */ diff --git a/include/ultra64/os_internal.h b/include/PR/os_internal.h similarity index 75% rename from include/ultra64/os_internal.h rename to include/PR/os_internal.h index 067ebaa..e38f110 100644 --- a/include/ultra64/os_internal.h +++ b/include/PR/os_internal.h @@ -1,16 +1,19 @@ #ifndef _ULTRA64_OS_INTERNAL_H_ #define _ULTRA64_OS_INTERNAL_H_ +#include "PR/os_message.h" /* Internal functions used by the operating system */ /* Do not include this header in application code */ /* Variables */ -//extern u64 osClockRate; +extern u64 osClockRate; /* Functions */ /*u32 __osProbeTLB(void *); u32 __osDisableInt(void); void __osRestoreInt(u32);*/ +OSThread *__osGetCurrFaultedThread(void); + #endif diff --git a/include/PR/os_libc.h b/include/PR/os_libc.h new file mode 100644 index 0000000..94111c0 --- /dev/null +++ b/include/PR/os_libc.h @@ -0,0 +1,10 @@ +#ifndef _OS_LIBC_H_ +#define _OS_LIBC_H_ + +#include "ultratypes.h" + +// Old deprecated functions from strings.h, replaced by memcpy/memset. +extern void bcopy(const void *, void *, size_t); +extern void bzero(void *, size_t); + +#endif /* !_OS_LIBC_H_ */ diff --git a/include/PR/os_message.h b/include/PR/os_message.h new file mode 100644 index 0000000..71e7698 --- /dev/null +++ b/include/PR/os_message.h @@ -0,0 +1,164 @@ + +/*==================================================================== + * os_message.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_message.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:15 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_MESSAGE_H_ +#define _OS_MESSAGE_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include +#include + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + +typedef u32 OSEvent; + +/* + * Structure for message + */ +typedef void * OSMesg; + +/* + * Structure for message queue + */ +typedef struct OSMesgQueue_s { + OSThread *mtqueue; /* Queue to store threads blocked + on empty mailboxes (receive) */ + OSThread *fullqueue; /* Queue to store threads blocked + on full mailboxes (send) */ + s32 validCount; /* Contains number of valid message */ + s32 first; /* Points to first valid message */ + s32 msgCount; /* Contains total # of messages */ + OSMesg *msg; /* Points to message buffer array */ +} OSMesgQueue; + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* Events */ +#ifdef _FINALROM +#define OS_NUM_EVENTS 15 +#else +#define OS_NUM_EVENTS 23 +#endif + +#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */ +#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */ +#define OS_EVENT_CART 2 /* Cartridge interrupt: used by rmon */ +#define OS_EVENT_COUNTER 3 /* Counter int: used by VI/Timer Mgr */ +#define OS_EVENT_SP 4 /* SP task done interrupt */ +#define OS_EVENT_SI 5 /* SI (controller) interrupt */ +#define OS_EVENT_AI 6 /* AI interrupt */ +#define OS_EVENT_VI 7 /* VI interrupt: used by VI/Timer Mgr */ +#define OS_EVENT_PI 8 /* PI interrupt: used by PI Manager */ +#define OS_EVENT_DP 9 /* DP full sync interrupt */ +#define OS_EVENT_CPU_BREAK 10 /* CPU breakpoint: used by rmon */ +#define OS_EVENT_SP_BREAK 11 /* SP breakpoint: used by rmon */ +#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */ +#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */ +#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */ +#ifndef _FINALROM +#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */ +#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */ +#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */ +#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */ +#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */ +#define OS_EVENT_RDB_DBG_DONE 20 +#define OS_EVENT_RDB_FLUSH_PROF 21 +#define OS_EVENT_RDB_ACK_PROF 22 +#endif + +/* Flags to turn blocking on/off when sending/receiving message */ + +#define OS_MESG_NOBLOCK 0 +#define OS_MESG_BLOCK 1 + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + +/* Get count of valid messages in queue */ +#define MQ_GET_COUNT(mq) ((mq)->validCount) + +/* Figure out if message queue is empty or full */ +#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0) +#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount) + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Message operations */ + +extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32); +extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32); +extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32); +extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32); + +/* Event operations */ + +extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_MESSAGE_H_ */ diff --git a/include/ultra64/os_misc.h b/include/PR/os_misc.h similarity index 68% rename from include/ultra64/os_misc.h rename to include/PR/os_misc.h index fecc4e7..71e111f 100644 --- a/include/ultra64/os_misc.h +++ b/include/PR/os_misc.h @@ -1,11 +1,11 @@ #ifndef _ULTRA64_OS_MISC_H_ #define _ULTRA64_OS_MISC_H_ - +#include /* Miscellaneous OS functions */ void osInitialize(void); u32 osGetCount(void); -u32 osVirtualToPhysical(void *); +uintptr_t osVirtualToPhysical(void *); #endif diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h new file mode 100644 index 0000000..e1a136f --- /dev/null +++ b/include/PR/os_pi.h @@ -0,0 +1,86 @@ +#ifndef _ULTRA64_PI_H_ +#define _ULTRA64_PI_H_ +#include + +/* Ultra64 Parallel Interface */ + +/* Types */ + +typedef struct { +#if !defined(VERSION_EU) + u32 errStatus; +#endif + void *dramAddr; + void *C2Addr; + u32 sectorSize; + u32 C1ErrNum; + u32 C1ErrSector[4]; +} __OSBlockInfo; + +typedef struct { + u32 cmdType; // 0 + u16 transferMode; // 4 + u16 blockNum; // 6 + s32 sectorNum; // 8 + uintptr_t devAddr; // c +#if defined(VERSION_EU) + u32 errStatus; //error status added moved to blockinfo +#endif + u32 bmCtlShadow; // 10 + u32 seqCtlShadow; // 14 + __OSBlockInfo block[2]; // 18 +} __OSTranxInfo; + +typedef struct OSPiHandle_s { + struct OSPiHandle_s *next; + u8 type; + u8 latency; + u8 pageSize; + u8 relDuration; + u8 pulse; + u8 domain; + u32 baseAddress; + u32 speed; + __OSTranxInfo transferInfo; +} OSPiHandle; + +typedef struct { + u8 type; + uintptr_t address; +} OSPiInfo; + +typedef struct { + u16 type; + u8 pri; + u8 status; + OSMesgQueue *retQueue; +} OSIoMesgHdr; + +typedef struct { + /*0x00*/ OSIoMesgHdr hdr; + /*0x08*/ void *dramAddr; + /*0x0C*/ uintptr_t devAddr; + /*0x10*/ size_t size; + OSPiHandle *piHandle; // from the official definition +} OSIoMesg; + +/* Definitions */ + +#define OS_READ 0 // device -> RDRAM +#define OS_WRITE 1 // device <- RDRAM + +#define OS_MESG_PRI_NORMAL 0 +#define OS_MESG_PRI_HIGH 1 + +/* Functions */ + +s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr, + size_t nbytes, OSMesgQueue *mq); +void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt); +OSMesgQueue *osPiGetCmdQueue(void); +s32 osPiWriteIo(uintptr_t devAddr, u32 data); +s32 osPiReadIo(uintptr_t devAddr, u32 *data); + +s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size); +s32 osEPiRawStartDma(OSPiHandle *piHandle, s32 dir, u32 cart_addr, void *dram_addr, size_t size); +#endif diff --git a/include/PR/os_rdp.h b/include/PR/os_rdp.h new file mode 100644 index 0000000..6b3d288 --- /dev/null +++ b/include/PR/os_rdp.h @@ -0,0 +1,92 @@ + +/*==================================================================== + * os_rdp.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_rdp.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:16 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_RDP_H_ +#define _OS_RDP_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Display processor interface (Dp) */ +extern u32 osDpGetStatus(void); +extern void osDpSetStatus(u32); +extern void osDpGetCounters(u32 *); +extern s32 osDpSetNextBuffer(void *, u64); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_RDP_H_ */ diff --git a/include/ultra64/thread.h b/include/PR/os_thread.h similarity index 98% rename from include/ultra64/thread.h rename to include/PR/os_thread.h index 791701c..76e528b 100644 --- a/include/ultra64/thread.h +++ b/include/PR/os_thread.h @@ -1,6 +1,6 @@ #ifndef _ULTRA64_THREAD_H_ #define _ULTRA64_THREAD_H_ - +#include "ultratypes.h" /* Recommended priorities for system threads */ #define OS_PRIORITY_MAX 255 #define OS_PRIORITY_VIMGR 254 diff --git a/include/ultra64/time.h b/include/PR/os_time.h similarity index 73% rename from include/ultra64/time.h rename to include/PR/os_time.h index 1507ed3..ecb05d6 100644 --- a/include/ultra64/time.h +++ b/include/PR/os_time.h @@ -1,6 +1,8 @@ #ifndef _ULTRA64_TIME_H_ #define _ULTRA64_TIME_H_ -#include "message.h" + +#include +#include /* Types */ @@ -20,6 +22,6 @@ typedef u64 OSTime; OSTime osGetTime(void); void osSetTime(OSTime time); -u32 osSetTimer(OSTimer *, OSTime, u64, OSMesgQueue *, OSMesg); +u32 osSetTimer(OSTimer *, OSTime, OSTime, OSMesgQueue *, OSMesg); #endif diff --git a/include/PR/os_tlb.h b/include/PR/os_tlb.h new file mode 100644 index 0000000..2cdd5c9 --- /dev/null +++ b/include/PR/os_tlb.h @@ -0,0 +1,107 @@ + +/*==================================================================== + * os_tlb.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/*---------------------------------------------------------------------* + Copyright (C) 1998 Nintendo. (Originated by SGI) + + $RCSfile: os_tlb.h,v $ + $Revision: 1.1 $ + $Date: 1998/10/09 08:01:20 $ + *---------------------------------------------------------------------*/ + +#ifndef _OS_TLB_H_ +#define _OS_TLB_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + +typedef u32 OSPageMask; + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* + * Page size argument for TLB routines + */ +#define OS_PM_4K 0x0000000 +#define OS_PM_16K 0x0006000 +#define OS_PM_64K 0x001e000 +#define OS_PM_256K 0x007e000 +#define OS_PM_1M 0x01fe000 +#define OS_PM_4M 0x07fe000 +#define OS_PM_16M 0x1ffe000 + + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + + +/************************************************************************** + * + * Extern variables + * + */ + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* TLB management routines */ + +extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32); +extern void osMapTLBRdb(void); +extern void osUnmapTLB(s32); +extern void osUnmapTLBAll(void); +extern void osSetTLBASID(s32); + + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_TLB_H_ */ diff --git a/include/ultra64/vi.h b/include/PR/os_vi.h similarity index 71% rename from include/ultra64/vi.h rename to include/PR/os_vi.h index 6433a1d..9ef8054 100644 --- a/include/ultra64/vi.h +++ b/include/PR/os_vi.h @@ -1,6 +1,9 @@ #ifndef _ULTRA64_VI_H_ #define _ULTRA64_VI_H_ +#include +#include + /* Ultra64 Video Interface */ @@ -58,7 +61,7 @@ typedef struct /* 0x00 */ u16 unk00; //some kind of flags. swap buffer sets to 0x10 /* 0x02 */ u16 retraceCount; /* 0x04 */ void* buffer; - /* 0x08 */ OSViMode *unk08; + /* 0x08 */ OSViMode *modep; /* 0x0c */ u32 features; /* 0x10 */ OSMesgQueue *mq; /* 0x14 */ OSMesg *msg; @@ -72,6 +75,7 @@ typedef struct void osCreateViManager(OSPri pri); void osViSetMode(OSViMode *mode); +void osViSetEvent(OSMesgQueue *mq, OSMesg msg, u32 retraceCount); void osViBlack(u8 active); void osViSetSpecialFeatures(u32 func); void osViSwapBuffer(void *vaddr); @@ -107,36 +111,7 @@ void osViSwapBuffer(void *vaddr); #define OS_VI_PAL_HPN2 26 #define OS_VI_PAL_HPF2 27 -#define OS_VI_MPAL_LPN1 28 /* MPAL - mainly Brazil */ -#define OS_VI_MPAL_LPF1 29 -#define OS_VI_MPAL_LAN1 30 -#define OS_VI_MPAL_LAF1 31 -#define OS_VI_MPAL_LPN2 32 -#define OS_VI_MPAL_LPF2 33 -#define OS_VI_MPAL_LAN2 34 -#define OS_VI_MPAL_LAF2 35 -#define OS_VI_MPAL_HPN1 36 -#define OS_VI_MPAL_HPF1 37 -#define OS_VI_MPAL_HAN1 38 -#define OS_VI_MPAL_HAF1 39 -#define OS_VI_MPAL_HPN2 40 -#define OS_VI_MPAL_HPF2 41 - -#define OS_VI_FPAL_LPN1 42 /* FPAL - Full screen PAL */ -#define OS_VI_FPAL_LPF1 43 -#define OS_VI_FPAL_LAN1 44 -#define OS_VI_FPAL_LAF1 45 -#define OS_VI_FPAL_LPN2 46 -#define OS_VI_FPAL_LPF2 47 -#define OS_VI_FPAL_LAN2 48 -#define OS_VI_FPAL_LAF2 49 -#define OS_VI_FPAL_HPN1 50 -#define OS_VI_FPAL_HPF1 51 -#define OS_VI_FPAL_HAN1 52 -#define OS_VI_FPAL_HAF1 53 -#define OS_VI_FPAL_HPN2 54 -#define OS_VI_FPAL_HPF2 55 - +#define OS_VI_MPAL_LAN1 30 extern OSViMode osViModeTable[]; /* Global VI mode table */ diff --git a/include/PR/rcp.h b/include/PR/rcp.h new file mode 100644 index 0000000..68ce968 --- /dev/null +++ b/include/PR/rcp.h @@ -0,0 +1,881 @@ +#ifndef _RCP_H_ +#define _RCP_H_ + +/************************************************************************** + * * + * Copyright (C) 1995, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/************************************************************************** + * + * File: rcp.h + * + * This file contains register and bit definitions for RCP memory map. + * $Revision: 1.20 $ + * $Date: 1997/07/23 08:35:21 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/rcp.h,v $ + * + **************************************************************************/ + +#include +#include + +/********************************************************************** + * + * Here is a quick overview of the RCP memory map: + * + +0x0000_0000 .. 0x03ef_ffff RDRAM memory +0x03f0_0000 .. 0x03ff_ffff RDRAM registers + + RCP registers (see below) +0x0400_0000 .. 0x040f_ffff SP registers +0x0410_0000 .. 0x041f_ffff DP command registers +0x0420_0000 .. 0x042f_ffff DP span registers +0x0430_0000 .. 0x043f_ffff MI registers +0x0440_0000 .. 0x044f_ffff VI registers +0x0450_0000 .. 0x045f_ffff AI registers +0x0460_0000 .. 0x046f_ffff PI registers +0x0470_0000 .. 0x047f_ffff RI registers +0x0480_0000 .. 0x048f_ffff SI registers +0x0490_0000 .. 0x04ff_ffff unused + +0x0500_0000 .. 0x05ff_ffff cartridge domain 2 +0x0600_0000 .. 0x07ff_ffff cartridge domain 1 +0x0800_0000 .. 0x0fff_ffff cartridge domain 2 +0x1000_0000 .. 0x1fbf_ffff cartridge domain 1 + +0x1fc0_0000 .. 0x1fc0_07bf PIF Boot Rom (1984 bytes) +0x1fc0_07c0 .. 0x1fc0_07ff PIF (JoyChannel) RAM (64 bytes) +0x1fc0_0800 .. 0x1fcf_ffff Reserved +0x1fd0_0000 .. 0x7fff_ffff cartridge domain 1 +0x8000_0000 .. 0xffff_ffff external SysAD device + +The Indy development board use cartridge domain 1: +0x1000_0000 .. 0x10ff_ffff RAMROM +0x1800_0000 .. 0x1800_0003 GIO interrupt (6 bits valid in 4 bytes) +0x1800_0400 .. 0x1800_0403 GIO sync (6 bits valid in 4 bytes) +0x1800_0800 .. 0x1800_0803 CART interrupt (6 bits valid in 4 bytes) + + + +**************************************************************************/ + + +/************************************************************************* + * RDRAM Memory (Assumes that maximum size is 4 MB) + */ +#define RDRAM_0_START 0x00000000 +#define RDRAM_0_END 0x001FFFFF +#define RDRAM_1_START 0x00200000 +#define RDRAM_1_END 0x003FFFFF + +#define RDRAM_START RDRAM_0_START +#define RDRAM_END RDRAM_1_END + + +/************************************************************************* + * Address predicates + */ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) +#define IS_RDRAM(x) ((unsigned)(x) >= RDRAM_START && \ + (unsigned)(x) < RDRAM_END) +#endif + + +/************************************************************************* + * RDRAM Registers (0x03f0_0000 .. 0x03ff_ffff) + */ +#define RDRAM_BASE_REG 0x03F00000 + +#define RDRAM_CONFIG_REG (RDRAM_BASE_REG+0x00) +#define RDRAM_DEVICE_TYPE_REG (RDRAM_BASE_REG+0x00) +#define RDRAM_DEVICE_ID_REG (RDRAM_BASE_REG+0x04) +#define RDRAM_DELAY_REG (RDRAM_BASE_REG+0x08) +#define RDRAM_MODE_REG (RDRAM_BASE_REG+0x0c) +#define RDRAM_REF_INTERVAL_REG (RDRAM_BASE_REG+0x10) +#define RDRAM_REF_ROW_REG (RDRAM_BASE_REG+0x14) +#define RDRAM_RAS_INTERVAL_REG (RDRAM_BASE_REG+0x18) +#define RDRAM_MIN_INTERVAL_REG (RDRAM_BASE_REG+0x1c) +#define RDRAM_ADDR_SELECT_REG (RDRAM_BASE_REG+0x20) +#define RDRAM_DEVICE_MANUF_REG (RDRAM_BASE_REG+0x24) + +#define RDRAM_0_DEVICE_ID 0 +#define RDRAM_1_DEVICE_ID 1 + +#define RDRAM_RESET_MODE 0 +#define RDRAM_ACTIVE_MODE 1 +#define RDRAM_STANDBY_MODE 2 + +#define RDRAM_LENGTH (2*512*2048) +#define RDRAM_0_BASE_ADDRESS (RDRAM_0_DEVICE_ID*RDRAM_LENGTH) +#define RDRAM_1_BASE_ADDRESS (RDRAM_1_DEVICE_ID*RDRAM_LENGTH) + +#define RDRAM_0_CONFIG 0x00000 +#define RDRAM_1_CONFIG 0x00400 +#define RDRAM_GLOBAL_CONFIG 0x80000 + + +/************************************************************************* + * PIF Physical memory map (total size = 2 KB) + * + * Size Description Mode + * 1FC007FF +-------+-----------------+-----+ + * | 64 B | JoyChannel RAM | R/W | + * 1FC007C0 +-------+-----------------+-----+ + * |1984 B | Boot ROM | * | * = Reserved + * 1FC00000 +-------+-----------------+-----+ + * + */ +#define PIF_ROM_START 0x1FC00000 +#define PIF_ROM_END 0x1FC007BF +#define PIF_RAM_START 0x1FC007C0 +#define PIF_RAM_END 0x1FC007FF + + +/************************************************************************* + * Controller channel + * Each game controller channel has 4 error bits that are defined in bit 6-7 of + * the Rx and Tx data size area bytes. Programmers need to clear these bits + * when setting the Tx/Rx size area values for a channel + */ +#define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */ +#define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */ +#define CHNL_ERR_FRAME 0x80 /* Bit 7 (Tx): Frame error */ +#define CHNL_ERR_COLLISION 0x40 /* Bit 6 (Tx): Collision error */ + +#define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ + + +/************************************************************************* + * External device info + */ +#define DEVICE_TYPE_CART 0 /* ROM cartridge */ +#define DEVICE_TYPE_BULK 1 /* ROM bulk */ +#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */ +#define DEVICE_TYPE_SRAM 3 /* SRAM */ + +/************************************************************************* + * SP Memory + */ +#define SP_DMEM_START 0x04000000 /* read/write */ +#define SP_DMEM_END 0x04000FFF +#define SP_IMEM_START 0x04001000 /* read/write */ +#define SP_IMEM_END 0x04001FFF + +/************************************************************************* + * SP CP0 Registers + */ + +#define SP_BASE_REG 0x04040000 + +/* SP memory address (R/W): [11:0] DMEM/IMEM address; [12] 0=DMEM,1=IMEM */ +#define SP_MEM_ADDR_REG (SP_BASE_REG+0x00) /* Master */ + +/* SP DRAM DMA address (R/W): [23:0] RDRAM address */ +#define SP_DRAM_ADDR_REG (SP_BASE_REG+0x04) /* Slave */ + +/* SP read DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */ +/* direction: I/DMEM <- RDRAM */ +#define SP_RD_LEN_REG (SP_BASE_REG+0x08) /* R/W: read len */ + +/* SP write DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */ +/* direction: I/DMEM -> RDRAM */ +#define SP_WR_LEN_REG (SP_BASE_REG+0x0C) /* R/W: write len */ + +/* SP status (R/W): [14:0] valid bits; see below for write/read mode */ +#define SP_STATUS_REG (SP_BASE_REG+0x10) + +/* SP DMA full (R): [0] valid bit; dma full */ +#define SP_DMA_FULL_REG (SP_BASE_REG+0x14) + +/* SP DMA busy (R): [0] valid bit; dma busy */ +#define SP_DMA_BUSY_REG (SP_BASE_REG+0x18) + +/* SP semaphore (R/W): Read: [0] semaphore flag (set on read) */ +/* Write: [] clear semaphore flag */ +#define SP_SEMAPHORE_REG (SP_BASE_REG+0x1C) + +/* SP PC (R/W): [11:0] program counter */ +#define SP_PC_REG 0x04080000 + +/* SP MEM address: bit 12 specifies if address is IMEM or DMEM */ +#define SP_DMA_DMEM 0x0000 /* Bit 12: 0=DMEM, 1=IMEM */ +#define SP_DMA_IMEM 0x1000 /* Bit 12: 0=DMEM, 1=IMEM */ + +/* + * Values to clear/set bit in status reg (SP_STATUS_REG - write) + */ +#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */ +#define SP_SET_HALT 0x00002 /* Bit 1: set halt */ +#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */ +#define SP_CLR_INTR 0x00008 /* Bit 3: clear intr */ +#define SP_SET_INTR 0x00010 /* Bit 4: set intr */ +#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */ +#define SP_SET_SSTEP 0x00040 /* Bit 6: set sstep */ +#define SP_CLR_INTR_BREAK 0x00080 /* Bit 7: clear intr on break */ +#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */ +#define SP_CLR_SIG0 0x00200 /* Bit 9: clear signal 0 */ +#define SP_SET_SIG0 0x00400 /* Bit 10: set signal 0 */ +#define SP_CLR_SIG1 0x00800 /* Bit 11: clear signal 1 */ +#define SP_SET_SIG1 0x01000 /* Bit 12: set signal 1 */ +#define SP_CLR_SIG2 0x02000 /* Bit 13: clear signal 2 */ +#define SP_SET_SIG2 0x04000 /* Bit 14: set signal 2 */ +#define SP_CLR_SIG3 0x08000 /* Bit 15: clear signal 3 */ +#define SP_SET_SIG3 0x10000 /* Bit 16: set signal 3 */ +#define SP_CLR_SIG4 0x20000 /* Bit 17: clear signal 4 */ +#define SP_SET_SIG4 0x40000 /* Bit 18: set signal 4 */ +#define SP_CLR_SIG5 0x80000 /* Bit 19: clear signal 5 */ +#define SP_SET_SIG5 0x100000 /* Bit 20: set signal 5 */ +#define SP_CLR_SIG6 0x200000 /* Bit 21: clear signal 6 */ +#define SP_SET_SIG6 0x400000 /* Bit 22: set signal 6 */ +#define SP_CLR_SIG7 0x800000 /* Bit 23: clear signal 7 */ +#define SP_SET_SIG7 0x1000000 /* Bit 24: set signal 7 */ + +/* + * Patterns to interpret status reg (SP_STATUS_REG - read) + */ +#define SP_STATUS_HALT 0x001 /* Bit 0: halt */ +#define SP_STATUS_BROKE 0x002 /* Bit 1: broke */ +#define SP_STATUS_DMA_BUSY 0x004 /* Bit 2: dma busy */ +#define SP_STATUS_DMA_FULL 0x008 /* Bit 3: dma full */ +#define SP_STATUS_IO_FULL 0x010 /* Bit 4: io full */ +#define SP_STATUS_SSTEP 0x020 /* Bit 5: single step */ +#define SP_STATUS_INTR_BREAK 0x040 /* Bit 6: interrupt on break */ +#define SP_STATUS_SIG0 0x080 /* Bit 7: signal 0 set */ +#define SP_STATUS_SIG1 0x100 /* Bit 8: signal 1 set */ +#define SP_STATUS_SIG2 0x200 /* Bit 9: signal 2 set */ +#define SP_STATUS_SIG3 0x400 /* Bit 10: signal 3 set */ +#define SP_STATUS_SIG4 0x800 /* Bit 11: signal 4 set */ +#define SP_STATUS_SIG5 0x1000 /* Bit 12: signal 5 set */ +#define SP_STATUS_SIG6 0x2000 /* Bit 13: signal 6 set */ +#define SP_STATUS_SIG7 0x4000 /* Bit 14: signal 7 set */ + +/* + * Use of SIG bits + */ +#define SP_CLR_YIELD SP_CLR_SIG0 +#define SP_SET_YIELD SP_SET_SIG0 +#define SP_STATUS_YIELD SP_STATUS_SIG0 +#define SP_CLR_YIELDED SP_CLR_SIG1 +#define SP_SET_YIELDED SP_SET_SIG1 +#define SP_STATUS_YIELDED SP_STATUS_SIG1 +#define SP_CLR_TASKDONE SP_CLR_SIG2 +#define SP_SET_TASKDONE SP_SET_SIG2 +#define SP_STATUS_TASKDONE SP_STATUS_SIG2 +#define SP_CLR_RSPSIGNAL SP_CLR_SIG3 +#define SP_SET_RSPSIGNAL SP_SET_SIG3 +#define SP_STATUS_RSPSIGNAL SP_STATUS_SIG3 +#define SP_CLR_CPUSIGNAL SP_CLR_SIG4 +#define SP_SET_CPUSIGNAL SP_SET_SIG4 +#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4 + +/* SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail */ +#define SP_IBIST_REG 0x04080004 + +/* + * Patterns to interpret status reg (SP_BIST_REG - write) + */ +#define SP_IBIST_CHECK 0x01 /* Bit 0: BIST check */ +#define SP_IBIST_GO 0x02 /* Bit 1: BIST go */ +#define SP_IBIST_CLEAR 0x04 /* Bit 2: BIST clear */ + +/* + * Patterns to interpret status reg (SP_BIST_REG - read) + */ +/* First 2 bits are same as in write mode: + * Bit 0: BIST check; Bit 1: BIST go + */ +#define SP_IBIST_DONE 0x04 /* Bit 2: BIST done */ +#define SP_IBIST_FAILED 0x78 /* Bit [6:3]: BIST fail */ + + +/************************************************************************* + * DP Command Registers + */ +#define DPC_BASE_REG 0x04100000 + +/* DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address */ +#define DPC_START_REG (DPC_BASE_REG+0x00) + +/* DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address */ +#define DPC_END_REG (DPC_BASE_REG+0x04) + +/* DP CMD DMA end (R): [23:0] DMEM/RDRAM current address */ +#define DPC_CURRENT_REG (DPC_BASE_REG+0x08) + +/* DP CMD status (R/W): [9:0] valid bits - see below for definitions */ +#define DPC_STATUS_REG (DPC_BASE_REG+0x0C) + +/* DP clock counter (R): [23:0] clock counter */ +#define DPC_CLOCK_REG (DPC_BASE_REG+0x10) + +/* DP buffer busy counter (R): [23:0] clock counter */ +#define DPC_BUFBUSY_REG (DPC_BASE_REG+0x14) + +/* DP pipe busy counter (R): [23:0] clock counter */ +#define DPC_PIPEBUSY_REG (DPC_BASE_REG+0x18) + +/* DP TMEM load counter (R): [23:0] clock counter */ +#define DPC_TMEM_REG (DPC_BASE_REG+0x1C) + +/* + * Values to clear/set bit in status reg (DPC_STATUS_REG - write) + */ +#define DPC_CLR_XBUS_DMEM_DMA 0x0001 /* Bit 0: clear xbus_dmem_dma */ +#define DPC_SET_XBUS_DMEM_DMA 0x0002 /* Bit 1: set xbus_dmem_dma */ +#define DPC_CLR_FREEZE 0x0004 /* Bit 2: clear freeze */ +#define DPC_SET_FREEZE 0x0008 /* Bit 3: set freeze */ +#define DPC_CLR_FLUSH 0x0010 /* Bit 4: clear flush */ +#define DPC_SET_FLUSH 0x0020 /* Bit 5: set flush */ +#define DPC_CLR_TMEM_CTR 0x0040 /* Bit 6: clear tmem ctr */ +#define DPC_CLR_PIPE_CTR 0x0080 /* Bit 7: clear pipe ctr */ +#define DPC_CLR_CMD_CTR 0x0100 /* Bit 8: clear cmd ctr */ +#define DPC_CLR_CLOCK_CTR 0x0200 /* Bit 9: clear clock ctr */ + +/* + * Patterns to interpret status reg (DPC_STATUS_REG - read) + */ +#define DPC_STATUS_XBUS_DMEM_DMA 0x001 /* Bit 0: xbus_dmem_dma */ +#define DPC_STATUS_FREEZE 0x002 /* Bit 1: freeze */ +#define DPC_STATUS_FLUSH 0x004 /* Bit 2: flush */ +/*#define DPC_STATUS_FROZEN 0x008*/ /* Bit 3: frozen */ +#define DPC_STATUS_START_GCLK 0x008 /* Bit 3: start gclk */ +#define DPC_STATUS_TMEM_BUSY 0x010 /* Bit 4: tmem busy */ +#define DPC_STATUS_PIPE_BUSY 0x020 /* Bit 5: pipe busy */ +#define DPC_STATUS_CMD_BUSY 0x040 /* Bit 6: cmd busy */ +#define DPC_STATUS_CBUF_READY 0x080 /* Bit 7: cbuf ready */ +#define DPC_STATUS_DMA_BUSY 0x100 /* Bit 8: dma busy */ +#define DPC_STATUS_END_VALID 0x200 /* Bit 9: end valid */ +#define DPC_STATUS_START_VALID 0x400 /* Bit 10: start valid */ + + +/************************************************************************* + * DP Span Registers + */ +#define DPS_BASE_REG 0x04200000 + +/* DP tmem bist (R/W): [10:0] BIST status bits; see below for detail */ +#define DPS_TBIST_REG (DPS_BASE_REG+0x00) + +/* DP span test mode (R/W): [0] Span buffer test access enable */ +#define DPS_TEST_MODE_REG (DPS_BASE_REG+0x04) + +/* DP span buffer test address (R/W): [6:0] bits; see below for detail */ +#define DPS_BUFTEST_ADDR_REG (DPS_BASE_REG+0x08) + +/* DP span buffer test data (R/W): [31:0] span buffer data */ +#define DPS_BUFTEST_DATA_REG (DPS_BASE_REG+0x0C) + +/* + * Patterns to interpret status reg (DPS_TMEM_BIST_REG - write) + */ +#define DPS_TBIST_CHECK 0x01 /* Bit 0: BIST check */ +#define DPS_TBIST_GO 0x02 /* Bit 1: BIST go */ +#define DPS_TBIST_CLEAR 0x04 /* Bit 2: BIST clear */ + +/* + * Patterns to interpret status reg (DPS_TMEM_BIST_REG - read) + */ +/* First 2 bits are same as in write mode: + * Bit 0: BIST check; Bit 1: BIST go + */ +#define DPS_TBIST_DONE 0x004 /* Bit 2: BIST done */ +#define DPS_TBIST_FAILED 0x7F8 /* Bit [10:3]: BIST fail */ + + +/************************************************************************* + * MIPS Interface (MI) Registers + */ +#define MI_BASE_REG 0x04300000 + +/* + * MI init mode (W): [6:0] init length, [7] clear init mode, [8] set init mode + * [9/10] clear/set ebus test mode, [11] clear DP interrupt + * (R): [6:0] init length, [7] init mode, [8] ebus test mode + */ +#define MI_INIT_MODE_REG (MI_BASE_REG+0x00) +#define MI_MODE_REG MI_INIT_MODE_REG + +/* + * Values to clear/set bit in mode reg (MI_MODE_REG - write) + */ +#define MI_CLR_INIT 0x0080 /* Bit 7: clear init mode */ +#define MI_SET_INIT 0x0100 /* Bit 8: set init mode */ +#define MI_CLR_EBUS 0x0200 /* Bit 9: clear ebus test */ +#define MI_SET_EBUS 0x0400 /* Bit 10: set ebus test mode */ +#define MI_CLR_DP_INTR 0x0800 /* Bit 11: clear dp interrupt */ +#define MI_CLR_RDRAM 0x1000 /* Bit 12: clear RDRAM reg */ +#define MI_SET_RDRAM 0x2000 /* Bit 13: set RDRAM reg mode */ + +/* + * Patterns to interpret mode reg (MI_MODE_REG - read) + */ +#define MI_MODE_INIT 0x0080 /* Bit 7: init mode */ +#define MI_MODE_EBUS 0x0100 /* Bit 8: ebus test mode */ +#define MI_MODE_RDRAM 0x0200 /* Bit 9: RDRAM reg mode */ + +/* MI version (R): [7:0] io, [15:8] rac, [23:16] rdp, [31:24] rsp */ +#define MI_VERSION_REG (MI_BASE_REG+0x04) +#define MI_NOOP_REG MI_VERSION_REG + +/* MI interrupt (R): [5:0] valid bits - see below for bit patterns */ +#define MI_INTR_REG (MI_BASE_REG+0x08) + +/* + * MI interrupt mask (W): [11:0] valid bits - see below for bit patterns + * (R): [5:0] valid bits - see below for bit patterns + */ +#define MI_INTR_MASK_REG (MI_BASE_REG+0x0C) + +/* + * The following are values to check for interrupt setting (MI_INTR_REG) + */ +#define MI_INTR_SP 0x01 /* Bit 0: SP intr */ +#define MI_INTR_SI 0x02 /* Bit 1: SI intr */ +#define MI_INTR_AI 0x04 /* Bit 2: AI intr */ +#define MI_INTR_VI 0x08 /* Bit 3: VI intr */ +#define MI_INTR_PI 0x10 /* Bit 4: PI intr */ +#define MI_INTR_DP 0x20 /* Bit 5: DP intr */ + +/* + * The following are values to clear/set various interrupt bit mask + * They can be ORed together to manipulate multiple bits + * (MI_INTR_MASK_REG - write) + */ +#define MI_INTR_MASK_CLR_SP 0x0001 /* Bit 0: clear SP mask */ +#define MI_INTR_MASK_SET_SP 0x0002 /* Bit 1: set SP mask */ +#define MI_INTR_MASK_CLR_SI 0x0004 /* Bit 2: clear SI mask */ +#define MI_INTR_MASK_SET_SI 0x0008 /* Bit 3: set SI mask */ +#define MI_INTR_MASK_CLR_AI 0x0010 /* Bit 4: clear AI mask */ +#define MI_INTR_MASK_SET_AI 0x0020 /* Bit 5: set AI mask */ +#define MI_INTR_MASK_CLR_VI 0x0040 /* Bit 6: clear VI mask */ +#define MI_INTR_MASK_SET_VI 0x0080 /* Bit 7: set VI mask */ +#define MI_INTR_MASK_CLR_PI 0x0100 /* Bit 8: clear PI mask */ +#define MI_INTR_MASK_SET_PI 0x0200 /* Bit 9: set PI mask */ +#define MI_INTR_MASK_CLR_DP 0x0400 /* Bit 10: clear DP mask */ +#define MI_INTR_MASK_SET_DP 0x0800 /* Bit 11: set DP mask */ + +/* + * The following are values to check for interrupt mask setting + * (MI_INTR_MASK_REG - read) + */ +#define MI_INTR_MASK_SP 0x01 /* Bit 0: SP intr mask */ +#define MI_INTR_MASK_SI 0x02 /* Bit 1: SI intr mask */ +#define MI_INTR_MASK_AI 0x04 /* Bit 2: AI intr mask */ +#define MI_INTR_MASK_VI 0x08 /* Bit 3: VI intr mask */ +#define MI_INTR_MASK_PI 0x10 /* Bit 4: PI intr mask */ +#define MI_INTR_MASK_DP 0x20 /* Bit 5: DP intr mask */ + + +/************************************************************************* + * Video Interface (VI) Registers + */ +#define VI_BASE_REG 0x04400000 + +/* VI status/control (R/W): [15-0] valid bits: + * [1:0] = type[1:0] (pixel size) + * 0: blank (no data, no sync) + * 1: reserved + * 2: 5/5/5/3 ("16" bit) + * 3: 8/8/8/8 (32 bit) + * [2] = gamma_dither_enable (normally on, unless "special effect") + * [3] = gamma_enable (normally on, unless MPEG/JPEG) + * [4] = divot_enable (normally on if antialiased, unless decal lines) + * [5] = reserved - always off + * [6] = serrate (always on if interlaced, off if not) + * [7] = reserved - diagnostics only + * [9:8] = anti-alias (aa) mode[1:0] + * 0: aa & resamp (always fetch extra lines) + * 1: aa & resamp (fetch extra lines if needed) + * 2: resamp only (treat as all fully covered) + * 3: neither (replicate pixels, no interpolate) + * [11] = reserved - diagnostics only + * [15:12] = reserved + * + */ +#define VI_STATUS_REG (VI_BASE_REG+0x00) +#define VI_CONTROL_REG VI_STATUS_REG + +/* VI origin (R/W): [23:0] frame buffer origin in bytes */ +#define VI_ORIGIN_REG (VI_BASE_REG+0x04) +#define VI_DRAM_ADDR_REG VI_ORIGIN_REG + +/* VI width (R/W): [11:0] frame buffer line width in pixels */ +#define VI_WIDTH_REG (VI_BASE_REG+0x08) +#define VI_H_WIDTH_REG VI_WIDTH_REG + +/* VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR */ +#define VI_INTR_REG (VI_BASE_REG+0x0C) +#define VI_V_INTR_REG VI_INTR_REG + +/* + * VI current vertical line (R/W): [9:0] current half line, sampled once per + * line (the lsb of V_CURRENT is constant within a field, and in + * interlaced modes gives the field number - which is constant for non- + * interlaced modes) + * - Any write to this register will clear interrupt line + */ +#define VI_CURRENT_REG (VI_BASE_REG+0x10) +#define VI_V_CURRENT_LINE_REG VI_CURRENT_REG + +/* + * VI video timing (R/W): [ 7: 0] horizontal sync width in pixels, + * [15: 8] color burst width in pixels, + * [19:16] vertical sync width in half lines, + * [29:20] start of color burst in pixels from h-sync + */ +#define VI_BURST_REG (VI_BASE_REG+0x14) +#define VI_TIMING_REG VI_BURST_REG + +/* VI vertical sync (R/W): [9:0] number of half-lines per field */ +#define VI_V_SYNC_REG (VI_BASE_REG+0x18) + +/* VI horizontal sync (R/W): [11: 0] total duration of a line in 1/4 pixel + * [20:16] a 5-bit leap pattern used for PAL only + * (h_sync_period) + */ +#define VI_H_SYNC_REG (VI_BASE_REG+0x1C) + +/* + * VI horizontal sync leap (R/W): [11: 0] identical to h_sync_period + * [27:16] identical to h_sync_period + */ +#define VI_LEAP_REG (VI_BASE_REG+0x20) +#define VI_H_SYNC_LEAP_REG VI_LEAP_REG + +/* + * VI horizontal video (R/W): [ 9: 0] end of active video in screen pixels + * : [25:16] start of active video in screen pixels + */ +#define VI_H_START_REG (VI_BASE_REG+0x24) +#define VI_H_VIDEO_REG VI_H_START_REG + +/* + * VI vertical video (R/W): [ 9: 0] end of active video in screen half-lines + * : [25:16] start of active video in screen half-lines + */ +#define VI_V_START_REG (VI_BASE_REG+0x28) +#define VI_V_VIDEO_REG VI_V_START_REG + +/* + * VI vertical burst (R/W): [ 9: 0] end of color burst enable in half-lines + * : [25:16] start of color burst enable in half-lines + */ +#define VI_V_BURST_REG (VI_BASE_REG+0x2C) + +/* VI x-scale (R/W): [11: 0] 1/horizontal scale up factor (2.10 format) + * [27:16] horizontal subpixel offset (2.10 format) + */ +#define VI_X_SCALE_REG (VI_BASE_REG+0x30) + +/* VI y-scale (R/W): [11: 0] 1/vertical scale up factor (2.10 format) + * [27:16] vertical subpixel offset (2.10 format) + */ +#define VI_Y_SCALE_REG (VI_BASE_REG+0x34) + +/* + * Patterns to interpret VI_CONTROL_REG + */ +#define VI_CTRL_TYPE_16 0x00002 /* Bit [1:0] pixel size: 16 bit */ +#define VI_CTRL_TYPE_32 0x00003 /* Bit [1:0] pixel size: 32 bit */ +#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* Bit 2: default = on */ +#define VI_CTRL_GAMMA_ON 0x00008 /* Bit 3: default = on */ +#define VI_CTRL_DIVOT_ON 0x00010 /* Bit 4: default = on */ +#define VI_CTRL_SERRATE_ON 0x00040 /* Bit 6: on if interlaced */ +#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* Bit [9:8] anti-alias mode */ +#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* Bit 16: dither-filter mode */ + +/* + * Possible video clocks (NTSC or PAL) + */ +#define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */ +#define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */ +#define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */ + + +/************************************************************************* + * Audio Interface (AI) Registers + * + * The address and length registers are double buffered; that is, they + * can be written twice before becoming full. + * The address must be written before the length. + */ +#define AI_BASE_REG 0x04500000 + +/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */ +#define AI_DRAM_ADDR_REG (AI_BASE_REG+0x00) /* R0: DRAM address */ + +/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */ +/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */ +#define AI_LEN_REG (AI_BASE_REG+0x04) /* R1: Length */ + +/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */ +#define AI_CONTROL_REG (AI_BASE_REG+0x08) /* R2: DMA Control */ + +/* + * AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy + * Note that a 1->0 transition in ai_full will set interrupt + * (W): clear audio interrupt + */ +#define AI_STATUS_REG (AI_BASE_REG+0x0C) /* R3: Status */ + +/* + * AI DAC sample period register (W): [13:0] dac rate + * - vid_clock/(dperiod + 1) is the DAC sample rate + * - (dperiod + 1) >= 66 * (aclockhp + 1) must be true + */ +#define AI_DACRATE_REG (AI_BASE_REG+0x10) /* R4: DAC rate 14-lsb*/ + +/* + * AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp) + * - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate + * - The abus clock stops if aclockhp is zero + */ +#define AI_BITRATE_REG (AI_BASE_REG+0x14) /* R5: Bit rate 4-lsb */ + +/* Value for control register */ +#define AI_CONTROL_DMA_ON 0x01 /* LSB = 1: DMA enable*/ +#define AI_CONTROL_DMA_OFF 0x00 /* LSB = 1: DMA enable*/ + +/* Value for status register */ +#define AI_STATUS_FIFO_FULL 0x80000000 /* Bit 31: full */ +#define AI_STATUS_DMA_BUSY 0x40000000 /* Bit 30: busy */ + +/* DAC rate = video clock / audio frequency + * - DAC rate >= (66 * Bit rate) must be true + */ +#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */ +#define AI_MIN_DAC_RATE 132 + +/* Bit rate <= (DAC rate / 66) */ +#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */ +#define AI_MIN_BIT_RATE 2 + +/* + * Maximum and minimum values for audio frequency based on video clocks + * max frequency = (video clock / min dac rate) + * min frequency = (video clock / max dac rate) + */ +#define AI_NTSC_MAX_FREQ 368000 /* 368 KHz */ +#define AI_NTSC_MIN_FREQ 3000 /* 3 KHz ~ 2971 Hz */ + +#define AI_PAL_MAX_FREQ 376000 /* 376 KHz */ +#define AI_PAL_MIN_FREQ 3050 /* 3 KHz ~ 3031 Hz */ + +#define AI_MPAL_MAX_FREQ 368000 /* 368 KHz */ +#define AI_MPAL_MIN_FREQ 3000 /* 3 KHz ~ 2968 Hz */ + + +/************************************************************************* + * Peripheral Interface (PI) Registers + */ +#define PI_BASE_REG 0x04600000 + +/* PI DRAM address (R/W): [23:0] starting RDRAM address */ +#define PI_DRAM_ADDR_REG (PI_BASE_REG+0x00) /* DRAM address */ + +/* PI pbus (cartridge) address (R/W): [31:0] starting AD16 address */ +#define PI_CART_ADDR_REG (PI_BASE_REG+0x04) + +/* PI read length (R/W): [23:0] read data length */ +#define PI_RD_LEN_REG (PI_BASE_REG+0x08) + +/* PI write length (R/W): [23:0] write data length */ +#define PI_WR_LEN_REG (PI_BASE_REG+0x0C) + +/* + * PI status (R): [0] DMA busy, [1] IO busy, [2], error + * (W): [0] reset controller (and abort current op), [1] clear intr + */ +#define PI_STATUS_REG (PI_BASE_REG+0x10) + +/* PI dom1 latency (R/W): [7:0] domain 1 device latency */ +#define PI_BSD_DOM1_LAT_REG (PI_BASE_REG+0x14) + +/* PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width */ +#define PI_BSD_DOM1_PWD_REG (PI_BASE_REG+0x18) + +/* PI dom1 page size (R/W): [3:0] domain 1 device page size */ +#define PI_BSD_DOM1_PGS_REG (PI_BASE_REG+0x1C) /* page size */ + +/* PI dom1 release (R/W): [1:0] domain 1 device R/W release duration */ +#define PI_BSD_DOM1_RLS_REG (PI_BASE_REG+0x20) + +/* PI dom2 latency (R/W): [7:0] domain 2 device latency */ +#define PI_BSD_DOM2_LAT_REG (PI_BASE_REG+0x24) /* Domain 2 latency */ + +/* PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width */ +#define PI_BSD_DOM2_PWD_REG (PI_BASE_REG+0x28) /* pulse width */ + +/* PI dom2 page size (R/W): [3:0] domain 2 device page size */ +#define PI_BSD_DOM2_PGS_REG (PI_BASE_REG+0x2C) /* page size */ + +/* PI dom2 release (R/W): [1:0] domain 2 device R/W release duration */ +#define PI_BSD_DOM2_RLS_REG (PI_BASE_REG+0x30) /* release duration */ + +#define PI_DOMAIN1_REG PI_BSD_DOM1_LAT_REG +#define PI_DOMAIN2_REG PI_BSD_DOM2_LAT_REG + +#define PI_DOM_LAT_OFS 0x00 +#define PI_DOM_PWD_OFS 0x04 +#define PI_DOM_PGS_OFS 0x08 +#define PI_DOM_RLS_OFS 0x0C + +/* + * PI status register has 3 bits active when read from (PI_STATUS_REG - read) + * Bit 0: DMA busy - set when DMA is in progress + * Bit 1: IO busy - set when IO is in progress + * Bit 2: Error - set when CPU issues IO request while DMA is busy + */ +#define PI_STATUS_ERROR 0x04 +#define PI_STATUS_IO_BUSY 0x02 +#define PI_STATUS_DMA_BUSY 0x01 + +/* PI status register has 2 bits active when written to: + * Bit 0: When set, reset PIC + * Bit 1: When set, clear interrupt flag + * The values of the two bits can be ORed together to both reset PIC and + * clear interrupt at the same time. + * + * Note: + * - The PIC does generate an interrupt at the end of each DMA. CPU + * needs to clear the interrupt flag explicitly (from an interrupt + * handler) by writing into the STATUS register with bit 1 set. + * + * - When a DMA completes, the interrupt flag is set. CPU can issue + * another request even while the interrupt flag is set (as long as + * PIC is idle). However, it is the CPU's responsibility for + * maintaining accurate correspondence between DMA completions and + * interrupts. + * + * - When PIC is reset, if PIC happens to be busy, an interrupt will + * be generated as PIC returns to idle. Otherwise, no interrupt will + * be generated and PIC remains idle. + */ +/* + * Values to clear interrupt/reset PIC (PI_STATUS_REG - write) + */ +#define PI_STATUS_RESET 0x01 +#define PI_SET_RESET PI_STATUS_RESET + +#define PI_STATUS_CLR_INTR 0x02 +#define PI_CLR_INTR PI_STATUS_CLR_INTR + +#define PI_DMA_BUFFER_SIZE 128 + +#define PI_DOM1_ADDR1 0x06000000 /* to 0x07FFFFFF */ +#define PI_DOM1_ADDR2 0x10000000 /* to 0x1FBFFFFF */ +#define PI_DOM1_ADDR3 0x1FD00000 /* to 0x7FFFFFFF */ +#define PI_DOM2_ADDR1 0x05000000 /* to 0x05FFFFFF */ +#define PI_DOM2_ADDR2 0x08000000 /* to 0x0FFFFFFF */ + + +/************************************************************************* + * RDRAM Interface (RI) Registers + */ +#define RI_BASE_REG 0x04700000 + +/* RI mode (R/W): [1:0] operating mode, [2] stop T active, [3] stop R active */ +#define RI_MODE_REG (RI_BASE_REG+0x00) + +/* RI config (R/W): [5:0] current control input, [6] current control enable */ +#define RI_CONFIG_REG (RI_BASE_REG+0x04) + +/* RI current load (W): [] any write updates current control register */ +#define RI_CURRENT_LOAD_REG (RI_BASE_REG+0x08) + +/* RI select (R/W): [2:0] receive select, [2:0] transmit select */ +#define RI_SELECT_REG (RI_BASE_REG+0x0C) + +/* RI refresh (R/W): [7:0] clean refresh delay, [15:8] dirty refresh delay, + * [16] refresh bank, [17] refresh enable + * [18] refresh optimize + */ +#define RI_REFRESH_REG (RI_BASE_REG+0x10) +#define RI_COUNT_REG RI_REFRESH_REG + +/* RI latency (R/W): [3:0] DMA latency/overlap */ +#define RI_LATENCY_REG (RI_BASE_REG+0x14) + +/* RI error (R): [0] nack error, [1] ack error */ +#define RI_RERROR_REG (RI_BASE_REG+0x18) + +/* RI error (W): [] any write clears all error bits */ +#define RI_WERROR_REG (RI_BASE_REG+0x1C) + + +/************************************************************************* + * Serial Interface (SI) Registers + */ +#define SI_BASE_REG 0x04800000 + +/* SI DRAM address (R/W): [23:0] starting RDRAM address */ +#define SI_DRAM_ADDR_REG (SI_BASE_REG+0x00) /* R0: DRAM address */ + +/* SI address read 64B (W): [] any write causes a 64B DMA write */ +#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG+0x04) /* R1: 64B PIF->DRAM */ + +/* Address SI_BASE_REG + (0x08, 0x0c, 0x14) are reserved */ + +/* SI address write 64B (W): [] any write causes a 64B DMA read */ +#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG+0x10) /* R4: 64B DRAM->PIF */ + +/* + * SI status (W): [] any write clears interrupt + * (R): [0] DMA busy, [1] IO read busy, [2] reserved + * [3] DMA error, [12] interrupt + */ +#define SI_STATUS_REG (SI_BASE_REG+0x18) /* R6: Status */ + +/* SI status register has the following bits active: + * 0: DMA busy - set when DMA is in progress + * 1: IO busy - set when IO access is in progress + * 3: DMA error - set when there are overlapping DMA requests + * 12: Interrupt - Interrupt set + */ +#define SI_STATUS_DMA_BUSY 0x0001 +#define SI_STATUS_RD_BUSY 0x0002 +#define SI_STATUS_DMA_ERROR 0x0008 +#define SI_STATUS_INTERRUPT 0x1000 + +/************************************************************************* + * Development Board GIO Control Registers + */ + +#define GIO_BASE_REG 0x18000000 + +/* Game to Host Interrupt */ +#define GIO_GIO_INTR_REG (GIO_BASE_REG+0x000) + +/* Game to Host SYNC */ +#define GIO_GIO_SYNC_REG (GIO_BASE_REG+0x400) + +/* Host to Game Interrupt */ +#define GIO_CART_INTR_REG (GIO_BASE_REG+0x800) + + +/************************************************************************* + * Common macros + */ +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) +#define IO_READ(addr) (*(vu32 *)PHYS_TO_K1(addr)) +#define IO_WRITE(addr,data) (*(vu32 *)PHYS_TO_K1(addr)=(u32)(data)) +#define RCP_STAT_PRINT \ + rmonPrintf("current=%x start=%x end=%x dpstat=%x spstat=%x\n", \ + IO_READ(DPC_CURRENT_REG), \ + IO_READ(DPC_START_REG), \ + IO_READ(DPC_END_REG), \ + IO_READ(DPC_STATUS_REG), \ + IO_READ(SP_STATUS_REG)) + +#endif + +#endif /* _RCP_H_ */ diff --git a/include/ultra64/sptask.h b/include/PR/sptask.h similarity index 98% rename from include/ultra64/sptask.h rename to include/PR/sptask.h index 75d5752..ec443ef 100644 --- a/include/ultra64/sptask.h +++ b/include/PR/sptask.h @@ -8,7 +8,6 @@ #define M_HVQTASK 6 #define M_HVQMTASK 7 -//gGfxSPTaskYieldBuffer has to be changed for this too #if (defined(F3DEX_GBI) || defined(F3DLP_GBI) || defined(F3DEX_GBI_2)) #define OS_YIELD_DATA_SIZE 0xc00 #else @@ -19,6 +18,9 @@ /* Flags */ #define M_TASK_FLAG0 1 #define M_TASK_FLAG1 2 +#ifdef VERSION_SH +#define M_TASK_FLAG2 4 +#endif /* SpStatus */ #define SPSTATUS_CLEAR_HALT 0x00000001 diff --git a/include/ultra64/ucode.h b/include/PR/ucode.h similarity index 66% rename from include/ultra64/ucode.h rename to include/PR/ucode.h index 407f7f6..37fd197 100644 --- a/include/ultra64/ucode.h +++ b/include/PR/ucode.h @@ -11,13 +11,13 @@ extern u64 rspF3DBootStart[], rspF3DBootEnd[]; // F3D ucode extern u64 rspF3DStart[], rspF3DEnd[]; -// F3D data ucode +// F3D ucode data extern u64 rspF3DDataStart[], rspF3DDataEnd[]; -// F3D audio ucode -extern u64 rspF3DAudioStart[], rspF3DAudioEnd[]; +// aspMain (audio) ucode +extern u64 rspAspMainStart[], rspAspMainEnd[]; -// F3D audio data ucode -extern u64 rspF3DAudioDataStart[], rspF3DAudioDataEnd[]; +// aspMain ucode data +extern u64 rspAspMainDataStart[], rspAspMainDataEnd[]; #endif diff --git a/include/ultra64/types.h b/include/PR/ultratypes.h similarity index 76% rename from include/ultra64/types.h rename to include/PR/ultratypes.h index ddad7d1..8a00490 100644 --- a/include/ultra64/types.h +++ b/include/PR/ultratypes.h @@ -29,13 +29,16 @@ typedef volatile s64 vs64; typedef float f32; typedef double f64; -typedef long int Mtx_t[4][4]; -typedef union -{ - Mtx_t m; - long long int forc_structure_alignment; -} Mtx; - -typedef unsigned long size_t; +#ifdef TARGET_N64 +typedef u32 size_t; +typedef s32 ssize_t; +typedef u32 uintptr_t; +typedef s32 intptr_t; +typedef s32 ptrdiff_t; +#else +#include +#include +typedef ptrdiff_t ssize_t; +#endif #endif diff --git a/include/platform_info.h b/include/platform_info.h new file mode 100644 index 0000000..310aa4d --- /dev/null +++ b/include/platform_info.h @@ -0,0 +1,15 @@ +#ifndef PLATFORM_INFO_H +#define PLATFORM_INFO_H + +#ifdef TARGET_N64 +#define IS_64_BIT 0 +#define IS_BIG_ENDIAN 1 +#else +#include +#define IS_64_BIT (UINTPTR_MAX == 0xFFFFFFFFFFFFFFFFU) +#define IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#endif + +#define DOUBLE_SIZE_ON_64_BIT(size) ((size) * (sizeof(void *) / 4)) + +#endif // PLATFORM_INFO_H diff --git a/include/ultra64.h b/include/ultra64.h index 6a96dc8..409a3cf 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -3,27 +3,31 @@ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#ifndef _LANGUAGE_C +#define _LANGUAGE_C +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #endif diff --git a/include/ultra64/cache.h b/include/ultra64/cache.h deleted file mode 100644 index 1373a9a..0000000 --- a/include/ultra64/cache.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _ULTRA64_CACHE_H_ -#define _ULTRA64_CACHE_H_ - -/* Functions */ - -void osInvalICache(void *vaddr, s32 nbytes); -void osInvalDCache(void *vaddr, s32 nbytes); -void osWritebackDCache(void *vaddr, s32 nbytes); -void osWritebackDCacheAll(void); - -#endif diff --git a/include/ultra64/eeprom.h b/include/ultra64/eeprom.h deleted file mode 100644 index 1724a6d..0000000 --- a/include/ultra64/eeprom.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _ULTRA64_EEPROM_H_ -#define _ULTRA64_EEPROM_H_ - -typedef struct -{ - u16 unk00; - u16 unk01; -} OSEepromUnknownStruct0; - -/* Functions */ - -s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes); -s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes); -s32 osEepromWrite(OSMesgQueue *mq, u8 address, u8 *buffer); -s32 osEepromRead(OSMesgQueue *mq, u8 address, u8 *buffer); -s32 osEepromProbe(OSMesgQueue *mq); - -#endif diff --git a/include/ultra64/gbi.h b/include/ultra64/gbi.h deleted file mode 100644 index 2d6fd62..0000000 --- a/include/ultra64/gbi.h +++ /dev/null @@ -1,736 +0,0 @@ -#ifndef _ULTRA64_GBI_H_ -#define _ULTRA64_GBI_H_ - -/* Types */ - -/* Vertex (set up for use with colors) */ -typedef struct -{ - short ob[3]; /* x, y, z */ - unsigned short flag; - short tc[2]; /* texture coord */ - unsigned char cn[4]; /* color & alpha */ -} Vtx_t; - -/* Vertex (set up for use with normals) */ -typedef struct -{ - short ob[3]; /* x, y, z */ - unsigned short flag; - short tc[2]; /* texture coord */ - signed char n[3]; /* normal */ - unsigned char a; /* alpha */ -} Vtx_tn; - -typedef union -{ - Vtx_t v; /* Use this one for colors */ - Vtx_tn n; /* Use this one for normals */ - long long int force_structure_alignment; -} Vtx; - - -typedef struct -{ - short vscale[4]; /* scale, 2 bits fraction */ - short vtrans[4]; /* translate, 2 bits fraction */ -} Vp_t; - -typedef union -{ - Vp_t vp; - long long int force_structure_alignment; -} Vp; - - -typedef struct -{ - unsigned int w0; - unsigned int w1; -} Gwords; - -/* TODO: fill in the rest of the members */ -typedef union -{ - Gwords words; - long long int force_structure_alignment; -} Gfx; - - -#define _SHIFTL(value, shift, size) \ - ((unsigned int) (((unsigned int) (value) & ((1 << size) - 1)) << shift)) - -#define G_ON 1 -#define G_OFF 0 - -#define GPACK_RGBA5551(r, g, b, a) \ - ((((r) << 8) & 0xF800) | \ - (((g) << 3) & 0x07C0) | \ - (((b) >> 2) & 0x003E) | \ - ((a) & 0x0001)) -#define GPACK_ZDZ(z, dz) ((z) << 2 | (dz)) - - -#define G_ZBUFFER 0x00000001 -#define G_TEXTURE_ENABLE 0x00000002 -#define G_SHADE 0x00000004 -#define G_SHADING_SMOOTH 0x00000200 -#define G_CULL_FRONT 0x00001000 -#define G_CULL_BACK 0x00002000 -#define G_CULL_BOTH 0x00003000 -#define G_FOG 0x00010000 -#define G_LIGHTING 0x00020000 -#define G_TEXTURE_GEN 0x00040000 -#define G_TEXTURE_GEN_LINEAR 0x00080000 -#define G_LOD 0x00100000 -#define G_CLIPPING 0x00800000 - -#define G_IM_FMT_RGBA 0 -#define G_IM_FMT_YUV 1 -#define G_IM_FMT_CI 2 -#define G_IM_FMT_IA 3 -#define G_IM_FMT_I 4 - -#define G_IM_SIZ_4b 0 -#define G_IM_SIZ_8b 1 -#define G_IM_SIZ_16b 2 -#define G_IM_SIZ_32b 3 -#define G_IM_SIZ_DD 5 - -#define G_AC_NONE (0 << 0) -#define G_AC_THRESHOLD (1 << 0) -#define G_AC_DITHER (3 << 0) - -#define G_ZS_PIXEL (0 << 2) -#define G_ZS_PRIM (1 << 2) - -#define G_CD_MAGICSQ (0 << 6) -#define G_CD_BAYER (1 << 6) -#define G_CD_NOISE (2 << 6) - -#define G_CK_NONE (0 << 8) -#define G_CK_KEY (1 << 8) - -#define G_TC_CONV (0 << 9) -#define G_TC_FILTCONV (5 << 9) -#define G_TC_FILT (6 << 9) - -#define G_TF_POINT (0 << 12) -#define G_TF_BILERP (2 << 12) -#define G_TF_AVERAGE (3 << 12) - -#define G_TT_NONE (0 << 14) -#define G_TT_RGBA16 (2 << 14) -#define G_TT_IA16 (3 << 14) - -#define G_TL_TILE (0 << 16) -#define G_TL_LOD (1 << 16) - -#define G_TD_CLAMP (0 << 17) -#define G_TD_SHARPEN (1 << 17) -#define G_TD_DETAIL (2 << 17) - -#define G_TP_NONE (0 << 19) -#define G_TP_PERSP (1 << 19) - -#define G_CYC_1CYCLE (0 << 20) -#define G_CYC_2CYCLE (1 << 20) -#define G_CYC_COPY (2 << 20) -#define G_CYC_FILL (3 << 20) - -#define G_PM_NPRIMITIVE (0 << 23) -#define G_PM_1PRIMITIVE (1 << 23) - -#define G_SC_NON_INTERLACE 0 -#define G_SC_ODD_INTERLACE 3 -#define G_SC_EVEN_INTERLACE 2 - -#define G_TX_LOADTILE 7 -#define G_TX_RENDERTILE 0 - -#define G_TX_NOMIRROR 0 -#define G_TX_WRAP 0 -#define G_TX_MIRROR 1 -#define G_TX_CLAMP 2 -#define G_TX_NOMASK 0 -#define G_TX_NOLOD 0 - -#define G_TX_LDBLK_MAX_TXL 2047 - -#define G_MV_VIEWPORT 0x80 -#define G_MV_LOOKATY 0x82 -#define G_MV_LOOKATX 0x84 -#define G_MV_L0 0x86 -#define G_MV_L1 0x88 -#define G_MV_L2 0x8A -#define G_MV_L3 0x8C -#define G_MV_L4 0x8E -#define G_MV_L5 0x90 -#define G_MV_L6 0x92 -#define G_MV_L7 0x94 -#define G_MV_TXTATT 0x96 -#define G_MV_MATRIX_1 0x9E -#define G_MV_MATRIX_2 0x98 -#define G_MV_MATRIX_3 0x9A -#define G_MV_MATRIX_4 0x9C - -#define G_SETOTHERMODE_L 0xB9 -#define G_SETOTHERMODE_H 0xBA - -#ifndef MAX -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#endif - -#ifndef MIN -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#endif - -#define gSPMatrix(pkt, m, p) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0x01, 24, 8) \ - | _SHIFTL((p), 16, 8) \ - | _SHIFTL(sizeof(Mtx), 0, 16); \ - _g->words.w1 = (u32)(m); \ -} - -#define gSPVertex(pkt, v, n, v0) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0x04, 24, 8) \ - | _SHIFTL(((n)-1) << 4 | (v0), 16, 8) \ - | _SHIFTL(sizeof(Vtx)*(n), 0, 16); \ - _g->words.w1 = (u32)(v); \ -} - -#define gDPLoadSync(pkt) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xE6000000; \ - _g->words.w1 = 0x00000000; \ -} - -#define gDPPipeSync(pkt) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xE7000000; \ - _g->words.w1 = 0x00000000; \ -} - -#define gDPTileSync(pkt) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xE8000000; \ - _g->words.w1 = 0x00000000; \ -} - -#define gDPFullSync(pkt) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xE9000000; \ - _g->words.w1 = 0x00000000; \ -} - -#define gSPDisplayList(pkt, dl) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0x06000000; \ - _g->words.w1 = (u32)(dl); \ -} - -#define gSPBranchList(pkt, dl) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = 0x06010000; \ - _g->words.w1 = (u32)(dl); \ -} - -#define gSPEndDisplayList(pkt) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xB8000000; \ - _g->words.w1 = 0x00000000; \ -} - -#define gDPSetCycleType(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA001402; \ - _g->words.w1 = type; \ -} - -#define gDPPipelineMode(pkt, mode) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA001701; \ - _g->words.w1 = mode; \ -} - -#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xED, 24, 8) \ - | _SHIFTL((int)((float)(ulx)*4.0f), 12, 12) \ - | _SHIFTL((int)((float)(uly)*4.0f), 0, 12); \ - _g->words.w1 = _SHIFTL((mode), 24, 8) \ - | _SHIFTL((int)((float)(lrx)*4.0f), 12, 12) \ - | _SHIFTL((int)((float)(lry)*4.0f), 0, 12); \ -} - -#define gDPSetCombine(pkt, muxs0, muxs1) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xFC, 24, 8) \ - | _SHIFTL((muxs0), 0, 24); \ - _g->words.w1 = (muxs1); \ -} - -#define gDPSetTextureLOD(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA001001; \ - _g->words.w1 = type; \ -} - -#define gDPSetTextureLUT(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA000E02; \ - _g->words.w1 = type; \ -} - -#define gDPSetTextureDetail(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA001102; \ - _g->words.w1 = type; \ -} - -#define gDPSetTexturePersp(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA001301; \ - _g->words.w1 = type; \ -} - -#define gDPSetTextureFilter(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA000C02; \ - _g->words.w1 = type; \ -} - -#define gDPSetTextureConvert(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA000903; \ - _g->words.w1 = type; \ -} - -#define gDPSetCombineKey(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA000801; \ - _g->words.w1 = type; \ -} - -#define gDPSetColorDither(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBA000602; \ - _g->words.w1 = type; \ -} - -#define gDPSetFillColor(pkt, color) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xF7000000; \ - _g->words.w1 = color; \ -} - -#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xF6, 24, 8) \ - | _SHIFTL((lrx), 14, 10) \ - | _SHIFTL((lry), 2, 10); \ - _g->words.w1 = _SHIFTL(0, 24, 8) \ - | _SHIFTL((ulx), 14, 10) \ - | _SHIFTL((uly), 2, 10); \ -} - -#define gDPSetAlphaCompare(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xB9000002; \ - _g->words.w1 = type; \ -} - -#define gDPSetDepthSource(pkt, type) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xB9000201; \ - _g->words.w1 = type; \ -} - -#define gSPSetOtherMode(pkt, cmd, shift, length, data) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = _SHIFTL((cmd), 24, 8) \ - | _SHIFTL((shift), 8, 8) \ - | _SHIFTL(((length)-1), 0, 8); \ - _g->words.w1 = (data); \ -} - -#define gDPSetRenderMode(pkt, mode1, mode2) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xB900031D; \ - _g->words.w1 = (mode1) | (mode2); \ -} - -#define gSPClearGeometryMode(pkt, mode) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xB6000000; \ - _g->words.w1 = mode; \ -} - -#define gSPSetGeometryMode(pkt, word) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xB7000000; \ - _g->words.w1 = word; \ -} - -#define gSPNumLights(pkt, n) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBC000002; \ - _g->words.w1 = (0x80000000 + ((n) + 1) * 0x20); \ -} - -#define gSPTexture(pkt, sc, tc, level, tile, on) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xBB, 24, 8) \ - | _SHIFTL(0, 16, 8) \ - | _SHIFTL((level), 11, 3) \ - | _SHIFTL((tile), 8, 3) \ - | _SHIFTL((on), 0, 8); \ - _g->words.w1 = _SHIFTL((sc), 16, 16) \ - | _SHIFTL((tc), 0, 16); \ -} - -#define gDPSetColorImage(pkt, fmt, size, width, image) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xFF, 24, 8) \ - | _SHIFTL((fmt), 21, 3) \ - | _SHIFTL((size), 19, 2) \ - | _SHIFTL((width)-1, 0, 12); \ - _g->words.w1 = (image); \ -} - -#define gDPSetTileSize(pkt, tile, uls, ult, lrs, lrt) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xF2, 24, 8) \ - | _SHIFTL(uls, 12, 12) \ - | _SHIFTL(ult, 0, 12); \ - _g->words.w1 = _SHIFTL(tile, 24, 3) \ - | _SHIFTL(lrs, 12, 12) \ - | _SHIFTL(lrt, 0, 12); \ -} - -#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xF3, 24, 8) \ - | _SHIFTL((uls), 12, 12) \ - | _SHIFTL((ult), 0, 12); \ - _g->words.w1 = _SHIFTL((tile), 24, 3) \ - | _SHIFTL((MIN((lrs),G_TX_LDBLK_MAX_TXL)), 12, 12) \ - | _SHIFTL((dxt), 0, 12); \ -} - -#define gDPSetTile(pkt, fmt, siz, line, tmem, tile, \ - palette, cmt, maskt, shiftt, cms, masks, shifts) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xF5, 24, 8) \ - | _SHIFTL((fmt), 21, 3) \ - | _SHIFTL((siz), 19, 2) \ - | _SHIFTL((line), 9, 9) \ - | _SHIFTL((tmem), 0, 9); \ - _g->words.w1 = _SHIFTL((tile), 24, 3) \ - | _SHIFTL((palette), 20, 4) \ - | _SHIFTL((cmt), 18, 2) \ - | _SHIFTL((maskt), 14, 4) \ - | _SHIFTL((shiftt), 10, 4) \ - | _SHIFTL((cms), 8, 2) \ - | _SHIFTL((masks), 4, 4) \ - | _SHIFTL((shifts), 0, 4); \ -} - -#define gDPSetDepthImage(pkt, image) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xFE, 24, 8); \ - _g->words.w1 = (image); \ -} - -#define G_SETPRIMCOLOR 0xFA - -#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_SETPRIMCOLOR, 24, 8) \ - | _SHIFTL(m, 8, 8) \ - | _SHIFTL(l, 0, 8); \ - _g->words.w1 = _SHIFTL(r, 24, 8) \ - | _SHIFTL(g, 16, 8) \ - | _SHIFTL(b, 8, 8) \ - | _SHIFTL(a, 0, 8); \ -} - -#define gDPSetEnvColor(pkt, r, g, b, a) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xFB, 24, 8); \ - _g->words.w1 = _SHIFTL((r), 24, 8) \ - | _SHIFTL((g), 16, 8) \ - | _SHIFTL((b), 8, 8) \ - | _SHIFTL((a), 0, 8); \ -} - -#define gDPSetTextureImage(pkt, fmt, size, width, img) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xFD, 24, 8) \ - | _SHIFTL((fmt), 21, 3) \ - | _SHIFTL((size), 19, 2) \ - | _SHIFTL((width)-1, 0, 12); \ - _g->words.w1 = (u32)(img); \ -} - -#define gMoveWd(pkt, index, offset, data) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xBC, 24, 8) \ - | _SHIFTL((offset), 8, 16) \ - | _SHIFTL((index), 0, 8); \ - _g->words.w1 = (u32)(data); \ -} - -/* Matrix Operations */ - -#define G_MTX_MODELVIEW 0x00 -#define G_MTX_PROJECTION 0x01 -#define G_MTX_MUL 0x00 -#define G_MTX_LOAD 0x02 -#define G_MTX_NOPUSH 0x00 -#define G_MTX_PUSH 0x04 - -#define gSPPopMatrix(pkt, n) \ -{ \ - Gfx *_g = (Gfx *) (pkt); \ - _g->words.w0 = 0xBD000000; \ - _g->words.w1 = (n); \ -} - -#define gSPViewport(pkt, v) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0x03, 24, 8) \ - | _SHIFTL(G_MV_VIEWPORT, 16, 8) \ - | _SHIFTL(sizeof(Vp), 0, 16); \ - _g->words.w1 = (u32)(v); \ -} - -#define gSP1Triangle(pkt, v0, v1, v2, flag) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xBF, 24, 8); \ - _g->words.w1 = _SHIFTL((flag), 24, 8) \ - | _SHIFTL((v0)*10, 16, 8) \ - | _SHIFTL((v1)*10, 8, 8) \ - | _SHIFTL((v2)*10, 0, 8); \ -} - -#if (defined(F3DLP_GBI)||defined(F3DEX_GBI)) -/*** - *** 2 Triangles - ***/ -#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ - __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \ - _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \ -} - -#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ -{ \ - (_SHIFTL(G_TRI2, 24, 8)| \ - __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \ - __gsSP1Triangle_w1f(v10, v11, v12, flag1) \ -} - -#endif /* F3DEX_GBI/F3DLP_GBI */ - -#if (defined(TRI4_Ext)) - /*** - *** 4 Triangles - 2Tri Extension - *** Draws up to four triangles at a time. - *** Expects values from 0-F, corresponding with # points declared by vertex command. - *** Triangles with all points set to 0 are not drawn. - *** Vertex Buffer reduced to 16 due to only being able to address 0-F - ***/ -#define gSP4Triangles(pkt, v00, v01, v02, v10, v11, v12, \ - v20, v21, v22, v30, v31, v32 ) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ - _SHIFTL((v32),12,4)|_SHIFTL((v22),8,4)|_SHIFTL((v12),4,4)|_SHIFTL((v02),0,4); \ - _g->words.w1 = _SHIFTL((v31),28,4)|_SHIFTL((v30),24,4)|_SHIFTL((v21),20,4)|_SHIFTL((v20),16,4) \ - _SHIFTL((v11),12,4)|_SHIFTL((v10),8,4)|_SHIFTL((v02),4,4)|_SHIFTL((v00),0,4); \ -} - -#define gsSP4Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ -{ \ - (_SHIFTL(G_TRI2, 24, 8)| \ - _SHIFTL((v32),12,4)|_SHIFTL((v22),8,4)|_SHIFTL((v12),4,4)|_SHIFTL((v02),0,4)), \ - (_SHIFTL((v31),28,4)|_SHIFTL((v30),24,4)|_SHIFTL((v21),20,4)|_SHIFTL((v20),16,4) \ - _SHIFTL((v11),12,4)|_SHIFTL((v10),8,4)|_SHIFTL((v02),4,4)|_SHIFTL((v00),0,4)); \ -} - -#endif /* TRI4_Ext*/ - -#define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xE4, 24, 8) \ - | _SHIFTL((xh), 12, 12) \ - | _SHIFTL((yh), 0, 12); \ - _g->words.w1 = _SHIFTL((tile), 24, 3) \ - | _SHIFTL((xl), 12, 12) \ - | _SHIFTL((yl), 0, 12); \ -} \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xB3, 24, 8); \ - _g->words.w1 = _SHIFTL((s), 16, 16) \ - | _SHIFTL((t), 0, 16); \ -} \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(0xB2, 24, 8); \ - _g->words.w1 = _SHIFTL((dsdx), 16, 16) \ - | _SHIFTL((dtdy), 0, 16); \ -} - -/* Lights and Light Operations */ - -typedef struct { - unsigned char col[3]; - char pad1; - unsigned char colc[3]; - char pad2; - signed char dir[3]; - char pad3; -} Light_t; - -typedef struct { - unsigned char col[3]; - char pad1; - unsigned char colc[3]; - char pad2; -} Ambient_t; - -typedef union { - Ambient_t l; - long long int force_structure_alignment[1]; -} Ambient; - -typedef union { - Light_t l; - long long int force_structure_alignment[2]; -} Light; - -typedef struct { - Ambient a; - Light l[4]; -} Lights4; - -typedef struct { - Light l[2]; -} LookAt; - -typedef struct { - int x1, y1, x2, y2; -} Hilite_t; - -typedef union { - Hilite_t h; - long int force_alignmnet[4]; -} Hilite; - -#define G_MOVEMEM 0x03 -/* for gSPNumLights */ -// is NUMLIGHTS_0 accurate? -#define NUMLIGHTS_0 1 -#define NUMLIGHTS_1 1 -#define NUMLIGHTS_2 2 -#define NUMLIGHTS_3 3 -#define NUMLIGHTS_4 4 -#define NUMLIGHTS_5 5 -#define NUMLIGHTS_6 6 -#define NUMLIGHTS_7 7 - -/* for gSPLight */ -#define LIGHT_1 1 -#define LIGHT_2 2 -#define LIGHT_3 3 -#define LIGHT_4 4 -#define LIGHT_5 5 -#define LIGHT_6 6 -#define LIGHT_7 7 -#define LIGHT_8 8 - -#define gSPLight(pkt, l, n) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ - | _SHIFTL(((n)-1)*2+G_MV_L0, 16, 8) \ - | _SHIFTL(sizeof(Light), 0, 16); \ - _g->words.w1 = (u32)(l); \ -} - -#define gSPLookAtX(pkt, la) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ - | _SHIFTL(G_MV_LOOKATX, 16, 8) \ - | _SHIFTL(sizeof(Light), 0, 16); \ - _g->words.w1 = (u32)(la); \ -} - -#define gSPLookAtY(pkt, la) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ - | _SHIFTL(G_MV_LOOKATY, 16, 8) \ - | _SHIFTL(sizeof(Light), 0, 16); \ - _g->words.w1 = (u32)(la); \ -} - -#define gSPLookAt(pkt, la) \ -{ \ - gSPLookAtX((pkt), (la)) \ - gSPLookAtY((pkt), (char *)(la)+16) \ -} - -#endif diff --git a/include/ultra64/gbi.inc b/include/ultra64/gbi.inc deleted file mode 100644 index cb05cf4..0000000 --- a/include/ultra64/gbi.inc +++ /dev/null @@ -1,332 +0,0 @@ -/* GNU as assembler macros for F3D GBI */ - -/* commands with no parameters */ -.macro f3d_noparam cmd - .word (\cmd << 24), 0x00000000 -.endm - -.macro gsImmp1 cmd, param - .word (\cmd << 24), \param -.endm - -/* DMA helper */ -.macro gsDma1p cmd, segAddr, length, params - .byte \cmd, \params - .hword \length - .word \segAddr -.endm - -/* 01: G_MTX */ -/* params */ -.set G_MTX_MODELVIEW, 0x00 -.set G_MTX_PROJECTION, 0x01 -.set G_MTX_MUL, 0x00 -.set G_MTX_LOAD, 0x02 -.set G_MTX_NOPUSH, 0x00 -.set G_MTX_PUSH, 0x04 - -.set G_MTX, 0x01 -.macro gsSPMatrix matrix, params - gsDma1p G_MTX, \matrix, 64, \params -.endm - -/* 02: reserved */ - -/* 03: G_MOVEMEM */ -.set G_MOVEMEM, 0x03 -.set G_MV_L0, 0x86 -.macro gsSPLight light, num - gsDma1p G_MOVEMEM, \light, 16, ((\num)-1)*2+G_MV_L0 -.endm - -/* 04: G_VTX */ -.set G_VTX, 0x04 -.macro gsSPVertex verts, num, index - gsDma1p G_VTX, \verts, 16*\num, ((\num)-1)<<4|(\index) -.endm - -/* 05: reserved */ - -/* 06: G_DL */ -.set G_DL, 0x06 -.set G_DL_PUSH, 0x00 -.set G_DL_NOPUSH, 0x01 -.macro gsSPDisplayList dl - gsDma1p G_DL, \dl, 0, G_DL_PUSH -.endm -.macro gsSPBranchList dl - gsDma1p G_DL, \dl, 0, G_DL_NOPUSH -.endm - -/* geometry mode flags */ -.set G_ZBUFFER, 0x00000001 -.set G_SHADE, 0x00000004 -.set G_SHADING_SMOOTH, 0x00000200 -.set G_CULL_FRONT, 0x00001000 -.set G_CULL_BACK, 0x00002000 -.set G_FOG, 0x00010000 -.set G_LIGHTING, 0x00020000 -.set G_TEXTURE_GEN, 0x00040000 -.set G_TEXTURE_GEN_LINEAR, 0x00080000 - -/* B3: G_RDPHALF_2 */ -.set G_RDPHALF_2, 0xB3 - -/* B4: G_RDPHALF_1 */ -.set G_RDPHALF_1, 0xB4 - -/* B6: G_CLEARGEOMETRYMODE */ -.set G_CLEARGEOMETRYMODE, 0xB6 -.macro gsSPClearGeometryMode flags - .word G_CLEARGEOMETRYMODE << 24 - .word \flags -.endm - -/* B7: G_SETGEOMETRYMODE */ -.set G_SETGEOMETRYMODE, 0xB7 -.macro gsSPSetGeometryMode flags - .word G_SETGEOMETRYMODE << 24 - .word \flags -.endm - -/* B8: G_ENDDL */ -.set G_ENDDL, 0xB8 -.macro gsSPEndDisplayList - f3d_noparam G_ENDDL -.endm - -/* B9: G_SETOTHERMODE_L */ -.set G_SETOTHERMODE_L, 0xB9 -/* G_SETOTHERMODE_L sft: shift count */ -.set G_MDSFT_ALPHACOMPARE, 0 -.set G_MDSFT_ZSRCSEL, 2 -.set G_MDSFT_RENDERMODE, 3 -.set G_MDSFT_BLENDER, 16 - -/* BA: G_SETOTHERMODE_H */ -.set G_SETOTHERMODE_H, 0xBA -/* G_SETOTHERMODE_H sft: shift count */ -.set G_MDSFT_ALPHADITHER, 4 -.set G_MDSFT_RGBDITHER, 6 -.set G_MDSFT_COMBKEY, 8 -.set G_MDSFT_TEXTCONV, 9 -.set G_MDSFT_TEXTFILT, 12 -.set G_MDSFT_TEXTLUT, 14 -.set G_MDSFT_TEXTLOD, 16 -.set G_MDSFT_TEXTDETAIL, 17 -.set G_MDSFT_TEXTPERSP, 19 -.set G_MDSFT_CYCLETYPE, 20 -.set G_MDSFT_PIPELINE, 23 - -.macro gsSPSetOtherMode cmd, sft, len, data - .word ((\cmd & 0xFF) << 24) | ((\sft & 0xFF) << 8) | (\len & 0xFF) - .word \data -.endm - -/* BB: G_TEXTURE */ -.set G_TEXTURE, 0xBB -.macro gsSPTexture scaleS, scaleT, level, tile, enable - .word (G_TEXTURE << 24) | ((\level & 0x7) << 11) | ((\tile & 0x7) << 8) | \enable - .word ((\scaleS & 0xFFFF) << 16) | (\scaleT & 0xFFFF) -.endm - -/* BC: G_MOVEWORD */ -.set G_MOVEWORD, 0xBC -.macro gsMoveWd index, offset, data - .word G_MOVEWORD << 24 | ((\index & 0xFFFF) << 8) | (\offset & 0xFF) - .word \data -.endm - -/* BF: G_TRI1 */ -.set G_TRI1, 0xBF -.macro gsSP1Triangle v0, v1, v2, flag - .word G_TRI1 << 24 - .byte \flag, \v0*10, \v1*10, \v2*10 -.endm - -/* C0: G_NOOP */ -.set G_NOOP, 0xC0 -.macro gsDPNoOp - f3d_noparam G_NOOP -.endm - -/* E6: G_RDPLOADSYNC */ -.set G_RDPLOADSYNC, 0xE6 -.macro gsDPLoadSync - f3d_noparam G_RDPLOADSYNC -.endm - -/* E7: G_RDPPIPESYNC */ -.set G_RDPPIPESYNC, 0xE7 -.macro gsDPPipeSync - f3d_noparam G_RDPPIPESYNC -.endm - -/* E8: G_RDPTILESYNC */ -.set G_RDPTILESYNC, 0xE8 -.macro gsDPTileSync - f3d_noparam G_RDPTILESYNC -.endm - -/* E9: G_RDPFULLSYNC */ -.set G_RDPFULLSYNC, 0xE9 -.macro gsDPFullSync - f3d_noparam G_RDPFULLSYNC -.endm - -/* F0: G_LOADTLUT */ -.set G_LOADTLUT, 0xF0 -.macro gsDPLoadTLUTCmd tile, count - .word G_LOADTLUT << 24 - .word ((\tile & 0x7) << 24) | (\count & 0x3FFF) << 10 -.endm - -/* F1: unused */ - -/* F2: G_SETTILESIZE */ -.set G_SETTILESIZE, 0xF2 -.macro gsDPSetTileSize tile, uls, ult, lrs, lrt - .word (G_SETTILESIZE << 24) | ((\uls & 0x0FFF) << 12) | (\ult & 0x0FFF) - .word ((\tile & 0x7) << 24) | ((\lrs & 0x0FFF) << 12) | (\lrt & 0x0FFF) -.endm - -/* F3: G_LOADBLOCK */ -.set G_LOADBLOCK, 0xF3 -.macro gsDPLoadBlock tile, uls, ult, lrs, dxt - .word (G_LOADBLOCK << 24) | ((\uls & 0x0FFF) << 12) | (\ult & 0x0FFF) - .word ((\tile & 0x7) << 24) | ((\lrs & 0x0FFF) << 12) | (\dxt & 0x0FFF) -.endm - -/* F5: G_SETTILE */ -.set G_TX_LOADTILE, 0x7 -.set G_TX_RENDERTILE, 0x0 - -/* axis clamp and mirror flags */ -.set G_TX_NOMIRROR, 0x0 -.set G_TX_WRAP, 0x0 -.set G_TX_MIRROR, 0x1 -.set G_TX_CLAMP, 0x2 - -/* mask flags */ -.set G_TX_NOMASK, 0x0 - -/* shift flags */ -.set G_TX_NOLOD, 0x0 - -.set G_SETTILE, 0xF5 -.macro gsDPSetTile fmt, siz, line, tmem, tile, palette, cmt, maskt, shiftt, cms, masks, shifts - .word (G_SETTILE << 24) | ((\fmt & 0x7) << 21) | ((\siz & 0x3) << 19) | ((\line & 0x1FF) << 9) | (\tmem & 0x1FF) - .word ((\tile & 0x7) << 24) | ((\palette & 0xF) << 20) | ((\cmt & 0x3) << 18) | ((\maskt & 0xF) << 14) | ((\shiftt & 0xF) << 10) | ((\cms & 0x3) << 8) | ((\masks & 0xF) << 4) | (\shifts & 0xF) -.endm - -/* F6: G_FILLRECT */ -.set G_FILLRECT, 0xF6 -.macro gsDPFillRectangle ulx, uly, lrx, lry - .word (G_FILLRECT << 24) | ((\lrx & 0x3FF) << 14) | ((\lry & 0x3FF) << 2) - .word ((\ulx & 0x3FF) << 14) | ((\uly & 0x3FF) << 2) -.endm - -/* F7: G_SETFILLCOLOR */ -.set G_SETFILLCOLOR, 0xF7 -.macro gsDPSetFillColor fillValue - .word G_SETFILLCOLOR << 24 - .word \fillValue -.endm - -/* helper for RGBA colors */ -.macro sDPRGBColor cmd r, g, b, a - .word \cmd << 24 - .byte \r, \g, \b, \a -.endm - -/* F8: G_SETFOGCOLOR */ -.set G_SETFOGCOLOR, 0xF8 -.macro gsDPSetFogColor r, g, b, a - sDPRGBColor G_SETFOGCOLOR, \r, \g, \b, \a -.endm - -/* F9: G_SETBLENDCOLOR */ -.set G_SETBLENDCOLOR, 0xF9 -.macro gsDPSetBlendColor r, g, b, a - sDPRGBColor G_SETBLENDCOLOR, \r, \g, \b, \a -.endm - -/* FA: G_SETPRIMCOLOR */ -.set G_SETPRIMCOLOR, 0xFA -.macro gsDPSetPrimColor m, l, r, g, b, a - .word (G_SETPRIMCOLOR << 24) | ((\m & 0xFF) << 8) | (\l & 0xFF) - .byte \r, \g, \b, \a -.endm - -/* FB: G_SETENVCOLOR */ -.set G_SETENVCOLOR, 0xFB -.macro gsDPSetEnvColor r, g, b, a - sDPRGBColor G_SETENVCOLOR, \r, \g, \b, \a -.endm - -/* FC: G_SETCOMBINE */ -/* color combiner */ -.set G_CCMUX_COMBINED, 0 -.set G_CCMUX_TEXEL0, 1 -.set G_CCMUX_TEXEL1, 2 -.set G_CCMUX_PRIMITIVE, 3 -.set G_CCMUX_SHADE, 4 -.set G_CCMUX_ENVIRONMENT, 5 -.set G_CCMUX_CENTER, 6 -.set G_CCMUX_SCALE, 6 -.set G_CCMUX_COMBINED_ALPHA, 7 -.set G_CCMUX_TEXEL0_ALPHA, 8 -.set G_CCMUX_TEXEL1_ALPHA, 9 -.set G_CCMUX_PRIMITIVE_ALPHA, 10 -.set G_CCMUX_SHADE_ALPHA, 11 -.set G_CCMUX_ENV_ALPHA, 12 -.set G_CCMUX_LOD_FRACTION, 13 -.set G_CCMUX_PRIM_LOD_FRAC, 14 -.set G_CCMUX_NOISE, 7 -.set G_CCMUX_K4, 7 -.set G_CCMUX_K5, 15 -.set G_CCMUX_1, 6 -.set G_CCMUX_0, 31 - -/* alpha combiner */ -.set G_ACMUX_COMBINED, 0 -.set G_ACMUX_TEXEL0, 1 -.set G_ACMUX_TEXEL1, 2 -.set G_ACMUX_PRIMITIVE, 3 -.set G_ACMUX_SHADE, 4 -.set G_ACMUX_ENVIRONMENT, 5 -.set G_ACMUX_LOD_FRACTION, 0 -.set G_ACMUX_PRIM_LOD_FRAC, 6 -.set G_ACMUX_1, 6 -.set G_ACMUX_0, 7 - -.set G_SETCOMBINE, 0xFC -.macro gsDPSetCombine muxs0, muxs1 - .word (G_SETCOMBINE << 24) | (\muxs0 & 0x00FFFFFF) - .word \muxs1 -.endm -.macro gsDPSetCombineMode a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1 - .word (G_SETCOMBINE << 24) | ((\a0 & 0xF) << 20) | ((\c0 & 0x1F) << 15) | ((\Aa0 & 0x7) << 12) | ((\Ac0 & 0x7) << 9) | ((\a1 & 0xF) << 5) | (\c1 & 0x1F) - .word ((\b0 & 0xF) << 28) | ((\b1 & 0xF) << 24) | ((\Aa1 & 0x7) << 21) | ((\Ac1 & 0x7) << 18) | ((\d0 & 0x7) << 15) | ((\Ab0 & 0x7) << 12) | ((\Ad0 & 0x7) << 9) | ((\d1 & 0x7) << 6) | ((\Ab1 & 0x7) << 3) | (\Ad1 & 0x7) -.endm - -/* FD: G_SETTIMG */ -/* fmt */ -.set G_IM_FMT_RGBA, 0x00 -.set G_IM_FMT_YUV, 0x01 -.set G_IM_FMT_CI, 0x02 -.set G_IM_FMT_IA, 0x03 -.set G_IM_FMT_I, 0x04 - -/* size */ -.set G_IM_SIZ_4b, 0x00 -.set G_IM_SIZ_8b, 0x01 -.set G_IM_SIZ_16b, 0x02 -.set G_IM_SIZ_32b, 0x03 - -.set G_SETTIMG, 0xFD -.macro gsDPSetTextureImage fmt, size, width, segAddr - .word (G_SETTIMG << 24) | ((\fmt & 0x7) << 21) | ((\size & 0x3) << 19) | ((\width-1) & 0x0FFF) - .word \segAddr -.endm - diff --git a/include/ultra64/interrupt.h b/include/ultra64/interrupt.h deleted file mode 100644 index 7eb8a4d..0000000 --- a/include/ultra64/interrupt.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _ULTRA64_INTERRUPT_H_ -#define _ULTRA64_INTERRUPT_H_ - -/* Types */ - -typedef u32 OSIntMask; - - -/* Functions */ - -OSIntMask osGetIntMask(void); -OSIntMask osSetIntMask(OSIntMask); - -#endif diff --git a/include/ultra64/libaudio.h b/include/ultra64/libaudio.h deleted file mode 100644 index 474061b..0000000 --- a/include/ultra64/libaudio.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _ULTRA64_LIBAUDIO_H_ -#define _ULTRA64_LIBAUDIO_H_ - - -typedef struct -{ - u8 *offset; - s32 len; -} ALSeqData; - -typedef struct -{ - s16 revision; - s16 seqCount; - ALSeqData seqArray[1]; -} ALSeqFile; - -void alSeqFileNew(ALSeqFile *f, u8 *base); - -#endif diff --git a/include/ultra64/libc.h b/include/ultra64/libc.h deleted file mode 100644 index 3b402d4..0000000 --- a/include/ultra64/libc.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _ULTRA64_LIBC_H_ -#define _ULTRA64_LIBC_H_ - -int sprintf(char *, const char *, ... ); -void bcopy(const void *src, void *dest, size_t size); -void bzero(void *s, size_t size); - -#endif diff --git a/include/ultra64/message.h b/include/ultra64/message.h deleted file mode 100644 index 1953149..0000000 --- a/include/ultra64/message.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef _ULTRA64_MESSAGE_H_ -#define _ULTRA64_MESSAGE_H_ - -/* Events */ -#define OS_EVENT_SW1 0 -#define OS_EVENT_SW2 1 -#define OS_EVENT_CART 2 -#define OS_EVENT_COUNTER 3 -#define OS_EVENT_SP 4 -#define OS_EVENT_SI 5 -#define OS_EVENT_AI 6 -#define OS_EVENT_VI 7 -#define OS_EVENT_PI 8 -#define OS_EVENT_DP 9 -#define OS_EVENT_CPU_BREAK 10 -#define OS_EVENT_SP_BREAK 11 -#define OS_EVENT_FAULT 12 -#define OS_EVENT_THREADSTATUS 13 -#define OS_EVENT_PRENMI 14 - -#define OS_MESG_NOBLOCK 0 -#define OS_MESG_BLOCK 1 - -/* Types */ - -typedef u32 OSEvent; - -typedef void *OSMesg; - -typedef struct OSMesgQueue_s -{ - OSThread *mtqueue; - OSThread *fullqueue; - s32 validCount; - s32 first; - s32 msgCount; - OSMesg *msg; -} OSMesgQueue; - -/* Functions */ - -void osCreateMesgQueue(OSMesgQueue *mq, OSMesg *msgBuf, s32 count); -s32 osSendMesg(OSMesgQueue *mq, OSMesg msg, s32 flag); -s32 osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag); -s32 osRecvMesg(OSMesgQueue *mq, OSMesg *msg, s32 flag); -void osSetEventMesg(OSEvent e, OSMesgQueue *mq, OSMesg msg); -void osViSetEvent(OSMesgQueue *mq, OSMesg msg, u32 retraceCount); -s32 osContStartReadData(OSMesgQueue *mq); - -#endif diff --git a/include/ultra64/os_cont.h b/include/ultra64/os_cont.h deleted file mode 100644 index 7393f39..0000000 --- a/include/ultra64/os_cont.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _ULTRA64_CONTROLLER_H_ -#define _ULTRA64_CONTROLLER_H_ - -typedef struct -{ - /*0x00*/ u16 type; /* Controller Type */ - /*0x02*/ u8 status; /* Controller status */ - /*0x03*/ u8 errno; -} OSContStatus; - -typedef struct { - /*0x00*/ u16 button; - /*0x02*/ s8 stick_x; /* -80 <= stick_x <= 80 */ - /*0x03*/ s8 stick_y; /* -80 <= stick_y <= 80 */ - /*0x04*/ u8 errno; -} OSContPad; - -#define A_BUTTON (1 << 15) // 0x8000 -#define B_BUTTON (1 << 14) // 0x4000 -#define Z_TRIG (1 << 13) // 0x2000 -#define START_BUTTON (1 << 12) // 0x1000 -#define U_JPAD (1 << 11) // 0x0800 -#define D_JPAD (1 << 10) // 0x0400 -#define L_JPAD (1 << 9) // 0x0200 -#define R_JPAD (1 << 8) // 0x0100 -#define DUMMY_1 (1 << 7) // 0x0080 (unused) -#define DUMMY_2 (1 << 6) // 0x0040 (unused) -#define L_TRIG (1 << 5) // 0x0020 -#define R_TRIG (1 << 4) // 0x0010 -#define U_CBUTTONS (1 << 3) // 0x0008 -#define D_CBUTTONS (1 << 2) // 0x0004 -#define L_CBUTTONS (1 << 1) // 0x0002 -#define R_CBUTTONS (1 << 0) // 0x0001 - - -s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *); -void osContGetReadData(OSContPad *); - -#endif diff --git a/include/ultra64/pi.h b/include/ultra64/pi.h deleted file mode 100644 index 4844f81..0000000 --- a/include/ultra64/pi.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef _ULTRA64_PI_H_ -#define _ULTRA64_PI_H_ - -/* Ultra64 Parallel Interface */ - -/* Types */ - -typedef struct -{ - u32 errStatus; - void *dramAddr; - void *C2Addr; - u32 sectorSize; - u32 C1ErrNum; - u32 C1ErrSector[4]; -} __OSBlockInfo; - -typedef struct -{ - u32 cmdType; - u16 transferMode; - u16 blockNum; - s32 sectorNum; - u32 devAddr; - u32 bmCtlShadow; - u32 seqCtlShadow; - __OSBlockInfo block[2]; -} __OSTranxInfo; - -typedef struct OSPiHandle_s -{ - struct OSPiHandle_s *next; - u8 type; - u8 latency; - u8 pageSize; - u8 relDuration; - u8 pulse; - u8 domain; - u32 baseAddress; - u32 speed; - __OSTranxInfo transferInfo; -} OSPiHandle; - -typedef struct -{ - u8 type; - u32 address; -} OSPiInfo; - -typedef struct -{ - u16 type; - u8 pri; - u8 status; - OSMesgQueue *retQueue; -} OSIoMesgHdr; - -typedef struct -{ - /*0x00*/ OSIoMesgHdr hdr; - /*0x08*/ void *dramAddr; - /*0x0C*/ u32 devAddr; - /*0x10*/ u32 size; - OSPiHandle *piHandle; //from the official definition -} OSIoMesg; - -/* Definitions */ - -#define OS_READ 0 // device -> RDRAM -#define OS_WRITE 1 // device <- RDRAM - -#define OS_MESG_PRI_NORMAL 0 -#define OS_MESG_PRI_HIGH 1 - -/* Functions */ - -s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, - u32 devAddr, void *vAddr, u32 nbytes, OSMesgQueue *mq); -void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, - s32 cmdMsgCnt); -OSMesgQueue *osPiGetCmdQueue(void); -s32 osPiWriteIo(u32 devAddr, u32 data); -s32 osPiReadIo(u32 devAddr, u32 *data); - -#endif diff --git a/include/ultra64/rdp.h b/include/ultra64/rdp.h deleted file mode 100644 index 718d223..0000000 --- a/include/ultra64/rdp.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _ULTRA64_RDP_H_ -#define _ULTRA64_RDP_H_ - -/* DP Command Registers */ - -#define DPC_REG_BASE 0xA4100000 - -#define DPC_START_REG (*(vu32 *)(DPC_REG_BASE + 0x00)) -#define DPC_END_REG (*(vu32 *)(DPC_REG_BASE + 0x04)) -#define DPC_CURRENT_REG (*(vu32 *)(DPC_REG_BASE + 0x08)) -#define DPC_STATUS_REG (*(vu32 *)(DPC_REG_BASE + 0x0C)) -#define DPC_CLOCK_REG (*(vu32 *)(DPC_REG_BASE + 0x10)) -#define DPC_BUFBUSY_REG (*(vu32 *)(DPC_REG_BASE + 0x14)) -#define DPC_PIPEBUSY_REG (*(vu32 *)(DPC_REG_BASE + 0x18)) -#define DPC_TMEM_REG (*(vu32 *)(DPC_REG_BASE + 0x1C)) - - -/* DP Span Registers */ - -#define DPS_REG_BASE 0xA4200000 - -#define DPS_TBIST_REG (*(vu32 *)(DPS_REG_BASE + 0x00)) -#define DPS_TEST_MODE_REG (*(vu32 *)(DPS_REG_BASE + 0x04)) -#define DPS_BUFTEST_ADDR_REG (*(vu32 *)(DPS_REG_BASE + 0x08)) -#define DPS_BUFTEST_DATA_REG (*(vu32 *)(DPS_REG_BASE + 0x0C)) - - -/* Functions */ - -u32 osDpGetStatus(void); -void osDpSetStatus(u32 status); - -#endif diff --git a/include/ultra64/tlb.h b/include/ultra64/tlb.h deleted file mode 100644 index 1a0f469..0000000 --- a/include/ultra64/tlb.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _ULTRA64_TLB_H_ -#define _ULTRA64_TLB_H_ - -/* Types */ - -typedef u32 OSPageMask; -/* OSPageMask Valid Values */ -#define OS_PM_4K 0x0000000 -#define OS_PM_16K 0x0006000 -#define OS_PM_64K 0x001e000 -#define OS_PM_256K 0x007e000 -#define OS_PM_1M 0x01fe000 -#define OS_PM_4M 0x07fe000 -#define OS_PM_16M 0x1ffe000 - -/* Functions */ - -void osMapTLB(s32 index, OSPageMask pm, void *vaddr, u32 evenpaddr, - u32 oddpaddr, s32 asid); -void osMapTLBRdb(void); -void osUnmapTLB(s32 index); -void osUnmapTLBAll(void); -void osSetTLBASID(s32 asid); - -#endif diff --git a/notes/GE Documentation/21990 index extension.txt b/notes/GE Documentation/21990 index extension.txt deleted file mode 100644 index 33dcfc1..0000000 --- a/notes/GE Documentation/21990 index extension.txt +++ /dev/null @@ -1,1279 +0,0 @@ -conversion value for 21990 pointers -JAP -0x20DD0 -USA -0x20D90 -PAL -0x1EC50 - Subtract that value from any pointer within the respective file to return an offset within 21990. Likewise, add it to any offset to return a pointer at runtime. - -Note, offsets below only refer to USA offsets. These +will+ differ in the other regions! - -+_+ - - 0-D0 RSP ASM: gets copied to SP IMEM 04001000-040010D0 - D0-A00 RSP ASM? - A00-22B0 RSP ASM? - 22B0 - 22B4 - 22B8 - 22BC-22EC - pointer to 803AB400, pointer to debug text - 803AB400 boot - 803AB410 rmon - 803AB710 idle - 803AB750 shed - 803AB950 main - 803B3950 audi - uses text from 7640-7670 - ******safe to delete****** - - 2304 RESERVED display stderr - 2308 RESERVED stderr event enabled - 230C RESERVED display stderr event - 2310 RESERVED - - 236C - 2370 #entries following - 2374-2454 ??? entries 0x20 each - 2454-24B4 ??? entries 0x8 each - 24A0 RESERVED counter for frames - 24A4 RESERVED - 24B4-250C ???, data for images on legal screen entries 0x2C each - 0x0 4 p->? - 0x4 2 image width - 0x6 2 image height - 0x8 4 [float] ? (60.0) - 0xC 4 [float] page width (1.3) - 0x10 4 [float] ? (30.0) - 0x14 4 [float] ? (10000.0) - 0x18 2 ? width - 0x1A 2 ? height - 0x1C 2 lrx width - 0x1E 2 lry height - 0x20 4 ulx (0) - 0x24 4 uly (1) - 0x28 4 p->data - 250C ??? - 2510 ??? - 2514 p->80023244 [24B4]: viewport 1 can be commandereed for other images - 2518 p->80023244 [24B4]: viewport 2 can be commandereed for other images - 251C colour output mode. used by RGBA conversion routines - - 2534 1 jpeg 16bit grab # [70004758] - 2538 1 jpeg 32bit grab # [700048D4] - 253C 1 rgb 16bit grab # [70004A60] - 2540 1 rgb 32bit grab # [70004BB4] - - 2550 ??? used in 70004E2C - 2554 - 2558 ??? p->table... used at 70004E98. pointer to table or zero - - 2574-294C part of debug messages: RSP register display, error & exceptions, etc. - long value, long value, pointer to text displayed - uses text from 7A30-7CE0 - ******safe to delete****** - 294C-2988 hardcoded pointers to thread stack pointer allocations, apparently unused - ******safe to delete****** - 2988-3268 stderr buffer; typically 0x47 per line, 0x1F lines; overruns unprintable bitcode range - 31F0-33EC bitcode for each char in stderr; each nibble is 1bit black/white code; printable chars from +3270 - 33EC RESERVED p->video buffer 1 - 33F0 RESERVED p->video buffer 2 - - 3414 RESERVED update stage flag - 3418 RESERVED current stage # - 341C RESERVED "-m" current allocation value - 3420 RESERVED "-ma" current allocation value - 3424 RESERVED "show mem use" flag - 3428 RESERVED "show mem bars" flag - 342C-355C Memory Allocation Table - stage ID, followed by pointer - allocation text from 7CE0-8330 - - 356C loaded stage. -1 until a stage starts - 3570 when =1, activates debug menu - - 3594 1 "u64.taskgrab.#.core" ram dump #, used at 700067E0 - - 35A4 RESERVED music track# - 35A8-35C8 track run values? no idea... - 35C8-3648 don't know, but necessary for music. each track 0x2 - - 36D0-36D8 seed for random value - 36D8-36E0 - 36E0 RESERVED strstr: #strings - 36E4 RESERVED strstr: p->current string# - 36E8-3788 strstr: p->each substring; 0x28 substrings maximum - 3788-4210 image! 0xA80 - 4210 RESERVED debug menu x position offset - 4214 RESERVED debug menu y position offset - 4218 RESERVED debug menu x text position - 421C RESERVED debug menu y text position - 4220 - 42A0 display list - calls 80024520 [0x3788] - **used by stdout (debug display)** - 42A0-5880 stdout: debug menu screen display buffer - sequential entries write one complete column, so each character in a row is 0x46 bytes apart. - note it does not span the entire screen width! - format: entries 0x2 bytes each; 0x50 by 0x23 - 0x0 1 character to display - 0x1 1 indexed colour code (0-1F) - 5880-5980 RESERVED primary colour table for stdout (debug display) - format: entries 0x8 bytes each; 0x20 entries total - 0x0 4 rdp_setprimcolour upper command [FA000000] - 0x0 4 32bit colour - 5980-5A80 RESERVED enviroment colour table for stdout (debug display) - format: entries 0x8 bytes each; 0x20 entries total - 0x0 4 rdp_setenvcolour upper command [FB000000] - 0x0 4 32bit colour - 5A80 RESERVED #enviroment colours in previous table - 5A84-5B08 pointers to {1B}[m values (pos. part of vi_debug) - values from 8480-8600 - ******safe to delete****** - 5B08-5B10 RESERVED end display list command - 5B10-5B18 RESERVED blank C0- image expansion command - 5B18-5B1C RESERVED stdout text primary colour - 5B20-5B24 RESERVED stdout text enviroment colour - 5B28 - 5B2C - - 5B34 RESERVED p->current point in controller input index (80064F30) - - 5B40 RESERVED flags indicating controllers plugged in - - 5B48-5B58 RESERVED controllers 1-4: True if rumble pak inserted - 5B58-5B68 RESERVED controllers 1-4: rumble/unrumble state - 5B68-5B78 RESERVED controllers 1-4: rumble duration (milliseconds) - 5B78-5B88 RESERVED controllers 1-4: shot fired or rumble on... - - 5B94 RESERVED disable all rumble - 5B98 RESERVED p->TLB function to handle ramrom record - - 5C30-6950 DISPLAY MODES 0-29 0x50 each entry - 0x0 4 index - 0x4 4 base mask for status? - 0x8 4 h width - 0xC 4 timing - 0x10 4 v sync - 0x14 4 h sync - 0x18 4 h sync leap - 0x1C 4 h video - 0x20 4 x scale (probably) - 0x24 4 ? - 0x28 4 set 1: h width? - 0x2C 4 set 1: y scale (probably) - 0x30 4 set 1: v video - 0x34 4 set 1: v burst - 0x38 4 set 1: v interrupt reg - 0x3C 4 set 2: h width? - 0x40 4 set 2: y scale - 0x44 4 set 2: v video - 0x48 4 set 2: v burst - 0x4C 4 set 2: v interrupt reg - - 69A0 RESERVED for p->??? - 69A4 RESERVED for p->??? - - 69B0-69D0 stdout (debug display) background alpha - 69D4-69F4 stdout (debug display) background alpha - - 6A00 RESERVED TRUE when ??? loaded - 6A04 RESERVED p->??? - 6A08 RESERVED p->??? - - 6A30 RESERVED - 6A40-7240 causes the eye in the intro to drift left and right - 7240 pointer to 80068DF0 ??? - - 7250-7280 ??? - 7280-72B0 ??? - 72B0 pointer to 80028010 [0x7280] ??? - 72B4 pointer to 80027FE0 [0x7250] ??? - 72B8-7450 ??? dynamically constructed? - 7450-754E ??? table of shorts used in debug message display (7001ABB4) - 754E-7560 ??? second table of shorts used in debug message display (7001ABB4) - 7560-7570 hex (lower case) characters - 7574-7584 hex (upper case) characters - - 7590-75E0 VI settings - 75E0-7630 VI settings - 7630-7640 - 7640-7670 debug text: debug handler names - ******safe to delete****** - 7670-7690 TLB used at 7000159C - 7690-76D0 debug text: speed display - ******safe to delete****** - 76D0-7700 unknown debug text and binary values - 7700-7A20 text for image capture tools - ******safe to delete****** - 7A20-7CDC text for error type - 7CD0-8330 stage memory allocation strings - 8330-8338 "-level_" string keyword: activate debug parsing on hit - 8338-836C default memory allocation string? - 836C-8370 "-m" memory allocation keyword: search - 8370-8374 "-m" memory allocation keyword: parse - 8374-837C "-level_" string keyword: search - 837C-8384 "-level_" string keyword: parse - sets level to following stage number. Numeral must be a 2-digit decimal number or else! - 8384-838C "-hard" string keyword: search - 838C-8394 "-hard" string keyword: parse - 8394-839C "-hard" string keyword: parse - sets difficulty to following number. Numeral must be a single-digit decimal number 0-3 or else! - 839C-83A0 "-ma" memory allocation keyword: search - 83A0-83A4 "-ma" memory allocation keyword: parse - 83A4-83BC "u64.taskgrab.%d.core" used for memory dump - 83BC-83CC "boss_c_debug" - ******safe to delete****** - 83D0-8410 TLB used at 70007E80 - 8410-841C "memp_c_debug" - ******safe to delete****** - 8420-8424 "-mf" memory allocation keyword: search - 8424-8428 "-mf" memory allocation keyword: parse - 8428-842C "-ml" memory allocation keyword: search - 842C-8430 "-ml" memory allocation keyword: parse - 8430-8434 "-me" memory allocation keyword: search - 8434-8438 "-me" memory allocation keyword: parse - see "memory allocation and memory bank" doc for more details - 8440-8450 "mema_c_debug" - ******safe to delete****** - 8450 "%d " debug memory display: allocation amount template - 8454 "..." debug memory display: unable to display allocation amount - 8458 "[%d]" default strtok string - 8464 "-d" debug mode command line argument test value - 8468 "-s" no sound command line argument test value - 846C "-j" japanese command line argument test value - 8470-847C "vi_c_debug" - ******safe to delete****** - 8480-8600 0x1B[#m probably memory allocation debug - ******safe to delete****** - 8600-8610 joy_c_debug - ******safe to delete****** - 8610-8690 MI Interrupt Reg values (though they sure as heck don't look like them) - refer to 7000DD30 for explaination - 8690 - - 86B0-86D0 offsets for selecting TLB handler for particular interrupts - 86D0-86F4 TLB interrupt handlers - 8700-8880 TLB ??? used at 7001123C 0x60 - 8884-8934 TLB ??? used at 70011A6C 0x18 - 8934 [float] - - 8960-8964 "hlL" half and long characters for c-string variables - 8964-896C " +-#0" special characters for ints in c-string variables - 896C 1 1<<0 - 8970 2 1<<1 - 8974 4 1<<2 - 8978 8 1<<3 - 897C 10 1<<4 - 8980 0 - 8984-8A54 TLB used at 700138F0 - - 8AA0-8AE8 TLB used at 70019480 - - 8B00-8BD4 display assertation fault error text - ******safe to delete****** - 8BD4 [float] ??? - 8BD8-8C1C TLB used at 7001AE5C - - 8CC0-8E44 TLB used at 7001C45C - 8E44-8E98 TLB used at 7001C45C - 8E98-8EF8 TLB used at 7001CC7C - - 8F48 NaN ***unknown use*** - 8F4C Inf ***unknown use*** - - 8F60-8F80 TLB used at 7001E610 - 8F80-8FA0 TLB used at 7001FFA8 - - 8FD0 - 8FD4 - 8FD8 - 8FDC-92CC offset table for animations - 92D0-94AC ???; used as a temp buffer for copying global action block types - 94AC-94CC list of weapon models for debug option 'weapon load' - ******safe to delete - do not allow weapon load****** - 94D0-9544 Monitor image object animation controller - 9544-95B8 ? object animation controller - 95B8-962C Taser object animation controller - - 9640-99E8 used to initialize BONDdata right and left item buffers (+0x864 & +0xC0C respectively) - 99E8 - 99EC - 99F0-99FC - 99FC - - 9A40 RESERVED - 9A44 RESERVED - - 9AD0-9AE0 RGBA values: DCDCDC00 DCDCDC00 FFFFFF00 FFFFFF00 - - 9B10 RESERVED ???; used in step 4 of Eye intro - 9B14 RESERVED ???; used as state of bleeding animation in Eye intro - - 9B30-9B78 RESERVED for runtime settings - 9B30 RESERVED current menu - 9B34 RESERVED update to current menu - 9B38 RESERVED - 9B3C RESERVED timer for folder select screen (resets at 30sec.) - 9B40 RESERVED tab 1 selected - 9B44 RESERVED tab 2 selected - 9B48 RESERVED tab 3 selected - 9B4C RESERVED tab 1 highlight - 9B50 RESERVED tab 2 highlight - 9B54 RESERVED tab 3 highlight - 9B58 RESERVED selected folder # - 9B5C RESERVED copy of selected folder # - 9B60 RESERVED mode: 0-solo, 1-multi, 2-cheats - 9B64 RESERVED selected stage - 9B68 RESERVED p->briefing data for selected stage - 9B6C RESERVED selected difficulty: -1-multi, 0-agent, 1-secret, 2-00, 3-007 - 9B70 RESERVED append "cheat " to select mission - 9B74 RESERVED append "cheat " to multiplayer - 9B78 [float] horiontal cursor position - 9B7C [float] vertical cursor position - 9B80 RESERVED final menu briefing page (menu 0A) - 9B84 RESERVED current menu briefing page (menu 0A) - 9B88 RESERVED icon on folder select screen (0-sight, 1-copy, 2-delete) - 9B8C RESERVED -1 or folder selected for deletion - 9B90 RESERVED delete folder minimenu selected option (0-confirm : 1-cancel) - 9B94 RESERVED 0-failed; 1-aborted - 9B98 RESERVED 0-aborted/failed; 1-killed in action - 9B9C RESERVED TRUE if first time on legal screen - 9BA0 RESERVED TRUE if first time through main menus - 9BA4 RESERVED previous keypress - - 9BB0 RESERVED screen size; 0:320x240, 1:440x330 - 9BB4 RESERVED - 9BB8 RESERVED TRUE if emulating Spectrum - 9BBC RESERVED TRUE if cheat menu available - 9BC0 RESERVED p->DL target for nintendologo, goldeneyelogo, and walletbond object data - 9BC4 RESERVED p->video buffer for menus - 9BC8 RESERVED ???, called by legal screen constructor - 9BCC RESERVED p->folder object instance - - 9BE0-9C00 RGBA values: 96969600 96969600 FFFFFF00 FFFFFF00 4D4D2E00 00000000 FFFFFF00 FFFFFF00 - - 9C10-9C20 RESERVED floats for 007 mode slidebars - initialized at runtime - 9C20-9C30 japanese text brown palette for main folder menus (RGBA) - - 9C3C-9D2C text on legal screen 0x14 each entry - long h_pos, long v_pos, long flag, long=1, short txtID, short RESERVED - 9D2C-9E04 ??? 0x4C each entry - first 0x40 copied by 7F00A914 - prematurely ends before last three entries - - 9E34 [float] folder option COPY left bound - 9E38 [float] folder option COPY upper bound - 9E3C [float] folder option COPY right bound - 9E40 [float] folder option COPY lower bound - 9E44 [float] folder option ERASE left bound - 9E48 [float] folder option ERASE upper bound - 9E4C [float] folder option ERASE right bound - 9E50 [float] folder option ERASE lower bound - 9E54-A19C solo missions and briefings 0x1C each entry - A19C-A1A8 ??? - used by 4-folder constructor - A1A8-A1B4 ??? - used by 4-folder constructor - A1B4-A1F4 ??? - copied by 05 main folder select menu - - A224-A240 ??? - copied by MP character select [7F00D5E8] - A240-A254 mission select cursor - x position of slots - A254-A264 mission select cursor - y position of slots - A264-A2C4 MP game length settings 0xC each - A2C4-A2E4 MP scenario select and player restrictions 0x4 each - A2E4-A404 MP stage select menu 0x18 each - A404 RESERVED #mp selectable characters - A408-A708 MP character selection menu 0x18 each - A708-A760 MP handicap menu 0x8 each - A760-A780 MP controller configuration menu 0x4 each - A780-A790 MP sight & aim settings 0x4 each - A790-A7D4 RESERVED MP settings - A790 RESERVED selected # players - A794 player 1 character set to -1; this causes handicap/control init. - A798 player 2 character - A79C player 3 character - A7A0 player 4 character - A7A4 MP stage selected - A7A8 game length - A7AC aim and sight adjustment - A7B0 scenario - A7B4 1=unlock stage select - A7B8 1=unlock game length - A7BC 1=unlock characters - A7C0 1=unlock weapon select - A7C4 1=unlock handicap - A7C8 1=unlock control style - A7CC 1=unlock aim and sight - A7D0 - A7D4-A84C solo target mission times 0x6 each - values are in # seconds - 60 (0x3C)=1 minute - 0x0 2 agent time - 0x2 2 secret agent time - 0x4 2 00 agent time - A850 - A854 RESERVED option selected on MP menu - A858-A870 RESERVED intro settings - A870-AB2C intros 0x14 each condense! - long body, long head, short text, short text, short text, short RESERVED, long flag - AB2C-AC9C random intro animation table - animation ID, [float] start frame offset , [float] playback speed, camera movement preset (0-2) - AC9C - ACA0 - ACA4 - ACA8-ACC0 list of random rifles used in intro - ACC0-ACEC list of random pistols used in intro - - AD60-AD70 8 16bit palette entries: 50% primary colours. Used by 7F01A4E0 - - ADA0-B77C red screen animations - compressed images; 50x60, on side - ADA0 ADBA ADDD AE1B AE6C AEBB AF20 - AF85 AFE2 B037 B077 B0B5 B0F4 B13C - B187 B1C2 B1FD B234 B276 B2B2 B2EA - B325 B357 B38D B3CE B426 B487 B4BB - B4EE B524 B55E B594 B5D0 B612 B64F - B688 B6C1 B6FA B725 B741 B758 B76F - B77C RESERVED - B780 RESERVED for eeprom folder 1's selected Bond - B784 RESERVED for eeprom folder 2's selected Bond - B788 RESERVED for eeprom folder 3's selected Bond - B78C RESERVED for eeprom folder 4's selected Bond - B790-B7F0 eeprom-ish copy for reset? - B7F0-B8D0 eeprom-ish copy for reset? 0x60 each; x4 copies - B8D0-B930 eeprom-ish copy for unlocked stages? 0x60 - B930-BAB0 eeprom-ish copy for reset? 0x60 each; x4 copies - BAB0-BB10 eeprom-ish working copy? 0x60 - BB10-BB70 blank eeprom file for reset 0x60 - BB70 RESERVED for animation rate - - BBB0-BEC8 unknown linked to animations 0x2C each ends 1st value= -1 - BECC 1=show patrols - BED0 1388, which is the guardID for player 1... - BED4-BEDC RESERVED guard data pointer + # cur guard - - BF70 RESERVED for # bodies - BF74 RESERVED for # male heads - BF78 RESERVED for # female heads - BF7C-C028 list of bodies longs, terminated with -1 - C028-C090 random male heads longs, terminated with -1 - C090-C0A4 random female heads longs, terminated with -1 - C0A4 RESERVED for current random body - C0A8 RESERVED for current random male head - C0AC RESERVED for current random female head - C0B0-C0C4 RESERVED for 007 settings - C0C4-D8B8 Struck Character Animation Table 0x1C each entry - guard death animations, probably - long offset, long flag, float, float, float, float, float - D8B8-DBAC explosion death animations 0x1C each - long ani off., long mirror, float rate, float start, float end?, f ->guarddata0x30, float ? - DBAC-DBD0 group offsets used by the DBD0 table to jump to explosion animations - DBD0-DC10 pointer to index of grouped random explosion animations - 0xDBAC forward 6 0,1,2,3,4,5 - 0xDBB4 f/left 3 7,9,B - 0xDBBC left 3 C,F,11 - 0xDBC4 back 4 14,15,16,17[,12,18] - 0xDBCC b/left 2 13,19 - 0xDBC0 right 3 D,E,10 - 0xDBB8 f/right 3 6,8,A - members 12,18 probably belong to a deleted set for b/right - DC10-DF98 basic rifle firing animations - 0x48 each, 0x4 for routing pointers + 0x4 RESERVED # entries in group - DF98-E018 pointers rediecting to previous animation groups - E018-E678 basic pistol firing animations - E678-E6F8 pointers rediecting to previous animation groups - E6F8-E950 basic doubles firing animations - E950-E9D0 pointers rediecting to previous animation groups - E9D0-EBE0 crouched rifle firing animations - EBE0-EC60 pointers rediecting to previous animation groups - EC60-EF48 crouched pistol firing animations - EF48-EFC8 pointers rediecting to previous animation groups - EFC8-F268 crouched doubles firing animations - F268-F2E8 pointers rediecting to previous animation groups - F2E8-F8D0 special firing animations (ie. rolling) for all types - F8D0-FBE8 walk/run for rifle, pistol, doubles, Xdoubles, then strafing - FBE8-FBF4 RESERVED objective registers - - FC68-FC9C male guard yelps (SE when shot) 0x2 each, 0x19 total - FC9C-FCA4 female guard yelps (SE when shot) 0x2 each, 3 total - FCA4 RESERVED male guard yelp counter - FCA8 RESERVED female guard yelp counter - FCAC-FCB4 METAL ricochet SE for helmets - FCB4 - FCB8 - FCBC - FCC0-FCD8 sound of body hitting floor, or melee or something - - FD30-FD40 RESERVED alarm and gas counters - initialized at runtime - FD58-FD64 RESERVED clock, etc. - - FD98 [float] 1.0 solo ammo multiplier - multiplies ammo recieved from ammo crates - FD9C-FDA4 throwing knife SE - - FDE4-11240 microcode that constructs the monitor animations - -11304-11384 blank 07 object (preset -1, fall to ground set) -11384-11404 blank 11 object (attached set) -11404-1148C blank 08 object (unarmed, preset 0001) explosive ordinance (ie. GL round, rocket, mine, etc) -1148C-11514 blank 08 object (unarmed, preset 4001) - -11560 RESERVED #objective pointers - -11580 [float] ??? -11584 [float] ??? - -11590-1160C ??? table of short values, used in couplets -1160C-1168C ??? table of short values, used in couplets -1168C-116?? ??? table of short values, used in couplets - -116B0-116C0 RGBA values: 96969600 96969600 FFFFFF00 FFFFFF00 -116C4 -116C8 -116CC 14820 allocation size -116D0 14820 -116D4 7530 -116D8 7530 -116DC-11704 ejected cartridge headers and text lookup pointers 0x8 each -11704-12B94 weapon statistics 0x70 each -12B94-13F0C watch and equipment menu 0x38 each - -1515C-152C4 ammo totals - long max, long 0x02000000+img offset in main bank, float img y offset (+ up, - down) - -152E0 RESERVED -152E4 RESERVED -152E8 -152EC -152F4 RESERVED ???, used in cast intro -152F8 -152FC RESERVED p->???, TLB subroutine? -15300 RESERVED p->???, TLB subroutine? -15304-15310 -15310-1531C -1531C-15328 -15328-15334 - long, long, long -15334-1533C -1533C-15598(?) ammo on item collection 0xC each entry - long amount, long image from index, long scale for image - -15660 RESERVED ???, used in cast intros - -15684 RESERVED -15688 RESERVED -1568C RESERVED -15690 -15694 1=disable 1st person weapons -unverified, from GScentral -15698 RESERVED - -156AC-156BC RESERVED credits, plastique, tank - init. @ run - -15704-1570C RESERVED camera mode - -15728 RESERVED p->last 06 intro entry -1572C RESERVED # 06 intro entries - -15734 1=visible to guards (solo invisibility=0) -15738 1=object collisions (Bond Phase=0) -1573C 1="float 20ft off ground" -unverified, from GScentral - -15748-1577C player death animation list -1577C RESERVED total of above entries -15780 -15784 animation to use during spiral camera; uses list below -15788-15818 animations for intro block type 4 0x10 each - offset, float, float, float -15818 watch transition time; higher means faster watch entry/exit - corrected: replaced if 8005508C (0x342FC) lesser than cur*80055090's -1581C-158A4 PP7 08 object copied to stack during player creation - Extroneous; patch to eliminate entirely - -15B0C RESERVED 1-display status line - -15B1C RESERVED 1-display upper text box - init @ run -15B20 part of debug routine (15B18 in J) -15B24 -15B28-15B44 debug cardinal direction part of manpos - ******safe to delete - do not allow cheat pos****** -15B48-15D3C pointer to animation list + values... 0x14 each - -15DE0 RESERVED debug menu: control mode, copied to control mode buffer at 161E0 -15DE4 RESERVED debug menu: p->last group -15DE8 RESERVED debug menu: p->text pointers -15DEC RESERVED debug menu: p->positions -15DF0 RESERVED debug menu: # groups -15DF4 RESERVED debug menu: p->groups - -15E14-15E38 debug menu column groupings (new column at given value) -15E38-160A0 debug menu on-screen positions - ******safe to delete - do not allow debug****** -160A0-161D4 debug menu text pointers - ******safe to delete - do not allow debug****** -161D4 =0 do not render anything (raster only, I think) default=2 -161D8 =0 freezes processing default=2 -161DC =0 limits control to 3D stick only default=2 -161E0 control mode buffer, copied to 161DC default=2 -161E4 1=display speed display -161E8 1=draw background -161EC 1=draw objects -161F0 1=??? -161F4 1=stan hit -161F8 1=stan region -161FC 1=stan problems -16200 1=print man pos -16204 1=print room loads -16208 1=joy2 sky edit -1620C 1=joy2 hits edit -16210 1=joy2 detail edit -16214 1=explosion info -16218 1=line mode -1621C 1=007 -16220 1=agent -16224 1=all -16228 1=character number -1622C 1=gun watch pos movable inventory item model (pan: c buttons, zoom: shoulder buttons) -16230 1=profile debug feature -16234 1=grab task -16238 1=show manpos position debugger -1623C 1=turbo mode -16240 1=objectives - -1626C 1=grab rgb -16270 1=grab jpeg - -162E0-1674C default action blocks & table - -16758-16840 stage setup pointers (stages 1-38?) -16840-192C0 headers for objects -192C0-19494 archetypes -19498-1A494 object pointers to header, text string, scale 0xC each -1A494-1B740 object explosion details 0xE each -1B740-1B7F0 archetypes -1B7F0-1B8B4 player gait (bounce in step) - 1B860 player at rest - 1B87C x gait f1=amplitude, f2=period, f3=0 - 1B898 z gait -1B8B4-1B8E4 ??? -1B8E4-1BA30 archetypes -1BA30-1C5B0 g_z HEADERS -1C5B0-1C680 archetypes -1C680-1D080 C_Z headers -1D080-1D6D4 character/head table 0x14 each -1D6D4-1E6A0 UNIDENTIFIED FLOAT VALUES - FIND OUT USE -1E6A0-1EA7C button sequences for button cheat codes 0x14 each -1EA7C-1EF2C button cheat codes 0x10 each -1EF30-1EF98 linked by 7F09343C when texture 5E4 detected i, 64x64? -1EF98-1F000 linked by 7F09365C when texture 5E7 detected ci, 20x20? - -1F010-1F3B8 - -1F3E0 ??? tied to explosions -1F3E4 -1F3E8 -1F3EC-1F4F4 smoke types 0x18 each entry, 0xB entries -1F4F4-1FA34 explosion type data table 0x40 each entry, 0x15 entries -1FA34-1FA70 global image bank offsets to explosion frame display lists -1FA70 -1FA74 RESERVED current scorch entry# -1FA78 RESERVED current impact entry# -1FA7C-1FB6C impact image sizes and types -1FB6C - -1FB90-1FBA0 default vertex sample for scorches -1FBA0-1FBB0 default vertex sample for impacts - -1FC04 RESERVED selected page (0:main, 1:inventory, 2:control, 3:options, 4:brief) -1FC08 RESERVED highlighted control option (0:style, 1:controller) -1FC0C RESERVED highlighted watch menu option (0:music, 1:fx, etc) -1FC10 RESERVED selected watch briefing page (0:bg, 1:M, 2:Q, 3:MP, 4:objectives) -1FC14 RESERVED Abort ? "cancel":"confirm" -1FC18 RESERVED 1 if highlighted option selected (allows editting) -1FC1C RESERVED -1FC20 RESERVED current position in scrolling lists -1FC24 RESERVED final position in scrolling list -1FC28 RESERVED item # selected from watch inventory -1FC2C RESERVED [float] position for entry in scrolling list -1FC30 RESERVED 0= scrolling list to entry -1FC34 RESERVED 1= display watch inventory item name -1FC38 RESERVED [float] -1FC3C RESERVED [float] -1FC40 RESERVED -1FC44 RESERVED [float] -1FC48 number of control schemes in following list -1FC4C-1FCEC solo control types and labels for each control 0x14 each - 0x0 2 control type - 0x2 2 A button label - 0x4 2 B button label - 0x6 2 Z button label - 0x8 2 L button label - 0xA 2 R button label - 0xC 2 C button label - 0xE 2 + button label - 0x10 2 Start button label - 0x12 2 Control Stick label -1FCEC-1FD4C solo watch setting labels - 0x0 2 name of setting - 0x2 2 option 1 - 0x4 2 option 2 - 0x6 2 option 3 (usually blank) - 0x8 4 setting default value -1FD4C RESERVED enable control stick input [highlighted] - -1FD64 RESERVED solo watch mission status colour -1FD68 RESERVED solo watch mission status colour timer -1FD6C RESERVED solo watch objective colour -1FD70 RESERVED solo watch objective colour timer -1FD74 watch static line register; set bitflag to zero to trigger effect - 80 green background - 40 long line - 20 short line - -2006C-200A8 table of long values, -1 entry terminates -200A8-200B0 table of long values, -1 entry terminates -200B0-200EC table of long values, -1 entry terminates -200F0 -200F4 RESERVED text spacing -200F8 RESERVED text orientation -200FC RESERVED #spaces following wordwrap -20100 RESERVED negative value does overlap correction -20104 RESERVED texture filter mode -20108 RESERVED x -2010C RESERVED y -20110 RESERVED s -20114 RESERVED t -20118 RESERVED 1-allow japanese character lookup -2011C RESERVED p->1st font table(S) [@2E63F0 in ROM] -20120 RESERVED p->2nd font table(S) [@2E6694 in ROM] -20124 RESERVED p->1st font table(L) [@2E88A0 in ROM] -20128 RESERVED p->2nd font table(L) [@2E8B44 in ROM] -2012C-2014C ia16 'palette' for japanese text and window overlay iiaa format -2014C-2016C ia16 'palette' for japanese text and window overlay iiaa format - -201B4 RESERVED [float] explosion scale multiplier -201B8 -201BC-201C8 increments for tiles in clipping files -201C8 RESERVED calculated address for tile "0000" -201CC RESERVED start of clipping -201D0 RESERVED end of clipping -201D4 - -20224 RESERVED -stanlinelog activated - -20694-23564 RESERVED room data index (run-time) -23564 00000096 possibly max # rooms in a stage? - -236FC-23A8C stage bg/clipping/scale table - -23BB0-23FF8 UNKNOWN - components for a display list generation routine? -23FF8-24020 UNKNOWN - pointers into begin. of tables of stuff above -24020-24080 current sky/enviroment values -24080-251C0 stage skies/enviroment 0x5C each entry -251C0-252A0 reduced stage skies enviroment 0x38 each entry -252C4-27544 main ROM address index -27544 # entries in main ROM address index - required! - -27550-27564 RESERVED -mgfx allocations for 0-4 players -27560-27574 RESERVED -mvtx allocations for 0-4 players (0 overlaps previous table) -27574-275C8 three upper text display backdrops... - **possibly unused?** - -275D0 RESERVED ???; sent as data for "lv_c_debug" debug.notice -275D4 RESERVED stage#, used to grab music track -275D8 -275DC RESERVED current music track -275E0-27638 RESERVED time counters, runtime registers, etc - 27608 MP time setting copy *****safe to delete - reinit at runtime***** - 2760C MP kill setting copy *****safe to delete - reinit at runtime***** -27638 RESERVED joy2 detail edit: pointer to table of custom LOD values or NULL -2763C RESERVED debug port cmds: portal index -27640 RESERVED debug port cmds: previous state (4) of A button on ctrls 1,2 -27644 RESERVED debug port cmds: previous state (3) of A button on ctrls 1,2 -27648 RESERVED debug port cmds: previous state (2) of A button on ctrls 1,2 -2764C RESERVED debug port cmds: previous state (1) of A button on ctrls 1,2 -27650 RESERVED debug port cmds: current state of A button on ctrls 1,2 - -27660-276D8 ROM addresses for ramrom files -276D8-2771C RESERVED ramrom demo block runtime values; 1->+0x20 when ready to record -2771C RESERVED previous COP0 Count -27720 RESERVED current COP0 Count -27724 ??? A0->800484B4 @ 7F0C0BE4 - -27730 ??? tied to solo watch menu - -27740 language, acting as offset into below. 1=J_text trigger. -27744-278AC text call values for each text bank -278B0-278D4 MP award text list -278E0-28360 MP weapon set data -28360-283D0 MP weapon set menu text and pointers to data -283D0 RESERVED selected mp weapon set - -283E8-2841C Huffman table sizes 0x34 -2841C-28450 Huffman table sizes 0x34 -28450-28484 Huffman table sizes 0x34 -28484-284B8 Huffman table sizes 0x34 -284B8-284EC Huffman table sizes 0x34 -284EC-28520 Huffman table sizes 0x34 -28520-28554 Huffman table sizes 0x34 - -28570-2D9D0 image offset list -2D9D0-2DADC impact sounds & images -2DADC-2DB10 pointers to SE/impact list entries -2DB10-2DB44 pointers to text handles for each impact type - -2DB50-2DC54 zlib tables and registers -2DC54 RESERVED alloocated RSP workspace upper bound -2DC58 RESERVED alloocated RSP workspace lower bound - -2DC60-2DD20 ??? -2DD20 RESERVED pointer to 0x2DC60 - -2DD34 RESERVED Indy Status -2DD38 RESERVED 1- allows saving resources to Indy devtool - -2DD70 RESERVED p->viewport buffer or NULL - -2DD80-2DEA0 stage music table -2DEA0 -2DEA4-2DEAD Spectrum keyboard buffer; reset to FF on reads -2DEB0 RESERVED Spectrum Kempston joystick reg (ACTION | UP | DOWN | LEFT | RIGHT) - -2DEB4-2DF74 image (ia, 8bit) - -2DF74 RESERVED Spectrum: ??? -2DF78 RESERVED Spectrum: ??? -2DF7C-2DF9C Spectrum palette: 16 colour, 16bit -2DF9C-2DFC4 pointers to spectrum game list handles -2DFC4 RESERVED Spectrum: set to 'value' by OUT port,value opcodes - -2DFF0 (float) - -2E000-2E008 -nochr string keyword disabling characters -2E008-2E010 -noprop string keyword disabling all props -2E010-2E018 -noobj string keyword disabling objects -2E018-2E020 -noprop string keyword disabling all props -2E020-2E120 NULL field copied as base for setup name lookup -2E120 _mp used to rectify mp stage names -2E124 [float] 0.000001 used as a floor value at 7F002604 -2E128-2E1A0 TLB assigns default models for held weapons - deleted in rand++ 08 weapon expansion rewrite -2E1A0-2E1C0 TLB mp ammo crate expansion (all ironically the same) - can be deleted with use of ROM hack -2E1C4 ??? - used in 0D autoturret expansion -2E1C8 -2E1CC RESERVED y rotation for all doors? - -2E1D8-2E294 TLB expansion routines for object types -2E294 [float] ??? -2E298 [float] ??? -2E29C-2E350 TLB weapon expansion routines -2E350 [float] 0.9 -2E354 [float] -Pi -2E358 -2E35C -2E360-2E418 TLB models assigned to thrown objects of particular types -2E418 [float] 0.909091 default zoom speed (used for 15818/800365A8) -2E41C-2E440 TLB execute intro block commands - -2E480-2E53C TLB ...should know this. tied to objects - -2E550-2E56C TLB 7F00B238 eye intro steps (starting at step 2) -2E56C [float] 1390.0 length of step 2 in Eye intro -2E570 [float] 1276.0 initial value for step 3 in Eye intro -2E574 [float] 5.8 iteration length of step 3 in Eye intro - -2E580-2E6F8 text values for briefing screens -2E6F8-2E6FC "/n" -2E6FC-2E700 "." -2E700-2E704 "/n" -2E704-2E708 "1./n" -2E708-2E70C "2./n" -2E70C-2E710 "3./n" -2E710-2E714 "/n" -2E714-2E718 ": " colon following "Mission #" in briefing title -2E718-2E71C "/n" newline following chapter name in briefing title -2E71C-2E720 ": " colon following "Part #" in briefing title -2E720-2E724 "/n" newline following 1st stage name in briefing title -2E724-2F2DC region copied to -2F2DC-2F2E4 %d./r numerals next to difficulty used at 7F00EFFC -2F2E4-2FE9C /r buffer for 007 SETTINGS text used at 7F00F7C4 - followed by 0xBB4 of blank copy data - -can be eliminated via rom hack- -2FE9C-2FEBC 007 percentage display %d%% %d%% %d%% %d%% -2FEBC-2FEC0 %d #players on MP options menu -2FEC0-2FEC4 a. a., b., etc on PRIMARY OBJECTIVES list -2FEC4-30A7C \r buffer for MISSION BRIEFING text used at 7F015DA0 - followed by 0xBB4 of blank copy data - -can be eliminated via rom hack- -30A7C-30B10 end of stage statistic string display -30B10-30C38 TLB determines if cheats are available in cheat menu -30C38 [float] 0.075 ??? -30C3C [float] 0.075 ??? -30C40 [float] 0.075 ??? -30C44 [float] 0.075 ??? -30C48 [float] 130.5 lower bounds for upper tab on menus -30C4C [float] 399.0 default horizontal cursor position -30C50 [float] 130.5 ??? -30C54 [float] 1.3- ???, used by legal screen -30C58 [float] 10000.0 ???, used by legal screen -30C5C [float] 1.3- ???, used by menu 17 -30C60 [float] 10000.0 ???, used by menu 17 - -30C6C [float] ???, used by Nintendo logo -30C70 [float] ???, used by Nintendo logo - - -30C80 [float] ???, used by GE splash screen -30C84 [float] ???, used by GE splash screen -30C88 -30C8C-30C94 [float] 4-folder layer x/z dimentions -30C94 [float] 4-folder menu: folder scale -30C98 [float] 4-folder menu: COPY icon y (vertical) position -30C9C [float] 4-folder menu: ERASE icon x pos -30CA0 [float] 4-folder menu: ERASE icon y pos -30CA4 [float] 4-folder menu: SELECT FILE y pos -30CA8-30CB0 [float] main menu folder x/z dimentions -30CB0 [float] main menu folder option selection spacing values (vert. bounds for Cheat) -30CB4-30CBC [float] solo stage select folder x/z dimentions -30CBC-30CC4 [float] DIFFICULTY folder x/z dimentions -30CC4 [float] DIFFICULTY folder option selection spacing values -30CC8-30CD0 [float] 007 options folder x/z dimentions -30CD0-30CF0 TLB set scenario-specific settings on MP menus -30CF0-30CF8 [float] MP settings folder x/z dimentions -30CF8-30D00 [float] MP character select folder x/z dimentions -30D00-30D08 [float] MP handicap folder x/z dimentions -30D08-30D10 [float] MP control style folder x/z dimentions -30D10-30D18 [float] MP stage select folder x/z dimentions -30D18-30D20 [float] MP scenario folder x/z dimentions -30D20-30D28 [float] MP team select folder x/z dimentions -30D28-30D30 [float] BRIEFING folder x/z dimentions -30D30-30D44 TLB display proper name on each briefing page; ie. "Q Branch" - **can eliminate through ROM hacking - incrementation** -30D44-30D4C [float] DEBRIEFING folder x/z dimentions -30D4C-30D54 [float] STATISTICS folder x/z dimentions -30D54-30D5C [float] CHEAT folder x/z dimentions -30D5C-30D70 TLB select random Bond in intro movies - **can eliminate through ROM hacking** -30D70 -30D74 -30D78 [float] cast intro screen width - -30DB4 [float] smaller menu sizing -30DB8 [float] larger menu sizing -30DBC-30E24 TLB menu updates -30E24-30E8C TLB menu initializations -30E8C-30EF4 TLB menu interfaces -30EF4-30F5C TLB menu constructors - -31000 [float] global character scale modifier 0.1 -31004 [float] further global character scale value for special case 0.8 - -311EC-31238 TLB - -312E0-31340 TLB - -31370-31764 TLB length of each action block command in bytes -31764 [float] ??? -31768-31B5C TLB action block executables - -31B6C-31BE4 TLB - -31BF0-31C30 TLB - -31C40 0x0A \r - appended to japanese " picked up." ammo collection text -31C44 2E0A .\r - appended to english ammo collection text -31C48-31CAC NULL field to initialize ammo collection string -31CAC NULL japanese: NULL starting weapon collection text -31CB0 0x0A \r - appended to japanese " picked up." weapon collection text -31CB4 3A0A :\r - used in ??? text - -31CC8 ??? tied to projectile deflection off walls (non-clipping impact) - -31D04 [float] 62500.0 proximity mine detonation distance (characters), squared 250: saves SQRTing the distance - -31D08 [float] 0.277778 rocket inital gravity modifier -31D14 [float] 0.277778 prop/projectile gravity modifier - -31E08-31ED8 TLB set addresses for monitor animation command lists -31ED8 [float] ??? -31EDC-31F18 TLB process monitor animation commands - -3200C-32060 TLB -32060-3211C TLB TRUE if a non-collectable standard object type -3211C-32164 TLB TRUE if a collectable object type - -32180-321F4 TLB append "some", "a", "an", or "the" when ammo is collected -321F4-3225C TLB append name of ammo type collected -3225C-322D0 TLB set sound effects on ammo collection -322D0-32308 TLB sets amount of ammo received from ammo clips; first 0xE ammo types only -32308-32340 TLB sets amount of ammo received from weapons; first 0xE ammo types only -32340-3249C TLB appends weapon name for weapon collection text. starts at 7F04FE9C -3249C-32550 TLB ammo collection: some trigger sound effects (watch, knives, BA, laser for instance) - 7F0502C4-7F05062C(default) - -3255C proximity mine detonation distance (objects), squared - -32564-32594 TLB returns V0=4,1,3,5,0, or 2, depending on which selected... - -325BC-326CC TLB - -32700-327BC TLB size in words of each setup object type -327BC-32878 TLB returns p->setup object or NULL if OBJECTIVE -32880-328B4 NULL field to initialize "objective x: status" message buffer (0x32 large) -328B4-328BC "%s [0x80]%c " japanese "objective x: status" message -328BC-328C4 "%s %c: " english "objective x: status" message - -3292C [float] 0.277778 NPC gravity modifier - -32E64-32E70 ammo display %d %s: %d -32E70-32E7C died x times %s %d %s -32E7C-32E84 suicide count: x %s: %d - -32F20-32FAC TLB expands group values in object model data? -32FAC-33038 TLB item type specific - -33074 [float] global G_Z scale mod - -330A8-330F8 TLB - -33194-332F4 TLB ??? - 1st person weapon attribute -332F4-333E0 TLB ??? - 1st person weapon attribute -333E4 [float] weapon recoil multiplier: initial volley -333E8 [float] weapon recoil multiplier: recoil backward -333EC [float] weapon recoil multiplier: reset to stationary - -33404-334FC TLB sound when drawing/reloading item -334FC [float] 0.698132 1st person weapon draw speed -33500 [float] 0.698132 1st person weapon reload speed -33504-335FC TLB inhibits reload sound for items - -33648 [float] 0.277778 expended shell inital gravity modifier (pistol) -33670 [float] 0.277778 expended shell inital gravity modifier (non-pistols) -33674 [float] 0.277778 expended shell gravity modifier (all) -33678 [float] expended shell scale multiplier -3367C [float] far clipping for expended shells note: clipping values hide the DL from view unless within range -33680 [float] near clipping for expended shells; closer than 20.0 will usually clip shells on ejection - -33690-33700 debug text: failure to draw objects - ******safe to delete****** -33700-33754 TLB ???, per obj.table command types -33754-337A8 TLB ???, per obj.table command types -337A8-33808 TLB 0x18 entries -33808-33868 TLB 0x18 entries -33868-33870 ??? fill zeroes? -33870-33D68 debug text: DL parsing or data errors - ******safe to delete****** -33D68-33DC8 TLB used to compute and tally obj.table group numbers -33DC8 [float] ??? -33DCC [float] ??? -33DD0-33E24 TLB - -33E90-33EF0 TLB ???, per obj.table command types -33EF0-33F50 TLB ???, per obj.table command types -33F50-33FB0 TLB ???, per obj.table command types - -33FC4-34024 TLB ???, per obj.table command types -34024-34084 TLB ???, per obj.table command types -34084-341F8 TLB expand offsets in model data types - -34200 [float] 0.999999 -34204 [float] 0.999999 used in a ceil() routine at 7F0766AC -34208 [float] 0.999999 -3420C [float] 0.999999 - -34230-34254 debug pos display %8s x %4.0f y %4.0f z %4.0f %s %3d - ******safe to delete - do not allow cheat pos****** -34254-34278 TLB solo bodies (assigned by cuff) -34278-3429C TLB solo heads (assigned by cuff) - -342EC [float] 5.9 zoom factor for main watch page, used on entry -342F0 [float] -342F4 [float] -342F8 [float] 0.1 multiplied by scale value for watch to make final (0.01) -342FC [float] 1.7 maximum watch transition speed -34300 [float] 1.1 watch transition multiplier - -34360 [float] 0.277778 player gravity modifier -34364 [float] 0.277778 player view (suspension) gravity modifier - -34344 [float] 1st person weapon vertical movement restrictor -34348 [float] 1st person weapon horizontal movement restrictor - -343D8 [float] movement rate in aiming mode; setting to 1.125 or above forces sight to edge of screen - -34500-3451C TLB ??? - -34520 [float] Pi -34524 [float] Pi*2 -34528 [float] Pi*2 [used by 7F089F10] -3452C [float] Pi - -34540 [float] Pi*2 - -3456C [float] player perspective modifier - -345B0-3496C debug menu text - ******safe to delete - do not allow debug****** -3496C-34AA0 TLB execute debug menu option - ******safe to delete - do not allow debug****** -34AA0-34AB4 TLB completely unnecessary jumps after debug option handling - ******safe to delete - do not allow debug or use ROM hack****** - -34AD0 [float] Pi*2 used by "intro pos" for rotation correction - -34AE0-36520? stage setup text lookup handles - -36520-36648 TLB activate in-game cheats and text -36648 [float] 0.05 multiplayer invisibility factor (%5 visible) -3664C-36774 TLB deactivate in-game cheats and text (txtID=A0->7F0C1DD8) - -367A8 [float] ??? used by 7F094298 -367AC [float] ??? used by 7F094298 - -367B4-367F4 TLB ??? float-math intensive stuff... - -36800-36840 TLB ??? multiply one set of float values by another... - -3689C-3691C TLB model loaded when a weapon drops, etc. called by: 7F09B264 - -369D0-369D8 controller debug display? - %d, %d\n -369D8-369E8 solo inventory debug - %d, %d\n%d %f\n - current scroll pos., final scroll pos\nitem#, position -369E8-36A30 controller setting labels - (A) (B) (Z) (L) (R) (C) (+) (S) (3D) -36A30-37020 \n used to initialize ??? (used at 7F0AC260) -37020-37028 NULL field used in 70015E10 -37028-375E8 NULL field used in 70015E60, 70015EA4 -375E8-376A8 NULL field used to initialize ??? (used at 7F0AC4EC) - -376B0-376B4 " \n" -376B4-376B8 " \n\n" -376B8-376C0 "%c: " display letter next to objective -376C0-376C4 " \n" -376C4-376C8 " \n\n" - watch mission objective - Used to assemble the watch objective list. can tamper with and remove lines - *safe to edit - do not delete* -376C8 [float] zoom for main->objective/briefing watch menu [40933333] -376CC [float] zoom for main->inventory watch menu [40933333] -376D0 [float] zoom for inventory->main watch menu [40BCCCCD] -376D4 [float] zoom for inventory->control watch menu [407CCCCD] -376D8 [float] unused zoom for control->options watch menu [407CCCCD] -376DC [float] zoom for control->inventory watch menu [40933333] -376E0 [float] zoom for options->objective/briefing watch menu [40933333] -376E4 [float] zoom for objective/briefing->options watch menu [407CCCCD] -376E8 [float] zoom for objective/briefing->main watch menu [40BCCCCD] -376EC [float] -376F0 [float] -376F4 [float] low bound for advancement through watch menu items; -=auto backward -376F8 [float] bound for quick advancement through watch menu items -376FC [float] advance rate though inventory -37700 [float] quick advance rate through inventory - -3773C-37778 TLB retrieve selected watch menu option for each page - -377E0-377F4 TLB briefing page names in watch menu (txtID->7F0C1DD8) -377F4-37808 TLB set up each of the 5 watch menu pages - -37810-3783C clipping debug %c%d%c%c stan_c_debug -stanlinelog - would have displayed the current PAD# (p##a#) - ******safe to delete****** - -37EB8-378C8 PORT%d ROOM%d - ******safe to delete****** - -37EC8-37EEC TLB executes camera modes 0-8 -37EEC [float] ??? -37EF0-37F24 TLB global visibility command processing types 50-5C -37F24-37FC4 TLB global visibility command processing types 0-27 - -37FCC [float] - -37FF0-38004 TLB ??? uses random selection, with 10 samples... - -38014-3A8DC ROM main lookup handles -3A8DC 1172 likely keysearch for compressed data -3A8E0 1172 likely parsekey for compressed data -3A8E4-3A8F0 "ob_c_debug" -3A8F0-3A8FC "dyn_c_debug" - ******safe to delete****** -3A8FC-3A904 "-mgfx" memory allocation keyword: search -3A904-3A90C "-mgfx" memory allocation keyword: parse -3A90C-3A914 "-mvtx" memory allocation keyword: search -3A914-3A91C "-mvtx" memory allocation keyword: parse - see "memory allocation and memory bank" doc for more details -3A920-3A92C "lv_c_debug" -3A92C-3A938 "-stanshow_" string keyword: search -3A938-3A944 "-stanshow_" string keyword: parse -3A944-3A950 "-stanshow_" string keyword: search -3A950-3A95C "-stanshow_" string keyword: parse -3A95C-3A968 "-stanshow_" string keyword: search -3A968-3A974 "-stanshow_" string keyword: parse - would have displayed tile as colour in debugger - ******safe to delete****** -3A974-3A984 One Minute Left -3A984-3A9AC "setdetail %d %d %d %d %d %d %d %d %d" - ******safe to delete****** - -3A9C0-3A9D0 "replay/demo.%d" -3A9D0-3A9E0 "replay/demo.%d" -3A9E0-3A9F4 "replay/demo.load" - ******safe to delete****** -3AA00-3AA1C TLB ??? CALLS FROM 0x3AA1C-3AA54 -3AA1C-3AA54 TLB ??? -3AA54 [float] ??? -3AA58-3AAE4 TLB - -3ADD0-3AE88 TLB stage-specific text; <<2 to convert to txtID upper byte! - sets V0=values: (might be errors...) theoretical are marked as well - 1E !? !? !? !? !? !? !? - !? !? !? 22 !? 23 08 02 - 24 0D 1D 05 19 0C 1A 0A - 0B 03 1C 1F 12 0E 07 !? [06] - 09 !? [21] 20 !? [10] 11 04 !? [16] 01 - !? [1B] 17 !? [0F] !? [13] !? [15] 14 -- [25] -- [18] -3AE90 "%d" MP watch menu (used at 7F0C35A0) -3AE94 NULL MP watch menu window text for blank window (used at 7F0C4118) -3AE98 "<" MP watch menu left of window text -3AE9C ">" MP watch menu right of window text -3AEA0-3AEA8 "%s%d %s" P# KILLS -3AEA8-3AEB0 "%s%d %s" P# LOSSES -3AEB0-3AEF0 TLB advance right on MP menu pages -3AED0-3AEF0 TLB advance left on MP menu pages -3AEF0 [float] -3AEF4 [float] -3AEF8-3AF10 TLB MP overlays, scoring, scenario -3AF10-3AF30 TLB MP scoring (watch menu & duration) -3AF30-3AF50 TLB MP overlays, scoring, scenario -3AF50-3AF70 TLB MP overlays, scoring, scenario -3AF70-3AF90 TLB set MP menu window text -3AF90 [float] Pi used in radar display -3AF94 [float] -3AF98 -3AF9C -3AFA0-3AFC8 TLB huffman decompression routines (9 types) -3AFC8-3B0F0 TLB -3B0F0-3B190 Impact type handles -3B190-3B1D0 TLB ??? - used @ 7F0CE1D0; corresponds to DL types B1-C0 -3B1D0-3B1E4 TLB ??? - used @ 7F0CE2B4; used in converting C0- image ID recall types (&7 with upper command) -3B1F0-3B218 1172 compression header detection for RareZip - ******safe to delete****** -3B220-3B288 UNUSED? rsp_c_debug sleep 5; /etc/killall ghost gload - game_c_debug Jun 29 1997 20:46:05 - ******safe to delete****** -3B290-3B384 spectrum game filenames; only first 5 entries linked -3B384-3B39C spectrum 16k program manager filename -3B39C-3B79C TLB spectrum opcodes 0-FF -3B79C-3B89C TLB spectrum CB extensions 0-3F -3B89C-3B8BC TLB spectrum CB extensions for SET commands -3B8BC-3B8DC TLB spectrum CB extensions for RES commands -3B8DC-3B8FC TLB spectrum CB extensions for BIT commands -3B8FC-3B91C TLB spectrum CB extensions for SET/RES/BIT register targets -3B91C-3B98C TLB spectrum ED extensions A0-BB -3B98C-3BA88 TLB spectrum ED extensions 40-7E - -3BD00-3BD60 RSP SIGNATURE - RSP SW Version: 2.0G, 09-30-96 - SGI U64 GFX SW TEAM: S Anderson, S Carr, H Cheng, K Luster, R Moo - ******safe to delete****** - note: SW revision 2.0G is based off 2.0D, which was Mario. Obvious addition is tri4, plus point buffer citation -3BD60-3BD70 ??? each byte is incremental; +0xA each - -3C34E-3C550 ??? -3C550 end of file diff --git a/notes/GE Documentation/70000400 - NGEE.txt b/notes/GE Documentation/70000400 - NGEE.txt deleted file mode 100644 index 47eedda..0000000 --- a/notes/GE Documentation/70000400 - NGEE.txt +++ /dev/null @@ -1,35800 +0,0 @@ -80000400 1000 inception point -LUI T0,8006 -LUI T1,0003 -ADDIU T0,T0,D2E0 ;T0=8005D2E0: encompasses runtime values and thread data buffer -ORI T1,T1,1080 ;T1=31080 -//80000410: initialize 31080 bytes at 8005D2E0 -ADDI T1,T1,FFF8 -SW R0,0000 (T0) -SW R0,0004 (T0) -BNEZ T1,80000410 -ADDI T0,T0,0008 -//80000424: set stack pointer and jump to 80000450 -LUI T2,8000 -LUI SP,803B -ADDIU T2,T2,0450 ;T2=80000450 -JR T2 -ADDIU SP,SP,B410 ;SP=803AB410 - -80000450 1050 establish root TLB entry and proceed -ADDIU V0,R0,0001 -ADDIU V1,R0,0000 -ADDIU A0,R0,0000 -LUI A1,7000 -ADDIU A2,R0,001F -ADDIU A3,R0,0001 -LUI T0,007F -ORI T0,T0,E000 -MTC0 V0,Index ;COP0 Index = 1 -SRL V1,V1,0xC -SLL V1,V1,0x6 -ADDU V1,V1,A2 ;V1=A2 -MTC0 V1,EntryLo0 ;COP0 EntryLo0 = 1F: global, valid, dirty, cacheable noncoherent, even page#; map 00000000 -SRL A0,A0,0xC -SLL A0,A0,0x6 -ADDU A0,A0,A3 ;A0=A3 -MTC0 A0,EntryLo1 ;COP0 EntryLo1 = 1: global -SRL A0,A1,0xD -SLL A0,A0,0xD ;A0=A1 -MTC0 A0,EntryHi ;COP0 EntryHi = 70000000: address space 0, VPN 70000 -MTC0 T0,PageMask ;COP0 PageMask= 007FE000: mask for 2000byte entries up to 4MB -NOP -TLBWI -//800004AC: jump to 70000510 -LUI T2,7000 -ADDIU T2,T2,0510 ;T2=70000510 -JR T2 -NOP - -700004BC 10BC V0= RDRAM target for main compressed file -LUI V0,8002 -JR RA -ADDIU V0,V0,0D90 ;V0=80020D90 - -700004C8 10C8 V0= ROM start address for main compressed file -LUI V0,0002 -JR RA -ADDIU V0,V0,1990 ;V0=21990 - -700004D4 10D4 V0= ROM end address for main compressed file -LUI V0,0003 -JR RA -ADDIU V0,V0,3590 ;V0=33590 - -700004E0 10E0 V0= ROM start address for RareZip ASM -LUI V0,0003 -JR RA -ADDIU V0,V0,3590 ;V0=33590 - -700004EC 10EC V0= ROM end address for RareZip ASM -LUI V0,0003 -JR RA -ADDIU V0,V0,4B30 ;V0=34B30 - -700004F8 10F8 redirect to 7020141C: decompress .rz file - accepts: A0=p->source, A1=p->target, A2=p->buffer -LUI A3,7020 -ADDIU A3,A3,141C -JR A3 -NOP - -70000510 1110 decompress main compressed block, initialize memory, TLB and its interrupts, then execute main game thread -ADDIU SP,SP,FFC0 -SW RA,0024 (SP) -SW S1,0020 (SP) -JAL 700004BC ;V0=80020D90: target address for main compressed block (21990) -SW S0,001C (SP) -JAL 700004C8 ;V0=21990: ROM address of main compressed block -OR S0,V0,R0 ;S0=V0: 80020D90 -JAL 700004D4 ;V0=33590: ROM endpoint of main compressed block -SW V0,0034 (SP) ;SP+34= main.pos -LW T6,0034 (SP) -JAL 700004E0 ;V0=33590: ROM address of 70200000 RareZip ASM [33590-34B30 ROM] -SUBU S1,V0,T6 ;S1=V0-T6: compressed size of main compressed block -JAL 700004EC ;V0=34B30: ROM endpoint of RareZip (address of 7F- TLB routines) -SW V0,0028 (SP) ;SP+28= RareZip.pos -//70000548: -LW T7,0028 (SP) -LUI T2,7020 ;T2=70200000: target vaddress for RareZip -OR A1,S0,R0 ;A1=S0: target address for main.bin -SUBU T8,V0,T7 ;T8=V0-T7: RareZip.sz = RareZip.end - RareZip.pos -ADDU A0,S1,T8 ;A0=S1+T8: main.cmp_sz + RareZip.sz -ADDIU V1,A0,FFFF ;V1= total size - 1 -BLTZ V1,7000058C ;skip if nothing to copy -LUI A2,8030 ;A2=80300000: buffer for decompression tables -LUI T9,7020 -SUBU A0,T9,S1 ;A0=70200000 - main.cmp_sz: vaddr for main -ADDU V0,S0,V1 ;V0=S0+V1: target address + total size -//70000574: loop to copy from source to virtual target instead of mapping... -LBU T0,0000 (V0) -ADDU T1,A0,V1 -ADDIU V1,V1,FFFF -ADDIU V0,V0,FFFF -BGEZ V1,70000574 -SB T0,0000 (T1) -//7000058C: decompress main compressed block -JAL 700004F8 ;redirect to 7020141C: decompress A0 to A1; A2=buffer -SUBU A0,T2,S1 ;A0=p->source: RareZip.vaddr - main.cmp_sz -//70000594: -LUI T3,0003 -LUI T4,0000 -ADDIU T4,T4,1050 ;T4=1050 -ADDIU T3,T3,3590 ;T3=33590: ROM address of 70200000 RareZip ASM [33590-34B30 ROM] -LUI AT,000F -ORI AT,AT,FFB1 ;AT=FFFB1 -SUBU V0,T3,T4 ;V0=33590 - 1050: 32550 -SLT AT,V0,AT -BNEZ AT,70000604 ;branch if 32550 < FFFB1, which it always will be... -LUI AT,FFF0 -//700005BC: on failure, presumes 64bit mapping, which would place exception handler at 100400, not 400 -ORI AT,AT,0050 ;AT= -FFFB0 -LUI A1,0010 -LUI A2,7010 -ADDIU A2,A2,0400 ;A2=70100400 -ADDIU A1,A1,1000 ;A1=101000 -ADDU A3,V0,AT ;A3= difference - FFFB0 -JAL 7000CF90 ;read (A0) A3 bytes from ROM A1 to A2 -OR A0,R0,R0 ;A0=0 (read) -JAL 7000D070 ;V0=PI status -NOP -ANDI T5,V0,0001 -BEQ T5,V0,70000604 ;branch if ready -NOP -//700005F0: wait until PI ready -JAL 7000D070 ;V0=PI status -NOP -ANDI T6,V0,0001 -BNEZ T6,700005F0 -NOP -//70000604: initialize memory and TLB -JAL 7000D080 ;initialize PIF, interrupt handlers, C0- and 7F- TLB segments, init NMIbuffer if cold run, init 64DD if present -NOP -JAL 70001BB0 ;sets #hardwired TLB entries to 2 -NOP -LUI S0,8000 -LUI V0,7000 -LUI A0,8000 -ADDIU V0,V0,1B60 ;V0= 70001B60 -OR V1,S0,R0 ;V1=S0: 80000000 -ORI A0,A0,0080 ;A0=80000080 -//7000062C: copy TLB InvalidHit handler to 80000080 -LW T7,0000 (V0) -ADDIU V1,V1,0010 -ADDIU V0,V0,0010 -SW T7,FFF0 (V1) -LW T8,FFF4 (V0) -SW T8,FFF4 (V1) -LW T9,FFF8 (V0) -SW T9,FFF8 (V1) -LW T0,FFFC (V0) -BNE V1,A0,7000062C -SW T0,FFFC (V1) -//70000658: -JAL 7000D320 ;set Cache index writeback invalidate for 2000 bytes at 80000000 -NOP -OR A0,S0,R0 ;A0=S0: 80000000 -JAL 7000D350 ;invalidate Cache for A1 bytes at A0 -ADDIU A1,R0,4000 ;A1=4000 -ADDIU S0,R0,0002 -ADDIU S1,R0,0020 -//70000674: init all TLB indices from 2-20 -JAL 7000D3D0 ;remove TLB index A0 -OR A0,S0,R0 ;A0=S0 -ADDIU S0,S0,0001 ;S0++ -BNE S0,S1,70000674 ;loop 15 times -NOP -//70000688: enable all but underflow in FPU -JAL 7000D410 ;V0= COP1 Control -NOP -JAL 7000D420 ;V0=COP1 Control, replacing with A0 -ORI A0,V0,0E80 ;A0= V0 | E80: enable all but underflow -//70000698: -LUI A0,803B -ADDIU A0,A0,B950 ;A0=803AB950: (base SP+540) -JAL 700006F0 ;V0= new stack pointer -ORI A1,R0,8000 ;A1=8000 -//700006A8: generate main game thread -LUI S0,8006 -ADDIU S0,S0,D640 ;S0= 8005D640 -LUI A2,7000 -ADDIU T4,R0,000A -SW T4,0014 (SP) ;SP+14= A -ADDIU A2,A2,089C ;A2= 7000089C: main game loop -OR A0,S0,R0 ;A0=S0: 8005D640: p->thread -ADDIU A1,R0,0003 ;A1=3 -OR A3,R0,R0 ;A3=0 -JAL 7000D430 ;initialize thread entry at A0 with values -SW V0,0010 (SP) ;SP+10= stack pointer -JAL 7000D580 ;insert thread and execute if no thread currently running -OR A0,S0,R0 ;A0=S0: 8005D640: p->table -LW RA,0024 (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -JR RA -ADDIU SP,SP,0040 - -700006F0 12F0 V0= new stack pointer; address A0 + offset A1 - 8 - accepts: A0=p->base SP, A1=offset -ADDU V0,A0,A1 ;V0=A0+A1 -JR RA -ADDIU V0,V0,FFF8 ;V0=A0+A1-8 - -700006FC 12FC -ADDIU T6,R0,0001 -LUI AT,8002 -SW T6,3044 (AT) ;1->80023044 -LUI AT,8002 -LUI T7,1000 -JR RA -SW T7,3048 (AT) ;10000000->80023048 - -70000718 1318 infinite loop - accepts: A0 -SW A0,0000 (SP) ;SP+0= A0 -BEQ R0,R0,7000071C -NOP -JR RA -NOP - -70000738 1338 Null thread - creates thread at 8005D490 executing 70000718 -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -LUI A0,803B -ADDIU A0,A0,B710 ;A0= 803AB710 -JAL 700006F0 ;V0= new stack pointer -ADDIU A1,R0,0040 ;A1= 40 -LUI A0,8006 -LUI A2,7000 -ADDIU A2,A2,0718 ;A2= 70000718 -ADDIU A0,A0,D490 ;A0= 8005D490 -ADDIU A1,R0,0001 ;A1= 1 -OR A3,R0,R0 ;A3= 0 -SW V0,0010 (SP) ;SP+10= 803AB710 + 40 - 8: 803AB748 -JAL 7000D430 ;initialize thread entry at A0 with values -SW R0,0014 (SP) ;SP+14= 0 -LUI A0,8006 -JAL 7000D580 ;insert thread and execute if no thread currently running -ADDIU A0,A0,D490 ;A0= 8005D490 -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70000790 1390 Indi Detection Thread; now forcefully returns INDI_NOT_DETECTED (1) -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -LUI A0,803B -ADDIU A0,A0,B410 ;A0= 803AB410 -JAL 700006F0 ;V0= new stack pointer -ADDIU A1,R0,0300 ;A1= 300 -LUI A0,8006 -LUI A2,7001 -ADDIU T6,R0,00FA -SW T6,0014 (SP) -ADDIU A2,A2,CEA0 ;A2= 7000CEA0 -ADDIU A0,A0,D2E0 ;A0= 8005D2E0 -OR A1,R0,R0 ;A1= 0 -OR A3,R0,R0 ;A3= 0 -JAL 7000D430 ;initialize thread entry at A0 with values -SW V0,0010 (SP) -LUI A0,8006 -JAL 7000D580 ;insert thread and execute if no thread currently running -ADDIU A0,A0,D2E0 ;A0= 8005D2E0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -700007EC 13EC -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,D9B8 ;A1=8005D9B8 -ADDIU A0,A0,D9A0 ;A0=8005D9A0 -JAL 7000D6D0 -ADDIU A2,R0,0020 ;A2=20 -LUI T6,8000 -LW T6,0300 (T6) ;T6=80000300: display type -ADDIU AT,R0,0002 -LUI A0,8006 -BNE T6,AT,70000848 ;branch if not 2: MPAL -ADDIU A0,A0,DA40 -//70000824: 2: MPAL -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,D7F0 ;A1=8005D7F0 -ADDIU A0,A0,DA40 ;A0=8005DA40 -ADDIU A2,R0,001E ;A2=1E -JAL 70000AAC -ADDIU A3,R0,0001 ;A3=1 -BEQ R0,R0,7000085C -NOP -//70000848: 1: NTSC (PAL not caught) -LUI A1,8006 -ADDIU A1,A1,D7F0 ;A1=8005D7F0 -ADDIU A2,R0,0002 ;A2=2 -JAL 70000AAC -ADDIU A3,R0,0001 ;A3=1 -//7000085C: -LUI A0,8006 -LUI A1,8006 -LUI A2,8006 -ADDIU A2,A2,D9A0 ;A2=8005D9A0 -ADDIU A1,A1,DB18 ;A1=8005DB18 -ADDIU A0,A0,DA40 ;A0=8005DA40 -JAL 70000C14 -OR A3,R0,R0 ;A3=0 -LUI A0,8006 -JAL 70000CF8 -ADDIU A0,A0,DA40 ;A0=8005DA40 -LW RA,0014 (SP) -LUI AT,8006 -SW V0,DA38 (AT) ;V0->8005DA38: 8005DAB8 -JR RA -ADDIU SP,SP,0018 - -7000089C 149C main game thread, calling main game loop initializer - accepts: A0=[0] -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70000738 ;generate NULL thread, storing A0->SP+0 -SW A0,0018 (SP) ;SP+18= A0 -JAL 7000AD30 ;unconditional return -NOP -JAL 7000ACF0 -NOP -JAL 70000790 ;generate Indi Detection Thread; now forcefully returns INDI_NOT_DETECTED (1) -NOP -JAL 7000A5C0 ;parse command line options -NOP -BEQL V0,R0,700008E0 ;branch if debug mode not enabled -OR A0,R0,R0 -//700008D4: set debug console if detected -JAL 7000D740 ;if A0=NULL, update and execute cur.thread -OR A0,R0,R0 ;A0=0 -//700008DC: change priority for cur.thread to A -OR A0,R0,R0 ;A0=NULL -JAL 7000D800 ;change priority to A1 for thread A0 or current thread if NULL -ADDIU A1,R0,000A ;A1=A -JAL 700007EC -NOP -JAL 7000601C ;init game loop and execute -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70000908 1508 V0= p->last entry in copy of debug handler code/name table -ADDIU SP,SP,FFC0 -LUI T6,8002 -ADDIU V1,SP,0008 ;V1=SP+8: p->buffer -ADDIU T6,T6,304C ;T6= 8002304C: debug handler code/name table -ADDIU T9,T6,0030 -OR T0,V1,R0 ;T0= p->buffer -//70000920: copy 0x30 bytes from table to buffer -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T6) -SW AT,FFF8 (T0) -LW AT,FFFC (T6) -BNE T6,T9,70000920 -SW AT,FFFC (T0) -//70000944: copy last two words -LW AT,0000 (T6) -OR V0,V1,R0 ;V0=V1: p->buffer -SW AT,0000 (T0) -LW T9,0004 (T6) -SW T9,0004 (T0) -//70000958: V0= p->final entry -LW T1,0008 (V0) -ADDIU V0,V0,0008 -BNEL T1,R0,7000095C ;loop until followed by null entry -LW T1,0008 (V0) -//70000968: return -JR RA -ADDIU SP,SP,0040 - -70000970 1570 A0->stderr.activated flag [80023098] -LUI AT,8002 -JR RA -SW A0,3098 (AT) - -7000097C 157C A0->stderr.enable flag [80023094] -LUI AT,8002 -JR RA -SW A0,3094 (AT) - -70000988 1588 A0->stderr.permitted flag [8002309C] -LUI AT,8002 -JR RA -SW A0,309C (AT) ;A0->8002309C - -70000994 1594 A0-> user.Compare [800230A0] -LUI AT,8002 -JR RA -SW A0,30A0 (AT) ;A0->800230A0: user.Compare, used to display stderr as a periodic event - -700009A0 15A0 test to display stderr and update Count - accepts: A0=p->video buffer -LUI T6,8002 -LW T6,309C (T6) ;T6= stderr.permitted -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ T6,R0,700009C0 ;branch if not permitted -LUI T7,8002 -LW T7,3098 (T7) ;T7= stderr.activated -BNE T7,R0,700009D0 ;display if activated -//700009C0: test if stderr.enable overrides this -LUI T8,8002 -LW T8,3094 (T8) -BEQL T8,R0,700009EC ;return if 80023094 NULL -LW RA,0014 (SP) -//700009D0: display stderr and update Count -JAL 700059D0 ;write text in 80023718 buffer to video buffer A0 -NOP -JAL 7000D8E0 ;V0=Count -NOP -LUI AT,8002 -SW V0,30A4 (AT) ;V0->800230A4: update prev.Count -//700009E8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700009F8 15F8 if not A0, test to display stderr; displays every 16th frame - accepts: A0=timer -ADDIU SP,SP,FFE8 -ANDI T6,A0,000F -BNE T6,R0,70000A78 ;return if A0&F not 0 -SW RA,0014 (SP) -//70000A08: test if stderr is both permitted and activated -LUI T7,8002 -LW T7,309C (T7) ;T7=8002309C: stderr.permitted -LUI T8,8002 -LUI T9,8002 -BEQ T7,R0,70000A2C -NOP -//70000A20: -LW T8,3098 (T8) ;T8=80023098: stderr.activated -BNE T8,R0,70000A38 -NOP -//70000A2C: test if stderr.enable overrides this -LW T9,3094 (T9) ;T9=80023094: stderr.enable -BEQL T9,R0,70000A7C ;return if zero -LW RA,0014 (SP) -//70000A38: test for stderr periodic event -JAL 7000D8E0 ;V0=Count -NOP -LUI T1,8002 -LW T1,30A4 (T1) ;T1=800230A4: previous Count -LUI T0,8002 -LW T0,30A0 (T0) ;T0=800230A0: user.Compare -SUBU T2,V0,T1 ;T2=Count-T1 -LUI A0,803B -SLTU AT,T0,T2 -BEQL AT,R0,70000A7C ;return if Count-prev.Count <= user.Compare -LW RA,0014 (SP) -//70000A64: display stderr -JAL 700059D0 ;write stderr to video buffer A0 -ADDIU A0,A0,5000 ;A0=803B5000: -LUI A0,803E -JAL 700059D0 ;write stderr to video buffer A0 -ADDIU A0,A0,A800 ;A0=803DA800: -//70000A78: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70000A88 1688 store current Count to 800230A4 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000D8E0 ;V0=Count -NOP -LW RA,0014 (SP) -LUI AT,8002 -SW V0,30A4 (AT) ;V0->800230A4: saved count -JR RA -ADDIU SP,SP,0018 - -70000AAC 16AC - accepts: A0=p->thread, A1=p->new thread buffer, A2=, A3= -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S1,0020 (SP) -SW S0,001C (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -SW A3,0034 (SP) -ADDIU T6,R0,0001 -ADDIU T7,R0,0005 -SW R0,00C8 (A0) ;A0+C8= 0 -SW R0,00CC (A0) ;A0+CC= 0 -SW R0,00B4 (A0) ;A0+B4= 0 -SW R0,00D0 (A0) ;A0+D0= 0 -SW R0,00B8 (A0) ;A0+B8= 0 -SW R0,00BC (A0) ;A0+BC= 0 -SW R0,00C0 (A0) ;A0+C0= 0 -SW R0,00C4 (A0) ;A0+C4= 0 -SH T6,0000 (A0) ;A0+0 = 1 -SH T7,0020 (A0) ;A0+20= 5 -LW T8,002C (SP) -OR S0,A0,R0 ;S0=A0 -ADDIU S1,A0,0040 ;S1=A0+40 -SW T8,00B0 (A0) ;A0+B0= A1 f/caller: p->thread buffer -OR A0,S1,R0 ;A0+=40: start -ADDIU A1,S0,0058 ;A1=A0+18: end -JAL 7000D6D0 -ADDIU A2,R0,0008 ;A2=8 -ADDIU A0,S0,0078 ;A0+=78: start -ADDIU A1,S0,0090 ;A1=A0+18: end -JAL 7000D6D0 -ADDIU A2,R0,0008 ;A2=8 -JAL 7000D8F0 -ADDIU A0,R0,00FE -LBU T9,0033 (SP) ;T9=A2 f/caller -LUI T1,8002 -LUI V1,8006 -SLL T0,T9,0x2 -ADDU T0,T0,T9 -SLL T0,T0,0x4 -ADDIU T1,T1,69C0 -ADDIU V1,V1,087C -ADDU T2,T0,T1 -SW T2,0000 (V1) -LW T3,001C (T2) -LUI AT,8006 -ADDIU A0,R0,0004 ;A0= entry 4 -SW T3,0880 (AT) -LW T4,0030 (T2) -LUI AT,8006 -OR A1,S1,R0 ;A1= start of buffer -SW T4,0884 (AT) -LW T5,0044 (T2) -LUI AT,8006 -ADDIU A2,R0,029B ;A2= 0x29B -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -SW T5,0888 (AT) -ADDIU A0,R0,0009 ;A0= entry 9 -OR A1,S1,R0 ;A1= start of buffer -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -ADDIU A2,R0,029C ;A2= 0x29C -ADDIU A0,R0,000E ;A0= entry E -OR A1,S1,R0 ;A1= start of buffer -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -ADDIU A2,R0,029D ;A2= 0x29D -OR A0,S1,R0 ;A0=S1: -ADDIU A1,R0,029A ;A1= 0x29A -JAL 7000DCC0 -LW A2,0034 (SP) ;A2=A2 f/caller -JAL 70000A88 ;store current Count to 800230A4 -NOP -LUI A0,803B -ADDIU A0,A0,B750 ;A0= 803AB750 -JAL 700006F0 ;V0= new stack pointer -ADDIU A1,R0,0200 ;A1= 200 -LW A0,00B0 (S0) ;A0=S0+B0: p->thread -LUI A2,7000 -ADDIU T6,R0,001E -SW T6,0014 (SP) ;SP+14=1E: priority -ADDIU A2,A2,0D00 ;A2=70000D00 -SW V0,0010 (SP) -ADDIU A1,R0,0002 ;A1=2: index -JAL 7000D430 ;initialize thread entry at A0 with values -OR A3,S0,R0 ;A3=A0 f/caller, sent to function A2 as A0 -JAL 7000D580 ;insert thread and execute if no thread currently running -LW A0,00B0 (S0) ;A0=S0+B0: p->thread -LW RA,0024 (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -70000C14 1814 - accepts: A0=p->???, A1=p->???, A2=p->???, A3= -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A2,0020 (SP) -SW A3,0024 (SP) -ADDIU A0,R0,0001 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW A1,001C (SP) -LW A1,001C (SP) ;A1= A1 f/caller: -LW T6,0020 (SP) -LW V1,0018 (SP) ;V1= A0 f/caller: -OR A0,V0,R0 -SW T6,0004 (A1) ;A1+4= A2 f/caller: -LW T7,0024 (SP) -SW T7,0008 (A1) ;A1+8= A3 f/caller: -LW T8,00B4 (V1) -SW T8,0000 (A1) ;A1+0= A0+B4: -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW A1,00B4 (V1) ;A0+B4 = A1: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70000C70 1870 - accepts: A0=, A1= -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -LW V1,00B4 (A0) -SW R0,0018 (SP) -SW A1,0024 (SP) -ADDIU A0,R0,0001 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW V1,001C (SP) -LW V1,001C (SP) -LW A1,0024 (SP) ;A1 f/caller -LW A2,0018 (SP) -BEQ V1,R0,70000CE0 -OR A0,V0,R0 -//70000CA8: -BNEL V1,A1,70000CD4 -OR A2,V1,R0 -BEQ A2,R0,70000CC4 -LW T9,0020 (SP) ;T9= A0 f/caller: -LW T7,0000 (A1) -BEQ R0,R0,70000CE0 -SW T7,0000 (A2) -//70000CC4: -LW T8,0000 (A1) -BEQ R0,R0,70000CE0 -SW T8,00B4 (T9) -OR A2,V1,R0 -//70000CD4: -LW V1,0000 (V1) -BNE V1,R0,70000CA8 -NOP -//70000CE0: update and return -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70000CF8 18F8 ???; V0=A0+78 - accepts: A0 -JR RA -ADDIU V0,A0,0078 - -70000D00 1900 - accepts: A0= -ADDIU SP,SP,FFB0 -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S0,0014 (SP) -OR S2,A0,R0 ;S2=A0 -SW RA,002C (SP) -SW S1,0018 (SP) -SW R0,004C (SP) -OR S0,R0,R0 -ADDIU S3,A0,0040 -ADDIU S4,SP,004C -ADDIU S5,R0,029A -//70000D38: -OR A0,S3,R0 -OR A1,S4,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T6,004C (SP) -ADDIU AT,R0,029B -BEQ T6,S5,70000D78 -NOP -BEQ T6,AT,70000D88 -ADDIU AT,R0,029C -BEQ T6,AT,70000D98 -ADDIU AT,R0,029D -BEQ T6,AT,70000DA8 -NOP -BEQ R0,R0,70000DE0 -NOP -//70000D78: -JAL 70000EB4 -OR A0,S2,R0 -BEQ R0,R0,70000DE0 -NOP -//70000D88: -JAL 70001014 -OR A0,S2,R0 -BEQ R0,R0,70000DE0 -NOP -//70000D98: -JAL 70001128 -OR A0,S2,R0 -BEQ R0,R0,70000DE0 -NOP -//70000DA8: -JAL 7000C8DC ;reset controller and rumble pak detection -NOP -LW S0,00B4 (S2) -ADDIU S1,S2,0020 -BEQL S0,R0,70000DE0 -ADDIU S0,R0,0001 -//70000DC0: -LW A0,0004 (S0) -OR A1,S1,R0 -JAL 7000DF10 -OR A2,R0,R0 -LW S0,0000 (S0) -BNEL S0,R0,70000DC4 -LW A0,0004 (S0) -ADDIU S0,R0,0001 -//70000DE0: -BEQL S0,R0,70000D3C -OR A0,S3,R0 -LUI T7,8000 -LW T7,0300 (T7) ;T7=80000300: display type -ADDIU AT,R0,0002 -LUI A0,8002 -BNE T7,AT,70000E14 -NOP -//70000E00: -LUI A0,8002 -JAL 7000E060 -ADDIU A0,A0,7320 -BEQ R0,R0,70000E20 -LUI AT,3F80 -//70000E14: -JAL 7000E060 -ADDIU A0,A0,6A60 -LUI AT,3F80 -//70000E20: -MTC1 AT,F12 -JAL 7000E0D0 -NOP -LUI AT,3F80 -MTC1 AT,F12 -JAL 7000E200 -NOP -JAL 7000E260 -OR A0,R0,R0 -JAL 7000E2D0 -ADDIU A0,R0,0001 -OR A0,S3,R0 -//70000E50: -OR A1,S4,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T8,004C (SP) -BNEL T8,S5,70000E50 -OR A0,S3,R0 -JAL 7000BD88 -NOP -BEQ R0,R0,70000E50 -OR A0,S3,R0 -//70000E78: -NOP -NOP -NOP -NOP -NOP -NOP -//70000E90: return -LW RA,002C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0050 - -70000EB4 1AB4 - accepts: A0= -ADDIU SP,SP,FFC0 -SW RA,0024 (SP) -SW S1,0018 (SP) -OR S1,A0,R0 ;S1=A0: -SW S3,0020 (SP) -SW S2,001C (SP) -SW S0,0014 (SP) -SW R0,003C (SP) -SW R0,0030 (SP) -JAL 700027A4 -SW R0,002C (SP) -LW T6,00D0 (S1) -ADDIU T7,T6,0001 -JAL 700031A0 -SW T7,00D0 (S1) ;S1+D0 +=1 -JAL 7000BD88 -NOP -JAL 70007914 -NOP -//70000F00: -ADDIU S3,SP,003C -ADDIU S2,S1,0078 -OR A0,S2,R0 -OR A1,S3,R0 -JAL 7000DDD0 -OR A2,R0,R0 -ADDIU S0,R0,FFFF -BEQ V0,S0,70000F44 -OR A0,S1,R0 -//70000F24: -JAL 700013D8 -LW A1,003C (SP) -OR A0,S2,R0 -OR A1,S3,R0 -JAL 7000DDD0 -OR A2,R0,R0 -BNEL V0,S0,70000F24 -OR A0,S1,R0 -//70000F44: -LW T8,00D4 (S1) -OR A0,S1,R0 -ADDIU A1,SP,0030 -BEQL T8,R0,70000F78 -LW T0,00C8 (S1) -LW T9,00C8 (S1) -BEQL T9,R0,70000F78 -LW T0,00C8 (S1) -//70000F64: -JAL 70001560 -OR A0,S1,R0 -BEQ R0,R0,70000FB0 -LW S0,00B4 (S1) -//70000F74: -LW T0,00C8 (S1) -LW T3,00CC (S1) -ADDIU A2,SP,002C -SLTIU T1,T0,0001 -SLL T2,T1,0x1 -SLTIU T4,T3,0001 -OR S0,T2,T4 -JAL 7000159C -OR A3,S0,R0 -BEQ V0,S0,70000FAC -OR A0,S1,R0 -//70000FA0: -LW A1,0030 (SP) -JAL 70001440 -LW A2,002C (SP) -//70000FAC: -LW S0,00B4 (S1) -BEQ S0,R0,70000FF0 -NOP -//70000FB8: -LW T5,0008 (S0) -OR A1,S1,R0 -OR A2,R0,R0 -BEQ T5,R0,70000FDC -NOP -//70000FCC: -LW T6,00D0 (S1) -ANDI T7,T6,0001 -BNEL T7,R0,70000FE8 ;skip if S1+D0 set -LW S0,0000 (S0) -//70000FDC: do only every other time... -JAL 7000DF10 -LW A0,0004 (S0) -LW S0,0000 (S0) -BNEL S0,R0,70000FBC -LW T5,0008 (S0) -//70000FF0: display stderr every 16th iteration, then return -JAL 700009F8 ;test to display stderr every 16th frame -LW A0,00D0 (S1) ;A0=S1+D0: -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0040 - -70001014 1C14 -ADDIU SP,SP,FFD0 -SW RA,001C (SP) -SW S0,0018 (SP) -SW R0,0028 (SP) -SW R0,0024 (SP) -LW A1,00C8 (A0) -OR S0,A0,R0 -SW R0,00C8 (A0) -LUI A0,0001 -ORI A0,A0,0001 -JAL 70002854 -SW A1,002C (SP) -LW A1,002C (SP) -LW T6,0004 (A1) -ADDIU A0,A1,0010 -ANDI T7,T6,0010 -BEQL T7,R0,700010AC -LW T4,0004 (A1) -JAL 7000E340 -SW A1,002C (SP) -BEQ V0,R0,700010A8 -LW A1,002C (SP) -LW T8,0004 (A1) -LW T0,0008 (A1) -ADDIU AT,R0,0003 -ORI T9,T8,0020 -ANDI T1,T0,0007 -BNE T1,AT,700010C0 -SW T9,0004 (A1) -LW T2,00BC (S0) -SW T2,0000 (A1) -LW T3,00C4 (S0) -SW A1,00BC (S0) -BNEL T3,R0,700010C4 -LW T6,00C8 (S0) -BEQ R0,R0,700010C0 -SW A1,00C4 (S0) -LW T4,0004 (A1) -ADDIU AT,R0,FFFD -OR A0,S0,R0 -AND T5,T4,AT -JAL 70001230 -SW T5,0004 (A1) -LW T6,00C8 (S0) -LW T9,00CC (S0) -OR A0,S0,R0 -SLTIU T7,T6,0001 -SLL T8,T7,0x1 -SLTIU T0,T9,0001 -OR A3,T8,T0 -SW A3,0020 (SP) -ADDIU A1,SP,0028 -JAL 7000159C -ADDIU A2,SP,0024 -LW A3,0020 (SP) -OR A0,S0,R0 -LW A1,0028 (SP) -BEQL V0,A3,7000110C -LW RA,001C (SP) -JAL 70001440 -LW A2,0024 (SP) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7000111C 1D1C target for DP Cmd clock, buffer counter, pipe counter, and tmem counter -LUI V0,8006 -JR RA -ADDIU V0,V0,DB30 ;V0= 8005DB30 - -70001128 1D28 -ADDIU SP,SP,FFD0 -SW RA,001C (SP) -SW S0,0018 (SP) -SW R0,0028 (SP) -SW R0,0024 (SP) -LW T6,00CC (A0) -OR S0,A0,R0 -LUI A0,0001 -BEQL T6,R0,700011D0 -LW RA,001C (SP) -JAL 70002854 -ORI A0,A0,0002 -LUI A0,8006 -JAL 7000E3C0 ;set DP Cmd clock, buffer counter, pipe counter, and tmem counter to A0 -ADDIU A0,A0,DB30 ;A0=8005DB30: p->target -LW A1,00CC (S0) -SW R0,00CC (S0) -ADDIU AT,R0,FFFE -LW T7,0004 (A1) -OR A0,S0,R0 -AND T8,T7,AT -JAL 70001230 -SW T8,0004 (A1) -LW T9,00C8 (S0) -LW T2,00CC (S0) -OR A0,S0,R0 -SLTIU T0,T9,0001 -SLL T1,T0,0x1 -SLTIU T3,T2,0001 -OR A3,T1,T3 -SW A3,0020 (SP) -ADDIU A1,SP,0028 -JAL 7000159C -ADDIU A2,SP,0024 -LW A3,0020 (SP) -OR A0,S0,R0 -LW A1,0028 (SP) -BEQL V0,A3,700011D0 -LW RA,001C (SP) -JAL 70001440 -LW A2,0024 (SP) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -700011E0 1DE0 - accepts: A0=p->??? or NULL -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -BEQ A0,R0,7000121C ;if A0 NULL, return -SW A0,0028 (SP) -JAL 7000E410 -NOP -JAL 7000E450 -SW V0,001C (SP) -LW T7,001C (SP) -BEQ V0,T7,70001214 ;if same video buffer, return A0 f/caller -NOP -BEQ R0,R0,70001220 -OR V0,R0,R0 -//70001214: return A0 f/caller -BEQ R0,R0,70001220 -LW V0,0028 (SP) -//7000121C: return NULL -OR V0,R0,R0 -//70001220: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70001230 1E30 - accepts; A0=, A1=p->??? -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -SW A0,0020 (SP) -LW T6,0004 (A1) -OR S0,A1,R0 ;S0=A1: -ADDIU A2,R0,0001 -ANDI T7,T6,0003 -BNE T7,R0,700013C4 -OR V0,R0,R0 -//70001250: -LW A0,0050 (A1) -JAL 7000DF10 -LW A1,0054 (A1) -LW T8,0010 (S0) -ADDIU AT,R0,0001 -BNE T8,AT,700013BC -NOP -//7000126C: -LW V0,0008 (S0) -ANDI T9,V0,0040 -BEQ T9,R0,700013BC -ANDI T0,V0,0020 -BEQ T0,R0,700013BC -LUI T1,8002 -LW T1,30CC (T1) -BEQ T1,R0,700012A8 -NOP -//70001290: -JAL 7000E2D0 -OR A0,R0,R0 -LUI AT,8002 -SW R0,30CC (AT) -LUI V1,8002 -LW V1,30B0 (V1) -//700012A8: -LUI T3,8002 -LUI A0,0008 -SLL T2,V1,0x2 -ADDU T3,T3,T2 -LW T3,30C4 (T3) -OR V1,T2,R0 -BEQ T3,R0,70001358 -NOP -//700012C8: -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ORI A0,A0,0401 ;A0=00080401 -LUI V1,8002 -LW V1,30B0 (V1) -LUI T7,8006 -ADDIU T7,T7,DB40 -SLL T6,V1,0x2 -ADDU T6,T6,V1 -SLL T6,T6,0x4 -LUI T5,8006 -SLL T4,V1,0x2 -ADDU T5,T5,T4 -ADDU T8,T6,T7 -ADDIU T1,T8,0048 -LW T5,DBE0 (T5) -LW AT,0000 (T8) -ADDIU T8,T8,000C -//7000130C: -ADDIU T5,T5,000C -SW AT,FFF4 (T5) -LW AT,FFF8 (T8) -SW AT,FFF8 (T5) -LW AT,FFFC (T8) -BNE T8,T1,7000130C -SW AT,FFFC (T5) -//70001330: -LW AT,0000 (T8) -OR A0,V0,R0 -SW AT,0000 (T5) -LW T1,0004 (T8) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW T1,0004 (T5) -LUI V1,8002 -LW V1,30B0 (V1) -SLL T2,V1,0x2 -OR V1,T2,R0 -//70001358: -LUI AT,8002 -ADDU AT,AT,V1 -JAL 7000E0D0 -LWC1 F12,30B4 (AT) -LUI T3,8002 -LW T3,30B0 (T3) -LUI AT,8002 -SLL T4,T3,0x2 -ADDU AT,AT,T4 -JAL 7000E200 -LWC1 F12,30BC (AT) -LUI T6,8002 -LW T6,30B0 (T6) ;T6=800230B0: -LUI AT,8002 -ADDIU T7,T6,0001 -BGEZ T7,700013A8 ;^=1 if not negative -ANDI T0,T7,0001 -BEQ T0,R0,700013A8 ;if odd, subtract 2 -NOP -ADDIU T0,T0,FFFE -//700013A8: print stderr -SW T0,30B0 (AT) ;update 800230B0 -JAL 700009A0 ;test to display stderr and update Count -LW A0,000C (S0) ;A0=S0+C: p->video buffer -JAL 7000E490 -LW A0,000C (S0) ;A0=S0+C: p->video buffer -//700013BC: -BEQ R0,R0,700013C4 -ADDIU V0,R0,0001 -//700013C4: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -700013D8 1FD8 - accepts: A0=p->???, A1=p->??? -LW V0,0010 (A1) -ADDIU AT,R0,0002 -ADDIU T6,R0,0001 -BNEL V0,AT,70001414 -LW V0,00C4 (A0) -LW V0,00C0 (A0) -BEQL V0,R0,70001404 -SW A1,00B8 (A0) -BEQ R0,R0,70001404 -SW A1,0000 (V0) -//70001400: -SW A1,00B8 (A0) -//70001404: -SW A1,00C0 (A0) -BEQ R0,R0,7000142C -SW T6,00D4 (A0) -//70001410: -LW V0,00C4 (A0) -BEQL V0,R0,70001428 -SW A1,00BC (A0) -BEQ R0,R0,70001428 -SW A1,0000 (V0) -//70001424: -SW A1,00BC (A0) -SW A1,00C4 (A0) -//7000142C: -LW T7,0008 (A1) -SW R0,0000 (A1) -ANDI T8,T7,0003 -JR RA -SW T8,0004 (A1) - -70001440 2040 - accepts: A0=, A1=, A2= -ADDIU SP,SP,FFD8 -SW S1,0018 (SP) -SW S0,0014 (SP) -OR S0,A1,R0 ;S0= A1 -OR S1,A2,R0 ;A1= A2 -SW RA,001C (SP) -BEQ A1,R0,7000150C -SW A0,0028 (SP) -LW V0,0010 (A1) -ADDIU AT,R0,0002 -BNEL V0,AT,70001480 -ADDIU AT,R0,0002 -JAL 7000D320 ;set Cache index writeback invalidate for 2000 bytes at 80000000 -NOP -LW V0,0010 (S0) -ADDIU AT,R0,0002 -//70001480: -BEQL V0,AT,700014A8 -ADDIU AT,R0,0002 -LW T6,0004 (S0) -ANDI T7,T6,0010 -BNEL T7,R0,700014A8 -ADDIU AT,R0,0002 -JAL 7000E4E0 ;A0-> DP Cmd Status -ADDIU A0,R0,03C0 ;A0= clear all counters -LW V0,0010 (S0) -ADDIU AT,R0,0002 -//700014A8: -BNE V0,AT,700014C4 -LUI A0,0004 -LUI A0,0003 -JAL 70002854 -ORI A0,A0,0001 -BEQ R0,R0,700014DC -LW T8,0004 (S0) -//700014C4: -JAL 70002854 -ORI A0,A0,0001 -LUI A0,0002 -JAL 70002854 -ORI A0,A0,0002 -LW T8,0004 (S0) -//700014DC: -ADDIU AT,R0,FFCF -ADDIU A0,S0,0010 -AND T9,T8,AT -SW T9,0004 (S0) -JAL 7000E60C -SW A0,0020 (SP) -JAL 7000E76C -LW A0,0020 (SP) -LW T0,0028 (SP) -BNE S0,S1,7000150C -SW S0,00C8 (T0) -SW S1,00CC (T0) -//7000150C: -BEQL S1,R0,70001550 -LW RA,001C (SP) -BEQL S1,S0,70001550 ;return if S1 NULL or equal to S0 -LW RA,001C (SP) -LW T1,003C (S1) ;T1=S1+3C: -LW A0,0038 (S1) ;A0=S1+38: p->commands -LW A2,0000 (T1) ;A2=T1+0: -JAL 7000E7B0 ;sets A3 bytes of commands at A0 to DP Cmd -LW A3,0004 (T1) ;A3=T1+4: size -ADDIU T2,R0,0001 -LUI AT,8002 -LW T3,0028 (SP) -SW T2,30A8 (AT) ;1->800230A8: -LUI AT,8002 -SW R0,30AC (AT) ;0->800230AC: -SW S1,00CC (T3) -//7000154C: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -70001560 2160 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW V0,00C8 (A0) -ADDIU AT,R0,0001 -LW T6,0010 (V0) -BNEL T6,AT,70001590 -LW RA,0014 (SP) -LW T7,0004 (V0) -ORI T8,T7,0010 -JAL 7000E860 ;RSP Status: set signal 0 -SW T8,0004 (V0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000159C 219C -ADDIU SP,SP,FFD8 -SW S1,0018 (SP) -OR S1,A0,R0 -SW RA,001C (SP) -SW S0,0014 (SP) -ADDIU T0,R0,FFFD -//700015B4: -LW T6,00D4 (S1) -OR V1,A3,R0 -LW S0,00BC (S1) -BEQ T6,R0,7000161C -LW V0,00B8 (S1) -ANDI T7,A3,0002 -BEQL T7,R0,70001620 -OR A0,S0,R0 -BEQL S0,R0,700015FC -SW V0,0000 (A1) -LW T8,0008 (S0) -AND V1,A3,T0 -ANDI T9,T8,0010 -BEQL T9,R0,700015FC -SW V0,0000 (A1) -BEQ R0,R0,70001758 -SW S0,0000 (A1) -//700015F8: -SW V0,0000 (A1) -LW T2,00B8 (S1) -SW R0,00D4 (S1) -AND V1,A3,T0 -LW T3,0000 (T2) -BNE T3,R0,70001758 -SW T3,00B8 (S1) -BEQ R0,R0,70001758 -SW R0,00C0 (S1) -//7000161C: -OR A0,S0,R0 -SW V1,0024 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -JAL 700011E0 -SW A3,0034 (SP) -LW V1,0024 (SP) -LW A1,002C (SP) -LW A2,0030 (SP) -LW A3,0034 (SP) -ADDIU T0,R0,FFFD -BEQ V0,R0,70001758 -ADDIU T1,R0,FFFE -LW T5,0008 (S0) -ANDI T6,T5,0007 -ADDIU T7,T6,FFFF -SLTIU AT,T7,0007 -BEQ AT,R0,70001758 -SLL T7,T7,0x2 -LUI AT,8003 -ADDU AT,AT,T7 -LW T7,8400 (AT) ;T7=80028400+offset: p->handler -JR T7 -NOP -//7000167C: -LW T8,0004 (S0) -ANDI T2,A3,0002 -ADDIU AT,R0,0003 -ANDI T9,T8,0020 -BEQ T9,R0,700016D4 -NOP -BEQ T2,R0,70001758 -NOP -SW S0,0000 (A1) -LW T3,0004 (S0) -AND V1,A3,T0 -ANDI T4,T3,0001 -BEQL T4,R0,700016C0 -LW T5,00BC (S1) -SW S0,0000 (A2) -AND V1,V1,T1 -//700016BC: -LW T5,00BC (S1) -LW T6,0000 (T5) -BNE T6,R0,70001758 -SW T6,00BC (S1) -BEQ R0,R0,70001758 -SW R0,00C4 (S1) -//700016D4: -BNE A3,AT,70001758 -NOP -SW S0,0000 (A2) -SW S0,0000 (A1) -LW T8,00BC (S1) -ADDIU AT,R0,FFFC -AND V1,A3,AT -LW T9,0000 (T8) -BNE T9,R0,70001758 -SW T9,00BC (S1) -BEQ R0,R0,70001758 -SW R0,00C4 (S1) -//70001704: -LW V0,0004 (S0) -ANDI T4,A3,0002 -ANDI T3,V0,0002 -BEQ T3,R0,7000172C -ANDI T5,V0,0001 -BEQ T4,R0,70001758 -NOP -SW S0,0000 (A1) -BEQ R0,R0,70001758 -AND V1,A3,T0 -//7000172C: -BEQ T5,R0,70001758 -ANDI T6,A3,0001 -BEQ T6,R0,70001758 -NOP -SW S0,0000 (A2) -LW T7,00BC (S1) -AND V1,A3,T1 -LW T8,0000 (T7) -BNE T8,R0,70001758 -SW T8,00BC (S1) -SW R0,00C4 (S1) -//70001758: -BEQL V1,A3,7000176C -LW RA,001C (SP) -BEQ R0,R0,700015B4 -OR A3,V1,R0 -//70001768: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -ADDIU SP,SP,0028 -JR RA -OR V0,V1,R0 - -70001780 2380 sets TLB indexed entry 0 to mirror 1KB of rdram from 80000000 to C0000000 -MFC0 T0,EntryHi ;T0 = cur.EntryHi -ADDIU T1,R0,0000 -MTC0 T1,Index ;COP0 Index = 0 -MTC0 R0,PageMask ;COP0 PageMask = 0: 1KB -ADDIU T2,R0,0017 -LUI T1,C000 -MTC0 T1,EntryHi ;COP EntryHi = C0000000 -LUI T1,8000 -SRL T3,T1,0x6 -OR T3,T3,T2 ;T3|= 17 -MTC0 T3,EntryLo0 ;COP0 EntryLo0 = global, valid, dirty, uncached; map 80000000 -ADDIU T1,R0,0001 -MTC0 T1,EntryLo1 ;COP0 EntryLo1 = 1: global -NOP -TLBWI -NOP -NOP -NOP -NOP -MTC0 T0,EntryHi ;restore EntryHi -JR RA -NOP - -700017E0 23E0 establishes 7F- TLB buffer and management table -LUI V1,8006 -LUI V0,8006 -ADDIU V0,V0,E3F0 ;V0=8005E3F0 -ADDIU V1,V1,DBF0 ;V1=8005DBF0 -ADDIU A0,R0,0001 -//700017F4: initialize the 8005DBF0 - 8005E3F0 table -ADDIU V1,V1,0010 -SLTU AT,V1,V0 -SW A0,FFF0 (V1) ;1->tbl+0 -BNE AT,R0,700017F4 -SW R0,FFF4 (V1) ;0->tbl+4 -//70001808: fill range 8005E3F0 - 8005E4A4 with 0100 -LUI AT,8006 -LUI V1,8006 -LUI V0,8006 -ADDIU V0,V0,E4A4 ;V0=8005E4A4 -ADDIU V1,V1,E3F4 ;V1=8005E3F4 -SB R0,E3F1 (AT) -SB A0,E3F0 (AT) ;0100->8005E3F0 -SB R0,E3F3 (AT) -SB A0,E3F2 (AT) ;0100->8005E3F2 -//7000182C: loop for remaining -ADDIU V1,V1,0008 -SB R0,FFFB (V1) -SB A0,FFFA (V1) ;0100->tbl+2 -SB R0,FFFD (V1) -SB A0,FFFC (V1) ;0100->tbl+4 -SB R0,FFFF (V1) -SB A0,FFFE (V1) ;0100->tbl+6 -SB R0,FFF9 (V1) -BNE V1,V0,7000182C -SB A0,FFF8 (V1) ;0100->tbl+0 -//70001854: set 7F- TLB allocation and context conversion -LUI T6,803B -ADDIU T6,T6,B400 ;T6=803AB400: end of this block -ADDIU AT,R0,E000 -AND T7,T6,AT ;T7=803AB400 & ~1FFF: 803AA000 -LUI AT,FFF4 -ORI AT,AT,C000 -ADDU T8,T7,AT ;T8=803AA000 - B4000: size of bank (0x5A entries) -LUI AT,8006 -SW T8,E4A8 (AT) ;T8->8005E4A8: 802F6000, or p->end of free memory and start of TLB block -LUI AT,FFC0 -LUI T9,8006 -ADDIU T9,T9,DBF0 -ORI AT,AT,8000 -ADDU T0,T9,AT ;T0=8005DBF0 - 3F8000: 7FC65BF0 -LUI AT,8006 -JR RA -SW T0,E4A4 (AT) ;8005E4A4 = 7FC65BF0: conversion for Context - -70001898 2498 ???; pointless conditional tests, will reset 800230D0 -LUI V1,8002 -ADDIU V1,V1,30D0 -LW V0,0000 (V1) ;V0=800230D0+0: #cur.TLB entries? -SLTI AT,V0,0033 -BEQ AT,R0,700018B8 ;branch pointlessly if 33 -SLTI AT,V0,001A -BEQ AT,R0,700018B8 ;branch pointlessly if 1A -NOP -//700018B8: return -JR RA -SW R0,0000 (V1) ;0->800230D0: reset value - -700018C0 24C0 V0=index of TLB entry matching A0 or 80000000 if not found - accepts: A0=TLB pointer -ADDIU SP,SP,FFD8 -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -OR S1,A0,R0 ;S1=A0: TLB pointer -SW RA,0024 (SP) -OR S0,R0,R0 ;S0=0 init index -ADDIU S2,R0,0020 ;S2=20: 32 TLB entries total -//700018E0: grab next TLB entry -JAL 7000E880 ;V0= virtual address for TLB index A0 -OR A0,S0,R0 ;A0=S0: index -BNEL V0,S1,700018FC ;iterate on miss -ADDIU S0,S0,0001 -BEQ R0,R0,70001908 ;V0=S0: index of matching entry -OR V0,S0,R0 -//700018F8: iterate or return 80000000 when exhausted -ADDIU S0,S0,0001 ;S0+=1 next index -BNE S0,S2,700018E0 ;loop for all entries -NOP -LUI V0,8000 -//70001908: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -70001920 2520 find and remove TLB entry A0 - accepts: A0=TLB pointer -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 700018C0 ;V0=index matching TLB entry A0 -NOP -SLL T6,V0,0x0 -BLTZ T6,70001944 ;return if entry not found -OR A0,V0,R0 ;A0=V0: index -JAL 7000D3D0 ;remove TLB index A0 -NOP -//70001944: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70001954 2554 remove index A0 TLB entry from table at 8005E3F0 - accepts: A0=TLB entry index - table format: - 0x0 1 if dirty - 0x1 chunk # (7F000000 | chunk<8005DBF0+offset: invalidate -SB V0,0000 (V1) ;set dirty -//700019C8: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -700019D8 25D8 translates and loads ROM based on TLB address - accepts: A0=TLB address -LUI V0,8002 -ADDIU V0,V0,30D0 ;V0=800230D0 -LW T6,0000 (V0) ;T6=800230D0: # TLB page entries? -LUI AT,7FFF -ADDIU SP,SP,FFB0 -ORI AT,AT,E000 ;AT=7FFFE000: address mask for TLB address (0x2000 pages) -SW RA,001C (SP) -AND A0,A0,AT ;A0&=7FFFE000: TLB address & mask -ADDIU T7,T6,0001 ;T7=T6+1 -SW S0,0018 (SP) -SW T7,0000 (V0) ;count at 800230D0++ -JAL 70001920 ;find and remove TLB entry A0 -SW A0,0028 (SP) ;SP+28=A0: TLB address mask -JAL 70001B10 ;V0= random value for TLB random entries -NOP -//70001A14: -ADDIU AT,R0,005A ;AT=0x5A -DIVU V0,AT -MFHI A0 ;A0=V0/0x5A -LUI V1,8002 -ADDIU V1,V1,30D4 ;V1=800230D4 -SW A0,0000 (V1) ;A0->800230D4: segment# (0x2000 block #) -JAL 70001954 ;remove index A0 TLB entry from table at 8005E3F0 -OR S0,A0,R0 ;S0=A0 -//70001A34: -LW V0,0028 (SP) ;V0=SP+28: TLB address mask -LUI T9,8006 -LW T9,E4A8 (T9) ;T9=8005E4A8: p->TLB space (after free mem) -LUI AT,00FF -ORI AT,AT,E000 ;AT=FFE000: ROM address mask -SLL T0,S0,0xD ;T0=S0 * 0x2000: offset to memory -LUI T2,0003 -AND T1,V0,AT ;T1=V0 & FFE000: range - 7F-extension -ADDIU T2,T2,4B30 ;T2=0x34B30: start of TLB ROM range -ADDU A0,T9,T0 ;A0=p->memory + offset to block -SW A0,0034 (SP) ;SP+34=rdram target -ADDU A1,T1,T2 ;A1=offset + ROM address -OR V0,T1,R0 ;V0=offset -SW T1,0024 (SP) ;SP+24=offset -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -ADDIU A2,R0,2000 ;A2=0x2000: size -//70001A74: -LUI A0,4000 ;A0=40000000 -JAL 7000D350 ;invalidate Cache for A1 bytes at A0 -LUI A1,4000 ;A1=40000000 -LUI A0,8000 ;A0=80000000 -JAL 7000D350 ;invalidate Cache for A1 bytes at A0 -LUI A1,1000 ;A1=10000000 -//70001A8C: -LW A1,0024 (SP) ;A1=SP+24: offset -LUI T5,8006 -ADDIU T5,T5,DBF0 ;T5=8005DBF0: table indicating loaded TLB blocks -SRL T3,A1,0xD ;T3=offset/0x2000: block# -SLL T4,T3,0x4 ;T4=block# *0x10: -ADDU A2,T4,T5 ;A2=address of block's index -SW S0,0004 (A2) ;S0->block index+4: offset to memory -SW A2,0020 (SP) ;SP+20=A2: address of block's index -SW T3,0028 (SP) ;SP+28=T3: block# -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0034 (SP) ;A0=SP+34: rdram target -//70001AB8: -LW RA,001C (SP) -SRL T6,V0,0xC ;T6=V0/0x1000 -SLL T9,S0,0x1 ;T9=S0*2: offset to memory * 2 -LUI T0,8006 -LW A1,0028 (SP) ;A1=SP+28: block# -LW A2,0020 (SP) ;A2=SP+20: address of block's index -SLL T7,T6,0x6 ;T7=4(V0/0x100) -ADDIU T0,T0,E3F0 ;T0=8005E3F0 -ORI T8,T7,001F ;T8=4(V0/0x100) | 0x1F -ADDU V1,T9,T0 ;V1=8005E3F0 + offset to memory * 2 -LW S0,0018 (SP) ;S0=SP+18: offset to memory -SB R0,0000 (V1) ;0-> 8005E3F0 + offset to memory * 2 -ADDIU SP,SP,0050 -SB A1,0001 (V1) ;block# -> 8005E3F1 + offset to memory * 2 -JR RA -SW T8,0000 (A2) ;4(V0/0x100) | 0x1F -> address of block's index - -70001AF8 26F8 V0=p->TLB memory, or alternately end of free memory -LUI V0,8006 -JR RA -LW V0,E4A8 (V0) ;V0=8005E4A8: p->TLB allocated block - -70001B10 2710 V0= random value for TLB random entries -LUI A0,8002 -LD A0,30E0 (A0) ;A0=800230E0: TLB random seed -LUI AT,8002 -DSLL32 A2,A0,0x1F -DSLL A1,A0,0x1F -DSRL A2,A2,0x1F -DSRL32 A1,A1,0x0 -DSLL32 A0,A0,0xC -OR A2,A2,A1 -DSRL32 A0,A0,0x0 -XOR A2,A2,A0 -DSRL A0,A2,0x14 -ANDI A0,A0,0FFF -XOR A0,A0,A2 -DSLL32 V0,A0,0x0 -SD A0,30E0 (AT) ;update TLB random -JR RA -DSRA32 V0,V0,0x0 - -70001B60 2760 resolves TLB address on InvalidHit, writting random entry; copied to 80000000 -MTC0 R0,PageMask ;PageMask = 0: 1KB -NOP -MFC0 K0,Context ;K0= Context, which if <<9 = Vaddr base -LUI K1,8006 -ADDIU K1,K1,E4A4 -LW K1,0000 (K1) ;K1=8005E4A4: Context conversion factor [7FC65BF0] -ADDU K0,K0,K1 -LW K1,0000 (K0) ;K1= Context + conversion: 8005DBF0-8005E3F0 -MTC0 K1,EntryLo0 -NOP -ADDIU K1,K1,0040 ;K1+=40: next page (+1000) -MTC0 K1,EntryLo1 -NOP -TLBWR -NOP -NOP -NOP -NOP -ERET - -70001BB0 29B0 sets #hardwired TLB entries to 2 -ADDIU T0,R0,0002 -MTC0 T0,Wired/SP-DMA Busy ;2->COP0 Wired -ADDIU T0,R0,0000 -MTC0 T0,Context/SP-Status ;0->COP0 Context -JR RA -NOP - -70001BD0 29D0 - accepts: A0=p->??? -ADDIU SP,SP,FEE8 -SW S3,002C (SP) -LUI T6,7000 -SW RA,0034 (SP) -SW S4,0030 (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -ADDIU T6,T6,25D8 -OR S3,A0,R0 ;S3=A0: -SW T6,0010 (A0) ;700025D8 -> A0+10 -JAL 7000E930 -ADDIU A0,R0,5622 ;A0=5622 -SLL T7,V0,0x1 -MTC1 T7,F4 -LUI AT,4270 -MTC1 AT,F8 -CVT.S.W F6,F4 -ADDIU T9,R0,0001 -LUI A0,8006 -LUI S4,8006 -ADDIU A0,A0,ECC4 -SW V0,0018 (S3) -DIV.S F0,F6,F8 -ADDIU S4,S4,ECC8 -CFC1 T8,F31 -CTC1 T9,F31 -NOP -CVT.W.S F10,F0 -CFC1 T9,F31 -NOP -ANDI T9,T9,0078 -BEQ T9,R0,70001C9C -LUI AT,4F00 -MTC1 AT,F10 -ADDIU T9,R0,0001 -SUB.S F10,F0,F10 -CTC1 T9,F31 -NOP -CVT.W.S F10,F10 -CFC1 T9,F31 -NOP -ANDI T9,T9,0078 -BNE T9,R0,70001C94 -NOP -MFC1 T9,F10 -LUI AT,8000 -BEQ R0,R0,70001CAC -OR T9,T9,AT -BEQ R0,R0,70001CAC -ADDIU T9,R0,FFFF -MFC1 T9,F10 -NOP -BLTZ T9,70001C94 -NOP -OR V1,T9,R0 -CTC1 T8,F31 -MTC1 V1,F16 -SW T9,0000 (A0) -BGEZ T9,70001CD4 -CVT.S.W F18,F16 -LUI AT,4F80 -MTC1 AT,F4 -NOP -ADD.S F18,F18,F4 -C.LT.S F18,F0 -NOP -BC1F 70001CEC -ADDIU T0,V1,0001 -SW T0,0000 (A0) -OR V1,T0,R0 -ANDI T1,V1,000F -BEQ T1,R0,70001D04 -ADDIU AT,R0,FFF0 -AND T2,V1,AT -ADDIU V1,T2,0010 -SW V1,0000 (A0) -ADDIU T4,V1,FFF0 -LUI AT,8006 -SW T4,ECC0 (AT) -ADDIU T5,V1,0035 -SW T5,0000 (S4) -LBU T6,001C (S3) -ADDIU AT,R0,0006 -LUI A0,8006 -BNE T6,AT,70001D90 -ADDIU A0,A0,E750 -LUI T7,8002 -ADDIU V0,SP,0048 -ADDIU T7,T7,3100 -ADDIU T9,T7,00C0 -OR T0,V0,R0 -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T7) -SW AT,FFF8 (T0) -LW AT,FFFC (T7) -BNE T7,T9,70001D40 -SW AT,FFFC (T0) -LW AT,0000 (T7) -LUI A0,8006 -ADDIU A0,A0,E750 -SW AT,0000 (T0) -LW T9,0004 (T7) -OR A1,S3,R0 -SW T9,0004 (T0) -JAL 7000EB1C -SW V0,0020 (S3) -BEQ R0,R0,70001D98 -NOP -JAL 7000EB1C -OR A1,S3,R0 -LUI S0,8006 -LUI S1,8006 -ADDIU S1,S1,E524 -ADDIU S0,S0,E518 -LW A2,0014 (S3) -ADDIU T1,R0,0060 -SW T1,0010 (SP) ;SP+10= 60 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LW T2,0000 (S4) -SW V0,0008 (S0) -LW A2,0014 (S3) -SLL T3,T2,0x2 -SW T3,0010 (SP) -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LW T4,0008 (S0) -ADDIU S0,S0,0004 -SLTU AT,S0,S1 -BNE AT,R0,70001DA8 -SW V0,0000 (T4) -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,E730 ;A1=8005E730 -ADDIU A0,A0,E718 ;A0=8005E718 -JAL 7000D6D0 -ADDIU A2,R0,0008 ;A2=8 -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,E6F8 ;A1=8005E6F8 -ADDIU A0,A0,E6E0 ;A0=8005E6E0 -JAL 7000D6D0 -ADDIU A2,R0,0008 ;A2=8 -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,F2E8 ;A1=8005F2E8 -ADDIU A0,A0,F2D0 ;A0=8005F2D0 -JAL 7000D6D0 -ADDIU A2,R0,0040 ;A2=40 -LUI V0,8006 -ADDIU V0,V0,E7C0 -LUI S1,8006 -LUI S0,8006 -SW R0,0004 (V0) -SW R0,0000 (V0) -ADDIU S0,S0,E7D4 -ADDIU S1,S1,E7C0 -OR S2,R0,R0 ;S2=0 init. count -//70001E68: add a 200 byte chunk for each music track -OR A0,S0,R0 -JAL 7000EAC0 -OR A1,S1,R0 -LW A2,0014 (S3) -ADDIU T5,R0,0200 -SW T5,0010 (SP) ;SP+10= 200 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -ADDIU S2,S2,0001 ;S2+=1 next track -SLTI AT,S2,003F -ADDIU S1,S1,0014 -ADDIU S0,S0,0014 -BNE AT,R0,70001E68 ;loop for each track -SW V0,FFFC (S1) -//70001EA8: -LW A2,0014 (S3) -ADDIU T6,R0,0200 -SW T6,0010 (SP) ;SP+10= 200 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -SW V0,0010 (S1) -LUI S1,8006 -LUI S0,8006 -ADDIU S0,S0,E518 -ADDIU S1,S1,E520 -//70001ED8: create four buffers of 5DC0 -LW A2,0014 (S3) -ADDIU T8,R0,5DC0 -SW T8,0010 (SP) ;SP+10= 5DC0 -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -ADDIU S0,S0,0004 -BNE S0,S1,70001ED8 -SW V0,FFFC (S0) -//70001F00: -LUI A0,803B -ADDIU A0,A0,3950 ;A0= 803B3950 -JAL 700006F0 ;V0= new stack pointer -ADDIU A1,R0,1000 ;A1= 1000 -LUI A0,8006 -LUI A2,7000 -ADDIU T9,R0,0014 -SW T9,0014 (SP) -ADDIU A2,A2,1F7C ;A2= 70001F7C -ADDIU A0,A0,E530 ;A0= 8005E530 -ADDIU A1,R0,0004 ;A1= 4 -OR A3,R0,R0 ;A3=0 -JAL 7000D430 ;initialize thread entry at A0 with values -SW V0,0010 (SP) -LW RA,0034 (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -LW S3,002C (SP) -LW S4,0030 (SP) -JR RA -ADDIU SP,SP,0118 - -70001F58 2B58 insert sound manager thread -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8006 -JAL 7000D580 ;insert thread and execute if no thread currently running -ADDIU A0,A0,E530 ;A0= 8005E530 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70001F7C 2B7C -ADDIU SP,SP,FF90 -SW S6,0030 (SP) -LUI S6,8006 -SW A0,0070 (SP) -ADDIU S6,S6,E6E0 ;S6=8005E6E0 -SW RA,003C (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -LUI A0,8006 -LUI A1,8006 -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S0,0018 (SP) -OR S1,R0,R0 -OR S2,R0,R0 -SW R0,0064 (SP) -SW R0,0060 (SP) -ADDIU A1,A1,E7A0 ;A1= 8005E7A0: -ADDIU A0,A0,DA40 ;A0= 8005DA40: -OR A2,S6,R0 ;A2= 8005E6E0: -JAL 70000C14 -ADDIU A3,R0,0001 -LUI S5,8006 -LUI S4,8006 -LUI S3,8006 -LUI S0,8006 -ADDIU S0,S0,E4D0 -ADDIU S3,S3,E4B8 -ADDIU S4,S4,E4D8 -ADDIU S5,S5,E4E0 -ADDIU S8,R0,0001 -ADDIU S7,SP,0064 -OR A0,S6,R0 -OR A1,S7,R0 -JAL 7000DDD0 -OR A2,S8,R0 -LW T6,0064 (SP) -ADDIU AT,R0,0005 -LH A0,0000 (T6) -BEQ A0,S8,70002044 -NOP -BEQ A0,AT,700021F4 -ADDIU AT,R0,000A -BEQL A0,AT,70002200 -OR S2,S8,R0 -BEQ R0,R0,70002200 -NOP -JAL 7000EBB0 -NOP -SW V0,0000 (S4) -SW V1,0004 (S4) -JAL 70002854 -LUI A0,0003 -LUI T7,8002 -LW T7,30F4 (T7) -ADDIU AT,R0,0003 -LUI A0,8006 -DIVU T7,AT -MFHI T8 -SLL T9,T8,0x2 -ADDU A0,A0,T9 -LW A0,E520 (A0) -JAL 70002244 -LW A1,0060 (SP) -ADDIU S1,S1,0001 -JAL 70002854 -LUI A0,0006 -JAL 7000EBB0 -NOP -LW T2,0000 (S4) -LW T3,0004 (S4) -SW V0,0000 (S5) -SUBU T8,V0,T2 -SLTU AT,V1,T3 -SUBU T8,T8,AT -SW V1,0004 (S5) -LUI AT,8006 -SUBU T9,V1,T3 -SW T9,E4C4 (AT) -SW T8,E4C0 (AT) -ADDIU AT,R0,00F0 -DIV S1,AT -MFHI T0 -SW T9,0044 (SP) -SW T8,0040 (SP) -SW V0,0050 (SP) -SW V1,0054 (SP) -SW T2,0048 (SP) -BNE T0,R0,7000215C -SW T3,004C (SP) -LW A0,0000 (S0) -LW A1,0004 (S0) -ADDIU A2,R0,0000 -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -ADDIU A3,R0,00F0 -LUI AT,8006 -SW V0,E4C8 (AT) -SW V1,E4CC (AT) -LW T9,0004 (S4) -LW T8,0000 (S4) -LW T7,0004 (S5) -LW T6,0000 (S5) -ADDIU T2,R0,0000 -SLTU AT,T7,T9 -SUBU T0,T6,T8 -SUBU T0,T0,AT -ADDIU T3,R0,0000 -ADDIU T4,R0,0000 -ADDIU T5,R0,0000 -SUBU T1,T7,T9 -SW T1,0044 (SP) -SW T5,0004 (S3) -SW T4,0000 (S3) -SW T3,0004 (S0) -SW T0,0040 (SP) -BEQ R0,R0,7000219C -SW T2,0000 (S0) -LW T3,0004 (S0) -LW T5,0054 (SP) -LW T2,0000 (S0) -LW T4,0050 (SP) -ADDU T7,T3,T5 -LW T8,0048 (SP) -LW T9,004C (SP) -SLTU AT,T7,T5 -ADDU T6,AT,T2 -ADDU T6,T6,T4 -SUBU T0,T6,T8 -SLTU AT,T7,T9 -SUBU T0,T0,AT -SUBU T1,T7,T9 -SW T1,0004 (S0) -SW T0,0000 (S0) -LW T2,0000 (S3) -LW T4,0040 (SP) -LW T3,0004 (S3) -LW T5,0044 (SP) -SLTU AT,T4,T2 -BNE AT,R0,700021D4 -LUI A0,8006 -SLTU AT,T2,T4 -BNE AT,R0,700021CC -SLTU AT,T3,T5 -BEQ AT,R0,700021D4 -NOP -SW T4,0000 (S3) -SW T5,0004 (S3) -ADDIU A0,A0,E718 -ADDIU A1,SP,0060 -JAL 7000DDD0 -OR A2,S8,R0 -JAL 700023E4 -LW A0,0060 (SP) -BEQ R0,R0,70002200 -NOP -BEQ R0,R0,70002200 -OR S2,S8,R0 -OR S2,S8,R0 -BEQL S2,R0,7000200C -OR A0,S6,R0 -LUI A0,8006 -JAL 7000EAE4 -ADDIU A0,A0,E750 -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0070 - -70002244 2E44 - accepts: A0=p->???, A1=p->audio packet - audio packet format: - 0x0 4 p->audio - 0x4 4 length in words -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW S0,0018 (SP) -OR S0,A0,R0 ;S0=A0 -JAL 70002610 -SW A1,002C (SP) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0000 (S0) -LW V1,002C (SP) ;V1= A1 f/caller: -SW V0,0024 (SP) -BEQ V1,R0,70002288 ;skip if NULL -NOP -//70002274: set audio in AI -LH A1,0004 (V1) ;A1= #words long -LW A0,0000 (V1) ;A0=p->audio -SLL T6,A1,0x2 -JAL 7000EF00 ;set p->audio A0 of length A1 in AI -OR A1,T6,R0 ;A1*=4: length -//70002288: -JAL 7000EFB0 ;V0=AI Length -NOP -LUI T7,8006 -LW T7,ECC4 (T7) -SRL T8,V0,0x2 -LUI V1,8006 -SUBU T9,T7,T8 -ADDIU T0,T9,0035 -ANDI T1,T0,FFF0 -SH T1,0004 (S0) -LW V1,ECC0 (V1) -LH A3,0004 (S0) -LUI T4,8002 -SLL T2,V1,0x10 -SRA T3,T2,0x10 -SLT AT,A3,T3 -BEQ AT,R0,700022D8 -LUI A0,8006 -SH V1,0004 (S0) -LH A3,0004 (S0) -//700022D8: -LW T4,30FC (T4) -LUI A1,8006 -ADDIU A1,A1,ECCC -SLL T5,T4,0x2 -ADDU A0,A0,T5 -LW A0,E518 (A0) -JAL 7000F108 -LW A2,0024 (SP) -LUI T6,8006 -ADDIU V1,R0,0002 -LUI A2,8002 -ADDIU T6,T6,E718 -ADDIU A2,A2,30FC -SW R0,0008 (S0) -SW T6,0058 (S0) -SW S0,005C (S0) -SW V1,0010 (S0) -LW T7,0000 (A2) -LUI A3,8006 -ADDIU A3,A3,E518 -SLL T8,T7,0x2 -ADDU T9,A3,T8 -LW T0,0000 (T9) -LUI A1,8002 -LUI T8,8002 -SW T0,0048 (S0) -LW T1,0000 (A2) -ADDIU A1,A1,0D90 -ADDIU T8,T8,0E60 -SLL T2,T1,0x2 -ADDU T3,A3,T2 -LW T4,0000 (T3) -LUI T0,8002 -LUI T1,8006 -SUBU T5,V0,T4 -SRA T6,T5,0x3 -SLL T7,T6,0x3 -SUBU T9,T8,A1 -ADDIU T0,T0,2280 ;T0=80022280: -ADDIU T1,T1,D020 ;T1=8005D020: -ADDIU T2,R0,0800 -LUI A0,8006 -SW T7,004C (S0) -SW V1,0018 (S0) -SW A1,0020 (S0) -SW T9,0024 (S0) -SW R0,001C (S0) -SW T0,0028 (S0) -SW T1,0030 (S0) -SW T2,0034 (S0) -SW R0,0050 (S0) -SW R0,0054 (S0) -JAL 70000CF8 -ADDIU A0,A0,DA40 ;A0=8005DA40: -OR A0,V0,R0 ;A0=V0: 8005DAB8 -ADDIU A1,S0,0008 ;A1=S0+8 -JAL 7000DF10 -OR A2,R0,R0 ;A2=0 -LUI V1,8002 -ADDIU V1,V1,30FC -LW T3,0000 (V1) ;T3=800230FC: -LW RA,001C (SP) -LW S0,0018 (SP) -XORI T4,T3,0001 -SW T4,0000 (V1) ;invert flag at 800230FC -JR RA -ADDIU SP,SP,0028 - -700023E4 2FE4 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000EFB0 ;V0=AI Length -SW A0,0018 (SP) -SRA T6,V0,0x2 ;T6= #words -BNE T6,R0,70002414 ;return if no words remain -LUI T7,8002 -LW T7,31C8 (T7) -LUI AT,8002 -BNEL T7,R0,70002418 ;if it equals zero, set it to zero -LW RA,0014 (SP) -SW R0,31C8 (AT) -//70002414: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70002424 3024 -LUI T1,8006 -ADDIU T1,T1,E7B0 -LW T0,0004 (T1) -ADDIU SP,SP,FFB0 -SW S0,0028 (SP) -SW A2,0058 (SP) -ANDI T2,A0,0001 -SW RA,002C (SP) -OR A3,A0,R0 -OR A2,R0,R0 -SW T2,0048 (SP) -BEQ T0,R0,700024A8 -OR S0,T0,R0 -//70002458: -LW V0,0008 (S0) -ADDU T6,A3,A1 -SLTU AT,A3,V0 -BNE AT,R0,700024A8 -ADDIU V1,V0,0200 -//7000246C: -SLT AT,V1,T6 -BNE AT,R0,7000249C -OR A2,S0,R0 -LW T8,0010 (S0) -LUI T7,8002 -LW T7,30F4 (T7) -ADDU T9,T8,A3 -SUBU A0,T9,V0 -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -SW T7,000C (S0) -BEQ R0,R0,700025C8 -LW RA,002C (SP) -//7000249C: -LW S0,0000 (S0) -BNEL S0,R0,7000245C -LW V0,0008 (S0) -//700024A8: -LW S0,0008 (T1) -BNE S0,R0,700024D8 -OR A0,S0,R0 -BNEL A2,R0,700024C4 -LW A0,0010 (A2) -OR A2,T0,R0 -//700024C0: -LW A0,0010 (A2) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -SW T2,0030 (SP) -LW T2,0030 (SP) -BEQ R0,R0,700025C4 -ADDU V0,V0,T2 -//700024D8: -LW T3,0000 (S0) -SW A3,0050 (SP) -SW A2,0038 (SP) -JAL 7000EA90 -SW T3,0008 (T1) -LW A2,0038 (SP) -LUI T1,8006 -ADDIU T1,T1,E7B0 -BEQ A2,R0,70002518 -LW A3,0050 (SP) -//70002500: -OR A0,S0,R0 -OR A1,A2,R0 -JAL 7000EAC0 -SW A3,0050 (SP) -BEQ R0,R0,70002544 -LW A3,0050 (SP) -//70002518: -LW T0,0004 (T1) -BEQL T0,R0,7000253C -SW S0,0004 (T1) -SW S0,0004 (T1) -SW T0,0000 (S0) -SW R0,0004 (S0) -BEQ R0,R0,70002544 -SW S0,0004 (T0) -//70002538: -SW S0,0004 (T1) -SW R0,0000 (S0) -SW R0,0004 (S0) -//70002544: -LW T4,0048 (SP) -LUI T5,8002 -LUI T0,8002 -SUBU A3,A3,T4 -SW A3,0008 (S0) ;A3->S0+8: hardware address -LW T5,30F4 (T5) -ADDIU T0,T0,30F8 -LW V1,0010 (S0) ;V1=S0+10: p->rdram -SW T5,000C (S0) -LW V0,0000 (T0) ;V0=800230F4: -LUI T7,8006 -LUI T9,8006 -SLL T6,V0,0x2 -SUBU T6,T6,V0 -SLL T6,T6,0x3 ;T6=V0*18: offset to entry -ADDIU T9,T9,F2D0 -ADDIU T7,T7,ECD0 -ADDIU T8,R0,0200 -ADDIU T3,V0,0001 -SW T3,0000 (T0) ;800230F4+=1 -SW T8,0014 (SP) ;SP+14= 0x200: size -ADDU A0,T6,T7 ;A0=8005ECD0+offset: -SW T9,0018 (SP) ;SP+18= 8005F2D0 -ADDIU A1,R0,0001 -OR A2,R0,R0 ;A2=0: read -SW V1,004C (SP) -JAL 7000F6A0 ;read or write (A2) SP+14 bytes between hardware A3 and rdram SP+10 -SW V1,0010 (SP) ;SP+10= p->rdram -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,004C (SP) ;A0= p->rdram -LW T4,0048 (SP) -ADDU V0,V0,T4 -//700025C4: return -LW RA,002C (SP) -LW S0,0028 (SP) -ADDIU SP,SP,0050 -JR RA -NOP - -700025D8 31D8 -LUI V1,8006 -ADDIU V1,V1,E7B0 -LBU T6,0000 (V1) -LUI V0,7000 -LUI T7,8006 -BNE T6,R0,70002608 -ADDIU V0,V0,2424 -ADDIU T7,T7,E7C0 -ADDIU T8,R0,0001 -SW R0,0004 (V1) -SW T7,0008 (V1) -SB T8,0000 (V1) -JR RA -SW V1,0000 (A0) - -70002610 3210 -ADDIU SP,SP,FFB8 -SW S4,0028 (SP) -LUI S4,8002 -ADDIU S4,S4,30F8 -LW T6,0000 (S4) -SW S0,0018 (SP) -SW RA,002C (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW R0,0040 (SP) -BEQ T6,R0,70002674 -OR S0,R0,R0 -LUI S1,8006 -ADDIU S1,S1,F2D0 -ADDIU S2,SP,0040 -OR A0,S1,R0 -OR A1,S2,R0 -JAL 7000DDD0 -OR A2,R0,R0 -LW T7,0000 (S4) -ADDIU S0,S0,0001 -SLTU AT,S0,T7 -BNEL AT,R0,70002654 -OR A0,S1,R0 -LUI S2,8006 -ADDIU S2,S2,E7B0 -LW S0,0004 (S2) -LUI S3,8002 -ADDIU S3,S3,30F4 -BEQ S0,R0,700026F4 -NOP -LW T9,000C (S0) -LW T8,0000 (S3) -LW V0,0000 (S0) -ADDIU T0,T9,0001 -SLTU AT,T0,T8 -BEQ AT,R0,700026EC -OR S1,V0,R0 -LW T1,0004 (S2) -BNE S0,T1,700026BC -NOP -SW V0,0004 (S2) -JAL 7000EA90 -OR A0,S0,R0 -LW A1,0008 (S2) -BEQL A1,R0,700026E4 -SW S0,0008 (S2) -JAL 7000EAC0 -OR A0,S0,R0 -BEQ R0,R0,700026EC -NOP -SW S0,0008 (S2) -SW R0,0000 (S0) -SW R0,0004 (S0) -BNE S1,R0,70002690 -OR S0,S1,R0 -LUI S3,8002 -ADDIU S3,S3,30F4 -LW T2,0000 (S3) -LW RA,002C (SP) -SW R0,0000 (S4) -ADDIU T3,T2,0001 -SW T3,0000 (S3) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0048 - -70002730 3330 -LUI A0,8006 -ADDIU A0,A0,F400 ;A0=8005F400: DL -LUI A2,B800 -SW A2,0000 (A0) ;DL+0= B8000000: rsp_enddl.u -SW R0,0004 (A0) ;DL+4= 00000000: rsp_enddl.l -SW A2,0850 (A0) ;DL+850= B8000000: rsp_enddl.u -SW R0,0854 (A0) ;DL+854= 00000000: rsp_enddl.l -ADDIU SP,SP,FFE8 -LUI AT,8006 -LUI V1,8006 -LUI V0,8006 -LUI A1,8006 -SW RA,0014 (SP) -SW R0,04A0 (AT) ;0->800604A0: bank 0 -ADDIU A1,A1,07DC ;A1=800607DC: end -ADDIU V0,V0,07D0 ;V0=800607D0 -ADDIU V1,V1,07B0 ;V1=800607B0 -ADDIU A0,R0,0001 -//70002778: initialize 3 words in each buffer -ADDIU V0,V0,0004 -ADDIU V1,V1,0004 -SW R0,FFFC (V1) ;0 -> 800607B0+offset -BNE V0,A1,70002778 -SW A0,FFFC (V0) ;1 -> 800607D0+offset -//7000278C: -JAL 70002810 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700027A4 33A4 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000D8E0 ;V0=Count -NOP -LUI AT,8006 -SW V0,04A8 (AT) -LUI V0,8006 -LUI A0,8006 -LUI V1,8006 -ADDIU V1,V1,07D0 -ADDIU A0,A0,07C0 -ADDIU V0,V0,07DC -LW T6,0000 (V1) -ADDIU V1,V1,0004 -ADDIU A0,A0,0004 -ADDIU T7,T6,001F -BGEZ T7,700027F8 -ANDI T8,T7,001F -BEQ T8,R0,700027F8 -NOP -ADDIU T8,T8,FFE0 -BNE V1,V0,700027D4 -SW T8,FFFC (A0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70002810 3410 -LUI T6,8006 -LW T6,04A8 (T6) ;T6=800604A8: -LUI AT,8006 -LUI V1,8006 -LUI A0,8006 -LUI V0,8006 -ADDIU V0,V0,07CC -ADDIU A0,A0,07C0 -ADDIU V1,V1,07B0 -SW T6,04A4 (AT) ;T6->800604A4: -//70002838: copy 800607C0 table to 800607B0 -LW T7,0000 (A0) ;T7=800607C0+offset: -ADDIU A0,A0,0004 -ADDIU V1,V1,0004 -BNE A0,V0,70002838 -SW T7,FFFC (V1) ;T7->800607B0+offset: -//7000284C: return -JR RA -NOP - -70002854 3454 - accepts: A0= -ADDIU SP,SP,FFC0 -SW RA,0014 (SP) -SW A0,0040 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ADDIU A0,R0,0001 -LW T1,0040 (SP) ;T1= A0 f/caller -LUI T6,8006 -ADDIU T6,T6,07D0 -ANDI A3,T1,FFFF ;A3=lower short -SLL V1,A3,0x2 -ADDU T0,V1,T6 ;T0= 800607D0 + (A0.lower->offset): -ADDIU AT,R0,0003 -SRA A0,T1,0x10 ;A0=upper short -SW V0,0034 (SP) -OR A2,A0,R0 ;A2=A0: A0.upper -BNE A0,AT,700028B0 -LW A1,0000 (T0) -LUI A2,8006 -ADDU A2,A2,V1 -LW A2,F3F0 (A2) -ORI T7,A2,8000 -BEQ R0,R0,700028D0 -OR A2,T7,R0 -//700028B0: -ADDIU AT,R0,0006 -BNEL A0,AT,700028D4 -SLL T9,A3,0x8 -LUI A2,8006 -ADDU A2,A2,V1 -LW A2,F3F0 (A2) -ANDI T8,A2,7FFF -OR A2,T8,R0 -//700028D0: -SLL T9,A3,0x8 -SLL T2,A1,0x3 -LUI T4,8006 -LUI T5,8006 -ADDIU T4,T4,04B0 -ADDU T3,T9,T2 -ADDIU T5,T5,F3F0 -ADDU V0,T3,T4 -ADDU T6,V1,T5 -SW V0,002C (SP) -SW A2,0000 (V0) -SW T6,0024 (SP) -SW A1,0030 (SP) -SW A2,0038 (SP) -JAL 7000D8E0 ;V0=Count -SW T0,001C (SP) -LW T7,002C (SP) -LW A1,0030 (SP) -LW A2,0038 (SP) -LW T0,001C (SP) -SW V0,0004 (T7) -LW T8,0024 (SP) -ADDIU A1,A1,0001 ;A1+=1 -SLTI AT,A1,0020 -BNE AT,R0,7000293C ;limit to range 0-1F -SW A2,0000 (T8) -OR A1,R0,R0 ;A1=0 -//7000293C: -SW A1,0000 (T0) ;update 800607D0 + (A0.lower->offset) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -LW A0,0034 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -70002958 3558 draw "display speed" display - accepts: A0=p->display list -LUI V1,8005 -LUI T6,8002 -LW V1,8498 (V1) -LW T6,3228 (T6) -LUI V0,8002 -LW V0,3224 (V0) -ADDIU SP,SP,FFB8 -SLT AT,T6,V1 -SW RA,001C (SP) -SW S0,0018 (SP) -BEQ AT,R0,70002990 -ADDU V0,V0,V1 -//70002988: -LUI AT,8002 -SW V1,3228 (AT) -//70002990: -LUI AT,8002 -SW V0,3224 (AT) -SLTIU AT,V0,0015 -BNE AT,R0,70002C8C -LUI AT,8002 -SW V0,3224 (AT) -SLTIU AT,V0,0015 -BNE AT,R0,700029C8 -ADDIU V0,V0,FFEC -//700029B4: -SLTIU AT,V0,0015 -BEQL AT,R0,700029B4 -ADDIU V0,V0,FFEC -LUI AT,8002 -SW V0,3224 (AT) -//700029C8: -JAL 7000111C ;V0=8005DB30: target for DP Cmd clock, buffer counter, pipe counter, and tmem counter -SW A0,0048 (SP) ;SP+48=A0: p->DL -SW V0,0044 (SP) -//700029D4: -ADDIU A0,R0,00FF -ADDIU A1,R0,00FF -ADDIU A2,R0,00FF -JAL 7000B06C ;set stdout.bgcurcolor, alpha inverted -ADDIU A3,R0,00FF ;(A0,A1,A2,A3) = FFFFFFFF: white 0% -//700029E8: -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7000B098 ;set stdout.bgcurcolor, alpha inverted -ADDIU A3,R0,00FF ;(A0,A1,A2,A3) = 000000FF: black 0% -//700029FC: -ADDIU A0,R0,0008 -JAL 7000B040 ;translates and saves stdout text position (A0,A1) -ADDIU A1,R0,0005 ;pos (8,5) -//70002A08: -LW V0,0044 (SP) -ADDIU S0,SP,0030 ;S0=SP+30: p->buffer -LUI A1,8003 -LW T7,0004 (V0) -LW T8,000C (V0) -ADDIU A1,A1,8420 ;A1=80028420: "utz %2.0f%%\n" -OR A0,S0,R0 ;A0=S0: p->sprintf target -SUBU T9,T7,T8 -MTC1 T9,F4 -BGEZ T9,70002A44 -CVT.S.W F6,F4 -//70002A34: -LUI AT,4F80 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -//70002A44: -LW T0,0000 (V0) -LUI AT,42C8 -MTC1 AT,F10 -MTC1 T0,F18 -MUL.S F16,F6,F10 -BGEZ T0,70002A70 -CVT.S.W F4,F18 -//70002A60: -LUI AT,4F80 -MTC1 AT,F8 -NOP -ADD.S F4,F4,F8 -//70002A70: -DIV.S F6,F16,F4 -CVT.D.S F10,F6 -MFC1 A3,F10 -MFC1 A2,F11 -//70002A80: -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -NOP -JAL 7000B1E8 ;write string A0 to stdout (debug menu) -OR A0,S0,R0 -//70002A90: -ADDIU A0,R0,0008 -JAL 7000B040 ;translates and saves stdout text position (A0,A1) -ADDIU A1,R0,0006 -//70002A9C: -LW V1,0044 (SP) -LUI A1,8003 -ADDIU A1,A1,8430 ;A1=80028430: "rsp %2.0f%%\n" -LW V0,0000 (V1) -LW T1,0004 (V1) -OR A0,S0,R0 ;A0=S0: p->buffer -MTC1 V0,F10 -SUBU T2,V0,T1 -MTC1 T2,F18 -BGEZ T2,70002AD8 -CVT.S.W F8,F18 -//70002AC8: -LUI AT,4F80 -MTC1 AT,F16 -NOP -ADD.S F8,F8,F16 -//70002AD8: -LUI AT,42C8 -MTC1 AT,F4 -CVT.S.W F18,F10 -MUL.S F6,F8,F4 -BGEZ V0,70002AFC -//70002AEC: -LUI AT,4F80 -MTC1 AT,F16 -NOP -ADD.S F18,F18,F16 -//70002AFC: -DIV.S F8,F6,F18 -CVT.D.S F4,F8 -MFC1 A3,F4 -MFC1 A2,F5 -//70002B0C: -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -NOP -JAL 7000B1E8 ;write string A0 to stdout (debug menu) -OR A0,S0,R0 -//70002B1C: -ADDIU A0,R0,0008 -JAL 7000B040 ;translates and saves stdout text position (A0,A1) -ADDIU A1,R0,0007 -//70002B28: -LW T3,0044 (SP) -LUI A1,8003 -ADDIU A1,A1,8440 ;A1=80028440: "tex %2.0f%%" -LW T4,000C (T3) -OR A0,S0,R0 ;A0=S0: p->buffer -MTC1 T4,F10 -BGEZ T4,70002B58 -CVT.S.W F16,F10 -//70002B48: -LUI AT,4F80 -MTC1 AT,F6 -NOP -ADD.S F16,F16,F6 -//70002B58: -LW T5,0000 (T3) -LUI AT,42C8 -MTC1 AT,F18 -MTC1 T5,F4 -MUL.S F8,F16,F18 -BGEZ T5,70002B84 -CVT.S.W F10,F4 -//70002B74: -LUI AT,4F80 -MTC1 AT,F6 -NOP -ADD.S F10,F10,F6 -//70002B84: -DIV.S F16,F8,F10 -CVT.D.S F18,F16 -MFC1 A3,F18 -MFC1 A2,F19 -//70002B94: -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -NOP -JAL 7000B1E8 ;write string A0 to stdout (debug menu) -OR A0,S0,R0 -//70002BA4: -ADDIU A0,R0,001C -JAL 7000B040 ;translates and saves stdout text position (A0,A1) -ADDIU A1,R0,0005 -//70002BB0: -LUI V1,8005 -LW V1,8498 (V1) ;V1=80048498: #frames -OR A0,S0,R0 -LUI A1,8003 -BNE V1,R0,70002BD0 ;branch if nonzero -ADDIU T6,R0,003C -BEQ R0,R0,70002BFC ;default to 0 -OR A2,R0,R0 -//70002BD0: -DIV T6,V1 -MFLO A2 ;A2= 60 % #frames: hertz, which would be frames per second -BNE V1,R0,70002BE4 -NOP -BREAK 00001C00 ;Break: division by zero -//70002BE4: catch weird division -ADDIU AT,R0,FFFF -BNE V1,AT,70002BFC -LUI AT,8000 -BNE T6,AT,70002BFC -NOP -BREAK 00001800 -//70002BFC: display framerate (hz, or frames per second) -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -ADDIU A1,A1,844C ;A1=8002844C: "%2d hz" -JAL 7000B1E8 ;write string A0 to stdout (debug menu) -OR A0,S0,R0 -ADDIU A0,R0,001C -JAL 7000B040 ;translates and saves stdout text position (A0,A1) -ADDIU A1,R0,0006 -LUI A1,8003 -LUI A2,8005 -LW A2,8498 (A2) ;A2=80048498: #frames (apparently) -ADDIU A1,A1,8454 ;A1=80028454: "%2d frames" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000B1E8 ;write string A0 to stdout (debug menu) -OR A0,S0,R0 -//70002C38: -LUI T7,8002 -LUI T8,8005 -LW T8,8498 (T8) ;T8=80048498: #frames -LW T7,3228 (T7) ;T7=80023228: ??? -OR A0,S0,R0 ;A0=S0: p->buffer -LUI A1,8003 -BEQ T7,T8,70002C70 ;if equal, don't display anything -OR A2,T7,R0 ;A2=T7 -LUI A1,8003 -ADDIU A1,A1,8460 ;A1=80028460: " [%2d]" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 ;A0=S0: p->buffer -BEQ R0,R0,70002C78 -NOP -//70002C70: -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -ADDIU A1,A1,8468 ;A1=80028468: " " -//70002C78: -JAL 7000B1E8 ;write string A0 to stdout (debug menu) -OR A0,S0,R0 ;A0=S0: p->buffer -//70002C80: set dlbranch to appropriate bank -LUI AT,8002 -SW R0,3228 (AT) -LW A0,0048 (SP) ;A0 f/caller: p->DL -LUI T9,0600 -SW T9,0000 (A0) ;DL+0= 06000000: rsp_displaylist.u -LUI T0,8006 -LW T0,04A0 (T0) ;T0=800604A0: DL bank -LUI T4,8006 -ADDIU T4,T4,F400 ;T4= 8005F400: DL -XORI T1,T0,0001 -SLL T2,T1,0x5 -ADDU T2,T2,T1 -SLL T2,T2,0x2 -ADDU T2,T2,T1 -SLL T2,T2,0x4 -ADDU T3,T2,T4 ;T3=8005F400 + 850(bank): p->DL bank -SW T3,0004 (A0) ;DL+4= p->DL bank: rsp_displaylist.l -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU V0,A0,0008 -JR RA -ADDIU SP,SP,0048 - -70002CD8 38D8 -ADDIU SP,SP,FF30 -LUI V0,8002 -LUI T6,8005 -LW V0,3230 (V0) ;V0=80023230: frame counter -LW T6,8498 (T6) ;T6=80048498: #frames -LUI AT,8002 -SW RA,005C (SP) -ADDU V0,V0,T6 ;V0+=T6 -SW V0,3230 (AT) ;frame counter += #frames -SLTIU AT,V0,00C9 -SW S8,0058 (SP) -SW S7,0054 (SP) -SW S6,0050 (SP) -SW S5,004C (SP) -SW S4,0048 (SP) -SW S3,0044 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -SDC1 F22,0030 (SP) -BNE AT,R0,70002D50 ;branch if 200 or less frames so far -SDC1 F20,0028 (SP) -//70002D30: every 200 frames flush counter and toggle register -LUI T7,8002 -LW T7,3234 (T7) ;T7=80023234: -LUI AT,8002 -ADDIU V0,V0,FF38 -XORI T8,T7,0001 -SW T8,3234 (AT) ;toggle 80023234 -LUI AT,8002 -SW V0,3230 (AT) ;80023230 = framecount - 200 -//70002D50: -LUI V1,8002 -LW V1,322C (V1) ;V1=8002322C: -LUI T9,8002 -LW T9,3234 (T9) ;T9=80023234: -ANDI T1,V1,0001 ;T1= bit1 -LUI AT,8002 -ADDIU V1,V1,0001 -BEQ T9,T1,70003024 ;return if both set identical -SW V1,322C (AT) ;8002322C +=1 -//70002D74: -LUI T2,8006 -LW T2,04A0 (T2) ;T2=800604A0: bank -LUI T4,8006 -ADDIU T4,T4,F400 ;T4=8005F400: base DL -SLL T3,T2,0x5 -ADDU T3,T3,T2 -SLL T3,T3,0x2 -ADDU T3,T3,T2 -SLL T3,T3,0x4 -JAL 7F0D1AC0 -ADDU A0,T3,T4 ;A0=8005F400 + 850(value): p->DL bank -OR S3,V0,R0 ;S3=V0: p->DL -ADDIU V0,SP,00B8 -ADDIU S4,SP,00AC -//70002DAC: -ADDIU S4,S4,0004 -SLTU AT,S4,V0 -BNE AT,R0,70002DAC -SW R0,FFFC (S4) -//70002DBC: -LUI A0,8006 -LW A0,04A4 (A0) ;A0=800604A4: -ADDIU S5,SP,00A0 -ADDIU V0,SP,00AC -//70002DCC: -ADDIU S5,S5,0004 -SLTU AT,S5,V0 -BNE AT,R0,70002DCC -SW A0,FFFC (S5) -//70002DDC: -LUI T5,8006 -ADDIU T5,T5,07B0 -LUI S8,8006 -LUI AT,8003 -LWC1 F22,8470 (AT) ;F22=80028470: -ADDIU S8,S8,07D0 -SW T5,0070 (SP) ;SP+70= 800607B0: -SW R0,00C8 (SP) -SW R0,0080 (SP) -ADDIU S6,R0,0001 -LW T6,0070 (SP) -LW A1,0000 (S8) -LW T7,0080 (SP) -LW S1,0000 (T6) -MTC1 R0,F20 -ADDIU T8,SP,00AC -BEQ S1,A1,70002F9C -ADDU S4,T7,T8 -LW T1,00C8 (SP) -LUI T3,8006 -ADDIU T3,T3,04B0 -ADDIU T9,SP,00A0 -SLL T2,T1,0x8 -ADDU S7,T2,T3 -ADDU S5,T7,T9 -SLL T4,S1,0x3 -ADDU V0,S7,T4 -LW S2,0000 (V0) -LUI A0,8006 -LW A0,04A4 (A0) -ANDI T5,S2,8000 -BEQL T5,R0,70002E68 -LW V1,0000 (S5) -ADDIU S2,R0,0003 -LW V1,0000 (S5) -LW S0,0004 (V0) -SLTU AT,V1,A0 -BEQL AT,R0,70002E80 -SLTU AT,S0,A0 -OR V1,A0,R0 -SLTU AT,S0,A0 -BNE AT,R0,70002F74 -SLTU AT,S0,V1 -BNE AT,R0,70002F74 -LUI T9,8002 -LW V0,0000 (S4) -ADDIU T9,T9,31D4 -SUBU T1,S0,V1 -BEQ S6,V0,70002EDC -SLL T7,V0,0x4 -ADDIU AT,R0,0003 -BEQ V0,AT,70002EDC -ANDI T6,V0,8000 -BNE T6,R0,70002EDC -SUBU T8,S0,V1 -MTC1 T8,F4 -LUI AT,4F80 -BGEZ T8,70002ED4 -CVT.S.W F6,F4 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -DIV.S F10,F6,F22 -ADD.S F20,F20,F10 -MTC1 T1,F16 -ADDU T0,T7,T9 -BGEZ T1,70002EFC -CVT.S.W F18,F16 -LUI AT,4F80 -MTC1 AT,F4 -NOP -ADD.S F18,F18,F4 -BNE S6,V0,70002F14 -DIV.S F12,F18,F22 -JAL 7F0D1DCC -NOP -BEQ R0,R0,70002F60 -OR V0,S3,R0 -LW V0,0004 (T0) ;V0=T0+4: color -MFC1 A1,F12 -OR A0,S3,R0 ;A0=S3: p->DL -SRA T4,V0,0x8 -ANDI T5,T4,00FF -SW T5,0010 (SP) ;T5=blue -LW T6,0008 (T0) -SRA A2,V0,0x18 -SRA A3,V0,0x10 -SW T6,0014 (SP) -LW T8,000C (T0) -ANDI T3,A3,00FF -ANDI T2,A2,00FF -OR A2,T2,R0 ;A2=red -OR A3,T3,R0 ;A3=green -JAL 7F0D1BD0 -SW T8,0018 (SP) -OR S3,V0,R0 ;S3=V0: p->DL -OR V0,S3,R0 -LUI T7,E700 -SW T7,0000 (V0) ;DL+0= E7000000: pipesync.u -SW R0,0004 (V0) ;DL+4= 00000000: pipesync.l -ADDIU S3,S3,0008 ;advance DL -LW A1,0000 (S8) -ADDIU S1,S1,0001 -SW S2,0000 (S4) -SW S0,0000 (S5) -BGEZ S1,70002F94 -ANDI T9,S1,001F -BEQ T9,R0,70002F94 -NOP -ADDIU T9,T9,FFE0 -BNE T9,A1,70002E40 -OR S1,T9,R0 -LW T1,00C8 (SP) -SLTI AT,T1,0002 -BEQL AT,R0,70002FB8 -LW T2,00C8 (SP) -JAL 7F0D2320 -NOP -LW T2,00C8 (SP) -LW T4,0080 (SP) -LW T6,0070 (SP) -ADDIU AT,R0,0003 -ADDIU T3,T2,0001 -ADDIU T5,T4,0004 -ADDIU T8,T6,0004 -SW T8,0070 (SP) -SW T5,0080 (SP) -SW T3,00C8 (SP) -BNE T3,AT,70002E04 -ADDIU S8,S8,0004 -OR A0,S3,R0 -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7F0D1E98 -OR A3,R0,R0 -LUI V1,8006 -LUI T7,E700 -LUI T9,B800 -ADDIU V1,V1,04A0 -SW T7,0000 (V0) ;DL+0= E7000000: rdp_pipesync.u -SW R0,0004 (V0) ;DL+4= 00000000: rdp_pipesync.l -SW T9,0008 (V0) ;DL+0= B8000000: rsp_enddl.u -SW R0,000C (V0) ;DL+4= 00000000: rsp_enddl.l -LW T1,0000 (V1) -XORI T2,T1,0001 -SW T2,0000 (V1) ;toggle 800604A0: bank 0<->1 -//70003024: return -LW RA,005C (SP) -LDC1 F20,0028 (SP) -LDC1 F22,0030 (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -LW S4,0048 (SP) -LW S5,004C (SP) -LW S6,0050 (SP) -LW S7,0054 (SP) -LW S8,0058 (SP) -JR RA -ADDIU SP,SP,00D0 - -70003060 3C60 -ADDIU T0,R0,002C -ANDI V0,R0,00FF -MULTU V0,T0 -SLL T9,V0,0x2 -ADDU T9,T9,V0 -SLL T9,T9,0x2 -SUBU T9,T9,V0 -LUI A3,8002 -SLL T9,T9,0x2 -ADDIU A3,A3,3244 ;A3=80023244: legal screen image entries -LUI A0,8006 -LUI A1,8006 -MFLO T7 ;T7=V0*2C: offset to image entry V0 -LUI A2,8002 -LUI T1,803B -SUBU T9,T9,V0 -ADDIU T1,T1,5000 ;T1=803B5000: video buffer root -ADDIU A2,A2,32A4 ;A2=800232A4: video1.settings -ADDIU A1,A1,0879 -ADDIU A0,A0,0878 -ADDIU T6,R0,0001 -ADDU T8,A3,T7 ;T8=80023244+offset: p->legal screen image entry V0 -SLL T9,T9,0xB ;V0*=25800: size of video buffer -SB R0,0000 (A0) -SB T6,0000 (A1) ;0001-> 80060878 -SW T8,0000 (A2) ;T8->800232A4: save p->image entry to video1 -ADDU T3,T1,T9 ;T3=bufferroot + size -SW T3,0028 (T8) ;entry+28 = p->data -LBU V1,0000 (A1) ;V1=80060879: count -LUI T2,8002 -ADDIU T2,T2,32A8 ;T2=800232A8: video2.settings -MULTU V1,T0 -SLL T7,V1,0x2 -ADDU T7,T7,V1 -SLL T7,T7,0x2 -SUBU T7,T7,V1 -SLL T7,T7,0x2 -SUBU T7,T7,V1 -SLL T7,T7,0xB ;T7*=25800: size of video buffer -ADDU T8,T1,T7 ;T8=video.buf1 + size -LUI AT,8002 -MFLO T5 ;T5=T0*2C: offset to image entry T0 -ADDU T6,A3,T5 ;T6=80023244+offset: p->legal screen image entry T0 -SW T6,0000 (T2) ;T6->800232A8: save p->video2.settings -SW T8,0028 (T6) ;entry+28 = p->data -SW R0,329C (AT) ;0->8002329C: -LUI AT,8002 -JR RA -SW R0,32A0 (AT) ;0->800232A0: - -70003124 3D24 initialize both video buffers -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0D2380 ;0->8004EB00: -NOP -LUI A3,0002 -LUI A2,803E -LUI A1,803B -ADDIU A1,A1,5000 ;A1=803B5000 -ADDIU A2,A2,A800 ;A2=803DA800 -ORI A3,A3,5800 ;A3=25800 -OR A0,R0,R0 ;A0=0 count -//70003150: initialize both video buffers -ADDU V0,A1,A0 -SB R0,0000 (V0) -ADDU V1,A2,A0 -SB R0,0000 (V1) -SB R0,0001 (V0) -SB R0,0001 (V1) -SB R0,0002 (V0) -SB R0,0002 (V1) -SB R0,0003 (V0) -ADDIU A0,A0,0004 -BNE A0,A3,70003150 ;zero 25800 bytes -SB R0,0003 (V1) -//70003180: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70003190 3D90 -ADDIU A0,A0,0002 -LUI AT,8002 -JR RA -SW A0,32BC (AT) ;2->800232BC - -700031A0 3DA0 -LUI V1,8002 -ADDIU V1,V1,32B8 -LW V0,0000 (V1) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ V0,R0,700031D0 -LUI T8,8002 -ADDIU T6,V0,FFFF -BNE T6,R0,700031D0 -SW T6,0000 (V1) -LUI AT,8002 -SW R0,32B4 (AT) -LUI T9,8002 -LW T9,32B4 (T9) -LW T8,32B0 (T8) -LUI V0,8006 -LW T5,0884 (V0) -MULTU T8,T9 -LUI A1,8006 -ADDIU A1,A1,087C -SRA T1,T5,0x10 -LW T9,0000 (A1) -LUI V0,8006 -MFLO V1 -ADDU T3,T1,V1 -ADDU T6,T5,V1 -ANDI T7,T6,FFFF -SLL T4,T3,0x10 -OR T8,T4,T7 -SW T8,0030 (T9) -LW T6,0888 (V0) -LW T9,0000 (A1) -SRA T1,T6,0x10 -ADDU T3,T1,V1 -ADDU T4,T6,V1 -ANDI T7,T4,FFFF -SLL T5,T3,0x10 -OR T8,T5,T7 -SW T8,0044 (T9) -JAL 7000E060 -LW A0,0000 (A1) -LUI A0,8002 -JAL 7000E2D0 -LBU A0,32BF (A0) -LUI V1,8002 -ADDIU V1,V1,32BC -LW V0,0000 (V1) -BEQ V0,R0,70003270 -SLTI AT,V0,0003 -BEQ AT,R0,70003270 -ADDIU T0,V0,FFFF -SW T0,0000 (V1) -JAL 7000F7B0 -ADDIU A0,R0,0042 -LUI V0,8002 -ADDIU V0,V0,32B0 -LW T1,0000 (V0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -SUBU T2,R0,T1 -JR RA -SW T2,0000 (V0) - -70003298 -LUI T5,8002 -ADDIU T5,T5,32A8 ;T5=800232A8 -LUI T6,8002 -LW T6,32A4 (T6) -LW T0,0000 (T5) ;T0=p->video2.settings -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LBU T7,0000 (T6) -LBU V0,0000 (T0) -BEQL V0,T7,7000352C -LH T7,0004 (T0) -BEQ V0,R0,700032EC -LUI AT,3F80 -ADDIU AT,R0,0001 -BEQ V0,AT,70003308 -LUI T8,8002 -ADDIU AT,R0,0002 -BEQ V0,AT,700034A4 -LUI T9,8000 -BEQ R0,R0,7000350C -NOP -MTC1 AT,F12 -JAL 7000E200 -NOP -JAL 7000E2D0 -ADDIU A0,R0,0001 -BEQ R0,R0,7000350C -NOP -LW T8,32AC (T8) ;T8=800232AC: color output mode -LUI V1,8006 -LUI T7,8000 -BEQ T8,R0,700033C4 ;branch if 32bit -ADDIU V1,V1,087C -LUI T9,8000 -LW T9,0300 (T9) -ADDIU AT,R0,0002 -LUI T8,8006 -BNE T9,AT,70003380 -ADDIU T8,T8,0828 -LUI T7,8002 -ADDIU T7,T7,7320 -LUI T6,8006 -ADDIU T6,T6,0828 -ADDIU T9,T7,0048 -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T7) -SW AT,FFF8 (T6) -LW AT,FFFC (T7) -BNE T7,T9,70003348 -SW AT,FFFC (T6) -LW AT,0000 (T7) -LW T9,0004 (T7) -SW AT,0000 (T6) -BEQ R0,R0,70003464 -SW T9,0004 (T6) -LUI T9,8002 -ADDIU T9,T9,6A60 -ADDIU T6,T9,0048 -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T9) -SW AT,FFF8 (T8) -LW AT,FFFC (T9) -BNE T9,T6,7000338C -SW AT,FFFC (T8) -LW AT,0000 (T9) -LW T6,0004 (T9) -SW AT,0000 (T8) -BEQ R0,R0,70003464 -SW T6,0004 (T8) -LW T7,0300 (T7) -ADDIU AT,R0,0002 -LUI T8,8006 -BNE T7,AT,70003424 -ADDIU T8,T8,0828 -LUI T9,8002 -ADDIU T9,T9,7460 -LUI T6,8006 -ADDIU T6,T6,0828 -ADDIU T7,T9,0048 -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T9) -SW AT,FFF8 (T6) -LW AT,FFFC (T9) -BNE T9,T7,700033EC -SW AT,FFFC (T6) -LW AT,0000 (T9) -LW T7,0004 (T9) -SW AT,0000 (T6) -BEQ R0,R0,70003464 -SW T7,0004 (T6) -LUI T7,8002 -ADDIU T7,T7,6BA0 -ADDIU T6,T7,0048 -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T7) -SW AT,FFF8 (T8) -LW AT,FFFC (T7) -BNE T7,T6,70003430 -SW AT,FFFC (T8) -LW AT,0000 (T7) -LW T6,0004 (T7) -SW AT,0000 (T8) -SW T6,0004 (T8) -LUI T9,8006 -ADDIU T9,T9,0828 -SW T9,0000 (V1) -LW T6,001C (T9) -LUI AT,8006 -OR A0,R0,R0 -SW T6,0880 (AT) -LW T7,0030 (T9) -LUI AT,8006 -SW T7,0884 (AT) -LW T8,0044 (T9) -LUI AT,8006 -JAL 70003190 -SW T8,0888 (AT) -BEQ R0,R0,7000350C -NOP -LW T9,0300 (T9) -ADDIU AT,R0,0002 -LUI V1,8006 -BNE T9,AT,700034D0 -ADDIU V1,V1,087C -LUI V1,8006 -LUI T6,8002 -ADDIU V1,V1,087C -ADDIU T6,T6,75F0 -BEQ R0,R0,700034DC -SW T6,0000 (V1) -LUI T7,8002 -ADDIU T7,T7,6D30 -SW T7,0000 (V1) -LW V0,0000 (V1) -LUI AT,8006 -OR A0,R0,R0 -LW T8,001C (V0) -SW T8,0880 (AT) -LW T9,0030 (V0) -LUI AT,8006 -SW T9,0884 (AT) -LW T6,0044 (V0) -LUI AT,8006 -JAL 7000E2D0 -SW T6,0888 (AT) -JAL 7000F7B0 -ADDIU A0,R0,0042 -LUI T0,8002 -LW T0,32A8 (T0) ;T0=p->video2.settings -LUI T5,8002 -ADDIU T5,T5,32A8 ;T5=800232A8 -LBU V0,0000 (T0) -LH T7,0004 (T0) -LH T8,0018 (T0) -LH T9,0006 (T0) -MTC1 T7,F4 -LH T6,001A (T0) -MTC1 T8,F8 -CVT.S.W F6,F4 -MTC1 T9,F16 -MTC1 T6,F4 -LUI T8,8006 -LUI T2,8002 -CVT.S.W F10,F8 -LUI AT,3F80 -ADDIU T8,T8,0828 -LUI T3,8002 -CVT.S.W F18,F16 -CVT.S.W F8,F4 -DIV.S F2,F6,F10 -BNE V0,R0,70003580 -DIV.S F0,F18,F8 -MTC1 AT,F0 -NOP -LW T2,32C0 (T2) -LUI AT,8002 -SLL T1,T2,0x2 -ADDU AT,AT,T1 -SWC1 F2,30B4 (AT) -LUI AT,8002 -ADDU AT,AT,T1 -SWC1 F0,30BC (AT) -LBU T7,0000 (T0) -ADDIU AT,R0,0001 -BNE T7,AT,700039C0 -NOP -LW T3,32AC (T3) ;T3=800232AC: color output mode -LUI AT,8006 -ADDU AT,AT,T1 -BEQ T3,R0,70003694 ;branch if 32bit -SW T8,DBE0 (AT) -LUI T9,8000 -LW T9,0300 (T9) ;T9=80000300: display type -ADDIU AT,R0,0002 -LUI T6,8006 -BNE T9,AT,7000363C ;branch if not MPAL -ADDIU T6,T6,DB40 -//700035DC: MPAL -SLL T6,T2,0x2 -ADDU T6,T6,T2 -LUI T7,8006 -ADDIU T7,T7,DB40 -SLL T6,T6,0x4 -ADDU V1,T6,T7 -LUI T8,8002 -ADDIU T8,T8,7320 -ADDIU T6,T8,0048 -OR T7,V1,R0 -//70003604: -LW AT,0000 (T8) -ADDIU T8,T8,000C -ADDIU T7,T7,000C -SW AT,FFF4 (T7) -LW AT,FFF8 (T8) -SW AT,FFF8 (T7) -LW AT,FFFC (T8) -BNE T8,T6,70003604 -SW AT,FFFC (T7) -//70003628: -LW AT,0000 (T8) -SW AT,0000 (T7) -LW T6,0004 (T8) -BEQ R0,R0,70003760 -SW T6,0004 (T7) -//7000363C: -SLL T9,T2,0x2 -ADDU T9,T9,T2 -SLL T9,T9,0x4 -ADDU V1,T9,T6 -LUI T8,8002 -ADDIU T8,T8,6A60 -ADDIU T9,T8,0048 -OR T6,V1,R0 -//7000365C: -LW AT,0000 (T8) -ADDIU T8,T8,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T8) -SW AT,FFF8 (T6) -LW AT,FFFC (T8) -BNE T8,T9,7000365C -SW AT,FFFC (T6) -//70003680: -LW AT,0000 (T8) -SW AT,0000 (T6) -LW T9,0004 (T8) -BEQ R0,R0,70003760 -SW T9,0004 (T6) -//70003694: -LUI T7,8000 -LW T7,0300 (T7) -ADDIU AT,R0,0002 -BNE T7,AT,70003704 -SLL T9,T2,0x2 -ADDU T9,T9,T2 -LUI T8,8006 -ADDIU T8,T8,DB40 -SLL T9,T9,0x4 -ADDU V1,T9,T8 -LUI T6,8002 -ADDIU T6,T6,7460 -ADDIU T9,T6,0048 -OR T8,V1,R0 -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T6) -SW AT,FFF8 (T8) -LW AT,FFFC (T6) -BNE T6,T9,700036CC -SW AT,FFFC (T8) -LW AT,0000 (T6) -SW AT,0000 (T8) -LW T9,0004 (T6) -BEQ R0,R0,70003760 -SW T9,0004 (T8) -//70003704: -SLL T7,T2,0x2 -ADDU T7,T7,T2 -LUI T9,8006 -ADDIU T9,T9,DB40 -SLL T7,T7,0x4 -ADDU V1,T7,T9 -LUI T6,8002 -ADDIU T6,T6,6BA0 -ADDIU T7,T6,0048 -OR T9,V1,R0 -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T9,T9,000C -SW AT,FFF4 (T9) -LW AT,FFF8 (T6) -SW AT,FFF8 (T9) -LW AT,FFFC (T6) -BNE T6,T7,7000372C -SW AT,FFFC (T9) -LW AT,0000 (T6) -SW AT,0000 (T9) -LW T7,0004 (T6) -SW T7,0004 (T9) -//70003760: -LH T8,0018 (T0) -ADDIU AT,R0,0280 -ADDIU T4,R0,01E0 -SW T8,0008 (V1) -LH T7,0018 (T0) -LW V0,001C (V1) -LUI A3,8002 -SLL T6,T7,0xA -DIV T6,AT -MFLO T9 -SW T9,0020 (V1) -LH T8,001A (T0) -ORI A2,R0,FFFF -LUI A1,8002 -SLL T7,T8,0xB -DIV T7,T4 -MFLO T6 -SW T6,002C (V1) -LH T9,001A (T0) -BNE T4,R0,700037B8 -NOP -BREAK 00001C00 ;Break: division by zero -//700037B8: -ADDIU AT,R0,FFFF -BNE T4,AT,700037D0 -LUI AT,8000 -BNE T7,AT,700037D0 -NOP -BREAK 00001800 -//700037D0: -SLL T8,T9,0xB -DIV T8,T4 -MFLO T7 -SW T7,0040 (V1) -LH T6,0018 (T0) -BNE T4,R0,700037F0 -NOP -BREAK 00001C00 ;Break: division by zero -//700037F0: -ADDIU AT,R0,FFFF -BNE T4,AT,70003808 -LUI AT,8000 -BNE T8,AT,70003808 -NOP -BREAK 00001800 -//70003808: -SLL T9,T6,0x1 -SW T9,0028 (V1) -LH T8,0018 (T0) -SRA T6,V0,0x10 -ANDI T9,T6,FFFF -SLL T7,T8,0x1 -SW T7,003C (V1) -LW A3,329C (A3) -ADDU T8,T9,A3 -DIV T8,A2 -BNE A2,R0,7000383C -NOP -BREAK 00001C00 ;Break: division by zero -//7000383C: -ADDIU AT,R0,FFFF -BNE A2,AT,70003854 -LUI AT,8000 -BNE T8,AT,70003854 -NOP -BREAK 00001800 -//70003854: -ANDI T9,V0,FFFF -MFHI T7 -ADDU T8,T9,A3 -SLL T6,T7,0x10 -DIV T8,A2 -BNE A2,R0,70003874 -NOP -BREAK 00001C00 ;Break: division by zero -//70003874: -ADDIU AT,R0,FFFF -BNE A2,AT,7000388C -LUI AT,8000 -BNE T8,AT,7000388C -NOP -BREAK 00001800 -//7000388C: -MFHI T7 -OR A0,T6,T7 -SW A0,001C (V1) -LUI AT,8006 -SW A0,0880 (AT) -LW V0,0030 (V1) -LW A1,32A0 (A1) -SRA T9,V0,0x10 -ANDI T8,T9,FFFF -ADDU T6,T8,A1 -DIV T6,A2 -BNE A2,R0,700038C4 -NOP -BREAK 00001C00 ;Break: division by zero -//700038C4: -ADDIU AT,R0,FFFF -BNE A2,AT,700038DC -LUI AT,8000 -BNE T6,AT,700038DC -NOP -BREAK 00001800 -//700038DC: -ANDI T8,V0,FFFF -MFHI T7 -ADDU T6,T8,A1 -SLL T9,T7,0x10 -DIV T6,A2 -BNE A2,R0,700038FC -NOP -BREAK 00001C00 ;Break: division by zero -//700038FC: -ADDIU AT,R0,FFFF -BNE A2,AT,70003914 -LUI AT,8000 -BNE T6,AT,70003914 -NOP -BREAK 00001800 -//70003914: -MFHI T7 -OR A0,T9,T7 -SW A0,0030 (V1) -LUI AT,8006 -SW A0,0884 (AT) -LW V0,0044 (V1) -SRA T8,V0,0x10 -ANDI T6,T8,FFFF -ADDU T9,T6,A1 -DIV T9,A2 -BNE A2,R0,70003948 -NOP -BREAK 00001C00 ;Break: division by zero -//70003948: -ADDIU AT,R0,FFFF -BNE A2,AT,70003960 -LUI AT,8000 -BNE T9,AT,70003960 -NOP -BREAK 00001800 -//70003960: -ANDI T6,V0,FFFF -ADDU T9,T6,A1 -MFHI T7 -SLL T8,T7,0x10 -ADDIU T6,R0,0001 -DIV T9,A2 -BNE A2,R0,70003984 -NOP -BREAK 00001C00 ;Break: division by zero -//70003984: -ADDIU AT,R0,FFFF -BNE A2,AT,7000399C -LUI AT,8000 -BNE T9,AT,7000399C -NOP -BREAK 00001800 -//7000399C: -MFHI T7 -OR A0,T8,T7 -SW A0,0044 (V1) -LUI AT,8006 -SW A0,0888 (AT) -LUI AT,8002 -ADDU AT,AT,T1 -BEQ R0,R0,700039D4 -SW T6,30C4 (AT) -//700039C0: -LUI AT,8002 -ADDU AT,AT,T1 -LUI T3,8002 -LW T3,32AC (T3) ;T3=800232AC: color output mode -SW R0,30C4 (AT) -//700039D4: -ADDIU T2,T2,0001 -BGEZ T2,700039EC -ANDI T9,T2,0001 -BEQ T9,R0,700039EC -NOP -ADDIU T9,T9,FFFE -//700039EC: -LUI AT,8002 -BEQ T3,R0,70003A0C ;branch if 32bit -SW T9,32C0 (AT) -LUI T7,8005 -LW T7,EAB0 (T7) ;T7=8004EAB0: -LW T8,0028 (T0) ;T8= -BEQ R0,R0,70003A20 -SW T8,0058 (T7) -//70003A0C: -LUI T9,8005 -LW T9,EAB0 (T9) ;T9=8004EAB0: -LUI T6,803B -ADDIU T6,T6,5000 ;T6=803B5000 -SW T6,0058 (T9) -//70003A20: -LUI V0,8006 -ADDIU V0,V0,0878 -LBU T8,0000 (V0) -LUI V1,8006 -ADDIU T0,R0,002C -ADDIU T7,T8,0001 -ADDIU V1,V1,0879 -LBU T9,0000 (V1) -LUI A3,8002 -ADDIU A3,A3,3244 -ADDIU T8,T9,0001 -LW A0,0000 (T5) ;A0=p->video2.settings -BGEZ T7,70003A64 -ANDI T6,T7,0001 -BEQ T6,R0,70003A64 -NOP -ADDIU T6,T6,FFFE -SB T6,0000 (V0) -LBU T6,0000 (V0) -BGEZ T8,70003A80 -ANDI T7,T8,0001 -BEQ T7,R0,70003A80 -NOP -ADDIU T7,T7,FFFE -//70003A80: -MULTU T6,T0 -SB T7,0000 (V1) -LUI AT,8002 -ADDIU A2,R0,002C ;A2=0x2C: size -MFLO T9 -ADDU T8,A3,T9 -SW T8,32A4 (AT) -LBU T7,0000 (V1) -MULTU T7,T0 -MFLO T6 -ADDU A1,A3,T6 -JAL 7000F970 ;V0=p->A2 bytes copied from A0 to A1 -SW A1,0000 (T5) ;A1->video2.settings -//70003AB4: -LUI V1,8006 -ADDIU V1,V1,0879 -LBU T8,0000 (V1) -LUI T6,803B -ADDIU T6,T6,5000 ;T6=803B5000: videobufferroot -SLL T7,T8,0x2 -ADDU T7,T7,T8 -SLL T7,T7,0x2 -SUBU T7,T7,T8 -SLL T7,T7,0x2 -SUBU T7,T7,T8 -LUI T8,8002 -LW T8,32A8 (T8) ;T8=p->video2.settings -SLL T7,T7,0xB ;T7= T8*25800: offset to buffer T8 -ADDU T9,T7,T6 -SW T9,0028 (T8) ;p->buffer -> video2.settings+28: video2.buf -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70003B04 4704 - accepts: F12= -LUI AT,4160 -MTC1 AT,F0 ;F0= 14.0 -NOP -C.LT.S F0,F12 -NOP -BC1FL 70003B28 -MTC1 R0,F0 -MOV.S F12,F0 -//70003B24: -MTC1 R0,F0 -NOP -C.LT.S F12,F0 -NOP -BC1FL 70003B44 -TRUNC.W.S F4,F12 -MOV.S F12,F0 -//70003B40: -TRUNC.W.S F4,F12 ;F4=F12->word -LUI AT,8002 -ADDIU T8,R0,000A -MFC1 T7,F4 -NOP -SW T7,32B4 (AT) ;T7->800232B4 -LUI AT,8002 -JR RA -SW T8,32B8 (AT) ;A->800232B8: - -70003B64 4764 -ADDIU SP,SP,FFE0 -SW S1,0018 (SP) -SW S0,0014 (SP) -LUI S1,8006 -OR S0,A0,R0 -SW RA,001C (SP) -ADDIU S1,S1,4F10 -OR A0,S1,R0 -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -ADDIU S0,S0,FFFF -BGTZL S0,70003B84 -OR A0,S1,R0 -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -70003BB0 -LUI A1,8002 -ADDIU A1,A1,32A8 -LW T6,0000 (A1) ;T6=p->video2.settings -SLL V1,A0,0x1 -LUI V0,8003 -SB A0,0000 (T6) -ADDU V0,V0,V1 -LH V0,8480 (V0) -LW T7,0000 (A1) ;T7=p->video2.settings -SH V0,0018 (T7) -LW T8,0000 (A1) ;T8=p->video2.settings -SH V0,0004 (T8) ;V0->video2.txtClipW -LUI V0,8003 -ADDU V0,V0,V1 -LH V0,8488 (V0) -LW T9,0000 (A1) ;T9=p->video2.settings -SH V0,001A (T9) -LW T0,0000 (A1) ;T0=p->video2.settings -JR RA -SH V0,0006 (T0) ;V0->video2.txtClipH - -70003C00 4800 set color mode to 16bit -ADDIU T6,R0,0001 -LUI AT,8002 -JR RA -SW T6,32AC (AT) ;1->800232AC: 16bit - -70003C10 4810 set color mode to 32bit -LUI AT,8002 -JR RA -SW R0,32AC (AT) ;0->800232AC: 32bit - -70003C1C 481C V0=p->video buffer 2 -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -LW V0,0028 (T6) ;V0=video2+28: p->video2.buf - -70003C2C 482C V0=p->video buffer 1 -LUI T6,8002 -LW T6,32A4 (T6) ;T6=p->video1 -JR RA -LW V0,0028 (T6) ;V0=video1+28: p->video1.buf - -70003C3C 483C A0->video buffer 2 -LUI T6,8002 -LW T6,32A8 (T6) -JR RA -SW A0,0028 (T6) ;A0->800232A8+28: video2.buf - -70003C4C 484C -LUI V0,8006 -JR RA -LHU V0,0824 (V0) ;V0=80060824 - -70003C58 4858 - accepts: A0= -LUI A1,8008 -ADDIU A1,A1,A0B0 -LW V0,0000 (A1) ;V0=8007A0B0: p->BONDdata -ADDIU SP,SP,FFD0 -SW S0,0024 (SP) -OR S0,A0,R0 -SW RA,002C (SP) -BEQ V0,R0,70003D20 ;skip if NULL -SW S1,0028 (SP) -LUI S1,8002 -ADDIU S1,S1,32A8 ;S1=800232A8 -LW T6,0000 (S1) ;T6=p->video2.settings -LUI A0,8006 -ADDIU A0,A0,0879 -LBU T9,0000 (A0) -LH T7,001C (T6) -SLL T0,T9,0x4 -ADDU T1,V0,T0 -SLL T8,T7,0x1 -SH T8,07D0 (T1) -LW V1,0000 (S1) ;V1=p->video2.settings -LBU T9,0000 (A0) -LW T7,0000 (A1) -LH T2,001C (V1) -LH T4,0020 (V1) -SLL T0,T9,0x4 -SLL T3,T2,0x1 -SLL T5,T4,0x2 -ADDU T6,T3,T5 -ADDU T8,T7,T0 -SH T6,07D8 (T8) -LW T1,0000 (S1) ;T1=p->video2.settings -LBU T5,0000 (A0) -LW T3,0000 (A1) -LH T2,001E (T1) -SLL T9,T5,0x4 -ADDU T7,T3,T9 -SLL T4,T2,0x1 -SH T4,07D2 (T7) -LW V1,0000 (S1) ;V1=p->video2.settings -LBU T3,0000 (A0) -LW T5,0000 (A1) -LH T0,001E (V1) -LH T8,0022 (V1) -SLL T9,T3,0x4 -SLL T6,T0,0x1 -SLL T1,T8,0x2 -ADDU T2,T6,T1 -ADDU T4,T5,T9 -SH T2,07DA (T4) -LUI T7,0380 -LUI A0,8006 -ORI T7,T7,0010 -OR V0,S0,R0 -ADDIU A0,A0,0879 -SW T7,0000 (V0) -LBU T8,0000 (A0) -LW T0,0000 (A1) -LUI AT,8000 -SLL T6,T8,0x4 -ORI AT,AT,07D0 -ADDU T1,T0,T6 -LUI S1,8002 -ADDU T3,T1,AT -ADDIU S1,S1,32A8 ;S1=800232A8 -SW T3,0004 (V0) -JAL 7F0BD6E0 -ADDIU S0,S0,0008 -LUI AT,8006 -SW V0,0820 (AT) -LW V1,0000 (S1) ;V1=p->video2.settings -LUI AT,3F80 -MTC1 AT,F8 -LWC1 F4,0010 (V1) -LW A2,0008 (V1) -LW A3,000C (V1) -SWC1 F4,0010 (SP) -LWC1 F6,0014 (V1) -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,0824 -ADDIU A0,A0,07E0 -SWC1 F8,0018 (SP) -JAL 7000FC80 -SWC1 F6,0014 (SP) -LUI A0,8006 -LUI A1,8006 -LW A1,0820 (A1) -JAL 7000FF10 -ADDIU A0,A0,07E0 -LUI T5,0103 -LUI A1,8006 -ORI T5,T5,0040 -OR V0,S0,R0 -ADDIU A1,A1,0820 -SW T5,0000 (V0) -LW T9,0000 (A1) -LUI AT,8000 -ADDIU S0,S0,0008 -LUI T4,BC00 -ADDU T2,T9,AT -SW T2,0004 (V0) -ORI T4,T4,000E -OR V1,S0,R0 -SW T4,0000 (V1) -LUI T7,8006 -LHU T7,0824 (T7) -ADDIU S0,S0,0008 -SW T7,0004 (V1) -JAL 7F078364 -LW A0,0000 (A1) -LUI A0,8006 -JAL 7F0783D4 -ADDIU A0,A0,07E0 -LUI T8,8002 -LW T8,32AC (T8) ;T8=800232AC: color output mode -OR V0,S0,R0 -LUI AT,FF18 -BEQL T8,R0,70003E78 ;branch if 32bit -LW T7,0000 (S1) -LW T0,0000 (S1) ;T0=p->video2.settings -LUI AT,FF10 -OR V0,S0,R0 -LH T6,0018 (T0) -ADDIU S0,S0,0008 -ADDIU T1,T6,FFFF -ANDI T3,T1,0FFF -OR T5,T3,AT -SW T5,0000 (V0) -LW T9,0000 (S1) ;T9=p->video2.settings -LUI AT,8000 -LW T2,0028 (T9) -ADDU T4,T2,AT -BEQ R0,R0,70003E9C -SW T4,0004 (V0) -LW T7,0000 (S1) ;T7=p->video2.settings -LUI T3,003B -ADDIU T3,T3,5000 -LH T8,0018 (T7) -SW T3,0004 (V0) -ADDIU S0,S0,0008 -ADDIU T0,T8,FFFF -ANDI T6,T0,0FFF -OR T1,T6,AT -SW T1,0000 (V0) -LW RA,002C (SP) -OR V0,S0,R0 -LW S0,0024 (SP) -LW S1,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -70003EB4 4AB4 -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW T7,0024 (T6) -BEQL T7,R0,70003EE8 -LW RA,0014 (SP) -JAL 7F0D2464 -NOP -JAL 7F0D2518 -OR A0,V0,R0 -OR A0,V0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,A0,R0 -JR RA -NOP - -70003EF8 4AF8 insert a generic fillrect in display list A0; returns V0=updated DL pointer - accepts: A0=p->display list -LUI T6,BA00 -ORI T6,T6,1402 -LUI T7,0030 -SW T7,0004 (A0) -SW T6,0000 (A0) -LUI A2,8002 -LW A2,32A8 (A2) ;A2=p->video2.settings -ADDIU A1,A0,0008 -LUI AT,F600 -LH T8,0018 (A2) -LH T3,001A (A2) -ADDIU A3,A1,0008 -ADDIU T9,T8,FFFF -ANDI T0,T9,03FF -ADDIU T4,T3,FFFF -ANDI T5,T4,03FF -SLL T1,T0,0xE -OR T2,T1,AT -SLL T6,T5,0x2 -OR T7,T2,T6 -SW T7,0000 (A1) -SW R0,0004 (A1) -LUI T8,E700 -SW T8,0000 (A3) -SW R0,0004 (A3) -JR RA -ADDIU V0,A3,0008 - -70003F64 - accepts: A0=p->display list -ADDIU SP,SP,FF98 -SW S0,0014 (SP) -SW RA,001C (SP) -SW S1,0018 (SP) -LUI T6,BA00 -ORI T6,T6,1402 -ADDIU S0,A0,0008 -LUI T7,0030 -SW T7,0004 (A0) -SW T6,0000 (A0) -OR V1,S0,R0 -LUI T8,ED00 -SW T8,0000 (V1) -SW V1,0060 (SP) -JAL 7000441C ;V0= video2.txtClipW -ADDIU S0,S0,0008 -SLL S1,V0,0x10 -SRA T9,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T9,R0 -MTC1 V0,F4 -MTC1 S1,F16 -LUI AT,4080 -CVT.S.W F6,F4 -MTC1 AT,F0 -LW T8,0060 (SP) -OR V1,S0,R0 -LUI T0,0001 -CVT.S.W F18,F16 -MUL.S F8,F6,F0 -ORI T0,T0,0001 -LUI T9,F700 -ADDIU S0,S0,0008 -MUL.S F4,F18,F0 -TRUNC.W.S F10,F8 -TRUNC.W.S F6,F4 -MFC1 T1,F10 -MFC1 T4,F6 -ANDI T2,T1,0FFF -ANDI T5,T4,0FFF -SLL T6,T5,0xC -OR T7,T2,T6 -SW T7,0004 (T8) -SW T0,0004 (V1) -JAL 70004524 ;V0= video2.uly -SW T9,0000 (V1) -BLEZ V0,7000409C -NOP -JAL 7F09B150 -NOP -JAL 7F09B4D8 -OR A0,V0,R0 -BNE V0,R0,7000409C -NOP -SW S0,0058 (SP) -JAL 7000441C ;V0= video2.txtClipW -ADDIU S0,S0,0008 -SLL S1,V0,0x10 -SRA T1,S1,0x10 -JAL 70004524 ;V0= video2.uly -OR S1,T1,R0 -ADDIU T3,V0,FFFF -LW A0,0058 (SP) -ANDI T4,T3,03FF -ADDIU T6,S1,FFFF -ANDI T7,T6,03FF -SLL T5,T4,0x2 -LUI AT,F600 -OR T2,T5,AT -SLL T8,T7,0xE -OR T9,T2,T8 -OR V1,S0,R0 -SW T9,0000 (A0) -SW R0,0004 (A0) -LUI T0,E700 -SW T0,0000 (V1) -SW R0,0004 (V1) -ADDIU S0,S0,0008 -JAL 7F09A464 -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7000416C -NOP -JAL 700044AC ;V0= video2.lry -NOP -JAL 70004524 ;V0= video2.uly -SH V0,0022 (SP) -SLL S1,V0,0x10 -SRA T1,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T1,R0 -LH T3,0022 (SP) -ADDU T4,S1,T3 -SLT AT,T4,V0 -BEQL AT,R0,70004370 -LW RA,001C (SP) -SW S0,0050 (SP) -JAL 7000441C ;V0= video2.txtClipW -ADDIU S0,S0,0008 -SLL S1,V0,0x10 -SRA T5,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T5,R0 -ADDIU T6,V0,FFFF -ANDI T7,T6,03FF -ADDIU T9,S1,FFFF -ANDI T0,T9,03FF -SLL T2,T7,0x2 -LUI AT,F600 -LW T4,0050 (SP) -OR T8,T2,AT -SLL T1,T0,0xE -OR T3,T8,T1 -JAL 70004524 ;V0= video2.uly -SW T3,0000 (T4) -SLL S1,V0,0x10 -SRA T5,S1,0x10 -JAL 700044AC ;V0= video2.lry -OR S1,T5,R0 -LW T9,0050 (SP) -ADDU T6,V0,S1 -ANDI T7,T6,03FF -SLL T2,T7,0x2 -OR V1,S0,R0 -LUI T0,E700 -SW T2,0004 (T9) -SW R0,0004 (V1) -SW T0,0000 (V1) -BEQ R0,R0,7000436C -ADDIU S0,S0,0008 -JAL 7F09B150 -NOP -JAL 7F09B4D8 -OR A0,V0,R0 -BNEL V0,R0,70004370 -LW RA,001C (SP) -JAL 700044AC ;V0= video2.lry -NOP -JAL 700044AC ;V0= video2.lry -SH V0,0020 (SP) -JAL 70004524 ;V0= video2.uly -SH V0,0022 (SP) -SLL S1,V0,0x10 -SRA T8,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T8,R0 -LH T1,0022 (SP) -LH T4,0020 (SP) -ADDU T3,S1,T1 -ADDU T5,T3,T4 -SLT AT,T5,V0 -BEQL AT,R0,70004260 -OR S1,S0,R0 -SW S0,0048 (SP) -JAL 7000441C ;V0= video2.txtClipW -ADDIU S0,S0,0008 -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T6,R0 -ADDIU T7,V0,FFFF -ANDI T2,T7,03FF -ADDIU T8,S1,FFFF -ANDI T1,T8,03FF -SLL T9,T2,0x2 -LUI AT,F600 -LW T5,0048 (SP) -OR T0,T9,AT -SLL T3,T1,0xE -OR T4,T0,T3 -JAL 700044AC ;V0= video2.lry -SW T4,0000 (T5) -JAL 70004524 ;V0= video2.uly -SH V0,0022 (SP) -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 700044AC ;V0= video2.lry -OR S1,T6,R0 -LH T2,0022 (SP) -ADDU T7,V0,S1 -LW T0,0048 (SP) -ADDU T9,T7,T2 -ANDI T8,T9,03FF -SLL T1,T8,0x2 -OR V1,S0,R0 -SW T1,0004 (T0) -LUI T3,E700 -SW T3,0000 (V1) -SW R0,0004 (V1) -ADDIU S0,S0,0008 -OR S1,S0,R0 -JAL 7000441C ;V0= video2.txtClipW -ADDIU S0,S0,0008 -ADDIU T4,V0,FFFF -ANDI T5,T4,03FF -SLL T6,T5,0xE -LUI AT,F600 -OR T7,T6,AT -ORI T2,T7,01E0 -ADDIU T9,R0,01DC -OR V1,S0,R0 -SW T9,0004 (S1) -SW T2,0000 (S1) -LUI T8,E700 -SW T8,0000 (V1) -SW R0,0004 (V1) -JAL 7F09A464 -ADDIU S0,S0,0008 -SLTI AT,V0,0003 -BNE AT,R0,700042F0 -OR S1,S0,R0 -JAL 7000442C ;V0= video2.txtClipH -ADDIU S0,S0,0008 -ADDIU T1,V0,FFFF -ANDI T0,T1,03FF -SLL T3,T0,0x2 -LUI AT,F628 -LUI T5,0027 -ORI T5,T5,C000 -OR T4,T3,AT -OR V1,S0,R0 -SW T4,0000 (S1) -SW T5,0004 (S1) -LUI T6,E700 -SW T6,0000 (V1) -SW R0,0004 (V1) -ADDIU S0,S0,0008 -JAL 7F09A464 -NOP -ADDIU AT,R0,0003 -BNEL V0,AT,70004370 -LW RA,001C (SP) -SW S0,0030 (SP) -JAL 7000441C ;V0= video2.txtClipW -ADDIU S0,S0,0008 -SLL S1,V0,0x10 -SRA T7,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T7,R0 -ADDIU T2,V0,FFFF -LW A0,0030 (SP) -ANDI T9,T2,03FF -ADDIU T0,S1,FFFF -ANDI T3,T0,03FF -SLL T8,T9,0x2 -LUI AT,F600 -OR T1,T8,AT -SLL T4,T3,0xE -LUI T6,0028 -ORI T6,T6,41E4 -OR T5,T1,T4 -OR V1,S0,R0 -SW T5,0000 (A0) -SW T6,0004 (A0) -LUI T7,E700 -SW T7,0000 (V1) -SW R0,0004 (V1) -ADDIU S0,S0,0008 -LW RA,001C (SP) -OR V0,S0,R0 -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0068 - -70004384 4F84 -LUI AT,8002 -JR RA -SW A0,32A0 (AT) ;A0->800232A0: - -70004390 4F90 -LUI V0,8002 -JR RA -LW V0,32A0 (V0) ;V0=800232A0: - -7000439C 4F9C -LUI AT,8002 -JR RA -SW A0,329C (AT) ;A0->8002329C: - -700043A8 4FA8 -LUI V0,8002 -JR RA -LW V0,329C (V0) ;V0=8002329C: - -700043B4 4FB4 -LUI V0,8002 -ADDIU V0,V0,32A8 -LW T0,0000 (V0) ;T0=p->video2.settings -SW A0,0000 (SP) -SW A1,0004 (SP) -SH A0,0018 (T0) ;A0->video2+18: -LW T1,0000 (V0) ;T1=p->video2.settings -JR RA -SH A1,001A (T1) ;A1->video2+1A: - -700043D8 4FD8 -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -LH V0,0018 (T6) ;V0=video2+18: - -700043E8 4FE8 -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -LH V0,001A (T6) ;V0=video2+1A: - -700043F8 4FF8 set video2 text clip width (A0) and height (A1) - A0=text clip width, A1=text clip height -LUI V0,8002 -ADDIU V0,V0,32A8 -LW T0,0000 (V0) ;T0=800232A8: p->video2.settings -SW A0,0000 (SP) -SW A1,0004 (SP) -SH A0,0004 (T0) ;A0->video2.txtClipW -LW T1,0000 (V0) -JR RA -SH A1,0006 (T1) ;A1->video2.txtClipH - -7000441C 501C V0= video2 text clip width -LUI T6,8002 -LW T6,32A8 (T6) ;T6=800232A8: p->video2.settings -JR RA -LH V0,0004 (T6) ;V0=video2+4: txtClipW - -7000442C 502C V0= video2 text clip height -LUI T6,8002 -LW T6,32A8 (T6) ;T6=800232A8: p->video2.settings -JR RA -LH V0,0006 (T6) ;V0=video2+6: txtClipH - -7000443C 503C set video2 width (A0) and height (A1) - accepts: A0=viewport width, A1=viewport height -LUI V1,8002 -ADDIU V1,V1,32A8 -ADDIU SP,SP,FFE8 -LW T0,0000 (V1) ;T0=p->video2.settings -SW RA,0014 (SP) -SW A0,0018 (SP) ;SP+18=A0: viewport width -SW A1,001C (SP) ;SP+1C=A1: viewport height -SH A0,001C (T0) ;A0->video2.lrx -LW T1,0000 (V1) ;T1=p->video2.settings -SH A1,001E (T1) ;A1->video2.lry -LW V0,0000 (V1) ;V0=p->video2.settings -LH T2,001C (V0) ;T2=video2+1C: video2.lrx -LH T3,001E (V0) ;T3=video2+1E: video2.lry -MTC1 T2,F4 -MTC1 T3,F6 -CVT.S.W F12,F4 ;F12= (float) lrx -JAL 7F077BD8 -CVT.S.W F14,F6 ;F14= (float) lry -JAL 7F077C5C -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000449C 509C V0= video2 lower-right x -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -LH V0,001C (T6) ;V0=video2+1C: video2.lrx - -700044AC 50AC V0= video2 lower-right y -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -LH V0,001E (T6) ;V0=video2+1E: video2.lry - -700044BC 50BC set video2 upper-left x (A0) and upper-left y (A1) -LUI V1,8002 -ADDIU V1,V1,32A8 -ADDIU SP,SP,FFE8 -LW T0,0000 (V1) ;T0=p->video2.settings -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -SH A0,0020 (T0) -LW T1,0000 (V1) ;T1=p->video2.settings -SH A1,0022 (T1) -LW V0,0000 (V1) ;V0=p->video2.settings -LH T2,0020 (V0) -LH T3,0022 (V0) -MTC1 T2,F4 -MTC1 T3,F6 -CVT.S.W F12,F4 -JAL 7F077C14 -CVT.S.W F14,F6 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004514 5114 V0= video2 upper-left x -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -LH V0,0020 (T6) ;V0=video2+20: video2.ulx - -70004524 5124 V0= video2 upper-left y -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -LH V0,0022 (T6) ;V0=video2+22: video2.uly - -70004534 5134 A0-> video2 ??? -LUI T6,8002 -LW T6,32A8 (T6) ;T6=p->video2.settings -JR RA -SW A0,0024 (T6) ;A0->video2+24: - -70004544 5144 -ADDIU SP,SP,FFE8 -LUI V1,8002 -ADDIU V1,V1,32A8 -SWC1 F12,0018 (SP) -LWC1 F4,0018 (SP) -LW T6,0000 (V1) ;T6=p->video2.settings -SW RA,0014 (SP) -SWC1 F4,0008 (T6) -LW V0,0000 (V1) ;V0=p->video2.settings -LWC1 F12,0010 (V0) -LWC1 F14,0008 (V0) -JAL 7F077C30 ;F12->BONDdata+10A0, F14->BONDdata+10A4, A2[float]->BONDdata+10A8 -LW A2,000C (V0) -JAL 7F077C5C -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004590 5190 F12->video2 page width - accepts: F12=page width -ADDIU SP,SP,FFE8 -LUI V1,8002 -ADDIU V1,V1,32A8 -SWC1 F12,0018 (SP) -LWC1 F4,0018 (SP) -LW T6,0000 (V1) ;T6=p->video2.settings -SW RA,0014 (SP) -SWC1 F4,000C (T6) ;F12->video2.settings+C: video2.pagewidth -LW V0,0000 (V1) ;V0=p->video2.settings -LWC1 F12,0010 (V0) ;F12=video2.settings+10: -LWC1 F14,0008 (V0) ;F14=video2.settings+8: -JAL 7F077C30 ;F12->BONDdata+10A0, F14->BONDdata+10A4, A2[float]->BONDdata+10A8 -LW A2,000C (V0) ;A2=(float) page width -JAL 7F077C5C -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700045DC 51DC -LUI T6,8002 -LW T6,32A8 (T6) -JR RA -LWC1 F0,0008 (T6) ;F0=800232A8+8: video2.??? - -700045EC 51EC -ADDIU SP,SP,FFE8 -LUI V1,8002 -ADDIU V1,V1,32A8 -SWC1 F14,001C (SP) -LWC1 F4,001C (SP) -LW T6,0000 (V1) ;T6=p->video2.settings -SW RA,0014 (SP) -SWC1 F12,0018 (SP) -SWC1 F4,0008 (T6) -LWC1 F8,001C (SP) -LWC1 F6,0018 (SP) -LW T7,0000 (V1) ;T7=p->video2.settings -DIV.S F10,F6,F8 -SWC1 F10,000C (T7) -LW V0,0000 (V1) ;V0=p->video2.settings -LWC1 F12,0010 (V0) -LWC1 F14,0008 (V0) -JAL 7F077C30 ;F12->BONDdata+10A0, F14->BONDdata+10A4, A2[float]->BONDdata+10A8 -LW A2,000C (V0) -JAL 7F077C5C -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004650 5250 - accepts: F12=, F14= -ADDIU SP,SP,FFE8 -LUI V1,8002 -ADDIU V1,V1,32A8 -SWC1 F12,0018 (SP) -LWC1 F4,0018 (SP) -LW T6,0000 (V1) ;T6=p->video2.settings -SW RA,0014 (SP) -SWC1 F14,001C (SP) -SWC1 F4,0010 (T6) ;video2.settings+10 = F12 f/caller -LW T7,0000 (V1) ;T7=p->video2.settings -LWC1 F6,001C (SP) -SWC1 F6,0014 (T7) ;video2.settings+14 = F14 f/caller -LW V0,0000 (V1) ;V0=p->video2.settings -LWC1 F12,0010 (V0) ;F12= F12 f/caller -LWC1 F14,0008 (V0) -JAL 7F077C30 ;F12->BONDdata+10A0, F14->BONDdata+10A4, A2[float]->BONDdata+10A8 -LW A2,000C (V0) -JAL 7F077C5C -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700046AC 52AC - accepts: A0=p->??? -LUI V0,8002 -ADDIU V0,V0,32A8 -LW T6,0000 (V0) ;T6=p->video2.settings -LWC1 F4,0010 (T6) -SWC1 F4,0000 (A0) -LW T7,0000 (V0) ;T7=p->video2.settings -LWC1 F6,0014 (T7) -JR RA -SWC1 F6,0004 (A0) - -700046D0 52D0 set setfillcolour with color (A1,A2,A3) in display list A0 - accepts: A0=p->display list target, A1=red, A2=green, A3=blue -LUI T6,8002 -LW T6,32AC (T6) ;T6=800232AC: color output mode -OR V0,A0,R0 -LUI T8,F700 -BEQ T6,R0,70004730 ;1: 16bit color -SLL T0,A1,0x18 -SLL T8,A1,0x8 -SLL T0,A2,0x3 -ANDI T1,T0,07C0 ;T1= green -ANDI T9,T8,F800 ;T9= red -SRA T3,A3,0x2 -ANDI T4,T3,003E ;T4= blue -OR T2,T9,T1 -OR V1,T2,T4 -ORI T5,V1,0001 -OR V0,A0,R0 -LUI T7,F700 -SW T7,0000 (V0) -SLL T6,T5,0x10 -OR T7,T6,T5 -SW T7,0004 (V0) -ADDIU A0,A0,0008 -JR RA -OR V0,A0,R0 -//70004730: 0: 32bit color -SLL T9,A2,0x10 -OR T1,T0,T9 -SLL T3,A3,0x8 -OR T2,T1,T3 -ORI T4,T2,00FF -SW T4,0004 (V0) -ADDIU A0,A0,0008 -SW T8,0000 (V0) -JR RA -OR V0,A0,R0 - -70004758 5358 image capture routine: 16bit jpeg -ADDIU SP,SP,FEC8 -SW S1,0024 (SP) -SW S2,0028 (SP) -SW S0,0020 (SP) -LUI S1,8003 -SW RA,002C (SP) -ADDIU S1,S1,8490 ;S1=80028490: "grab.%d.jpeg" -ADDIU S0,SP,0038 ;S0=SP+38: buffer for string -ADDIU S2,SP,0034 ;S2=SP+34: p->instance -//7000477C: -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 ;A1=S1 -OR A0,S0,R0 ;A0=S0: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 ;A1=S2: @filesize -BEQ V0,R0,700047B8 ;branch if unique -//700047A0: loop and increment value if found -LUI A2,8002 -LW A2,32C4 (A2) -LUI AT,8002 -ADDIU A2,A2,0001 -BEQ R0,R0,7000477C -SW A2,32C4 (AT) ;cur.jpeg16bit +=1 -//700047B8: grab base image -LUI A2,8002 -LUI A1,8003 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -ADDIU A1,A1,84A0 ;A1=800284A0: "grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= video2.txtClipW -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T6,R0 -MULTU V0,S1 -LUI T7,8002 -LW T7,32A8 (T7) ;T7=800232A8: p->video2 -OR A0,S0,R0 ;A0=S0: p->text -LW A1,0028 (T7) ;A1= video2.buf -MFLO A2 ;A2=width * height -SLL T8,A2,0x1 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T8,R0 ;A2=width * height * 2: size of VI buffer -//7000480C: send command line: Uix2pix -xs{width} grab.{instance}.temp.Uix -LUI A2,8002 -LUI A1,8003 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -ADDIU A1,A1,84B4 ;A1=800284B4: "uix2pix grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//7000482C: send command line: fromalias - probably a copy/rename routine -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -LUI A1,8003 -ADDIU A1,A1,84D0 ;A1=800284D0: "fromalias grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004850: send command line: imagecopy - format is jfif, converting raw rgb into jpeg -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -LUI A1,8003 -ADDIU A1,A1,84FC ;A1=800284FC: "imgcopy -fjfif grab.%d.temp.rgb grab.%d.jpeg" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004874: remove intermediate images -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -LUI A1,8003 -ADDIU A1,A1,852C ;A1=8002852C: "rm grab.%d.temp.uix grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -OR A3,A2,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -SW A2,0010 (SP) -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//7000489C: open image in imgview -LUI A2,8002 -LUI A1,8003 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -ADDIU A1,A1,8564 ;A1=80028564: "imgview grab.%d.jpeg" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//700048BC: return -LW RA,002C (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -JR RA -ADDIU SP,SP,0138 - -700048D4 54D4 image capture routine: 32bit jpeg -ADDIU SP,SP,FEC8 -SW S1,0020 (SP) -SW S2,0024 (SP) -SW S0,001C (SP) -LUI S1,8003 -SW RA,002C (SP) -SW S3,0028 (SP) -ADDIU S1,S1,857C ;S1=8002857C: "grab.%d.jpeg" -ADDIU S0,SP,0038 ;S0=SP+38: p->buffer -ADDIU S2,SP,0034 ;S2=SP+34: p->instance -//700048FC: find an unused instance -LUI S3,8002 -LW A2,32C8 (S3) ;A2=800232C8: cur.jpeg32bit -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 -OR A0,S0,R0 ;A0=S0: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 ;A1=S2: @filesize -BEQ V0,R0,70004938 ;branch if unique -//70004920: loop and increment value if found -LUI S3,8002 -LW S3,32C8 (S3) -LUI AT,8002 -ADDIU S3,S3,0001 -BEQ R0,R0,700048FC -SW S3,32C8 (AT) ;jpeg grab# +=1 -//70004938: grab base entry -LUI S3,8002 -LUI A1,8003 -LW A2,32C8 (S3) ;A2=800232C8: cur.jpeg32bit -ADDIU A1,A1,858C ;A1=8002858C: "grab.%d.temp.Uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= video2.txtClipW -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T6,R0 -MULTU V0,S1 -LUI A1,803B -ADDIU A1,A1,5000 ;A1=803B5000 -OR A0,S0,R0 ;A0=S0: p->string -MFLO A2 ;A2=width * height -SLL T7,A2,0x2 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T7,R0 ;A2=width * height * 4: size of 32bit video buffer -//70004988: send command line: Uix2pix -xs{width} grab.{instance}.temp.Uix -JAL 7000441C ;V0= video2.txtClipW -NOP -LUI S3,8002 -LUI A1,8003 -ADDIU A1,A1,85A0 ;A1=800285A0: "Uix2pix -xs%d grab.%d.temp.Uix" -LW A3,32C8 (S3) ;A3=800232C8: cur.jpeg32bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,V0,R0 ;A2=V0: width -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 ;A0=S0: p->string -//700049B4: send command line: fromalias - probably a copy/rename routine -LUI S3,8002 -LW A3,32C8 (S3) ;A3=800232C8: cur.jpeg32bit -LUI A1,8003 -ADDIU A1,A1,85C0 ;A1=800285C0: "fromalias grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//700049D8: send command line: imagecopy - format is jfif, converting raw rgb into jpeg -LUI S3,8002 -LW A3,32C8 (S3) -LUI A1,8003 -ADDIU A1,A1,85EC ;A1=800285EC: "imgcopy -fjfif grab.%d.temp.rgb grab.%d.jpeg" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//700049FC: remove intermediate images -LUI S3,8002 -LW A3,32C8 (S3) ;A3=800232C8: cur.jpeg32bit -LUI A1,8003 -ADDIU A1,A1,861C ;A1=8002861C: "rm grab.%d.temp.Uix grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -OR A2,A3,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -SW A3,0010 (SP) -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004A24: open image in imgview -LUI S3,8002 -LUI A1,8003 -LW A2,32C8 (S3) -ADDIU A1,A1,8654 ;A1=80028654: "imgview grab.%d.jpeg" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004A44: return -LW RA,002C (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -LW S2,0024 (SP) -LW S3,0028 (SP) -JR RA -ADDIU SP,SP,0138 - -70004A60 5660 image capture routine: 16bit rgb -ADDIU SP,SP,FED0 -SW S1,001C (SP) -SW S2,0020 (SP) -SW S0,0018 (SP) -LUI S1,8003 -SW RA,0024 (SP) -ADDIU S1,S1,866C ;S1=8002866C: "grab.%d.rgb" -ADDIU S0,SP,0030 ;S0=SP+30: p->buffer -ADDIU S2,SP,002C ;S2=SP+2C: p->instance -//70004A84: find an unused instance -LUI A2,8002 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 -OR A0,S0,R0 ;A0=S0: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 ;A1=S2: @filesize -BEQ V0,R0,70004AC0 ;branch if unique -//70004AA8: loop and increment value if found -LUI A2,8002 -LW A2,32CC (A2) -LUI AT,8002 -ADDIU A2,A2,0001 -BEQ R0,R0,70004A84 -SW A2,32CC (AT) ;cur.rgb16bit += 1 -//70004AC0: grab base entry -LUI A2,8002 -LUI A1,8003 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -ADDIU A1,A1,8678 ;A1=80028678: "grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= video2.txtClipW -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T6,R0 -MULTU V0,S1 -LUI T7,8002 -LW T7,32A8 (T7) ;T7=800232A8: p->video2.settings -OR A0,S0,R0 ;A0=S0: p->string -LW A1,0028 (T7) ;A1=video2.buf -MFLO A2 ;A2=width * height -SLL T8,A2,0x1 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T8,R0 ;A2=width * height * 2: size of screen buffer -//70004B14: send command line: Uix2pix grab.{instance}.temp.uix -LUI A2,8002 -LUI A1,8003 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -ADDIU A1,A1,868C ;A1=8002868C: "uix2pix grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B34: send command line: fromalias - probably a copy/rename routine -LUI A2,8002 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -LUI A1,8003 -ADDIU A1,A1,86A8 ;A1=800286A8: "fromalias grab.%d.temp.pix grab.%d.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B58: remove intermediate images -LUI A2,8002 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -LUI A1,8003 -ADDIU A1,A1,86D0 ;A1=800286D0: "rm grab.%d.temp.uix grab.%d.temp.pix" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B7C: open image in imgview -LUI A2,8002 -LUI A1,8003 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -ADDIU A1,A1,86F8 ;A1=800286F8: "imgview grab.%d.rgb" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B9C: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0130 - -70004BB4 57B4 image capture routine: 32bit rgba -ADDIU SP,SP,FED0 -SW S1,0018 (SP) -SW S2,001C (SP) -SW S0,0014 (SP) -LUI S1,8003 -SW RA,0024 (SP) -SW S3,0020 (SP) -ADDIU S1,S1,870C ;S1=8002870C: "grab.%d.rgb" -ADDIU S0,SP,0030 ;S0=SP+30: p->buffer -ADDIU S2,SP,002C ;S2=SP+2C: p->instance -//70004BDC: -LUI S3,8002 -LW A2,32D0 (S3) ;A2=800232D0: cur.rgb32bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 -OR A0,S0,R0 ;A0=S0: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 ;A1=S2: @filesize -BEQ V0,R0,70004C18 ;branch if unique -//70004BDC: loop and increment value if found -LUI S3,8002 -LW S3,32D0 (S3) -LUI AT,8002 -ADDIU S3,S3,0001 -BEQ R0,R0,70004BDC -SW S3,32D0 (AT) ;cur.rgb32bit += 1 -//70004C18: grab base entry -LUI S3,8002 -LUI A1,8003 -LW A2,32D0 (S3) ;A2=800232D0: cur.rgb32bit -ADDIU A1,A1,8718 ;A1=80028718: "grab.%d.temp.Uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= video2.txtClipW -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T6,R0 -MULTU V0,S1 -LUI A1,803B -ADDIU A1,A1,5000 ;A1=803B5000 -OR A0,S0,R0 -MFLO A2 ;A2=width * height -SLL T7,A2,0x2 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T7,R0 ;A2=width * height * 4 -//70004C68: send command line: Uix2pix -xs{width} grab.{instance}.temp.Uix -JAL 7000441C ;V0= video2.txtClipW -NOP -LUI S3,8002 -LUI A1,8003 -ADDIU A1,A1,872C ;A1=8002872C: "Uix2pix -xs%d grab.%d.temp.Uix" -LW A3,32D0 (S3) ;A3=800232D0: cur.rgb32bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,V0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004C94: send command line: fromalias - probably a copy/rename routine -LUI S3,8002 -LW A3,32D0 (S3) ;A3=800232D0: cur.rgb32bit -LUI A1,8003 -ADDIU A1,A1,874C ;A1=8002874C: "fromalias grab.%d.temp.pix grab.%d.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004CB8: remove intermediate images -LUI S3,8002 -LW A3,32D0 (S3) ;A3=800232D0: cur.rgb32bit -LUI A1,8003 -ADDIU A1,A1,8774 ;A1=80028774: "rm grab.%d.temp.Uix grab.%d.temp.pix" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004CDC: open image in imgview -LUI S3,8002 -LUI A1,8003 -LW A2,32D0 (S3) ;A2=800232D0: cur.rgb32bit -ADDIU A1,A1,879C ;A1=8002879C: "imgview grab.%d.rgb" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004CFC: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0130 - -70004D20 5920 V0=p->match in debug.notice.list or NULL if not found - accepts: A0=p->name, A1=p->data -ADDIU SP,SP,FFE0 -SW S0,0014 (SP) -LUI S0,8002 -LW S0,32E8 (S0) ;S0=800232E8: p->first entry -SW S1,0018 (SP) -OR S1,A0,R0 ;S1=A0: p->name -BEQ S0,R0,70004D68 ;return NULL if no table -SW RA,001C (SP) -//70004D40: test each entry for a match -LW A0,0008 (S0) ;A0=entry+8: p->name -JAL 7000A84C ;V0= strcmp(A0,A1) -OR A1,S1,R0 ;A1=S1: p->name -BNEL V0,R0,70004D60 ;iterate if mismatch -LW S0,0000 (S0) -BEQ R0,R0,70004D6C ;return V0=p->match if found -OR V0,S0,R0 -//70004D5C: -LW S0,0000 (S0) -BNEL S0,R0,70004D44 -LW A0,0008 (S0) -OR V0,R0,R0 ;V0=NULL -//70004D6C: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -70004D80 5980 V0=p->entry of size A0 allocated in debug.notice.list; entry allocated in block 6 on failure - accepts: A0=size -LUI V0,8002 -LW V0,32F8 (V0) ;V0=800232F8: p->end of debug.notice.list's data -LUI T6,8006 -ADDIU T6,T6,0C90 ;T6=80060C90: debug.notice.max -OR V1,V0,R0 ;V1=p->debug.notice.end -ADDU V0,V0,A0 ;V0=debug.notice.end + size -ADDIU SP,SP,FFE8 -SLTU AT,T6,V0 -BEQ AT,R0,70004DC4 ;update positions if didn't hit debug.notice.max -SW RA,0014 (SP) -//70004DA8: instead, return V0= A0 bytes allocated in bank 6 -SUBU V0,V0,A0 -LUI AT,8002 -SW V0,32F8 (AT) ;do not update debug.notice.end -JAL 70009720 ;V0=p->A0 bytes of memory allocated in bank A1 -ADDIU A1,R0,0006 -BEQ R0,R0,70004DD4 -LW RA,0014 (SP) -//70004DC4: -LUI AT,8002 -SW V0,32F8 (AT) ;update debug.notice.end -OR V0,V1,R0 ;V0=V1: p->this allocated entry in table -//70004DD0: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004DE0 59E0 V0=p->new entry added in debug.notice.list - accepts: A0=p->name, A1=p->data -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -JAL 70004D80 ;V0=p->entry of size A0 allocated in debug.notice.list -ADDIU A0,R0,0010 ;A0=10 -LUI V1,8002 -ADDIU V1,V1,32E8 ;V1=800232E8: p->debug.notice.list -LW T6,0000 (V1) ;T6=debug.notice.list -SW T6,0000 (V0) ;entry+0 = p->previous entry -LW T7,001C (SP) -SW T7,0004 (V0) ;entry+4 = p->data -LW T8,0018 (SP) -SW T8,0008 (V0) ;entry+8 = p->name -LW RA,0014 (SP) -SW V0,0000 (V1) ;V0->800232E8: set new entry as start of list -ADDIU SP,SP,0018 -JR RA -NOP - -70004E2C 5A2C add debug.notice "deb_c_debug" -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -LUI A1,8003 -ADDIU A1,A1,87B0 ;A1=800287B0: "deb_c_debug" -JAL 70004E60 ;V0=p->debug.notice.list entry for name A1 and data A0 -ADDIU A0,A0,32E0 ;A0=800232E0: -JAL 70004EE0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004E60 5A60 V0=p->debug.notice.list entry for name A1 and data A0; generates if not found - accepts: A0=p->data, A1=p->name -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -JAL 70004D20 ;V0=p->match in debug.notice.list or NULL if not found -OR A0,A1,R0 ;A0=A1: p->name of debug routine -BNE V0,R0,70004E88 ;return p->match if found -//70004E7C: add entry if not found -LW A0,001C (SP) ;A0=A1 f/caller: p->name -JAL 70004DE0 ;V0=p->new entry added in debug.notice.list -LW A1,0018 (SP) ;A1=A0 f/caller: p->data -//70004E88: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004E98 5A98 scan debug.notice.list until a NULL pointer -LUI V0,8002 -LW V0,32E8 (V0) ;V0=800232E8: -BEQ V0,R0,70004EB4 ;return if zero -NOP -LW V0,0000 (V0) -//70004EAC: loop until end of linked pointer list -BNEL V0,R0,70004EAC -LW V0,0000 (V0) -//70004EB4: return -JR RA -NOP - -70004EBC 5ABC unconditional return -JR RA -NOP - -70004EC4 5AC4 (removed) - accepts: A0=, A1=, A2= -SW A0,0000 (SP) -SW A1,0004 (SP) -JR RA -SW A2,0008 (SP) - -70004EE0 5AE0 -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -JAL 700059A4 ;set pointers to video buffers 1 & 2 -NOP -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,3658 ;A1=80063658 -ADDIU A0,A0,3640 ;A0=80063640 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI T6,8006 -ADDIU T6,T6,1340 ;T6=80061340: very oddly local stack pointer -LUI A0,8006 -LUI A2,7000 -ADDIU T7,R0,0028 -SW T7,0014 (SP) ;SP+14= 28 -ADDIU A2,A2,4F54 ;A2= 70004F54 -ADDIU A0,A0,0C90 ;A0= 80060C90 -SW T6,0010 (SP) ;SP+10= 80061340: new stack pointer -ADDIU A1,R0,0005 ;A1= 5 -JAL 7000D430 ;initialize thread entry at A0 with values -OR A3,R0,R0 ;A3= 0 -LUI A0,8006 -JAL 7000D580 ;insert thread and execute if no thread currently running -ADDIU A0,A0,0C90 ;A0=80060C90 -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70004F54 5B54 -ADDIU SP,SP,FFC0 -SW S7,0030 (SP) -LUI S7,8006 -ADDIU S7,S7,3640 -SW RA,0034 (SP) -SW A0,0040 (SP) -SW S6,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW R0,003C (SP) -ADDIU A0,R0,000C ;A0=entry C -OR A1,S7,R0 ;A1=80063640: -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -ADDIU A2,R0,0010 ;A2=10 -//70004F9C: -LUI AT,8006 -LUI S6,8002 -SW R0,3660 (AT) ;0->80063660: -ADDIU S6,S6,7728 -ADDIU S5,R0,000A -LUI S4,FFC0 -LUI S3,7F00 -ADDIU S2,R0,0008 -ADDIU S1,SP,003C ;S1=SP+3C: p->buffer -//70004FC0: -OR A0,S7,R0 ;A0=80063640: -OR A1,S1,R0 ;A1=p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ADDIU A0,R0,0001 -JAL 70010180 ;V0=80027734: -OR S0,V0,R0 ;S0=V0: new diagnostic status -LUI AT,8006 -BEQ V0,R0,70004FC0 ;loop while pointer NULL -SW V0,365C (AT) ;V0->8006365C: -//70004FEC: -LW T6,0120 (V0) ;T6=thread+120: -LUI T0,8006 -ANDI T7,T6,007C -BNE S2,T7,7000505C -NOP -//70005000: must be a 7F- TLB address to load -LW T8,0124 (V0) ;T8=thread+124: -AND T9,T8,S4 ;T9= T8 & FFC00000 -BNE S3,T9,7000505C ;skip if not 7F -NOP -//70005010: load 7F- address -LW T0,365C (T0) -JAL 700019D8 ;translates and loads ROM based on TLB address -LW A0,0124 (T0) ;A0=thread+124: -LUI T1,8006 -LW T1,365C (T1) -LUI T2,8006 -LUI A1,8006 -SH S5,0010 (T1) ;A->thread+10: set index -LW T2,365C (T2) -OR A0,S6,R0 ;A0=80027728 -SH R0,0012 (T2) ;0->thread+12: -JAL 700108AC ;insert thread A1 into thread list A0 -LW A1,365C (A1) ;A1=8006365C+0: thread -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -OR A0,S0,R0 ;A0=S0: status -JAL 70010AD0 ;set priority of current thread to 2, then update, insert, and execute -NOP -BEQ R0,R0,70004FC4 -OR A0,S7,R0 ;A0=80063640: -//7000505C: -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -OR A0,S0,R0 ;A0=S0: status -//70005064: infinite loop! -BEQ R0,R0,70005064 -NOP -//7000506C: -NOP -NOP -NOP -NOP -NOP -//70005080: unused return -LW RA,0034 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -LW S6,002C (SP) -LW S7,0030 (SP) -JR RA -ADDIU SP,SP,0040 - -700050AC 5CAC V0= SP, A3=SP usage within function range (A1,A0) with initial SP A2 - accepts: A0=p->opcode.cur, A1=p->opcode.start, A2=SP w/i function, A3=p->register buffer -ADDIU SP,SP,FFF0 -SW A0,0010 (SP) -SW S1,000C (SP) -SW S0,0008 (SP) -OR V1,A2,R0 ;V1=A2: SP.actual -OR V0,R0,R0 ;V0=0 SP repositioned flag -OR T0,R0,R0 ;T0=0 SW RA flag -ADDIU A0,R0,0020 -OR T1,R0,R0 -OR T2,A3,R0 ;T2=A3: p->buffer -//700050D4: init. buffer for 20 registers -ADDIU T1,T1,0004 -SW R0,0000 (T2) -SW R0,0004 (T2) -SW R0,0008 (T2) -SW R0,000C (T2) -BNE T1,A0,700050D4 -ADDIU T2,T2,0010 -//700050F0: initialize search for stack use -LW A0,0010 (SP) ;A0= f/caller: p->opcode.cur -LUI S1,03E0 -ORI S1,S1,0008 ;S1=03E00008: opcode JR RA -SLTU AT,A0,A1 -BNE AT,R0,700051B8 ;return if p->opcode.cur < p->opcode.start -ADDIU S0,R0,001F ;S0=0x1F: RA register -LUI T5,FFE0 -LUI T4,AFA0 -LUI T3,FFFF -LUI T2,27BD -//70005118: read opcodes backward -LW T1,0000 (A0) ;T1= opcode.cur -ADDIU A0,A0,FFFC ;A0-=4 p->opcode.prev -SLTU AT,A0,A1 ;TRUE if p->opcode.cur < p->opcode.start -AND T7,T1,T3 ;T7= opcode &FFFF0000: mask away immediate -BNE T2,T7,70005158 ;skip if not of type ADDIU SP,SP,xxxx -AND T8,T1,T5 ;T8= opcode & FFE00000: mask all but target register and type -//70005130: opcode type ADDIU SP,SP,xxxx -SLL T8,T1,0x10 -SRA T9,T8,0x10 -BGTZ T9,700051B8 ;return if immediate positive (stack reset to original position) -ADDIU V0,R0,0001 ;V0=TRUE if SP repositioned -SRA T6,T9,0x2 -SLL T7,T6,0x2 ;T7=immediate to word boundry -BEQ T0,R0,700051B0 ;check position if SW RA wasn't found yet -SUBU V1,V1,T7 ;V1-=T7: correct SP.fake -BEQ R0,R0,700051B8 ;set appropriate return value -NOP -//70005158: set expected SP address for register in buffer -BNE T4,T8,700051A8 ;skip if not of type SW rr,xxxx (SP) -SRL A2,T1,0x10 -ANDI T9,A2,001F ;T9= opcode & 001F0000: source register saved -SLL T7,T1,0x10 -SRA T8,T7,0x10 -OR A2,T9,R0 ;A2= register saved -SRA T9,T8,0x2 -SLL T6,T9,0x2 ;T6= immediate to word boundry -SLL T8,A2,0x2 -ADDU T9,A3,T8 ;T9= buffer+offset: entry for register -ADDU T7,T6,V1 ;T7= imm.+SP.fake: address in stack for value -BNE S0,A2,70005190 ;if RA, set T0=TRUE -SW T7,0000 (T9) ;set expected SP address to entry in buffer -ADDIU T0,R0,0001 ;T0=TRUE if SW RA -//70005190: continue reading ops until SP repositioned and return address stored -BEQ V0,R0,700051B0 ;check position if SP wasn't repositioned -NOP -BEQ T0,R0,700051B0 ;check position if SW RA wasn't found yet -NOP -BEQ R0,R0,700051B8 ;set appropriate return value -NOP -//700051A8: test at end of function -BEQ T1,S1,700051B8 ;set appropriate return if JR RA (absolute end of function) -NOP -//700051B0: loop until at start of function -BEQL AT,R0,7000511C ;loop until p->opcode.cur < p->opcode.start -LW T1,0000 (A0) -//700051B8: return corrected SP.fake if stack used in function -BEQ V0,R0,700051D0 ;return NULL if SP wasn't repositioned -LW S0,0008 (SP) -BEQL T0,R0,700051D4 ;return NULL if SW RA wasn't found -OR V0,R0,R0 -BEQ R0,R0,700051D4 ;return SP.fake as set in function -OR V0,V1,R0 ;V0=V1: corrected SP.fake -//700051D0: return NULL -OR V0,R0,R0 -//700051D4: -LW S1,000C (SP) -JR RA -ADDIU SP,SP,0010 - -700051E0 5DE0 V0=TRUE if opcode that set RA A0 was a JAL or JALR type within bounds (70000450,70020D90) - accepts: A0=p->70-mapped TLB function, presumably from RA -ANDI T6,A0,0003 -BNE T6,R0,7000524C ;return FALSE if unaligned address -LUI T7,7000 -ADDIU T7,T7,0450 -SLTU AT,A0,T7 -BNE AT,R0,7000524C ;return FALSE if prior to 70000450 -LUI T8,7002 -ADDIU T8,T8,0D90 -SLTU AT,T8,A0 -BNEL AT,R0,70005250 ;return FALSE if after 70020D90 -OR V0,R0,R0 -LW V0,FFF8 (A0) ;V0= previous opcode -LUI AT,FC00 -ORI AT,AT,003C -AND T9,V0,AT ;T9=opcode & FC00003C: opcode type mask -ADDIU AT,R0,0009 -BNEL T9,AT,70005234 ;return TRUE if opcode type JALR -LUI AT,FC00 -JR RA -ADDIU V0,R0,0001 -//70005230: test for opcode type JAL -LUI AT,FC00 -AND T0,V0,AT -LUI AT,0C00 -BNEL T0,AT,70005250 ;return TRUE if opcode type JAL -OR V0,R0,R0 -JR RA -ADDIU V0,R0,0001 -//7000524C: return FALSE -OR V0,R0,R0 -JR RA -NOP - -70005258 5E58 V0= strlen(A0) - accepts: A0=p->string -LBU V0,0000 (A0) ;V0=A0+0: next byte in string -OR V1,R0,R0 ;V1=0 init. count -ADDIU A0,A0,0001 -BEQ V0,R0,7000528C ;return if NULL -NOP -//7000526C: -ADDIU V1,V1,0001 ;V1+=1 count+=1 -SLTI AT,V1,0100 -BEQ AT,R0,7000528C ;return if over 0x100 bytes -NOP -LBU V0,0000 (A0) -ADDIU A0,A0,0001 -BNEL V0,R0,70005270 ;loop until NULL terminator found -ADDIU V1,V1,0001 -//7000528C: return count -JR RA -OR V0,V1,R0 - -70005294 5E94 V0= address for subsequent data after one word, two strings at hardware A0 - accepts: A0=hardware address -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -SW RA,0014 (SP) -LUI A0,8006 -ADDIU A0,A0,3670 ;A0=80063670: p->target -LW A1,0020 (SP) ;A1=A0 f/caller: hardware address -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -ADDIU A2,R0,0060 ;A2=60 bytes -LUI T6,8006 -LW T6,3670 (T6) ;T6=80063670: -LUI V0,8006 -LUI AT,8006 -LUI T7,8006 -ADDIU V0,V0,3668 -ADDIU A0,T7,3674 ;A0=80063674: p->string -SW T6,3664 (AT) ;T6->80063664: -JAL 70005258 ;V0= strlen(A0) -SW A0,0000 (V0) ;80063674 -> 80063668: p->string1 -LUI A0,8006 -LW A0,3668 (A0) ;A0=p->string1 -LUI AT,8006 -ADDU T8,V0,A0 -ADDIU T9,T8,0001 ;T9=p->string+strlen+NULL terminator: p->string2 -JAL 70005258 ;V0= strlen(A0) -SW T9,366C (AT) ;p->string2 -> 8006366C -LUI A0,8006 -LW A0,366C (A0) ;A0=p->string2 -JAL 70005258 ;V0= strlen(A0) -SW V0,0018 (SP) ;SP+18= strlen1 -LW T0,0020 (SP) ;T0= A0 f/caller: hardware address -LW T2,0018 (SP) ;T2= strlen1 -LW RA,0014 (SP) -ADDU T1,V0,T0 -ADDU V1,T1,T2 -ADDIU V1,V1,0006 ;V1= hardware address + strlen2+NULL + strlen1+NULL + sizeof(word) -ANDI T3,V1,0003 -BEQ T3,R0,70005334 ;skip if word aligned -OR A0,V1,R0 -ORI A0,V1,0003 -ADDIU A0,A0,0001 ;word align -//70005334: return address for subsequent data -OR V0,A0,R0 ;V0=A0: address for subsequent data -JR RA -ADDIU SP,SP,0020 - -70005340 5F40 scan for and load resourceID A0 from indy.read.buf - accepts: A0=resourceID -ADDIU SP,SP,FFD8 -SW S3,0020 (SP) -SW S2,001C (SP) -LUI V0,00E0 -ORI S3,V0,0004 ;S3=E00004: hardware address in indy.read.buf -SW S1,0018 (SP) -SW S0,0014 (SP) -LUI S2,8006 -OR S1,A0,R0 ;S1=A0: resourceID -SW RA,0024 (SP) -OR S0,S3,R0 ;S0=S3: hardware address in indy.read.buf -ADDIU S2,S2,3664 ;S2=80063664 -//70005370: scan for resourceID matching or greater than expected -JAL 70005294 ;V0= address for subsequent data after one word, two strings at hardware A0 -OR A0,S0,R0 ;A0=S0: hardware address in indy.read.buf -LW V1,0000 (S2) ;V1= 80063664: indy.read.buf.resourceID -SLTU AT,S1,V1 -BNE AT,R0,700053A0 -NOP -BNE V1,R0,70005398 ;return FALSE if last entry -OR S3,S0,R0 ;S3=S0: current hardware address -BEQ R0,R0,700053AC -OR V0,R0,R0 -//70005398: loop for remaining entries -BEQ R0,R0,70005370 -OR S0,V0,R0 ;S0=V0: next hardware address -//700053A0: return TRUE -JAL 70005294 ;V0= address for subsequent data after one word, two strings at hardware A0 -OR A0,S3,R0 ;A0=S3: hardware address -ADDIU V0,R0,0001 -//700053AC: -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -700053C8 5FC8 V0= TRUE if valid indy.read.buf.resourceID [matches 826475BE] -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70005294 ;V0= address for subsequent data after one word, two strings at hardware A0 -LUI A0,00E0 ;A0=E00000 -LUI V0,8006 -LW V0,3664 (V0) ;V0=80063664: p->indy.read.buf.resourceID -LW RA,0014 (SP) -LUI AT,8264 -ORI AT,AT,75BE ;AT=826475BE -XOR T6,V0,AT -SLTIU V0,T6,0001 ;V0= TRUE if value = 826475BE -JR RA -ADDIU SP,SP,0018 - -700053FC 5FFC unconditional return -JR RA -NOP - -70005404 6004 unconditional return -JR RA -NOP - -7000540C 600C unconditional return -JR RA -NOP - -70005414 6014 V0=indy.read.buf.resourceID -LUI V0,8006 -JR RA -LW V0,3664 (V0) ;V0=80063664: indy.read.buf.resourceID - -70005420 6020 V0=hardcoded SP for debug thread A1, corrected for address range A0 - accepts: A0=p->address space, A1=entry# -LUI T6,8002 -ADDIU T6,T6,36DC -LW AT,0000 (T6) ;AT=800236DC: hardcoded pointers to thread SP allocations -ADDIU SP,SP,FFD0 -ADDIU A3,SP,001C ;A3=SP+1C: p->buffer.hi -SW AT,0000 (A3) -LW T9,0004 (T6) -LUI T1,8002 -ADDIU T1,T1,36F0 ;T1=800236F0: hardcoded pointers to thread SP allocations -SW T9,0004 (A3) -LW AT,0008 (T6) -ADDIU T0,SP,0008 ;T0=SP+8: p->buffer.lo -OR A2,A0,R0 ;A2=A0: -SW AT,0008 (A3) -LW T9,000C (T6) -SW T9,000C (A3) -LW AT,0010 (T6) -SW AT,0010 (A3) ;800236DC-800236EC -> SP+1C-SP+2C -LW AT,0000 (T1) -SW AT,0000 (T0) -LW T4,0004 (T1) -SW T4,0004 (T0) -LW AT,0008 (T1) -SW AT,0008 (T0) -LW T4,000C (T1) -SW T4,000C (T0) -LW AT,0010 (T1) -BLEZ A1,700054A0 ;return NULL if A1 an invalid entry -SW AT,0010 (T0) ;800236F0-80023700 -> SP+8-SP+18 -SLTIU AT,A1,0006 -BNE AT,R0,700054A8 -SLL V0,A1,0x2 ;V0=A1->offset -//700054A0: return NULL -BEQ R0,R0,700054DC -OR V0,R0,R0 -//700054A8: -LUI AT,8000 -ADDU T5,A3,V0 -ADDU T8,T0,V0 -SLTU AT,A2,AT -LW V1,0000 (T5) ;V1=buffer.hi[entry] -BNE AT,R0,700054CC ;skip if address < 80000000 -LW A0,0000 (T8) ;A0=buffer.lo[entry] -BEQ R0,R0,700054DC -OR V0,A0,R0 ;V0=lo buffer entry -//700054CC: convert SP to 70- address -LUI AT,F000 -AND T7,A2,AT ;T7= A0's address domain -SUBU T6,A0,V1 ;T6=buffer.lo[entry] - buffer.hi[entry] -OR V0,T7,T6 ;V0=converted address -//700054DC: return -JR RA -ADDIU SP,SP,0030 - -700054E4 60E4 - accepts: A0=p->address space, A1=entry# -LUI T6,8002 -ADDIU T6,T6,3704 -LW AT,0000 (T6) ;AT=80023704: debugger: hardcoded pointers to thread SP allocations -ADDIU SP,SP,FFE8 -ADDIU V0,SP,0004 ;V0=SP+4: p->buffer -SW AT,0000 (V0) -LW T9,0004 (T6) -SW T9,0004 (V0) -LW AT,0008 (T6) -SW AT,0008 (V0) -LW T9,000C (T6) -SW T9,000C (V0) -LW AT,0010 (T6) -BLEZ A1,7000552C ;return NULL if A1 an invalid entry -SW AT,0010 (V0) ;80023704-80023714 -> SP+4-SP+14 -SLTIU AT,A1,0006 -BNE AT,R0,70005534 -SLL T0,A1,0x2 ;T0=A1 -> offset -//7000552C: return NULL -BEQ R0,R0,70005558 -OR V0,R0,R0 -//70005534: return hardcoded SP -LUI AT,8000 -ADDU T1,V0,T0 -SLTU AT,A0,AT -BNE AT,R0,70005550 ;skip if address < 80000000 -LW V1,0000 (T1) ;V1=buffer+offset: SP -BEQ R0,R0,70005558 -OR V0,V1,R0 ;V0=hardcoded SP -//70005550: return root address space (bug?) -LUI AT,F000 -AND V0,A0,AT ;V0=A0 & F0000000 -//70005558: return -JR RA -ADDIU SP,SP,0018 - -70005560 6160 V0= TRUE if F12 a normal single precision float - accepts: F12=single float value -SWC1 F12,0000 (SP) -LW A0,0000 (SP) ;A0= (hex) float -LUI AT,007F -ORI AT,AT,FFFF -AND V0,A0,AT ;V0= float & 0x7FFFFF: significand -SLTIU T6,V0,0001 -BNE T6,R0,7000559C ;return FALSE if no significand -OR V0,T6,R0 -SRL V1,A0,0x17 -ANDI T7,V1,00FF ;T7= float & 7F800000: exponent -SLTU V0,R0,T7 -BEQ V0,R0,7000559C ;return FALSE if no exponent -NOP -XORI V0,T7,00FF -SLTU V0,R0,V0 ;return TRUE if not infinite -//7000559C: return -JR RA -NOP - -700055A4 61A4 V0= TRUE if (A0,A1) a normal single precision float; would have set result as short at A0 - accepts: A0=(unused) p->target, A1=single-precision float -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -MTC1 A1,F12 -JAL 70005560 ;V0= TRUE if F12 a normal single precision float -SW A0,0018 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700055C8 61C8 removed: set normality of single-precision floats A1, A2, A3, SP+10 in table at A0 - accepts: A0=(unused) p->target, A1=single-precision float 1, A2=single-precision float 2, A3=single-precision float 3, SP+10=single-precision float 4 -MTC1 A1,F12 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -MFC1 A1,F12 -SW A0,0018 (SP) -SW A2,0020 (SP) -JAL 700055A4 ;V0= TRUE if (A0,A1) a normal single precision float -SW A3,0024 (SP) -LW A0,0018 (SP) -LW A1,0020 (SP) ;A1= A2: single-precision float -JAL 700055A4 ;V0= TRUE if (A0,A1) a normal single precision float -ADDIU A0,A0,0002 ;A0+=2 -LW A0,0018 (SP) -LW A1,0024 (SP) ;A1= A3: single-precision float -JAL 700055A4 ;V0= TRUE if (A0,A1) a normal single precision float -ADDIU A0,A0,0004 ;A0+=4 -LW A0,0018 (SP) -LW A1,0028 (SP) ;A1= SP+10: single-precision float -JAL 700055A4 ;V0= TRUE if (A0,A1) a normal single precision float -ADDIU A0,A0,0006 ;A0+=6 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70005628 6228 unconditional return -JR RA -NOP - -# stderr manager -70005630 6230 write char A2 to (A0,A1) in stderr - accepts: A0=xpos, A1=ypos, A2=char -ANDI T6,A2,00FF -SW A2,0008 (SP) -ADDIU AT,R0,0009 -OR A2,T6,R0 -BEQ T6,AT,70005654 ;branch if tab -OR V0,T6,R0 -ADDIU AT,R0,000A -BNE T6,AT,7000565C ;branch if not line feed -NOP -//70005654: change tab and linefeed into NULL -OR A2,R0,R0 ;A2=NULL -OR V0,R0,R0 ;V0=NULL -//7000565C: -BLEZ V0,70005668 -SLTI AT,V0,0020 -BNE AT,R0,70005674 -//70005668: check if ASCII -SLTI AT,V0,007F -BNE AT,R0,70005678 ;branch if in ASCII range (<7F) -NOP -//70005674: -ADDIU A2,R0,003F ;A2= b'?' -//70005678: verify xpos -BLTZ A0,700056B4 ;return if invalid xpos -SLTI AT,A0,0048 -BEQ AT,R0,700056B4 ;return if over 47 -NOP -//70005688: verify ypos -BLTZ A1,700056B4 ;return if invalid ypos -SLTI AT,A1,0020 -BEQ AT,R0,700056B4 ;return if over 1F lines -SLL T7,A1,0x3 -//70005698: write to stderr buffer -ADDU T7,T7,A1 -SLL T7,T7,0x3 -SUBU T7,T7,A1 ;T7=ypos * 47: line offset -ADDU T8,T7,A0 ;T8= yoffset + xoffset -LUI AT,8002 -ADDU AT,AT,T8 -SB A2,3718 (AT) ;A2->80023718+offset: print char to stderr buffer -//700056B4: return -JR RA -NOP - -700056BC 62BC write char A0 to stderr - accepts: A0=char -ADDIU SP,SP,FFD8 -ANDI A2,A0,00FF ;A2=char -SW RA,001C (SP) -SW S0,0018 (SP) -SW A0,0028 (SP) -BEQ A2,R0,700057B8 ;return if NULL -OR V0,A2,R0 -ADDIU AT,R0,0009 -BNE A2,AT,70005708 ;branch if not tab -LUI S0,8002 -ADDIU S0,S0,3FF8 ;S0=80023FF8: stderr.curxpos -//700056E8: for tabs, reenter and type a space until at a 8byte boundry -JAL 700056BC ;write char A0 to stderr -ADDIU A0,R0,0020 ;A0=b' ' -LW T6,0000 (S0) ;T6=80023FF8: stderr.curxpos -ANDI T7,T6,0007 -BNE T7,R0,700056E8 ;loop until at an 8byte boundry -NOP -BEQ R0,R0,700057BC ;return -LW RA,001C (SP) -//70005708: test if linefeed (really treated as a carriage return -ADDIU AT,R0,000A -BNE V0,AT,70005730 ;branch if not line feed -//70005710: jump a line on a linefeed -LUI V1,8002 -ADDIU V1,V1,3FFC -LW T8,0000 (V1) ;T8=80023FFC: stderr.curypos -LUI S0,8002 -ADDIU S0,S0,3FF8 -ADDIU T9,T8,0001 -SW T9,0000 (V1) ;advance stderr.curypos -SW R0,0000 (S0) ;0->stderr.curxpos: reset to beginning of line -//70005730: all other printable characters -LUI V1,8002 -ADDIU V1,V1,3FFC -LW A1,0000 (V1) ;A1=80023FFC: stderr.curypos -LUI S0,8002 -ADDIU S0,S0,3FF8 -SLTI AT,A1,001F -BNE AT,R0,70005774 ;branch if ypos valid -ADDIU A0,A1,FFE2 ;A0=ypos-1E -//70005750: if no room, scroll screen down one line -SW V0,0024 (SP) -JAL 700057CC ;scroll stderr down one line -SB A2,002B (SP) -LUI V1,8002 -ADDIU V1,V1,3FFC -ADDIU T0,R0,001E -LW V0,0024 (SP) -LBU A2,002B (SP) ;A2=char -SW T0,0000 (V1) ;1E->stderr.curypos -//70005774: print non-linefeed chars -ADDIU AT,R0,000A -BEQL V0,AT,700057BC ;return if line feed -LW RA,001C (SP) -LW A0,0000 (S0) ;A0=S0+0: xpos -JAL 70005630 ;write char A2 to (A0,A1) in stderr -LW A1,0000 (V1) ;A1=V1+0: ypos -LW T1,0000 (S0) -LUI V1,8002 -ADDIU V1,V1,3FFC -ADDIU T2,T1,0001 -SLTI AT,T2,0047 -BNE AT,R0,700057B8 ;return if more chars left in line -SW T2,0000 (S0) -//700057A8: advance to beginning of next line if necessary -LW T4,0000 (V1) ;T4=stderr.curypos -SW R0,0000 (S0) ;0->stderr.curxpos -ADDIU T5,T4,0001 -SW T5,0000 (V1) ;stderr.curypos +=1 -//700057B8: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -700057CC 63CC scroll stderr down one line - accepts: A0=ypos -SLT V0,R0,A0 -BEQ V0,R0,70005854 ;return if 0 or negative -ADDIU A0,A0,FFFF ;ypos-=1 -//700057D8: -LUI T0,8002 -ADDIU T0,T0,3FB1 ;T0=80023FB1: start of line 1F -ADDIU A3,R0,0047 ;A3=47 line width -//700057E4: -LUI T6,8002 -ADDIU A2,T6,3718 ;A2=80023718: stderr.buf.start -OR V1,A2,R0 ;V1=A2 -//700057F0: copy next line to current, advancing screen down one -LBU T7,0047 (A2) -LBU T8,0048 (A2) -LBU T9,0049 (A2) -ADDIU V0,R0,0003 -ADDIU A1,V1,0003 -SB T7,0000 (A2) -SB T8,0001 (A2) -SB T9,0002 (A2) -//70005810: more copying -LBU T2,0048 (A1) -LBU T3,0049 (A1) -LBU T4,004A (A1) -LBU T1,0047 (A1) -ADDIU V0,V0,0004 -ADDIU A1,A1,0004 -SB T2,FFFD (A1) -SB T3,FFFE (A1) -SB T4,FFFF (A1) -BNE V0,A3,70005810 -SB T1,FFFC (A1) -//7000583C: loop for each column in row -ADDIU A2,A2,0047 -BNE A2,T0,700057F0 -ADDIU V1,V1,0047 -//70005848: loop for each line in buffer -SLT V0,R0,A0 -BNE V0,R0,700057E4 -ADDIU A0,A0,FFFF -//70005854: return -JR RA -NOP - -7000585C 645C print char A2 to stderr screen position (A0,A1) in video buffer 1 - accepts: A0=xpos, A1=ypos, A2=char -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -JAL 7000441C ;V0= video2.txtClipW -SW A2,0020 (SP) -LBU A1,0023 (SP) ;A1=A2 f/caller: char -BNEL A1,R0,70005888 ;branch if set -SLTI AT,A1,0020 -//70005880: space by default -ADDIU A1,R0,0020 ;A1=20 -//70005884: -SLTI AT,A1,0020 -BNE AT,R0,70005974 ;return if A1<20: unprintable control char -SLTI AT,A1,007F -BEQ AT,R0,70005974 ;return if A1>=7F: not an ASCII supported char -//70005894: -LW T6,0018 (SP) ;T6=A0 f/caller: xpos -LW T3,001C (SP) ;T3=A1 f/caller: ypos -LUI T8,8002 -LW T8,417C (T8) ;T8=8002417C: video buffer 1 base [A03B5000] -MULTU T3,V0 -SLL T7,T6,0x1 ;T7=xpos -> pixel offset: offset.column -SLL T6,A1,0x2 ;T6=char->offset -LUI A0,8002 -ADDU A0,A0,T6 -ADDU T9,T7,T8 ;T9=video.buf + offset.column -LW A0,3F80 (A0) ;A0=80023F80+offset: char bitcode -LUI A1,8000 ;A1=80000000: mask for upper bit of bitcode -OR T0,R0,R0 ;T0=0 bit count -SLL T1,V0,0x1 -MFLO T4 ;T4= text clip width * ypos: per-row offset -SLL T5,T4,0x1 ;T5= ypos.mod -> pixel offset: offset.row -ADDU V1,T9,T5 ;V1=video.buf + offset.column + offset.row -ADDIU T2,R0,0007 ;T2= 7 bits -ADDIU A3,R0,0001 -ORI A2,R0,FFFF -//700058E4: grab each bit of bitcode in the nibble -AND T7,A0,A1 ;T7=upper bit of bitcode -BEQ T7,R0,700058F8 ;if not set, write a black pixel -SLL T8,A0,0x1 ;T8=bitcode<<1: next bit -BEQ R0,R0,700058FC -SH A2,0000 (V1) ;FFFF->video.buf: white pixel -//700058F8: -SH A3,0000 (V1) ;0001->video.buf: black pixel -//700058FC: next bit -AND T3,T8,A1 ;T3=upper bit of bitcode -ADDIU V1,V1,0002 ;V1+=2: next pixel -BEQ T3,R0,70005914 -OR A0,T8,R0 -BEQ R0,R0,70005918 -SH A2,0000 (V1) ;FFFF->video.buf: white pixel -//70005914: -SH A3,0000 (V1) ;0001->video.buf: black pixel -//70005918: next bit -SLL T4,A0,0x1 -AND T9,T4,A1 ;T9=upper bit of bitcode -OR A0,T4,R0 -BEQ T9,R0,70005934 ;if not set, write a black pixel -ADDIU V1,V1,0002 ;V1+=2: next pixel -BEQ R0,R0,70005938 -SH A2,0000 (V1) ;FFFF->video.buf: white pixel -//70005934: -SH A3,0000 (V1) ;0001->video.buf: black pixel -//70005938: -SLL T5,A0,0x1 -AND T6,T5,A1 ;T6=upper bit of bitcode -OR A0,T5,R0 -BEQ T6,R0,70005954 ;if not set, write a black pixel -ADDIU V1,V1,0002 ;V1+=2: next pixel -BEQ R0,R0,70005958 -SH A2,0000 (V1) ;FFFF->video.buf: white pixel -//70005954: -SH A3,0000 (V1) ;0001->video.buf: black pixel -//70005958: loop for each nibble -ADDIU V1,V1,0002 -ADDIU T0,T0,0001 ;T0+=1 bitcount+=1 -SLL T7,A0,0x1 -ADDU V1,V1,T1 -OR A0,T7,R0 ;A0<<=4 -BNE T0,T2,700058E4 ;loop for each nibble in word -ADDIU V1,V1,FFF8 -//70005974: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70005984 6584 set pointers to video buffers 1 & 2 to A0 and A1, respectively - accepts: A0=p->video buffer 1, A1=p->video buffer 2 -LUI V0,A000 -OR T6,A0,V0 ;T6=A0000000 | A0: uncached address -LUI AT,8002 -SW T6,417C (AT) ;A0->8002417C: video buffer 1 base -LUI AT,8002 -OR T7,A1,V0 ;T7=A0000000 | A1: uncached address -JR RA -SW T7,4180 (AT) ;A1->80024180: video buffer 2 base - -700059A4 65A4 set pointers to video buffers 1 & 2 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,803B -LUI A1,803E -ADDIU A1,A1,A800 ;A1=803DA800 -JAL 70005984 ;set pointers to video buffers 1 & 2 to A0 and A1, respectively -ADDIU A0,A0,5000 ;A0=803B5000 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700059D0 65D0 write stderr to video buffer A0 - accepts: A0=p->video buffer -ADDIU SP,SP,FFC0 -SW RA,003C (SP) -SW S0,0018 (SP) -OR S0,A0,R0 ;S0=A0: p->video.buf -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -JAL 700059A4 ;set pointers to video buffers 1 & 2 -SW S1,001C (SP) -LUI AT,A000 -OR T6,S0,AT ;T6= A0000000 | A0 f/caller -LUI AT,8002 -JAL 7000441C ;V0= video2.txtClipW -SW T6,417C (AT) ;T6->8002417C: set video buffer 1 base -ADDIU S0,V0,FFF3 ;S0=clip width - D -BGEZ S0,70005A2C -SRA T7,S0,0x2 -//70005A24: -ADDIU AT,S0,0003 -SRA T7,AT,0x2 -//70005A2C: -JAL 7000442C ;V0= video2.txtClipH -OR S0,T7,R0 ;S0=x.margin -ADDIU V1,V0,FFF6 ;V1=clip height - A -ADDIU AT,R0,0007 -DIV V1,AT -MFLO V1 ;V1/=7 -ADDIU S8,V1,FFFF ;S8= max #rows -BLEZ S8,70005AD8 ;return if off-screen -OR S5,R0,R0 ;S5=0 #rows -ADDIU S6,S0,FFFB -ADDIU S7,R0,001F ;S7=1F: #rows (top to bottom) -ADDIU S4,R0,0130 ;S4=130: #columns (left to right) -//70005A5C: -BLEZ S6,70005AC0 ;x.margin should be on-screen -SLL S0,R0,0x2 -SLL T9,S5,0x3 -ADDU T9,T9,S5 -SLL T9,T9,0x3 ;T9=count*48 -SLL S2,S5,0x3 -LUI T1,8002 -ADDIU T1,T1,3718 ;T1=80023718: black background layer for debug menu (until 80024000) -SUBU S2,S2,S5 ;S2=count*7 -SUBU T9,T9,S5 ;T9= count*48 - count*7 -SLL S3,S6,0x2 -ADDIU S3,S3,0014 ;S3+=14: x.margin * 4 + 14: xpos.max -ADDU S1,T9,T1 ;S1=base + offset -ADDIU S2,S2,0007 -ADDIU S0,S0,0014 ;S0+=14: xpos.init -//70005A98: write each char for row -OR A0,S0,R0 ;A0=S0: xpos -OR A1,S2,R0 ;A1=S2: ypos -JAL 7000585C ;directly write debug char A2 to screen position (A0,A1) -LBU A2,0000 (S1) ;A2=byte from buffer -ADDIU S0,S0,0004 ;S0+=4 each byte represents one block -SLT AT,S0,S3 -BEQ AT,R0,70005AC0 ;newline if at max chars -ADDIU S1,S1,0001 -BNEL S0,S4,70005A9C ;newline if at 130 chars -OR A0,S0,R0 -//70005AC0: test if enough rows written -ADDIU S5,S5,0001 ;S5+=1 #rows+=1 -SLT AT,S5,S8 -BEQL AT,R0,70005ADC ;return if at max rows -LW RA,003C (SP) -BNE S5,S7,70005A5C ;loop if not at 1F rows -NOP -//70005AD8: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0040 - -70005B10 6710 V0=value of RA previously saved to the stack or -1 if impossible to retrieve - Searches backward from caller for last instance of RA saved to stack. -OR A0,RA,R0 ;A0=RA: p->caller -ADDIU V0,R0,FFFF ;V0= -1 -//70005B18: -LW T0,0000 (A0) ;T0=A0+0: opcode at address -ADDIU T2,R0,27BD -SRL T1,T0,0x10 -BEQ T1,T2,70005B50 ;return if opcode in form: ADDIU SP,SP,xxxx -NOP -ORI T2,R0,AFBF -BEQL T1,T2,70005B44 ;branch if opcode in form: SW RA,xxxx (SP) -SLL T2,T0,0x10 -J 70005B18 -ADDIU A0,A0,FFFC ;A0-=4: previous opcode -//70005B40: -SLL T2,T0,0x10 -SRA T2,T2,0x10 ;T2= opcode & 0x0000FFFF -ADD T2,T2,SP ;T2+=SP: p->SP+offset -LW V0,0000 (T2) ;V0= value of RA previously saved to the stack -//70005B50: return -JR RA -NOP - -70005B60 6760 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,36E8 ;A1=800636E8 -ADDIU A0,A0,36F0 ;A0=800636F0 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70005B90 6790 read A2 bytes from hardware A1 to rdram A0 - accepts: A0=p->rdram target, A1=hardware address, A2=size -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW A1,002C (SP) -SW A0,0028 (SP) -SW A2,0030 (SP) -JAL 70010B20 ;cache A1 bytes at A0 prior to hardware read request -OR A1,A2,R0 ;A1=A2: size -LW T6,0028 (SP) -LW T7,0030 (SP) -LUI T8,8006 -ADDIU T8,T8,36F0 ;T8=800636F0 -LUI A0,8006 -ADDIU A0,A0,36D0 ;A0=800636D0 -SW T8,0018 (SP) -OR A1,R0,R0 ;A1=0 -OR A2,R0,R0 ;A2=0: read -LW A3,002C (SP) ;A3=A1 f/caller: hardware address -SW T6,0010 (SP) ;SP+10=A0 f/caller: p->target -JAL 7000F6A0 ;read or write (A2) SP+14 bytes between hardware A3 and rdram SP+10 -SW T7,0014 (SP) ;SP+14=A2 f/caller: size -LW RA,0024 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70005BF0 67F0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8006 -ADDIU A0,A0,36F0 ;A0=800636F0 -OR A1,R0,R0 ;A1=0: NULL -JAL 7000DDD0 -ADDIU A2,R0,0001 ;A2=1 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70005C1C 681C loads A2 bytes from hardware A1 to rdram A0; redirects to 70005B90 and 70005BF0 - accepts: A0=p->rdram target, A1=hardware address, A2=size -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70005B90 ;read A2 bytes from hardware A1 to rdram A0 -NOP -JAL 70005BF0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70005C44 6844 V0=p->data at target A0 from hardware A1 of size A2 - accepts: A0=p->target, A1=hardware address, A2=size -OR A3,A1,R0 -ADDIU SP,SP,FFD0 -ORI A1,A1,0001 -XORI T8,A1,0001 ;T8=hardware address, aligned to short -SW A0,0030 (SP) -SW A2,0038 (SP) -SUBU V1,A3,T8 ;V1=difference between actual hardware and aligned address -ADDU A2,V1,A2 ;A2+=V1: -ADDIU A0,A0,000F -ORI T6,A0,000F -ADDIU A2,A2,000F -SW RA,0014 (SP) -ORI T0,A2,000F -XORI A0,T6,000F ;A0=p->target, aligned to quadword -SW A0,001C (SP) -XORI A2,T0,000F ;A2=size, aligned to quadword -SW V1,0018 (SP) -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -OR A1,T8,R0 -LW RA,0014 (SP) -LW V1,0018 (SP) -LW A0,001C (SP) -ADDIU SP,SP,0030 -JR RA -ADDU V0,A0,V1 ;V0=A0+V1: p->ROM data at target, corrected for alignment - -70005CA8 68A8 write A2 bytes from rdram A0 to hardware A1 - accepts: A0=p->source, A1=hardware address, A2=size -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW A1,002C (SP) ;SP+2C= A1: hardware address -SW A0,0028 (SP) ;SP+28= A0: p->target -SW A2,0030 (SP) ;SP+30= A2: size -JAL 70010BD0 ;cache A1 bytes at A0 prior to hardware write request -OR A1,A2,R0 ;A1=A2: size -LW T6,0028 (SP) -LW T7,0030 (SP) -LUI T8,8006 -ADDIU T8,T8,36F0 -LUI A0,8006 -ADDIU A0,A0,36D0 ;A0= 800636D0: -SW T8,0018 (SP) ;SP+18= 800636F0: -OR A1,R0,R0 -ADDIU A2,R0,0001 ;A2=1: write -LW A3,002C (SP) ;A3= A1 f/caller: hardware address -SW T6,0010 (SP) ;SP+10= A0 f/caller: p->target -JAL 7000F6A0 ;read or write (A2) SP+14 bytes between hardware A3 and rdram SP+10 -SW T7,0014 (SP) ;SP+14= A2 f/caller: size -LW RA,0024 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70005D08 6908 loads A2 bytes from rdram A0 to hardware A1; redirects to 70005CA8 and 70005BF0 - accepts: A0=p->rdram source, A1=hardware address, A2=size -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70005CA8 ;write A2 bytes from rdram A0 to hardware A1 -NOP -JAL 70005BF0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -# -70005D30 6930 -ADDIU SP,SP,FF60 -SW RA,0034 (SP) -SW S2,0030 (SP) -SW S1,002C (SP) -JAL 70004E2C ;add debug.notice "deb_c_debug" -SW S0,0028 (SP) -JAL 70005B60 -NOP -JAL 700017E0 ;establishes 7F- TLB buffer and management table -NOP -JAL 7F000BD0 -NOP -JAL 70009380 ;V0=p->debug.notice.list entry for memp_c_debug -NOP -JAL 70009D6C ;V0=p->debug.notice.list entry for mema_c_debug -NOP -JAL 7F0B37C0 ;generate debug.notice.list entry for bg_c_debug using data at 800413F0 -NOP -JAL 7000AD38 ;vi_c_debug: initialize screen(?) -NOP -JAL 70003060 -NOP -JAL 7F0CFF30 ;initializes Indy if not ready -NOP -JAL 7000CEA8 ;V0= 1; would have returned 0 if debug console present -NOP -LUI AT,8002 -JAL 7F0BCC28 ;generate resource data filesize entries -SW V0,41A4 (AT) ;V0->800241A4: debug flag -JAL 7F0CFDB0 ;generate debug.notice.list entry for rsp_c_debug using data at 8004E9E0 -NOP -JAL 7F0BD460 ;generate debug.notice.list entry for dyn_c_debug using current mgfx allocations -NOP -JAL 7000B560 ;joy_c_debug: initialize joystick manager -NOP -ADDIU S1,SP,0060 -ADDIU S2,SP,009C -OR A1,S2,R0 -OR A0,S1,R0 -JAL 7000D6D0 -ADDIU A2,R0,0001 -OR S0,R0,R0 -//70005DD8: -LUI A1,0001 -LUI A2,8002 -LUI A3,8002 -LW A3,6984 (A3) -LW A2,6980 (A2) ;A2,A3 = 80026980: -ORI A1,A1,86A0 ;A0,A1= 186A0 -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -ADDIU A0,R0,0000 -LUI A3,000F -ORI A3,A3,4240 ;A2,A3 = F4240 -OR A0,V0,R0 -OR A1,V1,R0 -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -ADDIU A2,R0,0000 -ADDIU T6,R0,0000 -ADDIU T7,R0,0000 -SW T7,0014 (SP) -SW T6,0010 (SP) -ADDIU A0,SP,0078 -OR A2,V0,R0 -OR A3,V1,R0 -SW S1,0018 (SP) -JAL 70010C50 -SW S2,001C (SP) -OR A0,S1,R0 ;A1=S1: p->??? -OR A1,S2,R0 ;A1=p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -ADDIU AT,R0,0001 -BNEL S0,AT,70005E68 -SLTI AT,S0,0002 -//70005E54: -JAL 7000B6AC -NOP -BEQ R0,R0,70005E7C -ADDIU S0,S0,0001 -//70005E64: -SLTI AT,S0,0002 -BNEL AT,R0,70005E7C -ADDIU S0,S0,0001 -JAL 7000BD0C ;redirect to ramrom handlers if set -NOP -//70005E78: -ADDIU S0,S0,0001 -ADDIU AT,R0,0004 -BNEL S0,AT,70005DDC -LUI A1,0001 -//70005E88: -LUI A1,8003 -ADDIU A1,A1,90C0 ;A1=800290C0: "-level_" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1st -BNE V0,R0,70005EA8 -//70005E9C: if not found, reset debug flag -ADDIU T8,R0,0001 -LUI AT,8002 -SW T8,41A4 (AT) ;1->800241A4: debug flag -//70005EA8: -JAL 7F0AF00C ;generate debug.notice.list entry for stan_c_debug using data at 80040F40 -NOP -JAL 7F0D1A20 ;generate debug.notice.list entry for game_c_debug using data at 8004EAE0 -NOP -LUI T9,8002 -LW T9,41A4 (T9) ;T9=800241A4: debug flag -BEQ T9,R0,70005ED0 ;skip if reading memory allocations from debug -//70005EC4: tokenize default memory allocation string -LUI A0,8003 -JAL 7000A58C ;strtok(strcpy(mem_alloc_str, string),' ') -ADDIU A0,A0,90C8 ;A0= 800290C8: " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400" -//70005ED0: search for -m -LUI A1,8003 -ADDIU A1,A1,90FC ;A1=800290FC: "-m" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1st -BEQ V0,R0,70005F10 -//70005EE4: if "-m" memory allocation flags found, set allocation -LUI A1,8003 -ADDIU A1,A1,9100 ;A1=80029100: "-m" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1st -OR A0,V0,R0 ;A0=V0: allocation value -OR A1,R0,R0 ;A1=NULL -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=default -SLL T0,V0,0xA ;T0=value*A -LUI AT,8002 -SW T0,41AC (AT) ;T0->800241AC: stage memory allocation -//70005F10: allocate space for font and default text -LUI A0,8009 -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -ADDIU A0,A0,E360 ;A0=8008E360 -LUI AT,8000 -JAL 70001AF8 ;V0=p->end of free memory -OR S0,V0,AT ;S0=800000000 | offset: 8008E360, mem.start -OR A0,S0,R0 ;A0=S0: p->start of free memory -JAL 700093AC ;initialize memory allocation table and set font and text bank sizes -SUBU A1,V0,S0 ;A1=mem.end-mem.start: size of free memory -JAL 7000999C ;reset memory bank A0 -ADDIU A0,R0,0006 ;A0=bank 6 -JAL 7F0C16EC ;initialize text bank and load the global text -NOP -JAL 7F0BD908 ;lv_c_debug: load japanese font DLs to bank 6 -NOP -JAL 700069C0 ;V0= p->debug.notice.list entry for boss_c_debug using data at 800241A0 -NOP -JAL 7F0ACB70 ;unconditional return -NOP -JAL 7000ADA8 ;unconditional return -NOP -JAL 7F09A2E0 ;resets all player handicaps and perspectives to default (1.0) -NOP -JAL 7F0C0A70 ;set COP0 Count to 800484AC, 800484B0 -NOP -JAL 7F09B7A0 ;unconditional return -NOP -JAL 70002730 -NOP -JAL 7F000B80 -NOP -JAL 7F000BC0 ;unconditional return -NOP -JAL 7F000980 -NOP -JAL 7F000AAC ;allocate, load, and expand animation tables -NOP -JAL 7F0000E0 -NOP -JAL 7F000110 ;reset counters for random bodies and heads -NOP -JAL 7F0009D0 ;unconditional return -NOP -JAL 7F000B60 -NOP -JAL 7F000000 ;initialize menus and data at power-on -NOP -JAL 7F01D6E0 -NOP -JAL 7F0BFC70 ;clear ramrom block, buffer, and headings -NOP -LW RA,0034 (SP) -LW S0,0028 (SP) -LW S1,002C (SP) -LW S2,0030 (SP) -JR RA -ADDIU SP,SP,00A0 - -70005FF4 6BF4 activate "show mem use" debug memory display [800241B4] -ADDIU T6,R0,0001 -LUI AT,8002 -JR RA -SW T6,41B4 (AT) ;1->800241B4: show mem use - -70006004 6C04 toggle "show mem bars" [800241B8] -LUI V0,8002 -ADDIU V0,V0,41B8 -LW T6,0000 (V0) ;T6=800241B8: show mem bars flag -XORI T7,T6,0001 ;flag^=1 -JR RA -SW T7,0000 (V0) ;update flag - -7000601C 6C1C init game loop -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70005D30 -NOP -JAL 7F0CFDDC -NOP -JAL 70006A30 ;loads sound and music banks into memory segment 6 -NOP -JAL 70006060 ;main game loop; does not return! -NOP -BEQ R0,R0,7000603C -NOP -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70006060 6C60 main game loop -ADDIU SP,SP,FE20 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -//7000608C: test memstring for "-level_##" -JAL 7F0D1A4C ;reset memory bank 5 -SW R0,01DC (SP) -LUI A1,8003 -ADDIU A1,A1,9104 ;A1=80029104: "-level_" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -BEQ V0,R0,700060DC -ADDIU A0,R0,0001 ;A0=1 -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,910C ;A1=8002910C: "-level_" -LBU T7,0000 (V0) ;T7=1st level# byte -LBU T6,0001 (V0) ;T6=2nd level# byte -LUI AT,8002 -SLL T8,T7,0x2 -ADDU T8,T8,T7 -SLL T8,T8,0x1 ;T8=upper byte * 0xA: to tens place -ADDU T9,T6,T8 ;T9=upper byte + lower -ADDIU T0,T9,FDF0 ;T0=# - 0x210: compensate for 0x30 on each byte of ASCII numerals 30*B, or 30*A + 30 -SW T0,41A8 (AT) ;T0->800241A8: stage# -//700060DC: set stage defaults if not menus -LUI T1,8002 -LW T1,41A8 (T1) ;T1=800241A8: stage# -ADDIU AT,R0,005A -BEQ T1,AT,70006160 ;branch if stage 5A: title/menus -NOP -JAL 7F01DF90 -NOP -JAL 7F01D590 ;A0->folder# -OR A0,R0,R0 ;A0=0 -JAL 7F01D59C ;A0->difficulty -OR A0,R0,R0 ;A0=0 -LUI A0,8002 -JAL 7F01D5EC ;A0->stage#, set solo + p->briefing -LW A0,41A8 (A0) ;A0=800241A8: stage# -//70006114: test memstring for "-hard#" -LUI A1,8003 -ADDIU A1,A1,9114 ;A1=80029114: "-hard" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -BEQ V0,R0,70006160 ;branch if string not present -ADDIU A0,R0,0001 ;A0=1 -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,911C ;A1=8002911C: "-hard" -LBU A0,0000 (V0) ;A0=ASCII difficulty level -JAL 7F01D59C ;A0->difficulty [8002A8FC]; forces invalid difficulties to 0 (agent) -ADDIU A0,A0,FFD0 ;A0-=0x30: account for 0x30 ASCII extension -//70006144: redundant code -LUI A1,8003 -ADDIU A1,A1,9124 ;A1=80029124: "-hard" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -LBU A0,0000 (V0) ;A0= ASCII difficulty level -JAL 7F0BFC1C ;A0->difficulty [8002A8FC] -ADDIU A0,A0,FFD0 ;A0-=0x30: account for 0x30 ASCII extension -//70006160: -JAL 7000D8E0 ;V0=Count -NOP -JAL 7000A498 ;set random number to A0+1 -OR A0,V0,R0 ;A0= Count -LUI S6,8003 -LUI S5,8008 -ADDIU S5,S5,A0B0 ;S5=8007A0B0 -ADDIU S6,S6,9134 ;S6=80029134 -ADDIU S7,SP,0058 ;S7=SP+58: p->instance -ADDIU S4,SP,005C ;S4=SP+5C: buffer for string -LW S3,01A8 (SP) ;S3=SP+1A8: p->DL -//7000618C: -LUI T3,8002 -SW R0,01D4 (SP) ;0->800201D4: -ADDIU T3,T3,4304 ;T3=80024304 -LW AT,0000 (T3) ;AT=80024304: -LW T7,0004 (T3) ;T7=80024308: -ADDIU T2,SP,01B4 ;T2=SP+1B4: -SW AT,0000 (T2) -SW T7,0004 (T2) -LW T7,000C (T3) ;T7=80024310: -LW AT,0008 (T3) ;AT=8002430C: -OR S8,R0,R0 ;S8=0 -SW T7,000C (T2) -SW AT,0008 (T2) -LW AT,0010 (T3) ;AT=80024314: -LW T7,0014 (T3) ;T7=80024318: -OR S1,R0,R0 ;S1=0 -SW AT,0010 (T2) -SW T7,0014 (T2) -LW T7,001C (T3) ;T7=80024320: -LW AT,0018 (T3) ;AT=8002431C: -SW T7,001C (T2) -SW AT,0018 (T2) -//700061E4: test if replaying or recording demos this stage load -JAL 7F0BFC10 ;V0=difficulty -SW R0,01AC (SP) -LUI A0,8002 -LW A0,41A8 (A0) ;A0=800241A8: stage# -JAL 7F0C0640 ;detect if recording or replaying demos this stage load -OR A1,V0,R0 ;A1=V0: difficulty -//700061FC: -LUI T6,8002 -LW T6,41A4 (T6) ;T6=800241A4: switch stages flag -LUI T8,8002 -BEQ T6,R0,700062EC ;branch if not set -NOP -LW T8,41A8 (T8) ;T8=800241A8: stage# -ADDIU AT,R0,005A -ADDIU S0,R0,FFFF -BEQ T8,AT,70006294 ;branch if stage 5A: title/menus -NOP -//70006224: detect if multiplayer -JAL 7F010290 ;V0=#players -NOP -SLTI AT,V0,0002 ;TRUE if solo -BNE AT,R0,70006294 ;branch if solo -//70006234: multiplayer stage prep -LUI A1,8002 -ADDIU A1,A1,41BC ;A1=800241BC -LW T9,0000 (A1) ;T9=800241BC: memstring table -OR S0,R0,R0 ;S0=0 -LUI A0,8002 -BEQ T9,R0,7000627C ;branch if NULL (end of table) -LUI T0,8002 -LW A0,41A8 (A0) ;A0=800241A8: stage# -ADDIU V0,T0,41BC ;V0=800241BC -LW V1,0000 (V0) ;V1=800241BC: stage ID for memstring -ADDIU A0,A0,0190 ;A0+=0x190: MP stage# offset same as stage+400... -//70006260: loop until a match for MP stage -BEQL A0,V1,70006280 ;branch if stage IDs match -SLL T1,S0,0x3 -LW V1,0008 (V0) ;V1=next memstring stage ID# entry -ADDIU S0,S0,0001 ;S0++ count++ -ADDIU V0,V0,0008 ;V0+=8 next table entry -BNE V1,R0,70006260 ;loop for each entry -NOP -//7000627C: check if invalid/NULL entry -SLL T1,S0,0x3 ;T1=offset to entry -ADDU T5,A1,T1 ;T5=800241BC+offset -LW T4,0000 (T5) ;T4=800241BC+offset: memstring stage ID -BNE T4,R0,70006294 ;branch if not zero -NOP -ADDIU S0,R0,FFFF ;S0=-1 default to skip -//70006294: solo memstring lookup, which multi needlessly reuses -LUI A1,8002 -BGEZ S0,700062DC ;skip if invalid entry -ADDIU A1,A1,41BC ;A1=800241BC -LW T2,0000 (A1) ;T2=800241BC: memstring stage ID -OR S0,R0,R0 ;S0=0 count=0 -LUI A0,8002 -BEQ T2,R0,700062DC ;branch if NULL -LUI T3,8002 -ADDIU V0,T3,41BC ;V0=800241BC -LW V1,0000 (V0) ;V1=800241BC: memstring stage ID -LW A0,41A8 (A0) ;A0=800241A8: stage# -//700062C0: loop until a hit found -BEQL A0,V1,700062E0 ;branch if matching entry -SLL T7,S0,0x3 -LW V1,0008 (V0) ;V1=next memstring stage ID -ADDIU S0,S0,0001 ;S0++ count++ -ADDIU V0,V0,0008 ;V0+=8 next memstring -BNE V1,R0,700062C0 ;loop for each entry -NOP -//700062DC: tokenize memory allocation string -SLL T7,S0,0x3 -ADDU T6,A1,T7 ;T6=800241BC+offset: p->matching memstring entry -JAL 7000A58C ;strtok(strcpy(mem_alloc_str, string),' ') -LW A0,0004 (T6) ;A0=p->memstring -//700062EC: reinitialize memory bank -JAL 7000999C ;reset memory bank A0 -ADDIU A0,R0,0004 ;A0=4 -JAL 7F0BD1BC -ADDIU A0,R0,0004 ;A0=4 -//700062FC: determine -ma allocation -LUI A1,8003 -ADDIU A1,A1,912C ;A1=8002912C: "-ma" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -BEQ V0,R0,7000633C ;branch if token not found -ADDIU A0,R0,0001 ;A0=1 -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,9130 ;A1=80029130: "-ma" -OR A0,V0,R0 ;A0=V0: p->instance -OR A1,R0,R0 ;A1=NULL p->extra characters -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=0 default target base -SLL T8,V0,0xA ;T8=value * 0x400: total allocated memory -LUI AT,8002 -SW T8,41B0 (AT) ;T8->800241B0: temp -ma allocation -//7000633C: allocates "-ma" bytes to mem bank 4 -LUI A0,8002 -LW A0,41B0 (A0) ;A0=800241B0: temp -ma allocation -JAL 70009720 ;V0=p->A0 bytes of memory allocated in bank A1 -ADDIU A1,R0,0004 ;A1=bank 4 -LUI A1,8002 -LW A1,41B0 (A1) ;A1=800241B0: size -JAL 70009D98 ;reset memtable with base allocation -OR A0,V0,R0 ;A0=V0: p->allocation -//7000635C: reset player data -JAL 7F09A32C ;reset player data pointers -NOP -//70006364: initialize stage -LUI T9,8002 -LW T9,41A8 (T9) ;T9=800241A8: stage# -ADDIU AT,R0,005A -BEQ T9,AT,70006398 ;branch if stage 5A: title/menus -NOP -JAL 7F010290 ;V0=#players -ADDIU S1,R0,0001 ;S1=1 #players -SLTI AT,V0,0002 ;TRUE if solo -BNE AT,R0,70006398 ;branch if solo -NOP -//7000638C: MP sets #players -JAL 7F010290 ;V0=#players -NOP -OR S1,V0,R0 ;S1=V0: #players -//70006398: -JAL 7F09A38C ;initializes player data pointers and constructs viewports -OR A0,S1,R0 ;A0=S1: #players 0-title, 1-solo, 1,2,3,4-multi -JAL 7F0BD48C ;set vertex and graphics memory -NOP -JAL 7000B6AC ;??? - tests controller presence but iffy on particulars -NOP -LUI A0,8002 -JAL 7F0BDAB0 -LW A0,41A8 (A0) ;A0=800241A8: stage# -JAL 70003124 ;initialize both video buffers -NOP -JAL 7000ADB0 ;reset stdout display -NOP -JAL 7F0C0B4C -NOP -JAL 70002810 -NOP -//700063DC: -LUI A0,8006 -ADDIU A0,A0,D9A0 ;A0=8005D9A0: -ADDIU A1,SP,01D4 ;A1=SP+1D4: p->buffer -JAL 7000DDD0 -OR A2,R0,R0 -BNE V0,R0,70006410 ;branch if not NULL -//700063F4: -LUI A0,8006 -ADDIU A0,A0,D9A0 ;A0=8005D9A0: -ADDIU A1,SP,01D4 ;A1=SP+1D4: p->buffer -JAL 7000DDD0 -OR A2,R0,R0 -BEQ V0,R0,700063F4 ;loop while NULL -NOP -//70006410: -LUI T0,8002 -LW T0,42FC (T0) ;T0=800242FC: loaded stage# -BGEZ T0,700068B4 ;branch if not -1 -//7000641C: -LUI A0,8006 -ADDIU A0,A0,D9A0 ;A0=8005D9A0: -ADDIU A1,SP,01D4 ;A1=SP+1D4: p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T1,01D4 (SP) -ADDIU AT,R0,0001 -LH V1,0000 (T1) -BEQ V1,AT,70006464 -ADDIU AT,R0,0002 -BEQ V1,AT,70006890 -LUI V0,8002 -ADDIU AT,R0,0005 -BEQ V1,AT,7000689C -LUI V0,8002 -LUI V0,8002 -BEQ R0,R0,700068A4 -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -//70006464: -JAL 7000D8E0 ;V0=Count -NOP -LUI T5,8005 -LW T5,84B0 (T5) ;T5=800484B0: -LUI AT,0005 -ORI AT,AT,EB61 ;AT=5EB61 -SUBU V1,V0,T5 -SLTU AT,V1,AT ;TRUE if (Count - saved) < 5EB61 -BEQ AT,R0,70006498 ;play ramrom after 5EB61+T5 cycles -LUI V0,8002 -LUI V0,8002 -BEQ R0,R0,700068A4 -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -//70006498: step through ramrom demo file -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -SLTIU AT,S8,0002 -BGEZ V0,700068A4 ;branch if not stage -1 -NOP -BEQ AT,R0,700068A4 ;branch if not solo? set to 0, nothing seems to alter... -ADDIU T4,SP,01B4 -JAL 7F0BFC8C ;V0=TRUE if demos running [80048474] -SW T4,0048 (SP) -BEQ V0,R0,700064D0 ;branch if demo not playing -NOP -JAL 7F0C0268 ;iterate ramrom entries until end, and handle camera out -NOP -BEQ R0,R0,700064D8 -NOP -//700064D0: -JAL 7F0C0B4C -NOP -//700064D8: -JAL 70002CD8 -NOP -JAL 70002810 -NOP -JAL 70002854 -LUI A0,0002 -JAL 7000BD0C ;redirect to ramrom replay and record handlers if set -NOP -JAL 70000988 ;A0-> stderr.permitted [8002309C] -OR A0,R0,R0 ;A0=0 not permitted -JAL 7F0BD674 ;V0=p->display list -NOP -//70006508: if available, handle debug menu and ramrom packet record -LUI T2,8002 -LW T2,4300 (T2) ;T2=80024300: state of debug menu -SW V0,01A4 (SP) ;SP+1A4=V0: p->DL -OR S3,V0,R0 ;S3=V0: p->DL -BEQ T2,R0,70006590 ;branch if not available -NOP -JAL 7000C0EC ;cur.controller A0 horz.stick pos. -OR A0,R0,R0 ;A0=0 controller 1 -SLL S0,V0,0x18 -SRA T3,S0,0x18 -OR S0,T3,R0 ;S0=horz.stick pos. -JAL 7000C1FC ;cur.controller A0 vert.stick pos. -OR A0,R0,R0 ;A0=0 controller 1 -SLL S1,V0,0x18 -SRA T7,S1,0x18 -OR S1,T7,R0 ;S1=vert.stick pos. -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,FFFF ;A1= any and all -ANDI S2,V0,FFFF ;S2=buttons held -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,FFFF ;A1= any and all -SLL A0,S0,0x18 -SLL A1,S1,0x18 -SRA T8,A1,0x18 -SRA T6,A0,0x18 -OR A0,T6,R0 ;A0=horz.stick pos. -OR A1,T8,R0 ;A1=vert.stick pos. -ANDI A2,S2,FFFF ;A2= buttons held -JAL 7F0905A0 ;debug menu processor -ANDI A3,V0,FFFF ;A3= buttons pressed -LUI AT,8002 -SW V0,4300 (AT) ;V0->80024300: state of debug menu -//70006590: -JAL 7F0BEB88 ;manage MP game when applicable -NOP -JAL 7F09B41C -NOP -//700065A0: set up viewports when applicable -LUI T9,8002 -LW T9,41A8 (T9) ;T9=800241A8: stage# -ADDIU AT,R0,005A -BEQ T9,AT,70006610 ;branch if stage 5A: title/menus -NOP -JAL 7F09A464 ;#players -OR S1,R0,R0 ;S1=0 player count -BLEZ V0,70006610 ;branch if invalid #players -NOP -//700065C4: set each player's viewport -JAL 7F09B528 -OR A0,S1,R0 ;A0=S1: player# -JAL 7F09B10C ;set cur. player to A0 -OR A0,V0,R0 ;A0=V0: player# -LW S0,0000 (S5) ;S0=8007A0B0: p->BONDdata -LH A0,07F0 (S0) ;A0=BONDdata+7F0: viewport width -JAL 7000443C ;set video2 width (A0) and height (A1) -LH A1,07F2 (S0) ;A1=BONDdata+7F2: viewport height -LW S0,0000 (S5) ;S0=8007A0B0: p->BONDdata -LH A0,07F4 (S0) ;A0=BONDdata+7F4: viewport ulx -JAL 700044BC ;set video2 ulx (A0) and uly (A1) -LH A1,07F6 (S0) ;A1=BONDdata+7F6: viewport uly -JAL 7F0BF800 -NOP -JAL 7F09A464 ;V0=#players -ADDIU S1,S1,0001 ;S1++ count++ -SLT AT,S1,V0 ;TRUE if count < players -BNE AT,R0,700065C4 ;loop for each player -NOP -//70006610: handle line mode when applicable -JAL 7F0BE30C -OR A0,S3,R0 ;A0=S3: p->DL -JAL 7F090FDC ;V0=line mode flag -OR S3,V0,R0 ;S3=V0: p->DL -BEQ V0,R0,70006700 ;branch if line mode not enabled -//70006624: global microcode snippet to force line mode -ADDIU A3,R0,FFFF ;A3=-1 -OR V0,S3,R0 ;V0=S3: p->DL -ADDIU S3,S3,0008 ;S3+=8: next DL op -LUI T0,E700 -OR V1,S3,R0 ;V1=S3: p->DL -SW T0,0000 (V0) ;DL+0= pipesync.u -SW R0,0004 (V0) ;DL+0= pipesync.l -ADDIU S3,S3,0008 ;S3+=8: next DL op -//70006644: set cycle type -LUI T1,BA00 -OR A0,S3,R0 ;A0=S3: p->DL -ORI T1,T1,1402 ;T1=BA001402 -ADDIU S3,S3,0008 ;S3+=8: next DL op -SW T1,0000 (V1) ;DL+0= setothermode_h.u: shift 14, 2 bits -SW R0,0004 (V1) ;DL+4= setothermode_h.l: cycle type-1cycle -//7000665C: white blend colour -OR A1,S3,R0 ;A1=S3: p->DL -LUI T5,F900 -ADDIU S3,S3,0008 ;S3+=8: next DL op -SW T5,0000 (A0) ;DL+0= setblendcolour.u -SW A3,0004 (A0) ;DL+4= setblendcolour.l: FFFFFFFF-white100% -//70006670: -OR A2,S3,R0 ;A2=S3: p->DL -LUI T4,EE00 -ADDIU S3,S3,0008 ;S3+=8: next DL op -SW T4,0000 (A1) ;DL+0= setprimdepth.u -SW A3,0004 (A1) ;DL+4= setprimdepth.l: depth=max, Ddepth=max -//70006684: set depth source to primitive -LUI T2,B900 -OR V0,S3,R0 ;V0=S3: p->DL -ORI T2,T2,0201 ;T2=B9000201 -ADDIU T3,R0,0004 -ADDIU S3,S3,0008 ;S3+=8: next DL op -LUI T7,B900 -LUI T6,0FA5 -SW T3,0004 (A2) ;DL+0= setothermode_l.l: depth source: primitive -SW T2,0000 (A2) ;DL+4= setothermode_l.u: shift 2, 1 bit -//700066A8: set blender -ORI T6,T6,4040 ;T6=0FA54040 -ORI T7,T7,031D ;T7=B900031D -OR S0,S3,R0 ;S0=S3: p->DL -SW T7,0000 (V0) ;DL+4= setothermode_l.u: shift 3, 1D bits -SW T6,0004 (V0) ;DL+0= setothermode_l.l: render mode: image read; converge delta-ST clamp; depth mode: force blender; blender: blend 1 machine, blend 1, blend colour memory, blend colour fog, blend alpha in, blend alpha fog, blend alpha shade, blend 0 -//700066BC: draws viewport as a fillrect? -JAL 7000441C ;V0= video2.txtClipW -ADDIU S3,S3,0008 ;S3+=8: next DL op -SLL S1,V0,0x10 -SRA T8,S1,0x10 -JAL 7000442C ;V0= video2.txtClipH -OR S1,T8,R0 ;S1= text clip width -ADDIU T9,V0,FFFF ;T9= height-1 -ANDI T0,T9,03FF ;T0=height to 10 bits -ADDIU T4,S1,FFFF ;T4=width-1 -ANDI T2,T4,03FF ;T2=width to 10 bits -SLL T1,T0,0x2 ;T1=height->lry -LUI AT,F600 -OR T5,T1,AT ;T5= fillrect | lry -SLL T3,T2,0xE ;T3=width->lrx -OR T7,T5,T3 ;T7= fillrect | lrx | lry -SW T7,0000 (S0) ;DL+0= fillrect.u: lrx, lry -SW R0,0004 (S0) ;DL+4= fillrect.l: ulx=0, uly=0 -//70006700: feed screen to VI -JAL 7000B27C ;draw screen display block to screen -OR A0,S3,R0 ;A0=S3: p->DL -//70006708: test if displaying memory usage -JAL 7F090F34 ;V0= memory usage display flag [80036F74] -OR S3,V0,R0 ;S3=V0: p->DL -BEQ V0,R0,70006724 ;branch if not displaying memory usage -NOP -JAL 70002958 ;draw "display speed" display -OR A0,S3,R0 ;V0=S3: p->DL -OR S3,V0,R0 ;S3=V0: p->DL -//70006724: display debug menu if applicable -LUI T6,8002 -LW T6,4300 (T6) ;T6=80024300: state of debug menu -BEQL T6,R0,7000674C ;branch if debug not available -OR V0,S3,R0 -JAL 7F090490 ;display debug menu text on screen -NOP -JAL 7F08FE74 -OR A0,S3,R0 ;V0=S3: p->DL -OR S3,V0,R0 ;S3=V0: p->DL -//70006748: sync and end display list -OR V0,S3,R0 ;V0=S3: p->DL -ADDIU S3,S3,0008 ;S3+=8 next DL op -LUI T8,E900 -SW T8,0000 (V0) ;DL+0= fullsync.u -SW R0,0004 (V0) ;DL+4= fullsync.l -OR V1,S3,R0 ;V1=S3: p->DL -LUI T9,B800 -SW T9,0000 (V1) ;DL+0= enddl.u -SW R0,0004 (V1) ;DL+4= enddl.l -//7000676C: handle show mem use, when applicable -LUI T0,8002 -LW T0,41B4 (T0) ;T0=800241B4: 1- "show mem use" -ADDIU S3,S3,0008 ;S3+=8 next DL op -BEQ T0,R0,700067A8 ;branch if "show mem use" not set -NOP -JAL 700098F0 ;V0=7; loop 6 times needlessly -NOP -JAL 7000A29C ;memory table sort and merge function -NOP -JAL 7F0BD774 ;A0->SP+0; deleted debug routine -OR A0,S3,R0 ;V0=S3: p->DL -JAL 7F0C6650 ;unconditional return -OR A0,R0,R0 ;A0=0 -LUI AT,8002 -SW R0,41B4 (AT) ;0->show mem use flag -//700067A8: handle show mem bars, when applicable -LUI T1,8002 -LW T1,41B8 (T1) ;T1=800241B8: 1- "show mem bars" -BEQ T1,R0,700067C0 ;branch if "show mem bars" not set -NOP -JAL 7F0BD810 ;"show mem bars": F12=percentage of used geometry memory -OR A0,S3,R0 ;V0=S3: p->DL -//700067C0: -JAL 7F0BD69C ;V0=#microcode ops left in geometry buffer, starting at A0 -OR A0,S3,R0 ;V0=S3: p->DL -JAL 7F0BD738 -NOP -JAL 70003298 -NOP -//700067D8: handle grab task flag, when applicable -JAL 7F09106C ;V0= "grab task" debugger flag -NOP -BEQ V0,R0,70006854 ;branch if grab task not set -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,C000 ;A1=A, B buttons -BEQ V0,R0,70006854 ;branch if not pressed -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,C000 ;A1=A, B buttons -ORI AT,R0,C000 -BNE V0,AT,70006854 ;branch if A+B was not precisely what was pressed -//70006808: generate a unique name for this taskgrab -LUI A2,8002 -LW A2,4324 (A2) ;A2=80024324: "taskgrab" ram dump # -OR A0,S4,R0 ;A0=S4: p->string buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,S6,R0 ;A1=S6: 80029134="u64.taskgrab.%d.core" -OR A0,S4,R0 ;A0=S4: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S7,R0 ;A1=S7: @filesize -BEQ V0,R0,70006844 ;branch if unique -//7000682C: loop and increment value if found -LUI A2,8002 -LW A2,4324 (A2) ;A2=80024324: taskgrab count -LUI AT,8002 -ADDIU A2,A2,0001 -BEQ R0,R0,70006808 ;loop until file can be found -SW A2,4324 (AT) ;taskgrab count++ -//70006844: generates capture entry for Indi debugger from 4MB of ram -OR A0,S4,R0 ;A0=S4: p->string -LUI A1,8000 ;A1=80000000 start address -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -LUI A2,0040 ;A2=0x400000 4MB size -//70006854: -LW A0,01A4 (SP) ;A0=SP+1A4: org.p->DL -OR A1,S3,R0 ;A1=S3: p->DL -OR A2,R0,R0 ;A2=0 -JAL 7F0CFE18 -LW A3,0048 (SP) ;A3=SP+48: -JAL 70009E10 ;merge and sort entries in default memory allocation table -ADDIU S8,S8,0001 ;S8++ -LW T4,01AC (SP) -LUI A0,0001 ;A0=10000 -XORI T2,T4,0001 -JAL 70002854 -SW T2,01AC (SP) ;SP+1AC^=1 -LUI V0,8002 -BEQ R0,R0,700068A4 -LW V0,42FC (V0) -//70006890: -ADDIU S8,S8,FFFF ;S8-- player count-1? -BEQ R0,R0,700068A4 -LW V0,42FC (V0) -//7000689C: -ADDIU S8,R0,0004 ;S8=4 player count=4? -//700068A0: -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -BLTZ V0,7000641C ;loop if stage# is -1 -NOP -BNE S8,R0,7000641C -NOP -//700068B4: unload stage -JAL 7F0BFB20 ;unload stage -NOP -JAL 7F0C08FC ;stop demos at end of stage -NOP -JAL 700099C4 ;??? to memory bank A0 -ADDIU A0,R0,0004 ;A0=bank 4 -JAL 7F0BD1BC ;??? to memory bank A0 -ADDIU A0,R0,0004 ;A0=bank 4 -LUI V0,8002 -ADDIU V0,V0,42FC ;V0=800242FC -LW T5,0000 (V0) ;T5=800242FC: loaded stage# -LW T7,01DC (SP) -LUI AT,8002 -ADDIU T3,R0,FFFF ;T3=-1 -SW T5,41A8 (AT) ;stage#->800241A8: stage# -BEQ T7,R0,7000618C ;loop if still zero, which as far as I know it always does -SW T3,0000 (V0) ;-1->800242FC: loaded stage# -//700068F8: do something with mem bank 5 -JAL 7F0D1A7C -SW S3,01A8 (SP) ;SP+1A8=S3: p->DL -//70006900: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,01E0 - -70006930 7530 run title -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70006950 ;A0->loaded stage# -ADDIU A0,R0,005A ;A0=5A: title -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70006950 7550 A0->loaded stage# [800242FC] - accepts: A0=stage# -LUI AT,8002 -JR RA -SW A0,42FC (AT) ;A0->loaded stage - -7000695C 755C V0= stage# [800241A8] -LUI V0,8002 -JR RA -LW V0,41A8 (V0) ;V0=800241A8: stage# - -70006968 7568 return to title screen from stage -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000695C ;V0= stage# -NOP -ADDIU AT,R0,0036 -BEQ V0,AT,7000699C ;skip if stage#36: cuba -NOP -//70006984: test if objectives complete -JAL 7F0574B8 ;V0= TRUE if objectives completed -NOP -BEQ V0,R0,7000699C ;skip if objectives incomplete -NOP -//70006994: -JAL 7F01D39C -NOP -//7000699C: run title and return -JAL 70006930 ;run title -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700069B4 75B4 V0=state of debug menu (1:on; 0:off) -LUI V0,8002 -JR RA -LW V0,4300 (V0) ;V0=80024300: state of debug menu - -700069C0 75C0 V0= p->debug.notice.list entry for boss_c_debug using data at 800241A0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -LUI A1,8003 -ADDIU A1,A1,914C ;A1=8002914C: "boss_c_debug" -JAL 70004E60 ;V0=p->debug.notice.list entry for name A1 and data A0 -ADDIU A0,A0,41A0 ;A0=800241A0: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700069F0 75F0 - accepts: A0=p->??? -LHU T6,0000 (A0) -OR V0,R0,R0 -OR V1,A0,R0 -BLEZ T6,70006A28 -NOP -LW T7,0004 (V1) -ADDIU V0,V0,0001 -ADDIU V1,V1,0008 -ADDU T8,T7,A1 -SW T8,FFFC (V1) -LHU T9,0000 (A0) -SLT AT,V0,T9 -BNEL AT,R0,70006A08 -LW T7,0004 (V1) -JR RA -NOP - -70006A30 7630 loads sound and music banks into memory segment 6 -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero if sound can't be played -ADDIU SP,SP,FF18 -SW RA,0024 (SP) -BNE T6,R0,70006E68 ;return if can't play music -SW S0,0020 (SP) -LUI A0,0002 -ORI A0,A0,E000 ;A0=2E000 -JAL 70009720 ;V0=p->A0 bytes of memory allocated in bank A1 -ADDIU A1,R0,0006 ;A1=bank 6 -LUI AT,0002 -ORI AT,AT,E000 -OR V1,V0,R0 ;V1=p->allocation -OR A1,V0,R0 ;A1=p->allocation -//70006A68: -ADDU A0,V0,AT ;A0=p->end of allocation -//70006A6C: initialize buffer -ADDIU V1,V1,0001 -SLTU AT,V1,A0 -BNE AT,R0,70006A6C -SB R0,FFFF (V1) -//70006A7C: allocate buffer for rom.sfx.ptr -LUI S0,8006 -ADDIU S0,S0,3710 ;S0=80063710: p->sound buffer entry -LUI A2,0002 -ORI A2,A2,E000 ;A2=2E000: size -JAL 70010D30 ;init. sound buffer entry A0 for buffer A1 of size A2 -OR A0,S0,R0 ;A0=S0: 80063710 -LUI T7,002F -LUI T8,002F -ADDIU T8,T8,BDE0 ;T8=2EBDE0 rom.sfx.ptr.start -ADDIU T7,T7,19A0 ;T7=2F19A0 rom.sfx.ptr.end -SUBU V0,T7,T8 ;V0=sfx.size -SW V0,0010 (SP) ;SP+10= sfx.size -SW V0,0038 (SP) -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -//70006AC4: load rom.sfx.ptr to buffer and expand entries -LUI A1,002F -SW V0,00D4 (SP) ;SP+D4= V0: p->rom.sfx.ptr buffer -ADDIU A1,A1,BDE0 ;A1=2EBDE0: rom.sfx.ptr.start -OR A0,V0,R0 -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -LW A2,0038 (SP) ;A2=sfx.ptr.size -LUI A1,002F -ADDIU A1,A1,19A0 ;A1=2F19A0: rom.sfx.wbk.start -JAL 70010E74 ;expand all offsets in soundtable A0, wavebank A1 -LW A0,00D4 (SP) ;A0=p->rom.sfx.ptr -//70006AEC: -LW T9,00D4 (SP) ;T9=p->rom.sfx.ptr -LUI T1,003C -LUI T2,003B -LW T0,0004 (T9) -ADDIU T2,T2,4450 ;T2=3B4450: rom.snd.ptr.start -ADDIU T1,T1,87F0 ;T1=3B87F0: rom.snd.ptr.end -LUI AT,8006 -SUBU V0,T1,T2 ;V0= end - start: rom.snd.ptr.size -SW V0,0010 (SP) ;SP+10= rom.snd.ptr.size -SW V0,0038 (SP) -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -ADDIU A3,R0,0001 ;A3= 1 block -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW T0,3720 (AT) -LUI A1,003B -SW V0,00CC (SP) ;SP+CC= V0: p->rom.snd.ptr buffer -ADDIU A1,A1,4450 ;A1=3B4450: rom.snd.ptr.start -OR A0,V0,R0 -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -LW A2,0038 (SP) ;A2= rom.snd.ptr.size -LUI A1,003C -ADDIU A1,A1,87F0 ;A1=3B87F0: rom.snd.bnk.start -JAL 70010E74 ;expand all offsets in soundtable A0, wavebank A1 -LW A0,00CC (SP) ;A0= p->rom.snd.ptr buffer -LW T3,00CC (SP) -LUI AT,8006 -ADDIU T5,R0,0010 -LW T4,0004 (T3) -SW T5,0010 (SP) ;SP+10= 10 bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -ADDIU A3,R0,0001 ;A3= 1 block -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW T4,3724 (AT) -LUI V1,8006 -LUI A1,0042 -ADDIU V1,V1,3734 ;V1=80063734: music.data -ADDIU A1,A1,9790 ;A1=419790: rom.music.ptr.start -SW V0,0000 (V1) -SW A1,0038 (SP) -OR A0,V0,R0 -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -ADDIU A2,R0,0010 -LUI T6,8006 -LW T6,3734 (T6) -OR A0,R0,R0 -OR A1,R0,R0 -LHU V1,0000 (T6) -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -ADDIU A3,R0,0001 ;A3= 1 block -SLL T7,V1,0x3 -ADDIU V1,T7,0004 -SW V1,0010 (SP) -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW V1,0040 (SP) -LW V1,0040 (SP) -LUI A3,8006 -ADDIU A3,A3,3734 -ADDIU A2,V1,000F -ORI T8,A2,000F -SW V0,0000 (A3) -XORI A2,T8,000F -OR A0,V0,R0 -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -LW A1,0038 (SP) ;A1= rom.music.ptr.start -LUI A0,8006 -LUI A1,0042 -ADDIU A1,A1,9790 ;A1=419790: rom.music.ptr.start -JAL 700069F0 -LW A0,3734 (A0) ;A0=80063734: -ADDIU T0,R0,18C8 -SW T0,0010 (SP) ;SP+10= 18C8 bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LUI AT,8006 -ADDIU T1,R0,1770 -SW V0,3838 (AT) -SW T1,0010 (SP) ;SP+10= 1770 bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LUI A3,8006 -ADDIU A3,A3,383C -SW V0,0000 (A3) -ADDIU T3,V0,07D0 -LUI AT,8006 -LUI V1,8006 -LUI A0,8006 -LUI A1,8006 -LUI A2,8006 -SW T3,3840 (AT) -ADDIU A2,A2,3836 -ADDIU A1,A1,37B8 -LW A0,3734 (A0) -ADDIU V1,V1,3738 -LHU T4,0008 (A0) -ADDIU A0,A0,0008 -ADDIU A1,A1,0002 -SH T4,0000 (V1) -LHU T5,0002 (A0) -ANDI V0,T4,FFFF -ANDI T6,V0,0001 -BEQ T6,R0,70006CB4 -SH T5,FFFE (A1) -ADDIU T7,V0,0001 -SH T7,0000 (V1) -BNE A1,A2,70006C88 -ADDIU V1,V1,0002 -ADDIU T8,R0,0018 -ADDIU T9,R0,0080 -ADDIU T0,R0,0006 -SW R0,00A4 (SP) -SW T8,00A8 (SP) -SW T9,00AC (SP) -SW R0,00B4 (SP) -SB T0,00C0 (SP) -SW R0,00BC (SP) -SW S0,00B8 (SP) -JAL 70001BD0 -ADDIU A0,SP,00A4 -ADDIU T1,R0,0010 -ADDIU T2,R0,0040 -ADDIU T3,R0,0010 -ADDIU T4,R0,0010 -ADDIU T5,R0,0040 -ADDIU T6,R0,0010 -ADDIU T7,R0,0010 -ADDIU T8,R0,0040 -ADDIU T9,R0,0010 -ADDIU T0,R0,007C -SW T1,0088 (SP) -SW T2,008C (SP) -SB T3,0090 (SP) -SW S0,0094 (SP) -SW R0,0098 (SP) -SW R0,009C (SP) -SW R0,00A0 (SP) -SW T4,006C (SP) -SW T5,0070 (SP) -SB T6,0074 (SP) -SW S0,0078 (SP) -SW R0,007C (SP) -SW R0,0080 (SP) -SW R0,0084 (SP) -SW T7,0050 (SP) -SW T8,0054 (SP) -SB T9,0058 (SP) -SW S0,005C (SP) -SW R0,0060 (SP) -SW R0,0064 (SP) -SW R0,0068 (SP) -SW T0,0010 (SP) ;SP+10= 7C bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LUI AT,8006 -ADDIU T1,R0,007C -SW V0,3728 (AT) ;V0->80063728: set p->music.ctrl.primary -SW T1,0010 (SP) ;SP+10= 7C bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LUI AT,8006 -ADDIU T2,R0,007C -SW V0,372C (AT) ;V0->8006372C: set p->music.ctrl.secondary -SW T2,0010 (SP) ;SP+10= 7C bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S0,R0 ;A2=S0: 80063710: snd.buf.entry -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LUI AT,8006 -LUI A0,8006 -SW V0,3730 (AT) ;V0->80063730: p->music.ctrl.tertiary -LW A0,3728 (A0) ;A0=80063728: p->music.ctrl.primary -JAL 70012080 -ADDIU A1,SP,0088 -LUI A0,8006 -LUI A1,8006 -LW A1,3724 (A1) -JAL 700121F0 -LW A0,3728 (A0) ;A0=80063728: p->music.ctrl.primary -LUI A0,8006 -LW A0,372C (A0) ;A0=8006372C: p->music.ctrl.secondary -JAL 70012080 -ADDIU A1,SP,006C -LUI A0,8006 -LUI A1,8006 -LW A1,3724 (A1) -JAL 700121F0 -LW A0,372C (A0) ;A0=8006372C: p->music.ctrl.secondary -LUI A0,8006 -LW A0,3730 (A0) ;A0=80063730: p->music.ctrl.tertiary -JAL 70012080 -ADDIU A1,SP,0050 -LUI A0,8006 -LUI A1,8006 -LW A1,3724 (A1) -JAL 700121F0 -LW A0,3730 (A0) ;A0=80063730: p->music.ctrl.tertiary -ADDIU T3,R0,0040 -ADDIU T4,R0,0040 -ADDIU T5,R0,0008 -SW T3,00DC (SP) -SW T4,00D8 (SP) -SW T5,00E0 (SP) -SW S0,00E4 (SP) -JAL 70007B20 -ADDIU A0,SP,00D8 -JAL 70001F58 -NOP -//70006E68: return -LW RA,0024 (SP) -LW S0,0020 (SP) -ADDIU SP,SP,00E8 -JR RA -NOP - -70006E7C 7A7C play music track A0 as primary - accepts; A0=music track# -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero when sound can't be played -ADDIU SP,SP,DEB8 -SW RA,001C (SP) -SW S0,0018 (SP) -BNE T6,R0,70006FBC ;return if sound disabled -SW A0,2148 (SP) -//70006E98: If something is already playing... -LUI T7,8002 -LW T7,4334 (T7) ;T7=80024334: cur.track# -BEQL T7,R0,70006EB4 ;branch if nothing playing -LW T8,2148 (SP) -//70006EA8: ..kill it. -JAL 70006FD0 ;stop playing primary music track -NOP -//70006EB0: set new track number and wait for previous to stop -LW T8,2148 (SP) ;T8=track# -LUI S0,8006 -LUI AT,8002 -ADDIU S0,S0,3728 ;S0=80063728: p->music.primary controller block -SW T8,4334 (AT) ;track#->80024334: set new track number -JAL 70012230 ;V0= TRUE if music playing -LW A0,0000 (S0) ;A0=music.ctrl.primary -BEQ V0,R0,70006EE4 ;skip if stopped -NOP -//70006ED4: loop until it stops -JAL 70012230 ;V0= TRUE if music playing -LW A0,0000 (S0) ;A0=80063728: music.ctrl.primary -BNE V0,R0,70006ED4 -NOP -//70006EE4: -LUI A3,8002 -LW A3,4334 (A3) ;A3=80024334: track# -LUI T9,8006 -LW T9,3734 (T9) ;T9=80063734: p->music data table -SLL T1,A3,0x3 ;T1=track# -> offset -LUI AT,0001 -ADDU T2,T9,T1 -LW A1,0004 (T2) ;A1=music.data+offset: ROM address for track -LUI V1,8006 -SLL V0,A3,0x1 ;V0=track#->offset -SLTU AT,A1,AT -BEQ AT,R0,70006F28 ;if ROM < 10000, use the default sound -ADDU V1,V1,V0 -//70006F18: default to solo death music -JAL 70006E7C ;play music track A0 as primary -ADDIU A0,R0,0001 ;A0=track 1 -BEQ R0,R0,70006FC0 -LW RA,001C (SP) -//70006F28: load compressed music file from ROM -LHU V1,3738 (V1) ;V1=80063738+offset: decompressed size, to nearest halword boundry -LUI A2,8006 -ADDU A2,A2,V0 -LHU A2,37B8 (A2) ;A2=800637B8+offset: compressed size, to nearest halword boundry -LUI T0,8006 -ADDIU V1,V1,000F -LW T0,3838 (T0) ;T0=80063838: p->decompression target address -ORI T3,V1,000F -XORI T4,T3,000F -ADDIU A2,A2,000F -ADDIU V1,T4,0040 ;V1=dec.size, to 0x10 boundry + 0x40 -ORI T5,A2,000F -XORI A2,T5,000F -ADDU T7,T0,V1 ;T7=address + suspected size -SUBU A0,T7,A2 ;A0=address + suspected size - comp.size -SW A0,0028 (SP) ;SP+28= address+difference in dec and comp sizes -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0: comp.size from ROM to end of target buffer -SW T0,2140 (SP) ;SP+2140= p->target -LW A0,0028 (SP) ;A0=p->compressed -LW A1,2140 (SP) ;A1=p->decompressed -JAL 7F0CE7F0 ;decompress data A0 to A1, advancing past header -ADDIU A2,SP,0034 ;A2=SP+34 -LUI A0,8006 -LUI A1,8006 -LW A1,3838 (A1) ;A1=80063838: p->music binary -JAL 7001279C -ADDIU A0,A0,3860 ;A0=80063860: -LUI A1,8006 -ADDIU A1,A1,3860 ;A1=80063860: -JAL 70012D00 -LW A0,0000 (S0) ;A0=80063728: music.ctrl.primary -JAL 70007030 -NOP -JAL 7000703C -ANDI A0,V0,FFFF -JAL 70012D40 -LW A0,0000 (S0) ;A0=80063728: music.ctrl.primary -//70006FBC: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,2148 -JR RA -NOP - -70006FD0 7BD0 stop playing primary music track -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero when sound can't be played -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BNE T6,R0,70007020 ;return if can't play sound -LUI T7,8002 -LW T7,4334 (T7) ;T7=80024334: cur.track# -LUI AT,8002 -SW R0,434C (AT) ;0->8002434C: -BEQ T7,R0,70007018 ;branch if track 0: no music -LUI A0,8006 -JAL 70012230 ;V0= TRUE if music playing -LW A0,3728 (A0) ;A0=80063728: p->music.ctrl.primary -ADDIU AT,R0,0001 -BNE V0,AT,70007018 ;branch if not playing -//7000700C: -LUI A0,8006 -JAL 70012D70 -LW A0,3728 (A0) ;A0=80063728: p->music.ctrl.primary -//70007018: kill music: track#=0 -LUI AT,8002 -SW R0,4334 (AT) ;0->80024334: track 0 -//70007020: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70007030 7C30 -LUI V0,8002 -JR RA -LHU V0,4338 (V0) ;V0=80024338: - -7000703C 7C3C - accepts: A0= -LUI T6,8002 -LW T6,4334 (T6) ;T6=80024334: music.track# -LUI T8,8002 -ANDI A2,A0,FFFF -SLL T7,T6,0x1 -ADDU T8,T8,T7 -LH T8,4358 (T8) ;T8=80024358+offset: -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) -MULTU A2,T8 -SW RA,0014 (SP) -LUI AT,8002 -LUI A0,8006 -SH A2,4338 (AT) -LW A0,3728 (A0) ;A0=80063728: p->music.ctrl.primary -MFLO V0 -SRL T9,V0,0xF -SLL A1,T9,0x10 -SRA T0,A1,0x10 -JAL 70012DA0 -OR A1,T0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700070A0 7CA0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70007030 -NOP -LUI T6,8002 -LW T6,4334 (T6) -LUI A0,8002 -ADDIU A0,A0,4358 -SLL T7,T6,0x1 -ADDU T8,A0,T7 -SH V0,0000 (T8) -LH T9,0000 (A0) -LUI V0,8002 -ADDIU V0,V0,4358 -BLTZ T9,700070F0 -LW RA,0014 (SP) -LH T0,0002 (V0) -ADDIU V0,V0,0002 -BGEZL T0,700070E4 -LH T0,0002 (V0) -JR RA -ADDIU SP,SP,0018 - -700070F8 7CF8 -LUI T6,8002 -LW T6,434C (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BLTZ T6,70007158 -SWC1 F12,0018 (SP) -JAL 70007030 -NOP -LUI AT,8006 -SH V0,3844 (AT) -LUI AT,8006 -SH R0,384A (AT) -LUI AT,4270 -MTC1 AT,F6 -LWC1 F4,0018 (SP) -LUI AT,8006 -ADDIU T9,R0,FFFF -MUL.S F8,F4,F6 -TRUNC.W.S F10,F8 -MFC1 T8,F10 -NOP -SW T8,3850 (AT) -LUI AT,8002 -SW T9,434C (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70007168 7D68 -LUI T6,8002 -LW T6,434C (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SWC1 F12,0018 (SP) -BGTZ T6,700071F4 -SW A1,001C (SP) -LUI A0,8006 -JAL 70012D40 -LW A0,3728 (A0) ;A0=80063728: p->music.ctrl.primary -LHU V0,001E (SP) -ORI AT,R0,FFFF -LUI T7,8006 -BNE V0,AT,700071B4 -NOP -LHU T7,3844 (T7) -LUI AT,8006 -BEQ R0,R0,700071BC -SH T7,384A (AT) -LUI AT,8006 -SH V0,384A (AT) -LUI AT,8006 -SH R0,3844 (AT) -LUI AT,4270 -MTC1 AT,F6 -LWC1 F4,0018 (SP) -LUI AT,8006 -ADDIU T0,R0,0001 -MUL.S F8,F4,F6 -TRUNC.W.S F10,F8 -MFC1 T9,F10 -NOP -SW T9,3850 (AT) -LUI AT,8002 -SW T0,434C (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70007204 7E04 - accepts: A0= -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero if sound can't be played -ADDIU SP,SP,DEB8 -SW RA,001C (SP) -SW S0,0018 (SP) -BNE T6,R0,70007344 ;return if sound disabled -SW A0,2148 (SP) -LUI T7,8002 -LW T7,433C (T7) -BEQL T7,R0,7000723C -LW T8,2148 (SP) -JAL 70007358 -NOP -LW T8,2148 (SP) ;T8= A0 f/caller: -LUI S0,8006 -LUI AT,8002 -ADDIU S0,S0,372C -SW T8,433C (AT) -JAL 70012230 ;V0= TRUE if music playing -LW A0,0000 (S0) ;A0=8006372C: p->music.ctrl.secondary -BEQ V0,R0,7000726C -NOP -JAL 70012230 ;V0= TRUE if music playing -LW A0,0000 (S0) ;A0=8006372C: p->music.ctrl.secondary -BNE V0,R0,7000725C -NOP -LUI A3,8002 -LW A3,433C (A3) -LUI T9,8006 -LW T9,3734 (T9) -SLL T1,A3,0x3 -LUI AT,0001 -ADDU T2,T9,T1 -LW A1,0004 (T2) -LUI V1,8006 -SLL V0,A3,0x1 -SLTU AT,A1,AT -BEQ AT,R0,700072B0 -ADDU V1,V1,V0 -JAL 70007204 -ADDIU A0,R0,0001 -BEQ R0,R0,70007348 -LW RA,001C (SP) -LHU V1,3738 (V1) -LUI A2,8006 -ADDU A2,A2,V0 -LHU A2,37B8 (A2) -LUI T0,8006 -ADDIU V1,V1,000F -LW T0,383C (T0) -ORI T3,V1,000F -XORI T4,T3,000F -ADDIU A2,A2,000F -ADDIU V1,T4,0040 -ORI T5,A2,000F -XORI A2,T5,000F -ADDU T7,T0,V1 -SUBU A0,T7,A2 -SW A0,0028 (SP) -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -SW T0,2140 (SP) -LW A0,0028 (SP) -LW A1,2140 (SP) -JAL 7F0CE7F0 ;decompress data A0 to A1, advancing past header -ADDIU A2,SP,0034 -LUI A0,8006 -LUI A1,8006 -LW A1,383C (A1) -JAL 7001279C -ADDIU A0,A0,3958 ;A0= 80063958: -LUI A1,8006 -ADDIU A1,A1,3958 ;A1= 80063958: -JAL 70012D00 -LW A0,0000 (S0) ;A0=8006372C: p->music.ctrl.secondary -JAL 700073B8 -NOP -JAL 700073C4 -ANDI A0,V0,FFFF -JAL 70012D40 -LW A0,0000 (S0) ;A0=8006372C: p->music.ctrl.secondary -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,2148 -JR RA -NOP - -70007358 7F58 -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero if sound can't be played -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BNE T6,R0,700073A8 ;return if sound disabled -//7000736C: -LUI T7,8002 -LW T7,433C (T7) ;T7=8002433C: -LUI AT,8002 -SW R0,4350 (AT) ;0->80024350: -BEQ T7,R0,700073A0 -//70007380: -LUI A0,8006 -JAL 70012230 ;V0= TRUE if music playing -LW A0,372C (A0) ;A0=8006372C: p->music.ctrl.secondary -ADDIU AT,R0,0001 -BNE V0,AT,700073A0 ;skip if music stopped -//70007394: -LUI A0,8006 -JAL 70012D70 -LW A0,372C (A0) ;A0=8006372C: p->music.ctrl.secondary -//700073A0: -LUI AT,8002 -SW R0,433C (AT) ;0->8002433C: -//700073A8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700073B8 7FB8 -LUI V0,8002 -JR RA -LHU V0,4340 (V0) ;V0=80024340: - -700073C4 7FC4 - accepts: A0= -LUI T6,8002 -LW T6,433C (T6) ;T6=8002433C: -LUI T8,8002 -ANDI A2,A0,FFFF -SLL T7,T6,0x1 -ADDU T8,T8,T7 -LH T8,4358 (T8) ;T8=80024358+offset: -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) -MULTU A2,T8 -SW RA,0014 (SP) -LUI AT,8002 -LUI A0,8006 -SH A2,4340 (AT) ;80024340 = A0 f/caller -LW A0,372C (A0) ;A0=8006372C: p->music.ctrl.secondary -MFLO V0 -SRL T9,V0,0xF -SLL A1,T9,0x10 -SRA T0,A1,0x10 -JAL 70012DA0 -OR A1,T0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70007428 8028 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 700073B8 -NOP -LUI T6,8002 -LW T6,433C (T6) -LUI A0,8002 -ADDIU A0,A0,4358 -SLL T7,T6,0x1 -ADDU T8,A0,T7 -SH V0,0000 (T8) -LH T9,0000 (A0) -LUI V0,8002 -ADDIU V0,V0,4358 -BLTZ T9,70007478 -LW RA,0014 (SP) -LH T0,0002 (V0) -ADDIU V0,V0,0002 -BGEZL T0,7000746C -LH T0,0002 (V0) -JR RA -ADDIU SP,SP,0018 - -70007480 8080 -LUI T6,8002 -LW T6,4350 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BLTZ T6,700074E0 -SWC1 F12,0018 (SP) -JAL 700073B8 -NOP -LUI AT,8006 -SH V0,3846 (AT) -LUI AT,8006 -SH R0,384C (AT) -LUI AT,4270 -MTC1 AT,F6 -LWC1 F4,0018 (SP) -LUI AT,8006 -ADDIU T9,R0,FFFF -MUL.S F8,F4,F6 -TRUNC.W.S F10,F8 -MFC1 T8,F10 -NOP -SW T8,3854 (AT) -LUI AT,8002 -SW T9,4350 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700074F0 80F0 -LUI T6,8002 -LW T6,4350 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SWC1 F12,0018 (SP) -BGTZ T6,7000757C -SW A1,001C (SP) -LUI A0,8006 -JAL 70012D40 -LW A0,372C (A0) ;A0=8006372C: p->music.ctrl.secondary -LHU V0,001E (SP) -ORI AT,R0,FFFF -LUI T7,8006 -BNE V0,AT,7000753C -NOP -LHU T7,3846 (T7) -LUI AT,8006 -BEQ R0,R0,70007544 -SH T7,384C (AT) -LUI AT,8006 -SH V0,384C (AT) -LUI AT,8006 -SH R0,3846 (AT) -LUI AT,4270 -MTC1 AT,F6 -LWC1 F4,0018 (SP) -LUI AT,8006 -ADDIU T0,R0,0001 -MUL.S F8,F4,F6 -TRUNC.W.S F10,F8 -MFC1 T9,F10 -NOP -SW T9,3854 (AT) -LUI AT,8002 -SW T0,4350 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000758C 818C -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero if sound can't be played -ADDIU SP,SP,DEB8 -SW RA,001C (SP) -SW S0,0018 (SP) -BNE T6,R0,700076CC ;return if sound disabled -SW A0,2148 (SP) -LUI T7,8002 -LW T7,4344 (T7) -BEQL T7,R0,700075C4 -LW T8,2148 (SP) -JAL 700076E0 -NOP -LW T8,2148 (SP) -LUI S0,8006 -LUI AT,8002 -ADDIU S0,S0,3730 -SW T8,4344 (AT) -JAL 70012230 ;V0= TRUE if music playing -LW A0,0000 (S0) ;A0=80063730: p->music.ctrl.tertiary -BEQ V0,R0,700075F4 -NOP -JAL 70012230 ;V0= TRUE if music playing -LW A0,0000 (S0) ;A0=80063730: p->music.ctrl.tertiary -BNE V0,R0,700075E4 -NOP -LUI A3,8002 -LW A3,4344 (A3) -LUI T9,8006 -LW T9,3734 (T9) -SLL T1,A3,0x3 -LUI AT,0001 -ADDU T2,T9,T1 -LW A1,0004 (T2) -LUI V1,8006 -SLL V0,A3,0x1 -SLTU AT,A1,AT -BEQ AT,R0,70007638 -ADDU V1,V1,V0 -JAL 7000758C -ADDIU A0,R0,0001 -BEQ R0,R0,700076D0 -LW RA,001C (SP) -LHU V1,3738 (V1) -LUI A2,8006 -ADDU A2,A2,V0 -LHU A2,37B8 (A2) -LUI T0,8006 -ADDIU V1,V1,000F -LW T0,3840 (T0) -ORI T3,V1,000F -XORI T4,T3,000F -ADDIU A2,A2,000F -ADDIU V1,T4,0040 -ORI T5,A2,000F -XORI A2,T5,000F -ADDU T7,T0,V1 -SUBU A0,T7,A2 -SW A0,0028 (SP) -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -SW T0,2140 (SP) -LW A0,0028 (SP) -LW A1,2140 (SP) -JAL 7F0CE7F0 ;decompress data A0 to A1, advancing past header -ADDIU A2,SP,0034 -LUI A0,8006 -LUI A1,8006 -LW A1,3840 (A1) -JAL 7001279C -ADDIU A0,A0,3A50 -LUI A1,8006 -ADDIU A1,A1,3A50 -JAL 70012D00 -LW A0,0000 (S0) ;A0=80063730: p->music.ctrl.tertiary -JAL 70007740 -NOP -JAL 7000774C -ANDI A0,V0,FFFF -JAL 70012D40 -LW A0,0000 (S0) ;A0=80063730: p->music.ctrl.tertiary -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,2148 -JR RA -NOP - -700076E0 82E0 -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero if sound can't be played -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BNE T6,R0,70007730 ;return if sound disabled -LUI T7,8002 -LW T7,4344 (T7) -LUI AT,8002 -SW R0,4354 (AT) -BEQ T7,R0,70007728 -LUI A0,8006 -JAL 70012230 ;V0= TRUE if music playing -LW A0,3730 (A0) ;A0=80063730: p->music.ctrl.tertiary -ADDIU AT,R0,0001 -BNE V0,AT,70007728 -LUI A0,8006 -JAL 70012D70 -LW A0,3730 (A0) ;A0=80063730: p->music.ctrl.tertiary -LUI AT,8002 -SW R0,4344 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70007740 8340 -LUI V0,8002 -JR RA -LHU V0,4348 (V0) ;V0=80024348: - -7000774C 834C -LUI T6,8002 -LW T6,4344 (T6) -LUI T8,8002 -ANDI A2,A0,FFFF -SLL T7,T6,0x1 -ADDU T8,T8,T7 -LH T8,4358 (T8) -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) -MULTU A2,T8 -SW RA,0014 (SP) -LUI AT,8002 -LUI A0,8006 -SH A2,4348 (AT) -LW A0,3730 (A0) ;A0=80063730: p->music.ctrl.tertiary -MFLO V0 -SRL T9,V0,0xF -SLL A1,T9,0x10 -SRA T0,A1,0x10 -JAL 70012DA0 -OR A1,T0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700077B0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70007740 -NOP -LUI T6,8002 -LW T6,4344 (T6) -LUI A0,8002 -ADDIU A0,A0,4358 -SLL T7,T6,0x1 -ADDU T8,A0,T7 -SH V0,0000 (T8) -LH T9,0000 (A0) -LUI V0,8002 -ADDIU V0,V0,4358 -BLTZ T9,70007800 -LW RA,0014 (SP) -LH T0,0002 (V0) -ADDIU V0,V0,0002 -BGEZL T0,700077F4 -LH T0,0002 (V0) -JR RA -ADDIU SP,SP,0018 - -70007808 8408 -LUI T6,8002 -LW T6,4354 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BLTZ T6,70007868 -SWC1 F12,0018 (SP) -JAL 70007740 -NOP -LUI AT,8006 -SH V0,3848 (AT) -LUI AT,8006 -SH R0,384E (AT) -LUI AT,4270 -MTC1 AT,F6 -LWC1 F4,0018 (SP) -LUI AT,8006 -ADDIU T9,R0,FFFF -MUL.S F8,F4,F6 -TRUNC.W.S F10,F8 -MFC1 T8,F10 -NOP -SW T8,3858 (AT) -LUI AT,8002 -SW T9,4354 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70007878 8478 -LUI T6,8002 -LW T6,4354 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SWC1 F12,0018 (SP) -BGTZ T6,70007904 -SW A1,001C (SP) -LUI A0,8006 -JAL 70012D40 -LW A0,3730 (A0) ;A0=80063730: p->music.ctrl.tertiary -LHU V0,001E (SP) -ORI AT,R0,FFFF -LUI T7,8006 -BNE V0,AT,700078C4 -NOP -LHU T7,3848 (T7) -LUI AT,8006 -BEQ R0,R0,700078CC -SH T7,384E (AT) -LUI AT,8006 -SH V0,384E (AT) -LUI AT,8006 -SH R0,3848 (AT) -LUI AT,4270 -MTC1 AT,F6 -LWC1 F4,0018 (SP) -LUI AT,8006 -ADDIU T0,R0,0001 -MUL.S F8,F4,F6 -TRUNC.W.S F10,F8 -MFC1 T9,F10 -NOP -SW T9,3858 (AT) -LUI AT,8002 -SW T0,4354 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70007914 8514 -LUI T6,8002 -LW T6,434C (T6) -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -BEQ T6,R0,700079C0 -NOP -JAL 70007030 -NOP -LUI A2,8006 -LUI T7,8006 -LHU T7,384A (T7) -ADDIU A2,A2,3850 -LW T8,0000 (A2) -SUBU A1,T7,V0 -MTC1 A1,F4 -MTC1 T8,F8 -CVT.S.W F6,F4 -CVT.S.W F10,F8 -DIV.S F16,F6,F10 -TRUNC.W.S F18,F16 -MFC1 T0,F18 -NOP -ADDU A0,V0,T0 -ANDI T1,A0,FFFF -OR A0,T1,R0 -JAL 7000703C -SH T1,002E (SP) -LUI A2,8006 -ADDIU A2,A2,3850 -LW T2,0000 (A2) -LHU A0,002E (SP) -ADDIU T3,T2,FFFF -BGTZ T3,700079C0 -SW T3,0000 (A2) -BNE A0,R0,700079B4 -LUI A0,8006 -JAL 70012D70 -LW A0,3728 (A0) ;A0=80063728: p->music.ctrl.primary -LUI A2,8006 -ADDIU A2,A2,3850 -SW R0,0000 (A2) -LUI AT,8002 -SW R0,434C (AT) -LUI T5,8002 -LW T5,4350 (T5) -BEQ T5,R0,70007A64 -NOP -JAL 700073B8 -NOP -LUI A2,8006 -LUI T6,8006 -LHU T6,384C (T6) -ADDIU A2,A2,3854 -LW T7,0000 (A2) -SUBU A1,T6,V0 -MTC1 A1,F4 -MTC1 T7,F6 -CVT.S.W F8,F4 -CVT.S.W F10,F6 -DIV.S F16,F8,F10 -TRUNC.W.S F18,F16 -MFC1 T9,F18 -NOP -ADDU A0,V0,T9 -ANDI T0,A0,FFFF -OR A0,T0,R0 -JAL 700073C4 -SH T0,0026 (SP) -LUI A2,8006 -ADDIU A2,A2,3854 -LW T1,0000 (A2) -LHU A0,0026 (SP) -ADDIU T2,T1,FFFF -BGTZ T2,70007A64 -SW T2,0000 (A2) -BNE A0,R0,70007A58 -LUI A0,8006 -JAL 70012D70 -LW A0,372C (A0) ;A0=8006372C: p->music.ctrl.secondary -LUI A2,8006 -ADDIU A2,A2,3854 -SW R0,0000 (A2) -LUI AT,8002 -SW R0,4350 (AT) -LUI T4,8002 -LW T4,4354 (T4) -BEQL T4,R0,70007B0C -LW RA,0014 (SP) -JAL 70007740 -NOP -LUI A2,8006 -LUI T5,8006 -LHU T5,384E (T5) -ADDIU A2,A2,3858 -LW T6,0000 (A2) -SUBU A1,T5,V0 -MTC1 A1,F4 -MTC1 T6,F8 -CVT.S.W F6,F4 -CVT.S.W F10,F8 -DIV.S F16,F6,F10 -TRUNC.W.S F18,F16 -MFC1 T8,F18 -NOP -ADDU A0,V0,T8 -ANDI T9,A0,FFFF -OR A0,T9,R0 -JAL 7000774C -SH T9,001E (SP) -LUI A2,8006 -ADDIU A2,A2,3858 -LW T0,0000 (A2) -LHU A0,001E (SP) -ADDIU T1,T0,FFFF -BGTZ T1,70007B08 -SW T1,0000 (A2) -BNE A0,R0,70007AFC -LUI A0,8006 -JAL 70012D70 -LW A0,3730 (A0) ;A0=80063730: p->music.ctrl.tertiary -LUI A2,8006 -ADDIU A2,A2,3858 -SW R0,0000 (A2) -LUI AT,8002 -SW R0,4354 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70007B20 8720 -ADDIU SP,SP,FFB0 -SW S2,0028 (SP) -LUI S2,8002 -ADDIU S2,S2,43F0 -SW RA,002C (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -LW T6,0008 (A0) -LW T7,0000 (S2) -ORI T9,R0,80E8 -OR S1,A0,R0 -SW T6,0044 (T7) -LW T8,0000 (S2) -OR A0,R0,R0 -OR A1,R0,R0 -SW R0,003C (T8) -LW T0,0000 (S2) -ADDIU A3,R0,0001 ;A3= 1 block -SW T9,0048 (T0) -LW T1,0000 (S1) -LW A2,000C (S1) -SLL T2,T1,0x6 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW T2,0010 (SP) -LW T3,0000 (S2) -OR A0,R0,R0 -OR A1,R0,R0 -SW V0,0040 (T3) -LW T4,0004 (S1) -LW A2,000C (S1) -ADDIU A3,R0,0001 ;A3= 1 block -SLL T5,T4,0x3 -SUBU T5,T5,T4 -SLL T5,T5,0x2 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW T5,0010 (SP) -LW A0,0000 (S2) -OR A1,V0,R0 -LW A2,0004 (S1) -JAL 700130AC -ADDIU A0,A0,0014 -LW T6,0000 (S2) -LUI AT,8002 -ADDIU S0,R0,0001 -LW T7,0040 (T6) -SW T7,43EC (AT) -LW T8,0000 (S1) -SLTIU AT,T8,0002 -BNEL AT,R0,70007C18 -LW A2,000C (S1) -LW T9,0000 (S2) -SLL T0,S0,0x6 -LW V0,0040 (T9) -ADDU A0,T0,V0 -JAL 7000EAC0 -ADDIU A1,A0,FFC0 -LW T1,0000 (S1) -ADDIU S0,S0,0001 -SLTU AT,S0,T1 -BNEL AT,R0,70007BEC -LW T9,0000 (S2) -LW A2,000C (S1) -ADDIU T2,R0,0007 -SW T2,0010 (SP) ;SP+10= 7 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0002 ;A3= 2 blocks -LUI V1,8006 -ADDIU V1,V1,3BA4 -SW V0,0000 (V1) -LW A2,000C (S1) -ADDIU T3,R0,0007 -SW T3,0010 (SP) ;SP+10 = 7 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0002 ;A3= 2 blocks -LUI V1,8006 -ADDIU V1,V1,3BA4 -LW T4,0000 (V1) -LUI A0,8006 -ADDIU A0,A0,3BA8 -SW V0,0000 (A0) -ADDIU A1,R0,7FFF -SH A1,0000 (T4) -LW T5,0000 (V1) -LW T7,0000 (A0) -ADDIU S0,R0,0003 -LH T6,0000 (T5) -SLL V0,S0,0x1 -SH T6,0000 (T7) -LW T8,0000 (V1) -SH A1,0002 (T8) -LW T9,0000 (V1) -LW T1,0000 (A0) -LH T0,0002 (T9) -SH T0,0002 (T1) -LW T2,0000 (V1) -SH A1,0004 (T2) -LW T3,0000 (V1) -LW T5,0000 (A0) -LH T4,0004 (T3) -SH T4,0004 (T5) -LW T6,0000 (V1) -ADDU T7,T6,V0 -SH A1,0000 (T7) -LW T8,0000 (V1) -LW T1,0000 (A0) -ADDU T9,T8,V0 -LH T0,0000 (T9) -ADDU T2,T1,V0 -SH T0,0000 (T2) -LW T3,0000 (V1) -ADDU T4,T3,V0 -SH A1,0002 (T4) -LW T5,0000 (V1) -LW T8,0000 (A0) -ADDU T6,T5,V0 -LH T7,0002 (T6) -ADDU T9,T8,V0 -SH T7,0002 (T9) -LW T1,0000 (V1) -ADDU T0,T1,V0 -SH A1,0004 (T0) -LW T2,0000 (V1) -LW T5,0000 (A0) -ADDU T3,T2,V0 -LH T4,0004 (T3) -ADDU T6,T5,V0 -LUI T5,8002 -SH T4,0004 (T6) -LW T8,0000 (V1) -ADDU T7,T8,V0 -SH A1,0006 (T7) -LW T9,0000 (V1) -LW T2,0000 (A0) -LUI T8,7000 -ADDU T1,T9,V0 -LH T0,0006 (T1) -ADDU T3,T2,V0 -ADDIU T8,T8,7DDC -SH T0,0006 (T3) -LW T4,0000 (S2) -LW T5,76E0 (T5) -SW T5,0038 (T4) -LW T6,0000 (S2) -SW R0,0000 (T6) -LW T7,0000 (S2) -SW T8,0008 (T7) -LW S0,0000 (S2) -SW S0,0004 (S0) -LW S0,0000 (S2) -LW A0,0038 (S0) -JAL 70013120 -OR A1,S0,R0 -LW S0,0000 (S2) -ADDIU T9,R0,0020 -SH T9,0038 (SP) -ADDIU A1,SP,0038 -LW A2,0048 (S0) -JAL 70012EFC -ADDIU A0,S0,0014 -LW S0,0000 (S2) -ADDIU A0,S0,0014 -JAL 70013020 -ADDIU A1,S0,0028 -LW T1,0000 (S2) -SW V0,004C (T1) -LW RA,002C (SP) -LW S2,0028 (SP) -LW S1,0024 (SP) -LW S0,0020 (SP) -JR RA -ADDIU SP,SP,0050 - -70007DDC 89DC -ADDIU SP,SP,FFB0 -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -OR S0,A0,R0 -SW RA,002C (SP) -ADDIU S1,A0,0028 -ADDIU S2,A0,0014 -ADDIU S3,R0,0020 -ADDIU S4,SP,003C -LH T6,0028 (S0) -ADDIU T7,R0,0020 -OR A1,S4,R0 -BNE S3,T6,70007E38 -OR A0,S0,R0 -SH T7,003C (SP) -LW A2,0048 (S0) -JAL 70012EFC -OR A0,S2,R0 -BEQ R0,R0,70007E44 -OR A0,S2,R0 -JAL 70007E80 -OR A1,S1,R0 -OR A0,S2,R0 -JAL 70013020 -OR A1,S1,R0 -BEQ V0,R0,70007E0C -SW V0,004C (S0) -LW T8,0050 (S0) -ADDU T9,T8,V0 -SW T9,0050 (S0) -LW RA,002C (SP) -LW S4,0028 (SP) -LW S3,0024 (SP) -LW S2,0020 (SP) -LW S1,001C (SP) -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0050 - -70007E80 8A80 -ADDIU SP,SP,FF30 -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S5,002C (SP) -SW S1,001C (SP) -ADDIU T6,R0,0001 -OR S5,A1,R0 -OR S7,A0,R0 -SW RA,003C (SP) -SW S6,0030 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S0,0018 (SP) -SW T6,0080 (SP) -SW R0,007C (SP) -SW R0,0074 (SP) -LW S1,0078 (SP) -ADDIU S8,R0,0001 -LW T7,0074 (SP) -BEQL T7,R0,70007EF4 -LW S1,0004 (S5) -SW S1,00A0 (SP) -LHU T8,0000 (S5) -SH T8,009C (SP) -LW T9,0008 (S5) -ADDIU S5,SP,009C -SW T9,00A4 (SP) -LW S1,0004 (S5) -LW S2,0008 (S1) -BNE S2,R0,70007F10 -ADDIU A0,SP,0072 -JAL 70008AF0 -ADDIU A1,SP,0070 -BEQ R0,R0,7000891C -LW RA,003C (SP) -//70007F10: -LW T0,0000 (S1) -LW S6,0004 (S2) -SW T0,0074 (SP) -LHU V1,0000 (S5) -SLTI AT,V1,0101 -BNE AT,R0,70007F58 -OR V0,V1,R0 -ADDIU AT,R0,0200 -BEQ V0,AT,700088A8 -ADDIU AT,R0,0400 -BEQ V0,AT,70008388 -ADDIU AT,R0,0800 -BEQ V0,AT,70008690 -ADDIU AT,R0,1000 -BEQL V0,AT,7000838C -ADDIU AT,R0,1000 -BEQ R0,R0,700088D8 -ANDI V0,V1,02D1 -//70007F58: -SLTI AT,V0,0041 -BNE AT,R0,70007F7C -ADDIU AT,R0,0080 -BEQ V0,AT,70008890 -ADDIU AT,R0,0100 -BEQL V0,AT,7000854C -LBU T6,003F (S1) -BEQ R0,R0,700088D8 -ANDI V0,V1,02D1 -//70007F7C: -SLTI AT,V0,0011 -BNE AT,R0,70007F9C -ADDIU T1,V0,FFFF -ADDIU AT,R0,0040 -BEQL V0,AT,70008770 -LBU T9,003E (S1) -BEQ R0,R0,700088D8 -ANDI V0,V1,02D1 -//70007F9C: -SLTIU AT,T1,0010 -BEQ AT,R0,700088D4 -SLL T1,T1,0x2 -LUI AT,8003 -ADDU AT,AT,T1 -LW T1,9160 (AT) ;T1=80029160+offset: p->handler -JR T1 -NOP -//70007FBC: -LBU V0,003F (S1) -ADDIU AT,R0,0005 -LUI T3,8002 -BEQ V0,AT,70007FD8 -ADDIU AT,R0,0004 -BNEL V0,AT,7000891C -LW RA,003C (SP) -SH R0,00CA (SP) -LBU T2,0036 (S1) -SB R0,00CC (SP) -LH T3,43F4 (T3) -SH T2,00C8 (SP) -LW T4,0044 (S7) -ADDIU A1,S1,000C -ADDIU A2,SP,00C8 -SLT S0,T3,T4 -XORI S0,S0,0001 -BEQ S0,R0,70008018 -NOP -LBU V1,003E (S1) -ANDI T5,V1,0010 -BEQL T5,R0,7000802C -LW T6,007C (SP) -JAL 70013258 -LW A0,0038 (S7) -SW V0,007C (SP) -LBU V1,003E (S1) -LW T6,007C (SP) -ADDIU S3,S1,000C -ORI T7,V1,0004 -BNE T6,R0,7000814C -OR A1,S3,R0 -ANDI T7,V1,0012 -BNE T7,R0,70008054 -ADDIU T9,R0,0004 -LW T8,0038 (S1) -BLEZ T8,7000807C -NOP -LW T0,0038 (S1) -SB T9,003F (S1) -ADDIU A0,S7,0014 -ADDIU T1,T0,FFFF -SW T1,0038 (S1) -OR A1,S5,R0 -JAL 70012EFC -ORI A2,R0,8235 -BEQ R0,R0,7000891C -LW RA,003C (SP) -BEQ S0,R0,7000813C -LUI V0,8002 -LW V0,43E8 (V0) -ADDIU S4,SP,005C -ADDIU S3,R0,0003 -ADDIU S2,R0,0003 -LBU V1,003E (V0) -ANDI T2,V1,0012 -BNE T2,R0,700080F8 -ANDI T3,V1,0004 -BEQ T3,R0,700080F8 -NOP -LBU T4,003F (V0) -ADDIU T5,R0,0080 -ADDIU A0,S7,0014 -BEQ S2,T4,700080F8 -OR A1,S4,R0 -SH T5,005C (SP) -SW V0,0060 (SP) -SB S3,003F (V0) -OR S0,R0,R0 -SW V0,006C (SP) -JAL 70012EFC -ADDIU A2,R0,03E8 -LW V0,006C (SP) -LW A0,0038 (S7) -OR A2,R0,R0 -ADDIU A3,R0,03E8 -JAL 700133A0 -ADDIU A1,V0,000C -LW V0,006C (SP) -BEQ S0,R0,70008108 -LW V0,0004 (V0) -BNEL V0,R0,70008098 -LBU V1,003E (V0) -BNE S0,R0,7000812C -ADDIU T6,R0,0002 -SW T6,0038 (S1) -ADDIU A0,S7,0014 -OR A1,S5,R0 -JAL 70012EFC -ADDIU A2,R0,03E9 -BEQ R0,R0,7000891C -LW RA,003C (SP) -JAL 70008948 -OR A0,S1,R0 -BEQ R0,R0,7000891C -LW RA,003C (SP) -JAL 70008948 -OR A0,S1,R0 -BEQ R0,R0,7000891C -LW RA,003C (SP) -SB T7,003E (S1) -LW A2,0008 (S2) -LW A0,0038 (S7) -JAL 70013440 -ADDIU S4,S7,0014 -ADDIU T8,R0,0001 -SB T8,003F (S1) -LUI T9,8002 -LH T9,43F4 (T9) -LUI AT,8002 -LUI T3,8006 -ADDIU T0,T9,0001 -SH T0,43F4 (AT) -LW V0,0000 (S2) -LH T0,0034 (S1) -LBU T2,000D (S2) -LBU T9,000C (V0) -LW T1,0000 (V0) -LBU T4,0002 (S6) -MULTU T9,T0 -MTC1 T1,F4 -ANDI T5,T4,003F -ADDIU AT,R0,3F01 -LW T3,3BA4 (T3) -SLL T6,T5,0x1 -CVT.S.W F6,F4 -ADDU T7,T3,T6 -LH T8,0000 (T7) -LWC1 F8,002C (S1) -MFLO T1 -LWC1 F16,0028 (S1) -DIV.S F10,F6,F8 -MULTU T1,T2 -OR A1,S3,R0 -OR A2,R0,R0 -OR A3,R0,R0 -MFLO T4 -NOP -NOP -DIV T4,AT -MFLO T5 -ADDIU AT,R0,7FFF -DIV.S F18,F10,F16 -MULTU T8,T5 -MFLO A0 -NOP -NOP -DIV A0,AT -TRUNC.W.S F4,F18 -MFLO T3 -ADDIU A0,T3,FFFF -OR V1,A0,R0 -MFC1 S0,F4 -BGEZ A0,70008230 -NOP -BEQ R0,R0,70008230 -OR V1,R0,R0 -LW A0,0038 (S7) -JAL 700133A0 -SW V1,0090 (SP) -LW V1,0090 (SP) -LW A0,0038 (S7) -OR A1,S3,R0 -SLL A2,V1,0x10 -SRA T6,A2,0x10 -OR A2,T6,R0 -JAL 700133A0 -OR A3,S0,R0 -LBU T7,003C (S1) -LBU T9,000C (S2) -OR V0,R0,R0 -ADDIU A2,R0,007F -ADDU V1,T7,T9 -ADDIU V1,V1,FFC0 -BLEZ V1,70008284 -OR A1,S3,R0 -BEQ R0,R0,70008284 -OR V0,V1,R0 -SLTI AT,V0,007F -BEQ AT,R0,700082A8 -NOP -BLEZ V1,700082A0 -OR V0,R0,R0 -BEQ R0,R0,700082A8 -ANDI A2,V1,00FF -BEQ R0,R0,700082A8 -ANDI A2,V0,00FF -JAL 700134D0 -LW A0,0038 (S7) -LWC1 F6,002C (S1) -LWC1 F8,0028 (S1) -LW A0,0038 (S7) -OR A1,S3,R0 -MUL.S F10,F6,F8 -MFC1 A2,F10 -JAL 70013560 -NOP -LBU T1,0003 (S6) -LBU T0,003D (S1) -OR A1,S3,R0 -ANDI T2,T1,000F -ADDU V1,T0,T2 -SLL T4,V1,0x3 -BGEZ T4,700082F8 -OR V1,T4,R0 -BEQ R0,R0,700082FC -OR V0,R0,R0 -OR V0,V1,R0 -SLTI AT,V0,0080 -BNE AT,R0,70008310 -NOP -BEQ R0,R0,70008324 -ADDIU V1,R0,007F -BGEZ V1,70008320 -OR V0,V1,R0 -BEQ R0,R0,70008320 -OR V0,R0,R0 -OR V1,V0,R0 -LW A0,0038 (S7) -JAL 700135F0 -ANDI A2,V1,00FF -ADDIU T8,R0,0040 -SH T8,00AC (SP) -SW S1,00B0 (SP) -LW T5,0000 (S2) -LWC1 F4,002C (S1) -LWC1 F8,0028 (S1) -LW T3,0000 (T5) -OR A0,S4,R0 -ADDIU A1,SP,00AC -MTC1 T3,F16 -NOP -CVT.S.W F18,F16 -DIV.S F6,F18,F4 -DIV.S F10,F6,F8 -TRUNC.W.S F16,F10 -MFC1 A2,F16 -JAL 70012EFC -NOP -LHU V0,0000 (S5) -ANDI T7,V0,02D1 -BEQ R0,R0,700088D8 -OR V0,T7,R0 -ADDIU AT,R0,1000 -BNEL V1,AT,700083A8 -LBU V0,003F (S1) -LBU T9,003E (S1) -ANDI T1,T9,0002 -BEQ T1,R0,70008474 -NOP -LBU V0,003F (S1) -ADDIU S4,S7,0014 -OR A0,S4,R0 -BEQ V0,S8,700083D4 -OR A1,S1,R0 -ADDIU AT,R0,0004 -BEQ V0,AT,70008454 -ADDIU AT,R0,0005 -BEQ V0,AT,70008454 -NOP -BEQ R0,R0,70008464 -ADDIU AT,R0,0002 -JAL 70008A30 -ADDIU A2,R0,0040 -LW T0,0000 (S2) -LWC1 F6,0028 (S1) -LWC1 F10,002C (S1) -LW T2,0008 (T0) -LW A0,0038 (S7) -ADDIU A1,S1,000C -MTC1 T2,F18 -OR A2,R0,R0 -CVT.S.W F4,F18 -DIV.S F8,F4,F6 -DIV.S F16,F8,F10 -TRUNC.W.S F18,F16 -MFC1 S0,F18 -JAL 700133A0 -OR A3,S0,R0 -BEQ S0,R0,70008444 -ADDIU T8,R0,0080 -SH T8,00AC (SP) -SW S1,00B0 (SP) -OR A0,S4,R0 -ADDIU A1,SP,00AC -JAL 70012EFC -OR A2,S0,R0 -ADDIU T5,R0,0002 -BEQ R0,R0,7000844C -SB T5,003F (S1) -JAL 70008948 -OR A0,S1,R0 -BEQ R0,R0,70008460 -LHU V1,0000 (S5) -JAL 70008948 -OR A0,S1,R0 -LHU V1,0000 (S5) -ADDIU AT,R0,0002 -BNE V1,AT,70008474 -ADDIU T3,R0,1000 -SH T3,0000 (S5) -ANDI V1,T3,FFFF -BEQ R0,R0,700088D8 -ANDI V0,V1,02D1 -LBU T7,003F (S1) -LW T6,0008 (S5) -ADDIU A1,S1,000C -BNE S8,T7,700084E0 -SB T6,003C (S1) -LBU T1,000C (S2) -ANDI T9,T6,00FF -OR V0,R0,R0 -ADDU V1,T9,T1 -ADDIU V1,V1,FFC0 -BLEZ V1,700084B4 -ADDIU A2,R0,007F -BEQ R0,R0,700084B4 -OR V0,V1,R0 -SLTI AT,V0,007F -BEQ AT,R0,700084D8 -NOP -BLEZ V1,700084D0 -OR V0,R0,R0 -BEQ R0,R0,700084D8 -ANDI A2,V1,00FF -BEQ R0,R0,700084D8 -ANDI A2,V0,00FF -JAL 700134D0 -LW A0,0038 (S7) -LHU V0,0000 (S5) -ANDI T0,V0,02D1 -BEQ R0,R0,700088D8 -OR V0,T0,R0 -LBU T2,003F (S1) -LWC1 F4,0008 (S5) -BNE S8,T2,70008538 -SWC1 F4,002C (S1) -LWC1 F6,002C (S1) -LWC1 F8,0028 (S1) -LW A0,0038 (S7) -ADDIU A1,S1,000C -MUL.S F10,F6,F8 -MFC1 A2,F10 -JAL 70013560 -NOP -LBU T4,003E (S1) -ANDI T8,T4,0020 -BEQL T8,R0,7000853C -LHU V0,0000 (S5) -JAL 700089C4 -OR A0,S1,R0 -LHU V0,0000 (S5) -ANDI T5,V0,02D1 -BEQ R0,R0,700088D8 -OR V0,T5,R0 -LBU T6,003F (S1) -LW T3,0008 (S5) -ADDIU A1,S1,000C -BNE S8,T6,700085B8 -SB T3,003D (S1) -LBU T9,0003 (S6) -ANDI T7,T3,00FF -ANDI T1,T9,000F -ADDU V1,T7,T1 -SLL T0,V1,0x3 -BGEZ T0,70008580 -OR V1,T0,R0 -BEQ R0,R0,70008584 -OR V0,R0,R0 -OR V0,V1,R0 -SLTI AT,V0,0080 -BNE AT,R0,70008598 -NOP -BEQ R0,R0,700085AC -ADDIU V1,R0,007F -BGEZ V1,700085A8 -OR V0,V1,R0 -BEQ R0,R0,700085A8 -OR V0,R0,R0 -OR V1,V0,R0 -LW A0,0038 (S7) -JAL 700135F0 -ANDI A2,V1,00FF -LHU V0,0000 (S5) -ANDI T2,V0,02D1 -BEQ R0,R0,700088D8 -OR V0,T2,R0 -LBU T8,003F (S1) -LW T4,0008 (S5) -ADDIU A1,S1,000C -BNE S8,T8,70008680 -SH T4,0034 (S1) -LW T0,0000 (S2) -LH T4,0034 (S1) -LBU T3,0002 (S6) -LBU T2,000D (T0) -ADDIU AT,R0,3F01 -ANDI T6,T3,003F -MULTU T2,T4 -LBU T3,000D (S2) -SLL T9,T6,0x1 -LUI T5,8006 -LW T5,3BA4 (T5) -ADDIU A3,R0,03E8 -ADDU T7,T5,T9 -LH T1,0000 (T7) -MFLO T8 -NOP -NOP -MULTU T8,T3 -MFLO T6 -NOP -NOP -DIV T6,AT -MFLO T5 -ADDIU AT,R0,7FFF -NOP -MULTU T1,T5 -MFLO A0 -NOP -NOP -DIV A0,AT -MFLO T9 -ADDIU A0,T9,FFFF -BGEZ A0,7000866C -OR V1,A0,R0 -BEQ R0,R0,7000866C -OR V1,R0,R0 -SLL A2,V1,0x10 -SRA T7,A2,0x10 -OR A2,T7,R0 -JAL 700133A0 -LW A0,0038 (S7) -LHU V0,0000 (S5) -ANDI T0,V0,02D1 -BEQ R0,R0,700088D8 -OR V0,T0,R0 -LBU T2,003F (S1) -ADDIU A1,S1,000C -BNE S8,T2,70008764 -NOP -LW V0,0000 (S2) -LH T2,0034 (S1) -LBU T8,000D (S2) -LBU T0,000D (V0) -LW T4,0008 (V0) -LBU T6,0002 (S6) -MULTU T0,T2 -MTC1 T4,F16 -ANDI T1,T6,003F -ADDIU AT,R0,3F01 -LUI T3,8006 -LW T3,3BA4 (T3) -SLL T5,T1,0x1 -CVT.S.W F18,F16 -ADDU T9,T3,T5 -LH T7,0000 (T9) -MFLO T4 -LWC1 F4,0028 (S1) -LWC1 F8,002C (S1) -MULTU T4,T8 -DIV.S F6,F18,F4 -MFLO T6 -NOP -NOP -DIV T6,AT -MFLO T1 -ADDIU AT,R0,7FFF -DIV.S F10,F6,F8 -MULTU T7,T1 -MFLO A0 -NOP -NOP -DIV A0,AT -TRUNC.W.S F16,F10 -MFLO T3 -ADDIU A0,T3,FFFF -OR V1,A0,R0 -MFC1 S0,F16 -BGEZ A0,70008748 -NOP -BEQ R0,R0,70008748 -OR V1,R0,R0 -SLL A2,V1,0x10 -SRA T5,A2,0x10 -OR A2,T5,R0 -LW A0,0038 (S7) -JAL 700133A0 -OR A3,S0,R0 -LHU V1,0000 (S5) -BEQ R0,R0,700088D8 -ANDI V0,V1,02D1 -LBU T9,003E (S1) -ANDI T0,T9,0002 -BNEL T0,R0,70008884 -LHU V0,0000 (S5) -LW V0,0000 (S2) -LH T5,0034 (S1) -LBU T0,000D (S2) -LBU T3,000D (V0) -LBU T4,0002 (S6) -ADDIU AT,R0,3F01 -MULTU T3,T5 -ANDI T8,T4,003F -LUI T2,8006 -LW T2,3BA4 (T2) -SLL T6,T8,0x1 -ADDIU S4,S7,0014 -ADDU T7,T2,T6 -LH T1,0000 (T7) -MFLO T9 -NOP -NOP -MULTU T9,T0 -MFLO T4 -NOP -NOP -DIV T4,AT -MFLO T8 -ADDIU AT,R0,7FFF -NOP -MULTU T1,T8 -MFLO A0 -NOP -NOP -DIV A0,AT -MFLO T2 -ADDIU A0,T2,FFFF -BGEZ A0,7000880C -OR V1,A0,R0 -BEQ R0,R0,7000880C -OR V1,R0,R0 -LW T6,0004 (V0) -LWC1 F6,0028 (S1) -LWC1 F10,002C (S1) -MTC1 T6,F18 -SLL A2,V1,0x10 -SRA T3,A2,0x10 -CVT.S.W F4,F18 -OR A2,T3,R0 -LW A0,0038 (S7) -ADDIU A1,S1,000C -DIV.S F8,F4,F6 -DIV.S F16,F8,F10 -TRUNC.W.S F18,F16 -MFC1 S0,F18 -JAL 700133A0 -OR A3,S0,R0 -ADDIU T5,R0,0002 -SH T5,00AC (SP) -SW S1,00B0 (SP) -OR A0,S4,R0 -ADDIU A1,SP,00AC -JAL 70012EFC -OR A2,S0,R0 -LBU T9,003E (S1) -ANDI T0,T9,0020 -BEQL T0,R0,70008884 -LHU V0,0000 (S5) -JAL 700089C4 -OR A0,S1,R0 -LHU V0,0000 (S5) -ANDI T4,V0,02D1 -BEQ R0,R0,700088D8 -OR V0,T4,R0 -JAL 70008948 -OR A0,S1,R0 -LHU V0,0000 (S5) -ANDI T1,V0,02D1 -BEQ R0,R0,700088D8 -OR V0,T1,R0 -LBU T8,003E (S1) -ANDI T2,T8,0010 -BEQ T2,R0,700088CC -NOP -LW A0,000C (S5) -LH A1,000A (S5) -JAL 70008E08 ;sets sound effect A1 using instance A2 in buffer A0 -LW A2,0030 (S1) -LHU V1,0000 (S5) -BEQ R0,R0,700088D8 -ANDI V0,V1,02D1 -ANDI V0,V1,02D1 -LW V1,0074 (SP) -BEQ V1,R0,700088F8 -OR S1,V1,R0 -BNEL V0,R0,700088FC -LW T3,0080 (SP) -LBU T6,003E (V1) -ANDI T7,T6,0001 -SW T7,0080 (SP) -LW T3,0080 (SP) -BNEL T3,R0,7000891C -LW RA,003C (SP) -BEQL V1,R0,7000891C -LW RA,003C (SP) -BEQL V0,R0,70007ED0 -LW T7,0074 (SP) -SW S1,0078 (SP) -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,00D0 - -70008948 9548 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -LBU T7,003E (A0) -OR T6,A0,R0 -LUI T9,8002 -ANDI T8,T7,0004 -BEQ T8,R0,70008994 -NOP -LW T9,43F0 (T9) -ADDIU A1,T6,000C -LW A0,0038 (T9) -JAL 70013690 -SW A1,001C (SP) -LUI T0,8002 -LW T0,43F0 (T0) -LW A1,001C (SP) -JAL 70013710 -LW A0,0038 (T0) -JAL 70008D04 -LW A0,0020 (SP) -LUI A0,8002 -LW A0,43F0 (A0) -LW A1,0020 (SP) -ORI A2,R0,FFFF -JAL 70008A30 -ADDIU A0,A0,0014 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -700089C4 95C4 -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -LW T6,0008 (A0) -OR A3,A0,R0 -LW T7,0004 (T6) -LB A0,0005 (T7) -JAL 700137C0 -SW A3,0030 (SP) -LW A3,0030 (SP) -LUI A0,8002 -LW A0,43F0 (A0) -LWC1 F4,002C (A3) -ADDIU T8,R0,0010 -SH T8,0020 (SP) -MUL.S F6,F0,F4 -ADDIU A1,SP,0020 -ORI A2,R0,8235 -SW A3,0024 (SP) -ADDIU A0,A0,0014 -SWC1 F6,001C (SP) -LW T9,001C (SP) -JAL 70012EFC -SW T9,0028 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70008A30 9630 -ADDIU SP,SP,FFB8 -SW S2,0020 (SP) -OR S2,A0,R0 -SW RA,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -OR S3,A1,R0 -ANDI S4,A2,FFFF -SW S1,001C (SP) -SW S0,0018 (SP) -SW A2,0050 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ADDIU A0,R0,0001 -SW V0,0030 (SP) -LW S0,0008 (S2) -BEQ S0,R0,70008AC8 -NOP -LW T6,0010 (S0) -LW S1,0000 (S0) -BNE S3,T6,70008AC0 -NOP -LHU T7,000C (S0) -AND T8,T7,S4 -BEQ T8,R0,70008AC0 -NOP -BEQ S1,R0,70008AAC -NOP -LW T9,0008 (S1) -LW T0,0008 (S0) -ADDU T1,T9,T0 -SW T1,0008 (S1) -JAL 7000EA90 -OR A0,S0,R0 -OR A0,S0,R0 -JAL 7000EAC0 -OR A1,S2,R0 -BNE S1,R0,70008A74 -OR S0,S1,R0 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -LW A0,0030 (SP) -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0048 - -70008AF0 96F0 -LUI T0,8002 -ADDIU T0,T0,43E4 -LW V0,0000 (T0) -SW A0,0000 (SP) -LW V1,0008 (T0) -LW A2,0004 (T0) -BEQ V0,R0,70008B24 -OR A3,R0,R0 -LW V0,0000 (V0) -ADDIU A3,A3,0001 -ANDI T6,A3,FFFF -BNE V0,R0,70008B10 -OR A3,T6,R0 -BEQ V1,R0,70008B40 -OR A0,R0,R0 -LW V1,0000 (V1) -ADDIU A0,A0,0001 -ANDI T7,A0,FFFF -BNE V1,R0,70008B2C -OR A0,T7,R0 -BEQ A2,R0,70008B5C -OR V1,R0,R0 -LW A2,0004 (A2) -ADDIU V1,V1,0001 -ANDI T8,V1,FFFF -BNE A2,R0,70008B48 -OR V1,T8,R0 -LW T9,0000 (SP) -OR V0,V1,R0 -SH A0,0000 (T9) -JR RA -SH A3,0000 (A1) - -70008B70 9770 - accepts: A0=sound data offset?, A1=sample address? -ADDIU SP,SP,FFC8 -LUI V1,8002 -ADDIU V1,V1,43E4 -SW S0,0018 (SP) -LW S0,0008 (V1) -SW RA,001C (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -BEQ S0,R0,70008CF0 -LW A2,0004 (A1) -ADDIU A0,R0,0001 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW A2,0030 (SP) -SW V0,0028 (SP) -LW T7,0000 (S0) -LUI V1,8002 -ADDIU V1,V1,43E4 -OR A0,S0,R0 -JAL 7000EA90 -SW T7,0008 (V1) -LUI V1,8002 -ADDIU V1,V1,43E4 -LW V0,0000 (V1) -LW A2,0030 (SP) -BEQL V0,R0,70008BF4 -SW R0,0004 (S0) -SW V0,0000 (S0) -SW R0,0004 (S0) -LW T8,0000 (V1) -SW S0,0004 (T8) -BEQ R0,R0,70008C00 -SW S0,0000 (V1) -SW R0,0004 (S0) -SW R0,0000 (S0) -SW S0,0000 (V1) -SW S0,0004 (V1) -LW A0,0028 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW A2,0030 (SP) -LW A0,003C (SP) -LW A2,0030 (SP) -LUI AT,3F80 -LW T9,0000 (A0) -MTC1 AT,F4 -ADDIU T1,R0,0005 -LW V1,0004 (T9) -ADDIU T2,R0,0002 -SB T1,003F (S0) -ADDIU T0,V1,0001 -SLTIU T0,T0,0001 -ADDIU A1,T0,0040 -SB A1,0036 (S0) -SW T2,0038 (S0) -SW A0,0008 (S0) -SWC1 F4,002C (S0) -LBU T3,0003 (A2) -SW R0,0030 (S0) -ANDI T5,T3,00F0 -ANDI T6,T5,0020 -BEQ T6,R0,70008C94 -SB T5,003E (S0) -LBU A0,0004 (A2) -SW A1,0024 (SP) -SLL T7,A0,0x2 -SUBU T7,T7,A0 -SLL T7,T7,0x3 -ADDU T7,T7,A0 -SLL T7,T7,0x2 -JAL 700137C0 -ADDIU A0,T7,E890 -LW A1,0024 (SP) -BEQ R0,R0,70008CC8 -SWC1 F0,0028 (S0) -LBU T8,0004 (A2) -LB T0,0005 (A2) -SW A1,0024 (SP) -SLL T9,T8,0x2 -SUBU T9,T9,T8 -SLL T9,T9,0x3 -ADDU T9,T9,T8 -SLL T9,T9,0x2 -ADDU A0,T9,T0 -JAL 700137C0 -ADDIU A0,A0,E890 -LW A1,0024 (SP) -SWC1 F0,0028 (S0) -ADDIU AT,R0,0040 -BEQ A1,AT,70008CE0 -ADDIU T3,R0,0040 -LBU T1,003E (S0) -ORI T2,T1,0002 -SB T2,003E (S0) -ADDIU T4,R0,7FFF -SB R0,003D (S0) -SB T3,003C (S0) -SH T4,0034 (S0) -LW RA,001C (SP) -OR V0,S0,R0 -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0038 - -70008D04 9904 -LUI V0,8002 -ADDIU V0,V0,43E4 -LW T6,0000 (V0) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BNEL A0,T6,70008D2C -LW T8,0004 (V0) -LW T7,0000 (A0) -SW T7,0000 (V0) -LW T8,0004 (V0) -BNE A0,T8,70008D3C -NOP -LW T9,0004 (A0) -SW T9,0004 (V0) -JAL 7000EA90 -SW A0,0018 (SP) -LUI V0,8002 -ADDIU V0,V0,43E4 -LW V1,0008 (V0) -LW A0,0018 (SP) -BEQL V1,R0,70008D78 -SW R0,0004 (A0) -SW V1,0000 (A0) -SW R0,0004 (A0) -LW T0,0008 (V0) -SW A0,0004 (T0) -BEQ R0,R0,70008D80 -SW A0,0008 (V0) -SW R0,0004 (A0) -SW R0,0000 (A0) -SW A0,0008 (V0) -LBU T1,003E (A0) -LUI V0,8002 -ADDIU V0,V0,43F4 -ANDI T2,T1,0004 -BEQL T2,R0,70008DA8 -LW V0,0030 (A0) -LH T3,0000 (V0) -ADDIU T4,T3,FFFF -SH T4,0000 (V0) -LW V0,0030 (A0) -SB R0,003F (A0) -BEQL V0,R0,70008DCC -LW RA,0014 (SP) -LW T5,0000 (V0) -BNEL A0,T5,70008DC8 -SW R0,0030 (A0) -SW R0,0000 (V0) -SW R0,0030 (A0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70008DD8 99D8 - accepts: A0=p->SE buffer, A1=value -SW A1,0004 (SP) -BEQ A0,R0,70008DE8 -ANDI T6,A1,00FF -SB T6,0036 (A0) -JR RA -NOP - -70008DF0 99F0 V0= TRUE if SE playing flag set [A0+0x3F] - accepts: A0=p->SE buffer -BEQ A0,R0,70008E00 ;return if A0 NULL -OR V0,R0,R0 -JR RA -LBU V0,003F (A0) -//70008DE0: -JR RA -NOP - -70008E08 9A08 sets sound effect A1 using instance A2 in buffer A0 - accepts: A0=p->SE buffer, A1=effect#, A2=p->SE instance - SE instance is as follows: - 0x0 4 p->SE entry - 0x4 4 target volume - 0x8 4 audible range (timer) - 0xC 4 initial volume - 0x10 4 p->preset emitting sound - 0x14 4 p->object emitting sound -ADDIU SP,SP,FF80 -LUI T7,8002 -LB T7,43F8 (T7) ;T7=800243F8: nonzero if sound can't be played -SW S1,001C (SP) -SLL S1,A1,0x10 -SRA T6,S1,0x10 -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S4,0028 (SP) -OR S8,A0,R0 -OR S1,T6,R0 -SW RA,003C (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S0,0018 (SP) -SW A1,0084 (SP) -SW A2,0088 (SP) -OR S7,R0,R0 -SH R0,006E (SP) -BEQ T7,R0,70008E6C -OR S4,R0,R0 -BEQ R0,R0,70008FF0 ;return 0 if sound disabled -OR V0,R0,R0 -//70008E6C: -BNE S1,R0,70008E7C -ADDIU S6,SP,0050 -BEQ R0,R0,70008FF0 -OR V0,R0,R0 -//70008E7C: -LUI S5,8002 -ADDIU S5,S5,43F0 -LW S3,0064 (SP) -LW T8,000C (S8) -SLL T9,S1,0x2 -OR A0,S8,R0 -ADDU T0,T8,T9 -LW S2,000C (T0) -JAL 70008B70 -OR A1,S2,R0 -BEQ V0,R0,70008F48 -OR S0,V0,R0 -LW T1,0000 (S5) -ADDIU T2,R0,0001 -OR A1,S6,R0 -SW V0,003C (T1) -SH T2,0050 (SP) -SW V0,0054 (SP) -LW T3,0004 (S2) -LBU T5,003E (V0) -LBU S3,0001 (T3) -ANDI T6,T5,0010 -SLL T4,S3,0x6 -ADDU T4,T4,S3 -SLL T4,T4,0x3 -ADDU T4,T4,S3 -SLL T4,T4,0x2 -SUBU T4,T4,S3 -SLL T4,T4,0x2 -ADDU T4,T4,S3 -SLL T4,T4,0x2 -ADDU T4,T4,S3 -BEQ T6,R0,70008F34 -OR S3,T4,R0 -LBU T7,003E (V0) -OR A1,S6,R0 -ADDIU A2,S4,0001 -ANDI T8,T7,FFEF -SB T8,003E (V0) -LW A0,0000 (S5) -JAL 70012EFC -ADDIU A0,A0,0014 -ADDIU T9,S3,0001 -SW T9,0068 (SP) -BEQ R0,R0,70008F44 -SH S1,006E (SP) -LW A0,0000 (S5) -ADDIU A2,S3,0001 -JAL 70012EFC -ADDIU A0,A0,0014 -OR S7,S0,R0 -LW V0,0004 (S2) -ADDU S4,S4,S3 -LBU T1,0002 (V0) -LBU T0,0000 (V0) -ANDI T2,T1,00C0 -SLL T3,T2,0x2 -ADDU S1,T0,T3 -SLL T4,S1,0x10 -SRA S1,T4,0x10 -BEQ S1,R0,70008F80 -NOP -BNEL S0,R0,70008E8C -LW T8,000C (S8) -SW S3,0064 (SP) -BEQL S7,R0,70008FE0 -LW T4,0088 (SP) -LBU T6,003E (S7) -ADDIU T0,R0,0200 -ADDIU A1,SP,0040 -ORI T7,T6,0001 -SB T7,003E (S7) -LW T8,0088 (SP) -ORI T2,T7,0010 -SW T8,0030 (S7) -LH T9,006E (SP) -BEQL T9,R0,70008FE0 -LW T4,0088 (SP) -SB T2,003E (S7) -LH T3,006E (SP) -LW A0,0000 (S5) -SH T0,0040 (SP) -SW S7,0044 (SP) -SW S8,004C (SP) -LW A2,0068 (SP) -SW T3,0048 (SP) -JAL 70012EFC -ADDIU A0,A0,0014 -LW T4,0088 (SP) -OR V0,S7,R0 -BEQ T4,R0,70008FF0 -NOP -SW S7,0000 (T4) -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0080 - -70009020 9C20 decativates sound effect - accepts: A0=p->SE buffer -ADDIU SP,SP,FFD8 -ADDIU T6,R0,0400 -SW RA,0014 (SP) -SH T6,0018 (SP) -BEQ A0,R0,7000905C -SW A0,001C (SP) -LBU T7,003E (A0) -ADDIU A1,SP,0018 -OR A2,R0,R0 -ANDI T8,T7,FFEF -SB T8,003E (A0) -LUI A0,8002 -LW A0,43F0 (A0) -JAL 70012EFC -ADDIU A0,A0,0014 -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000906C 9C6C -ADDIU SP,SP,FFB0 -SW S2,0020 (SP) -ANDI S2,A0,00FF -SW RA,002C (SP) -SW A0,0050 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ADDIU A0,R0,0001 -LUI S0,8002 -LW S0,43E4 (S0) -SW V0,004C (SP) -OR S1,S2,R0 -BEQ S0,R0,700090FC -ADDIU S4,SP,003C -LUI S3,8002 -ADDIU S3,S3,43F0 -ADDIU S2,R0,FFEF -ADDIU T6,R0,0400 -SH T6,003C (SP) -SW S0,0040 (SP) -LBU V0,003E (S0) -OR A1,S4,R0 -AND T7,V0,S1 -BNE S1,T7,700090F0 -AND T8,V0,S2 -SB T8,003E (S0) -LW A0,0000 (S3) -OR A2,R0,R0 -JAL 70012EFC -ADDIU A0,A0,0014 -LW S0,0000 (S0) -BNEL S0,R0,700090C0 -ADDIU T6,R0,0400 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -LW A0,004C (SP) -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0050 - -70009124 9D24 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000906C -ADDIU A0,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009144 9D44 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000906C -ADDIU A0,R0,0011 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009164 9D64 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000906C -ADDIU A0,R0,0003 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009184 9D84 -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A1,002C (SP) -SH A1,0018 (SP) -SW A0,001C (SP) -BEQ A0,R0,700091B8 -SW A2,0020 (SP) -LUI A0,8002 -LW A0,43F0 (A0) -ADDIU A1,SP,0018 -OR A2,R0,R0 -JAL 70012EFC -ADDIU A0,A0,0014 -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -700091C8 9DC8 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70009264 -OR A0,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700091E8 9DE8 -ADDIU SP,SP,FFE0 -SW S1,0018 (SP) -SW S0,0014 (SP) -ANDI S1,A0,FFFF -SW RA,001C (SP) -SW A0,0020 (SP) -OR S0,R0,R0 -ANDI A0,S0,00FF -JAL 70009284 -ANDI A1,S1,FFFF -ADDIU S0,S0,0001 -ANDI T6,S0,00FF -SLTI AT,T6,0007 -BNE AT,R0,70009204 -OR S0,T6,R0 -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -70009238 9E38 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,8002 -JAL 700091C8 -SWC1 F12,43FC (AT) -JAL 700091E8 -ANDI A0,V0,FFFF -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009264 9E64 -LUI T7,8006 -LW T7,3BA8 (T7) -ANDI T6,A0,00FF -SLL T8,T6,0x1 -SW A0,0000 (SP) -ADDU T9,T7,T8 -JR RA -LHU V0,0000 (T9) - -70009284 9E84 -ADDIU SP,SP,FFB8 -LUI T7,8006 -LW T7,3BA8 (T7) -SW S3,0020 (SP) -ANDI S3,A0,00FF -SW S0,0014 (SP) -ANDI T6,A1,FFFF -MTC1 T6,F4 -LUI S0,8002 -SLL V0,S3,0x1 -SW RA,0024 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW A0,0048 (SP) -SW A1,004C (SP) -LW S0,43E4 (S0) -ADDU T8,T7,V0 -SH T6,0000 (T8) -BGEZ T6,700092E4 -CVT.S.W F6,F4 -LUI AT,4F80 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -LUI AT,8002 -LWC1 F10,43FC (AT) -LUI T1,8006 -LW T1,3BA4 (T1) -MUL.S F16,F6,F10 -LUI S1,8002 -ADDU T2,T1,V0 -ADDIU S1,S1,43F0 -ADDIU S2,SP,0030 -TRUNC.W.S F18,F16 -MFC1 T0,F18 -BEQ S0,R0,70009364 -SH T0,0000 (T2) -LW V0,0008 (S0) -BEQL V0,R0,7000935C -LW S0,0000 (S0) -LW T3,0004 (V0) -ADDIU T6,R0,0800 -OR A1,S2,R0 -LBU T4,0002 (T3) -OR A2,R0,R0 -ANDI T5,T4,003F -BNEL S3,T5,7000935C -LW S0,0000 (S0) -LW A0,0000 (S1) -SH T6,0030 (SP) -SW S0,0034 (SP) -JAL 70012EFC -ADDIU A0,A0,0014 -LW S0,0000 (S0) -BNEL S0,R0,7000931C -LW V0,0008 (S0) -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0048 - -70009380 9F80 V0=p->debug.notice.list entry for memp_c_debug -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -LUI A1,8003 -ADDIU A1,A1,91A0 ;A1=800291A0: "memp_c_debug" -JAL 70004E60 ;V0=p->debug.notice.list entry for name A1 and data A0 -ADDIU A0,A0,4400 ;A0=80024400 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700093AC 9FAC initialize memory allocation table and set font and text bank sizes - accepts: A0=p->buffer, A1=size -LUI V0,8006 -ADDIU V0,V0,3BB0 ;V0=80063BB0: mem.tbl -ADDIU SP,SP,FFC0 -ADDU T7,A0,A1 ;T7=buffer+size: p->end of buffer -LUI T9,8002 -SW RA,0014 (SP) -SW A1,0044 (SP) -SW A0,0000 (V0) ;A0->mem.tbl.start: set buffer.start -SW T7,0008 (V0) ;T7->mem.tbl.end: set buffer.end -ADDIU T9,T9,4414 ;T9=80024414: default allocations for each block -LW AT,0000 (T9) -LW T1,0004 (T9) -ADDIU T8,SP,0020 -SW AT,0000 (T8) ;80024414+0 -> SP+20: mf.bank [2] -SW T1,0004 (T8) ;80024414+4 -> SP+24: mf.alloc [0] -LW T1,000C (T9) -LW AT,0008 (T9) -LUI A1,8003 -SW T1,000C (T8) ;80024414+C -> SP+2C: ml.alloc [52] -SW AT,0008 (T8) ;80024414+8 -> SP+28: ml.bank [4] -LW AT,0010 (T9) -LW T1,0014 (T9) -ADDIU A1,A1,91B0 ;A1=800291B0: "-mf" -SW AT,0010 (T8) ;80024414+10-> SP+30: me.bank [6] -SW T1,0014 (T8) ;80024414+14-> SP+34: me.alloc [F] -LW T1,001C (T9) -LW AT,0018 (T9) -ADDIU A0,R0,0001 ;A0=1st instance -SW T1,001C (T8) ;80024414+1C-> SP+3C: None.alloc [0] -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -SW AT,0018 (T8) ;80024414+18-> SP+38: None.bank [0] -BEQ V0,R0,70009450 -ADDIU A0,R0,0001 ;A0=1st instance -//70009430: if "-mf" found, grab the allocation value -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,91B4 ;A1=800291B4: "-mf" -OR A0,V0,R0 ;A0=V0: p->value -OR A1,R0,R0 ;A1=NULL -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=default base -SW V0,0024 (SP) ;SP+24= mf.alloc -//70009450: search for "-ml" -LUI A1,8003 -ADDIU A1,A1,91B8 ;A1=800291B8: "-ml" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1st instance -BEQ V0,R0,70009488 -ADDIU A0,R0,0001 ;A0=1st instance -//70009468: if "-ml" found, grab the allocation value -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,91BC ;A1=800291BC: "-ml" -OR A0,V0,R0 -OR A1,R0,R0 ;A1=NULL -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=default base -SW V0,002C (SP) ;SP+2C= ml.alloc -//70009488: search for "-me" -LUI A1,8003 -ADDIU A1,A1,91C0 ;A1=800291C0: "-me" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1st instance -BEQ V0,R0,700094C0 -ADDIU A0,R0,0001 ;A0=1st instance -//700094A0: if "-me" found, grab the allocation value -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,91C4 ;A1=800291C4: "-me" -OR A0,V0,R0 -OR A1,R0,R0 ;A1=NULL -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=default base -SW V0,0034 (SP) ;SP+34= me.alloc -//700094C0: If me.alloc is zero... -LW V1,0034 (SP) ;V1=me.alloc -LUI T2,8005 -BNE V1,R0,700094FC ;if set, no correction needed -NOP -//700094D0: ...fry mf.alloc and select font/text bank size for current language... -LW T2,84D0 (T2) ;T2=800484D0: language -SW R0,0024 (SP) ;0->mf.alloc -ADDIU V0,R0,0128 -BEQ T2,R0,700094EC ;if english (0), V0=128: fonttxtsize -LW T3,0044 (SP) ;T3=A1 f/caller: size -BEQ R0,R0,700094EC ;else V0=134: fonttxtsize -ADDIU V0,R0,0134 -//700094EC: ...then set ml.alloc and me.alloc -SLL V1,V0,0xA ;V1=fonttxtsize<allocation sizes - tf mf tl ml te me - Couplets: 0x0 is bank#, 0x4 size. List ends with bank 0. -ADDIU SP,SP,FF80 -LUI T6,8002 -SW RA,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -ADDIU T6,T6,4434 ;T6=80024434: default tbl.tmp values -LW AT,0000 (T6) -ADDIU S2,SP,0060 ;S2=SP+60: tbl.tmp -LUI S3,8006 -SW AT,0000 (S2) ;80024434+0 -> SP+60 -LW T9,0004 (T6) -OR V0,A0,R0 ;V0=A0: p->allocations -ADDIU S3,S3,3BB0 ;S3=80063BB0: mem.tbl -SW T9,0004 (S2) ;80024434+4 -> SP+64 -LW AT,0008 (T6) -ADDIU S0,SP,0060 ;S0=SP+60: tbl.tmp.start -ADDIU S1,SP,007C ;S1=SP+7C: tbl.tmp.end -SW AT,0008 (S2) ;80024434+8 -> SP+68 -LW T9,000C (T6) -SW T9,000C (S2) ;80024434+C -> SP+6C -LW AT,0010 (T6) -SW AT,0010 (S2) ;80024434+10-> SP+70 -LW T9,0014 (T6) -SW T9,0014 (S2) ;80024434+14-> SP+74 -LW AT,0018 (T6) -SW AT,0018 (S2) ;80024434+18-> SP+78 -LW V1,0000 (A0) ;V1=tbl+0: bank# -//70009588: fill tbl.tmp with each couplet -LW T0,0004 (V0) ;T0=tbl+4: size -SLL T1,V1,0x2 ;T1= tbl+0->offset -ADDU T2,S2,T1 -SW T0,0000 (T2) ;mf.alloc->tbl.tmp[tbl+0] -LW V1,0008 (V0) ;V1=tbl+8: bank# -ADDIU V0,V0,0008 ;V0+=8 -BNEL V1,R0,7000958C -LW T0,0004 (V0) ;T0=size -//700095A8: change list of sizes into list of offsets -LW V1,0000 (S0) ;V1=size -ADDIU A0,SP,0078 ;A0=SP+78: penultimate entry -//700095B0: iterate table -LW T4,0004 (S0) ;T4=next size -ADDIU S0,S0,0004 ;S0+=4 next entry -SLTU AT,S0,A0 -ADDU V0,T4,V1 ;V0=next size + running total -OR V1,V0,R0 ;V1=running total -BNE AT,R0,700095B0 ;loop until end of table -SW V0,0000 (S0) ;update in-place -//700095CC: turn it into a DW list -LW T5,0008 (S3) ;T5=mem.tbl+8: buffer.end -LW T8,0000 (S3) ;T8=mem.tbl+0: buffer.start -LW V0,0078 (SP) ;SP+78= offset to bank6, which is total allocation size -ADDIU S0,SP,0060 ;S0=SP+60: tbl.tmp -SUBU V1,T5,T8 ;V1=end-start: buffer.sz -SRA T6,V1,0x1F -SRA T0,V0,0x1F -SW T0,0030 (SP) ;SP+30= sign of alloc.sz -SW T6,0038 (SP) ;SP+38= sign of buffer.sz -SW V1,003C (SP) ;SP+3C= buffer.sz -SW V0,0034 (SP) ;SP+34= alloc.sz -//700095F8: update tmp.tbl with the percentage of memory each will be allocated -LW A1,0000 (S0) ;A1=tbl.tmp+n: alloc.cur -LW A2,0038 (SP) ;A2= sign of buffer.sz -LW A3,003C (SP) ;A3= buffer.sz -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -SRA A0,A1,0x1F ;A0= sign of alloc.cur -OR A0,V0,R0 -OR A1,V1,R0 ;A1=V1: alloc.cur * buffer.sz -LW A2,0030 (SP) ;A2=sign of alloc.sz -JAL 7000ED4C ;(V0,V1) = (A0,A1) / (A2,A3) [signed division] -LW A3,0034 (SP) ;A3= alloc.sz -ADDIU S0,S0,0004 ;S0+=4 -SLTU AT,S0,S1 -BNE AT,R0,700095F8 ;loop for each entry -SW V1,FFFC (S0) ;update alloc cur: alloc.cur * buffer.sz / alloc.sz -//70009630: -ADDIU S0,SP,0060 ;S0=SP+60: tbl.tmp.start -ADDIU V0,SP,007C ;V0=SP+7C: tbl.tmp.end -//70009638: All blocks should be quad aligned! -LW T3,0000 (S0) -ADDIU S0,S0,0004 ;S0+=4 next entry -SLTU AT,S0,V0 -ORI T4,T3,000F -XORI T5,T4,000F -BNE AT,R0,70009638 ;loop for each entry -SW T5,FFFC (S0) ;tmp.tmp.cur &= ~F -//70009654: sets only the first two entries as banks 1&2 -LW A2,0000 (S3) ;A2=mem.tbl+0: buffer.start -LW T8,0060 (SP) ;T8=tmp.tbl.bnk1 -LW T7,0064 (SP) -LUI AT,8006 -ADDU T6,T8,A2 ;T6=bank1 offset + buffer.start -SW T6,3BC0 (AT) ;T6->80063BC0: mem.bank1.start -SW R0,3BC4 (AT) ;0 ->80063BC4: mem.bank1.??? -LUI AT,8006 -ADDU V0,T7,A2 ;V0=bank2 offset + buffer.start -SW V0,3BC8 (AT) ;V0->80063BC8: mem.bank1.end -LW T0,0068 (SP) -LUI AT,8006 -SW V0,3BD0 (AT) ;V0->80063BD0: mem.bank2.start -SW R0,3BD4 (AT) ;0 ->80063BD4: mem.bank2.??? -LUI AT,8006 -ADDU T1,T0,A2 ;T1=bank3 offset + buffer.start -SW T1,3BD8 (AT) ;T1->80063BD8: mem.bank2.end -//70009698: set remaining entries -ADDIU A3,R0,0002 -SLL T9,A3,0x4 ;T9=2<<4: 20 -ADDU V0,S3,T9 ;V0=mem.tbl + bank3 offset -SLL T2,A3,0x2 -ADDU S0,S2,T2 ;S0=tbl.tmp + 8: offset to entries for banks 3+ -LW T8,0008 (S0) -LW T6,000C (S0) -LW T5,0004 (S0) -LW T7,0010 (S0) -LW T3,0000 (S0) -ADDU A0,T8,A2 ;A0=bank5 offset + buffer.start -ADDU A1,T6,A2 ;A1=bank6 offset + buffer.start -ADDU V1,T5,A2 ;V1=bank4 offset + buffer.start -ADDU T0,T7,A2 ;T0=bank end offset + buffer.start -ADDU T4,T3,A2 ;T4=bank3 offset + buffer.start -SW T0,0048 (V0) ;T0->80063C18: mem.bank6.end -SW V1,0020 (V0) ;V1->80063BF0: mem.bank4.start -SW A1,0038 (V0) ;A1->80063C08: mem.bank5.end -SW A1,0040 (V0) ;A1->80063C10: mem.bank6.start -SW A0,0028 (V0) ;A0->80063BF8: mem.bank4.end -SW A0,0030 (V0) ;A0->80063C00: mem.bank5.start -SW R0,0024 (V0) ;0 ->80063BF4: mem.bank4.??? -SW R0,0034 (V0) ;0 ->80063C04: mem.bank5.??? -SW R0,0044 (V0) ;0 ->80063C14: mem.bank6.??? -SW T4,0010 (V0) ;T4->80063BE0: mem.bank3.start -SW R0,0014 (V0) ;0 ->80063BE4: mem.bank3.??? -SW V1,0018 (V0) ;V1->80063BE8: mem.bank3.end -LW RA,0024 (SP) -LW S3,0020 (SP) -LW S2,001C (SP) -LW S1,0018 (SP) -LW S0,0014 (SP) -JR RA -ADDIU SP,SP,0080 - -70009720 A320 V0=p->A0 bytes of memory allocated in bank A1 - accepts: A0=size, A1=bank -ADDIU SP,SP,FFE8 -SW A1,001C (SP) ;SP+1C=A1: bank# -ANDI A3,A1,00FF ;A3=bank -LUI A1,8006 -LUI T2,8002 -ADDIU T2,T2,4404 ;T2=80024404: p->malloc.err -ADDIU A1,A1,3BB0 ;A1=80063BB0: mem.tbl -SW RA,0014 (SP) -OR A2,A0,R0 ;A2=size -SLL T8,A3,0x4 ;T8=bank*10 -//70009748: -ADDU V1,A1,T8 ;V1=80063BB0+offset: mem.bank# -LW V0,0004 (V1) ;V0=bank+4: -BNE V0,R0,7000976C -OR T0,V0,R0 ;T0=V0: -//70009758: error: unable to allocate -ADDIU T9,R0,0001 -LUI AT,8002 -SW T9,4404 (AT) ;1->80024404: unable to allocate -//70009764: infinite loop! -BEQ R0,R0,70009764 -NOP -//7000976C: -LW A0,0008 (V1) ;A0=bank+8: -ADDU T5,V0,A2 -SLTU AT,A0,V0 -BEQL AT,R0,70009794 -SLTU AT,A0,T5 -JAL 700098F0 ;V0=7; loop 6 times needlessly -ADDIU A3,R0,0006 -//70009788: -BEQ R0,R0,70009788 -NOP -//70009790: -SLTU AT,A0,T5 -BEQL AT,R0,700097E8 -ADDU T5,V0,A2 -LW T7,0064 (A1) -LW T6,0068 (A1) -ADDIU A3,R0,0006 -ADDU T8,T7,A2 -SLTU AT,T6,T8 -BNE AT,R0,700097D4 -NOP -LW V0,0000 (T2) -ADDIU T9,R0,0001 -SW T9,0000 (T2) -BNEL V0,R0,70009748 -SLL T8,A3,0x4 -BEQ R0,R0,70009748 -SLL T8,A3,0x4 -//700097D4: -JAL 700098F0 ;V0=7; loop 6 times needlessly -NOP -//700097DC: -BEQ R0,R0,700097DC -NOP -//700097E4: -ADDU T5,V0,A2 -SW T5,0004 (V1) -SW T0,000C (V1) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,T0,R0 -JR RA -NOP - -70009804 A404 ???; updates bank A2 size registry in light of entry at A0 of size A1 - accepts: A0=p->allocated data, A1=size of data, A2=bank# -LUI T7,8002 -LW T7,4404 (T7) ;T7=80024404: -ADDIU SP,SP,FFE8 -SW A2,0020 (SP) -ANDI T6,A2,00FF -OR A2,T6,R0 ;A2->byte -SW RA,0014 (SP) -SW A1,001C (SP) -BEQ T7,R0,70009840 ;skip if not set -OR A3,A0,R0 ;A3=A0: p->data -LUI T8,8006 -LW T8,3C1C (T8) ;T8=80063C1C: -BNE A0,T8,70009840 -NOP -ADDIU A2,R0,0006 ;default to bank 6 -//70009840: -LUI T2,8006 -ADDIU T2,T2,3BB0 -SLL T9,A2,0x4 -ADDU A1,T9,T2 ;A1=80063BB0 + (bank*10): offset to bank A2 -LW A0,0004 (A1) ;A0=mem+4: cur.start -BNEL A0,R0,70009868 ;skip if set -LW A2,000C (A1) -//7000985C: infinite loop! -BEQ R0,R0,7000985C -NOP -//70009864: -LW A2,000C (A1) ;A2=mem+C: -LW T3,001C (SP) -BEQL A3,A2,70009880 ;branch if matches A0 f/caller -SUBU V0,A0,A2 -BEQ R0,R0,700098E0 ;return 2: no match -ADDIU V0,R0,0002 -//7000987C: -SUBU V0,A0,A2 ;V0= cur.start - cur.end(?) -SUBU V1,T3,V0 ;V1= size of data - size of resource -BGTZ V1,70009898 ;if zero, return 1 -ADDU T4,A0,V1 ;T4= cur.start + difference -SW T4,0004 (A1) ;update cur.start -BEQ R0,R0,700098E0 ;return 1: match -ADDIU V0,R0,0001 -//70009898: -LW V0,0008 (A1) ;V0=mem+8: bank.end -ADDU T5,A0,V1 ;T5=cur.start + difference -SLTU AT,V0,A0 -BEQL AT,R0,700098C0 ;go infinite if cur.start > bank.end -SLTU AT,V0,T5 -JAL 700098F0 ;V0=7; loop 6 times needlessly -ADDIU A2,R0,0006 -//700098B4: infinite loop! -BEQ R0,R0,700098B4 -NOP -//700098BC: -SLTU AT,V0,T5 -BEQ AT,R0,700098D8 ;go infinite if (cur.start+difference) > bank.end -ADDU T6,A0,V1 -JAL 700098F0 ;V0=7; loop 6 times needlessly -ADDIU A2,R0,0006 -//700098D0: infinite loop! -BEQ R0,R0,700098D0 -NOP -//700098D8: return 1 and update cur.start -SW T6,0004 (A1) ;cur.start += difference -ADDIU V0,R0,0001 -//700098E0: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700098F0 A4F0 V0=7; loop 6 times with no apparent purpose; originally a mem table method -ADDIU V0,R0,0001 -ADDIU V0,V0,0001 -ANDI T6,V0,00FF -SLTI AT,T6,0007 -BNE AT,R0,700098F4 ;loop 6 times, for apparently no reason -OR V0,T6,R0 -JR RA -NOP - -70009910 A510 V0= total allocated size of bank A0 - accepts: A0=bank# -LUI T7,8002 -LW T7,4404 (T7) ;T7=80024404: -SW A0,0000 (SP) -ANDI T6,A0,00FF -BEQ T7,R0,7000992C ;if not set, use default bank (6) -OR A0,T6,R0 -ADDIU A0,R0,0006 -//7000992C: if bank 4, make sure it's filled -ADDIU AT,R0,0004 -BNE A0,AT,70009950 ;if not bank 4, skip -LUI A1,8006 -ADDIU A1,A1,3BB0 -LW T8,0040 (A1) ;T8=bank4+0: start of bank -LW T9,0048 (A1) ;T9=bank4+8: end of bank -BNE T8,T9,70009950 ;if same, use default bank (6) -NOP -ADDIU A0,R0,0006 -//70009950: retrieve total used by bank -LUI A1,8006 -ADDIU A1,A1,3BB0 -SLL T0,A0,0x4 -ADDU V1,A1,T0 ;V1=80063BB0 + (bank * 10): offset to bank# A0 -LW T1,0008 (V1) ;T1=mem+8: end of bank -LW T2,0004 (V1) ;T2=mem+4: start of cur.entry -JR RA -SUBU V0,T1,T2 ;V0= total allocated in bank A0 - -70009970 A570 allocate A0 coded #bytes in bank - accepts: A0=size/bank# entry (ssssssss ssssssss sssssssss sssssbbb) -ADDIU SP,SP,FFE8 -OR A1,A0,R0 -SW RA,0014 (SP) -ANDI T6,A1,0007 -OR A1,T6,R0 ;A1= A0&7: bank# -JAL 70009720 ;V0=p->A0 bytes of memory allocated in bank A1 -SRL A0,A0,0x3 ;A0>>=3: size -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000999C A59C reset memory bank A0 - accepts: A0=bank# -ANDI T6,A0,00FF -LUI T8,8006 -ADDIU T8,T8,3BB0 -SLL T7,T6,0x4 ;T7=bank#*10: bank->offset -ADDU V0,T7,T8 ;V0=80063BB0+offset: mem.bank# -LW T9,0000 (V0) ;T9=mem.bank#.start -SW A0,0000 (SP) -SW R0,000C (V0) ;0->mem.bank#.??? -JR RA -SW T9,0004 (V0) ;mem.bank#.start -> mem.bank#.??? - -700099C4 A5C4 - accepts: A0=bank# -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 700098F0 ;V0=7; loop 6 times needlessly -SW A0,0018 (SP) -LBU T6,001B (SP) ;T6=bank# -LUI T8,8006 -ADDIU T8,T8,3BB0 -SLL T7,T6,0x4 ;T7=bank#->offset -ADDU V0,T7,T8 ;V0=80063BB0+offset: mem.bank# -LW T9,0004 (V0) ;T9=mem.bank#.??? -BEQL T9,R0,700099FC ;skip if NULL -LW RA,0014 (SP) -SW R0,0004 (V0) ;0->mem.bank#.??? -//700099F8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009A10 A610 swap allocation entries at A0 and A1; may also be used to swap doublewords - accepts: A0=p->DW1, A1=p->DW2 -LW T6,0000 (A1) -LW V0,0000 (A0) -LW V1,0004 (A0) -SW T6,0000 (A0) -LW T7,0004 (A1) -SW T7,0004 (A0) -SW V0,0000 (A1) -JR RA -SW V1,0004 (A1) - -70009A34 A634 merge allocation entry A1 with A0; deletes A1 - accepts: A0=alloc.parent, A1=alloc.child -LW T6,0004 (A0) -LW T7,0004 (A1) -ADDU T8,T6,T7 -SW T8,0004 (A0) -SW R0,0000 (A1) -JR RA -SW R0,0004 (A1) - -70009A50 A650 merge and sort entries in memory allocation table A0 - accepts: A0=p->allocation table -ADDIU SP,SP,FFD0 -SW S4,0028 (SP) -SW S0,0018 (SP) -ADDIU S0,A0,0010 -ADDIU S4,A0,0FE8 -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SLTU AT,S4,S0 -SW RA,002C (SP) -OR S3,R0,R0 -ADDIU S1,A0,0008 -BNE AT,R0,70009AF4 -OR S2,R0,R0 -LW T6,0004 (S0) -BEQL T6,R0,70009AE8 -ADDIU S0,S0,0008 -LW V0,0000 (S0) -OR A0,S0,R0 -SLTU AT,V0,S2 -BEQL AT,R0,70009AB8 -LW T7,0004 (S1) -JAL 70009A10 ;swap allocation entries at A0 and A1 -OR A1,S1,R0 -LW V0,0000 (S0) -LW T7,0004 (S1) -OR A0,S1,R0 -OR A1,S0,R0 -ADDU T8,T7,S2 -BNEL V0,T8,70009AE0 -OR S1,S0,R0 -JAL 70009A34 ;merge allocation entry A1 with A0 -ADDIU S3,R0,0001 -OR S0,S1,R0 -LW V0,0000 (S1) -OR S1,S0,R0 -OR S2,V0,R0 -ADDIU S0,S0,0008 -SLTU AT,S4,S0 -BEQL AT,R0,70009A8C -LW T6,0004 (S0) -LW RA,002C (SP) -OR V0,S3,R0 -LW S3,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -70009B18 A718 merge and sort default memory allocation table until at its most efficient -ADDIU SP,SP,FFE0 -SW S0,0018 (SP) -LUI S0,8006 -ADDIU S0,S0,3C28 ;S0=80063C28: memory allocation table -SW RA,001C (SP) -JAL 70009A50 ;merge and sort entries in memory allocation table A0 -OR A0,S0,R0 ;A0=S0 -BEQL V0,R0,70009B50 ;branch if table wasn't altered -LW RA,001C (SP) -//70009B3C: loop until static -JAL 70009A50 ;merge and sort entries in memory allocation table A0 -OR A0,S0,R0 -BNE V0,R0,70009B3C -NOP -//70009B4C: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70009B60 A760 -ADDIU SP,SP,FFD8 -SW S2,001C (SP) -SW S3,0020 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -ADDIU S2,A0,0010 -SW RA,0024 (SP) -OR S0,S2,R0 -ADDIU S1,A0,0FE8 -OR S3,R0,R0 -SLTU AT,S1,S2 -BNEL AT,R0,70009C10 -ADDIU S3,S3,0001 -LW A0,0004 (S0) -ADDIU A1,S0,0008 -BNEL A0,R0,70009BB0 -LW V0,0008 (S0) -BEQ R0,R0,70009C58 -OR V0,S0,R0 -LW V0,0008 (S0) -LW V1,0000 (S0) -SLTU AT,V0,V1 -BEQL AT,R0,70009BD8 -ADDU T6,V1,A0 -JAL 70009A10 ;swap allocation entries at A0 and A1 -OR A0,S0,R0 -LW A0,0004 (S0) -LW V0,0008 (S0) -LW V1,0000 (S0) -ADDU T6,V1,A0 -BNE V0,T6,70009BFC -ADDIU A1,S0,0008 -LW T7,000C (S0) -SW R0,0008 (S0) -SW R0,000C (S0) -ADDU T8,A0,T7 -SW T8,0004 (S0) -BEQ R0,R0,70009C58 -OR V0,A1,R0 -SLTU AT,S1,A1 -BEQ AT,R0,70009B94 -OR S0,A1,R0 -OR S0,S2,R0 -ADDIU S3,S3,0001 -SLTI AT,S3,01FC -BNEL AT,R0,70009B8C -SLTU AT,S1,S2 -SLTU AT,S1,S2 -ADDIU V0,R0,FFFF -BNE AT,R0,70009C54 -OR V1,S2,R0 -LW A0,0004 (S0) -SLTU AT,A0,V0 -BEQL AT,R0,70009C48 -ADDIU S0,S0,0008 -OR V1,S0,R0 -OR V0,A0,R0 -ADDIU S0,S0,0008 -SLTU AT,S1,S0 -BEQL AT,R0,70009C30 -LW A0,0004 (S0) -OR V0,V1,R0 -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -70009C74 A874 -LUI T7,8006 -LW T7,3C20 (T7) -LUI T1,8006 -LW T1,3C24 (T1) -SUBU T8,A0,T7 -SLL T9,T8,0x7 -SUBU T9,T9,T8 -SLL T9,T9,0x2 -DIV T9,T1 -MFLO A2 -LUI T3,8006 -ADDIU T3,T3,3C28 -SLL T2,A2,0x3 -ADDU V0,T2,T3 -LW T0,0014 (V0) -ADDIU SP,SP,FFE8 -ADDIU A3,V0,0010 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -OR T6,A0,R0 -BNE T1,R0,70009CD4 -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE T1,AT,70009CEC -LUI AT,8000 -BNE T9,AT,70009CEC -NOP -BREAK 00001800 -OR V1,A3,R0 -BEQL T0,R0,70009D0C -LW T5,0000 (V1) -LW T4,000C (V1) -ADDIU V1,V1,0008 -BNEL T4,R0,70009CFC -LW T4,000C (V1) -LW T5,0000 (V1) -ADDIU AT,R0,FFFF -BNEL T5,AT,70009D50 -LW T8,0018 (SP) -BEQ T0,R0,70009D30 -OR V1,A3,R0 -LW T6,FFFC (V1) -ADDIU V1,V1,FFF8 -BNEL T6,R0,70009D24 -LW T6,FFFC (V1) -LW T7,0000 (V1) -LUI A0,8006 -BNEL T7,R0,70009D50 -LW T8,0018 (SP) -JAL 70009B60 -ADDIU A0,A0,3C28 -OR V1,V0,R0 -LW T8,0018 (SP) -SW T8,0000 (V1) -LW T9,001C (SP) -SW T9,0004 (V1) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009D6C A96C V0=p->debug.notice.list entry for mema_c_debug -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -LUI A1,8003 -ADDIU A1,A1,91D0 ;A1=800291D0: "mema_c_debug" -JAL 70004E60 ;V0=p->debug.notice.list entry for name A1 and data A0 -ADDIU A0,A0,4450 ;A0=80024450: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009D98 A998 reinitialize allocated memory table with p->block A0 of size A1 - accepts: A0=p->allocated block, A1=size -LUI V1,8006 -ADDIU V1,V1,3C28 ;V1=80063C28 -ADDIU A2,R0,FFFF -SW A2,0FF0 (V1) ;-1-> 80064C18 -SW A2,0FF8 (V1) ;-1-> 80064C20 -ADDIU T6,R0,FFFF -LUI A2,8006 -LUI V0,8006 -SW R0,0000 (V1) ;0 -> 80063C28 -SW R0,0004 (V1) ;0 -> 80063C2C -SW R0,0008 (V1) ;0 -> 80063C30 -SW R0,000C (V1) ;0 -> 80063C34 -SW R0,0FF4 (V1) ;0 -> 80064C1C -SW T6,0FFC (V1) ;-1-> 80064C24 -ADDIU V0,V0,3C38 ;V0=80063C38: start -ADDIU A2,A2,4C10 ;A2=80064C10: end -//70009DD8: blank entire memory segment -ADDIU V0,V0,0008 -SLTU AT,A2,V0 -SW R0,FFF8 (V0) -BEQ AT,R0,70009DD8 -SW R0,FFFC (V0) -//70009DEC: -LUI V0,8006 -LUI A2,8006 -ADDIU A2,A2,3C24 -ADDIU V0,V0,3C20 -SW A0,0000 (V0) ;A0->80063C20 -SW A0,0010 (V1) ;A0->80063C38 -SW A1,0000 (A2) ;A1->80063C24 -JR RA -SW A1,0014 (V1) ;A1->80063C3C - -70009E10 AA10 merge and sort entries in default memory allocation table; redirects to 70009A50: A0=80063C28 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8006 -JAL 70009A50 ;merge and sort entries in memory allocation table A0 -ADDIU A0,A0,3C28 ;A0=80063C28: default memory allocation table -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70009E34 AA34 -ADDIU SP,SP,FFD0 -SW S2,001C (SP) -SW S1,0018 (SP) -OR S2,A0,R0 -SW S5,0028 (SP) -SW S0,0014 (SP) -LUI S1,8006 -SW RA,002C (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -ADDIU S1,S1,3C38 -ADDIU A0,R0,FFFF -OR A1,R0,R0 -OR S0,R0,R0 -ADDIU S5,R0,FFFF -ADDIU A2,R0,0010 -LW V1,0004 (S1) -ADDIU S0,S0,0001 -SLTU AT,V1,S2 -BNE AT,R0,70009EBC -SUBU V0,V1,S2 -LW T6,0000 (S1) -SLTU AT,V0,A0 -SRL T7,S2,0x2 -BEQ S5,T6,70009EC4 -NOP -BEQ AT,R0,70009EBC -SLTIU AT,V0,0040 -OR A0,V0,R0 -BNE AT,R0,70009EC4 -OR A1,S1,R0 -SLTU AT,V0,T7 -BNE AT,R0,70009EC4 -NOP -BNE S0,A2,70009E74 -ADDIU S1,S1,0008 -BNEL A1,R0,70009F64 -LW V1,0000 (A1) -LW T8,0004 (S1) -OR S0,R0,R0 -ADDIU S4,R0,0008 -SLTU AT,T8,S2 -BEQ AT,R0,70009EF8 -LUI S3,8006 -LW T9,000C (S1) -ADDIU S1,S1,0008 -SLTU AT,T9,S2 -BNEL AT,R0,70009EE8 -LW T9,000C (S1) -LW T0,0000 (S1) -ADDIU S3,S3,3C28 -BNEL S5,T0,70009F60 -OR A1,S1,R0 -LUI S1,8006 -ADDIU S1,S1,3C38 -JAL 70009A50 ;merge and sort entries in memory allocation table A0 -OR A0,S3,R0 ;A0=S3: 80063C28 -ADDIU S0,S0,0001 -BNE S0,S4,70009F10 -NOP -LW T1,0014 (S3) -SLTU AT,T1,S2 -BEQL AT,R0,70009F4C -LW T3,0000 (S1) -LW T2,000C (S1) -ADDIU S1,S1,0008 -SLTU AT,T2,S2 -BNEL AT,R0,70009F38 -LW T2,000C (S1) -LW T3,0000 (S1) -BNEL S5,T3,70009F60 -OR A1,S1,R0 -BEQ R0,R0,70009F84 -OR V0,R0,R0 -OR A1,S1,R0 -LW V1,0000 (A1) -LW T5,0004 (A1) -ADDU T4,V1,S2 -SUBU T6,T5,S2 -SW T4,0000 (A1) -BNE T6,R0,70009F80 -SW T6,0004 (A1) -SW R0,0000 (A1) -OR V0,V1,R0 -LW RA,002C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -70009FA8 ABF8 -LUI T9,8006 -LW T9,3C38 (T9) -LUI T8,8006 -ADDIU T2,R0,FFFF -ADDIU T8,T8,3C38 -OR A3,A1,R0 -BEQ T2,T9,70009FF4 -OR V1,T8,R0 -LW A1,0000 (T8) -BNEL A0,A1,70009FE8 -LW A1,0008 (V1) -LW A2,0004 (V1) -SLTU AT,A2,A3 -BEQL AT,R0,7000A000 -ADDU T3,A1,A3 -LW A1,0008 (V1) -ADDIU V1,V1,0008 -BNE T2,A1,70009FCC -NOP -JR RA -OR V0,R0,R0 -ADDU T3,A1,A3 -SUBU T4,A2,A3 -SW T3,0000 (V1) -BNE T4,R0,7000A014 -SW T4,0004 (V1) -SW R0,0000 (V1) -OR V0,A0,R0 -JR RA -NOP - -7000A020 AC20 ???; redirect to 70009C74 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70009C74 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000A040 AC40 -LUI V1,8006 -LUI V0,8006 -ADDIU V0,V0,4C08 -ADDIU V1,V1,3C28 -ADDIU V1,V1,0020 -BNEL V1,V0,7000A054 -ADDIU V1,V1,0020 -JR RA -NOP - -7000A064 AC64 -LUI T6,8006 -LW T6,3C38 (T6) -ADDIU A2,R0,FFFF -LUI A0,8006 -OR V0,R0,R0 -OR V1,R0,R0 -BEQ A2,T6,7000A0A8 -ADDIU A0,A0,3C38 -LW A1,0004 (A0) -SLTU AT,V1,A1 -BEQ AT,R0,7000A098 -ADDU V0,V0,A1 -OR V1,A1,R0 -LW T7,0008 (A0) -ADDIU A0,A0,0008 -BNEL A2,T7,7000A088 -LW A1,0004 (A0) -BNE V0,R0,7000A0BC -SUBU T8,V0,V1 -MTC1 R0,F0 -JR RA -NOP -MTC1 T8,F4 -MTC1 V0,F10 -BGEZ T8,7000A0DC -CVT.S.W F6,F4 -LUI AT,4F80 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -BGEZ V0,7000A0F4 -CVT.S.W F16,F10 -LUI AT,4F80 -MTC1 AT,F18 -NOP -ADD.S F16,F16,F18 -DIV.S F0,F6,F16 -JR RA -NOP - -7000A100 AD00 generate ordered list of 200 largest allocated blocks of memory - note this list is set to SP+54, which is not printed and invalid on return... -ADDIU SP,SP,EF98 -LUI A0,8006 -LW A0,3C38 (A0) ;A0=80063C38: p->first entry in allocation table -SW S5,002C (SP) -SW S0,0018 (SP) -ADDIU S5,R0,FFFF ;S5= -1 -SW S2,0020 (SP) -LUI S0,8006 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S1,001C (SP) -//7000A13C: -LUI V1,8000 -OR S2,R0,R0 ;S2=0 linecount -ADDIU S0,S0,3C38 ;S0=80063C38 -BEQ S5,A0,7000A16C ;branch if first entry -1 -1=end of list -OR V0,R0,R0 ;V0=0 size=0 -//7000A150: loop for each entry -LW T7,0008 (S0) ;T7=next entry+0: p->next block -LW T6,0004 (S0) ;T6=entry+4: p->cur.size -ADDIU S0,S0,0008 ;S0+=8 p->next entry -BNE S5,T7,7000A150 ;loop until end of list -ADDU V0,V0,T6 ;V0+=size total allocated size -LUI S0,8006 -ADDIU S0,S0,3C38 ;S0=80063C38 -//7000A16C: ready loop... -LUI S8,8003 -LUI S6,8003 -ADDIU S1,SP,0054 ;S1=SP+54: p->buffer -ADDIU S6,S6,91E0 ;S6=800291E0: "%d" -ADDIU S8,S8,91E4 ;S8=800291E4: "..." -OR S3,R0,R0 ;S3=0 largest allocated size -OR S4,R0,R0 ;S4=0 -ADDIU S7,R0,00C8 ;S7=0xC8 -//7000A18C: -BEQ S5,A0,7000A1C4 ;branch if no list -NOP -//7000A194: loop to find largest allocation -LW V0,0004 (S0) ;V0=entry+4: size -SLTU AT,V0,V1 ;TRUE if V0 < 0x80000000 -BEQ AT,R0,7000A1B4 ;branch if size negative or pointer -SLTU AT,S3,V0 ;TRUE if largest < cur.size -BEQL AT,R0,7000A1B8 ;branch if largest entry smaller than this one -LW T8,0008 (S0) -OR S3,V0,R0 ;S3=V0: largest allocation = cur.size -ADDIU S4,S4,0001 ;S4++ #entries labelled largest -//7000A1B4: loop to grab largest size -LW T8,0008 (S0) ;T8=next entry+0: p->block -ADDIU S0,S0,0008 ;S0+=8 next entry -BNEL S5,T8,7000A198 ;loop if not end of list -LW V0,0004 (S0) -//7000A1C4: append string with allocation values -BEQ S4,R0,7000A250 ;branch if first entry was largest -LUI S0,8006 -ADDIU S0,S0,3C38 ;S0=80063638 -BEQ S5,A0,7000A244 ;branch if no valid entries -OR S4,R0,R0 ;S4=0 -LW V0,0004 (S0) ;V0=entry+4: size -SLTI AT,S2,00C8 ;TRUE if linecount < 0xC8: within screen bounds -BNEL S3,V0,7000A228 ;branch if not largest allocation -LW T0,0008 (S0) -//7000A1E8: largest allocation is displayed if more lines -BEQ AT,R0,7000A20C ;branch if linecount larger than 0xC8 -OR A0,S1,R0 ;A0=S1: p->buffer -ADDIU A2,V0,0200 ;A2=size+0x200: round up -SRL T9,A2,0xA ;T9=size/0x400: #mem.segments -OR A2,T9,R0 ;A2=#memory segments -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S6,R0 ;A1=S6: 800291E0: "%d " -BEQ R0,R0,7000A220 -ADDU S1,S1,V0 ;S1+=V0: p->string+strlen allows concatenation -//7000A20C: S2=0xC8 displays etc when unable to display more (...) -BNE S2,S7,7000A220 ;branch if S2 isn't 0xC8 -OR A0,S1,R0 ;A0=S1: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S8,R0 ;A1=S6: 800291E0: "..." -ADDU S1,S1,V0 ;S1+=V0: p->string+strlen allows concatenation -//7000A220: increment line count -ADDIU S2,S2,0001 ;S2++ linecount++ -//7000A224: -LW T0,0008 (S0) ;T0=next entry+0: p->block -ADDIU S0,S0,0008 ;S0+=8 next entry -BNEL S5,T0,7000A1DC ;loop while entries still exist -LW V0,0004 (S0) -//7000A234: loop to print next largest allocated block -LUI S0,8006 -LUI A0,8006 -LW A0,3C38 (A0) ;A0=80063C38: p->1st block -ADDIU S0,S0,3C38 ;S0=80063C38 -OR V1,S3,R0 ;V1=S3: largest allocated size -BEQ R0,R0,7000A18C -OR S3,R0,R0 ;S3=0 size=0 -//7000A250: if all lines can't be displayed, list the total entries -SLTI AT,S2,00C9 ;TRUE if linecount < 0xC9 -BNE AT,R0,7000A26C ;return if linecount okay -OR A0,S1,R0 ;A0=S1: p->string -LUI A1,8003 -ADDIU A1,A1,91E8 ;A1=800291E8: "[%d]" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,S2,R0 ;A2=S2: linecount -//7000A26C: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,1068 - -7000A29C AE9C debug memory table sort and merge function: generate list of allocated memory, sort and merge table, then generate a new list -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 7000A100 ;generate ordered list of allocated memory blocks -SW S0,0018 (SP) -//7000A2B4: sort allocation table A0 -LUI S1,8006 -ADDIU S1,S1,3C28 ;S1=80063C28: table of memory allocations -OR S0,R0,R0 ;S0=0 count=0 -ADDIU S2,R0,01FC ;S2=1FC -//7000A2C4: loop for each possible entry -JAL 70009A50 ;merge and sort entries in memory allocation table A0 -OR A0,S1,R0 ;A0=S1: p->allocation table -ADDIU S0,S0,0001 ;S0++ count++ -BNE S0,S2,7000A2C4 ;loop 0x1FC times -NOP -//7000A2D8: -JAL 7000A100 ;generate ordered list of allocated memory blocks -NOP -//7000A2E0: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7000A2F8 AEF8 -ADDIU SP,SP,FFD8 -LUI T7,8006 -LW T7,3C38 (T7) -SW S3,0020 (SP) -LUI T6,8006 -ADDIU S3,R0,FFFF -SW S2,001C (SP) -SW S0,0014 (SP) -ADDIU T6,T6,3C38 -OR S2,A0,R0 -SW RA,0024 (SP) -SW S1,0018 (SP) -BEQ S3,T7,7000A354 -OR S0,T6,R0 -LW S1,0000 (T6) -LW T8,0004 (S0) -OR A1,S0,R0 -JALR RA,S2 -ADDU A0,S1,T8 -LW S1,0008 (S0) -ADDIU S0,S0,0008 -BNEL S3,S1,7000A338 -LW T8,0004 (S0) -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7000A370 AF70 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -JAL 70009B18 ;merge and sort default memory allocation table until at its most efficient -SW R0,0018 (SP) -LUI T6,8006 -LW T6,3C38 (T6) -ADDIU A1,R0,FFFF -LUI V0,8006 -LW A0,0018 (SP) -BEQ A1,T6,7000A3C0 -ADDIU V0,V0,3C38 -LW V1,0004 (V0) -SLTU AT,A0,V1 -BEQL AT,R0,7000A3B4 -LW T7,0008 (V0) -OR A0,V1,R0 -LW T7,0008 (V0) -ADDIU V0,V0,0008 -BNEL A1,T7,7000A3A0 -LW V1,0004 (V0) -BEQ A0,R0,7000A3D0 -LW RA,0014 (SP) -BEQ R0,R0,7000A3D4 -OR V0,A0,R0 -OR V0,R0,R0 -JR RA -ADDIU SP,SP,0020 - -7000A3DC AFDC -ADDIU SP,SP,FFE8 -SLTU AT,A1,A2 -SW RA,0014 (SP) -SW A0,0018 (SP) -BEQ AT,R0,7000A418 -OR A3,A1,R0 -ADDU A0,A0,A1 -JAL 70009FA8 -SUBU A1,A2,A1 -BNE V0,R0,7000A410 -NOP -BEQ R0,R0,7000A434 -OR V0,R0,R0 -BEQ R0,R0,7000A434 -ADDIU V0,R0,0001 -SLTU AT,A2,A3 -BEQ AT,R0,7000A430 -LW T1,0018 (SP) -ADDU A0,T1,A2 -JAL 7000A020 -SUBU A1,A3,A2 -ADDIU V0,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000A450 B050 V0= random number -LUI A0,8002 -LD A0,4460 (A0) ;A0=80024460: random seed -LUI AT,8002 -DSLL32 A2,A0,0x1F -DSLL A1,A0,0x1F -DSRL A2,A2,0x1F -DSRL32 A1,A1,0x0 -DSLL32 A0,A0,0xC -OR A2,A2,A1 -DSRL32 A0,A0,0x0 -XOR A2,A2,A0 -DSRL A0,A2,0x14 -ANDI A0,A0,0FFF -XOR A0,A0,A2 -DSLL32 V0,A0,0x0 -SD A0,4460 (AT) ;update random -JR RA -DSRA32 V0,V0,0x0 - -7000A498 B098 set random random number to A0+1 - accepts: A0= value -DADDIU A0,A0,0001 -LUI AT,8002 -SD A0,4460 (AT) ;A0+1 -> 80024460 -JR RA -ADDIU A0,R0,0000 ;return 0: okay! - -7000A4AC B0AC V0= rand num, using double at A0 as seed - accepts: A0=p->seed -LD A3,0000 (A0) -DSLL32 A2,A3,0x1F -DSLL A1,A3,0x1F -DSRL A2,A2,0x1F -DSRL32 A1,A1,0x0 -DSLL32 A3,A3,0xC -OR A2,A2,A1 -DSRL32 A3,A3,0x0 -XOR A2,A2,A3 -DSRL A3,A2,0x14 -ANDI A3,A3,0FFF -XOR A3,A3,A2 -DSLL32 V0,A3,0x0 -SD A3,0000 (A0) -JR RA -DSRA32 V0,V0,0x0 - -7000A4F0 B0F0 V0= strtok(A0,' '); returns V0= p->last character read in string - accepts: A0=p->string - Replaces spaces with NULLs, filling struct at 80024470 with results. - 80024470 #strings - 80024474 p->current substring# - 80024478 list of pointers to the start of each string -LUI A1,8002 -LUI A2,8002 -LUI T6,8003 -ADDIU A2,A2,4470 -ADDIU A1,A1,4474 -ADDIU T6,T6,91F0 -ADDIU T7,R0,0001 -SW T6,0000 (A1) ;p->"[%d]" -> 80024474: set default p->str.cur -SW T7,0000 (A2) ;1 -> 80024470: set default #strings -LBU V0,0000 (A0) ;A0=next char from string -ADDIU A3,R0,0020 ;A3= b' ' -BEQ V0,R0,7000A584 ;return if NULL -NOP -BNEL A3,V0,7000A544 ;skip if not a space -LW V1,0000 (A2) -//7000A52C: replace a run of spaces with NULLs -LBU T8,0001 (A0) -SB R0,0000 (A0) -ADDIU A0,A0,0001 -BEQL A3,T8,7000A530 -LBU T8,0001 (A0) -//7000A540: sets end of string as start of next -LW V1,0000 (A2) ;V1=str.num -SLL T9,V1,0x2 ;str.num -> offset -ADDU T0,A1,T9 -SW A0,0000 (T0) ;A0->80024474+offset: set p->string in table -ADDIU T1,V1,0001 -SW T1,0000 (A2) ;str.num+=1 -LBU V0,0000 (A0) -SLTI AT,V0,0021 -BNE AT,R0,7000A57C ;skip if whitespace character -NOP -//7000A568: find end of whitespace run -LBU V0,0001 (A0) -ADDIU A0,A0,0001 ;str.cur+=1 -SLTI AT,V0,0021 -BEQL AT,R0,7000A56C ;loop until next char is whitespace -LBU V0,0001 (A0) -//7000A57C: scan string until NULL terminator -BNE V0,R0,7000A524 -NOP -//7000A584: return V0= p->last character read in string -JR RA -OR V0,A0,R0 - -7000A58C B18C strtok(strcpy(mem_alloc_str, string),' '); used to handle memory allocation string - accepts: A0=p->string -ADDIU SP,SP,FFE8 -OR A1,A0,R0 ;A1=A0: p->string -SW RA,0014 (SP) -LUI A0,8006 -JAL 7000A770 ;V0= strcpy(A0,A1) -ADDIU A0,A0,4C30 ;A0=80064C30: command line buffer -LUI A0,8006 -JAL 7000A4F0 ;strtok(A0,' ') -ADDIU A0,A0,4C30 ;A0=80064C30: command line buffer -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000A5C0 B1C0 handle command line options sent via debugger - returns V0=TRUE only if "debug mode" enabled -ADDIU SP,SP,FFC0 -SW S1,001C (SP) -SW RA,0024 (SP) -LUI S1,00FF -SW S2,0020 (SP) -SW S0,0018 (SP) -SW R0,0028 (SP) ;0->SP+28: return FALSE by default -JAL 7000CEA8 ;V0= 1; would have returned 0 if debug console present -ORI S1,S1,B000 ;S1=00FFB000 -BEQ V0,R0,7000A5F8 ;branch if debugger present -LUI S0,8006 -LUI AT,8006 -BEQ R0,R0,7000A61C -SW R0,4C30 (AT) ;0->80064C30: NULL->buffer -//7000A5F8: copy string from debug console to buffer -LUI S2,8006 -ADDIU S2,S2,4EB0 ;S2=80064EB0 -ADDIU S0,S0,4C30 ;S0=80064C30 -OR A0,S1,R0 ;A0=S1: hardware address -JAL 70013810 ;copies word from hardware A0 to rdram A1 -OR A1,S0,R0 ;A1=S0: target address -ADDIU S0,S0,0004 ;S0+=4 -BNE S0,S2,7000A604 ;loop to copy 0x280 bytes -ADDIU S1,S1,0004 ;S1+=4 -//7000A61C: test for "debug mode" flag -LUI A0,8006 -JAL 7000A4F0 ;strtok(A0,' ') -ADDIU A0,A0,4C30 ;A0=80064C30: p->buffer -LUI A1,8003 -ADDIU A1,A1,91F4 ;A1=800291F4: "-d" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1: 1st instance -BEQ V0,R0,7000A648 ;branch if not found -ADDIU A0,R0,0001 ;A0=1: 1st instance -ADDIU T6,R0,0001 -SW T6,0028 (SP) ;1->SP+28: returns TRUE, not FALSE -//7000A648: test for "sound disabled" flag -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,91F8 ;A1=800291F8: "-s" -BEQ V0,R0,7000A668 ;branch if not found -ADDIU A0,R0,0001 ;A0=1: 1st instance -ADDIU T7,R0,0001 -LUI AT,8002 -SB T7,43F8 (AT) ;1->800243F8: disable sound -//7000A668: test for "japanese" flag -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,91FC ;A1=800291FC: "-j" -BEQ V0,R0,7000A684 ;branch if not found -ADDIU T8,R0,0001 -LUI AT,8005 -SB T8,84D0 (AT) ;1->800484D0: language -//7000A684: return -LW RA,0024 (SP) -LW V0,0028 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0038 - -7000A6A0 B2A0 V0=p->A0th instance of token A1 in currently strtok'd string - accepts: A0=instance, A1=p->string -ADDIU SP,SP,FFD0 -SW S2,001C (SP) -OR S2,A0,R0 ;S2=A0: instance# -SW RA,002C (SP) -SW S4,0024 (SP) -OR S4,A1,R0 ;S4=A1: p->string -SW S5,0028 (SP) -SW S3,0020 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -JAL 7001387C ;V0= strlen(A0) -OR A0,A1,R0 ;A0=A1: p->token -LUI S5,8002 -ADDIU S5,S5,4470 -LW T6,0000 (S5) ;T6=80024470: #strings -OR S3,V0,R0 ;S3=V0: query string length -ADDIU S1,R0,0001 ;S1=1 string.count -SLTI AT,T6,0002 -BNE AT,R0,7000A73C ;return NULL if NULL source string -LUI S0,8002 -ADDIU S0,S0,4478 ;S0=80024478: list of strtok'd strings -//7000A6F4: look for substring in source -OR A0,S4,R0 ;A0=S4: p->query string -LW A1,0000 (S0) ;A1=S0+0: source string -JAL 7000A898 ;V0= strncmp(A0,A1,A2) -OR A2,S3,R0 ;A2=S3: length -BNEL V0,R0,7000A728 ;continue if not found -LW T8,0000 (S5) -ADDIU S2,S2,FFFF ;S2-=1 instance count-- -BNEL S2,R0,7000A728 ;continue if a later instance -LW T8,0000 (S5) -LW T7,0000 (S0) -BEQ R0,R0,7000A740 ;return p->source+length -ADDU V0,T7,S3 -//7000A724: test each string for a hit -LW T8,0000 (S5) ;T8= #strings -ADDIU S1,S1,0001 ;S1+=1 string.count++ -ADDIU S0,S0,0004 ;S0+=4: p->next tokenized string -SLT AT,S1,T8 -BNEL AT,R0,7000A6F8 ;loop while strings remain -OR A0,S4,R0 -OR V0,R0,R0 ;V0=NULL: string not found -//7000A740: return -LW RA,002C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -7000A770 B370 V0= strcpy(A0,A1) - accepts: A0=p->target, A1=p->source -LBU V0,0000 (A1) -ADDIU V1,A0,0001 -ADDIU A1,A1,0001 -BEQ V0,R0,7000A798 -SB V0,0000 (A0) -LBU V0,0000 (A1) -ADDIU V1,V1,0001 -ADDIU A1,A1,0001 -BNE V0,R0,7000A784 -SB V0,FFFF (V1) -JR RA -OR V0,A0,R0 - -7000A7A0 B3A0 V0= strncpy(A0,A1,A2) - accepts: A0=p->target, A1=p->source, A2=length -LBU V0,0000 (A1) -ADDIU V1,A0,0001 -ADDIU A1,A1,0001 -BEQ V0,R0,7000A7D4 -SB V0,0000 (A0) -ADDIU A2,A2,FFFF -BEQL A2,R0,7000A7D8 -OR V0,A2,R0 -LBU V0,0000 (A1) -ADDIU V1,V1,0001 -ADDIU A1,A1,0001 -BNE V0,R0,7000A7B4 -SB V0,FFFF (V1) -OR V0,A2,R0 -BEQ A2,R0,7000A7F4 -ADDIU A2,A2,FFFF -OR V0,A2,R0 -SB R0,0000 (V1) -ADDIU V1,V1,0001 -BNE A2,R0,7000A7E0 -ADDIU A2,A2,FFFF -JR RA -OR V0,A0,R0 - -7000A7FC B3FC V0= strcat(A0,A1) - accepts: A0=p->target, A1=p->source -LBU T6,0000 (A0) -OR V0,A0,R0 -BEQL T6,R0,7000A820 -LBU V1,0000 (A1) -LBU T7,0001 (V0) -ADDIU V0,V0,0001 -BNEL T7,R0,7000A810 -LBU T7,0001 (V0) -LBU V1,0000 (A1) -ADDIU V0,V0,0001 -ADDIU A1,A1,0001 -BEQ V1,R0,7000A844 -SB V1,FFFF (V0) -LBU V1,0000 (A1) -ADDIU V0,V0,0001 -ADDIU A1,A1,0001 -BNE V1,R0,7000A830 -SB V1,FFFF (V0) -JR RA -OR V0,A0,R0 - -7000A84C B44C V0= strcmp(A0,A1); V0=0 if same or sign of differing character - accepts: A0=p->string1, A1=p->string2 - On return, A0 and A1 will be p->first differing character -LBU V0,0000 (A0) -LBU V1,0000 (A1) -ADDIU A0,A0,0001 -BEQ V0,V1,7000A878 -SLT AT,V0,V1 -BEQ AT,R0,7000A870 -NOP -//7000A868: return negative difference -JR RA -ADDIU V0,R0,FFFF -//7000A870: return positive difference -JR RA -ADDIU V0,R0,0001 -//7000A878: continue testing for length of string -BNE V0,R0,7000A888 -NOP -//7000A880: return identical -JR RA -OR V0,R0,R0 -//7000A888: retest with next char -BEQ R0,R0,7000A84C -ADDIU A1,A1,0001 -//7000A890: unreachable return -JR RA -NOP - -7000A898 B498 V0= strncmp(A0,A1,A2) - accepts: A0=p->string1, A1=p->string2, A2=length -BNEL A2,R0,7000A8AC -LBU V0,0000 (A0) -JR RA -OR V0,R0,R0 -LBU V0,0000 (A0) -LBU V1,0000 (A1) -ADDIU A2,A2,FFFF -ADDIU A0,A0,0001 -BEQ V0,V1,7000A8D8 -SLT AT,V0,V1 -BEQ AT,R0,7000A8D0 -NOP -JR RA -ADDIU V0,R0,FFFF -JR RA -ADDIU V0,R0,0001 -BNE V0,R0,7000A8E8 -NOP -JR RA -OR V0,R0,R0 -BEQ R0,R0,7000A898 -ADDIU A1,A1,0001 -JR RA -NOP - -7000A8F8 B4F8 V0=toupper(A0) - accepts: A0=char -ANDI T6,A0,00FF -SW A0,0000 (SP) -SLTI AT,T6,0061 -BNE AT,R0,7000A924 -OR A0,T6,R0 -SLTI AT,T6,007B -BEQ AT,R0,7000A924 -ADDIU V0,T6,FFE0 -ANDI T7,V0,00FF -JR RA -OR V0,T7,R0 -OR V0,A0,R0 -JR RA -NOP - -7000A930 B530 V0=isdigit(A0) - accepts: A0=char -ANDI T6,A0,00FF -SLTI V0,T6,0030 -XORI V0,V0,0001 -BEQ V0,R0,7000A948 -SW A0,0000 (SP) -SLTI V0,T6,003A -JR RA -NOP - -7000A950 B550 V0=isalpha(A0) - accepts: A0=char -ANDI T6,A0,00FF -SLTI V0,T6,0061 -SW A0,0000 (SP) -BNE V0,R0,7000A970 -OR V1,T6,R0 -SLTI V0,T6,007B -BNE V0,R0,7000A984 -NOP -SLTI V0,V1,0041 -XORI V0,V0,0001 -BEQ V0,R0,7000A984 -NOP -SLTI V0,V1,005B -JR RA -NOP - -7000A98C B58C V0=isspace(A0) - accepts: A0=char -ANDI T6,A0,00FF -XORI V0,T6,0020 -SLTIU V0,V0,0001 -BNE V0,R0,7000A9D8 -SW A0,0000 (SP) -XORI V0,T6,0009 -SLTIU V0,V0,0001 -BNE V0,R0,7000A9D8 -NOP -XORI V0,T6,000A -SLTIU V0,V0,0001 -BNE V0,R0,7000A9D8 -NOP -XORI V0,T6,000C -SLTIU V0,V0,0001 -BNE V0,R0,7000A9D8 -NOP -XORI V0,T6,000B -SLTIU V0,V0,0001 -JR RA -NOP - -7000A9E0 B5E0 V0=strtol(A0,A1,A2) - accepts: A0=p->string, A1=@last character read or NULL, A2=base (hex by default) -ADDIU SP,SP,FFA0 -SW S3,0024 (SP) -OR S3,A2,R0 -SW RA,002C (SP) -SW S4,0028 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A1,0064 (SP) -BLTZ A2,7000AA20 -OR A3,A0,R0 -ADDIU AT,R0,0001 -BEQ A2,AT,7000AA20 -SLTI AT,A2,0025 -BNEL AT,R0,7000AA28 -LBU A0,0000 (A3) -ADDIU S3,R0,000A -LBU A0,0000 (A3) -OR S2,A3,R0 -JAL 7000A98C -SW A3,0060 (SP) -BEQL V0,R0,7000AA54 -LBU V0,0000 (S2) -ADDIU S2,S2,0001 -JAL 7000A98C -LBU A0,0000 (S2) -BNEL V0,R0,7000AA40 -ADDIU S2,S2,0001 -LBU V0,0000 (S2) -ADDIU AT,R0,002D -BEQL V0,R0,7000AC30 -LW V0,0064 (SP) -BNE V0,AT,7000AA74 -ADDIU T6,R0,0001 -SW T6,005C (SP) -BEQ R0,R0,7000AA90 -ADDIU S2,S2,0001 -ADDIU AT,R0,002B -BNEL V0,AT,7000AA90 -SW R0,005C (SP) -SW R0,005C (SP) -BEQ R0,R0,7000AA90 -ADDIU S2,S2,0001 -SW R0,005C (SP) -ADDIU AT,R0,0010 -BNE S3,AT,7000AAC4 -NOP -LBU T7,0000 (S2) -ADDIU AT,R0,0030 -BNE T7,AT,7000AAC4 -NOP -JAL 7000A8F8 -LBU A0,0001 (S2) -ADDIU AT,R0,0058 -BNE V0,AT,7000AAC4 -NOP -ADDIU S2,S2,0002 -BNE S3,R0,7000AB00 -LBU V0,0000 (S2) -ADDIU AT,R0,0030 -BNE V0,AT,7000AB00 -ADDIU S3,R0,000A -JAL 7000A8F8 -LBU A0,0001 (S2) -ADDIU AT,R0,0058 -BNE V0,AT,7000AAF8 -ADDIU S3,R0,0008 -ADDIU S2,S2,0002 -BEQ R0,R0,7000AAF8 -ADDIU S3,R0,0010 -BEQ R0,R0,7000AB00 -LBU V0,0000 (S2) -ANDI S0,V0,00FF -SW S2,0044 (SP) -SW R0,0040 (SP) -OR S1,R0,R0 -BEQ S0,R0,7000ABE0 -OR V1,S0,R0 -ADDIU S4,R0,FFFF -ANDI A0,S0,00FF -JAL 7000A930 -SW V1,0034 (SP) -BEQ V0,R0,7000AB40 -LW V1,0034 (SP) -ADDIU S0,V1,FFD0 -ANDI T8,S0,00FF -BEQ R0,R0,7000AB64 -OR S0,T8,R0 -JAL 7000A950 -ANDI A0,S0,00FF -BEQL V0,R0,7000ABE4 -LW T2,0044 (SP) -JAL 7000A8F8 -ANDI A0,S0,00FF -ADDIU S0,V0,FFC9 -ANDI T9,S0,00FF -OR S0,T9,R0 -SLT AT,S0,S3 -BEQ AT,R0,7000ABE0 -ADDIU T1,R0,0001 -DIVU S4,S3 -MFLO V0 -SLTU AT,V0,S1 -BNE S3,R0,7000AB88 -NOP -BREAK 00001C00 ;Break: division by zero -BNE AT,R0,7000ABB8 -NOP -BNE S1,V0,7000ABC0 -NOP -DIVU S4,S3 -MFHI T0 -SLTU AT,T0,S0 -BNE S3,R0,7000ABB0 -NOP -BREAK 00001C00 ;Break: division by zero -BEQ AT,R0,7000ABC0 -NOP -BEQ R0,R0,7000ABD0 -SW T1,0040 (SP) -MULTU S1,S3 -MFLO S1 -ADDU S1,S1,S0 -NOP -LBU S0,0001 (S2) -ADDIU S2,S2,0001 -BNE S0,R0,7000AB1C -OR V1,S0,R0 -LW T2,0044 (SP) -LW V0,0064 (SP) -BEQL S2,T2,7000AC30 -LW V0,0064 (SP) -BEQL V0,R0,7000AC00 -LW T3,0040 (SP) -SW S2,0000 (V0) -LW T3,0040 (SP) -LW T4,005C (SP) -BEQ T3,R0,7000AC14 -NOP -BEQ R0,R0,7000AC44 -ADDIU V0,R0,FFFF -BEQ T4,R0,7000AC24 -OR V1,S1,R0 -BEQ R0,R0,7000AC44 -SUBU V0,R0,S1 -BEQ R0,R0,7000AC44 -OR V0,V1,R0 -LW V0,0064 (SP) -LW T5,0060 (SP) -BEQL V0,R0,7000AC44 -OR V0,R0,R0 -SW T5,0000 (V0) -OR V0,R0,R0 -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0060 - -7000AC70 B870 V0= mempcpy(A0,A1,A2) - accepts: A0=p->target, A1=p->source, A2=length -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70013850 ;V0= memcpy(A0,A1,A2) -SW A2,0020 (SP) -LW RA,0014 (SP) -LW T6,0020 (SP) -ADDIU SP,SP,0018 -JR RA -ADDU V0,V0,T6 ;V0+=length: p->final byte - -7000AC94 B894 sprintf(A0,A1,A2,A3,...) - calls c-parser; NULL terminates strings it outputs - accepts: A0=p->final string, A1=p->string to parse, A2=argument1, A3=argument2, SP+10=argument3, etc... - argument format: - long value for all integer types - double value for float types; use two sequential arguments for upper and lower half of value - pointer for string type - character (as int) for char type -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -SW RA,0014 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -SW A3,002C (SP) -LUI A0,7001 -ADDIU A0,A0,AC70 -ADDIU A3,SP,0028 -LW A2,0024 (SP) -JAL 70013F60 -LW A1,0020 (SP) -BLTZ V0,7000ACD8 -OR V1,V0,R0 -LW T6,0020 (SP) -ADDU T7,T6,V0 -SB R0,0000 (T7) -LW RA,0014 (SP) -ADDIU SP,SP,0020 -ADDIU V0,V1,FFFF -JR RA -NOP - -7000ACF0 B8F0 call 700145B0: A0=96, A1=80064ED0, A2=80064EB0, A3=8 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A1,8006 -LUI A2,8006 -ADDIU A2,A2,4EB0 ;A2= 80064EB0 -ADDIU A1,A1,4ED0 ;A1= 80064ED0 -ADDIU A0,R0,0096 ;A0= 96 -JAL 700145B0 -ADDIU A3,R0,0008 ;A3= 8 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000AD30 B930 unconditional return -JR RA -NOP - -7000AD38 B938 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -LUI A1,8003 -ADDIU A1,A1,9200 ;A1=80029200: "vi_c_debug" -JAL 70004E60 ;V0=p->debug.notice.list entry for name A1 and data A0 -ADDIU A0,A0,4500 ;A0=80024500: -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,4EF0 ;A1=80064EF0 -ADDIU A0,A0,4F10 ;A0=80064F10 -JAL 7000D6D0 -ADDIU A2,R0,0008 ;A2=8 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000AD80 B980 -SW A0,0000 (SP) -SW A1,0004 (SP) -JR RA -OR V0,R0,R0 - -7000AD90 B990 -SW A0,0000 (SP) -SW A1,0004 (SP) -JR RA -OR V0,R0,R0 - -7000ADA0 B9A0 unconditional return -JR RA -NOP - -7000ADA8 B9A8 unconditional return -JR RA -NOP - -7000ADB0 B9B0 reset stdout display; redirects to 7000AF00 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000AF00 ;reset stdout display -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000ADD0 B9D0 write char A2 to stdout at position (A0,A1) - accepts: A0=xpos, A1=ypos, A2=char -SW A2,0008 (SP) -ANDI T6,A2,00FF ;T6=char -LUI V1,8002 -LUI T0,8002 -LUI T2,8002 -LUI T1,8002 -OR A2,T6,R0 ;A2=char -SW A0,0000 (SP) -ADDIU T1,T1,68B0 -ADDIU T2,T2,6710 ;T2=80026710: p->color table end -ADDIU T0,T0,6610 ;T0=80026610: p->color table start -LW V1,68AC (V1) ;V1=800268AC: stdout.curfgcolor -OR V0,R0,R0 ;V0=0 default color index -OR A3,R0,R0 ;A3=0 color table offset -//7000AE08: check if color already in table -LW T7,0004 (T0) ;T7=table.fgcolor -ADDIU T0,T0,0008 ;T0+=8 next entry -ADDU T9,T2,A3 -BNEL V1,T7,7000AE30 ;loop on color mismatch -ADDIU V0,V0,0001 -//7000AE1C: -LW T8,0004 (T1) ;T8=stdout.curbgcolor -LW T3,0004 (T9) ;T7=table.bgcolor -BEQL T8,T3,7000AEA8 ;branch if colors match -LW T6,0000 (SP) -//7000AE2C: loop for each color entry -ADDIU V0,V0,0001 -SLTI AT,V0,0020 -BNE AT,R0,7000AE08 ;loop through all 20 entries -ADDIU A3,A3,0008 -//7000AE3C: add color pair to index if not found -LUI A3,8002 -ADDIU A3,A3,6810 -LW V1,0000 (A3) ;V1=80026810: stdout.#colors -LUI T6,8002 -ADDIU T6,T6,68A8 -LW AT,0000 (T6) ;AT= 800268A8: stdout.curbgcolor -LUI T4,8002 -ADDIU T4,T4,6610 -SLL A0,V1,0x3 -ADDU T5,A0,T4 -SW AT,0000 (T5) ;bgcolor-> entry.bgcolor -LW T9,0004 (T6) -ADDU T8,T2,A0 -ADDIU T7,V1,0001 -SW T9,0004 (T5) ;fgcolor-> entry.fgcolor -LW AT,0000 (T1) -SW AT,0000 (T8) -LW T4,0004 (T1) -SW T4,0004 (T8) -BGEZ T7,7000AE9C -ANDI T5,T7,001F -BEQ T5,R0,7000AE9C ;correct table if 20 entries -NOP -ADDIU T5,T5,FFE0 -//7000AE9C: update #colors in table -SW T5,0000 (A3) ;stdout.#color -=20 -OR V0,T5,R0 ;V0=index -//7000AEA4: write char to stdout buffer -LW T6,0000 (SP) ;T6=ypos -SLL T3,A1,0x1 -LUI T4,8002 -SLL T9,T6,0x3 -ADDU T9,T9,T6 -SLL T9,T9,0x2 -SUBU T9,T9,T6 -SLL T9,T9,0x1 ;T9=ypos*46 -ADDU T8,T9,T3 ;T9= (ypos*46) + (xpos*2) -ADDIU T4,T4,5030 -ADDU V1,T8,T4 -SB A2,0000 (V1) ;char-> 80025030+offset: write char to stdout buffer -JR RA -SB V0,0001 (V1) ;V0-> 80025031 + offset: write color index to stdout buffer - -7000AEDC BADC reset stdout x and y positions to upper left margin -LUI T6,8002 -LW T6,4FA0 (T6) ;T6=80024FA0: stdout.xmargin -LUI AT,8002 -LUI T7,8002 -LW T7,4FA4 (T7) ;T7=80024FA4: stdout.ymargin -SW T6,4FA8 (AT) ;stdout.xmargin -> 80024FA8: reset stdout.xpos -LUI AT,8002 -JR RA -SW T7,4FAC (AT) ;stdout.ymargin -> 80024FAC: reset stdout.ypos - -7000AF00 BB00 reset stdout display -ADDIU SP,SP,FFD8 -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW RA,0024 (SP) -SW S0,0014 (SP) -ADDIU S1,R0,0050 -OR S2,R0,R0 -ADDIU S3,R0,0023 -//7000AF24: reset xpos -OR S0,R0,R0 -//7000AF28: clear each char individually -OR A0,S0,R0 ;A0=S0: xpos -OR A1,S2,R0 ;A1=S2: ypos -JAL 7000ADD0 ;write char A2 to stdout at position (A0,A1) -OR A2,R0,R0 ;A2=NULL -ADDIU S0,S0,0001 -BNEL S0,S1,7000AF2C ;clear 50 columns -OR A0,S0,R0 -//7000AF44: then clear 23 rows -ADDIU S2,S2,0001 -BNEL S2,S3,7000AF28 -OR S0,R0,R0 -//7000AF50: -JAL 7000AEDC ;reset stdout x and y positions to upper left margin -NOP -JAL 7000ADA0 ;unconditional return -NOP -//7000AF60: return -LW RA,0024 (SP) -LUI AT,8002 -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -SW R0,6810 (AT) -JR RA -ADDIU SP,SP,0028 - -7000AF84 BB84 removed: copy stdout char from position (A0,A1) to (A2,A3) - accepts: A0=source x, A1=source y, A2=target x, A3=target y -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -JR RA -SW A3,000C (SP) - -7000AF98 BB98 scroll stdout A0 lines; A0 should be a negative offset (-2 scrolls up two lines) - accepts: A0=number of lines to push up -ADDIU SP,SP,FFD8 -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW RA,0024 (SP) -SW S0,0014 (SP) -ADDIU S1,R0,0021 ;S1=0x21: final line -ADDIU S2,R0,0050 -ADDIU S3,A0,0021 ;S3=A0+0x21: ysource -//7000AFBC: copy each line from bottom to top -BLTZ S3,7000AFF4 ;erase line 0x21 if invalid -SLTI AT,S3,0023 -BEQ AT,R0,7000AFF4 ;erase line 0x21 if over line 0x22 -OR S0,R0,R0 ;S0=0 init. count -//7000AFCC: copy line -OR A0,S0,R0 ;A0=S0: count -OR A1,S3,R0 ;A1= A0+0x21: ysource -OR A2,S0,R0 ;A2=S0: count -JAL 7000AF84 ;removed: copy stdout char from position (A0,A1) to (A2,A3) -OR A3,S1,R0 ;A3= ytarget -ADDIU S0,S0,0001 ;count+=1 -BNEL S0,S2,7000AFD0 ;loop 0x50 times -OR A0,S0,R0 -BEQ R0,R0,7000B018 ;V0=S1: ypos.cur -OR V0,S1,R0 -//7000AFF4: erase line: fill line 0x21 with NULLs -OR S0,R0,R0 ;S0=0 init. count -//7000AFF8: -OR A0,S0,R0 ;A0=S0: count -OR A1,S1,R0 ;A1=ypos.cur -JAL 7000ADD0 ;write char A2 to stdout at position (A0,A1) -OR A2,R0,R0 ;A2=0 NULL -ADDIU S0,S0,0001 ;count+=1 -BNEL S0,S2,7000AFFC ;loop 0x50 times -OR A0,S0,R0 -OR V0,S1,R0 ;V0=S1: ypos.cur -//7000B018: copy previous line -ADDIU S3,S3,FFFF ;S3-=1 ysource-=1 -BNE S1,R0,7000AFBC -ADDIU S1,S1,FFFF ;S1-=1 ytarget-=1 -//7000B024: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7000B040 AC40 translates and saves stdout text position (A0,A1) - accepts: A0=xpos, A1=ypos -LUI T6,8002 -LW T6,4FA0 (T6) ;T6=80024FA0: stdout.xmargin -LUI T7,8002 -LW T7,4FA4 (T7) ;T7=80024FA4: stdout.ymargin -LUI AT,8002 -ADDU A0,A0,T6 -SW A0,4FA8 (AT) ;xpos+offset -> 80024FA8: stdout.xpos -LUI AT,8002 -ADDU A1,A1,T7 -JR RA -SW A1,4FAC (AT) ;ypos+offset -> 80024FAC: stdout.ypos - -7000B06C AC6C set stdout text (foreground) color, alpha inverted (debug menu) - accepts: A0=red, A1=green, A2=blue, A3=alpha -SLL T6,A0,0x18 -SLL T7,A1,0x10 -OR T8,T6,T7 ;T8=RR.GG.00.00 -SLL T9,A2,0x8 -ADDIU T1,R0,00FF -SUBU T2,T1,A3 ;T2=FF-alpha: invert alpha -OR T0,T8,T9 -OR T3,T0,T2 ;T3=RR.GG.BB.AA -LUI AT,8002 -JR RA -SW T3,68AC (AT) ;rgba -> 800268AC: stdout.fgcurcolor - -7000B098 BC98 set stdout background color, alpha inverted - accepts: A0=red, A1=green, A2=blue, A3=inverse alpha -SLL T6,A0,0x18 -SLL T7,A1,0x10 -OR T8,T6,T7 -SLL T9,A2,0x8 -ADDIU T1,R0,00FF -SUBU T2,T1,A3 ;T2=FF - A3: inverse alpha -OR T0,T8,T9 -OR T3,T0,T2 -LUI AT,8002 -JR RA -SW T3,68B4 (AT) ;rgba -> 800268B4: stdout.bgcurcolor - -7000B0C4 BCC4 write char A0 to stdout (debug menu) - accepts: A0=char -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -JAL 7000441C ;V0= video2.txtClipW -SW A0,0028 (SP) ;SP+28=char -ADDIU T6,V0,FFF3 -BGEZ T6,7000B0E8 ;branch if value positive -SRA T7,T6,0x2 ;T7=txt.width-margin / 2 -ADDIU AT,T6,0003 -SRA T7,AT,0x2 -//7000B0E8: grab y margin -JAL 7000442C ;V0= video2.txtClipH -SW T7,0024 (SP) ;SP+24= xmargin -ADDIU T0,V0,FFF6 -ADDIU AT,R0,0007 -DIV T0,AT -LBU A2,002B (SP) ;A2=char A0 -MFLO T0 ;T0=(txt.height-margin) / 7 -LUI V0,8002 -BEQ A2,R0,7000B120 ;skip if NULL -OR V1,A2,R0 ;V1=A2: char -SLTI AT,V1,0020 -BNE AT,R0,7000B148 ;branch if a control char -SLTI AT,V1,007F -BEQ AT,R0,7000B148 ;branch if not ASCII -//7000B120: valid ASCII chars -LUI A3,8002 -ADDIU A3,A3,4FAC -ADDIU V0,V0,4FA8 -LW A0,0000 (V0) ;A0=80024FA8: stdout.curxpos -LW A1,0000 (A3) ;A1=80024FAC: stdout.curypos -SW V1,001C (SP) ;SP+1C= char -JAL 7000ADD0 ;write char A2 to stdout at position (A0,A1) -SW T0,0020 (SP) ;SP+20= ymargin -//7000B140: -LW V1,001C (SP) ;V1= char -LW T0,0020 (SP) ;T0= ymargin -//7000B148: advance stdout.curxpos by one -LUI V0,8002 -ADDIU V0,V0,4FA8 -LW T9,0000 (V0) ;stdout.curxpos -LUI A3,8002 -ADDIU AT,R0,000D -ADDIU T1,T9,0001 -ADDIU A3,A3,4FAC -BEQ V1,AT,7000B184 ;move down a line if carriage return -SW T1,0000 (V0) ;stdout.curxpos +=1 -ADDIU AT,R0,000A -BEQ V1,AT,7000B184 ;move down a line if line feed -LW T3,0024 (SP) ;T3=xmargin -SLT AT,T1,T3 -BNEL AT,R0,7000B1B4 ;move down a line if exceeds xmargin -LW RA,0014 (SP) -//7000B184: move stdout.curypos to a new line when required -LW T5,0000 (A3) ;stdout.curypos -LUI T4,8002 -LW T4,4FA0 (T4) ;T4= stdout.leftmargin -ADDIU T6,T5,0001 -SLT AT,T6,T0 -SW T6,0000 (A3) ;stdout.curypos +=1 -BNE AT,R0,7000B1B0 ;return if stdout.curypos within ymargin -SW T4,0000 (V0) ;stdout.curxpos = stdout.leftmargin: x to beginning of new line -//7000B1A4: if beyond bounds, reset to top of screen -LUI T8,8002 -LW T8,4FA4 (T8) ;T8=stdout.uppermargin -SW T8,0000 (A3) ;stdout.curypos = stdout.uppermargin -//7000B1B0: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000B1C0 BDC0 write char A2 to (A0,A1) in stdout, translating position (debug menu) - accepts: A0=xpos, A1=ypos, A2=char -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000B040 ;translates and saves stdout text position (A0,A1) -SW A2,0020 (SP) -JAL 7000B0C4 ;write char A0 to stdout -LBU A0,0023 (SP) ;A0=char -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000B1E8 ADE8 write string A0 to stdout (debug menu) - accepts: A0=p->string -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LBU S0,0000 (A0) -OR S1,A0,R0 ;S1=A0: p->string -BEQ S0,R0,7000B21C ;return if NULL -ANDI A0,S0,00FF -//7000B208: read each char until NULL -JAL 7000B0C4 ;write char A0 to stdout -ADDIU S1,S1,0001 -LBU S0,0000 (S1) -BNEL S0,R0,7000B208 -ANDI A0,S0,00FF -//7000B21C: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -7000B230 BE30 write string A2 to (A0,A1) in stdout - accepts: A0=xpos, A1=ypos, A2=p->string -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S1,0018 (SP) -OR S1,A2,R0 ;S1=A2: p->string -JAL 7000B040 ;translates and saves stdout text position (A0,A1) -SW S0,0014 (SP) -LBU S0,0000 (S1) ;S0= next char in string -BEQ S0,R0,7000B268 ;return if NULL -//7000B250: write string to stdout -ANDI A0,S0,00FF ;A0= char -JAL 7000B0C4 ;write char A0 to stdout -ADDIU S1,S1,0001 ;S1+=1 string.next() -LBU S0,0000 (S1) -BNEL S0,R0,7000B254 ;loop through string -ANDI A0,S0,00FF -//7000B268: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -7000B27C BE7C write stdout to screen - accepts: A0=p->display list -ADDIU SP,SP,FF78 -SW S5,002C (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -LUI A3,8002 -OR S0,A0,R0 ;S0=A0: p->DL -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -OR S1,A0,R0 ;S1=A0: DL -ADDIU A2,R0,FFFF ;A2=-1 -ADDIU A3,A3,6610 ;A3=80026610: #colours -OR S5,R0,R0 ;S5=0 -OR T0,R0,R0 ;T0=0: offset to current entry -//7000B2C4: set entry in column -LUI T6,8002 -ADDIU A1,T6,5030 ;A1=80025030: p->screen entries -ADDU A0,T0,A1 ;A0=p->current entry -//7000B2D0: read entries to allocate space -LBU V0,0000 (A0) ;V0=char -ADDIU A1,A1,0046 ;A1+=46: next entry in row -LBU V1,0001 (A0) ;V1=colour# -BEQ V0,R0,7000B2F8 ;branch if no entry -NOP -BEQL V1,A2,7000B2F8 ;branch if invalid colour -ADDIU S1,S1,0018 -ADDIU S1,S1,0010 ;S1+=10: -OR A2,V1,R0 ;A2=colour# -ADDIU S1,S1,0018 ;S1+=18: -//7000B2F8: loop for each row and column -BNE A1,A3,7000B2D0 ;loop until end of screen -ADDIU A0,A0,0046 ;A0+=46: next entry in row -ADDIU T0,T0,0002 ;T0+=2: next entry in column -SLTI AT,T0,0046 -BNEZ AT,7000B2C4 ;loop for each entry in column -NOP -//7000B310: determine what percentage of commands remaings -JAL 7F0BD77C ;V0=#commands that can fit in block -OR A0,S0,R0 ;A0=S0: DL start -SUBU A0,S1,S0 ;A0=S1-S0: allocated size -BGTZ A0,7000B32C ;branch if something to write -ADDIU V1,V0,F800 ;V1=#commands-0x800 -BEQ R0,R0,7000B528 ;return if nothing to write -OR V0,S0,R0 ;V0=S0: DL -//7000B32C: set 0% remaining -BGTZ V1,7000B340 ;branch if at least 0x800 commands can be written -ADDIU S4,R0,FFFF ;S4=-1 -LUI AT,8002 -BEQ R0,R0,7000B398 -SW R0,68B8 (AT) ;0->800268B8: percentage remaining -//7000B340: compute percentage of command memory remaining -SLT AT,V1,A0 -BEQ AT,R0,7000B38C ;set 0x100 if #commands greater than allocation -SLL T7,V1,0x8 -SUBU T7,T7,V1 ;T7=#commands * 0xFF -DIV T7,A0 -BNE A0,R0,7000B360 -NOP -BREAK 00001C00 ;Break: division by zero -//7000B360: catch funky division -ADDIU AT,R0,FFFF -BNE A0,AT,7000B378 -LUI AT,8000 -BNE T7,AT,7000B378 -NOP -BREAK 00001800 -//7000B378: % remaining -LUI AT,8002 -MFLO T8 -SW T8,68B8 (AT) ;#commands * 0xFF / allocation ->800268B8: percentage remaining -BEQ R0,R0,7000B39C -OR V0,S0,R0 ;V0=S0: p->DL -//7000B38C: 100% (256) -ADDIU T9,R0,0100 -LUI AT,8002 -SW T9,68B8 (AT) ;0x100->800268B8: percentage remaining -OR V0,S0,R0 ;V0=S0: p->DL -//7000B39C: -LUI T2,8002 -ADDIU T2,T2,4FB0 ;T2=80024FB0: display list snippet -LUI T1,0600 -SW T1,0000 (V0) ;06000000 -> DL+0: rsp_displaylist: push -SW T2,0004 (V0) ;80024FB0 -> DL+4: rsp_displaylist: use display list snippet -LUI S8,8002 -LUI S7,8002 -ADDIU S0,S0,0008 ;S0+=8: next DL -ADDIU S7,S7,6610 ;S7=80026610: primary colour index -ADDIU S8,S8,6710 ;S8=80026710: enviroment colour index -SW R0,0040 (SP) ;SP+40=0 -OR S5,R0,R0 ;S%=0 -ADDIU S6,R0,0050 ;S6=0x50 -//7000B3D0: -LW T3,0040 (SP) ;T3=offset to entry in column -LUI T4,8002 -ADDIU T4,T4,5030 ;T4=80025030: p->screen entries -OR S1,R0,R0 ;S1=0 count -ADDU S2,T3,T4 ;S2=p->entry in column -//7000B3E4: grab entry -LBU S3,0000 (S2) ;S3=char -LBU V1,0001 (S2) ;V1=colour# -BEQL S3,R0,7000B504 ;skip if no text -ADDIU S1,S1,0001 -BEQ V1,S4,7000B42C ;branch if colour# -1 (invalid) -SLL V0,V1,0x3 ;V0=colour#*8 colour->offset -//7000B3FC: write colourizer ops -ADDU T5,S7,V0 ;T5=80026610+offset: p->foreground colour -LW AT,0000 (T5) ;AT=prim colour upper op [FA000000] -ADDU T8,S8,V0 ;T8=80026710+offset: p->background colour -ADDIU S0,S0,0010 ;S0+=10: next 2 DL ops -SW AT,FFF0 (S0) ;AT->DL-10: rdp_setprimcolour upper half -LW T7,0004 (T5) ;T7=80026614+offset: prim colour -OR S4,V1,R0 ;S4=V1: offset in colour tables -SW T7,FFF4 (S0) ;T7->DL-C: rdp_setprimcolour: colour -LW AT,0000 (T8) ;AT=env colour upper op [FB000000] -SW AT,FFF8 (S0) ;AT->DL-8: rdp_setenvcolour upper half -LW T1,0004 (T8) ;T7=80026714+offset: background colour -SW T1,FFFC (S0) ;T1->DL-4: rdp_setenvcolour: colour -//7000B42C: test if you can draw text, apparently skipped randomly -JAL 7000A450 ;V0=random# -NOP -LUI T3,8002 -LW T3,68B8 (T3) ;T3=800268B8: percentage remaining -ANDI T2,V0,00FF ;T2=random byte -SLTU AT,T2,T3 -BEQL AT,R0,7000B504 ;skip writing text if rand >= remaining, which is stupid -ADDIU S1,S1,0001 -JAL 7F0BD77C ;V0=#commands that can fit in block -OR A0,S0,R0 ;A0=S0: DL -SLTI AT,V0,0400 -BNEZ AT,7000B500 ;don't write if there isn't at least 0x400 commands available -OR V0,S0,R0 ;V0=S0: DL -//7000B460: draw text using textrect -SLL V1,S1,0x4 ;V1=S1*0x10: count*0x10 -SLL A0,S5,0x3 -SUBU A0,A0,S5 -ADDIU T4,V1,0010 ;T4=(S1+1)*10 -ANDI T6,T4,0FFF ;T6=((S1+1)*10) & 0xFFF -SLL A0,A0,0x2 ;A0=S5*1C -ANDI T2,V1,0FFF ;T2=(S1*0x10) & 0xFFF -SLL T3,T2,0xC ;T3=T2 * 0x1000: lower right x -SLL T5,T6,0xC ;T5=T6 * 0x1000: upper left x -ADDIU T9,A0,001C ;T9=(S5+1)*1C -ANDI T4,A0,0FFF ;T4=(S5*1C) & 0xFFF: lower right y -LUI AT,E400 -ADDIU A2,S3,FFE0 ;A2=char-0x20 -SRA T2,A2,0x5 ;T2=(char-0x20) / 0x20 -OR T7,T5,AT ;T7=E4000000 | ulx -OR T6,T3,T4 ;T6=lrx | lry -ANDI T8,T9,0FFF ;T8=(S5+1)*1C) & 0xFFF: upper left y -OR T1,T7,T8 ;T1=E4000000 | ulx | uly -SLL T3,T2,0x3 -SUBU T3,T3,T2 -ADDIU S0,S0,0008 ;S0+=8: next DL op -OR A1,S0,R0 ;A1=S0: DL -SLL T3,T3,0x5 ;T3=(char-0x20) / 0x20 * 0xE0: bank# -SW T1,0000 (V0) ;T1->DL+0: rdp_texrect: upper word -ANDI T8,A2,001F ;T8=(char-0x20) & 0x1F -SW T6,0004 (V0) ;T6->DL+4: rdp_texrect: lower word -SLL T1,T8,0x17 ;T1=((char-0x20) & 0x1F)*0x800000: entry in bank [0F800000] -ANDI T4,T3,FFFF ;T4=T3->short -ADDIU S0,S0,0008 ;S0+=8: next DL op -LUI T5,B400 -SW T5,0000 (A1) ;T5->DL+8: rsp_rdphalf_1: upper word -OR A3,S0,R0 ;A3=S0: DL -OR T6,T1,T4 ;T6=entry in bank | bank#: upper left s | upper left t -SW T6,0004 (A1) ;T6->DL+C: rsp_rdphalf_1: lower word, of formula 0F80.01C0 -LUI T9,0400 -ORI T9,T9,0400 ;T9=04000400: dsdx|dtdy -LUI T5,B300 -SW T5,0000 (A3) ;T5->DL+10: rsp_rdphalf_2: upper word -SW T9,0004 (A3) ;T9->DL+14: rsp_rdphalf_2: change in s/x, t/y -ADDIU S0,S0,0008 ;S0+=8: next DL op -//7000B500: loop for each row and column (in a rather silly way...) -ADDIU S1,S1,0001 ;S1++ -BNE S1,S6,7000B3E4 ;branch if count < 0x50 -ADDIU S2,S2,0046 ;S2+=46: next character in row -LW T7,0040 (SP) ;T7=SP+40: offset to entry in column -ADDIU S5,S5,0001 ;S5++ count++ -ADDIU AT,R0,0023 ;AT=0x23: #characters in a column -ADDIU T8,T7,0002 ;T8=T7+2: next entry in column -BNE S5,AT,7000B3D0 ;loop for each character in column -SW T8,0040 (SP) ;save updated value -//7000B524: return -OR V0,S0,R0 ;V0=S0: p->DL -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0088 - -# joystick manager - -7000B560 C160 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -LUI A1,8003 -ADDIU A1,A1,9390 ;A1=80029390: "joy_c_debug" -JAL 70004E60 ;V0=p->debug.notice.list entry for name A1 and data A0 -ADDIU A0,A0,68C0 ;A0=800268C0: -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,5368 ;A1=80065368 -ADDIU A0,A0,5370 ;A1=80065370 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,5388 ;A1=80065388 -ADDIU A0,A0,5390 ;A0=80065390 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,53A8 ;A1=800653A8 -ADDIU A0,A0,53B0 ;A0=800653B0 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,53C8 ;A1=800653C8 -ADDIU A0,A0,53D0 ;A0=800653D0 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,5328 ;A1=80065328 -ADDIU A0,A0,5350 ;A0=80065350 -JAL 7000D6D0 -ADDIU A2,R0,000A ;A2=A -LUI A1,8006 -ADDIU A1,A1,5350 ;A1= 80065350 -ADDIU A0,R0,0005 ;A0= entry 5 -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -OR A2,R0,R0 ;A2= 0 -ADDIU T6,R0,0001 -LUI AT,8002 -SW T6,6918 (AT) -LUI AT,8002 -SW R0,6924 (AT) -LUI T7,8006 -LUI AT,8002 -ADDIU V0,T7,4F30 -LUI A1,8006 -SW R0,6928 (AT) -ADDIU A1,A1,5328 -OR V1,V0,R0 -ADDIU A0,R0,FFFF -SW R0,01E0 (V1) -SW R0,01E4 (V1) -SW R0,01E8 (V1) -SW R0,01EC (V1) -SW A0,01F8 (V1) -ADDIU V0,V0,01FC -ADDIU V1,V1,01FC -SB R0,FE1A (V0) -SB R0,FE19 (V0) -SB R0,FE18 (V0) -SH R0,FE16 (V0) -SB R0,FE14 (V0) -SB R0,FE13 (V0) -SB R0,FE12 (V0) -SH R0,FE10 (V0) -SB R0,FE0E (V0) -SB R0,FE0D (V0) -SB R0,FE0C (V0) -SH R0,FE0A (V0) -SH R0,FE04 (V0) -SB R0,FE06 (V0) -SB R0,FE07 (V0) -BNE V0,A1,7000B63C -SB R0,FE08 (V0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000B6AC C2AC -LUI T6,8002 -LW T6,6918 (T6) ;T6=80026918: -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BEQ T6,R0,7000B718 -LUI A0,8006 -ADDIU A0,A0,5370 -ADDIU A1,SP,001C -JAL 7000DF10 -OR A2,R0,R0 -LUI A0,8006 -ADDIU A0,A0,5390 ;A0=80065390: -ADDIU A1,SP,001C ;A1=SP+1C: p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -JAL 7000B810 ;tests for disconnected controllers -NOP -LUI A0,8006 -ADDIU A0,A0,53B0 ;A0=800653B0: -ADDIU A1,SP,001C ;A1=SP+1C: p->buffer -JAL 7000DF10 -OR A2,R0,R0 -LUI A0,8006 -ADDIU A0,A0,53D0 ;A0=800653D0: -ADDIU A1,SP,001C ;A1=SP+1C: p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000B728 B328 removed: V0=3 (output enabled | slot filled) - accepts: A0=p->controller.packet -SW A0,0000 (SP) -JR RA -ADDIU V0,R0,0003 - -7000B734 B334 test controller A0 for rumble pak and generate rumble commands if found - accepts: A0=controller# -LUI T6,8002 -ADDIU T6,T6,68D8 -SLL V0,A0,0x2 -ADDU A3,V0,T6 -LW T7,0000 (A3) ;A3=800268D8+offset: ctrl.rumble.present -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -BLTZ T7,7000B800 -OR A2,A0,R0 ;A2=controller# -//7000B758: -LUI T8,8006 -ADDIU T8,T8,53E8 -ADDU V1,V0,T8 -LHU T9,0000 (V1) -ANDI T0,T9,0004 -BEQL T0,R0,7000B804 -LW RA,0014 (SP) -//7000B774: -LBU T1,0002 (V1) -LUI A0,8006 -ADDIU A0,A0,5350 -ANDI T2,T1,0001 -BEQ T2,R0,7000B800 -//7000B788: -SLL T3,A2,0x2 -SUBU T3,T3,A2 -SLL T3,T3,0x2 -ADDU T3,T3,A2 -LUI T4,8006 -ADDIU T4,T4,53F8 -SLL T3,T3,0x3 ;T3=controller# * 68 -ADDU A1,T3,T4 ;A1=800653F8+offset: -SW A1,0020 (SP) -SW A2,0028 (SP) -JAL 70014740 ;V0= device on PIF channel A2 -SW A3,001C (SP) -//7000B7B8: return if not a rumble pak -ADDIU AT,R0,000A ;AT= 8 (rumble pak) | 2 (port filled) -LW A1,0020 (SP) ;A1= controller packet -LW A2,0028 (SP) ;A2= channel# -BEQ V0,AT,7000B7D4 ;proceed if rumble pak preset -LW A3,001C (SP) -ADDIU AT,R0,000B ;AT= 8 (rumble pak) | 2 (port filled) | 1 (output enabled) -BNE V0,AT,7000B800 ;return if a rumble pak isn't ready in the slot -//7000B7D4: rumble if required -LUI A0,8006 -ADDIU A0,A0,5350 ;A0=80065350 -JAL 7000CD38 ;handle rumble pak output to channel A2 using packet A1 -SW A3,001C (SP) -BNE V0,R0,7000B7F8 ;set presence invalid on error -LW A3,001C (SP) -//7000B7EC: set presence valid -ADDIU T5,R0,0001 -BEQ R0,R0,7000B800 -SW T5,0000 (A3) ;1->ctrl.rumble.present -//7000B7F8: set presence invalid -ADDIU T6,R0,FFFF -SW T6,0000 (A3) ;-1->ctrl.rumble.present -//7000B800: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000B810 C410 test for disconnected controllers -LUI V0,8002 -ADDIU V0,V0,692C -LW T6,0000 (V0) ;T6=8002692C: -ADDIU SP,SP,FFC8 -SW RA,001C (SP) -BEQ T6,R0,7000B85C -SW S0,0018 (SP) -//7000B82C: -LUI A0,8006 -LUI A1,8002 -LUI A2,8006 -SW R0,0000 (V0) ;0->8002692C: -ADDIU A2,A2,53E8 ;A2=800653E8: controller status target -ADDIU A1,A1,68D0 ;A1=800268D0: controller presence flags -JAL 70014900 -ADDIU A0,A0,5350 ;A0=80065350: p->thread list -ADDIU T7,R0,0001 -LUI AT,8002 -BEQ R0,R0,7000B8F0 -SW T7,691C (AT) ;1->8002691C: -//7000B85C: -LUI A0,8006 -ADDIU S0,R0,000F -JAL 70014CC0 ;retrieve current controller status from PIF, storing at 80067CA0 -ADDIU A0,A0,5350 ;A0=80065350: p->thread list -LUI A0,8006 -ADDIU A0,A0,5350 ;A0=80065350: p->thread list -OR A1,R0,R0 ;A1= NULL -JAL 7000DDD0 -ADDIU A2,R0,0001 -LUI A0,8006 -JAL 70014D44 ;return status list in A0 for current PIF status in buffer -ADDIU A0,A0,53E8 ;A0=800653E8: controller 1 status f/PIF -LUI T8,8006 -LBU T8,53EB (T8) -LUI T0,8006 -LUI T2,8006 -ANDI T9,T8,0008 -BEQ T9,R0,7000B8AC -LUI T4,8006 -ADDIU S0,R0,000E -//7000B8AC: -LBU T0,53EF (T0) -LUI AT,8002 -ANDI T1,T0,0008 -BEQ T1,R0,7000B8C4 -NOP -ADDIU S0,S0,FFFE -//7000B8C4: -LBU T2,53F3 (T2) -ANDI T3,T2,0008 -BEQ T3,R0,7000B8D8 -NOP -ADDIU S0,S0,FFFC -//7000B8D8: -LBU T4,53F7 (T4) -ANDI T5,T4,0008 -BEQ T5,R0,7000B8EC -NOP -ADDIU S0,S0,FFF8 -//7000B8EC: -SB S0,68D0 (AT) -OR S0,R0,R0 -//7000B8F4: -ADDIU S0,S0,0001 -SLL T6,S0,0x18 -SRA S0,T6,0x18 -SLTI AT,S0,0004 -BNEL AT,R0,7000B8F8 -ADDIU S0,S0,0001 -//7000B90C: -LUI A3,8002 -LUI A2,8002 -ADDIU A2,A2,68D8 -ADDIU A3,A3,68D4 -OR S0,R0,R0 -//7000B920: -LUI T9,8002 -LBU T9,68D0 (T9) -ADDIU T8,R0,0001 -SLLV A1,T8,S0 -AND T0,T9,A1 -BEQ T0,R0,7000B9B0 -LBU V1,0000 (A3) -//7000B93C: -LUI T1,8006 -ADDIU T1,T1,53E8 -SLL A0,S0,0x2 -ADDU V0,A0,T1 -LHU T2,0000 (V0) -ANDI T3,T2,0003 -BEQL T3,R0,7000B9B4 -AND T9,V1,A1 -LBU T4,0003 (V0) -SLTIU V0,V1,0001 -AND T5,V0,A1 -BNEL T4,R0,7000B9B4 -AND T9,V1,A1 -BNE T5,R0,7000B980 -ADDU T6,A2,A0 -LW T7,0000 (T6) -BGTZ T7,7000B9A4 -//7000B980: -OR A0,S0,R0 -JAL 7000B734 ;test for and handle rumble for controller A0 -SW A1,0024 (SP) -LUI A3,8002 -ADDIU A3,A3,68D4 -LUI A2,8002 -ADDIU A2,A2,68D8 -LBU V1,0000 (A3) -LW A1,0024 (SP) -//7000B9A4: -OR T8,V1,A1 -BEQ R0,R0,7000B9CC -SB T8,0000 (A3) -//7000B9B0: -AND T9,V1,A1 -BEQ T9,R0,7000B9CC -XOR T0,V1,A1 -SLL T1,S0,0x2 -ADDU T2,A2,T1 -SB T0,0000 (A3) -SW R0,0000 (T2) -//7000B9CC: -ADDIU S0,S0,0001 -SLL T3,S0,0x18 -SRA S0,T3,0x18 -SLTI AT,S0,0004 -BNE AT,R0,7000B920 -NOP -//7000B9E4: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7000B9F8 C670 V0= #controllers connected -LUI T6,8002 -LW T6,68C4 (T6) ;T6=800268C4: p->ctrl.input.index.cur -LUI V0,8002 -LW V1,01F8 (T6) ;V1=T6+1F8: -BLTZ V1,7000BA20 ;if -1, derive from controller presence flags -NOP -SLL V0,V1,0x18 -SRA T7,V0,0x18 -JR RA -OR V0,T7,R0 ;V0= ->byte -//7000BA20: detect controller 1 -LBU V0,68D0 (V0) ;V0=800268D0: controller presence flags -ANDI T8,V0,0001 -BNE T8,R0,7000BA38 ;return 0 if controller 1 not present -ANDI T9,V0,0002 -JR RA -OR V0,R0,R0 -//7000BA38: detect controller 2 -BNE T9,R0,7000BA48 ;return 1 if controller 2 not present -ANDI T0,V0,0004 -JR RA -ADDIU V0,R0,0001 -//7000BA48: detect controller 3 -BNE T0,R0,7000BA58 ;return 2 if controller 3 not present -ANDI T1,V0,0008 -JR RA -ADDIU V0,R0,0002 -//7000BA58: detect controller 4 -BNE T1,R0,7000BA68 ;return 3 if controller 4 not present -ADDIU V0,R0,0004 -JR RA -ADDIU V0,R0,0003 -//7000BA68: return 4 if all present -JR RA -NOP - -7000BA70 C670 V0= controller presence flags -LUI V0,8002 -JR RA -LBU V0,68D0 (V0) ;V0=800268D0: controller presence flags - -7000BA7C C67C occillcate rumble pak when requested - Note: this function patched in later versions. -ADDIU SP,SP,FFC8 -SW S4,0028 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -LUI S0,8002 -LUI S1,8002 -LUI S4,8002 -SW RA,0034 (SP) -ADDIU S4,S4,6908 -ADDIU S1,S1,68E8 -ADDIU S0,S0,68F8 -OR S2,R0,R0 ;S2=0 player count -OR S3,R0,R0 ;S3=0 channel error offset -ADDIU S5,R0,0001 -ADDIU S6,R0,0004 -//7000BAC8: -LW V0,0000 (S4) ;V0=80026908: -LW T6,0000 (S1) ;T6=800268E8: rumble state flag -SLL T7,S2,0x2 -SUBU T7,T7,S2 -BEQ T6,V0,7000BB44 -SLL T7,T7,0x2 -ADDU T7,T7,S2 -LUI T8,8006 -ADDIU T8,T8,53F8 -SLL T7,T7,0x3 ;T7=S2*68: S2->offset -BNE S5,V0,7000BB20 -ADDU A0,T7,T8 ;A0=800653F8+offset: player S2's controller packet -//7000BAF8: -JAL 7000CAAC ;send rumble on to controller packet A0 via PIFram -NOP -BNE V0,R0,7000BB10 ;branch if error -LUI T9,8002 -BEQ R0,R0,7000BB44 -SW S5,0000 (S1) ;1->800268E8: -//7000BB10: reset flag on error -ADDIU T9,T9,68D8 -ADDU V0,S3,T9 -BEQ R0,R0,7000BB44 -SW R0,0000 (V0) ;0->800268D8+offset: reset flag for channel on error -//7000BB20: disable rumble -JAL 7000C980 ;send rumble off to controller packet A0 via PIFram -NOP -BNE V0,R0,7000BB38 ;branch if error -LUI T0,8002 -BEQ R0,R0,7000BB44 -SW R0,0000 (S1) ;0->800268E8: -//7000BB38: reset flag on error -ADDIU T0,T0,68D8 -ADDU V0,S3,T0 -SW R0,0000 (V0) ;0->800268D8+offset: reset flag for channel on error -//7000BB44: -LW V0,0000 (S0) -ADDIU S2,S2,0001 -ADDIU S3,S3,0004 -BGTZ V0,7000BB60 -ADDIU S1,S1,0004 -BEQ R0,R0,7000BB74 -SW R0,0000 (S0) -//7000BB60: -ADDIU T1,V0,FFFF -BGTZ T1,7000BB74 -SW T1,0000 (S0) -SW R0,0000 (S0) -SW R0,0000 (S4) -//7000BB74: iterate for each player -ADDIU S4,S4,0004 -BNE S2,S6,7000BAC8 -ADDIU S0,S0,0004 -//7000BB80: return -LW RA,0034 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -JR RA -ADDIU SP,SP,0038 - -7000BBA8 C7A8 set ramrom replay TLB handler to A0, command size to A1 - accepts: A0=p->TLB ramrom replay handler, A1=#controllers/command size -LUI AT,8002 -SW A0,6924 (AT) ;A0->80026924: -LUI AT,8006 -JR RA -SW A1,5324 (AT) ;A1->80065324: - -7000BBBC C7BC set ramrom record TLB handler to A0 - accepts: A0=p->TLB ramrom record handler -LUI AT,8002 -JR RA -SW A0,6928 (AT) ;A0->80026928: - -7000BBC8 C7C8 - accepts: A0=p->controller input index -LW T6,01E0 (A0) -LW T7,01E8 (A0) -OR V0,R0,R0 -ADDIU T1,R0,0014 -SW T6,01E4 (A0) -SW T7,01E0 (A0) -SLL T8,V0,0x1 -ADDU V1,A0,T8 -SH R0,01F0 (V1) -LW T9,01E0 (A0) -LW A1,01E4 (A0) -BEQ A1,T9,7000BCEC -ADDIU T2,A1,0001 -DIV T2,T1 -SLL A3,V0,0x2 -MFHI A2 -SUBU A3,A3,V0 -SLL A3,A3,0x1 -BNE T1,R0,7000BC1C -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE T1,AT,7000BC34 -LUI AT,8000 -BNE T2,AT,7000BC34 -NOP -BREAK 00001800 -ADDIU T6,A2,0013 -DIV T6,T1 -MFHI T7 -SLL T8,T7,0x2 -SLL T3,A2,0x2 -SUBU T8,T8,T7 -SUBU T3,T3,A2 -SLL T8,T8,0x3 -SLL T3,T3,0x3 -ADDU T9,A0,T8 -ADDU T4,A0,T3 -ADDU T2,T9,A3 -LHU T0,0000 (T2) -ADDU T5,T4,A3 -LHU A1,0000 (T5) -LHU T3,01F0 (V1) -NOR T4,T0,R0 -BNE T1,R0,7000BC84 -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE T1,AT,7000BC9C -LUI AT,8000 -BNE T6,AT,7000BC9C -NOP -BREAK 00001800 -AND T5,A1,T4 -OR T6,T3,T5 -SH T6,01F0 (V1) -LW T7,01E0 (A0) -ADDIU T8,A2,0001 -BEQL A2,T7,7000BCF0 -ADDIU V0,V0,0001 -DIV T8,T1 -MFHI A2 -BNE T1,R0,7000BCCC -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE T1,AT,7000BCE4 -LUI AT,8000 -BNE T8,AT,7000BCE4 -NOP -BREAK 00001800 -BEQ R0,R0,7000BC38 -ADDIU T6,A2,0013 -ADDIU V0,V0,0001 -SLL T9,V0,0x18 -SRA V0,T9,0x18 -SLTI AT,V0,0004 -BNEL AT,R0,7000BBE4 -SLL T8,V0,0x1 -JR RA -NOP - -7000BD0C C90C redirect to ramrom handlers if set -LUI V0,8002 -LW V0,6924 (V0) ;V0=80026924: p->ramrom replay TLB handler -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ V0,R0,7000BD48 ;branch if not replaying -//7000BD20: use the replay handler -LUI A0,8006 -LUI A1,8006 -LW A1,530C (A1) ;A1=8006530C: -JALR RA,V0 ;jump to replay handler (7F0C0080) -ADDIU A0,A0,512C ;A0=8006512C: -LUI AT,8006 -LUI A0,8006 -SW V0,5314 (AT) ;V0->80065314: -JAL 7000BBC8 -ADDIU A0,A0,512C ;A0=8006512C: -//7000BD48: -LUI A0,8006 -JAL 7000BBC8 -ADDIU A0,A0,4F30 ;A0=80064F30: p->cur.point in controller input index -LUI V0,8002 -LW V0,6928 (V0) ;V0=80026928: p->ramrom record TLB handler -LUI A0,8006 -ADDIU A0,A0,4F30 ;A0=80064F30: p->cur.point in controller input index -BEQL V0,R0,7000BD7C ;branch if not recording -LW RA,0014 (SP) -//7000BD6C: record controller input packet -LW A1,01E4 (A0) ;A1=cont.index+1E4: [E] -JALR RA,V0 ;jump to record handler (7F0BFE5C) -LW A2,01E0 (A0) ;A2=cont.index+1E0: [F] -//7000BD78: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000BD88 C988 -ADDIU SP,SP,FFB0 -SW RA,0014 (SP) -LUI A0,8006 -ADDIU A0,A0,5370 ;A0=80065370: -ADDIU A1,SP,004C ;A1=SP+4C: p->buffer -JAL 7000DDD0 -OR A2,R0,R0 -BNE V0,R0,7000BDFC -LUI T6,8002 -LW T6,68C8 (T6) -LUI A0,8006 -ADDIU A0,A0,5350 ;A0=80065350: -BEQ T6,R0,7000BDD0 -ADDIU A1,SP,004C ;A1=SP+4C: p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -LUI AT,8002 -SW R0,68C8 (AT) -//7000BDD0: -LUI A0,8006 -ADDIU A0,A0,5390 -ADDIU A1,SP,004C -JAL 7000DF10 -OR A2,R0,R0 -LUI V1,8002 -ADDIU V1,V1,68CC -LW T7,0000 (V1) -ADDIU T8,T7,0001 -BEQ R0,R0,7000C0DC -SW T8,0000 (V1) -//7000BDFC: -LUI A0,8006 -ADDIU A0,A0,53B0 ;A0=800653B0: -ADDIU A1,SP,004C ;A1=SP+4C: p->buffer -JAL 7000DDD0 -OR A2,R0,R0 -BNE V0,R0,7000BE58 -LUI A0,8006 -JAL 70014D70 ;retrieve controller input from PIF, storing at 80067CA0 -ADDIU A0,A0,5350 -ADDIU T9,R0,0001 -LUI AT,8002 -LUI A0,8006 -SW T9,68C8 (AT) -ADDIU A0,A0,53D0 -ADDIU A1,SP,004C -JAL 7000DF10 -OR A2,R0,R0 -LUI V1,8002 -ADDIU V1,V1,68CC -LW T3,0000 (V1) -ADDIU T4,T3,FFFF -BEQ R0,R0,7000C0DC -SW T4,0000 (V1) -//7000BE58: -LUI V1,8002 -ADDIU V1,V1,68CC -LW T5,0000 (V1) -LUI T6,8002 -BNEL T5,R0,7000C0E0 -LW RA,0014 (SP) -LW T6,691C (T6) -LUI A0,8006 -ADDIU A0,A0,5350 ;A0=80065350: -BEQ T6,R0,7000C0DC -ADDIU A1,SP,004C ;A1=SP+4C: p->buffer -JAL 7000DDD0 -OR A2,R0,R0 -BNE V0,R0,7000C0DC -LUI A1,8006 -LUI AT,8002 -ADDIU A1,A1,4F30 -SW R0,68C8 (AT) -LW V0,01E8 (A1) -ADDIU AT,R0,0014 -LW T8,01E4 (A1) -ADDIU V1,V0,0001 -DIV V1,AT -MFHI V1 -BNEL V1,T8,7000BEC8 -SLL T9,V1,0x2 -OR V1,V0,R0 -//7000BEC4: -SLL T9,V1,0x2 -SUBU T9,T9,V1 -SLL T9,T9,0x3 -ADDU A0,A1,T9 -JAL 70014E34 -SW V1,0040 (SP) -LW V0,0040 (SP) -ADDIU AT,R0,0014 -LUI A0,8002 -ADDIU T3,V0,0013 -DIV T3,AT -ADDIU A0,A0,6920 -LW T5,0000 (A0) -MFHI T4 -ADDIU AT,R0,0078 -ADDIU T6,T5,0001 -DIV T6,AT -LUI A1,8006 -ADDIU A1,A1,4F30 -MFHI T8 -SW T4,01EC (A1) -SW T6,0000 (A0) -BNE T8,R0,7000BF38 -SW V0,01E8 (A1) -JAL 7000B810 ;tests for disconnected controllers -NOP -LUI A1,8006 -ADDIU A1,A1,4F30 -LW V0,01E8 (A1) -//7000BF38: -SLL T9,V0,0x2 -SUBU T9,T9,V0 -SLL T9,T9,0x3 -ADDU A2,A1,T9 -OR A0,R0,R0 -ADDIU A3,R0,0006 -MULTU A0,A3 -MFLO V0 -ADDU T3,A2,V0 -LBU V1,0004 (T3) -BNE V1,R0,7000BF8C -NOP -LW T4,01EC (A1) -SLL T5,T4,0x2 -SUBU T5,T5,T4 -SLL T5,T5,0x3 -ADDU T6,A1,T5 -ADDU T7,T6,V0 -LBU T8,0004 (T7) -BNE T8,R0,7000BFB8 -NOP -BEQ V1,R0,7000BFC8 -ADDIU A0,A0,0001 -LW T9,01EC (A1) -SLL T3,T9,0x2 -SUBU T3,T3,T9 -SLL T3,T3,0x3 -ADDU T4,A1,T3 -ADDU T5,T4,V0 -LBU T6,0004 (T5) -BNEL T6,R0,7000BFCC -SLL T7,A0,0x18 -JAL 7000B810 ;tests for disconnected controllers -NOP -BEQ R0,R0,7000BFDC -NOP -//7000BFC8: -SLL T7,A0,0x18 -SRA A0,T7,0x18 -SLTI AT,A0,0004 -BNE AT,R0,7000BF50 -NOP -JAL 7000BA7C -NOP -LUI A0,8006 -JAL 70014D70 ;retrieve controller input from PIF, storing at 80067CA0 -ADDIU A0,A0,5350 -LUI V1,8002 -LW V1,6970 (V1) -ADDIU T9,R0,0001 -LUI AT,8002 -SW T9,68C8 (AT) -LUI AT,8002 -ADDIU V1,V1,0001 -SW V1,6970 (AT) -SLTI AT,V1,003C -BNE AT,R0,7000C0DC -LUI T1,8002 -LUI A0,8002 -LUI A1,8002 -LUI V1,8002 -LUI T2,8002 -ADDIU T2,T2,6970 -ADDIU V1,V1,6960 -ADDIU A1,A1,6950 -ADDIU A0,A0,6940 -ADDIU T1,T1,6930 -LW V0,0000 (T1) -BNEL V0,R0,7000C074 -SW R0,0000 (T1) -LW T3,0000 (A0) -BNEL T3,R0,7000C074 -SW R0,0000 (T1) -LW T4,0000 (A1) -BNEL T4,R0,7000C074 -SW R0,0000 (T1) -LW T5,0000 (V1) -BEQL T5,R0,7000C084 -LW V0,0004 (T1) -SW R0,0000 (T1) -SW R0,0000 (A0) -SW R0,0000 (A1) -SW R0,0000 (V1) -LW V0,0004 (T1) -BNEL V0,R0,7000C0B4 -SW R0,0004 (T1) -LW T6,0004 (A0) -BNEL T6,R0,7000C0B4 -SW R0,0004 (T1) -LW T7,0004 (A1) -BNEL T7,R0,7000C0B4 -SW R0,0004 (T1) -LW T8,0004 (V1) -BEQL T8,R0,7000C0C4 -ADDIU V1,V1,0008 -SW R0,0004 (T1) -SW R0,0004 (A0) -SW R0,0004 (A1) -SW R0,0004 (V1) -ADDIU V1,V1,0008 -ADDIU T1,T1,0008 -ADDIU A0,A0,0008 -BNE V1,T2,7000C040 -ADDIU A1,A1,0008 -LUI AT,8002 -SW R0,6970 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0050 -JR RA -NOP - -7000C0EC CCEC V0= current position left<->right of controller A0's control stick - accepts: A0=controller# -LUI V1,8002 -LW V1,68C4 (V1) -SW A0,0000 (SP) -SLL T6,A0,0x18 -LW T8,01F8 (V1) -SRA T7,T6,0x18 -OR A0,T7,R0 -BGEZ T8,7000C144 -LUI T9,8002 -LBU T9,68D0 (T9) -LUI T3,8002 -ADDIU T3,T3,6930 -SRAV T0,T9,T7 -ANDI T1,T0,0001 -BNE T1,R0,7000C144 -SLL T2,T7,0x2 -ADDU V1,T2,T3 -LW T4,0000 (V1) -OR V0,R0,R0 -ADDIU T5,T4,0001 -JR RA -SW T5,0000 (V1) -LW T6,01E0 (V1) -SLL T9,A0,0x2 -SUBU T9,T9,A0 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x3 -ADDU T8,V1,T7 -SLL T9,T9,0x1 -ADDU T0,T8,T9 -LB V0,0002 (T0) -JR RA -NOP - -7000C174 CD74 V0= previous position left<->right of controller A0's control stick - accepts: A0=controller# -LUI V1,8002 -LW V1,68C4 (V1) -SW A0,0000 (SP) -SLL T6,A0,0x18 -LW T8,01F8 (V1) -SRA T7,T6,0x18 -OR A0,T7,R0 -BGEZ T8,7000C1CC -LUI T9,8002 -LBU T9,68D0 (T9) -LUI T3,8002 -ADDIU T3,T3,6930 -SRAV T0,T9,T7 -ANDI T1,T0,0001 -BNE T1,R0,7000C1CC -SLL T2,T7,0x2 -ADDU V1,T2,T3 -LW T4,0000 (V1) -OR V0,R0,R0 -ADDIU T5,T4,0001 -JR RA -SW T5,0000 (V1) -LW T6,01E4 (V1) -SLL T9,A0,0x2 -SUBU T9,T9,A0 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x3 -ADDU T8,V1,T7 -SLL T9,T9,0x1 -ADDU T0,T8,T9 -LB V0,0002 (T0) -JR RA -NOP - -7000C1FC CDFC V0= current position up<->down of controller A0's control stick - accepts: A0=controller# -LUI V1,8002 -LW V1,68C4 (V1) -SW A0,0000 (SP) -SLL T6,A0,0x18 -LW T8,01F8 (V1) -SRA T7,T6,0x18 -OR A0,T7,R0 -BGEZ T8,7000C254 -LUI T9,8002 -LBU T9,68D0 (T9) -LUI T3,8002 -ADDIU T3,T3,6940 -SRAV T0,T9,T7 -ANDI T1,T0,0001 -BNE T1,R0,7000C254 -SLL T2,T7,0x2 -ADDU V1,T2,T3 -LW T4,0000 (V1) -OR V0,R0,R0 -ADDIU T5,T4,0001 -JR RA -SW T5,0000 (V1) -LW T6,01E0 (V1) -SLL T9,A0,0x2 -SUBU T9,T9,A0 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x3 -ADDU T8,V1,T7 -SLL T9,T9,0x1 -ADDU T0,T8,T9 -LB V0,0003 (T0) -JR RA -NOP - -7000C284 CE84 V0= previous position up<->down of controller A0's control stick - accepts: A0=controller# -LUI V1,8002 -LW V1,68C4 (V1) -SW A0,0000 (SP) -SLL T6,A0,0x18 -LW T8,01F8 (V1) -SRA T7,T6,0x18 -OR A0,T7,R0 -BGEZ T8,7000C2DC -LUI T9,8002 -LBU T9,68D0 (T9) -LUI T3,8002 -ADDIU T3,T3,6940 -SRAV T0,T9,T7 -ANDI T1,T0,0001 -BNE T1,R0,7000C2DC -SLL T2,T7,0x2 -ADDU V1,T2,T3 -LW T4,0000 (V1) -OR V0,R0,R0 -ADDIU T5,T4,0001 -JR RA -SW T5,0000 (V1) -LW T6,01E4 (V1) -SLL T9,A0,0x2 -SUBU T9,T9,A0 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x3 -ADDU T8,V1,T7 -SLL T9,T9,0x1 -ADDU T0,T8,T9 -LB V0,0003 (T0) -JR RA -NOP - -7000C30C CF0C test player A0's controller for button mask A1 held - accepts: A0=controller#, A1=button mask -LUI V1,8002 -LW V1,68C4 (V1) ;V1=800268C4: p->current point in controller input index -SW A0,0000 (SP) -SW A1,0004 (SP) -LW T9,01F8 (V1) -SLL T6,A0,0x18 -SRA T7,T6,0x18 -ANDI T8,A1,FFFF -OR A1,T8,R0 ;(unsigned short) A1 -BGEZ T9,7000C370 -OR A0,T7,R0 ;(short) A0 -//7000C338: return 0 if controller not present -LUI T0,8002 -LBU T0,68D0 (T0) ;T0=800268D0: controller presence flags -LUI T4,8002 -ADDIU T4,T4,6950 -SRAV T1,T0,T7 ;flags>>controller -ANDI T2,T1,0001 ;T2= flag for player A0 -BNE T2,R0,7000C370 ;skip if controller present -SLL T3,T7,0x2 -ADDU V1,T3,T4 -LW T5,0000 (V1) ;T5=80026950+offset: presence failure flag on hold -OR V0,R0,R0 ;V0= no buttons pressed -ADDIU T6,T5,0001 -JR RA -SW T6,0000 (V1) ;set presence failure flag on hold -//7000C370: return V0= requested buttons held -LW T7,01E0 (V1) ;T7= ctrl.input.index + 1E0: previous index -SLL T0,A0,0x2 -SUBU T0,T0,A0 -SLL T8,T7,0x2 -SUBU T8,T8,T7 -SLL T8,T8,0x3 ;T8= index * 0x18 -ADDU T9,V1,T8 -SLL T0,T0,0x1 ;T0= A0 * 6 -ADDU T1,T9,T0 -LHU T2,0000 (T1) ;T2= ctrl.input.index + section T7 + controller A0: previous buttons -AND V0,T2,A1 -ANDI T3,V0,FFFF -OR V0,T3,R0 ;V0= previous & mask -JR RA -NOP - -7000C3AC CFAC test player A0's controller for button mask A1 pressed - accepts: A0=player#, A1=button mask - 8000 A button 4000 B button 2000 Z button 1000 Start button - 0800 up-Dpad 0400 down-Dpad 0200 left-Dpad 0100 right-Dpad - 0020 L button 0010 R button - 0008 up-C button 0004 down-C button 0002 left-C button 0001 right-C button -LUI V1,8002 -LW V1,68C4 (V1) ;V1=800268C4: p->current point in controller input index -SW A0,0000 (SP) -SW A1,0004 (SP) -LW T9,01F8 (V1) ;T9=ctrl.input.index+1F8: -SLL T6,A0,0x18 -SRA T7,T6,0x18 -ANDI T8,A1,FFFF -OR A1,T8,R0 ;(unsigned short) A1 -BGEZ T9,7000C410 ;skip if not -1 -OR A0,T7,R0 ;(short) A0 -//7000C3D8: return 0 if controller not present -LUI T0,8002 -LBU T0,68D0 (T0) ;T0=800268D0: controller presence flags -LUI T4,8002 -ADDIU T4,T4,6960 -SRAV T1,T0,T7 ;flags>>controller -ANDI T2,T1,0001 ;T2= flag for player A0 -BNE T2,R0,7000C410 ;skip if controller present -SLL T3,T7,0x2 -ADDU V1,T3,T4 -LW T5,0000 (V1) ;T5=80026960+offset: presence failure flag -OR V0,R0,R0 ;V0= no buttons pressed -ADDIU T6,T5,0001 -JR RA -SW T6,0000 (V1) ;set presence failure flag on press -//7000C410: return V0= requested buttons pressed -SLL T7,A0,0x1 -ADDU T8,V1,T7 -LHU T9,01F0 (T8) ;T9= ctrl.input.index + controller.offset + 1F0: current buttons pressed -AND V0,T9,A1 -ANDI T0,V0,FFFF -OR V0,T0,R0 ;V0= buttons & mask -JR RA -NOP - -7000C430 D030 print controller button state - accepts: A0=p->target, A1=value - print 16 bits in A1 as ' ' or '1' to string A0, top to bottom -SW A1,0004 (SP) -ANDI V1,A1,FFFF ;V1= A1 f/caller: shift -ADDIU A1,R0,0011 -ADDIU V0,R0,000F -//7000C440: if upper bit set, print '1', not ' ' -SRAV T7,V1,V0 ;T7= A1 / 0x8000 -ANDI T8,T7,0001 ;T8= 0x8000 bit set -SLT T9,R0,T8 -MULTU T9,A1 -ADDIU V0,V0,FFFF ;V0-=1 -ADDIU A0,A0,0001 -MFLO T0 ;T0= bit * 0x11 -ADDIU T1,T0,0020 ;T1= b' ' or b'1' if bit set -BGEZ V0,7000C440 -SB T1,FFFF (A0) ;set byte -//7000C468: return -JR RA -NOP - -7000C470 D070 V0= #controllers connected; loops and redetects once for each controller -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -JAL 7000B9F8 ;V0= #controllers connected -OR S0,R0,R0 -BLEZL V0,7000C4A4 ;return if none -LW RA,001C (SP) -//7000C48C: loop once for each detected controller -JAL 7000B9F8 ;V0= #controllers connected -ADDIU S0,S0,0001 -SLT AT,S0,V0 -BNE AT,R0,7000C48C ;loop until S0 matches #connected -NOP -//7000C4A0: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C4B4 D0B4 V0=state of player A0's control stick; -2 left : 1 right - accepts: A0=player#, A1=tolerance.low, A2=tolerance.high -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SLL T6,A0,0x18 -SRA A0,T6,0x18 -SW A1,001C (SP) -JAL 7000C0EC ;cur.controller A0 horz.stick pos. -SW A2,0020 (SP) -ADDIU A0,V0,003C -SLTI AT,A0,0079 -BNE AT,R0,7000C4E8 -LW A1,001C (SP) -ADDIU A0,R0,0078 -BGEZ A0,7000C4F4 -LW T8,0020 (SP) -OR A0,R0,R0 -SUBU T9,T8,A1 -MULTU A0,T9 -ADDIU AT,R0,0078 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -MFLO T0 -NOP -NOP -DIV T0,AT -MFLO T1 -ADDU V0,T1,A1 -JR RA -NOP - -7000C528 7128 V0=state of player A0's control stick; -2 down : 1 up - accepts: A0=player#, A1=tolerance.low, A2=tolerance.high -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SLL T6,A0,0x18 -SRA A0,T6,0x18 -SW A1,001C (SP) -JAL 7000C1FC ;cur.controller A0 vert.stick pos. -SW A2,0020 (SP) -ADDIU A0,V0,003C -SLTI AT,A0,0079 -BNE AT,R0,7000C55C -LW A1,001C (SP) -ADDIU A0,R0,0078 -BGEZ A0,7000C568 -LW T8,0020 (SP) -OR A0,R0,R0 -SUBU T9,T8,A1 -MULTU A0,T9 -ADDIU AT,R0,0078 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -MFLO T0 -NOP -NOP -DIV T0,AT -MFLO T1 -ADDU V0,T1,A1 -JR RA -NOP - -7000C59C D19C -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SLL T6,A0,0x18 -SRA A0,T6,0x18 -SW A1,001C (SP) -JAL 7000C0EC ;cur.controller A0 horz.stick pos. -SW A2,0020 (SP) -ADDIU A0,V0,003C -SLTI AT,A0,0079 -BNE AT,R0,7000C5D0 -LWC1 F2,001C (SP) -ADDIU A0,R0,0078 -BGEZL A0,7000C5E0 -MTC1 A0,F4 -OR A0,R0,R0 -MTC1 A0,F4 -LUI AT,42F0 -MTC1 AT,F8 -CVT.S.W F6,F4 -LWC1 F16,0020 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -SUB.S F18,F16,F2 -DIV.S F10,F6,F8 -MUL.S F4,F10,F18 -JR RA -ADD.S F0,F4,F2 - -7000C60C D20C -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SLL T6,A0,0x18 -SRA A0,T6,0x18 -SW A1,001C (SP) -JAL 7000C1FC ;cur.controller A0 vert.stick pos. -SW A2,0020 (SP) -ADDIU A0,V0,003C -SLTI AT,A0,0079 -BNE AT,R0,7000C640 -LWC1 F2,001C (SP) -ADDIU A0,R0,0078 -BGEZL A0,7000C650 -MTC1 A0,F4 -OR A0,R0,R0 -MTC1 A0,F4 -LUI AT,42F0 -MTC1 AT,F8 -CVT.S.W F6,F4 -LWC1 F16,0020 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -SUB.S F18,F16,F2 -DIV.S F10,F6,F8 -MUL.S F4,F10,F18 -JR RA -ADD.S F0,F4,F2 - -7000C67C D27C -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LUI A0,8006 -ADDIU A0,A0,5370 -ADDIU A1,SP,001C -JAL 7000DF10 -OR A2,R0,R0 -LUI A0,8006 -ADDIU A0,A0,5390 ;A0=80065390: -ADDIU A1,SP,001C ;A1=SP+1C: p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C6BC D2BC -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LUI A0,8006 -ADDIU A0,A0,53B0 -ADDIU A1,SP,001C -JAL 7000DF10 -OR A2,R0,R0 -LUI A0,8006 -ADDIU A0,A0,53D0 ;A0=800653D0: -ADDIU A1,SP,001C ;A1=SP+1C: p->buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C6FC D2FC -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -JAL 7000C67C -NOP -LUI A0,8006 -JAL 70014FD0 -ADDIU A0,A0,5350 -JAL 7000C6BC -SW V0,001C (SP) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C734 D334 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 7000C67C -SW A1,0024 (SP) -LUI A0,8006 -ADDIU A0,A0,5350 -LBU A1,0023 (SP) -JAL 70015040 -LW A2,0024 (SP) -JAL 7000C6BC -SW V0,001C (SP) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C778 D378 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 7000C67C -SW A1,0024 (SP) -LUI A0,8006 -ADDIU A0,A0,5350 -LBU A1,0023 (SP) -JAL 70015340 -LW A2,0024 (SP) -JAL 7000C6BC -SW V0,001C (SP) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C7BC D3BC -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -JAL 7000C67C -SW A2,0028 (SP) -LUI A0,8006 -ADDIU A0,A0,5350 -LBU A1,0023 (SP) -LW A2,0024 (SP) -JAL 70015820 -LW A3,0028 (SP) -JAL 7000C6BC -SW V0,001C (SP) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C808 D408 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -JAL 7000C67C -SW A2,0028 (SP) -LUI A0,8006 -ADDIU A0,A0,5350 -LBU A1,0023 (SP) -LW A2,0024 (SP) -JAL 70015960 -LW A3,0028 (SP) -JAL 7000C6BC -SW V0,001C (SP) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000C854 C454 triggers A1 seconds of rumble on controller A0 - accepts: A0=controller#, A1=(float) seconds -LUI T6,8002 -LW T6,6924 (T6) ;T6=80026924: rumble disabled flag -MTC1 A1,F12 ;F12=A1: #seconds -SLL V1,A0,0x2 ;V1=controller# -> offset -BNE T6,R0,7000C8D4 ;return if rumble disabled -//7000C868: -LUI T7,8002 -ADDU T7,T7,V1 -LW T7,68D8 (T7) ;T7=800268D8+offset: ctrl.rumble.preset -LUI T1,8002 -LUI AT,4270 -BLEZ T7,7000C8D4 ;return if no rumble pak to rumble -ADDU T1,T1,V1 -//7000C884: if duration is longer than current duration, replace it -MTC1 AT,F4 ;F4= 60.0 [42700000] -LUI T8,8002 -ADDIU T8,T8,68F8 -MUL.S F6,F12,F4 ;F6=#seconds * 60.0: 'millisecond' value -ADDU A0,V1,T8 -LW T0,0000 (A0) ;T0=800268F8+offset: ctrl.rumble.dur -ADDIU T2,R0,0001 -TRUNC.W.S F8,F6 -MFC1 V0,F8 ;V0=milliseconds -NOP -SLT AT,T0,V0 -BEQ AT,R0,7000C8BC ;if shorter time, skip it -NOP -SW V0,0000 (A0) ;set ctrl.rumble.dur -//7000C8BC: -LW T1,68E8 (T1) ;T1=800268E8+offset: -LUI AT,8002 -ADDU AT,AT,V1 -BNE T1,R0,7000C8D4 ;return if set -NOP -SW T2,6908 (AT) ;1->80026908+offset: rumble activated -//7000C8D4: return -JR RA -NOP - -7000C8DC D4DC reset controller and rumble pak detection -ADDIU T6,R0,0001 -LUI AT,8002 -SW T6,68E8 (AT) ;1->800268E8[0] -LUI AT,8002 -SW R0,6908 (AT) ;0->80026908[0] -LUI AT,8002 -ADDIU T7,R0,0001 -SW T7,68EC (AT) ;1->800268E8[1] -LUI AT,8002 -SW R0,690C (AT) ;0->80026908[1] -LUI AT,8002 -ADDIU T8,R0,0001 -SW T8,68F0 (AT) ;1->800268E8[2] -LUI AT,8002 -SW R0,6910 (AT) ;0->80026908[2] -LUI AT,8002 -ADDIU T9,R0,0001 -SW T9,68F4 (AT) ;1->800268E8[3] -LUI AT,8002 -JR RA -SW R0,6914 (AT) ;0->80026908[3] - -7000C930 D530 set controller input index to set A0 - accepts: A0=index -SLL T6,A0,0x7 -SUBU T6,T6,A0 -LUI T7,8006 -ADDIU T7,T7,4F30 -SLL T6,T6,0x2 -ADDU T8,T6,T7 -LUI AT,8002 -JR RA -SW T8,68C4 (AT) - -7000C954 D554 V0=current controller input index -LUI T6,8002 -LW T6,68C4 (T6) -LUI T7,8006 -ADDIU T7,T7,4F30 -ADDIU AT,R0,01FC -SUBU V0,T6,T7 -DIV V0,AT -MFLO V0 -JR RA -NOP - -7000C980 D580 send rumble off to controller packet A0 via PIFram [800655A0+offset] - accepts: A0=p->controller packet - returns: V0=0 if okay, 4 if I/O error, 8 if not present -ADDIU SP,SP,FFB0 -SW RA,0014 (SP) -JAL 70015E60 -SW A0,0050 (SP) ;A0->SP+50: controller.packet -LW T7,0050 (SP) ;T7=SP+50: -ADDIU T6,R0,0003 -LUI AT,8006 -SB T6,7CE0 (AT) ;3->80067CE0: PIFcomand-write mempak -LW T8,0008 (T7) ;T8=packet+8: controller# -LUI T0,8006 -ADDIU T0,T0,55A0 ;T0=800655A0: -SLL T9,T8,0x6 ;T9=T8 * 0x40 -ADDU A1,T9,T0 ;A1=800655A0 + offset: p->data to be written -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 ;A0=1: write -//7000C9BC: -LW T1,0050 (SP) ;T1=SP+50: p->controller.packet -OR A1,R0,R0 ;A1= NULL -ADDIU A2,R0,0001 ;A2=1 -JAL 7000DDD0 -LW A0,0004 (T1) ;A0=packet+4: -LUI A1,8006 -ADDIU A1,A1,7D70 ;A1=80067D70: p->target -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 ;A0=0: read -//7000C9E0: -LW T2,0050 (SP) ;T2=SP+50: p->controller.packet -OR A1,R0,R0 ;A1= NULL -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0004 (T2) ;A0=packet+4: -//7000C9F4: offset target address for correct channel# -LW T3,0050 (SP) ;T3=SP+50: p->controller.packet -LUI V1,8006 -ADDIU V1,V1,7D70 ;V1=80067D70: p->target/source -LW A0,0008 (T3) ;A0=packet+8: controller # -ADDIU T4,SP,001C ;T4=SP+1C: space for data on stack -BEQL A0,R0,7000CA2C ;branch if A0=0: channel 0 (controller 1) -OR T7,V1,R0 -BLEZ A0,7000CA28 -OR V0,R0,R0 ;V0=0 -//7000CA18: skip to start of channel -ADDIU V0,V0,0001 ;V0++ -SLT AT,V0,A0 ;TRUE if count < A0: -BNE AT,R0,7000CA18 -ADDIU V1,V1,0001 ;V1++ p->source++ -//7000CA28: copy data from buffer to stack -OR T7,V1,R0 ;T7=p->source -ADDIU T6,V1,0024 ;T6=end of source -//7000CA30: loop -LWL AT,0000 (T7) -LWR AT,0003 (T7) ;AT=word from target -ADDIU T7,T7,000C -ADDIU T4,T4,000C -SW AT,FFF4 (T4) -LWL AT,FFF8 (T7) -LWR AT,FFFB (T7) -SW AT,FFF8 (T4) -LWL AT,FFFC (T7) -LWR AT,FFFF (T7) -BNE T7,T6,7000CA30 -SW AT,FFFC (T4) -//7000CA60: determine error status for retrieved data -LWL AT,0000 (T7) -LWR AT,0003 (T7) -SW AT,0000 (T4) -LBU V0,001E (SP) ;V0=SP+1E: r byte (error flag return) -LBU T0,0042 (SP) ;T0=SP+42: data.CRC -ANDI T8,V0,00C0 -SRA A0,T8,0x4 ;A0&=0xC0 / 0x10 -BNE A0,R0,7000CA90 ;branch if something set -NOP -BEQ T0,R0,7000CA90 ;branch if data.CRC 0 -NOP -ADDIU A0,R0,0004 ;4->SP+48: force "I/O error" -//7000CA90: -JAL 70015EA4 -SW A0,0048 (SP) ;SP+48=error status -LW RA,0014 (SP) -LW V0,0048 (SP) ;V0=error status -ADDIU SP,SP,0050 -JR RA -NOP - -7000CAAC D6AC send rumble on to controller packet A0 via PIFram - accepts; A0=p->controller packet -ADDIU SP,SP,FFB0 -SW RA,0014 (SP) -JAL 70015E60 -SW A0,0050 (SP) -LW T7,0050 (SP) -ADDIU T6,R0,0003 -LUI AT,8006 -SB T6,7CE0 (AT) -LW T8,0008 (T7) -LUI T0,8006 -ADDIU T0,T0,56A0 -SLL T9,T8,0x6 -ADDU A1,T9,T0 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -LW T1,0050 (SP) ;T1=SP+50: p->controller.packet -OR A1,R0,R0 ;A1= NULL -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0004 (T1) ;A0=controller.packet+4: -LUI A1,8006 -ADDIU A1,A1,7D70 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -LW T2,0050 (SP) ;T2=SP+50: p->controller.packet -OR A1,R0,R0 ;A1= NULL -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0004 (T2) ;A0=controller.packet+4 -LW T3,0050 (SP) -LUI V1,8006 -ADDIU V1,V1,7D70 -LW A0,0008 (T3) -ADDIU T4,SP,001C -BEQL A0,R0,7000CB58 -OR T7,V1,R0 -BLEZ A0,7000CB54 -OR V0,R0,R0 -ADDIU V0,V0,0001 -SLT AT,V0,A0 -BNE AT,R0,7000CB44 -ADDIU V1,V1,0001 -OR T7,V1,R0 -ADDIU T6,V1,0024 -LWL AT,0000 (T7) -LWR AT,0003 (T7) -ADDIU T7,T7,000C -ADDIU T4,T4,000C -SW AT,FFF4 (T4) -LWL AT,FFF8 (T7) -LWR AT,FFFB (T7) -SW AT,FFF8 (T4) -LWL AT,FFFC (T7) -LWR AT,FFFF (T7) -BNE T7,T6,7000CB5C -SW AT,FFFC (T4) -LWL AT,0000 (T7) -LWR AT,0003 (T7) -SW AT,0000 (T4) -LBU V0,001E (SP) -LBU T0,0042 (SP) -ADDIU AT,R0,00EB -ANDI T8,V0,00C0 -SRA A0,T8,0x4 -BNE A0,R0,7000CBC0 -NOP -BEQ T0,AT,7000CBC0 -NOP -ADDIU A0,R0,0004 -JAL 70015EA4 -SW A0,0048 (SP) -LW RA,0014 (SP) -LW V0,0048 (SP) -ADDIU SP,SP,0050 -JR RA -NOP - -7000CBDC D7DC generate PIF command: A3=request write data at A2 to block A1 of channel A0; exclusively used for rumble pak - accepts: A0=channel#, A1=block#, A2=p->start.buffer, A3=@target (0x40) -ADDIU SP,SP,FFA8 -SW S0,0018 (SP) -OR S0,A0,R0 -SW RA,001C (SP) -SW A1,005C (SP) -OR V1,A3,R0 -OR T0,R0,R0 -OR V0,A3,R0 -ADDIU T0,T0,0001 -SLTI AT,T0,000F -ADDIU V0,V0,0004 -BNE AT,R0,7000CBFC -SW R0,FFFC (V0) -ADDIU T6,R0,0001 -SW T6,003C (A3) -ADDIU T7,R0,00FF -ADDIU T8,R0,0023 -ADDIU T9,R0,0001 -ADDIU T1,R0,0003 -SB T7,002C (SP) -SB T8,002D (SP) -SB T9,002E (SP) -SB T1,002F (SP) -SW A2,0060 (SP) -SW V1,0054 (SP) -JAL 70015F80 ;V0= PIFram address.CRC for address A0 -LHU A0,005E (SP) -LHU T2,005E (SP) -ADDIU T5,R0,00FF -LW V1,0054 (SP) -SLL T3,T2,0x5 -OR T4,V0,T3 -SH T4,0030 (SP) -LW A2,0060 (SP) -SB T5,0052 (SP) -ADDIU V0,SP,004C -ADDIU A0,SP,002C -LBU T6,0000 (A2) -ADDIU A0,A0,0001 -SLTU AT,A0,V0 -ADDIU A2,A2,0001 -BNE AT,R0,7000CC70 -SB T6,0005 (A0) -BEQ S0,R0,7000CCD4 -ADDIU T7,SP,002C -BLEZ S0,7000CCD4 -OR T0,R0,R0 -ANDI A0,S0,0003 -BEQ A0,R0,7000CCB8 -OR V0,A0,R0 -ADDIU T0,T0,0001 -SB R0,0000 (V1) -BNE V0,T0,7000CCA4 -ADDIU V1,V1,0001 -BEQ T0,S0,7000CCD4 -ADDIU T0,T0,0004 -SB R0,0001 (V1) -SB R0,0002 (V1) -SB R0,0003 (V1) -ADDIU V1,V1,0004 -BNE T0,S0,7000CCB8 -SB R0,FFFC (V1) -OR T1,V1,R0 -ADDIU T9,T7,0024 -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T1,T1,000C -SWL AT,FFF4 (T1) -SWR AT,FFF7 (T1) -LW AT,FFF8 (T7) -SWL AT,FFF8 (T1) -SWR AT,FFFB (T1) -LW AT,FFFC (T7) -SWL AT,FFFC (T1) -BNE T7,T9,7000CCDC -SWR AT,FFFF (T1) -LW AT,0000 (T7) -ADDIU T2,R0,00FE -ADDIU V1,V1,0028 -SWL AT,0000 (T1) -SWR AT,0003 (T1) -SB T2,0000 (V1) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0058 -JR RA -NOP - -7000CD38 D938 handle rumble pak output to channel A2 using packet A1; generates required PIF commands - accepts: A0=p->???, A1=controller packet [800653F8+pl.*0x68], A2=PIF channel# -ADDIU SP,SP,FFA8 -SW S0,0020 (SP) -SW RA,0024 (SP) -ADDIU A3,R0,0080 -OR S0,A2,R0 ;S0=A2: controller# (channel) -SW A0,0004 (A1) ;A0->packet+4: p->??? -SW A2,0008 (A1) ;A2->packet+8: channel# -SW R0,0000 (A1) ;0 ->packet+0: -SB A3,0065 (A1) ;80->packet+65: device type -ADDIU V0,SP,0030 ;V0=SP+30: start of buffer -ADDIU V1,SP,0050 ;A1=SP+50: end of buffer -//7000CD64: fill buffer with 0x80's -ADDIU V0,V0,0001 ;V0++ buffer++ -SLTU AT,V0,V1 -BNE AT,R0,7000CD64 -SB A3,FFFF (V0) ;80->buffer -//7000CD74: -OR A1,S0,R0 ;A1=S0: channel# -ADDIU A2,R0,0400 ;A2=0x400: slot+0x8000 - device controller -ADDIU A3,SP,0030 ;A3=SP+30: p->data -SW R0,0010 (SP) ;SP+10=0: -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -SW A0,0058 (SP) ;A0->SP+58: [80065350] -ADDIU AT,R0,0002 -BNE V0,AT,7000CDB4 ;branch if no problem -OR V1,V0,R0 ;V1=V0: error return... -LW A0,0058 (SP) -OR A1,S0,R0 ;A1=S0: channel# -ADDIU A2,R0,0400 ;A2=0x400: device controller -ADDIU A3,SP,0030 ;A3=SP+30: p->data -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -SW R0,0010 (SP) -//7000CDB0: return if still invalid -OR V1,V0,R0 -BEQ V0,R0,7000CDC4 -LW A0,0058 (SP) -BEQ R0,R0,7000CE8C -OR V0,V1,R0 -//7000CDC4: -OR A1,S0,R0 ;A1=S0: channel# -ADDIU A2,R0,0400 ;A2=0x400: block# -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -ADDIU A3,SP,0030 ;A3=SP+30: p->data -BEQ V0,R0,7000CDE4 ;branch if no problem -LBU T6,004F (SP) ;T6=last byte of data -BEQ R0,R0,7000CE90 -LW RA,0024 (SP) -//7000CDE4: -ADDIU AT,R0,0080 -BEQ T6,AT,7000CDF8 ;branch if equals 0x80 (rumble paks always return 0x80) -LUI A0,8006 -BEQ R0,R0,7000CE8C ;return 0xB: not a rumble pak -ADDIU V0,R0,000B -//7000CDF8: -LUI V1,8006 -LUI A1,8006 -ADDIU A1,A1,57C0 ;A1=800657C0: end of stop.buffer -ADDIU V1,V1,57A0 ;V1=800657A0: start of stop.buffer -ADDIU A0,A0,57C0 ;A0=800657C0: start.buffer -ADDIU V0,R0,0001 -//7000CE10: fill rumble buffers -ADDIU V1,V1,0004 ;V1+=4 next word in stop.buffer -SB V0,0001 (A0) ;1->start.buffer -SB R0,FFFD (V1) ;0->stop.buffer -SB V0,0002 (A0) -SB R0,FFFE (V1) -SB V0,0003 (A0) -SB R0,FFFF (V1) -ADDIU A0,A0,0004 -SB V0,FFFC (A0) -BNE V1,A1,7000CE10 ;loop until buffers filled -SB R0,FFFC (V1) -//7000CE3C: -LUI T7,8006 -ADDIU T7,T7,56A0 -LUI A2,8006 -SLL V0,S0,0x6 ;V0=S0*0x40: player#->offset -ADDU A3,V0,T7 ;A3=800656A0+offset: data.recv -SW V0,002C (SP) -ADDIU A2,A2,57C0 ;A2=800657C0: data.sent -OR A0,S0,R0 ;A0=S0: channel# -JAL 7000CBDC ;generate PIF command: A3=request write data at A2 to block A1 of channel A0 -ADDIU A1,R0,0600 ;A1=600: rumble pak controller -LW V0,002C (SP) -LUI T8,8006 -ADDIU T8,T8,55A0 -LUI A2,8006 -ADDIU A2,A2,57A0 ;A2=800657A0: data.sent -OR A0,S0,R0 ;A0=S0: channel# -ADDIU A1,R0,0600 ;A1=600: rumble pak controller -JAL 7000CBDC ;generate PIF command: A3=request write data at A2 to block A1 of channel A0 -ADDU A3,V0,T8 ;A3=800655A0+offset: data.recv -OR V0,R0,R0 -//7000CE8C: -LW RA,0024 (SP) -LW S0,0020 (SP) -ADDIU SP,SP,0058 -JR RA -NOP - -7000CEA0 DAA0 unconditional return -JR RA -NOP - -7000CEA8 DAA8 V0=1; would have returned 0 if debug console present -JR RA -ADDIU V0,R0,0001 - -7000CEB0 DAB0 V0=-1; unknown use with Indy I/O -JR RA -ADDIU V0,R0,FFFF - -7000CEB8 DAB8 unconditional return; used to write data to entries on Indy - accepts: A0=p->buffer, A1=size of buffer -JR RA -NOP - -7000CEC0 DAC0 unconditional return; used to read data from entries on Indy - accepts: A0=p->buffer, A1=size of buffer -JR RA -NOP - -7000CEC8 DAC8 unconditional return -JR RA -NOP - -7000CED0 DAD0 unconditional return -JR RA -NOP - -7000CED8 DAD8 unconditional return -JR RA -NOP - -7000CEE0 DAE0 unconditional return -JR RA -NOP - -7000CEE8 DAE8 write A2 chars in string A1 to stderr - accepts: A0=p->target (unused), A1=p->string, A2=length -ADDIU SP,SP,FFD8 -SW S2,0020 (SP) -SW S0,0018 (SP) -OR S2,A2,R0 ;S2=A2: length -SW RA,0024 (SP) -SW S1,001C (SP) -SW A0,0028 (SP) -BEQ A2,R0,7000CF28 -OR S0,R0,R0 -OR S1,A1,R0 ;S1=A1: p->string -//7000CF10: write string to stderr -LBU A0,0000 (S1) ;A0=S1+0 -ADDIU S0,S0,0001 -JAL 700056BC ;write char A0 to stderr -ADDIU S1,S1,0001 -BNEL S0,S2,7000CF14 ;loop through string -LBU A0,0000 (S1) -//7000CF28: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -ADDIU SP,SP,0028 -JR RA -ADDIU V0,R0,0001 - -7000CF44 DB44 c-style expansion of string A0 to stderr - accepts: A0=p->string, A1=arg[1], A2=arg[2], A3=arg[3], SP+10+4n = arg[n] - call 70013F60: A0=7000CEE8, A1=NULL, A2=A0, A3=p->args -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -SW RA,0014 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -SW A3,002C (SP) -LUI A0,7001 -ADDIU A0,A0,CEE8 ;A0= 7000CEE8: write A2 chars in string A1 to stderr -ADDIU A3,SP,0024 ;A3=p->further arguments -LW A2,0020 (SP) ;A2=A0 f/caller -JAL 70013F60 ;c-style string parser -OR A1,R0,R0 ;A1=0 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000CF90 DB90 sets PI cart request: write or read (A0) A3 bytes between ROM A1 and rdram A2 - accepts: A0=mode (0-write;1-read), A1=hardware offset, A2=rdram address, A3=size -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -SW A3,0034 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LUI T6,A460 -LW S0,0010 (T6) ;S0=A4600010: PI Status -ANDI T7,S0,0003 -BEQ T7,R0,7000CFD8 ;branch if ready -NOP -//7000CFC4: loop until ready -LUI T8,A460 -LW S0,0010 (T8) -ANDI T9,S0,0003 -BNE T9,R0,7000CFC4 -NOP -//7000CFD8: set ram and rom addresses -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0030 (SP) -LUI T0,A460 -SW V0,0000 (T0) ;V0->A4600000: PI rdram address -LUI T1,8000 -LW T1,0308 (T1) ;T1=80000308: cart base address -LW T2,002C (SP) ;T2= A1 f/caller: hardware offset -LUI AT,1FFF -ORI AT,AT,FFFF -OR T3,T1,T2 -AND T4,T3,AT ;T4= (base | offset) & 1FFFFFFF: translated hardware address -LUI T5,A460 -SW T4,0004 (T5) ;T4->A4600004: PI hardware address -//7000D00C: read or write based on mode -LW S1,0028 (SP) ;S1=A0 f/caller: mode -BEQ S1,R0,7000D028 -ADDIU AT,R0,0001 -BEQ S1,AT,7000D03C -NOP -BEQ R0,R0,7000D050 -NOP -//7000D028: write to rdram -LW T6,0034 (SP) ;T6=A3 f/caller: length -LUI T8,A460 -ADDIU T7,T6,FFFF -BEQ R0,R0,7000D058 -SW T7,000C (T8) ;length-1 -> A460000C: PI Write Length -//7000D03C: read from rdram and write to hardware -LW T9,0034 (SP) -LUI T1,A460 -ADDIU T0,T9,FFFF -BEQ R0,R0,7000D058 -SW T0,0008 (T1) ;length-1 -> A4600008: PI Read Length -//7000D050: return -1: error! -BEQ R0,R0,7000D05C -ADDIU V0,R0,FFFF -//7000D058: return 0: okay! -OR V0,R0,R0 -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7000D070 DC70 V0= PI Status -LUI T6,A460 -JR RA -LW V0,0010 (T6) ;V0=A4600010: PI Status - -7000D080 DC80 initialize PIF, interrupt handlers, C0- and 7F- TLB segments, init NMIbuffer if cold run, init 64DD if present -ADDIU SP,SP,FFC0 -SW RA,001C (SP) -ADDIU T6,R0,0001 -LUI AT,8006 -SW S0,0018 (SP) -SW R0,0038 (SP) -JAL 70017B30 ;V0= COP0 status register -SW T6,57E0 (AT) ;800657E0= 1 -OR S0,V0,R0 ;S0=Status -LUI AT,2000 -JAL 70017B20 ;A0->COP0 status register -OR A0,S0,AT ;A0=Status | 20000000 -//7000D0B0: -LUI A0,0100 -JAL 7000D420 ;V0= COP1 control, then sets COP1 control to A0 -ORI A0,A0,0800 ;A0=01000800 -LUI A0,1FC0 -ORI A0,A0,07FC ;A0=1FC007FC: PIF status -JAL 70017B40 ;copy value from uncached address A0 to A1 -ADDIU A1,SP,003C ;A1= SP+3C: buffer for value -BEQ V0,R0,7000D0EC ;branch if okay -NOP -//7000D0D4: repeat until SI ready and pull successful -LUI A0,1FC0 -ORI A0,A0,07FC -JAL 70017B40 -ADDIU A1,SP,003C -BNE V0,R0,7000D0D4 -NOP -//7000D0EC: -LW A1,003C (SP) ;A1= PIF Status -LUI A0,1FC0 -ORI A0,A0,07FC ;A0=1FC007FC: PIF Status -ORI T7,A1,0008 ;PIF Status | 8: initialize PIF -JAL 70017B90 ;write value A1 to uncached address A0 -OR A1,T7,R0 -BEQ V0,R0,7000D12C ;skip if okay -NOP -//7000D10C: repeat until successful -LW A1,003C (SP) -LUI A0,1FC0 -ORI A0,A0,07FC -ORI T8,A1,0008 -JAL 70017B90 -OR A1,T8,R0 -BNE V0,R0,7000D10C -NOP -//7000D12C: copy interrupt handler from 70010190 to 80000000 -LUI T0,7001 -ADDIU T0,T0,0190 ;T0=70010190 -LW AT,0000 (T0) -LUI T9,8000 -LUI T5,7001 -SW AT,0000 (T9) -LW T3,0004 (T0) -ADDIU T5,T5,0190 ;T5=70010190 -LUI T4,8000 -SW T3,0004 (T9) -LW AT,0008 (T0) -ORI T4,T4,0080 ;next target: 80000080 -LUI T1,7001 -SW AT,0008 (T9) -LW T3,000C (T0) -ADDIU T1,T1,0190 ;T1=70010190 -LUI T2,8000 -SW T3,000C (T9) -//7000D174: copy interrupt handler from 70010190 to 80000080 -LW AT,0000 (T5) -ORI T2,T2,0100 ;T2=80000100 -LUI T6,7001 -SW AT,0000 (T4) -LW T8,0004 (T5) -ADDIU T6,T6,0190 ;T6=70010190 -LUI T7,8000 -SW T8,0004 (T4) -LW AT,0008 (T5) -ORI T7,T7,0180 ;T7=80000180 -LUI A0,8000 ;A0=80000000 -SW AT,0008 (T4) -LW T8,000C (T5) -ADDIU A1,R0,0190 ;A1=190 -SW T8,000C (T4) -//7000D1B0: copy interrupt handler from 70010190 to 80000100 -LW AT,0000 (T1) -SW AT,0000 (T2) -LW T3,0004 (T1) -SW T3,0004 (T2) -LW AT,0008 (T1) -SW AT,0008 (T2) -LW T3,000C (T1) -SW T3,000C (T2) -//7000D1D0: copy interrupt handler from 70010190 to 80000180 -LW AT,0000 (T6) -SW AT,0000 (T7) -LW T8,0004 (T6) -SW T8,0004 (T7) -LW AT,0008 (T6) -SW AT,0008 (T7) -LW T8,000C (T6) -JAL 70010BD0 ;cache 190 bytes at 80000000 prior to hardware write request -SW T8,000C (T7) -LUI A0,8000 -JAL 7000D350 ;invalidate Cache for A1 bytes at A0 -ADDIU A1,R0,0190 -JAL 70001780 ;sets TLB indexed entry 0 to mirror 1KB of rdram from 80000000 to C0000000 -NOP -ADDIU A0,R0,0004 ;A0=B0000004: clock rate or some stupid thing -JAL 70017BE0 ;copies word at uncached hardware address A0 to A1 -ADDIU A1,SP,0038 ;A1=SP+38: p->buffer -LW T0,0038 (SP) ;T0=value -ADDIU AT,R0,FFF0 -AND T9,T0,AT ;T9=T0 & (~F) -BEQ T9,R0,7000D23C ;skip if not set -SW T9,0038 (SP) -//7000D228: if set, override the default -LUI AT,8002 -OR T3,T9,R0 -ADDIU T2,R0,0000 -SW T2,6980 (AT) ;80026980= 0 -SW T3,6984 (AT) ;80026984= value -//7000D23C: -LUI A0,8002 -LUI A1,8002 -LW A1,6984 (A1) ;A1=80026984: default of 03B9ACA0 -LW A0,6980 (A0) ;A0=80026980: default of 0 -ADDIU A2,R0,0000 ;A2=0 -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -ADDIU A3,R0,0003 ;A3=3 -SW V0,0020 (SP) ;SP+20= DW result -SW V1,0024 (SP) -LW A1,0024 (SP) -LW A0,0020 (SP) -ADDIU A2,R0,0000 -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -ADDIU A3,R0,0004 ;A3=4 -LUI T1,8000 -LW T1,030C (T1) ;T1=8000030C: True if reset via NMI -LUI AT,8002 -SW V0,6980 (AT) ;V0->80026980: 3/4(0000000003B9ACA0) -BNE T1,R0,7000D29C ;branch if retaining data -SW V1,6984 (AT) -//7000D28C: initialize 40 bytes at 8000031C: reset data stuff -LUI A0,8000 -ADDIU A0,A0,031C ;A0=8000031C -JAL 70017C40 ;initialize A1 bytes at A0 to zero -ADDIU A1,R0,0040 ;A1=40 -//7000D29C: prep for 64DD Status read -LUI T5,A460 -LW T4,0010 (T5) ;T4=A4600010: PI Status -ANDI T7,T4,0003 -BEQ T7,R0,7000D2CC ;skip if ready -SW T4,0030 (SP) ;SP+30= PI Status -//7000D2B0: loop until ready -LUI T6,A460 -LW T8,0010 (T6) -SW T8,0030 (SP) -LW T0,0030 (SP) -ANDI T9,T0,0003 -BNE T9,R0,7000D2B0 -NOP -//7000D2CC: 64DD presence test -LUI T2,A500 -LW T3,0508 (T2) ;T3= A5000508: 64DD Status -ANDI T1,T3,FFFF ;T1=bottom half of register; nonzero if presence error -BNE T1,R0,7000D304 ;branch if set, which it only will be if invalid -SW T3,0034 (SP) ;SP+34= value -ADDIU T5,R0,0001 -LUI AT,8002 -LUI A1,7001 -SW T5,6990 (AT) ;1->80026990: 64DD disk present -ADDIU A1,A1,7D30 ;A1=70017D30 -JAL 70017CE0 ;set entry A0 in 80027700 to A1 -ADDIU A0,R0,0001 ;A0=1 -BEQ R0,R0,7000D30C -NOP -//7000D304: disk not found -LUI AT,8002 -SW R0,6990 (AT) ;0->80026990: 64DD not present -//7000D30C: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -7000D320 DF20 set index writeback invalidate for 2000 bytes at 80000000 -LUI T0,8000 -ADDIU T2,R0,2000 -ADDU T1,T0,T2 -ADDIU T1,T1,FFF0 -CACHE 0000 (T0), D, Index Writeback Invalidate -SLTU AT,T0,T1 -BNE AT,R0,7000D330 -ADDIU T0,T0,0010 -JR RA -NOP - -7000D350 DF50 invalidate Cache for A1 bytes at A0 - accepts: A0=p->address, A1=size -BLEZ A1,7000D398 ;return if no data -NOP -ADDIU T3,R0,4000 -SLTU AT,A1,T3 -BEQ AT,R0,7000D3A0 ;if A1>=4000, branch -NOP -OR T0,A0,R0 ;T0=A0: address -ADDU T1,A0,A1 ;T1= address+size -SLTU AT,T0,T1 -BEQ AT,R0,7000D398 ;return if range backward -NOP -ANDI T2,T0,001F -ADDIU T1,T1,FFE0 -SUBU T0,T0,T2 ;align to 0x20 chunks -//7000D388: loop for A1 bytes -CACHE 0000 (T0), I, Hit Invalidate -SLTU AT,T0,T1 -BNE AT,R0,7000D388 -ADDIU T0,T0,0020 -//7000D398: return -JR RA -NOP -//7000D3A0: -LUI T0,8000 -ADDU T1,T0,T3 -ADDIU T1,T1,FFE0 ;align to 0x20 chunks -//7000D3AC: loop for A1 bytes -CACHE 0000 (T0), I, Index Invalidate -SLTU AT,T0,T1 -BNE AT,R0,7000D3AC -ADDIU T0,T0,0020 -JR RA -NOP - -7000D3D0 DFD0 remove TLB index A0 - accepts: A0=index -MFC0 T0,EntryHi ;T0= cur.EntryHi -MTC0 A0,Index ;COP0 Index = A0 -LUI T1,8000 -MTC0 T1,EntryHi ;COP0 EntryHi = 80000000: VPN2 invalid range -MTC0 R0,EntryLo0 ;COP0 EntryLo0 = 0: invalid -MTC0 R0,EntryLo1 ;COP0 EntryLo1 = 0: invalid -NOP -TLBWI -NOP -NOP -NOP -NOP -MTC0 T0,EntryHi ;restore EntryHi -JR RA -NOP - -7000D410 E010 V0= COP1 Control -CFC1 V0,F31 -JR RA -NOP - -7000D420 E020 V0= COP1 Control, replacing with A0 - accepts: A0=new value -CFC1 V0,F31 -CTC1 A0,F31 -JR RA -NOP - -7000D430 E030 initialize thread entry at A0 with...stuff - accepts: A0=p->target, A1=value, A2=p->function.eret, A3=A0 passed to function.eret, SP+10=p->stack.new, SP+14=p->parent - sets entry A0 with given values - thread entry: - 0x0 4 p->entry - 0x4 4 p->parent - 0x8 4 0 - 0xC 4 p->previous - 0x10 2 index 1-8 - 0x12 2 - 0x14 4 - 0x18 4 True sets FPU regs - all values 20-100 are doublewords set to AT-RA - 0x108 8 Mult LO - 0x110 8 Mult HI - 0x118 4 COP0 Status mask - 0x11C 4 function to execute 'game' when table erets - 0x128 4 MI (or is it COP0?) mask - 0x12C 4 COP1 Status - all values 0x130 - 0x1B0 are double float values set to F0-F30 -ADDIU SP,SP,FFD8 -SW A0,0028 (SP) ;SP+28= A0 -SW A1,002C (SP) ;SP+2C= A1 -LW T6,002C (SP) ;T6= A1 -LW T7,0028 (SP) ;T7= A0 -SW RA,001C (SP) -SW A2,0030 (SP) ;SP+30= A2: thread root funct. -SW A3,0034 (SP) ;SP+34= A3 -SW S0,0018 (SP) -SW T6,0014 (T7) ;A0+14 = A1 -LW T9,0028 (SP) ;T9= A0 -LW T8,003C (SP) ;T8= SP+14 f/ caller -SW T8,0004 (T9) ;A0+4 = SP+14 -LW T0,0028 (SP) ;T0= A0 -SW R0,0000 (T0) ;A0+0 = 0 -LW T1,0028 (SP) ;T1= A0 -SW R0,0008 (T1) ;A0+8 = 0 -LW T3,0028 (SP) ;T3= A0 -LW T2,0030 (SP) ;T2= A2 -SW T2,011C (T3) ;A0+11C= A2: thread root function -LW T4,0034 (SP) ;T4= A3 -LW T5,0028 (SP) ;T5= A0 -OR T7,T4,R0 ;T7= A3 -SRA T6,T4,0x1F -SW T6,0038 (T5) ;A0+38 = sign of A3 -SW T7,003C (T5) ;A0+3C = A3 -LW T8,0038 (SP) ;T8=SP+10 f/caller: new stack pointer -LW T9,0028 (SP) ;T9= A0 -LUI T4,7001 -OR T1,T8,R0 ;T1= T8 -SLTIU AT,T1,0010 ;TRUE if T8<10 -SRA T0,T8,0x1F ;T0=sign of T8 -SUBU T2,T0,AT ;T2=sign of T8 - (T8<10): -1 if negative, a pointer, or 0-F -ADDIU T3,T1,FFF0 -SW T3,00F4 (T9) ;A0+F4 = T8-10 -SW T2,00F0 (T9) ;A0+F0 = T2: new stack pointer -LW T5,0028 (SP) ;T5= A0 -ADDIU T4,T4,0A80 ;T4=70010A80 -OR T7,T4,R0 ;T7= T4 -SRA T6,T4,0x1F -SW T6,0100 (T5) ;A0+100 = sign of 70010A80: new RA -SW T7,0104 (T5) ;A0+104 = 70010A80: saved as doubleword -LW T1,0028 (SP) ;T1= A0 -LUI T8,003F -ORI T8,T8,FF01 -SW T8,0020 (SP) ;SP+20 = 003FFF01 -ORI T0,R0,FF03 -SW T0,0118 (T1) ;A0+118 = 0000FF03 -LW T2,0020 (SP) -LW T4,0028 (SP) ;T4= A0 -LUI AT,003F -AND T3,T2,AT -SRL T9,T3,0x10 ;T9= (003FFF01 & 3F0000) / 10000 -SW T9,0128 (T4) ;A0+128 = 3F -LW T7,0028 (SP) ;T7= A0 -LUI T6,0100 -ORI T6,T6,0800 -SW T6,012C (T7) ;A0+12C = 01000800 -LW T5,0028 (SP) ;T5= A0 -ADDIU T8,R0,0001 -SW R0,0018 (T5) ;A0+18 = 0 -LW T0,0028 (SP) ;T0= A0 -SH T8,0010 (T0) ;A0+10 = 1 -LW T1,0028 (SP) ;T1= A0 -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SH R0,0012 (T1) ;A0+12 = 0 -//7000D538: hmm... exceptions disabled in case you're running the thread right now. -LUI T2,8002 -LW T2,772C (T2) ;T2=8002772C: p->80027720 -LW T3,0028 (SP) ;T3= A0 -OR S0,V0,R0 ;S0=V0: interrupt flag -LUI AT,8002 -SW T2,000C (T3) ;A0+C = p->previous thread -LW T9,0028 (SP) ;T9= A0 -OR A0,S0,R0 ;A0=S0: set interrupt flag -JAL 70018610 ;A0->COP0 status -SW T9,772C (AT) ;A0 -> 8002772C -//7000D560: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000D580 E180 insert thread and execute if no thread currently running - accepts: A0=p->thread -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW S1,0018 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0014 (SP) -LW T6,0028 (SP) ;T6= A0 f/caller -ADDIU AT,R0,0001 -OR S0,V0,R0 ;S0=V0: interrupt flag -LHU S1,0010 (T6) ;S1=tbl+10: -BEQ S1,AT,7000D5DC ;branch if 1 -ADDIU AT,R0,0008 -BNE S1,AT,7000D65C ;skip if 8 -NOP -//7000D5B8: insert thread entry into list -LW T8,0028 (SP) ;T8= A0 f/caller -ADDIU T7,R0,0002 -LUI A0,8002 -SH T7,0010 (T8) ;2->tbl+10: smallest index for an existing list -LW A1,0028 (SP) ;A1= A0 f/caller -JAL 700108AC ;insert thread A1 into thread list A0 -ADDIU A0,A0,7728 ;A0=80027728: p->thread entry list -BEQ R0,R0,7000D65C -NOP -//7000D5DC: if the entry is lonely... -LW T9,0028 (SP) ;T9= A0 f/caller -LW T0,0008 (T9) ;T0=tbl+8: p->thread.prev -BEQ T0,R0,7000D5FC ;skip if NULL -NOP -//7000D5EC: ...but it has friends -LUI T1,8002 -ADDIU T1,T1,7728 -BNE T0,T1,7000D620 ;branch if not 80027728 (NULL entry at end of list) -NOP -//7000D5FC: ...then let it join the crowd -LW T3,0028 (SP) ;T3= A0 f/caller -ADDIU T2,R0,0002 -LUI A0,8002 -SH T2,0010 (T3) ;2->tbl+10: smallest index for an existing list -LW A1,0028 (SP) ;A1= A0 f/caller -JAL 700108AC ;insert thread A1 into thread list A0 -ADDIU A0,A0,7728 ;A0=80027728 -BEQ R0,R0,7000D65C -NOP -//7000D620: pop and relink if NULL entry follows -LW T5,0028 (SP) -ADDIU T4,R0,0008 -SH T4,0010 (T5) ;2->tbl+10: largest index for any list -LW T6,0028 (SP) -LW A0,0008 (T6) ;A0=tbl+8: p->tbl.prev -JAL 700108AC ;insert thread A1 into thread list A0 -OR A1,T6,R0 ;A1= A0 f/caller -LW T7,0028 (SP) -JAL 700108F4 ;V0= popped thread A0 -LW A0,0008 (T7) ;A0=p->tbl.prev -OR S1,V0,R0 ;S1=V0: popped thread -LUI A0,8002 -ADDIU A0,A0,7728 ;A0=80027728 -JAL 700108AC ;insert thread A1 into thread list A0 -OR A1,S1,R0 ;A1=S1: p->popped thread -//7000D65C: check if cur.thread is valid -LUI T8,8002 -LW T8,7730 (T8) ;T8=80027730: p->cur.thread -BNE T8,R0,7000D67C ;branch a thread currently running -NOP -//7000D66C: execute thread if one isn't running -JAL 70010904 ;execute thread -NOP -BEQ R0,R0,7000D6B4 -NOP -//7000D67C: Otherwise, throw onto the stack. -LUI T9,8002 -LUI T1,8002 -LW T1,7728 (T1) ;T1=80027728: p->last.thread (?) -LW T9,7730 (T9) ;T9=80027730: p->cur.thread -LW T2,0004 (T1) ;T2=last.thread.priority -LW T0,0004 (T9) ;T0=cur.thread.priority -SLT AT,T0,T2 -BEQ AT,R0,7000D6B4 ;return if cur>=last -NOP -//7000D6A0: reset index for cur.thread, update, insert, and execute -ADDIU T3,R0,0002 -LUI A0,8002 -SH T3,0010 (T9) ;2->cur.thread.index -JAL 700107AC ;update current thread's data with current registers, then insert and execute -ADDIU A0,A0,7728 ;A0=80027728 -//7000D6B4: enable interrupts and return -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 ;A0=S0: flag -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7000D6D0 E2D0 - accepts: A0=p->???, A1=p->??? or NULL, A2= -LUI T6,8002 -LUI T7,8002 -ADDIU T6,T6,7720 -ADDIU T7,T7,7720 -SW T6,0000 (A0) ;A0+0= 80027720 -SW T7,0004 (A0) ;A0+4= 80027720 -SW R0,0008 (A0) ;A0+8= 0 -SW R0,000C (A0) ;A0+C= 0 -SW A2,0010 (A0) ;A0+10=A2: -JR RA -SW A1,0014 (A0) ;A0+14=A1: - -7000D740 E340 remove user threads if 2 or 8; update and execute cur.thread if thread.index 4 or A0 is NULL - accepts: A0=p->thread or NULL -ADDIU SP,SP,FFC8 -SW RA,0024 (SP) -SW A0,0038 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T6,0038 (SP) ;T6=A0 f/caller: p->thread -OR S0,V0,R0 -BNE T6,R0,7000D774 -NOP -BEQ R0,R0,7000D77C ;S1=4: default index -ADDIU S1,R0,0004 -//7000D774: get index from thread if valid -LW T7,0038 (SP) -LHU S1,0010 (T7) ;S1=thread+10: index -//7000D77C: -OR S2,S1,R0 ;S2=S1: index -ADDIU AT,R0,0002 -BEQ S2,AT,7000D7C4 ;branch if index=2 -ADDIU AT,R0,0004 -BEQ S2,AT,7000D7A4 ;branch if index=4 -ADDIU AT,R0,0008 -BEQ S2,AT,7000D7C4 ;branch if index=8 -NOP -BEQ R0,R0,7000D7E0 ;return if any other index -NOP -//7000D7A4: index 4 -LUI T9,8002 -LW T9,7730 (T9) ;T9=80027730: p->cur.thread -ADDIU T8,R0,0001 -OR A0,R0,R0 ;A0=0 -JAL 700107AC ;update current thread's data with current registers, then insert and execute -SH T8,0010 (T9) ;cur.thread.index = 1 -BEQ R0,R0,7000D7E0 -NOP -//7000D7C4: index 2,8: remove -LW T1,0038 (SP) -ADDIU T0,R0,0001 -SH T0,0010 (T1) ;thread.index = 1 -LW T2,0038 (SP) -LW A0,0008 (T2) ;A0=thread.parent -JAL 70010A90 ;remove thread pointer A1 from thread A0 -OR A1,T2,R0 ;A1=cur.thread -//7000D7E0: restore interrupts and return -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0038 - -7000D800 E400 change priority to A1 for thread A0 or current thread if NULL - accepts: A0=p->thread or NULL, A1=priority -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) ;SP+28=A0: p->thread -SW A1,002C (SP) ;SP+2C=A1 -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T6,0028 (SP) ;T6=A0 f/caller -OR S0,V0,R0 ;S0=V0: flag -BNE T6,R0,7000D834 -NOP -//7000D828: if 0, grab cur.thread f/ list -LUI T7,8002 -LW T7,7730 (T7) ;T7=80027730+0: p->cur.thread -SW T7,0028 (SP) -//7000D834: If A1 doesn't match the priority... -LW T8,0028 (SP) ;T8=p->thread -LW T0,002C (SP) ;T0=A1 f/caller -LW T9,0004 (T8) ;T9=thread+4: priority -BEQ T9,T0,7000D8C4 ;return if A1 matches priority -NOP -//7000D848: ...set it to match... -SW T0,0004 (T8) ;A1->thread.priority -LUI T2,8002 -LW T2,7730 (T2) ;T2=80027730+0: p->cur.thread -LW T1,0028 (SP) ;T1=p->thread -BEQ T1,T2,7000D88C ;skip a few steps if this is the current thread -NOP -//7000D860: ...if it isn't the first thread... -LHU T3,0010 (T1) ;T3=thread+10: index -ADDIU AT,R0,0001 -BEQ T3,AT,7000D88C ;skip if this is the original thread -NOP -//7000D870: ...reload this thread. -LW A0,0008 (T1) ;A0=thread+8: thread.parent -JAL 70010A90 ;remove thread pointer A1 from thread A0 -OR A1,T1,R0 ;A1=p->thread -LW T4,0028 (SP) -LW A0,0008 (T4) ;A0=thread+8: thread.parent -JAL 700108AC ;insert thread A1 into thread list A0 -OR A1,T4,R0 ;A1=p->thread -//7000D88C: test if cur.thread comes before parent -LUI T5,8002 -LUI T7,8002 -LW T7,7728 (T7) -LW T5,7730 (T5) -LW T9,0004 (T7) ;T9= last.thread.priority (?) -LW T6,0004 (T5) ;T6= cur.thread.priority -SLT AT,T6,T9 -BEQ AT,R0,7000D8C4 ;return if cur priority >= to it's parent -NOP -//7000D8B0: reindex cur.thread to 2 -ADDIU T0,R0,0002 -LUI A0,8002 -SH T0,0010 (T5) ;2->cur.thread.index -JAL 700107AC ;update current thread's data with current registers, then insert and execute -ADDIU A0,A0,7728 ;A0=80027728 -//7000D8C4: restore interrupts and return -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 ;A0=S0: flag -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000D8E0 E4E0 V0=COP0 Count -MFC0 V0,Count/DPC-End -JR RA -NOP - -7000D8F0 E4F0 -LUI T6,8002 -LW T6,69A0 (T6) -ADDIU SP,SP,FFD0 -SW RA,001C (SP) -BNE T6,R0,7000DA68 -SW A0,0030 (SP) -JAL 70018630 -NOP -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,69B8 ;A1=800669B8 -ADDIU A0,A0,69A0 ;A0=800669A0 -JAL 7000D6D0 -ADDIU A2,R0,0005 ;A2=5 -LUI AT,8006 -ADDIU T7,R0,000D -SH T7,69D0 (AT) -SB R0,69D2 (AT) -SW R0,69D4 (AT) -LUI AT,8006 -ADDIU T8,R0,000E -LUI A1,8006 -LUI A2,8006 -SH T8,69E8 (AT) -SB R0,69EA (AT) -SW R0,69EC (AT) -ADDIU A2,A2,69D0 ;A2= 800669D0 -ADDIU A1,A1,69A0 ;A1= 800669A0 -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -ADDIU A0,R0,0007 ;A0= entry 7 -LUI A1,8006 -LUI A2,8006 -ADDIU A2,A2,69E8 ;A2= 800669E8 -ADDIU A1,A1,69A0 ;A1= 800669A0 -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -ADDIU A0,R0,0003 ;A0= entry 3 -ADDIU T9,R0,FFFF -SW T9,0028 (SP) -JAL 70018A30 -OR A0,R0,R0 -SW V0,0024 (SP) -LW T0,0024 (SP) -LW T1,0030 (SP) -SLT AT,T0,T1 -BEQ AT,R0,7000D9B8 -NOP -SW T0,0028 (SP) -OR A0,R0,R0 ;A0=NULL -JAL 7000D800 ;change priority to A1 for thread A0 or current thread if NULL -OR A1,T1,R0 ;A1=T1: priority -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -NOP -LUI AT,8002 -LUI T4,8006 -LUI T3,8006 -ADDIU T4,T4,69A0 -ADDIU T2,R0,0001 -ADDIU T3,T3,57F0 -SW T2,69A0 (AT) -SW T3,69A4 (AT) -SW T4,69A8 (AT) -SW T4,69AC (AT) -LUI T5,8006 -LW T7,0030 (SP) -LUI AT,8002 -ADDIU T5,T5,59A0 -ADDIU T6,T5,1000 -LUI A2,7001 -LUI A3,8002 -SW V0,002C (SP) -SW R0,69B0 (AT) -SW R0,69B4 (AT) -SW R0,69B8 (AT) -ADDIU A3,A3,69A0 ;A3= 800269A0 -ADDIU A2,A2,DA78 ;A2= 7000DA78 -SW T6,0010 (SP) ;SP+10= 800669A0: thread SP, 0x1000 bytes -OR A0,T3,R0 ;A0=T3: 800657F0 -OR A1,R0,R0 -JAL 7000D430 ;initialize thread entry at A0 with values -SW T7,0014 (SP) -JAL 70018A50 -NOP -LUI A0,8006 -JAL 7000D580 ;insert thread and execute if no thread currently running -ADDIU A0,A0,57F0 -JAL 70018610 ;A0->COP0 status -LW A0,002C (SP) -LW T8,0028 (SP) -ADDIU AT,R0,FFFF -BEQ T8,AT,7000DA68 -NOP -OR A0,R0,R0 ;A0=NULL -JAL 7000D800 ;change priority to A1 for thread A0 or current thread if NULL -OR A1,T8,R0 ;A1=T8: priority -LW RA,001C (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7000DA78 E678 -ADDIU SP,SP,FFC8 -SW RA,001C (SP) -SW A0,0038 (SP) -SW S0,0018 (SP) -SW R0,002C (SP) -JAL 70018B60 -SW R0,0028 (SP) -SW V0,0034 (SP) -LW T6,0034 (SP) -LUI AT,8006 -LHU T7,0002 (T6) -BNE T7,R0,7000DAB8 -SH T7,6A00 (AT) -ADDIU T8,R0,0001 -LUI AT,8006 -SH T8,6A00 (AT) -//7000DAB8: -LW T9,0038 (SP) -SW T9,0030 (SP) -//7000DAC0: -LW T0,0030 (SP) -ADDIU A1,SP,002C ;A1=SP+2C: p->buffer -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,000C (T0) -LW T1,002C (SP) -ADDIU AT,R0,000D -LHU S0,0000 (T1) -BEQ S0,AT,7000DAF8 -ADDIU AT,R0,000E -BEQ S0,AT,7000DC08 -NOP -BEQ R0,R0,7000DAC0 -NOP -//7000DAF8: -JAL 70018B70 -NOP -LUI T2,8006 -LHU T2,6A00 (T2) -LUI AT,8006 -ADDIU T3,T2,FFFF -ANDI T4,T3,FFFF -BNE T4,R0,7000DB58 -SH T3,6A00 (AT) -JAL 70018B60 -NOP -SW V0,0034 (SP) -LW T5,0034 (SP) -LW T6,0010 (T5) -BEQ T6,R0,7000DB48 -NOP -OR A0,T6,R0 -LW A1,0014 (T5) -JAL 7000DF10 -OR A2,R0,R0 -//7000DB48: -LW T7,0034 (SP) -LUI AT,8006 -LHU T8,0002 (T7) -SH T8,6A00 (AT) -//7000DB58: -LUI T9,8007 -LW T9,8E1C (T9) -LW T1,0028 (SP) -LUI AT,8007 -ADDIU T0,T9,0001 -BEQ T1,R0,7000DBA0 -SW T0,8E1C (AT) -JAL 7000D8E0 ;V0=Count -NOP -SW V0,0024 (SP) -LW T2,0024 (SP) -ADDIU T4,R0,0000 -LUI AT,8007 -SW T4,8E10 (AT) -LUI AT,8007 -OR T5,T2,R0 -SW T5,8E14 (AT) -SW R0,0028 (SP) -//7000DBA0: -LUI T3,8007 -LW T3,8E18 (T3) -JAL 7000D8E0 ;V0=Count -SW T3,0024 (SP) -LUI AT,8007 -SW V0,8E18 (AT) -LUI T6,8007 -LW T6,8E18 (T6) -LW T7,0024 (SP) -LUI T3,8007 -LW T3,8E14 (T3) -SUBU T8,T6,T7 -OR T1,T8,R0 -LUI T2,8007 -ADDU T5,T1,T3 -LW T2,8E10 (T2) -ADDIU T0,R0,0000 -SLTU AT,T5,T3 -ADDU T4,AT,T0 -LUI AT,8007 -ADDU T4,T4,T2 -SW T4,8E10 (AT) -LUI AT,8007 -SW T8,0024 (SP) -BEQ R0,R0,7000DAC0 -SW T5,8E14 (AT) -//7000DC08: -JAL 700186BC -NOP -BEQ R0,R0,7000DAC0 -NOP -//7000DC18: filler -NOP -NOP -NOP -NOP -NOP -NOP -//7000DC30: return (unused) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7000DC50 E850 set interrupt table entry #A0 with p->data A1 and value A2 - accepts: A0=entry#, A1=p->data, A2=value -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T6,0028 (SP) ;T6= A0 f/caller: -LUI T8,8006 -LW T0,002C (SP) ;T0= A1 f/caller: interrupt handler -ADDIU T8,T8,6A10 -SLL T7,T6,0x3 ;T7= A0*8: offset -ADDU T9,T7,T8 ;T9=80066A10+offset: p->entry for interrupt A0 -SW T9,0020 (SP) -SW T0,0000 (T9) -LW T2,0020 (SP) -LW T1,0030 (SP) ;T1= A2 f/caller: -OR S0,V0,R0 -OR A0,S0,R0 -JAL 70018610 ;A0->COP0 status -SW T1,0004 (T2) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000DCC0 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LUI T7,8003 -LW T7,8044 (T7) -LW T6,0028 (SP) -LUI T9,8003 -LUI T1,8003 -SW T6,0010 (T7) -LW T9,8044 (T9) -LW T8,002C (SP) -OR S0,V0,R0 -OR A0,S0,R0 -SW T8,0014 (T9) -LW T1,8044 (T1) -LW T0,0030 (SP) -JAL 70018610 ;A0->COP0 status -SH T0,0002 (T1) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000DD30 E930 update Status and MI Interrupt Mask Register with A0 - accepts: A0=Status mask -MFC0 T4,Status/DPC-Clock -ANDI V0,T4,FF01 ;V0=interrupts and interrupt flag -LUI T0,8002 -ADDIU T0,T0,698C -LW T3,0000 (T0) ;T3=8002698C: prev.Status -ADDIU AT,R0,FFFF -XOR T0,T3,AT -ANDI T0,T0,FF00 ;T0=mask for any interrupts not set -OR V0,V0,T0 ;V0|= mask -LUI T2,A430 -LW T2,000C (T2) ;T2=A430000C: MI Interrupt Mask Register -BEQ T2,R0,7000DD74 ;skip if not set -SRL T1,T3,0x10 ;T1=previous diagnostic status -//7000DD64: -ADDIU AT,R0,FFFF -XOR T1,T1,AT -ANDI T1,T1,003F ;T1=mask for all but bootstrap exception vectors -OR T2,T2,T1 ;tack onto existing MI intr.mask reg. -//7000DD74: -SLL T2,T2,0x10 -OR V0,V0,T2 ;V0|= new diagnostic status -LUI AT,003F -AND T0,A0,AT ;T0=3F0000 -AND T0,T0,T3 ;T0&=prev.Status: diagnostic status flags -SRL T0,T0,0xF ;flags->offset -LUI T2,8003 -ADDU T2,T2,T0 -LHU T2,93A0 (T2) ;T2=800293A0+offset: new MI Interrupt Mask Register setting -LUI AT,A430 -SW T2,000C (AT) ;update MI Interrupt Mask Register -ANDI T0,A0,FF01 ;T0=interrupts and interrupt flag from A0 -ANDI T1,T3,FF00 ;T3=interrupts and interrupt flag from prev.Status -AND T0,T0,T1 ;T0=set values -LUI AT,FFFF -ORI AT,AT,00FF -AND T4,T4,AT ;Status w/o interrupts -OR T4,T4,T0 ;set interrupts -MTC0 T4,Status/DPC-Clock ;update Status -NOP -NOP -JR RA -NOP - -7000DDD0 - accepts: A0=p->thread list, A1=p->buffer or NULL, A2=permit errors True/False -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -SW S1,0018 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0014 (SP) -LW T6,0028 (SP) ;T6=A0 f/caller: p->thread.lst -OR S0,V0,R0 -LW T7,0008 (T6) -BNE T7,R0,7000DE48 ;branch if p->parent set -NOP -//7000DE04: mode 0 -LW T8,0030 (SP) -BNE T8,R0,7000DE20 ;branch if A2 f/caller is set -NOP -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 ;restore interrupts -BEQ R0,R0,7000DEF4 ;return -1: error -ADDIU V0,R0,FFFF -//7000DE20: mode 1 -LUI T0,8002 -LW T0,7730 (T0) ;T0=80027730: cur.thread -ADDIU T9,R0,0008 -SH T9,0010 (T0) ;8->cur.thread.index -JAL 700107AC ;update current thread's data with current registers, then insert and execute -LW A0,0028 (SP) ;A0=p->thread.lst -LW T1,0028 (SP) -LW T2,0008 (T1) -BEQ T2,R0,7000DE04 -NOP -//7000DE48: -LW T3,002C (SP) ;T3=A1 f/caller -BEQ T3,R0,7000DE70 ;branch if A1 f/caller NULL -NOP -//7000DE54: -LW T4,0028 (SP) ;T4=p->thread.lst -LW T6,000C (T4) -LW T5,0014 (T4) -SLL T7,T6,0x2 -ADDU T8,T5,T7 -LW T9,0000 (T8) -SW T9,0000 (T3) ;T9->buffer -//7000DE70: -LW T0,0028 (SP) ;T0=p->thread.lst -LW T1,000C (T0) -LW T4,0010 (T0) -ADDIU T2,T1,0001 -DIV T2,T4 -MFHI T6 -SW T6,000C (T0) -LW T5,0028 (SP) -BNE T4,R0,7000DE9C -NOP -BREAK 00001C00 ;Break: division by zero -//7000DE9C: -ADDIU AT,R0,FFFF -BNE T4,AT,7000DEB4 -LUI AT,8000 -BNE T2,AT,7000DEB4 -NOP -BREAK 00001800 -//7000DEB4: -LW T7,0008 (T5) -ADDIU T8,T7,FFFF -SW T8,0008 (T5) -LW T9,0028 (SP) -LW T3,0004 (T9) -LW T1,0000 (T3) -BEQ T1,R0,7000DEE8 -NOP -//7000DED4: pop and reinstert next thread in sequence -JAL 700108F4 ;V0= popped thread A0 -ADDIU A0,T9,0004 -OR S1,V0,R0 -JAL 7000D580 ;insert thread and execute if no thread currently running -OR A0,S1,R0 -//7000DEE8: restore interrupts and return 0: okay -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 ;restore interrupts -OR V0,R0,R0 -//7000DEF4: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7000DF10 - accepts: A0=, A1=, A2=mode -ADDIU SP,SP,FFC8 -SW RA,0024 (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -SW A2,0040 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T6,0038 (SP) -OR S0,V0,R0 -LW T7,0008 (T6) -LW T8,0010 (T6) -SLT AT,T7,T8 -BNE AT,R0,7000DFAC -NOP -LW T9,0040 (SP) -ADDIU AT,R0,0001 -BNE T9,AT,7000DF84 ;branch if mode 0 -NOP -//7000DF60: swap threads if mode 1 -LUI T1,8002 -LW T1,7730 (T1) -ADDIU T0,R0,0008 -SH T0,0010 (T1) ;8->cur.thread.index -LW A0,0038 (SP) -JAL 700107AC ;update current thread's data with current registers, then insert and execute -ADDIU A0,A0,0004 -BEQ R0,R0,7000DF94 -NOP -//7000DF84: -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -BEQ R0,R0,7000E044 -ADDIU V0,R0,FFFF -//7000DF94: -LW T2,0038 (SP) -LW T3,0008 (T2) -LW T4,0010 (T2) -SLT AT,T3,T4 -BEQ AT,R0,7000DF50 -NOP -//7000DFAC: -LW T5,0038 (SP) -LW T0,003C (SP) -LW T6,000C (T5) -LW T7,0008 (T5) -LW T9,0010 (T5) -LW T1,0014 (T5) -ADDU T8,T6,T7 -DIV T8,T9 -MFHI S1 -SLL T2,S1,0x2 -ADDU T3,T1,T2 -SW T0,0000 (T3) -LW T4,0038 (SP) -BNE T9,R0,7000DFEC -NOP -BREAK 00001C00 ;Break: division by zero -//7000DFEC: -ADDIU AT,R0,FFFF -BNE T9,AT,7000E004 -LUI AT,8000 -BNE T8,AT,7000E004 -NOP -BREAK 00001800 -//7000E004: -LW T6,0008 (T4) -ADDIU T7,T6,0001 -SW T7,0008 (T4) -LW T8,0038 (SP) -LW T9,0000 (T8) -LW T5,0000 (T9) -BEQ T5,R0,7000E038 ;POP and swap thread if TRUE -NOP -JAL 700108F4 ;V0= popped thread A0 -OR A0,T8,R0 -OR S2,V0,R0 -JAL 7000D580 ;insert thread and execute if no thread currently running -OR A0,S2,R0 -//7000E038: -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -OR V0,R0,R0 -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0038 - -7000E060 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LUI T7,8003 -LW T7,8044 (T7) -LW T6,0028 (SP) -LUI T9,8003 -ADDIU T8,R0,0001 -SW T6,0008 (T7) -LW T9,8044 (T9) -LUI T0,8003 -OR S0,V0,R0 -SH T8,0000 (T9) -LW T0,8044 (T0) -OR A0,S0,R0 -LW T1,0008 (T0) -LW T2,0004 (T1) -JAL 70018610 ;A0->COP0 status -SW T2,000C (T0) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000E0D0 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SWC1 F12,0028 (SP) -SW S1,0018 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0014 (SP) -LUI T6,8003 -LW T6,8044 (T6) -LWC1 F4,0028 (SP) -LUI T7,8003 -LUI T0,8003 -SWC1 F4,0018 (T6) -LW T7,8044 (T7) -OR S1,V0,R0 -LHU T8,0000 (T7) -ORI T9,T8,0002 -SH T9,0000 (T7) -LW T0,8044 (T0) -LW T1,0008 (T0) -LWC1 F6,0018 (T0) -LW S0,0020 (T1) -ANDI T2,S0,0FFF -OR S0,T2,R0 -MTC1 S0,F8 -BGEZ S0,7000E148 -CVT.S.W F10,F8 -LUI AT,4F80 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -MUL.S F18,F6,F10 -ADDIU T4,R0,0001 -CFC1 T3,F31 -CTC1 T4,F31 -NOP -CVT.W.S F4,F18 -CFC1 T4,F31 -NOP -ANDI AT,T4,0004 -ANDI T4,T4,0078 -BEQ T4,R0,7000E1C0 -LUI AT,4F00 -MTC1 AT,F4 -ADDIU T4,R0,0001 -SUB.S F4,F18,F4 -CTC1 T4,F31 -NOP -CVT.W.S F4,F4 -CFC1 T4,F31 -NOP -ANDI AT,T4,0004 -ANDI T4,T4,0078 -BNE T4,R0,7000E1B8 -NOP -MFC1 T4,F4 -LUI AT,8000 -BEQ R0,R0,7000E1D0 -OR T4,T4,AT -BEQ R0,R0,7000E1D0 -ADDIU T4,R0,FFFF -MFC1 T4,F4 -NOP -BLTZ T4,7000E1B8 -NOP -CTC1 T3,F31 -ANDI T5,T4,0FFF -SW T5,0020 (T0) -JAL 70018610 ;A0->COP0 status -OR A0,S1,R0 -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7000E200 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SWC1 F12,0028 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LUI T6,8003 -LW T6,8044 (T6) -LWC1 F4,0028 (SP) -LUI T7,8003 -OR S0,V0,R0 -SWC1 F4,0024 (T6) -LW T7,8044 (T7) -OR A0,S0,R0 -LHU T8,0000 (T7) -ORI T9,T8,0004 -JAL 70018610 ;A0->COP0 status -SH T9,0000 (T7) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000E260 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LBU T6,002B (SP) -OR S0,V0,R0 -BEQ T6,R0,7000E29C -NOP -LUI T7,8003 -LW T7,8044 (T7) -LHU T8,0000 (T7) -ORI T9,T8,0040 -BEQ R0,R0,7000E2B4 -SH T9,0000 (T7) -LUI T0,8003 -LW T0,8044 (T0) -ADDIU AT,R0,FFBF -LHU T1,0000 (T0) -AND T2,T1,AT -SH T2,0000 (T0) -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000E2D0 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LBU T6,002B (SP) -OR S0,V0,R0 -BEQ T6,R0,7000E30C -NOP -LUI T7,8003 -LW T7,8044 (T7) -LHU T8,0000 (T7) -ORI T9,T8,0020 -BEQ R0,R0,7000E324 -SH T9,0000 (T7) -LUI T0,8003 -LW T0,8044 (T0) -ADDIU AT,R0,FFDF -LHU T1,0000 (T0) -AND T2,T1,AT -SH T2,0000 (T0) -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000E340 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -JAL 70018ED0 ;V0= RSP Status -SW A0,0020 (SP) -SW V0,001C (SP) -LW T6,001C (SP) -ANDI T7,T6,0100 -BEQ T7,R0,7000E370 -NOP -ADDIU T8,R0,0001 -BEQ R0,R0,7000E374 -SW T8,0018 (SP) -SW R0,0018 (SP) -LW T9,001C (SP) -ANDI T0,T9,0080 -BEQ T0,R0,7000E3AC -NOP -LW T1,0020 (SP) -LW T3,0018 (SP) -ADDIU AT,R0,FFFD -LW T2,0004 (T1) -OR T4,T2,T3 -SW T4,0004 (T1) -LW T5,0020 (SP) -LW T6,0004 (T5) -AND T7,T6,AT -SW T7,0004 (T5) -LW RA,0014 (SP) -LW V0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000E3C0 EFC0 set DP Cmd clock, buffer counter, pipe counter, and tmem counter to A0 - accepts: A0=p->target -LUI T6,A410 -LW T7,0010 (T6) ;T7=A4100010: DP Cmd Clock -LUI T8,A410 -LUI T0,A410 -SW T7,0000 (A0) ;A0+0= DP Cmd Clock -LW T9,0014 (T8) ;T9=A4100014: DP Cmd Buffer Busy Counter -ADDIU A0,A0,0004 -LUI T2,A410 -SW T9,0000 (A0) ;A0+4= DP Cmd Buffer Busy Counter -LW T1,0018 (T0) ;T1=A4100018: DP Cmd Pipe Busy Counter -ADDIU A0,A0,0004 -ADDIU A0,A0,0004 -SW T1,FFFC (A0) ;A0+8= DP Cmd Pipe Busy Counter -LW T3,001C (T2) ;T3=A410001C: DP Cmd Tmem Load Counter -ADDIU A0,A0,0004 -JR RA -SW T3,FFFC (A0) ;A0+C= DP Cmd Tmem Load Counter - -7000E410 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LUI T6,8003 -LW T6,8040 (T6) ;T6=80028040: -OR S0,V0,R0 -OR A0,S0,R0 -LW T7,0004 (T6) -JAL 70018610 ;A0->COP0 status -SW T7,0020 (SP) -LW RA,001C (SP) -LW V0,0020 (SP) -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7000E450 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LUI T6,8003 -LW T6,8044 (T6) ;T6=80028044: -OR S0,V0,R0 -OR A0,S0,R0 -LW T7,0004 (T6) ;T7= -JAL 70018610 ;A0->COP0 status -SW T7,0020 (SP) -LW RA,001C (SP) -LW V0,0020 (SP) -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7000E490 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW A0,0020 (SP) -LUI T7,8003 -LW T7,8044 (T7) -LW T6,0020 (SP) -SW V0,001C (SP) -LUI T8,8003 -SW T6,0004 (T7) -LW T8,8044 (T8) -LHU T9,0000 (T8) -ORI T0,T9,0010 -SH T0,0000 (T8) -JAL 70018610 ;A0->COP0 status -LW A0,001C (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000E4E0 F0E0 A0-> DP Cmd Status -LUI T6,A410 -JR RA -SW A0,000C (T6) ;A0->A410000C: set DPC Status - -7000E4F0 -ADDIU SP,SP,FFE0 -LUI T6,8006 -SW RA,0014 (SP) -SW A0,0020 (SP) -ADDIU T6,T6,6A90 -SW T6,001C (SP) -OR A1,T6,R0 ;A1=80066A90: p->buffer -LW A0,0020 (SP) -JAL 7000F970 ;V0=p->A2 bytes copied from A0 to A1 -ADDIU A2,R0,0040 ;A2=40 bytes -LW T7,001C (SP) -LW T8,0010 (T7) -BEQ T8,R0,7000E538 -NOP -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,T8,R0 -LW T9,001C (SP) -SW V0,0010 (T9) -LW T0,001C (SP) -LW T1,0018 (T0) -BEQ T1,R0,7000E558 -NOP -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,T1,R0 -LW T2,001C (SP) -SW V0,0018 (T2) -LW T3,001C (SP) -LW T4,0020 (T3) -BEQ T4,R0,7000E578 -NOP -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,T4,R0 -LW T5,001C (SP) -SW V0,0020 (T5) -LW T6,001C (SP) -LW T7,0028 (T6) -BEQ T7,R0,7000E598 -NOP -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,T7,R0 -LW T8,001C (SP) -SW V0,0028 (T8) -LW T9,001C (SP) -LW T0,002C (T9) -BEQ T0,R0,7000E5B8 -NOP -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,T0,R0 -LW T1,001C (SP) -SW V0,002C (T1) -LW T2,001C (SP) -LW T3,0030 (T2) -BEQ T3,R0,7000E5D8 -NOP -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,T3,R0 -LW T4,001C (SP) -SW V0,0030 (T4) -LW T5,001C (SP) -LW T6,0038 (T5) -BEQ T6,R0,7000E5F8 -NOP -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,T6,R0 -LW T7,001C (SP) -SW V0,0038 (T7) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000E60C -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 7000E4F0 -LW A0,0020 (SP) -SW V0,001C (SP) -LW T6,001C (SP) -LW T7,0004 (T6) -ANDI T8,T7,0001 -BEQ T8,R0,7000E660 -NOP -LW T9,0038 (T6) -ADDIU AT,R0,FFFE -SW T9,0018 (T6) -LW T0,001C (SP) -LW T1,003C (T0) -SW T1,001C (T0) -LW T2,0020 (SP) -LW T3,0004 (T2) -AND T4,T3,AT -SW T4,0004 (T2) -LW A0,001C (SP) -JAL 70010BD0 ;cache A1 bytes at A0 prior to hardware write request -ADDIU A1,R0,0040 -JAL 70018EE0 ;A0-> RSP Status -ADDIU A0,R0,2B00 -LUI A0,0400 -JAL 70018EF0 -ORI A0,A0,1000 -ADDIU AT,R0,FFFF -BNE V0,AT,7000E6A4 -NOP -LUI A0,0400 -JAL 70018EF0 -ORI A0,A0,1000 -ADDIU AT,R0,FFFF -BEQ V0,AT,7000E68C -NOP -LUI A1,0400 -ORI A1,A1,0FC0 -ADDIU A0,R0,0001 -LW A2,001C (SP) -JAL 70018F30 -ADDIU A3,R0,0040 -ADDIU AT,R0,FFFF -BNE V0,AT,7000E6EC -NOP -LUI A1,0400 -ORI A1,A1,0FC0 -ADDIU A0,R0,0001 -LW A2,001C (SP) -JAL 70018F30 -ADDIU A3,R0,0040 -ADDIU AT,R0,FFFF -BEQ V0,AT,7000E6C8 -NOP -JAL 70018FC0 -NOP -BEQ V0,R0,7000E70C -NOP -JAL 70018FC0 -NOP -BNE V0,R0,7000E6FC -NOP -LW T5,001C (SP) -LUI A1,0400 -ORI A1,A1,1000 -ADDIU A0,R0,0001 -LW A2,0008 (T5) -JAL 70018F30 -LW A3,000C (T5) -ADDIU AT,R0,FFFF -BNE V0,AT,7000E75C -NOP -LW T7,001C (SP) -LUI A1,0400 -ORI A1,A1,1000 -ADDIU A0,R0,0001 -LW A2,0008 (T7) -JAL 70018F30 -LW A3,000C (T7) -ADDIU AT,R0,FFFF -BEQ V0,AT,7000E734 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000E76C -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70018FC0 -SW A0,0018 (SP) -BEQ V0,R0,7000E794 -NOP -JAL 70018FC0 -NOP -BNE V0,R0,7000E784 -NOP -JAL 70018EE0 ;A0-> RSP Status -ADDIU A0,R0,0125 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000E7B0 F3B0 sets A3 bytes of commands at A0 to DP Cmd - accepts: A0=p->commands, A1=(unused), A2=(no practical application), A3=size -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A2,0030 (SP) -SW A3,0034 (SP) -JAL 70018FF0 ;V0=TRUE if DP Cmd Status DMA busy flag set -SW S0,0018 (SP) -BEQ V0,R0,7000E7DC -NOP -BEQ R0,R0,7000E844 ;return -1 -ADDIU V0,R0,FFFF -//7000E7DC: clear the current transfer -ADDIU T6,R0,0001 -LUI T7,A410 -SW T6,000C (T7) ;1->A410000C: clear DP Cmd xbus dmem dma -//7000E7E8: loop until ready -LUI T8,A410 -LW S0,000C (T8) ;S0=A410000C: DP Cmd Status -ANDI T9,S0,0001 -BNE T9,R0,7000E7E8 ;loop until transfer finished -NOP -//7000E7FC: set command start & end -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0028 (SP) ;A0 f/ caller -LUI T0,A410 -SW V0,0000 (T0) ;V0->A4100000: set DP Cmd Start -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0028 (SP) ;A0 f/caller -LW T5,0034 (SP) ;T5= A3 f/caller: size -OR T3,V0,R0 -LW T4,0030 (SP) ;T4= A2 f/caller -ADDU T7,T3,T5 ;T7= p->cmds + size -ADDIU T2,R0,0000 -SLTU AT,T7,T5 ;TRUE if end < start (negative size) -ADDU T6,AT,T2 -OR T1,T7,R0 -LUI T8,A410 -SW T1,0004 (T8) ;p->cmd+size -> A4100004: DP Cmd End -OR V0,R0,R0 ;V0=0: return OKAY! -ADDU T6,T6,T4 ;T6=A2 + test: unused error code? -//7000E844: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000E860 F460 set signal 0 in RSP Status -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70018EE0 ;A0-> RSP Status -ADDIU A0,R0,0400 ;A0= set signal 0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000E880 F480 V0= virtual address for TLB index A0 - accepts: A0=TLB Index -MTC0 A0,Index -NOP -TLBR -NOP -NOP -NOP -MFC0 V0,EntryHi -JR RA -NOP - -7000E8B0 F4B0 V0=rdram offset derived from pointer A0 - accepts: A0=p->physical or virtual address -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) ;SP+18=A0: pointer -LW T6,0018 (SP) ;T6=pointer -LUI AT,8000 -SW RA,0014 (SP) -SLTU AT,T6,AT ;AT=TRUE if isn't rdram address (offset) -BNEZ AT,7000E8E8 ;branch if 80000000 or above -LUI AT,A000 -SLTU AT,T6,AT ;AT=TRUE if between rdram and mirror (normal address) -BEQ AT,R0,7000E8E8 ;branch if isn't a ram address -LUI AT,1FFF -ORI AT,AT,FFFF ;AT=1FFFFFFF -BEQ R0,R0,7000E91C -AND V0,T6,AT ;V0=pointer & mask -//7000E8E8: check if in uncached memory -LW T7,0018 (SP) ;T7=p->palette -LUI AT,A000 -SLTU AT,T7,AT ;TRUE if rdram or ROM address -BNEZ AT,7000E914 ;branch if someplace there -LUI AT,C000 -SLTU AT,T7,AT ;TRUE if in uncached rdram mirror (A0-C0) -BEQ AT,R0,7000E914 ;branch if isn't in uncached -LUI AT,1FFF -ORI AT,AT,FFFF ;AT=1FFFFFFF -BEQ R0,R0,7000E91C -AND V0,T7,AT ;V0=pointer & mask -//7000E914: see if it's a TLB address -JAL 70019020 ;V0=physical address for virtual address A0 -LW A0,0018 (SP) ;A0=pointer -//7000E91C: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000E930 -LUI T6,8003 -LW T6,804C (T6) -MTC1 A0,F8 -ADDIU SP,SP,FFF0 -MTC1 T6,F4 -CVT.S.W F10,F8 -BGEZ A0,7000E960 -CVT.S.W F6,F4 -LUI AT,4F80 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -DIV.S F18,F6,F10 -LUI AT,3F00 -MTC1 AT,F4 -ADDIU A1,R0,0001 -ADD.S F12,F18,F4 -CFC1 T7,F31 -CTC1 A1,F31 -NOP -CVT.W.S F8,F12 -CFC1 A1,F31 -NOP -ANDI AT,A1,0004 -ANDI A1,A1,0078 -BEQ A1,R0,7000E9E4 -LUI AT,4F00 -MTC1 AT,F8 -ADDIU A1,R0,0001 -SUB.S F8,F12,F8 -CTC1 A1,F31 -NOP -CVT.W.S F8,F8 -CFC1 A1,F31 -NOP -ANDI AT,A1,0004 -ANDI A1,A1,0078 -BNE A1,R0,7000E9DC -NOP -MFC1 A1,F8 -LUI AT,8000 -BEQ R0,R0,7000E9F4 -OR A1,A1,AT -BEQ R0,R0,7000E9F4 -ADDIU A1,R0,FFFF -MFC1 A1,F8 -NOP -BLTZ A1,7000E9DC -NOP -CTC1 T7,F31 -SLTIU AT,A1,0084 -BEQ AT,R0,7000EA0C -NOP -BEQ R0,R0,7000EA88 -ADDIU V0,R0,FFFF -ADDIU AT,R0,0042 -DIVU A1,AT -MFLO A2 -ANDI T8,A2,00FF -OR A2,T8,R0 -SLTI AT,A2,0011 -BNE AT,R0,7000EA30 -NOP -ADDIU A2,R0,0010 -ADDIU T9,A1,FFFF -LUI T0,A450 -SW T9,0010 (T0) ;T9->A4500010: AI DACrate -ADDIU T1,A2,FFFF -LUI T2,A450 -SW T1,0014 (T2) ;T1->A4500014: AI Bitrate -ADDIU T3,R0,0001 -LUI T4,A450 -SW T3,0008 (T4) ;1->A4500008: AI Control: DMA on -LUI T5,8003 -LW T5,804C (T5) -DIV T5,A1 -MFLO V0 -BNE A1,R0,7000EA70 ;test for division by zero -NOP -BREAK 00001C00 ;Break: division by zero -//7000EA70: -ADDIU AT,R0,FFFF -BNE A1,AT,7000EA88 -LUI AT,8000 -BNE T5,AT,7000EA88 -NOP -BREAK 00001800 ;Break: -//7000EA88: return -JR RA -ADDIU SP,SP,0010 - -7000EA90 -LW V0,0000 (A0) -BEQL V0,R0,7000EAA8 -LW V0,0004 (A0) -LW T6,0004 (A0) -SW T6,0004 (V0) -LW V0,0004 (A0) -BEQ V0,R0,7000EAB8 -NOP -LW T7,0000 (A0) -SW T7,0000 (V0) -JR RA -NOP - -7000EAC0 -LW T6,0000 (A1) -SW A1,0004 (A0) ;A0+4 = A1 -SW T6,0000 (A0) ;A0+0 = A1+0 -LW V0,0000 (A1) ;V0=A1+0: p->??? or NULL -BEQ V0,R0,7000EADC ;skip if NULL -NOP -SW A0,0004 (V0) ;V0+4= A0 -JR RA -SW A0,0000 (A1) ;A1+0 = A0 - -7000EAE4 -LUI T6,8002 -LW T6,76E0 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQL T6,R0,7000EB10 -LW RA,0014 (SP) -JAL 700190E0 -NOP -LUI AT,8002 -SW R0,76E0 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000EB1C -LUI V0,8002 -ADDIU V0,V0,76E0 -LW T6,0000 (V0) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BNEL T6,R0,7000EB44 -LW RA,0014 (SP) -JAL 7000F3A0 -SW A0,0000 (V0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000EB50 F750 V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 - accepts: A0=(unused), A1=(unused), A2=p->sound buffer entry, A3=#blocks, SP+10=block size -LW T6,0010 (SP) ;T6=SP+10: -SW A0,0000 (SP) ;SP+0= A0: unused? -SW A1,0004 (SP) ;SP+4= A1: unused? -MULTU A3,T6 -LW T9,0008 (A2) ;T9=snd.buf.size -LW T8,0000 (A2) ;T8=snd.buf.start -LW A0,0004 (A2) ;A0=snd.buf.cur -ADDIU AT,R0,FFF0 -ADDU T0,T8,T9 ;T0=start+size: snd.buf.end -OR V1,R0,R0 ;V1=NULL -MFLO V0 -ADDIU V0,V0,000F -AND T7,V0,AT ;T7= V0 quadword aligned -ADDU T1,A0,T7 ;T1= snd.buf.cur + size -SLTU AT,T0,T1 -BNE AT,R0,7000EB9C ;skip if exceeded end of buffer -ADDU T2,A0,T7 ;T2=snd.buf.cur + size -//7000EB94: -OR V1,A0,R0 ;V1=A0: snd.buf.cur -SW T2,0004 (A2) ;update snd.buf.cur -//7000EB9C: return V0=snd.buf.cur if set or NULL -JR RA -OR V0,V1,R0 - -7000EBB0 -ADDIU SP,SP,FFC8 -SW RA,001C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -JAL 7000D8E0 ;V0=Count -OR S0,V0,R0 -SW V0,0034 (SP) -LUI T7,8007 -LW T7,8E18 (T7) -LW T6,0034 (SP) -LUI T0,8007 -LUI T1,8007 -LW T1,8E14 (T1) -LW T0,8E10 (T0) -SUBU T8,T6,T7 -SW T8,0030 (SP) -OR A0,S0,R0 -SW T1,002C (SP) -JAL 70018610 ;A0->COP0 status -SW T0,0028 (SP) -LW T9,0030 (SP) -LW T5,002C (SP) -LW RA,001C (SP) -OR T3,T9,R0 -ADDU V1,T3,T5 -LW T4,0028 (SP) -ADDIU T2,R0,0000 -SLTU AT,V1,T5 -ADDU V0,AT,T2 -LW S0,0018 (SP) -ADDIU SP,SP,0038 -JR RA -ADDU V0,V0,T4 - -7000EC40 F840 (V0,V1) = (A0,A1) >> (A2,A3) [logical], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) -LD T6,0000 (SP) -DSRLV V0,T6,T7 ;V0= DW1 >> DW2 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7000EC6C F86C (V0,V1) = (A0,A1) % (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) -LD T6,0000 (SP) -DDIVU T6,T7 -BNE T7,R0,7000EC94 -NOP -BREAK 00001C00 ;Break: division by zero -MFHI V0 ;V0= DW1 % DW2 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7000ECA8 F8A8 (V0,V1) = (A0,A1) / (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) -LD T6,0000 (SP) -DDIVU T6,T7 -BNE T7,R0,7000ECD0 -NOP -BREAK 00001C00 ;Break: division by zero -MFLO V0 ;V0= DW1 // DW2 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7000ECE4 F8E4 (V0,V1) = (A0,A1) << (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) -LD T6,0000 (SP) -DSLLV V0,T6,T7 ;V0= DW1 << DW2 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7000ED10 F910 (V0,V1) = (A0,A1) % (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) -LD T6,0000 (SP) -DDIVU T6,T7 -BNE T7,R0,7000ED38 -NOP -BREAK 00001C00 ;Break: division by zero -MFHI V0 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7000ED4C F94C (V0,V1) = (A0,A1) / (A2,A3) [signed division], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) -LD T6,0000 (SP) -DDIV T6,T7 ;signed division: DW1 and DW2 -NOP -BNE T7,R0,7000ED78 -NOP -BREAK 00001C00 ;Break: division by zero -DADDIU AT,R0,FFFF -BNE T7,AT,7000ED94 -DADDIU AT,R0,0001 -DSLL32 AT,AT,0x1F ;AT=1<<3F, or DW:-0 -BNE T6,AT,7000ED94 -NOP -BREAK 00001800 -MFLO V0 ;V0= DW1 // DW2 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7000EDA8 F9A8 (V0,V1) = (A0,A1) * (A2,A3), treating each pair as a doubleword - accepts: A0=DW1.upper, A1=DW1.lower, A2=DW2.upper, A3=DW2.lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) ;T7= (A0<<32) | A1 -LD T6,0000 (SP) ;T6= (A2<<32) | A3 -DMULTU T6,T7 -MFLO V0 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 ;V1= lower word -JR RA -DSRA32 V0,V0,0x0 ;V0= upper word - -7000EDD8 F9D8 divide DW (A2,A3) by short at SP+12, placing quotient in A0 and modulo in A1 - accepts: A0=p->quotient, A1=p->modulo, A2=DW upper, A3=DW lower, SP+12=[short] divisor -LH T7,0012 (SP) ;T7=SP+12: halfword -SW A2,0008 (SP) ;SP+8= DW -SW A3,000C (SP) -LD T6,0008 (SP) -OR T8,T7,R0 -OR T9,T8,R0 ;T9=T8=T7: halfword -DDIVU T6,T9 -BNE T9,R0,7000EE00 -NOP -BREAK 00001C00 ;Break: division by zero -MFLO T0 ;DW // halfword -SD T0,0000 (A0) ;quotient->A0 -LH T2,0012 (SP) -LD T1,0008 (SP) -OR T3,T2,R0 -OR T4,T3,R0 -DDIVU T1,T4 -BNE T4,R0,7000EE28 -NOP -BREAK 00001C00 ;Break: division by zero -MFHI T5 -SD T5,0000 (A1) ;modulo->A1 -JR RA -NOP - -7000EE38 FA38 (V0,V1) = (A0,A1) % (A2,A3) [signed modulo], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -ADDIU SP,SP,FFF8 -SW A0,0008 (SP) ;SP+8= DW1 -SW A1,000C (SP) -SW A2,0010 (SP) ;SP+10= DW2 -SW A3,0014 (SP) -LD T7,0010 (SP) -LD T6,0008 (SP) -DDIV T6,T7 -NOP -BNE T7,R0,7000EE68 -NOP -BREAK 00001C00 ;Break: division by zero -DADDIU AT,R0,FFFF -BNE T7,AT,7000EE84 -DADDIU AT,R0,0001 -DSLL32 AT,AT,0x1F -BNE T6,AT,7000EE84 -NOP -BREAK 00001800 -MFHI T8 ;T8 = DW1 % DW2 -SD T8,0000 (SP) ;SP+0 = modulo -BGEZ T8,7000EE9C ;if not negative no need to test errors -NOP -BGTZ T7,7000EEB4 ;skip if divisor > 0 -NOP -//7000EE9C: -LD T9,0000 (SP) ;T9= modulo -BLEZ T9,7000EEC4 -NOP -LD T0,0010 (SP) ;T7= divisor -BGEZ T0,7000EEC4 ;return if not negative -NOP -//7000EEB4: account for modulo requiring the sign of the divisor -LD T1,0000 (SP) -LD T2,0010 (SP) -DADDU T3,T1,T2 ;T3= modulo + divisor -SD T3,0000 (SP) ;update modulo -//7000EEC4: -LW V0,0000 (SP) -LW V1,0004 (SP) -JR RA -ADDIU SP,SP,0008 - -7000EED4 FAD4 (V0,V1) = (A0,A1) >> (A2,A3) [arithmetic], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower -SW A0,0000 (SP) -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LD T7,0008 (SP) -LD T6,0000 (SP) -DSRAV V0,T6,T7 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7000EF00 FB00 set p->audio A0 of length A1 in AI Register; V0=0 okay or -1 on error - accepts: A0=p->audio, A1=length -ADDIU SP,SP,FFE0 -LUI T7,8002 -LBU T7,76F0 (T7) ;T7=800276F0: -SW A0,0020 (SP) ;A0->SP+20: p->audio -LW T6,0020 (SP) -SW RA,0014 (SP) -SW A1,0024 (SP) ;SP+24= A1 -BEQ T7,R0,7000EF2C ;if set, subtract 0x2000 -SW T6,001C (SP) ;SP+1C= p->audio -ADDIU T8,T6,E000 -SW T8,001C (SP) ;p->audio -= 2000 -//7000EF2C: -LW T9,0020 (SP) ;T9= p->audio -LW T0,0024 (SP) ;T0= length -ADDIU AT,R0,2000 -ADDU T1,T9,T0 -ANDI T2,T1,3FFF ;T2= p->audio.end & ~0x4000 -BNE T2,AT,7000EF58 ;branch if not exactly 2000 -NOP -ADDIU T3,R0,0001 -LUI AT,8002 -BEQ R0,R0,7000EF60 -SB T3,76F0 (AT) ;1->800276F0 -//7000EF58: -LUI AT,8002 -SB R0,76F0 (AT) ;0->800276F0 -//7000EF60: -JAL 700190F0 -NOP -BEQ V0,R0,7000EF78 -NOP -BEQ R0,R0,7000EF98 ;return V0=-1: error -ADDIU V0,R0,FFFF -//7000EF78: load audio into the AI -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,001C (SP) ;A0=SP+1C: p->audio.corrected -LUI T4,A450 -SW V0,0000 (T4) ;V0->A4500000: set AI Address -LW T5,0024 (SP) ;T5= A1 f/caller -LUI T7,A450 -OR V0,R0,R0 -SW T5,0004 (T7) ;T5->A4500004: set AI Length -//7000EF98: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7000EFB0 FBB0 V0=AI Length -LUI T6,A450 -JR RA -LW V0,0004 (T6) ;V0=A4500004: AI Length - -7000EFC0 FBC0 unconditional return -JR RA -NOP - -7000EFC8 -LW T6,0044 (A0) -MTC1 A1,F4 -LUI AT,8003 -MTC1 T6,F8 -CVT.S.W F6,F4 -LDC1 F4,9420 (AT) -LUI AT,3FE0 -MTC1 AT,F7 -ADDIU AT,R0,FFF0 -CVT.S.W F10,F8 -MUL.S F16,F6,F10 -MTC1 R0,F6 -CVT.D.S F18,F16 -DIV.D F8,F18,F4 -ADD.D F10,F8,F6 -CVT.S.D F0,F10 -TRUNC.W.S F16,F0 -MFC1 V0,F16 -NOP -AND T8,V0,AT -JR RA -OR V0,T8,R0 - -7000F020 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -JAL 7000EA90 -OR A0,A1,R0 -LW A1,0018 (SP) -LW A0,001C (SP) -JAL 7000EAC0 -ADDIU A1,A1,0014 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000F058 -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -LW S0,0014 (A0) -OR S1,A0,R0 -ADDIU S2,A0,0004 -BEQL S0,R0,7000F0A4 -LW RA,0024 (SP) -JAL 7000EA90 -OR A0,S0,R0 -OR A0,S0,R0 -JAL 7000EAC0 -OR A1,S2,R0 -LW S0,0014 (S1) -BNE S0,R0,7000F080 -NOP -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7000F0B8 - accepts: A0=p->??? -LUI V0,8002 -LW V0,76E0 (V0) ;V0=800276E0: -LW T6,002C (V0) -SW T6,0000 (A0) -JR RA -SW A0,002C (V0) - -7000F0D0 -LUI V0,8002 -LW V0,76E0 (V0) ;V0=800276E0: -OR V1,R0,R0 -LW A0,002C (V0) -BEQ A0,R0,7000F0F8 ;return if NULL -NOP -//7000F0E8: -LW T6,0000 (A0) -OR V1,A0,R0 -SW T6,002C (V0) -SW R0,0000 (A0) -//7000F0F8: return -JR RA -OR V0,V1,R0 - -7000F100 FD00 unconditional return -JR RA -NOP - -7000F108 -ADDIU SP,SP,FF48 -SW S1,0030 (SP) -LUI S1,8002 -LW S1,76E0 (S1) -SW RA,004C (SP) -SW S7,0048 (SP) -SW S6,0044 (SP) -SW S5,0040 (SP) -SW S4,003C (SP) -SW S3,0038 (SP) -SW S2,0034 (SP) -SW S0,002C (SP) -SDC1 F22,0020 (SP) -SDC1 F20,0018 (SP) -SW A0,00B8 (SP) -SW A1,00BC (SP) -SH R0,00AA (SP) -LW T7,0000 (S1) -OR S3,A3,R0 -OR S4,A0,R0 -BNE T7,R0,7000F16C -OR S5,A2,R0 -SW R0,0000 (A1) -BEQ R0,R0,7000F36C -OR V0,A0,R0 -SW R0,00B4 (SP) -LW V0,0000 (S1) -LUI V1,7FFF -ORI V1,V1,FFFF -BEQ V0,R0,7000F1B8 -ADDIU S2,R0,FFF0 -LW A0,0020 (S1) -LW T9,0010 (V0) -SUBU T0,T9,A0 -SLT AT,T0,V1 -BEQL AT,R0,7000F1B0 -LW V0,0000 (V0) -SW V0,00B4 (SP) -LW T1,0010 (V0) -LW A0,0020 (S1) -SUBU V1,T1,A0 -LW V0,0000 (V0) -BNEL V0,R0,7000F18C -LW T9,0010 (V0) -LW T2,00B4 (SP) -LW A0,0020 (S1) -LW V0,0010 (T2) -SUBU T3,V0,A0 -SLT AT,T3,S3 -BEQ AT,R0,7000F2B0 -SW V0,001C (S1) -LUI AT,3FE0 -MTC1 AT,F23 -LUI AT,8003 -MTC1 R0,F22 -LDC1 F20,9428 (AT) -LW T4,001C (S1) -LUI S0,7FFF -ORI S0,S0,FFFF -AND T5,T4,S2 -SW T5,001C (S1) -LW A0,00B4 (SP) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW T8,0044 (S1) -MTC1 V0,F4 -LW T0,00B4 (SP) -MTC1 T8,F8 -CVT.S.W F6,F4 -LW T1,0010 (T0) -CVT.S.W F10,F8 -MUL.S F16,F6,F10 -CVT.D.S F18,F16 -DIV.D F4,F18,F20 -ADD.D F8,F4,F22 -CVT.S.D F0,F8 -TRUNC.W.S F6,F0 -MFC1 V0,F6 -NOP -ADDU T2,T1,V0 -SW T2,0010 (T0) -SW R0,00B4 (SP) -LW V1,0000 (S1) -BEQL V1,R0,7000F298 -LW T7,00B4 (SP) -LW A0,0020 (S1) -LW T3,0010 (V1) -SUBU T4,T3,A0 -SLT AT,T4,S0 -BEQL AT,R0,7000F28C -LW V1,0000 (V1) -SW V1,00B4 (SP) -LW T5,0010 (V1) -LW A0,0020 (S1) -SUBU S0,T5,A0 -LW V1,0000 (V1) -BNEL V1,R0,7000F268 -LW T3,0010 (V1) -LW T7,00B4 (SP) -LW A0,0020 (S1) -LW V0,0010 (T7) -SUBU T9,V0,A0 -SLT AT,T9,S3 -BNE AT,R0,7000F1E8 -SW V0,001C (S1) -LW T8,001C (S1) -ADDIU S2,R0,FFF0 -ADDIU S7,SP,00AA -AND T6,T8,S2 -BLEZ S3,7000F34C -SW T6,001C (S1) -LUI S6,0700 -LW V0,0048 (S1) -OR S0,S3,R0 -SLT AT,V0,S3 -BEQ AT,R0,7000F2E8 -NOP -BEQ R0,R0,7000F2E8 -OR S0,V0,R0 -SW S6,0000 (S4) -SW R0,0004 (S4) -LW S2,0038 (S1) -ADDIU A1,R0,0006 -OR A2,S5,R0 -LW T9,0008 (S2) -OR A0,S2,R0 -JALR RA,T9 -NOP -LW A3,0020 (S1) -ADDIU T1,S4,0008 -SW T1,0010 (SP) -LW T9,0004 (S2) -OR A0,S2,R0 -OR A1,S7,R0 -JALR RA,T9 -OR A2,S0,R0 -LW T3,0020 (S1) -SUBU S3,S3,S0 -SLL T0,S0,0x2 -ADDU T4,T3,S0 -OR S4,V0,R0 -ADDU S5,S5,T0 -BGTZ S3,7000F2CC -SW T4,0020 (S1) -LW T5,00B8 (SP) -LW T6,00BC (SP) -OR A0,S1,R0 -SUBU T7,S4,T5 -SRA T8,T7,0x3 -JAL 7000F058 -SW T8,0000 (T6) -OR V0,S4,R0 -LW RA,004C (SP) -LDC1 F20,0018 (SP) -LDC1 F22,0020 (SP) -LW S0,002C (SP) -LW S1,0030 (SP) -LW S2,0034 (SP) -LW S3,0038 (SP) -LW S4,003C (SP) -LW S5,0040 (SP) -LW S6,0044 (SP) -LW S7,0048 (SP) -JR RA -ADDIU SP,SP,00B8 - -7000F3A0 -ADDIU SP,SP,FF88 -SW RA,0044 (SP) -SW S8,0040 (SP) -SW S7,003C (SP) -SW S6,0038 (SP) -SW S5,0034 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -LW S7,0014 (A1) -SW R0,0000 (A0) -LW T6,0004 (A1) -SW R0,0020 (A0) -SW R0,001C (A0) -SW T6,003C (A0) -LW T7,0018 (A1) -ADDIU T8,R0,00A0 -SW T8,0048 (A0) -SW T7,0044 (A0) -LW T9,0010 (A1) -OR S6,A0,R0 -OR S8,A1,R0 -ADDIU T0,R0,001C -SW T9,0024 (A0) -SW T0,0010 (SP) ;SP+10= 1C bytes -OR A0,R0,R0 -OR A1,R0,R0 -ADDIU A3,R0,0001 ;A3= 1 block -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A2,S7,R0 -SW V0,005C (SP) -JAL 70019120 -OR A0,V0,R0 -LW T1,005C (SP) -ADDIU T2,R0,004C -OR A0,R0,R0 -SW T1,0038 (S6) -SW T2,0010 (SP) ;SP+10= 4C bytes -OR A1,R0,R0 -OR A2,S7,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -ADDIU T3,R0,0001 -SW V0,0034 (S6) -SW T3,0040 (S6) -LW A3,0004 (S8) -ADDIU T4,R0,0004 -SW T4,0010 (SP) ;SP+10= 4 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A2,S7,R0 -LW A0,0034 (S6) -OR A1,V0,R0 -JAL 700191B8 -LW A2,0004 (S8) -ADDIU T5,R0,0020 -SW T5,0010 (SP) ;SP+10= 20 bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S7,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -SW V0,0030 (S6) -LW A3,0004 (S8) -ADDIU T6,R0,0004 -SW T6,0010 (SP) ;SP+10= 4 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A2,S7,R0 -LW A0,0030 (S6) -OR A1,V0,R0 -JAL 70019164 -LW A2,0004 (S8) -LBU T7,001C (S8) -OR A0,S6,R0 -OR A2,S8,R0 -BEQ T7,R0,7000F4FC -ADDIU A1,R0,0002 -OR A1,R0,R0 -JAL 700198C0 -OR A3,S7,R0 -BEQ R0,R0,7000F50C -SW R0,0004 (S6) -LW A0,0030 (S6) -JAL 70019960 -LW A2,0034 (S6) -SW R0,0004 (S6) -SW R0,0008 (S6) -SW R0,0014 (S6) -SW R0,0018 (S6) -SW R0,000C (S6) -SW R0,0010 (S6) -LW A3,0004 (S8) -ADDIU T8,R0,00DC -SW T8,0010 (SP) ;SP+10= DC bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A2,S7,R0 -LW T9,0004 (S8) -OR S4,R0,R0 -OR S0,V0,R0 -BLEZ T9,7000F608 -ADDIU A1,S6,0004 -ADDIU S1,V0,008C -ADDIU S2,V0,0058 -ADDIU S3,V0,0010 -SW A1,0048 (SP) -LW A1,0048 (SP) -OR S5,S0,R0 -JAL 7000EAC0 -OR A0,S0,R0 -SW R0,0008 (S0) -LW A1,0024 (S6) -OR A0,S3,R0 -JAL 70019294 -OR A2,S7,R0 -OR A0,S3,R0 -ADDIU A1,R0,0001 -JAL 70019AB0 -OR A2,R0,R0 -OR A0,S2,R0 -JAL 7001920C -OR A1,S7,R0 -OR A0,S2,R0 -ADDIU A1,R0,0001 -JAL 7001A600 -OR A2,S3,R0 -OR A0,S1,R0 -JAL 7001933C -OR A1,S7,R0 -OR A0,S1,R0 -ADDIU A1,R0,0001 -JAL 7001AA14 -OR A2,S2,R0 -LW A0,0034 (S6) -ADDIU A1,R0,0002 -JAL 7001B4E0 -OR A2,S1,R0 -ADDIU T0,S5,008C -SW T0,000C (S5) -LW T1,0004 (S8) -ADDIU S4,S4,0001 -ADDIU S0,S0,00DC -SLT AT,S4,T1 -ADDIU S1,S1,00DC -ADDIU S2,S2,00DC -BNE AT,R0,7000F560 -ADDIU S3,S3,00DC -OR S4,R0,R0 -LW A0,005C (SP) -ADDIU A1,R0,0001 -JAL 7001B5F0 -LW A2,0030 (S6) -LW A3,0008 (S8) -ADDIU T2,R0,001C -SW T2,0010 (SP) ;SP+10= 1C bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A2,S7,R0 -SW R0,002C (S6) -LW T3,0008 (S8) -OR V1,V0,R0 -BLEZL T3,7000F670 -SW S7,0028 (S6) -LW T4,002C (S6) -ADDIU S4,S4,0001 -SW T4,0000 (V1) -SW V1,002C (S6) -LW T5,0008 (S8) -ADDIU V1,V1,001C -SLT AT,S4,T5 -BNEL AT,R0,7000F64C -LW T4,002C (S6) -SW S7,0028 (S6) -LW RA,0044 (SP) -LW S8,0040 (SP) -LW S7,003C (SP) -LW S6,0038 (SP) -LW S5,0034 (SP) -LW S4,0030 (SP) -LW S3,002C (SP) -LW S2,0028 (SP) -LW S1,0024 (SP) -LW S0,0020 (SP) -JR RA -ADDIU SP,SP,0078 - -7000F6A0 102A0 send PI transfer request; read or write (A2) SP+14 bytes between hardware A3 and rdram SP+10 - accepts: A0=p->???, A1=, A2=mode (0-read:1-write), A3=hardware address, SP+10=rdram address, SP+14=size, SP+18= -ADDIU SP,SP,FFD8 -LUI T6,8002 -LW T6,7790 (T6) -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -SW A3,0034 (SP) -SW S1,0018 (SP) -BNE T6,R0,7000F6D4 ;okay so long as 80027790 set -SW S0,0014 (SP) -BEQ R0,R0,7000F798 ;return -1: failure! -ADDIU V0,R0,FFFF -//7000F6D4: set value based on mode -LW T7,0030 (SP) ;T7=mode -BNE T7,R0,7000F6F0 -NOP -LW T9,0028 (SP) ;T9= A0 f/caller -ADDIU T8,R0,000B -BEQ R0,R0,7000F6FC -SH T8,0000 (T9) ;B->A0+0: read -//7000F6F0: -LW T1,0028 (SP) ;T1= A0 f/caller -ADDIU T0,R0,000C -SH T0,0000 (T1) ;C->A0+0: write -//7000F6FC: copy values into A0 f/caller -LW T2,002C (SP) -LW T3,0028 (SP) ;T3=A0 f/caller -ADDIU AT,R0,0001 -SB T2,0002 (T3) ;A0+2= A1 f/caller -LW T5,0028 (SP) -LW T4,0040 (SP) -SW T4,0004 (T5) ;A0+4 = SP+18 f/caller: -LW T7,0028 (SP) -LW T6,0038 (SP) -SW T6,0008 (T7) ;A0+8 = SP+10 f/caller: rdram address -LW T9,0028 (SP) -LW T8,0034 (SP) -SW T8,000C (T9) ;A0+C = A3 f/caller: hardware address -LW T1,0028 (SP) -LW T0,003C (SP) -SW T0,0010 (T1) ;A0+10= SP+14 f/caller: size -LW T2,0028 (SP) -SW R0,0014 (T2) ;A0+14= 0 -LW T3,002C (SP) -BNE T3,AT,7000F774 ;branch if A1 not 1 -NOP -//7000F750: -JAL 7001B800 -NOP -OR S1,V0,R0 -OR A0,S1,R0 -LW A1,0028 (SP) ;A1=A0 f/caller -JAL 7001B6B0 -OR A2,R0,R0 ;A2=0 -BEQ R0,R0,7000F794 -OR S0,V0,R0 -//7000F774: -JAL 7001B800 -NOP -OR S1,V0,R0 -OR A0,S1,R0 -LW A1,0028 (SP) ;A1=A1 f/caller -JAL 7000DF10 -OR A2,R0,R0 ;A2=0 -//7000F790: -OR S0,V0,R0 -OR V0,S0,R0 -//7000F798: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7000F7B0 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T6,0028 (SP) -OR S0,V0,R0 -ANDI T7,T6,0001 -BEQ T7,R0,7000F7EC -NOP -LUI T8,8003 -LW T8,8044 (T8) -LW T9,000C (T8) -ORI T0,T9,0008 -SW T0,000C (T8) -LW T1,0028 (SP) -ANDI T2,T1,0002 -BEQ T2,R0,7000F814 -NOP -LUI T3,8003 -LW T3,8044 (T3) -ADDIU AT,R0,FFF7 -LW T4,000C (T3) -AND T5,T4,AT -SW T5,000C (T3) -LW T6,0028 (SP) -ANDI T7,T6,0004 -BEQ T7,R0,7000F838 -NOP -LUI T9,8003 -LW T9,8044 (T9) -LW T0,000C (T9) -ORI T8,T0,0004 -SW T8,000C (T9) -LW T1,0028 (SP) -ANDI T2,T1,0008 -BEQ T2,R0,7000F860 -NOP -LUI T4,8003 -LW T4,8044 (T4) -ADDIU AT,R0,FFFB -LW T5,000C (T4) -AND T3,T5,AT -SW T3,000C (T4) -LW T6,0028 (SP) -ANDI T7,T6,0010 -BEQ T7,R0,7000F884 -NOP -LUI T0,8003 -LW T0,8044 (T0) -LW T8,000C (T0) -ORI T9,T8,0010 -SW T9,000C (T0) -LW T1,0028 (SP) -ANDI T2,T1,0020 -BEQ T2,R0,7000F8AC -NOP -LUI T5,8003 -LW T5,8044 (T5) -ADDIU AT,R0,FFEF -LW T3,000C (T5) -AND T4,T3,AT -SW T4,000C (T5) -LW T6,0028 (SP) -ANDI T7,T6,0040 -BEQ T7,R0,7000F8EC -NOP -LUI T8,8003 -LW T8,8044 (T8) -LUI AT,0001 -LUI T1,8003 -LW T9,000C (T8) -OR T0,T9,AT -SW T0,000C (T8) -LW T1,8044 (T1) -ADDIU AT,R0,FCFF -LW T2,000C (T1) -AND T3,T2,AT -SW T3,000C (T1) -LW T4,0028 (SP) -ANDI T5,T4,0080 -BEQ T5,R0,7000F938 -NOP -LUI T6,8003 -LW T6,8044 (T6) -LUI AT,FFFE -ORI AT,AT,FFFF -LW T7,000C (T6) -LUI T0,8003 -AND T9,T7,AT -SW T9,000C (T6) -LW T0,8044 (T0) -LW T2,0008 (T0) -LW T8,000C (T0) -LW T3,0004 (T2) -ANDI T1,T3,0300 -OR T4,T8,T1 -SW T4,000C (T0) -LUI T5,8003 -LW T5,8044 (T5) -OR A0,S0,R0 -LHU T7,0000 (T5) -ORI T9,T7,0008 -JAL 70018610 ;A0->COP0 status -SH T9,0000 (T5) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000F970 10570 V0=p->A2 bytes copied from A0 to A1 - accepts: A0=p->source, A1=p->target, A2=size -BEQ A2,R0,7000F9DC -OR A3,A1,R0 ;A3=A1: p->target -BEQ A0,A1,7000F9DC -SLT AT,A1,A0 -BNEL AT,R0,7000F9A4 -SLTI AT,A2,0010 -ADD V0,A0,A2 -SLT AT,A1,V0 -BEQL AT,R0,7000F9A4 -SLTI AT,A2,0010 -BEQ R0,R0,7000FB08 -SLTI AT,A2,0010 -//7000F9A0: -SLTI AT,A2,0010 -BNE AT,R0,7000F9BC -NOP -ANDI V0,A0,0003 -ANDI V1,A1,0003 -BEQ V0,V1,7000F9E4 -NOP -//7000F9BC: continue to copy for A2 -BEQ A2,R0,7000F9DC -NOP -ADDU V1,A0,A2 -//7000F9C8: copy A2 bytes from A0 to A1 -LB V0,0000 (A0) -ADDIU A0,A0,0001 -ADDIU A1,A1,0001 -BNE A0,V1,7000F9C8 -SB V0,FFFF (A1) -//7000F9DC: return V0=p->target -JR RA -OR V0,A3,R0 -//7000F9E4: -BEQ V0,R0,7000FA48 -ADDIU AT,R0,0001 -BEQ V0,AT,7000FA2C -ADDIU AT,R0,0002 -BEQL V0,AT,7000FA18 -LH V0,0000 (A0) -LB V0,0000 (A0) -ADDIU A0,A0,0001 -ADDIU A1,A1,0001 -ADDIU A2,A2,FFFF -BEQ R0,R0,7000FA48 -SB V0,FFFF (A1) -//7000FA14: -LH V0,0000 (A0) -ADDIU A0,A0,0002 -ADDIU A1,A1,0002 -ADDIU A2,A2,FFFE -BEQ R0,R0,7000FA48 -SH V0,FFFE (A1) -//7000FA2C: -LB V0,0000 (A0) -LH V1,0001 (A0) -ADDIU A0,A0,0003 -ADDIU A1,A1,0003 -ADDIU A2,A2,FFFD -SB V0,FFFD (A1) -SH V1,FFFE (A1) -//7000FA48: copy A2 bytes from A0 to A1 (sets of 0x20) -SLTI AT,A2,0020 -BNEL AT,R0,7000FAA8 -SLTI AT,A2,0010 -LW V0,0000 (A0) -LW V1,0004 (A0) -LW T0,0008 (A0) -LW T1,000C (A0) -LW T2,0010 (A0) -LW T3,0014 (A0) -LW T4,0018 (A0) -LW T5,001C (A0) -ADDIU A0,A0,0020 -ADDIU A1,A1,0020 -ADDIU A2,A2,FFE0 -SW V0,FFE0 (A1) -SW V1,FFE4 (A1) -SW T0,FFE8 (A1) -SW T1,FFEC (A1) -SW T2,FFF0 (A1) -SW T3,FFF4 (A1) -SW T4,FFF8 (A1) -BEQ R0,R0,7000FA48 -SW T5,FFFC (A1) -//7000FAA4: copy A2 bytes from A0 to A1 (sets of 0x10) -SLTI AT,A2,0010 -BNEL AT,R0,7000FAE4 -SLTI AT,A2,0004 -LW V0,0000 (A0) -LW V1,0004 (A0) -LW T0,0008 (A0) -LW T1,000C (A0) -ADDIU A0,A0,0010 -ADDIU A1,A1,0010 -ADDIU A2,A2,FFF0 -SW V0,FFF0 (A1) -SW V1,FFF4 (A1) -SW T0,FFF8 (A1) -BEQ R0,R0,7000FAA4 -SW T1,FFFC (A1) -//7000FAE0: copy A2 bytes from A0 to A1 (sets of 0x4) -SLTI AT,A2,0004 -BNE AT,R0,7000F9BC -NOP -LW V0,0000 (A0) -ADDIU A0,A0,0004 -ADDIU A1,A1,0004 -ADDIU A2,A2,FFFC -BEQ R0,R0,7000FAE0 -SW V0,FFFC (A1) -//7000FB04: -SLTI AT,A2,0010 -ADD A0,A0,A2 -BNE AT,R0,7000FB24 -ADD A1,A1,A2 -ANDI V0,A0,0003 -ANDI V1,A1,0003 -BEQ V0,V1,7000FB54 -NOP -//7000FB24: -BEQ A2,R0,7000F9DC -NOP -ADDIU A0,A0,FFFF -ADDIU A1,A1,FFFF -SUBU V1,A0,A2 -//7000FB38: -LB V0,0000 (A0) -ADDIU A0,A0,FFFF -ADDIU A1,A1,FFFF -BNE A0,V1,7000FB38 -SB V0,0001 (A1) -JR RA -OR V0,A3,R0 -//7000FB54: -BEQ V0,R0,7000FBB8 -ADDIU AT,R0,0003 -BEQ V0,AT,7000FB9C -ADDIU AT,R0,0002 -BEQL V0,AT,7000FB88 -LH V0,FFFE (A0) -LB V0,FFFF (A0) -ADDIU A0,A0,FFFF -ADDIU A1,A1,FFFF -ADDIU A2,A2,FFFF -BEQ R0,R0,7000FBB8 -SB V0,0000 (A1) -//7000FB84: -LH V0,FFFE (A0) -ADDIU A0,A0,FFFE -ADDIU A1,A1,FFFE -ADDIU A2,A2,FFFE -BEQ R0,R0,7000FBB8 -SH V0,0000 (A1) -//7000FB9C: -LB V0,FFFF (A0) -LH V1,FFFD (A0) -ADDIU A0,A0,FFFD -ADDIU A1,A1,FFFD -ADDIU A2,A2,FFFD -SB V0,0002 (A1) -SH V1,0000 (A1) -//7000FBB8: -SLTI AT,A2,0020 -BNEL AT,R0,7000FC18 -SLTI AT,A2,0010 -LW V0,FFFC (A0) -LW V1,FFF8 (A0) -LW T0,FFF4 (A0) -LW T1,FFF0 (A0) -LW T2,FFEC (A0) -LW T3,FFE8 (A0) -LW T4,FFE4 (A0) -LW T5,FFE0 (A0) -ADDIU A0,A0,FFE0 -ADDIU A1,A1,FFE0 -ADDIU A2,A2,FFE0 -SW V0,001C (A1) -SW V1,0018 (A1) -SW T0,0014 (A1) -SW T1,0010 (A1) -SW T2,000C (A1) -SW T3,0008 (A1) -SW T4,0004 (A1) -BEQ R0,R0,7000FBB8 -SW T5,0000 (A1) -//7000FC14: -SLTI AT,A2,0010 -BNEL AT,R0,7000FC54 -SLTI AT,A2,0004 -LW V0,FFFC (A0) -LW V1,FFF8 (A0) -LW T0,FFF4 (A0) -LW T1,FFF0 (A0) -ADDIU A0,A0,FFF0 -ADDIU A1,A1,FFF0 -ADDIU A2,A2,FFF0 -SW V0,000C (A1) -SW V1,0008 (A1) -SW T0,0004 (A1) -BEQ R0,R0,7000FC14 -SW T1,0000 (A1) -//7000FC50: -SLTI AT,A2,0004 -BNE AT,R0,7000FB24 -NOP -LW V0,FFFC (A0) -ADDIU A0,A0,FFFC -ADDIU A1,A1,FFFC -ADDIU A2,A2,FFFC -BEQ R0,R0,7000FC50 -SW V0,0000 (A1) - -7000FC80 - accepts: A0=p->buffer, A1=, A2=(float), A3=(float), SP+10=(float), SP+14=(float), SP+18=(float) -ADDIU SP,SP,FFD0 -MTC1 A2,F14 -SW RA,0014 (SP) -SW A3,003C (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -JAL 70010010 -SWC1 F14,0038 (SP) -LWC1 F14,0038 (SP) -LUI AT,8003 -LDC1 F6,9430 (AT) -CVT.D.S F4,F14 -LUI AT,4000 -MUL.D F8,F4,F6 -MTC1 AT,F10 -CVT.S.D F14,F8 -DIV.S F12,F14,F10 -JAL 7F057EA0 -SWC1 F12,001C (SP) -LWC1 F12,001C (SP) -JAL 7F057EAC -SWC1 F0,0020 (SP) -LWC1 F4,0020 (SP) -LWC1 F6,003C (SP) -LWC1 F14,0040 (SP) -DIV.S F2,F4,F0 -LWC1 F16,0044 (SP) -LUI AT,BF80 -MTC1 AT,F4 -ADD.S F18,F14,F16 -LW V0,0030 (SP) -LUI AT,4000 -SUB.S F12,F14,F16 -LW A1,0034 (SP) -SWC1 F4,002C (V0) -OR V1,R0,R0 -ADDIU A0,R0,0004 -DIV.S F10,F18,F12 -SWC1 F2,0014 (V0) -DIV.S F8,F2,F6 -MTC1 AT,F6 -SWC1 F10,0028 (V0) -SWC1 F8,0000 (V0) -MUL.S F8,F6,F14 -MTC1 R0,F6 -NOP -SWC1 F6,003C (V0) -MUL.S F10,F8,F16 -DIV.S F4,F10,F12 -SWC1 F4,0038 (V0) -LWC1 F0,0048 (SP) -LWC1 F6,0000 (V0) -ADDIU V1,V1,0001 -LWC1 F16,0004 (V0) -MUL.S F10,F6,F0 -LWC1 F12,0008 (V0) -BEQ V1,A0,7000FDA4 -LWC1 F14,000C (V0) -MUL.S F8,F16,F0 -LWC1 F6,0010 (V0) -LWC1 F16,0014 (V0) -MUL.S F4,F12,F0 -LWC1 F12,0018 (V0) -ADDIU V1,V1,0001 -MUL.S F2,F14,F0 -LWC1 F14,001C (V0) -SWC1 F10,0000 (V0) -MUL.S F10,F6,F0 -SWC1 F8,0004 (V0) -SWC1 F4,0008 (V0) -ADDIU V0,V0,0010 -BNE V1,A0,7000FD68 -SWC1 F2,FFFC (V0) -MUL.S F8,F16,F0 -ADDIU V0,V0,0010 -SWC1 F10,FFF0 (V0) -MUL.S F4,F12,F0 -NOP -MUL.S F2,F14,F0 -SWC1 F8,FFF4 (V0) -SWC1 F4,FFF8 (V0) -SWC1 F2,FFFC (V0) -BEQ A1,R0,7000FEA0 -LUI AT,4000 -MTC1 AT,F9 -MTC1 R0,F8 -CVT.D.S F0,F18 -ORI T6,R0,FFFF -C.LE.D F0,F8 -LUI AT,4100 -BC1FL 7000FDFC -MTC1 AT,F11 -BEQ R0,R0,7000FEA0 -SH T6,0000 (A1) -MTC1 AT,F11 -MTC1 R0,F10 -ADDIU T8,R0,0001 -LUI AT,41E0 -DIV.D F4,F10,F0 -ADDIU T0,R0,0001 -CFC1 T7,F31 -CTC1 T8,F31 -NOP -CVT.W.D F6,F4 -CFC1 T8,F31 -NOP -ANDI T8,T8,0078 -BEQL T8,R0,7000FE80 -MFC1 T8,F6 -MTC1 AT,F7 -MTC1 R0,F6 -ADDIU T8,R0,0001 -SUB.D F6,F4,F6 -CTC1 T8,F31 -NOP -CVT.W.D F6,F6 -CFC1 T8,F31 -NOP -ANDI T8,T8,0078 -BNE T8,R0,7000FE74 -NOP -MFC1 T8,F6 -LUI AT,8000 -BEQ R0,R0,7000FE8C -OR T8,T8,AT -BEQ R0,R0,7000FE8C -ADDIU T8,R0,FFFF -MFC1 T8,F6 -NOP -BLTZ T8,7000FE74 -NOP -CTC1 T7,F31 -ANDI T9,T8,FFFF -BGTZ T9,7000FEA0 -SH T8,0000 (A1) -SH T0,0000 (A1) -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7000FEB0 - accepts: A0=p->entry in 80069558 table -ADDIU SP,SP,FF98 -MTC1 A2,F12 -MTC1 A3,F14 -LWC1 F4,0078 (SP) ;F4=SP+10: -LWC1 F6,007C (SP) ;F6=SP+14: -LWC1 F8,0080 (SP) ;F8=SP+18: -SW RA,0024 (SP) -SW A0,0068 (SP) -MFC1 A2,F12 -MFC1 A3,F14 -ADDIU A0,SP,0028 ;A0=SP+28: p->buffer -SWC1 F4,0010 (SP) -SWC1 F6,0014 (SP) -JAL 7000FC80 -SWC1 F8,0018 (SP) -//7000FEEC: -ADDIU A0,SP,0028 ;A0=p->buffer -JAL 7000FF10 -LW A1,0068 (SP) ;A1=p->entry -//7000FEF8: return -LW RA,0024 (SP) -ADDIU SP,SP,0068 -JR RA -NOP - -7000FF10 -LUI AT,4780 -MTC1 AT,F0 -OR V0,A1,R0 -ADDIU V1,A1,0020 -OR A2,R0,R0 -OR A3,A0,R0 -ADDIU T4,R0,0004 -ADDIU T3,R0,0002 -LUI T2,FFFF -OR A0,R0,R0 -OR T0,A3,R0 -LWC1 F14,0004 (T0) -ADDIU A0,A0,0001 -LWC1 F18,0000 (T0) -MUL.S F16,F14,F0 -BEQ A0,T3,7000FFB4 -NOP -MUL.S F14,F18,F0 -ADDIU A0,A0,0001 -ADDIU V0,V0,0004 -ADDIU V1,V1,0004 -ADDIU T0,T0,0008 -TRUNC.W.S F12,F16 -TRUNC.W.S F14,F14 -MFC1 T1,F12 -MFC1 A1,F14 -SRA T9,T1,0x10 -ANDI T5,T9,FFFF -AND T8,A1,T2 -OR T6,T8,T5 -SLL T7,A1,0x10 -AND T9,T7,T2 -SW T6,FFFC (V0) -ANDI T8,T1,FFFF -OR T5,T9,T8 -SW T5,FFFC (V1) -LWC1 F14,0004 (T0) -LWC1 F18,0000 (T0) -MUL.S F16,F14,F0 -BNE A0,T3,7000FF54 -NOP -MUL.S F14,F18,F0 -ADDIU T0,T0,0008 -ADDIU V0,V0,0004 -ADDIU V1,V1,0004 -TRUNC.W.S F12,F16 -TRUNC.W.S F14,F14 -MFC1 T1,F12 -MFC1 A1,F14 -SRA T9,T1,0x10 -ANDI T5,T9,FFFF -AND T8,A1,T2 -OR T6,T8,T5 -SLL T7,A1,0x10 -AND T9,T7,T2 -ANDI T8,T1,FFFF -SW T6,FFFC (V0) -OR T5,T9,T8 -SW T5,FFFC (V1) -ADDIU A2,A2,0001 -BNE A2,T4,7000FF34 -ADDIU A3,A3,0010 -JR RA -NOP - -70010010 -LUI AT,3F80 -OR V1,A0,R0 -MTC1 AT,F0 -MTC1 R0,F2 -ADDIU A0,R0,0001 -OR V0,R0,R0 -ADDIU A3,R0,0004 -ADDIU A2,R0,0003 -ADDIU A1,R0,0002 -BNEL V0,R0,70010048 -SWC1 F2,0000 (V1) -BEQ R0,R0,70010048 -SWC1 F0,0000 (V1) -SWC1 F2,0000 (V1) -BNEL V0,A0,7001005C -SWC1 F2,0004 (V1) -BEQ R0,R0,7001005C -SWC1 F0,0004 (V1) -SWC1 F2,0004 (V1) -BNEL V0,A1,70010070 -SWC1 F2,0008 (V1) -BEQ R0,R0,70010070 -SWC1 F0,0008 (V1) -SWC1 F2,0008 (V1) -BNEL V0,A2,70010084 -SWC1 F2,000C (V1) -BEQ R0,R0,70010084 -SWC1 F0,000C (V1) -SWC1 F2,000C (V1) -ADDIU V0,V0,0001 -BNE V0,A3,70010034 -ADDIU V1,V1,0010 -JR RA -NOP - -70010098 -ADDIU SP,SP,FFA8 -SW RA,0014 (SP) -SW A0,0058 (SP) -JAL 70010010 -ADDIU A0,SP,0018 -ADDIU A0,SP,0018 -JAL 7000FF10 -LW A1,0058 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0058 -JR RA -NOP - -700100C8 -LUI AT,4780 -MTC1 AT,F0 -ADDIU SP,SP,FFF0 -OR V0,A1,R0 -ADDIU V1,A1,0020 -OR A2,R0,R0 -OR T0,A0,R0 -ADDIU T4,R0,0004 -ADDIU T3,R0,0002 -LUI T2,FFFF -OR A0,R0,R0 -OR T1,T0,R0 -LW T6,0000 (V1) -LW T9,0000 (V0) -ADDIU A0,A0,0001 -SRL T7,T6,0x10 -ANDI T8,T7,FFFF -AND T5,T9,T2 -OR T6,T8,T5 -SW T6,0004 (SP) -LW T7,0000 (V1) -LW T8,0000 (V0) -LW A1,0004 (SP) -ANDI T9,T7,FFFF -SLL T5,T8,0x10 -MTC1 A1,F18 -AND T6,T5,T2 -OR A3,T9,T6 -CVT.S.W F18,F18 -MTC1 A3,F16 -SW A3,0000 (SP) -ADDIU V0,V0,0004 -ADDIU V1,V1,0004 -CVT.S.W F16,F16 -ADDIU T1,T1,0008 -DIV.S F18,F18,F0 -DIV.S F16,F16,F0 -SWC1 F18,FFF8 (T1) -BNE A0,T3,700100F8 -SWC1 F16,FFFC (T1) -ADDIU A2,A2,0001 -BNE A2,T4,700100F0 -ADDIU T0,T0,0010 -JR RA -ADDIU SP,SP,0010 - -70010180 -LUI V0,8002 -JR RA -LW V0,7734 (V0) ;V0=80027734: - -70010190 10D90 jump for interrupt handler, copied serially -LUI K0,7001 -ADDIU K0,K0,01A0 ;K0=700101A0 -JR K0 -NOP - -700101A0 10DA0 interrupt handler -LUI K0,8007 -ADDIU K0,K0,8E30 -SD AT,0020 (K0) -MFC0 K1,Status/DPC-Clock -SW K1,0118 (K0) -ADDIU AT,R0,FFFC -AND K1,K1,AT -MTC0 K1,Status/DPC-Clock -SD T0,0058 (K0) -SD T1,0060 (K0) -SD T2,0068 (K0) -SW R0,0018 (K0) -MFC0 T0,Cause/DPC-Buf.Busy -OR T0,K0,R0 -LUI K0,8002 -LW K0,7730 (K0) -LD T1,0020 (T0) -SD T1,0020 (K0) -LD T1,0118 (T0) -SD T1,0118 (K0) -LD T1,0058 (T0) -SD T1,0058 (K0) -LD T1,0060 (T0) -SD T1,0060 (K0) -LD T1,0068 (T0) -SD T1,0068 (K0) -LW K1,0118 (K0) -MFLO T0 -SD T0,0108 (K0) -MFHI T0 -ANDI T1,K1,FF00 -SD V0,0028 (K0) -SD V1,0030 (K0) -SD A0,0038 (K0) -SD A1,0040 (K0) -SD A2,0048 (K0) -SD A3,0050 (K0) -SD T3,0070 (K0) -SD T4,0078 (K0) -SD T5,0080 (K0) -SD T6,0088 (K0) -SD T7,0090 (K0) -SD S0,0098 (K0) -SD S1,00A0 (K0) -SD S2,00A8 (K0) -SD S3,00B0 (K0) -SD S4,00B8 (K0) -SD S5,00C0 (K0) -SD S6,00C8 (K0) -SD S7,00D0 (K0) -SD T8,00D8 (K0) -SD T9,00E0 (K0) -SD GP,00E8 (K0) -SD SP,00F0 (K0) -SD S8,00F8 (K0) -SD RA,0100 (K0) -BEQ T1,R0,700102B8 -SD T0,0110 (K0) -//70010288: -LUI T0,8002 -ADDIU T0,T0,698C -LW T0,0000 (T0) -ADDIU AT,R0,FFFF -XOR T0,T0,AT -LUI AT,FFFF -ANDI T0,T0,FF00 -ORI AT,AT,00FF -OR T1,T1,T0 -AND K1,K1,AT -OR K1,K1,T1 -SW K1,0118 (K0) -//700102B8: -LUI T1,A430 -LW T1,000C (T1) -BEQ T1,R0,700102F0 -NOP -//700102C8: -LUI T0,8002 -ADDIU T0,T0,698C -LW T0,0000 (T0) -LW T4,0128 (K0) -ADDIU AT,R0,FFFF -SRL T0,T0,0x10 -XOR T0,T0,AT -ANDI T0,T0,003F -AND T0,T0,T4 -OR T1,T1,T0 -//700102F0: -SW T1,0128 (K0) -MFC0 T0,ExpectPC/DPC-Pipe Busy -SW T0,011C (K0) -LW T0,0018 (K0) -BEQ T0,R0,70010354 -NOP -//70010308: -CFC1 T0,F31 -NOP -SW T0,012C (K0) -SDC1 F0,0130 (K0) -SDC1 F2,0138 (K0) -SDC1 F4,0140 (K0) -SDC1 F6,0148 (K0) -SDC1 F8,0150 (K0) -SDC1 F10,0158 (K0) -SDC1 F12,0160 (K0) -SDC1 F14,0168 (K0) -SDC1 F16,0170 (K0) -SDC1 F18,0178 (K0) -SDC1 F20,0180 (K0) -SDC1 F22,0188 (K0) -SDC1 F24,0190 (K0) -SDC1 F26,0198 (K0) -SDC1 F28,01A0 (K0) -SDC1 F30,01A8 (K0) -//70010354: -MFC0 T0,Cause/DPC-Buf.Busy -SW T0,0120 (K0) -ADDIU T1,R0,0002 -SH T1,0010 (K0) -ANDI T1,T0,007C -ADDIU T2,R0,0024 -BEQ T1,T2,70010630 -NOP -//70010374: -ADDIU T2,R0,002C -BEQ T1,T2,70010778 -NOP -//70010380: -ADDIU T2,R0,0000 -BNE T1,T2,70010694 -NOP -AND S0,K1,T0 -//70010390: -ANDI T1,S0,FF00 -SRL T2,T1,0xC -BNE T2,R0,700103A8 -NOP -//700103A0: -SRL T2,T1,0x8 -ADDI T2,T2,0010 -//700103A8: -LUI AT,8003 -ADDU AT,AT,T2 -LBU T2,9440 (AT) ;T2=80029440+offset: offset for selecting TLB handler for interrupt -LUI AT,8003 -ADDU AT,AT,T2 -LW T2,9460 (AT) ;T2=80029460+offset: p->handler for interrupt -JR T2 -NOP -//700103C8: -ADDIU AT,R0,DFFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//700103D4: -ADDIU AT,R0,BFFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//700103E0: -MFC0 T1,Compare/DPC-Status -MTC0 T1,Compare/DPC-Status -JAL 700106C4 -ADDIU A0,R0,0018 ;A0= entry 3 -LUI AT,FFFF -ORI AT,AT,7FFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010400: -ADDIU AT,R0,F7FF -AND S0,S0,AT -ADDIU T2,R0,0004 -LUI AT,8002 -ADDU AT,AT,T2 -LW T2,7700 (AT) -LUI SP,8006 -ADDIU SP,SP,7DF0 -ADDIU A0,R0,0010 ;A0= entry 2 -BEQ T2,R0,70010444 -ADDIU SP,SP,0FF0 -JALR RA,T2 -NOP -//70010434: -BEQ V0,R0,70010444 -NOP -BEQ R0,R0,70010648 -NOP -//70010444: -JAL 700106C4 -NOP -BEQ R0,R0,70010390 -NOP -//70010454: -LUI T0,8002 -ADDIU T0,T0,698C -LW T0,0000 (T0) -LUI S1,A430 -LW S1,0008 (S1) ;S1= A4300008: MI Interrupt -SRL T0,T0,0x10 -AND S1,S1,T0 -ANDI T1,S1,0001 -BEQ T1,R0,700104C4 -NOP -//7001047C: -LUI T4,A404 -LW T4,0010 (T4) ;T4= A4040010: SP Status -ADDIU T1,R0,0008 -LUI AT,A404 -ANDI T4,T4,0300 -ANDI S1,S1,003E -BEQ T4,R0,700104B4 ;skip if signals 1 or 2 not set -SW T1,0010 (AT) ;clear interrupt -//7001049C: -JAL 700106C4 -ADDIU A0,R0,0020 ;A0= entry 4 -BEQ S1,R0,70010588 -NOP -BEQ R0,R0,700104C4 -NOP -//700104B4: -JAL 700106C4 -ADDIU A0,R0,0058 ;A0= entry B -BEQ S1,R0,70010588 -NOP -//700104C4: -ANDI T1,S1,0008 -BEQ T1,R0,700104E8 -LUI AT,A440 -ANDI S1,S1,0037 -SW R0,0010 (AT) ;0-> A4400010: reset VI Current Line Reg -JAL 700106C4 -ADDIU A0,R0,0038 ;A0= entry 7: VI -BEQ S1,R0,70010588 -NOP -//700104E8: -ANDI T1,S1,0004 -BEQ T1,R0,70010514 -NOP -ADDIU T1,R0,0001 -LUI AT,A450 -ANDI S1,S1,003B -SW T1,000C (AT) ;1-> AI Status -JAL 700106C4 -ADDIU A0,R0,0030 ;A0= entry 6: AI -BEQ S1,R0,70010588 -NOP -//70010514: -ANDI T1,S1,0002 -BEQ T1,R0,70010538 -LUI AT,A480 -ANDI S1,S1,003D -SW R0,0018 (AT) ;reset SI Status -JAL 700106C4 -ADDIU A0,R0,0028 ;A0= entry 5: SI -BEQ S1,R0,70010588 -NOP -//70010538: -ANDI T1,S1,0010 -BEQ T1,R0,70010564 -NOP -ADDIU T1,R0,0002 -LUI AT,A460 -ANDI S1,S1,002F -SW T1,0010 (AT) ;2->A4600010: PI Status DMA flag -JAL 700106C4 -ADDIU A0,R0,0040 ;A0= entry 8: PI -BEQ S1,R0,70010588 -NOP -//70010564: -ANDI T1,S1,0020 -BEQ T1,R0,70010588 -NOP -ADDIU T1,R0,0800 -LUI AT,A430 -ANDI S1,S1,001F -SW T1,0000 (AT) ;clear MIPS DP interrupt -JAL 700106C4 -ADDIU A0,R0,0048 ;A0= entry 9: MI -//70010588: -ADDIU AT,R0,FBFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010594: -LW K1,0118 (K0) -ADDIU AT,R0,EFFF -LUI T1,8002 -AND K1,K1,AT -SW K1,0118 (K0) -ADDIU T1,T1,6988 -LW T2,0000 (T1) -BEQ T2,R0,700105C0 -ADDIU AT,R0,EFFF -BEQ R0,R0,70010648 -AND S0,S0,AT -//700105C0: -ADDIU T2,R0,0001 -SW T2,0000 (T1) -JAL 700106C4 -ADDIU A0,R0,0070 ;A0= entry E -LUI T2,8002 -LW T2,7728 (T2) -ADDIU AT,R0,EFFF -AND S0,S0,AT -LW K1,0118 (T2) -AND K1,K1,AT -BEQ R0,R0,70010648 -SW K1,0118 (T2) -//700105F0: -ADDIU AT,R0,FDFF -AND T0,T0,AT -MTC0 T0,Cause/DPC-Buf.Busy -JAL 700106C4 -ADDIU A0,R0,0008 ;A0= entry 1 -ADDIU AT,R0,FDFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010610: -ADDIU AT,R0,FEFF -AND T0,T0,AT -MTC0 T0,Cause/DPC-Buf.Busy -JAL 700106C4 -ADDIU A0,R0,0000 ;A0= entry 0 -ADDIU AT,R0,FEFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010630: -ADDIU T1,R0,0001 -SH T1,0012 (K0) -JAL 700106C4 -ADDIU A0,R0,0050 ;A0= entry A -BEQ R0,R0,70010648 -NOP -//70010648: -LUI T2,8002 -LW T2,7728 (T2) -LW T1,0004 (K0) -LW T3,0004 (T2) -SLT AT,T1,T3 -BEQ AT,R0,7001067C -NOP -//70010664: -LUI A0,8002 -OR A1,K0,R0 -JAL 700108AC ;insert thread A1 into thread list A0 -ADDIU A0,A0,7728 -J 70010904 ;execute thread -NOP -//7001067C: -LUI T1,8002 -ADDIU T1,T1,7728 -LW T2,0000 (T1) -SW T2,0000 (K0) -J 70010904 ;execute thread -SW K0,0000 (T1) -//70010694: -LUI AT,8002 -SW K0,7734 (AT) -ADDIU T1,R0,0001 -SH T1,0010 (K0) -ADDIU T1,R0,0002 -SH T1,0012 (K0) -MFC0 T2,BadVAddr/DPC-Start -SW T2,0124 (K0) -JAL 700106C4 -ADDIU A0,R0,0060 ;A0= entry C -J 70010904 ;execute thread -NOP - -700106C4 112C4 ; subsection of interrupt handler 700101A0 - accepts: A0=offset to interrupt entry -LUI T2,8006 -ADDIU T2,T2,6A10 -ADDU T2,T2,A0 -LW T1,0000 (T2) ;T1=80066A10+offset: p->data -OR S2,RA,R0 -BEQ T1,R0,70010770 ;return if NULL -NOP -//700106E0: -LW T3,0008 (T1) -LW T4,0010 (T1) -SLT AT,T3,T4 -BEQ AT,R0,70010770 -NOP -//700106F4: -LW T5,000C (T1) -ADDU T5,T5,T3 -DIV T5,T4 -BNE T4,R0,7001070C -NOP -BREAK 00001C00 ;Break: division by zero -//7001070C: -ADDIU AT,R0,FFFF -BNE T4,AT,70010724 -LUI AT,8000 -BNE T5,AT,70010724 -NOP -BREAK 00001800 -//70010724: -LW T4,0014 (T1) -MFHI T5 -SLL T5,T5,0x2 -ADDU T4,T4,T5 -LW T5,0004 (T2) ;T5= entry+4: p->value -ADDIU T2,T3,0001 -SW T5,0000 (T4) -SW T2,0008 (T1) -LW T2,0000 (T1) -LW T3,0000 (T2) -BEQ T3,R0,70010770 -NOP -//70010754: pop and push thread T1 -JAL 700108F4 ;V0= popped thread A0 -OR A0,T1,R0 -OR T2,V0,R0 -LUI A0,8002 -OR A1,T2,R0 -JAL 700108AC ;insert thread A1 into thread list A0 -ADDIU A0,A0,7728 ;A0= 80027728: p->thread list -//70010770: return -JR S2 -NOP -//70010778: -LUI AT,3000 -AND T1,T0,AT -SRL T1,T1,0x1C -ADDIU T2,R0,0001 -BNE T1,T2,70010694 -NOP -//70010790: -LW K1,0118 (K0) -LUI AT,2000 -ADDIU T1,R0,0001 -OR K1,K1,AT -SW T1,0018 (K0) -BEQ R0,R0,7001067C -SW K1,0118 (K0) - -700107AC 113AC update current thread's data with current registers, then insert and execute - accepts: A0=p->thread queue or NULL -LUI A1,8002 -LW A1,7730 (A1) ;A1=80027730: p->cur.thread -MFC0 T0,Status -LW K1,0018 (A1) ;K1= cur.thread+18: True if copying FPU regs -ORI T0,T0,0002 ;T0: COP0 Status | exception flag -SW T0,0118 (A1) ;update cur.thread.Status -SD S0,0098 (A1) -SD S1,00A0 (A1) -SD S2,00A8 (A1) -SD S3,00B0 (A1) -SD S4,00B8 (A1) -SD S5,00C0 (A1) -SD S6,00C8 (A1) -SD S7,00D0 (A1) -SD GP,00E8 (A1) -SD SP,00F0 (A1) -SD S8,00F8 (A1) -SD RA,0100 (A1) -BEQ K1,R0,7001081C ;skip if not copying FPU regs -SW RA,011C (A1) -//700107FC: fill thread with current (important) floats -CFC1 K1,F31 -SDC1 F20,0180 (A1) -SDC1 F22,0188 (A1) -SDC1 F24,0190 (A1) -SDC1 F26,0198 (A1) -SDC1 F28,01A0 (A1) -SDC1 F30,01A8 (A1) -SW K1,012C (A1) -//7001081C: -LW K1,0118 (A1) ;K1=thread.Status -ANDI T1,K1,FF00 -BEQ T1,R0,7001085C ;branch if no interrupts masked -NOP -//7001082C: remask against old interrupts -LUI T0,8002 -ADDIU T0,T0,698C -LW T0,0000 (T0) ;T0=8002698C: prev.Status -ADDIU AT,R0,FFFF -XOR T0,T0,AT ;~T0 -LUI AT,FFFF -ANDI T0,T0,FF00 -ORI AT,AT,00FF -OR T1,T1,T0 ;T1= previous interrupts -AND K1,K1,AT ;K1&=FFFF00FF -OR K1,K1,T1 ;K1|=interupts: new flags, old interrupts -SW K1,0118 (A1) ;update thread.Status -//7001085C: -LUI K1,A430 -LW K1,000C (K1) ;K1=A430000C: MI Interrupt Mask -BEQ K1,R0,70010894 ;branch if none set -NOP -//7001086C: mask against old interrupts -LUI K0,8002 -ADDIU K0,K0,698C -LW K0,0000 (K0) ;K0=8002698C: prev.Status -LW T0,0128 (A1) ;T0=cur.thread.MImask -ADDIU AT,R0,FFFF -SRL K0,K0,0x10 ;K0>>=10: Diagnostic Status bits -XOR K0,K0,AT -ANDI K0,K0,003F ;K0&=3F: mask ~DS against 3F -AND K0,K0,T0 ;K0&=cur.thread.MImask -OR K1,K1,K0 ;K1|=K0: old | new -//70010894: insert thread in queue -BEQ A0,R0,700108A4 -SW K1,0128 (A1) ;update MI Interrupt Mask -JAL 700108AC ;insert thread A1 into thread list A0 -NOP -//700108A4: execute thread -J 70010904 ;switch and execute thread -NOP - -700108AC 114AC insert thread A1 into thread list A0 - accepts: A0=p->thread list, A1=thread entry -LW T8,0000 (A0) ;T8=A0+0: p->tbl1 -LW T7,0004 (A1) ;T7=A1+4: value2 -OR T9,A0,R0 ;T9=A0: p->root -LW T6,0004 (T8) ;T6=tbl1+4: value1 -SLT AT,T6,T7 -BNE AT,R0,700108E0 ;return if value1 < value2 -NOP -//700108C8: find first entry -OR T9,T8,R0 ;T9=p->tbl1 -LW T8,0000 (T8) ;T8=next tbl entry -LW T6,0004 (T8) ;T6=new tbl1 value -SLT AT,T6,T7 -BEQ AT,R0,700108C8 ;loop until value1 < value2 -NOP -//700108E0: return -LW T8,0000 (T9) ;T8=p->next entry in tbl1 -SW T8,0000 (A1) ;T8-> A1+0 -SW A1,0000 (T9) ;A1->tbl1: next entry -JR RA -SW A0,0008 (A1) ;A0->A1+8: previous entry - -700108F4 114F4 V0= pop thread A0 - accepts: A0=p->tbl -LW V0,0000 (A0) ;V0=p->tbl.data -LW T9,0000 (V0) -JR RA -SW T9,0000 (A0) - -70010904 11504 switch and execute threads -//grab the status mask from table to catch stuff and set it back to COP0 Status -LUI A0,8002 -JAL 700108F4 ;V0= popped thread A0 -ADDIU A0,A0,7728 ;A0= 80027728: p->root of table -LUI AT,8002 -SW V0,7730 (AT) ;V0->80027730: set as cur.thread -ADDIU T0,R0,0004 -SH T0,0010 (V0) ;4->tbl+10: index -OR K0,V0,R0 ;K0=V0: tbl -LUI T0,8002 -LW K1,0118 (K0) ;K1=tbl+118 -ADDIU T0,T0,698C -LW T0,0000 (T0) ;T0=8002698C: prev.Status -LUI AT,FFFF -ANDI T1,K1,FF00 ;T1= (tbl+118) & FF00 -ORI AT,AT,00FF ;AT=FFFF00FF -ANDI T0,T0,FF00 ;T0&=FF00 -AND T1,T1,T0 ;T1&=T0: keep only the flags in common -AND K1,K1,AT ;K1&=AT: (tbl+118) & FFFF00FF -OR K1,K1,T1 ;K1|=T1: tbl+118 with conditionally masked flags FF00 -MTC0 K1,Status/DPC-Clock ;set to COP0 Status -//70010954: load new register values from copies saved in thread -LD K1,0108 (K0) ;K1= tbl+108 -LD AT,0020 (K0) ;AT= tbl+20: -LD V0,0028 (K0) ;V0= tbl+28: -MTLO K1 ;move tbl+108 to lo for some reason... -LD K1,0110 (K0) ;K1= tbl+110 -LD V1,0030 (K0) ;V1= tbl+30 -LD A0,0038 (K0) ;A0= tbl+38 -LD A1,0040 (K0) ;A1= tbl+40 -LD A2,0048 (K0) ;A2= tbl+48 -LD A3,0050 (K0) ;A3= tbl+50 -LD T0,0058 (K0) ;T0= tbl+58 -LD T1,0060 (K0) ;T1= tbl+60 -LD T2,0068 (K0) ;T2= tbl+68 -LD T3,0070 (K0) ;T3= tbl+70 -LD T4,0078 (K0) ;T4= tbl+78 -LD T5,0080 (K0) ;T5= tbl+80 -LD T6,0088 (K0) ;T6= tbl+88 -LD T7,0090 (K0) ;T7= tbl+90 -LD S0,0098 (K0) ;S0= tbl+98 -LD S1,00A0 (K0) ;S1= tbl+A0 -LD S2,00A8 (K0) ;S2= tbl+A8 -LD S3,00B0 (K0) ;S3= tbl+B0 -LD S4,00B8 (K0) ;S4= tbl+B8 -LD S5,00C0 (K0) ;S5= tbl+C0 -LD S6,00C8 (K0) ;S6= tbl+C8 -LD S7,00D0 (K0) ;S7= tbl+D0 -LD T8,00D8 (K0) ;T8= tbl+D8 -LD T9,00E0 (K0) ;T9= tbl+E0 -LD GP,00E8 (K0) ;GP= tbl+E8 -MTHI K1 ;move tbl+110 to lo for some reason... -LD SP,00F0 (K0) ;SP= tbl+F0 -LD S8,00F8 (K0) ;S8= tbl+F8 -LD RA,0100 (K0) ;RA= tbl+100 -//700109D8: set exception return -LW K1,011C (K0) ;K1= tbl+11C: 'exception handler', really root function for thread -MTC0 K1,ExpectPC/DPC-Pipe Busy ;set as return from forced exception -LW K1,0018 (K0) ;K1= tbl+18 -BEQ K1,R0,70010A34 ;if not set don't play with the FPU -NOP -//700109EC: set COP1 registers -LW K1,012C (K0) ;K1= tbl+12C: COP1 Status -CTC1 K1,F31 -LDC1 F0,0130 (K0) -LDC1 F2,0138 (K0) -LDC1 F4,0140 (K0) -LDC1 F6,0148 (K0) -LDC1 F8,0150 (K0) -LDC1 F10,0158 (K0) -LDC1 F12,0160 (K0) -LDC1 F14,0168 (K0) -LDC1 F16,0170 (K0) -LDC1 F18,0178 (K0) -LDC1 F20,0180 (K0) -LDC1 F22,0188 (K0) -LDC1 F24,0190 (K0) -LDC1 F26,0198 (K0) -LDC1 F28,01A0 (K0) -LDC1 F30,01A8 (K0) -//70010A34: set MI interrupts -LW K1,0128 (K0) ;K1= tbl+128: mask for upper halfword of register -LUI K0,8002 -ADDIU K0,K0,698C -LW K0,0000 (K0) ;K0=8002698C: prev.Status -SRL K0,K0,0x10 ;K0/=0x10000 -AND K1,K1,K0 ;K1&=K0: Status & mask -SLL K1,K1,0x1 ;K1*=2 -LUI K0,8003 -ADDIU K0,K0,93A0 -ADDU K1,K1,K0 -LHU K1,0000 (K1) ;K1=800293A0 + offset: value from mask table -LUI K0,A430 -ADDIU K0,K0,000C -SW K1,0000 (K0) ;K1->A430000C: set MI interrupt mask -NOP -NOP -NOP -NOP -ERET ;jump to function set earlier - -70010A80 11680 default return address for all threads; call 7001BB60: A0=0 -JAL 7001BB60 ;reinit/remove thread A0 -OR A0,R0,R0 ;A0= NULL - -70010A90 11690 remove thread pointer A1 from thread A0 - accepts: A0=p->thread list, A1=p->thread entry -OR A2,A0,R0 ;A2=A0 -LW A3,0000 (A2) ;A3=A2+0: next entry -ADDIU SP,SP,FFF8 -BEQ A3,R0,70010AC8 ;return if NULL -NOP -//70010AA4: loop until A1 found -BNE A3,A1,70010AB8 ;branch if not entry -NOP -LW T6,0000 (A1) ;T6=A1+0 -BEQ R0,R0,70010AC8 -SW T6,0000 (A2) ;T6->A2+0 -//70010AB8: loop until end of list -OR A2,A3,R0 ;A2=A3: p->next entry -LW A3,0000 (A2) ;A3=A2+0 -BNE A3,R0,70010AA4 -NOP -//70010AC8: return -JR RA -ADDIU SP,SP,0008 - -70010AD0 116D0 set priority of current thread to 2, then update, insert, and execute -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LUI T7,8002 -LW T7,7730 (T7) ;T7=80027730: cur.thread -ADDIU T6,R0,0002 -LUI A0,8002 -OR S0,V0,R0 -ADDIU A0,A0,7728 ;A0=80027728: p->thread queue -JAL 700107AC ;update current thread's data with current registers, then insert and execute -SH T6,0010 (T7) ;cur.thread.index = 2 -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70010B20 -BLEZ A1,70010BA0 -NOP -ADDIU T3,R0,2000 -SLTU AT,A1,T3 -BEQ AT,R0,70010BA8 -NOP -OR T0,A0,R0 -ADDU T1,A0,A1 -SLTU AT,T0,T1 -BEQ AT,R0,70010BA0 -NOP -ANDI T2,T0,000F -BEQ T2,R0,70010B70 -ADDIU T1,T1,FFF0 -SUBU T0,T0,T2 -CACHE 0000 (T0), D, Hit Writeback Invalidate -SLTU AT,T0,T1 -BEQ AT,R0,70010BA0 -NOP -ADDIU T0,T0,0010 -ANDI T2,T1,000F -BEQ T2,R0,70010B90 -NOP -SUBU T1,T1,T2 -CACHE 0010 (T1), D, Hit Writeback Invalidate -SLTU AT,T1,T0 -BNE AT,R0,70010BA0 -NOP -CACHE 0000 (T0), D, Hit Invalidate -SLTU AT,T0,T1 -BNE AT,R0,70010B90 -ADDIU T0,T0,0010 -JR RA -NOP -LUI T0,8000 -ADDU T1,T0,T3 -ADDIU T1,T1,FFF0 -CACHE 0000 (T0), D, Index Writeback Invalidate -SLTU AT,T0,T1 -BNE AT,R0,70010BB4 -ADDIU T0,T0,0010 -JR RA -NOP - -70010BD0 -BLEZ A1,70010C18 -NOP -ADDIU T3,R0,2000 -SLTU AT,A1,T3 -BEQ AT,R0,70010C20 -NOP -OR T0,A0,R0 -ADDU T1,A0,A1 -SLTU AT,T0,T1 -BEQ AT,R0,70010C18 -NOP -ANDI T2,T0,000F -ADDIU T1,T1,FFF0 -SUBU T0,T0,T2 -CACHE 0000 (T0), D, Hit Writeback -SLTU AT,T0,T1 -BNE AT,R0,70010C08 -ADDIU T0,T0,0010 -JR RA -NOP -LUI T0,8000 -ADDU T1,T0,T3 -ADDIU T1,T1,FFF0 -CACHE 0000 (T0), D, Index Writeback Invalidate -SLTU AT,T0,T1 -BNE AT,R0,70010C2C -ADDIU T0,T0,0010 -JR RA -NOP - -70010C50 -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -LW T6,0020 (SP) -SW RA,0014 (SP) -SW A2,0028 (SP) -SW A3,002C (SP) -SW R0,0000 (T6) -LW T7,0020 (SP) -SW R0,0004 (T7) -LW T0,0020 (SP) -LW T9,0034 (SP) -LW T8,0030 (SP) -SW T9,000C (T0) -SW T8,0008 (T0) -LW T2,0028 (SP) -LW T3,002C (SP) -BNE T2,R0,70010CA0 -NOP -BEQ T3,R0,70010CB0 -NOP -LW T1,0020 (SP) -SW T2,0010 (T1) -BEQ R0,R0,70010CC4 -SW T3,0014 (T1) -LW T6,0020 (SP) -LW T4,0030 (SP) -LW T5,0034 (SP) -SW T4,0010 (T6) -SW T5,0014 (T6) -LW T7,0038 (SP) -LW T8,0020 (SP) -SW T7,0018 (T8) -LW T0,0020 (SP) -LW T9,003C (SP) -SW T9,001C (T0) -JAL 700188A8 -LW A0,0020 (SP) -LUI T2,8002 -LW T2,7FD0 (T2) -SW V0,0018 (SP) -SW V1,001C (SP) -LW T1,0020 (SP) -LW T3,0000 (T2) -BNE T3,T1,70010D10 -NOP -LW A0,0018 (SP) -JAL 70018834 ;increment COP0 Count by A1 -LW A1,001C (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0020 -OR V0,R0,R0 -JR RA -NOP - -70010D30 11930 initialize sound buffer entry A0 with buffer A1 and size A2 - accepts: A0=p->entry, A1=p->buffer, A2=buffer size -ADDIU V1,R0,0010 -ANDI T6,A1,000F -SUBU V0,V1,T6 -BEQ V1,V0,70010D4C ;branch if buffer quadword aligned -ADDU T7,A1,V0 -BEQ R0,R0,70010D50 -SW T7,0000 (A0) ;A0+0= A1 quadword-aligned -//70010D4C: -SW A1,0000 (A0) ;A0+0= A1: p->buffer.start -//70010D50: -LW T8,0000 (A0) -SW A2,0008 (A0) ;A0+8= A2: buffer size -SW R0,000C (A0) ;A0+C= 0 -JR RA -SW T8,0004 (A0) ;A0+4= A1: p->buffer.cur - -70010D70 11970 unconditional return -JR RA -NOP - -70010D78 11978 unconditional return -JR RA -NOP - -70010D80 11980 - accepts: A0=, A1=p->soundbank table, A2=(unused), A3=hardware address -LBU T6,0003 (A0) -BNE T6,R0,70010E64 ;return if already processed -NOP -//70010D8C: -LH T7,000E (A0) -ADDIU T1,R0,0001 -SB T1,0003 (A0) ;A0+3= 1: processed -BLEZ T7,70010E64 -OR V0,R0,R0 -OR V1,A0,R0 -ADDIU T2,R0,0001 -//70010DA8: -LW T8,0010 (V1) -ADDU T9,T8,A1 -SW T9,0010 (V1) -LBU T6,000E (T9) -OR A2,T9,R0 -BNEL T6,R0,70010E50 -LH T8,000E (A0) -LW T7,0000 (T9) -SB T1,000E (T9) -ADDU T8,T7,A1 -SW T8,0000 (T9) -LW T9,0004 (T9) -LW T7,0008 (A2) -ADDU T6,T9,A1 -ADDU T8,T7,A1 -SW T6,0004 (A2) -SW T8,0008 (A2) -LBU T9,0009 (T8) -OR T0,T8,R0 -BNEL T9,R0,70010E50 -LH T8,000E (A0) -LW T6,0000 (T8) -LBU A2,0008 (T8) -SB T1,0009 (T8) -ADDU T7,T6,A3 ;T7= hardware + offset: -BNE A2,R0,70010E34 -SW T7,0000 (T8) -LW T8,0010 (T8) -LW A2,000C (T0) -ADDU T9,T8,A1 -BEQ A2,R0,70010E4C -SW T9,0010 (T0) -ADDU T6,A2,A1 -BEQ R0,R0,70010E4C -SW T6,000C (T0) -//70010E34: -BNEL T2,A2,70010E50 -LH T8,000E (A0) -LW A2,000C (T0) -BEQ A2,R0,70010E4C -ADDU T7,A2,A1 -SW T7,000C (T0) -//70010E4C: -LH T8,000E (A0) -ADDIU V0,V0,0001 -ADDIU V1,V1,0004 -SLT AT,V0,T8 -BNEL AT,R0,70010DAC -LW T8,0010 (V1) -//70010E64: return -JR RA -NOP - -70010E6C 11A6C unconditional return -JR RA -NOP - -70010E74 11A74 expand all offsets in soundtable A0, wavebank A1 - accepts: A0=p->"B1" soundtable, A1=hardware address -ADDIU SP,SP,FFD0 -SW RA,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -LH T6,0000 (A0) ;T6=snd.B1.tbl[0:2]: header ID in soundtable -ADDIU AT,R0,4231 -OR S0,A0,R0 ;S0=A0: p->snd.B1.tbl -BNE T6,AT,70010F58 ;return if not "B1" soundbank table -OR S1,A1,R0 ;S1=A1: hardware address -//70010EA4: -LH T7,0002 (A0) ;T7=snd.B1.tbl[2:4]: #banks or samples or something -OR S3,R0,R0 ;S3=0 init. count -OR S2,A0,R0 ;S2=A0: p->snd.B1.tbl -BLEZ T7,70010F58 ;return if invalid #whatevers -ADDIU S4,R0,0001 -LW T8,0004 (S2) ;T8=snd.B1.tbl[4:8]: size -ADDU T9,T8,S0 ;T9=snd.B1.tbl + offset: p-> -BEQ T9,R0,70010F40 ;skip if NULL -SW T9,0004 (S2) ;offset -> pointer -LBU T6,0002 (T9) -OR T5,T9,R0 -BNEL T6,R0,70010F44 ;skip if set -LH T8,0002 (S0) -LW V0,0008 (T9) -SB S4,0002 (T9) ;1-> -OR T4,R0,R0 -BEQ V0,R0,70010EFC ;skip if NULL -ADDU A0,V0,S0 -SW A0,0008 (T9) ;offset -> pointer -OR A1,S0,R0 ;A1=S0: p->snd.B1.tbl -JAL 70010D80 -OR A3,S1,R0 ;A3= hardware address -//70010EFC: -LH T8,0000 (T5) -OR T3,T5,R0 -BLEZL T8,70010F44 -LH T8,0002 (S0) -//70010F0C: -LW T9,000C (T3) -OR A1,S0,R0 ;A1=S0: p->snd.B1.tbl -ADDU A0,T9,S0 -BEQ A0,R0,70010F28 -SW A0,000C (T3) ;offset -> pointer -JAL 70010D80 -OR A3,S1,R0 ;A3= hardware address -//70010F28: -LH T7,0000 (T5) -ADDIU T4,T4,0001 -ADDIU T3,T3,0004 -SLT AT,T4,T7 -BNEL AT,R0,70010F10 -LW T9,000C (T3) -//70010F40: expand all offsets into pointers -LH T8,0002 (S0) -ADDIU S3,S3,0001 -ADDIU S2,S2,0004 ;S2+=4 next entry -SLT AT,S3,T8 -BNEL AT,R0,70010EBC -LW T8,0004 (S2) -//70010F58: return -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -70010F78 11B78 - accepts: A0=p->soundtable subentry of some kind, A1=base pointer -LH T6,0002 (A0) ;T6=A0+2: #entries -OR V0,R0,R0 ;V0=0 init. count -OR V1,A0,R0 -BLEZ T6,70010FB0 ;return if no entries -NOP -//70010F8C: expand each entry -LW T7,0004 (V1) -ADDIU V0,V0,0001 -ADDIU V1,V1,0008 -ADDU T8,T7,A1 -SW T8,FFFC (V1) -LH T9,0002 (A0) -SLT AT,V0,T9 -BNEL AT,R0,70010F90 ;loop for each entry -LW T7,0004 (V1) -//70010FB0: return -JR RA -NOP - -70010FC0 -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -LW T6,002C (A0) -ADDIU AT,R0,0001 -OR A3,A0,R0 -BNEL T6,AT,70011024 -LW RA,0014 (SP) -LW A0,0018 (A0) -ADDIU A1,SP,001C -BEQL A0,R0,70011024 -LW RA,0014 (SP) -JAL 70012B8C -SW A3,0030 (SP) -BEQ V0,R0,70011020 -LW A3,0030 (SP) -SH R0,0020 (SP) -LW T7,0024 (A3) -LW T8,001C (SP) -ADDIU A0,A3,0048 -ADDIU A1,SP,0020 -MULTU T7,T8 -MFLO A2 -JAL 70012EFC -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70011030 -LW V0,0018 (A0) -ADDIU T8,R0,01E8 -BEQL V0,R0,7001105C -SW T8,0024 (A0) -LWC1 F4,0008 (V0) -MUL.S F6,F12,F4 -TRUNC.W.S F8,F6 -MFC1 T7,F8 -JR RA -SW T7,0024 (A0) -//70011058: -SW T8,0024 (A0) -JR RA -NOP - -70011064 11C64 unconditional return -JR RA -NOP - -7001106C -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LBU T6,0008 (A1) -ADDIU AT,R0,00FF -OR S0,R0,R0 -BNE T6,AT,7001122C -OR S3,R0,R0 -LBU T7,0009 (A1) -ADDIU AT,R0,0051 -ADDIU V0,A1,0004 -BNEL T7,AT,70011230 -LW RA,0014 (SP) -LBU T6,0008 (V0) -LBU T8,0007 (V0) -LW S8,0024 (S7) -SLL T7,T6,0x8 -LBU T6,0009 (V0) -SLL T9,T8,0x10 -OR T8,T9,T7 -OR V1,T8,T6 -MTC1 V1,F4 -OR A0,S7,R0 -JAL 70011030 -CVT.S.W F12,F4 -LW S1,0050 (S7) -BEQ S1,R0,70011148 -NOP -ADDIU S4,R0,0015 -LH T7,000C (S1) -LW T9,0008 (S1) -LW S2,0000 (S1) -BNE S4,T7,70011140 -ADDU S0,S0,T9 -JAL 7000EA90 -OR A0,S1,R0 -BEQL S3,R0,70011118 -SW R0,0000 (S1) -OR A0,S1,R0 -JAL 7000EAC0 -OR A1,S3,R0 -BEQ R0,R0,70011120 -NOP -SW R0,0000 (S1) -SW R0,0004 (S1) -OR S3,S1,R0 -BEQ S2,R0,7001113C -OR V1,S0,R0 -LW V0,0008 (S1) -LW T8,0008 (S2) -SUBU S0,S0,V0 -ADDU T6,T8,V0 -SW T6,0008 (S2) -SW V1,0008 (S1) -BNE S2,R0,700110DC -OR S1,S2,R0 -BEQ S3,R0,7001122C -OR S1,S3,R0 -ADDIU S4,S7,0048 -ADDIU S5,S4,0008 -ADDIU S6,R0,FFF8 -LW T9,0008 (S1) -LW T7,0024 (S7) -LW S2,0000 (S1) -DIV T9,S8 -MFLO V0 -ADDIU A0,R0,0001 -BNE S8,R0,70011180 -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE S8,AT,70011198 -LUI AT,8000 -BNE T9,AT,70011198 -NOP -BREAK 00001800 -MULTU T7,V0 -OR S0,S5,R0 -MFLO T8 -SW T8,0008 (S1) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -NOP -BEQ S4,S6,7001121C -OR S3,V0,R0 -LW A0,0000 (S0) -BNEL A0,R0,700111DC -LW V0,0008 (S1) -OR A0,S1,R0 -JAL 7000EAC0 -OR A1,S0,R0 -BEQ R0,R0,7001121C -NOP -LW V0,0008 (S1) -LW V1,0008 (A0) -OR A2,A0,R0 -SLT AT,V0,V1 -BEQ AT,R0,7001120C -SUBU T9,V0,V1 -SUBU T6,V1,V0 -SW T6,0008 (A0) -OR A0,S1,R0 -JAL 7000EAC0 -OR A1,S0,R0 -BEQ R0,R0,7001121C -NOP -SW T9,0008 (S1) -LW S0,0000 (S0) -BNEL S0,R0,700111BC -LW A0,0000 (S0) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -OR A0,S3,R0 -BNE S2,R0,7001115C -OR S1,S2,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7001123C -ADDIU SP,SP,FF48 -SW RA,0024 (SP) -LBU S6,0008 (T0) -LBU S4,0009 (T0) -LBU S1,000A (T0) -ANDI V1,S6,00F0 -ADDIU T7,V1,FF80 -SLTIU AT,T7,0061 -ANDI T6,S6,000F -BEQ AT,R0,70011A54 -OR S6,T6,R0 -SLL T7,T7,0x2 -LUI AT,8003 -ADDU AT,AT,T7 -LW T7,9490 (AT) ;T7=80029490+offset: p->handler -JR T7 -NOP -//70011280: -BEQL S1,R0,70011624 -OR A0,S2,R0 -LW T8,002C (S2) -ADDIU AT,R0,0001 -OR A0,S2,R0 -BNE T8,AT,70011A54 -ANDI A1,S4,00FF -ANDI A2,S1,00FF -ANDI A3,S6,00FF -JAL 7001C360 -SW T0,00BC (SP) -BEQ V0,R0,70011A54 -OR S7,V0,R0 -LW T9,0060 (S2) -SLL S8,S6,0x4 -OR A0,S2,R0 -ADDU T6,T9,S8 -LBU T7,0008 (T6) -SH R0,0076 (SP) -SB R0,0078 (SP) -ANDI A1,S4,00FF -ANDI A2,S1,00FF -ANDI A3,S6,00FF -JAL 7001C2F0 -SH T7,0074 (SP) -BEQ V0,R0,70011A54 -OR S0,V0,R0 -LW A0,0014 (S2) -ADDIU A1,V0,0004 -SW A1,0038 (SP) -JAL 70013258 -ADDIU A2,SP,0074 -SW S7,0020 (S0) -SB R0,0034 (S0) -LW T8,0060 (S2) -ADDIU S5,R0,0002 -ADDU T9,T8,S8 -LBU T6,000B (T9) -SLTI AT,T6,0040 -BNEL AT,R0,70011330 -SB R0,0035 (S0) -BEQ R0,R0,70011330 -SB S5,0035 (S0) -SB R0,0035 (S0) -LW V0,0004 (S7) -LBU T7,0004 (V0) -LB T6,0005 (V0) -SUBU T8,S4,T7 -SLL T9,T8,0x2 -SUBU T9,T9,T8 -SLL T9,T9,0x3 -ADDU T9,T9,T8 -SLL T9,T9,0x2 -ADDU A0,T9,T6 -SLL T7,A0,0x10 -JAL 700137C0 -SRA A0,T7,0x10 -SWC1 F0,0028 (S0) -LW T9,0000 (S7) -LUI AT,42FE -MTC1 AT,F4 -LBU T6,000C (T9) -SB T6,0030 (S0) -LW T8,0000 (S7) -LW T7,001C (S2) -LW T9,0000 (T8) -SB R0,0037 (S0) -ADDU T6,T7,T9 -SW T6,0024 (S0) -LW T8,0060 (S2) -ADDU T7,T8,S8 -LW S1,0000 (T7) -SWC1 F4,0064 (SP) -LBU A2,0004 (S1) -BEQL A2,R0,70011414 -CFC1 T8,F31 -LW V0,0070 (S2) -BEQL V0,R0,70011414 -CFC1 T8,F31 -LBU T9,0006 (S1) -LBU A3,0005 (S1) -ADDIU A0,SP,005C -SW T9,0010 (SP) -LBU T6,0007 (S1) -ADDIU A1,SP,0064 -JALR RA,V0 -SW T6,0014 (SP) -BEQ V0,R0,70011410 -ADDIU T8,R0,0016 -LW T7,005C (SP) -SH T8,008C (SP) -SW S0,0090 (SP) -ADDIU A0,S2,0048 -ADDIU A1,SP,008C -OR A2,V0,R0 -JAL 70012EFC -SW T7,0094 (SP) -LBU T9,0037 (S0) -ORI T6,T9,0001 -SB T6,0037 (S0) -CFC1 T8,F31 -ADDIU T7,R0,0001 -CTC1 T7,F31 -LWC1 F6,0064 (SP) -LUI AT,4F00 -CVT.W.S F8,F6 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BEQL T7,R0,70011484 -MFC1 T7,F8 -MTC1 AT,F8 -ADDIU T7,R0,0001 -SUB.S F8,F6,F8 -CTC1 T7,F31 -NOP -CVT.W.S F8,F8 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BNE T7,R0,70011478 -NOP -MFC1 T7,F8 -LUI AT,8000 -BEQ R0,R0,70011490 -OR T7,T7,AT -BEQ R0,R0,70011490 -ADDIU T7,R0,FFFF -MFC1 T7,F8 -NOP -BLTZ T7,70011478 -NOP -LUI AT,3F80 -MTC1 AT,F10 -SB T7,0036 (S0) -CTC1 T8,F31 -SWC1 F10,0064 (SP) -LBU A2,0008 (S1) -ADDIU S5,S2,0048 -BEQL A2,R0,7001151C -LWC1 F4,0064 (SP) -LW V0,0070 (S2) -BEQL V0,R0,7001151C -LWC1 F4,0064 (SP) -LBU T9,000A (S1) -LBU A3,0009 (S1) -ADDIU A0,SP,005C -SW T9,0010 (SP) -LBU T6,000B (S1) -ADDIU A1,SP,0064 -JALR RA,V0 -SW T6,0014 (SP) -BEQ V0,R0,70011518 -ADDIU T8,R0,0017 -LW T7,005C (SP) -SH T8,008C (SP) -SW S0,0090 (SP) -SB S6,0098 (SP) -OR A0,S5,R0 -ADDIU A1,SP,008C -OR A2,V0,R0 -JAL 70012EFC -SW T7,0094 (SP) -LBU T9,0037 (S0) -ORI T6,T9,0002 -SB T6,0037 (S0) -LWC1 F4,0064 (SP) -LWC1 F8,0028 (S0) -OR A0,S0,R0 -SWC1 F4,002C (S0) -LW T8,0060 (S2) -LWC1 F4,002C (S0) -OR A1,S2,R0 -ADDU V0,T8,S8 -LWC1 F6,000C (V0) -LBU S1,000A (V0) -MUL.S F10,F6,F8 -NOP -MUL.S F20,F10,F4 -JAL 7001C234 -NOP -ANDI S8,V0,00FF -OR A0,S0,R0 -JAL 7001BE14 -OR A1,S2,R0 -LW T7,0000 (S7) -LW A0,0014 (S2) -LW A2,0008 (S7) -LW S3,0000 (T7) -MFC1 A3,F20 -SW S1,0018 (SP) -SW S8,0014 (SP) -SW V0,0010 (SP) -LW A1,0038 (SP) -JAL 7001D5A0 -SW S3,001C (SP) -LW T6,0038 (SP) -ADDIU T9,R0,0006 -SH T9,008C (SP) -SW T6,0090 (SP) -LW T8,0000 (S7) -OR A0,S5,R0 -ADDIU A1,SP,008C -LBU T7,000D (T8) -OR A2,S3,R0 -SB T7,0098 (SP) -LW T9,0000 (S7) -LW T6,0004 (T9) -JAL 70012EFC -SW T6,0094 (SP) -LW V0,00BC (SP) -ADDIU T7,R0,0015 -ORI T9,S6,0080 -LW T8,000C (V0) -ADDIU V0,V0,0004 -BEQL T8,R0,70011A58 -LW RA,0024 (SP) -SH T7,008C (SP) -SB T9,0094 (SP) -SB S4,0095 (SP) -SB R0,0096 (SP) -LW T8,0008 (V0) -LW T6,0024 (S2) -OR A0,S5,R0 -ADDIU A1,SP,008C -MULTU T6,T8 -MFLO S3 -OR A2,S3,R0 -JAL 70012EFC -NOP -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -OR A0,S2,R0 -ANDI A1,S4,00FF -JAL 7001C27C -ANDI A2,S6,00FF -BEQ V0,R0,70011A54 -OR S0,V0,R0 -LBU T7,0035 (V0) -ADDIU S6,R0,0002 -ADDIU T9,R0,0004 -BNE S6,T7,70011654 -OR A0,S2,R0 -BEQ R0,R0,70011A54 -SB T9,0035 (V0) -LW T6,0020 (S0) -ADDIU S8,R0,0003 -SB S8,0035 (S0) -LW T8,0000 (T6) -ADDIU A1,S0,0004 -JAL 7001BE9C -LW A2,0008 (T8) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -OR A0,S2,R0 -ANDI A1,S4,00FF -JAL 7001C27C -ANDI A2,S6,00FF -BEQ V0,R0,70011A54 -OR S0,V0,R0 -SB S1,0033 (V0) -OR A0,V0,R0 -JAL 7001BE14 -OR A1,S2,R0 -SLL S1,V0,0x10 -SRA T7,S1,0x10 -OR S1,T7,R0 -OR A0,S0,R0 -JAL 7001BDF0 -LW A1,001C (S2) -SLL A2,S1,0x10 -SRA T9,A2,0x10 -OR A2,T9,R0 -LW A0,0014 (S2) -ADDIU A1,S0,0004 -JAL 700133A0 -OR A3,V0,R0 -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -LW S0,0064 (S2) -BEQL S0,R0,70011A58 -LW RA,0024 (SP) -OR S3,S6,R0 -LBU T6,0031 (S0) -OR A0,S0,R0 -OR A1,S2,R0 -BNEL S3,T6,70011740 -LW S0,0000 (S0) -JAL 7001BE14 -SB S4,0033 (S0) -SLL S1,V0,0x10 -SRA T8,S1,0x10 -OR S1,T8,R0 -OR A0,S0,R0 -JAL 7001BDF0 -LW A1,001C (S2) -SLL A2,S1,0x10 -SRA T7,A2,0x10 -OR A2,T7,R0 -LW A0,0014 (S2) -ADDIU A1,S0,0004 -JAL 700133A0 -OR A3,V0,R0 -LW S0,0000 (S0) -BNEL S0,R0,700116F0 -LBU T6,0031 (S0) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -ADDIU AT,R0,0007 -BEQ S4,AT,700117E4 -OR V0,S4,R0 -ADDIU AT,R0,000A -BEQ V0,AT,70011788 -ADDIU AT,R0,0010 -BEQ V0,AT,70011874 -ADDIU AT,R0,0040 -BEQ V0,AT,70011888 -ADDIU AT,R0,005B -BEQL V0,AT,7001193C -LW T9,0060 (S2) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -LW T9,0060 (S2) -SLL T6,S6,0x4 -ADDU T8,T9,T6 -SB S1,0007 (T8) -LW S0,0064 (S2) -BEQL S0,R0,70011A58 -LW RA,0024 (SP) -OR S3,S6,R0 -LBU T7,0031 (S0) -OR A0,S0,R0 -BNEL S3,T7,700117D4 -LW S0,0000 (S0) -JAL 7001C234 -OR A1,S2,R0 -LW A0,0014 (S2) -ADDIU A1,S0,0004 -JAL 700134D0 -ANDI A2,V0,00FF -LW S0,0000 (S0) -BNEL S0,R0,700117AC -LBU T7,0031 (S0) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -LW T9,0060 (S2) -SLL T6,S6,0x4 -ADDU T8,T9,T6 -SB S1,0009 (T8) -LW S0,0064 (S2) -BEQL S0,R0,70011A58 -LW RA,0024 (SP) -OR S3,S6,R0 -ADDIU S4,R0,0003 -LBU T7,0031 (S0) -BNEL S3,T7,70011864 -LW S0,0000 (S0) -LBU T9,0034 (S0) -OR A0,S0,R0 -BEQL S4,T9,70011864 -LW S0,0000 (S0) -JAL 7001BE14 -OR A1,S2,R0 -SLL S1,V0,0x10 -SRA T6,S1,0x10 -OR S1,T6,R0 -OR A0,S0,R0 -JAL 7001BDF0 -LW A1,001C (S2) -SLL A2,S1,0x10 -SRA T8,A2,0x10 -OR A2,T8,R0 -LW A0,0014 (S2) -ADDIU A1,S0,0004 -JAL 700133A0 -OR A3,V0,R0 -LW S0,0000 (S0) -BNEL S0,R0,7001180C -LBU T7,0031 (S0) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -LW T7,0060 (S2) -SLL T9,S6,0x4 -ADDU T6,T7,T9 -BEQ R0,R0,70011A54 -SB S1,0008 (T6) -LW T8,0060 (S2) -SLL T7,S6,0x4 -ADDU T9,T8,T7 -SB S1,000B (T9) -LW S0,0064 (S2) -BEQL S0,R0,70011A58 -LW RA,0024 (SP) -OR S3,S6,R0 -ADDIU S6,R0,0002 -ADDIU S8,R0,0003 -ADDIU S7,R0,0004 -ADDIU S5,R0,0002 -ADDIU S4,R0,0003 -LBU T6,0031 (S0) -BNEL S3,T6,70011928 -LW S0,0000 (S0) -LBU V0,0035 (S0) -SLTI AT,S1,0040 -BEQL S4,V0,70011928 -LW S0,0000 (S0) -BNE AT,R0,700118F0 -NOP -BNEL V0,R0,70011928 -LW S0,0000 (S0) -BEQ R0,R0,70011924 -SB S5,0035 (S0) -BNE S6,V0,70011900 -NOP -BEQ R0,R0,70011924 -SB R0,0035 (S0) -BNEL S7,V0,70011928 -LW S0,0000 (S0) -LW T8,0020 (S0) -SB S8,0035 (S0) -OR A0,S2,R0 -LW T7,0000 (T8) -ADDIU A1,S0,0004 -JAL 7001BE9C -LW A2,0008 (T7) -LW S0,0000 (S0) -BNEL S0,R0,700118C0 -LBU T6,0031 (S0) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -LW T9,0060 (S2) -SLL T6,S6,0x4 -ADDU T8,T9,T6 -SB S1,000A (T8) -LW S0,0064 (S2) -BEQL S0,R0,70011A58 -LW RA,0024 (SP) -OR S3,S6,R0 -LBU T7,0031 (S0) -ADDIU A1,S0,0004 -ANDI A2,S1,00FF -BNEL S3,T7,70011978 -LW S0,0000 (S0) -JAL 700135F0 -LW A0,0014 (S2) -LW S0,0000 (S0) -BNEL S0,R0,7001195C -LBU T7,0031 (S0) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -LW V0,0020 (S2) -SLL T6,S4,0x2 -OR A0,S2,R0 -LH T9,0000 (V0) -OR A2,S6,R0 -ADDU T8,V0,T6 -SLT AT,S4,T9 -BEQL AT,R0,70011A58 -LW RA,0024 (SP) -JAL 7001BC60 -LW A1,000C (T8) -BEQ R0,R0,70011A58 -LW RA,0024 (SP) -LW T7,0060 (S2) -SLL S8,S6,0x4 -SLL T8,S1,0x7 -ADDU T9,T7,S8 -LH T6,0004 (T9) -ADDU T7,T8,S4 -ADDIU T9,T7,E000 -MULTU T6,T9 -MFLO A0 -BGEZ A0,700119F0 -SRA T8,A0,0xD -ADDIU AT,A0,1FFF -SRA T8,AT,0xD -JAL 700137C0 -OR A0,T8,R0 -LW T7,0060 (S2) -MOV.S F20,F0 -ADDU T6,T7,S8 -SWC1 F0,000C (T6) -LW S0,0064 (S2) -BEQL S0,R0,70011A58 -LW RA,0024 (SP) -OR S3,S6,R0 -//70011A18: -LBU T9,0031 (S0) -BNEL S3,T9,70011A4C -LW S0,0000 (S0) -LWC1 F6,0028 (S0) -LWC1 F10,002C (S0) -LW A0,0014 (S2) -MUL.S F8,F6,F20 -ADDIU A1,S0,0004 -MUL.S F4,F8,F10 -MFC1 A2,F4 -JAL 70013560 -NOP -//70011A48: -LW S0,0000 (S0) -BNEL S0,R0,70011A1C -LBU T9,0031 (S0) -//70011A54: return -LW RA,0024 (SP) -ADDIU SP,SP,00B8 -JR RA -NOP - -70011A64 12664 unconditional return -JR RA -NOP - -70011A6C -ADDIU SP,SP,FF60 -SW S5,0034 (SP) -SW S2,0028 (SP) -ADDIU T6,A0,0038 -OR S2,A0,R0 -SW RA,0044 (SP) -SW S8,0040 (SP) -SW S7,003C (SP) -SW S6,0038 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -SDC1 F20,0018 (SP) -SW T6,0050 (SP) -ADDIU S5,A0,0048 -LHU T7,0038 (S2) -SLTIU AT,T7,0018 -BEQ AT,R0,7001202C -SLL T7,T7,0x2 -LUI AT,8003 -ADDU AT,AT,T7 -LW T7,9614 (AT) ;T7=80029614+offset: p->handler -JR T7 -NOP -LW A0,0018 (S2) -BEQL A0,R0,70012030 -OR A0,S5,R0 -JAL 700124A4 -ADDIU A1,SP,0058 -LH T8,0058 (SP) -ADDIU T9,T8,FFFF -SLTIU AT,T9,0014 -BEQ AT,R0,7001202C -SLL T9,T9,0x2 -LUI AT,8003 -ADDU AT,AT,T9 -LW T9,9674 (AT) ;T9=80029674+offset: -JR T9 -NOP -ADDIU T0,SP,0058 -SW S2,00A0 (SP) -JAL 7001123C -SW S5,004C (SP) -LW S2,00A0 (SP) -LW S5,004C (SP) -JAL 70010FC0 -OR A0,S2,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -OR S7,S2,R0 -ADDIU A1,SP,0058 -SW S2,00A0 (SP) -JAL 7001106C -SW S5,004C (SP) -LW S2,00A0 (SP) -LW S5,004C (SP) -JAL 70010FC0 -OR A0,S2,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -ADDIU T6,R0,0002 -SW T6,002C (S2) -ADDIU T7,R0,0010 -LUI A2,7FFF -SH T7,0058 (SP) -ORI A2,A2,FFFF -OR A0,S5,R0 -JAL 70012EFC -ADDIU A1,SP,0058 -BEQ R0,R0,70012030 -OR A0,S5,R0 -JAL 70010FC0 -OR A0,S2,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -ADDIU T8,R0,0009 -SH T8,008C (SP) -LW A2,005C (S2) -OR A0,S5,R0 -JAL 70012EFC -ADDIU A1,SP,008C -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW S0,003C (S2) -LW A0,0014 (S2) -JAL 70013690 -OR A1,S0,R0 -LW A0,0014 (S2) -JAL 70013710 -OR A1,S0,R0 -LW S1,0010 (S0) -OR A0,S2,R0 -LBU T9,0037 (S1) -BEQL T9,R0,70011BF8 -OR A0,S2,R0 -JAL 7001D2A0 -OR A1,S1,R0 -OR A0,S2,R0 -JAL 7001C070 -OR A1,S0,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW S0,003C (S2) -ADDIU T7,R0,0001 -LW S1,0010 (S0) -LBU T6,0034 (S1) -BNEL T6,R0,70011C28 -LW S3,0040 (S2) -SB T7,0034 (S1) -LW S3,0040 (S2) -LW T8,001C (S2) -OR A0,S1,R0 -OR A1,S2,R0 -ADDU T9,T8,S3 -SW T9,0024 (S1) -LBU T6,0044 (S2) -JAL 7001BE14 -SB T6,0030 (S1) -SLL A2,V0,0x10 -SRA T7,A2,0x10 -OR A2,T7,R0 -LW A0,0014 (S2) -OR A1,S0,R0 -JAL 700133A0 -OR A3,S3,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW T9,0074 (S2) -LW S4,0040 (S2) -LW S1,003C (S2) -ADDIU A1,SP,0078 -JALR RA,T9 -OR A0,S4,R0 -CFC1 T8,F31 -ADDIU T6,R0,0001 -CTC1 T6,F31 -LWC1 F4,0078 (SP) -OR S3,V0,R0 -LUI AT,4F00 -CVT.W.S F6,F4 -OR A0,S1,R0 -OR A1,S2,R0 -CFC1 T6,F31 -NOP -ANDI T6,T6,0078 -BEQL T6,R0,70011D04 -MFC1 T6,F6 -MTC1 AT,F6 -ADDIU T6,R0,0001 -SUB.S F6,F4,F6 -CTC1 T6,F31 -NOP -CVT.W.S F6,F6 -CFC1 T6,F31 -NOP -ANDI T6,T6,0078 -BNE T6,R0,70011CF8 -NOP -MFC1 T6,F6 -LUI AT,8000 -BEQ R0,R0,70011D10 -OR T6,T6,AT -BEQ R0,R0,70011D10 -ADDIU T6,R0,FFFF -MFC1 T6,F6 -NOP -BLTZ T6,70011CF8 -NOP -CTC1 T8,F31 -JAL 7001BE14 -SB T6,0036 (S1) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -OR S0,T7,R0 -OR A0,S1,R0 -JAL 7001BDF0 -LW A1,001C (S2) -SLL A2,S0,0x10 -SRA T9,A2,0x10 -OR A2,T9,R0 -LW A0,0014 (S2) -ADDIU A1,S1,0004 -JAL 700133A0 -OR A3,V0,R0 -ADDIU T8,R0,0016 -SH T8,008C (SP) -SW S1,0090 (SP) -SW S4,0094 (SP) -OR A0,S5,R0 -ADDIU A1,SP,008C -JAL 70012EFC -OR A2,S3,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW T9,0074 (S2) -LW S4,0040 (S2) -LW S1,003C (S2) -LBU S0,0044 (S2) -ADDIU A1,SP,0078 -JALR RA,T9 -OR A0,S4,R0 -LWC1 F8,0078 (SP) -LWC1 F4,0028 (S1) -SLL T7,S0,0x4 -SWC1 F8,002C (S1) -LWC1 F6,002C (S1) -LW T6,0060 (S2) -OR S3,V0,R0 -MUL.S F8,F4,F6 -ADDU T8,T6,T7 -LWC1 F10,000C (T8) -LW A0,0014 (S2) -ADDIU A1,S1,0004 -MUL.S F4,F10,F8 -MFC1 A2,F4 -JAL 70013560 -NOP -ADDIU T9,R0,0017 -SH T9,008C (SP) -SW S1,0090 (SP) -SW S4,0094 (SP) -SB S0,0098 (SP) -OR A0,S5,R0 -ADDIU A1,SP,008C -JAL 70012EFC -OR A2,S3,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW T0,0050 (SP) -SW S2,00A0 (SP) -JAL 7001123C -SW S5,004C (SP) -LW S2,00A0 (SP) -BEQ R0,R0,7001202C -LW S5,004C (SP) -OR S7,S2,R0 -LW A1,0050 (SP) -SW S2,00A0 (SP) -JAL 7001106C -SW S5,004C (SP) -LW S2,00A0 (SP) -BEQ R0,R0,7001202C -LW S5,004C (SP) -LW S1,0064 (S2) -LH T6,003C (S2) -BEQ S1,R0,7001202C -SH T6,0032 (S2) -OR A0,S1,R0 -JAL 7001BE14 -OR A1,S2,R0 -SLL S0,V0,0x10 -SRA T7,S0,0x10 -OR S0,T7,R0 -OR A0,S1,R0 -JAL 7001BDF0 -LW A1,001C (S2) -SLL A2,S0,0x10 -SRA T8,A2,0x10 -OR A2,T8,R0 -LW A0,0014 (S2) -ADDIU A1,S1,0004 -JAL 700133A0 -OR A3,V0,R0 -LW S1,0000 (S1) -BNEL S1,R0,70011E50 -OR A0,S1,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW T9,002C (S2) -ADDIU AT,R0,0001 -ADDIU T6,R0,0001 -BEQ T9,AT,7001202C -OR A0,S2,R0 -JAL 70010FC0 -SW T6,002C (S2) -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW T7,002C (S2) -ADDIU AT,R0,0002 -BNEL T7,AT,70012030 -OR A0,S5,R0 -LW S1,0064 (S2) -BEQ S1,R0,70011F28 -ADDIU S0,S1,0004 -OR A1,S0,R0 -JAL 70013690 -LW A0,0014 (S2) -LW A0,0014 (S2) -JAL 70013710 -OR A1,S0,R0 -LBU T8,0037 (S1) -OR A0,S2,R0 -BEQL T8,R0,70011F14 -OR A0,S2,R0 -JAL 7001D2A0 -OR A1,S1,R0 -OR A0,S2,R0 -JAL 7001C070 -OR A1,S0,R0 -LW S1,0064 (S2) -BNEL S1,R0,70011EE0 -ADDIU S0,S1,0004 -BEQ R0,R0,7001202C -SW R0,002C (S2) -LW T9,002C (S2) -ADDIU AT,R0,0001 -OR A0,S5,R0 -BNEL T9,AT,70012030 -OR A0,S5,R0 -JAL 70012DE0 -OR A1,R0,R0 -OR A0,S5,R0 -JAL 70012DE0 -ADDIU A1,R0,0015 -OR A0,S5,R0 -JAL 70012DE0 -ADDIU A1,R0,0002 -LW S1,0064 (S2) -BEQ S1,R0,70011FA0 -ADDIU S0,S1,0004 -OR A1,S0,R0 -OR A0,S2,R0 -JAL 7001BFC8 -ORI A2,R0,C350 -BEQ V0,R0,70011F94 -OR A0,S2,R0 -OR A1,S0,R0 -JAL 7001BE9C -ORI A2,R0,C350 -LW S1,0000 (S1) -BNEL S1,R0,70011F70 -ADDIU S0,S1,0004 -ADDIU T6,R0,0002 -SW T6,002C (S2) -ADDIU T7,R0,0010 -LUI A2,7FFF -SH T7,008C (SP) -ORI A2,A2,FFFF -OR A0,S5,R0 -JAL 70012EFC -ADDIU A1,SP,008C -BEQ R0,R0,70012030 -OR A0,S5,R0 -LBU S0,003C (S2) -LW T9,0060 (S2) -LBU T8,003D (S2) -SLL T6,S0,0x4 -ADDU T7,T9,T6 -BEQ R0,R0,7001202C -SB T8,0008 (T7) -LW T9,003C (S2) -LUI AT,8003 -OR A0,S2,R0 -SW T9,0018 (S2) -JAL 70011030 -LWC1 F12,96C4 (AT) -LW A1,0020 (S2) -BEQL A1,R0,70012030 -OR A0,S5,R0 -JAL 7001BD34 -OR A0,S2,R0 -BEQ R0,R0,70012030 -OR A0,S5,R0 -LW A1,003C (S2) -OR A0,S2,R0 -JAL 7001BD34 -SW A1,0020 (S2) -//7001202C: -OR A0,S5,R0 -JAL 70013020 -LW A1,0050 (SP) -BEQ V0,R0,70011AAC -SW V0,0028 (S2) -//70012040: -LW T6,001C (S2) -ADDU T8,T6,V0 -SW T8,001C (S2) -//7001204C: return -LW RA,0044 (SP) -LW S8,0040 (SP) -LW S7,003C (SP) -LW S6,0038 (SP) -LW S5,0034 (SP) -LW S4,0030 (SP) -LW S3,002C (SP) -LW S2,0028 (SP) -LW S1,0024 (SP) -LW S0,0020 (SP) -LDC1 F20,0018 (SP) -JR RA -ADDIU SP,SP,00A0 - -70012080 - accepts: A0=p->music.ctrl, A1=p->arguments -ADDIU SP,SP,FFC0 -SW RA,0024 (SP) -SW S1,0020 (SP) -SW S0,001C (SP) -LW A2,000C (A1) -SW R0,0020 (A0) -SW R0,0018 (A0) -LUI T6,8002 -LW T6,76E0 (T6) -ADDIU T7,R0,00FF -ADDIU T8,R0,01E8 -ADDIU T9,R0,7FFF -ADDIU T0,R0,3E80 -SH T7,0030 (A0) -SW T8,0024 (A0) -SW R0,0028 (A0) -SW R0,002C (A0) -SH T9,0032 (A0) -SW T0,005C (A0) -SW R0,001C (A0) -SW T6,0014 (A0) -LW T1,0010 (A1) -ADDIU T4,R0,0009 -OR S1,A1,R0 -SW T1,0070 (A0) -LW T2,0014 (A1) -OR S0,A0,R0 -ADDIU T6,R0,0010 -SW T2,0074 (A0) -LW T3,0018 (A1) -SH T4,0038 (A0) -SW T3,0078 (A0) -LBU T5,0008 (A1) -OR A1,R0,R0 -SB T5,0034 (A0) -LBU A3,0008 (S1) -SW T6,0010 (SP) ;SP+10= 10 bytes -OR A0,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW A2,002C (SP) -SW V0,0060 (S0) -JAL 7001D3A4 -OR A0,S0,R0 -LW A3,0000 (S1) -ADDIU T7,R0,0038 -SW T7,0010 (SP) ;SP+10= 38 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -LW A2,002C (SP) -SW R0,006C (S0) -LW T8,0000 (S1) -OR A0,R0,R0 -OR A1,R0,R0 -BLEZ T8,70012188 -ADDIU T1,R0,001C -OR V1,V0,R0 -LW T9,006C (S0) -ADDIU A0,A0,0001 -SW T9,0000 (V1) -SW V1,006C (S0) -LW T0,0000 (S1) -ADDIU V1,V1,0038 -SLT AT,A0,T0 -BNEL AT,R0,70012168 -LW T9,006C (S0) -SW R0,0064 (S0) -SW R0,0068 (S0) -LW A3,0004 (S1) -SW T1,0010 (SP) ;SP+10= 1C bytes -LW A2,002C (SP) -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A0,R0,R0 -ADDIU A0,S0,0048 -OR A1,V0,R0 -JAL 700130AC -LW A2,0004 (S1) -LUI T2,7001 -ADDIU T2,T2,1A6C -SW R0,0000 (S0) -SW T2,0008 (S0) -SW S0,0004 (S0) -LUI A0,8002 -LW A0,76E0 (A0) -JAL 70013120 -OR A1,S0,R0 -LW RA,0024 (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -JR RA -ADDIU SP,SP,0040 - -700121F0 - accepts: A0=p->music controller, A1= -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -ADDIU T6,R0,000E -SW A1,001C (SP) ;buffer+4= A1 f/caller -SH T6,0018 (SP) ;buffer+0= 0xE -ADDIU A1,SP,0018 ;A1=SP+18: p->argument buffer -ADDIU A0,A0,0048 -JAL 70012EFC -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70012230 12E30 V0= TRUE if music playing - accepts: A0=p->music controller -JR RA -LW V0,002C (A0) ;V0=music controller+2C - -70012240 -LW T6,0004 (A0) -OR A2,A0,R0 -OR T0,A0,R0 -SW T6,0000 (A1) -LW T7,000C (A0) -OR V0,R0,R0 -OR V1,A1,R0 -SW T7,0004 (A1) -LW T8,0010 (A0) -ADDIU A0,R0,0010 -OR A3,A1,R0 -SW T8,0008 (A1) -LW T9,0018 (A2) -ADDIU V0,V0,0002 -ADDIU V1,V1,0008 -SW T9,0004 (V1) -LW T1,0058 (A2) -ADDIU A2,A2,0008 -ADDIU A3,A3,0002 -SW T1,0044 (V1) -LBU T2,0098 (T0) -ADDIU T0,T0,0002 -SB T2,008A (A3) -LBU T3,00A6 (T0) -SB T3,009A (A3) -LW T4,00B0 (A2) -SW T4,00A4 (V1) -LW T5,0014 (A2) -SW T5,0008 (V1) -LW T6,0054 (A2) -SW T6,0048 (V1) -LBU T7,0097 (T0) -SB T7,008B (A3) -LBU T8,00A7 (T0) -SB T8,009B (A3) -LW T9,00B4 (A2) -BNE V0,A0,70012270 -SW T9,00A8 (V1) -JR RA -NOP - -700122E0 -LW T6,0000 (A1) -OR V1,A0,R0 -OR A3,A0,R0 -SW T6,0004 (A0) -LW T7,0004 (A1) -OR V0,R0,R0 -OR A2,A1,R0 -SW T7,000C (A0) -LW T8,0008 (A1) -OR T0,A1,R0 -SW T8,0010 (A0) -ADDIU A0,R0,0010 -LW T9,000C (A2) -ADDIU V0,V0,0002 -ADDIU V1,V1,0008 -SW T9,0010 (V1) -LW T1,004C (A2) -ADDIU A2,A2,0008 -ADDIU A3,A3,0002 -SW T1,0050 (V1) -LBU T2,008C (T0) -ADDIU T0,T0,0002 -SB T2,0096 (A3) -LBU T3,009A (T0) -SB T3,00A6 (A3) -LW T4,00A4 (A2) -SW T4,00B0 (V1) -LW T5,0008 (A2) -SW T5,0014 (V1) -LW T6,0048 (A2) -SW T6,0054 (V1) -LBU T7,008B (T0) -SB T7,0097 (A3) -LBU T8,009B (T0) -SB T8,00A7 (A3) -LW T9,00A8 (A2) -BNE V0,A0,70012310 -SW T9,00B4 (V1) -JR RA -NOP - -70012380 -ADDU V0,A0,A1 -LBU T6,0098 (V0) -SLL T7,A1,0x2 -ADDU A2,A0,T7 -BEQL T6,R0,700123C8 -LW A3,0018 (A2) -SLL T7,A1,0x2 -ADDU A2,A0,T7 -LW A3,0058 (A2) -LBU V1,0000 (A3) -ADDIU T8,A3,0001 -SW T8,0058 (A2) -LBU T9,0098 (V0) -ADDIU T6,T9,FFFF -SB T6,0098 (V0) -JR RA -OR V0,V1,R0 -//700123C4: -LW A3,0018 (A2) -ADDIU T0,R0,00FE -LBU V1,0000 (A3) -ADDIU T8,A3,0001 -SW T8,0018 (A2) -BNE T0,V1,7001243C -NOP -LBU A0,0000 (T8) -ADDIU T9,T8,0001 -SW T9,0018 (A2) -BEQ T0,A0,7001243C -ADDIU T6,T9,0001 -LBU V1,0000 (T9) -SW T6,0018 (A2) -LBU A1,0000 (T6) -ADDIU T7,T6,0001 -SLL T9,A0,0x8 -SW T7,0018 (A2) -ADDU T6,T9,V1 -SUBU T7,T7,T6 -ADDIU T9,T7,FFFC -SW T9,0058 (A2) -SB A1,0098 (V0) -LW A3,0058 (A2) -LBU V1,0000 (A3) -ADDIU T8,A3,0001 -SW T8,0058 (A2) -LBU T6,0098 (V0) -ADDIU T7,T6,FFFF -SB T7,0098 (V0) -JR RA -OR V0,V1,R0 - -70012444 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -OR A0,T2,R0 -JAL 70012380 -OR A1,T3,R0 -ANDI T6,V0,0080 -BEQ T6,R0,70012488 -OR T1,V0,R0 -ANDI T1,V0,007F -OR A0,T2,R0 -JAL 70012380 -OR A1,T3,R0 -SLL T7,T1,0x7 -ANDI T8,V0,007F -ANDI T9,V0,0080 -BNE T9,R0,70012468 -ADDU T1,T7,T8 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,T1,R0 -JR RA -NOP - -7001249C 1309C unconditional return -JR RA -NOP - -700124A4 -ADDIU SP,SP,FFD0 -SW S0,0018 (SP) -OR S0,A1,R0 -SW RA,001C (SP) -OR T4,A0,R0 -ADDIU T1,R0,FFFF -LW A2,0010 (A0) -ADDIU A1,R0,0010 -LW T3,0024 (SP) -OR V0,R0,R0 -LW T6,0004 (T4) -SRLV T7,T6,V0 -ANDI T8,T7,0001 -BEQL T8,R0,7001251C -ADDIU V0,V0,0001 -LW T6,0014 (T4) -SLL T9,V0,0x2 -ADDU V1,T4,T9 -BEQL T6,R0,70012504 -LW A0,00B8 (V1) -LW T7,00B8 (V1) -SUBU T8,T7,A2 -SW T8,00B8 (V1) -LW A0,00B8 (V1) -SLTU AT,A0,T1 -BEQL AT,R0,7001251C -ADDIU V0,V0,0001 -OR T1,A0,R0 -OR T3,V0,R0 -ADDIU V0,V0,0001 -BNEL V0,A1,700124D0 -LW T6,0004 (T4) -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -ADDIU AT,R0,00FF -ANDI T2,V0,00FF -BNE V0,AT,700126A4 -OR V1,V0,R0 -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -ADDIU AT,R0,0051 -ANDI A2,V0,00FF -BNE V0,AT,700125A8 -OR V1,V0,R0 -ADDIU T9,R0,0003 -SH T9,0000 (S0) -SB T2,0008 (S0) -SB A2,0009 (S0) -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -SB V0,000B (S0) -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -SB V0,000C (S0) -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -SB V0,000D (S0) -ADDU T6,T4,T3 -BEQ R0,R0,70012740 -SB R0,00A8 (T6) -ADDIU AT,R0,002F -BNEL V1,AT,700125E8 -ADDIU AT,R0,002E -LW T7,0004 (T4) -ADDIU T8,R0,0001 -SLLV T9,T8,T3 -XOR T6,T7,T9 -BEQ T6,R0,700125D8 -SW T6,0004 (T4) -ADDIU T7,R0,0012 -BEQ R0,R0,70012740 -SH T7,0000 (S0) -ADDIU T9,R0,0004 -BEQ R0,R0,70012740 -SH T9,0000 (S0) -ADDIU AT,R0,002E -BNE V1,AT,70012618 -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -ADDU T6,T4,T3 -SB R0,00A8 (T6) -ADDIU T8,R0,0013 -BEQ R0,R0,70012740 -SH T8,0000 (S0) -ADDIU AT,R0,002D -BNE V1,AT,70012740 -SLL T7,T3,0x2 -ADDU T5,T4,T7 -LW V0,0018 (T5) -ADDIU AT,R0,00FF -LBU A0,0001 (V0) -ADDIU V0,V0,0001 -ADDIU T9,V0,0005 -BNE A0,R0,70012650 -LBU A1,FFFF (V0) -SB A1,0000 (V0) -BEQ R0,R0,70012690 -SW T9,0018 (T5) -BEQ A0,AT,7001265C -ADDIU T6,A0,FFFF -SB T6,0000 (V0) -LBU T7,0002 (V0) -LBU V1,0001 (V0) -LBU T6,0003 (V0) -SLL T9,T7,0x10 -SLL T8,V1,0x18 -LBU T7,0004 (V0) -ADDU V1,T8,T9 -SLL T8,T6,0x8 -ADDU V1,V1,T8 -ADDIU V0,V0,0005 -ADDU V1,V1,T7 -SUBU T9,V0,V1 -SW T9,0018 (T5) -ADDU T6,T4,T3 -SB R0,00A8 (T6) -ADDIU T8,R0,0014 -BEQ R0,R0,70012740 -SH T8,0000 (S0) -ADDIU T7,R0,0001 -ANDI T9,V1,0080 -BEQ T9,R0,700126D4 -SH T7,0000 (S0) -SB T2,0008 (S0) -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -SB V0,0009 (S0) -ADDU T6,T4,T3 -BEQ R0,R0,700126E4 -SB T2,00A8 (T6) -ADDU T8,T4,T3 -LBU T7,00A8 (T8) -SB V0,0009 (S0) -SB T7,0008 (S0) -LBU V0,0008 (S0) -ADDIU AT,R0,00C0 -ANDI T9,V0,00F0 -BEQ T9,AT,7001273C -ADDIU AT,R0,00D0 -BEQ T9,AT,7001273C -OR A0,T4,R0 -JAL 70012380 -OR A1,T3,R0 -LBU T6,0008 (S0) -ADDIU AT,R0,0090 -SB V0,000A (S0) -ANDI T8,T6,00F0 -BNE T8,AT,70012740 -OR T2,T4,R0 -SW T1,0028 (SP) -JAL 70012444 -SW T3,0024 (SP) -LW T1,0028 (SP) -LW T3,0024 (SP) -BEQ R0,R0,70012740 -SW V0,000C (S0) -SB R0,000A (S0) -SW T1,0004 (S0) -LW T7,000C (T4) -SW T1,0010 (T4) -ADDIU AT,R0,0012 -ADDU T9,T7,T1 -SW T9,000C (T4) -LH T6,0000 (S0) -OR T2,T4,R0 -SLL T8,T3,0x2 -BEQL T6,AT,70012784 -ADDIU T6,R0,0001 -JAL 70012444 -ADDU T5,T4,T8 -LW T7,00B8 (T5) -ADDU T9,T7,V0 -SW T9,00B8 (T5) -ADDIU T6,R0,0001 -SW T6,0014 (T4) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7001279C -ADDIU SP,SP,FFD0 -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW RA,002C (SP) -ADDIU T6,R0,0001 -OR S0,A0,R0 -OR S4,A1,R0 -SW A1,0000 (A0) -SW R0,0004 (A0) -SW R0,0010 (A0) -SW R0,000C (A0) -SW T6,0014 (A0) -OR S1,A0,R0 -OR S2,R0,R0 -ADDIU S3,R0,0010 -OR T5,R0,R0 -OR T4,A0,R0 -SB R0,00A8 (S1) -SW R0,0058 (T4) -SB R0,0098 (S1) -LW T7,0000 (S0) -ADDIU T6,R0,0001 -ADDU T8,T7,S2 -LW V0,0000 (T8) -SLLV T7,T6,T5 -BEQ V0,R0,70012838 -ADDU T6,S4,V0 -LW T9,0004 (S0) -OR T2,S0,R0 -OR T3,T5,R0 -OR T8,T9,T7 -SW T8,0004 (S0) -JAL 70012444 -SW T6,0018 (T4) -BEQ R0,R0,7001283C -SW V0,00B8 (T4) -SW R0,0018 (T4) -ADDIU T5,T5,0001 -ADDIU S1,S1,0001 -ADDIU S2,S2,0004 -BNE T5,S3,700127EC -ADDIU T4,T4,0004 -LW T9,0000 (S0) -LUI AT,3FF0 -MTC1 AT,F5 -LW T7,0040 (T9) -MTC1 R0,F4 -LUI AT,4F80 -MTC1 T7,F6 -BGEZ T7,70012880 -CVT.S.W F8,F6 -MTC1 AT,F10 -NOP -ADD.S F8,F8,F10 -CVT.D.S F6,F8 -DIV.D F10,F4,F6 -CVT.S.D F8,F10 -SWC1 F8,0008 (S0) -LW RA,002C (SP) -LW S4,0028 (SP) -LW S3,0024 (SP) -LW S2,0020 (SP) -LW S1,001C (SP) -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0030 - -700128B0 -ADDIU SP,SP,FEB0 -SW S3,0020 (SP) -SW S1,0018 (SP) -OR S1,A1,R0 -ADDIU S3,SP,0048 -SW RA,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S2,001C (SP) -SW S0,0014 (SP) -OR A3,A0,R0 -OR S2,A2,R0 -LW A1,0000 (A3) -JAL 7001279C -OR A0,S3,R0 -ADDIU S5,R0,0004 -ADDIU S4,SP,0140 -ADDIU S0,SP,0058 -LW T6,004C (SP) -ADDIU A0,SP,0048 -OR V1,A0,R0 -SW T6,0000 (S1) -LW T7,0054 (SP) -OR V0,S1,R0 -OR A1,S1,R0 -SW T7,0004 (S1) -LW T8,0058 (SP) -SW T8,0008 (S1) -LW T0,0018 (V1) -ADDIU A0,A0,0004 -ADDIU V0,V0,0010 -SW T0,FFFC (V0) -LW T1,0058 (V1) -ADDIU V1,V1,0010 -ADDIU A1,A1,0004 -SW T1,003C (V0) -LBU T2,0094 (A0) -SB T2,0088 (A1) -LBU T3,00A4 (A0) -SB T3,0098 (A1) -LW T4,00A8 (V1) -SW T4,009C (V0) -LW T5,000C (V1) -SW T5,0000 (V0) -LW T6,004C (V1) -SW T6,0040 (V0) -LBU T7,0095 (A0) -SB T7,0089 (A1) -LBU T8,00A5 (A0) -SB T8,0099 (A1) -LW T9,00AC (V1) -SW T9,00A0 (V0) -LW T0,0010 (V1) -SW T0,0004 (V0) -LW T1,0050 (V1) -SW T1,0044 (V0) -LBU T2,0096 (A0) -SB T2,008A (A1) -LBU T3,00A6 (A0) -SB T3,009A (A1) -LW T4,00B0 (V1) -SW T4,00A4 (V0) -LW T5,0014 (V1) -SW T5,0008 (V0) -LW T6,0054 (V1) -SW T6,0048 (V0) -LBU T7,0097 (A0) -SB T7,008B (A1) -LBU T8,00A7 (A0) -SB T8,009B (A1) -LW T9,00B4 (V1) -BNE A0,S0,70012920 -SW T9,00A8 (V0) -OR A0,S3,R0 -JAL 700124A4 -OR A1,S4,R0 -LH T0,0140 (SP) -LW T1,0054 (SP) -BEQ T0,S5,700129F8 -SLTU AT,T1,S2 -BNEL AT,R0,700128FC -LW T6,004C (SP) -LW RA,002C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0150 - -70012A1C -JR RA -LW V0,000C (A0) - -70012A24 -LW T6,0000 (A0) -MTC1 A1,F12 -LUI AT,8003 -LW T7,0040 (T6) -LDC1 F6,96D0 (AT) -CVT.D.S F4,F12 -MTC1 T7,F10 -MUL.D F8,F4,F6 -LUI AT,41F0 -BGEZ T7,70012A60 -CVT.D.W F16,F10 -MTC1 AT,F19 -MTC1 R0,F18 -NOP -ADD.D F16,F16,F18 -MTC1 A2,F6 -MUL.D F4,F8,F16 -LUI AT,41F0 -BGEZ A2,70012A84 -CVT.D.W F10,F6 -MTC1 AT,F19 -MTC1 R0,F18 -NOP -ADD.D F10,F10,F18 -DIV.D F8,F4,F10 -ADDIU V0,R0,0001 -LUI AT,41E0 -CFC1 T8,F31 -CTC1 V0,F31 -NOP -CVT.W.D F16,F8 -CFC1 V0,F31 -NOP -ANDI V0,V0,0078 -BEQL V0,R0,70012B08 -MFC1 V0,F16 -MTC1 AT,F17 -MTC1 R0,F16 -ADDIU V0,R0,0001 -LUI AT,8000 -SUB.D F16,F8,F16 -CTC1 V0,F31 -NOP -CVT.W.D F16,F16 -CFC1 V0,F31 -NOP -ANDI V0,V0,0078 -BNEL V0,R0,70012AFC -CTC1 T8,F31 -MFC1 V0,F16 -CTC1 T8,F31 -JR RA -OR V0,V0,AT -CTC1 T8,F31 -JR RA -ADDIU V0,R0,FFFF -MFC1 V0,F16 -NOP -BLTZL V0,70012AFC -CTC1 T8,F31 -CTC1 T8,F31 -JR RA -NOP - -70012B20 -MTC1 A1,F4 -MTC1 A2,F8 -LUI AT,4F80 -CVT.S.W F6,F4 -BGEZ A2,70012B44 -CVT.S.W F10,F8 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -LW T6,0000 (A0) -MUL.S F18,F6,F10 -LUI AT,4F80 -LW T7,0040 (T6) -MTC1 T7,F8 -CVT.D.S F4,F18 -BGEZ T7,70012B70 -CVT.S.W F16,F8 -MTC1 AT,F6 -NOP -ADD.S F16,F16,F6 -LUI AT,8003 -LDC1 F18,96D8 (AT) -CVT.D.S F10,F16 -MUL.D F8,F10,F18 -DIV.D F6,F4,F8 -JR RA -CVT.S.D F0,F6 - -70012B8C -LW T6,0004 (A0) -OR T1,A1,R0 -ADDIU V1,R0,FFFF -BNE T6,R0,70012BA8 -LW V0,0010 (A0) -JR RA -OR V0,R0,R0 -//70012BA8: -OR A2,R0,R0 -ADDIU T2,R0,0010 -LW A1,0004 (A0) -ADDIU T6,A2,0001 -SRLV T7,A1,A2 -ANDI T8,T7,0001 -BEQL T8,R0,70012C04 -SRLV T7,A1,T6 -LW T3,0014 (A0) -SLL T9,A2,0x2 -ADDU A3,A0,T9 -BEQL T3,R0,70012BF0 -LW T0,00B8 (A3) -LW T4,00B8 (A3) -SUBU T5,T4,V0 -SW T5,00B8 (A3) -LW A1,0004 (A0) -LW T0,00B8 (A3) -SLTU AT,T0,V1 -BEQL AT,R0,70012C04 -SRLV T7,A1,T6 -OR V1,T0,R0 -SRLV T7,A1,T6 -ANDI T8,T7,0001 -BEQ T8,R0,70012C48 -ADDIU T6,A2,0002 -LW T3,0014 (A0) -SLL T9,A2,0x2 -ADDU A3,A0,T9 -BEQL T3,R0,70012C38 -LW T0,00BC (A3) -LW T4,00BC (A3) -SUBU T5,T4,V0 -SW T5,00BC (A3) -LW A1,0004 (A0) -LW T0,00BC (A3) -SLTU AT,T0,V1 -BEQL AT,R0,70012C4C -SRLV T7,A1,T6 -OR V1,T0,R0 -SRLV T7,A1,T6 -ANDI T8,T7,0001 -BEQ T8,R0,70012C90 -ADDIU T6,A2,0003 -LW T3,0014 (A0) -SLL T9,A2,0x2 -ADDU A3,A0,T9 -BEQL T3,R0,70012C80 -LW T0,00C0 (A3) -LW T4,00C0 (A3) -SUBU T5,T4,V0 -SW T5,00C0 (A3) -LW A1,0004 (A0) -LW T0,00C0 (A3) -SLTU AT,T0,V1 -BEQL AT,R0,70012C94 -SRLV T7,A1,T6 -OR V1,T0,R0 -SRLV T7,A1,T6 -ANDI T8,T7,0001 -BEQL T8,R0,70012CD8 -ADDIU A2,A2,0004 -LW T3,0014 (A0) -SLL T9,A2,0x2 -ADDU A3,A0,T9 -BEQL T3,R0,70012CC4 -LW A1,00C4 (A3) -LW T4,00C4 (A3) -SUBU T5,T4,V0 -SW T5,00C4 (A3) -LW A1,00C4 (A3) -SLTU AT,A1,V1 -BEQL AT,R0,70012CD8 -ADDIU A2,A2,0004 -OR V1,A1,R0 -ADDIU A2,A2,0004 -BNEL A2,T2,70012BB4 -LW A1,0004 (A0) -SW R0,0014 (A0) -SW V1,0000 (T1) -ADDIU V0,R0,0001 -JR RA -NOP - -70012D00 -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -ADDIU T6,R0,000D -SW A1,001C (SP) -SH T6,0018 (SP) -ADDIU A1,SP,0018 -ADDIU A0,A0,0048 -JAL 70012EFC -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70012D40 -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -ADDIU T6,R0,000F -SH T6,0018 (SP) -ADDIU A1,SP,0018 -ADDIU A0,A0,0048 -JAL 70012EFC -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70012D70 -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -ADDIU T6,R0,0011 -SH T6,0018 (SP) -ADDIU A1,SP,0018 -ADDIU A0,A0,0048 -JAL 70012EFC -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70012DA0 - accepts: A0=, A1= -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A1,002C (SP) -OR T6,A1,R0 -ADDIU T7,R0,000A -SH T7,0018 (SP) ;buf[0]=0xA -SH T6,001C (SP) ;buf[1]=A1 f/caller -ADDIU A1,SP,0018 ;A1=SP+18: argument buffer -ADDIU A0,A0,0048 ;A0+=48 -JAL 70012EFC -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70012DE0 -ADDIU SP,SP,FFC0 -SW S3,0020 (SP) -SLL S3,A1,0x10 -SW S2,001C (SP) -OR S2,A0,R0 -SRA T6,S3,0x10 -SW RA,0024 (SP) -OR S3,T6,R0 -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A1,0044 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ADDIU A0,R0,0001 ;A0=1: do not catch interrupts -SW V0,002C (SP) -LW S0,0008 (S2) -BEQ S0,R0,70012E68 -NOP -LH T7,000C (S0) -LW S1,0000 (S0) -BNE S3,T7,70012E60 -NOP -BEQ S1,R0,70012E4C -NOP -LW T8,0008 (S1) -LW T9,0008 (S0) -ADDU T0,T8,T9 -SW T0,0008 (S1) -JAL 7000EA90 -OR A0,S0,R0 -OR A0,S0,R0 -JAL 7000EAC0 -OR A1,S2,R0 -BNE S1,R0,70012E24 -OR S0,S1,R0 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -LW A0,002C (SP) -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0040 - -70012E8C -ADDIU SP,SP,FFC8 -SW S2,0020 (SP) -OR S2,A0,R0 -SW RA,0024 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ADDIU A0,R0,0001 -SW V0,002C (SP) -LW S0,0008 (S2) -BEQ S0,R0,70012EDC -NOP -LW S1,0000 (S0) -JAL 7000EA90 -OR A0,S0,R0 -OR A0,S0,R0 -JAL 7000EAC0 -OR A1,S2,R0 -BNE S1,R0,70012EBC -OR S0,S1,R0 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -LW A0,002C (SP) -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0038 - -70012EFC - accepts: A0=p->, A1=p->arguments, A2=mode -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -SW R0,0020 (SP) -ADDIU A0,R0,0001 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW A2,0038 (SP) -LW T6,0030 (SP) ;T6=A0 f/caller -LW A3,0038 (SP) ;A3= mode -OR A1,V0,R0 -LW T0,0000 (T6) -BNE T0,R0,70012F44 ;restore and return if NULL -OR A0,T0,R0 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -OR A0,V0,R0 -BEQ R0,R0,70013014 -LW RA,0014 (SP) -//70012F44: -SW A1,001C (SP) -SW A3,0038 (SP) -JAL 7000EA90 -SW T0,002C (SP) -LW T0,002C (SP) -LW A0,0034 (SP) -ADDIU A2,R0,0010 -JAL 7001D690 -ADDIU A1,T0,000C -LW A3,0038 (SP) -LUI AT,7FFF -ORI AT,AT,FFFF -BNE A3,AT,70012F84 -LW T0,002C (SP) -ADDIU T7,R0,FFFF -SW T7,0020 (SP) -//70012F84: -LW V0,0030 (SP) -ADDIU AT,R0,FFF8 -LW T8,0020 (SP) -BEQ V0,AT,70013008 -ADDIU A1,V0,0008 -//70012F98: -LW V0,0000 (A1) -BNEL V0,R0,70012FCC -LW V1,0008 (V0) -BEQL T8,R0,70012FB8 -SW A3,0008 (T0) -BEQ R0,R0,70012FB8 -SW R0,0008 (T0) -//70012FB4: -SW A3,0008 (T0) -//70012FB8: -JAL 7000EAC0 -OR A0,T0,R0 -BEQ R0,R0,70013008 -NOP -//70012FC8: -LW V1,0008 (V0) -OR A2,V0,R0 -SLT AT,A3,V1 -BEQL AT,R0,70013000 -OR A1,V0,R0 -SW A3,0008 (T0) -LW T9,0008 (A2) -OR A0,T0,R0 -SUBU T1,T9,A3 -JAL 7000EAC0 -SW T1,0008 (A2) -BEQ R0,R0,70013008 -NOP -//70012FFC: -OR A1,V0,R0 -BNE V0,R0,70012F98 -SUBU A3,A3,V1 -//70013008: restore state -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -LW A0,001C (SP) -//70013010: return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70013020 -ADDIU SP,SP,FFD0 -SW RA,001C (SP) -SW A0,0030 (SP) -SW S0,0018 (SP) -SW A1,0034 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -ADDIU A0,R0,0001 -LW T6,0030 (SP) -SW V0,0024 (SP) -LW T8,0034 (SP) -LW S0,0008 (T6) -OR V1,R0,R0 -BEQL S0,R0,70013088 -ADDIU T7,R0,FFFF -JAL 7000EA90 -OR A0,S0,R0 -ADDIU A0,S0,000C -LW A1,0034 (SP) -JAL 7001D690 -ADDIU A2,R0,0010 -OR A0,S0,R0 -JAL 7000EAC0 -LW A1,0030 (SP) -BEQ R0,R0,7001308C -LW V1,0008 (S0) -ADDIU T7,R0,FFFF -SH T7,0000 (T8) -LW A0,0024 (SP) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW V1,0028 (SP) -LW RA,001C (SP) -LW V0,0028 (SP) -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0030 - -700130AC -ADDIU SP,SP,FFD8 -SW S3,0020 (SP) -SW S2,001C (SP) -SW S0,0014 (SP) -SW RA,0024 (SP) -SW S1,0018 (SP) -OR S2,A0,R0 -OR S3,A2,R0 -SW R0,0010 (A0) -SW R0,0008 (A0) -SW R0,000C (A0) -SW R0,0000 (A0) -SW R0,0004 (A0) -BLEZ A2,70013104 -OR S0,R0,R0 -OR S1,A1,R0 -OR A0,S1,R0 -JAL 7000EAC0 -OR A1,S2,R0 -ADDIU S0,S0,0001 -BNE S0,S3,700130EC -ADDIU S1,S1,001C -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -70013120 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -OR A2,A0,R0 -SW A2,0018 (SP) -ADDIU A0,R0,0001 -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW A1,001C (SP) -LW A2,0018 (SP) -LW A1,001C (SP) -OR A0,V0,R0 -LW T6,0020 (A2) -SW T6,0010 (A1) -LW T7,0000 (A2) -SW T7,0000 (A1) -JAL 7000DD30 ;update Status and MI Interrupt Mask Register with A0 -SW A1,0000 (A2) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70013170 -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A2,0030 (SP) -LW A3,0014 (A0) -SLL T6,A2,0x10 -SRA A2,T6,0x10 -OR T0,A0,R0 -BEQ A3,R0,700131C4 -OR V1,R0,R0 -SW A3,0000 (A1) -SW T0,0028 (SP) -SW A3,0024 (SP) -SW R0,001C (SP) -JAL 7000EA90 -OR A0,A3,R0 -LW T0,0028 (SP) -LW A0,0024 (SP) -JAL 7000EAC0 -ADDIU A1,T0,000C -BEQ R0,R0,70013244 -LW V1,001C (SP) -LW A3,0004 (T0) -BEQ A3,R0,700131FC -OR A0,A3,R0 -SW A3,0000 (A1) -SW T0,0028 (SP) -SW A3,0024 (SP) -JAL 7000EA90 -SW V1,001C (SP) -LW T0,0028 (SP) -LW A0,0024 (SP) -JAL 7000EAC0 -ADDIU A1,T0,000C -BEQ R0,R0,70013244 -LW V1,001C (SP) -LW A3,000C (T0) -BEQL A3,R0,70013248 -LW RA,0014 (SP) -LW T8,0008 (A3) -LH T9,0016 (T8) -SLT AT,A2,T9 -BNEL AT,R0,7001323C -LW A3,0000 (A3) -LW T1,00D8 (A3) -BNEL T1,R0,7001323C -LW A3,0000 (A3) -SW A3,0000 (A1) -LW T2,0008 (A3) -ADDIU V1,R0,0001 -LH A2,0016 (T2) -LW A3,0000 (A3) -BNEL A3,R0,7001320C -LW T8,0008 (A3) -LW RA,0014 (SP) -ADDIU SP,SP,0028 -OR V0,V1,R0 -JR RA -NOP - -70013258 -ADDIU SP,SP,FFD0 -SW RA,001C (SP) -SW S0,0018 (SP) -SW A0,0030 (SP) -SW R0,002C (SP) -LH T6,0000 (A2) -OR S0,A1,R0 -SH T6,0016 (A1) -LBU T7,0004 (A2) -SW R0,000C (A1) -SH T7,001A (A1) -LH T8,0002 (A2) -SH R0,0014 (A1) -SW R0,0008 (A1) -SH T8,0018 (A1) -LH A2,0000 (A2) -LW A0,0030 (SP) -JAL 70013170 -ADDIU A1,SP,002C -LW T9,002C (SP) -BEQL T9,R0,70013380 -LW V0,002C (SP) -BEQ V0,R0,70013364 -LW A0,000C (T9) -ADDIU T0,R0,0200 -SW T0,00D8 (T9) -LW T1,002C (SP) -LW T2,0008 (T1) -SW R0,0008 (T2) -JAL 7000F0D0 -SW A0,0028 (SP) -LW T3,0030 (SP) -LW A0,0028 (SP) -ADDIU T5,R0,000B -LW T4,001C (T3) -SH T5,0008 (V0) -SW R0,000C (V0) -SW T4,0004 (V0) -LW T6,002C (SP) -ADDIU A1,R0,0003 -OR A2,V0,R0 -LW T7,00D8 (T6) -ADDIU T8,T7,FFC0 -SW T8,0010 (V0) -LW T9,0008 (A0) -JALR RA,T9 -NOP -JAL 7000F0D0 -NOP -LW A0,0028 (SP) -BEQ V0,R0,7001336C -OR A2,V0,R0 -LW T0,0030 (SP) -LW T2,002C (SP) -ADDIU T5,R0,000F -LW T1,001C (T0) -LW T3,00D8 (T2) -SH T5,0008 (V0) -SW R0,0000 (V0) -ADDU T4,T1,T3 -SW T4,0004 (V0) -LW T9,0008 (A0) -ADDIU A1,R0,0003 -JALR RA,T9 -NOP -BEQ R0,R0,70013370 -LW T7,002C (SP) -LW T6,002C (SP) -SW R0,00D8 (T6) -LW T7,002C (SP) -SW S0,0008 (T7) -LW T8,002C (SP) -SW T8,0008 (S0) -LW V0,002C (SP) -LW RA,001C (SP) -LW S0,0018 (SP) -SLTU T0,R0,V0 -OR V0,T0,R0 -JR RA -ADDIU SP,SP,0030 - -700133A0 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -SW A3,002C (SP) -LW T7,0008 (A1) -BEQL T7,R0,70013430 -LW RA,0014 (SP) -JAL 7000F0D0 -SW A0,0020 (SP) -BEQ V0,R0,7001342C -LW A0,0020 (SP) -LW T9,0024 (SP) -LW T8,001C (A0) -ADDIU T3,R0,000B -LW T0,0008 (T9) -LW T1,00D8 (T0) -SH T3,0008 (V0) -ADDU T2,T8,T1 -SW T2,0004 (V0) -LH T4,002A (SP) -SW T4,000C (V0) -SW V0,001C (SP) -JAL 7000EFC8 -LW A1,002C (SP) -LW A2,001C (SP) -ADDIU A1,R0,0003 -SW V0,0010 (A2) -SW R0,0000 (A2) -LW T5,0024 (SP) -LW T6,0008 (T5) -LW A0,000C (T6) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70013440 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A2,0020 (SP) -LW T6,0008 (A1) -BEQL T6,R0,700134C0 -LW RA,0014 (SP) -JAL 7000F0D0 -SW A1,001C (SP) -LW A3,001C (SP) -BEQ V0,R0,700134BC -OR A2,V0,R0 -LW T7,0018 (SP) -LW T9,0008 (A3) -ADDIU T2,R0,000E -LW T8,001C (T7) -LW T0,00D8 (T9) -SH T2,0008 (V0) -ADDIU A1,R0,0003 -ADDU T1,T8,T0 -SW T1,0004 (V0) -LW T3,0020 (SP) -SW R0,0000 (V0) -SW T3,000C (V0) -LH T4,001A (A3) -SH T4,000A (V0) -LW T5,0008 (A3) -LW A0,000C (T5) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700134D0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A2,0020 (SP) -LW T6,0008 (A1) -BEQL T6,R0,70013548 -LW RA,0014 (SP) -JAL 7000F0D0 -SW A1,001C (SP) -LW A3,001C (SP) -BEQ V0,R0,70013544 -OR A2,V0,R0 -LW T7,0018 (SP) -LW T9,0008 (A3) -ADDIU T2,R0,000C -LW T8,001C (T7) -LW T0,00D8 (T9) -SH T2,0008 (V0) -ADDIU A1,R0,0003 -ADDU T1,T8,T0 -SW T1,0004 (V0) -LBU T3,0023 (SP) -SW R0,0000 (V0) -SW T3,000C (V0) -LW T4,0008 (A3) -LW A0,000C (T4) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70013560 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A2,0020 (SP) -LW T6,0008 (A1) -BEQL T6,R0,700135D8 -LW RA,0014 (SP) -JAL 7000F0D0 -SW A1,001C (SP) -LW A3,001C (SP) -BEQ V0,R0,700135D4 -OR A2,V0,R0 -LW T7,0018 (SP) -LW T9,0008 (A3) -ADDIU T2,R0,0007 -LW T8,001C (T7) -LW T0,00D8 (T9) -SH T2,0008 (V0) -ADDIU A1,R0,0003 -ADDU T1,T8,T0 -SW T1,0004 (V0) -LWC1 F4,0020 (SP) -SW R0,0000 (V0) -SWC1 F4,000C (V0) -LW T3,0008 (A3) -LW A0,000C (T3) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700135F0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A2,0020 (SP) -LW T6,0008 (A1) -BEQL T6,R0,70013678 -LW RA,0014 (SP) -JAL 7000F0D0 -SW A1,001C (SP) -LW A3,001C (SP) -BEQ V0,R0,70013674 -OR A2,V0,R0 -LW T7,0018 (SP) -LW T9,0008 (A3) -ADDIU T2,R0,0010 -LW T8,001C (T7) -LW T0,00D8 (T9) -SH T2,0008 (V0) -ADDU T1,T8,T0 -SW T1,0004 (V0) -LBU V1,0023 (SP) -BGEZ V1,70013654 -SUBU T3,R0,V1 -BEQ R0,R0,70013658 -SW T3,000C (V0) -SW V1,000C (V0) -SW R0,0000 (A2) -LW T4,0008 (A3) -ADDIU A1,R0,0003 -LW A0,000C (T4) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70013690 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -LW T6,0008 (A1) -BEQL T6,R0,700136FC -LW RA,0014 (SP) -JAL 7000F0D0 -SW A1,001C (SP) -LW A3,001C (SP) -BEQ V0,R0,700136F8 -OR A2,V0,R0 -LW T7,0018 (SP) -LW T9,0008 (A3) -ADDIU T2,R0,000F -LW T8,001C (T7) -LW T0,00D8 (T9) -SH T2,0008 (V0) -SW R0,0000 (V0) -ADDU T1,T8,T0 -SW T1,0004 (V0) -LW T3,0008 (A3) -ADDIU A1,R0,0003 -LW A0,000C (T3) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70013710 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW A2,0008 (A1) -OR T0,A0,R0 -OR A3,A1,R0 -BEQL A2,R0,700137B4 -LW RA,0014 (SP) -LW T6,00D8 (A2) -BEQL T6,R0,7001379C -OR A0,T0,R0 -SW A1,001C (SP) -JAL 7000F0D0 -SW A0,0018 (SP) -LW A3,001C (SP) -LW T0,0018 (SP) -BEQ V0,R0,700137B0 -OR A2,V0,R0 -LW T8,0008 (A3) -LW T7,001C (T0) -ADDIU A1,R0,0003 -LW T9,00D8 (T8) -SH R0,0008 (V0) -ADDU T1,T7,T9 -SW T1,0004 (V0) -LW T2,0008 (A3) -SW T2,000C (V0) -LW T3,0008 (A3) -LW A0,000C (T3) -SW A3,001C (SP) -LW T9,0008 (A0) -JALR RA,T9 -NOP -BEQ R0,R0,700137AC -LW A3,001C (SP) -OR A0,T0,R0 -OR A1,A2,R0 -JAL 7000F020 -SW A3,001C (SP) -LW A3,001C (SP) -SW R0,0008 (A3) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700137C0 -LUI AT,3F80 -MTC1 AT,F2 -BLTZ A0,700137DC -LUI AT,8003 -LUI AT,8003 -BEQ R0,R0,700137E4 -LWC1 F0,96E0 (AT) -LWC1 F0,96E4 (AT) -SUBU A0,R0,A0 -BEQ A0,R0,70013808 -ANDI T6,A0,0001 -BEQ T6,R0,700137FC -SRA T7,A0,0x1 -MUL.S F2,F2,F0 -NOP -MUL.S F0,F0,F0 -BNE T7,R0,700137E8 -OR A0,T7,R0 -JR RA -MOV.S F0,F2 - -70013810 14410 copy word from hardware A0 to rdram A1; returns V0=0 if okay - accepts: A0=hardware address, A1=p->target -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -JAL 7001D760 -SW S0,0018 (SP) -LW A0,0028 (SP) ;A0= A0 f/caller -JAL 70017BE0 ;copies word at uncached hardware address A0 to A1 -LW A1,002C (SP) ;A1= A1 f/caller -JAL 7001D7A4 -OR S0,V0,R0 ;S0=V0: error flag -LW RA,001C (SP) -OR V0,S0,R0 ;V0=S0: error flag -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -70013850 14450 V0= memcpy(A0,A1,A2) - accepts: A0=p->target, A1=p->source, A2=length -OR V0,A0,R0 -BEQ A2,R0,70013874 -OR V1,A1,R0 -LBU T6,0000 (V1) -ADDIU A2,A2,FFFF -ADDIU V0,V0,0001 -ADDIU V1,V1,0001 -BNE A2,R0,7001385C -SB T6,FFFF (V0) -JR RA -OR V0,A0,R0 - -7001387C 1447C V0= strlen(A0) - accepts: A0=p->string -LBU T6,0000 (A0) -OR V1,A0,R0 -BEQ T6,R0,7001389C ;return if NULL terminator found -NOP -//7001388C: -LBU T7,0001 (V1) -ADDIU V1,V1,0001 -BNEL T7,R0,70013890 ;loop until NULL terminator found -LBU T7,0001 (V1) -//7001389C: -JR RA -SUBU V0,V1,A0 ;V0= str.final - str.start - -700138A4 144A4 V0= strchr(A0,A1) - accepts: A0=p->string, A1=char -LBU V1,0000 (A0) -ANDI T6,A1,00FF -ANDI V0,A1,00FF -BEQL T6,V1,700138DC -OR V0,A0,R0 -BNEL V1,R0,700138CC -LBU V1,0001 (A0) -JR RA -OR V0,R0,R0 -LBU V1,0001 (A0) -ADDIU A0,A0,0001 -BNE V0,V1,700138B8 -NOP -OR V0,A0,R0 -JR RA -NOP - -700138F0 -ADDIU SP,SP,FFE8 -SW A1,0020 (SP) -SW RA,0014 (SP) -ANDI T6,A1,00FF -SLTI AT,T6,0026 -OR A1,T6,R0 -SW R0,000C (S0) -SW R0,0010 (S0) -SW R0,0014 (S0) -SW R0,0018 (S0) -SW R0,001C (S0) -SW R0,0020 (S0) -BNE AT,R0,7001394C -OR V1,T6,R0 -ADDIU T7,T6,FFBB -SLTIU AT,T7,0034 -BEQ AT,R0,70013F38 -SLL T7,T7,0x2 -LUI AT,8003 -ADDU AT,AT,T7 -LW T7,9714 (AT) ;T7=80029714+offset: p->handler function -JR T7 -NOP -ADDIU AT,R0,0025 -BEQL V1,AT,70013F1C -LW T8,000C (S0) -BEQ R0,R0,70013F3C -LW T6,000C (S0) -LW T8,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T9,T8,0003 -AND T6,T9,AT -ADDIU T7,T6,0004 -SW T7,0000 (A2) -LW T6,000C (S0) -LW T9,FFFC (T7) -ADDU T7,A3,T6 -SB T9,0000 (T7) -LW T8,000C (S0) -ADDIU T6,T8,0001 -BEQ R0,R0,70013F50 -SW T6,000C (S0) -LBU V0,0034 (S0) -ADDIU AT,R0,006C -BNEL V0,AT,700139D8 -ADDIU AT,R0,004C -LW T9,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T7,T9,0003 -AND T8,T7,AT -ADDIU T6,T8,0004 -SW T6,0000 (A2) -LW T7,FFFC (T6) -SRA T8,T7,0x1F -SW T8,0000 (S0) -BEQ R0,R0,70013A34 -SW T7,0004 (S0) -ADDIU AT,R0,004C -BNEL V0,AT,70013A10 -LW T7,0000 (A2) -LW T6,0000 (A2) -ADDIU AT,R0,FFF8 -ADDIU T7,T6,0007 -AND T8,T7,AT -ADDIU T9,T8,0008 -SW T9,0000 (A2) -LW T8,FFF8 (T9) -LW T9,FFFC (T9) -SW T8,0000 (S0) -BEQ R0,R0,70013A34 -SW T9,0004 (S0) -LW T7,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T6,T7,0003 -AND T8,T6,AT -ADDIU T9,T8,0004 -SW T9,0000 (A2) -LW T6,FFFC (T9) -SRA T8,T6,0x1F -SW T8,0000 (S0) -SW T6,0004 (S0) -LBU T7,0034 (S0) -ADDIU AT,R0,0068 -BNEL T7,AT,70013A60 -LW T6,0000 (S0) -LW T7,0004 (S0) -SLL T9,T7,0x10 -SRA T6,T9,0x10 -SRA T8,T6,0x1F -SW T8,0000 (S0) -SW T6,0004 (S0) -LW T6,0000 (S0) -BGTZL T6,70013A9C -LW V0,0030 (S0) -BLTZL T6,70013A7C -LW T9,000C (S0) -BEQ R0,R0,70013A9C -LW V0,0030 (S0) -LW T9,000C (S0) -ADDIU T8,R0,002D -ADDU T6,A3,T9 -SB T8,0000 (T6) -LW T7,000C (S0) -ADDIU T9,T7,0001 -BEQ R0,R0,70013AEC -SW T9,000C (S0) -LW V0,0030 (S0) -ANDI T8,V0,0002 -BEQ T8,R0,70013AC8 -ANDI T6,V0,0001 -LW T7,000C (S0) -ADDIU T6,R0,002B -ADDU T9,A3,T7 -SB T6,0000 (T9) -LW T8,000C (S0) -ADDIU T7,T8,0001 -BEQ R0,R0,70013AEC -SW T7,000C (S0) -BEQL T6,R0,70013AF0 -LW T9,000C (S0) -LW T8,000C (S0) -ADDIU T9,R0,0020 -ADDU T7,A3,T8 -SB T9,0000 (T7) -LW T6,000C (S0) -ADDIU T8,T6,0001 -SW T8,000C (S0) -LW T9,000C (S0) -OR A0,S0,R0 -ADDU T7,T9,A3 -JAL 7001D7D0 -SW T7,0008 (S0) -BEQ R0,R0,70013F54 -LW RA,0014 (SP) -LBU V0,0034 (S0) -ADDIU AT,R0,006C -BNEL V0,AT,70013B48 -ADDIU AT,R0,004C -LW T6,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T8,T6,0003 -AND T9,T8,AT -ADDIU T7,T9,0004 -SW T7,0000 (A2) -LW T8,FFFC (T7) -SRA T6,T8,0x1F -SW T6,0000 (S0) -BEQ R0,R0,70013BA4 -SW T8,0004 (S0) -ADDIU AT,R0,004C -BNEL V0,AT,70013B80 -LW T6,0000 (A2) -LW T9,0000 (A2) -ADDIU AT,R0,FFF8 -ADDIU T8,T9,0007 -AND T6,T8,AT -ADDIU T7,T6,0008 -SW T7,0000 (A2) -LW T9,FFFC (T7) -LW T8,FFF8 (T7) -SW T9,0004 (S0) -BEQ R0,R0,70013BA4 -SW T8,0000 (S0) -LW T6,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T7,T6,0003 -AND T8,T7,AT -ADDIU T9,T8,0004 -SW T9,0000 (A2) -LW T7,FFFC (T9) -SRA T8,T7,0x1F -SW T8,0000 (S0) -SW T7,0004 (S0) -LBU V0,0034 (S0) -ADDIU AT,R0,0068 -BNE V0,AT,70013BCC -NOP -LW T7,0004 (S0) -ADDIU T6,R0,0000 -SW T6,0000 (S0) -ANDI T9,T7,FFFF -BEQ R0,R0,70013BE4 -SW T9,0004 (S0) -BNEL V0,R0,70013BE8 -LW T7,0030 (S0) -LW T9,0004 (S0) -ADDIU T8,R0,0000 -SW T8,0000 (S0) -SW T9,0004 (S0) -LW T7,0030 (S0) -ANDI T6,T7,0008 -BEQL T6,R0,70013C40 -LW T8,000C (S0) -LW T9,000C (S0) -ADDIU T8,R0,0030 -ADDIU AT,R0,0078 -ADDU T7,A3,T9 -SB T8,0000 (T7) -LW T6,000C (S0) -ADDIU T9,T6,0001 -BEQ V1,AT,70013C24 -SW T9,000C (S0) -ADDIU AT,R0,0058 -BNEL V1,AT,70013C40 -LW T8,000C (S0) -LW T8,000C (S0) -ADDU T7,A3,T8 -SB A1,0000 (T7) -LW T6,000C (S0) -ADDIU T9,T6,0001 -SW T9,000C (S0) -LW T8,000C (S0) -OR A0,S0,R0 -ADDU T7,T8,A3 -JAL 7001D7D0 -SW T7,0008 (S0) -BEQ R0,R0,70013F54 -LW RA,0014 (SP) -LBU T6,0034 (S0) -ADDIU AT,R0,004C -BNEL T6,AT,70013CC8 -LW V0,0000 (A2) -LW V0,0000 (A2) -ANDI T9,V0,0001 -BEQ T9,R0,70013C88 -OR V1,V0,R0 -ADDIU T8,V1,0007 -SW T8,0000 (A2) -BEQ R0,R0,70013CB8 -ADDIU V0,T8,FFEA -ANDI T7,V1,0002 -BEQ T7,R0,70013CA4 -ADDIU T9,V0,0007 -ADDIU T6,V1,000A -SW T6,0000 (A2) -BEQ R0,R0,70013CB4 -ADDIU A0,T6,FFD8 -ADDIU AT,R0,FFF8 -AND T8,T9,AT -ADDIU A0,T8,0008 -SW A0,0000 (A2) -OR V0,A0,R0 -LDC1 F4,FFF8 (V0) -BEQ R0,R0,70013D1C -SDC1 F4,0000 (S0) -LW V0,0000 (A2) -ANDI T6,V0,0001 -BEQ T6,R0,70013CE4 -OR V1,V0,R0 -ADDIU T9,V1,0007 -SW T9,0000 (A2) -BEQ R0,R0,70013D14 -ADDIU V0,T9,FFEA -ANDI T8,V1,0002 -BEQ T8,R0,70013D00 -ADDIU T6,V0,0007 -ADDIU T7,V1,000A -SW T7,0000 (A2) -BEQ R0,R0,70013D10 -ADDIU A0,T7,FFD8 -ADDIU AT,R0,FFF8 -AND T9,T6,AT -ADDIU A0,T9,0008 -SW A0,0000 (A2) -OR V0,A0,R0 -LDC1 F6,FFF8 (V0) -SDC1 F6,0000 (S0) -LHU T7,0000 (S0) -ANDI T6,T7,8000 -BEQL T6,R0,70013D50 -LW V0,0030 (S0) -LW T8,000C (S0) -ADDIU T9,R0,002D -ADDU T7,A3,T8 -SB T9,0000 (T7) -LW T6,000C (S0) -ADDIU T8,T6,0001 -BEQ R0,R0,70013DA0 -SW T8,000C (S0) -LW V0,0030 (S0) -ANDI T9,V0,0002 -BEQ T9,R0,70013D7C -ANDI T7,V0,0001 -LW T6,000C (S0) -ADDIU T7,R0,002B -ADDU T8,A3,T6 -SB T7,0000 (T8) -LW T9,000C (S0) -ADDIU T6,T9,0001 -BEQ R0,R0,70013DA0 -SW T6,000C (S0) -BEQL T7,R0,70013DA4 -LW T8,000C (S0) -LW T9,000C (S0) -ADDIU T8,R0,0020 -ADDU T6,A3,T9 -SB T8,0000 (T6) -LW T7,000C (S0) -ADDIU T9,T7,0001 -SW T9,000C (S0) -LW T8,000C (S0) -OR A0,S0,R0 -ADDU T6,T8,A3 -JAL 7001DFE0 -SW T6,0008 (S0) -BEQ R0,R0,70013F54 -LW RA,0014 (SP) -LBU V0,0034 (S0) -ADDIU AT,R0,0068 -BNEL V0,AT,70013DF8 -ADDIU AT,R0,006C -LW T7,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T9,T7,0003 -AND T8,T9,AT -ADDIU T6,T8,0004 -SW T6,0000 (A2) -LW T9,FFFC (T6) -LW T7,002C (S0) -BEQ R0,R0,70013F50 -SH T7,0000 (T9) -ADDIU AT,R0,006C -BNEL V0,AT,70013E2C -ADDIU AT,R0,004C -LW T8,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T6,T8,0003 -AND T7,T6,AT -ADDIU T9,T7,0004 -SW T9,0000 (A2) -LW T6,FFFC (T9) -LW T8,002C (S0) -BEQ R0,R0,70013F50 -SW T8,0000 (T6) -ADDIU AT,R0,004C -BNEL V0,AT,70013E68 -LW T7,0000 (A2) -LW T7,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T9,T7,0003 -AND T8,T9,AT -ADDIU T6,T8,0004 -SW T6,0000 (A2) -LW T6,FFFC (T6) -LW T7,002C (S0) -ADDIU T8,R0,0000 -SW T8,0000 (T6) -BEQ R0,R0,70013F50 -SW T7,0004 (T6) -LW T7,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T8,T7,0003 -AND T9,T8,AT -ADDIU T6,T9,0004 -SW T6,0000 (A2) -LW T8,FFFC (T6) -LW T7,002C (S0) -BEQ R0,R0,70013F50 -SW T7,0000 (T8) -LW T9,0000 (A2) -ADDIU AT,R0,FFFC -OR A0,S0,R0 -ADDIU T6,T9,0003 -AND T7,T6,AT -ADDIU T8,T7,0004 -SW T8,0000 (A2) -LW T6,FFFC (T8) -LW T7,000C (S0) -ADDIU A1,R0,0078 -SRA T8,T6,0x1F -SW T6,0004 (S0) -ADDU T6,T7,A3 -SW T8,0000 (S0) -JAL 7001D7D0 -SW T6,0008 (S0) -BEQ R0,R0,70013F54 -LW RA,0014 (SP) -LW T8,0000 (A2) -ADDIU AT,R0,FFFC -ADDIU T9,T8,0003 -AND T7,T9,AT -ADDIU T6,T7,0004 -SW T6,0000 (A2) -LW A0,FFFC (T6) -JAL 7001387C ;V0= strlen(A0) -SW A0,0008 (S0) -LW V1,0024 (S0) -SW V0,0014 (S0) -BLTZ V1,70013F50 -SLT AT,V1,V0 -BEQL AT,R0,70013F54 -LW RA,0014 (SP) -BEQ R0,R0,70013F50 -SW V1,0014 (S0) -LW T8,000C (S0) -ADDIU T6,R0,0025 -ADDU T9,A3,T8 -SB T6,0000 (T9) -LW T7,000C (S0) -ADDIU T8,T7,0001 -BEQ R0,R0,70013F50 -SW T8,000C (S0) -LW T6,000C (S0) -ADDU T9,A3,T6 -SB A1,0000 (T9) -LW T7,000C (S0) -ADDIU T8,T7,0001 -SW T8,000C (S0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70013F60 14B60 c-style string parser - accepts: A0=p->copy function, A1=p->resultant string, A2=p->string, A3=p->arguments -ADDIU SP,SP,FF20 -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S8,0038 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW A3,00EC (SP) -LUI S5,8002 -LUI S6,8003 -LUI S7,8002 -OR A3,A2,R0 -OR S3,A1,R0 ;S3=A1: p->resultant string -OR S4,A0,R0 ;S4=A0: p->function -SW RA,003C (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A2,00E8 (SP) -SW R0,00D4 (SP) -ADDIU S7,S7,7740 -ADDIU S6,S6,96F4 -ADDIU S5,S5,7764 -ADDIU S8,R0,000A -LBU S0,0000 (A3) -ADDIU S2,A3,0001 -ADDIU V1,R0,0025 -BLEZ S0,70013FF4 -OR A0,S3,R0 -BNEL V1,S0,70013FE8 -LBU S0,0000 (S2) -BEQ R0,R0,70013FF4 -ADDIU S2,S2,FFFF -LBU S0,0000 (S2) -ADDIU S2,S2,0001 -BGTZ S0,70013FD4 -NOP -SUBU V0,S2,A3 -BLEZ V0,7001402C -OR A1,A3,R0 ;A1=A3: p->string -OR S1,V0,R0 -JALR RA,S4 ;execute function of format A0=p->target, A1=p->string, A2=length -OR A2,V0,R0 ;A2=V0: length -BEQ V0,R0,70014024 -OR S3,V0,R0 -LW T6,00D4 (SP) -ADDU T7,T6,S1 -BEQ R0,R0,7001402C -SW T7,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -BNE S0,R0,7001403C -ADDIU S2,S2,0001 -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -SW R0,00D8 (SP) -LBU A1,0000 (S2) -JAL 700138A4 ;V0= strchr(A0,A1) -OR A0,S6,R0 -BEQ V0,R0,7001408C -OR S0,V0,R0 -SUBU T9,S0,S6 -SLL T6,T9,0x2 -LUI T7,8003 -ADDU T7,T7,T6 -LW T7,96FC (T7) -LW T8,00D8 (SP) -ADDIU S2,S2,0001 -OR A0,S6,R0 -OR T9,T8,T7 -SW T9,00D8 (SP) -JAL 700138A4 ;V0= strchr(A0,A1) -LBU A1,0000 (S2) -BNE V0,R0,70014054 -OR S0,V0,R0 -LBU T6,0000 (S2) -ADDIU V0,R0,002A -LW T8,00EC (SP) -BNE V0,T6,700140E0 -LUI A0,8003 -ADDIU T7,T8,0003 -ADDIU AT,R0,FFFC -AND T9,T7,AT -ADDIU T6,T9,0004 -SW T6,00EC (SP) -LW T8,0000 (T9) -ADDIU S2,S2,0001 -BGEZ T8,700140D8 -SW T8,00D0 (SP) -LW T6,00D8 (SP) -SUBU T7,R0,T8 -SW T7,00D0 (SP) -ORI T9,T6,0004 -SW T9,00D8 (SP) -BEQ R0,R0,7001413C -LBU A1,0000 (S2) -SW R0,00D0 (SP) -LBU A1,0000 (S2) -SLTI AT,A1,0030 -BNE AT,R0,7001413C -SLTI AT,A1,003A -BEQL AT,R0,70014140 -ADDIU AT,R0,002E -LW T8,00D0 (SP) -SLTI AT,T8,03E7 -BEQL AT,R0,70014124 -LBU A1,0001 (S2) -MULTU T8,S8 -MFLO T7 -ADDU T6,A1,T7 -ADDIU T9,T6,FFD0 -SW T9,00D0 (SP) -LBU A1,0001 (S2) -ADDIU S2,S2,0001 -SLTI AT,A1,0030 -BNE AT,R0,7001413C -SLTI AT,A1,003A -BNEL AT,R0,70014100 -LW T8,00D0 (SP) -ADDIU AT,R0,002E -BEQ A1,AT,70014154 -ADDIU T8,R0,FFFF -SW T8,00CC (SP) -BEQ R0,R0,700141E8 -LBU A1,0000 (S2) -LBU T7,0001 (S2) -LW T6,00EC (SP) -ADDIU S2,S2,0001 -BNE V0,T7,7001418C -ADDIU T9,T6,0003 -ADDIU AT,R0,FFFC -AND T8,T9,AT -ADDIU T7,T8,0004 -SW T7,00EC (SP) -LW T6,0000 (T8) -ADDIU S2,S2,0001 -SW T6,00CC (SP) -BEQ R0,R0,700141E8 -LBU A1,0000 (S2) -SW R0,00CC (SP) -LBU A1,0000 (S2) -SLTI AT,A1,0030 -BNE AT,R0,700141E8 -SLTI AT,A1,003A -BEQ AT,R0,700141E8 -NOP -LW T9,00CC (SP) -SLTI AT,T9,03E7 -BEQL AT,R0,700141D0 -LBU A1,0001 (S2) -MULTU T9,S8 -MFLO T7 -ADDU T8,A1,T7 -ADDIU T6,T8,FFD0 -SW T6,00CC (SP) -LBU A1,0001 (S2) -ADDIU S2,S2,0001 -SLTI AT,A1,0030 -BNE AT,R0,700141E8 -SLTI AT,A1,003A -BNEL AT,R0,700141AC -LW T9,00CC (SP) -JAL 700138A4 ;V0= strchr(A0,A1) -ADDIU A0,A0,96F0 -BEQ V0,R0,70014208 -ADDIU S0,SP,00A8 -LBU T9,0000 (S2) -ADDIU S2,S2,0001 -BEQ R0,R0,7001420C -SB T9,00DC (SP) -SB R0,00DC (SP) -LBU T7,00DC (SP) -ADDIU V0,R0,006C -ADDIU A2,SP,00EC -BNE V0,T7,70014238 -ADDIU A3,SP,007C -LBU T8,0000 (S2) -ADDIU T6,R0,004C -BNE V0,T8,70014238 -NOP -SB T6,00DC (SP) -ADDIU S2,S2,0001 -JAL 700138F0 -LBU A1,0000 (S2) -LW T9,00D0 (SP) -LW T7,00B4 (SP) -LW T6,00B8 (SP) -SUBU T8,T9,T7 -LW T7,00BC (SP) -SUBU T9,T8,T6 -LW T6,00C0 (SP) -SUBU T8,T9,T7 -LW T7,00C4 (SP) -SUBU T9,T8,T6 -LW T6,00C8 (SP) -SUBU T8,T9,T7 -LW T7,00D8 (SP) -SUBU T9,T8,T6 -SW T9,00D0 (SP) -ANDI T8,T7,0004 -BNE T8,R0,700142EC -SLT T6,R0,T9 -BEQL T6,R0,700142F0 -LW T9,00B4 (SP) -BEQ T6,R0,700142EC -OR S1,T9,R0 -SLTIU AT,S1,0021 -BNE AT,R0,700142AC -OR S0,S1,R0 -BEQ R0,R0,700142AC -ADDIU S0,R0,0020 -BLEZ S0,700142E0 -OR A0,S3,R0 -OR A1,S7,R0 -JALR RA,S4 -OR A2,S0,R0 -BEQ V0,R0,700142D8 -OR S3,V0,R0 -LW T7,00D4 (SP) -ADDU T8,T7,S0 -BEQ R0,R0,700142E0 -SW T8,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -SUBU S1,S1,S0 -BGTZL S1,7001429C -SLTIU AT,S1,0021 -LW T9,00B4 (SP) -OR A0,S3,R0 -ADDIU A1,SP,007C -BLEZL T9,70014330 -LW T9,00B8 (SP) -JALR RA,S4 -OR A2,T9,R0 -BEQ V0,R0,70014324 -OR S3,V0,R0 -LW T6,00D4 (SP) -LW T7,00B4 (SP) -ADDU T8,T6,T7 -BEQ R0,R0,7001432C -SW T8,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -LW T9,00B8 (SP) -SLT T6,R0,T9 -BEQL T6,R0,7001439C -LW T9,00BC (SP) -BEQ T6,R0,70014398 -OR S1,T9,R0 -SLTIU AT,S1,0021 -BNE AT,R0,70014358 -OR S0,S1,R0 -BEQ R0,R0,70014358 -ADDIU S0,R0,0020 -BLEZ S0,7001438C -OR A0,S3,R0 -OR A1,S5,R0 -JALR RA,S4 -OR A2,S0,R0 -BEQ V0,R0,70014384 -OR S3,V0,R0 -LW T7,00D4 (SP) -ADDU T8,T7,S0 -BEQ R0,R0,7001438C -SW T8,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -SUBU S1,S1,S0 -BGTZL S1,70014348 -SLTIU AT,S1,0021 -LW T9,00BC (SP) -OR A0,S3,R0 -LW A1,00B0 (SP) -BLEZL T9,700143DC -LW T9,00C0 (SP) -JALR RA,S4 -OR A2,T9,R0 -BEQ V0,R0,700143D0 -OR S3,V0,R0 -LW T6,00D4 (SP) -LW T7,00BC (SP) -ADDU T8,T6,T7 -BEQ R0,R0,700143D8 -SW T8,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -LW T9,00C0 (SP) -SLT T6,R0,T9 -BEQL T6,R0,70014448 -LW T9,00C4 (SP) -BEQ T6,R0,70014444 -OR S1,T9,R0 -SLTIU AT,S1,0021 -BNE AT,R0,70014404 -OR S0,S1,R0 -BEQ R0,R0,70014404 -ADDIU S0,R0,0020 -BLEZ S0,70014438 -OR A0,S3,R0 -OR A1,S5,R0 -JALR RA,S4 -OR A2,S0,R0 -BEQ V0,R0,70014430 -OR S3,V0,R0 -LW T7,00D4 (SP) -ADDU T8,T7,S0 -BEQ R0,R0,70014438 -SW T8,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -SUBU S1,S1,S0 -BGTZL S1,700143F4 -SLTIU AT,S1,0021 -LW T9,00C4 (SP) -OR A0,S3,R0 -LW T6,00B0 (SP) -BLEZ T9,70014488 -LW T7,00BC (SP) -ADDU A1,T6,T7 -JALR RA,S4 -OR A2,T9,R0 -BEQ V0,R0,70014480 -OR S3,V0,R0 -LW T8,00D4 (SP) -LW T6,00C4 (SP) -ADDU T7,T8,T6 -BEQ R0,R0,70014488 -SW T7,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -LW T9,00C8 (SP) -SLT T8,R0,T9 -BEQL T8,R0,700144F8 -LW T9,00D8 (SP) -BEQ T8,R0,700144F4 -OR S1,T9,R0 -SLTIU AT,S1,0021 -BNE AT,R0,700144B4 -OR S0,S1,R0 -BEQ R0,R0,700144B4 -ADDIU S0,R0,0020 -BLEZ S0,700144E8 -OR A0,S3,R0 -OR A1,S5,R0 -JALR RA,S4 -OR A2,S0,R0 -BEQ V0,R0,700144E0 -OR S3,V0,R0 -LW T6,00D4 (SP) -ADDU T7,T6,S0 -BEQ R0,R0,700144E8 -SW T7,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -SUBU S1,S1,S0 -BGTZL S1,700144A4 -SLTIU AT,S1,0021 -LW T9,00D8 (SP) -LW T6,00D0 (SP) -ANDI T8,T9,0004 -BEQ T8,R0,7001456C -SLT T7,R0,T6 -BEQ T7,R0,7001456C -NOP -BEQ T7,R0,7001456C -OR S1,T6,R0 -SLTIU AT,S1,0021 -BNE AT,R0,7001452C -OR S0,S1,R0 -BEQ R0,R0,7001452C -ADDIU S0,R0,0020 -BLEZ S0,70014560 -OR A0,S3,R0 -OR A1,S7,R0 -JALR RA,S4 -OR A2,S0,R0 -BEQ V0,R0,70014558 -OR S3,V0,R0 -LW T9,00D4 (SP) -ADDU T8,T9,S0 -BEQ R0,R0,70014560 -SW T8,00D4 (SP) -BEQ R0,R0,70014574 -LW V0,00D4 (SP) -SUBU S1,S1,S0 -BGTZL S1,7001451C -SLTIU AT,S1,0021 -BEQ R0,R0,70013FC0 -ADDIU A3,S2,0001 -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,00E0 - -700145B0 -ADDIU SP,SP,FFD0 -LUI T6,8002 -LW T6,7790 (T6) -SW RA,001C (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) -BNE T6,R0,70014728 -SW A3,003C (SP) -LW A0,0034 (SP) -LW A1,0038 (SP) -JAL 7000D6D0 -LW A2,003C (SP) -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,7C98 ;A1=80067C98 -ADDIU A0,A0,7C80 ;A0=80067C80 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI T7,8003 -LW T7,82E0 (T7) -BNE T7,R0,70014614 -NOP -JAL 7001D710 -NOP -LUI A1,8006 -LUI A2,2222 -ORI A2,A2,2222 ;A2= 22222222 -ADDIU A1,A1,7C80 ;A1= 80067C80 -JAL 7000DC50 ;set interrupt table entry #A0 with p->data A1 and value A2 -ADDIU A0,R0,0008 ;A0= entry 8 -ADDIU T8,R0,FFFF -SW T8,0028 (SP) -JAL 70018A30 -OR A0,R0,R0 -SW V0,0024 (SP) -LW T9,0024 (SP) -LW T0,0030 (SP) -SLT AT,T9,T0 -BEQ AT,R0,70014664 -NOP -SW T9,0028 (SP) -OR A0,R0,R0 ;A0=NULL -JAL 7000D800 ;change priority to A1 for thread A0 or current thread if NULL -OR A1,T0,R0 ;A1=T0: priority -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -NOP -LUI AT,8002 -LW T3,0034 (SP) -LUI T2,8006 -LUI T4,8006 -ADDIU T1,R0,0001 -ADDIU T2,T2,6AD0 -ADDIU T4,T4,7C80 -SW T1,7790 (AT) -SW T2,7794 (AT) -SW T4,779C (AT) -LUI T8,8006 -SW T3,7798 (AT) -LW T0,0030 (SP) -LUI AT,8002 -LUI T5,8007 -LUI T6,7001 -LUI T7,7002 -ADDIU T8,T8,6C80 -ADDIU T5,T5,8FE8 -ADDIU T6,T6,CF90 -ADDIU T7,T7,E530 -ADDIU T9,T8,1000 -LUI A2,7002 -LUI A3,8002 -SW V0,002C (SP) -SW T5,77A0 (AT) -SW T6,77A4 (AT) -SW T7,77A8 (AT) -ADDIU A3,A3,7790 ;A3= 80027790: passed as A0 to function -ADDIU A2,A2,E610 ;A2= 7001E610: function -SW T9,0010 (SP) ;SP+10= 80067C80: thread SP, 0x1000 bytes -OR A0,T2,R0 ;A0=T2: 80066AD0: p->thread -OR A1,R0,R0 -JAL 7000D430 ;initialize thread entry at A0 with values -SW T0,0014 (SP) -LUI A0,8006 -JAL 7000D580 ;insert thread and execute if no thread currently running -ADDIU A0,A0,6AD0 -JAL 70018610 ;A0->COP0 status -LW A0,002C (SP) -LW T1,0028 (SP) -ADDIU AT,R0,FFFF -BEQ T1,AT,70014728 ;return if priority -1 -NOP -OR A0,R0,R0 ;A0=NULL -JAL 7000D800 ;change priority to A1 for thread A0 or current thread if NULL -OR A1,T1,R0 ;A1=T1: priority -//70014728: return -LW RA,001C (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70014740 15340 V0= state of device on channel A2, updating controller packet A1 - accepts: A0=, A1=p->controller.packet, A2=slot# -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -JAL 70015E60 -SW R0,001C (SP) -LW A0,0020 (SP) -JAL 700147F4 ;V0=state of controller slot A1 -LW A1,0028 (SP) ;A1= A2 f/caller: slot# -JAL 70015EA4 -SW V0,001C (SP) -LW T6,001C (SP) ;T6=state of slot A2 -BEQ T6,R0,70014784 -NOP -BEQ R0,R0,700147E4 ;return if error -OR V0,T6,R0 -//70014784: -LW T7,0020 (SP) -LW T8,0024 (SP) ;T8= A1 f/caller: p->controller.packet -SW T7,0004 (T8) ;A1+4 = A0 f/caller -LW T0,0024 (SP) ;T0= A1 f/caller: p->controller.packet -LW T9,0028 (SP) -SW T9,0008 (T0) ;A1+8 = slot# -LW T1,0024 (SP) ;T1= A1 f/caller: p->controller.packet -SW R0,0000 (T1) ;A1+0 = 0 -JAL 7001F034 ;tests validity of mempak file -LW A0,0024 (SP) ;A0= A1 f/caller: p->controller.packet -SW V0,001C (SP) -LW T2,001C (SP) -BEQ T2,R0,700147C4 -NOP -BEQ R0,R0,700147E4 ;return if mempak unreadable or not found -OR V0,T2,R0 -//700147C4: should have returned V0= state of mempak -JAL 7000B728 ;removed: V0=3 (output enabled | slot filled) -LW A0,0024 (SP) ;A0= A1 f/caller: p->controller.packet -LW T3,0024 (SP) -SW V0,001C (SP) -LW T4,0000 (T3) -ORI T5,T4,0001 -SW T5,0000 (T3) ;A1+0 |= 1 -LW V0,001C (SP) ;V0= state of slot A2 -//700147E4: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -700147F4 153F4 V0=state of controller slot A1 - accepts: A0=, A1=channel# -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -SW R0,0034 (SP) -JAL 70015C40 -OR A0,R0,R0 -LUI A1,8006 -ADDIU A1,A1,7D70 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -SW V0,0034 (SP) -LW A0,0038 (SP) -ADDIU A1,SP,0030 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LUI A1,8006 -ADDIU A1,A1,7D70 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -SW V0,0034 (SP) -LW A0,0038 (SP) -ADDIU A1,SP,0030 -JAL 7000DDD0 -ADDIU A2,R0,0001 -ADDIU A0,SP,002F -JAL 70015D3C -ADDIU A1,SP,001C -LW T6,003C (SP) -SLL T7,T6,0x2 -ADDU T8,SP,T7 -LBU T8,001E (T8) -ANDI T9,T8,0001 -BEQ T9,R0,70014894 -NOP -ANDI T0,T8,0002 -BEQ T0,R0,70014894 -NOP -BEQ R0,R0,700148F0 -ADDIU V0,R0,0002 -LW T1,003C (SP) -ADDIU T3,SP,001C -SLL T2,T1,0x2 -ADDU T4,T2,T3 -LBU T5,0003 (T4) -BNE T5,R0,700148C0 -NOP -LBU T6,0002 (T4) -ANDI T7,T6,0001 -BNE T7,R0,700148C8 -NOP -BEQ R0,R0,700148F0 -ADDIU V0,R0,0001 -LW T9,003C (SP) -SLL T8,T9,0x2 -ADDU T0,SP,T8 -LBU T0,001E (T0) -ANDI T1,T0,0004 -BEQ T1,R0,700148EC -NOP -BEQ R0,R0,700148F0 -ADDIU V0,R0,0004 -LW V0,0034 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -70014900 15500 - accepts: A0=p->thread list, A1=p->presence flags target, A2=p->status list target -ADDIU SP,SP,FF80 -LUI T6,8002 -LW T6,77B0 (T6) -SW RA,0024 (SP) -SW A0,0080 (SP) -SW A1,0084 (SP) -SW A2,0088 (SP) -BEQ T6,R0,7001492C -SW R0,0078 (SP) -BEQ R0,R0,70014AE8 ;return V0=0: no errors -OR V0,R0,R0 -//7001492C: -ADDIU T7,R0,0001 -LUI AT,8002 -JAL 7000EBB0 -SW T7,77B0 (AT) -LUI A1,0007 -LUI A2,8002 -LUI A3,8002 -SW V0,0070 (SP) -SW V1,0074 (SP) -LW A3,6984 (A3) -LW A2,6980 (A2) -ORI A1,A1,A120 -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -ADDIU A0,R0,0000 ;(A0,A1) = 000000000007A120 -//70014964: -SW V0,0030 (SP) -SW V1,0034 (SP) -LUI A3,000F -ORI A3,A3,4240 -LW A1,0034 (SP) -LW A0,0030 (SP) -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -ADDIU A2,R0,0000 ;(A2,A3) = 00000000000F4240 -//70014984: -LW T8,0070 (SP) -LW T9,0074 (SP) -SLTU AT,V0,T8 -BNE AT,R0,70014A58 -SLTU AT,T8,V0 -BNE AT,R0,700149A8 -SLTU AT,T9,V1 -BEQ AT,R0,70014A58 -NOP -//700149A8: -ADDIU A0,SP,0038 -ADDIU A1,SP,007C -JAL 7000D6D0 -ADDIU A2,R0,0001 -LUI A1,0007 -LUI A2,8002 -LUI A3,8002 -LW A3,6984 (A3) -LW A2,6980 (A2) -ORI A1,A1,A120 -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -ADDIU A0,R0,0000 ;(A0,A1) = 0000000000007A120 -//700149D8: -SW V0,0028 (SP) -SW V1,002C (SP) -LUI A3,000F -ORI A3,A3,4240 -LW A1,002C (SP) -LW A0,0028 (SP) -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -ADDIU A2,R0,0000 ;(A2,A3) = 00000000000F4240 -SW V0,0030 (SP) -SW V1,0034 (SP) -//70014A00: -LW T1,0034 (SP) -LW T0,0030 (SP) -LW T2,0070 (SP) -LW T3,0074 (SP) -ADDIU T4,R0,0000 -ADDIU T5,R0,0000 -ADDIU T6,SP,0038 -ADDIU T7,SP,007C -SUBU A2,T0,T2 -SLTU AT,T1,T3 -SUBU A2,A2,AT -SW T7,001C (SP) -SW T6,0018 (SP) -SW T5,0014 (SP) -SW T4,0010 (SP) -ADDIU A0,SP,0050 -JAL 70010C50 -SUBU A3,T1,T3 -ADDIU A0,SP,0038 -ADDIU A1,SP,007C -JAL 7000DDD0 -ADDIU A2,R0,0001 -//70014A58: write status request to PIF -ADDIU T8,R0,0004 -LUI AT,8006 -SB T8,7CE1 (AT) ;4->80067CE1: #channels -JAL 70014BC8 ;generate PIFram command: request status for #channels at 80067CE1 -OR A0,R0,R0 -LUI A1,8006 -ADDIU A1,A1,7CA0 ;A1=80067CA0: PIFram.cmd.buf -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -SW V0,0078 (SP) -LW A0,0080 (SP) ;A0= A0 f/caller -ADDIU A1,SP,007C -JAL 7000DDD0 -ADDIU A2,R0,0001 -//70014A90: read result from PIF -LUI A1,8006 -ADDIU A1,A1,7CA0 ;A1=80067CA0: PIFram.cmd.buf -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -SW V0,0078 (SP) -LW A0,0080 (SP) -ADDIU A1,SP,007C -JAL 7000DDD0 -ADDIU A2,R0,0001 -//70014AB4: retrieve device status list and presence flags -LW A0,0084 (SP) ;A0= A1 f/caller: p->device presense target -JAL 70014AF8 ;return device presence flags in A0, status list in A1 for current PIF status in buffer -LW A1,0088 (SP) ;A1= A2 f/caller: p->status list target -//70014AC0: -LUI AT,8006 -JAL 70015E10 -SB R0,7CE0 (AT) ;0->80067CE0 -LUI A0,8006 -LUI A1,8006 -ADDIU A1,A1,7D20 ;A1=80067D20 -ADDIU A0,A0,7D08 ;A0=80067D08 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LW V0,0078 (SP) ;V0=SP+78: SI error codes -//70014AE8: return -LW RA,0024 (SP) -ADDIU SP,SP,0080 -JR RA -NOP - -70014AF8 156F8 return device presence flags in A0, status list in A1 for current PIF status in buffer at 80067CA0 - accepts: A0=p->presence flag target, A1=p->status list target -LUI T7,8006 -LBU T7,7CE1 (T7) ;T7=80067CE1: #channels -ADDIU SP,SP,FFE8 -LUI T6,8006 -ADDIU T6,T6,7CA0 ;T6=80067CA0: PIFram.cmd.buf -SB R0,0007 (SP) ;init. presence flags -SW T6,0014 (SP) ;SP+14= PIFram.cmd.buf -BLEZ T7,70014BB8 ;return if no channels -SW R0,0008 (SP) ;init. count -//70014B1C: -LW T9,0014 (SP) ;T9= PIFram.cmd.buf -ADDIU T8,SP,000C ;T8=SP+C: buffer -LWL AT,0000 (T9) -LWR AT,0003 (T9) -SW AT,0000 (T8) -LWL T1,0004 (T9) -LWR T1,0007 (T9) -SW T1,0004 (T8) ;buffer[0:8] = PIFram.cmd.buf[0:8] -LBU T2,000E (SP) ;T2=buffer[2] -ANDI T3,T2,00C0 -SRA T4,T3,0x4 -SB T4,0003 (A1) ;A1+3 = error codes: 1 if I/O error | 2 if not present -LBU T5,0003 (A1) -BNE T5,R0,70014B8C ;skip if error occurred -NOP -LBU T6,0011 (SP) ;T6=buffer[5]: device type high -LBU T0,0010 (SP) ;T0=buffer[4]: device type low -ADDIU T3,R0,0001 -SLL T7,T6,0x8 -OR T8,T7,T0 -SH T8,0000 (A1) ;A1+0= device type byteswapped -LBU T9,0012 (SP) ;T9=buffer[6]: slot state -SB T9,0002 (A1) ;A1+2= slot state -LW T2,0008 (SP) ;T2=count -LBU T1,0007 (SP) -SLLV T4,T3,T2 ;T4= 1<thread list -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 70015E60 -SW R0,001C (SP) -LUI T6,8006 -LBU T6,7CE0 (T6) -BEQ T6,R0,70014D10 -NOP -JAL 70014BC8 ;generate PIFram command: request status for #channels at 80067CE1 -OR A0,R0,R0 -LUI A1,8006 -ADDIU A1,A1,7CA0 ;A1=80067CA0: PIFram.cmd.buf -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 ;A1= write -SW V0,001C (SP) -LW A0,0020 (SP) ;A0=p->thread list -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LUI A1,8006 -ADDIU A1,A1,7CA0 ;A1=80067CA0: PIFram.cmd.buf -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 ;A0= read -LUI AT,8006 -SW V0,001C (SP) -JAL 70015EA4 -SB R0,7CE0 (AT) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70014D44 15944 return status list in A0 for current PIF status in buffer - accepts: A0=p->status list target -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -LW A1,0020 (SP) ;A1=A0: target for status list -JAL 70014AF8 ;return device presence flags in A0, status list in A1 for current PIF status in buffer -ADDIU A0,SP,001F ;A0=SP+1F: throwaway buffer -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70014D70 15970 retrieve controller input from PIF, storing at 80067CA0 - accepts: A0=p->??? -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 70015E60 -SW R0,001C (SP) -LUI T6,8006 -LBU T6,7CE0 (T6) -ADDIU AT,R0,0001 -BEQ T6,AT,70014DC4 -NOP -JAL 70014EDC -NOP -LUI A1,8006 -ADDIU A1,A1,7CA0 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -SW V0,001C (SP) -LW A0,0020 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -SW R0,0018 (SP) -LW T8,0018 (SP) -LW T0,0018 (SP) -LUI AT,8006 -SLL T9,T8,0x2 -ADDU AT,AT,T9 -ADDIU T7,R0,00FF -SW T7,7CA0 (AT) -ADDIU T1,T0,0001 -SLTI AT,T1,0010 -BNE AT,R0,70014DC8 -SW T1,0018 (SP) -LUI AT,8006 -LUI A1,8006 -SW R0,7CDC (AT) -ADDIU A1,A1,7CA0 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -ADDIU T2,R0,0001 -LUI AT,8006 -SW V0,001C (SP) -JAL 70015EA4 -SB T2,7CE0 (AT) -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70014E34 -LUI T7,8006 -LBU T7,7CE1 (T7) -LUI T6,8006 -ADDIU SP,SP,FFF0 -ADDIU T6,T6,7CA0 -SW T6,000C (SP) -BLEZ T7,70014ED4 -SW R0,0000 (SP) -LW T9,000C (SP) -ADDIU T8,SP,0004 -LWL AT,0000 (T9) -LWR AT,0003 (T9) -SW AT,0000 (T8) -LWL T1,0004 (T9) -LWR T1,0007 (T9) -SW T1,0004 (T8) -LBU T2,0006 (SP) -ANDI T3,T2,00C0 -SRA T4,T3,0x4 -SB T4,0004 (A0) -LBU T5,0004 (A0) -BNE T5,R0,70014EA8 -NOP -LHU T6,0008 (SP) -SH T6,0000 (A0) -LB T7,000A (SP) -SB T7,0002 (A0) -LB T0,000B (SP) -SB T0,0003 (A0) -LW T8,0000 (SP) -LUI T3,8006 -LBU T3,7CE1 (T3) -LW T1,000C (SP) -ADDIU T9,T8,0001 -SLT AT,T9,T3 -ADDIU T2,T1,0008 -SW T2,000C (SP) -SW T9,0000 (SP) -BNE AT,R0,70014E54 -ADDIU A0,A0,0006 -JR RA -ADDIU SP,SP,0010 - -70014EDC -ADDIU SP,SP,FFF0 -LUI T6,8006 -ADDIU T6,T6,7CA0 -SW T6,000C (SP) -SW R0,0000 (SP) -LW T7,0000 (SP) -LW T9,0000 (SP) -LUI AT,8006 -SLL T8,T7,0x2 -ADDU AT,AT,T8 -SW R0,7CA0 (AT) -ADDIU T0,T9,0001 -SLTI AT,T0,0010 -BNE AT,R0,70014EF0 -SW T0,0000 (SP) -LUI T9,8006 -LBU T9,7CE1 (T9) -ADDIU T1,R0,0001 -LUI AT,8006 -ADDIU T2,R0,00FF -ADDIU T3,R0,0001 -ADDIU T4,R0,0004 -ADDIU T5,R0,0001 -ORI T6,R0,FFFF -ADDIU T7,R0,FFFF -ADDIU T8,R0,FFFF -SW T1,7CDC (AT) -SB T2,0004 (SP) -SB T3,0005 (SP) -SB T4,0006 (SP) -SB T5,0007 (SP) -SH T6,0008 (SP) -SB T7,000A (SP) -SB T8,000B (SP) -BLEZ T9,70014FB4 -SW R0,0000 (SP) -ADDIU T1,SP,0004 -LW AT,0000 (T1) -LW T0,000C (SP) -LUI T8,8006 -SWL AT,0000 (T0) -SWR AT,0003 (T0) -LW T3,0004 (T1) -SWL T3,0004 (T0) -SWR T3,0007 (T0) -LW T6,0000 (SP) -LBU T8,7CE1 (T8) -LW T4,000C (SP) -ADDIU T7,T6,0001 -SLT AT,T7,T8 -ADDIU T5,T4,0008 -SW T7,0000 (SP) -BNE AT,R0,70014F6C -SW T5,000C (SP) -LW T2,000C (SP) -ADDIU T9,R0,00FE -ADDIU SP,SP,0010 -JR RA -SB T9,0000 (T2) - -70014FD0 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 70015E60 -SW R0,001C (SP) -LW A0,0020 (SP) -JAL 700155FC -ADDIU A1,SP,0018 -SW V0,001C (SP) -LW T6,001C (SP) -BNE T6,R0,7001501C -NOP -LHU T7,0018 (SP) -ANDI T8,T7,8000 -BEQ T8,R0,7001501C -NOP -ADDIU T9,R0,0001 -BEQ R0,R0,70015020 -SW T9,001C (SP) -SW R0,001C (SP) -JAL 70015EA4 -NOP -LW RA,0014 (SP) -LW V0,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70015040 -ADDIU SP,SP,FFC8 -SW A1,003C (SP) -LBU T7,003F (SP) -LUI T6,8006 -ADDIU T6,T6,7D30 -SLTI AT,T7,0041 -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A2,0040 (SP) -SW R0,0034 (SP) -SW R0,0030 (SP) -BNE AT,R0,7001507C -SW T6,002C (SP) -BEQ R0,R0,70015220 -ADDIU V0,R0,FFFF -JAL 70015E60 -NOP -LW A0,0038 (SP) -JAL 700155FC -ADDIU A1,SP,0028 -SW V0,0034 (SP) -LW T8,0034 (SP) -BNE T8,R0,700150B0 -NOP -LHU T9,0028 (SP) -ORI AT,R0,8000 -BEQ T9,AT,700150B8 -NOP -BEQ R0,R0,70015220 -ADDIU V0,R0,0008 -LBU T0,002A (SP) -ANDI T1,T0,0080 -BEQ T1,R0,700150E4 -NOP -LW A0,0038 (SP) -JAL 700155FC -ADDIU A1,SP,0028 -LBU T2,002A (SP) -ANDI T3,T2,0080 -BNE T3,R0,700150C8 -NOP -JAL 70015230 -LBU A0,003F (SP) -LUI A1,8006 -ADDIU A1,A1,7D30 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -SW V0,0034 (SP) -LW A0,0038 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -SW R0,0030 (SP) -LW T5,0030 (SP) -LW T7,0030 (SP) -LUI AT,8006 -SLL T6,T5,0x2 -ADDU AT,AT,T6 -ADDIU T4,R0,00FF -SW T4,7D30 (AT) -ADDIU T8,T7,0001 -SLTI AT,T8,0010 -BNE AT,R0,70015114 -SW T8,0030 (SP) -LUI AT,8006 -LUI A1,8006 -SW R0,7D6C (AT) -ADDIU A1,A1,7D30 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -ADDIU T9,R0,0004 -LUI AT,8006 -SW V0,0034 (SP) -SB T9,7CE0 (AT) -LW A0,0038 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -SW R0,0030 (SP) -LW T2,0030 (SP) -LW T0,002C (SP) -ADDIU T3,T2,0001 -SLTI AT,T3,0004 -ADDIU T1,T0,0001 -SW T3,0030 (SP) -BNE AT,R0,7001517C -SW T1,002C (SP) -LW T4,002C (SP) -ADDIU T5,SP,001C -LWL AT,0000 (T4) -LWR AT,0003 (T4) -SW AT,0000 (T5) -LWL T7,0004 (T4) -LWR T7,0007 (T4) -SW T7,0004 (T5) -LWL AT,0008 (T4) -LWR AT,000B (T4) -SW AT,0008 (T5) -LBU T8,001D (SP) -ANDI T9,T8,00C0 -SRA T0,T9,0x4 -BNE T0,R0,70015214 -SW T0,0034 (SP) -SW R0,0030 (SP) -LW T1,0030 (SP) -LW T3,0040 (SP) -ADDU T2,SP,T1 -LBU T2,0020 (T2) -SB T2,0000 (T3) -LW T4,0030 (SP) -LW T6,0040 (SP) -ADDIU T7,T4,0001 -SLTI AT,T7,0008 -ADDIU T5,T6,0001 -SW T7,0030 (SP) -BNE AT,R0,700151E0 -SW T5,0040 (SP) -JAL 70015EA4 -NOP -LW V0,0034 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -70015230 -ADDIU SP,SP,FFE8 -LUI T6,8006 -ADDIU T6,T6,7D30 -ANDI A0,A0,00FF -SW T6,0014 (SP) -SW R0,0004 (SP) -LW T8,0004 (SP) -LW T0,0004 (SP) -LUI AT,8006 -SLL T9,T8,0x2 -ADDU AT,AT,T9 -ADDIU T7,R0,00FF -SW T7,7D30 (AT) -ADDIU T1,T0,0001 -SLTI AT,T1,0010 -BNE AT,R0,70015248 -SW T1,0004 (SP) -ADDIU T2,R0,0001 -LUI AT,8006 -ADDIU T3,R0,0002 -ADDIU T4,R0,0008 -ADDIU T5,R0,0004 -SW T2,7D6C (AT) -SB T3,0008 (SP) -SB T4,0009 (SP) -SB T5,000A (SP) -SB A0,000B (SP) -SW R0,0004 (SP) -LW T6,0004 (SP) -ADDU T8,SP,T6 -SB R0,000C (T8) -LW T7,0004 (SP) -ADDIU T9,T7,0001 -SLTI AT,T9,0008 -BNE AT,R0,700152A0 -SW T9,0004 (SP) -SW R0,0004 (SP) -LW T0,0014 (SP) -SB R0,0000 (T0) -LW T3,0004 (SP) -LW T1,0014 (SP) -ADDIU T4,T3,0001 -SLTI AT,T4,0004 -ADDIU T2,T1,0001 -SW T4,0004 (SP) -BNE AT,R0,700152C4 -SW T2,0014 (SP) -ADDIU T6,SP,0008 -LW AT,0000 (T6) -LW T5,0014 (SP) -ADDIU T1,R0,00FE -SWL AT,0000 (T5) -SWR AT,0003 (T5) -LW T7,0004 (T6) -SWL T7,0004 (T5) -SWR T7,0007 (T5) -LW AT,0008 (T6) -SWL AT,0008 (T5) -SWR AT,000B (T5) -LW T9,0014 (SP) -ADDIU T0,T9,000C -SW T0,0014 (SP) -SB T1,0000 (T0) -JR RA -ADDIU SP,SP,0018 - -70015340 -ADDIU SP,SP,FFC8 -SW A1,003C (SP) -LBU T7,003F (SP) -LUI T6,8006 -ADDIU T6,T6,7D30 -SLTI AT,T7,0041 -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A2,0040 (SP) -SW R0,0034 (SP) -BNE AT,R0,70015378 -SW T6,002C (SP) -BEQ R0,R0,700154E0 -ADDIU V0,R0,FFFF -JAL 70015E60 -NOP -LW A0,0038 (SP) -JAL 700155FC -ADDIU A1,SP,001C -SW V0,0034 (SP) -LW T8,0034 (SP) -BNE T8,R0,700153AC -NOP -LHU T9,001C (SP) -ORI AT,R0,8000 -BEQ T9,AT,700153B4 -NOP -BEQ R0,R0,700154E0 -ADDIU V0,R0,0008 -LBU T0,001E (SP) -ANDI T1,T0,0080 -BEQ T1,R0,700153E0 -NOP -LW A0,0038 (SP) -JAL 700155FC -ADDIU A1,SP,001C -LBU T2,001E (SP) -ANDI T3,T2,0080 -BNE T3,R0,700153C4 -NOP -LBU A0,003F (SP) -JAL 700154F0 -LW A1,0040 (SP) -LUI A1,8006 -ADDIU A1,A1,7D30 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -SW V0,0034 (SP) -LW A0,0038 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -SW R0,0030 (SP) -LW T5,0030 (SP) -LW T7,0030 (SP) -LUI AT,8006 -SLL T6,T5,0x2 -ADDU AT,AT,T6 -ADDIU T4,R0,00FF -SW T4,7D30 (AT) -ADDIU T8,T7,0001 -SLTI AT,T8,0010 -BNE AT,R0,70015414 -SW T8,0030 (SP) -LUI AT,8006 -LUI A1,8006 -SW R0,7D6C (AT) -ADDIU A1,A1,7D30 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -ADDIU T9,R0,0005 -LUI AT,8006 -SW V0,0034 (SP) -SB T9,7CE0 (AT) -LW A0,0038 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -SW R0,0030 (SP) -LW T2,0030 (SP) -LW T0,002C (SP) -ADDIU T3,T2,0001 -SLTI AT,T3,0004 -ADDIU T1,T0,0001 -SW T3,0030 (SP) -BNE AT,R0,7001547C -SW T1,002C (SP) -LW T4,002C (SP) -ADDIU T5,SP,0020 -LWL AT,0000 (T4) -LWR AT,0003 (T4) -SW AT,0000 (T5) -LWL T7,0004 (T4) -LWR T7,0007 (T4) -SW T7,0004 (T5) -LWL AT,0008 (T4) -LWR AT,000B (T4) -SW AT,0008 (T5) -LBU T8,0021 (SP) -ANDI T9,T8,00C0 -SRA T0,T9,0x4 -JAL 70015EA4 -SW T0,0034 (SP) -LW V0,0034 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -700154F0 -ADDIU SP,SP,FFE8 -LUI T6,8006 -ADDIU T6,T6,7D30 -ANDI A0,A0,00FF -SW T6,0014 (SP) -SW R0,0004 (SP) -LW T8,0004 (SP) -LW T0,0004 (SP) -LUI AT,8006 -SLL T9,T8,0x2 -ADDU AT,AT,T9 -ADDIU T7,R0,00FF -SW T7,7D30 (AT) -ADDIU T1,T0,0001 -SLTI AT,T1,0010 -BNE AT,R0,70015508 -SW T1,0004 (SP) -ADDIU T2,R0,0001 -LUI AT,8006 -ADDIU T3,R0,000A -ADDIU T4,R0,0001 -ADDIU T5,R0,0005 -SW T2,7D6C (AT) -SB T3,0008 (SP) -SB T4,0009 (SP) -SB T5,000A (SP) -SB A0,000B (SP) -SW R0,0004 (SP) -LW T8,0004 (SP) -LBU T6,0000 (A1) -ADDIU A1,A1,0001 -ADDU T7,SP,T8 -SB T6,000C (T7) -LW T9,0004 (SP) -ADDIU T0,T9,0001 -SLTI AT,T0,0008 -BNE AT,R0,70015560 -SW T0,0004 (SP) -SW R0,0004 (SP) -LW T1,0014 (SP) -SB R0,0000 (T1) -LW T4,0004 (SP) -LW T2,0014 (SP) -ADDIU T5,T4,0001 -SLTI AT,T5,0004 -ADDIU T3,T2,0001 -SW T5,0004 (SP) -BNE AT,R0,7001558C -SW T3,0014 (SP) -ADDIU T8,SP,0008 -LW AT,0000 (T8) -LW T6,0014 (SP) -ADDIU T2,R0,00FE -SWL AT,0000 (T6) -SWR AT,0003 (T6) -LW T9,0004 (T8) -SWL T9,0004 (T6) -SWR T9,0007 (T6) -LW AT,0008 (T8) -SWL AT,0008 (T6) -SWR AT,000B (T6) -LW T0,0014 (SP) -ADDIU T1,T0,000C -SW T1,0014 (SP) -SB T2,0000 (T1) -JR RA -ADDIU SP,SP,0018 - -700155FC -ADDIU SP,SP,FFD0 -LUI T6,8006 -ADDIU T6,T6,7D30 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -SW R0,002C (SP) -SW T6,0024 (SP) -SW R0,0028 (SP) -LW T7,0028 (SP) -LW T9,0028 (SP) -LUI AT,8006 -SLL T8,T7,0x2 -ADDU AT,AT,T8 -SW R0,7D30 (AT) -ADDIU T0,T9,0001 -SLTI AT,T0,0010 -BNE AT,R0,70015620 -SW T0,0028 (SP) -LUI T2,8006 -ADDIU T1,R0,0001 -LUI AT,8006 -ADDIU T2,T2,7D30 -SW T1,7D6C (AT) -SW T2,0024 (SP) -SW R0,0028 (SP) -LW T3,0024 (SP) -SB R0,0000 (T3) -LW T6,0028 (SP) -LW T4,0024 (SP) -ADDIU T7,T6,0001 -SLTI AT,T7,0004 -ADDIU T5,T4,0001 -SW T7,0028 (SP) -BNE AT,R0,70015664 -SW T5,0024 (SP) -ADDIU T8,R0,00FF -ADDIU T9,R0,0001 -ADDIU T0,R0,0003 -ADDIU T1,R0,00FF -ADDIU T2,R0,00FF -ADDIU T3,R0,00FF -ADDIU T4,R0,00FF -SB T8,001C (SP) -SB T9,001D (SP) -SB T0,001E (SP) -SB R0,001F (SP) -SB T1,0020 (SP) -SB T2,0021 (SP) -SB T3,0022 (SP) -SB T4,0023 (SP) -ADDIU T6,SP,001C -LW AT,0000 (T6) -LW T5,0024 (SP) -ADDIU T2,R0,00FE -LUI A1,8006 -SWL AT,0000 (T5) -SWR AT,0003 (T5) -LW T9,0004 (T6) -ADDIU A1,A1,7D30 -ADDIU A0,R0,0001 -SWL T9,0004 (T5) -SWR T9,0007 (T5) -LW T0,0024 (SP) -ADDIU T1,T0,0008 -SW T1,0024 (SP) -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -SB T2,0000 (T1) -SW V0,002C (SP) -LW A0,0030 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -ADDIU T3,R0,0005 -LUI AT,8006 -LUI A1,8006 -SB T3,7CE0 (AT) -ADDIU A1,A1,7D30 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -SW V0,002C (SP) -LW A0,0030 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T4,002C (SP) -BEQ T4,R0,70015764 -NOP -BEQ R0,R0,70015810 -OR V0,T4,R0 -LUI T8,8006 -ADDIU T8,T8,7D30 -SW T8,0024 (SP) -SW R0,0028 (SP) -LW T7,0024 (SP) -SB R0,0000 (T7) -LW T9,0028 (SP) -LW T5,0024 (SP) -ADDIU T0,T9,0001 -SLTI AT,T0,0004 -ADDIU T6,T5,0001 -SW T0,0028 (SP) -BNE AT,R0,70015774 -SW T6,0024 (SP) -LW T1,0024 (SP) -ADDIU T2,SP,001C -LWL AT,0000 (T1) -LWR AT,0003 (T1) -SW AT,0000 (T2) -LWL T4,0004 (T1) -LWR T4,0007 (T1) -SW T4,0004 (T2) -LBU T8,001E (SP) -LW T6,0034 (SP) -ANDI T7,T8,00C0 -SRA T5,T7,0x4 -SB T5,0003 (T6) -LBU T9,0021 (SP) -LBU T3,0020 (SP) -LW T1,0034 (SP) -SLL T0,T9,0x8 -OR T2,T0,T3 -SH T2,0000 (T1) -LW T8,0034 (SP) -LBU T4,0022 (SP) -SB T4,0002 (T8) -LW T7,0034 (SP) -LBU T5,0003 (T7) -BEQ T5,R0,7001580C -NOP -BEQ R0,R0,70015810 -OR V0,T5,R0 -OR V0,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70015820 -ADDIU SP,SP,FFC0 -SW A1,0044 (SP) -LBU T6,0047 (SP) -SW RA,0024 (SP) -SW A0,0040 (SP) -SLTI AT,T6,0041 -SW A2,0048 (SP) -SW A3,004C (SP) -BNE AT,R0,70015850 -SW R0,003C (SP) -BEQ R0,R0,7001594C -ADDIU V0,R0,FFFF -LW T7,004C (SP) -BLEZ T7,70015948 -NOP -LW A0,0040 (SP) -LBU A1,0047 (SP) -JAL 70015040 -LW A2,0048 (SP) -SW V0,003C (SP) -LW T8,003C (SP) -BEQ T8,R0,70015884 -NOP -BEQ R0,R0,7001594C -OR V0,T8,R0 -LW T9,004C (SP) -LBU T1,0047 (SP) -LW T3,0048 (SP) -LUI A2,8002 -LUI A3,8002 -ADDIU T0,T9,FFF8 -ADDIU T2,T1,0001 -ADDIU T4,T3,0008 -SW T0,004C (SP) -SB T2,0047 (SP) -SW T4,0048 (SP) -LW A3,6984 (A3) -LW A2,6980 (A2) -ADDIU A0,R0,0000 -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -ADDIU A1,R0,2EE0 -SW V0,0028 (SP) -SW V1,002C (SP) -LUI A3,000F -ORI A3,A3,4240 -LW A1,002C (SP) -LW A0,0028 (SP) -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -ADDIU A2,R0,0000 -LUI T5,8006 -LUI T8,8006 -ADDIU T8,T8,7D20 -ADDIU T5,T5,7D08 -SW V0,0030 (SP) -SW V1,0034 (SP) -LUI A0,8006 -ADDIU T6,R0,0000 -ADDIU T7,R0,0000 -SW T7,0014 (SP) -SW T6,0010 (SP) -ADDIU A0,A0,7CE8 -LW A3,0034 (SP) -LW A2,0030 (SP) -SW T5,0018 (SP) -JAL 70010C50 -SW T8,001C (SP) -LUI A0,8006 -ADDIU A0,A0,7D08 -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T9,004C (SP) -BGTZ T9,7001585C -NOP -LW V0,003C (SP) -LW RA,0024 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -70015960 -ADDIU SP,SP,FFC0 -SW A1,0044 (SP) -LBU T6,0047 (SP) -SW RA,0024 (SP) -SW A0,0040 (SP) -SLTI AT,T6,0041 -SW A2,0048 (SP) -SW A3,004C (SP) -BNE AT,R0,70015990 -SW R0,003C (SP) -BEQ R0,R0,70015A8C -ADDIU V0,R0,FFFF -LW T7,004C (SP) -BLEZ T7,70015A88 -NOP -LW A0,0040 (SP) -LBU A1,0047 (SP) -JAL 70015340 -LW A2,0048 (SP) -SW V0,003C (SP) -LW T8,003C (SP) -BEQ T8,R0,700159C4 -NOP -BEQ R0,R0,70015A8C -OR V0,T8,R0 -LW T9,004C (SP) -LBU T1,0047 (SP) -LW T3,0048 (SP) -LUI A2,8002 -LUI A3,8002 -ADDIU T0,T9,FFF8 -ADDIU T2,T1,0001 -ADDIU T4,T3,0008 -SW T0,004C (SP) -SB T2,0047 (SP) -SW T4,0048 (SP) -LW A3,6984 (A3) -LW A2,6980 (A2) -ADDIU A0,R0,0000 -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -ADDIU A1,R0,2EE0 -SW V0,0028 (SP) -SW V1,002C (SP) -LUI A3,000F -ORI A3,A3,4240 -LW A1,002C (SP) -LW A0,0028 (SP) -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -ADDIU A2,R0,0000 -LUI T5,8006 -LUI T8,8006 -ADDIU T8,T8,7D20 -ADDIU T5,T5,7D08 -SW V0,0030 (SP) -SW V1,0034 (SP) -LUI A0,8006 -ADDIU T6,R0,0000 -ADDIU T7,R0,0000 -SW T7,0014 (SP) -SW T6,0010 (SP) -ADDIU A0,A0,7CE8 -LW A3,0034 (SP) -LW A2,0030 (SP) -SW T5,0018 (SP) -JAL 70010C50 -SW T8,001C (SP) -LUI A0,8006 -ADDIU A0,A0,7D08 -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T9,004C (SP) -BGTZ T9,7001599C -NOP -LW V0,003C (SP) -LW RA,0024 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -70015AA0 166A0 set flags for each present device in A1; V0=-1 if SI error occurred - accepts: A0=p->thread list, A1=p->buffer for presence flags - A1= flag set if device present; 03 indicates controllers 1&2 present -ADDIU SP,SP,FFC0 -SW RA,0014 (SP) -ADDIU T6,R0,0003 -SW A0,0040 (SP) -SW A1,0044 (SP) -SW R0,003C (SP) -SB R0,001F (SP) ;init. presence flags -JAL 70015E60 -SW T6,0018 (SP) ;SP+18= 3: #tested channels -//70015AC4: generate and write a status request to PIFram -JAL 70015C40 ;generate PIFram command: request status for #channels at 80067CE1 -OR A0,R0,R0 -LUI A1,8006 -ADDIU A1,A1,7D70 ;A1=80067D70: p->PIFram.cmd.buf -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 ;A0= write -SW V0,003C (SP) ;SP+3C= error code -LW A0,0040 (SP) -ADDIU A1,SP,0038 -JAL 7000DDD0 -ADDIU A2,R0,0001 -//70015AF0: read result back from PIFram -LUI A1,8006 -ADDIU A1,A1,7D70 ;A1=80067D70: p->PIFram.cmd.buf -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 ;A0= read -SW V0,003C (SP) ;SP+3C= error code -LW A0,0040 (SP) -ADDIU A1,SP,0038 -JAL 7000DDD0 -ADDIU A2,R0,0001 -//70015B14: create status list from result -ADDIU A0,SP,0037 -JAL 70015D3C ;generates status list from ram PIFram output at A1 -ADDIU A1,SP,0024 ;A1=SP+24: buffer -LUI T7,8006 -LBU T7,7CE1 (T7) ;T7=80067CE1: #channels -SW R0,0020 (SP) ;init. count -BLEZ T7,70015B80 -NOP -//70015B34: -LW T8,0020 (SP) ;T8= count -SLL T9,T8,0x2 -ADDU T0,SP,T9 -LBU T0,0026 (T0) ;T0= entry[count]+2: slot state -ANDI T1,T0,0004 -BNE T1,R0,70015B60 ;skip if address crc error occured -NOP -LW T2,0018 (SP) -ADDIU T3,T2,FFFF -BEQ R0,R0,70015B80 -SW T3,0018 (SP) ;remaining-=1 -//70015B60: check next channel if address crc error occured -LW T4,0020 (SP) -LUI T6,8006 -LBU T6,7CE1 (T6) ;T6=80067CE1: #channels -ADDIU T5,T4,0001 -SW T5,0020 (SP) ;count+=1 -SLT AT,T5,T6 -BNE AT,R0,70015B34 ;loop for remaining channels -NOP -//70015B80: -LUI T7,8006 -LBU T7,7CE1 (T7) ;T7=80067CE1: #channels -LW T8,0020 (SP) -BNE T7,T8,70015B98 ;skip if not final channel -NOP -SW R0,0018 (SP) ;remaining=0 -//70015B98: -LW T9,0018 (SP) -BGTZ T9,70015AC4 ;generate a new report for remaining -NOP -LUI T0,8006 -LBU T0,7CE1 (T0) ;T0=80067CE1: #channels -SW R0,0020 (SP) ;init. count -BLEZ T0,70015C18 -NOP -//70015BB8: set flag for each present channel -LW T1,0020 (SP) ;T1=count -ADDIU T3,SP,0024 -SLL T2,T1,0x2 -ADDU T4,T2,T3 -LBU T5,0003 (T4) ;T5=entry[count]+3: error byte -BNE T5,R0,70015BF8 ;skip if not present or error occured -NOP -LBU T6,0002 (T4) ;T6=entry[count]+2: slot state -ANDI T7,T6,0001 -BEQ T7,R0,70015BF8 ;skip if slot not filled -NOP -LBU T8,001F (SP) -ADDIU T9,R0,0001 -SLLV T0,T9,T1 ;T0= 1< A1 f/caller -//70015C2C: return -LW RA,0014 (SP) -LW V0,003C (SP) ;V0= error code from SI actions above -ADDIU SP,SP,0040 -JR RA -NOP - -70015C40 16840 generate PIFram command: request status for #channels at 80067CE1 - accepts: A0=??? -ADDIU SP,SP,FFF0 -ANDI A0,A0,00FF -LUI AT,8006 -SB A0,7CE0 (AT) -SW R0,0000 (SP) -LW T6,0000 (SP) -LW T8,0000 (SP) -LUI AT,8006 -SLL T7,T6,0x2 -ADDU AT,AT,T7 -SW R0,7D70 (AT) -ADDIU T9,T8,0001 -SLTI AT,T9,0010 -BNE AT,R0,70015C54 -SW T9,0000 (SP) -LUI T9,8006 -LBU T9,7CE1 (T9) -LUI T1,8006 -ADDIU T0,R0,0001 -LUI AT,8006 -ADDIU T1,T1,7D70 -ADDIU T2,R0,00FF -ADDIU T3,R0,0001 -ADDIU T4,R0,0003 -ADDIU T5,R0,00FF -ADDIU T6,R0,00FF -ADDIU T7,R0,00FF -ADDIU T8,R0,00FF -SW T0,7DAC (AT) -SW T1,000C (SP) -SB T2,0004 (SP) -SB T3,0005 (SP) -SB T4,0006 (SP) -SB A0,0007 (SP) -SB T5,0008 (SP) -SB T6,0009 (SP) -SB T7,000A (SP) -SB T8,000B (SP) -BLEZ T9,70015D28 -SW R0,0000 (SP) -ADDIU T1,SP,0004 -LW AT,0000 (T1) -LW T0,000C (SP) -LUI T8,8006 -SWL AT,0000 (T0) -SWR AT,0003 (T0) -LW T3,0004 (T1) -SWL T3,0004 (T0) -SWR T3,0007 (T0) -LW T6,0000 (SP) -LBU T8,7CE1 (T8) -LW T4,000C (SP) -ADDIU T7,T6,0001 -SLT AT,T7,T8 -ADDIU T5,T4,0008 -SW T7,0000 (SP) -BNE AT,R0,70015CE0 -SW T5,000C (SP) -LW T2,000C (SP) -ADDIU T9,R0,00FE -ADDIU SP,SP,0010 -JR RA -SB T9,0000 (T2) - -70015D3C 1693C generates status list from ram PIFram output at A1 - accepts: A0=???, A1=p->target - status list format: - 0x0 2 controller type (byteswapped from PIFram) - 0x2 1 controller slot state - 0x3 1 error byte: 8-not present, 4-I/O error -LUI T7,8006 -LBU T7,7CE1 (T7) -ADDIU SP,SP,FFE8 -LUI T6,8006 -ADDIU T6,T6,7D70 -SB R0,0007 (SP) -SW T6,0014 (SP) -BLEZ T7,70015DFC -SW R0,0008 (SP) -LW T9,0014 (SP) -ADDIU T8,SP,000C -LWL AT,0000 (T9) -LWR AT,0003 (T9) -SW AT,0000 (T8) -LWL T1,0004 (T9) -LWR T1,0007 (T9) -SW T1,0004 (T8) -LBU T2,000E (SP) -ANDI T3,T2,00C0 -SRA T4,T3,0x4 -SB T4,0003 (A1) -LBU T5,0003 (A1) -BNE T5,R0,70015DD0 -NOP -LBU T6,0011 (SP) -LBU T0,0010 (SP) -ADDIU T3,R0,0001 -SLL T7,T6,0x8 -OR T8,T7,T0 -SH T8,0000 (A1) -LBU T9,0012 (SP) -SB T9,0002 (A1) -LW T2,0008 (SP) -LBU T1,0007 (SP) -SLLV T4,T3,T2 -OR T5,T1,T4 -SB T5,0007 (SP) -LW T6,0008 (SP) -LUI T9,8006 -LBU T9,7CE1 (T9) -LW T0,0014 (SP) -ADDIU T7,T6,0001 -SLT AT,T7,T9 -ADDIU T8,T0,0008 -SW T8,0014 (SP) -SW T7,0008 (SP) -BNE AT,R0,70015D60 -ADDIU A1,A1,0004 -LBU T3,0007 (SP) -ADDIU SP,SP,0018 -JR RA -SB T3,0000 (A0) - -70015E10 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU T6,R0,0001 -LUI AT,8002 -LUI A0,8006 -LUI A1,8006 -SW T6,77C0 (AT) ;1->800277C0: -ADDIU A1,A1,7DB0 ;A1=80057DB0 -ADDIU A0,A0,7DB8 ;A0=80057DB8 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8006 -ADDIU A0,A0,7DB8 ;A0=80057DB8: -OR A1,R0,R0 -JAL 7000DF10 -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70015E60 -LUI T6,8002 -LW T6,77C0 (T6) ;T6=800277C0: -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BNE T6,R0,70015E80 -NOP -JAL 70015E10 -NOP -//70015E80: -LUI A0,8006 -ADDIU A0,A0,7DB8 ;A0=80057DB8: -ADDIU A1,SP,001C ;A1=SP+1C: buffer -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70015EA4 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8006 -ADDIU A0,A0,7DB8 ;A0=80057DB8: -OR A1,R0,R0 -JAL 7000DF10 -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70015ED0 16AD0 read or write (A0) between PIFram and rdram address A1; V0=-1 on error, 0 on success - accepts: A0=mode (0-read; 1-write), A1=p->rdram address -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -JAL 7001F720 ;V0= TRUE if SI not ready, FALSE otherwise -SW A1,001C (SP) -BEQ V0,R0,70015EF4 -NOP -BEQ R0,R0,70015F6C ;return -1 if SI not ready -ADDIU V0,R0,FFFF -//70015EF4: -LW T6,0018 (SP) ;T6= mode -ADDIU AT,R0,0001 -BNE T6,AT,70015F10 ;skip if reading -NOP -LW A0,001C (SP) -JAL 70010BD0 ;cache A1 bytes at A0 prior to hardware write request -ADDIU A1,R0,0040 -//70015F10: set address for read or write -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,001C (SP) ;A0= rdram address -LUI T7,A480 -SW V0,0000 (T7) ;V0->A4800000: SI rdram address -LW T8,0018 (SP) ;T8= mode -BNE T8,R0,70015F40 ;branch if writing -NOP -//70015F2C: read -LUI T9,1FC0 -ORI T9,T9,07C0 ;T9=1FC007C0: PIFram -LUI T0,A480 -BEQ R0,R0,70015F50 -SW T9,0004 (T0) ;PIFram.addy->A4800004: SI PIF read address -//70015F40: write -LUI T1,1FC0 -ORI T1,T1,07C0 ;T1=1FC007C0: PIFram -LUI T2,A480 -SW T1,0010 (T2) ;PIFram.addy->A4800010: SI PIF write address -//70015F50: set hit write invalidate -LW T3,0018 (SP) -BNE T3,R0,70015F68 -NOP -LW A0,001C (SP) -JAL 70010B20 ;cache A1 bytes at A0 prior to hardware read request -ADDIU A1,R0,0040 -OR V0,R0,R0 ;V0=0: okay! -//70015F6C: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70015F80 16B80 V0= PIFram address.CRC for address A0 -ADDIU SP,SP,FFF0 -ANDI A0,A0,FFFF -SB R0,000F (SP) -SW R0,0008 (SP) -LBU T6,000F (SP) -ANDI T7,T6,0010 -BEQ T7,R0,70015FAC -NOP -ADDIU T8,R0,0015 -BEQ R0,R0,70015FB0 -SB T8,000E (SP) -SB R0,000E (SP) -LBU T9,000F (SP) -ANDI T1,A0,0400 -SLL T0,T9,0x1 -BEQ T1,R0,70015FCC -SB T0,000F (SP) -BEQ R0,R0,70015FD0 -ADDIU A1,R0,0001 -OR A1,R0,R0 -LBU T2,000F (SP) -LW T0,0008 (SP) -LBU T7,000E (SP) -ANDI T3,A1,00FF -SLL T5,A0,0x1 -OR T4,T2,T3 -OR A0,T5,R0 -ANDI T8,T4,00FF -ADDIU T1,T0,0001 -SLTI AT,T1,0010 -SB T4,000F (SP) -ANDI T6,A0,FFFF -XOR T9,T8,T7 -SW T1,0008 (SP) -OR A0,T6,R0 -BNE AT,R0,70015F90 -SB T9,000F (SP) -LBU V0,000F (SP) -ADDIU SP,SP,0010 -ANDI T2,V0,001F -OR V0,T2,R0 -ANDI T3,V0,00FF -JR RA -OR V0,T3,R0 - -70016030 16C30 V0= PIFram data.CRC for data at A0 -ADDIU SP,SP,FFF0 -SB R0,000F (SP) -SW R0,0008 (SP) -ADDIU T6,R0,0007 -SW T6,0004 (SP) -LBU T7,000F (SP) -ANDI T8,T7,0080 -BEQ T8,R0,70016060 -NOP -ADDIU T9,R0,0085 -BEQ R0,R0,70016064 -SB T9,000E (SP) -SB R0,000E (SP) -LBU T0,000F (SP) -LW T2,0008 (SP) -ADDIU AT,R0,0020 -SLL T1,T0,0x1 -BNE T2,AT,70016088 -SB T1,000F (SP) -ANDI T3,T1,00FF -BEQ R0,R0,700160BC -SB T3,000F (SP) -LW T5,0004 (SP) -LBU T4,0000 (A0) -ADDIU T6,R0,0001 -SLLV T7,T6,T5 -AND T8,T4,T7 -BEQ T8,R0,700160AC -NOP -BEQ R0,R0,700160B0 -ADDIU A1,R0,0001 -OR A1,R0,R0 -LBU T9,000F (SP) -OR T0,T9,A1 -SB T0,000F (SP) -LW T6,0004 (SP) -LBU T2,000F (SP) -LBU T1,000E (SP) -ADDIU T5,T6,FFFF -SW T5,0004 (SP) -XOR T3,T2,T1 -BGEZ T5,70016044 -SB T3,000F (SP) -LW T4,0008 (SP) -ADDIU A0,A0,0001 -ADDIU T7,T4,0001 -SLTI AT,T7,0021 -BNE AT,R0,7001603C -SW T7,0008 (SP) -LBU V0,000F (SP) -JR RA -ADDIU SP,SP,0010 - -70016100 16D00 sends data A3 to controller slot A1 at address A2, returning status -ADDIU SP,SP,FFA0 -LW T8,0070 (SP) -LUI T6,8006 -ADDIU T6,T6,7D70 -ADDIU T7,R0,0002 -ADDIU AT,R0,0001 -SW RA,001C (SP) -SW A0,0060 (SP) -SW A1,0064 (SP) -SW A2,0068 (SP) -SW A3,006C (SP) -SW S0,0018 (SP) -SW R0,005C (SP) -SW T6,0054 (SP) -BEQ T8,AT,70016160 -SW T7,0028 (SP) -LHU T9,006A (SP) -SLTI AT,T9,0007 -BEQ AT,R0,70016160 -NOP -BEQ T9,R0,70016160 -NOP -BEQ R0,R0,7001631C -OR V0,R0,R0 -JAL 70015E60 -NOP -ADDIU T0,R0,0003 -LUI AT,8006 -SB T0,7CE0 (AT) -LW A0,0064 (SP) -LHU A1,006A (SP) -JAL 70016330 ;generate PIFram command: request write data at A2 to block A1 of controller A0's slot -LW A2,006C (SP) -LUI A1,8006 -ADDIU A1,A1,7D70 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -SW V0,005C (SP) -LW A0,0060 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -SW R0,0058 (SP) -LW T2,0058 (SP) -LW T4,0058 (SP) -LUI AT,8006 -SLL T3,T2,0x2 -ADDU AT,AT,T3 -ADDIU T1,R0,00FF -SW T1,7D70 (AT) -ADDIU T5,T4,0001 -SLTI AT,T5,0010 -BNE AT,R0,700161AC -SW T5,0058 (SP) -LUI AT,8006 -LUI A1,8006 -SW R0,7DAC (AT) -ADDIU A1,A1,7D70 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -SW V0,005C (SP) -LW A0,0060 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T7,0064 (SP) -LUI T6,8006 -ADDIU T6,T6,7D70 -BEQ T7,R0,70016244 -SW T6,0054 (SP) -BLEZ T7,70016244 -SW R0,0058 (SP) -LW T0,0058 (SP) -LW T1,0064 (SP) -LW T8,0054 (SP) -ADDIU T2,T0,0001 -SLT AT,T2,T1 -ADDIU T9,T8,0001 -SW T2,0058 (SP) -BNE AT,R0,70016220 -SW T9,0054 (SP) -LW T4,0054 (SP) -ADDIU T3,SP,002C -ADDIU T6,T4,0024 -LWL AT,0000 (T4) -LWR AT,0003 (T4) -ADDIU T4,T4,000C -ADDIU T3,T3,000C -SW AT,FFF4 (T3) -LWL AT,FFF8 (T4) -LWR AT,FFFB (T4) -SW AT,FFF8 (T3) -LWL AT,FFFC (T4) -LWR AT,FFFF (T4) -BNE T4,T6,70016250 -SW AT,FFFC (T3) -LWL AT,0000 (T4) -LWR AT,0003 (T4) -SW AT,0000 (T3) -LBU T7,002E (SP) -ANDI T8,T7,00C0 -SRA T9,T8,0x4 -BNE T9,R0,700162E8 -SW T9,005C (SP) -JAL 70016030 ;V0= PIFram data.CRC for data at A0 -LW A0,006C (SP) -LBU T0,0052 (SP) -BEQ V0,T0,700162E8 -NOP -LW A0,0060 (SP) -JAL 700147F4 -LW A1,0064 (SP) -SW V0,005C (SP) -LW T2,005C (SP) -BEQ T2,R0,700162E0 -NOP -JAL 70015EA4 -NOP -BEQ R0,R0,7001631C -LW V0,005C (SP) -ADDIU T1,R0,0004 -SW T1,005C (SP) -LW T5,005C (SP) -ADDIU AT,R0,0004 -BNE T5,AT,70016310 -NOP -LW T6,0028 (SP) -SLTI S0,T6,0000 -XORI S0,S0,0001 -ADDIU T4,T6,FFFF -BNE S0,R0,700161A8 -SW T4,0028 (SP) -JAL 70015EA4 -NOP -LW V0,005C (SP) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0060 -JR RA -NOP - -70016330 16F30 generate PIFram command: request write data at A2 to block A1 of controller A0's slot -ADDIU SP,SP,FFB8 -LUI T6,8006 -ADDIU T6,T6,7D70 -SW RA,0014 (SP) -SW A0,0048 (SP) -SW A1,004C (SP) -SW A2,0050 (SP) -SW T6,0044 (SP) -SW R0,0018 (SP) -LW T7,0018 (SP) -LW T9,0018 (SP) -LUI AT,8006 -SLL T8,T7,0x2 -ADDU AT,AT,T8 -SW R0,7D70 (AT) -ADDIU T0,T9,0001 -SLTI AT,T0,0010 -BNE AT,R0,70016354 -SW T0,0018 (SP) -ADDIU T1,R0,0001 -LUI AT,8006 -ADDIU T2,R0,00FF -ADDIU T3,R0,0023 -ADDIU T4,R0,0001 -ADDIU T5,R0,0003 -SW T1,7DAC (AT) -SB T2,001C (SP) -SB T3,001D (SP) -SB T4,001E (SP) -SB T5,001F (SP) -JAL 70015F80 ;V0= PIFram address.CRC for address A0 -LHU A0,004E (SP) -LHU T6,004E (SP) -ADDIU T9,R0,00FF -SB T9,0042 (SP) -SLL T7,T6,0x5 -OR T8,V0,T7 -SH T8,0020 (SP) -SW R0,0018 (SP) -LW T0,0050 (SP) -LW T2,0018 (SP) -LBU T1,0000 (T0) -ADDU T3,SP,T2 -SB T1,0022 (T3) -LW T6,0018 (SP) -LW T4,0050 (SP) -ADDIU T7,T6,0001 -SLTI AT,T7,0020 -ADDIU T5,T4,0001 -SW T7,0018 (SP) -BNE AT,R0,700163CC -SW T5,0050 (SP) -LW T8,0048 (SP) -BEQ T8,R0,70016440 -NOP -BLEZ T8,70016440 -SW R0,0018 (SP) -LW T9,0044 (SP) -SB R0,0000 (T9) -LW T2,0018 (SP) -LW T4,0048 (SP) -LW T0,0044 (SP) -ADDIU T3,T2,0001 -SLT AT,T3,T4 -ADDIU T1,T0,0001 -SW T3,0018 (SP) -BNE AT,R0,70016414 -SW T1,0044 (SP) -ADDIU T6,SP,001C -ADDIU T8,T6,0024 -LW T5,0044 (SP) -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T5,T5,000C -SWL AT,FFF4 (T5) -SWR AT,FFF7 (T5) -LW AT,FFF8 (T6) -SWL AT,FFF8 (T5) -SWR AT,FFFB (T5) -LW AT,FFFC (T6) -SWL AT,FFFC (T5) -BNE T6,T8,7001644C -SWR AT,FFFF (T5) -LW AT,0000 (T6) -ADDIU T1,R0,00FE -SWL AT,0000 (T5) -SWR AT,0003 (T5) -LW T9,0044 (SP) -ADDIU T0,T9,0028 -SW T0,0044 (SP) -SB T1,0000 (T0) -LW RA,0014 (SP) -ADDIU SP,SP,0048 -JR RA -NOP - -700164B0 170B0 reads block A2 from controller A1 to @A3 -ADDIU SP,SP,FFA0 -LUI T6,8006 -SW RA,001C (SP) -ADDIU T6,T6,7D70 -ADDIU T7,R0,0002 -SW A0,0060 (SP) -SW A1,0064 (SP) -SW A2,0068 (SP) -SW A3,006C (SP) -SW S0,0018 (SP) -SW R0,005C (SP) -SW T6,0054 (SP) -JAL 70015E60 -SW T7,0028 (SP) -ADDIU T8,R0,0002 -LUI AT,8006 -SB T8,7CE0 (AT) -LW A0,0064 (SP) -JAL 700166F4 ;generate PIFram command: request read of block A1 from controller A0's slot -LHU A1,006A (SP) -LUI A1,8006 -ADDIU A1,A1,7D70 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -ADDIU A0,R0,0001 -SW V0,005C (SP) -LW A0,0060 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -SW R0,0058 (SP) -LW T0,0058 (SP) -LW T2,0058 (SP) -LUI AT,8006 -SLL T1,T0,0x2 -ADDU AT,AT,T1 -ADDIU T9,R0,00FF -SW T9,7D70 (AT) -ADDIU T3,T2,0001 -SLTI AT,T3,0010 -BNE AT,R0,70016528 -SW T3,0058 (SP) -LUI AT,8006 -LUI A1,8006 -SW R0,7DAC (AT) -ADDIU A1,A1,7D70 -JAL 70015ED0 ;read or write (A0) between PIFram and rdram address A1 -OR A0,R0,R0 -SW V0,005C (SP) -LW A0,0060 (SP) -OR A1,R0,R0 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T5,0064 (SP) -LUI T4,8006 -ADDIU T4,T4,7D70 -BEQ T5,R0,700165C0 -SW T4,0054 (SP) -BLEZ T5,700165C0 -SW R0,0058 (SP) -LW T8,0058 (SP) -LW T9,0064 (SP) -LW T6,0054 (SP) -ADDIU T0,T8,0001 -SLT AT,T0,T9 -ADDIU T7,T6,0001 -SW T0,0058 (SP) -BNE AT,R0,7001659C -SW T7,0054 (SP) -LW T2,0054 (SP) -ADDIU T1,SP,002C -ADDIU T4,T2,0024 -LWL AT,0000 (T2) -LWR AT,0003 (T2) -ADDIU T2,T2,000C -ADDIU T1,T1,000C -SW AT,FFF4 (T1) -LWL AT,FFF8 (T2) -LWR AT,FFFB (T2) -SW AT,FFF8 (T1) -LWL AT,FFFC (T2) -LWR AT,FFFF (T2) -BNE T2,T4,700165CC -SW AT,FFFC (T1) -LWL AT,0000 (T2) -LWR AT,0003 (T2) -SW AT,0000 (T1) -LBU T5,002E (SP) -ANDI T6,T5,00C0 -SRA T7,T6,0x4 -BNE T7,R0,700166AC -SW T7,005C (SP) -ADDIU A0,SP,002C -JAL 70016030 ;V0= PIFram data.CRC for data at A0 -ADDIU A0,A0,0006 -SB V0,0027 (SP) -LBU T8,0027 (SP) -LBU T0,0052 (SP) -BEQ T8,T0,70016674 -NOP -LW A0,0060 (SP) -JAL 700147F4 -LW A1,0064 (SP) -SW V0,005C (SP) -LW T9,005C (SP) -BEQ T9,R0,70016668 -NOP -JAL 70015EA4 -NOP -BEQ R0,R0,700166E0 -LW V0,005C (SP) -ADDIU T3,R0,0004 -BEQ R0,R0,700166AC -SW T3,005C (SP) -SW R0,0058 (SP) -LW T4,0058 (SP) -LW T1,006C (SP) -ADDU T2,SP,T4 -LBU T2,0032 (T2) -SB T2,0000 (T1) -LW T7,0058 (SP) -LW T5,006C (SP) -ADDIU T8,T7,0001 -SLTI AT,T8,0020 -ADDIU T6,T5,0001 -SW T8,0058 (SP) -BNE AT,R0,70016678 -SW T6,006C (SP) -LW T0,005C (SP) -ADDIU AT,R0,0004 -BNE T0,AT,700166D4 -NOP -LW T9,0028 (SP) -SLTI S0,T9,0000 -XORI S0,S0,0001 -ADDIU T3,T9,FFFF -BNE S0,R0,70016524 -SW T3,0028 (SP) -JAL 70015EA4 -NOP -LW V0,005C (SP) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0060 -JR RA -NOP - -700166F4 172F4 generate PIFram command: request read of block A1 from controller A0's slot -ADDIU SP,SP,FFB8 -LUI T6,8006 -ADDIU T6,T6,7D70 -SW RA,0014 (SP) -SW A0,0048 (SP) -SW A1,004C (SP) -SW T6,0044 (SP) -SW R0,0018 (SP) -LW T7,0018 (SP) -LW T9,0018 (SP) -LUI AT,8006 -SLL T8,T7,0x2 -ADDU AT,AT,T8 -SW R0,7D70 (AT) -ADDIU T0,T9,0001 -SLTI AT,T0,0010 -BNE AT,R0,70016714 -SW T0,0018 (SP) -ADDIU T1,R0,0001 -LUI AT,8006 -ADDIU T2,R0,00FF -ADDIU T3,R0,0003 -ADDIU T4,R0,0021 -ADDIU T5,R0,0002 -SW T1,7DAC (AT) -SB T2,001C (SP) -SB T3,001D (SP) -SB T4,001E (SP) -SB T5,001F (SP) -JAL 70015F80 ;V0= PIFram address.CRC for address A0 -LHU A0,004E (SP) -LHU T6,004E (SP) -ADDIU T9,R0,00FF -SB T9,0042 (SP) -SLL T7,T6,0x5 -OR T8,V0,T7 -SH T8,0020 (SP) -SW R0,0018 (SP) -LW T1,0018 (SP) -ADDIU T0,R0,00FF -ADDU T2,SP,T1 -SB T0,0022 (T2) -LW T3,0018 (SP) -ADDIU T4,T3,0001 -SLTI AT,T4,0020 -BNE AT,R0,7001678C -SW T4,0018 (SP) -LW T5,0048 (SP) -BEQ T5,R0,700167F0 -NOP -BLEZ T5,700167F0 -SW R0,0018 (SP) -LW T6,0044 (SP) -SB R0,0000 (T6) -LW T9,0018 (SP) -LW T1,0048 (SP) -LW T7,0044 (SP) -ADDIU T0,T9,0001 -SLT AT,T0,T1 -ADDIU T8,T7,0001 -SW T0,0018 (SP) -BNE AT,R0,700167C4 -SW T8,0044 (SP) -ADDIU T3,SP,001C -ADDIU T5,T3,0024 -LW T2,0044 (SP) -LW AT,0000 (T3) -ADDIU T3,T3,000C -ADDIU T2,T2,000C -SWL AT,FFF4 (T2) -SWR AT,FFF7 (T2) -LW AT,FFF8 (T3) -SWL AT,FFF8 (T2) -SWR AT,FFFB (T2) -LW AT,FFFC (T3) -SWL AT,FFFC (T2) -BNE T3,T5,700167FC -SWR AT,FFFF (T2) -LW AT,0000 (T3) -ADDIU T8,R0,00FE -SWL AT,0000 (T2) -SWR AT,0003 (T2) -LW T6,0044 (SP) -ADDIU T7,T6,0028 -SW T7,0044 (SP) -SB T8,0000 (T7) -LW RA,0014 (SP) -ADDIU SP,SP,0048 -JR RA -NOP - -70016860 -ADDIU SP,SP,FFD0 -LUI AT,8003 -LWC1 F4,97F0 (AT) -SW S0,0018 (SP) -OR S0,A0,R0 -LUI AT,8006 -SW RA,001C (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) -SW A3,003C (SP) -ADDIU A2,SP,0040 -ADDIU A1,SP,003C -ADDIU A0,SP,0038 -JAL 7001F750 -SWC1 F4,7DD0 (AT) -LUI AT,8006 -LWC1 F12,0034 (SP) -LWC1 F6,7DD0 (AT) -MUL.S F12,F12,F6 -JAL 7F057EAC -SWC1 F12,0034 (SP) -LWC1 F12,0034 (SP) -JAL 7F057EA0 -SWC1 F0,002C (SP) -LWC1 F14,0038 (SP) -LWC1 F18,0040 (SP) -SWC1 F0,0028 (SP) -MUL.S F8,F14,F14 -NOP -MUL.S F10,F18,F18 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F8,F10 -OR A0,S0,R0 -JAL 70010010 -SWC1 F0,0024 (SP) -MTC1 R0,F12 -LWC1 F14,0024 (SP) -LWC1 F2,0028 (SP) -LWC1 F16,002C (SP) -C.EQ.S F14,F12 -LUI AT,3F80 -LWC1 F6,003C (SP) -BC1TL 70016A10 -LW RA,001C (SP) -MTC1 AT,F4 -MUL.S F8,F16,F6 -LWC1 F10,0038 (SP) -LWC1 F6,0040 (SP) -DIV.S F0,F4,F14 -MUL.S F4,F8,F10 -NEG.S F8,F6 -MUL.S F10,F8,F2 -SUB.S F6,F10,F4 -MUL.S F8,F6,F0 -SWC1 F8,0000 (S0) -LWC1 F10,003C (SP) -LWC1 F6,0038 (SP) -MUL.S F4,F2,F10 -LWC1 F10,0040 (SP) -MUL.S F8,F4,F6 -NOP -MUL.S F4,F10,F16 -SUB.S F6,F4,F8 -MUL.S F10,F6,F0 -SWC1 F10,0010 (S0) -MUL.S F6,F16,F14 -LWC1 F4,0038 (SP) -SWC1 F12,0030 (S0) -MUL.S F10,F2,F14 -NEG.S F8,F4 -SWC1 F8,0020 (S0) -SWC1 F6,0004 (S0) -SWC1 F10,0014 (S0) -LWC1 F4,003C (SP) -SWC1 F12,0034 (S0) -NEG.S F8,F4 -SWC1 F8,0024 (S0) -LWC1 F6,003C (SP) -LWC1 F4,0040 (SP) -MUL.S F10,F16,F6 -LWC1 F6,0038 (SP) -MUL.S F8,F10,F4 -NOP -MUL.S F10,F2,F6 -SUB.S F4,F10,F8 -NEG.S F10,F16 -MUL.S F6,F4,F0 -SWC1 F6,0008 (S0) -LWC1 F8,0038 (SP) -LWC1 F6,003C (SP) -MUL.S F4,F10,F8 -LWC1 F8,0040 (SP) -MUL.S F10,F2,F6 -NOP -MUL.S F6,F10,F8 -SUB.S F10,F4,F6 -MUL.S F8,F10,F0 -MTC1 AT,F10 -SWC1 F8,0018 (S0) -LWC1 F4,0040 (SP) -SWC1 F12,0038 (S0) -SWC1 F12,000C (S0) -NEG.S F6,F4 -SWC1 F12,001C (S0) -SWC1 F6,0028 (S0) -SWC1 F12,002C (S0) -SWC1 F10,003C (S0) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70016A20 -MTC1 A1,F12 -MTC1 A2,F14 -MTC1 A3,F16 -ADDIU SP,SP,FFA0 -LWC1 F4,0070 (SP) -SW RA,001C (SP) -SW A0,0060 (SP) -MFC1 A1,F12 -MFC1 A2,F14 -MFC1 A3,F16 -ADDIU A0,SP,0020 -JAL 70016860 -SWC1 F4,0010 (SP) -ADDIU A0,SP,0020 -JAL 7000FF10 -LW A1,0060 (SP) -LW RA,001C (SP) -ADDIU SP,SP,0060 -JR RA -NOP - -70016A70 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -SW A2,0020 (SP) -SW A3,0024 (SP) -JAL 70010010 -SW A0,0018 (SP) -LWC1 F4,0020 (SP) -LWC1 F6,001C (SP) -LUI AT,4000 -MTC1 AT,F8 -SUB.S F0,F4,F6 -LW V0,0018 (SP) -LWC1 F14,0028 (SP) -LWC1 F16,0030 (SP) -DIV.S F10,F8,F0 -LWC1 F18,002C (SP) -MTC1 AT,F6 -LUI AT,C000 -SUB.S F12,F16,F18 -OR V1,R0,R0 -ADDIU A0,R0,0004 -SWC1 F10,0000 (V0) -LWC1 F4,0024 (SP) -MTC1 AT,F10 -LUI AT,3F80 -SUB.S F2,F14,F4 -DIV.S F4,F10,F12 -DIV.S F8,F6,F2 -SWC1 F4,0028 (V0) -SWC1 F8,0014 (V0) -LWC1 F8,001C (SP) -LWC1 F6,0020 (SP) -ADD.S F10,F6,F8 -NEG.S F4,F10 -DIV.S F6,F4,F0 -SWC1 F6,0030 (V0) -LWC1 F8,0024 (SP) -ADD.S F10,F14,F8 -ADD.S F8,F16,F18 -NEG.S F4,F10 -NEG.S F10,F8 -DIV.S F6,F4,F2 -DIV.S F4,F10,F12 -SWC1 F6,0034 (V0) -MTC1 AT,F6 -NOP -SWC1 F6,003C (V0) -SWC1 F4,0038 (V0) -LWC1 F0,0034 (SP) -LWC1 F8,0000 (V0) -ADDIU V1,V1,0001 -LWC1 F18,0004 (V0) -MUL.S F12,F8,F0 -LWC1 F14,0008 (V0) -BEQ V1,A0,70016B90 -LWC1 F16,000C (V0) -MUL.S F10,F18,F0 -LWC1 F8,0010 (V0) -LWC1 F18,0014 (V0) -MUL.S F6,F14,F0 -LWC1 F14,0018 (V0) -ADDIU V1,V1,0001 -MUL.S F4,F16,F0 -LWC1 F16,001C (V0) -SWC1 F12,0000 (V0) -MUL.S F12,F8,F0 -SWC1 F10,0004 (V0) -SWC1 F6,0008 (V0) -ADDIU V0,V0,0010 -BNE V1,A0,70016B54 -SWC1 F4,FFFC (V0) -MUL.S F10,F18,F0 -ADDIU V0,V0,0010 -SWC1 F12,FFF0 (V0) -MUL.S F6,F14,F0 -NOP -MUL.S F4,F16,F0 -SWC1 F10,FFF4 (V0) -SWC1 F6,FFF8 (V0) -SWC1 F4,FFFC (V0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70016BC4 -ADDIU SP,SP,FF98 -MTC1 A1,F12 -MTC1 A2,F14 -MTC1 A3,F16 -LWC1 F4,0078 (SP) -LWC1 F6,007C (SP) -LWC1 F8,0080 (SP) -LWC1 F10,0084 (SP) -SW RA,0024 (SP) -SW A0,0068 (SP) -MFC1 A1,F12 -MFC1 A2,F14 -MFC1 A3,F16 -ADDIU A0,SP,0028 -SWC1 F4,0010 (SP) -SWC1 F6,0014 (SP) -SWC1 F8,0018 (SP) -JAL 70016A70 -SWC1 F10,001C (SP) -ADDIU A0,SP,0028 -JAL 7000FF10 -LW A1,0068 (SP) -LW RA,0024 (SP) -ADDIU SP,SP,0068 -JR RA -NOP - -70016C30 -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) -OR A1,A0,R0 -ADDIU A0,A1,4000 -SW RA,0014 (SP) -ANDI T6,A0,FFFF -JAL 70016C60 -OR A0,T6,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70016C60 -ANDI T6,A0,FFFF -SRL T7,T6,0x4 -ANDI T8,T7,FFFF -ANDI T9,T8,0400 -SW A0,0000 (SP) -BEQ T9,R0,70016C98 -OR V0,T8,R0 -ANDI T0,T8,03FF -SLL T1,T0,0x1 -SUBU T2,R0,T1 -LUI V1,8002 -ADDU V1,V1,T2 -BEQ R0,R0,70016CAC -LH V1,7FCE (V1) -ANDI T3,V0,03FF -SLL T4,T3,0x1 -LUI V1,8002 -ADDU V1,V1,T4 -LH V1,77D0 (V1) -ANDI T5,V0,0800 -BEQ T5,R0,70016CC8 -OR V0,V1,R0 -SUBU V0,R0,V1 -SLL T6,V0,0x10 -JR RA -SRA V0,T6,0x10 -JR RA -NOP - -70016CD0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -SW A2,0020 (SP) -SW A3,0024 (SP) -JAL 70010010 -SW A0,0018 (SP) -LW A0,0018 (SP) -LWC1 F4,001C (SP) -SWC1 F4,0030 (A0) -LWC1 F6,0020 (SP) -SWC1 F6,0034 (A0) -LWC1 F8,0024 (SP) -SWC1 F8,0038 (A0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70016D18 -ADDIU SP,SP,FF98 -SW RA,0014 (SP) -SW A0,0068 (SP) -SW A1,006C (SP) -SW A2,0070 (SP) -SW A3,0074 (SP) -JAL 70010010 -ADDIU A0,SP,0028 -LWC1 F4,006C (SP) -LWC1 F6,0070 (SP) -LWC1 F8,0074 (SP) -ADDIU A0,SP,0028 -LW A1,0068 (SP) -SWC1 F4,0058 (SP) -SWC1 F6,005C (SP) -JAL 7000FF10 -SWC1 F8,0060 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0068 -JR RA -NOP - -70016D70 -SLTI AT,A2,0010 -BNE AT,R0,70016E54 -XOR V0,A0,A1 -ANDI V0,V0,0003 -BNE V0,R0,70016DE8 -SUBU T8,R0,A0 -ANDI T8,T8,0003 -BEQ T8,R0,70016DAC -SUBU A2,A2,T8 -OR V0,V1,R0 -LWL V0,0000 (A0) -LWL V1,0000 (A1) -ADDU A0,A0,T8 -ADDU A1,A1,T8 -BNE V0,V1,70016E84 -ADDIU AT,R0,FFFC -AND A3,A2,AT -BEQ A3,R0,70016E54 -SUBU A2,A2,A3 -ADDU A3,A3,A0 -LW V0,0000 (A0) -LW V1,0000 (A1) -ADDIU A0,A0,0004 -ADDIU A1,A1,0004 -BNE V0,V1,70016E84 -NOP -BNEL A0,A3,70016DC4 -LW V0,0000 (A0) -BEQ R0,R0,70016E54 -NOP -SUBU A3,R0,A1 -ANDI A3,A3,0003 -BEQ A3,R0,70016E1C -SUBU A2,A2,A3 -ADDU A3,A3,A0 -LBU V0,0000 (A0) -LBU V1,0000 (A1) -ADDIU A0,A0,0001 -ADDIU A1,A1,0001 -BNE V0,V1,70016E84 -NOP -BNEL A0,A3,70016E00 -LBU V0,0000 (A0) -ADDIU AT,R0,FFFC -AND A3,A2,AT -BEQ A3,R0,70016E54 -SUBU A2,A2,A3 -ADDU A3,A3,A0 -LWL V0,0000 (A0) -LW V1,0000 (A1) -LWR V0,0003 (A0) -ADDIU A0,A0,0004 -ADDIU A1,A1,0004 -BNE V0,V1,70016E84 -NOP -BNEL A0,A3,70016E34 -LWL V0,0000 (A0) -BLEZ A2,70016E7C -ADDU A3,A2,A0 -LBU V0,0000 (A0) -LBU V1,0000 (A1) -ADDIU A0,A0,0001 -ADDIU A1,A1,0001 -BNE V0,V1,70016E84 -NOP -BNEL A0,A3,70016E60 -LBU V0,0000 (A0) -JR RA -OR V0,R0,R0 -JR RA -ADDIU V0,R0,0001 - -70016E90 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -SW A2,0020 (SP) -SW A3,0024 (SP) -JAL 70010010 -SW A0,0018 (SP) -LW A0,0018 (SP) -LWC1 F4,001C (SP) -LUI AT,3F80 -MTC1 AT,F10 -SWC1 F4,0000 (A0) -LWC1 F6,0020 (SP) -SWC1 F6,0014 (A0) -LWC1 F8,0024 (SP) -SWC1 F10,003C (A0) -SWC1 F8,0028 (A0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70016EE4 -MTC1 A1,F12 -MTC1 A2,F14 -MTC1 A3,F16 -ADDIU SP,SP,FFA8 -SW RA,0014 (SP) -SW A0,0058 (SP) -MFC1 A1,F12 -MFC1 A2,F14 -MFC1 A3,F16 -JAL 70016E90 -ADDIU A0,SP,0018 -ADDIU A0,SP,0018 -JAL 7000FF10 -LW A1,0058 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0058 -JR RA -NOP - -70016F30 -ADDIU SP,SP,FFB8 -SW RA,0044 (SP) -SDC1 F30,0038 (SP) -SDC1 F28,0030 (SP) -SDC1 F26,0028 (SP) -SDC1 F24,0020 (SP) -SDC1 F22,0018 (SP) -SDC1 F20,0010 (SP) -SW A2,0050 (SP) -SW A3,0054 (SP) -SW A0,0048 (SP) -JAL 70010010 -SW A1,004C (SP) -LWC1 F4,005C (SP) -LWC1 F6,0050 (SP) -LWC1 F8,0060 (SP) -LWC1 F10,0054 (SP) -SUB.S F0,F4,F6 -LWC1 F6,0058 (SP) -LWC1 F4,0064 (SP) -SUB.S F22,F8,F10 -MUL.S F8,F0,F0 -MOV.S F20,F0 -SUB.S F24,F4,F6 -MUL.S F10,F22,F22 -ADD.S F4,F8,F10 -MUL.S F6,F24,F24 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F4,F6 -LUI AT,BFF0 -MTC1 AT,F9 -MTC1 R0,F8 -CVT.D.S F10,F0 -LWC1 F6,006C (SP) -DIV.D F4,F8,F10 -LWC1 F10,0070 (SP) -CVT.S.D F2,F4 -MUL.S F20,F20,F2 -NOP -MUL.S F22,F22,F2 -NOP -MUL.S F24,F24,F2 -NOP -MUL.S F8,F6,F24 -NOP -MUL.S F4,F10,F22 -SUB.S F26,F8,F4 -MUL.S F8,F10,F20 -LWC1 F4,0068 (SP) -MUL.S F10,F4,F24 -SUB.S F28,F8,F10 -MUL.S F8,F4,F22 -NOP -MUL.S F10,F6,F20 -SUB.S F30,F8,F10 -MUL.S F4,F26,F26 -NOP -MUL.S F6,F28,F28 -ADD.S F8,F4,F6 -MUL.S F10,F30,F30 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F8,F10 -LUI AT,3FF0 -MTC1 AT,F5 -MTC1 R0,F4 -CVT.D.S F6,F0 -DIV.D F8,F4,F6 -CVT.S.D F14,F8 -MUL.S F26,F26,F14 -NOP -MUL.S F28,F28,F14 -NOP -MUL.S F30,F30,F14 -NOP -MUL.S F10,F22,F30 -NOP -MUL.S F4,F24,F28 -NOP -MUL.S F6,F24,F26 -NOP -MUL.S F8,F20,F30 -SUB.S F2,F10,F4 -MUL.S F10,F20,F28 -NOP -MUL.S F4,F22,F26 -SWC1 F2,0068 (SP) -SUB.S F16,F6,F8 -MUL.S F6,F2,F2 -NOP -MUL.S F8,F16,F16 -SWC1 F16,006C (SP) -SUB.S F18,F10,F4 -MUL.S F4,F18,F18 -ADD.S F10,F6,F8 -SWC1 F18,0070 (SP) -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F10,F4 -LUI AT,8003 -LDC1 F2,9800 (AT) -LUI AT,4060 -MTC1 AT,F17 -LUI AT,3FF0 -MTC1 AT,F7 -MTC1 R0,F6 -CVT.D.S F8,F0 -LWC1 F4,0068 (SP) -DIV.D F10,F6,F8 -LWC1 F8,006C (SP) -MTC1 R0,F16 -LW A0,0048 (SP) -LW A1,004C (SP) -ADDIU V0,R0,0080 -CVT.S.D F14,F10 -MUL.S F6,F4,F14 -LWC1 F4,0070 (SP) -MUL.S F10,F8,F14 -CVT.D.S F8,F26 -SWC1 F6,0068 (SP) -MUL.S F6,F4,F14 -SWC1 F10,006C (SP) -MUL.D F12,F8,F16 -SWC1 F6,0070 (SP) -C.LT.D F12,F2 -NOP -BC1FL 70017134 -MOV.D F0,F2 -BEQ R0,R0,70017134 -MOV.D F0,F12 -MOV.D F0,F2 -CVT.D.S F4,F28 -TRUNC.W.D F10,F0 -MUL.D F12,F4,F16 -MFC1 T8,F10 -NOP -SB T8,0008 (A1) -C.LT.D F12,F2 -NOP -BC1FL 70017168 -MOV.D F0,F2 -BEQ R0,R0,70017168 -MOV.D F0,F12 -MOV.D F0,F2 -CVT.D.S F8,F30 -TRUNC.W.D F6,F0 -MUL.D F12,F8,F16 -MFC1 T1,F6 -NOP -SB T1,0009 (A1) -C.LT.D F12,F2 -NOP -BC1FL 7001719C -MOV.D F0,F2 -BEQ R0,R0,7001719C -MOV.D F0,F12 -MOV.D F0,F2 -TRUNC.W.D F10,F0 -MFC1 T4,F10 -NOP -SB T4,000A (A1) -LWC1 F4,0068 (SP) -CVT.D.S F6,F4 -MUL.D F12,F6,F16 -C.LT.D F12,F2 -NOP -BC1FL 700171D4 -MOV.D F0,F2 -BEQ R0,R0,700171D4 -MOV.D F0,F12 -MOV.D F0,F2 -TRUNC.W.D F8,F0 -MFC1 T7,F8 -NOP -SB T7,0018 (A1) -LWC1 F10,006C (SP) -CVT.D.S F4,F10 -MUL.D F12,F4,F16 -C.LT.D F12,F2 -NOP -BC1FL 7001720C -MOV.D F0,F2 -BEQ R0,R0,7001720C -MOV.D F0,F12 -MOV.D F0,F2 -TRUNC.W.D F6,F0 -MFC1 T0,F6 -NOP -SB T0,0019 (A1) -LWC1 F8,0070 (SP) -CVT.D.S F10,F8 -MUL.D F12,F10,F16 -C.LT.D F12,F2 -NOP -BC1FL 70017244 -MOV.D F0,F2 -BEQ R0,R0,70017244 -MOV.D F0,F12 -MOV.D F0,F2 -TRUNC.W.D F4,F0 -SB R0,0000 (A1) -SB R0,0001 (A1) -SB R0,0002 (A1) -MFC1 T3,F4 -SB R0,0003 (A1) -SB R0,0004 (A1) -SB R0,0005 (A1) -SB R0,0006 (A1) -SB R0,0007 (A1) -SB R0,0010 (A1) -SB V0,0011 (A1) -SB R0,0012 (A1) -SB R0,0013 (A1) -SB R0,0014 (A1) -SB V0,0015 (A1) -SB R0,0016 (A1) -SB R0,0017 (A1) -SB T3,001A (A1) -SWC1 F26,0000 (A0) -LWC1 F18,0050 (SP) -LWC1 F16,0054 (SP) -LWC1 F14,0058 (SP) -MUL.S F6,F18,F26 -LWC1 F0,0068 (SP) -LWC1 F12,006C (SP) -MUL.S F8,F16,F28 -LWC1 F2,0070 (SP) -SWC1 F28,0010 (A0) -MUL.S F4,F14,F30 -SWC1 F30,0020 (A0) -SWC1 F20,0008 (A0) -SWC1 F22,0018 (A0) -SWC1 F24,0028 (A0) -ADD.S F10,F6,F8 -SWC1 F0,0004 (A0) -SWC1 F12,0014 (A0) -SWC1 F2,0024 (A0) -ADD.S F6,F10,F4 -MUL.S F10,F18,F0 -MTC1 R0,F0 -LUI AT,3F80 -MUL.S F4,F16,F12 -NEG.S F8,F6 -SWC1 F8,0030 (A0) -MUL.S F8,F14,F2 -ADD.S F6,F10,F4 -ADD.S F10,F6,F8 -NEG.S F4,F10 -SWC1 F4,0034 (A0) -LWC1 F6,0050 (SP) -LWC1 F10,0054 (SP) -MUL.S F8,F6,F20 -NOP -MUL.S F4,F10,F22 -LWC1 F10,0058 (SP) -SWC1 F0,000C (A0) -SWC1 F0,001C (A0) -SWC1 F0,002C (A0) -ADD.S F6,F8,F4 -MUL.S F8,F10,F24 -ADD.S F4,F6,F8 -MTC1 AT,F6 -NEG.S F10,F4 -SWC1 F6,003C (A0) -SWC1 F10,0038 (A0) -LW RA,0044 (SP) -LDC1 F30,0038 (SP) -LDC1 F28,0030 (SP) -LDC1 F26,0028 (SP) -LDC1 F24,0020 (SP) -LDC1 F22,0018 (SP) -LDC1 F20,0010 (SP) -JR RA -ADDIU SP,SP,0048 - -70017370 -ADDIU SP,SP,FF88 -LWC1 F4,0088 (SP) -MTC1 A2,F12 -MTC1 A3,F14 -SWC1 F4,0010 (SP) -LWC1 F4,00A0 (SP) -LWC1 F6,008C (SP) -LWC1 F8,0090 (SP) -LWC1 F10,0094 (SP) -LWC1 F16,0098 (SP) -LWC1 F18,009C (SP) -SW RA,0034 (SP) -SW A0,0078 (SP) -MFC1 A2,F12 -MFC1 A3,F14 -ADDIU A0,SP,0038 -SWC1 F4,0028 (SP) -SWC1 F6,0014 (SP) -SWC1 F8,0018 (SP) -SWC1 F10,001C (SP) -SWC1 F16,0020 (SP) -JAL 70016F30 -SWC1 F18,0024 (SP) -ADDIU A0,SP,0038 -JAL 7000FF10 -LW A1,0078 (SP) -LW RA,0034 (SP) -ADDIU SP,SP,0078 -JR RA -NOP - -700173F0 -ADDIU SP,SP,FFB0 -SW RA,004C (SP) -SW S0,0048 (SP) -OR S0,A0,R0 -SDC1 F30,0040 (SP) -SDC1 F28,0038 (SP) -SDC1 F26,0030 (SP) -SDC1 F24,0028 (SP) -SDC1 F22,0020 (SP) -SDC1 F20,0018 (SP) -SW A1,0054 (SP) -SW A2,0058 (SP) -JAL 70010010 -SW A3,005C (SP) -LWC1 F4,0060 (SP) -LWC1 F6,0054 (SP) -LWC1 F8,0064 (SP) -LWC1 F10,0058 (SP) -SUB.S F0,F4,F6 -LWC1 F6,005C (SP) -LWC1 F4,0068 (SP) -SUB.S F22,F8,F10 -MUL.S F8,F0,F0 -MOV.S F20,F0 -SUB.S F24,F4,F6 -MUL.S F10,F22,F22 -ADD.S F4,F8,F10 -MUL.S F6,F24,F24 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F4,F6 -LUI AT,BFF0 -MTC1 AT,F9 -MTC1 R0,F8 -CVT.D.S F10,F0 -LWC1 F6,0070 (SP) -DIV.D F4,F8,F10 -LWC1 F10,0074 (SP) -CVT.S.D F2,F4 -MUL.S F20,F20,F2 -NOP -MUL.S F22,F22,F2 -NOP -MUL.S F24,F24,F2 -NOP -MUL.S F8,F6,F24 -NOP -MUL.S F4,F10,F22 -SUB.S F26,F8,F4 -MUL.S F8,F10,F20 -LWC1 F4,006C (SP) -MUL.S F10,F4,F24 -SUB.S F28,F8,F10 -MUL.S F8,F4,F22 -NOP -MUL.S F10,F6,F20 -SUB.S F30,F8,F10 -MUL.S F4,F26,F26 -NOP -MUL.S F6,F28,F28 -ADD.S F8,F4,F6 -MUL.S F10,F30,F30 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F8,F10 -LUI AT,3FF0 -MTC1 AT,F5 -MTC1 R0,F4 -CVT.D.S F6,F0 -DIV.D F8,F4,F6 -CVT.S.D F2,F8 -MUL.S F26,F26,F2 -NOP -MUL.S F28,F28,F2 -NOP -MUL.S F30,F30,F2 -NOP -MUL.S F10,F22,F30 -NOP -MUL.S F4,F24,F28 -NOP -MUL.S F6,F24,F26 -NOP -MUL.S F8,F20,F30 -SUB.S F14,F10,F4 -MUL.S F10,F20,F28 -NOP -MUL.S F4,F22,F26 -SWC1 F14,006C (SP) -SUB.S F16,F6,F8 -MUL.S F6,F14,F14 -NOP -MUL.S F8,F16,F16 -SWC1 F16,0070 (SP) -SUB.S F18,F10,F4 -MUL.S F4,F18,F18 -ADD.S F10,F6,F8 -SWC1 F18,0074 (SP) -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F10,F4 -LUI AT,3FF0 -MTC1 AT,F7 -MTC1 R0,F6 -CVT.D.S F8,F0 -LWC1 F14,006C (SP) -DIV.D F10,F6,F8 -LWC1 F12,0070 (SP) -LWC1 F4,0074 (SP) -LUI AT,3F80 -CVT.S.D F2,F10 -MUL.S F14,F14,F2 -NOP -MUL.S F12,F12,F2 -NOP -MUL.S F6,F4,F2 -SWC1 F6,0074 (SP) -SWC1 F26,0000 (S0) -SWC1 F28,0010 (S0) -SWC1 F30,0020 (S0) -LWC1 F8,0054 (SP) -LWC1 F4,0058 (SP) -MUL.S F10,F8,F26 -NOP -MUL.S F6,F4,F28 -LWC1 F4,005C (SP) -SWC1 F14,0004 (S0) -SWC1 F12,0014 (S0) -ADD.S F8,F10,F6 -MUL.S F10,F4,F30 -ADD.S F6,F8,F10 -NEG.S F4,F6 -SWC1 F4,0030 (S0) -LWC1 F0,0074 (SP) -SWC1 F12,0070 (SP) -SWC1 F14,006C (SP) -LWC1 F14,0054 (SP) -LWC1 F12,0058 (SP) -LWC1 F2,005C (SP) -SWC1 F0,0024 (S0) -LWC1 F8,006C (SP) -LWC1 F6,0070 (SP) -SWC1 F20,0008 (S0) -MUL.S F10,F14,F8 -SWC1 F22,0018 (S0) -SWC1 F24,0028 (S0) -MUL.S F4,F12,F6 -ADD.S F8,F10,F4 -MUL.S F6,F2,F0 -MTC1 R0,F0 -NOP -SWC1 F0,000C (S0) -SWC1 F0,001C (S0) -SWC1 F0,002C (S0) -ADD.S F10,F8,F6 -MUL.S F8,F14,F20 -NOP -MUL.S F6,F12,F22 -NEG.S F4,F10 -SWC1 F4,0034 (S0) -MUL.S F4,F2,F24 -ADD.S F10,F8,F6 -ADD.S F8,F10,F4 -MTC1 AT,F10 -NEG.S F6,F8 -SWC1 F10,003C (S0) -SWC1 F6,0038 (S0) -LW RA,004C (SP) -LW S0,0048 (SP) -LDC1 F30,0040 (SP) -LDC1 F28,0038 (SP) -LDC1 F26,0030 (SP) -LDC1 F24,0028 (SP) -LDC1 F22,0020 (SP) -LDC1 F20,0018 (SP) -JR RA -ADDIU SP,SP,0050 - -700176A8 -ADDIU SP,SP,FF90 -LWC1 F4,0080 (SP) -MTC1 A1,F12 -MTC1 A2,F14 -MTC1 A3,F16 -SWC1 F4,0010 (SP) -LWC1 F4,0094 (SP) -LWC1 F6,0084 (SP) -LWC1 F8,0088 (SP) -LWC1 F10,008C (SP) -LWC1 F18,0090 (SP) -SW RA,002C (SP) -SW A0,0070 (SP) -MFC1 A1,F12 -MFC1 A2,F14 -MFC1 A3,F16 -ADDIU A0,SP,0030 -SWC1 F4,0024 (SP) -SWC1 F6,0014 (SP) -SWC1 F8,0018 (SP) -SWC1 F10,001C (SP) -JAL 700173F0 -SWC1 F18,0020 (SP) -ADDIU A0,SP,0030 -JAL 7000FF10 -LW A1,0070 (SP) -LW RA,002C (SP) -ADDIU SP,SP,0070 -JR RA -NOP - -70017720 -ADDIU SP,SP,FFC8 -LUI AT,8003 -LWC1 F4,9810 (AT) -SW S0,0018 (SP) -OR S0,A0,R0 -LUI AT,8006 -SW RA,001C (SP) -SW A1,003C (SP) -SW A2,0040 (SP) -SW A3,0044 (SP) -ADDIU A2,SP,0048 -ADDIU A1,SP,0044 -ADDIU A0,SP,0040 -JAL 7001F750 -SWC1 F4,7DE0 (AT) -LUI AT,8006 -LWC1 F12,003C (SP) -LWC1 F6,7DE0 (AT) -MUL.S F12,F12,F6 -JAL 7F057EAC -SWC1 F12,003C (SP) -LWC1 F12,003C (SP) -JAL 7F057EA0 -SWC1 F0,0034 (SP) -LWC1 F10,0040 (SP) -LWC1 F4,0044 (SP) -LUI AT,3F80 -MTC1 AT,F8 -MUL.S F6,F10,F4 -OR A0,S0,R0 -SUB.S F2,F8,F0 -LWC1 F8,0048 (SP) -SWC1 F0,0030 (SP) -MUL.S F16,F6,F2 -NOP -MUL.S F6,F4,F8 -SWC1 F16,002C (SP) -MUL.S F18,F6,F2 -NOP -MUL.S F4,F8,F10 -SWC1 F18,0028 (SP) -MUL.S F6,F4,F2 -JAL 70010010 -SWC1 F6,0024 (SP) -LWC1 F8,0040 (SP) -LUI AT,3F80 -MTC1 AT,F10 -MUL.S F0,F8,F8 -LWC1 F12,0030 (SP) -LWC1 F14,0034 (SP) -LWC1 F16,002C (SP) -LWC1 F18,0028 (SP) -SUB.S F4,F10,F0 -MUL.S F6,F4,F12 -ADD.S F8,F6,F0 -SWC1 F8,0000 (S0) -LWC1 F10,0040 (SP) -MUL.S F4,F10,F14 -SUB.S F6,F18,F4 -SWC1 F6,0024 (S0) -LWC1 F8,0040 (SP) -MUL.S F10,F8,F14 -MTC1 AT,F8 -ADD.S F4,F10,F18 -SWC1 F4,0018 (S0) -LWC1 F6,0044 (SP) -MUL.S F2,F6,F6 -SUB.S F10,F8,F2 -MUL.S F4,F10,F12 -ADD.S F6,F4,F2 -SWC1 F6,0014 (S0) -LWC1 F8,0044 (SP) -LWC1 F4,0024 (SP) -MUL.S F10,F8,F14 -ADD.S F6,F10,F4 -SWC1 F6,0020 (S0) -LWC1 F10,0044 (SP) -LWC1 F8,0024 (SP) -MUL.S F4,F10,F14 -SUB.S F6,F8,F4 -MTC1 AT,F8 -SWC1 F6,0008 (S0) -LWC1 F10,0048 (SP) -MUL.S F0,F10,F10 -SUB.S F4,F8,F0 -MUL.S F6,F4,F12 -ADD.S F10,F6,F0 -SWC1 F10,0028 (S0) -LWC1 F8,0048 (SP) -MUL.S F4,F8,F14 -SUB.S F6,F16,F4 -SWC1 F6,0010 (S0) -LWC1 F10,0048 (SP) -MUL.S F8,F10,F14 -ADD.S F4,F8,F16 -SWC1 F4,0004 (S0) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -700178B4 -MTC1 A1,F12 -MTC1 A2,F14 -MTC1 A3,F16 -ADDIU SP,SP,FFA0 -LWC1 F4,0070 (SP) -SW RA,001C (SP) -SW A0,0060 (SP) -MFC1 A1,F12 -MFC1 A2,F14 -MFC1 A3,F16 -ADDIU A0,SP,0020 -JAL 70017720 -SWC1 F4,0010 (SP) -ADDIU A0,SP,0020 -JAL 7000FF10 -LW A1,0060 (SP) -LW RA,001C (SP) -ADDIU SP,SP,0060 -JR RA -NOP - -70017910 -TRUNC.L.D F4,F12 -DMFC1 V0,F4 -NOP -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -7001792C -TRUNC.L.S F4,F12 -DMFC1 V0,F4 -NOP -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -70017948 -CFC1 T6,F31 -ADDIU V0,R0,0001 -CTC1 V0,F31 -NOP -CVT.L.D F4,F12 -CFC1 V0,F31 -NOP -ANDI AT,V0,0004 -ANDI V0,V0,0078 -BEQ V0,R0,700179C4 -LUI AT,43E0 -MTC1 AT,F5 -MTC1 R0,F4 -ADDIU V0,R0,0001 -SUB.D F4,F12,F4 -CTC1 V0,F31 -NOP -CVT.L.D F4,F4 -CFC1 V0,F31 -NOP -ANDI AT,V0,0004 -ANDI V0,V0,0078 -BNE V0,R0,700179BC -NOP -LUI T7,8003 -LD T7,9820 (T7) -DMFC1 V0,F4 -BEQ R0,R0,700179D4 -OR V0,V0,T7 -BEQ R0,R0,700179D4 -ADDIU V0,R0,FFFF -DMFC1 V0,F4 -NOP -BLTZ V0,700179BC -NOP -CTC1 T6,F31 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -700179E8 -CFC1 T6,F31 -ADDIU V0,R0,0001 -CTC1 V0,F31 -NOP -CVT.L.S F4,F12 -CFC1 V0,F31 -NOP -ANDI AT,V0,0004 -ANDI V0,V0,0078 -BEQ V0,R0,70017A60 -LUI AT,5F00 -MTC1 AT,F4 -ADDIU V0,R0,0001 -SUB.S F4,F12,F4 -CTC1 V0,F31 -NOP -CVT.L.S F4,F4 -CFC1 V0,F31 -NOP -ANDI AT,V0,0004 -ANDI V0,V0,0078 -BNE V0,R0,70017A58 -NOP -LUI T7,8003 -LD T7,9828 (T7) -DMFC1 V0,F4 -BEQ R0,R0,70017A70 -OR V0,V0,T7 -BEQ R0,R0,70017A70 -ADDIU V0,R0,FFFF -DMFC1 V0,F4 -NOP -BLTZ V0,70017A58 -NOP -CTC1 T6,F31 -DSLL32 V1,V0,0x0 -DSRA32 V1,V1,0x0 -JR RA -DSRA32 V0,V0,0x0 - -70017A84 -SW A0,0000 (SP) -SW A1,0004 (SP) -LD T6,0000 (SP) -DMTC1 T6,F4 -JR RA -CVT.D.L F0,F4 - -70017A9C -SW A0,0000 (SP) -SW A1,0004 (SP) -LD T6,0000 (SP) -DMTC1 T6,F4 -JR RA -CVT.S.L F0,F4 - -70017AB4 -SW A0,0000 (SP) -SW A1,0004 (SP) -LD T6,0000 (SP) -DMTC1 T6,F4 -BGEZ T6,70017AE0 -CVT.D.L F0,F4 -LUI AT,41F0 -MTC1 AT,F7 -MTC1 R0,F6 -NOP -ADD.D F0,F0,F6 -JR RA -NOP - -70017AE8 -SW A0,0000 (SP) -SW A1,0004 (SP) -LD T6,0000 (SP) -DMTC1 T6,F4 -BGEZ T6,70017B10 -CVT.S.L F0,F4 -LUI AT,4F80 -MTC1 AT,F6 -NOP -ADD.S F0,F0,F6 -JR RA -NOP - -70017B20 18720 A0->COP0 Status -MTC0 A0,Status -NOP -JR RA -NOP - -70017B30 18730 V0=COP0 Status -MFC0 V0,Status -JR RA -NOP - -70017B40 18740 SIrawread: copy value from uncached address A0 to A1; V0=0 if okay or -1 if SI error - accepts: A0=SI/PIF hardware address, A1=p->target -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -JAL 7001F720 ;V0= TRUE if SI not ready, FALSE otherwise -SW A1,001C (SP) -BEQ V0,R0,70017B64 ;branch if ready -NOP -BEQ R0,R0,70017B80 ;return -1 -ADDIU V0,R0,FFFF -//70017B64: -LW T6,0018 (SP) ;A0 f/ caller -LUI AT,A000 -LW T9,001C (SP) ;A1 f/ caller -OR T7,T6,AT ;T7=uncached address A0 -LW T8,0000 (T7) ;T8=A0 -OR V0,R0,R0 ;V0=0 -SW T8,0000 (T9) ;T8->A1 -//70017B80: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70017B90 18790 SIrawwrite: write value A1 to uncached address A0; V0=0 if okay or -1 if SI error - accepts: A0=SI/PIF hardware address, A1=value -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -JAL 7001F720 ;V0= TRUE if SI not ready, FALSE otherwise -SW A1,001C (SP) -BEQ V0,R0,70017BB4 -NOP -BEQ R0,R0,70017BCC ;return -1 -ADDIU V0,R0,FFFF -//70017BB4: -LW T7,0018 (SP) ;T7=A0 f/ caller -LW T6,001C (SP) ;T6=A1 f/ caller -LUI AT,A000 -OR T8,T7,AT ;T8=A0 | A0000000 -OR V0,R0,R0 ;V0=0 -SW T6,0000 (T8) ;A1->uncached address A0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70017BE0 187E0 PIrawread: copies word at uncached hardware address A0 to A1; V0=0 if okay - accepts: A0=hardware address, A1=p->target -LUI T6,A460 -LW A2,0010 (T6) ;A2=PI Status -ADDIU SP,SP,FFF8 -ANDI T7,A2,0003 -BEQ T7,R0,70017C0C ;branch if ready -NOP -//70017BF8: -LUI T8,A460 -LW A2,0010 (T8) ;A2=PI Status -ANDI T9,A2,0003 -BNE T9,R0,70017BF8 ;loop until ready -NOP -//70017C0C: -LUI T0,8000 -LW T0,0308 (T0) ;T0=80000308: base address of current PI BSD range 1 -LUI AT,A000 -OR V0,R0,R0 ;V0=0: return okay -OR T1,T0,A0 ;T1= address | base -OR T2,T1,AT ;T2= address | A0000000 -LW T3,0000 (T2) ;T3= value from uncached address A0 -ADDIU SP,SP,0008 -JR RA -SW T3,0000 (A1) ;value->target - -70017C40 18840 initialize A1 bytes at A0 to zero - accepts: A0=p->target, A1=length -SLTI AT,A1,000C -BNE AT,R0,70017CBC ;branch if A1function -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T7,0028 (SP) ;T7=A0 f/ caller -LW T6,002C (SP) ;T6=A1 f/ caller -LUI AT,8002 -SLL T8,T7,0x2 ;T8= T7->offset -OR S0,V0,R0 ;S0=V0: flag -ADDU AT,AT,T8 -OR A0,S0,R0 ;A0=S0: flag -JAL 70018610 ;A0->COP0 status -SW T6,7700 (AT) ;A1->80027700+offset -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70017D30 18930 64DD handler!? -LUI T6,8002 -LW T6,6990 (T6) ;T6=80026990: 64DD presence flag -ADDIU SP,SP,FFC0 -SW RA,001C (SP) -BNE T6,R0,70017D50 ;branch if present -NOP -BEQ R0,R0,70018404 ;return 0 -OR V0,R0,R0 -//70017D50: -LUI T7,8007 -LW T7,9074 (T7) ;T7=80069074: -LUI T3,A460 -ADDIU T8,T7,0014 ;T8=T7+14: -SW T8,0030 (SP) ;SP+30= T8 -LHU T9,001A (T7) ;T9=T7+1A: -SLL T0,T9,0x3 -ADDU T0,T0,T9 -SLL T0,T0,0x2 ;T0=T9*24 -ADDU T1,T8,T0 ;T1=T8+T0: base+offset -ADDIU T2,T1,0018 -SW T2,002C (SP) ;SP+2C=T1+18 -LW T4,0010 (T3) ;T4=A4600010: PI Status -SW T4,0038 (SP) -LW T5,0038 (SP) ;T5=PI Status -ANDI T6,T5,0001 -BEQ T6,R0,70017E64 ;branch if PI ready -NOP -//70017D98: if it wasn't ready... -ADDIU T7,R0,0003 -LUI T9,A460 -SW T7,0010 (T9) ;3->PI Status error flags -LUI T8,A460 -LW T0,0010 (T8) ;T0=PI Status -SW T0,0038 (SP) ;SP+38= new PI Status -LW T1,0038 (SP) -ANDI T2,T1,0002 -BEQ T2,R0,70017DDC ;branch if DMA finished -NOP -//70017DC0: loop until ready -LUI T3,A460 -LW T4,0010 (T3) -SW T4,0038 (SP) -LW T5,0038 (SP) -ANDI T6,T5,0002 -BNE T6,R0,70017DC0 -NOP -//70017DDC: test if interrupt occured -LUI T7,A500 -LW T9,0508 (T7) ;T9= A5000508: 64DD Status -LUI AT,0200 -SW T9,003C (SP) ;SP+3C= 64DD Status -LW T8,003C (SP) -AND T0,T8,AT -BEQ T0,R0,70017E4C ;branch if 02000000 not set: interrupt didn't occur -NOP -//70017DFC: If it did... -LUI T1,A460 -LW T2,0010 (T1) ;T2= PI Status -SW T2,0038 (SP) -LW T3,0038 (SP) -ANDI T4,T3,0002 -BEQ T4,R0,70017E34 ;branch if DMA complete -NOP -//70017E18: loop until ready -LUI T5,A460 -LW T6,0010 (T5) -SW T6,0038 (SP) -LW T7,0038 (SP) -ANDI T9,T7,0002 -BNE T9,R0,70017E18 -NOP -//70017E34: ...clear the interrupt! -LW T8,0030 (SP) ;T8= value f/ 80069074+14 -LUI AT,0100 -LUI T2,A500 -LW T0,0010 (T8) ;T0= T8+10: prev.interupt? -OR T1,T0,AT ;T1= T0 | 01000000: clear cart interrupt -SW T1,0510 (T2) ;update -//70017E4C: -LW T4,002C (SP) ;T4=SP+2C: -ADDIU T3,R0,004B -JAL 70018414 -SW T3,0000 (T4) ;4B->offset -BEQ R0,R0,70018404 ;return True -ADDIU V0,R0,0001 -//70017E64: if PI was ready... -LUI T5,A460 -LW T6,0010 (T5) ;T6=A4600010: PI Status -SW T6,0038 (SP) -LW T7,0038 (SP) -ANDI T9,T7,0002 -BEQ T9,R0,70017E9C ;branch if DMA complete -NOP -//70017E80: loop until it is -LUI T8,A460 -LW T0,0010 (T8) -SW T0,0038 (SP) -LW T1,0038 (SP) -ANDI T2,T1,0002 -BNE T2,R0,70017E80 -NOP -//70017E9C: test if interrupt occured -LUI T3,A500 -LW T4,0508 (T3) ;T4=A5000508: 64DD Status -LUI AT,0200 -SW T4,003C (SP) ;SP+3C= 64DD Status -LW T5,003C (SP) -AND T6,T5,AT -BEQ T6,R0,70017F1C ;branch if 02000000 not set: interrupt didn't occur -NOP -//70017EBC: prep the PI again if interrupt occured -LUI T7,A460 -LW T9,0010 (T7) ;T9=A4600010: PI Status -SW T9,0038 (SP) -LW T8,0038 (SP) -ANDI T0,T8,0002 -BEQ T0,R0,70017EF4 ;branch if DMA complete -NOP -//70017ED8: loop until it is -LUI T1,A460 -LW T2,0010 (T1) -SW T2,0038 (SP) -LW T3,0038 (SP) -ANDI T4,T3,0002 -BNE T4,R0,70017ED8 -NOP -//70017EF4: -LW T5,0030 (SP) ;T5=SP+30: p->??? -LUI AT,0100 -LUI T9,A500 -LW T6,0010 (T5) ;T6=T5+10: -OR V0,R0,R0 ;V0=0 -OR T7,T6,AT -SW T7,0510 (T9) ;T7->A5000510: clear cart intterrupt and ??? -LW T8,002C (SP) ;T8= SP+2C -BEQ R0,R0,70018404 ;return 0 -SW R0,0000 (T8) ;0->T8 -//70017F1C: test for busy in 64DD Status... -LW T0,003C (SP) ;T0= 64DD Status -LUI AT,0800 -AND T1,T0,AT -BEQ T1,R0,70017F70 ;branch if 08000000 not set in 64DD Status -NOP -//70017F30: -LW T3,002C (SP) -ADDIU T2,R0,0003 -JAL 700184FC -SW T2,0000 (T3) -ADDIU T4,R0,0002 -LUI T5,A460 -SW T4,0010 (T5) ;2->PI Status DMA flag -LUI T6,8002 -LW T6,698C (T6) -LUI AT,0010 -ORI AT,AT,0401 ;AT= 00100401 -OR T7,T6,AT -LUI AT,8002 -SW T7,698C (AT) -BEQ R0,R0,70018404 ;return 1 -ADDIU V0,R0,0001 -//70017F70: -LW T9,0030 (SP) -ADDIU AT,R0,0001 -LW T8,0000 (T9) -BNE T8,AT,7001806C -NOP -//70017F84: -LW T0,003C (SP) ;T0= 64DD Status -LUI AT,4000 -AND T1,T0,AT -BNE T1,R0,70018018 -NOP -//70017F98: -LHU T4,0004 (T9) -LW T2,0008 (T9) -SLL T5,T4,0x2 -ADDU T5,T5,T4 -SLL T5,T5,0x2 -ADDU T5,T5,T4 -SLL T5,T5,0x2 -ADDU T5,T5,T4 -ADDIU T3,T2,0001 -BEQ T3,T5,70017FDC -NOP -//70017FC4: -LW T7,002C (SP) -ADDIU T6,R0,0006 -JAL 70018414 -SW T6,0000 (T7) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//70017FDC: -ADDIU T8,R0,0002 -LUI T0,A460 -SW T8,0010 (T0) ;2->PI Status DMA flag -LUI T1,8002 -LW T1,698C (T1) -LUI AT,0010 -ORI AT,AT,0401 -OR T2,T1,AT -LW T9,002C (SP) -LUI AT,8002 -SW T2,698C (AT) -JAL 700184FC -SW R0,0000 (T9) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//70018018: write to 64DD sector data -LW T4,002C (SP) -LUI A0,8007 -LUI A2,0500 -LW T3,0004 (T4) -LW T5,000C (T4) -ORI A2,A2,0400 ;A2=050000400: 64DD sector data -ADDIU A1,R0,0001 ;A1=1: write to hardware -ADDU T6,T3,T5 -SW T6,0004 (T4) -LW T7,0030 (SP) -LW T8,0008 (T7) -ADDIU T0,T8,0001 -SW T0,0008 (T7) -LW T1,002C (SP) -LW A0,9074 (A0) ;A0=80069074: p->BSD hardware entry -LW T2,000C (T1) ;T2=T1+C: length -LW A3,0004 (T1) ;A3=T1+4: p->rdram -JAL 7001E530 ;request I/O with hardware A0; read/write (A1) SP+10 bytes between hardware offset A2 and rdram A3 -SW T2,0010 (SP) ;SP+10= length -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//7001806C: -LW T9,0030 (SP) -LW T3,0000 (T9) -BNE T3,R0,700183F0 -NOP -//7001807C: -LHU T5,0004 (T9) -ADDIU AT,R0,0003 -BNE T5,AT,700180E4 -NOP -//7001808C: -LW T4,002C (SP) -LW T6,0008 (T9) -LW T8,0010 (T4) -ADDIU T0,T8,0011 -SLT AT,T0,T6 -BEQ AT,R0,700180B8 -NOP -//700180A8: -JAL 70018414 -SW R0,0000 (T4) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//700180B8: -LW T7,003C (SP) -LUI AT,4000 -AND T1,T7,AT -BNE T1,R0,700180F8 -NOP -//700180CC: -LW T3,002C (SP) -ADDIU T2,R0,0011 -JAL 70018414 -SW T2,0000 (T3) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//700180E4: -LW T5,002C (SP) -LW T9,0004 (T5) -LW T8,000C (T5) -ADDU T6,T9,T8 -SW T6,0004 (T5) -//700180F8: -LUI T0,A500 -LW T4,0510 (T0) ;T4=A5000510: 64DD Interrupts -LUI AT,0020 -SW T4,0034 (SP) -LW T7,0034 (SP) -AND T1,T7,AT -BEQ T1,R0,70018124 -LUI AT,0040 -AND T2,T7,AT -BNE T2,R0,70018138 -NOP -//70018124: -LW T3,0034 (SP) -LUI AT,0200 -AND T9,T3,AT -BEQ T9,R0,700181BC -NOP -//70018138: -LW T8,002C (SP) -LW T6,0010 (T8) -SLTIU AT,T6,0004 -BNE AT,R0,70018188 -NOP -//7001814C: -LW T5,0030 (SP) -ADDIU AT,R0,0003 -LHU T0,0004 (T5) -BNE T0,AT,70018170 -NOP -//70018160: -LW T4,0008 (T5) -SLTI AT,T4,0053 -BNE AT,R0,700181AC -NOP -//70018170: -LW T7,002C (SP) -ADDIU T1,R0,0011 -JAL 70018414 -SW T1,0000 (T7) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//70018188: -LW T2,002C (SP) -LW T9,0030 (SP) -LW T3,0010 (T2) -SW T3,0028 (SP) -LW T8,0008 (T9) -SLL T0,T3,0x2 -ADDU T5,T2,T0 -ADDIU T6,T8,0001 -SW T6,0014 (T5) -//700181AC: -LW T4,002C (SP) -LW T1,0010 (T4) -ADDIU T7,T1,0001 -SW T7,0010 (T4) -LW T9,003C (SP) -LUI AT,1000 -AND T8,T9,AT -BEQ T8,R0,700182A0 -NOP -//700181D0: -LW T3,0030 (SP) -ADDIU AT,R0,0057 -LW T2,0008 (T3) -BEQ T2,AT,700181F4 -NOP -//700181E4: -LW T6,002C (SP) -ADDIU T0,R0,0006 -JAL 70018414 -SW T0,0000 (T6) -//700181F4: -LW T5,0030 (SP) -ADDIU AT,R0,0002 -LHU T1,0004 (T5) -BNE T1,AT,70018240 -NOP -//70018208: -LHU T7,0006 (T5) -BNE T7,R0,70018240 -NOP -//70018214: -ADDIU T4,R0,0001 -SH T4,0006 (T5) -LW T8,0030 (SP) -ADDIU T9,R0,FFFF -SW T9,0008 (T8) -LW T3,0030 (SP) -LW T2,0040 (T3) -LW T0,0048 (T3) -SUBU T6,T2,T0 -BEQ R0,R0,70018268 -SW T6,0040 (T3) -//70018240: -ADDIU T1,R0,0002 -LUI T7,A460 -SW T1,0010 (T7) ;2->PI Status DMA flag -LUI T4,8002 -LW T4,698C (T4) -LUI AT,0010 -ORI AT,AT,0401 -OR T5,T4,AT -LUI AT,8002 -SW T5,698C (AT) -//70018268: read #entries from 64DD C2 buffer to rdram -LW T9,002C (SP) -LUI A0,8007 -LW A0,9074 (A0) ;A0=80069074: -LW T8,000C (T9) ;T8=T9+C: #entries -LW A3,0008 (T9) ;A3=T9+8: p->rdram -OR A1,R0,R0 ;A1=0: read -SLL T2,T8,0x2 -SW T2,0010 (SP) ;SP+10=#entries*4: length -JAL 7001E530 ;request I/O with hardware A0; read/write (A1) SP+10 bytes between hardware offset A2 and rdram A3 -LUI A2,0500 ;A2=05000000: 64DD C2 buffer -LW T0,002C (SP) -ADDIU V0,R0,0001 -BEQ R0,R0,70018404 ;return True -SW R0,0000 (T0) -//700182A0: -LW T6,0030 (SP) -ADDIU AT,R0,FFFF -LW T3,0008 (T6) -BNE T3,AT,70018334 -NOP -//700182B4: -LHU T1,0004 (T6) -ADDIU AT,R0,0002 -BNE T1,AT,70018334 -NOP -//700182C4: -LHU T7,0006 (T6) -ADDIU AT,R0,0001 -BNE T7,AT,70018334 -NOP -//700182D4: -ADDIU T4,T6,0018 -SW T4,0024 (SP) -LW T5,0028 (T6) -BNE T5,R0,70018328 -NOP -//700182E8: -LW T9,0020 (T6) -LW T8,0000 (T9) -LW T2,0004 (T9) -LW T3,0008 (T9) -LW T7,000C (T9) -OR T0,T8,T2 -OR T1,T0,T3 -OR T4,T7,T1 -BEQ T4,R0,70018328 -NOP -//70018310: -LW T6,002C (SP) -ADDIU T5,R0,0006 -JAL 70018414 -SW T5,0000 (T6) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//70018328: -LW T8,002C (SP) -JAL 700184FC -SW R0,0000 (T8) -LW T2,0030 (SP) -LUI AT,4000 -LW T0,0008 (T2) -ADDIU T3,T0,0001 -SW T3,0008 (T2) -LW T9,003C (SP) -AND T7,T9,AT -BEQ T7,R0,700183BC -NOP -//70018358: -LW T1,0030 (SP) -LW T4,0008 (T1) -SLTI AT,T4,0055 -BNE AT,R0,70018384 -NOP -//7001836C: -LW T6,002C (SP) -ADDIU T5,R0,0006 -JAL 70018414 -SW T5,0000 (T6) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//70018384: read from 64DD sector data to rdram -LW T8,002C (SP) -LUI A0,8007 -LUI A2,0500 -LW T0,000C (T8) ;T0=T8+C: length -LW A3,0004 (T8) ;A3=T8+4: rdram address -ORI A2,A2,0400 ;A2=05000400 -LW A0,9074 (A0) ;A0=80069074: -OR A1,R0,R0 ;A1=0: write to rdram -JAL 7001E530 ;request I/O with hardware A0; read/write (A1) SP+10 bytes between hardware offset A2 and rdram A3 -SW T0,0010 (SP) ;SP+10=length -LW T3,002C (SP) -ADDIU V0,R0,0001 -BEQ R0,R0,70018404 ;return True -SW R0,0000 (T3) -//700183BC: -LW T2,0030 (SP) -LW T9,0008 (T2) -SLTI AT,T9,0055 -BEQ AT,R0,700183E8 -NOP -//700183D0: -LW T1,002C (SP) -ADDIU T7,R0,0006 -JAL 70018414 -SW T7,0000 (T1) -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//700183E8: -BEQ R0,R0,70018404 -ADDIU V0,R0,0001 -//700183F0: -LW T5,002C (SP) -ADDIU T4,R0,004B -JAL 70018414 -SW T4,0000 (T5) -ADDIU V0,R0,0001 -//70018404: return -LW RA,001C (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -70018414 -LUI T6,8007 -LW T6,9074 (T6) ;T6=80069074: -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -ADDIU T7,T6,0014 -SW T7,001C (SP) -LUI T8,A460 -LW T9,0010 (T8) ;T9=A4600010: PI Status -SW T9,0018 (SP) -LW T0,0018 (SP) ;T0=PI Status -ANDI T1,T0,0002 -BEQ T1,R0,70018464 ;branch if DMA finished -NOP -LUI T2,A460 -LW T3,0010 (T2) ;T3=A4600010: PI Status -SW T3,0018 (SP) -LW T4,0018 (SP) ;T4=PI Status -ANDI T5,T4,0002 -BNE T5,R0,70018448 ;loop until clear -NOP -//70018464: -LW T6,001C (SP) -LUI AT,1000 -LUI T9,A500 -LW T7,0010 (T6) -LUI T0,A460 -OR T8,T7,AT -SW T8,0510 (T9) ;T8->A5000510: 64DD Interrupts | 10000000 -LW T1,0010 (T0) ;T1=A4600010: PI Status -SW T1,0018 (SP) -LW T2,0018 (SP) -ANDI T3,T2,0002 -BEQ T3,R0,700184B4 -NOP -LUI T4,A460 -LW T5,0010 (T4) ;T5=A4600010: PI Status -SW T5,0018 (SP) -LW T6,0018 (SP) -ANDI T7,T6,0002 -BNE T7,R0,70018498 -NOP -LW T8,001C (SP) -LUI T0,A500 -LW T9,0010 (T8) -JAL 700184FC -SW T9,0510 (T0) ;T9->A5000510: 64DD Interrupts set to prev. -ADDIU T1,R0,0002 -LUI T2,A460 -SW T1,0010 (T2) ;2->A4600010: PI Status DMA flag -LUI T3,8002 -LW T3,698C (T3) -LUI AT,0010 -LW RA,0014 (SP) -ORI AT,AT,0401 -OR T4,T3,AT -LUI AT,8002 -SW T4,698C (AT) -JR RA -ADDIU SP,SP,0020 - -700184FC -ADDIU SP,SP,FFD0 -LUI T6,8006 -ADDIU T6,T6,6A10 ;T6=80066A10 -ADDIU T7,T6,0040 -SW RA,001C (SP) -SW S0,0018 (SP) -SW T7,002C (SP) -LW T8,0040 (T6) -BEQ T8,R0,700185D4 -SW T8,0028 (SP) -LW T9,0008 (T8) -LW T0,0010 (T8) -SLT AT,T9,T0 -BEQ AT,R0,700185D4 -NOP -LW T1,0028 (SP) -LW T6,002C (SP) -LW T2,000C (T1) -LW T3,0008 (T1) -LW T5,0010 (T1) -ADDU T4,T2,T3 -DIV T4,T5 -MFHI T7 -SW T7,0024 (SP) -LW T0,0014 (T1) -LW T8,0004 (T6) -SLL T9,T7,0x2 -ADDU T2,T0,T9 -SW T8,0000 (T2) -LW T3,0028 (SP) -BNE T5,R0,70018580 -NOP -BREAK 00001C00 ;Break: division by zero -//70018580: -ADDIU AT,R0,FFFF -BNE T5,AT,70018598 -LUI AT,8000 -BNE T4,AT,70018598 -NOP -BREAK 00001800 -//70018598: -LW T4,0008 (T3) -ADDIU T5,T4,0001 -SW T5,0008 (T3) -LW T6,0028 (SP) -LW T7,0000 (T6) -LW T1,0000 (T7) -BEQ T1,R0,700185D4 -NOP -//700185B8: -JAL 700108F4 ;V0= popped thread A0 -OR A0,T6,R0 -OR S0,V0,R0 -LUI A0,8002 -ADDIU A0,A0,7728 -JAL 700108AC ;insert thread A1 into thread list A0 -OR A1,S0,R0 -//700185D4: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -700185F0 191F0 V0= COP0 interrupt enabled flag; disables flag in register -MFC0 T0,Status/DPC-Clock -ADDIU AT,R0,FFFE -AND T1,T0,AT ;T1=Status & (~1) -MTC0 T1,Status/DPC-Clock -ANDI V0,T0,0001 ;V0= interrupt enabled flag -NOP -JR RA -NOP - -70018610 19210 set flags A0 in COP0 Status - accepts: A0=flags -MFC0 T0,Status/DPC-Clock -OR T0,T0,A0 -MTC0 T0,Status/DPC-Clock -NOP -NOP -JR RA -NOP - -70018630 -LUI AT,8007 -ADDIU T6,R0,0000 -ADDIU T7,R0,0000 -SW T7,8E14 (AT) -SW T6,8E10 (AT) -LUI AT,8007 -LUI T8,8002 -LW T8,7FD0 (T8) -SW R0,8E18 (AT) -LUI AT,8007 -SW R0,8E1C (AT) -LUI T9,8002 -SW T8,0004 (T8) -LW T9,7FD0 (T9) -LUI T1,8002 -ADDIU T2,R0,0000 -LW T0,0004 (T9) -ADDIU T3,R0,0000 -LUI T4,8002 -SW T0,0000 (T9) -LW T1,7FD0 (T1) -LUI T5,8002 -LUI T8,8002 -SW T2,0010 (T1) -SW T3,0014 (T1) -LW T4,7FD0 (T4) -LW T6,0010 (T4) -LW T7,0014 (T4) -SW T6,0008 (T4) -SW T7,000C (T4) -LW T5,7FD0 (T5) -SW R0,0018 (T5) -LW T8,7FD0 (T8) -JR RA -SW R0,001C (T8) - -700186BC -LUI T6,8002 -LW T6,7FD0 (T6) ;T6=80027FD0: -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -LW T7,0000 (T6) ;T7=T6+0: -BEQ T7,T6,70018824 ;return if same pointer -NOP -//700186D8: -LUI T8,8002 -LW T8,7FD0 (T8) -LW T9,0000 (T8) ;T9=p@80027FD0: -BNE T9,T8,70018700 ;if same, rezero the Compare -SW T9,0024 (SP) -JAL 7001F8E0 ;A0->COP0 Compare -OR A0,R0,R0 ;A0=0 -LUI AT,8007 -BEQ R0,R0,70018824 -SW R0,8E20 (AT) ;0->80068E20: reset prev.Count -//70018700: -JAL 7000D8E0 ;V0=Count -NOP -SW V0,0020 (SP) ;SP+20=cur.Count -LUI T1,8007 -LW T1,8E20 (T1) ;T1=80068E20: prev.Count -LW T0,0020 (SP) -LW T7,0024 (SP) ;T7=p@80027FD0: -LUI AT,8007 -SUBU T2,T0,T1 ;T2= cur.Count - prev.Count -SW T2,001C (SP) ;SP+1C= difference -SW T0,8E20 (AT) ;T0->prev.Count -LW T6,0010 (T7) -LW T3,001C (SP) -ADDIU T4,R0,0000 -OR T9,T7,R0 -SLTU AT,T6,T4 -LW T7,0014 (T7) -BNE AT,R0,700187A0 -OR T5,T3,R0 -SLTU AT,T4,T6 -BNE AT,R0,70018760 -SLTU AT,T5,T7 -BEQ AT,R0,700187A0 -NOP -//70018760: -ADDIU T8,T9,0010 -SW T8,0018 (SP) -LW T3,0014 (T9) -LW T2,0010 (T9) -SLTU AT,T3,T5 -SUBU T0,T2,T4 -SUBU T0,T0,AT -SUBU T1,T3,T5 -SW T1,0014 (T9) -SW T0,0010 (T9) -LW T6,0024 (SP) -LW A0,0010 (T6) -JAL 70018834 ;increment COP0 Count by A1 -LW A1,0014 (T6) -BEQ R0,R0,70018824 -NOP -//700187A0: -LW T7,0024 (SP) -LW T8,0000 (T7) -LW T2,0004 (T7) -SW T8,0000 (T2) -LW T3,0024 (SP) -LW T4,0004 (T3) -LW T5,0000 (T3) -SW T4,0004 (T5) -LW T0,0024 (SP) -SW R0,0000 (T0) -LW T1,0024 (SP) -SW R0,0004 (T1) -LW T9,0024 (SP) -LW T6,0018 (T9) -BEQ T6,R0,700187F0 -NOP -//700187E0: -OR A0,T6,R0 -LW A1,001C (T9) -JAL 7000DF10 -OR A2,R0,R0 -//700187F0: -LW T7,0024 (SP) -LW T8,0008 (T7) -LW T9,000C (T7) -BNE T8,R0,7001880C -NOP -BEQ T9,R0,700186D8 -NOP -//7001880C: -SW T8,0010 (T7) -SW T9,0014 (T7) -JAL 700188A8 -LW A0,0024 (SP) -BEQ R0,R0,700186D8 -NOP -//70018824: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70018834 19434 increment COP0 Count by A1 - accepts: A0=, A1=increment -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A0,0028 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW A1,002C (SP) -JAL 7000D8E0 ;V0=Count -SW V0,001C (SP) -LUI AT,8007 -SW V0,8E20 (AT) ;V0->80068E20: Count -LUI T6,8007 -LW T6,8E20 (T6) ;T6=Count -LW T1,002C (SP) ;T1= A1 f/caller -LW T0,0028 (SP) ;T0= A0 f/caller -OR T9,T6,R0 -ADDU T3,T9,T1 ;T3= Count + A1 -ADDIU T8,R0,0000 -SLTU AT,T3,T1 -ADDU T2,AT,T8 ;T2= True if Count negative -ADDU T2,T2,T0 ;T2= A0+bit -SW T2,0020 (SP) ;SP+20= value -SW T3,0024 (SP) ;SP+24= Count+A1 -JAL 7001F8E0 ;A0->COP0 Compare -OR A0,T3,R0 ;A0= updated Count -JAL 70018610 ;A0->COP0 status -LW A0,001C (SP) ;enable interrupts -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -700188A8 -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW A0,0038 (SP) -LUI T6,8002 -LW T6,7FD0 (T6) -SW V0,0024 (SP) -LW T8,0038 (SP) -LW T7,0000 (T6) -SW T7,0034 (SP) -LW T1,0014 (T8) -LW T0,0010 (T8) -SW T1,002C (SP) -BEQ T7,T6,70018984 -SW T0,0028 (SP) -LW T2,0010 (T7) -LW T3,0014 (T7) -SLTU AT,T0,T2 -BNE AT,R0,70018984 -SLTU AT,T2,T0 -BNE AT,R0,70018908 -SLTU AT,T3,T1 -BEQ AT,R0,70018984 -NOP -ADDIU T9,SP,0028 -LW T8,0034 (SP) -SW T9,0020 (SP) -LW T5,0004 (T9) -LW T4,0000 (T9) -LW T7,0014 (T8) -LW T6,0010 (T8) -LUI T8,8002 -SLTU AT,T5,T7 -SUBU T0,T4,T6 -SUBU T0,T0,AT -SUBU T1,T5,T7 -SW T1,0004 (T9) -SW T0,0000 (T9) -LW T2,0034 (SP) -LW T8,7FD0 (T8) -LW T3,0000 (T2) -BEQ T3,T8,70018984 -SW T3,0034 (SP) -LW T4,0028 (SP) -LW T6,0010 (T3) -LW T5,002C (SP) -LW T7,0014 (T3) -SLTU AT,T6,T4 -BNE AT,R0,70018908 -NOP -SLTU AT,T4,T6 -BNE AT,R0,70018984 -SLTU AT,T7,T5 -BNE AT,R0,70018908 -NOP -LW T9,0038 (SP) -LW T0,0028 (SP) -LW T1,002C (SP) -LUI T8,8002 -SW T0,0010 (T9) -SW T1,0014 (T9) -LW T8,7FD0 (T8) -LW T2,0034 (SP) -BEQ T2,T8,700189DC -NOP -ADDIU T3,T2,0010 -SW T3,001C (SP) -LW T5,0014 (T2) -LW T4,0010 (T2) -LW T6,0028 (SP) -LW T7,002C (SP) -SUBU T0,T4,T6 -SLTU AT,T5,T7 -SUBU T0,T0,AT -SUBU T1,T5,T7 -SW T1,0014 (T2) -SW T0,0010 (T2) -LW T9,0034 (SP) -LW T8,0038 (SP) -SW T9,0000 (T8) -LW T3,0034 (SP) -LW T5,0038 (SP) -LW T4,0004 (T3) -SW T4,0004 (T5) -LW T7,0034 (SP) -LW T6,0038 (SP) -LW T0,0004 (T7) -SW T6,0000 (T0) -LW T2,0034 (SP) -LW T1,0038 (SP) -SW T1,0004 (T2) -JAL 70018610 ;A0->COP0 status -LW A0,0024 (SP) -LW RA,0014 (SP) -LW V0,0028 (SP) -LW V1,002C (SP) -JR RA -ADDIU SP,SP,0038 - -70018A30 19630 V0= priority of thread A0 or cur.thread if NULL - accepts: A0=p->thread or NULL -BNE A0,R0,70018A40 ;if NULL use pointer at 80027730 -NOP -LUI A0,8002 -LW A0,7730 (A0) ;A0=80027730: p->cur.thread -//70018A40: -JR RA -LW V0,0004 (A0) ;V0=thread+4: priority - -70018A50 19650 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -ADDIU A0,A0,7FE0 ;A0=80027FE0 -JAL 70017C40 ;initialize A1 bytes at A0 to zero -ADDIU A1,R0,0060 ;A1=60 -LUI T6,8002 -ADDIU T6,T6,7FE0 -LUI AT,8003 -SW T6,8040 (AT) ;buffer+0 -> 80028040: -LUI AT,8003 -ADDIU T7,T6,0030 -SW T7,8044 (AT) ;buffer+30-> 80028044: -ADDIU T8,R0,0001 -SH T8,0032 (T6) ;0001 -> buf2 + 2 -LUI T0,8003 -LW T0,8040 (T0) -ADDIU T9,R0,0001 -LUI T1,8003 -SH T9,0002 (T0) ;0001 -> buf1 + 2 -LW T1,8048 (T1) ;T1=80028048: -BEQ T1,R0,70018AD4 -NOP -//70018AAC: -LUI T3,8003 -LW T3,8044 (T3) -LUI T2,8003 -ADDIU T2,T2,8320 -LUI T4,02E6 -ORI T4,T4,D354 -LUI AT,8003 -SW T2,0008 (T3) ;80028320 -> buf2 + 8 -BEQ R0,R0,70018AF8 -SW T4,804C (AT) ;02E6D354 -> 8002804C: -//70018AD4: -LUI T7,8003 -LW T7,8044 (T7) -LUI T5,8003 -ADDIU T5,T5,8370 -LUI T8,02F5 -ORI T8,T8,B2D2 -LUI AT,8003 -SW T5,0008 (T7) ;80028370 -> buf2 + 8 -SW T8,804C (AT) ;02F5B2D2 -> 8002804C: -//70018AF8: -LUI T9,8003 -LW T9,8044 (T9) -ADDIU T6,R0,0020 -LUI T0,8003 -SH T6,0000 (T9) ;0020 -> buf2 + 0 -LW T0,8044 (T0) -LUI T3,A440 -LW T1,0008 (T0) ;T1= buf2 + 8 -LW T2,0004 (T1) -SW T2,000C (T0) -LW T4,0010 (T3) ;T4= A4400010: VI Current Line Reg -SLTIU AT,T4,000B -BNE AT,R0,70018B44 -NOP -//70018B30: wait until on final 11 lines -LUI T5,A440 -LW T7,0010 (T5) -SLTIU AT,T7,000B -BEQ AT,R0,70018B30 -NOP -//70018B44: -LUI T8,A440 -JAL 70018B70 -SW R0,0000 (T8) ;0->A4400000: reset VI Status -//70018B50: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70018B60 -LUI V0,8003 -JR RA -LW V0,8040 (V0) ;V0=80028040: - -70018B70 -ADDIU SP,SP,FFB8 -SW S1,001C (SP) -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S0,0018 (SP) -SW R0,0030 (SP) -LUI S1,8003 -LUI T6,A440 -LW S1,8044 (S1) -LW T7,0010 (T6) ;T7= A4400010: VI Current Line Reg -LW S0,0008 (S1) -ANDI T8,T7,0001 -SW T8,0030 (SP) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0004 (S1) -LW T9,0030 (SP) -OR S2,V0,R0 -SLL T0,T9,0x2 -ADDU T0,T0,T9 -SLL T0,T0,0x2 -ADDU T1,S0,T0 -LW T2,0028 (T1) -ADDU T3,T2,S2 -SW T3,003C (SP) -LHU T4,0000 (S1) -ANDI T5,T4,0002 -BEQ T5,R0,70018BFC -NOP -LW T7,0020 (S0) -LW T6,0020 (S1) -ADDIU AT,R0,F000 -AND T8,T7,AT -OR T9,T6,T8 -BEQ R0,R0,70018C04 -SW T9,0020 (S1) -LW T0,0020 (S0) -SW T0,0020 (S1) -LHU T1,0000 (S1) -ANDI T2,T1,0004 -BEQ T2,R0,70018D14 -NOP -LW T3,0030 (SP) -SLL T4,T3,0x2 -ADDU T4,T4,T3 -SLL T4,T4,0x2 -ADDU T5,S0,T4 -LW T7,002C (T5) -ANDI T6,T7,0FFF -MTC1 T6,F6 -SW T6,0034 (SP) -LWC1 F4,0024 (S1) -BGEZ T6,70018C54 -CVT.S.W F8,F6 -LUI AT,4F80 -MTC1 AT,F10 -NOP -ADD.S F8,F8,F10 -MUL.S F16,F4,F8 -ADDIU T9,R0,0001 -CFC1 T8,F31 -CTC1 T9,F31 -NOP -CVT.W.S F18,F16 -CFC1 T9,F31 -NOP -ANDI AT,T9,0004 -ANDI T9,T9,0078 -BEQ T9,R0,70018CCC -LUI AT,4F00 -MTC1 AT,F18 -ADDIU T9,R0,0001 -SUB.S F18,F16,F18 -CTC1 T9,F31 -NOP -CVT.W.S F18,F18 -CFC1 T9,F31 -NOP -ANDI AT,T9,0004 -ANDI T9,T9,0078 -BNE T9,R0,70018CC4 -NOP -MFC1 T9,F18 -LUI AT,8000 -BEQ R0,R0,70018CDC -OR T9,T9,AT -BEQ R0,R0,70018CDC -ADDIU T9,R0,FFFF -MFC1 T9,F18 -NOP -BLTZ T9,70018CC4 -NOP -SW T9,002C (S1) -LW T1,0030 (SP) -LW T0,002C (S1) -ADDIU AT,R0,F000 -SLL T2,T1,0x2 -ADDU T2,T2,T1 -SLL T2,T2,0x2 -ADDU T3,S0,T2 -LW T4,002C (T3) -CTC1 T8,F31 -AND T5,T4,AT -OR T7,T0,T5 -BEQ R0,R0,70018D30 -SW T7,002C (S1) -LW T6,0030 (SP) -SLL T8,T6,0x2 -ADDU T8,T8,T6 -SLL T8,T8,0x2 -ADDU T9,S0,T8 -LW T1,002C (T9) -SW T1,002C (S1) -LW T2,001C (S0) -SW T2,0038 (SP) -LHU T3,0000 (S1) -ANDI T4,T3,0020 -BEQ T4,R0,70018D4C -NOP -SW R0,0038 (SP) -LHU T0,0000 (S1) -ANDI T5,T0,0040 -BEQ T5,R0,70018D6C -NOP -SW R0,002C (S1) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0004 (S1) -SW V0,003C (SP) -LHU T7,0000 (S1) -ANDI T6,T7,0080 -BEQ T6,R0,70018D9C -NOP -LHU T8,0028 (S1) -LUI AT,03FF -LW A0,0004 (S1) -SLL T9,T8,0x10 -AND T1,T9,AT -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -SW T1,002C (S1) -SW V0,003C (SP) -LW T2,003C (SP) -LUI T3,A440 -LUI T0,A440 -SW T2,0004 (T3) ;T2-> A4400004: VI Dram Address -LW T4,0008 (S0) -LUI T7,A440 -LUI T8,A440 -SW T4,0008 (T0) ;T4-> A4400008: VI Horizontal Width -LW T5,000C (S0) -LUI T1,A440 -LUI AT,8003 -SW T5,0014 (T7) ;T5-> A4400014: VI Timing -LW T6,0010 (S0) -SW T6,0018 (T8) ;T6-> A4400018: VI Vertical Sync -LW T9,0014 (S0) -SW T9,001C (T1) ;T9-> A440001C: VI Horizontal Sync -LW T2,0018 (S0) -LUI T9,A440 -SW T2,0020 (T3) -LW T4,0038 (SP) -SW T4,0024 (T0) -LW T5,0030 (SP) -SLL T7,T5,0x2 -ADDU T7,T7,T5 -SLL T7,T7,0x2 -ADDU T6,S0,T7 -LW T8,0030 (T6) -SW T8,0028 (T9) ;T8-> A4400028: VI Vertical Video -LW T1,0030 (SP) -SLL T2,T1,0x2 -ADDU T2,T2,T1 -SLL T2,T2,0x2 -ADDU T3,S0,T2 -LW T4,0034 (T3) -LUI T2,A440 -SW T4,002C (T0) ;T4-> A440002C: VI Vertical Burst -LW T5,0030 (SP) -LUI T4,A440 -SLL T7,T5,0x2 -ADDU T7,T7,T5 -SLL T7,T7,0x2 -ADDU T6,S0,T7 -LW T8,0038 (T6) -LUI T5,A440 -LUI T7,8003 -SW T8,000C (T9) -LW T1,0020 (S1) -LUI T8,8003 -LUI T6,8003 -SW T1,0030 (T2) ;T1-> A4400030: VI X Scale -LW T3,002C (S1) -SW T3,0034 (T4) ;T3-> A4400034: VI Y Scale -LW T0,000C (S1) -SW T0,0000 (T5) ;T0-> A4400000: VI Status -LW T7,8040 (T7) -SW T7,8044 (AT) -LUI AT,8003 -SW S1,8040 (AT) -LW T8,8040 (T8) -LW T6,8044 (T6) -//70018E90: -ADDIU T2,T8,0030 -LW AT,0000 (T8) -ADDIU T8,T8,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T8) -SW AT,FFF8 (T6) -LW AT,FFFC (T8) -BNE T8,T2,70018E90 -SW AT,FFFC (T6) -//70018EB8: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0048 - -70018ED0 19AD0 V0= RSP Status -LUI T6,A404 -JR RA -LW V0,0010 (T6) ;V0=A4040010: RSP Status - -70018EE0 19AE0 A0-> RSP Status -LUI T6,A404 -JR RA -SW A0,0010 (T6) ;A0-> A4040010: RSP Status - -70018EF0 -LUI T6,A404 -LW A1,0010 (T6) ;A1=A4040010: RSP Status -ADDIU SP,SP,FFF8 -ANDI T7,A1,0001 -BNE T7,R0,70018F10 -NOP -BEQ R0,R0,70018F1C -ADDIU V0,R0,FFFF -LUI T8,A408 -SW A0,0000 (T8) -OR V0,R0,R0 -JR RA -ADDIU SP,SP,0008 - -70018F30 19B30 read or write (A0) A3 bytes between RSP address A1 and rdram A2 - accepts: A0=mode (0-write; 1-read), A1=RSP address, A2=rdram address, A3=length -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -SW A2,0020 (SP) -JAL 70018FC0 -SW A3,0024 (SP) -BEQ V0,R0,70018F5C -NOP -BEQ R0,R0,70018FAC ;return -1: error! -ADDIU V0,R0,FFFF -//70018F5C: -LW T6,001C (SP) -LUI T7,A404 -SW T6,0000 (T7) ;A4040000+0 = RSP address -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0020 (SP) -LUI T8,A404 -SW V0,0004 (T8) ;A4040000+4 = V0: rdram address -LW T9,0018 (SP) ;T9=mode -BNE T9,R0,70018F98 ;branch in read (1) -NOP -//70018F84: mode 0: write to RSP -LW T0,0024 (SP) -LUI T2,A404 -ADDIU T1,T0,FFFF -BEQ R0,R0,70018FA8 -SW T1,000C (T2) ;A4040000+C = length-1: write length -//70018F98: mode 1: read from RSP -LW T3,0024 (SP) -LUI T5,A404 -ADDIU T4,T3,FFFF -SW T4,0008 (T5) ;A4040000+8 = length-1: read length -//70018FA8: return 0: okay! -OR V0,R0,R0 -//70018FAC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70018FC0 -LUI T6,A404 -LW A0,0010 (T6) ;A0=A4040010: RSP Status -ADDIU SP,SP,FFF8 -ANDI T7,A0,001C -BEQ T7,R0,70018FE0 ;return okay if flags not set -NOP -BEQ R0,R0,70018FE4 ;return 1: error! -ADDIU V0,R0,0001 -//70018FE0: return 0: okay! -OR V0,R0,R0 -//70018FE4: return -JR RA -ADDIU SP,SP,0008 - -70018FF0 19BF0 V0=TRUE if DP Cmd Status DMA busy flag set -LUI T6,A410 -LW A0,000C (T6) ;A0=A410000C: DP Cmd Status -ADDIU SP,SP,FFF8 -ANDI T7,A0,0100 ;T7=Status & 0x100: DMA busy flag -BEQ T7,R0,70019010 -NOP -BEQ R0,R0,70019014 ;return TRUE -ADDIU V0,R0,0001 -//70019010: return FALSE -OR V0,R0,R0 -//70019014: return -JR RA -ADDIU SP,SP,0008 - -70019020 19C20 V0=physical address for virtual address A0 - accepts: A0=virtual address -MFC0 T0,EntryHi ;T0=COP0 EntryHi: cur.Vaddr -ANDI T1,T0,00FF ;T1=T0&FF: ASID -ADDIU AT,R0,E000 -AND T2,A0,AT ;T2= A0 & (~1FFF) -OR T1,T1,T2 ;T1|=T2: A0 masked, extended with ASID -MTC0 T1,EntryHi ;COP0 EntryHi = new address -NOP -NOP -NOP -TLBP -NOP -NOP -MFC0 T3,Index ;T3= index of hit -LUI AT,8000 -AND T3,T3,AT -BNE T3,R0,700190C8 ;return on miss (flag set) -NOP -//70019064: read entry if found -TLBR -NOP -NOP -NOP -MFC0 T3,PageMask ;T3=COP0 PageMask -ADDI T3,T3,2000 -SRL T3,T3,0x1 ;T3= PageMask/2 + 1000 -AND T4,T3,A0 ;T4= T3 & A0: True if odd page -BNE T4,R0,70019098 ;branch if odd -ADDI T3,T3,FFFF ;T3->mask -MFC0 V0,EntryLo0 -BEQ R0,R0,7001909C -NOP -//70019098: use odd page instead -MFC0 V0,EntryLo1 -//7001909C: -ANDI T5,V0,0002 ;T5=valid flag -BEQ T5,R0,700190C8 ;return invalid if not set -NOP -LUI AT,3FFF -ORI AT,AT,FFC0 -AND V0,V0,AT ;V0&=3FFFFFC0: PageFrame -SLL V0,V0,0x6 ;V0<<=6: offset in rdram to start of TLB segment -AND T5,A0,T3 ;T5=address & pagemask: offset from start of segment -ADD V0,V0,T5 ;V0+=(PageMask & Vaddr): physical address -BEQ R0,R0,700190CC -NOP -//700190C8: return invalid -ADDIU V0,R0,FFFF -//700190CC: return -MTC0 T0,EntryHi ;restore EntryHi -JR RA -NOP - -700190E0 19CE0 0->A0 -JR RA -SW R0,0000 (A0) - -700190F0 -LUI T6,A450 -LW A0,000C (T6) -LUI AT,8000 -ADDIU SP,SP,FFF8 -AND T7,A0,AT -BEQ T7,R0,70019114 -NOP -BEQ R0,R0,70019118 -ADDIU V0,R0,0001 -OR V0,R0,R0 -JR RA -ADDIU SP,SP,0008 - -70019120 - accepts: A0=p->??? -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A1,7002 -LUI A2,7002 -ADDIU A2,A2,B5F0 ;A2= 7001B5F0 -ADDIU A1,A1,B624 ;A1= 7001B624 -SW A0,0018 (SP) -JAL 7001F8F0 -ADDIU A3,R0,0003 ;A3= 3 -LW A0,0018 (SP) -ADDIU T6,R0,0001 -SW R0,0014 (A0) ;A0=14= 0 -SW T6,0018 (A0) ;A0+18= 1 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70019164 - accepts: A0=p->???, A1=, A2= -ADDIU SP,SP,FFE8 -SW A1,001C (SP) -SW A2,0020 (SP) -SW RA,0014 (SP) -LUI A2,7002 -LUI A1,7002 -ADDIU A1,A1,9990 ;A1= 70019990 -ADDIU A2,A2,9960 ;A2= 70019960 -SW A0,0018 (SP) -JAL 7001F8F0 -ADDIU A3,R0,0007 ;A3= 7 -LW A0,0018 (SP) -SW R0,0014 (A0) ;A0+14=0 -LW T6,0020 (SP) -SW T6,0018 (A0) ;A0+18= A2 f/caller -LW T7,001C (SP) -SW T7,001C (A0) ;A0+1C= A1 f/caller -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700191B8 - accepts: A0=p->???, A1=, A2= -ADDIU SP,SP,FFE8 -SW A1,001C (SP) -SW A2,0020 (SP) -SW RA,0014 (SP) -LUI A2,7002 -LUI A1,7002 -ADDIU A1,A1,B510 ;A1= 7001B510 -ADDIU A2,A2,B4E0 ;A2= 7001B4E0 -SW A0,0018 (SP) -JAL 7001F8F0 -ADDIU A3,R0,0006 ;A3= 6 -LW A0,0018 (SP) -SW R0,0014 (A0) ;A0+14= 0 -LW T6,0020 (SP) -SW T6,0018 (A0) ;A0+18= A2 f/caller -LW T7,001C (SP) -SW T7,001C (A0) ;A0+1C= A1 f/caller -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7001920C - accepts: A0=p->???, A1= -ADDIU SP,SP,FFE0 -SW A1,0024 (SP) -SW RA,001C (SP) -LUI A1,7002 -LUI A2,7002 -ADDIU A2,A2,A600 ;A2= 7001A600 -ADDIU A1,A1,A6EC ;A1= 7001A6EC -SW A0,0020 (SP) -JAL 7001F8F0 -ADDIU A3,R0,0001 ;A3= 1 -ADDIU T6,R0,0020 -SW T6,0010 (SP) ;SP+10= 20 bytes -OR A0,R0,R0 -OR A1,R0,R0 -LW A2,0024 (SP) -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LW T0,0020 (SP) -LUI AT,3F80 -MTC1 R0,F4 -MTC1 AT,F6 -ADDIU T7,R0,0001 -SW V0,0014 (T0) -SW T7,0024 (T0) -SW R0,0030 (T0) -SW R0,001C (T0) -SW R0,0028 (T0) -SW R0,002C (T0) -SWC1 F4,0020 (T0) -SWC1 F6,0018 (T0) -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -70019294 - accepts: A0=p->???, A1=p->function, A2= -ADDIU SP,SP,FFD8 -SW A1,002C (SP) -SW A2,0030 (SP) -SW RA,0024 (SP) -SW S0,0020 (SP) -LUI A2,7002 -LUI A1,7002 -OR S0,A0,R0 ;S0=A0 -ADDIU A1,A1,A15C ;A1= 7001A15C -ADDIU A2,A2,9AB0 ;A2= 70019AB0 -JAL 7001F8F0 -OR A3,R0,R0 ;A3= 0 -ADDIU T6,R0,0020 -SW T6,0010 (SP) ;SP+10= 20 bytes -OR A0,R0,R0 -OR A1,R0,R0 -LW A2,0030 (SP) -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -SW V0,0014 (S0) -ADDIU T7,R0,0020 -SW T7,0010 (SP) ;SP+10= 20 bytes -LW A2,0030 (SP) -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -SW V0,0018 (S0) -LW T9,002C (SP) -ADDIU A0,S0,0034 -JALR RA,T9 -NOP -ADDIU T8,R0,0001 -SW V0,0030 (S0) -SW R0,003C (S0) -SW T8,0040 (S0) -SW R0,0044 (S0) -LW RA,0024 (SP) -LW S0,0020 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7001933C - accepts: A0=p->???, A1= -ADDIU SP,SP,FFE0 -SW A1,0024 (SP) -SW RA,001C (SP) -LUI A1,7002 -LUI A2,7002 -ADDIU A2,A2,AA14 ;A2= 7001AA14 -ADDIU A1,A1,AE5C ;A1= 7001AE5C -SW A0,0020 (SP) -JAL 7001F8F0 -ADDIU A3,R0,0004 ;A3= 4 -ADDIU T6,R0,0050 -SW T6,0010 (SP) ;SP+10= 50 bytes -OR A0,R0,R0 -OR A1,R0,R0 -LW A2,0024 (SP) -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ADDIU A3,R0,0001 ;A3= 1 block -LW T0,0020 (SP) -ADDIU V1,R0,0001 -SW V0,0014 (T0) -SW V1,0038 (T0) -SW R0,0048 (T0) -SH V1,001A (T0) -SH V1,0028 (T0) -SH V1,002E (T0) -SH V1,001C (T0) -SH V1,001E (T0) -SH R0,0020 (T0) -SH R0,0022 (T0) -SH V1,0026 (T0) -SH R0,0024 (T0) -SW R0,0030 (T0) -SW R0,0034 (T0) -SH R0,0018 (T0) -SW R0,003C (T0) -SW R0,0040 (T0) -SW R0,0044 (T0) -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -700193E0 -LH V0,0000 (A0) -ADDIU T9,R0,4000 -ADDIU T1,R0,0001 -SLL T6,V0,0xE -SRA V1,T6,0xF -SLL T7,V1,0x10 -SRA V1,T7,0x10 -SUBU T0,T9,V1 -SH T0,0002 (A0) -SW T1,002C (A0) -OR A1,R0,R0 -OR A2,A0,R0 -ADDIU A1,A1,0001 -SLTI AT,A1,0008 -ADDIU A2,A2,0002 -BNE AT,R0,70019410 -SH R0,0006 (A2) -MTC1 V1,F4 -LUI AT,40D0 -MTC1 AT,F13 -CVT.D.W F6,F4 -MTC1 R0,F12 -ADDIU A1,A1,0001 -SLTI AT,A1,0010 -SH V1,0008 (A2) -DIV.D F2,F6,F12 -ADDIU A2,A2,0002 -BEQ AT,R0,70019478 -MOV.D F0,F2 -MUL.D F0,F0,F2 -ADDIU A1,A1,0001 -SLTI AT,A1,0010 -ADDIU A2,A2,0002 -MUL.D F8,F0,F12 -TRUNC.W.D F10,F8 -MFC1 T3,F10 -BNE AT,R0,70019454 -SH T3,0006 (A2) -JR RA -NOP - -70019480 -ADDIU SP,SP,FF98 -SW S6,0058 (SP) -OR S6,A2,R0 -SW RA,0064 (SP) -SW S5,0054 (SP) -SW A1,006C (SP) -LUI A2,7002 -OR S5,A0,R0 -SW S8,0060 (SP) -SW S7,005C (SP) -SW S4,0050 (SP) -SW S3,004C (SP) -SW S2,0048 (SP) -SW S1,0044 (SP) -SW S0,0040 (SP) -SDC1 F26,0038 (SP) -SDC1 F24,0030 (SP) -SDC1 F22,0028 (SP) -SDC1 F20,0020 (SP) -ADDIU A2,A2,01C0 ;A2= 700201C0 -OR A1,R0,R0 ;A1= NULL -JAL 7001F8F0 -ADDIU A3,R0,0005 -LW V0,006C (SP) -LUI T6,7002 -LUI T7,7002 -ADDIU T6,T6,01D8 -ADDIU T7,T7,FFA8 -SW T6,0004 (S5) -SW T7,0028 (S5) -LBU T8,001C (V0) -LUI S3,8003 -ADDIU S3,S3,81B8 ;S3=800281B8 -ADDIU T9,T8,FFFF -SLTIU AT,T9,0006 -BEQ AT,R0,7001956C -SLL T9,T9,0x2 -LUI AT,8003 -ADDU AT,AT,T9 -LW T9,9830 (AT) ;T9=80029830+offset: p->handler -JR T9 -NOP -//70019528: -LUI S3,8003 -BEQ R0,R0,7001956C ;S3=80028050 -ADDIU S3,S3,8050 -//70019534: -LUI S3,8003 -BEQ R0,R0,7001956C ;S3=800280B8 -ADDIU S3,S3,80B8 -//70019540: -LUI S3,8003 -BEQ R0,R0,7001956C ;S3=80028140 -ADDIU S3,S3,8140 -//7001954C: -LUI S3,8003 -BEQ R0,R0,7001956C ;S3=80028168 -ADDIU S3,S3,8168 -//70019558: -LUI S3,8003 -BEQ R0,R0,7001956C ;S3=80028190 -ADDIU S3,S3,8190 -//70019564: -BEQ R0,R0,7001956C -LW S3,0020 (V0) -//7001956C: -LW T0,0000 (S3) -ADDIU T2,R0,0028 -ADDIU S1,R0,0002 -SB T0,0024 (S5) -LW T1,0004 (S3) -OR A0,R0,R0 -OR A1,R0,R0 -SW T1,001C (S5) -SW T2,0010 (SP) ;SP+10= 28 bytes -OR A2,S6,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -ANDI A3,T0,00FF -SW V0,0020 (S5) -LW A3,001C (S5) -ADDIU T3,R0,0002 -SW T3,0010 (SP) ;SP+10= 2 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A2,S6,R0 -LW T4,001C (S5) -SW V0,0014 (S5) -SW V0,0018 (S5) -BEQ T4,R0,700195FC -OR V1,R0,R0 -LW T5,0014 (S5) -SLL T6,V1,0x1 -ADDIU V1,V1,0001 -ADDU T7,T5,T6 -SH R0,0000 (T7) -LW T9,001C (S5) -ANDI T8,V1,FFFF -OR V1,T8,R0 -SLTU AT,T8,T9 -BNEL AT,R0,700195D4 -LW T5,0014 (S5) -LBU T0,0024 (S5) -OR S4,R0,R0 -LUI AT,3F80 -BLEZ T0,7001987C -ADDIU S8,R0,0001 ;S8= 1 block -MTC1 AT,F24 -LUI AT,447A -MTC1 AT,F22 -LUI AT,8003 -MTC1 R0,F26 -LDC1 F20,9848 (AT) -ADDIU S7,R0,0028 -MULTU S4,S7 -SLL T3,S1,0x2 -LW T1,0020 (S5) -ADDU T4,S3,T3 -LW T5,0000 (T4) -ADDIU S1,S1,0001 -ANDI T6,S1,FFFF -SLL T7,T6,0x2 -ADDU T8,S3,T7 -ADDIU S1,T6,0001 -MFLO T2 -ADDU S0,T1,T2 -SW T5,0000 (S0) -LW T9,0000 (T8) -ANDI T0,S1,FFFF -SLL T1,T0,0x2 -ADDU T2,S3,T1 -SW T9,0004 (S0) -LW T3,0000 (T2) -ADDIU S1,T0,0001 -ANDI T4,S1,FFFF -SLL T5,T4,0x2 -ADDU T6,S3,T5 -SH T3,000A (S0) -LW T7,0000 (T6) -ADDIU S1,T4,0001 -ANDI T8,S1,FFFF -SLL T9,T8,0x2 -ADDU T0,S3,T9 -SH T7,0008 (S0) -LW T1,0000 (T0) -ADDIU S1,T8,0001 -ANDI T2,S1,FFFF -SLL T3,T2,0x2 -ADDU T4,S3,T3 -SH T1,000C (S0) -LW V0,0000 (T4) -OR S1,T2,R0 -OR T0,S1,R0 -BEQ V0,R0,700197CC -ADDIU S1,T0,0002 -MTC1 V0,F4 -LW T5,006C (SP) -LW T8,0004 (S0) -CVT.S.W F6,F4 -LW T6,0018 (T5) -LW T9,0000 (S0) -ADDIU S1,T2,0001 -MTC1 T6,F16 -ANDI T7,S1,FFFF -DIV.S F8,F6,F22 -SUBU T0,T8,T9 -OR S1,T7,R0 -SLL T1,S1,0x2 -CVT.D.W F18,F16 -ADDU T2,S3,T1 -LUI AT,41F0 -CVT.D.S F0,F8 -MTC1 T0,F8 -ADD.D F10,F0,F0 -CVT.D.W F16,F8 -DIV.D F4,F10,F18 -CVT.S.D F6,F4 -BGEZ T0,70019740 -SWC1 F6,0010 (S0) -MTC1 AT,F11 -MTC1 R0,F10 -NOP -ADD.D F16,F16,F10 -LW T3,0000 (T2) -ADDIU S1,S1,0001 -ANDI T4,S1,FFFF -MTC1 T3,F18 -SWC1 F24,0014 (S0) -SW R0,0018 (S0) -CVT.S.W F4,F18 -ADDIU T5,R0,0034 -OR S1,T4,R0 -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S6,R0 -CVT.D.S F6,F4 -OR A3,S8,R0 ;A3=S8: 1 block -DIV.D F8,F6,F20 -MUL.D F10,F8,F16 -CVT.S.D F18,F10 -SWC1 F18,001C (S0) -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW T5,0010 (SP) ;SP+10= 34 bytes -SW V0,0024 (S0) -ADDIU T6,R0,0020 -SW T6,0010 (SP) -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S6,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A3,S8,R0 ;A3=S8: 1 block -LW T7,0024 (S0) -SW V0,0014 (T7) -LW T8,0024 (S0) -SWC1 F26,0020 (T8) -LW T9,0024 (S0) -BEQ R0,R0,700197D8 -SW S8,0024 (T9) -ANDI T1,S1,FFFF -SW R0,0024 (S0) -OR S1,T1,R0 -SLL T2,S1,0x2 -ADDU S2,S3,T2 -LW T3,0000 (S2) -OR A0,R0,R0 -OR A1,R0,R0 -BEQ T3,R0,70019854 -OR A2,S6,R0 -ADDIU T4,R0,0030 -SW T4,0010 (SP) ;SP+10= 30 bytes -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A3,S8,R0 ;A3=S8: 1 block -SW V0,0020 (S0) -ADDIU T5,R0,0008 -SW T5,0010 (SP) ;SP+10= 8 bytes -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,S6,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A3,S8,R0 ;A3=S8: 1 block -LW T6,0020 (S0) -ADDIU S1,S1,0001 -ANDI T9,S1,FFFF -SW V0,0028 (T6) -LW T8,0020 (S0) -LW T7,0000 (S2) -OR S1,T9,R0 -SH T7,0000 (T8) -JAL 700193E0 -LW A0,0020 (S0) -BEQ R0,R0,70019868 -LBU T2,0024 (S5) -ADDIU S1,S1,0001 -ANDI T0,S1,FFFF -SW R0,0020 (S0) -OR S1,T0,R0 -LBU T2,0024 (S5) -ADDIU S4,S4,0001 -ANDI T1,S4,FFFF -SLT AT,T1,T2 -BNE AT,R0,7001962C -OR S4,T1,R0 -LW RA,0064 (SP) -LDC1 F20,0020 (SP) -LDC1 F22,0028 (SP) -LDC1 F24,0030 (SP) -LDC1 F26,0038 (SP) -LW S0,0040 (SP) -LW S1,0044 (SP) -LW S2,0048 (SP) -LW S3,004C (SP) -LW S4,0050 (SP) -LW S5,0054 (SP) -LW S6,0058 (SP) -LW S7,005C (SP) -LW S8,0060 (SP) -JR RA -ADDIU SP,SP,0068 - -700198C0 -ADDIU SP,SP,FFE0 -SLL T0,A1,0x10 -SRA T6,T0,0x10 -SW S1,0018 (SP) -SLL S1,T6,0x2 -SW RA,001C (SP) -SW S0,0014 (SP) -SW A1,0024 (SP) -ADDU S1,S1,T6 -LW T7,0034 (A0) -SLL S1,S1,0x2 -SUBU S1,S1,T6 -OR S0,A0,R0 -SLL S1,S1,0x2 -OR A1,A2,R0 -ADDU A0,T7,S1 -ADDIU A0,A0,0020 -JAL 70019480 -OR A2,A3,R0 -LW T8,0034 (S0) -ADDIU A1,R0,0001 -ADDU A2,T8,S1 -JAL 700201C0 -ADDIU A0,A2,0020 -LW T9,0034 (S0) -LW A0,0030 (S0) -ADDIU A1,R0,0002 -ADDU A2,T9,S1 -JAL 70019960 -ADDIU A2,A2,0020 -LW T2,0034 (S0) -LW RA,001C (SP) -LW S0,0014 (SP) -ADDU V0,T2,S1 -LW S1,0018 (SP) -ADDIU SP,SP,0020 -JR RA -ADDIU V0,V0,0020 - -70019960 - accepts: A0=p->???, A1=, A2= -ADDIU AT,R0,0002 -BNE A1,AT,70019988 ;return if A1 isn't 2 -LW V0,001C (A0) -LW T6,0014 (A0) -SLL T7,T6,0x2 ;T7=A0+14 -> offset -ADDU T8,V0,T7 -SW A2,0000 (T8) ;A2->A0+1C + offset: -LW T9,0014 (A0) -ADDIU T0,T9,0001 -SW T0,0014 (A0) ;increment A0+14 -//70019988: return 0: okay -JR RA -OR V0,R0,R0 - -70019990 - accepts: A0=, A1=, A2=, A3=, SP+10= -ADDIU SP,SP,FFB8 -LW T0,0058 (SP) ;T0= SP+10 f/caller -SW RA,0044 (SP) -SW S8,0040 (SP) -SW S7,003C (SP) -SW S6,0038 (SP) -SW S5,0034 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -LW V1,001C (A0) -LUI T6,0200 -SLL V0,A2,0x1 -LUI T7,0200 -ORI T6,T6,0440 ;T6=02000440 -ORI T7,T7,0580 ;T7=02000580 -SW T6,0000 (T0) -SW V0,0004 (T0) -SW T7,0008 (T0) -SW V0,000C (T0) -LW T8,0014 (A0) -OR S5,A2,R0 -OR S7,A1,R0 -OR S8,A3,R0 -OR S4,A0,R0 ;S4=A0 -OR S0,R0,R0 -BLEZ T8,70019A7C -ADDIU S3,T0,0010 -LUI S2,0C00 -ORI S2,S2,7FFF ;S2=0C007FFF -OR S1,V1,R0 -ANDI S6,V0,FFFF -//70019A18: -LW A0,0000 (S1) -SW S3,0010 (SP) -OR A1,S7,R0 -LW T9,0004 (A0) -OR A2,S5,R0 -OR A3,S8,R0 -JALR RA,T9 -NOP -//70019A38: -LUI T2,06C0 -LUI T3,0800 -LUI T1,0800 -ORI T2,T2,0440 -ORI T3,T3,0580 -SW T1,0000 (V0) ;V0+0 = 08000000 -SW S6,0004 (V0) -SW T2,000C (V0) ;V0+C = 06C00440 -SW S2,0008 (V0) ;V0+8 = 0C007FFF -SW T3,0014 (V0) ;V0+14= 08000580 -SW S2,0010 (V0) ;V0+10= 0C007FFF -LW T4,0014 (S4) ;T4= A0+14: -ADDIU S0,S0,0001 ;S0+=1 -ADDIU S1,S1,0004 -SLT AT,S0,T4 -BNE AT,R0,70019A18 -ADDIU S3,V0,0018 -//70019A7C: -LW RA,0044 (SP) -OR V0,S3,R0 -LW S3,002C (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -LW S4,0030 (SP) -LW S5,0034 (SP) -LW S6,0038 (SP) -LW S7,003C (SP) -LW S8,0040 (SP) -JR RA -ADDIU SP,SP,0048 - -70019AB0 -ADDIU SP,SP,FFE8 -ADDIU AT,R0,0004 -SW RA,0014 (SP) -BEQ A1,AT,70019C14 -OR A3,A0,R0 -ADDIU AT,R0,0005 -BNEL A1,AT,70019C78 -LW RA,0014 (SP) -SW A2,0028 (A0) -LW T6,0000 (A2) -SW R0,0038 (A0) -LUI T7,7002 -SW T6,0044 (A0) -LBU V0,0008 (A2) -BEQL V0,R0,70019B08 -LW V0,0028 (A3) -ADDIU A0,R0,0001 -BEQ V0,A0,70019BC8 -LUI T0,7002 -BEQ R0,R0,70019C78 -LW RA,0014 (SP) -LW V0,0028 (A3) -ADDIU T7,T7,A15C -SW T7,0004 (A3) -LW T8,0004 (V0) -ADDIU A1,R0,0009 -DIV T8,A1 -MFLO T9 -BNE A1,R0,70019B2C -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE A1,AT,70019B44 -LUI AT,8000 -BNE T8,AT,70019B44 -NOP -BREAK 00001800 -MULTU T9,A1 -MFLO T0 -SW T0,0004 (V0) -LW V0,0028 (A3) -LW A0,0010 (V0) -LW T1,0000 (A0) -LW T3,0004 (A0) -SLL T2,T1,0x4 -MULTU T2,T3 -MFLO T4 -SW T4,002C (A3) -LW V1,000C (V0) -BEQL V1,R0,70019BBC -SW R0,0024 (A3) -LW T5,0000 (V1) -LW A1,0018 (A3) -ADDIU A2,R0,0020 -SW T5,001C (A3) -LW T6,000C (V0) -LW T7,0004 (T6) -SW T7,0020 (A3) -LW T8,000C (V0) -LW T9,0008 (T8) -SW T9,0024 (A3) -LW A0,000C (V0) -JAL 7001D690 -ADDIU A0,A0,000C -BEQ R0,R0,70019C78 -LW RA,0014 (SP) -SW R0,0024 (A3) -SW R0,0020 (A3) -BEQ R0,R0,70019C74 -SW R0,001C (A3) -LW V0,0028 (A3) -ADDIU T0,T0,9C84 -SW T0,0004 (A3) -LW V1,000C (V0) -BEQL V1,R0,70019C08 -SW R0,0024 (A3) -LW T1,0000 (V1) -SW T1,001C (A3) -LW T2,000C (V0) -LW T3,0004 (T2) -SW T3,0020 (A3) -LW T4,000C (V0) -LW T5,0008 (T4) -BEQ R0,R0,70019C74 -SW T5,0024 (A3) -SW R0,0024 (A3) -SW R0,0020 (A3) -BEQ R0,R0,70019C74 -SW R0,001C (A3) -LW V0,0028 (A3) -ADDIU A0,R0,0001 -SW R0,003C (A3) -SW A0,0040 (A3) -BEQ V0,R0,70019C74 -SW R0,0038 (A3) -LW T6,0000 (V0) -SW T6,0044 (A3) -LBU V1,0008 (V0) -BNE V1,R0,70019C58 -NOP -LW V1,000C (V0) -BEQL V1,R0,70019C78 -LW RA,0014 (SP) -LW T7,0008 (V1) -BEQ R0,R0,70019C74 -SW T7,0024 (A3) -BNEL A0,V1,70019C78 -LW RA,0014 (SP) -LW V1,000C (V0) -BEQL V1,R0,70019C78 -LW RA,0014 (SP) -LW T8,0008 (V1) -SW T8,0024 (A3) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70019C84 -ADDIU SP,SP,FFB0 -LW T0,0060 (SP) -SW S3,0020 (SP) -SW S0,0014 (SP) -OR S0,A0,R0 -OR S3,A2,R0 -SW RA,0024 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW A3,005C (SP) -OR T2,A1,R0 -BNE A2,R0,70019CC0 -OR T1,T0,R0 -BEQ R0,R0,7001A014 -OR V0,T0,R0 -LW V0,0038 (S0) -LW V1,0020 (S0) -ADDU T6,V0,S3 -SLTU AT,V1,T6 -BEQL AT,R0,70019EE4 -LW V0,0028 (S0) -LW T7,0024 (S0) -SUBU S2,V1,V0 -BEQL T7,R0,70019EE4 -LW V0,0028 (S0) -BLEZ S2,70019D64 -SLL S1,S2,0x1 -LW A0,0044 (S0) -LW A2,0034 (S0) -SW T2,0054 (SP) -LW T9,0030 (S0) -OR A1,S1,R0 -JALR RA,T9 -NOP -LW T2,0054 (SP) -ANDI A2,V0,0007 -LW T0,0060 (SP) -LH T8,0000 (T2) -ADDU A3,S1,A2 -ANDI T5,A3,0007 -SUBU T6,A3,T5 -LUI AT,0800 -ANDI T3,T8,FFFF -OR T4,T3,AT -ADDIU T7,T6,0008 -ADDIU T1,T0,0008 -ANDI T9,T7,FFFF -OR A0,T1,R0 -SUBU T3,V0,A2 -LUI T8,0400 -SW T9,0004 (T0) -SW T4,0000 (T0) -SW T3,0004 (A0) -SW T8,0000 (A0) -BEQ R0,R0,70019D68 -ADDIU T1,T1,0008 -OR A2,R0,R0 -LH T4,0000 (T2) -SLT AT,S2,S3 -ADDU T5,T4,A2 -SH T5,0000 (T2) -LW T6,0028 (S0) -LW V0,001C (S0) -LW T7,0000 (T6) -SLL T9,V0,0x1 -SW V0,0038 (S0) -ADDU T8,T7,T9 -SW T8,0044 (S0) -BEQ AT,R0,70019EBC -LH T0,0000 (T2) -LW V0,0024 (S0) -ADDIU AT,R0,FFFF -ADDU T0,T0,S1 -BEQ V0,AT,70019DBC -SUBU S3,S3,S2 -BEQ V0,R0,70019DBC -ADDIU T3,V0,FFFF -SW T3,0024 (S0) -LW T4,0020 (S0) -LW T5,001C (S0) -SUBU V0,T4,T5 -SLTU AT,S3,V0 -BEQ AT,R0,70019DDC -OR S2,V0,R0 -BEQ R0,R0,70019DDC -OR S2,S3,R0 -LW A0,0044 (S0) -LW A2,0034 (S0) -SW T1,004C (SP) -SW T0,002C (SP) -LW T9,0030 (S0) -SLL S1,S2,0x1 -OR A1,S1,R0 -JALR RA,T9 -NOP -LW T0,002C (SP) -ANDI A1,V0,0007 -LW T1,004C (SP) -ANDI V1,T0,0007 -BEQ V1,R0,70019E24 -ADDU A3,S1,A1 -ADDIU T6,R0,0008 -BEQ R0,R0,70019E28 -SUBU A2,T6,V1 -OR A2,R0,R0 -ADDU T7,T0,A2 -ANDI T4,A3,0007 -SUBU T5,A3,T4 -ANDI T8,T7,FFFF -OR V1,T1,R0 -LUI AT,0800 -OR T3,T8,AT -ADDIU T1,T1,0008 -ADDIU T9,T5,0008 -ANDI T6,T9,FFFF -OR A0,T1,R0 -SW T6,0004 (V1) -SW T3,0000 (V1) -SUBU T8,V0,A1 -LUI T7,0400 -SW T7,0000 (A0) -SW T8,0004 (A0) -BNE A1,R0,70019E78 -ADDIU T1,T1,0008 -BEQ A2,R0,70019EB0 -ADDU T3,T0,A1 -LUI AT,00FF -ORI AT,AT,FFFF -ADDU T4,T3,A2 -AND T5,T4,AT -OR V0,T1,R0 -LUI AT,0A00 -SLL T7,T0,0x10 -ANDI T8,S1,FFFF -OR T3,T7,T8 -OR T9,T5,AT -SW T9,0000 (V0) -SW T3,0004 (V0) -ADDIU T1,T1,0008 -SLT AT,S2,S3 -BNEL AT,R0,70019DA0 -LW V0,0024 (S0) -LW T4,0038 (S0) -LW T9,0044 (S0) -SLL T6,S3,0x1 -ADDU T5,T4,S3 -ADDU T7,T9,T6 -SW T5,0038 (S0) -SW T7,0044 (S0) -BEQ R0,R0,7001A014 -OR V0,T1,R0 -LW V0,0028 (S0) -LW A0,0044 (S0) -SLL S1,S3,0x1 -LW T8,0000 (V0) -LW T4,0004 (V0) -ADDU V1,A0,S1 -SUBU T3,V1,T8 -SUBU S2,T3,T4 -BGEZL S2,70019F10 -SLT AT,S1,S2 -OR S2,R0,R0 -SLT AT,S1,S2 -BEQL AT,R0,70019F20 -SLT AT,S2,S1 -OR S2,S1,R0 -SLT AT,S2,S1 -BEQL AT,R0,70019FD4 -SW V1,0044 (S0) -BLEZ S3,70019FA8 -OR A2,R0,R0 -LW A2,0034 (S0) -SUBU A1,S1,S2 -SW A1,0048 (SP) -SW T2,0054 (SP) -LW T9,0030 (S0) -JALR RA,T9 -NOP -LW T2,0054 (SP) -LW A3,0048 (SP) -ANDI A2,V0,0007 -LH T5,0000 (T2) -LW T0,0060 (SP) -ADDU A3,A3,A2 -ANDI T8,A3,0007 -SUBU T3,A3,T8 -LUI AT,0800 -ANDI T6,T5,FFFF -OR T7,T6,AT -ADDIU T4,T3,0008 -ADDIU T1,T0,0008 -ANDI T9,T4,FFFF -OR A0,T1,R0 -SUBU T6,V0,A2 -LUI T5,0400 -SW T9,0004 (T0) -SW T7,0000 (T0) -SW T6,0004 (A0) -SW T5,0000 (A0) -BEQ R0,R0,70019FA8 -ADDIU T1,T1,0008 -LH T7,0000 (T2) -ADDU T8,T7,A2 -SH T8,0000 (T2) -LW T3,0038 (S0) -LW T9,0044 (S0) -ADDU T4,T3,S3 -ADDU T5,T9,S1 -SW T4,0038 (S0) -BEQ R0,R0,70019FD4 -SW T5,0044 (S0) -SW V1,0044 (S0) -BEQ S2,R0,7001A010 -SUBU V1,S1,S2 -BGEZ V1,70019FE8 -OR V0,T1,R0 -OR V1,R0,R0 -LH T6,0000 (T2) -LUI AT,00FF -ORI AT,AT,FFFF -ADDU T7,T6,V1 -AND T8,T7,AT -LUI AT,0200 -OR T3,T8,AT -SW T3,0000 (V0) -SW S2,0004 (V0) -ADDIU T1,T1,0008 -OR V0,T1,R0 -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0050 - -7001A030 -ADDIU SP,SP,FFE8 -SW S3,002C (SP) -SW S5,0028 (SP) -SLL T6,S3,0x10 -SLL T8,S5,0x10 -SRA S5,T8,0x10 -SRA S3,T6,0x10 -BLEZ S1,7001A0B8 -SW RA,0014 (SP) -LW T9,0030 (S2) -LW A0,0044 (S2) -OR A1,S1,R0 -JALR RA,T9 -LW A2,0034 (S2) -ANDI A2,V0,0007 -ADDU S1,S1,A2 -ANDI T6,S3,FFFF -LUI AT,0800 -OR T7,T6,AT -ANDI T8,S1,0007 -OR A0,S0,R0 -SUBU T9,S1,T8 -ADDIU T6,T9,0008 -SW T7,0000 (A0) -ADDIU S0,S0,0008 -ANDI T7,T6,FFFF -OR A1,S0,R0 -SW T7,0004 (A0) -SUBU T9,V0,A2 -LUI T8,0400 -SW T8,0000 (A1) -SW T9,0004 (A1) -BEQ R0,R0,7001A0BC -ADDIU S0,S0,0008 -OR A2,R0,R0 -ANDI T6,S4,0002 -BEQ T6,R0,7001A0E8 -OR V0,S0,R0 -LUI T7,0F00 -SW T7,0000 (V0) -LW T8,0018 (S2) -LUI AT,1FFF -ORI AT,AT,FFFF -AND T9,T8,AT -SW T9,0004 (V0) -ADDIU S0,S0,0008 -ADDU T6,S3,A2 -ANDI T7,T6,FFFF -LUI AT,0800 -OR T8,T7,AT -OR V1,S0,R0 -SW T8,0000 (V1) -SLL T7,S6,0x1 -ANDI T8,T7,FFFF -SLL T6,S5,0x10 -OR T9,T6,T8 -ANDI T7,S4,00FF -ADDIU S0,S0,0008 -SLL T6,T7,0x10 -LUI AT,0100 -SW T9,0004 (V1) -OR T8,T6,AT -OR A0,S0,R0 -SW T8,0000 (A0) -LW T9,0014 (S2) -LUI AT,1FFF -ORI AT,AT,FFFF -AND T7,T9,AT -SW T7,0004 (A0) -SW R0,0040 (S2) -LW RA,0014 (SP) -ADDIU S0,S0,0008 -OR V0,S0,R0 -JR RA -ADDIU SP,SP,0018 - -7001A15C -ADDIU SP,SP,FF50 -SW S7,0044 (SP) -SW A3,00BC (SP) -OR A3,A1,R0 -OR S7,A0,R0 -SW RA,004C (SP) -SW S8,0048 (SP) -SW S6,0040 (SP) -SW S5,003C (SP) -SW S4,0038 (SP) -SW S3,0034 (SP) -SW S2,0030 (SP) -SW S1,002C (SP) -SW S0,0028 (SP) -SW A1,00B4 (SP) -OR T0,A2,R0 -BNE A2,R0,7001A1AC -OR T5,R0,R0 -BEQ R0,R0,7001A5CC -LW V0,00C0 (SP) -LW T6,002C (S7) -LUI AT,00FF -ORI AT,AT,FFFF -LW A1,00C0 (SP) -AND T7,T6,AT -LUI AT,0B00 -OR T8,T7,AT -SW T8,0000 (A1) -LW T9,0028 (S7) -LUI AT,1FFF -ORI AT,AT,FFFF -LW T6,0010 (T9) -ADDIU T2,A1,0008 -OR A2,R0,R0 -ADDIU T7,T6,0008 -AND T8,T7,AT -SW T8,0004 (A1) -LW V1,0038 (S7) -LW A0,0020 (S7) -OR A1,T0,R0 -ADDU T9,V1,T0 -SLTU T1,A0,T9 -BEQ T1,R0,7001A218 -ADDIU T7,R0,0010 -LW T1,0024 (S7) -SLTU T6,R0,T1 -OR T1,T6,R0 -BEQ T1,R0,7001A228 -ADDIU AT,R0,0009 -BEQ R0,R0,7001A228 -SUBU A1,A0,V1 -LW V1,003C (S7) -OR S0,T2,R0 -OR S2,S7,R0 -BEQ V1,R0,7001A244 -OR S3,R0,R0 -BEQ R0,R0,7001A244 -SUBU A2,T7,V1 -SUBU A0,A1,A2 -BGEZ A0,7001A254 -NOP -OR A0,R0,R0 -BEQ T1,R0,7001A45C -ADDIU S8,A0,000F -ADDIU S8,A0,000F -SRA T8,S8,0x4 -LH S5,0000 (A3) -LW S4,0040 (S7) -SLL T1,T8,0x3 -ADDU T1,T1,T8 -OR S1,T1,R0 -SW T1,005C (SP) -SW T0,00B8 (SP) -SW A3,00B4 (SP) -SW A1,008C (SP) -OR S8,T8,R0 -JAL 7001A030 -OR S6,A0,R0 -LW V1,003C (S7) -LW A1,008C (SP) -LW A3,00B4 (SP) -LW T0,00B8 (SP) -LW T1,005C (SP) -BEQ V1,R0,7001A2C4 -OR T2,V0,R0 -LH T9,0000 (A3) -SLL T6,V1,0x1 -ADDU T7,T9,T6 -BEQ R0,R0,7001A2D0 -SH T7,0000 (A3) -LH T8,0000 (A3) -ADDIU T9,T8,0020 -SH T9,0000 (A3) -LW V0,001C (S7) -LW T7,0028 (S7) -SLT AT,A1,T0 -ANDI T6,V0,000F -SW T6,003C (S7) -LW T8,0000 (T7) -SRL T9,V0,0x4 -SLL T6,T9,0x3 -ADDU T6,T6,T9 -ADDU T7,T8,T6 -ADDIU T9,T7,0009 -SW T9,0044 (S7) -SW V0,0038 (S7) -BEQ AT,R0,7001A42C -LH A2,0000 (A3) -SLL V1,A1,0x1 -ADDIU T8,S8,0001 -SLL T6,T8,0x5 -LW V0,0024 (S7) -ADDU A3,T6,A2 -ADDIU AT,R0,FFE0 -AND T7,A3,AT -ADDIU AT,R0,FFFF -SUBU T0,T0,A1 -OR A3,T7,R0 -BEQ V0,AT,7001A348 -ADDU A2,A2,V1 -BEQ V0,R0,7001A348 -ADDIU T9,V0,FFFF -SW T9,0024 (S7) -LW T8,0020 (S7) -LW T6,001C (S7) -OR S0,T2,R0 -OR S2,S7,R0 -SUBU V0,T8,T6 -SLTU AT,T0,V0 -BEQ AT,R0,7001A370 -SLL S5,A3,0x10 -BEQ R0,R0,7001A374 -OR A1,T0,R0 -OR A1,V0,R0 -LW T7,003C (S7) -SRA T8,S5,0x10 -OR S5,T8,R0 -ADDU A0,A1,T7 -ADDIU A0,A0,FFF0 -BGEZ A0,7001A394 -OR S3,R0,R0 -OR A0,R0,R0 -LW S4,0040 (S7) -ADDIU S8,A0,000F -SRA T9,S8,0x4 -SLL T1,T9,0x3 -ADDU T1,T1,T9 -ORI T6,S4,0002 -OR S4,T6,R0 -OR S1,T1,R0 -SW T1,005C (SP) -OR S8,T9,R0 -SW T0,00B8 (SP) -SW A3,0088 (SP) -SW A2,0080 (SP) -SW A1,008C (SP) -JAL 7001A030 -OR S6,A0,R0 -LW T7,003C (S7) -LW A3,0088 (SP) -LUI AT,00FF -SLL T9,T7,0x1 -ORI AT,AT,FFFF -ADDU T8,T9,A3 -AND T6,T8,AT -LW A1,008C (SP) -LUI AT,0A00 -LW A2,0080 (SP) -OR T7,T6,AT -LW T0,00B8 (SP) -LW T1,005C (SP) -SLL V1,A1,0x1 -ANDI T6,V1,FFFF -SW T7,0000 (V0) -SLL T8,A2,0x10 -OR T7,T8,T6 -SLT AT,A1,T0 -SW T7,0004 (V0) -BNE AT,R0,7001A310 -ADDIU T2,V0,0008 -LW T9,003C (S7) -LW T7,0038 (S7) -OR V0,T2,R0 -ADDU T8,T9,T0 -ANDI T6,T8,000F -LW T8,0044 (S7) -SW T6,003C (S7) -ADDU T9,T7,T0 -ADDU T6,T8,T1 -SW T9,0038 (S7) -BEQ R0,R0,7001A5CC -SW T6,0044 (S7) -LW V0,0028 (S7) -SRA T7,S8,0x4 -LW T9,0044 (S7) -SLL T1,T7,0x3 -LW T8,0000 (V0) -ADDU T1,T1,T7 -OR S8,T7,R0 -LW T7,0004 (V0) -ADDU T3,T9,T1 -SUBU T6,T3,T8 -SUBU V1,T6,T7 -BGEZ V1,7001A494 -SLL A1,S8,0x4 -OR V1,R0,R0 -DIV V1,AT -MFLO V0 -SLL A0,V0,0x4 -ADDU T4,A1,A2 -SLT AT,T4,A0 -BEQ AT,R0,7001A4B4 -OR S0,T2,R0 -OR A0,T4,R0 -ANDI T8,A0,000F -SUBU T6,A0,T8 -SLT AT,T6,T0 -BEQ AT,R0,7001A570 -SUBU A2,T1,V1 -LH S5,0000 (A3) -LW S4,0040 (S7) -ADDIU T5,R0,0001 -SW T5,007C (SP) -SW T4,0050 (SP) -SW T1,005C (SP) -SW T0,00B8 (SP) -SW A3,00B4 (SP) -SW A0,0090 (SP) -OR S2,S7,R0 -SUBU S6,A1,A0 -OR S1,A2,R0 -JAL 7001A030 -OR S3,R0,R0 -LW V1,003C (S7) -LW A0,0090 (SP) -LW A3,00B4 (SP) -LW T0,00B8 (SP) -LW T1,005C (SP) -LW T4,0050 (SP) -LW T5,007C (SP) -BEQ V1,R0,7001A538 -OR T2,V0,R0 -LH T7,0000 (A3) -SLL T9,V1,0x1 -ADDU T8,T7,T9 -BEQ R0,R0,7001A544 -SH T8,0000 (A3) -LH T6,0000 (A3) -ADDIU T7,T6,0020 -SH T7,0000 (A3) -LW T9,003C (S7) -LW T7,0038 (S7) -ADDU T8,T9,T0 -ANDI T6,T8,000F -LW T8,0044 (S7) -SW T6,003C (S7) -ADDU T9,T7,T0 -ADDU T6,T8,T1 -SW T9,0038 (S7) -BEQ R0,R0,7001A578 -SW T6,0044 (S7) -SW R0,003C (S7) -SW T3,0044 (S7) -BEQ A0,R0,7001A5C8 -OR V0,T2,R0 -BEQ T5,R0,7001A598 -SW R0,003C (S7) -SUBU V1,T4,A0 -SLL T7,V1,0x1 -BEQ R0,R0,7001A59C -OR V1,T7,R0 -OR V1,R0,R0 -LH T9,0000 (A3) -LUI AT,00FF -ORI AT,AT,FFFF -ADDU T8,T9,V1 -AND T6,T8,AT -LUI AT,0200 -OR T7,T6,AT -SLL T9,A0,0x1 -SW T9,0004 (V0) -SW T7,0000 (V0) -ADDIU T2,T2,0008 -OR V0,T2,R0 -LW RA,004C (SP) -LW S0,0028 (SP) -LW S1,002C (SP) -LW S2,0030 (SP) -LW S3,0034 (SP) -LW S4,0038 (SP) -LW S5,003C (SP) -LW S6,0040 (SP) -LW S7,0044 (SP) -LW S8,0048 (SP) -JR RA -ADDIU SP,SP,00B0 - -7001A600 -ADDIU T6,A1,FFFF -ADDIU SP,SP,FFD8 -SLTIU AT,T6,0009 -SW RA,0014 (SP) -BEQ AT,R0,7001A6C0 -OR A3,A0,R0 -SLL T6,T6,0x2 -LUI AT,8003 -ADDU AT,AT,T6 -LW T6,9850 (AT) -JR T6 -NOP -BEQ R0,R0,7001A6D8 -SW A2,0000 (A3) -LW A0,0000 (A3) -MTC1 R0,F4 -ADDIU T7,R0,0001 -SW T7,0024 (A3) -SW R0,0030 (A3) -SW R0,001C (A3) -BEQ A0,R0,7001A6D8 -SWC1 F4,0020 (A3) -LW T9,0008 (A0) -ADDIU A1,R0,0004 -OR A2,R0,R0 -JALR RA,T9 -NOP -BEQ R0,R0,7001A6DC -LW RA,0014 (SP) -LW A0,0000 (A3) -ADDIU T8,R0,0001 -SW T8,0030 (A3) -BEQL A0,R0,7001A6DC -LW RA,0014 (SP) -LW T9,0008 (A0) -ADDIU A1,R0,0009 -OR A2,R0,R0 -JALR RA,T9 -NOP -BEQ R0,R0,7001A6DC -LW RA,0014 (SP) -SW A2,001C (SP) -LWC1 F6,001C (SP) -BEQ R0,R0,7001A6D8 -SWC1 F6,0018 (A3) -ADDIU T0,R0,0001 -BEQ R0,R0,7001A6D8 -SW T0,001C (A3) -LW A0,0000 (A3) -BEQL A0,R0,7001A6DC -LW RA,0014 (SP) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0028 -OR V0,R0,R0 -JR RA -NOP - -7001A6EC -ADDIU SP,SP,FFB0 -SW RA,001C (SP) -SW A1,0054 (SP) -LW T1,0000 (A0) -ADDIU T6,R0,0140 -OR T0,A0,R0 -OR T2,A2,R0 -BNE A2,R0,7001A718 -SH T6,0046 (SP) -BEQ R0,R0,7001A8E4 -LW V0,0060 (SP) -LW T7,001C (T0) -LW T8,0060 (SP) -BEQL T7,R0,7001A78C -LWC1 F2,0018 (T0) -SW T8,0010 (SP) -SW T2,0058 (SP) -LW T9,0004 (T1) -OR A0,T1,R0 -ADDIU A1,SP,0046 -JALR RA,T9 -OR A2,T2,R0 -LH T3,0046 (SP) -LUI AT,00FF -ORI AT,AT,FFFF -AND T4,T3,AT -LUI AT,0A00 -LW T2,0058 (SP) -OR T5,T4,AT -SW T5,0000 (V0) -LW T6,0054 (SP) -SLL T3,T2,0x1 -ANDI T4,T3,FFFF -LH T8,0000 (T6) -ADDIU A1,V0,0008 -SLL T9,T8,0x10 -OR T5,T9,T4 -BEQ R0,R0,7001A8E0 -SW T5,0004 (V0) -LWC1 F2,0018 (T0) -LUI AT,8003 -LDC1 F4,9878 (AT) -CVT.D.S F6,F2 -LUI AT,8003 -C.LT.D F4,F6 -NOP -BC1FL 7001A7BC -LUI AT,4700 -LWC1 F8,9880 (AT) -SWC1 F8,0018 (T0) -LWC1 F2,0018 (T0) -LUI AT,4700 -MTC1 AT,F12 -OR A0,T1,R0 -ADDIU A1,SP,0046 -MUL.S F10,F2,F12 -TRUNC.W.S F16,F10 -MFC1 T7,F16 -MTC1 T2,F16 -MTC1 T7,F18 -NOP -CVT.S.W F4,F18 -CVT.S.W F18,F16 -SWC1 F4,0018 (T0) -LWC1 F6,0018 (T0) -DIV.S F8,F6,F12 -LWC1 F6,0020 (T0) -SWC1 F8,0018 (T0) -LWC1 F10,0018 (T0) -MUL.S F4,F10,F18 -ADD.S F0,F6,F4 -TRUNC.W.S F8,F0 -MFC1 A2,F8 -NOP -MTC1 A2,F16 -NOP -CVT.S.W F10,F16 -SUB.S F18,F0,F10 -SWC1 F18,0020 (T0) -LW T3,0060 (SP) -SW T2,0058 (SP) -SW T0,0050 (SP) -SW T3,0010 (SP) -LW T9,0004 (T1) -JALR RA,T9 -NOP -LW T0,0050 (SP) -LH T5,0046 (SP) -LUI AT,4700 -MTC1 AT,F4 -LWC1 F6,0018 (T0) -LUI AT,0800 -ANDI T6,T5,FFFF -LW T2,0058 (SP) -OR T7,T6,AT -SW T7,0000 (V0) -LW T8,0054 (SP) -MUL.S F8,F6,F4 -SLL T5,T2,0x1 -LH T9,0000 (T8) -ANDI T6,T5,FFFF -ADDIU T8,V0,0008 -SLL T4,T9,0x10 -OR T7,T4,T6 -TRUNC.W.S F16,F8 -SW T7,0004 (V0) -SW T8,0028 (SP) -LW T3,0024 (T0) -MFC1 V1,F16 -LUI AT,0500 -ANDI T9,T3,00FF -SLL T5,T9,0x10 -OR T4,T5,AT -ANDI T6,V1,FFFF -OR T7,T4,T6 -SW T7,0008 (V0) -ADDIU A1,V0,0010 -LW A0,0014 (T0) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -SW A1,0048 (SP) -LW T8,0028 (SP) -LW T0,0050 (SP) -LW A1,0048 (SP) -SW V0,0004 (T8) -SW R0,0024 (T0) -OR V0,A1,R0 -LW RA,001C (SP) -ADDIU SP,SP,0050 -JR RA -NOP - -7001A900 -BEQ A2,R0,7001A920 -ADDIU T6,R0,0001 -SLLV T7,T6,A2 -MTC1 T7,F4 -NOP -CVT.D.W F6,F4 -MUL.D F12,F12,F6 -NOP -JR RA -MOV.D F0,F12 - -7001A928 -MTC1 R0,F3 -MTC1 R0,F2 -SW R0,0000 (A2) -LUI AT,3FF0 -C.EQ.D F12,F2 -NOP -BC1FL 7001A954 -C.LT.D F2,F12 -JR RA -MOV.D F0,F12 -C.LT.D F2,F12 -MTC1 AT,F15 -MTC1 R0,F14 -LUI AT,3FE0 -BC1FL 7001A974 -NEG.D F0,F12 -BEQ R0,R0,7001A974 -MOV.D F0,F12 -NEG.D F0,F12 -C.LE.D F14,F0 -NOP -BC1FL 7001A9B4 -LUI AT,3FE0 -MTC1 AT,F17 -MTC1 R0,F16 -NOP -MUL.D F0,F0,F16 -LW T6,0000 (A2) -ADDIU T7,T6,0001 -SW T7,0000 (A2) -C.LE.D F14,F0 -NOP -BC1T 7001A990 -NOP -LUI AT,3FE0 -MTC1 AT,F17 -MTC1 R0,F16 -NOP -C.LT.D F0,F16 -NOP -BC1FL 7001A9F0 -C.LT.D F2,F12 -ADD.D F0,F0,F0 -LW T8,0000 (A2) -C.LT.D F0,F16 -ADDIU T9,T8,FFFF -SW T9,0000 (A2) -BC1TL 7001A9D4 -ADD.D F0,F0,F0 -C.LT.D F2,F12 -NOP -BC1FL 7001AA08 -NEG.D F2,F0 -BEQ R0,R0,7001AA08 -MOV.D F2,F0 -NEG.D F2,F0 -MOV.D F0,F2 -JR RA -NOP - -7001AA14 -ADDIU SP,SP,FFE8 -ADDIU V0,R0,0001 -SW RA,0014 (SP) -BEQ A1,V0,7001AAC0 -OR A3,A0,R0 -ADDIU AT,R0,0003 -BEQ A1,AT,7001AA4C -ADDIU AT,R0,0004 -BEQ A1,AT,7001AA6C -ADDIU AT,R0,0009 -BEQL A1,AT,7001AA9C -LW A0,0000 (A3) -BEQ R0,R0,7001AACC -LW A0,0000 (A3) -LW V0,0040 (A3) -BEQL V0,R0,7001AA64 -SW A2,003C (A3) -BEQ R0,R0,7001AA64 -SW A2,0000 (V0) -SW A2,003C (A3) -BEQ R0,R0,7001AAE0 -SW A2,0040 (A3) -LW A0,0000 (A3) -SW V0,0038 (A3) -SW R0,0048 (A3) -BEQ A0,R0,7001AAE0 -SH V0,001A (A3) -LW T9,0008 (A0) -ADDIU A1,R0,0004 -JALR RA,T9 -NOP -BEQ R0,R0,7001AAE4 -LW RA,0014 (SP) -LW A0,0000 (A3) -SW V0,0048 (A3) -BEQL A0,R0,7001AAE4 -LW RA,0014 (SP) -LW T9,0008 (A0) -ADDIU A1,R0,0009 -JALR RA,T9 -NOP -BEQ R0,R0,7001AAE4 -LW RA,0014 (SP) -BEQ R0,R0,7001AAE0 -SW A2,0000 (A3) -LW A0,0000 (A3) -BEQL A0,R0,7001AAE4 -LW RA,0014 (SP) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,R0,R0 -JR RA -NOP - -7001AAF4 -BNEL A0,R0,7001AB28 -MTC1 A0,F6 -C.LE.S F14,F12 -ORI T6,R0,FFFF -ADDIU V0,R0,8000 -BC1F 7001AB1C -NOP -SH T6,0000 (A1) -JR RA -ADDIU V0,R0,7FFF -JR RA -SH R0,0000 (A1) -MTC1 A0,F6 -SUB.S F4,F12,F14 -LUI AT,4020 -MTC1 AT,F5 -CVT.S.W F8,F6 -LUI AT,3F80 -DIV.S F10,F4,F8 -MTC1 R0,F4 -CVT.D.S F6,F10 -MTC1 R0,F10 -MUL.D F8,F6,F4 -CVT.S.D F2,F8 -C.LT.S F2,F10 -MOV.S F0,F2 -BC1FL 7001AB74 -TRUNC.W.S F4,F0 -MTC1 AT,F6 -NOP -SUB.S F0,F2,F6 -TRUNC.W.S F4,F0 -LUI AT,8003 -MFC1 V1,F4 -LWC1 F4,9964 (AT) -SLL T8,V1,0x10 -SRA V0,T8,0x10 -MTC1 V0,F8 -NOP -CVT.S.W F10,F8 -SUB.S F6,F0,F10 -MUL.S F8,F6,F4 -TRUNC.W.S F10,F8 -MFC1 T7,F10 -NOP -SH T7,0000 (A1) -JR RA -NOP - -7001ABB4 1B7B4 display debug and error messages when necessary - accepts: S0=p->errors, S2=error code, S3=???, S4=???, S5=??? -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -BNE S2,R0,7001ABCC ;branch if error requires processing -LW S1,0000 (S0) ;S1=S0+0: FALSE if assertion fault -BEQ R0,R0,7001AE44 ;return V0=S4 -OR V0,S4,R0 -//7001ABCC: handle errors -BNE S1,R0,7001ABF0 ;branch if assertion fault didn't occur -LUI A0,8003 -LUI A1,8003 -LUI A2,8003 -ADDIU A2,A2,995C ;A2=8002995C: b"env.c" -ADDIU A1,A1,9954 ;A1=80029954: b"source" -ADDIU A0,A0,9928 ;A0=80029928: b"\n--- ASSERTION FAULT - %s - %s, line %d\n\n" -JAL 7000CF44 ;c-style expansion of string A0 to stderr -ADDIU A3,R0,0175 ;A3=0x175: line 373 -//7001ABF0: -SW S4,0010 (SP) -LW T9,0004 (S1) -OR A0,S1,R0 -OR A1,S5,R0 -OR A2,S2,R0 -JALR RA,T9 -OR A3,S6,R0 -//7001AC0C: -LH T6,0000 (S5) -LUI AT,0800 -SLL S4,S2,0x1 -ANDI T7,T6,FFFF -OR T8,T7,AT -SW T8,0000 (V0) -LH T9,0000 (S3) -LUI AT,0808 -ADDIU S1,V0,0010 -ADDIU T7,T9,0440 -SLL T8,T7,0x10 -ANDI T9,S4,FFFF -OR T6,T8,T9 -SW T6,0004 (V0) -LH T7,0000 (S3) -OR S2,S1,R0 -ADDIU T8,T7,0580 -ANDI T9,T8,FFFF -OR T6,T9,AT -SW T6,0008 (V0) -LH V1,0000 (S3) -ADDIU T7,V1,0800 -ANDI T8,T7,FFFF -ADDIU T6,V1,06C0 -SLL T7,T6,0x10 -OR T9,T8,T7 -SW T9,000C (V0) -LW T6,0038 (S0) -LUI T9,8003 -BEQL T6,R0,7001AE20 -LUI T6,0308 -LH T8,0018 (S0) -SW R0,0038 (S0) -LH T6,001A (S0) -SLL T7,T8,0x1 -ADDU T9,T9,T7 -LH T9,81E0 (T9) -LW A0,0034 (S0) -ADDIU A1,S0,0024 -MULTU T9,T6 -LH T9,001C (S0) -MTC1 T9,F4 -NOP -CVT.S.W F14,F4 -MFLO T8 -SRA T7,T8,0xF -SH T7,0028 (S0) -LH T6,0028 (S0) -MTC1 T6,F6 -JAL 7001AAF4 -CVT.S.W F12,F6 -LH T8,0018 (S0) -LUI T6,8003 -SH V0,0026 (S0) -SLL T7,T8,0x1 -SUBU T9,R0,T7 -ADDU T6,T6,T9 -LH T6,82DE (T6) -LH T8,001A (S0) -LW A0,0034 (S0) -ADDIU A1,S0,002A -MULTU T6,T8 -LH T6,001E (S0) -MTC1 T6,F8 -NOP -CVT.S.W F14,F8 -MFLO T7 -SRA T9,T7,0xF -SH T9,002E (S0) -LH T8,002E (S0) -MTC1 T8,F10 -JAL 7001AAF4 -CVT.S.W F12,F10 -LH T7,001C (S0) -SH V0,002C (S0) -OR V1,S1,R0 -LUI AT,0906 -ANDI T9,T7,FFFF -OR T6,T9,AT -SW T6,0000 (V1) -SW R0,0004 (V1) -LH T8,001E (S0) -ADDIU S1,S1,0008 -OR A0,S1,R0 -LUI AT,0904 -ANDI T7,T8,FFFF -OR T9,T7,AT -SW T9,0000 (A0) -SW R0,0004 (A0) -LH T6,0028 (S0) -ADDIU S1,S1,0008 -LUI AT,0902 -ANDI T8,T6,FFFF -OR T7,T8,AT -OR A1,S1,R0 -SW T7,0000 (A1) -LH T6,0026 (S0) -LHU T9,0024 (S0) -ADDIU S1,S1,0008 -SLL T8,T6,0x10 -OR T6,T8,T9 -SW T6,0004 (A1) -LH T7,002E (S0) -LUI AT,0900 -OR A2,S1,R0 -ANDI T8,T7,FFFF -OR T9,T8,AT -SW T9,0000 (A2) -LH T7,002C (S0) -LHU T6,002A (S0) -ADDIU S1,S1,0008 -SLL T8,T7,0x10 -OR T7,T8,T6 -SW T7,0004 (A2) -LH T9,0020 (S0) -LUI AT,0908 -OR V0,S1,R0 -ANDI T8,T9,FFFF -OR T6,T8,AT -SW T6,0000 (V0) -LH T7,0022 (S0) -ADDIU S1,S1,0008 -OR S2,S1,R0 -ANDI T9,T7,FFFF -SW T9,0004 (V0) -LUI T8,0309 -SW T8,0000 (S2) -LW A0,0014 (S0) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -ADDIU S1,S1,0008 -BEQ R0,R0,7001AE34 -SW V0,0004 (S2) -LUI T6,0308 -SW T6,0000 (S2) -LW A0,0014 (S0) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -ADDIU S1,S1,0008 -SW V0,0004 (S2) -LH T7,0000 (S5) -OR V0,S1,R0 -ADDU T9,T7,S4 -SH T9,0000 (S5) -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7001AE54 1BA54 unconditional return -JR RA -NOP - -7001AE5C -ADDIU SP,SP,FF28 -LW T6,00E8 (SP) -SW RA,0054 (SP) -SW S8,0050 (SP) -SW S7,004C (SP) -SW S6,0048 (SP) -SW S5,0044 (SP) -SW S4,0040 (SP) -SW S3,003C (SP) -SW S2,0038 (SP) -SW S1,0034 (SP) -SW S0,0030 (SP) -SDC1 F22,0028 (SP) -SDC1 F20,0020 (SP) -SW A1,00DC (SP) -SW A2,00E0 (SP) -SW A3,00E4 (SP) -SW A0,00D0 (SP) -SW A3,00C4 (SP) -SH R0,00BE (SP) -SH R0,00CE (SP) -SW T6,00D4 (SP) -LW T8,003C (A0) -OR S7,A0,R0 -LUI AT,3FC0 -BEQL T8,R0,7001B44C -LW T6,0048 (S7) -//7001AEC8: -MTC1 AT,F23 -LUI AT,40F0 -MTC1 AT,F21 -MTC1 R0,F22 -MTC1 R0,F20 -ADDIU S1,R0,0001 -LW T9,003C (S7) -LW V0,00C4 (SP) -LW T8,00E0 (SP) -LW T6,0004 (T9) -LUI A0,8003 -ADDIU A0,A0,9890 ;A0=80029890: b"\n--- ASSERTION FAULT - %s - %s, line %d\n\n" -SUBU S8,T6,V0 -SLT AT,T8,S8 -BNE AT,R0,7001B448 -SW T6,00C4 (SP) -//7001AF08: -BGEZ S8,7001AF24 -LUI A1,8003 -LUI A2,8003 -ADDIU A2,A2,98CC ;A2=800298CC: b"env.c" -ADDIU A1,A1,98BC ;A1=800298BC: b"samples >= 0" -JAL 7000CF44 ;c-style expansion of string A0 to stderr -ADDIU A3,R0,0068 ;A3=0x68: line 104 -//7001AF24: -SLTI AT,S8,00A1 -BNE AT,R0,7001AF4C -LUI A0,8003 -LUI A1,8003 -LUI A2,8003 -ADDIU A2,A2,9920 ;A2=80029920: b"env.c" -ADDIU A1,A1,9900 ;A1=80029900: b"samples <= AL_MAX_RSP_SAMPLES" -ADDIU A0,A0,98D4 ;A0=800298D4: b"\n--- ASSERTION FAULT - %s - %s, line %d\n\n" -JAL 7000CF44 ;c-style expansion of string A0 to stderr -ADDIU A3,R0,0069 ;A3=0x69: line 105 -//7001AF4C: -LW V1,003C (S7) -LHU T9,0008 (V1) -SLTIU AT,T9,0011 -BEQ AT,R0,7001B3B8 -SLL T9,T9,0x2 -LUI AT,8003 -ADDU AT,AT,T9 -LW T9,9968 (AT) ;T9=80029968+offset: p->handler -JR T9 -NOP -//7001AF74: D -LH T6,000A (V1) -OR S0,V1,R0 -BEQL T6,R0,7001AF9C -LW T9,0008 (S7) -LW T9,0008 (S7) -OR A0,S7,R0 -ADDIU A1,R0,0008 -JALR RA,T9 -OR A2,R0,R0 -LW T9,0008 (S7) -OR A0,S7,R0 -ADDIU A1,R0,0005 -JALR RA,T9 -LW A2,0018 (S0) -LW T9,0008 (S7) -OR A0,S7,R0 -ADDIU A1,R0,0009 -JALR RA,T9 -OR A2,R0,R0 -SW S1,0038 (S7) -SW R0,0030 (S7) -LW T7,0014 (S0) -SW T7,0034 (S7) -LH V1,0010 (S0) -MULTU V1,V1 -MFLO A0 -SRA T8,A0,0xF -SH T8,001A (S7) -LBU T6,0012 (S0) -LUI T8,8003 -SH T6,0018 (S7) -LBU T9,0013 (S0) -SLL T7,T9,0x1 -ADDU T8,T8,T7 -LH T8,81E0 (T8) -SH T8,0020 (S7) -LBU T6,0013 (S0) -LUI T8,8003 -SLL T9,T6,0x1 -SUBU T7,R0,T9 -ADDU T8,T8,T7 -LH T8,82DE (T8) -SH T8,0022 (S7) -LW T6,0014 (S0) -BEQL T6,R0,7001B03C -LH V0,0018 (S7) -SH S1,001C (S7) -BEQ R0,R0,7001B080 -SH S1,001E (S7) -LH V0,0018 (S7) -LUI T7,8003 -LH V1,001A (S7) -SLL T9,V0,0x1 -ADDU T7,T7,T9 -LH T7,81E0 (T7) -SUBU T9,R0,T9 -MULTU T7,V1 -LUI T7,8003 -ADDU T7,T7,T9 -MFLO T8 -SRA T6,T8,0xF -SH T6,001C (S7) -LH T7,82DE (T7) -MULTU T7,V1 -MFLO T8 -SRA T6,T8,0xF -SH T6,001E (S7) -LW T9,0000 (S7) -BEQL T9,R0,7001B404 -LH T8,00BE (SP) -LWC1 F4,000C (S0) -ADDIU A1,R0,0007 -SWC1 F4,00A4 (SP) -LW A0,0000 (S7) -LW A2,00A4 (SP) -LW T9,0008 (A0) -JALR RA,T9 -NOP -BEQ R0,R0,7001B404 -LH T8,00BE (SP) -OR S0,S7,R0 -ADDIU S5,SP,00CE -ADDIU S3,SP,00BE -OR S2,S8,R0 -LW S6,00E4 (SP) -JAL 7001ABB4 -LW S4,00D4 (SP) -SW V0,00D4 (SP) -LW T7,0030 (S7) -LW A0,0034 (S7) -ADDIU S1,R0,0001 -ADDU A1,T7,S8 -SLT AT,A1,A0 -BNE AT,R0,7001B150 -SW A1,0030 (S7) -LH V0,0018 (S7) -LUI T9,8003 -LH V1,001A (S7) -SLL T6,V0,0x1 -ADDU T9,T9,T6 -LH T9,81E0 (T9) -SUBU T6,R0,T6 -MULTU T9,V1 -LUI T9,8003 -ADDU T9,T9,T6 -MFLO T7 -SRA T8,T7,0xF -SH T8,0028 (S7) -LH T9,82DE (T9) -LH T6,0028 (S7) -SW A0,0030 (S7) -MULTU T9,V1 -SH T6,001C (S7) -MFLO T7 -SRA T8,T7,0xF -SH T8,002E (S7) -LH T9,002E (S7) -BEQ R0,R0,7001B24C -SH T9,001E (S7) -LH T7,001C (S7) -LH V1,0026 (S7) -LHU A0,0024 (S7) -MTC1 T7,F6 -SLL T8,V1,0x10 -MTC1 T8,F8 -MTC1 A0,F4 -CVT.S.W F12,F6 -OR V0,A1,R0 -LUI AT,4F80 -CVT.S.W F10,F8 -BGEZ A0,7001B190 -CVT.S.W F6,F4 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -ADD.S F4,F10,F6 -LH T7,001E (S7) -LH V1,002C (S7) -LHU A0,002A (S7) -CVT.D.S F8,F4 -MTC1 V0,F4 -DIV.D F10,F8,F20 -SLL T8,V1,0x10 -OR V0,A1,R0 -LUI AT,4F80 -CVT.S.W F8,F4 -CVT.S.D F6,F10 -MUL.S F10,F6,F8 -CVT.D.S F8,F12 -CVT.D.S F4,F10 -MUL.D F6,F4,F22 -ADD.D F10,F8,F6 -MTC1 T7,F8 -MTC1 T8,F6 -CVT.S.D F12,F10 -CVT.S.W F2,F8 -TRUNC.W.S F4,F12 -CVT.S.W F10,F6 -MFC1 T9,F4 -MTC1 A0,F4 -SH T9,001C (S7) -BGEZ A0,7001B20C -CVT.S.W F8,F4 -MTC1 AT,F6 -NOP -ADD.S F8,F8,F6 -ADD.S F4,F10,F8 -CVT.D.S F6,F4 -MTC1 V0,F4 -DIV.D F10,F6,F20 -CVT.S.W F6,F4 -CVT.S.D F8,F10 -MUL.S F10,F8,F6 -CVT.D.S F6,F2 -CVT.D.S F4,F10 -MUL.D F8,F4,F22 -ADD.D F10,F6,F8 -CVT.S.D F2,F10 -TRUNC.W.S F4,F2 -MFC1 T9,F4 -NOP -SH T9,001E (S7) -LH T7,001C (S7) -BNEL T7,R0,7001B260 -LH T8,001E (S7) -SH S1,001C (S7) -LH T8,001E (S7) -BNEL T8,R0,7001B270 -LW V1,003C (S7) -SH S1,001E (S7) -LW V1,003C (S7) -ADDIU AT,R0,000C -LH A0,0008 (V1) -BNEL A0,AT,7001B290 -ADDIU AT,R0,000B -LW T6,000C (V1) -SH T6,0018 (S7) -LH A0,0008 (V1) -ADDIU AT,R0,000B -BNEL A0,AT,7001B2C0 -ADDIU AT,R0,0010 -SW R0,0030 (S7) -LW V0,000C (V1) -MULTU V0,V0 -MFLO V0 -SRA T9,V0,0xF -SH T9,001A (S7) -LW T7,0010 (V1) -SW T7,0034 (S7) -LH A0,0008 (V1) -ADDIU AT,R0,0010 -BNE A0,AT,7001B2FC -NOP -LW T8,000C (V1) -LUI T9,8003 -SLL T6,T8,0x1 -ADDU T9,T9,T6 -LH T9,81E0 (T9) -SH T9,0020 (S7) -LW T7,000C (V1) -LUI T9,8003 -SLL T8,T7,0x1 -SUBU T6,R0,T8 -ADDU T9,T9,T6 -LH T9,82DE (T9) -SH T9,0022 (S7) -BEQ R0,R0,7001B400 -SW S1,0038 (S7) -LH T7,000A (V1) -OR S0,V1,R0 -BEQL T7,R0,7001B32C -LW T9,0008 (S7) -LW T9,0008 (S7) -OR A0,S7,R0 -ADDIU A1,R0,0008 -JALR RA,T9 -OR A2,R0,R0 -LW T9,0008 (S7) -OR A0,S7,R0 -ADDIU A1,R0,0005 -JALR RA,T9 -LW A2,000C (S0) -LW T9,0008 (S7) -OR A0,S7,R0 -ADDIU A1,R0,0009 -JALR RA,T9 -OR A2,R0,R0 -BEQ R0,R0,7001B404 -LH T8,00BE (SP) -OR S0,S7,R0 -ADDIU S5,SP,00CE -ADDIU S3,SP,00BE -OR S2,S8,R0 -LW S6,00E4 (SP) -JAL 7001ABB4 -LW S4,00D4 (SP) -SW V0,00D4 (SP) -LW T9,0008 (S7) -ADDIU S1,R0,0001 -OR A0,S7,R0 -ADDIU A1,R0,0004 -JALR RA,T9 -OR A2,R0,R0 -BEQ R0,R0,7001B404 -LH T8,00BE (SP) -LW T8,000C (V1) -LUI A0,8002 -LW A0,76E0 (A0) -SW R0,00D8 (T8) -JAL 7000F020 -LW A1,000C (V1) -BEQ R0,R0,7001B404 -LH T8,00BE (SP) -OR S0,S7,R0 -ADDIU S5,SP,00CE -ADDIU S3,SP,00BE -OR S2,S8,R0 -LW S6,00E4 (SP) -JAL 7001ABB4 -LW S4,00D4 (SP) -SW V0,00D4 (SP) -LW T6,0030 (S7) -LW T9,0008 (S7) -LW V1,003C (S7) -ADDU T7,T6,S8 -SW T7,0030 (S7) -ADDIU S1,R0,0001 -OR A0,S7,R0 -LW A2,000C (V1) -JALR RA,T9 -LH A1,0008 (V1) -LH T8,00BE (SP) -LW T9,00E0 (SP) -SLL T6,S8,0x1 -ADDU T7,T8,T6 -SUBU T8,T9,S8 -SH T7,00BE (SP) -SW T8,00E0 (SP) -LW A0,003C (S7) -LW T6,0000 (A0) -BNE T6,R0,7001B430 -SW T6,003C (S7) -SW R0,0040 (S7) -JAL 7000F0B8 -NOP -LW T9,00D0 (SP) -LW T8,003C (T9) -BNEL T8,R0,7001AEE4 -LW T9,003C (S7) -LW T6,0048 (S7) -ADDIU S1,R0,0001 -OR S0,S7,R0 -BNE S1,T6,7001B484 -ADDIU S5,SP,00CE -ADDIU S3,SP,00BE -LW S2,00E0 (SP) -LW S6,00E4 (SP) -JAL 7001ABB4 -LW S4,00D4 (SP) -SW V0,00D4 (SP) -LW T7,0030 (S7) -LW T9,00E0 (SP) -ADDU T8,T7,T9 -SW T8,0030 (S7) -LW A0,0034 (S7) -LW T6,0030 (S7) -SLT AT,A0,T6 -BEQL AT,R0,7001B4A0 -LW RA,0054 (SP) -SW A0,0030 (S7) -LW RA,0054 (SP) -LW V0,00D4 (SP) -LDC1 F20,0020 (SP) -LDC1 F22,0028 (SP) -LW S0,0030 (SP) -LW S1,0034 (SP) -LW S2,0038 (SP) -LW S3,003C (SP) -LW S4,0040 (SP) -LW S5,0044 (SP) -LW S6,0048 (SP) -LW S7,004C (SP) -LW S8,0050 (SP) -JR RA -ADDIU SP,SP,00D8 - -7001B4E0 -ADDIU AT,R0,0002 -BNE A1,AT,7001B508 -LW V0,001C (A0) -LW T6,0014 (A0) -SLL T7,T6,0x2 -ADDU T8,V0,T7 -SW A2,0000 (T8) -LW T9,0014 (A0) -ADDIU T0,T9,0001 -SW T0,0014 (A0) -JR RA -OR V0,R0,R0 - -7001B510 -ADDIU SP,SP,FFC0 -LW T0,0050 (SP) -SW RA,003C (SP) -SW S6,0038 (SP) -SW S5,0034 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -LW V1,001C (A0) -LUI T6,0200 -SLL V0,A2,0x1 -LUI T7,0200 -ORI T6,T6,06C0 -ORI T7,T7,0800 -SW T6,0000 (T0) -SW V0,0004 (T0) -SW T7,0008 (T0) -SW V0,000C (T0) -LW T8,0014 (A0) -OR S4,A2,R0 -OR S5,A1,R0 -OR S6,A3,R0 -OR S3,A0,R0 -OR S0,R0,R0 -BLEZ T8,7001B5BC -ADDIU S2,T0,0010 -OR S1,V1,R0 -LW A0,0000 (S1) -SW S2,0010 (SP) -OR A1,S5,R0 -LW T9,0004 (A0) -OR A2,S4,R0 -OR A3,S6,R0 -JALR RA,T9 -NOP -LW T1,0014 (S3) -ADDIU S0,S0,0001 -ADDIU S1,S1,0004 -SLT AT,S0,T1 -BNE AT,R0,7001B584 -OR S2,V0,R0 -LW RA,003C (SP) -OR V0,S2,R0 -LW S2,0028 (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S3,002C (SP) -LW S4,0030 (SP) -LW S5,0034 (SP) -LW S6,0038 (SP) -JR RA -ADDIU SP,SP,0040 - -7001B5F0 -ADDIU AT,R0,0001 -BEQ A1,AT,7001B610 -OR V0,R0,R0 -ADDIU AT,R0,0006 -BEQL A1,AT,7001B61C -SW A2,0014 (A0) -JR RA -OR V0,R0,R0 -JR RA -SW A2,0000 (A0) -SW A2,0014 (A0) -JR RA -OR V0,R0,R0 - -7001B624 -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW A0,0020 (SP) -LW A0,0000 (A0) -LW T7,0030 (SP) -SW A2,0028 (SP) -SW T7,0010 (SP) -LW T9,0004 (A0) -JALR RA,T9 -NOP -LW A2,0028 (SP) -LUI V1,0800 -LUI T2,0440 -SLL T8,A2,0x1 -SLL T3,A2,0x2 -ANDI T0,T8,FFFF -ORI T2,T2,0580 -LUI T1,0D00 -ANDI T4,T3,FFFF -LUI T5,0600 -SW T0,0004 (V0) -SW V1,0000 (V0) -SW T1,0008 (V0) -SW T2,000C (V0) -SW T4,0014 (V0) -SW V1,0010 (V0) -SW T5,0018 (V0) -LW T6,0020 (SP) -ADDIU V0,V0,0020 -LW T7,0014 (T6) -SW T7,FFFC (V0) -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7001B6B0 - accepts: A0=p->thread, A1=, A2= -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -SW S1,0018 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0014 (SP) -LW T6,0028 (SP) ;T6=A0 f/caller: p->thread -OR S0,V0,R0 -LW T7,0008 (T6) -LW T8,0010 (T6) -SLT AT,T7,T8 -BNE AT,R0,7001B748 -NOP -//7001B6EC: -LW T9,0030 (SP) -ADDIU AT,R0,0001 -BNE T9,AT,7001B720 ;if A2 f/caller isn't 1, fail! -NOP -//7001B6FC: -LUI T1,8002 -LW T1,7730 (T1) -ADDIU T0,R0,0008 -SH T0,0010 (T1) ;cur.thread.index = 8 -LW A0,0028 (SP) -JAL 700107AC ;update current thread's data with current registers, then insert and execute -ADDIU A0,A0,0004 ;A0+=4: new pointer into thread queue -BEQ R0,R0,7001B730 -NOP -//7001B720: restore interrupts and return -1 (error) -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -BEQ R0,R0,7001B7EC -ADDIU V0,R0,FFFF -//7001B730: -LW T2,0028 (SP) -LW T3,0008 (T2) -LW T4,0010 (T2) -SLT AT,T3,T4 -BEQ AT,R0,7001B6EC -NOP -//7001B748: -LW T5,0028 (SP) -LW T6,000C (T5) -LW T7,0010 (T5) -ADDU T8,T6,T7 -ADDIU T9,T8,FFFF -DIV T9,T7 -MFHI T0 -SW T0,000C (T5) -LW T2,0028 (SP) -LW T1,002C (SP) -BNE T7,R0,7001B77C -NOP -BREAK 00001C00 ;Break: division by zero -//7001B77C: -ADDIU AT,R0,FFFF -BNE T7,AT,7001B794 -LUI AT,8000 -BNE T9,AT,7001B794 -NOP -BREAK 00001800 -//7001B794: -LW T4,000C (T2) -LW T3,0014 (T2) -SLL T6,T4,0x2 -ADDU T8,T3,T6 -SW T1,0000 (T8) -LW T9,0028 (SP) -LW T7,0008 (T9) -ADDIU T0,T7,0001 -SW T0,0008 (T9) -LW T5,0028 (SP) ;T5=A0 f/caller: p->thread -LW T2,0000 (T5) -LW T4,0000 (T2) -BEQ T4,R0,7001B7E0 -NOP -//7001B7CC: reload thread -JAL 700108F4 ;V0= popped thread A0 -OR A0,T5,R0 -OR S1,V0,R0 -JAL 7000D580 ;insert thread and execute if no thread currently running -OR A0,S1,R0 -//7001B7E0: restore interrupts and return 0 -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 ;restore interrupts -OR V0,R0,R0 -//7001B7EC: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7001B800 -LUI T6,8002 -LW T6,7790 (T6) -BNE T6,R0,7001B818 ;if 80027790 NULL, return 0 -NOP -JR RA -OR V0,R0,R0 -//7001B818: -LUI V0,8002 -LW V0,7798 (V0) ;V0=80027798: -JR RA -NOP - -7001B830 -SWC1 F12,0000 (SP) -LW V0,0000 (SP) -LWC1 F6,0000 (SP) -LWC1 F10,0000 (SP) -SRA T6,V0,0x16 -ANDI T7,T6,01FF -SLTI AT,T7,0136 -BEQL AT,R0,7001B974 -C.EQ.S F10,F10 -MTC1 R0,F4 -LUI AT,3FE0 -MTC1 AT,F19 -C.LT.S F4,F6 -LWC1 F0,0000 (SP) -LUI AT,8003 -BC1FL 7001B880 -NEG.S F0,F0 -BEQ R0,R0,7001B880 -MOV.S F0,F6 -NEG.S F0,F0 -LDC1 F8,99D8 (AT) -CVT.D.S F12,F0 -MTC1 R0,F18 -MUL.D F10,F12,F8 -MTC1 R0,F5 -MTC1 R0,F4 -ADD.D F14,F10,F18 -C.LE.D F4,F14 -NOP -BC1FL 7001B8C4 -SUB.D F10,F14,F18 -ADD.D F6,F14,F18 -TRUNC.W.D F8,F6 -MFC1 V0,F8 -BEQ R0,R0,7001B8D4 -MTC1 V0,F6 -SUB.D F10,F14,F18 -TRUNC.W.D F4,F10 -MFC1 V0,F4 -NOP -MTC1 V0,F6 -LUI AT,8003 -LDC1 F10,99E0 (AT) -CVT.D.W F8,F6 -LUI AT,8003 -LDC1 F6,99E8 (AT) -LUI V1,8003 -ADDIU V1,V1,99B0 -SUB.D F0,F8,F18 -ANDI T0,V0,0001 -MUL.D F4,F0,F10 -LDC1 F10,0020 (V1) -MUL.D F8,F0,F6 -LDC1 F6,0018 (V1) -SUB.D F2,F12,F4 -SUB.D F2,F2,F8 -MUL.D F14,F2,F2 -NOP -MUL.D F4,F10,F14 -ADD.D F8,F4,F6 -LDC1 F4,0010 (V1) -MUL.D F10,F8,F14 -ADD.D F6,F10,F4 -LDC1 F10,0008 (V1) -MUL.D F8,F6,F14 -BNE T0,R0,7001B954 -ADD.D F16,F10,F8 -MUL.D F4,F2,F14 -NOP -MUL.D F6,F4,F16 -ADD.D F10,F6,F2 -JR RA -CVT.S.D F0,F10 -MUL.D F8,F2,F14 -NOP -MUL.D F4,F8,F16 -ADD.D F6,F4,F2 -CVT.S.D F0,F6 -JR RA -NEG.S F0,F0 -C.EQ.S F10,F10 -LUI AT,8003 -BC1T 7001B98C -NOP -LUI AT,8003 -JR RA -LWC1 F0,9D40 (AT) -LWC1 F0,99F0 (AT) -JR RA -NOP - -7001B9A0 -SWC1 F12,0000 (SP) -LW V0,0000 (SP) -LWC1 F4,0000 (SP) -SRA V1,V0,0x16 -ANDI T6,V1,01FF -SLTI AT,T6,00FF -BEQ AT,R0,7001BA20 -OR V1,T6,R0 -SLTI AT,T6,00E6 -BNE AT,R0,7001BA18 -CVT.D.S F2,F4 -MUL.D F12,F2,F2 -LUI V1,8003 -ADDIU V1,V1,9A00 -LDC1 F6,0020 (V1) -LDC1 F10,0018 (V1) -LDC1 F4,0010 (V1) -MUL.D F8,F6,F12 -ADD.D F16,F8,F10 -LDC1 F10,0008 (V1) -MUL.D F18,F16,F12 -ADD.D F6,F18,F4 -MUL.D F8,F6,F12 -ADD.D F14,F10,F8 -MUL.D F16,F2,F12 -NOP -MUL.D F18,F16,F14 -ADD.D F4,F18,F2 -JR RA -CVT.S.D F0,F4 -JR RA -LWC1 F0,0000 (SP) -SLTI AT,V1,0136 -BEQ AT,R0,7001BB38 -LWC1 F4,0000 (SP) -LWC1 F6,0000 (SP) -LUI AT,8003 -LDC1 F10,9A28 (AT) -CVT.D.S F2,F6 -MTC1 R0,F9 -MUL.D F0,F2,F10 -MTC1 R0,F8 -LUI AT,3FE0 -C.LE.D F8,F0 -NOP -BC1FL 7001BA84 -MTC1 AT,F7 -LUI AT,3FE0 -MTC1 AT,F17 -MTC1 R0,F16 -NOP -ADD.D F18,F0,F16 -TRUNC.W.D F4,F18 -MFC1 V0,F4 -BEQ R0,R0,7001BAA0 -MTC1 V0,F16 -MTC1 AT,F7 -MTC1 R0,F6 -NOP -SUB.D F10,F0,F6 -TRUNC.W.D F8,F10 -MFC1 V0,F8 -NOP -MTC1 V0,F16 -LUI AT,8003 -LDC1 F18,9A30 (AT) -CVT.D.W F0,F16 -LUI AT,8003 -LDC1 F6,9A38 (AT) -LUI V1,8003 -ADDIU V1,V1,9A00 -MUL.D F4,F0,F18 -LDC1 F8,0020 (V1) -LDC1 F18,0018 (V1) -ANDI T9,V0,0001 -MUL.D F10,F0,F6 -SUB.D F2,F2,F4 -SUB.D F2,F2,F10 -LDC1 F10,0010 (V1) -MUL.D F12,F2,F2 -NOP -MUL.D F16,F8,F12 -ADD.D F4,F16,F18 -LDC1 F18,0008 (V1) -MUL.D F6,F4,F12 -ADD.D F8,F6,F10 -MUL.D F16,F8,F12 -BNE T9,R0,7001BB1C -ADD.D F14,F18,F16 -MUL.D F4,F2,F12 -NOP -MUL.D F6,F4,F14 -ADD.D F10,F6,F2 -JR RA -CVT.S.D F0,F10 -MUL.D F8,F2,F12 -NOP -MUL.D F18,F8,F14 -ADD.D F16,F18,F2 -CVT.S.D F0,F16 -JR RA -NEG.S F0,F0 -C.EQ.S F4,F4 -LUI AT,8003 -BC1T 7001BB54 -NOP -LUI AT,8003 -JR RA -LWC1 F0,9D40 (AT) -LWC1 F0,9A40 (AT) -JR RA -NOP - -7001BB60 1C760 ???; best guess is it reinitializes or removes a dead thread - accepts: A0=p->thread -ADDIU SP,SP,FFC8 -SW RA,0024 (SP) -SW A0,0038 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T6,0038 (SP) ;T6=A0: p->thread -OR S0,V0,R0 ;V0=S0: interrupt flag -BNE T6,R0,7001BB9C ;branch if not NULL -NOP -//7001BB8C: if NULL, use current value -LUI T7,8002 -LW T7,7730 (T7) ;T7=80027730: p->cur.thread -BEQ R0,R0,7001BBBC -SW T7,0038 (SP) ;SP+38= value -//7001BB9C: load value from address -LW T8,0038 (SP) -ADDIU AT,R0,0001 -LHU T9,0010 (T8) ;T9=A0+10: index -BEQ T9,AT,7001BBBC ;skip if 1 -NOP -//7001BBB0: if A1 in A0, remove it -LW A0,0008 (T8) ;A0=A0+8: p->thread list -JAL 70010A90 ;remove thread pointer A1 from thread A0 -OR A1,T8,R0 ;A1=A0 -//7001BBBC: -LUI T0,8002 -LW T0,772C (T0) ;T0=8002772C: p->table -LW T1,0038 (SP) ;T1= A0 or previous value -BNE T0,T1,7001BBE0 ;branch if different -NOP -//7001BBD0: -LW T2,000C (T0) -LUI AT,8002 -BEQ R0,R0,7001BC1C -SW T2,772C (AT) -//7001BBE0: -LUI S1,8002 -LW S1,772C (S1) -LW S2,000C (S1) -BEQ S2,R0,7001BC1C -NOP -//7001BBF4: -LW T3,0038 (SP) -BNE S2,T3,7001BC0C -NOP -LW T4,000C (T3) -BEQ R0,R0,7001BC1C -SW T4,000C (S1) -//7001BC0C: -OR S1,S2,R0 -LW S2,000C (S1) -BNE S2,R0,7001BBF4 -NOP -//7001BC1C: -LUI T6,8002 -LW T6,7730 (T6) -LW T5,0038 (SP) -BNE T5,T6,7001BC38 -NOP -JAL 70010904 ;execute thread -NOP -//7001BC38: enable interrupts and return -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 ;A0=S0: interrupt flag -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0038 - -7001BC60 -LW T6,0060 (A0) -SLL V0,A2,0x4 -ADDU T7,T6,V0 -SW A1,0000 (T7) -LW T9,0060 (A0) -LBU T8,0001 (A1) -ADDU T0,T9,V0 -SB T8,0007 (T0) -LW T2,0060 (A0) -LBU T1,0000 (A1) -ADDU T3,T2,V0 -SB T1,0009 (T3) -LW T5,0060 (A0) -LBU T4,0002 (A1) -ADDU T6,T5,V0 -SB T4,0008 (T6) -LW T9,0060 (A0) -LH T7,000C (A1) -ADDU T8,T9,V0 -JR RA -SH T7,0004 (T8) - -7001BCB4 -LW T6,0060 (A0) -SLL V0,A1,0x4 -ADDIU T0,R0,0040 -ADDU T7,T6,V0 -SB R0,0006 (T7) -LW T8,0060 (A0) -ADDIU T3,R0,007F -ADDIU T6,R0,0005 -ADDU T9,T8,V0 -SB R0,000A (T9) -LW T1,0060 (A0) -LUI AT,3F80 -MTC1 AT,F4 -ADDU T2,T1,V0 -SB T0,0007 (T2) -LW T4,0060 (A0) -ADDIU T0,R0,00C8 -ADDU T5,T4,V0 -SB T3,0009 (T5) -LW T7,0060 (A0) -ADDU T8,T7,V0 -SB T6,0008 (T8) -LW T9,0060 (A0) -ADDU T1,T9,V0 -SB R0,000B (T1) -LW T2,0060 (A0) -ADDU T4,T2,V0 -SH T0,0004 (T4) -LW T3,0060 (A0) -ADDU T5,T3,V0 -JR RA -SWC1 F4,000C (T5) - -7001BD34 -ADDIU SP,SP,FFD8 -SW S2,0020 (SP) -OR S2,A0,R0 -SW RA,0024 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A1,002C (SP) -OR V0,A1,R0 -LW S1,000C (V0) -ADDIU V0,V0,0004 -BEQL S1,R0,7001BD58 -LW S1,000C (V0) -LBU T6,0034 (S2) -OR S0,R0,R0 -BLEZ T6,7001BDA0 -OR A0,S2,R0 -JAL 7001BCB4 -OR A1,S0,R0 -OR A0,S2,R0 -OR A1,S1,R0 -JAL 7001BC60 -OR A2,S0,R0 -LBU T7,0034 (S2) -ADDIU S0,S0,0001 -SLT AT,S0,T7 -BNEL AT,R0,7001BD74 -OR A0,S2,R0 -LW T8,002C (SP) -OR A0,S2,R0 -LW T9,0008 (T8) -BEQL T9,R0,7001BDD4 -LW RA,0024 (SP) -JAL 7001BCB4 -OR A1,S0,R0 -LW T0,002C (SP) -OR A0,S2,R0 -ADDIU A2,R0,0009 -JAL 7001BC60 -LW A1,0008 (T0) -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7001BDE8 -JR RA -NOP - -7001BDF0 -LW T6,0024 (A0) -ADDIU V0,R0,03E8 -SUBU V1,T6,A1 -BLTZ V1,7001BE0C -NOP -JR RA -OR V0,V1,R0 -JR RA -NOP - -7001BE14 -LBU T6,0036 (A0) -LBU T7,0033 (A0) -LBU T9,0030 (A0) -LBU T2,0031 (A0) -MULTU T6,T7 -LW T1,0060 (A1) -LW T6,0020 (A0) -SLL T3,T2,0x4 -ADDU T4,T1,T3 -LBU T5,0009 (T4) -LBU T7,000D (T6) -MFLO T8 -NOP -NOP -MULTU T8,T9 -LH T9,0032 (A1) -MFLO V1 -SRA T0,V1,0x6 -OR V1,T0,R0 -MULTU T5,T7 -MFLO T8 -NOP -NOP -MULTU T8,T9 -MFLO A2 -SRA T0,A2,0xE -NOP -MULTU V1,T0 -MFLO V1 -SRL T2,V1,0xF -SLL V0,T2,0x10 -SRA T1,V0,0x10 -JR RA -OR V0,T1,R0 - -7001BE9C -ADDIU SP,SP,FFA0 -SW RA,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A2,0068 (SP) -LW S6,0010 (A1) -OR S4,A0,R0 -OR S5,A1,R0 -LBU T6,0034 (S6) -BNEL T6,R0,7001BF40 -ADDIU T2,R0,0003 -LW S0,0050 (A0) -ADDIU S3,R0,0006 -BEQL S0,R0,7001BF40 -ADDIU T2,R0,0003 -LH T7,000C (S0) -LW S1,0000 (S0) -BNE S3,T7,7001BF34 -NOP -LW T8,0010 (S0) -BNE S5,T8,7001BF34 -NOP -BEQ S1,R0,7001BF20 -ADDIU S2,S4,0048 -LW T9,0008 (S1) -LW T0,0008 (S0) -ADDU T1,T9,T0 -SW T1,0008 (S1) -JAL 7000EA90 -OR A0,S0,R0 -OR A0,S0,R0 -JAL 7000EAC0 -OR A1,S2,R0 -BNE S1,R0,7001BEEC -OR S0,S1,R0 -ADDIU T2,R0,0003 -SB R0,0033 (S6) -SB T2,0034 (S6) -SB R0,0030 (S6) -LW T4,0068 (SP) -LW T3,001C (S4) -OR A1,S5,R0 -OR A2,R0,R0 -ADDU T5,T3,T4 -SW T5,0024 (S6) -LW A0,0014 (S4) -JAL 70020B40 -ADDIU S2,S4,0048 -LW A0,0014 (S4) -OR A1,S5,R0 -OR A2,R0,R0 -JAL 700133A0 -LW A3,0068 (SP) -ADDIU T6,R0,0005 -SH T6,0050 (SP) -SW S5,0054 (SP) -OR A0,S2,R0 -ADDIU A1,SP,0050 -JAL 70012EFC -LW A2,0068 (SP) -LW RA,0034 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -JR RA -ADDIU SP,SP,0060 - -7001BFC8 -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -LW A3,0050 (A0) -OR T2,A0,R0 -OR T0,R0,R0 -BEQ A3,R0,7001C05C -ADDIU T1,R0,0001 -ADDIU A0,R0,0005 -LH T6,000C (A3) -LW V1,0008 (A3) -LW V0,0000 (A3) -BNE A0,T6,7001C054 -ADDU T0,T0,V1 -LW T7,0010 (A3) -BNE A1,T7,7001C054 -SLT AT,A2,T0 -BEQ AT,R0,7001C04C -OR A0,A3,R0 -BEQL V0,R0,7001C028 -SW A3,002C (SP) -LW T8,0008 (V0) -ADDU T9,T8,V1 -SW T9,0008 (V0) -SW A3,002C (SP) -SB T1,001F (SP) -JAL 7000EA90 -SW T2,0030 (SP) -LW T2,0030 (SP) -LW A0,002C (SP) -JAL 7000EAC0 -ADDIU A1,T2,0048 -BEQ R0,R0,7001C05C -LBU T1,001F (SP) -BEQ R0,R0,7001C05C -OR T1,R0,R0 -BNE V0,R0,7001BFE8 -OR A3,V0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0030 -OR V0,T1,R0 -JR RA -NOP - -7001C070 -LW V1,0064 (A0) -OR V0,R0,R0 -ADDIU A2,A1,FFFC -BEQ V1,R0,7001C0D8 -NOP -BNEL V1,A2,7001C0CC -OR V0,V1,R0 -BEQL V0,R0,7001C0A4 -LW T7,0000 (V1) -LW T6,0000 (V1) -BEQ R0,R0,7001C0A8 -SW T6,0000 (V0) -LW T7,0000 (V1) -SW T7,0064 (A0) -LW T8,0068 (A0) -BNEL V1,T8,7001C0BC -LW T9,006C (A0) -SW V0,0068 (A0) -LW T9,006C (A0) -SW T9,0000 (V1) -JR RA -SW V1,006C (A0) -OR V0,V1,R0 -LW V1,0000 (V1) -BNE V1,R0,7001C084 -NOP -JR RA -NOP - -7001C0E0 -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -LW T6,002C (A0) -ADDIU AT,R0,0001 -OR A3,A0,R0 -BNE T6,AT,7001C1AC -LW A2,0018 (A0) -BEQ A2,R0,7001C1AC -OR A0,A2,R0 -ADDIU A1,SP,0024 -SW A2,0020 (SP) -JAL 70020990 -SW A3,0038 (SP) -LW A2,0020 (SP) -BEQ V0,R0,7001C1AC -LW A3,0038 (SP) -LW T7,0084 (A3) -OR A0,A2,R0 -BEQL T7,R0,7001C18C -SH R0,0028 (SP) -SW A2,0020 (SP) -JAL 70020558 -SW A3,0038 (SP) -LW A3,0038 (SP) -LW T8,0024 (SP) -LW A2,0020 (SP) -LW T0,0080 (A3) -ADDU T9,V0,T8 -OR A0,A2,R0 -LW T1,0008 (T0) -SLT AT,T9,T1 -BNEL AT,R0,7001C18C -SH R0,0028 (SP) -LW A1,007C (A3) -JAL 7002053C -SW A3,0038 (SP) -LW A3,0038 (SP) -ADDIU AT,R0,FFFF -LW V0,0084 (A3) -BEQ V0,AT,7001C188 -ADDIU T2,V0,FFFF -SW T2,0084 (A3) -SH R0,0028 (SP) -LW T3,0024 (A3) -LW T4,0024 (SP) -ADDIU A0,A3,0048 -ADDIU A1,SP,0028 -MULTU T3,T4 -MFLO A2 -JAL 70012EFC -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7001C1BC -LBU T6,0008 (A0) -ADDIU AT,R0,00FF -BNE T6,AT,7001C22C -NOP -LBU T7,0009 (A0) -ADDIU AT,R0,0051 -ADDIU V0,A0,0004 -BNE T7,AT,7001C22C -NOP -LBU T6,0008 (V0) -LBU T8,0007 (V0) -LW A2,0018 (A1) -SLL T7,T6,0x8 -LBU T6,0009 (V0) -SLL T9,T8,0x10 -OR T8,T9,T7 -OR V1,T8,T6 -MTC1 V1,F4 -ADDIU T8,R0,01E8 -BEQ A2,R0,7001C228 -CVT.S.W F0,F4 -LWC1 F6,0014 (A2) -MUL.S F8,F0,F6 -TRUNC.W.S F10,F8 -MFC1 T7,F10 -JR RA -SW T7,0024 (A1) -SW T8,0024 (A1) -JR RA -NOP - -7001C234 -LBU T7,0031 (A0) -LW T6,0060 (A1) -LW T1,0020 (A0) -SLL T8,T7,0x4 -ADDU T9,T6,T8 -LBU T0,0007 (T9) -LBU T2,000C (T1) -ADDU V1,T0,T2 -ADDIU V1,V1,FFC0 -BGTZL V1,7001C268 -SLTI AT,V1,007F -OR V1,R0,R0 -SLTI AT,V1,007F -BNE AT,R0,7001C274 -NOP -ADDIU V1,R0,007F -JR RA -ANDI V0,V1,00FF - -7001C27C -SW A1,0004 (SP) -SW A2,0008 (SP) -LW V1,0064 (A0) -ANDI T7,A2,00FF -OR A2,T7,R0 -BEQ V1,R0,7001C2E4 -ANDI T6,A1,00FF -OR V0,T6,R0 -ADDIU A3,R0,0004 -ADDIU A1,R0,0003 -LBU T8,0032 (V1) -BNEL V0,T8,7001C2DC -LW V1,0000 (V1) -LBU T9,0031 (V1) -BNEL A2,T9,7001C2DC -LW V1,0000 (V1) -LBU A0,0035 (V1) -BEQL A1,A0,7001C2DC -LW V1,0000 (V1) -BEQL A3,A0,7001C2DC -LW V1,0000 (V1) -JR RA -OR V0,V1,R0 -LW V1,0000 (V1) -BNEL V1,R0,7001C2A8 -LBU T8,0032 (V1) -OR V0,R0,R0 -JR RA -NOP - -7001C2F0 -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LW V1,006C (A0) -ANDI T6,A1,00FF -ANDI T7,A2,00FF -ANDI T8,A3,00FF -OR A3,T8,R0 -OR A2,T7,R0 -BEQ V1,R0,7001C358 -OR A1,T6,R0 -LW T9,0000 (V1) -SW T9,006C (A0) -SW R0,0000 (V1) -LW T0,0064 (A0) -BNEL T0,R0,7001C340 -LW T1,0068 (A0) -BEQ R0,R0,7001C344 -SW V1,0064 (A0) -LW T1,0068 (A0) -SW V1,0000 (T1) -SW V1,0068 (A0) -SB A3,0031 (V1) -SB A1,0032 (V1) -SB A2,0033 (V1) -SW V1,0014 (V1) -JR RA -OR V0,V1,R0 - -7001C360 -SW A1,0004 (SP) -SW A2,0008 (SP) -SW A3,000C (SP) -LW T8,0060 (A0) -ANDI T7,A3,00FF -SLL T9,T7,0x4 -ADDU T4,T8,T9 -LW V0,0000 (T4) -ANDI T6,A1,00FF -ANDI T3,A2,00FF -LH T0,000E (V0) -ADDIU V1,R0,0001 -OR T1,T6,R0 -BLEZ T0,7001C450 -ADDU A1,V1,T0 -BGEZ A1,7001C3AC -SRA T5,A1,0x1 -ADDIU AT,A1,0001 -SRA T5,AT,0x1 -SLL T6,T5,0x2 -ADDU T7,V0,T6 -LW A3,000C (T7) -OR A0,T5,R0 -LW A2,0004 (A3) -LBU T2,0002 (A2) -SLT AT,T1,T2 -BNEL AT,R0,7001C410 -SLT AT,T1,T2 -LBU T8,0003 (A2) -SLT AT,T8,T1 -BNEL AT,R0,7001C410 -SLT AT,T1,T2 -LBU T9,0000 (A2) -OR A1,T3,R0 -SLT AT,T3,T9 -BNEL AT,R0,7001C410 -SLT AT,T1,T2 -LBU T4,0001 (A2) -SLT AT,T4,A1 -BNEL AT,R0,7001C410 -SLT AT,T1,T2 -JR RA -OR V0,A3,R0 -SLT AT,T1,T2 -BNE AT,R0,7001C438 -NOP -LBU T5,0000 (A2) -SLT AT,T3,T5 -BEQL AT,R0,7001C444 -ADDIU V1,A0,0001 -LBU T6,0003 (A2) -SLT AT,T6,T1 -BNEL AT,R0,7001C444 -ADDIU V1,A0,0001 -BEQ R0,R0,7001C444 -ADDIU T0,A0,FFFF -ADDIU V1,A0,0001 -SLT AT,T0,V1 -BEQL AT,R0,7001C39C -ADDU A1,V1,T0 -OR V0,R0,R0 -JR RA -NOP - -7001C45C -ADDIU SP,SP,FF20 -SW RA,0024 (SP) -LBU S6,0008 (A0) -LBU S3,0009 (A0) -LBU S4,000A (A0) -ANDI V1,S6,00F0 -ADDIU T7,V1,FF80 -SLTIU AT,T7,0061 -ANDI T6,S6,000F -BEQ AT,R0,7001CC64 -OR S6,T6,R0 -SLL T7,T7,0x2 -LUI AT,8003 -ADDU AT,AT,T7 -LW T7,9A50 (AT) ;T7=80029A50+offset: p->handler -JR T7 -NOP -BEQL S4,R0,7001C7F8 -OR A0,S1,R0 -LW T8,002C (S1) -ADDIU AT,R0,0001 -OR A0,S1,R0 -BNE T8,AT,7001CC64 -ANDI A1,S3,00FF -ANDI A2,S4,00FF -JAL 7001C360 -ANDI A3,S6,00FF -BEQ V0,R0,7001CC64 -OR S7,V0,R0 -LW T9,0060 (S1) -SLL S8,S6,0x4 -OR A0,S1,R0 -ADDU T6,T9,S8 -LBU T7,0008 (T6) -SH R0,009E (SP) -SB R0,00A0 (SP) -ANDI A1,S3,00FF -ANDI A2,S4,00FF -ANDI A3,S6,00FF -JAL 7001C2F0 -SH T7,009C (SP) -BEQ V0,R0,7001CC64 -OR S0,V0,R0 -LW A0,0014 (S1) -ADDIU A1,V0,0004 -SW A1,0034 (SP) -JAL 70013258 -ADDIU A2,SP,009C -SW S7,0020 (S0) -SB R0,0034 (S0) -LW T8,0060 (S1) -ADDIU S5,R0,0002 -ADDU T9,T8,S8 -LBU T6,000B (T9) -SLTI AT,T6,0040 -BNEL AT,R0,7001C54C -SB R0,0035 (S0) -BEQ R0,R0,7001C54C -SB S5,0035 (S0) -SB R0,0035 (S0) -LW V0,0004 (S7) -LBU T7,0004 (V0) -LB T6,0005 (V0) -SUBU T8,S3,T7 -SLL T9,T8,0x2 -SUBU T9,T9,T8 -SLL T9,T9,0x3 -ADDU T9,T9,T8 -SLL T9,T9,0x2 -ADDU A0,T9,T6 -SLL T7,A0,0x10 -JAL 700137C0 -SRA A0,T7,0x10 -SWC1 F0,0028 (S0) -LW T9,0000 (S7) -LUI AT,42FE -MTC1 AT,F4 -LBU T6,000C (T9) -SB T6,0030 (S0) -LW T8,0000 (S7) -LW T7,001C (S1) -LW T9,0000 (T8) -SB R0,0037 (S0) -ADDU T6,T7,T9 -SW T6,0024 (S0) -LW T8,0060 (S1) -ADDU T7,T8,S8 -LW S2,0000 (T7) -SWC1 F4,008C (SP) -LBU A2,0004 (S2) -BEQL A2,R0,7001C630 -CFC1 T8,F31 -LW V0,0070 (S1) -BEQL V0,R0,7001C630 -CFC1 T8,F31 -LBU T9,0006 (S2) -LBU A3,0005 (S2) -ADDIU A0,SP,0084 -SW T9,0010 (SP) -LBU T6,0007 (S2) -ADDIU A1,SP,008C -JALR RA,V0 -SW T6,0014 (SP) -BEQ V0,R0,7001C62C -ADDIU T8,R0,0016 -LW T7,0084 (SP) -SH T8,00B4 (SP) -SW S0,00B8 (SP) -ADDIU A0,S1,0048 -ADDIU A1,SP,00B4 -OR A2,V0,R0 -JAL 70012EFC -SW T7,00BC (SP) -LBU T9,0037 (S0) -ORI T6,T9,0001 -SB T6,0037 (S0) -CFC1 T8,F31 -ADDIU T7,R0,0001 -CTC1 T7,F31 -LWC1 F6,008C (SP) -LUI AT,4F00 -CVT.W.S F8,F6 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BEQL T7,R0,7001C6A0 -MFC1 T7,F8 -MTC1 AT,F8 -ADDIU T7,R0,0001 -SUB.S F8,F6,F8 -CTC1 T7,F31 -NOP -CVT.W.S F8,F8 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BNE T7,R0,7001C694 -NOP -MFC1 T7,F8 -LUI AT,8000 -BEQ R0,R0,7001C6AC -OR T7,T7,AT -BEQ R0,R0,7001C6AC -ADDIU T7,R0,FFFF -MFC1 T7,F8 -NOP -BLTZ T7,7001C694 -NOP -LUI AT,3F80 -MTC1 AT,F10 -SB T7,0036 (S0) -CTC1 T8,F31 -SWC1 F10,008C (SP) -LBU A2,0008 (S2) -ADDIU S5,S1,0048 -BEQL A2,R0,7001C738 -LWC1 F4,008C (SP) -LW V0,0070 (S1) -BEQL V0,R0,7001C738 -LWC1 F4,008C (SP) -LBU T9,000A (S2) -LBU A3,0009 (S2) -ADDIU A0,SP,0084 -SW T9,0010 (SP) -LBU T6,000B (S2) -ADDIU A1,SP,008C -JALR RA,V0 -SW T6,0014 (SP) -BEQ V0,R0,7001C734 -ADDIU T8,R0,0017 -LW T7,0084 (SP) -SH T8,00B4 (SP) -SW S0,00B8 (SP) -SB S6,00C0 (SP) -OR A0,S5,R0 -ADDIU A1,SP,00B4 -OR A2,V0,R0 -JAL 70012EFC -SW T7,00BC (SP) -LBU T9,0037 (S0) -ORI T6,T9,0002 -SB T6,0037 (S0) -LWC1 F4,008C (SP) -LWC1 F8,0028 (S0) -OR A0,S0,R0 -SWC1 F4,002C (S0) -LW T8,0060 (S1) -LWC1 F4,002C (S0) -OR A1,S1,R0 -ADDU V0,T8,S8 -LWC1 F6,000C (V0) -LBU S2,000A (V0) -MUL.S F10,F6,F8 -NOP -MUL.S F20,F10,F4 -JAL 7001C234 -NOP -ANDI S4,V0,00FF -OR A0,S0,R0 -JAL 7001BE14 -OR A1,S1,R0 -LW T7,0000 (S7) -LW A0,0014 (S1) -LW A2,0008 (S7) -LW S3,0000 (T7) -MFC1 A3,F20 -SW S2,0018 (SP) -SW S4,0014 (SP) -SW V0,0010 (SP) -LW A1,0034 (SP) -JAL 7001D5A0 -SW S3,001C (SP) -LW T6,0034 (SP) -ADDIU T9,R0,0006 -SH T9,00B4 (SP) -SW T6,00B8 (SP) -LW T8,0000 (S7) -OR A0,S5,R0 -ADDIU A1,SP,00B4 -LBU T7,000D (T8) -SB T7,00C0 (SP) -LW T9,0000 (S7) -LW T6,0004 (T9) -SW T6,00BC (SP) -LW T8,0000 (S7) -LW S3,0000 (T8) -JAL 70012EFC -OR A2,S3,R0 -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -OR A0,S1,R0 -ANDI A1,S3,00FF -JAL 7001C27C -ANDI A2,S6,00FF -BEQ V0,R0,7001CC64 -OR S0,V0,R0 -LBU T7,0035 (V0) -ADDIU S6,R0,0002 -ADDIU T9,R0,0004 -BNE S6,T7,7001C828 -OR A0,S1,R0 -BEQ R0,R0,7001CC64 -SB T9,0035 (V0) -LW T6,0020 (S0) -ADDIU S8,R0,0003 -SB S8,0035 (S0) -LW T8,0000 (T6) -ADDIU A1,S0,0004 -JAL 7001BE9C -LW A2,0008 (T8) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -OR A0,S1,R0 -ANDI A1,S3,00FF -JAL 7001C27C -ANDI A2,S6,00FF -BEQ V0,R0,7001CC64 -OR S0,V0,R0 -SB S4,0033 (V0) -OR A0,V0,R0 -JAL 7001BE14 -OR A1,S1,R0 -LW V1,001C (S1) -LW T9,0024 (S0) -SLL A2,V0,0x10 -SRA T7,A2,0x10 -SUBU A0,T9,V1 -BLTZ A0,7001C898 -OR A2,T7,R0 -BEQ R0,R0,7001C89C -OR V0,A0,R0 -ADDIU V0,R0,03E8 -LW A0,0014 (S1) -ADDIU A1,S0,0004 -JAL 700133A0 -OR A3,V0,R0 -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -LW S0,0064 (S1) -BEQL S0,R0,7001CC68 -LW RA,0024 (SP) -OR S2,S6,R0 -LBU T6,0031 (S0) -OR A0,S0,R0 -OR A1,S1,R0 -BNEL S2,T6,7001C91C -LW S0,0000 (S0) -JAL 7001BE14 -SB S3,0033 (S0) -LW V1,001C (S1) -LW T7,0024 (S0) -SLL A2,V0,0x10 -SRA T8,A2,0x10 -SUBU A0,T7,V1 -BLTZ A0,7001C904 -OR A2,T8,R0 -BEQ R0,R0,7001C908 -OR V0,A0,R0 -ADDIU V0,R0,03E8 -LW A0,0014 (S1) -ADDIU A1,S0,0004 -JAL 700133A0 -OR A3,V0,R0 -LW S0,0000 (S0) -BNEL S0,R0,7001C8C8 -LBU T6,0031 (S0) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -SLTI AT,S3,0041 -BNE AT,R0,7001C954 -OR V0,S3,R0 -ADDIU AT,R0,005B -BEQ V0,AT,7001CB48 -ADDIU AT,R0,005D -BEQL V0,AT,7001CC68 -LW RA,0024 (SP) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -SLTI AT,V0,001C -BNE AT,R0,7001C974 -ADDIU T9,V0,FFF9 -ADDIU AT,R0,0040 -BEQL V0,AT,7001CA9C -LW T7,0060 (S1) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -SLTIU AT,T9,0015 -BEQ AT,R0,7001CC64 -SLL T9,T9,0x2 -LUI AT,8003 -ADDU AT,AT,T9 -LW T9,9BD4 (AT) ;T9=80029BD4+offset: p->handler -JR T9 -NOP -LW T6,0060 (S1) -SLL T8,S6,0x4 -ADDU T7,T6,T8 -SB S4,0007 (T7) -LW S0,0064 (S1) -BEQL S0,R0,7001CC68 -LW RA,0024 (SP) -OR S2,S6,R0 -LBU T9,0031 (S0) -OR A0,S0,R0 -BNEL S2,T9,7001C9E0 -LW S0,0000 (S0) -JAL 7001C234 -OR A1,S1,R0 -LW A0,0014 (S1) -ADDIU A1,S0,0004 -JAL 700134D0 -ANDI A2,V0,00FF -LW S0,0000 (S0) -BNEL S0,R0,7001C9B8 -LBU T9,0031 (S0) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -LW T6,0060 (S1) -SLL T8,S6,0x4 -ADDU T7,T6,T8 -SB S4,0009 (T7) -LW S0,0064 (S1) -BEQL S0,R0,7001CC68 -LW RA,0024 (SP) -OR S2,S6,R0 -ADDIU S3,R0,0003 -LBU T9,0031 (S0) -BNEL S2,T9,7001CA74 -LW S0,0000 (S0) -LBU T6,0034 (S0) -OR A0,S0,R0 -BEQL S3,T6,7001CA74 -LW S0,0000 (S0) -JAL 7001BE14 -OR A1,S1,R0 -LW V1,001C (S1) -LW T7,0024 (S0) -SLL A2,V0,0x10 -SRA T8,A2,0x10 -SUBU A0,T7,V1 -BLTZ A0,7001CA5C -OR A2,T8,R0 -BEQ R0,R0,7001CA60 -OR V0,A0,R0 -ADDIU V0,R0,03E8 -LW A0,0014 (S1) -ADDIU A1,S0,0004 -JAL 700133A0 -OR A3,V0,R0 -LW S0,0000 (S0) -BNEL S0,R0,7001CA18 -LBU T9,0031 (S0) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -LW T9,0060 (S1) -SLL T6,S6,0x4 -ADDU T8,T9,T6 -BEQ R0,R0,7001CC64 -SB S4,0008 (T8) -LW T7,0060 (S1) -SLL T9,S6,0x4 -ADDU T6,T7,T9 -SB S4,000B (T6) -LW S0,0064 (S1) -BEQL S0,R0,7001CC68 -LW RA,0024 (SP) -OR S2,S6,R0 -ADDIU S6,R0,0002 -ADDIU S8,R0,0003 -ADDIU S7,R0,0004 -ADDIU S5,R0,0002 -ADDIU S3,R0,0003 -LBU T8,0031 (S0) -BNEL S2,T8,7001CB38 -LW S0,0000 (S0) -LBU V0,0035 (S0) -SLTI AT,S4,0040 -BEQL S3,V0,7001CB38 -LW S0,0000 (S0) -BNE AT,R0,7001CB00 -NOP -BNEL V0,R0,7001CB38 -LW S0,0000 (S0) -BEQ R0,R0,7001CB34 -SB S5,0035 (S0) -BNE S6,V0,7001CB10 -NOP -BEQ R0,R0,7001CB34 -SB R0,0035 (S0) -BNEL S7,V0,7001CB38 -LW S0,0000 (S0) -LW T7,0020 (S0) -SB S8,0035 (S0) -OR A0,S1,R0 -LW T9,0000 (T7) -ADDIU A1,S0,0004 -JAL 7001BE9C -LW A2,0008 (T9) -LW S0,0000 (S0) -BNEL S0,R0,7001CAD0 -LBU T8,0031 (S0) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -LW T6,0060 (S1) -SLL T8,S6,0x4 -ADDU T7,T6,T8 -SB S4,000A (T7) -LW S0,0064 (S1) -BEQL S0,R0,7001CC68 -LW RA,0024 (SP) -OR S2,S6,R0 -LBU T9,0031 (S0) -ADDIU A1,S0,0004 -ANDI A2,S4,00FF -BNEL S2,T9,7001CB88 -LW S0,0000 (S0) -JAL 700135F0 -LW A0,0014 (S1) -LW S0,0000 (S0) -BNEL S0,R0,7001CB6C -LBU T9,0031 (S0) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -LW V0,0020 (S1) -SLL T8,S3,0x2 -OR A0,S1,R0 -LH T6,0000 (V0) -OR A2,S6,R0 -ADDU T7,V0,T8 -SLT AT,S3,T6 -BEQL AT,R0,7001CC68 -LW RA,0024 (SP) -JAL 7001BC60 -LW A1,000C (T7) -BEQ R0,R0,7001CC68 -LW RA,0024 (SP) -LW T9,0060 (S1) -SLL S8,S6,0x4 -SLL T7,S4,0x7 -ADDU T6,T9,S8 -LH T8,0004 (T6) -ADDU T9,T7,S3 -ADDIU T6,T9,E000 -MULTU T8,T6 -MFLO A0 -BGEZ A0,7001CC00 -SRA T7,A0,0xD -ADDIU AT,A0,1FFF -SRA T7,AT,0xD -JAL 700137C0 -OR A0,T7,R0 -LW T9,0060 (S1) -MOV.S F20,F0 -ADDU T8,T9,S8 -SWC1 F0,000C (T8) -LW S0,0064 (S1) -BEQL S0,R0,7001CC68 -LW RA,0024 (SP) -OR S2,S6,R0 -LBU T6,0031 (S0) -BNEL S2,T6,7001CC5C -LW S0,0000 (S0) -LWC1 F6,0028 (S0) -LWC1 F10,002C (S0) -LW A0,0014 (S1) -MUL.S F8,F6,F20 -ADDIU A1,S0,0004 -MUL.S F4,F8,F10 -MFC1 A2,F4 -JAL 70013560 -NOP -LW S0,0000 (S0) -BNEL S0,R0,7001CC2C -LBU T6,0031 (S0) -LW RA,0024 (SP) -ADDIU SP,SP,00E0 -JR RA -NOP - -7001CC74 1D874 unconditional return -JR RA -NOP - -7001CC7C -ADDIU SP,SP,FF30 -SW S5,0034 (SP) -SW S2,0028 (SP) -ADDIU T6,A0,0038 -OR S2,A0,R0 -SW RA,0044 (SP) -SW S8,0040 (SP) -SW S7,003C (SP) -SW S6,0038 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -SDC1 F20,0018 (SP) -SW T6,0050 (SP) -ADDIU S5,A0,0048 -LHU T7,0038 (S2) -SLTIU AT,T7,0018 -BEQ AT,R0,7001D24C -SLL T7,T7,0x2 -LUI AT,8003 -ADDU AT,AT,T7 -LW T7,9C28 (AT) ;T7=80029C28+offset: p->handler -JR T7 -NOP -LW A0,0018 (S2) -BEQL A0,R0,7001D250 -OR A0,S5,R0 -JAL 700205B4 -ADDIU A1,SP,0088 -LH V0,0088 (SP) -ADDIU AT,R0,0001 -OR S1,S2,R0 -BEQ V0,AT,7001CD28 -ADDIU A0,SP,0088 -ADDIU AT,R0,0003 -BEQ V0,AT,7001CD4C -OR A1,S2,R0 -ADDIU AT,R0,0004 -BEQ V0,AT,7001CD64 -ADDIU T8,R0,0002 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -SW S2,00D0 (SP) -JAL 7001C45C -SW S5,004C (SP) -LW S2,00D0 (SP) -LW S5,004C (SP) -JAL 7001C0E0 -OR A0,S2,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -JAL 7001C1BC -ADDIU A0,SP,0088 -JAL 7001C0E0 -OR A0,S2,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -SW T8,002C (S2) -ADDIU T9,R0,0010 -LUI A2,7FFF -SH T9,0088 (SP) -ORI A2,A2,FFFF -OR A0,S5,R0 -JAL 70012EFC -ADDIU A1,SP,0088 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -ADDIU T6,R0,0009 -SH T6,00BC (SP) -LW A2,005C (S2) -OR A0,S5,R0 -JAL 70012EFC -ADDIU A1,SP,00BC -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW S0,003C (S2) -LW A0,0014 (S2) -JAL 70013690 -OR A1,S0,R0 -LW A0,0014 (S2) -JAL 70013710 -OR A1,S0,R0 -LW S1,0010 (S0) -OR A0,S2,R0 -LBU T7,0037 (S1) -BEQL T7,R0,7001CDE8 -OR A0,S2,R0 -JAL 7001D2A0 -OR A1,S1,R0 -OR A0,S2,R0 -JAL 7001C070 -OR A1,S0,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW S0,003C (S2) -ADDIU T9,R0,0001 -LW S1,0010 (S0) -LBU T8,0034 (S1) -BNEL T8,R0,7001CE18 -LBU T6,0044 (S2) -SB T9,0034 (S1) -LBU T6,0044 (S2) -LW S3,0040 (S2) -OR A0,S1,R0 -SB T6,0030 (S1) -LW T7,001C (S2) -OR A1,S2,R0 -ADDU T8,T7,S3 -JAL 7001BE14 -SW T8,0024 (S1) -SLL A2,V0,0x10 -SRA T9,A2,0x10 -OR A2,T9,R0 -LW A0,0014 (S2) -OR A1,S0,R0 -JAL 700133A0 -OR A3,S3,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW T9,0074 (S2) -LW S4,0040 (S2) -LW S1,003C (S2) -ADDIU A1,SP,00A8 -JALR RA,T9 -OR A0,S4,R0 -CFC1 T6,F31 -ADDIU T7,R0,0001 -CTC1 T7,F31 -LWC1 F4,00A8 (SP) -OR S3,V0,R0 -LUI AT,4F00 -CVT.W.S F6,F4 -OR A0,S1,R0 -OR A1,S2,R0 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BEQL T7,R0,7001CEF4 -MFC1 T7,F6 -MTC1 AT,F6 -ADDIU T7,R0,0001 -SUB.S F6,F4,F6 -CTC1 T7,F31 -NOP -CVT.W.S F6,F6 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BNE T7,R0,7001CEE8 -NOP -MFC1 T7,F6 -LUI AT,8000 -BEQ R0,R0,7001CF00 -OR T7,T7,AT -BEQ R0,R0,7001CF00 -ADDIU T7,R0,FFFF -MFC1 T7,F6 -NOP -BLTZ T7,7001CEE8 -NOP -CTC1 T6,F31 -JAL 7001BE14 -SB T7,0036 (S1) -LW V1,001C (S2) -LW T9,0024 (S1) -SLL A2,V0,0x10 -SRA T8,A2,0x10 -SUBU A0,T9,V1 -BLTZ A0,7001CF30 -OR A2,T8,R0 -BEQ R0,R0,7001CF34 -OR V0,A0,R0 -ADDIU V0,R0,03E8 -LW A0,0014 (S2) -ADDIU A1,S1,0004 -JAL 700133A0 -OR A3,V0,R0 -ADDIU T6,R0,0016 -SH T6,00BC (SP) -SW S1,00C0 (SP) -SW S4,00C4 (SP) -OR A0,S5,R0 -ADDIU A1,SP,00BC -JAL 70012EFC -OR A2,S3,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW T9,0074 (S2) -LW S4,0040 (S2) -LW S1,003C (S2) -LBU S0,0044 (S2) -ADDIU A1,SP,00A8 -JALR RA,T9 -OR A0,S4,R0 -LWC1 F8,00A8 (SP) -LWC1 F4,0028 (S1) -SLL T8,S0,0x4 -SWC1 F8,002C (S1) -LWC1 F6,002C (S1) -LW T7,0060 (S2) -OR S3,V0,R0 -MUL.S F8,F4,F6 -ADDU T6,T7,T8 -LWC1 F10,000C (T6) -LW A0,0014 (S2) -ADDIU A1,S1,0004 -MUL.S F4,F10,F8 -MFC1 A2,F4 -JAL 70013560 -NOP -ADDIU T9,R0,0017 -SH T9,00BC (SP) -SW S1,00C0 (SP) -SW S4,00C4 (SP) -SB S0,00C8 (SP) -OR A0,S5,R0 -ADDIU A1,SP,00BC -JAL 70012EFC -OR A2,S3,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -OR S1,S2,R0 -LW A0,0050 (SP) -SW S2,00D0 (SP) -JAL 7001C45C -SW S5,004C (SP) -LW S2,00D0 (SP) -BEQ R0,R0,7001D24C -LW S5,004C (SP) -OR A1,S2,R0 -JAL 7001C1BC -LW A0,0050 (SP) -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW T7,002C (S2) -ADDIU AT,R0,0001 -ADDIU T8,R0,0001 -BEQ T7,AT,7001D24C -OR A0,S2,R0 -JAL 7001C0E0 -SW T8,002C (S2) -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW T6,002C (S2) -ADDIU AT,R0,0002 -BNEL T6,AT,7001D250 -OR A0,S5,R0 -LW S1,0064 (S2) -BEQ S1,R0,7001D0B0 -ADDIU S0,S1,0004 -OR A1,S0,R0 -JAL 70013690 -LW A0,0014 (S2) -LW A0,0014 (S2) -JAL 70013710 -OR A1,S0,R0 -LBU T9,0037 (S1) -OR A0,S2,R0 -BEQL T9,R0,7001D09C -OR A0,S2,R0 -JAL 7001D2A0 -OR A1,S1,R0 -OR A0,S2,R0 -JAL 7001C070 -OR A1,S0,R0 -LW S1,0064 (S2) -BNEL S1,R0,7001D068 -ADDIU S0,S1,0004 -SW R0,001C (S2) -BEQ R0,R0,7001D24C -SW R0,002C (S2) -LW T7,002C (S2) -ADDIU AT,R0,0001 -OR A0,S5,R0 -BNEL T7,AT,7001D250 -OR A0,S5,R0 -JAL 70012DE0 -OR A1,R0,R0 -OR A0,S5,R0 -JAL 70012DE0 -ADDIU A1,R0,0002 -LW S1,0064 (S2) -BEQ S1,R0,7001D120 -ADDIU S0,S1,0004 -OR A1,S0,R0 -OR A0,S2,R0 -JAL 7001BFC8 -ORI A2,R0,C350 -BEQ V0,R0,7001D114 -OR A0,S2,R0 -OR A1,S0,R0 -JAL 7001BE9C -ORI A2,R0,C350 -LW S1,0000 (S1) -BNEL S1,R0,7001D0F0 -ADDIU S0,S1,0004 -ADDIU T8,R0,0002 -SW T8,002C (S2) -ADDIU T6,R0,0010 -LUI A2,7FFF -SH T6,00BC (SP) -ORI A2,A2,FFFF -OR A0,S5,R0 -JAL 70012EFC -ADDIU A1,SP,00BC -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW S1,0064 (S2) -LH T9,003C (S2) -BEQ S1,R0,7001D24C -SH T9,0032 (S2) -OR A0,S1,R0 -JAL 7001BE14 -OR A1,S2,R0 -LW V1,001C (S2) -LW T8,0024 (S1) -SLL A2,V0,0x10 -SRA T7,A2,0x10 -SUBU A0,T8,V1 -BLTZ A0,7001D18C -OR A2,T7,R0 -BEQ R0,R0,7001D190 -OR V0,A0,R0 -ADDIU V0,R0,03E8 -LW A0,0014 (S2) -ADDIU A1,S1,0004 -JAL 700133A0 -OR A3,V0,R0 -LW S1,0000 (S1) -BNEL S1,R0,7001D160 -OR A0,S1,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW T6,003C (S2) -LW T9,0040 (S2) -LW T7,0044 (S2) -SW T6,007C (S2) -SW T9,0080 (S2) -BEQ R0,R0,7001D24C -SW T7,0084 (S2) -LBU S0,003C (S2) -LW T6,0060 (S2) -LBU T8,003D (S2) -SLL T9,S0,0x4 -ADDU T7,T6,T9 -BEQ R0,R0,7001D24C -SB T8,0008 (T7) -LW A1,003C (S2) -ADDIU T7,R0,01E8 -LUI AT,8003 -BEQ A1,R0,7001D21C -SW A1,0018 (S2) -LWC1 F6,9C88 (AT) -LWC1 F10,0014 (A1) -MUL.S F8,F6,F10 -TRUNC.W.S F4,F8 -MFC1 T8,F4 -BEQ R0,R0,7001D220 -SW T8,0024 (S2) -SW T7,0024 (S2) -LW A1,0020 (S2) -BEQL A1,R0,7001D250 -OR A0,S5,R0 -JAL 7001BD34 -OR A0,S2,R0 -BEQ R0,R0,7001D250 -OR A0,S5,R0 -LW A1,003C (S2) -OR A0,S2,R0 -JAL 7001BD34 -SW A1,0020 (S2) -OR A0,S5,R0 -JAL 70013020 -LW A1,0050 (SP) -BEQ V0,R0,7001CCBC -SW V0,0028 (S2) -LW T6,001C (S2) -ADDU T9,T6,V0 -SW T9,001C (S2) -LW RA,0044 (SP) -LW S8,0040 (SP) -LW S7,003C (SP) -LW S6,0038 (SP) -LW S5,0034 (SP) -LW S4,0030 (SP) -LW S3,002C (SP) -LW S2,0028 (SP) -LW S1,0024 (SP) -LW S0,0020 (SP) -LDC1 F20,0018 (SP) -JR RA -ADDIU SP,SP,00D0 - -7001D2A0 -ADDIU SP,SP,FFC8 -SW RA,0034 (SP) -SW S7,0030 (SP) -SW S6,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LW S0,0050 (A0) -OR S2,A1,R0 -OR S5,A0,R0 -BEQ S0,R0,7001D378 -ADDIU S7,R0,0017 -ADDIU S6,R0,0016 -LH S3,000C (S0) -LW S1,0000 (S0) -BEQL S3,S6,7001D2FC -LW T6,0010 (S0) -BNE S3,S7,7001D370 -NOP -LW T6,0010 (S0) -BNE S2,T6,7001D370 -NOP -LW T9,0078 (S5) -LW A0,0014 (S0) -ADDIU S4,S5,0048 -JALR RA,T9 -NOP -JAL 7000EA90 -OR A0,S0,R0 -BEQ S1,R0,7001D338 -OR A0,S0,R0 -LW T7,0008 (S1) -LW T8,0008 (S0) -ADDU T0,T7,T8 -SW T0,0008 (S1) -JAL 7000EAC0 -OR A1,S4,R0 -BNEL S3,S6,7001D35C -LBU T3,0037 (S2) -LBU T1,0037 (S2) -ANDI T2,T1,00FE -BEQ R0,R0,7001D364 -SB T2,0037 (S2) -LBU T3,0037 (S2) -ANDI T4,T3,00FD -SB T4,0037 (S2) -LBU T5,0037 (S2) -BEQL T5,R0,7001D37C -LW RA,0034 (SP) -BNE S1,R0,7001D2E0 -OR S0,S1,R0 -LW RA,0034 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -LW S6,002C (SP) -LW S7,0030 (SP) -JR RA -ADDIU SP,SP,0038 - -7001D3A4 -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -LBU T6,0034 (A0) -OR S1,A0,R0 -OR S0,R0,R0 -BLEZ T6,7001D3FC -OR S2,R0,R0 -LW T7,0060 (S1) -OR A0,S1,R0 -OR A1,S0,R0 -ADDU T8,T7,S2 -JAL 7001BCB4 -SW R0,0000 (T8) -LBU T9,0034 (S1) -ADDIU S0,S0,0001 -ADDIU S2,S2,0010 -SLT AT,S0,T9 -BNEL AT,R0,7001D3D0 -LW T7,0060 (S1) -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7001D414 -ADDIU SP,SP,FFC0 -SW RA,0024 (SP) -SW S1,0020 (SP) -SW S0,001C (SP) -LW A2,000C (A1) -SW R0,0020 (A0) -SW R0,0018 (A0) -LUI T6,8002 -LW T6,76E0 (T6) -ADDIU T7,R0,00FF -ADDIU T8,R0,01E8 -ADDIU T9,R0,7FFF -SH T7,0030 (A0) -SW T8,0024 (A0) -SW R0,0028 (A0) -SW R0,002C (A0) -SH T9,0032 (A0) -SW T6,0014 (A0) -LBU T0,0009 (A1) -ADDIU T1,R0,3E80 -SW T1,005C (A0) -SW R0,001C (A0) -SB T0,0035 (A0) -LW T2,0010 (A1) -ADDIU T5,R0,0009 -OR S1,A1,R0 -SW T2,0070 (A0) -LW T3,0014 (A1) -OR S0,A0,R0 -ADDIU T7,R0,0010 -SW T3,0074 (A0) -LW T4,0018 (A1) -SW R0,007C (A0) -SW R0,0080 (A0) -SW R0,0084 (A0) -SH T5,0038 (A0) -SW T4,0078 (A0) -LBU T6,0008 (A1) -OR A1,R0,R0 -SB T6,0034 (A0) -LBU A3,0008 (S1) -SW T7,0010 (SP) ;SP+10= 10 bytes -OR A0,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -SW A2,002C (SP) -SW V0,0060 (S0) -JAL 7001D3A4 -OR A0,S0,R0 -LW A3,0000 (S1) -ADDIU T8,R0,0038 -SW T8,0010 (SP) ;SP+10= 38 bytes -OR A0,R0,R0 -OR A1,R0,R0 -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -LW A2,002C (SP) -SW R0,006C (S0) -LW T9,0000 (S1) -OR A0,R0,R0 -OR A1,R0,R0 -BLEZ T9,7001D530 -ADDIU T2,R0,001C -OR V1,V0,R0 -LW T0,006C (S0) -ADDIU A0,A0,0001 -SW T0,0000 (V1) -SW V1,006C (S0) -LW T1,0000 (S1) -ADDIU V1,V1,0038 -SLT AT,A0,T1 -BNEL AT,R0,7001D510 -LW T0,006C (S0) -SW R0,0064 (S0) -SW R0,0068 (S0) -LW A3,0004 (S1) -SW T2,0010 (SP) ;SP+10= 1C bytes -LW A2,002C (SP) -JAL 7000EB50 ;V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 -OR A0,R0,R0 -ADDIU A0,S0,0048 -OR A1,V0,R0 -JAL 700130AC -LW A2,0004 (S1) -LUI T3,7002 -ADDIU T3,T3,CC7C -SW R0,0000 (S0) -SW T3,0008 (S0) -SW S0,0004 (S0) -LUI A0,8002 -LW A0,76E0 (A0) -JAL 70013120 -OR A1,S0,R0 -LW RA,0024 (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -JR RA -ADDIU SP,SP,0040 - -7001D5A0 -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -SW A3,002C (SP) -LW T6,0008 (A1) -BEQL T6,R0,7001D678 -LW RA,0014 (SP) -SW A0,0020 (SP) -JAL 7000F0D0 -SW A1,0024 (SP) -LW A0,0020 (SP) -LW A3,0024 (SP) -BEQ V0,R0,7001D674 -OR A2,V0,R0 -LBU V1,003B (SP) -BGEZ V1,7001D5F4 -OR V0,V1,R0 -SUBU V1,R0,V0 -ANDI T7,V1,00FF -OR V1,T7,R0 -LW T9,0008 (A3) -LW T8,001C (A0) -ADDIU T2,R0,000D -LW T0,00D8 (T9) -SW R0,0000 (A2) -SH T2,0008 (A2) -ADDU T1,T8,T0 -SW T1,0004 (A2) -LH T3,001A (A3) -SH T3,000A (A2) -LBU T4,0037 (SP) -SB T4,0012 (A2) -LH T5,0032 (SP) -SB V1,0013 (A2) -SH T5,0010 (A2) -LWC1 F4,002C (SP) -SWC1 F4,000C (A2) -SW A3,0024 (SP) -SW A2,001C (SP) -JAL 7000EFC8 -LW A1,003C (SP) -LW A2,001C (SP) -LW A3,0024 (SP) -ADDIU A1,R0,0003 -SW V0,0014 (A2) -LW T6,0028 (SP) -SW T6,0018 (A2) -LW T7,0008 (A3) -LW A0,000C (T7) -LW T9,0008 (A0) -JALR RA,T9 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7001D690 -OR V0,A0,R0 -OR V1,A1,R0 -BLEZ A2,7001D6FC -OR A3,R0,R0 -ANDI A1,A2,0003 -BEQ A1,R0,7001D6CC -OR A0,A1,R0 -LBU T6,0000 (V0) -ADDIU A3,A3,0001 -ADDIU V1,V1,0001 -ADDIU V0,V0,0001 -BNE A0,A3,7001D6AC -SB T6,FFFF (V1) -BEQ A3,A2,7001D6FC -NOP -LBU T7,0000 (V0) -ADDIU A3,A3,0004 -ADDIU V1,V1,0004 -SB T7,FFFC (V1) -LBU T8,0001 (V0) -ADDIU V0,V0,0004 -SB T8,FFFD (V1) -LBU T9,FFFE (V0) -SB T9,FFFE (V1) -LBU T0,FFFF (V0) -BNE A3,A2,7001D6CC -SB T0,FFFF (V1) -JR RA -NOP - -7001D710 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU T6,R0,0001 -LUI AT,8003 -LUI A0,8007 -LUI A1,8007 -SW T6,82E0 (AT) -ADDIU A1,A1,8FE0 ;A1=80068FE0 -ADDIU A0,A0,8FE8 ;A0=80068FE8 -JAL 7000D6D0 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8007 -ADDIU A0,A0,8FE8 -OR A1,R0,R0 -JAL 7000DF10 -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7001D760 -LUI T6,8003 -LW T6,82E0 (T6) -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BNE T6,R0,7001D780 -NOP -JAL 7001D710 -NOP -LUI A0,8007 -ADDIU A0,A0,8FE8 -ADDIU A1,SP,001C -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7001D7A4 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8007 -ADDIU A0,A0,8FE8 -OR A1,R0,R0 -JAL 7000DF10 -OR A2,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7001D7D0 -ADDIU SP,SP,FF70 -SW S1,0020 (SP) -ANDI V0,A1,00FF -ADDIU V1,R0,0058 -OR S1,A0,R0 -SW RA,002C (SP) -SW S3,0028 (SP) -SW S2,0024 (SP) -SW S0,001C (SP) -BNE V1,V0,7001D808 -SW A1,0094 (SP) -LUI S3,8003 -BEQ R0,R0,7001D810 -ADDIU S3,S3,8304 -LUI S3,8003 -ADDIU S3,S3,82F0 -ADDIU AT,R0,006F -BNE V0,AT,7001D824 -ADDIU S0,R0,0018 -BEQ R0,R0,7001D844 -ADDIU T1,R0,0008 -ADDIU AT,R0,0078 -BEQ V0,AT,7001D840 -ADDIU T0,R0,0010 -BEQ V1,V0,7001D840 -NOP -BEQ R0,R0,7001D840 -ADDIU T0,R0,000A -OR T1,T0,R0 -LW T8,0000 (S1) -LW T9,0004 (S1) -ADDIU AT,R0,0064 -SW T8,0060 (SP) -SW T8,0040 (SP) -SW T9,0044 (SP) -BEQ V0,AT,7001D870 -SW T9,0064 (SP) -ADDIU AT,R0,0069 -BNEL V0,AT,7001D8AC -LW T2,0060 (SP) -LW T4,0040 (SP) -BGTZL T4,7001D8AC -LW T2,0060 (SP) -BLTZ T4,7001D88C -LW T6,0060 (SP) -BEQ R0,R0,7001D8AC -LW T2,0060 (SP) -LW T7,0064 (SP) -NOR T8,T6,R0 -SLTIU AT,T7,0001 -ADDU T8,T8,AT -SUBU T9,R0,T7 -SW T9,0064 (SP) -SW T8,0060 (SP) -LW T2,0060 (SP) -LW T3,0064 (SP) -ADDIU T0,R0,0017 -BNE T2,R0,7001D8D0 -LW A0,0060 (SP) -BNEL T3,R0,7001D8D4 -ADDIU S0,R0,0017 -LW T4,0024 (S1) -BEQL T4,R0,7001D90C -ADDIU S2,SP,0078 -ADDIU S0,R0,0017 -LW A1,0064 (SP) -OR A3,T1,R0 -SRA A2,T1,0x1F -SW T0,004C (SP) -JAL 7000EC6C ;(V0,V1) = (A0,A1) % (A2,A3) -SW T1,0070 (SP) -LW T0,004C (SP) -ADDU T6,V1,S3 -LBU T7,0000 (T6) -ADDIU S2,SP,0078 -LW T1,0070 (SP) -ADDU T8,S2,T0 -SB T7,0000 (T8) -ADDIU S2,SP,0078 -LW A0,0060 (SP) -LW A1,0064 (SP) -OR A3,T1,R0 -SRA A2,T1,0x1F -JAL 7000ECA8 ;(V0,V1) = (A0,A1) / (A2,A3) -SW T1,0070 (SP) -LW T1,0070 (SP) -SW V1,0004 (S1) -BLTZ V0,7001D9DC -SW V0,0000 (S1) -BGTZ V0,7001D944 -NOP -BEQL V1,R0,7001D9E0 -ADDIU T4,R0,0018 -BLEZ S0,7001D9DC -SRA T4,T1,0x1F -LW T2,0000 (S1) -LW T3,0004 (S1) -SW T1,003C (SP) -SW T4,0038 (SP) -SW T2,0040 (SP) -SW T3,0044 (SP) -LW T6,0038 (SP) -LW T7,003C (SP) -ADDIU A0,SP,0050 -LW A2,0040 (SP) -LW A3,0044 (SP) -SW T6,0010 (SP) -JAL 70020B50 -SW T7,0014 (SP) -LW T8,0050 (SP) -LW T9,0054 (SP) -ADDIU A0,S0,FFFF -SW T8,0000 (S1) -SW T9,0004 (S1) -LW T3,005C (SP) -ADDU T7,S2,A0 -OR S0,A0,R0 -ADDU T5,T3,S3 -LBU T6,0000 (T5) -SB T6,0000 (T7) -LW T8,0000 (S1) -LW T9,0004 (S1) -SW T8,0040 (SP) -BLTZ T8,7001D9DC -SW T9,0044 (SP) -BGTZ T8,7001D9D4 -NOP -BEQL T9,R0,7001D9E0 -ADDIU T4,R0,0018 -BGTZL S0,7001D968 -LW T6,0038 (SP) -ADDIU T4,R0,0018 -SUBU A2,T4,S0 -SW A2,0014 (S1) -LW A0,0008 (S1) -JAL 70013850 ;V0= memcpy(A0,A1,A2) -ADDU A1,S2,S0 -LW A1,0014 (S1) -LW A0,0024 (S1) -SLT AT,A1,A0 -BEQ AT,R0,7001DA0C -SUBU T5,A0,A1 -SW T5,0010 (S1) -BGEZL A0,7001DA50 -LW RA,002C (SP) -LW T6,0030 (S1) -ADDIU AT,R0,0010 -ANDI T7,T6,0014 -BNEL T7,AT,7001DA50 -LW RA,002C (SP) -LW T8,0028 (S1) -LW T9,000C (S1) -LW V0,0010 (S1) -SUBU T2,T8,T9 -SUBU T3,T2,V0 -SUBU S0,T3,A1 -BLEZ S0,7001DA4C -ADDU T4,V0,S0 -SW T4,0010 (S1) -LW RA,002C (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -LW S2,0024 (SP) -LW S3,0028 (SP) -JR RA -ADDIU SP,SP,0090 - -7001DA70 -ADDIU SP,SP,FFE8 -SW S2,0028 (SP) -SLL T6,S2,0x10 -SRA S2,T6,0x10 -SW S3,0024 (SP) -SLL T8,S3,0x10 -SRA S3,T8,0x10 -ANDI T6,S4,00FF -SW S4,001C (SP) -OR S4,T6,R0 -BGTZ S3,7001DAAC -SW RA,0014 (SP) -LUI S1,8003 -ADDIU S1,S1,9CE0 -ADDIU S3,R0,0001 -ADDIU V0,R0,0066 -BEQ V0,S4,7001DAE4 -OR V1,S4,R0 -ADDIU A0,R0,0067 -BEQ A0,V1,7001DAC8 -ADDIU AT,R0,0047 -BNE V1,AT,7001DD20 -SLTI AT,S2,FFFC -BNE AT,R0,7001DD20 -NOP -LW T7,0024 (S0) -SLT AT,S2,T7 -BEQ AT,R0,7001DD20 -NOP -ADDIU S2,S2,0001 -SLL T8,S2,0x10 -BEQ V0,V1,7001DB28 -SRA S2,T8,0x10 -LW T6,0030 (S0) -LW V0,0024 (S0) -ANDI T7,T6,0008 -BNE T7,R0,7001DB18 -SLT AT,S3,V0 -BEQL AT,R0,7001DB1C -SUBU T8,V0,S2 -SW S3,0024 (S0) -OR V0,S3,R0 -SUBU T8,V0,S2 -BGEZ T8,7001DB28 -SW T8,0024 (S0) -SW R0,0024 (S0) -BGTZ S2,7001DBF8 -SLT AT,S3,S2 -LW T7,0008 (S0) -LW T8,0014 (S0) -ADDIU T6,R0,0030 -SUBU V1,R0,S2 -ADDU T9,T7,T8 -SB T6,0000 (T9) -LW T7,0014 (S0) -LW V0,0024 (S0) -OR A1,S1,R0 -ADDIU T8,T7,0001 -BGTZ V0,7001DB70 -SW T8,0014 (S0) -LW T6,0030 (S0) -ANDI T9,T6,0008 -BEQL T9,R0,7001DB98 -SLT AT,V0,V1 -LW T8,0008 (S0) -LW T6,0014 (S0) -ADDIU T7,R0,002E -ADDU T9,T8,T6 -SB T7,0000 (T9) -LW T8,0014 (S0) -LW V0,0024 (S0) -ADDIU T6,T8,0001 -SW T6,0014 (S0) -SLT AT,V0,V1 -BEQL AT,R0,7001DBB4 -ADDU T8,V0,S2 -SUBU S2,R0,V0 -SLL T7,S2,0x10 -SRA S2,T7,0x10 -SUBU V1,R0,S2 -ADDU T8,V0,S2 -SLT AT,T8,S3 -SW V1,0018 (S0) -BEQ AT,R0,7001DBD0 -SW T8,0024 (S0) -SLL S3,T8,0x10 -SRA T6,S3,0x10 -OR S3,T6,R0 -LW T7,0008 (S0) -LW T9,0014 (S0) -SW S3,001C (S0) -OR A2,S3,R0 -JAL 70013850 ;V0= memcpy(A0,A1,A2) -ADDU A0,T7,T9 -LW T8,0024 (S0) -SUBU T6,T8,S3 -BEQ R0,R0,7001DF7C -SW T6,0020 (S0) -BEQ AT,R0,7001DC70 -OR A1,S1,R0 -LW T7,0008 (S0) -LW T9,0014 (S0) -OR A1,S1,R0 -OR A2,S3,R0 -JAL 70013850 ;V0= memcpy(A0,A1,A2) -ADDU A0,T7,T9 -LW T8,0014 (S0) -LW V0,0024 (S0) -SUBU T7,S2,S3 -ADDU T6,T8,S3 -SW T6,0014 (S0) -BGTZ V0,7001DC44 -SW T7,0018 (S0) -LW T9,0030 (S0) -ANDI T8,T9,0008 -BEQ T8,R0,7001DC68 -NOP -LW T7,0008 (S0) -LW T9,0014 (S0) -ADDIU T6,R0,002E -ADDU T8,T7,T9 -SB T6,0000 (T8) -LW T7,001C (S0) -LW V0,0024 (S0) -ADDIU T9,T7,0001 -SW T9,001C (S0) -BEQ R0,R0,7001DF7C -SW V0,0020 (S0) -LW T6,0008 (S0) -LW T8,0014 (S0) -OR A2,S2,R0 -JAL 70013850 ;V0= memcpy(A0,A1,A2) -ADDU A0,T6,T8 -LW T7,0014 (S0) -LW V0,0024 (S0) -SUBU S3,S3,S2 -SLL T6,S3,0x10 -ADDU T9,T7,S2 -SW T9,0014 (S0) -BGTZ V0,7001DCB4 -SRA S3,T6,0x10 -LW T7,0030 (S0) -ANDI T9,T7,0008 -BEQL T9,R0,7001DCDC -SLT AT,V0,S3 -LW T8,0008 (S0) -LW T7,0014 (S0) -ADDIU T6,R0,002E -ADDU T9,T8,T7 -SB T6,0000 (T9) -LW T8,0014 (S0) -LW V0,0024 (S0) -ADDIU T7,T8,0001 -SW T7,0014 (S0) -SLT AT,V0,S3 -BEQ AT,R0,7001DCF0 -ADDU A1,S2,S1 -SLL S3,V0,0x10 -SRA T6,S3,0x10 -OR S3,T6,R0 -LW T9,0008 (S0) -LW T8,0014 (S0) -OR A2,S3,R0 -JAL 70013850 ;V0= memcpy(A0,A1,A2) -ADDU A0,T9,T8 -LW T7,0014 (S0) -LW T9,0024 (S0) -ADDU T6,T7,S3 -SUBU T8,T9,S3 -SW T6,0014 (S0) -BEQ R0,R0,7001DF7C -SW T8,0018 (S0) -BEQ A0,V1,7001DD30 -ADDIU AT,R0,0047 -BNEL V1,AT,7001DD70 -LW T8,0008 (S0) -LW V0,0024 (S0) -ADDIU S4,R0,0045 -SLT AT,S3,V0 -BEQL AT,R0,7001DD50 -ADDIU T7,V0,FFFF -SW S3,0024 (S0) -OR V0,S3,R0 -ADDIU T7,V0,FFFF -BGEZ T7,7001DD5C -SW T7,0024 (S0) -SW R0,0024 (S0) -BNE A0,V1,7001DD6C -NOP -BEQ R0,R0,7001DD6C -ADDIU S4,R0,0065 -LW T8,0008 (S0) -LW T7,0014 (S0) -LBU T9,0000 (S1) -ADDIU S1,S1,0001 -ADDU T6,T8,T7 -SB T9,0000 (T6) -LW T8,0014 (S0) -LW V0,0024 (S0) -ADDIU T7,T8,0001 -BGTZ V0,7001DDA8 -SW T7,0014 (S0) -LW T9,0030 (S0) -ANDI T6,T9,0008 -BEQ T6,R0,7001DDCC -NOP -LW T7,0008 (S0) -LW T9,0014 (S0) -ADDIU T8,R0,002E -ADDU T6,T7,T9 -SB T8,0000 (T6) -LW T7,0014 (S0) -LW V0,0024 (S0) -ADDIU T9,T7,0001 -SW T9,0014 (S0) -BLEZL V0,7001DE28 -LW T6,0008 (S0) -ADDIU S3,S3,FFFF -SLL T8,S3,0x10 -SRA S3,T8,0x10 -SLT AT,V0,S3 -BEQ AT,R0,7001DDF8 -OR A1,S1,R0 -SLL S3,V0,0x10 -SRA T7,S3,0x10 -OR S3,T7,R0 -LW T9,0008 (S0) -LW T8,0014 (S0) -OR A2,S3,R0 -JAL 70013850 ;V0= memcpy(A0,A1,A2) -ADDU A0,T9,T8 -LW T6,0014 (S0) -LW T9,0024 (S0) -ADDU T7,T6,S3 -SUBU T8,T9,S3 -SW T7,0014 (S0) -SW T8,0018 (S0) -LW T6,0008 (S0) -LW T7,0014 (S0) -ADDU S1,T6,T7 -ADDIU S1,S1,0001 -BLTZ S2,7001DE4C -SB S4,FFFF (S1) -ADDIU T9,R0,002B -SB T9,0000 (S1) -BEQ R0,R0,7001DE68 -ADDIU S1,S1,0001 -SUBU S2,R0,S2 -SLL T6,S2,0x10 -ADDIU T8,R0,002D -SRA T7,T6,0x10 -SB T8,0000 (S1) -ADDIU S1,S1,0001 -OR S2,T7,R0 -SLTI AT,S2,0064 -BNEL AT,R0,7001DF18 -ADDIU V0,R0,000A -SLTI AT,S2,03E8 -BNE AT,R0,7001DEC8 -ADDIU V0,R0,03E8 -DIV S2,V0 -BNE V0,R0,7001DE90 -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE V0,AT,7001DEA8 -LUI AT,8000 -BNE S2,AT,7001DEA8 -NOP -BREAK 00001800 -MFHI S2 -SLL T6,S2,0x10 -MFLO T9 -ADDIU T8,T9,0030 -SRA T7,T6,0x10 -OR S2,T7,R0 -SB T8,0000 (S1) -ADDIU S1,S1,0001 -ADDIU V0,R0,0064 -DIV S2,V0 -BNE V0,R0,7001DEDC -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE V0,AT,7001DEF4 -LUI AT,8000 -BNE S2,AT,7001DEF4 -NOP -BREAK 00001800 -MFHI S2 -SLL T6,S2,0x10 -MFLO T9 -ADDIU T8,T9,0030 -SRA T7,T6,0x10 -OR S2,T7,R0 -SB T8,0000 (S1) -ADDIU S1,S1,0001 -ADDIU V0,R0,000A -DIV S2,V0 -BNE V0,R0,7001DF28 -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE V0,AT,7001DF40 -LUI AT,8000 -BNE S2,AT,7001DF40 -NOP -BREAK 00001800 -MFHI S2 -SLL T6,S2,0x10 -MFLO T9 -ADDIU T8,T9,0030 -SRA T7,T6,0x10 -ADDIU T9,T7,0030 -SB T8,0000 (S1) -SB T9,0001 (S1) -LW T8,0008 (S0) -OR S2,T7,R0 -LW T7,0014 (S0) -ADDIU S1,S1,0002 -SUBU T6,S1,T8 -SUBU T9,T6,T7 -SW T9,001C (S0) -LW T8,0030 (S0) -ADDIU AT,R0,0010 -ANDI T6,T8,0014 -BNEL T6,AT,7001DFCC -LW RA,0014 (SP) -LW T7,000C (S0) -LW T9,0014 (S0) -LW T6,0018 (S0) -LW V1,0028 (S0) -ADDU T8,T7,T9 -LW T9,001C (S0) -ADDU T7,T8,T6 -LW T6,0020 (S0) -ADDU T8,T7,T9 -ADDU V0,T8,T6 -SLT AT,V0,V1 -BEQ AT,R0,7001DFC8 -SUBU T7,V1,V0 -SW T7,0010 (S0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7001DFD8 -JR RA -NOP - -7001DFE0 -ADDIU SP,SP,FF30 -SW RA,003C (SP) -SW S5,0038 (SP) -SW S4,0034 (SP) -SW S3,0030 (SP) -SW S2,002C (SP) -SW S1,0028 (SP) -SW S0,0024 (SP) -SDC1 F20,0018 (SP) -SW A0,00D0 (SP) -SW A1,00D4 (SP) -LW V0,0024 (A0) -ADDIU S5,SP,00B0 -LDC1 F20,0000 (A0) -BGEZ V0,7001E028 -ADDIU T7,R0,0006 -BEQ R0,R0,7001E054 -SW T7,0024 (A0) -BNE V0,R0,7001E054 -LBU T8,00D7 (SP) -ADDIU AT,R0,0067 -BEQ T8,AT,7001E048 -SW T8,0048 (SP) -ADDIU AT,R0,0047 -BNEL T8,AT,7001E058 -LW T6,00D0 (SP) -LW T7,00D0 (SP) -ADDIU T9,R0,0001 -SW T9,0024 (T7) -LW T6,00D0 (SP) -ADDIU AT,R0,07FF -LHU A0,0000 (T6) -ANDI V1,A0,7FF0 -SRA T8,V1,0x4 -SLL T9,T8,0x10 -SRA V1,T9,0x10 -BNE V1,AT,7001E0D4 -NOP -SH R0,009A (SP) -LHU T8,0000 (T6) -ADDIU V1,R0,0002 -SLL V0,V1,0x10 -ANDI T9,T8,000F -BNEL T9,R0,7001E0B8 -SRA T7,V0,0x10 -LHU T7,0002 (T6) -BNEL T7,R0,7001E0B8 -SRA T7,V0,0x10 -LHU T8,0004 (T6) -BNEL T8,R0,7001E0B8 -SRA T7,V0,0x10 -LHU T9,0006 (T6) -BEQ T9,R0,7001E0C0 -SRA T7,V0,0x10 -BEQ R0,R0,7001E10C -OR V0,T7,R0 -ADDIU V1,R0,0001 -SLL V0,V1,0x10 -SRA T7,V0,0x10 -BEQ R0,R0,7001E10C -OR V0,T7,R0 -BLEZ V1,7001E0F8 -ANDI T8,A0,800F -LW T9,00D0 (SP) -ORI T6,T8,3FF0 -ADDIU T7,V1,FC02 -SH T6,0000 (T9) -SH T7,009A (SP) -BEQ R0,R0,7001E10C -ADDIU V0,R0,FFFF -BGEZ V1,7001E108 -OR V0,R0,R0 -BEQ R0,R0,7001E10C -ADDIU V0,R0,0002 -SH R0,009A (SP) -BLEZ V0,7001E158 -SLL T8,V0,0x10 -SLL T8,V0,0x10 -SRA T6,T8,0x10 -ADDIU AT,R0,0002 -BNE T6,AT,7001E134 -LW T9,00D0 (SP) -LUI A1,8003 -BEQ R0,R0,7001E13C -ADDIU A1,A1,9CD8 -LUI A1,8003 -ADDIU A1,A1,9CDC -ADDIU T7,R0,0003 -SW T7,0014 (T9) -LW A0,0008 (T9) -JAL 70013850 ;V0= memcpy(A0,A1,A2) -ADDIU A2,R0,0003 -BEQ R0,R0,7001E508 -LW RA,003C (SP) -SRA T6,T8,0x10 -BNE T6,R0,7001E16C -OR S3,R0,R0 -BEQ R0,R0,7001E4F0 -SH R0,009A (SP) -MTC1 R0,F3 -MTC1 R0,F2 -LBU T7,00D7 (SP) -LH T9,009A (SP) -C.LT.D F20,F2 -ADDIU AT,R0,7597 -OR V1,R0,R0 -ADDIU S5,SP,00B1 -BC1F 7001E198 -SW T7,0048 (SP) -NEG.D F20,F20 -MULTU T9,AT -LUI AT,0001 -ORI AT,AT,86A0 -ADDIU A1,R0,0006 -MFLO T8 -NOP -NOP -DIV T8,AT -MFLO T6 -ADDIU T7,T6,FFFC -SLL T9,T7,0x10 -SRA T8,T9,0x10 -BGEZ T8,7001E230 -SH T7,009A (SP) -SLL T9,T7,0x10 -SRA T8,T9,0x10 -ADDIU T6,R0,0003 -SUBU A0,T6,T8 -ADDIU AT,R0,FFFC -AND V0,A0,AT -SUBU T9,R0,V0 -BLEZ V0,7001E2A0 -SH T9,009A (SP) -LUI A0,8003 -ADDIU A0,A0,9C90 -ANDI T6,V0,0001 -BEQ T6,R0,7001E21C -SRA T9,V0,0x1 -SLL T8,V1,0x3 -ADDU T7,A0,T8 -LDC1 F4,0000 (T7) -MUL.D F20,F20,F4 -NOP -OR V0,T9,R0 -BGTZ T9,7001E1FC -ADDIU V1,V1,0001 -BEQ R0,R0,7001E2A4 -LW T7,0048 (SP) -LH T6,009A (SP) -LUI AT,3FF0 -OR V1,R0,R0 -BLEZ T6,7001E2A0 -ANDI T8,T6,FFFC -SLL V0,T8,0x10 -SLL T9,T8,0x10 -MTC1 AT,F1 -MTC1 R0,F0 -SRA T6,T9,0x10 -SRA T7,V0,0x10 -SH T8,009A (SP) -BLEZ T6,7001E29C -OR V0,T7,R0 -LUI A0,8003 -ADDIU A0,A0,9C90 -ANDI T7,V0,0001 -BEQ T7,R0,7001E290 -SRA T6,V0,0x1 -SLL T8,V1,0x3 -ADDU T9,A0,T8 -LDC1 F6,0000 (T9) -MUL.D F0,F0,F6 -NOP -OR V0,T6,R0 -BGTZ T6,7001E270 -ADDIU V1,V1,0001 -DIV.D F20,F20,F0 -LW T7,0048 (SP) -ADDIU AT,R0,0066 -LW T8,00D0 (SP) -BNE T7,AT,7001E2C0 -ADDIU T6,R0,0030 -LH A1,009A (SP) -BEQ R0,R0,7001E2C0 -ADDIU A1,A1,000A -LW T9,0024 (T8) -ADDU S4,A1,T9 -SLTI AT,S4,0014 -BNE AT,R0,7001E2D8 -NOP -ADDIU S4,R0,0013 -BLEZ S4,7001E3A8 -SB T6,00B0 (SP) -C.LT.D F2,F20 -ADDIU S3,R0,0030 -ADDIU S2,SP,0074 -BC1FL 7001E3AC -LH T8,009A (SP) -TRUNC.W.D F8,F20 -ADDIU S4,S4,FFF8 -ADDIU S5,S5,0008 -MFC1 S1,F8 -BLEZ S4,7001E328 -NOP -MTC1 S1,F10 -LUI AT,8003 -LDC1 F8,9CE8 (AT) -CVT.D.W F4,F10 -SUB.D F6,F20,F4 -MUL.D F20,F6,F8 -NOP -BLEZ S1,7001E370 -ADDIU S0,R0,0008 -ADDIU S0,R0,0007 -BLTZ S0,7001E370 -OR A0,S2,R0 -OR A1,S1,R0 -JAL 70020C50 -ADDIU A2,R0,000A -LW T8,0078 (SP) -ADDIU S5,S5,FFFF -ADDIU T9,T8,0030 -SB T9,0000 (S5) -LW S1,0074 (SP) -BLEZL S1,7001E374 -MTC1 R0,F3 -ADDIU S0,S0,FFFF -BGEZL S0,7001E33C -OR A0,S2,R0 -MTC1 R0,F3 -MTC1 R0,F2 -ADDIU S0,S0,FFFF -BLTZ S0,7001E390 -ADDIU S0,S0,FFFF -ADDIU S5,S5,FFFF -BGEZ S0,7001E380 -SB S3,0000 (S5) -BLEZ S4,7001E3A8 -ADDIU S5,S5,0008 -C.LT.D F2,F20 -NOP -BC1TL 7001E2F8 -TRUNC.W.D F8,F20 -LH T8,009A (SP) -LBU T6,00B1 (SP) -ADDIU T7,SP,00B0 -ADDIU V0,R0,0030 -SUBU S4,S5,T7 -ADDIU T9,T8,0007 -ADDIU S4,S4,FFFF -SH T9,009A (SP) -BNE V0,T6,7001E3F0 -ADDIU S5,SP,00B1 -LH T7,009A (SP) -ADDIU S5,S5,0001 -ADDIU S4,S4,FFFF -ADDIU T8,T7,FFFF -SH T8,009A (SP) -LBU T9,0000 (S5) -BEQL V0,T9,7001E3D4 -LH T7,009A (SP) -LW T6,0048 (SP) -ADDIU AT,R0,0066 -LW T8,00D0 (SP) -BNE T6,AT,7001E410 -LW T7,0048 (SP) -LH A1,009A (SP) -BEQ R0,R0,7001E430 -ADDIU A1,A1,0001 -ADDIU AT,R0,0065 -BEQ T7,AT,7001E424 -ADDIU AT,R0,0045 -BNE T7,AT,7001E42C -OR V0,R0,R0 -BEQ R0,R0,7001E42C -ADDIU V0,R0,0001 -OR A1,V0,R0 -LW T9,0024 (T8) -ADDU S3,A1,T9 -SLL T6,S3,0x10 -SRA S3,T6,0x10 -SLT AT,S4,S3 -BEQ AT,R0,7001E458 -NOP -SLL S3,S4,0x10 -SRA T8,S3,0x10 -OR S3,T8,R0 -BLEZ S3,7001E4F0 -SLT AT,S3,S4 -BEQ AT,R0,7001E480 -ADDU V0,S3,S5 -LBU T9,0000 (V0) -SLTI AT,T9,0035 -BNEL AT,R0,7001E484 -ADDIU A1,R0,0030 -BEQ R0,R0,7001E488 -ADDIU A1,R0,0039 -ADDIU A1,R0,0030 -ADDU V0,S3,S5 -LBU T6,FFFF (V0) -ADDIU V1,S3,FFFF -OR A0,A1,R0 -BNE A1,T6,7001E4BC -ADDIU AT,R0,0039 -ADDU V0,V1,S5 -LBU T9,FFFF (V0) -ADDIU S3,S3,FFFF -SLL T7,S3,0x10 -ADDIU V1,V1,FFFF -ADDIU V0,V0,FFFF -BEQ A0,T9,7001E4A0 -SRA S3,T7,0x10 -BNE A0,AT,7001E4D0 -ADDU V0,S5,V1 -LBU T6,0000 (V0) -ADDIU T7,T6,0001 -SB T7,0000 (V0) -BGEZ V1,7001E4F0 -LH T6,009A (SP) -ADDIU S3,S3,0001 -SLL T8,S3,0x10 -ADDIU T7,T6,0001 -SH T7,009A (SP) -SRA S3,T8,0x10 -ADDIU S5,S5,FFFF -LW S0,00D0 (SP) -LBU S4,00D7 (SP) -OR S1,S5,R0 -JAL 7001DA70 -LH S2,009A (SP) -LW RA,003C (SP) -LDC1 F20,0018 (SP) -LW S0,0024 (SP) -LW S1,0028 (SP) -LW S2,002C (SP) -LW S3,0030 (SP) -LW S4,0034 (SP) -LW S5,0038 (SP) -JR RA -ADDIU SP,SP,00D0 - -7001E530 1F130 request I/O with hardware A0; read/write (A1) SP+10 bytes between hardware offset A2 and rdram A3 - accepts: A0=p->PI BSD hardware entry, A1=mode(read 0/write 1), A2=base hardware address, A3=p->rdram, SP+10=length -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -SW A1,002C (SP) -SW A2,0030 (SP) -SW A3,0034 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LUI T6,A460 -LW S0,0010 (T6) ;S0= A4600010: PI Status -ANDI T7,S0,0003 -BEQ T7,R0,7001E578 ;branch if ready -NOP -//7001E564: loop until ready -LUI T8,A460 -LW S0,0010 (T8) -ANDI T9,S0,0003 -BNE T9,R0,7001E564 -NOP -//7001E578: set ram and rom addresses -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -LW A0,0034 (SP) ;A0=A3 f/caller -LUI T0,A460 -SW V0,0000 (T0) ;V0->A4600000: set PI rdram address -LW T1,0028 (SP) ;T1= A0 f/caller: PI BSD hardware entry -LW T3,0030 (SP) ;T3= A2 f/caller: hardware offset -LUI AT,1FFF -LW T2,000C (T1) ;T2=A0+C: base address for hardware entry -ORI AT,AT,FFFF -LUI T6,A460 -OR T4,T2,T3 -AND T5,T4,AT ;T5= (base | offset) & 1FFFFFFF: formatted hardware address -SW T5,0004 (T6) ;T5->A4600004: set PI hardware address -//7001E5AC: use mode flag to set IO direction -LW S1,002C (SP) ;S1=A1 f/caller -BEQ S1,R0,7001E5C8 -ADDIU AT,R0,0001 -BEQ S1,AT,7001E5DC -NOP -BEQ R0,R0,7001E5F0 ;return error on bad mode -NOP -//7001E5C8: 0: write to rdram -LW T7,0038 (SP) ;T7=SP+10 f/caller: length -LUI T9,A460 -ADDIU T8,T7,FFFF ;T8= length-1 -BEQ R0,R0,7001E5F8 -SW T8,000C (T9) ;T8->A460000C: set PI Write Length -//7001E5DC: 1: read rdram and write to hardware -LW T0,0038 (SP) ;T0=SP+10 f/caller: length -LUI T2,A460 -ADDIU T1,T0,FFFF ;T1= length-1 -BEQ R0,R0,7001E5F8 -SW T1,0008 (T2) ;T1->A4600008: set PI Read Length -//7001E5F0: return -1: error! -BEQ R0,R0,7001E5FC -ADDIU V0,R0,FFFF -//7001E5F8: return 0: okay! -OR V0,R0,R0 -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7001E610 -ADDIU SP,SP,FFC0 -SW A0,0040 (SP) -LW T6,0040 (SP) -SW RA,001C (SP) -SW R0,0028 (SP) -SW R0,003C (SP) -SW R0,0030 (SP) -SW T6,002C (SP) -LW T7,002C (SP) -ADDIU A1,SP,003C -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0008 (T7) -LW T8,003C (SP) -LW T9,0014 (T8) -BEQ T9,R0,7001E7E4 -NOP -LBU T0,0004 (T9) -ADDIU AT,R0,0002 -BNE T0,AT,7001E7E4 -NOP -LW T1,0014 (T9) -BEQ T1,R0,7001E678 -ADDIU AT,R0,0001 -BNE T1,AT,7001E7E4 -NOP -LW T2,003C (SP) -ADDIU T0,R0,FFFF -ADDIU AT,R0,0003 -LW T3,0014 (T2) -ADDIU T4,T3,0014 -SW T4,0020 (SP) -LHU T5,0006 (T4) -SLL T6,T5,0x3 -ADDU T6,T6,T5 -SLL T6,T6,0x2 -ADDU T7,T4,T6 -ADDIU T8,T7,0018 -SW T8,0024 (SP) -SW T0,0008 (T4) -LW T9,0020 (SP) -LHU T1,0004 (T9) -BEQ T1,AT,7001E6D4 -NOP -LW T2,0024 (SP) -LW T3,0004 (T2) -LW T5,000C (T2) -SUBU T6,T3,T5 -SW T6,0004 (T2) -LW T7,0020 (SP) -ADDIU AT,R0,0002 -LHU T8,0004 (T7) -BNE T8,AT,7001E708 -NOP -LW T0,003C (SP) -LW T4,0014 (T0) -LW T9,0014 (T4) -BNE T9,R0,7001E708 -NOP -ADDIU T1,R0,0001 -BEQ R0,R0,7001E70C -SW T1,0028 (SP) -SW R0,0028 (SP) -LW T3,002C (SP) -ADDIU A1,SP,0034 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0010 (T3) -LUI A0,0010 -JAL 70020CE0 -ORI A0,A0,0401 -LW T6,0020 (SP) -LW T5,003C (SP) -LUI AT,8000 -LW A2,0010 (T6) -LUI A1,0500 -ORI A1,A1,0510 ;A1=05000510: 64DD Interrupts -OR T2,A2,AT -OR A2,T2,R0 ;A2= 80000000 | org -JAL 70020D40 ;store value A2 to offset A1 using BSD hardware entry A0 -LW A0,0014 (T5) ;A0=T5+14: BSD hardware entry -LW T7,002C (SP) -ADDIU A1,SP,0038 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,000C (T7) -LW T8,003C (SP) -OR A2,R0,R0 -LW A0,0004 (T8) -JAL 7000DF10 -OR A1,T8,R0 -LW T0,0028 (SP) -ADDIU AT,R0,0001 -BNE T0,AT,7001E7A8 -NOP -LW T4,003C (SP) -LW T9,0014 (T4) -LW T1,002C (T9) -BNE T1,R0,7001E7A8 -NOP -BEQ R0,R0,7001E754 -SW R0,0028 (SP) -LW T3,002C (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7000DF10 -LW A0,0010 (T3) -LW T5,003C (SP) -ADDIU AT,R0,0001 -LW T6,0014 (T5) -LHU T2,001A (T6) -BNE T2,AT,7001E630 -NOP -JAL 70010AD0 ;set priority of current thread to 2, then update, insert, and execute -NOP -BEQ R0,R0,7001E630 -NOP -LW T7,003C (SP) -LHU T8,0000 (T7) -ADDIU T0,T8,FFF6 -SLTIU AT,T0,0007 -BEQ AT,R0,7001E940 -NOP -SLL T0,T0,0x2 -LUI AT,8003 -ADDU AT,AT,T0 -LW T0,9CF0 (AT) ;T0=80029CF0+offset: p->handler -JR T0 -NOP -LW T4,002C (SP) -ADDIU A1,SP,0034 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0010 (T4) -LW T9,003C (SP) -LW T1,002C (SP) -OR A0,R0,R0 -LW A1,000C (T9) -LW A2,0008 (T9) -LW A3,0010 (T9) -LW T9,0014 (T1) -JALR RA,T9 -NOP -BEQ R0,R0,7001E948 -SW V0,0030 (SP) -LW T3,002C (SP) -ADDIU A1,SP,0034 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0010 (T3) -LW T6,002C (SP) -LW T5,003C (SP) -ADDIU A0,R0,0001 -LW T9,0014 (T6) -LW A1,000C (T5) -LW A2,0008 (T5) -JALR RA,T9 -LW A3,0010 (T5) -BEQ R0,R0,7001E948 -SW V0,0030 (SP) -LW T2,002C (SP) -ADDIU A1,SP,0034 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0010 (T2) -LW T7,003C (SP) -LW T0,002C (SP) -OR A1,R0,R0 -LW T8,0010 (T7) -LW A0,0014 (T7) -LW A2,000C (T7) -LW A3,0008 (T7) -SW T8,0010 (SP) -LW T9,0018 (T0) -JALR RA,T9 -NOP -BEQ R0,R0,7001E948 -SW V0,0030 (SP) -LW T4,002C (SP) -ADDIU A1,SP,0034 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0010 (T4) -LW T1,003C (SP) -LW T5,002C (SP) -ADDIU A1,R0,0001 -LW T3,0010 (T1) -LW A0,0014 (T1) -LW A2,000C (T1) -LW A3,0008 (T1) -SW T3,0010 (SP) -LW T9,0018 (T5) -JALR RA,T9 -NOP -BEQ R0,R0,7001E948 -SW V0,0030 (SP) -LW T6,003C (SP) -OR A2,R0,R0 -LW A0,0004 (T6) -JAL 7000DF10 -OR A1,T6,R0 -ADDIU T2,R0,FFFF -BEQ R0,R0,7001E948 -SW T2,0030 (SP) -ADDIU T7,R0,FFFF -SW T7,0030 (SP) -LW T8,0030 (SP) -BNE T8,R0,7001E630 -NOP -LW T0,002C (SP) -ADDIU A1,SP,0038 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,000C (T0) -LW T4,003C (SP) -OR A2,R0,R0 -LW A0,0004 (T4) -JAL 7000DF10 -OR A1,T4,R0 -LW T1,002C (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7000DF10 -LW A0,0010 (T1) -BEQ R0,R0,7001E630 -NOP -NOP -NOP -NOP -NOP -NOP -NOP -LW RA,001C (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -7001E9C0 -ADDIU SP,SP,FFF0 -SW R0,0008 (SP) -SW A0,0004 (SP) -BLEZ A1,7001EA10 -SW R0,000C (SP) -LW T7,0004 (SP) -LW T6,0008 (SP) -LW T3,000C (SP) -LBU T8,0000 (T7) -ADDIU T0,T7,0001 -ADDIU T4,T3,0001 -ADDU T9,T6,T8 -SW T9,0008 (SP) -LW T1,0008 (SP) -SLT AT,T4,A1 -SW T4,000C (SP) -ANDI T2,T1,FFFF -SW T0,0004 (SP) -BNE AT,R0,7001E9D4 -SW T2,0008 (SP) -LHU V0,000A (SP) -JR RA -ADDIU SP,SP,0010 - -7001EA1C -ADDIU SP,SP,FFF8 -SH R0,0006 (SP) -SH R0,0000 (A2) -LHU T6,0000 (A2) -SH T6,0000 (A1) -SW R0,0000 (SP) -LW T7,0000 (SP) -ADDU T8,A0,T7 -LHU T9,0000 (T8) -SH T9,0006 (SP) -LHU T0,0000 (A1) -ADDU T1,T0,T9 -SH T1,0000 (A1) -LHU T3,0006 (SP) -LHU T2,0000 (A2) -NOR T4,T3,R0 -ADDU T5,T2,T4 -SH T5,0000 (A2) -LW T6,0000 (SP) -ADDIU T7,T6,0002 -SLTIU AT,T7,001C -BNE AT,R0,7001EA34 -SW T7,0000 (SP) -OR V0,R0,R0 -JR RA -ADDIU SP,SP,0008 - -7001EA84 -ADDIU SP,SP,FF88 -SW A0,0078 (SP) -LW T6,0078 (SP) -SW RA,001C (SP) -SW A1,007C (SP) -SW A2,0080 (SP) -SW R0,0074 (SP) -SB R0,0033 (SP) -LBU T7,0065 (T6) -BEQ T7,R0,7001EAD4 -NOP -SB R0,0065 (T6) -JAL 7001F6AC -LW A0,0078 (SP) -SW V0,0074 (SP) -LW T8,0074 (SP) -BEQ T8,R0,7001EAD4 -NOP -BEQ R0,R0,7001EE8C -OR V0,T8,R0 -LW T0,0080 (SP) -ADDIU T9,R0,FFFF -JAL 7000D8E0 ;V0=Count -SW T9,0000 (T0) -LW T1,0080 (SP) -SW V0,0004 (T1) -LW T2,007C (SP) -LW T3,0080 (SP) -LW T4,0008 (T2) -LW T5,000C (T2) -SW T4,0008 (T3) -SW T5,000C (T3) -LW T7,007C (SP) -LW T8,0080 (SP) -LW T6,0010 (T7) -LW T7,0014 (T7) -SW T6,0010 (T8) -SW T7,0014 (T8) -SW R0,0028 (SP) -LW T9,0028 (SP) -LW T0,0078 (SP) -SB T9,0065 (T0) -JAL 7001F6AC -LW A0,0078 (SP) -SW V0,0074 (SP) -LW T1,0074 (SP) -BEQ T1,R0,7001EB4C -NOP -BEQ R0,R0,7001EE8C -OR V0,T1,R0 -LW T2,0078 (SP) -OR A2,R0,R0 -ADDIU A3,SP,0054 -LW A0,0004 (T2) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T2) -SW V0,0074 (SP) -LW T4,0074 (SP) -BEQ T4,R0,7001EB7C -NOP -BEQ R0,R0,7001EE8C -OR V0,T4,R0 -LW T5,0028 (SP) -ADDIU T6,SP,0054 -ADDIU T7,R0,0001 -ORI T3,T5,0080 -SB T3,0000 (T6) -SW T7,002C (SP) -LW T8,002C (SP) -ADDIU T9,SP,0054 -ADDU T0,T8,T9 -LBU T1,0000 (T0) -NOR T2,T1,R0 -SB T2,0000 (T0) -LW T4,002C (SP) -ADDIU T5,T4,0001 -SLTI AT,T5,0020 -BNE AT,R0,7001EB94 -SW T5,002C (SP) -LW T3,0078 (SP) -OR A2,R0,R0 -ADDIU A3,SP,0054 -LW A0,0004 (T3) -LW A1,0008 (T3) -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -SW R0,0010 (SP) -SW V0,0074 (SP) -LW T6,0074 (SP) -BEQ T6,R0,7001EBF4 -NOP -BEQ R0,R0,7001EE8C -OR V0,T6,R0 -LW T7,0078 (SP) -OR A2,R0,R0 -ADDIU A3,SP,0034 -LW A0,0004 (T7) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T7) -SW V0,0074 (SP) -LW T8,0074 (SP) -BEQ T8,R0,7001EC24 -NOP -BEQ R0,R0,7001EE8C -OR V0,T8,R0 -SW R0,002C (SP) -LW T9,002C (SP) -ADDU T1,SP,T9 -ADDU T2,SP,T9 -LBU T2,0034 (T2) -LBU T1,0054 (T1) -BNE T1,T2,7001EC58 -NOP -LW T0,002C (SP) -ADDIU T4,T0,0001 -SLTI AT,T4,0020 -BNE AT,R0,7001EC28 -SW T4,002C (SP) -LW T5,002C (SP) -ADDIU AT,R0,0020 -BNE T5,AT,7001ECFC -NOP -LW T3,0028 (SP) -BLEZ T3,7001ECE0 -NOP -LW T6,0078 (SP) -SB R0,0065 (T6) -JAL 7001F6AC -LW A0,0078 (SP) -SW V0,0074 (SP) -LW T7,0074 (SP) -BEQ T7,R0,7001EC9C -NOP -BEQ R0,R0,7001EE8C -OR V0,T7,R0 -LW T8,0078 (SP) -OR A2,R0,R0 -ADDIU A3,SP,0054 -LW A0,0004 (T8) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T8) -SW V0,0074 (SP) -LW T9,0074 (SP) -BEQ T9,R0,7001ECCC -NOP -BEQ R0,R0,7001EE8C -OR V0,T9,R0 -ADDIU T1,SP,0054 -LBU T2,0000 (T1) -ADDIU AT,R0,0080 -BNE T2,AT,7001ECFC -NOP -LW T0,0028 (SP) -ADDIU T4,T0,0001 -SW T4,0028 (SP) -LW T5,0028 (SP) -SLTI AT,T5,003E -BNE AT,R0,7001EB20 -NOP -LW T3,0078 (SP) -SB R0,0065 (T3) -JAL 7001F6AC -LW A0,0078 (SP) -SW V0,0074 (SP) -LW T6,0074 (SP) -BEQ T6,R0,7001ED24 -NOP -BEQ R0,R0,7001EE8C -OR V0,T6,R0 -LW T7,0028 (SP) -BLEZ T7,7001ED3C -NOP -ADDIU T8,R0,0001 -BEQ R0,R0,7001ED40 -SB T8,0033 (SP) -SB R0,0033 (SP) -LW T9,007C (SP) -LBU T0,0033 (SP) -LW T5,0080 (SP) -LHU T1,0018 (T9) -ANDI T2,T1,FFFE -OR T4,T2,T0 -SH T4,0018 (T5) -LW T6,0080 (SP) -LW T3,0028 (SP) -SB T3,001A (T6) -LW T7,007C (SP) -LW T9,0080 (SP) -LBU T8,001B (T7) -SB T8,001B (T9) -LW T1,0080 (SP) -OR A0,T1,R0 -ADDIU A1,T1,001C -JAL 7001EA1C -ADDIU A2,T1,001E -ADDIU T2,R0,0001 -ADDIU T0,SP,0020 -SH T2,0000 (T0) -ADDIU T4,R0,0003 -ADDIU T5,SP,0020 -SH T4,0002 (T5) -ADDIU T3,R0,0004 -ADDIU T6,SP,0020 -SH T3,0004 (T6) -ADDIU T7,R0,0006 -ADDIU T8,SP,0020 -SH T7,0006 (T8) -SW R0,002C (SP) -LW T1,002C (SP) -LW T9,0078 (SP) -ADDIU T0,R0,0001 -SLL T2,T1,0x1 -ADDU A2,SP,T2 -LHU A2,0020 (A2) -LW A0,0004 (T9) -LW A1,0008 (T9) -SW T0,0010 (SP) -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -LW A3,0080 (SP) -SW V0,0074 (SP) -LW T4,0074 (SP) -BEQ T4,R0,7001EE04 -NOP -BEQ R0,R0,7001EE8C -OR V0,T4,R0 -LW T5,002C (SP) -ADDIU T3,T5,0001 -SLTI AT,T3,0004 -BNE AT,R0,7001EDC0 -SW T3,002C (SP) -LW T6,0078 (SP) -ADDIU A2,R0,0001 -ADDIU A3,SP,0054 -LW A0,0004 (T6) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T6) -SW V0,0074 (SP) -LW T7,0074 (SP) -BEQ T7,R0,7001EE48 -NOP -BEQ R0,R0,7001EE8C -OR V0,T7,R0 -SW R0,002C (SP) -LW T9,002C (SP) -LW T8,0080 (SP) -ADDU T0,SP,T9 -ADDU T1,T8,T9 -LBU T2,0000 (T1) -LBU T0,0054 (T0) -BEQ T2,T0,7001EE74 -NOP -BEQ R0,R0,7001EE8C -ADDIU V0,R0,000A -LW T4,002C (SP) -ADDIU T5,T4,0001 -SLTI AT,T5,0020 -BNE AT,R0,7001EE4C -SW T5,002C (SP) -OR V0,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0078 -JR RA -NOP - -7001EE9C -ADDIU SP,SP,FFC8 -SW A0,0038 (SP) -LW T6,0038 (SP) -SW RA,001C (SP) -SW A1,003C (SP) -SW R0,002C (SP) -LBU T7,0065 (T6) -BEQ T7,R0,7001EEE4 -NOP -SB R0,0065 (T6) -JAL 7001F6AC -LW A0,0038 (SP) -SW V0,002C (SP) -LW T8,002C (SP) -BEQ T8,R0,7001EEE4 -NOP -BEQ R0,R0,7001F024 -OR V0,T8,R0 -ADDIU T9,R0,0001 -ADDIU T0,SP,0030 -SH T9,0000 (T0) -ADDIU T1,R0,0003 -ADDIU T2,SP,0030 -SH T1,0002 (T2) -ADDIU T3,R0,0004 -ADDIU T4,SP,0030 -SH T3,0004 (T4) -ADDIU T5,R0,0006 -ADDIU T7,SP,0030 -SH T5,0006 (T7) -ADDIU T6,R0,0001 -SW T6,0024 (SP) -LW T9,0024 (SP) -LW T8,0038 (SP) -LW A3,003C (SP) -SLL T0,T9,0x1 -ADDU A2,SP,T0 -LHU A2,0030 (A2) -LW A0,0004 (T8) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T8) -SW V0,002C (SP) -LW T1,002C (SP) -BEQ T1,R0,7001EF58 -NOP -BEQ R0,R0,7001F024 -OR V0,T1,R0 -LW A0,003C (SP) -ADDIU A1,SP,002A -JAL 7001EA1C -ADDIU A2,SP,0028 -LW T2,003C (SP) -LHU T4,002A (SP) -LHU T3,001C (T2) -BNE T3,T4,7001EF8C -NOP -LHU T5,001E (T2) -LHU T7,0028 (SP) -BEQ T5,T7,7001EFA0 -NOP -LW T6,0024 (SP) -ADDIU T8,T6,0001 -SLTI AT,T8,0004 -BNE AT,R0,7001EF1C -SW T8,0024 (SP) -LW T9,0024 (SP) -ADDIU AT,R0,0004 -BNE T9,AT,7001EFB8 -NOP -BEQ R0,R0,7001F024 -ADDIU V0,R0,000A -SW R0,0020 (SP) -LW T0,0020 (SP) -LW T1,0024 (SP) -BEQ T0,T1,7001F00C -NOP -LW T3,0038 (SP) -SLL T4,T0,0x1 -ADDU A2,SP,T4 -LHU A2,0030 (A2) -ADDIU T2,R0,0001 -LW A0,0004 (T3) -LW A1,0008 (T3) -SW T2,0010 (SP) -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -LW A3,003C (SP) -SW V0,002C (SP) -LW T5,002C (SP) -BEQ T5,R0,7001F00C -NOP -BEQ R0,R0,7001F024 -OR V0,T5,R0 -LW T7,0020 (SP) -ADDIU T6,T7,0001 -SLTI AT,T6,0004 -BNE AT,R0,7001EFBC -SW T6,0020 (SP) -OR V0,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7001F034 -ADDIU SP,SP,FF98 -SW A0,0068 (SP) -LW T6,0068 (SP) -SW RA,0014 (SP) -LBU T7,0065 (T6) -BEQ T7,R0,7001F074 -NOP -SB R0,0065 (T6) -JAL 7001F6AC -LW A0,0068 (SP) -SW V0,001C (SP) -LW T8,001C (SP) -BEQ T8,R0,7001F074 -NOP -BEQ R0,R0,7001F280 -OR V0,T8,R0 -LW T9,0068 (SP) -ADDIU A2,R0,0001 -ADDIU A3,SP,0040 -LW A0,0004 (T9) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T9) -SW V0,001C (SP) -LW T0,001C (SP) -BEQ T0,R0,7001F0A4 -NOP -BEQ R0,R0,7001F280 -OR V0,T0,R0 -ADDIU A0,SP,0040 -ADDIU A1,SP,0062 -JAL 7001EA1C -ADDIU A2,SP,0060 -ADDIU T1,SP,0040 -SW T1,0018 (SP) -LHU T2,001C (T1) -LHU T3,0062 (SP) -BNE T2,T3,7001F0DC -NOP -LHU T4,001E (T1) -LHU T5,0060 (SP) -BEQ T4,T5,7001F144 -NOP -LW A0,0068 (SP) -JAL 7001EE9C -LW A1,0018 (SP) -SW V0,001C (SP) -LW T7,001C (SP) -ADDIU AT,R0,000A -BNE T7,AT,7001F130 -NOP -LW A0,0068 (SP) -LW A1,0018 (SP) -JAL 7001EA84 -ADDIU A2,SP,0020 -SW V0,001C (SP) -LW T6,001C (SP) -BEQ T6,R0,7001F124 -NOP -BEQ R0,R0,7001F280 -OR V0,T6,R0 -ADDIU T8,SP,0020 -BEQ R0,R0,7001F144 -SW T8,0018 (SP) -LW T9,001C (SP) -BEQ T9,R0,7001F144 -NOP -BEQ R0,R0,7001F280 -OR V0,T9,R0 -LW T0,0018 (SP) -LHU T2,0018 (T0) -ANDI T3,T2,0001 -BNE T3,R0,7001F1A0 -NOP -LW A0,0068 (SP) -OR A1,T0,R0 -JAL 7001EA84 -ADDIU A2,SP,0020 -SW V0,001C (SP) -LW T1,001C (SP) -BEQ T1,R0,7001F180 -NOP -BEQ R0,R0,7001F280 -OR V0,T1,R0 -ADDIU T4,SP,0020 -SW T4,0018 (SP) -LHU T5,0018 (T4) -ANDI T7,T5,0001 -BNE T7,R0,7001F1A0 -NOP -BEQ R0,R0,7001F280 -ADDIU V0,R0,000B -SW R0,0064 (SP) -LW T6,0018 (SP) -LW T8,0064 (SP) -LW T3,0068 (SP) -ADDU T9,T6,T8 -LBU T2,0000 (T9) -ADDU T0,T3,T8 -SB T2,000C (T0) -LW T1,0064 (SP) -ADDIU T4,T1,0001 -SLTI AT,T4,0020 -BNE AT,R0,7001F1A4 -SW T4,0064 (SP) -LW T5,0018 (SP) -LW T6,0068 (SP) -ADDIU A2,R0,0007 -LBU T7,001B (T5) -ADDIU T5,R0,0010 -SW T7,004C (T6) -LW T9,0018 (SP) -LW T8,0068 (SP) -ADDIU T6,R0,0008 -LBU T3,001A (T9) -SB T3,0064 (T8) -LW T2,0068 (SP) -LBU T0,0064 (T2) -SLL T1,T0,0x1 -ADDIU T4,T1,0003 -SW T4,0060 (T2) -LW T7,0068 (SP) -SW T5,0050 (T7) -LW T9,0068 (SP) -SW T6,0054 (T9) -LW T3,0068 (SP) -LBU T8,0064 (T3) -SLL T0,T8,0x3 -ADDIU T1,T0,0008 -SW T1,0058 (T3) -LW T4,0068 (SP) -LBU T5,0064 (T4) -LW T2,0058 (T4) -SLL T7,T5,0x3 -ADDU T6,T2,T7 -SW T6,005C (T4) -LW T9,0068 (SP) -LW A0,0004 (T9) -LW A1,0008 (T9) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -ADDIU A3,T9,002C -SW V0,001C (SP) -LW T8,001C (SP) -BEQ T8,R0,7001F27C -NOP -BEQ R0,R0,7001F280 -OR V0,T8,R0 -OR V0,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0068 -JR RA -NOP - -7001F290 -ADDIU SP,SP,FFC0 -SW A0,0040 (SP) -LW T6,0040 (SP) -SW RA,0014 (SP) -LBU T7,0065 (T6) -BEQ T7,R0,7001F2D0 -NOP -SB R0,0065 (T6) -JAL 7001F6AC -LW A0,0040 (SP) -SW V0,0018 (SP) -LW T8,0018 (SP) -BEQ T8,R0,7001F2D0 -NOP -BEQ R0,R0,7001F37C -OR V0,T8,R0 -LW T9,0040 (SP) -ADDIU A2,R0,0001 -ADDIU A3,SP,001C -LW A0,0004 (T9) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T9) -SW V0,0018 (SP) -LW T0,0018 (SP) -BEQ T0,R0,7001F338 -ADDIU AT,R0,0002 -BEQ T0,AT,7001F308 -NOP -BEQ R0,R0,7001F37C -OR V0,T0,R0 -LW T1,0040 (SP) -ADDIU A2,R0,0001 -ADDIU A3,SP,001C -LW A0,0004 (T1) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A1,0008 (T1) -SW V0,0018 (SP) -LW T2,0018 (SP) -BEQ T2,R0,7001F338 -NOP -BEQ R0,R0,7001F37C -OR V0,T2,R0 -SW R0,003C (SP) -LW T3,003C (SP) -LW T5,0040 (SP) -ADDU T4,SP,T3 -ADDU T7,T5,T3 -LBU T6,000C (T7) -LBU T4,001C (T4) -BEQ T4,T6,7001F364 -NOP -BEQ R0,R0,7001F37C -ADDIU V0,R0,0002 -LW T8,003C (SP) -ADDIU T9,T8,0001 -SLTI AT,T9,0020 -BNE AT,R0,7001F33C -SW T9,003C (SP) -OR V0,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -7001F38C -ADDIU SP,SP,FFC8 -SW A0,0038 (SP) -LW T6,0038 (SP) -SW RA,001C (SP) -SW A1,003C (SP) -SW A2,0040 (SP) -SW A3,0044 (SP) -LBU T7,0065 (T6) -BEQ T7,R0,7001F3D8 -NOP -SB R0,0065 (T6) -JAL 7001F6AC -LW A0,0038 (SP) -SW V0,002C (SP) -LW T8,002C (SP) -BEQ T8,R0,7001F3D8 -NOP -BEQ R0,R0,7001F69C -OR V0,T8,R0 -LBU T9,0047 (SP) -BLEZ T9,7001F3F0 -NOP -ADDIU T0,R0,0001 -BEQ R0,R0,7001F3FC -SW T0,0028 (SP) -LW T1,0038 (SP) -LW T2,0060 (T1) -SW T2,0028 (SP) -LBU T3,0043 (SP) -ADDIU AT,R0,0001 -BNE T3,AT,7001F438 -NOP -LW T5,0028 (SP) -LW T4,003C (SP) -SUBU A1,R0,T5 -SLL T6,A1,0x1 -OR A1,T6,R0 -SLL T7,T5,0x1 -ADDIU A1,A1,0100 -JAL 7001E9C0 -ADDU A0,T4,T7 -LW T8,003C (SP) -SB V0,0001 (T8) -SW R0,0030 (SP) -LW T0,0030 (SP) -LW T9,003C (SP) -LBU T3,0043 (SP) -SLL T1,T0,0x5 -ADDIU AT,R0,0001 -ADDU T2,T9,T1 -BNE T3,AT,7001F4C4 -SW T2,0024 (SP) -LW T4,0038 (SP) -LBU T5,0047 (SP) -OR A3,T2,R0 -LW T7,0054 (T4) -SLL T6,T5,0x3 -LW A0,0004 (T4) -LW A1,0008 (T4) -ADDU T8,T7,T6 -ADDU A2,T8,T0 -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -SW R0,0010 (SP) -LW T9,0038 (SP) -LBU T3,0047 (SP) -SW V0,002C (SP) -LW T1,0058 (T9) -LW T7,0030 (SP) -SLL T4,T3,0x3 -LW A1,0008 (T9) -LW A0,0004 (T9) -ADDU T5,T1,T4 -SW R0,0010 (SP) -LW A3,0024 (SP) -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -ADDU A2,T5,T7 -BEQ R0,R0,7001F4F4 -SW V0,002C (SP) -LW T6,0038 (SP) -LBU T0,0047 (SP) -LW T3,0030 (SP) -LW T8,0054 (T6) -SLL T2,T0,0x3 -LW A3,0024 (SP) -ADDU T9,T8,T2 -LW A0,0004 (T6) -LW A1,0008 (T6) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -ADDU A2,T9,T3 -SW V0,002C (SP) -LW T1,002C (SP) -BEQ T1,R0,7001F508 -NOP -BEQ R0,R0,7001F69C -OR V0,T1,R0 -LW T4,0030 (SP) -ADDIU T5,T4,0001 -SLTI AT,T5,0008 -BNE AT,R0,7001F43C -SW T5,0030 (SP) -LBU T7,0043 (SP) -BNE T7,R0,7001F698 -NOP -LW T0,0028 (SP) -LW T6,003C (SP) -SUBU A1,R0,T0 -SLL T2,A1,0x1 -OR A1,T2,R0 -SLL T8,T0,0x1 -ADDIU A1,A1,0100 -JAL 7001E9C0 -ADDU A0,T6,T8 -LW T9,003C (SP) -SB V0,0037 (SP) -LBU T1,0037 (SP) -LBU T3,0001 (T9) -BEQ T3,T1,7001F63C -NOP -SW R0,0030 (SP) -LW T5,0030 (SP) -LW T4,003C (SP) -LW T8,0038 (SP) -SLL T7,T5,0x5 -ADDU T6,T4,T7 -LBU T2,0047 (SP) -SW T6,0024 (SP) -LW T0,0058 (T8) -SLL T9,T2,0x3 -OR A3,T6,R0 -ADDU T3,T0,T9 -ADDU A2,T3,T5 -LW A1,0008 (T8) -JAL 700164B0 ;reads block A2 from controller A1 to @A3 -LW A0,0004 (T8) -LW T1,0030 (SP) -SW V0,002C (SP) -ADDIU T4,T1,0001 -SLTI AT,T4,0008 -BNE AT,R0,7001F568 -SW T4,0030 (SP) -LW T7,003C (SP) -LBU T2,0037 (SP) -LBU T8,0001 (T7) -BEQ T8,T2,7001F5D8 -NOP -BEQ R0,R0,7001F69C -ADDIU V0,R0,0003 -SW R0,0030 (SP) -LW T9,0030 (SP) -LW T0,003C (SP) -LW T6,0038 (SP) -SLL T3,T9,0x5 -ADDU T5,T0,T3 -LBU T4,0047 (SP) -SW T5,0024 (SP) -LW T1,0054 (T6) -SLL T7,T4,0x3 -LW A1,0008 (T6) -LW A0,0004 (T6) -ADDU T8,T1,T7 -SW R0,0010 (SP) -OR A3,T5,R0 -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -ADDU A2,T8,T9 -LW T2,0030 (SP) -SW V0,002C (SP) -ADDIU T0,T2,0001 -SLTI AT,T0,0008 -BNE AT,R0,7001F5DC -SW T0,0030 (SP) -BEQ R0,R0,7001F698 -NOP -SW R0,0030 (SP) -LW T6,0030 (SP) -LW T3,003C (SP) -LW T7,0038 (SP) -SLL T4,T6,0x5 -ADDU T1,T3,T4 -LBU T9,0047 (SP) -SW T1,0024 (SP) -LW T8,0058 (T7) -SLL T5,T9,0x3 -LW A1,0008 (T7) -LW A0,0004 (T7) -ADDU T2,T8,T5 -SW R0,0010 (SP) -OR A3,T1,R0 -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -ADDU A2,T2,T6 -LW T0,0030 (SP) -SW V0,002C (SP) -ADDIU T3,T0,0001 -SLTI AT,T3,0008 -BNE AT,R0,7001F640 -SW T3,0030 (SP) -OR V0,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7001F6AC -ADDIU SP,SP,FFB8 -SW RA,001C (SP) -SW A0,0048 (SP) -SW R0,0020 (SP) -SW R0,0024 (SP) -LW T6,0048 (SP) -LW T8,0024 (SP) -LBU T7,0065 (T6) -ADDU T9,SP,T8 -SB T7,0028 (T9) -LW T0,0024 (SP) -ADDIU T1,T0,0001 -SLTI AT,T1,0020 -BNE AT,R0,7001F6C0 -SW T1,0024 (SP) -LW T2,0048 (SP) -ADDIU A2,R0,0400 -ADDIU A3,SP,0028 -LW A0,0004 (T2) -LW A1,0008 (T2) -JAL 70016100 ;sends data A3 to controller slot A1 at address A2, returning status -SW R0,0010 (SP) -LW RA,001C (SP) -SW V0,0020 (SP) -LW V0,0020 (SP) -JR RA -ADDIU SP,SP,0048 - -7001F720 -LUI T6,A480 -LW A0,0018 (T6) -ADDIU SP,SP,FFF8 -ANDI T7,A0,0003 -BEQ T7,R0,7001F740 -NOP -BEQ R0,R0,7001F744 -ADDIU V0,R0,0001 -OR V0,R0,R0 -JR RA -ADDIU SP,SP,0008 - -7001F750 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LWC1 F2,0000 (A0) -LWC1 F14,0000 (A1) -LWC1 F0,0000 (A2) -MUL.S F4,F2,F2 -SW A2,0020 (SP) -SW A1,001C (SP) -MUL.S F6,F14,F14 -SW A0,0018 (SP) -MUL.S F10,F0,F0 -ADD.S F8,F4,F6 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F10,F8 -LUI AT,3F80 -MTC1 AT,F16 -LW A0,0018 (SP) -LW A1,001C (SP) -DIV.S F2,F16,F0 -LWC1 F18,0000 (A0) -LW A2,0020 (SP) -MUL.S F4,F18,F2 -SWC1 F4,0000 (A0) -LWC1 F6,0000 (A1) -MUL.S F10,F6,F2 -SWC1 F10,0000 (A1) -LWC1 F8,0000 (A2) -MUL.S F16,F8,F2 -SWC1 F16,0000 (A2) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7001F7E0 203E0 F0= square root of F12 -JR RA -SQRT.S F0,F12 - -7001F7F0 203F0 sets PI Domain 2 hardware entry for 64DD; V0=p->entry (80069000) -BSD hardware entry format: - 0x0 4 p->previous read settings? - 0x4 1 type: 0-cart, 2-disk, 8-flash - 0x5 1 Latency - 0x6 1 Page Size - 0x7 1 Release Duration - 0x8 1 Pulse Width - 0x9 1 domain: 0-dom1, 1-dom2 - 0xA 2 RESERVED - 0xC 4 p->hardware -ADDIU T6,R0,0002 -LUI AT,8007 -SB T6,9004 (AT) ;80069004 = 2 -LUI AT,8007 -LUI T7,A500 -SW T7,900C (AT) ;8006900C = A5000000 -LUI AT,8007 -ADDIU T8,R0,0003 -SB T8,9005 (AT) ;80069005 = 3 -LUI AT,8007 -ADDIU T9,R0,0006 -SB T9,9008 (AT) ;80069008 = 6 -LUI AT,8007 -ADDIU SP,SP,FFE0 -ADDIU T0,R0,0006 -ADDIU T1,R0,0002 -SW RA,0014 (SP) -SB T0,9006 (AT) ;80069006 = 6 -SB T1,9007 (AT) ;80069007 = 2 -ADDIU T2,R0,0003 -LUI T3,A460 -SW T2,0024 (T3) ;A4600024 = 3: PI BSD Domain 2 Latency -LUI T4,8007 -LBU T4,9008 (T4) ;T4= 6 -LUI T5,A460 -LUI T6,8007 -SW T4,0028 (T5) ;A4600028 = 6: PI BSD Domain 2 Pulse Width -LBU T6,9006 (T6) ;T6= 6 -LUI T7,A460 -LUI T8,8007 -SW T6,002C (T7) ;A460002C = 6: PI BSD Domain 2 Page Size -LBU T8,9007 (T8) ;T8= 2 -LUI A0,8007 -LUI T9,A460 -ADDIU A0,A0,9000 ;A0= 80069000 -ADDIU A0,A0,0014 -ADDIU A1,R0,0060 ;A1=60 -JAL 70017C40 ;initialize A1 bytes at A0 to zero -SW T8,0030 (T9) ;A4600030 = 2: PI BSD Domain 2 Release Duration -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -NOP -LUI T0,8002 -LW T0,77AC (T0) ;T0=800277AC: -LUI AT,8007 -LUI T1,8007 -SW T0,9000 (AT) ;T0->80069000: -LUI AT,8002 -ADDIU T1,T1,9000 -SW T1,77AC (AT) ;80069000->800277AC: -SW V0,001C (SP) -LUI AT,8007 -SW T1,9074 (AT) ;80069000->80069074: -JAL 70018610 ;A0->COP0 status -LW A0,001C (SP) ;A0= int.enabled flag -LW RA,0014 (SP) -LUI V0,8007 -ADDIU V0,V0,9000 ;V0= 80069000 -JR RA -ADDIU SP,SP,0020 - -7001F8E0 204E0 A0->COP0 Compare -MTC0 A0,Compare/DPC-Status -JR RA -NOP - -7001F8F0 204F0 - accepts: A0=p->???, A1=p->function, A2=p->function, A3=value -SW R0,0000 (A0) -SW A1,0004 (A0) -SW A2,0008 (A0) -SH R0,000C (A0) -SH R0,000E (A0) -JR RA -SW A3,0010 (A0) - -7001F910 -MTC1 A1,F6 -LWC1 F4,0010 (A0) -LWC1 F16,0014 (A0) -CVT.S.W F8,F6 -LUI AT,4000 -MTC1 AT,F5 -LUI AT,4010 -MUL.S F10,F4,F8 -MTC1 R0,F4 -ADD.S F18,F16,F10 -SWC1 F18,0014 (A0) -LWC1 F6,0014 (A0) -CVT.D.S F0,F6 -MTC1 R0,F6 -C.LT.D F4,F0 -NOP -BC1FL 7001F978 -CVT.S.D F18,F0 -MTC1 AT,F9 -MTC1 R0,F8 -NOP -SUB.D F16,F0,F8 -CVT.S.D F10,F16 -BEQ R0,R0,7001F97C -SWC1 F10,0014 (A0) -CVT.S.D F18,F0 -SWC1 F18,0014 (A0) -LWC1 F2,0014 (A0) -LUI AT,3FF0 -MTC1 AT,F9 -C.LT.S F2,F6 -MTC1 R0,F8 -BC1FL 7001F9A0 -CVT.D.S F4,F2 -NEG.S F2,F2 -CVT.D.S F4,F2 -LWC1 F10,001C (A0) -SUB.D F16,F4,F8 -CVT.S.D F2,F16 -MUL.S F0,F10,F2 -JR RA -NOP - -7001F9B8 -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -ANDI V0,A1,FFFF -SLL T8,A2,0x1 -ANDI T9,T8,FFFF -SLL T7,V0,0x10 -LUI AT,0800 -LUI T2,0B00 -OR T6,V0,AT -OR T1,T7,T9 -ORI T2,T2,0020 -OR T0,A0,R0 -SW T1,0004 (A3) -SW T6,0000 (A3) -SW T2,0008 (A3) -SW T0,0028 (SP) -SW A3,0034 (SP) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -ADDIU A0,A0,0008 -LW A3,0034 (SP) -LW T0,0028 (SP) -LUI AT,0E00 -ADDIU V1,A3,0010 -ADDIU T3,V1,0008 -SW V0,000C (A3) -SW T3,0024 (SP) -LW T4,002C (T0) -LH T7,0002 (T0) -ANDI T5,T4,00FF -SLL T6,T5,0x10 -OR T8,T6,AT -ANDI T9,T7,FFFF -OR T1,T8,T9 -SW T1,0000 (V1) -LW A0,0028 (T0) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -SW V1,0018 (SP) -LW A1,0018 (SP) -LW T0,0028 (SP) -SW V0,0004 (A1) -SW R0,002C (T0) -LW RA,0014 (SP) -LW V0,0024 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7001FA70 -ADDIU SP,SP,FFA0 -SW RA,001C (SP) -SW S0,0018 (SP) -LW V1,001C (A0) -LW V0,0014 (A0) -LW T0,0070 (SP) -SLL T6,V1,0x1 -SLTU AT,A1,V0 -OR T2,A0,R0 -OR T5,A2,R0 -OR T3,A3,R0 -BEQ AT,R0,7001FAA8 -ADDU T1,V0,T6 -ADDU A1,A1,T6 -SLL A2,T3,0x1 -ADDU A3,A2,A1 -SLTU AT,T1,A3 -BEQ AT,R0,7001FBA8 -ADDIU S0,T0,0008 -SUBU T3,T1,A1 -SRA T8,T3,0x1 -LUI T7,0800 -SW T7,0000 (T0) -SLL T3,T8,0x1 -ANDI T8,T3,FFFF -SLL T7,T5,0x10 -OR T9,T7,T8 -ADDIU S0,T0,0008 -SW T9,0004 (T0) -OR T4,S0,R0 -LUI T6,0600 -SW T6,0000 (T4) -SW T5,0068 (SP) -SW T4,0044 (SP) -SW T3,0024 (SP) -SW T2,0060 (SP) -SW T1,004C (SP) -SW A3,0028 (SP) -SW A2,002C (SP) -ADDIU S0,S0,0008 -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,A1,R0 -LW T4,0044 (SP) -LW A3,0028 (SP) -LW T1,004C (SP) -LW T3,0024 (SP) -LW T5,0068 (SP) -LW T2,0060 (SP) -OR V1,S0,R0 -LUI T7,0800 -SW V0,0004 (T4) -SW T7,0000 (V1) -SUBU T7,A3,T1 -ADDU T9,T3,T5 -SLL T6,T9,0x10 -SRA T8,T7,0x1 -SLL T9,T8,0x1 -ANDI T7,T9,FFFF -OR T8,T6,T7 -ADDIU S0,S0,0008 -SW T8,0004 (V1) -OR A1,S0,R0 -LUI T9,0600 -SW T9,0000 (A1) -LW A0,0014 (T2) -SW A1,003C (SP) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -ADDIU S0,S0,0008 -LW A1,003C (SP) -LW A2,002C (SP) -OR V1,S0,R0 -LUI T6,0800 -SW V0,0004 (A1) -ANDI T7,A2,FFFF -SW T7,0004 (V1) -SW T6,0000 (V1) -BEQ R0,R0,7001FBE4 -ADDIU S0,S0,0008 -LUI T8,0800 -SW T8,0000 (T0) -SLL T6,T5,0x10 -ANDI T7,A2,FFFF -OR T8,T6,T7 -SW T8,0004 (T0) -OR V1,S0,R0 -LUI T9,0600 -SW T9,0000 (V1) -SW V1,0030 (SP) -ADDIU S0,S0,0008 -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,A1,R0 -LW V1,0030 (SP) -SW V0,0004 (V1) -LW RA,001C (SP) -OR V0,S0,R0 -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0060 - -7001FBF8 -ADDIU SP,SP,FFA0 -SW RA,001C (SP) -SW S0,0018 (SP) -LW V1,001C (A0) -LW V0,0014 (A0) -LW T0,0070 (SP) -SLL T6,V1,0x1 -SLTU AT,A1,V0 -OR T2,A0,R0 -OR T5,A2,R0 -OR T3,A3,R0 -BEQ AT,R0,7001FC30 -ADDU T1,V0,T6 -ADDU A1,A1,T6 -SLL A2,T3,0x1 -ADDU A3,A2,A1 -SLTU AT,T1,A3 -BEQ AT,R0,7001FD1C -ADDIU S0,T0,0008 -ANDI T7,T5,FFFF -LUI AT,0800 -SUBU T3,T1,A1 -SRA T9,T3,0x1 -OR T8,T7,AT -SLL T6,T9,0x1 -ANDI T7,T6,FFFF -SW T8,0000 (T0) -ADDIU S0,T0,0008 -SW T7,0004 (T0) -OR T4,S0,R0 -LUI T8,0400 -SW T8,0000 (T4) -SW T5,0068 (SP) -SW T4,0044 (SP) -SW T6,0024 (SP) -SW T2,0060 (SP) -SW T1,004C (SP) -SW A3,0028 (SP) -SW A2,002C (SP) -ADDIU S0,S0,0008 -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,A1,R0 -LW T3,0024 (SP) -LW T5,0068 (SP) -LW A3,0028 (SP) -LW T1,004C (SP) -LW T4,0044 (SP) -ADDU T9,T3,T5 -ANDI T6,T9,FFFF -LUI AT,0800 -LW T2,0060 (SP) -OR T7,T6,AT -SUBU T8,A3,T1 -SRA T9,T8,0x1 -OR V1,S0,R0 -SW V0,0004 (T4) -SW T7,0000 (V1) -SLL T6,T9,0x1 -ANDI T7,T6,FFFF -ADDIU S0,S0,0008 -SW T7,0004 (V1) -OR A1,S0,R0 -LUI T8,0400 -SW T8,0000 (A1) -LW A0,0014 (T2) -SW A1,003C (SP) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -ADDIU S0,S0,0008 -LW A1,003C (SP) -LW A2,002C (SP) -SW V0,0004 (A1) -BEQ R0,R0,7001FD60 -ANDI A3,A2,FFFF -ANDI T9,T5,FFFF -LUI AT,0800 -OR T6,T9,AT -ANDI A3,A2,FFFF -SW A3,0004 (T0) -SW T6,0000 (T0) -OR V1,S0,R0 -LUI T7,0400 -SW T7,0000 (V1) -SW A3,0028 (SP) -SW V1,0034 (SP) -ADDIU S0,S0,0008 -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -OR A0,A1,R0 -LW V1,0034 (SP) -LW A3,0028 (SP) -SW V0,0004 (V1) -OR V1,S0,R0 -LUI T8,0800 -SW T8,0000 (V1) -SW A3,0004 (V1) -LW RA,001C (SP) -ADDIU V0,S0,0008 -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0060 - -7001FD84 -ADDIU SP,SP,FFA0 -SW RA,0024 (SP) -SW S1,0020 (SP) -SW S0,001C (SP) -SW A2,0068 (SP) -LW T6,0024 (A1) -OR S0,A1,R0 -OR S1,A3,R0 -BEQ T6,R0,7001FF60 -OR T2,A0,R0 -LW T7,0004 (A1) -LW T8,0000 (A1) -OR A0,A1,R0 -OR A1,A3,R0 -SUBU T9,T7,T8 -SW T9,0038 (SP) -JAL 7001F910 -SW T2,0060 (SP) -LW T4,0038 (SP) -LUI AT,4700 -MTC1 AT,F14 -MTC1 T4,F6 -LUI AT,3FF0 -MTC1 AT,F5 -CVT.S.W F8,F6 -MTC1 R0,F4 -LW A0,0060 (SP) -ADDIU A2,R0,0280 -DIV.S F10,F0,F8 -MUL.S F16,F10,F14 -TRUNC.W.S F18,F16 -MFC1 T6,F18 -NOP -MTC1 T6,F6 -NOP -CVT.S.W F8,F6 -DIV.S F10,F8,F14 -MTC1 S1,F8 -CVT.D.S F16,F10 -CVT.S.W F10,F8 -SUB.D F18,F4,F16 -CVT.S.D F2,F18 -MUL.S F4,F2,F10 -SWC1 F2,0044 (SP) -LW V0,0024 (S0) -LWC1 F6,0020 (V0) -ADD.S F12,F6,F4 -TRUNC.W.S F16,F12 -MFC1 T1,F16 -NOP -MTC1 T1,F18 -NOP -CVT.S.W F8,F18 -SUB.S F10,F12,F8 -SWC1 F10,0020 (V0) -LW T9,0018 (S0) -LW T8,0004 (S0) -LW T7,0018 (A0) -SW T1,002C (SP) -SUBU T4,T8,T9 -SUBU T5,R0,T4 -SLL T6,T5,0x1 -ADDU T0,T7,T6 -ANDI V1,T0,0007 -LW T9,0070 (SP) -SRA T8,V1,0x1 -SLL T3,T8,0x1 -SUBU A1,T0,T3 -SW T3,0028 (SP) -OR V1,T8,R0 -ADDU A3,T1,T8 -JAL 7001FBF8 -SW T9,0010 (SP) -LW T3,0028 (SP) -LUI AT,0800 -ADDIU T6,V0,0008 -ADDIU T4,T3,0280 -ANDI T5,T4,FFFF -OR T7,T5,AT -SW T7,0000 (V0) -LW T8,0068 (SP) -SLL T4,S1,0x1 -ANDI T5,T4,FFFF -SLL T9,T8,0x10 -OR T7,T9,T5 -SW T7,0004 (V0) -LUI AT,4700 -MTC1 AT,F4 -LWC1 F6,0044 (SP) -SW T6,0030 (SP) -LW T5,0024 (S0) -MUL.S F16,F6,F4 -LUI AT,0500 -LW T7,0024 (T5) -ADDIU V1,V0,0010 -ANDI T6,T7,00FF -SLL T8,T6,0x10 -TRUNC.W.S F18,F16 -MFC1 T4,F18 -NOP -ANDI T9,T4,FFFF -OR T4,T8,AT -OR T5,T4,T9 -SW T5,0008 (V0) -LW T7,0024 (S0) -LW A0,0014 (T7) -JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 -SW V1,005C (SP) -LW T6,0030 (SP) -LW T1,002C (SP) -LW V1,005C (SP) -SW V0,0004 (T6) -LW T8,0024 (S0) -SW R0,0024 (T8) -LW T4,0018 (S0) -ADDU T9,T4,T1 -SUBU T5,T9,S1 -BEQ R0,R0,7001FF90 -SW T5,0018 (S0) -LW T6,0004 (S0) -LW T7,0018 (T2) -LW T9,0070 (SP) -SUBU T8,R0,T6 -SLL T4,T8,0x1 -OR A0,T2,R0 -LW A2,0068 (SP) -OR A3,S1,R0 -ADDU A1,T7,T4 -JAL 7001FBF8 -SW T9,0010 (SP) -OR V1,V0,R0 -LW RA,0024 (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -ADDIU SP,SP,0060 -JR RA -OR V0,V1,R0 - -7001FFA8 -ADDIU V0,A1,FFFE -ANDI T6,V0,0007 -SLTIU AT,T6,0008 -BEQ AT,R0,700201B8 -LW V1,0000 (A2) -SLL T6,T6,0x2 -LUI AT,8003 -ADDU AT,AT,T6 -LW T6,9D10 (AT) ;T6=80029D10+offset: p->handler -JR T6 -NOP -LW T7,0020 (A0) -BGEZ V0,7001FFE8 -SRA T8,V0,0x3 -ADDIU AT,V0,0007 -SRA T8,AT,0x3 -SLL T9,T8,0x2 -ADDU T9,T9,T8 -SLL T9,T9,0x3 -ADDU T0,T7,T9 -SW V1,0000 (T0) -JR RA -OR V0,R0,R0 -LW T1,0020 (A0) -BGEZ V0,70020018 -SRA T2,V0,0x3 -ADDIU AT,V0,0007 -SRA T2,AT,0x3 -SLL T3,T2,0x2 -ADDU T3,T3,T2 -SLL T3,T3,0x3 -ADDU T4,T1,T3 -SW V1,0004 (T4) -JR RA -OR V0,R0,R0 -LW T5,0020 (A0) -BGEZ V0,70020048 -SRA T6,V0,0x3 -ADDIU AT,V0,0007 -SRA T6,AT,0x3 -SLL T8,T6,0x2 -ADDU T8,T8,T6 -SLL T8,T8,0x3 -ADDU T7,T5,T8 -SH V1,0008 (T7) -JR RA -OR V0,R0,R0 -LW T9,0020 (A0) -BGEZ V0,70020078 -SRA T0,V0,0x3 -ADDIU AT,V0,0007 -SRA T0,AT,0x3 -SLL T2,T0,0x2 -ADDU T2,T2,T0 -SLL T2,T2,0x3 -ADDU T1,T9,T2 -SH V1,000A (T1) -JR RA -OR V0,R0,R0 -LW T3,0020 (A0) -BGEZ V0,700200A8 -SRA T4,V0,0x3 -ADDIU AT,V0,0007 -SRA T4,AT,0x3 -SLL T6,T4,0x2 -ADDU T6,T6,T4 -SLL T6,T6,0x3 -ADDU T5,T3,T6 -SH V1,000C (T5) -JR RA -OR V0,R0,R0 -MTC1 V1,F4 -LUI AT,8003 -LWC1 F8,9D30 (AT) -CVT.S.W F6,F4 -LW T8,0020 (A0) -DIV.S F10,F6,F8 -BGEZ V0,700200EC -SRA T7,V0,0x3 -ADDIU AT,V0,0007 -SRA T7,AT,0x3 -SLL T0,T7,0x2 -ADDU T0,T0,T7 -SLL T0,T0,0x3 -ADDU T9,T8,T0 -OR V0,R0,R0 -JR RA -SWC1 F10,0010 (T9) -LW T2,0020 (A0) -BGEZ V0,7002011C -SRA T1,V0,0x3 -ADDIU AT,V0,0007 -SRA T1,AT,0x3 -SLL T4,T1,0x2 -ADDU T4,T4,T1 -SLL T4,T4,0x3 -ADDU A1,T2,T4 -LW T3,0004 (A1) -LW T6,0000 (A1) -MTC1 V1,F6 -LUI AT,41F0 -SUBU T5,T3,T6 -MTC1 T5,F16 -CVT.S.W F8,F6 -BGEZ T5,70020160 -CVT.D.W F18,F16 -MTC1 AT,F5 -MTC1 R0,F4 -NOP -ADD.D F18,F18,F4 -LUI AT,8003 -LDC1 F16,9D38 (AT) -CVT.D.S F10,F8 -OR V0,R0,R0 -DIV.D F4,F10,F16 -MUL.D F6,F18,F4 -CVT.S.D F8,F6 -JR RA -SWC1 F8,001C (A1) -LW T7,0020 (A0) -BGEZ V0,70020198 -SRA T8,V0,0x3 -ADDIU AT,V0,0007 -SRA T8,AT,0x3 -SLL T0,T8,0x2 -ADDU T0,T0,T8 -SLL T0,T0,0x3 -ADDU T9,T7,T0 -LW A1,0020 (T9) -BEQ A1,R0,700201B8 -NOP -SH V1,0000 (A1) -JR RA -OR V0,R0,R0 - -700201C0 -ADDIU AT,R0,0001 -BNE A1,AT,700201D0 -NOP -SW A2,0000 (A0) -JR RA -OR V0,R0,R0 - -700201D8 -ADDIU SP,SP,FF58 -SW S3,002C (SP) -OR S3,A0,R0 -SW RA,0044 (SP) -SW S8,0040 (SP) -SW S7,003C (SP) -SW S6,0038 (SP) -SW S5,0034 (SP) -SW S4,0030 (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -LW A0,0000 (A0) -LW T6,00B8 (SP) -SW R0,0080 (SP) -OR S6,A2,R0 -SW T6,0010 (SP) -LW T9,0004 (A0) -JALR RA,T9 -NOP -SLL S1,S6,0x1 -LUI T8,0C00 -LUI T2,06C0 -LUI T3,0C00 -LUI T4,0800 -ANDI T1,S1,FFFF -LUI T7,0800 -ORI T2,T2,06C0 -ORI T8,T8,DA83 -ORI T4,T4,06C0 -ORI T3,T3,5A82 -SW T7,0000 (V0) -SW T1,0004 (V0) -SW T8,0008 (V0) -SW T2,000C (V0) -SW T3,0010 (V0) -SW T4,0014 (V0) -LW A1,0018 (S3) -ADDIU T5,V0,0018 -OR S5,R0,R0 -ADDIU S2,R0,0140 -SW T5,0010 (SP) -SW T1,0048 (SP) -SW S1,0050 (SP) -OR A0,S3,R0 -ADDIU A2,R0,06C0 -JAL 7001FA70 -OR A3,S6,R0 -LW V1,0080 (SP) -LUI T6,0200 -ORI T6,T6,0800 -SW T6,0000 (V0) -SW S1,0004 (V0) -LBU T9,0024 (S3) -ADDIU S0,V0,0008 -OR S7,R0,R0 -BLEZL T9,70020498 -LW V1,001C (S3) -LW V0,0018 (S3) -LW T7,0020 (S3) -SLL T8,S7,0x2 -ADDU T8,T8,S7 -SLL T8,T8,0x3 -ADDU S1,T7,T8 -LW T2,0000 (S1) -LW T5,0004 (S1) -OR A0,S3,R0 -SUBU T3,R0,T2 -SLL T4,T3,0x1 -SUBU T6,R0,T5 -ADDU S4,V0,T4 -SLL T9,T6,0x1 -BNE S4,V1,70020320 -ADDU S8,V0,T9 -OR T7,S2,R0 -SLL S2,S5,0x10 -SLL S5,T7,0x10 -SRA T2,S5,0x10 -SRA T8,S2,0x10 -OR S2,T8,R0 -BEQ R0,R0,70020338 -OR S5,T2,R0 -OR A1,S4,R0 -OR A2,S5,R0 -OR A3,S6,R0 -JAL 7001FBF8 -SW S0,0010 (SP) -OR S0,V0,R0 -OR A0,S3,R0 -OR A1,S1,R0 -OR A2,S2,R0 -OR A3,S6,R0 -JAL 7001FD84 -SW S0,0010 (SP) -LH A0,0008 (S1) -OR S0,V0,R0 -LUI AT,0C00 -BEQ A0,R0,700203B0 -ANDI T4,A0,FFFF -SLL T9,S5,0x10 -ANDI T7,S2,FFFF -OR T8,T9,T7 -OR T5,T4,AT -SW T5,0000 (V0) -SW T8,0004 (V0) -LW T2,0024 (S1) -ADDIU S0,V0,0008 -BNEL T2,R0,700203B4 -LH V1,000A (S1) -LW T3,0020 (S1) -OR A0,S3,R0 -OR A1,S8,R0 -BNE T3,R0,700203B0 -OR A2,S2,R0 -OR A3,S6,R0 -JAL 7001FA70 -SW S0,0010 (SP) -OR S0,V0,R0 -LH V1,000A (S1) -OR V0,S0,R0 -LUI AT,0C00 -BEQ V1,R0,700203FC -ANDI T5,V1,FFFF -SLL T7,S2,0x10 -ANDI T8,S5,FFFF -OR T2,T7,T8 -OR T6,T5,AT -SW T6,0000 (V0) -SW T2,0004 (V0) -ADDIU S0,S0,0008 -SW S0,0010 (SP) -OR A0,S3,R0 -OR A1,S4,R0 -OR A2,S5,R0 -JAL 7001FA70 -OR A3,S6,R0 -OR S0,V0,R0 -LW A0,0020 (S1) -OR A1,S2,R0 -OR A2,S6,R0 -BEQL A0,R0,70020420 -LW T3,0024 (S1) -JAL 7001F9B8 -OR A3,S0,R0 -OR S0,V0,R0 -LW T3,0024 (S1) -OR A0,S3,R0 -OR A1,S8,R0 -BNE T3,R0,70020440 -OR A2,S2,R0 -OR A3,S6,R0 -JAL 7001FA70 -SW S0,0010 (SP) -OR S0,V0,R0 -LH V1,000C (S1) -ADDIU S7,S7,0001 -SLL T4,S7,0x10 -BEQ V1,R0,70020478 -SRA S7,T4,0x10 -OR V0,S0,R0 -ANDI T5,V1,FFFF -LUI AT,0C00 -SLL T7,S2,0x10 -ORI T8,T7,0800 -OR T6,T5,AT -SW T6,0000 (V0) -SW T8,0004 (V0) -ADDIU S0,S0,0008 -LBU T6,0024 (S3) -LW T2,0004 (S1) -LW V0,0018 (S3) -SLT AT,S7,T6 -SLL T3,T2,0x1 -BNE AT,R0,700202C4 -ADDU V1,V0,T3 -LW V1,001C (S3) -LW T9,0018 (S3) -LW T7,0050 (SP) -LW T3,0014 (S3) -SLL T2,V1,0x1 -ADDU T8,T9,T7 -ADDU T4,T3,T2 -SLTU AT,T4,T8 -BEQ AT,R0,700204C4 -SW T8,0018 (S3) -SUBU T5,T8,T2 -SW T5,0018 (S3) -LUI T6,0A00 -ORI T6,T6,0800 -OR V1,S0,R0 -SW T6,0000 (V1) -LW T9,0048 (SP) -LUI AT,06C0 -ADDIU V0,S0,0008 -OR T7,T9,AT -SW T7,0004 (V1) -LW RA,0044 (SP) -LW S8,0040 (SP) -LW S7,003C (SP) -LW S6,0038 (SP) -LW S5,0034 (SP) -LW S4,0030 (SP) -LW S3,002C (SP) -LW S2,0028 (SP) -LW S1,0024 (SP) -LW S0,0020 (SP) -JR RA -ADDIU SP,SP,00A8 - -70020520 -LW T6,0008 (A0) -SW T6,0000 (A1) -LH T7,001A (A0) -SH T7,000C (A1) -LW T8,000C (A0) -JR RA -SW T8,0004 (A1) - -7002053C -LW T6,0000 (A1) -SW T6,0008 (A0) -LH T7,000C (A1) -SH T7,001A (A0) -LW T8,0004 (A1) -JR RA -SW T8,000C (A0) - -70020558 -JR RA -LW V0,000C (A0) - -70020560 -JR RA -NOP - -70020568 -LW V1,0008 (A0) -LBU V0,0000 (V1) -ADDIU T6,V1,0001 -SW T6,0008 (A0) -ANDI T7,V0,0080 -BEQ T7,R0,700205AC -OR A1,V0,R0 -ANDI A1,V0,007F -LW V1,0008 (A0) -SLL T9,A1,0x7 -LBU V0,0000 (V1) -ADDIU T8,V1,0001 -SW T8,0008 (A0) -ANDI T6,V0,007F -ANDI T7,V0,0080 -BNE T7,R0,70020588 -ADDU A1,T9,T6 -JR RA -OR V0,A1,R0 - -700205B4 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -OR A2,A0,R0 -JAL 70020568 -OR A3,A1,R0 -LW T6,000C (A2) -LW V1,0008 (A2) -OR T1,V0,R0 -ADDU T7,T6,V0 -SW T7,000C (A2) -LBU A0,0000 (V1) -ADDIU AT,R0,00FF -ADDIU T8,V1,0001 -SW T8,0008 (A2) -OR V0,A0,R0 -BNE A0,AT,700206B0 -ANDI A1,A0,00FF -LBU V0,0000 (T8) -ADDIU T9,T8,0001 -ADDIU AT,R0,0051 -SW T9,0008 (A2) -BNE V0,AT,70020678 -OR T0,V0,R0 -ADDIU T6,R0,0003 -SH T6,0000 (A3) -SW T1,0004 (A3) -SB A1,0008 (A3) -SB T0,0009 (A3) -LW V1,0008 (A2) -LBU V0,0000 (V1) -ADDIU T7,V1,0001 -SW T7,0008 (A2) -SB V0,000A (A3) -LW V1,0008 (A2) -LBU A0,0000 (V1) -ADDIU T8,V1,0001 -SW T8,0008 (A2) -SB A0,000B (A3) -LW V1,0008 (A2) -LBU A1,0000 (V1) -ADDIU T9,V1,0001 -SW T9,0008 (A2) -SB A1,000C (A3) -LW V1,0008 (A2) -LBU A0,0000 (V1) -ADDIU T6,V1,0001 -SW T6,0008 (A2) -BEQ R0,R0,700206A8 -SB A0,000D (A3) -ADDIU AT,R0,002F -BNE V0,AT,700206A8 -ADDIU T7,R0,0004 -SH T7,0000 (A3) -SW T1,0004 (A3) -SB A1,0008 (A3) -SB T0,0009 (A3) -LW V1,0008 (A2) -LBU A0,0000 (V1) -ADDIU T8,V1,0001 -SW T8,0008 (A2) -SB A0,000A (A3) -BEQ R0,R0,70020728 -SH R0,001A (A2) -ADDIU T9,R0,0001 -ANDI T6,V0,0080 -SH T9,0000 (A3) -BEQ T6,R0,700206E4 -SW T1,0004 (A3) -SB A1,0008 (A3) -LW V1,0008 (A2) -LBU A0,0000 (V1) -ADDIU T7,V1,0001 -SW T7,0008 (A2) -SB A0,0009 (A3) -BEQ R0,R0,700206F0 -SH A1,001A (A2) -LH T8,001A (A2) -SB A0,0009 (A3) -SB T8,0008 (A3) -LBU V0,0008 (A3) -ADDIU AT,R0,00C0 -ANDI T9,V0,00F0 -BEQ T9,AT,70020724 -ADDIU AT,R0,00D0 -BEQL T9,AT,70020728 -SB R0,000A (A3) -LW V1,0008 (A2) -LBU A0,0000 (V1) -ADDIU T6,V1,0001 -SW T6,0008 (A2) -BEQ R0,R0,70020728 -SB A0,000A (A3) -SB R0,000A (A3) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70020738 -ADDIU SP,SP,FFA0 -SW S7,0030 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -OR S0,A0,R0 -OR S1,A2,R0 -OR S7,A1,R0 -SW RA,0034 (SP) -SW S6,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -BNE A2,R0,70020788 -SW S2,001C (SP) -LW T6,0004 (A0) -SH R0,000C (A1) -SW R0,0004 (A1) -SW R0,0008 (A1) -BEQ R0,R0,7002082C -SW T6,0000 (A1) -LW T7,0008 (S0) -OR V0,R0,R0 -ADDIU S3,R0,0004 -SW T7,004C (SP) -LH T8,001A (S0) -ADDIU S2,SP,0050 -SH T8,003E (SP) -LW T9,000C (S0) -SW T9,0044 (SP) -LW T0,0004 (S0) -SH R0,001A (S0) -SW R0,000C (S0) -SW T0,0008 (S0) -LW S4,0008 (S0) -LH S5,001A (S0) -OR S6,V0,R0 -OR A0,S0,R0 -JAL 700205B4 -OR A1,S2,R0 -LH T1,0050 (SP) -BNEL T1,S3,700207F4 -LW V0,000C (S0) -LW S4,0008 (S0) -LH S5,001A (S0) -BEQ R0,R0,70020800 -LW S6,000C (S0) -LW V0,000C (S0) -SLTU AT,V0,S1 -BNEL AT,R0,700207C0 -LW S4,0008 (S0) -SW S4,0000 (S7) -SH S5,000C (S7) -SW S6,0004 (S7) -LW T2,000C (S0) -SW T2,0008 (S7) -LW T3,004C (SP) -SW T3,0008 (S0) -LH T4,003E (SP) -SH T4,001A (S0) -LW T5,0044 (SP) -SW T5,000C (S0) -LW RA,0034 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -LW S6,002C (SP) -LW S7,0030 (SP) -JR RA -ADDIU SP,SP,0060 - -70020858 -MTC1 A1,F12 -LUI AT,8003 -LDC1 F6,9D50 (AT) -LH T6,0018 (A0) -CVT.D.S F4,F12 -LUI AT,41F0 -MUL.D F8,F4,F6 -MTC1 T6,F10 -MTC1 A2,F4 -CVT.D.W F16,F10 -CVT.D.W F6,F4 -MUL.D F18,F8,F16 -BGEZL A2,700208A4 -DIV.D F8,F18,F6 -MTC1 AT,F11 -MTC1 R0,F10 -NOP -ADD.D F6,F6,F10 -DIV.D F8,F18,F6 -ADDIU V0,R0,0001 -LUI AT,41E0 -CFC1 T7,F31 -CTC1 V0,F31 -NOP -CVT.W.D F16,F8 -CFC1 V0,F31 -NOP -ANDI V0,V0,0078 -BEQL V0,R0,70020924 -MFC1 V0,F16 -MTC1 AT,F17 -MTC1 R0,F16 -ADDIU V0,R0,0001 -LUI AT,8000 -SUB.D F16,F8,F16 -CTC1 V0,F31 -NOP -CVT.W.D F16,F16 -CFC1 V0,F31 -NOP -ANDI V0,V0,0078 -BNEL V0,R0,70020918 -CTC1 T7,F31 -MFC1 V0,F16 -CTC1 T7,F31 -JR RA -OR V0,V0,AT -CTC1 T7,F31 -JR RA -ADDIU V0,R0,FFFF -MFC1 V0,F16 -NOP -BLTZL V0,70020918 -CTC1 T7,F31 -CTC1 T7,F31 -JR RA -NOP - -7002093C -MTC1 A1,F4 -MTC1 A2,F8 -LUI AT,4F80 -CVT.S.W F6,F4 -BGEZ A2,70020960 -CVT.S.W F10,F8 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -LH T6,0018 (A0) -MUL.S F18,F6,F10 -LUI AT,8003 -MTC1 T6,F8 -LDC1 F10,9D58 (AT) -CVT.S.W F16,F8 -CVT.D.S F4,F18 -CVT.D.S F6,F16 -MUL.D F18,F6,F10 -DIV.D F8,F4,F18 -JR RA -CVT.S.D F0,F8 - -70020990 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW T7,0010 (A0) -LW T6,0000 (A0) -LW V0,0008 (A0) -OR A2,A0,R0 -ADDU T8,T6,T7 -SLTU AT,V0,T8 -BNE AT,R0,700209C0 -OR T0,A1,R0 -BEQ R0,R0,700209D8 -OR V0,R0,R0 -OR A3,V0,R0 -JAL 70020568 -OR A0,A2,R0 -SW V0,0000 (T0) -SW A3,0008 (A2) -ADDIU V0,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700209E8 -LW A1,0008 (A0) -LBU V1,0000 (A1) -ADDIU T7,A1,0001 -SW T7,0008 (A0) -LBU T8,0000 (T7) -SLL T6,V1,0x18 -SLL T9,T8,0x10 -OR V1,T6,T9 -ADDIU T6,T7,0001 -SW T6,0008 (A0) -LBU T7,0000 (T6) -ADDIU T9,T6,0001 -SW T9,0008 (A0) -SLL T8,T7,0x8 -LBU T6,0000 (T9) -OR V1,V1,T8 -ADDIU T7,T9,0001 -SW T7,0008 (A0) -JR RA -OR V0,V1,T6 - -70020A38 -LW A1,0008 (A0) -LBU V1,0000 (A1) -ADDIU T9,A1,0001 -SW T9,0008 (A0) -LBU T6,0000 (T9) -SLL T8,V1,0x8 -ADDIU T9,T9,0001 -OR V1,T8,T6 -SLL T7,V1,0x10 -SRA V0,T7,0x10 -JR RA -SW T9,0008 (A0) - -70020A68 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -OR A3,A0,R0 -SW A1,0000 (A0) -SW A2,0010 (A0) -SH R0,001A (A0) -SW R0,000C (A0) -JAL 700209E8 -SW A1,0008 (A0) -LUI AT,4D54 -ORI AT,AT,6864 -BNEL V0,AT,70020B34 -LW RA,0014 (SP) -JAL 700209E8 -OR A0,A3,R0 -JAL 70020A38 -OR A0,A3,R0 -BNEL V0,R0,70020B34 -LW RA,0014 (SP) -JAL 70020A38 -OR A0,A3,R0 -ADDIU AT,R0,0001 -BNEL V0,AT,70020B34 -LW RA,0014 (SP) -JAL 70020A38 -OR A0,A3,R0 -SH V0,0018 (A3) -LH V1,0018 (A3) -ANDI T6,V1,8000 -BNEL T6,R0,70020B34 -LW RA,0014 (SP) -MTC1 V1,F6 -LUI AT,3FF0 -MTC1 AT,F5 -CVT.S.W F8,F6 -MTC1 R0,F4 -OR A0,A3,R0 -CVT.D.S F10,F8 -DIV.D F6,F4,F10 -CVT.S.D F8,F6 -JAL 700209E8 -SWC1 F8,0014 (A3) -LUI AT,4D54 -ORI AT,AT,726B -BNEL V0,AT,70020B34 -LW RA,0014 (SP) -JAL 700209E8 -OR A0,A3,R0 -LW T7,0008 (A3) -SW T7,0004 (A3) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70020B40 -SW A0,0000 (SP) -SW A2,0008 (SP) -JR RA -SH A2,0016 (A1) - -70020B50 -ADDIU SP,SP,FFD0 -SW A0,0030 (SP) -SW RA,0014 (SP) -SW A2,0038 (SP) -SW A3,003C (SP) -OR A0,A2,R0 -OR A1,A3,R0 -LW A3,0044 (SP) -JAL 7000ED4C ;(V0,V1) = (A0,A1) / (A2,A3) [signed division] -LW A2,0040 (SP) -SW V0,0020 (SP) -SW V1,0024 (SP) -LW A0,0040 (SP) -LW A1,0044 (SP) -OR A2,V0,R0 -JAL 7000EDA8 ;(V0,V1) = (A0,A1) * (A2,A3) -OR A3,V1,R0 -LW T6,0038 (SP) -LW T7,003C (SP) -LW T0,0020 (SP) -SUBU T8,T6,V0 -SLTU AT,T7,V1 -SUBU T8,T8,AT -SUBU T9,T7,V1 -SW T9,002C (SP) -SW T8,0028 (SP) -BGTZ T0,70020C18 -LW T1,0024 (SP) -BLTZ T0,70020BD0 -NOP -BEQ R0,R0,70020C1C -ADDIU T0,SP,0020 -BLTZL T8,70020C1C -ADDIU T0,SP,0020 -BGTZ T8,70020BE8 -ADDIU T3,T1,0001 -BEQL T9,R0,70020C1C -ADDIU T0,SP,0020 -LW T4,0040 (SP) -LW T5,0044 (SP) -SLTIU AT,T3,0001 -ADDU T2,T0,AT -SUBU T6,T8,T4 -SLTU AT,T9,T5 -SUBU T6,T6,AT -SUBU T7,T9,T5 -SW T2,0020 (SP) -SW T3,0024 (SP) -SW T7,002C (SP) -SW T6,0028 (SP) -ADDIU T0,SP,0020 -LW V0,0030 (SP) -LW AT,0000 (T0) -SW AT,0000 (V0) -LW T3,0004 (T0) -SW T3,0004 (V0) -LW AT,0008 (T0) -SW AT,0008 (V0) -LW T3,000C (T0) -SW T3,000C (V0) -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -70020C50 -DIV A1,A2 -MFLO V0 -ADDIU SP,SP,FFF8 -BNE A2,R0,70020C68 -NOP -BREAK 00001C00 ;Break: division by zero -ADDIU AT,R0,FFFF -BNE A2,AT,70020C80 -LUI AT,8000 -BNE A1,AT,70020C80 -NOP -BREAK 00001800 -MULTU A2,V0 -SW V0,0000 (SP) -ADDIU T7,SP,0000 -MFLO T6 -SUBU V1,A1,T6 -BGEZ V0,70020CB8 -SW V1,0004 (SP) -SW V0,0000 (SP) -BLEZ V1,70020CB8 -SW V1,0004 (SP) -ADDIU V0,V0,0001 -SUBU V1,V1,A2 -SW V1,0004 (SP) -SW V0,0000 (SP) -LW AT,0000 (T7) -OR V0,A0,R0 -SW AT,0000 (A0) -LW T0,0004 (T7) -ADDIU SP,SP,0008 -JR RA -SW T0,0004 (A0) - -70020CE0 -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0028 (SP) -JAL 700185F0 ;disables and returns COP0 interrupt enabled flag -SW S0,0018 (SP) -LW T7,0028 (SP) -LUI T6,8002 -LW T6,698C (T6) -ADDIU AT,R0,FBFE -AND T8,T7,AT -NOR T9,T8,R0 -OR S0,V0,R0 -LUI AT,8002 -AND T0,T6,T9 -SW T0,698C (AT) -JAL 70018610 ;A0->COP0 status -OR A0,S0,R0 -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70020D40 21940 store word A2 to offset A1 using BSD hardware entry A0 - accepts: A0=BSD hardware entry, A1=hardware offset, A2=value -LUI T6,A460 -LW A3,0010 (T6) ;A3=A4600010: PI Status -ADDIU SP,SP,FFF8 -ANDI T7,A3,0003 -BEQ T7,R0,70020D6C ;branch if ready -NOP -//70020D58: loop until ready -LUI T8,A460 -LW A3,0010 (T8) -ANDI T9,A3,0003 -BNE T9,R0,70020D58 -NOP -//70020D6C: translate address and write word -LW T0,000C (A0) ;T0=A0+C: base hardware address -LUI AT,A000 -ADDIU SP,SP,0008 -OR T1,T0,A1 -OR T2,T1,AT ;T2= A0000000 | base | offset -SW A2,0000 (T2) ;A2->hardware address -JR RA -OR V0,R0,R0 ;return 0: okay! diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/7F02370C - set 09 actors.txt b/notes/GE Documentation/Actor-Specific Data and Animations/7F02370C - set 09 actors.txt deleted file mode 100644 index eade0df..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/7F02370C - set 09 actors.txt +++ /dev/null @@ -1,278 +0,0 @@ -Used to set 09 actors. A1 is a pointer to 09 characters - -7F02370C: ADDIU SP, SP, 0xFFA0 -7F023710: SW RA, 0x0024 (SP) -7F023714: SW S0, 0x0020 (SP) -7F023718: SW A0, 0x0060 (SP) -7F02371C: SW A2, 0x0068 (SP) -7F023720: LHU T6, 0x0006 (A1) //T6=preset position -7F023724: LUI T8, 0x8007 -7F023728: LW T8, 0x5D18 (T8) //T8=0xxx preset pointer base -7F02372C: SLL T7, T6, 0x2 -7F023730: SUBU T7, T7, T6 -7F023734: SLL T7, T7, 0x2 -7F023738: SUBU T7, T7, T6 -7F02373C: SLL T7, T7, 0x2 -7F023740: OR S0, A1, R0 //S0=A1 (guard OBJ pointer) -7F023744: ADDU A0, T7, T8 //A0=pointer to preset data -7F023748: LW A1, 0x0028 (A0) //A1=tile pointer -7F02374C: ADDIU T9, SP, 0x0054 -7F023750: SW T9, 0x0010 (SP) -7F023754: SW A0, 0x005C (SP) //save preset pointer -7F023758: LUI A2, 0x41A0 -7F02375C: JAL 0x0F056850 -7F023760: ADDIU A3, SP, 0x0048 -7F023764: BEQ V0, R0, 0x7F0238FC //if V0 invalid, abort! -7F023768: ADDIU T0, R0, 0xFFFF //T0=-1 -7F02376C: SW T0, 0x0030 (SP) -7F023770: LHU V0, 0x0008 (S0) //V0=body [S0=pointer to 09 actor data] -7F023774: ORI AT, R0, 0xFFFF //AT=-1 -7F023778: BNEL V0,AT,7F023794 //branch if valid and save to stack -7F02377C: SW V0, 0x0034 (SP) -7F023780: JAL 0x0F023590 //returns V0=current random body -7F023784: NOP -7F023788: BEQ R0, R0, 0x7F023794 -7F02378C: SW V0, 0x0034 (SP) -7F023790: SW V0, 0x0034 (SP) -7F023794: LW T1, 0x0034 (SP) //? grab voice flag ? -7F023798: LUI T3, 0x8004 -7F02379C: SLL T2, T1, 0x2 -7F0237A0: ADDU T2, T2, T1 -7F0237A4: SLL T2, T2, 0x2 //T2=T1*0x14 -7F0237A8: ADDU T3, T3, T2 -7F0237AC: LBU T3, 0xDE21 (T3) //T3=embedded head? -7F0237B0: BNEL T3,R0,7F0237DC -7F0237B4: LW A0, 0x0034 (SP) -7F0237B8: LH V0, 0x0016 (S0) -7F0237BC: BLTZ V0, 0x7F0237CC -7F0237C0: NOP -7F0237C4: BEQ R0, R0, 0x7F0237D8 -7F0237C8: SW V0, 0x0030 (SP) -7F0237CC: JAL 0x0F0235AC //returns V0=norm random head -7F0237D0: LW A0, 0x0034 (SP) -7F0237D4: SW V0, 0x0030 (SP) -7F0237D8: LW A0, 0x0034 (SP) -7F0237DC: LW A1, 0x0030 (SP) -7F0237E0: JAL 0x0F0234D0 -7F0237E4: LHU A2, 0x0014 (S0) -7F0237E8: BEQ V0, R0, 0x7F0238FC -7F0237EC: SW V0, 0x0038 (SP) -7F0237F0: LW V0, 0x005C (SP) -7F0237F4: LWC1 F12,0018 (V0) -7F0237F8: JAL 0x0F05AA30 -7F0237FC: LWC1 F14,0020 (V0) -7F023800: SWC1 F0,003C (SP) -7F023804: JAL 0x0F035398 -7F023808: LHU A0, 0x000A (S0) -7F02380C: LW A0, 0x0038 (SP) -7F023810: ADDIU A1, SP, 0x0048 -7F023814: LW A2, 0x003C (SP) -7F023818: LW A3, 0x0054 (SP) -7F02381C: JAL 0x0F0203B8 -7F023820: SW V0, 0x0010 (SP) -7F023824: BEQ V0, R0, 0x7F0238FC -7F023828: OR A0, V0, R0 -7F02382C: JAL 0x0F03A4A4 -7F023830: SW V0, 0x0044 (SP) -7F023834: JAL 0x0F03A404 -7F023838: LW A0, 0x0044 (SP) -7F02383C: LW T4, 0x0044 (SP) -7F023840: LHU T5, 0x0004 (S0) -7F023844: LUI AT, 0x4F80 -7F023848: LW V0, 0x0004 (T4) -7F02384C: SH T5, 0x0000 (V0) -7F023850: LHU T6, 0x0010 (S0) -7F023854: MTC1 T6,F4 -7F023858: BGEZ T6, 0x7F02386C -7F02385C: CVT.S.W F6,F4 -7F023860: MTC1 AT,F8 -7F023864: NOP -7F023868: ADD.S F6,F6,F8 -7F02386C: LUI AT, 0x447A -7F023870: MTC1 AT,F10 -7F023874: LUI AT, 0x4F80 -7F023878: DIV.S F16,F6,F10 -7F02387C: SWC1 F16,00EC (V0) -7F023880: LHU T7, 0x0012 (S0) -7F023884: MTC1 T7,F18 -7F023888: BGEZ T7, 0x7F02389C -7F02388C: CVT.S.W F4,F18 -7F023890: MTC1 AT,F8 -7F023894: NOP -7F023898: ADD.S F4,F4,F8 -7F02389C: SWC1 F4,00D0 (V0) -7F0238A0: LHU T8, 0x000C (S0) -7F0238A4: SH T8, 0x0114 (V0) -7F0238A8: LHU T9, 0x000E (S0) -7F0238AC: SH T9, 0x0116 (V0) -7F0238B0: LW T0, 0x0030 (SP) -7F0238B4: SB T0, 0x0006 (V0) -7F0238B8: LW T1, 0x0034 (SP) -7F0238BC: SB T1, 0x000F (V0) -7F0238C0: LHU V1, 0x0014 (S0) -7F0238C4: ANDI T2, V1, 0x0004 -7F0238C8: BEQL T2,R0,7F0238E4 -7F0238CC: ANDI T5, V1, 0x0008 -7F0238D0: LW T3, 0x0014 (V0) -7F0238D4: ORI T4, T3, 0x0002 -7F0238D8: SW T4, 0x0014 (V0) -7F0238DC: LHU V1, 0x0014 (S0) -7F0238E0: ANDI T5, V1, 0x0008 -7F0238E4: BEQL T5,R0,7F0238FC -7F0238E8: SW V0, 0x0018 (S0) -7F0238EC: LW T6, 0x0014 (V0) -7F0238F0: ORI T7, T6, 0x0010 -7F0238F4: SW T7, 0x0014 (V0) -7F0238F8: SW V0, 0x0018 (S0) -7F0238FC: LW RA, 0x0024 (SP) -7F023900: LW S0, 0x0020 (SP) -7F023904: ADDIU SP, SP, 0x0060 -7F023908: JR RA -7F02390C: NOP - - ---------- -7F023724: LUI T8, 0x8007 -7F023730: SLTI A0,T6,2710 - BNEZ A0,[general] -7F02372C: ORI T7,R0,002C -//2710 -7F023734: ADDI T6,T6,D8F0 //correction for -2710 -7F023738: ADDIU T8,T8,0004 -7F02373C: ORI T7,R0,0044 -//general - MULTU T6,T7 -7F023728: LW T8, 0x5D18 (T8) //T8=0xxx preset pointer base - MFLO T7 -7F023744: ADDU A0, T7, T8 //A0=pointer to preset data - -[rewrite] -7F02370C: ADDIU SP, SP, 0xFFA0 -7F023710: SW RA, 0x0024 (SP) -7F023714: SW S0, 0x0020 (SP) -7F023718: SW A0, 0x0060 (SP) -7F02371C: SW A2, 0x0068 (SP) -7F023720: LHU T6, 0x0006 (A1) //T6=preset position -7F023724: LUI T8, 0x8007 -//start editting! -7F023728: 2DC42710 SLTI A0,T6,2710 -7F02372C: 14800004 BNEZ A0,[general] +4 -7F023730: 340F002C ORI T7,R0,002C -7F023734: 21CED8F0 ADDI T6,T6,D8F0 //correction for -2710 -7F023738: 27180004 ADDIU T8,T8,0004 -7F02373C: 340F0044 ORI T7,R0,0044 -7F023740: 01CF0019 MULTU T6,T7 [general] -7F023744: 00A08025 OR S0, A1, R0 //S0=A1 (guard OBJ pointer) -7F023748: 8F185D18 LW T8, 0x5D18 (T8) //T8=0xxx preset pointer base -7F02374C: 00007812 MFLO T7 -7F023750: 01F82021 ADDU A0, T7, T8 //A0=pointer to preset data -7F023754: 8C850028 LW A1, 0x0028 (A0) //A1=tile pointer -7F023758: 27B90054 ADDIU T9, SP, 0x0054 -7F02375C: AFB90010 SW T9, 0x0010 (SP) -7F023760: AFA4005C SW A0, 0x005C (SP) //save preset pointer -7F023764: 3C0641A0 LUI A2, 0x41A0 -7F023768: 0FC15A14 JAL 0x0F056850 //PROXIMITY TEST FOR PRESET -7F02376C: 27A70048 ADDIU A3, SP, 0x0048 -7F023770: 10400062* BEQ V0, R0, 0x7F0238FC //1 if okay to spawn there -7F023774: 2408FFFF ADDIU T0, R0, 0xFFFF //T0=-1 -7F023778: 86020008 *LH V0, 0x0008 (S0) //V0=body -7F02377C: 04430003 *BGEZ V0,+4 //branch < 0 -7F023780: AFA80030 SW T0, 0x0030 (SP) -7F023784: 0FC08D88 JAL 0x0F023620 //returns V0=random body -7F023788: 00000000 NOP -7F02378C: 00000000 NOP -//end editting - unless need more space! -7F023790: SW V0, 0x0034 (SP) +3 -7F023794: LW T1, 0x0034 (SP) //? grab voice flag ? -7F023798: LUI T3, 0x8004 -7F02379C: SLL T2, T1, 0x2 -7F0237A0: ADDU T2, T2, T1 -7F0237A4: SLL T2, T2, 0x2 //T2=T1*0x14 -7F0237A8: ADDU T3, T3, T2 -7F0237AC: LBU T3, 0xDE21 (T3) //T3=embedded head? -7F0237B0: BNEL T3,R0,7F0237DC -7F0237B4: LW A0, 0x0034 (SP) -7F0237B8: LH V0, 0x0016 (S0) -7F0237BC: BLTZ V0, 0x7F0237CC -7F0237C0: NOP -7F0237C4: BEQ R0, R0, 0x7F0237D8 -7F0237C8: SW V0, 0x0030 (SP) -7F0237CC: JAL 0x0F0235AC //returns V0=norm random head -7F0237D0: LW A0, 0x0034 (SP) -7F0237D4: SW V0, 0x0030 (SP) -7F0237D8: LW A0, 0x0034 (SP) -7F0237DC: LW A1, 0x0030 (SP) -7F0237E0: JAL 0x0F0234D0 -7F0237E4: LHU A2, 0x0014 (S0) -7F0237E8: BEQ V0, R0, 0x7F0238FC -7F0237EC: SW V0, 0x0038 (SP) -7F0237F0: LW V0, 0x005C (SP) -7F0237F4: LWC1 F12,0018 (V0) -7F0237F8: JAL 0x0F05AA30 -7F0237FC: LWC1 F14,0020 (V0) -7F023800: SWC1 F0,003C (SP) -7F023804: JAL 0x0F035398 -7F023808: LHU A0, 0x000A (S0) -7F02380C: LW A0, 0x0038 (SP) -7F023810: ADDIU A1, SP, 0x0048 -7F023814: LW A2, 0x003C (SP) -7F023818: LW A3, 0x0054 (SP) -7F02381C: JAL 0x0F0203B8 -7F023820: SW V0, 0x0010 (SP) -7F023824: BEQ V0, R0, 0x7F0238FC -7F023828: OR A0, V0, R0 -7F02382C: JAL 0x0F03A4A4 -7F023830: SW V0, 0x0044 (SP) -7F023834: JAL 0x0F03A404 -7F023838: LW A0, 0x0044 (SP) -7F02383C: LW T4, 0x0044 (SP) -7F023840: LHU T5, 0x0004 (S0) -7F023844: LUI AT, 0x4F80 -7F023848: LW V0, 0x0004 (T4) -7F02384C: SH T5, 0x0000 (V0) -7F023850: LHU T6, 0x0010 (S0) -7F023854: MTC1 T6,F4 -7F023858: BGEZ T6, 0x7F02386C -7F02385C: CVT.S.W F6,F4 -7F023860: MTC1 AT,F8 -7F023864: NOP -7F023868: ADD.S F6,F6,F8 -7F02386C: LUI AT, 0x447A -7F023870: MTC1 AT,F10 -7F023874: LUI AT, 0x4F80 -7F023878: DIV.S F16,F6,F10 -7F02387C: SWC1 F16,00EC (V0) -7F023880: LHU T7, 0x0012 (S0) -7F023884: MTC1 T7,F18 -7F023888: BGEZ T7, 0x7F02389C -7F02388C: CVT.S.W F4,F18 -7F023890: MTC1 AT,F8 -7F023894: NOP -7F023898: ADD.S F4,F4,F8 -7F02389C: SWC1 F4,00D0 (V0) -7F0238A0: LHU T8, 0x000C (S0) -7F0238A4: SH T8, 0x0114 (V0) -7F0238A8: LHU T9, 0x000E (S0) -7F0238AC: SH T9, 0x0116 (V0) -7F0238B0: LW T0, 0x0030 (SP) -7F0238B4: SB T0, 0x0006 (V0) -7F0238B8: LW T1, 0x0034 (SP) -7F0238BC: SB T1, 0x000F (V0) -7F0238C0: LHU V1, 0x0014 (S0) -7F0238C4: ANDI T2, V1, 0x0004 -7F0238C8: *BEQ T2,R0,+4 -7F0238D0: LW T3, 0x0014 (V0) -7F0238D4: ORI T4, T3, 0x0002 -7F0238D8: SW T4, 0x0014 (V0) -7F0238DC: LHU V1, 0x0014 (S0) -7F0238E0: ANDI T5, V1, 0x0008 +4 -7F0238E4: *BEQ T5,R0,+3 -7F0238EC: LW T6, 0x0014 (V0) -7F0238F0: ORI T7, T6, 0x0010 -7F0238F4: SW T7, 0x0014 (V0) -7F0238F8: SW V0, 0x0018 (S0) +3 -7F0238FC: LW RA, 0x0024 (SP) -7F023900: LW S0, 0x0020 (SP) -//don't move this one -7F023908: JR RA -7F023904: *ADDIU SP, SP, 0x0060 diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/7F000A00 - expand animation table entries.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Animation/7F000A00 - expand animation table entries.txt deleted file mode 100644 index e8861f6..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/7F000A00 - expand animation table entries.txt +++ /dev/null @@ -1,51 +0,0 @@ -7F000A00 35530 expand animation table entries (animation source at ROM 0x124AC0) - accepts: A0=p->list of animation table entries -LW V1,0000 (A0) -LUI A2,8007 -OR V0,A0,R0 ;V0=A0: p-> -BEQ V1,R0,7F000A6C -ADDIU A2,A2,9538 ;A2=80069538 -LW V1,0000 (A0) -ADDIU A1,R0,0001 ;A1=1: default animation value -//7F000A1C: -BEQL A1,V1,7F000A58 ;branch if entry 1 -LW V1,0004 (V0) -LW T6,0000 (A2) ;T6=80069538: p->animation table -ADDU T7,V1,T6 -SW T7,0000 (V0) -LW T9,0000 (A2) ;T9=80069538: p->animation table -LW T8,0008 (T7) -ADDU T0,T8,T9 -SW T0,0008 (T7) -LW V1,0000 (V0) -LW T2,0000 (A2) ;T2=80069538: p->animation table -LW T1,0010 (V1) -ADDU T3,T1,T2 -SW T3,0010 (V1) -//7F000A54: -LW V1,0004 (V0) -ADDIU V0,V0,0004 ;V0+=4: next entry -BNE V1,R0,7F000A1C ;loop while more entries in table -NOP -OR V0,A0,R0 ;V0=A0: p-> -LW V1,0000 (A0) -//7F000A6C: -BEQ V1,R0,7F000AA4 ;return if end of table -ADDIU A1,R0,0001 ;A1=1 -LUI A0,0012 -ADDIU A0,A0,4AC0 ;A0=0x124AC0 -LW V1,0000 (V0) -//7F000A80: generate ROM offsets if not 1 -BEQL A1,V1,7F000A98 ;branch if 1 -LW V1,0004 (V0) -LW T4,0000 (V1) ;T4=V0+0: offset -ADDU T5,T4,A0 ;T5=T4+0x124AC0: -SW T5,0000 (V1) ;@V1+=0x124AC0: offset->ROM address -//7F000A94: -LW V1,0004 (V0) -ADDIU V0,V0,0004 ;V0+=4: next entry -BNE V1,R0,7F000A80 ;loop while more data in table -NOP -//7F000AA4: return -JR RA -NOP diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/7F000AAC - allocate, load, and expand animation tables.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Animation/7F000AAC - allocate, load, and expand animation tables.txt deleted file mode 100644 index c78f6a6..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/7F000AAC - allocate, load, and expand animation tables.txt +++ /dev/null @@ -1,48 +0,0 @@ -7F000AAC 355DC allocate, load, and expand animation tables -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LUI A0,8007 -LUI A1,8007 -ADDIU A1,A1,9518 ;A1=80069518: -ADDIU A0,A0,9440 ;A0=80069440: -JAL 7000D6D0 -ADDIU A2,R0,0008 -//7F000ACC: -LUI A0,8003 -LUI A1,8007 -LUI A2,8007 -ADDIU A2,A2,9458 ;A2-80069458: -ADDIU A1,A1,9440 ;A1=80069440: -JAL 7F0009E0 -ADDIU A0,A0,9D60 ;A0=80029D60 -//7F000AE8: allocate animation table -LUI T6,0001 -LUI T7,0000 -ADDIU T7,T7,0000 -ADDIU T6,T6,E7E0 -SUBU A2,T6,T7 ;A2= E7E0 - 0 -OR A0,A2,R0 ;A0=size -SW A2,0018 (SP) -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0006 ;A1=6 -//7F000B0C: load the animations to rdram -LUI V1,8007 -ADDIU V1,V1,9538 -LUI A1,0029 -SW V0,0000 (V1) ;V0->80069538: p->animation table -LW A2,0018 (SP) ;A2= E7E0: size -ADDIU A1,A1,E980 ;A1= 28E980 -JAL 70005C1C ;read A2 bytes from hardware A1 to rdram A0 -OR A0,V0,R0 ;A0=p->animation table -//7F000B2C: expand both animation tables -LUI A0,8003 -JAL 7F000A00 ;expand animation table A0's entries -ADDIU A0,A0,9D6C ;A0=80029D6C: offset table for animations -LUI A0,8003 -JAL 7F000A00 ;expand animation table A0's entries -ADDIU A0,A0,A04C ;A0=8002A04C: offset table for final animations -//7F000B44: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/Animations.xls b/notes/GE Documentation/Actor-Specific Data and Animations/Animation/Animations.xls deleted file mode 100644 index 12fdf93..0000000 Binary files a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/Animations.xls and /dev/null differ diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/animation workpad.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Animation/animation workpad.txt deleted file mode 100644 index a6bfdd1..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/animation workpad.txt +++ /dev/null @@ -1,37 +0,0 @@ -First 0x10 appears to be a sort of header - -offsets 4018 4070 40D4 4144 4298 42C8 -size 58 64 70 154 30 BC -0x0 1 [7] [8] [6] [7] [0] [8] -0x1 1 [0] [0] [0] [0] [0] [0] -0x2 2 [040A] [041C] [041F] [0415] [0000] [03DA] -0x4 2 [C] [C] [A] [C] [0] [A] -0x6 2 [0600] [0600] [0500] [0700] [0000] [0400] -0x8 2 [AF] [73] [36] [1F] [0] [2] -0xA 2 [12] [12] [F] [13] [0] [E] -0xC 4 [0] [0] [0] [0] [0] [0] - - -Last 0x1C appears to be a sort of tail -offsets 4018 4070 40D4 4144 4298 42C8 -size 58 64 70 154 30 BC -datasize 2B 36 42 126 4 90 -0x0 2 [5] [5] [5] [5] [5] [5] -0x2 2 [3CE0] [41EC] [484C] [5198] [7788] [8278] -0x4 2 [13] [18] [23] [7C] [3C] [52] -0x6 2 [0C01] [0C01] [0C01] [0C00] [0C00] [0C00] -0x8 2 [0] [0] [0] [0] [0] [0] -0xA 2 [402C] [4084] [40E8] [4158] [42AC] [42DC] -0xC 2 [12] [12] [F] [13] [0] [E] -0xE 2 [0220] [0220] [0220] [0220] [0220] [0220] -0x10 2 [0] [0] [0] [0] [0] [0] -0x12 2 [4044] [409C] [4100] [4170] [42C4] [42F4] -0x14 2 [0] [0] [0] [0] [0] [0] -0x16 2 [0400] [0400] [0500] [0] [0200] [0500] -0x18 2 [1] [1] [9] [0] [0] [-3] -0x1A 2 [4] [4] [5] [0] [2] [5] - -0xA 2 offset always data+14 -0x12 2 offset always data+14+18 - -NOTE: 4298 has NULL data. \ No newline at end of file diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/solo animations.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Animation/solo animations.txt deleted file mode 100644 index 3764ee0..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Animation/solo animations.txt +++ /dev/null @@ -1,133 +0,0 @@ -80036514 selected solo animation -80036518 15788-15818 animations for intro block type 4 0x10 each - -potential new format: -0x0 2 anim -0x2 2 start point -0x4 2 run length -0x6 2 rate, * 10000 - -42BE0000 95 005F -42200000 40 0028 -40E00000 7 0007 -3CA3D70A 0.02 00C8 (2710) or 0014 (0064) -3F000000 0.5 1388 (2710) or 01F4 (0064) - -003D 00F4 -0042 0108 -0061 0184 -0062 0188 -0063 018C -0064 0190 -0066 0198 -0067 019C -00B0 02C0 - - -ani val1 val2 val3*10000 -003D 005F FFFF 00C8 -0042 0007 0028 1388 -0061 0000 FFFF 1388 -0062 0000 FFFF 1388 -0063 0000 FFFF 1388 -0064 0000 FFFF 1388 -0066 0000 FFFF 1388 -0067 0000 FFFF 1388 -00B0 0000 FFFF 1388 - - - -reset just prior to parsing the intro block commands: -//7F005A10: SW R0,6514 (AT) - -7F005C28: writes value set in intro block command to 80036514 register - - -//7F07ABBC: 0x use, to load the animation! -LUI T0,8003 -LW T0,6514 (T0) T0=80036514: animation register -LUI T2,8003 -LUI S0,8008 -ADDIU T2,T2,6518 T2=80036518: base address for animations -SLL T1,T0,0x4 -ADDIU S0,S0,A0B0 S0=8007A0B0 -ADDU V0,T1,T2 V0=address for chosen ani data -LW T5,0000 (S0) T5=cur. playerdata -LWC1 F0,0004 (V0) F0=val1 -LUI T4,8007 -LW T4,9538 (T4) T4=80069538: pointer to animation binaries -LW T3,0000 (V0) T3=offset to ani -LWC1 F12,0008 (V0) F12=val2 -LWC1 F2,000C (V0) F2=val3 -MTC1 R0,F10 -LW A0,00D4 (T5) A0=player's obj.instance -MFC1 A3,F0 A3=val1 -OR A2,R0,R0 A2=0 -ADDU A1,T3,T4 A1=pointer to selected ani binary -SWC1 F12,0078 (SP) save val2 -SWC1 F2,0010 (SP) save val3 -JAL 7F06FCA8 -SWC1 F10,0014 (SP) 0->SP+14 - - -+ + - + -+ + - -Potential Rewrite -//7F07AB84: 0xAF6B4 -14400039 -BNEZ V0,7F07AC6C -3C018003 LUI AT,8003 -44806000 -MTC1 R0,F12 F12 must=0 -AC2064A4 SW R0,64A4 (AT) -24190001 -ADDIU T9,R0,0001 -AC3964A8 SW T9,64A8 (AT) -3C013F80 LUI AT,3F80 -0FC20284 JAL 7F080A10 -44817000 MTC1 AT,F14 -0FC1E73C JAL 7F079CF0 leaves AT at 80050000... -00000000 NOP -//7F07ABB0: 0xAF6E0 use, to load the animation! -3C0A8003 LUI T2,8003 -8D496514 LW T1,6514 (T2) T0=80036514: animation register -000948C0 SLL T1,T1,0x3 newsize -012A1021 ADDU V0,T1,T2 V0=address for chosen ani data -844B6518 LH T3,6518 (V0) T3=offset to ani -000B5880 SLL T3,T3,0x2 -016A2821 ADDU A1,T3,T2 -8CA59D6C LW A1,9D6C (A1) -3C108008 LUI S0,8008 -2610A0B0 ADDIU S0,S0,A0B0 -8E0D0000 LW T5,0000 (S0) T5=cur. playerdata -8DA400D4 LW A0,00D4 (T5) A0=player's obj.instance -// -8446651E LH A2,651E (V0) -44861000 MTC1 A2,F2 F2=val3 LH A2, MTC1, CVT, DIV, SWC1, and need divisor -C4201A3C LWC1 F0,1A3C (AT) 10000, borrowed from main menu, used in scale division! -468010A0 CVT.S.W F2,F2 -46001083 DIV.S F2,F2,F0 -// -8447651A LH A3,651A (V0) -44870000 MTC1 A3,F0 -E7A20010 SWC1 F2,0010 (SP) save val3 -46800020 CVT.S.W F0,F0 F0=val1 -44070000 MFC1 A3,F0 A3=val1 -// -8446651C LH A2,651C (V0) -44866000 MTC1 A2,F12 -00003025 OR A2,R0,R0 A2=0 -46806320 CVT.S.W F12,F12 -E7AC0078 SWC1 F12,0078 (SP) save val2 -// -0FC1BF2A JAL 7F06FCA8 -AFA00014 SW R0,0014 (SP) 0->SP+14 -44808000 MTC1 R0,F16 -C7AC0078 LWC1 F12,0078 (SP) -460C803C C.LT.S F16,F12 -00000000 NOP -45000004 BC1F +4 -8E0F0000 LW T7,0000 (S0) -//7F07AC3C: 0xAF76C -44056000 -MFC1 A1,F12 -0FC1BF7A -JAL 7F06FDE8 -8DE400D4 LW A0,00D4 (T7) \ No newline at end of file diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F000EB8 - allocate and intialize GUARDdata entries.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F000EB8 - allocate and intialize GUARDdata entries.txt deleted file mode 100644 index 331f660..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F000EB8 - allocate and intialize GUARDdata entries.txt +++ /dev/null @@ -1,43 +0,0 @@ -7F000EB8 359E8 allocate and intialize A0 + 10 GUARDdata entries - accepts: A0= #guards -ADDIU T6,A0,000A -SLL T7,T6,0x4 -SUBU T7,T7,T6 -SLL T7,T7,0x3 -SUBU T7,T7,T6 -SLL T7,T7,0x2 ;T7= 1DC(A0 + A): space for A0+10 guards -ADDIU SP,SP,FFE8 -LUI A2,8003 -ADDIU A0,T7,000F -ADDIU A2,A2,CC68 -SW RA,0014 (SP) -ORI T8,A0,000F -SW T6,0000 (A2) ;8002CC68 = A0+A: set #guards+10 -XORI A0,T8,000F ;A0->nearest quadword boundry -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000EF8: set pointer to allocated block -LUI A2,8003 -ADDIU A2,A2,CC68 -LW T0,0000 (A2) ;T0=8002CC68: #guards -LUI A0,8003 -ADDIU A0,A0,CC64 -SW V0,0000 (A0) ;V0->8002CC64: p->GUARDdata block -BLEZ T0,7F000F40 ;return if no entries, which isn't really possible -OR V1,R0,R0 ;V1=0 init. count -OR V0,R0,R0 ;V0=0 init. offset -//7F000F1C: initialize each entry -LW T1,0000 (A0) ;T1=p->GUARDdata -ADDIU V1,V1,0001 ;V1+=1 count+=1 -ADDU T2,T1,V0 -SW R0,001C (T2) ;0->GUARDdata+1C: set NULL p->model -LW T3,0000 (A2) ;T3= #guards -ADDIU V0,V0,01DC ;V0+=1DC: next GUARDdata's offset -SLT AT,V1,T3 -BNEL AT,R0,7F000F20 ;loop for each entry -LW T1,0000 (A0) -//7F000F40: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F0050D0 - initialize current player's BONDdata and statistics.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F0050D0 - initialize current player's BONDdata and statistics.txt deleted file mode 100644 index 705f1e6..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F0050D0 - initialize current player's BONDdata and statistics.txt +++ /dev/null @@ -1,234 +0,0 @@ -7F0050D0 39C00 initialize current player's BONDdata and statistics -ADDIU SP,SP,FC30 -LUI T7,8003 -ADDIU T7,T7,A3D0 -SW RA,001C (SP) -SW S0,0018 (SP) -ADDIU T0,T7,03A8 -ADDIU T6,SP,0024 -//7F0050EC: copy 8002A3D0-8002A778 to stack -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T7) -SW AT,FFF8 (T6) -LW AT,FFFC (T7) -BNE T7,T0,7F0050EC -SW AT,FFFC (T6) -//7F005110: allocate a right item buffer -LUI A0,8003 -LW A0,245C (A0) ;A0=8003245C: [14820] -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI S0,8008 -ADDIU S0,S0,A0B0 -LW T1,0000 (S0) ;T1=cur.BONDdata -JAL 7F09A464 ;V0= # players -SW V0,0808 (T1) ;V0->BONDdata+808: right weapon buffer -ADDIU AT,R0,0001 -BNE V0,AT,7F005154 ;skip if multiplayer -//7F00513C: allocate a left item buffer -LUI A0,8003 -LW A0,2460 (A0) ;A0=80032460: [14820] -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LW T2,0000 (S0) -SW V0,080C (T2) ;V0->BONDdata+80C: left weapon buffer -//7F005154: -LW T3,0000 (S0) -ADDIU A1,R0,FFFF -ADDIU V1,SP,0024 -SW R0,07F8 (T3) ; 0->BONDdata+7F8: 1st person right invisible -LW T4,0000 (S0) -ADDIU T3,V1,03A8 -OR V0,R0,R0 -SW R0,07FC (T4) ; 0->BONDdata+7FC: 1st person left invisible -LW T5,0000 (S0) -OR T4,V1,R0 -SW R0,0800 (T5) ;0->BONDdata+800: NULL item right # -LW T9,0000 (S0) -SW R0,0804 (T9) ;0->BONDdata+804: NULL item left # -LW T8,0000 (S0) -SW A1,2A44 (T8) ;-1->BONDdata+2A44: -LW T0,0000 (S0) -ADDIU T8,V1,03A8 -SW A1,2A48 (T0) ;-1->BONDdata+2A48: -LW T7,0000 (S0) -OR T0,V1,R0 -LUI V1,8008 -SW R0,2A50 (T7) ; 0->BONDdata+2A50: right item model unlocked -LW T6,0000 (S0) -ADDIU V1,V1,A0B4 -SW R0,2A54 (T6) ; 0->BONDdata+2A54: left item model unlocked -LW T1,0000 (S0) -//7F0051BC: copy right item controller initialization from buffer to BONDdata -LW AT,0000 (T4) -ADDIU T4,T4,000C -ADDIU T1,T1,000C -SW AT,0864 (T1) -LW AT,FFF8 (T4) -SW AT,0868 (T1) -LW AT,FFFC (T4) -BNE T4,T3,7F0051BC -SW AT,086C (T1) -LW T5,0000 (S0) -//7F0051E4: copy left item controller initialization from buffer to BONDdata -LW AT,0000 (T0) -ADDIU T0,T0,000C -ADDIU T5,T5,000C -SW AT,0C0C (T5) -LW AT,FFF8 (T0) -SW AT,0C10 (T5) -LW AT,FFFC (T0) -BNE T0,T8,7F0051E4 -SW AT,0C14 (T5) -//7F005208: initialize inventory -LW T7,0000 (S0) -ADDU T6,T7,V0 -ADDIU V0,V0,0004 -SLTI AT,V0,0078 -BNE AT,R0,7F005208 -SW R0,1130 (T6) ; 0->BONDdata+1130 - +11A8 -//7F005220: initialize statistics -LW T2,0000 (V1) -ADDIU A0,R0,0003 -SLL V0,A0,0x2 -SW R0,0000 (T2) ;0->cur.player.stats+0: reset shots fired -LW T3,0000 (V1) -LUI AT,3F80 -MTC1 AT,F2 -SW R0,0004 (T3) ;0->cur.player.stats+4: reset hits.head -LW T4,0000 (V1) -LUI AT,8005 -MTC1 R0,F0 -SW R0,0008 (T4) ;0->cur.player.stats+8: reset hits.body -LW T1,0000 (V1) -OR A0,R0,R0 ;A0= right hand -ADDU T9,T1,V0 -SW R0,0000 (T9) ;0->cur.player.stats+C: reset hits.leg -LW T8,0000 (V1) -ADDU T0,T8,V0 -SW R0,0004 (T0) ;0->cur.player.stats+10: reset hits.weapon -LW T5,0000 (V1) -ADDU T7,T5,V0 -SW R0,0008 (T7) ;0->cur.player.stats+14: reset hits.hat -LW T6,0000 (V1) -ADDU T2,T6,V0 -SW R0,000C (T2) ;0->cur.player.stats+18: reset hits.objects -LW T3,0000 (V1) -LWC1 F12,F0E0 (AT) ;F12=8004F0E0: 0.9 -ADDIU V0,R0,00FF -SW R0,006C (T3) ;0->cur.player.stats+6C: reset civilians killed -LW T4,0000 (V1) -LUI AT,8005 -SW R0,001C (T4) ;0->cur.player.stats+1C: reset kill count -LW T1,0000 (V1) -SW R0,0020 (T1) ;0->cur.player.stats+20: MwtGX kills -//7F0052A8: -LW T9,0000 (S0) -SW R0,29D8 (T9) ; 0->BONDdata+29D8: reset #deaths -LW T8,0000 (S0) -SW R0,29DC (T8) ; 0->BONDdata+29DC: reset #suicides -LW T0,0000 (S0) -SWC1 F2,0FC0 (T0) ;1.0->BONDdata+FC0: -LW T5,0000 (S0) -SWC1 F2,0FC4 (T5) ;1.0->BONDdata+FC4: -LW T7,0000 (S0) -ADDIU T5,R0,0001 -SW R0,0FC8 (T7) ; 0->BONDdata+FC8: -LW T6,0000 (S0) -SW R0,0FCC (T6) ; 0->BONDdata+FCC: -LW T2,0000 (S0) -SW R0,0FD0 (T2) ; 0->BONDdata+FD0: -LW T3,0000 (S0) -SW R0,0FD4 (T3) ; 0->BONDdata+FD4: -LW T4,0000 (S0) -SW R0,0FD8 (T4) ; 0->BONDdata+FD8: -LW T1,0000 (S0) -SB V0,0FDC (T1) ;-1->BONDdata+FDC: -LW T9,0000 (S0) -SB V0,0FDD (T9) ;-1->BONDdata+FDD: -LW T8,0000 (S0) -SB V0,0FDE (T8) ;-1->BONDdata+FDE: -LW T0,0000 (S0) -SB R0,0FDF (T0) ; 0->BONDdata+FDF: -LW T7,0000 (S0) -SW T5,0FE0 (T7) ; 1->BONDdata+FE0: -LW T6,0000 (S0) -SW R0,0FE4 (T6) ; 0->BONDdata+FE4: -LW T2,0000 (S0) -SWC1 F0,0FE8 (T2) ;0.0->BONDdata+FE8: -LW T3,0000 (S0) -SWC1 F0,0FEC (T3) ;0.O->BONDdata+FEC: -LW T4,0000 (S0) -SWC1 F0,0FF0 (T4) ;0.0->BONDdata+FF0: -LW T1,0000 (S0) -SWC1 F0,0FF4 (T1) ;0.0->BONDdata+FF4: -LW T9,0000 (S0) -SWC1 F12,0FF8 (T9) ;0.9->BONDdata+FF8: -LW T8,0000 (S0) -SWC1 F0,0FFC (T8) ;0.0->BONDdata+FFC: -LW T0,0000 (S0) -SWC1 F0,1000 (T0) ;0.0->BONDdata+1000: -LW T5,0000 (S0) -SWC1 F0,1004 (T5) ;0.0->BONDdata+1004: -LW T7,0000 (S0) -SWC1 F0,1008 (T7) ;0.0->BONDdata+1008: -LW T6,0000 (S0) -SWC1 F12,100C (T6) ;0.9->BONDdata+100C: -LW T2,0000 (S0) -SWC1 F0,1010 (T2) ;0.0->BONDdata+1010: -LW T3,0000 (S0) -LWC1 F4,F0E4 (AT) ;F4=8004F0E4: -Pi -SWC1 F4,1014 (T3) ;-Pi->BONDdata+1014: -LW T4,0000 (S0) -SWC1 F0,1018 (T4) ;0.0->BONDdata+1018: -LW T1,0000 (S0) -SW R0,1060 (T1) ; 0->BONDdata+1060: reset GEkey analyzed used flag -LW T9,0000 (S0) -SW A1,1270 (T9) ;-1->BONDdata+1270: -LW T8,0000 (S0) -SWC1 F0,106C (T8) ;0.0->BONDdata+106C: -LW T0,0000 (S0) -SWC1 F0,1070 (T0) ;0.0->BONDdata+1070: -LW T5,0000 (S0) -SWC1 F0,1074 (T5) ;0.0->BONDdata+1074: -LW T7,0000 (S0) -SW R0,1078 (T7) ; 0->BONDdata+1078: -LW T6,0000 (S0) -SWC1 F0,107C (T6) ;0.0->BONDdata+107C: -LW T2,0000 (S0) -//7F0053CC: -JAL 7F05C980 -SWC1 F0,1080 (T2) ;0.0->BONDdata+1080: -JAL 7F05C980 -OR A0,R0,R0 ;A0= right hand -JAL 7F05C980 -OR A0,R0,R0 ;A0= right hand -JAL 7F05C980 -ADDIU A0,R0,0001 ;A0= left hand -JAL 7F05C980 -ADDIU A0,R0,0001 ;A0= left hand -JAL 7F05C980 -ADDIU A0,R0,0001 ;A0= left hand -//7F0053FC: -LW T3,0000 (S0) -ADDIU T4,R0,0002 -LUI AT,8003 -SW R0,1064 (T3) ; 0->BONDdata+1064: reset flags -LW T1,0000 (S0) -SW T4,1128 (T1) ; 2->BONDdata+1128: reset more flags -LW T9,0000 (S0) -LWC1 F6,2C38 (AT) ;F6=80032C38: item 11+34: sniper rifle zoom -LUI AT,8003 -SWC1 F6,1084 (T9) ;zoom->BONDdata+1084: sniper zoom -LW T8,0000 (S0) -LWC1 F8,36B8 (AT) ;F8=800336B8: item 29+34: camera zoom -SWC1 F8,1088 (T8) ;zoom->BONDdata+1088: camera zoom -//7F005430: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,03D0 -JR RA -NOP diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F00625C - allocate and initialize inventory.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F00625C - allocate and initialize inventory.txt deleted file mode 100644 index 1fc3894..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F00625C - allocate and initialize inventory.txt +++ /dev/null @@ -1,29 +0,0 @@ -7F00625C 3AD8C allocate and initialize 0x1E + A0 inventory entries for cur. player - accepts: A0= #additional inventory entries -LUI V0,8008 -ADDIU V0,V0,A0B0 -LW T7,0000 (V0) ;T7=cur.BONDdata -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU T6,A0,001E -SW T6,11E8 (T7) ;T6->BONDdata+11E8: max inventory items -LW T8,0000 (V0) -ADDIU A1,R0,0004 ;A1= bank 4 -LW A0,11E8 (T8) ;A0=items.max -SLL T9,A0,0x2 -ADDU T9,T9,A0 -SLL T9,T9,0x2 -ADDIU A0,T9,000F -ORI T0,A0,000F -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -XORI A0,T0,000F ;A0= 14*items.max -//7F0062A0: initialize player inventory -LUI T2,8008 -LW T2,A0B0 (T2) -JAL 7F08BFF0 ;reinitialize player inventory -SW V0,11E4 (T2) ;V0->BONDdata+11E4: items.Pcur -//7F0062B0: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F0793EC - initialize playerdata.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F0793EC - initialize playerdata.txt deleted file mode 100644 index 0e66934..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Initialization/7F0793EC - initialize playerdata.txt +++ /dev/null @@ -1,346 +0,0 @@ -7F0793EC ADF1C initialize playerdata -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0002 -BNEZ AT,7F07943C ;branch if solo -NOP -//7F079408: multiplayer only... -JAL 7F09B150 ;V0=cur.player# -NOP -JAL 7F0100BC ;V0= player A0's control style -OR A0,V0,R0 ;A0=V0: player# -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T6,0000 (V1) ;T6=8007A0B0: cur.player data pointer -JAL 7F09B150 ;V0=cur.player# -SW V0,0430 (T6) ;cur.player+430: control style -JAL 7F0100BC ;V0= player A0's control style -OR A0,V0,R0 ;A0=V0: player# -JAL 7F0A4DD0 ;set control style A0 to current playerdata -OR A0,V0,R0 ;A0=V0: control style -//7F07943C: -LUI V1,8008 -ADDIU V1,V1,A0B0 -MTC1 R0,F0 ;F0=0 -LW T7,0000 (V1) ;T7=8007A0B0: cur.BONDdata pointer -LUI AT,3F80 -MTC1 AT,F2 ;F2=1.0 [3F800000] -SWC1 F0,0038 (T7) ;BONDdata+38= 0.0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -ADDIU A3,R0,0002 ;A3=2 -ADDIU A1,R0,0001 ;A1=1 -SWC1 F0,003C (T8) ;BONDdata+3C= 0.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -ADDIU A2,R0,FFFF ;A2=-1 -LUI AT,C080 -SWC1 F0,0040 (T9) ;BONDdata+40= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -MTC1 AT,F4 ;F4=-4.0 [C0800000] -LUI AT,43B4 -SWC1 F0,0044 (T0) ;BONDdata+44= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F0,0048 (T1) ;BONDdata+48= 0.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SWC1 F0,004C (T2) ;BONDdata+4C= 0.0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,0050 (T3) ;BONDdata+50= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SWC1 F0,0054 (T4) ;BONDdata+54= 0.0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SWC1 F0,0058 (T5) ;BONDdata+58= 0.0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SW R0,0000 (T6) ;BONDdata+0= 0 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SWC1 F0,0004 (T7) ;BONDdata+4= 0.0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SWC1 F0,0008 (T8) ;BONDdata+8= 0.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F0,000C (T9) ;BONDdata+C= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F0,0010 (T0) ;BONDdata+10= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F0,0014 (T1) ;BONDdata+14= 0.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SWC1 F2,0018 (T2) ;BONDdata+18= 1.0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,001C (T3) ;BONDdata+1C= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SWC1 F2,0020 (T4) ;BONDdata+20= 1.0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SWC1 F0,0024 (T5) ;BONDdata+24= 0.0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SWC1 F0,0028 (T6) ;BONDdata+28= 0.0 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SWC1 F0,002C (T7) ;BONDdata+2C= 0.0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SWC1 F0,0030 (T8) ;BONDdata+30= 0.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SW R0,0034 (T9) ;BONDdata+34= 0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F0,03C4 (T0) ;BONDdata+3C4= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F0,03C8 (T1) ;BONDdata+3C8= 0.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SWC1 F2,03CC (T2) ;BONDdata+3CC= 1.0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,0084 (T3) ;BONDdata+84= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SWC1 F0,0088 (T4) ;BONDdata+88= 0.0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SW R0,008C (T5) ;BONDdata+8C= 0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SWC1 F0,0090 (T6) ;BONDdata+90= 0.0 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SW R0,0094 (T7) ;BONDdata+94= 0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SWC1 F0,0098 (T8) ;BONDdata+98= 0.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F0,1274 (T9) ;BONDdata+1274= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F0,1278 (T0) ;BONDdata+1278= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F0,127C (T1) ;BONDdata+127C= 0.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SW A3,009C (T2) ;BONDdata+9C= 2 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SW A3,29FC (T3) ;BONDdata+29FC= 2 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SWC1 F0,00A0 (T4) ;BONDdata+A0= 0.0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SWC1 F0,00A4 (T5) ;BONDdata+A4= 0.0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SW A1,00AC (T6) ;BONDdata+AC= 1 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SW R0,00D0 (T7) ;BONDdata+D0= 0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SW R0,00D8 (T8) ;BONDdata+D8= 0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F2,00DC (T9) ;BONDdata+DC= 1.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F0,00E0 (T0) ;BONDdata+E0= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F2,00E4 (T1) ;BONDdata+E4= 1.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SWC1 F0,00E8 (T2) ;BONDdata+E8= 0.0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F2,00EC (T3) ;BONDdata+EC= 1.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SWC1 F0,00F0 (T4) ;BONDdata+F0= 0.0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SW A2,00F4 (T5) ;BONDdata+F4= -1 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SW A2,00F8 (T6) ;BONDdata+F8= -1 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SW R0,01C0 (T7) ;BONDdata+1C0= 0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SW R0,01C4 (T8) ;BONDdata+1C4= 0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SW R0,01C8 (T9) ;BONDdata+1C8= 0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SW A1,01CC (T0) ;BONDdata+1CC= 1 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SW R0,01D0 (T1) ;BONDdata+1D0= 0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SW R0,01A0 (T2) ;BONDdata+1A0= 0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,019C (T3) ;BONDdata+19C= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SWC1 F0,014C (T4) ;BONDdata+14C= 0,0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SWC1 F2,0150 (T5) ;BONDdata+150= 1.0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SWC1 F0,0154 (T6) ;BONDdata+154= 0.0 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SWC1 F4,0158 (T7) ;BONDdata+158= -4.0 -//7F079650: -LW A0,0000 (V1) ;A0=p->cur.BONDdata -LWC1 F6,0158 (A0) ;F6=-4.0 -SWC1 F6,015C (A0) ;BONDdata+15C= -4.0 -LW A0,0000 (V1) ;A0=p->cur.BONDdata -LWC1 F12,015C (A0) ;F12= -4.0 -C.LT.S F12,F0 -NOP -BC1FL 7F07968C ;branch if -4.0 >= 0.0, which it never will be... -SWC1 F0,0160 (A0) -MTC1 AT,F8 ;F8=360.0 [43B40000] -NOP -ADD.S F10,F12,F8 ;F10=-4.0 + 360.0: 356.0 -SWC1 F10,015C (A0) ;BONDdata+15C= 356.0 [43B20000] -LW A0,0000 (V1) ;A0=p->cur.BONDdata -//7F079688: -SWC1 F0,0160 (A0) ;BONDdata+160=0.0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -ADDIU V0,R0,00FF ;V0=FF -LUI AT,BF80 -SWC1 F2,0164 (T8) ;BONDdata+164= 1.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -MTC1 AT,F12 ;F12=-1 [BF800000] -LUI AT,4170 -SWC1 F0,0168 (T9) ;BONDdata+168= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -MTC1 AT,F16 ;F16=15.0 [41700000] -SWC1 F0,016C (T0) ;BONDdata+16C= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F0,0170 (T1) ;BONDdata+170= 0.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SWC1 F0,0174 (T2) ;BONDdata+174= 0.0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,2A4C (T3) ;BONDdata+2A4C= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SWC1 F2,0178 (T4) ;BONDdata+178= 1.0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SW R0,017C (T5) ;BONDdata+17C= 0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SWC1 F0,0180 (T6) ;BONDdata+180= 0.0 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SWC1 F0,0184 (T7) ;BONDdata+184= 0.0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SWC1 F0,0188 (T8) ;BONDdata+188= 0.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SW R0,0104 (T9) ;BONDdata+104= 0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SW R0,0108 (T0) ;BONDdata+108= 0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SW R0,010C (T1) ;BONDdata+10C= 0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SW R0,0110 (T2) ;BONDdata+110= 0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SW A1,0114 (T3) ;BONDdata+114= 1 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SW A1,0118 (T4) ;BONDdata+118= 1 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SW R0,011C (T5) ;BONDdata+11C= 0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SW A1,0120 (T6) ;BONDdata+120= 1 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SW R0,0124 (T7) ;BONDdata+124= 0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SW A1,0128 (T8) ;BONDdata+128= 1 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F0,012C (T9) ;BONDdata+12C= 0.O -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SW R0,0130 (T0) ;BONDdata+130= 0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SW A2,0134 (T1) ;BONDdata+134=-1 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SW A1,0138 (T2) ;BONDdata+138= 1 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,013C (T3) ;BONDdata+13C= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SW R0,0140 (T4) ;BONDdata+140= 0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SW A2,0144 (T5) ;BONDdata+144=-1 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SW V0,03D0 (T6) ;BONDdata+3D0= FF -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SW V0,03D4 (T7) ;BONDdata+3D4= FF -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SW V0,03D8 (T8) ;BONDdata+3D8= FF -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F0,03DC (T9) ;BONDdata+3DC= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F12,03E0 (T0) ;BONDdata+3E0=-1.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F12,03E4 (T1) ;BONDdata+3E4=-1.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SW V0,03E8 (T2) ;BONDdata+3E8= FF -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SW V0,03EC (T3) ;BONDdata+3EC= FF -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SW V0,03F0 (T4) ;BONDdata+3F0= FF -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SW V0,03F4 (T5) ;BONDdata+3F4= FF -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SW V0,03F8 (T6) ;BONDdata+3F8= FF -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SW V0,03FC (T7) ;BONDdata+3FC= FF -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SWC1 F0,0400 (T8) ;BONDdata+400= 0.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F0,0404 (T9) ;BONDdata+404= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F12,018C (T0) ;BONDdata+18C=-1.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SWC1 F12,0190 (T1) ;BONDdata+190=-1.0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SWC1 F0,0194 (T2) ;BONDdata+194= 0.0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,0198 (T3) ;BONDdata+198= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SW A3,042C (T4) ;BONDdata+42C= 2 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SW R0,0430 (T5) ;BONDdata+430= 0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SWC1 F0,0204 (T6) ;BONDdata+204= 0.0 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SWC1 F0,0208 (T7) ;BONDdata+208= 0.0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SWC1 F0,020C (T8) ;BONDdata+20C= 0.0 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F0,0210 (T9) ;BONDdata+210= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F0,0214 (T0) ;BONDdata+214= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SW R0,0218 (T1) ;BONDdata+218= 0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SW R0,0220 (T2) ;BONDdata+220= 0 -LW T3,0000 (V1) ;T3=p->cur.BONDdata -SWC1 F0,0224 (T3) ;BONDdata+224= 0.0 -LW T4,0000 (V1) ;T4=p->cur.BONDdata -SW R0,0200 (T4) ;BONDdata+200= 0 -LW T5,0000 (V1) ;T5=p->cur.BONDdata -SH R0,03B4 (T5) ;BONDdata+3B4= 0 -LW T6,0000 (V1) ;T6=p->cur.BONDdata -SH R0,03B6 (T6) ;BONDdata+3B6= 0 -LW T7,0000 (V1) ;T7=p->cur.BONDdata -SWC1 F16,29C0 (T7) ;BONDdata+29C0= 15.0 -LW T8,0000 (V1) ;T8=p->cur.BONDdata -SH A2,2A04 (T8) ;BONDdata+2A04=-1 -LW T9,0000 (V1) ;T9=p->cur.BONDdata -SWC1 F0,2A08 (T9) ;BONDdata+2A08= 0.0 -LW T0,0000 (V1) ;T0=p->cur.BONDdata -SWC1 F0,2A0C (T0) ;BONDdata+2A0C= 0.0 -LW T1,0000 (V1) ;T1=p->cur.BONDdata -SW R0,2A6C (T1) ;BONDdata+2A6C= 0 -LW T2,0000 (V1) ;T2=p->cur.BONDdata -SW R0,2A70 (T2) ;BONDdata+2A70= 0 -//7F0798A8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -+_+ - -7F0A4DD0 D9900 set control style A0 to current playerdata - accepts: A0=control style - fries: V0,V1,T0,T1,T2,T3,T4,T6,T7,T8,T9,F4,F6 -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T6,0000 (V1) ;T6=cur.BONDdata -MTC1 A0,F4 -LUI T9,8005 -SW A0,2A58 (T6) ;BONDdata+2A58= style -LW T7,0000 (V1) ;T7=cur.BONDdata -CVT.S.W F6,F4 ;F6=(float) style -ADDIU V0,R0,000A -SW A0,2A5C (T7) ;BONDdata+2A5C= style -LW T8,0000 (V1) ;T8=cur.BONDdata -SWC1 F6,2A60 (T8) ;BONDdata+2A60= (float) style -LB T9,84D0 (T9) ;T9=800484D0: selected language -BLEZ T9,+3 ;if english-ish, V0=A -NOP -BEQ R0,R0,+1 ;if japanese-ish, V0=E -ADDIU V0,R0,000E -// -MULTU V0,A0 -LW T2,0000 (V1) ;T2=cur.BONDdata -ADDIU T3,R0,0001 -MFLO T0 ;T0=style * language vertical spacing -SUBU T1,R0,T0 ;T1=0-spacing -SW T1,2A64 (T2) ;BONDdata+2A64= vertical spacing to entry -LW T4,0000 (V1) ;T4=cur.BONDdata -JR RA -SW T3,2A68 (T4) ;BONDdata+2A68=1: diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/Player death animations.txt b/notes/GE Documentation/Actor-Specific Data and Animations/Player death animations.txt deleted file mode 100644 index 05f13cd..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/Player death animations.txt +++ /dev/null @@ -1,225 +0,0 @@ -800364D8 0x15748 12 longs, probably offsets - -most likely death animations - -//7F006160: determine number of entries, save to 8003650C -LUI A0,8003 -ADDIU A0,A0,64D8 -SLL T0,R0,0x2 -ADDU T1,A0,T0 -LW T3,0000 (T1) ;T3=800364D8: 000030B8, first of values -LUI V1,8003 -ADDIU V1,V1,650C -SW R0,0000 (V1) ;0->8003650C: counter of values -BEQ T3,R0,7F0061A8 -OR V0,R0,R0 ;V0=counter -ADDIU T4,V0,0001 -//7F00618C: -SLL T2,T4,0x2 -ADDU T9,A0,T2 -LW T5,0000 (T9) ;retrieve value -SW T4,0000 (V1) ;save running total -OR V0,T4,R0 -BNEL T5,R0,7F00618C ;keep indexing -ADDIU T4,V0,0001 -//7F0061A8: - - -Used here when blowing a player up in multiplayer. Recalls a random entry -7F080B34: recall and use player death animation, or something like that -... -//7F080BC4: -JAL 7000A450 ;ret. V0=rand -SW V0,0044 (SP) -LUI T9,8003 -LW T9,650C (T9) ;#entries -LW T8,0044 (SP) -LUI T2,8003 -LUI T3,8007 -DIVU T8,T9 -MFHI T0 -SLL T1,T0,0x2 ;T0=random entry in range -ADDU T2,T2,T1 -LW T2,64D8 (T2) ;load the animation offset -LW T3,9538 (T3) ;T3=80069538: p->animation binaries -MFC1 A2,F20 -BNEZ T9,7F080C08 -NOP -BREAK -ANDI A1,V0,0001 -LUI A3,3F80 -JAL 7F08EA48 -ADDU A0,T2,T3 ;final animation value - -//7F08B3AC: -LUI A3,8003 -LW A3,650C (A3) ;A3=#ani -OR A1,R0,R0 -OR S0,R0,R0 -BLEZ A3,7F08B400 ;skip if stupid -LUI T9,8003 -ADDIU V0,T9,64D8 ;V0=800364D8: base for ani table -LUI V1,8007 -SLL T1,A3,0x2 ;T1=entry -> offset -ADDU A0,T1,V0 ;A0=entry -LW V1,9538 (V1) -LW A2,1284 (T0) ;A2=player's cur animation; T0=playerdata -LW T2,0000 (V0) -//7F08B3E0: -ADDIU V0,V0,0004 ;span the list, looking for a hit -SLTU AT,V0,A0 -ADDU T3,T2,V1 -BNE A2,T3,7F08B3F8 -NOP -ADDIU A1,R0,0001 -//7F08B3F8: -BNEL AT,R0,7F08B3E0 -LW T2,0000 (V0) -//7F08B400: -BEQ A1,R0,7F08B418 -LUI AT,3F00 -LW A2,1284 (T0) -MTC1 AT,F12 -BEQ R0,R0,7F08B470 -SW A2,009C (SP) -//7F08B418: -JAL 7000A450 -SWC1 F2,0094 (SP) -LUI T4,8003 -LW T4,650C (T4) -LUI T7,8003 -LUI T8,8007 -DIVU V0,T4 -MFHI T5 -SLL T6,T5,0x2 -ADDU T7,T7,T6 -LW T7,64D8 (T7) -LW T8,9538 (T8) -LW T0,0000 (S1) -LUI AT,3F00 -ADDU T1,T7,T8 -SW T1,009C (SP) -MTC1 AT,F12 -LWC1 F2,0094 (SP) -BNEZ T4,7F08B46C -NOP -BREAK -LW A2,1284 (T0) -MTC1 R0,F14 -NOP -SWC1 F14,008C (SP) -BEQ R0,R0,7F08B858 -SWC1 F14,0088 (SP) - - - - -[minor edit so they use less and follow 0A method] -000030B8 001A -000031DC 001B -000032C8 001C -000033AC 001D -000034D4 001E -000035C8 001F -000036D8 0020 -0000384C 0021 -000039C0 0022 -00003AF0 0023 -00003C10 0024 -00003D04 0025 - -!REVISED! -//7F006168: 0x3AC98 -00004040 *SLL T0,R0,0x1 -- -852B0000 *LH T3,0000 (T1) - -//7F00618C: 0x3ACBC -000C5040 *SLL T2,T4,0x1 -- -85EF0000 *LH T5,0000 (T9) ;retrieve value - -//7F080BC4: 0xB56F4 - -JAL 7000A450 ;ret. V0=rand - -SW V0,0044 (SP) - -LUI T9,8003 - -LW T9,650C (T9) #entries - -LW T8,0044 (SP) - -LUI T2,8003 -3C0B8003 *LUI T3,8003 -53200003 BEQL T9,R0,+3 -00004025 OR T0,R0,R0 -0319001B DIVU T8,T9 -00004010 MFHI T0 -00084840 *SLL T1,T0,0x1 ;T0=random entry in range -01495021 ADDU T2,T2,T1 -854A64D8 *LH T2,64D8 (T2) ;load the animation offset -000A5080 +SLL T2,T2,0x2 -014B2021 ADDU A0,T2,T3 ;final animation value -4406A000 MFC1 A2,F20 - -ANDI A1,V0,0001 - -LUI A3,3F80 - -JAL 7F08EA48 -8C849D6C LW A0,9D6C (A0) ;T3=table of animation binary pointers - - -//7F08B3AC: 0xBFEDC -LUI A3,8003 -LW A3,650C (A3) ;A3=8003650C+offset: #ani -OR A1,R0,R0 -OR S0,R0,R0 -BLEZ A3,7F08B400 ;skip if stupid -LUI T9,8003 -ADDIU V0,T9,64D8 ;V0=800364D8: base for ani table -//7F08B3C8: 0xBFEF8 -00074840 *SLL T1,A3,0x1 ;T1=entry -> offset -01222021 ADDU A0,T1,V0 ;A0=entry -27239D6C *ADDIU V1,9D6C (T9) ;V1=80029D6C: pointers to animation binaries -8D061284 LW A2,1284 (T0) ;T0=cur playerdata -844A0000 *LH T2,0000 (V0) ;T2=ani # -//7F08B3DC: 0xBFF0C -000A5080 *SLL T2,T2,0x2 - *ADDIU V0,V0,0002 - -SLTU AT,V0,A0 - -ADDU T3,T2,V1 -8D6B0000 *LW T3,0000 (T3) -50CB0001 *BEQL A2,T3,7F08B3F8 - -ADDIU A1,R0,0001 -//7F08B3F8: 0xBFF28 -5420FFF8 *BNEL AT,R0,7F08B3DC -844A0000 *LH T2,0000 (V0) -//7F08B400: -BEQ A1,R0,7F08B418 -LUI AT,3F00 -LW A2,1284 (T0) -MTC1 AT,F12 -BEQ R0,R0,7F08B470 -SW A2,009C (SP) -//7F08B418: 0xBFF48 -JAL 7000A450 -SWC1 F2,0094 (SP) -3C188003 *LUI T8,8003 -8F0C650C *LW T4,650C (T8) -59800003 *BLEZL T4,+3 -00006825 *OR T5,R0,R0 -004C001B -DIVU V0,T4 -00006810 -MFHI T5 -000D7040 *SLL T6,T5,0x1 ;offset in table -030E7821 *ADDU T7,T8,T6 -85EF64D8 *LH T7,64D8 (T7) ;T7=ani# -000F7880 *SLL T7,T7,0x2 -8E280000 -LW T0,0000 (S1) ;T0=specific playerdata -3C013F00 -LUI AT,3F00 -01F84821 -ADDU T1,T7,T8 -8D299D6C *LW T1,9D6C (T1) ;80029D6C+ -AFA9009C SW T1,009C (SP) -44816000 MTC1 AT,F12 -C7A20094 LWC1 F2,0094 (SP) -00000000 -NOP -00000000 *NOP -LW A2,1284 (T0) -MTC1 R0,F14 -NOP -SWC1 F14,008C (SP) -BEQ R0,R0,7F08B858 -SWC1 F14,0088 (SP) \ No newline at end of file diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/cuff-o-tron.txt b/notes/GE Documentation/Actor-Specific Data and Animations/cuff-o-tron.txt deleted file mode 100644 index b8f1890..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/cuff-o-tron.txt +++ /dev/null @@ -1,238 +0,0 @@ -cuff value pulled from setup in 7F005C3C -stored to player data +0x41C - -summary of below. - Note that the characters below were identified from the various hand models. The list should be accurate. - Also, although model numbers differ, heads 4A, 4B, 4C are identical. 4D is unused -Cuff 0 Blue suit (default values when not otherwise set) - body: 0xAE8C7 default: 17 - head: 0xAE8CB default: 4B -Cuff 1 Brosnan (mp) - body: 0xAE957 default: 05 - head: 0xAEA3F default: 4E -Cuff 2 Jungle camo - body: 0xAE93F default: 18 - head: 0xAEA33 default: 4C -Cuff 3 Boiler suit - body: 0xAE933 default: 16 - head: 0xAEA27 default: 4A -Cuff 4 Snowsuit - body: 0xAE94B default: 19 - head: 0xAE8CB default: 4B [shared with bluesuit] -Cuff 5 Connery - body: 0xAE963 default: 05 - head: 0xAEA4B default: 4E -Cuff 6 Moore - body: 0xAE96F default: 05 - head: 0xAEA57 default: 4E -Cuff 7 Dalton - body: 0xAE97B default: 05 - head: 0xAEA63 default: 4E -Cuff 8 Variable Bonds - body: 0xAE98B default: 05 - head: 0xAEA6F default: 4E - -Patch to allow snowsuit it's own head entry: -AEA24: -100000xx BEQ R0,R0, -240D004A ADDIU T5,R0,004A -//+4 to normal address -100000xx BEQ R0,R0, -240D004C ADDIU T5,R0,004C -//new snowsuit -100000xx BEQ R0,R0, -240D004B ADDIU T5,R0,004B - -//change registers for entry only -0xA3AED 0D -0xAEA45 - AD - -RESULT: -AEA24 000E 10000006 240D004A 10000004 240D -AEA37 0007 02240D00 4B240D -AEA45 0001 AD - -in 21990: -change entry 2 to 7F079EFC, entry 4 to 7F079F04 - -34282 - 0002 9EFC -3428B 0001 04 - - ------------ -note: bluesuit is default; values initilaized at 7F079D94 (body, head) - -recalled @ 7F079DD4: -LUI T7,8008 -LW T7,A0B0 (T7) -LW V1,041C (T7) //cuff for player -SLTIU AT,V1,0009 //must be 0-8 -BEQ AT,R0,7F079EA4 //skip recall when invalid -SLL T3,V1,0x2 //T3=cuff->offset -LUI AT,8005 -ADDU AT,AT,T3 -LW T3,4FE4 (AT) //80054FE4: pull TLB pointer for routine setting body model for each -JR T3 -NOP - -7F079E00: 3-boiler suit -ADDIU T2,R0,0016 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) - -7F079E0C: 2-jungle bond -ADDIU T2,R0,0018 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) - -7F079E18: 4-snowsuit bond -ADDIU T2,R0,0019 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) - -7F079E24: 1-Brosnan Tux (from multiplayer) -ADDIU T2,R0,0005 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) - -7F079E30: 5-Connery Tux (according to cuff images) -ADDIU T2,R0,0005 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) - -7F079E3C: 6-Moore Tux (according to cuff images) -ADDIU T2,R0,0005 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) - -7F079E48: 7-Dalton Tux (according to cuff images) -ADDIU T2,R0,0005 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) - -7F079E54: 8-variable bond heads, based off selection on folder screen; defaults to 05/4E -BEQ V0,R0,7F079E88 -ADDIU T3,R0,0005 -ADDIU AT,R0,0001 -BEQ V0,AT,7F079E90 //V0=selected Bond -ADDIU T2,R0,0005 -ADDIU AT,R0,0002 -BEQ V0,AT,70F79E98 -ADDIU T4,R0,0005 -ADDIU AT,R0,0003 -BEQ V0,AT,7F079EA0 -ADDIU T9,R0,0005 -BEQ R0,R0,7F079EA4 -NOP -//7F079E88: -BEQ R0,R0,7F079EA4 -SW T3,0044 (SP) -//7F079E90: -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) -//7F079E98: -BEQ R0,R0,7F079EA4 -SW T4,0044 (SP) -SW T9,0044 (SP) - -7F079EA4: -BEQ V0,R0,7F079ED8 //take branch on solo, setting head -SLTIU AT,V1,0009 -//7F079EAC: MP only routine retrieving head based on player number -ADDIU AT,R0,0001 -BEQ V0,AT,7F079F48 -ADDIU T8,R0,004E //default head - Brosnan Tux -ADDIU AT,R0,0002 -BEQ V0,AT,7F079F50 -ADDIU T5,R0,004E -ADDIU AT,R0,0003 -BEQ V0,AT,7F079F58 -ADDIU T6,R0,004E -BEQ R0,R0,7F079F84 -NOP -//7F079ED8: pull head using cuff value -BEQ AT,R0,7F079F84 -SLL T8,V1,0x2 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,5008 (AT) -JR T8 -NOP - -7F079EF4: 3-boiler bond head -ADDIU T5,R0,004A -BEQ R0,R0,7F079F84 -SW T5,0040 (SP) - -7F079F00: 2-jungle bond head -ADDIU T6,R0,004C -BEQ R0,R0,7F079F84 -SW T6,0040 (SP) - -7F079F0C: 1-Bronsnan Tux head (from multiplayer) -ADDIU T7,R0,004E -BEQ R0,R0,7F079F84 -SW T7,0040 (SP) - -7F079F18: 5-Connery Tux head (according to cuff images) -ADDIU T3,R0,004E -BEQ R0,R0,7F079F84 -SW T3,0040 (SP) - -7F079F24: 6-Moore Tux (according to cuff images) -ADDIU T2,R0,004E -BEQ R0,R0,7F079F84 -SW T2,0040 (SP) - -7F079F30: 7-Dalton Tux (according to cuff images) -ADDIU T4,R0,004E -BEQ R0,R0,7F079F84 -SW T4,0040 (SP) - -7F079F3C: 8-Variable Body -ADDIU T9,R0,004E -BEQ R0,R0,7F079F84 -SW T9,0040 (SP) - -7F079F48: mp player 2 -BEQ R0,R0,7F079F84 -SW T8,0040 (SP) -//7F079F50: mp player 3 -BEQ R0,R0,7F079F84 -SW T5,0040 (SP) -//7F079F58: mp player 4 -BEQ R0,R0,7F079F84 -SW T6,0040 (SP) -//7F079F60: this bugger looks like the routine that pulls specific MP character body/heads -JAL 7F09B150 -NOP -JAL 7F0102BC -OR A0,V0,R0 -JAL 7F09B150 -SW V0,0040 (SP) -JAL 7F01035C -OR A0,V0,R0 -SW V0,0044 (SP) - -7F079F84: -LUI T7,8003 -LW T7,6494 (T7) //CURRENT MODE (intro camera, 1st person, etc) -ADDIU AT,R0,0003 //testing for swirl -BNE T7,AT,7F079FA0 -LUI T3,8008 -LW T3,99E0 (T3) //800799E0: -SW T3,0048 (SP) -//7F079FA0: think this disables 1st person display -JAL 7F09A464 //V0=#players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F07A1BC -LW T7,0044 (SP) -JAL 7F05CF5C //clear left gun -ADDIU A0,R0,0001 -JAL 7F05CF5C //clear right gun -OR A0,R0,R0 -//7F079FC4: -etc... \ No newline at end of file diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/embedded DL.txt b/notes/GE Documentation/Actor-Specific Data and Animations/embedded DL.txt deleted file mode 100644 index d210e0e..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/embedded DL.txt +++ /dev/null @@ -1,20 +0,0 @@ -Object embedded in 21990: player gait - -OBJ TABLE 8003C580 1B7F0: -00 01 0000 8003C5E0 00000000 00000000 00000000 8003C598 -00 02 0000 8003C5F0 8003C580 00000000 00000000 8003C5B0 -00 02 0000 8003C60C 8003C598 00000000 00000000 8003C5C8 -00 02 0000 8003C628 8003C5B0 00000000 00000000 00000000 - -01 object 8003C5E0 1B850 -00000001 8003C598 00000000 00000000 - -02 position 8003C5F0 1B860 static player position -00000000 00000000 00000000 0001 0002 FFFF FFFF 8003C5B0 00000000 - -02 position 8003C60C 1B87C x gait -3F96C81D 422493D6 00000000 0002 0003 FFFF FFFF 8003C5C8 00000000 - -02 position 8003C628 1B898 z gait -C024DDA0 43F036EA 00000000 0003 0000 FFFF FFFF 00000000 00000000 - diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/perspective.txt b/notes/GE Documentation/Actor-Specific Data and Animations/perspective.txt deleted file mode 100644 index dacd73a..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/perspective.txt +++ /dev/null @@ -1,1055 +0,0 @@ -7F0234A8: -ADDIU SP,SP,FFE0 -LW T6,0030 (SP) -SW RA,001C (SP) -SW R0,0014 (SP) -JAL 7F0232E8 -SW T6,0010 (SP) -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0232E8: process body (A0) + head (A1); A2=body obj.header, A3=head obj.header -SLL T7,A0,0x2 A0=body# -ADDU T7,T7,A0 -LUI T8,8004 -ADDIU T8,T8,DE10 -SLL T7,T7,0x2 -ADDU V0,T7,T8 V0=body/head entry in table (A0*0x14) -LUI AT,8005 -LWC1 F6,1D90 (AT) F6=80051D90: global body scale multiplier? 0.1 -LWC1 F4,0008 (V0) obj. scale -ADDIU SP,SP,FFC8 -LWC1 F10,000C (V0) obj. y off. -MUL.S F8,F4,F6 obj. scale * 0.1 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) save {8003DE10: body/head table} -SW A0,0038 (SP) save body# -OR S0,A2,R0 S0=body obj.header -OR S1,A3,R0 S1=head obj.header -SW A1,003C (SP) save head# -SWC1 F8,0034 (SP) save converted scale -SW R0,002C (SP) -ADDIU A0,R0,000C linked routine now grabs 80079E3C -SW V0,0024 (SP) save table address for body -JAL 7F0927BC - ADDIU SP,SP,FFE8 - SW RA,0014 (SP) - JAL 7F09B150 - LUI V0,8008 - JR RA - LW V0,A0B8 (V0) - SW A0,0018 (SP) - LW T6,0018 (SP) - LUI T7,8008 - LW RA,0014 (SP) - ADDU T7,T7,T6 - LBU T7,9E30 (T7) T7=80079E30+offset - ADDIU SP,SP,0018 - SRAV V0,T7,V0 - ANDI T8,V0,0001 - JR RA - OR V0,T8,R0 -SWC1 F10,0030 (SP) save obj. y off. -//7F02334C: if it returned true, multiply further by 0.8... -BEQ V0,R0,7F023364 -LWC1 F16,0034 (SP) F16=converted scale -LUI AT,8005 -LWC1 F18,1D94 (AT) F18=80051D94: another scale mod? 0.8 -MUL.S F4,F16,F18 -SWC1 F4,0034 (SP) -//7F023364: -LW T9,0000 (S0) T9=pointer to body's object table; S0=body obj.header -LW T0,0024 (SP) T0=body table address -BNEZ T9,7F02337C -OR A0,S0,R0 A0=body obj. header -JAL 7F07654C -LW A1,0004 (T0) -//7F02337C: -JAL 7F075CF4 prep object for use - ADDIU SP,SP,FFE8 - SW RA,0014 (SP) - ADDIU T6,R0,0001 - OR A1,A0,R0 A1=obj.header - SW T6,001C (A0) set object as in-use! - LW A0,0000 (A0) A0=pointer to object table - JAL 7F075B1C compute #group entries, and probably prep - SW A1,0018 (SP) - LW A1,0018 (SP) A1=obj.header - SH V0,0014 (A1) save #group entries - LW RA,0014 (SP) - ADDIU SP,SP,0018 - JR RA - NOP -OR A0,S0,R0 A0=body obj. header -LW T1,0024 (SP) T1=body table address -LW V0,003C (SP) V0=head# -LBU T2,0011 (T1) T2=head flag -BNEL T2,R0,7F0233F4 skip if head is merged -LW T1,004C (SP) -BLTZL V0,7F0233F4 skip if head# is random or invalid (negative) -LW T1,004C (SP) -LW T3,0008 (S0) T3=pointer to body's obj.offsets -LW T4,0010 (T3) T4=pointer to offset for head placeholder (I think...) -BEQ T4,R0,7F0233F0 skip if there isn't one... -SW T4,002C (SP) save head placeholder -LW T6,0000 (S1) T6=pointer to head obj.table -SLL T7,V0,0x2 -ADDU T7,T7,V0 -BNEZ T6,7F0233D8 -OR A0,S1,R0 A0=head obj.header -SLL T7,T7,0x2 -LUI A1,8004 -ADDU A1,A1,T7 A1=head table address -JAL 7F07654C load body/head using recall string A1 -LW A1,DE14 (A1) A1=pointer to head's text recall string -//7F0233D8: -JAL 7F075CF4 prep object for use -OR A0,S1,R0 A0=head obj.header -LH T8,0014 (S0) T8=#group entries in body should be 0x61 -LH T9,0014 (S1) T9=#group entries in head should be 0x2 -ADDU T0,T8,T9 -SH T0,0014 (S0) save total group entries to body (should be 0x63) -LW T1,004C (SP) ??? - came from caller {this run=0} -//7F0233F4: produce and fill an object instance entry if not present? -BNEL T1,R0,7F02340C -LW T2,004C (SP) -JAL 7F06C23C I think this produces and fills an object instance entry... -OR A0,S0,R0 A0=body obj.header -SW V0,004C (SP) save object instance entry address -LW T2,004C (SP) T2=same -//7F02340C: -BEQ T2,R0,7F023490 -OR A0,T2,R0 A0=more of the same -JAL 7F06CE78 save [float] object's scale (A1) to obj. instance entry (A0) - MTC1 A1,F12 - JR RA - SWC1 F12,0014 (A0) -LW A1,0034 (SP) A1=converted scale value -LW A0,004C (SP) A0=object instance entry -JAL 7F06CE84 - MTC1 A1,F12 - JR RA - SWC1 F12,00B8 (A0) -LW A1,0030 (SP) A1=obj y off. -BEQ S1,R0,7F023490 quit if head obj.header not present or invalid -LW T3,0024 (SP) T3=body table address -LBU T4,0011 (T3) T4=head flag -BNEL T4,R0,7F023494 quit if merged head -LW RA,001C (SP) -LH T5,0014 (S0) T5=body group# total -LH T6,0014 (S1) T6=head group# total -OR A2,S1,R0 A2=head obj.header -SUBU T7,T5,T6 -SH T7,0014 (S0) save the original body group# total (0x61) -LW A1,002C (SP) A1=head placeholder pointer -JAL 7F06C3B4 I think this sets up the head pointers and stuff - ADDIU SP,SP,FFE8 - SW A2,0020 (SP) A2=head obj.header - OR A2,A1,R0 A2=head placeholder pointer - SW RA,0014 (SP) - SW A1,001C (SP) save head placeholder pointer - LW A1,0008 (A0) A1=body obj.header (f/obj instance) - SW A0,0018 (SP) save body obj.header - JAL 7F076030 - LW A3,0020 (SP) A3=head obj.header - LW T6,0020 (SP) T6=head obj.header - LW A0,0018 (SP) A0=body obj.header - JAL 7F075D2C - LW A1,0000 (T6) A1=head obj.table - LW RA,0014 (SP) - ADDIU SP,SP,0018 - JR RA - NOP -LW A0,004C (SP) A0=object instance entry (?) -LW T8,0048 (SP) ??? - from caller {0 this run} -BNEL T8,R0,7F023494 -LW RA,001C (SP) -LH T9,000C (S1) T9=#obj.offsets in head -BLEZL T9,7F023494 quit if invalid -LW RA,001C (SP) -LW T0,0008 (S1) T0=pointer to head's obj.offsets -LW A1,0000 (T0) A1=sunglasses offset -BEQL A1,R0,7F023494 skip if shades aren't present -LW RA,001C (SP) -JAL 7F06C79C rip table command, probably for the pointer to DL used - ADDIU SP,SP,FFE0 - SW RA,0014 (SP) - LHU T6,0000 (A1) T6=obj.table command type - OR A2,R0,R0 - LW A3,0010 (A0) - ANDI T7,T6,00FF - ADDIU T8,T7,FFFF T8=command alone -1 - SLTIU AT,T8,0018 - BEQ AT,R0,7F06C840 if not one of the 18, too bad... - SLL T8,T8,0x2 - LUI AT,8005 - ADDU AT,AT,T8 - LW T8,4AF8 (AT) offset into TLB table @ 80054AF8 - JR T8 - NOP - etc... -LW A0,004C (SP) A0=object instance entry (?) -SW R0,0000 (V0) -LW RA,001C (SP) -//7F023494: return! -LW V0,004C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0038 - -+-+-+-+-+-+ -Bond from eye intro: -//7F009088: -ADDIU A0,R0,0005 -ADDIU A1,R0,004E -LW A2,0064 (SP) -LW A3,0618 (SP) -JAL 7F0234A8 set up character instance -SW R0,0010 (SP) -//7F0090A0: -LUI S1,8003 -ADDIU S1,S1,A7F4 S1=8002A7F4 [9A64]: - -Perspective is same as y offset! -character perspective y offset -nat 0.966100 0.966100 -ourumov 1.077800 1.077800 -boris 0.970200 0.970200 -valentin 0.932400 0.932400 -jaws 1.199000 1.199000 -oddjob 0.787800 0.787800 -rosika 0.885300 0.885300 -develpers 1.044600 1.044600 - -remove perspective. use y offset instead -remove scale but do test if lf_hand. If so, use 0.1 (ignore camonat) -all are accurate to ten-thousandths, so maybe just divide by 10000 (2710 | 461C4000) - -Fun! it loads the watch menu *directly* from the weapon index - - doesn't even use the character menu entry *at all*! - -!eliminate need for scale in watch! -0B334F 0005 05C4245088 - -Routine that calls watch menu (suit_lf_hand) -7F07E7CC: -... -//7F07E81C: 0xB334C recall scale -LUI AT,8004 -LWC1 F4,E14C (AT) direct call of scale value! -LUI AT,8005 -LWC1 F6,5088 (AT) F6=80055088: -LUI A0,8008 -LW A0,A0B0 (A0) A0=playerdata -MUL.S F8,F4,F6 F8=0.01 (0.1 * 0.1) -ADDIU A0,A0,0230 -MFC1 A1,F8 -JAL 7F06CE78 - MTC1 A1,F12 - JR RA - SWC1 F12,0014 (A0) -NOP -//7F07E848: -LUI AT,3F00 -MTC1 AT,F10 F10=0.5 -LUI AT,8003 -LWC1 F16,65A8 (AT) F16=800365A8=1.1: ??? -MTC1 R0,F0 -LUI A0,8008 -MUL.S F18,F10,F16 F18=0.55 -LUI T8,8007 -LW T8,9538 (T8) T8=80069538: -LW A0,A0B0 (A0) -LUI T9,0000 -ADDIU T9,T9,42C8 -MFC1 A3,R0 -SWC1 F18,0010 (SP) -OR A2,R0,R0 -SWC1 F0,0014 (SP) -ADDU A1,T8,T9 A1=pointer T8 + 0x42C8... -JAL 7F06FCA8 -ADDIU A0,A0,0230 -//7F07E894: resets the watch hand's movement registers -LUI T0,8008 -LW T0,A0B0 (T0) -SW R0,0220 (T0) 0->playerdata+0x220 -//7F07E8A0: -LW RA,001C (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -reset all objects -7F000F50: -LUI T6,8004 -LW T6,DE10 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ T6,R0,7F000F88 -SW A0,0018 (SP) -LUI T7,8004 -ADDIU V0,T7,DE10 -LW V1,0000 (V0) -SW R0,0000 (V1) -//7F000F78: pull header pointer, then set in-use flag to 0 -LW V1,0014 (V0) -ADDIU V0,V0,0014 -BNEL V1,R0,7F000F78 -SW R0,0000 (V1) -//7F000F88: -ORI T0,R0,0002 -JAL 7000A450 -LUI T8,8003 -ADDU AT,T8,T0 -LB T8,CD00 (AT) -BEQL T8,R0,7F000FB0 -SB T8,CD04 (AT) -DIVU V0,T8 -MFHI T9 -SB T9,CD04 (AT) -//7F000FB0: -BGTZ T0,7F000F8C -ADDI T0,T0,FFFF -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 - -+-+-+-+-+ -Stuff that writes to the perspective register - -init at startup, before legal: -7F09A2E0: init floats in player statistics -LUI AT,3F80 -MTC1 AT,F0 -LUI AT,8008 -SWC1 F0,9F54 (AT) 1.0->perspective pl.1 -LUI AT,8008 -SWC1 F0,9F4C (AT) 1.0->handicap (health) pl.1 -LUI AT,8008 -SWC1 F0,9FC4 (AT) 1.0->perspective pl.2 -LUI AT,8008 -SWC1 F0,9FBC (AT) 1.0->handicap (health) pl.2 -LUI AT,8008 -SWC1 F0,A034 (AT) 1.0->perspective pl.3 -LUI AT,8008 -SWC1 F0,A02C (AT) 1.0->handicap (health) pl.3 -LUI AT,8008 -SWC1 F0,A0A4 (AT) 1.0->perspective pl.4 -LUI AT,8008 -JR RA -SWC1 F0,A09C (AT) 1.0->handicap (health) pl.4 - - - -PROBLEM!!! - This bugger here writes perspective before setting up playerdata/guardata - Going to have to push perspective write into character load/write - On the plus side, this would fix the solo perspective writting issue... -solo perspective setting routine: -//7F0BDC94: test if multiplayer -JAL 7F09A464 ret. V0=#players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F0BDCC8 branch on multi -OR S0,R0,R0 -//7F0BDCA8: solo perspective -LUI AT,3F80 -MTC1 AT,F4 -MTC1 AT,F6 -SB R0,006A (S4) 0->? -SB R0,006B (S4) 0->? -SWC1 F4,005C (S4) 1.0->handicap (health) -BEQ R0,R0,7F0BDD34 -SWC1 F6,0064 (S4) 1.0->perspective -//7F0BDCC8: multi perspective -LUI S1,8008 -ADDIU S1,S1,9EF0 -JAL 7F014758 RETURNS V0=scenario - LUI V0,8003 - JR RA - LW V0,B540 (V0) V0=8002B540: -NOP -BNE V0,S3,7F0BDCE8 branch if not "License to Kill" -NOP -BEQ R0,R0,7F0BDCF4 -SWC1 F20,005C (S1) 43480000->handicap (LtK) -JAL 7F0103AC returns handicap for player - SLL T6,A0,0x2 - LUI T7,8007 - ADDU T7,T7,T6 - LW T7,97A8 (T7) T7=800697A8+offset: player's handicap setting - LUI AT,8003 - SLL T8,T7,0x3 - ADDU AT,AT,T8 - JR RA - LWC1 F0,B49C (AT) F0=setting's value -OR A0,S0,R0 A0=player# -SWC1 F0,005C (S1) save handicap -//7F0BDCF4: -JAL 7F0103D0 retrieves F0=perspective based on selected character setting - SLL T6,A0,0x2 - LUI V0,8003 - ADDU V0,V0,T6 - LW V0,B524 (V0) V0=player's MPchar setting - SLL T7,A0,0x2 - LUI AT,8003 - BGEZ V0,7F010408 - SLL T8,V0,0x2 - SUBU T7,T7,A0 - SLL T7,T7,0x2 T7=player# *0xC, used as default for MPchar - LUI AT,8003 - ADDU AT,AT,T7 - JR RA - LWC1 F0,B1A0 (AT) - //7F010408: when a character selected (not default -1) - SUBU T8,T8,V0 - SLL T8,T8,0x2 T8=MPchar# * 0xC - ADDU AT,AT,T8 - LWC1 F0,B1A0 (AT) F0=perspective from the mpcharacter menu - JR RA - NOP -OR A0,S0,R0 -ADDIU S0,S0,0001 S0=next player -ADDIU S1,S1,0070 S1=next entry's address -BNE S0,S3,7F0BDCD0 -SWC1 F0,FFF4 (S1) save player's perspective -JAL 7F010420 - LUI T6,8003 - LW T6,B538 (T6) T6=game length setting - LUI V0,8003 - SLL T7,T6,0x2 - SUBU T7,T7,T6 - SLL T7,T7,0x2 game length * 0xC - ADDU V0,V0,T7 - JR RA - LW V0,AFF8 (V0) V0=time limit -NOP -JAL 7F0BFC28 -OR A0,V0,R0 A0=time limit -JAL 7F010444 - LUI T6,8003 - LW T6,B538 (T6) - LUI V0,8003 - SLL T7,T6,0x2 - SUBU T7,T7,T6 - SLL T7,T7,0x2 - ADDU V0,V0,T7 - JR RA - LW V0,AFFC (V0) V0=score limit -NOP -JAL 7F0BFC34 -OR A0,V0,R0 -JAL 7F0101D8 copy aim/sight settings to all players - LUI T6,8003 - LW T6,B53C (T6) - LUI T8,8003 - ADDIU T8,T8,B510 - SLL T7,T6,0x2 - ADDU V0,T7,T8 - LBU V1,0003 (V0) - LUI AT,8008 - SB V1,9F5A (AT) - LBU A0,0002 (V0) - LUI AT,8008 - SB A0,9F5B (AT) - LUI AT,8008 - SB V1,9FCA (AT) - LUI AT,8008 - SB A0,9FCB (AT) - LUI AT,8008 - SB V1,A03A (AT) - LUI AT,8008 - SB A0,A03B (AT) - LUI AT,8008 - SB V1,A0AA (AT) - LUI AT,8008 - JR RA - SB A0,A0AB (AT) -NOP -//7F0BDD34: - - -later, who knows what it does... -7F0798B8: -LUI T6,8008 -LW T6,A0B4 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,4339 -MTC1 AT,F6 -LWC1 F4,0064 (T6) F4=player's perspective -LUI AT,3F80 -MTC1 AT,F10 -MUL.S F8,F4,F6 F8=PERSPECTIVE/185 -... - - -later... DEFINATELY THE DISPLAY VIEWPORT -7F081478: -LUI V1,8008 -LUI T0,8008 -ADDIU T0,T0,A0B0 -ADDIU V1,V1,A0B4 -LW T6,0000 (V1) -LW V0,0000 (T0) -ADDIU SP,SP,FFC8 -SW RA,001C (SP) -LWC1 F6,0064 (T6) F6=perspective -LWC1 F4,0500 (V0) ??? 0x500 in playerdata -LUI AT,41F0 -MTC1 AT,F2 -... -+-+-+-+-+ -7F079CF0-7F07A4A0 solo character load -ADDIU SP,SP,FEE8 -SW RA,001C (SP) -JAL 7F089EE4 -NOP -LUI T6,8008 -LW T6,A0B0 (T6) -SWC1 F0,0114 (SP) -LW T7,00A8 (T6) -LW V0,0004 (T7) -BNEL V0,R0,7F07A440 -LW T7,001C (V0) -JAL 7F05CF30 -OR A0,R0,R0 -SW V0,00F0 (SP) -JAL 7F05CF30 -ADDIU A0,R0,0001 -SW V0,00EC (SP) -SW R0,00E8 (SP) -JAL 7F05CF48 -OR A0,R0,R0 -SW V0,00E4 (SP) -JAL 7F05CF48 -ADDIU A0,R0,0001 -//7F079D4C: copy a generic 08 PP7 to stack... this section extroneous -LUI T9,8003 -ADDIU T9,T9,65AC T9=800265AC: a copy of a 08 PP7 object from the 21990 binary -SW V0,00E0 (SP) -ADDIU T4,T9,0084 -ADDIU T8,SP,0054 -//7F079D60: iterate to copy yo -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T9) -SW AT,FFF8 (T8) -LW AT,FFFC (T9) -BNE T9,T4,7F079D60 -SW AT,FFFC (T8) -//7F079D84: -LW AT,0000 (T9) -OR A0,R0,R0 A0=right hand -JAL 7F05DA44 ret. V0=ammo in wep. -SW AT,0000 (T8) -ADDIU T5,R0,0017 default body -ADDIU T6,R0,004B default head -LUI A0,8008 -SW V0,0048 (SP) -SW T5,0044 (SP) -SW T6,0040 (SP) -SW R0,0038 (SP) -JAL 7F07DE64 -LW A0,A0B0 (A0) -JAL 7F09A464 returns V0=#players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F079F60 branch if multi! -NOP -JAL 7F01D56C WOULD HAVE RETURNED V0=folder# -NOP -//7F079DD4: solo bodies -LUI T7,8008 -LW T7,A0B0 (T7) -LW V1,041C (T7) V1=cuff -SLTIU AT,V1,0009 -BEQ AT,R0,7F079EA4 skip if not a valid cuff -SLL T3,V1,0x2 -LUI AT,8005 -ADDU AT,AT,T3 -LW T3,4FE4 (AT) -JR T3 -NOP -//7F079E00: cuff 3 - Boiler -ADDIU T2,R0,0016 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) -//7F079E0C: cuff 2 - Jungle -ADDIU T4,R0,0018 -BEQ R0,R0,7F079EA4 -SW T4,0044 (SP) -//7F079E18: cuff 4 - Snowsuit -ADDIU T9,R0,0019 -BEQ R0,R0,7F079EA4 -SW T9,0044 (SP) -//7F079E24: cuff 1 - Brosnan Tux -ADDIU T8,R0,0005 -BEQ R0,R0,7F079EA4 -SW T8,0044 (SP) -//7F079E30: cuff 5 - Connery -ADDIU T5,R0,0005 -BEQ R0,R0,7F079EA4 -SW T5,0044 (SP) -//7F079E3C: cuff 6 - Moore -ADDIU T6,R0,0005 -BEQ R0,R0,7F079EA4 -SW T6,0044 (SP) -//7F079E48: cuff 7 - Dalton -ADDIU T7,R0,0005 -BEQ R0,R0,7F079EA4 -SW T7,0044 (SP) -//7F079E54: choose one of four bond models! -BEQ V0,R0,7F079E88 -ADDIU T3,R0,0005 -ADDIU AT,R0,0001 -BEQ V0,AT,7F079E90 -ADDIU T2,R0,0005 -ADDIU AT,R0,0002 -BEQ V0,AT,7F079E98 -ADDIU T4,R0,0005 -ADDIU AT,R0,0003 -BEQ V0,AT,7F079EA0 -ADDIU T9,R0,0005 -BEQ R0,R0,7F079EA4 -NOP -//7F079E88: -BEQ R0,R0,7F079EA4 -SW T3,0044 (SP) -//7F079E90: -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) -//7F079E98: -BEQ R0,R0,7F079EA4 -SW T4,0044 (SP) -//7F079EA0: -SW T9,0044 (SP) -//7F079EA4: -BEQ V0,R0,7F079ED8 -SLTIU AT,V1,0009 -ADDIU AT,R0,0001 -BEQ V0,AT,7F079F48 -ADDIU T8,R0,004E -ADDIU AT,R0,0002 -BEQ V0,AT,7F079F50 -ADDIU T5,R0,004E -ADDIU AT,R0,0003 -BEQ V0,AT,7F079F58 -ADDIU T6,R0,004E -BEQ R0,R0,F7079F84 -NOP -//7F079ED8: solo heads -BEQ AT,R0,7F079F84 -SLL T8,V1,0x2 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,5008 (AT) -JR T8 -NOP -//7F079EF4: cuff 3 - Boiler -ADDIU T5,R0,004A -BEQ R0,R0,7F079F84 -SW T5,0040 (SP) -//7F079F00: cuff 2 - Jungle -ADDIU T6,R0,004C -BEQ R0,R0,7F079F84 -SW T6,0040 (SP) -//7F079F0C: cuff 1 - Brosnan Tux -ADDIU T7,R0,004E -BEQ R0,R0,7F079F84 -SW T7,0040 (SP) -//7F079F18: cuff 5 - Connery -ADDIU T3,R0,004E -BEQ R0,R0,7F079F84 -SW T3,0040 (SP) -//7F079F24: cuff 6 - Moore -ADDIU T2,R0,004E -BEQ R0,R0,7F079F84 -SW T2,0040 (SP) -//7F079F30: cuff 7 - Dalton -ADDIU T4,R0,004E -BEQ R0,R0,7F079F84 -SW T4,0040 (SP) -//7F079F3C: cuff 8 - Selected Bond Head -ADDIU T9,R0,004E -BEQ R0,R0,7F079F84 -SW T9,0040 (SP) -//7F079F48: -BEQ R0,R0,7F079F84 -SW T8,0040 (SP) -//7F079F50: -BEQ R0,R0,7F079F84 -SW T5,0040 (SP) -//7F079F58: -BEQ R0,R0,7F079F84 -SW T6,0040 (SP) -//7F079F60: AEA90 multiplayer bodies/heads -JAL 7F09B150 ;cur.player -NOP -JAL 7F01035C ;selected MP body for player A0 -OR A0,V0,R0 ;A0=V0: cur.player -JAL 7F09B150 ;cur.player -SW V0,0044 (SP) ;SP+44=body# -JAL 7F0102BC ;selected MP head for player A0 -OR A0,V0,R0 -SW V0,0040 (SP) ;SP+40=head# -//7F079F84: AEAB4 determine if camera code parsing... -LUI T7,8003 -LW T7,6494 (T7) ;T7=80036494: cur.camera mode -ADDIU AT,R0,0003 -BNE T7,AT,7F079FA0 ;branch if not 3: mp rotating swirly -LUI T3,8008 -LW T3,99E0 (T3) ;T3=800799E0: starting r.hand weapon -SW T3,0048 (SP) ;SP+48=r.weapon -//7F079FA0: AEAD0 load and initialize solo character -JAL 7F09A464 ;ret. V0=#players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F07A1BC ;branch if multi -LW T7,0044 (SP) -JAL 7F05CF5C ;clear left hand -ADDIU A0,R0,0001 -JAL 7F05CF5C ;clear right hand -OR A0,R0,R0 -//7F079FC4: AEAF4 copy data for body to playerdata and obj. instance -ADDIU A0,SP,0100 ;A0=SP+100: -LW A1,00EC (SP) ;A1=: -JAL 7F0CBAF4 -LW A2,00E0 (SP) ;A2=: -JAL 7F05CF18 returns V0=address of one of the obj.headers -OR A0,R0,R0 ;A0=0 -LW T2,0044 (SP) T2=body -//7F079FE0: -LUI T9,8004 -ADDIU T9,T9,DE10 -SLL T4,T2,0x2 change to SLL, T4,T2,0x1 for mini table -ADDU T4,T4,T2 -SLL T4,T4,0x2 -ADDU V1,T4,T9 -LW T8,0000 (V1) T8=body obj.header -SW V0,00FC (SP) -ADDIU T3,SP,0100 -LW AT,0000 (T8) copy obj.header to 0x810 in playerdata! -OR A0,V0,R0 -SW AT,0000 (V0) -LW T7,0004 (T8) -SW T7,0004 (V0) -LW AT,0008 (T8) -SW AT,0008 (V0) -LW T7,000C (T8) -SW T7,000C (V0) -LW AT,0010 (T8) -SW AT,0010 (V0) -LW T7,0014 (T8) -SW T7,0014 (V0) -LW AT,0018 (T8) -SW AT,0018 (V0) -LW T7,001C (T8) -SW T7,001C (V0) -SW V1,0028 (SP) save body's table entry pointer -SW T3,0010 (SP) save SP+0x100 -//7F07A050: prep the object for load, filling header and such -LW A3,00E4 (SP) 0x14820, same as SP+0xE0. could be a memory total... -LW A2,00F0 (SP) immediately after an object, so pointer to next, or instance? -JAL 7F0764A4 loads object and fills in the header data -LW A1,0004 (V1) A1=body's string pointer -LW V1,0028 (SP) V1=body's table entry pointer -JAL 7F0BD188 please pretty please tell me this isn't the decompressor... -LW A0,0004 (V1) A0=body's string pointer -//7F07A06C: copy data for body to playerdata and obj. instance -LW T5,0040 (SP) T5=head# -LUI T7,8004 -ADDIU T7,T7,DE10 -SLL T8,T5,0x2 for smaller table change to SLL T8,T5,0x1 -ADDU T8,T8,T5 -SLL T8,T8,0x2 -ADDU V1,T8,T7 -LW T3,0000 (V1) T3=head's obj.header -ADDIU T0,V0,003F T0=V0+0x3F V0=size of last model+0x3F - here, body -LW T1,00F0 (SP) T1=pointer to body's model in rdram -ORI T2,T0,003F -LW AT,0000 (T3) AT=offset to object table if already loaded... -XORI T4,T2,003F T4=size pushed to the 0x40 boundry -ADDIU T0,T4,005F -ORI T9,T0,003F -ADDU A0,T1,T4 A0=end of last object, start of next -XORI T0,T9,003F T0=size + 0x40, pushed to 0x40 boundry (T4+0x40) -SW AT,0000 (A0) -LW T9,0004 (T3) copy obj.header to this crazy address -ADDIU T5,SP,0100 -ADDU A2,T1,T0 A2=location for next model binary -SW T9,0004 (A0) -LW AT,0008 (T3) -SW AT,0008 (A0) -LW T9,000C (T3) -SW T9,000C (A0) -LW AT,0010 (T3) -SW AT,0010 (A0) -LW T9,0014 (T3) -SW T9,0014 (A0) -LW AT,0018 (T3) -SW AT,0018 (A0) -LW T9,001C (T3) -SW T9,001C (A0) -LW T6,00E4 (SP) T6=max size? 14820 -SW T0,00E8 (SP) T0=size of model in rdram -SW A0,00F8 (SP) -SW V1,0028 (SP) -SW T5,0010 (SP) -LW A1,0004 (V1) A1=pointer to head string [V1=head table entry] -JAL 7F0764A4 loads object and fills in header data -SUBU A3,T6,T0 A3=amount of available memory left (14820-body size) -LW V1,0028 (SP) V1=head table entry -JAL 7F0BD188 ret. V0=size of object in rdram expansion? -LW A0,0004 (V1) A0=pointer to head string -//7F07A120: -LW V1,00E8 (SP) V1=body size -LW T4,00F0 (SP) T4=pointer to body model in rdram -LW A0,00FC (SP) A0=playerdata + 0x810 -ADDU V1,V0,V1 V1=update amount of memory already cluttered -ADDIU V1,V1,003F -ORI T8,V1,003F -XORI T7,T8,003F -ADDIU V1,T7,00FB -ORI T3,V1,003F -XORI T9,T3,003F T9=total used memory pushed to 0x40 boundry -ADDU T2,T4,T7 T2=start of next model -SW T2,0038 (SP) save next model location -JAL 7F075CF4 prep body for use? -SW T9,00E8 (SP) save total used memory -JAL 7F075CF4 prep head for use; set use flag, compute group numbers -LW A0,00F8 (SP) A0=pointer to a copy of head's header in model data area -//7F07A160: -LW A1,00FC (SP) A1=body header in playerdata -LW T7,00F8 (SP) T7=copy of head's header in model data -LW V1,00E8 (SP) V1=total used memory -LH T8,0014 (A1) T8=body's group # (61 if head not present) -LH T4,0014 (T7) T4=head's group # (2 if head) -LW T6,00F0 (SP) T6=body model in rdram -LW A0,0038 (SP) A0=next object! -ADDU V0,T8,T4 V0=sum of groupcodes (should be 63 for characters) -ADDIU V0,V0,000A offset for the space made to copy header, etc -SLL T2,V0,0x2 multiply by 4... -ADDU A2,T6,V1 A2=next object's address -ADDU V1,T2,V1 total memory used + group codes->offset -ADDIU V1,V1,003F -ORI T3,V1,003F -XORI T9,T3,003F total ushed to 0x40 boundry -SW T9,00E8 (SP) save it yo -JAL 7F075FAC -SW V0,0030 (SP) save group# + A -LW V0,0030 (SP) -LW T6,0038 (SP) save object instance pointer -SH V0,0002 (T6) -BEQ R0,R0,7F07A234 -LW A3,00F8 (SP) A3=head's header copied to model area in rdram -//7F07A1BC: AECEC load and initialize multi character -SLL T8,T7,0x2 for smaller table use SLL T8,T7,0x1 -ADDU T8,T8,T7 -LUI T4,8004 -ADDIU T4,T4,DE10 ;T4=8003DE10: body/head table -SLL T8,T8,0x2 -ADDU V1,T8,T4 ;V1=p->entry -LW T2,0000 (V1) ;T2=p->body header -SW T2,00FC (SP) ;SP+FC=T2: p->body header -LW T9,0000 (T2) ;T9=body header+0: p->table (nonzero if object loaded) -OR A0,T2,R0 ;A0=T2: p->body header -BNEL T9,R0,7F07A1F8 ;branch if already loaded -LW T5,0040 (SP) -JAL 7F07654C ;loads in object name A1 with header A0 -LW A1,0004 (V1) ;A1=p->recall string -//7F07A1F4: -LW T5,0040 (SP) -LUI T7,8004 -ADDIU T7,T7,DE10 ;T4=8003DE10: body/head table -SLL T6,T5,0x2 for smaller table use SLL T6,T5,0x1 -ADDU T6,T6,T5 -SLL T6,T6,0x2 -ADDU V1,T6,T7 ;V1=p->entry -LW A3,0000 (V1) ;A3=p->body header -LW T8,0000 (A3) ;T8=body header+0: p->table (nonzero if object loaded) -OR A0,A3,R0 ;A0=A3: p->body header -BNEL T8,R0,7F07A238 ;branch if already loaded -LW T4,0038 (SP) -LW A1,0004 (V1) ;A1=p->recall string -JAL 7F07654C ;loads in object name A1 with header A0 -SW A3,00F8 (SP) ;SP+F8= p->body header -LW A3,00F8 (SP) ;A3=p->head header -//7F07A234: load models -LW T4,0038 (SP) ;T4=SP+38: -LW A0,0044 (SP) ;A0=body -LW A1,0040 (SP) ;A1=head -LW A2,00FC (SP) ;A2=p->body header -SW R0,0010 (SP) ;SP+10=sunglasses flag -JAL 7F0232E8 ;load body and head -SW T4,0014 (SP) ;SP+14: -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T2,0000 (V1) T2=playerdata -LUI AT,8005 -SW V0,00D4 (T2) save obj. instance pointer! -LW T9,0000 (V1) T9=playerdata -LWC1 F6,502C (AT) F6=8005502C: ??? -LW A0,00D4 (T9) A0=obj. instance pointer -LWC1 F4,0014 (A0) F4=object scale -MUL.S F8,F4,F6 -MFC1 A1,F8 -JAL 7F06CE78 save converted scale -NOP -//7F07A284: handle player position -LUI V1,8008 -LW V1,A0B0 (V1) -LW A3,0114 (SP) -LW A0,00A8 (V1) A0=obj. position pointer (8006) -LW A1,00D4 (V1) A1=obj. instance pointer -LW T3,0014 (A0) T3=room pointer -SW R0,0014 (SP) -ADDIU A2,A0,0008 A2=offset to xyz positions -JAL 7F0200BC copies positions or adjusts them or something -SW T3,0010 (SP) -//7F07A2AC: -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T6,0000 (A3) T6=playerdata -ADDIU T5,R0,0006 -LW T7,00A8 (T6) T7=obj. position pointer (8006) -SB T5,0000 (T7) type specify to 6 (character) -LW T8,0000 (A3) -LW T4,00A8 (T8) T4=p->obj. pos -LW A2,0004 (T4) A2=p->guarddata -LW T2,0014 (A2) T2='guard' bitflags -ORI T9,T2,0001 -SW T9,0014 (A2) uhm, it can't have just set sunglasses on... -LW V1,0000 (A3) V1=playerdata -LW A1,00A8 (V1) A1=p->obj. pos -LW A0,00D4 (V1) A0=obj. instance -SW A2,0110 (SP) save guarddata pointer -JAL 7F06CC0C -ADDIU A1,A1,0008 A1=offset to xyz position -//7F07A2F4: -LUI T3,8008 -LW T3,A0B0 (T3) -LW A1,0114 (SP) -JAL 7F06CD3C -LW A0,00D4 (T3) A0=obj. instance -JAL 7F09B244 ret. V0=3rd person model based on the item# used -LW A0,0048 (SP) weapon (1-0x20) -BLTZ V0,7F07A428 returns model for selected weapon -SW V0,004C (SP) save it yo -JAL 7F09A464 returns # players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F07A3FC branch if multiplayer -LW T6,00F0 (SP) T6=body model -//7F07A32C: -LW V0,00E8 (SP) V0=memory consumed by the character+data -ADDIU A0,R0,0001 -ADDU T5,T6,V0 T5=end of character data -ADDIU V0,V0,00C7 -ORI T7,V0,003F -XORI T8,T7,003F -SW T5,00DC (SP) save endpoint -JAL 7F05CF18 returns, in this case, playerdata + 0x830 -SW T8,00E8 (SP) effectively, size - 0x40 -LW T4,004C (SP) T4=3rd person object in hand -LUI T9,8004 -ADDIU T9,T9,A228 object,header,&scale table -SLL T2,T4,0x2 -SUBU T2,T2,T4 -SLL T2,T2,0x2 -ADDU V1,T2,T9 -LW T3,0000 (V1) header for object -SW V0,00F4 (SP) -ADDIU T5,SP,0100 -LW AT,0000 (T3) copy weapon header to playerdata -OR A0,V0,R0 -SW AT,0000 (V0) -LW T7,0004 (T3) -SW T7,0004 (V0) -LW AT,0008 (T3) -SW AT,0008 (V0) -LW T7,000C (T3) -SW T7,000C (V0) -LW AT,0010 (T3) -SW AT,0010 (V0) -LW T7,0014 (T3) -SW T7,0014 (V0) -LW AT,0018 (T3) -SW AT,0018 (V0) -LW T7,001C (T3) -SW T7,001C (V0) -LW T4,00E8 (SP) T4=memory consumed -LW T2,00E4 (SP) T2=max memory -LW T8,00F0 (SP) T8=body model (start of this clump) -SW V1,0028 (SP) save p->weapon's table entry -SW T5,0010 (SP) save SP+0x100 -LW A1,0004 (V1) A1=model's string -SUBU A3,T2,T4 A3=room left -JAL 7F0764A4 loads object and fills in header data -ADDU A2,T8,T4 A2=address for next model data -LW V1,0028 (SP) V1=p->weapon's table entry -JAL 7F0BD188 load or expand or whatnot -LW A0,0004 (V1) A0=model's string -JAL 7F075CF4 set object in use -LW A0,00F4 (SP) -BEQ R0,R0,7F07A408 -LW T6,00DC (SP) T6=endpoint -//7F07A3FC: -SW R0,00DC (SP) -SW R0,00F4 (SP) -LW T6,00DC (SP) -//7F07A408: -LW T3,00F4 (SP) T3=weapon header in playerdata -LW A0,0110 (SP) A0=guardata -LW A1,004C (SP) A1=3rd person weapon# -LW A2,0048 (SP) A2=weapon type (ie. 5=silpp7) -OR A3,R0,R0 -SW T6,0010 (SP) save model endpoint -JAL 7F052214 returns V0=obj. position entry for weapon -SW T3,0014 (SP) save weapon header in playerdata -//7F07A428: -LW A0,0110 (SP) A0=guarddata -JAL 7F023A94 -ADDIU A1,R0,0000 -BEQ R0,R0,7F07A494 -LW RA,001C (SP) -//7F07A43C: Multi! -LW T7,001C (V0) -OR A0,V0,R0 -LW T8,0020 (T7) -BNEL T8,R0,7F07A494 -LW RA,001C (SP) -LW T4,0014 (V0) -ADDIU A1,R0,0000 -ORI T2,T4,0001 -JAL 7F023A94 -SW T2,0014 (V0) -LUI V1,8008 -LW V1,A0B0 (V1) -LW A1,00A8 (V1) -LW A0,00D4 (V1) -JAL 7F06CC0C -ADDIU A1,A1,0008 -LUI T9,8008 -LW T9,A0B0 (T9) -LW A1,0114 (SP) -JAL 7F06CD3C -LW A0,00D4 (T9) -LW RA,001C (SP) -//7F07A494: -ADDIU SP,SP,0118 -JR RA -NOP - -+-+-+-+-+ -hack these routines for scale and perspective: -7F02370C 09 actors: looks up values from table -7F023590 the thing that returns the gender flag! -7F018908 intro routine that loads the heads/bodies; look further into code - thing that pulls perspective; grab from char. table, maybe offset for head \ No newline at end of file diff --git a/notes/GE Documentation/Actor-Specific Data and Animations/player spawning routine.txt b/notes/GE Documentation/Actor-Specific Data and Animations/player spawning routine.txt deleted file mode 100644 index 483f1e7..0000000 --- a/notes/GE Documentation/Actor-Specific Data and Animations/player spawning routine.txt +++ /dev/null @@ -1,564 +0,0 @@ -7F079CF0-7F07A4A0 solo character load -ADDIU SP,SP,FEE8 -SW RA,001C (SP) -JAL 7F089EE4 -NOP -LUI T6,8008 -LW T6,A0B0 (T6) -SWC1 F0,0114 (SP) -LW T7,00A8 (T6) -LW V0,0004 (T7) -BNEL V0,R0,7F07A440 -LW T7,001C (V0) -JAL 7F05CF30 -OR A0,R0,R0 -SW V0,00F0 (SP) -JAL 7F05CF30 -ADDIU A0,R0,0001 -SW V0,00EC (SP) -SW R0,00E8 (SP) -JAL 7F05CF48 -OR A0,R0,R0 -SW V0,00E4 (SP) -JAL 7F05CF48 -ADIU A0,R0,0001 -//7F079D4C: copy a generic 08 PP7 to stack... this section extroneous -LUI T9,8003 -ADDIU T9,T9,65AC ;T9=800265AC: a copy of a 08 PP7 object from the 21990 binary -SW V0,00E0 (SP) -ADDIU T4,T9,0084 -ADDIU T8,SP,0054 -//7F079D60: iterate to copy yo -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T9) -SW AT,FFF8 (T8) -LW AT,FFFC (T9) -BNE T9,T4,7F079D60 -SW AT,FFFC (T8) -//7F079D84: -LW AT,0000 (T9) -OR A0,R0,R0 ;A0=right hand -JAL 7F05DA44 ;ret. V0=ammo in wep. -SW AT,0000 (T8) -ADDIU T5,R0,0017 ;default body -ADDIU T6,R0,004B ;default head -LUI A0,8008 -SW V0,0048 (SP) -SW T5,0044 (SP) -SW T6,0040 (SP) -SW R0,0038 (SP) -JAL 7F07DE64 -LW A0,A0B0 (A0) -JAL 7F09A464 ;returns V0=#players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F079F60 ;branch if multi! -NOP -JAL 7F01D56C ;WOULD HAVE RETURNED V0=folder# - ADDIU SP,SP,FFE8 - SW RA,0014 (SP) - LUI A0,8003 - JAL 7F01EBC0 - SW A0,0000 (SP) - JR RA - OR V0,R0,R0 - LW A0,A8E8 (A0) - LW RA,0014 (SP) - JR RA - NOP -NOP -//7F079DD4: solo bodies -LUI T7,8008 -LW T7,A0B0 (T7) -LW V1,041C (T7) ;V1=cuff -SLTIU AT,V1,0009 -BEQ AT,R0,7F079EA4 ;skip if not a valid cuff -SLL T3,V1,0x2 -LUI AT,8005 -ADDU AT,AT,T3 -LW T3,4FE4 (AT) -JR T3 -NOP -//7F079E00: -ADDIU T2,R0,0016 -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) -//7F079E0C: -ADDIU T4,R0,0018 -BEQ R0,R0,7F079EA4 -SW T4,0044 (SP) -//7F079E18: -ADDIU T9,R0,0019 -BEQ R0,R0,7F079EA4 -SW T9,0044 (SP) -//7F079E24: -ADDIU T8,R0,0005 -BEQ R0,R0,7F079EA4 -SW T8,0044 (SP) -//7F079E30: -ADDIU T5,R0,0005 -BEQ R0,R0,7F079EA4 -SW T5,0044 (SP) -//7F079E3C: -ADDIU T6,R0,0005 -BEQ R0,R0,7F079EA4 -SW T6,0044 (SP) -//7F079E48: -ADDIU T7,R0,0005 -BEQ R0,R0,7F079EA4 -SW T7,0044 (SP) -//7F079E54: choose one of four bond models! -BEQ V0,R0,7F079E88 -ADDIU T3,R0,0005 -ADDIU AT,R0,0001 -BEQ V0,AT,7F079E90 -ADDIU T2,R0,0005 -ADDIU AT,R0,0002 -BEQ V0,AT,7F079E98 -ADDIU T4,R0,0005 -ADDIU AT,R0,0003 -BEQ V0,AT,7F079EA0 -ADDIU T9,R0,0005 -BEQ R0,R0,7F079EA4 -NOP -//7F079E88: -BEQ R0,R0,7F079EA4 -SW T3,0044 (SP) -//7F079E90: -BEQ R0,R0,7F079EA4 -SW T2,0044 (SP) -//7F079E98: -BEQ R0,R0,7F079EA4 -SW T4,0044 (SP) -//7F079EA0: -SW T9,0044 (SP) -//7F079EA4: -BEQ V0,R0,7F079ED8 -SLTIU AT,V1,0009 -ADDIU AT,R0,0001 -BEQ V0,AT,7F079F48 -ADDIU T8,R0,004E -ADDIU AT,R0,0002 -BEQ V0,AT,7F079F50 -ADDIU T5,R0,004E -ADDIU AT,R0,0003 -BEQ V0,AT,7F079F58 -ADDIU T6,R0,004E -BEQ R0,R0,F7079F84 -NOP -//7F079ED8: solo heads -BEQ AT,R0,7F079F84 -SLL T8,V1,0x2 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,5008 (AT) -JR T8 -NOP -//7F079EF4: -ADDIU T5,R0,004A -BEQ R0,R0,7F079F84 -SW T5,0040 (SP) -//7F079F00: -ADDIU T6,R0,004C -BEQ R0,R0,7F079F84 -SW T6,0040 (SP) -//7F079F0C: -ADDIU T7,R0,004E -BEQ R0,R0,7F079F84 -SW T7,0040 (SP) -//7F079F18: -ADDIU T3,R0,004E -BEQ R0,R0,7F079F84 -SW T3,0040 (SP) -//7F079F24: -ADDIU T2,R0,004E -BEQ R0,R0,7F079F84 -SW T2,0040 (SP) -//7F079F30: -ADDIU T4,R0,004E -BEQ R0,R0,7F079F84 -SW T4,0040 (SP) -//7F079F3C: -ADDIU T9,R0,004E -BEQ R0,R0,7F079F84 -SW T9,0040 (SP) -//7F079F48: -BEQ R0,R0,7F079F84 -SW T8,0040 (SP) -//7F079F50: -BEQ R0,R0,7F079F84 -SW T5,0040 (SP) -//7F079F58: -BEQ R0,R0,7F079F84 -SW T6,0040 (SP) -//7F079F60: multiplayer bodies/heads -JAL 7F09B150 -NOP -JAL 7F01035C -OR A0,V0,R0 -JAL 7F09B150 -SW V0,0044 (SP) -JAL 7F0102BC -OR A0,V0,R0 -SW V0,0040 (SP) -//7F079F84: -LUI T7,8003 -LW T7,6494 (T7) -ADDIU AT,R0,0003 -BNE T7,AT,7F079FA0 -LUI T3,8008 -LW T3,99E0 (T3) -SW T3,0048 (SP) -//7F079FA0: load and initialize solo character -JAL 7F09A464 ;ret. V0=#players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F07A1BC ;branch if multi -LW T7,0044 (SP) -JAL 7F05CF5C ;clear left hand -ADDIU A0,R0,0001 -JAL 7F05CF5C ;clear right hand -OR A0,R0,R0 -//7F079FC4: copy data for body to playerdata and obj. instance -ADDIU A0,SP,0100 -LW A1,00EC (SP) -JAL 7F0CBAF4 - ADDU V0,A1,A2 - SW A1,0000 (A0) ;??? POINTER - SW V0,0004 (A0) ;??? pointer + 0x14820 - SW A1,0008 (A0) - JR RA - SW V0,000C (A0) -LW A2,00E0 (SP) -JAL 7F05CF18 ;returns V0=address of one of the obj.headers - LUI T6,8008 - LW T6,A0B0 (T6) - SLL T7,A0,0x5 - ADDU V0,T6,T7 - JR RA - ADDIU V0,V0,0810 -OR A0,R0,R0 -LW T2,0044 (SP) ;T2=body -//7F079FE0: -LUI T9,8004 -ADDIU T9,T9,DE10 -SLL T4,T2,0x2 ;change to SLL, T4,T2,0x1 for mini table -ADDU T4,T4,T2 -SLL T4,T4,0x2 -ADDU V1,T4,T9 -LW T8,0000 (V1) ;T8=body obj.header -SW V0,00FC (SP) -ADDIU T3,SP,0100 -LW AT,0000 (T8) ;copy obj.header to 0x810 in playerdata! -OR A0,V0,R0 -SW AT,0000 (V0) -LW T7,0004 (T8) -SW T7,0004 (V0) -LW AT,0008 (T8) -SW AT,0008 (V0) -LW T7,000C (T8) -SW T7,000C (V0) -LW AT,0010 (T8) -SW AT,0010 (V0) -LW T7,0014 (T8) -SW T7,0014 (V0) -LW AT,0018 (T8) -SW AT,0018 (V0) -LW T7,001C (T8) -SW T7,001C (V0) -SW V1,0028 (SP) ;save body's table entry pointer -SW T3,0010 (SP) ;save SP+0x100 -//7F07A050: prep the object for load, filling header and such -LW A3,00E4 (SP) ;0x14820, same as SP+0xE0. could be a memory total... -LW A2,00F0 (SP) ;immediately after an object, so pointer to next, or instance? -JAL 7F0764A4 ;loads object and fills in the header data -LW A1,0004 (V1) ;A1=body's string pointer -LW V1,0028 (SP) ;V1=body's table entry pointer -JAL 7F0BD188 ;please pretty please tell me this isn't the decompressor... -LW A0,0004 (V1) ;A0=body's string pointer -//7F07A06C: copy data for body to playerdata and obj. instance -LW T5,0040 (SP) ;T5=head# -LUI T7,8004 -ADDIU T7,T7,DE10 -SLL T8,T5,0x2 ;for smaller table change to SLL T8,T5,0x1 -ADDU T8,T8,T5 -SLL T8,T8,0x2 -ADDU V1,T8,T7 -LW T3,0000 (V1) ;T3=head's obj.header -ADDIU T0,V0,003F ;T0=V0+0x3F V0=size of last model+0x3F - here, body -LW T1,00F0 (SP) ;T1=pointer to body's model in rdram -ORI T2,T0,003F -LW AT,0000 (T3) ;AT=offset to object table if already loaded... -XORI T4,T2,003F ;T4=size pushed to the 0x40 boundry -ADDIU T0,T4,005F -ORI T9,T0,003F -ADDU A0,T1,T4 ;A0=end of last object, start of next -XORI T0,T9,003F ;T0=size + 0x40, pushed to 0x40 boundry (T4+0x40) -SW AT,0000 (A0) -LW T9,0004 (T3) ;copy obj.header to this crazy address -ADDIU T5,SP,0100 -ADDU A2,T1,T0 ;A2=location for next model binary -SW T9,0004 (A0) -LW AT,0008 (T3) -SW AT,0008 (A0) -LW T9,000C (T3) -SW T9,000C (A0) -LW AT,0010 (T3) -SW AT,0010 (A0) -LW T9,0014 (T3) -SW T9,0014 (A0) -LW AT,0018 (T3) -SW AT,0018 (A0) -LW T9,001C (T3) -SW T9,001C (A0) -LW T6,00E4 (SP) ;T6=max size? 14820 -SW T0,00E8 (SP) ;T0=size of model in rdram -SW A0,00F8 (SP) -SW V1,0028 (SP) -SW T5,0010 (SP) -LW A1,0004 (V1) ;A1=pointer to head string [V1=head table entry] -JAL 7F0764A4 ;loads object and fills in header data -SUBU A3,T6,T0 ;A3=amount of available memory left (14820-body size) -LW V1,0028 (SP) ;V1=head table entry -JAL 7F0BD188 ;ret. V0=size of object in rdram expansion? -LW A0,0004 (V1) ;A0=pointer to head string -//7F07A120: -LW V1,00E8 (SP) ;V1=body size -LW T4,00F0 (SP) ;T4=pointer to body model in rdram -LW A0,00FC (SP) ;A0=playerdata + 0x810 -ADDU V1,V0,V1 ;V1=update amount of memory already cluttered -ADDIU V1,V1,003F -ORI T8,V1,003F -XORI T7,T8,003F -ADDIU V1,T7,00FB -ORI T3,V1,003F -XORI T9,T3,003F ;T9=total used memory pushed to 0x40 boundry -ADDU T2,T4,T7 ;T2=start of next model -SW T2,0038 (SP) ;save next model location -JAL 7F075CF4 ;prep body for use? -SW T9,00E8 (SP) ;save total used memory -JAL 7F075CF4 ;prep head for use; set use flag, compute group numbers -LW A0,00F8 (SP) ;A0=pointer to a copy of head's header in model data area -//7F07A160: -LW A1,00FC (SP) ;A1=body header in playerdata -LW T7,00F8 (SP) ;T7=copy of head's header in model data -LW V1,00E8 (SP) ;V1=total used memory -LH T8,0014 (A1) ;T8=body's group # (61 if head not present) -LH T4,0014 (T7) ;T4=head's group # (2 if head) -LW T6,00F0 (SP) ;T6=body model in rdram -LW A0,0038 (SP) ;A0=next object! -ADDU V0,T8,T4 ;V0=sum of groupcodes (should be 63 for characters) -ADDIU V0,V0,000A ;offset for the space made to copy header, etc -SLL T2,V0,0x2 ;multiply by 4... -ADDU A2,T6,V1 ;A2=next object's address -ADDU V1,T2,V1 ;total memory used + group codes->offset -ADDIU V1,V1,003F -ORI T3,V1,003F -XORI T9,T3,003F ;total ushed to 0x40 boundry -SW T9,00E8 (SP) ;save it yo -JAL 7F075FAC -SW V0,0030 (SP) ;save group# + A -LW V0,0030 (SP) -LW T6,0038 (SP) ;save object instance pointer -SH V0,0002 (T6) -BEQ R0,R0,7F07A234 -LW A3,00F8 (SP) ;A3=head's header copied to model area in rdram -//7F07A1BC: load and initialize multi character -SLL T8,T7,0x2 ;for smaller table use SLL T8,T7,0x1 -ADDU T8,T8,T7 -LUI T4,8004 -ADDIU T4,T4,DE10 -SLL T8,T8,0x2 -ADDU V1,T8,T4 -LW T2,0000 (V1) -SW T2,00FC (SP) -LW T9,0000 (T2) -OR A0,T2,R0 -BNEL T9,R0,7F07A1F8 -LW T5,0040 (SP) -JAL 7F07654C -LW A1,0004 (V1) -LW T5,0040 (SP) -LUI T7,8004 -ADDIU T7,T7,DE10 -SLL T6,T5,0x2 ;for smaller table use SLL T6,T5,0x1 -ADDU T6,T6,T5 -SLL T6,T6,0x2 -ADDU V1,T6,T7 -LW A3,0000 (V1) -LW T8,0000 (A3) -OR A0,A3,R0 -BNEL T8,R0,7F07A238 -LW T4,0038 (SP) -LW A1,0004 (V1) -JAL 7F07654C -SW A3,00F8 (SP) -LW A3,00F8 (SP) ;A3=head's header copied to model area in rdram -//7F07A234: -LW T4,0038 (SP) ;T4=object instance pointer! -LW A0,0044 (SP) ;A0=body# -LW A1,0040 (SP) ;A1=head# -LW A2,00FC (SP) ;A2=copy of body header in playerdata (+0x810) -SW R0,0010 (SP) -JAL 7F0232E8 ;returns V0=obj. instance pointer, filled and everything -SW T4,0014 (SP) -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T2,0000 (V1) ;T2=playerdata -LUI AT,8005 -SW V0,00D4 (T2) ;save obj. instance pointer! -LW T9,0000 (V1) ;T9=playerdata -LWC1 F6,502C (AT) ;F6=8005502C: ??? -LW A0,00D4 (T9) ;A0=obj. instance pointer -LWC1 F4,0014 (A0) ;F4=object scale -MUL.S F8,F4,F6 -MFC1 A1,F8 -JAL 7F06CE78 ;save converted scale -NOP -//7F07A284: handle player position -LUI V1,8008 -LW V1,A0B0 (V1) -LW A3,0114 (SP) -LW A0,00A8 (V1) ;A0=obj. position pointer (8006) -LW A1,00D4 (V1) ;A1=obj. instance pointer -LW T3,0014 (A0) ;T3=room pointer -SW R0,0014 (SP) -ADDIU A2,A0,0008 ;A2=offset to xyz positions -JAL 7F0200BC ;copies positions or adjusts them or something -SW T3,0010 (SP) -//7F07A2AC: -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T6,0000 (A3) ;T6=playerdata -ADDIU T5,R0,0006 -LW T7,00A8 (T6) ;T7=obj. position pointer (8006) -SB T5,0000 (T7) ;type specify to 6 (character) -LW T8,0000 (A3) -LW T4,00A8 (T8) ;T4=p->obj. pos -LW A2,0004 (T4) ;A2=p->guarddata -LW T2,0014 (A2) ;T2='guard' bitflags -ORI T9,T2,0001 -SW T9,0014 (A2) ;uhm, it can't have just set sunglasses on... -LW V1,0000 (A3) ;V1=playerdata -LW A1,00A8 (V1) ;A1=p->obj. pos -LW A0,00D4 (V1) ;A0=obj. instance -SW A2,0110 (SP) ;save guarddata pointer -JAL 7F06CC0C -ADDIU A1,A1,0008 ;A1=offset to xyz position -//7F07A2F4: -LUI T3,8008 -LW T3,A0B0 (T3) -LW A1,0114 (SP) -JAL 7F06CD3C -LW A0,00D4 (T3) ;A0=obj. instance -JAL 7F09B244 ;ret. V0=3rd person model based on the item# used -LW A0,0048 (SP) ;weapon (1-0x20) -BLTZ V0,7F07A428 ;returns model for selected weapon -SW V0,004C (SP) ;save it yo -JAL 7F09A464 ;returns # players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F07A3FC ;branch if multiplayer -LW T6,00F0 (SP) ;T6=body model -//7F07A32C: -LW V0,00E8 (SP) ;V0=memory consumed by the character+data -ADDIU A0,R0,0001 -ADDU T5,T6,V0 ;T5=end of character data -ADDIU V0,V0,00C7 -ORI T7,V0,003F -XORI T8,T7,003F -SW T5,00DC (SP) ;save endpoint -JAL 7F05CF18 ;returns, in this case, playerdata + 0x830 -SW T8,00E8 (SP) ;effectively, size - 0x40 -LW T4,004C (SP) ;T4=3rd person object in hand -LUI T9,8004 -ADDIU T9,T9,A228 ;object,header,&scale table -SLL T2,T4,0x2 -SUBU T2,T2,T4 -SLL T2,T2,0x2 -ADDU V1,T2,T9 -LW T3,0000 (V1) ;header for object -SW V0,00F4 (SP) -ADDIU T5,SP,0100 -LW AT,0000 (T3) ;copy weapon header to playerdata -OR A0,V0,R0 -SW AT,0000 (V0) -LW T7,0004 (T3) -SW T7,0004 (V0) -LW AT,0008 (T3) -SW AT,0008 (V0) -LW T7,000C (T3) -SW T7,000C (V0) -LW AT,0010 (T3) -SW AT,0010 (V0) -LW T7,0014 (T3) -SW T7,0014 (V0) -LW AT,0018 (T3) -SW AT,0018 (V0) -LW T7,001C (T3) -SW T7,001C (V0) -LW T4,00E8 (SP) ;T4=memory consumed -LW T2,00E4 (SP) ;T2=max memory -LW T8,00F0 (SP) ;T8=body model (start of this clump) -SW V1,0028 (SP) ;save p->weapon's table entry -SW T5,0010 (SP) ;save SP+0x100 -LW A1,0004 (V1) ;A1=model's string -SUBU A3,T2,T4 ;A3=room left -JAL 7F0764A4 ;loads object and fills in header data -ADDU A2,T8,T4 ;A2=address for next model data -LW V1,0028 (SP) ;V1=p->weapon's table entry -JAL 7F0BD188 ;load or expand or whatnot -LW A0,0004 (V1) ;A0=model's string -JAL 7F075CF4 ;set object in use -LW A0,00F4 (SP) -BEQ R0,R0,7F07A408 -LW T6,00DC (SP) ;T6=endpoint -//7F07A3FC: -SW R0,00DC (SP) -SW R0,00F4 (SP) -LW T6,00DC (SP) -//7F07A408: -LW T3,00F4 (SP) ;T3=weapon header in playerdata -LW A0,0110 (SP) ;A0=guardata -LW A1,004C (SP) ;A1=3rd person weapon# -LW A2,0048 (SP) ;A2=weapon type (ie. 5=silpp7) -OR A3,R0,R0 -SW T6,0010 (SP) ;save model endpoint -JAL 7F052214 ;returns V0=obj. position entry for weapon -SW T3,0014 (SP) ;save weapon header in playerdata -//7F07A428: -LW A0,0110 (SP) ;A0=guarddata -JAL 7F023A94 -ADDIU A1,R0,0000 -BEQ R0,R0,7F07A494 -LW RA,001C (SP) -//7F07A43C: Multi! -LW T7,001C (V0) -OR A0,V0,R0 -LW T8,0020 (T7) -BNEL T8,R0,7F07A494 -LW RA,001C (SP) -LW T4,0014 (V0) -ADDIU A1,R0,0000 -ORI T2,T4,0001 -JAL 7F023A94 -SW T2,0014 (V0) -LUI V1,8008 -LW V1,A0B0 (V1) -LW A1,00A8 (V1) -LW A0,00D4 (V1) -JAL 7F06CC0C -ADDIU A1,A1,0008 -LUI T9,8008 -LW T9,A0B0 (T9) -LW A1,0114 (SP) -JAL 7F06CD3C -LW A0,00D4 (T9) -LW RA,001C (SP) -//7F07A494: -ADDIU SP,SP,0118 -JR RA -NOP diff --git a/notes/GE Documentation/Background File Data/Clipping (stan) Files/CLIPPING order flags.txt b/notes/GE Documentation/Background File Data/Clipping (stan) Files/CLIPPING order flags.txt deleted file mode 100644 index 4a366fa..0000000 --- a/notes/GE Documentation/Background File Data/Clipping (stan) Files/CLIPPING order flags.txt +++ /dev/null @@ -1,39 +0,0 @@ -7001385C: copy part of decompression - -The tile advance offset address can be changed. The routine can be rewritten a bit, changing 7F0B2FB8: -SLL T8,T6,0x3 -ADDIU T8,T8,0008 -000EC0C0 -27180008 - -ALSO DO 7F0B2ED4: -SLL T5,T3,0x3 -ADDIU T5,T5,0008 - -Otherwise, you could just change the value on line 7F0B2F6C (0xE7A9C in rom) to '24C60F49', then change the values in 21990 @ 0x201BC to '20283038 40485058 60687078'. That would support up to 14 point tiles. - - - -7F0B2FAC: -LH V1,0006 (V0) //V1=tile's special -SRA T5,V1,0xC //T5=#points -ANDI T6,T5,000F //T6=#points (limit of 15) -ADDU T7,A2,T6 //T7=80040F4C+#points -LBU T8,0000 (T7) //T8=offset for given number of points -ADDU V0,T8,V0 //V0=address for next tile -LW T9,0000 (V0) //T9=p-for next tile -BNEL T9,R0,7F0B2FAC -SW V0,0000 (A1) //current tile address->80040F60 -JR RA -SW A0,0000 (T0) //address for start of clipping file->8007B120 - - -7F0AF144: -LH S0,0006 (A0) //S0=tile's special -SLL T7,A2,0x2 //T7=room# * 4 -SUBU T7,T7,A2 //T7=room# * 3 -SRA T9,S0,0xC //T9=#points -ANDI S0,T9,000F //S0=#points (limit of 15) -BLEZ S0,7F0AF1D4 -OR S1,A0,R0 //S1=address of tile - diff --git a/notes/GE Documentation/Background File Data/Clipping (stan) Files/Solitary Connections.doc b/notes/GE Documentation/Background File Data/Clipping (stan) Files/Solitary Connections.doc deleted file mode 100644 index 0c929bb..0000000 Binary files a/notes/GE Documentation/Background File Data/Clipping (stan) Files/Solitary Connections.doc and /dev/null differ diff --git a/notes/GE Documentation/Background File Data/Clipping (stan) Files/clipping files.txt b/notes/GE Documentation/Background File Data/Clipping (stan) Files/clipping files.txt deleted file mode 100644 index 796ad9c..0000000 --- a/notes/GE Documentation/Background File Data/Clipping (stan) Files/clipping files.txt +++ /dev/null @@ -1,83 +0,0 @@ -Clipping Files - 1172 (z-custom) compressed binaries --------------- - Clipping files outline the area players and objects can validly be located. In addition, they also set the spectral lighting for a given region. The clipping file is composed of tiles, each of which is a 3-10 sided polygon. The format supports up to 15-sided forms, but these can not be processed without patching the handling routine. - - The start of the file itself consists of a series of offsets. The first is always NULL, technically linked to a removed TLB routine but of no use nowadays. The second always points to the first tile in the list, and must do so; it is used as the basis of all the connection values described below. - Further offsets can be included if desired but are not used at runtime. Rare typically used these to indicate tiles belonging to removed rooms. One NULL offset indicates the end of the file offset section. - -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Tile headers are the first 8 bytes of the tile data. They contain a specific 3-byte selection ID, the room ID that appears when a player or object is on the tile, the colour of the light on the tile, and other flags indicating the attributes of the polygon data. - The first three bytes act as a unique tile ID. They are converted to a textual format in setup files and used to look up the tile in the list, linking object positions to unique areas in the stage. The text appears as: -"P" + first two values of header as unsigned decimal value + third byte alpha-numeric value - The first two bytes of the header are an unsigned short integer, converted to decimal form. The third byte is a alpha-numeric string based on this format: -a 00 -a1 01 -a2 02 -a3 03 -a4 04 -a5 05 -a6 06 -a7 07 -b 08 -b1 09 -b2 0A -b3 0B -b4 0C -b5 0D -b6 0E -b7 0F -etc. - The highest values used in the release game were "p#", 78-7F. The physical limit is "z#", C8-CF. - As an example, here are some textual strings and their corresponding header values. -Header string -014E 02 "p334a2" -0070 1A "p112d2" -0494 0A "p1148b2" - - The last three nibbles all indicate points in the tile. These three points are the three extremes of the tile. If you were to circumscribe the polygon, using these three points would contain either the entire form or the largest portion of it. They are actually used for radial triangle generation, which is beyond the scope of this document. Suffice it to say, this should make a triangle that encompasses most of the tile within it. - These values will always be 012 for a triangle, as the first, second, and third points will invariably be at the furthest extremes. Most quads tend to be rectangular, so either 012 or 013 may be used. - ---------------- - X, Y, and Z positions are signed short values relative to the center of the stage. Points in each tile are expected to be counter-clockwise. Each face, or series of two points, also has a connection value. If set to 0000, the player can not walk past that edge of the tile. If set to some other value, this creates a link to another tile in the file. - - Connection values start at 0010, as the initial offset to clipping data is offset by 0x80. To determine the connection value of a given tile, take the current file offset of that tile's header, subtract the initial offset of the first tile, add an additional 0x80 to account for the offset, then divide the result by 8. - This example retrieves the connection value to link to a tile at offset 0x20C, assuming the first tile starts at 0xC. -*subtract initial from target: -0x20C-0xC = 0x200 -*add 0x80, the initial offset for all tiles: -0x200-0x80 = 0x280 -*divide by 8 for the final offset: -0x280/8 = 0x0050 - - The final offset is 0x0050. - - It is very important the Room # matches that of the room to be visualized. Otherwise, objects in the room will not appear unless that room is currently loaded, and players in the room will disappear until stepping on another tile. Since it affects the one room which should be visible, do not allow tiles to cross portals! - --------------- -Header Format: -FFFFFF00 00000000 3-byte selection ID -000000FF 00000000 Room # (1-FF) -00000000 30000000 special attribute - 0 normal tile - 1 kneeling - 3 ladder -00000000 0F000000 4-bit Red lighting component -00000000 00F00000 4-bit Green lighting component -00000000 000F0000 4-bit Blue lighting component -00000000 0000F000 number points in tile (3-F) -00000000 00000F00 extreme point 1 -00000000 000000F0 extreme point 2 -00000000 0000000F extreme point 3 - -Point Format: -FFFF0000 00000000 X position -0000FFFF 00000000 y position -00000000 FFFF0000 Z position -00000000 0000FFFF connection value - -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - The list of tiles ends with a NULL tile header. This is typically followed by the string "unstrict" and extended to 0x20 bytes. This ensures that the routine does not break on a read of 0 points, as all tiles 0-3 points are expected to contain 0x20 data total. - --Zoinkity diff --git a/notes/GE Documentation/Background File Data/Clipping (stan) Files/tile roving.txt b/notes/GE Documentation/Background File Data/Clipping (stan) Files/tile roving.txt deleted file mode 100644 index abfb54e..0000000 --- a/notes/GE Documentation/Background File Data/Clipping (stan) Files/tile roving.txt +++ /dev/null @@ -1,50 +0,0 @@ -7F0B2F2C: E7A5C determines endpoint of clipping file - accepts: A0=p->clipping file, A1=?, A2=? -LUI T0,8008 -ADDIU T0,T0,B120 ;T0=8007B120: table of pointers to room tiles -SW A0,0000 (T0) ;A0->8007B120: save start of file -LW T6,0004 (A0) ;T6=A0+4: p->first room -SUBU V0,A2,A1 -LUI AT,8004 -ADDU T7,T6,V0 -ADDIU T8,T7,FF80 ;T8=T7-0x80: base pointer for connection values -SW T8,0F58 (AT) ;T8->80040F58: save base pointer for all connection values -LW T9,0004 (A0) ;T9=A0+4: p->first room -LUI AT,8004 -LUI A2,8004 -ADDU T1,T9,V0 -SW T1,0F5C (AT) ;T1->80040F5C: p->first room (actual tile list start) -LW T2,0004 (A0) ;T2=A0+4: p->first room -ADDIU A3,A0,0004 ;A3=A0+4 -ADDIU A2,A2,0F4C ;A2=80040F4C: list of tile sizes -BEQ T2,R0,7F0B2F94 ;branch if no stan exceptions present -LUI A1,8004 -LW V1,0000 (A3) ;V1=p->first room -ADDU T3,V1,V0 -//7F0B2F80: loop for each of the exception entries -LW V1,0004 (A3) -SW T3,0000 (A3) -ADDIU A3,A3,0004 -BNEL V1,R0,7F0B2F80 -ADDU T3,V1,V0 -//7F0B2F94: grab first tile -ADDIU V0,A3,0004 ;V0=p->tile -LW T4,0000 (V0) ;T4=tile name and room -ADDIU A1,A1,0F60 ;A1=80040F60: p->final tile -BEQ T4,R0,7F0B2FD0 ;kill if "unstric" -NOP -//7F0B2FA8: loop for each tile -SW V0,0000 (A1) ;V0->80040F60: save current tile as final -LH V1,0006 (V0) ;V1=V0+6: side and division halfword -SRA T5,V1,0xC ;T5=V1>>C: #sides -ANDI T6,T5,000F ;T6=#sides -ADDU T7,A2,T6 ;T7=80040F4C+#sides: p->offset for next tile -LBU T8,0000 (T7) ;T8=offset to next tile -ADDU V0,T8,V0 ;V0+=offset -LW T9,0000 (V0) ;T9=next tile's name and room -BNEL T9,R0,7F0B2FAC ;branch if not "unstric" -SW V0,0000 (A1) -//7F0B2FD0: return -JR RA -SW A0,0000 (T0) ;p->start of stan tile list -> 8007B120 - diff --git a/notes/GE Documentation/Background File Data/Fog Water and Sky/NTSC fog and sky.txt b/notes/GE Documentation/Background File Data/Fog Water and Sky/NTSC fog and sky.txt deleted file mode 100644 index 75eb012..0000000 --- a/notes/GE Documentation/Background File Data/Fog Water and Sky/NTSC fog and sky.txt +++ /dev/null @@ -1,604 +0,0 @@ -80044DC0 current sky -80044E10 start of list - -7F0BAA64: locate and copy enviroment values - accepts: A0=stage#, A1=0 if MP? -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A1,002C (SP) ;SP+2C=A1: ? -SW R0,001C (SP) -JAL 7F09A464 ;V0=#players -SW A0,0028 (SP) ;SP+28=A0: stage# -ADDIU AT,R0,0001 -LW A2,001C (SP) ;A2=0 -LW A3,0028 (SP) ;A3=stage# -BNE V0,AT,7F0BAA94 ;branch if not 1 player -OR T0,V0,R0 ;T0=#players -OR T0,R0,R0 ;T0=0 if solo -//7F0BAA94: set default enviroment -LUI AT,8006 -LWC1 F4,8D70 (AT) ;F4=80058D70: 7F7FFFFF - default near fog -LW T6,002C (SP) ;T6=SP+2C: ? -LUI AT,8004 -MTC1 R0,F6 -SWC1 F4,4DC4 (AT) ;7F7FFFFF->80044DC4: near fog value -LUI AT,8004 -BEQ T6,R0,7F0BAB1C ;skip cutscene env. tests if zero -SWC1 F6,4DC8 (AT) ;0->80044DC8: near fog * intensity of zero -//7F0BAAB8: cutscene env. testing -LUI T1,8004 -ADDIU V1,T1,4E10 ;V1=80044E10: env.table 1 -LW T7,0000 (V1) ;T7=env.stage# -LUI T8,8004 -ADDIU T8,T8,4E10 ;T8=80044E10: env.table 1 -BEQ T7,R0,7F0BAB1C ;branch if at end of list -ADDIU A0,A3,0384 ;A0=stage#+0x384: cutscene env.set offset -//7F0BAAD8: copy enviroment on hit -LW V0,0000 (T8) ;V0=env.stage# -BNE A0,V0,7F0BAB0C ;branch if env.# doesn't match cutscene# -LUI V0,8008 -ADDIU V0,V0,25E8 -SW V1,0000 (V0) ;V1->800825E8: save env.table hit -LUI AT,8008 -SW V1,25EC (AT) ;V1->800825EC: save env.table match start -LUI AT,8008 -ADDIU T9,V1,005C ;T9=V1+0x5C: p->end of entry (next entry) -SW T9,25F0 (AT) ;T9->800825F0: save env.table match endpoint -JAL 7F0BA758 ;copy table 1 enviroment to current -LW A0,0000 (V0) ;A0=p->env.tabel match -BEQ R0,R0,7F0BAC9C -LW RA,0014 (SP) -//7F0BAB0C: loop for each entry -LW V0,005C (V1) ;V0=next env.stage# -ADDIU V1,V1,005C ;V1+=0x5C: p->next entry -BNEZ V0,7F0BAAD8 ;branch if not at end of list -NOP -//7F0BAB1C: offset stage# to current # players -LUI T1,8004 -ADDIU T1,T1,4E10 ;T1=80044E10: env.table 1 -LW A1,0000 (T1) ;A1=env.stage# -LUI T2,8004 -ADDIU T2,T2,4E10 ;T2=80044E10: env.table 1 -BEQ A1,R0,7F0BAB98 ;branch if at end of list -OR V1,T1,R0 ;V1=T1: env.table 1 -SLL T3,T0,0x2 -SUBU T3,T3,T0 -SLL T3,T3,0x3 -ADDU T3,T3,T0 -SLL T3,T3,0x2 ;T3=#players * 100 (0x64) -ADDU A0,A3,T3 ;A0=MPstage# -LW V0,0000 (T2) ;V0=env.stage# -//7F0BAB54: -BNE A0,V0,7F0BAB88 ;branch if no match -LUI V0,8008 -ADDIU V0,V0,25E8 -SW V1,0000 (V0) ;V1->800825E8: save env.table hit -LUI AT,8008 -SW V1,25EC (AT) ;V1->800825EC: save env.table match start -LUI AT,8008 -ADDIU T4,V1,005C -SW T4,25F0 (AT) ;T4->800825F0: save env.table match endpoint -JAL 7F0BA758 ;copy table 1 enviroment to current -LW A0,0000 (V0) ;A0=p->env.table match -BEQ R0,R0,7F0BAC9C -LW RA,0014 (SP) -//7F0BAB88: loop for each entry -LW V0,005C (V1) ;V0=next env.stage# -ADDIU V1,V1,005C ;V1+=0x5C: p->next entry -BNEZ V0,7F0BAB54 ;branch if not at end of list -NOP -//7F0BAB98: MP-specific enviroment test, although this was covered in previous segment... -SLTI AT,T0,0002 -BNEL AT,R0,7F0BAC14 ;branch if solo -LUI AT,4170 -BEQ A1,R0,7F0BAC10 ;branch if table 1 contains no entries -OR V1,T1,R0 ;V1=T1: env.table 1 -SLL A0,T0,0x2 -SUBU A0,A0,T0 -SLL A0,A0,0x3 -LUI T5,8004 -ADDIU T5,T5,4E10 ;T5=80044E10: env.table 1 -ADDU A0,A0,T0 -SLL A0,A0,0x2 ;A0=#players * 100: offset to MPstage# -LW V0,0000 (T5) ;V0=env.stage# -//7F0BABCC: -BNE A0,V0,7F0BAC00 ;branch if no match -LUI V0,8008 -ADDIU V0,V0,25E8 -SW V1,0000 (V0) ;V1->800825E8: save env.table hit -LUI AT,8008 -SW V1,25EC (AT) ;V1->800825EC: save env.table match start -LUI AT,8008 -ADDIU T6,V1,005C -SW T6,25F0 (AT) ;T6->800825F0: save env.table match endpoint -JAL 7F0BA758 ;copy table 1 enviroment to current -LW A0,0000 (V0) ;A0=p->env.table match -BEQ R0,R0,7F0BAC9C -LW RA,0014 (SP) -//7F0BAC00: loop for each entry -LW V0,005C (V1) ;V0=next env.stage# -ADDIU V1,V1,005C ;V1+=0x5C: p->next entry -BNEZ V0,7F0BABCC ;branch if not at end of list -NOP -//7F0BAC10: -LUI AT,4170 -MTC1 AT,F12 ;F12=15.0 -LUI AT,8006 -LWC1 F14,8D74 (AT) ;F14=80058D74: 10000.0 [461C4000] -SW A2,001C (SP) ;A2=SP+1C: 0 -JAL 70004650 ;set page height -SW A3,0028 (SP) ;A3=SP+28: stage# -LUI A0,8004 -LUI AT,8008 -ADDIU A0,A0,5F50 ;A0=80045F50: env.table 2 -SW R0,25C0 (AT) ;0->800825C0: -LW T7,0000 (A0) ;T7=env.stage# -LW A2,001C (SP) ;A2=SP+1C: 0 -LW A3,0028 (SP) ;A3=SP+28: stage# -BEQ T7,R0,7F0BAC78 ;branch if no entries in list -OR V1,A0,R0 ;V1=80045F50: env.table 2 -LUI T8,8004 -ADDIU T8,T8,5F50 ;T8=80045F50: env.table 2 -LW V0,0000 (T8) ;V0=env.stage# -//7F0BAC5C: save hits -BNEL A3,V0,7F0BAC6C ;branch if no match -LW V0,0038 (V1) -OR A2,V1,R0 ;A2=V1: env.table hit -//7F0BAC68: loop for all entries -LW V0,0038 (V1) ;V0=next env.stage# -ADDIU V1,V1,0038 ;V1+=0x38: p->env.entry -BNEZ V0,7F0BAC5C ;branch if not at end of list -NOP -//7F0BAC78: set default otherwise -BNEZ A2,7F0BAC84 ;branch if hit found -NOP -OR A2,A0,R0 ;A2=A0: p->default entry -//7F0BAC84: -JAL 7F0BA9D0 ;copy table 2 enviroment to current -OR A0,A2,R0 ;A0=A2: p->env.data -LUI V0,8008 -ADDIU V0,V0,25E8 -SW R0,0000 (V0) ;0->800825E8: fry env.table hit buffer -//7F0BAC98: -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7F0BA758: EF288 0FC2E9D6 copy large enviroment bank to current -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -LWC1 F14,0008 (A0) ;F14=far fog -LWC1 F12,0004 (A0) ;F12=pervasiveness -JAL 70004650 ;set page height -SW A0,0038 (SP) ;SP+38=A0: p->env.data -JAL 700046AC -ADDIU A0,SP,0030 ;A0=SP+30: -JAL 7F0B4878 ;ret F0=800413FC: 1.0 -NOP -LWC1 F4,0030 (SP) ;F4=pervasiveness -LWC1 F8,0034 (SP) ;F8=far fog -LW A1,0038 (SP) ;A1=p->env.data -DIV.S F6,F4,F0 ;F6=F4/1.0: pervasiveness -LUI AT,447A -LUI A0,8008 -ADDIU A0,A0,25E4 ;A0=800825E4: -LUI A2,8008 -ADDIU A2,A2,25E0 ;A2=800825E0: buffer for far ambient light -LUI V1,8008 -ADDIU V1,V1,25C8 ;V1=800825C8: buffer for pervasiveness -LUI V0,8004 -ADDIU V0,V0,4DCC ;V0=80044DCC: p->current data, starting at BG light -DIV.S F10,F8,F0 ;F10=F8/1.0: far fog -SWC1 F6,0030 (SP) ;SP+30=F6: pervasiveness -MTC1 AT,F8 ;F8= 1000.0 [447A0000] -SWC1 F10,0034 (SP) ;SP+34=F10: far fog -//7F0BA7C4: -LW T6,0020 (A1) ;T6=BG dif.in light -MTC1 T6,F4 -NOP -CVT.S.W F6,F4 ;F6=(float) BG dif.in light -DIV.S F10,F6,F8 ;F10=BG dif.light / 1000.0 -MTC1 AT,F8 -LUI AT,8004 -SWC1 F10,0000 (A0) ;BG dif.light->800825E4 -//7F0BA7E4: -LW T7,0024 (A1) ;T7=far ambient light -MTC1 T7,F4 -ADDIU T7,A1,000C ;T7=p->near fog in env.data -CVT.S.W F6,F4 ;F6=(float) far ambient light -LWC1 F4,0034 (SP) ;F4=far fog -DIV.S F10,F6,F8 ;F10=far ambient light / 1000.0 -LWC1 F6,0030 (SP) ;F6=pervasiveness -SUB.S F14,F4,F6 ;F14=far fog - pervasiveness -SWC1 F10,0000 (A2) ;F10->800825E0: buffer for far ambient light -//7F0BA808: finalize near fog value -LWC1 F16,0000 (A2) ;F16=far ambient light %% -MUL.S F8,F14,F16 ;F8=F14*F16: (far fog - pervasiveness) * far ambient light%% -ADD.S F10,F6,F8 ;F10=F6+F8: pervasiveness + "" -SWC1 F10,4DC4 (AT) ;F10->80044DC4: near fog value -//7F0BA818: finalize intensity -LWC1 F2,0000 (A0) ;F2=BG dif.light -LUI AT,8004 -MUL.S F4,F14,F2 ;F4=F14*F2: (far fog - pervasiveness) * BG dif.light -ADD.S F8,F6,F4 ;F8=F6+F4: pervasiveness + "" -SWC1 F8,4DC8 (AT) ;F8->80044DC8: intensity -//7F0BA82C: -LWC1 F10,0004 (A1) ;F10=pervasiveness -LUI AT,4300 -DIV.S F6,F10,F0 ;F6=F10/F0: pervasiveness / 1.0 -SUB.S F10,F16,F2 ;F10=far ambient light - BG dif.light -SWC1 F6,0000 (V1) ;pervasiveness->800825C8: buffer for pervasiveness -//7F0BA840: -LWC1 F4,0008 (A1) ;F4=far fog -SWC1 F10,0018 (SP) ;SP+18=(far ambient light - BG dif.light) -MTC1 AT,F6 ;F6= 128.0 [43000000] -DIV.S F8,F4,F0 ;F8=F4/F0: far fog / 1.0 -LWC1 F4,0018 (SP) ;F4=(far ambient light - BG dif.light) -LUI AT,3F00 -MTC1 AT,F10 ;F10=0.5 [3F000000] -LUI AT,4380 -LWC1 F18,0000 (V1) ;F18=pervasiveness -SWC1 F8,0004 (V1) ;far fog->800825CC -//7F0BA868: -DIV.S F8,F6,F4 ;F8=F6/F4: 128.0 / (far ambient light - BG dif.light) -LWC1 F12,0004 (V1) ;F12=far fog -SUB.S F6,F10,F2 ;F6=F10-F2: 0.5 - BG dif.light -SWC1 F8,0020 (SP) ;SP+20=128.0 / (far ambient light - BG dif.light) -//7F0BA878: -MTC1 AT,F8 ;F8=256.0 [43800000] -LUI AT,3F80 -MUL.S F10,F6,F8 ;F10=F6*F8: (0.5 - BG dif.light) * 256.0 -SUB.S F8,F12,F18 ;F8=F12-F18: far fog - pervasiveness -SWC1 F8,0018 (SP) ;SP+18=F8: far fog - pervasiveness -//7F0BA88C: -MTC1 AT,F8 ;F8=1.0 [3F800000] -DIV.S F6,F10,F4 ;F6=F10-F4: 256(0.5 - BG dif.light) / (far ambient light - BG dif.light) -LWC1 F10,0020 (SP) ;F10=128.0 / (far ambient light - BG dif.light) -LUI AT,437F -NEG.S F4,F10 ;F4=-128.0 / (far ambient light - BG dif.light) -ADD.S F10,F18,F8 ;F10=F18+F8: pervasiveness++ -LWC1 F8,0018 (SP) ;F8=far fog - pervasiveness -SWC1 F6,001C (SP) ;SP+1C=F6= 256(0.5 - BG dif.light) / (far ambient light - BG dif.light) -//7F0BA8AC: -MUL.S F6,F4,F12 ;F6=F4*F12: -128.0*far fog / (far ambient light - BG dif.light) -NOP -MUL.S F4,F6,F10 ;F4=F6*F10: -128.0*far fog*pervasiveness++ / (far ambient light - BG dif.light) -MTC1 AT,F10 ;F10=255.0 [437F0000] -LUI AT,3F80 -DIV.S F6,F4,F8 ;F6=F4/F8: (-128.0*far fog*pervasiveness++) / (far ambient light - BG dif.light)(far fog - pervasiveness) -MTC1 AT,F8 ;F8=1.0 [3F800000] -LUI AT,437F -DIV.S F4,F6,F10 ;F4=F6/F10: (-128.0*far fog*pervasiveness++) / 255(far ambient light - BG dif.light)(far fog - pervasiveness) -LWC1 F10,0020 (SP) ;F10=128.0 / (far ambient light - BG dif.light) -ADD.S F6,F12,F8 ;F6=F12+F8: far fog++ -LWC1 F8,0018 (SP) ;F8=far fog - pervasiveness -SWC1 F4,0010 (V1) ;F4->800825D8 -//7F0BA8E0: -MUL.S F4,F6,F10 ;F4= F6*F10: 128(far fog++) / (far ambient light - BG dif.light) -LWC1 F10,001C (SP) ;F10= 256(0.5 - BG dif.light) / (far ambient light - BG dif.light) -DIV.S F6,F4,F8 ;F6=F4/F8: 128(far fog++) / (far ambient light - BG dif.light)(far fog - pervasiveness) -MTC1 AT,F8 ;F8=255.0 [437F0000] -LUI AT,8008 -ADD.S F4,F6,F10 ;F4=F6+F10: 128(far fog++) / (far ambient light - BG dif.light)(far fog - pervasiveness) + 256(0.5 - BG dif.light) / (far ambient light - BG dif.light) -DIV.S F6,F4,F8 ;F6=F4/F8: (128(far fog++) / (far ambient light - BG dif.light)(far fog - pervasiveness) + 256(0.5 - BG dif.light) / (far ambient light - BG dif.light)) / 255.0 -SWC1 F6,0014 (V1) ;F6=800825DC -//7F0BA900: light values -LW T8,0020 (A1) ;T8=env.+20: BG dif.in light -SW T8,0000 (V0) ;T8->80044DCC -LW T9,0024 (A1) ;T8=far ambient light -ADDIU T8,R0,0001 -SW T9,0004 (V0) ;T9->80044DD0 -//7F0BA914: fog values -LBU T0,0028 (A1) ;T0=fog red component -SB T0,0008 (V0) ;T0->80044DD4 -LBU T1,0029 (A1) ;T1=fog green component -SB T1,0009 (V0) ;T1->80044DD5 -LBU T2,002A (A1) ;T2=fog blue component -SB T2,000A (V0) ;T2->80044DD6 -//7F0BA92C: cloud values -LBU T3,002B (A1) ;T3=cloud flag -SB T3,000B (V0) ;T3->80044DD7 -LWC1 F10,002C (A1) ;F10=cloud repeat value -SWC1 F10,000C (V0) ;F10->80044DD8 -LH T4,0030 (A1) ;T4=cloud image offset -SH T4,0010 (V0) ;T4->80044DDC -LWC1 F4,0034 (A1) ;F4=cloud red channel -SWC1 F4,0014 (V0) ;F4->80044DE0 -LWC1 F8,0038 (A1) ;F8=cloud green channel -SWC1 F8,0018 (V0) ;F8->80044DE4 -LWC1 F6,003C (A1) ;F6=cloud blue channel -SWC1 F6,001C (V0) ;F6->80044DE8 -//7F0BA95C: water values -LBU T5,0040 (A1) ;T5=water flag -SB T5,0020 (V0) ;T5->80044DEC -LWC1 F10,0044 (A1) ;F10=water repeat value -SWC1 F10,0024 (V0) ;F10->80044DF0 -LH T6,0048 (A1) ;T6=water image offset -SH T6,0028 (V0) ;T6->80044DF4 -LWC1 F4,004C (A1) ;F4=water red channel -SWC1 F4,002C (V0) ;F4->80044DF8 -LWC1 F8,0050 (A1) ;F8=water green channel -MTC1 R0,F4 -SWC1 F8,0030 (V0) ;F8->80044DFC -LWC1 F6,0054 (A1) ;F6=water blue channel -SWC1 F6,0034 (V0) ;F6->80044E00 -//7F0BA990: concavity distort -LWC1 F10,0058 (A1) ;F10=world concavity distort -SWC1 F10,0038 (V0) ;F10->80044E04 -//7F0BA998: -LWC1 F8,000C (A1) ;F8=near fog -C.EQ.S F4,F8 -NOP -BC1F 7F0BA9B8 ;branch if 0!=near fog -NOP -LUI AT,8008 -BEQ R0,R0,7F0BA9BC -SW R0,25C4 (AT) ;0->800825C4: NULL near fog pointer -//7F0BA9B8: -SW T7,25C4 (AT) ;save p->near fog -//7F0BA9BC: -LW RA,0014 (SP) -LUI AT,8008 -SW T8,25C0 (AT) ;1->800825C0: enviroment table 1 entry in use -JR RA -ADDIU SP,SP,0038 - -7F0BA9D0: 0FC2EA74 copy short enviroment bank to current - accepts: A0=p->enviroment data -LBU T6,0004 (A0) ;T6=fog red component -LUI V0,8004 -ADDIU V0,V0,4DCC ;V0=80044DCC: current env.data -SB T6,0008 (V0) ;T6->80044DD4 -LBU T7,0005 (A0) ;T7=fog green component -SB T7,0009 (V0) ;T7->80044DD5 -LBU T8,0006 (A0) ;T8=fog blue component -SB T8,000A (V0) ;T8->80044DD6 -LBU T9,0007 (A0) ;T9=cloud flag -SB T9,000B (V0) ;T9->80044DD7 -//7F0BA9F8: clouds -LWC1 F4,0008 (A0) ;F4=cloud image repeat -SWC1 F4,000C (V0) ;F4->80044DD8 -LH T0,000C (A0) ;T0=cloud image index -SH T0,0010 (V0) ;T0->80044DDC -LWC1 F6,0010 (A0) ;F6=cloud red component -SWC1 F6,0014 (V0) ;F6->80044DE0 -LWC1 F8,0014 (A0) ;F8=cloud green component -SWC1 F8,0018 (V0) ;F8->80044DE4 -LWC1 F10,0018 (A0) ;F10=cloud blue component -SWC1 F10,001C (V0) ;F10->80044DE8 -//7F0BAA20: water -LBU T1,001C (A0) ;T1=water flag -SB T1,0020 (V0) ;T1->80044DEC -LWC1 F16,0020 (A0) ;F16=water image repeat -SWC1 F16,0024 (V0) ;F16->80044DF0 -LH T2,0024 (A0) ;T2=water image index -SH T2,0028 (V0) ;T2->80044DF4 -LWC1 F18,0028 (A0) ;F18=water red component -SWC1 F18,002C (V0) ;F18->80044DF8 -LWC1 F4,002C (A0) ;F4=water green component -SWC1 F4,0030 (V0) ;F4->80044DFC -LWC1 F6,0030 (A0) ;F6=water blue component -SWC1 F6,0034 (V0) ;F6->80044E00 -LWC1 F8,0034 (A0) ;F8=world concavity distort -JR RA -SWC1 F8,0038 (V0) ;F8->80044E04 - - -70004650 set page height - accepts: F12=?, F14=? -ADDIU SP,SP,FFE8 -LUI V1,8002 -ADDIU V1,V1,32A8 -SWC1 F12,0018 (SP) ;SP+18=F12: -LWC1 F4,0018 (SP) ;F4=F12 -LW T6,0000 (V1) ;T6=800232A8: p->? -SW RA,0014 (SP) -SWC1 F14,001C (SP) ;SP+1C=F14: -SWC1 F4,0010 (T6) ;F12-> p+0x10 -LW T7,0000 (V1) ;T7=800232A8: p->? -LWC1 F6,001C (SP) ;F6=F14 -SWC1 F6,0014 (T7) ;F14-> p+0x14 -LW V0,0000 (V1) ;V0=800232A8: p->? -LWC1 F12,0010 (V0) ;F12=F12 -LWC1 F14,0008 (V0) ;F14=? -JAL 7F077C30 -LW A2,000C (V0) ;A2=? -JAL 7F077C5C -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -700046AC: ??? - accepts: A0=p->target -LUI V0,8002 -ADDIU V0,V0,32A8 -LW T6,0000 (V0) ;T6=800232A8: p->? -LWC1 F4,0010 (T6) -SWC1 F4,0000 (A0) ;F4->target+0 -LW T7,0000 (V0) ;T6=800232A8: p->? -LWC1 F6,0014 (T7) -JR RA -SWC1 F6,0004 (A0) ;F6->target+4 - - -7F077C30: ??? copies floats to BONDdata - accepts: A2=?, F12=?, F14=? -LUI V0,8008 -ADDIU V0,V0,A0B0 -LW T6,0000 (V0) -SW A2,0008 (SP) -SWC1 F12,10A0 (T6) -LW T7,0000 (V0) -SWC1 F14,10A4 (T7) -LW T8,0000 (V0) -LWC1 F4,0008 (SP) -JR RA -SWC1 F4,10A8 (T8) - -7F054B80: -ADDIU SP,SP,FFE0 -LUI AT,3F80 -MTC1 AT,F16 ;F16=1.0 -SW RA,0014 (SP) -SW A0,0020 (SP) ;SP+20=A0: -SW A1,0024 (SP) ;SP+24=A1: -JAL 7F0BB398 ;V0=p->fog values [800825C4] -SWC1 F16,001C (SP) ;SP+1C=1.0 -BEQ V0,R0,7F054C44 ;branch if not present -LWC1 F16,001C (SP) ;F16=1.0 -//7F054BA8: -LW T6,0020 (SP) -LWC1 F4,0008 (V0) ;F4=obj.obfuscation range -LWC1 F6,0018 (T6) ;F6=T6+18: -C.LT.S F4,F6 -NOP -BC1FL 7F054C48 ;branch if obj.obfuscation range >= F6 -LW RA,0014 (SP) -SW V0,0018 (SP) ;SP+18=V0: p->fog values -JAL 7F078484 ;F0= BONDdata+10F8 -SWC1 F16,001C (SP) ;SP+1C=1.0 -//7F054BD0: -LW V1,0018 (SP) ;V1=p->fog values -LW T7,0020 (SP) -LUI AT,42C8 -LWC1 F2,0008 (V1) ;F2=obj.obfuscation range -LWC1 F8,0018 (T7) -MTC1 AT,F18 ;F18=100.0 -LWC1 F6,0024 (SP) -SUB.S F10,F8,F2 ;F10=F8-obj.obfuscation range -LWC1 F14,0004 (V1) ;F14=max obj vis. range -LWC1 F16,001C (SP) ;F16=SP+1C: 1.0 -MUL.S F4,F10,F18 ;F4=100.0(F8-obj.obfuscation range) -DIV.S F8,F4,F6 ;F8=100.0(F8-obj.obfuscation range)/F6 -ADD.S F10,F8,F2 ;F10=100.0(F8-obj.obfuscation range)/F6 + obj.obfuscation range -MUL.S F12,F10,F0 ;F12=(BONDdata+10F8) * (100.0(F8-obj.obfuscation range)/F6 + obj.obfuscation range) -C.LE.S F14,F12 -NOP -BC1FL 7F054C28 ;branch if max obj vis. range > F12 -LWC1 F0,0000 (V1) -MTC1 R0,F16 ;F16=0 -BEQ R0,R0,7F054C48 -LW RA,0014 (SP) -//7F054C24: -LWC1 F0,0000 (V1) ;F0=near fog value -C.LT.S F0,F12 -NOP -BC1FL 7F054C48 ;branch if near fog value >= F12 -LW RA,0014 (SP) -SUB.S F10,F14,F12 ;F10=max obj vis. range - F12 -SUB.S F4,F14,F0 ;F4=max obj vis. range - near fog value -DIV.S F16,F18,F4 ;F16=100/(max obj vis. range - near fog value) -//7F054C44: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -MOV.S F0,F16 ;F0=F16: percentage visibility? -JR RA -NOP - -7F054C58: -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -ADDIU T6,R0,0001 -SW A0,0038 (SP) ;SP=38=A0: -SW A1,003C (SP) ;SP+3C=A1: -JAL 7F0BB398 ;V0=p->fog values [800825C4] -SW T6,0034 (SP) ;SP+34=1: true return -BEQL V0,R0,7F054D5C ;branch if 0 -LW RA,0014 (SP) -//7F054C7C: -JAL 7F089FD4 ;V0=p->position -SW V0,0030 (SP) ;SP+30=p->fog values -JAL 7F0783C4 ;V0= BONDdata+0x10CC -SW V0,001C (SP) ;SP+1C=p->position -//7F054C8C: -LW V1,001C (SP) ;V1=p->position -LW A1,0038 (SP) -LW A0,0030 (SP) ;A0=p->fog values -LWC1 F6,0000 (V1) ;F6=x position -LWC1 F4,0000 (A1) -SUB.S F8,F4,F6 -SWC1 F8,0024 (SP) ;SP+24=?-xpos -LWC1 F16,0004 (V1) ;F16=y position -LWC1 F10,0004 (A1) -SUB.S F18,F10,F16 -LWC1 F10,0024 (SP) ;F10=F8 -SWC1 F18,0028 (SP) ;SP+28=?-ypos -LWC1 F6,0008 (V1) ;F6=z position -LWC1 F4,0008 (A1) -SUB.S F8,F4,F6 -LWC1 F4,0028 (SP) ;F4=F18 -SWC1 F8,002C (SP) ;SP+2C=?-zpos -LWC1 F16,0000 (V0) ;F16=BONDdata+10CC -LWC1 F6,0004 (V0) ;F6=BONDdata+10D0 -MUL.S F18,F10,F16 ;F18=(?-xpos)*(BONDdata+10CC) -LWC1 F16,0008 (V0) ;F16=BONDdata+10D4 -MUL.S F8,F4,F6 ;F8=(?-ypos)*(BONDdata+10D0) -LWC1 F4,002C (SP) ;F4=(?-zpos) -MUL.S F6,F16,F8 ;F6=(BONDdata+10D4)*(?-ypos)*(BONDdata+10D0) -LWC1 F18,0008 (A0) ;F18=obj.obfuscation range -ADD.S F12,F6,F10 ;F12=(BONDdata+10D4)*(?-ypos)*(BONDdata+10D0) + (?-xpos) -C.LT.S F18,F12 -NOP -BC1FL 7F054D5C ;branch if obj.obfuscation range >= F12 -LW RA,0014 (SP) -//7F054D08: -SW A0,0030 (SP) ;SP+30=A0: same as before -JAL 7F078484 ;F0= BONDdata+10F8 -SWC1 F12,0020 (SP) ;SP+20=F12 -LW A0,0030 (SP) ;A0=SP+30: p->fog values -LWC1 F12,0020 (SP) ;F12=SP+20 -LUI AT,42C8 -LWC1 F2,0008 (A0) ;F2=A0+8: obj.obfuscation range -MTC1 AT,F16 ;F16=100.0 -LWC1 F6,003C (SP) ;F6=SP+3C: -SUB.S F8,F12,F2 ;F8=F12-obj.obfuscation range -MUL.S F4,F8,F16 ;F4=100.0(F12-obj.obfuscation range) -LWC1 F8,0004 (A0) ;F8=max.obj.vis.range -DIV.S F10,F4,F6 ;F10=100.0(F12-obj.obfuscation range) / F6 -ADD.S F18,F10,F2 ;F18=100.0(F12-obj.obfuscation range) / F6 + obj.obfuscation range -MUL.S F12,F18,F0 ;F12=(100.0(F12-obj.obfuscation range) / F6 + obj.obfuscation range) * F0 -C.LE.S F8,F12 -NOP -BC1FL 7F054D5C ;branch if max.obj.vis.range > F12 -LW RA,0014 (SP) -SW R0,0034 (SP) ;SP+34=0: false return -//7F054D58: -LW RA,0014 (SP) -LW V0,0034 (SP) ;V0=SP+34: return value -ADDIU SP,SP,0038 -JR RA -NOP - -+_+ - -for the record, the sky is constructed here: -//7F096E2C: - - -here's a sample 'cloud' mapping: -//at 7F096E2C -E7000000 00000000 -E7000000 00000000 -BA001402 00000000 -B900031D 00552048 -BB000001 FFFFFFFF -BA001001 00000000 -FC121824 FF33FFFF -FD700000 0015DE78 -F5700000 07000000 -E6000000 00000000 -F3000000 077FF100 -E7000000 00000000 -BA000E02 00000000 -F5681000 00018060 -F2002002 000FE0FE -//at 7F096E7C -FB000000 280000FF -//at 7F006EDC: -FC40FE81 55FEF97C -//at 7F098E84 -B4000000 CE8002A1 ; -B2000000 0 diff --git a/notes/GE Documentation/Background File Data/Fog Water and Sky/PAL copy to current sky.txt b/notes/GE Documentation/Background File Data/Fog Water and Sky/PAL copy to current sky.txt deleted file mode 100644 index d0923d4..0000000 --- a/notes/GE Documentation/Background File Data/Fog Water and Sky/PAL copy to current sky.txt +++ /dev/null @@ -1,470 +0,0 @@ -These dASMs are from PAL, not NTSC, to explain how the conversion will work -Do NOT index these TLB commands - -7F0B9E34: copy fog values to current sky -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A1,002C (SP) -SW R0,001C (SP) -JAL 7F0999A4 ;V0=#players -SW A0,0028 (SP) -//7F0B9E4C: -ADDIU AT,R0,0001 -LW A2,001C (SP) -LW A3,0028 (SP) ;A3=search stage# -BNE V0,AT,7F0B9E64 ;if solo, set T0=0 -OR T0,V0,R0 ;T0=#players -OR T0,R0,R0 -//7F0B9E64: set default values -LUI AT,8005 -LWC1 F4,D7C0 (AT) ;F4=7F7FFFFF -LW T6,002C (SP) -LUI AT,8004 -MTC1 R0,F6 -SWC1 F4,E2B4 (AT) ;8003E2B4=7F7FFFFF: near fog value -LUI AT,8004 -BEQ T6,R0,7F089EEC ;branches over solo sky tests -SWC1 F6,E2B8 (AT) ;8003E2B8=0: near fog * (intensity/far intensity) -//7F0B9E88: -LUI T1,8004 -ADDIU V1,T1,E300 ;V1=8003E300: start of fog table 1 -LH T7,0000 (V1) ;T7=stage# -LUI T8,8004 -ADDIU T8,T8,E300 ;T8=8003E300 -BEQ T7,R0,7F0B9EEC ;if stage=0, end of list 1 found -ADDIU A0,A3,0384 ;A0=A3+0x384: search stage# + set 9 offset - cutscene sky -LH V0,0000 (T8) ;V0=stage# -//7F0B9EA8: loop until a match is found -BNE A0,V0,7F0B9EDC ;branch if stage# doesn't match stage+set9 -LUI V0,8007 -//7F0B9EB0: sky match -ADDIU V0,V0,CF88 ;V0=8006CF88: p->sky -SW V1,0000 (V0) ;V1->8006CF88: save p->sky -LUI AT,8007 -SW V1,CF8C (AT) ;V1->8006CF8C: save p->sky -LUI AT,8007 -ADDIU T9,V1,0024 ;T9=V1+0x24: p->next sky -SW T9,CF90 (AT) ;T9->8006CF90: save p->end of sky data -JAL 7F0B99F8 -LW A0,0000 (V0) ;A0=p->sky -BEQ R0,R0,7F0BA06C ;since you got a match, end this bugger -LW RA,0014 (SP) -//7F0B9EDC: loopus -LH V0,0024 (V1) ;V0=stage# -ADDIU V1,V1,0024 ;V1+=0x24: next sky -BNEZ V0,7F0B9EA8 ;branch if not at end of list -NOP -//7F0B9EEC: look for MP sky -LUI T1,8004 -ADDIU T1,T1,E300 ;T1=8003E300: start of sky list 1 -LH A1,0000 (T1) ;A1=stage# -LUI T2,8004 -ADDIU T2,T2,E300 ;T2=8003E300: start of sky list 1 -BEQ A1,R0,7F0B9F68 ;branch if at EOL -OR V1,T1,R0 ;V1=T1=8003E300: start of sky list 1 -SLL T3,T0,0x2 -SUBU T3,T3,T0 -SLL T3,T3,0x3 -ADDU T3,T3,T0 -SLL T3,T3,0x2 ;T3=#players * 0x64 -ADDU A0,A3,T3 ;A0=stage+MPoffset -LH V0,0000 (T2) -BNE A0,V0,7F0B9F58 -LUI V0,8007 -//7F0B9F2C: -ADDIU V0,V0,CF88 -SW V1,0000 (V0) -LUI AT,8007 -SW V1,CF8C (AT) -LUI AT,8007 -ADDIU T4,V1,0024 -SW T4,CF90 (AT) -JAL 7F0B99F8 -LW A0,0000 (V0) -BEQ R0,R0,7F0BA06C -LW RA,0014 (SP) -//7F0B9F58: -LH V0,0024 (V1) -ADDIU V1,V1,0024 -BNEZ V0,7F0B9F24 -NOP -//7F0B9F68: -SLTI AT,T0,0002 -BNEL AT,R0,7F0B9FE4 -LUI AT,4170 -BEQ A1,R0,7F0B9FE0 -OR V1,T1,R0 -SLL A0,T0,0x2 -SUBU A0,A0,T0 -SLL A0,A0,0x3 -LUI T5,8004 -ADDIU T5,T5,E300 -ADDU A0,A0,T0 -SLL A0,A0,0x2 -LH V0,0000 (T5) -//7F0B9F9C: -BNE A0,V0,7F0B9FD0 -LUI V0,8007 -//7F0B9FA4: -ADDIU V0,V0,CF88 -SW V1,0000 (V0) -LUI AT,8007 -ADDIU T6,V1,0024 -SW T6,CF90 (AT) -JAL 7F0B99F8 -LW A0,0000 (V0) -BEQ R0,R0,7F0BA06C -LW RA,0014 (SP) -//7F0B9FD0: -LH V0,0024 (V1) -ADDIU V1,V1,0024 -BNEZ V0,7F0B9F9C -NOP -//7F0B9FE0: -LUI AT,4170 -MTC1 AT,F12 -LUI AT,8005 -LWC1 F14,D7C4 (AT) -SW A2,001C (SP) -JAL 700040A0 -SW A3,0028 (SP) ;SP+28=A3: search stage# -LUI A0,8004 -LUI AT,8007 -ADDIU A0,A0,E9C0 ;A0=8003E9C0: sky table 2 -SW R0,CF60 (AT) ;0->8006CF60: -LW T7,0000 (A0) ;T7=stage# -LW A2,001C (SP) -LW A3,0028 (SP) ;A3=search stage# -BEQ T7,R0,7F0BA048 ;branch if at end of table -OR V1,A0,R0 ;V1=A0=8003E9C0: sky table 2 -//7F0BA020: -LUI T8,8004 -ADDIU T8,T8,E9C0 ;T8=8003E9C0: sky table 2 -LW V0,0000 (T8) ;V0=stage# -//7F0BA02C: -BNEL A3,V0,7F0BA03C ;branch if not a match -LW V0,0038 (V1) -OR A2,V1,R0 ;A2=p->sky -//7F0BA038: -LW V0,0038 (V1) ;V0=next stage# -ADDIU V1,V1,0038 ;V1+=0x38: next sky -BNEZ V0,7F0BA02C ;loop for all entries -NOP -//7F0BA048: -BNEZ A2,7F0BA054 ;branch if no table 2 hit found -NOP -OR A2,A0,R0 ;A2=A0: p->default sky -//7F0BA054: -JAL 7F0B9DA0 ;make table 2 sky active -OR A0,A2,R0 ;A0=A2: p->sky -LUI V0,8007 -ADDIU V0,V0,CF88 -SW R0,0000 (V0) ;0->8006CF88: -//7F0BA068: -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - - - -7F0B99F8: set sky values - table 1 - accepts: A0=p->sky -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -LH T7,0004 (A0) ;T7=sky+4: far fog -LH T6,0002 (A0) ;T6=sky+2: near pervasiveness -SW A0,0038 (SP) ;SP+38=A0: sky -MTC1 T7,F6 -MTC1 T6,F4 -CVT.S.W F14,F6 ;F14=far fog -JAL 700040A0 -CVT.S.W F12,F4 ;F12=near pervasiveness -JAL 700040FC -ADDIU A0,SP,0030 ;A0=SP+30: target for returned float (+0, +4) -JAL 7F0B3BB4 ;F0=8003AC4C: 1.0 cutoff. set higher blackens portals and kills objects unless very close -NOP -//7F0B9A30: -LWC1 F8,0030 (SP) ;F8=SP+30: probably near pervasiveness -LWC1 F4,0034 (SP) ;F4=SP+34: probably far fog -LW A1,0038 (SP) ;A1=sky -DIV.S F10,F8,F0 -LUI AT,447A -LUI A0,8007 -ADDIU A0,A0,CF84 ;A0=8006CF84 -LUI A2,8007 -ADDIU A2,A2,CF80 ;A2=8006CF80 -LUI V1,8007 -ADDIU V1,V1,CF68 ;V1=8006CF68 -LUI V0,8004 -ADDIU V0,V0,E2BC ;V0=8003E2BC: intensity -DIV.S F6,F4,F0 -SWC1 F10,0030 (SP) -MTC1 AT,F4 -SWC1 F6,0034 (SP) -LH T8,000C (A1) -MTC1 T8,F8 -NOP -CVT.S.W F10,F8 -DIV.S F6,F10,F4 -MTC1 AT,F4 -//7F0B9A8C: -LUI AT,8004 -SWC1 F6,0000 (A0) -LH T9,000E (A1) -MTC1 T9,F8 -NOP -CVT.S.W F10,F8 -LWC1 F8,0034 (SP) -DIV.S F6,F10,F4 -LWC1 F10,0030 (SP) -SUB.S F14,F8,F10 -SWC1 F6,0000 (A2) -LWC1 F16,0000 (A2) -MUL.S F4,F14,F16 -ADD.S F6,F10,F4 -SWC1 F6,E2B4 (AT) -//7F0B9AC8: -LWC1 F2,0000 (A0) -LUI AT,8004 -MUL.S F8,F14,F2 -ADD.S F4,F10,F8 -SWC1 F4,E2B8 (AT) -//7F0B9ADC: -LH T0,0002 (A1) -LUI AT,4300 -MTC1 T0,F6 -NOP -CVT.S.W F10,F6 -DIV.S F8,F10,F0 -SWC1 F8,0000 (V1) -LH T1,0004 (A1) -SUB.S F8,F16,F2 -LWC1 F18,0000 (V1) -MTC1 T1,F4 -SWC1 F8,0018 (SP) -CVT.S.W F6,F4 -MTC1 AT,F4 -LUI AT,3F00 -MTC1 AT,F8 -LUI AT,4380 -DIV.S F10,F6,F0 -LWC1 F6,0018 (SP) -SWC1 F10,0004 (V1) -//7F0B9B2C: -DIV.S F10,F4,F6 -LWC1 F12,0004 (V1) -SUB.S F4,F8,F2 -SWC1 F10,0020 (SP) -MTC1 AT,F10 -LUI AT,3F80 -MUL.S F8,F4,F10 -SUB.S F10,F12,F18 -SWC1 F10,0018 (SP) -MTC1 AT,F10 -DIV.S F4,F8,F6 -LWC1 F8,0020 (SP) -LUI AT,437F -NEG.S F6,F8 -ADD.S F8,F18,F10 -LWC1 F10,0018 (SP) -SWC1 F4,001C (SP) -MUL.S F4,F6,F12 -NOP -MUL.S F6,F4,F8 -MTC1 AT,F8 -LUI AT,3F80 -DIV.S F4,F6,F10 -MTC1 AT,F10 -LUI AT,437F -DIV.S F6,F4,F8 -LWC1 F8,0020 (SP) -ADD.S F4,F12,F10 -LWC1 F10,0018 (SP) -SWC1 F6,0010 (V1) -//7F0B9BA4: -MUL.S F6,F4,F8 -LWC1 F8,001C (SP) -DIV.S F4,F6,F10 -MTC1 AT,F10 -LUI AT,4F80 -ADD.S F6,F4,F8 -DIV.S F4,F6,F10 -SWC1 F4,0014 (V1) -//7F0B9BC4: light values -LH T2,000C (A1) ;T2=BG dif.light -SW T2,0000 (V0) ;T2->8003E2BC -LW T3,000E (A1) ;T3=far ambient light -SW T3,0004 (V0) ;T3->8003E2C0 -//7F0B9BD4: fog values -LBU T4,0010 (A1) ;T4=fog red component -SB T4,0008 (V0) ;T4->8003E2C4 -LBU T5,0011 (A1) ;T5=fog green component -SB T5,0009 (V0) ;T5->8003E2C5 -LBU T6,0012 (A1) ;T6=fog blue component -SB T6,000A (V0) ;T6->8003E2C6 -//7F0B9BEC: cloud values -LBU T7,0013 (A1) ;T7=cloud flag -SB T7,000B (V0) ;T7->8003E2C7 -LH T8,0014 (A1) ;T8=cloud image repeat -MTC1 T8,F8 -NOP -CVT.S.W F6,F8 ;F6=(float) cloud repeat -SWC1 F6,000C (V0) ;F6->8003E2C8 -LBU T9,0016 (A1) ;T9=offset to sky image -SH T9,0010 (V0) ;T9->8003E2CC -LBU T0,0017 (A1) ;T0=cloud red component -MTC1 T0,F10 -BGEZ T0,7F0B9C2C ;silly. always >= 0 because value is unsigned! -CVT.S.W F4,F10 ;F4=(float) cloud red component -//7F0B9C20: fix rollover that never occurs -MTC1 AT,F8 ;F8=4294967296.0 [4F800000] -NOP -ADD.S F4,F4,F8 ;F4=0x100000000 + value, rolling it around to a positive number -//7F0B9C2C: -SWC1 F4,0014 (V0) ;F4->8003E2D0 -LBU T1,0018 (A1) ;T1=cloud green component -LUI AT,4F80 -MTC1 T1,F6 -BGEZ T1,7F0B9C50 ;silly. always >= 0 because value is unsigned! -CVT.S.W F10,F6 -//7F0B9C44: fix rollover that never occurs -MTC1 AT,F8 ;F8=4294967296.0 [4F800000] -NOP -ADD.S F10,F10,F8 ;F10=0x100000000 + value, rolling it around to a positive number -//7F0B9C50: -SWC1 F10,0018 (V0) ;F10->8003E2D4 -LBU T2,0019 (A1) ;T2=cloud green component -LUI AT,4F80 -MTC1 T2,F4 -BGEZ T2,7F0B9C74 ;silly. always >= 0 because value is unsigned! -CVT.S.W F6,F4 -//7F0B9C68: fix rollover that never occurs -MTC1 AT,F8 ;F8=4294967296.0 [4F800000] -NOP -ADD.S F6,F6,F8 ;F6=0x100000000 + value, rolling it around to a positive number -//7F0B9C74: water values -SWC1 F6,001C (V0) ;F6->8003E2D8 -LBU T3,001A (A1) ;T3=water flag -LUI AT,4F80 -ADDIU T2,R0,0001 ;T2=1 -SB T3,0020 (V0) ;T3->8003E2DC -LH T4,001C (A1) ;T4=water repeat value -MTC1 T4,F10 -NOP -CVT.S.W F4,F10 ;F4=(float) water repeat value -SWC1 F4,0024 (V0) ;F4->8003E2E0 -//7F0B9C9C: -LBU T5,001E (A1) ;T5=offset to water image -SH T5,0028 (V0) ;T5->8003E2E4 -LBU T6,001F (A1) ;T6=water red component -MTC1 T6,F8 -BGEZ T6,7F0B9CC0 -CVT.S.W F6,F8 -//7F0B9CB4: -MTC1 AT,F10 -NOP -ADD.S F6,F6,F10 -//7F0B9CC0: -SWC1 F6,002C (V0) -LBU T7,0020 (A1) -LUI AT,4F80 -MTC1 T7,F4 -BGEZ T7,7F0B9CE4 -CVT.S.W F8,F4 -//7F0B9CD8: -MTC1 AT,F10 -NOP -ADD.S F8,F8,F10 -//7F0B9CE4: -SWC1 F8,0030 (V0) -LBU T8,0021 (A1) -LUI AT,4F80 -MTC1 T8,F6 -BGEZ T8,7F0B9D08 -CVT.S.W F4,F6 -MTC1 AT,F10 -NOP -ADD.S F4,F4,F10 -//7F0B9D08: world concavity -SWC1 F4,0034 (V0) -LBU T9,0022 (A1) ;T9=world concavity -LUI AT,4F80 -MTC1 T9,F8 -BGEZ T9,7F0B9D2C -CVT.S.W F6,F8 -MTC1 AT,F10 -NOP -ADD.S F6,F6,F10 -//7F0B9D2C: -SWC1 F6,0038 (V0) -LH V1,0006 (A1) ;V1=near fog value -LUI AT,8007 -BNEL V1,R0,7F0B9D4C ;branch if near fog value present -MTC1 V1,F4 -BEQ R0,R0,7F0B9D8C -SW R0,CF64 (AT) ;0->8006CF64 -//7F0B9D48: -MTC1 V1,F4 -LUI V0,8007 -ADDIU V0,V0,CF98 ;V0=8006CF98 -CVT.S.W F8,F4 ;F8=(float) near fog value -LUI AT,8007 -SWC1 F8,0000 (V0) -LH T0,0008 (A1) ;T0=max obj vis. range -MTC1 T0,F10 -NOP -CVT.S.W F6,F10 ;F6=(float) max obj vis. range -SWC1 F6,0004 (V0) -LH T1,000A (A1) ;T1=obfuscation range -MTC1 T1,F4 -NOP -CVT.S.W F8,F4 ;F8=(float) obfuscation range -SWC1 F8,0008 (V0) -SW V0,CF64 (AT) ;8006CF98->8006CF64 -//7F0B9D8C: -LW RA,0014 (SP) -LUI AT,8007 -SW T2,CF60 (AT) ;1->8006CF60 -JR RA -ADDIU SP,SP,0038 - -7F0B9DA0: set sky values - table 2 - accepts: A0=p->sky -LBU T6,0004 (A0) ;T6=fog red component -LUI V0,8004 -ADDIU V0,V0,E2BC ;V0=8003E2BC: current env.data -SB T6,0008 (V0) ;T6->8003E2C4 -LBU T7,0005 (A0) ;T7=fog green component -SB T7,0009 (V0) ;T7->8003E2C5 -LBU T8,0006 (A0) ;T8=fog blue component -SB T8,000A (V0) ;T8->8003E2C6 -LBU T9,0007 (A0) ;T9=cloud flag -SB T9,000B (V0) ;T9->8003E2C7 -LWC1 F4,0008 (A0) ;F4=cloud repeat value -SWC1 F4,000C (V0) ;F4->8003E2C8 -LH T0,000C (A0) ;T0=cloud image offset -SH T0,0010 (V0) ;T0->8003E2CC -LWC1 F6,0010 (A0) ;F6=cloud red component -SWC1 F6,0014 (V0) ;F6->8003E2D0 -LWC1 F8,0014 (A0) ;F8=cloud green component -SWC1 F8,0018 (V0) ;F8->8003E2D4 -LWC1 F10,0018 (A0) ;F10=cloud blue component -SWC1 F10,001C (V0) ;F10->8003E2D8 -LBU T1,001C (A0) ;T1=water flag -SB T1,0020 (V0) ;T1->8003E2DC -LWC1 F16,0020 (A0) ;F16=water repeat value -SWC1 F16,0024 (V0) ;F16->8003E2E0 -LH T2,0024 (A0) ;T2=water image offset -SH T2,0028 (V0) ;T2->8003E2E4 -LWC1 F18,0028 (A0) ;F18=water red component -SWC1 F18,002C (V0) ;F18->8003E2E8 -LWC1 F4,002C (A0) ;F4=water green component -SWC1 F4,0030 (V0) ;F4->8003E2EC -LWC1 F6,0030 (A0) ;F6=water blue component -SWC1 F6,0034 (V0) ;F6->8003E2F0 -LWC1 F8,0034 (A0) ;F8=world concavity distort -JR RA -SWC1 F8,0038 (V0) ;F8->8003E2F4 - - diff --git a/notes/GE Documentation/Background File Data/Fog Water and Sky/PAL fog and sky.txt b/notes/GE Documentation/Background File Data/Fog Water and Sky/PAL fog and sky.txt deleted file mode 100644 index ee3c9a7..0000000 --- a/notes/GE Documentation/Background File Data/Fog Water and Sky/PAL fog and sky.txt +++ /dev/null @@ -1,58 +0,0 @@ -PAL uses a reduced fog/sky/water block format. -NOT ACCURATE except for size. Did this quickly just to start a document on the subject. -Trust nothing you see - - -entries 0x24 in size -0x0 2 stage ID number (or multiple thereof) -0x2 2 near pervasiveness of fog on rendered surfaces -0x4 2 far fog value; beyond this is complete obscurity -0x6 2 near fog value; distance from player to start of fog gradient -0x8 2 max obj vis. range; furthest dist standard (non-door) obj and actors are visible at -0xA 2 obj obfuscation range; objs start to 'fade' at this distance -0xC 2 default 996 BG: dif. in light. smaller # = foggier near player -0xE 2 default 1000 far ambient light value value. used with above two values - I think this is when fog occurs, and above two are subtracted to create the near fog boundry. - permillage. light/ambient=multiplier -0x10 1 red component 0-FF -0x11 1 green component 0-FF -0x12 1 blue component 0-FF -0x13 1 clouds 1-on/0-off -/*cloud-specific*/ -0x14 2 default 5000; cloud image repeat value. larger = more repetitions (pushed to DL) -0x16 1 default 00; offset from loaded sky image (8B6) to image entry used for sky. -0x17 1 cloud red component 0-FF -0x18 1 cloud green component 0-FF -0x19 1 cloud blue component 0-FF -0x1A 1 unsigned byte Nonzero='water'; also pulls the object ambient light value... -0x1B 1 RESERVED -/*water-specific*/ -0x1C 2 default -1000; water image repeat value. larger = more repetition (pushed to DL) -0x1E 1 default 01 or 02; offset to loaded water image entry. -0x1F 1 water highlight red component 0-FF -0x20 1 water highlight green component 0-FF -0x21 1 water highlight blue component 0-FF -0x22 1 world concavity distort! positive makes world concave, negative world convex. distorts perspective -0x23 1 RESERVED - - -currently active sky 8003E2B0, first sky at 8003E300 - format is the same as NTSC, so that means it will be really easy to port it! -8003E2B4 [float] near fog value -8003E2B8 [float] near fog * (intensity/far intensity) -8003E2BC intensity -8003E2C0 far intensity -8003E2C4 fog colour -8003E2C8 [float] cloud repeat value -8003E2CC offset to sky image -8003E2D0 [float] red component -8003E2D4 [float] green component -8003E2D8 [float] blue component -8003E2DC water flag -8003E2E0 [float] water repeat value -8003E2E4 offset to water image -8003E2E8 [float] red component -8003E2EC [float] green component -8003E2F0 [float] blue component -8003E2F4 [float] world distort - diff --git a/notes/GE Documentation/Background File Data/Fog Water and Sky/fog and sky.txt b/notes/GE Documentation/Background File Data/Fog Water and Sky/fog and sky.txt deleted file mode 100644 index 8d49638..0000000 --- a/notes/GE Documentation/Background File Data/Fog Water and Sky/fog and sky.txt +++ /dev/null @@ -1,535 +0,0 @@ -fog elements, typically 0x5C - -@4d88 -80044928 -80044940 -80044c00 -80044c28 -80044c50 -800449c8 -80044ab0 -80044b58 -80044c68 -80044ca0 - -format: 0x5c per entry -0x0 4 stage ID number (or multiple thereof) -(these values are more dedicated to obscuring stage/object elements) -0x4 4 (float) odd blend multiplier. pervasiveness of fog on rendered surfaces (ie. ground) closer than near fog value. Also affects the z index for the viewport to some degree but not on PAL. -0x8 4 (float) far fog value; beyond this is complete obscurity -0xC 4 (float) near fog value; distance from player to start of fog gradient -0x10 4 (float) max obj vis. range; furthest dist standard (non-door) obj and actors are visible at -0x14 4 (float) obj obfuscation range; objs start to 'fade' at this distance -0x18 4 (float) default 0 min obj vis range; nearest stand. objs are visible at. Always set to zero! -(note: these values are more dedicated to actual ambient fog lighting effect) -0x1C 4 long default 999 All Objects: difference between near and far ambient light. Intensity, in other words -0x20 4 long default 996 BG: dif. in light. smaller # = foggier near player -0x24 4 long default 1000 far ambient light value value. used with above two values - I think this is when fog occurs, and above two are subtracted to create the near fog boundry. -0x28 1 red component 0-FF -0x29 1 green component 0-FF -0x2A 1 blue component 0-FF -0x2B 1 clouds 1-on/0-off -0x2C 4 (float) default 5000; cloud image repeat value. larger = more repetitions (pushed to DL) -0x30 2 default 0000; offset from loaded sky image (8B6) to image entry used for sky. -0x32 2 reserved (0) -0x34 4 (float) cloud Red channel (alpha->red) -0x38 4 (float) cloud Green channel -0x3C 4 (float) cloud Blue channel -0x40 1 unsigned byte Nonzero='water'; also pulls the object ambient light value... -0x41 3 reserved (0) -0x44 4 (float) default -1000; water image repeat value. larger = more repetition (pushed to DL) -0x48 2 default 0001 or 0002; offset to loaded water image entry. -0x4A 2 reserved -0x4C 4 (float) water Red channel; these three values affect water highlight near the player only -0x50 4 (float) water Green channel -0x54 4 (float) water Blue channel -0x58 4 (float) world concavity distort! positive makes world concave, negative world convex. distorts perspective - -Note: stages 1A, 36, default omit fog data (0x4-0x24 above): -0x0 stage ID -0x4 fog colour -0x8 cloud repeat value -etc... - - -currently active sky 4db0 -81044dd4 ???? -81044dd6 ???? -water tag 4dec -01000000 - - -statue 81044E12 0016 -81044e38 0000 -81044e3a 0801 ------------ -control 81044E6E 0017 -81044e94 0000 -81044e96 0000 ------------ -Archives 81044ECA 0018 -81044EF0 0000 -81044EF2 0001 ------------ -train 81044F26 0019 -81044f4c 0000 -81044f4e 0801 -part 2 81044F82 007D -81044fa8 0000 -81044faa 0801 ------------ -Streets 81044FDE 001D -81045004 1018 -81045006 2001 ------------ -depot 8104503A 001E -81045060 0000 -81045062 0801 ------------ -complex 81045096 001F -810450bc 2800 -810450be 0001 ------------ -Dam 810450F2 0021 -81045118 1030 -8104511A 6001 -sky part 2 8104514E 03A5 -81045174 1030 -81045176 6001 ------------ -facility 810451AA 0022 -810451d0 1020 -810451d2 1000 -facility gas leak? 81045206 0086 -8104522c 4080 -8104522e 4000 ------------ -Runway 81045262 0023 -81045288 1030 -8104528A 4001 ------------ -Surface 1 810452BE 0024 -810452E4 6060 -810452E6 8001 ------------ -jungle 8104531A 0025 -81045340 459c -81045342 4000 ------------ -temple 81045376 0026 -8104539c 1818 -8104539e 2801 ------------ -Caverns 810453D2 0027 -810453F8 0800 -810453FA 0800 ------------ -Cradle 8104542E 0029 -81045454 6080 -81045456 A001 ------------ -Surface 2 8104548A 002B -810454B0 2010 -810454B2 1001 -sky part 2 810454E6 03AF -8104550C 2010 -8104550E 1001 ------------ -Bunker 2 81045542 001B -81045568 1000 -8104556A 0001 ------------ -complex MULTI -2pl 8104559E 00D1 -810455C4 8078 -810455C6 7000 -3pl 810455FA 0135 -81045620 8078 -81045622 7000 -4pl 81045656 0199 -8104567C 8078 -8104567E 7000 ------------ -cradle MULTI -2pl 810456B2 00F1 -810456D8 6080 -810456DA A001 -3pl 8104570E 0155 -81045734 6080 -81045736 A001 -4pl 8104576A 01B9 -81045790 6080 -81045792 A001 ------------ -temple MULTI -2pl 810457C6 00EE -810457ec 1818 -810457ee 1801 -3pl 81045822 0152 -81045848 1818 -8104584a 1801 -4pl 8104587E 01B6 -810458a0 1818 -810458a2 1801 ------------ -caverns MULTI -2pl 810458DA 00EF -81045900 0800 -81045902 0800 -3pl 81045936 0153 -8104595C 0800 -8104595E 0800 -4pl 81045992 01B7 -810459B8 0800 -810459BA 0800 ------------ -default multiplayer -statue, library/basement/stack, caves, bunker 2, facility, egyptian, archives -2pl 810459EE 00C8 -81045A14 0000 -81045A16 0000 -3pl 81045A4A 012C -81045A70 0000 -81045A72 0000 -4pl 81045AA6 0190 -81045ACC 0000 -81045ACE 0000 ------------ -citadel 81045B02 0028 -81045B28 1850 -81045B2A 3801 ------------ -citadel MULTI -2pl 81045B5E 00F0 -81045B84 1850 -81045B86 3801 -3pl 81045BBA 0154 -81045BE0 1850 -81045BE2 3801 -4pl 81045C16 01B8 -81045C3C 1850 -81045C3E 3801 ------------ -complex'S SECOND SKY! MULTI -2pl 81045C72 00E7 -81045C98 2800 -81045C9C 0001 -3pl 81045CCE 014B -81045CF4 2800 -81045CF6 0001 -4pl 81045D28 01AF -81045D50 2800 -81045D52 0001 ------------ -aztec 81045D86 001C -81045dac 0000 -81045dae 0001 -second sky 81045DE2 0080 -81045E08 0000 -81045E0A 0001 ------------ -egyptian 81045E3E 0020 -81045e64 1030 -81045e66 6001 -second sky 81045E9A 0084 -81045EC0 0000 -81045EC2 0001 ------------ -blank entry at 5ef4 -followed by unusually different (yet valid) format ------------ -default/bunker 1 81045F50 FFFF + 81045F52 FFFF -81045F54 0010 -81045F56 4000 ------------ -frigate 81045F8A 001A -81045F8C 1030 -81045F8E 6001 ------------ -cuba 81045FC2 0036 -81045FC4 3040 -81045FC6 1000 - --------------------------- -0x64 b/w skies. solo 1, solo 2, multi 2pl, multi 3pl, multi 4pl. (I think...) - -FFFF 1pl default (bunker 1,silo) -0009 {1pl bunker 1 beta} -0014 {1pl silo beta} -0016 1pl statue -0017 1pl control -0018 1pl archives -0019 1pl train -001A 1pl frigate -001B 1pl Bunker 2 -001C 1pl aztec -001D 1pl streets -001E 1pl depot -001F 1pl complex -0020 1pl egypt -0021 1pl dam -0022 1pl facility -0023 1pl runway -0024 1pl surface 1 -0025 1pl jungle -0026 1pl temple -0027 1pl caverns -0028 1pl citadel -0029 1pl Cradle -002B 1pl surface 2 -002D {1pl Basement beta} -002E {1pl Stacks beta} -0030 {1pl Library beta} -0032 {1pl Caves beta} -0036 1pl cuba - -0064 {1pl #2 default sky} -006D {1pl #2 bunker 1 beta} -0078 {1pl #2 silo beta} -007A {1pl #2 statue beta} -007B {1pl #2 control beta} -007C {1pl #2 archives beta} -007D 1pl #2 train -007E {1pl #2 frigate beta} -007F {1pl #2 Bunker 2 beta} -0080 1pl #2 aztec -0081 {1pl #2 streets beta} -0082 {1pl #2 depot beta} -0083 {1pl #2 complex beta} -0084 1pl #2 egypt -0085 {1pl #2 dam beta} -0086 1pl #2 facility -0087 {1pl #2 runway beta} -0088 {1pl #2 surface 1 beta} -0089 {1pl #2 jungle beta} -008A {1pl #2 temple beta} -008B {1pl #2 caverns beta} -008C {1pl #2 citadel beta} -008D {1pl #2 cradle beta} -008E {1pl #2 surface 2 beta} -0094 {1pl #2 library} -009A {1pl #2 cuba beta} - -00C8 2pl default multi -00D1 2pl complex (BETA BUNKER 1?) -00DC {2pl silo beta} -00DE {2pl statue beta} -00DF {2pl control beta} -00E0 {2pl archives beta} -00E1 {2pl train beta} -00E2 {2pl frigate beta} -00E3 {2pl bunker 2 beta} -00E4 {2pl aztec beta} -00E5 {2pl streets beta} -00E6 {2pl depot beta} -00E7 2pl #2 complex -00E8 {2pl egypt beta} -00E9 {2pl dam beta} -00EA {2pl facility beta} -00EB {2pl runway beta} -00EC {2pl surface 1 beta} -00ED {2pl jungle beta} -00EE 2pl Temple -00EF 2pl caverns -00F0 2pl citadel -00F1 2pl cradle -00F2 {2pl surface 2 beta} -00F8 {2pl library} -00FE {2pl cuba beta} - -012C 3pl default multi -0135 3pl complex {bunker 1?} -0140 {3pl silo beta} -0142 {3pl statue beta} -0143 {3pl control beta} -0144 {3pl archives beta} -0145 {3pl train beta} -0146 {3pl frigate beta} -0147 {3pl bunker 2 beta} -0148 {3pl aztec beta} -0149 {3pl streets beta} -014A {3pl depot beta} -014B 3pl #2 complex -014C {3pl egypt beta} -014D {3pl dam beta} -014E {3pl facility beta} -014F {3pl runway beta} -0150 {3pl surface 1 beta} -0151 {3pl jungle beta} -0152 3pl temple -0153 3pl caverns -0154 3pl citadel -0155 3pl cradle -0156 {3pl surface 2 beta} -015C {3pl library} -0162 {3pl cuba beta} - -0190 4pl default multi -0199 4pl complex {bunker 1?} -01A4 {4pl silo beta} -01A6 {4pl statue beta} -01A7 {4pl control beta} -01A8 {4pl archives beta} -01A9 {4pl train beta} -01AA {4pl frigate beta} -01AB {4pl bunker 2 beta} -01AC {4pl aztec beta} -01AD {4pl streets beta} -01AE {4pl depot beta} -01AF 4pl #2 complex -01B0 {4pl egypt beta} -01B1 {4pl dam beta} -01B2 {4pl facility beta} -01B3 {4pl runway beta} -01B4 {4pl surface 1 beta} -01B5 {4pl jungle beta} -01B6 4pl temple -01B7 4pl caverns -01B8 4pl citadel -01B9 4pl cradle -01BA {4pl surface 2 beta} -01C0 {4pl library} -01C6 {4pl cuba beta} - -x9 cutscenes? -03A5 1pl #2 dam? -03AF 1pl #2 surface 2? - -one blank entry in the chart...plus room after it ---------------------------- -statue multiplayer skies -81044E12 00DE -D002B523 0003 -81044E12 0142 -D002B523 0004 -81044E12 01A6 - -control multiplayer skies -(not necessary) -81044E6E 00DF -D002B523 0003 -81044E6E 0143 -D002B523 0004 -81044E6E 01A7 - -archives multiplayer skies -81044ECA 00E0 -D002B523 0003 -81044ECA 0144 -D002B523 0004 -81044ECA 01A8 - -train multiplayer skies -81044F26 00E1 -D002B523 0003 -81044F26 0145 -D002B523 0004 -81044F26 01A9 - -frigate multiplayer skies -(minus water...) -81045F8A 00E2 -D002B523 0003 -81045F8A 0146 -D002B523 0004 -81045F8A 01AA - -Bunker 2 multiplayer skies -81045542 00E3 -D002B523 0003 -81045542 0147 -D002B523 0004 -81045542 01AB - -aztec multiplayer skies -81045D86 00E4 -D002B523 0003 -81045D86 0148 -D002B523 0004 -81045D86 01AC - -streets multiplayer skies -81044FDE 00E5 -D002B523 0003 -81044FDE 0149 -D002B523 0004 -81044FDE 01AD - -depot multiplayer skies -8104503A 00E6 -D002B523 0003 -8104503A 014A -D002B523 0004 -8104503A 01AE - -egyptian multiplayer skies -81045E3E 00E8 -D002B523 0003 -81045E3E 014C -D002B523 0004 -81045E3E 01B0 - -egyptian after dark multiplayer skies -81045E9A 00E8 -D002B523 0003 -81045E9A 014C -D002B523 0004 -81045E9A 01B0 - -dam multiplayer skies -(minus the water...) -810450F2 00E9 -D002B523 0003 -810450F2 014D -D002B523 0004 -810450F2 01B1 - -facility multiplayer skies -810451AA 00EA -D002B523 0003 -810451AA 014E -D002B523 0004 -810451AA 01B2 - -runway multiplayer skies -81045262 00EB -D002B523 0003 -81045262 014F -D002B523 0004 -81045262 01B3 - -surface 1 multiplayer skies -810452BE 00EC -D002B523 0003 -810452BE 0150 -D002B523 0004 -810452BE 01B4 - -jungle multiplayer skies -8104531A 00ED -D002B523 0003 -8104531A 0151 -D002B523 0004 -8104531A 01B5 - -surface 2 multiplayer skies -8104548A 00F2 -D002B523 0003 -8104548A 0156 -D002B523 0004 -8104548A 01BA - -surface 2 sky in surface 1 multi -8104548A 00EC -D002B523 0003 -8104548A 0150 -D002B523 0004 -8104548A 01B4 - -cuba multiplayer skies -81045FC2 00FE -D002B523 0003 -81045FC2 0162 -D002B523 0004 -81045FC2 01C6 diff --git a/notes/GE Documentation/Background File Data/Global Visibility Microcode/commands.txt b/notes/GE Documentation/Background File Data/Global Visibility Microcode/commands.txt deleted file mode 100644 index 7954721..0000000 --- a/notes/GE Documentation/Background File Data/Global Visibility Microcode/commands.txt +++ /dev/null @@ -1,79 +0,0 @@ -format: -0x0 1 type -0x1 1 #commands, 0x8 each -0x2 2 RESERVED -0x4 var data - -for multi-command entries, 645 is a type identifier for portal offsets and 65 the identifier for room numbers. - -type 00: end -00.01.0000 00000000 - -type 01: push d to stack -01.01.0000 dddddddd - -type 02: pull off stack -02.01.0000 00000000 - -type 03: AND and merge last two values on stack -03.01.0000 00000000 - -type 04: OR and merge last two values on stack -04.01.0000 00000000 - -type 05: ! last value on stack -05.01.0000 00000000 - -type 06: XOR and merge last two values on stack -06.01.0000 00000000 - -type 14: push TRUE/FALSE to stack if within range of rooms -14.03.0000 00000000 65000000 000000rr 65000000 000000rr - -type 1E: force visible -1E.01.0000 00000000 - -type 1F: match visibility to that of portal -1F.02.0000 00000000 64000000 pppppppp - -type 20: add visible room -20.02.0000 00000000 65000000 000000rr - -type 21: initialize block; removes visibility -21.01.0000 00000000 - -type 22: make visible if portal can view room -22.02.0000 00000000 64000000 pppppppp - -type 23: remove visibility if portal can not view room -23.02.0000 00000000 64000000 pppppppp - -type 24: disable room (1->room[r]+34) -24.02.0000 00000000 65000000 000000rr - -type 25: disable rooms (1->room[r1:r2]+34) -24.03.0000 00000000 65000000 000000r1 65000000 000000r2 - -type 26: preload room -26.02.0000 00000000 65000000 000000rr - -type 27: preload range of rooms -27.03.0000 00000000 65000000 000000rr 65000000 000000rr - -type 50: IF statement (re-entrant) -50.01.0000 00000000 - -type 51: disable reading commands; if reading disabled, also disables parent -51.01.0000 00000000 - -type 52: ENDIF FALSE, command reading enabled -52.01.0000 00000000 - -type 5A: IF(pulled condition) statement (re-entrant) -5A.01.0000 00000000 - -type 5B: toggle reading/ignoring commands -5B.01.0000 00000000 - -type 5C: ENDIF -5C.01.0000 00000000 diff --git a/notes/GE Documentation/Background File Data/Global Visibility Microcode/global visibility types.txt b/notes/GE Documentation/Background File Data/Global Visibility Microcode/global visibility types.txt deleted file mode 100644 index bbd0169..0000000 --- a/notes/GE Documentation/Background File Data/Global Visibility Microcode/global visibility types.txt +++ /dev/null @@ -1,620 +0,0 @@ -S1=p->current command [801B68EC] -command structure: -0x0 1 type -0x1 1 minimum number of commands expected in type -0x2 2 reserved -0x4 4 data - -parsing through 7F0B8480 -processing uses commands @ 80058C80 (0xD) and 80058CB4 (0x28) - -7F0B84D0 type 00 normal termination [set position to start and break] -7F0B84D8 type 01 push to stack -7F0B84F8 type 02 pull from stack -7F0B8518 type 03 & and merge last two on stack -7F0B8548 type 04 | and merge last two on stack -7F0B8578 type 05 ! last on stack -7F0B85A0 type 06 ^ last two on stack -7F0B89F0 type 07 terminate (invalid type) -7F0B89F0 type 08 terminate (invalid type) -7F0B89F0 type 09 terminate (invalid type) -7F0B89F0 type 0A terminate (invalid type) -7F0B89F0 type 0B terminate (invalid type) -7F0B89F0 type 0C terminate (invalid type) -7F0B89F0 type 0D terminate (invalid type) -7F0B89F0 type 0E terminate (invalid type) -7F0B89F0 type 0F terminate (invalid type) -7F0B89F0 type 10 terminate (invalid type) -7F0B89F0 type 11 terminate (invalid type) -7F0B89F0 type 12 terminate (invalid type) -7F0B89F0 type 13 terminate (invalid type) -7F0B85D0 type 14 push true/false if in range of rooms -7F0B89F0 type 15 terminate (invalid type) -7F0B89F0 type 16 terminate (invalid type) -7F0B89F0 type 17 terminate (invalid type) -7F0B89F0 type 18 terminate (invalid type) -7F0B89F0 type 19 terminate (invalid type) -7F0B89F0 type 1A terminate (invalid type) -7F0B89F0 type 1B terminate (invalid type) -7F0B89F0 type 1C terminate (invalid type) -7F0B89F0 type 1D terminate (invalid type) -7F0B8614 type 1E force visible -7F0B8654 type 1F match portal visibility -7F0B8788 type 20 add visible room -7F0B8914 type 21 remove visibility [save S7->S4] -7F0B86A8 type 22 visible if seen through portal -7F0B8714 type 23 not visible if not seen through portal -7F0B87F4 type 24 disable room -7F0B8828 type 25 disable range of rooms -7F0B8884 type 26 preload room -7F0B88B8 type 27 preload range of rooms - -7F0B8930 type 50 if statement -7F0B896C type 51 don't execute commands even on return -7F0B8954 type 52 endif and continue executing commands -7F0B89F0 type 53 terminate (invalid type) -7F0B89F0 type 54 terminate (invalid type) -7F0B89F0 type 55 terminate (invalid type) -7F0B89F0 type 56 terminate (invalid type) -7F0B89F0 type 57 terminate (invalid type) -7F0B89F0 type 58 terminate (invalid type) -7F0B89F0 type 59 terminate (invalid type) -7F0B8990 type 5A if(pull from stack) statement -7F0B89C8 type 5B toggle execute vs read only -7F0B89E0 type 5C endif - -Actual execution is more complex than originaly deemed. There are multiple tables of entries, and entries can be toggled on-off during processing. Execution only occurs when breaks are intered, so table management is key. Aegh... - -+-+ types in detail - -7F0B8374 ECEA4 push A0 onto 800448A8 table; V0=value written - accepts: A0=value to set onto table -LUI A1,8004 -ADDIU A1,A1,48F8 -LW V1,0000 (A1) ;V1=800448F8: index.cur, or alternately total entries -LUI AT,8004 -OR V0,A0,R0 ;V0=A0: value -SLL T6,V1,0x2 -ADDU AT,AT,T6 -SW A0,48A8 (AT) ;A0->800448A8+offset: save value to final (current) entry -ADDIU AT,R0,0014 ;AT=0x14 -ADDIU T7,V1,0001 ;T7=?+1 increment index -DIV T7,AT -MFHI T8 ;T8=T7%0x14 -SW T8,0000 (A1) ;save new index -JR RA -NOP - -7F0B83B0 ECEE0 pull V0 from 800448A8 table -LUI A0,8004 -ADDIU A0,A0,48F8 -LW T6,0000 (A0) ;T6=800448F8: index.cur -ADDIU AT,R0,0014 ;AT=0x14 -LUI V1,8004 -ADDIU T7,T6,0013 ;previous -DIV T7,AT -MFHI T8 -SLL T0,T8,0x2 ;T0=previous index -> offset -ADDU V1,V1,T0 -SW T8,0000 (A0) ;save new index value to 800448F8 -JR RA -LW V0,48A8 (V1) ;V0=800448A8+offset: value pulled from table - -7F0B83E4 ECF14 pull V0 from entry A0 in 800458A8 table - accepts: A0=entry to pull -LUI T6,8004 -LW T6,48F8 (T6) ;T6=800448F8: #entries -ADDIU AT,R0,0014 ;AT=0x14 -LUI V0,8004 -SUBU T7,T6,A0 ;T7=index.cur-A0: nth entry from end to start -ADDIU T8,T7,0013 ;T8=T7-1: previous entry -DIV T8,AT -MFHI T9 ;T9=T8%0x14 -SLL T0,T9,0x2 ;T0=T9->offset -ADDU V0,V0,T0 -JR RA -LW V0,48A8 (V0) ;V0->800448A8+offset: value pulled from table[A0] - -+_+ - -7F0B8414 ECF44 parse global visibility command list - accepts: A0=p->cmd, A1=mode -ADDIU SP,SP,FF80 -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -LUI AT,8008 -OR S1,A0,R0 ;S1=A0: p->cmd -OR S2,A1,R0 ;S2=A1: mode -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S0,0018 (SP) -ADDIU S3,R0,0001 ;S3=1 -BNEZ A0,7F0B8460 ;return if A0 NULL -SW R0,1610 (AT) ;0->80081610: return value for 'conditional' types -BEQ R0,R0,7F0B89F4 -OR V0,A0,R0 -//7F0B8460: -LUI S8,8008 -LUI S6,8008 -LUI S4,8004 -ADDIU S4,S4,48FC ;S4= 800448FC -ADDIU S6,S6,1600 ;S6= 80081600 -ADDIU S8,S8,A0B0 ;S8= 8007A0B0: p->BONDdata -ADDIU S7,R0,0001 ;S7= 1 -ADDIU S5,R0,0001 ;S5= 1 -//7F0B8480: process command -LBU A0,0000 (S1) ;A0=cmd.type -SLTI AT,A0,0028 -BNEZ AT,7F0B84B0 ;skip if 0-27 -ADDIU T6,A0,FFB0 -//7F0B8490: commands 50-5C -SLTIU AT,T6,000D -BEQ AT,R0,7F0B89F0 ;return if invalid -SLL T6,T6,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,8C80 (AT) ;T6=80058C80+offset: handler for types 50-5C -JR T6 -NOP -//7F0B84B0: commands 0-27 -SLTIU AT,A0,0028 -BEQ AT,R0,7F0B89F0 ;return if invalid -SLL T7,A0,0x2 -LUI AT,8006 -ADDU AT,AT,T7 -LW T7,8CB4 (AT) ;T6=80058CB4+offset: handler for types 50-5C -JR T7 -NOP - -7F0B84D0 type 00 break -BEQ R0,R0,7F0B89F4 ;return V0=p->cmd -OR V0,S1,R0 - -7F0B84D8 type 01 ???; push DATA onto 800448A8 stack -BEQL S2,R0,7F0B84EC ;if mode 0, ignore command -LBU T8,0001 (S1) -JAL 7F0B8374 ;push A0 onto table -LW A0,0004 (S1) ;A0=data -//7F0B84E8: advance -LBU T8,0001 (S1) ;cmd.size -SLL T9,T8,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T9 ;S1=next cmd - -7F0B84F8 type 02 ???; pull V0 off 800448A8 stack -BEQL S2,R0,7F0B850C ;if mode 0, ignore command -LBU T0,0001 (S1) -JAL 7F0B83B0 ;pull V0 from stack -NOP -//7F0B8508: -LBU T0,0001 (S1) ;cmd.size -SLL T1,T0,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T1 ;S1=next cmd - -7F0B8518 type 03 ???; AND last two values on stack and replace -BEQL S2,R0,7F0B853C ;if mode 0, ignore command -LBU T2,0001 (S1) -JAL 7F0B83B0 ;pull V0 off stack -NOP -JAL 7F0B83B0 ;pull V0 off stack -OR S0,V0,R0 ;S0=V0: value 1 -JAL 7F0B8374 ;push A0 onto stack -AND A0,V0,S0 ;A0=value2 & value1 -//7F0B8538: -LBU T2,0001 (S1) ;cmd.size -SLL T3,T2,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T3 ;S1=next cmd - -7F0B8548 type 04 ??? OR last two values on stack and replace -BEQL S2,R0,7F0B856C ;if mode 0, ignore command -LBU T4,0001 (S1) -JAL 7F0B83B0 ;pull V0 off stack -NOP -JAL 7F0B83B0 ;pull V0 off stack -OR S0,V0,R0 ;S0=V0: value 1 -JAL 7F0B8374 ;push A0 onto stack -OR A0,V0,S0 ;A0=V0 | S0 -//7F0B8568: -LBU T4,0001 (S1) ;cmd.size -SLL T5,T4,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T5 ;S1=next cmd - -7F0B8578 type 05 ??? ! last value on stack -BEQL S2,R0,7F0B8594 ;if mode 0, ignore command -LBU T6,0001 (S1) -JAL 7F0B83B0 ;pull V0 off stack -NOP -JAL 7F0B8374 ;push A0 onto stack -SLTIU A0,V0,0001 ;A0=!V0 -//7F0B8590: -LBU T6,0001 (S1) ;cmd.size -SLL T7,T6,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T7 ;S1=next cmd - -7F0B85A0 type 06 ??? XOR last two values on stack -BEQL S2,R0,7F0B85C4 ;if mode 0, ignore command -LBU T8,0001 (S1) -JAL 7F0B83B0 ;pull V0 off stack -NOP -JAL 7F0B83B0 ;pull V0 off stack -OR S0,V0,R0 ;S0=V0: value 1 -JAL 7F0B8374 ;push A0 onto stack -XOR A0,V0,S0 ;A0=value2^value1 -//7F0B85C0: -LBU T8,0001 (S1) ;cmd.size -SLL T9,T8,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T9 ;S1=next cmd - -7F0B85D0 type 14 range of rooms capable of sight -BEQ S2,R0,7F0B8604 ;if mode 0, ignore command -LUI V0,8004 -LW V0,4838 (V0) ;V0=80044838: current room? -LW T0,000C (S1) ;T0=room #1 -SLT A0,V0,T0 -XORI A0,A0,0001 ;A0=TRUE if ? >= room1 -BEQ A0,R0,7F0B85FC ;branch if included in range -NOP -LW T1,0014 (S1) ;T1=room #2 -SLT A0,T1,V0 -XORI A0,A0,0001 ;A0=TRUE if room2 >= ? -//7F0B85FC: pushes 1 to stack if cur. within range -JAL 7F0B8374 ;push A0 onto stack -NOP -//7F0B8604: -LBU T2,0001 (S1) ;cmd.size -SLL T3,T2,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T3 ;S1=next cmd - -7F0B8614 type 1E force room visible without need of portals -BEQL S2,R0,7F0B8648 ;if mode 0, ignore command -LBU T4,0001 (S1) -LW V0,0000 (S8) ;V0=p->BONDdata -LWC1 F4,1118 (V0) -SWC1 F4,0000 (S6) ;BONDdata+1118 -> 80081600+0 -LWC1 F6,111C (V0) -SWC1 F6,0004 (S6) ;BONDdata+111C -> 80081600+4 -LWC1 F8,1120 (V0) -SWC1 F8,0008 (S6) ;BONDdata+1120 -> 80081600+8 -LWC1 F10,1124 (V0) -SW R0,0000 (S4) ;0->800448FC -SWC1 F10,000C (S6) ;BONDdata+1124 -> 80081600+C -//7F0B8644: -LBU T4,0001 (S1) ;cmd.size -SLL T5,T4,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T5 ;S1=next cmd - -7F0B8654 type 1F match portal visibility -BEQ S2,R0,7F0B8698 ;if mode 0, ignore command -OR A1,S6,R0 ;A1= 80081600 -JAL 7F0B5864 -LW A0,000C (S1) ;A0=portal -BNEL V0,R0,7F0B8678 ;disable unless referenced -LW A1,0000 (S8) -BEQ R0,R0,7F0B8698 -SW S7,0000 (S4) ;1->800448FC -//7F0B8674: V0!=0 -LW A1,0000 (S8) ;A1=p->BONDdata -OR A0,S6,R0 ;A0= 80081600 -JAL 7F0B5BDC ;V0=TRUE if A0 in line-of-sight with A1 -ADDIU A1,A1,1118 ;A1=BONDdata+1118 -BNEL V0,R0,7F0B8698 ;if set, make visible: 0->800448FC -SW R0,0000 (S4) -BEQ R0,R0,7F0B8698 ;else 1->800448FC -SW S7,0000 (S4) ;1->800448FC -//7F0B8694: -SW R0,0000 (S4) -//7F0B8698: -LBU T6,0001 (S1) ;cmd.size -SLL T7,T6,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T7 ;S1=next cmd - -7F0B8788 type 20 add visible room -BEQL S2,R0,7F0B87E8 ;if mode 0, ignore command -LBU T7,0001 (S1) -LW T4,0000 (S4) -OR A1,S6,R0 ;A1=S6: 80081600 -BNEL T4,R0,7F0B87E8 ;ignore if 800448FC set: not visible -LBU T7,0001 (S1) -JAL 7F0B5208 -LW A0,000C (S1) ;A0=room# -BEQ V0,R0,7F0B87E4 ;ignore if FALSE -OR A1,R0,R0 ;A1=0 -LW A0,000C (S1) ;A0=room# -OR A2,S6,R0 ;A2=S6: 80081600 -JAL 7F0B39BC -OR A3,R0,R0 ;A3=0 -//7F0B87C0: add room to list and increment total -LUI V1,8008 -LW V1,C038 (V1) ;V1=8007C038: number of visible rooms in list -LW T5,000C (S1) ;T5=room# -LUI AT,8008 -ADDU AT,AT,V1 -SB T5,BFA0 (AT) ;T5->8007BFA0+offset: save room# to list -LUI AT,8008 -ADDIU T6,V1,0001 ;T6=V1+1 -SW T6,C038 (AT) ;T6->8007C038: save new count -//7F0B87E4: -LBU T7,0001 (S1) ;cmd.size -SLL T8,T7,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T8 ;S1=next cmd - -7F0B8914 type 21 begin new block; set not visible -BEQL S2,R0,7F0B8924 ;if mode 0, ignore command -LBU T5,0001 (S1) -SW S7,0000 (S4) ;1->800448FC -//7F0B8920: -LBU T5,0001 (S1) ;cmd.size -SLL T6,T5,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T6 ;S1=next cmd - -7F0B86A8 type 22 make visible if portal can view room -BEQ S2,R0,7F0B8704 ;if mode 0, ignore command -ADDIU A1,SP,0068 ;A1=SP+68 -JAL 7F0B5864 -LW A0,000C (S1) ;A0=cmd+C: portal# -BEQL V0,R0,7F0B8708 ;ignore if not referenced -LBU T9,0001 (S1) -LW A1,0000 (S8) ;A1=p->cur.BONDdata -ADDIU A0,SP,0068 ;A0=SP+68 -JAL 7F0B5BDC ;V0=TRUE if A0 in line-of-sight with A1 -ADDIU A1,A1,1118 ;A1=p->cur.BONDdata+1118: unknown float use in no_portals_necessary -BEQL V0,R0,7F0B8708 ;ignore if portal not visible -LBU T9,0001 (S1) -//7F0B86D8: copy perspective info or something like that -LW T8,0000 (S4) ;T8=800448FC: current visibility setting -ADDIU A1,SP,0068 ;A1=SP+68 -OR A0,S6,R0 ;A0=S6: -BEQ T8,R0,7F0B86FC ;skip if room already set visible -NOP -JAL 7F0B5D58 ;copies 4 floats from A1->A0 -OR A0,S6,R0 ;A0=S6: 80081600 -BEQ R0,R0,7F0B8704 -SW R0,0000 (S4) ;0->800448FC: make visible -//7F0B86FC: -JAL 7F0B5CC0 -ADDIU A1,SP,0068 ;A1=SP+68 -//7F0B8704: -LBU T9,0001 (S1) ;cmd.size -SLL T0,T9,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T0 ;S1=next cmd - -7F0B8714 type 23 remove visibility if portal can not view room -BEQL S2,R0,7F0B877C ;if mode 0, ignore command -LBU T2,0001 (S1) -LW T1,0000 (S4) ;T1=800448FC -ADDIU A1,SP,0058 ;A1=SP+58 -BNEL T1,R0,7F0B877C ;ignore command if T1!=0 -LBU T2,0001 (S1) -JAL 7F0B5864 -LW A0,000C (S1) ;A0=portal# -BNEL V0,R0,7F0B8748 -LW A1,0000 (S8) -BEQ R0,R0,7F0B8778 -SW S7,0000 (S4) ;1->800448FC -//7F0B8744: when V0!=0 -LW A1,0000 (S8) -ADDIU A0,SP,0058 ;A0=SP+58 -JAL 7F0B5BDC ;V0=TRUE if A0 in line-of-sight with A1 -ADDIU A1,A1,1118 ;A1=cur.BONDdata+1118 -BNEZ V0,7F0B8764 ;if not in line-of-sight, kill visibility -OR A0,S6,R0 ;A0=S6: 80081600 -BEQ R0,R0,7F0B8778 -SW S7,0000 (S4) ;1->800448FC -//7F0B8764: -JAL 7F0B5BDC ;V0=TRUE if A0 in line-of-sight with A1 -ADDIU A1,SP,0058 ;A1=SP+58 -BNEL V0,R0,7F0B877C ;if not within perspective also kill visibility -LBU T2,0001 (S1) -SW S7,0000 (S4) ;1->800448FC -//7F0B8778: -LBU T2,0001 (S1) ;cmd.size -SLL T3,T2,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T3 ;S1=next cmd - -7F0B87F4 type 24 save 1 to entry +34 in room table -BEQL S2,R0,7F0B881C ;if mode 0, ignore command -LBU T1,0001 (S1) -LW T9,000C (S1) ;T9=room# -LUI AT,8004 -SLL T0,T9,0x2 -ADDU T0,T0,T9 -SLL T0,T0,0x4 ;T0=T9*0x50 -ADDU AT,AT,T0 -SB S5,1448 (AT) ;1->80041414+34+offset: -//7F0B8818: -LBU T1,0001 (S1) ;cmd.size -SLL T2,T1,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T2 ;S1=next cmd - -7F0B8828 type 25 set flag for rooms between val1 and val2 -BEQL S2,R0,7F0B8878 ;if mode 0, ignore command -LBU T7,0001 (S1) -LW V0,000C (S1) ;V0=room.start -LW T3,0014 (S1) ;T3=room.end -LUI T5,8004 -SLL T4,V0,0x2 -SLT AT,T3,V0 -BNEZ AT,7F0B8874 ;end if room.end < room.start -ADDU T4,T4,V0 -SLL T4,T4,0x4 ;T4=value1*0x50 -ADDIU T5,T5,1414 -ADDU V1,T4,T5 ;V1=80041414+offset: p->room -SB S5,0034 (V1) ;1->V1+34: ?->80041414+val1offset+34 -//7F0B885C: loop while cur>=end -LW T6,0014 (S1) ;T6=end -ADDIU V0,V0,0001 ;V0++ next room -ADDIU V1,V1,0050 ;V1+=50 next entry -SLT AT,T6,V0 -BEQL AT,R0,7F0B885C -SB S5,0034 (V1) ;1->room+34: -//7F0B8874: -LBU T7,0001 (S1) ;cmd.size -SLL T8,T7,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T8 ;S1=next cmd - -7F0B8884 type 26 preload room -BEQL S2,R0,7F0B88AC ;if mode 0, ignore command -LBU T0,0001 (S1) -BEQL S3,R0,7F0B88AC ;skip if room.loaded flag not set -LBU T0,0001 (S1) -JAL 7F0B6314 -LW A0,000C (S1) ;A0=room# -SLTIU S3,V0,0001 ;S3= !value: TRUE if room.loaded flag set -ANDI T9,S3,00FF -OR S3,T9,R0 ;(byte) S3 -//7F0B88A8: -LBU T0,0001 (S1) ;cmd.size -SLL T1,T0,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T1 ;S1=next cmd - -7F0B88B8 type 27 preload range of rooms -BEQL S2,R0,7F0B8908 ;if mode 0, ignore command -LBU T3,0001 (S1) -LW S0,000C (S1) ;S0=room.start -LW V1,0014 (S1) ;V1=room.end -SLT AT,V1,S0 ;TRUE if end80081610 - -7F0B8954 type 52 return and permit reading commands -LBU T1,0001 (S1) ;cmd.size -LUI AT,8008 -SW R0,1610 (AT) ;0->80081610 -SLL T2,T1,0x3 -BEQ R0,R0,7F0B89F4 ;return V0=p->next command -ADDU V0,S1,T2 - -7F0B8990 type 5A re-entrant: calls parser in previously set mode, setting mode on return -JAL 7F0B83B0 ;pull V0 off stack -NOP -LBU T5,0001 (S1) ;cmd.size -AND A1,V0,S2 ;A1= mode & result -SLL T6,T5,0x3 -JAL 7F0B8414 ;calls this command parser using next command -ADDU A0,T6,S1 -LUI T7,8008 -LW T7,1610 (T7) ;T7=80081610 -OR S1,V0,R0 -BEQL T7,R0,7F0B8484 ;if 80081610 set, set mode to 0 (ignore command) -LBU A0,0000 (S1) -BEQ R0,R0,7F0B8480 -OR S2,R0,R0 - -7F0B89C8 type 5B toggle S2 flag (read/ignore commands) -LBU T9,0001 (S1) ;cmd.size -XORI T8,S2,0001 -OR S2,T8,R0 ;untoggle S2 flag -SLL T0,T9,0x3 -BEQ R0,R0,7F0B8480 -ADDU S1,S1,T0 ;S1=next cmd - -7F0B89E0 type 5C return p->next command -LBU T1,0001 (S1) ;cmd.size -SLL T2,T1,0x3 -BEQ R0,R0,7F0B89F4 -ADDU V0,S1,T2 ;V0=p->next command - -7F0B89F0 terminate -OR V0,S1,R0 ;return V0=p->cmd -//7F0B89F4: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0080 - -+_+ - -7F0B6314 EAE44 - accepts: A0=room# -SLL T6,A0,0x2 -ADDU T6,T6,A0 -LUI T7,8004 -ADDIU T7,T7,1414 -SLL T6,T6,0x4 ;T6=A0*0x50 -ADDU V0,T6,T7 -LBU T9,0002 (V0) ;80041414+2+offset: rooms.loaded -ADDIU SP,SP,FFE8 -ADDIU T8,R0,0001 -SW RA,0014 (SP) -BNEZ T9,7F0B6354 ;return FALSE if models already loaded -SB T8,0035 (V0) ;1->rooms+35: -JAL 7F0B6368 -NOP -BEQ 7F0B6358 ;return TRUE -ADDIU V0,R0,0001 -//7F0B6354: return FALSE -OR V0,R0,R0 -//7F0B6358: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Background File Data/Portal (port) Lists/port format.txt b/notes/GE Documentation/Background File Data/Portal (port) Lists/port format.txt deleted file mode 100644 index cba0156..0000000 --- a/notes/GE Documentation/Background File Data/Portal (port) Lists/port format.txt +++ /dev/null @@ -1,18 +0,0 @@ -0x0 4 offset/pointer to portal vertex list -0x4 1 parent room -0x5 1 child room -0x6 1 flags - 01 - 02 -0x7 1 counter - F0 repeat counter - 0F value - 08 set if upper nibble set - - Portals are defined by vertex tables at the given offset. These connect the parent room with the child room and are bi-directionally visable. - - -Byte 7: - F2= lower nibble / 2 - if upper nibble set, F2+=F2 - diff --git a/notes/GE Documentation/Background File Data/background data.txt b/notes/GE Documentation/Background File Data/background data.txt deleted file mode 100644 index d1555ab..0000000 --- a/notes/GE Documentation/Background File Data/background data.txt +++ /dev/null @@ -1,169 +0,0 @@ -Background Data ---------------- - - Background data consists of three seperate orders of files. The primary background file is an uncompressed binary. This binary contains offsets to the 1172 (z-custom) compressed room data. Room data is partitioned into one or two display lists and a point table. The final file is an 1172 compressed clipping file that dictates the playable area. This will be covered in a seperate document. - - The primary background file consists of several sections. First are a list of offsets to the room mapping and point binaries. Second is a list of special globalized visibility, triggering multiple rooms to be visible at once through pseudocode. Lastly are the room portals and a table relating what rooms are interlinked. - - The background file's header indicates at what offset each of these is located at. All offsets are relative to the location of the primary background file in ROM and are preceeded by a value, indicating the scope of that offset. Only use the lower three bytes of each offset, and add it to the initial ROM location of the file. - -0x0 4 reserved -0x4 4 offset to room data table -0x8 4 offset to portal data table -0xC 4 offset to global visibility commands - ---------------- -Room Data Table - - The room data table contains a wide assortment of data. Each room is positioned within the level using the position data given here. It also contains pointers to each of the mapping and point table blocks used to construct the room. The beginning of the table is given at bg_file offset 0x4, starting with room 0. Room 0 is always invalid, so all the values in this struct will be set to zero. The last entry is also not a valid room. It exists for the sole purpose of demarking the filesizes of the previous room's entries. - - Each rooms' x, y, and z positions are given as floating-point numbers. To ensure the model aligns with the possible clipping coordinates, these values will always translate to integer values. All values are relative to the stage centerpoint; 0,0,0. - - The file offsets are offsets from the ROM location of the bg_file. The first byte of each offset should be masked to remove the value indicating scope, ie. 0x00FFFFFF & offset. The size of each binary can be determined by retrieving the next entry in the table. - At no point are the total number of room entries given, though it can be calculated from the visibility offset or more simply determined by comparing the first room's primary mapping offset to the point table offset of the current room. If the two match, the current 'room' is the final dummy entry. Each struct is 0x18 bytes large, so you can divide the difference in the first and current offsets by this value to return the room number. - - All room binaries are compressed with 1172 compression. The primary mapping is always present and is used to draw the majority of the room. Secondary mapping is optional; gunfire does not collide with polygons drawn by this block. For this reason, secondary mapping is used for overlays, railings, and other effects. Point tables are shared by both mapping types and contain a full list of the positions needed to draw the room. - -0x0 4 (float) x position -0x4 4 (float) y position -0x8 4 (float) z position -0xC 4 offset to point table binary -0x10 4 offset to primary mapping binary -0x14 4 offset to secondary mapping binary, when preset - - There is a certain pattern to the room binaries. All the point tables are listed immediately after the primary bg_file. Following these are the primary, then secondary mapping for each room. To determine the size of a binary: - -Point tables: - Subtract offset for current binary from following room's point table offset - -Primary Mapping Only: - Subtract offset for current binary from following room's primary mapping offset - -Primary + Secondary Mapping: - Subtract offset of primary mapping from secondary mapping - Subtract offset of secondary mapping from following room's primary mapping - ---------------- -Portal Data Table - - Portals allow rooms to be activated when within sight. Each acts as a window connecting one unique room to another. The portal table consists of offsets to actual portal polygonal data and a list of rooms interlinked. An offset to the portal table can be found at bg_file offset 0x8. - -0x0 4 offset to portal address (mask offset with 0x0F000000) -0x4 1 connected room 1 -0x5 1 connected room 2 -0x6 2 control bytes for special attributes, beyond the scope of file parsing - - The table terminates with a NULL entry - all values equal to zero. - - When a player enters a room, the room ID is searched for in the table. If the value matches either connected room ID, then the portal at the offset is activated. When the player is within sight of a portal, both rooms connected to that portal are activated. Technically, rooms connected directly to the current room are usually pre-loaded even when not within visible range to ensure smooth gameplay. - - - Portals themselves are stored at the end of the bg_file, just before the compressed room data. They are a simple list of x, y, and z positions storeed as floating-point numbers. All points proceed clockwise around to form a polygon, and all points are relative to the centerpoint of the stage, 0,0,0. To properly integrate them with clipping, each float should be an integer value. The first byte of the first word indicates the number of points following, 1-n, and each portal can consist of as many points as desired. - -0x0 1 number of points in portal -0x1 3 filler bytes (000000) -0x4 4 (float) first X position -0x8 4 (float) first y position -0xC 4 (float) first z position -etc... - ---------------- -Global Visibility Commands - - Global visibility commands are used to activate and deactivate rooms and portals through triggered events. They are used, among other times, to render the cliff faces around the Dam, the roof in the lower storage area of Archives, and the gas containers in two of the bottling rooms of Facility. - The pseudocode is built from 32bit values and begins at the offset given at 0xC in the bg_file. Commands are processed until a terminator is reached, command 00010000 00000000. Most commands are container classes that contain lists of other command types. - -Basic Commands: -00010000 00000000 terminator -21010000 00000000 starts a block of visibility commands, ending any previous blocks - -Containers: -14030000 00000000 activated rooms are visible from every room between room #1 to room #2 - expects: 65000000 000000#1 65000000 000000#2 5A010000 00000000 -5A010000 00000000 end 14 list -1E010000 00000000 activated rooms are visible without portals - expects: 5C010000 00000000 -1F020000 00000000 activated rooms are visible through the following portals - expects: 64000000 0F###### ... - further entries 22020000 00000000 64000000 0F###### - end list 5C010000 00000000 -5C010000 00000000 end 1E or 1F list -20020000 00000000 following rooms (65 commands) are activated - expects: 65000000 000000#1 -24020000 00000000 following room (65 command) is ? - expects: 65000000 000000#1 -25030000 00000000 following rooms (65 commands) are ? - expects: 65000000 000000#1 65000000 000000#2 ? - further entries 26020000 00000000 65000000 000000#n -26020000 00000000 following room (65 command) is ? - expects: 65000000 000000#1 -27030000 00000000 following rooms (65 commands) are ? - expects: 65000000 000000#1 65000000 000000#2 ? - -Sub-Commands (always within containers): -22020000 00000000 AND statement linking multiple 64 commands when listed -64000000 0Fxxxxxx offset within file, typically to portal data (0F relates scope) -26020000 00000000 AND statement linking multiple 65 commands when listed -65000000 000000xx room number. multiple entries do not require 2202 commands - - This is not as complex as it seems. To make a single room visible when a player is within one of four sequential rooms, this code would apply. -21010000 00000000 \\start block -14030000 00000000 \\room is visible from following rooms - 65000000 0000001C \\from room 1C... - 65000000 0000001F \\...to room 1F - 5A010000 00000000 \\end list -1E010000 00000000 \\activated room doesn't need portals to any of the above rooms - 5C010000 00000000 \\end command -20020000 00000000 \\room to be activated - 65000000 00000010 \\room 10 is activated when in rooms 1C, 1D, 1E, or 1F -00010000 00000000 \\end global visibility - - Lets assume though you want to make the room visible not just when you are standing inside of rooms 18-1F, bt also when you look in the windows to the room. This just requires a 1F command. -21010000 00000000 \\start block -14030000 00000000 \\room is visible from following rooms - 65000000 00000018 \\from room 18... - 65000000 0000001F \\...to room 1F - 5A010000 00000000 \\end list -1E010000 00000000 \\activated room doesn't need portals to any of the above rooms - 5C010000 00000000 \\end command -1F020000 00000000 \\activate room when looking in the following portals - 64000000 0F00148C \\portal at offset 0x148C - 22020000 00000000 \\and... - 64000000 0F001374 \\portal at offset 0x1374 - 22020000 00000000 \\and... - 64000000 0F0014C0 \\portal at offset 0x14C0 - 22020000 00000000 \\and... - 64000000 0F0014F4 \\portal at offset 0x14FC - 5C010000 00000000 \\end list of portals -20020000 00000000 \\rooms to be activated - 65000000 00000010 \\room 10 is activated in all the above -00010000 00000000 \\end global visibility - - Also, multiple rooms can be activated at one time by adding more 2002 commands... -... -20020000 00000000 \\rooms to be activated - 65000000 00000010 \\room 10 -20020000 00000000 \\rooms to be activated - 65000000 00000011 \\room 11 - - 2101 commands end one list and start another. Only use the 0001 to end the entire global visibility block. -21010000 00000000 \\start FIRST block -14030000 00000000 \\room is visible from following rooms - 65000000 0000001C \\from room 1C... - 65000000 0000001F \\...to room 1F - 5A010000 00000000 \\end list -1E010000 00000000 \\activated room doesn't need portals to any of the above rooms - 5C010000 00000000 \\end command -20020000 00000000 \\room to be activated - 65000000 00000010 \\room 10 is activated when in rooms 1C, 1D, 1E, or 1F -21010000 00000000 \\start SECOND block, ending FIRST -14030000 00000000 \\room is visible from following rooms - 65000000 00000020 \\from room 20... - 65000000 00000023 \\...to room 23 - 5A010000 00000000 \\end list -1E010000 00000000 \\activated room doesn't need portals to any of the above rooms - 5C010000 00000000 \\end command -20020000 00000000 \\room to be activated - 65000000 00000011 \\room 11 is activated when in rooms 20, 21, 22, or 23 - --Zoinkity diff --git a/notes/GE Documentation/Display Lists and Object Generation/7F098A2C - sky DL gen.txt b/notes/GE Documentation/Display Lists and Object Generation/7F098A2C - sky DL gen.txt deleted file mode 100644 index e3ae077..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/7F098A2C - sky DL gen.txt +++ /dev/null @@ -1,1641 +0,0 @@ -Pointers are to arrays of float values, 0x38 in size. Distance computations are done on members 0x28 and 0x2C. Best guess: -0x20 (float) min x -0x24 (float) max x -0x28 (float) min y -0x2C (float) max y -0x30 (float) min z -0x34 (float) max z - -7F098A2C 0xCD55C generates RDP display list for sky and water - accepts: A0=p->DL, A1=p->???, A2=p->???, A3=p->???, SP+10=p->???, SP+14=(float) ??? - returns: V0=p->DL -ADDIU SP,SP,FB30 -SW S0,0020 (SP) -OR S0,A0,R0 ;S0=A0: p->DL -SW RA,0024 (SP) -SW A1,04D4 (SP) ;SP+4D4=A1: p->??? -OR A0,A1,R0 ;A0=A1 -SDC1 F20,0018 (SP) -SW A2,04D8 (SP) ;SP+4D8=A2: p->??? -SW A3,04DC (SP) ;SP+4DC=A3: p->??? -JAL 7F0977B4 ;V0=TRUE if distance between A0 and A1 < 1.0 -OR A1,A2,R0 ;A1=A2 -BNE V0,R0,7F098AB0 ;return if A1 and A2 nearly convergent -LW A0,04D8 (SP) -JAL 7F0977B4 ;V0=TRUE if distance between A0 and A1 < 1.0 -LW A1,04DC (SP) -BNE V0,R0,7F098AB0 ;return if A2 and A3 nearly convergent -LW A0,04DC (SP) -JAL 7F0977B4 ;V0=TRUE if distance between A0 and A1 < 1.0 -LW A1,04D4 (SP) -BNE V0,R0,7F098AB0 ;return if A1 and A3 nearly convergent -LW A0,04E0 (SP) -JAL 7F0977B4 ;V0=TRUE if distance between A0 and A1 < 1.0 -LW A1,04D4 (SP) -BNE V0,R0,7F098AB0 ;return if SP+10 and A1 nearly convergent -LW A0,04E0 (SP) -JAL 7F0977B4 ;V0=TRUE if distance between A0 and A1 < 1.0 -LW A1,04D8 (SP) -BNE V0,R0,7F098AB0 ;return if SP+10 and A2 nearly convergent -LW A0,04E0 (SP) -JAL 7F0977B4 ;V0=TRUE if distance between A0 and A1 < 1.0 -LW A1,04DC (SP) -BEQ V0,R0,7F098AB8 ;return if SP+10 and A3 nearly convergent -LWC1 F4,04E4 (SP) ;F4=[SP+10 f/caller]: scale? -//7F098AB0: return if any invalid -BEQ R0,R0,7F09A2CC -OR V0,S0,R0 ;V0=S0: p->DL -//7F098AB8: -LUI AT,4780 -MTC1 AT,F6 ;F6=65536.0 [47800000] -LW V1,04D4 (SP) ;V1=SP+4D4: 1st table -LW A0,04DC (SP) ;A0=SP+4DC: 3rd table -DIV.S F8,F4,F6 ;F8=scale? / 65536.0 -LW T1,04D8 (SP) ;T1=SP+4D8: 2nd table -OR A3,V1,R0 ;A3=V1: 1st table -OR T0,A0,R0 ;T0=A0: 3rd table -OR A1,T1,R0 ;A1=T1: 2nd table -SWC1 F8,03C0 (SP) ;SP+3C0=F8: scale? / 65536.0 -LWC1 F12,0028 (V1) -LWC1 F4,0028 (A0) -LWC1 F0,002C (V1) -LWC1 F14,002C (T1) -SUB.S F6,F4,F12 -LWC1 F10,0028 (T1) -SUB.S F2,F14,F0 -SWC1 F6,04B0 (SP) -LWC1 F20,002C (A0) -LWC1 F8,04B0 (SP) -SUB.S F18,F10,F12 -MUL.S F10,F8,F2 -SUB.S F16,F20,F0 -MTC1 AT,F8 -LUI AT,3F80 -MUL.S F4,F18,F16 -C.LT.S F14,F0 -SUB.S F6,F10,F4 -MTC1 AT,F4 -DIV.S F10,F6,F8 -DIV.S F6,F4,F10 -SWC1 F10,0054 (SP) -SWC1 F10,0488 (SP) -SWC1 F6,0050 (SP) -BC1F 7F098B6C -SWC1 F6,0484 (SP) -LUI AT,BF80 -MTC1 AT,F2 -OR A1,V1,R0 -OR A3,T1,R0 -MUL.S F12,F10,F2 -NOP -MUL.S F14,F6,F2 -SWC1 F12,0488 (SP) -SWC1 F14,0484 (SP) -//7F098B6C: -LWC1 F0,002C (A1) -LUI AT,BF80 -MTC1 AT,F2 -C.LT.S F20,F0 -LWC1 F12,0488 (SP) -LWC1 F14,0484 (SP) -LUI AT,4080 -BC1FL 7F098BA4 -SWC1 F14,0484 (SP) -OR T0,A1,R0 -MUL.S F14,F14,F2 -OR A1,A0,R0 -LWC1 F0,002C (A0) -SWC1 F14,0484 (SP) -//7F098BA4: -LWC1 F8,002C (A3) -C.LT.S F0,F8 -MTC1 AT,F0 -LUI AT,3E80 -MTC1 AT,F10 -BC1FL 7F098BD8 -LWC1 F4,0028 (A1) -MUL.S F14,F14,F2 -OR V0,A1,R0 -OR A1,A3,R0 -OR A3,V0,R0 -SWC1 F14,0484 (SP) -LWC1 F4,0028 (A1) -//7F098BD8: -MTC1 R0,F20 -LUI A2,44EA -MUL.S F6,F4,F10 -SWC1 F20,0468 (SP) -MTC1 AT,F4 -ORI A2,A2,A000 -SWC1 F6,0464 (SP) -LWC1 F8,0028 (A3) -SWC1 F20,0470 (SP) -MUL.S F10,F8,F4 -MTC1 AT,F8 -SWC1 F10,046C (SP) -LWC1 F6,0028 (A3) -SWC1 F20,0478 (SP) -SWC1 F20,0480 (SP) -MUL.S F4,F6,F8 -SWC1 F20,047C (SP) -SWC1 F4,0474 (SP) -LWC1 F10,0028 (T0) -SWC1 F10,048C (SP) -LWC1 F6,002C (T0) -SWC1 F6,0490 (SP) -LWC1 F8,0028 (A1) -SWC1 F8,0494 (SP) -LWC1 F4,002C (A1) -LWC1 F8,0494 (SP) -SWC1 F4,0498 (SP) -LWC1 F10,0028 (A3) -SWC1 F10,049C (SP) -LWC1 F6,002C (A3) -LWC1 F10,0498 (SP) -LWC1 F4,049C (SP) -SWC1 F6,04A0 (SP) -LWC1 F6,04A0 (SP) -SWC1 F10,002C (SP) -SWC1 F8,0028 (SP) -SUB.S F2,F10,F6 -LWC1 F10,0490 (SP) -SW T0,04C4 (SP) -SUB.S F18,F8,F4 -LWC1 F8,048C (SP) -SW A3,04CC (SP) -SUB.S F16,F10,F6 -LWC1 F6,0028 (SP) -SW A1,04C8 (SP) -SUB.S F4,F8,F4 -SWC1 F20,0440 (SP) -SWC1 F20,043C (SP) -SUB.S F12,F8,F6 -LWC1 F8,002C (SP) -MTC1 AT,F6 -SWC1 F4,04B0 (SP) -SUB.S F14,F10,F8 -MUL.S F10,F12,F6 -MTC1 AT,F8 -SWC1 F12,04A8 (SP) -SWC1 F14,04A4 (SP) -MUL.S F6,F14,F8 -SWC1 F20,0420 (SP) -SWC1 F20,041C (SP) -SWC1 F10,0424 (SP) -MTC1 AT,F10 -SWC1 F20,03E4 (SP) -SWC1 F20,03EC (SP) -MUL.S F8,F18,F10 -SWC1 F6,0428 (SP) -MTC1 AT,F6 -SWC1 F20,03F4 (SP) -SWC1 F20,0400 (SP) -MUL.S F10,F2,F6 -SWC1 F20,03FC (SP) -SWC1 F8,042C (SP) -MTC1 AT,F8 -SWC1 F20,03C4 (SP) -SWC1 F20,03CC (SP) -MUL.S F6,F4,F8 -SWC1 F10,0430 (SP) -MTC1 AT,F10 -LUI AT,8005 -SWC1 F20,03D4 (SP) -MUL.S F8,F16,F10 -SWC1 F20,03E0 (SP) -SWC1 F6,0434 (SP) -MUL.S F6,F12,F0 -SWC1 F20,03DC (SP) -MUL.S F10,F14,F0 -SWC1 F8,0438 (SP) -LWC1 F14,75F8 (AT) ;F14->800575F8: -MUL.S F8,F18,F0 -SWC1 F6,0404 (SP) -MUL.S F6,F2,F0 -SWC1 F10,0408 (SP) -MUL.S F10,F4,F0 -SWC1 F8,040C (SP) -MUL.S F8,F16,F0 -SWC1 F6,0410 (SP) -LWC1 F6,04A4 (SP) -SWC1 F10,0414 (SP) -DIV.S F10,F0,F6 -SWC1 F8,0418 (SP) -DIV.S F8,F0,F2 -SWC1 F10,03E8 (SP) -DIV.S F10,F0,F16 -SWC1 F8,03F0 (SP) -LWC1 F8,04A8 (SP) -DIV.S F12,F8,F6 -SWC1 F10,03F8 (SP) -DIV.S F10,F18,F2 -SWC1 F12,03C8 (SP) -DIV.S F8,F4,F16 -SWC1 F10,03D0 (SP) -JAL 7F093C48 -SWC1 F8,03D8 (SP) -LUI AT,8005 -LUI A2,44EA -SWC1 F0,03C8 (SP) -ORI A2,A2,A000 -LWC1 F14,75FC (AT) ;F14->800575FC: -JAL 7F093C48 -LWC1 F12,03D0 (SP) -LUI AT,8005 -LUI A2,44EA -SWC1 F0,03D0 (SP) -ORI A2,A2,A000 -LWC1 F14,7600 (AT) ;F14->80057600: -JAL 7F093C48 -LWC1 F12,03D8 (SP) -LWC1 F6,046C (SP) -LWC1 F10,0474 (SP) -LW T6,04D4 (SP) -LW T8,04D8 (SP) -SWC1 F0,03D8 (SP) -SWC1 F6,044C (SP) -SWC1 F10,0454 (SP) -LWC1 F4,0028 (T6) -LWC1 F8,0028 (T8) -C.LT.S F4,F8 -NOP -BC1FL 7F099008 -LW T6,04DC (SP) -LW T9,04DC (SP) -LW T7,04E0 (SP) -LUI AT,3F80 -LWC1 F6,002C (T9) -LWC1 F10,002C (T7) -MTC1 AT,F8 -SUB.S F4,F6,F10 -C.LT.S F4,F8 -NOP -BC1F 7F098E40 -LUI AT,8005 -LWC1 F6,7604 (AT) ;F6->80057604: -BEQ R0,R0,7F098E7C -SWC1 F6,01BC (SP) -//7F098E40: -JAL 7F0784A4 ;F0= BONDdata+1090: screen width -NOP -LW T6,04DC (SP) -LW T8,04E0 (SP) -LUI AT,3E80 -LWC1 F10,002C (T6) -LWC1 F4,002C (T8) -MTC1 AT,F6 -SUB.S F8,F10,F4 -MTC1 AT,F4 -MUL.S F10,F8,F6 -SUB.S F8,F0,F4 -NEG.S F6,F8 -DIV.S F4,F6,F10 -SWC1 F4,01BC (SP) -//7F098E7C: -LUI A1,B400 -OR V0,S0,R0 ;V0=S0: p->DL -SW A1,0000 (V0) ;DL+0= rdphalf_u.u -LW T9,04DC (SP) ;T9=SP+4DC: p->3rd table -LUI AT,CE80 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -LWC1 F8,002C (T9) ;F8=table+2C: ymax? -LUI T9,B200 -OR V1,S0,R0 ;V1=S0: p->DL -TRUNC.W.S F6,F8 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8: p->next DL -MFC1 T6,F6 -NOP -OR T8,T6,AT ;T8=CE800000 | xpos -SW T8,0004 (V0) ;DL+4= rdphalf_u.l: rdp_trishadetxtr - UNKNOWN 0x800000 flag -SW T9,0000 (V1) ;DL+0= rdphalf_c.u -LW T7,04E0 (SP) ;T7=SP+4E0: p->4th table -LWC1 F10,002C (T7) ;F10=table+2C: ymax? -LW T7,04D4 (SP) ;T7=SP+4D4: p->1st table -TRUNC.W.S F4,F10 -LWC1 F8,002C (T7) ;F8=table+2C: ymax? -TRUNC.W.S F6,F8 -MFC1 T8,F4 -NOP -SLL T9,T8,0x10 ;T9=ymax*0x10000: ypos -MFC1 T8,F6 -NOP -OR T7,T9,T8 ;T7= ypos | zpos -SW T7,0004 (V1) ;DL+4= rdphalf_c.l: ypos | zpos -SW A1,0000 (A0) ;DL+0= rdphalf_u.u -JAL 7F0784C4 ;F0= BONDdata+1098 -SW A0,01B0 (SP) ;SP+1B0=A0: p->cur.DL -JAL 7F0784A4 ;F0= BONDdata+1090: screen width -SWC1 F0,005C (SP) ;SP+5C=F0: -LWC1 F10,005C (SP) -LUI AT,3E80 -MTC1 AT,F8 -ADD.S F4,F0,F10 -JAL 7F094298 -SUB.S F12,F4,F8 -LW T6,01B0 (SP) ;T6=p->cur.DL -OR V1,S0,R0 ;V1=S0: p->DL -LUI T9,B200 -SW V0,0004 (T6) ;DL+4= rdphalf_u.l: V0 -SW T9,0000 (V1) ;DL+0= rdphalf_c.u -SW V1,01AC (SP) ;SP+1AC=V1: p->cur.DL -LWC1 F12,01BC (SP) -JAL 7F094298 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -LW V1,01AC (SP) ;V1=p->cur.DL -OR A0,S0,R0 ;A0=S0: p->DL -LUI T8,B400 -SW V0,0004 (V1) ;DL+4= rdphalf_c.l: V0 -SW T8,0000 (A0) ;DL+0= rdphalf_u.u -SW A0,01A8 (SP) ;SP+1A8=A0: p->cur.DL -JAL 7F0784C4 ;F0= BONDdata+1098 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F094298 -MOV.S F12,F0 -LW T7,01A8 (SP) ;T7= p->cur.DL -OR V1,S0,R0 ;V1=S0: p->DL -LUI T6,B200 -SW V0,0004 (T7) ;DL+4= rdphalf_u.l: V0 -SW T6,0000 (V1) ;DL+0= rdphalf_c.u -SW V1,01A4 (SP) ;SP+1A4=V1: p->cur.DL -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F094298 -MOV.S F12,F20 -LW V1,01A4 (SP) ;V1= p->cur.DL -OR A0,S0,R0 ;A0=S0: p->DL -LUI T9,B400 -SW V0,0004 (V1) ;DL+4= rdphalf_c.l: V0 -SW T9,0000 (A0) ;DL+0= rdphalf_u.u -SW A0,01A0 (SP) ;SP+1A0=A0: p->cur.DL -JAL 7F0784C4 ;F0= BONDdata+1098 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F0784A4 ;F0= BONDdata+1090: screen width -SWC1 F0,005C (SP) -LWC1 F6,005C (SP) -LUI AT,3E80 -MTC1 AT,F4 -ADD.S F10,F0,F6 -JAL 7F094298 -SUB.S F12,F10,F4 -LW T8,01A0 (SP) ;T8= p->cur.DL -OR V1,S0,R0 ;V1=S0: p->DL -LUI T7,B200 -SW V0,0004 (T8) ;DL+4= rdphalf_u.l: V0 -SW T7,0000 (V1) ;DL+0= rdphalf_c.u -SW V1,019C (SP) ;SP+19C=V1: p->cur.DL -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F094298 -MOV.S F12,F20 -LW V1,019C (SP) ;V1= p->cur.DL -BEQ R0,R0,7F0991E0 -SW V0,0004 (V1) ;DL+4= rdphalf_c.l: V0 -//7F099004: -LW T6,04DC (SP) -LW T9,04E0 (SP) -LUI AT,3F80 -LWC1 F8,002C (T6) -LWC1 F6,002C (T9) -MTC1 AT,F4 -SUB.S F10,F8,F6 -C.LT.S F10,F4 -NOP -BC1F 7F099038 -LUI AT,8005 -BEQ R0,R0,7F09906C -LWC1 F14,7608 (AT) -//7F099038: -JAL 7F0784A4 ;F0= BONDdata+1090: screen width -NOP -LW T8,04DC (SP) -LW T7,04E0 (SP) -LUI AT,3E80 -LWC1 F8,002C (T8) -LWC1 F6,002C (T7) -MTC1 AT,F4 -SUB.S F10,F8,F6 -MTC1 AT,F6 -MUL.S F8,F10,F4 -SUB.S F10,F0,F6 -DIV.S F14,F10,F8 -//7F09906C: -OR V0,S0,R0 -LUI T6,B400 -SW T6,0000 (V0) ;DL+0= rdphalf_u.u -LW T9,04DC (SP) -LUI AT,CE00 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -LWC1 F4,002C (T9) -LUI T9,B200 -OR V1,S0,R0 -TRUNC.W.S F6,F4 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -OR A0,S0,R0 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -MFC1 T7,F6 -NOP -OR T6,T7,AT -SW T6,0004 (V0) ;DL+4= rdphalf_u.l: redp_trishadetxtr -SW T9,0000 (V1) ;DL+0= rdphalf_c.u -LW T8,04E0 (SP) -LUI T7,B400 -LWC1 F10,002C (T8) -LW T8,04D4 (SP) -TRUNC.W.S F8,F10 -LWC1 F4,002C (T8) -TRUNC.W.S F6,F4 -MFC1 T6,F8 -NOP -SLL T9,T6,0x10 -MFC1 T6,F6 -NOP -OR T8,T9,T6 -SW T8,0004 (V1) ;DL+4= rdphalf_c.l: -SW T7,0000 (A0) ;DL+0= rdphalf_u.u -SWC1 F14,0198 (SP) -JAL 7F0784C4 ;F0= BONDdata+1098 -SW A0,018C (SP) -JAL 7F094298 -MOV.S F12,F0 -LW T9,018C (SP) -LWC1 F12,0198 (SP) -OR V1,S0,R0 -LUI T6,B200 -SW V0,0004 (T9) ;DL+4= rdphalf_u.l: V0 -SW T6,0000 (V1) ;DL+0= rdphalf_c.u -SW V1,0188 (SP) -JAL 7F094298 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -LW V1,0188 (SP) -OR A0,S0,R0 -LUI T8,B400 -SW V0,0004 (V1) ;DL+4= rdphalf_c.l: V0 -SW T8,0000 (A0) ;DL+0= rdphalf_u.u -SW A0,0184 (SP) -JAL 7F0784C4 ;F0= BONDdata+1098 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F0784A4 ;F0= BONDdata+1090: screen width -SWC1 F0,005C (SP) -LWC1 F10,005C (SP) -LUI AT,3E80 -MTC1 AT,F4 -ADD.S F8,F0,F10 -JAL 7F094298 -SUB.S F12,F8,F4 -LW T7,0184 (SP) -OR V1,S0,R0 -LUI T9,B200 -SW V0,0004 (T7) ;DL+4= rdphalf_u.l: V0 -SW T9,0000 (V1) ;DL+0= rdphalf_c.u -SW V1,0180 (SP) -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F094298 -MOV.S F12,F20 -LW V1,0180 (SP) -OR A0,S0,R0 -LUI T6,B400 -SW V0,0004 (V1) ;DL+4= rdphalf_c.l: V0 -SW T6,0000 (A0) ;DL+0= rdphalf_u.u -SW A0,017C (SP) -JAL 7F0784C4 ;F0= BONDdata+1098 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F094298 -MOV.S F12,F0 -LW T8,017C (SP) -OR V1,S0,R0 -LUI T7,B200 -SW V0,0004 (T8) ;DL+4= rdphalf_u.l: V0 -SW T7,0000 (V1) ;DL+0= rdphalf_c.u -SW V1,0178 (SP) -ADDIU S0,S0,0008 ;S0+=8: p->next DL -JAL 7F094298 -MOV.S F12,F20 -LW V1,0178 (SP) -SW V0,0004 (V1) ;DL+4= rdphalf_c.l: V0 -//7F0991E0: -LW T0,04CC (SP) -LWC1 F0,03C0 (SP) -LW A3,04C8 (SP) -LWC1 F6,000C (T0) -LW T1,04C4 (SP) -LW T3,04E0 (SP) -MUL.S F10,F6,F0 -LUI AT,8005 -SWC1 F10,03B0 (SP) -LWC1 F8,000C (A3) -LWC1 F16,03B0 (SP) -MUL.S F4,F8,F0 -SWC1 F4,03B4 (SP) -LWC1 F6,000C (T1) -MUL.S F10,F6,F0 -LWC1 F6,03B4 (SP) -C.LT.S F6,F16 -SWC1 F10,03B8 (SP) -LWC1 F8,000C (T3) -MUL.S F4,F8,F0 -LWC1 F0,03B8 (SP) -BC1F 7F099240 -SWC1 F4,03BC (SP) -MOV.S F16,F6 -//7F099240: -C.LT.S F0,F16 -NOP -BC1FL 7F099258 -LWC1 F0,03BC (SP) -MOV.S F16,F0 -//7F099254: -LWC1 F0,03BC (SP) -C.LT.S F0,F16 -NOP -BC1F 7F09926C -NOP -MOV.S F16,F0 -//7F09926C: -LWC1 F0,760C (AT) -LUI AT,3F00 -MTC1 AT,F10 -LWC1 F8,0034 (T0) -MUL.S F16,F16,F10 -NOP -MUL.S F4,F8,F16 -SWC1 F4,039C (SP) -LWC1 F6,0034 (A3) -MUL.S F10,F6,F16 -SWC1 F10,03A0 (SP) -LWC1 F8,0034 (T1) -MUL.S F4,F8,F16 -LWC1 F8,039C (SP) -SWC1 F4,03A4 (SP) -LWC1 F6,0034 (T3) -MUL.S F10,F6,F16 -SWC1 F10,03A8 (SP) -LWC1 F4,0020 (T0) -MUL.S F6,F8,F4 -SWC1 F6,036C (SP) -LWC1 F10,0024 (T0) -C.LE.S F20,F6 -MUL.S F4,F8,F10 -NOP -MUL.S F10,F8,F0 -SWC1 F4,0370 (SP) -LWC1 F4,03A0 (SP) -SWC1 F10,0374 (SP) -LWC1 F8,0020 (A3) -MUL.S F10,F4,F8 -SWC1 F10,0378 (SP) -LWC1 F8,0024 (A3) -MUL.S F10,F4,F8 -NOP -MUL.S F8,F4,F0 -SWC1 F10,037C (SP) -LWC1 F10,03A4 (SP) -SWC1 F8,0380 (SP) -LWC1 F4,0020 (T1) -MUL.S F8,F10,F4 -SWC1 F8,0384 (SP) -LWC1 F4,0024 (T1) -MUL.S F8,F10,F4 -NOP -MUL.S F4,F10,F0 -SWC1 F8,0388 (SP) -LWC1 F8,03A8 (SP) -SWC1 F4,038C (SP) -LWC1 F10,0020 (T3) -MUL.S F4,F8,F10 -LWC1 F8,03A8 (SP) -SWC1 F4,0390 (SP) -LWC1 F10,0024 (T3) -MUL.S F4,F8,F10 -LWC1 F8,03A8 (SP) -MUL.S F10,F8,F0 -LWC1 F0,0370 (SP) -SWC1 F4,0394 (SP) -BC1F 7F099368 -SWC1 F10,0398 (SP) -BEQ R0,R0,7F099370 -MOV.S F2,F6 -LWC1 F2,036C (SP) -NEG.S F2,F2 -C.LE.S F20,F0 -NOP -BC1FL 7F09938C -NEG.S F14,F0 -BEQ R0,R0,7F09938C -MOV.S F14,F0 -NEG.S F14,F0 -LWC1 F0,0378 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F0993AC -NEG.S F12,F0 -BEQ R0,R0,7F0993AC -MOV.S F12,F0 -NEG.S F12,F0 -C.LT.S F2,F12 -NOP -BC1FL 7F0993DC -LWC1 F0,037C (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F0993D8 -NEG.S F2,F0 -BEQ R0,R0,7F0993D8 -MOV.S F2,F0 -NEG.S F2,F0 -LWC1 F0,037C (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F0993F8 -NEG.S F12,F0 -BEQ R0,R0,7F0993F8 -MOV.S F12,F0 -NEG.S F12,F0 -C.LT.S F14,F12 -SWC1 F16,03AC (SP) -BC1FL 7F099430 -LWC1 F0,0384 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F099428 -NEG.S F14,F0 -MOV.S F14,F0 -BEQ R0,R0,7F09942C -SWC1 F16,03AC (SP) -NEG.S F14,F0 -SWC1 F16,03AC (SP) -LWC1 F0,0384 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F09944C -NEG.S F12,F0 -BEQ R0,R0,7F09944C -MOV.S F12,F0 -NEG.S F12,F0 -C.LT.S F2,F12 -NOP -BC1FL 7F09947C -LWC1 F0,0388 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F099478 -NEG.S F2,F0 -BEQ R0,R0,7F099478 -MOV.S F2,F0 -NEG.S F2,F0 -LWC1 F0,0388 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F099498 -NEG.S F12,F0 -BEQ R0,R0,7F099498 -MOV.S F12,F0 -NEG.S F12,F0 -C.LT.S F14,F12 -NOP -BC1FL 7F0994C8 -LWC1 F0,0390 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F0994C4 -NEG.S F14,F0 -BEQ R0,R0,7F0994C4 -MOV.S F14,F0 -NEG.S F14,F0 -LWC1 F0,0390 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F0994E4 -NEG.S F12,F0 -BEQ R0,R0,7F0994E4 -MOV.S F12,F0 -NEG.S F12,F0 -C.LT.S F2,F12 -SWC1 F2,0364 (SP) -BC1FL 7F099518 -LWC1 F0,0394 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F099510 -NEG.S F2,F0 -BEQ R0,R0,7F099514 -SWC1 F0,0364 (SP) -NEG.S F2,F0 -SWC1 F2,0364 (SP) -LWC1 F0,0394 (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F099534 -NEG.S F12,F0 -BEQ R0,R0,7F099534 -MOV.S F12,F0 -NEG.S F12,F0 -C.LT.S F14,F12 -SWC1 F14,0368 (SP) -BC1FL 7F099568 -LWC1 F4,036C (SP) -C.LE.S F20,F0 -NOP -BC1FL 7F099560 -NEG.S F14,F0 -BEQ R0,R0,7F099564 -SWC1 F0,0368 (SP) -NEG.S F14,F0 -SWC1 F14,0368 (SP) -LWC1 F4,036C (SP) -LWC1 F8,0370 (SP) -LWC1 F10,0374 (SP) -SWC1 F4,0354 (SP) -LWC1 F4,037C (SP) -LWC1 F6,0378 (SP) -SWC1 F8,0358 (SP) -SWC1 F10,035C (SP) -SWC1 F4,0338 (SP) -SWC1 F6,0334 (SP) -LWC1 F8,0380 (SP) -LWC1 F6,0388 (SP) -LWC1 F4,038C (SP) -LWC1 F10,0384 (SP) -SWC1 F8,033C (SP) -SWC1 F6,0318 (SP) -SWC1 F4,031C (SP) -SWC1 F10,0314 (SP) -LWC1 F8,0030 (T0) -ADDIU V1,SP,02F4 -ADDIU A2,SP,0334 -SWC1 F8,0360 (SP) -LWC1 F10,0030 (A3) -ADDIU A3,SP,0324 -ADDIU V0,SP,0354 -SWC1 F10,0340 (SP) -LWC1 F6,0030 (T1) -ADDIU A0,SP,02D4 -ADDIU A1,SP,0314 -SWC1 F6,0320 (SP) -LWC1 F0,0000 (V0) -LWC1 F4,0000 (A2) -LWC1 F10,0000 (A1) -ADDIU A1,A1,0004 -SUB.S F8,F4,F0 -SLTU AT,A1,A3 -ADDIU V1,V1,0004 -SUB.S F6,F10,F0 -ADDIU A2,A2,0004 -ADDIU V0,V0,0004 -ADDIU A0,A0,0004 -SWC1 F8,FFFC (V1) -BNE AT,R0,7F0995DC -SWC1 F6,FFFC (A0) -ADDIU V1,SP,02F4 -ADDIU V0,SP,0354 -ADDIU A0,SP,02D4 -ADDIU A3,SP,0294 -ADDIU A1,SP,02B4 -ADDIU T0,SP,0274 -ADDIU A2,SP,0254 -LWC1 F18,0410 (SP) -LWC1 F16,040C (SP) -ADDIU T1,SP,0264 -LWC1 F0,0000 (A0) -LWC1 F2,0000 (V1) -LWC1 F8,0418 (SP) -MUL.S F4,F0,F18 -LUI AT,4780 -ADDIU A2,A2,0004 -MUL.S F10,F8,F2 -MTC1 AT,F8 -ADDIU V1,V1,0004 -ADDIU V0,V0,0004 -ADDIU A0,A0,0004 -ADDIU A3,A3,0004 -ADDIU A1,A1,0004 -SUB.S F6,F4,F10 -ADDIU T0,T0,0004 -DIV.S F12,F6,F8 -SWC1 F12,FFFC (A3) -LWC1 F4,0414 (SP) -MUL.S F10,F2,F4 -MTC1 AT,F4 -SLTU AT,A2,T1 -MUL.S F6,F16,F0 -SUB.S F8,F10,F6 -DIV.S F10,F8,F4 -SWC1 F10,FFFC (A1) -LWC1 F6,0484 (SP) -LWC1 F4,FFFC (A1) -MUL.S F8,F12,F6 -LWC1 F6,FFFC (V0) -SWC1 F8,FFFC (A0) -LWC1 F10,0484 (SP) -SWC1 F6,FFFC (A2) -MUL.S F14,F4,F10 -SWC1 F14,FFFC (V1) -BNE AT,R0,7F09963C -SWC1 F14,FFFC (T0) -LW V1,04DC (SP) -LWC1 F8,002C (T3) -LW V0,04D4 (SP) -LWC1 F4,002C (V1) -LWC1 F6,0010 (V1) -LWC1 F14,0010 (V0) -DIV.S F0,F8,F4 -LWC1 F10,0010 (T3) -LUI AT,4780 -ADDIU T6,R0,0001 -SUB.S F8,F14,F6 -MUL.S F4,F8,F0 -ADD.S F6,F10,F4 -SWC1 F6,0170 (SP) -LWC1 F10,0014 (V1) -LWC1 F2,0014 (V0) -LWC1 F8,0014 (T3) -SUB.S F4,F2,F10 -MUL.S F6,F4,F0 -ADD.S F10,F8,F6 -SWC1 F10,016C (SP) -LWC1 F8,0018 (V1) -LWC1 F16,0018 (V0) -LWC1 F4,0018 (T3) -SUB.S F6,F16,F8 -MUL.S F10,F6,F0 -ADD.S F8,F4,F10 -SWC1 F8,0168 (SP) -LWC1 F4,001C (V1) -LWC1 F18,001C (V0) -LWC1 F6,001C (T3) -SUB.S F10,F18,F4 -MUL.S F8,F10,F0 -MTC1 AT,F10 -ADD.S F4,F6,F8 -MUL.S F6,F14,F10 -SWC1 F4,0164 (SP) -CFC1 T9,F31 -CTC1 T6,F31 -NOP -CVT.W.S F8,F6 -CFC1 T6,F31 -NOP -ANDI T6,T6,0078 -BEQ T6,R0,7F0997C8 -LUI AT,4F00 -MTC1 AT,F8 -ADDIU T6,R0,0001 -SUB.S F8,F6,F8 -CTC1 T6,F31 -NOP -CVT.W.S F8,F8 -CFC1 T6,F31 -NOP -ANDI T6,T6,0078 -BNE T6,R0,7F0997C0 -NOP -MFC1 T6,F8 -LUI AT,8000 -BEQ R0,R0,7F0997D8 -OR T6,T6,AT -BEQ R0,R0,7F0997D8 -ADDIU T6,R0,FFFF -MFC1 T6,F8 -NOP -BLTZ T6,7F0997C0 -NOP -LUI AT,4780 -CTC1 T9,F31 -MTC1 AT,F4 -ADDIU T7,R0,0001 -SW T6,0160 (SP) -MUL.S F10,F2,F4 -CFC1 T8,F31 -CTC1 T7,F31 -NOP -CVT.W.S F6,F10 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BEQ T7,R0,7F099858 -LUI AT,4F00 -MTC1 AT,F6 -ADDIU T7,R0,0001 -SUB.S F6,F10,F6 -CTC1 T7,F31 -NOP -CVT.W.S F6,F6 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BNE T7,R0,7F099850 -NOP -MFC1 T7,F6 -LUI AT,8000 -BEQ R0,R0,7F099868 -OR T7,T7,AT -BEQ R0,R0,7F099868 -ADDIU T7,R0,FFFF -MFC1 T7,F6 -NOP -BLTZ T7,7F099850 -NOP -LUI AT,4780 -CTC1 T8,F31 -MTC1 AT,F8 -ADDIU T6,R0,0001 -SW T7,015C (SP) -MUL.S F4,F16,F8 -CFC1 T9,F31 -CTC1 T6,F31 -NOP -CVT.W.S F10,F4 -CFC1 T6,F31 -NOP -ANDI T6,T6,0078 -BEQ T6,R0,7F0998E8 -LUI AT,4F00 -MTC1 AT,F10 -ADDIU T6,R0,0001 -SUB.S F10,F4,F10 -CTC1 T6,F31 -NOP -CVT.W.S F10,F10 -CFC1 T6,F31 -NOP -ANDI T6,T6,0078 -BNE T6,R0,7F0998E0 -NOP -MFC1 T6,F10 -LUI AT,8000 -BEQ R0,R0,7F0998F8 -OR T6,T6,AT -BEQ R0,R0,7F0998F8 -ADDIU T6,R0,FFFF -MFC1 T6,F10 -NOP -BLTZ T6,7F0998E0 -NOP -LUI AT,4780 -CTC1 T9,F31 -MTC1 AT,F6 -ADDIU T7,R0,0001 -SW T6,0158 (SP) -MUL.S F8,F18,F6 -CFC1 T8,F31 -CTC1 T7,F31 -NOP -CVT.W.S F4,F8 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BEQ T7,R0,7F099978 -LUI AT,4F00 -MTC1 AT,F4 -ADDIU T7,R0,0001 -SUB.S F4,F8,F4 -CTC1 T7,F31 -NOP -CVT.W.S F4,F4 -CFC1 T7,F31 -NOP -ANDI T7,T7,0078 -BNE T7,R0,7F099970 -NOP -MFC1 T7,F4 -LUI AT,8000 -BEQ R0,R0,7F099988 -OR T7,T7,AT -BEQ R0,R0,7F099988 -ADDIU T7,R0,FFFF -MFC1 T7,F4 -NOP -BLTZ T7,7F099970 -NOP -LW T9,04D8 (SP) -SW T7,0154 (SP) -CTC1 T8,F31 -LWC1 F6,0028 (V0) -LWC1 F10,0028 (T9) -LUI AT,3E80 -MTC1 AT,F4 -SUB.S F8,F10,F6 -LWC1 F6,0170 (SP) -MUL.S F10,F8,F4 -SUB.S F8,F6,F14 -JAL 7F094298 -DIV.S F12,F8,F10 -LW V1,04D4 (SP) -SW V0,0150 (SP) -LWC1 F4,016C (SP) -LWC1 F6,0014 (V1) -LW T6,04D8 (SP) -LUI AT,3E80 -SUB.S F8,F4,F6 -LWC1 F4,0028 (V1) -LWC1 F10,0028 (T6) -SUB.S F6,F10,F4 -MTC1 AT,F10 -NOP -MUL.S F4,F6,F10 -JAL 7F094298 -DIV.S F12,F8,F4 -LW V1,04D4 (SP) -SW V0,014C (SP) -LWC1 F6,0168 (SP) -LWC1 F10,0018 (V1) -LW T8,04D8 (SP) -LUI AT,3E80 -SUB.S F8,F6,F10 -LWC1 F6,0028 (V1) -LWC1 F4,0028 (T8) -SUB.S F10,F4,F6 -MTC1 AT,F4 -NOP -MUL.S F6,F10,F4 -JAL 7F094298 -DIV.S F12,F8,F6 -LW V1,04D4 (SP) -SW V0,0148 (SP) -LWC1 F10,0164 (SP) -LWC1 F4,001C (V1) -LW T7,04D8 (SP) -LUI AT,3E80 -SUB.S F8,F10,F4 -LWC1 F10,0028 (V1) -LWC1 F6,0028 (T7) -SUB.S F4,F6,F10 -MTC1 AT,F6 -NOP -MUL.S F10,F4,F6 -JAL 7F094298 -DIV.S F12,F8,F10 -LW V1,04DC (SP) -LW T9,04D4 (SP) -SW V0,0144 (SP) -LWC1 F4,0010 (V1) -LWC1 F6,0010 (T9) -LWC1 F10,002C (V1) -LUI AT,3E80 -SUB.S F8,F4,F6 -LWC1 F4,002C (T9) -SUB.S F6,F10,F4 -MTC1 AT,F10 -NOP -MUL.S F4,F6,F10 -JAL 7F094298 -DIV.S F12,F8,F4 -LW V1,04DC (SP) -LW T6,04D4 (SP) -SW V0,0130 (SP) -SW V0,0140 (SP) -LWC1 F6,0014 (V1) -LWC1 F10,0014 (T6) -LWC1 F4,002C (V1) -LUI AT,3E80 -SUB.S F8,F6,F10 -LWC1 F6,002C (T6) -SUB.S F10,F4,F6 -MTC1 AT,F4 -NOP -MUL.S F6,F10,F4 -JAL 7F094298 -DIV.S F12,F8,F6 -LW T8,04DC (SP) -LW T7,04D4 (SP) -SW V0,012C (SP) -SW V0,013C (SP) -LWC1 F10,0018 (T8) -LWC1 F4,0018 (T7) -LWC1 F6,002C (T8) -LUI AT,3E80 -SUB.S F8,F10,F4 -LWC1 F10,002C (T7) -SUB.S F4,F6,F10 -MTC1 AT,F6 -NOP -MUL.S F10,F4,F6 -JAL 7F094298 -DIV.S F12,F8,F10 -LW T9,04DC (SP) -LW T6,04D4 (SP) -LUI AT,3E80 -LWC1 F4,001C (T9) -LWC1 F6,001C (T6) -LWC1 F10,002C (T9) -SUB.S F8,F4,F6 -LWC1 F4,002C (T6) -SW V0,0138 (SP) -SW V0,0128 (SP) -SUB.S F6,F10,F4 -MTC1 AT,F10 -NOP -MUL.S F4,F6,F10 -JAL 7F094298 -DIV.S F12,F8,F4 -LW T3,015C (SP) -LW T2,0160 (SP) -LUI T1,FFFF -OR V1,S0,R0 ;V1=S0: p->DL -AND T7,T3,T1 -LW T4,0128 (SP) -LW T5,0138 (SP) -LW RA,0158 (SP) -SRL T9,T7,0x10 -AND T8,T2,T1 -LUI T0,B400 -OR T6,T8,T9 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -SW T6,0004 (V1) ;DL+4= rdphalf_u.l: -SW T0,0000 (V1) ;DL+0= rdphalf_u.u -OR A0,S0,R0 ;A0=S0: p->DL -LUI T7,B200 -SW T7,0000 (A0) ;DL+0= rdphalf_c.u -LW T9,0154 (SP) -AND T8,RA,T1 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -AND T6,T9,T1 -SRL T7,T6,0x10 -OR T9,T8,T7 -SW T9,0004 (A0) ;DL+4= rdphalf_c.l: -OR A1,S0,R0 ;A1=S0: p->DL -SW T0,0000 (A1) ;DL+0= rdphalf_u.u -LW T7,014C (SP) -LW T6,0150 (SP) -ADDIU S0,S0,0008 ;S0+=8: p->next DL -AND T9,T7,T1 -AND T8,T6,T1 -SRL T6,T9,0x10 -OR T7,T8,T6 -SW T7,0004 (A1) ;DL+4= rdphalf_u.l: -LUI A1,B200 -OR A2,S0,R0 ;A2=S0: p->DL -SW A1,0000 (A2) ;DL+0= rdphalf_c.u -LW T6,0144 (SP) -LW T9,0148 (SP) -ADDIU S0,S0,0008 ;S0+=8: p->next DL -AND T7,T6,T1 -AND T8,T9,T1 -SRL T9,T7,0x10 -OR T6,T8,T9 -SW T6,0004 (A2) ;DL+4= rdphalf_c.l: -OR V1,S0,R0 ;V1=S0: p->DL -ANDI T9,T3,FFFF -SLL T8,T2,0x10 -OR T6,T8,T9 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -SW T6,0004 (V1) ;DL+4= rdphalf_u.l: -SW T0,0000 (V1) ;DL+0= rdphalf_u.u -OR A0,S0,R0 ;A0=S0: p->DL -SW A1,0000 (A0) ;DL+0= rdphalf_c.u -LW T9,0154 (SP) -SLL T8,RA,0x10 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -ANDI T6,T9,FFFF -OR T7,T8,T6 -SW T7,0004 (A0) ;DL+4= rdphalf_c.l: -OR A3,S0,R0 ;A3=S0: p->DL -SW T0,0000 (A3) ;DL+0= rdphalf_u.u -LW T7,014C (SP) -LW T8,0150 (SP) -LW T2,0140 (SP) -ANDI T9,T7,FFFF -SLL T6,T8,0x10 -LW T0,013C (SP) -OR T8,T6,T9 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -SW T8,0004 (A3) ;DL+4= rdphalf_u.l: -OR V1,S0,R0 ;V1=S0: p->DL -LUI T7,B200 -SW T7,0000 (V1) ;DL+0= rdphalf_c.u -LW T7,0144 (SP) -LW T9,0148 (SP) -ADDIU S0,S0,0008 ;S0+=8: p->next DL -ANDI T6,T7,FFFF -SLL T8,T9,0x10 -OR T9,T8,T6 -AND T8,T0,T1 -SW T9,0004 (V1) ;DL+4= rdphalf_c.l: -SRL T6,T8,0x10 -AND T7,T2,T1 -OR T9,T7,T6 -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8: p->next DL -LUI RA,B400 -SW T9,0004 (A0) ;DL+4= rdphalf_u.l: -OR A1,S0,R0 ;A1=S0: p->DL -AND A2,V0,T1 -SW RA,0000 (A0) ;DL+0= rdphalf_u.u -SRL T7,A2,0x10 -AND T6,T5,T1 -OR T9,T6,T7 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -LUI T8,B200 -SW T8,0000 (A1) ;DL+0= rdphalf_c.u -SW T9,0004 (A1) ;DL+4= rdphalf_c.l: -OR V1,S0,R0 ;V1=S0: p->DL -SW RA,0000 (V1) ;DL+0= rdphalf_u.u -LW T6,012C (SP) -LW T8,0130 (SP) -OR A2,T7,R0 -AND T9,T6,T1 -AND T7,T8,T1 -SRL T8,T9,0x10 -OR T6,T7,T8 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -OR A0,S0,R0 ;A0=S0: p->DL -AND T7,T4,T1 -SW T6,0004 (V1) ;DL+4= rdphalf_u.l: -OR T8,T7,A2 -LUI T9,B200 -SW T9,0000 (A0) ;DL+0= rdphalf_c.u -ADDIU S0,S0,0008 ;S0+=8: p->next DL -SW T8,0004 (A0) ;DL+4= rdphalf_c.l: -OR A1,S0,R0 ;A1=S0: p->DL -SLL T9,T2,0x10 -ANDI T7,T0,FFFF -OR T8,T9,T7 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -SW T8,0004 (A1) ;DL+4= rdphalf_u.l: -SW RA,0000 (A1) ;DL+0= rdphalf_u.u -OR T3,S0,R0 ;T3=S0: p->DL -ANDI T7,V0,FFFF -SLL T9,T5,0x10 -OR T8,T9,T7 -ADDIU S0,S0,0008 ;S0+=8: p->next DL -LUI RA,B200 -SW RA,0000 (T3) ;DL+0= rdphalf_c.u -SW T8,0004 (T3) ;DL+4= rdphalf_c.l: -OR A3,S0,R0 ;A3=S0: p->DL -LUI T6,B400 -SW T6,0000 (A3) ;DL+0= rdphalf_u.u -LW T6,012C (SP) -LW T7,0130 (SP) -ADDIU S0,S0,0008 ;S0+=8: p->next DL -ANDI T9,T6,FFFF -SLL T8,T7,0x10 -OR T7,T8,T9 -SW T7,0004 (A3) ;DL+4= rdphalf_u.l: -ANDI T9,V0,FFFF -OR T0,S0,R0 ;T0=S0: p->DL -SLL T8,T4,0x10 -OR T7,T8,T9 -LUI AT,3D00 -SW T7,0004 (T0) ;DL+4= rdphalf_c.l: -SW RA,0000 (T0) ;DL+0= rdphalf_c.u -MTC1 AT,F14 ;F14=0.031250 (1/32) [3D000000] -LWC1 F6,0364 (SP) -LWC1 F8,0368 (SP) -ADDIU S0,S0,0008 ;S0+=8: p->next DL -MUL.S F10,F6,F14 ;F10=F6 / 32.0 -LWC1 F6,03AC (SP) -LUI AT,4000 -MUL.S F4,F8,F14 ;F4=F8 / 32.0 -ADDIU V0,SP,0204 -ADDIU A1,SP,01F4 -ADDIU A0,SP,02D4 -SWC1 F10,0234 (SP) -MUL.S F10,F6,F14 ;F10=F6 / 32.0 -ADDIU A2,SP,0214 -SWC1 F4,0238 (SP) -ADDIU V1,SP,02F4 -SWC1 F10,023C (SP) -//7F099E08: -LWC1 F0,0000 (A0) -C.LE.S F20,F0 -NOP -BC1FL 7F099E28 -NEG.S F12,F0 -BEQ R0,R0,7F099E28 -MOV.S F12,F0 -//7F099E24: -NEG.S F12,F0 -//7F099E28: -LWC1 F2,0000 (V1) -MUL.S F8,F12,F14 ;F8=F12 / 32.0 -C.LE.S F20,F2 -NOP -BC1F 7F099E48 -SWC1 F8,0000 (A2) -BEQ R0,R0,7F099E4C -MOV.S F12,F2 -//7F099E48: -NEG.S F12,F2 -//7F099E4C: -MUL.S F4,F12,F14 ;F4=F12 / 32.0 -ADDIU A1,A1,0004 -ADDIU V1,V1,0004 -ADDIU A0,A0,0004 -ADDIU A2,A2,0004 -BNE A1,V0,7F099E08 -SWC1 F4,FFFC (A1) -MTC1 AT,F2 ;F2=2.0 [40000000] -LWC1 F10,0214 (SP) -LWC1 F6,0234 (SP) -LUI AT,3A80 -MUL.S F8,F2,F10 ;F8=F10 * 2.0 -LWC1 F10,01F4 (SP) -ADD.S F4,F6,F8 -LWC1 F8,0218 (SP) -LWC1 F6,0238 (SP) -ADD.S F0,F10,F4 -MUL.S F10,F2,F8 ;F10=F8 * 2.0 -LWC1 F8,01F8 (SP) -ADD.S F4,F6,F10 -LWC1 F10,021C (SP) -LWC1 F6,023C (SP) -ADD.S F12,F8,F4 -MUL.S F8,F2,F10 ;F8=F10 * 2.0 -LWC1 F10,01FC (SP) -C.LT.S F0,F12 -SWC1 F12,01D8 (SP) -ADD.S F4,F6,F8 -MTC1 AT,F6 ;F6=0.000977 (1/1000) [3A800000] -BC1F 7F099ED0 -ADD.S F14,F10,F4 -MOV.S F0,F12 -SWC1 F12,01D8 (SP) -//7F099ED0: -C.LT.S F0,F14 -SWC1 F14,01DC (SP) -BC1F 7F099EE8 -NOP -MOV.S F0,F14 -SWC1 F14,01DC (SP) -//7F099EE8: -MUL.S F0,F0,F6 ;F0/=1000.0 -LUI AT,3F80 -MTC1 AT,F8 -NOP -C.LT.S F8,F0 -NOP -BC1F 7F099F18 ;branch if 1.0 >= F0 -LUI AT,3F80 -MTC1 AT,F10 -SWC1 F0,01D4 (SP) -BEQ R0,R0,7F099F24 -DIV.S F20,F10,F0 ;F20= 1.0 / F0 -//7F099F18: default of 1.0 -LUI AT,3F80 -MTC1 AT,F20 ;F20= 1.0 [3F800000] -SWC1 F0,01D4 (SP) -//7F099F24: -LWC1 F4,0254 (SP) -SWC1 F20,01C4 (SP) -MUL.S F12,F20,F4 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F6,0258 (SP) -SW V0,00E0 (SP) -MUL.S F12,F20,F6 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F8,025C (SP) -SW V0,00DC (SP) -MUL.S F12,F20,F8 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F10,0260 (SP) -SW V0,00D8 (SP) -MUL.S F12,F20,F10 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F4,02D4 (SP) -SW V0,00D4 (SP) -MUL.S F12,F20,F4 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F6,02D8 (SP) -SW V0,00D0 (SP) -MUL.S F12,F20,F6 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F8,02DC (SP) -SW V0,00CC (SP) -MUL.S F12,F20,F8 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F10,02E0 (SP) -SW V0,00C8 (SP) -MUL.S F12,F20,F10 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F4,02F4 (SP) -SW V0,00C4 (SP) -MUL.S F12,F20,F4 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F6,02F8 (SP) -SW V0,00B0 (SP) -MUL.S F12,F20,F6 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F8,02FC (SP) -SW V0,00AC (SP) -MUL.S F12,F20,F8 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F10,0300 (SP) -SW V0,00A8 (SP) -MUL.S F12,F20,F10 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F4,0274 (SP) -SW V0,00A4 (SP) -MUL.S F12,F20,F4 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F6,0278 (SP) -SW V0,00C0 (SP) -MUL.S F12,F20,F6 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F8,027C (SP) -SW V0,00BC (SP) -MUL.S F12,F20,F8 -JAL 7F094298 -NOP -LWC1 F20,01C4 (SP) -LWC1 F10,0280 (SP) -SW V0,00B8 (SP) -MUL.S F12,F20,F10 -JAL 7F094298 -NOP -//7F09A0A0: write to the rdphalf list -LW T0,00B8 (SP) -LW T3,00D4 (SP) -LW RA,00E0 (SP) -LUI T5,B400 -SW T5,0000 (S0) ;DL+0= rdphalf_u.u -LW T8,00DC (SP) -LUI T1,FFFF -AND T6,RA,T1 -AND T9,T8,T1 -SRL T7,T9,0x10 -OR T8,T6,T7 -SW T8,0004 (S0) ;DL+4= rdphalf_u.l: -ADDIU A0,S0,0008 ;A0=S0+8: p->next DL -LUI T9,B200 -SW T9,0000 (A0) ;DL+0= rdphalf_c.u -LW T6,00D8 (SP) -AND T8,T3,T1 -SRL T9,T8,0x10 -AND T7,T6,T1 -OR T6,T7,T9 -SW T6,0004 (A0) ;DL+4= rdphalf_c.l: -ADDIU A1,A0,0008 ;A1=A0+8: p->next DL -SW T5,0000 (A1) ;DL+0= rdphalf_u.u -LW T9,00CC (SP) -LW T8,00D0 (SP) -ADDIU A2,A1,0008 ;A2=A1+8: p->next DL -AND T6,T9,T1 -AND T7,T8,T1 -SRL T8,T6,0x10 -OR T9,T7,T8 -SW T9,0004 (A1) ;DL+4= rdphalf_u.l: -LW T4,00C4 (SP) -LUI T6,B200 -SW T6,0000 (A2) ;DL+0= rdphalf_c.u -LW T7,00C8 (SP) -AND T9,T4,T1 -SRL T6,T9,0x10 -AND T8,T7,T1 -OR T7,T8,T6 -SW T7,0004 (A2) ;DL+4= rdphalf_c.l: -ADDIU V1,A2,0008 ;V1=A2+8: p->next DL -SW T5,0000 (V1) ;DL+0= rdphalf_u.u -LW T6,00DC (SP) -SLL T8,RA,0x10 -ADDIU S0,V1,0008 ;S0=V1+8: p->DL -ANDI T7,T6,FFFF -OR T9,T8,T7 -SW T9,0004 (V1) ;DL+4= rdphalf_u.l: -LUI T6,B200 -SW T6,0000 (S0) ;DL+0= rdphalf_c.u -LW T7,00D8 (SP) -ANDI T6,T3,FFFF -ADDIU A3,S0,0008 ;A3=S0+8: p->next DL -SLL T9,T7,0x10 -OR T8,T9,T6 -SW T8,0004 (S0) ;DL+4= rdphalf_c.l: -SW T5,0000 (A3) ;DL+0= rdphalf_u.u -LW T8,00CC (SP) -LW T9,00D0 (SP) -LW T3,00C0 (SP) -ANDI T7,T8,FFFF -SLL T6,T9,0x10 -LW A2,00BC (SP) -OR T9,T6,T7 -SW T9,0004 (A3) ;DL+4= rdphalf_u.l: -LUI T5,B200 -ADDIU V1,A3,0008 ;V1=A3+8: p->next DL -SW T5,0000 (V1) ;DL+0= rdphalf_c.u -LW T6,00C8 (SP) -ANDI T9,T4,FFFF -ADDIU A0,V1,0008 ;A0=V1+8: p->next DL -SLL T7,T6,0x10 -OR T8,T7,T9 -SW T8,0004 (V1) ;DL+4= rdphalf_c.l: -LUI T6,B400 -AND T9,A2,T1 -SRL T8,T9,0x10 -SW T6,0000 (A0) ;DL+0= rdphalf_u.u -AND T7,T3,T1 -OR T6,T7,T8 -AND T7,V0,T1 -SW T6,0004 (A0) ;DL+4= rdphalf_u.l: -SRL T8,T7,0x10 -AND T9,T0,T1 -ADDIU A1,A0,0008 ;A1=A0+8: p->next DL -OR T6,T9,T8 -SW T6,0004 (A1) ;DL+4= rdphalf_c.l: -SW T5,0000 (A1) ;DL+0= rdphalf_c.u -LW RA,00AC (SP) -LW T5,00B0 (SP) -OR T2,V0,R0 -ADDIU S0,A1,0008 ;S0=A1+8: p->DL -LW T4,00A8 (SP) -LW A3,00A4 (SP) -OR V0,S0,R0 ;V0=S0: p->DL -LUI T7,B400 -AND T8,RA,T1 -SRL T6,T8,0x10 -SW T7,0000 (V0) ;DL+0= rdphalf_u.u -AND T9,T5,T1 -OR T7,T9,T6 -SW T7,0004 (V0) ;DL+4= rdphalf_u.l: -ADDIU V1,S0,0008 ;V1=S0+8: p->next DL -LUI T8,B200 -AND T6,A3,T1 -SRL T7,T6,0x10 -SW T8,0000 (V1) ;DL+0= rdphalf_c.u -AND T9,T4,T1 -OR T8,T9,T7 -SW T8,0004 (V1) ;DL+4= rdphalf_c.l: -ADDIU S0,V1,0008 ;S0=V1+8: p->DL -LUI T6,B400 -SW T6,0000 (S0) ;DL+0= rdphalf_u.u -SLL T7,T3,0x10 -ANDI T8,A2,FFFF -OR T6,T7,T8 -SW T6,0004 (S0) ;DL+4= rdphalf_u.l: -ADDIU A1,S0,0008 ;A1=S0+8: p->next DL -LUI T9,B200 -SW T9,0000 (A1) ;DL+0= rdphalf_c.u -ANDI T6,T2,FFFF -SLL T8,T0,0x10 -OR T9,T8,T6 -SW T9,0004 (A1) ;DL+4= rdphalf_c.l: -ADDIU V1,A1,0008 ;V1=A1+8: p->next DL -LUI T7,B400 -SW T7,0000 (V1) ;DL+0= rdphalf_u.u -ANDI T9,RA,FFFF -SLL T6,T5,0x10 -OR T7,T6,T9 -SW T7,0004 (V1) ;DL+4= rdphalf_u.l: -ADDIU A0,V1,0008 ;A0=V1+8: p->next DL -LUI T8,B300 -SW T8,0000 (A0) ;DL+0= rdphalf_l.u -SLL T9,T4,0x10 -ANDI T7,A3,FFFF -OR T8,T9,T7 -SW T8,0004 (A0) ;DL+4= rdphalf_l.l: -ADDIU V0,A0,0008 ;V0=A0+8: p->DL -//7F09A2CC: return -LW RA,0024 (SP) -LDC1 F20,0018 (SP) -LW S0,0020 (SP) -JR RA -ADDIU SP,SP,04D0 - -+_+ - -sample, without the crazy ops everywhere: -CE80 02A8 02A0 01E4 -013F C000 FF58 8146 -0000 0000 0000 0000 -013F C000 0000 0000 -0088 0000 000A 00FF -FFFF 0000 FFFF 0000 -0000 0000 0000 0000 -FF24 0000 FFE9 0000 -FFFE 0000 FFFF 0000 -FFFE 0000 FFFF 0000 -0AE1 0000 CBCD 0000 -0AE1 0000 CBCD 0000 -0218 0840 3FFF 03FF -FFF9 FFF9 FFFE 0000 -128C 7C20 7F40 7E10 -1B3C 06E5 019D 0004 -FFFE FFF9 FEDA 0000 -FFFE FFF9 FEDA 0000 -6E40 9C7C 566A 028C -6E40 9C7C 566A 028C \ No newline at end of file diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/1st person/G-Z Models.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/1st person/G-Z Models.txt deleted file mode 100644 index f5beca6..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/1st person/G-Z Models.txt +++ /dev/null @@ -1,116 +0,0 @@ -G-Z Models ----------- - G-Z models are 1st person models, used either as weapons, gadgets, discharged shells, etc. These models are used in both the watch menu and when the object is in use in the first-person menu. Because they are only displayed, no collision information is stored. - - The primary display list type used in 1st person objects is the 04 command. The breakdown is such: -04 command: -0x0 4 offset to primary mapping -0x4 4 offset to secondary mapping -0x8 4 reserved -0xC 4 offset to point table -0x10 2 number of points in point table -0x12 2 0300 - unknown - - Both primary and secondary mapping may be present - and usually are. Secondary tends to be used special effects or transparently mapped areas, just like with room models. In particular, one may point toward mapping while the other points toward nothing, allowing that part of the model to 'disappear' when need be. In this case, the mapping used is set at runtime using linked 12 commands. - - 09 commands are also common. They are used for more than placing hats on character's heads. What they do is set a placement for a seperate model that is loaded simulatiously with the current one. For instance, the character's arm appears when some weapons and items are in use. There are many different character arm models, and storing the each object with copies of each arm is ineffecient. Instead, 09 commands in the weapon load the arm's components and place them appropriately. Because each component is loaded specificly to a given location, this also eliminates hand/object misalignment. - - Most models are used for player items, so they have a series of offsets used for fingers, gun attributes, and other items. Obviously not all the offsets will be used, depending on the item. Some objects that aren't used as items, such as discharged shells, do not follow this pattern. - -(fill in with offset coorespondance here before sending it off) -offsets: (28/36) - watch laser autoshot SHOTGUN AK47-SOVIET golden gun GOLD PP7 G-LAUNCH HUNT-KNIFE R-LAUNCH taser throwknife sil PP7 -0x0 00000000 050001E0 0500049C 050003F0 0500012C 050001A4 00000000 00000000 00000000 00000000 00000000 050001B0 15 command -0x4 00000000 05000168 05000124 05000180 05000144 0500012C 0500015C 00000000 00000000 00000000 00000000 05000138 -0x8 00000000 05000198 05000154 050001B0 05000174 0500015C 0500018C 00000000 00000000 00000000 00000000 05000168 -0xC 050001B0 05000180 0500013C 05000198 0500015C 05000144 05000174 00000000 05000120 00000000 00000000 05000150 -0x10 00000000 00000000 00000000 00000000 00000000 00000000 05000204 00000000 00000000 00000000 00000000 00000000 -0x14 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 -0x18 05000318 00000000 00000000 00000000 05000204 05000264 00000000 00000000 00000000 00000000 00000000 05000390 -0x1C 00000000 00000000 00000000 00000000 00000000 050003E4 00000000 00000000 00000000 00000000 00000000 050004E0 -0x20 00000000 00000000 00000000 00000000 050001EC 0500024C 00000000 0500018C 00000000 05000188 05000144 05000258 -0x24 00000000 00000000 00000000 00000000 05000234 050002AC 00000000 0500039C 00000000 050001E8 0500036C 05000498 -0x28 00000000 00000000 00000000 00000000 05000294 050002F4 00000000 050001D4 00000000 05000458 0500018C 05000450 -0x2C 00000000 00000000 00000000 00000000 00000000 0500039C 00000000 0500030C 00000000 05000428 050002C4 050002B8 -0x30 00000000 00000000 00000000 00000000 05000354 050004BC 00000000 00000000 00000000 00000000 00000000 05000378 -0x34 00000000 00000000 00000000 00000000 00000000 05000504 00000000 00000000 00000000 00000000 00000000 050003F0 -0x38 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0500039C 00000000 throwing knife 12 -0x3C 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0500033C 00000000 throwing knife blade 12 -0x40 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 05000410 00000000 00000000 taser placeholder for animation (18) -0x44 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 050003F8 00000000 00000000 taser 12 for animation -0x48 00000000 05000708 050003F4 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 shotgun shell 1 -0x4C 00000000 05000498 05000394 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 shotgun shell 2 -0x50 00000000 05000540 05000424 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 shotgun shell 3 -0x54 00000000 05000678 05000454 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 shotgun shell 4 -0x58 00000000 050005E8 0500031C 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 shotgun shell 5 -0x5C 00000000 050006C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 autoshotgun shell -0x60 00000000 05000450 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 autoshotgun shell -0x64 00000000 050004F8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 autoshotgun shell -0x68 00000000 05000630 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 autoshotgun shell -0x6C 00000000 050005A0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 autoshotgun shell -[these eight offsets only present on weapons] -[they do not appear on collectables (blueprints, black box, etc.)] -0x70 05000348 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 watch 0F command -0x74 050002A0 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 watch boiler cuff -0x78 05000240 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 watch black tuxedo cuff -0x7C 05000270 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 watch connery cuff -0x80 050001E0 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 watch blue cuff -0x84 05000210 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 watch jungle cuff -0x88 050002D0 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 watch snowsuit cuff -0x8C 00000000 00000000 not present 00000000 00000000 00000000 00000000 00000000 00000000 not present 00000000 050001E0 pp7 silencer - -------------------- -------------------- - -Pchr-Z Item Models ---------------- - Item pickups - especially weapons - differ slightly from other P-Z models insofar as different commands are used. - - Most other objects use 02 commands to position pieces in the model. Most item pickups utilize the 15 position command instead. Just like the 02 commands, each command is relative to the last. The breakdown is such: -15 command: -0x0 4 (float) X Position -0x4 4 (float) Y Position -0x8 4 (float) Z Position -0xC 2 command ID number -0xE 2 unknown - probably piece ID number or reserved -0x10 4 (float) unknown - - Many use the 04 display type as the primary display list type, and commonly 12 commands are also used. 12 commands are little more than a pointer to other commands, allowing the piece to either be selected independant from the object or selectively deactivated when rendering the object as a whole. Rendering these pieces is optional in most cases. -04 command: -0x0 4 offset to primary mapping -0x4 4 offset to secondary mapping -0x8 4 reserved -0xC 4 offset to point table -0x10 2 number of points in point table -0x12 2 0300 - unknown - -12 command: -0x0 4 offset to command in table -0x4 4 reserved - - Another command, used with most weapon pickups, is the 0C command. This sets the position and image used for the gunfire flare rendered when the player is using the weapon in 3rd person. The flare appears at the end of the firearm. -0C Command: -0x0 4 (float) X Position -0x4 4 (float) Y Position -0x8 4 (float) Z Position -0xC 4 (float) Width -0x10 4 (float) Height -0x14 4 (float) Depth -0x18 4 offset to image declaration for gunfire (0x847) -0x1C 4 (float) unknown - - Occationally type 16 display lists are used. They are a special animation type to build gunfire. These are incredibly simple, despite the animation. -16 command: gunfire -0x0 4 number of flares created (4 points each, 1 04+B1-mapping command for each) -0x4 4 offset to point table -0x8 4 offset to mapping - It renders only one of the flares at a time, then switches to the next flare in the list. Notice this is different from the generic weapon flare when a weapon fires. It is probably the actual gunfire from the weapon. Note that most weapons use image 0x374, but the laser uses 0x851, colourshifted to 00B6FF (light blue). You probably will never render these commands, unless you are building objects or creating a port/clone. - - - Weapon pickups also utilize three offsets at the beginning of the file, not all of which are set for every weapon. -0x0 offset to 0C gunfire command in table -0x4 offset to 15 position command for gunfire animation -0x8 offset to 12 reference command for gunfire animation - - Notice only weapons - and certain weapons at that - specify a special gunfire animation or flare when firing. When not present, these fields are left NULL (00000000). - diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Absolute Basic Rendering Models.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Absolute Basic Rendering Models.txt deleted file mode 100644 index 95a3827..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Absolute Basic Rendering Models.txt +++ /dev/null @@ -1,93 +0,0 @@ - Every object and room requires different kinds of data in order to be rendered. The bare minimum requirement is a list of points in the model and a display list that maps those points. - -Goldeneye Point Table Structure - Most N64 games follow this structure. It contains x, y, z data, as well as s/t coordinates to map textures to the surface and an RGBA value blended between the points composing the triangles. -offset size data type usage -0x0 2 signed short x coordinate -0x2 2 signed short y coordinate -0x4 2 signed short z coordinate -0x6 2 signed short reserved (0000) -0x8 2 signed short s value (x image mapping component) -0xA 2 signed short t value (y image mapping value) -0xC 1 unsigned byte Red Component, from 00-FF -0xD 1 unsigned byte Green Component, from 00-FF -0xE 1 unsigned byte Blue Component, from 00-FF -0xF 1 unsigned byte Alpha Component, from 00 (invisible) to FF (opaque) - -Sample: FFE0 0000 0020 0000 0020 0020 FFFFFFFF - - S/t coordinates are used for texture mapping. Unfortunately, the values are intimately tied to the image's own dimentions. There are several common mapping modes, including mirrorred, clamped, and tiled. - - First, lets build a 32x32 square from these four points... -0000 0000 0020 0000 0000 0000 FF0000FF -0020 0000 0020 0000 0020 0000 00FF00FF -0020 0000 0000 0000 0020 FFE0 0000FFFF -0000 0000 0000 0000 0000 FFE0 FFFF00FF - Clockwise, from the upper left, the square is red, green, blue, and yellow. Notice the mapping coordinates already set. The s values match the x values for the square. However, the t values are negative. Negative s or t values naturally mirror the image on that axis. So, the image should appear inverted. - - Now, to actually apply an image. Lets assume a greyscale image, 32x32 to match the square. When applied, it will fit precisely, albeit upside-down because of the t values. If the colour combining mode is active, the image will also be colourized to match the lighting of the square, red, blue, green, and yellow. - However, if the image is 64x64, it doesn't fit precisely on the square. Ordinarily, you will only see the upper-left corner of the image. To fit precisely, the 0020 needs to be 0040, and FFE0 changed to FFC0. - Lets try a 16x16 image now. For this example, the tile flag is assumed to be set. The image will repeat after being textured, so instead of seeing one image, four are mapped to the square! Without tiling set but with active clamps, it is more likely the image will be stretched to fit. - - Imagine, for a minute, that you wish to draw four triangles, all meeting at a centerpoint, but still want the 32x32 texture to map perfectly to the surface. This is easy enough. The point list will look like so: -0000 0000 0020 0000 0000 0000 FF0000FF //ul -0020 0000 0020 0000 0020 0000 00FF00FF //ur -0020 0000 0000 0000 0020 FFE0 0000FFFF //lr -0000 0000 0000 0000 0000 FFE0 FFFF00FF //ll -0010 0000 0010 0000 0010 FFF0 FFFFFFFF //center - Notice the centerpoint chose mapping pins in the center of the image. Conforming to the image's properties ensures the image is rendered correctly. - - - Image sizes and other properties can be found in SubDrag's image index. -------------- - -04 point table offset command - The RSP 04 command is used to set the offset within a point table. At most, 16 points can be declared at one time. Functionally, rooms and objects will be concidered seperately. - - Rooms are the simplest case. The offset command is a literal offset within the point data file. You can expect: -04F00100 00000000 -to grab the first 16 entries at the beginning of the point table. The 0100 indicates, in bytes, how much data is being copied. If only 8 points are being pulled, the command would look like this: -04700080 00000000 - The offset is a literal offset in the point data binary. For instance, -04F00100 00000100 -grabs the next 0x100 bytes at file offset 0x100. To get the next 5 points, you would use this: -04400050 00000200 --and the next 10 points... -049000A0 00000250 - - Objects are more difficult. Each offset is relative to the pointer set by the display list command. In other words- -04F00100 04000000 --would load the first 16 points and 0x100 bytes from the beginning of the display list's point table. - 05 offsets can also be used to specificly state the offset within the file to start pulling points from. - -------------- - -B1 4-triangle draw routine - The primary triangle drawing routine draws up to four at once. This function is unique to Rare's games, so don't expect it to work with other ucodes. - The format is a little unusual, refering to the points in the point table loaded perviously. The values are one nibble long, ranging from 0-F, or point 1 to 16. If all the points are set to 0, that triangle is not drawn. Below, the first point in the triangle is listed as x, the second y, and the third z. -B100zzzz yxyxyxyx -0000000z 000000yx first triangle -000000z0 0000yx00 second triangle -00000z00 00yx0000 third triangle -0000z000 yx000000 fourth triangle - - B1000002 00000010 Creates one triangle using points {0,1,2} - B1000042 00003110 Creates two triangles, using points {0,1,2} and {1,3,4} - B1000242 00413110 Creates three triangles; {0,1,2}, {1,3,4}, and {1,4,2} - B1007242 65413110 Creates four triangles; {0,1,2}, {1,3,4}, {1,4,2}, and {5,6,7} - - Remember, don't try to use points that were not previously called with the 04 command. If only five points were declared (0-4), then the last example, B1007242 65413110 would be invalid and cause an exception. - -------------- - -BF single triangle draw routine - These are very infrequently used. They draw only one triangle at a time, again refering to the points in the point table loaded previously. Before each value can be used, they must be divided by 10 (0xA) to return the point index number. -BF000000 00zzyyxx - - BF000000 00140A00 Creates a triangle using points {0,1,2}, or 0/A=0, A/A=1, 14/A=2 - BF000000 00968C82 Creates a triangle using points {13,14,15}, or 82/A=D, 8C/A=E, 96/A=F - - Again, you still can't use points that haven't been loaded with the 04 vertex command. - -------------- - diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/GE Object Offsets.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/GE Object Offsets.txt deleted file mode 100644 index ec44caf..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/GE Object Offsets.txt +++ /dev/null @@ -1,247 +0,0 @@ -HEAD: -0x0 sunglasses toggle -0x4 distant head toggle - -CAM: cctv cameras -0x0 camera position -0x4 glass -0x8 glass dimentions -0xC camera toggle - -TV1: -0x0 DL for screen - -TV4: note that NULL is used if the screen is not present (ie. only 1-3 screens) -0x0 DL for screen 1 -0x4 DL for screen 2 -0x8 DL for screen 3 -0xC DL for screen 4 - -RACK: main object is in group 0. position data alone exists for groups 1-4 -0x0 position for monitor 1 (pos:grp 0001 0001) -0x4 position for monitor 2 (pos:grp 0002 0002) -0x8 position for monitor 3 (pos:grp 0003 0003) -0xC position for monitor 4 (pos:grp 0004 0004) - -AUTOGUN: [note: only first three needed for SWIVEL objects] -0x0 group 0 position position of base -0x4 group 1 position position of horizontal swivel bar (gun mount) -0x8 group 2 position position of vertical swivel point/main body -0xC group 3 position position of autogun turret(s) -0x10 group 4 position position of gunfire; used when only gunfire 1 present -0x14 gunfire 1 -0x18 group 5/4 position position of gunfire/object; used on groundgun -0x1C gunfire 2 - -EYE_DOOR: -0x0 group 0 position base position of door -0x4 group 1 position position for top? -0x8 group 2 position position for bottom? - -IRIS_DOOR: -0x0 group 0 position base position of door -0x4 group 1 position position of inner spline -0x8 group 2 position position of outer track -0xC group 3 position position of inner spline -0x10 group 4 position position of outer track -0x14 group 5 position position of inner spline -0x18 group 6 position position of outer track -0x1C group 7 position position of inner spline -0x20 group 8 position position of outer track -0x24 group 9 position position of inner spline -0x28 group A position position of outer track -0x2C group B position position of inner spline -0x30 group C position position of outer track - -MENU: -0x0 toggle for tabs on side of folder -0x4 toggle for basic folder -0x8 toggle for FOR YOUR EYES ONLY -0xC toggle for OHMSS -0x10 toggle for CONFIDENTIAL - briefing -0x14 toggle for CONFIDENTIAL - multi -0x18 toggle for CLASSIFIED -0x1C toggle for shadow beneath character image -0x20 toggle for 1st selected file image (Connery) -0x24 toggle for 2st selected file image (Dalton) -0x28 toggle for 3st selected file image (Moore) -0x2C toggle for 4st selected file image (Brosnan) -0x30 toggle for shadow beneath briefing image -0x34 toggle for main folder select screen -0x38 toggle for shadow beneath slot selection pic -0x3C toggle for 1st slot selection pic (Connery) -0x40 toggle for 2st slot selection pic (Dalton) -0x44 toggle for 3st slot selection pic (Moore) -0x48 toggle for 4st slot selection pic (Brosnan) -0x4C toggle for solo stage select -0x50 toggle for solo selection table (stage imgs) -0x54 solo selection table (stage imgs) -0x58 toggle for Dam briefing image -0x5C toggle for Facility briefing image -0x60 toggle for Runway briefing image -0x64 toggle for Surface I briefing image -0x68 toggle for Bunker I briefing image -0x6C toggle for Silo briefing image -0x70 toggle for Frigate briefing image -0x74 toggle for Surface II briefing image -0x78 toggle for Bunker II briefing image -0x7C toggle for Statue briefing image -0x80 toggle for Archives briefing image -0x84 toggle for Streets briefing image -0x88 toggle for Depot briefing image -0x8C toggle for Train briefing image -0x90 toggle for Jungle briefing image -0x94 toggle for Control briefing image -0x98 toggle for Caverns briefing image -0x9C toggle for Cradle briefing image -0xA0 toggle for Aztec briefing image -0xA4 toggle for Egypt briefing image -0xA8 toggle to secondary folder (multi, cheats, briefings) - -CAR: -0x0 main object position -0x4 wheel 1 position -0x8 wheel 2 position -0xC wheel 3 position -0x10 wheel 4 position -0x14 -0x18 dimentions wheel 1 -0x1C dimentions wheel 2 -0x20 dimentions wheel 3 -0x24 dimentions wheel 4 -0x28 dimentions main body - -AIRCRAFT: -0x0 main 01 heading -0x4 main position -0x8 forward prop -0xC rear prop -0x10 position for turret -0x14 prop dimention - -WIN_DOOR: note that first glass DL is dud, second generates glass -0x0 dimentions of door -0x4 toggle for glass -0x8 dimentions of glass -0xC glass - Generic DUD glass display list: - E7000000 00000000 pipesync - BA000C02 00002000 setothermode.h: bi-level interpretation - B8000000 00000000 enddl - -TANK: -0x0 144 main position -0x4 18c position of cupola -0x8 204 group 2 position parent of turret, antennae, etc -0xC 21c group 3 position -0x10 234 group 4 position child of group 3; parent of firing effect -0x14 15c dimentions of tank chassis -0x18 1a4 dimentions of cupolla -0x1C 24c firing effect (0C) -0x20 264 toggle for turret - -HAT: -none - -STD_OBJ: -none - -CHR_OBJ: note when fields aren't present set to NULL -0x0 gunfire -0x4 group 1 position rifles: isolated 15 command -0x8 toggle secondary flare rifles: horizontal flare - -RARE: -Unknown Object... - -ARM: -0x0 watch hour hand position -0x4 watch minute hand position -0x8 watch second hand position -0xC toggle watch dial face -0x10 boiler suit cuff toggle -0x14 brosnan tux cuff toggle -0x18 connery tux cuff toggle -0x1C blue suit cuff toggle -0x20 jungle suit cuff toggle -0x24 snowsuit cuff toggle - -STD_GUN: hands are optional! -0x0 position (15), possibly of ejected shells (projectile weapons only) -0x4 gunfire toggle (on-screen blast from gun barrel) -0x8 gunfire flash position (linked to render for flash) -0xC gunfire position (origin of rendered beam) -0x10 horiz. gunfire flash/special feature position -0x14 hammer position -0x18 position of index [trigger] finger -0x1C position for 09 linked to trigger/slide -0x20 toggle (12) for fingers (first joint) -0x24 toggle (12) for index [trigger] finger -0x28 toggle (12) for 09s linked to tips of middle/ring/pinky fingers -0x2C toggle (12) for thumb -0x30 toggle (12) for flesh of hand -0x34 toggle (12) for arm -0x38 throwing knife toggle -0x3C throwing knife blade toggle -0x40 taser animation display list -0x44 taser animation toggle -0x48 shotgun shell toggle -0x4C shotgun shell toggle -0x50 shotgun shell toggle -0x54 shotgun shell toggle -0x58 shotgun shell toggle -0x5C autoshotgun shell toggle -0x60 autoshotgun shell toggle -0x64 autoshotgun shell toggle -0x68 autoshotgun shell toggle -0x6C autoshotgun shell toggle -//these and below are hand... -0x70 button? 0F type -0x74 boiler arm toggle -0x78 tux arm toggle -0x7C connery arm toggle -0x80 bluesuit arm toggle -0x84 jungle arm toggle -0x88 snowsuit toggle -0x8C toggle (12) for barrel (odd that. Could be to kill entire weapon...) - -NULL_OBJ: -N/A - -BARREL_GUN: all fields appear valid -same as STD_GUN, except entry #5 -... -0x10 rotating barrel -... - -UZI_GUN: only first five fields filled; rest appear valid -same as STD_GUN; uses a special flash effect in entry #5 -... -0x10 gunfire flash position (linked to plane with second gunfire effect) -... - -CTRL: -0x0 primary position data (all commands are its children) -0x4 start button position -0x8 directional pad position -0xC control stick position -0x10 c button position -0x14 c button position -0x18 c button position -0x1C c button position -0x20 a button position -0x24 b button position -0x28 r button position -0x2C l button position -0x30 z button position -0x34 switch for body (12 type) - -ACTOR: -0x0 right arm position -0x4 right hand position -0x8 left hand position -0xC left hand position -0x10 head position or placeholder (17) -0x14 right hand position -0x18 hat position - diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Object Parsing.pdf b/notes/GE Documentation/Display Lists and Object Generation/Objects/Object Parsing.pdf deleted file mode 100644 index 93c6b75..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Object Parsing.pdf and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Object Table Types.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Object Table Types.txt deleted file mode 100644 index cbaa489..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Object Table Types.txt +++ /dev/null @@ -1,143 +0,0 @@ -type 01 0x10 main object heading - 4 ID command ID - 4 child child entry - 2 grp1 group 1 ID - 2 grp2 group 2 ID - 2 TAG - 2 RESERVED - -type 02 0x1C position - float xpos relative x,y,z position to parent - float ypos - float zpos - 1 grp1 command ID - 1 grp2 group 2 ID or 0 - 1 grp3 group 3 ID or -1 - 1 grp4 group 4 ID or -1 - 4 child child subcommand TBL offset - float unknown - -type 03 ???? unknown type - -type 04 0x14 display list - 4 DL1 primary display list - 4 DL2 secondary display list or NULL - 2 grp1 group ID 1 - 2 grp2 group ID 2 - 4 PIN point table - 2 pinnum # points in block - 1 TAG - 1 RESERVED - -type 05 ???? unknown type - -type 06 ???? unknown type - -type 07 ???? unknown type - -type 08 0x10 distance trigger - float min minimum distance from viewport - float max maximum distance from viewport - 4 target display list used when within range - 2 TAG - 2 RESERVED - -type 09 0x24 head/hat placement - float xmin dimentions - float xmax - float ymin - float ymax - float zmin - float zmax - 4 head head DL or 17 placeholder - 4 neck neckline display list - 2 RESERVED - 2 TAG - -type 0A 0x1C dimentions - 4 group - float xmin - float xmax - float ymin - float ymax - float zmin - float zmax - -type 0B ???? unknown - -type 0C 0x28 gunfire - float xpos could also be xmin/xmax, etc. - float ypos - float zpos - float xdim - float ydim - float zdim - 4 imgdecl offset to entry in IMG block for firing effect - float unknown - 2 TAG - 2 RESERVED - 4 RESERVED2 - -type 0D 0x24 shadow -0x0 float x position. + moves to character's left, - to character's right -0x4 float z position. + moves in front of character, - backward -0x8 float x size (width) width of image from side to side -0xC float z size (length) length of image from forward to back - 4 imgdecl offset to entry in IMG block for shadow - 4 parent gleans model offset from type01 parent - float unknown - 2 TAG - 2 RESERVED - -type 0E ???? unknown - -type 0F 0x1C interlinkage - float xpos - float ypos - float zpos - float unknown1 - float unknown2 - float unknown3 - float unknown4 - -type 10 ???? unknown - -type 11 ???? unknown - -type 12 0x8 handle/switch - 4 target - 2 TAG - 2 RESERVED - -type 13 ???? unknown - -type 14 ???? unknown - -type 15 0x14 position - held items, especially - float xpos xyz position relative to parent - float ypos - float zpos - 2 grp1 model group 1 ID - 2 grp2 model group 2 ID - float unknown - -type 16 0x10 display list - simple - 2 unknown - 2 ID - 4 PIN - 4 DL - 4 RESERVED - -type 17 0x4 placeholder for pointer to head -0x0 4 RESERVED - -type 18 0x1C display list - 4 DL1 primary display list - 4 DL2 secondary display list or NULL - 4 PIN point table offset - 2 PINnum # points in table - 2 MRGnum # points in merge table - 4 MRG merge table offset - 4 USE usage table offset - 2 TAG - 2 RESERVED diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Object headers.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Object headers.txt deleted file mode 100644 index f1e2c9a..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Object headers.txt +++ /dev/null @@ -1,15 +0,0 @@ - Object headers in Goldeneye are seperate from the object files themselves as in Perfect Dark. This consists of 0x20 of data, as opposed to 0x1C in Perfect Dark. GE uses the final field to indicate if the object has been loaded. - - When an object is editted this data must be set! It indicates how many offsets, images, and whatnot are in the model, as well as the archetype. - -0x0 4 RESERVED for runtime: offset to object table -0x4 4 GE - pointer to archetype; PD - archetype number -0x8 4 RESERVED for runtime: offset to object offset block -0xC 2 number of offset entries -0xE 2 number of object groups -0x10 4 [float] UNKNOWN floating point value -0x14 2 RESERVED for runtime: number of entries in table -0x16 2 number of image entries -0x18 4 RESERVED for runtime: offset to image declarations -0x1C 4 GE only - RESERVED for runtime: nonzero indicates model is loaded in memory - diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/PnintendoZ/PnintendoZ-1.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/PnintendoZ/PnintendoZ-1.tga deleted file mode 100644 index 54334b1..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/PnintendoZ/PnintendoZ-1.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Point Merging.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Point Merging.txt deleted file mode 100644 index c2cb409..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Point Merging.txt +++ /dev/null @@ -1,68 +0,0 @@ -Models that Merge Points ------------------------- - - It isn't as confusing as you think. It only applies to models that use the point usage tables - 18 display lists. Points from one piece in a model can be borrowed by another. No fudging involved. It always really works. - ------------------------ - Before rendering the object's display list, you have to change the points used in the point table. The changes are outlined in the 'collision' point table. - -Collision Point Table -FF9B 001E FFB2 0000 00000000 FFFF 0000 -FF9B FFC8 FFB8 0001 00000000 FFFF 0000 -FF9B 004B 00A2 0002 00000000 FFFF 0000 -FF9B FFCE 00AB 0003 00000000 FFFF 0000 -FFBF 0026 0094 0004 00000000 FFFF 0000 -FFF7 0030 FFFC 0005 05000190 000D 0000 -FFFC FFDC FFCC 0006 05000190 0011 0000 -FFBD FFEB 00AF 0007 00000000 FFFF 0000 -0002 000C FFBF 0008 05000190 000F 0000 -0003 FFE1 FFEF 0009 05000190 0010 0000 -0002 FFE7 0015 000A 05000190 000E 0000 -FFFB 0020 FFE1 000B 05000190 000C 0000 - - Notice how some points have offset values at 0x8. These are offsets to other 18 render commands that you'll steal points from. The short value following the offset (0xA) is the point in the linked 'collision' table that will be used. The fastest thing is to look up the entry in the point usage table, a weird little list of short values. 'Collision' points are the unique points in the piece, and the usage table indicates which points are shared by other points in the model. This sample is the usage list targetted by the point table above. -0xF28: Usage point table for display list linked at 0x190 - 0020 0016 0017 001A 001B 0014 0015 000C 001E 000D 001F 0018 001C 0019 FFFF FFFF FFFF - FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 001D FFFF FFFF FFFF FFFF 0028 - 002A FFFF 0025 FFFF 002D 002C FFFF FFFF FFFF FFFF FFFF FFFF - - Usage tables have one entry for each point in the display list's point table. The first point in the table is the first entry, second the second, etc. If a point is reused then the slot's number is given in the table. For instance, the first point is shared by point 32 (0x20). If you look at the 'collision' point table, there will not be an entry with ID 0x20, but there will be one for 0x0. - Every point in the table is given a number (offset 0x6), but if it isn't present you will need to check the point usage table to see which point is equivalent. - - Taking the running example, let's swap out point 05 in the first table with the shared model's point. Point five is: -FFF7 0030 FFFC 0005 05000190 000D 0000 - It calls the 18 command at offset 0x190, and merges with point 0xD. The 18 command's data is found at offset 05000F84... - -point display struct: 0x190 right shin -0xF84 05005F48 00000000 05000AA8 002E 001A 05000D88 05000F28 0003 0000 00000000 - mapping @ 0x5F48 - normal point table @ 0xAA8; 2E normal points - collision point table @ 0xD88; 1A collision points - point usage table @ 0xF28 - - First, check the point usage table to ensure it isn't dummied up somehow. Scan through entries 0-C, and if 000D isn't found, the point will be a unique entry in the list: -0020 0016 0017 001A 001B 0014 0015 000C 001E*000D*001F 0018 - Unfortuantely the point is not unique, but it is the same as point 0x9. So, search the 'collision' point list for the new position: -0x9 FE25 FFE2 FFB5 0009 00000000 FFFF 0000 - - All you need are the x, y, and z coordinates. These get copied onto the other model's point data. - Remember, because this point is from another piece of the object, you have to make certain that the point's position is corrected for that piece's position, etc. In this example (Bond's right leg) no conversion is necessary; the foot and shin share the same position. Otherwise, determine what positions affect the part you're stealing from and which ones affect the target to determine a global position. - - - Now, all you have to do is replace the point in the original piece. You copy the new data over point 05's x,y,z data - and anything that shares that point! To see if anything shares the point, you need to refer to the original model's point usage table. -0xA40 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF - Good. The point is unique. Replace the x,y,z of fifth point in the normal point table. That point should now be merged with the leg. - - - -Note: - If the point wasn't unique (something else used point five) you would change it and any entry that refers to it. Say the table looked more like this: -FFFF FFFF FFFF FFFF FFFF 0006 0007 0008 FFFF - Order of operations: point five is shared by point 6. Point 7 is set after point 6 is corrected, so it is also the same as 5. Point 8 is also sharing point 7's corrected data, so it is the same as 5. - - -------------------------- -Another note: - The plane *does not* use merging. Any render problems are due to some other sizing issue. No points in the collision table use offsets. - - I haven't ID'd any objects that use merging yet, but the same rules apply. Undoubtedly there must be a few... diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/Load and mem locations.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/Load and mem locations.txt deleted file mode 100644 index ed67877..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/Load and mem locations.txt +++ /dev/null @@ -1,154 +0,0 @@ -Memory locations - decompressed in ROM -First ROM offset is given, then relative offset, size, and description -29E560 02000000 0x18 unknown - RGB values? -29E580 02000020 0xAB8 - 0x0 RA 16bit 64x16 (21) - 0x800 RA 16bit 32x10 -29F040 02000AE0 0xAB8 - 0x0 RE 16bit 64x16 (21) - 0x800 RE 16bit 32x10 -29FB00 020015A0 0xAB8 - 0x0 RE 16bit 64x16 (21) - 0x800 RE 16bit 32x10 -2A05C0 02002060 0xAB8 - 0x0 WA 16bit 64x16 (21) - 0x800 WA 16bit 32x10 -2A1078 02002B18 0x18D0 vertex table -2A2948 020043E8 0xC8 blue DL -2A2A10 020044B0 0x2A8 text DL -2A2CB8 02004758 0x888 gold DL -2A3548 02004FE8 0x1000 blue 16bit 64x32 -2A4550 02005FF0 0x800 gold 16bit 32x32 - -Special Note: - Two types of image commands may be used in these display lists. - FD commands may either use a relative data pointer (02xxxxxx) or physical data pointer (80xxxxxx/7Fxxxxxx) as usual. - You may also declare and load an image bank image using the code: - ABCD 0xxx - ABCD indicates to load the following short image ID to memory and link it here. - Also, images above contain mipmaps of varying sizes pregenerated. Emulators will select the primary and console, due to distances, will use a mipmap. - To alter this behaviour requires removing the mipmapping usage. - -<_> - -7F0084C0 3CFF0 Load Rare logo display lists -//7F0089AC 3D4DC blue DL + text line -3C0E0200 LUI T6,0200 -25CE43E8 ADDIU T6,T6,43E8 ;T6=020043E8: int. off. to blue DL -3C060600 LUI A2,0600 -02001025 OR V0,S0,R0 -ACE60000 SW A2,0000 (A3) ;A2->uDL: 06000000 - branchdl -ACEE0004 SW T6,0004 (A3) ;T6->lDL: 020043E8 - blue DL -26100008 ADDIU S0,S0,0008 -3C0F0200 LUI T7,0200 -25EF44B0 ADDIU T7,T7,44B0 ;T7=020044B0: int. off. to text DL -02001825 OR V1,S0,R0 -AC4F0004 SW T7,0004 (V0) ;T7->lDL: 020044B0 - text DL -AC460000 SW A2,0000 (V0) ;A2->uDL: 06000000 - branchdl -3C180200 LUI T8,0200 -27185FF0 ADDIU T8,T8,5FF0 ;T8=02005FF0: int. off. to images -26100008 ADDIU S0,S0,0008 -02002025 OR A0,S0,R0 -AC780004 SW T8,0004 (V1) ;T8->lDL: 02005FF0 - gold image -AC6B0000 SW T3,0000 (V1) ;T3->uDL: FD100000 - loadimg -26100008 ADDIU S0,S0,0008 -02002825 OR A1,S0,R0 -26100008 ADDIU S0,S0,0008 -AC8D0004 SW T5,0004 (A0) ;T5->lDL: 07014050 - tile 7 S: shift 0 mask 5 T: shift 0 mask 5 -AC8C0000 SW T4,0000 (A0) ;T4->uDL: F5100000 - settile 16bit RGBA line 0 tmem 0 palette 0 -02005025 OR T2,S0,R0 -26100008 ADDIU S0,S0,0008 -ACA00004 SW R0,0004 (A1) -ACBF0000 SW RA,0000 (A1) -3C19073F LUI T9,073F -3739F100 ORI T9,T9,F100 ;T9=0x073FF100: -02001025 OR V0,S0,R0 -240700FF ADDIU A3,R0,00FF ;A3=0xFF -AD590004 SW T9,0004 (T2) -AD510000 SW S1,0000 (T2) -26100008 ADDIU S0,S0,0008 -3C0F0001 LUI T7,0001 -35EF4050 ORI T7,T7,4050 ;T7=0x00014050: -02001825 OR V1,S0,R0 -AC400004 SW R0,0004 (V0) -AC490000 SW T1,0000 (V0) -AC6F0004 SW T7,0004 (A2) -00087900 SLL T7,T0,0x4 -01E87823 SUBU T7,T7,T0 -000F7900 SLL T7,T7,0x4 -01E7001A DIV T7,A3 -3C0EF510 LUI T6,F510 -35CE1000 ORI T6,T6,1000 ;T6=F5101000 -26100008 ADDIU S0,S0,0008 -02002025 OR A0,S0,R0 -AC6E0000 SW T6,0000 (V1) -3C190007 LUI T9,0007 -3739C07C ORI T9,T9,C07C ;T7=0x0007C07C -26100008 ADDIU S0,S0,0008 -3C18F200 LUI T8,F200 -AC980000 SW T8,0000 (A0) -AC990004 SW T9,0004 (A0) -02002825 OR A1,S0,R0 -3C0EFA00 LUI T6,FA00 -ACAE0000 SW T6,0000 (A1) -00087080 SLL T6,T0,0x2 -01C87023 SUBU T6,T6,T0 -000E7080 SLL T6,T6,0x2 -01C87021 ADDU T6,T6,T0 -000E7100 SLL T7,T6,0x0 -00003012 MFLO A2 -30D800FF ANDI T8,A2,00FF -03003025 OR A2,T8,R0 -01C7001A DIV T6,A3 -0018CE00 SLL T9,T8,0x10 -26100008 ADDIU S0,S0,0008 -14E00002 BNE A3,R0,0002 -00000000 NOP -0007000D BREAK 01C00 -2401FFFF ADDIU AT,R0,FFFF -14E10004 BNE A3,AT,0004 -3C018000 LUI AT,8000 -15E10002 BNE A3,AT,0002 -00000000 NOP -0006000D BREAK 01800 -00007812 MFLO T7 -31F800FF ANDI T9,T7,00FF -14E00002 BNE A3,R0,0002 -00000000 NOP -0007000D BREAK 01C00 -2401FFFF ADDIU AT,R0,FFFF -14E10004 BNE A3,AT,0004 -3C018000 LUI AT,8000 -15C10002 BNE T6,AT,0002 -00000000 NOP -0006000D BREAK 01800 -00187400 SLL T7,18,0x10 -032E7825 OR T7,T9,T6 -0006C200 SLL T8,A2,0x8 -01F8C825 OR T9,T7,T9 -372E00FF ORI T6,T9,00FF -ACAE0004 SW T6,0004 (A1) -//7F008B28 3D658 load gold DL -3C180200 LUI T8,0200 -02001825 OR V1,S0,R0 -27184758 ADDIU T8,T8,4758 ;T8=0x02004758 -3C0F0600 LUI T7,0600 -AC6F0000 SW T7,0000 (V1) ;T7->uDL: 06000000 - branchdl -AC780004 SW T8,0004 (V1) ;T8->lDL: 02004758 - gold DL -8FBF0034 LW RA,0034 (SP) -26020008 ADDIU V0,S0,0008 -8FB0002C LW S0,002C (SP) -8FB10030 LW S1,0030 (SP) -03E00008 JR RA -27BD00E8 ADDIU SP,SP,00E8 - - -7F00XXXX 3D688 loads the RareWare logo -// 3D6E8 ROM offset -3C05002A LUI A1,002A -AC440000 SW A0,0000 (V0) -24A5E560 ADDIU A1,A1,E560 ;A1=0x29E560: RAREWARE logo -0C001707 JAL 70005C1C -3B06003F ANDI A2,T8,003F - - diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/RA-reware small.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/RA-reware small.tga deleted file mode 100644 index 83e7da5..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/RA-reware small.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/RA-reware.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/RA-reware.tga deleted file mode 100644 index b11ec77..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/RA-reware.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/blue.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/blue.tga deleted file mode 100644 index 303b299..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/blue.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/gold.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/gold.tga deleted file mode 100644 index 58f3878..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/gold.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/ra-RE-ware small.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/ra-RE-ware small.tga deleted file mode 100644 index 6c73021..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/ra-RE-ware small.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/ra-RE-ware.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/ra-RE-ware.tga deleted file mode 100644 index 061beaf..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/ra-RE-ware.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rare-WA-re small.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rare-WA-re small.tga deleted file mode 100644 index 79c2f89..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rare-WA-re small.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rare-WA-re.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rare-WA-re.tga deleted file mode 100644 index dcb2a9f..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rare-WA-re.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rarewa-RE small.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rarewa-RE small.tga deleted file mode 100644 index 05a401b..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rarewa-RE small.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rarewa-RE.tga b/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rarewa-RE.tga deleted file mode 100644 index 203393d..0000000 Binary files a/notes/GE Documentation/Display Lists and Object Generation/Objects/Rare Logo/images/rarewa-RE.tga and /dev/null differ diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/CdjbondZ.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/CdjbondZ.txt deleted file mode 100644 index 92c202d..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/CdjbondZ.txt +++ /dev/null @@ -1,607 +0,0 @@ -header: -00000000 8003D400 00000000 00070015 -44A0A1BD 0000000D 00000000 00000000 -21 models; 7 offsets, 13 images - -offsets: (7) -0x0 05000460 //left arm -0x4 05000478 //left hand -0x8 050005E0 //right hand -0xC 050005E0 //right gun -0x10 05000418 //head -0x14 05000478 //left gun -0x18 050003D0 //hat - -images: (D) -0x1C 0000063B 20300400 02020200 -0x28 0000065C 20200600 02000000 -0x34 0000064D 20200600 02020200 -0x40 00000650 20200600 02020200 -0x4C 00000653 20200600 02020200 -0x58 00000656 20200600 02020200 -0x64 00000649 20200600 02000000 -0x70 0000065B 20300400 02000200 -0x7C 0000065E 20200600 02000000 -0x88 0000065F 30200400 02020000 -0x94 00000810 20300400 02000200 -0xA0 00000644 01010100 02000000 -0xAC 000007BC 20200600 01000000 - -Table: -0xB8 00010000 05000820 00000000 00000000 00000000 050000D0 -0xD0 00020000 05000830 050000B8 05000808 00000000 050000E8 -0xE8 00020000 0500084C 050000D0 05000250 00000000 05000100 -0x100 01020000 05000868 050000E8 050001D8 00000000 05000118 -0x118 00020000 05000884 05000100 05000160 00000000 05000130 -0x130 000A0000 050008A0 05000118 00000000 00000000 05000148 -0x148 00180000 05000A58 05000130 00000000 00000000 00000000 //right foot -0x160 000A0000 05000A78 05000100 00000000 05000118 05000178 -0x178 00080000 05000A94 05000160 050001A8 00000000 05000190 -0x190 00180000 05000F84 05000178 00000000 00000000 00000000 //right shin -0x1A8 00080000 05000FA4 05000160 00000000 05000178 050001C0 -0x1C0 00180000 050010EC 050001A8 00000000 00000000 00000000 //right shin (distance) -0x1D8 000A0000 0500110C 050000E8 00000000 05000100 050001F0 -0x1F0 00080000 05001128 050001D8 05000220 00000000 05000208 -0x208 00180000 05001794 050001F0 00000000 00000000 00000000 //right leg -0x220 00080000 050017B4 050001D8 00000000 050001F0 05000238 -0x238 00180000 05001944 05000220 00000000 00000000 00000000 //right leg (distance) -0x250 00020000 05001964 050000D0 050003B8 050000E8 05000268 -0x268 01020000 05001980 05000250 05000340 00000000 05000280 -0x280 00020000 0500199C 05000268 050002C8 00000000 05000298 -0x298 000A0000 050019B8 05000280 00000000 00000000 050002B0 -0x2B0 00180000 05001B70 05000298 00000000 00000000 00000000 //left foot -0x2C8 000A0000 05001B90 05000268 00000000 05000280 050002E0 -0x2E0 00080000 05001BAC 050002C8 05000310 00000000 050002F8 -0x2F8 00180000 050020C0 050002E0 00000000 00000000 00000000 //left shin -0x310 00080000 050020E0 050002C8 00000000 050002E0 05000328 -0x328 00180000 05002224 05000310 00000000 00000000 00000000 //left shin (distance) -0x340 000A0000 05002244 05000250 00000000 05000268 05000358 -0x358 00080000 05002260 05000340 05000388 00000000 05000370 -0x370 00180000 05002914 05000358 00000000 00000000 00000000 //left leg -0x388 00080000 05002934 05000340 00000000 05000358 050003A0 -0x3A0 00180000 05002AC4 05000388 00000000 00000000 00000000 //left leg (distance) -0x3B8 01020000 05002AE4 050000D0 05000790 05000250 050003D0 -0x3D0 00020000 05002B00 050003B8 05000448 00000000 050003E8 -0x3E8 000A0000 05002B1C 050003D0 00000000 00000000 05000400 -0x400 00090000 05002B38 050003E8 00000000 00000000 05000418 -0x418 00170000 05002B5C 05000400 05000430 00000000 00000000 //head placeholder -0x430 00180000 05002E0C 05000400 00000000 05000418 00000000 //front collar -0x448 00020000 05002E2C 050003B8 050005B0 050003D0 05000460 -0x460 01020000 05002E48 05000448 05000538 00000000 05000478 -0x478 00020000 05002E64 05000460 050004C0 00000000 05000490 -0x490 000A0000 05002E80 05000478 00000000 00000000 050004A8 -0x4A8 00180000 050030F0 05000490 00000000 00000000 00000000 //right hand -0x4C0 000A0000 05003110 05000460 00000000 05000478 050004D8 -0x4D8 00080000 0500312C 050004C0 05000508 00000000 050004F0 -0x4F0 00180000 0500356C 050004D8 00000000 00000000 00000000 //right forearm -0x508 00080000 0500358C 050004C0 00000000 050004D8 05000520 -0x520 00180000 050036B0 05000508 00000000 00000000 00000000 //right forearm (distance) -0x538 000A0000 050036D0 05000448 00000000 05000460 05000550 -0x550 00080000 050036EC 05000538 05000580 00000000 05000568 -0x568 00180000 05003AB4 05000550 00000000 00000000 00000000 //right arm -0x580 00080000 05003AD4 05000538 00000000 05000550 05000598 -0x598 00180000 05003C1C 05000580 00000000 00000000 00000000 //right arm (distance) -0x5B0 00020000 05003C3C 050003B8 05000718 05000448 050005C8 -0x5C8 01020000 05003C58 050005B0 050006A0 00000000 050005E0 -0x5E0 00020000 05003C74 050005C8 05000628 00000000 050005F8 -0x5F8 000A0000 05003C90 050005E0 00000000 00000000 05000610 -0x610 00180000 05003F00 050005F8 00000000 00000000 00000000 //left hand -0x628 000A0000 05003F20 050005C8 00000000 050005E0 05000640 -0x640 00080000 05003F3C 05000628 05000670 00000000 05000658 -0x658 00180000 0500437C 05000640 00000000 00000000 00000000 //left forearm -0x670 00080000 0500439C 05000628 00000000 05000640 05000688 -0x688 00180000 050044C0 05000670 00000000 00000000 00000000 //left forearm (distance) -0x6A0 000A0000 050044E0 050005B0 00000000 050005C8 050006B8 -0x6B8 00080000 050044FC 050006A0 050006E8 00000000 050006D0 -0x6D0 00180000 050048C4 050006B8 00000000 00000000 00000000 //left arm -0x6E8 00080000 050048E4 050006A0 00000000 050006B8 05000700 -0x700 00180000 05004A2C 050006E8 00000000 00000000 00000000 //left arm (distance) -0x718 000A0000 05004A4C 050003B8 00000000 050005B0 05000730 -0x730 00080000 05004A68 05000718 05000760 00000000 05000748 -0x748 00180000 0500541C 05000730 00000000 00000000 00000000 //chest -0x760 00080000 0500543C 05000718 00000000 05000730 05000778 -0x778 00180000 050056B8 05000760 00000000 00000000 00000000 //chest (distance) -0x790 000A0000 050056D8 050000D0 00000000 050003B8 050007A8 -0x7A8 00080000 050056F4 05000790 050007D8 00000000 050007C0 -0x7C0 00180000 05005C48 050007A8 00000000 00000000 00000000 //waist -0x7D8 00080000 05005C68 05000790 00000000 050007A8 050007F0 -0x7F0 00180000 05005E98 050007D8 00000000 00000000 00000000 //waist (distance) -0x808 000D0000 05005EB8 050000B8 00000000 050000D0 00000000 - -- - 01:B8 {02:D0 {02:E8 {02:100 {02:118 {0A:130 {18:148}} - 0A:160 {08:178 {18:190} - 08:1A8 {18:1C0}} - } - 0A:1D8 {08:1F0 {18:208} - 08:220 {18:238} - } - } - 02:250 {02:268 {02:280 {0A:298 {18:2B0}} - {0A:2C8 {08:2E0 {18:2F8} - 08:310 {18:328}} - } - 0A:340 {08:358 {18:370} - 08:388 {18:3A0} - } - } - 02:3B8 {02:3D0 {0A:3E8 {09:400 {17:418 - 18:430}} - } - } - 02:448 {02:460 {02:478 {0A:490 {18:4A8}} - 0A:4C0 {08:4D8 {18:4F0} - 08:508 {18:520}} - } - 0A:538 {08:550 {18:568} - 08:580 {18:598}} - } - 02:5B0 {02:5C8 {02:5E0 {0A:5F8 {18:610}} - 0A:628 {08:640 {18:658} - 08:670 {18:688}} - } - 0A:6A0 {08:6B8 {18:6D0} - 08:6E8 {18:700}} - 0A:718 {08:730 {18:748} - 08:760 {18:778}} - } - 0A:790 {08:7A8 {18:7C0} - 08:7D8 {18:7F0}} - } - 0D:808} -- - -superheading: 0xB8 -0x820 00000004 050000D0 00000000 00000000 - -position: 0xD0 complete body -0x830 00000000 00000000 00000000 0001 0005 FFFF FFFF 050000E8 439FB526 - 0 0 0 - 319.415222 - -position: 0xE8 complete right leg -0x84C C2BD40D3 C2D455B8 00000000 000B 0006 FFFF FFFF 05000100 43F16463 - -94.626610 -106.167419 0 - 482.784271 - -position: 0x100 right foot+right shin -0x868 C3E0BD2F C102FE8A 00000000 000D 0007 0009 FFFF 05000118 43FC7B17 - -449.477997 -8.187143 0 - 504.961639 - -position: 0x118 right leg -0x884 C3F1CD0B C0AEBA1D 00000000 000F 0008 FFFF FFFF 00000000 434CE4F4 - -483.601898 -5.460219 0 - 204.894348 - -dimentions: 0x130 right foot -0x8A0 00000004 - C2CA0000 40400000 - C2600000 42960000 - C29C0000 432F0000 - -point display struct: 0x148 right foot -0xA58 05005ED8 00000000 050008C0 000C 000C 05000980 05000A40 0003 0000 00000000 - mapping @ 0x5ED8 - normal point table @ 0x8C0; C normal points - collision point table @ 0x980; C collision points - point usage table @ 0xA40 - -dimentions: 0x160 right shin -0xA78 00000005 - C3F88000 41F80000 - C2A60000 429E0000 - C2B20000 42AE0000 - -distance: 0x178 -0xA94 00000000 4647B000 05000190 00000000 - -point display struct: 0x190 right shin -0xF84 05005F48 00000000 05000AA8 002E 001A 05000D88 05000F28 0003 0000 00000000 - mapping @ 0x5F48 - normal point table @ 0xAA8; 2E normal points - collision point table @ 0xD88; 1A collision points - point usage table @ 0xF28 - -distance: 0x1A8 -0xFA4 4647B000 4DCB21F4 050001C0 00000000 - -point display struct: 0x1C0 right shin (distance) -0x10EC 05006030 00000000 05000FB8 000A 0008 05001058 050010D8 0003 0000 00000000 - mapping @ 0x6030 - normal point table @ 0xFB8; A normal points - collision point table @ 0x1058; 8 collision points - point usage table @ 0x10D8 - -dimentions: 0x1D8 -0x110C 00000006 - C3ED0000 42BE0000 - C2BE0000 429C0000 - C2C40000 42FC0000 - -distance: 0x1F0 -0x1128 00000000 4647B000 05000208 00000000 - -point display struct: 0x208 right leg -0x1794 05006098 00000000 05001138 003E 0020 05001518 05001718 0003 0000 00000000 - mapping @ 0x6098 - normal point table @ 0x1138; 3E normal points - collision point table @ 0x1518; 20 collision points - point usage table @ 0x1718 - -distance: 0x220 -0x17B4 4647B000 4DCB21F4 05000238 00000000 - -point display struct: 0x238 right leg (distance) -0x1944 050061D8 00000000 050017C8 000E 0008 050018A8 05001928 0003 0000 00000000 - mapping @ 0x61D8 - normal point table @ 0x17C8; E normal points - collision point table @ 0x18A8; 8 collision points - point usage table @ 0x1928 - -position: 0x250 -0x1964 42CAFE38 C2CF8EF7 00000000 000A 000A FFFF FFFF 05000268 43F2C96D - 101.496521 -103.779228 0 - 485.573639 - -position: 0x268 -0x1980 43D9E04D C154FE48 00000000 000C 000B 000D FFFF 05000280 44024CC0 - 435.752350 -13.312080 0 - 521.199219 - -position: 0x280 -0x199C 43F8EC2F C08F40CF 00000000 000E 000C FFFF FFFF 00000000 434E1293 - 497.845184 -4.476661 0 - 206.072556 - -dimentions: 0x298 -0x19B8 00000001 - BF800000 42CC0000 - C2640000 42960000 - C29C0000 432F0000 - -point display struct: 0x2B0 left foot -0x1B70 05006240 00000000 050019D8 000C 000C 05001A98 05001B58 0003 0000 00000000 - mapping @ 0x6240 - normal point table @ 0x19D8; C normal points - collision point table @ 0x1A98; C collision points - point usage table @ 0x1B58 - -dimentions: 0x2C8 -0x1B90 00000002 - C1700000 44004000 - C2AE0000 429A0000 - C2B20000 42AE0000 - -distance: 0x2E0 -0x1BAC 00000000 4647B000 050002F8 00000000 - -point display struct: 0x2F8 left shin -0x20C0 050062B0 00000000 05001BC0 0030 001A 05001EC0 05002060 0003 0000 00000000 - mapping @ 0x62B0 - normal point table @ 0x1BC0; 30 normal points - collision point table @ 0x1EC0; 1A collision points - point usage table @ 0x2060 - -distance: 0x310 -0x20E0 4647B000 4DCB21F4 05000328 00000000 - -point display struct: 0x328 left shin (distance) -0x2224 05006398 00000000 050020F0 000A 0008 05002190 05002210 0003 0000 00000000 - mapping @ 0x6398 - normal point table @ 0x20F0; A normal points - collision point table @ 0x2190; 8 collision points - point usage table @ 0x2210 - -dimentions: 0x340 -0x2244 00000003 - C2CC0000 43EE0000 - C2CC0000 429E0000 - C2C40000 42FC0000 - -distance: 0x358 -0x2260 00000000 4647B000 05000370 00000000 - -point display struct: 0x370 left leg -0x2914 05006400 00000000 05002270 0042 0020 05002690 05002890 0003 0000 00000000 - mapping @ 0x6400 - normal point table @ 0x2270; 42 normal points - collision point table @ 0x2690; 20 collision points - point usage table @ 0x2890 - -distance: 0x388 -0x2934 4647B000 4DCB21F4 050003A0 00000000 - -point display struct: 0x3A0 left leg (distance) -0x2AC4 05006538 00000000 05002948 000E 0008 05002A28 05002AA8 0003 0000 00000000 - mapping @ 0x6538 - normal point table @ 0x2948; E normal points - collision point table @ 0x2A28; 8 collision points - point usage table @ 0x2AA8 - -position: 0x3B8 -0x2AE4 3F9D6367 427824EC 00000000 0002 0001 0014 FFFF 050003D0 43E3A383 - 1.229596 62.036057 0 - 455.277435 - -position: 0x3D0 -0x2B00 C02A90A3 43EBEEA3 00000000 0003 0000 FFFF FFFF 00000000 435474E2 - -2.665078 471.864349 0 - 212.456573 - -dimentions: 0x3E8 -0x2B1C 00000008 - C2A00000 42A20000 - C2DE0000 432C0000 - C29E0000 43090000 - -head placement: 0x400 -0x2B38 C076F8D7 C28EE1D4 433BF051 3E56C615 C19FA475 C0EE3F98 05000418 05000430 00000000 -//ties to 0x418(type 17) and 0x430 (type 18 display list - front collar) - -offset to head: 0x418 -0x2B5C 00000000 - -point display struct: 0x430 front collar -0x2E0C 050065A0 00000000 05002B60 0016 0012 05002CC0 05002DE0 0003 0000 00000000 - mapping @ 0x65A0 - normal point table @ 0x2B60; 16 normal points - collision point table @ 0x2CC0; 12 collision points - point usage table @ 0x2DE0 - -position: 0x448 -0x2E2C 4353B63D 43880BD6 00000000 0004 0002 FFFF FFFF 05000460 43787589 - 211.711868 272.092468 0 - 248.459122 - -position: 0x460 -0x2E48 435A1BA3 428594A7 4107070C 0006 000E 0010 FFFF 05000478 43887949 - 218.107956 66.790337 8.439220 - 272.947540 - -position: 0x478 -0x2E64 437ACDBB 3E82AEB0 40F1F6FF 0008 000F FFFF FFFF 00000000 430F0027 - 250.803635 0.255239 7.561401 - 143.000595 - -dimentions: 0x490 -0x2E80 00000009 - 41100000 43020000 - C2040000 42480000 - C2540000 424C0000 - -point display struct: 0x4A8 right hand -0x30F0 05006650 00000000 05002EA0 0018 000A 05003020 050030C0 0003 0000 00000000 - mapping @ 0x6650 - normal point table @ 0x2EA0; 18 normal points - collision point table @ 0x3020; A collision points - point usage table @ 0x30C0 - -dimentions: 0x4C0 -0x3110 0000000A - C0E00000 43868000 - C2A00000 42300000 - C25C0000 42A60000 - -distance: 0x4D8 -0x312C 00000000 4647B000 050004F0 00000000 - -point display struct: 0x4F0 right forearm -0x356C 050066F8 00000000 05003140 0026 0018 050033A0 05003520 0003 0000 00000000 - mapping @ 0x66F8 - normal point table @ 0x3140; 26 normal points - collision point table @ 0x33A0; 18 collision points - point usage table @ 0x3520 - -distance: 0x508 -0x358C 4647B000 4DCB21F4 05000520 00000000 - -point display struct: 0x520 right forearm (distance) -0x36B0 050067E8 00000000 050035A0 0008 0008 05003620 050036A0 0003 0000 00000000 - mapping @ 0x67E8 - normal point table @ 0x35A0; 8 normal points - collision point table @ 0x3620; 8 collision points - point usage table @ 0x36A0 - -dimentions: 0x538 -0x36D0 0000000B - C2EA0000 435C0000 - C2340000 42E20000 - C2640000 42B60000 - -distance: 0x550 -0x36EC 00000000 4647B000 05000568 00000000 - -point display struct: 0x568 right arm -0x3AB4 05006850 00000000 05003700 0021 0016 05003910 05003A70 0003 0000 00000000 - mapping @ 0x6850 - normal point table @ 0x3700; 21 normal points - collision point table @ 0x3910; 16 collision points - point usage table @ 0x3A70 - -distance: 0x580 -0x3AD4 4647B000 4DCB21F4 05000598 00000000 - -point display struct: 0x598 right arm (distance) -0x3C1C 05006920 00000000 05003AE8 000A 0008 05003B88 05003C08 0003 0000 00000000 - -position: 0x5B0 -0x3C3C C348FD21 438AD798 00000000 0005 0003 FFFF FFFF 050005C8 4380E125 - -200.988785 277.684326 0 - 257.758942 - - -position: 0x5C8 -0x3C58 C35E742B 4274E7D1 00000000 0007 0011 0013 FFFF 050005E0 438B53D1 - -222.453781 61.226383 0 - 278.654816 - -position: 0x5E0 -0x3C74 C38411CD 3FAEB13E 00000000 0009 0012 FFFF FFFF 00000000 4306DABA - -264.139069 1.364784 0 - 134.854401 - -dimentions: 0x5F8 -0x3C90 0000000C - C2EE0000 3F800000 - C1E80000 42580000 - C2380000 42680000 - -point display struct: 0x610 left hand -0x3F00 05006988 00000000 05003CB0 0018 000A 05003E30 05003ED0 0003 0000 00000000 - mapping @ 0x6988 - normal point table @ 0x3CB0; 18 normal points - collision point table @ 0x3E30; A collision points - point usage table @ 0x3ED0 - -dimentions: 0x628 -0x3F20 0000000D - C3890000 40000000 - C2900000 42500000 - C2440000 42B20000 - -distance: 0x640 -0x3F3C 00000000 4647B000 05000658 00000000 - -point display struct: 0x658 left forearm -0x437C 05006A30 00000000 05003F50 0026 0018 050041B0 05004330 0003 0000 00000000 - mapping @ 0x6A30 - normal point table @ 0x3F50; 26 normal points - collision point table @ 0x41B0; 18 collision points - point usage table @ 0x4330 - -distance: 0x670 -0x439C 4647B000 4DCB21F4 05000688 00000000 - -point display struct: 0x688 left forearm (distance) -0x44C0 05006B20 00000000 050043B0 0008 0008 05004430 050044B0 0003 0000 00000000 - mapping @ 0x6B20 - normal point table @ 0x43B0; 8 normal points - collision point table @ 0x4430; 8 collision points - point usage table @ 0x44B0 - -dimentions: 0x6A0 -0x44E0 0000000E - C3600000 42E00000 - C24C0000 42D40000 - C2600000 42B20000 - -distance: 0x6B8 -0x44FC 00000000 4647B000 050006D0 00000000 - -point display struct: 0x6D0 left arm -0x48C4 05006B88 00000000 05004510 0021 0016 05004720 05004880 0003 0000 00000000 - mapping @ 0x6B88 - normal point table @ 0x4510; 21 normal points - collision point table @ 0x4720; 16 collision points - point usage table @ 0x4880 - -distance: 0x6E8 -0x48E4 4647B000 4DCB21F4 05000700 00000000 - -point display struct: 0x700 left arm (distance) -0x4A2C 05006C58 00000000 050048F8 000A 0008 05004998 05004A18 0003 0000 00000000 - mapping @ 0x6C58 - normal point table @ 0x48F8; A normal points - collision point table @ 0x4998; 8 collision points - point usage table @ 0x4A18 - -dimentions: 0x718 -0x4A4C 0000000F - C3510000 43520000 - C1F80000 43D38000 - C2C80000 43140000 - -distance: 0x730 -0x4A68 00000000 4647B000 05000748 00000000 - -point display struct: 0x748 chest -0x541C 05006CC0 00000000 05004A78 0062 002C 05005098 05005358 0003 0000 00000000 - mapping @ 0x6CC0 - normal point table @ 0x4A78; 62 normal points - collision point table @ 0x5098; 2C collision points - point usage table @ 0x5358 - -distance: 0x760 -0x543C 4647B000 4DCB21F4 05000778 00000000 - -point display struct: 0x778 chest (distance) -0x56B8 05006E20 00000000 05005450 001B 0008 05005600 05005680 0003 0000 00000000 - mapping @ 0x6E20 - normal point table @ 0x5450; 1B normal points - collision point table @ 0x5600; 8 collision points - point usage table @ 0x5680 - -dimentions: 0x790 -0x56D8 00000007 - C33F0000 433C0000 - C3710000 42B40000 - C2BC0000 430F0000 - -distance: 0x7A8 -0x56F4 00000000 4647B000 050007C0 00000000 - -point display struct: 0x7C0 waist -0x5C48 05006EA0 00000000 05005708 0030 001E 05005A08 05005BE8 0003 0000 00000000 - mapping @ 0x6EA0 - normal point table @ 0x5708; 30 normal points - collision point table @ 0x5A08; 1E collision points - point usage table @ 0x5BE8 - -distance: 0x7D8 -0x5C68 4647B000 4DCB21F4 050007F0 00000000 - -point display struct: 0x7F0 waist (distance) -0x5E98 05006F98 00000000 05005C78 0017 0008 05005DE8 05005E68 0003 0000 00000000 - mapping @ 0x6F98 - normal point table @ 0x5C78; 17 normal points - collision point table @ 0x5DE8; 8 collision points - point usage table @ 0x5E68 - -shadow: 0x808 -0x5EB8 40600000 42000000 43CC4000 43D90000 050000AC 050000B8 441500A8 00000000 - 3.5 32 - 408.5 434 - image @ 0xAC - main model directory heading @ 0xB8 (target) - 596.010254 - ------------------- -01 superheading 4 -02 position call 1,5 link position Character - shadow - -02 position call B,6 link position Right Leg 01 used to indicate one of five major commands - position call D,7,9 link position R.foot+shin - dimentions 4 R.foot - dimentions 5 R.shin (+distance) - position call F,8 no linkage R.leg - dimentions 6 R.leg (+distance) - -02 position call A,A link position Left Leg 01 used to indicate one of five major commands - position call C,B,D link position L.foot+shin - dimentions 1 L.foot - dimentions 2 L.shin (+distance) - position call E,C no linkage L.leg - dimentions 3 L.leg (+distance) - -02 position call 2,1,14 link position Upper Body 01 used to indicate one of five major commands - dimentions F chest (+distance) - dimentions 7 waist (+distance) - position call 3,0 no linkage Head and Collar - dimentions 8 head and collar - -02 position call 4,2 link position Right Arm 01 used to indicate one of five major commands - position call 6,E,10 link position R.hand+forearm - dimentions 9 R.hand - dimentions A R.forearm (+distance) - position call 8,F no linkage R.arm - dimentions B R.arm (+distance) - -02 position call 5,3 link position Left Arm 01 used to indicate one of five major commands - position call 7,11,13 link position L.hand+forearm - dimentions C L.hand - dimentions D L.forearm (+distance) - position call 9,12 no linkage L.arm - dimentions E L.arm (+distance) - diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/Gppk stuff.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/Gppk stuff.txt deleted file mode 100644 index 2377733..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/Gppk stuff.txt +++ /dev/null @@ -1,20 +0,0 @@ -0x180 large square plane, probably for flash effect or similar -0x198 same plane as 0x180, but mirrored -0x1E0 barrel, or at least something perfectly round -0x270 trigger guard -0x2B8 index finger for trigger -0x2E8 plane intersecting 0x180, possibly for the flash emanating from gun -0x318 fingers, connected to 0x468 -0x330 grip of gun -0x390 tip of middle finger -0x3A8 tip of ring finger -0x3C0 tip of pinky finger -0x408 thumb -0x420 lower half of gun case -0x468 upper section of hand, wrapped around the grip -0x4B0 arm, leading to hand (0x468) -0x4C8 funny triangular bit, connecting gun case to grip -0x510 trigger (I think...) -0x558 top sliding part (upper) -0x570 top sliding part (lower) -0x588 notch on back of sliding part \ No newline at end of file diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/PwalletbondZ.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/PwalletbondZ.txt deleted file mode 100644 index 8fadf45..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Sample Parsings/PwalletbondZ.txt +++ /dev/null @@ -1,590 +0,0 @@ -header: -00000000 8003A170 00000000 002B0001 -455B087B 00000054 00000000 00000000 - 84 images; 1 object - 43 offsets - -offsets: (43) -0x0 050004E4 //0 handle for tabs on side of folder -0x4 05000514 //1 handle for basic folder -0x8 050005D4 //2 handle for FOR YOUR EYES ONLY -0xC 05000604 //3 handle for OHMSS -0x10 05000634 //4 handle for CONFIDENTIAL - briefing -0x14 05000664 //5 handle for CONFIDENTIAL - multi -0x18 05000694 //6 handle for CLASSIFIED -0x1C 050006C4 //7 handle to shadow beneath character image -0x20 050006F4 //8 handle for 1st selected file image (Brosnan) -0x24 05000724 //9 handle for 2st selected file image (Connery) -0x28 05000754 //A handle for 3st selected file image (Moore) -0x2C 05000784 //B handle for 4st selected file image (Dalton) -0x30 050007CC //C handle to shadow beneath briefing image -0x34 05000BD4 //D handle to main folder select screen -0x38 05000C04 //E handle to shadow beneath slot selection pic -0x3C 05000C34 //F handle for 1st slot selection pic (Brosnan) -0x40 05000C64 //10 handle for 2st slot selection pic (Connery) -0x44 05000C94 //11 handle for 3st slot selection pic (Moore) -0x48 05000CC4 //12 handle for 4st slot selection pic (Dalton) -0x4C 05000574 //13 handle for solo stage select -0x50 050005A4 //14 handle to solo selection table (stage imgs) -0x54 050005BC //15 solo selection table (stage imgs) -0x58 050007FC //16 handle for Dam briefing image -0x5C 0500082C //17 handle for Facility briefing image -0x60 0500085C //18 handle for Runway briefing image -0x64 0500088C //19 handle for Surface I briefing image -0x68 050008BC //1A handle for Bunker I briefing image -0x6C 050008EC //1B handle for Silo briefing image -0x70 0500091C //1C handle for Frigate briefing image -0x74 0500094C //1D handle for Surface II briefing image -0x78 0500097C //1E handle for Bunker II briefing image -0x7C 050009AC //1F handle for Statue briefing image -0x80 050009DC //20 handle for Archives briefing image -0x84 05000A0C //21 handle for Streets briefing image -0x88 05000A3C //22 handle for Depot briefing image -0x8C 05000A6C //23 handle for Train briefing image -0x90 05000A9C //24 handle for Jungle briefing image -0x94 05000ACC //25 handle for Control briefing image -0x98 05000AFC //26 handle for Caverns briefing image -0x9C 05000B2C //27 handle for Cradle briefing image -0xA0 05000B5C //28 handle for Aztec briefing image -0xA4 05000B8C //29 handle for Egypt briefing image -0xA8 05000544 //2A handle to secondary folder (multi, cheats, briefings) - -images: (84) -0xAC 00000A26 41410700 00020200 //coat of arms - upper left -0xB8 00000A27 41410700 00020200 //coat of arms - upper right -0xC4 00000A28 41410700 00020200 //coat of arms - lower left -0xD0 00000A29 41410700 00020200 //coat of arms - lower right -0xDC 000003F6 20400700 01020200 //paperclip -0xE8 00000A2A 41410700 00020200 //Brosnan - upper left -0xF4 00000A2B 41410700 00020200 //Brosnan - upper right -0x100 00000A2C 41410700 00020200 //Brosnan - lower left -0x10C 00000A2D 41410700 00020200 //Brosnan - lower right -0x118 00000A43 5F200300 01020200 //OHMSS - left half -0x124 00000A42 40400700 00000000 //dark manilla texture -0x130 00000A45 40400700 00000000 //light manilla texture -0x13C 00000A46 40400700 00020200 //coat of arms on manilla -0x148 00000A40 5F200300 01020200 //FOR - -0x154 00000A3E 5F200300 01020200 //- EYES- -0x160 00000A3F 5F200400 01020200 //- ONLY -0x16C 00000A41 5F200400 01020200 //-YOUR- -0x178 000004FD 20200600 02020200 //shadow of paper -0x184 00000A44 5F200400 01020200 //OHMSS - right half -0x190 00000A3C 5F200300 01020200 //CONFIDENTIAL - left half -0x19C 00000A3D 5F200400 01020200 //CONFIDENTIAL - right half -0x1A8 00000A3A 5F200300 01020200 //CLASSIFIED - left half -0x1B4 00000A3B 5F200400 01020200 //CLASSIFIED - right half -0x1C0 00000A47 10100000 01000000 //filmstrip -0x1CC 000009EA 80400000 00020200 //Archives briefing - top -0x1D8 000009F8 80400000 00020200 //Dam briefing - top -0x1E4 000009F9 80400000 00020200 //Dam briefing - bottom -0x1F0 000009EB 80400000 00020200 //Archives briefing - bottom -0x1FC 000009F0 80400000 00020200 //Aztec briefing - top -0x208 000009F1 80400000 00020200 //Aztec briefing - bottom -0x214 000009F2 80400000 00020200 //Caverns briefing - top -0x220 000009F3 80400000 00020200 //Caverns briefing - bottom -0x22C 000009F4 80400000 00020200 //Cradle briefing - top -0x238 000009F5 80400000 00020200 //Cradle briefing - bottom -0x244 000009F6 80400000 00020200 //Egyptian briefing - top -0x250 000009F7 80400000 00020200 //Egyptian briefing - bottom -0x25C 000009FA 80400000 00020200 //Depot briefing - top -0x268 000009FB 80400000 00020200 //Depot briefing - bottom -0x274 000009FC 80400000 00020200 //Frigate briefing - top -0x280 000009FD 80400000 00020200 //Frigate briefing - bottom -0x28C 000009FE 80400000 00020200 //Jungle briefing - top -0x298 000009FF 80400000 00020200 //Jungle briefing - bottom -0x2A4 00000A00 80400000 00020200 //Streets briefing - top -0x2B0 00000A01 80400000 00020200 //Streets briefing - bottom -0x2BC 00000A02 80400000 00020200 //Runway briefing - top -0x2C8 00000A03 80400000 00020200 //Runway briefing - bottom -0x2D4 00000A04 80400000 00020200 //Bunker I briefing - top -0x2E0 00000A05 80400000 00020200 //Bunker I briefing - bottom -0x2EC 00000A06 80400000 00020200 //Bunker II briefing - top -0x2F8 00000A07 80400000 00020200 //Bunker II briefing - bottom -0x304 00000A08 80400000 00020200 //Surface I briefing - top -0x310 00000A09 80400000 00020200 //Surface I briefing - bottom -0x31C 00000A0A 80400000 00020200 //Surface II briefing - top -0x328 00000A0B 80400000 00020200 //Surface II briefing - bottom -0x334 00000A0C 80400000 00020200 //Silo briefing - top -0x340 00000A0D 80400000 00020200 //Silo briefing - bottom -0x34C 00000A0E 80400000 00020200 //Statue briefing - top -0x358 00000A0F 80400000 00020200 //Statue briefing - bottom -0x364 00000A10 80400000 00020200 //Train briefing - top -0x370 00000A11 80400000 00020200 //Train briefing - bottom -0x37C 000009EE 80400000 00020200 //Facility briefing - top -0x388 000009EF 80400000 00020200 //Facility briefing - bottom -0x394 000009EC 80400000 00020200 //Control briefing - top -0x3A0 000009ED 80400000 00020200 //Control briefing - bottom -0x3AC 00000A12 442C0000 01020200 //Archives stage select -0x3B8 00000A13 442C0000 01020200 //Control stage select -0x3C4 00000A14 442C0000 01020200 //Facility stage select -0x3D0 00000A15 442C0000 01020200 //Aztec stage select -0x3DC 00000A16 442C0000 01020200 //Caverns stage select -0x3E8 00000A17 442C0000 01020200 //Cradle stage select -0x3F4 00000A18 442C0000 01020200 //Egyptian stage select -0x400 00000A19 442C0000 01020200 //Dam stage select -0x40C 00000A1A 442C0000 01020200 //Depot stage select -0x418 00000A1B 442C0000 01020200 //Frigate stage select -0x424 00000A1C 442C0000 01020200 //Jungle stage select -0x430 00000A1D 442C0000 01020200 //Streets stage select -0x43C 00000A1E 442C0000 01020200 //Runway stage select -0x448 00000A1F 442C0000 01020200 //Bunker I stage select -0x454 00000A20 442C0000 01020200 //Bunker II stage select -0x460 00000A21 442C0000 01020200 //Surface I stage select -0x46C 00000A22 442C0000 01020200 //Surface II stage select -0x478 00000A23 442C0000 01020200 //Silo stage select -0x484 00000A24 442C0000 01020200 //Statue stage select -0x490 00000A25 442C0000 01020200 //Train stage select - -Table: -0x49C 00020000 05000D0C 00000000 00000000 00000000 050004B4 -0x4B4 000A0000 05000D28 0500049C 00000000 00000000 050004CC -0x4CC 00040000 05000DC8 050004B4 050004E4 00000000 00000000 -0x4E4 00120000 05000DDC 050004B4 05000514 050004CC 050004FC -0x4FC 00040000 05000F28 050004E4 00000000 00000000 00000000 -0x514 00120000 05000F3C 050004B4 05000544 050004E4 0500052C -0x52C 00040000 05001098 05000514 00000000 00000000 00000000 -0x544 00120000 050010AC 050004B4 05000574 05000514 0500055C -0x55C 00040000 05001158 05000544 00000000 00000000 00000000 -0x574 00120000 0500116C 050004B4 050005D4 05000544 0500058C -0x58C 00040000 05001F28 05000574 050005A4 00000000 00000000 -0x5A4 00120000 05001F3C 05000574 00000000 0500058C 050005BC -0x5BC 00180000 050029E8 050005A4 00000000 00000000 00000000 -0x5D4 00120000 05002A08 050004B4 05000604 05000574 050005EC -0x5EC 00040000 05002B10 050005D4 00000000 00000000 00000000 -0x604 00120000 05002B24 050004B4 05000634 050005D4 0500061C -0x61C 00040000 05002BB0 05000604 00000000 00000000 00000000 -0x634 00120000 05002BC4 050004B4 05000664 05000604 0500064C -0x64C 00040000 05002C50 05000634 00000000 00000000 00000000 -0x664 00120000 05002C64 050004B4 05000694 05000634 0500067C -0x67C 00040000 05002CF0 05000664 00000000 00000000 00000000 -0x694 00120000 05002D04 050004B4 050006C4 05000664 050006AC -0x6AC 00040000 05002D90 05000694 00000000 00000000 00000000 -0x6C4 00120000 05002DA4 050004B4 050007CC 05000694 050006DC -0x6DC 00040000 05002E20 050006C4 050006F4 00000000 00000000 -0x6F4 00120000 05002E34 050006C4 05000724 050006DC 0500070C -0x70C 00040000 05002F40 050006F4 00000000 00000000 00000000 -0x724 00120000 05002F54 050006C4 05000754 050006F4 0500073C -0x73C 00040000 05003060 05000724 00000000 00000000 00000000 -0x754 00120000 05003074 050006C4 05000784 05000724 0500076C -0x76C 00040000 05003180 05000754 00000000 00000000 00000000 -0x784 00120000 05003194 050006C4 050007B4 05000754 0500079C -0x79C 00040000 050032A0 05000784 00000000 00000000 00000000 -0x7B4 00040000 050032F8 050006C4 00000000 05000784 00000000 -0x7CC 00120000 0500330C 050004B4 05000BD4 050006C4 050007E4 -0x7E4 00040000 05003388 050007CC 050007FC 00000000 00000000 -0x7FC 00120000 0500339C 050007CC 0500082C 050007E4 05000814 -0x814 00040000 05003428 050007FC 00000000 00000000 00000000 -0x82C 00120000 0500343C 050007CC 0500085C 050007FC 05000844 -0x844 00040000 050034C8 0500082C 00000000 00000000 00000000 -0x85C 00120000 050034DC 050007CC 0500088C 0500082C 05000874 -0x874 00040000 05003568 0500085C 00000000 00000000 00000000 -0x88C 00120000 0500357C 050007CC 050008BC 0500085C 050008A4 -0x8A4 00040000 05003608 0500088C 00000000 00000000 00000000 -0x8BC 00120000 0500361C 050007CC 050008EC 0500088C 050008D4 -0x8D4 00040000 050036A8 050008BC 00000000 00000000 00000000 -0x8EC 00120000 050036BC 050007CC 0500091C 050008BC 05000904 -0x904 00040000 05003748 050008EC 00000000 00000000 00000000 -0x91C 00120000 0500375C 050007CC 0500094C 050008EC 05000934 -0x934 00040000 050037E8 0500091C 00000000 00000000 00000000 -0x94C 00120000 050037FC 050007CC 0500097C 0500091C 05000964 -0x964 00040000 05003888 0500094C 00000000 00000000 00000000 -0x97C 00120000 0500389C 050007CC 050009AC 0500094C 05000994 -0x994 00040000 05003928 0500097C 00000000 00000000 00000000 -0x9AC 00120000 0500393C 050007CC 050009DC 0500097C 050009C4 -0x9C4 00040000 050039C8 050009AC 00000000 00000000 00000000 -0x9DC 00120000 050039DC 050007CC 05000A0C 050009AC 050009F4 -0x9F4 00040000 05003A68 050009DC 00000000 00000000 00000000 -0xA0C 00120000 05003A7C 050007CC 05000A3C 050009DC 05000A24 -0xA24 00040000 05003B08 05000A0C 00000000 00000000 00000000 -0xA3C 00120000 05003B1C 050007CC 05000A6C 05000A0C 05000A54 -0xA54 00040000 05003BA8 05000A3C 00000000 00000000 00000000 -0xA6C 00120000 05003BBC 050007CC 05000A9C 05000A3C 05000A84 -0xA84 00040000 05003C48 05000A6C 00000000 00000000 00000000 -0xA9C 00120000 05003C5C 050007CC 05000ACC 05000A6C 05000AB4 -0xAB4 00040000 05003CE8 05000A9C 00000000 00000000 00000000 -0xACC 00120000 05003CFC 050007CC 05000AFC 05000A9C 05000AE4 -0xAE4 00040000 05003D88 05000ACC 00000000 00000000 00000000 -0xAFC 00120000 05003D9C 050007CC 05000B2C 05000ACC 05000B14 -0xB14 00040000 05003E28 05000AFC 00000000 00000000 00000000 -0xB2C 00120000 05003E3C 050007CC 05000B5C 05000AFC 05000B44 -0xB44 00040000 05003EC8 05000B2C 00000000 00000000 00000000 -0xB5C 00120000 05003EDC 050007CC 05000B8C 05000B2C 05000B74 -0xB74 00040000 05003F68 05000B5C 00000000 00000000 00000000 -0xB8C 00120000 05003F7C 050007CC 05000BBC 05000B5C 05000BA4 -0xBA4 00040000 05004008 05000B8C 00000000 00000000 00000000 -0xBBC 00040000 05004060 050007CC 00000000 05000B8C 00000000 -0xBD4 00120000 05004074 050004B4 00000000 050007CC 05000BEC -0xBEC 00040000 050042E0 05000BD4 05000C04 00000000 00000000 -0xC04 00120000 050042F4 05000BD4 00000000 05000BEC 05000C1C -0xC1C 00040000 05004370 05000C04 05000C34 00000000 00000000 -0xC34 00120000 05004384 05000C04 05000C64 05000C1C 05000C4C -0xC4C 00040000 05004490 05000C34 00000000 00000000 00000000 -0xC64 00120000 050044A4 05000C04 05000C94 05000C34 05000C7C -0xC7C 00040000 050045B0 05000C64 00000000 00000000 00000000 -0xC94 00120000 050045C4 05000C04 05000CC4 05000C64 05000CAC -0xCAC 00040000 050046D0 05000C94 00000000 00000000 00000000 -0xCC4 00120000 050046E4 05000C04 05000CF4 05000C94 05000CDC -0xCDC 00040000 050047F0 05000CC4 00000000 00000000 00000000 -0xCF4 00040000 05004848 05000C04 00000000 05000CC4 00000000 - - 2:49C{ A:4B4{ 4:4CC - 12:4E4{ 4:4FC} - 12:514{ 4:52C} - 12:544{ 4:55C} - 12:574{ 4:58C - 12:5A4{ 18:5BC}} - 12:5D4{ 4:5EC} - 12:604{ 4:61C} - 12:634{ 4:64C} - 12:664{ 4:67C} - 12:694{ 4:6AC} - 12:6C4{ 4:6DC - 12:6F4{ 4:70C} - 12:724{ 4:73C} - 12:754{ 4:76C} - 12:784{ 4:79C} - 4:7B4} - 12:7CC{ 4:7E4 - 12:7FC{ 4:814} - 12:82C{ 4:844} - 12:85C{ 4:874} - 12:88C{ 4:8A4} - 12:8BC{ 4:8D4} - 12:8EC{ 4:904} - 12:91C{ 4:934} - 12:94C{ 4:964} - 12:97C{ 4:994} - 12:9AC{ 4:9C4} - 12:9DC{ 4:9F4} - 12:A0C{ 4:A24} - 12:A3C{ 4:A54} - 12:A6C{ 4:A84} - 12:A9C{ 4:AB4} - 12:ACC{ 4:AE4} - 12:AFC{ 4:B14} - 12:B2C{ 4:B44} - 12:B5C{ 4:B7C} - 12:B8C{ 4:BA4} - 4:BBC} - 12:BD4{ 4:BEC - 12:C04{ 4:C1C - 12:C34{ 4:C4C} - 12:C64{ 4:C7C} - 12:C94{ 4:CAC} - 12:CC4{ 4:CDC} - 4:CF4}}}} - -0xD0C 02 position (0x49C) - C364EBBF 4340F1B8 C2480000 0000 0000 FFFF FFFF 00000000 455B087B - -0xD28 0A dimentions (0x4B4) - 00000001 - C50C0000 450C0000 - C5285000 45285000 - C2C80000 42C80000 - -0xDC8 04 display list (0x4CC) [dark manilla backdrop] - 05004860 00000000 0000 0000 05000D48 0008 0000 - point table @ 0xD48; 8 points - display list @ 0x4860 - -0xDDC 12 handle (0x4E4) - 050004FC 00000000 - -0xF28 04 display list (0x4FC) [tabs on side of folders] - 050048D8 00000000 00000000 05000DE8 0014 0000 - point table @ 0xDE8; 20 points - display list @ 0x48D8 - -0xF3C 12 handle (0x514) - 0500052C 00000000 - -0x1098 04 display list (0x52C) [basic folder] - 05004968 00000000 00000000 05000F48 0015 0000 - point table @ 0x; points - display list @ 0x - -0x10AC 12 handle (0x544) - 0500055C 00000000 - -0x1158 04 display list (0x5CC) [secondary folder - cheats, multi, briefings] - point table @ 0x; points - display list @ 0x - -0x116C 12 handle (0x574) - -0x1F28 04 display list (0x58C) [solo stage select] - 05004AC8 00000000 00000000 05001178 00DB 0000 - point table @ 0x1178; 219 points - display list @ 0x4AC8 - -0x1F3C 12 handle (0x5A4) - -0x29E8 18 display list (0x5BC) [selection table with stage images] - 05004FE0 00000000 05001F48 0050 0050 05002448 05002948 0000 0000 - point table @ 0x1F48; 80 points - collision point table @ 0x2448; 80 points - point usage table @ 0x2948 - display list @ 0x4FE0 - -0x2A08 12 handle (0x5D4) - 050005EC 00000000 - -0x2B10 04 display list (0x5EC) [FOR YOUR EYES ONLY] - point table @ 0x; points - display list @ 0x - -0x2B24 12 handle (0x604) - -0x2BB0 04 display list (0x61C) [OHMSS] - point table @ 0x; points - display list @ 0x - -0x2BC4 12 handle (0x634) - -0x2C50 04 display list (0x64C) [briefing CONFIDENTIAL] - point table @ 0x; points - display list @ 0x - -0x2C64 12 handle (0x664) - -0x2CF0 04 display list (0x67C) [multi CONFIDENTIAL] - point table @ 0x; points - display list @ 0x - -0x2D04 12 handle (0x694) - -0x2D90 04 display list (0x6AC) [CLASSIFIED] - 050053E0 00000000 00000000 05002D10 0008 0000 - point table @ 0x2D10; 8 points - display list @ 0x53E0 - -0x2DA4 12 handle (0x6C4) - 050006DC 00000000 - -0x2E20 04 display list (0x6DC) [shadow under character image] - 05005468 00000000 00000000 05002DB0 0007 0000 - point table @ 0x2DB0; 7 points - display list @ 0x5468 - -0x2E34 12 handle (0x6F4) - 0500070C 00000000 - -0x2F40 04 display list (0x70C) [selected file 1 character image] - 050054D8 00000000 00000000 05002E40 0010 0000 - point table @ 0x2E40; 16 points - display list @ 0x54D8 - -0x2F54 12 handle (0x724) - 0500073C 00000000 - -0x3060 04 display list (0x73C) [selected file 2 character image] - 05005578 00000000 00000000 05002F60 0010 0000 - point table @ 0x2F60; 16 points - display list @ 0x5578 - -0x3074 12 handle (0x754) - 0500076C 00000000 - -0x3180 04 display list (0x76C) [selected file 3 character image] - 05005618 00000000 00000000 05003080 0010 0000 - point table @ 0x3080; 16 points - display list @ 0x5618 - -0x3194 12 handle (0x784) - 0500079C 00000000 - -0x32A0 04 display list (0x79C) [selected file 4 character image] - 050056B8 00000000 00000000 050031A0 0010 0000 - point table @ 0x31A0; 16 points - display list @ 0x56B8 - -0x32F8 04 display list (0x7B4) [paperclip] - 05005758 00000000 00000000 050032B8 0004 0000 - point table @ 0x32B8; 4 points - display list @ 0x5758 - -0x330C 12 handle (0x7CC) - 050007E4 00000000 - -0x3388 04 display list (0x7E4) [Briefing image shadow] - 050057C8 00000000 00000000 05003318 0007 0000 - point table @ 0x3318; 7 points - display list @ 0x57C8 - -0x339C 12 handle (0x7FC) - 05000814 00000000 - -0x3428 04 display list (0x814) [Briefing Dam Image] - point table @ 0x; points - display list @ 0x - -0x343C 12 handle (0x82C) - -0x34C8 04 display list (0x844) [Briefing Facility Image] - point table @ 0x; points - display list @ 0x - -0x34DC 12 handle (0x85C) - -0x3568 04 display list (0x874) [Briefing Runway Image] - point table @ 0x; points - display list @ 0x - -0x357C 12 handle (0x88C) - -0x3608 04 display list (0x8A4) [Briefing Surface I Image] - point table @ 0x; points - display list @ 0x - -0x361C 12 handle (0x8BC) - -0x36A8 04 display list (0x8D4) [Briefing Bunker I Image] - point table @ 0x; points - display list @ 0x - -0x36BC 12 handle (0x8EC) - -0x3748 04 display list (0x904) [Briefing Silo Image] - point table @ 0x; points - display list @ 0x - -0x375C 12 handle (0x91C) - -0x37E8 04 display list (0x934) [Briefing Frigate Image] - point table @ 0x; points - display list @ 0x - -0x37FC 12 handle (0x94C) - -0x3888 04 display list (0x964) [Briefing Surface II Image] - point table @ 0x; points - display list @ 0x - -0x389C 12 handle (0x97C) - -0x3928 04 display type (0x994) [Briefing Bunker II Image] - point table @ 0x; points - display list @ 0x - -0x393C 12 handle (0x9AC) - -0x39C8 04 display list (0x9C4) [Briefing Statue Image] - point table @ 0x; points - display list @ 0x - -0x39DC 12 handle (0x9DC) - -0x3A68 04 display list (0x9F4) [Briefing Archives Image] - point table @ 0x; points - display list @ 0x - -0x3A7C 12 handle (0xA0C) - -0x3B08 04 display list (0xA24) [Briefing Streets Image] - point table @ 0x; points - display list @ 0x - -0x3B1C 12 handle (0xA3C) - -0x3BA8 04 display list (0xA54) [Briefing Depot Image] - point table @ 0x; points - display list @ 0x - -0x3BBC 12 handle (0xA6C) - -0x3C48 04 display list (0xA84) [Briefing Train Image] - point table @ 0x; points - display list @ 0x - -0x3C5C 12 handle (0xA9C) - -0x3CE8 04 display list (0xAB4) [Briefing Jungle Image] - point table @ 0x; points - display list @ 0x - -0x3CFC 12 handle (0xACC) - -0x3D88 04 display list (0xAE4) [Briefing Control Image] - point table @ 0x; points - display list @ 0x - -0x3D9C 12 handle (0xAFC) - -0x3E28 04 display list (0xB14) [Briefing Caverns Image] - point table @ 0x; points - display list @ 0x - -0x3E3C 12 handle (0xB2C) - -0x3EC8 04 display list (0xB44) [Briefing Cradle Image] - point table @ 0x; points - display list @ 0x - -0x3EDC 12 handle (0xB5C) - -0x3F68 04 display list (0xB74) [Briefing Aztec Image] - point table @ 0x; points - display list @ 0x - -0x3F7C 12 handle (0xB8C) - -0x4008 04 display list (0xBA4) [Briefing Egypt Image] - point table @ 0x; points - display list @ 0x - -0x4060 04 display list (0xBBC) [Briefing paper clip] - point table @ 0x; points - display list @ 0x - -0x4074 12 handle (0xBD4) - 05000BEC 00000000 - -0x42E0 04 display list (0xBEC) [main folder select screen] - 050062A8 00000000 00000000 05004080 0026 0000 - point table @ 0x4080; 38 points - display list @ 0x62A8 - -0x42F4 12 handle (0xC04) - 05000C1C 00000000 - -0x4370 04 display list (0xC1C) [main folder select picture shadow] - 050063B0 00000000 00000000 05004300 0007 0000 - point table @ 0x4300; 7 points - display list @ 0x63B0 - -0x4384 12 handle (0xC34) - 05000C4C 00000000 - -0x4490 04 display list (0xC4C) [slot 1 file select picture] - 05006420 00000000 00000000 05004390 0010 0000 - point table @ 0x4390; 16 points - display list @ 0x6420 - -0x44A4 12 handle (0xC64) - 05000C7C 00000000 - -0x45B0 04 display list (0xC7C) [slot 2 file select picture] - 050064C0 00000000 00000000 050044B0 0010 0000 - point table @ 0x44B0; 16 points - display list @ 0x64C0 - -0x45C4 12 handle (0xC94) - 05000CAC 00000000 - -0x46D0 04 display list (0xCAC) [slot 3 file select picture] - 05006560 00000000 00000000 050045D0 0010 0000 - point table @ 0x45D0; 16 points - display list @ 0x6560 - -0x46E4 12 handle (0xCC4) - 05000CDC 00000000 - -0x47F0 04 display list (0xCDC) [slot 4 file select picture] - 05006600 00000000 00000000 050046F0 0010 0000 - point table @ 0x46F0; 16 points - display list @ 0x6600 - -0x4848 04 display list (0xCF4) [paper clip on main folder select] - 050066A0 00000000 00000000 05004808 0004 0000 - point table @ 0x4808; 4 points - display list @ 0x66A0 diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/Texture application (Rooms).txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/Texture application (Rooms).txt deleted file mode 100644 index 7bd7fd1..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/Texture application (Rooms).txt +++ /dev/null @@ -1,404 +0,0 @@ -Setting Textured and Untextured Geometry in GoldenEye - - Image application is done via microcode commands (herein called OPs regardless the inaccuracy of the word). There are four OPs you must keep track of, and in this document I'll mostly refer to them by number and not name. They are listed here in the order they are usually used: -B9 SetOtherModeLow: sets how the image is applied to geometry -FC SetCombine: dictates how alpha and color are combined -BA SetOtherModeHigh: sets how the image is applied to geometry -BB Texture: size and application of image data - - There are also two more important commands: -C0 Normally NOP, used here to do image recall -E7 SyncPipe: waits for all geometry data to finish before proceeding - Before you change any B9, BA, of FC OPs, you need to set an E7 command. Otherwise, you could wind up applying the wrong settings accidentally while the RSP catches up to you. You only need one sync between the old data and the new, such as: - -E7000000 00000000 -BA001402 00100000 -B900031D 0C182078 -FC26A004 1F1093FF - -NOT: - -E7000000 00000000 -BA001402 00100000 -E7000000 00000000 -B900031D 0C182078 -E7000000 00000000 -FC26A004 1F1093FF - - The format for a C0 command is more complicated and is covered in more depth in a dedicated document. These examples will mostly deal with type 02 OPs, whose format is as follows: -C0000000 00000000 basic command -00800000 00000000 mirror S -00400000 00000000 clamp S -00200000 00000000 mirror T -00100000 00000000 clamp T -000C0000 00000000 ST offset, 2 avoids pixelized edges -00000002 00000000 type, which here is 2 -00000000 00000FFF image ID - - Suffice it to say your command will almost always look like: -C0080002 00000### ;# is image ID value - - Other commands have more complex formatting that described above. S and T above are what are usually called U and V coordinates; these map a position in the image to the vertex, pinning it to your geometry. - - As a final note before moving onto the next section, you only need to change a setting if it isn't the same as the current one. For instance, if you have two images using the same size and same format, you probably won't have to set anything at all. This will be mentioned in the examples below as well. - -+_+ - -Basics of Textured and Untextured Geometry - - The difference between textured and untextured geometry is more than just including an image. You must provide the correct settings to render the difference. This example comes from the start of a room and will be explained in one moment. - -Textured: -E7000000 00000000 ;Always start by flushing the pipe -BA001402 00100000 ;2 cycle when textured -B900031D 0C182078 ;color image - ignore alpha -FC26A004 1F1093FF ;ignores image and vertex alpha -BA001001 00010000 ;images use lod -BB002801 FFFFFFFF ;on, level 5, tile 0, ignore ST -C0080002 00000iii ;type 02 image #iii - -Untextured: -E7000000 00000000 ;Always start by flushing the pipe -BA001402 00000000 ;1 cycle when untextured -B900031D 00502078 ;only uses vertex and enviroment colors -FCFFFFFF FFFE793C ;only applies vertex and enviroment color -(BA001001 00000000) ;not included: already set to tile -BB000001 FFFFFFFF ;on, level 0, tile 0, ignore ST - - In the untextured example the OP in parathesis is not actually included in the script. When a value is already set you do not need to include it. Here it was inserted for your benefit. - As a brief note, the settings above refer to a room binary. At runtime extra flags are toggled and all this will be mentioned below. Take it as it comes for now. - -Breakdown: - The pipe is flushed at the beginning because geometry modes and combiners are going to change. The first BA command is also a point-in-fact. It must be set to 2-cycle in order to manage textures and 1-cycle to operate more efficiently on untextured triads. The second BA is not entirely necessary but takes advantage of level-of-detail. This will use different scale textures at different distances, and when textures are in use you will almost always want to flag it on. - - In the following section B9 commands will be expressed in more depth, but the thing to note here is how you set them for color and texture. The upper word (B900031D) merely says what settings are being changed and this will always be the same. The lower word contains the settings themselves. The actual settings are complicated, but the only operative change is: -0C182078 img-a: blend alpha shade, blend 0 -00502078 no img: color blender - - In other words, everything within 0x1FFFFF is the same. Textureless geometry sets the 00400000 flag, and images do not. - - The combiner is a far more invloved case, and due to the math and hardware background involved will not be covered at all in this document. Suffice it to say there are only four settings that ever need to be applied in GE, and they are: -FC26A004 1F1093FF image-alpha -FC26A004 1F1493FF color image+alpha -FC26A004 1FFC93FF greyscale+alpha (ia) -FCFFFFFF FFFE793C no image - - These include flags to allow, when B9 permits, merging with enviroment color alpha. Setting them even when unused has no adverse results, so might as well ;*) - - BB texture commands used regardless if textures are applied. They require you to know a little about the texture you're using, it any. A quick breakdown: -BB000000 00000000 basic command -00FF0000 00000000 bowtie, usually 0. +4 kills a scanline! -00003800 00000000 level, or size of tile in dmem. 0-7 -00000700 00000000 tile, used to save it in memory. usually 0 -00000001 00000000 on(1) or off(0). You want on. -00000000 FFFF0000 S offset. Leave at -1 (FFFF) -00000000 0000FFFF T offset. Leave at -1 (FFFF) - - The tile value allows you to store a image for recall with a bunch of restrictions. In GE this is a bad idea since you'd overwrite things the programmers placed in those slots and generally make a mess. So, for new objects and rooms use 0. - S and T offsets are usually left at -1,-1 (FFFFFFFF) so the ST for each vertex is used instead. They would usually be set only when a different tile is being used, such as applying luster. The different tile will include the "reflection" and be applied using funny ST offsets to stretch the image and make it look like the reflection is offset from the sample. - - The level refers to the size of your image when assembled and sent off. That's the width, the height, and the format multiplied together. For indexed images, imagine each index is replaced by the color sample. -level image binary total size -7 8192 0x2000 -6 4096 0x1000 -5 2048 0x800 -4 1024 0x400 -3 512 0x200 -2 256 0x100 -1 128 0x80 -0 0 0x0 (more likely no image) - As in 32x32 16bit = 800, 32x64 ia = 1000. Max of 2000. The largest color image would be 64x64, 16bit color making it 0x2000, or tile 7. It's BB command would look like: -BB003801 FFFFFFFF - 32x32 color images, used more than anything, are level 5: -BB002801 FFFFFFFF - - Note that untextured images don't have an image source. That's why they use level 0. That's the meaning behind BB000001 FFFFFFFF. - - - Now that you are thoroughly confused, the following sections discuss practical application of multisized images in different types of geometry files. - -+_+ - -Rooms: Type 02 Texture Application - - Lets start with applying type 02 textures, as this is the most prevalent method to apply images and is common to all image formats. Note this assumes you have already added the texture into the ROM and know its ID, size, and format. This outlines how you set the microcode to properly apply it. - - Rooms and objects are handled slightly differently due to certain settings rolling over. Lets start with rooms first. - - Texture settings come before all other data in any kind of telemetry file. The actual formula is very simple and requires only the below. - The example is for a 32x32 ci image using image alpha and BG alpha if present. Color comes from both the image and vertex colors. That's the most common scenario in GE. - - E7000000 00000000 ;Always start by flushing the pipe -if(image) - BA001402 00100000 ;2 cycle when textured - B900031D 0C184978 ;color image - use image alpha - FC26A004 1F1493FF ;color: img A + BG A, no vtx A - BA001001 00010000 ;images use lod - BB002801 FFFFFFFF ;on: level 5, tile 0, default ST - C0080002 00000iii ;type 2 image #iii, presumed 32x32 ci -else(color) - BA001402 00000000 ;1 cycle when color - B900031D 00502078 ;use vertex color only - FCFFFFFF FFFE793C ;apply vertex and bg color only - BB000001 FFFFFFFF ;on: level 0, tile 0, default ST -if(not yet set) - BA001102 00000000 ;clamp - BA000C02 00002000 ;bi-level interpretation - B7000000 00002000 ;cull back - FB000000 000000FF ;background color -;insert geometry here - - - First thing to note: included are the OPs to use just vertex color as well. You can simply switch between them as you see fit. That's included here for reference, but for now we'll only deal with the image part of it now. - - Before playing with commands, a word about the "if not yet set" section. These commands only need to be set once at the start of the file. You never need to tinker with them again unless you honestly want to. Set them after the first texture call to ensure nothing alters them behind your back. - GE files expect images to be clamped and yours probably will be anyway. To be consistent you'll have to use bi-level interpretation. Point and average will not mesh well with any of the original geometry. In general you don't want to use point anyway, as it tends to pixelate much like the graphics in Doom. - Cull back is set to prevent rendering the back side of geometry. This way only the side facing you is rendered, not the back as well. Gives a performance boost. If you use two-sided geometry be sure to set it back afterward! - The background (or enviroment) color is used to flatten against. In particular, you need to make sure the alpha value is set to FF unless you want translucent walls--yours or unexpectantly others. - - - Everything else worth saying has to do with the "image" section. Only four commands in the entire script will change depending on your image, and of them only three are worth mentioning. -B9 changes based on image format -FC changes based on image format -BB changes based on image size -C0 call a different image ID - - B9 is the most difficult to set simply because of the large degree of options available. By comparison FC and BB are simple. So, first, B9. To save time and energy, the most common settings are listed here as well as when to apply them. - The upper part of the command will always be B900031D and states you'll be changing render mode, convergance, depthmode, and blender settings. The bottom word will change depending on your specific image and what effects you'll want to use. The most common scenarios are these: -B900031D 00502078 no image, no BG color -B900031D 0C182048 greyscale - alpha, BG alpha -B900031D 0C104DD8 intensity+alpha, no BG color -B900031D 0C182078 color image - alpha, BG alpha -B900031D 0C184978 color image + alpha, BG alpha - - Certain flags have different uses, and most enable modes for the combiner to use without directly having their own impact. The flags of most importance here are these: -00400000 no image -00080000 enables BG alpha using the FB OP -00004000 enables image alpha; not used with below -00002000 alpha converge selection; no img. alpha - - Actually working out exactly what you want is beyond the scope of this. You would have to refer to documentation on the RSP microcode. The generic settings above though should serve for almost any image and scenario you run into. - - - FC is easy to set. If no alpha is used use one of the first two settings. If no image is used use one of the last two settings. If the image uses alpha, pick the appropriate one for color or greyscale (I/IA) image. -FC26A004 1F1093FC image-alpha -FC26A004 1F1093FF image-alpha, BG alpha - -FC26A004 1F1493FC color image+alpha -FC26A004 1F1493FF color image+alpha, BG alpha - -FC26A004 1FFC93FC greyscale+alpha (ia) -FC26A004 1FFC93FF greyscale+alpha (ia), BG alpha - -FCFFFFFF FFFE793C no image -FCFFFFFF FFFE793F no image, BG alpha - - Working out the exact settings is more of a chore. The individual flags combine based on selected render settings to combine the final output. Again, well beyond the scope of this document. - - - BB is also easy to set so long as you know what size the image is. The key is the image format and size. -Width * Height * Depth = Size - Multiply the width and height, then multiply this by the size of the color data. If the image is indexed, use the size of the color key in the table. Remember there's 16bits in a byte. -level image binary total size -7 8192 0x2000 -6 4096 0x1000 -5 2048 0x800 -4 1024 0x400 -3 512 0x200 -2 256 0x100 -1 128 0x80 -0 0 0x0 (more likely no image) - -Here's some examples: -32x32 ci, 16bit color - 32 * 32 * 2bytes = 4096 bytes: level 6 -32x32 i, 8bit - 32 * 32 * 1byte = 2048 bytes: level 5 - -If you fall between levels, round up: -12x12 32bit color - 12 * 12 * 4bytes = 576 bytes - round up to 1024: level 4 - - Now you stuff the level value into the OP. -level OP -0 BB000001 FFFFFFFF -1 BB000801 FFFFFFFF -2 BB001001 FFFFFFFF -3 BB001801 FFFFFFFF -4 BB002001 FFFFFFFF -5 BB002801 FFFFFFFF -6 BB003001 FFFFFFFF -7 BB003801 FFFFFFFF - - -+_+ - -Changing Textures Within a Room - - Most interesting rooms will use more than one texture. When swapping textures you only need to include the code that changes. Also, you only need to sync the pipe (E7 OP) when a B9, BA, or FC OP changes. - As an example, here's a sample room illustrating a few texture changes. The types of textures are noted. - - E7000000 00000000 ;Always start by flushing the pipe - BA001402 00100000 ;2 cycle when textured - B900031D 0C184978 ;color image - use image alpha - FC26A004 1F1493FF ;color: img A + BG A, no vtx A - BA001001 00010000 ;images use lod - BB002801 FFFFFFFF ;on: level 5, tile 0, default ST - C0080002 00000iii ;type 2 image #iii, 32x32 ci - BA001102 00000000 ;clamp - BA000C02 00002000 ;bi-level interpretation - B7000000 00002000 ;cull back - FB000000 000000FF ;background color -;insert geometry here -;example 1: same type+size - C0080002 00000iii ;type 2 image #iii, 32x32 ci -;more geometry -;example 2: different size - BB003001 FFFFFFFF ;on: level 6, tile 0, default ST - C0080002 00000iii ;type 2 image #iii, 64x32 ci -;more geometry -;example 3: change render mode - E7000000 00000000 ;changing settings - B900031D 0C182078 ;color image - no image alpha - C0080002 00000iii ;type 2 image #iii, 64x32 ci -;more geometry -;example 4: complete change - E7000000 00000000 ;changing settings - B900031D 0C102048 ;greyscale image - no image alpha - FC26A004 1F1093FF ;image without alpha + BG alpha - BB002001 FFFFFFFF ;on: level 4, tile 0, default ST - C0080002 00000iii ;type 2 image #iii, 32x32 i8 - - Each in series. Example 1 shows that if the image is exactly the same as the previous settings, you just add a new texture call. It's that easy. - Example 2 shows how you call an image that has the same format as the current image but differs in size. Simply write in the new BB and CO OPs. No pipe is necessary. - Example 3 illustrates changing the render mode in a B9 OP, here ignoring the alpha channel. A flush OP (E7) is needed because a B9 command will be used. The new render setting is applied and the texture OP is written. As a side note, by disabling alpha in B9 you do not need to change the FC command. You could also achieve the same effect by altering FC if you like, but disabling it from B9 saves you from having to write a million FCs. - Example 4 is a complete texture swap. All four commands are used and a flush is called beforehand. - - - You can also switch between textured and untextured, presuming you watch the settings. In this example, you start out untextured, then swap to using textures: - E7000000 00000000 ;Always start by flushing the pipe - BA001402 00000000 ;1 cycle when color - B900031D 00502078 ;use vertex color only - FCFFFFFF FFFE793C ;apply vertex and bg color only - BB000001 FFFFFFFF ;on: level 0, tile 0, default ST - BA001102 00000000 ;clamp - BA000C02 00002000 ;bi-level interpretation - B7000000 00002000 ;cull back - FB000000 000000FF ;background color -;insert geometry here -;switch to textures - E7000000 00000000 ;changing settings - BA001402 00100000 ;2 cycle when textured - B900031D 0C184978 ;color image - use image alpha - FC26A004 1F1493FF ;color: img A + BG A, no vtx A - BA001001 00010000 ;images use lod - BB002801 FFFFFFFF ;on: level 5, tile 0, default ST - C0080002 00000iii ;type 2 image #iii, presumed 32x32 ci -;insert more geometry here - - In order to switch, you flush, set the cycle rate back to 2, set LOD, then do your normal texture commands. You won't need to clamp, cull, set the BG, or set the interpretation level again. If you wanted, you could also change back from textured to untextured. Simply turn off LOD, set the cycles back to 1, and set the OPs for colour. - -+_+ - -Unorthodox Texture Application - - The simplest change can be used with the settings given above. It adds a fixed amount of translucency to any geometry following it by setting the background enviroment color. The OP is FB and simply takes a 32bit color value: -FB000000 00000000 basic command -00000000 FF000000 red -00000000 00FF0000 green -00000000 0000FF00 blue -00000000 000000FF alpha - - - By altering the render mode you can also use this to make the black in a greyscale image lacking alpha act like alpha. For instance: -B900031D 0C1849D8 ;intensity, BG alpha -FC26A004 1F1093FF ;image-alpha, BG alpha -BB003001 FFFFFFFF ;on: level 6, tile 0 -C0080002 00000iii ;image, expected to be greyscale -FB000000 00000080 ;50% translucent - - - Ever wonder how to add luster to a surface? It is as simple as making a small change to your BB command and setting two flags. For instance: -BB002801 08000800 -C0080002 00000iii -B7000000 00060000 - - The B7 setting here sets lighting and texture gen, and this causes luster on the surface. Note the ST settings in the BB command. By setting these you offset the texture, effectively setting the repeat rate of the lusterous overlay. After the shiny part of the model and definately before ending the display list you must reset the flags using this line: -B6000000 00060000 - - Otherwise, the effect will leak onto every other piece of geometry that follows it, and this can also crash the game. - - - Type 01 texture commands load two images, one visible at a distance and the other close up. It can also be used to add detail to an image when close but keep from rendering it far away. Examples would be the rock walls in Dam and the stone walls in Grid. This example comes from Dam: -B900031D 0C1849D8 ;uses convergence and depth comparisons -FC26E404 1F10FFFF ;uses LOD fraction -BB002801 FFFFFFFF ;on: level 5, tile 0, default ST -C01B8001 FA 9A1 4B1 ;type 1: 9A1 near, 4B1 far, dist. FA -BA001102 00040000 ;enable colour dither - - The format for the type 1 C0 OP is more complicated, and here it is in detail: -C0000000 00000000 basic command -00800000 00000000 S mirror -00400000 00000000 S clamp -00200000 00000000 T mirror -00100000 00000000 T clamp -000C0000 00000000 ST offset -0003C000 00000000 S shift -00003C00 00000000 T shift -00000001 00000000 type 1 command -00000000 FF000000 distance for replacement -00000000 00iii000 near image ID (base) -00000000 00000iii far image ID (overlay) - - The important parts are the level and two image IDs. In simplest form you have C0080001 FAiiiIII, where i is image 1 and I image 2. - - The level is the distance at which replacement occurs. Set to FF no replacement happens. For "detail textures" you want a value roughly F8 to FB. Finding the right value is more a matter of trial-and-error. Technically this sets a PrimaryColor alpha level which converges with the overlay texture, but you don't have to worry about that. - Oddly, the near image will always be present. The far image acts as an overlay that fades as you near the level set in the command. - - For best effect you want the two images to be the same size and preferably the same format. If the size differs, set the difference in the S and T to the appropriate shift values. The example above uses S shift to account for image misalignment. - - Remember too to enable colour dither in BA and disable it when you're done. This allows the transition to smoothly blend the two images. Otherwise, the effect can be very ugly. - -+_+ - - -Objects - - As mentioned before, objects use a slightly different set of commands. In particular, rooms will automatically set certain flags in B9 commands. There's also certain OPs that must be included and omitted from the display list. - As before, here's the general initialization for a 32x32 ci image without alpha. Note the difference from rooms. - - E7000000 00000000 ;Always start by flushing the pipe -if(image) - BA001001 00010000 ;images use LOD - BB002801 FFFFFFFF ;on: level 5, tile 0, default ST - C0080002 00000iii ;type 2 image, presumed 32x32 ci - if(not yet set) - BA001102 00000000 ;clamp - BA000C02 00002000 ;bi-level interpretation -else(color) - BA001402 00000000 - B900031D 00552078 - FCFFFFFF FFFE793C -if(not yet set) - B7000000 00002000 ;cull back - 01020040 03000000 ;basic matrix - - - If images are in use you also have to set clamp and bi-level interp. Pure color doesn't require it, but images will. Also note the addition of the matrix command. This loads a default matrix for the object. It is required, and failing to do so will cause bad things to happen. - It is more obvious what you don't need. 2-cycle is already set, and the BG color should already be set to black. Objects presume B9 is already set to C8102078. That's the equivalent of 0C102078 in rooms. In general, XOR room values with C4000000 to get this table: - -Common B9 values: -B900031D 00552078 no image, no BG color -B900031D C8182048 greyscale - alpha, BG alpha -B900031D C8104DD8 intensity+alpha, no BG color -B900031D C8182078 color image - alpha, BG alpha -B900031D C8184978 color image + alpha, BG alpha - - Otherwise, all other settings should be identical to rooms. Note you do need to set B9 if it differs from the default, and because the values aren't automatically corrected at runtime you have more control over how to set them. - -+_+ - - Note only a fraction of the above applies to other N64 titles and is not written as a general guide to display list editting. It is presented with generic values to allow the average hacker with little experience in N64 display lists to custom hex edit pre-generated output. Please refer to RSP / RDP microcode documentation for a better reference of available render and combiner settings. - --Zoinkity diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/Guard Frick-a-Frack.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/Guard Frick-a-Frack.txt deleted file mode 100644 index 10a195b..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/Guard Frick-a-Frack.txt +++ /dev/null @@ -1,45 +0,0 @@ - This is a sort of side project that developed out of analyzing a guard to death. - - Guard Part Ordering (though any object will do) -------------------------------------------------- - - Each 'piece' of an object model is given a label so it can be identified in-game. Up until now the numbering system has been neglected; it usually isn't necessary to know what piece is which. It usually is only used during collision detection, as when shooting a head versus a foot. For our purposes it is more likely to be used to rebuild models though. - - - The ordering system is generated using the 02 position commands in the object's table. Here's an example of the 02 command and a breakdown of the features: -0x0 4 relative x position -0x4 4 relative y position -0x8 4 relative z position -0xC 2 *current command order number* -0xE 2 *first piece order #* -0x10 2 *second piece order #* (FFFF if not present) -0x12 2 *third piece order #* (FFFF if not present) -0x14 4 offset to child 02 command (if applicable) -0x18 4 unknown float value - -0x5C8 C35E742B 4274E7D1 00000000 0007 0011 0013 FFFF 050005E0 438B53D1 - - In this example, the 02 command shown is #7 in the model. If some bizare function requests 7's data, it will retrieve this command. - There are two piece entries to this command as well, 11 and 13. In this particular case it is the left hand and left forearm of a character, but it could be any two pieces of the model. - It is rather important to note that command numbers and piece numbers form two different lists! Commands span from 1+ but piece numbers start at 0. - - - Child entries are those entries that are linked together in the main object table. Piece numbers are assigned to the child entry alone. Command numbers are assigned to the 02 commands that set the piece numbers. -{02:5C8 {02:5E0 {0A:5F8 {18:610}} - 0A:628 {08:640 {18:658} - 08:670 {18:688}} - } - - 0x5C8 has two children: 0x5E0 and 0x628. 0x5E0 is labelled #11, and 0x628 is labelled #13. Since only render commands (dimentions, distance, and display structs) are in 0x628's group, piece 13 is exclusively the value for the left forearm model. - - Now for a quick look at part #11 - an 02 command used in the hand. 0x5E0 set its piece number to 11. If the entire piece, including the command needs to be grabbed, this number can be used. However, it also assigns a piece number to its children: -0x5E0 C38411CD 3FAEB13E 00000000 0009 0012 FFFFFFFF 00000000 4306DABA - - 0x5E0's COMMAND number is set to 09 while its piece number is 11. The 0A and 18 child commands are now assigned piece number 12. When something wants to access the hand model alone it can use piece number 12 to do so. - --------------------------------- -Complicated, eh? -It can also skip command numbers and probably piece numbers as well. Bodies without heads skip commands 3-4, for instance. - -Also, this has no bearing on the IDs assigned to the dimention data. That's just in a sort of random numerical order starting at 1. - diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/character shadow command.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/character shadow command.txt deleted file mode 100644 index 4c13a78..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/character shadow command.txt +++ /dev/null @@ -1,7 +0,0 @@ -0x0 float x position. + moves to character's left, - to character's right -0x4 float z position. + moves in front of character, - backward -0x8 float x size (width) width of image from side to side -0xC float z size (length) length of image from forward to back - - -first byte in object table indicates number of group commands expected \ No newline at end of file diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/generating proper characters.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/generating proper characters.txt deleted file mode 100644 index 0ebbd3c..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/generating proper characters.txt +++ /dev/null @@ -1,59 +0,0 @@ -First group code for each positioning command: -1 waist (complete body) -2 chest (complete upper body) -3 head + collar -4 R bicep (+ forearm + hand) -5 L bicep (+ forearm + hand) -6 R forearm (+ hand) -7 L forearm (+ hand) -8 R hand -9 L hand -A L shank (+ shin + foot) -B R shank (+ shin + foot) -C L shin (+ foot) -D R shin (+ foot) -E L foot -F R foot - -Dimention group code for each part: Note that these indicate impact and part type! -1 L foot -2 L shin -3 L shank -4 R foot -5 R shin -6 R shank -7 waist -8 collar + head -9 R hand -A R forearm -B R bicep -C L hand -D L forearm -E L bicep -F chest -64 held items -6E hat - - -Merge values for each position: -0 head/collar{chest} -1 chest{head - or - waist} -2 Rbicep{chest} -3 Lbicep{chest} -4 (01 superheading? shadow?) -5 waist{chest} -6 Rshank{waist} -7 Rshin{Rshank} -8 Rfoot{Rshin} -9 Rshin{Rfoot} -A Lshank{waist} -B Lshin{Lshank} -C Lfoot{Lshin} -D Lshin{Lfoot} -E Rforearm{Rbicep} -F Rhand{Rforearm} -10 Rforearm{Rhand} -11 Lforearm{Lbicep} -12 Lhand{Lforearm} -13 Lforearm{Lhand} -14 chest{head - or - waist} diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/heads.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/heads.txt deleted file mode 100644 index f694fc7..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/actors/heads.txt +++ /dev/null @@ -1,91 +0,0 @@ -simple heads: -Simple heads only have one head model (no distance model present). They follow a very simple header format as shown here (taken from Trevhead). All require 2 offsets at the beginning of the file and only contain one line of points and mapping. - -header: -00000000 00000000 00000000 0002 0001 -433E9EA3 0000 0004 00000000 00000000 -2 offsets, 4 images - -offsets: (2) -0x0 00000000 -0x4 00000000 - -images: (4) -000007F4 20200000 02000000 -000007F8 20400000 02000000 -000007F9 20400000 02000000 -000007FC 20200000 02000000 - -Table: -00180000 05002390 00000000 00000000 00000000 00000000 - -point display struct: -050023B0 00000000 05000050 0198 0069 050019D0 05002060 0003 0000 00000000 - mapping at 0x23B0 - normal point table at 0x50; 0x198 entries - collision point table at 0x19D0; 0x69 entries - point usage table at 0x2060 --------- -Complex heads: -Complex heads have mulitple head models (distance-specific models) or multiple objects attached to the head, such as sunglasses. These use slightly more complicated file tables. This example is of CheadmartinZ. Run headmartinZ run. - -Complex heads *will* have 1-2 offset values preset. - First is to the 12-relative command for sunglasses. - Second is to 12-relative command for distance model (low-res) - - -header: -00000000 00000000 00000000 0002 0001 -435E5914 0000 0006 00000000 00000000 -2 offsets, 6 images - -offsets: (2) -0x0 050000B0 -0x4 05000068 - -images: (6) -0x8 000007CC 20200600 02000000 -0x14 000007CB 10200600 02000000 -0x20 0000073E 20400000 02000000 -0x2C 0000073F 20400000 02000000 -0x38 0000073D 20400000 02000000 -0x44 00000740 20300400 02000200 - -Table: -0x50 00120000 050000E0 00000000 00000000 00000000 05000068 -0x68 00120000 050000E8 05000050 05000098 00000000 05000080 - 0x80 00180000 050001BC 05000068 00000000 00000000 00000000 - 0x98 00180000 05000780 05000050 050000B0 05000068 00000000 -0xB0 00120000 050007A0 05000050 00000000 05000098 050000C8 - 0xC8 00180000 05000A30 050000B0 00000000 00000000 00000000 - -relative: -0xE0 05000068 00000000 - -relative: -0xE8 05000080 00000000 - -point display struct: //low-res head -0x1BC 05000A50 00000000 050000F0 0006 0006 05000150 050001B0 0003 0000 00000000 - mapping @ 0xA50 - normal point table @ 0xF0; 6 normal points - collision points @ 0x150; 6 collision points - point usage table @ 0x1B0 - -point display struct: //hi-res head -0x780 05000AB0 00000000 050001E0 0038 001B 05000560 05000710 0003 0000 00000000 - mapping @ 0xAB0 - normal point table @ 0x1E0; 38 normal points - collision points @ 0x560; 1B collision points - point usage table @ 0x710 - -relative: -0x7A0 050000C8 00000000 - -point display struct: //sunglasses -0xA30 05000B98 05000BF0 050007A8 0014 0012 050008E8 05000A08 0003 0000 00000000 - mapping @ 0xB98 - collisionless mapping @ 0xBF0 - normal point table @ 0x7A8; 14 normal points - collision points @ 0x8E8; 12 collision points - point usage table @ 0xA08 diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/object templates.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/object templates.txt deleted file mode 100644 index 4f7f869..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/object templates.txt +++ /dev/null @@ -1,281 +0,0 @@ -Object Templates ----------------------------------------------------------- -From object load line, follow the pointer at offset 0x4 -This designates a list of each object's primary header commands -These don't account for *all* of the header, just the main sections required for the object to be valid. - -At pointer: -0x0 2 Number of entries in block -0x2 2 reserved -0x4 4 pointer to block -0x8 2 total command index value - -At block: -0x0 2 type of header command; ie: type15 part position, 02 display list, etc. -0x4 2 ID of part 1 (first index in command itself) -0x6 2 ID of part 2 or same value (second index in command itself) - note each block is padded to the nearest word. - - Just like with object index values, you don't add the 0015/xx01 commands to the tally. Only 0002 commands are added, +3 for each. Order follows that in the object header. ID values likewise coincide with internal numbering format, such as that used by bodies. In other words, part lookup and by extension animation is entirely facilitated by this function. - - Each block command entry corresponds to one expected offset value in the object header. The command this offset points to will be the same as the type declared in the block, and likewise its IDs. Note that these cite the bare minimum number of entries; for a complete list of expectant entries, refer to the object offset documentation. - - For all intents and purposes it isn't necessary to tinker with the table itself. All that needs to be done is assign the correct pointer for each object type to 0x4 in that object's header. In fact, tampering with the table can render an entire object class useless! - - -most normal objects (alarms, crates, etc) use 8003C4D8 -8003C4D8: -00010000 8003C4D0 [0002.0000.0000 pos: primary model - ] -00030000 - -Pchr*Z -8003C4FC: item pickups; 3 offsets, var. parts -00020000 8003C4F0 [0015.0000.0000 pos: primary model - 0015.0001.0001 pos: gunfire effect - ] -00000000 - -Phat*Z -8003A21C: hats; 0 offsets, 1 part -00010000 8003A214 [0015.0000.0000 pos: primary model - ] -00000000 - -PtankZ -8003A208: tank; 9 offsets, 5 parts -00050000 8003A1E8 [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: cupola - 0002.0006.0006 pos: group 2 (turret swivel) - 0002.0009.0009 pos: group 3 (turret) - 0002.000C.000C pos: group 4 (turret effect) - ] -000F0000 - -Psev_door4_windZ, Psev_trislideZ, Pgasplant_clear_doorZ, Ptrain_door2Z, Ptrain_door3Z, PsevdoorwoodZ, PsevdoorwindZ -8003A1DC: doors w/ windows; 4 offsets, 1 part -00010000 8003A1D4 [0002.0000.0000 pos: primary model - ] -00030000 - -PhelicopterZ, PtigerZ, PmilcopterZ, PhindZ, PplaneZ -8003A1C8: aircraft; 6 offsets, 4 parts (hind=5) -00050000 8003A1A8 [0401.0000.0000 main object container - 0002.0000.0000 pos: primary model - 0015.0003.0003 pos: forward prop - 0015.0004.0004 pos: rear prop - 0015.0005.0005 pos: tertiary model (turret) - ] -00030000 - -PmiltruckZ, PjeepZ, ParticZ, PcarbmwZ, PcarzilZ (3 other cars not set to this!) -8003A19C: wheeled vehicles; B offsets, 5 parts -00050000 8003A17C [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: wheel 1 - 0002.0006.0006 pos: wheel 2 - 0002.0009.0009 pos: wheel 3 - 0002.000C.000C pos: wheel 4 - ] -000F0000 - -PwalletbondZ -8003A170: unique; 2B offsets, 1 part -00010000 8003A168 [0002.0000.0000 pos: primary model - ] -00030000 - -Pdoor_irisZ -8003A15C: iris; D offsets, D parts -000D0000 8003A10C [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: inner spline 1 - 0002.0006.0006 pos: outer track 1 - 0002.0009.0009 pos: inner spline 2 - 0002.000C.000C pos: outer track 2 - 0002.000F.000F pos: inner spline 3 - 0002.0012.0012 pos: outer track 3 - 0002.0015.0015 pos: inner spline 4 - 0002.0018.0018 pos: outer track 4 - 0002.001B.001B pos: inner spline 5 - 0002.001E.001E pos: outer track 5 - 0002.0021.0021 pos: inner spline 6 - 0002.0024.0024 pos: outer track 6 - ] -00270000 - -Pdoor_eyelidZ -8003A100: eye; 3 offsets, 3 parts -00030000 8003A0EC [0002.0000.0000 pos: primary - 0002.0003.0003 pos: top segment - 0002.0006.0006 pos: bottom segment - ] -00090000 - -ProofgunZ, Pgun_runwayZ, PsevdishZ, PgroundgunZ -8003A0E0: autogun; 8 offsets, 5 parts -00060000 8003A0BC [0002.0000.0000 pos: primary model (base) - 0002.0003.0003 pos: horizontal swivel - 0002.0006.0006 pos: vertical swivel - 0002.0009.0009 pos: turret(s) - 0002.000C.000C pos: gunfire 1 - 0002.000F.000F pos: gunfire 2 - ] -00120000 - -Ptv_holderZ -8003A0B0: hanging rack; 4 offsets 5 parts -00050000 8003A090 [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: monitor 1 - 0002.0006.0006 pos: monitor 2 - 0002.0009.0009 pos: monitor 3 - 0002.000C.000C pos: monitor 4 - ] -000F0000 - -Pbridge_console1aZ, Pbridge_console2aZ, Pbridge_console3aZ, Pbridge_console3bZ, Pconsole1Z, Pconsole2Z, Pconsole3Z, Ptv4screenZ, PdoorpanelZ -8003A084: used with monitor types; 4 screen offsets -00010000 8003A07C [0002.0000.0000 pos: primary - ] -00030000 - -Pbridge_console1bZ, Pconsole_sevbZ, Ptv1Z, PtvscreenZ, PtuningconsoleZ, PmodemboxZ, PdoorconsoleZ -8003A070: used with monitor types; 1 screen offset -00010000 8003A068 [0002.0000.0000 pos: primary - ] -00030000 - -PcctvZ -8003A05C: used with camera; 4 offsets 2 parts, destroyed when glass broken -00020000 8003A050 [0002.0000.0000 pos: primary - 0002.0003.0003 pos: glass - ] -00060000 - -++++++++++++++++++++ - -Most GweaponsZ use this one -8003C714: 24 or 1C offsets, 6 parts or less -00060000 8003C6F0 [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: - 0002.0006.0006 pos: - 0015.000F.000F pos: - 0002.0009.0009 pos: - 0002.000C.000C pos: - ] -000F0000 - -8003C728: unassigned, so probably null placeholder; 1 part -00010000 8003C720 [0002.0000.0000 pos: primary model - ] -00030000 - -GrugerZ, GgrenadelaunchZ -8003C76C: 24 offsets, 7 parts -00070000 8003C740 [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: - 0002.0006.0006 pos: - 0002.0009.0009 pos: - 0002.000C.000C pos: rotating barrel - 0002.000F.000F pos: - 0002.0012.0012 pos: - ] -00150000 - -GuziZ -8003C7AC: 24 offsets, 5 parts -00070000 8003C780 [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: - 0002.0006.0006 pos: - 0002.0009.0009 pos: - 0015.0012.0012 pos: flash effect - 0002.000C.000C pos: - 0002.000F.000F pos: - ] -00120000 - -GjoypadZ -8003D390: E offsets, D parts -000D0000 8003D340 [0002.0000.0000 pos: primary model - 0002.0003.0003 pos: start - 0002.0006.0006 pos: D-pad - 0002.0009.0009 pos: control stick - 0002.000C.000C pos: c - 0002.000F.000F pos: c - 0002.0012.0012 pos: c - 0002.0015.0015 pos: c - 0002.0018.0018 pos: a - 0002.001B.001B pos: b - 0002.001E.001E pos: r - 0002.0021.0021 pos: l - 0002.0024.0024 pos: z - ] -00270000 - -++++++++++++++++++++ -Characters use this - -8003D400: 7 offsets, 14-15 parts -00100000 8003D3A0 [0410.0000.0000 primary model container - 0002.0000.0000 pos: - 0002.0003.0003 pos: - 0002.0006.0006 pos: - 0002.0009.000C pos: - 0002.000C.0009 pos: - 0002.000F.0012 pos: - 0002.0012.000F pos: - 0002.0015.0018 pos: - 0002.0018.0015 pos: - 0002.001B.001E pos: - 0002.001E.001B pos: - 0002.0021.0024 pos: - 0002.0024.0021 pos: - 0002.0027.002A pos: - 0002.002A.0027 pos: - ] -002D0000 - -++++++++++++++++++++ -LeftHand -8003C6E4: A offsets, 9 items -00130000 8003C670 [0401.0000.0000 primary model container - 0002.0000.0000 pos: - 0002.0003.0003 pos: - 0002.0006.0006 pos: - 0002.0009.000C pos: - 0002.000C.0009 pos: - 0002.000F.0012 pos: - 0002.0012.000F pos: - 0002.0015.0018 pos: - 0002.0018.0015 pos: - 0002.001B.001E pos: - 0002.001E.001B pos: - 0002.0021.0024 pos: - 0002.0024.0021 pos: - 0002.0027.002A pos: - 0002.002A.0027 pos: - 0015.002D.002D DL: - 0015.002E.002E DL: - 0015.002F.002F DL: - ] -002D0000 - - -Character again? Unknown model. Called from line @ 8003C650 (note: rare logo decompressed in ROM) -8003C570: 4 items -00100000 8003C510 [0410.0000.0000 primary model container - 0002.0000.0000 pos: - 0002.0003.0003 pos: - 0002.0006.0006 pos: - 0002.0009.000C pos: - 0002.000C.0009 pos: - 0002.000F.0012 pos: - 0002.0012.000F pos: - 0002.0015.0018 pos: - 0002.0018.0015 pos: - 0002.001B.001E pos: - 0002.001E.001B pos: - 0002.0021.0024 pos: - 0002.0024.0021 pos: - 0002.0027.002A pos: - 0002.002A.0027 pos: - ] -002D0000 diff --git a/notes/GE Documentation/Display Lists and Object Generation/Objects/use of object table - submatrix commands and other.txt b/notes/GE Documentation/Display Lists and Object Generation/Objects/use of object table - submatrix commands and other.txt deleted file mode 100644 index a14b85f..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Objects/use of object table - submatrix commands and other.txt +++ /dev/null @@ -1,477 +0,0 @@ -7F06EEA4: A39D4 - accepts: A0=,A1= -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A1,002C (SP) -LW S0,0014 (A1) ;S0=obj.header+14: p->obj.table -OR S2,A0,R0 ;S2=A0: p-> -BEQL S0,R0,7F06EFB0 ;return if no table -LW RA,0024 (SP) -//7F06EECC: loop for each entry in table, in order -LHU V0,0000 (S0) ;V0=table command entry -ADDIU S1,R0,0001 ;S1=1 -ANDI T7,V0,00FF ;T7=entry type -ADDIU T8,T7,FFFF ;T8=type-1 -SLTIU AT,T8,0018 ;TRUE if type 1-18 -BEQ AT,R0,7F06EF4C ;default for invalid types -SLL T8,T8,0x2 ;T8=type->offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,4C20 (AT) ;T8=80054C20+offset: TLB jump for type -JR T8 -NOP -7F06EEFC types 01,02,03,0B,0C,0D,0E,0F,10,15 -BEQ R0,R0,7F06EF4C ;effectively 7F06EF68... -OR S1,R0,R0 ;S1=0: used in branch below -7F06EF04 type 08 distance trigger -OR A0,S2,R0 -JAL 7F06E858 -OR A1,S0,R0 -BEQ R0,R0,7F06EF4C -NOP -7F06EF18 type 09 head/hat placement interlink -OR A0,S2,R0 -JAL 7F06EB3C -OR A1,S0,R0 -BEQ R0,R0,7F06EF4C -NOP -7F06EF2C type 07 unknown -OR A0,S2,R0 -JAL 7F06ECF8 -OR A1,S0,R0 -BEQ R0,R0,7F06EF4C -NOP -7F06EF40 type 17 pointer to head -OR A0,S2,R0 -JAL 7F06EA08 -OR A1,S0,R0 -//7F06EF4C default -BEQ S1,R0,7F06EF68 ;branch if types 01,02,03,0B,0C,0D,0E,0F,10,15 -NOP -LW V0,0014 (S0) -BEQ V0,R0,7F06EF68 ;branch if no child entry -NOP -BEQ R0,R0,7F06EFA4 -OR S0,V0,R0 ;S0=V0: child entry -//7F06EF68: -BEQ S0,R0,7F06EFA4 -LW T9,002C (SP) -LW V1,0008 (T9) -//7F06EF74: -BNEL S0,V1,7F06EF88 -LW V0,000C (S0) -BEQ R0,R0,7F06EFA4 -OR S0,R0,R0 -//7F06EF84: retrieve next entry -LW V0,000C (S0) ;V0=p->next entry -BEQL V0,R0,7F06EF9C -LW S0,0008 (S0) -BEQ R0,R0,7F06EFA4 -OR S0,V0,R0 -//7F06EF98: retrieve parent entry -LW S0,0008 (S0) ;S0=p->parent entry -BNEZ S0,7F06EF74 -NOP -//7F06EFA4: loop for each valid entry -BNEL S0,R0,7F06EED0 -LHU V0,0000 (S0) ;V0=entry type -//7F06EFAC: -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7F06EFC4: A3AF4 - NOTE: revised -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LW T6,0008 (A0) -OR S1,A0,R0 -LW S0,0000 (T6) -BEQL S0,R0,7F06F058 -LW RA,001C (SP) -LHU V0,0000 (S0) -ANDI T7,V0,00FF -ADDIU T8,T7,FFFF -SLTIU AT,T8,0018 -BEQ AT,R0,7F06F020 -SLL T8,T8,0x1 -LUI AT,7F07 -ADDU T8,AT,T8 -LH T8,F068 (T8) -BEQ T8,R0,7F06F020 -ADDU T8,AT,T8 -OR A0,S1,R0 -JALR RA,T8 -OR A1,S0,R0 -LW V0,0014 (S0) -BNEL V0,R0,7F06F04C -OR S0,R0,V0 -BEQ S0,R0,7F06F04C -NOP -LW V0,000C (S0) -BNEL V0,R0,7F06F04C -OR S0,R0,V0 -LW S0,0008 (S0) -BNEL S0,R0,7F06F038 -LW V0,000C (S0) -BNEL S0,R0,7F06EFEC -LHU V0,0000 (S0) -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -7F06F0D0: A3C00 -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -LW T6,0008 (A1) -OR S1,A1,R0 -OR S2,A0,R0 -LW S0,0000 (T6) -BEQL S0,R0,7F06F234 -LW RA,0024 (SP) -//7F06F0FC: -LHU V0,0000 (S0) -ANDI T7,V0,00FF -ADDIU T8,T7,FFFF -SLTIU AT,T8,0018 -BEQ AT,R0,7F06F1EC -SLL T8,T8,0x2 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,4CE0 (AT) -JR T8 -NOP -7F06F128 type 01 group heading -OR A0,S2,R0 -OR A1,S1,R0 -JAL 7F06D738 -OR A2,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F140 type 02 position -OR A0,S2,R0 -OR A1,S1,R0 -JAL 7F06E0A0 -OR A2,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F158 type 03 unknown -OR A0,S2,R0 -OR A1,S1,R0 -JAL 7F06E64C -OR A2,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F170 type 15 subposition -OR A0,S2,R0 -OR A1,S1,R0 -JAL 7F06E7A8 -OR A2,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F188 type 08 distance trigger -OR A0,S1,R0 -JAL 7F06E858 -OR A1,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F19C type 09 head/hat placement interlink -OR A0,S1,R0 -JAL 7F06EB3C -OR A1,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F1B0 type 07 unknown -OR A0,S1,R0 -JAL 7F06ECF8 -OR A1,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F1C4 type 12 handle/switch -OR A0,S1,R0 -JAL 7F06E9BC -OR A1,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F1D8 type 17 pointer to head -OR A0,S1,R0 -JAL 7F06EA08 -OR A1,S0,R0 -BEQ R0,R0,7F06F1F0 -LW V0,0014 (S0) -7F06F1EC default -LW V0,0014 (S0) -BEQ V0,R0,7F06F200 -NOP -BEQ R0,R0,7F06F228 -OR S0,V0,R0 -//7F06F200: -BEQ S0,R0,7F06F228 -NOP -//7F06F208: -LW V0,000C (S0) -BEQL V0,R0,7F06F220 -LW S0,0008 (S0) -BEQ R0,R0,7F06F228 -OR S0,V0,R0 -//7F06F21C: -LW S0,0008 (S0) -BNEL S0,R0,7F06F20C -LW V0,000C (S0) -//7F06F228: -BNEL S0,R0,7F06F100 -LHU V0,0000 (S0) -//7F06F230: -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -+_+ - -7F06C79C: A12CC grab group# from object table types - accepts: A0=p->obj.instance, A1=p->obj.table entry -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LHU T6,0000 (A1) -OR A2,R0,R0 ;A2=0: default group value -LW A3,0010 (A0) ;A3=obj.instance+10: p-> -ANDI T7,T6,00FF ;T7=T6 & 0xFF: type# -ADDIU T8,T7,FFFF ;T8=type-1 -SLTIU AT,T8,0018 -BEQ AT,R0,7F06C840 ;branch if invalid type -SLL T8,T8,0x2 ;T8=type-1 -> offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,4AF8 (AT) ;T8=80054AF8+offset: -JR T8 -NOP -7F06C7D8: type 1 -LW T9,0004 (A1) ;T9=p->data -BEQ R0,R0,7F06C840 -LHU A2,000C (T9) ;A2=group# -7F06C7E4: type 18 -LW T0,0004 (A1) -BEQ R0,R0,7F06C840 -LHU A2,001A (T0) -7F06C7F0: type 7 -LW T1,0004 (A1) -BEQ R0,R0,7F06C840 -LHU A2,01AA (T1) -7F06C7FC: type 8 -LW T2,0004 (A1) -BEQ R0,R0,7F06C840 -LHU A2,000C (T2) -7F06C808: type 12 -LW T3,0004 (A1) -BEQ R0,R0,7F06C840 -LHU A2,0004 (T3) -7F06C814: type 9 -LW T4,0004 (A1) -BEQ R0,R0,7F06C840 -LHU A2,0022 (T4) -7F06C820: type B -LW T5,0004 (A1) -BEQ R0,R0,7F06C840 -LHU A2,0044 (T5) -7F06C82C: type C -LW T6,0004 (A1) -BEQ R0,R0,7F06C840 -LHU A2,0020 (T6) -7F06C838: type 17 -LW T7,0004 (A1) -LHU A2,0000 (T7) -//7F06C840: default -LW V0,0008 (A1) -ADDIU V1,R0,0017 -BEQL V0,R0,7F06C888 ;return if no parent -LW RA,0014 (SP) -//7F06C854: -LHU T8,0000 (V0) -OR A1,V0,R0 ;A1=V0: p->parent -ANDI T9,T8,00FF ;T9=parent's type -BNEL V1,T9,7F06C87C ;branch if not type 17: -LW V0,0008 (A1) -JAL 7F06C79C ;do entire heirarchy -SW A2,001C (SP) -LW A2,001C (SP) -BEQ R0,R0,7F06C884 -LW A3,0004 (V0) ;A3=p->data -//7F06C878: -LW V0,0008 (A1) ;V0=parent -BNEL V0,R0,7F06C854 ;loop until none left -LHU T8,0000 (V0) -//7F06C884: return -LW RA,0014 (SP) -SLL T0,A2,0x2 ;T0=A2*4: group# * 4 -ADDU V0,T0,A3 ;V0= -JR RA -ADDIU SP,SP,0020 - -+_+ - -7F06BE00: A0930 probably has to do with damage detail or 'blood' effect - accepts: A0=p->obj.instance, A1=p->?, A2=p->?, A3=p->obj.instance+4 -ADDIU SP,SP,FFC8 -SW RA,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A0,0038 (SP) ;SP+38=A0: p->object instance -SW A3,0044 (SP) ;SP+44=A3: p->obj.instance+4 -//7F06BE2C: -LW S3,0000 (A0) -OR S4,A1,R0 -OR S5,A2,R0 -BEQ S3,R0,7F06BFDC -LW S6,0048 (SP) -//7F06BE40: -LW V0,0000 (S6) -LW S2,0004 (S3) -ADDIU S1,R0,0001 -BEQ V0,R0,7F06BE60 -OR S0,S2,R0 -OR S0,V0,R0 -BEQ R0,R0,7F06BE60 -SW R0,0000 (S6) -//7F06BE60: -BEQL S0,R0,7F06BFD4 -LW S3,0010 (S3) -BEQ S1,R0,7F06BE84 -NOP -LW V0,0014 (S0) -BEQ V0,R0,7F06BE84 -NOP -BEQ R0,R0,7F06BEC4 -OR S0,V0,R0 -//7F06BE84: -BEQ S0,R0,7F06BEBC -NOP -BNEL S0,S2,7F06BEA0 -LW V0,000C (S0) -BEQ R0,R0,7F06BEBC -OR S0,R0,R0 -//7F06BE9C: -LW V0,000C (S0) -BEQL V0,R0,7F06BEB4 -LW S0,0008 (S0) -BEQ R0,R0,7F06BEBC -OR S0,V0,R0 -//7F06BEB0: -LW S0,0008 (S0) -BNEZ S0,7F06BE8C -NOP -BEQL S0,R0,7F06BFD4 -LW S3,0010 (S3) -LHU V0,0000 (S0) -ADDIU S1,R0,0001 -ANDI T7,V0,00FF -ADDIU T8,T7,FFFF -SLTIU AT,T8,0018 -BEQ AT,R0,7F06BFC8 -SLL T8,T8,0x2 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,4598 (AT) -JR T8 -NOP -//7F06BEF4 types 01,02,03,15 -BEQ R0,R0,7F06BFC8 -OR S1,R0,R0 -//7F06BEFC types 0B,0C,0D,0E,0F,10 (identical routine) -BEQ R0,R0,7F06BFC8 -OR S1,R0,R0 -//7F06BF04 type 0A [+JAL 7F074C68] -LW A0,0000 (S3) -OR A1,S0,R0 -OR A2,S4,R0 -JAL 7F074C68 -OR A3,S5,R0 -BEQ V0,R0,7F06BF44 -NOP -LW T9,0000 (S3) -LW T0,0044 (SP) -SW T9,0000 (T0) -SW S0,0000 (S6) -LW T1,0038 (SP) -SW S3,0000 (T1) -LW T2,0004 (S0) -BEQ R0,R0,7F06BFE8 -LW V0,0000 (T2) -BEQ R0,R0,7F06BFC8 -OR S1,R0,R0 -//7F06BF4C type 11 [+JAL 7F074CAC] -LW A0,0000 (S3) -OR A1,S0,R0 -OR A2,S4,R0 -JAL 7F074CAC -OR A3,S5,R0 -BEQ V0,R0,7F06BF8C -NOP -LW T3,0000 (S3) -LW T4,0044 (SP) -SW T3,0000 (T4) -SW S0,0000 (S6) -LW T5,0038 (SP) -SW S3,0000 (T5) -LW T6,0004 (S0) -BEQ R0,R0,7F06BFE8 -LW V0,0000 (T6) -BEQ R0,R0,7F06BFC8 -OR S1,R0,R0 -//7F06BF94 type 08 [-JAL 7F06E970] -LW A0,0000 (S3) -JAL 7F06E970 -OR A1,S0,R0 -BEQ R0,R0,7F06BFC8 -NOP -//7F06BFA8 type 12 [-JAL 7F06E9BC] -LW A0,0000 (S3) -JAL 7F06E9BC -OR A1,S0,R0 -BEQ R0,R0,7F06BFC8 -NOP -//7F06BFBC type 17 [-JAL 7F06EA08] -LW A0,0000 (S3) -JAL 7F06EA08 -OR A1,S0,R0 -//7F06BFC8 default: 4,5,6,7,9,13,14,16,18 -BNEZ S0,7F06BE68 -NOP -//7F06BFD0: -LW S3,0010 (S3) -BNEL S3,R0,7F06BE44 -LW V0,0000 (S6) -//7F06BFDC: -LW T7,0038 (SP) -OR V0,R0,R0 -SW R0,0000 (T7) -LW RA,0034 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -JR RA -ADDIU SP,SP,0038 diff --git a/notes/GE Documentation/Display Lists and Object Generation/Various Microcode Constructors.txt b/notes/GE Documentation/Display Lists and Object Generation/Various Microcode Constructors.txt deleted file mode 100644 index be4672b..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/Various Microcode Constructors.txt +++ /dev/null @@ -1,183 +0,0 @@ -Documents various microcode constructors - -7F0ACD98: -OR V0,A0,R0 -ADDIU A0,A0,0008 -LUI T6,E700 -SW T6,0000 (V0) ;DL+0: rdp_pipesync (U) -SW R0,0004 (V0) ;DL+4: rdp_pipesync (L) -//7F0ACDAC: setothermode_h--cycle type: 1 cycle -OR V1,A0,R0 -ADDIU A0,A0,0008 -LUI T7,BA00 -ORI T7,T7,1402 ;T7=BA001402: shift 14 bits, 2 bits data -OR A1,A0,R0 -SW T7,0000 (V1) ;DL+0: rsp_uc05_setothermode_h (U) -SW R0,0004 (V1) ;DL+4: rsp_uc05_setothermode_h (L) -//7F0ACDC8: setothermode_h--rgb dither: disable -ADDIU A0,A0,0008 -LUI T8,BA00 -ORI T8,T8,0602 ;T8=BA000602: shift 6 bits, 2 bits data -ADDIU T9,R0,00C0 -OR A2,A0,R0 -SW T9,0004 (A1) ;DL+4: rsp_uc05_setothermode_h (L) -SW T8,0000 (A1) ;DL+0: rsp_uc05_setothermode_h (U) -//7F0ACDE4: setothermode_l -ADDIU A0,A0,0008 -LUI T0,B900 -LUI T1,0050 -ORI T1,T1,41C8 ;render mode: antialias, image read, clear on converge; converge ST: converge delta-ST wrap; depthmode: force blender; blender: blend colour in, blender -ORI T0,T0,031D ;T0=B900031D: shift 3 bits, 1D bits data -OR A3,A0,R0 -SW T0,0000 (A2) ;DL+0: setothermode_l (U) -SW T1,0004 (A2) ;DL+4: setothermode_l (L) -//7F0ACE04: rdp_setcombine -LUI T2,FCFF -LUI T3,FF2D -ORI T3,T3,FEFF ;T3=FF2DFEFF: b0=K5, b1=K5, Aa1=texel0, Ac1=primitive, d0=primitive, Ab0=0, Ad0=0, d1=primitive, Ab1=0, Ad1=0 -ORI T2,T2,97FF ;T2=FCFF97FF: a0=K5, c0=0, Aa0=texel0, Ac0=primitive, a1=K5, c1=0 -ADDIU A0,A0,0008 -SW T2,0000 (A3) ;DL+0: rdp_setcombine (U) -SW T3,0004 (A3) ;DL+4: rdp_setcombine (L) -//7F0ACE20: setothermode_h--texture perspective: none -OR V0,A0,R0 -ADDIU A0,A0,0008 -LUI T4,BA00 -ORI T4,T4,1301 ;T4=BA001301: shift 13 bits, 1 bit data -OR V1,A0,R0 -SW T4,0000 (V0) ;DL+0: rsp_uc05_setothermode_h (U) -SW R0,0004 (V0) ;DL+4: rsp_uc05_setothermode_h (L) -//7F0ACE3C: setothermode_l--alpha compare: none -LUI T5,B900 -ORI T5,T5,0002 ;T5=B9000002: shift 0 bits, 2 bits data -OR A1,A0,R0 -SW T5,0000 (V1) ;DL+0: setothermode_l (U) -SW R0,0004 (V1) ;DL+4: setothermode_l (L) -//7F0ACE54: setothermode_h--texture lod: tile -ADDIU A0,A0,0008 -LUI T6,BA00 -ORI T6,T6,1001 ;T6=BA001001: shift 10 bits, 1 bit data -OR A2,A0,R0 -SW T6,0000 (A1) ;DL+0: rsp_uc05_setothermode_h (U) -SW R0,0004 (A1) ;DL+4: rsp_uc05_setothermode_h (L) -//7F0ACE6C: setothermode_h--texture convert: filter -LUI T7,BA00 -ORI T7,T7,0903 ;T7=BA000803: shift 8 bits, 3 bits data -ADDIU A0,A0,0008 -ADDIU T8,R0,0C00 -SW T8,0004 (A2) ;DL+4: rsp_uc05_setothermode_h (L) -SW T7,0000 (A2) ;DL+0: rsp_uc05_setothermode_h (U) -//7F0ACE84: setothermode_h--texture lut: none -OR A3,A0,R0 -LUI T9,BA00 -ORI T9,T9,0E02 ;T9=BA000E02: shift E bits, 2 bits data -SW T9,0000 (A3) ;DL+0: rsp_uc05_setothermode_h (U) -SW R0,0004 (A3) ;DL+4: rsp_uc05_setothermode_h (L) -//7F0ACE98: texture filter application -LUI T0,8004 -LW T0,0E94 (T0) ;T0=80040E94: -ADDIU A0,A0,0008 -OR V0,A0,R0 -BEQ T0,R0,7F0ACED4 -LUI T3,BA00 -//7F0ACEB0: set texture filter: average -OR V0,A0,R0 -LUI T1,BA00 -ORI T1,T1,0C02 ;T1=BA000C02: shift C bits, 2 bits data -ADDIU T2,R0,3000 ;texture filter: average -SW T2,0004 (V0) ;DL+4: rsp_uc05_setothermode_h (L) -SW T1,0000 (V0) ;DL+0: rsp_uc05_setothermode_h (U) -ADDIU A0,A0,0008 -JR RA -OR V0,A0,R0 -//7F0ACED4: set texture filter: bi-level -ORI T3,T3,0C02 ;T1=BA000C02: shift C bits, 2 bits data -ADDIU T4,R0,2000 ;texture filter: bi-level -SW T4,0004 (V0) ;DL+4: rsp_uc05_setothermode_h (L) -SW T3,0000 (V0) ;DL+0: rsp_uc05_setothermode_h (U) -ADDIU A0,A0,0008 -JR RA -OR V0,A0,R0 - - -7F0ACEF0: E1A20 combiner: bayer, lod, perspective - accepts: A0=@output display list - returns: V0=final DL address -ADDIU A1,A0,0008 -LUI T6,E700 -SW T6,0000 (A0) ;DL+0= rdp_pipesync (U) -SW R0,0004 (A0) ;DL+4= rdp_pipesync (L) -LUI T7,BA00 -ORI T7,T7,0602 ;T7=BA000602: shift 6 bits, 2 bits of data -ADDIU A2,A1,0008 -ADDIU T8,R0,0040 ;T8=00000040: rgb dither: bayer -SW T8,0004 (A1) ;DL+C= rsp_uc05_setothermode_h (L) -SW T7,0000 (A1) ;DL+8= rsp_uc05_setothermode_h (U) -LUI T9,BA00 -ORI T9,T9,1301 ;T9=BA001301: shift 13 bits, 1 bit of data -ADDIU A3,A2,0008 -LUI T0,0008 ;T0=00080000: texture perspective: perspective -LUI T1,BA00 -SW T0,0004 (A2) ;DL+14=rsp_uc05_setothermode_h (L) -SW T9,0000 (A2) ;DL+10=rsp_uc05_setothermode_h (U) -ORI T1,T1,1001 ;T1=BA001001: shift 10 bits, 1 bit of data -LUI T2,0001 ;T2=00010000: texture lod: lod -SW T2,0004 (A3) ;DL+1C=rsp_uc05_setothermode_h (L) -SW T1,0000 (A3) ;DL+18=rsp_uc05_setothermode_h (U) -JR RA -ADDIU V0,A3,0008 ;V0=final DL address - -7F0ACF4C: E1A7C draw black box to screen - accepts: A0=@output display list, A1=upper left x, A2=upper left y, A3=lower right x, SP+10=lower right y - returns: V0=final DL address -LUI T2,B900 -LUI T3,0050 -OR V0,A0,R0 -ORI T3,T3,4240 ;T3=00504240: render mode: image read, converge ST: converge delta-ST full, depthmode: depth interpolate -ORI T2,T2,031D ;T2=B900031D: shift 3 bits, 1D data bits -SW T2,0000 (V0) ;DL+0= rsp_uc05_setothermode_l (U) -SW T3,0004 (V0) ;DL+4= rsp_uc05_setothermode_l (L) -LUI T6,FCFF -LUI T7,FFFD -ADDIU A0,A0,0008 -ORI T7,T7,F6FB ;T7=FFFDF6FB: b0=K5, b1=K5, Aa1=0, Ac1=0, d0=primitive, Ab0=0, Ad0=primitive, d1=primitive, Ab1=0, Ad1=primitive -ORI T6,T6,FFFF ;T6=FCFFFFFF: a0=K5, c0=0, Aa0=0, Ac0=0, a1=K5, c1=0 -SW T6,0000 (A0) ;DL+8= rdp_setcombine (U) -SW T7,0004 (A0) ;DL+C= rdp_setcombine (L) -ADDIU T0,A0,0008 -LUI T8,FA00 -SW T8,0000 (T0) ;DL+10=rdp_setprimcolour (U) -SW R0,0004 (T0) ;DL+14=rdp_setprimcolour (L): black -LW T9,0010 (SP) ;T9=SP+10: p->lower right y -LW T8,0000 (A3) ;T8=A3: lower right x -LUI AT,F600 -LW T4,0000 (T9) ;T4=@SP+10: lry -ANDI T9,T8,03FF ;T9=T8 & 0x3FF: lrx -ADDIU T1,T0,0008 -ANDI T5,T4,03FF ;T5=T4 & 0x3FF: lry -SLL T6,T5,0x2 ;T6=T5<<2: lry -OR T7,T6,AT -SLL T4,T9,0xE ;T4=T9< 1 then - (2048+(Twidth*(Bitdepth/8)/8)-1)/(Twidth*(Bitdepth/8)/8) - else (2048+1-1)/1 = 2048 - -================================================================================ - -F4 rdp_loadtile -width= (lrs-uls)/4 + 1 -height= (lrt-ult)/4 + 1 - -upper word -00FFF000 upper-left S -00000FFF upper-left T - -lower word -07000000 tile -00FFF000 lower-right S -00000FFF lower-right T - -================================================================================ - -F5 rdp_settile - -***************************************** -* * -* MOVED TO SETTILE.HTM * -* * -***************************************** - -================================================================================ - -F6 rdp_fillrect -This is predominantly used when mapping text or "2D" objects -colour is set either by rdp_setblendcolour or rdp_setfillcolour -upper word -00FFC000 lower right x -00003000 lr x fraction -00000FFC lower right y -00000003 lr y fraction - -lower word -00FFC000 upper left x -00003000 ul x fraction -00000FFC upper left y -00000003 ul y fraction - -================================================================================ - -F7 rdp_setfillcolour -Sets the fill colour. Uses 16bit colour it can fill 4px a cycle - -lower word -0000F800 red 5 -000007C0 green 5 -0000003E blue 5 -00000001 alpha 1 - -*Theroetically acording to sdk* -F8000000 red 5 -07C00000 green 5 -003E0000 blue 5 -00010000 alpha 1 - -if both are used it indicates a 32bit colour and will reduce the fill rate to 2px a cycle. Just use LowerHalfWord. - -================================================================================ - -F8 rdp_setfogcolour - -Sets the FOG Colour Register, a Special Use register of the Blender. Used for setting the Colour of FOG, the colour that vertextes will change to with distance. - -SetBlendColor is redefined as SetColor used by all Colour Registers of the Colour Combiner and Blender - -#define gsDPSetFogColor(r, g, b, a) //SetFOGColour Command. This is then Redefined as... - gsDPSetColor(G_SETFOGCOLOR, (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) - -********************************************* -* For Final Command structure see GSetColor. * -********************************************* - -================================================================================ - -F9 rdp_setblendcolour - -Sets the Blender Colour Register, a General Use register of the Blender. While given the name Blend, it can be used for any colour value. - -SetBlendColor is redefined as SetColor used by all Colour Registers of the Colour Combiner and Blender - -#define gsDPSetBlendColor(r, g, b, a) //SetBlendColour Command. This is then Redefined as... - gsDPSetColor(G_SETBLENDCOLOR, (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) - -********************************************* -* For Final Command structure see GSetColor. * -********************************************* - -================================================================================ - -FA rdp_setprimcolour -Sets the Primitive Colour Register, a General Use 6 Byte register of the Colour Combiner. While given the name Primitive, it can be used for any colour value. - -SetPrimColor is similar to SetColor used by all Colour Registers of the Colour Combiner and Blender except it accepts 2 more arguments, prim_min_level and prim_LOD_Frac - ---Zoinks Note------------------------------------------------------------ -|Blends into background (enviroment) colour. | -|Many fonts, for instance, use I images blended colour(prim)->alpha(env) | -------------------------------------------------------------------------- -Fonts may be true but top line is not strictly true. - -The structure of the Command is identical to Set Colour - -#define gsDPSetPrimColor(m, l, r, g, b, a) \ -{{ \ - (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | \ - _SHIFTL(l, 0, 8)), \ - (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | \ - _SHIFTL(a, 0, 8)) \ -}} - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa red, green, blue, alpha components - -================================================================================ - -FB rdp_setenvcolour G_SETENVCOLOR - -Sets the Environment Colour Register, a General Use register of the Colour Combiner. While given the name Environment, it can be used for any colour value. - -SetEnvColor is redefined as SetColor used by all Colour Registers of the Colour Combiner and Blender - -#define gsDPSetEnvColor(r, g, b, a) //SetEnvColour Command. This is then Redefined as... - gsDPSetColor(G_SETENVCOLOR, (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8))) - -********************************************* -* For Final Command structure see GSetColor. * -********************************************* - - -================================================================================ - -===== RDP GSetColor ========================================================== - - -typedef struct { - int cmd:8; //SetEnvColor, SetPrimColor, SetFogColor, SetBlendColor, SetFillColor, SetPrimDepth - unsigned char pad; - unsigned char prim_min_level; //00 - FF = 0.0 - 1.0 - unsigned char prim_level; //00 - FF = 0.0 - 1.0, possible use includes setting this dynamically at runtime to "morph" texture tiles, somewhat similar to peach/bowser except that you dont need to move. - unsigned long color; //RRGGBBAA -} Gsetcolor; - -upper word -FF000000 Command -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa - -================================================================================ - -FC rdp_setcombine - - -***************************************** -* * -* MOVED TO SETCOMBINE.HTM * -* * -***************************************** - - -================================================================================ - -FD rdp_settextureimage -#define gsSetImage(cmd, fmt, siz, width, i) \ -{ \ - _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ - _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12), \ - (unsigned int)(i) \ -} - -Bitmap -xxxx xxxx fmt sz xxxxxxx [--width---] -1111 1101 100 10 0000000000000000000 -also used for camspy effect in PD, but that's just crazy and not included here -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -depth 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width-1 - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - - -================================================================================ - -FE rdp_setdepthimage -Not certain, but seems like the format and size always equal 0, and width always equals 1 -Most likely only accepts a 1bit alpha table or something silly like that - -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width-1 - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - -================================================================================ - -FF rdp_setcolourimage -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - diff --git a/notes/GE Documentation/Display Lists and Object Generation/ucode05_old.txt b/notes/GE Documentation/Display Lists and Object Generation/ucode05_old.txt deleted file mode 100644 index aee7351..0000000 --- a/notes/GE Documentation/Display Lists and Object Generation/ucode05_old.txt +++ /dev/null @@ -1,1214 +0,0 @@ -Microcode05 - RSP SW 2.0G - GE/PD -superficially similiar to mario's, but tri4 and combiner differences -00 rsp noop -01 rsp_uc05_matrix -02 rsp_reserved0 -03 rsp_uc05_movemem -04 rsp_uc05_vertex -05 rsp_reserved1 -06 rsp_uc05_displaylist -07 rsp_uc05_colour -08 rsp_reserved3 -09 rsp_uc05_sprite2d - -AF rsp_uc05_load_ucode -B0 rsp_uc05_branch_z -B1 rsp_uc05_tri4 -B2 rsp_uc05_rdphalf_cont -B3 rsp_uc05_rdphalf_2 -B4 rsp_uc05_rdphalf_1 -B5 rsp_uc05_line3d -B6 rsp_uc05_cleargeometrymode -B7 rsp_uc05_setgeometrymode -B8 rsp_uc05_enddl -B9 rsp_uc05_setothermode_l -BA rsp_uc05_setothermode_h -BB rsp_uc05_texture -BC rsp_uc05_moveword -BD rsp_uc05_popmatrix -BE rsp_uc05_culldl -BF rsp_uc05_tri1 - -C0 rdp_noop - -C8 rdp_trifill -C9 rdp_trifillz -CA rdp_tritxtr -CB rdp_tritxtrz -CC rdp_trishade -CD rdp_trishadez -CE rdp_trishadetxtr -CF rdp_trishadetxtrz - -E4 rdp_texrect -E5 rdp_texrectflip -E6 rdp_loadsync -E7 rdp_pipesync -E8 rdp_tilesync -E9 rdp_fullsync -EA rdp_setkeygb -EB rdp_setkeyr -EC rdp_setconvert -ED rdp_setscissor -EE rdp_setprimdepth -EF rdp_setothermode -F0 rdp_loadtlut -F2 rdp_settilesize -F3 rdp_loadblock -F4 rdp_loadtile -F5 rdp_settile -F6 rdp_fillrect -F7 rdp_setfillcolour -F8 rdp_setfogcolour -F9 rdp_setblendcolour -FA rdp_setprimcolour -FB rdp_setenvcolour -FC rdp_setcombine -FD rdp_settextureimage -FE rdp_setdepthimage -FF rdp_setcolourimage - --------------- - -01 rsp_uc05_matrix -a 4x4 veiwing matrix. It can be multiplied and pushed to the stack. - -upper word -xxx0xxxx modelview mul nopush -xxx1xxxx projection mul nopush -xxx2xxxx modelview load nopush -xxx3xxxx projection load nopush -xxx4xxxx modelview mul push -xxx5xxxx projection mul push -xxx6xxxx modelview load push -xxx7xxxx projection load push - -lower word -address or offset in file - -- - -03 rsp_uc05_movemem - -upper word -xx80xxxx move viewport -xx82xxxx look at y -xx84xxxx look at x -xx86xxxx light [0] -xx88xxxx light [1] -xx8Axxxx light [2] -xx8Cxxxx light [3] -xx8Exxxx light [4] -xx90xxxx light [5] -xx92xxxx light [6] -xx94xxxx light [7] -xx96xxxx texture at T -xx98xxxx matrix [0] -xx9Axxxx matrix [1] -xx9Cxxxx matrix [2] -xx9Exxxx matrix [3] - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - -- - -04 rsp_uc05_vertex - -upper word -00F00000 number of points -000FFFFF number of bytes to grab - -lower word -0f000000 segment -00ffffff offset in point table - -- - -06 rsp_uc05_displaylist - -upper word -xx00xxxx push display list -xx01xxxx branch to display list - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - --------------------------- -07 rsp_uc05_colour -This PD-specific command declares offset to RGBA data - -upper word -00FF0000 number of bytes to grab, -4 -0000FFFF number of bytes to grab - -lower word -0f000000 segment -00ffffff address or offset in file - --------------------------- -AF rsp_load_ucode -Loads ucode -Preceeded by rdp_half_1 - -upper word -0000FFFF size of data section, -1 - -lower word -FFFFFFFF start text section - - --------------------------- -B0 rsp_branch_z -Branch if the z position of model is <= screen -Preceeded by rdp_half_1 - -upper word -00FFF000 vertex*5, specificly the z value -00000FFE vertex, specificly the z value - -lower word -in perspective mode: -(1-(near plane)/(screen depth)) / (1-(near plane)/(far plane)) * (zmax - zmin) - -in orthographic mode: -((screen depth)-(near plane))/((far plane)-(near plane)) * (zmax - zmin) - --or you can use the raw screen depth value - --------------------------- -B1 rsp_tri4 -Draws up to four triangles at a time. -Expects values from 0-F, corresponding with # points declared by vertex command. -Triangles with all points set to 0 are not drawn. - -upper word -0000F000 fourth triangle point 3 -00000F00 third triangle point 3 -000000F0 second triangle point 3 -0000000F first triangle point 3 - -lower word -f0000000 fourth triangle point 2 -0f000000 fourth triangle point 1 -00f00000 third triangle point 2 -000f0000 third triangle point 1 -0000f000 second triangle point 2 -00000f00 second triangle point 1 -000000f0 first triangle point 2 -0000000f first triangle point 1 - --------------------------- -B2 rsp_uc05_rdphalf_cont -Follows B4 rdphalf_1 command and generates the lower word of a 64bit rdp microcode op. Also acts as an indicator that the command list continues with additional pairs in ops following. To end this list, use a B4, B3 combination. -This is used only when operators longer than 64bits are in use. - -B4000000 CE80 01DB -B2000000 01DB 0028 -B4000000 013F C000 -B2000000 F8AA 0000 - In this context, each represents a position value, converted from float to short. - Most likely this constructs the field for the sky and water, creating commands using upper/lower word pairs: -CE8001DB 01DB0028 -013FC000 F8AA0000 - --------------------------- -B3 rsp_uc05_rdphalf_2 -Generates the lower word of a 64bit microcode op in conjunction with a rsp_rdphalf_1 op. -These words are then combined to form a single 64bit microcode op. -This command also marks the end of a rdphalf list using B4, B2 combinations. - -B4000000 0FDB 9B21 -B3000000 4F6E 0274 - --------------------------- -B4 rsp_uc05_rdphalf_1 -Preceeds "branch on z", "load ucode", and rdphalf_continued commands -Also can be used following textrects to set the s/t upper data word. In this case, rsp_rdphalf_2 is used to generate the lower data word. - -upper word -00000000 -lower word -FFFFFFFF display list to branch to for "branch on z" -FFFFFFFF start of data section for "load ucode" - --------------------------- -B5 rsp_line3d -draws a 3d line using two vectors (essentially points). Kinda like 3d functions. -Possibly used for gunfire, but highly unlikely. -width works in half-pixels, and the base value is 1.5 - -lower word -00FE0000 vector 0 -0000FE00 vector 1 -000000FF width (.5width + 1.5) - --------------------------- -B6 rsp_uc05_cleargeometrymode - -lower word -0x00000001 z buffer -0x00000002 texture -0x00000004 shade -0x00000200 shade smooth -0x00001000 cull front -0x00002000 cull back -0x00010000 fog -0x00020000 lighting -0x00040000 texture gen -0x00080000 texture gen linear -0x00100000 lod -0x00800000 clipping (Perfect Dark only) - -- - -B7 rsp_uc05_setgeometrymode -when following bitflags set, attributes applied to surfaces - -lower word -0x00000000 clipping -0x00000001 depth buffer -0x00000002 texture enable -0x00000004 shade (enable Gourand interpretation - if not set, use setprim/envcolour to make triangles visible) -0x000000F8 +only used in setup seemingly -0x00000200 shade smooth (uses vertex colours - if not set, first vertex defines the surface's colour) -0x00001000 cull front -0x00002000 cull back -0x00010000 fog -0x00020000 lighting -0x00040000 texture gen -0x00080000 texture gen linear -0x00100000 lod (doesn't seem like many games implement this...) -0x00800000 clipping (Perfect Dark only) - ---------------------------- -B8 rsp_enddl -Marks the end of a display list. -If the current list was called by an 06 command, returns from branch. -Otherwise, processing returns to the calling function. - -No options - ---------------------------- - -B9 rsp_uc05_setothermode_l -upper word -0000FF00 shift (PD only: 32-shift-length) - here are shift values for each of the various segments (hex): - 0 alpha compare - 2 depth source select - 3 render mode - 10 blender -000000FF length (PD only: length-1) - here are lengths for each of the various segments (hex): - 1 depth source - 2 alpha compare - 1D render mode (encompases render mode, converge ST, depth mode, and blender from below) - 10 blender - -lower word -alpha compare 0x00000000 none - 0x00000001 threshold - 0x00000003 dither -depth source 0x00000000 pixel - 0x00000004 primitive -render mode 0x00000008 antialias enable - 0x00000010 depth compare - 0x00000020 depth update - 0x00000040 image read - 0x00000080 clear on converge --converge ST 0x00000000 converge delta-ST clamp - 0x00000100 converge delta-ST wrap - 0x00000200 converge delta-ST full - 0x00000300 converge delta-ST save --depthmode 0x00000000 depth opa - 0x00000400 depth interpolate - 0x00000800 depth exclusive - 0x00000C00 depth decrement - 0x00001000 converge x alpha - 0x00002000 alpha converge selection - 0x00004000 force blender - 0x00008000 texture edge (0 in Perfect Dark) --blender 0x00010000 blend 1 machine - 0x00020000 blend alpha memory - 0x00040000 blend 1 - 0x00080000 blend 0 - 0x00100000 blend colour in - 0x00200000 blend colour memory - 0x00400000 blend colour blender - 0x00800000 blend colour fog - 0x01000000 blend alpha in - 0x02000000 blend alpha fog - 0x04000000 blend alpha shade - 0x08000000 blend 0 - 0x10000000 blend 1 machine - 0x20000000 blend alpha memory - 0x40000000 blend 1 - 0x80000000 blend 0 - -- - -BA rsp_uc05_setothermode_h -upper word: -0000FF00 shift (PD only: 32-shift-length) -000000FF length (PD only: length-1) - here are lengths for each of the various segments: - 4 blend mask - 2 alpha dither - 2 RGB dither - 1 combine key - 3 texture convertion - 2 texture filter - 2 texture LUT - 1 texture LOD - 2 texture detail - 1 texture persepective - 2 cycle type - 1 colour dither - 1 pipeline mode - - can also signify type of image data - 0 4bit - 1 8bit - 2 16bit - 3 32bit - -lower word: -0x0 blendmask - 0x0000000F -0x4 alpha dither - 0x00000000 pattern - 0x00000010 no pattern - 0x00000020 noise - 0x00000030 disable -0x6 rgb dither - 0x00000000 magic square - 0x00000040 bayer - 0x00000080 noise (enable in Perfect Dark) - 0x000000C0 disable -0x8 combine key - 0x00000000 none - 0x00000100 key -0x9 texture convert - 0x00000000 convert - 0x00000A00 filter convert - 0x00000C00 filter -0xC texture filter - 0x00000000 point - 0x00002000 bi-level interpretation - 0x00003000 average -0xE texture look-up table (lut) - 0x00000000 none - 0x00008000 rgba16 - 0x0000C000 ia16 -0x10 texture lod - 0x00000000 tile - 0x00010000 lod -0x11 texture detail - 0x00000000 clamp - 0x00020000 sharpen - 0x00040000 detail -0x13 texture perspective - 0x00000000 none - 0x00080000 perspective -0x14 cycle type - 0x00000000 1cycle - 0x00100000 2cycle - 0x00200000 copy - 0x00300000 fill -0x16 colour dither - 0x00000000 disable (note: Perfect Dark does not use this flag!) - 0x00400000 enable -0x17 pipeline mode - 0x00000000 n primitive - 0x00800000 1 primitive - -- - -BB rsp_uc05_texture -Needs to be set on to texture following triangles, ie: BB002801 FFFFFFFF -Can also map one of 6 pre-loaded imagemaps to triangles. -s and t refer to the two mapping pins included with each point struct. -Ordinarily don't set these masks, unless using preloaded image or surfaces do not declare ST. - -upper word -00FF0000 bowtie of some kind. +4 chops one scanline from surface -00003800 level. Refers to tile size per chart -00000700 tile t0 -000000FF on(1) or off(0) - -lower word -FFFF0000 s -0000FFFF t - -level image binary total size -7 2000 -6 1000 -5 800 -4 400 -3 200 -2 100 -1 80 -0 0 (more likely no image) -As in 32x32 16bit = 800, 32x64 ia = 1000. Max of 2000, which is actual limit of RSP dmem transfer. - -- - -BC rsp_uc05_moveword -by default moves entire matrix. Otherwise, this dictates what stuff is being fiddled with - -upper word -types 00000000 matrix - 00020000 #lights - 00040000 clip - 00060000 segment - 00080000 fog - 000A0000 light colour - 000C0000 point - 000E0000 perspective normal -offsets: - 00000000 integer matrix -(per 00000080 floating-point matrix -type) 00000000 matrix XX XY - 00000010 matrix XZ XW - 00000020 matrix YX YY - 00000030 matrix YZ YW - 00000040 matrix ZX ZY - 00000050 matrix ZZ ZW - 00000060 matrix WX WY - 00000070 matrix WZ WW - 00000000 light vectors or fog - 00000010 clip -x - 00000030 clip -y - 00000050 clip +x - 00000070 clip +y - 0000003C segment 0-F - 00000000 light a - 00000010 light b - 00000380 light 0-8 - 00000040 point RGBA - 00000050 point ST - 00000060 point XY screen - 00000070 point Z screen - -lower word -if fog/light not selected, set address - 0x0f000000 segment - 0x00ffffff address or offset in file -if fog, fog depth values (2 16bit integers) -if light colour, rgb+fog (ie. FF000001 for red fog, active cloud layer) - ---------------------------- -BD rsp_popmatrix adrs,len,idx,ofs -upper word -00FF0000 Perfect Dark: offset, typically 0 -0000FF00 Perfect Dark: size of block, -1 (0x3F) -000000FF Perfect Dark: 2 - -lower word -FFFFFFFF matrix number to pop or address of matrix (num*64) - ---------------------------- -BE rsp_culldl -upper word -0000FFFE start - -lower word -0000FFFE end - ---------------------------- -BF rsp_tri1 -Create one triangle. -Divide each value by 10 (0xA) to return the point number in current list. Note the point order is opposite that for the tri4 command. -Requires a vertex list offset is set by rsp_vertex command. -ie. 00 point 0 - 0A point 1 - ... - 8C point 14 - 96 point 15 - -lower word -00ff0000 point 1 -0000ff00 point 2 -000000ff point 3 - ---------------------------- -RSP generated RDP commands: - These are formulaic triangle draw commands, generated at runtime. - Note you can also create these with rsp_half commands. - -Triangles 4 opcodes -upper word 1: -C8000000 base for all command types -06000000 triangle type - 0 fill - 1 texture - 2 shade -01000000 z-buffer triangle -00800000 flip? -00070000 tile -00003FFF y1 - -lower word 1: -3FFF0000 y2 -00003FFF y3 - -upper word 2: -0000FFFF x1 - -lower word 2: -0000FFFF change x1y1 (z1?) - -upper word 3: -0000FFFF x2 - -lower word 3: -0000FFFF change x2y2 (z2?) - -upper word 4: -0000FFFF x3 - -lower word 4: -0000FFFF change x3y3 (z3?) - - -+ if shading present add 8 opcodes -upper word 1: -FFFF0000 red.u -0000FFFF green.u - -lower word 1: -FFFF0000 blue.u -0000FFFF alpha.u - -upper word 2: -FFFF0000 change in red over x.u -0000FFFF change in green over x.u - -lower word 2: -FFFF0000 change in blue over x.u -0000FFFF change in alpha over x.u - -upper word 3: -FFFF0000 red.l -0000FFFF green.l - -lower word 3: -FFFF0000 blue.l -0000FFFF alpha.l - -upper word 4: -FFFF0000 change in red over x.l -0000FFFF change in green over x.l - -lower word 4: -FFFF0000 change in blue over x.l -0000FFFF change in alpha over x.l - -upper word 5: -FFFF0000 change in red over z.u (?) -0000FFFF change in green over z.u (?) - -lower word 5: -FFFF0000 change in blue over z.u (?) -0000FFFF change in alpha over z.u (?) - -upper word 6: -FFFF0000 change in red over y.u -0000FFFF change in green over y.u - -lower word 6: -FFFF0000 change in blue over y.u -0000FFFF change in alpha over y.u - -upper word 7: -FFFF0000 change in red over z.l (?) -0000FFFF change in green over z.l (?) - -lower word 7: -FFFF0000 change in blue over z.l (?) -0000FFFF change in alpha over z.l (?) - -upper word 8: -FFFF0000 change in red over y.l -0000FFFF change in green over y.l - -lower word 8: -FFFF0000 change in blue over y.l -0000FFFF change in alpha over y.l - - -+ if texture present add 8 opcodes -upper word 1: -FFFF0000 S.u -0000FFFF T.u - -lower word 1: -FFFF0000 W.u -0000FFFF H.u - -upper word 2: -FFFF0000 change in s over x.u -0000FFFF change in t over x.u - -lower word 2: -FFFF0000 change in width over x.u -0000FFFF change in height over x.u - -upper word 3: -FFFF0000 S.l -0000FFFF T.l - -lower word 3: -FFFF0000 W.l -0000FFFF H.l - -upper word 4: -FFFF0000 change in s over x.l -0000FFFF change in t over x.l - -lower word 4: -FFFF0000 change in width over x.l -0000FFFF change in height over x.l - -upper word 5: -FFFF0000 change in s over z.u (?) -0000FFFF change in t over z.u (?) - -lower word 5: -FFFF0000 change in width over z.u (?) -0000FFFF change in height over z.u (?) - -upper word 6: -FFFF0000 change in s over y.u -0000FFFF change in t over y.u - -lower word 6: -FFFF0000 change in width over y.u -0000FFFF change in height over y.u - -upper word 7: -FFFF0000 change in s over z.l (?) -0000FFFF change in t over z.l (?) - -lower word 7: -FFFF0000 change in width over z.l (?) -0000FFFF change in height over z.l (?) - -upper word 8: -FFFF0000 change in s over y.l -0000FFFF change in t over y.l - -lower word 8: -FFFF0000 change in width over y.l -0000FFFF change in height over y.l - - -+ if Z buffer present add 2 opcodes -upper word 1: -FFFFFFFF zbuf - -lower word 1: -FFFFFFFF change zbuf over x - -upper word 2: -FFFFFFFF change zbuf over z (?) - -lower word 2: -FFFFFFFF change zbuf over y - - -C8 rdp_trifill -C9 rdp_trifillz -CA rdp_tritxtr -CB rdp_tritxtrz -CC rdp_trishade -CD rdp_trishadez -CE rdp_trishadetxtr -CF rdp_trishadetxtrz - ------------ -E4 rdp_texrect -Draws text in rectangles, especially fonts. -Virtually all 2D objects are mapped with this type unless sprite microcode in use. -64bit command. First 32 bits set size of tile, second 32 bits image alignment - -upper word -00FFF000 upper left x -00000FFF upper left y - -lower word -07000000 tile -00FFF000 lower right x -00000FFF lower right y - -command 2 -upper word -FFFF0000 upper left s -0000FFFF upper left t - -lower word -FFFF0000 change in s per change in x (dsdx, as in delta-s delta-x) -0000FFFF dtdy ------------ -E5 rdp_texrectflip -Suspiciously similiar to E4: rdp_texrect - -upper word -00FFF000 lower right x -00000FFF lower right y - -lower word -07000000 tile -00FFF000 upper left x -00000FFF upper left y - -command 2 -upper word -FFFF0000 upper left t -0000FFFF upper left s - -lower word -FFFF0000 change in s per change in x (dsdx, as in delta-s delta-x) -0000FFFF dtdy - --------------------------- -E6 rdp_loadsync -Called after any data request to allow processor time to load data. - -No options - --------------------------- -E7 rdp_pipesync -The pipe is used as a generic term for peripheral interface or co-processor activity. -Waits for data to be loaded from ROM or RAM, or waits for co-processor to clear. -Display lists will almost always start with this command to ensure all previous display lists are completely executed. - -No options - --------------------------- -E8 rdp_tilesync -Called after requesting tile data load. Waits for processor activity to end. - -No options - --------------------------- -E9 rdp_fullsync -Combined effect of all syncs. Not common, actually. - -No options - --------------------------- -EA rdp_setkeygb -Sets green + blue key components; typically used with EB: rdp_setkeyr below - -upper word -00FFF000 Water: Green -00000FFF Water: Blue - -lower word -FF000000 Cloud: Green -00FF0000 Sky: Green -0000FF00 Cloud: Blue -000000FF Sky: Blue - --------------------------- -EB rdp_setkeyr -Sets red key component; typically used with EA: rdp_setkeygb above - -upper word - -lower word -0FFF0000 Water: Red -0000FF00 Cloud: Red -000000FF Sky: Red - --------------------------- -EC rdp_setconvert -All values are 9 bits; note that K2 spans both upper and lower word - -upper word -003FE000 k0 -00001FF0 k1 -0000000F k2 (upper) - -lower word -F8000000 k2 (lower) -07FC0000 k3 -0003FE00 k4 -000001FF k5 - --------------------------- -ED rdp_setscissor - -upper word -00FFF000 upper left x -00000FFF upper left y - -lower word -02000000 interlace -01000000 odd when interlaced -00FFF000 lower right x -00000FFF lower right y - --------------------------- -EE rdp_setprimdepth - -lower word -FFFF0000 depth -0000FFFF change in depth - --------------------------- -EF rdp_setothermode -This is a crazy command. It seems like it can take a whole slew of different arguments! - -upper word -00FFFFFF uses options from lower word of setothermode_h - Pipeline Mode - Cycle Type - Texture Perspective - Texture Detail - Texture LOD - Texture LUT - Texture Filter - Texture Convert - Combine Key - colour Dither - Alpha Dither - -lower word -FFFFFFFF uses these options from lower word of setothermode_l - alpha compare - depth source - render mode - --------------------------- -F0 rdp_loadtlut -used to load texture look-up tables (palettes); technically same format as the other load types -upper word -00FFF000 x0 (# entries) -00000FFF y0 - -lower word -07000000 tile -00FFF000 count/x1 (size in bytes of palette) -00000FFF palette start/y1 - -- - -F2 rdp_settilesize -Sets size of image to be mapped. Best if it actually matches the image's proportions... -Screwing up the mapping aspect can seriously damage the tile's appearance. -width=(lrs-uls)/4 + 1 -height=(lrt-ult)/4 + 1 - -upper word -00FFF000 upper left s -00000FFF upper left t - -lower word -07000000 tile -00FFF000 lower right s -00000FFF lower right t - -- - -F3 rdp_loadblock -used to load blocks of either image or palette data. - -upper word -00FFF000 upper left s -00000FFF upper left t - -lower word -07000000 tile -00FFF000 lower right s -00000FFF lower right t - -- - -F4 rdp_loadtile -Loads a tile (image) into texture memory. Implies attributes have or will be set via rdp_settile. -Only 2k can be loaded in a single command, with a 4k limit. -width= (lrs-uls)/4 + 1 -height= (lrt-ult)/4 + 1 - -upper word -00FFF000 upper-left S -00000FFF upper-left T - -lower word -07000000 tile -00FFF000 lower-right S -00000FFF lower-right T - -- - -F5 rdp_settile -Applies given attibutes to a tile to ensure proper interpretation. This may be executed before or after the tile has been loaded. -ie. F5600600 00FD8360 would load a 48x48 intensity+alpha image with 4bit pixel data and clamping the corners to the s/t given in the point data. -If palettes are loaded, you can set the palette bits to swap palettes at runtime. - -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x0003FE00 line - 0x000001FF tmem - -lower word -07000000 tile -00F00000 palette -00080000 clamp t -00040000 mirror t -0003C000 mask t -00003C00 shift t -00000200 clamp s -00000100 mirror s -000000F0 mask s -0000000F shift s - -- - -F6 rdp_fillrect -This is predominantly used when mapping text or "2D" objects -colour is set either by rdp_setblendcolour or rdp_setfillcolour -upper word -00FFC000 lower right x -00003000 lr x fraction -00000FFC lower right y -00000003 lr y fraction - -lower word -00FFC000 upper left x -00003000 ul x fraction -00000FFC upper left y -00000003 ul y fraction - -- - -F7 rdp_setfillcolour -Sets the fill colour. Uses 16bit colour - -lower word -0000F800 red -000007C0 green -0000003E blue -00000001 alpha - -- - -F8 rdp_setfogcolour -Sets fog colour. Uses 32bit colour - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa red, green, blue, alpha components - -- - -F9 rdp_setblendcolour -Sets blend colour. Similar to rdp_setfillcolour, except 32bit colour -Used by the hardware blended when option selected. - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa red, green, blue, alpha components - -- - -FA rdp_setprimcolour -Sets the foreground colour applied to generated triads. -Blends into background (enviroment) colour. -Many fonts, for instance, use I images blended colour(prim)->alpha(env) -A special note is that by setting the minimum level you can use a LOD effect with the current texture. - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa red, green, blue, alpha components - -- - -FB rdp_setenvcolour -Sets background colour applied to generated triads. -If a IA image is used, the black is the enviroment colour, the white the primary colour. - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa - -- - -FC rdp_setcombine -upper word -00F00000 a0 -000F8000 c0 -00007000 Aa0 -00000E00 Ac0 -000001E0 a1 -0000001F c1 - -lower word -F0000000 b0 -0F000000 b1 -00E00000 Aa1 -001C0000 Ac1 -00038000 d0 -00007000 Ab0 -00000E00 Ad0 -000001C0 d1 -00000038 Ab1 -00000007 Ad1 - -0 combined -1 texel0 -2 texel1 -3 primitive -4 shade -5 enviroment -6 key center - scale - 1 -7 combined alpha -8 texel0 alpha -9 texel1 alpha -A primitive alpha -B shade alpha -C enviroment alpha -D LOD fraction -E primitive LOD fraction -F K5 -1F 0 - -alpha combiner: -0 combined - LOD fraction (Acn types) -1 texel0 -2 texel1 -3 primitive -4 shade -5 enviroment -6 primitive LOD fraction - 1 -7 0 - -These are some common pattern names. They're probably from source, since they were gleaned from the internal names you see in some roms. At the very least, the patterns are very consistant from game to game. -Note that there are two sets of these for each command: x0 and x1 - -internal names a c Alpha0 Alphc b d Alphb Alphd -PRIMITIVE 0 0 0 prim. 0 0 0 prim. -SHADE 0 0 0 shade 0 0 0 shade -SHADEDECALA 0 0 0 shade 0 0 0 texel0 -DECALRGB 0 0 0 texel0 0 0 0 shade -DECALRGBA 0 0 0 texel0 0 0 0 texel0 -ADDRGB 1 0 texel0 shade 0 0 0 shade -ADDRGBDECALA 1 0 texel0 shade 0 0 0 texel0 -MODULATERGB -MODULATEI texel0 0 shade 0 0 0 0 shade -MODULATERGBA -MODULATEIA texel0 0 shade 0 texel0 0 shade 0 -MODULATERGBDECALA -MODULATEIDECALA texel0 0 shade 0 0 0 0 texel0 -MODULATERGB_PRIM -MODULATEI_PRIM texel0 0 prim. 0 0 0 0 prim. -MODULATERGBA_PRIM -MODULATEIA_PRIM texel0 0 prim. 0 texel0 0 prim. 0 -MODULATERGBDECALA_PRIM -MODULATEIDECALA_PRIM texel0 0 prim. 0 0 0 0 texel0 -REFLECTRGB env. 0 texel0 shade 0 0 0 shade -REFLECTRGBDECALA env. 0 texel0 shade 0 0 0 texel0 -BLENDI env. shade texel0 shade 0 0 0 shade -BLENDIA env. shade texel0 shade texel0 0 shade 0 -BLENDIDECALA env. shade texel0 shade 0 0 0 texel0 -BLENDRGBA texel0 shade texel0 shade 0 0 0 shade -BLENDRGBDECALA texel0 shade texel0 shade 0 0 0 texel0 -BLENDPE prim. env. texel0 env. texel0 0 shade 0 -BLENDPEDECALA prim. env. texel0 env. 0 0 0 texel0 -BLENDPE_ALT env. prim. texel0 prim. texel0 0 shade 0 -BLENDPEDECALA_ALT env. prim. texel0 prim. 0 0 0 texel0 -HILITERGB prim. shade texel0 shade 0 0 0 shade -HILITERGBA prim. shade texel0 shade prim. shade texel0 shade -HILITERGBDECALA prim. shade texel0 shade 0 0 0 texel0 -TWOcolourTEX prim. shade texel0 shade 0 0 0 shade - -- - -FD rdp_settextureimage -also used for camspy effect in PD, but that's just crazy and not included here -these attributes are used to determine image tile format -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -depth 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width-1 - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - -- - -FE rdp_setdepthimage -Not certain, but seems like the format and size always equal 0, and width always equals 1 -Most likely only accepts a 1bit alpha table or something silly like that - -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width-1 - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - -- - -FF rdp_setcolourimage -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - diff --git a/notes/GE Documentation/GE.icl b/notes/GE Documentation/GE.icl deleted file mode 100644 index 9ade48b..0000000 Binary files a/notes/GE Documentation/GE.icl and /dev/null differ diff --git a/notes/GE Documentation/GameShark - GE specific/Aztec Message.txt b/notes/GE Documentation/GameShark - GE specific/Aztec Message.txt deleted file mode 100644 index b2c3288..0000000 --- a/notes/GE Documentation/GameShark - GE specific/Aztec Message.txt +++ /dev/null @@ -1,93 +0,0 @@ -I made a few different flavors of this clipping hack. Some are large, some not so much. -There was a *slight* problem. The way the tiles are divided one needed to be pushed and a tile placed in the right corner. That just expands the number of codes necessary. -Also included are codes to jump to the blast door platform from the platform with the console on it. - -As a note, the reason clipping hacks never became popular is related to how players are either at the top or the bottom of ladders. There is no inbetween. In all honestly though this isn't nearly as bad as Temple. - -First, these are used to just drop from the platform to the blast doors or from the blast doors to the floor. They are very short but you usually can't climb them back up. (the facility sidestep trick works though) - -You can still occationaly slip out on the left side, which is actually correctable but does increase the codeset a bit. At that point, the platform->blast needs changing too, which is just silly. ------------ -"Platform->Blast #2" .off -811D198A 0A68 -811D16CA 0ABF - -"Blast->Floor #8" .off -811D15AA 0A82 -811D17A2 0A44 -811D1588 0330 -811D15B0 0330 -811D15C8 0330 -811D15F0 0330 -811D1688 0330 -811D16B0 0330 - ------------ -This replaces the blast->floor code from above. It lets a player climb the wall or drop down from above. You can still use the simple Platform->Blast codes if you want. -Attempts to make a shorter 4-sided tile caused some issues, so you wind up with two triangles. ------------ -"Blast->Floor #30" .off -811D15AA 0A24 -811D17A2 0A20 -811D1588 0330 -811D15B0 0330 -811D15C8 0330 -811D15F0 0330 -811D1688 0330 -811D16B0 0330 -801D1478 0038 -811D147C FB6C -811D147E 00D0 -811D1480 0330 -811D1484 FB6C -811D1486 0034 -811D1488 015B -811D148A 0A82 -811D148C FB6C -811D148E 0034 -811D1490 0330 -801D1498 0038 -811D149C FB6C -811D149E 00D0 -811D14A0 0330 -811D14A2 0A44 -811D14A4 FB6C -811D14A6 00D0 -811D14A8 011A -811D14AC FB6C -811D14AE 0034 -811D14B0 015B - ---------------- -Likewise, this creates a ladder up to the high platform. Replaces the old code, can use with either blast->floor ---------------- -"Platform->Blast #24" .off -811D198A 0A28 -811D16CA 0A2C -801D14B8 0033 -811D14BC FB6C -811D14BE 00D0 -811D14C0 011A -811D14C4 FB6C -811D14C6 016D -811D14C8 0057 -811D14CA 0ABF -811D14CC FB6C -811D14CE 016D -811D14D0 015B -801D14D8 0033 -811D14DC FB6C -811D14DE 00D0 -811D14E0 011A -811D14E2 0A68 -811D14E4 FB6C -811D14E6 00D0 -811D14E8 0057 -811D14EC FB6C -811D14EE 016D -811D14F0 0057 - --------------- -There 'ya go. 54 codes for full ladder support. Tested it on console 4 player, so hopefully it will work on emulators. - --Zoinkity diff --git a/notes/GE Documentation/GameShark - GE specific/GE music.txt b/notes/GE Documentation/GameShark - GE specific/GE music.txt deleted file mode 100644 index 6177b53..0000000 --- a/notes/GE Documentation/GameShark - GE specific/GE music.txt +++ /dev/null @@ -1,173 +0,0 @@ -8004EAF0: 41A00000.41A83724.00000000.00000000 -8004EB00: 80277DC0.00000000.00000000.00000000 - -GE Music Mods for solo and multiplayer themes - -currently playing theme: 80024337 -secondary theme: 8002433f -currently playing background: 80024347 -format: -00SS MMMM BBBB XXXX -[S]tage number (matches setup value for stage) -[M]ain theme -[B]ackground music -[X]-track (theme played when some action occurs on screen ie: time running out) - Swapping stage numbers assigns that music line to the stage. - You can add themes to exclusive multiplayers this way (stack, caves, etc.) - -address to change music is given, followed by default. - -stage # stage name main theme background x track ---------------------------------------------------------------------- -9 BUNKER 1 8104EB12 000F 8104EB14 FFFF 8104EB16 0029 -14 SILO 8104EB1A 000C 8104EB1C FFFF 8104EB1E 0026 -16 STATUE 8104EB22 0011 8104EB24 FFFF 8104EB26 003D -17 CONTROL 8104EB2A 0008 8104EB2C FFFF 8104EB2E 0012 -18 ARCHIVES 8104EB32 000B 8104EB34 FFFF 8104EB36 0025 -19 TRAIN 8104EB3A 0003 8104EB3C FFFF 8104EB3E 001D -1A FRIGATE 8104EB42 000A 8104EB44 FFFF 8104EB46 003E -1B BUNKER 2 8104EB4A 0010 8104EB4C FFFF 8104EB4E 002A -1C AZTEC 8104EB52 0019 8104EB54 FFFF 8104EB56 002E -1D STREETS 8104EB5A 000E 8104EB5C FFFF 8104EB5E 0028 -1E DEPOT 8104EB62 0004 8104EB64 FFFF 8104EB66 0020 -20 EGYPT 8104EB6A 0016 8104EB6C FFFF 8104EB6E 002F -21 DAM 8104EB72 0009 8104EB74 FFFF 8104EB76 0035 -22 FACILITY 8104EB7A 0007 8104EB7C FFFF 8104EB7E 001F -23 RUNWAY 8104EB82 0032 8104EB84 FFFF 8104EB86 0033 -24 SURFACE 1 8104EB8A 0039 8104EB8C FFFF 8104EB8E 0035 -25 JUNGLE 8104EB92 0037 8104EB94 FFFF 8104EB96 002B -27 CAVERNS 8104EB9A 001A 8104EB9C FFFF 8104EB9E 0015 -28 CITADEL 8104EBA2 0006 8104EBA4 FFFF 8104EBA6 FFFF -29 CRADLE 8104EBAA 0013 8104EBAC FFFF 8104EBAE 0030 -2A SHO 8104EBB2 001C 8104EBB4 FFFF 8104EBB6 FFFF -2B SURFACE 2 8104EBBA 001C 8104EBBC 0035 8104EBBE 003C -36 CUBA 8104EBC2 0031 8104EBC4 FFFF 8104EBC6 FFFF - -FFFF as main theme allows random music in multiplayer -FFFF is null in all other fields - -MULTIPLAYER SOUNDTRACKS (theme only) -8004EBD1 0003 -8004EBD3 0004 -8004EBD5 0005 -8004EBD7 0006 -8004EBD9 0007 -8004EBDB 0008 -8004EBDD 0009 -8004EBDF 000A -8004EBE1 000B -8004EBE3 000C -8004EBE5 000D -8004EBE7 000E -8004EBE9 000F -8004EBEB 0010 -8004EBED 0011 -8004EBEF 0012 -8004EBF1 0013 -8004EBF3 0015 -8004EBF5 0016 -8004EBF7 0019 -8004EBF9 001A -8004EBFB 001C -8004EBFD 001D -8004EBFF 001F -8004EC01 0020 -8004EC03 0021 -8004EC05 0022 -8004EC07 0023 -8004EC09 0024 -8004EC0B 0025 -8004EC0D 0026 -8004EC0F 0028 -8004EC11 0029 -8004EC13 002A -8004EC15 002B -8004EC17 002D -8004EC19 002E -8004EC1B 002F -8004EC1D 0030 -8004EC1F 0032 -8004EC21 0034 -8004EC23 0038 -8004EC25 0039 -below may be filled in to add additional multiplayer music -8004EC27 0000 -8004EC29 0000 -8004EC2B 0000 -8004EC2D 0000 -8004EC2F 0000 -8004EC31 0000 -8004EC33 0000 - -Music Values -index# rom other values ref in ram -00 41998c 0061002a 802d1c14 no music! -01 4199b6 02db01d6 802d1c1c solo death abrev. -02 419b8c 0ef208ae 802d1c24 intro (during eye) - -03 41a43a 149e0bea 802d1c2c train -04 41b024 17840da0 802d1c34 depot -05 41bdc4 17dd0d98 802d1c3c Multiplayer Theme -06 41cb5c 171f0dc0 802d1c44 citadel -07 41d91c 0fee0ace 802d1c4c facility -08 41e3ea 12200b5e 802d1c54 control -09 41ef48 16c30e04 802d1c5c dam -0a 41fd4c 14570de0 802d1c64 frigate -0b 420b2c 0db80954 802d1c6c archives -0c 421480 17bb0e70 802d1c74 silo -0d 4222f0 172b0f6c 802d1c7c Multiplayer Theme -0e 42325c 155d0d02 802d1c84 streets -0f 423f5e 0aad0672 802d1c8c bunker 1 -10 4245d0 095f0680 802d1c94 bunker 2 -11 424c50 0e370998 802d1c9c statue -12 4255e8 0dc909da 802d1ca4 elevator (control) -13 425fc2 16920d60 802d1cac cradle -14 426d22 0060002a 802d1cb4 -15 426d4c 09d80646 802d1cbc elevator (w.c.) -16 427392 15ea0d9a 802d1cc4 egyptian -17 42812c 05d803e2 802d1ccc folders -18 42850E 02fe01f2 802d1cd4 watch music -19 428700 14840c72 802d1cdc aztec -1a 429372 17480e2c 802d1ce4 water caverns -1b 42a19e 05600366 802d1cec death solo - -1c 42a504 17820db6 802d1cf4 surface 2 -1d 42b2ba 0e7908a0 802d1cfc train x -1e 42bb5a 0060002a 802d1d04 -1f 42bb84 0e8a0958 802d1d0c facility x -20 42c4dc 0d1d07bc 802d1d14 depot x -21 42cc98 09330548 802d1d1c control x -22 42d1e0 0cc00754 802d1d24 water caverns x -23 42d934 094b0520 802d1d2c dam x -24 42de54 09ce05c2 802d1d34 frigate x -25 42e416 0c8a0724 802d1d3c archives x -26 42eb3a 0e8208f4 802d1d44 silo x -27 42f42e 0060002a 802d1d4c egyptian x -28 42f458 0ac2066c 802d1d54 streets x -29 42fac4 0d3007a6 802d1d5c bunker 1 x -2a 43026a 0ac6064e 802d1d64 bunker 2 x -2b 4308b8 0e600816 802d1d6c jungle x -2c 4310ce 05da0432 802d1d74 intro swoosh + drone -2d 431500 0be506b8 802d1d7c statue x -2e 431bb8 0ec508d6 802d1d84 aztec x -2f 43248e 0f1408b0 802d1d8c egypt x -30 432d3e 0c3606ca 802d1d94 cradle x -31 433408 0e0d084a 802d1d9c cuba -32 433c52 16160d1e 802d1da4 runway -33 434970 04f302da 802d1dac runway plane -34 434c40 0ca10728 802d1db4 Multiplayer Theme -35 435372 06bb0522 802d1dbc wind blowing (surface 2) -36 435894 02ed020c 802d1dc4 guitar gliss in multi death -37 435aa0 09970788 802d1dcc jungle -38 436228 0b070622 802d1dd4 runway x -39 43684a 170c0d68 802d1ddc surface 1 -3a 4375b2 044602c8 802d1de4 multiplayer death -3b 43787a 0ca10728 802d1dec surface 2 x -3c 437fa2 037b029c 802d1df4 surface 2 ending - -3d 43823e 01db0166 802d1dfc part of statue theme -3e 4383a4 035b02b6 802d1e04 end of ? theme ----------------- -sound effects -ROM 2EBDE0 -802C8A08 or 802CD428 for table/ram \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/MOD ALL OBJECTS.txt b/notes/GE Documentation/GameShark - GE specific/MOD ALL OBJECTS.txt deleted file mode 100644 index 8c39381..0000000 --- a/notes/GE Documentation/GameShark - GE specific/MOD ALL OBJECTS.txt +++ /dev/null @@ -1,1734 +0,0 @@ -size alterations: -16 Bond's Weapons (Don't Use With Shrink/Enlarge Codes) 81053E04 ???? -17 Bond's Perspective (Don't Use With Shrink/Enlarge Codes) 810552FC ???? -18 Enemies 81051D90 ???? - - -GoldenEye 007 -C:double alarm 0000 value 1|8103A22A ????|Viper187 & Delta FORCE -C:double alarm 0000 value 2|8103A22E ????|Viper187 & Delta FORCE -C:double alarm 0000 size 1|8103A230 ????|Viper187 & Delta FORCE -C:double alarm 0000 size 2|8103A232 ????|Viper187 & Delta FORCE|most size changes only require the first size digits - -C:alarm 0001 value 1|8103A236 ????|Viper187 & Delta FORCE -C:alarm 0001 value 2|8103A23A ????|Viper187 & Delta FORCE -C:alarm 0001 size 1|8103A23C ????|Viper187 & Delta FORCE -C:alarm 0001 size 2|8103A23E ????|Viper187 & Delta FORCE - -C:pyramid 0002 value 1|8103A242 ????|Viper187 & Delta FORCE -C:pyramid 0002 value 2|8103A246 ????|Viper187 & Delta FORCE -C:pyramid 0002 size 1|8103A248 ????|Viper187 & Delta FORCE -C:pyramid 0002 size 2|8103A24A ????|Viper187 & Delta FORCE - -C:brown ammo box 0003 value 1|8103A24E ????|Viper187 & Delta FORCE -C:brown ammo box 0003 value 2|8103A252 ????|Viper187 & Delta FORCE -C:brown ammo box 0003 size 1|8103A254 ????|Viper187 & Delta FORCE -C:brown ammo box 0003 size 2|8103A256 ????|Viper187 & Delta FORCE - -C:brown ammo box 0004 value 1|8103A25A ????|Viper187 & Delta FORCE -C:brown ammo box 0004 value 2|8103A25E ????|Viper187 & Delta FORCE -C:brown ammo box 0004 size 1|8103A260 ????|Viper187 & Delta FORCE -C:brown ammo box 0004 size 2|8103A262 ????|Viper187 & Delta FORCE - -C:green ammo box 0005 value 1|8103A266 ????|Viper187 & Delta FORCE -C:green ammo box 0005 value 2|8103A26A ????|Viper187 & Delta FORCE -C:green ammo box 0005 size 1|8103A26C ????|Viper187 & Delta FORCE -C:green ammo box 0005 size 2|8103A26E ????|Viper187 & Delta FORCE - -C:green ammo box 0006 value 1|8103A272 ????|Viper187 & Delta FORCE -C:green ammo box 0006 value 2|8103A276 ????|Viper187 & Delta FORCE -C:green ammo box 0006 size 1|8103A278 ????|Viper187 & Delta FORCE -C:green ammo box 0006 size 2|8103A27A ????|Viper187 & Delta FORCE - -C:green ammo box 0007 value 1|8103A27E ????|Viper187 & Delta FORCE -C:green ammo box 0007 value 2|8103A282 ????|Viper187 & Delta FORCE -C:green ammo box 0007 size 1|8103A284 ????|Viper187 & Delta FORCE -C:green ammo box 0007 size 2|8103A286 ????|Viper187 & Delta FORCE - -C:Egypt block 0008 value 1|8103A28A ????|Viper187 & Delta FORCE -C:Egypt block 0008 value 2|8103A28E ????|Viper187 & Delta FORCE -C:Egypt block 0008 size 1|8103A290 ????|Viper187 & Delta FORCE -C:Egypt block 0008 size 2|8103A292 ????|Viper187 & Delta FORCE - -C:desk blotter 0009 value 1|8103A296 ????|Viper187 & Delta FORCE -C:desk blotter 0009 value 2|8103A29A ????|Viper187 & Delta FORCE -C:desk blotter 0009 size 1|8103A29C ????|Viper187 & Delta FORCE -C:desk blotter 0009 size 2|8103A29E ????|Viper187 & Delta FORCE - -C:red book 000A value 1|8103A2A2 ????|Viper187 & Delta FORCE -C:red book 000A value 2|8103A2A6 ????|Viper187 & Delta FORCE -C:red book 000A size 1|8103A2A8 ????|Viper187 & Delta FORCE -C:red book 000A size 2|8103A2AA ????|Viper187 & Delta FORCE - -C:bookshelf 000B value 1|8103A2AE ????|Viper187 & Delta FORCE -C:bookshelf 000B value 2|8103A2B2 ????|Viper187 & Delta FORCE -C:bookshelf 000B size 1|8103A2B4 ????|Viper187 & Delta FORCE -C:bookshelf 000B size 2|8103A2B6 ????|Viper187 & Delta FORCE - -C:bridge console 000C value 1|8103A2BA ????|Viper187 & Delta FORCE -C:bridge console 000C value 2|8103A2BE ????|Viper187 & Delta FORCE -C:bridge console 000C size 1|8103A2C0 ????|Viper187 & Delta FORCE -C:bridge console 000C size 2|8103A2C2 ????|Viper187 & Delta FORCE - -C:bridge console 000D value 1|8103A2C6 ????|Viper187 & Delta FORCE -C:bridge console 000D value 2|8103A2CA ????|Viper187 & Delta FORCE -C:bridge console 000D size 1|8103A2CC ????|Viper187 & Delta FORCE -C:bridge console 000D size 2|8103A2CE ????|Viper187 & Delta FORCE - -C:bridge console 000E value 1|8103A2D2 ????|Viper187 & Delta FORCE -C:bridge console 000E value 2|8103A2D6 ????|Viper187 & Delta FORCE -C:bridge console 000E size 1|8103A2D8 ????|Viper187 & Delta FORCE -C:bridge console 000E size 2|8103A2DA ????|Viper187 & Delta FORCE - -C:bridge console 000F value 1|8103A2DE ????|Viper187 & Delta FORCE -C:bridge console 000F value 2|8103A2E2 ????|Viper187 & Delta FORCE -C:bridge console 000F size 1|8103A2E4 ????|Viper187 & Delta FORCE -C:bridge console 000F size 2|8103A2E6 ????|Viper187 & Delta FORCE - -C:bridge console 0010 value 1|8103A2EA ????|Viper187 & Delta FORCE -C:bridge console 0010 value 2|8103A2EE ????|Viper187 & Delta FORCE -C:bridge console 0010 size 1|8103A2F0 ????|Viper187 & Delta FORCE -C:bridge console 0010 size 2|8103A2F2 ????|Viper187 & Delta FORCE - -C:bridge console 0011 value 1|8103A2F6 ????|Viper187 & Delta FORCE -C:bridge console 0011 value 2|8103A2FA ????|Viper187 & Delta FORCE -C:bridge console 0011 size 1|8103A2FC ????|Viper187 & Delta FORCE -C:bridge console 0011 size 2|8103A2FE ????|Viper187 & Delta FORCE - -C:cardboard ammo box 0012 value 1|8103A302 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0012 value 2|8103A306 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0012 size 1|8103A308 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0012 size 2|8103A30A ????|Viper187 & Delta FORCE - -C:cardboard ammo box 0013 value 1|8103A30E ????|Viper187 & Delta FORCE -C:cardboard ammo box 0013 value 2|8103A312 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0013 size 1|8103A314 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0013 size 2|8103A316 ????|Viper187 & Delta FORCE - -C:cardboard ammo box 0014 value 1|8103A31A ????|Viper187 & Delta FORCE -C:cardboard ammo box 0014 value 2|8103A31E ????|Viper187 & Delta FORCE -C:cardboard ammo box 0014 size 1|8103A320 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0014 size 2|8103A322 ????|Viper187 & Delta FORCE - -C:cardboard ammo box 0015 value 1|8103A326 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0015 value 2|8103A32A ????|Viper187 & Delta FORCE -C:cardboard ammo box 0015 size 1|8103A32C ????|Viper187 & Delta FORCE -C:cardboard ammo box 0015 size 2|8103A32E ????|Viper187 & Delta FORCE - -C:cardboard ammo box 0016 value 1|8103A332 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0016 value 2|8103A336 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0016 size 1|8103A338 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0016 size 2|8103A33A ????|Viper187 & Delta FORCE - -C:cardboard ammo box 0017 value 1|8103A33E ????|Viper187 & Delta FORCE -C:cardboard ammo box 0017 value 2|8103A342 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0017 size 1|8103A344 ????|Viper187 & Delta FORCE -C:cardboard ammo box 0017 size 2|8103A346 ????|Viper187 & Delta FORCE - -* -C:surveillance camera 0018 value 1|8103A34A ????|Viper187 & Delta FORCE -C:surveillance camera 0018 value 2|8103A34E ????|Viper187 & Delta FORCE -C:surveillance camera 0018 size 1|8103A350 ????|Viper187 & Delta FORCE -C:surveillance camera 0018 size 2|8103A352 ????|Viper187 & Delta FORCE - -C:double screen console 0019 value 1|8103A356 ????|Viper187 & Delta FORCE -C:double screen console 0019 value 2|8103A35A ????|Viper187 & Delta FORCE -C:double screen console 0019 size 1|8103A35C ????|Viper187 & Delta FORCE -C:double screen console 0019 size 2|8103A35E ????|Viper187 & Delta FORCE - -C:double screen console 001A value 1|8103A362 ????|Viper187 & Delta FORCE -C:double screen console 001A value 2|8103A366 ????|Viper187 & Delta FORCE -C:double screen console 001A size 1|8103A368 ????|Viper187 & Delta FORCE -C:double screen console 001A size 2|8103A36A ????|Viper187 & Delta FORCE - -C:double screen console 001B value 1|8103A36E ????|Viper187 & Delta FORCE -C:double screen console 001B value 2|8103A372 ????|Viper187 & Delta FORCE -C:double screen console 001B size 1|8103A374 ????|Viper187 & Delta FORCE -C:double screen console 001B size 2|8103A376 ????|Viper187 & Delta FORCE - -C:console 001C value 1|8103A37A ????|Viper187 & Delta FORCE -C:console 001C value 2|8103A37E ????|Viper187 & Delta FORCE -C:console 001C size 1|8103A380 ????|Viper187 & Delta FORCE -C:console 001C size 2|8103A382 ????|Viper187 & Delta FORCE - -C:console 001D value 1|8103A386 ????|Viper187 & Delta FORCE -C:console 001D value 2|8103A38A ????|Viper187 & Delta FORCE -C:console 001D size 1|8103A38C ????|Viper187 & Delta FORCE -C:console 001D size 2|8103A38E ????|Viper187 & Delta FORCE - -C:console 001E value 1|8103A392 ????|Viper187 & Delta FORCE -C:console 001E value 2|8103A396 ????|Viper187 & Delta FORCE -C:console 001E size 1|8103A398 ????|Viper187 & Delta FORCE -C:console 001E size 2|8103A39A ????|Viper187 & Delta FORCE - -C:console 001F value 1|8103A39E ????|Viper187 & Delta FORCE -C:console 001F value 2|8103A3A2 ????|Viper187 & Delta FORCE -C:console 001F size 1|8103A3A4 ????|Viper187 & Delta FORCE -C:console 001F size 2|8103A3A6 ????|Viper187 & Delta FORCE - -C:console 0020 value 1|8103A3AA ????|Viper187 & Delta FORCE -C:console 0020 value 2|8103A3AE ????|Viper187 & Delta FORCE -C:console 0020 size 1|8103A3B0 ????|Viper187 & Delta FORCE -C:console 0020 size 2|8103A3B2 ????|Viper187 & Delta FORCE - -C:console 0021 value 1|8103A3B6 ????|Viper187 & Delta FORCE -C:console 0021 value 2|8103A3BA ????|Viper187 & Delta FORCE -C:console 0021 size 1|8103A3BC ????|Viper187 & Delta FORCE -C:console 0021 size 2|8103A3BE ????|Viper187 & Delta FORCE - -C:console 0022 value 1|8103A3C2 ????|Viper187 & Delta FORCE -C:console 0022 value 2|8103A3C6 ????|Viper187 & Delta FORCE -C:console 0022 size 1|8103A3C8 ????|Viper187 & Delta FORCE -C:console 0022 size 2|8103A3CA ????|Viper187 & Delta FORCE - -C:console 0023 value 1|8103A3CE ????|Viper187 & Delta FORCE -C:console 0023 value 2|8103A3D2 ????|Viper187 & Delta FORCE -C:console 0023 size 1|8103A3D4 ????|Viper187 & Delta FORCE -C:console 0023 size 2|8103A3D6 ????|Viper187 & Delta FORCE - -C:console 0024 value 1|8103A3DA ????|Viper187 & Delta FORCE -C:console 0024 value 2|8103A3DE ????|Viper187 & Delta FORCE -C:console 0024 size 1|8103A3E0 ????|Viper187 & Delta FORCE -C:console 0024 size 2|8103A3E2 ????|Viper187 & Delta FORCE - -C:single screen console 0025 value 1|8103A3E6 ????|Viper187 & Delta FORCE -C:single screen console 0025 value 2|8103A3EA ????|Viper187 & Delta FORCE -C:single screen console 0025 size 1|8103A3EC ????|Viper187 & Delta FORCE -C:single screen console 0025 size 2|8103A3EE ????|Viper187 & Delta FORCE - -C:white table 0026 value 1|8103A3F2 ????|Viper187 & Delta FORCE -C:white table 0026 value 2|8103A3F6 ????|Viper187 & Delta FORCE -C:white table 0026 size 1|8103A3F8 ????|Viper187 & Delta FORCE -C:white table 0026 size 2|8103A3FA ????|Viper187 & Delta FORCE - -C:white table 0027 value 1|8103A3FE ????|Viper187 & Delta FORCE -C:white table 0027 value 2|8103A402 ????|Viper187 & Delta FORCE -C:white table 0027 size 1|8103A404 ????|Viper187 & Delta FORCE -C:white table 0027 size 2|8103A406 ????|Viper187 & Delta FORCE - -C:desk lamp 0028 value 1|8103A40A ????|Viper187 & Delta FORCE -C:desk lamp 0028 value 2|8103A40E ????|Viper187 & Delta FORCE -C:desk lamp 0028 size 1|8103A410 ????|Viper187 & Delta FORCE -C:desk lamp 0028 size 2|8103A412 ????|Viper187 & Delta FORCE - -C:part of Aztec DAT box 0029 value 1|8103A416 ????|Viper187 & Delta FORCE -C:part of Aztec DAT box 0029 value 2|8103A41A ????|Viper187 & Delta FORCE -C:part of Aztec DAT box 0029 size 1|8103A41C ????|Viper187 & Delta FORCE -C:part of Aztec DAT box 0029 size 2|8103A41E ????|Viper187 & Delta FORCE - -C:part of Aztec DAT box 002A value 1|8103A422 ????|Viper187 & Delta FORCE -C:part of Aztec DAT box 002A value 2|8103A426 ????|Viper187 & Delta FORCE -C:part of Aztec DAT box 002A size 1|8103A428 ????|Viper187 & Delta FORCE -C:part of Aztec DAT box 002A size 2|8103A42A ????|Viper187 & Delta FORCE - -C:white cabinet 002B value 1|8103A42E ????|Viper187 & Delta FORCE -C:white cabinet 002B value 2|8103A432 ????|Viper187 & Delta FORCE -C:white cabinet 002B size 1|8103A434 ????|Viper187 & Delta FORCE -C:white cabinet 002B size 2|8103A436 ????|Viper187 & Delta FORCE - -C:jerry can 002C value 1|8103A43A ????|Viper187 & Delta FORCE -C:jerry can 002C value 2|8103A43E ????|Viper187 & Delta FORCE -C:jerry can 002C size 1|8103A440 ????|Viper187 & Delta FORCE -C:jerry can 002C size 2|8103A442 ????|Viper187 & Delta FORCE - -C:keyboard 002D value 1|8103A446 ????|Viper187 & Delta FORCE -C:keyboard 002D value 2|8103A44A ????|Viper187 & Delta FORCE -C:keyboard 002D size 1|8103A44C ????|Viper187 & Delta FORCE -C:keyboard 002D size 2|8103A44E ????|Viper187 & Delta FORCE - -C:4 door & drawer bench 002E value 1|8103A452 ????|Viper187 & Delta FORCE -C:4 door & drawer bench 002E value 2|8103A456 ????|Viper187 & Delta FORCE -C:4 door & drawer bench 002E size 1|8103A458 ????|Viper187 & Delta FORCE -C:4 door & drawer bench 002E size 2|8103A45A ????|Viper187 & Delta FORCE - -C:desk in-tray 002F value 1|8103A45E ????|Viper187 & Delta FORCE -C:desk in-tray 002F value 2|8103A462 ????|Viper187 & Delta FORCE -C:desk in-tray 002F size 1|8103A464 ????|Viper187 & Delta FORCE -C:desk in-tray 002F size 2|8103A466 ????|Viper187 & Delta FORCE - -C:mainframe 0030 value 1|8103A46A ????|Viper187 & Delta FORCE -C:mainframe 0030 value 2|8103A46E ????|Viper187 & Delta FORCE -C:mainframe 0030 size 1|8103A470 ????|Viper187 & Delta FORCE -C:mainframe 0030 size 2|8103A472 ????|Viper187 & Delta FORCE - -C:mainframe 0031 value 1|8103A476 ????|Viper187 & Delta FORCE -C:mainframe 0031 value 2|8103A47A ????|Viper187 & Delta FORCE -C:mainframe 0031 size 1|8103A47C ????|Viper187 & Delta FORCE -C:mainframe 0031 size 2|8103A47E ????|Viper187 & Delta FORCE - -C:chair 0032 value 1|8103A482 ????|Viper187 & Delta FORCE -C:chair 0032 value 2|8103A486 ????|Viper187 & Delta FORCE -C:chair 0032 size 1|8103A488 ????|Viper187 & Delta FORCE -C:chair 0032 size 2|8103A48A ????|Viper187 & Delta FORCE - -C:metal crate 0033 value 1|8103A48E ????|Viper187 & Delta FORCE -C:metal crate 0033 value 2|8103A492 ????|Viper187 & Delta FORCE -C:metal crate 0033 size 1|8103A494 ????|Viper187 & Delta FORCE -C:metal crate 0033 size 2|8103A496 ????|Viper187 & Delta FORCE - -C:metal crate 0034 value 1|8103A49A ????|Viper187 & Delta FORCE -C:metal crate 0034 value 2|8103A49E ????|Viper187 & Delta FORCE -C:metal crate 0034 size 1|8103A4A0 ????|Viper187 & Delta FORCE -C:metal crate 0034 size 2|8103A4A2 ????|Viper187 & Delta FORCE - -C:metal crate 0035 value 1|8103A4A6 ????|Viper187 & Delta FORCE -C:metal crate 0035 value 2|8103A4AA ????|Viper187 & Delta FORCE -C:metal crate 0035 size 1|8103A4AC ????|Viper187 & Delta FORCE -C:metal crate 0035 size 2|8103A4AE ????|Viper187 & Delta FORCE - -C:ribbed steel box 0036 value 1|8103A4B2 ????|Viper187 & Delta FORCE -C:ribbed steel box 0036 value 2|8103A4B6 ????|Viper187 & Delta FORCE -C:ribbed steel box 0036 size 1|8103A4B8 ????|Viper187 & Delta FORCE -C:ribbed steel box 0036 size 2|8103A4BA ????|Viper187 & Delta FORCE - -C:model of Silo rocket 0037 value 1|8103A4BE ????|Viper187 & Delta FORCE -C:model of Silo rocket 0037 value 2|8103A4B2 ????|Viper187 & Delta FORCE -C:model of Silo rocket 0037 size 1|8103A4C4 ????|Viper187 & Delta FORCE -C:model of Silo rocket 0037 size 2|8103A4C6 ????|Viper187 & Delta FORCE - -C:4 Silo rockets 0038 value 1|8103A4CA ????|Viper187 & Delta FORCE -C:4 Silo rockets 0038 value 2|8103A4CE ????|Viper187 & Delta FORCE -C:4 Silo rockets 0038 size 1|8103A4D0 ????|Viper187 & Delta FORCE -C:4 Silo rockets 0038 size 2|8103A4D2 ????|Viper187 & Delta FORCE - -C:oil drum 0039 value 1|8103A4D6 ????|Viper187 & Delta FORCE -C:oil drum 0039 value 2|8103A4DA ????|Viper187 & Delta FORCE -C:oil drum 0039 size 1|8103A4DC ????|Viper187 & Delta FORCE -C:oil drum 0039 size 2|8103A4DE ????|Viper187 & Delta FORCE - -C:oil drum 003A value 1|8103A4E2 ????|Viper187 & Delta FORCE -C:oil drum 003A value 2|8103A4E6 ????|Viper187 & Delta FORCE -C:oil drum 003A size 1|8103A4E8 ????|Viper187 & Delta FORCE -C:oil drum 003A size 2|8103A4EA ????|Viper187 & Delta FORCE - -C:oil drum 003B value 1|8103A4EE ????|Viper187 & Delta FORCE -C:oil drum 003B value 2|8103A4F2 ????|Viper187 & Delta FORCE -C:oil drum 003B size 1|8103A4F4 ????|Viper187 & Delta FORCE -C:oil drum 003B size 2|8103A4F6 ????|Viper187 & Delta FORCE - -C:oil drum 003C value 1|8103A4FA ????|Viper187 & Delta FORCE -C:oil drum 003C value 2|8103A4FE ????|Viper187 & Delta FORCE -C:oil drum 003C size 1|8103A500 ????|Viper187 & Delta FORCE -C:oil drum 003C size 2|8103A502 ????|Viper187 & Delta FORCE - -C:oil drum 003D value 1|8103A506 ????|Viper187 & Delta FORCE -C:oil drum 003D value 2|8103A50A ????|Viper187 & Delta FORCE -C:oil drum 003D size 1|8103A50C ????|Viper187 & Delta FORCE -C:oil drum 003D size 2|8103A50E ????|Viper187 & Delta FORCE - -C:oil drum 003E value 1|8103A512 ????|Viper187 & Delta FORCE -C:oil drum 003E value 2|8103A516 ????|Viper187 & Delta FORCE -C:oil drum 003E size 1|8103A518 ????|Viper187 & Delta FORCE -C:oil drum 003E size 2|8103A51A ????|Viper187 & Delta FORCE - -C:padlock 003F value 1|8103A51E ????|Viper187 & Delta FORCE -C:padlock 003F value 2|8103A522 ????|Viper187 & Delta FORCE -C:padlock 003F size 1|8103A524 ????|Viper187 & Delta FORCE -C:padlock 003F size 2|8103A526 ????|Viper187 & Delta FORCE - -C:phone 0040 value 1|8103A52A ????|Viper187 & Delta FORCE -C:phone 0040 value 2|8103A52E ????|Viper187 & Delta FORCE -C:phone 0040 size 1|8103A530 ????|Viper187 & Delta FORCE -C:phone 0040 size 2|8103A532 ????|Viper187 & Delta FORCE - -C:radio 0041 value 1|8103A536 ????|Viper187 & Delta FORCE -C:radio 0041 value 2|8103A53A ????|Viper187 & Delta FORCE -C:radio 0041 size 1|8103A53C ????|Viper187 & Delta FORCE -C:radio 0041 size 2|8103A53E ????|Viper187 & Delta FORCE - -C:radio 0042 value 1|8103A542 ????|Viper187 & Delta FORCE -C:radio 0042 value 2|8103A546 ????|Viper187 & Delta FORCE -C:radio 0042 size 1|8103A548 ????|Viper187 & Delta FORCE -C:radio 0042 size 2|8103A54A ????|Viper187 & Delta FORCE - -C:radio 0043 value 1|8103A54E ????|Viper187 & Delta FORCE -C:radio 0043 value 2|8103A552 ????|Viper187 & Delta FORCE -C:radio 0043 size 1|8103A554 ????|Viper187 & Delta FORCE -C:radio 0043 size 2|8103A556 ????|Viper187 & Delta FORCE - -C:radio 0044 value 1|8103A55A ????|Viper187 & Delta FORCE -C:radio 0044 value 2|8103A55E ????|Viper187 & Delta FORCE -C:radio 0044 size 1|8103A560 ????|Viper187 & Delta FORCE -C:radio 0044 size 2|8103A562 ????|Viper187 & Delta FORCE - -C:sattelite 0045 value 1|8103A566 ????|Viper187 & Delta FORCE -C:sattelite 0045 value 2|8103A56A ????|Viper187 & Delta FORCE -C:sattelite 0045 size 1|8103A56C ????|Viper187 & Delta FORCE -C:sattelite 0045 size 2|8103A56E ????|Viper187 & Delta FORCE - -C:Dam Antenna dish 0046 value 1|8103A572 ????|Viper187 & Delta FORCE -C:Dam Antenna dish 0046 value 2|8103A576 ????|Viper187 & Delta FORCE -C:Dam Antenna dish 0046 size 1|8103A578 ????|Viper187 & Delta FORCE -C:Dam Antenna dish 0046 size 2|8103A57A ????|Viper187 & Delta FORCE - -C:tape recorder 0047 value 1|8103A57E ????|Viper187 & Delta FORCE -C:tape recorder 0047 value 2|8103A582 ????|Viper187 & Delta FORCE -C:tape recorder 0047 size 1|8103A584 ????|Viper187 & Delta FORCE -C:tape recorder 0047 size 2|8103A586 ????|Viper187 & Delta FORCE - -C:wooden stool 0048 value 1|8103A58A ????|Viper187 & Delta FORCE -C:wooden stool 0048 value 2|8103A58E ????|Viper187 & Delta FORCE -C:wooden stool 0048 size 1|8103A590 ????|Viper187 & Delta FORCE -C:wooden stool 0048 size 2|8103A592 ????|Viper187 & Delta FORCE - -C:swivel chair 0049 value 1|8103A596 ????|Viper187 & Delta FORCE -C:swivel chair 0049 value 2|8103A59A ????|Viper187 & Delta FORCE -C:swivel chair 0049 size 1|8103A59C ????|Viper187 & Delta FORCE -C:swivel chair 0049 size 2|8103A59E ????|Viper187 & Delta FORCE - -C:rack of 3 blue rockets 004A value 1|8103A5A2 ????|Viper187 & Delta FORCE -C:rack of 3 blue rockets 004A value 2|8103A5A6 ????|Viper187 & Delta FORCE -C:rack of 3 blue rockets 004A size 1|8103A5A8 ????|Viper187 & Delta FORCE -C:rack of 3 blue rockets 004A size 2|8103A5AA ????|Viper187 & Delta FORCE - -C:small television 004B value 1|8103A5AE ????|Viper187 & Delta FORCE -C:small television 004B value 2|8103A5B2 ????|Viper187 & Delta FORCE -C:small television 004B size 1|8103A5B4 ????|Viper187 & Delta FORCE -C:small television 004B size 2|8103A5B6 ????|Viper187 & Delta FORCE - -C:hanging monitor rack 004C value 1|8103A5BA ????|Viper187 & Delta FORCE -C:hanging monitor rack 004C value 2|8103A5BE ????|Viper187 & Delta FORCE -C:hanging monitor rack 004C size 1|8103A5C0 ????|Viper187 & Delta FORCE -C:hanging monitor rack 004C size 2|8103A5C2 ????|Viper187 & Delta FORCE - -C:wall monitor screen 004D value 1|8103A5C6 ????|Viper187 & Delta FORCE -C:wall monitor screen 004D value 2|8103A5CA ????|Viper187 & Delta FORCE -C:wall monitor screen 004D size 1|8103A5CC ????|Viper187 & Delta FORCE -C:wall monitor screen 004D size 2|8103A5CE ????|Viper187 & Delta FORCE - -C:wall monitor screen 004E value 1|8103A5D2 ????|Viper187 & Delta FORCE -C:wall monitor screen 004E value 2|8103A5D6 ????|Viper187 & Delta FORCE -C:wall monitor screen 004E size 1|8103A5D8 ????|Viper187 & Delta FORCE -C:wall monitor screen 004E size 2|8103A5DA ????|Viper187 & Delta FORCE - -C:wooden crate 004F value 1|8103A5DE ????|Viper187 & Delta FORCE -C:wooden crate 004F value 2|8103A5E2 ????|Viper187 & Delta FORCE -C:wooden crate 004F size 1|8103A5E4 ????|Viper187 & Delta FORCE -C:wooden crate 004F size 2|8103A5E6 ????|Viper187 & Delta FORCE - -C:wooden crate 0050 value 1|8103A5EA ????|Viper187 & Delta FORCE -C:wooden crate 0050 value 2|8103A5EE ????|Viper187 & Delta FORCE -C:wooden crate 0050 size 1|8103A5F0 ????|Viper187 & Delta FORCE -C:wooden crate 0050 size 2|8103A5F2 ????|Viper187 & Delta FORCE - -C:wooden crate 0051 value 1|8103A5F6 ????|Viper187 & Delta FORCE -C:wooden crate 0051 value 2|8103A5FA ????|Viper187 & Delta FORCE -C:wooden crate 0051 size 1|8103A5FC ????|Viper187 & Delta FORCE -C:wooden crate 0051 size 2|8103A5FE ????|Viper187 & Delta FORCE - -C:wooden crate 0052 value 1|8103A602 ????|Viper187 & Delta FORCE -C:wooden crate 0052 value 2|8103A606 ????|Viper187 & Delta FORCE -C:wooden crate 0052 size 1|8103A608 ????|Viper187 & Delta FORCE -C:wooden crate 0052 size 2|8103A60A ????|Viper187 & Delta FORCE - -C:wooden crate 0053 value 1|8103A60E ????|Viper187 & Delta FORCE -C:wooden crate 0053 value 2|8103A612 ????|Viper187 & Delta FORCE -C:wooden crate 0053 size 1|8103A614 ????|Viper187 & Delta FORCE -C:wooden crate 0053 size 2|8103A616 ????|Viper187 & Delta FORCE - -C:wooden crate 0054 value 1|8103A61A ????|Viper187 & Delta FORCE -C:wooden crate 0054 value 2|8103A61E ????|Viper187 & Delta FORCE -C:wooden crate 0054 size 1|8103A620 ????|Viper187 & Delta FORCE -C:wooden crate 0054 size 2|8103A622 ????|Viper187 & Delta FORCE - -C:wooden table 0055 value 1|8103A626 ????|Viper187 & Delta FORCE -C:wooden table 0055 value 2|8103A62A ????|Viper187 & Delta FORCE -C:wooden table 0055 size 1|8103A62C ????|Viper187 & Delta FORCE -C:wooden table 0055 size 2|8103A62E ????|Viper187 & Delta FORCE - -C:Floppy disc 0056 value 1|8103A632 ????|Viper187 & Delta FORCE -C:Floppy disc 0056 value 2|8103A636 ????|Viper187 & Delta FORCE -C:Floppy disc 0056 size 1|8103A638 ????|Viper187 & Delta FORCE -C:Floppy disc 0056 size 2|8103A63A ????|Viper187 & Delta FORCE - -C:Borg cube 0057 value 1|8103A63E ????|Viper187 & Delta FORCE -C:Borg cube 0057 value 2|8103A642 ????|Viper187 & Delta FORCE -C:Borg cube 0057 size 1|8103A644 ????|Viper187 & Delta FORCE -C:Borg cube 0057 size 2|8103A646 ????|Viper187 & Delta FORCE - -C:4X4 crate stack 0058 value 1|8103A64A ????|Viper187 & Delta FORCE -C:4X4 crate stack 0058 value 2|8103A64E ????|Viper187 & Delta FORCE -C:4X4 crate stack 0058 size 1|8103A650 ????|Viper187 & Delta FORCE -C:4X4 crate stack 0058 size 2|8103A652 ????|Viper187 & Delta FORCE - -C:4X3 crate stack 0059 value 1|8103A656 ????|Viper187 & Delta FORCE -C:4X3 crate stack 0059 value 2|8103A65A ????|Viper187 & Delta FORCE -C:4X3 crate stack 0059 size 1|8103A65C ????|Viper187 & Delta FORCE -C:4X3 crate stack 0059 size 2|8103A65E ????|Viper187 & Delta FORCE - -C:4X2 crate stack 005A value 1|8103A662 ????|Viper187 & Delta FORCE -C:4X2 crate stack 005A value 2|8103A666 ????|Viper187 & Delta FORCE -C:4X2 crate stack 005A size 1|8103A668 ????|Viper187 & Delta FORCE -C:4X2 crate stack 005A size 2|8103A66A ????|Viper187 & Delta FORCE - -C:red button 005B value 1|8103A66E ????|Viper187 & Delta FORCE -C:red button 005B value 2|8103A672 ????|Viper187 & Delta FORCE -C:red button 005B size 1|8103A674 ????|Viper187 & Delta FORCE -C:red button 005B size 2|8103A676 ????|Viper187 & Delta FORCE - -C:small rocket 005C value 1|8103A67A ????|Viper187 & Delta FORCE -C:small rocket 005C value 2|8103A67E ????|Viper187 & Delta FORCE -C:small rocket 005C size 1|8103A680 ????|Viper187 & Delta FORCE -C:small rocket 005C size 2|8103A682 ????|Viper187 & Delta FORCE - -C:full size ICBM 005D value 1|8103A686 ????|Viper187 & Delta FORCE -C:full size ICBM 005D value 2|8103A68A ????|Viper187 & Delta FORCE -C:full size ICBM 005D size 1|8103A68C ????|Viper187 & Delta FORCE -C:full size ICBM 005D size 2|8103A68E ????|Viper187 & Delta FORCE - -C:double console on castors 005E value 1|8103A692 ????|Viper187 & Delta FORCE -C:double console on castors 005E value 2|8103A696 ????|Viper187 & Delta FORCE -C:double console on castors 005E size 1|8103A698 ????|Viper187 & Delta FORCE -C:double console on castors 005E size 2|8103A69A ????|Viper187 & Delta FORCE - -C:counter 005F value 1|8103A69E ????|Viper187 & Delta FORCE -C:counter 005F value 2|8103A6A2 ????|Viper187 & Delta FORCE -C:counter 005F size 1|8103A6A4 ????|Viper187 & Delta FORCE -C:counter 005F size 2|8103A6A6 ????|Viper187 & Delta FORCE - -C:locker set 0060 value 1|8103A6AA ????|Viper187 & Delta FORCE -C:locker set 0060 value 2|8103A6AE ????|Viper187 & Delta FORCE -C:locker set 0060 size 1|8103A6B0 ????|Viper187 & Delta FORCE -C:locker set 0060 size 2|8103A6B2 ????|Viper187 & Delta FORCE - -C:locker set 0061 value 1|8103A6B6 ????|Viper187 & Delta FORCE -C:locker set 0061 value 2|8103A6BA ????|Viper187 & Delta FORCE -C:locker set 0061 size 1|8103A6BC ????|Viper187 & Delta FORCE -C:locker set 0061 size 2|8103A6BE ????|Viper187 & Delta FORCE - -C:ceiling drone gun 0062 value 1|8103A6C2 ????|Viper187 & Delta FORCE -C:ceiling drone gun 0062 value 2|8103A6C6 ????|Viper187 & Delta FORCE -C:ceiling drone gun 0062 size 1|8103A6C8 ????|Viper187 & Delta FORCE -C:ceiling drone gun 0062 size 2|8103A6CA ????|Viper187 & Delta FORCE - -C:Frigate rocket launcher (POINTING DOWN) 0063 value 1|8103A6CE ????|Viper187 & Delta FORCE -C:Frigate rocket launcher (POINTING DOWN) 0063 value 2|8103A6D2 ????|Viper187 & Delta FORCE -C:Frigate rocket launcher (POINTING DOWN) 0063 size 1|8103A6D4 ????|Viper187 & Delta FORCE -C:Frigate rocket launcher (POINTING DOWN) 0063 size 2|8103A6D6 ????|Viper187 & Delta FORCE - -C:Frigate rocket launcher (POINTING UP) 0064 value 1|8103A6DA ????|Viper187 & Delta FORCE -C:Frigate rocket launcher (POINTING UP) 0064 value 2|8103A6DE ????|Viper187 & Delta FORCE -C:Frigate rocket launcher (POINTING UP) 0064 size 1|8103A6E0 ????|Viper187 & Delta FORCE -C:Frigate rocket launcher (POINTING UP) 0064 size 2|8103A6E2 ????|Viper187 & Delta FORCE - -C:Frigate gun turret 0065 value 1|8103A6E6 ????|Viper187 & Delta FORCE -C:Frigate gun turret 0065 value 2|8103A6EA ????|Viper187 & Delta FORCE -C:Frigate gun turret 0065 size 1|8103A6EC ????|Viper187 & Delta FORCE -C:Frigate gun turret 0065 size 2|8103A6EE ????|Viper187 & Delta FORCE - -C:Frigate rocket rack 0066 value 1|8103A6F2 ????|Viper187 & Delta FORCE -C:Frigate rocket rack 0066 value 2|8103A6F6 ????|Viper187 & Delta FORCE -C:Frigate rocket rack 0066 size 1|8103A6F8 ????|Viper187 & Delta FORCE -C:Frigate rocket rack 0066 size 2|8103A6FA ????|Viper187 & Delta FORCE - -C:Runway rocket launcher 0067 value 1|8103A6FE ????|Viper187 & Delta FORCE -C:Runway rocket launcher 0067 value 2|8103A702 ????|Viper187 & Delta FORCE -C:Runway rocket launcher 0067 size 1|8103A704 ????|Viper187 & Delta FORCE -C:Runway rocket launcher 0067 size 2|8103A706 ????|Viper187 & Delta FORCE - -C:glass 0068 value|8103A70A ????|Viper187 & Delta FORCE -C:glass 0068 image|8103A70E ????|Viper187 & Delta FORCE -C:glass 0068 size 1|8103A710 ????|Viper187 & Delta FORCE -C:glass 0068 size 2|8103A712 ????|Viper187 & Delta FORCE - -C:window lattice frame 0069 value 1|8103A716 ????|Viper187 & Delta FORCE -C:window lattice frame 0069 value 2|8103A71A ????|Viper187 & Delta FORCE -C:window lattice frame 0069 size 1|8103A71C ????|Viper187 & Delta FORCE -C:window lattice frame 0069 size 2|8103A71E ????|Viper187 & Delta FORCE - -C:smaller lattice frame 006A value 1|8103A722 ????|Viper187 & Delta FORCE -C:smaller lattice frame 006A value 2|8103A726 ????|Viper187 & Delta FORCE -C:smaller lattice frame 006A size 1|8103A728 ????|Viper187 & Delta FORCE -C:smaller lattice frame 006A size 2|8103A72A ????|Viper187 & Delta FORCE - -C:smaller lattice frame 006B value 1|8103A72E ????|Viper187 & Delta FORCE -C:smaller lattice frame 006B value 2|8103A732 ????|Viper187 & Delta FORCE -C:smaller lattice frame 006B size 1|8103A734 ????|Viper187 & Delta FORCE -C:smaller lattice frame 006B size 2|8103A736 ????|Viper187 & Delta FORCE - -C:Jungle big tree 006C value 1|8103A73A ????|Viper187 & Delta FORCE -C:Jungle big tree 006C value 2|8103A73E ????|Viper187 & Delta FORCE -C:Jungle big tree 006C size 1|8103A740 ????|Viper187 & Delta FORCE -C:Jungle big tree 006C size 2|8103A742 ????|Viper187 & Delta FORCE - -C:Jungle palm 006D value 1|8103A746 ????|Viper187 & Delta FORCE -C:Jungle palm 006D value 2|8103A74A ????|Viper187 & Delta FORCE -C:Jungle palm 006D size 1|8103A74C ????|Viper187 & Delta FORCE -C:Jungle palm 006D size 2|8103A74E ????|Viper187 & Delta FORCE - -C:palm resprouting 006E value 1|8103A752 ????|Viper187 & Delta FORCE -C:palm resprouting 006E value 2|8103A756 ????|Viper187 & Delta FORCE -C:palm resprouting 006E size 1|8103A758 ????|Viper187 & Delta FORCE -C:palm resprouting 006E size 2|8103A75A ????|Viper187 & Delta FORCE - -C:Jungle low shrub 006F value 1|8103A75E ????|Viper187 & Delta FORCE -C:Jungle low shrub 006F value 2|8103A762 ????|Viper187 & Delta FORCE -C:Jungle low shrub 006F size 1|8103A764 ????|Viper187 & Delta FORCE -C:Jungle low shrub 006F size 2|8103A766 ????|Viper187 & Delta FORCE - -C:laboratory bench 0070 value 1|8103A76A ????|Viper187 & Delta FORCE -C:laboratory bench 0070 value 2|8103A76E ????|Viper187 & Delta FORCE -C:laboratory bench 0070 size 1|8103A770 ????|Viper187 & Delta FORCE -C:laboratory bench 0070 size 2|8103A772 ????|Viper187 & Delta FORCE - -C:rubbish bin 0071 value 1|8103A776 ????|Viper187 & Delta FORCE -C:rubbish bin 0071 value 2|8103A77A ????|Viper187 & Delta FORCE -C:rubbish bin 0071 size 1|8103A77C ????|Viper187 & Delta FORCE -C:rubbish bin 0071 size 2|8103A77E ????|Viper187 & Delta FORCE - -C:4 white bins 0072 value 1|8103A782 ????|Viper187 & Delta FORCE -C:4 white bins 0072 value 2|8103A786 ????|Viper187 & Delta FORCE -C:4 white bins 0072 size 1|8103A788 ????|Viper187 & Delta FORCE -C:4 white bins 0072 size 2|8103A78A ????|Viper187 & Delta FORCE - -C:body armour 0073 value 1|8103A78E ????|Viper187 & Delta FORCE -C:body armour 0073 value 2|8103A792 ????|Viper187 & Delta FORCE -C:body armour 0073 size 1|8103A794 ????|Viper187 & Delta FORCE -C:body armour 0073 size 2|8103A796 ????|Viper187 & Delta FORCE - -C:body armour 0074 value 1|8103A79A ????|Viper187 & Delta FORCE -C:body armour 0074 value 2|8103A79E ????|Viper187 & Delta FORCE -C:body armour 0074 size 1|8103A7A0 ????|Viper187 & Delta FORCE -C:body armour 0074 size 2|8103A7A2 ????|Viper187 & Delta FORCE - -C:Facility gas tank 0075 value 1|8103A7A6 ????|Viper187 & Delta FORCE -C:Facility gas tank 0075 value 2|8103A7AA ????|Viper187 & Delta FORCE -C:Facility gas tank 0075 size 1|8103A7AC ????|Viper187 & Delta FORCE -C:Facility gas tank 0075 size 2|8103A7AE ????|Viper187 & Delta FORCE - -C:a glass 0076 value 1|8103A7B2 ????|Viper187 & Delta FORCE -C:a glass 0076 value 2|8103A7B6 ????|Viper187 & Delta FORCE -C:a glass 0076 size 1|8103A7B8 ????|Viper187 & Delta FORCE -C:a glass 0076 size 2|8103A7BA ????|Viper187 & Delta FORCE - -C:train floor plate strips 0077 value 1|8103A7BE ????|Viper187 & Delta FORCE -C:train floor plate strips 0077 value 2|8103A7C2 ????|Viper187 & Delta FORCE -C:train floor plate strips 0077 size 1|8103A7C4 ????|Viper187 & Delta FORCE -C:train floor plate strips 0077 size 2|8103A7C6 ????|Viper187 & Delta FORCE - -C:Train brake controller 0078 value 1|8103A7CA ????|Viper187 & Delta FORCE -C:Train brake controller 0078 value 2|8103A7CE ????|Viper187 & Delta FORCE -C:Train brake controller 0078 size 1|8103A7D0 ????|Viper187 & Delta FORCE -C:Train brake controller 0078 size 2|8103A7D2 ????|Viper187 & Delta FORCE - -C:ammo clip 0079 value 1|8103A7D6 ????|Viper187 & Delta FORCE -C:ammo clip 0079 value 2|8103A7DA ????|Viper187 & Delta FORCE -C:ammo clip 0079 size 1|8103A7DC ????|Viper187 & Delta FORCE -C:ammo clip 0079 size 2|8103A7DE ????|Viper187 & Delta FORCE - -C:ammo clip 007A value 1|8103A7E2 ????|Viper187 & Delta FORCE -C:ammo clip 007A value 2|8103A7E6 ????|Viper187 & Delta FORCE -C:ammo clip 007A size 1|8103A7E8 ????|Viper187 & Delta FORCE -C:ammo clip 007A size 2|8103A7EA ????|Viper187 & Delta FORCE - -C:ammo clip 007B value 1|8103A7EE ????|Viper187 & Delta FORCE -C:ammo clip 007B value 2|8103A7F2 ????|Viper187 & Delta FORCE -C:ammo clip 007B size 1|8103A7F4 ????|Viper187 & Delta FORCE -C:ammo clip 007B size 2|8103A7F6 ????|Viper187 & Delta FORCE - -C:ammo clip 007C value 1|8103A7FA ????|Viper187 & Delta FORCE -C:ammo clip 007C value 2|8103A7FE ????|Viper187 & Delta FORCE -C:ammo clip 007C size 1|8103A800 ????|Viper187 & Delta FORCE -C:ammo clip 007C size 2|8103A802 ????|Viper187 & Delta FORCE - -C:ammo clip 007D value 1|8103A806 ????|Viper187 & Delta FORCE -C:ammo clip 007D value 2|8103A80A ????|Viper187 & Delta FORCE -C:ammo clip 007D size 1|8103A80C ????|Viper187 & Delta FORCE -C:ammo clip 007D size 2|8103A80E ????|Viper187 & Delta FORCE - -C:ammo clip 007E value 1|8103A812 ????|Viper187 & Delta FORCE -C:ammo clip 007E value 2|8103A816 ????|Viper187 & Delta FORCE -C:ammo clip 007E size 1|8103A818 ????|Viper187 & Delta FORCE -C:ammo clip 007E size 2|8103A81A ????|Viper187 & Delta FORCE - -C:ammo clip 007F value 1|8103A81E ????|Viper187 & Delta FORCE -C:ammo clip 007F value 2|8103A822 ????|Viper187 & Delta FORCE -C:ammo clip 007F size 1|8103A824 ????|Viper187 & Delta FORCE -C:ammo clip 007F size 2|8103A826 ????|Viper187 & Delta FORCE - -C:fire extinguisher 0080 value 1|8103A82A ????|Viper187 & Delta FORCE -C:fire extinguisher 0080 value 2|8103A82E ????|Viper187 & Delta FORCE -C:fire extinguisher 0080 size 1|8103A830 ????|Viper187 & Delta FORCE -C:fire extinguisher 0080 size 2|8103A832 ????|Viper187 & Delta FORCE - -C:shotgun shells 0081 value 1|8103A836 ????|Viper187 & Delta FORCE -C:shotgun shells 0081 value 2|8103A83A ????|Viper187 & Delta FORCE -C:shotgun shells 0081 size 1|8103A83C ????|Viper187 & Delta FORCE -C:shotgun shells 0081 size 2|8103A83E ????|Viper187 & Delta FORCE - -C:gun clip 0082 value 1|8103A842 ????|Viper187 & Delta FORCE -C:gun clip 0082 value 2|8103A846 ????|Viper187 & Delta FORCE -C:gun clip 0082 size 1|8103A848 ????|Viper187 & Delta FORCE -C:gun clip 0082 size 2|8103A84A ????|Viper187 & Delta FORCE - -C:golden bullets 0083 value 1|8103A84E ????|Viper187 & Delta FORCE -C:golden bullets 0083 value 2|8103A852 ????|Viper187 & Delta FORCE -C:golden bullets 0083 size 1|8103A854 ????|Viper187 & Delta FORCE -C:golden bullets 0083 size 2|8103A856 ????|Viper187 & Delta FORCE - -C:magnum shells 0084 value 1|8103A85A ????|Viper187 & Delta FORCE -C:magnum shells 0084 value 2|8103A85E ????|Viper187 & Delta FORCE -C:magnum shells 0084 size 1|8103A860 ????|Viper187 & Delta FORCE -C:magnum shells 0084 size 2|8103A862 ????|Viper187 & Delta FORCE - -C:pp7 ammo 0085 value 1|8103A866 ????|Viper187 & Delta FORCE -C:pp7 ammo 0085 value 2|8103A86A ????|Viper187 & Delta FORCE -C:pp7 ammo 0085 size 1|8103A86C ????|Viper187 & Delta FORCE -C:pp7 ammo 0085 size 2|8103A86E ????|Viper187 & Delta FORCE - -C:ammo clip 0086 value 1|8103A872 ????|Viper187 & Delta FORCE -C:ammo clip 0086 value 2|8103A876 ????|Viper187 & Delta FORCE -C:ammo clip 0086 size 1|8103A878 ????|Viper187 & Delta FORCE -C:ammo clip 0086 size 2|8103A87A ????|Viper187 & Delta FORCE - -C:Grey door with warning strips 0087 value 1|8103A87E ????|Viper187 & Delta FORCE -C:Grey door with warning strips 0087 value 2|8103A882 ????|Viper187 & Delta FORCE -C:Grey door with warning strips 0087 size 1|8103A884 ????|Viper187 & Delta FORCE -C:Grey door with warning strips 0087 size 2|8103A886 ????|Viper187 & Delta FORCE - -C:Silo Door Arrow Left 0088 value 1|8103A88A ????|Viper187 & Delta FORCE -C:Silo Door Arrow Left 0088 value 2|8103A88E ????|Viper187 & Delta FORCE -C:Silo Door Arrow Left 0088 size 1|8103A890 ????|Viper187 & Delta FORCE -C:Silo Door Arrow Left 0088 size 2|8103A892 ????|Viper187 & Delta FORCE - -C:Beta Door 0089 value 1|8103A896 ????|Viper187 & Delta FORCE -C:Beta Door 0089 value 2|8103A89A ????|Viper187 & Delta FORCE -C:Beta Door 0089 size 1|8103A89C ????|Viper187 & Delta FORCE -C:Beta Door 0089 size 2|8103A89E ????|Viper187 & Delta FORCE - -C:Silo Door Arrow Left 008A value 1|8103A8A2 ????|Viper187 & Delta FORCE -C:Silo Door Arrow Left 008A value 2|8103A8A6 ????|Viper187 & Delta FORCE -C:Silo Door Arrow Left 008A size 1|8103A8A8 ????|Viper187 & Delta FORCE -C:Silo Door Arrow Left 008A size 2|8103A8AA ????|Viper187 & Delta FORCE - -C:Clear Glass Door 008B value 1|8103A8AE ????|Viper187 & Delta FORCE -C:Clear Glass Door 008B value 2|8103A8B2 ????|Viper187 & Delta FORCE -C:Clear Glass Door 008B size 1|8103A8B4 ????|Viper187 & Delta FORCE -C:Clear Glass Door 008B size 2|8103A8B6 ????|Viper187 & Delta FORCE - -C:silo Door Arrow Up 008C value 1|8103A8BA ????|Viper187 & Delta FORCE -C:silo Door Arrow Up 008C value 2|8103A8BE ????|Viper187 & Delta FORCE -C:silo Door Arrow Up 008C size 1|8103A8C0 ????|Viper187 & Delta FORCE -C:silo Door Arrow Up 008C size 2|8103A8C2 ????|Viper187 & Delta FORCE - -C:Corragated Door With warning strips 008D value 1|8103A8C6 ????|Viper187 & Delta FORCE -C:Corragated Door With warning strips 008D value 2|8103A8CA ????|Viper187 & Delta FORCE -C:Corragated Door With warning strips 008D size 1|8103A8CC ????|Viper187 & Delta FORCE -C:Corragated Door With warning strips 008D size 2|8103A8CE ????|Viper187 & Delta FORCE - -C:Rusty Old Door 008E value 1|8103A8D2 ????|Viper187 & Delta FORCE -C:Rusty Old Door 008E value 2|8103A8D6 ????|Viper187 & Delta FORCE -C:Rusty Old Door 008E size 1|8103A8D8 ????|Viper187 & Delta FORCE -C:Rusty Old Door 008E size 2|8103A8DA ????|Viper187 & Delta FORCE - -C:Rusty Old Door 008F value 1|8103A8DE ????|Viper187 & Delta FORCE -C:Rusty Old Door 008F value 2|8103A8E2 ????|Viper187 & Delta FORCE -C:Rusty Old Door 008F size 1|8103A8E4 ????|Viper187 & Delta FORCE -C:Rusty Old Door 008F size 2|8103A8E6 ????|Viper187 & Delta FORCE - -C:Blue Elevator Door 0090 value 1|8103A8EA ????|Viper187 & Delta FORCE -C:Blue Elevator Door 0090 value 2|8103A8EE ????|Viper187 & Delta FORCE -C:Blue Elevator Door 0090 size 1|8103A8F0 ????|Viper187 & Delta FORCE -C:Blue Elevator Door 0090 size 2|8103A8F2 ????|Viper187 & Delta FORCE - -C:Rusty Old Door 0091 value 1|8103A8F6 ????|Viper187 & Delta FORCE -C:Rusty Old Door 0091 value 2|8103A8FA ????|Viper187 & Delta FORCE -C:Rusty Old Door 0091 size 1|8103A8FC ????|Viper187 & Delta FORCE -C:Rusty Old Door 0091 size 2|8103A8FE ????|Viper187 & Delta FORCE - -C:Striped Blue door 0092 value 1|8103A902 ????|Viper187 & Delta FORCE -C:Striped Blue door 0092 value 2|8103A906 ????|Viper187 & Delta FORCE -C:Striped Blue door 0092 size 1|8103A908 ????|Viper187 & Delta FORCE -C:Striped Blue door 0092 size 2|8103A90A ????|Viper187 & Delta FORCE - -C:Blue door with holes 0093 value 1|8103A90E ????|Viper187 & Delta FORCE -C:Blue door with holes 0093 value 2|8103A912 ????|Viper187 & Delta FORCE -C:Blue door with holes 0093 size 1|8103A914 ????|Viper187 & Delta FORCE -C:Blue door with holes 0093 size 2|8103A916 ????|Viper187 & Delta FORCE - -C:striped blue door 0094 value 1|8103A91A ????|Viper187 & Delta FORCE -C:striped blue door 0094 value 2|8103A91E ????|Viper187 & Delta FORCE -C:striped blue door 0094 size 1|8103A920 ????|Viper187 & Delta FORCE -C:striped blue door 0094 size 2|8103A922 ????|Viper187 & Delta FORCE - -C:Runway Shutters 0095 value 1|8103A926 ????|Viper187 & Delta FORCE -C:Runway Shutters 0095 value 2|8103A92A ????|Viper187 & Delta FORCE -C:Runway Shutters 0095 size 1|8103A92C ????|Viper187 & Delta FORCE -C:Runway Shutters 0095 size 2|8103A92E ????|Viper187 & Delta FORCE - -C:Blue door with Red and white lines 0096 value 1|8103A932 ????|Viper187 & Delta FORCE -C:Blue door with Red and white lines 0096 value 2|8103A936 ????|Viper187 & Delta FORCE -C:Blue door with Red and white lines 0096 size 1|8103A938 ????|Viper187 & Delta FORCE -C:Blue door with Red and white lines 0096 size 2|8103A93A ????|Viper187 & Delta FORCE - -C:Blue door with white and Red lines 0097 value 1|8103A93E ????|Viper187 & Delta FORCE -C:Blue door with white and Red lines 0097 value 2|8103A942 ????|Viper187 & Delta FORCE -C:Blue door with white and Red lines 0097 size 1|8103A944 ????|Viper187 & Delta FORCE -C:Blue door with white and Red lines 0097 size 2|8103A946 ????|Viper187 & Delta FORCE - -C:Frigate door 0098 value 1|8103A94A ????|Viper187 & Delta FORCE -C:Frigate door 0098 value 2|8103A94E ????|Viper187 & Delta FORCE -C:Frigate door 0098 size 1|8103A950 ????|Viper187 & Delta FORCE -C:Frigate door 0098 size 2|8103A952 ????|Viper187 & Delta FORCE - -C:Keep clear Door 0099 value 1|8103A956 ????|Viper187 & Delta FORCE -C:Keep clear Door 0099 value 2|8103A95A ????|Viper187 & Delta FORCE -C:Keep clear Door 0099 size 1|8103A95C ????|Viper187 & Delta FORCE -C:Keep clear Door 0099 size 2|8103A95E ????|Viper187 & Delta FORCE - -C:Grey Door With blue stripe 009A value 1|8103A962 ????|Viper187 & Delta FORCE -C:Grey Door With blue stripe 009A value 2|8103A966 ????|Viper187 & Delta FORCE -C:Grey Door With blue stripe 009A size 1|8103A968 ????|Viper187 & Delta FORCE -C:Grey Door With blue stripe 009A size 2|8103A96A ????|Viper187 & Delta FORCE - -C:grey door 009B value 1|8103A96E ????|Viper187 & Delta FORCE -C:grey door 009B value 2|8103A972 ????|Viper187 & Delta FORCE -C:grey door 009B size 1|8103A974 ????|Viper187 & Delta FORCE -C:grey door 009B size 2|8103A976 ????|Viper187 & Delta FORCE - -C:facility door 009C value 1|8103A97A ????|Viper187 & Delta FORCE -C:facility door 009C value 2|8103A97E ????|Viper187 & Delta FORCE -C:facility door 009C size 1|8103A980 ????|Viper187 & Delta FORCE -C:facility door 009C size 2|8103A982 ????|Viper187 & Delta FORCE - -C:Wood door 009D value 1|8103A986 ????|Viper187 & Delta FORCE -C:Wood door 009D value 2|8103A98A ????|Viper187 & Delta FORCE -C:Wood door 009D size 1|8103A98C ????|Viper187 & Delta FORCE -C:Wood door 009D size 2|8103A98E ????|Viper187 & Delta FORCE - -C:Brown door 009E value 1|8103A992 ????|Viper187 & Delta FORCE -C:Brown door 009E value 2|8103A996 ????|Viper187 & Delta FORCE -C:Brown door 009E size 1|8103A998 ????|Viper187 & Delta FORCE -C:Brown door 009E size 2|8103A99A ????|Viper187 & Delta FORCE - -C:Facility Bathroom Door 009F value 1|8103A99E ????|Viper187 & Delta FORCE -C:Facility Bathroom Door 009F value 2|8103A9A2 ????|Viper187 & Delta FORCE -C:Facility Bathroom Door 009F size 1|8103A9A4 ????|Viper187 & Delta FORCE -C:Facility Bathroom Door 009F size 2|8103A9A6 ????|Viper187 & Delta FORCE - -C:Facility Lab Door 00A0 value 1|8103A9AA ????|Viper187 & Delta FORCE -C:Facility Lab Door 00A0 value 2|8103A9AE ????|Viper187 & Delta FORCE -C:Facility Lab Door 00A0 size 1|8103A9B0 ????|Viper187 & Delta FORCE -C:Facility Lab Door 00A0 size 2|8103A9B2 ????|Viper187 & Delta FORCE - -C:Train Wooden Door 00A1 value 1|8103A9B6 ????|Viper187 & Delta FORCE -C:Train Wooden Door 00A1 value 2|8103A9BA ????|Viper187 & Delta FORCE -C:Train Wooden Door 00A1 size 1|8103A9BC ????|Viper187 & Delta FORCE -C:Train Wooden Door 00A1 size 2|8103A9BE ????|Viper187 & Delta FORCE - -C:Brown door with glass 00A2 value 1|8103A9C2 ????|Viper187 & Delta FORCE -C:Brown door with glass 00A2 value 2|8103A9C6 ????|Viper187 & Delta FORCE -C:Brown door with glass 00A2 size 1|8103A9C8 ????|Viper187 & Delta FORCE -C:Brown door with glass 00A2 size 2|8103A9CA ????|Viper187 & Delta FORCE - -C:Brown door with glass 00A3 value 1|8103A9CE ????|Viper187 & Delta FORCE -C:Brown door with glass 00A3 value 2|8103A9D2 ????|Viper187 & Delta FORCE -C:Brown door with glass 00A3 size 1|8103A9D4 ????|Viper187 & Delta FORCE -C:Brown door with glass 00A3 size 2|8103A9D6 ????|Viper187 & Delta FORCE - -C:Caverns Eye Door 00A4 value 1|8103A9DA ????|Viper187 & Delta FORCE -C:Caverns Eye Door 00A4 value 2|8103A9DE ????|Viper187 & Delta FORCE -C:Caverns Eye Door 00A4 size 1|8103A9E0 ????|Viper187 & Delta FORCE -C:Caverns Eye Door 00A4 size 2|8103A9E2 ????|Viper187 & Delta FORCE - -C:Caverns Iris Door 00A5 value 1|8103A9E6 ????|Viper187 & Delta FORCE -C:Caverns Iris Door 00A5 value 2|8103A9EA ????|Viper187 & Delta FORCE -C:Caverns Iris Door 00A5 size 1|8103A9EC ????|Viper187 & Delta FORCE -C:Caverns Iris Door 00A5 size 2|8103A9EE ????|Viper187 & Delta FORCE - -C:Surface Door 00A6 value 1|8103A9F2 ????|Viper187 & Delta FORCE -C:Surface Door 00A6 value 2|8103A9F6 ????|Viper187 & Delta FORCE -C:Surface Door 00A6 size 1|8103A9F8 ????|Viper187 & Delta FORCE -C:Surface Door 00A6 size 2|8103A9FA ????|Viper187 & Delta FORCE - -C:Surface Door with glass 00A7 value 1|8103A9FE ????|Viper187 & Delta FORCE -C:Surface Door with glass 00A7 value 2|8103AA02 ????|Viper187 & Delta FORCE -C:Surface Door with glass 00A7 size 1|8103AA04 ????|Viper187 & Delta FORCE -C:Surface Door with glass 00A7 size 2|8103AA06 ????|Viper187 & Delta FORCE - -C:green door 00A8 value 1|8103AA0A ????|Viper187 & Delta FORCE -C:green door 00A8 value 2|8103AA0E ????|Viper187 & Delta FORCE -C:green door 00A8 size 1|8103AA10 ????|Viper187 & Delta FORCE -C:green door 00A8 size 2|8103AA12 ????|Viper187 & Delta FORCE - -C:Cradle Door 00A9 value 1|8103AA16 ????|Viper187 & Delta FORCE -C:Cradle Door 00A9 value 2|8103AA1A ????|Viper187 & Delta FORCE -C:Cradle Door 00A9 size 1|8103AA1C ????|Viper187 & Delta FORCE -C:Cradle Door 00A9 size 2|8103AA1E ????|Viper187 & Delta FORCE - -C:Stone door with prints 00AA value 1|8103AA22 ????|Viper187 & Delta FORCE -C:Stone door with prints 00AA value 2|8103AA26 ????|Viper187 & Delta FORCE -C:Stone door with prints 00AA size 1|8103AA28 ????|Viper187 & Delta FORCE -C:Stone door with prints 00AA size 2|8103AA2A ????|Viper187 & Delta FORCE - -C:Sand door with prints 00AB value 1|8103AA2E ????|Viper187 & Delta FORCE -C:Sand door with prints 00AB value 2|8103AA32 ????|Viper187 & Delta FORCE -C:Sand door with prints 00AB size 1|8103AA34 ????|Viper187 & Delta FORCE -C:Sand door with prints 00AB size 2|8103AA36 ????|Viper187 & Delta FORCE - -C:Dark Stone with prints 00AC value 1|8103AA3A ????|Viper187 & Delta FORCE -C:Dark Stone with prints 00AC value 2|8103AA3E ????|Viper187 & Delta FORCE -C:Dark Stone with prints 00AC size 1|8103AA40 ????|Viper187 & Delta FORCE -C:Dark Stone with prints 00AC size 2|8103AA42 ????|Viper187 & Delta FORCE - -C:Light brown wood door 00AD value 1|8103AA46 ????|Viper187 & Delta FORCE -C:Light brown wood door 00AD value 2|8103AA4A ????|Viper187 & Delta FORCE -C:Light brown wood door 00AD size 1|8103AA4C ????|Viper187 & Delta FORCE -C:Light brown wood door 00AD size 2|8103AA4E ????|Viper187 & Delta FORCE - -C:Egyptian Door 00AE value 1|8103AA52 ????|Viper187 & Delta FORCE -C:Egyptian Door 00AE value 2|8103AA56 ????|Viper187 & Delta FORCE -C:Egyptian Door 00AE size 1|8103AA58 ????|Viper187 & Delta FORCE -C:Egyptian Door 00AE size 2|8103AA5A ????|Viper187 & Delta FORCE - -C:Sand/Brown door 00AF value 1|8103AA5E ????|Viper187 & Delta FORCE -C:Sand/Brown door 00AF value 2|8103AA62 ????|Viper187 & Delta FORCE -C:Sand/Brown door 00AF size 1|8103AA64 ????|Viper187 & Delta FORCE -C:Sand/Brown door 00AF size 2|8103AA66 ????|Viper187 & Delta FORCE - -C:Blast Door 00B0 value 1|8103AA6A ????|Viper187 & Delta FORCE -C:Blast Door 00B0 value 2|8103AA6E ????|Viper187 & Delta FORCE -C:Blast Door 00B0 size 1|8103AA70 ????|Viper187 & Delta FORCE -C:Blast Door 00B0 size 2|8103AA72 ????|Viper187 & Delta FORCE - -C:Train Floor Plate 00B1 value 1|8103AA76 ????|Viper187 & Delta FORCE -C:Train Floor Plate 00B1 value 2|8103AA7A ????|Viper187 & Delta FORCE -C:Train Floor Plate 00B1 size 1|8103AA7C ????|Viper187 & Delta FORCE -C:Train Floor Plate 00B1 size 2|8103AA7E ????|Viper187 & Delta FORCE - -C:Blast Door 00B2 value 1|8103AA82 ????|Viper187 & Delta FORCE -C:Blast Door 00B2 value 2|8103AA86 ????|Viper187 & Delta FORCE -C:Blast Door 00B2 size 1|8103AA88 ????|Viper187 & Delta FORCE -C:Blast Door 00B2 size 2|8103AA8A ????|Viper187 & Delta FORCE - -C:Dam Shutter 00B3 value 1|8103AA8E ????|Viper187 & Delta FORCE -C:Dam Shutter 00B3 value 2|8103AA92 ????|Viper187 & Delta FORCE -C:Dam Shutter 00B3 size 1|8103AA94 ????|Viper187 & Delta FORCE -C:Dam Shutter 00B3 size 2|8103AA96 ????|Viper187 & Delta FORCE - -C:Fencing 00B4 value 1|8103AA9A ????|Viper187 & Delta FORCE -C:Fencing 00B4 value 2|8103AA9E ????|Viper187 & Delta FORCE -C:Fencing 00B4 size 1|8103AAA0 ????|Viper187 & Delta FORCE -C:Fencing 00B4 size 2|8103AAA2 ????|Viper187 & Delta FORCE - -C:Blown Up door 00B5 value 1|8103AAA6 ????|Viper187 & Delta FORCE -C:Blown Up door 00B5 value 2|8103AAAA ????|Viper187 & Delta FORCE -C:Blown Up door 00B5 size 1|8103AAAC ????|Viper187 & Delta FORCE -C:Blown Up door 00B5 size 2|8103AAAE ????|Viper187 & Delta FORCE - -C:Stack Gate 00B6 value 1|8103AAB2 ????|Viper187 & Delta FORCE -C:Stack Gate 00B6 value 2|8103AAB6 ????|Viper187 & Delta FORCE -C:Stack Gate 00B6 size 1|8103AAB8 ????|Viper187 & Delta FORCE -C:Stack Gate 00B6 size 2|8103AABA ????|Viper187 & Delta FORCE - -C:Statue Gates 00B7 value 1|8103AABE ????|Viper187 & Delta FORCE -C:Statue Gates 00B7 value 2|8103AAC2 ????|Viper187 & Delta FORCE -C:Statue Gates 00B7 size 1|8103AAC4 ????|Viper187 & Delta FORCE -C:Statue Gates 00B7 size 2|8103AAC6 ????|Viper187 & Delta FORCE - -***************************** - -C:Soviet KF7 00B8 value 1|8103AACA ????|Viper187 & Delta FORCE -C:Soviet KF7 00B8 value 2|8103AACE ????|Viper187 & Delta FORCE -C:Soviet KF7 00B8 size 1|8103AAD0 ????|Viper187 & Delta FORCE -C:Soviet KF7 00B8 size 2|8103AAD2 ????|Viper187 & Delta FORCE - -C:Grenade Laucher 00B9 value 1|8103AAD6 ????|Viper187 & Delta FORCE -C:Grenade Laucher 00B9 value 2|8103AADA ????|Viper187 & Delta FORCE -C:Grenade Laucher 00B9 size 1|8103AADC ????|Viper187 & Delta FORCE -C:Grenade Laucher 00B9 size 2|8103AADE ????|Viper187 & Delta FORCE - -C:Throwing Knife 00BA value 1|8103AAE2 ????|Viper187 & Delta FORCE -C:Throwing Knife 00BA value 2|8103AAE6 ????|Viper187 & Delta FORCE -C:Throwing Knife 00BA size 1|8103AAE8 ????|Viper187 & Delta FORCE -C:Throwing Knife 00BA size 2|8103AAEA ????|Viper187 & Delta FORCE - -C:Moonraker Laser 00BB value 1|8103AAEE ????|Viper187 & Delta FORCE -C:Moonraker Laser 00BB value 2|8103AAF2 ????|Viper187 & Delta FORCE -C:Moonraker Laser 00BB size 1|8103AAF4 ????|Viper187 & Delta FORCE -C:Moonraker Laser 00BB size 2|8103AAF6 ????|Viper187 & Delta FORCE - -C:AR33 Assault Rifle 00BC value 1|8103AAFA ????|Viper187 & Delta FORCE -C:AR33 Assault Rifle 00BC value 2|8103AAFE ????|Viper187 & Delta FORCE -C:AR33 Assault Rifle 00BC size 1|8103AB00 ????|Viper187 & Delta FORCE -C:AR33 Assault Rifle 00BC size 2|8103AB02 ????|Viper187 & Delta FORCE - -C:D5K 00BD value 1|8103AB06 ????|Viper187 & Delta FORCE -C:D5K 00BD value 2|8103AB0A ????|Viper187 & Delta FORCE -C:D5K 00BD size 1|8103AB0C ????|Viper187 & Delta FORCE -C:D5K 00BD size 2|8103AB0E ????|Viper187 & Delta FORCE - -C:Cougar Magnum 00BE value 1|8103AB12 ????|Viper187 & Delta FORCE -C:Cougar Magnum 00BE value 2|8103AB16 ????|Viper187 & Delta FORCE -C:Cougar Magnum 00BE size 1|8103AB18 ????|Viper187 & Delta FORCE -C:Cougar Magnum 00BE size 2|8103AB1A ????|Viper187 & Delta FORCE - -C:PP7 00BF value 1|8103AB1E ????|Viper187 & Delta FORCE -C:PP7 00BF value 2|8103AB22 ????|Viper187 & Delta FORCE -C:PP7 00BF size 1|8103AB24 ????|Viper187 & Delta FORCE -C:PP7 00BF size 2|8103AB26 ????|Viper187 & Delta FORCE - -C:Shotgun 00C0 value 1|8103AB2A ????|Viper187 & Delta FORCE -C:Shotgun 00C0 value 2|8103AB2E ????|Viper187 & Delta FORCE -C:Shotgun 00C0 size 1|8103AB30 ????|Viper187 & Delta FORCE -C:Shotgun 00C0 size 2|8103AB32 ????|Viper187 & Delta FORCE - -C:Klobb 00C1 value 1|8103AB36 ????|Viper187 & Delta FORCE -C:Klobb 00C1 value 2|8103AB3A ????|Viper187 & Delta FORCE -C:Klobb 00C1 size 1|8103AB3C ????|Viper187 & Delta FORCE -C:Klobb 00C1 size 2|8103AB3E ????|Viper187 & Delta FORCE - -C:Phantom 00C2 value 1|8103AB42 ????|Viper187 & Delta FORCE -C:Phantom 00C2 value 2|8103AB46 ????|Viper187 & Delta FORCE -C:Phantom 00C2 size 1|8103AB48 ????|Viper187 & Delta FORCE -C:Phantom 00C2 size 2|8103AB4A ????|Viper187 & Delta FORCE - -C:ZMG 00C3 value 1|8103AB4E ????|Viper187 & Delta FORCE -C:ZMG 00C3 value 2|8103AB52 ????|Viper187 & Delta FORCE -C:ZMG 00C3 size 1|8103AB54 ????|Viper187 & Delta FORCE -C:ZMG 00C3 size 2|8103AB56 ????|Viper187 & Delta FORCE - -C:Grenade 00C4 value 1|8103AB5A ????|Viper187 & Delta FORCE -C:Grenade 00C4 value 2|8103AB5E ????|Viper187 & Delta FORCE -C:Grenade 00C4 size 1|8103AB60 ????|Viper187 & Delta FORCE -C:Grenade 00C4 size 2|8103AB62 ????|Viper187 & Delta FORCE - -C:RCP-90 00C5 value 1|8103AB66 ????|Viper187 & Delta FORCE -C:RCP-90 00C5 value 2|8103AB6A ????|Viper187 & Delta FORCE -C:RCP-90 00C5 size 1|8103AB6C ????|Viper187 & Delta FORCE -C:RCP-90 00C5 size 2|8103AB6E ????|Viper187 & Delta FORCE - -C:Briefcase 00C6 value 1|8103AB72 ????|Viper187 & Delta FORCE -C:Briefcase 00C6 value 2|8103AB76 ????|Viper187 & Delta FORCE -C:Briefcase 00C6 size 1|8103AB78 ????|Viper187 & Delta FORCE -C:Briefcase 00C6 size 2|8103AB7A ????|Viper187 & Delta FORCE - -C:Remote Mine 00C7 value 1|8103AB7E ????|Viper187 & Delta FORCE -C:Remote Mine 00C7 value 2|8103AB82 ????|Viper187 & Delta FORCE -C:Remote Mine 00C7 size 1|8103AB84 ????|Viper187 & Delta FORCE -C:Remote Mine 00C7 size 2|8103AB86 ????|Viper187 & Delta FORCE - -C:Proximity Mine 00C8 value 1|8103AB8A ????|Viper187 & Delta FORCE -C:Proximity Mine 00C8 value 2|8103AB8E ????|Viper187 & Delta FORCE -C:Proximity Mine 00C8 size 1|8103AB90 ????|Viper187 & Delta FORCE -C:Proximity Mine 00C8 size 2|8103AB92 ????|Viper187 & Delta FORCE - -C:Timed Mine 00C9 value 1|8103AB96 ????|Viper187 & Delta FORCE -C:Timed Mine 00C9 value 2|8103AB9A ????|Viper187 & Delta FORCE -C:Timed Mine 00C9 size 1|8103AB9C ????|Viper187 & Delta FORCE -C:Timed Mine 00C9 size 2|8103AB9E ????|Viper187 & Delta FORCE - -C:Rocket for rocket launcher 00CA value 1|8103ABA2 ????|Viper187 & Delta FORCE -C:Rocket for rocket launcher 00CA value 2|8103ABA6 ????|Viper187 & Delta FORCE -C:Rocket for rocket launcher 00CA size 1|8103ABA8 ????|Viper187 & Delta FORCE -C:Rocket for rocket launcher 00CA size 2|8103ABAA ????|Viper187 & Delta FORCE - -C:Grenade Launcher shot 00CB value 1|8103ABAE ????|Viper187 & Delta FORCE -C:Grenade Launcher shot 00CB value 2|8103ABB2 ????|Viper187 & Delta FORCE -C:Grenade Launcher shot 00AB size 1|8103ABB4 ????|Viper187 & Delta FORCE -C:Grenade Launcher shot 00CB size 2|8103ABB6 ????|Viper187 & Delta FORCE - -C:Silenced PP7 00CC value 1|8103ABBA ????|Viper187 & Delta FORCE -C:Silenced PP7 00CC value 2|8103ABBE ????|Viper187 & Delta FORCE -C:Silenced PP7 00CC size 1|8103ABC0 ????|Viper187 & Delta FORCE -C:Silenced PP7 00CC size 2|8103ABC2 ????|Viper187 & Delta FORCE - -C:Dostovei DD44 00CD value 1|8103ABC6 ????|Viper187 & Delta FORCE -C:Dostovei DD44 00CD value 2|8103ABCA ????|Viper187 & Delta FORCE -C:Dostovei DD44 00CD size 1|8103ABCC ????|Viper187 & Delta FORCE -C:Dostovei DD44 00CD size 2|8103ABCE ????|Viper187 & Delta FORCE - -C:Silenced D5K 00CE value 1|8103ABD2 ????|Viper187 & Delta FORCE -C:Silenced D5K 00CE value 2|8103ABD6 ????|Viper187 & Delta FORCE -C:Silenced D5K 00CE size 1|8103ABD8 ????|Viper187 & Delta FORCE -C:Silenced D5K 00CE size 2|8103ABDA ????|Viper187 & Delta FORCE - -C:Auto Shotgun 00CF value 1|8103ABDE ????|Viper187 & Delta FORCE -C:Auto Shotgun 00CF value 2|8103ABE2 ????|Viper187 & Delta FORCE -C:Auto Shotgun 00CF size 1|8103ABE4 ????|Viper187 & Delta FORCE -C:Auto Shotgun 00CF size 2|8103ABE6 ????|Viper187 & Delta FORCE - -C:Golden Gun 00D0 value 1|8103ABEA ????|Viper187 & Delta FORCE -C:Golden Gun 00D0 value 2|8103ABEE ????|Viper187 & Delta FORCE -C:Golden Gun 00D0 size 1|8103ABF0 ????|Viper187 & Delta FORCE -C:Golden Gun 00D0 size 2|8103ABF2 ????|Viper187 & Delta FORCE - -C:Hunting Knife 00D1 value 1|8103ABF6 ????|Viper187 & Delta FORCE -C:Hunting Knife 00D1 value 2|8103ABFA ????|Viper187 & Delta FORCE -C:Hunting Knife 00D1 size 1|8103ABFC ????|Viper187 & Delta FORCE -C:Hunting Knife 00D1 size 2|8103ABFE ????|Viper187 & Delta FORCE - -C:Sniper Rifle 00D2 value 1|8103AC02 ????|Viper187 & Delta FORCE -C:Sniper Rifle 00D2 value 2|8103AC06 ????|Viper187 & Delta FORCE -C:Sniper Rifle 00D2 size 1|8103AC08 ????|Viper187 & Delta FORCE -C:Sniper Rifle 00D2 size 2|8103AC0A ????|Viper187 & Delta FORCE - -C:Rocket laucher 00D3 value 1|8103AC0E ????|Viper187 & Delta FORCE -C:Rocket laucher 00D3 value 2|8103AC12 ????|Viper187 & Delta FORCE -C:Rocket laucher 00D3 size 1|8103AC14 ????|Viper187 & Delta FORCE -C:Rocket laucher 00D3 size 2|8103AC16 ????|Viper187 & Delta FORCE - -C:black hat 00D4 value 1|8103AC1A ????|Viper187 & Delta FORCE -C:black hat 00D4 value 2|8103AC1E ????|Viper187 & Delta FORCE -C:black hat 00D4 size 1|8103AC20 ????|Viper187 & Delta FORCE -C:black hat 00D4 size 2|8103AC22 ????|Viper187 & Delta FORCE - -C:black hat 00D5 value 1|8103AC26 ????|Viper187 & Delta FORCE -C:black hat 00D5 value 2|8103AC2A ????|Viper187 & Delta FORCE -C:black hat 00D5 size 1|8103AC2C ????|Viper187 & Delta FORCE -C:black hat 00D5 size 2|8103AC2E ????|Viper187 & Delta FORCE - -C:black hat 00D6 value 1|8103AC32 ????|Viper187 & Delta FORCE -C:black hat 00D6 value 2|8103AC36 ????|Viper187 & Delta FORCE -C:black hat 00D6 size 1|8103AC38 ????|Viper187 & Delta FORCE -C:black hat 00D6 size 2|8103AC3A ????|Viper187 & Delta FORCE - -C:black hat 00D7 value 1|8103AC3E ????|Viper187 & Delta FORCE -C:black hat 00D7 value 2|8103AC42 ????|Viper187 & Delta FORCE -C:black hat 00D7 size 1|8103AC44 ????|Viper187 & Delta FORCE -C:black hat 00D7 size 2|8103AC46 ????|Viper187 & Delta FORCE - -C:green hat 00D8 value 1|8103AC4A ????|Viper187 & Delta FORCE -C:green hat 00D8 value 2|8103AC4E ????|Viper187 & Delta FORCE -C:green hat 00D8 size 1|8103AC50 ????|Viper187 & Delta FORCE -C:green hat 00D8 size 2|8103AC52 ????|Viper187 & Delta FORCE - -C:helmet 00D9 value 1|8103AC56 ????|Viper187 & Delta FORCE -C:helmet 00D9 value 2|8103AC5A ????|Viper187 & Delta FORCE -C:helmet 00D9 size 1|8103AC5C ????|Viper187 & Delta FORCE -C:helmet 00D9 size 2|8103AC5E ????|Viper187 & Delta FORCE - -C:helmet 00DA value 1|8103AC62 ????|Viper187 & Delta FORCE -C:helmet 00DA value 2|8103AC66 ????|Viper187 & Delta FORCE -C:helmet 00DA size 1|8103AC68 ????|Viper187 & Delta FORCE -C:helmet 00DA size 2|8103AC6A ????|Viper187 & Delta FORCE - -C:Moonraker helmet 00DB value 1|8103AC6E ????|Viper187 & Delta FORCE -C:Moonraker helmet 00DB value 2|8103AC72 ????|Viper187 & Delta FORCE -C:Moonraker helmet 00DB size 1|8103AC74 ????|Viper187 & Delta FORCE -C:Moonraker helmet 00DB size 2|8103AC76 ????|Viper187 & Delta FORCE - -C:black hat 00DC value 1|8103AC7A ????|Viper187 & Delta FORCE -C:black hat 00DC value 2|8103AC7E ????|Viper187 & Delta FORCE -C:black hat 00DC size 1|8103AC80 ????|Viper187 & Delta FORCE -C:black hat 00DC size 2|8103AC82 ????|Viper187 & Delta FORCE - -C:blue special forces hat 00DD value 1|8103AC86 ????|Viper187 & Delta FORCE -C:blue special forces hat 00DD value 2|8103AC8A ????|Viper187 & Delta FORCE -C:blue special forces hat 00DD size 1|8103AC8C ????|Viper187 & Delta FORCE -C:blue special forces hat 00DD size 2|8103AC8E ????|Viper187 & Delta FORCE - -C:red special forces hat 00DE value 1|8103AC92 ????|Viper187 & Delta FORCE -C:red special forces hat 00DE value 2|8103AC96 ????|Viper187 & Delta FORCE -C:red special forces hat 00DE size 1|8103AC98 ????|Viper187 & Delta FORCE -C:red special forces hat 00DE size 2|8103AC9A ????|Viper187 & Delta FORCE - -C:officers hat 00DF value 1|8103AC9E ????|Viper187 & Delta FORCE -C:officers hat 00DF value 2|8103ACA2 ????|Viper187 & Delta FORCE -C:officers hat 00DF size 1|8103ACA4 ????|Viper187 & Delta FORCE -C:officers hat 00DF size 2|8103ACA6 ????|Viper187 & Delta FORCE - -C:wrist dart 00E0 value 1|8103ACAA ????|Viper187 & Delta FORCE -C:wrist dart 00E0 value 2|8103ACAE ????|Viper187 & Delta FORCE -C:wrist dart 00E0 size 1|8103ACB0 ????|Viper187 & Delta FORCE -C:wrist dart 00E0 size 2|8103ACB2 ????|Viper187 & Delta FORCE - -C:explosive pen 00E1 value 1|8103ACB6 ????|Viper187 & Delta FORCE -C:explosive pen 00E1 value 2|8103ACBA ????|Viper187 & Delta FORCE -C:explosive pen 00E1 size 1|8103ACBC ????|Viper187 & Delta FORCE -C:explosive pen 00E1 size 2|8103ACBE ????|Viper187 & Delta FORCE - -C:bombcase 00E2 value 1|8103ACC2 ????|Viper187 & Delta FORCE -C:bombcase 00E2 value 2|8103ACC6 ????|Viper187 & Delta FORCE -C:bombcase 00E2 size 1|8103ACC8 ????|Viper187 & Delta FORCE -C:bombcase 00E2 size 2|8103ACCA ????|Viper187 & Delta FORCE - -C:flare pistol 00E3 value 1|8103ACCE ????|Viper187 & Delta FORCE -C:flare pistol 00E3 value 2|8103ACD2 ????|Viper187 & Delta FORCE -C:flare pistol 00E3 size 1|8103ACD4 ????|Viper187 & Delta FORCE -C:flare pistol 00E3 size 2|8103ACD6 ????|Viper187 & Delta FORCE - -C:piton gun 00E4 value 1|8103ACDA ????|Viper187 & Delta FORCE -C:piton gun 00E4 value 2|8103ACDE ????|Viper187 & Delta FORCE -C:piton gun 00E4 size 1|8103ACE0 ????|Viper187 & Delta FORCE -C:piton gun 00E4 size 2|8103ACE2 ????|Viper187 & Delta FORCE - -C:finger gun 00E5 value 1|8103ACE6 ????|Viper187 & Delta FORCE -C:finger gun 00E5 value 2|8103ACEA ????|Viper187 & Delta FORCE -C:finger gun 00E5 size 1|8103ACEC ????|Viper187 & Delta FORCE -C:finger gun 00E5 size 2|8103ACEE ????|Viper187 & Delta FORCE - -C:silver pp7 00E6 value 1|8103ACF2 ????|Viper187 & Delta FORCE -C:silver pp7 00E6 value 2|8103ACF6 ????|Viper187 & Delta FORCE -C:silver pp7 00E6 size 1|8103ACF8 ????|Viper187 & Delta FORCE -C:silver pp7 00E6 size 2|8103ACFA ????|Viper187 & Delta FORCE - -C:gold pp7 00E7 value 1|8103ACFE ????|Viper187 & Delta FORCE -C:gold pp7 00E7 value 2|8103AD02 ????|Viper187 & Delta FORCE -C:gold pp7 00E7 size 1|8103AD04 ????|Viper187 & Delta FORCE -C:gold pp7 00E7 size 2|8103AD06 ????|Viper187 & Delta FORCE - -C:dynamite 00E8 value 1|8103AD0A ????|Viper187 & Delta FORCE -C:dynamite 00E8 value 2|8103AD0E ????|Viper187 & Delta FORCE -C:dynamite 00E8 size 1|8103AD10 ????|Viper187 & Delta FORCE -C:dynamite 00E8 size 2|8103AD12 ????|Viper187 & Delta FORCE - -C:bungee 00E9 value 1|8103AD16 ????|Viper187 & Delta FORCE -C:bungee 00E9 value 2|8103AD1A ????|Viper187 & Delta FORCE -C:bungee 00E9 size 1|8103AD1C ????|Viper187 & Delta FORCE -C:bungee 00E9 size 2|8103AD1E ????|Viper187 & Delta FORCE - -C:door decoder 00EA value 1|8103AD22 ????|Viper187 & Delta FORCE -C:door decoder 00EA value 2|8103AD26 ????|Viper187 & Delta FORCE -C:door decoder 00EA size 1|8103AD28 ????|Viper187 & Delta FORCE -C:door decoder 00EA size 2|8103AD2A ????|Viper187 & Delta FORCE - -C:bomb defuser 00EB value 1|8103AD2E ????|Viper187 & Delta FORCE -C:bomb defuser 00EB value 2|8103AD32 ????|Viper187 & Delta FORCE -C:bomb defuser 00EB size 1|8103AD34 ????|Viper187 & Delta FORCE -C:bomb defuser 00EB size 2|8103AD36 ????|Viper187 & Delta FORCE - -C:bug detector 00EC value 1|8103AD3A ????|Viper187 & Delta FORCE -C:bug detector 00EC value 2|8103AD3E ????|Viper187 & Delta FORCE -C:bug detector 00EC size 1|8103AD40 ????|Viper187 & Delta FORCE -C:bug detector 00EC size 2|8103AD42 ????|Viper187 & Delta FORCE - -C:safe cracker 00ED value 1|8103AD46 ????|Viper187 & Delta FORCE -C:safe cracker 00ED value 2|8103AD4A ????|Viper187 & Delta FORCE -C:safe cracker 00ED size 1|8103AD4C ????|Viper187 & Delta FORCE -C:safe cracker 00ED size 2|8103AD4E ????|Viper187 & Delta FORCE - -C:camera 00EE value 1|8103AD52 ????|Viper187 & Delta FORCE -C:camera 00EE value 2|8103AD56 ????|Viper187 & Delta FORCE -C:camera 00EE size 1|8103AD58 ????|Viper187 & Delta FORCE -C:camera 00EE size 2|8103AD5A ????|Viper187 & Delta FORCE - -C:lock exploder 00EF value 1|8103AD5E ????|Viper187 & Delta FORCE -C:lock exploder 00EF value 2|8103AD62 ????|Viper187 & Delta FORCE -C:lock exploder 00EF size 1|8103AD64 ????|Viper187 & Delta FORCE -C:lock exploder 00EF size 2|8103AD66 ????|Viper187 & Delta FORCE - -C:door exploder 00F0 value 1|8103AD6A ????|Viper187 & Delta FORCE -C:door exploder 00F0 value 2|8103AD6E ????|Viper187 & Delta FORCE -C:door exploder 00F0 size 1|8103AD70 ????|Viper187 & Delta FORCE -C:door exploder 00F0 size 2|8103AD72 ????|Viper187 & Delta FORCE - -C:briefcase laying down 00F1 value 1|8103AD76 ????|Viper187 & Delta FORCE -C:briefcase laying down 00F1 value 2|8103AD7A ????|Viper187 & Delta FORCE -C:briefcase laying down 00F1 size 1|8103AD7C ????|Viper187 & Delta FORCE -C:briefcase laying down 00F1 size 2|8103AD7E ????|Viper187 & Delta FORCE - -C:briefcase standing up 00F2 value 1|8103AD82 ????|Viper187 & Delta FORCE -C:briefcase standing up 00F2 value 2|8103AD86 ????|Viper187 & Delta FORCE -C:briefcase standing up 00F2 size 1|8103AD88 ????|Viper187 & Delta FORCE -C:briefcase standing up 00F2 size 2|8103AD8A ????|Viper187 & Delta FORCE - -C:yale key 00F3 value 1|8103AD8E ????|Viper187 & Delta FORCE -C:yale key 00F3 value 2|8103AD92 ????|Viper187 & Delta FORCE -C:yale key 00F3 size 1|8103AD94 ????|Viper187 & Delta FORCE -C:yale key 00F3 size 2|8103AD96 ????|Viper187 & Delta FORCE - -C:bolt key 00F4 value 1|8103AD9A ????|Viper187 & Delta FORCE -C:bolt key 00F4 value 2|8103AD9E ????|Viper187 & Delta FORCE -C:bolt key 00F4 size 1|8103ADA0 ????|Viper187 & Delta FORCE -C:bolt key 00F4 size 2|8103ADA2 ????|Viper187 & Delta FORCE - -C:tracker bug 00F5 value 1|8103ADA6 ????|Viper187 & Delta FORCE -C:tracker bug 00F5 value 2|8103ADAA ????|Viper187 & Delta FORCE -C:tracker bug 00F5 size 1|8103ADAC ????|Viper187 & Delta FORCE -C:tracker bug 00F5 size 2|8103ADAE ????|Viper187 & Delta FORCE - -C:video camera 00F6 value 1|8103ADB2 ????|Viper187 & Delta FORCE -C:video camera 00F6 value 2|8103ADB6 ????|Viper187 & Delta FORCE -C:video camera 00F6 size 1|8103ADB8 ????|Viper187 & Delta FORCE -C:video camera 00F6 size 2|8103ADBA ????|Viper187 & Delta FORCE - -C:floppy disc 00F7 value 1|8103ADBE ????|Viper187 & Delta FORCE -C:floppy disc 00F7 value 2|8103ADC2 ????|Viper187 & Delta FORCE -C:floppy disc 00F7 size 1|8103ADC4 ????|Viper187 & Delta FORCE -C:floppy disc 00F7 size 2|8103ADC6 ????|Viper187 & Delta FORCE - -C:goldeneye key 00F8 value 1|8103ADCA ????|Viper187 & Delta FORCE -C:goldeneye key 00F8 value 2|8103ADCE ????|Viper187 & Delta FORCE -C:goldeneye key 00F8 size 1|8103ADD0 ????|Viper187 & Delta FORCE -C:goldeneye key 00F8 size 2|8103ADD2 ????|Viper187 & Delta FORCE - -C:polarized glasses 00F9 value 1|8103ADD6 ????|Viper187 & Delta FORCE -C:polarized glasses 00F9 value 2|8103ADDA ????|Viper187 & Delta FORCE -C:polarized glasses 00F9 size 1|8103ADDC ????|Viper187 & Delta FORCE -C:polarized glasses 00F9 size 2|8103ADDE ????|Viper187 & Delta FORCE - -C:credit card 00FA value 1|8103ADE2 ????|Viper187 & Delta FORCE -C:credit card 00FA value 2|8103ADE6 ????|Viper187 & Delta FORCE -C:credit card 00FA size 1|8103ADE8 ????|Viper187 & Delta FORCE -C:credit card 00FA size 2|8103ADEA ????|Viper187 & Delta FORCE - -C:dark glasses 00FB value 1|8103ADEE ????|Viper187 & Delta FORCE -C:dark glasses 00FB value 2|8103ADF2 ????|Viper187 & Delta FORCE -C:dark glasses 00FB size 1|8103ADF4 ????|Viper187 & Delta FORCE -C:dark glasses 00FB size 2|8103ADF6 ????|Viper187 & Delta FORCE - -C:gas key ring 00FC value 1|8103ADFA ????|Viper187 & Delta FORCE -C:gas key ring 00FC value 2|8103ADFE ????|Viper187 & Delta FORCE -C:gas key ring 00FC size 1|8103AE00 ????|Viper187 & Delta FORCE -C:gas key ring 00FC size 2|8103AE02 ????|Viper187 & Delta FORCE - -C:datathief 00FD value 1|8103AE06 ????|Viper187 & Delta FORCE -C:datathief 00FD value 2|8103AE0A ????|Viper187 & Delta FORCE -C:datathief 00FD size 1|8103AE0C ????|Viper187 & Delta FORCE -C:datathief 00FD size 2|8103AE0E ????|Viper187 & Delta FORCE - -C:safe without door 00FE value 1|8103AE12 ????|Viper187 & Delta FORCE -C:safe without door 00FE value 2|8103AE16 ????|Viper187 & Delta FORCE -C:safe without door 00FE size 1|8103AE18 ????|Viper187 & Delta FORCE -C:safe without door 00FE size 2|8103AE1A ????|Viper187 & Delta FORCE - -C:bomb 00FF value 1|8103AE1E ????|Viper187 & Delta FORCE -C:bomb 00FF value 2|8103AE22 ????|Viper187 & Delta FORCE -C:bomb 00FF size 1|8103AE24 ????|Viper187 & Delta FORCE -C:bomb 00FF size 2|8103AE26 ????|Viper187 & Delta FORCE - -C:classified folder 0100 value 1|8103AE2A ????|Viper187 & Delta FORCE -C:classified folder 0100 value 2|8103AE2E ????|Viper187 & Delta FORCE -C:classified folder 0100 size 1|8103AE30 ????|Viper187 & Delta FORCE -C:classified folder 0100 size 2|8103AE32 ????|Viper187 & Delta FORCE - -C:spy file 0101 value 1|8103AE36 ????|Viper187 & Delta FORCE -C:spy file 0101 value 2|8103AE3A ????|Viper187 & Delta FORCE -C:spy file 0101 size 1|8103AE3C ????|Viper187 & Delta FORCE -C:spy file 0101 size 2|8103AE3E ????|Viper187 & Delta FORCE - -C:start folder 0102 value 1|8103AE42 ????|Viper187 & Delta FORCE -C:start folder 0102 value 2|8103AE46 ????|Viper187 & Delta FORCE -C:start folder 0102 size 1|8103AE48 ????|Viper187 & Delta FORCE -C:start folder 0102 size 2|8103AE4A ????|Viper187 & Delta FORCE - -C:DAT 0103 value 1|8103AE4E ????|Viper187 & Delta FORCE -C:DAT 0103 value 2|8103AE52 ????|Viper187 & Delta FORCE -C:DAT 0103 size 1|8103AE54 ????|Viper187 & Delta FORCE -C:DAT 0103 size 2|8103AE56 ????|Viper187 & Delta FORCE - -C:bunker2 plans 0104 value 1|8103AE5A ????|Viper187 & Delta FORCE -C:bunker2 plans 0104 value 2|8103AE5E ????|Viper187 & Delta FORCE -C:bunker2 plans 0104 size 1|8103AE60 ????|Viper187 & Delta FORCE -C:bunker2 plans 0104 size 2|8103AE62 ????|Viper187 & Delta FORCE - -C:spool tape 0105 value 1|8103AE66 ????|Viper187 & Delta FORCE -C:spool tape 0105 value 2|8103AE6A ????|Viper187 & Delta FORCE -C:spool tape 0105 size 1|8103AE6C ????|Viper187 & Delta FORCE -C:spool tape 0105 size 2|8103AE6E ????|Viper187 & Delta FORCE - -C:audio tape 0106 value 1|8103AE72 ????|Viper187 & Delta FORCE -C:audio tape 0106 value 2|8103AE76 ????|Viper187 & Delta FORCE -C:audio tape 0106 size 1|8103AE78 ????|Viper187 & Delta FORCE -C:audio tape 0106 size 2|8103AE7A ????|Viper187 & Delta FORCE - -C:microfilm 0107 value 1|8103AE7E ????|Viper187 & Delta FORCE -C:microfilm 0107 value 2|8103AE82 ????|Viper187 & Delta FORCE -C:microfilm 0107 size 1|8103AE84 ????|Viper187 & Delta FORCE -C:microfilm 0107 size 2|8103AE86 ????|Viper187 & Delta FORCE - -C:microcode 0108 value 1|8103AE8A ????|Viper187 & Delta FORCE -C:microcode 0108 value 2|8103AE8E ????|Viper187 & Delta FORCE -C:microcode 0108 size 1|8103AE90 ????|Viper187 & Delta FORCE -C:microcode 0108 size 2|8103AE92 ????|Viper187 & Delta FORCE - -C:lectre 0109 value 1|8103AE96 ????|Viper187 & Delta FORCE -C:lectre 0109 value 2|8103AE9A ????|Viper187 & Delta FORCE -C:lectre 0109 size 1|8103AE9C ????|Viper187 & Delta FORCE -C:lectre 0109 size 2|8103AE9E ????|Viper187 & Delta FORCE - -C:money 010A value 1|8103AEA2 ????|Viper187 & Delta FORCE -C:money 010A value 2|8103AEA6 ????|Viper187 & Delta FORCE -C:money 010A size 1|8103AEA8 ????|Viper187 & Delta FORCE -C:money 010A size 2|8103AEAA ????|Viper187 & Delta FORCE - -C:gold bar 010B value 1|8103AEAE ????|Viper187 & Delta FORCE -C:gold bar 010B value 2|8103AEB2 ????|Viper187 & Delta FORCE -C:gold bar 010B size 1|8103AEB4 ????|Viper187 & Delta FORCE -C:gold bar 010B size 2|8103AEB6 ????|Viper187 & Delta FORCE - -C:heroin 010C value 1|8103AEBA ????|Viper187 & Delta FORCE -C:heroin 010C value 2|8103AEBE ????|Viper187 & Delta FORCE -C:heroin 010C size 1|8103AEC0 ????|Viper187 & Delta FORCE -C:heroin 010C size 2|8103AEC2 ????|Viper187 & Delta FORCE - -C:red card 010D value 1|8103AEC6 ????|Viper187 & Delta FORCE -C:red card 010D value 2|8103AECA ????|Viper187 & Delta FORCE -C:red card 010D size 1|8103AECC ????|Viper187 & Delta FORCE -C:red card 010D size 2|8103AECE ????|Viper187 & Delta FORCE - -C:red dossier 010E value 1|8103AED2 ????|Viper187 & Delta FORCE -C:red dossier 010E value 2|8103AED6 ????|Viper187 & Delta FORCE -C:red dossier 010E size 1|8103AED8 ????|Viper187 & Delta FORCE -C:red dossier 010E size 2|8103AEDA ????|Viper187 & Delta FORCE - -C:Bunker staff list 010F value 1|8103AEDE ????|Viper187 & Delta FORCE -C:Bunker staff list 010F value 2|8103AEE2 ????|Viper187 & Delta FORCE -C:Bunker staff list 010F size 1|8103AEE4 ????|Viper187 & Delta FORCE -C:Bunker staff list 010F size 2|8103AEE6 ????|Viper187 & Delta FORCE - -C:credit card 0110 value 1|8103AEEA ????|Viper187 & Delta FORCE -C:credit card 0110 value 2|8103AEEE ????|Viper187 & Delta FORCE -C:credit card 0110 size 1|8103AEF0 ????|Viper187 & Delta FORCE -C:credit card 0110 size 2|8103AEF2 ????|Viper187 & Delta FORCE - -C:plastique 0111 value 1|8103AEF6 ????|Viper187 & Delta FORCE -C:plastique 0111 value 2|8103AEFA ????|Viper187 & Delta FORCE -C:plastique 0111 size 1|8103AEFC ????|Viper187 & Delta FORCE -C:plastique 0111 size 2|8103AEFE ????|Viper187 & Delta FORCE - -C:helicopter black box 0112 value 1|8103AF02 ????|Viper187 & Delta FORCE -C:helicopter black box 0112 value 2|8103AF06 ????|Viper187 & Delta FORCE -C:helicopter black box 0112 size 1|8103AF08 ????|Viper187 & Delta FORCE -C:helicopter black box 0112 size 2|8103AF0A ????|Viper187 & Delta FORCE - -C:cctv tape 0113 value 1|8103AF0E ????|Viper187 & Delta FORCE -C:cctv tape 0113 value 2|8103AF12 ????|Viper187 & Delta FORCE -C:cctv tape 0113 size 1|8103AF14 ????|Viper187 & Delta FORCE -C:cctv tape 0113 size 2|8103AF16 ????|Viper187 & Delta FORCE - -C:Nintendo logo 0114 value 1|8103AF1A ????|Viper187 & Delta FORCE -C:Nintendo logo 0114 value 2|8103AF1E ????|Viper187 & Delta FORCE -C:Nintendo logo 0114 size 1|8103AF20 ????|Viper187 & Delta FORCE -C:Nintendo logo 0114 size 2|8103AF22 ????|Viper187 & Delta FORCE - -C:Goldeneye logo 0115 value 1|8103AF26 ????|Viper187 & Delta FORCE -C:Goldeneye logo 0115 value 2|8103AF2A ????|Viper187 & Delta FORCE -C:Goldeneye logo 0115 size 1|8103AF2C ????|Viper187 & Delta FORCE -C:Goldeneye logo 0115 size 2|8103AF2E ????|Viper187 & Delta FORCE - -C:Folder with royal crest 0116 value 1|8103AF32 ????|Viper187 & Delta FORCE -C:Folder with royal crest 0116 value 2|8103AF36 ????|Viper187 & Delta FORCE -C:Folder with royal crest 0116 size 1|8103AF38 ????|Viper187 & Delta FORCE -C:Folder with royal crest 0116 size 2|8103AF3A ????|Viper187 & Delta FORCE - -C:Dam truck 0117 value 1|8103AF3E ????|Viper187 & Delta FORCE -C:Dam truck 0117 value 2|8103AF42 ????|Viper187 & Delta FORCE -C:Dam truck 0117 size 1|8103AF44 ????|Viper187 & Delta FORCE -C:Dam truck 0117 size 2|8103AF46 ????|Viper187 & Delta FORCE - -C:jeep 0118 value 1|8103AF4A ????|Viper187 & Delta FORCE -C:jeep 0118 value 2|8103AF4E ????|Viper187 & Delta FORCE -C:jeep 0118 size 1|8103AF50 ????|Viper187 & Delta FORCE -C:jeep 0118 size 2|8103AF52 ????|Viper187 & Delta FORCE - -C:red Truck 0119 value 1|8103AF56 ????|Viper187 & Delta FORCE -C:red Truck 0119 value 2|8103AF5A ????|Viper187 & Delta FORCE -C:red Truck 0119 size 1|8103AF5C ????|Viper187 & Delta FORCE -C:red Truck 0119 size 2|8103AF5E ????|Viper187 & Delta FORCE - -C:brown helicopter 011A value 1|8103AF62 ????|Viper187 & Delta FORCE -C:brown helicopter 011A value 2|8103AF66 ????|Viper187 & Delta FORCE -C:brown helicopter 011A size 1|8103AF68 ????|Viper187 & Delta FORCE -C:brown helicopter 011A size 2|8103AF6A ????|Viper187 & Delta FORCE - -C:pirate helicopter 011B value 1|8103AF6E ????|Viper187 & Delta FORCE -C:pirate helicopter 011B value 2|8103AF72 ????|Viper187 & Delta FORCE -C:pirate helicopter 011B size 1|8103AF74 ????|Viper187 & Delta FORCE -C:pirate helicopter 011B size 2|8103AF76 ????|Viper187 & Delta FORCE - -C:hound helicopter 011C value 1|8103AF7A ????|Viper187 & Delta FORCE -C:hound helicopter 011C value 2|8103AF7E ????|Viper187 & Delta FORCE -C:hound helicopter 011C size 1|8103AF80 ????|Viper187 & Delta FORCE -C:hound helicopter 011C size 2|8103AF82 ????|Viper187 & Delta FORCE - -C:soviet camo chopper 011D value 1|8103AF86 ????|Viper187 & Delta FORCE -C:soviet camo chopper 011D value 2|8103AF8A ????|Viper187 & Delta FORCE -C:soviet camo chopper 011D size 1|8103AF8C ????|Viper187 & Delta FORCE -C:soviet camo chopper 011D size 2|8103AF8E ????|Viper187 & Delta FORCE - -C:black trailer 011E value 1|8103AF92 ????|Viper187 & Delta FORCE -C:black trailer 011E value 2|8103AF96 ????|Viper187 & Delta FORCE -C:black trailer 011E size 1|8103AF98 ????|Viper187 & Delta FORCE -C:black trailer 011E size 2|8103AF9A ????|Viper187 & Delta FORCE - -C:motorcycle 011F value 1|8103AF9E ????|Viper187 & Delta FORCE -C:motorcycle 011F value 2|8103AFA2 ????|Viper187 & Delta FORCE -C:motorcycle 011F size 1|8103AFA4 ????|Viper187 & Delta FORCE -C:motorcycle 011F size 2|8103AFA6 ????|Viper187 & Delta FORCE - -C:tank 0120 value 1|8103AFAA ????|Viper187 & Delta FORCE -C:tank 0120 value 2|8103AFAE ????|Viper187 & Delta FORCE -C:tank 0120 size 1|8103AFB0 ????|Viper187 & Delta FORCE -C:tank 0120 size 2|8103AFB2 ????|Viper187 & Delta FORCE - -C:amphibious vehicle 0121 value 1|8103AFB6 ????|Viper187 & Delta FORCE -C:amphibious vehicle 0121 value 2|8103AFBA ????|Viper187 & Delta FORCE -C:amphibious vehicle 0121 size 1|8103AFBC ????|Viper187 & Delta FORCE -C:amphibious vehicle 0121 size 2|8103AFBE ????|Viper187 & Delta FORCE - -C:speedboat 0122 value 1|8103AFC2 ????|Viper187 & Delta FORCE -C:speedboat 0122 value 2|8103AFC6 ????|Viper187 & Delta FORCE -C:speedboat 0122 size 1|8103AFC8 ????|Viper187 & Delta FORCE -C:speedboat 0122 size 2|8103AFCA ????|Viper187 & Delta FORCE - -C:Runway aeroplane 0123 value 1|8103AFCE ????|Viper187 & Delta FORCE -C:Runway aeroplane 0123 value 2|8103AFD2 ????|Viper187 & Delta FORCE -C:Runway aeroplane 0123 size 1|8103AFD4 ????|Viper187 & Delta FORCE -C:Runway aeroplane 0123 size 2|8103AFD6 ????|Viper187 & Delta FORCE - -C:wall mount drone gun plans 0124 value 1|8103AFDA ????|Viper187 & Delta FORCE -C:wall mount drone gun plans 0124 value 2|8103AFDE ????|Viper187 & Delta FORCE -C:wall mount drone gun plans 0124 size 1|8103AFE0 ????|Viper187 & Delta FORCE -C:wall mount drone gun plans 0124 size 2|8103AFE2 ????|Viper187 & Delta FORCE - -C:safe door 0125 value 1|8103AFE6 ????|Viper187 & Delta FORCE -C:safe door 0125 value 2|8103AFEA ????|Viper187 & Delta FORCE -C:safe door 0125 size 1|8103AFEC ????|Viper187 & Delta FORCE -C:safe door 0125 size 2|8103AFEE ????|Viper187 & Delta FORCE - -C:Bunker2 key rack 0126 value 1|8103AFF2 ????|Viper187 & Delta FORCE -C:Bunker2 key rack 0126 value 2|8103AFF6 ????|Viper187 & Delta FORCE -C:Bunker2 key rack 0126 size 1|8103AFF8 ????|Viper187 & Delta FORCE -C:Bunker2 key rack 0126 size 2|8103AFFA ????|Viper187 & Delta FORCE - -C:Bunker2 sliding glass door 0127 value 1|8103AFFE ????|Viper187 & Delta FORCE -C:Bunker2 sliding glass door 0127 value 2|8103B002 ????|Viper187 & Delta FORCE -C:Bunker2 sliding glass door 0127 size 1|8103B004 ????|Viper187 & Delta FORCE -C:Bunker2 sliding glass door 0127 size 2|8103B006 ????|Viper187 & Delta FORCE - -C:satellite dish 0128 value 1|8103B00A ????|Viper187 & Delta FORCE -C:satellite dish 0128 value 2|8103B00E ????|Viper187 & Delta FORCE -C:satellite dish 0128 size 1|8103B010 ????|Viper187 & Delta FORCE -C:satellite dish 0128 size 2|8103B012 ????|Viper187 & Delta FORCE - -C:arch sec door 0129 value 1|8103B016 ????|Viper187 & Delta FORCE -C:arch sec door 0129 value 2|8103B01A ????|Viper187 & Delta FORCE -C:arch sec door 0129 size 1|8103B01C ????|Viper187 & Delta FORCE -C:arch sec door 0129 size 2|8103B01E ????|Viper187 & Delta FORCE - -C:arch sec door 012A value|8103B022 ????|Viper187 & Delta FORCE -C:arch sec door 012A image|8103B026 ????|Viper187 & Delta FORCE -C:arch sec door 012A size 1|8103B028 ????|Viper187 & Delta FORCE -C:arch sec door 012A size 2|8103B02A ????|Viper187 & Delta FORCE - -C:free standing drone gun 012B value|8103B02E ????|Viper187 & Delta FORCE -C:free standing drone gun 012B image|8103B032 ????|Viper187 & Delta FORCE -C:free standing drone gun 012B size 1|8103B034 ????|Viper187 & Delta FORCE -C:free standing drone gun 012B size 2|8103B036 ????|Viper187 & Delta FORCE - -C:Depot train door 012C value 1|8103B03A ????|Viper187 & Delta FORCE -C:Depot train door 012C value 2|8103B03E ????|Viper187 & Delta FORCE -C:Depot train door 012C size 1|8103B040 ????|Viper187 & Delta FORCE -C:Depot train door 012C size 2|8103B042 ????|Viper187 & Delta FORCE - -C:white car 012D value 1|8103B046 ????|Viper187 & Delta FORCE -C:white car 012D value 2|8103B04A ????|Viper187 & Delta FORCE -C:white car 012D size 1|8103B04C ????|Viper187 & Delta FORCE -C:white car 012D size 2|8103B04E ????|Viper187 & Delta FORCE - -C:white car 012E value 1|8103B052 ????|Viper187 & Delta FORCE -C:white car 012E value 2|8103B056 ????|Viper187 & Delta FORCE -C:white car 012E size 1|8103B058 ????|Viper187 & Delta FORCE -C:white car 012E size 2|8103B05A ????|Viper187 & Delta FORCE - -C:white car 012F value 1|8103B05E ????|Viper187 & Delta FORCE -C:white car 012F value 2|8103B062 ????|Viper187 & Delta FORCE -C:white car 012F size 1|8103B064 ????|Viper187 & Delta FORCE -C:white car 012F size 2|8103B066 ????|Viper187 & Delta FORCE - -C:red car 0130 value 1|8103B06A ????|Viper187 & Delta FORCE -C:red car 0130 value 2|8103B06E ????|Viper187 & Delta FORCE -C:red car 0130 size 1|8103B070 ????|Viper187 & Delta FORCE -C:red car 0130 size 2|8103B072 ????|Viper187 & Delta FORCE - -C:Ouromovs car 0131 value 1|8103B076 ????|Viper187 & Delta FORCE -C:Ouromovs car 0131 value 2|8103B07A ????|Viper187 & Delta FORCE -C:Ouromovs car 0131 size 1|8103B07C ????|Viper187 & Delta FORCE -C:Ouromovs car 0131 size 2|8103B07E ????|Viper187 & Delta FORCE - -C:helicopter black box 0132 value 1|8103B082 ????|Viper187 & Delta FORCE -C:helicopter black box 0132 value 2|8103B086 ????|Viper187 & Delta FORCE -C:helicopter black box 0132 size 1|8103B088 ????|Viper187 & Delta FORCE -C:helicopter black box 0132 size 2|8103B08A ????|Viper187 & Delta FORCE - -C:shuttle door with spikes 0133 value 1|8103B08E ????|Viper187 & Delta FORCE -C:shuttle door with spikes 0133 value 2|8103B092 ????|Viper187 & Delta FORCE -C:shuttle door with spikes 0133 size 1|8103B094 ????|Viper187 & Delta FORCE -C:shuttle door with spikes 0133 size 2|8103B096 ????|Viper187 & Delta FORCE - -C:red star on panel 0134 value 1|8103B09A ????|Viper187 & Delta FORCE -C:red star on panel 0134 value 2|8103B09E ????|Viper187 & Delta FORCE -C:red star on panel 0134 size 1|8103B0A0 ????|Viper187 & Delta FORCE -C:red star on panel 0134 size 2|8103B0A2 ????|Viper187 & Delta FORCE - -C:shutters 0135 value 1|8103B0A6 ????|Viper187 & Delta FORCE -C:shutters 0135 value 2|8103B0AA ????|Viper187 & Delta FORCE -C:shutters 0135 size 1|8103B0AC ????|Viper187 & Delta FORCE -C:shutters 0135 size 2|8103B0AE ????|Viper187 & Delta FORCE - -C:beaker with blue 0136 value 1|8103B0B2 ????|Viper187 & Delta FORCE -C:beaker with blue 0136 value 2|8103B0B6 ????|Viper187 & Delta FORCE -C:beaker with blue 0136 size 1|8103B0B8 ????|Viper187 & Delta FORCE -C:beaker with blue 0136 size 2|8103B0BA ????|Viper187 & Delta FORCE - -C:beaker 0137 value 1|8103B0BE ????|Viper187 & Delta FORCE -C:beaker 0137 value 2|8103B0C2 ????|Viper187 & Delta FORCE -C:beaker 0137 size 1|8103B0C4 ????|Viper187 & Delta FORCE -C:beaker 0137 size 2|8103B0C6 ????|Viper187 & Delta FORCE - -C:5 beaker set 0138 value 1|8103B0CA ????|Viper187 & Delta FORCE -C:5 beaker set 0138 value 2|8103B0CE ????|Viper187 & Delta FORCE -C:5 beaker set 0138 size 1|8103B0D0 ????|Viper187 & Delta FORCE -C:5 beaker set 0138 size 2|8103B0D2 ????|Viper187 & Delta FORCE - -C:mines 0139 value 1|8103B0D6 ????|Viper187 & Delta FORCE -C:mines 0139 value 2|8103B0DA ????|Viper187 & Delta FORCE -C:mines 0139 size 1|8103B0DC ????|Viper187 & Delta FORCE -C:mines 0139 size 2|8103B0DE ????|Viper187 & Delta FORCE - -C:jungle bush 013A value 1|8103B0E2 ????|Viper187 & Delta FORCE -C:jungle bush 013A value 2|8103B0E6 ????|Viper187 & Delta FORCE -C:jungle bush 013A size 1|8103B0E8 ????|Viper187 & Delta FORCE -C:jungle bush 013A size 2|8103B0EA ????|Viper187 & Delta FORCE - -C:jungle bush 013B value 1|8103B0EE ????|Viper187 & Delta FORCE -C:jungle bush 013B value 2|8103B0F2 ????|Viper187 & Delta FORCE -C:jungle bush 013B size 1|8103B0F4 ????|Viper187 & Delta FORCE -C:jungle bush 013B size 2|8103B0F6 ????|Viper187 & Delta FORCE - -C:jungle bush 013C value 1|8103B0FA ????|Viper187 & Delta FORCE -C:jungle bush 013C value 2|8103B0FE ????|Viper187 & Delta FORCE -C:jungle bush 013C size 1|8103B100 ????|Viper187 & Delta FORCE -C:jungle bush 013C size 2|8103B102 ????|Viper187 & Delta FORCE - -C:pointy jungle bush 013D value 1|8103B106 ????|Viper187 & Delta FORCE -C:pointy jungle bush 013D value 2|8103B10A ????|Viper187 & Delta FORCE -C:pointy jungle bush 013D size 1|8103B10C ????|Viper187 & Delta FORCE -C:pointy jungle bush 013D size 2|8103B10E ????|Viper187 & Delta FORCE - -C:jungle tree 013E value 1|8103B112 ????|Viper187 & Delta FORCE -C:jungle tree 013E value 2|8103B116 ????|Viper187 & Delta FORCE -C:jungle tree 013E size 1|8103B118 ????|Viper187 & Delta FORCE -C:jungle tree 013E size 2|8103B11A ????|Viper187 & Delta FORCE - -C:intro screen 013F value 1|8103B11E ????|Viper187 & Delta FORCE -C:intro screen 013F value 2|8103B122 ????|Viper187 & Delta FORCE -C:intro screen 013F size 1|8103B124 ????|Viper187 & Delta FORCE -C:intro screen 013F size 2|8103B126 ????|Viper187 & Delta FORCE - -C:Street buildings 0140 value 1|8103B12A ????|Viper187 & Delta FORCE -C:Street buildings 0140 value 2|8103B12E ????|Viper187 & Delta FORCE -C:Street buildings 0140 size 1|8103B130 ????|Viper187 & Delta FORCE -C:Street buildings 0140 size 2|8103B132 ????|Viper187 & Delta FORCE - -C:Street buildings 0141 value 1|8103B136 ????|Viper187 & Delta FORCE -C:Street buildings 0141 value 2|8103B13A ????|Viper187 & Delta FORCE -C:Street buildings 0141 size 1|8103B13C ????|Viper187 & Delta FORCE -C:Street buildings 0141 size 2|8103B13E ????|Viper187 & Delta FORCE - -C:Street buildings 0142 value 1|8103B142 ????|Viper187 & Delta FORCE -C:Street buildings 0142 value 2|8103B146 ????|Viper187 & Delta FORCE -C:Street buildings 0142 size 1|8103B148 ????|Viper187 & Delta FORCE -C:Street buildings 0142 size 2|8103B14A ????|Viper187 & Delta FORCE - -C:Street buildings 0143 value 1|8103B14E ????|Viper187 & Delta FORCE -C:Street buildings 0143 value 2|8103B152 ????|Viper187 & Delta FORCE -C:Street buildings 0143 size 1|8103B154 ????|Viper187 & Delta FORCE -C:Street buildings 0143 size 2|8103B156 ????|Viper187 & Delta FORCE - -C:Street buildings 0144 value 1|8103B15A ????|Viper187 & Delta FORCE -C:Street buildings 0144 value 2|8103B15E ????|Viper187 & Delta FORCE -C:Street buildings 0144 size 1|8103B160 ????|Viper187 & Delta FORCE -C:Street buildings 0144 size 2|8103B162 ????|Viper187 & Delta FORCE - -C:roller door 0145 value 1|8103B166 ????|Viper187 & Delta FORCE -C:roller door 0145 value 2|8103B16A ????|Viper187 & Delta FORCE -C:roller door 0145 size 1|8103B16C ????|Viper187 & Delta FORCE -C:roller door 0145 size 2|8103B16E ????|Viper187 & Delta FORCE - -C:Aztec vertical glass slider 0146 value 1|8103B172 ????|Viper187 & Delta FORCE -C:Aztec vertical glass slider 0146 value 2|8103B176 ????|Viper187 & Delta FORCE -C:Aztec vertical glass slider 0146 size 1|8103B178 ????|Viper187 & Delta FORCE -C:Aztec vertical glass slider 0146 size 2|8103B17A ????|Viper187 & Delta FORCE - -C:Aztec first stone vert slider 0147 value 1|8103B17E ????|Viper187 & Delta FORCE -C:Aztec first stone vert slider 0147 value 2|8103B182 ????|Viper187 & Delta FORCE -C:Aztec first stone vert slider 0147 size 1|8103B184 ????|Viper187 & Delta FORCE -C:Aztec first stone vert slider 0147 size 2|8103B186 ????|Viper187 & Delta FORCE - -C:Shuttle 0148 value 1|8103B18A ????|Viper187 & Delta FORCE -C:Shuttle 0148 value 2|8103B18E ????|Viper187 & Delta FORCE -C:Shuttle 0148 size 1|8103B190 ????|Viper187 & Delta FORCE -C:Shuttle 0148 size 2|8103B192 ????|Viper187 & Delta FORCE - -C:girder within girder 0149 value 1|8103B196 ????|Viper187 & Delta FORCE -C:girder within girder 0149 value 2|8103B19A ????|Viper187 & Delta FORCE -C:girder within girder 0149 size 1|8103B19C ????|Viper187 & Delta FORCE -C:girder within girder 0149 size 2|8103B19E ????|Viper187 & Delta FORCE - -C:concrete with two brass pipe chimneys 014A value 1|8103B1A2 ????|Viper187 & Delta FORCE -C:concrete with two brass pipe chimneys 014A value 2|8103B1A6 ????|Viper187 & Delta FORCE -C:concrete with two brass pipe chimneys 014A size 1|8103B1A8 ????|Viper187 & Delta FORCE -C:concrete with two brass pipe chimneys 014A size 2|8103B1AA ????|Viper187 & Delta FORCE - -C:cube of rock 014B value 1|8103B1AE ????|Viper187 & Delta FORCE -C:cube of rock 014B value 2|8103B1B2 ????|Viper187 & Delta FORCE -C:cube of rock 014B size 1|8103B1B4 ????|Viper187 & Delta FORCE -C:cube of rock 014B size 2|8103B1B6 ????|Viper187 & Delta FORCE - -C:mainframe with green 014C value 1|8103B1BA ????|Viper187 & Delta FORCE -C:mainframe with green 014C value 2|8103B1BE ????|Viper187 & Delta FORCE -C:mainframe with green 014C size 1|8103B1C0 ????|Viper187 & Delta FORCE -C:mainframe with green 014C size 2|8103B1C2 ????|Viper187 & Delta FORCE - -C:flag 014D value 1|8103B1C6 ????|Viper187 & Delta FORCE -C:flag 014D value 2|8103B1CA ????|Viper187 & Delta FORCE -C:flag 014D size 1|8103B1CC ????|Viper187 & Delta FORCE -C:flag 014D size 2|8103B1CE ????|Viper187 & Delta FORCE - -C:road barrier 014E value 1|8103B1D2 ????|Viper187 & Delta FORCE -C:road barrier 014E value 2|8103B1D6 ????|Viper187 & Delta FORCE -C:road barrier 014E size 1|8103B1D8 ????|Viper187 & Delta FORCE -C:road barrier 014E size 2|8103B1DA ????|Viper187 & Delta FORCE - -C:screen for covert modem 014F value 1|8103B1DE ????|Viper187 & Delta FORCE -C:screen for covert modem 014F value 2|8103B1E2 ????|Viper187 & Delta FORCE -C:screen for covert modem 014F size 1|8103B1E4 ????|Viper187 & Delta FORCE -C:screen for covert modem 014F size 2|8103B1E6 ????|Viper187 & Delta FORCE - -C:Dam sliding door activator 0150 value 1|8103B1EA ????|Viper187 & Delta FORCE -C:Dam sliding door activator 0150 value 2|8103B1EE ????|Viper187 & Delta FORCE -C:Dam sliding door activator 0150 size 1|8103B1F0 ????|Viper187 & Delta FORCE -C:Dam sliding door activator 0150 size 2|8103B1F2 ????|Viper187 & Delta FORCE - -C:standing console 0151 value 1|8103B1F6 ????|Viper187 & Delta FORCE -C:standing console 0151 value 2|8103B1FA ????|Viper187 & Delta FORCE -C:standing console 0151 size 1|8103B1FC ????|Viper187 & Delta FORCE -C:standing console 0151 size 2|8103B1FE ????|Viper187 & Delta FORCE - -C:test tube 0152 value 1|8103B202 ????|Viper187 & Delta FORCE -C:test tube 0152 value 2|8103B206 ????|Viper187 & Delta FORCE -C:test tube 0152 size 1|8103B208 ????|Viper187 & Delta FORCE -C:test tube 0152 size 2|8103B20A ????|Viper187 & Delta FORCE - -C:solid stone cairn 0153 value 1|8103B20E ????|Viper187 & Delta FORCE -C:solid stone cairn 0153 value 2|8103B202 ????|Viper187 & Delta FORCE -C:solid stone cairn 0153 size 1|8103B204 ????|Viper187 & Delta FORCE -C:solid stone cairn 0153 size 2|8103B206 ????|Viper187 & Delta FORCE -********************************* -heads -FORM|8103DE12 -IMAGE|8103DE16 -SIZE|8103DE18 -HEIGHT|8103DE1C -VALUE|8003DE20 - -FORM|8103DE26 -IMAGE|8103DE2A -SIZE|8103DE2C -SIZE|8103DE30 -VALUE|8003DE34 - -NATALYA 10 FORM|8103DF52 -NATALYA 10 IMAGE|810DF56 -NATALYA 10 SIZE|8103DF58 -NATALYA 10 SIZE|8103DF5C -NATALYA 10 VALUE|8003DF60 - -BONDBOILER 4A FORM|8103E3DA -BONDBOILER 4A IMAGE|8103E3DE -BONDBOILER 4A SIZE|8103E3F0 -BONDBOILER 4A SIZE|8103E3F4 -BONDBOILER 4A VALUE|8003E3F8 diff --git a/notes/GE Documentation/GameShark - GE specific/PAL + NTSC.txt b/notes/GE Documentation/GameShark - GE specific/PAL + NTSC.txt deleted file mode 100644 index 3f0d4b3..0000000 --- a/notes/GE Documentation/GameShark - GE specific/PAL + NTSC.txt +++ /dev/null @@ -1,25 +0,0 @@ -NTSC Skip Intros: -8102A932 0000 - -PAL Skip Intros: -81025E82 0000 - -NTSC Enable All Players: -81063BF0 8009 -81063BF2 E360 -D102B522 0002 -81063BF2 3860 -D102B522 0003 -81063BF2 0DE0 -D102B522 0004 -81063BF0 8008 -[note: use 4pl setup] - -PAL Enable All Players: -81056DD0 8008 -81056DD2 8EA0 -D1026A72 0003 -81056DD2 B910 -D1026A72 0002 -81056DD2 E380 -[note: use 2pl NTSC setup] diff --git a/notes/GE Documentation/GameShark - GE specific/WIP 4bond folder hack.txt b/notes/GE Documentation/GameShark - GE specific/WIP 4bond folder hack.txt deleted file mode 100644 index f17237f..0000000 --- a/notes/GE Documentation/GameShark - GE specific/WIP 4bond folder hack.txt +++ /dev/null @@ -1,592 +0,0 @@ -refer to ..\Other WIPs\oddities.txt for info on bond folder selection - -loads (1st time) to 8016C7D0 -0x0 050004E4 8016CCB4 //handle for tabs on side of folder -0x4 05000514 8016CCE4 //handle for basic folder -0x8 050005D4 8016CDA4 //handle for FOR YOUR EYES ONLY -0xC 05000604 8016CDD4 //handle for OHMSS -0x10 05000634 8016CE04 //handle for CONFIDENTIAL - briefing -0x14 05000664 8016CE34 //handle for CONFIDENTIAL - multi -0x18 05000694 8016CE64 //handle for CLASSIFIED -0x1C 050006C4 8016CE94 //handle to shadow beneath character image -0x20 050006F4 8016CEC4 //handle for 1st selected file image (Connery) -0x24 05000724 8016CEF4 //handle for 2st selected file image (Dalton) -0x28 05000754 8016CF24 //handle for 3st selected file image (Moore) -0x2C 05000784 8016CF54 //handle for 4st selected file image (Brosnan) -0x30 050007CC 8016CF9C //handle to shadow beneath briefing image -0x34 05000BD4 8016D3A4 //handle to main folder select screen -0x38 05000C04 8016D3D4 //handle to shadow beneath slot selection pic -0x3C 05000C34 8016D404 //handle for 1st slot selection pic (Connery) -0x40 05000C64 8016D434 //handle for 2st slot selection pic (Dalton) -0x44 05000C94 8016D464 //handle for 3st slot selection pic (Moore) -0x48 05000CC4 8016D494 //handle for 4st slot selection pic (Brosnan) -0x4C 05000574 8016CD44 //handle for solo stage select -0x50 050005A4 8016CD74 //handle to solo selection table (stage imgs) -0x54 050005BC 8016CD8C //solo selection table (stage imgs) -0x58 050007FC 8016CFCC //handle for Dam briefing image -0x5C 0500082C 8016CFFC //handle for Facility briefing image -0x60 0500085C 8016D02C //handle for Runway briefing image -0x64 0500088C 8016D05C //handle for Surface I briefing image -0x68 050008BC 8016D08C //handle for Bunker I briefing image -0x6C 050008EC 8016D0BC //handle for Silo briefing image -0x70 0500091C 8016D0EC //handle for Frigate briefing image -0x74 0500094C 8016D11C //handle for Surface II briefing image -0x78 0500097C 8016D14C //handle for Bunker II briefing image -0x7C 050009AC 8016D17C //handle for Statue briefing image -0x80 050009DC 8016D1AC //handle for Archives briefing image -0x84 05000A0C 8016D1DC //handle for Streets briefing image -0x88 05000A3C 8016D20C //handle for Depot briefing image -0x8C 05000A6C 8016D23C //handle for Train briefing image -0x90 05000A9C 8016D26C //handle for Jungle briefing image -0x94 05000ACC 8016D29C //handle for Control briefing image -0x98 05000AFC 8016D2CC //handle for Caverns briefing image -0x9C 05000B2C 8016D2FC //handle for Cradle briefing image -0xA0 05000B5C 8016D32C //handle for Aztec briefing image -0xA4 05000B8C 8016D35C //handle for Egypt briefing image -0xA8 05000544 8016CD14 //handle to secondary folder (multi, cheats, briefings) - -images are modded, but need to use the other three files! - -character fix: -TLB-ram rom(E) rom(J) rom(P) edit! -7F00D349 41E79 41ED9 3FC39 92 -7F00B824 40354 403B4 3E114 2A460004 -7F00B834 40364 403C4 3E124 2A460003 -7F00B844 40374 403D4 3E134 2A460002 -7F00B854 40384 403E4 3E144 2A460001 - -corrects main menu: -7F00B864 40394 403F4 3E154 2A460004 -7F00B874 403A4 40404 3E164 2A460003 -7F00B884 403B4 40414 3E174 2A460002 -7F00B894 403C4 40424 3E184 2A460001 - -then the binary... - - -------------------- -object list instance entries: 8023C320 0xBC in size -0x0 4 0000008C unknown... -0x4 4 00000000 -0x8 4 80039890 handle to object header -0xC 4 800B91E0 not certain... -0x10 4 8023CAA0 more crazy data -rest are floats - ----------ASM -7001385C: COPY ROUTINE FROM COMPRESSION PROBABLY -LBU T6,0000 (V1) //T6<-8016C7F0 -ADDIU A2,A2,FFFF //starts out at 4, dec -ADDIU V0,V0,0001 -ADDIU V1,V1,0001 -BNEZ A2,7001385C -SB T6,FFFF (V0) -JR RA -OR V0,A0,R0 - -7F075AC8: EXPAND INTO POINTERS - -7F00B75C: actual use, but not used for display? -LW T6,0008 (V1) //T6=offset table address -ADDU T7,T6,S1 //T7=address for particular offset -LW A1,0000 (T7) //A1=offset -BEQL A1,R0,7F00B798 //if NULL, iterate - ADDIU S0,S0,0001 -LHU T8,0000 (A1) //T8=type of table command -ANDI T9,T8,00FF //T9=only type flag -BNEL S3,T9,7F00B798 //If command !=12 branch (S3=12 - handle) - ADDIU S0,S0,0001 //S0++ -JAL 7F06C79C //processes type command -OR A0,S2,R0 //A0=S2 (object table address ie. 8023C320) -SW R0,0000 (V0) -LW V1,0008 (S2) //A1=object's header address -LH A2,000C (V1) //A2=#offsets -ADDIU S0,S0,0001 //S0++ -//7F00B798: -SLT AT,S0,A2 -BNEZ AT,7F00B75C //run through all offsets... -ADDIU S1,S1,0004 -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -[7F06C79C:] process type of command at offset -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LHU T6,0000 (A1) //T6=type at offset address -OR A2,R0,R0 //A2=0 -LW A3,0010 (A0) //A3=0x10 in object entry list (A0 looks into object list) -ANDI T7,T6,00FF //T7=only the type at offset -ADDIU T8,T7,FFFF //T8=T7-1 -SLTIU AT,T8,0018 //AT=1 if valid type -BEQ AT,R0,7F06C840 -SLL T8,T8,0x2 //T8->offset -LUI AT,8005 -ADDU AT,AT,T8 //AT+=offset -LW T8,4AF8 (AT) //T8=80054AF8 -JR T8 -NOP - ---------- -7F00B808: construct the folders - probably - S2=0-3, depending on which iteration is in use - however, this only occurs on 4-bond menu... -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -SW A1,0024 (SP) -OR S0,A0,R0 -ADDIU A1,R0,0008 //A1=8 Connery selected file pic -JAL 7F00B7C0 -ADDIU A2,R0,0001 -OR A0,S0,R0 -ADDIU A1,R0,0009 //A1=9 Dalton selected file pic -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,000A //A1=A Moore selected file pic -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,000B //A1=B Brosnan selected file pic -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,000F //A1=F Connery 4-folder pic (move to 10) -JAL 7F00B7C0 -ADDIU A2,R0,0001 -OR A0,S0,R0 -ADDIU A1,R0,0010 //A1=10 Dalton 4-folder pic (move to 12) -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,0011 //A1=11 Moore 4-folder pic (move to F) -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,0012 //A1=12 Brosnan 4-folder pic (move to 11) -JAL 7F00B7C0 -OR A2,R0,R0 -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - - -7F00B7C0: used to resolve an image offset and assign it to an object instance - A0=address of object instance - A1=menu offset # - A2= visible==1 ? yes:no -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A2,0020 (SP) -LW T6,0008 (A0) //T6=handle to object header (A0=object instance data) -SLL T8,A1,0x2 //T8=offset#->address offset -LW T7,0008 (T6) //T7=offsets in object data -ADDU T9,T7,T8 //T9=address of specific offset -LW A3,0000 (T9) //A3=selected offset -BEQL A3,R0,7F00B7FC //skip if NULL - LW RA,0014 (SP) -JAL 7F06C79C //process type of command at offset -OR A1,A3,R0 //A1=8023 address from object instance data -LW T0,0020 (SP) //T0=ordering number set to block! -SW T0,0000 (V0) //T0->8023CAD0 (++ for rest) -LW RA,0014 (SP) -//7F00B7FC: -ADDIU SP,SP,0018 -JR RA -NOP - - --------------Physical menu construction -(too lazy to type it all) -//7F00BD90: -LW A0,0000 (S0) //A0=current menu address -JAL 7F00B808 //assign the images... (this is the bugger!) -OR A1,V0,R0 -//7F00BD9C: -LW A0,0000 (S0) //A0=pointer to object instance (S0=2A95C[+=4]) -ADDIU A1,R0,000E //A1=menu offset# (shadow beneath slot selection pic) -JAL 7F00B7C0 //load/select image to be used -ADDIU A2,R0,0001 //A2=activate image -LW A0,0000 (S0) // -ADDIU A1,R0,000D //A1=menu offset# (main folder select screen) -JAL 7F00B7C0 //load/select image to be used -ADDIU A2,R0,0001 //A2=activate image -LW T8,0054 (SP) -ADDIU S2,S2,0001 -ADDIU AT,R0,0004 -ADDIU T9,T8,000C -SW T9,0054 (SP) -ADDIU S0,S0,0004 -BNE S2,AT,7F00BCD0 -ADDIU S1,S1,000C -//7F00BDDC: -LUI V0,8003 -ADDIU V0,V0,A8E8 //V0=8002A8E8 -LW A0,0000 (V0) //A0=selected slot -ADDIU AT,R0,0064 -BLTZ A0,7F00BE30 //selected slot = -1 when no slot yet selected -NOP -//7F00BDF4: -BNE A0,AT,7F00BE04 -LUI T0,8003 -LW A0,A8EC (T0) //A0=8002A8EC=??? -SW A0,0000 (V0) //A0->selected slot # -//7F00BE04: -BLTZ A0,7F00BE14 -SLTI AT,A0,0004 -BNEZ AT,7F00BE1C -NOP -//7F00BE14: -SW R0,0000 (V0) -OR A0,R0,R0 -//7F00BE1C: -JAL 7F00BB68 -NOP -ADDIU S1,R0,FFFF -LUI AT,8003 -SW S1,A8E8 (AT) -//7F00BE30: -LUI T1,8003 -LW T1,A91C (T1) //T1=8002A91C=??? - same as slot selected? -ADDIU S1,R0,FFFF -OR S2,R0,R0 -BLTZ T1,7F00BFEC -LUI S0,8003 -//more - 7F00BE48 - ------------------- selected folder construction -(too lazy to type it all) -//7F00D340 -LUI A0,8003 -JAL 7F01EBC0 //DELETED ROUTINE - now does V0=0 -LW A0,A8E8 (A0) //A0=selected folder# -LW A0,0000 (S0) //A0=object instance address -JAL 7F00B808 //that crazy image selector thingy -OR A1,V0,R0 -//7F00D358: construct the folder on-screen -LW A0,0000 (S0) //A0=object instance address -OR A1,R0,R0 //A1=menu offset # (tabs) -JAL 7F00B7C0 //apply -ADDIU A2,R0,0001 //A2=1 (visible) -LW A0,0000 (S0) //A0=object instance address -ADDIU A2,R0,0001 //A1=menu offset # (basic folder) -JAL 7F00B7C0 //apply -ADDIU A2,R0,0001 //A2=1 (visible) -LW A0,0000 (S0) //A0=object instance address -ADDIU A2,R0,0003 //A1=menu offset # (OHMSS) -JAL 7F00B7C0 //apply -ADDIU A2,R0,0001 //A2=1 (visible) -LW A0,0000 (S0) //A0=object instance address -ADDIU A2,R0,0007 //A1=menu offset # (shadow beneath character img) -JAL 7F00B7C0 //apply -ADDIU A2,R0,0001 //A2=1 (visible) -LW A0,0000 (S0) //A0=object instance address -ADDIU A2,R0,0002 //A1=menu offset # (FOR YOUR EYES ONLY) -JAL 7F00B7C0 //apply -ADDIU A2,R0,0001 //A2=1 (visible) -LUI S0,8007 -LUI AT,8003 -ADDIU S0,S0,9784 //S0=80069784=sram data? can"t remember offhand -SW R0,A8E4 (AT) //0->8002A8E4 - -etc... - -7F01EBC0: DELETED ROUTINE - org. handled character image used -SW A0,0000 (SP) //nothing uses this -JR RA -OR V0,R0,R0 //fries the pointer ------------------------ - -7F00B258: routine that handles calling the GOLDENEYE logo (through -B304) -//7F00B294: -LUI A2,8003 -LUI A3,0003 -ORI A3,A3,C000 -LW A2,A950 (A2) //A2=8002A950=address logo loaded to -LW A0,0CFC (V0) //A0=(8003AF24) OBJ modifier address for header -LW A1,0D00 (V0) //A1=(8003AF28) OBJ modifier address for text eqv. -JAL 7F0764A4 -SW R0,0010 (SP) -//7F00B2B4: -LUI A0,8004 -JAL 7F075CF4 -LW A0,AF24 (A0) //A0=8003AF24=address of header -LUI A0,8004 -JAL 7F06C094 -LW A0,AF24 (A) //A0=8003AF24=address of header -LUI V1,8003 -ADDIU V1,V1,A958 -SW V0,0000 (V1) //V0->8002A958 (address of loaded compressed binary) -OR A0,V0,R0 //A0=V0 -JAL 7F06CE78 -LUI A1,3F80 -LUI A0,8003 -LW A0,A958 (A0) //A0=8002A958= V0 from above -JAL 7F06CC0C -ADDIU A1,SP,0024 -LW RA,001C (SP) -ADDIU SP,SP,0030 -JR RA -NOP - ----- -7F00B8AC: routine that loads the folders -ADDIU SP,SP,FFC8 -LUI T6,8003 -LW T6,A95C (T6) //T6=object instance table -SW RA,0034 (SP) -SW S2,0030 (SP) -SW S1,002C (SP) -SW S0,0028 (SP) -BNEZ T6,7F00B974 //if T6=NULL, ditch -SDC1 F20,0020 (SP) -LUI S2,8004 -ADDIU S2,S2,A228 //S2=8003A228 (start of OBJ modifier table - objectified.xls) -LUI A2,8003 -LW A2,A950 (A2) //A2=8003A950=address for decompressed walletbond -LW A0,0D08 (S2) //A0=8003AF30=address for OBJ header -LW A1,0D0C (S2) //A1=8003AF34=address for OBJ name -ORI A3,R0,A000 //A3=0000A000 -JAL 7F0764A4 //DECOMPRESSES or at least copies OBJ to new location. expands offsets -SW R0,0010 (SP) -JAL 7F075CF4 -LW A0,0D08 (S2) //A0=8003AF30=address for OBJ header - -the file is parsed and expanded within 7F0764A4... possibly right after writting the header though! - -(after loading/copying file - FILE NOT YET EXPANDED!) -//7F0764E8: fill OBJ header -OR A2,V0,R0 //A2=V0=address of decompressed binary (8016C7D0) ABOVE LINE IS SKIPPED BY SOME CODE! -LH T9,0016 (S0) //T9=# images declared -LH T7,000C (S0) //T7=# offsets -SW A2,0008 (S0) //address for offsets -> header+8 -SLL T0,T9,0x2 -SUBU T0,T0,T9 //T0=#imgs * 3 -SLL T8,T7,0x2 //T8=#off to offset -ADDU V0,A2,T8 //V0=address for start of image declarations -SLL T0,T0,0x2 //T0=(#imgs * 3) to offset -ADDU T1,V0,T0 //T1=address for object table -SW V0,0018 (S0) //address for imgs -> header+18 -SW T1,0000 (S0) //address for table -> header+0 -OR A0,S0,R0 //A0=S0=header address -JAL 7F075A90 //Expand + Parse object! -LUI A1,0500 - ------------------------------------- ------------------------------------- -jump out @ 7F0764E8 to 8040something -AB018 -> AAB30, offset 4E8 -do this: 70400070 - -simpler... -OR T7,R0,RA -ORI A2,R0,0A2E -JAL subroutine -ADDIU T0,V0,55AE -JAL subroutine -ADDIU T0,V0,550E -JAL subroutine -ADDIU T0,V0,56EE -OR RA,R0,T7 -J 7F0764F0 -OR A2,V0,R0 - -subroutine: //8040009C -SH A2,0000 (T0) -SH A2,0F48 (T0) -ADDIU A2,A2,0001 -SH A2,0038 (T0) -SH A2,0F80 (T0) -ADDIU A2,A2,0001 -SH A2,0048 (T0) -SH A2,0F90 (T0) -ADDIU A2,A2,0001 -SH A2,0058 (T0) -SH A2,0FA0 (T0) -JR RA -ADDIU A2,A2,0001 - -81400070 001F -81400072 7825 -81400074 3406 -81400076 0A2E -81400078 0C10 -8140007A 0027 -8140007C 2448 -8140007E 55AE -81400080 0C10 -81400082 0027 -81400084 2448 -81400086 550E -81400088 0C10 -8140008A 0027 -8140008C 2448 -8140008E 56EE -81400090 000F -81400092 F825 -81400094 0FC1 -81400096 D93C -81400098 0002 -8140009A 3025 - -8140009C A506 -8140009E 0000 -814000A0 A506 -814000A2 0F48 -814000A4 24C6 -814000A6 0001 -814000A8 A506 -814000AA 0038 -814000AC A506 -814000AE 0F80 -814000B0 24C6 -814000B2 0001 -814000B4 A506 -814000B6 0048 -814000B8 A506 -814000BA 0F90 -814000BC 24C6 -814000BE 0001 -814000C0 A506 -814000C2 0058 -814000C4 A506 -814000C6 0FA0 -814000C8 03E0 -814000CA 0008 -814000CC 24C6 -814000CE 0001 - - ------------------------ ------------------------ -upload: - -need to test two chunks: -ROM actual offset value -3EB30 40354 1824 2A460004 - 40364 1834 2A460003 - 40374 1844 2A460002 - 40384 1854 2A460001 - 40394 1864 2A460004 - 403A4 1874 2A460003 - 403B4 1884 2A460002 - 403C4 1894 2A460001 -40B30 41E79 1349 92 - -then set the new image offsets in compressed binary... - -- -8100D058 LUI V0,8040 ->codeaddy -8100D05C JALR V0,S1 ->to newcode -8100D060 LUI S0,B004 - -ADDIU V0,S0,0B30 -BNE V0,T3, +lower (3) -ADDIU V0,S0,EB30 - -//upper: -ORI S0,R0,0092 -SB S0,1349 (A2) - -//lower: -BNE V0,T3,+last (E) -LUI V0,B00B -LUI S0,2A46 -ADDIU S0,S0,0001 -SW S0,1854 (A2) -SW S0,1894 (A2) -ADDIU S0,S0,0001 -SW S0,1844 (A2) -SW S0,1884 (A2) -ADDIU S0,S0,0001 -SW S0,1834 (A2) -SW S0,1874 (A2) -ADDIU S0,S0,0001 -SW S0,1824 (A2) -SW S0,1864 (A2) - -//last: -ADDIU V0,V0,AB30 -BNE V0,T3,+return (3) -LUI S0,0810 -ADDIU S0,S0,001C //lower half of jump 70400070 -SW S0,04E8 (A2) - -//return: -LW RA,001C (SP) -LW S0,0014 (SP) -J 7000D060 -OR V0,R0,R0 - -8100D058 3C02 -8100D05A 8040 -8100D05C 0040 -8100D05E 8809 -8100D060 3C10 -8100D062 B004 - -81400000 2602 -81400002 0B30 -81400004 144B -81400006 0003 -81400008 2602 -8140000A EB30 -8140000C 3410 -8140000E 0092 -81400010 A0D0 -81400012 1349 -81400014 144B -81400016 000E -81400018 3C02 -8140001A B00B -8140001C 3C10 -8140001E 2A46 -81400020 2610 -81400022 0001 -81400024 ACD0 -81400026 1854 -81400028 ACD0 -8140002A 1894 -8140002C 2610 -8140002E 0001 -81400030 ACD0 -81400032 1844 -81400034 ACD0 -81400036 1884 -81400038 2610 -8140003A 0001 -8140003C ACD0 -8140003E 1834 -81400040 ACD0 -81400042 1874 -81400044 2610 -81400046 0001 -81400048 ACD0 -8140004A 1824 -8140004C ACD0 -8140004E 1864 -81400050 2442 -81400052 AB30 -81400054 144B -81400056 0003 -81400058 3C10 -8140005A 0810 -8140005C 2610 -8140005E 001C -81400060 ACD0 -81400062 04E8 -81400064 8FBF -81400066 001C -81400068 8FB0 -8140006A 0014 -8140006C 0220 -8140006E 0008 -81400070 0000 -81400072 1025 diff --git a/notes/GE Documentation/GameShark - GE specific/WIP GE setup uploader.txt b/notes/GE Documentation/GameShark - GE specific/WIP GE setup uploader.txt deleted file mode 100644 index ce7f01f..0000000 --- a/notes/GE Documentation/GameShark - GE specific/WIP GE setup uploader.txt +++ /dev/null @@ -1,104 +0,0 @@ -jungle setup trace: -00047adc for rom address pull (86B000) - -7F0BCEB4 grabs the rom address of loaded anything, stores to T3 -A1 gets from S0 1271d0 -7F9BCAC8 A2 grabs from 8008B4E8 the size of the compressed binary -7F0BCAFC A1=ROM ADDRESS, later stored to stack - -70005BD0 A3=ROM ADDRESS, stored back to stack 7000F6BC -7000F728 T8=ROM ADDRESS, stored to T9 (800636D0) - -7001E834 A1=rom address, a2= target address (2A4EB0, in this case), a3=size,T9=jump 7000CF90 - -7000CFE0 PI_DRAM set (V0) -7000CFF0 T2=rom address -7000D000 T4=immediate rom address, then store to PI_CART_ADDR -7000D028 T6=size, set to PI_WR_LEN - -80000180: thing is written, now some interupt stuff. Can swap stuff in now if need be -3C1A7001 LUI K0,7001 -275A01A0 ADDIU K0,K0,01A0 -03400008 JR K0 -00000000 NOP -regs: -V0=00000000 002A4EB0 sometimes...(target address immediate) -A0=FFFFFFFF 802A4EB0 (target address) -A2=FFFFFFFF 802A4EB0 (target address) -t2=00000000 0086B000 (rom address) -t3=FFFFFFFF B086B000 (rom address mirror) -t4=00000000 1085B000 (rom address immediate) -t6=00000000 00007150 (size) -k0 is safe. -s0-s7=0 on rom load but should be reset to original values and only used if detection true! - -decompression: -7F0CE7F0 -A0=1172 address, copied to 8008D350. -A1=target address, copied at 8008D354 -T5=current offset in file, copied over 8008D350 - ----------------------- -This copies over a loaded compressed file with one uploaded - -/*jump out of an interupt. WTF?*/ -80000180: thing is written, now some interupt stuff. Can swap stuff in now if need be -3C1A8040 LUI K0,8040 -275A0000 ADDIU K0,K0,0000 -03400008 JR K0 -00000000 NOP - -except the GS stole my handle! moved to 0120 - -/*check T3 against the original rom address -start list with num entries following (8040007C) -list at 80400080 is romaddy targetaddy size filler (0B000000, 80xxxxxx, xxxxxxxxx, 00000000) -can't use anything other than K0 + K1 until detecting a rom address... -thankfully there's a lot of room to spare*/ - -80400000: /*check if a rom address was loaded (faster this way)*/ -3C1AFF00 LUI K0,FF00 -034BD824 AND K1,K0,T3 /*T3=address if returned from PI*/ -3C1AB000 LUI K0,B000 -177A0017 BNE K0,K1, +17 /*if not B0000000, return*/ -3C1A8040 LUI K0,8040 - -80400014: /*set up loop for check. S0-S7 dirty so long as you reset to 0*/ -8F50007C LW S0,007C (K0) /*S0 gets the # replaced thingies*/ -1A000012 BLEZ S0, +12 /*go to return if nothing replaced*/ -2610FFFF ADDIU S0,S0,FFFF - -80400020: /*read list to check for replacement*/ -00108900 SLL S1,S0,0x4 -023A8821 ADDU S1,S1,K0 -8E3B0080 LW K1,0080 (S1) /*K1=rom address to check against*/ -536B0005 BEQL K1,T3, +5 /*go to copy routine if same address*/ -8E3B0084 LW K1,0084 (S1) /*grab target address*/ -5E00FFFA BGTZL S0, +FFFA /*repeat read loop*/ -2610FFFF ADDIU S0,S0,FFFF /*S0-1*/ - -1000000A BEQ R0,R0, +A /*go unconditionally to cleanup*/ -00008025 OR S0,R0,R0 - -80400044: /*setup copy routine. K1 has already been passed the address of the replacement binary*/ -8E310088 LW S1,0088 (S1) //S1=size of file -0004D025 OR K0,R0,A0 //K0=target address - -8040004C: /*actually copy. to ensure signed addresses don't screw this up, both addresses are manually incremented*/ -83700000 LB S0,0000 (K1) /*grab new info*/ -A3500000 SB S0,0000 (K0) /*copy to new location*/ -275A0001 ADDIU K0,K0,0001 -277B0001 ADDIU K1,K1,0001 /*inc both addresses*/ -5E20FFFB BGTZL S1, +FFFB /*copy loop*/ -2631FFFF ADDIU S1,S1,FFFF /*S1-1*/ - -00008025 OR S0,R0,R0 /*reset S0*/ - -80400068: /*cleanup from above routine*/ -00008825 OR S1,R0,R0 - -8040006C: /*return*/ -3C1A7001 LUI K0,7001 -275A01A0 ADDIU K0,K0,01A0 -03400008 JR K0 -00000000 NOP diff --git a/notes/GE Documentation/GameShark - GE specific/WIP PAL upload.txt b/notes/GE Documentation/GameShark - GE specific/WIP PAL upload.txt deleted file mode 100644 index c667c88..0000000 --- a/notes/GE Documentation/GameShark - GE specific/WIP PAL upload.txt +++ /dev/null @@ -1,122 +0,0 @@ -search for this: -906E0000 24C6FFFF 24420001 24630001 -14C0FFFB A04EFFFF 03E00008 00801025 -908E0000 00801825 11C00005 00000000 - -CHANGE TO: -080000D0 24002B30 - -GET MENU TYPE: -NTSC 1A8C3 0008 = SOLO Stage Select - -GET UPLOAD LOCATION JUNGLE: - -8008D354 -000191E0 - ------------ -handle: -8101308C 0800 -8101308E 00D0 -81013090 2400 -81013092 2B30 - -current menu: -D0025E13 0008 - -pointer to decompressed setup file: -80064C68 - -Ump_setupstatueZ 8004FCA8 -UsetupjunZ 8004FD38 - -stage setup pointers: -50002304 0000 -810325E6 B020 -810325BA B020 - ------------ -"PAL upload code #100" .off -81000340 3C08 -81000342 8006 -81000344 8D08 -81000346 4C68 -81000348 3C09 -8100034A 0001 -8100034C 3529 -8100034E 91E0 -81000350 0109 -81000352 4821 -81000354 8D2A -81000356 0000 -81000358 3C0B -8100035A 7034 -8100035C 356B -8100035E 3637 -81000360 154B -81000362 0011 -81000364 8D2A -81000366 0008 -81000368 154B -8100036A 000F -8100036C 8D2A -8100036E 0004 -81000370 3C0B -81000372 3961 -81000374 154B -81000376 000C -81000378 8D2A -8100037A 000C -8100037C 154B -8100037E 000A -81000380 3409 -81000382 BAAD -81000384 3C08 -81000386 8000 -81000388 A509 -8100038A 03E0 -8100038C 8D0A -8100038E 03E0 -81000390 3C09 -81000392 BAAD -81000394 3529 -81000396 F00D -81000398 552A -8100039A 0003 -8100039C AD00 -8100039E 03E0 -810003A0 1000 -"PAL upload code (2)" .off -810003A2 FFFB -810003A4 8D0A -810003A6 03E0 -810003A8 24C6 -810003AA FFFF -810003AC 0800 -810003AE 4C24 -810003B0 906E -810003B2 0000 -8101308C 0800 -8101308E 00D0 -81013090 2400 -81013092 2B30 -D0025E13 0008 -810003E2 F00D -50002304 0000 -810325E6 B020 -810325BA B020 - -"PAL MP Patch #13" .off -8004FCB1 006A -8104FCB2 756E -8104FCB4 5A00 -D0025E13 0008 -810407AA FCA8 -D0025E13 0008 -8104082E FD38 -D0025E13 000E -810407AA FD38 -D0025E13 000E -8104082E FCA8 -D0025E13 000E -810003E2 F00D diff --git a/notes/GE Documentation/GameShark - GE specific/WIP coop fix.txt b/notes/GE Documentation/GameShark - GE specific/WIP coop fix.txt deleted file mode 100644 index c83c6a2..0000000 --- a/notes/GE Documentation/GameShark - GE specific/WIP coop fix.txt +++ /dev/null @@ -1,529 +0,0 @@ -okay, probably just need to patch binary that is loaded through rom -00001025 8FBF001C 8FB00014 8FB10018 -03E00008 27BD0028 3C0EA460 03E00008 - -7000D058 (8000D058 - mighty convenient setting it up like this!) -OR V0,R0,R0 -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -This is the return after catching the PI interupt. It just resets some values and returns to whatever called it. That's the link. V0, S0, S1 are free. -T4 = rom address (00000000 10xxxxxx-as sent to PI_CART_ADDY_REG) -T3 = rom address (FFFFFFFF B0xxxxxx) -T2 = rom address (00000000 00xxxxxx) also A1 - -A2 = target addy (FFFFFFFF 80xxxxxx) also A0 -V0 = target addy (00000000 00xxxxxx-as sent to PI_DRAM_ADDY_REG) - ------------- -list of crap that loads MP (holds BE820) -tEMPLE 2PL -7CC5E0 3E0 chrrocketlaunch - 984348 1A0 image - A5FCE0 200 image - A5FED0 350 image - 9437A0 280 image (handle) -7B2870 4A0 bodyarmor - A956B0 2F0 image (colar) - 9BFD40 210 image (straps) - B68448 240 image (back) - B68668 270 image - 386EB0 200 - B688C0 260 image - B68B00 1D0 image - B68CB8 1F0 image -7D3DC0 190 cryptdoor1b - A23180 250 image - 96EC68 310 image -771820 130 cartridge - 9448D0 140 image - 944590 360 image -771950 210 cartrifle - 943FB8 5F0 image - 943C30 3A0 image -7715C0 260 cartblue -771B60 200 cartshell - 44B30 2000 ??? -3F5530 200 - F0B30 2000 ??? - B4B30 2000 ??? - BEB30 2000 ??? - B0B30 2000 ??? - AEB30 2000 ??? - 8AB30 2000 ??? -70A7D0 2E90 djbond - A95D30 1B0 image - A9C838 310 image - A98A28 5B0 image - A994B0 510 image - 38709E 200 - A99EA8 4B0 image - A9A878 500 image - A97D58 3F0 image - A9C6E8 160 image - A9CE30 150 image - A9CF60 2F0 image - B27998 260 image - A97190 20 image - B11DC0 440 image - A2B30 2000 ??? -719D60 D50 headbrosnan - A9BFE8 710 image - A9AF10 870 image - A9B770 890 image - A97AD0 290 image - A97D48 20 image - 54B30 2000 ??? - 50B30 2000 ??? - 60B30 2000 ??? - 3AB30 2000 ??? - 8CB30 2000 ??? -124AC0 50 - 8EB30 2000 ??? -732CB0 38C0 natalya - 3F5578 200 - 3F555C 200 - 38728E 200 - AF6000 340 image - AF7068 1B0 image - AF7700 7C0 image - AF7588 190 image - AF5998 680 image - AC3230 120 image - AF6328 390 image - AF6A20 330 image - AF6D38 350 image - AF66A8 390 image - AF4390 A20 image - AF4DA0 620 image - AF53A8 600 image - AF7EA8 7B0 image - C6B30 2000 ??? -124AC0 50 -3EF75E 200 -3F5566 200 -3F5538 200 - C8B30 2000 ??? - 9CB30 2000 ??? - D2B30 2000 ??? - D4B30 2000 ??? - 66B30 2000 ??? - 96B30 2000 ??? - C4B30 2000 ??? - BAB30 2000 ??? - B6B30 2000 ??? - B8B30 2000 ??? - 90B30 2000 ??? - 92B30 2000 ??? - 9AB30 2000 ??? - 98B30 2000 ??? - B2B30 2000 ??? - 48B30 2000 ??? - C2B30 2000 ??? - A0B30 2000 ??? -179570 50 -1795B4 50 - 82B30 2000 ??? - EEB30 2000 ??? - B4B30 2000 ??? - D8B30 2000 ??? - 9CB30 2000 ??? - BEB30 2000 ??? -179570 50 -1795B4 50 - 54B30 2000 ??? -106B30 2000 ??? - CAB30 2000 ??? -B56718 6D0 image - CCB30 2000 ??? - EAB30 2000 ??? - ECB30 2000 ??? - 6EB30 2000 ??? - 66B30 2000 ??? - 68B30 2000 ??? - 5EB30 2000 ??? - 66B30 2000 ??? -1E194C 50 -1E1990 50 - 86B30 2000 ??? - 62B30 2000 ??? -1E194C 50 -1E1990 50 - 78B30 2000 ??? - 7AB30 2000 ??? - 7CB30 2000 ??? - 76B30 2000 ??? - BCB30 2000 *BINGO!!* - 5CB30 2000 ??? - 82B30 2000 ??? - ECB30 2000 ??? - 90B30 2000 ??? - A8B30 2000 ??? - A4B30 2000 ??? - EAB30 2000 ??? -69F47C 190 room (pins) -6A0C20 F0 room (map1) -100B30 2000 ??? - 9EB30 2000 ??? - 94B30 2000 ??? - D6B30 2000 ??? -9A8D38 360 image - F8B30 2000 ??? -106B30 2000 ??? - F0B30 2000 ??? - C8B30 2000 ??? - CAB30 2000 ??? - A0B30 2000 ??? -1E194C 50 -1E1990 50 -1E194C 50 -1E1990 50 - 78B30 2000 ??? - 76B30 2000 ??? - C0B30 2000 ??? - A6B30 2000 ??? -3F571E 200 - 7EB30 2000 ??? -69ED8C 2D0 room (pins) -6A08D0 130 room (map1) -+++++++++++++++++++++++++++ -read for code containing this thingy; presumably 0xBCB30. addy + 0x1CF0 for actual ------------- -8100D058 LUI V0,8040 ->codeaddy -8100D05C JALR V0,S1 ->to newcode -8100D060 LUI S0,B00C - -ADDIU S0,S0,CB30 -BNE S0,T3, +5 -LUI S0,802C -LD V0,DB18 (S0) -SD V0,1CF0 (A2) -LD V0,DB20 (S0) -SD V0,1CF8 (A2) - -LW RA,001C (SP) -LW S0,0014 (SP) -JR S1 -OR V0,R0,R0 - -8100D058: -3C028040 LUI V0,8040 -00408809 JALR V0,S1 -3C10B00C LUI S0,B00C - -81400000: -2610CB30 ADDIU S0,S0,CB30 //S0=B00BCB30 -160B0005 BNE S0,T3, +5 //compare to PI addy -3C10802C LUI S0,802C -DE02DB18 LD V0,DB18 (S0) //V0=802BDB18 -FCC21CF0 SD V0,1CF0 (A2) //overwrite data usually in binary -DE02DB20 LD V0,DB20 (S0) -FCC21CF8 SD V0,1CF8 (A2) -8FBF001C LW RA,001C (SP) //these set original values from jump -8FB00014 LW S0,0014 (SP) -02200008 JR S1 -00001025 OR V0,R0,R0 ------------- ------------- -812BDAE0: actual co-op treatment code -3C028008 LUI V0,8008 -8C42A0B8 LW V0,A0B8 (V0) //V0=8007A0B8 -AFA2002C SW V0,002C (SP) -8FA4004C LW A0,004C (SP) -2C810004 SLTIU AT,A0,0004 -14200003 BNE AT,R0, +3 -00000000 -8FA4002C LW A0,002C (SP) -AFA4004C SW A0,004C (SP) -3C0C7F08 LUI T4,7F08 -358C9D00 ORI T4,T4,9D00 -01800008 JR T4 -00000000 - -jump written within binary to handle co-op -3C0C802B LUI T4,802B -358CDAE0 ORI T4,T4,DAE0 -01800008 JR T4 -00000000 -++++++++++++++++++++++++++++ --- -SMALLER: -JUMP- F/7F089CF4 -080AF6B8 J 702BDAE0 -8FA4004C LW A0,004C (SP) - -CODE: 702BDAE0 -0FC26C54 JAL 7F09B150 -2C810004 SLTIU AT,A0,0004 -50010001 BEQL AT,R0, +1 -AFA2004C SW V0,004C (SP) -0BC22740 J 7F089D00 -AFA2002C SW V0,002C (SP) - - -PATCHO !!!! -7F089CF0: 0BE820 -8FA4004C *LW A0,004C (SP) -0FC26C54 JAL 7F09B150 //ret V0=victim -2C810004 *SLTIU AT,A0,0004 -50010001 *BEQL AT,R0, +1 -AFA2004C *SW V0,004C (SP) -0FC051D6 *JAL 7F014758 //ret V0=scenario -AFA2002C *SW V0,002C (SP) -24010003 *ADDIU AT,R0,0003 -14220005 *BNE V0,AT,7F089D28 -AFA00028 *SW R0,0028 (SP) -0FC233F0 *JAL 7F08CFC0 //ret V0=1 if GG in inventory -00000000 *NOP -00000000 *NOP -AFA2[0028] *SW V0,0028 (SP) - -E-0BE820 -00000000 0FC26C54 00000000 AFA2002C -0FC051D6 AFA00028 24010003 54410007 -8FA8002C 0FC233F0 00000000 10400002 -24190001 AFB9 - -J-0BEF50 -00000000 0FC26F3C 00000000 AFA2002C -0FC05202 AFA00028 24010003 14410006 -00000000 0FC23649 00000000 10400002 -240F0001 AFAF - -P-0BC864 -00000000 0FC269A4 00000000 AFA2002C -0FC051B2 AFA00028 24010003 14410006 -00000000 0FC234E9 00000000 10400002 -240F0001 AFAF - - -+++++++++++++++++++++++++++ - ------------- -read for code containing this thingy; presumably 0xBCB30. addy + 0x1CF0 for actual ------------- -8100D058 LUI V0,8040 ->codeaddy -8100D05C JALR V0,S1 ->to newcode -8100D060 LUI S0,B00C - -ADDIU S0,S0,CB30 -BNE S0,T3, +5 -LUI S0,802C -LD V0,DB18 (S0) -SD V0,1CF0 (A2) -LD V0,DB20 (S0) -SD V0,1CF8 (A2) - -LW RA,001C (SP) -LW S0,0014 (SP) -JR S1 -OR V0,R0,R0 - -8100D058 3C02 -8100D05A 8040 -8100D05C 0040 -8100D05E 8809 -8100D060 3C10 -8100D062 B00C - -81400000 2610 -81400002 CB30 -81400004 160B -81400006 0005 -81400008 3C10 -8140000A 802C -8140000C DE02 -8140000E DB18 -81400010 FCC2 -81400012 1CF0 -81400014 DE02 -81400016 DB20 -81400018 FCC2 -8140001A 1CF8 -8140001C 8FBF -8140001E 001C -81400020 8FB0 -81400022 0014 -81400024 0220 -81400026 0008 -81400028 0000 -8140002A 1025 ------------- ------------- -812BDAE0 3C02 -812BDAE2 8008 -812BDAE4 8C42 -812BDAE6 A0B8 -812BDAE8 AFA2 -812BDAEA 002C -812BDAEC 8FA4 -812BDAEE 004C -812BDAF0 2C81 -812BDAF2 0004 -812BDAF4 1420 -812BDAF6 0003 -812BDAF8 0000 -812BDAFA 0000 -812BDAFC 8FA4 -812BDAFE 002C -812BDB00 AFA4 -812BDB02 004C -812BDB04 3C0C -812BDB06 7F08 -812BDB08 358C -812BDB0A 9D00 -812BDB0C 0180 -812BDB0E 0008 -812BDB10 0000 -812BDB12 0000 - -812BDB18 3C0C -812BDB1A 802B -812BDB1C 358C -812BDB1E DAE0 -812BDB20 0180 -812BDB22 0008 -812BDB24 0000 -812BDB26 0000 - -------------- Final! -"Co-op Fix #62" .off -812BDAE0 3C02 -812BDAE2 8008 -812BDAE4 8C42 -812BDAE6 A0B8 -812BDAE8 AFA2 -812BDAEA 002C -812BDAEC 8FA4 -812BDAEE 004C -812BDAF0 2C81 -812BDAF2 0004 -812BDAF4 1420 -812BDAF6 0003 -812BDAF8 0000 -812BDAFA 0000 -812BDAFC 8FA4 -812BDAFE 002C -812BDB00 AFA4 -812BDB02 004C -812BDB04 3C0C -812BDB06 7F08 -812BDB08 358C -812BDB0A 9D00 -812BDB0C 0180 -812BDB0E 0008 -812BDB10 0000 -812BDB12 0000 -812BDB18 3C0C -812BDB1A 802B -812BDB1C 358C -812BDB1E DAE0 -812BDB20 0180 -812BDB22 0008 -812BDB24 0000 -812BDB26 0000 -8100D058 3C02 -8100D05A 8040 -8100D05C 0040 -8100D05E 8809 -8100D060 3C10 -8100D062 B00C -"Co-op (2)" .off -81400000 2610 -81400002 AB74 -81400004 160B -81400006 0005 -81400008 3C10 -8140000A 802C -8140000C DE02 -8140000E DB18 -81400010 FCC2 -81400012 1CF0 -81400014 DE02 -81400016 DB20 -81400018 FCC2 -8140001A 1CF8 -8140001C 8FBF -8140001E 001C -81400020 8FB0 -81400022 0014 -81400024 0220 -81400026 0008 -81400028 0000 -8140002A 1025 ---------------------- ---------------------- -PAL same as before, but patch to 8000BDB8 - - -The Spy Who Loved Me Co-Op Patch (console) - PAL (European) version - Non-player kills count as player suicides in multiplayer. This is a console port of SubDrag's amazing rom patch. It is designed for uploaded stages, so be sure to have a 8MB expansion pak in your N64. It has been tested to work on console. Be sure both the first and second lists are both active, or the game will fail near-instantly. The next installment of the help file will include it. - Only use this with PAL cartridges. - -"Co-op Fix #62" .off -812ADC60 3C02 -812ADC62 8007 -812ADC64 8C42 -812ADC66 8BC8 -812ADC68 AFA2 -812ADC6A 002C -812ADC6C 8FA4 -812ADC6E 004C -812ADC70 2C81 -812ADC72 0004 -812ADC74 1420 -812ADC76 0003 -812ADC78 0000 -812ADC7A 0000 -812ADC7C 8FA4 -812ADC7E 002C -812ADC80 AFA4 -812ADC82 004C -812ADC84 3C0C -812ADC86 7F08 -812ADC88 358C -812ADC8A 9E84 -812ADC8C 0180 -812ADC8E 0008 -812ADC90 0000 -812ADC92 0000 -812ADC98 3C0C -812ADC9A 802A -812ADC9C 358C -812ADC9E DC60 -812ADCA0 0180 -812ADCA2 0008 -812ADCA4 0000 -812ADCA6 0000 -8100BDB8 3C02 -8100BDBA 8040 -8100BDBC 0040 -8100BDBE 8809 -8100BDC0 3C10 -8100BDC2 B00C -"Co-op (2)" .off -81400000 2610 -81400002 A9F0 -81400004 160B -81400006 0005 -81400008 3C10 -8140000A 802B -8140000C DE02 -8140000E DC98 -81400010 FCC2 -81400012 1E74 -81400014 DE02 -81400016 DCA0 -81400018 FCC2 -8140001A 1E7C -8140001C 8FBF -8140001E 001C -81400020 8FB0 -81400022 0014 -81400024 0220 -81400026 0008 -81400028 0000 -8140002A 1025 \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/WIP stage plus coop.txt b/notes/GE Documentation/GameShark - GE specific/WIP stage plus coop.txt deleted file mode 100644 index 6d095e4..0000000 --- a/notes/GE Documentation/GameShark - GE specific/WIP stage plus coop.txt +++ /dev/null @@ -1,435 +0,0 @@ -okay, probably just need to patch binary that is loaded through rom -00001025 8FBF001C 8FB00014 8FB10018 -03E00008 27BD0028 3C0EA460 03E00008 - -7000D058 (8000D058 - mighty convenient setting it up like this!) -OR V0,R0,R0 -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -This is the return after catching the PI interupt. It just resets some values and returns to whatever called it. That's the link. V0, S0, S1 are free. -T4 = rom address (00000000 10xxxxxx-as sent to PI_CART_ADDY_REG) -T3 = rom address (FFFFFFFF B0xxxxxx) -T2 = rom address (00000000 00xxxxxx) also A1 -T6 = number of bytes to write //these two are dirty! not needed after this point -T7 = PI_WR_LEN_REG (T6-1) - -A2 = target addy (FFFFFFFF 80xxxxxx) also A0 -V0 = target addy (00000000 00xxxxxx-as sent to PI_DRAM_ADDY_REG) - ------------- -read for code containing this thingy; presumably 0xBCB30. addy + 0x1CF0 for actual ------------- -8100D058 LUI V0,8040 ->codeaddy -8100D05C JALR V0,S1 ->to newcode -8100D060 LUI S0,B00C - -CO-OP only: -ADDIU S0,S0,CB30 -BNE S0,T3, +5 -LUI S0,802C -LD V0,DB18 (S0) -SD V0,1CF0 (A2) -LD V0,DB20 (S0) -SD V0,1CF8 (A2) - -LW RA,001C (SP) -LW S0,0014 (SP) -JR S1 -OR V0,R0,R0 - -8100D058 3C02 -8100D05A 8040 -8100D05C 0040 -8100D05E 8809 -8100D060 3C10 -8100D062 B00C - -81400000 2610 -81400002 CB30 -81400004 160B -81400006 0005 -81400008 3C10 -8140000A 802C -8140000C DE02 -8140000E DB18 -81400010 FCC2 -81400012 1CF0 -81400014 DE02 -81400016 DB20 -81400018 FCC2 -8140001A 1CF8 -8140001C 8FBF -8140001E 001C -81400020 8FB0 -81400022 0014 -81400024 0220 -81400026 0008 -81400028 0000 -8140002A 1025 ------------- ------------- -812BDAE0 3C02 -812BDAE2 8008 -812BDAE4 8C42 -812BDAE6 A0B8 -812BDAE8 AFA2 -812BDAEA 002C -812BDAEC 8FA4 -812BDAEE 004C -812BDAF0 2C81 -812BDAF2 0004 -812BDAF4 1420 -812BDAF6 0003 -812BDAF8 0000 -812BDAFA 0000 -812BDAFC 8FA4 -812BDAFE 002C -812BDB00 AFA4 -812BDB02 004C -812BDB04 3C0C -812BDB06 7F08 -812BDB08 358C -812BDB0A 9D00 -812BDB0C 0180 -812BDB0E 0008 -812BDB10 0000 -812BDB12 0000 - -812BDB18 3C0C -812BDB1A 802B -812BDB1C 358C -812BDB1E DAE0 -812BDB20 0180 -812BDB22 0008 -812BDB24 0000 -812BDB26 0000 - -------------- Final! -"Co-op Fix #62" .off -812BDAE0 3C02 -812BDAE2 8008 -812BDAE4 8C42 -812BDAE6 A0B8 -812BDAE8 AFA2 -812BDAEA 002C -812BDAEC 8FA4 -812BDAEE 004C -812BDAF0 2C81 -812BDAF2 0004 -812BDAF4 1420 -812BDAF6 0003 -812BDAF8 0000 -812BDAFA 0000 -812BDAFC 8FA4 -812BDAFE 002C -812BDB00 AFA4 -812BDB02 004C -812BDB04 3C0C -812BDB06 7F08 -812BDB08 358C -812BDB0A 9D00 -812BDB0C 0180 -812BDB0E 0008 -812BDB10 0000 -812BDB12 0000 -812BDB18 3C0C -812BDB1A 802B -812BDB1C 358C -812BDB1E DAE0 -812BDB20 0180 -812BDB22 0008 -812BDB24 0000 -812BDB26 0000 -8100D058 3C02 -8100D05A 8040 -8100D05C 0040 -8100D05E 8809 -8100D060 3C10 -8100D062 B00C -"Co-op (2)" .off -81400000 2610 -81400002 AB74 -81400004 160B -81400006 0005 -81400008 3C10 -8140000A 802C -8140000C DE02 -8140000E DB18 -81400010 FCC2 -81400012 1CF0 -81400014 DE02 -81400016 DB20 -81400018 FCC2 -8140001A 1CF8 -8140001C 8FBF -8140001E 001C -81400020 8FB0 -81400022 0014 -81400024 0220 -81400026 0008 -81400028 0000 -8140002A 1025 ---------------------- ---------------------- -PAL same as before, but patch to 8000BDB8 - - -The Spy Who Loved Me Co-Op Patch (console) - PAL (European) version - Non-player kills count as player suicides in multiplayer. This is a console port of SubDrag's amazing rom patch. It is designed for uploaded stages, so be sure to have a 8MB expansion pak in your N64. It has been tested to work on console. Be sure both the first and second lists are both active, or the game will fail near-instantly. The next installment of the help file will include it. - Only use this with PAL cartridges. - -"Co-op Fix #62" .off -812ADC60 3C02 -812ADC62 8007 -812ADC64 8C42 -812ADC66 8BC8 -812ADC68 AFA2 -812ADC6A 002C -812ADC6C 8FA4 -812ADC6E 004C -812ADC70 2C81 -812ADC72 0004 -812ADC74 1420 -812ADC76 0003 -812ADC78 0000 -812ADC7A 0000 -812ADC7C 8FA4 -812ADC7E 002C -812ADC80 AFA4 -812ADC82 004C -812ADC84 3C0C -812ADC86 7F08 -812ADC88 358C -812ADC8A 9E84 -812ADC8C 0180 -812ADC8E 0008 -812ADC90 0000 -812ADC92 0000 -812ADC98 3C0C -812ADC9A 802A -812ADC9C 358C -812ADC9E DC60 -812ADCA0 0180 -812ADCA2 0008 -812ADCA4 0000 -812ADCA6 0000 -8100BDB8 3C02 -8100BDBA 8040 -8100BDBC 0040 -8100BDBE 8809 -8100BDC0 3C10 -8100BDC2 B00C -"Co-op (2)" .off -81400000 2610 -81400002 A9F0 -81400004 160B -81400006 0005 -81400008 3C10 -8140000A 802B -8140000C DE02 -8140000E DC98 -81400010 FCC2 -81400012 1E74 -81400014 DE02 -81400016 DCA0 -81400018 FCC2 -8140001A 1E7C -8140001C 8FBF -8140001E 001C -81400020 8FB0 -81400022 0014 -81400024 0220 -81400026 0008 -81400028 0000 -8140002A 1025 - ------------------------ ------------------------ ------------------------ -Now the STAGE part of it all... -handle changes slightly to allow RA to contain return address -this requires resetting S1 in the loop -Any other variables will need to be a SD/LD -expect program to upload the first level data stuff to 80400A00 (0x980 / 2432 entries) - -Okay, here's the dumb part! -They load the BG file partially before full write. So, must use PI_WR_LEN_REG value (or comparison) to ensure no overruns -Thankfully, once BG written the rest of the sizes are absolutely set. whew. - - -method is so: -increment through a list of ROM addresses, data addresses, and sizes (#DWORDS) -ends when ROM address=0 - -8100D058 3C028040 LUI V0,8040 ->codeaddy -8100D05C 0040F809 JALR RA,V0 ->to newcode -8100D060 3C10B00C LUI S0,B00C -8100D064 8FBF001C LW RA,001C (SP) - -CO-OP only: -2611CB30 ADDIU S1,S0,CB30 -562B0007 BNEL S1,T3, iterate -24500080 addiu s0,v0, (offset to list of sizes) 0x80 - -coop: -3C10802C LUI S0,802C -DE02DB18 LD V0,DB18 (S0) -FCC21CF0 SD V0,1CF0 (A2) -DE02DB20 LD V0,DB20 (S0) -10000011 beq r0,r0, end -FCC21CF8 SD V0,1CF8 (A2) - -interate: -00067825 OR T7,R0,A2 -loopus: -8E110000 lw s1,0000 (S0) //s1=ROM address -1011000D beq s1,r0, end -8E020004 lw v0,0004 (S0) //v0=data addy -562BFFFC bnel s1,t3, loopus -2610000C addiu s0,s0,000C //s0=next sample - -8E110008 lw s1,0008 (S0) //s1=size in words -000E7082 SRL T6,T6,0x2 //#bytes /4 (# Ws) -copy: -8C500000 lw s0,0000 (V0) //copy W -ADF00000 sw s0,0000 (T7) //paste W -24420004 addiu v0,v0,0004 //next W source -21CEFFFF ADDI T6,T6,FFFF -100E0003 BEQ R0,T6,end -2231FFFF addi s1,s1,FFFF //s1-- -5411FFF9 bnel s1,r0, copy -25EF0004 ADDIU T7,T7,0004 //next W target - -end: -8FB10018 LW S1,0018 (SP) -8FB00014 LW S0,0014 (SP) -03E00008 JR RA -00001025 OR V0,R0,R0 - --- -"multiload #68" .off -81400000 2611 -81400002 CB30 -81400004 562B -81400006 0007 -81400008 2450 -8140000A 0080 -8140000C 3C10 -8140000E 802C -81400010 DE02 -81400012 DB18 -81400014 FCC2 -81400016 1CF0 -81400018 DE02 -8140001A DB20 -8140001C 1000 -8140001E 0011 -81400020 FCC2 -81400022 1CF8 -81400024 0006 -81400026 7825 -81400028 8E11 -8140002A 0000 -8140002C 1011 -8140002E 000D -81400030 8E02 -81400032 0004 -81400034 562B -81400036 FFFC -81400038 2610 -8140003A 000C -8140003C 8E11 -8140003E 0008 -81400040 000E -81400042 70C2 -81400044 DC50 -81400046 0000 -81400048 FDF0 -8140004A 0000 -8140004C 2442 -8140004E 0008 -"multiload 2" .off -81400050 21CE -81400052 FFFF -81400054 100E -81400056 0003 -81400058 2231 -8140005A FFFF -8140005C 5411 -8140005E FFF9 -81400060 25EF -81400062 0008 -81400064 8FB1 -81400066 0018 -81400068 8FB0 -8140006A 0014 -8140006C 03E0 -8140006E 0008 -81400070 0000 -81400072 1025 -8100D058 3C02 -8100D05A 8040 -8100D05C 0040 -8100D05E F809 -8100D060 3C10 -8100D062 B00C -8100D064 8FBF -8100D066 001C -F1400080 0000 -F1400082 0000 -"multiload Co-Op #34" .off -812BDAE0 3C02 -812BDAE2 8008 -812BDAE4 8C42 -812BDAE6 A0B8 -812BDAE8 AFA2 -812BDAEA 002C -812BDAEC 8FA4 -812BDAEE 004C -812BDAF0 2C81 -812BDAF2 0004 -812BDAF4 1420 -812BDAF6 0003 -812BDAF8 0000 -812BDAFA 0000 -812BDAFC 8FA4 -812BDAFE 002C -812BDB00 AFA4 -812BDB02 004C -812BDB04 3C0C -812BDB06 7F08 -812BDB08 358C -812BDB0A 9D00 -812BDB0C 0180 -812BDB0E 0008 -812BDB10 0000 -812BDB12 0000 -812BDB18 3C0C -812BDB1A 802B -812BDB1C 358C -812BDB1E DAE0 -812BDB20 0180 -812BDB22 0008 -812BDB24 0000 -812BDB26 0000 - -------------- -------------- -now the 'slightly more annoying part than before' -getting clipping to copy to point - -7F0BCD28 JAL to a routine that loads the compressed binary and decompresses it. -V0=address of decompressed binary - -on return to 7F0B428C, uses V0 to set the clipping address at 8007BF94 and those at 80040F5? - -trouble is, the bugger is used by everything else too... Besides, it doesn't have a ROM address left over - - -----Interesting TLB stuff -Goldeneye, on boot, 8000046C -sets T0 to 007FE000. This sets the pagemask to index 80000000-80400000 as 70000000-70400000. change that and you change the amount of memory indexed! \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/gs addresses of interest.txt b/notes/GE Documentation/GameShark - GE specific/gs addresses of interest.txt deleted file mode 100644 index a741c23..0000000 --- a/notes/GE Documentation/GameShark - GE specific/gs addresses of interest.txt +++ /dev/null @@ -1,711 +0,0 @@ -75A000: Vram 1 -7A0400: Vram 2 - - -780800: - addiu 29,29,FFE8 - lui 4, BE00 - sw 31,29,0014 - jal 80788000 - sw 16,29,0010 - 814: - lui 2,0040 - lui 1,A000 - sw 2,1,0318 - jal 807A7A58 - nop - 828: loads a check for code list or generator? - lui 3,A07E - ori 3,3,9C00 //3=A07E9C00 - lui 4,A07C - ori 4,4,9C00 //4=A07C9C00 - lui 6,A07E - ori 6,6,9C00 //6=A07E9C00 - addu 5,r0,r0 - lui 2,807A - sw 3,9E10 (2) //80799E10=A07E9C00 - lui 2,807A - sw 4,9DF8 (2) //80799DF8=A07C9C00 - addu 2,6,5 - 854: memset routine by the looks of it - sb r0,0000 (2) - addiu 5,5,0001 - sltiu 2,5,0168 - bne r0,2,80780854 - addu 2,6,5 - 86C: - lui 4,A060 - jal 80785C30 - lui 5,A070 - 878: - jal 8078EF74 - lui 16,807A - 880: get # codes to activate! - lw 2,16,9E10 //2=80799E10=A07E9C00=code/memedit area - lui 3,807A - sw r0,B1D0 (3) //8079B1D0=0 - addiu 2,2,0160 - lui 1,A078 - sw 2,1,040C //8078040C=A07E9D60=# codes to activate! - jal 80790B74 - nop - 8A0: - lw 2,9E10 (16) //2=80799E10=A07E9C00=code/memedit area - addiu 3,2,0164 //3=A07E9D64=list of codes to activate - sw 3,0000 (2) //A07E9C00=A07E9D64 - lw 4,0000 (2) //4=A07E9D64 - addiu 3,2,02AC //3=A07EA010 - sw 3,00C8 (2) //807E9CC8=A07EA010 - sw 4,00CC (2) //807E9CCC=A07E9D64 - addiu 4,3,0194 //4=A07EA1A4 - addiu 3,3,0238 //3=A07EA248 - sw 4,00D0 (2) //A07E9CD0=A07EA1A4 - jal 80794A80 - sw 3,00D4 (2) //A07E9CD4=A07EA248 - 8D0: - lw 31,0014 (29) - lw 16,0010 (29) - jr 31 - addiu 29,29,0018 - 8E0: - - - - B74: active code list check of sorts - addu 18,5,r0 - sw 17,0014 (29) - addiu 17,6,00FF - addiu 2,r0,FF00 - and 17,17,2 - lui 3,00C0 - lui 2,807A - lw 2,9D04 (2) //2=80799D04=BE000000 - or 4,4,3 - sw 31,001C (29) - sw 16,0010 (29) - beq r0,17,80780BC4 - or 16,4,2 - BA8: - addu 4,16,r0 - jal 8078EDD0 - addiu 16,16,0001 - BB4: - sb 2,0000 (18) - addiu 17,17,FFFF - bne r0,17,80780BA8 - addiu 18,18,0001 - BC4: - lw 31,001C (29) - lw 18,0018 (29) - lw 17,0014 (29) - lw 16,0010 (29) - jr 31 - addiu 29,29,0020 - BDC: - - -7845AC: - lui v1,807A - lui v0,A040 - sw v0,B308 (v1) //8079B308=VI_REG address - lui v1,807A - lui v0,A048 - sw v0,B320 (v1) //8079B320=SI_REG address - lui v1,807A - lui v0,A000 - sw v0,B324 (v1) //8079B324=RDRAM mirror address - lui v0,8079 - lw v1,5980 (v0) //v1=??? (usually=8) - addiu v0,r0,0008 - beq v0,v1 807845F4 - addiu v0,r0,0010 - 5E4: - beq v0,v1 80784604 - addiu v0,r0,FFFF - 5EC: - j 80784610 - nop - 5F4: - jal 80783474 - lui a0,A040 - 5FC: - j 80784610 - addiu v0,r0,FFFF - 604: - jal 807844E4 - lui a0,A040 - 60C: - addiu v0,r0,FFFF - beq v0,s3 +BF - addu s0,r0,r0 - - -7879F4: - addiu sp,sp,FFEC - sw ra,0010 (sp) - lui t0,BEC0 - ori t0,t0,1000 //t0=BEC01000 - lui t1,8000 - ori t1,t1,0400 //t1=80000400 - lui t2,0003 - ori t2,t2,F000 //t2=0002F000 - lw t3,0000 (t0) //t3=??? - addiu t0,t0,0004 - sw t3,0000 (t1) - addiu t2,t2,FFFC - bne r0,t2 -5 - addiu t1,t1,0004 - A38: - jal 80787A58 - nop - A40: - jal 800004A0 - nop -787A48: - lw ra,0010 (sp) - addiu sp,sp,0014 - jr ra - nop -787A58: - - - -788050: check PI status - lui v1,A460 - lw v0,0010 (v1) - andi v0,v0,0003 - bne r0,v0 80798050 - nop - jr ra - nop -78806C: - addiu sp,sp,FFD8 - sw s1,0014 (sp) - addu s1,a0,r0 - sw s3,001C (sp) - addu s3,a1,r0 - sw s2,0018 (sp) - addu s2,a2,r0 - sw ra,0020 (sp) - jal 80788050 - sw s0,0010 (sp) - 094: - blez s2 807880B4 - addu s0,r0,r0 - 09C: - jal 80787AB4 - addu a0,s1,s0 - 0A4: - addiu s0,s0,0004 - slt v0,s0,s2 - bne r0,v0, -5 - nop -7880B4: generic load from ROM [s1=rdram , s3=rom , s2=writelen] - lui v1,1FFF - ori v1,v1,FFFF //address mask - addiu s0,r0,03E7 - lui a0,A460 - and v0,s1,v1 - and v1,s3,v1 - sw v0,0000 (a0) //send destination address - addiu v0,s2,FFFF - sw v1,0004 (a0) //send ROM address - sw v0,000C (a0) //write length - addiu s0,s0,FFFF - bgez s0 +FFFF - addiu s0,s0,FFFF //sit around doing nothing for awhile - jal 80788050 - nop -7880F0: - lw ra,0020 (sp) - lw s3,001C (sp) - lw s2,0018 (sp) - lw s1,0014 (sp) - lw s0,0010 (sp) - jr ra - addiu sp,sp,0028 - - - -7936D0: store original game's VI registers - lui 2,A440 - lw 4,0000 (2) - lui 3,807A - sw 4,A000 (3) //8079A000=VI_STATUS_REG - lw 4,0004 (2) - lw 5,0008 (2) - lw 6,0014 (2) - lw 7,0018 (2) - lw 8,001C (2) - lw 9,0020 (2) - lw 10,0024 (2) - lw 11,0028 (2) - lw 12,002C (2) - lw 13,0030 (2) - lw 2,0034 (2) - addiu 3,3,A000 //3=8079A000 - sw 4,0004 (3) - sw 5,0008 (3) - sw 6,0014 (3) - sw 7,0018 (3) - sw 8,001C (3) - sw 9,0020 (3) - sw 10,0024 (3) - sw 11,0028 (3) - sw 12,002C (3) - sw 13,0030 (3) - jr 31 - sw 2,0034 (3) -79373C: - addiu 29,29,FFE8 - sw 31,0010 (29) - jal 80785460 - nop - 750: load original game's VI registers - lui 3,807A - addiu 2,3,A040 //2=8079A040 - lw 3,A040 (3) - lw 4,0004 (2) - lw 5,0008 (2) - lw 6,0014 (2) - lw 7,0018 (2) - lw 8,001C (2) - lw 9,0020 (2) - lw 10,0024 (2) - lw 11,0028 (2) - lw 12,002C (2) - lw 13,0030 (2) - lw 14,0034 (2) - lui 2,A440 - sw 3,0000 (2) - sw 4,0004 (2) - sw 5,0008 (2) - sw 6,0014 (2) - sw 7,0018 (2) - sw 8,001C (2) - sw 9,0020 (2) - sw 10,0024 (2) - sw 11,0028 (2) - sw 12,002C (2) - sw 13,0030 (2) - sw 14,0034 (2) - lw 31,0010 (29) - jr 31 - addiu 29,29,0018 -7937C8: load VI registers - lui 2,A440 - lw 4,0000 (2) - lui 3,807A - sw 4,A040 (3) - lw 4,0004 (2) - lw 5,0008 (2) - lw 6,0014 (2) - lw 7,0018 (2) - lw 8,001C (2) - lw 9,0020 (2) - lw 10,0024 (2) - lw 11,0028 (2) - lw 12,002C (2) - lw 13,0030 (2) - lw 2,0034 (2) - addiu 3,3,A040 - sw 4,0004 (3) - sw 5,0008 (3) - sw 6,0014 (3) - sw 7,0018 (3) - sw 8,001C (3) - sw 9,0020 (3) - sw 10,0024 (3) - sw 11,0028 (3) - sw 12,002C (3) - sw 13,0030 (3) - jr 31 - sw 2,0034 (3) -79383C: - jr 31 - nop -793840: - addiu 29,29,FFE8 - sw 31,0010 (29) - jal 80787EE0 - nop - 850: - addiu 3,r0,0003 - bne 3,2,80793864 - nop - 85C: - jal 80791AB4 - nop - 864: - lw 31,0010 (29) - jr 31 - addiu 29,29,0018 -793870: - addiu 29,29,FFD8 - sw 31,0024 (29) - jal 80787AE8 - sw 16,0020 (29) - 880: - lui 16,807A - addiu 4,r0,FFFE - and 4,2,4 - jal 80787AF4 - sw 2,B1EC (16) - 894: - jal 80793840 - nop - 89C: - jal 80787F80 - addu 4,r0,r0 - andi 2,2,0400 - bne r0,2,+5A - nop - 8B0: - jal 80787F80 - addu 4,r0,r0 - 8B8: - andi 2,2,0400 - beq r0,2, 807838B0 - lui 3,A07E - 8C4: - ori 3,3,9C00 //3=A07E9C00 - lui 4,A07C - ori 4,4,9C00 //4=A07C9C00 - addu 8,r0,r0 - addu 9,r0,r0 - lui 2,807A - sw 3,9E10 (2) //80799E10=A07E9C00 - lui 2,807A - sw 4,9DF8 (2) //80799DF8=A07C9C00 - lui 2,F7BC - ori 2,2,F7BC - lui 3,F7BC - ori 3,3,F7BC - lui 1,807A - sw 8,B228 (1) //8079B228=0 - lui 1,807A - sw 9,B22C (1) //8079B22C=0 - lui 1,807A - sw 2,B300 (1) //8079B300=F7BCF7BC - lui 1,807A - sw 3,B304 (1) //8079B304=F7BCF7BC - jal 80785DF0 - nop - 920: - addu 5,r0,r0 - lui 2,807A - addiu 4,2,A000 //4=8079A000 - lui 3,A440 - 930: copy VI regs to 8079A000 - lw 2,0000 (3) //2=VI_REG - addiu 3,3,0004 //3=*next VI_REG - addiu 5,5,0001 - sw 2,0000 (4) //8079A000=VI_STATUS - slti 2,5,000E - bne r0,2,80793930 - addiu 4,4,0004 - 94C: - jal 80785460 - lui 16,807A - 954: - jal 80785948 - addu 4,r0,r0 - 95C: - addu 4,r0,r0 - addu 5,4,r0 - addiu 6,0,0140 - addiu 7,0,00F0 - sw r0,0010 (29) - sw r0,0014 (29) - jal 807935B0 - sw r0,0018 (29) - 97C: - jal 80792F8C - nop - 984: - - -794ADC: - lui k0,8079 - addiu k0,k0,4AEC //k0(26)=80794AEC - jr k0 - nop -794AEC: - cop0 - ori k1,r0,005C - andi k0,k0,007C - beq k1,k0,80794B30 - nop - B00: - bne r0,k0,80794B20 - nop -794B08: - lui k0,A430 - lw k0,0008 (k0) //k0=MI_INTERUPT_REQ - nop - andi k1,k0,0002 - bne r0,k1 80794B28 - nop -794B20: - j 80000192 - nop -794B28: - j 80794B40 - nop - B30: - lui k0,BEC2 - ori k0,k0,F000 - jr k0 //jump to BEC2F000? that's weird... - nop -794B40: - lui k0,8079 - addiu k0,k0,4A70 - sw sp,0000 (k0) //sp->80794A70 - lui sp,807F - ori sp,sp,FF00 //sp=807FFF00 - addiu sp,sp,FFB4 - sw ra,0010 (sp) //807EFF10=ra - sw v0,0014 (sp) //807EFF14=v0 - sw v1,0018 (sp) //807EFF18=v1 - sw a0,001C (sp) //807EFF1C=a0 - sw a1,0020 (sp) //807EFF20=a1 - sw a2,0024 (sp) //807EFF24=a2 - sw a3,0028 (sp) //807EFF28=a3 - sw t0,002C (sp) //807EFF2C=t0 - sw t1,0030 (sp) //807EFF30=t1 - sw t2,0034 (sp) //807EFF34=t2 - sw t3,0038 (sp) //807EFF38=t3 - sw t4,003C (sp) //807EFF3C=t4 - sw t5,0040 (sp) //807EFF40=t5 - sw t6,0044 (sp) //807EFF44=t6 - sw t7,0048 (sp) //807EFF48=t7 - jal 80793870 - nop -794B9C: - beq v0,r0, 80794BBB4 - nop - BA4: - cop0 - nop - cop0 - nop - BB4: - lui k0,807A - addiu k0,k0,A080 //k0=8079A080 - lw k1,0000 (k0) //k1=0 if codes on, 1 if codes off - bne r0,k1, 80794BD0 //1 if codes disabled. if disabled, skip lists and head back to game - nop - jal 80794C40 //handle "active codes" list (code generator) - nop -794BD0: head back to original game code... - lw ra,0010 (sp) - lw v0,0014 (sp) //807EFF14=v0 - lw v1,0018 (sp) //807EFF18=v1 - lw a0,001C (sp) //807EFF1C=a0 - lw a1,0020 (sp) //807EFF20=a1 - lw a2,0024 (sp) //807EFF24=a2 - lw a3,0028 (sp) //807EFF28=a3 - lw t0,002C (sp) //807EFF2C=t0 - lw t1,0030 (sp) //807EFF30=t1 - lw t2,0034 (sp) //807EFF34=t2 - lw t3,0038 (sp) //807EFF38=t3 - lw t4,003C (sp) //807EFF3C=t4 - lw t5,0040 (sp) //807EFF40=t5 - lw t6,0044 (sp) //807EFF44=t6 - lw t7,0048 (sp) //807EFF48=t7 - addiu sp,sp,006C - lui k0,8079 - addiu k0,k0,4A70 //k0=80794A70 - lw sp,0000 (k0) - lui k0,807A - addiu k0,k0,A080 //k0=8079A080 - lw k1,0000 (k0) //k1=0 if codes on, 1 if off - bne 0,k1,80794C38 - nop - C30: go to codelist if == 0 - j 807C5C00 //changing this jump will change the location of the codelist!!! - nop - C38: else, just go back to interrupt (return to game) - j 80000120 - nop -794C40: "active codes" from active code list (code generator) - addiu sp,sp,FFEC - sw a0,0000 (sp) - sw a1,0004 (sp) - sw a2,0008 (sp) - sw a3,000C (sp) - sw t6,0010 (sp) - lui a0,8078 - lw a0,040C (a0) //a0=A07E9D60 - lw a3,0000 (a0) //a3=# additional codes to activate!! -794C60: grab each code from list and execute! - beq r0,a3, +28 //skip this crap if there aren't any activated codes - lwl a1,0004 (a0) - C68: pull and test code type - lwr a1,0007 (a0) //this pulls the "gs codes" from the code offset - lui k0,D000 - and k1,a1,k0 //mask the codetype (test for Dx type) - bne k0,k1 80794CD8 //skip if normal write - lh a2,0008 (a0) //load code value - C80: Dx-conditional type - lui k0,0100 - and k1,a1,k0 //test for 1 or 2 byte read - lui k0,80FF - ori k0,k0,FFFF //k0=code to address mask - bgtz k1, 80794CA0 //do a 2-byte read - and a1,a1,k0 //a1=address to write to - beq k1,k1, 80794CA4 //do a 1-byte read - lb t6,0000 (a1) - CA0: - lh t6,0000 (a1) //t6= value at address - CA4: - lui k0,0200 - and k1,a1,k0 - beq k0,k1 80794CC4 //if a != read, branch - nop - CB4: D0/D1 type if= conditional test - beq a2,t6 80794CFC - nop - CBC: - beq k1,k1 80794CCC - nop - CC4: D2/D3 type if!= conditional test - bne a2,t6 80794CFC - nop - CCC: this subtracts twice, skipping next code if condition not true - addi a3,a3,FFFF - beq k1,k1 80794CFC - addi a0,a0,0006 - CD8: 8x write to address - lui k0,0100 - and k1,a1,k0 - lui k0,80FF - ori k0,k0,FFFF - bgtz k1 80794CF8 - and a1,a1,k0 - CF0: - beq k1,k1 80794CFC - sb a2,0000 (a1) - CF8: - sh a2,0000 (a1) //store value to address - CFC: - addiu a3,a3,FFFF - D00: next verse same as the first - bgtz a3 80794C60 //loop for each code in list - addi a0,a0,0006 -794D08: - lw a0,0000 (sp) - lw a1,0004 (sp) - lw a2,0008 (sp) - lw a3,000C (sp) - lw t6,0010 (sp) - addiu sp,sp,0014 - jr ra - nop - -794D28: - lui k0,0004 - lw a3,0000 (a1) - nop - sw a3,0000 (a0) - addi a0,a0,0004 - addi a1,a1,0004 - addiu k0,k0,FFFF - bgtz k0 80794D28 - nop - D4C: - lui t0,8000 - addiu t1,t0,3000 //t1=80003000 - addiu t1,t1,FFF0 //t1=7FFF3010 - cache - sltu t1,t0,0x82B - bne r0,at 80794D54 - addiu t0,t0,0020 - jr a2 - nop -794D8C: - lui a0,8000 - ori a0,a0,02C0 - addiu a1,r0,0001 - sw a1,0000 (a0) - lui a1,810B - ori a1,a1,A3DC //a1=810AA3DC - sw a1,a0,0004 - addiu a1,r0,3F80 //a1=810AE35C - sh a1,a0,0008 - jr ra - nop - - -794DB8: text and pointer arrays - - - - -795960: pointers to VI registers, used in "view gfx memory" -VI_DRAM_ADDR -VI_H_WIDTH -VI_X_SCALE_REG -VI_Y_SCALE_REG - - -797900: pointer to cheat ASM - - -799DF8: pointer to cheat ASM -A07C5C00 - -799E10: pointer to code generator & memory editor stuff -A07E9C00 - -799E20: pointers to menu text -0x78/120 pointers - -79A000: original game's VI interupts - - - - -79A160: PIF commands (send or store?) -79A1B0: pointer to new PIFram (send or recieve?) - -- - -7C5C00: cheat ASM - -- Memory Editor and Code Generator stuff -7E9C00: pointer to new activated cheats -7E9C07: codes on (0) or off (1) - -7E9C40: always = 1 - -7E9C70: always = 1 - -7E9C88: option # selected on return to previous menu -7E9C90: current memory editor address -7E9C94: always = 1 -7E9C98: current nibble (0-0x10) -7E9C9C: current row (0-?) -7E9CA0: cursor = nibble (0) or byte (1) - -7E9CA8: goto address in memory editor - -7E9CBC: # results displayed (0-0x64) -7E9CC0: # results selected (0-0x63) - -7E9CC8: A07E9EAC pointer to addresses displayed in code generator -7E9CCC: A07E9D64 pointer to active codes -7E9CD0: A07EA040 ? -7E9CD4: A07EA0E4 ? - -7E9CEC: # possibilites from search -7E9CF0: integer search value - -7E9D34: text search string, NULL terminated - -7E9D60: # following codes to activate -7E9D64: active codes list. 6byte codes following typical gs pattern. types 80,81,D0,D1 supported -to write addresses to active code list, send A07E9D60... - -7E9EAC: addresses displayed in code generator (not complete list) - diff --git a/notes/GE Documentation/GameShark - GE specific/human animation.txt b/notes/GE Documentation/GameShark - GE specific/human animation.txt deleted file mode 100644 index e28b28d..0000000 --- a/notes/GE Documentation/GameShark - GE specific/human animation.txt +++ /dev/null @@ -1,244 +0,0 @@ -Do a little dance, make a little love (Goldeneye animation mods) -USE THIS START POINT, AGENT, FACILITY to start right at Trevelyan. -8106EDB4 45FB -8106EDB8 C39B -8106EDBC C598 -8106EDC0 801A -8106EDC2 70AC -Trev Facility -D0064F30 0010 -811E8414 XXXX -D0064F30 0010 -811E8416 YYYY -Press L - -Cuba -Bond -8118B020 XXXX -8118B022 YYYY -Natalya -8118B054 XXXX -8118B056 YYYY - -Table at: 80029D6C - -Offset below * 4 -Assume can replace certain animations with any other -XXXXYYYY -(same pointers all levels!) -802AF4C0 default (nothing) -802AF4DC walk -802AF604 aim to fire -802AF6D4 bow-legged aim gun -802AF7D8 firing position -802AF884 side aim -802AFAD0 up aim -802AFCD4 hunched position -802AFE50 hunched slanted position -802B0044 hunched -802B0274 hold for fire -802B04E8 stand -802B07F4 low position for firing -802B0A38 low position slightly higher for firing -802B0C74 very low hunched for firing and missing bullets -802B0D2C very low gunslinging behind him *cool* -802B0E44 hit in shoulder by bullet clutching it -802B0F2C clutching stomach -802B1014 clutching stomach forward -802B115C looking around for bullet hitting -802B1300 bent over from being hit -802B1444 standing -802B15F4 stepping slightly -802B1CEC on ground clutching -802B1E5C feet in ground -802B2324 clutching neck -802B2454 on ground face up -802B2578 face down on ground -802B269C dead face up -802B2788 dead face up sprawled out -802B286C face down huddled -802B2994 crossed feet face up death -802B2A88 face down -802B2B98 face up sort of crossed legs -802B2D0C dying on knees then face down -802B2E80 dead on ground -802B2FB0 huddled in fetal position -802B30D0 huddled in fetal position opposite direction -802B31C4 face up -802B325C feet in ground -802B3460 roll to fire -802B34D8 walking -802B3530 running -802B3594 running -802B3604 walking semi fast gun down -802B3758 walking then turn to fire *cool* -802B3788 atten-hut! *cool* *USED?* -802B3844 surrendering -802B39C4 surrendering and moving feet a bit -802B3A34 walking and firing -802B3A8C running to fire -00000001 -00000001 -802B3C7C jumping to side *cool* -802B3F00 hopping to side -802B41A0 shot in butt -802B43D4 shot in butt stammering around for a while *cool* -802B4684 shot and sort of dying -802B48CC dying on side -802B4960 in ground, moving about a bit -802B4A14 standing -802B4B44 on ground lifeless -802B4C04 start0 - standing gun to right -802B4E24 throwing grenade -802B51D0 moving hand at you -802B53B0 standing -802B5594 standing hands down -802B5714 start1 - draw gun and point -802B583C body spread out a little less -802B5944 body spread out a little less -802B5A14 body spread out a little less -802B5B04 body spread out a little less -802B5BF8 pointing gun to side to aim -802B5CC8 arms at sides -802B5E0C aim at side to fire -802B5ED8 standing arms at side -802B60D8 kneel to fire -802B6210 feet in ground -802B63C8 standing -802B64CC standing -802B6690 kneel to fire for a sec -802B67C4 body spread out standing up -802B68F0 body spread out standing up -802B6964 walking gun pointed out *cool* -802B69D4 walking gun to side -802B6A48 walking gun to right side -802B6AAC running gun forward -802B6B10 running gun to right -802B6B78 running aiming to side -802B6BD4 running very fast gun full forward -802B6C3C running slow with gun -802B6C94 running fast -00000001 -00000001 -00000001 -00000001 -00000001 -00000001 -802B6D88 start2 - holstering gun -802B6F68 start3 - holstering gun kneeling -802B710C start4 - aiming leaning forward -802B71C4 start5 - standing gun forward -802B7298 crossing arms *cool* -802B73CC start6 - standing gun a little forward -802B7474 start7 - standing gun a little forward more -802B7540 bond completed mission pose, crossed arm, gun up -802B7624 checking gun standing -802B7654 standing then move a little in successive moves -802B76C4 walking casually -802B7734 walking gun forward -802B77A0 walking hold guns forward in slash *cool* -802B7800 running hands out -802B7864 running guns crossed -802B78C4 fast running fast guns full out *cool* -802B791C running fast guns full out crossed -802B7984 walking casually -802B79E0 running sort of girly -802B7B58 holding guns out kneeled to fire -802B7CC0 standing -802B7E38 standing bit tighter -802B7F6C standing bit tighter -802B80B0 standing -802B81E8 standing legs a bit farther back -802B82DC standing legs and arms a bit farther back -802B83EC standing -802B8544 move gun up for a sec then back to standing -802B8654 standing tight -802B87AC move gun up for a sec then back to standing -802B8904 standing holding gun into other -802B8ABC standing holding gun into other bit prouder -802B8C7C arms down and holding gun one hand -802B8D88 sort of sleeping mid-air? sniper on ground? -802B8EEC sprawled death -802B9008 leg a little in dead sprawled on floor -802B910C sprawled death hands up -802B921C sprawled slanty death -802B9304 sprawled sideways -802B9408 sprawled on side -802B9554 dying sprawled legs crossed -802B9678 sprawled face down -802B97B8 weird cross legged slanted death -802B98E4 sideways cross legged face down -802B99F8 sideways cross legged little different -802B9B10 dead on ground slightly angled -00000001 -00000001 -00000001 -00000001 -802B9B70 HAHAHA RUNNING prancing flailing arms surrender *very cool* -802B9BC4 running around like a madman surrendering -802B9D7C aiming gun up and down at you -802B9E0C turning gun side to side -802B9E9C gun aim -802BA16C checking gun -802BA634 little head movement checking gun -802BA76C shaking head moving hand to face -802BA9E8 swatting flies -802BAB70 kicking leg a bit, hunching for a sec -802BAC88 standing gun pose -802BAD14 standing gun pose feet a little back -802BAE68 hunching over once -802BB100 talking and moving arm -802BB440 laughing -802BB6E4 standing legs slant -802BB8D0 standing gun across face pondering -802BBA04 hands up surrender stationary -802BBCF8 gun up coiling from being hit -802BC038 being hit and coming back -802BC32C sort of kneel being hit -802BC568 standing prim and proper -00000001 -802BC808 DANCING!!!? -802BCA0C fast dancing!? -802BCAA4 standing arms down -802BCB28 standing arms down -802BCBB8 standing arms down -802BCBE8 standing arms down head a little lower -802BCD5C start8 - aiming gun -802BD0A4 jumping off dam! -802BD1E0 UHH? He takes a step, then jumps straight down through floor -802BD51C running and jumping (onto cradle helicopter) -802BD54C falling off cradle! -802BD57C probably fixing suit with arms motion -802BD64C leg up arms out a little -00000000 -802BD930 slanted whole body -802BDAB4 slanted almost like got punched in face backwards -802BDC80 body GOES ABSOLUTELY CRAZY and flutters to the sky - -Everybody's dances! Well, it works Cuba, not sure about other levels. -(or replace for everyone does anything) -5000FF04 0000 -81029D6C 802B -5000FF04 0000 -81029D6E C808 - -Everybody Arms flailing -5000FF04 0000 -81029D6C 802B -5000FF04 0000 -81029D6E 9B70 - -http://home.worldnet.att.net/~MKleiman/animationmod.zip - - -__________________ -facility guard invisibility! -801D927C 0025 -801D9458 0025 -801D9634 0025 -801D9810 0025 -801D99EC 0025 -801D9BC8 0025 -801D9DA4 0025 -801D9F80 0025 - diff --git a/notes/GE Documentation/GameShark - GE specific/motorcyclelauncher.txt b/notes/GE Documentation/GameShark - GE specific/motorcyclelauncher.txt deleted file mode 100644 index 406ac6b..0000000 --- a/notes/GE Documentation/GameShark - GE specific/motorcyclelauncher.txt +++ /dev/null @@ -1,337 +0,0 @@ -81021406 3FF0 wall colours -81021424 0000 - -8102143C 0001 texture thingy -81021433 FFFF flowing walls - -versus info at 8003a218. Ch per object. -8003,75d0|8005,5a60|3dcc,cccd -prior object line -object load -size - -Quantity Digits to Accompany Gun Equipped Modifier Codes -1st Value - 2nd Value - Item/Prop Description -75D0 - 5A60 - 00 - Double Alarm (beta) -75F0 - 5A6C - 01 - Alarm (Dambunkers) -7610 - 5A78 - 02 - Tiny Pyramid? -7630 - 5A88 - 03 - Ammo Pickup Box #1 Brown -7650 - 5A98 - 04 - Ammo Pickup Box #2 Brown -7670 - 5AA8 - 05 - Ammo Pickup Box #1 Green -7690 - 5AB8 - 06 - Ammo Pickup Box #2 Green -76B0 - 5AC8 - 07 - Ammo Pickup Box #3 Green -76D0 - 5AD8 - 08 - Iron Pillar? -76F0 - 5AE0 - 09 - Drawing Board? (Surfaces?) -7710 - 5AEC - 0a - Book (Surfaces) -7730 - 5AF4 - 0b - Bookshelf (Surfaces? Arch?) -7750 - 5B04 - 0c - Computer Console(CC) #1 -7770 - 5B18 - 0d - CC #2 -7790 - 5B2C - 0e - CC #3 -77B0 - 5B40 - 0f - CC #4 -77D0 - 5B54 - 10 - CC#5 -77F0 - 5B68 - 11 - CC #6 -7810 - 5B7C - 12 - Wooden Crate (WC) #1 -7830 - 5B88 - 13 - WC #2 -7850 - 5B94 - 14 - WC #3 -7870 - 5BA0 - 15 - WC #4 -7890 - 5BB0 - 16 - WC #5 -78B0 - 5BC0 - 17 - WC #6 -78D0 - 5BD0 - 18 - ? -78F0 - 5BD8 - 19 - Computer Consol (CC) #7 -7910 - 5BE4 - 1a - CC #8 -7930 - 5BF0 - 1b - CC #9 -7950 - 5BFC - 1c - CC #10 -7970 - 5C0C - 1d - CC #11 -7990 - 5C1C - 1e - CC #12 -79B0 - 5C2C - 1f - cc #13 -79D0 - 5C3C - 20 - CC #14 -79F0 - 5C4C - 21 - CC #15 -7A10 - 5C5C - 22 - CC #16 -7A30 - 5C6C - 23 - CC #17 -7A50 - 5C7C - 24 - CC #18 -7A70 - 5C90 - 25 - CC #19 -7A90 - 5CA4 - 26 - Computer Table #1 -7AB0 - 5CAC - 27 - Computer Table #2 -7AD0 - 5CB4 - 28 - Table Light (Surfacesarch) -7AF0 - 5CC4 - 29 - Computer Drive (Aztec) -7B10 - 5CD4 - 2a - Disk Drive (Aztec) -7B30 - 5CE4 - 2b - Fileing Cabinet (Runwayarch) -7B50 - 5CF8 - 2c - Gas Canister (Surfaces) -7B70 - 5D08 - 2d - Computer Keyboard -7B90 - 5D14 - 2e - Wall Cabinet (Bunkers) -7BB0 - 5D24 - 2f - wood panels, bunker 1 -7BD0 - 5D34 - 30 - Computer Mainframe #1 (Dambunkersetc) -7BF0 - 5D44 - 31 - Computer Mainframe #2 (Dambunkersetc) -7C10 - 5D54 - 32 - Chair (Runwayetc) -7C30 - 5D64 - 33 - Steel Crate #1 -7C50 - 5D74 - 34 - Steel Crate #2 -7C70 - 5D84 - 35 - Steel Crate #3 -7C90 - 5D94 - 36 - Steel Crate #4 -7CB0 - 5DA4 - 37 - Land To Air Missile Launcher? -7CD0 - 5DB4 - 38 - Group Of Land To Air Missile Launchers? -7CF0 - 5DC4 - 39 - Iron Small Pillar #1? -7D10 - 5DD0 - 3a - Iron Small Pillar #2? -7D30 - 5DDC - 3b - Iron Small Pillar #3? -7D50 - 5DE8 - 3c - Toxic Waste Drum #1? -7D70 - 5DF4 - 3d - Toxic Waste Drum #2? -7D90 - 5E00 - 3e - Toxic Waste Drum #3? -7DB0 - 5E0C - 3f - Gate Lock (Dam) -7DD0 - 5E18 - 40 - Telephone? -7DF0 - 5E24 - 41 - Radio Transmitter #1 (Caverns?etc) -7E10 - 5E34 - 42 - Radio Transmitter #2 (Caverns?etc) -7E30 - 5E44 - 43 - Radio Transmitter #3 (Caverns?etc) -7E50 - 5E54 - 44 - Radio Transmitter #4 (Caverns?etc) -7E70 - 5E64 - 45 - Warhead (Silo) -7E90 - 5E74 - 46 - Satellite Dish (Dam) -7EB0 - 5E80 - 47 - Electrical Box? -7ED0 - 5E8C - 48 - Stool (As In A Chair)? -7EF0 - 5E98 - 49 - Blue Chair (Fac) -7F10 - 5EA8 - 4a - Torpedoe Rack? -7F30 - 5EB8 - 4b - TV -7F50 - 5EC0 - 4c - TV Holder (Bunkers) -7F70 - 5ECC - 4d - Piece Of Paper? -7F90 - 5ED8 - 4e - Piece Of Paper? -7FB0 - 5EE4 - 4f - Wooden Crate(WC) #7 -7FD0 - 5EF8 - 50 - WC #8 -7FF0 - 5F0C - 51 - WC #9 -8010 - 5F20 - 52 - WC #10 -8030 - 5F34 - 53 - WC #11 -8050 - 5F48 - 54 - WC #12 -8070 - 5F5C - 55 - Wood Table -8090 - 5F6C - 56 - Card? -80B0 - 5F7C - 57 - Blue Electrical Unit? -80D0 - 5F8C - 58 - Bunch Of Stacked Steel Crates #1 -80F0 - 5F98 - 59 - Bunch Of Stacked Steel Crates #2 -8110 - 5FA4 - 5a - Bunch Of Stacked Steel Crates #3 -8130 - 5FB0 - 5b - Door Identity Checker (Silo) -8150 - 5FBC - 5c - Warhead Capsule (Silo) -8170 - 5FC8 - 5d - Nuclear Missile (Silo) -8190 - 5FD0 - 5e - Moveable Computer Console (Silo) -81B0 - 5FE4 - 5f - Computer Table (Control) -81D0 - 5FF4 - 60 - Locker #1 (Fac etc) -81F0 - 6000 - 61 - Locker #2 (Fac etc) -8210 - 600C - 62 - ? -8230 - 6018 - 63 - Frigate Engine -8250 - 6028 - 64 - Frigate Missile Launcher #1 -8270 - 6038 - 65 - Frigate Gun Turret -8290 - 6044 - 66 - Frigate Missile Launcher #2 -82B0 - 6054 - 67 - Frigate Missile Launcher #3 -82D0 - 6064 - 68 - Small Glass Window -82F0 - 6070 - 69 - tall glass arc.(not door tile) -8310 - 6084 - 6a - small glass arch. light (not door tile) -8330 - 6098 - 6b - small glass arch. dark (not door tile) -8350 - 60A8 - 6c - Tree #1 -8370 - 60B8 - 6d - Tree #2 -8390 - 60C0 - 6e - Small Tree -83B0 - 60CC - 6f - Plant #1 -83D0 - 60D8 - 70 - Concrete Science Table (Fac) -83F0 - 60E4 - 71 - Small Gas Tank (Fac) -8410 - 60F0 - 72 - Group Of Small Gas Tanks (Facrunway) -8430 - 6100 - 73 - Bullet Proof Vest #1 -8450 - 6110 - 74 - Bullet Proof Vest #2 -8470 - 6124 - 75 - Big Gas Tank (Fac) -8490 - 6130 - 76 - Glass Vile? (Can Use To Make Doors Glass) -84B0 - 6140 - 77 - Large Iron Sheet? -84D0 - 614C - 78 - Train Brake -84F0 - 6158 - 79 - Gun Clip(GC) #1 -8510 - 6164 - 7a - GC #2 -8530 - 6170 - 7b - GC #3 -8550 - 617C - 7c - GC #4 -8570 - 618C - 7d - GC #5 -8590 - 619C - 7e - GC #6 -85B0 - 61A8 - 7f - Gun Clip? -85D0 - 61B4 - 80 - Fire Extinguisher? -85F0 - 61C8 - 81 - Shotgun Shells -8610 - 61D8 - 82 - Gun Clip? -8630 - 61E4 - 83 - Gun Shells? -8650 - 61F4 - 84 - Gun Shells -8670 - 6204 - 85 - Gun Clip #7 -8690 - 6210 - 86 - Gun Clip #8 -86B0 - 621C - 87 - Steel Door w/ window (Bunkers) -86D0 - 6228 - 88 - Steel Door #1 (Bunkers) -86F0 - 6234 - 89 - Steel Door? (Bunkers) -8710 - 6248 - 8a - Steel Door #2 (Bunkers) -8730 - 625C - 8b - Mini-steel Door? (Bunkers) -8750 - 626C - 8c - Steel Door #3 (Bunkers) -8770 - 627C - 8d - Steel Door #4 -8790 - 628C - 8e - Steel Door??? -87B0 - 629C - 8f - Steel Door (Arch) -87D0 - 62AC - 90 - Elevator Door #1 (blue w/ yellow tape) Caverns -87F0 - 62C0 - 91 - Steel Door? -8810 - 62D0 - 92 - Blue Steel Plate? -8830 - 62E0 - 93 - Blue Steel Plate? -8850 - 62F0 - 94 - Blue Steel Plate? -8870 - 6300 - 95 - Steel Plate Door (Runway) -8890 - 6310 - 96 - Blue Steel Door w/red tape -88B0 - 6320 - 97 - Blue Steel Door w/red tape -88D0 - 6330 - 98 - Frigate Door #1 -88F0 - 6340 - 99 - Frigate Door #2 -8910 - 6350 - 9a - Steel Door? (Fac) -8930 - 6364 - 9b - Steel Door #1 (Fac) -8950 - 6378 - 9c - Steel Door #2 (Fac) -8970 - 638C - 9d - Wood Door? -8990 - 63A0 - 9e - Sliding Steel Door (Fac,dam) -89B0 - 63B8 - 9f - Restroom Door (Fac) -89D0 - 63CC - a0 - Glass Lab Door (Fac) -89F0 - 63E4 - a1 - Train Door -8A10 - 63F4 - a2 - Train Door? -8A30 - 6404 - a3 - Train Door? -8A50 - 6414 - a4 - Caverns clam-type door -8A70 - 6424 - a5 - Caverns iris-type door -8A90 - 6430 - a6 - Wood Door (Surfaces) -8AB0 - 6440 - a7 - Green Door #1 (Surfaces) -8AD0 - 6450 - a8 - Green Door #2 (Surfaces) -8AF0 - 6460 - a9 - Sliding Steel Door (Silo?, surfaces, bunker) -8B10 - 6474 - aa - Egypt Block Door? -8B30 - 6484 - ab - Egypt Block Door? -8B50 - 6494 - ac - Gray Block Door? -8B70 - 64A4 - ad - Egypt Block Door? -8B90 - 64B4 - ae - Block Door? -8BB0 - 64C4 - af - Block Door? -8BD0 - 64D4 - b0 - Large Steel Shutter (Control, Caverns) -8BF0 - 64E0 - b1 - Single Tile? -8C10 - 64EC - b2 - Steel Door (Dam?) -8C30 - 64FC - b3 - Steel Door (Dam Tunnel) -8C50 - 650C - b4 - Gate Fence (Dam) -8C70 - 651C - b5 - ? -8C90 - 652C - b6 - bar door (divider in stack) -8CB0 - 653C - b7 - Gate (Statue) -8CD0 - 654C - b8 - KF7 -8CF0 - 6558 - b9 - Grenade Launcher -8D10 - 656C - ba - throwing Knife -8D30 - 6578 - bb - Laser Gun -8D50 - 6584 - bc - AR-33 -8D70 - 6590 - bd - DK5 -8D90 - 659C - be - Cougar Magnum -8DB0 - 65A8 - bf - PP7 -8DD0 - 65B4 - c0 - Shotgun -8DF0 - 65C4 - c1 - Klobb -8E10 - 65D4 - c2 - Phantom -8E30 - 65E4 - c3 - 9MM -8E50 - 65F0 - c4 - Grenade -8E70 - 6600 - c5 - RCP-90 -8E90 - 660C - c6 - Briefcase #1 -8EB0 - 661C - c7 - Remote Mine -8ED0 - 662C - c8 - Green Mine? -8EF0 - 6640 - c9 - Blue Mine? -8F10 - 6650 - ca - Rocket -8F30 - 665C - cb - Grenade Launcher Grenade -8F50 - 6670 - cc - Silenced PP7 -8F70 - 6680 - cd - Dusty -8F90 - 668C - ce - Silenced DK5 -8FB0 - 669C - cf - Auto Shotgun -8FD0 - 66AC - d0 - Golden Gun -8FF0 - 66B8 - d1 - Hunting Knife -9010 - 66C8 - d2 - Sniper Rifle -9030 - 66DC - d3 - Rocket Launcher -9050 - 66F0 - d4 - Black Guard Hat? -9070 - 66FC - d5 - Black Guard Hat? -9090 - 670C - d6 - Black Guard Hat? -90B0 - 671C - d7 - Green Guard Hat? -90D0 - 6728 - d8 - Green Guard Hat? -90F0 - 6738 - d9 - Steel Guard Hat? -9110 - 6744 - da - Steel Guard Hat? -9130 - 6754 - db - Guard Hat? (Aztec?) -9150 - 6760 - dc - Black Guard Hat? -9170 - 676C - dd - Blue Guard Hat? -9190 - 677C - de - Red Guard Hat? -91B0 - 678C - df - Brown Guard Hat? - -9210 - 67BC - e2 - Briefcase #2 - -9310 - 683C - ea - Door Opener (Fac) - -9330 - 6850 - ec - Timer/calculator? -9370 - 6878 - ed - Briefcase #3 -9390 - 6890 - ee - Camera? - -93F0 - 68C4 - f1 - Briefcase #4 -9410 - 68DC - f2 - Standing Briefcase? -9430 - 68EC - f3 - Key? -9450 - 68FC - f4 - Key? -9470 - 690C - f5 - Tracking Bug (Damfrig) -9490 - 6918 - f6 - Tracking Camera? -94B0 - 692C - f7 - Hard Disk? -94D0 - 6938 - f8 - Goldeneye Disk (Bunkers) -94F0 - 694C - f9 - Sunglasses? - -9550 - 6988 - fc - Gas Keyring -9570 - 6998 - fd - Circuit Board? -9590 - 69A8 - fe - Safe (without Door) -95D0 - 69B8 - ff - Standing Folder? -9610 - 69D4 - (01) - Helicopter Plans? -9630 - 69E4 - (02) - Circuit Board? -9650 - 69F8 - (03) - Bunker Plans? -9690 - 6A14 - (05) - Tape Cassette? - -9770 - 6A78 - (0d) - Clipboard? (Bunkers?) -9790 - 6A88 - (0e) - Red Standing Folder? (Bunkers?) -97B0 - 6A98 - (0f) - Folder? (Bunkers?) -97D0 - 6AA8 - (10) - Tape Cassette? -97F0 - 6AB8 - (11) - Bomb (plastic Explosive? Frig) -9810 - 6AC8 - (12) - Flight Recorder -9830 - 6AD8 - (13) - Video Tape (Bunkers) -9850 - 6AE8 - (14) - (Nintendo Screen???) -9870 - 6AF8 - (15) - (Goldeneye Screen???) -9890 - 6B08 - (16) - (Folder Select Screen???) -98B0 - 6B18 - (17) - Truck (Dam) -98D0 - 6B24 - (18) - Jeep -98F0 - 6B2C - (19) - Red Truck? -9910 - 6B34 - (1a) - ? -9930 - 6B44 - (1b) - ? -9950 - 6B4C - (1c) - ? -9970 - 6B58 - (1d) - ? -9990 - 6B60 - (1e) - Truck Trailer? -99B0 - 6B70 - (1f) - Motorcycle -99D0 - 6B7C - 20 - Tank (it's Body Atleast) -99F0 - 6B84 - (21) - All Terrain Attack Vehicle???!!!!!!!! -9A10 - 6B8C - (22) - Speed Boat?! -9A30 - 6B98 - (23) - ? -9A50 - 6BA0 - (24) - ? -9A70 - 6BB0 - 0125 - Safe Door -9A90 - 6BBC - (26) - Key Holder (Bunkers) -9AB0 - 6BCC - 0127 - Sliding glass in bunker -9AD0 - 6BD8 - (28) - ? -9AF0 - 6BE4 - 0129 - Block Door #1 (Arch) -9B10 - 6BF4 - 012a - Block Door #2 (Arch) -9B30 - 6C04 - (012b) - ? -9B50 - 6C10 - (2c) - Train Door (Depot) -9B70 - 6C20 - (2d) - Car #1 -9B90 - 6C2C - (2e) - Car #2 -9BB0 - 6C38 - (2f) - Car #3 -9BD0 - 6C44 - (30) - Red Car -9BF0 - 6C50 - (31) - Black Volvo!??? -9C10 - 6C5C - (32) - Door? (Control?) -9C30 - 6C70 - (33) - Door? (Control?) -9C50 - 6C84 - (34) - Gate (Depotstr?) -9C70 - 6C98 - (35) - Steel Door? -9C90 - 6CAC - (36) - Blue Vile (Fac) -9CB0 - 6CBC - (37) - Beaker (Fac) -9CD0 - 6CCC - (38) - Vile Stand (Fac) -9CF0 - 6CDC - (39) - Land Mine (Str) -9D10 - 6CE8 - (3a) - Plant #2 -9D30 - 6CF4 - (3b) - Plant #3 -9D50 - 6D00 - (3c) - Plant #4 -9D70 - 6D0C - (3d) - Plant #5 -9D90 - 6D18 - (3e) - ?(game Freezes) -9DB0 - 6D28 - (3f) - (Title Screen???) -9DD0 - 6D34 - (0140) - City Street Block(CSB) #1 -9DF0 - 6D48 - (41) - CSB #2 -9E10 - 6D5C - (42) - CSB #3 -9E30 - 6D70 - (43) - CSB #4 -9E50 - 6D84 - (44) - CSB #5 -9E70 - 6D98 - 0145 - Steel Garage Door (red) -9E90 - 6DAC - 0146 - Window Glass (glass pillar, egypt) -9EB0 - 6DB8 - 0147 - Piece Of Wall from temple (impassible) -9ED0 - 6DC8 - (48) - Shuttle! (Aztec) -9EF0 - 6DD4 - (49) - Steel Plate (Aztec) -9F10 - 6DE4 - (4a) - Steel Plate (Aztec) -9F30 - 6DF8 - (4b) - Small Steel Piece? -9F50 - 6E0C - (4c) - Computer Mainframe? -9F70 - 6E18 - 014d - White Flag On Stick? -9F90 - 6E20 - (014e) - Yellow Traffic Barrier (Str) -9FB0 - 6E2C - (4f) - Door Opener (Dam) -9FD0 - 6E38 - (50) - Door Opener? (Dam?) -9FF0 - 6E44 - (51) - Computer Console #20 -A010 - 6E54 - (52) - Vile? -A030 - 6E64 - (53) - Stone Pillar? (Str?) diff --git a/notes/GE Documentation/GameShark - GE specific/multi load information.txt b/notes/GE Documentation/GameShark - GE specific/multi load information.txt deleted file mode 100644 index b0021f7..0000000 --- a/notes/GE Documentation/GameShark - GE specific/multi load information.txt +++ /dev/null @@ -1,1052 +0,0 @@ -8100C0F4 0801 -8100C0F6 8090 -8100C0F8 AFA4 -8100C0FA 0000 - -81060240 is active address then -0800 303F to return - -all 8005 pointers -load only one stage: 8002A8F7 00xx -number players: 8102B522 000x - -Value: Name: Setup Mod: BG Mod: CD Mod: scale: fog intensity: ------------------------------------------------------------------------------------------------------- -09 Bunker 1 8103750A 81044492 81044496 81044498 8104449C -14 Silo 81037536 810444AA 810444AE 810444b0 810444b4 -15 (default) 8103753A Not Listed Not Listed Not Listed Not Listed -16* Statue Park 8103753E 810444C2 810444C6 810444c8 810444CC -17 Control 81037542 810444DA 810444DE 810444e0 810444E4 -18* Archives 81037546 810444F2 810444F6 810444f8 810444FC -19 Train 8103754A 8104450A 8104450E 81044510 81044514 -1A Frigate 8103754E 81044522 81044526 81044528 8104452C -1B* Bunker 2 81037552 8104453A 8104453E 81044540 81044544 -1C Aztec 81037556 81044552 81044556 81044558 8104455C -1D Streets 8103755A 8104456A 8104456E 81044570 81044574 -1E Depot 8103755E 81044582 81044586 81044588 8104458C -1F* Complex 81037562 8104459A 8104459E 810445a0 810445A4 -20* Egyptian 81037566 810445B2 810445B6 810445b8 810445BC -21 Dam 8103756A 810445CA 810445CE 810445d0 810445D4 -22* Facility 8103756E 810445E2 810445e6 810445e8 810445EC -23 Runway 81037572 810445FA 810445FE 81044600 81044604 -24 Surface 1 81037576 81044612 81044616 81044618 8104461C -25 Jungle 8103757A 8104462A 8104462E 81044630 81044634 -26* Temple 8103757E 81044642 81044646 81044648 8104464C -27* Caverns 81037582 8104465A 8104465E 81044660 81044664 -28 Citadel 81037586 81044672 81044676 81044678 8104467C -29* Cradle 8103758A 8104468A 8104468E 81044690 81044694 -2A ?(sho) 8103758E 810446A2 810446A6 810446a8 810446AC -2B Surface 2 81037592 810446BA 810446BE 81044690 81044694 -2C ?(eld) 81037596 810446D2 810446D6 810446d8 810446DC -2D* Basement 8103759A 810446EA 810446EE 810446f0 810446F4 -2E* Stacks 8103759E 81044702 81044706 81044708 8104470C -2F ?(lue) 810375A2 8104471A 8104471E 81044720 81044724 -30* Library 810375A6 81044732 81044736 81044738 8104473C -31 ?(rit) 810375AA 8104474A 8104474E 81044750 81044754 -32* Caves 810375AE 81044762 81044766 81044768 8104476C -33 ?(ear) 810375B2 8104477A 8104477E 81044780 81044784 -34 ?(lee) 810375B6 81044792 81044796 81044798 8104479C -35 ?(lip) 810375BA 810447AA 810447AE 810447b0 810447B4 -36 Cuba 810375BE 810447C2 810447C6 810447c8 810447CC -37 ?(wax) 810375C2 810447DA 810447DE 810447e0 810447E4 -38 ?(pam) 810375C6 810447F2 810447F6 810447f8 810447FC -39 ???(x) ??? 8104480A 8104480E 81044810 81044814 --------------------------------------------------------------------------------- -Value: Code: Name: Setup: MPset: Bgdata: Tiles: Level Size: fog intensity: - -09 sev Bunker 1 5870 85F0 8604 3F0A1081 3F800000 41B92F68 -14 silo Silo 5884 8618 8630 3EF1F363 3F800000 41E88D50 -16 stat Statue Park 58A4 B258 8648 8660 3DDB8D2D 3F800000 3DA40B78 -17 arec Control 58B4 8678 8690 3EFF6B54 3F800000 42A14A53 -18 arch Archives 58C4 B1A8 86A8 86C0 3F01BCB6 3F800000 4259642C -19 tra Train 58D0 86D8 86EC 3E19CD47 3F800000 419C4000 -1A dest Frigate 58DC 8700 8718 3EE52875 3F800000 42130F0F -1B sevb Bunker 2 58E8 B248 8730 8748 3F0A1081 3F800000 41B92F68 -1C azt Aztec 58F4 8760 8774 3EB4BD29 3F800000 42505555 -1D pete Streets 5900 8788 87A0 3EAF0AE5 3F800000 42297DD5 -1E depo Depot 590C 87B8 87D0 3E5FB8ED 3F800000 418CD856 -1F ref Complex 5918 B238 87E8 87FC 3F715F16 3F800000 421783E1 -20 cryp Egyptian 5924 B1F8 8810 8828 3E831CEB 3F800000 41BCADE3 -21 dam Dam 5930 8840 8854 3E6F3F52 3E4CCCCD 42C80000 -22 ark Facility 593C B1B8 8868 887C 3F9A6DF0 3F800000 42803483 -23 run Runway 5948 8890 88A4 3DB7713A 3F800000 4091B830 -24 sevx Surface 1 5954 88B8 88D0 3EE8AE9B 3E4CCCCD 41B4D4F1 -25 jun Jungle 5960 88E8 88FC 3DC1DE99 3F800000 40D5E75C -26 dish Temple 596C B208 8910 8928 3EF15F16 3F800000 43130F0F -27 cave Caverns 5978 B1D8 8940 8958 3E895721 3F800000 41570DC3 -28 cat Citadel 5984 8970 8984 3F44BDEA 3F800000 4219D89D -29 crad Cradle 5990 B1E8 8998 89B0 3E715F16 3F800000 422C69EF -2A sho ? 599C 89C8 89DC 3F072B02 3F800000 41A97DD4 -2B sevxb Surface 2 59A8 89F0 8A08 3EE8AE9B 3E4CCCCD 41B4D4F1 -2C eld ? 59B8 8A20 8A34 3F715F16 3F800000 4121F9AD -2D imp Basement 59C4 B218 8A48 8A5C 3F28F5C2 3F800000 421783E1 -2E ash Stacks 59D0 B1C8 8A70 8A84 3F28F5C2 3F800000 421783E1 -2F lue ? 59DC 8A98 8AAC 3F715F16 3F800000 4121F9AD -30 ame Library 59E8 B198 8AC0 8AD4 3F28F5C2 3F800000 421783E1 -31 rit ? 59F4 8AE8 8AFC 3F715F16 3F800000 4121F9AD -32 oat Caves 5A00 B228 8B10 8B24 3E10D2A7 3F800000 4121F9AD -33 ear ? 5A0C 8B38 8B4C 3F715F16 3F800000 4121F9AD -34 lee ? 5A18 8B60 8B74 3F715F16 3F800000 4121F9AD -35 lip ? 5A24 8B88 8B9C 3F715F16 3F800000 4121F9AD -36 len Cuba 5A30 8BB0 8BC4 3DC1DE99 3F800000 40D5E75C -37 wax ? 5A3C 8BD8 8BEC 3F715F16 3F800000 4121F9AD -38 pam ? 5A48 8C00 8C14 3F715F16 3F800000 4121F9AD -39 x ??? ??? 8C28 8C34 3F715F16 3F800000 3F800000 - ------------------------------------------------ -21990 comp all the stuff in these tables! 80020d90 - 8005xxxx - -2B326 nothing! - -13E550 nothing! - -15FA47 nothing - -24A681 - -28E99C E7C4 animations -29D160 AC8 display mapping routine of some sort -29DC28 930 main menu image bank (solo, multi select + menus and overlays) -29E560 2B18 part of below, at least according to mapping... -2A1078 18D0 series of points for unknown mess -2A2948 C00 mapping, assumingly for above stuff -2A3548 ? - -intro demos -[2BF2D0] -[2C44D0] -[2C64A0] -[2C7F50] -[2CA330] -[2CBFA0] -[2CE6F0] -[2D1000] -[2D4390] -[2D9610] -[2DB7A0] -[2DD770] -[2DF120] -[2E2600] - -2EBDE0 sound effects - - -index# rom other value ref in ram -00 41998c 0061002a 802d1c14 no music! -01 4199b6 02db01d6 802d1c1c solo death abrev. --only above two can directly replace) -02 419b8c 0ef208ae 802d1c24 intro (during eye) - -03 41a43a 149e0bea 802d1c2c train -04 41b024 17840da0 802d1c34 depot -05 41bdc4 17dd0d98 802d1c3c Multiplayer Theme -06 41cb5c 171f0dc0 802d1c44 citadel - 41ceb0 not listed! not listed! extra music? -07 41d91c 0fee0ace 802d1c4c facility -08 41e3ea 12200b5e 802d1c54 control -09 41ef48 16c30e04 802d1c5c dam -0a 41fd4c 14570de0 802d1c64 frigate -0b 420b2c 0db80954 802d1c6c archives -0c 421480 17bb0e70 802d1c74 silo -0d 4222f0 172b0f6c 802d1c7c -0e 42325c 155d0d02 802d1c84 streets -0f 423f5e 0aad0672 802d1c8c bunker 1 -10 4245d0 095f0680 802d1c94 bunker 2 -11 424c50 0e370998 802d1c9c statue -12 4255e8 0dc909da 802d1ca4 elevator (control) -13 425fc2 16920d60 802d1cac cradle -14 426d22 0060002a 802d1cb4 -15 426d4c 09d80646 802d1cbc elevator (w.c.) -16 427392 15ea0d9a 802d1cc4 egyptian -17 42812c 05d803e2 802d1ccc folders -18 42850E 02fe01f2 802d1cd4 watch music -19 428700 14840c72 802d1cdc aztec -1a 429372 17480e2c 802d1ce4 water caverns -1b 42a19e 05600366 802d1cec death solo - -1c 42a504 17820db6 802d1cf4 surface2 -1d 42b2ba 0e7908a0 802d1cfc train x -1e 42bb5a 0060002a 802d1d04 -1f 42bb84 0e8a0958 802d1d0c facility x -20 42c4dc 0d1d07bc 802d1d14 depot x -21 42cc98 09330548 802d1d1c control x -22 42d1e0 0cc00754 802d1d24 water caverns x -23 42d934 094b0520 802d1d2c dam x -24 42de54 09ce05c2 802d1d34 frigate x -25 42e416 0c8a0724 802d1d3c archives x -26 42eb3a 0e8208f4 802d1d44 silo x -27 42f42e 0060002a 802d1d4c egyptian x -28 42f458 0ac2066c 802d1d54 streets x -29 42fac4 0d3007a6 802d1d5c bunker1 x -2a 43026a 0ac6064e 802d1d64 bunker2 x -2b 4308b8 0e600816 802d1d6c -2c 4310ce 05da0432 802d1d74 intro swoosh + drone -2d 431500 0be506b8 802d1d7c statue x -2e 431bb8 0ec508d6 802d1d84 aztec x -2f 43248e 0f1408b0 802d1d8c -30 432d3e 0c3606ca 802d1d94 cradle x -31 433408 0e0d084a 802d1d9c cuba -32 433c52 16160d1e 802d1da4 runway -33 434970 04f302da 802d1dac runway plane -34 434c40 0ca10728 802d1db4 -35 435372 06bb0522 802d1dbc wind blowing (surface 2) -36 435894 02ed020c 802d1dc4 guitar gliss in multi death -37 435aa0 09970788 802d1dcc jungle -38 436228 0b070622 802d1dd4 runway x -39 43684a 170c0d68 802d1ddc surface 1 -3a 4375b2 044602c8 802d1de4 multiplayer death -3b 43787a 0ca10728 802d1dec surface2 x -3c 437fa2 037b029c 802d1df4 surface 2 ending - -3d 43823e 01db0166 802d1dfc part of statue theme -3e 4383a4 035b02b6 802d1e04 end of ? theme -[followed by-11726360] - - -background data -8004*number *word *ROM addy *word value @ pointer -6054:00000000|80058da0|00000000 00000000 -6060:00000001|80058da4|00438660 bg/bg_sev_all_p.seg bunker1 -606c:00000002|80058db8|00449450 bg/bg_silo_all_p.seg silo -6078:00000003|80058dd0|0049a390 bg/bg_stat_all_p.seg statue -6084:00000004|80058de8|004bc460 bg/bg_arec_all_p.seg control -6090:00000005|80058e00|004ea7e0 bg/bg_arch_all_p.seg archives -609c:00000006|80058e18|005102d0 bg/bg_tra_all_p.seg train -60a8:00000007|80058e2c|00530840 bg/bg_dest_all_p.seg frigate -60b4:00000008|80058e44|0055e200 bg/bg_sevb_all_p.seg bunker2 -60c0:00000009|80058e5c|00578fa0 bg/bg_azt_all_p.seg aztec -60cc:0000000a|80058e70|0059a9f0 bg/bg_pete_all_p.seg streets -60d8:0000000b|80058e88|005b4620 bg/bg_depo_all_p.seg depot -60e4:0000000c|80058ea0|005e0f90 bg/bg_ref_all_p.seg complex -60f0:0000000d|80058eb4|005ea5a0 bg/bg_cryp_all_p.seg egypt -60fc:0000000e|80058ecc|005ffc50 bg/bg_dam_all_p.seg dam -6108:0000000f|80058ee0|0062fdf0 bg/bg_ark_all_p.seg facility -6114:00000010|80058ef4|00660d70 bg/bg_run_all_p.seg runway -6120:00000011|80058f08|0066b140 bg/bg_sevx_all_p.seg surfaces -612c:00000012|80058f20|00687710 bg/bg_jun_all_p.seg jungle -6138:00000013|80058f34|0069c860 bg/bg_dish_all_p.seg temple -6144:00000014|80058f4c|006a10d0 bg/bg_cave_all_p.seg caverns -6150:00000015|80058f64|006c55c0 bg/bg_cat_all_p.seg citadel -615c:00000016|80058f78|006caaf0 bg/bg_crad_all_p.seg cradle -6168:00000017|80058f90|006dae40 bg/bg_sho_all_p.seg (library background) -6174:00000018|80058fa4|006dae40 bg/bg_eld_all_p.seg (library background) -6180:00000019|80058fb8|006dae40 bg/bg_imp_all_p.seg basement (library background) -618c:0000001a|80058fcc|006dae40 bg/bg_ash_all_p.seg stack (library background) -6198:0000001b|80058fe0|006dae40 bg/bg_lue_all_p.seg (library background) -61a4:0000001c|80058ff4|006dae40 bg/bg_ame_all_p.seg library -61b0:0000001d|80059008|006e4da0 bg/bg_rit_all_p.seg (caves background) -61bc:0000001e|8005901c|006e4da0 bg/bg_oat_all_p.seg caves -61c8:0000001f|80059030|006ebbf0 bg/bg_ear_all_p.seg (cuba background) -61d4:00000020|80059044|006ebbf0 bg/bg_lee_all_p.seg (cuba background) -61e0:00000021|80059058|006ebbf0 bg/bg_lip_all_p.seg (cuba background) -61ec:00000022|8005906c|006ebbf0 bg/bg_len_all_p.seg cuba -61f8:00000023|80059080|006ecb90 bg/bg_wax_all_p.seg (armourguard call) -6204:00000024|80059094|006ecb90 bg/bg_pam_all_p.seg (armourguard call) - -Character Bodies/Heads -8004*number *word *ROM addy *word value @ pointer -6210:00000025|800590a8|006ecb90 CarmourguardZ -621c:00000026|800590b8|006ef010 CbaronsamediZ -6228:00000027|800590c8|006f2700 CbluecamguardZ -6234:00000028|800590d8|006f4df0 CbluemanZ -6240:00000029|800590e4|006f6c00 CbluewomanZ -624c:0000002a|800590f0|006f8ac0 CboilerbondZ -6258:0000002b|80059100|006fb6d0 CboilertrevZ -6264:0000002c|80059110|006fed50 CborisZ -6270:0000002d|80059118|00701e70 CcamguardZ -627c:0000002e|80059124|00704550 CcardimanZ -6288:0000002f|80059130|00706350 CcheckmanZ -6294:00000030|8005913c|007081d0 CcommguardZ -62a0:00000031|80059148|0070a7d0 CdjbondZ -62ac:00000032|80059154|0070d660 CfattechwomanZ Rosika -62b8:00000033|80059164|0070f580 Cgreatguard2Z -62c4:00000034|80059174|00711ca0 CgreatguardZ -62d0:00000035|80059184|00714320 CgreyguardZ -62dc:00000036|80059190|007169f0 CgreymanZ -62e8:00000037|8005919c|007187b0 CheadalanZ -62f4:00000038|800591a8|00718d80 CheadbZ -6300:00000039|800591b0|007192f0 CheadbalaclaZ -630c:0000003a|800591c0|007196c0 CheadbikeZ -6318:0000003b|800591cc|00719d60 CheadbrosnanZ -6324:0000003c|800591dc|0071aab0 CheadbrosnanboilerZ -6330:0000003d|800591f0|0071b650 CheadbrosnansnowZ -633c:0000003e|80059204|0071c4d0 CheadbrosnansuitZ -6348:0000003f|80059218|0071d250 CheadbrosnantimberZ -6354:00000040|8005922c|0071de10 CheadchrisZ -6360:00000041|80059238|0071e350 CheaddaveZ -636c:00000042|80059244|0071e8d0 CheaddesZ -6378:00000043|80059250|0071ee00 CheadduncanZ -6384:00000044|80059260|0071f320 CheaddwayneZ -6390:00000045|80059270|0071f8a0 CheadgrahamZ -639c:00000046|80059280|0071fe10 CheadgrantZ -63a8:00000047|8005928c|00720340 CheadjimZ -63b4:00000048|80059298|00720870 Cheadjoe2Z -63c0:00000049|800592a4|00720c90 CheadjoeZ -63cc:0000004a|800592b0|00721200 CheadjoelZ -63d8:0000004b|800592bc|00721710 CheadkarlZ -63e4:0000004c|800592c8|00721c70 CheadkenZ -63f0:0000004d|800592d4|007221c0 CheadleeZ -63fc:0000004e|800592e0|00722740 CheadmandyZ -6408:0000004f|800592ec|00722b30 CheadmarionZ -6414:00000050|800592fc|00722f40 CheadmarkZ -6420:00000051|80059308|00723470 CheadmartinZ -642c:00000052|80059318|007239d0 CheadmishkinZ -6438:00000053|80059328|00723f30 CheadneilZ -6444:00000054|80059334|00724450 CheadpeteZ -6450:00000055|80059340|007249e0 CheadrobinZ -645c:00000056|8005934c|00724ef0 CheadsallyZ -6468:00000057|80059358|007252f0 CheadscottZ -6474:00000058|80059364|00725870 CheadshaunZ -6480:00000059|80059370|00725e50 CheadsteveeZ -648c:0000005a|80059380|007263a0 CheadstevehZ -6498:0000005b|80059390|007268f0 CheadvivienZ -64a4:0000005c|800593a0|00726d80 CjawsZ -64b0:0000005d|800593a8|007299c0 CjeanwomanZ -64bc:0000005e|800593b4|0072b9d0 CmaydayZ -64c8:0000005f|800593c0|0072e570 CmoonfemaleZ -64d4:00000060|800593d0|007306c0 CmoonguardZ -64e0:00000061|800593dc|00732cb0 CnatalayaZ -64ec:00000062|800593e8|00736570 CnavyguardZ -64f8:00000063|800593f4|00738c50 CoddjobZ -6504:00000064|80059400|0073bd80 ColiveguardZ -6510:00000065|80059410|0073e3d0 CorumovZ -651c:00000066|8005941c|00741800 CpilotZ -6528:00000067|80059424|00744880 CredmanZ -6534:00000068|80059430|00746fb0 CrusguardZ -6540:00000069|8005943c|00748be0 CsnowbondZ -654c:0000006a|80059448|0074bf10 CsnowguardZ -6558:0000006b|80059454|0074eb90 CspicebondZ -6564:0000006c|80059460|007524b0 Csuit_lf_handZ -6570:0000006d|80059470|007556d0 CsuitbondZ -657c:0000006e|8005947c|00758460 CtechmanZ Scientist (male) -6588:0000006f|80059488|0075ab10 CtechwomanZ Scientist (female) -6594:00000070|80059494|0075cb00 CtimberbondZ -65a0:00000071|800594a4|0075f830 CtreveleanZ -65ac:00000072|800594b0|00763000 CtrevguardZ -65b8:00000073|800594bc|00765610 CvalentinZ -65c4:00000074|800594c8|00768580 CxeniaZ - -watch and in-hand models -8004*number *word *ROM addy *word value @ pointer -65d0:00000075|800594d0|0076bf70 Gak47Z -65dc:00000076|800594d8|0076c980 GaudiotapeZ -65e8:00000077|800594e4|0076cd10 GautoshotZ -65f4:00000078|800594f0|0076e520 GblackboxZ -6600:00000079|800594fc|0076eb20 GblueprintsZ -660c:0000007a|8005950c|0076ec20 GbombcaseZ -6618:0000007b|80059518|0076f3b0 GbombdefuserZ -6624:0000007c|80059528|0076f9a0 GbriefcaseZ -6630:0000007d|80059534|00770130 GbugZ -663c:0000007e|8005953c|00770aa0 GbugdetectorZ -6648:0000007f|8005954c|00770df0 GbungeeZ -6654:00000080|80059558|00771140 GcameraZ -6660:00000081|80059564|007715c0 GcartblueZ -666c:00000082|80059570|00771820 GcartridgeZ -6678:00000083|8005957c|00771950 GcartrifleZ -6684:00000084|80059588|00771b60 GcartshellZ -6690:00000085|80059594|00771d60 GcircuitboardZ -669c:00000086|800595a4|00771ea0 GclipboardZ -66a8:00000087|800595b0|00772090 GcreditcardZ -66b4:00000088|800595c0|007723e0 GdarkglassesZ -66c0:00000089|800595d0|00772730 GdatathiefZ -66cc:0000008a|800595dc|00772870 GdattapeZ -66d8:0000008b|800595e8|007729e0 GdoordecoderZ -66e4:0000008c|800595f8|00772f60 GdoorexploderZ -66f0:0000008d|80059608|007732b0 GdossierredZ -66fc:0000008e|80059618|00773610 GdynamiteZ -6708:0000008f|80059624|00773960 GexpelosivefloppyZ -6714:00000090|80059638|00773bb0 GexplosivepenZ -6720:00000091|80059648|00773f00 GextinguisherZ -672c:00000092|80059658|007746f0 GfingergunZ -6738:00000093|80059664|00774a40 GfistZ -6744:00000094|8005966c|00776140 GflarepistolZ -6750:00000095|8005967c|00776490 Gfnp90Z -675c:00000096|80059684|00777130 GgaskeyringZ -6768:00000097|80059694|00777b60 GgoldbarZ -6774:00000098|800596a0|00777eb0 GgoldeneyekeyZ -6780:00000099|800596b0|00778860 PgoldengunZ -678c:0000009a|800596bc|0077a040 GgoldwppkZ -6798:0000009b|800596c8|0077b9a0 GgrenadeZ -67a4:0000009c|800596d4|0077c3d0 GgrenadelaunchZ -67b0:0000009d|800596e4|0077d450 GheroinZ -67bc:0000009e|800596f0|0077d7a0 GjoypadZ -67c8:0000009f|800596fc|0077f650 GkeyanalysercaseZ -67d4:000000a0|80059710|0077fde0 GkeyboltZ -67e0:000000a1|8005971c|007807d0 GkeycardZ -67ec:000000a2|80059728|00780900 GkeyyaleZ -67f8:000000a3|80059734|00781650 GknifeZ -6804:000000a4|8005973c|00783120 GlaserZ -6810:000000a5|80059744|00783f10 GlectreZ -681c:000000a6|80059750|00784260 GlockexploderZ -6828:000000a7|80059760|007845b0 Gm16Z -6834:000000a8|80059768|00784fd0 GmapZ -6840:000000a9|80059770|007850c0 GmicrocameraZ -684c:000000aa|80059780|00785700 GmicrocodeZ -6858:000000ab|8005978c|00785a50 GmicrofilmZ -6864:000000ac|80059798|00785da0 GmoneyZ -6870:000000ad|800597a0|007860f0 Gmp5kZ -687c:000000ae|800597a8|00786cd0 Gmp5ksilZ -6888:000000af|800597b4|007879d0 GpitongunZ -6894:000000b0|800597c0|00787d20 GplansZ -68a0:000000b1|800597c8|00787ef0 GplastiqueZ -68ac:000000b2|800597d4|00788240 GpolarizedglassesZ -68b8:000000b3|800597e8|007887a0 GproximitymineZ -68c4:000000b4|800597f8|00788f90 GremotemineZ -68d0:000000b5|80059808|00789950 GrocketlaunchZ -68dc:000000b6|80059818|0078ab70 GrugerZ -68e8:000000b7|80059820|0078c900 GsafecrackercaseZ -68f4:000000b8|80059834|0078d090 GshotgunZ -6900:000000b9|80059840|0078df70 GsilverwppkZ -690c:000000ba|80059850|0078f8d0 GskorpionZ -6918:000000bb|8005985c|00790ad0 GsniperrifleZ -6924:000000bc|8005986c|00791b40 GspecterZ -6930:000000bd|80059878|007927c0 GspooltapeZ -693c:000000be|80059884|00792b10 GspyfileZ -6948:000000bf|80059890|00792e60 GstafflistZ -6954:000000c0|8005989c|00793000 GtaserZ -6960:000000c1|800598a4|00794e60 GthrowknifeZ -696c:000000c2|800598b4|00796950 GtimedmineZ -6978:000000c3|800598c0|00797410 GtriggerZ -6984:000000c4|800598cc|0079a810 Gtt33Z -6990:000000c5|800598d4|0079c330 GuziZ -699c:000000c6|800598dc|0079cc40 GvideotapeZ -69a8:000000c7|800598e8|0079ce50 GwatchcommunicatorZ -69b4:000000c8|800598fc|0079e2b0 GwatchgeigercounterZ -69c0:000000c9|80059914|0079f710 GwatchidentifierZ -69cc:000000ca|80059928|007a0b70 GwatchlaserZ -69d8:000000cb|80059938|007a3f70 GwatchmagnetattractZ -69e4:000000cc|80059950|007a53c0 GwatchmagnetrepelZ -69f0:000000cd|80059964|007a6820 GweaponcaseZ -69fc:000000ce|80059974|007a6fb0 GwppkZ -6a08:000000cf|8005997c|007a8c40 GwppksilZ -6a14:000000d0|80059988|007aa980 GwristdartZ [woodgrain grenade placeholder] - - -object models -8004*number *word *ROM addy *word value @ pointer -6a20:000000d1|80059994|007aacd0 PICBMZ -6a2c:000000d2|8005999c|007ad250 PICBM_noseZ -6a38:000000d3|800599a8|007ada00 Pak47magZ -6a44:000000d4|800599b4|007adbe0 Palarm1Z -6a50:000000d5|800599c0|007add40 Palarm2Z -6a5c:000000d6|800599cc|007adee0 Pammo_crate1Z -6a68:000000d7|800599dc|007ae120 Pammo_crate2Z -6a74:000000d8|800599ec|007ae360 Pammo_crate3Z -6a80:000000d9|800599fc|007ae5b0 Pammo_crate4Z -6a8c:000000da|80059a0c|007ae820 Pammo_crate5Z -6a98:000000db|80059a1c|007aeae0 PapcZ -6aa4:000000dc|80059a24|007b0740 Parchsecdoor1Z -6ab0:000000dd|80059a34|007b0920 Parchsecdoor2Z -6abc:000000de|80059a44|007b0af0 ParticZ -6ac8:000000df|80059a4c|007b18f0 ParctictrailerZ -6ad4:000000e0|80059a5c|007b2200 PbarricadeZ -6ae0:000000e1|80059a68|007b2440 Pbin1Z -6aec:000000e2|8005a970|007b2790 Pblotter1Z -6af8:000000e3|80059a7c|007b2870 PbodyarmourZ -6b04:000000e4|80059a8c|007b2d10 PbodyarmourvestZ -6b10:000000e5|80059aa0|007b3130 PbollardZ -6b1c:000000e6|80059aac|007b3330 PbombZ -6b28:000000e7|80059ab4|007b34a0 Pbook1Z -6b34:000000e8|80059abc|007b3630 Pbookshelf1Z -6b40:000000e9|80059acc|007b3d20 Pborg_crateZ -6b4c:000000ea|80059adc|007b3e90 PboxcartridgesZ -6b58:000000eb|80059aec|007b4090 Pboxes2x4Z -6b64:000000ec|80059af8|007b44c0 Pboxes3x4Z -6b70:000000ed|80059b04|007b4900 Pboxes4x4Z -6b7c:000000ee|80059b10|007b4f60 PbrakeunitZ -6b88:000000ef|80059b1c|007b52d0 Pbridge_console1aZ -6b94:000000f0|80059b30|007b5850 Pbridge_console1bZ -6ba0:000000f1|80059b44|007b5db0 Pbridge_console2aZ -6bac:000000f2|80059b58|007b6330 Pbridge_console2bZ -6bb8:000000f3|80059b6c|007b6820 Pbridge_console3aZ -6bc4:000000f4|80059b80|007b6d70 Pbridge_console3bZ -6bd0:000000f5|80059b94|007b7300 PcarbmwZ -6bdc:000000f6|80059ba0|007b7fe0 Pcard_box1Z -6be8:000000f7|80059bac|007b81e0 Pcard_box2Z -6bf4:000000f8|80059bb8|007b8420 Pcard_box3Z -6c00:000000f9|80059bc4|007b8610 Pcard_box4Z -6c0c:000000fa|80059bd4|007b87c0 Pcard_box5Z -6c18:000000fb|80059be4|007b89c0 Pcard_box6Z -6c24:000000fc|80059bf4|007b8bb0 PcarescortZ -6c30:000000fd|80059c00|007b97b0 PcargolfZ -6c3c:000000fe|80059c0c|007ba3e0 PcarweirdZ -6c48:000000ff|80059c18|007bb520 PcarzilZ -6c54:00000100|80059c24|007bcb20 PcctvZ -6c60:00000101|80059c2c|007bcea0 PchraudiotapeZ -6c6c:00000102|80059c3c|007bd400 PchrautoshotZ -6c78:00000103|80059c4c|007bd760 PchrblackboxZ -6c84:00000104|80059c5c|007bdfe0 PchrblueprintsZ -6c90:00000105|80059c6c|007be130 PchrbombcaseZ -6c9c:00000106|80059c7c|007be320 PchrbombdefuserZ -6ca8:00000107|80059c90|007bec00 PchrbriefcaseZ -6cb4:00000108|80059ca0|007bed90 PchrbugZ -6cc0:00000109|80059cac|007bfb40 PchrbugdetectorZ -6ccc:0000010a|80059cc0|007bfcb0 PbungeeZ -6cd8:0000010b|80059ccc|007bfe20 PchrcameraZ -6ce4:0000010c|80059cd8|007c04b0 PchrcircuitboardZ -6cf0:0000010d|80059cec|007c0650 PchrclipboardZ -6cfc:0000010e|80059cfc|007c08d0 PchrcreditcardZ -6d08:0000010f|80059d0c|007c0a40 PchrdarkglassesZ -6d14:00000110|80059d20|007c0bb0 PchrdatathiefZ -6d20:00000111|80059d30|007c0d50 PchrdattapeZ -6d2c:00000112|80059d40|007c0f40 PchrdoordecoderZ -6d38:00000113|80059d54|007c17a0 PchrdoorexploderZ -6d44:00000114|80059d68|007c1910 PchrdossierredZ -6d50:00000115|80059d78|007c1de0 PchrdynamiteZ -6d5c:00000116|80059d88|007c1f50 PchrexplosivepenZ -6d68:00000117|80059d9c|007c20c0 PchrextinguisherZ -6d74:00000118|80059db0|007c25c0 PchrfingergunZ -6d80:00000119|80059dc0|007c2730 PchrflarepistolZ -6d8c:0000011a|80059dd4|007c28a0 Pchrfnp90Z -6d98:0000011b|80059de0|007c2d00 PchrgaskeyringZ -6da4:0000011c|80059df0|007c3c10 PchrgoldbarZ -6db0:0000011d|80059e00|007c3d80 PchrgoldenZ -6dbc:0000011e|80059e0c|007c3ff0 PchrgoldeneyekeyZ -6dc8:0000011f|80059e20|007c4e90 PchrgoldwppkZ -6dd4:00000120|80059e30|007c5000 PchrgrenadeZ -6de0:00000121|80059e40|007c5370 PchrgrenadelaunchZ -6dec:00000122|80059e54|007c5700 PchrgrenaderoundZ -6df8:00000123|80059e68|007c5970 PchrheroinZ -6e04:00000124|80059e74|007c5ae0 PchrkalashZ -6e10:00000125|80059e80|007c5ed0 PchrkeyanalysercaseZ -6e1c:00000126|80059e98|007c60c0 PchrkeyboltZ -6e28:00000127|80059ea8|007c6f60 PchrkeyyaleZ -6e34:00000128|80059eb8|007c83c0 PchrknifeZ -6e40:00000129|80059ec4|007c85c0 PchrlaserZ -6e4c:0000012a|80059ed0|007c8980 PchrlectreZ -6e58:0000012b|80059edc|007c8af0 PchrlockexploderZ -6e64:0000012c|80059ef0|007c8c60 Pchrm16Z -6e70:0000012d|80059efc|007c9030 PchrmapZ -6e7c:0000012e|80059f08|007c9180 PchrmicrocameraZ -6e88:0000012f|80059f1c|007c9a70 PchrmicrocodeZ -6e94:00000130|80059f2c|007c9be0 PchrmicrofilmZ -6ea0:00000131|80059f3c|007c9d50 PchrmoneyZ -6eac:00000132|80059f48|007c9ec0 Pchrmp5kZ -6eb8:00000133|80059f54|007ca240 Pchrmp5ksilZ -6ec4:00000134|80059f64|007ca650 PchrpitongunZ -6ed0:00000135|80059f74|007ca7c0 PchrplansZ -6edc:00000136|80059f80|007caa50 PchrplastiqueZ -6ee8:00000137|80059f90|007caeb0 PchrpolarizedglassesZ -6ef4:00000138|80059fa8|007cb770 PchrproximitymineZ -6f00:00000139|80059fbc|007cbbd0 PchrremotemineZ -6f0c:0000013a|80059fcc|007cc030 PchrrocketZ -6f18:0000013b|80059fd8|007cc5e0 PchrrocketlaunchZ -6f24:0000013c|80059fec|007cc9c0 PchrrugerZ -6f30:0000013d|80059ff8|007ccda0 PchrsafecrackercaseZ -6f3c:0000013e|8005a010|007ccf90 PchrshotgunZ -6f48:0000013f|8005a020|007cd2e0 PchrsilverwppkZ -6f54:00000140|8005a030|007cd450 PchrskorpionZ -6f60:00000141|8005a040|007cd7d0 PchrsniperrifleZ -6f6c:00000142|8005a054|007cdb60 PchrspectreZ -6f78:00000143|8005a064|007cded0 PchrspooltapeZ -6f84:00000144|8005a074|007ce040 PchrspyfileZ -6f90:00000145|8005a084|007ce1b0 PchrstafflistZ -6f9c:00000146|8005a094|007ce3d0 PchrtesttubeZ -6fa8:00000147|8005a0a4|007ce590 PchrthrowknifeZ -6fb4:00000148|8005a0b4|007ce7b0 PchrtimedmineZ -6fc0:00000149|8005a0c4|007cece0 Pchrtt33Z -6fcc:0000014a|8005a0d0|007cef70 PchruziZ -6fd8:0000014b|8005a0dc|007cf240 PchrvideotapeZ -6fe4:0000014c|8005a0ec|007cf510 PchrweaponcaseZ -6ff0:0000014d|8005a0fc|007cf710 PchrwppkZ - -6ffc:0000014e|8005a108|007cf950 PchrwppksilZ -7008:0000014f|8005a118|007cfc30 PchrwristdartZ -7014:00000150|8005a128|007cfda0 Pconsole1Z -7020:00000151|8005a134|007d0420 Pconsole2Z -702c:00000152|8005a140|007d0aa0 Pconsole3Z -7038:00000153|8005a14c|007d1130 Pconsole_sev2aZ -7044:00000154|8005a15c|007d1550 Pconsole_sev2bZ -7050:00000155|8005a16c|007d1a10 Pconsole_sev2cZ -705c:00000156|8005a17c|007d1e50 Pconsole_sev2dZ -7068:00000157|8005a18c|007d2280 Pconsole_sev_GEZ -7074:00000158|8005a1a0|007d26b0 Pconsole_sevGEbZ -7080:00000159|8005a1b4|007d2ae0 Pconsole_sevaZ -708c:0000015a|8005a1c4|007d2f60 Pconsole_sevbZ -7098:0000015b|8005a1d4|007d33d0 Pconsole_sevcZ -70a4:0000015c|8005a1e4|007d3800 Pconsole_sevdZ -70b0:0000015d|8005a1f4|007d3c30 Pcryptdoor1aZ -70bc:0000015e|8005a204|007d3dc0 Pcryptdoor1bZ -70c8:0000015f|8005a214|007d3f50 Pcryptdoor2aZ -70d4:00000160|8005a224|007d40e0 Pcryptdoor2bZ -70e0:00000161|8005a234|007d4270 Pcryptdoor3Z -70ec:00000162|8005a244|007d44e0 Pcryptdoor4Z -70f8:00000163|8005a254|007d4660 PdamchaindoorZ -7104:00000164|8005a264|007d48e0 PdamgatedoorZ -7110:00000165|8005a274|007d4b00 PdamtundoorZ -711c:00000166|8005a284|007d4e70 Pdepot_door_steelZ -7128:00000167|8005a298|007d5010 Pdepot_gate_entryZ -7134:00000168|8005a2ac|007d5250 Pdesk1Z -7140:00000169|8005a2b4|007d53d0 Pdesk2Z -714c:0000016a|8005a2bc|007d5550 P desk_arecibo1Z - -7158:0000016b|8005a2cc|007d5790 Pdesk_lamp2Z -7164:0000016c|8005a2dc|007d5a90 Pdest_engineZ -7170:0000016d|8005a2ec|007d7380 Pdest_exocetZ -717c:0000016e|8005a2fc|007d79e0 Pdest_gunZ -7188:0000016f|8005a308|007d8050 Pdest_harpoonZ -7194:00000170|8005a318|007d88f0 Pdest_seawolfZ -71a0:00000171|8005a328|007d98a0 Pdisc_readerZ -71ac:00000172|8005a338|007d9a60 Pdisk_drive1Z -71b8:00000173|8005a348|007d9bf0 Pdoor_azt_chairZ -71c4:00000174|8005a35c|007d9d70 Pdoor_azt_deskZ -71d0:00000175|8005a36c|007da1b0 Pdoor_azt_desk_topZ -71dc:00000176|8005a380|007da540 Pdoor_aztecZ -71e8:00000177|8005a390|007da770 Pdoor_dest1Z -71f4:00000178|8005a3a0|007daa70 Pdoor_dest2Z -7200:00000179|8005a3b0|007dae30 Pdoor_eyelidZ -720c:0000017a|8005a3c0|007db390 Pdoor_irisZ -7218:0000017b|8005a3cc|007dbde0 Pdoor_mfZ -7224:0000017c|8005a3d8|007dc0d0 Pdoor_roller1Z -7230:0000017d|8005a3e8|007dc440 Pdoor_roller2Z -723c:0000017e|8005a3f8|007dc680 Pdoor_roller3Z -7248:0000017f|8005a408|007dc8c0 Pdoor_roller4Z -7254:00000180|8005a418|007dcb20 Pdoor_rollertrainZ -7260:00000181|8005a42c|007dcc50 Pdoor_st_arec1Z -726c:00000182|8005a43c|007dceb0 Pdoor_st_arec2Z -7278:00000183|8005a44c|007dd190 PwinZ -7284:00000184|8005a458|007dd330 PdoorconsoleZ -7290:00000185|8005a468|007dd7a0 PdoorpanelZ -729c:00000186|8005a474|007ddb10 Pdoorprison1Z -72a8:00000187|8005a484|007ddc60 PdoorstatgateZ -72b4:00000188|8005a494|007dde60 PexplosionbitZ -72c0:00000189|8005a4a4|007ddf80 Pfiling_cabinet1Z -72cc:0000018a|8005a4b8|007de100 PflagZ -72d8:0000018b|8005a4c0|007de230 PfloppyZ -72e4:0000018c|8005a4cc|007de550 Pfnp90magZ -72f0:0000018d|8005a4d8|007de6f0 Pgas_plant_met1_do1Z -72fc:0000018e|8005a4f0|007dea70 Pgas_plant_sw2_do1Z -7308:0000018f|8005a504|007dec50 Pgas_plant_sw3_do1Z -7314:00000190|8005a518|007dee50 Pgas_plant_sw4_do1Z -7320:00000191|8005a52c|007defb0 Pgas_plant_sw_do1Z -732c:00000192|8005a540|007df240 Pgas_plant_wc_cub1Z -7338:00000193|8005a554|007df450 PgasbarrelZ -7344:00000194|8005a560|007df660 PgasbarrelsZ -7350:00000195|8005a570|007dfba0 Pgas_plant_clear_doorZ -735c:00000196|8005a588|007e0100 PgastankZ -7368:00000197|8005a594|007e06b0 Pglassware1Z -7374:00000198|8005a5a4|007e0810 Pglassware2Z -7380:00000199|8005a5b4|007e0aa0 Pglassware3Z -738c:0000019a|8005a5c4|007e0cb0 Pglassware4Z -7398:0000019b|8005a5d4|007e1230 PgoldeneyelogoZ -73a4:0000019c|8005a5e4|007e20e0 PgoldenshellsZ -73b0:0000019d|8005a5f4|007e22e0 PgroundgunZ -73bc:0000019e|8005A600|007e2ab0 Pgun_runway1Z -73c8:0000019f|8005A610|007e31f0 PhatberetZ -73d4:000001a0|8005A61c|007e3490 PhatberetblueZ -73e0:000001a1|8005A62c|007e3760 PhatberetredZ -73ec:000001a2|8005A63c|007e3a40 PhatchboltZ -73f8:000001a3|8005A648|007e3b10 PhatchdoorZ -7404:000001a4|8005A654|007e3d30 PhatchsevxZ -7410:000001a5|8005A660|007e3ea0 PhatfurryZ -741c:000001a6|8005A66c|007e40d0 PhatfurryblackZ -7428:000001a7|8005A67c|007e42f0 PhatfurrybrownZ -7434:000001a8|8005A68c|007e4500 PhathelmetZ -7440:000001a9|8005A698|007e4730 PhathelmetgreyZ -744c:000001aa|8005A6a8|007e4960 PhatmoonZ -7458:000001ab|8005A6b4|007e4d40 PhatpeakedZ -7464:000001ac|8005A6c0|007e5050 PhattbirdZ -7470:000001ad|8005A6cc|007e52a0 PhattbirdbrownZ -747c:000001ae|8005A6dc|007e5510 PhelicopterZ -7488:000001af|8005A6ec|007e9730 PhindZ -7494:000001b0|8005A6f4|007eaea0 PjeepZ -74a0:000001b1|8005A7fc|007ec000 Pjerry_can1Z -74ac:000001b2|8005A70c|007ec260 Pjungle3_treeZ -74b8:000001b3|8005A71c|007ec9e0 Pjungle5_treeZ -74c4:000001b4|8005A72c|007ecf10 Pkey_holderZ -74d0:000001b5|8005A73c|007ed260 Pkeyboard1Z -74dc:000001b6|8005A748|007ed3d0 Pkit_units1Z -74e8:000001b7|8005A758|007ed670 PlabbenchZ -74f4:000001b8|8005A764|007eda40 PlandmineZ -7500:000001b9|8005A770|007edcb0 PlegalpageZ -750c:000001ba|8005A77c|007eec70 Pletter_tray1Z -7518:000001bb|8005A78c|007eedd0 Plocker3Z -7524:000001bc|8005A798|007eef60 Plocker4Z -7530:000001bd|8005A7a4|007ef0f0 PPm16magZ -753c:000001be|8005A7b0|007ef230 PmagnumshellsZ -7548:000001bf|8005A7c0|007ef430 Pmainframe1Z -7554:000001c0|8005A7d0|007ef730 Pmainframe2Z -7560:000001c1|8005A7e0|007efa00 Pmetal_chair1Z -756c:000001c2|8005A7f0|007efd40 Pmetal_crate1Z -7578:000001c3|8005A800|007eff00 Pmetal_crate2Z -7584:000001c4|8005A810|007f00c0 Pmetal_crate3Z -7590:000001c5|8005A820|007f0280 Pmetal_crate4Z -759c:000001c6|8005A830|007f0440 PmilcopterZ -75a8:000001c7|8005A83c|007f1d20 PmiltruckZ -75b4:000001c8|8005A848|007f4020 Pmissile_rack2Z -75c0:000001c9|8005A858|007f4a30 Pmissile_rackZ -75cc:000001ca|8005A868|007f4e10 PmodemboxZ -75d8:000001cb|8005A874|007f5150 PmotorbikeZ -75e4:000001cc|8005A880|007f6010 Pmp5kmagZ -75f0:000001cd|8005A88c|007f6160 PnintendologoZ -75fc:000001ce|8005A89c|007f8c40 Poil_drum1Z -7608:000001cf|8005A8a8|007f8eb0 Poil_drum2Z -7614:000001d0|8005A8b4|007f91a0 Poil_drum3Z -7620:000001d1|8005A8c0|007f9490 Poil_drum5Z -762c:000001d2|8005A8cc|007f9780 Poil_drum6Z -7638:000001d3|8005A8d8|007f9a90 Poil_drum7Z -7644:000001d4|8005A8e4|007f9d90 PpadlockZ -7650:000001d5|8005A8f0|007fa7e0 PpalmZ -765c:000001d6|8005A8f8|007fac30 PpalmtreeZ -7668:000001d7|8005A904|007fb100 Pphone1Z -7674:000001d8|8005A910|007fb240 PplaneZ -7680:000001d9|8005A918|007fd820 Pplant11Z -768c:000001da|8005A924|007fdbe0 Pplant1Z -7698:000001db|8005A930|007fdf70 Pplant2Z -76a4:000001dc|8005A93c|007fe2d0 Pplant2bZ -76b0:000001dd|8005A948|007fe6e0 Pplant3Z -76bc:000001de|8005A954|007feb30 Pradio_unit1Z -76c8:000001df|8005A964|007fece0 Pradio_unit2Z -76d4:000001e0|8005A974|007feea0 Pradio_unit3Z -76e0:000001e1|8005A984|007ff060 Pradio_unit4Z -76ec:000001e2|8005A994|007ff220 ProofgunZ -76f8:000001e3|8005A9a0|007ff880 PsafeZ -7704:000001e4|8005A9a8|007ffbd0 PsafedoorZ -7710:000001e5|8005A9b4|008000c0 Psat1_reflectZ -771c:000001e6|8005A9c4|00801630 PsatboxZ -7728:000001e7|8005A9d0|00801750 PsatdishZ -7734:000001e8|8005A9dc|00801bb0 Psec_panelZ -7740:000001e9|8005A9e8|00801d50 Psev_door3Z -774c:000001ea|8005A9f4|00801fe0 Psev_door3_windZ -7758:000001e0|8005Aa08|00802370 Psev_door4_windZ -7764:000001ec|8005Aa1c|00802750 Psev_doorZ -7770:000001ed|8005Aa28|00802aa0 Psev_door_v1Z -777c:000001ee|8005Aa38|00802dd0 Psev_trislideZ -7788:000001ef|8005Aa48|00803180 PsevdishZ -7794:000001f0|8005Aa54|008040a0 PsevdoormetslideZ -77a0:000001f1|8005Aa68|00804380 PsevdoornowindZ -77ac:000001f2|8005Aa78|008044f0 PsevdoorwindZ -77b8:000001f3|8005Aa88|00804920 PsevdoorwoodZ -77c4:000001f4|8005Aa98|00804cd0 PshuttleZ -77d0:000001f5|8005Aaa4|008076d0 Pshuttle_door_1Z -77dc:000001f6|8005Aab8|00808300 Pshuttle_door_rZ -77e8:000001f7|8005Aacc|00809000 PsilencerZ -77f4:000001f8|8005Aad8|008091a0 Psilo_lit_doorZ -7800:000001f9|8005Aaec|008093e0 PsilotopdoorZ -780c:000001fa|8005Aafc|008096d0 PskorpionmagZ -7818:000001fb|8005Ab0c|00809830 PspectremagZ -7824:000001fc|8005Ab1c|008099a0 PspeedboatZ -7830:000001fd|8005Ab28|0080a6e0 Pst_pete_room_1Z -783c:000001fe|8005Ab3c|0080d820 Pst_pete_room_2Z -7848:000001ff|8005Ab50|00810a00 Pst_pete_room_3Z -7854:00000200|8005Ab64|00813940 Pst_pete_room_5Z -7860:00000201|8005Ab78|00816ed0 Pst_pete_room_6Z -786c:00000202|8005Ab8c|0081a2e0 Psteel_door1Z -7878:00000203|8005Ab9c|0081a550 Psteel_door2Z -7884:00000204|8005Abac|0081a800 Psteel_door2bZ -7890:00000205|8005Abbc|0081aad0 Psteel_door3Z -789c:00000206|8005Abcc|0081ada0 Pstool1Z -78a8:00000207|8005Abd8|0081b060 Pswipe_card2Z -78b4:00000208|8005Abe8|0081b1f0 Pswivel_chair1Z -78c0:00000209|8005Abf8|0081b480 PtankZ -78cc:0000020a|8005Ac00|0081cf20 PtigerZ -78d8:0000020b|8005Ac08|0081edb0 Ptorpedo_rackZ -78e4:0000020c|8005Ac18|0081f630 Ptrain_door2Z -78f0:0000020d|8005Ac28|0081fa00 Ptrain_door3Z -78fc:0000020e|8005Ac38|0081fe20 Ptrain_doorZ -7908:0000020f|8005Ac48|00820090 PtrainextdoorZ -7914:00000210|8005Ac58|008203d0 Ptt33magZ -7920:00000211|8005Ac64|00820510 Ptuning_console1Z -792c:00000212|8005Ac78|00820a30 Ptv1Z -7938:00000213|8005Ac80|00820c00 Ptv4screenZ -7944:00000214|8005Ac8c|00820da0 Ptv_holderZ -7950:00000215|8005Ac98|00821470 PtvscreenZ -795c:00000216|8005Aca4|00821540 PuzimagZ -7968:00000217|8005Acb0|00821680 PvertdoorZ -7974:00000218|8005Acbc|00821c90 PwalletbondZ -7980:00000219|8005Accc|00823240 PwindowZ -798c:0000021a|8005Acd8|00823330 Pwindow_cor11Z -7998:0000021b|8005Ace8|00823410 Pwindow_lib_lg1Z -79a4:0000021c|8005Acfc|008234f0 Pwindow_lib_sm1Z -79b0:0000021d|8005Ad10|008235e0 Pwood_lg_crate1Z -79bc:0000021e|8005Ad24|00823860 Pwood_lg_crate2Z -79c8:0000021f|8005Ad38|00823a80 Pwood_md_crate3Z -79d4:00000220|8005Ad4c|00823ca0 Pwood_sm_crate4Z -79e0:00000221|8005Ad60|00823f00 Pwood_sm_crate5Z -79ec:00000222|8005Ad74|00824160 Pwood_sm_crate6Z -79f8:00000223|8005Ad88|00824380 Pwooden_table1Z -7a04:00000224|8005Ad98|008246f0 PwppkmagZ - -clipping -8004*number *word *ROM addy *word value @ pointer -7a10:00000225|8005ada4|00824830 Tbg_ame_all_p_stanZ library -7a1c:00000226|8005adb8|00826160 Tbg_arch_all_p_stanZ archives -7a28:00000227|8005add0|0083be50 Tbg_arec_all_p_stanZ control -7a34:00000228|8005ade8|008341a0 Tbg_ark_all_p_stanZ facility -7a40:00000229|8005adfc|0083d160 Tbg_ash_all_p_stanZ stack (unused! - uses ame) -7a4c:0000022a|8005ae10|0083ea90 Tbg_azt_all_p_stanZ aztec -7a58:0000022b|8005ae24|00844010 Tbg_cat_all_p_stanZ citadel -7a64:0000022c|8005ae38|00846740 Tbg_cave_all_p_stanZ caverns -7a70:0000022d|8005ae50|0084b630 Tbg_crad_all_p_stanZ cradle -7a7c:0000022e|8005ae68|0084df40 Tbg_cryp_all_p_stanZ egypt -7a88:0000022f|8005ae80|00850fb0 Tbg_dam_all_p_stanZ dam -7a94:00000230|8005ae94|0085b390 Tbg_depo_all_p_stanZ depot -7aa0:00000231|8005aeac|008622d0 Tbg_dest_all_p_stanZ frigate -7aac:00000232|8005aec4|00868bc0 Tbg_dish_all_p_stanZ temple -7ab8:00000233|8005aedc|008696d0 Tbg_ear_all_p_stanZ (basement clipping) -7ac4:00000234|8005aef0|008696d0 Tbg_eld_all_p_stanZ (basement clipping) -7ad0:00000235|8005af04|008696d0 Tbg_imp_all_p_stanZ basement (unused! - uses ame) -7adc:00000236|8005af18|0086b000 Tbg_jun_all_p_stanZ jungle -7ae8:00000237|8005af2c|00872150 Tbg_lee_all_p_stanZ (cuba clipping) -7af4:00000238|8005af40|00872150 Tbg_len_all_p_stanZ cuba -7b00:00000239|8005af54|00872c10 Tbg_lip_all_p_stanZ (caves clipping) -7b0c:0000023a|8005af68|00872c10 Tbg_lue_all_p_stanZ (caves clipping) -7b18:0000023b|8005af70|00872c10 Tbg_oat_all_p_stanZ caves -7b24:0000023c|8005af90|00874510 Tbg_pam_all_p_stanZ (streets clipping) -7b30:0000023d|8005afa4|00874510 Tbg_pete_all_p_stanZ streets -7b3c:0000023e|8005afbc|00878ba0 Tbg_ref_all_p_stanZ complex -7b48:0000023f|8005afd0|0087a970 Tbg_rit_all_p_stanZ (runway clipping) -7b54:00000240|8005afe4|0087a970 Tbg_run_all_p_stanZ runway -7b60:00000241|8005aff8|0087c3f0 Tbg_sev_all_p_stanZ bunker 1 -7b6c:00000242|8005b00c|008801c0 Tbg_sevb_all_p_stanZ bunker 2 -7b78:00000243|8005b024|00885100 Tbg_sevx_all_p_stanZ surfaces -7b84:00000244|8005b03c|0088e430 Tbg_silo_all_p_stanZ silo -7b90:00000245|8005b054|008974d0 Tbg_stat_all_p_stanZ statue -7b9c:00000246|8005b06c|0089c390 Tbg_tra_all_p_stanZ train -7ba8:00000247|8005b080|0089e760 Tbg_wax_all_p_stanZ (UbriefarchZ load) - -mission briefings -8004*number *word *ROM addy *word value @ pointer -7bb4:00000248|8005b094|0089e760 UbriefarchZ -7bc0:00000249|8005b0a0|0089e780 UbriefarkZ -7bcc:0000024a|8005b0ac|0089e7a0 UbriefaztZ -7bd8:0000024b|8005b0b8|0089e7c0 UbriefcaveZ -7be4:0000024c|8005b0c4|0089e7e0 UbriefcontrolZ -7bf0:0000024d|8005b0d4|0089e800 UbriefcradZ -7bfc:0000024e|8005b0e0|0089e820 UbriefcrypZ -7c08:0000024f|8005b0ec|0089e840 UbriefdamZ -7c14:00000250|8005b0f8|0089e860 UbriefdepoZ -7c20:00000251|8005b104|0089e880 UbriefdestZ -7c2c:00000252|8005b110|0089e8a0 UbriefjunZ -7c38:00000253|8005b11c|0089e8c0 UbriefpeteZ -7c44:00000254|8005b128|0089e8e0 UbriefrunZ -7c50:00000255|8005b134|0089e900 UbriefsevbZ -7c5c:00000256|8005b140|0089e920 UbriefsevbunkerZ -7c68:00000257|8005b154|0089e940 UbriefsevxZ -7c74:00000258|8005b160|0089e960 UbriefsevxbZ -7c80:00000259|8005b170|0089e980 UbriefsiloZ -7c8c:0000025a|8005b17c|0089e9a0 UbriefstatueZ -7c98:0000025b|8005b18c|0089e9c0 UbrieftraZ - -multi props 26f14 -8004*number *word *ROM addy *word value @ pointer -7ca4:0000025c|8005b198|0089e9e0 Ump_setupameZ library -7cb0:0000025d|8005b1a8|0089f100 Ump_setuparchZ archives -7cbc:0000025e|8005b1b8|008a1ea0 Ump_setuparkZ facility -7cc8:0000025f|8005b1c8|008a3be0 Ump_setupashZ stack -7cd4:00000260|8005b1d8|008a42d0 Ump_setupcaveZ caverns -7ce0:00000261|8005b1e8|008a6830 Ump_setupcradZ cradle -7cec:00000262|8005b1f8|008a7190 Ump_setupcrypZ egyptian -7cf8:00000263|8005b208|008a7ef0 Ump_setupdishZ temple -7d04:00000264|8005b218|008a82e0 Ump_setupimpZ basement -7d10:00000265|8005b228|008a8920 Ump_setupoatZ caves -7d1c:00000266|8005b238|008a8c70 Ump_setuprefZ complex -7d28:00000267|8005b248|008a9080 Ump_setupsevbZ bunker2 -7d34:00000268|8005b258|008aa390 Ump_setupstatueZ - -solo setup 26FB0 -8004*number *word *ROM addy *word value @ pointer -7d40:00000269|8005b26c|008ab210 UsetuparchZ -7d4c:0000026a|8005b278|008af820 UsetuparkZ -7d58:0000026b|8005b284|008b33b0 UsetupaztZ -7d64:0000026c|8005b290|008b5cb0 UsetupcaveZ -7d70:0000026d|8005b29c|008b9b10 UsetupcontrolZ -7d7c:0000026e|8005b2ac|008bd610 UsetupcradZ -7d88:0000026f|8005b2b8|008bf240 UsetupcrypZ -7d94:00000270|8005b2c4|008c10d0 UsetupdamZ -7da0:00000271|8005b2d0|008c53a0 UsetupdepoZ -7dac:00000272|8005b2dc|008c8330 UsetupdestZ -7db8:00000273|8005b2e8|008ca680 UsetupjunZ -7dc4:00000274|8005b2f4|008cdd80 UsetuplenZ -7dd0:00000275|8005b300|008ce350 UsetuppeteZ -7ddc:00000276|8005b30c|008d12d0 UsetuprunZ -7de8:00000277|8005b318|008d2b30 UsetupsevbZ -7df4:00000278|8005b324|008d5190 UsetupsevbunkerZ -7e00:00000279|8005b338|008d6bc0 UsetupsevxZ -7e0c:0000027a|8005b344|008daed0 UsetupsevxbZ -7e18:0000027b|8005b354|008defc0 UsetupsiloZ -7e24:0000027c|8005b360|008e1a10 UsetupstatueZ -7e30:0000027d|8005b370|008e41e0 UsetuptraZ - -in stage text -J - japanese (NTSC), E - english (NTSC), P - english (PAL) -8004*number *word *ROM addy *word value @ pointer -7e3c:0000027e|8005b37c|008e7410 LameE | 1172.6360|c00f.0000|0000.0000|0000.0000 -7e48:0000027f|8005b384|008e7420 LameJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -7e54:00000280|8005b38c|008e7430 LarchE | -7e60:00000281|8005b394|008e7a60 LarchJ | -7e6c:00000282|8005b39c|008e80c0 LarecE | -7e78:00000283|8005b3a4|008e8690 LarecJ | -7e84:00000284|8005b3ac|008e8c20 LarkE | -7e90:00000285|8005b3b4|008e92c0 LarkJ | -7e9c:00000286|8005b3bc|008e9970 LashE | 1172.6360|c00f.0000|0000.0000|0000.0000 -7ea8:00000287|8005b3c4|008e9980 LashJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -7eb4:00000288|8005b3cc|008e9990 LaztE | -7ec0:00000289|8005b3d4|008e9dd0 LaztJ | -7ecc:0000028a|8005b3dc|008ea280 LcatE | 1172.6360|c00f.0000|0000.0000|0000.0000 -7ed8:0000028b|8005b3e4|008ea290 LcatJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -7ee4:0000028c|8005b3ec|008ea2a0 LcaveE | -7ef0:0000028d|8005b3f4|008ea6a0 LcaveJ | -7efc:0000028e|8005b3fc|008eab00 LcradE | -7f08:0000028f|8005b404|008eafd0 LcradJ | -7f14:00000290|8005b40c|008eb480 LcrypE | -7f20:00000291|8005b414|008eb6d0 LcrypJ | -7f2c:00000292|8005b41c|008eb990 LdamE | -7f38:00000293|8005b424|008ebde0 LdamJ | -7f44:00000294|8005b42c|008ec250 LdepoE | -7f50:00000295|8005b434|008ec5c0 LdepoJ | -7f5c:00000296|8005b43c|008ec900 LdestE | -7f68:00000297|8005b444|008ecd90 LdestJ | -7f74:00000298|8005b44c|008ed1f0 LdishE | 1172.6360|c00f.0000|0000.0000|0000.0000 -7f80:00000299|8005b454|008ed200 LdishJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -7f8c:0000029a|8005b45c|008ed210 LearE | 1172.6360|c00f.0000|0000.0000|0000.0000 -7f98:0000029b|8005b464|008ed220 LearJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -7fa4:0000029c|8005b46c|008ed230 LeldE | 1172.6360|c00f.0000|0000.0000|0000.0000 -7fb0:0000029d|8005b474|008ed240 LeldJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -7fbc:0000029e|8005b47c|008ed250 LgunE | 98xx weapon inventory -7fc8:0000029f|8005b484|008ed970 LgunJ | -7fd4:000002a0|8005b48c|008ee0c0 LimpE | 1172.6360|c00f.0000|0000.0000|0000.0000 -7fe0:000002a1|8005b494|008ee0d0 LimpJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -7fec:000002a2|8005b49c|008ee0e0 LjunE | -7ff8:000002a3|8005b4a4|008ee600 LjunJ | -8004:000002a4|8005b4ac|008eeb40 LleeE | 1172.6360|c00f.0000|0000.0000|0000.0000 -8010:000002a5|8005b4b4|008eeb50 LleeJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -801c:000002a6|8005b4bc|008eeb60 LlenE | -8028:000002a7|8005b4c4|008ef1a0 LlenJ | -8034:000002a8|8005b4cc|008ef450 LlipE | 1172.6360|c00f.0000|0000.0000|0000.0000 -8040:000002a9|8005b4d4|008ef460 LlipJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -804c:000002aa|8005b4dc|008ef470 LlueE | 1172.6360|c00f.0000|0000.0000|0000.0000 -8058:000002ab|8005b4e4|008ef480 LlueJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -8064:000002ac|8005b4ec|008ef490 LmiscE | B0xx cheat text -8070:000002ad|8005b4f4|008ef730 LmiscJ | -807c:000002ae|8005b4fc|008efa10 LmpmenuE | A0xx awards and menu text -8088:000002af|8005b508|008efbb0 LmpmenuJ | -8094:000002b0|8005b514|008efd40 LmpweaponsE | A8xx multiplayer weapon select -80a0:000002b1|8005b520|008efe00 LmpweaponsJ | -80ac:000002b2|8005b52c|008efee0 LoatE | 1172.6360|c00f.0000|0000.0000|0000.0000 -80b8:000002b3|8005b534|008efef0 LoatJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -80c4:000002b4|8005b53c|008eff00 LoptionsE | ACxx solo menus -80d0:000002b5|8005b548|008f0130 LoptionsJ | -80dc:000002b6|8005b554|008f0380 LpamE | 1172.6360|c00f.0000|0000.0000|0000.0000 -80e8:000002b7|8005b55c|008f0390 LpamJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -80f4:000002b8|8005b564|008f03a0 LpeteE | -8100:000002b9|8005b56c|008f0820 LpeteJ | -810c:000002ba|8005b574|008f0c90 LpropobjE | A4xx in-game pickups -8118:000002bb|8005b580|008f0f30 LpropobjJ | -8124:000002bc|8005b58c|008f11f0 LrefE | 1172.6360|c00f.0000|0000.0000|0000.0000 -810c:000002bd|8005b594|008f1200 LrefJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -813c:000002be|8005b59c|008f1210 LritE | 1172.6360|c00f.0000|0000.0000|0000.0000 -8148:000002bf|8005b5a4|008f1220 LritJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -8154:000002c0|8005b5ac|008f1230 LrunE | -8160:000002c1|8005b5b4|008f14a0 LrunJ | -816c:000002c2|8005b5bc|008f1730 LsevE | -8178:000002c3|8005b5c4|008f1c90 LsevJ | -8184:000002c4|8005b5cc|008f21a0 LsevbE | -8190:000002c5|8005b5d4|008f28f0 LsevbJ | -819c:000002c6|8005b5dc|008f30e0 LsevxE | -81a8:000002c7|8005b5e4|008f3540 LsevxJ | -81b4:000002c8|8005b5ec|008f3900 LsevxbE | -81c0:000002c9|8005b5f4|008f3d90 LsevxbJ | -81cc:000002ca|8005b5fc|008f41e0 LshoE | 1172.6360|c00f.0000|0000.0000|0000.0000 -81d8:000002cb|8005b604|008f41f0 LshoJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -81e4:000002cc|8005b60c|008f4200 LsiloE | - -81f0:000002cd|8005b614|008f47b0 LsiloJ | -81fc:000002ce|8005b61c|008f4d90 LstatE | -8208:000002cf|8005b624|008f56b0 LstatJ | -8214:000002d0|8005b62c|008f5f20 LtitleE | 9Cxx general text bank -8220:000002d1|8005b634|008f69e0 LtitleJ | -822c:000002d2|8005b63c|008f7570 LtraE | -8238:000002d3|8005b644|008f79a0 LtraJ | -8244:000002d4|8005b64c|008f7dc0 LwaxE | 1172.6360|c00f.0000|0000.0000|0000.0000 -8250:000002d5|8005b654|008f7dd0 LwaxJ | 1172.6360|c00f.0000|0000.0000|0000.0000 -825c:000002d6|8005b65c|008f7de0 ob/ob_end.seg | 20202020202020202020202020200A - -list goes to zeroes, then: -82d4:000002d7|00000000|00000000 - ------------------------------------------------ -pointers to replicate L~J/L~E table - RAM -800484dc-8004863c -[target list] -8005 -b880|LameE |b887 b888|LameJ |b88f -b890|LarchE |b897 b898|LarchJ |b89f -b8a0|LarkE |b8a7 b8a8|LarkJ |b8af -b8b0|LashE |b8b7 b8b8|LashJ |b8bf -b8c0|LaztE |b8c7 b8c8|LaztJ |b8cf -b8d0|LcatE |b8d7 b8d8|LcatJ |b8df -b8e0|LcaveE |b8e7 b8e8|LcaveJ |b8ef -b8f0|LarecE |b8f7 b8f8|LarecJ |b8ff -b900|LcradE |b907 b908|LcradJ |b90f -b910|LcrypE |b917 b918|LcrypJ |b91f -b920|LdamE |b927 b928|LdamJ |b92f -b930|LdepoE |b937 b938|LdepoJ |b93f -b940|LdestE |b947 b948|LdestJ |b94f -b950|LdishE |b957 b958|LdishJ |b95f -b960|LearE |b967 b968|LearJ |b96f -b970|LeldE |b977 b978|LeldJ |b97f -b980|LimpE |b987 b988|LimpJ |b98f -b990|LjunE |b997 b998|LjunJ |b99f -b9a0|LleeE |b9a7 b9a8|LleeJ |b9af -b9b0|LlenE |b9b7 b9b8|LlenJ |b9bf -b9c0|LlipE |b9c7 b9c8|LlipJ |b9cf -b9d0|LlueE |b9d7 b9d8|LlueJ |b9df -b9e0|LoatE |b9e7 b9e8|LoatJ |b9ef -b9f0|LpamE |b9f7 b9f8|LpamJ |b9ff -ba00|LpeteE |ba07 ba08|LpeteJ |ba0f -ba10|LrefE |ba17 ba18|LrefJ |ba1f -ba20|LritE |ba27 ba28|LritJ |ba2f -ba30|LrunE |ba37 ba38|LrunJ |ba3f -ba40|LsevbE |ba47 ba48|LsevbJ |ba4f -ba50|LsevE |ba57 ba58|LsevJ |ba5f -ba60|LsevxE |ba67 ba68|LsevxJ |ba6f -ba70|LsevxbE |ba77 ba78|LsevxbJ |ba7f -ba80|LshoE |ba87 ba88|LshoJ |ba8f -ba90|LsiloE |ba97 ba98|LsiloJ |ba9f -baa0|LstatE |baa7 baa8|LstatJ |baaf -bab0|LtraE |bab7 bab8|LtraJ |babf -bac0|LwaxE |bac7 bac8|LwaxJ |bacf -bad0|LgunE |bad7 bad8|LgunJ |badf -bae0|LtitleE |bae7 bae8|LtitleJ |baef -baf0|LmpmenuE |bafb bafc|LmpmenuJ |bb07 -bb08|LpropobjE |bb13 bb14|LpropobjJ |bb1f -bb20|LmpweaponsE |bb2b bb2c|LmpweaponsJ |bb37 -bb38|LoptionsE |bb43 bb44|LoptionsJ |bb4f -bb50|LmiscE |bb57 bb58|LmiscJ |bb5f - ------------------------------------------------ -multiplayer weapon info -80048670-800490ec - -weapon menu -800490f0 - A8+ script value, then pointer to last sector - 14 total -80049163 - number of weapon sets for multi - ------------------------------------------------ -@8004826c:loaded thingy. This is the thing now loaded, or is loading or something like that. - -8004 -be80|HIT_DEFAULT |BE8B -BE8C|HIT_STONE |BE97 -BE98|HIT_WOOD |BEA3 -BEA4|HIT_METAL |BEAF -BEB0|HIT_GLASS |BEBB -BEBC|HIT_WATER |BEC7 -BEC8|HIT_SNOW |BED3 -BED4|HIT_DIRT |BEDF -BEE0|HIT_MUD |BEE7 -BEE8|HIT_TILE |BEF3 -BEF4|HIT_METALOBJ |BF03 -BF04|HIT_CHR |BF0B -BF0C|HIT_GLASS_XLU |BF1F -then 21 words of similar stuff -(references: 8004e8a0. part of a larger pointer block) -_______________________________________________ - it has an identifier 08 - 4-bit index, 09 - 8-bit, 0A i forget, -then # of colours, then palette, then 11722040 (20 x 40), then indexes compressed - -just check full image directory. better annotated than this was anyway. - -ROM padding BE6d10 to last line -BE7D90 end of rom padding... \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/multiplayers.rar b/notes/GE Documentation/GameShark - GE specific/multiplayers.rar deleted file mode 100644 index 49cc0a2..0000000 Binary files a/notes/GE Documentation/GameShark - GE specific/multiplayers.rar and /dev/null differ diff --git a/notes/GE Documentation/GameShark - GE specific/no BA-ammo post.txt b/notes/GE Documentation/GameShark - GE specific/no BA-ammo post.txt deleted file mode 100644 index 15a3d29..0000000 --- a/notes/GE Documentation/GameShark - GE specific/no BA-ammo post.txt +++ /dev/null @@ -1,68 +0,0 @@ -NTSC - North America only -Select the "Dr. No" cheat in your cheat folder to eliminate body armor in all stages. -"Dr. No (no BA multi)#8" .off -812AF254 4472 -812AF256 2E20 -812AF258 4E6F -812AF25A 0000 -80069651 0001 -8104EFBA 45C0 -D00696A1 0001 -8104EFBA 4AFC - -PAL - Europe -Select the "Dr. No" cheat in your cheat folder to eliminate body armour in all stages. -"Dr. No (no BA multi)#8" .off -8129F3C8 4472 -8129F3CA 2E20 -8129F3CC 4E6F -8129F3CE 0000 -80058591 0001 -81047402 454C -D00585E1 0001 -81047402 4A90 - -------------- -They've been tested now and do work on their respective regions. Let me explain how these work though. -First, this adds a cheat into the in-game "Cheat" menu called "Dr. No". When on, body armor/armour will not appear in either solo or multiplayer stages. When off, they still appear normally. - -Also, this is an ASM (assembly) hack. What that means is that emulators don't like them. Most emulators won't allow the thing to work unless you either reset after activating the codes or activate the code before turning on the game. Why? Most emulators cache opcodes to increase performance, but that also means you can't edit or add in a few of your own. If you've ever had problems getting this or the new scenarios to work, that's probably why. - ----------------------------- ----------------------------- no ammo boxes (solo/multi) ----------------------------- - -If you don't want to be able to turn the cheats off in play, use this: -NTSC 8104EFB6 4AFC -PAL 810473FE 4A90 - -The ones below add a cheat into the in-game cheat menu you can toggle. - -NTSC - North America only -Select the "Dr. No" cheat in your cheat folder to eliminate ammo boxes in all stages. -"Dr. No (no ammo boxes)#8" .off -812AF254 4472 -812AF256 2E20 -812AF258 4E6F -812AF25A 0000 -80069651 0001 -8104EFB6 4760 -D00696A1 0001 -8104EFB6 4AFC - -PAL - Europe -Select the "Dr. No" cheat in your cheat folder to eliminate ammo boxes in all stages. -"Dr. No (no ammo boxes)#8" .off -8129F3C8 4472 -8129F3CA 2E20 -8129F3CC 4E6F -8129F3CE 0000 -80058591 0001 -810473FE 46FC -D00585E1 0001 -810473FE 4A90 - -They've been tested now and do work on their respective regions. Let me explain how these work though. -First, this adds a cheat into the in-game "Cheat" menu called "Dr. No". When on, ammo boxes will not appear in either solo or multiplayer stages. When off, they still appear normally. - -Also, this is an ASM (assembly) hack. What that means is that emulators don't like them. Most emulators won't allow the thing to work unless you either reset after activating the codes or activate the code before turning on the game. Why? Most emulators cache opcodes to increase performance, but that also means you can't edit or add in a few of your own. If you've ever had problems getting this or the new scenarios to work, that's probably why. You know, you should probably just assume nothing I write up works on emulators... diff --git a/notes/GE Documentation/GameShark - GE specific/object lines to alt code.txt b/notes/GE Documentation/GameShark - GE specific/object lines to alt code.txt deleted file mode 100644 index 7c61be5..0000000 --- a/notes/GE Documentation/GameShark - GE specific/object lines to alt code.txt +++ /dev/null @@ -1,536 +0,0 @@ -Viper187 & Delta FORCE -VALUES -8003 8005 -75D0 5A60 - - 0000 double alarm -75F0 5A6C - - 0001 alarm -7610 5A78 - - 0002 white pyramid -7630 5A88 - - 0003 ammo box - brown -7650 5A98 - - 0004 ammo box - brown -7670 5AA8 - - 0005 ammo box - green -7690 5AB8 - - 0006 ammo box - green -76B0 5AC8 - - 0007 ammo box - green -76D0 5AD8 - - 0008 piece of Egyptian collumn -76F0 5AE0 - - 0009 desk blotter -7710 5AEC - - 000A red book -7730 5AF4 - - 000B full bookshelf -7750 5B04 - - 000C bridge console -7770 5B18 - - 000D bridge console -7790 5B2C - - 000E bridge console -77B0 5B40 - - 000F bridge console -77D0 5B54 - - 0010 bridge console -77F0 5B68 - - 0011 bridge console -7810 5B7C - - 0012 cardboard pistol ammo box -7830 5B88 - - 0013 cardboard pistol ammo box -7850 5B94 - - 0014 cardboard pistol ammo box -7870 5BA0 - - 0015 cardboard pistol ammo box -7890 5BB0 - - 0016 cardboard pistol ammo box -78B0 5BC0 - - 0017 cardboard pistol ammo box -78D0 5BD0 - - 0018 surveillance camera -78F0 5BD8 - - 0019 double screen console -7910 5BE4 - - 001A double screen console -7930 5BF0 - - 001B double screen console -7950 5BFC - - 001C console -7970 5C0C - - 001D console -7990 5C1C - - 001E console -79B0 5C2C - - 001F console -79D0 5C3C - - 0020 console -79F0 5C4C - - 0021 console -7A10 5C5C - - 0022 console -7A30 5C6C - - 0023 console -7A50 5C7C - - 0024 console -7A70 5C90 - - 0025 single screen consoles -7A90 5CA4 - - 0026 white table -7AB0 5CAC - - 0027 white table -7AD0 5CB4 - - 0028 Archives desk lamp -7AF0 5CC4 - - 0029 part of Aztec DAT box -7B10 5CD4 - - 002A other part of Aztec DAT box -7B30 5CE4 - - 002B two drawer white cabinet -7B50 5CF8 - - 002C jerry can -7B70 5D08 - - 002D computer keyboard -7B90 5D14 - - 002E 4 door & drawer bench -7BB0 5D24 - - 002F desk in-tray -7BD0 5D34 - - 0030 mainframe -7BF0 5D44 - - 0031 mainframe -7C10 5D54 - - 0032 chair -7C30 5D64 - - 0033 metal crate -7C50 5D74 - - 0034 metal crate -7C70 5D84 - - 0035 metal crate -7C90 5D94 - - 0036 ribbed steel box -7CB0 5DA4 - - 0037 model of Silo rocket -7CD0 5DB4 - - 0038 4 models in a row -7CF0 5DC4 - - 0039 oil drum -7D10 5DD0 - - 003A oil drum -7D30 5DDC - - 003B oil drum -7D50 5DE8 - - 003C oil drum -7D70 5DF4 - - 003D oil drum -7D90 5E00 - - 003E oil drum -7DB0 5E0C - - 003F padlock -7DD0 5E18 - - 0040 phone -7DF0 5E24 - - 0041 radio -7E10 5E34 - - 0042 radio -7E30 5E44 - - 0043 radio -7E50 5E54 - - 0044 radio -7E70 5E64 - - 0045 Silo goldeneye sattelite -7E90 5E74 - - 0046 Antenna dish from Dam -7EB0 5E80 - - 0047 small tape recorder -7ED0 5E8C - - 0048 wooden stool -7EF0 5E98 - - 0049 swivel chair -7F10 5EA8 - - 004A rack of 3 blue rockets -7F30 5EB8 - - 004B small television or monitor -7F50 5EC0 - - 004C hanging monitor rack -7F70 5ECC - - 004D wall monitor screen -7F90 5ED8 - - 004E wall monitor screen -7FB0 5EE4 - - 004F wooden crate -7FD0 5EF8 - - 0050 wooden crate -7FF0 5F0C - - 0051 wooden crate -8010 5F20 - - 0052 wooden crate -8030 5F34 - - 0053 wooden crate -8050 5F48 - - 0054 wooden crate -8070 5F5C - - 0055 Archives PP7 wooden table -8090 5F6C - - 0056 Floppy disc -80B0 5F7C - - 0057 blue & gold printed circuit cube -80D0 5F8C - - 0058 metal crate stack, 4x4 -80F0 5F98 - - 0059 metal crate stack, 4x3 -8110 5FA4 - - 005A metal crate stack, 4x2 -8130 5FB0 - - 005B red button on vertical slab -8150 5FBC - - 005C small rocket -8170 5FC8 - - 005D Silo rocket, full size -8190 5FD0 - - 005E double console on castors -81B0 5FE4 - - 005F counter or bar -81D0 5FF4 - - 0060 locker set -81F0 6000 - - 0061 locker set -8210 600C - - 0062 ceiling drone gun -8230 6018 - - 0063 Frigate square pack rocket launcher, pointing down. -8250 6028 - - 0064 Frigate square pack rocket launcher, pointing up. -8270 6038 - - 0065 Frigate gun turret -8290 6044 - - 0066 Frigate rocket rack -82B0 6054 - - 0067 Runway rocket launcher -82D0 6064 - - 0068 window glass -82F0 6070 - - 0069 window lattice frame -8310 6084 - - 006A half size window lattice -8330 6098 - - 006B smaller lattice -8350 60A8 - - 006C Jungle big tree -8370 60B8 - - 006D Jungle palm -8390 60C0 - - 006E Jungle palm resprouting after loss of fronds -83B0 60CC - - 006F Jungle low shrub -83D0 60D8 - - 0070 shrunken Facility laboratory bench -83F0 60E4 - - 0071 Facility, Runway white rubbish bin -8410 60F0 - - 0072 set of 4 white bins -8430 6100 - - 0073 body armour -8450 6110 - - 0074 body armour -8470 6124 - - 0075 shrunken Facility gas tank -8490 6130 - - 0076 a glass -84B0 6140 - - 0077 train floor plate securing strips -84D0 614C - - 0078 Train brake controller -84F0 6158 - - 0079 ammo clip -8510 6164 - - 007A ammo clip -8530 6170 - - 007B ammo clip -8550 617C - - 007C ammo clip -8570 618C - - 007D ammo clip -8590 619C - - 007E ammo clip -85B0 61A8 - - 007F ammo clip -85D0 61B4 - - 0080 fire extinguisher -85F0 61C8 - - 0081 small box of shotgun shells -8610 61D8 - - 0082 gun clip -8630 61E4 - - 0083 small box of golden bullets -8650 61F4 - - 0084 magnum shells -8670 6204 - - 0085 pp7 ammo -8690 6210 - - 0086 ammo clip -86B0 621C - - 0087 Grey door with warning strips on it -86D0 6228 - - 0088 Silo Door - Arrow Left -86F0 6234 - - 0089 Beta Door -8710 6248 - - 008A Silo Door- Arrow Left -8730 625C - - 008B Clear Glass Door -8750 626C - - 008C silo Door - Arrow Up -8770 627C - - 008D Silo doors Corragated,With warning strips -8790 628C - - 008E Rusty Old Door -87B0 629C - - 008F Door With rust on it-double cross brace -87D0 62AC - - 0090 Metalic Blue Elevator Door - Silo -87F0 62C0 - - 0091 A different rusty old door -8810 62D0 - - 0092 Striped Blue door -8830 62E0 - - 0093 Blue door (With holes in it) -8850 62F0 - - 0094 striped blue door -8870 6300 - - 0095 Part of Runway Shutters -8890 6310 - - 0096 Blue corrugated door w/ Red and white diagonal lines -88B0 6320 - - 0097 Same but reversed -88D0 6330 - - 0098 Frigate normal door -88F0 6340 - - 0099 Same but with Keep clear on it -8910 6350 - - 009A Grey Door With blue stripe -8930 6364 - - 009B The grey door in Facility -8950 6378 - - 009C facility door -8970 638C - - 009D Plain Wood door -8990 63A0 - - 009E Facility Brown door -89B0 63B8 - - 009F Facility Bathroom Door -89D0 63CC - - 00A0 Clear Glass Door - From Labs in Facility -89F0 63E4 - - 00A1 Brown Wooden Door - Train -8A10 63F4 - - 00A2 Brown door with glass in it -8A30 6404 - - 00A3 Brown door with glass in it (Unbreakable) -8A50 6414 - - 00A4 Caverns Eye Door -8A70 6424 - - 00A5 Caverns Iris Door -8A90 6430 - - 00A6 Door from Huts on Surface -8AB0 6440 - - 00A7 Surface green door with glass in it -8AD0 6450 - - 00A8 Plain green door -8AF0 6460 - - 00A9 bunker outer door, Cradle Door -8B10 6474 - - 00AA Stone door w/ prints on it -8B30 6484 - - 00AB Sand door w/ prints on it -8B50 6494 - - 00AC Darker Stone door w/ prints on it -8B70 64A4 - - 00AD Light brown wood door -8B90 64B4 - - 00AE Egyptian Door -8BB0 64C4 - - 00AF Sand/Brown door -8BD0 64D4 - - 00B0 Blast Door - Control -8BF0 64E0 - - 00B1 Train Floor Plate -8C10 64EC - - 00B2 A different Blast Door - Control -8C30 64FC - - 00B3 Dam Blast Room Door -8C50 650C - - 00B4 Dam Mesh Door -8C70 651C - - 00B5 Blown Up door -8C90 652C - - 00B6 Stack/Basement Gate -8CB0 653C - - 00B7 Statue Gates -8CD0 654C - - 00B8 Soviet KF7 -8CF0 6558 - - 00B9 Grenade Laucher -8D10 656C - - 00BA Throwing Knife -8D30 6578 - - 00BB Moonraker Laser -8D50 6584 - - 00BC AR33 Assault Rifle -8D70 6590 - - 00BD D5K -8D90 659C - - 00BE Cougar Magnum -8DB0 65A8 - - 00BF PP7 -8DD0 65B4 - - 00C0 Shotgun -8DF0 65C4 - - 00C1 Klobb -8E10 65D4 - - 00C2 Phantom -8E30 65E4 - - 00C3 ZMG -8E50 65F0 - - 00C4 Grenade -8E70 6600 - - 00C5 RCP-90 -8E90 660C - - 00C6 Briefcase -8EB0 661C - - 00C7 Remote Mine -8ED0 662C - - 00C8 Proximity Mine -8EF0 6640 - - 00C9 Timed Mine -8F10 6650 - - 00CA Rocket for rocket launcher -8F30 665C - - 00CB Grenade Launcher shot -8F50 6670 - - 00CC Silenced PP7 -8F70 6680 - - 00CD Dostovei DD44 -8F90 668C - - 00CE Silenced D5K -8FB0 669C - - 00CF Auto Shotgun -8FD0 66AC - - 00D0 Golden Gun -8FF0 66B8 - - 00D1 Hunting Knife -9010 66C8 - - 00D2 Sniper Rifle -9030 66DC - - 00D3 Rocket laucher -9050 66F0 - - 00D4 black hat -9070 66FC - - 00D5 black hat -9090 670C - - 00D6 black hat -90B0 671C - - 00D7 black hat -90D0 6728 - - 00D8 green hat -90F0 6738 - - 00D9 helmet -9110 6744 - - 00DA helmet -9130 6754 - - 00DB moonraker helmet -9150 6760 - - 00DC black hat -9170 676C - - 00DD blue special forces hat -9190 677C - - 00DE red special forces hat -91B0 678C - - 00DF officers hat -91D0 6798 - - 00E0 wrist dart -91F0 67A8 - - 00E1 explosive pen -9210 67BC - - 00E2 bombcase -9230 67CC - - 00E3 flare pistol -9250 67E0 - - 00E4 piton gun -9270 67F0 - - 00E5 finger gun -9290 6800 - - 00E6 silver pp7 -92B0 6810 - - 00E7 gold pp7 -92D0 6820 - - 00E8 dynamite -92F0 6830 - - 00E9 bungee -9310 683C - - 00EA door decoder -9330 6850 - - 00EB bomb defuser -9350 6864 - - 00EC bug detector -9370 6878 - - 00ED safe cracker case -9390 6890 - - 00EE camera -93B0 689C - - 00EF lock exploder -93D0 68B0 - - 00F0 door exploder -93F0 68C4 - - 00F1 briefcase laying down -9410 68DC - - 00F2 briefcase standing up -9430 68EC - - 00F3 yale key -9450 68FC - - 00F4 bolt key -9470 690C - - 00F5 covert modem/tracker bug -9490 6918 - - 00F6 small video camera with aerial -94B0 692C - - 00F7 floppy disc -94D0 6938 - - 00F8 goldeneye key -94F0 694C - - 00F9 polarized glasses -9510 6964 - - 00FA credit card -9530 6974 - - 00FB dark glasses -9550 6988 - - 00FC gas key ring -9570 6998 - - 00FD datathief -9590 69A8 - - 00FE safe without door -95B0 69B0 - - 00FF bomb -95D0 69B8 - - 0100 classified folder (game intro) -95F0 69C4 - - 0101 spy file -9610 69D4 - - 0102 start folder -9630 69E4 - - 0103 DAT -9650 69F8 - - 0104 bunker2 plans -9670 6A04 - - 0105 spool tape -9690 6A14 - - 0106 audio tape -96B0 6A24 - - 0107 microfilm -96D0 6A34 - - 0108 microcode -96F0 6A44 - - 0109 lectre -9710 6A50 - - 010A money -9730 6A5C - - 010B gold bar -9750 6A6C - - 010C heroin -9770 6A78 - - 010D red card -9790 6A88 - - 010E red dossier -97B0 6A98 - - 010F Bunker staff list -97D0 6AA8 - - 0110 credit card -97F0 6AB8 - - 0111 plastique -9810 6AC8 - - 0112 orange helicopter "black" box -9830 6AD8 - - 0113 cctv tape -9850 6AE8 - - 0114 Nintendo logo -9870 6AF8 - - 0115 Goldeneye logo -9890 6B08 - - 0116 Folder with royal crest in sky -98B0 6B18 - - 0117 Dam truck -98D0 6B24 - - 0118 jeep -98F0 6B2C - - 0119 red prime mover -9910 6B34 - - 011A brown helicopter -9930 6B44 - - 011B pirate helicopter -9950 6B4C - - 011C hound helicopter -9970 6B58 - - 011D soviet camouflage chopper -9990 6B60 - - 011E black trailer -99B0 6B70 - - 011F motorcycle -99D0 6B7C - - 0120 tank -99F0 6B84 - - 0121 amphibious vehicle -9A10 6B8C - - 0122 speedboat -9A30 6B98 - - 0123 Runway aeroplane -9A50 6BA0 - - 0124 wall mount drone gun -9A70 6BB0 - - 0125 safe door -9A90 6BBC - - 0126 Bunker2 key rack -9AB0 6BCC - - 0127 Bunker2 sliding glass door -9AD0 6BD8 - - 0128 Surface satellite dish, from top of building -9AF0 6BE4 - - 0129 arch sec door1 -9B10 6BF4 - - 012A arch sec door2 -9B30 6C04 - - 012B free standing drone gun -9B50 6C10 - - 012C Depot train door -9B70 6C20 - - 012D Streets small white car -9B90 6C2C - - 012E Streets small white car -9BB0 6C38 - - 012F Streets small white car -9BD0 6C44 - - 0130 Streets small red car -9BF0 6C50 - - 0131 Ouromov's car -9C10 6C5C - - 0132 shuttle vertical door with spikes -9C30 6C70 - - 0133 shuttle door r -9C50 6C84 - - 0134 red star on panel -9C70 6C98 - - 0135 shutters -9C90 6CAC - - 0136 beaker with blue -9CB0 6CBC - - 0137 beaker -9CD0 6CCC - - 0138 5 beaker set -9CF0 6CDC - - 0139 blue Streets mines -9D10 6CE8 - - 013A jungle bush -9D30 6CF4 - - 013B jungle bush -9D50 6D00 - - 013C jungle bush -9D70 6D0C - - 013D pointy jungle bush -9D90 6D18 - - 013E jungle tree -9DB0 6D28 - - 013F Goldeneye intro screen -9DD0 6D34 - - 0140 Streets roads and buildings -9DF0 6D48 - - 0141 Streets -9E10 6D5C - - 0142 Streets -9E30 6D70 - - 0143 Streets -9E50 6D84 - - 0144 Streets -9E70 6D98 - - 0145 roller door -9E90 6DAC - - 0146 Aztec vertical glass slider -9EB0 6DB8 - - 0147 Aztec first stone vert slider -9ED0 6DC8 - - 0148 Shuttle -9EF0 6DD4 - - 0149 girder within girder? -9F10 6DE4 - - 014A piece of concrete with two brass pipe chimneys -9F30 6DF8 - - 014B cube of rock -9F50 6E0C - - 014C mainframe with green bits on front -9F70 6E18 - - 014D flag tag flag -9F90 6E20 - - 014E road barrier -9FB0 6E2C - - 014F Dam screen for covert modem -9FD0 6E38 - - 0150 Dam sliding door activator -9FF0 6E44 - - 0151 standing console, no screen -A010 6E54 - - 0152 test tube -A030 6E64 - - 0153 solid stone cairn - -Most objects are 3DCCCCCD or 3F800000 in size, although most values work. - -HEADS (14H each) -8003 8005 WIDTH HEIGHT G HEAD -D410 6E80 * 3F800000 * 3F800000 /01 00 - 00 jungle commando -D430 6E8C * 3F800000 * 3F800000 /01 00 - 01 st. pete -D450 6E98 * 3F800000 * 3F800000 /01 00 - 02 rus. soldier -D470 6EA8 * 3F800000 * 3F800000 /01 00 - 03 rus. infantry -D490 6EB4 * 3F800000 * 3F800000 /01 00 - 04 janus sp. forces -D910 6EC0 * 3F800000 * 3F85B574 /01 00 - 05 Dinner Jacket -D4B0 6ECC * 3F800000 * 3F785F07 /01 01 - 06 boris -D4D0 6ED4 * 3F800000 * 3F89F55A /01 01 - 07 ouromov -D4F0 6EE0 * 3F800000 * 3F800000 /01 01 - 08 trevelian -D510 6EEC * 3F800000 * 3F800000 /01 01 - 09 006 -D530 6EFC * 3F800000 * 3F6EB1C4 /01 01 - 0a valentine -D550 6F08 * 3F800000 * 3F800000 /00 01 - 0b xenia -D570 6F10 * 3F800000 * 3F800000 /01 01 - 0c samedi -D590 6F20 * 3F800000 * 3F9978D5 /01 01 - 0d jaws -D5B0 6F28 * 3F800000 * 3F800000 /00 01 - 0e mayday -D5D0 6F34 * 3F800000 * 3F49AD43 /01 01 - 0f oddjob -D5F0 6F40 * 3F800000 * 3F775254 /00 01 - 10 natalya -D610 6F4C * 3F800000 * 3F800000 /01 00 - 11 janus marine -D630 6F5C * 3F800000 * 3F800000 /01 00 - 12 rus. commander -D650 6F68 * 3F800000 * 3F800000 /01 00 - 13 siberian -D670 6F78 * 3F800000 * 3F800000 /01 00 - 14 naval -D690 6F84 * 3F800000 * 3F800000 /01 01 - 15 siberian special forces -D890 6F90 * 3F800000 * 3F85288D /01 00 - 16 Bond Boiler Suit -D8B0 6FA0 * 3F800000 * 3F876C8B /01 00 - 17 Bond Blue Suit -D8D0 6FAC * 3F800000 * 3F859B3D /01 00 - 18 Bond Jungle Suit -D8F0 6FBC * 3F800000 * 3F859B3D /01 00 - 19 Bond Snowsuit -D6B0 6FC8 * 3F800000 * 3F62A305 /00 00 - 1a Skirt -D6D0 6FD4 * 3F800000 * 3F62A305 /00 00 - 1b Cleaning Staff -D6F0 6FE4 * 3F800000 * 3F6A7EFA /00 00 - 1c Scientist Female -D710 6FF0 * 3F800000 * 3F62A305 /00 00 - 1d civilian female -D730 6FFC * 3F800000 * 3F800000 /01 00 - 1e grey suit -D750 7008 * 3F800000 * 3F800000 /01 00 - 1f blue civilian -D770 7014 * 3F800000 * 3F800000 /01 00 - 20 red civilian -D790 7020 * 3F800000 * 3F800000 /01 00 - 21 blue vested civilian -D7B0 702C * 3F800000 * 3F800000 /01 00 - 22 purple civilian -D7D0 7038 * 3F800000 * 3F800000 /01 00 - 23 scientist male -D7F0 7044 * 3F800000 * 3F800000 /01 01 - 24 Helicopter Pilot -D810 704C * 3F800000 * 3F800000 /01 00 - 25 Siberian -D830 705C * 3F800000 * 3F800000 /01 00 - 26 arctic commando -D850 706C * 3F800000 * 3F800000 /01 00 - 27 Moonraker -D870 7078 * 3F800000 * 3F62A305 /00 00 - 28 Moonraker Fem. - -D930 7088/3bd8 * 3DCCCCCD * 3F800000 /01 00 - 29 left arm 800336F4 - -D950 7098 * 3F800000 * 3F800000 /01 01 - 2A Karl -D970 70A4 * 3F800000 * 3F800000 /01 01 - 2B Alan -D990 70B0 * 3F800000 * 3F800000 /01 01 - 2C Pete -D9B0 70BC * 3F800000 * 3F800000 /01 01 - 2D Martin -D9D0 70CC * 3F800000 * 3F800000 /01 01 - 2E Mark -D9F0 70D8 * 3F800000 * 3F800000 /01 01 - 2F Duncan -DA30 70E8 * 3F800000 * 3F800000 /01 01 - 30 Shaun -DA50 70F4 * 3F800000 * 3F800000 /01 01 - 31 Wayne -DA10 7104 * 3F800000 * 3F800000 /01 01 - 32 B -DA70 710C * 3F800000 * 3F800000 /01 01 - 33 Dave -DA90 7118 * 3F800000 * 3F800000 /01 01 - 34 Grant -DAB0 7124 * 3F800000 * 3F800000 /01 01 - 35 Des -DAD0 7130 * 3F800000 * 3F800000 /01 01 - 36 Chris -DAF0 713C * 3F800000 * 3F800000 /01 01 - 37 Lee -DB10 7148 * 3F800000 * 3F800000 /01 01 - 38 Neil -DB30 7154 * 3F800000 * 3F800000 /01 01 - 39 Jim -DB50 7160 * 3F800000 * 3F800000 /01 01 - 3A Robin -DB70 716C * 3F800000 * 3F800000 /01 01 - 3B Steve H. -DB90 717C * 3F800000 * 3F800000 /01 01 - 3C Terrorist -DBB0 718C * 3F800000 * 3F800000 /01 01 - 3D Biker -DBD0 7198 * 3F800000 * 3F800000 /01 01 - 3E Graham -DBF0 71A8 * 3F800000 * 3F800000 /01 01 - 3F Steve E. -DC10 71B8 * 3F800000 * 3F800000 /01 01 - 40 Joel -DC30 71C4 * 3F800000 * 3F800000 /01 01 - 41 Scott -DC50 71D0 * 3F800000 * 3F800000 /01 01 - 42 Joe -DC70 71DC * 3F800000 * 3F800000 /01 01 - 43 Ken -DC90 71E8 * 3F800000 * 3F800000 /01 01 - 44 Joe2 -DCB0 71F4 * 3F800000 * 3F800000 /01 01 - 45 Mishkin -DCD0 7204 * 3F800000 * 3F800000 /00 01 - 46 Sally -DCF0 7210 * 3F800000 * 3F800000 /00 01 - 47 Marion -DD10 7220 * 3F800000 * 3F800000 /00 01 - 48 Mandy -DD30 722C * 3F800000 * 3F800000 /00 01 - 49 Vivien -DD50 723C * 3F800000 * 3F800000 /01 01 - 4A Brosnan Boiler -DD70 7250 * 3F800000 * 3F800000 /01 01 - 4B Brosnan Suit -DD90 7264 * 3F800000 * 3F800000 /01 01 - 4C Brosnan Jungle -DDB0 7278 * 3F800000 * 3F800000 /01 01 - 4D Brosnan Snow -DDD0 728C * 3F800000 * 3F800000 /01 01 - 4E Brosnan - -DDF0 729C * 3F733333 * 3F775254 /00 01 - 4F Natalya jungle suit - -the 8003 address... -gets filled on actual load. address appears after pointer to image location -pointer | address (body) | pointer | type . # parts? -float...| tables. images | pointer | - - -hand/watch inventory -chart at 80033950 or something -33924 (38) to 4cd4? -8003: 8005: -c7c0 37b4 80032654 pp7 -c7e0 37bc 800326c4 silent pp7 -c800 37c8 80032734 dd44 -c820 37D0 800327A4 Klobb -c840 37DC 80032814 KF7 -c860 37E4 80032884 ZMG -c880 37EC 800328F4 D5K -c8a0 37F4 80032964 D5K (Silenced) -c8c0 380C 80032A44 AR33 -c8e0 3814 80032AB4 RC-P90 -c900 -c920 3844 80032C74 Magnum -c940 384C 80032CE4 Golden Gun -c960 381C 80032B24 Shotgun -c980 3828 80032B94 Autoshotgun -c9a0 388C 80032F14 Grenade Launcher -c9c0 3800 800329D4 Phantom -c9e0 3874 80032E34 Laser -ca00 389C 80032F84 Rocket Launcher -ca20 379C 80032574 Hunting Knives -ca40 37a4 800325e4 throwing knives -ca60 38F0 80033224 Tazer -ca80 38D4 80033144 Remote Mines -caa0 38C4 800330D4 Proximity Mines -cac0 38B8 80033064 Timed Mines -cae0 38E4 800331B4 Detonator -cb00 38AC 80032FF4 Grenades -cb20 3794 80032504 fist -cb40 3834 80032c04 sniper rifle -cb60 3760 GcartridgeZ spent 9mm ammo casings -cb80 376c GcartrifleZ spent rifle ammo casings -cba0 3778 GcartblueZ some kind of ammo... -cbc0 3784 GcartshellZ spent shotgun round? -cbe0 3be8 80033764 joypad (N64 controller in options) -cc00 -cc20 -cc40 38F8 80033304 Bombcase -cc60 3910 800333E4 Flare Pistol -cc80 3920 80033454 Piton Gun -cca0 -ccc0 3858 80032D54 Silver PP7 -cce0 3868 80032DC4 Golden PP7 -cd00 -cd20 392c bungee -cd40 3938 door decoder -cd60 3948 bomb defuser -cd80 39e0 bug detector -cda0 39a0 safe cracker -cdc0 3958 80033684 Camera -cde0 3964 Lock Exploder -ce00 3974 Door Exploder -ce20 39b4 key anaylizer -ce40 3990 weapon case -ce60 3bb4 card key -ce80 3bc0 yale key -cea0 3bcc bolt key -cec0 39c8 800334c4 bug -cee0 39d0 80033534 micro camera -cf00 39f0 explosive floppy -cf20 3ac0 80033614 goldeneye key -cf40 3a04 polarized glasses -cf60 3a28 credit card -cf80 3a18 dark glasses -cfa0 3a54 watch identifier -cfc0 3a68 watch communicator -cfe0 387c 80032ea4 watch laser -d000 3a7c watch geiger counter -d020 3a94 watch magnet repel -d040 3aa8 800335a4 watch magnet attract -d060 3a38 gaskeyring -d080 3a48 datatheif -d0a0 3984 briefcase -d0c0 3ad0 black box -d0e0 3904 80033374 plastique -d100 3b4c video tape -d120 3aec clipboard -d140 3af8 staff list -d160 3b04 dossier -d180 3b40 audio tape -d1a0 3b58 DAT tape -d1c0 3b14 plans -d1e0 3b1c spyfile -d200 3b28 blueprints -d220 3adc circuitboard -d240 3b38 map -d260 3b64 spooltape -d280 3b70 microfilm -d2a0 3b7c microcode -d2c0 3b88 lectre -d2e0 3b94 money -d300 3b9c gold bar -d320 3ba8 heroin - -92 entries- weapons? loads the spent ammo shells... -check load words: 80053760-3bf4 \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/objectinfo.txt b/notes/GE Documentation/GameShark - GE specific/objectinfo.txt deleted file mode 100644 index 5b5884f..0000000 --- a/notes/GE Documentation/GameShark - GE specific/objectinfo.txt +++ /dev/null @@ -1,350 +0,0 @@ -GoldenEye 007 -C:CODE DESCRIPTION|CODE|CREATOR|NOTE -EX: C:Infinite Health|80124FAC 004F|Awesome Hacker|Only works in single player - -versus info at 8003a228. Ch per object. -8003,75d0|8005,5a60|3dcc,cccd -prior object line -object load -size - -0000 Palarm1Z double alarm -0001 Palarm2Z alarm [05] -0002 PexplosionbitZ white pyramid -0003 Pammo_crate1Z ammo box - light brown [14] -0004 Pammo_crate2Z ammo box - brown [14] -0005 Pammo_crate3Z ammo box - green [14] -0006 Pammo_crate4Z ammo box - green + white text[14] -0007 Pammo_crate5Z ammo box - green double-brace[14] -0008 Pbin1Z piece of Egyptian collumn -0009 Pblotter1Z desk blotter -000A Pbook1Z red book -000B Pbookshelf1Z full bookshelf -000C Pbridge_console1aZ bridge console W/ Keyboard -000D Pbridge_console1bZ bridge console, controls on right -000E Pbridge_console2aZ bridge console W/ Keyboard -000F Pbridge_console2bZ bridge console, 3 controls -0010 Pbridge_console3aZ bridge console W/ Keyboard -0011 Pbridge_console3bZ bridge console, keyboard on Left -0012 Pcard_box1Z cardboard box, Kapto|enb [03] -0013 Pcard_box2Z cardboard box,red arrow, BaHko [03] -0014 Pcard_box3Z cardboard box, scrawled text, baHaH [03] -0015 Pcard_box4_lgZ cardboard box, three seams [03] -0016 Pcard_box5_lgZ cardboard box, 4 seams, arrow, baHaH [03] -0017 Pcard_box6_lgZ cardboard box, dark Arrow, BaHko [03] -0018 PcctvZ surveillance camera [06] -0019 Pconsole1Z double screen console [0B] -001A Pconsole2Z double screen console [0B] -001B Pconsole3Z double screen console [0B] -001C Pconsole_sevaZ console W/ Keyboard -001D Pconsole_sevbZ console, keyboard + monitor -001E Pconsole_sevcZ console -001F Pconsole_sevdZ console -0020 Pconsole_sev2aZ console [03] -0021 Pconsole_sev2bZ console(monitor, keyboard, controls) [0A] -0022 Pconsole_sev2cZ console [03] -0023 Pconsole_sev2dZ console [16] -0024 Pconsole_sev_GEaZ 24 [03] -0025 Pconsole_sev_GEbZ controls only -0026 Pdesk1Z desk W/ Kickplate [03] -0027 Pdesk2Z white table [03] -0028 Pdesk_lamp2Z Archives desk lamp -0029 Pdisc_readerZ part of Aztec DAT box -002A Pdisk_drive1Z other part of Aztec DAT box -002B Pfiling_cabinet1Z two drawer white cabinet [03] -002C Pjerry_can1Z jerry can -002D Pkeyboard1Z computer keyboard [03] -002E Pkit_units1Z 4 door & drawer bench [03] -002F Pletter_tray1Z desk in-tray -0030 Pmainframe1Z mainframe [03] -0031 Pmainframe2Z mainframe [03] -0032 Pmetal_chair1Z chair [03] -0033 Pmetal_crate1Z metal crate,6 top corner [03] -0034 Pmetal_crate2Z metal crate,6 bottom corner [03] -0035 Pmetal_crate3Z metal crate,skull & crossbones [03] -0036 Pmetal_crate4Z ribbed steel box -0037 Pmissile_rackZ small missle in rack -0038 Pmissile_rack2Z 4 models in a row -0039 Poil_drum1Z oil drum,single stripe - ribbed [03] -003A Poil_drum2Z oil drum,single stripe - ribbed + crossbones [03] -003B Poil_drum3Z oil drum,single stripe - ribbed + hazard [03] -003C Poil_drum5Z oil drum,double striped - hazard [03] -003D Poil_drum6Z oil drum,hazard [03] -003E Poil_drum7Z oil drum,double dashes - crossbones [03] -003F PpadlockZ padlock -0040 Pphone1Z phone -0041 Pradio_unit1Z radio tuner[03] -0042 Pradio_unit2Z radio tuner 2[03] -0043 Pradio_unit3Z radio tuner w/ knobs[03] -0044 Pradio_unit4Z radio tuner w/ knobs. higher Frequency[03] -0045 Psat1_reflectZ enlarged Silo goldeneye sattelite -0046 PsatdishZ Antenna dish from Dam [03] -0047 PsatboxZ small tape recorder or remote control? -0048 Pstool1Z wooden stool -0049 Pswivel_chair1Z swivel chair [03] -004A Ptorpedo_rackZ rack of 3 blue rockets -004B Ptv1Z small television or monitor [0A] -004C Ptv_holderZ hanging monitor rack [0C] -004D PtvscreenZ wall monitor screen [0A] -004E Ptv4screenZ wall monitor screen [0A] -004F Pwood_lg_crate1Z wooden crate [03] -0050 Pwood_lg_crate2Z wooden crate [03] -0051 Pwood_md_crate3Z wooden crate [03] -0052 Pwood_sm_crate4Z wooden crate [03] -0053 Pwood_sm_crate5Z wooden crate [03] -0054 Pwood_sm_crate6Z wooden crate [03] -0055 Pwooden_table1Z Archives PP7 wooden table [03] -0056 Pswipe_card2Z Floppy disc -0057 Pborg_crateZ blue & gold printed circuit cube -0058 Pboxes4x4Z metal crate stack, 4x4 -0059 Pboxes3x4Z metal crate stack, 4x3 -005A Pboxes2x4Z metal crate stack, 4x2 -005B Psec_panelZ red button on vertical slab (enlarged?) -005C PICBM_noseZ small rocket -005D PICBMZ Silo rocket, full size (one of the biggest items!) -005E Ptuning_console1Z double console on castors -005F Pdesk_arecibo1Z counter or bar -0060 Plocker3Z locker set [03] -0061 Plocker4Z locker set [03] -0062 ProofgunZ ceiling drone gun [0D] -0063 Pdest_engineZ Frigate Engine. -0064 Pdest_exocetZ Frigate square pack rocket launcher, pointing up. -0065 Pdest_gunZ Frigate gun turret -0066 Pdest_harpoonZ Frigate rocket rack -0067 Pdest_seawolfZ Runway rocket launcher [03] -0068 PwindowZ window glass [2A & 2F] -0069 Pwindow_lib_lg1Z window lattice frame -006A Pwindow_lib_sm1Z half size window lattice -006B Pwindow_cor11Z smaller lattice -006C Pjungle3_treeZ Jungle big tree (another whopper, best viewed on Dam) [03] -006D PpalmZ Jungle palm [03] -006E PpalmtreeZ Jungle palm resprouting after loss of fronds [03] -006F Pplant2bZ Jungle low shrub [03] -0070 PlabbenchZ shrunken Facility laboratory bench -0071 PgasbarrelZ Facility, Runway white rubbish bin -0072 PgasbarrelsZ set of 4 white bins [03] -0073 PbodyarmourZ body armour [15] -0074 PbodyarmourvestZ body armour [15] -0075 PgastankZ shrunken Facility gas tank -0076 Pglassware1Z a glass -0077 PhatchboltZ train floor plate securing strips [03] -0078 PbrakeunitZ Train brake controller [03] -0079 Pak47magZ gun magazine [07] -007A Pm16magZ gun magazine [07] -007B Pmp5kmagZ gun magazine [07] -007C PskorpionmagZ gun magazine [07] -007D PspectremagZ gun magazine [07] -007E PuzimagZ gun magazine [07] -007F PsilencerZ silencer [07] -0080 PchrextinguisherZ fire extinguisher -0081 PboxcartridgesZ small box bullets -0082 Pfnp90magZ rolled up newspaper? -0083 PgoldenshellsZ small box bullets -0084 PmagnumshellsZ -0085 PwppkmagZ -0086 Ptt33magZ ammo clip [07] -0087 Psev_doorZ Grey door with warning strips on it [01] -0088 Psev_door3Z Silo Door - Arrow Left [01] -0089 Psev_door3_windZ Wierd Beta Door (Flashes) [01] -008A Psev_door4_windZ Silo Door (Again) - Arrow Left [01] -008B Psev_trislideZ Clear Glass Door [01] -008C Psev_door_v1Z A diffent silo Door - Arrow Up [03] -008D Psteel_door1Z The silver Silo doors (Corragated,With warning strips) [01] -008E Psteel_door2Z Rusty Old Door [01] -008F Psteel_door3Z Door With rust on it-double cross brace (Archives) [01] -0090 Psilo_lift_doorZ Metalic Blue Elevator Door - Silo [01] -0091 Psteel_door2bZ A different rusty old door [01] -0092 Pdoor_roller1Z Stripey Blue door [01] -0093 Pdoor_roller2Z Blue door (With holes in it) [01] -0094 Pdoor_roller3Z Same [01] -0095 Pdoor_roller4Z Part of Runway Shutters [01] -0096 Pdoor_st_arec1Z Blue corrugated door w/ Red and white diagonal lines [01] -0097 Pdoor_st_arec2Z Same but reversed [01] -0098 Pdoor_dest1Z Silo normal door (Grey With indents in) [01] -0099 Pdoor_dest2Z Same but with Keep clear on it [01] -009A Pgas_plant_sw_do1Z Grey Door With blue stripe - Very cool [01] -009B Pgas_plant_sw2_do1Z The grey door in Facility [01] -009C Pgas_plant_sw3_do1Z Same [01] -009D Pgas_plant_sw4_do1Z Plain Wood door (looks like Sand) [01] -009E Pgas_plant_met1_do1Z Facility Normal (Big Brown ones) [01] -009F Pgas_plant_wc_cub1Z Facility Bathroom Door [01] -00A0 Pgasplant_clear_doorZ Clear Glass Door - From Labs in Facility [01] -00A1 Ptrain_doorZ Brown Wooden Door - Train [01] -00A2 Ptrain_door2Z Brown door with glass in it [01] -00A3 Ptrain_door3Z Brown door with glass in it (Unbreakable) [01] -00A4 Pdoor_eyelidZ Very wierd door that goes up and down [01] -00A5 Pdoor_irisZ Water Caverns Door [01] -00A6 PsevdoorwoodZ Door from Huts on Surface [01] -00A7 PsevdoorwindZ Wierd green door with glass in it [01] -00A8 PsevdoornowindZ Plain green door [01] -00A9 PsevdoormetslideZ bunker outer door, Cradle Door [01] -00AA Pcryptdoor1aZ Stone door w/ prints on it [01] -00AB Pcryptdoor1bZ Sand door w/ prints on it [01] -00AC Pcryptdoor2aZ Darker Stone door w/ prints on it [01] -00AD Pcryptdoor2bZ Light brown wood door [01] -00AE Pcryptdoor3Z Egyptian Door [01] -00AF Pcryptdoor4Z Sand/Brown door [01] -00B0 PvertdoorZ Blast Door - Control [01] -00B1 PhatchdoorZ Train Floor Plate [01] -00B2 PdamgatedoorZ A different Blast Door - Control [01] -00B3 PdamtundoorZ Dam Blast Room Door [01] -00B4 PdamchaindoorZ Dam Mesh Door [01] -00B5 PsilotopdoorZ Blown Up door [01] -00B6 Pdoorprison1Z Stack/Basement Gate [01] -00B7 PdoorstatgateZ Statue Gates [01] -00B8 PchrkalashZ Soviet KF7 [08] -00B9 PchrgrenadelaunchZ Grenade Laucher [08] -00BA PchrknifeZ Throwing Knife [08] -00BB PchrlaserZ Moonraker Laser [08] -00BC Pchrm16Z AR33 Assault Rifle [08] -00BD Pchrmp5kZ D5K [08] -00BE PchrrugerZ Cougar Magnum [08] -00BF PchrwppkZ PP7 [08] -00C0 PchrshotgunZ Shotgun [08] -00C1 PchrskorpionZ Klobb [08] -00C2 PchrspectreZ Phantom [08] -00C3 PchruziZ ZMG [08] -00C4 PchrgrenadeZ Grenade [08] -00C5 Pchrfnp90Z RCP-90 [08] -00C6 PchrbriefcaseZ Briefcase [08] -00C7 PchrremotemineZ Remote Mine [08] -00C8 PchrproximitymineZ Proximity Mine [08] -00C9 PchrtimedmineZ Timed Mine [08] -00CA PchrrocketZ Rocket [08] -00CB PchrgrenaderoundZ Grenade Launcher shot [08] -00CC PchrwppksilZ Silenced PP7 [08] -00CD Pchrtt33Z Dostovei DD44 [08] -00CE Pchrmp5ksilZ Silenced D5K [08] -00CF PchrautoshotZ Auto Shotgun [08] -00D0 PchrgoldenZ Golden Gun [08] -00D1 PchrthrowknifeZ Hunting Knife [08] -00D2 PchrsniperrifleZ Sniper Rifle [08] -00D3 PchrrocketlaunchZ Rocket laucher [08] -00D4 PhatfurryZ black hat [11] -00D5 PhatfurrybrownZ black hat [11] -00D6 PhatfurryblackZ black hat [11] -00D7 PhattbirdZ black hat [11] -00D8 PhattbirdbrownZ green hat [11] -00D9 PhathelmetZ helmet [11] -00DA PhathelmetgreyZ helmet [11] -00DB PhatmoonZ moonraker helmet [11] -00DC PhatberetZ black hat [11] -00DD PhatberetblueZ blue special forces hat [11] -00DE PhatberetredZ red special forces hat [11] -00DF PhatpeakedZ officers hat [11] -00E0 PchrwristdartZ BETA -00E1 PchrexplosivepenZ BETA -00E2 PchrbombcaseZ Briefcase lying down -00E3 PchrflarepistolZ BETA pickup -00E4 PchrpitongunZ BETA pickup -00E5 PchrfingergunZ BETA pickup -00E6 PchrsilverwppkZ BETA pickup -00E7 PchrgoldwppkZ BETA pickup -00E8 PchrdynamiteZ BETA pickup -00E9 PchrbungeeZ BETA pickup -00EA PchrdoordecoderZ Keypad -00EB PchrbombdefuserZ Buttons, Switches, and Display -00EC PchrbugdetectorZ BETA pickup -00ED PchrsafecrackercaseZ briefcase lying down -00EE PchrcameraZ push-advance camera -00EF PchrlockexploderZ BETA pickup -00F0 PchrdoorexploderZ BETA pickup -00F1 PchrkeyanalysercaseZ briefcase laying down -00F2 PchrweaponcaseZ briefcase standing up -00F3 PchrkeyyaleZ yale key [04] -00F4 PchrkeyboltZ bolt key [04] -00F5 PchrbugZ covert modem/tracker bug -00F6 PchrmicrocameraZ small video camera with aerial -00F7 PfloppyZ floppy disc -00F8 PchrgoldeneyekeyZ goldeneye key [08] -00F9 PchrpolarizedglassesZ sunglasses -00FA PchrcreditcardZ BETA pickup -00FB PchrdarkglassesZ BETA pickup -00FC PchrgaskeyringZ triangular shaped thing -00FD PchrdatathiefZ circuitboard with dealie -00FE PsafeZ safe without door [2B] -00FF PbombZ BETA pickup -0100 PchrplansZ classified folder (game intro) -0101 PchrspyfileZ BETA pickup -0102 PchrblueprintsZ Pirate prints -0103 PchrcircuitboardZ circuitboard -0104 PchrmapZ bunker2 plans -0105 PchrspooltapeZ BETA pickup -0106 PchraudiotapeZ audiotape -0107 PchrmicrofilmZ BETA pickup -0108 PchrmicrocodeZ BETA pickup -0109 PchrlectreZ BETA pickup -010A PchrmoneyZ BETA pickup -010B PchrgoldbarZ BETA pickup -010C PchrheroinZ BETA pickup -010D PchrclipboardZ red card -010E PchrdossierredZ red dossier [03] -010F PchrstafflistZ Bunker staff list [03] -0110 PchrdattapeZ DAT -0111 PchrplastiqueZ plastique -0112 PchrblackboxZ orange helicopter "black" box -0113 PchrvideotapeZ cctv tape [03] -0114 PnintendologoZ Nintendo logo -0115 PgoldeneyelogoZ Goldeneye logo -0116 PwalletbondZ Folder with royal crest in sky [07] -0117 PmiltruckZ Dam truck [27] -0118 PjeepZ jeep [27] -0119 ParticZ red prime mover [28] -011A PhelicopterZ brown helicopter [28] -011B PtigerZ pirate helicopter [28] -011C PmilcopterZ hound helicopter [28] -011D PhindZ soviet camouflage chopper [28] -011E PartictrailerZ black trailer [07] -011F PmotorbikeZ motorcycle [07] -0120 PtankZ tank [2D] -0121 PapcZ amphibious vehicle [07] -0122 PspeedboatZ speedboat [07] -0123 PplaneZ Runway aeroplane [28] -0124 Pgun_runway1Z wall mount drone gun [0D when working, or 0C just to appear] -0125 PsafedoorZ safe door [01] -0126 Pkey_holderZ Bunker2 key rack [03] -0127 PhatchsevxZ Bunker2 sliding glass door -0128 PsevdishZ Surface satellite dish, from top of building [28] -0129 Parchsecdoor1Z -012A Parchsecdoor2Z -012B PgroundgunZ free standing drone gun [0D] -012C PtrainextdoorZ Depot train door -012D PcarbmwZ Streets small white car -012E PcarescortZ Streets small white car -012F PcargolfZ Streets small white car -0130 PcarweirdZ Streets small red car -0131 PcarzilZ Ouromov's car [27] -0132 Pshuttle_door_lZ vertical door with spikes -0133 Pshuttle_door_rZ -0134 Pdepot_gate_entryZ red star on panel -0135 Pdepot_door_steelZ shutters -0136 Pglassware2Z beaker with blue -0137 Pglassware3Z erlenmeyer -0138 Pglassware4Z 5 beaker set -0139 PlandmineZ blue Streets mines -013A Pplant1Z jungle bush -013B Pplant11Z jungle bush -013C Pplant2Z jungle bush -013D Pplant3Z pointy jungle bush -013E Pjungle5_treeZ -013F PlegalpageZ Goldeneye intro screen -0140 Pst_pete_room_1iZ Streets roads and buildings -0141 Pst_pete_room_2iZ Streets -0142 Pst_pete_room_3tZ Streets -0143 Pst_pete_room_5cZ Streets -0144 Pst_pete_room_6cZ Streets -0145 Pdoor_rollertrainZ roller door -0146 Pdoor_winZ Aztec vertical glass slider -0147 Pdoor_aztecZ Aztec first stone vert slider -0148 PshuttleZ Shuttle -0149 Pdoor_azt_deskZ girder within girder? -014A Pdoor_azt_desk_topZ piece of concrete with two brass pipe chimneys -014B Pdoor_azt_chairZ cube of rock -014C Pdoor_mfZ mainframe door from Aztec -014D PflagZ flag tag flag -014E PbarricadeZ road barrier -014F PmodemboxZ Dam screen for covert modem [0A] -0150 PdoorpanelZ Dam sliding door activator [0B] -0151 PdoorconsoleZ standing console, no screen -0152 PchrtesttubeZ flare? lipstick? -0153 PbollardZ solid stone cairn \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/pal generic setup code.txt b/notes/GE Documentation/GameShark - GE specific/pal generic setup code.txt deleted file mode 100644 index 7bedb72..0000000 --- a/notes/GE Documentation/GameShark - GE specific/pal generic setup code.txt +++ /dev/null @@ -1,9 +0,0 @@ -"Enable All Players (PAL)" -81056DD0 8008 -81056DD2 8EA0 -D1026A72 0002 -81056DD2 E380 -D1026A72 0003 -81056DD2 B910 - - diff --git a/notes/GE Documentation/GameShark - GE specific/silo ladder.txt b/notes/GE Documentation/GameShark - GE specific/silo ladder.txt deleted file mode 100644 index 6e229b2..0000000 --- a/notes/GE Documentation/GameShark - GE specific/silo ladder.txt +++ /dev/null @@ -1,115 +0,0 @@ -ladder (40 lines) -811b127a 2724 -811b180a 272c - -801b4b2f 001a -811b4b30 3333 -811b4b32 4013 -811b4b34 ffd1 -811b4b36 fc85 -811b4b38 0479 -811b4b3a 0000 -811b4b3c ffd1 -811b4b3e fc67 -811b4b40 0479 -811b4b42 272c -811b4b44 000b -811b4b46 fc67 -811b4b48 0479 -811b4b4a 0000 -811b4b4c 000b -811b4b4e fc85 -811b4b50 0479 -811b4b52 200a - -801b4b6f 0019 -811b4b70 3333 -811b4b72 4013 -811b4b74 000b -811b4b76 fc67 -811b4b78 0479 -811b4b7a 2724 -811b4b7c ffd1 -811b4b7e fc67 -811b4b80 0479 -811b4b82 0000 -811b4b84 ffd2 -811b4b86 fbd6 -811b4b88 047f -811b4b8a 20be -811b4b8c 0009 -811b4b8e fbd6 -811b4b90 047f -811b4b92 0000 - -vents (66 lines) -811b1e4a 21ea - -811b2162 4013 -811b2164 fee8 -811b2166 fc08 -811b2168 0528 -811b216a 0000 -811b2172 2186 -811b217c fee8 -811b217e fc08 -811b2180 04e8 -811b2182 271c - -801b4aef 0016 -811b4af0 1333 -811b4af2 4013 -811b4af4 fdc0 -811b4af6 fc08 -811b4af8 04e8 -811b4afa 2714 -811b4afc fe12 -811b4afe fc08 -811b4b00 0528 -811b4b04 fee8 -811b4b06 fc08 -811b4b08 0528 -811b4b0a 21ea -811b4b0c fee8 -811b4b0e fc08 -811b4b10 04e8 -811b4b12 0000 - -801b4aaf 0016 -811b4ab0 1333 -811b4ab2 4013 -811b4ab4 fe12 -811b4ab6 fc08 -811b4ab8 0528 -811b4aba 271c -811b4abc fdc0 -811b4abe fc08 -811b4ac0 04e8 -811b4ac4 fdc0 -811b4ac6 fc08 -811b4ac8 0560 -811b4aca 270c -811b4acc fe12 -811b4ace fc08 -811b4ad0 0560 -811b4ad2 0000 - -801b4a6f 0017 -811b4a72 6024 -811b4a74 fe3e -811b4a78 0610 -811b4a7a 0000 -811b4a7c fe3e -811b4a80 0560 -811b4a84 fe12 -811b4a88 0560 -811b4a8a 2714 -811b4a8c fdc0 -811b4a8e fbea -811b4a90 0560 -811b4a92 0000 -811b4a94 fd86 -811b4a98 0560 -811b4a9c fd86 -811b4aa0 0610 -811b4aa2 0000 \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/sniper delight.txt b/notes/GE Documentation/GameShark - GE specific/sniper delight.txt deleted file mode 100644 index 4d4bd27..0000000 --- a/notes/GE Documentation/GameShark - GE specific/sniper delight.txt +++ /dev/null @@ -1,433 +0,0 @@ -sniper sight all guns -8100C0F4 0801 -8100C0F6 8080 -81060200 AFA4 -81060202 0000 -81060204 3C02 -81060206 8008 -81060208 8C42 -8106020A 9EE0 -8106020C 8042 -8106020E 0873 -81060210 241B -81060212 0070 -81060214 005B -81060216 0019 -81060218 0000 -8106021A D812 -8106021C 277B -8106021E FF90 -81060220 3C0F -81060222 8003 -81060224 25EF -81060226 2538 -81060228 01FB -8106022A 7821 -8106022C 3C1B -8106022E 8006 -81060230 8762 -81060232 7CA4 -81060234 240E -81060236 0018 -81060238 85F8 -8106023A 0000 -8106023C 504E -8106023E 0001 -81060240 2718 -81060242 FFFF -81060244 240E -81060246 0014 -81060248 504E -8106024A 0001 -8106024C 2718 -8106024E 0001 -81060250 2B1B -81060252 2000 -81060254 5760 -81060256 0001 -81060258 2418 -8106025A 4270 -8106025C 0800 -8106025E 303F -81060260 A5F8 -81060262 0000 - -gun mod codes - -.. .. .. .. QQ QQ QQ QQ -XX XX XX XX YY YY YY YY -ZZ ZZ ZZ ZZ P1 P1 P1 P1 -P2 P2 P2 P2 P3 P3 P3 P3 -GG GG GG GG CC CC .. SS -TT UU WW WW RR RR RR RR -DD DD DD DD II II II II -ZZ ZZ ZZ ZZ A1 A1 A1 A1 -A2 A2 A2 A2 HH HH HH HH -** ** ** ** FF FF FF FF -OO OO OO OO BB BB BB BB -LL LL LL LL .. .. .. .. -.. .. .. .. .. .. .. .. -.. .. .. .. .. .. .. .. - -Key: -Q = Distance of gun flash from the end of the barrel (IEEE format) -X, Y, and Z = distance guns appear on the screen from the - center, height, and how far out in front or behind you they are -P1, P2, and P3 = the amount of play the guns are given when - you move forward, side to side, and up or down. A high value - would make the guns move far to the left or right when you - move left or right, high or low when you move up and down, - and so on. -G = bullet pic shown, may actually be what ammo the gun pulls - from, I'm not sure, haven't checked (still fires the same bullets, - no rockets, knives, or grenades fly out if it is on that pic). -C = clip sizes previously found. -S = time between automatic shots. -T = how many objects the bullet goes through (FF = bullets go - through 255 objects). -U = something to do with the timing of the gun sounds, not - completely sure. -W = sound effect played when the gun is shot. Thats what I - described above, there are 261 sound effects, or 0 - 105h. -R = Location of address that displays the bullet shells flying from - the guns, and runs the ping sound of the casings hitting the - ground. This value is either 00000000 for no bullet casings - (laser, knife, grenade, so on) or 8003CB60, the location of - pointers that point to code possibly, I haven't explored the - area a lot near that address (8003CB60). -D = amount of destruction or power each bullet packs, a value of - 48F00000 suits me perfectly. I dont know what value the - Golden Gun has for this, but there's probably a set default at - which all objects are destroyed instantly, and its probably - lower than 48F00000, I just put that in because I felt like it. -I = amount of inaccuracy the gun has, 00000000 = lowest, - anything above 42800000 is a little absurd, as bullets shoot - directly above and to the side of you. -Z = amount of zoom the gun has. Just setting shit value doesn't - give the option of zooming in and out, that is somewhere else - that I haven't found yet. -A1 and A2 = speed of red crosshair, best not to mess with this, - because if you do the crosshair will fly off the screen and you - have to restart. -H = hand stabilization. A low value will keep the hands still while - a high value will cause Bond's arms to twirl around in circles - and turn every other way, kinda funny sometimes, like Bond's - arms have been severed and are just floating around in place. -* = this area has something to do with whether the gun is - automatic or how fast it fires, I have to look into it more. -F = how far back Bond's hands pull back when the gun is fired. - Giving it a negative value makes Bond's hands fly forward - when shot, try C2800000 for that. -O = amount of recoil the gun has. -B = how far back the bolt slides when the gun is fired. -L = how loud the gun appears to the enmy. For instance, in - facility, a value of 43800000 will attract enemies from all over - the level, while a value of 00000000 will be almost silent. -. = I don't know what these do yet. -And for this to be of any use, here are Viper187's clip modifier - codes. These addresses are the CC's in the gun data block. - You can go from there. - -Throwing Knives 81032604 XXXX -PP7 81032674 XXXX -PP7 (silenced) 810326E4 XXXX -DD44 81032754 XXXX -Klobb 810327C4 XXXX -KF7 81032834 XXXX -ZMG 9MM 810328A4 XXXX -D5K 81032914 XXXX -D5K (silenced) 81032984 XXXX -Phantom 810329F4 XXXX -AR33 81032A64 XXXX -RCP-90 81032AD4 XXXX -Shotgun 81032B44 XXXX -Auto Shotgun 81032BB4 XXXX -Sniper Rifle 81032C24 XXXX -Magnum 81032C94 XXXX -Golden Gun 81032D04 XXXX -Silver PP7 81032D74 XXXX -Gold PP7 81032DE4 XXXX -Grenade Launcher 81032F34 XXXX -Rocket Launcher 81032FA4 XXXX -Grenades 81033014 XXXX -Timed Mines 81033084 XXXX -Proximity Mines 810330F4 XXXX -Remote Mines 81033164 XXXX -Tank 810332B4 XXXX - -sounds -0001 - Rocket Launching -0002 - Glass shattering, fade in -0003 - Throwing knife hitting ground -0004 - Throwing a throwing knife -0005 - Quiet Throwing knife -0006 - Nothing -0007 - Elevator ding (BETA?) -0008 - Train track sound 1 -0009 - Train track sound 2 -000A - Radio noise? -000B - Tank firing -000C - Grenade launcher firing -000D - Female gasp 1 -000E - Female gasp 2 -000F - Female scream -0010 - Short "beep" tone 1 -0011 - Short "beep" tone 2 (BETA) -0012 - Short "tap" sound (BETA) -0013 - Gunshot ricochet 1 -0014 - Gunshot ricochet 2 -0015 - Gunshot ricochet 3 -0016 - Gunshot ricochet 4 -0017 - Gunshot ricochet 5 -0018 - Gunshot ricochet 6 -0019 - Gunshot ricochet 7 -001A - Gunshot ricochet 8 -001B - Gunshot ricochet 9 -001C - Gunshot ricochet 10 -001D - Gunshot ricochet 11 -001E - Gunshot ricochet 12 -001F - Gunshot ricochet 13 -0020 - Gunshot ricochet 14 -0021 - Gunshot ricochet 15 -0022 - Gunshot ricochet 16 -0023 - Gunshot ricochet 17 -0024 - Gunshot ricochet 18 -0025 - Gunshot ricochet 19 -0026 - Gunshot ricochet 20 -0027 - Gunshot ricochet 21 -0028 - Gunshot ricochet 22 -0029 - Gunshot ricochet 23 -002A - Gunshot ricochet 24 -002B - Clip empty sound 1, BETA -002C - Odd firing/ricochet sound -002D - Grenade landing -002E - Silenced firing -002F - Punch landing 1 -0030 - Punch landing 2 -0031 - Punch landing 3 -0032 - Gun reloading -0033 - Train track sound 3 -0034 - Train track sound 4 -0035 - Train track sound 5 -0036 - Baron Samedi laugh -0037 - Baron Samedi laugh echo -0038 - Baron Samedi laugh echo -0039 - Baron Samedi laugh echo -003A - Helicopter blade sound -003B - Helicopter blade sound, lower -003C - Engine sound -003D - Train brake sound 1 -003E - Engine sound 2, BETA? -003F - Train brake sound 2 -0040 - Train engine sound -0041 - Truck engine sound, BETA -0042 - Truck engine sound + ignition, BETA -0043 - Truck engine sound 2, BETA -0044 - Bond gasp -0045 - Bullet hitting body -0046 - Bullet hitting glass -0047 - Glass shattering -0048 - Bullet hitting metal 1 -0049 - Bullet hitting metal 2 -004A - Hunting knife hitting body -004B - Bullet hitting wood -004C - Bullet hitting water -004D - Page turning 1 -004E - Page turning 2 -004F - Modem sound -0050 - Radio tuning in -0051 - Zipper sound, body armour -0052 - Ammo/weapon regenerating -0053 - High-pitched beep, BETA -0054 - Woman gasp -0055 - Satellite dish shutting down -0056 - Satellite dish shutting down, longer -0057 - Satellite dish powering up -0058 - Satellite dish powering up, longer -0059 - Clip empty sound 2 -005A - Silence -005B - Electric zap sound 1, BETA -005C - Electric zap sound 2, BETA -005D - Electric zap sound 3, BETA -005E - Radio tuning in -005F - Single throwing knife throw 1 -0060 - Single throwing knife throw 2 -0061 - Single throwing knife throw 3 -0062 - Bond cough, twice -0063 - Bond cough, once -0064 - Tazer sound -0065 - Tazer sound, looping -0066 - Gas leak, looping -0067 - Ti-tap, BETA -0068 - Unknown thump, BETA -0069 - Whoosh sound -006A - Klobb sound -006B - PP7 sound -006C - Unknown gunshot, BETA -006D - KF7 gunshot -006E - Uzi gunshot -006F - Magnum gunshot -0070 - DD44 gunshot -0071 - AR33 gunshot -0072 - Grenade launcher gunshot -0073 - Unknown gunshot, BETA -0074 - ??? -0075 - D5K gunshot -0076 - Unknown gunshot -0077 - Unknown gunshot, BETA -0078 - Ricochet hitting something metal? BETA -0079 - Unknown gunshot, BETA -007A - Casing 'ting' -007B - Body hitting floor 1 -007C - Body hitting floor 2 -007D - Body hitting floor 3 -007E - Body hitting floor 4 -007F - Body hitting floor 5 -0080 - Body hitting floor 6 -0081 - Body hitting floor 7 -0082 - Body hitting floor 8 -0083 - Body hitting floor 9 -0084 - Body hitting floor 10 -0085 - Body crumpling to floor -0086 - Male cry 1 -0087 - Male cry 2 -0088 - Male cry 3 -0089 - Male cry 4 -008A - Male cry 5 -008B - Male cry 6 -008C - Male cry 7 -008D - Male cry 8 -008E - Male cry 9 -008F - Male cry 10 -0090 - Male cry 11 -0091 - Male cry 12 -0092 - Male cry 13 -0093 - Male cry 14 -0094 - Male cry 15 -0095 - Male cry 16 -0096 - Male cry 17 -0097 - Male cry 18 -0098 - Male cry 19 -0099 - Male cry 20 -009A - Male cry 21 -009B - Male cry 22 -009C - Male cry 23 -009D - Male cry 24 -009E - Male cry 25 -009F - Watch beep -00A0 - Unknown beep, BETA -00A1 - Klaxon alarm -00A2 - Another alarm -00A3 - Yet another alarm -00A4 - Muted gunshot 1 -00A5 - Muted gunshot 2 -00A6 - Crossbow/arrow shot 1, BETA -00A7 - Crossbow/arrow shot 2, BETA -00A8 - Another gunshot, BETA -00A9 - Explosion 1, BETA -00AA - Explosion 2 -00AB - Explosion 3 -00AC - Explosion 4, BETA -00AD - Explosion 5 -00AE - Explosion 6, BETA -00AF - Explosion 7, BETA -00B0 - Explosion 8 -00B1 - Explosion 9, BETA -00B2 - Explosion 10, BETA -00B3 - Explosion 11, BETA -00B4 - Explosion 12 -00B5 - Explosion 13 -00B6 - Explosion 14 -00B7 - Tank crush scream -00B8 - Typing at a computer -00B9 - Small crash, BETA -00BA - Trying to open a locked door -00BB - Door Closing 1 -00BC - Door Opening 1 -00BD - Beeping -00BE - Floppy disk drive -00BF - Train door opening -00C0 - "Pop" sound -00C1 - Jungle background noise -00C2 - Garage door opening, looped -00C3 - Garage door opening stop -00C4 - Door Opening 2 -00C5 - Door Closing 2 -00C6 - Machine start, BETA -00C7 - Door Closing 3 -00C8 - Unknown -00C9 - Unknown 2, BETA -00CA - Door Opening 3 -00CB - Door Closing 4 -00CC - Machine going, BETA -00CD - Click -00CE - Click 2 -00CF - Click 3 -00D0 - Bullet hitting gravel 1 -00D1 - Bullet hitting gravel 2 -00D2 - Thud -00D3 - Glass lab door opening -00D4 - Bullet hitting tile -00D5 - Enemy getting run over, crunch -00D6 - Door Opening 4 -00D7 - Door Closing 5 -00D8 - Machine going 2, BETA -00D9 - Unknown? -00DA - Table retracting -00DB - Table retracting stop -00DC - 'Tic' -00DD - Bullet hitting metal, 2 -00DE - Click -00DF - Train track noise -00E0 - Knife slash? -00E1 - Rock door opening, looped -00E2 - Rock door opening stop -00E3 - Modem 2 -00E4 - Moonraker firing -00E5 - Watch beep 2 -00E6 - Bullet hitting body -00E7 - Bullet hitting body (again) -00E8 - Gun switch -00E9 - Knife switch -00EA - Gun switch 2 -00EB - Mine switch -00EC - Watch static -00ED - Watch screen opening -00EE - Watch screen closing -00EF - Bullet hitting metal, 3 -00F0 - Bullet hitting metal, 4 -00F1 - Latch closing -00F2 - Moonraker switch -00F3 - Some electronic sound, I forget -00F4 - Camera snapshot -00F5 - Floppy disk drive 2 -00F6 - Unknown weird machine noise, BETA -00F7 - Beeping noise, BETA -00F8 - Plane taking off from Runway cinema -00F9 - Train noise -00FA - Train noise again -00FB - More train noise -00FC - Even more train noise -00FD - Autogun firing -00FE - Ping noise, BETA -00FF - Weird machine noise, BETA -0100 - Golden gun shot -0101 - Sneeze -0102 - Cymbal slide from intro -0103 - Cymbal slide from intro 2 -0104 - Cymbal slide from intro 3 -0105 - Grate hitting bottom of ventilation shaft from Surface end cinema - -3rd person in multi -80036497 0009 -80036498 0001 - -Dark Levels Cheat Code -800214CA 0007 - -runway original start -8106A738 45CC -8106A73C C33D -8106A740 C5A9 -8106A744 801C -8106A746 B3D8 \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/solo menu text.txt b/notes/GE Documentation/GameShark - GE specific/solo menu text.txt deleted file mode 100644 index d81227f..0000000 --- a/notes/GE Documentation/GameShark - GE specific/solo menu text.txt +++ /dev/null @@ -1,361 +0,0 @@ -80023304 pointers to error/ debug messages - -8002A8C3 current menu displayed -8102a8c6 value used to update menu. updates when long value becomes positive. ------------ -00 - legal splash screen -01 - Nintendo logo -02 - rare logo -03 - *eye* intro -04 - Goldeneye intro splash -05 - Main Folder Menu -06 - 1P/Multi/Cheats Folder Screen -07 - Select Mission Screen -08 - Mission Objectives (First Page) -09 - 007 Special Options -0A - Mission Folder Briefing -0B - stage active -0c - Mission Failed screen -0d - Mission Completed screen -0E - multiplayer option screen -0F - Select Character Modifier -10 - Health Folder -11 - Control Style -12 - level folder (multi) -13 - scenario select -14 - team setup screen -15 - Cheats Menu Folder -16 - no controller in socket 1 warning -17 - (crashes - seems to be *switch* character) -18 - *actors* intro sequence - -8002A8FB 00?? briefing -01 - Dam -02 - Facility -03 - Runway -05 - Surface A -06 - Bunker A -08 - Silo -0A - Frigate -0C - Surface B -0D - Bunker B -0F - Statue -10 - Archives -11 - Streets -12 - Depot -13 -Train -14 - Secret Room (Bunker) -15 -Jungle -16 - Control -17 - Caverns -18 - Cradle -1A - Aztec -1C - Egyptian - -8002a8ff 000? difficulty modifier -0 - agent -1 - secret agent -2 - 00 agent -3 - 007 - -8002a943 zoom on menu, used for going "into" a folder, but basically resizes text layer of menus - -8002a94f cheat option lock (00 locked) -pointer to 8016c7d0 -array of pointers here - -8002A9A4 intro splash screen text -8002abe4 solo stage select menu -8002aff4 multiplayer game length select - (name(i), then time(l) or kills(l) - 9xxx.0000.time.kills) -8002b054 multiplayer scenario select - (name(i), then min(c) and max(c) players - 9xxx.mn.mx) -8002b074 multiplayer stage select -8002b198 multiplayer character select -8002b498 health settings and names -8002b4f0 names and settings for control style -8002b510 names and settings for autoaim - -8002b8bc not sure, but nifty table with float - ------------------ -solo stage select -part name also acts as name in menu if not set -changing the stage that loads usually causes the game to lock when you leave the stage. -(it has no clue what menu to return to) - -Mission 1 - arkangelsk -pointer to mission number|8102abe4,8102abe6 -mission name in briefing|8102ABE8 -value 1|8002ABF7 - -Part i - Dam -pointer to part numeral|8102AC00,8102AC02 -part name in briefing|8102AC04 -name in menu|8102AC06 -stage load|8002AC0B -order in menu|8002AC17 -pointer to briefing call|8102AC18,8102AC1A - -Part ii - Facility -pointer to part numeral|8102AC1C,8102AC1E -part name in briefing|8102AC20 -name in menu|8102AC22 -stage load|8002AC26 -order in menu|8002AC33 -pointer to briefing call|8102AC34,8102AC36 - -Part iii - Runway -pointer to part numeral|8102AC38,8102AC3A -part name in briefing|8102AC3C -name in menu|8102AC3E -stage load|8002AC43 -order in menu|8002AC4F -pointer to briefing call|8102AC50,8102AC52 - -Mission 2 - Severnaya -pointer to mission number|8102AC54,8102AC56 -mission name in briefing|8102AC58 -value 1-4|8002AC67 - -Part i - Surface 1 -pointer to part numeral|8102AC70,8102AC72 -part name in briefing|8102AC74 -name in menu|8102AC76 -stage load|8002AC7B -order in menu|8002AC87 -pointer to briefing call|8102AC88,8102AC8A - -Part ii - Bunker 1 -pointer to part numeral|8102AC8C,8102AC8E -part name in briefing|8102AC90 -name in menu|8102AC92 -stage load|8002AC96 -order in menu|8002ACA3 -pointer to briefing call|8102ACA4,8102AA6 - -Mission 3 - Kirghizstan -pointer to mission number|8102ACA8,8102ACAA -mission name in briefing|8102ACAC -value = 1|8002ACB7 -value = 1|8002ACBB - -Part i - Silo -pointer to part numeral|8102ACC4,8102ACC6 -part name in briefing|8102ACC8 -name in menu|8102ACCA -stage load|8002ACCF -value = 1|8002ACD3 -order in menu|8002ACDB -pointer to briefing call|8102ACDC,8102ACDE - -Mission 4 - Monte Carlo -pointer to mission number|8102ACE0,8102ACE2 -mission name in briefing|8102ACE4 -value = 1|8002ACEF -value = 1|8002ACF3 - -Part i - Frigate -pointer to part numeral|8102ACFC,8102ACFE -part name in briefing|8102AD00 -name in menu|8102AD02 -stage load|8002AD07 -value = 1|8002AD0B -order in menu|8002AD13 -pointer to briefing call|8102AD14,8102AD16 - -Mission 5 - Severnaya -pointer to mission number|8102AD18,8102AD1A -mission name in briefing|8102AD1C -value = 1|8002AD27 -value = 1|8002AD2B - -Part i - Surface 2 -pointer to part numeral|8102AD34,8102AD36 -part name in briefing|8102AD38 -name in menu|8102AD3A -stage load|8002AD3F -value = 1|8002AD43 -order in menu|8002AD4B -pointer to briefing call|8102AD4C,8102AD4E - -Part ii - Bunker 2 -pointer to part numeral|8102AD50,8102AD52 -part name in briefing|8102AD54 -name in menu|8102AD56 -stage load|8002AD5B -value = 1|8002AD5F -order in menu|8002AD67 -pointer to briefing call|8102AD68,8102AD6A - -Mission 6 - St. Petersburg -pointer to mission number|8102AD6C,8102AD6E -mission name in briefing|8102AD70 -value = 2|8002AD7B -value = 1|8002AD7F - -Part i - Statue -pointer to part numeral|8102AD88,8102AD8A -part name in briefing|8102AD8C -name in menu|8102AD8E -stage load|8002AD93 -value = 2|8002AD97 -order in menu|8002AD9F -pointer to briefing call|8102ADA0,8102ADA2 - -Part ii - Archives -pointer to part numeral|8102ADA4,8102ADA6 -part name in briefing|8102ADA8 -name in menu|8102ADAA -stage load|8002ADAF -value = 2|8002ADB3 -order in menu|8002ADBB -pointer to briefing call|8102ADBC,8102ADBE - -Part iii - Streets -pointer to part numeral|8102ADC0,8102ADC2 -part name in briefing|8102ADC4 -name in menu|8102ADC6 -stage load|8002ADCB -value = 2|8002ADCF -order in menu|8002ADD7 -pointer to briefing call|8102ADD8,8102ADDA - -Part iv - Depot -pointer to part numeral|8102ADDC,8102ADDE -part name in briefing|8102ADE0 -name in menu|8102ADE2 -stage load|8002ADE7 -value = 2|8002ADEB -order in menu|8002ADF3 -pointer to briefing call|8102ADF4,8102ADF6 - -Part v - Train -pointer to part numeral|8102ADF8,8102ADFA -part name in briefing|8102ADFC -name in menu|8102ADFE -stage load|8002AE03 -row value?|8002AE07 -order in menu|8002AE0F -pointer to briefing call|8102AE10,8102AE12 - -Mission 7 - Cuba -pointer to mission number|8102AE14,8102AE16 -mission name in briefing|8102AE18 -value = 3|8002AE23 -value = 1|8002AE27 - -Part i - Jungle -pointer to part numeral|8102AE30,8102AE32 -part name in briefing|8102AE34 -name in menu|8102AE36 -stage load|8002AE3B -value = 3|8002AE3F -order in menu|8002AE47 -pointer to briefing call|8102AE48,8102AE4A - -Part ii - Control -pointer to part numeral|8102AE4C,8102AE4E -part name in briefing|8102AE50 -name in menu|8102AE52 -stage load|8002AE57 -value = 3|8002AE5B -order in menu|8002AE63 -pointer to briefing call|8102AE64,8102AE66 - -Part iii - Caverns -pointer to part numeral|8102AE68,8102AE6A -part name in briefing|8102AE6C -name in menu|8102AE6E -stage load|8002AE73 -value = 3|8002AE77 -order in menu|8002AE7F -pointer to briefing call|8102AE80,8102AE82 - -Part iv - Cradle -pointer to part numeral|8102AE84,8102AE86 -part name in briefing|8102AE88 -name in menu|8102AE8A -stage load|8002AE8F -value = 3|8002AE93 -order in menu|8002AE9B -pointer to briefing call|8102AE9C,8102AE9E - -Mission 8 - Teotihuaca'n -pointer to mission number|8102AEA0,8102AEA2 -mission name in briefing|8102AEA4 -value = 4|8002AEAF -value = 1|8002AEB3 - -Part i - Aztec -pointer to part numeral|8102AEBC,8102AEBE -part name in briefing|8102AEC0 -name in menu|8102AEC2 -stage load|8002AEC7 -value = 4|8002AECB -order in menu|8002AED3 -pointer to briefing call|8102AED4,8102AED6 - -Mission 9 - el-Saghira -pointer to mission number|8102AED8,8102AEDA -mission name in briefing|8102AEDC -value = 4|8102AEE7 -value = 1|8002AEEB - -Part i - Egyptian -pointer to part numeral|8102AEF4,8102AEF6 -part name in briefing|8102AEF8 -name in menu|8102AEFA -stage load|8002AEFF -value = 4|8002AF03 -order in menu|8002AF0B -pointer to briefing call|8102AF0C,8102AF0E - -note... -8004f494 '1.' before 'select mission' -8004f498 '2.' before 'multiplayer' -8004f49c '3.' before 'cheat options' - -8004f4a4 ': ' used in mission line -8004f4ac ': ' used in part line - - -80023234 multiplayer menu option lock (01 locked) - -multiplayer menu options: -8002: -b523 # players -b527 player 1 char selected -b52b player 2 char selected -b52f player 3 char selected -b533 player 4 char selected -b537 # multiplayer stage slot selected (0-11) -b53b # text for game length on option screen -b53f # auto aim setting -b543 # text for scenario on option screen 0-8 (random crashes when you press start) -b547 lock stage select (00 lock, 01 open) -b54b lock game length -b54f lock character select -b553 lock weapon select -b557 lock health -b55b lock control style -b55f lock aim adjustment - -game length -00 unlimitted -01 5 min -02 10 min -03 20 min -04 5 points -05 10 points -06 20 points -07 last person alive wins -08 normal -09 man w/ golden gun -0a team:3vs1 - -auto aim -00 sight off,aim off -01 sight on,aim off -02 sight off,aim on -03 sight on,aim on \ No newline at end of file diff --git a/notes/GE Documentation/GameShark - GE specific/suit and cuff mod.txt b/notes/GE Documentation/GameShark - GE specific/suit and cuff mod.txt deleted file mode 100644 index a8a98f0..0000000 --- a/notes/GE Documentation/GameShark - GE specific/suit and cuff mod.txt +++ /dev/null @@ -1,89 +0,0 @@ - Dam 1 800D337F 00XX -2 Facility 800B677F 00XX -3 Runway, Surface A, Depot 800D977F 00XX -4 Frigate 800C6B7F 00XX -5 Bunker A, B, & Silo 800B3F7F 00XX -6 Aztec 800B037F 00XX -7 Archives, Caverns, Cradle, Egyptian 800CCF7F 00XX -8 Statue 800C577F 00XX -9 Streets 800D6F7F 00XX -10 Surface B 800E5F7F 00XX -11 Train, Jungle, Control Centre 800C077F 00XX -Bond Suit Modifiers (1P Mode) -12 Boiler Bond 8103DFCA ???? -8103DFCE ???? -8103DFD8 ???? -13 Suit Bond 8103DFDC ???? -8103DFE2 ???? -8103DFEC ???? -14 Timber Bond 8103DFF2 ???? -8103DFF6 ???? -8103E000 ???? -15 Snow Bond 8103E006 ???? -8103E00A ???? -8103E014 ???? -16 Natalya 8103DF52 ???? -8103DF56 ???? -8103DF60 ???? -17 Baron Samedi (All of Him) 2 8103DF02 ???? -8103DF06 ???? -8103DF10 ???? -# Note - 1 What is most curious is that there are 4 suits from 05-08, and the first has a white cuff at the watch pause menu. I think it is reasonable that the four all bonds were slated for single player, especially after that pic of all the all bonds in the menu, and perhaps the idea that they all had their own levels. - -I think the models for the old suits are gone, perhaps the textures are still there though. - -00 - Blue Suit -01 - Tuxedo -02 - Jungle Bond -03 - Boiler Bond -04 - Snow Bond -05 - White Cuffs (Connery's White Tuxedo?!) -06 - Tuxedo Bond (Black Cuff) -07 - Tuxedo Bond (Black Cuff) -08 - Tuxedo Bond (Black Cuff) -09+ - Invisible Arm (Blue Suit On Bond) - - -D410 6E80 0100 00 Camo Guard -D430 6E8C 0100 01 Grey Guard -D450 6E98 0100 02 Olive Guard -D470 6EA8 0100 03 Rus Guard -D490 6EB4 0100 04 Trev Guard -D910 6EC0 0100 05 djBond -D4B0 6ECC 0101 06 Boris -D4D0 6ED4 0101 07 Ouromov -D4F0 6EE0 0101 08 Trevelyan -D510 6EEC 0101 09 BoilerTrev -D530 6EFC 0101 0A Valentin -D550 6F08 0001 0B Xenia -D570 6F10 0101 0C Baron Samedi -D590 6F20 0101 0D Jaws -D5B0 6F28 0001 0E MayDay -D5D0 6F34 0101 0F OddJob -D5F0 6F40 0001 10 Natalya -D610 6F4C 0100 Armour Guard -D630 6F5C 0100 ConmGuard -D650 6F68 0100 Great Guard -D670 6F78 0100 Navy Guard -D690 6F84 0101 Snow Guard -D890 6F90 0100 Boiler Bond -D8B0 6FA0 0100 Suit Bond -D8D0 6FAC 0100 Timber Bond -D8F0 6FBC 0101 Snow Bond -D6B0 6FC8 0100 Blue Woman -D6D0 6FD4 0100 Fastech Woman -D6F0 6FE4 0100 Tech Woman -D710 6FF0 0100 Jean Woman -D730 6FFC 0000 Grey Man -D750 7008 0000 Blue Man -D770 7014 0000 Red Man -D790 7020 0000 Cardiman -D7B0 702C 0100 Check Man -D7D0 7038 0100 Tech Man -D7F0 7044 0101 Pilot -D810 704C 0100 Great Guard -D830 705C 0100 BlueCam Guard -D850 706C 0100 Moonguard -D870 7078 0100 Moonguardfemale -D930 7088 0100 suit_lf_hand (big hand) diff --git a/notes/GE Documentation/GameShark - GE specific/trev in fac.txt b/notes/GE Documentation/GameShark - GE specific/trev in fac.txt deleted file mode 100644 index 90f8d07..0000000 --- a/notes/GE Documentation/GameShark - GE specific/trev in fac.txt +++ /dev/null @@ -1,16 +0,0 @@ -Trev Army - err, well they ALLLL COME, and keep on coming, too laggy, -ouromov doesn't come. -81357770 2402 -81357772 0008 -81357808 2404 -8135780A 0413 - -Trev Army Better! -81357770 2402 -81357772 0008 -5000311C 0000 -811CFE0A 0413 -50000B1C 0000 -811D0366 0413 -5000041C 0000 -811D055A 0413 diff --git a/notes/GE Documentation/Gameplay and Misc/70006968 - return to title from stage.txt b/notes/GE Documentation/Gameplay and Misc/70006968 - return to title from stage.txt deleted file mode 100644 index 6f2ff91..0000000 --- a/notes/GE Documentation/Gameplay and Misc/70006968 - return to title from stage.txt +++ /dev/null @@ -1,21 +0,0 @@ -70006968 7568 return to title screen from end of stage -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000695C ;V0=stage# -NOP -ADDIU AT,R0,0036 -BEQ V0,AT,7000699C ;branch if stage 36: Cuba -NOP -JAL 7F0574B8 ;V0= TRUE if objectives completed -NOP -BEQ V0,R0,7000699C ;branch if incomplete -NOP -JAL 7F01D39C ; -NOP -//7000699C: return to title and return -JAL 70006930 ;run title (0x5A to stage#) -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/7F081974 - player gameplay interaction.txt b/notes/GE Documentation/Gameplay and Misc/7F081974 - player gameplay interaction.txt deleted file mode 100644 index b932c85..0000000 --- a/notes/GE Documentation/Gameplay and Misc/7F081974 - player gameplay interaction.txt +++ /dev/null @@ -1,2643 +0,0 @@ -7F081974 B64A4 player gameplay interaction - accepts: A0=, A1=, A2=controller 1 cur.in, A3=controller 1 prev.in, SP+10= -ADDIU SP,SP,FE40 -SDC1 F20,0030 (SP) -MTC1 R0,F20 -SW RA,003C (SP) -SW S0,0038 (SP) -SW A0,01C0 (SP) -SW A1,01C4 (SP) -SW A2,01C8 (SP) ;A2->SP+1C8: controller 1 cur. -SW A3,01CC (SP) ;A3->SP+1CC: controller 1 prev. -SW R0,01BC (SP) -SW R0,01B8 (SP) -SW R0,01B4 (SP) -SW R0,01B0 (SP) ;0->SP+1B0: CANCEL button state -SW R0,01AC (SP) -SW R0,01A8 (SP) -SW R0,01A4 (SP) -SW R0,01A0 (SP) -SW R0,019C (SP) -SW R0,0198 (SP) -SW R0,0194 (SP) -SW R0,0190 (SP) -SW R0,0174 (SP) -SW R0,0170 (SP) -SW R0,016C (SP) -SW R0,0168 (SP) -SW R0,015C (SP) -SW R0,0158 (SP) -SW R0,0154 (SP) -SW R0,0150 (SP) -SW R0,014C (SP) ;0->SP+14C: remote mine detonation -SW R0,0148 (SP) -SWC1 F20,018C (SP) ;0->SP+18C: -SWC1 F20,0188 (SP) ;0->SP+188: -SWC1 F20,0184 (SP) ;0->SP+184: -SWC1 F20,0180 (SP) ;0->SP+180: -SWC1 F20,017C (SP) ;0->SP+17C: -SWC1 F20,0178 (SP) ;0->SP+178: -SWC1 F20,0164 (SP) ;0->SP+164: -//7F081A0C: -JAL 7F0A4E38 ;V0= cur.player's look up/down setting [80040A84] -SWC1 F20,0160 (SP) ;0->SP+160: -LB A0,01C3 (SP) -SLTIU T6,V0,0001 ;T6=V0^1 -SW T6,0144 (SP) ;T6->SP+144: TRUE if reverse look up/down -SLTI AT,A0,FFFB -BEQ AT,R0,7F081A34 -SW R0,0140 (SP) ;0->SP+140: -BEQ R0,R0,7F081A48 -ADDIU V1,A0,0005 -//7F081A34: -SLTI AT,A0,0006 -BNE AT,R0,7F081A48 -OR V1,R0,R0 -BEQ R0,R0,7F081A48 -ADDIU V1,A0,FFFB -//7F081A48: -LB A1,01C7 (SP) -LUI S0,8008 -ADDIU S0,S0,A0B0 ;S0=8007A0B0 -SLTI AT,A1,FFFB -BEQ AT,R0,7F081A68 -LB T7,01C3 (SP) -BEQ R0,R0,7F081A7C -ADDIU V0,A1,0005 -//7F081A68: -SLTI AT,A1,0006 -BNE AT,R0,7F081A7C -OR V0,R0,R0 -BEQ R0,R0,7F081A7C -ADDIU V0,A1,FFFB -//7F081A7C: -LB T8,01C7 (SP) -LW T0,0000 (S0) ;T0=p->BONDdata -SW T7,0134 (SP) -SW V1,012C (SP) -SW V0,0128 (SP) -SW V1,0124 (SP) -SW V0,0120 (SP) -SW T8,0130 (SP) -LW T9,00D8 (T0) ;T9=BONDdata+D8: player button control -BNE T9,R0,7F081B10 ;branch if control disabled -LUI T2,8003 -LW T2,6424 (T2) ;T2=80036424: -BGTZL T2,7F081B14 -LW T0,0000 (S0) -LW V0,01C8 (T0) ;V0=BONDdata+1C8: -ADDIU AT,R0,0005 -LHU T4,01CE (SP) ;T4=controller 1 prev. -BEQL V0,AT,7F081AE0 -ADDIU AT,R0,0005 -LHU T3,01CA (SP) ;T3=controller 1 cur. -NOR T5,T4,R0 ;T5=prev->mask -AND T6,T3,T5 ;T6=pressed buttons -ANDI T7,T6,1000 ;T7=test if pressed START -BNE T7,R0,7F081AF4 ;branch if pressed START -ADDIU AT,R0,0005 -//7F081AE0: pressed START -BNEL V0,AT,7F081B14 -LW T0,0000 (S0) -LW T8,01D0 (T0) ;T8=BONDdata+1D0: state (open/closed) of solo watch menu -BEQL T8,R0,7F081B14 ;branch if closed -LW T0,0000 (S0) -//7F081AF4: watch menu open -JAL 7F09A464 ;V0=# players -NOP -ADDIU AT,R0,0001 -BNEL V0,AT,7F081B14 ;branch if multiplayer -LW T0,0000 (S0) -JAL 7F07F874 ;1->trigger solo watch menu [BONDdata+1D0] -OR A0,R0,R0 ;A0=0 -//7F081B10: test if gameplay stopped, etc. -LW T0,0000 (S0) ;T0=p->BONDdata -LW T9,01C8 (T0) -BNEL T9,R0,7F0829CC -LW T2,0000 (S0) -LW T2,00D8 (T0) ;T2=BONDdata+D8: player button control -BNEL T2,R0,7F0829CC -LW T2,0000 (S0) -JAL 7F09A464 ;V0=# players -NOP -ADDIU AT,R0,0001 -BEQ V0,AT,7F081B5C ;branch if solo -LUI T4,8009 -LW T4,C700 (T4) ;T4=8008C700: TRUE if play stopped -LUI T3,8009 -BNEL T4,R0,7F0829CC ;branch if play stopped -LW T2,0000 (S0) -LW T3,C704 (T3) ;T3=8008C704: TRUE when game over -BNEL T3,R0,7F0829CC ;branch if game over -LW T2,0000 (S0) -//7F081B5C: figure out control type and set masks -LHU T5,01CA (SP) ;T5=SP+1CA: controller 1 cur. -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -SW T5,005C (SP) ;SP+5C= controller 1 button cur. input -ADDIU AT,R0,0006 -BEQL V0,AT,7F081BB4 ;branch if type 6: 2.3 -LHU T7,01CE (SP) -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0007 -BEQL V0,AT,7F081BB4 ;branch if type 7: 2.4 -LHU T7,01CE (SP) -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0005 -BEQL V0,AT,7F081BB4 ;branch if type 5: 2.2 -LHU T7,01CE (SP) -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0004 -BNE V0,AT,7F0822B8 ;branch if not type 4: 2.1 -NOP -//7F081BB0: dual-controller types -LHU T7,01CE (SP) ;T7=SP+1CE: controller 1 prev. -LW T6,005C (SP) ;T6=SP+5C: controller 1 cur. -NOR T8,T7,R0 ;T8=prev->mask -AND T9,T6,T8 ;T9=held buttons -JAL 7F09B150 ;V0=8007A0B8: cur.player# -SW T9,0060 (SP) ;SP+60= controller 1 held -JAL 7F09A464 ;V0=# players -SW V0,0064 (SP) ;SP+64= cur.player# -LW T2,0064 (SP) ;T2=cur.player# -ADDU A0,V0,T2 ;A0=#players+cur. -SLL T4,A0,0x18 -JAL 7000C0EC ;V0= current position left<->right of controller A0's control stick -SRA A0,T4,0x18 ;A0 & 0xFF -JAL 7F09B150 ;V0=8007A0B8: cur.player# -SB V0,011F (SP) ;V0->SP+11F: stick1 horz.pos -JAL 7F09A464 ;V0=# players -SW V0,0064 (SP) -LW T5,0064 (SP) -ADDU A0,V0,T5 -SLL T7,A0,0x18 -JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -SRA A0,T7,0x18 -JAL 7F09B150 ;V0=8007A0B8: cur.player# -SB V0,011E (SP) ;V0->SP+11E: stick1 vert.pos -JAL 7F09A464 ;V0=# players -SW V0,0064 (SP) -LW T8,0064 (SP) -ORI A1,R0,FFFF -ADDU A0,V0,T8 -SLL T9,A0,0x18 -JAL 7000C30C ;V0= player A0's buttons A1 held -SRA A0,T9,0x18 -LW T3,0000 (S0) ;T3=p->BONDdata -LB T4,011F (SP) ;T4=SP+11F: stick1 horz.pos -SH V0,011C (SP) ;V0->SP+11C: cont1 held buttons -LHU T5,03B6 (T3) -SLTI AT,T4,FFFB ;TRUE if horz.pos < -5 -OR V1,T4,R0 ;V1=horz.pos -BEQ AT,R0,7F081C58 ;branch if >= -5 -SH T5,011A (SP) ;T5->SP+11A -BEQ R0,R0,7F081C70 -ADDIU V1,T4,0005 ;V1=horz.pos+5 -//7F081C58: draw horz.pos in increments of 5 toward zero -SLTI AT,V1,0006 ;TRUE if pos < 6 -BNE AT,R0,7F081C70 ;zeroes if within 5 - -5 -OR V1,R0,R0 ;V1=0 -LB V1,011F (SP) ;V1=SP+11F: stick1 horz.pos -BEQ R0,R0,7F081C70 -ADDIU V1,V1,FFFB ;V1-=5 -//7F081C70: draw vert.pos in increments of 5 toward zero -LB V0,011E (SP) -SLTI AT,V0,FFFB -BEQ AT,R0,7F081C88 -ADDIU T7,V0,0005 -BEQ R0,R0,7F081CA0 -SW T7,0110 (SP) ;T7->SP+110: vert.pos -//7F081C88: -SLTI AT,V0,0006 -BNE AT,R0,7F081C9C -ADDIU T6,V0,FFFB -BEQ R0,R0,7F081CA0 -SW T6,0110 (SP) ;T6->SP+110: vert.pos -//7F081C9C: -SW R0,0110 (SP) ;0->SP+110: vert.pos -//7F081CA0: generate masks for each control type -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -SW V1,0114 (SP) ;V1->SP+114: horz.pos -ADDIU AT,R0,0004 -BEQ V0,AT,7F081CC8 ;branch if 2.1 -LW V1,0114 (SP) ;V1=SP+114: horz.pos -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -SW V1,0114 (SP) ;needlessly store the value -ADDIU AT,R0,0006 -BNE V0,AT,7F081CD8 ;branch if not 2.3 -LW V1,0114 (SP) ;V1=SP+114: horz.pos -//7F081CC8: Plenty, Domino -LW T8,0110 (SP) ;T8=SP+110: vert.pos -SW V1,0124 (SP) ;V1->SP+124: horz.MOVE reg -BEQ R0,R0,7F081D10 -SW T8,0128 (SP) ;T8->SP+128: vert.MOVE reg -//7F081CD8: Galore, Goodhead -LUI T9,8003 -LW T9,6448 (T9) ;T9=80036448: tank occupied flag -ADDIU AT,R0,0001 -BNEL T9,AT,7F081D08 ;branch if not occupied -SW V1,0124 (SP) -LW T2,0000 (S0) ;T2=p->BONDdata -LW T3,0124 (T2) ;T3=BONDdata+124: set when aiming -BNEL T3,R0,7F081D08 ;branch if aiming -SW V1,0124 (SP) -BEQ R0,R0,7F081D08 -SW V1,012C (SP) ;V1->SP+12C: horz.LOOK reg -//7F081D04: when aiming, set as MOVE -SW V1,0124 (SP) ;V1->SP+124: horz.MOVE reg -LW T5,0110 (SP) ;T5=vert.pos -SW T5,0120 (SP) ;T5->SP+120: vert.MOVE reg -//7F081D10: -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0004 -BEQL V0,AT,7F081D3C ;branch if 2.1 -LHU V0,011C (SP) -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0005 -BNE V0,AT,7F081D8C ;branch if not 2.2 -LW T9,005C (SP) ;T9=SP+5C: controller 1 cur. -//7F081D38: Plenty, Galore -LHU V0,011C (SP) ;V0=SP+11C: cont1 held -LHU T6,011A (SP) ;T6=SP+11A: -LW T3,005C (SP) ;T3=SP+5C: controller 1 cur. -ANDI T4,V0,2000 ;T4=Z pressed -SLTU T7,R0,T4 ;T7=TRUE if pressed -SW T7,0104 (SP) ;T7->SP=104: pressed FIRE -LW T7,0060 (SP) ;T7=SP+60: controller 1 held -NOR T8,T6,R0 ;T8=T6->mask -AND V1,V0,T8 ;V1=held on controller 1 -ANDI T9,V1,2000 ;T9=held Z+mask -ANDI T5,T3,2000 ;T5=pressed Z -ANDI T6,T7,2000 ;T6=held Z -SLTU T2,R0,T9 ;T2=TRUE if held+masked -SLTU T4,R0,T5 ;T4=TRUE if pressed -SLTU T8,R0,T6 ;T8=TRUE if held -SW T2,0100 (SP) ;T2->SP+100: TRUE if held+mask -SW T4,010C (SP) ;T4->SP+10C: TRUE if pressed -SW T8,0108 (SP) ;T8->SP+108: TRUE if held -SW V1,0050 (SP) ;V1->SP+50: cont1 held+mask -BEQ R0,R0,7F081DD8 -SW V0,0058 (SP) ;V0->SP+58: cont1 held -//7F081D8C: Domino, Goodhead -ANDI T2,T9,2000 -LHU T9,011A (SP) -LW T5,0060 (SP) -LHU V0,011C (SP) -SLTU T3,R0,T2 -NOR T2,T9,R0 -SW T3,0104 (SP) -ANDI T4,T5,2000 -AND V1,V0,T2 -ANDI T3,V1,2000 -ANDI T6,V0,2000 -SLTU T7,R0,T4 -SLTU T8,R0,T6 -SLTU T5,R0,T3 -SW T7,0100 (SP) -SW T8,010C (SP) -SW T5,0108 (SP) -SW V1,0050 (SP) -SW V0,0058 (SP) -//7F081DD8: -JAL 7F0BFC04 ;V0=80048370 1 locks player controls? -NOP -BNEL V0,R0,7F082260 ;branch if set -LW V0,010C (SP) -JAL 7F0C24BC ;V0= TRUE if 1 player or play not stopped and player not in MP menu -NOP -BEQL V0,R0,7F082260 ;branch if either condition TRUE -LW V0,010C (SP) -//7F081DF8: handle aiming under aim control setting -JAL 7F0A4E80 ;V0= cur.player's aim control setting [80040A9C] -NOP -BNEL V0,R0,7F081E1C ;branch if toggle (1), not hold (0) -LW T6,0100 (SP) -LW T4,0104 (SP) -LW T7,0000 (S0) ;T7=p->BONDdata -BEQ R0,R0,7F081E34 -SW T4,0124 (T7) -//7F081E18: aim control--toggle -LW T6,0100 (SP) -BEQL T6,R0,7F081E38 -LW T9,0000 (S0) -LW T0,0000 (S0) ;T0=p->BONDdata -LW A1,0124 (T0) ;A1=BONDdata+124: aiming flag -SLTIU T8,A1,0001 ;T8=flag^1 -SW T8,0124 (T0) ;update flag -//7F081E34: -LW T9,0000 (S0) ;T9=p->BONDdata -LW A0,0060 (SP) -ADDIU T7,R0,0001 -LW V1,0124 (T9) -ANDI T2,A0,4000 -SLTU T3,R0,T2 -SLTIU V0,V1,0001 -SW V0,01BC (SP) -SW V0,0148 (SP) -OR A1,T3,R0 -SW T3,0048 (SP) -BNE T3,R0,7F081E78 -SW V1,01B8 (SP) -LW A1,0050 (SP) -SW T3,0048 (SP) -ANDI T5,A1,4000 -SLTU A1,R0,T5 -//7F081E78: -SW A1,01B0 (SP) ;A1->SP+1B0: CANCEL button state -SW V0,01AC (SP) -SW T7,01A8 (SP) -SW V0,01A4 (SP) -BEQ V1,R0,7F081ED4 -SW V0,01A0 (SP) -LB A0,01C7 (SP) -SLTI AT,A0,003D -BNE AT,R0,7F081ED4 -ADDIU T6,A0,FFC4 -MTC1 T6,F4 -LUI AT,4120 -MTC1 AT,F2 -CVT.S.W F6,F4 -LUI AT,3F80 -MTC1 AT,F12 -DIV.S F0,F6,F2 -C.LT.S F12,F0 -SWC1 F0,0184 (SP) -BC1F 7F081EE8 -NOP -BEQ R0,R0,7F081EE8 -SWC1 F12,0184 (SP) -//7F081ED4: -LUI AT,3F80 -MTC1 AT,F12 -LUI AT,4120 -MTC1 AT,F2 -LB A0,01C7 (SP) -//7F081EE8: -BEQ V1,R0,7F081F20 -SLTI AT,A0,FFC4 -BEQ AT,R0,7F081F20 -ADDIU T8,R0,FFC4 -SUBU T9,T8,A0 -MTC1 T9,F8 -NOP -CVT.S.W F10,F8 -DIV.S F0,F10,F2 -C.LT.S F12,F0 -SWC1 F0,0180 (SP) -BC1F 7F081F20 -NOP -SWC1 F12,0180 (SP) -//7F081F20: -BEQ V1,R0,7F081F64 -OR A0,R0,R0 -LB V0,01C3 (SP) -ADDIU T2,R0,FFC4 -SLTI AT,V0,FFC4 -BEQ AT,R0,7F081F64 -SUBU T3,T2,V0 -MTC1 T3,F18 -NOP -CVT.S.W F4,F18 -DIV.S F0,F4,F2 -C.LT.S F12,F0 -SWC1 F0,017C (SP) -BC1F 7F081F68 -NOP -BEQ R0,R0,7F081F68 -SWC1 F12,017C (SP) -//7F081F64: -LB V0,01C3 (SP) -BEQ V1,R0,7F081F9C -SLTI AT,V0,003D -BNE AT,R0,7F081F9C -ADDIU T5,V0,FFC4 -MTC1 T5,F6 -NOP -CVT.S.W F8,F6 -DIV.S F0,F8,F2 -C.LT.S F12,F0 -SWC1 F0,0178 (SP) -BC1FL 7F081FA0 -LW T4,005C (SP) -SWC1 F12,0178 (SP) -//7F081F9C: -LW T4,005C (SP) ;T4=cont1 cur. -ANDI T7,T4,8000 ;T7=A button -SLTU T6,R0,T7 ;T6=TRUE if A pressed -BNE T6,R0,7F081FC4 ;branch if pressed -SW T6,004C (SP) -LW V0,0058 (SP) ;V0=cont1 held -ANDI T8,V0,8000 ;T8=A button -SLTU A1,R0,T8 ;A1=TRUE if A held -BEQL A1,R0,7F081FD4 ;branch if not held -LW T3,0060 (SP) -//7F081FC4: -LW A1,0108 (SP) -SLTU T2,R0,A1 -OR A1,T2,R0 -LW T3,0060 (SP) -//7F081FD4: -SW A1,0174 (SP) -ANDI T5,T3,8000 -SLTU T4,R0,T5 -BNE T4,R0,7F081FFC -SW T4,0044 (SP) -LW V0,0050 (SP) -ANDI T7,V0,8000 -SLTU A1,R0,T7 -BEQL A1,R0,7F08200C -SW A1,0170 (SP) -//7F081FFC: -LW A1,010C (SP) -SLTIU T8,A1,0001 -OR A1,T8,R0 -//7F082008: -SW A1,0170 (SP) -SW V1,016C (SP) -JAL 7F05D9D0 ;V0=item# in use -SW V1,0168 (SP) -OR A0,V0,R0 -JAL 7F05E0B4 ;V0=TRUE if any of mask A1 is present in item A0's special attributes -ORI A1,R0,8000 ;A1=inhibit crouch -BEQ V0,R0,7F0820C8 ;branch if attribute not found -NOP -LW T9,0000 (S0) ;T9=p->BONDdata -LW V0,0110 (SP) -LW T2,0124 (T9) -BEQ T2,R0,7F0820C8 -NOP -BGEZ V0,7F082084 -SUBU T3,R0,V0 -MTC1 T3,F10 -LUI AT,3F80 -MTC1 AT,F2 -CVT.S.W F18,F10 -LUI AT,428C -MTC1 AT,F4 -NOP -DIV.S F12,F18,F4 -C.LT.S F2,F12 -NOP -BC1FL 7F082080 -ADD.S F12,F12,F12 -MOV.S F12,F2 -ADD.S F12,F12,F12 -SWC1 F12,0164 (SP) -//7F082084: -LUI AT,3F80 -MTC1 AT,F2 -BLEZ V0,7F0820C8 -LWC1 F12,0164 (SP) -MTC1 V0,F6 -LUI AT,428C -MTC1 AT,F10 -CVT.S.W F8,F6 -DIV.S F14,F8,F10 -C.LT.S F2,F14 -NOP -BC1FL 7F0820C0 -ADD.S F14,F14,F14 -MOV.S F14,F2 -ADD.S F14,F14,F14 -SWC1 F12,0164 (SP) -SWC1 F14,0160 (SP) -//7F0820C8: -JAL 7F05D9D0 ;V0=item# in use -OR A0,R0,R0 -OR A0,V0,R0 -JAL 7F05E0B4 ;V0=TRUE if any of mask A1 is present in item A0's special attributes -ORI A1,R0,8000 ;A1=inhibit crouch -SLTIU A1,V0,0001 ;A1=V0^1 -BEQ A1,R0,7F082108 ;branch if inhibiting crouch -OR A0,R0,R0 -LW T5,0000 (S0) ;T5=p->BONDdata -LW A1,0124 (T5) -SLTU T4,R0,A1 -BEQ T4,R0,7F082108 -OR A1,T4,R0 -LB A1,011E (SP) ;V0->SP+11E: stick1 vert.pos -SLTI T7,A1,FFE2 -OR A1,T7,R0 -//7F082108: -JAL 7F05D9D0 ;V0=item# in use -SW A1,015C (SP) -OR A0,V0,R0 -JAL 7F05E0B4 ;V0=TRUE if any of mask A1 is present in item A0's special attributes -ORI A1,R0,8000 ;A1=inhibit crouch -SLTIU A1,V0,0001 ;A1=V0^1 -BEQL A1,R0,7F08214C ;branch if inhibiting crouch -LW T2,004C (SP) -LW T6,0000 (S0) ;T6=p->BONDdata -LW A1,0124 (T6) ;A1=BONDdata+124: TRUE if aiming -SLTU T8,R0,A1 ;T8=aim^1 -BEQ T8,R0,7F082148 ;branch if aiming -OR A1,T8,R0 -LB A1,011E (SP) ;V0->SP+11E: stick1 vert.pos -SLTI T9,A1,001F -XORI A1,T9,0001 ;A1=TRUE if 30% up or more -//7F082148: -LW T2,004C (SP) -SW A1,0158 (SP) ;SP+158= 1 if forward -LW T3,0048 (SP) -BEQ T2,R0,7F082160 -LW T5,005C (SP) ;T5=cont1 cur. -BNE T3,R0,7F0821A8 -//7F082160: -ANDI T4,T5,4000 ;T4=B button -BEQ T4,R0,7F082174 ;branch if B not pressed -LW T7,0044 (SP) -BNE T7,R0,7F0821A8 -NOP -//7F082174: -LW T6,0058 (SP) -LW T9,0050 (SP) -LW T3,0058 (SP) -ANDI T8,T6,8000 -BEQ T8,R0,7F082190 ;skip if A not ? -ANDI T2,T9,4000 -BNE T2,R0,7F0821A8 ;skip if B not ? -//7F082190: -ANDI T5,T3,4000 -BEQ T5,R0,7F0821CC ;skip if B not ? -LW T4,0050 (SP) -ANDI T7,T4,8000 -BEQ T7,R0,7F0821CC ;branch if A not ? -NOP -//7F0821A8: -JAL 7F05D9D0 ;V0=item# in use -OR A0,R0,R0 -ADDIU AT,R0,001D ;AT=1D: remote mines -BNE V0,AT,7F0821CC ;branch if not remote mines -ADDIU T6,R0,0001 -SW T6,014C (SP) ;1->SP+14C: remote mines detonated -SW R0,0174 (SP) ;0->SP+174: disable backward advance -SW R0,0170 (SP) ;0->SP+170: disabled advance -SW R0,01B0 (SP) ;0->SP+1B0: disable cancel button -//7F0821CC: -LUI T8,8003 -LW T8,6448 (T8) ;T8=80036448: TRUE if in tank -ADDIU AT,R0,0001 -BNEL T8,AT,7F082260 ;branch if not in tank -LW V0,010C (SP) -LW T9,0000 (S0) ;T9=p->BONDdata -LW T2,0124 (T9) -BEQL T2,R0,7F082260 -LW V0,010C (SP) -JAL 7F05D9D0 ;V0=item# in use -OR A0,R0,R0 -ADDIU AT,R0,0020 ;AT=20: tank -BNE V0,AT,7F082220 ;branch if tank weapon not in use -LW T4,0124 (SP) -LW T3,0124 (SP) -SW R0,0134 (SP) ;0->SP+134: -LW T5,012C (SP) -BNEL T3,R0,7F082258 -SWC1 F20,017C (SP) -BEQ R0,R0,7F082254 -SW T5,0124 (SP) -//7F082220: -BNE T4,R0,7F082254 -LWC1 F18,017C (SP) -C.LT.S F20,F18 -NOP -BC1FL 7F082240 -LWC1 F4,0178 (SP) -SWC1 F18,018C (SP) -LWC1 F4,0178 (SP) -C.LT.S F20,F4 -NOP -BC1FL 7F082258 -SWC1 F20,017C (SP) -SWC1 F4,0188 (SP) -//7F082254: -SWC1 F20,017C (SP) -SWC1 F20,0178 (SP) -//7F08225C: -LW V0,010C (SP) -LW T0,0000 (S0) ;T0=p->BONDdata -ADDIU T5,R0,0001 -SLTU A1,R0,V0 -BEQL A1,R0,7F0822A8 -LHU T4,011C (SP) -LW A1,01C8 (T0) -LW V0,005C (SP) ;V0=cont1 cur. -SLTIU T6,A1,0001 -BEQ T6,R0,7F0822A4 -OR A1,T6,R0 -ANDI T8,V0,8000 ;T8=A button -SLTIU A1,T8,0001 ;A1=TRUE if A not pressed -BEQL A1,R0,7F0822A8 ;branch if A pressed -LHU T4,011C (SP) -LW A1,0058 (SP) -ANDI T2,A1,8000 -SLTIU A1,T2,0001 -//7F0822A4: -LHU T4,011C (SP) -SW A1,01B4 (SP) -SW T5,0140 (SP) -BEQ R0,R0,7F0829C8 -SH T4,03B6 (T0) -//7F0822B8: single-controller -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0002 -BEQL V0,AT,7F0822E4 ;branch if type 1.3 -//7F0829C8: set controller masks for each control type -ORI T7,R0,8000 -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0003 -BNE V0,AT,7F0822F8 ;branch if not type 1.4 -ADDIU T8,R0,2000 ;T8=2000: Z button -//7F0822E0: Kissy, Goodnight -ORI T7,R0,8000 ;T7=8000: A button -ADDIU T6,R0,0030 -SH T7,00FE (SP) ;8000->SP+FE: mask for FIRE -ADDIU V1,R0,2000 ;V1=2000: Z button -BEQ R0,R0,7F082308 -SH T6,00FA (SP) ;0030->SP+FA: mask for WEAPON -//7F0822F8: Honey, Solitaire -ORI T9,R0,8000 -SH T8,00FE (SP) ;2000->SP+FE: mask for FIRE -ADDIU V1,R0,0030 ;V1=0030: L,R buttons -SH T9,00FA (SP) ;8000->SP+FA: mask for WEAPON -//7F082308: figure out if you're even reading control input -JAL 7F0BFC04 ;V0=80048370 1 locks player controls? -SH V1,00FC (SP) ;V1->SP+FC: mask for AIM -BNE V0,R0,7F082960 ;branch if controls locked -LHU V1,00FC (SP) ;V1=SP+FC: mask for AIM -JAL 7F0C24BC ;V0= TRUE if 1 player or play not stopped and player not in MP menu -SH V1,00FC (SP) ;needlessly save it back -BEQ V0,R0,7F082960 -LHU V1,00FC (SP) ;V1=SP+FC: mask for AIM -//7F082328: -LHU T3,01CE (SP) ;T3=cont1 prev. -LW T2,005C (SP) ;T2=cont1 cur. -SH V1,00FC (SP) ;needlessly save it back -NOR T5,T3,R0 ;T5=prev->mask -AND T4,T2,T5 ;T4=cont1 repeat -JAL 7F0A4E80 ;V0= cur.player's aim control setting [80040A9C] -SW T4,0060 (SP) ;T4->SP+60: cont1 repeat -BNE V0,R0,7F082364 ;branch if toggle (1), not hold (0) -LHU V1,00FC (SP) ;V1=SP+FC: mask for AIM -LW T7,005C (SP) ;T7=cont1 cur. -LW T9,0000 (S0) ;T9=p->BONDdata -AND T6,T7,V1 ;T6=AIM -SLTU T8,R0,T6 ;T8=TRUE if AIM pressed -BEQ R0,R0,7F082384 -SW T8,0124 (T9) ;T8->BONDdata+124: AIMing -//7F082364: aim control--toggle -LW T3,0060 (SP) -AND T2,T3,V1 -BEQL T2,R0,7F082388 -LW T4,0000 (S0) -LW T0,0000 (S0) ;T0=p->BONDdata -LW A1,0124 (T0) ;A1=BONDdata+124: set when aiming -SLTIU T5,A1,0001 -SW T5,0124 (T0) -//7F082384: -LW T4,0000 (S0) ;T4=p->BONDdata -LW V0,0060 (SP) ;V0=SP+60: cont1 held -LW V1,0124 (T4) ;V1=BONDdata+124: set when aiming -ANDI T7,V0,4000 ;T7=B button -SLTU T6,R0,T7 ;T6=TRUE if B pressed -SLTIU A1,V1,0001 ;A1=V1^1 -SW A1,01BC (SP) ;A1->SP+1BC: -SW A1,0148 (SP) ;A1->SP+148: -SW T6,01B0 (SP) ;T6->SP+1B0: CANCEL button state -SW T6,0048 (SP) ;T6->SP+48: -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -SW V1,01B8 (SP) ;V1=SP+1B8: -ADDIU AT,R0,0001 -BEQL V0,AT,7F0823D8 ;branch if 1.2 -LW V0,005C (SP) -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0003 -BNE V0,AT,7F0824E0 ;branch if not 1.4 -LW A2,005C (SP) ;A2=cont1 cur. -//7F0823D4: Solitaire, Goodnight -LW V0,005C (SP) -LUI A0,8003 -ANDI A2,V0,0202 ;A2=analog left -//7F0823E0: handle analog left -SLTU T8,R0,A2 ;T8=TRUE when analog left -BEQ T8,R0,7F082438 ;branch if not pressing left -OR A2,T8,R0 ;A2=T8: TRUE if analog left -LW T9,0000 (S0) ;T9=p->BONDdata -LUI T2,8003 -LUI AT,3F80 -LW T3,0124 (T9) -BNEL T3,R0,7F082430 -MTC1 AT,F8 -LW T2,6448 (T2) -ADDIU AT,R0,0001 -ADDIU T5,R0,0001 -BNE T2,AT,7F082424 -LUI AT,3F80 -MTC1 AT,F6 -BEQ R0,R0,7F082438 -SWC1 F6,017C (SP) -//7F082424: -BEQ R0,R0,7F082438 -SW T5,0194 (SP) -//7F08242C: -MTC1 AT,F8 -NOP -SWC1 F8,018C (SP) -//7F082438: handle analog right -ANDI T4,V0,0101 ;T4=analog right -LW T6,0000 (S0) ;T6=p->BONDdata -SLTU T7,R0,T4 -SW T7,0044 (SP) -LW A0,6448 (A0) -BEQ T7,R0,7F08248C -LW V1,0124 (T6) -BNE V1,R0,7F082480 -LUI AT,3F80 -ADDIU AT,R0,0001 -BNE A0,AT,7F082478 -ADDIU T8,R0,0001 -LUI AT,3F80 -MTC1 AT,F10 -BEQ R0,R0,7F08248C -SWC1 F10,0178 (SP) -//7F082478: -BEQ R0,R0,7F08248C -SW T8,0190 (SP) -//7F082480: -MTC1 AT,F18 -NOP -SWC1 F18,0188 (SP) -//7F08248C: -SLTIU V0,V1,0001 -BEQ V0,R0,7F0824A4 -OR A1,V0,R0 -LW A1,005C (SP) ;A1=cont1 cur. -ANDI T9,A1,0808 ;T9=analog up -SLTU A1,R0,T9 -//7F0824A4: -SW A1,019C (SP) -BEQ V0,R0,7F0824BC -OR A1,V0,R0 -LW A1,005C (SP) ;A1=cont1 cur. -ANDI T2,A1,0404 ;T2=analog down -SLTU A1,R0,T2 -//7F0824BC: -SW A1,0198 (SP) -ADDIU AT,R0,0001 -OR A1,V0,R0 -BNE A0,AT,7F0824D8 -SW V0,01A0 (SP) -BEQ R0,R0,7F0825A4 -SW V0,01A8 (SP) -//7F0824D8: -BEQ R0,R0,7F0825A4 -SW A1,01A4 (SP) -//7F0824E0: -ANDI T4,A2,0202 -SLTU A2,R0,T4 -BEQ A2,R0,7F0824FC -LUI AT,3F80 -MTC1 AT,F4 -NOP -SWC1 F4,018C (SP) -//7F0824FC: -LW A0,005C (SP) ;A0=cont1 cur. -LUI AT,3F80 -ANDI T7,A0,0101 ;T7=analog right -SLTU A0,R0,T7 -BEQL A0,R0,7F082524 -LW T9,0000 (S0) -MTC1 AT,F6 -NOP -SWC1 F6,0188 (SP) -//7F082520: -LW T9,0000 (S0) ;T9=p->BONDdata -LW V1,0124 (T9) -SLTIU V0,V1,0001 -BEQ V0,R0,7F082538 -OR A1,V0,R0 -OR A1,A2,R0 -//7F082538: -SW A1,0194 (SP) -OR A1,V0,R0 -BEQ V0,R0,7F082550 -SW A0,0044 (SP) -OR A1,A0,R0 -SW A0,0044 (SP) -//7F082550: -SW A1,0190 (SP) -OR A1,V0,R0 -BNE V1,R0,7F082580 -SW V0,01AC (SP) -LW T3,005C (SP) ;T3=cont1 cur. -LUI AT,3F80 -ANDI T2,T3,0808 ;T2=analog up -BEQ T2,R0,7F082580 -NOP -MTC1 AT,F8 -NOP -SWC1 F8,0184 (SP) -//7F082580: -BNE V1,R0,7F0825A0 -LW T5,005C (SP) ;T5=cont1 cur. -ANDI T4,T5,0404 ;T4=analog down -BEQ T4,R0,7F0825A0 -LUI AT,3F80 -MTC1 AT,F10 -NOP -SWC1 F10,0180 (SP) -//7F0825A0: -SW A1,01A4 (SP) -BEQ V1,R0,7F0825F8 -NOP -LB T6,01C7 (SP) -SLTI AT,T6,003D -BNE AT,R0,7F0825F8 -ADDIU T7,T6,FFC4 -MTC1 T7,F18 -LUI AT,4120 -MTC1 AT,F2 -CVT.S.W F4,F18 -LUI AT,3F80 -MTC1 AT,F6 -LUI AT,3F80 -DIV.S F0,F4,F2 -C.LT.S F6,F0 -SWC1 F0,0184 (SP) -BC1FL 7F082650 -LUI AT,4120 -MTC1 AT,F8 -BEQ R0,R0,7F08264C -SWC1 F8,0184 (SP) -//7F0825F8: -BEQ V1,R0,7F08264C -LB T8,01C7 (SP) -SLTI AT,T8,FFC4 -BEQ AT,R0,7F08264C -ADDIU T9,R0,FFC4 -SUBU T3,T9,T8 -MTC1 T3,F10 -LUI AT,4120 -MTC1 AT,F2 -CVT.S.W F18,F10 -LUI AT,3F80 -MTC1 AT,F4 -LUI AT,3F80 -DIV.S F0,F18,F2 -C.LT.S F4,F0 -SWC1 F0,0180 (SP) -BC1FL 7F082650 -LUI AT,4120 -MTC1 AT,F6 -NOP -SWC1 F6,0180 (SP) -//7F08264C: -LUI AT,4120 -MTC1 AT,F2 -BEQ V1,R0,7F0826A4 -NOP -LB V0,01C3 (SP) -ADDIU T2,R0,FFC4 -SLTI AT,V0,FFC4 -BEQ AT,R0,7F0826A4 -SUBU T5,T2,V0 -MTC1 T5,F8 -LUI AT,3F80 -MTC1 AT,F18 -CVT.S.W F10,F8 -LUI AT,3F80 -DIV.S F0,F10,F2 -C.LT.S F18,F0 -SWC1 F0,017C (SP) -BC1F 7F0826A4 -NOP -MTC1 AT,F4 -NOP -SWC1 F4,017C (SP) -//7F0826A4: -BEQ V1,R0,7F0826EC -LB V0,01C3 (SP) -SLTI AT,V0,003D -BNE AT,R0,7F0826EC -ADDIU T4,V0,FFC4 -MTC1 T4,F6 -LUI AT,3F80 -MTC1 AT,F10 -CVT.S.W F8,F6 -LUI AT,3F80 -DIV.S F0,F8,F2 -C.LT.S F10,F0 -SWC1 F0,0178 (SP) -BC1FL 7F0826F0 -LHU V0,00FA (SP) -MTC1 AT,F18 -NOP -SWC1 F18,0178 (SP) -//7F0826EC: determine if FIRE+WEAPON (inventory advance backward) -LHU V0,00FA (SP) ;V0=SP+FA: mask for WEAPON -LW T6,005C (SP) ;T6=cont1 cur. -AND A0,T6,V0 -SLTU A1,R0,A0 -BEQ A1,R0,7F082718 ;branch if FALSE -SW A1,004C (SP) -LW T9,0060 (SP) -LHU T8,00FE (SP) ;T8=SP+FE: mask for FIRE -AND A1,T9,T8 ;A1= -SLTU T3,R0,A1 -OR A1,T3,R0 ;A1->TRUE/FALSE -//7F082718: determine if WEAPON (inventory advance) -LW T2,0060 (SP) -SW A1,0174 (SP) ;A1->SP+174: backward advance -AND A0,T2,V0 -SLTU A1,R0,A0 ;A1->TRUE/FALSE -BEQ A1,R0,7F082744 ;branch if FALSE -SW A1,0040 (SP) -LW T4,005C (SP) ;T4=cont1 cur. -LHU T6,00FE (SP) ;T6=SP+FE: mask for FIRE -AND A1,T4,T6 -SLTIU T7,A1,0001 -OR A1,T7,R0 ;A1->TRUE/FALSE -//7F082744: -SW A1,0170 (SP) ;A1->SP+170: advance -SW V1,016C (SP) -SW V1,0168 (SP) -OR A0,R0,R0 -JAL 7F05D9D0 ;V0=item# in use -SW A2,0050 (SP) -OR A0,V0,R0 -JAL 7F05E0B4 ;V0=TRUE if any of mask A1 is present in item A0's special attributes -ORI A1,R0,8000 ;A1=inhibit crouch -BEQ V0,R0,7F0827B8 ;branch if crouch enabled -LW A2,0050 (SP) -LW T9,0000 (S0) ;T9=p->BONDdata -LW T3,005C (SP) ;T3=cont1 cur. -LW T8,0124 (T9) -ANDI V0,T3,0808 -SLTU T2,R0,V0 -BEQ T8,R0,7F0827B8 -ANDI T5,T3,0404 -BEQ T5,R0,7F0827A4 -OR V0,T2,R0 -LUI AT,3F80 -MTC1 AT,F4 -NOP -SWC1 F4,0164 (SP) -//7F0827A4: -BEQ V0,R0,7F0827B8 -LUI AT,3F80 -MTC1 AT,F6 -NOP -SWC1 F6,0160 (SP) -//7F0827B8: -OR A0,R0,R0 -JAL 7F05D9D0 ;V0=item# in use -SW A2,0050 (SP) -OR A0,V0,R0 -JAL 7F05E0B4 ;V0=TRUE if any of mask A1 is present in item A0's special attributes -ORI A1,R0,8000 ;A1=inhibit crouch -SLTIU A1,V0,0001 ;A1=V0^1 -BEQ A1,R0,7F0827FC ;branch if inhibiting crouch -LW A2,0050 (SP) -LW T4,0000 (S0) ;T4=p->BONDdata -LW A1,0124 (T4) -SLTU T6,R0,A1 -BEQ T6,R0,7F0827FC -OR A1,T6,R0 -LW A1,005C (SP) ;A1=cont1 cur. -ANDI T7,A1,0404 ;T7=analog down -SLTU A1,R0,T7 -//7F0827FC: -SW A1,015C (SP) -OR A0,R0,R0 -JAL 7F05D9D0 ;V0=item# in use -SW A2,0050 (SP) -OR A0,V0,R0 -JAL 7F05E0B4 ;V0=TRUE if any of mask A1 is present in item A0's special attributes -ORI A1,R0,8000 ;A1=inhibit crouch -SLTIU A1,V0,0001 ;A1=V0^1 -BEQ A1,R0,7F082848 ;branch if inhibiting crouch -LW A2,0050 (SP) -LW T8,0000 (S0) ;T8=p->BONDdata -LW A1,0124 (T8) -SLTU T2,R0,A1 -BEQ T2,R0,7F082848 -OR A1,T2,R0 -LW A1,005C (SP) ;A1=cont1 cur. -NOR A1,A1,R0 -ANDI T3,A1,0808 ;T3=analog up -SLTU A1,R0,T3 -//7F082848: -LW T4,0000 (S0) ;T4=p->BONDdata -SW A1,0158 (SP) -LW V0,0124 (T4) -SLTU A1,R0,V0 -BEQ A1,R0,7F082864 -OR V0,A1,R0 -OR A1,A2,R0 -//7F082864: -SW A1,0154 (SP) -BEQ V0,R0,7F082874 -OR A1,V0,R0 -LW A1,0044 (SP) -//7F082874: -LW T7,004C (SP) -SW A1,0150 (SP) -LW T9,0048 (SP) -BEQ T7,R0,7F08288C -LW T8,005C (SP) ;T8=cont1 cur. -BNE T9,R0,7F0828A0 -//7F08288C: -ANDI T2,T8,4000 -BEQ T2,R0,7F0828C4 -LW T3,0040 (SP) -BEQ T3,R0,7F0828C4 -NOP -//7F0828A0: special handle remote mines -JAL 7F05D9D0 ;V0=item# in use -OR A0,R0,R0 -ADDIU AT,R0,001D ;AT=1D: remote mines -BNE V0,AT,7F0828C4 ;branch if not remote mines -ADDIU T5,R0,0001 -SW T5,014C (SP) ;1->SP+14C: remote mines detonated -SW R0,0174 (SP) ;0->SP+174: disable backward advance -SW R0,0170 (SP) ;0->SP+170: disable forward advance -SW R0,01B0 (SP) ;0->SP+1B0: disable cancel button -//7F0828C4: handle turret -LUI T4,8003 -LW T4,6448 (T4) ;T4=80036448: tank occupied flag -ADDIU AT,R0,0001 -BNEL T4,AT,7F082964 -LW T8,005C (SP) -LW T6,0000 (S0) ;T6=p->BONDdata -LW T7,0124 (T6) -BEQL T7,R0,7F082964 -LW T8,005C (SP) -JAL 7F05D9D0 ;V0=item# in use -OR A0,R0,R0 -ADDIU AT,R0,0020 -BNE V0,AT,7F08290C -LWC1 F8,018C (SP) -ADDIU T9,R0,0001 -SW R0,0134 (SP) -BEQ R0,R0,7F082958 -SW T9,01A8 (SP) -//7F08290C: -C.EQ.S F8,F20 -LWC1 F10,0188 (SP) -BC1FL 7F08295C -SWC1 F20,017C (SP) -C.EQ.S F10,F20 -LWC1 F18,017C (SP) -BC1FL 7F08295C -SWC1 F20,017C (SP) -C.LT.S F20,F18 -NOP -BC1FL 7F082944 -LWC1 F4,0178 (SP) -SWC1 F18,018C (SP) -LWC1 F4,0178 (SP) -C.LT.S F20,F4 -NOP -BC1FL 7F08295C -SWC1 F20,017C (SP) -SWC1 F4,0188 (SP) -//7F082958: -SWC1 F20,017C (SP) -SWC1 F20,0178 (SP) -//7F082960: -LW T8,005C (SP) ;T8=cont1 cur. -LHU T2,00FE (SP) ;T2=SP+FE: mask for FIRE -AND V0,T8,T2 -SLTU A1,R0,V0 -BEQ A1,R0,7F08299C -NOP -LW T5,0000 (S0) ;T5=p->BONDdata -LHU T6,00FA (SP) ;T6=SP+FA: mask for WEAPON -LW A1,01C8 (T5) -SLTIU T4,A1,0001 -BEQ T4,R0,7F08299C -OR A1,T4,R0 -AND A1,T8,T6 -SLTIU T7,A1,0001 -OR A1,T7,R0 -//7F08299C: -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -SW A1,01B4 (SP) -ADDIU AT,R0,0001 -BEQL V0,AT,7F0829C4 -ADDIU T9,R0,0001 -JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -NOP -ADDIU AT,R0,0003 -BNE V0,AT,7F0829C8 -//7F0829C0: -ADDIU T9,R0,0001 -SW T9,0140 (SP) -//7F0829C8: bail from the tank -LW T2,0000 (S0) ;T2=p->BONDdata -SW R0,00D0 (T2) ;0->BONDdata+D0: -LW T3,01B0 (SP) ;T3=SP+1B0: CANCEL button state -BEQ T3,R0,7F082C2C ;branch if not CANCELing -LUI T5,8003 -LW T5,6448 (T5) ;T5=80036448: tank occupied flag -ADDIU AT,R0,0001 -LUI T4,8003 -BNE T5,AT,7F082AA4 ;branch if tank flag not set - enter it, not exit! -LUI V0,8003 -LW T4,6450 (T4) ;T4=80036450: p->obj position entry (8006 table) -ADDIU A0,R0,0020 ;A0=20: tank cannon -LW T8,0004 (T4) ;T8=obj pos entry+4: p->object f/ setup -JAL 7F069450 ;V0= ammo for weapon A0 in cur. player's inventory -SW T8,00F4 (SP) ;SP+F4= p->object -//7F082A04: fry player's tank ammo -LW T6,00F4 (SP) ;T6=p->object -ADDIU A0,R0,0020 ;A0=20: tank cannon -OR A1,R0,R0 ;A1=0 cur ammo+0 -JAL 7F069484 ;add A1 of ammo for weapon A0 to cur. player -SW V0,00D8 (T6) ;save amount of tank ammo to tank's register -//7F082A18: fry player's tank item -JAL 7F08C61C ;probably removes tank item from inventory... -ADDIU A0,R0,0020 ;A0=20: tank cannon -//7F082A20: if tank, determine ammo on the clip -JAL 7F05D9D0 ;V0=item# in use -OR A0,R0,R0 ;A0=0 right hand -ADDIU AT,R0,0020 -BNEL V0,AT,7F082A54 ;branch if not tank -LW T2,00F4 (SP) -JAL 7F069344 ;V0= hand A0's ammo on clip (+89C) -OR A0,R0,R0 ;A0=0 right hand -//7F082A3C: add in ammo on clip, then cycle weapon -LW V1,00F4 (SP) ;V1=p->object -LW T7,00D8 (V1) ;T7=tank ammo register -ADDU T9,T7,V0 ;ammo + clip -JAL 7F05D800 ;auto-advance inventory when last of ammo for item spent -SW T9,00D8 (V1) ;save new total -//7F082A50: kill tank firing effect -LW T2,00F4 (SP) ;T2=p->object -LUI AT,8003 -OR V0,R0,R0 -SW R0,00C4 (T2) ;0->tank+C4: firing effect OFF -SW R0,6448 (AT) ;0->80036448: tank not occupied -LW T3,0000 (S0) ;T3=p->BONDdata -ADDIU V1,R0,000C -SWC1 F20,016C (T3) ;0.0->BONDdata+16C: strafing register -LW T5,0000 (S0) ;T5=p->BONDdata -SWC1 F20,0174 (T5) ;0.0->BONDdata+174: current rate forward/back -LW T4,0000 (S0) ;T4=p->BONDdata -SWC1 F20,014C (T4) ;0.0->BONDdata+14C: lat.rot. correction -//7F082A80: -LW T8,0000 (S0) ;T8=p->BONDdata -ADDU T6,T8,V0 -ADDIU V0,V0,0004 -BNE V0,V1,7F082A80 ;loop 3 times -SWC1 F20,0180 (T6) ;0.0->BONDdata+180,184,188: -//7F082A94: -LW T9,0000 (S0) ;T9=p->BONDdata -ADDIU T7,R0,0002 -BEQ R0,R0,7F082C2C -SW T7,009C (T9) ;2->BONDdata+9C: -//7F082AA4: -LW V0,6450 (V0) ;V0=80036450: p->cur.obj.pos entry (8006 table) -BEQL V0,R0,7F082C24 ;skip if NULL -LW T5,0000 (S0) -LBU T2,0000 (V0) ;T2=obj.pos+0: type -ADDIU AT,R0,0001 -BNEL T2,AT,7F082C24 ;branch if not a normal object -LW T5,0000 (S0) -LW A1,0004 (V0) ;A1=obj.pos+4: p->obj.data -ADDIU AT,R0,002D ;AT=2D: tank object type -LUI T5,8003 -LBU T3,0003 (A1) ;T3=obj.data+3: object type -BNEL T3,AT,7F082C24 ;skip if object not tank (2D) -LW T5,0000 (S0) -LW T5,6480 (T5) ;T5=80036480: 1 when you are standing on the turret -//7F082ADC: add tank to inventory -ADDIU A0,R0,0020 ;A0=20: tank cannon -BEQL T5,R0,7F082C24 ;skip if not on tank -LW T5,0000 (S0) -JAL 7F08C488 ;add item A0 to inventory -SW A1,00EC (SP) ;SP+EC= p->obj.data -//7F082AF0: add tank ammo as per tank object -LW V1,00EC (SP) ;V1=p->obj.data -ADDIU A0,R0,0020 ;A0=20: tank cannon -JAL 7F069484 ;add A1 of ammo for weapon A0 to cur. player -LW A1,00D8 (V1) ;A1=tank ammo register -//7F082B00: -LW V1,00EC (SP) -LUI A0,8003 -ADDIU A0,A0,646C ;A0=8003646C: -LWC1 F6,00C8 (V1) ;F6=obj.data+C8: -SW R0,00D8 (V1) ;set tank's slot to 0, since you have it's ammo stock! -LUI AT,8005 -SWC1 F6,0000 (A0) -LWC1 F10,5120 (AT) -LWC1 F8,0000 (A0) -LUI AT,8003 -LUI A1,8003 -DIV.S F18,F8,F10 -ADDIU A1,A1,6474 -ADDIU T4,R0,0001 -ADDIU T9,R0,0001 -LUI V0,8008 -ADDIU V0,V0,99D0 -SWC1 F18,6470 (AT) -LWC1 F4,00CC (V1) -LUI AT,8003 -SWC1 F4,6484 (AT) -LWC1 F6,00CC (V1) -LUI AT,8005 -SWC1 F6,0000 (A1) -LWC1 F10,5124 (AT) -LWC1 F8,0000 (A1) -LUI AT,8003 -DIV.S F18,F8,F10 -SWC1 F18,6478 (AT) -LUI AT,8003 -SWC1 F20,647C (AT) -LWC1 F4,00DC (V1) -LUI AT,8003 -SWC1 F4,6464 (AT) -LUI AT,8003 -SWC1 F20,6460 (AT) -LUI AT,8003 -SW T4,6448 (AT) -LUI AT,8008 -SW R0,99B8 (AT) -LW T8,0000 (S0) ;T8=p->BONDdata -LUI AT,8008 -SWC1 F20,016C (T8) ;0.0->BONDdata+16C: strafing register -LW T6,0000 (S0) ;T6=p->BONDdata -SWC1 F20,0174 (T6) ;0.0->BONDdata+174: current rate forward/back -LW T7,0000 (S0) ;T7=p->BONDdata -SWC1 F20,014C (T7) ;0.0->BONDdata+14C: lat.rot. correction -LW T2,0000 (S0) ;T2=p->BONDdata -SW T9,009C (T2) ;1->BONDdata+9C: -SWC1 F20,99BC (AT) -LUI AT,3F80 -MTC1 AT,F6 -LUI AT,8008 -SWC1 F6,99C0 (AT) -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,8008 -LWC1 F8,0148 (T0) ;F8=BONDdata+148: lat.rot. -SWC1 F8,99C4 (AT) ;F8->800799C4: -LWC1 F10,0158 (T0) -LUI AT,8008 -SWC1 F10,99C8 (AT) -LWC1 F18,048C (T0) -LUI AT,8003 -SWC1 F18,0000 (V0) -LWC1 F4,0490 (T0) -SWC1 F4,0004 (V0) -LWC1 F6,0494 (T0) -SWC1 F6,0008 (V0) -JAL 7F07C7B4 -SW R0,6490 (AT) ;0->80036490: -BEQ R0,R0,7F082C30 -LW T4,0144 (SP) -//7F082C20: -LW T5,0000 (S0) ;T5=p->BONDdata -ADDIU T3,R0,0001 -SW T3,00D0 (T5) ;1->BONDdata+D0: -//7F082C2C: handle upright control settings -LW T4,0144 (SP) ;T4=SP+144: TRUE if reverse look up/down -BNE T4,R0,7F082C60 ;branch if reverse vert. controls -NOP -LB T8,01C7 (SP) -LW T7,0128 (SP) -LWC1 F0,0184 (SP) -LWC1 F8,0180 (SP) -SUBU T6,R0,T8 -SUBU T9,R0,T7 -SW T6,0130 (SP) -SW T9,0128 (SP) -SWC1 F0,0180 (SP) -SWC1 F8,0184 (SP) -//7F082C60: -JAL 7F089EA4 ;V0= TRUE if [BONDdata+F4]>=0 -NOP -BEQ V0,R0,7F082C88 ;branch if false -NOP -JAL 7F09A464 ;V0=# players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F082C88 ;branch if multiplayer -NOP -SW R0,01B4 (SP) ;0->SP+1B4: -//7F082C88: test if visible player firing -JAL 7F067420 -LW A0,01B4 (SP) -JAL 7F089F74 ;V0= invisible to guards flag (1=visible (OFF)) -NOP -BEQL V0,R0,7F082D3C ;branch if invisible -ADDIU A0,R0,0002 -JAL 7F05DC88 ;V0= hand A0's firing status -OR A0,R0,R0 ;A0=0: right -BNEL V0,R0,7F082CC4 ;branch if firing -SWC1 F20,00E4 (SP) -JAL 7F05DC88 ;V0= hand A0's firing status -ADDIU A0,R0,0001 ;A0=1: left -BEQL V0,R0,7F082D3C ;branch if not firing -ADDIU A0,R0,0002 -//7F082CC0: computes noise level of gunfire -SWC1 F20,00E4 (SP) ;0.0->SP+E4: -JAL 7F05DC88 ;V0= hand A0's firing status -OR A0,R0,R0 ;A0=0: right -BEQ V0,R0,7F082CF8 ;branch if not firing -NOP -JAL 7F067174 -OR A0,R0,R0 -C.LT.S F20,F0 -NOP -BC1F 7F082CF8 -NOP -JAL 7F067174 -OR A0,R0,R0 -SWC1 F0,00E4 (SP) -//7F082CF8: -JAL 7F05DC88 ;V0= hand A0's firing status -ADDIU A0,R0,0001 ;A0=1: left -BEQ V0,R0,7F082D30 ;branch if not firing -NOP -JAL 7F067174 -ADDIU A0,R0,0001 -LWC1 F10,00E4 (SP) -C.LT.S F10,F0 -NOP -BC1F 7F082D30 -NOP -JAL 7F067174 -ADDIU A0,R0,0001 -SWC1 F0,00E4 (SP) -//7F082D30: -JAL 7F022EEC -LWC1 F12,00E4 (SP) -//7F082D38: -ADDIU A0,R0,0002 ;A0=2: -JAL 7F06A5A8 ;set or unset (A1= 0-1) bitflags A0 at BONDdata+0x1128 -LW A1,016C (SP) ;A1=SP+16C: mode -LWC1 F18,0164 (SP) -C.LT.S F20,F18 -NOP -BC1FL 7F082D64 -LWC1 F4,0160 (SP) -JAL 7F05DDA4 -MOV.S F12,F18 -LWC1 F4,0160 (SP) -C.LT.S F20,F4 -NOP -BC1FL 7F082D80 -LW T2,0000 (S0) -JAL 7F05DE94 -MOV.S F12,F4 -LW T2,0000 (S0) ;T2=p->BONDdata -LW T5,0168 (SP) -LW T3,01C8 (T2) -BNE T3,R0,7F082DD0 -LUI AT,4270 -MTC1 AT,F12 -BEQ T5,R0,7F082DC0 -NOP -JAL 7F05DD38 -NOP -C.LE.S F0,F20 -MOV.S F12,F0 -LUI AT,4270 -BC1F 7F082DC0 -NOP -MTC1 AT,F12 -NOP -JAL 7F07E46C -NOP -JAL 7F07E62C -NOP -//7F082DD0: handle occupied tank -LUI T4,8003 -LW T4,6448 (T4) ;T4=80036448: tank occupied flag -ADDIU AT,R0,0001 -LW T6,0194 (SP) -BNE T4,AT,7F0830FC ;branch if player is not in tank -LUI V0,8003 -ADDIU V0,V0,6488 -SWC1 F20,0000 (V0) ;0.0->80036488: -LUI T8,8008 -LW T8,99B8 (T8) ;T8=800799B8: -ADDIU AT,R0,0002 -LWC1 F6,0188 (SP) -BNE T8,AT,7F0830F4 -NOP -C.LT.S F20,F6 -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,8005 -LWC1 F10,018C (SP) -BC1FL 7F082E48 -C.LT.S F20,F10 -LWC1 F8,8378 (AT) -LUI AT,8005 -LWC1 F18,5128 (AT) -MUL.S F10,F8,F6 -LWC1 F8,0000 (V0) -MUL.S F4,F10,F18 -ADD.S F6,F8,F4 -BEQ R0,R0,7F082F04 -SWC1 F6,0000 (V0) -//7F082E44: -C.LT.S F20,F10 -LUI AT,8005 -LW T6,01A8 (SP) -BC1F 7F082E7C -NOP -LWC1 F18,8378 (AT) -LUI AT,8005 -LWC1 F4,512C (AT) -MUL.S F8,F18,F10 -LWC1 F18,0000 (V0) -MUL.S F6,F8,F4 -SUB.S F10,F18,F6 -BEQ R0,R0,7F082F04 -SWC1 F10,0000 (V0) -//7F082E7C: -BEQ T6,R0,7F082F04 -LW T7,0124 (SP) -MTC1 T7,F8 -LUI AT,428C -MTC1 AT,F18 -CVT.S.W F4,F8 -LUI AT,3F80 -MTC1 AT,F6 -LUI AT,3F80 -DIV.S F2,F4,F18 -C.LT.S F6,F2 -NOP -BC1FL 7F082EC0 -LUI AT,BF80 -MTC1 AT,F2 -NOP -LUI AT,BF80 -MTC1 AT,F10 -LUI AT,BF80 -C.LT.S F2,F10 -NOP -BC1F 7F082EE0 -NOP -MTC1 AT,F2 -NOP -LUI AT,8005 -LWC1 F8,5130 (AT) -LUI AT,8005 -LWC1 F18,8378 (AT) -MUL.S F4,F8,F2 -LWC1 F10,0000 (V0) -MUL.S F6,F4,F18 -ADD.S F8,F10,F6 -SWC1 F8,0000 (V0) -LW T9,0124 (T0) -LUI AT,3F80 -LW T2,01AC (SP) -BNE T9,R0,7F0830F4 -NOP -MTC1 AT,F2 -MOV.S F0,F20 -BEQ T2,R0,7F082F48 -MOV.S F14,F2 -LW T1,0120 (SP) -LUI AT,428C -MTC1 AT,F10 -MTC1 T1,F4 -NOP -CVT.S.W F18,F4 -BEQ R0,R0,7F082F70 -DIV.S F0,F18,F10 -//7F082F48: -LW T3,019C (SP) -LW T5,0198 (SP) -BEQ T3,R0,7F082F60 -NOP -BEQ R0,R0,7F082F70 -MOV.S F0,F2 -//7F082F60: -BEQ T5,R0,7F082F70 -LUI AT,BF80 -MTC1 AT,F0 -NOP -//7F082F70: -C.LT.S F2,F0 -LUI AT,BF80 -LUI T4,8005 -BC1FL 7F082F90 -MTC1 AT,F6 -BEQ R0,R0,7F082FAC -MOV.S F0,F2 -//7F082F8C: -MTC1 AT,F6 -LUI AT,BF80 -C.LT.S F0,F6 -NOP -BC1FL 7F082FB0 -LUI AT,4170 -MTC1 AT,F0 -NOP -//7F082FAC: -LUI AT,4170 -MTC1 AT,F16 -LUI V1,8003 -ADDIU V1,V1,6490 -MUL.S F12,F0,F16 -LW V0,0000 (V1) -LUI AT,3F00 -BLEZ V0,7F082FEC -MOV.S F2,F12 -MTC1 AT,F8 -LW T4,8374 (T4) -LUI AT,4080 -MTC1 AT,F14 -SUBU T8,V0,T4 -MUL.S F2,F12,F8 -SW T8,0000 (V1) -//7F082FEC: -LWC1 F0,0174 (T0) ;F0=speed -C.EQ.S F2,F0 -NOP -BC1T 7F0830F4 ;do nothing if speed=max speed -NOP -C.LT.S F0,F2 -LUI AT,3E80 -BC1FL 7F083080 ;branch if speed >= max speed? -C.LT.S F2,F0 -//7F083010: tank accel -SUB.S F4,F2,F0 ;!difference! F4=MAX-speed! -MTC1 AT,F18 ;F18=0.25 -LUI AT,3F00 -MTC1 AT,F8 ;F8=0.5 acceleration step -MUL.S F10,F4,F18 ;F10=F4/4 -LUI AT,4120 -DIV.S F6,F10,F16 ;F6=F10/F16 [F16=15.0] -MTC1 AT,F10 ;!difference! F10=10 -LUI AT,4270 -ADD.S F4,F6,F8 ;F4=F8+0.5 -MTC1 AT,F8 ;F8=60 -LUI AT,8005 -MUL.S F18,F4,F14 ;F18=F4*F14 [F14=1.0] -LWC1 F4,8378 (AT) ;F4=80048378: 1.0 clock cycle rate counter maybe? multiplier is used in many different animation applications... -MUL.S F6,F18,F10 ;F6=F18*10 -DIV.S F12,F6,F8 ;F12=F6/60 -MUL.S F18,F12,F4 ;F18=F12*1.0 -ADD.S F10,F0,F18 ;F10=speed+F18 -SWC1 F10,0174 (T0) ;F10->player's speed -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F6,0174 (T0) ;F6=speed -C.LT.S F2,F6 -NOP -BC1F 7F0830F4 ;if max speed < speed, set speed to max -NOP -BEQ R0,R0,7F0830F4 -SWC1 F2,0174 (T0) ;max speed -> player's speed -//7F08307C: tank deceleration -C.LT.S F2,F0 -LUI AT,3E80 -BC1F 7F0830F4 ;branch if max >= speed (F0=speed) -NOP -SUB.S F8,F0,F2 ;F8=speed-F2 -MTC1 AT,F4 ;F4=0.25 -LUI AT,3F00 -MTC1 AT,F6 ;F6=0.5 deceleration rate -MUL.S F18,F8,F4 ;F18=F8/4 -LUI AT,C120 -DIV.S F10,F18,F16 ;F10=F18/F16 [F16=15.0] -MTC1 AT,F18 ;F18=-10.0 -LUI AT,4270 -ADD.S F8,F10,F6 ;F8=F10+0.5 -MTC1 AT,F6 ;F6=60.0 -LUI AT,8005 -MUL.S F4,F8,F14 ;F4=F8*F14 [F14=1.0] -LWC1 F8,8378 (AT) ;F8=80048378: 1.0 clock cycle rate counter -MUL.S F10,F4,F18 ;F10=F4 * -10.0 -DIV.S F12,F10,F6 ;F12=F10/60.0 -MUL.S F4,F12,F8 ;F4=F12*1.0 -ADD.S F18,F0,F4 ;F18=speed + ((F8/60+0.5)*-1/6) -SWC1 F18,0174 (T0) ;F18->player's speed -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F10,0174 (T0) ;F10=speed -C.LT.S F10,F2 -NOP -BC1F 7F0830F4 ;if speed < min, set it to min! -NOP -SWC1 F2,0174 (T0) ;F2->player's speed -//7F0830F4: -BEQ R0,R0,7F083394 -LW T0,0000 (S0) ;T0=p->BONDdata -//7F0830FC: normal player motion -BEQ T6,R0,7F083114 -LW T7,0190 (SP) -JAL 7F07FCC4 -ADDIU A0,R0,FFFF -BEQ R0,R0,7F083138 -LW T9,01A8 (SP) -//7F083114: -BEQ T7,R0,7F08312C -NOP -JAL 7F07FCC4 -ADDIU A0,R0,0001 -BEQ R0,R0,7F083138 -LW T9,01A8 (SP) -//7F08312C: -JAL 7F07FCC4 -OR A0,R0,R0 -LW T9,01A8 (SP) -//7F083138: -LW T2,0124 (SP) ;T2=SP+124: STRAFE -BEQL T9,R0,7F083164 -LW T5,019C (SP) -MTC1 T2,F6 -LUI AT,428C -MTC1 AT,F4 ;F4=70.0 -CVT.S.W F8,F6 ;F8=(float) T2: degree strafing -LW T3,0000 (S0) ;T3=p->BONDdata -DIV.S F18,F8,F4 ;F18=strafing / 70.0 -SWC1 F18,016C (T3) ;F18->BONDdata+16C: %strafing register -LW T5,019C (SP) -LW T7,0198 (SP) -BEQ T5,R0,7F083194 -NOP -JAL 7F07FE1C -ADDIU A0,R0,0001 -LW T0,0000 (S0) ;T0=p->BONDdata -LUI T8,8005 -LW T8,8374 (T8) -LW T4,017C (T0) -ADDU T6,T4,T8 -BEQ R0,R0,7F0831B4 -SW T6,017C (T0) -BEQ T7,R0,7F0831AC -NOP -JAL 7F07FE1C -ADDIU A0,R0,FFFF -BEQ R0,R0,7F0831B8 -LW T9,01AC (SP) -JAL 7F07FE1C -OR A0,R0,R0 -LW T9,01AC (SP) -LW T2,0120 (SP) -BEQL T9,R0,7F083218 -LW T0,0000 (S0) -MTC1 T2,F10 -LUI AT,428C -MTC1 AT,F8 -CVT.S.W F6,F10 -LW T3,0000 (S0) ;T3=p->BONDdata -DIV.S F4,F6,F8 -SWC1 F4,0174 (T3) -LW T5,0120 (SP) -SLTI AT,T5,003D -BNEL AT,R0,7F083210 -LW T7,0000 (S0) -LW T0,0000 (S0) ;T0=p->BONDdata -LUI T8,8005 -LW T8,8374 (T8) -LW T4,017C (T0) -ADDU T6,T4,T8 -BEQ R0,R0,7F083214 -SW T6,017C (T0) -LW T7,0000 (S0) ;T7=p->BONDdata -SW R0,017C (T7) -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,3F80 -MTC1 AT,F18 -LWC1 F0,0174 (T0) ;F0=BONDdata+174: rate forward/back -LUI AT,3F80 -C.LT.S F18,F0 -NOP -BC1FL 7F083250 ;branch if 1 >= rate -LUI AT,BF80 ;use -1.0 -MTC1 AT,F10 -NOP -SWC1 F10,0174 (T0) ;F10->BONDdata+174: rate forward/back set to 1.0/-1.0 -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F0,0174 (T0) ;F0=rate forward/back -LUI AT,BF80 -MTC1 AT,F6 ;F6= -1.0 -LUI AT,BF80 -C.LT.S F0,F6 -NOP -BC1FL 7F08327C ;branch if rate >= -1 -LUI AT,3F80 ;use 1.0 -MTC1 AT,F8 -NOP -SWC1 F8,0174 (T0) ;F8->BONDdata+174: rate forward/back set to -1.0/1.0 -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,3F80 -MTC1 AT,F4 -LWC1 F0,016C (T0) ;F0=strafing rate -LUI AT,3F80 -C.LT.S F4,F0 -NOP -BC1FL 7F0832B0 ;branch if 1 >= rate -LUI AT,BF80 ;use -1.0 -MTC1 AT,F18 -NOP -SWC1 F18,016C (T0) ;F18->BONDdata+16C: strafing rate -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F0,016C (T0) ;F0=BONDdata+16C: strafing rate -LUI AT,BF80 -MTC1 AT,F10 ;F10=-1.0 -LUI AT,BF80 -C.LT.S F0,F10 -NOP -BC1F 7F0832D8 ;branch if rate >= -1.0 -NOP -MTC1 AT,F6 -NOP -SWC1 F6,016C (T0) ;-1.0->BONDdata+16C: strafing rate -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,8005 -LWC1 F4,5134 (AT) ;F4=80055134: -LWC1 F8,0174 (T0) ;F8=BONDdata+174: rate forward/back -MUL.S F18,F8,F4 -SWC1 F18,0174 (T0) ;update rate forward/back -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F10,0174 (T0) ;F10=BONDdata+174: rate forward/back -LWC1 F6,0178 (T0) -MUL.S F8,F10,F6 -SWC1 F8,0174 (T0) ;F8->BONDdata+174: rate forward/back -LW T9,01AC (SP) -LW T2,019C (SP) -BNEL T9,R0,7F083324 -LW T5,0154 (SP) -BNEL T2,R0,7F083324 -LW T5,0154 (SP) -LW T3,0000 (S0) ;T3=p->BONDdata -SW R0,017C (T3) -LW T5,0154 (SP) -LW T4,0150 (SP) -BEQ T5,R0,7F083340 -NOP -JAL 7F079988 -ADDIU A0,R0,FFFF -BEQ R0,R0,7F083364 -LW T8,015C (SP) -BEQ T4,R0,7F083358 -NOP -JAL 7F079988 -ADDIU A0,R0,0001 -BEQ R0,R0,7F083364 -LW T8,015C (SP) -JAL 7F079988 -OR A0,R0,R0 -LW T8,015C (SP) -LW T6,0158 (SP) -BEQ T8,R0,7F083380 -NOP -JAL 7F0799AC -ADDIU A0,R0,FFFE -BEQ R0,R0,7F083394 -LW T0,0000 (S0) -//7F083380: -BEQL T6,R0,7F083394 -LW T0,0000 (S0) -JAL 7F0799AC -ADDIU A0,R0,0002 -//7F083390: -LW T0,0000 (S0) ;T0=p->BONDdata -LW T7,017C (T0) -SLTI AT,T7,00B4 -BNE AT,R0,7F0833FC -LUI AT,3FA0 -MTC1 AT,F2 -LWC1 F0,0178 (T0) -LUI AT,8005 -C.LT.S F0,F2 -NOP -BC1FL 7F0833E4 -C.LT.S F2,F0 -LWC1 F4,5138 (AT) -LUI AT,8005 -LWC1 F18,8378 (AT) -MUL.S F10,F4,F18 -ADD.S F6,F0,F10 -SWC1 F6,0178 (T0) -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F0,0178 (T0) -C.LT.S F2,F0 -NOP -BC1FL 7F08346C -LW T9,01C8 (T0) -SWC1 F2,0178 (T0) -BEQ R0,R0,7F083468 -LW T0,0000 (S0) -// -LUI AT,3F80 -MTC1 AT,F8 -LWC1 F0,0178 (T0) -LUI AT,8005 -C.LT.S F8,F0 -NOP -BC1FL 7F083440 -LUI AT,3F80 -LWC1 F4,513C (AT) -LUI AT,8005 -LWC1 F18,8378 (AT) -MUL.S F10,F4,F18 -SUB.S F6,F0,F10 -SWC1 F6,0178 (T0) -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F0,0178 (T0) -LUI AT,3F80 -MTC1 AT,F8 -LUI AT,3F80 -C.LT.S F0,F8 -NOP -BC1FL 7F08346C -LW T9,01C8 (T0) -MTC1 AT,F4 -NOP -SWC1 F4,0178 (T0) -LW T0,0000 (S0) ;T0=p->BONDdata -LW T9,01C8 (T0) -BNEL T9,R0,7F083B40 -LW T6,01A4 (SP) -LW T2,0114 (T0) -LUI AT,C080 -MTC1 AT,F14 -BEQ T2,R0,7F083680 -LUI AT,4396 -LW T3,0488 (T0) -MTC1 AT,F18 -ADDIU A1,SP,00A0 -SW T3,00C0 (SP) -SWC1 F18,00BC (SP) -LW A0,00A8 (T0) -SWC1 F14,00C4 (SP) -ADDIU A2,SP,00A8 -JAL 7F08A274 -ADDIU A3,SP,00A4 -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,4396 -MTC1 AT,F0 -LWC1 F10,0498 (T0) -LWC1 F8,048C (T0) -MUL.S F6,F10,F0 -ADD.S F4,F6,F8 -SWC1 F4,00AC (SP) -LWC1 F18,0490 (T0) -SWC1 F18,00B0 (SP) -LWC1 F10,04A0 (T0) -LWC1 F8,0494 (T0) -MUL.S F6,F10,F0 -ADD.S F4,F6,F8 -JAL 7F0B1CC4 -SWC1 F4,00B4 (SP) -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,3F80 -MTC1 AT,F8 -LW A1,048C (T0) -LW A2,0494 (T0) -LWC1 F18,00B4 (SP) -LWC1 F10,00A8 (SP) -LWC1 F6,00A4 (SP) -ADDIU T5,R0,1000 -SW T5,0014 (SP) -SWC1 F20,0020 (SP) -ADDIU A0,SP,00C0 -LW A3,00AC (SP) -SWC1 F8,0024 (SP) -SWC1 F18,0010 (SP) -SWC1 F10,0018 (SP) -JAL 7F0B0E24 -SWC1 F6,001C (SP) -BEQ V0,R0,7F083560 -LWC1 F14,00C4 (SP) -LW A0,00C0 (SP) -LW A1,00AC (SP) -LW A2,00B4 (SP) -JAL 7F080D60 -SWC1 F14,00C4 (SP) -LWC1 F14,00C4 (SP) -BEQ R0,R0,7F0835C4 -SWC1 F0,00B0 (SP) -LW T0,0000 (S0) ;T0=p->BONDdata -ADDIU A2,SP,00AC -SWC1 F14,00C4 (SP) -ADDIU A0,T0,048C -JAL 7F026298 -ADDIU A1,T0,0498 -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F4,00AC (SP) -LWC1 F10,00B4 (SP) -LWC1 F18,048C (T0) -LWC1 F6,0494 (T0) -SUB.S F0,F4,F18 -SUB.S F2,F10,F6 -MUL.S F8,F0,F0 -NOP -MUL.S F4,F2,F2 -JAL 7001F7E0 -ADD.S F12,F8,F4 -SWC1 F0,00BC (SP) -LW A0,00C0 (SP) -LW A1,00AC (SP) -JAL 7F080D60 -LW A2,00B4 (SP) -LWC1 F14,00C4 (SP) -SWC1 F0,00B0 (SP) -LWC1 F18,00BC (SP) -C.LT.S F20,F18 -NOP -BC1FL 7F083684 -LW T0,0000 (S0) -LW T4,0000 (S0) ;T4=p->BONDdata -LUI AT,C396 -MTC1 AT,F6 -LWC1 F10,0074 (T4) -LUI AT,43FA -SUB.S F12,F0,F10 -C.LT.S F6,F12 -NOP -BC1FL 7F083684 -LW T0,0000 (S0) -MTC1 AT,F8 -NOP -C.LT.S F12,F8 -NOP -BC1FL 7F083684 -LW T0,0000 (S0) -JAL 7F05AA30 -MOV.S F14,F18 -LUI AT,43B4 -MTC1 AT,F12 -LUI AT,8005 -LWC1 F10,5140 (AT) -MUL.S F4,F0,F12 -LUI AT,C080 -MTC1 AT,F8 -LUI AT,4334 -MTC1 AT,F18 -LUI AT,8005 -DIV.S F6,F4,F10 -ADD.S F2,F6,F8 -C.LE.S F18,F2 -MOV.S F14,F2 -BC1FL 7F083668 -C.LT.S F20,F14 -SUB.S F14,F2,F12 -C.LT.S F20,F14 -NOP -BC1FL 7F083684 -LW T0,0000 (S0) -LWC1 F4,5144 (AT) -MUL.S F14,F14,F4 -NOP -LW T0,0000 (S0) ;T0=p->BONDdata -LW T1,0120 (SP) -LUI T6,8003 -LW T8,0110 (T0) -SLTI AT,T1,0028 -BEQ T8,R0,7F0836B4 -NOP -BEQ AT,R0,7F0836B4 -SLTI AT,T1,FFD9 -BNE AT,R0,7F0836B4 -NOP -SW R0,0110 (T0) -LW T0,0000 (S0) ;T0=p->BONDdata -LW T6,6448 (T6) -LWC1 F10,0184 (SP) -BNEL T6,R0,7F08383C -LW T8,0104 (T0) -C.LT.S F20,F10 -LWC1 F6,0180 (SP) -BC1TL 7F0836E8 -SW R0,0104 (T0) -C.LT.S F20,F6 -LW T3,0140 (SP) -BC1F 7F083704 -NOP -SW R0,0104 (T0) -LW T9,0000 (S0) ;T9=p->BONDdata -ADDIU T7,R0,0001 -SW T7,010C (T9) ;1->BONDdata+10C: -LW T2,0000 (S0) ;T2=p->BONDdata -SW R0,0120 (T2) ;0->BONDdata+120: -BEQ R0,R0,7F083838 -LW T0,0000 (S0) -// -BEQL T3,R0,7F08371C -LW T5,0118 (T0) -SW R0,0120 (T0) -BEQ R0,R0,7F083830 -LW T0,0000 (S0) -// -LW T5,0118 (T0) -LW T4,01AC (SP) -BEQL T5,R0,7F0837B8 -LW T2,011C (T0) -BEQ T4,R0,7F08374C -SLTI AT,T1,003D -BEQ AT,R0,7F083744 -ADDIU T8,R0,0001 -SLTI AT,T1,FFC4 -BEQL AT,R0,7F083750 -LW T6,0120 (T0) -SW T8,0120 (T0) -LW T0,0000 (S0) ;T0=p->BONDdata -LW T6,0120 (T0) -LUI AT,40A0 -BEQL T6,R0,7F083834 -SW R0,010C (T0) -MTC1 AT,F8 -LWC1 F0,0158 (T0) -LUI AT,C120 -ADD.S F18,F14,F8 -C.LT.S F18,F0 -NOP -BC1TL 7F08379C -LW T7,0110 (T0) -MTC1 AT,F4 -NOP -ADD.S F10,F14,F4 -C.LT.S F0,F10 -NOP -BC1FL 7F083834 -SW R0,010C (T0) -LW T7,0110 (T0) -ADDIU T9,R0,0001 -BNEL T7,R0,7F083834 -SW R0,010C (T0) -SW T9,0104 (T0) -BEQ R0,R0,7F083830 -LW T0,0000 (S0) -// -LW T2,011C (T0) -LW T3,01AC (SP) -BEQL T2,R0,7F083834 -SW R0,010C (T0) -BEQ T3,R0,7F083830 -SLTI AT,T1,003D -BEQ AT,R0,7F0837D8 -SLTI AT,T1,FFC4 -BEQ AT,R0,7F083830 -LUI AT,40A0 -MTC1 AT,F6 -LWC1 F0,0158 (T0) -LUI AT,C120 -ADD.S F8,F14,F6 -C.LT.S F8,F0 -NOP -BC1TL 7F08381C -LW T5,0110 (T0) -MTC1 AT,F18 -NOP -ADD.S F4,F14,F18 -C.LT.S F0,F4 -NOP -BC1FL 7F083834 -SW R0,010C (T0) -LW T5,0110 (T0) -ADDIU T4,R0,0001 -BNEL T5,R0,7F083834 -SW R0,010C (T0) -SW T4,0104 (T0) -LW T0,0000 (S0) ;T0=p->BONDdata -SW R0,010C (T0) ;0->BONDdata+10C: -LW T0,0000 (S0) ;T0=p->BONDdata -LW T8,0104 (T0) -LUI T6,8003 -LW T2,01A0 (SP) -BEQ T8,R0,7F083970 -NOP -LW T6,6448 (T6) -BNEL T6,R0,7F083B40 -LW T6,01A4 (SP) -LWC1 F2,0160 (T0) -LUI AT,3F00 -MTC1 AT,F6 -MUL.S F10,F2,F2 -LUI AT,8005 -LWC1 F18,5148 (AT) -LWC1 F0,0158 (T0) -LUI AT,3F80 -MUL.S F8,F10,F6 -DIV.S F12,F8,F18 -ADD.S F4,F14,F12 -C.LT.S F4,F0 -NOP -BC1FL 7F0838AC -SUB.S F10,F14,F12 -MTC1 AT,F12 -JAL 7F080010 -SWC1 F14,00C4 (SP) -BEQ R0,R0,7F0838E4 -LWC1 F14,00C4 (SP) -SUB.S F10,F14,F12 -LUI AT,BF80 -C.LT.S F0,F10 -NOP -BC1FL 7F0838D8 -MOV.S F12,F20 -MTC1 AT,F12 -JAL 7F080010 -SWC1 F14,00C4 (SP) -BEQ R0,R0,7F0838E4 -LWC1 F14,00C4 (SP) -MOV.S F12,F20 -JAL 7F080010 -SWC1 F14,00C4 (SP) -LWC1 F14,00C4 (SP) -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,8005 -LWC1 F8,8378 (AT) -LWC1 F6,0160 (T0) -LWC1 F0,0158 (T0) -MUL.S F2,F6,F8 -C.LT.S F14,F0 -ADD.S F18,F2,F2 -BC1F 7F083924 -ADD.S F12,F0,F18 -C.LT.S F14,F12 -NOP -BC1FL 7F083928 -C.LT.S F0,F14 -BEQ R0,R0,7F083B3C -SWC1 F12,0158 (T0) -C.LT.S F0,F14 -NOP -BC1FL 7F083950 -SWC1 F14,0158 (T0) -C.LT.S F12,F14 -NOP -BC1FL 7F083950 -SWC1 F14,0158 (T0) -BEQ R0,R0,7F083B3C -SWC1 F12,0158 (T0) -SWC1 F14,0158 (T0) -LW T7,0000 (S0) ;T7=p->BONDdata -SWC1 F20,0160 (T7) ;0.0->BONDdata+160: -LW T0,0000 (S0) ;T0=p->BONDdata -LW T9,010C (T0) -BNEL T9,R0,7F083B40 -LW T6,01A4 (SP) -BEQ R0,R0,7F083B3C -SW R0,0104 (T0) -BEQ T2,R0,7F083A2C -LWC1 F18,0184 (SP) -JAL 700045DC -NOP -LW T3,0128 (SP) -LUI AT,4270 -MTC1 AT,F4 -MTC1 T3,F10 -LUI AT,428C -MTC1 AT,F8 -CVT.S.W F6,F10 -LUI AT,3F80 -MTC1 AT,F18 -LUI AT,BF80 -DIV.S F14,F0,F4 -DIV.S F12,F6,F8 -C.LT.S F18,F12 -MOV.S F2,F12 -BC1FL 7F0839D4 -MTC1 AT,F4 -LUI AT,3F80 -MTC1 AT,F2 -BEQ R0,R0,7F0839F4 -C.LE.S F20,F2 -MTC1 AT,F4 -LUI AT,BF80 -C.LT.S F12,F4 -NOP -BC1FL 7F0839F4 -C.LE.S F20,F2 -MTC1 AT,F2 -NOP -C.LE.S F20,F2 -NOP -BC1FL 7F083A10 -NEG.S F10,F2 -MUL.S F2,F2,F2 -BEQ R0,R0,7F083A1C -NEG.S F6,F2 -NEG.S F10,F2 -MUL.S F2,F2,F10 -NOP -NEG.S F6,F2 -LW T5,0000 (S0) ;T5=p->BONDdata -MUL.S F8,F6,F14 -BEQ R0,R0,7F083AC4 -SWC1 F8,0160 (T5) -// -C.LT.S F20,F18 -LWC1 F4,0180 (SP) -BC1FL 7F083A78 -C.LT.S F20,F4 -JAL 7F080010 -MOV.S F12,F18 -LW T4,01AC (SP) -LW T8,0120 (SP) -BEQ T4,R0,7F083AC4 -SLTI AT,T8,003D -BEQ AT,R0,7F083A64 -SLTI AT,T8,003C -BEQL AT,R0,7F083AC8 -LW T0,0000 (S0) -LW T7,0000 (S0) ;T7=p->BONDdata -ADDIU T6,R0,0001 -BEQ R0,R0,7F083AC4 -SW T6,0110 (T7) -// -C.LT.S F20,F4 -NOP -BC1F 7F083ABC -NOP -JAL 7F080010 -NEG.S F12,F4 -LW T9,01AC (SP) -LW T2,0120 (SP) -BEQ T9,R0,7F083AC4 -SLTI AT,T2,003D -BEQ AT,R0,7F083AAC -SLTI AT,T2,003C -BEQL AT,R0,7F083AC8 -LW T0,0000 (S0) -LW T5,0000 (S0) ;T5=p->BONDdata -ADDIU T3,R0,0001 -BEQ R0,R0,7F083AC4 -SW T3,0110 (T5) ;1->BONDdata+110: -// -JAL 7F080010 -MOV.S F12,F20 -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,8005 -LWC1 F6,8378 (AT) -LWC1 F10,0160 (T0) -LUI AT,4060 -MTC1 AT,F18 -MUL.S F8,F10,F6 -LWC1 F10,0158 (T0) -LUI T4,8003 -ADDIU AT,R0,0001 -LUI T8,8008 -MUL.S F4,F8,F18 -ADD.S F6,F10,F4 -SWC1 F6,0158 (T0) -LW T4,6448 (T4) -BNEL T4,AT,7F083B40 -LW T6,01A4 (SP) -LW T8,99B8 (T8) -ADDIU AT,R0,0002 -BNEL T8,AT,7F083B40 -LW T6,01A4 (SP) -LW T0,0000 (S0) ;T0=p->BONDdata -LUI AT,C1A0 -MTC1 AT,F0 -LWC1 F8,0158 (T0) -C.LT.S F8,F0 -NOP -BC1FL 7F083B40 -LW T6,01A4 (SP) -SWC1 F0,0158 (T0) -LW T6,01A4 (SP) -LWC1 F6,017C (SP) -BEQL T6,R0,7F083BF0 -C.LT.S F20,F6 -JAL 700045DC -NOP -LW T7,012C (SP) -LUI AT,3F80 -MTC1 AT,F14 -MTC1 T7,F18 -LUI AT,428C -MTC1 AT,F4 -CVT.S.W F10,F18 -LUI AT,BF80 -DIV.S F12,F10,F4 -C.LT.S F14,F12 -MOV.S F2,F12 -BC1FL 7F083B94 -MTC1 AT,F6 -BEQ R0,R0,7F083BB0 -MOV.S F2,F14 -MTC1 AT,F6 -LUI AT,BF80 -C.LT.S F12,F6 -NOP -BC1FL 7F083BB4 -C.LE.S F20,F2 -MTC1 AT,F2 -NOP -C.LE.S F20,F2 -LUI AT,4270 -MTC1 AT,F18 -BC1F 7F083BD0 -DIV.S F10,F0,F18 -MUL.S F2,F2,F2 -BEQ R0,R0,7F083BDC -NOP -NEG.S F8,F2 -MUL.S F2,F2,F8 -NOP -MUL.S F4,F2,F10 -LW T9,0000 (S0) ;T9=p->BONDdata -BEQ R0,R0,7F083C50 -SWC1 F4,014C (T9) -C.LT.S F20,F6 -LWC1 F8,0178 (SP) -BC1FL 7F083C18 -C.LT.S F20,F8 -JAL 7F0802C4 -MOV.S F12,F6 -LUI AT,3F80 -MTC1 AT,F14 -BEQ R0,R0,7F083C50 -NOP -C.LT.S F20,F8 -NOP -BC1F 7F083C3C -NOP -JAL 7F0802C4 -NEG.S F12,F8 -LUI AT,3F80 -MTC1 AT,F14 -BEQ R0,R0,7F083C50 -NOP -JAL 7F0802C4 -MOV.S F12,F20 -LUI AT,3F80 -MTC1 AT,F14 -NOP -//7F083C50: tank lateral aim correction -LUI T2,8003 -LW T2,6448 (T2) ;T2=80036448: tank occupied -ADDIU AT,R0,0001 -LUI T3,8008 -BNEL T2,AT,7F083D90 ;branch if not commanding tank -LW T6,014C (SP) -//7F083C68: test motion -LW T3,99B8 (T3) ;T3=800799B8: -ADDIU AT,R0,0002 -LW T5,01A4 (SP) -BNEL T3,AT,7F083D88 -LW T8,0000 (S0) -//7F083C7C: -BEQ T5,R0,7F083CA0 -MOV.S F2,F20 -LW T4,0000 (S0) ;T4=p->BONDdata -LUI AT,8005 -LWC1 F10,514C (AT) -LWC1 F18,014C (T4) -MUL.S F2,F18,F10 -BEQ R0,R0,7F083D00 -NOP -//7F083CA0: -LWC1 F4,017C (SP) -LWC1 F8,0178 (SP) -C.LT.S F20,F4 -NOP -BC1FL 7F083CD8 -C.LT.S F20,F8 -JAL 7F080228 -MOV.S F12,F14 -LUI AT,8005 -LWC1 F6,5150 (AT) -MUL.S F2,F0,F6 -BEQ R0,R0,7F083D00 -NOP -//7F083CD4: -C.LT.S F20,F8 -LUI AT,BF80 -BC1F 7F083D00 -NOP -MTC1 AT,F12 -JAL 7F080228 -NOP -LUI AT,8005 -LWC1 F18,5154 (AT) -MUL.S F2,F0,F18 -NOP -//7F083D00: -LUI V1,8005 -LW V1,8374 (V1) -OR V0,R0,R0 -LW T0,0000 (S0) ;T0=p->BONDdata -BLEZ V1,7F083D64 -LUI AT,8005 -LUI A0,8003 -ADDIU A0,A0,6460 -LWC1 F0,5158 (AT) -LWC1 F18,0000 (A0) -ADDIU V0,V0,0001 -SLT AT,V0,V1 -MUL.S F20,F0,F18 -BEQL AT,R0,7F083D60 -ADD.S F18,F20,F2 -ADD.S F18,F20,F2 -ADDIU V0,V0,0001 -SLT AT,V0,V1 -SWC1 F18,0000 (A0) -LWC1 F18,0000 (A0) -MUL.S F20,F0,F18 -BNEL AT,R0,7F083D40 -ADD.S F18,F20,F2 -ADD.S F18,F20,F2 -//7F083D60: -SWC1 F18,0000 (A0) -LUI A0,8003 -ADDIU A0,A0,6460 -LUI AT,8005 -LWC1 F18,515C (AT) ;F18=8005515C: -LWC1 F8,0000 (A0) ;F8=80036460: -MUL.S F10,F8,F18 -BEQ R0,R0,7F083D8C -SWC1 F10,014C (T0) ;F10->lat. rot. correction -//7F083D84: -LW T8,0000 (S0) ;T8=p->BONDdata -SWC1 F20,014C (T8) ;0.0->BONDdata+14C: lat.rot.correction -//7F083D8C: test for remote mine detonation -LW T6,014C (SP) ;T6=SP+14C: remote mines detonated -BEQL T6,R0,7F083DB0 ;branch if not detonated -ADDIU T2,R0,0001 -LW T7,0000 (S0) ;T7=p->BONDdata -SW R0,0894 (T7) ;0->BONDdata+894: -LW T9,0000 (S0) ;T9=p->BONDdata -JAL 7F051A18 -SW R0,0898 (T9) ;0->BONDdata+898: r.item animation -//7F083DAC: -ADDIU T2,R0,0001 -JAL 7F09A464 ;V0=# players -SW T2,0074 (SP) ;1->SP+74: inventory advance control enabled -SLTI AT,V0,0002 -BNEL AT,R0,7F083DF0 ;branch if solo -LW T3,0074 (SP) -//7F083DC4: disable inventory advance when flag owned in flag tag -JAL 7F014758 ;V0=scenario -NOP -ADDIU AT,R0,0002 -BNEL V0,AT,7F083DF0 ;branch if not scenario 2: The Living Daylights (Flag Tag) -LW T3,0074 (SP) -JAL 7F08CF80 ;V0=TRUE if possess Flag (item 58) -NOP -BEQL V0,R0,7F083DF0 ;branch if not controlled -LW T3,0074 (SP) -SW R0,0074 (SP) ;0->SP+74: inventory advance control disabled -//7F083DEC: -LW T3,0074 (SP) ;T3=SP+74: inventory advance control -BEQL T3,R0,7F083E24 ;skip if disabled -LW T8,01BC (SP) -LW T5,0174 (SP) ;T5=SP+174: backward advance -BEQL T5,R0,7F083E10 ;branch if not advancing backward -LW T4,0170 (SP) -JAL 7F05D768 ;advance backward through inventory -NOP -//7F083F0C: -LW T4,0170 (SP) ;T4=SP+170: forward advance -BEQL T4,R0,7F083E24 -LW T8,01BC (SP) -JAL 7F05D6D0 ;advance through inventory -NOP -//7F083E20: -LW T8,01BC (SP) -BEQL T8,R0,7F083E3C -LW T7,01B8 (SP) -LW T6,0000 (S0) ;T6=p->BONDdata -BEQ R0,R0,7F083E50 -SW R0,0430 (T6) ;0->BONDdata+430: control style -//7F083E38: -LW T7,01B8 (SP) -BEQL T7,R0,7F083E54 -LW T3,0000 (S0) -LW T2,0000 (S0) ;T2=p->BONDdata -ADDIU T9,R0,0002 -SW T9,0430 (T2) ;2->BONDdata+430: control style -//7F083E50: -LW T3,0000 (S0) ;T3=p->BONDdata -LW V0,0430 (T3) ;V0=BONDdata+430: control style -BNEL V0,R0,7F083F64 ;branch if not zero -ADDIU AT,R0,0002 -//7F083F60: -JAL 7F067AA4 -OR A0,R0,R0 -LW T5,0148 (SP) -BEQL T5,R0,7F083EC4 -LW T7,0000 (S0) -JAL 7F07C6A8 ;V0= cur.player's auto-aim x setting -NOP -BEQL V0,R0,7F083EC4 -LW T7,0000 (S0) -LW T4,0000 (S0) ;T4=p->BONDdata -LW T8,0140 (T4) -BEQL T8,R0,7F083EC4 -LW T7,0000 (S0) -JAL 7F05D9D0 -OR A0,R0,R0 -OR A0,V0,R0 -JAL 7F05E0B4 -ADDIU A1,R0,0008 -BEQL V0,R0,7F083EC4 -LW T7,0000 (S0) -LW T6,0000 (S0) ;T6=p->BONDdata -LWC1 F4,013C (T6) -BEQ R0,R0,7F083ED8 -SWC1 F4,0070 (SP) -//7F083EC0: -LW T7,0000 (S0) ;T7=p->BONDdata -LUI AT,8005 -LWC1 F8,5160 (AT) ;F8=80055160: -LWC1 F6,014C (T7) ;F6=BONDdata+14C: lat.rot.correction -MUL.S F18,F6,F8 -SWC1 F18,0070 (SP) -//7F083ED8: -LW T9,0148 (SP) -BEQL T9,R0,7F083F30 -LW T4,0000 (S0) -JAL 7F07C5C0 -NOP -BEQL V0,R0,7F083F30 -LW T4,0000 (S0) -LW T2,0000 (S0) ;T2=p->BONDdata -LW T3,0130 (T2) -BEQL T3,R0,7F083F30 -LW T4,0000 (S0) -JAL 7F05D9D0 -OR A0,R0,R0 -OR A0,V0,R0 -JAL 7F05E0B4 -ADDIU A1,R0,0008 -BEQL V0,R0,7F083F30 -LW T4,0000 (S0) -LW T5,0000 (S0) ;T5=p->BONDdata -BEQ R0,R0,7F083F48 -LWC1 F14,012C (T5) -// -LW T4,0000 (S0) ;T4=p->BONDdata -LUI AT,8005 -LWC1 F6,5164 (AT) -LWC1 F10,0160 (T4) -NEG.S F4,F10 -MUL.S F14,F4,F6 -NOP -LUI A2,3F5C -ORI A2,A2,28F6 ;A2=3F5C28F6 -JAL 7F067F58 -LWC1 F12,0070 (SP) -BEQ R0,R0,7F083FB8 -LW RA,003C (SP) -// -ADDIU AT,R0,0002 -BNEL V0,AT,7F083FB8 -LW RA,003C (SP) -JAL 7F067AA4 -OR A0,R0,R0 -LW T8,0134 (SP) -LW T6,0130 (SP) -LUI AT,8005 -MTC1 T8,F8 -MTC1 T6,F4 -LWC1 F0,5168 (AT) -CVT.S.W F18,F8 -LUI AT,42A0 -MTC1 AT,F2 -CVT.S.W F6,F4 -MUL.S F10,F18,F0 -NOP -MUL.S F8,F6,F0 -DIV.S F12,F10,F2 -JAL 7F067FBC -DIV.S F14,F8,F2 -//7F083FB4: -LW RA,003C (SP) -LDC1 F20,0030 (SP) -LW S0,0038 (SP) -JR RA -ADDIU SP,SP,01C0 - -+_+ - -7F051A18 86548 trigger remote mine detonation -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F09B150 ;V0= cur player # -NOP -//7F051A28: set trigger for remote mines -LUI V1,8003 -ADDIU V1,V1,0AF4 -LW T6,0000 (V1) ;T6=80030AF4: remote mine register -ADDIU T7,R0,0001 -SLLV T8,T7,V0 ;T8=1<SE buffer -ADDIU A1,R0,00F3 ;A1= SE 0F3: watch button -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 ;A2=NULL -//7F051A58: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/7F086F9C.txt b/notes/GE Documentation/Gameplay and Misc/7F086F9C.txt deleted file mode 100644 index deca860..0000000 --- a/notes/GE Documentation/Gameplay and Misc/7F086F9C.txt +++ /dev/null @@ -1,415 +0,0 @@ -7F086F9C BBACC -ADDIU SP,SP,FFE0 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -SW A0,0020 (SP) -SW A1,0024 (SP) -JAL 7F09B214 ;F12-> watch menu current size -SW A2,0028 (SP) -LUI AT,4270 -MTC1 AT,F12 -JAL 70004544 -NOP -//7F086FCC: -LUI V1,8003 -ADDIU V1,V1,6430 -LW V0,0000 (V1) ;V0=80036430: -BEQ V0,R0,7F087034 -SLTI AT,V0,0004 -BNE AT,R0,7F087024 -LUI T6,8003 -LW T6,6428 (T6) -BEQL T6,R0,7F087028 -LW T9,0000 (V1) -//7F086FF4: -JAL 70003C1C ;V0= p->video2's buffer -NOP -LUI T7,803E -ADDIU T7,T7,A800 -LUI V1,8003 -BNE V0,T7,7F087024 -ADDIU V1,V1,6430 -ADDIU T8,R0,0001 -LUI AT,8003 -SW T8,642C (AT) -BEQ R0,R0,7F087088 -SW R0,0000 (V1) -//7F087024: -LW T9,0000 (V1) -ADDIU T0,T9,0001 -BEQ R0,R0,7F087088 -SW T0,0000 (V1) -//7F087034: -LUI V1,8003 -ADDIU V1,V1,6434 -LW V0,0000 (V1) -BEQ V0,R0,7F087088 -SLTI AT,V0,0004 -BNEL AT,R0,7F087080 -LW T2,0000 (V1) -//7F087050: -JAL 70003C1C ;V0= p->video2's buffer -NOP -LUI T1,803B -ADDIU T1,T1,5000 -LUI V1,8003 -BNE V0,T1,7F08707C -ADDIU V1,V1,6434 -LUI AT,8003 -SW R0,642C (AT) -BEQ R0,R0,7F087088 -SW R0,0000 (V1) -//7F08707C: -LW T2,0000 (V1) -ADDIU T3,T2,0001 -SW T3,0000 (V1) -//7F087088: -LUI T4,8003 -LW T4,642C (T4) -BEQ T4,R0,7F0870B8 -NOP -//7F087098: -JAL 70003C1C ;V0= p->video2's buffer -NOP -LUI T5,803E -ADDIU T5,T5,A800 -BNE V0,T5,7F0870B8 -LUI A0,8003 -JAL 70003C3C -LW A0,6428 (A0) -//7F0870B8: set based on screen ratio -JAL 7F0A4EE0 ;V0=screen ratio -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F08716C ;branch if normal -NOP -//7F0870CC: ratio: 16:9 -JAL 7F086C40 ;V0= viewport width for current player -NOP -JAL 7F086D24 ;V0= viewport height for current player -SH V0,001C (SP) -LH T6,001C (SP) -MTC1 V0,F8 -LUI AT,3F40 -MTC1 T6,F4 -CVT.S.W F10,F8 -MTC1 AT,F18 -LUI AT,8005 -LWC1 F8,5264 (AT) -CVT.S.W F6,F4 -DIV.S F16,F6,F10 -MUL.S F4,F16,F18 -NOP -MUL.S F12,F4,F8 -JAL 7F09B224 ;F12-> [BONDdata+11D4] -NOP -JAL 7F086C40 ;V0= viewport width for current player -NOP -JAL 7F086D24 ;V0= viewport height for current player -SH V0,001C (SP) -LH T7,001C (SP) -MTC1 V0,F16 -LUI AT,3F40 -MTC1 T7,F6 -CVT.S.W F18,F16 -MTC1 AT,F8 -LUI AT,8005 -LWC1 F16,5268 (AT) -CVT.S.W F10,F6 -DIV.S F4,F10,F18 -MUL.S F6,F4,F8 -NOP -MUL.S F12,F6,F16 -JAL 70004590 ;F12->video2 page width -NOP -BEQ R0,R0,7F0871C4 -NOP -//7F08716C: ratio: normal -JAL 7F086C40 ;V0= viewport width for current player -NOP -JAL 7F086D24 ;V0= viewport height for current player -SH V0,001C (SP) -LH T8,001C (SP) -MTC1 V0,F4 -MTC1 T8,F10 -CVT.S.W F8,F4 -CVT.S.W F18,F10 -JAL 7F09B224 ;F12-> [BONDdata+11D4] -DIV.S F12,F18,F8 -JAL 7F086C40 ;V0= viewport width for current player -NOP -JAL 7F086D24 ;V0= viewport height for current player -SH V0,001C (SP) -LH T9,001C (SP) -MTC1 V0,F10 -MTC1 T9,F6 -CVT.S.W F4,F10 -CVT.S.W F16,F6 -JAL 70004590 ;F12->video2 page width -DIV.S F12,F16,F4 -//7F0871C4: -JAL 7F086C40 ;V0= viewport width for current player -NOP -JAL 7F086D24 ;V0= viewport height for current player -SH V0,001C (SP) -LH A0,001C (SP) -JAL 7F09B1DC ;set current player screen width (A0) and height (A1) (low) -OR A1,V0,R0 -JAL 7F086CC4 ;V0= viewport ulx for current player -NOP -JAL 7F086E38 ;V0= viewport uly for current player -SH V0,001C (SP) -LH A0,001C (SP) -JAL 7F09B1F8 ;set current player screen width (A0) and height (A1) (high) -OR A1,V0,R0 -JAL 7F086BF8 -NOP -JAL 7F086C1C -SH V0,001C (SP) -SLL A1,V0,0x10 -SRA T0,A1,0x10 -OR A1,T0,R0 -JAL 700043F8 ;set video2 text clip width (A0) and height (A1) -LH A0,001C (SP) -JAL 7F086BF8 -NOP -JAL 7F086C1C -SH V0,001C (SP) -SLL A1,V0,0x10 -SRA T1,A1,0x10 -OR A1,T1,R0 -JAL 700043B4 -LH A0,001C (SP) -JAL 7F086C40 ;V0= viewport width for current player -NOP -JAL 7F086D24 ;V0= viewport height for current player -SH V0,001C (SP) -SLL A1,V0,0x10 -SRA T2,A1,0x10 -OR A1,T2,R0 -JAL 7000443C ;set video2 width (A0) and height (A1) -LH A0,001C (SP) -JAL 7F086CC4 ;V0= viewport ulx for current player -NOP -JAL 7F086E38 ;V0= viewport uly for current player -SH V0,001C (SP) -SLL A1,V0,0x10 -SRA T3,A1,0x10 -OR A1,T3,R0 -JAL 700044BC ;set video2 ulx (A0) and uly (A1) -LH A0,001C (SP) -JAL 7F0808BC -NOP -JAL 7F080A80 -NOP -JAL 7F0A4E50 ;V0= cur.player's auto-aim control setting -NOP -JAL 7F07C570 ;A0->cur.player's auto-aim -OR A0,V0,R0 -JAL 7F0A4E50 ;V0= cur.player's auto-aim control setting -NOP -JAL 7F07C658 ;A0->cur.player's auto-aim x setting -OR A0,V0,R0 -JAL 7F0A4E68 ;V0= cur.player's look-ahead setting -NOP -JAL 7F07C550 ;A0->cur.player's look-ahead setting -OR A0,V0,R0 -JAL 7F0A4EB0 ;V0= cur.player's ammo on-screen setting -NOP -ADDIU A0,R0,0001 -JAL 7F0690F4 -OR A1,V0,R0 -JAL 7F09A464 ;V0= # players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F087308 -NOP -JAL 7F0A4E98 ;V0= cur.player's sight on-screen setting -NOP -SLTU A1,R0,V0 -BNE A1,R0,7F087330 -NOP -JAL 7F09A464 ;V0= # players -NOP -SLTI V1,V0,0002 -XORI A1,V1,0001 -BEQ A1,R0,7F087330 -LUI T4,8008 -LW T4,A0B4 (T4) ;T4=8007A0B4: cur.player.stats -LBU A1,006B (T4) ;A1=stats+6B: sight setting -SLTU T5,R0,A1 -OR A1,T5,R0 -JAL 7F06A5A8 -ADDIU A0,R0,0001 -LUI V0,8003 -LW V0,6494 (V0) ;V0=80036494: cur.camera mode -ADDIU AT,R0,0004 -BEQ V0,R0,7F087368 -NOP -BNE V0,AT,7F08735C -LUI T6,8003 -LW T6,64B0 (T6) -BNE T6,R0,7F087368 -ADDIU AT,R0,000A -BNE V0,AT,7F0873B4 -LB A0,0023 (SP) -JAL 7F09B150 ;V0= cur player # -NOP -BNE V0,R0,7F087394 -LUI T0,8008 -LUI V0,8008 -ADDIU V0,V0,9A20 -LUI T8,8005 -LW T8,8374 (T8) -LW T7,0000 (V0) -ADDU T9,T7,T8 -SW T9,0000 (V0) -LW T0,A0B0 (T0) ;T6=8007A0B0: p->cur.player.data -LB A0,0023 (SP) -LB A1,0027 (SP) -LHU A2,002A (SP) -JAL 7F084648 -LHU A3,03B4 (T0) -BEQ R0,R0,7F0873CC -NOP -LUI T1,8008 -LW T1,A0B0 (T1) -LB A1,0027 (SP) -LHU A2,002A (SP) -JAL 7F086990 -LHU A3,03B4 (T1) -LUI V0,8008 -ADDIU V0,V0,9A24 -LUI T3,8005 -LW T3,8498 (T3) -LW T2,0000 (V0) -LUI T5,8003 -ADDU T4,T2,T3 -SW T4,0000 (V0) -LW T5,64A0 (T5) -BEQ T5,R0,7F08750C -NOP -JAL 7F0BFC04 ;V0=player control lock -NOP -BNE V0,R0,7F0874C0 -LUI T7,8008 -LW T7,A0B0 (T7) -LHU T6,002A (SP) -ADDIU T2,R0,0002 -LHU T8,03B4 (T7) -LUI AT,8003 -NOR T9,T8,R0 -AND T0,T6,T9 -ANDI T1,T0,F030 -BEQ T1,R0,7F0874C0 -NOP -JAL 7F08088C ;V0= TRUE if fade to black complete -SW T2,64A0 (AT) -BEQ V0,R0,7F087490 -LUI T3,8008 -LW T3,A0B0 (T3) -MTC1 R0,F0 -OR A0,R0,R0 -LWC1 F18,03DC (T3) -OR A1,R0,R0 -C.EQ.S F0,F18 -NOP -BC1F 7F0874C0 -NOP -MFC1 A3,F0 -JAL 7F0807B0 -OR A2,R0,R0 -LUI AT,4270 -MTC1 AT,F12 -LUI AT,3F80 -MTC1 AT,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -BEQ R0,R0,7F0874C0 -NOP -LUI V0,8008 -LW V0,A0B0 (V0) -MTC1 R0,F0 -LUI AT,3F80 -LWC1 F8,0404 (V0) -C.EQ.S F0,F8 -NOP -BC1F 7F0874C0 -NOP -MTC1 AT,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -LWC1 F12,03E0 (V0) -LUI T4,8003 -LW T4,64A0 (T4) -ADDIU AT,R0,0002 -BNE T4,AT,7F08750C -NOP -JAL 7F08088C ;V0= TRUE if fade to black complete -NOP -BEQ V0,R0,7F08750C -LUI T5,8008 -LW T5,A0B0 (T5) -LUI AT,3F80 -MTC1 AT,F6 -LWC1 F10,03DC (T5) -C.EQ.S F6,F10 -NOP -BC1F 7F08750C -NOP -JAL 70006968 ;return to title screen from stage -NOP -LUI T7,8003 -LW T7,6498 (T7) -BEQ T7,R0,7F087524 -NOP -JAL 7F07B1A4 -NOP -LUI V0,8008 -LW V0,A0B0 (V0) -LW T8,00D8 (V0) -BEQ T8,R0,7F087598 -NOP -LW V1,0424 (V0) -ADDIU A0,R0,0001 ;A0=left hand -BNE V1,R0,7F087568 -NOP -JAL 7F05D914 ;Draw item A1 in hand A0 -OR A1,R0,R0 ;A1= NULL item -OR A0,R0,R0 ;A0=right hand -JAL 7F05D914 ;Draw item A1 in hand A0 -OR A1,R0,R0 ;A1=NULL item -LUI V0,8008 -LW V0,A0B0 (V0) -LW V1,0424 (V0) -BEQ V1,R0,7F087598 -NOP -LW T6,0428 (V0) -LUI T9,8003 -BEQ T6,R0,7F087598 -NOP -LW T9,6510 (T9) -SLTI AT,T9,0003 -BNE AT,R0,7F087598 -NOP -JAL 70006930 ;run title -NOP -LUI T0,8003 -LW T0,6494 (T0) -ADDIU AT,R0,000A -BNE T0,AT,7F0875C4 -NOP -JAL 7F08088C ;V0= TRUE if fade to black complete -NOP -BEQ V0,R0,7F0875C4 -NOP -JAL 70006930 ;run title -NOP -LUI T2,8008 -LW T2,A0B0 (T2) -LHU T1,002A (SP) -SH T1,03B4 (T2) -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Character hit locations.txt b/notes/GE Documentation/Gameplay and Misc/Character hit locations.txt deleted file mode 100644 index 67c9b61..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Character hit locations.txt +++ /dev/null @@ -1,10 +0,0 @@ -Gleaned from registration at 7F027360 - -Part# hit# type -7 2 body -8 1 head -F 2 body -64 4 weapon (other 1) -6E 5 hat (other 2) -!0 3 limb - diff --git a/notes/GE Documentation/Gameplay and Misc/Damage and Kill Attributement.txt b/notes/GE Documentation/Gameplay and Misc/Damage and Kill Attributement.txt deleted file mode 100644 index 3399558..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Damage and Kill Attributement.txt +++ /dev/null @@ -1,347 +0,0 @@ -7F08991C: BE44C Damage and Kill Attributement -ADDIU SP,SP,FFC0 -LUI T6,8008 -LW T6,A0B4 (T6) -SW RA,0014 (SP) -SWC1 F14,0044 (SP) -SW A2,0048 (SP) -SW A3,004C (SP) -LWC1 F4,005C (T6) -LUI T7,8008 -LW T7,A0B0 (T7) -MUL.S F6,F4,F12 -SWC1 F6,003C (SP) -LW T8,01C8 (T7) -BEQ T8,R0,7F0899A0 -NOP -JAL 7F08A2FC -NOP -LUI A0,8008 -LW A0,A0B0 (A0) -MFC1 A3,F0 -ADDIU A1,R0,002E -ADDIU A2,R0,0001 -JAL 7F0A2F30 -ADDIU A0,A0,12B8 -JAL 7F08A2EC -NOP -LUI A0,8008 -LW A0,A0B0 (A0) -MFC1 A3,F0 -ADDIU A1,R0,002E -ADDIU A2,R0,FFFF -JAL 7F0A2F30 -ADDIU A0,A0,1598 -JAL 7F09A464 -NOP -SLTI AT,V0,0002 -BNEZ AT,7F0899CC -LUI T9,8009 -LW T9,C700 (T9) -LUI T0,8009 -BNEL T9,R0,7F089E40 -LW RA,0014 (SP) -LW T0,C704 (T0) -BNEZ T0,7F089E3C -LUI T1,8003 -LW T1,6448 (T1) -ADDIU AT,R0,0001 -LWC1 F8,003C (SP) -BNE T1,AT,7F0899F8 -LUI V0,8008 -LUI AT,3E80 -MTC1 AT,F10 -NOP -MUL.S F16,F8,F10 -SWC1 F16,003C (SP) -LW V0,A0B0 (V0) -LW T2,00D8 (V0) -BNEZ T2,7F089A5C -NOP -LBU T3,12B6 (V0) -BNEZ T3,7F089A5C -NOP -JAL 7F09B150 -NOP -OR A0,V0,R0 -JAL 7000C854 -LUI A1,3E80 -JAL 7F0A4DC0 -NOP -SLTI AT,V0,0004 -BNEZ AT,7F089A5C -NOP -JAL 7F09B150 -NOP -JAL 7F09A464 -SW V0,001C (SP) -LW T4,001C (SP) -LUI A1,3E80 -JAL 7000C854 -ADDU A0,V0,T4 -JAL 7F09A464 -NOP -SLTI AT,V0,0002 -BNEZ AT,7F089AAC -NOP -JAL 7F014758 -NOP -ADDIU AT,R0,0004 -BNE V0,AT,7F089AAC -LUI V0,8008 -LW V0,A0B0 (V0) -LWC1 F18,00DC (V0) -LWC1 F4,2A3C (V0) -LWC1 F8,00E0 (V0) -LWC1 F10,2A40 (V0) -MUL.S F6,F18,F4 -NOP -MUL.S F16,F8,F10 -ADD.S F18,F6,F16 -SWC1 F18,003C (SP) -LUI V0,8008 -LW V0,A0B0 (V0) -LBU T5,12B6 (V0) -BNEL T5,R0,7F089E40 -LW RA,0014 (SP) -LW T6,00D8 (V0) -LUI T7,8003 -BNEL T6,R0,7F089E40 -LW RA,0014 (SP) -LW T7,64B4 (T7) -BNEL T7,R0,7F089E40 -LW RA,0014 (SP) -LW T8,00F4 (V0) -BLTZL T8,7F089B10 -LW V1,01C8 (V0) -JAL 7F09A464 -NOP -SLTI AT,V0,0002 -BNEZ AT,7F089E3C -LUI V0,8008 -LW V0,A0B0 (V0) -LW T9,00F4 (V0) -BNEL T9,R0,7F089E40 -LW RA,0014 (SP) -LW V1,01C8 (V0) -ADDIU AT,R0,0005 -BEQ V1,AT,7F089E3C -ADDIU AT,R0,000C -BEQL V1,AT,7F089E40 -LW RA,0014 (SP) -LWC1 F4,00DC (V0) -SWC1 F4,00E4 (V0) -LUI V0,8008 -LW V0,A0B0 (V0) -LWC1 F8,00E0 (V0) -JAL 7F09A464 -SWC1 F8,00E8 (V0) -SLTI AT,V0,0002 -BNEL AT,R0,7F089C1C -LW V1,0050 (SP) -JAL 7F09B150 -NOP -SW V0,0038 (SP) -LWC1 F12,0044 (SP) -JAL 7F05AA30 -LWC1 F14,0048 (SP) -LUI AT,4334 -MTC1 AT,F10 -LUI AT,8005 -LWC1 F16,52B0 (AT) -MUL.S F6,F0,F10 -LW T0,0038 (SP) -LUI AT,43B4 -LUI T2,8008 -SLL T1,T0,0x2 -MTC1 AT,F4 -ADDU T2,T2,T1 -DIV.S F18,F6,F16 -LW T2,9EE0 (T2) -MTC1 R0,F12 ;F12=0.0 -LW T3,004C (SP) -LWC1 F10,0148 (T2) -LUI AT,42B4 -SLL T4,T3,0x3 -LUI T5,8008 -SUBU T4,T4,T3 -MTC1 AT,F6 -SLL T4,T4,0x4 -ADDIU T5,T5,9EF0 -LUI AT,4387 -ADDU V0,T4,T5 -SUB.S F8,F4,F18 -SUB.S F2,F10,F8 -C.LT.S F2,F12 -NOP -BC1FL 7F089BE8 -C.LT.S F2,F6 -NEG.S F2,F2 -C.LT.S F2,F6 -NOP -BC1TL 7F089C10 -LW T6,003C (V0) -MTC1 AT,F16 -NOP -C.LT.S F16,F2 -NOP -BC1FL 7F089C1C -LW V1,0050 (SP) -LW T6,003C (V0) -ADDIU T7,T6,0001 -SW T7,003C (V0) -LW V1,0050 (SP) -MTC1 R0,F12 ;F12=0.0 -LUI V0,8008 -BEQ V1,R0,7F089C68 -NOP -LW V0,A0B0 (V0) -LWC1 F18,003C (SP) -LWC1 F0,00E0 (V0) -LWC1 F2,2A40 (V0) -MUL.S F4,F0,F2 -C.LE.S F18,F4 -NOP -BC1F 7F089C68 -NOP -DIV.S F10,F18,F2 -SUB.S F8,F0,F10 -SWC1 F8,00E0 (V0) -LUI V0,8008 -BEQ R0,R0,7F089DD8 -LW V0,A0B0 (V0) ;V0=8007A0B0: BONDdata -//7F089C68: -LUI V0,8008 -BEQ V1,R0,7F089CAC -LW V0,A0B0 (V0) ;V0=8007A0B0: BONDdata -LWC1 F6,00E0 (V0) -LWC1 F16,2A40 (V0) -LWC1 F18,003C (SP) -LUI AT,3F80 -DIV.S F4,F6,F16 -LUI T8,8008 -MTC1 AT,F8 ;F8=1.0 [3F800000] -SUB.S F10,F18,F4 -SWC1 F10,003C (SP) -SWC1 F12,00E0 (V0) ;F12->BONDdata+E0: 0->armor -LW T8,A0B0 (T8) ;T8=8007A0B0: BONDdata -LUI V0,8008 -SWC1 F8,2A40 (T8) ;1.0->BONDdata+2A40: armor -LW V0,A0B0 (V0) ;V0=8007A0B0: BONDdata -LWC1 F6,003C (SP) -LWC1 F16,2A3C (V0) ;F16=BONDdata+2A3C: health -LWC1 F4,00DC (V0) ;F4=BONDdata+DC: health (255-0) -DIV.S F18,F6,F16 -SUB.S F10,F4,F18 -SWC1 F10,00DC (V0) ;F10->BONDdata+DC: health (255-0) -LUI V0,8008 -LW V0,A0B0 (V0) ;V0=8007A0B0: BONDdata -LWC1 F8,00DC (V0) ;F8=BONDdata+DC: health (255-0) -C.LE.S F8,F12 -NOP -BC1FL 7F089DDC ;branch if health !< 0.0 -LW T3,00F4 (V0) -//7F089CE0: attribute kill: note co-op patch shown in this dASM -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0002 ;TRUE if solo -BNEZ AT,7F089DC8 ;branch if solo -LW A0,004C (SP) ;SP+4C=A0: killer -JAL 7F09B150 ;V0= 8007A0B8: killed -SLTU AT,A0,V0 ;TRUE if killer a player -BEQL R0,AT,7F089D04 ;branch if player kill -SW V0,004C (SP) ;SP+4C=V0: killed set as killer - non-player kills are now suicides -//7F089D04: test scenario-specific handlers: note MP weapon patch shown in this dASM -JAL 7F014758 ;V0=scenario [8002B540] -SW V0,002C (SP) ;SP+2C=V0: killed -ADDIU AT,R0,0003 -BNE AT,V0,7F089D28 ;branch if not MwtGX -SW R0,0028 (SP) ;SP+28=0: -JAL 7F04FD98 ;test if possess item A0 while alive -ADDIU A0,R0,00F7 ;A0=F7: weapon in slot F7: GX -NOP -SW V0,0028 (SP) ;V0->SP+28: TRUE if item held -//7F089D28: -LW T0,002C (SP) ;T0=killed -LW T1,004C (SP) ;T1=killer -BEQ T0,T1,7F089D48 ;branch if suicide -NOP -JAL 7F05677C ;drop inventory -NOP -JAL 7F06A95C ;increment #deaths -NOP -//7F089D48: -JAL 7F09B10C ;set cur. player to A0 -LW A0,004C (SP) ;A0=killer -LW T2,002C (SP) ;T2=killed -LW T3,004C (SP) ;A3=killer -BNE T2,T3,7F089D70 ;branch if not a suicide -NOP -//7F089D60: suicides... -JAL 7F06AA18 ;increment #suicides and display MP -NOP -BEQ R0,R0,7F089D8C -NOP -//7F089D70: player kills -JAL 7F06A780 ;increment kill count and display MP -NOP -LW T4,0028 (SP) ;T4=SP+28: TRUE if own GX -BEQ T4,R0,7F089D8C ;branch if no GX held -NOP -//7F089D84: MwtGX specific -JAL 7F06A934 ;inc. # times killed GX owner (?) -NOP -//7F089D8C: -JAL 7F09B10C ;sets current player to A0 (killed) -LW A0,002C (SP) ;A0=killed -//7F089D94: -LW T5,004C (SP) ;T5=killer -LW T7,002C (SP) ;T7=killed -LUI T0,8008 -SLL T6,T5,0x3 -SUBU T6,T6,T5 -SLL T6,T6,0x4 ;T6=T5*0x70: offset to killer's stats -SLL T8,T7,0x2 ;T8=killed->offset -ADDU T9,T6,T8 -ADDIU T0,T0,9EF0 ;T0=80079EF0 -ADDU V0,T9,T0 ;V0=80079EF0+offset: p->player stats -LW T1,0024 (V0) ;T1=#player T7 kills -ADDIU T2,T1,0001 ;T2=kills++ -SW T2,0024 (V0) ;save revised killcount -//7F089DC8: solo and multi -JAL 7F0897A8 -NOP -LUI V0,8008 -LW V0,A0B0 (V0) ;V0=8007A0B0: BONDdata -//7F089DD8: -LW T3,00F4 (V0) ;T3=BONDdata+F4: -LWC1 F6,0044 (SP) -LUI T4,8008 -BGEZ T3,7F089E20 -LUI A0,8006 -ADD.S F16,F6,F6 -LWC1 F4,0180 (V0) -ADD.S F18,F4,F16 -SWC1 F18,0180 (V0) -LWC1 F10,0048 (SP) -LUI V0,8008 -LW V0,A0B0 (V0) ;V0=8007A0B0: BONDdata -ADD.S F8,F10,F10 -LWC1 F6,0188 (V0) -ADD.S F4,F6,F8 -SWC1 F4,0188 (V0) -LUI V0,8008 -LW V0,A0B0 (V0) ;V0=8007A0B0: BONDdata -//7F089E20: -SW R0,00F4 (V0) ; 0->BONDdata+F4: -LW T4,A0B0 (T4) ;T4=8007A0B0: BONDdata -ADDIU A1,R0,0044 ;A1=SE 044: -OR A2,R0,R0 ;A2=NULL p->data -SW R0,00F8 (T4) ; 0->BONDdata+F8: -JAL 70008E08 ;play sound effect A1 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -//7F089E3C: return -LW RA,0014 (SP) -ADDIU SP,SP,0040 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004758 - image capture - jpeg 16bit.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004758 - image capture - jpeg 16bit.txt deleted file mode 100644 index 292ccf8..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004758 - image capture - jpeg 16bit.txt +++ /dev/null @@ -1,105 +0,0 @@ -70004758 5358 image capture routine: 16bit jpeg -ADDIU SP,SP,FEC8 -SW S1,0024 (SP) -SW S2,0028 (SP) -SW S0,0020 (SP) -LUI S1,8003 -SW RA,002C (SP) -ADDIU S1,S1,8490 ;S1=80028490: "grab.%d.jpeg" -ADDIU S0,SP,0038 ;S0=SP+38: buffer for string -ADDIU S2,SP,0034 ;S2=SP+34: p->instance -//7000477C: -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 ;A1=S1 -OR A0,S0,R0 ;A0=S0: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 ;A1=S2: @filesize -BEQ V0,R0,700047B8 ;branch if unique -//700047A0: loop and increment value if found -LUI A2,8002 -LW A2,32C4 (A2) -LUI AT,8002 -ADDIU A2,A2,0001 -BEQ R0,R0,7000477C -SW A2,32C4 (AT) ;cur.jpeg16bit +=1 -//700047B8: -LUI A2,8002 -LUI A1,8003 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -ADDIU A1,A1,84A0 ;A1=800284A0: "grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= text clip width -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= text clip height -OR S1,T6,R0 -MULTU V0,S1 -LUI T7,8002 -LW T7,32A8 (T7) ;T7=800232A8: p->viewport -OR A0,S0,R0 ;A0=S0: p->text -LW A1,0028 (T7) ;A1= p->data -MFLO A2 ;A2=width * height -SLL T8,A2,0x1 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T8,R0 ;A2=width * height * 2: size of VI buffer -//7000480C: send command line: Uix2pix -xs{width} grab.{instance}.temp.Uix -LUI A2,8002 -LUI A1,8003 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -ADDIU A1,A1,84B4 ;A1=800284B4: "uix2pix grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//7000482C: send command line: fromalias - probably a copy/rename routine -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -LUI A1,8003 -ADDIU A1,A1,84D0 ;A1=800284D0: "fromalias grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004850: send command line: imagecopy - format is jfif, converting raw rgb into jpeg -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -LUI A1,8003 -ADDIU A1,A1,84FC ;A1=800284FC: "imgcopy -fjfif grab.%d.temp.rgb grab.%d.jpeg" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004874: remove intermediate images -LUI A2,8002 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -LUI A1,8003 -ADDIU A1,A1,852C ;A1=8002852C: "rm grab.%d.temp.uix grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -OR A3,A2,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -SW A2,0010 (SP) -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//7000489C: open image in imgview -LUI A2,8002 -LUI A1,8003 -LW A2,32C4 (A2) ;A2=800232C4: cur.jpeg16bit -ADDIU A1,A1,8564 ;A1=80028564: "imgview grab.%d.jpeg" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//700048BC: return -LW RA,002C (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -JR RA -ADDIU SP,SP,0138 diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/700048D4 - image capture - jpeg 32bit.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/700048D4 - image capture - jpeg 32bit.txt deleted file mode 100644 index a38965a..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/700048D4 - image capture - jpeg 32bit.txt +++ /dev/null @@ -1,109 +0,0 @@ -700048D4 54D4 image capture routine: 32bit jpeg -ADDIU SP,SP,FEC8 -SW S1,0020 (SP) -SW S2,0024 (SP) -SW S0,001C (SP) -LUI S1,8003 -SW RA,002C (SP) -SW S3,0028 (SP) -ADDIU S1,S1,857C ;S1=8002857C: "grab.%d.jpeg" -ADDIU S0,SP,0038 ;S0=SP+38: p->buffer -ADDIU S2,SP,0034 ;S2=SP+34: p->instance -//700048FC: find an unused instance -LUI S3,8002 -LW A2,32C8 (S3) ;A2=800232C8: cur.jpeg32bit -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 -OR A0,S0,R0 ;A0=S0: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 ;A1=S2: @filesize -BEQ V0,R0,70004938 ;branch if unique -//70004920: loop and increment value if something found -LUI S3,8002 -LW S3,32C8 (S3) -LUI AT,8002 -ADDIU S3,S3,0001 -BEQ R0,R0,700048FC -SW S3,32C8 (AT) ;jpeg grab# +=1 -//70004938: grab -LUI S3,8002 -LUI A1,8003 -LW A2,32C8 (S3) ;A2=800232C8: cur.jpeg32bit -ADDIU A1,A1,858C ;A1=8002858C: "grab.%d.temp.Uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= text clip width -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= text clip height -OR S1,T6,R0 -MULTU V0,S1 -LUI A1,803B -ADDIU A1,A1,5000 ;A1=803B5000 -OR A0,S0,R0 ;A0=S0: p->string -MFLO A2 ;A2=width * height -SLL T7,A2,0x2 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T7,R0 ;A2=width * height * 4: size of 32bit video buffer -//70004988: send command line: Uix2pix -xs{width} grab.{instance}.temp.Uix -JAL 7000441C ;V0= text clip width -NOP -LUI S3,8002 -LUI A1,8003 -ADDIU A1,A1,85A0 ;A1=800285A0: "Uix2pix -xs%d grab.%d.temp.Uix" -LW A3,32C8 (S3) ;A3=800232C8: cur.jpeg32bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,V0,R0 ;A2=V0: width -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 ;A0=S0: p->string -//700049B4: send command line: fromalias - probably a copy/rename routine -LUI S3,8002 -LW A3,32C8 (S3) ;A3=800232C8: cur.jpeg32bit -LUI A1,8003 -ADDIU A1,A1,85C0 ;A1=800285C0: "fromalias grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//700049D8: send command line: imagecopy - format is jfif, converting raw rgb into jpeg -LUI S3,8002 -LW A3,32C8 (S3) -LUI A1,8003 -ADDIU A1,A1,85EC ;A1=800285EC: "imgcopy -fjfif grab.%d.temp.rgb grab.%d.jpeg" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//700049FC: remove intermediate images -LUI S3,8002 -LW A3,32C8 (S3) ;A3=800232C8: cur.jpeg32bit -LUI A1,8003 -ADDIU A1,A1,861C ;A1=8002861C: "rm grab.%d.temp.Uix grab.%d.temp.pix grab.%d.temp.rgb" -OR A0,S0,R0 -OR A2,A3,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -SW A3,0010 (SP) -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004A24: open image in imgview -LUI S3,8002 -LUI A1,8003 -LW A2,32C8 (S3) -ADDIU A1,A1,8654 ;A1=80028654: "imgview grab.%d.jpeg" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004A44: return -LW RA,002C (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -LW S2,0024 (SP) -LW S3,0028 (SP) -JR RA -ADDIU SP,SP,0138 diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004A60 - image capture - rgb 16bit.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004A60 - image capture - rgb 16bit.txt deleted file mode 100644 index 6ad722e..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004A60 - image capture - rgb 16bit.txt +++ /dev/null @@ -1,94 +0,0 @@ -70004A60 5660 image capture routine: 16bit rgb -ADDIU SP,SP,FED0 -SW S1,001C (SP) -SW S2,0020 (SP) -SW S0,0018 (SP) -LUI S1,8003 -SW RA,0024 (SP) -ADDIU S1,S1,866C ;S1=8002866C: "grab.%d.rgb" -ADDIU S0,SP,0030 ;S0=SP+30: p->buffer -ADDIU S2,SP,002C ;S2=SP+2C: p->instance -//70004A84: find an unused instance -LUI A2,8002 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 -OR A0,S0,R0 -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 -BEQ V0,R0,70004AC0 ;branch if unique -//70004AA8: loop and increment value if found -LUI A2,8002 -LW A2,32CC (A2) -LUI AT,8002 -ADDIU A2,A2,0001 -BEQ R0,R0,70004A84 -SW A2,32CC (AT) ;cur.rgb16bit += 1 -//70004AC0: grab base entry -LUI A2,8002 -LUI A1,8003 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -ADDIU A1,A1,8678 ;A1=80028678: "grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= text clip width -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= text clip height -OR S1,T6,R0 -MULTU V0,S1 -LUI T7,8002 -LW T7,32A8 (T7) ;T7=800232A8: p->viewport -OR A0,S0,R0 ;A0=S0: p->string -LW A1,0028 (T7) ;A1=p->data -MFLO A2 ;A2=width * height -SLL T8,A2,0x1 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T8,R0 ;A2=width * height * 2: size of screen buffer -//70004B14: send command line: Uix2pix grab.{instance}.temp.uix -LUI A2,8002 -LUI A1,8003 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -ADDIU A1,A1,868C ;A1=8002868C: "uix2pix grab.%d.temp.uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B34: send command line: fromalias - probably a copy/rename routine -LUI A2,8002 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -LUI A1,8003 -ADDIU A1,A1,86A8 ;A1=800286A8: "fromalias grab.%d.temp.pix grab.%d.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B58: remove intermediate images -LUI A2,8002 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -LUI A1,8003 -ADDIU A1,A1,86D0 ;A1=800286D0: "rm grab.%d.temp.uix grab.%d.temp.pix" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A3,A2,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B7C: open image in imgview -LUI A2,8002 -LUI A1,8003 -LW A2,32CC (A2) ;A2=800232CC: cur.rgb16bit -ADDIU A1,A1,86F8 ;A1=800286F8: "imgview grab.%d.rgb" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004B9C: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0130 diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004BB4 - image capture - rgb 32bit.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004BB4 - image capture - rgb 32bit.txt deleted file mode 100644 index f44491c..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004BB4 - image capture - rgb 32bit.txt +++ /dev/null @@ -1,98 +0,0 @@ -70004BB4 57B4 image capture routine: 32bit rgba -ADDIU SP,SP,FED0 -SW S1,0018 (SP) -SW S2,001C (SP) -SW S0,0014 (SP) -LUI S1,8003 -SW RA,0024 (SP) -SW S3,0020 (SP) -ADDIU S1,S1,870C ;S1=8002870C: "grab.%d.rgb" -ADDIU S0,SP,0030 ;S0=SP+30: p->buffer -ADDIU S2,SP,002C ;S2=SP+2C: p->instance -//70004BDC: -LUI S3,8002 -LW A2,32D0 (S3) ;A2=800232D0: cur.rgb32bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A1,S1,R0 -OR A0,S0,R0 ;A0=S0: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S2,R0 ;A1=S2: @filesize -BEQ V0,R0,70004C18 ;branch if unique -//70004BDC: loop and increment value if found -LUI S3,8002 -LW S3,32D0 (S3) -LUI AT,8002 -ADDIU S3,S3,0001 -BEQ R0,R0,70004BDC -SW S3,32D0 (AT) ;cur.rgb32bit += 1 -//70004C18: grab base entry -LUI S3,8002 -LUI A1,8003 -LW A2,32D0 (S3) ;A2=800232D0: cur.rgb32bit -ADDIU A1,A1,8718 ;A1=80028718: "grab.%d.temp.Uix" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7000441C ;V0= text clip width -NOP -SLL S1,V0,0x10 -SRA T6,S1,0x10 -JAL 7000442C ;V0= text clip height -OR S1,T6,R0 -MULTU V0,S1 -LUI A1,803B -ADDIU A1,A1,5000 ;A1=803B5000 -OR A0,S0,R0 -MFLO A2 ;A2=width * height -SLL T7,A2,0x2 -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -OR A2,T7,R0 ;A2=width * height * 4 -//70004C68: send command line: Uix2pix -xs{width} grab.{instance}.temp.Uix -JAL 7000441C ;V0= text clip width -NOP -LUI S3,8002 -LUI A1,8003 -ADDIU A1,A1,872C ;A1=8002872C: "Uix2pix -xs%d grab.%d.temp.Uix" -LW A3,32D0 (S3) ;A3=800232D0: cur.rgb32bit -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,V0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004C94: send command line: fromalias - probably a copy/rename routine -LUI S3,8002 -LW A3,32D0 (S3) ;A3=800232D0: cur.rgb32bit -LUI A1,8003 -ADDIU A1,A1,874C ;A1=8002874C: "fromalias grab.%d.temp.pix grab.%d.rgb" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004CB8: remove intermediate images -LUI S3,8002 -LW A3,32D0 (S3) ;A3=800232D0: cur.rgb32bit -LUI A1,8003 -ADDIU A1,A1,8774 ;A1=80028774: "rm grab.%d.temp.Uix grab.%d.temp.pix" -OR A0,S0,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A2,A3,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004CDC: open image in imgview -LUI S3,8002 -LUI A1,8003 -LW A2,32D0 (S3) ;A2=800232D0: cur.rgb32bit -ADDIU A1,A1,879C ;A1=8002879C: "imgview grab.%d.rgb" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3,...) -OR A0,S0,R0 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -OR A0,S0,R0 -//70004CFC: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0130 diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004E60 - deb_c_debug.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004E60 - deb_c_debug.txt deleted file mode 100644 index 711a664..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/70004E60 - deb_c_debug.txt +++ /dev/null @@ -1,51 +0,0 @@ -70004E2C 5A2C deb_c_debug -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8002 -LUI A1,8003 -ADDIU A1,A1,87B0 ;A1=800287B0: "deb_c_debug" -JAL 70004E60 -ADDIU A0,A0,32E0 ;A0=800232E0: -JAL 70004EE0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004E60 5A60 - accepts: A0=p->???, A1=p->string -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -JAL 70004D20 -OR A0,A1,R0 ;A0=A1: p->string -//70004E78: -BNEZ V0,70004E88 -LW A0,001C (SP) ;A0=p->string -JAL 70004DE0 -LW A1,0018 (SP) -//70004E88: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70004E98 5A98 parses table at @800232E8 - always returns zero or loops indefinately -LUI V0,8002 -LW V0,32E8 (V0) ;V0=800232E8: -BEQ V0,R0,70004EB4 ;branch if no entries -NOP -//70004EA8: parse table -LW V0,0000 (V0) ;V0=p->next entry: -BNEZL V0,70004EAC ;loop until it isn't zero -LW V0,0000 (V0) -//70004EB4: return -JR RA -NOP - -70004EBC 5ABC unconditional return -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7000A29C - debug memory table sort and merge function.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7000A29C - debug memory table sort and merge function.txt deleted file mode 100644 index cbf9044..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7000A29C - debug memory table sort and merge function.txt +++ /dev/null @@ -1,28 +0,0 @@ -7000A29C AE9C debug memory table sort and merge function: generate list of allocated memory, sort and merge table, then generate a new list -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 7000A100 ;generate ordered list of allocated memory blocks -SW S0,0018 (SP) -//7000A2B4: sort allocation table A0 -LUI S1,8006 -ADDIU S1,S1,3C28 ;S1=80063C28: table of memory allocations -OR S0,R0,R0 ;S0=0 count=0 -ADDIU S2,R0,01FC ;S2=1FC -//7000A2C4: loop for each possible entry -JAL 70009A50 ;sort and merge entries in allocation table A0 -OR A0,S1,R0 ;A0=S1: p->allocation table -ADDIU S0,S0,0001 ;S0++ count++ -BNE S0,S2,7000A2C4 ;loop 0x1FC times -NOP -//7000A2D8: -JAL 7000A100 ;generate ordered list of allocated memory blocks -NOP -//7000A2E0: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7000AF00 - reset stderr display.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7000AF00 - reset stderr display.txt deleted file mode 100644 index fdf119f..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7000AF00 - reset stderr display.txt +++ /dev/null @@ -1,37 +0,0 @@ -7000AF00 BB00 reset stderr -ADDIU SP,SP,FFD8 -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW RA,0024 (SP) -SW S0,0014 (SP) -ADDIU S1,R0,0050 ;S1=0x50 -OR S2,R0,R0 ;S2=0 #lines -ADDIU S3,R0,0023 ;S3=0x23 -OR S0,R0,R0 ;S0=0 #entries per line -//7000AF28: clear stderr -OR A0,S0,R0 ;A0=S0: x pos -OR A1,S2,R0 ;A1=S2: y pos -JAL 7000ADD0 ;place character A2 in screen pos (A0,A1) -OR A2,R0,R0 ;A2=0: NULL -ADDIU S0,S0,0001 -BNEL S0,S1,7000AF2C ;write 80 NULLs per line -OR A0,S0,R0 -ADDIU S2,S2,0001 -BNEL S2,S3,7000AF28 ;write NULLs in 35 lines -OR S0,R0,R0 -//7000AF50: print the displays -JAL 7000AEDC ;copy debug menu position offsets to text positions -NOP -JAL 7000ADA0 ;unconditional return -NOP -//7000AF60: return -LW RA,0024 (SP) -LUI AT,8002 -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -SW R0,6810 (AT) ;0->80026810: -JR RA -ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7001ABB4 - debug messages.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7001ABB4 - debug messages.txt deleted file mode 100644 index bc764eb..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7001ABB4 - debug messages.txt +++ /dev/null @@ -1,181 +0,0 @@ -7001ABB4 1B7B4 display error message? - accepts: S0=p->error, S2=error flag, S4=, S5=, S6= -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -BNE S2,R0,7001ABCC ;branch if error detected -LW S1,0000 (S0) ;S1=S0+0: p->??? -BEQ R0,R0,7001AE44 -OR V0,S4,R0 ;V0=S4: -//7001ABCC: handle assertion faults on a bad pointer -BNE S1,R0,7001ABF0 ;if S1 a valid pointer, branch -LUI A0,8003 -LUI A1,8003 -LUI A2,8003 -ADDIU A2,A2,995C ;A2=8002995C: "env.c" -ADDIU A1,A1,9954 ;A1=80029954: "source" -ADDIU A0,A0,9928 ;A0=80029928: "\n--- ASSERTION FAULT - %s - %s, line %d\n\n" -JAL 7000CF44 ;sprintf(??,A0,A1,A2,A3) -ADDIU A3,R0,0175 ;A3=0x175 -//7001ABF0: -SW S4,0010 (SP) ;SP+10=S4: -LW T9,0004 (S1) ;T9=S1+4: p->error handler -OR A0,S1,R0 ;A0=S1: -OR A1,S5,R0 ;A1=S5: -OR A2,S2,R0 ;A2=S2: error flag -JALR RA,T9 -OR A3,S6,R0 ;A3=S6: -//7001AC0C: -LH T6,0000 (S5) -LUI AT,0800 -SLL S4,S2,0x1 -ANDI T7,T6,FFFF -OR T8,T7,AT ;T8= 08000000 | (T6 & 0xFFFF) -SW T8,0000 (V0) -LH T9,0000 (S3) -LUI AT,0808 -ADDIU S1,V0,0010 -ADDIU T7,T9,0440 -SLL T8,T7,0x10 -ANDI T9,S4,FFFF -OR T6,T8,T9 ;T6=08080000 | (S4 & 0xFFFF) -SW T6,0004 (V0) -LH T7,0000 (S3) -OR S2,S1,R0 -ADDIU T8,T7,0580 -ANDI T9,T8,FFFF -OR T6,T9,AT ;T6= 08080000 | (T8 & 0xFFFF) -SW T6,0008 (V0) -LH V1,0000 (S3) -ADDIU T7,V1,0800 -ANDI T8,T7,FFFF -ADDIU T6,V1,06C0 -SLL T7,T6,0x10 -OR T9,T8,T7 -SW T9,000C (V0) -LW T6,0038 (S0) -LUI T9,8003 -BEQL T6,R0,7001AE20 -LUI T6,0308 -//7001AC88: -LH T8,0018 (S0) ;T8=S0+18: entry# -SW R0,0038 (S0) -LH T6,001A (S0) ;T6=S0+1A: factor -SLL T7,T8,0x1 ;T7=T8*2 -ADDU T9,T9,T7 -LH T9,81E0 (T9) ;T9=800281E0+offset: -LW A0,0034 (S0) -ADDIU A1,S0,0024 -MULTU T9,T6 -LH T9,001C (S0) -MTC1 T9,F4 -NOP -CVT.S.W F14,F4 -MFLO T8 ;T8=value from table * factor -SRA T7,T8,0xF ;T7=value/0x8000 -SH T7,0028 (S0) -LH T6,0028 (S0) -MTC1 T6,F6 -JAL 7001AAF4 -CVT.S.W F12,F6 -//7001ACD8: -LH T8,0018 (S0) -LUI T6,8003 -SH V0,0026 (S0) -SLL T7,T8,0x1 -SUBU T9,R0,T7 -ADDU T6,T6,T9 -LH T6,82DE (T6) ;T6=800282DE+offset: -LH T8,001A (S0) -LW A0,0034 (S0) -ADDIU A1,S0,002A -MULTU T6,T8 -LH T6,001E (S0) -MTC1 T6,F8 -NOP -CVT.S.W F14,F8 -MFLO T7 -SRA T9,T7,0xF -SH T9,002E (S0) -LH T8,002E (S0) -MTC1 T8,F10 -JAL 7001AAF4 -CVT.S.W F12,F10 -//7001AD30: -LH T7,001C (S0) -SH V0,002C (S0) -OR V1,S1,R0 -LUI AT,0906 -ANDI T9,T7,FFFF -OR T6,T9,AT ;T6=09060000 | (T7 & 0xFFFF) -SW T6,0000 (V1) -SW R0,0004 (V1) -//7001AD50: -LH T8,001E (S0) -ADDIU S1,S1,0008 -OR A0,S1,R0 -LUI AT,0904 -ANDI T7,T8,FFFF -OR T9,T7,AT ;T9=09040000 | (T8 & 0xFFFF) -SW T9,0000 (A0) -SW R0,0004 (A0) -//7001AD70: -LH T6,0028 (S0) -ADDIU S1,S1,0008 -LUI AT,0902 -ANDI T8,T6,FFFF -OR T7,T8,AT ;T7=09020000 | (T6 & 0xFFFF) -OR A1,S1,R0 -SW T7,0000 (A1) -LH T6,0026 (S0) -LHU T9,0024 (S0) -ADDIU S1,S1,0008 -SLL T8,T6,0x10 -OR T6,T8,T9 -SW T6,0004 (A1) -LH T7,002E (S0) -LUI AT,0900 -OR A2,S1,R0 -ANDI T8,T7,FFFF -OR T9,T8,AT ;T9=09000000 | (T7 & 0xFFFF) -SW T9,0000 (A2) -LH T7,002C (S0) -LHU T6,002A (S0) -ADDIU S1,S1,0008 -SLL T8,T7,0x10 -OR T7,T8,T6 -SW T7,0004 (A2) -LH T9,0020 (S0) -LUI AT,0908 -OR V0,S1,R0 -ANDI T8,T9,FFFF -OR T6,T8,AT ;T6=09080000 | (T9 & 0xFFFF) -SW T6,0000 (V0) -LH T7,0022 (S0) -ADDIU S1,S1,0008 -OR S2,S1,R0 -ANDI T9,T7,FFFF -SW T9,0004 (V0) -LUI T8,0309 -SW T8,0000 (S2) ;S2+0= 03090000 -LW A0,0014 (S0) -JAL 7000E8B0 ;V0= offset corresponding to address A0 -ADDIU S1,S1,0008 -BEQ R0,R0,7001AE34 -SW V0,0004 (S2) -//7001AE1C: -LUI T6,0308 -SW T6,0000 (S2) ;S2+0= 03080000 -LW A0,0014 (S0) -JAL 7000E8B0 ;V0= offset corresponding to address A0 -ADDIU S1,S1,0008 -//7001AE30: -SW V0,0004 (S2) -LH T7,0000 (S5) -OR V0,S1,R0 -ADDU T9,T7,S4 -SH T9,0000 (S5) -//7001AE44: return -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F001258 - 7F00140C - load object debug features.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F001258 - 7F00140C - load object debug features.txt deleted file mode 100644 index 33ec3b8..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F001258 - 7F00140C - load object debug features.txt +++ /dev/null @@ -1,169 +0,0 @@ -7F001258 35D88 load all objects mentioned in current action table -ADDIU SP,SP,FFC8 -LUI T6,8007 -LW T6,5D14 (T6) ;T6=80075D14: p->action block table -SW RA,0034 (SP) -SW S7,0030 (SP) -SW S6,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -//7F001288: get p->actions and search types -LW S0,0000 (T6) ;S0=T6+0: p->action block data -ADDIU S5,R0,00BF ;S5=0xBF: spawn item -ADDIU S6,R0,00C0 ;S6=0xC0: spawn hat -BEQ S0,R0,7F0013E0 ;return if NULL pointer -OR S7,R0,R0 ;S7=0 -ADDIU S4,R0,00BE ;S4=0xBE: respawn actor -ADDIU S3,R0,00BD ;S3=0xBD: spawn actor -ADDIU S2,R0,001B ;S2=0x1B: drop item -ADDIU S1,R0,0004 ;S1=0x04: terminate -//7F0012AC: test if 04: terminate -LBU V1,0000 (S0) ;V1=action command type -LUI T7,8007 -BNE S1,V1,7F0012C8 ;branch if not type 04: -NOP -LW T7,5D14 (T7) ;T7=80075D14: p->action table -BEQ R0,R0,7F0013CC ;handle next table entry -ADDU V0,T7,S7 ;V0=table+offset -//7F0012C8: test for each command -BEQL V1,S2,7F0012FC ;branch if 1B: drop item -LBU T8,0001 (S0) -BEQ V1,S3,7F001320 ;branch if BD: spawn actor -NOP -BEQ V1,S4,7F00134C ;branch if BE: respawn actor -NOP -BEQL V1,S5,7F00137C ;branch if BF: spawn item -LBU T2,0001 (S0) -BEQL V1,S6,7F0013A8 ;branch if C0: spawn hat -LBU T5,0001 (S0) -BEQ R0,R0,7F0013BC ;everything else is skipped -OR A0,S0,R0 -//7F0012F8: 1B: drop item -LBU T8,0001 (S0) ;T8=model.u -LBU T0,0002 (S0) ;T0=model.l -SLL T9,T8,0x8 -OR V0,T9,T0 ;V0=model -JAL 7F056C38 ;load model A0 -ANDI A0,V0,FFFF ;A0=model&0xFFFF -BEQL V0,R0,7F0013BC ;ironically, branches nicely even on load failure -OR A0,S0,R0 -BEQ R0,R0,7F0013BC -OR A0,S0,R0 -//7F001320: BD: spawn actor -JAL 7F023290 ;load body/head entry A0 if not already loaded -LBU A0,0001 (S0) ;A0=body -LB A0,0002 (S0) ;A0=head -BLTZL A0,7F0013BC ;skip if random head -OR A0,S0,R0 -JAL 7F023290 ;load body/head entry A0 if not already loaded -NOP -BEQL V0,R0,7F0013BC ;ironically, branches nicely even on load failure -OR A0,S0,R0 -BEQ R0,R0,7F0013BC -OR A0,S0,R0 -//7F00134C: BE: respawn actor -JAL 7F023290 ;load body/head entry A0 if not already loaded -LBU A0,0001 (S0) ;A0=body -LB A0,0002 (S0) ;A0=head -BLTZL A0,7F0013BC ;skip if random head -OR A0,S0,R0 -JAL 7F023290 ;load body/head entry A0 if not already loaded -NOP -BEQL V0,R0,7F0013BC ;ironically, branches nicely even on load failure -OR A0,S0,R0 -BEQ R0,R0,7F0013BC -OR A0,S0,R0 -//7F001378: BF: spawn item -LBU T2,0001 (S0) ;T2=model.u -LBU T4,0002 (S0) ;T4=model.l -SLL T3,T2,0x8 -JAL 7F056C38 ;load model A0 -OR A0,T3,T4 ;A0=model -JAL 7F005710 ;load 3rd person model for item A0 -LBU A0,0003 (S0) ;A0=inventory item# -BEQL V0,R0,7F0013BC ;ironically, branches nicely even on load failure -OR A0,S0,R0 -BEQ R0,R0,7F0013BC -OR A0,S0,R0 -//7F0013A4: C0: spawn hat -LBU T5,0001 (S0) ;T5=model.u -LBU T7,0002 (S0) ;T7=model.l -SLL T6,T5,0x8 -JAL 7F056C38 ;load model A0 -OR A0,T6,T7 ;A0=model -//7F0013B8: get next command from block -OR A0,S0,R0 ;A0=S0: p->cur.action -JAL 7F0349FC ;V0=size of action command in block A0 at offset A1 -OR A1,R0,R0 ;A1=0 -BEQ R0,R0,7F0012AC -ADDU S0,S0,V0 ;S0+=V0: p->action+=size: p->next action -//7F0013CC: next action block -LW S0,0008 (V0) ;S0=V0+8: p->next action block -ADDIU S7,S7,0008 ;S7+=8 table offset -ADDIU V0,V0,0008 ;V0+=8 next action entry -BNEL S0,R0,7F0012B0 ;loop until NULL entry -LBU V1,0000 (S0) -//7F0013E0: return -LW RA,0034 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -LW S6,002C (SP) -LW S7,0030 (SP) -JR RA -ADDIU SP,SP,0038 - -+_+ - -7F00140C 35F3C weapon load debug feature -ADDIU SP,SP,FFB0 -LUI T7,8003 -SW RA,001C (SP) -SW S0,0018 (SP) -ADDIU T7,T7,A23C ;T7=8002A23C: list of debug weapon models -LW AT,0000 (T7) -LW T0,0004 (T7) -ADDIU T6,SP,0030 ;T6=SP+30: p->copy of table on stack -SW AT,0000 (T6) -SW T0,0004 (T6) -LW T0,000C (T7) -LW AT,0008 (T7) -ADDIU S0,SP,0030 ;S0=SP+30: p->copy of table -SW T0,000C (T6) -SW AT,0008 (T6) -LW AT,0010 (T7) -LW T0,0014 (T7) -SW AT,0010 (T6) -SW T0,0014 (T6) -LW T0,001C (T7) -LW AT,0018 (T7) -SW T0,001C (T6) ;copy 0x20 from 8002A23C to stack -SW AT,0018 (T6) -//7F001468: load each entry in table -LW T1,0030 (SP) ;T1=SP+30: 1st entry -BLTZL T1,7F001494 ;branch if end of list -LW RA,001C (SP) -LW A0,0000 (S0) ;A0=entry+0: model# -//7F001478: loop to load each model -JAL 7F056C38 ;load model A0 -NOP -LW A0,0004 (S0) ;A0=next entry: model# -ADDIU S0,S0,0004 ;S0+=4: next entry -BGEZ A0,7F001478 ;loop while more items left to load -NOP -//7F001490: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0050 -JR RA -NOP - -Uses a pre-arranged list of item types at 8002A23C. -Table ends with an entry -1. Each entry is one word. diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0904C4 - move view.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0904C4 - move view.txt deleted file mode 100644 index 1c6bcb1..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0904C4 - move view.txt +++ /dev/null @@ -1,39 +0,0 @@ -7F0904C4 C4FF4 toggle "move view" debug feature -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0916F4 ;initialize floating camera position (80037014) to cur.player's location -NOP -JAL 7F0901B0 ;V0=value @ 80036B70 -NOP -LW RA,0014 (SP) -LUI V1,8003 -LUI A0,8003 -ADDIU A0,A0,6F68 -ADDIU V1,V1,6F70 -SW V0,0000 (V1) ;V0->80036F70: -SW V0,0000 (A0) ;V0->80036F68: -LUI AT,8003 -SW V0,6F64 (AT) ;V0->80036F64: -JR RA -ADDIU SP,SP,0018 - -+_+ - -7F0916F4 initialize floating camera position (80037014) to cur.player's location -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F089FD4 ;V0= p->cur.player's position -NOP -LWC1 F4,0000 (V0) ;F4=cur.player's x.pos -LUI V1,8003 -ADDIU V1,V1,7014 ;V1=80037014: p->floating camera position -SWC1 F4,0000 (V1) ;F4->80037014: copy pos.x to camera.x -LWC1 F6,0004 (V0) ;F6=cur.player's pos.y -LW RA,0014 (SP) -LUI AT,8008 -SWC1 F6,0004 (V1) ;F6->80037018: copy pos.y to camera.y -LWC1 F8,0008 (V0) ;F8=cur.player's pos.z -ADDIU SP,SP,0018 -SWC1 F8,0008 (V1) ;F8->8003701C: copy pos.z to camera.z -JR RA -SW R0,9E20 (AT) diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F090508 - stan view.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F090508 - stan view.txt deleted file mode 100644 index 6e3560a..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F090508 - stan view.txt +++ /dev/null @@ -1,56 +0,0 @@ -7F090508 C5038 debug "stan view" option: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F07A4A0 -NOP -JAL 7F0901B0 ;V0= debug menu: control mode [80036B70] -NOP -LW RA,0014 (SP) -LUI V1,8003 -LUI A0,8003 -ADDIU A0,A0,6F68 -ADDIU V1,V1,6F70 -SW V0,0000 (V1) ;control mode -> 80036F70: set control mode -SW V0,0000 (A0) ;control mode -> 80036F68: -LUI AT,8003 -SW V0,6F64 (AT) ;control mode -> 80036F64: -JR RA -ADDIU SP,SP,0018 - -7F07A4A0 AEFD0 -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T6,0000 (V1) ;T6=p->BONDdata.cur -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW T7,00A8 (T6) ;T7=BONDdata+A8: p->BONDdata.posdata -LW T8,0004 (T7) ;T8=BONDdata.posdata+4: p->BONDdata.guarddata -BEQL T8,R0,7F07A51C ;return if NULL -LW RA,0014 (SP) -//7F07A4C4: -JAL 7F09A464 ;V0= # players -NOP -LUI V1,8008 -ADDIU AT,R0,0001 -BNE V0,AT,7F07A518 ;return if not solo -ADDIU V1,V1,A0B0 -LW T9,0000 (V1) ;T9=p->BONDdata.cur -JAL 7F020414 -LW A0,00A8 (T9) ;A0=BONDdata+A8: p->BONDdata.posdata -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T0,0000 (V1) ;T0=p->BONDdata.cur -ADDIU T3,R0,0001 -LUI AT,8003 -LW T1,00A8 (T0) ;T1=BONDdata+A8: p->BONDdata.posdata -SW R0,0004 (T1) ;NULL -> p->BONDdata.guarddata -LW T2,0000 (V1) ;T2=p->BONDdata.cur -SW R0,00D4 (T2) ;NULL -> BONDdata.objinst -SW T3,6424 (AT) ;1->80036424: disable 1st person weapons -JAL 7F07DE9C -LW A0,0000 (V1) ;A0=p->BONDdata.cur -//7F07A518: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0B2C2C - print man pos.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0B2C2C - print man pos.txt deleted file mode 100644 index 8a8e884..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0B2C2C - print man pos.txt +++ /dev/null @@ -1,46 +0,0 @@ -Output nerfed. -Likely a tile debugger. Used player's position versus the tile to determine if you were on it, printing result in colour of the tile. - -Detects selection at 7F086950: -//7F086950: -JAL 7F090F7C ;V0= print man pos debugger flag -NOP -BEQL V0,R0,7F08697C -LW RA,002C (SP) -//7F086960: print man pos -LW T0,0000 (S1) ;T0=p->BONDdata -ADDIU A3,SP,005C ;A3=SP+5C: p->buffer -LW A0,0488 (T0) ;A0=BONDdata+488: p->tile -LW A1,048C (T0) ;A1=BONDdata+48C: x position -JAL 7F0B2C2C ;copies tile A0's rgb to A3 -LW A2,0494 (T0) ;A2=BONDdata+494: z position -//7F086978: return -LW RA,002C (SP) -LDC1 F20,0018 (SP) -LW S0,0024 (SP) -LW S1,0028 (SP) -JR RA -ADDIU SP,SP,03B8 - -+_+ - -7F0B2C2C E775C copy tile RGB as 24bit RGB to A3 - accepts: A0=p->tile, A1=xpos, A2=zpos, A3=p->target -SW A1,0004 (SP) ;SP+4= A1: xpos -SW A2,0008 (SP) ;SP+8= A2: zpos -LH V1,0004 (A0) ;V1=tile+4: lighting and type -SRA V0,V1,0x8 -ANDI T7,V0,000F ;T7=red -SRA A1,V1,0x4 -ANDI T9,A1,000F ;T9=green -SLL T4,T7,0x4 ;T4= R. -OR T5,T4,T7 ;T5=red.red -SLL T6,T9,0x4 ;T6= G. -ANDI T3,V1,000F ;T3=blue -OR T7,T6,T9 ;T7=green.green -SLL T8,T3,0x4 ;T8= B. -OR T9,T8,T3 ;T9=blue.blue -SB T5,0000 (A3) ;target+0= red -SB T7,0001 (A3) ;target+1=green -JR RA -SB T9,0002 (A3) ;target+2=blue diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0B5ED8 - print room loads.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0B5ED8 - print room loads.txt deleted file mode 100644 index b4e8f7a..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0B5ED8 - print room loads.txt +++ /dev/null @@ -1,55 +0,0 @@ -7F0B5ED8 EAA08 generate room load string when applicable - note this string is not displayed and becomes invalid on return -ADDIU SP,SP,FF40 -SW RA,0014 (SP) -JAL 7F090FD0 ;print room loads flag -NOP -BEQ V0,R0,7F0B5F7C ;return if flag not set -//7F0B5EEC: -LUI A3,8004 -LW A3,42F4 (A3) ;A3=800442F4: max rooms, also end of room data index -LUI V1,8004 -ADDIU V1,V1,1464 ;V1=80041464: room data index, starting at room 1 -SLTI AT,A3,0002 -BNE AT,R0,7F0B5F74 ;branch if 1 or fewer rooms -ADDIU A0,R0,0001 ;A0=1 room count -ADDIU V0,SP,0029 ;V0=SP+29: p->buffer -ADDIU A2,R0,002E ;A2="." -ADDIU A1,R0,000A ;A1=0xA, used for converting to decimal numerals -//7F0B5F14: -LBU T6,0002 (V1) ;T6=room+2: loaded flag -ADDIU V1,V1,0050 ;V1+=50 next entry -BEQL T6,R0,7F0B5F64 ;branch if not loaded -SB A2,0000 (V0) -DIV A0,A1 -MFHI T7 ;T7=count%10 -ADDIU T8,T7,0030 ;T8=value->ASCII -BNE A1,R0,7F0B5F3C ;catch division by zero -NOP -BREAK 00001C00 -//7F0B5F3C: catch funky division -ADDIU AT,R0,FFFF -BNE A1,AT,7F0B5F54 ;catch negative division -LUI AT,8000 -BNE A0,AT,7F0B5F54 ;catch negative division or pointers -NOP -BREAK 00001800 -//7F0B5F54: print room # -SB T8,0000 (V0) ;save room number -BEQ R0,R0,7F0B5F68 -ADDIU A0,A0,0001 ;A0++ count++ -//7F0B5F60: room not listed -SB A2,0000 (V0) ;"."->list -ADDIU A0,A0,0001 ;A0++ count++ -//7F0B5F68: -SLT AT,A0,A3 ;TRUE if count < max -BNE AT,R0,7F0B5F14 ;loop for each room -ADDIU V0,V0,0001 ;V0++ next byte in string -//7F0B5F74: NULL terminate string -ADDU T9,SP,A0 ;T9=SP+A0 -SB R0,0028 (T9) ;0->NULL to last character -//7F0B5F7C: return -LW RA,0014 (SP) -ADDIU SP,SP,00C0 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0BD810 - compute percentage of used geometry memory.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0BD810 - compute percentage of used geometry memory.txt deleted file mode 100644 index 525d308..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/7F0BD810 - compute percentage of used geometry memory.txt +++ /dev/null @@ -1,80 +0,0 @@ -7F0BD810 F2340 F12=percentage of used geometry memory - accepts: A0=p->display list -LUI V0,8009 -LBU V0,C250 (V0) ;V0=8008C250: [1] -LUI T0,8009 -ADDIU T0,T0,C230 ;T0=8008C230 -SLL T6,V0,0x2 ;T6=V0->offset -ADDU T7,T0,T6 ;T7=8008C230+offset -SLL T1,V0,0x2 ;T1=V0->offset -LW V1,0004 (T7) ;V1=8008C234+offset: p->end of cur, DL buffer -ADDU T2,T0,T1 -LW T3,0000 (T2) ;T3=8008C230+offset: p->start of cur. DL buffer -OR A3,A0,R0 ;A3=A0: p->DL -SUBU T8,V1,A3 -SUBU T4,V1,T3 -SRA T5,T4,0x3 ;T5=(start-cur.DL pos)/8: #commands used -SRA T9,T8,0x3 ;T9=(end-start)/8: #commands total -MTC1 T9,F4 -MTC1 T5,F6 -ADDIU SP,SP,FFE8 -CVT.S.W F4,F4 ;F4=(float) #commands to end of DL bank -SW RA,0014 (SP) -LUI A0,8005 -ADDIU A0,A0,8320 ;A0=80048320: "=========================" -CVT.S.W F6,F6 ;F6=(float) #commands used in DL bank -MFC1 A1,F4 ;A1=(float) #commands total in DL bank -MFC1 A2,F6 ;A2=(float) #commands used in DL bank -JAL 7F0BD7CC ;V0=strlen(A0), F12=A1/A2 -NOP -//7F0BD87C: compute remaining geometry memory -LUI V0,8009 -LBU V0,C250 (V0) ;V0=8008C250 -LUI A3,8009 -ADDIU A3,A3,C240 ;A3=8008C240 -SLL T6,V0,0x2 -ADDU T7,A3,T6 -SLL T1,V0,0x2 -LW V1,0004 (T7) ;V1=8008C244+offset: p->end of geo.memory -ADDU T2,A3,T1 -LUI T8,8009 -LW T8,C24C (T8) ;T8=8008C24C: p->cur.geometry memory -LW T3,0000 (T2) ;T3=8008C240+offset: p->start of geo.memory -LUI A0,8005 -SUBU T9,V1,T8 ;T9=end-cur. -SUBU T4,V1,T3 ;T4=end-start -MTC1 T4,F10 -MTC1 T9,F8 -ADDIU A0,A0,8320 ;A0=80048320: "=========================" -CVT.S.W F10,F10 ;F10=(float) size of geometry memory -CVT.S.W F8,F8 ;F8= (float) size of remaining geo.mem -MFC1 A2,F10 ;A2=(float) size of geometry memory -MFC1 A1,F8 ;A1=(float) size of remaining geo.mem -JAL 7F0BD7CC ;V0=strlen(A0), F12=ratio remaining memory -NOP -//7F0BD8DC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BD7CC F22FC V0=strlen of A0, F12=ratio of remaining/total - accepts: A0=p->string, A1=(float)size remaining, A2=(float)total size -MTC1 A1,F12 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A2,0020 (SP) ;SP+20=A2: #previous ops -JAL 7001387C ;V0=strlen(A0) -SWC1 F12,001C (SP) ;SP+1C=A1: #remaining ops -LWC1 F12,001C (SP) ;F12=A1: #remaining ops -LWC1 F4,0020 (SP) ;F4=A2: #previous ops -MTC1 R0,F0 -LW RA,0014 (SP) -DIV.S F12,F12,F4 ;F12=remaining/previous: ratio of left::used -C.LT.S F12,F0 ;TRUE if negative output -NOP -BC1F 7F0BD808 ;silly useless command... -NOP -//7F0BD808: return -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/note - ramrom features in ramrom demos folder.txt b/notes/GE Documentation/Gameplay and Misc/Debug, stdout, and stderr/note - ramrom features in ramrom demos folder.txt deleted file mode 100644 index e69de29..0000000 diff --git a/notes/GE Documentation/Gameplay and Misc/Goldeneye eeprom saves.txt b/notes/GE Documentation/Gameplay and Misc/Goldeneye eeprom saves.txt deleted file mode 100644 index 7925815..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Goldeneye eeprom saves.txt +++ /dev/null @@ -1,129 +0,0 @@ -in ram- -80069920 -80069980 -800699E0 -80069A40 -80069AA0 -80069B00 - -0x0 4 checksum value 1 -0x4 4 checksum value 2 -0x8 1 completion bitflags: - 80 ??? - 60 selected Bond - 18 ??? - 07 folder# (0-3; 4 is special case) -0x9 1 bitflags: - 01 007 mode flag (all solo stages available) -0xA 1 music volume (00-FF off<->full) -0xB 1 sound effect volume (00-FF off<->full) -0xC 1 controller config (0-7 Honey<->Goodhead) - 0x00 1.1 Honey - 0x01 1.2 Solitaire - 0x02 1.3 Kissy - 0x03 1.4 Goodnight - 0x04 2.1 Plenty - 0x05 2.2 Galore - 0x06 2.3 Domino - 0x07 2.4 Goodhead - 0x08 Screen Mode: cinema -0xD 1 options - 0x80 Screen Ratio: 0-normal; 1-16:9 - 0x40 Screen Mode: 0-full; 1-wide - 0x20 Ammo On-Screen: 0-off; 1-on - 0x10 Look Ahead: 0-off; 1-on - 0x08 Sight On-Screen 0-off; 1-on - 0x04 Aim Control: 0-hold; 1-toggle - 0x02 Auto Aim: 0-off; 1-on - 0x01 Look Up/Down: 0-reverse; 1-upright -0xE 1 unlocked cheats - 0x01 0 Paintball Mode - 0x02 1 Invincible - 0x04 2 DK Mode - 0x08 3 2x Grenade L. - 0x10 4 2x Rocket L. - 0x20 5 Turbo Mode - 0x40 6 No Radar (Multi) - 0x80 7 Tiny Bond -0xF 1 unlocked cheats - 0x01 8 2x Throwing Knife - 0x02 9 Fast Animation - 0x04 A Bond Invisible - 0x08 B Enemy Rockets - 0x10 C Slow Animation - 0x20 D Silver PP7 - 0x40 E 2x Hunting Knife - 0x80 F Infinite Ammo -0x10 1 unlocked cheats - 0x01 10 2x RC-P90 - 0x02 11 Gold PP7 - 0x04 12 2x Laser - 0x08 13 All Guns - 0x10 14 [invalid] - 0x20 15 [invalid] - 0x40 16 [invalid] - 0x80 17 [invalid] - -Each stage uses 10bits to define the best completion time. First Agent, then Secret Agent, then 00 Agent. 007 is not stored. 0 designates incomplete. Valid times range from 1-3FF (1 second to 17:03) - -0x12 10bits Agent: Dam - 10bits Agent: Facility - 10bits Agent: Runway - 10bits Agent: Surface I -0x17 10bits Agent: Bunker I - 10bits Agent: Silo - 10bits Agent: Frigate - 10bits Agent: Surface II -0x1C 10bits Agent: Bunker II - 10bits Agent: Statue - 10bits Agent: Archives - 10bits Agent: Streets -0x21 10bits Agent: Depot - 10bits Agent: Train - 10bits Agent: Jungle - 10bits Agent: Control -0x26 10bits Agent: Caverns - 10bits Agent: Cradle - 10bits Agent: Aztec - 10bits Agent: Egyptian -0x2B 10bits Secret Agent: Dam - 10bits Secret Agent: Facility - 10bits Secret Agent: Runway - 10bits Secret Agent: Surface I -0x30 10bits Secret Agent: Bunker I - 10bits Secret Agent: Silo - 10bits Secret Agent: Frigate - 10bits Secret Agent: Surface II -0x35 10bits Secret Agent: Bunker II - 10bits Secret Agent: Statue - 10bits Secret Agent: Archives - 10bits Secret Agent: Streets -0x3A 10bits Secret Agent: Depot - 10bits Secret Agent: Train - 10bits Secret Agent: Jungle - 10bits Secret Agent: Control -0x3F 10bits Secret Agent: Caverns - 10bits Secret Agent: Cradle - 10bits Secret Agent: Aztec - 10bits Secret Agent: Egytpian -0x44 10bits 00 Agent: Dam - 10bits 00 Agent: Facility - 10bits 00 Agent: Runway - 10bits 00 Agent: Surface I -0x49 10bits 00 Agent: Bunker I - 10bits 00 Agent: Silo - 10bits 00 Agent: Frigate - 10bits 00 Agent: Surface II -0x4E 10bits 00 Agent: Bunker II - 10bits 00 Agent: Statue - 10bits 00 Agent: Archives - 10bits 00 Agent: Streets -0x53 10bits 00 Agent: Depot - 10bits 00 Agent: Train - 10bits 00 Agent: Jungle - 10bits 00 Agent: Control -0x58 10bits 00 Agent: Caverns - 10bits 00 Agent: Cradle - 10bits 00 Agent: Aztec - 10bits 00 Agent: Egyptian -0x5D 3 unused bytes diff --git a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/70009A50 - sort and merge entries in allocation table A0.txt b/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/70009A50 - sort and merge entries in allocation table A0.txt deleted file mode 100644 index b39f624..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/70009A50 - sort and merge entries in allocation table A0.txt +++ /dev/null @@ -1,85 +0,0 @@ -70009A50 A650 V0=TRUE if allocation table A0 altered during test - accepts: A0=p->memory allocation table - fries: AT,A0,A1,V1,T6,T7,T8 -ADDIU SP,SP,FFD0 -SW S4,0028 (SP) -SW S0,0018 (SP) -ADDIU S0,A0,0010 ;S0=A0+10: p->next (target) -ADDIU S4,A0,0FE8 ;S4=A0+FE8: end -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SLTU AT,S4,S0 ;TRUE if end < start -SW RA,002C (SP) -OR S3,R0,R0 ;S3=0 return FALSE -ADDIU S1,A0,0008 ;S1=A0+8: p->cur (source) -BNE AT,R0,70009AF4 ;return if something strange happened -OR S2,R0,R0 ;S2=0 NULL previous block address -//70009A88: -LW T6,0004 (S0) ;T6=target+4: next size -BEQL T6,R0,70009AE8 ;loop if zero -ADDIU S0,S0,0008 -//70009A94: swap entries if p->block < p->previous -LW V0,0000 (S0) ;V0=target+0: p->start -OR A0,S0,R0 ;A0=S0: p->target -SLTU AT,V0,S2 ;TRUE if cur < previous -BEQL AT,R0,70009AB8 ;skip if no swapping necessary -LW T7,0004 (S1) -JAL 70009A10 ;swap entries A0 and A1 -OR A1,S1,R0 ;A1=S1: p->source -LW V0,0000 (S0) ;V0=target+0: p->block -//70009AB4: if part of same segment, merge allocation entries -LW T7,0004 (S1) ;T7=source+4: p->size -OR A0,S1,R0 ;A0=p->source -OR A1,S0,R0 ;A1=p->target -ADDU T8,T7,S2 ;T8=size + p->previous -BNEL V0,T8,70009AE0 ;branch if p->cur isn't same as calculated next entry -OR S1,S0,R0 -JAL 70009A34 ;merge allocation entries -ADDIU S3,R0,0001 ;S3=return TRUE -OR S0,S1,R0 ;S0=S1: p->target=p->source -LW V0,0000 (S1) ;V0=source+0: -//70009ADC: onward to the next entries -OR S1,S0,R0 ;S1=S0: p->source=p->target -OR S2,V0,R0 ;S2=V0: prev.value = cur.value -//70009AE4: loop for all 0x200 entries -ADDIU S0,S0,0008 ;S0+=8: p->target+=8 -SLTU AT,S4,S0 ;TRUE if final < cur -BEQL AT,R0,70009A8C ;loop for each entry -LW T6,0004 (S0) -//70009AF4: return -LW RA,002C (SP) -OR V0,S3,R0 ;V0=S3: return status -LW S3,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -+_+ - -70009A10 A610 swap allocation entries A0 and A1 - accepts: A0=p->entry1, A1=p->entry2 - fries: V0,V1,T6,T7 -LW T6,0000 (A1) ;T6=A1+0: -LW V0,0000 (A0) ;V0=A0+0: -LW V1,0004 (A0) ;V1=A0+4: -SW T6,0000 (A0) ;A1+0->A0+0 -LW T7,0004 (A1) ;T7->A1+4 -SW T7,0004 (A0) ;A1+4->A0+4 -SW V0,0000 (A1) ;A0+0->A1+0 -JR RA -SW V1,0004 (A1) ;A0+4->A1+4 - -70009A34 A634 merge allocation entries - accepts: A0=p->target, A1=p->source - fries: T6,T7,T8 -LW T6,0004 (A0) -LW T7,0004 (A1) -ADDU T8,T6,T7 -SW T8,0004 (A0) -SW R0,0000 (A1) -JR RA -SW R0,0004 (A1) diff --git a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7000A100 - generate list of allocated memory.txt b/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7000A100 - generate list of allocated memory.txt deleted file mode 100644 index bb5bdf0..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7000A100 - generate list of allocated memory.txt +++ /dev/null @@ -1,119 +0,0 @@ -7000A100 AD00 generate ordered list of 200 largest allocated blocks of memory - note this list is set to SP+54, which is not printed and invalid on return... -ADDIU SP,SP,EF98 -LUI A0,8006 -LW A0,3C38 (A0) ;A0=80063C38: p->first entry in allocation table -SW S5,002C (SP) -SW S0,0018 (SP) -ADDIU S5,R0,FFFF ;S5= -1 -SW S2,0020 (SP) -LUI S0,8006 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S1,001C (SP) -//7000A13C: -LUI V1,8000 -OR S2,R0,R0 ;S2=0 linecount -ADDIU S0,S0,3C38 ;S0=80063C38 -BEQ S5,A0,7000A16C ;branch if first entry -1 -1=end of list -OR V0,R0,R0 ;V0=0 size=0 -//7000A150: loop for each entry -LW T7,0008 (S0) ;T7=next entry+0: p->next block -LW T6,0004 (S0) ;T6=entry+4: p->cur.size -ADDIU S0,S0,0008 ;S0+=8 p->next entry -BNE S5,T7,7000A150 ;loop until end of list -ADDU V0,V0,T6 ;V0+=size total allocated size -LUI S0,8006 -ADDIU S0,S0,3C38 ;S0=80063C38 -//7000A16C: ready loop... -LUI S8,8003 -LUI S6,8003 -ADDIU S1,SP,0054 ;S1=SP+54: p->buffer -ADDIU S6,S6,91E0 ;S6=800291E0: "%d" -ADDIU S8,S8,91E4 ;S8=800291E4: "..." -OR S3,R0,R0 ;S3=0 largest allocated size -OR S4,R0,R0 ;S4=0 -ADDIU S7,R0,00C8 ;S7=0xC8 -//7000A18C: -BEQ S5,A0,7000A1C4 ;branch if no list -NOP -//7000A194: loop to find largest allocation -LW V0,0004 (S0) ;V0=entry+4: size -SLTU AT,V0,V1 ;TRUE if V0 < 0x80000000 -BEQ AT,R0,7000A1B4 ;branch if size negative or pointer -SLTU AT,S3,V0 ;TRUE if largest < cur.size -BEQL AT,R0,7000A1B8 ;branch if largest entry smaller than this one -LW T8,0008 (S0) -OR S3,V0,R0 ;S3=V0: largest allocation = cur.size -ADDIU S4,S4,0001 ;S4++ #entries labelled largest -//7000A1B4: loop to grab largest size -LW T8,0008 (S0) ;T8=next entry+0: p->block -ADDIU S0,S0,0008 ;S0+=8 next entry -BNEL S5,T8,7000A198 ;loop if not end of list -LW V0,0004 (S0) -//7000A1C4: append string with allocation values -BEQ S4,R0,7000A250 ;branch if first entry was largest -LUI S0,8006 -ADDIU S0,S0,3C38 ;S0=80063638 -BEQ S5,A0,7000A244 ;branch if no valid entries -OR S4,R0,R0 ;S4=0 -LW V0,0004 (S0) ;V0=entry+4: size -SLTI AT,S2,00C8 ;TRUE if linecount < 0xC8: within screen bounds -BNEL S3,V0,7000A228 ;branch if not largest allocation -LW T0,0008 (S0) -//7000A1E8: largest allocation is displayed if more lines -BEQ AT,R0,7000A20C ;branch if linecount larger than 0xC8 -OR A0,S1,R0 ;A0=S1: p->buffer -ADDIU A2,V0,0200 ;A2=size+0x200: round up -SRL T9,A2,0xA ;T9=size/0x400: #mem.segments -OR A2,T9,R0 ;A2=#memory segments -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,S6,R0 ;A1=S6: 800291E0: "%d " -BEQ R0,R0,7000A220 -ADDU S1,S1,V0 ;S1+=V0: p->string+strlen allows concatenation -//7000A20C: S2=0xC8 displays etc when unable to display more (...) -BNE S2,S7,7000A220 ;branch if S2 isn't 0xC8 -OR A0,S1,R0 ;A0=S1: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,S8,R0 ;A1=S6: 800291E0: "..." -ADDU S1,S1,V0 ;S1+=V0: p->string+strlen allows concatenation -//7000A220: increment line count -ADDIU S2,S2,0001 ;S2++ linecount++ -//7000A224: -LW T0,0008 (S0) ;T0=next entry+0: p->block -ADDIU S0,S0,0008 ;S0+=8 next entry -BNEL S5,T0,7000A1DC ;loop while entries still exist -LW V0,0004 (S0) -//7000A234: loop to print next largest allocated block -LUI S0,8006 -LUI A0,8006 -LW A0,3C38 (A0) ;A0=80063C38: p->1st block -ADDIU S0,S0,3C38 ;S0=80063C38 -OR V1,S3,R0 ;V1=S3: largest allocated size -BEQ R0,R0,7000A18C -OR S3,R0,R0 ;S3=0 size=0 -//7000A250: if all lines can't be displayed, list the total entries -SLTI AT,S2,00C9 ;TRUE if linecount < 0xC9 -BNE AT,R0,7000A26C ;return if linecount okay -OR A0,S1,R0 ;A0=S1: p->string -LUI A1,8003 -ADDIU A1,A1,91E8 ;A1=800291E8: "[%d]" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A2,S2,R0 ;A2=S2: linecount -//7000A26C: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,1068 diff --git a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/70010B20 - cache prior to PI read.txt b/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/70010B20 - cache prior to PI read.txt deleted file mode 100644 index 1888a2c..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/70010B20 - cache prior to PI read.txt +++ /dev/null @@ -1,50 +0,0 @@ -70010B20 11720 cache prior to PI read - accepts: A0=p->rdram, A1=size -BLEZ A1,70010BA0 ;return if size invalid -NOP -ADDIU T3,R0,2000 -SLTU AT,A1,T3 ;TRUE if size < 0x2000 -BEQ AT,R0,70010BA8 ;branch if small packet -NOP -OR T0,A0,R0 ;T0=A0: p->start -ADDU T1,A0,A1 ;T1=A0+A1: p->end -SLTU AT,T0,T1 ;TRUE if start < end -BEQ AT,R0,70010BA0 ;return if size invalid -NOP -ANDI T2,T0,000F -BEQ T2,R0,70010B70 ;branch if quadword-aligned -ADDIU T1,T1,FFF0 ;T1-=0x10 -SUBU T0,T0,T2 ;T0=start->lowest quadword -CACHE 0000 (T0), D, Hit Writeback Invalidate -SLTU AT,T0,T1 ;TRUE if start < end -BEQ AT,R0,70010BA0 ;return if none left -NOP -ADDIU T0,T0,0010 ;T0+=0x10 next line -//70010B70: -ANDI T2,T1,000F -BEQ T2,R0,70010B90 ;branch if end quadword-aligned -NOP -SUBU T1,T1,T2 ;T1= end->lowest quadword -CACHE 0010 (T1), D, Hit Writeback Invalidate -SLTU AT,T1,T0 ;TRUE if end < start -BNE AT,R0,70010BA0 ;return if none left -NOP -//70010B90: loop and cache -CACHE 0000 (T0), D, Hit Invalidate -SLTU AT,T0,T1 ;TRUE if start < end -BNE AT,R0,70010B90 ;loop while data remains -ADDIU T0,T0,0010 -//70010BA0: return -JR RA -NOP -//70010BA8: small packets size < 0x2000 -LUI T0,8000 ;T0=p->start 80000000 -ADDU T1,T0,T3 ;T1=p->end 80002000 -ADDIU T1,T1,FFF0 ;T1-=0x10 -//70010BB4: loop and cache -CACHE 0000 (T0), D, Index Writeback Invalidate -SLTU AT,T0,T1 ;TRUE if startrdram, A1=size -BLEZ A1,70010C18 ;return if size invalid -NOP -ADDIU T3,R0,2000 -SLTU AT,A1,T3 ;TRUE if size < 0x2000 -BEQ AT,R0,70010C20 ;branch if small (and not 7F TLB) packet -NOP -OR T0,A0,R0 ;T0=A0: p->start -ADDU T1,A0,A1 ;T1=p->ram+size: end -SLTU AT,T0,T1 ;TRUE if start < end -BEQ AT,R0,70010C18 ;return if end comes first -NOP -ANDI T2,T0,000F -ADDIU T1,T1,FFF0 ;T1=size-0x10 count for loop -SUBU T0,T0,T2 ;T0=start to lowest quadword -//70010C08: loop and cache -CACHE 0000 (T0), D, Hit Writeback -SLTU AT,T0,T1 ;TRUE if start less than end -BNE AT,R0,70010C08 ;loop and cache until all data handled -ADDIU T0,T0,0010 ;T0+=10: start+=10 -//70010C18: return -JR RA -NOP -//70010C20: small packets size < 0x2000 -LUI T0,8000 -ADDU T1,T0,T3 ;T1=80002000 send to 80002000 -ADDIU T1,T1,FFF0 ;T1-=0x10 size-=0x10 -//70010C2C: loop and cache -CACHE 0000 (T0), D, Index Writeback Invalidate -SLTU AT,T0,T1 ;TRUE if start < end -BNE AT,R0,70010C2C ;loop while more data to be cached -ADDIU T0,T0,0010 ;T0+=10 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F0015D0 - allocate lookup buffers.txt b/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F0015D0 - allocate lookup buffers.txt deleted file mode 100644 index aabd183..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F0015D0 - allocate lookup buffers.txt +++ /dev/null @@ -1,107 +0,0 @@ -7F0015D0 36100 allocate lookup buffers -//7F0015D0: allocate 1FF object index entries -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU A0,R0,0400 ;A0= 400 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI A2,8004 -LUI AT,8007 -SW V0,9C30 (AT) ;V0->80069C30: object lookup indices -//7F0015F0: -ADDIU A2,A2,42F4 -LW A0,0000 (A2) ;A0=800442F4: max #rooms -ADDIU A1,R0,0004 ;A1= bank 4 -SLL T6,A0,0x2 -ADDIU A0,T6,000F -ORI T7,A0,000F -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -XORI A0,T7,000F ;A0= 4 * #rooms, aligned to quadword -LUI A3,8007 -ADDIU A3,A3,1618 -SW V0,0000 (A3) ;V0->80071618: room lookup buffer -//7F00161C: -ADDIU A0,R0,2000 ;A0= 2000 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI A0,8007 -ADDIU A0,A0,161C -SW V0,0000 (A0) ;V0->8007161C: -//7F001634: -LUI T9,8007 -LW T9,9C30 (T9) -ADDIU A1,R0,FFFF -LUI A2,8004 -ADDIU A2,A2,42F4 -SH A1,0000 (T9) ;-1 -> @80069C30: -LW T3,0000 (A2) ;T3=800442F4: max #rooms -LUI A3,8007 -ADDIU A3,A3,1618 ;A3= 80071618 -BLEZ T3,7F00168C -OR V1,R0,R0 ;V1=0 init. count -OR V0,R0,R0 ;V0=0 init. offset -//7F001664: initialize 80071618 bank -LW T4,0000 (A3) -ADDIU V1,V1,0001 -ADDU T5,T4,V0 -SH A1,0000 (T5) ;-1 -> 80071618[V0] -LW T6,0000 (A2) -ADDIU V0,V0,0002 -SLT AT,V1,T6 -BNEL AT,R0,7F001668 ;loop for each room -LW T4,0000 (A3) -//7F001688: -OR V1,R0,R0 ;V1=0 init. count -OR A3,R0,R0 ;A3=0 init. offset -ADDIU T2,R0,0100 -ADDIU T1,R0,FFFE -ADDIU A2,R0,0020 -//7F00169C: initialize entries in 32 sets of 4 -LW T7,0000 (A0) -SLL T3,V1,0x5 -SLL T6,V1,0x5 -ADDU T8,T7,A3 -SH T1,0000 (T8) ;-2 -> 8007161C[0]+0 -LW T9,0000 (A0) -ADDIU V0,R0,0008 -ADDU T4,T9,T3 -SH A1,0002 (T4) ;-1 -> 8007161C[0]+2 -LW T5,0000 (A0) -SLL T9,V1,0x5 -ADDU T7,T5,T6 -SH A1,0004 (T7) ;-1 -> 8007161C[0]+4 -LW T8,0000 (A0) -ADDU T3,T8,T9 -SH A1,0006 (T3) ;-1 -> 8007161C[0]+6 -//7F0016DC: do another set of 3 -LW T4,0000 (A0) -SLL T5,V1,0x5 -SLL T9,V1,0x5 -ADDU T6,T4,T5 -ADDU T7,T6,V0 -SH A1,0000 (T7) -LW T8,0000 (A0) -SLL T6,V1,0x5 -ADDU T3,T8,T9 -ADDU T4,T3,V0 -SH A1,0002 (T4) -LW T5,0000 (A0) -SLL T3,V1,0x5 -ADDU T7,T5,T6 -ADDU T8,T7,V0 -SH A1,0004 (T8) -LW T9,0000 (A0) -ADDU T4,T9,T3 -ADDU T5,T4,V0 -ADDIU V0,V0,0008 ;V0+=8 offset+=8 -BNE V0,A2,7F0016DC ;loop for remaining -SH A1,0006 (T5) -//7F001734: loop for 32 sets of 4 -ADDIU V1,V1,0001 -BNE V1,T2,7F00169C -ADDIU A3,A3,0020 -//7F001740: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F007320 - set mt allocation.txt b/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F007320 - set mt allocation.txt deleted file mode 100644 index 3a2c677..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F007320 - set mt allocation.txt +++ /dev/null @@ -1,37 +0,0 @@ -7F007320 3BE50 set -mt texture allocation -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,8009 -LUI A1,8005 -SW R0,D090 (AT) -ADDIU A1,A1,F200 ;A1=8004F200: "-mt" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0= 1st -BEQ V0,R0,7F007370 -//7F007344: retrieves and sets new mt value -ADDIU A0,R0,0001 ;A0= 1st -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,F204 ;A1=8004F204: "-mt" -OR A0,V0,R0 ;A0=V0: p->value string -OR A1,R0,R0 ;A1= NULL -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2= default -SLL T6,V0,0xA -LUI AT,8005 -SW T6,9170 (AT) ;value*400 -> 80049170 -//7F007370: allocate memory and set pointer -LUI A0,8005 -LW A0,9170 (A0) ;A0=80049170: most recent mt value -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI A0,8009 -LUI A2,8005 -LW A2,9170 (A2) ;A2=80089170: size -ADDIU A0,A0,C720 ;A0= 8008C720 -JAL 7F0CBAF4 ;set start and end of block to A0 -OR A1,V0,R0 ;A1=V0: p->data -//7F007398: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F0BD48C - set mgfx and mvtx allocations.txt b/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F0BD48C - set mgfx and mvtx allocations.txt deleted file mode 100644 index c27145f..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/7F0BD48C - set mgfx and mvtx allocations.txt +++ /dev/null @@ -1,135 +0,0 @@ -Actual allocations are double of expected. Second buffer ensures there's enough copy room for sorting and expansion. - -7F0BD48C F1FBC set mgfx and mvtx allocations -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LUI A1,8006 -ADDIU A1,A1,B68C ;A1=8005B68C: "-mgfx" -JAL 7000A6A0 ;V0= p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0= 1st instance -BEQ V0,R0,7F0BD4F0 -NOP -//7F0BD4AC: set graphics memory for #players -JAL 7F09A464 ;V0= # players -NOP -LUI A1,8006 -ADDIU A1,A1,B694 ;A1=8005B694: "-mgfx" -SW V0,0018 (SP) -JAL 7000A6A0 ;V0= p->A0th instance of token A1 -ADDIU A0,R0,0001 -OR A0,V0,R0 ;A0=V0: p->value -OR A1,R0,R0 ;A1=NULL -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=auto -LW T7,0018 (SP) -LUI AT,8005 -SLL T6,V0,0xA ;T6= value * 0x400 -SLL T8,T7,0x2 -ADDU AT,AT,T8 -SW T6,82E0 (AT) ;T6-> 800482E0+offset: save allocation for #players -//7F0BD4F0: -LUI A1,8006 -ADDIU A1,A1,B69C ;A1=8005B69C: "-mvtx" -JAL 7000A6A0 ;V0= p->A0th instance of token A1 -ADDIU A0,R0,0001 -BEQ V0,R0,7F0BD54C -NOP -//7F0BD508: set vertex memory for #players -JAL 7F09A464 ;V0= # players -NOP -LUI A1,8006 -ADDIU A1,A1,B6A4 ;A1=8005B6A4: "-mvtx" -SW V0,0018 (SP) -JAL 7000A6A0 ;V0= p->A0th instance of token A1 -ADDIU A0,R0,0001 -OR A0,V0,R0 -OR A1,R0,R0 ;A1=NULL -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=auto -LW T0,0018 (SP) -LUI AT,8005 -SLL T9,V0,0xA ;T9= value * 0x400 -SLL T1,T0,0x2 -ADDU AT,AT,T1 -SW T9,82F0 (AT) ;T6-> 800482F0+offset: save allocation for #players -//7F0BD54C: allocate 2 mgfx buffers to bank 4 -JAL 7F09A464 ;V0= # players -NOP -SLL T2,V0,0x2 -LUI A0,8005 -ADDU A0,A0,T2 -LW A0,82E0 (A0) ;A0=800482E0+offset: -mgfx allocation -ADDIU A1,R0,0004 ;A1= bank 4 -SLL T3,A0,0x1 -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -OR A0,T3,R0 ;A0*=2: two banks -LUI AT,8009 -//7F0BD578: set p->second mgfx region -JAL 7F09A464 ;V0= # players -SW V0,C230 (AT) ;V0->8008C230: p->mgfx -LUI V1,8009 -SLL T4,V0,0x2 -LUI T5,8005 -ADDU T5,T5,T4 -ADDIU V1,V1,C230 -LW T7,0000 (V1) ;T7= 8008C230: p->mgfx[0] -LW T5,82E0 (T5) ;T5=800482E0+offset: -mgfx allocation -ADDU T6,T5,T7 -//7F0BD5A0: -JAL 7F09A464 ;V0= # players -SW T6,0004 (V1) ;T6-> 8008C234: p->mgfx[1] -LUI V1,8009 -SLL T8,V0,0x2 -LUI T0,8005 -ADDU T0,T0,T8 -ADDIU V1,V1,C230 -LW T9,0004 (V1) ;T9=8008C234: p->mgfx[1] -LW T0,82E0 (T0) ;T5=800482E0+offset: -mgfx allocation -ADDU T1,T0,T9 -//7F0BD5C8: allocate 2 mvtx buffers to bank 4 -JAL 7F09A464 ;V0= # players -SW T1,0008 (V1) ;8008C238 = p->end of mgfx allocation -SLL T2,V0,0x2 -LUI A0,8005 -ADDU A0,A0,T2 -LW A0,82F0 (A0) ;A0=800482F0+offset: -mvtx allocation -ADDIU A1,R0,0004 ;A1= bank 4 -SLL T3,A0,0x1 -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -OR A0,T3,R0 ;A0*=2: two banks -LUI V1,8009 -ADDIU V1,V1,C240 -//7F0BD5F8: -JAL 7F09A464 ;V0= # players -SW V0,0000 (V1) ;8008C240 = p->mvtx[0] -LUI V1,8009 -SLL T4,V0,0x2 -LUI T5,8005 -ADDU T5,T5,T4 -ADDIU V1,V1,C240 -LW T7,0000 (V1) ;T7=8004C240: p->mvtx[0] -LW T5,82F0 (T5) ;T5=800482F0+offset: -mvtx allocation -ADDU T6,T5,T7 -//7F0BD620: -JAL 7F09A464 ;V0= # players -SW T6,0004 (V1) ;8004C244 = p->mvtx[1] -LUI V1,8009 -SLL T8,V0,0x2 -LUI T0,8005 -ADDU T0,T0,T8 -ADDIU V1,V1,C240 -LW T9,0004 (V1) ;8004C244 = p->mvtx[1] -LW T0,82F0 (T0) ;T0=800482F0+offset: -mvtx allocation -LUI AT,8009 -LW RA,0014 (SP) -ADDU T1,T0,T9 -SW T1,0008 (V1) ;8004C248 = p->end of mvtx buffer -SB R0,C250 (AT) ;8008C250= 0 -LUI AT,8009 -SW R0,C254 (AT) ;8008C254= 0 -LW T2,0000 (V1) ;T2=8004C240: p->mvtx[0] -LUI AT,8009 -//7F0BD668: -ADDIU SP,SP,0020 -JR RA -SW T2,C24C (AT) ;8008C24C=8004C240: p->mvtx[0] diff --git a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/memory allocation and memory banks.txt b/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/memory allocation and memory banks.txt deleted file mode 100644 index 56aab77..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Memory and Memory Transfers/memory allocation and memory banks.txt +++ /dev/null @@ -1,46 +0,0 @@ -Memory banks for allocated data: -80063BB0 0x10 each (probably) - -default: -0 8008E360 00000000 802F6000 00000000 -1 8008E360 00000000 8008E360 00000000 -2 8008E360 00000000 8008E360 00000000 -3 8008E360 00000000 8008E360 00000000 -4 8008E360 00000000 802AC000 00000000 -5 font 802AC000 00000000 802AC000 00000000 -6 text 802AC000 00000000 802F6000 00000000 - -when LgunE loaded, text bank (6) becomes: -802AC000 802ACF20 802F6000 802AC000 -start of bank next entry endpoint ??? - -In the case memory can not be allocated to another bank, it is placed in bank 6. - -+_+ - -0 -1 -2 -3 -4 -ma * 0x400, -mgfx * 0x800, -mvtx * 0x800, -mt * 0x400 -5 -6 - --ma val * 0x400 -> 800241B0 --mgfx val * 0x400 -> 800482E0+(#players*4) --mvtx val * 0x400 -> 800482F0+(#players*4) --mt val * 0x400 -> 80049170 8008C720 - -Embedding "-nochr", "-noprop", or "-noobj" in memory allocation strings removes said thingy from processing when loading stage code. Handled at 7F003BF0. -"-level_"+"##" -> 800241A8 (stage#) level number must be 2 digits, decimal not hex! (ie. 09=level 9 or 18=level 0x12) -"-hard"+"#" -> 7F01D59C & 7F0BFC1C (difficulty) number 0-3 for selected difficulty agent-007 - -700093AC uses -mf, -ml, -me when found - -mf value->SP+24 - -ml value->SP+2C language - -me value->SP+34 - if -me zero, SP+34=language-specific allocation, SP+2C=memsize - allocation, SP+24=0 - allocates end of mem allocation block for segments 4,5,6 - -new menus will need, minumum, A59D0 for images, C60 for its index, making 0x29A or 666 -700 will do ;*) \ No newline at end of file diff --git a/notes/GE Documentation/Gameplay and Misc/Overlays/7F006D90 - allocate explosion, smoke, casings, scorch, and impact buffers.txt b/notes/GE Documentation/Gameplay and Misc/Overlays/7F006D90 - allocate explosion, smoke, casings, scorch, and impact buffers.txt deleted file mode 100644 index 5001430..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Overlays/7F006D90 - allocate explosion, smoke, casings, scorch, and impact buffers.txt +++ /dev/null @@ -1,276 +0,0 @@ -7F006D90 3B8C0 allocate explosion, smoke, casings, scorch, and impact buffers -LUI AT,8004 -SW R0,0170 (AT) ;0 -> 80040170 -LUI AT,8004 -SW R0,0174 (AT) ;0 -> 80040174 -LUI AT,8004 -SW R0,0800 (AT) ;0 -> 80040800 -LUI AT,8004 -SW R0,0804 (AT) ;0 -> 80040804 -LUI AT,8004 -SW R0,0808 (AT) ;0 -> 80040808 -LUI AT,3F80 -MTC1 AT,F4 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -//7F006DC8: allocate explosion buffer -LUI AT,8004 -ADDIU A0,R0,1740 ;A0= 1740 bytes (6 entries, 3E0 ea.) -ADDIU A1,R0,0004 ;A1= bank 4 -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -SWC1 F4,0178 (AT) ;1.0 -> 80040178: default difficulty 1.0 -LUI V1,8008 -ADDIU V1,V1,A144 -SW V0,0000 (V1) ;V0->8007A144: save p->explosion entries -//7F006DE8: -OR A0,R0,R0 ;A0= entry count -OR A2,R0,R0 ;A2= offset -ADDIU A1,R0,03C0 ;A1= 3C0: size of explody.frame section -//7F006DF4: Initialize 6 entries... -LW T6,0000 (V1) ;T6=explody.buf -OR V0,R0,R0 ;V0=frame count -ADDU T7,T6,A2 -SW R0,0000 (T7) ;NULL -> frame+0: explody.frame.pos -//7F006E04: ...of 40 frames each. -LW T8,0000 (V1) -SLL T9,A0,0x5 -SUBU T9,T9,A0 -SLL T9,T9,0x5 -ADDU T0,T8,T9 -ADDU T1,T0,V0 -SH R0,001C (T1) ;0000 -> frame+1C: explody.frame.display (False) -LW T2,0000 (V1) -SLL T3,A0,0x5 -SUBU T3,T3,A0 -SLL T3,T3,0x5 -ADDU T4,T2,T3 -ADDU T5,T4,V0 -SH R0,0034 (T5) ;0000 -> frame+34: explody.frame.display (False) -LW T6,0000 (V1) -SLL T7,A0,0x5 -SUBU T7,T7,A0 -SLL T7,T7,0x5 -ADDU T8,T6,T7 -ADDU T9,T8,V0 -SH R0,004C (T9) ;0000 -> frame+4C: explody.frame.display (False) -LW T0,0000 (V1) -SLL T1,A0,0x5 -SUBU T1,T1,A0 -SLL T1,T1,0x5 -ADDU T2,T0,T1 -ADDU T3,T2,V0 -ADDIU V0,V0,0060 -BNE V0,A1,7F006E04 ;iterate through each frame -SH R0,0064 (T3) ;NULL -> frame+0: explody.frame.pos -//7F006E7C: loop for each entry -ADDIU A0,A0,0001 -SLTI AT,A0,0006 -BNE AT,R0,7F006DF4 -ADDIU A2,A2,03E0 -//7F006E8C: allocate 14 smoke entries, 198 each -ADDIU A0,R0,1FE0 ;A0= 1FE0 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI V1,8008 -ADDIU V1,V1,A140 -MTC1 R0,F0 -SW V0,0000 (V1) ;V0->8007A140: save p->smoke entries -//7F006EA8: -OR A0,R0,R0 ;A0= count -OR A2,R0,R0 ;A2= offset -ADDIU A1,R0,0190 -//7F006EB4: initialize entries -LW T4,0000 (V1) -SLL T7,A0,0x2 -SUBU T7,T7,A0 -SLL T7,T7,0x2 -ADDU T5,T4,A2 -SW R0,0000 (T5) ;0 -> entry+0 -ADDU T7,T7,A0 -LW T6,0000 (V1) -SLL T7,T7,0x2 -SUBU T7,T7,A0 -SLL T0,A0,0x2 -SUBU T0,T0,A0 -SLL T7,T7,0x3 ;T7= A0*198 -SLL T0,T0,0x2 -ADDU T8,T6,T7 -SWC1 F0,0014 (T8) ;0.0 -> entry+14 -ADDU T0,T0,A0 -LW T9,0000 (V1) -SLL T0,T0,0x2 -SUBU T0,T0,A0 -SLL T0,T0,0x3 -ADDU T1,T9,T0 -SWC1 F0,003C (T1) ;0.0 -> entry+3C -ADDIU V0,R0,0050 -//7F006F14: fill frames within entries -SLL T3,A0,0x2 -SUBU T3,T3,A0 -SLL T3,T3,0x2 -ADDU T3,T3,A0 -LW T2,0000 (V1) -SLL T3,T3,0x2 -SUBU T3,T3,A0 -SLL T7,A0,0x2 -SLL T3,T3,0x3 -SUBU T7,T7,A0 -ADDU T4,T2,T3 -SLL T7,T7,0x2 -ADDU T5,T4,V0 -ADDU T7,T7,A0 -SWC1 F0,0014 (T5) ;0.0 -> frame+14: -LW T6,0000 (V1) -SLL T7,T7,0x2 -SUBU T7,T7,A0 -SLL T7,T7,0x3 -SLL T1,A0,0x2 -SUBU T1,T1,A0 -ADDU T8,T6,T7 -ADDU T9,T8,V0 -SLL T1,T1,0x2 -ADDU T1,T1,A0 -SWC1 F0,003C (T9) ;0.0 -> frame+3C: -LW T0,0000 (V1) -SLL T1,T1,0x2 -SUBU T1,T1,A0 -SLL T1,T1,0x3 -SLL T5,A0,0x2 -SUBU T5,T5,A0 -ADDU T2,T0,T1 -ADDU T3,T2,V0 -SLL T5,T5,0x2 -ADDU T5,T5,A0 -SWC1 F0,0064 (T3) ;0.0 -> frame+64: -LW T4,0000 (V1) -SLL T5,T5,0x2 -SUBU T5,T5,A0 -SLL T5,T5,0x3 -ADDU T6,T4,T5 -ADDU T7,T6,V0 -ADDIU V0,V0,00A0 -BNE V0,A1,7F006F14 ;iterate through each frame -SWC1 F0,008C (T7) ;0.0 -> frame+8C -//7F006FCC: iterate through each entry -ADDIU A0,A0,0001 -SLTI AT,A0,0014 -BNE AT,R0,7F006EB4 -ADDIU A2,A2,0198 -//7F006FDC: solo only: scorch buffer -JAL 7F09A464 ;V0= # players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F007048 ;Solo only! -//7F006FEC: allocate 5 entries, 160 each -ADDIU A0,R0,06E0 ;A0= 6E0 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI A1,8008 -ADDIU A1,A1,A150 -SW V0,0000 (A1) ;V0->8007A150: p->scorch buffer -ADDIU V0,R0,06E0 -OR V1,R0,R0 ;V1= 0 offset -ADDIU A2,R0,FFFF -//7F007010: initialize entries -LW T8,0000 (A1) -ADDU T9,T8,V1 -SH A2,0000 (T9) ;FFFF->entry+0 -LW T0,0000 (A1) -ADDU T1,T0,V1 -SH A2,0058 (T1) ;FFFF->entry+58 -LW T2,0000 (A1) -ADDU T3,T2,V1 -SH A2,00B0 (T3) ;FFFF->entry+B0 -LW T4,0000 (A1) -ADDU T5,T4,V1 -ADDIU V1,V1,0160 -BNE V1,V0,7F007010 -SH A2,0108 (T5) ;FFFF->entry+108 -//7F007048: allocate 100 (0x64) bullet impact entries, 50 each -ADDIU A0,R0,1F40 ;A0= 1F40 bytes (64 entries, 50 each) -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI A1,8008 -ADDIU A1,A1,A154 -SW V0,0000 (A1) ;V0->8007A154: p->impact.buf -ADDIU A2,R0,FFFF -OR V1,R0,R0 ;V1=offset -//7F007068: initialize entries -LW T6,0000 (A1) -ADDU T7,T6,V1 -ADDIU V1,V1,0050 -SLTI AT,V1,1F40 -BNE AT,R0,7F007068 -SH A2,0000 (T7) ;FFFF -> entry+0: impact.room -//7F007080: set 8007A148: maximum bullet casings -JAL 7F09A464 ;V0= # players -NOP -ADDIU T8,R0,00C8 -DIV T8,V0 -LUI A2,8008 -ADDIU A2,A2,A148 -BNE V0,R0,7F0070A4 -NOP -BREAK 00001C00 -//7F0070A4: -ADDIU AT,R0,FFFF -BNE V0,AT,7F0070BC -LUI AT,8000 -BNE T8,AT,7F0070BC -NOP -BREAK 00001800 -//7F0070BC: -MFLO T9 -SW T9,0000 (A2) ;T9->8007A148: 200/#players (C8/#players) -//7F0070C4: certain stages use 100/#players -JAL 7F0BDF04 ;V0=cur.stage# -NOP -LUI A2,8008 -ADDIU AT,R0,001D -BEQ V0,AT,7F0070F4 ;branch if 1D: Streets -ADDIU A2,A2,A148 -JAL 7F0BDF04 ;V0=cur.stage# -NOP -LUI A2,8008 -ADDIU AT,R0,001E -BNE V0,AT,7F007100 ;branch if not 1E: Depot -ADDIU A2,A2,A148 -//7F0070F4: Depot and Streets halve this... -LW T0,0000 (A2) -SRA T1,T0,0x1 -SW T1,0000 (A2) -//7F007100: allocate casings.max ejected casings entries, 78 each -LW A0,0000 (A2) -ADDIU AT,R0,FFF0 -ADDIU A1,R0,0004 ;A1= bank 4 -SLL T2,A0,0x4 -SUBU T2,T2,A0 -SLL T2,T2,0x3 -ADDIU A0,T2,000F -AND T3,A0,AT ;align to quadword boundry -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -OR A0,T3,R0 ;A0= casings.max * 78, to quadword -LUI A2,8008 -ADDIU A2,A2,A148 -LW T4,0000 (A2) ;T4=8007A148: casings.max -LUI V1,8008 -ADDIU V1,V1,A14C -SW V0,0000 (V1) ;V0->8007A14C: p->casings buffer -BLEZ T4,7F007170 ;return if no entries -OR A0,R0,R0 ;A0=0 init count -OR V0,R0,R0 ;V0=0 offset -LW T5,0000 (V1) ;T5= p->buf -//7F007150: initialize each entry -ADDIU A0,A0,0001 ;count+=1 -ADDU T6,T5,V0 -SW R0,0000 (T6) ;0->entry+0 -LW T7,0000 (A2) -ADDIU V0,V0,0078 -SLT AT,A0,T7 -BNEL AT,R0,7F007150 ;loop for each entry -LW T5,0000 (V1) -//7F007170: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Overlays/7F043B7C - generate explosion at object position.txt b/notes/GE Documentation/Gameplay and Misc/Overlays/7F043B7C - generate explosion at object position.txt deleted file mode 100644 index 30a0111..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Overlays/7F043B7C - generate explosion at object position.txt +++ /dev/null @@ -1,135 +0,0 @@ -7F043B7C 786AC generate explosion of type A1 at object position A0 - accepts: A0=p->std.object's pos.data, A1=type of explosion -ADDIU SP,SP,FFA0 -SW RA,002C (SP) -SW S0,0028 (SP) -SW A1,0064 (SP) ;SP+64=A1: explody.type -LW T0,0004 (A0) ;T0=pos.data+4: p->obj.data -LUI AT,0006 -OR S0,A0,R0 ;S0=A0: p->pos.data -LW T6,0064 (T0) ;T6=obj.data+64: flags.runtime -ADDIU T9,S0,002C ;T9=pos.data+2C: p->pos.data.rooms -AND T7,T6,AT ;T7=flags.run & 00060000: owner -SRL T8,T7,0x11 ;T8=owner's player# -SW T8,0058 (SP) ;SP+58=T8: player# -LW A2,001C (A0) ;A2=pos.data+1C: pos.data.parent? -OR A0,R0,R0 ;A0=0 -BEQL A2,R0,7F043D10 ;branch if NULL: object is source -LW V0,0008 (T0) -LW V0,001C (A2) ;V0=pos.data+1C: pos.data.parent? -OR V1,A2,R0 ;V1=A2: parental guidance suggested -BEQL V0,R0,7F043BE0 ;branch if owner found -LW T9,0014 (V1) -//7F043BCC: loop to find parent -OR V1,V0,R0 ;V1=V0: parental guidance suggested -LW V0,001C (V0) ;V0=pos.data+1C: pos.data.parent? -BNEL V0,R0,7F043BD0 ;loop if parent found -OR V1,V0,R0 -//7F043BDC: -LW T9,0014 (V1) ;T9=pos.data+14: p->tile -SW T9,0050 (SP) ;SP+50=p->tile -LBU T1,0001 (S0) ;T1=org.pos.data+1: state -ANDI T2,T1,0002 ;T2=state&2: on-screen -BEQL T2,R0,7F043C40 ;branch if not on-screen -LWC1 F10,0008 (V1) -LW A0,0014 (T0) ;A0=obj.data+14: obj.instance controller -SW T0,005C (SP) ;SP+5C=T0: p->obj.data -JAL 7F06C6A0 -SW V1,0054 (SP) ;SP+54=V1: p->pos.data -LWC1 F4,0030 (V0) -SWC1 F4,0044 (SP) -LWC1 F6,0034 (V0) -SWC1 F6,0048 (SP) -LWC1 F8,0038 (V0) -JAL 7F078444 ;V0= BONDdata+10D4: -SWC1 F8,004C (SP) -ADDIU S0,SP,0044 ;S0=SP+44: p->position buffer -OR A1,S0,R0 ;A1=S0: p->pos -JAL 7F058474 -OR A0,V0,R0 -LW V1,0054 (SP) ;V1=p->pos.data -BEQ R0,R0,7F043C58 -LW T0,005C (SP) ;T0=SP+5C: p->obj.data -//7F043C3C: copy position data to buffer -LWC1 F10,0008 (V1) ;F10=pos.data+8: xpos -ADDIU S0,SP,0044 ;S0=SP+44: p->position buffer -SWC1 F10,0044 (SP) ;F10->SP+44: pos.xpos -LWC1 F16,000C (V1) ;F16=pos.data+C: ypos -SWC1 F16,0048 (SP) ;F16->SP+48: pos.ypos -LWC1 F18,0010 (V1) ;F18=pos.data+10: zpos -SWC1 F18,004C (SP) ;F18->SP+4C: pos.zpos -//7F043C58: -LBU T3,0001 (V1) ;T3=pos.data+1: state -ADDIU A0,SP,0050 ;A0=SP+50: -LW A3,0044 (SP) ;A3=SP+44: xpos2 -ANDI T4,T3,0008 ;T4=state&8: has been loaded -BNE T4,R0,7F043CD4 ;branch if has been loaded or on-screen -LWC1 F4,004C (SP) ;F4=SP+4C: zpos -LW A1,0008 (V1) ;A1=pos.data+8: xpos1 -LW A2,0010 (V1) ;A2=pos.data+10: zpos1 -SW T0,005C (SP) ;SP+5C=T0: p->obj.data -SW V1,0054 (SP) ;SP+54=V1: p->pos.data -JAL 7F0B0BE4 -SWC1 F4,0010 (SP) ;SP+10=zpos2 -LW V1,0054 (SP) ;V1=SP+54: p->pos.data -BEQ V0,R0,7F043CD4 ;branch if ??? -LW T0,005C (SP) ;T0=p->obj.data -LW T5,0008 (T0) ;T5=obj.data+8: flags.1 -LW T8,0058 (SP) ;T8=SP+58: player# -ADDIU T9,V1,002C ;T9=pos.data+2C: pos.data.rooms -ANDI T6,T5,000E ;T6=flags.1 & 0xE: midair -SLTIU T7,T6,0001 ;T7=TRUE if not midair -SW T7,0010 (SP) ;SP+10=TRUE if forced to ground -SW T9,0018 (SP) ;SP+18=p->room list -SW R0,001C (SP) ;SP+1C=0: -OR A0,R0,R0 ;A0=0 -OR A1,S0,R0 ;A1=S0: p->pos.buf -LW A2,0050 (SP) ;A2=SP+50: p->tile -LH A3,0066 (SP) ;A3=SP+66: explody.type -JAL 7F09C250 ;generates explosions and smoke at location -SW T8,0014 (SP) ;SP+14=T8: player# -BEQ R0,R0,7F043D60 ;return -LW RA,002C (SP) -//7F043CD4: midair explosion, set as loaded -LW T1,0058 (SP) ;T1=SP+58: player# -ADDIU T2,V1,002C ;T2=pos.data+2C: pos.data.rooms -ADDIU T3,R0,0001 -SW T3,001C (SP) ;SP+1C=TRUE: set as loaded -SW T2,0018 (SP) ;SP+18= pos.data.rooms -OR A0,R0,R0 ;A0=NULL -OR A1,S0,R0 ;A1=S0: p->pos.buf -LW A2,0050 (SP) ;A2=SP+50: p->tile -LH A3,0066 (SP) ;A3=SP+66: explody.type -SW R0,0010 (SP) ;SP+10=FALSE: midair -JAL 7F09C250 ;generates explosions and smoke at location -SW T1,0014 (SP) ;SP+14= player# -BEQ R0,R0,7F043D60 -LW RA,002C (SP) -//7F043D0C: use object's current position -LW V0,0008 (T0) ;V0=obj.data+8: flags.1 -ANDI T4,V0,000E ;T4=flags.1 & 0xE: midair -SLTIU V0,T4,0001 ;V0=TRUE if not midair -BEQL V0,R0,7F043D30 ;branch if midair -LW T8,0058 (SP) -LBU V0,0001 (S0) ;V0=org.pos.data+1: state -ANDI T6,V0,0008 ;T6=state&8: loaded -SLTIU V0,T6,0001 ;V0=TRUE if not loaded -//7F043D2C: generate explosion at object -LW T8,0058 (SP) ;T8=SP+58: player# -LW A2,0014 (S0) ;A2=org.pos.data+14: p->tile -SW T9,0018 (SP) ;SP+18= p->pos.data.rooms -SW V0,0010 (SP) ;SP+10= TRUE if midair and unloaded -SW T8,0014 (SP) ;SP+14= player# -LBU T1,0001 (S0) ;T1=org.pos.data+1: state -ADDIU A1,T0,0058 ;A1=obj.data+58: p->pos -LH A3,0066 (SP) ;A3=SP+66: explody.type -ANDI T2,T1,0008 ;T2=state&8: loaded -SLTU T3,R0,T2 ;T3=TRUE if loaded -JAL 7F09C250 ;generates explosions and smoke at location -SW T3,001C (SP) ;SP+1C: TRUE if loaded -//7F043D5C: return -LW RA,002C (SP) -LW S0,0028 (SP) -ADDIU SP,SP,0060 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Overlays/7F043D70 - handle explosive items.txt b/notes/GE Documentation/Gameplay and Misc/Overlays/7F043D70 - handle explosive items.txt deleted file mode 100644 index 0e293ed..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Overlays/7F043D70 - handle explosive items.txt +++ /dev/null @@ -1,364 +0,0 @@ -7F043D70 788A0 handle explosive objects - accepts: A0=p->position data -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) ;SP+20=A0: p->pos.data -LW A3,0004 (A0) ;A3=pos.data+4: p->obj.data -JAL 7F09B150 ;V0= cur player # -SW A3,001C (SP) ;SP+1C= p->obj.data -JAL 7F09B4D8 -OR A0,V0,R0 ;A0=V0: player# -BNE V0,R0,7F0441F0 ;return if weird entry or something -LW A3,001C (SP) ;A3=p->obj.data -LBU V0,0003 (A3) ;V0=obj.type -ADDIU AT,R0,0007 -BNEL V0,AT,7F043DE0 ;branch if not an ammo clip -ADDIU AT,R0,0008 -//7F043DA8: ammo clips -LW T7,0008 (A3) ;T7=obj.data+8= 1st bitflag field -LW A0,0020 (SP) ;A0=p->pos.data -ADDIU A1,R0,000C -SLL T8,T7,0x3 ;T8=flags.1*8: test for 10000000 -BGEZL T8,7F0441F4 ;return if 10000000 not set -LW RA,0014 (SP) -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) ;SP+1C= p->obj.data -LW A3,001C (SP) ;A3=p->obj.data -LW T9,0064 (A3) ;T9=obj.data+64= runtime flags -ORI T0,T9,0004 ;flags.run | 4: ??? -BEQ R0,R0,7F0441F0 ;return -SW T0,0064 (A3) ;update flags.run -//7F043DDC: collectable item -ADDIU AT,R0,0008 -BNE V0,AT,7F0441F0 ;branch if not an item -LW T1,0020 (SP) ;T1=p->pos.data -LW A2,0004 (T1) ;A2=pos.data+4: p->obj.data -ADDIU AT,R0,001A ;AT=1A: grenades -LB V1,0080 (A2) ;V1=item type -BEQ V1,AT,7F043E04 ;branch if grenades -ADDIU AT,R0,0057 -BNEL V1,AT,7F043E6C ;branch if not type 57: ??? -ADDIU AT,R0,0056 -//7F043E04: grenades -LH V0,0082 (A2) ;V0=obj.data+82: timer -LUI T2,8005 -BLTZL V0,7F043E6C ;branch if -1: timer stopped -ADDIU AT,R0,0056 -LW T2,8374 (T2) ;T2=80048374: 1 if not paused -SUBU T3,V0,T2 ;T3=timer-clock -SH T3,0082 (A2) ;update timer -LH T4,0082 (A2) ;V0=obj.data+82: timer -LW A0,0020 (SP) ;A0=p->pos.data -BGEZL T4,7F0441F4 ;return if timer running -LW RA,0014 (SP) -LW T5,000C (A3) ;T5=obj.data+C: flags.2 -ADDIU A1,R0,000D ;A1=normal explosion radius -SLL T6,T5,0x0 ;T6=T5: useless OP! -BGEZ T6,7F043E4C ;branch if 80000000 not set: large explosions -NOP -BEQ R0,R0,7F043E4C -ADDIU A1,R0,0011 ;A1=room-wide explosion radius -//7F043E4C: detonate -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) ;SP+1C=A3: p->obj.data -LW A3,001C (SP) ;A3=p->obj.data -LW T7,0064 (A3) ;T7=obj.data+64: flags.run -ORI T8,T7,0004 ;flags.run | 4 -BEQ R0,R0,7F0441F0 -SW T8,0064 (A3) ;update flags -//7F043E68: beta item 0x56 -ADDIU AT,R0,0056 -BNEL V1,AT,7F043EC0 ;branch if not 0x56 -ADDIU AT,R0,0022 -LH T9,0082 (A2) ;T9=timer -LW A0,0020 (SP) ;A0=p->pos.data -BNEL T9,R0,7F0441F4 ;return if not zero -LW RA,0014 (SP) -LW T0,000C (A3) -ADDIU A1,R0,000D ;A1=normal explosion radius -SLL T1,T0,0x0 -BGEZ T1,7F043EA0 ;branch if 80000000 not set: large explosions -NOP -BEQ R0,R0,7F043EA0 -ADDIU A1,R0,0011 ;A1=room-wide explosion radius -//7F043EA0: detonate -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) -LW A3,001C (SP) ;A3=p->obj.data -LW T2,0064 (A3) ;T2=obj.data+64: flags.run -ORI T3,T2,0004 ;flags.run | 4 -BEQ R0,R0,7F0441F0 -SW T3,0064 (A3) ;update flags -//7F043EC0: plastique -ADDIU AT,R0,0022 -BNEL V1,AT,7F043F14 ;branch if not plastique -ADDIU AT,R0,001B -LH T4,0082 (A2) ;T4=timer -LW A0,0020 (SP) ;A0=p->pos.data -ADDIU A1,R0,0011 ;A1=room-wide explosion radius -BNEL T4,R0,7F0441F4 ;return if timer running -LW RA,0014 (SP) -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) -LW A3,001C (SP) ;A3=p->obj.data -ADDIU A0,R0,0078 ;A0=explosion delay: 120 -LW T5,0064 (A3) ;T5=obj.data+64: flags.run -ORI T6,T5,0004 ;T6= flags.run | 4 -JAL 7F08BFC4 ;trigger explosions around players -SW T6,0064 (A3) ;update flags -ADDIU A0,R0,0002 ;A0=clock lock 2: plastique -JAL 7F056160 ;set clock lock A0 -OR A1,R0,R0 ;A1=set lock -BEQ R0,R0,7F0441F4 -LW RA,0014 (SP) -//7F043F10: timed explosives -ADDIU AT,R0,001B -BEQ V1,AT,7F043F24 ;branch if timed mines -ADDIU AT,R0,0021 -BNEL V1,AT,7F043F9C ;skip if not bombcase -ADDIU AT,R0,001D -//7F043F24: timed mines/bombcase -LH V0,0082 (A2) ;V0=timer -LUI T7,8005 -BLTZL V0,7F043F9C ;branch if more time left -ADDIU AT,R0,001D -LW T7,8374 (T7) ;T7=80048374: 1 if not paused -SUBU T8,V0,T7 ;T8=timer-clock -SH T8,0082 (A2) ;update timer -LH T9,0082 (A2) ;T9=timer -LW A0,0020 (SP) ;A0=p->pos.data -BGEZL T9,7F0441F4 ;branch if more time left -LW RA,0014 (SP) -LW T0,000C (A3) ;T0=flags.2 -ADDIU A1,R0,000D ;A1=normal explosion radius -SLL T1,T0,0x0 -BGEZ T1,7F043F6C ;branch if 80000000 not set: large explosions -NOP -BEQ R0,R0,7F043F6C -ADDIU A1,R0,0011 ;A1=room-wide explosion radius -//7F043F6C: detonate -SW A2,0018 (SP) -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) -LW A2,0018 (SP) ;p->obj.data -LW A3,001C (SP) ;p->obj.data -ADDIU T2,R0,FFFF -SH T2,0082 (A2) ;-1 -> timer -LW T3,0064 (A3) ;T3=obj.data+64: flags.run -ORI T4,T3,0004 ;T4=flags.run | 4 -BEQ R0,R0,7F0441F0 -SW T4,0064 (A3) ;update flags -//7F043F98: handle triggered remote mines -ADDIU AT,R0,001D ;AT=1D: remote mines -BNEL V1,AT,7F0440C4 ;branch if not remotes -ADDIU AT,R0,001C -LUI V1,8003 -LW V1,0AF4 (V1) ;V1=80030AF4: remote mine trigger -LUI T0,8005 -BEQL V1,R0,7F043FE4 ;branch if players didn't trigger theirs -LH V0,0082 (A2) -LW V0,0064 (A3) ;V0=obj.data+64: flags.run -LUI AT,0006 -ADDIU T7,R0,0001 -AND T5,V0,AT ;T5=flags.run & 00060000: player ownership flags -SRL T6,T5,0x11 ;T6=flags / 0x20000 -SLLV T8,T7,T6 ;T8=1<bitmask -AND T9,V1,T8 ;T9= mine reg & ownership: TRUE if detonated mine -BEQL T9,R0,7F043FE4 ;branch if not triggered -LH V0,0082 (A2) -SH R0,0082 (A2) ;0->timer -//7F043FE0: decrement timer but ensure not < 0 (not sure if this would alter detonation) -LH V0,0082 (A2) ;V0=timer -SLTI AT,V0,0002 ;TRUE if < 2 -BNE AT,R0,7F044018 ;branch if time expired -NOP -LW T0,8374 (T0) ;T0=80048374: 1 if not paused -ADDIU T3,R0,0001 -SUBU T1,V0,T0 ;T1=timer-clock -SH T1,0082 (A2) ;update timer -LH T2,0082 (A2) ;T2=timer -SLTI AT,T2,0002 ;TRUE if time < 2 -BEQL AT,R0,7F0441F4 ;return if not ready -LW RA,0014 (SP) -BEQ R0,R0,7F0441F0 ;return -SH T3,0082 (A2) ;1->timer -//7F044018: determine explosion radius -BNEL V0,R0,7F0441F4 ;branch if timer not 0 only 0 when triggered, 1 when ready -LW RA,0014 (SP) -LW T4,000C (A3) ;T4=flags.2 -LW A0,0020 (SP) ;A0=p->pos.data -ADDIU A1,R0,0011 -SLL T5,T4,0x0 -BGEZL T5,7F044054 ;branch if 80000000 not set: large explosions -SW A2,0018 (SP) -SW A2,0018 (SP) -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) -LW A2,0018 (SP) ;A2=p->pos.data -BEQ R0,R0,7F0440A8 -LW A3,001C (SP) ;A3=p->pos.data -//7F044050: normal explosions -SW A2,0018 (SP) -JAL 7000695C ;stage# -SW A3,001C (SP) -ADDIU AT,R0,0022 ;AT=stage 22: Cuba -LW A2,0018 (SP) -BNE V0,AT,7F04408C ;branch if not Cuba -LW A3,001C (SP) -LW A0,0020 (SP) ;A0=p->pos.data -ADDIU A1,R0,0013 -SW A2,0018 (SP) -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) -LW A2,0018 (SP) -BEQ R0,R0,7F0440A8 -LW A3,001C (SP) -//7F04408C: normal explosions -LW A0,0020 (SP) ;A0=p->pos.data -ADDIU A1,R0,000D -SW A2,0018 (SP) -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) -LW A2,0018 (SP) -//7F0440A4: update timer and flags -LW A3,001C (SP) ;A3=p->obj.data -ADDIU T6,R0,FFFF -SH T6,0082 (A2) ;-1 -> timer -LW T7,0064 (A3) ;T7=flags.run -ORI T8,T7,0004 ;flags.run | 4 -BEQ R0,R0,7F0441F0 -SW T8,0064 (A3) ;update flags -//7F0440C0: proximity mines -ADDIU AT,R0,001C -BNEL V1,AT,7F0441F4 ;branch if not proxies -LW RA,0014 (SP) -LH V0,0082 (A2) ;V0=timer -LUI T9,8005 -SLTI AT,V0,0002 -BNEL AT,R0,7F044124 ;branch if < 2 -ADDIU AT,R0,0001 -LW T9,8374 (T9) ;T9=80048374: 1 if not paused -ADDIU T2,R0,0001 -OR A0,A2,R0 ;A0=A2: p->obj.data -SUBU T0,V0,T9 ;T0=timer-clock -SH T0,0082 (A2) ;update timer -LH T1,0082 (A2) -SLTI AT,T1,0002 -BEQL AT,R0,7F04419C ;branch if more time -LH T4,0082 (A2) -SH T2,0082 (A2) ;1->timer -SW A3,001C (SP) -JAL 7F051B5C -SW A2,0018 (SP) -LW A2,0018 (SP) -BEQ R0,R0,7F044198 -LW A3,001C (SP) -//7F044120: primed proximity mine -ADDIU AT,R0,0001 -BNEL V0,AT,7F04419C ;skip if already detonating -LH T4,0082 (A2) -SW A2,0018 (SP) -JAL 7F089798 ;V0= p->cur.player.pos -SW A3,001C (SP) -LW T3,0020 (SP) ;A0=p->pos.data -LWC1 F4,0008 (V0) ;F4=cur.x.pos -LWC1 F8,000C (V0) ;F8=cur.y.pos -LWC1 F6,0008 (T3) ;F6=obj.x.pos -LWC1 F10,000C (T3) ;F10=obj.y.pos -LWC1 F16,0010 (V0) ;F16=cur.z.pos -SUB.S F0,F4,F6 ;F0=dx.pos -LWC1 F18,0010 (T3) ;F18=obj.z.pos -LUI AT,8005 -SUB.S F2,F8,F10 ;F2=dy.pos -MUL.S F4,F0,F0 ;F4=dx.pos^2 -LW A2,0018 (SP) -SUB.S F12,F16,F18 ;F12=dz.pos -MUL.S F6,F2,F2 ;F6=dy.pos^2 -LWC1 F18,2A94 (AT) ;F18=80052A94: activation distance, squared -LW A3,001C (SP) -MUL.S F10,F12,F12 ;F10=dz.pos^2 -ADD.S F8,F4,F6 -ADD.S F16,F8,F10 ;F16=dx^2 + dy^2 + dz^2 -C.LT.S F16,F18 -NOP -BC1FL 7F04419C ;skip if not within range -LH T4,0082 (A2) -SH R0,0082 (A2) ;0->timer -//7F044198: -LH T4,0082 (A2) ;T4=timer -LW A0,0020 (SP) ;A0=p->pos.data -BNEL T4,R0,7F0441F4 ;branch if not detonating -LW RA,0014 (SP) -LW T5,000C (A3) ;T5=flags.2 -ADDIU A1,R0,000D -SLL T6,T5,0x0 -BGEZ T6,7F0441C4 ;branch if 80000000 not set: large explosions -NOP -BEQ R0,R0,7F0441C4 -ADDIU A1,R0,0011 -//7F0441C4: detonate -SW A2,0018 (SP) -JAL 7F043B7C ;generate explosion at object position -SW A3,001C (SP) -LW A0,0018 (SP) ;A0=SP+18: p->obj.data -LW A3,001C (SP) ;A3=SP+1C: p->obj.data -ADDIU T7,R0,FFFF -SH T7,0082 (A0) ;-1 -> timer -LW T8,0064 (A3) ;T8=flags.run -ORI T9,T8,0004 ;flags.run | 4 -JAL 7F051B94 ;remove proxy entry A0 from list -SW T9,0064 (A3) ;update flags -//7F0441F0: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -+_+ - -7F051B94 866C4 remove temp proximity mine table entry A0 - accepts: A0=p->object data -LUI V1,8007 -LUI V0,8007 -ADDIU V0,V0,1E78 ;V0=80071E78: end of table -ADDIU V1,V1,1E00 ;V1=80071E00: start of ? table -//7F051BA4: 866D4 -LW T6,0000 (V1) -BNEL A0,T6,7F051BBC ;branch if doesn't match A0 -ADDIU V1,V1,0004 -JR RA -SW R0,0000 (V1) ;NULL entry if found -//7F051BB8: 866E8 loop until end of list -ADDIU V1,V1,0004 ;V1+=4 next entry -BNEL V1,V0,7F051BA8 ;loop for 0x78 entries -LW T6,0000 (V1) -JR RA -NOP - -+_+ - -7F09B4D8 V0= - accepts: A0=player# -LUI A1,8008 -LUI A3,8008 -LUI A2,8008 -OR V1,R0,R0 ;V1=0 #valid entries -ADDIU A2,A2,9EE0 ;A2=80079EE0: BONDdata pointer table -ADDIU A3,A3,A0D0 ;A3=8007A0D0: endpoint -ADDIU A1,A1,A0C0 ;A1=8007A0C0: start -LW V0,0000 (A1) ;V0= -//7F09B4F8: test # valid linked players -ADDIU A1,A1,0004 ;A1+=4: next entry -BEQ A0,V0,7F09B520 ;branch if same as player# -SLL T6,V0,0x2 ;T6=#->offset -ADDU T7,A2,T6 ;T7=p->BONDdata entry + offset -LW T8,0000 (T7) ;T8=p->player V0's BONDdata -BEQ T8,R0,7F09B518 ;iterate if invalid -NOP -ADDIU V1,V1,0001 ;V1++ count++ -//7F09B518: loopus -BNEL A1,A3,7F09B4F8 ;loop for each entry in table -LW V0,0000 (A1) -//7F09B520: return -JR RA -OR V0,V1,R0 ;V0=V1: #active players diff --git a/notes/GE Documentation/Gameplay and Misc/Overlays/7F09C250 - generate explosion and smoke at location.txt b/notes/GE Documentation/Gameplay and Misc/Overlays/7F09C250 - generate explosion and smoke at location.txt deleted file mode 100644 index 32da3c3..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Overlays/7F09C250 - generate explosion and smoke at location.txt +++ /dev/null @@ -1,374 +0,0 @@ -7F09C250 D0D80 generates explosions and smoke at location - accepts: A0=p->source object or NULL, A1=p->positions, A2=p->tile, A3=explosion type, SP+10=force to ground, SP+14=owner's player#, SP+18=p->room# list, SP+1C=(sets object loaded flag) -ADDIU SP,SP,FFB8 -SLL T6,A3,0x10 -SRA T7,T6,0x10 -LUI T9,8004 -SW S1,0020 (SP) -ADDIU T9,T9,0284 ;T9=80040284 -SLL T8,T7,0x6 ;T8=explody.type * 0x40: type->offset -SW S3,0028 (SP) -SW A3,0054 (SP) ;SP+54=explody.type -ADDU S1,T8,T9 ;S1=80040284+offset: p->explody.data -ADDIU AT,R0,0010 -OR A3,T7,R0 ;A3=(byte) A3 -OR S3,A1,R0 ;S3=A1: p->position -SW RA,002C (SP) -SW S2,0024 (SP) -SW S0,001C (SP) -SW A0,0048 (SP) ;SP+48=A0: p->object.data or NULL -SW A2,0050 (SP) ;SP+50=A2: p->tile -SW S1,0044 (SP) ;SP+44=S1: p->explody.data -BEQ T7,AT,7F09C2B8 ;branch if explosion type 0x10 -OR T0,R0,R0 ;T0=0: NULL pointer -ADDIU AT,R0,0001 -BEQ T7,AT,7F09C2B8 ;branch if explody type 1 -ADDIU T6,R0,0006 -LUI AT,8004 -SW T6,0170 (AT) ;6->80040170: -//7F09C2B8: search explosion buffer for an empty entry -LUI A0,8008 -LW A0,A144 (A0) ;A0=8007A144: p->explosion buffer -OR V0,R0,R0 ;V0=0 offset -OR V1,A0,R0 ;V1=A0: p->explosion buffer -//7F09C2C8: find an available entry -LW T7,0000 (V1) ;T7=explody+0: p->pos.data or NULL -BNEL T7,R0,7F09C2E0 ;branch if entry already set -ADDIU V0,V0,03E0 -BEQ R0,R0,7F09C2EC -ADDU T0,V0,A0 ;T0=8007A144+offset: p->target entry -//7F09C2DC: loop until all entries tested -ADDIU V0,V0,03E0 ;V0+=0x3E0: next entry -SLTI AT,V0,1740 ;TRUE if offset<0x1740 six entries total -BNE AT,R0,7F09C2C8 ;loop until all entries tested -ADDIU V1,V1,03E0 ;V1+=3E0: p->next entry -BEQL T0,R0,7F09C794 ;return if NULL pointer -LW RA,002C (SP) -//7F09C2F4: play sound effect -SH A3,0056 (SP) ;SP+56=A3: explody.type -JAL 7F03A430 ;remove last pos.data entry -SW T0,0040 (SP) ;SP+40=T0: p->explody.buf -LBU V1,0039 (S1) ;V1=explody.data+39: sound effect -LW T0,0040 (SP) ;T0=p->explody.buf -OR A3,V0,R0 ;A3=V0: p->pos.data source location -BLEZ V1,7F09C348 ;branch if no sound -LUI A0,8006 -SLL A1,V1,0x10 -SRA T8,A1,0x10 -OR A1,T8,R0 ;A1=(byte) SE -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -OR A2,R0,R0 ;A2=NULL -SW V0,0030 (SP) ;SP+30=p->pos.data -JAL 70008E08 ;play sound A1 -SW T0,0040 (SP) ;SP+40=T0: p->explody.buf -OR A0,V0,R0 ;A0=V0: p->SE entry -JAL 7F053A10 ;set position as source of SE -OR A1,S3,R0 ;A1=S3: p->xyz pos -LW A3,0030 (SP) ;A3=p->pos.data -LW T0,0040 (SP) ;T0=p->explody.buf -//7F09C348: fill in object position data -BEQ A3,R0,7F09C790 ;return if NULL pos.data -LW A2,0060 (SP) ;A2=SP+60: p->room# list -LBU T6,0001 (A3) ;T6=pos.data+1: state -ADDIU T9,R0,0007 -SB T9,0000 (A3) ;7->pos.data+0: type=explosion -ORI T7,T6,0002 ;T7=state|2: on-screen -SB T7,0001 (A3) ;update state -SW T0,0004 (A3) ;T0->pos.data+4: p->explody.buffer, acting as object data -LW T8,0050 (SP) ;T8=SP+50: p->tile -ADDIU A1,R0,00FF -OR S0,R0,R0 ;S0=0 -SW T8,0014 (A3) ;T8->pos.data+14: p->tile -LWC1 F4,0000 (S3) ;F4=pos+0: xpos -ADDIU T6,R0,00FF -SWC1 F4,0008 (A3) ;F4->pos.data+8: xpos -LWC1 F6,0004 (S3) ;F6=pos+4: ypos -SWC1 F6,000C (A3) ;F6->pos.data+C: ypos -LWC1 F8,0008 (S3) ;F8=pos+8: zpos -SWC1 F8,0010 (A3) ;F8->pos.data+10: zpos -LBU T9,0000 (A2) ;T9=1st room# -BEQ A1,T9,7F09C3CC ;branch if room invalid -ADDU V1,A3,R0 ;V1=A3: pos.data -ADDU V0,A2,R0 ;V0=A2: p->room list -LBU A0,0000 (A2) ;A0=room# -ADDIU S2,R0,0007 ;S2=7 8 rooms per list -//7F09C3AC: copy list of room#s -SB A0,002C (V1) ;A0->pos.data+2C: room#->list -LBU A0,0001 (V0) ;A0=next room# -ADDIU S0,S0,0001 ;S0++ count -ADDIU V1,V1,0001 ;V1++ next target -BEQ A1,A0,7F09C3CC ;quit on invalid entry -ADDIU V0,V0,0001 ;V0++ next source -BNEL S0,S2,7F09C3B0 ;loop for 8 room numbers -SB A0,002C (V1) -//7F09C3CC: set 8 to state if required -ADDU T7,A3,S0 ;T7=pos.data+count: p->next slot -SB T6,002C (T7) ;FF->final pos.data room# -LW T8,0064 (SP) ;T8=??? [SP+1C] -ADDIU S2,R0,0007 ;S2=7 -OR S0,R0,R0 ;S0=0 shrapnel bit count -BEQ T8,R0,7F09C3F4 ;branch if T8=0 -OR A0,A3,R0 ;A0=A3: p->pos.data -LBU T9,0001 (A3) ;T9=pos.data+1: state -ORI T6,T9,0008 ;state | 8: loaded? -SB T6,0001 (A3) ;update state -//7F09C3F4: wrap and activate pos.data entry -SW A3,0030 (SP) ;SP+30=A3: p->pos.data -JAL 7F03A4F0 ;wrap pos.data entries -SW T0,0040 (SP) ;SP+40=T0: p->explody.buf -JAL 7F03A404 ;4->pos.data.state -LW A0,0030 (SP) ;A0=p->pos.data -//7F09C408: initialize explosion buffer -LW T0,0040 (SP) ;T0=p->explody.buf -LW V0,0058 (SP) ;V0=SP+58: TRUE forces to ground [SP+10] -LW A3,0030 (SP) ;A3=SP+30: p->pos.data -LW T1,0048 (SP) ;T1=SP+48: [A0] -LH T7,0056 (SP) ;T7=SP+56: explody.type -ADDIU T8,R0,FFFF -SH R0,03C8 (T0) ; 0->explody.buf+3C8: -SH T8,03CA (T0) ;-1->explody.buf+3CA: -SB V0,03CD (T0) ;V0->explody.buf+3CD: forced to ground flag -SW A3,0000 (T0) ;A3->explody.buf+0: p->pos.data -SW T1,0004 (T0) ;T1->explody.buf+4: -SB T7,03CC (T0) ;T7->explody.buf+3CC: type -LW T9,005C (SP) ;T9=SP+5C: owner's player#[SP+14] -LUI AT,8005 -BEQ V0,R0,7F09C4F8 ;branch if V0=0: midair -SB T9,03CE (T0) ;T9->explody.buf+3CE: player# -//7F09C448: check for alternate position source -BEQL T1,R0,7F09C4B0 ;branch if T1 NULL -LWC1 F6,0000 (S3) -LW T6,0014 (T1) ;T6=T1+14: -BEQL T6,R0,7F09C4B0 ;branch if T6=0 -LWC1 F6,0000 (S3) -//7F09C45C: source: alternate pos.data -LWC1 F10,0008 (T1) ;F10=alt.pos.data+8: xpos -SWC1 F10,03D0 (T0) ;F10->explody.buf+3D0: xpos -LW A2,0010 (T1) ;A2=alt.pos.data+10: zpos -LW A1,0008 (T1) ;A1=alt.pos.data+8: xpos -LW A0,0014 (T1) ;A0=alt.pos.data+14: p->tile -JAL 7F0B2970 ;F0=ypos of tile A0 at (A1,A2) -SW T0,0040 (SP) ;SP+40=T0 -LUI AT,4080 -MTC1 AT,F16 -LW T0,0040 (SP) ;T0=p->explody.buf -LW T1,0048 (SP) -ADD.S F18,F0,F16 ;F18=ypos + 4.0: offset from base of tile -SWC1 F18,03D4 (T0) ;F18->explody.buf+3D4: ypos -LWC1 F4,0010 (T1) ;F4=alt.pos.data+10: zpos -SWC1 F4,03D8 (T0) ;F4->explody.buf+3D8: zpos -JAL 7F0B2FD8 ;V0=room# of tile A0 -LW A0,0014 (T1) ;A0=T1+14: p->tile -LW T0,0040 (SP) ;T0=p->explody.buf -BEQ R0,R0,7F09C500 -SH V0,03DC (T0) ;V0->explody.buf+3DC: room# -//7F09C4AC: source: use original position data and tile -LWC1 F6,0000 (S3) ;F6=pos+0: xpos -SWC1 F6,03D0 (T0) ;F6->explody.buf+3D0: xpos -LW A2,0008 (S3) ;A2=pos+8: zpos -LW A1,0000 (S3) ;A1=pos+0: xpos -SW T0,0040 (SP) ;SP+40=p->explody.buf -JAL 7F0B2970 ;F0=ypos of tile A0 at (A1,A2) -LW A0,0050 (SP) ;A0=SP+50: p->tile -LUI AT,4080 -MTC1 AT,F8 -LW T0,0040 (SP) ;T0=p->explody.buf -ADD.S F10,F0,F8 ;F10=ypos+4.0: offest from base of tile -SWC1 F10,03D4 (T0) ;F10->explody.buf+3D4: ypos -LWC1 F16,0008 (S3) ;F16=pos+8: zpos -SWC1 F16,03D8 (T0) ;F16->explody.buf+3D8: zpos -JAL 7F0B2FD8 ;V0=room# of tile A0 -LW A0,0050 (SP) ;A0=SP+50: p->tile -LW T0,0040 (SP) ;T0=p->explody.buf -BEQ R0,R0,7F09C500 -SH V0,03DC (T0) ;V0->explody.buf+3DC: room# -//7F09C4F8: -LWC1 F18,76B0 (AT) ;F18=800576B0: 999999.9 -SWC1 F18,03D0 (T0) ;F18->explody.buf+3D0: xpos -//7F09C500: grab random value -JAL 7000A450 ;V0=random# -SW T0,0040 (SP) ;SP+40=p->explody.buf -MTC1 V0,F4 -LUI AT,4F80 -BGEZ V0,7F09C524 ;branch if not negative -CVT.S.W F6,F4 ;F6=(float) rand -MTC1 AT,F8 ;F8=4294967296.0 -NOP -ADD.S F6,F6,F8 ;F6=rand+sign change -//7F09C524: compute size of explosion -LUI AT,2F80 -MTC1 AT,F10 ;F10=some miniscule value -LUI AT,3F00 -MTC1 AT,F18 ;F18=0.5 -MUL.S F16,F6,F10 ;F16=rand * ??? -LUI AT,3F80 -MTC1 AT,F8 ;F8=1.0 -LWC1 F10,0010 (S1) ;F10=explody.data+10: size -MUL.S F4,F16,F18 ;F4=F16/2 -ADD.S F6,F4,F8 ;F6=1.0 + (F16 / 2) -MUL.S F16,F6,F10 ;F16=size * randomizer -//7F09C550: get random value -JAL 7000A450 ;V0=random# -SWC1 F16,003C (SP) ;SP+3C=size -MTC1 V0,F18 -LUI AT,4F80 -BGEZ V0,7F09C574 ;branch if not negative -CVT.S.W F4,F18 ;F4=(float) random -MTC1 AT,F8 -NOP -ADD.S F4,F4,F8 ;F4=rand+sign change -//7F09C574: -LUI AT,2F80 -MTC1 AT,F6 -LUI AT,8005 -LWC1 F16,76B4 (AT) ;F16=800576B4: 2Pi -MUL.S F10,F4,F6 ;F10=rand*??? -NOP -MUL.S F12,F10,F16 ;F12=rand * value -//7F09C590: set explosion size -JAL 7F057EA0 ;F0=??? -SWC1 F12,0038 (SP) ;F12->SP+38: -LWC1 F18,003C (SP) ;F18=SP+3C: size -LW T0,0040 (SP) ;T0=p->explody.buf -MUL.S F8,F0,F18 ;F8=size * value: size.max -SWC1 F8,0014 (T0) ;F8->explody.buf+14: size.max -//7F09C5A8: -JAL 7F057EAC ;F0=??? -LWC1 F12,0038 (SP) ;F12=SP+38: degrees -LWC1 F4,003C (SP) ;F4=SP+3C: size -LW T0,0040 (SP) ;T0=p->explody.buf -ADDIU T7,R0,0001 -MUL.S F6,F0,F4 ;F6=?? * size: size.min -SH T7,001C (T0) ;1->explody.buf+1C: display frame -SWC1 F6,0018 (T0) ;F6->explody.buf+18: size.min -//7F09C5C8: fill in position for frame -LWC1 F10,0000 (S3) ;F10=pos+0: xpos -SWC1 F10,0008 (T0) ;F10->explody.buf+8: xpos -LWC1 F16,0004 (S3) ;F16=pos+4: ypos -SWC1 F16,000C (T0) ;F16->explody.buf+C: ypos -LWC1 F18,0008 (S3) ;F18=pos+8: zpos -SWC1 F18,0010 (T0) ;F18->explody.buf+10: zpos -//7F09C5E0: shrapnel -LH T8,0024 (S1) ;T8=explody.data+24: shrapnel -BLEZ T8,7F09C620 ;skip if not valid amount -NOP -//7F09C5EC: loop for each bit -LWC1 F8,0028 (S1) ;F8=explody.data+28: shrapnel.size -LW A1,002C (S1) ;A1=explody.data+2C: shrapnel.dist -LW A2,0030 (S1) ;A2=explody.data+30: shrapnel.h -LW A3,0034 (S1) ;A3=explody.data+34: shrapnel.v -OR A0,S3,R0 ;A0=S3: p->pos -JAL 7F09F254 ;generate shrapnel bit -SWC1 F8,0010 (SP) ;SP+10=shrapnel.size -LW T9,0044 (SP) ;T9=SP+44: p->explody.data -ADDIU S0,S0,0001 ;S0++ count++ -LH T6,0024 (T9) ;T6=explody.data+24: #bits -SLT AT,S0,T6 -BNEL AT,R0,7F09C5F0 ;loop for each bit -LWC1 F8,0028 (S1) -//7F09C620: multiplayer-specific -JAL 7F09A464 ;V0=# players -NOP -SLTI AT,V0,0002 -BNE AT,R0,7F09C790 ;return if solo -OR A2,R0,R0 ;A2=0 offset -LUI T5,8008 -LUI T3,8004 -ADDIU T3,T3,017C ;T3=8004017C: smoke table -ADDIU T5,T5,A140 ;T5=8007A140: p->smoke buffer -ADDIU RA,R0,1FE0 ;RA=0x1FE0 -ADDIU T4,R0,0018 ;T4=0x18 size of smoke entry -ADDIU T2,R0,0009 -ADDIU T1,R0,0008 -//7F09C654: loop and find an empty smoke entry -LW V1,0000 (T5) ;V1=8007A140: p->smoke.buf -ADDU A1,V1,A2 ;A1=smoke.buf+offset -LW T7,0000 (A1) ;T7=smoke.buf+0: p->pos.data or NULL if empty -ADDU A3,A2,V1 ;A3=smoke.buf+offset -BEQL T7,R0,7F09C6AC ;branch if empty -LW T7,0198 (A1) -LH V0,0006 (A3) ;V0=smoke.data+6: size -BEQL S2,V0,7F09C6AC ;branch if size = 7 -LW T7,0198 (A1) -LH T0,0006 (A3) ;T0=smoke.data+6: size -BEQL T1,T0,7F09C6AC ;branch if size = 8 -LW T7,0198 (A1) -BEQL T2,T0,7F09C6AC ;branch if size = 9 -LW T7,0198 (A1) -MULTU V0,T4 -MFLO T8 -ADDU T9,T3,T8 -LH T6,0000 (T9) -SH T6,0004 (A3) -LW V1,0000 (T5) -ADDU A1,V1,A2 -//7F09C6A8: -LW T7,0198 (A1) -ADDU A0,A2,V1 -BEQL T7,R0,7F09C6F8 -LW T7,0330 (A1) -LH V0,019E (A0) -ADDIU A0,A0,0198 -BEQL S2,V0,7F09C6F8 -LW T7,0330 (A1) -BEQL T1,V0,7F09C6F8 -LW T7,0330 (A1) -BEQL T2,V0,7F09C6F8 -LW T7,0330 (A1) -MULTU V0,T4 -MFLO T8 -ADDU T9,T3,T8 -LH T6,0000 (T9) -SH T6,0004 (A0) -LW V1,0000 (T5) -ADDU A1,V1,A2 -//7F09C6F4: -LW T7,0330 (A1) -ADDU A0,A2,V1 -BEQL T7,R0,7F09C744 -LW T7,04C8 (A1) -LH V0,0336 (A0) -ADDIU A0,A0,0330 -BEQL S2,V0,7F09C744 -LW T7,04C8 (A1) -BEQL T1,V0,7F09C744 -LW T7,04C8 (A1) -BEQL T2,V0,7F09C744 -LW T7,04C8 (A1) -MULTU V0,T4 -MFLO T8 -ADDU T9,T3,T8 -LH T6,0000 (T9) -SH T6,0004 (A0) -LW V1,0000 (T5) -ADDU A1,V1,A2 -//7F09C740: -LW T7,04C8 (A1) -ADDU A0,A2,V1 -BEQL T7,R0,7F09C788 -ADDIU A2,A2,0660 -LH V0,04CE (A0) -ADDIU A0,A0,04C8 -BEQL S2,V0,7F09C788 -ADDIU A2,A2,0660 -BEQL T1,V0,7F09C788 -ADDIU A2,A2,0660 -BEQL T2,V0,7F09C788 -ADDIU A2,A2,0660 -MULTU V0,T4 -MFLO T8 -ADDU T9,T3,T8 -LH T6,0000 (T9) -SH T6,0004 (A0) -//7F09C784: -ADDIU A2,A2,0660 -BNEL A2,RA,7F09C658 -LW V1,0000 (T5) -//7F09C790: return -LW RA,002C (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -LW S2,0024 (SP) -LW S3,0028 (SP) -JR RA -ADDIU SP,SP,0048 diff --git a/notes/GE Documentation/Gameplay and Misc/Overlays/7F09D5A0 - display explosion animation.txt b/notes/GE Documentation/Gameplay and Misc/Overlays/7F09D5A0 - display explosion animation.txt deleted file mode 100644 index 747dc90..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Overlays/7F09D5A0 - display explosion animation.txt +++ /dev/null @@ -1,178 +0,0 @@ -7F09D5A0 display explosion animation A0 - accepts: A0=p->, A1=p->DL, A2=??? -ADDIU SP,SP,FF70 -SW S0,001C (SP) -SW RA,003C (SP) -SW S7,0038 (SP) -SW S6,0034 (SP) -SW S5,0030 (SP) -SW S4,002C (SP) -SW S3,0028 (SP) -SW S2,0024 (SP) -SW S1,0020 (SP) -LBU S1,002C (A0) -OR S0,A0,R0 ;S0=A0: -LW S5,0004 (A0) ;S5=A0+4: p->explody.buf -OR S2,A2,R0 ;S2=A2: -OR S4,A1,R0 ;S4=A1: p->DL -JAL 7F0BCA14 -OR A0,S1,R0 ;A0=S1: -BNE S2,R0,7F09D5F4 -OR S6,V0,R0 -BEQ R0,R0,7F09D800 ;return -OR V0,S4,R0 ;V0=S4: p->DL -//7F09D5F4: -OR A0,S0,R0 ;A0=S0: -JAL 7F054A64 -ADDIU A1,SP,0070 ;A1=SP+70: p->buffer -BLEZ V0,7F09D62C -NOP -LWC1 F4,007C (SP) -OR A0,S4,R0 ;A0=S4: p->DL -LW A1,0070 (SP) -LW A2,0074 (SP) -LW A3,0078 (SP) -JAL 7F0B4FF4 -SWC1 F4,0010 (SP) -BEQ R0,R0,7F09D638 -OR S4,V0,R0 ;S4=V0: p->DL -//7F09D62C: -JAL 7F0B4FB4 -OR A0,S4,R0 ;A0=S4: p->DL -OR S4,V0,R0 ;S4=V0: p->DL -//7F09D638: -OR V0,S4,R0 ;V0=S4: p->DL -LUI T7,0001 -ORI T7,T7,3000 ;T7=00013000: fog, cull front, cull back -ADDIU S4,S4,0008 ;S4+=8: p->DL -LUI T6,B600 -LUI T8,0103 -SW T6,0000 (V0) ;DL+0= cleargeometrymode.u -SW T7,0004 (V0) ;DL+4= cleargeometrymode.l: fog, cull back, cull front -ORI T8,T8,0040 ;T8=01030040 -OR S0,S4,R0 ;S0=S4: p->DL -SW T8,0000 (S0) ;DL+0= matrix.u: projection, size=0x40? -JAL 7F078394 ;V0= BONDdata+10E0 -ADDIU S4,S4,0008 ;S4+=8: next DL -JAL 7000E8B0 ;V0= offset corresponding to address A0 -OR A0,V0,R0 -SW V0,0004 (S0) ;DL+4= matrix.l: address -OR A0,S4,R0 ;A0=S4: p->DL -JAL 7F0BC9C4 -OR A1,S1,R0 -LUI T9,BC00 -ORI T9,T9,0806 -SW T9,0000 (V0) ;DL+0= moveword.u: matrix, -LUI A0,8009 -LW A0,D0B4 (A0) ;A0=8008D0B4: p->global image bank -OR S0,V0,R0 ;S0=V0: p->DL -JAL 7000E8B0 ;V0= offset corresponding to address A0 -ADDIU S4,V0,0008 ;S4=V0+8: p->next DL -LUI S7,8004 -LUI S3,8004 -SW V0,0004 (S0) ;DL+4= moveword.l: address -ADDIU S3,S3,0284 ;S3=80040284: explody.data -ADDIU S7,S7,07FC ;S7=800407FC: explosion frame display list offsets -ADDIU S2,R0,000E ;S2=0xE -//7F09D6BC: -OR V0,S4,R0 ;V0=S4: p->DL -LUI T0,0600 -SW T0,0000 (V0) ;DL+0= displaylist.u: push DL -LW T1,0000 (S7) -ADDIU S4,S4,0008 ;S4+=4: next DL op -OR S1,R0,R0 ;S1=0 count -OR S0,S5,R0 ;S0=S5: p->explody.buf -SW T1,0004 (V0) ;DL+4= displaylist.l: -//7F09D6DC: display visible frames -LH V0,001C (S0) ;V0=explody.buf+1C: frame 1 state -BLEZ V0,7F09D72C ;skip if frame not active -ADDIU T2,V0,FFFF ;T2=state-1 -MTC1 T2,F6 -LB T3,03CC (S5) ;T3=explody.buf+3CC: explody.type -ADDIU A0,S0,0008 -CVT.S.W F8,F6 ;F8=(float) state-1 -SLL T4,T3,0x6 ;T4=type*0x40: offset to entry -ADDU T5,S3,T4 ;T5=explody.data+offset -LWC1 F10,0020 (T5) ;F10=explody.data+20: animation speed -OR A1,S4,R0 ;A1=S4: p->DL -DIV.S F16,F8,F10 ;F16=(state-1)/speed -TRUNC.W.S F18,F16 -MFC1 T7,F18 ;T7=(state-1)/speed -NOP -BNEL S2,T7,7F09D730 ;branch if not 0xE -ADDIU S1,S1,0018 -JAL 7F09D82C -OR A2,S6,R0 ;A2=S6: -OR S4,V0,R0 -//7F09D72C: loop for each frame -ADDIU S1,S1,0018 ;S1+=18: frame++ -SLTI AT,S1,03C0 ;TRUE if count<0x3C0 -BNE AT,R0,7F09D6DC ;loop for each frame -ADDIU S0,S0,0018 ;S0+=18: p->next explody.buf frame -ADDIU S2,S2,FFFF ;S2-- -BGEZ S2,7F09D6BC ;run for each image -ADDIU S7,S7,FFFC ;S7-=4: o->next frame DL -//7F09D748: -LUI T8,0103 -ORI T8,T8,0040 ;T8=01030040 -OR S2,S4,R0 -SW T8,0000 (S2) ;DL+0= matrix.u: projection, size? -JAL 7F078374 ;V0= BONDdata+10D8 -ADDIU S4,S4,0008 ;S4+=8: next DL -JAL 7000E8B0 ;V0= offset corresponding to address A0 -OR A0,V0,R0 -SW V0,0004 (S2) ;DL+4= matrix.l: address -LB T9,03CC (S5) ;T9=explody.buf+3CC: explody.type -LUI AT,4170 -MTC1 AT,F6 -SLL T0,T9,0x6 ;T0=type * 0x40: offset -ADDU T1,S3,T0 ;T1=explody.data+offset: p->explody.data for type -LWC1 F4,0020 (T1) ;F4=explody.data+20: speed -ADDIU V0,R0,03C0 ;V0=0x3C0: size of frame data -OR S1,R0,R0 ;S1=0 count -MUL.S F8,F4,F6 ;F8=speed * 15.0 -OR S0,S5,R0 ;S0=S5: p->explody.buf -TRUNC.W.S F10,F8 -MFC1 V1,F10 ;V1=speed * 15 -NOP -//7F09D7A0: test if next four frames are disappearing -LH T3,001C (S0) ;T3=explody.buf+1C: playing flag -ADDIU S1,S1,0060 ;S1+=60: +4 frames -SLT AT,V1,T3 ;TRUE if speed*15 < flag -BEQL AT,R0,7F09D7BC ;branch if not displayed -LH T4,0034 (S0) -SH R0,001C (S0) ;0->display flag -//7F09D7B8: -LH T4,0034 (S0) ;T4=explody.buf+34: next playing flag -SLT AT,V1,T4 ;TRUE if speed*15 < flag -BEQL AT,R0,7F09D7D0 ;branch if not displayed -LH T5,004C (S0) -SH R0,0034 (S0) ;0->display flag -//7F09D7CC: -LH T5,004C (S0) ;T5=explody.buf+4C: next playing flag -SLT AT,V1,T5 ;TRUE if speed*15 < flag -BEQL AT,R0,7F09D7E4 ;branch if not displayed -LH T6,0064 (S0) -SH R0,004C (S0) ;0->display flag -//7F09D7E0: -LH T6,0064 (S0) ;T6=explody.buf+64: next playing flag -SLT AT,V1,T6 ;TRUE if speed*15 < flag -BEQ AT,R0,7F09D7F4 ;branch if not displayed -NOP -SH R0,0064 (S0) -//7F09D7F4: -BNE S1,V0,7F09D7A0 ;loop for the whole set -ADDIU S0,S0,0060 ;S0+=60: p->next four explody.frame entries -OR V0,S4,R0 ;V0=S4: p->DL -//7F09D800: return -LW RA,003C (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -LW S2,0024 (SP) -LW S3,0028 (SP) -LW S4,002C (SP) -LW S5,0030 (SP) -LW S6,0034 (SP) -LW S7,0038 (SP) -JR RA -ADDIU SP,SP,0090 diff --git a/notes/GE Documentation/Gameplay and Misc/Overlays/7F0A027C - generate scorch marks.txt b/notes/GE Documentation/Gameplay and Misc/Overlays/7F0A027C - generate scorch marks.txt deleted file mode 100644 index e224b79..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Overlays/7F0A027C - generate scorch marks.txt +++ /dev/null @@ -1,592 +0,0 @@ -scorch entries: -0x0 2 room# (-1 if invalid) -0x2 2 RESERVED -0x4 4 (float) x -0x8 4 (float) y -0xC 4 (float) z -0x10 4 (float) scale -0x14 40 four vertices to map image - - -7F0A027C D4DAC generate scorch marks - accepts: A0=p->xyz position, A1=(float) scale(?), A2= -ADDIU SP,SP,FF98 -LUI T6,8004 -SW RA,0034 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -SDC1 F20,0018 (SP) -SW A2,0070 (SP) ;SP+72= A2 f/caller -ADDIU T6,T6,0920 -LW AT,0000 (T6) ;AT=80040920: -ADDIU S3,SP,0058 -MTC1 A1,F20 -SW AT,0000 (S3) -LW T9,0004 (T6) -OR S4,A0,R0 -SW T9,0004 (S3) -LW AT,0008 (T6) -SW AT,0008 (S3) -LW T9,000C (T6) -JAL 7000A450 ;V0= random number -SW T9,000C (S3) -MTC1 V0,F4 -LUI AT,4F80 -BGEZ V0,7F0A02F4 -CVT.S.W F6,F4 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -//7F0A02F4: -LUI AT,2F80 -MTC1 AT,F10 -LUI AT,8005 -LWC1 F18,7704 (AT) ;F18= 80057704: -MUL.S F16,F6,F10 -NOP -MUL.S F4,F16,F18 -JAL 7000A450 ;V0= random number -SWC1 F4,0054 (SP) -ADDIU AT,R0,0050 -DIVU V0,AT -MFHI T0 -ADDIU T1,R0,00FF -SUBU T2,T1,T0 ;T2= FF - (0-50) -SB T2,004B (SP) ;SP+4B= alpha -JAL 7F0BCA14 -LH A0,0072 (SP) -JAL 7F09A464 ;V0= # players -OR S0,V0,R0 -SLTI AT,V0,0002 -BEQ AT,R0,7F0A0A90 ;return if multiplayer -//7F0A0348: -LUI AT,4348 -MTC1 AT,F0 -NOP -C.LT.S F0,F20 -NOP -BC1F 7F0A0368 -NOP -MOV.S F20,F0 -//7F0A0368: -JAL 7000A450 ;V0= random number -NOP -MTC1 V0,F8 -BGEZ V0,7F0A038C -CVT.S.W F6,F8 -LUI AT,4F80 -MTC1 AT,F10 -NOP -ADD.S F6,F6,F10 -//7F0A038C: -LUI AT,2F80 -MTC1 AT,F16 -LUI AT,8005 -LWC1 F4,7708 (AT) ;F4= 80057708: -MUL.S F18,F6,F16 -LUI AT,8005 -LWC1 F10,770C (AT) ;F10= 8005770C: -MUL.S F8,F4,F18 -ADD.S F6,F10,F8 -MUL.S F20,F20,F6 -JAL 7F0B483C -NOP -LWC1 F16,0000 (S4) -LWC1 F18,0000 (S0) -MUL.S F4,F16,F0 -SUB.S F10,F4,F18 -JAL 7F0B483C -SWC1 F10,0000 (S4) -//7F0A03D4: -LWC1 F8,0004 (S4) -LWC1 F16,0004 (S0) -MUL.S F6,F8,F0 -SUB.S F4,F6,F16 -JAL 7F0B483C -SWC1 F4,0004 (S4) -//7F0A03EC: -LWC1 F18,0008 (S4) -LWC1 F8,0008 (S0) -MUL.S F10,F18,F0 -SUB.S F6,F10,F8 -JAL 7F0B483C -SWC1 F6,0008 (S4) -//7F0A0404: -MUL.S F20,F20,F0 -JAL 7F057EA0 -LWC1 F12,0054 (SP) -MUL.S F16,F0,F20 -LWC1 F12,0054 (SP) -JAL 7F057EAC -SWC1 F16,0050 (SP) -//7F0A0420: -LUI S2,8004 -ADDIU S2,S2,0804 -LW T5,0000 (S2) ;T5=cur.scorch -ADDIU S1,R0,0058 -MUL.S F2,F0,F20 -LUI S0,8008 -MULTU T5,S1 -ADDIU S0,S0,A150 -LW T4,0000 (S0) ;T4=8007A150: p->scorching buffer -LH T3,0072 (SP) -SWC1 F2,004C (SP) -MFLO T8 -ADDU T7,T4,T8 -SH T3,0000 (T7) ;scorch+0: room -//7F0A0458: -LW T9,0000 (S2) ;T9=cur.scorch -LW T6,0000 (S0) -LWC1 F4,0000 (S4) ;F4=A0+0: xpos -MULTU T9,S1 -MFLO T1 -ADDU T0,T6,T1 -SWC1 F4,0004 (T0) ;scorch+4 = xpos -//7F0A0474: -LW T5,0000 (S2) ;T5=cur.scorch -LW T2,0000 (S0) -LWC1 F18,0004 (S4) ;F18=A0+4: ypos -MULTU T5,S1 -MFLO T4 -ADDU T8,T2,T4 -SWC1 F18,0008 (T8) ;scorch+8 = ypos -//7F0A0490: -LW T7,0000 (S2) ;T7=cur.scorch -LW T3,0000 (S0) -LWC1 F10,0008 (S4) ;F10=A0+8: zpos -MULTU T7,S1 -MFLO T9 -ADDU T6,T3,T9 -SWC1 F10,000C (T6) ;scorch+C = zpos -//7F0A04AC: -LW T0,0000 (S2) ;T0=cur.scorch -LW T1,0000 (S0) -MULTU T0,S1 -MFLO T5 -ADDU T2,T1,T5 -SWC1 F20,0010 (T2) ;scorch+10= A1 f/caller: scale(?) -//7F0A04C4: copy to vtx[0] -LW T8,0000 (S2) ;T8=cur.scorch -LW T4,0000 (S0) -LW AT,0000 (S3) -MULTU T8,S1 -MFLO T7 -ADDU T3,T4,T7 -SW AT,0018 (T3) -LW T6,0004 (S3) -SW T6,001C (T3) -LW AT,0008 (S3) -SW AT,0020 (T3) -LW T6,000C (S3) -SW T6,0024 (T3) -//7F0A04F8: copy to vtx[1] -LW T1,0000 (S2) ;T1=cur.scorch -LW T0,0000 (S0) -LW AT,0000 (S3) -MULTU T1,S1 -MFLO T5 -ADDU T2,T0,T5 -SW AT,0028 (T2) -LW T4,0004 (S3) -SW T4,002C (T2) -LW AT,0008 (S3) -SW AT,0030 (T2) -LW T4,000C (S3) -SW T4,0034 (T2) -//7F0A052C: copy to vtx[2] -LW T9,0000 (S2) ;T9=cur.scorch -LW T7,0000 (S0) -LW AT,0000 (S3) -MULTU T9,S1 -MFLO T3 -ADDU T6,T7,T3 -SW AT,0038 (T6) -LW T0,0004 (S3) -SW T0,003C (T6) -LW AT,0008 (S3) -SW AT,0040 (T6) -LW T0,000C (S3) -SW T0,0044 (T6) -//7F0A0560: copy to vtx[3] -LW T8,0000 (S2) ;T8=cur.scorch -LW T5,0000 (S0) -LW AT,0000 (S3) -MULTU T8,S1 -MFLO T2 -ADDU T4,T5,T2 -SW AT,0048 (T4) -LW T7,0004 (S3) -SW T7,004C (T4) -LW AT,0008 (S3) -SW AT,0050 (T4) -LW T7,000C (S3) -LUI AT,3F00 -MTC1 AT,F10 -SW T7,0054 (T4) -//7F0A059C: -LW T0,0000 (S2) ;T0=cur.scorch -LWC1 F6,0050 (SP) -LWC1 F8,0000 (S4) -MULTU T0,S1 -LW T6,0000 (S0) -ADD.S F16,F8,F6 -TRUNC.W.S F4,F16 -MFC1 T1,F4 -MFLO T8 -ADDU T5,T6,T8 -SH T1,0018 (T5) ;set vtx[0].x -//7F0A05C8: -LW T7,0000 (S2) ;T7=cur.scorch -LWC1 F18,0004 (S4) -LW T4,0000 (S0) -MULTU T7,S1 -ADD.S F8,F18,F10 -LUI T6,8009 -TRUNC.W.S F6,F8 -MFC1 T9,F6 -MFLO T3 -ADDU T0,T4,T3 -SH T9,001A (T0) ;set vtx[0].y -//7F0A05F4: -LW T5,0000 (S2) ;T5=cur.scorch -LWC1 F16,0008 (S4) -LW T1,0000 (S0) -MULTU T5,S1 -ADD.S F4,F16,F2 -TRUNC.W.S F18,F4 -MFC1 T8,F18 -MFLO T2 -ADDU T7,T1,T2 -SH T8,001C (T7) ;set vtx[0].z -//7F0A061C: -LW T3,0000 (S2) ;T3=cur.scorch -LW T4,0000 (S0) -MULTU T3,S1 -MFLO T9 -ADDU T0,T4,T9 -SH R0,0020 (T0) ;set vtx[0].u -//7F0A0634: -LW T8,0000 (S2) ;T8=cur.scorch -LW T6,D0B8 (T6) -LW T2,0000 (S0) -MULTU T8,S1 -LBU T5,0004 (T6) -SLL T1,T5,0x5 -MFLO T7 -ADDU T3,T2,T7 -JAL 7000A450 ;V0= random number -SH T1,0022 (T3) ;set vtx[0].v -//7F0A065C: -ADDIU AT,R0,0032 -DIVU V0,AT -MFHI S3 ;S3= rand % 32: grey -LW T9,0000 (S2) ;T9=cur.scorch -LW T4,0000 (S0) -LWC1 F20,004C (SP) -MULTU T9,S1 -LUI AT,3F00 -MTC1 AT,F4 -MFLO T0 -ADDU T6,T4,T0 -SB S3,0026 (T6) ;set vtx[0].blue -//7F0A068C: -LW T8,0000 (S2) ;T8=cur.scorch -LW T5,0000 (S0) -MULTU T8,S1 -MFLO T2 -ADDU T7,T5,T2 -SB S3,0025 (T7) ;set vtx[0].green -//7F0A06A4: -LW T3,0000 (S2) ;T3=cur.scorch -LW T1,0000 (S0) -MULTU T3,S1 -MFLO T9 -ADDU T4,T1,T9 -SB S3,0024 (T4) ;set vtx[0].red -//7F0A06BC: -LW T8,0000 (S2) ;T8=cur.scorch -LW T6,0000 (S0) -LBU T0,004B (SP) -MULTU T8,S1 -MFLO T5 -ADDU T2,T6,T5 -SB T0,0027 (T2) ;set vtx[0].alpha -//7F0A06D8: -LW T9,0000 (S2) ;T9=cur.scorch -LWC1 F10,0000 (S4) -LW T1,0000 (S0) -MULTU T9,S1 -ADD.S F8,F10,F20 -TRUNC.W.S F6,F8 -MFC1 T3,F6 -MFLO T4 -ADDU T8,T1,T4 -SH T3,0028 (T8) ;set vtx[1].x -//7F0A0700: -LW T2,0000 (S2) ;T2=cur.scorch -LWC1 F16,0004 (S4) -LW T0,0000 (S0) -MULTU T2,S1 -ADD.S F18,F16,F4 -TRUNC.W.S F10,F18 -MFC1 T5,F10 -MFLO T7 -ADDU T9,T0,T7 -SH T5,002A (T9) ;set vtx[1].y -//7F0A0728: -LW T8,0000 (S2) ;T8=cur.scorch -LWC1 F6,0050 (SP) -LWC1 F8,0008 (S4) -MULTU T8,S1 -LW T3,0000 (S0) -SUB.S F16,F8,F6 -TRUNC.W.S F4,F16 -MFC1 T4,F4 -MFLO T6 -ADDU T2,T3,T6 -SH T4,002C (T2) ;set vtx[1].z -//7F0A0754: -LW T7,0000 (S2) ;T7=cur.scorch -LW T0,0000 (S0) -MULTU T7,S1 -MFLO T5 -ADDU T9,T0,T5 -SH R0,0030 (T9) ;set vtx[1].u -//7F0A076C: -LW T8,0000 (S2) ;T8=cur.scorch -LW T1,0000 (S0) -MULTU T8,S1 -MFLO T3 -ADDU T6,T1,T3 -JAL 7000A450 ;V0= random number -SH R0,0032 (T6) ;set vtx[1].v -//7F0A0788: -ADDIU AT,R0,0032 -DIVU V0,AT -MFHI S3 -LW T2,0000 (S2) ;T2=cur.scorch -LW T4,0000 (S0) -LUI AT,3F00 -MULTU T2,S1 -MTC1 AT,F4 -MFLO T7 -ADDU T0,T4,T7 -SB S3,0036 (T0) ;set vtx[1].blue -//7F0A07B4: -LW T9,0000 (S2) ;T9=cur.scorch -LW T5,0000 (S0) -MULTU T9,S1 -MFLO T8 -ADDU T1,T5,T8 -SB S3,0035 (T1) ;set vtx[1].green -//7F0A07CC: -LW T6,0000 (S2) ;T6=cur.scorch -LW T3,0000 (S0) -MULTU T6,S1 -MFLO T2 -ADDU T4,T3,T2 -SB S3,0034 (T4) ;set vtx[1].red -//7F0A07E4: -LW T9,0000 (S2) ;T9=cur.scorch -LW T0,0000 (S0) -LBU T7,004B (SP) -MULTU T9,S1 -MFLO T5 -ADDU T8,T0,T5 -SB T7,0037 (T8) ;set vtx[1].alpha -//7F0A0800: -LW T2,0000 (S2) ;T2=cur.scorch -LWC1 F10,0050 (SP) -LWC1 F18,0000 (S4) -MULTU T2,S1 -LW T3,0000 (S0) -SUB.S F8,F18,F10 -TRUNC.W.S F6,F8 -MFC1 T6,F6 -MFLO T4 -ADDU T9,T3,T4 -SH T6,0038 (T9) ;set vtx[2].x -//7F0A082C: -LW T8,0000 (S2) ;T8=cur.scorch -LWC1 F16,0004 (S4) -LW T7,0000 (S0) -MULTU T8,S1 -ADD.S F18,F16,F4 -TRUNC.W.S F10,F18 -MFC1 T5,F10 -MFLO T1 -ADDU T2,T7,T1 -SH T5,003A (T2) ;set vtx[2].y -//7F0A0854: -LW T9,0000 (S2) ;T9=cur.scorch -LWC1 F8,0008 (S4) -LW T6,0000 (S0) -MULTU T9,S1 -SUB.S F6,F8,F20 -LUI T7,8009 -TRUNC.W.S F16,F6 -MFC1 T4,F16 -MFLO T0 -ADDU T8,T6,T0 -SH T4,003C (T8) ;set vtx[2].z -//7F0A0880: -LW T3,0000 (S2) ;T3=cur.scorch -LW T7,D0B8 (T7) -LW T2,0000 (S0) -MULTU T3,S1 -LBU T1,0005 (T7) -SLL T5,T1,0x5 -MFLO T9 -ADDU T6,T2,T9 -SH T5,0040 (T6) ;set vtx[2].u -//7F0A08A4: -LW T4,0000 (S2) ;T4=cur.scorch -LW T0,0000 (S0) -MULTU T4,S1 -MFLO T8 -ADDU T7,T0,T8 -JAL 7000A450 ;V0= random number -SH R0,0042 (T7) ;set vtx[2].v -//7F0A08C0: -ADDIU AT,R0,0032 -DIVU V0,AT -MFHI S3 -LW T3,0000 (S2) ;T3=cur.scorch -LW T1,0000 (S0) -LUI AT,3F00 -MULTU T3,S1 -MTC1 AT,F6 -MFLO T2 -ADDU T9,T1,T2 -SB S3,0046 (T9) ;set vtx[2].blue -//7F0A08EC: -LW T6,0000 (S2) ;T6=cur.scorch -LW T5,0000 (S0) -MULTU T6,S1 -MFLO T4 -ADDU T0,T5,T4 -SB S3,0045 (T0) ;set vtx[2].green -//7F0A0904: -LW T7,0000 (S2) ;T7=cur.scorch -LW T8,0000 (S0) -MULTU T7,S1 -MFLO T3 -ADDU T1,T8,T3 -SB S3,0044 (T1) ;set vtx[2].red -//7F0A091C: -LW T6,0000 (S2) ;T6=cur.scorch -LW T9,0000 (S0) -LBU T2,004B (SP) -MULTU T6,S1 -MFLO T5 -ADDU T4,T9,T5 -SB T2,0047 (T4) ;set vtx[2].alpha -//7F0A0938: -LW T3,0000 (S2) ;T3=cur.scorch -LWC1 F4,0000 (S4) -LW T8,0000 (S0) -MULTU T3,S1 -SUB.S F18,F4,F20 -TRUNC.W.S F10,F18 -MFC1 T7,F10 -MFLO T1 -ADDU T6,T8,T1 -SH T7,0048 (T6) ;set vtx[3].x -//7F0A0960: -LW T4,0000 (S2) ;T4=cur.scorch -LWC1 F8,0004 (S4) -LW T2,0000 (S0) -MULTU T4,S1 -ADD.S F16,F8,F6 -TRUNC.W.S F4,F16 -MFC1 T5,F4 -MFLO T0 -ADDU T3,T2,T0 -SH T5,004A (T3) ;set vtx[3].y -//7F0A0988: -LW T6,0000 (S2) ;T6=cur.scorch -LWC1 F10,0050 (SP) -LWC1 F18,0008 (S4) -MULTU T6,S1 -LW T7,0000 (S0) -ADD.S F8,F18,F10 -LUI T2,8009 -TRUNC.W.S F6,F8 -MFC1 T1,F6 -MFLO T9 -ADDU T4,T7,T9 -SH T1,004C (T4) ;set vtx[3].z -//7F0A09B8: -LW T8,0000 (S2) ;T8=cur.scorch -LW T2,D0B8 (T2) -LW T3,0000 (S0) -MULTU T8,S1 -LBU T0,0004 (T2) -LUI T9,8009 -SLL T5,T0,0x5 -MFLO T6 -ADDU T7,T3,T6 -SH T5,0050 (T7) ;set vtx[3].u -//7F0A09E0: -LW T0,0000 (S2) ;T0=cur.scorch -LW T9,D0B8 (T9) -LW T2,0000 (S0) -MULTU T0,S1 -LBU T1,0005 (T9) -SLL T4,T1,0x5 -MFLO T8 -ADDU T3,T2,T8 -JAL 7000A450 ;V0= random number -SH T4,0052 (T3) ;set vtx[3].v -//7F0A0A08: -ADDIU AT,R0,0032 -DIVU V0,AT -MFHI S3 -LW T5,0000 (S2) ;T5=cur.scorch -LW T6,0000 (S0) -MULTU T5,S1 -MFLO T7 -ADDU T9,T6,T7 -SB S3,0056 (T9) ;set vtx[3].blue -//7F0A0A2C: -LW T0,0000 (S2) ;T0=cur.scorch -LW T1,0000 (S0) -MULTU T0,S1 -MFLO T2 -ADDU T8,T1,T2 -SB S3,0055 (T8) ;set vtx[3].green -//7F0A0A44: -LW T3,0000 (S2) ;T3=cur.scorch -LW T4,0000 (S0) -MULTU T3,S1 -MFLO T5 -ADDU T6,T4,T5 -SB S3,0054 (T6) ;set vtx[3].red -//7F0A0A5C: -LW T0,0000 (S2) ;T0=cur.scorch -LW T9,0000 (S0) -LBU T7,004B (SP) -MULTU T0,S1 -MFLO T1 -ADDU T2,T9,T1 -SB T7,0057 (T2) ;set vtx[3].alpha -//7F0A0A78: advance scorch# to next index -LW T8,0000 (S2) ;T8=cur.scorch -ADDIU T3,T8,0001 -SLTI AT,T3,0014 -BNE AT,R0,7F0A0A90 ;wrap around if necessary -SW T3,0000 (S2) -SW R0,0000 (S2) -//7F0A0A90: return -LW RA,0034 (SP) -LDC1 F20,0018 (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -LW S3,002C (SP) -LW S4,0030 (SP) -JR RA -ADDIU SP,SP,0068 diff --git a/notes/GE Documentation/Gameplay and Misc/Overlays/7F0A108C - generate bullet impacts.txt b/notes/GE Documentation/Gameplay and Misc/Overlays/7F0A108C - generate bullet impacts.txt deleted file mode 100644 index 9a70ca0..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Overlays/7F0A108C - generate bullet impacts.txt +++ /dev/null @@ -1,704 +0,0 @@ -impact entries: -0x0 2 room# -0x2 2 image index within impact image bank -0x4 4 -0x8 10x4 4 vertex entries -0x48 4 -0x4C 1 -0x4D 1 -0x4E 2 RESERVED - -7F0A108C D5BBC generate bullet impacts - accepts: A0=p->xyz positions, A1=, A2=image index, A3=room#, SP+10=, SP+14=, SP+18= -ADDIU SP,SP,FF10 -LUI T6,8004 -SW RA,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A2,00F8 (SP) ;SP+FA = A2: image -SW A3,00FC (SP) ;SP+FE = A3: room# -ADDIU T6,T6,0930 -LW AT,0000 (T6) ;AT= 80040930+0: default vtx.x | vtx.y -ADDIU S5,SP,00E0 -OR S1,A0,R0 ;S1=A0: p->xyz -SW AT,0000 (S5) -LW T9,0004 (T6) ;T9= 80040930+4: default vtx.z | vtx.fill -OR S0,A1,R0 ;S0=A1: -ADDIU A0,R0,000F ;A0= cheat 0F: paintball -SW T9,0004 (S5) -LW AT,0008 (T6) ;AT= 80040930+8: default vtx.u | vtx.v -SW AT,0008 (S5) -LW T9,000C (T6) ;T9= 80040930+C: default vtx.rgba -JAL 7F0927BC ;V0= TRUE if cheat A0 activated for current player -SW T9,000C (S5) -BEQ V0,R0,7F0A1104 ;branch if paintball inactive -LUI T2,8004 -//7F0A10FC: replace with the paintball impact -ADDIU T0,R0,0010 -SH T0,00FA (SP) ;SP+FA= 10: paintball impact -//7F0A1104: -LWC1 F4,0000 (S1) -LH S4,00FA (SP) ;S4= img index -ADDIU T2,T2,080C -SWC1 F4,00A0 (SP) ;SP+A0= xpos -LWC1 F6,0004 (S1) -SLL T1,S4,0x2 -SUBU T1,T1,S4 -SWC1 F6,00A4 (SP) ;SP+A4= ypos -LWC1 F8,0008 (S1) -SLL S4,T1,0x2 -ADDU T3,S4,T2 ;T3= 8004080C + (img# * C): -SW T3,0050 (SP) ;SP+50 = p->img.appl -SWC1 F8,00A8 (SP) ;SP+A8= zpos -LWC1 F10,0000 (T3) -MTC1 R0,F16 -SWC1 F10,009C (SP) ;SP+9C= width -LWC1 F4,0004 (T3) -SWC1 F4,0098 (SP) ;SP+98= height -//7F0A114C: -LWC1 F14,0000 (S0) -C.EQ.S F16,F14 -NOP -BC1F 7F0A1194 -NOP -LWC1 F6,0008 (S0) -LUI AT,3F80 -C.EQ.S F16,F6 -NOP -BC1F 7F0A1194 -NOP -MTC1 AT,F0 -SWC1 F16,00B8 (SP) -SWC1 F16,00B4 (SP) -SWC1 F16,00BC (SP) -SWC1 F0,00B0 (SP) -BEQ R0,R0,7F0A1224 -SWC1 F0,00C4 (SP) -//7F0A1194: -MUL.S F8,F14,F14 -LWC1 F2,0004 (S0) -LWC1 F0,0008 (S0) -MUL.S F10,F2,F2 -ADD.S F4,F8,F10 -MUL.S F6,F0,F0 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F6,F4 -LWC1 F8,0000 (S0) -LWC1 F6,0008 (S0) -LWC1 F10,0004 (S0) -DIV.S F14,F8,F0 -DIV.S F16,F6,F0 -SWC1 F14,00DC (SP) -MUL.S F4,F14,F14 -DIV.S F18,F10,F0 -SWC1 F16,00D4 (SP) -MUL.S F8,F16,F16 -ADD.S F12,F4,F8 -JAL 7001F7E0 ;F0= square root of F12 -SWC1 F18,00D8 (SP) -LWC1 F14,00DC (SP) -LWC1 F16,00D4 (SP) -LWC1 F18,00D8 (SP) -DIV.S F2,F14,F0 -NEG.S F4,F0 -SWC1 F4,00B4 (SP) -DIV.S F12,F16,F0 -MTC1 R0,F16 -MUL.S F6,F18,F2 -NEG.S F10,F2 -SWC1 F10,00BC (SP) -SWC1 F6,00B8 (SP) -MUL.S F8,F18,F12 -SWC1 F12,00C4 (SP) -SWC1 F8,00B0 (SP) -//7F0A1224: -LW V0,0100 (SP) -BEQ V0,R0,7F0A133C -NOP -LW S0,0004 (V0) -LWC1 F10,00C4 (SP) -LB T7,0107 (SP) -LW T5,0014 (S0) -LWC1 F6,00BC (SP) -LWC1 F4,00B8 (SP) -LW T8,000C (T5) -SWC1 F10,0078 (SP) -LWC1 F8,00B4 (SP) -LWC1 F10,00B0 (SP) -SLL T6,T7,0x6 -ADDU S1,T8,T6 -SWC1 F16,007C (SP) -OR A0,S1,R0 -ADDIU A1,SP,0078 -SWC1 F6,0080 (SP) -SWC1 F4,006C (SP) -SWC1 F8,0070 (SP) -JAL 7F0583D8 -SWC1 F10,0074 (SP) -OR A0,S1,R0 -JAL 7F0583D8 -ADDIU A1,SP,006C -LWC1 F0,0078 (SP) -LWC1 F2,007C (SP) -LWC1 F14,0080 (SP) -MUL.S F6,F0,F0 -NOP -MUL.S F4,F2,F2 -ADD.S F8,F6,F4 -MUL.S F10,F14,F14 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F10,F8 -LWC1 F2,006C (SP) -LWC1 F14,0070 (SP) -LWC1 F16,0074 (SP) -MUL.S F6,F2,F2 -SWC1 F0,0088 (SP) -MUL.S F4,F14,F14 -ADD.S F10,F6,F4 -MUL.S F8,F16,F16 -JAL 7001F7E0 ;F0= square root of F12 -ADD.S F12,F8,F10 -LWC1 F6,009C (SP) -LWC1 F4,0088 (SP) -LWC1 F10,0098 (SP) -LW T9,0050 (SP) -DIV.S F8,F6,F4 -DIV.S F6,F10,F0 -SWC1 F8,009C (SP) -SWC1 F6,0098 (SP) -//7F0A12FC: -LBU T0,000A (T9) ;T0= img.appl+A: -SLTI AT,T0,0002 -BEQL AT,R0,7F0A1330 ;branch if 0 -LBU T4,0002 (S0) -LBU T1,0009 (T9) ;T1= img.appl+9 -ADDIU AT,R0,0002 -BNEL T1,AT,7F0A1330 ;branch if not 2 -LBU T4,0002 (S0) -LBU T2,0002 (S0) -ORI T3,T2,0002 -BEQ R0,R0,7F0A13B0 -SB T3,0002 (S0) -//7F0A132C: -LBU T4,0002 (S0) -ORI T5,T4,0001 -BEQ R0,R0,7F0A13B0 -SB T5,0002 (S0) -//7F0A133C: -JAL 7F0BCA14 -LH A0,00FE (SP) ;A0= room# -JAL 7F0B483C ;F0= [800413F4] -OR S0,V0,R0 -LWC1 F4,00A0 (SP) -LWC1 F10,0000 (S0) -MUL.S F8,F4,F0 -SUB.S F6,F8,F10 -JAL 7F0B483C ;F0= [800413F4] -SWC1 F6,00A0 (SP) -LWC1 F4,00A4 (SP) -LWC1 F10,0004 (S0) -MUL.S F8,F4,F0 -SUB.S F6,F8,F10 -JAL 7F0B483C ;F0= [800413F4] -SWC1 F6,00A4 (SP) -LWC1 F4,00A8 (SP) -LWC1 F10,0008 (S0) -MUL.S F8,F4,F0 -SUB.S F6,F8,F10 -JAL 7F0B483C ;F0= [800413F4] -SWC1 F6,00A8 (SP) -LWC1 F4,009C (SP) -MUL.S F8,F4,F0 -JAL 7F0B483C ;F0= [800413F4] -SWC1 F8,009C (SP) -LWC1 F10,0098 (SP) -MUL.S F6,F10,F0 -SWC1 F6,0098 (SP) -//7F0A13B0: -LUI S2,8004 -ADDIU S2,S2,0808 -LW T6,0000 (S2) ;T6= 80040808: impact.cur# -ADDIU S6,R0,0050 -LUI S3,8008 -MULTU T6,S6 -ADDIU S3,S3,A154 -LW T8,0000 (S3) ;T8=8008A154+0: impact.buf -LW T7,0100 (SP) ;T7= SP+10 f/caller: -MFLO T0 -ADDU T9,T8,T0 -SW T7,0048 (T9) ;impact+48: ??? (usually 0) -LW T3,0000 (S2) ;T3= 80040808: impact.cur# -LW T2,0000 (S3) -LB T1,0107 (SP) ;T1= SP+14 f/caller: -MULTU T3,S6 -MFLO T4 -ADDU T5,T2,T4 -SB T1,004C (T5) ;impact+4C: ??? (usually FF) -LW T0,0000 (S2) ;T0= 80040808: impact.cur# -LW T8,0000 (S3) -LB T6,010B (SP) ;T1= SP+18 f/caller: -MULTU T0,S6 -MFLO T7 -ADDU T9,T8,T7 -SB T6,004D (T9) ;impact+4D: ??? (usually 00) -//7F0A1418: set room -LW T4,0000 (S2) ;T4= 80040808: impact.cur# -LW T2,0000 (S3) -LH T3,00FE (SP) ;T3= room# -MULTU T4,S6 -MFLO T1 -ADDU T5,T2,T1 -SH T3,0000 (T5) ;impact+0: room# -//7F0A1434: set image index -LW T7,0000 (S2) ;T7= 80040808: impact.cur# -LW T8,0000 (S3) -LH T0,00FA (SP) ;T0= img index -MULTU T7,S6 -MFLO T6 -ADDU T9,T8,T6 -SH T0,0002 (T9) -//7F0A1450: write first vertex -LW T2,0000 (S2) ;T2= 80040808: impact.cur# -LW T4,0000 (S3) -LW AT,0000 (S5) -MULTU T2,S6 -MFLO T1 -ADDU T3,T4,T1 -SW AT,0008 (T3) -LW T7,0004 (S5) -SW T7,000C (T3) -LW AT,0008 (S5) -SW AT,0010 (T3) -LW T7,000C (S5) -SW T7,0014 (T3) -//7F0A1484: write second vertex -LW T6,0000 (S2) ;T6= 80040808: impact.cur# -LW T8,0000 (S3) -LW AT,0000 (S5) -MULTU T6,S6 -MFLO T0 -ADDU T9,T8,T0 -SW AT,0018 (T9) -LW T4,0004 (S5) -SW T4,001C (T9) -LW AT,0008 (S5) -SW AT,0020 (T9) -LW T4,000C (S5) -SW T4,0024 (T9) -//7F0A14B8: write third vertex -LW T5,0000 (S2) ;T5= 80040808: impact.cur# -LW T1,0000 (S3) -LW AT,0000 (S5) -MULTU T5,S6 -MFLO T3 -ADDU T7,T1,T3 -SW AT,0028 (T7) -LW T8,0004 (S5) -SW T8,002C (T7) -LW AT,0008 (S5) -SW AT,0030 (T7) -LW T8,000C (S5) -SW T8,0034 (T7) -//7F0A14EC: write fourth vertex -LW T2,0000 (S2) ;T2= 80040808: impact.cur# -LW T0,0000 (S3) -LW AT,0000 (S5) -MULTU T2,S6 -MFLO T9 -ADDU T4,T0,T9 -SW AT,0038 (T4) -LW T1,0004 (S5) -SW T1,003C (T4) -LW AT,0008 (S5) -SW AT,0040 (T4) -LW T1,000C (S5) -SW T1,0044 (T4) -//7F0A1520: vtx[0].x -LWC1 F8,00C4 (SP) -LWC1 F4,009C (SP) -LWC1 F6,00B8 (SP) -LWC1 F10,0098 (SP) -MUL.S F0,F4,F8 -LWC1 F4,00A0 (SP) -MUL.S F2,F10,F6 -SWC1 F0,004C (SP) -SUB.S F8,F4,F0 -SWC1 F2,0048 (SP) -JAL 7F0A0C74 -SUB.S F12,F8,F2 -LW T6,0000 (S2) ;T6= 80040808: impact.cur# -LW T3,0000 (S3) -MTC1 R0,F8 -MULTU T6,S6 -MFLO T7 -ADDU T8,T3,T7 -SH V0,0008 (T8) -//7F0A156C: vtx[0].y -LWC1 F6,00B4 (SP) -LWC1 F10,0098 (SP) -LWC1 F4,00A4 (SP) -MUL.S F0,F10,F6 -SUB.S F10,F4,F8 -SUB.S F12,F10,F0 -JAL 7F0A0C74 -SWC1 F0,0044 (SP) -LW T0,0000 (S2) ;T0= 80040808: impact.cur# -LW T2,0000 (S3) -MULTU T0,S6 -MFLO T9 -ADDU T5,T2,T9 -SH V0,000A (T5) -//7F0A15A4: vtx[0].z -LWC1 F4,00BC (SP) -LWC1 F6,009C (SP) -LWC1 F10,00B0 (SP) -LWC1 F8,0098 (SP) -MUL.S F0,F6,F4 -LWC1 F6,00A8 (SP) -MUL.S F2,F8,F10 -SWC1 F0,0040 (SP) -SUB.S F4,F6,F0 -SWC1 F2,003C (SP) -JAL 7F0A0C74 -SUB.S F12,F4,F2 -LW T1,0000 (S2) ;T1= 80040808: impact.cur# -LW T4,0000 (S3) -LUI S0,8009 -MULTU T1,S6 -ADDIU S0,S0,D0BC ;S0=8008D0BC: global image bank impacts subset -MFLO T6 -ADDU T3,T4,T6 -SH V0,000C (T3) -//7F0A15F4: vtx[0].u -LW T8,0000 (S2) ;T8= 80040808: impact.cur# -LW T7,0000 (S3) -MULTU T8,S6 -MFLO T0 -ADDU T2,T7,T0 -SH R0,0010 (T2) -//7F0A160C: vtx[0].v -LW T3,0000 (S2) ;T3= 80040808: impact.cur# -LW T9,0000 (S0) ;T9=p->img.impact.header -LW T6,0000 (S3) -MULTU T3,S6 -ADDU T5,T9,S4 -LBU T1,0005 (T5) ;T1=img.impact.header.height -SLL T4,T1,0x5 -MFLO T8 -ADDU T7,T6,T8 -SH T4,0012 (T7) -//7F0A1634: vtx[1].x -LWC1 F10,004C (SP) -LWC1 F8,00A0 (SP) -LWC1 F4,0048 (SP) -SUB.S F6,F8,F10 -JAL 7F0A0C74 -ADD.S F12,F6,F4 -LW T2,0000 (S2) ;T2= 80040808: impact.cur# -LW T0,0000 (S3) -MTC1 R0,F10 -MULTU T2,S6 -MFLO T9 -ADDU T5,T0,T9 -SH V0,0018 (T5) -//7F0A1668: vtx[1].y -LWC1 F8,00A4 (SP) -LWC1 F4,0044 (SP) -SUB.S F6,F8,F10 -JAL 7F0A0C74 -ADD.S F12,F6,F4 -LW T3,0000 (S2) ;T3= 80040808: impact.cur# -LW T1,0000 (S3) -MULTU T3,S6 -MFLO T6 -ADDU T8,T1,T6 -SH V0,001A (T8) -//7F0A1694: vtx[1].z -LWC1 F10,0040 (SP) -LWC1 F8,00A8 (SP) -LWC1 F4,003C (SP) -SUB.S F6,F8,F10 -JAL 7F0A0C74 -ADD.S F12,F6,F4 -LW T7,0000 (S2) ;T7= 80040808: impact.cur# -LW T4,0000 (S3) -MULTU T7,S6 -MFLO T2 -ADDU T0,T4,T2 -SH V0,001C (T0) -//7F0A16C4: vtx[1].u -LW T5,0000 (S2) ;T5= 80040808: impact.cur# -LW T9,0000 (S3) -MULTU T5,S6 -MFLO T3 -ADDU T1,T9,T3 -SH R0,0020 (T1) -//7F0A16DC: vtx[1].v -LW T8,0000 (S2) ;T8= 80040808: impact.cur# -LW T6,0000 (S3) -MULTU T8,S6 -MFLO T7 -ADDU T4,T6,T7 -SH R0,0022 (T4) -//7F0A16F4: vtx[2].x -LWC1 F10,004C (SP) -LWC1 F8,00A0 (SP) -LWC1 F4,0048 (SP) -ADD.S F6,F8,F10 -JAL 7F0A0C74 -ADD.S F12,F6,F4 -LW T0,0000 (S2) ;T0= 80040808: impact.cur# -LW T2,0000 (S3) -MTC1 R0,F10 -MULTU T0,S6 -MFLO T5 -ADDU T9,T2,T5 -SH V0,0028 (T9) -//7F0A1728: vtx[2].y -LWC1 F8,00A4 (SP) -LWC1 F4,0044 (SP) -ADD.S F6,F8,F10 -JAL 7F0A0C74 -ADD.S F12,F6,F4 -LW T1,0000 (S2) ;T1= 80040808: impact.cur# -LW T3,0000 (S3) -MULTU T1,S6 -MFLO T8 -ADDU T6,T3,T8 -SH V0,002A (T6) -//7F0A1754: vtx[2].z -LWC1 F10,0040 (SP) -LWC1 F8,00A8 (SP) -LWC1 F4,003C (SP) -ADD.S F6,F8,F10 -JAL 7F0A0C74 -ADD.S F12,F6,F4 -LW T4,0000 (S2) ;T4= 80040808: impact.cur# -LW T7,0000 (S3) -MULTU T4,S6 -MFLO T0 -ADDU T2,T7,T0 -SH V0,002C (T2) -//7F0A1784: vtx[2].u -LW T6,0000 (S2) ;T6= 80040808: impact.cur# -LW T5,0000 (S0) -LW T8,0000 (S3) -MULTU T6,S6 -ADDU T9,T5,S4 -LBU T1,0004 (T9) ;T1=img.impact.header.width -SLL T3,T1,0x5 -MFLO T4 -ADDU T7,T8,T4 -SH T3,0030 (T7) -//7F0A17AC: vtx[2].v -LW T2,0000 (S2) ;T2= 80040808: impact.cur# -LW T0,0000 (S3) -MULTU T2,S6 -MFLO T5 -ADDU T9,T0,T5 -SH R0,0032 (T9) -//7F0A17C4: vtx[3].x -LWC1 F10,004C (SP) -LWC1 F8,00A0 (SP) -LWC1 F4,0048 (SP) -ADD.S F6,F8,F10 -JAL 7F0A0C74 -SUB.S F12,F6,F4 -LW T6,0000 (S2) ;T6= 80040808: impact.cur# -LW T1,0000 (S3) -MTC1 R0,F10 -MULTU T6,S6 -MFLO T8 -ADDU T4,T1,T8 -SH V0,0038 (T4) -//7F0A17F8: vtx[3].y -LWC1 F8,00A4 (SP) -LWC1 F4,0044 (SP) -ADD.S F6,F8,F10 -JAL 7F0A0C74 -SUB.S F12,F6,F4 -LW T7,0000 (S2) ;T7= 80040808: impact.cur# -LW T3,0000 (S3) -MULTU T7,S6 -MFLO T2 -ADDU T0,T3,T2 -SH V0,003A (T0) -//7F0A1824: vtx[3].z -LWC1 F10,0040 (SP) -LWC1 F8,00A8 (SP) -LWC1 F4,003C (SP) -ADD.S F6,F8,F10 -JAL 7F0A0C74 -SUB.S F12,F6,F4 -LW T9,0000 (S2) ;T9= 80040808: impact.cur# -LW T5,0000 (S3) -OR S1,R0,R0 -MULTU T9,S6 -ADDIU S5,R0,0028 -MFLO T6 -ADDU T1,T5,T6 -SH V0,003C (T1) -//7F0A185C: vtx[3].u -LW T0,0000 (S2) ;T0= 80040808: impact.cur# -LW T8,0000 (S0) -LW T2,0000 (S3) -MULTU T0,S6 -ADDU T4,T8,S4 -LBU T7,0004 (T4) ;T7=img.impact.header.width -SLL T3,T7,0x5 -MFLO T9 -ADDU T5,T2,T9 -SH T3,0040 (T5) ;set vtx[3].u -//7F0A1884: vtx[3].v -LW T0,0000 (S2) ;T0= 80040808: impact.cur# -LW T6,0000 (S0) -LW T7,0000 (S3) -MULTU T0,S6 -ADDU T1,T6,S4 -LBU T8,0005 (T1) ;T8=img.impact.header.height -ADDIU S4,R0,00FF -SLL T4,T8,0x5 -MFLO T2 -ADDU T9,T7,T2 -SH T4,0042 (T9) ;set vtx[3].v -//7F0A18B0: -LBU A0,0061 (SP) -LBU A1,0062 (SP) -//7F0A18B8: work out color based on image application type -LW T3,0050 (SP) -ADDIU AT,R0,0001 -LBU V0,0008 (T3) ;V0= img.appl.type -BEQ V0,R0,7F0A1914 ;branch if 0 -NOP -BEQ V0,AT,7F0A18E4 ;branch if 1 -ADDIU AT,R0,0002 -BEQ V0,AT,7F0A1940 ;branch if 2 -NOP -BEQ R0,R0,7F0A1998 ;skip if unknown -OR S0,R0,R0 -//7F0A18E4: img.type 1: randomly from FF to D7 -JAL 7000A450 ;V0= random number -NOP -DIVU V0,S5 -MFHI T5 -SUBU V1,S4,T5 ;V1= FF - (rand % 28) -BNE S5,R0,7F0A1904 -NOP -BREAK 00001C00 -//7F0A1904: -ANDI A0,V1,00FF -ANDI A1,V1,00FF -BEQ R0,R0,7F0A1998 -ANDI S0,V1,00FF -//7F0A1914: img.type 0: randomly from 00 to 28 -JAL 7000A450 ;V0= random number -NOP -DIVU V0,S5 -MFHI V1 -ANDI A0,V1,00FF ;A0= rand % 28 -BNE S5,R0,7F0A1934 -NOP -BREAK 00001C00 -//7F0A1934: -ANDI A1,V1,00FF -BEQ R0,R0,7F0A1998 -ANDI S0,V1,00FF -//7F0A1940: img.type 2: random color -JAL 7000A450 ;V0= random number -NOP -ANDI T6,V0,0001 -BEQ T6,R0,7F0A195C ;if even, 0 -OR S0,R0,R0 -BEQ R0,R0,7F0A195C ;otherwise, FF -ANDI S0,S4,00FF -//7F0A195C: -JAL 7000A450 ;V0= random number -NOP -ANDI T1,V0,0001 -BEQ T1,R0,7F0A1978 ;if even, 0 -OR A1,R0,R0 -BEQ R0,R0,7F0A1978 ;otherwise, FF -ANDI A1,S4,00FF -//7F0A1978: -JAL 7000A450 ;V0= random number -SB A1,0062 (SP) -ANDI T8,V0,0001 -BEQ T8,R0,7F0A1994 ;if even, 0 -LBU A1,0062 (SP) -BEQ R0,R0,7F0A1998 ;otherwise, FF -ANDI A0,S4,00FF -//7F0A1994: -OR A0,R0,R0 -//7F0A1998: -LW T7,0000 (S2) ;T7= 80040808: impact.cur# -LW T0,0000 (S3) -ADDIU AT,R0,0040 -SLL T2,T7,0x2 -ADDU T2,T2,T7 -SLL T2,T2,0x4 -ADDU T4,T0,T2 -ADDU T9,T4,S1 -SB S0,0014 (T9) ;set impact.red -LW T5,0000 (S2) ;T5= 80040808: impact.cur# -LW T3,0000 (S3) -SLL T6,T5,0x2 -ADDU T6,T6,T5 -SLL T6,T6,0x4 -ADDU T1,T3,T6 -ADDU T8,T1,S1 -SB A1,0015 (T8) ;set impact.green -LW T0,0000 (S2) ;T0= 80040808: impact.cur# -LW T7,0000 (S3) -SLL T2,T0,0x2 -ADDU T2,T2,T0 -SLL T2,T2,0x4 -ADDU T4,T7,T2 -ADDU T9,T4,S1 -SB A0,0016 (T9) ;set impact.blue -LW T3,0000 (S2) ;T3= 80040808: impact.cur# -LW T5,0000 (S3) -SLL T6,T3,0x2 -ADDU T6,T6,T3 -SLL T6,T6,0x4 -ADDU T1,T5,T6 -ADDU T8,T1,S1 -ADDIU S1,S1,0010 -BNE S1,AT,7F0A18B8 -SB S4,0017 (T8) ;set impact.alpha -//7F0A1A24: advance impact.cur# to next index -LW T0,0000 (S2) ;T0= 80040808: impact.cur# -SB A0,0061 (SP) ;SP+61 = old blue -SB A1,0062 (SP) ;SP+62 = old green -ADDIU A0,T0,0001 -SLTI AT,A0,0064 -BNE AT,R0,7F0A1A48 -SW A0,0000 (S2) ;A0->80040808 -//7F0A1A40: loop around if necessary -SW R0,0000 (S2) ;0 ->80040808 -OR A0,R0,R0 -//7F0A1A48: initialize the next entry -JAL 7F0A0E98 -NOP -LW T9,0000 (S2) ;T9= 80040808: impact.cur# -LW T4,0000 (S3) -ADDIU T2,R0,FFFF -MULTU T9,S6 -MFLO T3 -ADDU T5,T4,T3 -SH T2,0000 (T5) ;FFFF -> next entry+0: invalidate room -//7F0A1A6C: return -LW RA,0034 (SP) -LW S6,0030 (SP) -LW S5,002C (SP) -LW S4,0028 (SP) -LW S3,0024 (SP) -LW S2,0020 (SP) -LW S1,001C (SP) -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,00F0 diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F01D5EC - set stage, mode, briefing for ramrom replay.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F01D5EC - set stage, mode, briefing for ramrom replay.txt deleted file mode 100644 index f8c95da..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F01D5EC - set stage, mode, briefing for ramrom replay.txt +++ /dev/null @@ -1,21 +0,0 @@ -7F01D5EC 5211C set stage, mode, briefing for ramrom replay - accepts: A0=stage# -LUI AT,8003 -ADDIU SP,SP,FFE8 -SW R0,A8F0 (AT) ;0->8002A8F0: mode=solo -SW RA,0014 (SP) -LUI AT,8003 -JAL 7F00DCC0 ;V0=briefing for solo stage A0 -SW A0,A8F4 (AT) ;A0->8002A8F4: A0->selected stage -LW RA,0014 (SP) -LUI AT,8003 -SW V0,A8F8 (AT) ;V0->8002A8F8: selected mission briefing page -JR RA -ADDIU SP,SP,0018 - -[+_+] - -used three times: - 6D0C 7000610C -F5278 7F0C0748 record or replay at stage start -F53A4 7F0C0874 replay recorded movie at hardware address A0 diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0BFCB0 - finalize ramrom on hardware.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0BFCB0 - finalize ramrom on hardware.txt deleted file mode 100644 index 77bd960..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0BFCB0 - finalize ramrom on hardware.txt +++ /dev/null @@ -1,48 +0,0 @@ -7F0BFCB0 F47E0 finalize ramrom on hardware -ADDIU SP,SP,FFB8 -OR A0,SP,R0 -ADDIU A0,A0,002F -ORI T6,A0,000F -SW RA,0014 (SP) -XORI A0,T6,000F ;A0=SP+20, to nearest quadword -SB R0,0000 (A0) -SB R0,0001 (A0) ;A0+0=0000 -LUI A1,8009 -LW A1,C5F4 (A1) ;A1=8008C5F4: ramrom hardware addy -JAL 70005D08 ;write A2 bytes from rdram A0 to hardware A1 -ADDIU A2,R0,0010 ;A2=0x10 -//7F0BFCE0: read in what's already written to devtool -LUI V0,8009 -ADDIU V0,V0,C5F4 -LW T8,0000 (V0) ;T8=8008C5F4: ramrom hardware addy -LUI A0,8009 -ADDIU A0,A0,C270 ;A0=8008C270: ramrom target address -ADDIU T9,T8,0004 ;T9=T8+4: next word... -SW T9,0000 (V0) -LUI A1,00F0 ;A1=0xF00000: hardware address -JAL 70005C44 ;align and read A2 bytes of data from hardware A1 to A0 -ADDIU A2,R0,00F0 ;A2=0xF0: size -//7F0BFD08: set total size and time to ramrom and write to devtool -LUI V1,8005 -ADDIU V1,V1,8468 ;V1=80048468 -SW V0,0000 (V1) ;V0->80048468: return address->demo block -LUI T0,8005 -LUI T1,8005 -LW T1,8374 (T1) ;T1=80048374: 1 if not paused -LW T0,837C (T0) ;T0=8004837C: ms time in stage -LUI T4,8009 -LUI A1,00F0 ;A1=0xF00000: devtool hardware address -SUBU T2,T0,T1 ;T2=timer-clock -SW T2,007C (V0) ;T2->demo+7C: total time -LW T4,C5F4 (T4) ;T4=8008C5F4: ramrom hardware addy -LW T6,0000 (V1) ;T6=V1+0: p->ramrom -ADDIU A2,R0,00F0 ;A2=0xF0: size -SUBU T5,T4,A1 ;T5=current address - base address: size -SW T5,0080 (T6) ;size->ramrom+80: actual size of ramrom data -JAL 70005D08 ;copy A2 bytes from rdram A0 to hardware A1 -LW A0,0000 (V1) ;A0=p->ramrom -//7F0BFD50: -LW RA,0014 (SP) -ADDIU SP,SP,0048 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0BFE5C - record controller input as packet.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0BFE5C - record controller input as packet.txt deleted file mode 100644 index f89f9e8..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0BFE5C - record controller input as packet.txt +++ /dev/null @@ -1,147 +0,0 @@ -7F0BFE5C F498C record controller input as packet - accepts: A0=p->controller input index, A1=index+1E4, A2=index+1E0 -ADDIU SP,SP,FFE0 -LUI T6,8005 -LUI T7,8009 -LW T6,8468 (T6) ;T6=80048468: p->demo block -ADDIU T7,T7,C468 ;T7=8008C468 -ADDIU T8,T7,000F -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -ORI T9,T8,000F -LUI T0,8005 -LUI T4,8005 -XORI T5,T9,000F ;T5=8008C470 -LW T1,0018 (T6) ;T1=demo+18: #controllers (command size) -ADDIU T4,T4,846C ;T4=8004846C -ADDIU T0,T0,8470 ;T0=80048470 -ADDIU T6,T5,0004 ;T6=8008C474 -OR S0,A2,R0 ;S0=A2: index+1E0 -OR S1,A0,R0 ;S1=A0: p->controller index -OR T2,R0,R0 ;T2=0 -OR A3,R0,R0 ;A3=0 -SW T5,0000 (T4) ;8008C470->8004846C: demo block buffer address -SW T6,0000 (T0) ;8008C474->80048470: p->code heading -BEQ A1,A2,7F0BFFDC ;branch if A1=A2 -OR V0,T5,R0 -ADDIU T3,R0,0014 -ADDIU T7,A1,0001 ;T7=A1+1 -DIV T7,T3 -MFHI A2 ;A2=(A1+1) % 0x14: -OR A0,R0,R0 ;A0=0 -BNE T3,R0,7F0BFEE0 ;BREAK if division by zero -NOP -BREAK 00001C00 -//7F0BFEE0: catch sign error -ADDIU AT,R0,FFFF -BNE T3,AT,7F0BFEF8 ;branch if T3 wasn't -1 -LUI AT,8000 -BNE T7,AT,7F0BFEF8 ;branch if T7 wasn't negative or a pointer -NOP -BREAK 00001800 -//7F0BFEF8: loop for each command? -BLEZ T1,7F0BFF90 ;branch if stupid controller count or no commands -NOP -MULTU T2,T1 -SLL T9,A2,0x2 -SLL T5,T9,0x2 -SUBU T5,T5,T9 -SLL T5,T5,0x1 ;T5=A2*0x18: -ADDU V1,S1,T5 ;V1=S1+offset: -MFLO A1 ;A1=controllers * count -SLL T8,A1,0x2 -OR A1,T8,R0 ;A1*=4: controllers * count * 4: offset to next command -//7F0BFF24: -LW T6,0000 (T0) ;T6=T0+0: code heading -LB T9,0002 (V1) ;T9= -SLL T8,A0,0x2 -ADDU T7,A1,T6 -ADDU V0,T7,T8 -SB T9,0000 (V0) -LB T5,0003 (V1) -ADDIU A0,A0,0001 -ADDIU V1,V1,0006 -SB T5,0001 (V0) -LHU T7,FFFA (V1) -LBU T6,0001 (V0) -LBU T5,0000 (V0) -SB T7,0002 (V0) -LHU T8,FFFA (V1) -ADDU T7,T5,T6 -SRA T9,T8,0x8 -LBU T8,0002 (V0) -SB T9,0003 (V0) -LBU T5,0003 (V0) -ADDU T9,T7,T8 -ADDU T6,T9,T5 -ANDI T7,T6,00FF -ADDU A3,A3,T7 -ANDI T8,A3,00FF -BNE A0,T1,7F0BFF24 -OR A3,T8,R0 -//7F0BFF90: -BNE A2,S0,7F0BFFA0 -ADDIU T2,T2,0001 ;T2++ command count++ -BEQ R0,R0,7F0BFFDC ;stop looping and eventually return -LW V0,0000 (T4) ;V0=T4+0: demo block buffer address -//7F0BFFA0: -ADDIU T9,A2,0001 -DIV T9,T3 -MFHI A2 -OR A0,R0,R0 -BNE T3,R0,7F0BFFBC ;BREAK if division by zero -NOP -BREAK 00001C00 -//7F0BFFBC: catch negatives (kinda) -ADDIU AT,R0,FFFF -BNE T3,AT,7F0BFFD4 ;branch if divisor = -1 -LUI AT,8000 -BNE T9,AT,7F0BFFD4 ;branch if dividend not negative -NOP -BREAK 00001800 -//7F0BFFD4: loop unconditionally -BEQ R0,R0,7F0BFEF8 -NOP -//7F0BFFDC: finish up by setting command header -SB T2,0001 (V0) ;T2->demo buffer+1: #commands -LUI T5,8005 -LW T5,8498 (T5) ;T5=80048498: TRUE runs game clock? -LW T6,0000 (T4) ;T6=p->demo buffer -LUI T9,8002 -LUI S1,8009 -SB T5,0000 (T6) ;T5->demo buffer+0: clock? -LW T5,0000 (T4) ;T5=p->demo buffer -LW T9,4464 (T9) ;T9=80024464: -ADDIU S1,S1,C5F4 ;S1=8008C5F4: hardware ramrom address -SB T9,0002 (T5) ;80024464->demo buffer+2 -LW V0,0000 (T4) ;V0=p->demo buffer -LBU T6,0000 (V0) ;T6=demo buffer+0 -LBU T8,0001 (V0) ;T8=demo buffer+1 -LBU T7,0002 (V0) ;T7=demo buffer+2 -ADDU T9,T6,T8 -ADDU T6,T9,T7 ;T6=sum of first three bytes in buffer -SLL T9,T1,0x2 ;T9=controller count * 4 -MULTU T9,T2 -ADDU T8,A3,T6 ;T8=sum plus sum of commands -SB T8,0003 (V0) ;sum->demo buffer+3 -LW A1,0000 (S1) ;A1=hardware ramrom address -LW A0,0000 (T4) ;A0=p->demo buffer -MFLO S0 ;S0=controllers * #commands * 4: size of data -ADDIU S0,S0,0004 ;S0+=4: size+4 (for header) -ADDIU A2,S0,000F -ORI T7,A2,000F -JAL 70005D08 ;write A2 bytes to hardware A1 from rdram A0 -XORI A2,T7,000F ;A2=size->nearest quadword -LW T6,0000 (S1) ;T6=hardware addy -ADDIU T8,S0,0001 -LW RA,001C (SP) -ORI T9,T8,0001 -XORI T7,T9,0001 ;T7=size to nearest short -LUI AT,8009 -LW S0,0014 (SP) -LW S1,0018 (SP) -ADDU T5,T6,T7 ;T5=hardware+ short aligned size -SW T5,C5F4 (AT) ;new hardware addy->8008C5F4 -JR RA -ADDIU SP,SP,0020 diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0268 - iterate ramrom entries until camera out.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0268 - iterate ramrom entries until camera out.txt deleted file mode 100644 index 20bf785..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0268 - iterate ramrom entries until camera out.txt +++ /dev/null @@ -1,121 +0,0 @@ -7F0C0268 F4D98 iterate ramrom entries until end, and handle camera out -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8009 -LUI A1,8009 -LW A1,C5F4 (A1) ;A1=8008C5F4: p->hardware -ADDIU A0,A0,C468 ;A0=8008C468: -JAL 70005C44 ;align and read A2 bytes of data from hardware A1 to A0 -ADDIU A2,R0,0004 ;A2=4 -LUI A1,8005 -ADDIU A1,A1,846C ;A1=8004846C -SW V0,0000 (A1) ;V0->8004846C: save pointer to demo command entry in rdram -LBU A3,0001 (V0) ;A3=entry+1: #commands -OR V1,V0,R0 ;V1=V0: p->entry -LUI T6,8005 -BLEZ A3,7F0C02F0 ;branch if not positive -OR A0,A3,R0 ;A0=A3: #commands -//7F0C02A8: -LW T6,8468 (T6) ;T6=80048468: p->demo -LUI A1,8009 -LW A1,C5F4 (A1) ;A1=8008C5F4: p->demo hardware address -LW T7,0018 (T6) ;T7=demo+18: #controllers (command size) -LUI A0,8009 -ADDIU A0,A0,C48E ;A0=8008C48E -SLL T8,T7,0x2 ;T8=command size * 4: #words per command -MULTU T8,A3 -ADDIU A1,A1,0004 ;A1+=4: p->next entry -MFLO A2 ;A2=size of command block -JAL 70005C44 ;align and read A2 bytes of data from hardware A1 to A0 -NOP -LUI V1,8005 -LW V1,846C (V1) ;V1=8004846C: demo entry -LUI AT,8005 -SW V0,8470 (AT) ;V0->80048470: update p->heading -LBU A3,0001 (V1) ;A3=entry+1: #commands -OR A0,A3,R0 ;A0=A3: #commands -//7F0C02F0: detect if still more demo to run -BNE A0,R0,7F0C0318 ;branch if commands present -LUI T1,8005 -LBU T9,0000 (V1) ;T9=entry+0: clock span -BNE T9,R0,7F0C0318 ;branch if clock present -NOP -JAL 7F0C08C8 ;set camera mode A -NOP -LUI V1,8005 -BEQ R0,R0,7F0C034C -LW V1,846C (V1) ;V1=8004846C: p->demo entry -//7F0C0318: offset hardware to next command -LW T1,8468 (T1) ;T1=80048468: p->demo -LUI T0,8009 -LW T0,C5F4 (T0) ;T0=8008C5F4: p->hardware -LW T2,0018 (T1) ;T2=demo+18: #controllers (command size) -LUI AT,8009 -SLL T3,T2,0x2 ;T3=T2*4: size of commands in words -MULTU T3,A3 -MFLO T4 ;T4=total size of command -ADDIU T5,T4,0005 -ORI T6,T5,0001 -XORI T7,T6,0001 ;T7=size+header, to nearest short -ADDU T8,T0,T7 ;T8=hardware+size: p->next command -SW T8,C5F4 (AT) ;update p->hardware -//7F0C034C: test if within 1 second of demo end -JAL 7F0C0AA0 -LBU A0,0000 (V1) ;A0=entry+0: clock -LUI T9,8005 -LW T9,8468 (T9) ;T9=80048468: p->demo -LUI V0,8005 -LW V0,837C (V0) ;V0=8004837C: cur.timer -LW V1,007C (T9) ;V1=demo+7C: total time -LUI T1,8005 -ADDIU V1,V1,FFC4 ;V1-=0x3C V1-=second -SLT AT,V0,V1 ;TRUE if not within 1 second of total time -BNEL AT,R0,7F0C039C ;return if still running strong -LW RA,0014 (SP) -//7F0C037C: test if ending next loop -LW T1,8374 (T1) ;T1=80048374: TRUE if running -SUBU T2,V0,T1 ;T2=time-clock -SLT AT,T2,V1 ;TRUE if not stopping next cycle -BEQL AT,R0,7F0C039C ;return if still running strong -LW RA,0014 (SP) -//7F0C0390: if ending, switch cameras -JAL 7F0C08C8 ;set camera mode A -NOP -//7F0C0398: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -+_+ - -7F0C08C8 F53F8 set to camera mode A if not already set -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F07A528 ;V0=current camera mode -NOP -ADDIU AT,R0,000A -BEQL V0,AT,7F0C08F0 ;return if A -LW RA,0014 (SP) -//7F0C08E4: -JAL 7F07A9B8 ;use intro camera mode A0 -ADDIU A0,R0,000A ;A0=A: camera mode A: -//7F0C08EC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0C0A70 F55A0 ??? -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000D8E0 -NOP -LW RA,0014 (SP) -LUI V1,8005 -ADDIU V1,V1,84B0 ;V1=800484B0 -SW V0,0000 (V1) ;V0->800484B0: -LUI AT,8005 -SW V0,84AC (AT) ;V0->800484AC: -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C04F4 - copy ramrom data to runtime.TXT b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C04F4 - copy ramrom data to runtime.TXT deleted file mode 100644 index 2890746..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C04F4 - copy ramrom data to runtime.TXT +++ /dev/null @@ -1,86 +0,0 @@ -7F0C04F4 F5024 copy ramrom data to runtime - accepts: A0=p->ramrom data -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -LW T6,0000 (A0) ;T6=randomizer 1 (upper) -LW T7,0004 (A0) ;T7=randomizer 1 (lower) -LUI AT,8002 -SW T6,4460 (AT) -LUI AT,8002 -SW T7,4464 (AT) -LW T8,0008 (A0) ;T8=randomizer 2 (upper) -LW T9,000C (A0) ;T9=randomizer 2 (lower) -LUI AT,8004 -SW T8,0160 (AT) -LUI AT,8004 -SW T9,0164 (AT) -LW T0,0084 (A0) ;T0=mode -LUI AT,8003 -OR S0,A0,R0 -SW T0,A8F0 (AT) -LW T1,008C (A0) ;T1=# players -LUI AT,8003 -SW T1,B520 (AT) -LW T2,0090 (A0) ;T2=scenario -LUI AT,8003 -SW T2,B540 (AT) -LW T3,0094 (A0) ;T3=selected MP stage -LUI AT,8003 -SW T3,B534 (AT) -LW T4,0098 (A0) ;T4=game length -LUI AT,8003 -SW T4,B538 (AT) -JAL 7F0C6630 ;save selected weapon set -LW A0,009C (A0) ;A0=slected MP weapon set -LW T5,00A0 (S0) ;T5=pl1 character -LUI V0,8003 -ADDIU V0,V0,B524 -SW T5,0000 (V0) -LW T6,00A4 (S0) ;T6=pl2 character -LUI V1,8007 -ADDIU V1,V1,97A8 -SW T6,0004 (V0) -LW T7,00A8 (S0) ;T7=pl3 character -LUI A2,8007 -ADDIU A2,A2,97B8 -SW T7,0008 (V0) -LW T8,00AC (S0) ;T8=pl4 character -//7F0C05AC: F50DC handicap and control settings -LUI AT,8003 -OR A0,R0,R0 -SW T8,000C (V0) -LW T9,00B0 (S0) ;T9=pl1 handicap -SW T9,0000 (V1) -LW T0,00B4 (S0) ;T0=pl2 handicap -SW T0,0004 (V1) -LW T1,00B8 (S0) ;T1=pl3 handicap -SW T1,0008 (V1) -LW T2,00BC (S0) ;T2=pl4 handicap -SW T2,000C (V1) -LW T3,00C0 (S0) ;T3=pl1 control -SW T3,0000 (A2) -LW T4,00C4 (S0) ;T3=pl2 control -SW T4,0004 (A2) -LW T5,00C8 (S0) ;T3=pl3 control -SW T5,0008 (A2) -LW T6,00CC (S0) ;T3=pl4 control -SW T6,000C (A2) -LW T7,00D0 (S0) ;T7=aim -SW T7,B53C (AT) -JAL 7F014CA4 -LW A1,00D4 (S0) ;A1=pl1 MP attrib -ADDIU A0,R0,0001 -JAL 7F014CA4 -LW A1,00D8 (S0) ;A1=pl2 MP attrib -ADDIU A0,R0,0002 -JAL 7F014CA4 -LW A1,00DC (S0) ;A1=pl3 MP attrib -ADDIU A0,R0,0003 -JAL 7F014CA4 -LW A1,00E0 (S0) ;A1=pl4 MP attrib -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0640 - detect if recording or replaying during currently loading stage.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0640 - detect if recording or replaying during currently loading stage.txt deleted file mode 100644 index d472fd2..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0640 - detect if recording or replaying during currently loading stage.txt +++ /dev/null @@ -1,101 +0,0 @@ -7F0C0640 F5170 detect if recording currently loading stage or replaying ramrom file - accepts: A0=stage#. A1=difficulty -LUI T6,8005 -LW T6,8488 (T6) ;T6=80048488: 1- record controller input -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -BEQ T6,R0,7F0C071C ;branch if not recording -SW S0,0018 (SP) -//7F0C0658: record demo -LUI T7,8009 -ADDIU T7,T7,C270 ;T7=8008C270 -ADDIU T8,T7,000F -LUI S0,8005 -ORI T9,T8,000F -ADDIU S0,S0,8468 ;S0=80048468 -XORI T0,T9,000F ;T0=8008C270 (to nearest quadword, which it already is) -SW T0,0000 (S0) ;8008C270->80048468: p->demo block -LUI AT,8009 -SW R0,C5F8 (AT) ;0->8008C5F8: -LW T1,0000 (S0) ;T1=80048468: p->demo block -SW A0,0010 (T1) ;A0->demo+10: stage# -LW T2,0000 (S0) ;T2=80048468: p->demo block -JAL 7000B9F8 ;V0= #controllers plugged in -SW A1,0014 (T2) ;A1->demo+14: difficulty -LW T3,0000 (S0) ;T3=80048468: p->demo block -LUI T4,8009 -SW V0,0018 (T3) ;V0->demo+18: #controllers (size of commands) -LW T5,0000 (S0) ;T5=80048468: p->demo block -LW T4,C5F0 (T4) ;T4=8008C5F0: record slot# -SW T4,0088 (T5) ;record slot# -> demo+88: set# -LW A0,0000 (S0) ;A0=80048468: p->demo block -JAL 7F01D61C ;copy current folder's eeprom to @A0 -ADDIU A0,A0,001C ;A0+=1C: p->demo eeprom -JAL 7F0C03A8 ;copy in-game registers to A0? -LW A0,0000 (S0) ;A0=80048468: p->demo block -ADDIU V0,R0,0001 -LUI AT,8005 -SW V0,8480 (AT) ;1->80048480: 1- if a ramrom tool running -LUI AT,8005 -LUI A0,7F0C -SW V0,8484 (AT) ;1->80048484: 1- recorder pulling from devtool? -JAL 7000BBBC ;set recorder handler function (A0->80026928) -ADDIU A0,A0,FE5C ;A0=7F0BFE5C -LUI V0,8009 -ADDIU V0,V0,C5F4 ;V0=8008C5F4 -LUI A1,00F0 -SW A1,0000 (V0) ;A1=8008C5F4: hardware address -LW A0,0000 (S0) ;A0=80048468: p->demo block -JAL 70005D08 ;copy A2 bytes from A0 to hardware address A1 -ADDIU A2,R0,00F0 ;A2=0xF0: size -LUI V0,8009 -ADDIU V0,V0,C5F4 ;V0=8008C5F4 -LW T7,0000 (V0) ;T7=8008C5F4: hardware address -LUI AT,8005 -ADDIU T8,T7,00E8 ;T8=hardware+E8: next file offset -SW T8,0000 (V0) ;T8=update hardware address -BEQ R0,R0,7F0C07A8 -SW R0,8488 (AT) ;0->80048488: reset "record stage" flag -//7F0C071C: test if playing back recorded demo... -LUI T9,8005 -LW T9,847C (T9) ;T9=8004847C: 1- run demo -BEQ T9,R0,7F0C07A8 ;branch if normal stage -//7F0C0728: run demo -LUI S0,8005 -LUI AT,8009 -ADDIU S0,S0,8468 ;S0=80048468 -SW R0,C5F8 (AT) ;0->8008C5F8: -LW T0,0000 (S0) ;T0=80048468: p->demo block -JAL 7F01D59C ;A0->difficulty -LW A0,0014 (T0) ;A0=demo+14: difficulty -LW T1,0000 (S0) ;T1=80048468: p->demo block -JAL 7F01D5EC ;A0->stage, set solo, get p->briefing -LW A0,0010 (T1) ;A0=demo+10: stage# -LW A0,0000 (S0) ;A0=80048468: p->demo block -JAL 7F01D644 ;load eeprom @A0 to temporary buffer -ADDIU A0,A0,001C ;A0+=1C: p->embedded save file -LUI A0,8009 -JAL 7F0C03A8 ;copy in-game registers to A0? -ADDIU A0,A0,C380 ;A0=8008C380: -JAL 7F0C04F4 ;copy ramrom registers from ramrom file A0 -LW A0,0000 (S0) ;A0=80048468: p->demo block -ADDIU V0,R0,0001 -LUI AT,8005 -SW V0,8474 (AT) ;1->80048474: TRUE if demo running -LUI AT,8005 -SW V0,8478 (AT) ;1->80048478: -LW T2,0000 (S0) ;T2=80048468: p->demo block -LUI A0,7F0C -ADDIU A0,A0,0080 ;A0=7F0C0080 -JAL 7000BBA8 ;set playback handler and command size? -LW A1,0018 (T2) ;A1=demo+18: #controllers (size of commands) -JAL 7000C930 ;set controller input index to set A0 -ADDIU A0,R0,0001 ;A0= set 1 -LUI AT,8005 -SW R0,847C (AT) ;0->8004847C: reset "run demo" flag -//7F0C07A8: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0970 - select and replay random ramrom demo.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0970 - select and replay random ramrom demo.txt deleted file mode 100644 index a990493..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/7F0C0970 - select and replay random ramrom demo.txt +++ /dev/null @@ -1,49 +0,0 @@ -7F0C0970 F54A0 select and replay random ramrom demo -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -JAL 7F01E998 ;V0=TRUE if Egypt complete on any difficulty in any folder -NOP -LUI T6,8005 -LW T6,83F0 (T6) ;T6=800483F0: ramrom ROM address -OR A0,V0,R0 ;A0=V0: TRUE if Egypt complete -OR V1,R0,R0 ;V1=0 count -BEQ T6,R0,7F0C09D8 ;branch if end of ramrom table -LUI T7,8005 -LW T7,83F4 (T7) ;T7=800483F4: ramrom lock -LUI T9,8005 -ADDIU T9,T9,83F0 :T9=800483F0 -SLT AT,V0,T7 ;TRUE if egypt complete < lock -BNE AT,R0,7F0C09D8 ;branch if locked -SLL T8,V1,0x3 ;T8=count*8: offset to entry -ADDU V0,T8,T9 ;V0=800483F0+offset -//7F0C09B4: loop until a locked entry or end of list -LW T0,0008 (V0) ;T0=next ramrom ROM address -ADDIU V1,V1,0001 ;V1++ count++ -ADDIU V0,V0,0008 ;V0+=8 next entry -BEQ T0,R0,7F0C09D8 ;quit counting if NULL entry -NOP -LW T1,0004 (V0) ;T1=lock -SLT AT,A0,T1 ;TRUE if locked -BEQL AT,R0,7F0C09B8 ;loop if not locked -LW T0,0008 (V0) -//7F0C09D8: grab random entry from unlocked list -JAL 7000A450 ;V0=random# -SW V1,001C (SP) ;SP+1C=V1: total entry count -LW V1,001C (SP) ;V1=total entry count -LUI A0,8005 -DIVU V0,V1 -MFHI T2 ;T2=random % total -SLL T3,T2,0x3 ;T3=value->offset -ADDU A0,A0,T3 -BNE V1,R0,7F0C0A04 ;branch if no division by zero -NOP -BREAK 00001C00 -//7F0C0A04: play ramrom file -LW A0,83F0 (A0) ;A0=800483F0+offset: ROM address of ramrom file -JAL 7F0C081C ;replay demo at hardware A0 -NOP -//7F0C0A10: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/GE demo.rar b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/GE demo.rar deleted file mode 100644 index 6c31b3a..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/GE demo.rar and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/PAL hardware IO.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/PAL hardware IO.txt deleted file mode 100644 index afb752e..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/PAL hardware IO.txt +++ /dev/null @@ -1,115 +0,0 @@ -70004FB0 5BB0 reads A2 bytes from hardware A1 to rdram A0 -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW A1,002C (SP) -SW A0,0028 (SP) -SW A2,0030 (SP) -JAL 70010350 -OR A1,A2,R0 -LW T6,0028 (SP) -LW T7,0030 (SP) -LUI T8,8005 -ADDIU T8,T8,68D0 -LUI A0,8005 -ADDIU A0,A0,68B0 -SW T8,0018 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -LW A3,002C (SP) -SW T6,0010 (SP) -JAL 7000EED0 -SW T7,0014 (SP) -LW RA,0024 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70005010 5C10 ??? -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8005 -ADDIU A0,A0,68D0 -OR A1,R0,R0 -JAL 7000C7D0 -ADDIU A2,R0,0001 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7000503C 5C3C handles hardware read request -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70004FB0 -NOP -JAL 70005010 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70005064 5C64 aligns data for a hardware read -OR A3,A1,R0 -ADDIU SP,SP,FFD0 -ORI A1,A1,0001 -XORI T8,A1,0001 -SW A0,0030 (SP) -SW A2,0038 (SP) -SUBU V1,A3,T8 -ADDU A2,V1,A2 -ADDIU A0,A0,000F -ORI T6,A0,000F -ADDIU A2,A2,000F -SW RA,0014 (SP) -ORI T0,A2,000F -XORI A0,T6,000F -SW A0,001C (SP) -XORI A2,T0,000F -SW V1,0018 (SP) -JAL 7000503C -OR A1,T8,R0 -LW RA,0014 (SP) -LW V1,0018 (SP) -LW A0,001C (SP) -ADDIU SP,SP,0030 -JR RA -ADDU V0,A0,V1 - -700050C8 5CC8 writes A2 bytes from rdram A0 to hardware A1 -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW A1,002C (SP) -SW A0,0028 (SP) -SW A2,0030 (SP) -JAL 70010400 -OR A1,A2,R0 -LW T6,0028 (SP) -LW T7,0030 (SP) -LUI T8,8005 -ADDIU T8,T8,68D0 -LUI A0,8005 -ADDIU A0,A0,68B0 -SW T8,0018 (SP) -OR A1,R0,R0 -ADDIU A2,R0,0001 -LW A3,002C (SP) -SW T6,0010 (SP) -JAL 7000EED0 -SW T7,0014 (SP) -LW RA,0024 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -70005128 5D28 handles hardware write request -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 700050C8 -NOP -JAL 70005010 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/PAL ramrom recorder routines.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/PAL ramrom recorder routines.txt deleted file mode 100644 index 0102ba7..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/PAL ramrom recorder routines.txt +++ /dev/null @@ -1,258 +0,0 @@ -70004FB0 5BB0 reads A2 bytes from hardware A1 to rdram A0 -70005010 5C10 -7000503C 5C3C hardware read request -70005064 5C64 align and read A2 bytes of data from hardware A1 to A0 -700050C8 5CC8 copy A2 bytes from A0 to hardware address A1 -70005128 5D28 handles hardware write request -70005150 5D50 -70013080 13C80 memcpy(A0,A1,A2) - -7F0BF130 F1B20 finalize ramrom on hardware -7F0BF1E0 F1BD0 save ramrom debug feature -7F0BF280 F1C70 load ramrom debug feature -7F0BF2DC F1CCC packet recorder -7F0BFAC0 F24B0 detect if recording currently loading stage or replaying ramrom file -7F0BFC3C F262C record next movie to slot A0 (0-3) -7F0BFC54 F2644 stop recording ramrom -7F0BFC9C F268C replay ramrom file at hardware address A0 -7F0BFD28 F2718 replay ramrom debug feature -7F0BFD48 F2738 set to camera mode A if not already set -7F0BFD7C F276C stop recording or replaying demos - -recording occurs when 80041108 = 1 -recording ceases when 80041104 = 0 - -[+_+] - -7F0BF130 F1B20 finalize ramrom on hardware -ADDIU SP,SP,FFB8 -OR A0,SP,R0 -ADDIU A0,A0,002F -ORI T6,A0,000F -SW RA,0014 (SP) -XORI A0,T6,000F ;A0=SP+20, to nearest quadword -SB R0,0000 (A0) -SB R0,0001 (A0) ;A0+0=0000 -LUI A1,8007 -LW A1,39D4 (A1) ;A1=800739D4: ramrom hardware addy -JAL 70005128 ;write A2 bytes from rdram A0 to hardware A1 -ADDIU A2,R0,0010 ;A2=size -//7F0BF160: read in what's already written to devtool -LUI V0,8007 -ADDIU V0,V0,39D4 -LW T8,0000 (V0) ;T8=800739D4: ramrom hardware addy -LUI A0,8007 -ADDIU A0,A0,3650 ;A0=80073650: ramrom target address -ADDIU T9,T8,0004 -SW T9,0000 (V0) ;T9=T8+4: next word... -LUI A1,00F0 ;A1=0xF00000: hardware address -JAL 70005064 ;align and read A2 bytes of data from hardware A1 to A0 -ADDIU A2,R0,00F0 ;A2=0xF0: size -//7F0BF188: set total size and time to ramrom and write to devtool -LUI V1,8004 -ADDIU V1,V1,10E8 -SW V0,0000 (V1) ;V0->800410E8: return address->demo block -LUI T0,8004 -LUI T1,8004 -LW T1,0FF4 (T1) ;T1=80040FF4: 1 if not paused -LW T0,0FFC (T0) ;T0=80040FFC: ms time in stage -LUI T4,8007 -LUI A1,00F0 ;A1=0xF00000: devtool hardware address -SUBU T2,T0,T1 ;T2=timer-clock -SW T2,007C (V0) ;T2->demo+7C: total time -LW T4,39D4 (T4) ;T4=800739D4: ramrom hardware addy -LW T6,0000 (V1) ;T6=V1+0: p->ramrom -ADDIU A2,R0,00F0 ;A2=0xF0: size -SUBU T5,T4,A1 ;T5=current address - base address: size -SW T5,0080 (T6) ;size->ramrom+80: actual size of ramrom data -JAL 70005128 ;copy A2 bytes from rdram A0 to hardware A1 -LW A0,0000 (V1) ;A0=p->ramrom -//7F0BF1D0: return -LW RA,0014 (SP) -ADDIU SP,SP,0048 -JR RA -NOP - -7F0BF1E0 F1BD0 save ramrom -ADDIU SP,SP,FED0 -SW S2,001C (SP) -SW S3,0020 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LUI S2,8005 -SW RA,0024 (SP) -ADDIU S2,S2,0310 ;S2=80050310: "replay/demo.%d" -ADDIU S0,R0,0001 ;S0=1 -ADDIU S1,SP,002C ;S1=SP+2C: p->buffer for string -ADDIU S3,SP,0028 ;S3=SP+28: p->instance -//7F0BF20C: search for string instance -OR A0,S1,R0 ;A0=S1: p->string -OR A1,S2,R0 ;A1=S2: "replay/demo.%d" -JAL 7000A0F4 ;sprintf(A0,A1,A2,A3) -OR A2,S0,R0 ;A2=S0: count -OR A0,S1,R0 ;A0=S1: p->string -JAL 7F0CF5B8 ;returns V0=p->instance, I think... -OR A1,S3,R0 ;A1=S3: p->instance -BEQ V0,R0,7F0BF238 ;branch if a new entry -NOP -BEQ R0,R0,7F0BF20C ;loop until a new entry found -ADDIU S0,S0,0001 ;S0++ -//7F0BF238: on hit, make final resource name -LUI A1,8005 -ADDIU A1,A1,0320 ;A1=80050320: "replay/demo.%d" -OR A0,S1,R0 ;A0=S1: p->string -JAL 7000A0F4 ;sprintf(A0,A1,A2,A3) -OR A2,S0,R0 ;A2=S0: count -LUI T6,8004 -LW T6,10E8 (T6) ;T6=800410E8: p->demo block -OR A0,S1,R0 ;A0=S1: "name" -LUI A1,00F0 ;A1=0xF00000: devtool hardware address -JAL 7F0CF57C ;save resource A0 of size A2 at A1 -LW A2,0080 (T6) ;A2= demo block+80: size -//7F0BF264: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0130 - -7F0BF280 F1C70 load ramrom -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LUI A0,8005 -ADDIU A0,A0,0330 ;A0=80050330: "replay/demo.load" -JAL 7F0CF5B8 ;request data A0 from PC -ADDIU A1,SP,001C ;A1=SP+1C: p->instance -BEQ V0,R0,7F0BF2CC ;return if no target returned -//7F0BF29C: copy data to memory -LUI A0,8005 -ADDIU A0,A0,0330 ;A0=80050330: "replay/demo.load" -LUI A1,00F0 ;A1=0xF00000: devtool hardware address -JAL 7F0CF53C ;load requested resource A0 from PC to A1 -LW A2,001C (SP) ;A2=SP+1C: p->instance -LUI A0,8007 -ADDIU A0,A0,3650 ;A0=80073650: ramrom target address -LUI A1,00F0 ;A1=0xF00000: devtool hardware address -JAL 70005064 ;align and read A2 bytes of data from hardware A1 to A0 -ADDIU A2,R0,00E8 ;A2=size -LUI AT,8004 -SW V0,10E8 (AT) ;V0->800410E8: p->demo block -//7F0BF2CC: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0BFAC0 F24B0 detect if recording currently loading stage or replaying ramrom file - accepts: A0=stage#. A1=difficulty -LUI T6,8004 -LW T6,1108 (T6) ;T6=80041108: 1- record controller input -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -BEQ T6,R0,7F0BFB9C ;branch if not recording -SW S0,0018 (SP) -//7F0BFAD8: record demo -LUI T7,8007 -ADDIU T7,T7,3650 ;T7=80073650 -ADDIU T8,T7,000F -LUI S0,8004 -ORI T9,T8,000F -ADDIU S0,S0,10E8 ;S0=800410E8 -XORI T0,T9,000F ;T0=80073650 (to nearest quadword, which it already is) -SW T0,0000 (S0) ;80073650->800410E8: p->demo block -LUI AT,8007 -SW R0,39D8 (AT) ;0->800739D8: -LW T1,0000 (S0) ;T1=800410E8: p->demo block -SW A0,0010 (T1) ;A0->demo+10: stage# -LW T2,0000 (S0) ;T2=800410E8: p->demo block -JAL 7000A718 ;V0= #controllers plugged in -SW A1,0014 (T2) ;A1->demo+14: difficulty -LW T3,0000 (S0) ;T3=800410E8: p->demo block -LUI T4,8007 -SW V0,0018 (T3) ;V0->demo+18: #controllers (size of commands) -LW T5,0000 (S0) ;T5=800410E8: p->demo block -LW T4,39D0 (T4) ;T4=800739D0: record slot# -SW T4,0088 (T5) ;record slot# -> demo+88: set # -LW A0,0000 (S0) ;A0=800410E8: p->demo block -JAL 7F01D470 ;copy current folder's eeprom to @A0 -ADDIU A0,A0,001C ;A0+=1C: p->demo eeprom -JAL 7F0BF828 ;copy in-game registers to A0? -LW A0,0000 (S0) ;A0=800410E8: p->demo block -ADDIU V0,R0,0001 -LUI AT,8004 -SW V0,1100 (AT) ;1->80041100: 1- if a ramrom tool running -LUI AT,8004 -LUI A0,7F0C -SW V0,1104 (AT) ;1->80041104: 1- recorder pulling from devtool? -JAL 7000A930 ;set recorder handler function -ADDIU A0,A0,F2DC ;A0=7F0BF2DC: packet recorder function -LUI V0,8007 -ADDIU V0,V0,39D4 -LUI A1,00F0 -SW A1,0000 (V0) ;0xF00000 -> 800739D4: ramrom hardware addy -LW A0,0000 (S0) ;A0=800410E8: p->demo block -JAL 70005128 ;copy A2 bytes from A0 to hardware address A1 -ADDIU A2,R0,00F0 ;A2=0xF0: size -LUI V0,8007 -ADDIU V0,V0,39D4 -LW T7,0000 (V0) ;T7=800739D4: hardware address -LUI AT,8004 -ADDIU T8,T7,00E8 ;T8=hardware+E8: next file offset -SW T8,0000 (V0) ;T8=update hardware address -BEQ R0,R0,7F0BFC28 -SW R0,1108 (AT) ;0->80041108: reset "record stage" flag -//7F0BFB9C: test if playing back recorded demo... -LUI T9,8004 -LW T9,10FC (T9) ;T9=800410FC: 1- run demo -BEQ T9,R0,7F0BFC28 ;branch if normal stage -//7F0BFBA8: run demo -LUI S0,8004 -LUI AT,8007 -ADDIU S0,S0,10E8 -SW R0,39D8 (AT) ;0->800739D8: -LW T0,0000 (S0) ;T0=800410E8: p->demo block -JAL 7F01D3F0 ;A0->difficulty -LW A0,0014 (T0) ;A0=demo+14: difficulty -LW T1,0000 (S0) ;T1=800410E8: p->demo block -JAL 7F01D440 ;A0->stage, set solo, get p->briefing -LW A0,0010 (T1) ;A0=demo+10: stage# -LW A0,0000 (S0) ;A0=800410E8: p->demo block -JAL 7F01D498 ;load eeprom @A0 to temporary buffer -ADDIU A0,A0,001C ;A0+=1C: p->embedded save file -LUI A0,8007 -JAL 7F0BF828 ;copy in-game registers to A0 -ADDIU A0,A0,3760 ;A0=80073760: -JAL 7F0BF974 ;copy ramrom registers from ramrom file A0 -LW A0,0000 (S0) ;A0=800410E8: p->demo block -ADDIU V0,R0,0001 -LUI AT,8004 -SW V0,10F4 (AT) ;1->800410F4: TRUE if demo running -LUI AT,8004 -SW V0,10F8 (AT) ;1->800410F8: TRUE if demo from hardware? -LW T2,0000 (S0) ;T2=800410E8: p->demo block -LUI A0,7F0C -ADDIU A0,A0,F500 ;A0=7F0BF500: ramrom replay handler -JAL 7000A91C ;set playback handler and command size -LW A1,0018 (T2) ;A1=demo+18: #controllers (size of commands) -JAL 7000B67C ;set controller input index to set A0 -ADDIU A0,R0,0001 ;A0= set 1 -LUI AT,8004 -SW R0,10FC (AT) ;0->800410FC: reset run demo flag -//7F0BFC28: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0BFD28 F2718 replay ramrom -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0BFC9C ;replay ramrom file at hardware address A0 -LUI A0,00F0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/ramrom demo files.txt b/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/ramrom demo files.txt deleted file mode 100644 index 185d161..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Ramrom Demos/ramrom demo files.txt +++ /dev/null @@ -1,462 +0,0 @@ -0x0 double: seed for random value -> 80024460 -0x8 double: randomizer -> 80040160 -0x10 stage number -0x14 difficulty -0x18 size of commands in words (# controllers) -0x1C - 0x7C eeprom save file. The whole block is copied to 80069B00. -0x7C total time in ms used in 7F0C0364 -3C, then compare to event ms timer. -0x80 size of entire file -0x84 stored to 8002A8F0 Mode: 0-solo, 1-multi, 2-cheats. 7F00D558 sets return after stage -0x88 read by intro block record slot #, usually 0-3 (set#) - -0x8C stored to 8002B520 # players -0x90 stored to 8002B540 scenario -0x94 stored to 8002B534 MP stage selected (0-B: Random <-> Egypt) -0x98 stored to 8002B538 game length -0x9C stored to 80049160 MP weapon set -0xA0 stored to 8002B524 player1 MP character -0xA4 stored to 8002B528 player2 MP character -0xA8 stored to 8002B52C player3 MP character -0xAC stored to 8002B530 player4 MP character -0xB0 stored to 800697A8 player1 handicap 0-A (5 default) -0xB4 stored to 800697AC player2 handicap -0xB8 stored to 800697B0 player3 handicap -0xBC stored to 800697B4 player4 handicap -0xC0 stored to 800697B8 player1 control style (0-7: Honey <->Goodhead) -0xC4 stored to 800697BC player2 control style -0xC8 stored to 800697C0 player3 control style -0xCC stored to 800697C4 player4 control style -0xD0 stored to 8002B53C aiming option -0xD4 stored to 80079F58 player1 scenario flags, aim, sight settings -0xD8 stored to 80079FC8 player2 scenario flags, aim, sight settings -0xDC stored to 8007A038 player3 scenario flags, aim, sight settings -0xE0 stored to 8007A0A8 player4 scenario flags, aim, sight settings - -0xE8 start controller state packets - -+_+ - -also, COP0 count is stored to 800484B0. Current count - saved count, used to SLTU against 5EB61 - -intro demos - address size command stage -[2BF2D0] 51FC 3 21 (Dam) 00 -[2C44D0] 1FC8 1 21 (Dam) 01 -[2C64A0] 1AAC 1 22 (Facility) 00 -[2C7F50] 23DC 1 22 (Facility) 01 -[2CA330] 1C64 1 22 (Facility) 02 -[2CBFA0] 2748 2 23 (Runway) 00 -[2CE6F0] 2910 2 23 (Runway) 01 -[2D1000] 338C 2 09 (Bunker I) 00 -[2D4390] 5278 2 09 (Bunker I) 01 -[2D9610] 2190 1 14 (Silo) 00 -[2DB7A0] 1FC8 1 14 (Silo) 01 -[2DD770] 19B0 1 1A (Frigate) 00 -[2DF120] 34DC 2 1A (Frigate) 01 -[2E2600] 3DE8 2 19 (Train) 00 - -2DF120 - frigate: starts at bottom of stairs. runs up to door, opens. Shoots guy, turns to left shooting down stairs. turns right, moves to door, opens, moves in and left, fires at guard - -You can find the location the file is loaded to by looking at 80048468 - -8008C5F4 gets the address for the demo loaded - -8004846C stores address for actual code block, one block at a time. -80048470 (0x20) lists code under each "heading", running to next heading - -80048490=previous sum of bytes -80048494=current sum of bytes -80048498=first value in command (difference b/w values) - -8004849C=previous ??? -800484A0=current ??? -800484A8=difference b/w above - -Here's how it works: -0x18 gives the size of each code. Multiply by 4 and save. Code blocks start at 0xE8 in file. -Grab first 4 bytes at 0xE8. Multiply byte 0x1 by size and that should give the block's size. -For instance: -2CE6F0 - 0x18 = 2. 2*4 = 8 (size) - -@ 0xE8: 01 12 CC 51 -12 * 8 (size) = 0x90 - -@ 0x17C: 08 01 9A A4 -1 * 8 (size) = 0x8 - -@ 0x188: 03 03 D4 DD -3 * 8 (size) = 0x18 - -@ 0x1A4: 02 03 EB F8 -3 * 8 (size) = 0x18 - -etc. - ------- -data packets: - -data - read -copies bytes to different address -0x0 -> 0x2 [80065146] -0x1 -> 0x3 [80065147] -0x2 (byteswapped with 0x3 below as shown) -0x3 SLL 8, OR 0x2 byte, -> 0x0 [80065144] - -(0x0 + 0x1 + 0x2 + 0x3) AND 0x00FF. Use this to keep a register of value -converts between ordinary controller feed and PIF format - - -command header: -0x0 used when value 0x2 = @80024464 -0x1 # commands to follow -0x2 compared to value at 80024464 -0x3 should be equal to total sum of header values plus commands in block, AND 0xFF - -when 0x2=@80024464, add (0x0 + 0x1 + 0x2 + 0x3) AND 0xFF + sum of computed commands. should be equal to 0x3 - ------- -command usage: -7000BC6C: -LHU A1,0000 (T5) //A1=command (8006512C) -LHU T3,01F0 (V1) //T3=8006531C -NOR T4,T0,R0 //T4=FFFFFFFF -BNEZ T1,7000BC84 -NOP -BREAK -//7000BC84 -ADDIU AT,R0,FFFF -BNE T1,AT,7000BC9C -LUI AT,8000 -BNE T6,AT,7000BC9C -NOP -BREAK -//7000BC9C -AND T5,A1,T4 -OR T6,T3,T5 -SH T6,01F0 (V1) //T6->8006531C -LW T7,01E0 (A0) //T7=8006530C -ADDIU T8,A2,0001 -BEQL A2,T7,7000BCF0 -ADDIU V0,V0,0001 -DIV T8,T1 -MFHI A2 -BNEZ T1,7000BCCC -NOP -BREAK -//7000BCCC -ADDIU AT,R0,FFFF -BNE T1,AT,7000BCE4 -LUI AT,8000 -BNE T8,AT,7000BCE4 -NOP -BREAK -//7000BCE4 -BEQ R0,R0,7000BC38 -ADDIU T6,A2,0013 - ----------------------- ----------------------- -usage of first randomizer: -7000A450: -LUI A0,8002 -LD A0,4460 (A0) //A0<-80024460; random seed value for most calculations -LUI AT,8002 -DSLL32 A2,A0,0x1F //A2=A0<<63 80000000 00000000 -DSLL A1,A0,0x1F //A1=A0<<31 D82912C3 80000000 -DSRL A2,A2,0x1F //A2=A2>>31 00000001 00000000 -DSRL32 A1,A1,0x0 //A1=A1>>32 00000000 D82912C3 -DSLL32 A0,A0,0xC //A0=A0<<44 22586000 00000000 -OR A2,A2,A1 //A2|=A1 00000001 D82912C3 -DSRL32 A0,A0,0x0 //A0=A0>>32 00000000 22586000 -XOR A2,A2,A0 //A2^=A0 00000001 FA7172C3 -DSRL A0,A2,0x14 //A0=A2>>20 00000000 00000225 -ANDI A0,A0,0x0FFF //A0&=0xFFF 00000000 00000225 -XOR A0,A0,A2 //A0^=A2 00000001 FA7170E6 - end result -DSLL32 V0,A0,0x0 //V0=A0<<32 -SD A0,4460 (AT) //A0->80024460; save it back, yo -JR RA -DSRA32 V0,V0,0x0 //V0=V0>>32; copy the sign bit - ----------------usage of second double, prior to block load possibly ---------------- -7F0C03A8: save current values before overwrite -ADDIU SP,SP,FFE0 -LUI T6,8002 -LUI T7,8002 -LW T7,4464 (T7) //T7<-80024464 (seed1 upper) -LW T6,4460 (T6) //T6<-80024460 (seed1 lower) -SW RA,001C (SP) -SW S0,0018 (SP) -SW T7,0004 (A0) //T7->8008C384 -SW T6,0000 (A0) //T6->8008C380 -LUI T8,8004 -LUI T9,8004 -LW T9,0164 (T9) //T9<-80040164 (seed2 upper) -LW T8,0160 (T8) //T8<-80040160 (seed2 lower) -LUI T0,8003 -SW T9,000C (A0) //T9->8008C38C -SW T8,0008 (A0) //T8->8008C388 -LW T0,A8F0 (T0) //T0<-8002A8F0 (mode) -LUI T1,8003 -LUI T2,8003 -SW T0,0084 (A0) //mode->8008C404 -LW T1,B520 (T1) //T1<-8002B520 (# players) -LUI T3,8003 -LUI T4,8003 -SW T1,008C (A0) //# players->8008C40C -LW T2,B540 (T2) //T2<-8002B540 (scenario) -OR S0,A0,R0 //S0=A0 -SW T2,0090 (A0) //scenario->8008C410 -LW T3,B534 (T3) //T3<-8002B534 (mp stage selected) -SW T3,0094 (A0) //mp stage->8008C414 -LW T4,B538 (T4) //T4<-8002B538 (game length) -JAL 7F0C663C -SW T4,0098 (A0) //game length->8008C418 - -7F0C663C: returns V0=selected MP weapon set -LUI V0,8005 -JR RA -LW V0,9160 (V0) //V0<-80049160 (selected MP weapon set) - -etc... while it makes a copy of all your data - ------------------- ------------------- -7F0C04F4: called by 7F0C0640 to copy demo stuff to current -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -LW T6,0000 (A0) //T6<-8008C270 (seed1 upper) -LW T7,0004 (A0) //T7<-8008C274 (seed1 lower) -LUI AT,8002 -SW T6,4460 (AT) //T6->80024460 -LUI AT,8002 -SW T7,4464 (AT) //T7->80024464 -LW T8,0008 (A0) //T8<-8008C278 (seed2 upper) -LW T9,000C (A0) //T9<-8008C27C (seed2 lower) -LUI AT,8004 -SW T8,0160 (AT) //T8->80040160 -LUI AT,8004 -SW T9,0164 (AT) //T9->80040164 -LW T0,0084 (A0) //T0<-8008C2F4 (mode) -LUI AT,8003 -OR S0,A0,R0 //S0=A0 -SW T0,A8F0 (AT) //mode->8002A8F0 -LW T1,008C (A0) //T1<-8008C2FC (# players) -LUI AT,8003 -SW T1,B520 (AT) //# players->8002B520 -LW T2,0090 (A0) //T2<-8008C300 (scenario) -LUI AT,8003 -SW T2,B540 (AT) //scenario->8002B540 -LW T3,0094 (A0) //T3<-8008C304 (mp stage selected) -LUI AT,8003 -SW T3,B534 (AT) //mp stage->8002B534 -LW T4,0098 (A0) //T4<-8008C308 (game length) -LUI AT,8003 -SW T4,B538 (AT) //game length->8002B538 -JAL 7F0C6630 -LW A0,009C (A0) //A0<-8008C30C (mp weapon set) -LW T5,00A0 (S0) //T5<-8008C310 (p1 mp char) -LUI V0,8003 -ADDIU V0,V0,B524 //V0=8002B524 -SW T5,0000 (V0) //p1 mp char->8002B524 -LW T6,00A4 (S0) //T6<-8008C314 (p2 mp char) -LUI V1,8007 -ADDIU V1,V1,97A8 //V1=800697A8 -SW T6,0004 (V0) //p2 mp char->8002B528 -LW T7,00A8 (S0) //T7<-8008C318 (p3 mp char) -LUI A2,8007 -ADDIU A2,A2,97B8 //A2=800697B8 -SW T7,0008 (V0) //p3 mp char->8002B52C -LW T8,00AC (S0) //T8<-8008C31C (p4 mp char) -LUI AT,8003 -OR A0,R0,R0 -SW T8,000C (V0) //p4 mp char->8002B530 -LW T9,00B0 (S0) //T9<-8008C320 (p1 handicap) -SW T9,0000 (V1) //p1 handicap->800697A8 -LW T0,00B4 (S0) //T0<-8008C324 (p2 handicap) -SW T0,0004 (V1) //p2 handicap->800697AC -LW T1,00B8 (S0) //T1<-8008C328 (p3 handicap) -SW T1,0008 (V1) //p3 handicap->800697B0 -LW T2,00BC (S0) //T2<-8008C32C (p4 handicap) -SW T2,000C (V1) //p4 handicap->800697B4 -LW T3,00C0 (S0) //T3<-8008C330 (p1 control) -SW T3,0000 (A2) //p1 control->800697B8 -LW T4,00C4 (S0) //T4<-8008C334 (p2 control) -SW T4,0004 (A2) //p2 control->800697BC -LW T5,00C8 (S0) //T5<-8008C338 (p3 control) -SW T5,0008 (A2) //p3 control->800697C0 -LW T6,00CC (S0) //T6<-8008C33C (p4 control) -SW T6,000C (A2) //p4 control->800697C4 -LW T7,00D0 (S0) //T7<-8008C340 (aiming option) -SW T7,B53C (AT) //aim->8002B53C -JAL 7F014CA4 -LW A1,00D4 (S0) //A1<-8008C344 (p1 data) -ADDIU A0,R0,0001 -JAL 7F014CA4 -LW A1,00D8 (S0) //A1<-8008C348 (p2 data) -ADDIU A0,R0,0002 -JAL 7F014CA4 -LW A1,00DC (S0) //A1<-8008C34C (p3 data) -ADDIU A0,R0,0003 -JAL 7F014CA4 -LW A1,00E0 (S0) //A1<-8008C350 (p4 data) -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - ---7F014CA4: -SLL T6,A0,0x3 //T6=A0*8; sets offset -SUBU T6,T6,A0 //T6=A0*7 (0,7,E,15) -SLL T6,T6,0x4 //T6=T6*0x10 (0,70,E0,150) -LUI AT,8008 -ADDU AT,AT,T6 //80080000 + offset -JR RA -SB A1,9F59 (AT) //A1->80079F59, 80079FC0, 8007A039, 8007A0A9 - -//7F0C0770: -ADDIU A0,R0,0001 -LUI AT,8005 -SW V0,8474 (AT) //1->80048474 -LUI AT,8005 -SW V0,8478 (AT) //1->80048478 -LW T2,0000 (S0) //T2=80048468 (location for demo file) -LUI A0,7F0C -ADDIU A0,A0,0080 //A0=7F0C0080 -JAL 7000BBA8 -LW A1,0018 (T2) //A1<-8008C288 (# controllers) -JAL 7000C930 -ADDIU A0,R0,0001 //A0=1 -LUI AT,8005 -SW R0,847C (AT) //0->8004847C -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - ---7000BBA8: -LUI AT,8002 -SW A0,6924 (AT) //7F0C0080->80026924 -LUI AT,8006 -JR RA -SW A1,5324 (AT) //# controllers->80065324 - ---7000C930: -SLL T6,A0,0x7 //T6=80 (A0 * 0x80) -SUBU T6,T6,A0 //T6=7F (A0 * 0x7F) -LUI T7,8006 -ADDIU T7,T7,4F30 //T7=80064F30 -SLL T6,T6,0x2 //T6=1FC (T6 * 4) -ADDU T8,T6,T7 //T8=80064F30 + 1FC (8006512C) -LUI AT,8002 -JR RA -SW T8,68C4 (AT) //8006512C->800268C4 - -------------------- -------------------- -7F0C034C: A0=first byte of command -LUI T6,8005 -LW T6,84B0 (T6) //T6<-800484B0 (last cycle's cop0 count) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,8005 -SW A0,0018 (SP) -JAL 7000D8E0 //returns V0= count -SW T6,84AC (AT) //last cycle's cop0 count->800484AC -LUI A0,8005 -LUI AT,8005 -SW V0,84B0 (AT) //cop 0 count->800484B0 -ADDIU A0,A0,8494 //A0=80048494 -LW V1,0000 (A0) //V1<-80048494 -LW A3,0018 (SP) //A3=first byte of command -LUI AT,8005 -SW V1,8490 (AT) //V1->80048490; set current sum to previous -ADDU T7,V1,A3 //T7=sum + first byte -SW T7,0000 (A0) //T7->80048494; current sum -LUI AT,8005 -SW A3,8498 (AT) //first byte->80048498 -LW V1,0000 (A0) //V1<-80048494 (V1=T7) -LUI A1,8005 -ADDIU A1,A1,84A0 //A1=800484A0 -LW T8,0000 (A1) //T8<-800484A0 () -LUI A2,8005 -ADDIU A2,A2,849C //A2=8004849C -ANDI T0,V1,0001 //T0= V1 & 1 -SW T8,0000 (A2) //T8->8004849C; previous sum -BGEZ V1,7F0C0B20 -SRA T9,V1,0x1 //T9=V1*2 -ADDIU AT,V1,0001 //AT=V1+1 -SRA T9,AT,0x1 //T9=AT/2 (2*V1+1)/2 -//7F0C0B20: -SW T9,0000 (A1) //T9->800484A0 -LUI AT,8005 -SW T0,84A4 (AT) //T0->800484A4 -LW T2,0000 (A2) //T2<-8004849C -LW T1,0000 (A1) //T1<-800484A0 -LW RA,0014 (SP) -LUI AT,8005 -SUBU T3,T1,T2 //T3=cur-prev -SW T3,84A8 (AT) //difference->800484A8 -JR RA -ADDIU SP,SP,0018 - - ----- This tampers with the count -7000646C: -LUI T5,8005 -LW T5,84B0 (T5) //T5<-800484B0 (cop0 count) -LUI AT,0005 -ORI AT,AT,EB61 //AT<-0005EB61 -SUBU V1,V0,T5 //V1=current count - old count -SLTU AT,V1,AT //AT ? difference < 5EB61 -BEQ AT,R0,70006498 -LUI V0,8002 -LUI V0,8002 -BEQ R0,R0,700068A4 -LW V0,42FC (V0) //V0<-800242FC () -//70006498: -LW V0,42FC (V0) -SLTIU AT,S8,0002 -BGEZ V0,700068A4 -NOP - - ----- -7F0C0354: -LUI T9,8005 -LW T9,8468 (T9) //T9<-80048468 (header) -LUI V0,8005 -LW V0,837C (V0) //V0<-8004837C (# sec so far) -LW V1,007C (T9) //V1=time -LUI T1,8005 -ADDIU V1,V1,FFC4 //V1=time-0x3C (60) -SLT AT,V0,V1 //AT=V0microcode, A1=bytes per row, A2=rows, A3=p->target, SP+10=p->address to save base offset value - note: all images, from the player's perspective, are rotated left 90 deg. -ADDIU SP,SP,FFE8 -SW S3,0014 (SP) -SW S2,0010 (SP) -SW S1,000C (SP) -SW S0,0008 (SP) -SW A1,001C (SP) ;SP+1C=A1: width [50] -SW A2,0020 (SP) ;SP+20=A2: height [60] -LBU V0,0000 (A0) ;V0=first byte of microcode [8002BB30] -LW T7,0028 (SP) ;T7=SP+10 from caller: [803B3687] -OR S0,A3,R0 ;S0=[800FC540] -ANDI S1,A2,00FF ;S1=A2: #rows -ANDI T1,A1,00FF ;T1=A1: width (#bytes per row) -ADDIU A0,A0,0001 ;A0++ next byte -ADDIU S2,R0,00FF ;S2=FF: -ADDIU S3,R0,00FF ;S3=FF: -SB V0,0000 (T7) ;first byte -> [803B3687]: last byte of a TLB pointer? [7F089200] -LBU A1,0000 (A0) ;A1=value -//7F01CB24: determine command type -ADDIU A0,A0,0001 ;A0++: next byte -ANDI A2,S3,00FF ;A2=S3: FF -BNE S2,A1,7F01CBDC ;branch if A1 != FF -ANDI T8,A1,001F ;T8=A1 & 0x1F: first 5 bits -//7F01CB34: ALTERNATE command -LBU V1,0000 (A0) ;V1=next value -OR A3,R0,R0 ;A3=0 -ADDIU A0,A0,0001 ;A0++: next byte -BEQ S2,V1,7F01CB9C ;branch if value = FF -OR A1,V1,R0 ;A1=V1: this value -//7F01CB48: loop byte copy -ADDU A3,A3,A1 ;A3+=A1: A3+=value. From above, this is A1 -ADDIU V1,V1,FFFF ;V1--: A1-- -ANDI T8,A3,00FF ;T8=A3 -> 1 byte -ANDI T9,V1,00FF ;T9=V1 -> 1 byte -SLT T0,R0,A1 ;T0=TRUE if 0 < value -OR A3,T8,R0 ;A3 -> 1 byte -BEQ T0,R0,7F01CB84 ;branch if count above 0 -OR V1,T9,R0 ;V1 -> 1 byte -//7F01CB68: second value > 0 -SLT T0,R0,V1 ;T0=TRUE if 0 < count -ADDIU V1,V1,FFFF ;V1-- -ANDI T6,V1,00FF -OR V1,T6,R0 ;V1 -> 1 byte -SB A2,0000 (S0) ;A2->S0: A2-> [800FC540]+offset -BNEZ T0,7F01CB68 ;loop if count > 0 -ADDIU S0,S0,0001 ;S0++ -//7F01CB84: second value <= 0 -LBU V1,0000 (A0) ;V1=value -XORI T7,A2,00FF ;T7=A2^FF: invert bits FF<->00 -ANDI A2,T7,00FF ;A2=T7 -ADDIU A0,A0,0001 ;A0++: next byte -BNE S2,V1,7F01CB48 ;branch if value !=FF -OR A1,V1,R0 ;A1=value -//7F01CB9C: second value FF as well -SLT T0,A3,T1 ;T0=A3 < T1: copied bytes < #per row -ADDIU A3,A3,0001 ;A3++ -ANDI T9,A3,00FF -BEQ T0,R0,7F01CBCC ;branch if copied larger than in row -OR A3,T9,R0 ;A3 -> 1 byte -//7F01CBB0: loop -SLT T0,A3,T1 ;T0=TRUE when copied region smaller than size -ADDIU A3,A3,0001 ;A3++ -ANDI T6,A3,00FF -OR A3,T6,R0 ;A3 -> 1 byte -SB A2,0000 (S0) ;A2->S0: fill until correct size -BNEZ T0,7F01CBB0 ;loop until copied region matches size -ADDIU S0,S0,0001 ;S0++ -//7F01CBCC: copied bytes < #per row -ADDIU S1,S1,FFFF ;S1++: rows-1 -ANDI T7,S1,00FF -BEQ R0,R0,7F01CC70 -OR S1,T7,R0 ;S1 -> 1 byte -//7F01CBDC: value != 0 -//copies a series of rows which must be #FFs, rest zeroes -ADDU A3,V0,T8 ;A3=first value + 5bits from second -SRA V1,A1,0x5 ;V1=last 3 bits -ANDI T9,A3,00FF ;T9=A3 -> 1 byte -ADDIU V1,V1,0001 ;V1++ -ANDI T6,V1,00FF ;T6=V1 academic, since can't be over 8 -SUBU A2,T1,T9 ;A2=seg.size-(base+value:5) -SUBU S1,S1,T6 ;S1-=(value:3+1) #rows -ANDI T8,A2,00FF ;T8=A2 -> 1 byte -ANDI T7,S1,00FF -OR V1,T6,R0 ;V1=T6: rows -OR S1,T7,R0 ;S1 -> 1 byte -SLT T4,R0,T8 ;T4=TRUE if 0 < seg.size-size -ADDIU T5,T8,FFFF ;T5=seg.size-size-- -SLT T2,R0,T9 ;T2=TRUE if 0 < base+size -ADDIU T3,T9,FFFF ;T3=base+size-- -//7F01CC18: handle FF's in line -BEQ T2,R0,7F01CC3C ;branch if no data -ANDI A2,T3,00FF ;A2=base+size-- -> 1 byte -//7F01CC20: copy base+value:5 FF's to output -SLT T0,R0,A2 ;T0=TRUE if 0 < base+size-- -ADDIU A2,A2,FFFF ;A2-- -ANDI T9,A2,00FF -OR A2,T9,R0 ;A2 -> 1 byte -SB S3,0000 (S0) ;FF->output -BNEZ T0,7F01CC20 ;loop while more data -ADDIU S0,S0,0001 ;S0++ -//7F01CC3C: handle remaining zeroes in line -BEQ T4,R0,7F01CC60 ;branch if nothing to copy -ANDI A2,T5,00FF ;A2=seg.size-size-- -> 1 byte -//7F01CC44: copy row-value:5 zeroes to output -SLT T0,R0,A2 ;T0=TRUE if 0 < seg.size-size -ADDIU A2,A2,FFFF ;A2-- -ANDI T6,A2,00FF -OR A2,T6,R0 ;A2 -> 1 byte -SB R0,0000 (S0) ; 0->output -BNEZ T0,7F01CC44 ;loop for remainder of line -ADDIU S0,S0,0001 ;S0++ -//7F01CC60: -ADDIU V1,V1,FFFF ;V1--: rows-1 -ANDI T7,V1,00FF -BGTZ T7,7F01CC18 ;loop for each row -OR V1,T7,R0 ;V1 -> 1 byte -BGTZL S1,7F01CB24 ;branch while more lines needed -LBU A1,0000 (A0) -//7F01CC78: return -LW S0,0008 (SP) -LW S1,000C (SP) -LW S2,0010 (SP) -LW S3,0014 (SP) -ADDIU SP,SP,0018 -JR RA -OR V0,A0,R0 ;p->end of table, or last thingy read diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADA0-ADBA.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADA0-ADBA.bin deleted file mode 100644 index c99eb94..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADA0-ADBA.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADBA-ADDD.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADBA-ADDD.bin deleted file mode 100644 index 9910113..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADBA-ADDD.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADDD-AE1B.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADDD-AE1B.bin deleted file mode 100644 index 40db222..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/ADDD-AE1B.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AE1B-AE6C.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AE1B-AE6C.bin deleted file mode 100644 index f4589a0..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AE1B-AE6C.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AE6C-AEBB.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AE6C-AEBB.bin deleted file mode 100644 index 98d49d8..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AE6C-AEBB.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AEBB-AF20.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AEBB-AF20.bin deleted file mode 100644 index 1c540c8..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AEBB-AF20.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AF20-AF85.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AF20-AF85.bin deleted file mode 100644 index 9a64939..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AF20-AF85.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AF85-AFE2.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AF85-AFE2.bin deleted file mode 100644 index 0ecd1f3..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AF85-AFE2.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AFE2-B037.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AFE2-B037.bin deleted file mode 100644 index 9c9a400..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/AFE2-B037.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B037-B077.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B037-B077.bin deleted file mode 100644 index 34b009e..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B037-B077.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B077-B0B5.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B077-B0B5.bin deleted file mode 100644 index 58e3eb8..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B077-B0B5.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B0B5-B0F4.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B0B5-B0F4.bin deleted file mode 100644 index 7e3d977..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B0B5-B0F4.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B0F4-B13C.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B0F4-B13C.bin deleted file mode 100644 index 6e95412..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B0F4-B13C.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B13C-B187.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B13C-B187.bin deleted file mode 100644 index 09a9181..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B13C-B187.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B187-B1C2.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B187-B1C2.bin deleted file mode 100644 index 43fa2c9..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B187-B1C2.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B1C2-B1FD.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B1C2-B1FD.bin deleted file mode 100644 index 13f5501..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B1C2-B1FD.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B1FD-B234.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B1FD-B234.bin deleted file mode 100644 index 1b95467..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B1FD-B234.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B234-B276.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B234-B276.bin deleted file mode 100644 index aecac64..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B234-B276.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B276-B2B2.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B276-B2B2.bin deleted file mode 100644 index aae1419..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B276-B2B2.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B2B2-B2EA.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B2B2-B2EA.bin deleted file mode 100644 index 2191744..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B2B2-B2EA.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B2EA-B325.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B2EA-B325.bin deleted file mode 100644 index 3230757..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B2EA-B325.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B325-B357.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B325-B357.bin deleted file mode 100644 index 2be4846..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B325-B357.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B357-B38D.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B357-B38D.bin deleted file mode 100644 index 0e7e401..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B357-B38D.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B38D-B3CE.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B38D-B3CE.bin deleted file mode 100644 index 3b81ba9..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B38D-B3CE.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B3CE-B426.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B3CE-B426.bin deleted file mode 100644 index 4b6cff5..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B3CE-B426.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B426-B487.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B426-B487.bin deleted file mode 100644 index 19fcd84..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B426-B487.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B487-B4BB.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B487-B4BB.bin deleted file mode 100644 index bc2f89a..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B487-B4BB.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B4BB-B4EE.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B4BB-B4EE.bin deleted file mode 100644 index e00bf19..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B4BB-B4EE.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B4EE-B524.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B4EE-B524.bin deleted file mode 100644 index bde70fd..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B4EE-B524.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B524-B55E.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B524-B55E.bin deleted file mode 100644 index 471e1b0..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B524-B55E.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B55E-B594.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B55E-B594.bin deleted file mode 100644 index 31fc56a..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B55E-B594.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B594-B5D0.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B594-B5D0.bin deleted file mode 100644 index 371f8eb..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B594-B5D0.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B5D0-B612.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B5D0-B612.bin deleted file mode 100644 index 9193ceb..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B5D0-B612.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B612-B64F.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B612-B64F.bin deleted file mode 100644 index a104f13..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B612-B64F.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B64F-B688.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B64F-B688.bin deleted file mode 100644 index 719a124..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B64F-B688.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B688-B6C1.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B688-B6C1.bin deleted file mode 100644 index f39dc02..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B688-B6C1.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B6C1-B6FA.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B6C1-B6FA.bin deleted file mode 100644 index 5ed215e..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B6C1-B6FA.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B6FA-B725.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B6FA-B725.bin deleted file mode 100644 index d2dd1e8..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B6FA-B725.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B725-B741.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B725-B741.bin deleted file mode 100644 index cf4905d..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B725-B741.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B741-B758.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B741-B758.bin deleted file mode 100644 index 6efd306..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B741-B758.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B758-B76F.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B758-B76F.bin deleted file mode 100644 index 6efd306..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B758-B76F.bin and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B76F-B77C.bin b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B76F-B77C.bin deleted file mode 100644 index a684b78..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Decrypted Binaries/B76F-B77C.bin +++ /dev/null @@ -1 +0,0 @@ -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADA0.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADA0.bmp deleted file mode 100644 index 2e88a71..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADA0.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADBA.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADBA.bmp deleted file mode 100644 index c5237be..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADBA.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADDD.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADDD.bmp deleted file mode 100644 index 35d4b8a..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/ADDD.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AE1B.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AE1B.bmp deleted file mode 100644 index a4d35c4..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AE1B.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AE6C.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AE6C.bmp deleted file mode 100644 index c47f035..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AE6C.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AEBB.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AEBB.bmp deleted file mode 100644 index 1afff48..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AEBB.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AF20.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AF20.bmp deleted file mode 100644 index 289dbbb..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AF20.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AF85.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AF85.bmp deleted file mode 100644 index cc6b600..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AF85.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AFE2.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AFE2.bmp deleted file mode 100644 index dc77e99..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/AFE2.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B037.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B037.bmp deleted file mode 100644 index a75dd95..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B037.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B077.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B077.bmp deleted file mode 100644 index aa5c2b6..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B077.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B0B5.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B0B5.bmp deleted file mode 100644 index fa11dcf..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B0B5.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B0F4.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B0F4.bmp deleted file mode 100644 index 76f1092..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B0F4.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B13C.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B13C.bmp deleted file mode 100644 index d10141c..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B13C.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B187.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B187.bmp deleted file mode 100644 index f68350f..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B187.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B1C2.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B1C2.bmp deleted file mode 100644 index 1712f62..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B1C2.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B1FD.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B1FD.bmp deleted file mode 100644 index ba97799..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B1FD.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B234.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B234.bmp deleted file mode 100644 index 8badcb5..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B234.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B276.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B276.bmp deleted file mode 100644 index d45c9bd..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B276.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B2B2.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B2B2.bmp deleted file mode 100644 index 29b351e..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B2B2.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B2EA.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B2EA.bmp deleted file mode 100644 index d00de21..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B2EA.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B325.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B325.bmp deleted file mode 100644 index 83f0faf..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B325.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B357.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B357.bmp deleted file mode 100644 index 586c5c5..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B357.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B38D.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B38D.bmp deleted file mode 100644 index d2196cc..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B38D.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B3CE.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B3CE.bmp deleted file mode 100644 index d49bec1..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B3CE.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B426.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B426.bmp deleted file mode 100644 index ffb36e5..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B426.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B487.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B487.bmp deleted file mode 100644 index 7bb2d02..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B487.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B4BB.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B4BB.bmp deleted file mode 100644 index b723b73..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B4BB.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B4EE.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B4EE.bmp deleted file mode 100644 index d7e9a70..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B4EE.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B524.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B524.bmp deleted file mode 100644 index e8c916a..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B524.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B55E.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B55E.bmp deleted file mode 100644 index 6d1206e..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B55E.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B594.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B594.bmp deleted file mode 100644 index aed465f..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B594.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B5D0.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B5D0.bmp deleted file mode 100644 index 2cdcb35..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B5D0.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B612.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B612.bmp deleted file mode 100644 index dd97552..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B612.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B64F.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B64F.bmp deleted file mode 100644 index eeaf3b1..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B64F.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B688.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B688.bmp deleted file mode 100644 index 5d27b26..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B688.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B6C1.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B6C1.bmp deleted file mode 100644 index 2380eed..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B6C1.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B6FA.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B6FA.bmp deleted file mode 100644 index 442d5f8..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B6FA.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B725.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B725.bmp deleted file mode 100644 index 1652045..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B725.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B741.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B741.bmp deleted file mode 100644 index 046ab62..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B741.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B758.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B758.bmp deleted file mode 100644 index 046ab62..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B758.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B76F.bmp b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B76F.bmp deleted file mode 100644 index 4458fce..0000000 Binary files a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/Extracted Images/B76F.bmp and /dev/null differ diff --git a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/death animation format.txt b/notes/GE Documentation/Gameplay and Misc/Red Death Animation/death animation format.txt deleted file mode 100644 index 696f358..0000000 --- a/notes/GE Documentation/Gameplay and Misc/Red Death Animation/death animation format.txt +++ /dev/null @@ -1,108 +0,0 @@ - There are 42 frames in the bleeding animation, each an intensity-only 80x96 (50x60) image. - Effectively, these are 1-bit images, indicating red or clear. This is feathered at least 5 pixels at runtime to give a smoother appearance. - -Encrypted Format: - -First byte is saved. Acts as an offset value, indicating how many columns on the left are always filled with FFs when using multirow commands. - -There are two commands possible: -command 1: write x duplicate rows of base+y FF's. Fill rest with zeroes. -value: 3:5 3bits high, 5 bits low - copy base+value:5 FFs - fill rest of row with 00s - loop above two operations value:3 times - -command 2: alternate FF/00 writes -value: FF alternate FF/00 writes in row. Starts by writing FFs, then 00s, then FFs, etc. - next: !FF write x bytes - invert write value from FF<->00 - loop until an FF value is reached - fill remaining seg.size with current write value - -+_+ - -Example 1: -Assume width is 10, for convenience in these examples only -4B.25.FF0104FF - 00 base value. no offset - 25 Multirow: 1:5 - create two rows (1), each with base + 5 FFs - FF Alternate: start setting FFs - 01 write 1 FF. Invert write value to 00 - 04 write 4 00s. Invert write value to FF - FF fill remaining with FF - -Result 1: -FF FF FF FF FF 00 00 00 00 00 ;multirow command (25) -FF FF FF FF FF 00 00 00 00 00 ;multirow command (25) -FF 00 00 00 00 FF FF FF FF FF ;Alternate command (FF0104FF) - - -Example 2: -Commonly, alternate commands will use 0 to fill left with zeroes before drawing red. -Note, only multirow command use the base value. This is ignored by alternate commands. -08.FF000304FF.FF000206FF.FF0001030203FF.FF0001030203FF.FF000206FF.FF000304FF - 08 base value. first 8 blocks are set as FF in multirow command only. - FF Alternate: start setting FFs - 00 write 0 FFs. Invert write value to 00 - 03 write 3 00s. Invert write value to FF - 04 write 4 FFs. Invert write value to 00 - FF fill remaining with 00 - FF Alternate: start setting FFs - 00 write 0 FFs. Invert write value to 00 - 02 write 2 00s. Invert write value to FF - 06 write 6 FFs. Invert write value to 00 - FF fill remaining with 00 - FF Alternate: start setting FFs - 00 write 0 FFs. Invert write value to 00 - 01 write 1 00s. Invert write value to FF - 03 write 3 FFs. Invert write value to 00 - 02 write 2 00s. Invert write value to FF - 03 write 3 FFs. Invert write value to 00 - FF fill remaining with 00 - FF Alternate: start setting FFs - 00 write 0 FFs. Invert write value to 00 - 01 write 1 00s. Invert write value to FF - 03 write 3 FFs. Invert write value to 00 - 02 write 2 00s. Invert write value to FF - 03 write 3 FFs. Invert write value to 00 - FF fill remaining with 00 - FF Alternate: start setting FFs - 00 write 0 FFs. Invert write value to 00 - 02 write 2 00s. Invert write value to FF - 06 write 6 FFs. Invert write value to 00 - FF fill remaining with 00 - FF Alternate: start setting FFs - 00 write 0 FFs. Invert write value to 00 - 03 write 3 00s. Invert write value to FF - 04 write 4 FFs. Invert write value to 00 - FF fill remaining with 00 - -Result 2: -00 00 00 FF FF FF FF 00 00 00 -00 00 FF FF FF FF FF FF 00 00 -00 FF FF FF 00 00 FF FF FF 00 -00 FF FF FF 00 00 FF FF FF 00 -00 00 FF FF FF FF FF FF 00 00 -00 00 00 FF FF FF FF 00 00 00 - - -Example 3: - Multirow writes are highly efficient. By setting the base value you can fill most of the image with black and only edit the leading edge. -07.00.01.22.63 - 07 base value. First seven blocks are set FF in multirow commands. - 00 Multirow: 0:0 - create one row (0), each with base + 0 FFs (7) - 01 Multirow: 0:1 - create one row (0), each with base + 1 FFs (8) - 22 Multirow: 1:2 - create two rows (1), each with base + 2 FFs (9) - 63 Multirow: 3:3 - create four rows (3), each with base + 3 FFs (10) - -Result 3: -FF FF FF FF FF FF FF 00 00 00 -FF FF FF FF FF FF FF FF 00 00 -FF FF FF FF FF FF FF FF FF 00 -FF FF FF FF FF FF FF FF FF 00 -FF FF FF FF FF FF FF FF FF FF -FF FF FF FF FF FF FF FF FF FF -FF FF FF FF FF FF FF FF FF FF -FF FF FF FF FF FF FF FF FF FF - --Zoinkity diff --git a/notes/GE Documentation/Gameplay and Misc/System/700101A0.txt b/notes/GE Documentation/Gameplay and Misc/System/700101A0.txt deleted file mode 100644 index c8fce39..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/700101A0.txt +++ /dev/null @@ -1,421 +0,0 @@ -700101A0 10DA0 -LUI K0,8007 -ADDIU K0,K0,8E30 -SD AT,0020 (K0) -MFC0 K1,Status/DPC-Clock -SW K1,0118 (K0) -ADDIU AT,R0,FFFC -AND K1,K1,AT -MTC0 K1,Status/DPC-Clock -SD T0,0058 (K0) -SD T1,0060 (K0) -SD T2,0068 (K0) -SW R0,0018 (K0) -MFC0 T0,Cause/DPC-Buf.Busy -OR T0,K0,R0 -LUI K0,8002 -LW K0,7730 (K0) -LD T1,0020 (T0) -SD T1,0020 (K0) -LD T1,0118 (T0) -SD T1,0118 (K0) -LD T1,0058 (T0) -SD T1,0058 (K0) -LD T1,0060 (T0) -SD T1,0060 (K0) -LD T1,0068 (T0) -SD T1,0068 (K0) -LW K1,0118 (K0) -MFLO T0 -SD T0,0108 (K0) -MFHI T0 -ANDI T1,K1,FF00 -SD V0,0028 (K0) -SD V1,0030 (K0) -SD A0,0038 (K0) -SD A1,0040 (K0) -SD A2,0048 (K0) -SD A3,0050 (K0) -SD T3,0070 (K0) -SD T4,0078 (K0) -SD T5,0080 (K0) -SD T6,0088 (K0) -SD T7,0090 (K0) -SD S0,0098 (K0) -SD S1,00A0 (K0) -SD S2,00A8 (K0) -SD S3,00B0 (K0) -SD S4,00B8 (K0) -SD S5,00C0 (K0) -SD S6,00C8 (K0) -SD S7,00D0 (K0) -SD T8,00D8 (K0) -SD T9,00E0 (K0) -SD GP,00E8 (K0) -SD SP,00F0 (K0) -SD S8,00F8 (K0) -SD RA,0100 (K0) -BEQ T1,R0,700102B8 -SD T0,0110 (K0) -LUI T0,8002 -ADDIU T0,T0,698C -LW T0,0000 (T0) -ADDIU AT,R0,FFFF -XOR T0,T0,AT -LUI AT,FFFF -ANDI T0,T0,FF00 -ORI AT,AT,00FF -OR T1,T1,T0 -AND K1,K1,AT -OR K1,K1,T1 -SW K1,0118 (K0) -//700102B8: -LUI T1,A430 -LW T1,000C (T1) -BEQ T1,R0,700102F0 -NOP -LUI T0,8002 -ADDIU T0,T0,698C -LW T0,0000 (T0) -LW T4,0128 (K0) -ADDIU AT,R0,FFFF -SRL T0,T0,0x10 -XOR T0,T0,AT -ANDI T0,T0,003F -AND T0,T0,T4 -OR T1,T1,T0 -//700102F0: -SW T1,0128 (K0) -MFC0 T0,ExpectPC/DPC-Pipe Busy -SW T0,011C (K0) -LW T0,0018 (K0) -BEQ T0,R0,70010354 -NOP -CFC1 T0,F31 -NOP -SW T0,012C (K0) -SDC1 F0,0130 (K0) -SDC1 F2,0138 (K0) -SDC1 F4,0140 (K0) -SDC1 F6,0148 (K0) -SDC1 F8,0150 (K0) -SDC1 F10,0158 (K0) -SDC1 F12,0160 (K0) -SDC1 F14,0168 (K0) -SDC1 F16,0170 (K0) -SDC1 F18,0178 (K0) -SDC1 F20,0180 (K0) -SDC1 F22,0188 (K0) -SDC1 F24,0190 (K0) -SDC1 F26,0198 (K0) -SDC1 F28,01A0 (K0) -SDC1 F30,01A8 (K0) -//70010354: -MFC0 T0,Cause/DPC-Buf.Busy -SW T0,0120 (K0) -ADDIU T1,R0,0002 -SH T1,0010 (K0) -ANDI T1,T0,007C -ADDIU T2,R0,0024 -BEQ T1,T2,70010630 -NOP -ADDIU T2,R0,002C -BEQ T1,T2,70010778 -NOP -ADDIU T2,R0,0000 -BNE T1,T2,70010694 -NOP -AND S0,K1,T0 -//70010390: -ANDI T1,S0,FF00 -SRL T2,T1,0xC -BNE T2,R0,700103A8 -NOP -SRL T2,T1,0x8 -ADDI T2,T2,0010 -//700103A8: -LUI AT,8003 -ADDU AT,AT,T2 -LBU T2,9440 (AT) -LUI AT,8003 -ADDU AT,AT,T2 -LW T2,9460 (AT) -JR T2 -NOP -//700103C8: 2,3 -ADDIU AT,R0,DFFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//700103D4: 4,5,6,7 -ADDIU AT,R0,BFFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//700103E0: 8,9,A,B,C,D,E,F -MFC0 T1,Compare/DPC-Status -MTC0 T1,Compare/DPC-Status -JAL 700106C4 -ADDIU A0,R0,0018 -LUI AT,FFFF -ORI AT,AT,7FFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010400: 18,19,1A,1B,1C,1D,1E,1F -ADDIU AT,R0,F7FF -AND S0,S0,AT -ADDIU T2,R0,0004 -LUI AT,8002 -ADDU AT,AT,T2 -LW T2,7700 (AT) -LUI SP,8006 -ADDIU SP,SP,7DF0 -ADDIU A0,R0,0010 -BEQ T2,R0,70010444 -ADDIU SP,SP,0FF0 -JALR RA,T2 -NOP -BEQ V0,R0,70010444 -NOP -BEQ R0,R0,70010648 -NOP -//70010444: -JAL 700106C4 -NOP -BEQ R0,R0,70010390 -NOP -//70010454: 14,15,16,17 -LUI T0,8002 -ADDIU T0,T0,698C -LW T0,0000 (T0) -LUI S1,A430 -LW S1,0008 (S1) -SRL T0,T0,0x10 -AND S1,S1,T0 -ANDI T1,S1,0001 -BEQ T1,R0,700104C4 -NOP -LUI T4,A404 -LW T4,0010 (T4) ;T4=A4040010: SP Status -ADDIU T1,R0,0008 -LUI AT,A404 -ANDI T4,T4,0300 -ANDI S1,S1,003E -BEQ T4,R0,700104B4 -SW T1,0010 (AT) ;8->A4040010: SP Status -JAL 700106C4 -ADDIU A0,R0,0020 -BEQ S1,R0,70010588 -NOP -BEQ R0,R0,700104C4 -NOP -//700104B4: -JAL 700106C4 -ADDIU A0,R0,0058 -BEQ S1,R0,70010588 -NOP -//700104C4: reset VI cur.line to top -ANDI T1,S1,0008 -BEQ T1,R0,700104E8 -LUI AT,A440 -ANDI S1,S1,0037 -SW R0,0010 (AT) ;0->A4400010: VI Cur.Line -JAL 700106C4 -ADDIU A0,R0,0038 -BEQ S1,R0,70010588 -NOP -//700104E8: reset AI Status -ANDI T1,S1,0004 -BEQ T1,R0,70010514 -NOP -ADDIU T1,R0,0001 -LUI AT,A450 -ANDI S1,S1,003B -SW T1,000C (AT) ;1->A450000C: AI Status -JAL 700106C4 -ADDIU A0,R0,0030 -BEQ S1,R0,70010588 -NOP -//70010514: reset SI Status -ANDI T1,S1,0002 -BEQ T1,R0,70010538 -LUI AT,A480 -ANDI S1,S1,003D -SW R0,0018 (AT) ;0->A4800018: SI Status -JAL 700106C4 -ADDIU A0,R0,0028 -BEQ S1,R0,70010588 -NOP -//70010538: reset PI Status -ANDI T1,S1,0010 -BEQ T1,R0,70010564 -NOP -ADDIU T1,R0,0002 -LUI AT,A460 -ANDI S1,S1,002F -SW T1,0010 (AT) ;2->A4600010: PI Status -JAL 700106C4 -ADDIU A0,R0,0040 -BEQ S1,R0,70010588 -NOP -//70010564: -ANDI T1,S1,0020 -BEQ T1,R0,70010588 -NOP -ADDIU T1,R0,0800 -LUI AT,A430 -ANDI S1,S1,001F -SW T1,0000 (AT) -JAL 700106C4 -ADDIU A0,R0,0048 -//70010588: -ADDIU AT,R0,FBFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010594: 1 -LW K1,0118 (K0) -ADDIU AT,R0,EFFF -LUI T1,8002 -AND K1,K1,AT -SW K1,0118 (K0) -ADDIU T1,T1,6988 -LW T2,0000 (T1) -BEQ T2,R0,700105C0 -ADDIU AT,R0,EFFF -BEQ R0,R0,70010648 -AND S0,S0,AT -//700105C0: -ADDIU T2,R0,0001 -SW T2,0000 (T1) -JAL 700106C4 -ADDIU A0,R0,0070 -LUI T2,8002 -LW T2,7728 (T2) -ADDIU AT,R0,EFFF -AND S0,S0,AT -LW K1,0118 (T2) -AND K1,K1,AT -BEQ R0,R0,70010648 -SW K1,0118 (T2) -//700105F0: 12,13 -ADDIU AT,R0,FDFF -AND T0,T0,AT -MTC0 T0,Cause/DPC-Buf.Busy -JAL 700106C4 -ADDIU A0,R0,0008 -ADDIU AT,R0,FDFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010610: 11 -ADDIU AT,R0,FEFF -AND T0,T0,AT -MTC0 T0,Cause/DPC-Buf.Busy -JAL 700106C4 -ADDIU A0,R0,0000 -ADDIU AT,R0,FEFF -BEQ R0,R0,70010390 -AND S0,S0,AT -//70010630: -ADDIU T1,R0,0001 -SH T1,0012 (K0) -JAL 700106C4 -ADDIU A0,R0,0050 -BEQ R0,R0,70010648 -NOP -//70010648: 0,10 -LUI T2,8002 -LW T2,7728 (T2) -LW T1,0004 (K0) -LW T3,0004 (T2) -SLT AT,T1,T3 -BEQ AT,R0,7001067C -NOP -LUI A0,8002 -OR A1,K0,R0 -JAL 700108AC -ADDIU A0,A0,7728 -J 70010904 -NOP -//7001067C: -LUI T1,8002 -ADDIU T1,T1,7728 -LW T2,0000 (T1) -SW T2,0000 (K0) -J 70010904 -SW K0,0000 (T1) -//70010694: -LUI AT,8002 -SW K0,7734 (AT) -ADDIU T1,R0,0001 -SH T1,0010 (K0) -ADDIU T1,R0,0002 -SH T1,0012 (K0) -MFC0 T2,BadVAddr/DPC-Start -SW T2,0124 (K0) -JAL 700106C4 -ADDIU A0,R0,0060 -J 70010904 -NOP - -700106C4 -LUI T2,8006 -ADDIU T2,T2,6A10 -ADDU T2,T2,A0 -LW T1,0000 (T2) -OR S2,RA,R0 -BEQ T1,R0,70010770 -NOP -LW T3,0008 (T1) -LW T4,0010 (T1) -SLT AT,T3,T4 -BEQ AT,R0,70010770 -NOP -LW T5,000C (T1) -ADDU T5,T5,T3 -DIV T5,T4 -BNE T4,R0,7001070C -NOP -BREAK 00001C00 -//7001070C: -ADDIU AT,R0,FFFF -BNE T4,AT,70010724 -LUI AT,8000 -BNE T5,AT,70010724 -NOP -BREAK 00001800 -//70010724: -LW T4,0014 (T1) -MFHI T5 -SLL T5,T5,0x2 -ADDU T4,T4,T5 -LW T5,0004 (T2) -ADDIU T2,T3,0001 -SW T5,0000 (T4) -SW T2,0008 (T1) -LW T2,0000 (T1) -LW T3,0000 (T2) -BEQ T3,R0,70010770 -NOP -JAL 700108F4 -OR A0,T1,R0 -OR T2,V0,R0 -LUI A0,8002 -OR A1,T2,R0 -JAL 700108AC -ADDIU A0,A0,7728 -//70010770: -JR S2 -NOP - -70010778 -LUI AT,3000 -AND T1,T0,AT -SRL T1,T1,0x1C -ADDIU T2,R0,0001 -BNE T1,T2,70010694 -NOP -LW K1,0118 (K0) -LUI AT,2000 -ADDIU T1,R0,0001 -OR K1,K1,AT -SW T1,0018 (K0) -BEQ R0,R0,7001067C -SW K1,0118 (K0) diff --git a/notes/GE Documentation/Gameplay and Misc/System/70200000 - 33590 - RareZip.txt b/notes/GE Documentation/Gameplay and Misc/System/70200000 - 33590 - RareZip.txt deleted file mode 100644 index 5d49545..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/70200000 - 33590 - RareZip.txt +++ /dev/null @@ -1,1374 +0,0 @@ -RareZip decompression library... - -70200000: -ADDIU SP,SP,FA10 -SW S2,0010 (SP) -OR S2,A0,R0 -SW RA,002C (SP) -SW S8,0028 (SP) -SW S7,0024 (SP) -SW S6,0020 (SP) -SW S5,001C (SP) -SW S4,0018 (SP) -SW S3,0014 (SP) -SW S1,000C (SP) -SW S0,0008 (SP) -SW A2,05F8 (SP) -SW A3,05FC (SP) -SW R0,05A8 (SP) -ADDIU V1,SP,05AC -ADDIU V0,SP,05EC -ADDIU V1,V1,0010 -SW R0,FFF4 (V1) -SW R0,FFF8 (V1) -SW R0,FFFC (V1) -BNE V1,V0,-5 -SW R0,FFF0 (V1) -ANDI V0,A1,0003 -SUBU V0,R0,V0 -OR RA,S2,R0 -BEQ V0,R0,+13 -OR S0,A1,R0 -ADDU V1,V0,A1 -ADDIU A0,SP,05A8 -LW T6,0000 (RA) -ADDIU S0,S0,FFFF -ADDIU RA,RA,0004 -SLL T7,T6,0x2 -ADDU V0,A0,T7 -LW T8,0000 (V0) -ADDIU T9,T8,0001 -BNE V1,S0,-8 -SW T9,0000 (V0) -BEQ S0,R0,+28 -ADDIU A0,SP,05A8 -LW T6,0000 (RA) -ADDIU S0,S0,FFFC -ADDIU RA,RA,0010 -SLL T7,T6,0x2 -ADDU V0,A0,T7 -LW T8,0000 (V0) -ADDIU T9,T8,0001 -SW T9,0000 (V0) -LW T6,FFF4 (RA) -SLL T7,T6,0x2 -ADDU V0,A0,T7 -LW T8,0000 (V0) -ADDIU T9,T8,0001 -SW T9,0000 (V0) -LW T6,FFF8 (RA) -SLL T7,T6,0x2 -ADDU V0,A0,T7 -LW T8,0000 (V0) -ADDIU T9,T8,0001 -SW T9,0000 (V0) -LW T6,FFFC (RA) -SLL T7,T6,0x2 -ADDU V0,A0,T7 -LW T8,0000 (V0) -ADDIU T9,T8,0001 -BNE S0,R0,-26 -SW T9,0000 (V0) -LW T6,05A8 (SP) -LW A2,0608 (SP) -ADDIU A3,R0,0001 -BNE A1,T6,+7 -ADDIU T0,SP,05AC -LW S6,0604 (SP) -LW A2,0608 (SP) -OR V0,R0,R0 -SW R0,0000 (S6) -BEQ R0,R0,+315 -SW R0,0000 (A2) -LW S1,0000 (A2) -ADDIU V0,R0,0011 -LW T7,0000 (T0) -BNEL T7,R0,+5 -SLTU AT,S1,A3 -ADDIU A3,A3,0001 -BNE A3,V0,-5 -ADDIU T0,T0,0004 -SLTU AT,S1,A3 -BEQ AT,R0,+2 -OR S5,A3,R0 -OR S1,A3,R0 -ADDIU S0,R0,0010 -ADDIU V0,SP,05E8 -LW T8,0000 (V0) -BNEL T8,R0,+5 -SLTU AT,S0,S1 -ADDIU S0,S0,FFFF -BNE S0,R0,-5 -ADDIU V0,V0,FFFC -SLTU AT,S0,S1 -BEQ AT,R0,+2 -SW S0,05A0 (SP) -OR S1,S0,R0 -ADDIU T9,R0,0001 -SLTU AT,A3,S0 -SW S1,0000 (A2) -BEQ AT,R0,+11 -SLLV V1,T9,A3 -SLL T6,S0,0x2 -ADDIU T7,SP,05A8 -ADDU A2,T6,T7 -LW T8,0000 (T0) -ADDIU T0,T0,0004 -SLTU AT,T0,A2 -SUBU V1,V1,T8 -SLL T9,V1,0x1 -BNE AT,R0,-6 -OR V1,T9,R0 -LW T0,0000 (V0) -ADDIU S0,S0,FFFF -OR A3,R0,R0 -SUBU V1,V1,T0 -ADDU T6,T0,V1 -SW T6,0000 (V0) -SW R0,0078 (SP) -ADDIU RA,SP,05AC -ADDIU A2,SP,007C -SW A1,05F4 (SP) -BEQ S0,R0,+35 -ADDIU V0,V0,FFFC -ANDI T0,S0,0003 -SUBU T0,R0,T0 -BEQ T0,R0,+14 -SW A1,05F4 (SP) -ADDU T1,T0,S0 -SLL T7,T1,0x2 -ADDIU T8,SP,05A8 -ADDU A1,T7,T8 -LW T9,0000 (RA) -ADDIU V0,V0,FFFC -ADDIU A2,A2,0004 -ADDU A3,A3,T9 -SW A3,FFFC (A2) -BNE A1,V0,-6 -ADDIU RA,RA,0004 -ADDIU T6,SP,05A8 -BEQ V0,T6,+17 -ADDIU A1,SP,05A8 -LW T8,0000 (RA) -ADDIU V0,V0,FFF0 -ADDIU A2,A2,0010 -ADDU A3,A3,T8 -SW A3,FFF0 (A2) -LW T9,0004 (RA) -ADDIU RA,RA,0010 -ADDU A3,A3,T9 -SW A3,FFF4 (A2) -LW T6,FFF8 (RA) -ADDU A3,A3,T6 -SW A3,FFF8 (A2) -LW T7,FFFC (RA) -ADDU A3,A3,T7 -BNE V0,A1,-15 -SW A3,FFFC (A2) -LW T3,05F4 (SP) -OR RA,S2,R0 -OR S0,R0,R0 -ADDIU T1,SP,00BC -ADDIU A2,SP,0074 -LW A3,0000 (RA) -ADDIU RA,RA,0004 -BEQ A3,R0,+8 -SLL T9,A3,0x2 -ADDU V0,A2,T9 -LW A1,0000 (V0) -SLL T6,A1,0x2 -ADDU T7,T1,T6 -SW S0,0000 (T7) -ADDIU T8,A1,0001 -SW T8,0000 (V0) -ADDIU S0,S0,0001 -SLTU AT,S0,T3 -BNEL AT,R0,-13 -LW A3,0000 (RA) -LW T9,05A0 (SP) -SW V1,006C (SP) -OR S0,R0,R0 -SLT AT,T9,S5 -SW R0,0074 (SP) -OR RA,T1,R0 -ADDIU T4,R0,FFFF -SUBU T2,R0,S1 -SW R0,053C (SP) -OR A2,R0,R0 -BNE AT,R0,+191 -OR T0,R0,R0 -SLL T6,S5,0x2 -ADDIU T7,SP,05A8 -ADDU T8,T6,T7 -LUI S8,7020 -LUI S3,7020 -ADDIU S3,S3,1598 -ADDIU S8,S8,1490 -SW T8,0050 (SP) -LW S6,0604 (SP) -ADDIU S4,SP,057C -LW T9,0050 (SP) -LW T7,05F4 (SP) -SLL T5,T4,0x2 -LW S7,0000 (T9) -ADDIU T6,SP,0074 -SLL T8,T7,0x2 -OR A1,S7,R0 -BEQ S7,R0,+164 -ADDIU S7,S7,FFFF -ADDU T3,T5,T6 -ADDIU T9,SP,00BC -ADDU T6,T8,T9 -ADDIU T8,R0,0001 -ADDIU T7,S5,001F -SLLV T9,T8,T7 -SW T9,0034 (SP) -SW T6,0038 (SP) -ADDU V1,T2,S1 -SLT AT,V1,S5 -BEQ AT,R0,+71 -ADDIU S2,S7,0001 -ADDIU T6,SP,053C -ADDU T1,T5,T6 -LW T8,05A0 (SP) -ADDIU T4,T4,0001 -ADDIU T5,T5,0004 -SUBU T0,T8,V1 -SLTU AT,S1,T0 -ADDIU T1,T1,0004 -ADDIU T3,T3,0004 -BEQ AT,R0,+2 -OR T2,V1,R0 -OR T0,S1,R0 -SUBU V0,S5,T2 -ADDIU T7,R0,0001 -SLLV A0,T7,V0 -SLTU AT,S2,A0 -BEQ AT,R0,+19 -OR A3,V0,R0 -ADDIU A3,V0,0001 -SUBU V1,A0,S7 -SLL T9,S5,0x2 -ADDIU T6,SP,05A8 -SLTU AT,A3,T0 -ADDIU V1,V1,FFFF -BEQ AT,R0,+11 -ADDU A2,T9,T6 -LW A0,0004 (A2) -SLL V0,V1,0x1 -ADDIU A2,A2,0004 -SLTU AT,A0,V0 -BEQL AT,R0,+6 -LW V1,0000 (S3) -ADDIU A3,A3,0001 -SLTU AT,A3,T0 -BNE AT,R0,-9 -SUBU V1,V0,A0 -LW V1,0000 (S3) -LW T9,0000 (S8) -ADDIU T8,R0,0001 -SLLV T0,T8,A3 -SLL T7,V1,0x3 -ADDU T6,V1,T0 -ADDIU T8,T6,0001 -ADDU A2,T7,T9 -SW T8,0000 (S3) -ADDIU A0,A2,0008 -SW A0,0000 (S6) -SW R0,0004 (A2) -ADDIU S6,A2,0004 -OR A2,A0,R0 -BEQ T4,R0,+15 -SW A0,0000 (T1) -SW S0,0000 (T3) -ADDIU T7,A3,0010 -SB S1,057D (SP) -SB T7,057C (SP) -SW A0,0580 (SP) -LW T9,FFFC (T1) -SUBU T6,T2,S1 -LW AT,0000 (S4) -SRLV T8,S0,T6 -SLL T7,T8,0x3 -ADDU T6,T9,T7 -SW AT,0000 (T6) -LW T7,0004 (S4) -SW T7,0004 (T6) -ADDU V1,T2,S1 -SLT AT,V1,S5 -BNEL AT,R0,-66 -LW T8,05A0 (SP) -LW T8,0038 (SP) -ADDIU T9,R0,0001 -SUBU V1,S5,T2 -SLLV A1,T9,T2 -SLTU AT,RA,T8 -SB V1,057D (SP) -BNE AT,R0,+4 -ADDIU A1,A1,FFFF -ADDIU T6,R0,0063 -BEQ R0,R0,+32 -SB T6,057C (SP) -LW V0,0000 (RA) -LW T7,05F8 (SP) -LW A0,05F8 (SP) -LW T9,0600 (SP) -SLTU AT,V0,T7 -BEQ AT,R0,+11 -SLTIU AT,V0,0100 -BEQ AT,R0,+4 -ADDIU T8,R0,000F -ADDIU T9,R0,0010 -BEQ R0,R0,+2 -SB T9,057C (SP) -SB T8,057C (SP) -LW T6,0000 (RA) -ADDIU RA,RA,0004 -BEQ R0,R0,+15 -SH T6,0580 (SP) -SUBU T7,V0,A0 -ADDU T8,T7,T9 -LBU T6,0000 (T8) -LW T7,05FC (SP) -ADDIU RA,RA,0004 -SB T6,057C (SP) -LW T9,FFFC (RA) -SLL T8,T9,0x1 -SLL T9,A0,0x1 -ADDU T6,T7,T8 -SUBU T7,R0,T9 -ADDU T8,T6,T7 -LHU T9,0000 (T8) -SH T9,0580 (SP) -SRLV A3,S0,T2 -SLTU AT,A3,T0 -BEQ AT,R0,+11 -ADDIU T6,R0,0001 -SLLV V0,T6,V1 -LW AT,0000 (S4) -SLL T7,A3,0x3 -ADDU T8,A2,T7 -SW AT,0000 (T8) -LW T6,0004 (S4) -ADDU A3,A3,V0 -SLTU AT,A3,T0 -BNE AT,R0,-8 -SW T6,0004 (T8) -LW A3,0034 (SP) -LW V0,0000 (T3) -AND T7,S0,A3 -BEQ T7,R0,+5 -SRL T9,A3,0x1 -XOR S0,S0,A3 -AND T8,S0,T9 -BNE T8,R0,-4 -OR A3,T9,R0 -XOR S0,S0,A3 -AND T6,S0,A1 -BEQ T6,V0,+11 -OR A1,S7,R0 -SUBU T2,T2,S1 -ADDIU T7,R0,0001 -SLLV T9,T7,T2 -LW T7,FFFC (T3) -ADDIU T8,T9,FFFF -AND T6,S0,T8 -ADDIU T4,T4,FFFF -ADDIU T5,T5,FFFC -BNE T6,T7,-9 -ADDIU T3,T3,FFFC -BNE S7,R0,-154 -ADDIU S7,S7,FFFF -LW T9,0050 (SP) -LW T6,05A0 (SP) -ADDIU S5,S5,0001 -ADDIU T8,T9,0004 -SLT AT,T6,S5 -BEQ AT,R0,-178 -SW T8,0050 (SP) -SW S6,0604 (SP) -LW V0,006C (SP) -SLTU T7,R0,V0 -BEQ T7,R0,+4 -OR V0,T7,R0 -LW V0,05A0 (SP) -XORI T9,V0,0001 -SLTU V0,R0,T9 -LW RA,002C (SP) -LW S0,0008 (SP) -LW S1,000C (SP) -LW S2,0010 (SP) -LW S3,0014 (SP) -LW S4,0018 (SP) -LW S5,001C (SP) -LW S6,0020 (SP) -LW S7,0024 (SP) -LW S8,0028 (SP) -JR RA -ADDIU SP,SP,05F0 - -70200654: -ADDIU SP,SP,FFF0 -LUI T3,7020 -ADDIU T3,T3,156C -SW S1,0008 (SP) -SW S0,0004 (SP) -SLL T6,A2,0x1 -SLL T8,A3,0x1 -OR S0,A2,R0 -OR S1,A3,R0 -LUI T1,7020 -LUI T0,7020 -LUI V1,7020 -ADDU T7,T3,T6 -ADDU T9,T3,T8 -LUI A3,7020 -LUI A2,7020 -SW S2,000C (SP) -SW A0,0010 (SP) -SW A1,0014 (SP) -LW T1,1564 (T1) -LW T0,1568 (T0) -LW V1,148C (V1) -LHU T4,0000 (T7) -LHU T5,0000 (T9) -ADDIU A2,A2,1484 -ADDIU A3,A3,1488 -SLTU AT,T0,S0 -BEQ AT,R0,+12 -LUI V0,7020 -LW V0,1480 (V0) -LW S2,0000 (A3) -ADDU T6,V0,S2 -LBU T7,0000 (T6) -ADDIU T9,S2,0001 -SW T9,0000 (A3) -SLLV T8,T7,T0 -ADDIU T0,T0,0008 -SLTU AT,T0,S0 -BNE AT,R0,-9 -OR T1,T1,T8 -LW T8,0010 (SP) -AND T6,T1,T4 -SLL T7,T6,0x3 -ADDU A1,T7,T8 -LBU A0,0000 (A1) -SLTIU AT,A0,0011 -BNEL AT,R0,+31 -LBU V0,0001 (A1) -LBU V0,0001 (A1) -ADDIU A0,A0,FFF0 -SUBU T0,T0,V0 -SLTU AT,T0,A0 -BEQ AT,R0,+13 -SRLV T1,T1,V0 -LUI V0,7020 -LW V0,1480 (V0) -LW S2,0000 (A3) -ADDU T9,V0,S2 -LBU T6,0000 (T9) -ADDIU T8,S2,0001 -SW T8,0000 (A3) -SLLV T7,T6,T0 -ADDIU T0,T0,0008 -SLTU AT,T0,A0 -BNE AT,R0,-9 -OR T1,T1,T7 -SLL T9,A0,0x1 -ADDU T6,T3,T9 -LHU T7,0000 (T6) -LW T6,0004 (A1) -AND T8,T7,T1 -SLL T9,T8,0x3 -ADDU A1,T9,T6 -LBU A0,0000 (A1) -SLTIU AT,A0,0011 -BEQL AT,R0,-27 -LBU V0,0001 (A1) -LBU V0,0001 (A1) -ADDIU AT,R0,0010 -SRLV T1,T1,V0 -BNE A0,AT,+7 -SUBU T0,T0,V0 -LW T8,0000 (A2) -LHU T7,0004 (A1) -ADDU T9,T8,V1 -ADDIU V1,V1,0001 -BEQ R0,R0,-61 -SB T7,0000 (T9) -ADDIU AT,R0,000F -BEQ A0,AT,+151 -LUI V0,7020 -SLTU AT,T0,A0 -BEQL AT,R0,+13 -SLL T6,A0,0x1 -LW V0,1480 (V0) -LW S2,0000 (A3) -ADDU T6,V0,S2 -LBU T8,0000 (T6) -ADDIU T9,S2,0001 -SW T9,0000 (A3) -SLLV T7,T8,T0 -ADDIU T0,T0,0008 -SLTU AT,T0,A0 -BNE AT,R0,-9 -OR T1,T1,T7 -SLL T6,A0,0x1 -ADDU T8,T3,T6 -LHU T7,0000 (T8) -LHU T6,0004 (A1) -SUBU T0,T0,A0 -SLTU AT,T0,S1 -AND T9,T7,T1 -SRLV T1,T1,A0 -BEQ AT,R0,+13 -ADDU T2,T9,T6 -LUI V0,7020 -LW V0,1480 (V0) -LW S2,0000 (A3) -ADDU T8,V0,S2 -LBU T7,0000 (T8) -ADDIU T6,S2,0001 -SW T6,0000 (A3) -SLLV T9,T7,T0 -ADDIU T0,T0,0008 -SLTU AT,T0,S1 -BNE AT,R0,-9 -OR T1,T1,T9 -LW T9,0014 (SP) -AND T8,T1,T5 -SLL T7,T8,0x3 -ADDU A1,T7,T9 -LBU A0,0000 (A1) -SLTIU AT,A0,0011 -BNEL AT,R0,+31 -LBU V0,0001 (A1) -LBU V0,0001 (A1) -ADDIU A0,A0,FFF0 -SUBU T0,T0,V0 -SLTU AT,T0,A0 -BEQ AT,R0,+13 -SRLV T1,T1,V0 -LUI V0,7020 -LW V0,1480 (V0) -LW S2,0000 (A3) -ADDU T6,V0,S2 -LBU T8,0000 (T6) -ADDIU T9,S2,0001 -SW T9,0000 (A3) -SLLV T7,T8,T0 -ADDIU T0,T0,0008 -SLTU AT,T0,A0 -BNE AT,R0,-9 -OR T1,T1,T7 -SLL T6,A0,0x1 -ADDU T8,T3,T6 -LHU T7,0000 (T8) -LW T8,0004 (A1) -AND T9,T7,T1 -SLL T6,T9,0x3 -ADDU A1,T6,T8 -LBU A0,0000 (A1) -SLTIU AT,A0,0011 -BEQL AT,R0,-27 -LBU V0,0001 (A1) -LBU V0,0001 (A1) -SUBU T0,T0,V0 -SLTU AT,T0,A0 -BEQ AT,R0,+13 -SRLV T1,T1,V0 -LUI V0,7020 -LW V0,1480 (V0) -LW S2,0000 (A3) -ADDU T7,V0,S2 -LBU T9,0000 (T7) -ADDIU T8,S2,0001 -SW T8,0000 (A3) -SLLV T6,T9,T0 -ADDIU T0,T0,0008 -SLTU AT,T0,A0 -BNE AT,R0,-9 -OR T1,T1,T6 -LHU T7,0004 (A1) -SLL T6,A0,0x1 -ADDU T8,T3,T6 -SUBU T9,V1,T7 -LHU T7,0000 (T8) -SUBU T0,T0,A0 -AND T6,T7,T1 -SUBU V0,T9,T6 -SRLV T1,T1,A0 -OR A0,T2,R0 -ANDI S2,A0,0003 -SUBU S2,R0,S2 -BEQ S2,R0,+13 -OR T2,R0,R0 -ADDU A1,S2,A0 -LW S2,0000 (A2) -ADDIU A0,A0,FFFF -ADDU T8,V0,S2 -LBU T7,0000 (T8) -ADDU T9,S2,V1 -ADDIU V1,V1,0001 -ADDIU V0,V0,0001 -BNE A1,A0,-8 -SB T7,0000 (T9) -BEQ A0,R0,+31 -NOP -LW S2,0000 (A2) -ADDIU A0,A0,FFFC -ADDU T6,V0,S2 -LBU T8,0000 (T6) -ADDU T7,S2,V1 -ADDIU V0,V0,0001 -SB T8,0000 (T7) -LW S2,0000 (A2) -ADDIU V1,V1,0001 -ADDU T9,V0,S2 -LBU T6,0000 (T9) -ADDU T8,S2,V1 -ADDIU V0,V0,0001 -SB T6,0000 (T8) -LW S2,0000 (A2) -ADDIU V1,V1,0001 -ADDU T7,V0,S2 -LBU T9,0000 (T7) -ADDU T6,S2,V1 -ADDIU V0,V0,0001 -SB T9,0000 (T6) -LW S2,0000 (A2) -ADDIU V1,V1,0001 -ADDU T8,V0,S2 -LBU T7,0000 (T8) -ADDU T9,S2,V1 -ADDIU V1,V1,0001 -ADDIU V0,V0,0001 -BNE A0,R0,-29 -SB T7,0000 (T9) -BNEL T2,R0,-47 -OR A0,T2,R0 -BEQ R0,R0,-213 -SLTU AT,T0,S0 -LUI AT,7020 -SW V1,148C (AT) -LUI AT,7020 -SW T1,1564 (AT) -LUI AT,7020 -LW S0,0004 (SP) -LW S1,0008 (SP) -LW S2,000C (SP) -SW T0,1568 (AT) -ADDIU SP,SP,0010 -JR RA -OR V0,R0,R0 - -70200A48: -LUI T1,7020 -ADDIU T1,T1,1568 -LW A0,0000 (T1) -LUI T0,7020 -ADDIU T0,T0,1564 -ANDI V0,A0,0007 -LW V1,0000 (T0) -LUI T2,7020 -SUBU A0,A0,V0 -ADDIU T2,T2,148C -SLTIU AT,A0,0010 -LW A1,0000 (T2) -BEQ AT,R0,+15 -SRLV V1,V1,V0 -LUI A2,7020 -LUI T3,7020 -ADDIU T3,T3,1488 -LW A2,1480 (A2) -LW A3,0000 (T3) -ADDU T6,A2,A3 -LBU T7,0000 (T6) -ADDIU T9,A3,0001 -SW T9,0000 (T3) -SLLV T8,T7,A0 -ADDIU A0,A0,0008 -SLTIU AT,A0,0010 -BNE AT,R0,-9 -OR V1,V1,T8 -ADDIU A0,A0,FFF0 -LUI T3,7020 -ANDI V0,V1,FFFF -SRL T5,V1,0x10 -SLTIU AT,A0,0010 -ADDIU T3,T3,1488 -BEQ AT,R0,+13 -OR V1,T5,R0 -LUI A2,7020 -LW A2,1480 (A2) -LW A3,0000 (T3) -ADDU T6,A2,A3 -LBU T7,0000 (T6) -ADDIU T9,A3,0001 -SW T9,0000 (T3) -SLLV T8,T7,A0 -ADDIU A0,A0,0008 -SLTIU AT,A0,0010 -BNE AT,R0,-9 -OR V1,V1,T8 -OR A2,V0,R0 -SRL T5,V1,0x10 -OR V1,T5,R0 -ADDIU A0,A0,FFF0 -BEQ V0,R0,+27 -ADDIU V0,V0,FFFF -LUI T4,7020 -ADDIU T4,T4,1484 -SLTIU AT,A0,0008 -BEQ AT,R0,+12 -LUI A2,7020 -LW A2,1480 (A2) -LW A3,0000 (T3) -ADDU T6,A2,A3 -LBU T7,0000 (T6) -ADDIU T9,A3,0001 -SW T9,0000 (T3) -SLLV T8,T7,A0 -ADDIU A0,A0,0008 -SLTIU AT,A0,0008 -BNE AT,R0,-9 -OR V1,V1,T8 -LW T5,0000 (T4) -OR A2,V0,R0 -SRL T7,V1,0x8 -ADDU T6,T5,A1 -SB V1,0000 (T6) -ADDIU A1,A1,0001 -OR V1,T7,R0 -ADDIU A0,A0,FFF8 -BNE V0,R0,-23 -ADDIU V0,V0,FFFF -SW A1,0000 (T2) -SW V1,0000 (T0) -SW A0,0000 (T1) -JR RA -OR V0,R0,R0 - -70200B9C: -ADDIU SP,SP,FB40 -SW RA,0024 (SP) -ADDIU V0,SP,002C -ADDIU A0,SP,026C -ADDIU V1,R0,0008 -ADDIU V0,V0,0010 -SW V1,FFF4 (V0) -SW V1,FFF8 (V0) -SW V1,FFFC (V0) -BNE V0,A0,-5 -SW V1,FFF0 (V0) -ADDIU T6,SP,042C -SLTU AT,V0,T6 -BEQ AT,R0,+7 -ADDIU T7,SP,048C -ADDIU A1,SP,042C -ADDIU A0,R0,0009 -ADDIU V0,V0,0004 -SLTU AT,V0,A1 -BNE AT,R0,-3 -SW A0,FFFC (V0) -SLTU AT,V0,T7 -BEQ AT,R0,+7 -ADDIU T8,SP,04AC -ADDIU A1,SP,048C -ADDIU A0,R0,0007 -ADDIU V0,V0,0004 -SLTU AT,V0,A1 -BNE AT,R0,-3 -SW A0,FFFC (V0) -SLTU AT,V0,T8 -BEQ AT,R0,+6 -ADDIU T9,R0,0007 -ADDIU A0,SP,04AC -ADDIU V0,V0,0004 -SLTU AT,V0,A0 -BNE AT,R0,-3 -SW V1,FFFC (V0) -LUI T0,7020 -ADDIU T0,T0,14E8 -LUI A3,7020 -ADDIU T1,SP,04B8 -ADDIU T2,SP,04B0 -SW T9,04B0 (SP) -SW T2,0018 (SP) -SW T1,0014 (SP) -ADDIU A3,A3,14A8 -SW T0,0010 (SP) -ADDIU A0,SP,002C -ADDIU A1,R0,0120 -JAL 70200000 -ADDIU A2,R0,0101 -ADDIU T3,R0,0005 -ADDIU T4,R0,0005 -SW T4,0030 (SP) -SW T3,002C (SP) -ADDIU V0,SP,0034 -ADDIU A0,SP,00A4 -ADDIU V1,R0,0005 -ADDIU V0,V0,0010 -SW V1,FFF4 (V0) -SW V1,FFF8 (V0) -SW V1,FFFC (V0) -BNE V0,A0,-5 -SW V1,FFF0 (V0) -LUI T6,7020 -ADDIU T5,R0,0005 -ADDIU T6,T6,1544 -LUI A3,7020 -ADDIU T7,SP,04B4 -ADDIU T8,SP,04AC -SW T5,04AC (SP) -SW T8,0018 (SP) -SW T7,0014 (SP) -ADDIU A3,A3,1508 -SW T6,0010 (SP) -ADDIU A0,SP,002C -ADDIU A1,R0,001E -JAL 70200000 -OR A2,R0,R0 -LW A0,04B8 (SP) -LW A1,04B4 (SP) -LW A2,04B0 (SP) -JAL 70200654 -LW A3,04AC (SP) -LW RA,0024 (SP) -ADDIU SP,SP,04C0 -OR V0,R0,R0 -JR RA -NOP - -70200D04: -LUI T0,7020 -LW T0,1568 (T0) -ADDIU SP,SP,FA98 -LUI T1,7020 -SLTIU AT,T0,0005 -SW RA,002C (SP) -SW S0,0028 (SP) -BEQ AT,R0,+15 -LW T1,1564 (T1) -LUI V1,7020 -LUI T2,7020 -ADDIU T2,T2,1488 -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T6,V1,V0 -LBU T7,0000 (T6) -ADDIU T9,V0,0001 -SW T9,0000 (T2) -SLLV T8,T7,T0 -ADDIU T0,T0,0008 -SLTIU AT,T0,0005 -BNE AT,R0,-9 -OR T1,T1,T8 -ANDI T6,T1,001F -ADDIU T0,T0,FFFB -LUI T2,7020 -ADDIU T7,T6,0101 -SRL T8,T1,0x5 -SLTIU AT,T0,0005 -ADDIU T2,T2,1488 -SW T7,053C (SP) -BEQ AT,R0,+13 -OR T1,T8,R0 -LUI V1,7020 -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T9,V1,V0 -LBU T6,0000 (T9) -ADDIU T8,V0,0001 -SW T8,0000 (T2) -SLLV T7,T6,T0 -ADDIU T0,T0,0008 -SLTIU AT,T0,0005 -BNE AT,R0,-9 -OR T1,T1,T7 -ANDI T9,T1,001F -ADDIU T0,T0,FFFB -ADDIU T6,T9,0001 -SRL T7,T1,0x5 -SLTIU AT,T0,0004 -SW T6,0538 (SP) -BEQ AT,R0,+13 -OR T1,T7,R0 -LUI V1,7020 -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T8,V1,V0 -LBU T9,0000 (T8) -ADDIU T7,V0,0001 -SW T7,0000 (T2) -SLLV T6,T9,T0 -ADDIU T0,T0,0008 -SLTIU AT,T0,0004 -BNE AT,R0,-9 -OR T1,T1,T6 -ANDI A2,T1,000F -ADDIU A2,A2,0004 -SRL T8,T1,0x4 -OR T1,T8,R0 -ADDIU T0,T0,FFFC -BEQ A2,R0,+29 -OR A0,R0,R0 -LUI A1,7020 -ADDIU A1,A1,1494 -ADDIU S0,SP,0040 -SLTIU AT,T0,0003 -BEQ AT,R0,+13 -ADDIU A0,A0,0001 -LUI V1,7020 -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T9,V1,V0 -LBU T6,0000 (T9) -ADDIU T8,V0,0001 -SW T8,0000 (T2) -SLLV T7,T6,T0 -ADDIU T0,T0,0008 -SLTIU AT,T0,0003 -BNE AT,R0,-9 -OR T1,T1,T7 -LBU T6,0000 (A1) -ANDI T9,T1,0007 -ADDIU A1,A1,0001 -SLL T7,T6,0x2 -ADDU T8,S0,T7 -SRL T6,T1,0x3 -SW T9,0000 (T8) -OR T1,T6,R0 -BNE A0,A2,-24 -ADDIU T0,T0,FFFD -SLTIU AT,A0,0013 -BEQ AT,R0,+13 -ADDIU S0,SP,0040 -LUI T7,7020 -ADDIU T7,T7,1494 -LUI V0,7020 -ADDIU V0,V0,14A7 -ADDU A1,A0,T7 -LBU T9,0000 (A1) -ADDIU A1,A1,0001 -SLTU AT,A1,V0 -SLL T8,T9,0x2 -ADDU T6,S0,T8 -BNE AT,R0,-6 -SW R0,0000 (T6) -ADDIU T7,R0,0007 -ADDIU T9,SP,0550 -ADDIU T8,SP,0548 -SW T7,0548 (SP) -SW T8,0018 (SP) -SW T9,0014 (SP) -OR A0,S0,R0 -ADDIU A1,R0,0013 -ADDIU A2,R0,0013 -OR A3,R0,R0 -SW R0,0010 (SP) -SW T0,0534 (SP) -JAL 70200000 -SW T1,0530 (SP) -LW T9,0548 (SP) -LW T6,053C (SP) -LW T7,0538 (SP) -LUI T3,7020 -SLL T8,T9,0x1 -LUI T2,7020 -ADDU T3,T3,T8 -ADDU A3,T6,T7 -ADDIU T2,T2,1488 -LW T0,0534 (SP) -LW T1,0530 (SP) -LHU T3,156C (T3) -OR A2,R0,R0 -BEQ A3,R0,+138 -OR A1,R0,R0 -ADDIU T5,R0,0011 -ADDIU T4,R0,0010 -LW T6,0548 (SP) -LUI V1,7020 -SLTU AT,T0,T6 -BEQL AT,R0,+14 -LW T6,0550 (SP) -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T7,V1,V0 -LBU T9,0000 (T7) -LW T7,0548 (SP) -ADDIU T6,V0,0001 -SLLV T8,T9,T0 -ADDIU T0,T0,0008 -SLTU AT,T0,T7 -OR T1,T1,T8 -BNE AT,R0,-10 -SW T6,0000 (T2) -LW T6,0550 (SP) -AND T9,T1,T3 -SLL T8,T9,0x3 -ADDU T7,T8,T6 -SW T7,054C (SP) -LBU A0,0001 (T7) -SLL T9,A1,0x2 -ADDU T8,S0,T9 -SRLV T1,T1,A0 -SUBU T0,T0,A0 -LHU A0,0004 (T7) -SLTIU AT,A0,0010 -BEQ AT,R0,+5 -NOP -OR A2,A0,R0 -SW A0,0000 (T8) -BEQ R0,R0,+98 -ADDIU A1,A1,0001 -BNE A0,T4,+32 -SLTIU AT,T0,0002 -BEQ AT,R0,+12 -LUI V1,7020 -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T6,V1,V0 -LBU T7,0000 (T6) -ADDIU T8,V0,0001 -SW T8,0000 (T2) -SLLV T9,T7,T0 -ADDIU T0,T0,0008 -SLTIU AT,T0,0002 -BNE AT,R0,-9 -OR T1,T1,T9 -ANDI A0,T1,0003 -ADDIU A0,A0,0003 -OR V1,A0,R0 -SRL T6,T1,0x2 -OR T1,T6,R0 -ADDIU T0,T0,FFFE -BEQ A0,R0,+75 -ADDIU A0,A0,FFFF -SLL T7,A1,0x2 -ADDU V0,S0,T7 -OR V1,A0,R0 -SW A2,0000 (V0) -ADDIU A1,A1,0001 -ADDIU V0,V0,0004 -BNE A0,R0,-5 -ADDIU A0,A0,FFFF -BEQ R0,R0,+66 -SLTU AT,A1,A3 -BNE A0,T5,+33 -OR A2,R0,R0 -SLTIU AT,T0,0003 -BEQ AT,R0,+12 -LUI V1,7020 -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T9,V1,V0 -LBU T8,0000 (T9) -ADDIU T7,V0,0001 -SW T7,0000 (T2) -SLLV T6,T8,T0 -ADDIU T0,T0,0008 -SLTIU AT,T0,0003 -BNE AT,R0,-9 -OR T1,T1,T6 -ANDI A0,T1,0007 -ADDIU A0,A0,0003 -OR V1,A0,R0 -SRL T9,T1,0x3 -OR T1,T9,R0 -ADDIU T0,T0,FFFD -BEQ A0,R0,+41 -ADDIU A0,A0,FFFF -SLL T8,A1,0x2 -ADDU V0,S0,T8 -OR V1,A0,R0 -SW R0,0000 (V0) -ADDIU A1,A1,0001 -ADDIU V0,V0,0004 -BNE A0,R0,-5 -ADDIU A0,A0,FFFF -BEQ R0,R0,+32 -SLTU AT,A1,A3 -SLTIU AT,T0,0007 -BEQ AT,R0,+12 -LUI V1,7020 -LW V1,1480 (V1) -LW V0,0000 (T2) -ADDU T6,V1,V0 -LBU T7,0000 (T6) -ADDIU T8,V0,0001 -SW T8,0000 (T2) -SLLV T9,T7,T0 -ADDIU T0,T0,0008 -SLTIU AT,T0,0007 -BNE AT,R0,-9 -OR T1,T1,T9 -ANDI A0,T1,007F -ADDIU A0,A0,000B -OR V1,A0,R0 -SRL T6,T1,0x7 -OR T1,T6,R0 -ADDIU T0,T0,FFF9 -BEQ A0,R0,+9 -ADDIU A0,A0,FFFF -SLL T7,A1,0x2 -ADDU V0,S0,T7 -OR V1,A0,R0 -SW R0,0000 (V0) -ADDIU A1,A1,0001 -ADDIU V0,V0,0004 -BNE A0,R0,-5 -ADDIU A0,A0,FFFF -SLTU AT,A1,A3 -BNEL AT,R0,-133 -LW T6,0548 (SP) -LUI AT,7020 -LUI T9,7020 -LW T9,1590 (T9) -SW T1,1564 (AT) -LUI T8,7020 -LUI AT,7020 -ADDIU T8,T8,14E8 -LUI A3,7020 -ADDIU T6,SP,0550 -ADDIU T7,SP,0548 -SW T0,1568 (AT) -SW T7,0018 (SP) -SW T6,0014 (SP) -ADDIU A3,A3,14A8 -SW T8,0010 (SP) -OR A0,S0,R0 -LW A1,053C (SP) -ADDIU A2,R0,0101 -JAL 70200000 -SW T9,0548 (SP) -LUI T9,7020 -LW T9,1594 (T9) -LW T8,053C (SP) -LUI T7,7020 -SW T9,0544 (SP) -SLL T6,T8,0x2 -ADDIU T8,SP,0544 -ADDIU T9,SP,054C -ADDIU T7,T7,1544 -LUI A3,7020 -ADDIU A3,A3,1508 -SW T7,0010 (SP) -SW T9,0014 (SP) -SW T8,0018 (SP) -ADDU A0,S0,T6 -LW A1,0538 (SP) -JAL 70200000 -OR A2,R0,R0 -LW A0,0550 (SP) -LW A1,054C (SP) -LW A2,0548 (SP) -JAL 70200654 -LW A3,0544 (SP) -LW RA,002C (SP) -LW S0,0028 (SP) -ADDIU SP,SP,0568 -JR RA -OR V0,R0,R0 - -70201228: -LUI T1,7020 -ADDIU T1,T1,1568 -LW V1,0000 (T1) -LUI T0,7020 -ADDIU T0,T0,1564 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -OR A3,A0,R0 -BNE V1,R0,+14 -LW A1,0000 (T0) -LUI A2,7020 -LUI A0,7020 -ADDIU A0,A0,1488 -LW A2,1480 (A2) -LW V0,0000 (A0) -ADDU T6,A2,V0 -LBU T7,0000 (T6) -ADDIU T9,V0,0001 -SW T9,0000 (A0) -SLLV T8,T7,V1 -ADDIU V1,V1,0008 -BEQ V1,R0,-8 -OR A1,A1,T8 -ADDIU V1,V1,FFFF -LUI A0,7020 -ANDI T2,A1,0001 -SRL T3,A1,0x1 -SLTIU AT,V1,0002 -ADDIU A0,A0,1488 -SW T2,0000 (A3) -BEQ AT,R0,+13 -OR A1,T3,R0 -LUI A2,7020 -LW A2,1480 (A2) -LW V0,0000 (A0) -ADDU T4,A2,V0 -LBU T5,0000 (T4) -ADDIU T7,V0,0001 -SW T7,0000 (A0) -SLLV T6,T5,V1 -ADDIU V1,V1,0008 -SLTIU AT,V1,0002 -BNE AT,R0,-9 -OR A1,A1,T6 -ANDI V0,A1,0003 -SRL T8,A1,0x2 -ADDIU V1,V1,FFFE -ADDIU AT,R0,0002 -SW T8,0000 (T0) -BNE V0,AT,+5 -SW V1,0000 (T1) -JAL 70200D04 -NOP -BEQ R0,R0,+15 -LW RA,0014 (SP) -BNE V0,R0,+5 -ADDIU AT,R0,0001 -JAL 70200A48 -NOP -BEQ R0,R0,+9 -LW RA,0014 (SP) -BNEL V0,AT,+6 -ADDIU V0,R0,0002 -JAL 70200B9C -NOP -BEQ R0,R0,+3 -LW RA,0014 (SP) -ADDIU V0,R0,0002 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70201348: -ADDIU SP,SP,FFC8 -SW S2,001C (SP) -LUI AT,7020 -LUI S2,7020 -SW R0,148C (AT) ;0->7020148C: -ADDIU S2,S2,1568 ;S2=70201568 -SW S0,0014 (SP) -SW S3,0020 (SP) -SW S1,0018 (SP) -SW R0,0000 (S2) ;0->70201568: -LUI AT,7020 -LUI S0,7020 -SW RA,0024 (SP) -SW R0,1564 (AT) ;0->70201564: -OR S1,R0,R0 ;S1=0: count -ADDIU S0,S0,1598 ;S0=70201598 -ADDIU S3,SP,0034 -//7020138C: -SW R0,0000 (S0) ;0->70201598: -JAL 70201228 -OR A0,S3,R0 ;A0=SP+34: buffer -BEQ V0,R0,+3 -LW T6,0034 (SP) -BEQ R0,R0,+24 -LW RA,0024 (SP) -//702013A8: -LW V0,0000 (S0) ;V0=70201598: -SLTU AT,S1,V0 ;TRUE if count < value -BEQ AT,R0,+2 -NOP -OR S1,V0,R0 ;count=value if too small -BEQL T6,R0,-12 ;get another value if this one is zero -SW R0,0000 (S0) -LW V1,0000 (S2) ;V1=70201568: -LUI V0,7020 -ADDIU V0,V0,1488 ;V0=70201488 -SLTIU AT,V1,0008 -BNEL AT,R0,+10 ;branch if V1<8 -OR V0,R0,R0 -//702013DC: -LW T8,0000 (V0) ;T8=70201488: -ADDIU T7,V1,FFF8 ;T7=V1-8 -SLTIU AT,T7,0008 ;TRUE if (V1-8) < 8 -ADDIU T9,T8,FFFF -SW T7,0000 (S2) ;70201568-=8: -SW T9,0000 (V0) ;70201488-=1: -BEQ AT,R0,-7 ;loop while (V1-8) >= 8 -OR V1,T7,R0 ;V1-=8 -//702013FC: -OR V0,R0,R0 -//70201400: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0038 - -7020141C: -LUI V0,7020 -ADDIU V0,V0,1480 ;V0=70201480 -SW A0,0000 (V0) ;A0->70201480: -LUI AT,7020 -SW A1,1484 (AT) ;A1->70201484: -LUI AT,7020 -SW A2,1490 (AT) ;A2->70201490: -LW T6,0000 (V0) ;T6=A0: -LUI AT,7020 -ADDIU SP,SP,FFE8 -ADDIU T7,T6,0002 ;T7=T6+2: -SW T7,0000 (V0) ;70201480+=2: -SW R0,148C (AT) ;0->7020148C: -SW RA,0014 (SP) -LUI AT,7020 -JAL 70201348 -SW R0,1488 (AT) ;0->70201488: -LW RA,0014 (SP) -LUI V0,7020 -LW V0,148C (V0) ;V0=7020148C: -JR RA -ADDIU SP,SP,0018 - -70201480: -70201484: -70201488: -7020148C: -70201490: -00 00 00 00 10 11 12 00 08 07 09 06 0A 05 0B 04 -0C 03 0D 02 0E 01 0F 00 - -702014A8: -0003 0004 0005 0006 0007 0008 0009 000A -000B 000D 000F 0011 0013 0017 001B 001F -0023 002B 0033 003B 0043 0053 0063 0073 -0083 00A3 00C3 00E3 0102 0000 - -702014E4: -702014E8: -702014EC: -702014F0: -01 01 01 01 02 02 02 02 03 03 03 03 04 04 04 04 -05 05 05 05 00 63 63 00 00 01 00 02 00 03 00 04 -00 05 00 07 00 09 00 0D 00 11 00 19 00 21 00 31 -00 41 00 61 00 81 00 C1 01 01 01 81 02 01 03 01 -04 01 06 01 08 01 0C 01 10 01 18 01 20 01 30 01 -40 01 60 01 - -70201544: -70201548: -01 01 02 02 03 03 04 04 05 05 06 06 07 07 08 08 -09 09 0A 0A 0B 0B 0C 0C 0D 0D 00 00 - -70201564: -70201568: -7020156C: -0000 0001 0003 0007 000F 001F 003F 007F -00FF 01FF 03FF 07FF 0FFF 1FFF 3FFF 7FFF -FFFF 0000 - -70201590: -00000009 00000006 - -70201598: -7020159C: diff --git a/notes/GE Documentation/Gameplay and Misc/System/7F0D28E0 - 7F0E2D48 - Spectrum Emulation.txt b/notes/GE Documentation/Gameplay and Misc/System/7F0D28E0 - 7F0E2D48 - Spectrum Emulation.txt deleted file mode 100644 index b316792..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/7F0D28E0 - 7F0E2D48 - Spectrum Emulation.txt +++ /dev/null @@ -1,17705 +0,0 @@ -Known original game formats: -Linked: - Sabre Wulf ZX Spectrum 48K - Atic Atac ZX Spectrum 48K - Jetpac ZX Spectrum 16K - Jetman ZX Spectrum 48K (type-in) - Alien8 ZX Spectrum 48K - Gunfright ZX Spectrum 48K -Unlinked: - Underwurlde ZX Spectrum 48K - Knightlore ZX Spectrum 48K - Pssst ZX Spectrum 16K - Cookie ZX Spectrum 16K - -7F0D28E0 107410 - accepts: A0=, A1=, A2= -SLL T8,A2,0x8 -ANDI T9,T8,0700 -SLL T6,A2,0x5 -ANDI T7,T6,1800 -SLL V1,A2,0x2 -OR T3,T7,T9 -SRA T0,A1,0x3 -ANDI T8,V1,03E0 -ADDIU SP,SP,FFF8 -ADDU T7,T8,T0 -SW S0,0004 (SP) -ADDU T9,T7,A0 -LBU T1,1800 (T9) -ANDI T4,V1,00E0 -OR T5,T3,T4 -OR T6,T5,T0 -ANDI T3,T1,0080 -OR S0,A3,R0 -ADDU V0,T6,A0 -BEQ T3,R0,7F0D2958 -OR T2,T1,R0 -LUI T4,8005 -LBU T4,ED04 (T4) ;T4=8004ED04: -OR V1,T1,R0 -ANDI T5,V1,0007 -BEQ T4,R0,7F0D2958 -OR V1,T5,R0 -SRA T6,T1,0x3 -BEQ R0,R0,7F0D296C -ANDI A0,T6,0007 -//7F0D2958: -OR A0,T2,R0 -ANDI T7,A0,0007 -SRA T9,T2,0x3 -OR A0,T7,R0 -//7F0D2968: -ANDI V1,T9,0007 -ANDI T4,T2,0040 -BNE T4,R0,7F0D2990 -OR A1,R0,R0 -//7F0D2978: -ADDIU A0,A0,0008 -ADDIU V1,V1,0008 -ANDI T5,A0,00FF -ANDI T6,V1,00FF -OR A0,T5,R0 -OR V1,T6,R0 -//7F0D2990: -ADDIU T1,R0,0008 -//7F0D2994: -LBU A3,0000 (V0) -ADDIU A1,A1,0001 -ADDIU V0,V0,0100 -ANDI T8,A3,0080 -BEQ T8,R0,7F0D29B4 -ANDI T7,A3,0040 -BEQ R0,R0,7F0D29B8 -OR A2,A0,R0 -//7F0D29B4: -OR A2,V1,R0 -//7F0D29B8: -BEQ T7,R0,7F0D29C8 -SLL T9,A2,0x4 -BEQ R0,R0,7F0D29CC -OR T0,A0,R0 -//7F0D29C8: -OR T0,V1,R0 -//7F0D29CC: -OR T3,T0,T9 -ANDI T4,A3,0020 -BEQ T4,R0,7F0D29E4 -SB T3,0000 (S0) -BEQ R0,R0,7F0D29E8 -OR A2,A0,R0 -//7F0D29E4: -OR A2,V1,R0 -//7F0D29E8: -ANDI T5,A3,0010 -BEQ T5,R0,7F0D29FC -SLL T6,A2,0x4 -BEQ R0,R0,7F0D2A00 -OR T0,A0,R0 -//7F0D29FC: -OR T0,V1,R0 -//7F0D2A00: -OR T8,T0,T6 -ANDI T7,A3,0008 -BEQ T7,R0,7F0D2A18 -SB T8,0001 (S0) -BEQ R0,R0,7F0D2A1C -OR A2,A0,R0 -//7F0D2A18: -OR A2,V1,R0 -//7F0D2A1C: -ANDI T9,A3,0004 -BEQ T9,R0,7F0D2A30 -SLL T3,A2,0x4 -BEQ R0,R0,7F0D2A34 -OR T0,A0,R0 -//7F0D2A30: -OR T0,V1,R0 -//7F0D2A34: -OR T4,T0,T3 -ANDI T5,A3,0002 -BEQ T5,R0,7F0D2A4C -SB T4,0002 (S0) -BEQ R0,R0,7F0D2A50 -OR A2,A0,R0 -//7F0D2A4C: -OR A2,V1,R0 -//7F0D2A50: -ANDI T6,A3,0001 -BEQ T6,R0,7F0D2A64 -SLL T8,A2,0x4 -BEQ R0,R0,7F0D2A68 -OR T0,A0,R0 -//7F0D2A64: -OR T0,V1,R0 -//7F0D2A68: -OR T7,T0,T8 -SB T7,0003 (S0) -BNE A1,T1,7F0D2994 -ADDIU S0,S0,0020 -//7F0D2A78: return -LW S0,0004 (SP) -JR RA -ADDIU SP,SP,0008 - -7F0D2A84 1075B4 -LUI V0,8005 -ADDIU V0,V0,ED08 -LBU T6,0000 (V0) ;T6=8004ED08: -ADDIU AT,R0,0019 -ADDIU SP,SP,FFA0 -ADDIU T7,T6,0001 -ANDI T8,T7,00FF :T8=(T6+1)->byte -DIV T8,AT -SW S5,002C (SP) -MFHI T9 -OR S5,A0,R0 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A1,0064 (SP) -BNE T9,R0,7F0D2B48 -SB T7,0000 (V0) -//7F0D2AE0: -SB R0,0000 (V0) -LUI S6,8009 -ADDIU S6,S6,E32C ;S6=8008E32C: -ADDIU V0,R0,0001 -OR V1,R0,R0 ;V1=0 init. offset -//7F0D2AF4: memset buffer with 01 -LW T0,0000 (S6) -ADDIU AT,R0,0300 -ADDU T1,T0,V1 -SB V0,0000 (T1) -LW T2,0000 (S6) -ADDU T3,T2,V1 -SB V0,0001 (T3) -LW T4,0000 (S6) -ADDU T5,T4,V1 -SB V0,0002 (T5) -LW T6,0000 (S6) -ADDU T7,T6,V1 -ADDIU V1,V1,0004 -BNE V1,AT,7F0D2AF4 ;loop through all 300 bytes -SB V0,0003 (T7) -//7F0D2B30: -LUI V0,8005 -ADDIU V0,V0,ED04 -LBU T8,0000 (V0) ;T8=8004ED04: -ADDIU T9,R0,0001 -SUBU T0,T9,T8 -SB T0,0000 (V0) -//7F0D2B48: -LUI S6,8009 -ADDIU S6,S6,E32C ;S6=8008E32C: -SW R0,0058 (SP) -LW T1,0058 (SP) -OR S7,R0,R0 -SRA T2,T1,0x6 -SLL T3,T2,0x2 -SW T3,0040 (SP) -ADDIU S8,T1,0040 -//7F0D2B6C: -LW T4,0040 (SP) -LW S4,0058 (SP) -SRA T5,S7,0x6 -LW T9,0064 (SP) -ADDU T6,T4,T5 -SLL T7,T6,0xB -SLT AT,S4,S8 -BEQ AT,R0,7F0D2BF8 -ADDU S1,T7,T9 -ADDIU S3,S7,0040 -//7F0D2B94: -SLT AT,S7,S3 -BEQ AT,R0,7F0D2BE8 -OR S0,S7,R0 -SRA S2,S4,0x3 -SLL T0,S2,0x5 -OR S2,T0,R0 -//7F0D2BAC: -LW T1,0000 (S6) -SRA T2,S0,0x3 -OR T3,S2,T2 -ADDU T4,T3,T1 -LBU T5,0000 (T4) -OR A0,S5,R0 -OR A1,S0,R0 -BEQ T5,R0,7F0D2BD8 -OR A2,S4,R0 -JAL 7F0D28E0 -OR A3,S1,R0 -//7F0D2BD8: -ADDIU S0,S0,0008 -SLT AT,S0,S3 -BNE AT,R0,7F0D2BAC -ADDIU S1,S1,0004 -//7F0D2BE8: -ADDIU S4,S4,0008 -SLT AT,S4,S8 -BNE AT,R0,7F0D2B94 -ADDIU S1,S1,00E0 -//7F0D2BF8: -ADDIU S7,S7,0040 -SLTI AT,S7,0100 -BNEL AT,R0,7F0D2B70 -LW T4,0040 (SP) -SLTI AT,S8,00C0 -BNE AT,R0,7F0D2B54 -SW S8,0058 (SP) -OR V0,R0,R0 -//7F0D2C18: -LW T7,0000 (S6) -ADDIU AT,R0,0300 -ADDU T9,T7,V0 -SB R0,0000 (T9) -LW T8,0000 (S6) -ADDU T0,T8,V0 -SB R0,0001 (T0) -LW T2,0000 (S6) -ADDU T3,T2,V0 -SB R0,0002 (T3) -LW T1,0000 (S6) -ADDU T4,T1,V0 -ADDIU V0,V0,0004 -BNE V0,AT,7F0D2C18 -SB R0,0003 (T4) -//7F0D2C54: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0060 - -7F0D2C84 1077B4 Spectrum: read player1's controller input as Kempston joystick - Redirects keys depending on game. L unloads the program manager and probably end emulation. -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -SW R0,0034 (SP) -SW R0,0030 (SP) -SW R0,002C (SP) -SW R0,0028 (SP) -JAL 7000BD0C ;redirect to ramrom replay and record handlers if set -SW R0,0024 (SP) -//7F0D2CA4: player 1: buttons held -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C30C ;V0=player A0's buttons A1 held -ORI A1,R0,FFFF ;A1= all -//7F0D2CB0: player 1: stick left/right -OR A0,R0,R0 ;A0=0: player 1 -ADDIU A1,R0,FFFD ;A1= -3: left deadzone -ADDIU A2,R0,0003 ;A2= 3: right deadzone -JAL 7000C4B4 ;V0=player A0's control stick left/right -SW V0,0020 (SP) ;SP+20= buttons held -//7F0D2CC4: player 1: stick up/down -OR A0,R0,R0 ;A0=0: player 1 -ADDIU A1,R0,FFFD ;A1= -3: down deadzone -ADDIU A2,R0,0003 ;A2= 3: up deadzone -JAL 7000C528 ;V0=player A0's control stick up/down -SW V0,001C (SP) ;SP+1C= stick left/right -//7F0D2CD8: -ADDIU T6,R0,00FF -LUI AT,8005 -LUI A0,8005 -LUI A1,8005 -LW A3,0020 (SP) ;A3= buttons held -LW T0,001C (SP) ;T0= stick left/right -ADDIU A1,A1,EC3D -ADDIU A0,A0,EC35 -SB T6,EC34 (AT) -ADDIU V1,R0,00FF -//7F0D2D00: set 8004EC34-8004EC3D to FF -ADDIU A0,A0,0004 -SB V1,FFFD (A0) -SB V1,FFFE (A0) -SB V1,FFFF (A0) -BNE A0,A1,7F0D2D00 -SB V1,FFFC (A0) -//7F0D2D18: test ACTION -ANDI T7,A3,2000 -BEQ T7,R0,7F0D2D2C ;branch if Z not held -ANDI T9,A3,0202 -ADDIU T8,R0,0001 -SW T8,0024 (SP) ;SP+24= TRUE -//7F0D2D2C: test LEFT -BNE T9,R0,7F0D2D3C ;branch if left c or + -ANDI T2,A3,0101 -SLTI AT,T0,FFFF ;TRUE if stick left -BEQ AT,R0,7F0D2D44 -//7F0D2D3C: set LEFT -ADDIU T1,R0,0001 -SW T1,002C (SP) ;SP+2C= TRUE -//7F0D2D44: test RIGHT -BNE T2,R0,7F0D2D54 ;branch if right c or + -ANDI T4,A3,0808 -SLTI AT,T0,0002 ;FALSE if stick right -BNE AT,R0,7F0D2D5C -//7F0D2D54: set RIGHT -ADDIU T3,R0,0001 -SW T3,0028 (SP) ;SP+28= TRUE -//7F0D2D5C: test UP -BNE T4,R0,7F0D2D6C ;branch if up c or + -ANDI T5,A3,0404 -SLTI AT,V0,0002 ;FALSE if stick up -BNE AT,R0,7F0D2D74 -//7F0D2D6C: set UP -ADDIU A1,R0,0001 -SW A1,0034 (SP) ;SP+34= TRUE -//7F0D2D74: test DOWN -BNE T5,R0,7F0D2D84 ;branch if down c or + -LW A1,0034 (SP) ;A1= UP -SLTI AT,V0,FFFF ;TRUE if stick down -BEQ AT,R0,7F0D2D8C -//7F0D2D84: set DOWN -ADDIU A2,R0,0001 -SW A2,0030 (SP) ;SP+30= TRUE -//7F0D2D8C: jetpac's controls -LUI V1,8009 -LBU V1,E34D (V1) ;V1=8008E34D: cur.game# -ADDIU A0,R0,0002 -LW A2,0030 (SP) ;A2= DOWN -BNE A0,V1,7F0D2DB4 ;branch if not game 2: jetpac -ADDIU V0,R0,0004 -ANDI T6,A3,C000 -BEQ T6,R0,7F0D2DB4 ;if A or B pressed, set UP -NOP -ADDIU A1,R0,0001 ;A1= UP -//7F0D2DB4: Alien8 and KnightLore controls -BEQ V0,V1,7F0D2DC0 -ADDIU AT,R0,0007 -BNE V1,AT,7F0D2DD0 -//7F0D2DC0: if A or B pressed, set DOWN -ANDI T7,A3,C000 -BEQ T7,R0,7F0D2DD0 -NOP -ADDIU A2,R0,0001 ;A2= DOWN -//7F0D2DD0: game 0,1,4,6,7,9 -BEQ V1,R0,7F0D2DFC -ADDIU AT,R0,0001 -BEQ V1,AT,7F0D2DFC -ADDIU AT,R0,0006 -BEQ V1,AT,7F0D2DFC -ADDIU AT,R0,0009 -BEQL V1,AT,7F0D2E00 -ANDI T8,A3,C000 -BEQ V0,V1,7F0D2DFC -ADDIU AT,R0,0007 -BNE V1,AT,7F0D2E18 -//7F0D2DFC: SabreWulf, Atic Atac, Underwurlde, Cookie, Alien8, and KnightLore controls -ANDI T8,A3,C000 -BEQ T8,R0,7F0D2E18 ;if A or B pressed, unset flag -LUI V0,8005 -ADDIU V0,V0,EC34 -LBU T9,0004 (V0) -ANDI T1,T9,00FE -SB T1,0004 (V0) ;8004EC34 &= ~1: '0' key -//7F0D2E18: jetpac and Pssst controls -LUI V0,8005 -BEQ A0,V1,7F0D2E2C ;branch if jetpac -ADDIU V0,V0,EC34 ;V0=8004EC34: -ADDIU AT,R0,0008 -BNE V1,AT,7F0D2E44 -//7F0D2E2C: if A or B pressed, unset flag -ANDI T2,A3,C000 -BEQL T2,R0,7F0D2E48 -ADDIU AT,R0,0005 -LBU T3,0003 (V0) -ANDI T4,T3,00EF -SB T4,0003 (V0) ;8004EC37 &= ~10: '5' key -//7F0D2E44: gunfright controls (1: toggle 1-2pl, 2: input types, 3: start) -ADDIU AT,R0,0005 -BNE V1,AT,7F0D2E64 -ANDI T5,A3,C000 -BEQL T5,R0,7F0D2E68 ;if A or B pressed, unset flag -ADDIU AT,R0,0003 -LBU T6,0003 (V0) -ANDI T7,T6,00FB -SB T7,0003 (V0) ;8004EC37 &= ~4: '3' -//7F0D2E64: jetman controls -ADDIU AT,R0,0003 -BNE V1,AT,7F0D2EAC ;branch if not jetman -ANDI T8,A3,C000 -BEQ T8,R0,7F0D2E84 ;if A or B pressed, unset flag -ANDI T2,A3,8000 -LBU T9,0004 (V0) -ANDI T1,T9,00EF -SB T1,0004 (V0) ;8004EC38 &= ~10: '6' -//7F0D2E84: if jetman A pressed, unset flag -BEQ T2,R0,7F0D2E98 -ANDI T5,A3,4000 -LBU T3,0000 (V0) -ANDI T4,T3,00FD -SB T4,0000 (V0) ;8004EC34 &= ~2 -//7F0D2E98: if jetman B pressed, unset flag -BEQL T5,R0,7F0D2EB0 -ADDIU AT,R0,0006 -LBU T6,0007 (V0) -ANDI T7,T6,00FE -SB T7,0007 (V0) ;8004EC3B &= ~1 -//7F0D2EAC: underwurlde controls -ADDIU AT,R0,0006 -BNE V1,AT,7F0D2ED8 -ANDI T8,A3,8000 -BEQ T8,R0,7F0D2EC4 ;if A pressed set UP -ANDI A0,A3,4000 -ADDIU A1,R0,0001 ;A1= UP -//7F0D2EC4: if underwurlde B pressed, unset flag -BEQL A0,R0,7F0D2EDC -ADDIU AT,R0,0001 -LBU T9,0007 (V0) -ANDI T1,T9,00FE -SB T1,0007 (V0) ;8004EC3B &= ~1 -//7F0D2ED8: atic atac controls (4-knight, 5-wizard, 6-serf) -ADDIU AT,R0,0001 -BNE V1,AT,7F0D2F34 -ANDI T2,A3,C000 -BEQ T2,R0,7F0D2EF8 ;if A or B pressed, unset flag -ANDI T5,A3,0200 -LBU T3,0000 (V0) -ANDI T4,T3,00FD -SB T4,0000 (V0) ;8004EC34 &= ~2 -//7F0D2EF8: if + left, unset flag -BEQ T5,R0,7F0D2F0C -ANDI T8,A3,0400 -LBU T6,0003 (V0) -ANDI T7,T6,00F7 -SB T7,0003 (V0) ;8004EC37 &= ~8 -//7F0D2F0C: if + down, unset flag -BEQ T8,R0,7F0D2F20 -ANDI T2,A3,0100 -LBU T9,0003 (V0) -ANDI T1,T9,00EF -SB T1,0003 (V0) ;8004EC37 &= ~10 -//7F0D2F20: if + right, unset flag -BEQL T2,R0,7F0D2F38 -ANDI T5,A3,0020 -LBU T3,0004 (V0) -ANDI T4,T3,00EF -SB T4,0004 (V0) ;8004EC38 &= ~10 -//7F0D2F34: general controls: L button -ANDI T5,A3,0020 -BEQ T5,R0,7F0D2F88 ;branch if L not pressed -LUI AT,8005 -LUI V0,8009 -ADDIU V0,V0,E328 ;V0=8008E328: p->spectrum.ROMs -OR V1,R0,R0 ;V1=0 init. offset -ADDIU A0,R0,4000 -//7F0D2F50: NULL monitor program -LW T6,0000 (V0) -ADDU T7,T6,V1 -SB R0,0000 (T7) -LW T8,0000 (V0) -ADDU T9,T8,V1 -SB R0,0001 (T9) -LW T1,0000 (V0) -ADDU T2,T1,V1 -SB R0,0002 (T2) -LW T3,0000 (V0) -ADDU T4,T3,V1 -ADDIU V1,V1,0004 -BNE V1,A0,7F0D2F50 -SB R0,0003 (T4) -//7F0D2F88: -LW T5,0024 (SP) ;T5= ACTION -LW T2,002C (SP) ;T2= LEFT -SLL T7,A1,0x3 ;08 if UP -SLL T6,T5,0x4 ;10 if ACTION -LW T5,0028 (SP) ;T5= RIGHT -OR T8,T6,T7 -SLL T9,A2,0x2 ;04 if DOWN -LW RA,0014 (SP) -OR T1,T8,T9 -SLL T3,T2,0x1 ;02 if LEFT -OR T4,T1,T3 -OR T6,T4,T5 ;ACTION | UP | DOWN | LEFT | RIGHT -SB T6,EC40 (AT) ;controls->8004EC40 -JR RA -ADDIU SP,SP,0038 - -7F0D2FC4 107AF4 initialize Spectrum running game index A0 - accepts: A0=game# (only permits 0-4, not 0-9) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0100 ;A0= 100 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI A2,8009 -ADDIU A2,A2,E334 -SW V0,0000 (A2) ;V0->8008E334: -OR A0,R0,R0 -ADDIU A3,R0,0004 -ADDIU A1,R0,0008 -//7F0D2FF4: -OR V1,R0,R0 -OR V0,R0,R0 ;V0=0 byte.bitcount -//7F0D2FFC: -SRAV T6,A0,V0 -ANDI T7,T6,0001 -BEQ T7,R0,7F0D3010 ;increment V1 only if bit set -ADDIU V0,V0,0001 ;V0+=1 -ADDIU V1,V1,0001 -//7F0D3010: -BNEL V0,A1,7F0D3000 ;loop for byte -SRAV T6,A0,V0 -//7F0D3018: -ANDI T8,V1,0001 -BEQL T8,R0,7F0D3038 -LW T2,0000 (A2) -LW T9,0000 (A2) -ADDU T1,T9,A0 -BEQ R0,R0,7F0D3040 -SB R0,0000 (T1) ;0->8008E334+offset: -//7F0D3034: -LW T2,0000 (A2) -ADDU T3,T2,A0 -SB A3,0000 (T3) ;4->8008E334+offset: -//7F0D3040: loop for entire file -ADDIU A0,A0,0001 ;A0+=1 next offset -SLTI AT,A0,0100 -BNEL AT,R0,7F0D2FF8 -OR V1,R0,R0 -//7F0D3050: allocate some buffers -ADDIU A0,R0,6000 ;A0= 6000 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI AT,8009 -SW V0,E330 (AT) ;V0->8008E330: -ADDIU A0,R0,0300 -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI V1,8009 -ADDIU V1,V1,E32C -SW V0,0000 (V1) ;V0->8008E32C: -ADDIU V0,R0,0001 -OR A0,R0,R0 -//7F0D3084: initialize values in 8008E32C to 1 -LW T4,0000 (V1) -ADDU T5,T4,A0 -ADDIU A0,A0,0001 -SLTI AT,A0,0300 -BNE AT,R0,7F0D3084 -SB V0,0000 (T5) ;1->8008E32C+offset -//7F0D309C: allocate buffer for ROMs -LUI A0,0001 ;A0= 10000 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LUI T0,8009 -ADDIU T0,T0,E328 -LUI A0,8006 -SW V0,0000 (T0) ;V0->8008E328: target for ROMs -//7F0D30B8: load the spectrum monitor -ADDIU A0,A0,C114 ;A0=8005C114: "em/data/spec_rom.seg.rz" -ADDIU A1,R0,0001 -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource named A0 -ADDIU A3,R0,0004 ;A3= bank 4 -LUI V1,8009 -ADDIU V1,V1,E320 -LUI T0,8009 -ADDIU T0,T0,E328 -SW V0,0000 (V1) ;V0->8008E320: p->Spectrum monitor prog. -OR A0,R0,R0 -//7F0D30E4: copy 4000 bytes from spec_rom to 8008E328 buffer -LW T6,0000 (V1) -LW T9,0000 (T0) -ADDU T7,T6,A0 -ADDU T1,T9,A0 -LBU T8,0000 (T7) -ADDIU A0,A0,0001 -SLTI AT,A0,4000 -BNE AT,R0,7F0D30E4 -SB T8,0000 (T1) -//7F0D3108: save the game index, which they shortchanged... -LW T2,0018 (SP) -LUI V1,8009 -ADDIU V1,V1,E34D ;V1=8008E34D: cur.game# -ANDI V0,T2,00FF ;V0=A0 f/caller: game# -SLTI AT,V0,0005 -BNE AT,R0,7F0D312C ;okay if 0-4 -SB T2,0000 (V1) ;8008E34D= A0 f/caller -SB R0,0000 (V1) ;0->8008E34D -ANDI V0,R0,00FF ;V0=0 -//7F0D312C: load the game's snapshot -SLL T3,V0,0x2 -LUI A0,8005 -ADDU A0,A0,T3 -LW A0,ED2C (A0) ;A0=8004ED2C+offset: p->spectrum game name -ADDIU A1,R0,0001 -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource named A0 -ADDIU A3,R0,0004 ;A3= bank 4 -LUI V1,8009 -ADDIU V1,V1,E324 -SW V0,0000 (V1) ;V0->8008E324: p->loaded spectrum game data -LUI T0,8009 -ADDIU T0,T0,E328 -ORI V0,R0,C000 -OR A0,R0,R0 -//7F0D3168: copy game's RAM dump after the emulator code, skipping header of 1B. -LW T4,0000 (V1) -LW T7,0000 (T0) -ADDU T5,A0,T4 -LBU T6,001B (T5) -ADDU T9,T7,A0 -SB T6,4000 (T9) -LW T8,0000 (V1) -LW T3,0000 (T0) -ADDU T1,A0,T8 -LBU T2,001C (T1) -ADDU T4,T3,A0 -SB T2,4001 (T4) -LW T5,0000 (V1) -LW T9,0000 (T0) -ADDU T7,A0,T5 -LBU T6,001D (T7) -ADDU T8,T9,A0 -SB T6,4002 (T8) -LW T1,0000 (V1) -LW T4,0000 (T0) -ADDU T3,A0,T1 -LBU T2,001E (T3) -ADDU T5,T4,A0 -ADDIU A0,A0,0004 -BNE A0,V0,7F0D3168 -SB T2,4003 (T5) -//7F0D31D0: load snapshot (SNA) -LW V0,0000 (V1) ;V0->8008E324: p->loaded spectrum game data -LUI AT,8009 -LUI A1,8009 -LBU T7,0000 (V0) -ADDIU A1,A1,E34B -LUI A2,8009 -SB T7,E348 (AT) ;header+0 -> 8008E348: I -LBU T9,0001 (V0) -LUI AT,8009 -ADDIU A2,A2,E352 -SB T9,E347 (AT) ;header+1 -> 8008E347: lH' -LBU T6,0002 (V0) -LUI AT,8009 -LUI A3,8009 -SB T6,E346 (AT) ;header+2 -> 8008E346: Lh' -LBU T8,0003 (V0) -LUI AT,8009 -ADDIU A3,A3,E34C -SB T8,E345 (AT) ;header+3 -> 8008E345: dE' -LBU T1,0004 (V0) -LUI AT,8009 -SB T1,E344 (AT) ;header+4 -> 8008E344: De' -LBU T3,0005 (V0) -LUI AT,8009 -SB T3,E343 (AT) ;header+5 -> 8008E343: bC' -LBU T4,0006 (V0) -LUI AT,8009 -SB T4,E342 (AT) ;header+6 -> 8008E342: Bc' -LBU T2,0007 (V0) -LUI AT,8009 -SB T2,E341 (AT) ;header+7 -> 8008E341: aF' -LBU T5,0008 (V0) -LUI AT,8009 -SB T5,E340 (AT) ;header+8 -> 8008E340: Af' -LBU T7,0009 (V0) -LUI AT,8009 -SB T7,E33F (AT) ;header+9 -> 8008E33F: hL -LBU T9,000A (V0) -LUI AT,8009 -SB T9,E33E (AT) ;header+A -> 8008E33E: Hl -LBU T6,000B (V0) -LUI AT,8009 -SB T6,E33D (AT) ;header+B -> 8008E33D: dE -LBU T8,000C (V0) -LUI AT,8009 -SB T8,E33C (AT) ;header+C -> 8008E33C: De -LBU T1,000D (V0) -LUI AT,8009 -SB T1,E33B (AT) ;header+D -> 8008E33B: bC -LBU T3,000E (V0) -LUI AT,8009 -SB T3,E33A (AT) ;header+E -> 8008E33A: Bc -LBU T4,0010 (V0) -LBU T5,000F (V0) -LUI AT,8009 -SLL T2,T4,0x8 -ADDU T7,T2,T5 ;T7= head[10]<<8 | head[F]: little-endian -SH T7,E350 (AT) ;header[10:F] -> 8008E350: IY -LBU T9,0012 (V0) -LBU T8,0011 (V0) -LUI AT,8009 -SLL T6,T9,0x8 -ADDU T1,T6,T8 -SH T1,E34E (AT) ;header[12:11] -> 8008E34E: IX -LBU T3,0013 (V0) ;T3= header[13]: interrupt -LUI AT,8009 -SRA T4,T3,0x2 -ANDI T5,T4,0001 -SB T5,0000 (A1) ;8008E34B = True if header[13] & 4 set: IFF2's interrupt enabled/disabled flag -SB T5,E34A (AT) ;8008E34A = True if header[13] & 4 set -LBU T7,0014 (V0) -LUI AT,8009 -SB T7,E349 (AT) ;header[14] -> 8008E349; R -LBU T9,0015 (V0) -LUI AT,8009 -SB T9,E339 (AT) ;header[15] -> 8008E339: aF -LBU T6,0016 (V0) -LUI AT,8009 -SB T6,E338 (AT) ;header[16] -> 8008E348: Af -LBU T8,0018 (V0) -LBU T3,0017 (V0) -LUI AT,8009 -SLL T1,T8,0x8 -ADDU T4,T1,T3 -SH T4,0000 (A2) ;header[18:17] -> 8008E352: SP -LBU T2,0019 (V0) ;T2=header[19] -ANDI A0,T2,00FF -BLEZ A0,7F0D333C ;if > 0, add 1 to value -SB T2,0000 (A3) ;header[19] -> 8008E34C: IMx (interrupt mode 0,1,2) -ADDIU T5,A0,0001 -SB T5,0000 (A3) ;header[19]+1 -> 8008E34C -//7F0D323C: -LHU V1,0000 (A2) ;V1= header[18:17]: SP -LW V0,0000 (T0) ;V0= 8008E328: p->emu+game -LW RA,0014 (SP) -ADDIU T4,V1,0002 -ADDU T6,V0,V1 -LBU T8,0001 (T6) ;T8=emu+SP+1: pC -ADDU T7,V1,V0 -LBU T9,0000 (T7) ;T8=emu+SP+0: Pc -SLL T1,T8,0x8 -ADDIU SP,SP,0018 -OR T3,T9,T1 -SH T3,E354 (AT) ;8008E354 = emu+offset[1:0]: PC address, POPped from stack -JR RA -SH T4,0000 (A2) ;header[18:17]+=2: SP+=2 - -7F0D3374 107EA4 run Spectrum game -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0D2C84 ;Spectrum: read player1's controller input -NOP -JAL 7F0D382C ;Spectrum: processor emulation -NOP -LUI A0,8009 -LW A0,E328 (A0) ;A0=8008E328: p->spectrum.ROMs -LUI A1,8009 -LW A1,E330 (A1) ;A1=8008E330: ???, 6000 large -JAL 7F0D2A84 -ADDIU A0,A0,4000 ;A0+=4000: p->spectrum.ROMs.game -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0D33B4 107EE4 Spectrum: draw screen - accepts: A0=p->display list -ADDIU SP,SP,FF60 -OR V0,A0,R0 -SW RA,002C (SP) -SW S8,0028 (SP) -SW S7,0024 (SP) -SW S6,0020 (SP) -SW S5,001C (SP) -SW S4,0018 (SP) -SW S3,0014 (SP) -SW S2,0010 (SP) -SW S1,000C (SP) -SW S0,0008 (SP) -LUI T3,E700 -ADDIU A0,A0,0008 -SW T3,0000 (V0) ;DL+0= rdp.pipesync.u -SW R0,0004 (V0) ;DL+4= rdp.pipesync.l -OR V1,A0,R0 -LUI T6,8005 -ADDIU T6,T6,ED0C -ADDIU A0,A0,0008 -LUI S0,FD10 -SW T6,0004 (V1) ;DL+4= rdp.settextureimage.l: 8004ED0C -OR A1,A0,R0 -LUI T7,F500 -SW S0,0000 (V1) ;DL+0= rdp.settextureimage.u: ci16 -ORI T7,T7,0300 -ADDIU A0,A0,0008 -LUI S1,0700 -SW T7,0000 (A1) ;DL+0= rdp.settile.u: rgba16, line 1, tmem 100 -OR A2,A0,R0 -SW S1,0004 (A1) ;DL+4= rdp.settile.l: tile #7 -ADDIU A0,A0,0008 -LUI S2,E600 -OR A3,A0,R0 -SW S2,0000 (A2) ;DL+0= rdp.loadsync.u -SW R0,0004 (A2) ;DL+4= rdp.loadsync.l -LUI T9,0703 -ORI T9,T9,C000 -ADDIU A0,A0,0008 -LUI T8,F000 -SW T8,0000 (A3) ;DL+0= rdp.loadtlut.u: (0,0) -SW T9,0004 (A3) ;DL+4= rdp.loadtlut.l: tile #7; 10 entries at 0 -OR V0,A0,R0 -LUI T6,BA00 -ORI T6,T6,1301 -ADDIU A0,A0,0008 -SW T6,0000 (V0) ;DL+0= rsp.setothermode_h.u: shift 13, 1 bit -OR V1,A0,R0 -SW R0,0004 (V0) ;DL+4= rsp.setothermode_h.l: texture perspective: none -LUI T8,0F0A -LUI T7,B900 -ORI T7,T7,031D -ORI T8,T8,4000 -ADDIU A0,A0,0008 -SW T8,0004 (V1) ;DL+4= rsp.setothermode_l.l: converge delta-ST clamp, force blender, blender: alpha memory, 0, alpha in, alpha fog, alpha shade, alpha 0 -SW T7,0000 (V1) ;DL+0= rsp.setothermode_l.u: shift 3, 1D bits -OR A1,A0,R0 -LUI T9,FCFF -ORI T9,T9,FFFF -ADDIU A0,A0,0008 -LUI T6,FFFC -ORI T6,T6,F87C -SW T9,0000 (A1) ;DL+0= rsp.setcombine.u -OR A2,A0,R0 -SW T6,0004 (A1) ;DL+4= rsp.setcombine.l -LUI T7,BA00 -ORI T7,T7,0C02 -ADDIU A0,A0,0008 -SW T7,0000 (A2) ;DL+0= rsp.setothermode_h.u: shift C, 2 bits -SW R0,0004 (A2) ;DL+4= rsp.setothermode_h.l: texture filter: point -OR A3,A0,R0 -LUI T8,BB00 -ORI T8,T8,0001 -ADDIU T9,R0,FFFF -SW T9,0004 (A3) ;DL+0= rsp.texture.l: default s,t -SW T8,0000 (A3) ;DL+0= rsp.texture.u: no bowtie, no binary, on -LUI S3,8009 -LUI S6,073F -LUI S7,BA00 -LUI RA,F540 -ADDIU A0,A0,0008 -ORI RA,RA,0800 -ORI S7,S7,0E02 -ORI S6,S6,F200 -ADDIU S3,S3,E330 ;S3=8008E330: -SW R0,003C (SP) -OR V0,R0,R0 -LUI S4,F510 -LUI S5,F300 -ORI S8,R0,8000 -LW T0,003C (SP) -ADDIU V1,V0,0001 -SLL T4,V1,0x6 -SLL T5,V0,0x6 -ADDIU T5,T5,0018 -ADDIU T4,T4,0018 -SLL T7,T4,0x2 -SLL T9,T5,0x2 -SLL T6,T0,0xB -OR T0,T6,R0 -ANDI T5,T9,0FFF -ANDI T4,T7,0FFF -SW V1,0034 (SP) -OR A3,R0,R0 -OR V0,A0,R0 -ADDIU A0,A0,0008 -SW T3,0000 (V0) ;DL+0= rdp.pipesync.u -SW R0,0004 (V0) ;DL+4= rdp.pipesync.l -OR V1,A0,R0 -SW S0,0000 (V1) ;DL+0= rdp.settextureimage.u: ci16 -LW T7,0000 (S3) -ADDIU A0,A0,0008 -OR A1,A0,R0 -ADDU T8,T0,T7 -SW T8,0004 (V1) ;DL+4= rdp.settextureimage.l: -ADDIU A0,A0,0008 -OR A2,A0,R0 -SW S1,0004 (A1) -SW S4,0000 (A1) -ADDIU A0,A0,0008 -OR T1,A0,R0 -SW R0,0004 (A2) ;DL+4= rdp.loadsync.l -SW S2,0000 (A2) ;DL+0= rdp.loadsync.u -ADDIU A0,A0,0008 -OR V0,A0,R0 -SW S6,0004 (T1) ;DL+4= rdp.loadblock.l: tile #7; lrs 3FF, lrt 200 -SW S5,0000 (T1) ;DL+0= rdp.loadblock.u: uls 0, ult 0 -ADDIU A0,A0,0008 -SW R0,0004 (V0) ;DL+4= rdp.pipesync.l -SW T3,0000 (V0) ;DL+0= rdp.pipesync.u -OR V1,A0,R0 -ADDIU A0,A0,0008 -OR A1,A0,R0 -LUI T9,0001 -SW S7,0000 (V1) ;DL+0= rdp.setothermode_h.u: shift E, 2 bits -SW S8,0004 (V1) ;DL+4= rdp.setothermode_h.l: texture lookup table type: rgba -ORI T9,T9,8060 -SW T9,0004 (A1) ;DL+4= rdp.settile.l: tile #0; mask t 5, mask s 6 -ADDIU A0,A0,0008 -ADDIU V0,A3,0001 -SW RA,0000 (A1) ;DL+0= rdp.settile.u: ci4, line 4 -OR A2,A0,R0 -LUI T7,007E -LUI T6,F200 -SLL T8,V0,0x6 -SW T6,0000 (A2) ;DL+0= rdp.settilesize.u: ulr 0, ult 0 -ORI T7,T7,07E0 -ADDIU T9,T8,0020 -SW T7,0004 (A2) ;DL+4= rdp.settilesize.l: tile #0; lrs 7E0, lrt 7E0 -SLL T6,T9,0x2 -ANDI T7,T6,0FFF -SLL T8,T7,0xC -LUI AT,E400 -OR T9,T8,AT -ADDIU A0,A0,0008 -OR T6,T9,T4 -SLL T7,A3,0x6 -ADDIU T8,T7,0020 -OR T2,A0,R0 -SW T6,0000 (T2) ;DL+0= rdp.texrect.1.u: -SLL T9,T8,0x2 -ANDI T6,T9,0FFF -SLL T7,T6,0xC -ADDIU A0,A0,0008 -OR V1,A0,R0 -OR T8,T7,T5 -SW T8,0004 (T2) ;DL+4= rdp.texrect.1.l: -ADDIU A0,A0,0008 -OR A1,A0,R0 -LUI T7,0400 -LUI T9,B400 -ADDIU AT,R0,0004 -SW T9,0000 (V1) ;DL+8= rdp.rdphalf_u -ORI T7,T7,0400 -SW R0,0004 (V1) ;DL+C= rdp.texrect.2.u: uls 0, ult 0 -LUI T6,B300 -OR A3,V0,R0 -ADDIU T0,T0,0800 -SW T6,0000 (A1) ;DL+10= rdp.rdphalf_l -SW T7,0004 (A1) ;DL+14= rdp.texrect.2.l: dsdx 400, dtdy 400 -BNE V0,AT,7F0D3554 -ADDIU A0,A0,0008 -LW T8,003C (SP) -LW V0,0034 (SP) -ADDIU AT,R0,0003 -ADDIU T9,T8,0004 -BNE V0,AT,7F0D351C -SW T9,003C (SP) -LW RA,002C (SP) -LW S0,0008 (SP) -LW S1,000C (SP) -LW S2,0010 (SP) -LW S3,0014 (SP) -LW S4,0018 (SP) -LW S5,001C (SP) -LW S6,0020 (SP) -LW S7,0024 (SP) -LW S8,0028 (SP) -ADDIU SP,SP,00A0 -JR RA -OR V0,A0,R0 - -7F0D36D8 108208 V0=input from source port (A1,A2) - accepts: A0=(unused), A1=key: reg, A2=key: source: FE=keyboard, 1F=controller - Port address is released to response: - 111..... ........ device - ...11111 ........ unset bit of half-row you're looking up (0xF would be row 5) - ........ 11111111 source device - Response should be a byte: - 111..... specifies type of device (101: issue 2 keyboard, 111: issue 3 keyboard) - ...11111 bit is zero if key pressed -SW A1,0004 (SP) ;SP+4=A1 -ANDI T6,A1,00FF -ANDI V0,A2,00FF -ADDIU AT,R0,00FE -OR A1,T6,R0 ;A1->byte -SW A0,0000 (SP) ;SP+0=A0 -BNE V0,AT,7F0D37B4 ;use keyboard feed if 0xFE -SW A2,0008 (SP) ;SP+8=A2 -LUI A2,8005 -ADDIU V1,R0,00FF ;V1=FF: init. mask -ADDIU A2,A2,EC34 ;A2=8004EC34: keyboard buffer(?) -OR V0,R0,R0 ;V0=0: init. offset -ADDIU A3,R0,0008 -//7F0D370C: loop to mask away any keys pressed in the packets being tested -ANDI T8,A1,0001 -BNE T8,R0,7F0D372C ;skip if reg set -OR A0,A1,R0 -ADDU T9,A2,V0 -LBU T0,0000 (T9) ;T0=8004EC34+offset: -AND V1,V1,T0 -ANDI T1,V1,00FF -OR V1,T1,R0 ;V1=masked keys -//7F0D372C: -SRL A1,A0,0x1 ;A1>>=1: next reg bit -ANDI A0,A1,00FF -ANDI T3,A0,0001 -BNE T3,R0,7F0D3754 ;skip if reg set -SRL A1,A0,0x1 ;A1>>=1 -ADDU T4,A2,V0 -LBU T5,0001 (T4) ;T0=8004EC34+offset+1: -AND V1,V1,T5 -ANDI T6,V1,00FF -OR V1,T6,R0 ;V1=masked keys -//7F0D3754: -ANDI A0,A1,00FF -ANDI T8,A0,0001 -BNE T8,R0,7F0D3778 ;skip if reg set -SRL A1,A0,0x1 ;A1>>=1 -ADDU T9,A2,V0 -LBU T0,0002 (T9) ;T0=8004EC34+offset+2: -AND V1,V1,T0 -ANDI T1,V1,00FF -OR V1,T1,R0 ;V1=masked keys -//7F0D3778: -ANDI A0,A1,00FF -ANDI T3,A0,0001 -BNE T3,R0,7F0D379C ;skip if reg set -SRL A1,A0,0x1 ;A1>>=1 -ADDU T4,A2,V0 -LBU T5,0003 (T4) ;T0=8004EC34+offset+3: -AND V1,V1,T5 -ANDI T6,V1,00FF -OR V1,T6,R0 ;V1=masked keys -//7F0D379C: return keyboard output -ANDI T7,A1,00FF -ADDIU V0,V0,0004 ;V0+=4 next four offsets -BNE V0,A3,7F0D370C ;loop twice -OR A1,T7,R0 -JR RA -OR V0,V1,R0 ;V0=key mask -//7F0D37B4: Kempston joystick -ADDIU AT,R0,001F -BNE V0,AT,7F0D37C8 ;use controller if 1F -LUI V0,8005 -JR RA -LBU V0,EC40 (V0) ;V0=8004EC40: controls -//7F0D37C8: no output: all keys masked -ADDIU V0,R0,00FF -JR RA -NOP - -7F0D37D4 108304 unconditional return -JR RA -NOP - -7F0D37DC 10830C V0= A3 written to port A2 or 0 if not required; A2 must be port 254 - accepts: A0=#cycles (unused), A1=spec.A (unused), A2=port, A3=value -ANDI T6,A2,00FF -ADDIU AT,R0,00FE -SW A0,0000 (SP) ;SP+0= #cycles -SW A1,0004 (SP) ;SP+4= value -SW A2,0008 (SP) ;SP+8= spec.A -SW A3,000C (SP) ;SP+C= spec.A -BNE T6,AT,7F0D3820 ;do nothing if not -2 -ANDI T7,A3,00FF -//7F0D37FC: port 254: keyboard -LUI T8,8005 -LBU T8,ED54 (T8) ;T8=8004ED54 -ANDI V0,T7,0007 ;V0= entry->nibble -LUI AT,8005 -BEQ V0,T8,7F0D3818 ;skip if values same -NOP -SB V0,ED54 (AT) ;V0->8004ED54: update value -//7F0D3818: -JR RA -OR V0,R0,R0 -//7F0D3820: -OR V0,R0,R0 -JR RA -NOP - -7F0D382C 10835C Spectrum hardware emulation -ADDIU SP,SP,FD50 -LUI T6,0001 -ORI T6,T6,1100 -SW T6,0280 (SP) ;SP+280=11100: #cycles -LUI T6,8009 -LBU T6,E341 (T6) -LUI T5,8009 -LUI T7,8009 -LUI T8,8009 -LUI T9,8009 -LUI T0,8009 -LUI T1,8009 -LBU T5,E340 (T5) -LBU T7,E342 (T7) -LBU T8,E343 (T8) -LBU T9,E344 (T9) -LBU T0,E345 (T0) -LBU T1,E346 (T1) -SB R0,02A5 (SP) -SB R0,02A0 (SP) -SB R0,02A1 (SP) -SB R0,02A2 (SP) -SB R0,02A3 (SP) -SB R0,02A4 (SP) -SB R0,02A6 (SP) -SB T6,02A5 (SP) -LUI T6,8009 -SB T5,02A6 (SP) -SB T7,02A4 (SP) -SB T8,02A3 (SP) -SB T9,02A2 (SP) -SB T0,02A1 (SP) -SB T1,02A0 (SP) -LBU T6,E349 (T6) -LUI T2,8009 -LUI T3,8009 -LUI T4,8009 -LUI T5,8009 -LUI T7,8009 -LUI T8,8009 -LUI T9,8009 -LUI T0,8009 -LUI T1,8009 -LBU T2,E347 (T2) ;T2=8008E347: -LBU T3,E34A (T3) ;T3=8008E34A: spec.IFF2 (l) -LBU T4,E34B (T4) ;T4=8008E34B: spec.IFF2 (u) -LBU T5,E348 (T5) ;T5=8008E348: spec.I -LBU T7,E34C (T7) ;T7=8008E34C: spec.IM -LHU T8,E34E (T8) ;T8=8008E34E: spec.IX -LHU T9,E350 (T9) ;T9=8008E350: spec.IY -LHU T0,E352 (T0) ;T0=8008E352: spec.SP -LHU T1,E354 (T1) ;T1=8008E354: spec.PC -SW S7,0030 (SP) -SW S6,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LUI AT,0001 -SB R0,029B (SP) -SB R0,029C (SP) -SB R0,029D (SP) -SB R0,02A7 (SP) -SB R0,029E (SP) -SB R0,029F (SP) -SH R0,0298 (SP) ;spec.PC = 0 -SH R0,0292 (SP) -SH R0,0294 (SP) -SH R0,0296 (SP) -SW R0,0288 (SP) -LUI S0,8009 -LUI S1,8009 -LUI S2,8009 -LUI S3,8009 -LUI S4,8009 -LUI S5,8009 -LUI S6,8009 -LUI S7,8009 -ORI AT,AT,1100 ;AT=11100 -SW RA,0034 (SP) -SB R0,0286 (SP) -SB R0,0287 (SP) -SW R0,028C (SP) ;SP+28C=0: reset cycles -LBU S0,E338 (S0) -LBU S1,E339 (S1) -LBU S2,E33A (S2) -LBU S3,E33B (S3) -LBU S4,E33C (S4) -LBU S5,E33D (S5) -LBU S6,E33E (S6) -LBU S7,E33F (S7) -SB T6,02A7 (SP) -SW T6,0288 (SP) -SB T2,029F (SP) -SB T3,029D (SP) ;SP+29D = spec.IFF2 (l) -SB T4,029C (SP) ;SP+29C = spec.IFF2 (u) -SB T5,029E (SP) ;SP+29E = spec.I -SB T7,029B (SP) ;SP+29B = spec.IM -SH T8,0296 (SP) ;SP+296 = spec.IX -SH T9,0294 (SP) ;SP+294 = spec.IY -SH T0,0292 (SP) ;SP+292 = spec.SP -BNE AT,R0,7F0D39D8 ;branch if AT set -SH T1,0298 (SP) ;SP+298 = spec.PC -LBU T3,0285 (SP) -BNE T3,R0,7F0E281C -//7F0D39D8: -LUI T7,8009 -LBU T4,0286 (SP) -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T6,0298 (SP) ;T6=spec.PC -ADDIU T5,R0,0001 -SB R0,0286 (SP) -SB T5,0285 (SP) -SB T4,0287 (SP) -ADDU T8,T6,T7 -LBU T9,0000 (T8) ;T9= ROM+offset: cmd -LW T1,0288 (SP) -ADDIU T0,T6,0001 -ANDI T3,T9,00FF -SLTIU AT,T3,0100 -ADDIU T2,T1,0001 -SH T0,0298 (SP) ;spec.PC+=1 -SW T2,0288 (SP) -BEQ AT,R0,7F0E27FC -SB T9,0284 (SP) -SLL T3,T3,0x2 -LUI AT,8006 -ADDU AT,AT,T3 -LW T3,C12C (AT) ;T3=8005C12C+offset: p->handler for cmd -JR T3 -NOP -//7F0D3A3C: 00: NOP 4 -LW T4,028C (SP) -ADDIU T5,T4,0004 -BEQ R0,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=4 -//7F0D3A4C: 01: LD BC,nn 10 -LW T7,028C (SP) -LHU T9,0298 (SP) ;T9=spec.PC -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -ADDIU T8,T7,000A -SW T8,028C (SP) ;cycles+=A -ADDIU T4,T9,0001 -ADDU T0,T9,T6 -LBU S3,0000 (T0) ;S3= val.l: set to C -ANDI T2,T4,FFFF -SH T4,0298 (SP) ;spec.PC+=1 -ADDU T3,T2,T6 -LBU S2,0000 (T3) ;S2=val.u: set to B -ADDIU T5,T4,0001 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) ;spec.PC+=2 -//7F0D3A8C 02: LD (BC),A 7 -LW T7,028C (SP) -SLL T0,S2,0x8 -OR T9,T0,S3 ;T9= (S2,S3): spec.BC -SLTI AT,T9,5B00 -ADDIU T8,T7,0007 -BNE AT,R0,7F0D3AC4 -SW T8,028C (SP) ;cycles+=7 -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -SLL T6,S2,0x8 -OR T3,T6,S3 ;T3= spec.BC -ADDU T1,T2,T3 -BEQ R0,R0,7F0E27FC -SB S0,0000 (T1) ;S0->ROM+BC: set A to BC -//7F0D3AC4: -SLL T4,S2,0x8 -OR T5,T4,S3 ;T5= spec.BC -SLTI AT,T5,5800 -BNE AT,R0,7F0D3B10 -SLL T5,S2,0x8 -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -SLL T8,S2,0x8 -OR T0,T8,S3 ;T0= spec.BC -ADDU T9,T7,T0 -SB S0,0000 (T9) ;S0->ROM+BC -LUI T2,8009 -LW T2,E32C (T2) -SLL T3,S2,0x8 -OR T1,T3,S3 -ADDIU T6,R0,0001 -ADDU T4,T2,T1 -BEQ R0,R0,7F0E27FC -SB T6,A800 (T4) -//7F0D3B10: -OR T8,T5,S3 ;T8=spec.BC -SLTI AT,T8,4000 -BNE AT,R0,7F0E27FC -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -SLL T0,S2,0x8 -OR T9,T0,S3 -ADDU T3,T7,T9 -SB S0,0000 (T3) -SLL T1,S2,0x8 -OR T6,T1,S3 -LUI T3,8009 -SLL T8,S2,0x8 -LW T3,E32C (T3) -OR T0,T8,S3 -ANDI T4,T6,1800 -SRA T5,T4,0x3 -ANDI T7,T0,00FF -OR T9,T5,T7 -ADDIU T2,R0,0001 -ADDU T1,T3,T9 -BEQ R0,R0,7F0E27FC -SB T2,0000 (T1) -//7F0D3B6C: 03: INC BC 6 -LW T6,028C (SP) -ADDIU S3,S3,0001 ;S3+=1 C+=1 -ANDI T8,S3,00FF -ADDIU T4,T6,0006 -SW T4,028C (SP) ;cycles+=6 -BNE T8,R0,7F0E27FC ;if overflow, also increment B -OR S3,T8,R0 -ADDIU S2,S2,0001 ;S2+=1 B+=1 -ANDI T0,S2,00FF -BEQ R0,R0,7F0E27FC -OR S2,T0,R0 -//7F0D3B98: 04: INC B 4 -ADDIU S2,S2,0001 ;S2+=1 B+=1 -ANDI T3,S2,00FF -LW T5,028C (SP) -ANDI T2,T3,000F -SLTIU T1,T2,0001 -OR S2,T3,R0 -SLTIU T9,T3,0001 -ANDI T4,T3,00A8 -ANDI T6,S1,0001 -OR T8,T6,T4 -XORI T2,S2,0080 -SLL T0,T1,0x4 -ADDIU T7,T5,0004 -OR T5,T8,T0 -SLTIU T2,T2,0001 -SLL T3,T9,0x6 -SW T9,0044 (SP) -OR T9,T5,T3 -SLL T6,T2,0x2 -OR S1,T9,T6 -ANDI T4,S1,00FF -SW T7,028C (SP) ;cycles+=4 -OR S1,T4,R0 -BEQ R0,R0,7F0E27FC -SW T1,0048 (SP) -//7F0D3BFC: 05: DEC B 4 -LW T1,028C (SP) -ANDI T0,S2,000F -ADDIU S2,S2,FFFF ;S2-=1 B-=1 -ADDIU T8,T1,0004 -SW T8,028C (SP) ;cycles+=4 -ANDI T6,S2,00FF -SLTIU T7,T0,0001 -SLL T3,T7,0x4 -XORI T8,T6,007F -SLTIU T8,T8,0001 -ANDI T5,S1,0001 -OR S1,T5,T3 -SLL T0,T8,0x2 -SW T7,0048 (SP) -SLTIU T4,T6,0001 -ANDI T1,T6,00A8 -OR T7,T1,T0 -SLL T3,T4,0x6 -OR T2,T7,T3 -ORI T9,S1,0002 -OR S1,T9,T2 -ANDI T9,S1,00FF -OR S1,T9,R0 -SW T4,0044 (SP) -BEQ R0,R0,7F0E27FC -OR S2,T6,R0 -//7F0D3C64: 06: LD B,n 7 -LW T6,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T8,0298 (SP) ;T8=spec.PC -ADDIU T4,T6,0007 -SW T4,028C (SP) ;cycles+=7 -ADDU T0,T8,T1 -LBU S2,0000 (T0) ;S2= val: B -ADDIU T5,T8,0001 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) ;spec.PC+=1 -//7F0D3C90: 07: RLCA 4 -SLL T2,S0,0x1 ;T2= spec.A * 2 -SRA T9,S0,0x7 ;T9= sign of spec.A -OR S0,T2,T9 ;spec.A = roll left 1 bit (order: 65432107) -LW T7,028C (SP) -ANDI T6,S0,00FF -ANDI T1,T6,0029 ;T1= spec.A & 29 (00101001) -ANDI T4,S1,00C4 ;T4= carry & C4 (11000100) -OR S1,T4,T1 ;S1 = flags (12 cleared) -ANDI T0,S1,00FF -ADDIU T3,T7,0004 -SW T3,028C (SP) ;cycles+=4 -OR S0,T6,R0 -BEQ R0,R0,7F0E27FC -OR S1,T0,R0 -//7F0D3CC8: 08: EX AF,AF' 4 -LW T8,028C (SP) -SB S0,027F (SP) -SB S1,027E (SP) -LBU T7,027F (SP) -LBU T3,027E (SP) -LBU S0,02A6 (SP) -LBU S1,02A5 (SP) -ADDIU T5,T8,0004 -SW T5,028C (SP) ;cycles+=4 -SB T7,02A6 (SP) -BEQ R0,R0,7F0E27FC -SB T3,02A5 (SP) -//7F0D3CF8: 09: ADD HL,BC 11 -LW T2,028C (SP) -LBU T6,0287 (SP) -LBU T1,0287 (SP) -ADDIU T9,T2,000B -BNE T6,R0,7F0D3D7C -SW T9,028C (SP) ;cycles+=B -ADDU T4,S7,S3 -ANDI T1,T4,FFFF -SRL T0,T1,0x8 -ANDI T5,T0,FFFF -ANDI T8,S6,000F -ADDU T7,T5,T8 -ANDI T3,S2,000F -ADDU T2,T7,T3 -SH T4,027C (SP) -ADDIU AT,R0,000F -SLT T9,AT,T2 -LBU S7,027D (SP) -ADDU T5,S6,S2 -ADDU T2,T0,T5 -SH T0,027C (SP) -SH T2,027C (SP) -LBU S6,027D (SP) -SLL T6,T9,0x4 ;T6= HALFCARRY flag (10) -ANDI T4,S1,00C4 ;T4= retained flags (11000100) -OR T1,T6,T4 -SRA T9,T2,0x8 -ANDI T3,S6,0028 -OR T6,T3,T9 -OR S1,T1,T6 -ANDI T4,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T4,R0 -//7F0D3D7C: -ADDIU AT,R0,0001 -BNE T1,AT,7F0D3D94 -SLL T2,S2,0x8 -LHU T0,0296 (SP) -BEQ R0,R0,7F0D3D9C -SW T0,0278 (SP) -//7F0D3D94: -LHU T8,0294 (SP) -SW T8,0278 (SP) -//7F0D3D9C: -LW T5,0278 (SP) -OR T3,T2,S3 -ADDIU AT,R0,0FFF -ANDI T7,T5,0FFF -ADDU T9,T7,T3 -SLTU T6,AT,T9 -LBU T3,0287 (SP) -SLL T4,T6,0x4 -ANDI T1,S1,00C4 -SLL T8,S2,0x8 -OR T2,T8,S3 -OR S1,T1,T4 -ANDI T0,S1,00FF -ADDIU AT,R0,0001 -ADDU T7,T5,T2 -SW T7,0278 (SP) -BNE T3,AT,7F0D3DEC -OR S1,T0,R0 -BEQ R0,R0,7F0D3DF4 -SH T7,0296 (SP) -//7F0D3DEC: -LW T9,0278 (SP) -SH T9,0294 (SP) -//7F0D3DF4: -LW T6,0278 (SP) -SRL T1,T6,0x8 -ANDI T4,T1,0028 -SRL T0,T6,0x10 -OR T8,T4,T0 -OR S1,S1,T8 -ANDI T5,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T5,R0 -//7F0D3E18: 0A: LD A,(BC) 7 -LW T2,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -SLL T7,S2,0x8 -OR T9,T7,S3 ;T9=spec.BC -ADDIU T3,T2,0007 -SW T3,028C (SP) ;cycles+=7 -ADDU T6,T9,T1 -BEQ R0,R0,7F0E27FC -LBU S0,0000 (T6) ;S0=ROM+BC: load to A -//7F0D3E40: 0B: DEC BC 6 -LW T4,028C (SP) -SLTIU T8,S3,0001 -ADDIU S3,S3,FFFF ;S3-=1 C-=1 -ANDI T5,S3,00FF -ADDIU T0,T4,0006 -SW T0,028C (SP) ;cycles+=6 -OR S3,T5,R0 -BEQ T8,R0,7F0E27FC ;carry if necessary -SW T8,0048 (SP) -ADDIU S2,S2,FFFF ;S2-=1 B-=1 -ANDI T3,S2,00FF -BEQ R0,R0,7F0E27FC -OR S2,T3,R0 -//7F0D3E74: 0C: INC C 4 -ADDIU S3,S3,0001 ;S3+=1 C+=1 -ANDI T1,S3,00FF -LW T7,028C (SP) -ANDI T4,T1,000F -SLTIU T0,T4,0001 -OR S3,T1,R0 -SLTIU T6,T1,0001 -ANDI T5,T1,00A8 -ANDI T8,S1,0001 -OR T2,T8,T5 -XORI T4,S3,0080 -SLL T3,T0,0x4 -ADDIU T9,T7,0004 -OR T7,T2,T3 -SLTIU T4,T4,0001 -SLL T1,T6,0x6 -SW T6,0044 (SP) -OR T6,T7,T1 -SLL T8,T4,0x2 -OR S1,T6,T8 -ANDI T5,S1,00FF -SW T9,028C (SP) ;cycles+=4 -OR S1,T5,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0D3ED8: 0D: DEC C 4 -LW T0,028C (SP) -ANDI T3,S3,000F -ADDIU S3,S3,FFFF ;S3-=1 C-=1 -ADDIU T2,T0,0004 -SW T2,028C (SP) ;cycles+=4 -ANDI T8,S3,00FF -SLTIU T9,T3,0001 -SLL T1,T9,0x4 -XORI T2,T8,007F -SLTIU T2,T2,0001 -ANDI T7,S1,0001 -OR S1,T7,T1 -SLL T3,T2,0x2 -SW T9,0048 (SP) -SLTIU T5,T8,0001 -ANDI T0,T8,00A8 -OR T9,T0,T3 -SLL T1,T5,0x6 -OR T4,T9,T1 -ORI T6,S1,0002 -OR S1,T6,T4 -ANDI T6,S1,00FF -OR S1,T6,R0 -SW T5,0044 (SP) -BEQ R0,R0,7F0E27FC -OR S3,T8,R0 -//7F0D3F40: 0E: LD C,n 7 -LW T8,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T2,0298 (SP) ;T2=spec.PC -ADDIU T5,T8,0007 -SW T5,028C (SP) ;cycles+=7 -ADDU T3,T2,T0 -LBU S3,0000 (T3) ;S3= val: load to C -ADDIU T7,T2,0001 -BEQ R0,R0,7F0E27FC -SH T7,0298 (SP) ;spec.PC+=1 -//7F0D3F6C: 0F: RRCA 4 -ANDI T6,S0,0001 -SRA T5,S0,0x1 -SLL T0,S0,0x7 -OR S0,T5,T0 -LW T9,028C (SP) -ANDI T4,S1,00C4 -ANDI T3,S0,00FF -OR T8,T4,T6 -ANDI T2,T3,0028 -OR S1,T8,T2 -ANDI T7,S1,00FF -ADDIU T1,T9,0004 -SW T1,028C (SP) ;cycles+=4 -OR S0,T3,R0 -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0D3FAC: 10: DJNZ d 13(8) -LW T9,028C (SP) -ADDIU S2,S2,FFFF ;spec.B-=1 -ANDI T4,S2,00FF -ADDIU T1,T9,0008 -SW T1,028C (SP) ;cycles+=8 -BNE T4,R0,7F0D3FD8 ;return if B empty -OR S2,T4,R0 -LHU T6,0298 (SP) -ADDIU T8,T6,0001 -BEQ R0,R0,7F0E27FC -SH T8,0298 (SP) ;spec.PC+=1 -//7F0D3FD8: -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T5,0298 (SP) ;T5=spec.PC -LW T1,028C (SP) -ADDU T3,T5,T0 -LB T2,0000 (T3) ;T2= val -ADDIU T4,T1,0005 -SW T4,028C (SP) ;cycles+=5 13 total on jump -ADDU T7,T5,T2 -ADDIU T9,T7,0001 -SH T9,0298 (SP) ;spec.PC+= val+1 -BEQ R0,R0,7F0E27FC -SW T2,0274 (SP) -//7F0D400C: 11: LD DE,nn 10 -LW T6,028C (SP) -LHU T0,0298 (SP) ;T0=spec.PC -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -ADDIU T8,T6,000A -SW T8,028C (SP) ;cycles+=A -ADDIU T1,T0,0001 -ADDU T5,T0,T3 -LBU S5,0000 (T5) ;S5=ROM+PC: set to E -ANDI T7,T1,FFFF -SH T1,0298 (SP) ;spec.PC+=1 -ADDU T9,T7,T3 -LBU S4,0000 (T9) ;S4=ROM+PC+1: set to D -ADDIU T4,T1,0001 -BEQ R0,R0,7F0E27FC -SH T4,0298 (SP) ;spec.PC+=1 -//7F0D404C: 12: LD (DE),A 7 -LW T6,028C (SP) -SLL T5,S4,0x8 -OR T0,T5,S5 ;T0= spec.DE -SLTI AT,T0,5B00 -ADDIU T8,T6,0007 -BNE AT,R0,7F0D4084 -SW T8,028C (SP) ;cycles+=7 -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -SLL T3,S4,0x8 -OR T9,T3,S5 ;T9= spec.DE -ADDU T2,T7,T9 -BEQ R0,R0,7F0E27FC -SB S0,0000 (T2) ;A0->ROM+DE -//7F0D4084: -SLL T1,S4,0x8 -OR T4,T1,S5 -SLTI AT,T4,5800 -BNE AT,R0,7F0D40D0 -SLL T4,S4,0x8 -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -SLL T8,S4,0x8 -OR T5,T8,S5 -ADDU T0,T6,T5 -SB S0,0000 (T0) -LUI T7,8009 -LW T7,E32C (T7) -SLL T9,S4,0x8 -OR T2,T9,S5 -ADDIU T3,R0,0001 -ADDU T1,T7,T2 -BEQ R0,R0,7F0E27FC -SB T3,A800 (T1) -//7F0D40D0: -OR T8,T4,S5 -SLTI AT,T8,4000 -BNE AT,R0,7F0E27FC -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -SLL T5,S4,0x8 -OR T0,T5,S5 -ADDU T9,T6,T0 -SB S0,0000 (T9) -SLL T2,S4,0x8 -OR T3,T2,S5 -LUI T9,8009 -SLL T8,S4,0x8 -LW T9,E32C (T9) -OR T5,T8,S5 -ANDI T1,T3,1800 -SRA T4,T1,0x3 -ANDI T6,T5,00FF -OR T0,T4,T6 -ADDIU T7,R0,0001 -ADDU T2,T9,T0 -BEQ R0,R0,7F0E27FC -SB T7,0000 (T2) -//7F0D412C: 13: 1NC DE 6 -LW T3,028C (SP) -ADDIU S5,S5,0001 ;S5+=1 spec.E+=1 -ANDI T8,S5,00FF -ADDIU T1,T3,0006 -SW T1,028C (SP) ;cycles+=6 -BNE T8,R0,7F0E27FC ;inc D on overflow -OR S5,T8,R0 -ADDIU S4,S4,0001 ;S4+=1 spec.D+=1 -ANDI T5,S4,00FF -BEQ R0,R0,7F0E27FC -OR S4,T5,R0 -//7F0D4158: 14: INC D 4 -ADDIU S4,S4,0001 ;S4+=1 spec.D+=1 -ANDI T9,S4,00FF -LW T4,028C (SP) -ANDI T7,T9,000F -SLTIU T2,T7,0001 -OR S4,T9,R0 -SLTIU T0,T9,0001 -ANDI T1,T9,00A8 -ANDI T3,S1,0001 -OR T8,T3,T1 -XORI T7,S4,0080 -SLL T5,T2,0x4 -ADDIU T6,T4,0004 -OR T4,T8,T5 -SLTIU T7,T7,0001 -SLL T9,T0,0x6 -SW T0,0044 (SP) -OR T0,T4,T9 -SLL T3,T7,0x2 -OR S1,T0,T3 -ANDI T1,S1,00FF -SW T6,028C (SP) ;cycles+=4 -OR S1,T1,R0 -BEQ R0,R0,7F0E27FC -SW T2,0048 (SP) -//7F0D41BC: 15: DEC D 4 -LW T2,028C (SP) -ANDI T5,S4,000F -ADDIU S4,S4,FFFF ;S4-=1 spec.D-=1 -ADDIU T8,T2,0004 -SW T8,028C (SP) ;cycles+=4 -ANDI T3,S4,00FF -SLTIU T6,T5,0001 -SLL T9,T6,0x4 -XORI T8,T3,007F -SLTIU T8,T8,0001 -ANDI T4,S1,0001 -OR S1,T4,T9 -SLL T5,T8,0x2 -SW T6,0048 (SP) -SLTIU T1,T3,0001 -ANDI T2,T3,00A8 -OR T6,T2,T5 -SLL T9,T1,0x6 -OR T7,T6,T9 -ORI T0,S1,0002 -OR S1,T0,T7 -ANDI T0,S1,00FF -OR S1,T0,R0 -SW T1,0044 (SP) -BEQ R0,R0,7F0E27FC -OR S4,T3,R0 -//7F0D4224: 16: LD D,n 7 -LW T3,028C (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T8,0298 (SP) ;T8=spec.PC -ADDIU T1,T3,0007 -SW T1,028C (SP) ;cycles+=7 -ADDU T5,T8,T2 -LBU S4,0000 (T5) ;S4= val: set to D -ADDIU T4,T8,0001 -BEQ R0,R0,7F0E27FC -SH T4,0298 (SP) ;spec.PC+=1 -//7F0D4250: 17: RLA 4 -SRA T7,S0,0x7 -SLL T0,S0,0x1 -ANDI T3,S1,0001 -OR S0,T0,T3 -LW T6,028C (SP) -ANDI T1,S0,00FF -ANDI T5,T1,0028 -ANDI T2,S1,00C4 -OR T8,T2,T5 -OR S1,T8,T7 -ADDIU T9,T6,0004 -ANDI T6,S1,00FF -SW T9,028C (SP) ;cycles+=4 -SW T7,0270 (SP) -OR S0,T1,R0 -BEQ R0,R0,7F0E27FC -OR S1,T6,R0 -//7F0D4294: 18: JR n 12(7) -LW T9,028C (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T0,0298 (SP) ;T0= spec.PC -ADDIU T7,T9,0007 -SW T7,028C (SP) ;cycles+=7 -ADDU T1,T0,T3 -LB T2,0000 (T1) ;T2= val -ADDIU T6,T7,0005 -SW T6,028C (SP) ;cycles+=5 12 total -ADDU T5,T0,T2 -ADDIU T8,T5,0001 -SH T8,0298 (SP) ;spec.PC = ROM+d+1 -BEQ R0,R0,7F0E27FC -SW T2,026C (SP) -//7F0D42D0: 19: ADD HL,DE 11 -LW T9,028C (SP) -LBU T3,0287 (SP) -LBU T0,0287 (SP) -ADDIU T7,T9,000B -BNE T3,R0,7F0D4354 -SW T7,028C (SP) ;cycles+=B -ADDU T1,S7,S5 -ANDI T0,T1,FFFF -SRL T2,T0,0x8 -ANDI T8,T2,FFFF -ANDI T5,S6,000F -ADDU T4,T8,T5 -ANDI T6,S4,000F -ADDU T9,T4,T6 -SH T1,026A (SP) -ADDIU AT,R0,000F -SLT T7,AT,T9 -LBU S7,026B (SP) -ADDU T8,S6,S4 -ADDU T9,T2,T8 -SH T2,026A (SP) -SH T9,026A (SP) -LBU S6,026B (SP) -SLL T3,T7,0x4 -ANDI T1,S1,00C4 -OR T0,T3,T1 -SRA T7,T9,0x8 -ANDI T6,S6,0028 -OR T3,T6,T7 -OR S1,T0,T3 -ANDI T1,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T1,R0 -//7F0D4354: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D436C -SLL T9,S4,0x8 -LHU T2,0296 (SP) -BEQ R0,R0,7F0D4374 -SW T2,0264 (SP) -//7F0D436C: -LHU T5,0294 (SP) -SW T5,0264 (SP) -LW T8,0264 (SP) -OR T6,T9,S5 -ADDIU AT,R0,0FFF -ANDI T4,T8,0FFF -ADDU T7,T4,T6 -SLTU T3,AT,T7 -LBU T6,0287 (SP) -SLL T1,T3,0x4 -ANDI T0,S1,00C4 -SLL T5,S4,0x8 -OR T9,T5,S5 -OR S1,T0,T1 -ANDI T2,S1,00FF -ADDIU AT,R0,0001 -ADDU T4,T8,T9 -SW T4,0264 (SP) -BNE T6,AT,7F0D43C4 -OR S1,T2,R0 -BEQ R0,R0,7F0D43CC -SH T4,0296 (SP) -//7F0D43C4: -LW T7,0264 (SP) -SH T7,0294 (SP) -//7F0D43CC: -LW T3,0264 (SP) -SRL T0,T3,0x8 -ANDI T1,T0,0028 -SRL T2,T3,0x10 -OR T5,T1,T2 -OR S1,S1,T5 -ANDI T8,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T8,R0 -//7F0D43F0: 1A: LD A,(DE) 7 -LW T9,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -SLL T4,S4,0x8 -OR T7,T4,S5 -ADDIU T6,T9,0007 -SW T6,028C (SP) ;cycles+=7 -ADDU T3,T7,T0 -BEQ R0,R0,7F0E27FC -LBU S0,0000 (T3) -//7F0D4418: 1B: DEC DE 6 -LW T1,028C (SP) -SLTIU T5,S5,0001 -ADDIU S5,S5,FFFF ;S5-=1 spec.E-=1 -ANDI T8,S5,00FF -ADDIU T2,T1,0006 -SW T2,028C (SP) ;cycles+=6 -OR S5,T8,R0 -BEQ T5,R0,7F0E27FC ;dec D on overflow -SW T5,0048 (SP) -ADDIU S4,S4,FFFF ;S4-=1 spec.D-=1 -ANDI T6,S4,00FF -BEQ R0,R0,7F0E27FC -OR S4,T6,R0 -//7F0D444C: 1C: INC E 4 -ADDIU S5,S5,0001 ;S5+=1 spec.E+=1 -ANDI T0,S5,00FF -LW T4,028C (SP) -ANDI T1,T0,000F -SLTIU T2,T1,0001 -OR S5,T0,R0 -SLTIU T3,T0,0001 -ANDI T8,T0,00A8 -ANDI T5,S1,0001 -OR T9,T5,T8 -XORI T1,S5,0080 -SLL T6,T2,0x4 -ADDIU T7,T4,0004 -OR T4,T9,T6 -SLTIU T1,T1,0001 -SLL T0,T3,0x6 -SW T3,0044 (SP) -OR T3,T4,T0 -SLL T5,T1,0x2 -OR S1,T3,T5 -ANDI T8,S1,00FF -SW T7,028C (SP) ;cycles+=4 -OR S1,T8,R0 -BEQ R0,R0,7F0E27FC -SW T2,0048 (SP) -//7F0D44B0: 1D: DEC E 4 -LW T2,028C (SP) -ANDI T6,S5,000F -ADDIU S5,S5,FFFF ;S5-=1 spec.E-=1 -ADDIU T9,T2,0004 -SW T9,028C (SP) ;cycles+=4 -ANDI T5,S5,00FF -SLTIU T7,T6,0001 -SLL T0,T7,0x4 -XORI T9,T5,007F -SLTIU T9,T9,0001 -ANDI T4,S1,0001 -OR S1,T4,T0 -SLL T6,T9,0x2 -SW T7,0048 (SP) -SLTIU T8,T5,0001 -ANDI T2,T5,00A8 -OR T7,T2,T6 -SLL T0,T8,0x6 -OR T1,T7,T0 -ORI T3,S1,0002 -OR S1,T3,T1 -ANDI T3,S1,00FF -OR S1,T3,R0 -SW T8,0044 (SP) -BEQ R0,R0,7F0E27FC -OR S5,T5,R0 -//7F0D4518: 1E: LD E,n 7 -LW T5,028C (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T9,0298 (SP) ;T9=spec.PC -ADDIU T8,T5,0007 -SW T8,028C (SP) ;cycles+=7 -ADDU T6,T9,T2 -LBU S5,0000 (T6) ;S5= val: set spec.E -ADDIU T4,T9,0001 -BEQ R0,R0,7F0E27FC -SH T4,0298 (SP) ;spec.PC+=1 -//7F0D4544: 1F: RRA 4 -ANDI T1,S0,0001 -SRA T3,S0,0x1 -SLL T5,S1,0x7 -OR S0,T3,T5 -LW T7,028C (SP) -ANDI T8,S0,00FF -ANDI T6,T8,0028 -ANDI T2,S1,00C4 -OR T9,T2,T6 -OR S1,T9,T1 -ADDIU T0,T7,0004 -ANDI T7,S1,00FF -SW T0,028C (SP) ;cycles+=4 -SW T1,0260 (SP) -OR S0,T8,R0 -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0D4588: 20: JR NZ,n 12(7) -LW T0,028C (SP) -ANDI T3,S1,0040 -LHU T2,0298 (SP) ;T2=spec.PC -ADDIU T1,T0,0007 -BEQ T3,R0,7F0D45B0 -SW T1,028C (SP) ;cycles+=7 -LHU T5,0298 (SP) -ADDIU T8,T5,0001 -BEQ R0,R0,7F0E27FC -SH T8,0298 (SP) ;spec.SP+=1 -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LW T1,028C (SP) -ADDU T9,T2,T6 -LB T4,0000 (T9) ;T4= val -ADDIU T3,T1,0005 -SW T3,028C (SP) ;cycles+=5 total 12 -ADDU T7,T2,T4 -ADDIU T0,T7,0001 -SH T0,0298 (SP) -BEQ R0,R0,7F0E27FC -SW T4,025C (SP) -//7F0D45E0: 21: LD HL,nn 10 -LW T5,028C (SP) -LBU T6,0287 (SP) -LHU T9,0298 (SP) ;T9=spec.PC -ADDIU T8,T5,000A -BNE T6,R0,7F0D4628 -SW T8,028C (SP) ;cycles+=A -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -ADDIU T3,T9,0001 -ANDI T0,T3,FFFF -ADDU T4,T9,T2 -LBU S7,0000 (T4) -SH T3,0298 (SP) ;spec.PC+=1 -ADDU T1,T0,T2 -LBU S6,0000 (T1) -ADDIU T5,T3,0001 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) ;spec.PC+=1 -//7F0D4628: -LBU T8,0287 (SP) -ADDIU AT,R0,0001 -LHU T6,0298 (SP) ;T6=spec.PC -BNE T8,AT,7F0D4664 -LHU T5,0298 (SP) ;T5=spec.PC -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -ADDU T2,T4,T6 -LBU T1,0001 (T2) -ADDU T9,T6,T4 -LBU T0,0000 (T9) -SLL T7,T1,0x8 -OR T3,T0,T7 -BEQ R0,R0,7F0D4688 -SH T3,0296 (SP) -//7F0D4664: -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDU T6,T8,T5 -LBU T2,0001 (T6) -ADDU T9,T5,T8 -LBU T4,0000 (T9) -SLL T1,T2,0x8 -OR T0,T4,T1 -SH T0,0294 (SP) -//7F0D4688: -LHU T7,0298 (SP) -ADDIU T3,T7,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) ;spec.PC+=2 -//7F0D4698: 22: LD (nn),HL 16 -LW T9,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T5,0298 (SP) ;T5=spec.PC -ADDIU T8,T9,0010 -SW T8,028C (SP) ;cycles+=10 -ADDU T1,T6,T5 -LBU T0,0001 (T1) -ADDU T2,T5,T6 -LBU T4,0000 (T2) -LBU T8,0287 (SP) -SLL T7,T0,0x8 -ADDIU T9,T5,0002 -OR T3,T4,T7 -SH T3,025A (SP) -BNE T8,R0,7F0D4828 -SH T9,0298 (SP) ;spec.PC+=2 -ANDI T2,T3,FFFF -SLTI AT,T2,5B00 -BNE AT,R0,7F0D4700 -LHU T0,025A (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -ADDU T1,T6,T2 -BEQ R0,R0,7F0D4778 -SB S7,0000 (T1) -//7F0D4700: -SLTI AT,T0,5800 -BNE AT,R0,7F0D4738 -LHU T6,025A (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LUI T5,8009 -ADDIU T3,R0,0001 -ADDU T7,T4,T0 -SB S7,0000 (T7) -LHU T9,025A (SP) -LW T5,E32C (T5) -ADDU T8,T5,T9 -BEQ R0,R0,7F0D4778 -SB T3,A800 (T8) -//7F0D4738: -SLTI AT,T6,4000 -BNE AT,R0,7F0D4778 -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LUI T8,8009 -ADDIU T4,R0,0001 -ADDU T1,T2,T6 -SB S7,0000 (T1) -LHU T0,025A (SP) -LW T8,E32C (T8) -ANDI T7,T0,1800 -SRA T5,T7,0x3 -ANDI T9,T0,00FF -OR T3,T5,T9 -ADDU T2,T8,T3 -SB T4,0000 (T2) -//7F0D4778: -LHU T6,025A (SP) -LHU T5,025A (SP) -LUI T7,8009 -ADDIU T1,T6,0001 -SLTI AT,T1,5B00 -BNE AT,R0,7F0D47A4 -ADDIU T9,T5,0001 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -ADDU T0,T7,T6 -BEQ R0,R0,7F0E27FC -SB S6,0001 (T0) -//7F0D47A4: -SLTI AT,T9,5800 -BNE AT,R0,7F0D47DC -LHU T6,025A (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LUI T2,8009 -ADDIU T4,R0,0001 -ADDU T3,T8,T5 -SB S6,0001 (T3) -LHU T1,025A (SP) -LW T2,E32C (T2) -ADDU T7,T2,T1 -BEQ R0,R0,7F0E27FC -SB T4,A801 (T7) -//7F0D47DC: -ADDIU T0,T6,0001 -SLTI AT,T0,4000 -BNE AT,R0,7F0E27FC -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -ADDIU T5,R0,0001 -ADDU T8,T9,T6 -SB S6,0001 (T8) -LHU T3,025A (SP) -LUI T9,8009 -LW T9,E32C (T9) -ADDIU T2,T3,0001 -ANDI T1,T2,1800 -SRA T4,T1,0x3 -ANDI T7,T2,00FF -OR T0,T4,T7 -ADDU T6,T9,T0 -BEQ R0,R0,7F0E27FC -SB T5,0000 (T6) -//7F0D4728: -LBU T8,0287 (SP) -ADDIU AT,R0,0001 -LHU T3,025A (SP) -BNE T8,AT,7F0D49A4 -SLTI AT,T3,5B00 -BNE AT,R0,7F0D485C -LHU T7,025A (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T1,0296 (SP) -ADDU T4,T2,T3 -BEQ R0,R0,7F0D48DC -SB T1,0000 (T4) -//7F0D475C: -SLTI AT,T7,5800 -BNE AT,R0,7F0D4898 -LHU T1,025A (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T9,0296 (SP) -LUI T8,8009 -ADDU T5,T0,T7 -SB T9,0000 (T5) -LHU T2,025A (SP) -LW T8,E32C (T8) -ADDIU T6,R0,0001 -ADDU T3,T8,T2 -BEQ R0,R0,7F0D48DC -SB T6,A800 (T3) -//7F0D4798: -SLTI AT,T1,4000 -BNE AT,R0,7F0D48DC -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T4,0296 (SP) -ADDIU T9,R0,0001 -ADDU T7,T0,T1 -SB T4,0000 (T7) -LHU T5,025A (SP) -LUI T0,8009 -LW T0,E32C (T0) -ANDI T8,T5,1800 -SRA T2,T8,0x3 -ANDI T6,T5,00FF -OR T3,T2,T6 -ADDU T1,T0,T3 -SB T9,0000 (T1) -LHU T4,025A (SP) -LHU T0,025A (SP) -LHU T8,0296 (SP) -ADDIU T7,T4,0001 -SLTI AT,T7,5B00 -BNE AT,R0,7F0D4910 -ADDIU T3,T0,0001 -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -SRA T5,T8,0x8 -ADDU T6,T2,T4 -BEQ R0,R0,7F0E27FC -SB T5,0001 (T6) -//7F0D4810: -SLTI AT,T3,5800 -BNE AT,R0,7F0D4950 -LHU T3,025A (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T9,0296 (SP) -LUI T4,8009 -ADDU T8,T7,T0 -SRA T1,T9,0x8 -SB T1,0001 (T8) -LHU T5,025A (SP) -LW T4,E32C (T4) -ADDIU T2,R0,0001 -ADDU T6,T4,T5 -BEQ R0,R0,7F0E27FC -SB T2,A801 (T6) -//7F0D4850: -ADDIU T9,T3,0001 -SLTI AT,T9,4000 -BNE AT,R0,7F0E27FC -LHU T7,0296 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -SRA T0,T7,0x8 -ADDIU T4,R0,0001 -ADDU T8,T1,T3 -SB T0,0001 (T8) -LHU T5,025A (SP) -LUI T3,8009 -LW T3,E32C (T3) -ADDIU T2,T5,0001 -ANDI T6,T2,1800 -SRA T9,T6,0x3 -ANDI T7,T2,00FF -OR T1,T9,T7 -ADDU T0,T3,T1 -BEQ R0,R0,7F0E27FC -SB T4,0000 (T0) -//7F0D48A4: -LHU T8,025A (SP) -LHU T9,025A (SP) -LUI T6,8009 -SLTI AT,T8,5B00 -BNEL AT,R0,7F0D49D4 -SLTI AT,T9,5800 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T5,0294 (SP) -ADDU T2,T6,T8 -BEQ R0,R0,7F0D4A50 -SB T5,0000 (T2) -//7F0D48D0: -SLTI AT,T9,5800 -BNE AT,R0,7F0D4A0C -LHU T5,025A (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T7,0294 (SP) -LUI T0,8009 -ADDU T1,T3,T9 -SB T7,0000 (T1) -LHU T6,025A (SP) -LW T0,E32C (T0) -ADDIU T4,R0,0001 -ADDU T8,T0,T6 -BEQ R0,R0,7F0D4A50 -SB T4,A800 (T8) -//7F0D490C: -SLTI AT,T5,4000 -BNE AT,R0,7F0D4A50 -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T2,0294 (SP) -ADDIU T7,R0,0001 -ADDU T9,T3,T5 -SB T2,0000 (T9) -LHU T1,025A (SP) -LUI T3,8009 -LW T3,E32C (T3) -ANDI T0,T1,1800 -SRA T6,T0,0x3 -ANDI T4,T1,00FF -OR T8,T6,T4 -ADDU T5,T3,T8 -SB T7,0000 (T5) -LHU T2,025A (SP) -LHU T3,025A (SP) -LHU T0,0294 (SP) -ADDIU T9,T2,0001 -SLTI AT,T9,5B00 -BNE AT,R0,7F0D4A84 -ADDIU T8,T3,0001 -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -SRA T1,T0,0x8 -ADDU T4,T6,T2 -BEQ R0,R0,7F0E27FC -SB T1,0001 (T4) -//7F0D4A84: -SLTI AT,T8,5800 -BNE AT,R0,7F0D4AC4 -LHU T8,025A (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T7,0294 (SP) -LUI T2,8009 -ADDU T0,T9,T3 -SRA T5,T7,0x8 -SB T5,0001 (T0) -LHU T1,025A (SP) -LW T2,E32C (T2) -ADDIU T6,R0,0001 -ADDU T4,T2,T1 -BEQ R0,R0,7F0E27FC -SB T6,A801 (T4) -//7F0D4AC4: -ADDIU T7,T8,0001 -SLTI AT,T7,4000 -BNE AT,R0,7F0E27FC -LHU T9,0294 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -SRA T3,T9,0x8 -ADDIU T2,R0,0001 -ADDU T0,T5,T8 -SB T3,0001 (T0) -LHU T1,025A (SP) -LUI T8,8009 -LW T8,E32C (T8) -ADDIU T6,T1,0001 -ANDI T4,T6,1800 -SRA T7,T4,0x3 -ANDI T9,T6,00FF -OR T5,T7,T9 -ADDU T3,T8,T5 -BEQ R0,R0,7F0E27FC -SB T2,0000 (T3) -//7F0D4B18: 23: INC HL 6 -LW T0,028C (SP) -LBU T4,0287 (SP) -LBU T9,0287 (SP) -ADDIU T1,T0,0006 -BNE T4,R0,7F0D4B50 -SW T1,028C (SP) ;cycles+=6 -ADDIU S7,S7,0001 -ANDI T6,S7,00FF -BNE T6,R0,7F0E27FC -OR S7,T6,R0 -ADDIU S6,S6,0001 -ANDI T7,S6,00FF -BEQ R0,R0,7F0E27FC -OR S6,T7,R0 -//7F0D4B50: -ADDIU AT,R0,0001 -BNE T9,AT,7F0D4B6C -LHU T2,0294 (SP) -LHU T8,0296 (SP) -ADDIU T5,T8,0001 -BEQ R0,R0,7F0E27FC -SH T5,0296 (SP) -//7F0D4B6C: -ADDIU T3,T2,0001 -BEQ R0,R0,7F0E27FC -SH T3,0294 (SP) -//7F0D4B78: 24: INC H 4 -LW T0,028C (SP) -LBU T4,0287 (SP) -LBU T8,0287 (SP) -ADDIU T1,T0,0004 -BNE T4,R0,7F0D4BE8 -SW T1,028C (SP) ;cycles+=4 -ADDIU S6,S6,0001 -ANDI T6,S6,00FF -ANDI T9,T6,000F -SLTIU T8,T9,0001 -OR S6,T6,R0 -SLTIU T7,T6,0001 -ANDI T2,T6,00A8 -ANDI T5,S1,0001 -OR T3,T5,T2 -XORI T9,S6,0080 -SLL T0,T8,0x4 -OR T1,T3,T0 -SLTIU T9,T9,0001 -SLL T6,T7,0x6 -SW T7,0044 (SP) -OR T7,T1,T6 -SLL T5,T9,0x2 -OR S1,T7,T5 -ANDI T2,S1,00FF -OR S1,T2,R0 -BEQ R0,R0,7F0E27FC -SW T8,0048 (SP) -//7F0D4BE8: -ADDIU AT,R0,0001 -BNE T8,AT,7F0D4C00 -LHU T0,0294 (SP) -LHU T3,0296 (SP) -BEQ R0,R0,7F0D4C04 -SW T3,0048 (SP) -//7F0D4C00: -SW T0,0048 (SP) -//7F0D4C04: -LW T4,0048 (SP) -ANDI T0,S1,0001 -ADDIU AT,R0,0001 -SRA T6,T4,0x8 -ADDIU T2,T6,0001 -ANDI T7,T2,00FF -SLTIU T5,T7,0001 -ANDI T4,T2,00FF -SB T6,0259 (SP) -ANDI T1,T4,00A8 -SW T5,0044 (SP) -ANDI T8,T2,000F -LW T9,0044 (SP) -SLTIU T3,T8,0001 -OR T6,T0,T1 -SLL T7,T3,0x4 -OR T5,T6,T7 -XORI T0,T4,0080 -SB T2,0259 (SP) -SLTIU T0,T0,0001 -SLL T2,T9,0x6 -LBU T6,0287 (SP) -OR T8,T5,T2 -SLL T1,T0,0x2 -OR S1,T8,T1 -SW T3,0048 (SP) -ANDI T3,S1,00FF -BNE T6,AT,7F0D4C90 -OR S1,T3,R0 -LHU T7,0296 (SP) -SLL T5,T4,0x8 -ANDI T9,T7,00FF -OR T2,T9,T5 -BEQ R0,R0,7F0E27FC -SH T2,0296 (SP) -//7F0D4C90: -LHU T0,0294 (SP) -LBU T1,0259 (SP) -ANDI T8,T0,00FF -SLL T3,T1,0x8 -OR T6,T8,T3 -BEQ R0,R0,7F0E27FC -SH T6,0294 (SP) -//7F0D4CAC: 25: DEC H 4 -LW T7,028C (SP) -LBU T9,0287 (SP) -LBU T6,0287 (SP) -ADDIU T4,T7,0004 -BNE T9,R0,7F0D4D20 -SW T4,028C (SP) ;cycles+=4 -ANDI T5,S6,000F -ADDIU S6,S6,FFFF -ANDI T6,S6,00FF -SLTIU T2,T5,0001 -SLL T1,T2,0x4 -XORI T9,T6,007F -SLTIU T9,T9,0001 -ANDI T0,S1,0001 -OR S1,T0,T1 -SLL T5,T9,0x2 -SW T2,0048 (SP) -SLTIU T7,T6,0001 -ANDI T4,T6,00A8 -OR T2,T4,T5 -SLL T1,T7,0x6 -OR T8,T2,T1 -ORI T3,S1,0002 -OR S1,T3,T8 -ANDI T3,S1,00FF -OR S1,T3,R0 -SW T7,0044 (SP) -BEQ R0,R0,7F0E27FC -OR S6,T6,R0 -//7F0D4D20: -ADDIU AT,R0,0001 -BNE T6,AT,7F0D4D38 -LHU T9,0294 (SP) -LHU T7,0296 (SP) -BEQ R0,R0,7F0D4D3C -SW T7,0048 (SP) -//7F0D4D38: -SW T9,0048 (SP) -//7F0D4D3C: -LW T4,0048 (SP) -ANDI T8,S1,0001 -ADDIU AT,R0,0001 -SRA T0,T4,0x8 -ANDI T2,T0,000F -SLTIU T1,T2,0001 -SLL T3,T1,0x4 -OR S1,T8,T3 -ANDI T9,T0,00FF -ADDIU T4,T9,FFFF -ANDI T8,T4,00FF -XORI T3,T8,007F -ORI T6,S1,0002 -SB T0,0258 (SP) -OR S1,T6,R0 -SLTIU T3,T3,0001 -ANDI T5,T4,00FF -SW T1,0048 (SP) -ANDI T1,T4,00A8 -SLTIU T0,T5,0001 -SLL T6,T3,0x2 -OR T7,T1,T6 -SLL T9,T0,0x6 -LBU T8,0287 (SP) -OR T5,T7,T9 -OR S1,S1,T5 -ANDI T2,S1,00FF -OR S1,T2,R0 -SW T0,0044 (SP) -BNE T8,AT,7F0D4DD0 -SB T4,0258 (SP) -LHU T3,0296 (SP) -SLL T0,T4,0x8 -ANDI T1,T3,00FF -OR T7,T1,T0 -BEQ R0,R0,7F0E27FC -SH T7,0296 (SP) -//7F0D4DD0: -LHU T9,0294 (SP) -LBU T2,0258 (SP) -ANDI T5,T9,00FF -SLL T8,T2,0x8 -OR T3,T5,T8 -BEQ R0,R0,7F0E27FC -SH T3,0294 (SP) -//7F0D4DEC: 26: LD H,n 7 -LW T4,028C (SP) -LBU T1,0287 (SP) -LBU T2,0287 (SP) -ADDIU T6,T4,0007 -BNE T1,R0,7F0D4E1C -SW T6,028C (SP) ;cycles+=7 -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T0,0298 (SP) ;T0=spec.PC -ADDU T9,T0,T7 -BEQ R0,R0,7F0D4E78 -LBU S6,0000 (T9) -//7F0D4E1C: -ADDIU AT,R0,0001 -BNE T2,AT,7F0D4E54 -LHU T9,0298 (SP) ;T9=spec.PC -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LHU T5,0298 (SP) ;T5=spec.PC -LHU T1,0296 (SP) -ADDU T3,T5,T8 -LBU T4,0000 (T3) -ANDI T0,T1,00FF -SLL T6,T4,0x8 -OR T7,T6,T0 -BEQ R0,R0,7F0D4E78 -SH T7,0296 (SP) -//7F0D4E54: -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T4,0294 (SP) -ADDU T5,T9,T2 -LBU T8,0000 (T5) -ANDI T1,T4,00FF -SLL T3,T8,0x8 -OR T6,T3,T1 -SH T6,0294 (SP) -LHU T0,0298 (SP) ;T0=spec.PC -ADDIU T7,T0,0001 -BEQ R0,R0,7F0E27FC -SH T7,0298 (SP) ;spec.PC+=1 -//7F0D4E88: 27: DAA 4 -LW T9,028C (SP) -ANDI T5,S1,0001 -ANDI T8,S1,0010 -ADDIU T2,T9,0004 -SW T2,028C (SP) ;cycles+=4 -SB T5,0256 (SP) -BNE T8,R0,7F0D4EB4 -SB R0,0257 (SP) -ANDI T4,S0,000F -SLTI AT,T4,000A -BNE AT,R0,7F0D4EBC -ADDIU T3,R0,0006 -SB T3,0257 (SP) -ANDI T1,S1,0001 -BNE T1,R0,7F0D4ED8 -ANDI T9,S1,0002 -SRA T6,S0,0x4 -SLTI AT,T6,000A -BNE AT,R0,7F0D4EE4 -NOP -LBU T0,0257 (SP) -ORI T7,T0,0060 -SB T7,0257 (SP) -BEQ T9,R0,7F0D4F5C -SLTI AT,S0,0091 -LBU T2,0257 (SP) -ANDI T7,S0,000F -SUBU T5,S0,T2 -ANDI T8,T5,01FF -ANDI T3,T8,00A8 -SRA T6,T8,0x8 -ANDI T9,T2,000F -SLT T5,T7,T9 -OR T0,T3,T6 -XOR T3,S0,T2 -SLL T4,T5,0x4 -XOR T9,T8,S0 -SH T8,0254 (SP) -LBU S0,0255 (SP) -ANDI T6,T3,0080 -AND T5,T6,T9 -OR T1,T0,T4 -SRA T0,T5,0x5 -OR S1,T1,T0 -SB T2,0253 (SP) -SLTIU T3,S0,0001 -SLL T7,T3,0x6 -ORI T2,S1,0002 -OR S1,T2,T7 -ANDI T6,S1,00FF -OR S1,T6,R0 -BEQ R0,R0,7F0D4FE8 -SW T3,0048 (SP) -//7F0D4F5C: -BNE AT,R0,7F0D4F78 -ANDI T9,S0,000F -SLTI AT,T9,000A -BNE AT,R0,7F0D4F78 -LBU T5,0257 (SP) -ORI T1,T5,0060 -SB T1,0257 (SP) -LBU T0,0257 (SP) -ANDI T6,S0,000F -ADDIU AT,R0,000F -ADDU T2,S0,T0 -ANDI T3,T2,00A8 -SRA T8,T2,0x8 -ANDI T9,T0,000F -ADDU T5,T6,T9 -OR T7,T3,T8 -NOR T8,S0,R0 -SLT T1,AT,T5 -XOR T5,T2,S0 -SH T2,0250 (SP) -LBU S0,0251 (SP) -SLL T4,T1,0x4 -XOR T6,T8,T0 -ANDI T9,T6,0080 -AND T1,T9,T5 -OR T3,T7,T4 -SRA T7,T1,0x5 -SLTIU T8,S0,0001 -SLL T6,T8,0x6 -OR T4,T3,T7 -OR S1,T4,T6 -ANDI T2,S1,00FF -OR S1,T2,R0 -SW T8,0048 (SP) -SB T0,024F (SP) -LUI T9,8009 -LW T9,E334 (T9) -LBU T3,0256 (SP) -ADDU T5,S0,T9 -LBU T1,0000 (T5) -OR T7,S1,T3 -ANDI T4,T7,00FB -OR S1,T1,T4 -ANDI T8,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T8,R0 -//7F0D5014: 28: JR Z,n 12(7) -LW T0,028C (SP) -ANDI T2,S1,0040 ;T2= ZERO flag -LHU T9,0298 (SP) ;T9=spec.PC -ADDIU T6,T0,0007 -BEQ T2,R0,7F0D5058 ;branch if ZERO not set -SW T6,028C (SP) ;cycles+=7 -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -ADDIU T0,T6,0005 -ADDU T3,T9,T5 -LB T7,0000 (T3) ;T7=ROM+PC: n -SW T0,028C (SP) ;cycles+=5 12 total -ADDU T1,T9,T7 -ADDIU T4,T1,0001 -SH T4,0298 (SP) ;PC+= n+1 -BEQ R0,R0,7F0E27FC -SW T7,0248 (SP) ;SP+248= n -//7F0D5058: if set, advance to next cmd -LHU T6,0298 (SP) ;T6=spec.PC -ADDIU T2,T6,0001 -BEQ R0,R0,7F0E27FC -SH T2,0298 (SP) ;spec.PC+=1 -//7F0D5068: 29: ADD HL,HL 11 -LW T5,028C (SP) -LBU T9,0287 (SP) -ADDIU T3,T5,000B -BNE T9,R0,7F0D518C -SW T3,028C (SP) ;cycles+=B -BNE T9,R0,7F0D50F0 -LBU T1,0287 (SP) -ADDU T7,S7,S7 -ANDI T1,T7,FFFF -SRL T4,T1,0x8 -ANDI T0,T4,FFFF -ANDI T8,S6,000F -ADDU T6,T0,T8 -ANDI T2,S6,000F -ADDU T5,T6,T2 -SH T7,0246 (SP) -ADDIU AT,R0,000F -SLT T3,AT,T5 -LBU S7,0247 (SP) -ADDU T0,S6,S6 -ADDU T5,T4,T0 -SH T4,0246 (SP) -SH T5,0246 (SP) -LBU S6,0247 (SP) -SLL T9,T3,0x4 -ANDI T7,S1,00C4 -OR T1,T9,T7 -SRA T3,T5,0x8 -ANDI T2,S6,0028 -OR T9,T2,T3 -OR S1,T1,T9 -ANDI T7,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0D50F0: -ADDIU AT,R0,0001 -BNE T1,AT,7F0D5108 -SLL T5,S6,0x8 -LHU T4,0296 (SP) -BEQ R0,R0,7F0D5110 -SW T4,0240 (SP) -//7F0D5108: -LHU T8,0294 (SP) -SW T8,0240 (SP) -LW T0,0240 (SP) -OR T2,T5,S7 -ADDIU AT,R0,0FFF -ANDI T6,T0,0FFF -ADDU T3,T6,T2 -SLTU T9,AT,T3 -LBU T2,0287 (SP) -SLL T7,T9,0x4 -ANDI T1,S1,00C4 -SLL T8,S6,0x8 -OR T5,T8,S7 -OR S1,T1,T7 -ANDI T4,S1,00FF -ADDIU AT,R0,0001 -ADDU T6,T0,T5 -SW T6,0240 (SP) -BNE T2,AT,7F0D5160 -OR S1,T4,R0 -BEQ R0,R0,7F0D5168 -SH T6,0296 (SP) -//7F0D5160: -LW T3,0240 (SP) -SH T3,0294 (SP) -LW T9,0240 (SP) -SRL T1,T9,0x8 -ANDI T7,T1,0028 -SRL T4,T9,0x10 -OR T8,T7,T4 -OR S1,S1,T8 -ANDI T0,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T0,R0 -//7F0D518C: -LBU T5,0287 (SP) -ADDIU AT,R0,0001 -LBU T1,0287 (SP) -BNE T5,AT,7F0D52C0 -NOP -BNE T5,R0,7F0D5220 -LBU T0,0287 (SP) -LHU T2,0296 (SP) -ANDI T7,S6,000F -ADDIU AT,R0,000F -ANDI T6,T2,00FF -ADDU T3,S7,T6 -ANDI T1,T3,FFFF -SRL T9,T1,0x8 -ANDI T4,T9,FFFF -SRA T0,T2,0x8 -ANDI T5,T0,000F -ADDU T8,T4,T7 -ADDU T6,T8,T5 -SH T3,023E (SP) -SLT T3,AT,T6 -SLL T1,T3,0x4 -LBU S7,023F (SP) -ADDU T2,S6,T0 -ADDU T3,T9,T2 -SH T9,023E (SP) -SH T3,023E (SP) -LBU S6,023F (SP) -ANDI T4,S1,00C4 -OR T7,T1,T4 -SRA T1,T3,0x8 -ANDI T6,S6,0028 -OR T4,T6,T1 -OR S1,T7,T4 -ANDI T7,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0D5220: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D5238 -LHU T8,0294 (SP) -LHU T9,0296 (SP) -BEQ R0,R0,7F0D523C -SW T9,0238 (SP) -//7F0D5238: -SW T8,0238 (SP) -LHU T2,0296 (SP) -LW T4,0238 (SP) -ADDIU AT,R0,0FFF -SRA T5,T2,0x8 -SLL T3,T5,0x8 -ANDI T6,T2,00FF -OR T1,T3,T6 -ANDI T7,T4,0FFF -ADDU T0,T7,T1 -SLTU T9,AT,T0 -LBU T6,0287 (SP) -SLL T8,T9,0x4 -ANDI T5,S1,00C4 -OR S1,T5,T8 -ANDI T2,S1,00FF -ADDIU AT,R0,0001 -ADDU T3,T4,T1 -SW T3,0238 (SP) -BNE T6,AT,7F0D5294 -OR S1,T2,R0 -BEQ R0,R0,7F0D529C -SH T3,0296 (SP) -//7F0D5294: -LW T7,0238 (SP) -SH T7,0294 (SP) -LW T0,0238 (SP) -SRL T9,T0,0x8 -ANDI T5,T9,0028 -SRL T8,T0,0x10 -OR T2,T5,T8 -OR S1,S1,T2 -ANDI T4,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T4,R0 -//7F0D52C0: -BNE T1,R0,7F0D5340 -LBU T4,0287 (SP) -LHU T6,0294 (SP) -ANDI T5,S6,000F -ADDIU AT,R0,000F -ANDI T3,T6,00FF -ADDU T7,S7,T3 -ANDI T9,T7,FFFF -SRL T0,T9,0x8 -ANDI T8,T0,FFFF -SRA T4,T6,0x8 -ANDI T1,T4,000F -ADDU T2,T8,T5 -ADDU T3,T2,T1 -SH T7,0236 (SP) -SLT T7,AT,T3 -SLL T9,T7,0x4 -LBU S7,0237 (SP) -ADDU T6,S6,T4 -ADDU T7,T0,T6 -SH T0,0236 (SP) -SH T7,0236 (SP) -LBU S6,0237 (SP) -ANDI T8,S1,00C4 -OR T5,T9,T8 -SRA T9,T7,0x8 -ANDI T3,S6,0028 -OR T8,T3,T9 -OR S1,T5,T8 -ANDI T5,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T5,R0 -//7F0D5340: -ADDIU AT,R0,0001 -BNE T4,AT,7F0D5358 -LHU T2,0294 (SP) -LHU T0,0296 (SP) -BEQ R0,R0,7F0D535C -SW T0,0230 (SP) -//7F0D5358: -SW T2,0230 (SP) -LHU T6,0294 (SP) -LW T8,0230 (SP) -ADDIU AT,R0,0FFF -SRA T1,T6,0x8 -SLL T7,T1,0x8 -ANDI T3,T6,00FF -OR T9,T7,T3 -ANDI T5,T8,0FFF -ADDU T4,T5,T9 -SLTU T0,AT,T4 -LBU T3,0287 (SP) -SLL T2,T0,0x4 -ANDI T1,S1,00C4 -OR S1,T1,T2 -ANDI T6,S1,00FF -ADDIU AT,R0,0001 -ADDU T7,T8,T9 -SW T7,0230 (SP) -BNE T3,AT,7F0D53B4 -OR S1,T6,R0 -BEQ R0,R0,7F0D53BC -SH T7,0296 (SP) -//7F0D53B4: -LW T5,0230 (SP) -SH T5,0294 (SP) -LW T4,0230 (SP) -SRL T0,T4,0x8 -ANDI T1,T0,0028 -SRL T2,T4,0x10 -OR T6,T1,T2 -OR S1,S1,T6 -ANDI T8,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T8,R0 -//7F0D53E0: 2A: LD HL,(nn) 16 -LW T9,028C (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LHU T7,0298 (SP) ;T7=spec.PC -ADDIU T3,T9,0010 -SW T3,028C (SP) ;cycles+=10 -ADDU T1,T5,T7 -LBU T2,0001 (T1) ;T2= val -ADDU T0,T7,T5 -LBU T4,0000 (T0) -LBU T3,0287 (SP) -SLL T6,T2,0x8 -ADDIU T9,T7,0002 -OR T8,T4,T6 -SH T8,022E (SP) -BNE T3,R0,7F0D5438 -SH T9,0298 (SP) ;spec.PC+=2 -ANDI T0,T8,FFFF -ADDU T1,T0,T5 -LBU S7,0000 (T1) -BEQ R0,R0,7F0E27FC -LBU S6,0001 (T1) -//7F0D5438: -LBU T2,0287 (SP) -ADDIU AT,R0,0001 -LHU T4,022E (SP) -BNE T2,AT,7F0D5474 -LHU T1,022E (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -ADDU T9,T6,T4 -LBU T3,0001 (T9) -ADDU T8,T4,T6 -LBU T7,0000 (T8) -SLL T0,T3,0x8 -OR T5,T7,T0 -BEQ R0,R0,7F0E27FC -SH T5,0296 (SP) -//7F0D5474: -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -ADDU T4,T2,T1 -LBU T9,0001 (T4) -ADDU T8,T1,T2 -LBU T6,0000 (T8) -SLL T3,T9,0x8 -OR T7,T6,T3 -BEQ R0,R0,7F0E27FC -SH T7,0294 (SP) -//7F0D549C: 2B: DEC HL 6 -LW T0,028C (SP) -LBU T8,0287 (SP) -LBU T6,0287 (SP) -ADDIU T5,T0,0006 -BNE T8,R0,7F0D54DC -SW T5,028C (SP) ;cycles+=6 -SLTIU T2,S7,0001 -ADDIU S7,S7,FFFF -ANDI T1,S7,00FF -OR S7,T1,R0 -BEQ T2,R0,7F0E27FC -SW T2,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T9,S6,00FF -BEQ R0,R0,7F0E27FC -OR S6,T9,R0 -//7F0D54DC: -ADDIU AT,R0,0001 -BNE T6,AT,7F0D54F8 -LHU T0,0294 (SP) -LHU T3,0296 (SP) -ADDIU T7,T3,FFFF -BEQ R0,R0,7F0E27FC -SH T7,0296 (SP) -//7F0D54F8: -ADDIU T5,T0,FFFF -BEQ R0,R0,7F0E27FC -SH T5,0294 (SP) -//7F0D5504: 2C: INC L 4 -LW T8,028C (SP) -LBU T1,0287 (SP) -LBU T3,0287 (SP) -ADDIU T2,T8,0004 -BNE T1,R0,7F0D5574 -SW T2,028C (SP) ;cycles+=4 -ADDIU S7,S7,0001 -ANDI T4,S7,00FF -ANDI T6,T4,000F -SLTIU T3,T6,0001 -OR S7,T4,R0 -SLTIU T9,T4,0001 -ANDI T0,T4,00A8 -ANDI T7,S1,0001 -OR T5,T7,T0 -XORI T6,S7,0080 -SLL T8,T3,0x4 -OR T2,T5,T8 -SLTIU T6,T6,0001 -SLL T4,T9,0x6 -SW T9,0044 (SP) -OR T9,T2,T4 -SLL T7,T6,0x2 -OR S1,T9,T7 -ANDI T0,S1,00FF -OR S1,T0,R0 -BEQ R0,R0,7F0E27FC -SW T3,0048 (SP) -//7F0D5574: -ADDIU AT,R0,0001 -BNE T3,AT,7F0D558C -LHU T8,0294 (SP) -LHU T5,0296 (SP) -BEQ R0,R0,7F0D5590 -SB T5,022D (SP) -//7F0D558C: -SB T8,022D (SP) -LBU T1,022D (SP) -ANDI T3,S1,0001 -ADDIU AT,R0,0001 -ADDIU T2,T1,0001 -ANDI T8,T2,00A8 -OR T1,T3,T8 -ANDI T4,T2,00FF -ANDI T7,T2,000F -SLTIU T0,T7,0001 -SLTIU T6,T4,0001 -SLL T4,T0,0x4 -ANDI T3,T2,00FF -XORI T8,T3,0080 -OR T9,T1,T4 -SLTIU T8,T8,0001 -SLL T7,T6,0x6 -SW T0,0048 (SP) -LBU T4,0287 (SP) -SLL T0,T8,0x2 -OR T5,T9,T7 -OR S1,T5,T0 -ANDI T1,S1,00FF -OR S1,T1,R0 -SW T6,0044 (SP) -BNE T4,AT,7F0D5610 -SB T2,022D (SP) -LHU T6,0296 (SP) -ANDI T7,T2,00FF -ANDI T9,T6,FF00 -OR T3,T9,T7 -BEQ R0,R0,7F0E27FC -SH T3,0296 (SP) -//7F0D5610: -LHU T8,0294 (SP) -LBU T0,022D (SP) -ANDI T5,T8,FF00 -OR T1,T5,T0 -BEQ R0,R0,7F0E27FC -SH T1,0294 (SP) -//7F0D5628: 2D: DEC L 4 -LW T4,028C (SP) -LBU T2,0287 (SP) -LBU T1,0287 (SP) -ADDIU T6,T4,0004 -BNE T2,R0,7F0D569C -SW T6,028C (SP) ;cycles+=4 -ANDI T9,S7,000F -ADDIU S7,S7,FFFF -ANDI T1,S7,00FF -SLTIU T7,T9,0001 -SLL T8,T7,0x4 -XORI T2,T1,007F -SLTIU T2,T2,0001 -ANDI T3,S1,0001 -OR S1,T3,T8 -SLL T9,T2,0x2 -SW T7,0048 (SP) -SLTIU T4,T1,0001 -ANDI T6,T1,00A8 -OR T7,T6,T9 -SLL T8,T4,0x6 -OR T5,T7,T8 -ORI T0,S1,0002 -OR S1,T0,T5 -ANDI T0,S1,00FF -OR S1,T0,R0 -SW T4,0044 (SP) -BEQ R0,R0,7F0E27FC -OR S7,T1,R0 -//7F0D569C: -ADDIU AT,R0,0001 -BNE T1,AT,7F0D56B4 -LHU T2,0294 (SP) -LHU T4,0296 (SP) -BEQ R0,R0,7F0D56B8 -SB T4,022C (SP) -//7F0D56B4: -SB T2,022C (SP) -LBU T6,022C (SP) -ANDI T7,S1,0001 -ADDIU AT,R0,0001 -ANDI T9,T6,000F -SLTIU T3,T9,0001 -SLL T8,T3,0x4 -OR S1,T7,T8 -ADDIU T1,T6,FFFF -ANDI T7,T1,00FF -XORI T8,T7,007F -ORI T5,S1,0002 -OR S1,T5,R0 -SLTIU T8,T8,0001 -ANDI T4,T1,00FF -SW T3,0048 (SP) -ANDI T3,T1,00A8 -SLTIU T2,T4,0001 -SLL T5,T8,0x2 -OR T0,T3,T5 -SLL T6,T2,0x6 -LBU T7,0287 (SP) -OR T4,T0,T6 -OR S1,S1,T4 -ANDI T9,S1,00FF -OR S1,T9,R0 -SW T2,0044 (SP) -BNE T7,AT,7F0D5740 -SB T1,022C (SP) -LHU T8,0296 (SP) -ANDI T5,T1,00FF -ANDI T3,T8,FF00 -OR T2,T3,T5 -BEQ R0,R0,7F0E27FC -SH T2,0296 (SP) -//7F0D5740: -LHU T0,0294 (SP) -LBU T4,022C (SP) -ANDI T6,T0,FF00 -OR T9,T6,T4 -BEQ R0,R0,7F0E27FC -SH T9,0294 (SP) -//7F0D5758: 2E: LD L,n 7 -LW T7,028C (SP) -LBU T1,0287 (SP) -LBU T0,0287 (SP) -ADDIU T8,T7,0007 -BNE T1,R0,7F0D5788 -SW T8,028C (SP) ;cycles+=7 -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LHU T3,0298 (SP) ;T3=spec.PC -ADDU T2,T3,T5 -BEQ R0,R0,7F0D57DC -LBU S7,0000 (T2) ;S7= val -//7F0D5788: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D57BC -LHU T5,0298 (SP) ;T5=spec.PC -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LHU T6,0298 (SP) ;T6=spec.PC -LHU T8,0296 (SP) -ADDU T9,T6,T4 -LBU T7,0000 (T9) -ANDI T1,T8,FF00 -OR T3,T7,T1 -BEQ R0,R0,7F0D57DC -SH T3,0296 (SP) -//7F0D57BC: -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T4,0294 (SP) -ADDU T0,T5,T2 -LBU T6,0000 (T0) -ANDI T9,T4,FF00 -OR T8,T6,T9 -SH T8,0294 (SP) -LHU T7,0298 (SP) -ADDIU T1,T7,0001 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) ;spec.PC+=1 -//7F0D57EC: 2F: CPL 4 -NOR S0,S0,R0 ;spec.A = ~spec.A -LW T3,028C (SP) -ANDI T2,S0,00FF -ANDI T4,T2,0028 -ANDI T0,S1,00C5 ;T0=retained flags: (11000101) -OR S1,T0,T4 -ORI T6,S1,0012 ;T6= set HALFCARRY, ADDITION flags -ADDIU T5,T3,0004 -SW T5,028C (SP) ;cycles+=4 -OR S0,T2,R0 -BEQ R0,R0,7F0E27FC -ANDI S1,T6,00FF -//7F0D581C: 30: JR NC,n 12(7) -LW T8,028C (SP) -ANDI T1,S1,0001 -LHU T2,0298 (SP) ;T2=spec.PC -ADDIU T7,T8,0007 -BEQ T1,R0,7F0D5844 -SW T7,028C (SP) ;cycles+=7 -LHU T3,0298 (SP) ;T3=spec.PC -ADDIU T5,T3,0001 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) ;spec.PC+=1 -//7F0D5844: -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LW T7,028C (SP) -ADDU T4,T2,T0 -LB T6,0000 (T4) -ADDIU T1,T7,0005 -SW T1,028C (SP) ;cycles+=5 C total -ADDU T9,T2,T6 -ADDIU T8,T9,0001 -SH T8,0298 (SP) -BEQ R0,R0,7F0E27FC -SW T6,0228 (SP) -//7F0D5874: 31: LD SP,nn 10 -LW T3,028C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LHU T0,0298 (SP) ;T0=spec.PC -ADDIU T5,T3,000A -SW T5,028C (SP) ;cycles+=A -ADDU T9,T4,T0 -LBU T8,0001 (T9) -ADDU T2,T0,T4 -LBU T6,0000 (T2) -SLL T7,T8,0x8 -ADDIU T3,T0,0002 -OR T1,T6,T7 -SH T1,0292 (SP) -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) ;spec.PC+=2 -//7F0D58B4: 32: LD (nn),A 13 -LW T5,028C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -ADDIU T2,T5,000D -SW T2,028C (SP) ;cycles+=D -ADDU T7,T9,T4 -LBU T1,0001 (T7) -ADDU T8,T4,T9 -LBU T6,0000 (T8) -SLL T0,T1,0x8 -ADDIU T5,T4,0002 -OR T3,T6,T0 -ANDI T2,T3,FFFF ;T2= ROM+PC[1:0]: offset -SLTI AT,T2,5B00 -SH T3,0226 (SP) -BNE AT,R0,7F0D5910 -SH T5,0298 (SP) ;spec.PC+=2 -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDU T9,T8,T2 -BEQ R0,R0,7F0E27FC -SB S0,0000 (T9) ;spec.A -> ROM+offset -//7F0D5910: -LHU T7,0226 (SP) -LHU T8,0226 (SP) -LUI T1,8009 -SLTI AT,T7,5800 -BNEL AT,R0,7F0D5954 -SLTI AT,T8,4000 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LUI T3,8009 -ADDIU T0,R0,0001 -ADDU T6,T1,T7 -SB S0,0000 (T6) -LHU T4,0226 (SP) -LW T3,E32C (T3) -ADDU T5,T3,T4 -BEQ R0,R0,7F0E27FC -SB T0,A800 (T5) -//7F0D5950: -SLTI AT,T8,4000 -BNE AT,R0,7F0E27FC -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LUI T5,8009 -ADDIU T1,R0,0001 -ADDU T9,T2,T8 -SB S0,0000 (T9) -LHU T7,0226 (SP) -LW T5,E32C (T5) -ANDI T6,T7,1800 -SRA T3,T6,0x3 -ANDI T4,T7,00FF -OR T0,T3,T4 -ADDU T2,T5,T0 -BEQ R0,R0,7F0E27FC -SB T1,0000 (T2) -//7F0D5994: 33: INC SP 6 -LW T8,028C (SP) -LHU T6,0292 (SP) -ADDIU T9,T8,0006 -ADDIU T7,T6,0001 -SW T9,028C (SP) ;cycles+=6 -BEQ R0,R0,7F0E27FC -SH T7,0292 (SP) ;spec.SP+=1 -//7F0D59B0: 34: INC (HL) 11 -LW T3,028C (SP) -LBU T5,0287 (SP) -SLL T0,S6,0x8 -ADDIU T4,T3,000B -BNE T5,R0,7F0D59D4 -SW T4,028C (SP) ;cycles+=B -OR T1,T0,S7 -BEQ R0,R0,7F0D5A28 -SH T1,0224 (SP) -//7F0D59D4: -LW T2,028C (SP) -LBU T9,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T8,T2,0008 -BNE T9,AT,7F0D59F8 -SW T8,028C (SP) ;cycles+=8 -LHU T6,0296 (SP) -BEQ R0,R0,7F0D5A00 -SW T6,0048 (SP) -//7F0D59F8: -LHU T7,0294 (SP) -SW T7,0048 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LHU T3,0298 (SP) ;T3=spec.PC -LW T1,0048 (SP) -ADDU T5,T3,T4 -LB T0,0000 (T5) ;T0= val -ADDIU T8,T3,0001 -SH T8,0298 (SP) ;spec.PC+=1 -ADDU T2,T0,T1 -SH T2,0224 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T9,0224 (SP) -ADDU T7,T9,T6 -LBU T4,0000 (T7) -ANDI T9,S1,0001 -ADDIU T5,T4,0001 -ANDI T7,T5,00A8 -SB T4,0223 (SP) -OR T4,T9,T7 -ANDI T0,T5,00FF -ANDI T3,T5,000F -SLTIU T8,T3,0001 -SLTIU T1,T0,0001 -SLL T0,T8,0x4 -ANDI T9,T5,00FF -XORI T7,T9,0080 -OR T2,T4,T0 -LHU T0,0224 (SP) -SLTIU T7,T7,0001 -SLL T3,T1,0x6 -SW T8,0048 (SP) -SLL T8,T7,0x2 -OR T6,T2,T3 -OR S1,T6,T8 -ANDI T4,S1,00FF -SLTI AT,T0,5B00 -OR S1,T4,R0 -SW T1,0044 (SP) -BNE AT,R0,7F0D5AB8 -SB T5,0223 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -ADDU T3,T2,T0 -BEQ R0,R0,7F0E27FC -SB T5,0000 (T3) -//7F0D5AB8: -LHU T5,0224 (SP) -LHU T1,0224 (SP) -LUI T7,8009 -SLTI AT,T5,5800 -BNEL AT,R0,7F0D5B00 -SLTI AT,T1,4000 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LBU T9,0223 (SP) -LUI T4,8009 -ADDU T6,T7,T5 -SB T9,0000 (T6) -LHU T2,0224 (SP) -LW T4,E32C (T4) -ADDIU T8,R0,0001 -ADDU T0,T4,T2 -BEQ R0,R0,7F0E27FC -SB T8,A800 (T0) -//7F0D5AFC: -SLTI AT,T1,4000 -BNE AT,R0,7F0E27FC -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LBU T3,0223 (SP) -ADDIU T9,R0,0001 -ADDU T5,T7,T1 -SB T3,0000 (T5) -LHU T6,0224 (SP) -LUI T7,8009 -LW T7,E32C (T7) -ANDI T4,T6,1800 -SRA T2,T4,0x3 -ANDI T8,T6,00FF -OR T0,T2,T8 -ADDU T1,T7,T0 -BEQ R0,R0,7F0E27FC -SB T9,0000 (T1) -//7F0D5B44: 35: DEC (HL) 11 -LW T3,028C (SP) -LBU T4,0287 (SP) -SLL T6,S6,0x8 -ADDIU T5,T3,000B -BNE T4,R0,7F0D5B68 -SW T5,028C (SP) ;cycles+=B -OR T2,T6,S7 -BEQ R0,R0,7F0D5BBC -SH T2,0220 (SP) -//7F0D5B68: -LW T8,028C (SP) -LBU T0,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T8,0008 -BNE T0,AT,7F0D5B8C -SW T7,028C (SP) ;cycles+=8 -LHU T9,0296 (SP) -BEQ R0,R0,7F0D5B94 -SW T9,0048 (SP) -//7F0D5B8C: -LHU T1,0294 (SP) -SW T1,0048 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LHU T3,0298 (SP) ;T3=spec.PC -LW T2,0048 (SP) -ADDU T4,T3,T5 -LB T6,0000 (T4) ;T6=val -ADDIU T7,T3,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T8,T6,T2 -SH T8,0220 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T0,0220 (SP) -ANDI T8,S1,0001 -ADDU T1,T0,T9 -LBU T5,0000 (T1) -ANDI T4,T5,000F -SLTIU T6,T4,0001 -SLL T2,T6,0x4 -OR S1,T8,T2 -ADDIU T0,T5,FFFF -ANDI T8,T0,00FF -XORI T2,T8,007F -ORI T3,S1,0002 -SW T6,0048 (SP) -ANDI T6,T0,00A8 -OR S1,T3,R0 -SLTIU T2,T2,0001 -ANDI T9,T0,00FF -SB T5,021F (SP) -SB T0,021F (SP) -SLTIU T1,T9,0001 -SLL T3,T2,0x2 -LHU T0,0220 (SP) -OR T7,T6,T3 -SLL T5,T1,0x6 -OR T9,T7,T5 -OR S1,S1,T9 -ANDI T4,S1,00FF -SLTI AT,T0,5B00 -OR S1,T4,R0 -BNE AT,R0,7F0D5C58 -SW T1,0044 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LBU T8,021F (SP) -ADDU T6,T2,T0 -BEQ R0,R0,7F0E27FC -SB T8,0000 (T6) -//7F0D5C58: -LHU T3,0220 (SP) -LHU T8,0220 (SP) -LUI T7,8009 -SLTI AT,T3,5800 -BNEL AT,R0,7F0D5CA0 -SLTI AT,T8,4000 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LBU T1,021F (SP) -LUI T4,8009 -ADDU T5,T7,T3 -SB T1,0000 (T5) -LHU T2,0220 (SP) -LW T4,E32C (T4) -ADDIU T9,R0,0001 -ADDU T0,T4,T2 -BEQ R0,R0,7F0E27FC -SB T9,A800 (T0) -//7F0D5C9C: -SLTI AT,T8,4000 -BNE AT,R0,7F0E27FC -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LBU T6,021F (SP) -ADDIU T1,R0,0001 -ADDU T3,T7,T8 -SB T6,0000 (T3) -LHU T5,0220 (SP) -LUI T7,8009 -LW T7,E32C (T7) -ANDI T4,T5,1800 -SRA T2,T4,0x3 -ANDI T9,T5,00FF -OR T0,T2,T9 -ADDU T8,T7,T0 -BEQ R0,R0,7F0E27FC -SB T1,0000 (T8) -//7F0D5CE4: 36: LD (HL),n -LW T6,028C (SP) -LBU T4,0287 (SP) -SLL T5,S6,0x8 -ADDIU T3,T6,000A -BNE T4,R0,7F0D5D08 -SW T3,028C (SP) ;cycles+=A -OR T2,T5,S7 -BEQ R0,R0,7F0D5D5C -SH T2,021C (SP) -//7F0D5D08: -LW T9,028C (SP) -LBU T0,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T9,0005 -BNE T0,AT,7F0D5D2C -SW T7,028C (SP) ;cycles+=5 -LHU T1,0296 (SP) -BEQ R0,R0,7F0D5D34 -SW T1,0048 (SP) -//7F0D5D2C: -LHU T8,0294 (SP) -SW T8,0048 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T6,0298 (SP) ;T6=spec.PC -LW T2,0048 (SP) -ADDU T4,T6,T3 -LB T5,0000 (T4) ;T5= val -ADDIU T7,T6,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T9,T5,T2 -SH T9,021C (SP) -LHU T0,021C (SP) -LHU T2,021C (SP) -LHU T1,0298 (SP) ;T1=spec.PC -SLTI AT,T0,5B00 -BNE AT,R0,7F0D5D8C -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDU T3,T1,T8 -LBU T4,0000 (T3) ;T4= val -ADDU T5,T8,T0 -BEQ R0,R0,7F0D5E1C -SB T4,0000 (T5) -//7F0D5D8C: -SLTI AT,T2,5800 -BNE AT,R0,7F0D5DD0 -LHU T9,021C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T9,0298 (SP) ;T9=spec.PC -LUI T0,8009 -ADDU T3,T6,T2 -ADDU T7,T9,T6 -LBU T1,0000 (T7) ;T1= val -ADDIU T8,R0,0001 -SB T1,0000 (T3) -LHU T4,021C (SP) -LW T0,E32C (T0) -ADDU T5,T0,T4 -BEQ R0,R0,7F0D5E1C -SB T8,A800 (T5) -//7F0D5DD0: -SLTI AT,T9,4000 -BNE AT,R0,7F0D5E1C -LHU T7,0298 (SP) ;T7=spec.PC -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -ADDIU T0,R0,0001 -ADDU T2,T7,T6 -LBU T1,0000 (T2) ;T1= val -ADDU T3,T6,T9 -LUI T6,8009 -SB T1,0000 (T3) -LHU T4,021C (SP) -LW T6,E32C (T6) -ANDI T8,T4,1800 -SRA T5,T8,0x3 -ANDI T7,T4,00FF -OR T2,T5,T7 -ADDU T9,T6,T2 -SB T0,0000 (T9) -LHU T1,0298 (SP) -ADDIU T3,T1,0001 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) ;spec.PC+=1 -//7F0D5E2C: 37: SCF 4 -LW T8,028C (SP) -ANDI T5,S1,00C4 ;T5= retained flags: (11000100) -ORI T7,T5,0001 ;set CARRY -ANDI T6,S0,0028 ;T6= spec.A & 28 (00101000) -OR S1,T7,T6 -ANDI T2,S1,00FF -ADDIU T4,T8,0004 -SW T4,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -OR S1,T2,R0 -//7F0D5E54: 38: JR C,n 12(7) -LW T0,028C (SP) -ANDI T1,S1,0001 -LHU T3,0298 (SP) ;T3=spec.PC -ADDIU T9,T0,0007 -BEQ T1,R0,7F0D5E98 -SW T9,028C (SP) ;cycles+=7 -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDIU T0,T9,0005 -ADDU T4,T3,T8 -LB T5,0000 (T4) ;T5=ROM+PC: n -SW T0,028C (SP) ;cycles+=5 C total -ADDU T7,T3,T5 -ADDIU T6,T7,0001 -SH T6,0298 (SP) ;spec.PC+= n+1 -BEQ R0,R0,7F0E27FC -SW T5,0218 (SP) -//7F0D5E98: -LHU T9,0298 (SP) -ADDIU T1,T9,0001 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) ;spec.PC+=1 -//7F0D5EA8: 39: ADD HL,SP 11 -LW T8,028C (SP) -LBU T3,0287 (SP) -LHU T5,0292 (SP) -ADDIU T4,T8,000B -BNE T3,R0,7F0D5F34 -SW T4,028C (SP) ;cycles+=B -ANDI T7,T5,00FF -ADDU T6,S7,T7 -ANDI T2,T6,FFFF -SRL T0,T2,0x8 -ANDI T1,T0,FFFF -ANDI T9,S6,000F -SRA T4,T5,0x8 -ANDI T3,T4,000F -ADDU T8,T1,T9 -ADDU T7,T8,T3 -SH T6,0216 (SP) -ADDIU AT,R0,000F -SLT T6,AT,T7 -SLL T2,T6,0x4 -LBU S7,0217 (SP) -ADDU T5,S6,T4 -ADDU T6,T0,T5 -SH T0,0216 (SP) -SH T6,0216 (SP) -LBU S6,0217 (SP) -ANDI T1,S1,00C4 -OR T9,T2,T1 -SRA T2,T6,0x8 -ANDI T7,S6,0028 -OR T1,T7,T2 -OR S1,T9,T1 -ANDI T9,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T9,R0 -//7F0D5F34: -LBU T4,0287 (SP) -ADDIU AT,R0,0001 -LHU T8,0294 (SP) -BNE T4,AT,7F0D5F50 -LHU T0,0296 (SP) -BEQ R0,R0,7F0D5F54 -SW T0,0210 (SP) -//7F0D5F50: -SW T8,0210 (SP) -LHU T5,0292 (SP) -LW T1,0210 (SP) -ADDIU AT,R0,0FFF -SRA T3,T5,0x8 -SLL T6,T3,0x8 -ANDI T7,T5,00FF -OR T2,T6,T7 -ANDI T9,T1,0FFF -ADDU T4,T9,T2 -SLTU T0,AT,T4 -LBU T7,0287 (SP) -SLL T8,T0,0x4 -ANDI T3,S1,00C4 -OR S1,T3,T8 -ANDI T5,S1,00FF -ADDIU AT,R0,0001 -ADDU T6,T1,T2 -SW T6,0210 (SP) -BNE T7,AT,7F0D5FAC -OR S1,T5,R0 -BEQ R0,R0,7F0D5FB4 -SH T6,0296 (SP) -//7F0D5FAC: -LW T9,0210 (SP) -SH T9,0294 (SP) -LW T4,0210 (SP) -SRL T0,T4,0x8 -ANDI T3,T0,0028 -SRL T8,T4,0x10 -OR T5,T3,T8 -OR S1,S1,T5 -ANDI T1,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T1,R0 -//7F0D5FD8: 3A: LD A,(nn) 13 -LW T2,028C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T6,0298 (SP) ;T6=spec.PC -ADDIU T7,T2,000D -SW T7,028C (SP) ;cycles+=D -ADDU T3,T9,T6 -LBU T8,0001 (T3) -ADDU T0,T6,T9 -LBU T4,0000 (T0) -SLL T5,T8,0x8 -ADDIU T2,T6,0002 -OR T1,T4,T5 ;T1=ROM+PC[1:0]: n -ANDI T7,T1,FFFF -SH T1,020E (SP) ;SP+20E= ROM+PC[1:0] -SH T2,0298 (SP) ;spec.PC+=2 -ADDU T0,T7,T9 -BEQ R0,R0,7F0E27FC -LBU S0,0000 (T0) ;S0=ROM+n: set spec.A to ROM[n] -//7F0D6024: 3B: DEC SP 6 -LW T3,028C (SP) -LHU T4,0292 (SP) ;SP+292: spec.SP -ADDIU T8,T3,0006 -ADDIU T5,T4,FFFF -SW T8,028C (SP) ;cycles+=6 -BEQ R0,R0,7F0E27FC -SH T5,0292 (SP) ;spec.SP-=1 -//7F0D6040: 3C: INC A 4 -ADDIU S0,S0,0001 ;S0+=1 spec.A+=1 -ANDI T2,S0,00FF -LW T1,028C (SP) -ANDI T9,T2,000F ;T9=nibble.l -SLTIU T0,T9,0001 ;T0= True if low nibble 0 -OR S0,T2,R0 -SLTIU T7,T2,0001 ;T7= True if A=0 -ANDI T8,T2,00A8 ;T8= spec.A & A8 (10101000) -ANDI T3,S1,0001 ;T3= retained flags (Carry) -OR T4,T3,T8 -XORI T9,S0,0080 -SLL T5,T0,0x4 ;T5= (low nibble 0) flag (10) -ADDIU T6,T1,0004 -OR T1,T4,T5 -SLTIU T9,T9,0001 ;T9= True if negative -SLL T2,T7,0x6 ;T2= ZERO flag (40) -SW T7,0044 (SP) ;SP+44= ZERO -OR T7,T1,T2 -SLL T3,T9,0x2 ;T3= Sign flag (4) -OR S1,T7,T3 -ANDI T8,S1,00FF -SW T6,028C (SP) ;cycles-=4 -OR S1,T8,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0D60A4: 3D: DEC A 4 -LW T0,028C (SP) -ANDI T5,S0,000F -ADDIU S0,S0,FFFF ;S0-=1 spec.A-=1 -ADDIU T4,T0,0004 -SW T4,028C (SP) ;cycles+=4 -ANDI T3,S0,00FF -SLTIU T6,T5,0001 ;T6= True if lower nibble 0 -SLL T2,T6,0x4 -XORI T4,T3,007F -SLTIU T4,T4,0001 -ANDI T1,S1,0001 ;T1= retained flags (1) -OR S1,T1,T2 -SLL T5,T4,0x2 -SW T6,0048 (SP) -SLTIU T8,T3,0001 ;T8=True if zero -ANDI T0,T3,00A8 -OR T6,T0,T5 -SLL T2,T8,0x6 ;T2= ZERO flag (40) -OR T9,T6,T2 -ORI T7,S1,0002 ;flags|= ADDITION -OR S1,T7,T9 -ANDI T7,S1,00FF -OR S1,T7,R0 -SW T8,0044 (SP) -BEQ R0,R0,7F0E27FC -OR S0,T3,R0 -//7F0D610C: 3E: LD A,n 7 -LW T3,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -ADDIU T8,T3,0007 -SW T8,028C (SP) ;cycles+=7 -ADDU T5,T4,T0 -LBU S0,0000 (T5) ;spec.A = ROM+PC -ADDIU T1,T4,0001 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) ;spec.PC+=1 -//7F0D6138: 3F: CCF 4 -ANDI T7,S1,0001 -LW T6,028C (SP) -XORI T3,T7,0001 ;T3= CARRY flag inverted -ANDI T9,S1,00C4 ;T9= retained flags (11000100) -ANDI T0,S1,0001 ;T0= flags&1 -SLL T5,T0,0x4 ;T5= (flags&1)-> (20) -OR T8,T9,T3 -OR T4,T8,T5 -ANDI T1,S0,0028 ;T1= spec.A & 28 (00101000) -OR S1,T4,T1 -ADDIU T2,T6,0004 -ANDI T6,S1,00FF -SW T2,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -OR S1,T6,R0 -//7F0D6174: 40: LD B,B 4 -LW T2,028C (SP) -ADDIU T7,T2,0004 -BEQ R0,R0,7F0E27FC -SW T7,028C (SP) ;cycles+=4 -//7F0D6184: 41: LD B,C 4 -LW T9,028C (SP) -ANDI S2,S3,00FF ;S2=S3: spec.B = spec.C -ADDIU T3,T9,0004 -BEQ R0,R0,7F0E27FC -SW T3,028C (SP) ;cycles+=4 -//7F0D6198: 42: LD B,D 4 -LW T0,028C (SP) -ANDI S2,S4,00FF ;S2=S4: spec.B = spec.D -ADDIU T8,T0,0004 -BEQ R0,R0,7F0E27FC -SW T8,028C (SP) ;cycles+=4 -//7F0D61AC: 43: LD B,E 4 -LW T5,028C (SP) -ANDI S2,S5,00FF ;S2=S5: spec.B = spec.E -ADDIU T4,T5,0004 -BEQ R0,R0,7F0E27FC -SW T4,028C (SP) ;cycles+=4 -//7F0D61C0: 44: LD B,H 4 -LW T1,028C (SP) -LBU T2,0287 (SP) -LBU T7,0287 (SP) -ADDIU T6,T1,0004 -BNE T2,R0,7F0D61E0 -SW T6,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S2,S6,00FF ;S2=S6: spec.B = spec.H -//7F0D61E0: -ADDIU AT,R0,0001 -BNE T7,AT,7F0D61FC -LHU T0,0294 (SP) -LHU T9,0296 (SP) -SRA T3,T9,0x8 -BEQ R0,R0,7F0D6204 -SW T3,0048 (SP) -//7F0D61FC: -SRA T8,T0,0x8 -SW T8,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S2,004B (SP) -//7F0D620C: 45: LD B,L 4 -LW T5,028C (SP) -LBU T1,0287 (SP) -LBU T6,0287 (SP) -ADDIU T4,T5,0004 -BNE T1,R0,7F0D622C -SW T4,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S2,S7,00FF ;S2=S7: spec.B = spec.L -//7F0D622C: -ADDIU AT,R0,0001 -BNE T6,AT,7F0D6248 -LHU T9,0294 (SP) -LHU T2,0296 (SP) -ANDI T7,T2,00FF -BEQ R0,R0,7F0D6250 -SW T7,0048 (SP) -//7F0D6248: -ANDI T3,T9,00FF -SW T3,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S2,004B (SP) -//7F0D6258: 46: LD B,(HL) 7 -LW T0,028C (SP) -LBU T5,0287 (SP) -SLL T4,S6,0x8 -ADDIU T8,T0,0007 -BNE T5,R0,7F0D627C -SW T8,028C (SP) ;cycles+=7 -OR T1,T4,S7 -BEQ R0,R0,7F0D62D0 -SH T1,020C (SP) -//7F0D627C: -LW T6,028C (SP) -LBU T7,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T2,T6,0008 -BNE T7,AT,7F0D62A0 -SW T2,028C (SP) ;cycles+=8 -LHU T9,0296 (SP) -BEQ R0,R0,7F0D62A8 -SW T9,0048 (SP) -//7F0D62A0: -LHU T3,0294 (SP) -SW T3,0048 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LHU T0,0298 (SP) ;T0=spec.PC -LW T1,0048 (SP) -ADDU T5,T0,T8 -LB T4,0000 (T5) -ADDIU T2,T0,0001 -SH T2,0298 (SP) ;spec.PC+=1 -ADDU T6,T4,T1 -SH T6,020C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T7,020C (SP) -ADDU T3,T7,T9 -BEQ R0,R0,7F0E27FC -LBU S2,0000 (T3) -//7F0D62E8: 47: LD B,A 4 -LW T8,028C (SP) -ANDI S2,S0,00FF -ADDIU T5,T8,0004 -BEQ R0,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=4 -//7F0D62FC: 48: LD C,B 4 -LW T4,028C (SP) -ANDI S3,S2,00FF -ADDIU T1,T4,0004 -BEQ R0,R0,7F0E27FC -SW T1,028C (SP) ;cycles+=4 -//7F0D6310: 49: LD C,C 4 -LW T6,028C (SP) -ADDIU T0,T6,0004 -BEQ R0,R0,7F0E27FC -SW T0,028C (SP) ;cycles+=4 -//7F0D6320: 4A: LD C,D 4 -LW T2,028C (SP) -ANDI S3,S4,00FF -ADDIU T7,T2,0004 -BEQ R0,R0,7F0E27FC -SW T7,028C (SP) ;cycles+=4 -//7F0D6334: 4B: LD C,E 4 -LW T9,028C (SP) -ANDI S3,S5,00FF -ADDIU T3,T9,0004 -BEQ R0,R0,7F0E27FC -SW T3,028C (SP) ;cycles+=4 -//7F0D6348: 4C: LD C,H 4 -LW T8,028C (SP) -LBU T4,0287 (SP) -LBU T1,0287 (SP) -ADDIU T5,T8,0004 -BNE T4,R0,7F0D6368 -SW T5,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S3,S6,00FF -//7F0D6368: -ADDIU AT,R0,0001 -BNE T1,AT,7F0D6384 -LHU T2,0294 (SP) -LHU T6,0296 (SP) -SRA T0,T6,0x8 -BEQ R0,R0,7F0D638C -SW T0,0048 (SP) -//7F0D6384: -SRA T7,T2,0x8 -SW T7,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S3,004B (SP) -//7F0D6394: 4D: LD C,L 4 -LW T9,028C (SP) -LBU T8,0287 (SP) -LBU T5,0287 (SP) -ADDIU T3,T9,0004 -BNE T8,R0,7F0D63B4 -SW T3,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S3,S7,00FF -//7F0D63B4: -ADDIU AT,R0,0001 -BNE T5,AT,7F0D63D0 -LHU T6,0294 (SP) -LHU T4,0296 (SP) -ANDI T1,T4,00FF -BEQ R0,R0,7F0D63D8 -SW T1,0048 (SP) -//7F0D63D0: -ANDI T0,T6,00FF -SW T0,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S3,004B (SP) -//7F0D63E0: 4E: LD C,(HL) 7 -LW T2,028C (SP) -LBU T9,0287 (SP) -SLL T3,S6,0x8 -ADDIU T7,T2,0007 -BNE T9,R0,7F0D6404 -SW T7,028C (SP) ;cycles+=7 -OR T8,T3,S7 -BEQ R0,R0,7F0D6458 -SH T8,020A (SP) -//7F0D6404: -LW T5,028C (SP) -LBU T1,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T4,T5,0008 -BNE T1,AT,7F0D6428 -SW T4,028C (SP) ;cycles+=8 -LHU T6,0296 (SP) -BEQ R0,R0,7F0D6430 -SW T6,0048 (SP) -//7F0D6428: -LHU T0,0294 (SP) -SW T0,0048 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T2,0298 (SP) ;T2=spec.PC -LW T8,0048 (SP) -ADDU T9,T2,T7 -LB T3,0000 (T9) -ADDIU T4,T2,0001 -SH T4,0298 (SP) ;spec.PC+=1 -ADDU T5,T3,T8 -SH T5,020A (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T1,020A (SP) -ADDU T0,T1,T6 -BEQ R0,R0,7F0E27FC -LBU S3,0000 (T0) -//7F0D6470: 4F: LD C,A 4 -LW T7,028C (SP) -ANDI S3,S0,00FF ;spec.C = spec.A -ADDIU T9,T7,0004 -BEQ R0,R0,7F0E27FC -SW T9,028C (SP) ;cycles+=4 -//7F0D6484: 50: LD D,B 4 -LW T3,028C (SP) -ANDI S4,S2,00FF -ADDIU T8,T3,0004 -BEQ R0,R0,7F0E27FC -SW T8,028C (SP) ;cycles+=4 -//7F0D6498: 51: LD D,C 4 -LW T5,028C (SP) -ANDI S4,S3,00FF -ADDIU T2,T5,0004 -BEQ R0,R0,7F0E27FC -SW T2,028C (SP) ;cycles+=4 -//7F0D64AC: 52: LD D,D 4 -LW T4,028C (SP) -ADDIU T1,T4,0004 -BEQ R0,R0,7F0E27FC -SW T1,028C (SP) ;cycles+=4 -//7F0D64BC: 53: LD D,E 4 -LW T6,028C (SP) -ANDI S4,S5,00FF -ADDIU T0,T6,0004 -BEQ R0,R0,7F0E27FC -SW T0,028C (SP) ;cycles+=4 -//7F0D64D0: 54: LD D,H 4 -LW T7,028C (SP) -LBU T3,0287 (SP) -LBU T8,0287 (SP) -ADDIU T9,T7,0004 -BNE T3,R0,7F0D64F0 -SW T9,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S4,S6,00FF -//7F0D64F0: -ADDIU AT,R0,0001 -BNE T8,AT,7F0D650C -LHU T4,0294 (SP) -LHU T5,0296 (SP) -SRA T2,T5,0x8 -BEQ R0,R0,7F0D6514 -SW T2,0048 (SP) -//7F0D650C: -SRA T1,T4,0x8 -SW T1,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S4,004B (SP) -//7F0D651C: 55: LD D,L 4 -LW T6,028C (SP) -LBU T7,0287 (SP) -LBU T9,0287 (SP) -ADDIU T0,T6,0004 -BNE T7,R0,7F0D653C -SW T0,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S4,S7,00FF -//7F0D653C: -ADDIU AT,R0,0001 -BNE T9,AT,7F0D6558 -LHU T5,0294 (SP) -LHU T3,0296 (SP) -ANDI T8,T3,00FF -BEQ R0,R0,7F0D6560 -SW T8,0048 (SP) -//7F0D6558: -ANDI T2,T5,00FF -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S4,004B (SP) -//7F0D6568: 56: LD D,(HL) 7 -LW T4,028C (SP) -LBU T6,0287 (SP) -SLL T0,S6,0x8 -ADDIU T1,T4,0007 -BNE T6,R0,7F0D658C -SW T1,028C (SP) ;cycles+=7 -OR T7,T0,S7 -BEQ R0,R0,7F0D65E0 -SH T7,0208 (SP) -//7F0D658C: -LW T9,028C (SP) -LBU T8,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T3,T9,0008 -BNE T8,AT,7F0D65B0 -SW T3,028C (SP) ;cycles+=8 -LHU T5,0296 (SP) -BEQ R0,R0,7F0D65B8 -SW T5,0048 (SP) -//7F0D65B0: -LHU T2,0294 (SP) -SW T2,0048 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -LW T7,0048 (SP) -ADDU T6,T4,T1 -LB T0,0000 (T6) -ADDIU T3,T4,0001 -SH T3,0298 (SP) ;spec.PC+=1 -ADDU T9,T0,T7 -SH T9,0208 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LHU T8,0208 (SP) -ADDU T2,T8,T5 -BEQ R0,R0,7F0E27FC -LBU S4,0000 (T2) -//7F0D65F8: 57: LD D,A 4 -LW T1,028C (SP) -ANDI S4,S0,00FF -ADDIU T6,T1,0004 -BEQ R0,R0,7F0E27FC -SW T6,028C (SP) ;cycles+=4 -//7F0D660C: 58: LD E,B 4 -LW T0,028C (SP) -ANDI S5,S2,00FF -ADDIU T7,T0,0004 -BEQ R0,R0,7F0E27FC -SW T7,028C (SP) ;cycles+=4 -//7F0D6620: 59: LD E,C 4 -LW T9,028C (SP) -ANDI S5,S3,00FF -ADDIU T4,T9,0004 -BEQ R0,R0,7F0E27FC -SW T4,028C (SP) ;cycles+=4 -//7F0D6634: 5A: LD E,D 4 -LW T3,028C (SP) -ANDI S5,S4,00FF -ADDIU T8,T3,0004 -BEQ R0,R0,7F0E27FC -SW T8,028C (SP) ;cycles+=4 -//7F0D6648: 5B: LD E,E 4 -LW T5,028C (SP) -ADDIU T2,T5,0004 -BEQ R0,R0,7F0E27FC -SW T2,028C (SP) ;cycles+=4 -//7F0D6658: 5C: LD E,H 4 -LW T1,028C (SP) -LBU T0,0287 (SP) -LBU T7,0287 (SP) -ADDIU T6,T1,0004 -BNE T0,R0,7F0D6678 -SW T6,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S5,S6,00FF -//7F0D6678: -ADDIU AT,R0,0001 -BNE T7,AT,7F0D6694 -LHU T3,0294 (SP) -LHU T9,0296 (SP) -SRA T4,T9,0x8 -BEQ R0,R0,7F0D669C -SW T4,0048 (SP) -//7F0D6694: -SRA T8,T3,0x8 -SW T8,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S5,004B (SP) -//7F0D66A4: 5D: LD E,L 4 -LW T5,028C (SP) -LBU T1,0287 (SP) -LBU T6,0287 (SP) -ADDIU T2,T5,0004 -BNE T1,R0,7F0D66C4 -SW T2,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S5,S7,00FF -//7F0D66C4: -ADDIU AT,R0,0001 -BNE T6,AT,7F0D66E0 -LHU T9,0294 (SP) -LHU T0,0296 (SP) -ANDI T7,T0,00FF -BEQ R0,R0,7F0D66E8 -SW T7,0048 (SP) -//7F0D66E0: -ANDI T4,T9,00FF -SW T4,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S5,004B (SP) -//7F0D66F0: 5E: LD E,(HL) 7 -LW T3,028C (SP) -LBU T5,0287 (SP) -SLL T2,S6,0x8 -ADDIU T8,T3,0007 -BNE T5,R0,7F0D6714 -SW T8,028C (SP) ;cycles+=7 -OR T1,T2,S7 -BEQ R0,R0,7F0D6768 -SH T1,0206 (SP) -//7F0D6714: -LW T6,028C (SP) -LBU T7,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T0,T6,0008 -BNE T7,AT,7F0D6738 -SW T0,028C (SP) ;cycles+=6 -LHU T9,0296 (SP) -BEQ R0,R0,7F0D6740 -SW T9,0048 (SP) -//7F0D6738: -LHU T4,0294 (SP) -SW T4,0048 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LHU T3,0298 (SP) ;T3=spec.PC -LW T1,0048 (SP) -ADDU T5,T3,T8 -LB T2,0000 (T5) -ADDIU T0,T3,0001 -SH T0,0298 (SP) ;spec.PC+=1 -ADDU T6,T2,T1 -SH T6,0206 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T7,0206 (SP) -ADDU T4,T7,T9 -BEQ R0,R0,7F0E27FC -LBU S5,0000 (T4) -//7F0D6780: 5F: LD E,A 4 -LW T8,028C (SP) -ANDI S5,S0,00FF ;S5=S0: spec.E = spec.A -ADDIU T5,T8,0004 -BEQ R0,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=4 -//7F0D6794: 60: LD H,B 4 -LW T2,028C (SP) -LBU T6,0287 (SP) -LBU T3,0287 (SP) -ADDIU T1,T2,0004 -BNE T6,R0,7F0D67B4 -SW T1,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S6,S2,00FF -//7F0D67B4: -ADDIU AT,R0,0001 -BNE T3,AT,7F0D67D8 -LHU T8,0294 (SP) -LHU T0,0296 (SP) -SLL T9,S2,0x8 -ANDI T7,T0,00FF -OR T4,T7,T9 -BEQ R0,R0,7F0E27FC -SH T4,0296 (SP) -//7F0D67D8: -ANDI T5,T8,00FF -SLL T2,S2,0x8 -OR T1,T5,T2 -BEQ R0,R0,7F0E27FC -SH T1,0294 (SP) -//7F0D67EC: 61: LD H,C 4 -LW T6,028C (SP) -LBU T0,0287 (SP) -LBU T7,0287 (SP) -ADDIU T3,T6,0004 -BNE T0,R0,7F0D680C -SW T3,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S6,S3,00FF -//7F0D680C: -ADDIU AT,R0,0001 -BNE T7,AT,7F0D6830 -LHU T2,0294 (SP) -LHU T9,0296 (SP) -SLL T8,S3,0x8 -ANDI T4,T9,00FF -OR T5,T4,T8 -BEQ R0,R0,7F0E27FC -SH T5,0296 (SP) -//7F0D6830: -ANDI T1,T2,00FF -SLL T6,S3,0x8 -OR T3,T1,T6 -BEQ R0,R0,7F0E27FC -SH T3,0294 (SP) -//7F0D6844: 62: LD H,D 4 -LW T0,028C (SP) -LBU T9,0287 (SP) -LBU T4,0287 (SP) -ADDIU T7,T0,0004 -BNE T9,R0,7F0D6864 -SW T7,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S6,S4,00FF -//7F0D6864: -ADDIU AT,R0,0001 -BNE T4,AT,7F0D6888 -LHU T6,0294 (SP) -LHU T8,0296 (SP) -SLL T2,S4,0x8 -ANDI T5,T8,00FF -OR T1,T5,T2 -BEQ R0,R0,7F0E27FC -SH T1,0296 (SP) -//7F0D6888: -ANDI T3,T6,00FF -SLL T0,S4,0x8 -OR T7,T3,T0 -BEQ R0,R0,7F0E27FC -SH T7,0294 (SP) -//7F0D689C: 63: LD H,E 4 -LW T9,028C (SP) -LBU T8,0287 (SP) -LBU T5,0287 (SP) -ADDIU T4,T9,0004 -BNE T8,R0,7F0D68BC -SW T4,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S6,S5,00FF -//7F0D68BC: -ADDIU AT,R0,0001 -BNE T5,AT,7F0D68E0 -LHU T0,0294 (SP) -LHU T2,0296 (SP) -SLL T6,S5,0x8 -ANDI T1,T2,00FF -OR T3,T1,T6 -BEQ R0,R0,7F0E27FC -SH T3,0296 (SP) -//7F0D68E0: -ANDI T7,T0,00FF -SLL T9,S5,0x8 -OR T4,T7,T9 -BEQ R0,R0,7F0E27FC -SH T4,0294 (SP) -//7F0D68F4: 64: LD H,H 4 -LW T8,028C (SP) -ADDIU T5,T8,0004 -BEQ R0,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=4 -//7F0D6904: 65: LD H,L 4 -LW T2,028C (SP) -LBU T6,0287 (SP) -LBU T5,0287 (SP) -ADDIU T1,T2,0004 -SLTIU T3,T6,0001 -BEQ T3,R0,7F0D695C -SW T1,028C (SP) ;cycles+=4 -BEQ T3,R0,7F0D6930 -LBU T0,0287 (SP) -BEQ R0,R0,7F0E27FC -ANDI S6,S7,00FF -//7F0D6930: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D694C -LHU T4,0294 (SP) -LHU T7,0296 (SP) -ANDI T9,T7,00FF -BEQ R0,R0,7F0D6954 -SW T9,0048 (SP) -//7F0D694C: -ANDI T8,T4,00FF -SW T8,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S6,004B (SP) -//7F0D695C: -ADDIU AT,R0,0001 -BNE T5,AT,7F0D69C0 -LBU T1,0287 (SP) -BNE T5,R0,7F0D6978 -LBU T2,0287 (SP) -BEQ R0,R0,7F0D69A4 -SW S7,0044 (SP) -//7F0D6978: -ADDIU AT,R0,0001 -BNE T2,AT,7F0D6994 -LHU T3,0294 (SP) -LHU T1,0296 (SP) -ANDI T6,T1,00FF -BEQ R0,R0,7F0D699C -SW T6,0040 (SP) -//7F0D6994: -ANDI T0,T3,00FF -SW T0,0040 (SP) -LW T7,0040 (SP) -SW T7,0044 (SP) -LW T9,0044 (SP) -LHU T8,0296 (SP) -SLL T4,T9,0x8 -ANDI T5,T8,00FF -OR T2,T4,T5 -BEQ R0,R0,7F0E27FC -SH T2,0296 (SP) -//7F0D69C0: -BNE T1,R0,7F0D69D0 -LBU T6,0287 (SP) -BEQ R0,R0,7F0D69FC -SW S7,003C (SP) -//7F0D69D0: -ADDIU AT,R0,0001 -BNE T6,AT,7F0D69EC -LHU T7,0294 (SP) -LHU T3,0296 (SP) -ANDI T0,T3,00FF -BEQ R0,R0,7F0D69F4 -SW T0,0038 (SP) -//7F0D69EC: -ANDI T9,T7,00FF -SW T9,0038 (SP) -LW T8,0038 (SP) -SW T8,003C (SP) -LW T4,003C (SP) -LHU T2,0294 (SP) -SLL T5,T4,0x8 -ANDI T1,T2,00FF -OR T6,T5,T1 -BEQ R0,R0,7F0E27FC -SH T6,0294 (SP) -//7F0D6A18: 66: LD H,(HL) 7 -LW T3,028C (SP) -LBU T7,0287 (SP) -SLL T9,S6,0x8 -ADDIU T0,T3,0007 -BNE T7,R0,7F0D6A3C -SW T0,028C (SP) ;cycles+=7 -OR T8,T9,S7 -BEQ R0,R0,7F0D6A90 -SH T8,0204 (SP) -//7F0D6A3C: -LW T4,028C (SP) -LBU T5,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T2,T4,0008 -BNE T5,AT,7F0D6A60 -SW T2,028C (SP) ;cycles+=8 -LHU T1,0296 (SP) -BEQ R0,R0,7F0D6A68 -SW T1,0048 (SP) -//7F0D6A60: -LHU T6,0294 (SP) -SW T6,0048 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T3,0298 (SP) ;T3=spec.PC -LW T8,0048 (SP) -ADDU T7,T3,T0 -LB T9,0000 (T7) -ADDIU T2,T3,0001 -SH T2,0298 (SP) ;spec.PC+=1 -ADDU T4,T9,T8 -SH T4,0204 (SP) -//7F0D6A90: -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T5,0204 (SP) -ADDU T6,T5,T1 -BEQ R0,R0,7F0E27FC -LBU S6,0000 (T6) -//7F0D6AA8: 67: LD H,A 4 -LW T0,028C (SP) -LBU T9,0287 (SP) -LBU T8,0287 (SP) -ADDIU T7,T0,0004 -BNE T9,R0,7F0D6AC8 -SW T7,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S6,S0,00FF -//7F0D6AC8: -ADDIU AT,R0,0001 -BNE T8,AT,7F0D6AEC -LHU T1,0294 (SP) -LHU T4,0296 (SP) -SLL T2,S0,0x8 -ANDI T3,T4,00FF -OR T5,T3,T2 -BEQ R0,R0,7F0E27FC -SH T5,0296 (SP) -//7F0D6AEC: -ANDI T6,T1,00FF -SLL T0,S0,0x8 -OR T7,T6,T0 -BEQ R0,R0,7F0E27FC -SH T7,0294 (SP) -//7F0D6B00: 68: LD L,B 4 -LW T9,028C (SP) -LBU T4,0287 (SP) -LBU T3,0287 (SP) -ADDIU T8,T9,0004 -BNE T4,R0,7F0D6B20 -SW T8,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S7,S2,00FF -//7F0D6B20: -ADDIU AT,R0,0001 -BNE T3,AT,7F0D6B40 -LHU T6,0294 (SP) -LHU T2,0296 (SP) -ANDI T5,T2,FF00 -OR T1,T5,S2 -BEQ R0,R0,7F0E27FC -SH T1,0296 (SP) -//7F0D6B40: -ANDI T0,T6,FF00 -OR T7,T0,S2 -BEQ R0,R0,7F0E27FC -SH T7,0294 (SP) -//7F0D6B50: 69: LD L,C 4 -LW T9,028C (SP) -LBU T4,0287 (SP) -LBU T3,0287 (SP) -ADDIU T8,T9,0004 -BNE T4,R0,7F0D6B70 -SW T8,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S7,S3,00FF -//7F0D6B70: -ADDIU AT,R0,0001 -BNE T3,AT,7F0D6B90 -LHU T6,0294 (SP) -LHU T2,0296 (SP) -ANDI T5,T2,FF00 -OR T1,T5,S3 -BEQ R0,R0,7F0E27FC -SH T1,0296 (SP) -//7F0D6B90: -ANDI T0,T6,FF00 -OR T7,T0,S3 -BEQ R0,R0,7F0E27FC -SH T7,0294 (SP) -//7F0D6BA0: 6A: LD L,D 4 -LW T9,028C (SP) -LBU T4,0287 (SP) -LBU T3,0287 (SP) -ADDIU T8,T9,0004 -BNE T4,R0,7F0D6BC0 -SW T8,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S7,S4,00FF -//7F0D6BC0: -ADDIU AT,R0,0001 -BNE T3,AT,7F0D6BE0 -LHU T6,0294 (SP) -LHU T2,0296 (SP) -ANDI T5,T2,FF00 -OR T1,T5,S4 -BEQ R0,R0,7F0E27FC -SH T1,0296 (SP) -//7F0D6BE0: -ANDI T0,T6,FF00 -OR T7,T0,S4 -BEQ R0,R0,7F0E27FC -SH T7,0294 (SP) -//7F0D6BF0: 6B: LD L,E 4 -LW T9,028C (SP) -LBU T4,0287 (SP) -LBU T3,0287 (SP) -ADDIU T8,T9,0004 -BNE T4,R0,7F0D6C10 -SW T8,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S7,S5,00FF -//7F0D6C10: -ADDIU AT,R0,0001 -BNE T3,AT,7F0D6C30 -LHU T6,0294 (SP) -LHU T2,0296 (SP) -ANDI T5,T2,FF00 -OR T1,T5,S5 -BEQ R0,R0,7F0E27FC -SH T1,0296 (SP) -//7F0D6C30: -ANDI T0,T6,FF00 -OR T7,T0,S5 -BEQ R0,R0,7F0E27FC -SH T7,0294 (SP) -//7F0D6C40: 6C: LD L,H 4 -LW T9,028C (SP) -LBU T4,0287 (SP) -LBU T7,0287 (SP) -ADDIU T8,T9,0004 -SLTIU T3,T4,0001 -BEQ T3,R0,7F0D6C98 -SW T8,028C (SP) ;cycles+=4 -BEQ T3,R0,7F0D6C6C -LBU T2,0287 (SP) -BEQ R0,R0,7F0E27FC -ANDI S7,S6,00FF -//7F0D6C6C: -ADDIU AT,R0,0001 -BNE T2,AT,7F0D6C88 -LHU T6,0294 (SP) -LHU T5,0296 (SP) -SRA T1,T5,0x8 -BEQ R0,R0,7F0D6C90 -SW T1,0048 (SP) -//7F0D6C88: -SRA T0,T6,0x8 -SW T0,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S7,004B (SP) -//7F0D6C98: -ADDIU AT,R0,0001 -BNE T7,AT,7F0D6CF8 -LBU T9,0287 (SP) -BNE T7,R0,7F0D6CB4 -LBU T9,0287 (SP) -BEQ R0,R0,7F0D6CE0 -SW S6,0044 (SP) -//7F0D6CB4: -ADDIU AT,R0,0001 -BNE T9,AT,7F0D6CD0 -LHU T3,0294 (SP) -LHU T8,0296 (SP) -SRA T4,T8,0x8 -BEQ R0,R0,7F0D6CD8 -SW T4,0040 (SP) -//7F0D6CD0: -SRA T2,T3,0x8 -SW T2,0040 (SP) -LW T5,0040 (SP) -SW T5,0044 (SP) -LHU T6,0296 (SP) -LW T1,0044 (SP) -ANDI T0,T6,FF00 -OR T7,T1,T0 -BEQ R0,R0,7F0E27FC -SH T7,0296 (SP) -//7F0D6CF8: -BNE T9,R0,7F0D6D08 -LBU T8,0287 (SP) -BEQ R0,R0,7F0D6D34 -SW S6,003C (SP) -//7F0D6D08: -ADDIU AT,R0,0001 -BNE T8,AT,7F0D6D24 -LHU T2,0294 (SP) -LHU T4,0296 (SP) -SRA T3,T4,0x8 -BEQ R0,R0,7F0D6D2C -SW T3,0038 (SP) -//7F0D6D24: -SRA T5,T2,0x8 -SW T5,0038 (SP) -LW T6,0038 (SP) -SW T6,003C (SP) -LHU T0,0294 (SP) -LW T1,003C (SP) -ANDI T7,T0,FF00 -OR T9,T1,T7 -BEQ R0,R0,7F0E27FC -SH T9,0294 (SP) -//7F0D6D4C: 6D: LD L,L 4 -LW T8,028C (SP) -ADDIU T4,T8,0004 -BEQ R0,R0,7F0E27FC -SW T4,028C (SP) ;cycles+=4 -//7F0D6D5C: 6E: LD L,(HL) 7 -LW T3,028C (SP) -LBU T5,0287 (SP) -SLL T6,S6,0x8 -ADDIU T2,T3,0007 -BNE T5,R0,7F0D6D80 -SW T2,028C (SP) ;cycles+=7 -OR T0,T6,S7 -BEQ R0,R0,7F0D6DD4 -SH T0,0202 (SP) -//7F0D6D80: -LW T1,028C (SP) -LBU T9,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T1,0008 -BNE T9,AT,7F0D6DA4 -SW T7,028C (SP) ;cycles+=8 -LHU T8,0296 (SP) -BEQ R0,R0,7F0D6DAC -SW T8,0048 (SP) -//7F0D6DA4: -LHU T4,0294 (SP) -SW T4,0048 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T3,0298 (SP) ;T3=spec.PC -LW T0,0048 (SP) -ADDU T5,T3,T2 -LB T6,0000 (T5) ;T6= val -ADDIU T7,T3,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T1,T6,T0 -SH T1,0202 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LHU T9,0202 (SP) -ADDU T4,T9,T8 -BEQ R0,R0,7F0E27FC -LBU S7,0000 (T4) -//7F0D6DEC: 6F: LD L,A 4 -LW T2,028C (SP) -LBU T6,0287 (SP) -LBU T0,0287 (SP) -ADDIU T5,T2,0004 -BNE T6,R0,7F0D6E0C -SW T5,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S7,S0,00FF -//7F0D6E0C: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D6E2C -LHU T9,0294 (SP) -LHU T1,0296 (SP) -ANDI T3,T1,FF00 -OR T7,T3,S0 -BEQ R0,R0,7F0E27FC -SH T7,0296 (SP) -//7F0D6E2C: -ANDI T8,T9,FF00 -OR T4,T8,S0 -BEQ R0,R0,7F0E27FC -SH T4,0294 (SP) -//7F0D6E3C: 70: LD (HL),B 7 -LW T2,028C (SP) -LBU T6,0287 (SP) -SLL T0,S6,0x8 -ADDIU T5,T2,0007 -BNE T6,R0,7F0D6E60 -SW T5,028C (SP) ;cycles+=7 -OR T1,T0,S7 -BEQ R0,R0,7F0D6EB4 -SH T1,0200 (SP) -//7F0D6E60: -LW T3,028C (SP) -LBU T9,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T3,0008 -BNE T9,AT,7F0D6E84 -SW T7,028C (SP) ;cycles+=8 -LHU T8,0296 (SP) -BEQ R0,R0,7F0D6E8C -SW T8,0048 (SP) -//7F0D6E84: -LHU T4,0294 (SP) -SW T4,0048 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LHU T2,0298 (SP) ;T2=spec.PC -LW T1,0048 (SP) -ADDU T6,T2,T5 -LB T0,0000 (T6) -ADDIU T7,T2,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T3,T0,T1 -SH T3,0200 (SP) -LHU T9,0200 (SP) -LHU T5,0200 (SP) -LUI T8,8009 -SLTI AT,T9,5B00 -BNEL AT,R0,7F0D6EE0 -SLTI AT,T5,5800 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDU T4,T8,T9 -BEQ R0,R0,7F0E27FC -SB S2,0000 (T4) -//7F0D6EDC: -SLTI AT,T5,5800 -BNE AT,R0,7F0D6F14 -LHU T8,0200 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LUI T3,8009 -ADDIU T1,R0,0001 -ADDU T0,T6,T5 -SB S2,0000 (T0) -LHU T2,0200 (SP) -LW T3,E32C (T3) -ADDU T7,T3,T2 -BEQ R0,R0,7F0E27FC -SB T1,A800 (T7) -//7F0D6F14: -SLTI AT,T8,4000 -BNE AT,R0,7F0E27FC -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LUI T7,8009 -ADDIU T6,R0,0001 -ADDU T4,T9,T8 -SB S2,0000 (T4) -LHU T5,0200 (SP) -LW T7,E32C (T7) -ANDI T0,T5,1800 -SRA T3,T0,0x3 -ANDI T2,T5,00FF -OR T1,T3,T2 -ADDU T9,T7,T1 -BEQ R0,R0,7F0E27FC -SB T6,0000 (T9) -//7F0D6F58: 71: LD (HL),C 7 -LW T8,028C (SP) -LBU T0,0287 (SP) -SLL T5,S6,0x8 -ADDIU T4,T8,0007 -BNE T0,R0,7F0D6F7C -SW T4,028C (SP) ;cycles+=7 -OR T3,T5,S7 -BEQ R0,R0,7F0D6FD0 -SH T3,01FE (SP) -//7F0D6F7C: -LW T2,028C (SP) -LBU T1,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T2,0008 -BNE T1,AT,7F0D6FA0 -SW T7,028C (SP) ;cycles+=8 -LHU T6,0296 (SP) -BEQ R0,R0,7F0D6FA8 -SW T6,0048 (SP) -//7F0D6FA0: -LHU T9,0294 (SP) -SW T9,0048 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LHU T8,0298 (SP) ;T8=spec.PC -LW T3,0048 (SP) -ADDU T0,T8,T4 -LB T5,0000 (T0) -ADDIU T7,T8,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T2,T5,T3 -SH T2,01FE (SP) -LHU T1,01FE (SP) -LHU T4,01FE (SP) -LUI T6,8009 -SLTI AT,T1,5B00 -BNEL AT,R0,7F0D6FFC -SLTI AT,T4,5800 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -ADDU T9,T6,T1 -BEQ R0,R0,7F0E27FC -SB S3,0000 (T9) -//7F0D6FF8: -SLTI AT,T4,5800 -BNE AT,R0,7F0D7030 -LHU T6,01FE (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LUI T2,8009 -ADDIU T3,R0,0001 -ADDU T5,T0,T4 -SB S3,0000 (T5) -LHU T8,01FE (SP) -LW T2,E32C (T2) -ADDU T7,T2,T8 -BEQ R0,R0,7F0E27FC -SB T3,A800 (T7) -//7F0D7030: -SLTI AT,T6,4000 -BNE AT,R0,7F0E27FC -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LUI T7,8009 -ADDIU T0,R0,0001 -ADDU T9,T1,T6 -SB S3,0000 (T9) -LHU T4,01FE (SP) -LW T7,E32C (T7) -ANDI T5,T4,1800 -SRA T2,T5,0x3 -ANDI T8,T4,00FF -OR T3,T2,T8 -ADDU T1,T7,T3 -BEQ R0,R0,7F0E27FC -SB T0,0000 (T1) -//7F0D7074: 72: LD (HL),D 7 -LW T6,028C (SP) -LBU T5,0287 (SP) -SLL T4,S6,0x8 -ADDIU T9,T6,0007 -BNE T5,R0,7F0D7098 -SW T9,028C (SP) ;cycles+=7 -OR T2,T4,S7 -BEQ R0,R0,7F0D70EC -SH T2,01FC (SP) -//7F0D7098: -LW T8,028C (SP) -LBU T3,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T8,0008 -BNE T3,AT,7F0D70BC -SW T7,028C (SP) ;cycles+=8 -LHU T0,0296 (SP) -BEQ R0,R0,7F0D70C4 -SW T0,0048 (SP) -//7F0D70BC: -LHU T1,0294 (SP) -SW T1,0048 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T6,0298 (SP) ;T6=spec.PC -LW T2,0048 (SP) -ADDU T5,T6,T9 -LB T4,0000 (T5) -ADDIU T7,T6,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T8,T4,T2 -SH T8,01FC (SP) -LHU T3,01FC (SP) -LHU T9,01FC (SP) -LUI T0,8009 -SLTI AT,T3,5B00 -BNEL AT,R0,7F0D7118 -SLTI AT,T9,5800 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -ADDU T1,T0,T3 -BEQ R0,R0,7F0E27FC -SB S4,0000 (T1) -//7F0D7114: -SLTI AT,T9,5800 -BNE AT,R0,7F0D714C -LHU T0,01FC (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LUI T8,8009 -ADDIU T2,R0,0001 -ADDU T4,T5,T9 -SB S4,0000 (T4) -LHU T6,01FC (SP) -LW T8,E32C (T8) -ADDU T7,T8,T6 -BEQ R0,R0,7F0E27FC -SB T2,A800 (T7) -//7F0D714C: -SLTI AT,T0,4000 -BNE AT,R0,7F0E27FC -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LUI T7,8009 -ADDIU T5,R0,0001 -ADDU T1,T3,T0 -SB S4,0000 (T1) -LHU T9,01FC (SP) -LW T7,E32C (T7) -ANDI T4,T9,1800 -SRA T8,T4,0x3 -ANDI T6,T9,00FF -OR T2,T8,T6 -ADDU T3,T7,T2 -BEQ R0,R0,7F0E27FC -SB T5,0000 (T3) -//7F0D7190: 73: LD (HL),E 7 -LW T0,028C (SP) -LBU T4,0287 (SP) -SLL T9,S6,0x8 -ADDIU T1,T0,0007 -BNE T4,R0,7F0D71B4 -SW T1,028C (SP) ;cycles+=7 -OR T8,T9,S7 -BEQ R0,R0,7F0D7208 -SH T8,01FA (SP) -//7F0D71B4: -LW T6,028C (SP) -LBU T2,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T6,0008 -BNE T2,AT,7F0D71D8 -SW T7,028C (SP) ;cycles+=8 -LHU T5,0296 (SP) -BEQ R0,R0,7F0D71E0 -SW T5,0048 (SP) -//7F0D71D8: -LHU T3,0294 (SP) -SW T3,0048 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T0,0298 (SP) ;T0=spec.PC -LW T8,0048 (SP) -ADDU T4,T0,T1 -LB T9,0000 (T4) -ADDIU T7,T0,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T6,T9,T8 -SH T6,01FA (SP) -LHU T2,01FA (SP) -LHU T1,01FA (SP) -LUI T5,8009 -SLTI AT,T2,5B00 -BNEL AT,R0,7F0D7234 -SLTI AT,T1,5800 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -ADDU T3,T5,T2 -BEQ R0,R0,7F0E27FC -SB S5,0000 (T3) -//7F0D7230: -SLTI AT,T1,5800 -BNE AT,R0,7F0D7268 -LHU T5,01FA (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LUI T6,8009 -ADDIU T8,R0,0001 -ADDU T9,T4,T1 -SB S5,0000 (T9) -LHU T0,01FA (SP) -LW T6,E32C (T6) -ADDU T7,T6,T0 -BEQ R0,R0,7F0E27FC -SB T8,A800 (T7) -//7F0D7268: -SLTI AT,T5,4000 -BNE AT,R0,7F0E27FC -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LUI T7,8009 -ADDIU T4,R0,0001 -ADDU T3,T2,T5 -SB S5,0000 (T3) -LHU T1,01FA (SP) -LW T7,E32C (T7) -ANDI T9,T1,1800 -SRA T6,T9,0x3 -ANDI T0,T1,00FF -OR T8,T6,T0 -ADDU T2,T7,T8 -BEQ R0,R0,7F0E27FC -SB T4,0000 (T2) -//7F0D72AC: 74: LD (HL),H 7 -LW T5,028C (SP) -LBU T9,0287 (SP) -SLL T1,S6,0x8 -ADDIU T3,T5,0007 -BNE T9,R0,7F0D72D0 -SW T3,028C (SP) ;cycles+=7 -OR T6,T1,S7 -BEQ R0,R0,7F0D7324 -SH T6,01F8 (SP) -//7F0D72D0: -LW T0,028C (SP) -LBU T8,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T0,0008 -BNE T8,AT,7F0D72F4 -SW T7,028C (SP) ;cycles+=8 -LHU T4,0296 (SP) -BEQ R0,R0,7F0D72FC -SW T4,0048 (SP) -//7F0D72F4: -LHU T2,0294 (SP) -SW T2,0048 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T5,0298 (SP) ;T5=spec.PC -LW T6,0048 (SP) -ADDU T9,T5,T3 -LB T1,0000 (T9) -ADDIU T7,T5,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T0,T1,T6 -SH T0,01F8 (SP) -LHU T8,01F8 (SP) -LHU T3,01F8 (SP) -LUI T4,8009 -SLTI AT,T8,5B00 -BNEL AT,R0,7F0D7350 -SLTI AT,T3,5800 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -ADDU T2,T4,T8 -BEQ R0,R0,7F0E27FC -SB S6,0000 (T2) -//7F0D734C: -SLTI AT,T3,5800 -BNE AT,R0,7F0D7384 -LHU T4,01F8 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LUI T0,8009 -ADDIU T6,R0,0001 -ADDU T1,T9,T3 -SB S6,0000 (T1) -LHU T5,01F8 (SP) -LW T0,E32C (T0) -ADDU T7,T0,T5 -BEQ R0,R0,7F0E27FC -SB T6,A800 (T7) -//7F0D7384: -SLTI AT,T4,4000 -BNE AT,R0,7F0E27FC -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LUI T7,8009 -ADDIU T9,R0,0001 -ADDU T2,T8,T4 -SB S6,0000 (T2) -LHU T3,01F8 (SP) -LW T7,E32C (T7) -ANDI T1,T3,1800 -SRA T0,T1,0x3 -ANDI T5,T3,00FF -OR T6,T0,T5 -ADDU T8,T7,T6 -BEQ R0,R0,7F0E27FC -SB T9,0000 (T8) -//7F0D73C8: 75: LD (HL),L 7 -LW T4,028C (SP) -LBU T1,0287 (SP) -SLL T3,S6,0x8 -ADDIU T2,T4,0007 -BNE T1,R0,7F0D73EC -SW T2,028C (SP) ;cycles+=7 -OR T0,T3,S7 -BEQ R0,R0,7F0D7440 -SH T0,01F6 (SP) -//7F0D73EC: -LW T5,028C (SP) -LBU T6,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T5,0008 -BNE T6,AT,7F0D7410 -SW T7,028C (SP) ;cycles+=8 -LHU T9,0296 (SP) -BEQ R0,R0,7F0D7418 -SW T9,0048 (SP) -//7F0D7410: -LHU T8,0294 (SP) -SW T8,0048 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -LW T0,0048 (SP) -ADDU T1,T4,T2 -LB T3,0000 (T1) -ADDIU T7,T4,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T5,T3,T0 -SH T5,01F6 (SP) -LHU T6,01F6 (SP) -LHU T2,01F6 (SP) -LUI T9,8009 -SLTI AT,T6,5B00 -BNEL AT,R0,7F0D746C -SLTI AT,T2,5800 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -ADDU T8,T9,T6 -BEQ R0,R0,7F0E27FC -SB S7,0000 (T8) -//7F0D7468: -SLTI AT,T2,5800 -BNE AT,R0,7F0D74A0 -LHU T9,01F6 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LUI T5,8009 -ADDIU T0,R0,0001 -ADDU T3,T1,T2 -SB S7,0000 (T3) -LHU T4,01F6 (SP) -LW T5,E32C (T5) -ADDU T7,T5,T4 -BEQ R0,R0,7F0E27FC -SB T0,A800 (T7) -//7F0D74A0: -SLTI AT,T9,4000 -BNE AT,R0,7F0E27FC -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LUI T7,8009 -ADDIU T1,R0,0001 -ADDU T8,T6,T9 -SB S7,0000 (T8) -LHU T2,01F6 (SP) -LW T7,E32C (T7) -ANDI T3,T2,1800 -SRA T5,T3,0x3 -ANDI T4,T2,00FF -OR T0,T5,T4 -ADDU T6,T7,T0 -BEQ R0,R0,7F0E27FC -SB T1,0000 (T6) -//7F0D74E4: 76: HALT 4 -LW T9,028C (SP) -LW T3,0280 (SP) -ADDIU T8,T9,0004 -SLTU AT,T8,T3 -BEQ AT,R0,7F0D7514 -SW T8,028C (SP) ;cycles+=4 -SUBU T2,T3,T8 -ADDIU T5,T2,0003 -ADDIU AT,R0,FFFC -AND T4,T5,AT -ADDU T7,T8,T4 -SW T7,028C (SP) -LHU T0,0298 (SP) ;T0=spec.PC -ADDIU T1,T0,FFFF -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) ;spec.PC-=1 -//7F0D7524: 77: LD (HL),A 7 -LW T6,028C (SP) -LBU T3,0287 (SP) -SLL T2,S6,0x8 -ADDIU T9,T6,0007 -BNE T3,R0,7F0D7548 -SW T9,028C (SP) ;cycles+=7 -OR T5,T2,S7 -BEQ R0,R0,7F0D759C -SH T5,01F4 (SP) -//7F0D7548: -LW T8,028C (SP) -LBU T7,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T4,T8,0008 -BNE T7,AT,7F0D756C -SW T4,028C (SP) ;cycles+=8 -LHU T0,0296 (SP) -BEQ R0,R0,7F0D7574 -SW T0,0048 (SP) -//7F0D756C: -LHU T1,0294 (SP) -SW T1,0048 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T6,0298 (SP) ;T6=spec.PC -LW T5,0048 (SP) -ADDU T3,T6,T9 -LB T2,0000 (T3) -ADDIU T4,T6,0001 -SH T4,0298 (SP) ;spec.PC+=1 -ADDU T8,T2,T5 -SH T8,01F4 (SP) -LHU T7,01F4 (SP) -LHU T9,01F4 (SP) -LUI T0,8009 -SLTI AT,T7,5B00 -BNEL AT,R0,7F0D75C8 -SLTI AT,T9,5800 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -ADDU T1,T0,T7 -BEQ R0,R0,7F0E27FC -SB S0,0000 (T1) -//7F0D75C4: -SLTI AT,T9,5800 -BNE AT,R0,7F0D75FC -LHU T0,01F4 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LUI T8,8009 -ADDIU T5,R0,0001 -ADDU T2,T3,T9 -SB S0,0000 (T2) -LHU T6,01F4 (SP) -LW T8,E32C (T8) -ADDU T4,T8,T6 -BEQ R0,R0,7F0E27FC -SB T5,A800 (T4) -//7F0D75FC: -SLTI AT,T0,4000 -BNE AT,R0,7F0E27FC -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LUI T4,8009 -ADDIU T3,R0,0001 -ADDU T1,T7,T0 -SB S0,0000 (T1) -LHU T9,01F4 (SP) -LW T4,E32C (T4) -ANDI T2,T9,1800 -SRA T8,T2,0x3 -ANDI T6,T9,00FF -OR T5,T8,T6 -ADDU T7,T4,T5 -BEQ R0,R0,7F0E27FC -SB T3,0000 (T7) -//7F0D7640: 78: LD A,B 4 -LW T0,028C (SP) -ANDI S0,S2,00FF -ADDIU T1,T0,0004 -BEQ R0,R0,7F0E27FC -SW T1,028C (SP) ;cycles+=4 -//7F0D7654: 79: LD A,C 4 -LW T2,028C (SP) -ANDI S0,S3,00FF ;S0=S3: spec.A = spec.C -ADDIU T9,T2,0004 -BEQ R0,R0,7F0E27FC -SW T9,028C (SP) ;cycles+=4 -//7F0D7668: 7A: LD A,D 4 -LW T8,028C (SP) -ANDI S0,S4,00FF ;S0=S4: spec.A = spec.D -ADDIU T6,T8,0004 -BEQ R0,R0,7F0E27FC -SW T6,028C (SP) ;cycles+=4 -//7F0D767C: 7B: LD A,E 4 -LW T4,028C (SP) -ANDI S0,S5,00FF ;S0=S5: spec.A = spec.E -ADDIU T5,T4,0004 -BEQ R0,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=4 -//7F0D7690: 7C: LD A,H 4 -LW T3,028C (SP) -LBU T0,0287 (SP) ;SP+287: -LBU T1,0287 (SP) -ADDIU T7,T3,0004 -BNE T0,R0,7F0D76B0 -SW T7,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S0,S6,00FF ;S0=S6: spec.A = spec.H -//7F0D76B0: -ADDIU AT,R0,0001 -BNE T1,AT,7F0D76CC -LHU T8,0294 (SP) -LHU T2,0296 (SP) -SRA T9,T2,0x8 -BEQ R0,R0,7F0D76D4 -SW T9,0048 (SP) -//7F0D76CC: -SRA T6,T8,0x8 -SW T6,0048 (SP) -//7F0D76D4: -BEQ R0,R0,7F0E27FC -LBU S0,004B (SP) ;S0=SP+4B: -//7F0D76DC: 7D: LD A,L 4 -LW T4,028C (SP) -LBU T3,0287 (SP) -LBU T7,0287 (SP) -ADDIU T5,T4,0004 -BNE T3,R0,7F0D76FC -SW T5,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -ANDI S0,S7,00FF ;S0=S7: spec.A = spec.L -//7F0D76FC: -ADDIU AT,R0,0001 -BNE T7,AT,7F0D7718 -LHU T2,0294 (SP) -LHU T0,0296 (SP) -ANDI T1,T0,00FF -BEQ R0,R0,7F0D7720 -SW T1,0048 (SP) -//7F0D7718: -ANDI T9,T2,00FF -SW T9,0048 (SP) -BEQ R0,R0,7F0E27FC -LBU S0,004B (SP) -//7F0D7728: 7E: LD A,(HL) 7 -LW T8,028C (SP) -LBU T4,0287 (SP) -SLL T5,S6,0x8 -ADDIU T6,T8,0007 -BNE T4,R0,7F0D774C -SW T6,028C (SP) ;cycles+=7 -OR T3,T5,S7 -BEQ R0,R0,7F0D77A0 -SH T3,01F2 (SP) -//7F0D774C: -LW T7,028C (SP) -LBU T1,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T0,T7,0008 -BNE T1,AT,7F0D7770 -SW T0,028C (SP) ;cycles+=8 -LHU T2,0296 (SP) -BEQ R0,R0,7F0D7778 -SW T2,0048 (SP) -//7F0D7770: -LHU T9,0294 (SP) -SW T9,0048 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T8,0298 (SP) ;T8=spec.PC -LW T3,0048 (SP) -ADDU T4,T8,T6 -LB T5,0000 (T4) -ADDIU T0,T8,0001 -SH T0,0298 (SP) ;spec.PC+=1 -ADDU T7,T5,T3 -SH T7,01F2 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T1,01F2 (SP) -ADDU T9,T1,T2 -BEQ R0,R0,7F0E27FC -LBU S0,0000 (T9) -//7F0D77B8: 7F: LD A,A 4 -LW T6,028C (SP) -ADDIU T4,T6,0004 -BEQ R0,R0,7F0E27FC -SW T4,028C (SP) ;cycles+=4 -//7F0D77C8: 80: ADD A,B 4 -LW T5,028C (SP) -ANDI T7,S2,00FF -ADDU T0,S0,T7 ;T0= spec.A + spec.B -ADDIU T3,T5,0004 -ANDI T1,T0,00A8 ;T1= add & A8 (10101000) -SRA T2,T0,0x8 ;T2= nonzero if overflow -ANDI T4,T7,000F -ANDI T6,S0,000F -SW T3,028C (SP) ;cycles+=4 -ADDU T5,T6,T4 -OR T9,T1,T2 -ADDIU AT,R0,000F -SLT T3,AT,T5 -NOR T2,S0,R0 -XOR T5,T0,S0 -SH T0,01F0 (SP) -LBU S0,01F1 (SP) -XOR T6,T2,T7 -SLL T8,T3,0x4 -ANDI T4,T6,0080 -AND T3,T4,T5 -OR T1,T9,T8 -SRA T9,T3,0x5 -SLTIU T2,S0,0001 ;T2= True if spec.A=0 -SLL T6,T2,0x6 ;T6= ZERO flag (40) -OR T8,T1,T9 -OR S1,T8,T6 -ANDI T0,S1,00FF -OR S1,T0,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S2,01EF (SP) -//7F0D7848: 81: ADD A,C 4 -LW T4,028C (SP) -ANDI T3,S3,00FF -ADDU T9,S0,T3 -ADDIU T5,T4,0004 -ANDI T8,T9,00A8 -SRA T2,T9,0x8 -ANDI T0,T3,000F -ANDI T6,S0,000F -SW T5,028C (SP) ;cycles+=4 -ADDU T4,T6,T0 -OR T7,T8,T2 -ADDIU AT,R0,000F -SLT T5,AT,T4 -NOR T2,S0,R0 -XOR T4,T9,S0 -SH T9,01EC (SP) -LBU S0,01ED (SP) -XOR T6,T2,T3 -SLL T1,T5,0x4 -ANDI T0,T6,0080 -AND T5,T0,T4 -OR T8,T7,T1 -SRA T7,T5,0x5 -SLTIU T2,S0,0001 -SLL T6,T2,0x6 -OR T1,T8,T7 -OR S1,T1,T6 -ANDI T9,S1,00FF -OR S1,T9,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S3,01EB (SP) -//7F0D78C8: 82: ADD A,D 4 -LW T0,028C (SP) -ANDI T5,S4,00FF -ADDU T7,S0,T5 -ADDIU T4,T0,0004 -ANDI T1,T7,00A8 -SRA T2,T7,0x8 -ANDI T9,T5,000F -ANDI T6,S0,000F -SW T4,028C (SP) ;cycles+=4 -ADDU T0,T6,T9 -OR T3,T1,T2 -ADDIU AT,R0,000F -SLT T4,AT,T0 -NOR T2,S0,R0 -XOR T0,T7,S0 -SH T7,01E8 (SP) -LBU S0,01E9 (SP) -XOR T6,T2,T5 -SLL T8,T4,0x4 -ANDI T9,T6,0080 -AND T4,T9,T0 -OR T1,T3,T8 -SRA T3,T4,0x5 -SLTIU T2,S0,0001 -SLL T6,T2,0x6 -OR T8,T1,T3 -OR S1,T8,T6 -ANDI T7,S1,00FF -OR S1,T7,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S4,01E7 (SP) -//7F0D7948: 83: ADD A,E 4 -LW T9,028C (SP) -ANDI T4,S5,00FF -ADDU T3,S0,T4 -ADDIU T0,T9,0004 -ANDI T8,T3,00A8 -SRA T2,T3,0x8 -ANDI T7,T4,000F -ANDI T6,S0,000F -SW T0,028C (SP) ;cycles+=4 -ADDU T9,T6,T7 -OR T5,T8,T2 -ADDIU AT,R0,000F -SLT T0,AT,T9 -NOR T2,S0,R0 -XOR T9,T3,S0 -SH T3,01E4 (SP) -LBU S0,01E5 (SP) -XOR T6,T2,T4 -SLL T1,T0,0x4 -ANDI T7,T6,0080 -AND T0,T7,T9 -OR T8,T5,T1 -SRA T5,T0,0x5 -SLTIU T2,S0,0001 -SLL T6,T2,0x6 -OR T1,T8,T5 -OR S1,T1,T6 -ANDI T3,S1,00FF -OR S1,T3,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S5,01E3 (SP) -//7F0D79C8: 84: ADD A,H 4 -LW T7,028C (SP) -LBU T0,0287 (SP) -LBU T8,0287 (SP) -ADDIU T9,T7,0004 -BNE T0,R0,7F0D79E8 -SW T9,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D7A14 -SB S6,01DF (SP) -//7F0D79E8: -ADDIU AT,R0,0001 -BNE T8,AT,7F0D7A04 -LHU T2,0294 (SP) -LHU T5,0296 (SP) -SRA T1,T5,0x8 -BEQ R0,R0,7F0D7A0C -SW T1,0048 (SP) -//7F0D7A04: -SRA T4,T2,0x8 -SW T4,0048 (SP) -LW T6,0048 (SP) -SB T6,01DF (SP) -LBU T3,01DF (SP) -ANDI T1,S0,000F -ADDIU AT,R0,000F -ADDU T9,S0,T3 -ANDI T0,T9,00A8 -SRA T8,T9,0x8 -ANDI T2,T3,000F -ADDU T4,T1,T2 -OR T5,T0,T8 -NOR T8,S0,R0 -SLT T6,AT,T4 -XOR T4,T9,S0 -SH T9,01E0 (SP) -LBU S0,01E1 (SP) -SLL T7,T6,0x4 -XOR T1,T8,T3 -ANDI T2,T1,0080 -AND T6,T2,T4 -OR T0,T5,T7 -SRA T5,T6,0x5 -SLTIU T8,S0,0001 -SLL T1,T8,0x6 -OR T7,T0,T5 -OR S1,T7,T1 -ANDI T9,S1,00FF -OR S1,T9,R0 -BEQ R0,R0,7F0E27FC -SW T8,0048 (SP) -//7F0D7A84: 85: ADD A,L 4 -LW T2,028C (SP) -LBU T6,0287 (SP) -LBU T0,0287 (SP) -ADDIU T4,T2,0004 -BNE T6,R0,7F0D7AA4 -SW T4,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D7AD0 -SB S7,01DB (SP) -//7F0D7AA4: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D7AC0 -LHU T8,0294 (SP) -LHU T5,0296 (SP) -ANDI T7,T5,00FF -BEQ R0,R0,7F0D7AC8 -SW T7,0048 (SP) -//7F0D7AC0: -ANDI T3,T8,00FF -SW T3,0048 (SP) -LW T1,0048 (SP) -SB T1,01DB (SP) -LBU T9,01DB (SP) -ANDI T7,S0,000F -ADDIU AT,R0,000F -ADDU T4,S0,T9 -ANDI T6,T4,00A8 -SRA T0,T4,0x8 -ANDI T8,T9,000F -ADDU T3,T7,T8 -OR T5,T6,T0 -NOR T0,S0,R0 -SLT T1,AT,T3 -XOR T3,T4,S0 -SH T4,01DC (SP) -LBU S0,01DD (SP) -SLL T2,T1,0x4 -XOR T7,T0,T9 -ANDI T8,T7,0080 -AND T1,T8,T3 -OR T6,T5,T2 -SRA T5,T1,0x5 -SLTIU T0,S0,0001 -SLL T7,T0,0x6 -OR T2,T6,T5 -OR S1,T2,T7 -ANDI T4,S1,00FF -OR S1,T4,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0D7B40: 86: ADD A,(HL) 7 -LW T8,028C (SP) -LBU T1,0287 (SP) -SLL T6,S6,0x8 -ADDIU T3,T8,0007 -BNE T1,R0,7F0D7B64 -SW T3,028C (SP) ;cycles+=7 -OR T5,T6,S7 -BEQ R0,R0,7F0D7BB8 -SH T5,01D8 (SP) -//7F0D7B64: -LW T2,028C (SP) -LBU T9,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T0,T2,0008 -BNE T9,AT,7F0D7B88 -SW T0,028C (SP) ;cycles+=8 -LHU T7,0296 (SP) -BEQ R0,R0,7F0D7B90 -SW T7,0048 (SP) -//7F0D7B88: -LHU T4,0294 (SP) -SW T4,0048 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T8,0298 (SP) ;T8=spec.PC -LW T5,0048 (SP) -ADDU T1,T8,T3 -LB T6,0000 (T1) -ADDIU T0,T8,0001 -SH T0,0298 (SP) ;spec.PC+=1 -ADDU T2,T6,T5 -SH T2,01D8 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T9,01D8 (SP) -ADDIU AT,R0,000F -ADDU T4,T9,T7 -LBU T3,0000 (T4) -ANDI T9,S0,000F -ADDU T6,S0,T3 -ANDI T5,T6,00A8 -SRA T2,T6,0x8 -ANDI T0,T3,000F -ADDU T7,T9,T0 -OR T8,T5,T2 -NOR T2,S0,R0 -SLT T4,AT,T7 -XOR T7,T6,S0 -SH T6,01D6 (SP) -LBU S0,01D7 (SP) -SLL T1,T4,0x4 -XOR T9,T2,T3 -ANDI T0,T9,0080 -AND T4,T0,T7 -OR T5,T8,T1 -SRA T8,T4,0x5 -SLTIU T2,S0,0001 -SLL T9,T2,0x6 -OR T1,T5,T8 -OR S1,T1,T9 -ANDI T6,S1,00FF -OR S1,T6,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SB T3,01D5 (SP) -//7F0D7C3C: 87: ADD A,A 4 -LW T0,028C (SP) -ANDI T4,S0,00FF -ADDU T8,S0,T4 -ADDIU T7,T0,0004 -ANDI T1,T8,00A8 -SRA T2,T8,0x8 -ANDI T6,T4,000F -ANDI T9,S0,000F -SW T7,028C (SP) ;cycles+=4 -ADDU T0,T9,T6 -OR T3,T1,T2 -ADDIU AT,R0,000F -SLT T7,AT,T0 -NOR T2,S0,R0 -XOR T0,T8,S0 -SH T8,01D2 (SP) -SB S0,01D1 (SP) -LBU S0,01D3 (SP) -XOR T9,T2,T4 -SLL T5,T7,0x4 -ANDI T6,T9,0080 -AND T7,T6,T0 -OR T1,T3,T5 -SRA T3,T7,0x5 -SLTIU T2,S0,0001 -SLL T9,T2,0x6 -OR T5,T1,T3 -OR S1,T5,T9 -ANDI T8,S1,00FF -OR S1,T8,R0 -BEQ R0,R0,7F0E27FC -SW T2,0048 (SP) -//7F0D7CBC: 88: ADC A,B 4 -LW T6,028C (SP) -ANDI T7,S2,00FF -ADDU T1,S0,T7 -ANDI T3,S1,0001 -ADDU T5,T1,T3 -ADDIU T0,T6,0004 -SW T0,028C (SP) ;cycles+=4 -ANDI T0,S0,000F -ANDI T1,T7,000F -ADDU T3,T0,T1 -ANDI T4,T5,00A8 -SRA T8,T5,0x8 -ANDI T2,S1,0001 -ADDU T9,T3,T2 -OR T6,T4,T8 -ADDIU AT,R0,000F -SLT T4,AT,T9 -SLL T8,T4,0x4 -OR T9,T5,R0 -NOR T1,S0,R0 -XOR T4,T9,S0 -SH T5,01CE (SP) -LBU S0,01CF (SP) -XOR T3,T1,T7 -ANDI T2,T3,0080 -OR T0,T6,T8 -AND T6,T2,T4 -SRA T8,T6,0x5 -SLTIU T7,S0,0001 -SLL T5,T7,0x6 -OR T1,T0,T8 -OR S1,T1,T5 -ANDI T9,S1,00FF -OR S1,T9,R0 -SW T7,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S2,01CD (SP) -//7F0D7D50: 89: ADC A,C 4 -LW T2,028C (SP) -ANDI T6,S3,00FF -ADDU T0,S0,T6 -ANDI T8,S1,0001 -ADDU T1,T0,T8 -ADDIU T4,T2,0004 -SW T4,028C (SP) ;cycles+=4 -ANDI T4,S0,000F -ANDI T0,T6,000F -ADDU T8,T4,T0 -ANDI T3,T1,00A8 -SRA T9,T1,0x8 -ANDI T7,S1,0001 -ADDU T5,T8,T7 -OR T2,T3,T9 -ADDIU AT,R0,000F -SLT T3,AT,T5 -SLL T9,T3,0x4 -OR T5,T1,R0 -NOR T0,S0,R0 -XOR T3,T5,S0 -SH T1,01CA (SP) -LBU S0,01CB (SP) -XOR T8,T0,T6 -ANDI T7,T8,0080 -OR T4,T2,T9 -AND T2,T7,T3 -SRA T9,T2,0x5 -SLTIU T6,S0,0001 -SLL T1,T6,0x6 -OR T0,T4,T9 -OR S1,T0,T1 -ANDI T5,S1,00FF -OR S1,T5,R0 -SW T6,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S3,01C9 (SP) -//7F0D7DE4: 8A: ADC A,D 4 -LW T7,028C (SP) -ANDI T2,S4,00FF -ADDU T4,S0,T2 -ANDI T9,S1,0001 -ADDU T0,T4,T9 -ADDIU T3,T7,0004 -SW T3,028C (SP) ;cycles+=4 -ANDI T3,S0,000F -ANDI T4,T2,000F -ADDU T9,T3,T4 -ANDI T8,T0,00A8 -SRA T5,T0,0x8 -ANDI T6,S1,0001 -ADDU T1,T9,T6 -OR T7,T8,T5 -ADDIU AT,R0,000F -SLT T8,AT,T1 -SLL T5,T8,0x4 -OR T1,T0,R0 -NOR T4,S0,R0 -XOR T8,T1,S0 -SH T0,01C6 (SP) -LBU S0,01C7 (SP) -XOR T9,T4,T2 -ANDI T6,T9,0080 -OR T3,T7,T5 -AND T7,T6,T8 -SRA T5,T7,0x5 -SLTIU T2,S0,0001 -SLL T0,T2,0x6 -OR T4,T3,T5 -OR S1,T4,T0 -ANDI T1,S1,00FF -OR S1,T1,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S4,01C5 (SP) -//7F0D7E78: 8B: ADC A,E 4 -LW T6,028C (SP) -ANDI T7,S5,00FF -ADDU T3,S0,T7 -ANDI T5,S1,0001 -ADDU T4,T3,T5 -ADDIU T8,T6,0004 -SW T8,028C (SP) ;cycles+=4 -ANDI T8,S0,000F -ANDI T3,T7,000F -ADDU T5,T8,T3 -ANDI T9,T4,00A8 -SRA T1,T4,0x8 -ANDI T2,S1,0001 -ADDU T0,T5,T2 -OR T6,T9,T1 -ADDIU AT,R0,000F -SLT T9,AT,T0 -SLL T1,T9,0x4 -OR T0,T4,R0 -NOR T3,S0,R0 -XOR T9,T0,S0 -SH T4,01C2 (SP) -LBU S0,01C3 (SP) -XOR T5,T3,T7 -ANDI T2,T5,0080 -OR T8,T6,T1 -AND T6,T2,T9 -SRA T1,T6,0x5 -SLTIU T7,S0,0001 -SLL T4,T7,0x6 -OR T3,T8,T1 -OR S1,T3,T4 -ANDI T0,S1,00FF -OR S1,T0,R0 -SW T7,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S5,01C1 (SP) -//7F0D7F0C: 8C: ADC A,H 4 -LW T2,028C (SP) -LBU T6,0287 (SP) -LBU T8,0287 (SP) -ADDIU T9,T2,0004 -BNE T6,R0,7F0D7F2C -SW T9,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D7F58 -SB S6,01BD (SP) -//7F0D7F2C: -ADDIU AT,R0,0001 -BNE T8,AT,7F0D7F48 -LHU T7,0294 (SP) -LHU T1,0296 (SP) -SRA T3,T1,0x8 -BEQ R0,R0,7F0D7F50 -SW T3,0048 (SP) -//7F0D7F48: -SRA T5,T7,0x8 -SW T5,0048 (SP) -LW T4,0048 (SP) -SB T4,01BD (SP) -LBU T0,01BD (SP) -ANDI T9,S1,0001 -ANDI T4,S0,000F -ADDU T2,S0,T0 -ADDU T6,T2,T9 -ANDI T2,T0,000F -ADDU T9,T4,T2 -ANDI T1,T6,00A8 -SRA T7,T6,0x8 -ANDI T8,S1,0001 -ADDU T3,T9,T8 -OR T5,T1,T7 -ADDIU AT,R0,000F -SLT T1,AT,T3 -SLL T7,T1,0x4 -OR T3,T6,R0 -NOR T2,S0,R0 -XOR T1,T3,S0 -SH T6,01BE (SP) -LBU S0,01BF (SP) -XOR T9,T2,T0 -ANDI T8,T9,0080 -OR T4,T5,T7 -AND T5,T8,T1 -SRA T7,T5,0x5 -SLTIU T0,S0,0001 -SLL T6,T0,0x6 -OR T2,T4,T7 -OR S1,T2,T6 -ANDI T3,S1,00FF -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0D7FDC: 8D: ADC A,L 4 -LW T8,028C (SP) -LBU T5,0287 (SP) -LBU T4,0287 (SP) -ADDIU T1,T8,0004 -BNE T5,R0,7F0D7FFC -SW T1,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D8028 -SB S7,01B9 (SP) -//7F0D7FFC: -ADDIU AT,R0,0001 -BNE T4,AT,7F0D8018 -LHU T0,0294 (SP) -LHU T7,0296 (SP) -ANDI T2,T7,00FF -BEQ R0,R0,7F0D8020 -SW T2,0048 (SP) -//7F0D8018: -ANDI T9,T0,00FF -SW T9,0048 (SP) -LW T6,0048 (SP) -SB T6,01B9 (SP) -LBU T3,01B9 (SP) -ANDI T1,S1,0001 -ANDI T6,S0,000F -ADDU T8,S0,T3 -ADDU T5,T8,T1 -ANDI T8,T3,000F -ADDU T1,T6,T8 -ANDI T7,T5,00A8 -SRA T0,T5,0x8 -ANDI T4,S1,0001 -ADDU T2,T1,T4 -OR T9,T7,T0 -ADDIU AT,R0,000F -SLT T7,AT,T2 -SLL T0,T7,0x4 -OR T2,T5,R0 -NOR T8,S0,R0 -XOR T7,T2,S0 -SH T5,01BA (SP) -LBU S0,01BB (SP) -XOR T1,T8,T3 -ANDI T4,T1,0080 -OR T6,T9,T0 -AND T9,T4,T7 -SRA T0,T9,0x5 -SLTIU T3,S0,0001 -SLL T5,T3,0x6 -OR T8,T6,T0 -OR S1,T8,T5 -ANDI T2,S1,00FF -OR S1,T2,R0 -BEQ R0,R0,7F0E27FC -SW T3,0048 (SP) -//7F0D80AC: 8E: ADC A,(HL) 7 -LW T4,028C (SP) -LBU T9,0287 (SP) -SLL T6,S6,0x8 -ADDIU T7,T4,0007 -BNE T9,R0,7F0D80D0 -SW T7,028C (SP) ;cycles+=7 -OR T0,T6,S7 -BEQ R0,R0,7F0D8124 -SH T0,01B6 (SP) -//7F0D80D0: -LW T8,028C (SP) -LBU T1,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T3,T8,0008 -BNE T1,AT,7F0D80F4 -SW T3,028C (SP) ;cycles+=8 -LHU T5,0296 (SP) -BEQ R0,R0,7F0D80FC -SW T5,0048 (SP) -//7F0D80F4: -LHU T2,0294 (SP) -SW T2,0048 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -LW T0,0048 (SP) -ADDU T9,T4,T7 -LB T6,0000 (T9) -ADDIU T3,T4,0001 -SH T3,0298 (SP) ;spec.PC+=1 -ADDU T8,T6,T0 -SH T8,01B6 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LHU T1,01B6 (SP) -ANDI T6,S1,0001 -ANDI T8,S1,0001 -ADDU T2,T1,T5 -LBU T7,0000 (T2) -ADDIU AT,R0,000F -ADDU T9,S0,T7 -ADDU T0,T9,T6 -ANDI T9,S0,000F -ANDI T2,T7,000F -ADDU T6,T9,T2 -ANDI T4,T0,00A8 -SRA T1,T0,0x8 -OR T5,T4,T1 -ADDU T3,T6,T8 -SLT T4,AT,T3 -SLL T1,T4,0x4 -OR T3,T0,R0 -NOR T2,S0,R0 -XOR T4,T3,S0 -SH T0,01B4 (SP) -LBU S0,01B5 (SP) -XOR T6,T2,T7 -ANDI T8,T6,0080 -OR T9,T5,T1 -AND T5,T8,T4 -SB T7,01B3 (SP) -SRA T1,T5,0x5 -SLTIU T7,S0,0001 -SLL T0,T7,0x6 -OR T2,T9,T1 -OR S1,T2,T0 -ANDI T3,S1,00FF -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -SW T7,0048 (SP) -//7F0D81BC: 8F: ADC A,A 4 -LW T8,028C (SP) -ANDI T5,S0,00FF -ADDU T9,S0,T5 -ANDI T1,S1,0001 -ADDU T2,T9,T1 -ADDIU T4,T8,0004 -SW T4,028C (SP) ;cycles+=4 -ANDI T4,S0,000F -ANDI T9,T5,000F -ADDU T1,T4,T9 -ANDI T6,T2,00A8 -SRA T3,T2,0x8 -ANDI T7,S1,0001 -ADDU T0,T1,T7 -OR T8,T6,T3 -ADDIU AT,R0,000F -SLT T6,AT,T0 -SLL T3,T6,0x4 -OR T0,T2,R0 -NOR T9,S0,R0 -XOR T6,T0,S0 -SH T2,01B0 (SP) -SB S0,01AF (SP) -LBU S0,01B1 (SP) -XOR T1,T9,T5 -ANDI T7,T1,0080 -OR T4,T8,T3 -AND T8,T7,T6 -SRA T3,T8,0x5 -SLTIU T5,S0,0001 -SLL T2,T5,0x6 -OR T9,T4,T3 -OR S1,T9,T2 -ANDI T0,S1,00FF -OR S1,T0,R0 -BEQ R0,R0,7F0E27FC -SW T5,0048 (SP) -//7F0D8250: 90: SUB B 4 -LW T7,028C (SP) -ANDI T8,S2,00FF -SUBU T4,S0,T8 -ADDIU T6,T7,0004 -ANDI T3,T4,01FF -SW T6,028C (SP) ;cycles+=4 -ANDI T6,T8,000F -ANDI T5,T3,00A8 -SRA T2,T3,0x8 -ANDI T7,S0,000F -SLT T4,T7,T6 -OR T0,T5,T2 -XOR T5,S0,T8 -SLL T9,T4,0x4 -XOR T6,T3,S0 -SH T3,01AC (SP) -LBU S0,01AD (SP) -ANDI T2,T5,0080 -AND T4,T2,T6 -OR T1,T0,T9 -SRA T0,T4,0x5 -OR S1,T1,T0 -SLTIU T5,S0,0001 -SLL T7,T5,0x6 -ORI T8,S1,0002 -OR S1,T8,T7 -ANDI T2,S1,00FF -OR S1,T2,R0 -SW T5,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S2,01AB (SP) -//7F0D82CC: 91: SUB C 4 -LW T6,028C (SP) -ANDI T1,S3,00FF -SUBU T0,S0,T1 -ADDIU T4,T6,0004 -ANDI T9,T0,01FF -SW T4,028C (SP) ;cycles+=4 -ANDI T4,T1,000F -ANDI T5,T9,00A8 -SRA T7,T9,0x8 -ANDI T6,S0,000F -SLT T0,T6,T4 -OR T2,T5,T7 -XOR T5,S0,T1 -SLL T8,T0,0x4 -XOR T4,T9,S0 -SH T9,01A8 (SP) -LBU S0,01A9 (SP) -ANDI T7,T5,0080 -AND T0,T7,T4 -OR T3,T2,T8 -SRA T2,T0,0x5 -OR S1,T3,T2 -SLTIU T5,S0,0001 -SLL T6,T5,0x6 -ORI T1,S1,0002 -OR S1,T1,T6 -ANDI T7,S1,00FF -OR S1,T7,R0 -SW T5,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S3,01A7 (SP) -//7F0D8348: 92: SUB D 4 -LW T4,028C (SP) -ANDI T3,S4,00FF -SUBU T2,S0,T3 -ADDIU T0,T4,0004 -ANDI T8,T2,01FF -SW T0,028C (SP) ;cycles+=4 -ANDI T0,T3,000F -ANDI T5,T8,00A8 -SRA T6,T8,0x8 -ANDI T4,S0,000F -SLT T2,T4,T0 -OR T7,T5,T6 -XOR T5,S0,T3 -SLL T1,T2,0x4 -XOR T0,T8,S0 -SH T8,01A4 (SP) -LBU S0,01A5 (SP) -ANDI T6,T5,0080 -AND T2,T6,T0 -OR T9,T7,T1 -SRA T7,T2,0x5 -OR S1,T9,T7 -SLTIU T5,S0,0001 -SLL T4,T5,0x6 -ORI T3,S1,0002 -OR S1,T3,T4 -ANDI T6,S1,00FF -OR S1,T6,R0 -SW T5,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S4,01A3 (SP) -//7F0D83C4: 93: SUB E 4 -LW T0,028C (SP) -ANDI T9,S5,00FF -SUBU T7,S0,T9 -ADDIU T2,T0,0004 -ANDI T1,T7,01FF -SW T2,028C (SP) ;cycles+=4 -ANDI T2,T9,000F -ANDI T5,T1,00A8 -SRA T4,T1,0x8 -ANDI T0,S0,000F -SLT T7,T0,T2 -OR T6,T5,T4 -XOR T5,S0,T9 -SLL T3,T7,0x4 -XOR T2,T1,S0 -SH T1,01A0 (SP) -LBU S0,01A1 (SP) -ANDI T4,T5,0080 -AND T7,T4,T2 -OR T8,T6,T3 -SRA T6,T7,0x5 -OR S1,T8,T6 -SLTIU T5,S0,0001 -SLL T0,T5,0x6 -ORI T9,S1,0002 -OR S1,T9,T0 -ANDI T4,S1,00FF -OR S1,T4,R0 -SW T5,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S5,019F (SP) -//7F0D8440: 94: SUB H 4 -LW T2,028C (SP) -LBU T8,0287 (SP) -LBU T6,0287 (SP) -ADDIU T7,T2,0004 -BNE T8,R0,7F0D8460 -SW T7,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D848C -SB S6,019B (SP) -//7F0D8460: -ADDIU AT,R0,0001 -BNE T6,AT,7F0D847C -LHU T5,0294 (SP) -LHU T3,0296 (SP) -SRA T9,T3,0x8 -BEQ R0,R0,7F0D8484 -SW T9,0048 (SP) -//7F0D847C: -SRA T1,T5,0x8 -SW T1,0048 (SP) -LW T0,0048 (SP) -SB T0,019B (SP) -LBU T4,019B (SP) -ANDI T1,S0,000F -SUBU T2,S0,T4 -ANDI T7,T2,01FF -ANDI T6,T7,00A8 -SRA T9,T7,0x8 -ANDI T0,T4,000F -SLT T2,T1,T0 -OR T5,T6,T9 -XOR T6,S0,T4 -SLL T8,T2,0x4 -XOR T0,T7,S0 -SH T7,019C (SP) -LBU S0,019D (SP) -ANDI T9,T6,0080 -AND T2,T9,T0 -OR T3,T5,T8 -SRA T5,T2,0x5 -OR S1,T3,T5 -SLTIU T6,S0,0001 -SLL T1,T6,0x6 -ORI T4,S1,0002 -OR S1,T4,T1 -ANDI T9,S1,00FF -OR S1,T9,R0 -BEQ R0,R0,7F0E27FC -SW T6,0048 (SP) -//7F0D84F8: 95: SUB L 4 -LW T0,028C (SP) -LBU T3,0287 (SP) -LBU T5,0287 (SP) -ADDIU T2,T0,0004 -BNE T3,R0,7F0D8518 -SW T2,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D8544 -SB S7,0197 (SP) -//7F0D8518: -ADDIU AT,R0,0001 -BNE T5,AT,7F0D8534 -LHU T6,0294 (SP) -LHU T8,0296 (SP) -ANDI T4,T8,00FF -BEQ R0,R0,7F0D853C -SW T4,0048 (SP) -//7F0D8534: -ANDI T7,T6,00FF -SW T7,0048 (SP) -LW T1,0048 (SP) -SB T1,0197 (SP) -LBU T9,0197 (SP) -ANDI T7,S0,000F -SUBU T0,S0,T9 -ANDI T2,T0,01FF -ANDI T5,T2,00A8 -SRA T4,T2,0x8 -ANDI T1,T9,000F -SLT T0,T7,T1 -OR T6,T5,T4 -XOR T5,S0,T9 -SLL T3,T0,0x4 -XOR T1,T2,S0 -SH T2,0198 (SP) -LBU S0,0199 (SP) -ANDI T4,T5,0080 -AND T0,T4,T1 -OR T8,T6,T3 -SRA T6,T0,0x5 -OR S1,T8,T6 -SLTIU T5,S0,0001 -SLL T7,T5,0x6 -ORI T9,S1,0002 -OR S1,T9,T7 -ANDI T4,S1,00FF -OR S1,T4,R0 -BEQ R0,R0,7F0E27FC -SW T5,0048 (SP) -//7F0D85B0: 96: SUB (HL) 7 -LW T1,028C (SP) -LBU T8,0287 (SP) -SLL T6,S6,0x8 -ADDIU T0,T1,0007 -BNE T8,R0,7F0D85D4 -SW T0,028C (SP) ;cycles+=7 -OR T3,T6,S7 -BEQ R0,R0,7F0D8628 -SH T3,0194 (SP) -//7F0D85D4: -LW T9,028C (SP) -LBU T2,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T5,T9,0008 -BNE T2,AT,7F0D85F8 -SW T5,028C (SP) ;cycles+=8 -LHU T7,0296 (SP) -BEQ R0,R0,7F0D8600 -SW T7,0048 (SP) -//7F0D85F8: -LHU T4,0294 (SP) -SW T4,0048 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T1,0298 (SP) ;T1=spec.PC -LW T3,0048 (SP) -ADDU T8,T1,T0 -LB T6,0000 (T8) -ADDIU T5,T1,0001 -SH T5,0298 (SP) ;spec.PC+=1 -ADDU T9,T6,T3 -SH T9,0194 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T2,0194 (SP) -ADDU T4,T2,T7 -LBU T0,0000 (T4) -ANDI T4,S0,000F -SUBU T8,S0,T0 -ANDI T6,T8,01FF -ANDI T9,T6,00A8 -SRA T5,T6,0x8 -ANDI T7,T0,000F -SLT T8,T4,T7 -OR T2,T9,T5 -XOR T9,S0,T0 -SLL T3,T8,0x4 -XOR T7,T6,S0 -SH T6,0192 (SP) -LBU S0,0193 (SP) -ANDI T5,T9,0080 -AND T8,T5,T7 -OR T1,T2,T3 -SRA T2,T8,0x5 -OR S1,T1,T2 -SB T0,0191 (SP) -SLTIU T9,S0,0001 -SLL T4,T9,0x6 -ORI T0,S1,0002 -OR S1,T0,T4 -ANDI T5,S1,00FF -OR S1,T5,R0 -BEQ R0,R0,7F0E27FC -SW T9,0048 (SP) -//7F0D86A8: 97: SUB A 4 -LW T7,028C (SP) -ANDI T1,S0,00FF -SUBU T2,S0,T1 -ADDIU T8,T7,0004 -ANDI T3,T2,01FF -SW T8,028C (SP) ;cycles+=4 -ANDI T8,T1,000F -ANDI T9,T3,00A8 -SRA T4,T3,0x8 -ANDI T7,S0,000F -SLT T2,T7,T8 -OR T5,T9,T4 -XOR T9,S0,T1 -SLL T0,T2,0x4 -XOR T8,T3,S0 -SH T3,018E (SP) -SB S0,018D (SP) -LBU S0,018F (SP) -ANDI T4,T9,0080 -AND T2,T4,T8 -OR T6,T5,T0 -SRA T5,T2,0x5 -OR S1,T6,T5 -SLTIU T9,S0,0001 -SLL T7,T9,0x6 -ORI T1,S1,0002 -OR S1,T1,T7 -ANDI T4,S1,00FF -OR S1,T4,R0 -BEQ R0,R0,7F0E27FC -SW T9,0048 (SP) -//7F0D8724: 98: SBC A,B 4 -ANDI T6,S2,00FF -LW T8,028C (SP) -SUBU T5,S0,T6 -ANDI T0,S1,0001 -SUBU T1,T5,T0 -ANDI T9,T1,01FF -ANDI T5,T6,000F -ADDIU T2,T8,0004 -ADDU T1,T5,T0 -ANDI T3,S0,000F -SW T2,028C (SP) ;cycles+=4 -SLT T4,T3,T1 -SRA T8,T9,0x8 -ANDI T7,T9,00A8 -OR T2,T7,T8 -XOR T5,S0,T6 -SLL T7,T4,0x4 -XOR T1,T9,S0 -SH T9,018A (SP) -LBU S0,018B (SP) -ANDI T0,T5,0080 -AND T4,T0,T1 -OR T8,T2,T7 -SRA T2,T4,0x5 -OR S1,T8,T2 -SLTIU T5,S0,0001 -SLL T3,T5,0x6 -ORI T6,S1,0002 -OR S1,T6,T3 -ANDI T0,S1,00FF -OR S1,T0,R0 -SW T5,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S2,0189 (SP) -//7F0D87AC: 99: SBC A,C 4 -ANDI T8,S3,00FF -LW T1,028C (SP) -SUBU T2,S0,T8 -ANDI T7,S1,0001 -SUBU T6,T2,T7 -ANDI T5,T6,01FF -ANDI T2,T8,000F -ADDIU T4,T1,0004 -ADDU T6,T2,T7 -ANDI T9,S0,000F -SW T4,028C (SP) ;cycles+=4 -SLT T0,T9,T6 -SRA T1,T5,0x8 -ANDI T3,T5,00A8 -OR T4,T3,T1 -XOR T2,S0,T8 -SLL T3,T0,0x4 -XOR T6,T5,S0 -SH T5,0186 (SP) -LBU S0,0187 (SP) -ANDI T7,T2,0080 -AND T0,T7,T6 -OR T1,T4,T3 -SRA T4,T0,0x5 -OR S1,T1,T4 -SLTIU T2,S0,0001 -SLL T9,T2,0x6 -ORI T8,S1,0002 -OR S1,T8,T9 -ANDI T7,S1,00FF -OR S1,T7,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S3,0185 (SP) -//7F0D8834: 9A: SBC A,D 4 -ANDI T1,S4,00FF -LW T6,028C (SP) -SUBU T4,S0,T1 -ANDI T3,S1,0001 -SUBU T8,T4,T3 -ANDI T2,T8,01FF -ANDI T4,T1,000F -ADDIU T0,T6,0004 -ADDU T8,T4,T3 -ANDI T5,S0,000F -SW T0,028C (SP) ;cycles+=4 -SLT T7,T5,T8 -SRA T6,T2,0x8 -ANDI T9,T2,00A8 -OR T0,T9,T6 -XOR T4,S0,T1 -SLL T9,T7,0x4 -XOR T8,T2,S0 -SH T2,0182 (SP) -LBU S0,0183 (SP) -ANDI T3,T4,0080 -AND T7,T3,T8 -OR T6,T0,T9 -SRA T0,T7,0x5 -OR S1,T6,T0 -SLTIU T4,S0,0001 -SLL T5,T4,0x6 -ORI T1,S1,0002 -OR S1,T1,T5 -ANDI T3,S1,00FF -OR S1,T3,R0 -SW T4,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S4,0181 (SP) -//7F0D88BC: 9B: SBC A,E 4 -ANDI T6,S5,00FF -LW T8,028C (SP) -SUBU T0,S0,T6 -ANDI T9,S1,0001 -SUBU T1,T0,T9 -ANDI T4,T1,01FF -ANDI T0,T6,000F -ADDIU T7,T8,0004 -ADDU T1,T0,T9 -ANDI T2,S0,000F -SW T7,028C (SP) ;cycles+=4 -SLT T3,T2,T1 -SRA T8,T4,0x8 -ANDI T5,T4,00A8 -OR T7,T5,T8 -XOR T0,S0,T6 -SLL T5,T3,0x4 -XOR T1,T4,S0 -SH T4,017E (SP) -LBU S0,017F (SP) -ANDI T9,T0,0080 -AND T3,T9,T1 -OR T8,T7,T5 -SRA T7,T3,0x5 -OR S1,T8,T7 -SLTIU T0,S0,0001 -SLL T2,T0,0x6 -ORI T6,S1,0002 -OR S1,T6,T2 -ANDI T9,S1,00FF -OR S1,T9,R0 -SW T0,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S5,017D (SP) -//7F0D8944: 9C: SBC A,H 4 -LW T1,028C (SP) -LBU T8,0287 (SP) -LBU T7,0287 (SP) -ADDIU T3,T1,0004 -BNE T8,R0,7F0D8964 -SW T3,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D8990 -SB S6,0179 (SP) -//7F0D8964: -ADDIU AT,R0,0001 -BNE T7,AT,7F0D8980 -LHU T0,0294 (SP) -LHU T5,0296 (SP) -SRA T6,T5,0x8 -BEQ R0,R0,7F0D8988 -SW T6,0048 (SP) -//7F0D8980: -SRA T4,T0,0x8 -SW T4,0048 (SP) -LW T2,0048 (SP) -SB T2,0179 (SP) -LBU T9,0179 (SP) -ANDI T3,S1,0001 -ANDI T5,S0,000F -SUBU T1,S0,T9 -SUBU T8,T1,T3 -ANDI T7,T8,01FF -ANDI T1,T9,000F -ADDU T8,T1,T3 -SLT T0,T5,T8 -ANDI T6,T7,00A8 -SRA T4,T7,0x8 -OR T2,T6,T4 -XOR T1,S0,T9 -SLL T6,T0,0x4 -XOR T8,T7,S0 -SH T7,017A (SP) -LBU S0,017B (SP) -ANDI T3,T1,0080 -AND T0,T3,T8 -OR T4,T2,T6 -SRA T2,T0,0x5 -OR S1,T4,T2 -SLTIU T1,S0,0001 -SLL T5,T1,0x6 -ORI T9,S1,0002 -OR S1,T9,T5 -ANDI T3,S1,00FF -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -SW T1,0048 (SP) -//7F0D8A08: 9D: SBC A,L 4 -LW T8,028C (SP) -LBU T4,0287 (SP) -LBU T2,0287 (SP) -ADDIU T0,T8,0004 -BNE T4,R0,7F0D8A28 -SW T0,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D8A54 -SB S7,0175 (SP) -//7F0D8A28: -ADDIU AT,R0,0001 -BNE T2,AT,7F0D8A44 -LHU T1,0294 (SP) -LHU T6,0296 (SP) -ANDI T9,T6,00FF -BEQ R0,R0,7F0D8A4C -SW T9,0048 (SP) -//7F0D8A44: -ANDI T7,T1,00FF -SW T7,0048 (SP) -LW T5,0048 (SP) -SB T5,0175 (SP) -LBU T3,0175 (SP) -ANDI T0,S1,0001 -ANDI T6,S0,000F -SUBU T8,S0,T3 -SUBU T4,T8,T0 -ANDI T2,T4,01FF -ANDI T8,T3,000F -ADDU T4,T8,T0 -SLT T1,T6,T4 -ANDI T9,T2,00A8 -SRA T7,T2,0x8 -OR T5,T9,T7 -XOR T8,S0,T3 -SLL T9,T1,0x4 -XOR T4,T2,S0 -SH T2,0176 (SP) -LBU S0,0177 (SP) -ANDI T0,T8,0080 -AND T1,T0,T4 -OR T7,T5,T9 -SRA T5,T1,0x5 -OR S1,T7,T5 -SLTIU T8,S0,0001 -SLL T6,T8,0x6 -ORI T3,S1,0002 -OR S1,T3,T6 -ANDI T0,S1,00FF -OR S1,T0,R0 -BEQ R0,R0,7F0E27FC -SW T8,0048 (SP) -//7F0D8ACC: 9E: SBC A,(HL) 7 -LW T4,028C (SP) -LBU T7,0287 (SP) -SLL T5,S6,0x8 -ADDIU T1,T4,0007 -BNE T7,R0,7F0D8AF0 -SW T1,028C (SP) ;cycles+=7 -OR T9,T5,S7 -BEQ R0,R0,7F0D8B44 -SH T9,0172 (SP) -//7F0D8AF0: -LW T3,028C (SP) -LBU T2,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T8,T3,0008 -BNE T2,AT,7F0D8B14 -SW T8,028C (SP) ;cycles+=8 -LHU T6,0296 (SP) -BEQ R0,R0,7F0D8B1C -SW T6,0048 (SP) -//7F0D8B14: -LHU T0,0294 (SP) -SW T0,0048 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -LW T9,0048 (SP) -ADDU T7,T4,T1 -LB T5,0000 (T7) -ADDIU T8,T4,0001 -SH T8,0298 (SP) ;spec.PC+=1 -ADDU T3,T5,T9 -SH T3,0172 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T2,0172 (SP) -ANDI T5,S1,0001 -ANDI T4,S0,000F -ADDU T0,T2,T6 -LBU T1,0000 (T0) -SUBU T7,S0,T1 -SUBU T9,T7,T5 -ANDI T3,T9,01FF -ANDI T7,T1,000F -ADDU T9,T7,T5 -SLT T2,T4,T9 -ANDI T8,T3,00A8 -SRA T6,T3,0x8 -OR T0,T8,T6 -XOR T7,S0,T1 -SLL T8,T2,0x4 -XOR T9,T3,S0 -SH T3,0170 (SP) -LBU S0,0171 (SP) -ANDI T5,T7,0080 -AND T2,T5,T9 -OR T6,T0,T8 -SRA T0,T2,0x5 -OR S1,T6,T0 -SB T1,016F (SP) -SLTIU T7,S0,0001 -SLL T4,T7,0x6 -ORI T1,S1,0002 -OR S1,T1,T4 -ANDI T5,S1,00FF -OR S1,T5,R0 -BEQ R0,R0,7F0E27FC -SW T7,0048 (SP) -//7F0D8BD0: 9F: SBC A,A 4 -ANDI T6,S0,00FF -LW T9,028C (SP) -SUBU T0,S0,T6 -ANDI T8,S1,0001 -SUBU T1,T0,T8 -ANDI T7,T1,01FF -ANDI T0,T6,000F -ADDIU T2,T9,0004 -ADDU T1,T0,T8 -ANDI T3,S0,000F -SW T2,028C (SP) ;cycles+=4 -SLT T5,T3,T1 -SRA T9,T7,0x8 -ANDI T4,T7,00A8 -OR T2,T4,T9 -XOR T0,S0,T6 -SLL T4,T5,0x4 -XOR T1,T7,S0 -SH T7,016C (SP) -SB S0,016B (SP) -LBU S0,016D (SP) -ANDI T8,T0,0080 -AND T5,T8,T1 -OR T9,T2,T4 -SRA T2,T5,0x5 -OR S1,T9,T2 -SLTIU T0,S0,0001 -SLL T3,T0,0x6 -ORI T6,S1,0002 -OR S1,T6,T3 -ANDI T8,S1,00FF -OR S1,T8,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0D8C58: A0: AND B 4 -LW T1,028C (SP) -LUI T8,8009 -LW T8,E334 (T8) -AND S0,S0,S2 -ANDI T9,S0,00FF -ADDIU T5,T1,0004 -SLTIU T2,T9,0001 -SW T5,028C (SP) ;cycles+=4 -SW T2,0048 (SP) -ADDU T1,T9,T8 -LBU T5,0000 (T1) -SLL T0,T2,0x6 -ANDI T4,T9,00A8 -OR T7,T4,T0 -ORI T3,T7,0010 -OR S0,T9,R0 -OR S1,T5,T3 -ANDI T9,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T9,R0 -//7F0D8CA8: A1: AND C 4 -LW T2,028C (SP) -LUI T9,8009 -LW T9,E334 (T9) -AND S0,S0,S3 -ANDI T4,S0,00FF -ADDIU T6,T2,0004 -SLTIU T0,T4,0001 -SW T6,028C (SP) ;cycles+=4 -SW T0,0048 (SP) -ADDU T2,T4,T9 -LBU T6,0000 (T2) -SLL T1,T0,0x6 -ANDI T7,T4,00A8 -OR T5,T7,T1 -ORI T3,T5,0010 -OR S0,T4,R0 -OR S1,T6,T3 -ANDI T4,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T4,R0 -//7F0D8CF8: A2: AND D 4 -LW T0,028C (SP) -LUI T4,8009 -LW T4,E334 (T4) -AND S0,S0,S4 -ANDI T7,S0,00FF -ADDIU T8,T0,0004 -SLTIU T1,T7,0001 -SW T8,028C (SP) ;cycles+=4 -SW T1,0048 (SP) -ADDU T0,T7,T4 -LBU T8,0000 (T0) -SLL T2,T1,0x6 -ANDI T5,T7,00A8 -OR T6,T5,T2 -ORI T3,T6,0010 -OR S0,T7,R0 -OR S1,T8,T3 -ANDI T7,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0D8D48: A3: AND E 4 -LW T1,028C (SP) -LUI T7,8009 -LW T7,E334 (T7) -AND S0,S0,S5 -ANDI T5,S0,00FF -ADDIU T9,T1,0004 -SLTIU T2,T5,0001 -SW T9,028C (SP) ;cycles+=4 -SW T2,0048 (SP) -ADDU T1,T5,T7 -LBU T9,0000 (T1) -SLL T0,T2,0x6 -ANDI T6,T5,00A8 -OR T8,T6,T0 -ORI T3,T8,0010 -OR S0,T5,R0 -OR S1,T9,T3 -ANDI T5,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T5,R0 -//7F0D8D98: A4: AND H 4 -LW T2,028C (SP) -LBU T6,0287 (SP) -LBU T0,0287 (SP) -ADDIU T4,T2,0004 -BNE T6,R0,7F0D8DB8 -SW T4,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D8DE4 -SW S6,0048 (SP) -//7F0D8DB8: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D8DD4 -LHU T1,0294 (SP) -LHU T8,0296 (SP) -SRA T7,T8,0x8 -BEQ R0,R0,7F0D8DDC -SW T7,0044 (SP) -//7F0D8DD4: -SRA T9,T1,0x8 -SW T9,0044 (SP) -LW T3,0044 (SP) -SW T3,0048 (SP) -LW T5,0048 (SP) -LUI T9,8009 -LW T9,E334 (T9) -AND S0,S0,T5 -ANDI T2,S0,00FF -SLTIU T4,T2,0001 -SW T4,0048 (SP) -ADDU T3,T2,T9 -LBU T5,0000 (T3) -SLL T8,T4,0x6 -ANDI T6,T2,00A8 -OR T7,T6,T8 -ORI T1,T7,0010 -OR S0,T2,R0 -OR S1,T5,T1 -ANDI T2,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T2,R0 -//7F0D8E2C: A5: AND L 4 -LW T4,028C (SP) -LBU T6,0287 (SP) -LBU T8,0287 (SP) -ADDIU T0,T4,0004 -BNE T6,R0,7F0D8E4C -SW T0,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D8E78 -SW S7,0048 (SP) -//7F0D8E4C: -ADDIU AT,R0,0001 -BNE T8,AT,7F0D8E68 -LHU T3,0294 (SP) -LHU T7,0296 (SP) -ANDI T9,T7,00FF -BEQ R0,R0,7F0D8E70 -SW T9,0044 (SP) -//7F0D8E68: -ANDI T5,T3,00FF -SW T5,0044 (SP) -LW T1,0044 (SP) -SW T1,0048 (SP) -LW T2,0048 (SP) -LUI T5,8009 -LW T5,E334 (T5) -AND S0,S0,T2 -ANDI T4,S0,00FF -SLTIU T0,T4,0001 -SW T0,0048 (SP) -ADDU T1,T4,T5 -LBU T2,0000 (T1) -SLL T7,T0,0x6 -ANDI T6,T4,00A8 -OR T9,T6,T7 -ORI T3,T9,0010 -OR S0,T4,R0 -OR S1,T2,T3 -ANDI T4,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T4,R0 -//7F0D8EC0: A6: AND (HL) 7 -LW T0,028C (SP) -LBU T6,0287 (SP) -SLL T7,S6,0x8 -ADDIU T8,T0,0007 -BNE T6,R0,7F0D8EE4 -SW T8,028C (SP) ;cycles+=7 -OR T9,T7,S7 -BEQ R0,R0,7F0D8F38 -SH T9,0168 (SP) -//7F0D8EE4: -LW T5,028C (SP) -LBU T2,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T1,T5,0008 -BNE T2,AT,7F0D8F08 -SW T1,028C (SP) ;cycles+=8 -LHU T3,0296 (SP) -BEQ R0,R0,7F0D8F10 -SW T3,0048 (SP) -//7F0D8F08: -LHU T4,0294 (SP) -SW T4,0048 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LHU T0,0298 (SP) ;T0=spec.PC -LW T9,0048 (SP) -ADDU T6,T0,T8 -LB T7,0000 (T6) -ADDIU T1,T0,0001 -SH T1,0298 (SP) ;spec.PC+=1 -ADDU T5,T7,T9 -SH T5,0168 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T3,0168 (SP) -ADDU T4,T2,T3 -LBU T8,0000 (T4) -LUI T3,8009 -LW T3,E334 (T3) -AND S0,S0,T8 -ANDI T6,S0,00FF -SLTIU T7,T6,0001 -SW T7,0048 (SP) -ADDU T4,T6,T3 -LBU T8,0000 (T4) -SLL T0,T7,0x6 -ANDI T9,T6,00A8 -OR T1,T9,T0 -ORI T2,T1,0010 -OR S0,T6,R0 -OR S1,T8,T2 -ANDI T6,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T6,R0 -//7F0D8F90: A7: AND A 4 -LW T7,028C (SP) -LUI T6,8009 -LW T6,E334 (T6) -AND S0,S0,S0 -ANDI T9,S0,00FF -ADDIU T5,T7,0004 -SLTIU T0,T9,0001 -SW T5,028C (SP) ;cycles+=4 -SW T0,0048 (SP) -ADDU T7,T9,T6 -LBU T5,0000 (T7) -SLL T4,T0,0x6 -ANDI T1,T9,00A8 -OR T8,T1,T4 -ORI T2,T8,0010 -OR S0,T9,R0 -OR S1,T5,T2 -ANDI T9,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T9,R0 -//7F0D8FE0: A8: XOR B 4 -LW T0,028C (SP) -LUI T2,8009 -LW T2,E334 (T2) -XOR S0,S0,S2 -ANDI T1,S0,00FF -SLTIU T4,T1,0001 -ADDIU T3,T0,0004 -SW T3,028C (SP) ;cycles+=4 -SW T4,0048 (SP) -ADDU T9,T1,T2 -LBU T0,0000 (T9) -SLL T7,T4,0x6 -ANDI T8,T1,00A8 -OR T5,T8,T7 -OR S1,T0,T5 -ANDI T3,S1,00FF -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -OR S0,T1,R0 -//7F0D902C: A9: XOR C 4 -LW T1,028C (SP) -LUI T5,8009 -LW T5,E334 (T5) -XOR S0,S0,S3 -ANDI T6,S0,00FF -SLTIU T8,T6,0001 -ADDIU T4,T1,0004 -SW T4,028C (SP) ;cycles+=4 -SW T8,0048 (SP) -ADDU T3,T6,T5 -LBU T1,0000 (T3) -SLL T9,T8,0x6 -ANDI T7,T6,00A8 -OR T0,T7,T9 -OR S1,T1,T0 -ANDI T4,S1,00FF -OR S1,T4,R0 -BEQ R0,R0,7F0E27FC -OR S0,T6,R0 -//7F0D9078: AA: XOR D 4 -LW T6,028C (SP) -LUI T0,8009 -LW T0,E334 (T0) -XOR S0,S0,S4 -ANDI T2,S0,00FF -SLTIU T7,T2,0001 -ADDIU T8,T6,0004 -SW T8,028C (SP) ;cycles+=4 -SW T7,0048 (SP) -ADDU T4,T2,T0 -LBU T6,0000 (T4) -SLL T3,T7,0x6 -ANDI T9,T2,00A8 -OR T1,T9,T3 -OR S1,T6,T1 -ANDI T8,S1,00FF -OR S1,T8,R0 -BEQ R0,R0,7F0E27FC -OR S0,T2,R0 -//7F0D90C4: AB: XOR E 4 -LW T2,028C (SP) -LUI T1,8009 -LW T1,E334 (T1) -XOR S0,S0,S5 -ANDI T5,S0,00FF -SLTIU T9,T5,0001 -ADDIU T7,T2,0004 -SW T7,028C (SP) ;cycles+=4 -SW T9,0048 (SP) -ADDU T8,T5,T1 -LBU T2,0000 (T8) -SLL T4,T9,0x6 -ANDI T3,T5,00A8 -OR T6,T3,T4 -OR S1,T2,T6 -ANDI T7,S1,00FF -OR S1,T7,R0 -BEQ R0,R0,7F0E27FC -OR S0,T5,R0 -//7F0D9110: AC: XOR H 4 -LW T5,028C (SP) -LBU T0,0287 (SP) -LBU T3,0287 (SP) -ADDIU T9,T5,0004 -BNE T0,R0,7F0D9130 -SW T9,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D915C -SW S6,0048 (SP) -//7F0D9130: -ADDIU AT,R0,0001 -BNE T3,AT,7F0D914C -LHU T8,0294 (SP) -LHU T4,0296 (SP) -SRA T1,T4,0x8 -BEQ R0,R0,7F0D9154 -SW T1,0044 (SP) -//7F0D914C: -SRA T2,T8,0x8 -SW T2,0044 (SP) -LW T6,0044 (SP) -SW T6,0048 (SP) -LW T7,0048 (SP) -LUI T8,8009 -LW T8,E334 (T8) -XOR S0,S0,T7 -ANDI T5,S0,00FF -SLTIU T9,T5,0001 -SW T9,0048 (SP) -ADDU T2,T5,T8 -LBU T6,0000 (T2) -SLL T4,T9,0x6 -ANDI T0,T5,00A8 -OR T1,T0,T4 -OR S1,T6,T1 -ANDI T7,S1,00FF -OR S1,T7,R0 -BEQ R0,R0,7F0E27FC -OR S0,T5,R0 -//7F0D91A0: AD: XOR L 4 -LW T5,028C (SP) -LBU T3,0287 (SP) -LBU T0,0287 (SP) -ADDIU T9,T5,0004 -BNE T3,R0,7F0D91C0 -SW T9,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D91EC -SW S7,0048 (SP) -//7F0D91C0: -ADDIU AT,R0,0001 -BNE T0,AT,7F0D91DC -LHU T2,0294 (SP) -LHU T4,0296 (SP) -ANDI T8,T4,00FF -BEQ R0,R0,7F0D91E4 -SW T8,0044 (SP) -//7F0D91DC: -ANDI T6,T2,00FF -SW T6,0044 (SP) -LW T1,0044 (SP) -SW T1,0048 (SP) -LW T7,0048 (SP) -LUI T2,8009 -LW T2,E334 (T2) -XOR S0,S0,T7 -ANDI T5,S0,00FF -SLTIU T9,T5,0001 -SW T9,0048 (SP) -ADDU T6,T5,T2 -LBU T1,0000 (T6) -SLL T4,T9,0x6 -ANDI T3,T5,00A8 -OR T8,T3,T4 -OR S1,T1,T8 -ANDI T7,S1,00FF -OR S1,T7,R0 -BEQ R0,R0,7F0E27FC -OR S0,T5,R0 -//7F0D9230: AE: XOR (HL) 7 -LW T5,028C (SP) -LBU T0,0287 (SP) -SLL T3,S6,0x8 -ADDIU T9,T5,0007 -BNE T0,R0,7F0D9254 -SW T9,028C (SP) ;cycles+=7 -OR T4,T3,S7 -BEQ R0,R0,7F0D92A8 -SH T4,0166 (SP) -//7F0D9254: -LW T2,028C (SP) -LBU T1,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T6,T2,0008 -BNE T1,AT,7F0D9278 -SW T6,028C (SP) ;cycles+=8 -LHU T8,0296 (SP) -BEQ R0,R0,7F0D9280 -SW T8,0048 (SP) -//7F0D9278: -LHU T7,0294 (SP) -SW T7,0048 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T5,0298 (SP) ;T5=spec.PC -LW T4,0048 (SP) -ADDU T0,T5,T9 -LB T3,0000 (T0) -ADDIU T6,T5,0001 -SH T6,0298 (SP) ;spec.PC+=1 -ADDU T2,T3,T4 -SH T2,0166 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T8,0166 (SP) -ADDU T7,T1,T8 -LBU T9,0000 (T7) -LUI T1,8009 -LW T1,E334 (T1) -XOR S0,S0,T9 -ANDI T0,S0,00FF -SLTIU T3,T0,0001 -SW T3,0048 (SP) -ADDU T8,T0,T1 -LBU T7,0000 (T8) -SLL T5,T3,0x6 -ANDI T4,T0,00A8 -OR T6,T4,T5 -OR S1,T7,T6 -ANDI T9,S1,00FF -OR S1,T9,R0 -BEQ R0,R0,7F0E27FC -OR S0,T0,R0 -//7F0D92FC: AF: XOR A 4 -LW T0,028C (SP) -LUI T6,8009 -LW T6,E334 (T6) -XOR S0,S0,S0 -ANDI T2,S0,00FF -SLTIU T4,T2,0001 -ADDIU T3,T0,0004 -SW T3,028C (SP) ;cycles+=4 -SW T4,0048 (SP) -ADDU T9,T2,T6 -LBU T0,0000 (T9) -SLL T8,T4,0x6 -ANDI T5,T2,00A8 -OR T7,T5,T8 -OR S1,T0,T7 -ANDI T3,S1,00FF -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -OR S0,T2,R0 -//7F0D9348: B0: OR B 4 -LW T2,028C (SP) -LUI T7,8009 -LW T7,E334 (T7) -OR S0,S0,S2 -ANDI T1,S0,00FF -SLTIU T5,T1,0001 -ADDIU T4,T2,0004 -SW T4,028C (SP) ;cycles+=4 -SW T5,0048 (SP) -ADDU T3,T1,T7 -LBU T2,0000 (T3) -SLL T9,T5,0x6 -ANDI T8,T1,00A8 -OR T0,T8,T9 -OR S1,T2,T0 -ANDI T4,S1,00FF -OR S1,T4,R0 -BEQ R0,R0,7F0E27FC -OR S0,T1,R0 -//7F0D9394: B1: OR C 4 -LW T1,028C (SP) -LUI T0,8009 -LW T0,E334 (T0) -OR S0,S0,S3 -ANDI T6,S0,00FF -SLTIU T8,T6,0001 -ADDIU T5,T1,0004 -SW T5,028C (SP) ;cycles+=4 -SW T8,0048 (SP) -ADDU T4,T6,T0 -LBU T1,0000 (T4) -SLL T3,T8,0x6 -ANDI T9,T6,00A8 -OR T2,T9,T3 -OR S1,T1,T2 -ANDI T5,S1,00FF -OR S1,T5,R0 -BEQ R0,R0,7F0E27FC -OR S0,T6,R0 -//7F0D93E0: B2: OR D 4 -LW T6,028C (SP) -LUI T2,8009 -LW T2,E334 (T2) -OR S0,S0,S4 -ANDI T7,S0,00FF -SLTIU T9,T7,0001 -ADDIU T8,T6,0004 -SW T8,028C (SP) ;cycles+=4 -SW T9,0048 (SP) -ADDU T5,T7,T2 -LBU T6,0000 (T5) -SLL T4,T9,0x6 -ANDI T3,T7,00A8 -OR T1,T3,T4 -OR S1,T6,T1 -ANDI T8,S1,00FF -OR S1,T8,R0 -BEQ R0,R0,7F0E27FC -OR S0,T7,R0 -//7F0D942C: B3: OR E 4 -LW T7,028C (SP) -LUI T1,8009 -LW T1,E334 (T1) -OR S0,S0,S5 -ANDI T0,S0,00FF -SLTIU T3,T0,0001 -ADDIU T9,T7,0004 -SW T9,028C (SP) ;cycles+=4 -SW T3,0048 (SP) -ADDU T8,T0,T1 -LBU T7,0000 (T8) -SLL T5,T3,0x6 -ANDI T4,T0,00A8 -OR T6,T4,T5 -OR S1,T7,T6 -ANDI T9,S1,00FF -OR S1,T9,R0 -BEQ R0,R0,7F0E27FC -OR S0,T0,R0 -//7F0D9478: B4: OR H 4 -LW T0,028C (SP) -LBU T2,0287 (SP) -LBU T4,0287 (SP) -ADDIU T3,T0,0004 -BNE T2,R0,7F0D9498 -SW T3,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D94C4 -SW S6,0048 (SP) -//7F0D9498: -ADDIU AT,R0,0001 -BNE T4,AT,7F0D94B4 -LHU T8,0294 (SP) -LHU T5,0296 (SP) -SRA T1,T5,0x8 -BEQ R0,R0,7F0D94BC -SW T1,0044 (SP) -//7F0D94B4: -SRA T7,T8,0x8 -SW T7,0044 (SP) -LW T6,0044 (SP) -SW T6,0048 (SP) -LW T9,0048 (SP) -LUI T8,8009 -LW T8,E334 (T8) -OR S0,S0,T9 -ANDI T0,S0,00FF -SLTIU T3,T0,0001 -SW T3,0048 (SP) -ADDU T7,T0,T8 -LBU T6,0000 (T7) -SLL T5,T3,0x6 -ANDI T2,T0,00A8 -OR T1,T2,T5 -OR S1,T6,T1 -ANDI T9,S1,00FF -OR S1,T9,R0 -BEQ R0,R0,7F0E27FC -OR S0,T0,R0 -//7F0D9508: B5: OR L 4 -LW T0,028C (SP) -LBU T4,0287 (SP) -LBU T2,0287 (SP) -ADDIU T3,T0,0004 -BNE T4,R0,7F0D9528 -SW T3,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D9554 -SW S7,0048 (SP) -//7F0D9528: -ADDIU AT,R0,0001 -BNE T2,AT,7F0D9544 -LHU T7,0294 (SP) -LHU T5,0296 (SP) -ANDI T8,T5,00FF -BEQ R0,R0,7F0D954C -SW T8,0044 (SP) -//7F0D9544: -ANDI T6,T7,00FF -SW T6,0044 (SP) -LW T1,0044 (SP) -SW T1,0048 (SP) -LW T9,0048 (SP) -LUI T7,8009 -LW T7,E334 (T7) -OR S0,S0,T9 -ANDI T0,S0,00FF -SLTIU T3,T0,0001 -SW T3,0048 (SP) -ADDU T6,T0,T7 -LBU T1,0000 (T6) -SLL T5,T3,0x6 -ANDI T4,T0,00A8 -OR T8,T4,T5 -OR S1,T1,T8 -ANDI T9,S1,00FF -OR S1,T9,R0 -BEQ R0,R0,7F0E27FC -OR S0,T0,R0 -//7F0D9598: B6: OR (HL) 7 -LW T0,028C (SP) -LBU T2,0287 (SP) -SLL T4,S6,0x8 -ADDIU T3,T0,0007 -BNE T2,R0,7F0D95BC -SW T3,028C (SP) ;cycles+=7 -OR T5,T4,S7 -BEQ R0,R0,7F0D9610 -SH T5,0164 (SP) -//7F0D95BC: -LW T7,028C (SP) -LBU T1,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T6,T7,0008 -BNE T1,AT,7F0D95E0 -SW T6,028C (SP) ;cycles+=8 -LHU T8,0296 (SP) -BEQ R0,R0,7F0D95E8 -SW T8,0048 (SP) -//7F0D95E0: -LHU T9,0294 (SP) -SW T9,0048 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T0,0298 (SP) ;T0=spec.PC -LW T5,0048 (SP) -ADDU T2,T0,T3 -LB T4,0000 (T2) -ADDIU T6,T0,0001 -SH T6,0298 (SP) ;spec.PC+=1 -ADDU T7,T4,T5 -SH T7,0164 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T8,0164 (SP) -ADDU T9,T1,T8 -LBU T3,0000 (T9) -LUI T1,8009 -LW T1,E334 (T1) -OR S0,S0,T3 -ANDI T2,S0,00FF -SLTIU T4,T2,0001 -SW T4,0048 (SP) -ADDU T8,T2,T1 -LBU T9,0000 (T8) -SLL T0,T4,0x6 -ANDI T5,T2,00A8 -OR T6,T5,T0 -OR S1,T9,T6 -ANDI T3,S1,00FF -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -OR S0,T2,R0 -//7F0D9664: B7: OR A 4 -LW T2,028C (SP) -LUI T6,8009 -LW T6,E334 (T6) -OR S0,S0,S0 -ANDI T7,S0,00FF -SLTIU T5,T7,0001 -ADDIU T4,T2,0004 -SW T4,028C (SP) ;cycles+=4 -SW T5,0048 (SP) -ADDU T3,T7,T6 -LBU T2,0000 (T3) -SLL T8,T5,0x6 -ANDI T0,T7,00A8 -OR T9,T0,T8 -OR S1,T2,T9 -ANDI T4,S1,00FF -OR S1,T4,R0 -BEQ R0,R0,7F0E27FC -OR S0,T7,R0 -//7F0D96B0: B8: CP B 4 -ANDI T1,S2,00FF -SUBU T0,S0,T1 -LW T7,028C (SP) -ANDI T8,T0,01FF -ANDI T6,T8,FFFF -SLTIU T3,T6,0001 -ANDI T6,T1,000F -ANDI T0,S0,000F -ADDIU T5,T7,0004 -SLT T2,T0,T6 -SW T5,028C (SP) ;cycles+=4 -SRA T7,T8,0x8 -ANDI T9,T8,00A8 -OR T5,T9,T7 -SLL T4,T2,0x4 -XOR T7,S0,T1 -OR T6,T8,R0 -XOR T2,T6,S0 -ANDI T0,T7,0080 -OR T9,T5,T4 -AND T5,T0,T2 -SRA T4,T5,0x5 -OR T1,T9,T4 -SH T8,0162 (SP) -SLL T8,T3,0x6 -ORI T7,T1,0002 -OR S1,T7,T8 -ANDI T6,S1,00FF -OR S1,T6,R0 -SW T3,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S2,0161 (SP) -//7F0D9730: B9: CP C 4 -ANDI T5,S3,00FF -SUBU T9,S0,T5 -LW T0,028C (SP) -ANDI T4,T9,01FF -ANDI T1,T4,FFFF -SLTIU T3,T1,0001 -ANDI T1,T5,000F -ANDI T9,S0,000F -ADDIU T2,T0,0004 -SLT T7,T9,T1 -SW T2,028C (SP) ;cycles+=4 -SRA T0,T4,0x8 -ANDI T8,T4,00A8 -OR T2,T8,T0 -SLL T6,T7,0x4 -XOR T0,S0,T5 -OR T1,T4,R0 -XOR T7,T1,S0 -ANDI T9,T0,0080 -OR T8,T2,T6 -AND T2,T9,T7 -SRA T6,T2,0x5 -OR T5,T8,T6 -SH T4,015E (SP) -SLL T4,T3,0x6 -ORI T0,T5,0002 -OR S1,T0,T4 -ANDI T1,S1,00FF -OR S1,T1,R0 -SW T3,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S3,015D (SP) -//7F0D97B0: BA: CP D 4 -ANDI T2,S4,00FF -SUBU T8,S0,T2 -LW T9,028C (SP) -ANDI T6,T8,01FF -ANDI T5,T6,FFFF -SLTIU T3,T5,0001 -ANDI T5,T2,000F -ANDI T8,S0,000F -ADDIU T7,T9,0004 -SLT T0,T8,T5 -SW T7,028C (SP) ;cycles+=4 -SRA T9,T6,0x8 -ANDI T4,T6,00A8 -OR T7,T4,T9 -SLL T1,T0,0x4 -XOR T9,S0,T2 -OR T5,T6,R0 -XOR T0,T5,S0 -ANDI T8,T9,0080 -OR T4,T7,T1 -AND T7,T8,T0 -SRA T1,T7,0x5 -OR T2,T4,T1 -SH T6,015A (SP) -SLL T6,T3,0x6 -ORI T9,T2,0002 -OR S1,T9,T6 -ANDI T5,S1,00FF -OR S1,T5,R0 -SW T3,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S4,0159 (SP) -//7F0D9830: BB: CP E 4 -ANDI T7,S5,00FF -SUBU T4,S0,T7 -LW T8,028C (SP) -ANDI T1,T4,01FF -ANDI T2,T1,FFFF -SLTIU T3,T2,0001 -ANDI T2,T7,000F -ANDI T4,S0,000F -ADDIU T0,T8,0004 -SLT T9,T4,T2 -SW T0,028C (SP) ;cycles+=4 -SRA T8,T1,0x8 -ANDI T6,T1,00A8 -OR T0,T6,T8 -SLL T5,T9,0x4 -XOR T8,S0,T7 -OR T2,T1,R0 -XOR T9,T2,S0 -ANDI T4,T8,0080 -OR T6,T0,T5 -AND T0,T4,T9 -SRA T5,T0,0x5 -OR T7,T6,T5 -SH T1,0156 (SP) -SLL T1,T3,0x6 -ORI T8,T7,0002 -OR S1,T8,T1 -ANDI T2,S1,00FF -OR S1,T2,R0 -SW T3,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S5,0155 (SP) -//7F0D98B0: BC: CP H 4 -LW T4,028C (SP) -LBU T0,0287 (SP) -LBU T6,0287 (SP) -ADDIU T9,T4,0004 -BNE T0,R0,7F0D98D0 -SW T9,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D98FC -SB S6,0151 (SP) -//7F0D98D0: -ADDIU AT,R0,0001 -BNE T6,AT,7F0D98EC -LHU T3,0294 (SP) -LHU T5,0296 (SP) -SRA T7,T5,0x8 -BEQ R0,R0,7F0D98F4 -SW T7,0048 (SP) -//7F0D98EC: -SRA T8,T3,0x8 -SW T8,0048 (SP) -LW T1,0048 (SP) -SB T1,0151 (SP) -LBU T2,0151 (SP) -SUBU T4,S0,T2 -ANDI T9,T4,01FF -ANDI T0,T9,FFFF -SLTIU T6,T0,0001 -ANDI T4,S0,000F -ANDI T0,T2,000F -SLT T5,T4,T0 -ANDI T7,T9,00A8 -SRA T8,T9,0x8 -OR T1,T7,T8 -SLL T3,T5,0x4 -OR T0,T9,R0 -XOR T8,S0,T2 -ANDI T4,T8,0080 -XOR T5,T0,S0 -OR T7,T1,T3 -AND T1,T4,T5 -SRA T3,T1,0x5 -OR T2,T7,T3 -SH T9,0152 (SP) -SLL T9,T6,0x6 -ORI T8,T2,0002 -OR S1,T8,T9 -ANDI T0,S1,00FF -OR S1,T0,R0 -BEQ R0,R0,7F0E27FC -SW T6,0048 (SP) -//7F0D996C: BD: CP L 4 -LW T4,028C (SP) -LBU T1,0287 (SP) -LBU T7,0287 (SP) -ADDIU T5,T4,0004 -BNE T1,R0,7F0D998C -SW T5,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0D99B8 -SB S7,014D (SP) -//7F0D998C: -ADDIU AT,R0,0001 -BNE T7,AT,7F0D99A8 -LHU T6,0294 (SP) -LHU T3,0296 (SP) -ANDI T2,T3,00FF -BEQ R0,R0,7F0D99B0 -SW T2,0048 (SP) -//7F0D99A8: -ANDI T8,T6,00FF -SW T8,0048 (SP) -LW T9,0048 (SP) -SB T9,014D (SP) -LBU T0,014D (SP) -SUBU T4,S0,T0 -ANDI T5,T4,01FF -ANDI T1,T5,FFFF -SLTIU T7,T1,0001 -ANDI T4,S0,000F -ANDI T1,T0,000F -SLT T3,T4,T1 -ANDI T2,T5,00A8 -SRA T8,T5,0x8 -OR T9,T2,T8 -SLL T6,T3,0x4 -OR T1,T5,R0 -XOR T8,S0,T0 -ANDI T4,T8,0080 -XOR T3,T1,S0 -OR T2,T9,T6 -AND T9,T4,T3 -SRA T6,T9,0x5 -OR T0,T2,T6 -SH T5,014E (SP) -SLL T5,T7,0x6 -ORI T8,T0,0002 -OR S1,T8,T5 -ANDI T1,S1,00FF -OR S1,T1,R0 -BEQ R0,R0,7F0E27FC -SW T7,0048 (SP) -//7F0D9A28: BE: CP (HL) 7 -LW T4,028C (SP) -LBU T9,0287 (SP) -SLL T2,S6,0x8 -ADDIU T3,T4,0007 -BNE T9,R0,7F0D9A4C -SW T3,028C (SP) ;cycles+=7 -OR T6,T2,S7 -BEQ R0,R0,7F0D9AA0 -SH T6,014A (SP) -//7F0D9A4C: -LW T0,028C (SP) -LBU T8,0287 (SP) -ADDIU AT,R0,0001 -ADDIU T7,T0,0008 -BNE T8,AT,7F0D9A70 -SW T7,028C (SP) ;cycles+=8 -LHU T5,0296 (SP) -BEQ R0,R0,7F0D9A78 -SW T5,0048 (SP) -//7F0D9A70: -LHU T1,0294 (SP) -SW T1,0048 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -LW T6,0048 (SP) -ADDU T9,T4,T3 -LB T2,0000 (T9) -ADDIU T7,T4,0001 -SH T7,0298 (SP) ;spec.PC+=1 -ADDU T0,T2,T6 -SH T0,014A (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LHU T8,014A (SP) -ADDU T1,T8,T5 -LBU T3,0000 (T1) -SUBU T9,S0,T3 -ANDI T2,T9,01FF -ANDI T6,T2,FFFF -SLTIU T0,T6,0001 -ANDI T6,S0,000F -ANDI T9,T3,000F -SLT T4,T6,T9 -ANDI T7,T2,00A8 -SRA T5,T2,0x8 -OR T1,T7,T5 -SLL T8,T4,0x4 -OR T9,T2,R0 -XOR T5,S0,T3 -ANDI T6,T5,0080 -XOR T4,T9,S0 -OR T7,T1,T8 -AND T1,T6,T4 -SRA T8,T1,0x5 -SB T3,0147 (SP) -OR T3,T7,T8 -SH T2,0148 (SP) -SLL T2,T0,0x6 -ORI T5,T3,0002 -OR S1,T5,T2 -ANDI T9,S1,00FF -OR S1,T9,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0D9B24: BF: CP A 4 -ANDI T1,S0,00FF -SUBU T7,S0,T1 -LW T6,028C (SP) -ANDI T8,T7,01FF -ANDI T3,T8,FFFF -SLTIU T0,T3,0001 -ANDI T3,T1,000F -ANDI T7,S0,000F -ADDIU T4,T6,0004 -SLT T5,T7,T3 -SW T4,028C (SP) ;cycles+=4 -SRA T6,T8,0x8 -ANDI T2,T8,00A8 -OR T4,T2,T6 -SLL T9,T5,0x4 -XOR T6,S0,T1 -OR T3,T8,R0 -XOR T5,T3,S0 -ANDI T7,T6,0080 -OR T2,T4,T9 -AND T4,T7,T5 -SRA T9,T4,0x5 -OR T1,T2,T9 -SH T8,0144 (SP) -SLL T8,T0,0x6 -ORI T6,T1,0002 -OR S1,T6,T8 -ANDI T3,S1,00FF -OR S1,T3,R0 -SW T0,0048 (SP) -BEQ R0,R0,7F0E27FC -SB S0,0143 (SP) -//7F0D9BA4: C0: RET NZ 11(5) -LW T7,028C (SP) -ANDI T4,S1,0040 ;T4= ZERO flag -LUI T0,8009 -ADDIU T5,T7,0005 -BNE T4,R0,7F0E27FC ;skip if ZERO set -SW T5,028C (SP) ;cycles+=5 -LHU T1,0292 (SP) ;T1=SP+292: spec.SP -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -ADDIU T9,T5,0006 -SW T9,028C (SP) ;cycles+=6 B total -ADDU T3,T0,T1 -LBU T7,0001 (T3) -ADDU T6,T1,T0 -LBU T8,0000 (T6) ;T4= ROM+popped offset[1:0]: new PC -SLL T5,T7,0x8 -ADDIU T2,T1,0002 ;spec.SP+=2 -OR T4,T8,T5 -SH T4,0298 (SP) ;set new PC -BEQ R0,R0,7F0E27FC -SH T2,0292 (SP) ;update spec.SP+=2 -//7F0D9BF4: C1: POP BC 10 -LW T9,028C (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T0,0292 (SP) -ADDIU T6,T9,000A -SW T6,028C (SP) ;cycles+=A -ADDU T7,T0,T3 -LBU S3,0000 (T7) -LBU S2,0001 (T7) -ADDIU T8,T0,0002 -BEQ R0,R0,7F0E27FC -SH T8,0292 (SP) -//7F0D9C24: C2: JP NZ,nn 10 -LW T5,028C (SP) -ANDI T1,S1,0040 -LHU T2,0298 (SP) ;T2=spec.PC -ADDIU T4,T5,000A -BNE T1,R0,7F0D9C64 -SW T4,028C (SP) ;cycles+=A -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -ADDU T7,T9,T2 -LBU T0,0001 (T7) -ADDU T6,T2,T9 -LBU T3,0000 (T6) -SLL T8,T0,0x8 -OR T5,T3,T8 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) -//7F0D9C64: -LHU T4,0298 (SP) -ADDIU T1,T4,0002 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) ;spec.PC+=2 -//7F0D9C74: C3: JP nn 10 -LW T6,028C (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T2,0298 (SP) ;T2=spec.PC -ADDIU T9,T6,000A -SW T9,028C (SP) ;cycles+=A -ADDU T8,T7,T2 -LBU T5,0001 (T8) -ADDU T0,T2,T7 -LBU T3,0000 (T0) ;T1=ROM+PC[1:0] -SLL T4,T5,0x8 -OR T1,T3,T4 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) ;PC = nn -//7F0D9CAC: C4: CALL NZ,nn 17(10) -LW T6,028C (SP) -ANDI T0,S1,0040 -ADDIU T9,T6,000A -BNE T0,R0,7F0D9E84 -SW T9,028C (SP) ;cycles+=A -LHU T8,0292 (SP) -ADDIU T2,T9,0007 -SW T2,028C (SP) ;cycles+=7 11 total -ADDIU T5,T8,FFFE -ANDI T3,T5,FFFF -SLTI AT,T3,5B00 -BNE AT,R0,7F0D9CFC -SH T5,0292 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -ADDU T9,T6,T3 -ADDIU T1,T4,0002 -BEQ R0,R0,7F0D9D88 -SB T1,0000 (T9) -//7F0D9CFC: -LHU T0,0292 (SP) -LHU T9,0292 (SP) -LHU T7,0298 (SP) ;T7=spec.PC -SLTI AT,T0,5800 -BNE AT,R0,7F0D9D40 -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDIU T2,T7,0002 -LUI T6,8009 -ADDU T5,T8,T0 -SB T2,0000 (T5) -LHU T3,0292 (SP) -LW T6,E32C (T6) -ADDIU T4,R0,0001 -ADDU T1,T6,T3 -BEQ R0,R0,7F0D9D88 -SB T4,A800 (T1) -//7F0D9D40: -SLTI AT,T9,4000 -BNE AT,R0,7F0D9D88 -LHU T7,0298 (SP) ;T7=spec.PC -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -ADDIU T8,T7,0002 -ADDIU T5,R0,0001 -ADDU T2,T0,T9 -SB T8,0000 (T2) -LHU T6,0292 (SP) -LUI T0,8009 -LW T0,E32C (T0) -ANDI T3,T6,1800 -SRA T4,T3,0x3 -ANDI T1,T6,00FF -OR T7,T4,T1 -ADDU T9,T0,T7 -SB T5,0000 (T9) -LHU T8,0292 (SP) -LHU T7,0292 (SP) -LHU T3,0298 (SP) ;T3=spec.PC -ADDIU T2,T8,0001 -SLTI AT,T2,5B00 -BNE AT,R0,7F0D9DC0 -ADDIU T5,T7,0001 -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -ADDIU T6,T3,0002 -SRA T4,T6,0x8 -ADDU T0,T1,T8 -BEQ R0,R0,7F0D9E58 -SB T4,0001 (T0) -//7F0D9DC0: -SLTI AT,T5,5800 -BNE AT,R0,7F0D9E04 -LHU T9,0292 (SP) -LHU T9,0298 (SP) ;T9=spec.PC -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -ADDIU T2,T9,0002 -SRA T3,T2,0x8 -ADDU T1,T6,T7 -SB T3,0001 (T1) -LUI T4,8009 -LW T4,E32C (T4) -LHU T0,0292 (SP) -ADDIU T8,R0,0001 -ADDU T5,T4,T0 -BEQ R0,R0,7F0D9E58 -SB T8,A801 (T5) -//7F0D9E04: -ADDIU T2,T9,0001 -SLTI AT,T2,4000 -BNE AT,R0,7F0D9E58 -LHU T6,0298 (SP) ;T6=spec.PC -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -ADDIU T7,T6,0002 -SRA T3,T7,0x8 -ADDU T4,T1,T9 -SB T3,0001 (T4) -LHU T8,0292 (SP) -LUI T9,8009 -LW T9,E32C (T9) -ADDIU T5,T8,0001 -ANDI T2,T5,1800 -SRA T6,T2,0x3 -ANDI T7,T5,00FF -OR T1,T6,T7 -ADDIU T0,R0,0001 -ADDU T3,T9,T1 -SB T0,0000 (T3) -//7F0D9E58: -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -ADDU T6,T8,T4 -LBU T7,0001 (T6) -ADDU T2,T4,T8 -LBU T5,0000 (T2) -SLL T9,T7,0x8 -OR T1,T5,T9 ;T1= spec.PC[1:0]: jump PC -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) ;spec.PC = jump PC -//7F0D9E84: -LHU T0,0298 (SP) -ADDIU T3,T0,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) ;spec.PC+=2 -//7F0D9E94: C5: PUSH BC 11 -LHU T4,0292 (SP) -LW T2,028C (SP) -LUI T5,8009 -ADDIU T6,T4,FFFE -ANDI T7,T6,FFFF -SLTI AT,T7,5B00 -ADDIU T8,T2,000B -SW T8,028C (SP) ;cycles+=b -BNE AT,R0,7F0D9ECC -SH T6,0292 (SP) -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -ADDU T9,T5,T7 -BEQ R0,R0,7F0D9F4C -SB S3,0000 (T9) -//7F0D9ECC: -LHU T1,0292 (SP) -LHU T5,0292 (SP) -LUI T0,8009 -SLTI AT,T1,5800 -BNEL AT,R0,7F0D9F10 -SLTI AT,T5,4000 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LUI T8,8009 -ADDIU T2,R0,0001 -ADDU T3,T0,T1 -SB S3,0000 (T3) -LHU T4,0292 (SP) -LW T8,E32C (T8) -ADDU T6,T8,T4 -BEQ R0,R0,7F0D9F4C -SB T2,A800 (T6) -//77F0D9F0C: -SLTI AT,T5,4000 -BNE AT,R0,7F0D9F4C -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LUI T6,8009 -ADDIU T0,R0,0001 -ADDU T9,T7,T5 -SB S3,0000 (T9) -LHU T1,0292 (SP) -LW T6,E32C (T6) -ANDI T3,T1,1800 -SRA T8,T3,0x3 -ANDI T4,T1,00FF -OR T2,T8,T4 -ADDU T7,T6,T2 -SB T0,0000 (T7) -LHU T5,0292 (SP) -LHU T8,0292 (SP) -LUI T3,8009 -ADDIU T9,T5,0001 -SLTI AT,T9,5B00 -BNE AT,R0,7F0D9F78 -ADDIU T4,T8,0001 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -ADDU T1,T3,T5 -BEQ R0,R0,7F0E27FC -SB S2,0001 (T1) -//7F0D9F78: -SLTI AT,T4,5800 -BNE AT,R0,7F0D9FB0 -LHU T5,0292 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LUI T7,8009 -ADDIU T0,R0,0001 -ADDU T2,T6,T8 -SB S2,0001 (T2) -LHU T9,0292 (SP) -LW T7,E32C (T7) -ADDU T3,T7,T9 -BEQ R0,R0,7F0E27FC -SB T0,A801 (T3) -//7F0D9FB0: -ADDIU T1,T5,0001 -SLTI AT,T1,4000 -BNE AT,R0,7F0E27FC -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -ADDIU T8,R0,0001 -ADDU T6,T4,T5 -SB S2,0001 (T6) -LHU T2,0292 (SP) -LUI T4,8009 -LW T4,E32C (T4) -ADDIU T7,T2,0001 -ANDI T9,T7,1800 -SRA T0,T9,0x3 -ANDI T3,T7,00FF -OR T1,T0,T3 -ADDU T5,T4,T1 -BEQ R0,R0,7F0E27FC -SB T8,0000 (T5) -//7F0D9FFC: C6: ADD A,n 7 -LW T6,028C (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T9,0298 (SP) ;T9=spec.PC -ADDIU T2,T6,0007 -SW T2,028C (SP) ;cycles+=7 -ADDU T0,T9,T7 -LBU T3,0000 (T0) ;T3= val -ANDI T9,S0,000F -ADDIU AT,R0,000F -ADDU T1,S0,T3 -ANDI T2,T3,000F -ADDU T7,T9,T2 -ANDI T8,T1,00A8 -SRA T5,T1,0x8 -OR T6,T8,T5 -NOR T5,S0,R0 -SLT T0,AT,T7 -XOR T7,T1,S0 -SH T1,0140 (SP) -XOR T9,T5,T3 -LBU S0,0141 (SP) -ANDI T2,T9,0080 -SLL T4,T0,0x4 -AND T0,T2,T7 -OR T8,T6,T4 -LHU T2,0298 (SP) ;T2=spec.PC -SRA T6,T0,0x5 -SLTIU T5,S0,0001 -SLL T9,T5,0x6 -OR T4,T8,T6 -OR S1,T4,T9 -ANDI T1,S1,00FF -ADDIU T7,T2,0001 -OR S1,T1,R0 -SW T5,0048 (SP) -SH T7,0298 (SP) ;spec.PC+=1 -BEQ R0,R0,7F0E27FC -SB T3,013F (SP) -//7F0DA098: C7: RST 00 11 -LHU T6,0292 (SP) -LW T0,028C (SP) -LUI T9,8009 -ADDIU T4,T6,FFFE -ANDI T5,T4,FFFF -SLTI AT,T5,5B00 -ADDIU T8,T0,000B -SW T8,028C (SP) ;cycles+=B -BNE AT,R0,7F0DA0D4 -SH T4,0292 (SP) -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T3,0298 (SP) ;T3=spec.PC -ADDU T1,T9,T5 -BEQ R0,R0,7F0DA15C -SB T3,0000 (T1) -//7F0DA0D4: -LHU T2,0292 (SP) -LHU T3,0292 (SP) -LUI T0,8009 -SLTI AT,T2,5800 -BNEL AT,R0,7F0DA11C -SLTI AT,T3,4000 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T7,0298 (SP) ;T7=spec.PC -LUI T4,8009 -ADDU T8,T0,T2 -SB T7,0000 (T8) -LHU T9,0292 (SP) -LW T4,E32C (T4) -ADDIU T6,R0,0001 -ADDU T5,T4,T9 -BEQ R0,R0,7F0DA15C -SB T6,A800 (T5) -//7F0DA118: -SLTI AT,T3,4000 -BNE AT,R0,7F0DA15C -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LHU T1,0298 (SP) ;T1=spec.PC -ADDIU T7,R0,0001 -ADDU T2,T0,T3 -SB T1,0000 (T2) -LHU T8,0292 (SP) -LUI T0,8009 -LW T0,E32C (T0) -ANDI T4,T8,1800 -SRA T9,T4,0x3 -ANDI T6,T8,00FF -OR T5,T9,T6 -ADDU T3,T0,T5 -SB T7,0000 (T3) -LHU T1,0292 (SP) -LHU T0,0292 (SP) -LHU T4,0298 (SP) ;T4=spec.PC -ADDIU T2,T1,0001 -SLTI AT,T2,5B00 -BNE AT,R0,7F0DA190 -ADDIU T5,T0,0001 -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -SRA T8,T4,0x8 -ADDU T6,T9,T1 -BEQ R0,R0,7F0DA220 -SB T8,0001 (T6) -//7F0DA190: -SLTI AT,T5,5800 -BNE AT,R0,7F0DA1D0 -LHU T5,0292 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T7,0298 (SP) ;T7=spec.PC -LUI T1,8009 -ADDU T4,T2,T0 -SRA T3,T7,0x8 -SB T3,0001 (T4) -LHU T8,0292 (SP) -LW T1,E32C (T1) -ADDIU T9,R0,0001 -ADDU T6,T1,T8 -BEQ R0,R0,7F0DA220 -SB T9,A801 (T6) -//7F0DA1D0: -ADDIU T7,T5,0001 -SLTI AT,T7,4000 -BNE AT,R0,7F0DA220 -LHU T2,0298 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -SRA T0,T2,0x8 -ADDIU T1,R0,0001 -ADDU T4,T3,T5 -SB T0,0001 (T4) -LHU T8,0292 (SP) -LUI T5,8009 -LW T5,E32C (T5) -ADDIU T9,T8,0001 -ANDI T6,T9,1800 -SRA T7,T6,0x3 -ANDI T2,T9,00FF -OR T3,T7,T2 -ADDU T0,T5,T3 -SB T1,0000 (T0) -//7F0DA220: -BEQ R0,R0,7F0E27FC -SH R0,0298 (SP) -//7F0DA228: C8: RET Z 11(5) -LW T4,028C (SP) -ANDI T6,S1,0040 -LUI T5,8009 -ADDIU T8,T4,0005 -BEQ T6,R0,7F0E27FC -SW T8,028C (SP) ;cycles+=5 -LHU T2,0292 (SP) -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -ADDIU T7,T8,0006 -SW T7,028C (SP) ;cycles+=6 B total -ADDU T0,T5,T2 -LBU T4,0001 (T0) -ADDU T3,T2,T5 -LBU T1,0000 (T3) -SLL T8,T4,0x8 -ADDIU T9,T2,0002 -OR T6,T1,T8 -SH T6,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T9,0292 (SP) -//7F0DA278: C9: RET 10 -LW T7,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T4,0292 (SP) -ADDIU T3,T7,0004 -SW T3,028C (SP) ;cycles+=4 -ADDIU T0,T3,0006 -SW T0,028C (SP) ;cycles+=6 A total -ADDU T2,T1,T4 -LBU T9,0001 (T2) -ADDU T8,T4,T1 -LBU T6,0000 (T8) -SLL T7,T9,0x8 -ADDIU T5,T4,0002 -OR T3,T6,T7 -SH T3,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T5,0292 (SP) -//7F0DA2C0: CA: JP Z,nn 10 -LW T0,028C (SP) -ANDI T1,S1,0040 -LHU T2,0298 (SP) -ADDIU T8,T0,000A -BEQ T1,R0,7F0DA300 -SW T8,028C (SP) ;cycles+=A -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -ADDU T3,T9,T2 -LBU T4,0001 (T3) -ADDU T6,T2,T9 -LBU T7,0000 (T6) -SLL T5,T4,0x8 -OR T0,T7,T5 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0DA300: -LHU T8,0298 (SP) -ADDIU T1,T8,0002 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) -//7F0DA310: CB: --- CB --- -LW T6,028C (SP) -LBU T2,0287 (SP) -LUI T3,8009 -ADDIU T9,T6,0004 -BEQ T2,R0,7F0DA3A0 -SW T9,028C (SP) ;cycles+=4 -ADDIU AT,R0,0001 -BNE T2,AT,7F0DA340 -LUI T5,8009 -LHU T3,0296 (SP) -BEQ R0,R0,7F0DA348 -SW T3,0048 (SP) -//7F0DA340: -LHU T4,0294 (SP) -SW T4,0048 (SP) -LHU T7,0298 (SP) -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LW T1,0048 (SP) -LW T2,028C (SP) -ADDU T0,T7,T5 -LB T8,0000 (T0) -ADDIU T9,T7,0001 -ANDI T4,T9,FFFF -ADDIU T3,T2,0008 -ADDU T6,T8,T1 -SH T6,013C (SP) -SH T9,0298 (SP) -SW T3,028C (SP) ;cycles+=8 -ADDU T0,T4,T5 -LBU T8,0000 (T0) -ANDI T6,T8,00F8 -ORI T7,T6,0006 -SB T8,013B (SP) -ANDI T1,T8,0007 -SB T1,013A (SP) -BEQ R0,R0,7F0DA3D8 -SB T7,013B (SP) -//7F0DA3A0: -LHU T2,0298 (SP) -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LW T5,028C (SP) -LW T1,0288 (SP) -ADDU T9,T2,T3 -LBU T4,0000 (T9) ;T4= CB.cmd -SLL T6,S6,0x8 -OR T7,T6,S7 ;T7= HL -ADDIU T0,T5,0004 -ADDIU T8,T1,0001 -SW T0,028C (SP) ;cycles+=4 -SW T8,0288 (SP) ;SP+288+=1 -SH T7,013C (SP) ;SP+13C= HL -SB T4,013B (SP) ;SP+13B= CB.cmd -LHU T2,0298 (SP) -LBU T9,013B (SP) -LBU T7,013B (SP) -ADDIU T3,T2,0001 -SLTI AT,T9,0040 -BEQ AT,R0,7F0DBE80 -SH T3,0298 (SP) ;spec.PC+=1 -SLTIU AT,T9,0040 -BEQ AT,R0,7F0DC598 -SLL T9,T9,0x2 -LUI AT,8006 -ADDU AT,AT,T9 -LW T9,C52C (AT) ;T9=8005C52C+offset: p->handler -JR T9 -NOP -//7F0DA414: CB.00: RLC B 8 -SLL T4,S2,0x1 -SRA T5,S2,0x7 -OR S2,T4,T5 -ANDI T0,S2,00FF -LUI T4,8009 -LW T4,E334 (T4) -SLTIU T1,T0,0001 -SW T1,0048 (SP) -OR S2,T0,R0 -ANDI T8,T0,0001 -ANDI T6,T0,00A8 -ADDU T5,T0,T4 -LBU T0,0000 (T5) -OR T7,T8,T6 -SLL T3,T1,0x6 -OR T9,T7,T3 -OR S1,T0,T9 -ANDI T1,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T1,R0 -//7F0DA464: CB.01: RLC C 8 -SLL T8,S3,0x1 -SRA T6,S3,0x7 -OR S3,T8,T6 -ANDI T2,S3,00FF -LUI T8,8009 -LW T8,E334 (T8) -SLTIU T7,T2,0001 -SW T7,0048 (SP) -OR S3,T2,R0 -ANDI T3,T2,0001 -ANDI T4,T2,00A8 -ADDU T6,T2,T8 -LBU T2,0000 (T6) -OR T5,T3,T4 -SLL T9,T7,0x6 -OR T1,T5,T9 -OR S1,T2,T1 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DA4B4: CB.02: RLC D 8 -SLL T3,S4,0x1 -SRA T4,S4,0x7 -OR S4,T3,T4 -ANDI T0,S4,00FF -LUI T3,8009 -LW T3,E334 (T3) -SLTIU T5,T0,0001 -SW T5,0048 (SP) -OR S4,T0,R0 -ANDI T9,T0,0001 -ANDI T8,T0,00A8 -ADDU T4,T0,T3 -LBU T0,0000 (T4) -OR T6,T9,T8 -SLL T1,T5,0x6 -OR T7,T6,T1 -OR S1,T0,T7 -ANDI T5,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T5,R0 -//7F0DA504: CB.03: RLC E 8 -SLL T9,S5,0x1 -SRA T8,S5,0x7 -OR S5,T9,T8 -ANDI T2,S5,00FF -LUI T9,8009 -LW T9,E334 (T9) -SLTIU T6,T2,0001 -SW T6,0048 (SP) -OR S5,T2,R0 -ANDI T1,T2,0001 -ANDI T3,T2,00A8 -ADDU T8,T2,T9 -LBU T2,0000 (T8) -OR T4,T1,T3 -SLL T7,T6,0x6 -OR T5,T4,T7 -OR S1,T2,T5 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DA554: CB.04: RLC H 8 -SLL T1,S6,0x1 -SRA T3,S6,0x7 -OR S6,T1,T3 -ANDI T0,S6,00FF -LUI T1,8009 -LW T1,E334 (T1) -SLTIU T4,T0,0001 -SW T4,0048 (SP) -OR S6,T0,R0 -ANDI T7,T0,0001 -ANDI T9,T0,00A8 -ADDU T3,T0,T1 -LBU T0,0000 (T3) -OR T8,T7,T9 -SLL T5,T4,0x6 -OR T6,T8,T5 -OR S1,T0,T6 -ANDI T4,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T4,R0 -//7F0DA5A4: CB.05: RLC L 8 -SLL T7,S7,0x1 -SRA T9,S7,0x7 -OR S7,T7,T9 -ANDI T2,S7,00FF -LUI T7,8009 -LW T7,E334 (T7) -SLTIU T8,T2,0001 -SW T8,0048 (SP) -OR S7,T2,R0 -ANDI T5,T2,0001 -ANDI T1,T2,00A8 -ADDU T9,T2,T7 -LBU T2,0000 (T9) -OR T3,T5,T1 -SLL T6,T8,0x6 -OR T4,T3,T6 -OR S1,T2,T4 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DA5F4: CB.06: RLC (HL) 15 -LW T5,028C (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T0,013C (SP) -ADDIU T1,T5,0007 -SW T1,028C (SP) ;cycles+=7 -ADDU T6,T0,T3 -LBU T7,0000 (T6) -SLL T9,T7,0x1 -SRA T2,T7,0x7 -OR T4,T9,T2 -ANDI T8,T4,00FF -SLTIU T5,T8,0001 -LUI T8,8009 -LW T8,E334 (T8) -ANDI T1,T4,00FF -SB T7,0139 (SP) -ANDI T0,T1,0001 -ANDI T6,T4,00A8 -OR T7,T0,T6 -SB T4,0139 (SP) -SW T5,0048 (SP) -ADDU T3,T1,T8 -LBU T0,0000 (T3) -SLL T9,T5,0x6 -LHU T5,013C (SP) -OR T2,T7,T9 -OR S1,T0,T2 -ANDI T6,S1,00FF -SLTI AT,T5,5B00 -BNE AT,R0,7F0DA68C -OR S1,T6,R0 -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -OR T7,T4,R0 -ADDU T4,T9,T5 -BEQ R0,R0,7F0DC598 -SB T7,0000 (T4) -//7F0DA68C: -LHU T1,013C (SP) -LHU T7,013C (SP) -LUI T3,8009 -SLTI AT,T1,5800 -BNEL AT,R0,7F0DA6D4 -SLTI AT,T7,4000 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LBU T8,0139 (SP) -LUI T6,8009 -ADDU T0,T3,T1 -SB T8,0000 (T0) -LHU T9,013C (SP) -LW T6,E32C (T6) -ADDIU T2,R0,0001 -ADDU T5,T6,T9 -BEQ R0,R0,7F0DC598 -SB T2,A800 (T5) -//7F0DA6D0: -SLTI AT,T7,4000 -BNE AT,R0,7F0DC598 -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LBU T4,0139 (SP) -ADDIU T8,R0,0001 -ADDU T1,T3,T7 -SB T4,0000 (T1) -LHU T0,013C (SP) -LUI T3,8009 -LW T3,E32C (T3) -ANDI T6,T0,1800 -SRA T9,T6,0x3 -ANDI T2,T0,00FF -OR T5,T9,T2 -ADDU T7,T3,T5 -BEQ R0,R0,7F0DC598 -SB T8,0000 (T7) -//7F0DA718: CB.07: RLC A 8 -SLL T4,S0,0x1 -SRA T1,S0,0x7 -OR S0,T4,T1 -ANDI T6,S0,00FF -LUI T4,8009 -LW T4,E334 (T4) -SLTIU T0,T6,0001 -SW T0,0048 (SP) -OR S0,T6,R0 -ANDI T9,T6,0001 -ANDI T2,T6,00A8 -ADDU T1,T6,T4 -LBU T6,0000 (T1) -OR T3,T9,T2 -SLL T8,T0,0x6 -OR T7,T3,T8 -OR S1,T6,T7 -ANDI T0,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T0,R0 -//7F0DA768: CB.08: RRC B 8 -ANDI T5,S2,0001 -SLL T3,T5,0x7 -SRA T2,S2,0x1 -OR S2,T2,T3 -ANDI T8,S2,00FF -LUI T2,8009 -LW T2,E334 (T2) -SLTIU T4,T8,0001 -SW T4,0048 (SP) -OR S2,T8,R0 -ANDI T1,T8,00A8 -SB T5,0138 (SP) -ADDU T3,T8,T2 -LBU T8,0000 (T3) -OR T6,T5,T1 -SLL T0,T4,0x6 -OR T9,T6,T0 -OR S1,T8,T9 -ANDI T4,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T4,R0 -//7F0DA7BC: CB.09: RRC C 8 -ANDI T7,S3,0001 -SLL T6,T7,0x7 -SRA T1,S3,0x1 -OR S3,T1,T6 -ANDI T0,S3,00FF -LUI T1,8009 -LW T1,E334 (T1) -SLTIU T2,T0,0001 -SW T2,0048 (SP) -OR S3,T0,R0 -ANDI T3,T0,00A8 -SB T7,0137 (SP) -ADDU T6,T0,T1 -LBU T0,0000 (T6) -OR T8,T7,T3 -SLL T4,T2,0x6 -OR T5,T8,T4 -OR S1,T0,T5 -ANDI T2,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T2,R0 -//7F0DA810: CB.0A: RRC D 8 -ANDI T9,S4,0001 -SLL T8,T9,0x7 -SRA T3,S4,0x1 -OR S4,T3,T8 -ANDI T4,S4,00FF -LUI T3,8009 -LW T3,E334 (T3) -SLTIU T1,T4,0001 -SW T1,0048 (SP) -OR S4,T4,R0 -ANDI T6,T4,00A8 -SB T9,0136 (SP) -ADDU T8,T4,T3 -LBU T4,0000 (T8) -OR T0,T9,T6 -SLL T2,T1,0x6 -OR T7,T0,T2 -OR S1,T4,T7 -ANDI T1,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T1,R0 -//7F0DA864: CB.0B: RRC E 8 -ANDI T5,S5,0001 -SLL T0,T5,0x7 -SRA T6,S5,0x1 -OR S5,T6,T0 -ANDI T2,S5,00FF -LUI T6,8009 -LW T6,E334 (T6) -SLTIU T3,T2,0001 -SW T3,0048 (SP) -OR S5,T2,R0 -ANDI T8,T2,00A8 -SB T5,0135 (SP) -ADDU T0,T2,T6 -LBU T2,0000 (T0) -OR T4,T5,T8 -SLL T1,T3,0x6 -OR T9,T4,T1 -OR S1,T2,T9 -ANDI T3,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T3,R0 -//7F0DA8B8: CB.0C: RRC H 8 -ANDI T7,S6,0001 -SLL T4,T7,0x7 -SRA T8,S6,0x1 -OR S6,T8,T4 -ANDI T1,S6,00FF -LUI T8,8009 -LW T8,E334 (T8) -SLTIU T6,T1,0001 -SW T6,0048 (SP) -OR S6,T1,R0 -ANDI T0,T1,00A8 -SB T7,0134 (SP) -ADDU T4,T1,T8 -LBU T1,0000 (T4) -OR T2,T7,T0 -SLL T3,T6,0x6 -OR T5,T2,T3 -OR S1,T1,T5 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DA90C: CB.0D: RRC L 8 -ANDI T9,S7,0001 -SLL T2,T9,0x7 -SRA T0,S7,0x1 -OR S7,T0,T2 -ANDI T3,S7,00FF -LUI T0,8009 -LW T0,E334 (T0) -SLTIU T8,T3,0001 -SW T8,0048 (SP) -OR S7,T3,R0 -ANDI T4,T3,00A8 -SB T9,0133 (SP) -ADDU T2,T3,T0 -LBU T3,0000 (T2) -OR T1,T9,T4 -SLL T6,T8,0x6 -OR T7,T1,T6 -OR S1,T3,T7 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DA960: CB.0E: RRC (HL) 15 -LW T9,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T5,013C (SP) -ADDIU T4,T9,0007 -SW T4,028C (SP) ;cycles+=7 -ADDU T6,T5,T1 -LBU T0,0000 (T6) -ANDI T2,T0,00FF -ANDI T6,T2,0001 -ANDI T8,T6,00FF -SLL T9,T8,0x7 -SRA T7,T2,0x1 -OR T4,T7,T9 -LUI T9,8009 -LW T9,E334 (T9) -ANDI T5,T4,00FF -SB T0,0139 (SP) -SLTIU T1,T5,0001 -ANDI T2,T4,00A8 -OR T3,T6,T2 -SW T1,0048 (SP) -SB T4,0139 (SP) -SB T6,0132 (SP) -ADDU T0,T5,T9 -LBU T6,0000 (T0) -SLL T8,T1,0x6 -LHU T1,013C (SP) -OR T7,T3,T8 -OR S1,T6,T7 -ANDI T2,S1,00FF -SLTI AT,T1,5B00 -BNE AT,R0,7F0DAA00 -OR S1,T2,R0 -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -OR T3,T4,R0 -ADDU T4,T8,T1 -BEQ R0,R0,7F0DC598 -SB T3,0000 (T4) -//7F0DAA00: -LHU T5,013C (SP) -LHU T3,013C (SP) -LUI T0,8009 -SLTI AT,T5,5800 -BNEL AT,R0,7F0DAA48 -SLTI AT,T3,4000 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LBU T9,0139 (SP) -LUI T2,8009 -ADDU T6,T0,T5 -SB T9,0000 (T6) -LHU T8,013C (SP) -LW T2,E32C (T2) -ADDIU T7,R0,0001 -ADDU T1,T2,T8 -BEQ R0,R0,7F0DC598 -SB T7,A800 (T1) -//7F0DAA44: -SLTI AT,T3,4000 -BNE AT,R0,7F0DC598 -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -LBU T4,0139 (SP) -ADDIU T9,R0,0001 -ADDU T5,T0,T3 -SB T4,0000 (T5) -LHU T6,013C (SP) -LUI T0,8009 -LW T0,E32C (T0) -ANDI T2,T6,1800 -SRA T8,T2,0x3 -ANDI T7,T6,00FF -OR T1,T8,T7 -ADDU T3,T0,T1 -BEQ R0,R0,7F0DC598 -SB T9,0000 (T3) -//7F0DAA8C: CB.0F: RRC A 8 -ANDI T2,S0,0001 -SLL T6,T2,0x7 -SRA T5,S0,0x1 -OR S0,T5,T6 -ANDI T8,S0,00FF -LUI T5,8009 -LW T5,E334 (T5) -SLTIU T7,T8,0001 -SW T7,0048 (SP) -OR S0,T8,R0 -ANDI T0,T8,00A8 -SB T2,0131 (SP) -ADDU T6,T8,T5 -LBU T8,0000 (T6) -OR T1,T2,T0 -SLL T3,T7,0x6 -OR T4,T1,T3 -OR S1,T8,T4 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DAAE0: CB.10: RL B 8 -SRA T5,S2,0x7 -SLL T0,S2,0x1 -ANDI T9,S1,0001 -OR S2,T0,T9 -ANDI T1,S2,00FF -LUI T0,8009 -LW T0,E334 (T0) -SLTIU T3,T1,0001 -SW T3,0048 (SP) -OR S2,T1,R0 -ANDI T6,T1,00A8 -SB T5,0130 (SP) -ADDU T9,T1,T0 -LBU T1,0000 (T9) -OR T8,T5,T6 -SLL T7,T3,0x6 -OR T2,T8,T7 -OR S1,T1,T2 -ANDI T3,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T3,R0 -//7F0DAB34: CB.11: RL C 8 -SRA T0,S3,0x7 -SLL T6,S3,0x1 -ANDI T4,S1,0001 -OR S3,T6,T4 -ANDI T8,S3,00FF -LUI T6,8009 -LW T6,E334 (T6) -SLTIU T7,T8,0001 -SW T7,0048 (SP) -OR S3,T8,R0 -ANDI T9,T8,00A8 -SB T0,012F (SP) -ADDU T4,T8,T6 -LBU T8,0000 (T4) -OR T1,T0,T9 -SLL T3,T7,0x6 -OR T5,T1,T3 -OR S1,T8,T5 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DAB88: CB.12: RL D 8 -SRA T6,S4,0x7 -SLL T9,S4,0x1 -ANDI T2,S1,0001 -OR S4,T9,T2 -ANDI T1,S4,00FF -LUI T9,8009 -LW T9,E334 (T9) -SLTIU T3,T1,0001 -SW T3,0048 (SP) -OR S4,T1,R0 -ANDI T4,T1,00A8 -SB T6,012E (SP) -ADDU T2,T1,T9 -LBU T1,0000 (T2) -OR T8,T6,T4 -SLL T7,T3,0x6 -OR T0,T8,T7 -OR S1,T1,T0 -ANDI T3,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T3,R0 -//7F0DABDC: CB.13: RL E 8 -SRA T9,S5,0x7 -SLL T4,S5,0x1 -ANDI T5,S1,0001 -OR S5,T4,T5 -ANDI T8,S5,00FF -LUI T4,8009 -LW T4,E334 (T4) -SLTIU T7,T8,0001 -SW T7,0048 (SP) -OR S5,T8,R0 -ANDI T2,T8,00A8 -SB T9,012D (SP) -ADDU T5,T8,T4 -LBU T8,0000 (T5) -OR T1,T9,T2 -SLL T3,T7,0x6 -OR T6,T1,T3 -OR S1,T8,T6 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DAC30: CB.14: RL H 8 -SRA T4,S6,0x7 -SLL T2,S6,0x1 -ANDI T0,S1,0001 -OR S6,T2,T0 -ANDI T1,S6,00FF -LUI T2,8009 -LW T2,E334 (T2) -SLTIU T3,T1,0001 -SW T3,0048 (SP) -OR S6,T1,R0 -ANDI T5,T1,00A8 -SB T4,012C (SP) -ADDU T0,T1,T2 -LBU T1,0000 (T0) -OR T8,T4,T5 -SLL T7,T3,0x6 -OR T9,T8,T7 -OR S1,T1,T9 -ANDI T3,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T3,R0 -//7F0DAC84: CB.15: RL L 8 -SRA T2,S7,0x7 -SLL T5,S7,0x1 -ANDI T6,S1,0001 -OR S7,T5,T6 -ANDI T8,S7,00FF -LUI T5,8009 -LW T5,E334 (T5) -SLTIU T7,T8,0001 -SW T7,0048 (SP) -OR S7,T8,R0 -ANDI T0,T8,00A8 -SB T2,012B (SP) -ADDU T6,T8,T5 -LBU T8,0000 (T6) -OR T1,T2,T0 -SLL T3,T7,0x6 -OR T4,T1,T3 -OR S1,T8,T4 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DACD8: CB.16: RL (HL) 15 -LW T2,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T9,013C (SP) -ADDIU T0,T2,0007 -SW T0,028C (SP) ;cycles+=7 F total -ADDU T3,T9,T1 -LBU T5,0000 (T3) -ANDI T7,S1,0001 -ANDI T6,T5,00FF -SLL T4,T6,0x1 -OR T2,T4,T7 -LUI T7,8009 -LW T7,E334 (T7) -SRA T1,T6,0x7 -ANDI T0,T2,00FF -SB T5,0139 (SP) -ANDI T5,T2,00A8 -SLTIU T9,T0,0001 -SW T9,0048 (SP) -OR T8,T1,T5 -SB T2,0139 (SP) -SB T1,012A (SP) -ADDU T3,T0,T7 -LBU T1,0000 (T3) -SLL T6,T9,0x6 -LHU T9,013C (SP) -OR T4,T8,T6 -OR S1,T1,T4 -ANDI T5,S1,00FF -SLTI AT,T9,5B00 -BNE AT,R0,7F0DAD74 -OR S1,T5,R0 -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -OR T8,T2,R0 -ADDU T2,T6,T9 -BEQ R0,R0,7F0DC598 -SB T8,0000 (T2) -//7F0DAD74: -LHU T0,013C (SP) -LHU T8,013C (SP) -LUI T3,8009 -SLTI AT,T0,5800 -BNEL AT,R0,7F0DADBC -SLTI AT,T8,4000 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LBU T7,0139 (SP) -LUI T5,8009 -ADDU T1,T3,T0 -SB T7,0000 (T1) -LHU T6,013C (SP) -LW T5,E32C (T5) -ADDIU T4,R0,0001 -ADDU T9,T5,T6 -BEQ R0,R0,7F0DC598 -SB T4,A800 (T9) -//7F0DADB8: -SLTI AT,T8,4000 -BNE AT,R0,7F0DC598 -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LBU T2,0139 (SP) -ADDIU T7,R0,0001 -ADDU T0,T3,T8 -SB T2,0000 (T0) -LHU T1,013C (SP) -LUI T3,8009 -LW T3,E32C (T3) -ANDI T5,T1,1800 -SRA T6,T5,0x3 -ANDI T4,T1,00FF -OR T9,T6,T4 -ADDU T8,T3,T9 -BEQ R0,R0,7F0DC598 -SB T7,0000 (T8) -//7F0DAE00: CB.17: RL A 8 -SRA T4,S0,0x7 -SLL T0,S0,0x1 -ANDI T5,S1,0001 -OR S0,T0,T5 -ANDI T1,S0,00FF -LUI T0,8009 -LW T0,E334 (T0) -SLTIU T6,T1,0001 -SW T6,0048 (SP) -OR S0,T1,R0 -ANDI T3,T1,00A8 -SB T4,0129 (SP) -ADDU T5,T1,T0 -LBU T1,0000 (T5) -OR T9,T4,T3 -SLL T8,T6,0x6 -OR T2,T9,T8 -OR S1,T1,T2 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DAE54: CB.18: RR B 8 -ANDI T0,S2,0001 -SRA T3,S2,0x1 -SLL T7,S1,0x7 -OR S2,T3,T7 -ANDI T9,S2,00FF -LUI T3,8009 -LW T3,E334 (T3) -SLTIU T8,T9,0001 -SW T8,0048 (SP) -OR S2,T9,R0 -ANDI T5,T9,00A8 -SB T0,0128 (SP) -ADDU T7,T9,T3 -LBU T9,0000 (T7) -OR T1,T0,T5 -SLL T6,T8,0x6 -OR T4,T1,T6 -OR S1,T9,T4 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DAEA8: CB.19: RR C 8 -ANDI T3,S3,0001 -SRA T5,S3,0x1 -SLL T2,S1,0x7 -OR S3,T5,T2 -ANDI T1,S3,00FF -LUI T5,8009 -LW T5,E334 (T5) -SLTIU T6,T1,0001 -SW T6,0048 (SP) -OR S3,T1,R0 -ANDI T7,T1,00A8 -SB T3,0127 (SP) -ADDU T2,T1,T5 -LBU T1,0000 (T2) -OR T9,T3,T7 -SLL T8,T6,0x6 -OR T0,T9,T8 -OR S1,T1,T0 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DAEFC: CB.1A: RR D 8 -ANDI T5,S4,0001 -SRA T7,S4,0x1 -SLL T4,S1,0x7 -OR S4,T7,T4 -ANDI T9,S4,00FF -LUI T7,8009 -LW T7,E334 (T7) -SLTIU T8,T9,0001 -SW T8,0048 (SP) -OR S4,T9,R0 -ANDI T2,T9,00A8 -SB T5,0126 (SP) -ADDU T4,T9,T7 -LBU T9,0000 (T4) -OR T1,T5,T2 -SLL T6,T8,0x6 -OR T3,T1,T6 -OR S1,T9,T3 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DAF50: CB.1B: RR E 8 -ANDI T7,S5,0001 -SRA T2,S5,0x1 -SLL T0,S1,0x7 -OR S5,T2,T0 -ANDI T1,S5,00FF -LUI T2,8009 -LW T2,E334 (T2) -SLTIU T6,T1,0001 -SW T6,0048 (SP) -OR S5,T1,R0 -ANDI T4,T1,00A8 -SB T7,0125 (SP) -ADDU T0,T1,T2 -LBU T1,0000 (T0) -OR T9,T7,T4 -SLL T8,T6,0x6 -OR T5,T9,T8 -OR S1,T1,T5 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DAFA4: CB.1C: RR H 8 -ANDI T2,S6,0001 -SRA T4,S6,0x1 -SLL T3,S1,0x7 -OR S6,T4,T3 -ANDI T9,S6,00FF -LUI T4,8009 -LW T4,E334 (T4) -SLTIU T8,T9,0001 -SW T8,0048 (SP) -OR S6,T9,R0 -ANDI T0,T9,00A8 -SB T2,0124 (SP) -ADDU T3,T9,T4 -LBU T9,0000 (T3) -OR T1,T2,T0 -SLL T6,T8,0x6 -OR T7,T1,T6 -OR S1,T9,T7 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DAFF8: CB.1D: RR L 8 -ANDI T4,S7,0001 -SRA T0,S7,0x1 -SLL T5,S1,0x7 -OR S7,T0,T5 -ANDI T1,S7,00FF -LUI T0,8009 -LW T0,E334 (T0) -SLTIU T6,T1,0001 -SW T6,0048 (SP) -OR S7,T1,R0 -ANDI T3,T1,00A8 -SB T4,0123 (SP) -ADDU T5,T1,T0 -LBU T1,0000 (T5) -OR T9,T4,T3 -SLL T8,T6,0x6 -OR T2,T9,T8 -OR S1,T1,T2 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DB04C: CB.1E: RR (HL) 15 -LW T4,028C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T7,013C (SP) -ADDIU T3,T4,0007 -SW T3,028C (SP) ;cycles+=7 F total -ADDU T8,T7,T9 -LBU T0,0000 (T8) -SLL T6,S1,0x7 -ANDI T5,T0,00FF -SRA T2,T5,0x1 -OR T4,T2,T6 -LUI T6,8009 -LW T6,E334 (T6) -ANDI T9,T5,0001 -ANDI T3,T4,00FF -SB T0,0139 (SP) -ANDI T0,T4,00A8 -SLTIU T7,T3,0001 -SW T7,0048 (SP) -OR T1,T9,T0 -SB T4,0139 (SP) -SB T9,0122 (SP) -ADDU T8,T3,T6 -LBU T9,0000 (T8) -SLL T5,T7,0x6 -LHU T7,013C (SP) -OR T2,T1,T5 -OR S1,T9,T2 -ANDI T0,S1,00FF -SLTI AT,T7,5B00 -BNE AT,R0,7F0DB0E8 -OR S1,T0,R0 -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -OR T1,T4,R0 -ADDU T4,T5,T7 -BEQ R0,R0,7F0DC598 -SB T1,0000 (T4) -//7F0DB0E8: -LHU T3,013C (SP) -LHU T1,013C (SP) -LUI T8,8009 -SLTI AT,T3,5800 -BNEL AT,R0,7F0DB130 -SLTI AT,T1,4000 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LBU T6,0139 (SP) -LUI T0,8009 -ADDU T9,T8,T3 -SB T6,0000 (T9) -LHU T5,013C (SP) -LW T0,E32C (T0) -ADDIU T2,R0,0001 -ADDU T7,T0,T5 -BEQ R0,R0,7F0DC598 -SB T2,A800 (T7) -//7F0DB12C: -SLTI AT,T1,4000 -BNE AT,R0,7F0DC598 -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LBU T4,0139 (SP) -ADDIU T6,R0,0001 -ADDU T3,T8,T1 -SB T4,0000 (T3) -LHU T9,013C (SP) -LUI T8,8009 -LW T8,E32C (T8) -ANDI T0,T9,1800 -SRA T5,T0,0x3 -ANDI T2,T9,00FF -OR T7,T5,T2 -ADDU T1,T8,T7 -BEQ R0,R0,7F0DC598 -SB T6,0000 (T1) -//7F0DB174: CB.1F: RR A 8 -ANDI T2,S0,0001 -SRA T3,S0,0x1 -SLL T0,S1,0x7 -OR S0,T3,T0 -ANDI T9,S0,00FF -LUI T3,8009 -LW T3,E334 (T3) -SLTIU T5,T9,0001 -SW T5,0048 (SP) -OR S0,T9,R0 -ANDI T8,T9,00A8 -SB T2,0121 (SP) -ADDU T0,T9,T3 -LBU T9,0000 (T0) -OR T7,T2,T8 -SLL T1,T5,0x6 -OR T4,T7,T1 -OR S1,T9,T4 -ANDI T5,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T5,R0 -//7F0DB1C8: CB.20: SLA B 8 -LUI T2,8009 -LW T2,E334 (T2) -SRA T1,S2,0x7 -SLL T8,S2,0x1 -ANDI S2,T8,00FF -SLTIU T7,S2,0001 -SW T7,0048 (SP) -SB T1,0120 (SP) -ADDU T8,S2,T2 -LBU T6,0000 (T8) -ANDI T3,S2,00A8 -OR T0,T1,T3 -SLL T4,T7,0x6 -OR T5,T0,T4 -OR S1,T6,T5 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DB210: CB.21: SLA C 8 -LUI T1,8009 -LW T1,E334 (T1) -SRA T4,S3,0x7 -SLL T3,S3,0x1 -ANDI S3,T3,00FF -SLTIU T0,S3,0001 -SW T0,0048 (SP) -SB T4,011F (SP) -ADDU T3,S3,T1 -LBU T9,0000 (T3) -ANDI T2,S3,00A8 -OR T8,T4,T2 -SLL T5,T0,0x6 -OR T7,T8,T5 -OR S1,T9,T7 -ANDI T0,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T0,R0 -//7F0DB258: CB.22: SLA D 8 -LUI T4,8009 -LW T4,E334 (T4) -SRA T5,S4,0x7 -SLL T2,S4,0x1 -ANDI S4,T2,00FF -SLTIU T8,S4,0001 -SW T8,0048 (SP) -SB T5,011E (SP) -ADDU T2,S4,T4 -LBU T6,0000 (T2) -ANDI T1,S4,00A8 -OR T3,T5,T1 -SLL T7,T8,0x6 -OR T0,T3,T7 -OR S1,T6,T0 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DB2A0: CB.23: SLA E 8 -LUI T5,8009 -LW T5,E334 (T5) -SRA T7,S5,0x7 -SLL T1,S5,0x1 -ANDI S5,T1,00FF -SLTIU T3,S5,0001 -SW T3,0048 (SP) -SB T7,011D (SP) -ADDU T1,S5,T5 -LBU T9,0000 (T1) -ANDI T4,S5,00A8 -OR T2,T7,T4 -SLL T0,T3,0x6 -OR T8,T2,T0 -OR S1,T9,T8 -ANDI T3,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T3,R0 -//7F0DB2E8: CB.24: SLA H 8 -LUI T7,8009 -LW T7,E334 (T7) -SRA T0,S6,0x7 -SLL T4,S6,0x1 -ANDI S6,T4,00FF -SLTIU T2,S6,0001 -SW T2,0048 (SP) -SB T0,011C (SP) -ADDU T4,S6,T7 -LBU T6,0000 (T4) -ANDI T5,S6,00A8 -OR T1,T0,T5 -SLL T8,T2,0x6 -OR T3,T1,T8 -OR S1,T6,T3 -ANDI T2,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T2,R0 -//7F0DB330: CB.25: SLA L 8 -LUI T0,8009 -LW T0,E334 (T0) -SRA T8,S7,0x7 -SLL T5,S7,0x1 -ANDI S7,T5,00FF -SLTIU T1,S7,0001 -SW T1,0048 (SP) -SB T8,011B (SP) -ADDU T5,S7,T0 -LBU T9,0000 (T5) -ANDI T7,S7,00A8 -OR T4,T8,T7 -SLL T3,T1,0x6 -OR T2,T4,T3 -OR S1,T9,T2 -ANDI T1,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T1,R0 -//7F0DB378: CB.26: SLA (HL) 15 -LW T8,028C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LHU T6,013C (SP) -ADDIU T7,T8,0007 -SW T7,028C (SP) ;cycles+=7 F total -ADDU T3,T6,T4 -LBU T0,0000 (T3) -ANDI T5,T0,00FF -SRA T7,T5,0x7 -SLL T2,T5,0x1 -LUI T5,8009 -LW T5,E334 (T5) -ANDI T1,T2,00FF -SB T0,0139 (SP) -SLTIU T8,T1,0001 -ANDI T4,T2,00A8 -OR T3,T7,T4 -SW T8,0048 (SP) -SB T2,0139 (SP) -SB T7,011A (SP) -ADDU T6,T1,T5 -LBU T7,0000 (T6) -SLL T0,T8,0x6 -LHU T8,013C (SP) -OR T9,T3,T0 -OR S1,T7,T9 -ANDI T4,S1,00FF -SLTI AT,T8,5B00 -BNE AT,R0,7F0DB40C -OR S1,T4,R0 -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -OR T3,T2,R0 -ADDU T2,T0,T8 -BEQ R0,R0,7F0DC598 -SB T3,0000 (T2) -//7F0DB40C: -LHU T1,013C (SP) -LHU T3,013C (SP) -LUI T6,8009 -SLTI AT,T1,5800 -BNEL AT,R0,7F0DB454 -SLTI AT,T3,4000 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LBU T5,0139 (SP) -LUI T4,8009 -ADDU T7,T6,T1 -SB T5,0000 (T7) -LHU T0,013C (SP) -LW T4,E32C (T4) -ADDIU T9,R0,0001 -ADDU T8,T4,T0 -BEQ R0,R0,7F0DC598 -SB T9,A800 (T8) -//7F0DB450: -SLTI AT,T3,4000 -BNE AT,R0,7F0DC598 -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LBU T2,0139 (SP) -ADDIU T5,R0,0001 -ADDU T1,T6,T3 -SB T2,0000 (T1) -LHU T7,013C (SP) -LUI T6,8009 -LW T6,E32C (T6) -ANDI T4,T7,1800 -SRA T0,T4,0x3 -ANDI T9,T7,00FF -OR T8,T0,T9 -ADDU T3,T6,T8 -BEQ R0,R0,7F0DC598 -SB T5,0000 (T3) -//7F0DB498: CB.27: SLA A 8 -LUI T2,8009 -LW T2,E334 (T2) -SRA T0,S0,0x7 -SLL T1,S0,0x1 -ANDI S0,T1,00FF -SLTIU T7,S0,0001 -SW T7,0048 (SP) -SB T0,0119 (SP) -ADDU T1,S0,T2 -LBU T4,0000 (T1) -ANDI T9,S0,00A8 -OR T6,T0,T9 -SLL T5,T7,0x6 -OR T3,T6,T5 -OR S1,T4,T3 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DB4E0: CB.28: SRA B 8 -SLL T9,S2,0x18 -SRA T8,T9,0x18 -SRA T6,T8,0x1 -LUI T8,8009 -LW T8,E334 (T8) -ANDI T1,S2,0001 -ANDI S2,T6,00FF -SLTIU T2,S2,0001 -SW T2,0048 (SP) -SB T1,0118 (SP) -ADDU T6,S2,T8 -LBU T5,0000 (T6) -ANDI T4,S2,00A8 -OR T3,T1,T4 -SLL T0,T2,0x6 -OR T9,T3,T0 -OR S1,T5,T9 -ANDI T2,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T2,R0 -//7F0DB530: CB.29: SRA C 8 -SLL T4,S3,0x18 -SRA T7,T4,0x18 -SRA T3,T7,0x1 -LUI T7,8009 -LW T7,E334 (T7) -ANDI T6,S3,0001 -ANDI S3,T3,00FF -SLTIU T8,S3,0001 -SW T8,0048 (SP) -SB T6,0117 (SP) -ADDU T3,S3,T7 -LBU T0,0000 (T3) -ANDI T5,S3,00A8 -OR T9,T6,T5 -SLL T1,T8,0x6 -OR T4,T9,T1 -OR S1,T0,T4 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DB580: CB.2A: SRA D 8 -SLL T5,S4,0x18 -SRA T2,T5,0x18 -SRA T9,T2,0x1 -LUI T2,8009 -LW T2,E334 (T2) -ANDI T3,S4,0001 -ANDI S4,T9,00FF -SLTIU T7,S4,0001 -SW T7,0048 (SP) -SB T3,0116 (SP) -ADDU T9,S4,T2 -LBU T1,0000 (T9) -ANDI T0,S4,00A8 -OR T4,T3,T0 -SLL T6,T7,0x6 -OR T5,T4,T6 -OR S1,T1,T5 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DB5D0: CB.2B: SRA E 8 -SLL T0,S5,0x18 -SRA T8,T0,0x18 -SRA T4,T8,0x1 -LUI T8,8009 -LW T8,E334 (T8) -ANDI T9,S5,0001 -ANDI S5,T4,00FF -SLTIU T2,S5,0001 -SW T2,0048 (SP) -SB T9,0115 (SP) -ADDU T4,S5,T8 -LBU T6,0000 (T4) -ANDI T1,S5,00A8 -OR T5,T9,T1 -SLL T3,T2,0x6 -OR T0,T5,T3 -OR S1,T6,T0 -ANDI T2,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T2,R0 -//7F0DB620: CB.2C: SRA H 8 -SLL T1,S6,0x18 -SRA T7,T1,0x18 -SRA T5,T7,0x1 -LUI T7,8009 -LW T7,E334 (T7) -ANDI T4,S6,0001 -ANDI S6,T5,00FF -SLTIU T8,S6,0001 -SW T8,0048 (SP) -SB T4,0114 (SP) -ADDU T5,S6,T7 -LBU T3,0000 (T5) -ANDI T6,S6,00A8 -OR T0,T4,T6 -SLL T9,T8,0x6 -OR T1,T0,T9 -OR S1,T3,T1 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DB670: CB.2D: SRA L 8 -SLL T6,S7,0x18 -SRA T2,T6,0x18 -SRA T0,T2,0x1 -LUI T2,8009 -LW T2,E334 (T2) -ANDI T5,S7,0001 -ANDI S7,T0,00FF -SLTIU T7,S7,0001 -SW T7,0048 (SP) -SB T5,0113 (SP) -ADDU T0,S7,T2 -LBU T9,0000 (T0) -ANDI T3,S7,00A8 -OR T1,T5,T3 -SLL T4,T7,0x6 -OR T6,T1,T4 -OR S1,T9,T6 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DB6C0: CB.2E: SRA (HL) 15 -LW T5,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T8,013C (SP) -ADDIU T3,T5,0007 -SW T3,028C (SP) ;cycles+=7 F total -ADDU T4,T8,T1 -LBU T0,0000 (T4) -SB T0,0139 (SP) -LB T6,0139 (SP) -ANDI T8,T0,0001 -SB T8,0112 (SP) -SRA T7,T6,0x1 -LUI T6,8009 -LW T6,E334 (T6) -ANDI T5,T7,00FF -SLTIU T3,T5,0001 -ANDI T4,T7,00A8 -OR T2,T8,T4 -SW T3,0048 (SP) -SB T7,0139 (SP) -ADDU T1,T5,T6 -LBU T8,0000 (T1) -SLL T0,T3,0x6 -LHU T3,013C (SP) -OR T9,T2,T0 -OR S1,T8,T9 -ANDI T4,S1,00FF -SLTI AT,T3,5B00 -BNE AT,R0,7F0DB754 -OR S1,T4,R0 -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -OR T2,T7,R0 -ADDU T7,T0,T3 -BEQ R0,R0,7F0DC598 -SB T2,0000 (T7) -//7F0DB754: -LHU T5,013C (SP) -LHU T2,013C (SP) -LUI T1,8009 -SLTI AT,T5,5800 -BNEL AT,R0,7F0DB79C -SLTI AT,T2,4000 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LBU T6,0139 (SP) -LUI T4,8009 -ADDU T8,T1,T5 -SB T6,0000 (T8) -LHU T0,013C (SP) -LW T4,E32C (T4) -ADDIU T9,R0,0001 -ADDU T3,T4,T0 -BEQ R0,R0,7F0DC598 -SB T9,A800 (T3) -//7F0DB798: -SLTI AT,T2,4000 -BNE AT,R0,7F0DC598 -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LBU T7,0139 (SP) -ADDIU T6,R0,0001 -ADDU T5,T1,T2 -SB T7,0000 (T5) -LHU T8,013C (SP) -LUI T1,8009 -LW T1,E32C (T1) -ANDI T4,T8,1800 -SRA T0,T4,0x3 -ANDI T9,T8,00FF -OR T3,T0,T9 -ADDU T2,T1,T3 -BEQ R0,R0,7F0DC598 -SB T6,0000 (T2) -//7F0DB7E0: CB.2F: SRA A 8 -SLL T5,S0,0x18 -SRA T4,T5,0x18 -SRA T8,T4,0x1 -LUI T4,8009 -LW T4,E334 (T4) -ANDI T1,S0,0001 -ANDI S0,T8,00FF -SLTIU T9,S0,0001 -SW T9,0048 (SP) -SB T1,0111 (SP) -ADDU T8,S0,T4 -LBU T0,0000 (T8) -ANDI T3,S0,00A8 -OR T6,T1,T3 -SLL T7,T9,0x6 -OR T5,T6,T7 -OR S1,T0,T5 -ANDI T9,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T9,R0 -//7F0DB830: CB.30: SLS B 8 -SLL T3,S2,0x1 -ORI T2,T3,0001 -LUI T3,8009 -LW T3,E334 (T3) -SRA T4,S2,0x7 -ANDI S2,T2,00FF -SLTIU T7,S2,0001 -SW T7,0048 (SP) -SB T4,0110 (SP) -ADDU T2,S2,T3 -LBU T6,0000 (T2) -ANDI T8,S2,00A8 -OR T0,T4,T8 -SLL T9,T7,0x6 -OR T1,T0,T9 -OR S1,T6,T1 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DB87C: CB.31: SLS C 8 -SLL T8,S3,0x1 -ORI T5,T8,0001 -LUI T8,8009 -LW T8,E334 (T8) -SRA T3,S3,0x7 -ANDI S3,T5,00FF -SLTIU T9,S3,0001 -SW T9,0048 (SP) -SB T3,010F (SP) -ADDU T5,S3,T8 -LBU T0,0000 (T5) -ANDI T2,S3,00A8 -OR T6,T3,T2 -SLL T7,T9,0x6 -OR T4,T6,T7 -OR S1,T0,T4 -ANDI T9,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T9,R0 -//7F0DB8C8: CB.32: SLS D 8 -SLL T2,S4,0x1 -ORI T1,T2,0001 -LUI T2,8009 -LW T2,E334 (T2) -SRA T8,S4,0x7 -ANDI S4,T1,00FF -SLTIU T7,S4,0001 -SW T7,0048 (SP) -SB T8,010E (SP) -ADDU T1,S4,T2 -LBU T6,0000 (T1) -ANDI T5,S4,00A8 -OR T0,T8,T5 -SLL T9,T7,0x6 -OR T3,T0,T9 -OR S1,T6,T3 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DB914: CB.33: SLS E 8 -SLL T5,S5,0x1 -ORI T4,T5,0001 -LUI T5,8009 -LW T5,E334 (T5) -SRA T2,S5,0x7 -ANDI S5,T4,00FF -SLTIU T9,S5,0001 -SW T9,0048 (SP) -SB T2,010D (SP) -ADDU T4,S5,T5 -LBU T0,0000 (T4) -ANDI T1,S5,00A8 -OR T6,T2,T1 -SLL T7,T9,0x6 -OR T8,T6,T7 -OR S1,T0,T8 -ANDI T9,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T9,R0 -//7F0DB960: CB.34: SLS H 8 -SLL T1,S6,0x1 -ORI T3,T1,0001 -LUI T1,8009 -LW T1,E334 (T1) -SRA T5,S6,0x7 -ANDI S6,T3,00FF -SLTIU T7,S6,0001 -SW T7,0048 (SP) -SB T5,010C (SP) -ADDU T3,S6,T1 -LBU T6,0000 (T3) -ANDI T4,S6,00A8 -OR T0,T5,T4 -SLL T9,T7,0x6 -OR T2,T0,T9 -OR S1,T6,T2 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DB9AC: CB.35: SLS L 8 -SLL T4,S7,0x1 -ORI T8,T4,0001 -LUI T4,8009 -LW T4,E334 (T4) -SRA T1,S7,0x7 -ANDI S7,T8,00FF -SLTIU T9,S7,0001 -SW T9,0048 (SP) -SB T1,010B (SP) -ADDU T8,S7,T4 -LBU T0,0000 (T8) -ANDI T3,S7,00A8 -OR T6,T1,T3 -SLL T7,T9,0x6 -OR T5,T6,T7 -OR S1,T0,T5 -ANDI T9,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T9,R0 -//7F0DB9F8: CB.36: SLS (HL) 15 -LW T1,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LHU T2,013C (SP) -ADDIU T3,T1,0007 -SW T3,028C (SP) ;cycles+=7 F total -ADDU T7,T2,T6 -LBU T4,0000 (T7) -ANDI T8,T4,00FF -SLL T5,T8,0x1 -ORI T9,T5,0001 -LUI T5,8009 -LW T5,E334 (T5) -ANDI T1,T9,00FF -SRA T2,T8,0x7 -SB T4,0139 (SP) -SLTIU T3,T1,0001 -ANDI T7,T9,00A8 -OR T4,T2,T7 -SW T3,0048 (SP) -SB T9,0139 (SP) -SB T2,010A (SP) -ADDU T6,T1,T5 -LBU T2,0000 (T6) -SLL T0,T3,0x6 -LHU T3,013C (SP) -OR T8,T4,T0 -OR S1,T2,T8 -ANDI T7,S1,00FF -SLTI AT,T3,5B00 -BNE AT,R0,7F0DBA90 -OR S1,T7,R0 -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -OR T4,T9,R0 -ADDU T9,T0,T3 -BEQ R0,R0,7F0DC598 -SB T4,0000 (T9) -//7F0DBA90: -LHU T1,013C (SP) -LHU T4,013C (SP) -LUI T6,8009 -SLTI AT,T1,5800 -BNEL AT,R0,7F0DBAD8 -SLTI AT,T4,4000 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LBU T5,0139 (SP) -LUI T7,8009 -ADDU T2,T6,T1 -SB T5,0000 (T2) -LHU T0,013C (SP) -LW T7,E32C (T7) -ADDIU T8,R0,0001 -ADDU T3,T7,T0 -BEQ R0,R0,7F0DC598 -SB T8,A800 (T3) -//7F0DBAD4: -SLTI AT,T4,4000 -BNE AT,R0,7F0DC598 -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -LBU T9,0139 (SP) -ADDIU T5,R0,0001 -ADDU T1,T6,T4 -SB T9,0000 (T1) -LHU T2,013C (SP) -LUI T6,8009 -LW T6,E32C (T6) -ANDI T7,T2,1800 -SRA T0,T7,0x3 -ANDI T8,T2,00FF -OR T3,T0,T8 -ADDU T4,T6,T3 -BEQ R0,R0,7F0DC598 -SB T5,0000 (T4) -//7F0DBB1C: CB.37: SLS A 8 -SLL T1,S0,0x1 -ORI T7,T1,0001 -LUI T1,8009 -LW T1,E334 (T1) -SRA T8,S0,0x7 -ANDI S0,T7,00FF -SLTIU T0,S0,0001 -SW T0,0048 (SP) -SB T8,0109 (SP) -ADDU T7,S0,T1 -LBU T2,0000 (T7) -ANDI T6,S0,00A8 -OR T3,T8,T6 -SLL T4,T0,0x6 -OR T9,T3,T4 -OR S1,T2,T9 -ANDI T0,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T0,R0 -//7F0DBB68: CB.38: SRL B 8 -LUI T8,8009 -LW T8,E334 (T8) -ANDI T4,S2,0001 -SRL T6,S2,0x1 -ANDI S2,T6,00FF -SLTIU T3,S2,0001 -SW T3,0048 (SP) -SB T4,0108 (SP) -ADDU T6,S2,T8 -LBU T5,0000 (T6) -ANDI T1,S2,00A8 -OR T7,T4,T1 -SLL T9,T3,0x6 -OR T0,T7,T9 -OR S1,T5,T0 -ANDI T3,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T3,R0 -//7F0DBBB0: CB.39: SRL C 8 -LUI T4,8009 -LW T4,E334 (T4) -ANDI T9,S3,0001 -SRL T1,S3,0x1 -ANDI S3,T1,00FF -SLTIU T7,S3,0001 -SW T7,0048 (SP) -SB T9,0107 (SP) -ADDU T1,S3,T4 -LBU T2,0000 (T1) -ANDI T8,S3,00A8 -OR T6,T9,T8 -SLL T0,T7,0x6 -OR T3,T6,T0 -OR S1,T2,T3 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DBBF8: CB.3A: SRL D 8 -LUI T9,8009 -LW T9,E334 (T9) -ANDI T0,S4,0001 -SRL T8,S4,0x1 -ANDI S4,T8,00FF -SLTIU T6,S4,0001 -SW T6,0048 (SP) -SB T0,0106 (SP) -ADDU T8,S4,T9 -LBU T5,0000 (T8) -ANDI T4,S4,00A8 -OR T1,T0,T4 -SLL T3,T6,0x6 -OR T7,T1,T3 -OR S1,T5,T7 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DBC40: CB.3B: SRL E 8 -LUI T0,8009 -LW T0,E334 (T0) -ANDI T3,S5,0001 -SRL T4,S5,0x1 -ANDI S5,T4,00FF -SLTIU T1,S5,0001 -SW T1,0048 (SP) -SB T3,0105 (SP) -ADDU T4,S5,T0 -LBU T2,0000 (T4) -ANDI T9,S5,00A8 -OR T8,T3,T9 -SLL T7,T1,0x6 -OR T6,T8,T7 -OR S1,T2,T6 -ANDI T1,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T1,R0 -//7F0DBC88: CB.3C: SRL H 8 -LUI T3,8009 -LW T3,E334 (T3) -ANDI T7,S6,0001 -SRL T9,S6,0x1 -ANDI S6,T9,00FF -SLTIU T8,S6,0001 -SW T8,0048 (SP) -SB T7,0104 (SP) -ADDU T9,S6,T3 -LBU T5,0000 (T9) -ANDI T0,S6,00A8 -OR T4,T7,T0 -SLL T6,T8,0x6 -OR T1,T4,T6 -OR S1,T5,T1 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DBCD0: CB.3D: SRL L 8 -LUI T7,8009 -LW T7,E334 (T7) -ANDI T6,S7,0001 -SRL T0,S7,0x1 -ANDI S7,T0,00FF -SLTIU T4,S7,0001 -SW T4,0048 (SP) -SB T6,0103 (SP) -ADDU T0,S7,T7 -LBU T2,0000 (T0) -ANDI T3,S7,00A8 -OR T9,T6,T3 -SLL T1,T4,0x6 -OR T8,T9,T1 -OR S1,T2,T8 -ANDI T4,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T4,R0 -//7F0DBD18: CB.3E: SRL (HL) 15 -LW T6,028C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T5,013C (SP) -ADDIU T3,T6,0007 -SW T3,028C (SP) ;cycles+=7 F total -ADDU T1,T5,T9 -LBU T7,0000 (T1) -ANDI T0,T7,00FF -ANDI T3,T0,0001 -SRL T8,T0,0x1 -LUI T0,8009 -LW T0,E334 (T0) -ANDI T4,T8,00FF -SB T7,0139 (SP) -SLTIU T6,T4,0001 -ANDI T9,T8,00A8 -OR T1,T3,T9 -SW T6,0048 (SP) -SB T8,0139 (SP) -SB T3,0102 (SP) -ADDU T5,T4,T0 -LBU T3,0000 (T5) -SLL T7,T6,0x6 -LHU T6,013C (SP) -OR T2,T1,T7 -OR S1,T3,T2 -ANDI T9,S1,00FF -SLTI AT,T6,5B00 -BNE AT,R0,7F0DBDAC -OR S1,T9,R0 -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -OR T1,T8,R0 -ADDU T8,T7,T6 -BEQ R0,R0,7F0DC598 -SB T1,0000 (T8) -//7F0DBDAC: -LHU T4,013C (SP) -LHU T1,013C (SP) -LUI T5,8009 -SLTI AT,T4,5800 -BNEL AT,R0,7F0DBDF4 -SLTI AT,T1,4000 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LBU T0,0139 (SP) -LUI T9,8009 -ADDU T3,T5,T4 -SB T0,0000 (T3) -LHU T7,013C (SP) -LW T9,E32C (T9) -ADDIU T2,R0,0001 -ADDU T6,T9,T7 -BEQ R0,R0,7F0DC598 -SB T2,A800 (T6) -//7F0DBDF0: -SLTI AT,T1,4000 -BNE AT,R0,7F0DC598 -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LBU T8,0139 (SP) -ADDIU T0,R0,0001 -ADDU T4,T5,T1 -SB T8,0000 (T4) -LHU T3,013C (SP) -LUI T5,8009 -LW T5,E32C (T5) -ANDI T9,T3,1800 -SRA T7,T9,0x3 -ANDI T2,T3,00FF -OR T6,T7,T2 -ADDU T1,T5,T6 -BEQ R0,R0,7F0DC598 -SB T0,0000 (T1) -//7F0DBE38: CB.3F: SRL A 8 -LUI T8,8009 -LW T8,E334 (T8) -ANDI T7,S0,0001 -SRL T4,S0,0x1 -ANDI S0,T4,00FF -SLTIU T3,S0,0001 -SW T3,0048 (SP) -SB T7,0101 (SP) -ADDU T4,S0,T8 -LBU T9,0000 (T4) -ANDI T2,S0,00A8 -OR T5,T7,T2 -SLL T0,T3,0x6 -OR T1,T5,T0 -OR S1,T9,T1 -ANDI T3,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T3,R0 -//7F0DBE80: CB.C0-FF: SET cmds -SRA T2,T7,0x3 -ANDI T5,T7,00C7 ;T5= CB.cmd & C7: SET(RES|BIT) | register -ANDI T6,T2,0007 ;T6=(CB.cmd>>3) & 7: BITCOUNT -SLTI AT,T5,0088 -SB T6,0100 (SP) ;SP+100= BIT -BNE AT,R0,7F0DBEC0 ;branch if a BIT cmd (40-7F) -SW T5,0048 (SP) ;SP+48= CMD | register -ADDIU T0,T5,FF40 -SLTIU AT,T0,0008 -BEQ AT,R0,7F0DC598 ;continue if unknown -SLL T0,T0,0x2 -LUI AT,8006 -ADDU AT,AT,T0 -LW T0,C62C (AT) ;T0=8005C62C+offset: p->handler for SET cmds -JR T0 -NOP -//7F0DBEC0: CB,80-BF: RES cmds -LW T8,0048 (SP) -LW T9,0048 (SP) -SLTI AT,T8,0048 -BNE AT,R0,7F0DBEF8 -ADDIU T1,T9,FFC0 -ADDIU T4,T8,FF80 -SLTIU AT,T4,0008 -BEQ AT,R0,7F0DC598 -SLL T4,T4,0x2 -LUI AT,8006 -ADDU AT,AT,T4 -LW T4,C64C (AT) ;T4=8005C64C+offset: p->handler -JR T4 -NOP -//7F0DBEF8: CB.40-7F: BIT cmds -SLTIU AT,T1,0008 -BEQ AT,R0,7F0DC598 -SLL T1,T1,0x2 -LUI AT,8006 -ADDU AT,AT,T1 -LW T1,C66C (AT) ;T1=8005C66C+offset: p->handler -JR T1 -NOP -//7F0DBF18: BIT x,B 8 -LBU T3,0100 (SP) -ADDIU T2,R0,0001 -ADDIU T0,R0,0054 -SLLV T6,T2,T3 -AND T7,S2,T6 -BEQ T7,R0,7F0DBF3C -ADDIU T5,R0,0010 -BEQ R0,R0,7F0DBF40 -SW T5,0044 (SP) -//7F0DBF3C: -SW T0,0044 (SP) -LW T8,0044 (SP) -ANDI T4,S1,0001 -ANDI T1,S2,0028 -OR T9,T8,T4 -OR S1,T9,T1 -ANDI T2,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T2,R0 -//7F0DBF60: BIT x,C 8 -LBU T3,0100 (SP) -ADDIU T6,R0,0001 -ADDIU T8,R0,0054 -SLLV T7,T6,T3 -AND T5,S3,T7 -BEQ T5,R0,7F0DBF84 -ADDIU T0,R0,0010 -BEQ R0,R0,7F0DBF88 -SW T0,0048 (SP) -//7F0DBF84: -SW T8,0048 (SP) -LW T4,0048 (SP) -ANDI T9,S1,0001 -ANDI T2,S3,0028 -OR T1,T4,T9 -OR S1,T1,T2 -ANDI T6,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T6,R0 -//7F0DBFA8: BIT x,D 8 -LBU T3,0100 (SP) -ADDIU T7,R0,0001 -ADDIU T4,R0,0054 -SLLV T5,T7,T3 -AND T0,S4,T5 -BEQ T0,R0,7F0DBFCC -ADDIU T8,R0,0010 -BEQ R0,R0,7F0DBFD0 -SW T8,0048 (SP) -//7F0DBFCC: -SW T4,0048 (SP) -LW T9,0048 (SP) -ANDI T1,S1,0001 -ANDI T6,S4,0028 -OR T2,T9,T1 -OR S1,T2,T6 -ANDI T7,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T7,R0 -//7F0DBFF0: BIT x,E 8 -LBU T3,0100 (SP) ;T3=BIT -ADDIU T5,R0,0001 -ADDIU T9,R0,0054 -SLLV T0,T5,T3 ;T0=1<SP+48 if bit set -//7F0DC014: bit not set sets ZERO, SIGN -SW T9,0048 (SP) ;54->SP+48 if bit set -LW T1,0048 (SP) -ANDI T2,S1,0001 ;T2= retained flags -ANDI T7,S5,0028 -OR T6,T1,T2 -OR S1,T6,T7 -ANDI T5,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T5,R0 -//7F0DC038: BIT x,H 8 -LBU T3,0100 (SP) -ADDIU T0,R0,0001 -ADDIU T1,R0,0054 -SLLV T8,T0,T3 -AND T4,S6,T8 -BEQ T4,R0,7F0DC05C -ADDIU T9,R0,0010 -BEQ R0,R0,7F0DC060 -SW T9,0048 (SP) -//7F0DC05C: -SW T1,0048 (SP) -LW T2,0048 (SP) -ANDI T6,S1,0001 -ANDI T5,S6,0028 -OR T7,T2,T6 -OR S1,T7,T5 -ANDI T0,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T0,R0 -//7F0DC080: BIT x,L 8 -LBU T3,0100 (SP) -ADDIU T8,R0,0001 -ADDIU T2,R0,0054 -SLLV T4,T8,T3 -AND T9,S7,T4 -BEQ T9,R0,7F0DC0A4 -ADDIU T1,R0,0010 -BEQ R0,R0,7F0DC0A8 -SW T1,0048 (SP) -//7F0DC0A4: -SW T2,0048 (SP) -LW T6,0048 (SP) -ANDI T7,S1,0001 -ANDI T0,S7,0028 -OR T5,T6,T7 -OR S1,T5,T0 -ANDI T8,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T8,R0 -//7F0DC0C8: BIT x,(HL) 15 -LW T3,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -LHU T9,013C (SP) -ADDIU T4,T3,0004 -LBU T7,0100 (SP) -SW T4,028C (SP) ;cycles+=4 -ADDU T2,T9,T1 -LBU T6,0000 (T2) -ADDIU T5,R0,0001 -SLLV T0,T5,T7 -AND T8,T6,T0 -BEQ T8,R0,7F0DC10C -SB T6,0139 (SP) -ADDIU T3,R0,0010 -BEQ R0,R0,7F0DC114 -SW T3,0048 (SP) -//7F0DC10C: -ADDIU T4,R0,0054 -SW T4,0048 (SP) -//7F0DC114: -LW T9,0048 (SP) -LBU T5,0139 (SP) -LHU T0,013C (SP) -ANDI T1,S1,0001 -OR T2,T9,T1 -ANDI T7,T5,0028 -OR S1,T2,T7 -ANDI T6,S1,00FF -SLTI AT,T0,5B00 -BNE AT,R0,7F0DC158 -OR S1,T6,R0 -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LBU T8,0139 (SP) -ADDU T4,T3,T0 -BEQ R0,R0,7F0DC598 -SB T8,0000 (T4) -//7F0DC158: -LHU T9,013C (SP) -LHU T8,013C (SP) -LUI T5,8009 -SLTI AT,T9,5800 -BNEL AT,R0,7F0DC1A0 -SLTI AT,T8,4000 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LBU T1,0139 (SP) -LUI T6,8009 -ADDU T2,T5,T9 -SB T1,0000 (T2) -LHU T3,013C (SP) -LW T6,E32C (T6) -ADDIU T7,R0,0001 -ADDU T0,T6,T3 -BEQ R0,R0,7F0DC598 -SB T7,A800 (T0) -//7F0DC19C: -SLTI AT,T8,4000 -BNE AT,R0,7F0DC598 -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -LBU T4,0139 (SP) -ADDIU T1,R0,0001 -ADDU T9,T5,T8 -SB T4,0000 (T9) -LHU T2,013C (SP) -LUI T5,8009 -LW T5,E32C (T5) -ANDI T6,T2,1800 -SRA T3,T6,0x3 -ANDI T7,T2,00FF -OR T0,T3,T7 -ADDU T8,T5,T0 -BEQ R0,R0,7F0DC598 -SB T1,0000 (T8) -//7F0DC1E4: BIT x,A 8 -LBU T4,0100 (SP) -ADDIU T9,R0,0001 -ADDIU T7,R0,0054 -SLLV T6,T9,T4 -AND T2,S0,T6 -BEQ T2,R0,7F0DC208 -ADDIU T3,R0,0010 -BEQ R0,R0,7F0DC20C -SW T3,0048 (SP) -//7F0DC208: -SW T7,0048 (SP) -LW T5,0048 (SP) -ANDI T0,S1,0001 -ANDI T8,S0,0028 -OR T1,T5,T0 -OR S1,T1,T8 -ANDI T9,S1,00FF -BEQ R0,R0,7F0DC598 -OR S1,T9,R0 -//7F0DC22C: -LBU T4,0100 (SP) -ADDIU T6,R0,0001 -SLLV T2,T6,T4 -NOR T3,T2,R0 -AND S2,S2,T3 -ANDI T7,S2,00FF -BEQ R0,R0,7F0DC598 -OR S2,T7,R0 -//7F0DC24C: -LBU T5,0100 (SP) -ADDIU T0,R0,0001 -SLLV T1,T0,T5 -NOR T8,T1,R0 -AND S3,S3,T8 -ANDI T9,S3,00FF -BEQ R0,R0,7F0DC598 -OR S3,T9,R0 -//7F0DC26C: -LBU T6,0100 (SP) -ADDIU T4,R0,0001 -SLLV T2,T4,T6 -NOR T3,T2,R0 -AND S4,S4,T3 -ANDI T7,S4,00FF -BEQ R0,R0,7F0DC598 -OR S4,T7,R0 -//7F0DC28C: -LBU T0,0100 (SP) -ADDIU T5,R0,0001 -SLLV T1,T5,T0 -NOR T8,T1,R0 -AND S5,S5,T8 -ANDI T9,S5,00FF -BEQ R0,R0,7F0DC598 -OR S5,T9,R0 -//7F0DC2AC: -LBU T4,0100 (SP) -ADDIU T6,R0,0001 -SLLV T2,T6,T4 -NOR T3,T2,R0 -AND S6,S6,T3 -ANDI T7,S6,00FF -BEQ R0,R0,7F0DC598 -OR S6,T7,R0 -//7F0DC2CC: -LBU T5,0100 (SP) -ADDIU T0,R0,0001 -SLLV T1,T0,T5 -NOR T8,T1,R0 -AND S7,S7,T8 -ANDI T9,S7,00FF -BEQ R0,R0,7F0DC598 -OR S7,T9,R0 -//7F0DC2EC: -LW T6,028C (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T2,013C (SP) -ADDIU T4,T6,0004 -LBU T5,0100 (SP) -SW T4,028C (SP) ;cycles+=4 -ADDU T7,T2,T3 -LBU T0,0000 (T7) -LHU T4,013C (SP) -ADDIU T1,R0,0001 -SLLV T8,T1,T5 -NOR T9,T8,R0 -AND T6,T0,T9 -SB T0,0139 (SP) -SLTI AT,T4,5B00 -BNE AT,R0,7F0DC348 -SB T6,0139 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -ADDU T7,T3,T4 -BEQ R0,R0,7F0DC598 -SB T6,0000 (T7) -//7F0DC348: -LHU T1,013C (SP) -LHU T2,013C (SP) -LUI T8,8009 -SLTI AT,T1,5800 -BNEL AT,R0,7F0DC390 -SLTI AT,T2,4000 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LBU T5,0139 (SP) -LUI T6,8009 -ADDU T0,T8,T1 -SB T5,0000 (T0) -LHU T3,013C (SP) -LW T6,E32C (T6) -ADDIU T9,R0,0001 -ADDU T4,T6,T3 -BEQ R0,R0,7F0DC598 -SB T9,A800 (T4) -//7F0DC38C: -SLTI AT,T2,4000 -BNE AT,R0,7F0DC598 -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LBU T7,0139 (SP) -ADDIU T5,R0,0001 -ADDU T1,T8,T2 -SB T7,0000 (T1) -LHU T0,013C (SP) -LUI T8,8009 -LW T8,E32C (T8) -ANDI T6,T0,1800 -SRA T3,T6,0x3 -ANDI T9,T0,00FF -OR T4,T3,T9 -ADDU T2,T8,T4 -BEQ R0,R0,7F0DC598 -SB T5,0000 (T2) -//7F0DC3D4: -LBU T7,0100 (SP) -ADDIU T1,R0,0001 -SLLV T6,T1,T7 -NOR T0,T6,R0 -AND S0,S0,T0 -ANDI T3,S0,00FF -BEQ R0,R0,7F0DC598 -OR S0,T3,R0 -//7F0DC3F4: -LBU T9,0100 (SP) -ADDIU T8,R0,0001 -SLLV T4,T8,T9 -OR S2,S2,T4 -ANDI T5,S2,00FF -BEQ R0,R0,7F0DC598 -OR S2,T5,R0 -//7F0DC410: -LBU T2,0100 (SP) -ADDIU T1,R0,0001 -SLLV T7,T1,T2 -OR S3,S3,T7 -ANDI T6,S3,00FF -BEQ R0,R0,7F0DC598 -OR S3,T6,R0 -//7F0DC42C: -LBU T0,0100 (SP) -ADDIU T3,R0,0001 -SLLV T8,T3,T0 -OR S4,S4,T8 -ANDI T9,S4,00FF -BEQ R0,R0,7F0DC598 -OR S4,T9,R0 -//7F0DC448: -LBU T4,0100 (SP) -ADDIU T5,R0,0001 -SLLV T1,T5,T4 -OR S5,S5,T1 -ANDI T2,S5,00FF -BEQ R0,R0,7F0DC598 -OR S5,T2,R0 -//7F0DC464: -LBU T7,0100 (SP) -ADDIU T6,R0,0001 -SLLV T3,T6,T7 -OR S6,S6,T3 -ANDI T0,S6,00FF -BEQ R0,R0,7F0DC598 -OR S6,T0,R0 -//7F0DC480: -LBU T8,0100 (SP) -ADDIU T9,R0,0001 -SLLV T5,T9,T8 -OR S7,S7,T5 -ANDI T4,S7,00FF -BEQ R0,R0,7F0DC598 -OR S7,T4,R0 -//7F0DC49C: -LW T1,028C (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T6,013C (SP) -ADDIU T2,T1,0004 -SW T2,028C (SP) ;cycles+=4 -ADDU T3,T6,T7 -LBU T0,0000 (T3) -LBU T9,0100 (SP) -LHU T1,013C (SP) -ADDIU T8,R0,0001 -SLLV T5,T8,T9 -OR T4,T0,T5 -SB T0,0139 (SP) -SLTI AT,T1,5B00 -BNE AT,R0,7F0DC4F4 -SB T4,0139 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=p->spectrum.ROMs -ADDU T7,T6,T1 -BEQ R0,R0,7F0DC598 -SB T4,0000 (T7) -//7F0DC4F4: -LHU T3,013C (SP) -LHU T2,013C (SP) -LUI T9,8009 -SLTI AT,T3,5800 -BNEL AT,R0,7F0DC53C -SLTI AT,T2,4000 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LBU T8,0139 (SP) -LUI T4,8009 -ADDU T0,T9,T3 -SB T8,0000 (T0) -LHU T6,013C (SP) -LW T4,E32C (T4) -ADDIU T5,R0,0001 -ADDU T1,T4,T6 -BEQ R0,R0,7F0DC598 -SB T5,A800 (T1) -//7F0DC538: -SLTI AT,T2,4000 -BNE AT,R0,7F0DC598 -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LBU T7,0139 (SP) -ADDIU T8,R0,0001 -ADDU T3,T9,T2 -SB T7,0000 (T3) -LHU T0,013C (SP) -LUI T9,8009 -LW T9,E32C (T9) -ANDI T4,T0,1800 -SRA T6,T4,0x3 -ANDI T5,T0,00FF -OR T1,T6,T5 -ADDU T2,T9,T1 -BEQ R0,R0,7F0DC598 -SB T8,0000 (T2) -//7F0DC580: -LBU T7,0100 (SP) -ADDIU T3,R0,0001 -SLLV T4,T3,T7 -OR S0,S0,T4 -ANDI T0,S0,00FF -OR S0,T0,R0 -//7F0DC598: -LBU T6,0287 (SP) -LBU T5,013A (SP) -BEQ T6,R0,7F0E27FC -SLTIU AT,T5,0008 -BEQ AT,R0,7F0E27FC -SLL T5,T5,0x2 -LUI AT,8006 -ADDU AT,AT,T5 -LW T5,C68C (AT) ;T5=8005C68C+offset: p->handler -JR T5 -NOP -//7F0DC5C4: -BEQ R0,R0,7F0E27FC -LBU S2,0139 (SP) ;spec.B = SP+139 -//7F0DC5CC: -BEQ R0,R0,7F0E27FC -LBU S3,0139 (SP) ;spec.C = SP+139 -//7F0DC5D4: -BEQ R0,R0,7F0E27FC -LBU S4,0139 (SP) ;spec.D = SP+139 -//7F0DC5DC: -BEQ R0,R0,7F0E27FC -LBU S5,0139 (SP) ;spec.E = SP+139 -//7F0DC5E4: -BEQ R0,R0,7F0E27FC -LBU S6,0139 (SP) ;spec.H = SP+139 -//7F0DC5EC: -BEQ R0,R0,7F0E27FC -LBU S7,0139 (SP) ;spec.L = SP+139 -//7F0DC5F4: -BEQ R0,R0,7F0E27FC -LBU S0,0139 (SP) ;spec.A = SP+139 -//7F0DC5FC: CC: CALL Z,nn 17(10) -LW T9,028C (SP) -ANDI T8,S1,0040 -ADDIU T1,T9,000A -BEQ T8,R0,7F0DC7D4 -SW T1,028C (SP) ;cycles+=A -LHU T7,0292 (SP) -ADDIU T3,T1,0007 -SW T3,028C (SP) ;cycles+=7 11 total -ADDIU T4,T7,FFFE -ANDI T0,T4,FFFF -SLTI AT,T0,5B00 -BNE AT,R0,7F0DC64C -SH T4,0292 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T6,0298 (SP) -ADDU T1,T9,T0 -ADDIU T5,T6,0002 -BEQ R0,R0,7F0DC6D8 -SB T5,0000 (T1) ;spec.PC+=2 -//7F0DC64C: -LHU T8,0292 (SP) -LHU T1,0292 (SP) -LHU T2,0298 (SP) -SLTI AT,T8,5800 -BNE AT,R0,7F0DC690 -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -ADDIU T3,T2,0002 -LUI T9,8009 -ADDU T4,T7,T8 -SB T3,0000 (T4) ;spec.PC+=2 -LHU T0,0292 (SP) -LW T9,E32C (T9) -ADDIU T6,R0,0001 -ADDU T5,T9,T0 -BEQ R0,R0,7F0DC6D8 -SB T6,A800 (T5) -//7F0DC690: -SLTI AT,T1,4000 -BNE AT,R0,7F0DC6D8 -LHU T2,0298 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDIU T7,T2,0002 -ADDIU T4,R0,0001 -ADDU T3,T8,T1 -SB T7,0000 (T3) ;spec.PC+=2 -LHU T9,0292 (SP) -LUI T8,8009 -LW T8,E32C (T8) -ANDI T0,T9,1800 -SRA T6,T0,0x3 -ANDI T5,T9,00FF -OR T2,T6,T5 -ADDU T1,T8,T2 -SB T4,0000 (T1) -//7F0DC6D8: -LHU T7,0292 (SP) -LHU T2,0292 (SP) -LHU T0,0298 (SP) -ADDIU T3,T7,0001 -SLTI AT,T3,5B00 -BNE AT,R0,7F0DC710 -ADDIU T4,T2,0001 -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -ADDIU T9,T0,0002 ;spec.PC+2 -SRA T6,T9,0x8 -ADDU T8,T5,T7 -BEQ R0,R0,7F0DC7A8 -SB T6,0001 (T8) -//7F0DC710: -SLTI AT,T4,5800 -BNE AT,R0,7F0DC754 -LHU T1,0292 (SP) -LHU T1,0298 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -ADDIU T3,T1,0002 ;spec.PC+2 -SRA T0,T3,0x8 -ADDU T5,T9,T2 -SB T0,0001 (T5) -LUI T6,8009 -LW T6,E32C (T6) -LHU T8,0292 (SP) -ADDIU T7,R0,0001 -ADDU T4,T6,T8 -BEQ R0,R0,7F0DC7A8 -SB T7,A801 (T4) -//7F0DC754: -ADDIU T3,T1,0001 -SLTI AT,T3,4000 -BNE AT,R0,7F0DC7A8 -LHU T9,0298 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=p->spectrum.ROMs -ADDIU T2,T9,0002 ;spec.PC+2 -SRA T0,T2,0x8 -ADDU T6,T5,T1 -SB T0,0001 (T6) -LHU T7,0292 (SP) -LUI T1,8009 -LW T1,E32C (T1) -ADDIU T4,T7,0001 -ANDI T3,T4,1800 -SRA T9,T3,0x3 -ANDI T2,T4,00FF -OR T5,T9,T2 -ADDIU T8,R0,0001 -ADDU T0,T1,T5 -SB T8,0000 (T0) -//7F0DC7A8: -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -LHU T6,0298 (SP) -ADDU T9,T7,T6 -LBU T2,0001 (T9) -ADDU T3,T6,T7 -LBU T4,0000 (T3) ;T5=ROM+PC[1:0] -SLL T1,T2,0x8 -OR T5,T4,T1 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) ;nn->spec.PC -//7F0DC7D4: -LHU T8,0298 (SP) -ADDIU T0,T8,0002 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) ;spec.PC+=2 -//7F0DC7E4: CD: CALL nn 17 -LW T3,028C (SP) -LHU T2,0292 (SP); T2=spec.SP -LHU T5,0298 (SP) -ADDIU T7,T3,000A -ADDIU T4,T2,FFFE -ANDI T1,T4,FFFF -SW T7,028C (SP) ;cycles+=A -SLTI AT,T1,5B00 -ADDIU T9,T7,0007 -SW T9,028C (SP) ;cycles+=7 11 total -BNE AT,R0,7F0DC82C -SH T4,0292 (SP) ;spec.SP-=2 -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -ADDIU T8,T5,0002 ;PC+2 -ADDU T3,T0,T1 -BEQ R0,R0,7F0DC8B8 -SB T8,0000 (T3) ;PC+2 -> ROM+SP-1 -//7F0DC82C: -LHU T7,0292 (SP) -LHU T3,0292 (SP) -LHU T6,0298 (SP) -SLTI AT,T7,5800 -BNE AT,R0,7F0DC870 -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -ADDIU T9,T6,0002 -LUI T0,8009 -ADDU T4,T2,T7 -SB T9,0000 (T4) -LHU T1,0292 (SP) -LW T0,E32C (T0) -ADDIU T5,R0,0001 -ADDU T8,T0,T1 -BEQ R0,R0,7F0DC8B8 -SB T5,A800 (T8) -//7F0DC870: -SLTI AT,T3,4000 -BNE AT,R0,7F0DC8B8 -LHU T6,0298 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -ADDIU T2,T6,0002 -ADDIU T4,R0,0001 -ADDU T9,T7,T3 -SB T2,0000 (T9) -LHU T0,0292 (SP) -LUI T7,8009 -LW T7,E32C (T7) -ANDI T1,T0,1800 -SRA T5,T1,0x3 -ANDI T8,T0,00FF -OR T6,T5,T8 -ADDU T3,T7,T6 -SB T4,0000 (T3) -//7F0DC8B8: -LHU T2,0292 (SP) ;spec.SP -LHU T6,0292 (SP) -LHU T1,0298 (SP) -ADDIU T9,T2,0001 -SLTI AT,T9,5B00 -BNE AT,R0,7F0DC8F0 -ADDIU T4,T6,0001 -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDIU T0,T1,0002 ;T0= PC+2 -SRA T5,T0,0x8 -ADDU T7,T8,T2 -BEQ R0,R0,7F0DC988 -SB T5,0001 (T7) -//7F0DC8F0: -SLTI AT,T4,5800 -BNE AT,R0,7F0DC934 -LHU T3,0292 (SP) -LHU T3,0298 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=p->spectrum.ROMs -ADDIU T9,T3,0002 -SRA T1,T9,0x8 -ADDU T8,T0,T6 -SB T1,0001 (T8) -LUI T5,8009 -LW T5,E32C (T5) -LHU T7,0292 (SP) -ADDIU T2,R0,0001 -ADDU T4,T5,T7 -BEQ R0,R0,7F0DC988 -SB T2,A801 (T4) -//7F0DC934: -ADDIU T9,T3,0001 -SLTI AT,T9,4000 -BNE AT,R0,7F0DC988 -LHU T0,0298 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -ADDIU T6,T0,0002 -SRA T1,T6,0x8 -ADDU T5,T8,T3 -SB T1,0001 (T5) -LHU T2,0292 (SP) -LUI T3,8009 -LW T3,E32C (T3) -ADDIU T4,T2,0001 -ANDI T9,T4,1800 -SRA T0,T9,0x3 -ANDI T6,T4,00FF -OR T8,T0,T6 -ADDIU T7,R0,0001 -ADDU T1,T3,T8 -SB T7,0000 (T1) -//7F0DC988: -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T5,0298 (SP) -ADDU T0,T2,T5 -LBU T6,0001 (T0) -ADDU T9,T5,T2 -LBU T4,0000 (T9) ;T8=ROM+PC[1:0] -SLL T3,T6,0x8 -OR T8,T4,T3 -BEQ R0,R0,7F0E27FC -SH T8,0298 (SP) ;PC=nn -//7F0DC9B4: CE: ADC A,n 7 -LW T7,028C (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T9,0298 (SP) -ADDIU T1,T7,0007 -SW T1,028C (SP) ;cycles+=7 -ADDU T5,T9,T2 -LBU T0,0000 (T5) -ANDI T4,S1,0001 -ANDI T8,S1,0001 -ADDU T6,S0,T0 -ADDU T3,T6,T4 -ANDI T6,S0,000F -ANDI T5,T0,000F -ADDU T4,T6,T5 -ANDI T7,T3,00A8 -SRA T9,T3,0x8 -OR T2,T7,T9 -ADDU T1,T4,T8 -ADDIU AT,R0,000F -SLT T7,AT,T1 -SLL T9,T7,0x4 -OR T1,T3,R0 -NOR T5,S0,R0 -XOR T7,T1,S0 -SH T3,00FE (SP) -XOR T4,T5,T0 -LBU S0,00FF (SP) -ANDI T8,T4,0080 -OR T6,T2,T9 -AND T2,T8,T7 -SB T0,00FD (SP) -LHU T8,0298 (SP) -SRA T9,T2,0x5 -SLTIU T0,S0,0001 -SLL T3,T0,0x6 -OR T5,T6,T9 -OR S1,T5,T3 -ANDI T1,S1,00FF -ADDIU T7,T8,0001 -OR S1,T1,R0 -SW T0,0048 (SP) -BEQ R0,R0,7F0E27FC -SH T7,0298 (SP) -//7F0DCA64: CF: RST 08 11 -LHU T9,0292 (SP) -LW T2,028C (SP) -LUI T3,8009 -ADDIU T5,T9,FFFE -ANDI T0,T5,FFFF -SLTI AT,T0,5B00 -ADDIU T6,T2,000B -SW T6,028C (SP) ;cycles+=B -BNE AT,R0,7F0DCAA0 -SH T5,0292 (SP) -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -LHU T4,0298 (SP) -ADDU T1,T3,T0 -BEQ R0,R0,7F0DCB28 -SB T4,0000 (T1) -//7F0DCAA0: -LHU T8,0292 (SP) -LHU T4,0292 (SP) -LUI T2,8009 -SLTI AT,T8,5800 -BNEL AT,R0,7F0DCAE8 -SLTI AT,T4,4000 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T7,0298 (SP) -LUI T5,8009 -ADDU T6,T2,T8 -SB T7,0000 (T6) -LHU T3,0292 (SP) -LW T5,E32C (T5) -ADDIU T9,R0,0001 -ADDU T0,T5,T3 -BEQ R0,R0,7F0DCB28 -SB T9,A800 (T0) -//7F0DCAE4: -SLTI AT,T4,4000 -BNE AT,R0,7F0DCB28 -LUI T2,8009 -LW T2,E328 (T2) ;T2=p->spectrum.ROMs -LHU T1,0298 (SP) -ADDIU T7,R0,0001 -ADDU T8,T2,T4 -SB T1,0000 (T8) -LHU T6,0292 (SP) -LUI T2,8009 -LW T2,E32C (T2) -ANDI T5,T6,1800 -SRA T3,T5,0x3 -ANDI T9,T6,00FF -OR T0,T3,T9 -ADDU T4,T2,T0 -SB T7,0000 (T4) -LHU T1,0292 (SP) -LHU T2,0292 (SP) -LHU T5,0298 (SP) -ADDIU T8,T1,0001 -SLTI AT,T8,5B00 -BNE AT,R0,7F0DCB5C -ADDIU T0,T2,0001 -LUI T3,8009 -LW T3,E328 (T3) ;T3=p->spectrum.ROMs -SRA T6,T5,0x8 -ADDU T9,T3,T1 -BEQ R0,R0,7F0DCBEC -SB T6,0001 (T9) -//7F0DCB5C: -SLTI AT,T0,5800 -BNE AT,R0,7F0DCB9C -LHU T0,0292 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=p->spectrum.ROMs -LHU T7,0298 (SP) -LUI T1,8009 -ADDU T5,T8,T2 -SRA T4,T7,0x8 -SB T4,0001 (T5) -LHU T6,0292 (SP) -LW T1,E32C (T1) -ADDIU T3,R0,0001 -ADDU T9,T1,T6 -BEQ R0,R0,7F0DCBEC -SB T3,A801 (T9) -//7F0DCB9C: -ADDIU T7,T0,0001 -SLTI AT,T7,4000 -BNE AT,R0,7F0DCBEC -LHU T8,0298 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -SRA T2,T8,0x8 -ADDIU T1,R0,0001 -ADDU T5,T4,T0 -SB T2,0001 (T5) -LHU T6,0292 (SP) -LUI T0,8009 -LW T0,E32C (T0) -ADDIU T3,T6,0001 -ANDI T9,T3,1800 -SRA T7,T9,0x3 -ANDI T8,T3,00FF -OR T4,T7,T8 -ADDU T2,T0,T4 -SB T1,0000 (T2) -ADDIU T5,R0,0008 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) -//7F0DCBF8: D0: RET NC 11(5) -LW T6,028C (SP) -ANDI T3,S1,0001 -LUI T4,8009 -ADDIU T9,T6,0005 -BNE T3,R0,7F0E27FC -SW T9,028C (SP) ;cycles+=5 -LHU T0,0292 (SP) -LW T4,E328 (T4) ;T4=spectrum.ROMs -ADDIU T8,T9,0006 -SW T8,028C (SP) ;cycles+=6 B total -ADDU T5,T4,T0 -LBU T6,0001 (T5) -ADDU T1,T0,T4 -LBU T2,0000 (T1) -SLL T9,T6,0x8 -ADDIU T7,T0,0002 -OR T3,T2,T9 -SH T3,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T7,0292 (SP) -//7F0DCC48: D1: POP DE 10 -LW T8,028C (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T4,0292 (SP) -ADDIU T1,T8,000A -SW T1,028C (SP) ;cycles+=A -ADDU T6,T4,T5 -LBU S5,0000 (T6) -LBU S4,0001 (T6) -ADDIU T2,T4,0002 -BEQ R0,R0,7F0E27FC -SH T2,0292 (SP) -//7F0DCC78: D2: JP NC,nn 10 -LW T9,028C (SP) -ANDI T0,S1,0001 -LHU T7,0298 (SP) -ADDIU T3,T9,000A -BNE T0,R0,7F0DCCB8 -SW T3,028C (SP) ;cycles+=A -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -ADDU T6,T8,T7 -LBU T4,0001 (T6) -ADDU T1,T7,T8 -LBU T5,0000 (T1) -SLL T2,T4,0x8 -OR T9,T5,T2 -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0DCCB8: -LHU T3,0298 (SP) -ADDIU T0,T3,0002 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0DCCC8: D3: OUT (n),A 11 -LW T1,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T7,0298 (SP) -ADDIU A0,T1,000B -SW A0,028C (SP) ;cycles+=B -ADDU T4,T7,T6 -LBU A2,0000 (T4) ;A2=ROM+PC: port# -OR A1,S0,R0 ;A1=spec.A -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S0,R0 ;A3=spec.A -LW T5,028C (SP) -LHU T3,0298 (SP) -SW V0,0048 (SP) -ADDU T9,T5,V0 -ADDIU T0,T3,0001 -SW T9,028C (SP) ;cycles+=return value, 0 unless port written -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) ;PC+=1 -//7F0DCD14: D4: CALL NC,nn 17(10) -LW T1,028C (SP) -ANDI T7,S1,0001 -ADDIU T8,T1,000A -BNE T7,R0,7F0DCEEC -SW T8,028C (SP) ;cycles+=A -LHU T5,0292 (SP) -ADDIU T4,T8,0007 -SW T4,028C (SP) ;cycles+=7 11 total -ADDIU T2,T5,FFFE -ANDI T9,T2,FFFF -SLTI AT,T9,5B00 -BNE AT,R0,7F0DCD64 -SH T2,0292 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T3,0298 (SP) -ADDU T8,T1,T9 -ADDIU T0,T3,0002 -BEQ R0,R0,7F0DCDF0 -SB T0,0000 (T8) -//7F0DCD64: -LHU T7,0292 (SP) -LHU T8,0292 (SP) -LHU T6,0298 (SP) -SLTI AT,T7,5800 -BNE AT,R0,7F0DCDA8 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -ADDIU T4,T6,0002 -LUI T1,8009 -ADDU T2,T5,T7 -SB T4,0000 (T2) -LHU T9,0292 (SP) -LW T1,E32C (T1) -ADDIU T3,R0,0001 -ADDU T0,T1,T9 -BEQ R0,R0,7F0DCDF0 -SB T3,A800 (T0) -//7F0DCDA8: -SLTI AT,T8,4000 -BNE AT,R0,7F0DCDF0 -LHU T6,0298 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -ADDIU T5,T6,0002 -ADDIU T2,R0,0001 -ADDU T4,T7,T8 -SB T5,0000 (T4) -LHU T1,0292 (SP) -LUI T7,8009 -LW T7,E32C (T7) -ANDI T9,T1,1800 -SRA T3,T9,0x3 -ANDI T0,T1,00FF -OR T6,T3,T0 -ADDU T8,T7,T6 -SB T2,0000 (T8) -LHU T5,0292 (SP) -LHU T6,0292 (SP) -LHU T9,0298 (SP) -ADDIU T4,T5,0001 -SLTI AT,T4,5B00 -BNE AT,R0,7F0DCE28 -ADDIU T2,T6,0001 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T1,T9,0002 -SRA T3,T1,0x8 -ADDU T7,T0,T5 -BEQ R0,R0,7F0DCEC0 -SB T3,0001 (T7) -//7F0DCE28: -SLTI AT,T2,5800 -BNE AT,R0,7F0DCE6C -LHU T8,0292 (SP) -LHU T8,0298 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -ADDIU T4,T8,0002 -SRA T9,T4,0x8 -ADDU T0,T1,T6 -SB T9,0001 (T0) -LUI T3,8009 -LW T3,E32C (T3) -LHU T7,0292 (SP) -ADDIU T5,R0,0001 -ADDU T2,T3,T7 -BEQ R0,R0,7F0DCEC0 -SB T5,A801 (T2) -//7F0DCE6C: -ADDIU T4,T8,0001 -SLTI AT,T4,4000 -BNE AT,R0,7F0DCEC0 -LHU T1,0298 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T6,T1,0002 -SRA T9,T6,0x8 -ADDU T3,T0,T8 -SB T9,0001 (T3) -LHU T5,0292 (SP) -LUI T8,8009 -LW T8,E32C (T8) -ADDIU T2,T5,0001 -ANDI T4,T2,1800 -SRA T1,T4,0x3 -ANDI T6,T2,00FF -OR T0,T1,T6 -ADDIU T7,R0,0001 -ADDU T9,T8,T0 -SB T7,0000 (T9) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T3,0298 (SP) -ADDU T1,T5,T3 -LBU T6,0001 (T1) -ADDU T4,T3,T5 -LBU T2,0000 (T4) -SLL T8,T6,0x8 -OR T0,T2,T8 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0DCEEC: -LHU T7,0298 (SP) -ADDIU T9,T7,0002 -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0DCEFC: D5: PUSH DE 11 -LHU T3,0292 (SP) -LW T4,028C (SP) -LUI T2,8009 -ADDIU T1,T3,FFFE -ANDI T6,T1,FFFF -SLTI AT,T6,5B00 -ADDIU T5,T4,000B -SW T5,028C (SP) ;cycles+=B -BNE AT,R0,7F0DCF34 -SH T1,0292 (SP) -LW T2,E328 (T2) ;T2=spectrum.ROMs -ADDU T8,T2,T6 -BEQ R0,R0,7F0DCFB4 -SB S5,0000 (T8) -//7F0DCF34: -LHU T0,0292 (SP) -LHU T2,0292 (SP) -LUI T7,8009 -SLTI AT,T0,5800 -BNEL AT,R0,7F0DCF78 -SLTI AT,T2,4000 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LUI T5,8009 -ADDIU T4,R0,0001 -ADDU T9,T7,T0 -SB S5,0000 (T9) -LHU T3,0292 (SP) -LW T5,E32C (T5) -ADDU T1,T5,T3 -BEQ R0,R0,7F0DCFB4 -SB T4,A800 (T1) -//7F0DCF74 -SLTI AT,T2,4000 -BNE AT,R0,7F0DCFB4 -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LUI T1,8009 -ADDIU T7,R0,0001 -ADDU T8,T6,T2 -SB S5,0000 (T8) -LHU T0,0292 (SP) -LW T1,E32C (T1) -ANDI T9,T0,1800 -SRA T5,T9,0x3 -ANDI T3,T0,00FF -OR T4,T5,T3 -ADDU T6,T1,T4 -SB T7,0000 (T6) -//7F0DCFB4: -LHU T2,0292 (SP) -LHU T5,0292 (SP) -LUI T9,8009 -ADDIU T8,T2,0001 -SLTI AT,T8,5B00 -BNE AT,R0,7F0DCFE0 -ADDIU T3,T5,0001 -LW T9,E328 (T9) ;T9=spectrum.ROMs -ADDU T0,T9,T2 -BEQ R0,R0,7F0E27FC -SB S4,0001 (T0) -//7F0DCFE0: -SLTI AT,T3,5800 -BNE AT,R0,7F0DD018 -LHU T2,0292 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LUI T6,8009 -ADDIU T7,R0,0001 -ADDU T4,T1,T5 -SB S4,0001 (T4) -LHU T8,0292 (SP) -LW T6,E32C (T6) -ADDU T9,T6,T8 -BEQ R0,R0,7F0E27FC -SB T7,A801 (T9) -//7F0DD018: -ADDIU T0,T2,0001 -SLTI AT,T0,4000 -BNE AT,R0,7F0E27FC -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -ADDIU T5,R0,0001 -ADDU T1,T3,T2 -SB S4,0001 (T1) -LHU T4,0292 (SP) -LUI T3,8009 -LW T3,E32C (T3) -ADDIU T6,T4,0001 -ANDI T8,T6,1800 -SRA T7,T8,0x3 -ANDI T9,T6,00FF -OR T0,T7,T9 -ADDU T2,T3,T0 -BEQ R0,R0,7F0E27FC -SB T5,0000 (T2) -//7F0DD064: D6: SUB n 7 -LW T1,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T8,0298 (SP) -ADDIU T4,T1,0007 -SW T4,028C (SP) ;cycles+=7 -ADDU T7,T8,T6 -LBU T9,0000 (T7) -ANDI T7,S0,000F -SUBU T3,S0,T9 -ANDI T0,T3,01FF -ANDI T2,T0,00A8 -SRA T4,T0,0x8 -ANDI T6,T9,000F -SLT T3,T7,T6 -OR T8,T2,T4 -XOR T2,S0,T9 -SLL T5,T3,0x4 -XOR T6,T0,S0 -SH T0,00FA (SP) -LBU S0,00FB (SP) -ANDI T4,T2,0080 -AND T3,T4,T6 -OR T1,T8,T5 -SRA T8,T3,0x5 -LHU T6,0298 (SP) -OR S1,T1,T8 -SB T9,00F9 (SP) -SLTIU T2,S0,0001 -SLL T7,T2,0x6 -ORI T9,S1,0002 -OR S1,T9,T7 -ANDI T4,S1,00FF -ADDIU T3,T6,0001 -OR S1,T4,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) -//7F0DD0FC: D7: RST 10 11 -LHU T5,0292 (SP) -LW T1,028C (SP) -LUI T7,8009 -ADDIU T9,T5,FFFE -ANDI T2,T9,FFFF -SLTI AT,T2,5B00 -ADDIU T8,T1,000B -SW T8,028C (SP) ;cycles+=B -BNE AT,R0,7F0DD138 -SH T9,0292 (SP) -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T0,0298 (SP) -ADDU T4,T7,T2 -BEQ R0,R0,7F0DD1C0 -SB T0,0000 (T4) -//7F0DD138: -LHU T6,0292 (SP) -LHU T0,0292 (SP) -LUI T1,8009 -SLTI AT,T6,5800 -BNEL AT,R0,7F0DD180 -SLTI AT,T0,4000 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T3,0298 (SP) -LUI T9,8009 -ADDU T8,T1,T6 -SB T3,0000 (T8) -LHU T7,0292 (SP) -LW T9,E32C (T9) -ADDIU T5,R0,0001 -ADDU T2,T9,T7 -BEQ R0,R0,7F0DD1C0 -SB T5,A800 (T2) -//7F0DD17C: -SLTI AT,T0,4000 -BNE AT,R0,7F0DD1C0 -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T4,0298 (SP) -ADDIU T3,R0,0001 -ADDU T6,T1,T0 -SB T4,0000 (T6) -LHU T8,0292 (SP) -LUI T1,8009 -LW T1,E32C (T1) -ANDI T9,T8,1800 -SRA T7,T9,0x3 -ANDI T5,T8,00FF -OR T2,T7,T5 -ADDU T0,T1,T2 -SB T3,0000 (T0) -//7F0DD1C0: -LHU T4,0292 (SP) -LHU T1,0292 (SP) -LHU T9,0298 (SP) -ADDIU T6,T4,0001 -SLTI AT,T6,5B00 -BNE AT,R0,7F0DD1F4 -ADDIU T2,T1,0001 -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -SRA T8,T9,0x8 -ADDU T5,T7,T4 -BEQ R0,R0,7F0DD284 -SB T8,0001 (T5) -//7F0DD1F4: -SLTI AT,T2,5800 -BNE AT,R0,7F0DD234 -LHU T2,0292 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T3,0298 (SP) -LUI T4,8009 -ADDU T9,T6,T1 -SRA T0,T3,0x8 -SB T0,0001 (T9) -LHU T8,0292 (SP) -LW T4,E32C (T4) -ADDIU T7,R0,0001 -ADDU T5,T4,T8 -BEQ R0,R0,7F0DD284 -SB T7,A801 (T5) -//7F0DD234: -ADDIU T3,T2,0001 -SLTI AT,T3,4000 -BNE AT,R0,7F0DD284 -LHU T6,0298 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -SRA T1,T6,0x8 -ADDIU T4,R0,0001 -ADDU T9,T0,T2 -SB T1,0001 (T9) -LHU T8,0292 (SP) -LUI T2,8009 -LW T2,E32C (T2) -ADDIU T7,T8,0001 -ANDI T5,T7,1800 -SRA T3,T5,0x3 -ANDI T6,T7,00FF -OR T0,T3,T6 -ADDU T1,T2,T0 -SB T4,0000 (T1) -//7F0DD284: -ADDIU T9,R0,0010 -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0DD290: D8: RET C 11(5) -LW T8,028C (SP) -ANDI T7,S1,0001 -LUI T0,8009 -ADDIU T5,T8,0005 -BEQ T7,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=5 -LHU T2,0292 (SP) -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T6,T5,0006 -SW T6,028C (SP) ;cycles+=6 B total -ADDU T9,T0,T2 -LBU T8,0001 (T9) -ADDU T4,T2,T0 -LBU T1,0000 (T4) -SLL T5,T8,0x8 -ADDIU T3,T2,0002 -OR T7,T1,T5 -SH T7,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T3,0292 (SP) -//7F0DD2E0: D9: EXX 4 -LW T6,028C (SP) -SB S2,00F8 (SP) -SB S3,00F7 (SP) -SB S4,00F6 (SP) -SB S5,00F5 (SP) -SB S6,00F4 (SP) -SB S7,00F3 (SP) -LBU T0,00F8 (SP) -LBU T9,00F7 (SP) -LBU T8,00F6 (SP) -LBU T1,00F5 (SP) -LBU T5,00F4 (SP) -LBU T7,00F3 (SP) -LBU S2,02A4 (SP) -LBU S3,02A3 (SP) -LBU S4,02A2 (SP) -LBU S5,02A1 (SP) -LBU S6,02A0 (SP) -LBU S7,029F (SP) -ADDIU T4,T6,0004 -SW T4,028C (SP) ;cycles+=4 -SB T0,02A4 (SP) -SB T9,02A3 (SP) -SB T8,02A2 (SP) -SB T1,02A1 (SP) -SB T5,02A0 (SP) -BEQ R0,R0,7F0E27FC -SB T7,029F (SP) -//7F0DD350: DA: JP C,nn 10 -LW T2,028C (SP) -ANDI T6,S1,0001 -LHU T4,0298 (SP) ;T4=spec.PC -ADDIU T3,T2,000A -BEQ T6,R0,7F0DD390 -SW T3,028C (SP) ;cycles+=A -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDU T1,T0,T4 -LBU T5,0001 (T1) ;T5= val.u -ADDU T9,T4,T0 -LBU T8,0000 (T9) ;T8= val.l -SLL T7,T5,0x8 -OR T2,T8,T7 ;T2= val[1:0]: jump PC -BEQ R0,R0,7F0E27FC -SH T2,0298 (SP) ;spec.PC = jump PC -//7F0DD390: -LHU T3,0298 (SP) -ADDIU T6,T3,0002 -BEQ R0,R0,7F0E27FC -SH T6,0298 (SP) ;spec.PC+=2 -//7F0DD3A0: DB: IN A,(n) 11 -LW T9,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T4,0298 (SP) ;T4=spec.PC -ADDIU A0,T9,000B -SW A0,028C (SP) ;cycles+=B -ADDU T5,T4,T1 -LBU A2,0000 (T5) ;A2=ROM+PC: source -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -OR A1,S0,R0 ;A1=S0: register, derived from previous read (?) -LW T8,028C (SP) -LHU T6,0298 (SP) -ANDI T7,V0,FFFF -SRA T2,T7,0x8 ;T2=upper byte -SH V0,00F0 (SP) ;SP+F0 = input -ADDU T3,T8,T2 -ADDIU T9,T6,0001 -LBU S0,00F1 (SP) ;S0=directional byte set A0 -SW T3,028C (SP) ;cycles += upper byte of input (usually 0...) -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) ;spec.PC+=1 -//7F0DD3F4: DC: CALL C,nn 17(10) -LW T0,028C (SP) -ANDI T1,S1,0001 -ADDIU T4,T0,000A -BEQ T1,R0,7F0DD5CC -SW T4,028C (SP) ;cycles+=A -LHU T8,0292 (SP) -ADDIU T7,T4,0007 -SW T7,028C (SP) ;cycles+=7 11 total -ADDIU T2,T8,FFFE -ANDI T3,T2,FFFF -SLTI AT,T3,5B00 -BNE AT,R0,7F0DD444 -SH T2,0292 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T6,0298 (SP) -ADDU T4,T0,T3 -ADDIU T9,T6,0002 -BEQ R0,R0,7F0DD4D0 -SB T9,0000 (T4) -//7F0DD444: -LHU T1,0292 (SP) -LHU T4,0292 (SP) -LHU T5,0298 (SP) -SLTI AT,T1,5800 -BNE AT,R0,7F0DD488 -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -ADDIU T7,T5,0002 -LUI T0,8009 -ADDU T2,T8,T1 -SB T7,0000 (T2) -LHU T3,0292 (SP) -LW T0,E32C (T0) -ADDIU T6,R0,0001 -ADDU T9,T0,T3 -BEQ R0,R0,7F0DD4D0 -SB T6,A800 (T9) -//7F0DD488: -SLTI AT,T4,4000 -BNE AT,R0,7F0DD4D0 -LHU T5,0298 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -ADDIU T8,T5,0002 -ADDIU T2,R0,0001 -ADDU T7,T1,T4 -SB T8,0000 (T7) -LHU T0,0292 (SP) -LUI T1,8009 -LW T1,E32C (T1) -ANDI T3,T0,1800 -SRA T6,T3,0x3 -ANDI T9,T0,00FF -OR T5,T6,T9 -ADDU T4,T1,T5 -SB T2,0000 (T4) -LHU T8,0292 (SP) -LHU T5,0292 (SP) -LHU T3,0298 (SP) -ADDIU T7,T8,0001 -SLTI AT,T7,5B00 -BNE AT,R0,7F0DD508 -ADDIU T2,T5,0001 -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -ADDIU T0,T3,0002 -SRA T6,T0,0x8 -ADDU T1,T9,T8 -BEQ R0,R0,7F0DD5A0 -SB T6,0001 (T1) -//7F0DD508: -SLTI AT,T2,5800 -BNE AT,R0,7F0DD54C -LHU T4,0292 (SP) -LHU T4,0298 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T7,T4,0002 -SRA T3,T7,0x8 -ADDU T9,T0,T5 -SB T3,0001 (T9) -LUI T6,8009 -LW T6,E32C (T6) -LHU T1,0292 (SP) -ADDIU T8,R0,0001 -ADDU T2,T6,T1 -BEQ R0,R0,7F0DD5A0 -SB T8,A801 (T2) -//7F0DD54C: -ADDIU T7,T4,0001 -SLTI AT,T7,4000 -BNE AT,R0,7F0DD5A0 -LHU T0,0298 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -ADDIU T5,T0,0002 -SRA T3,T5,0x8 -ADDU T6,T9,T4 -SB T3,0001 (T6) -LHU T8,0292 (SP) -LUI T4,8009 -LW T4,E32C (T4) -ADDIU T2,T8,0001 -ANDI T7,T2,1800 -SRA T0,T7,0x3 -ANDI T5,T2,00FF -OR T9,T0,T5 -ADDIU T1,R0,0001 -ADDU T3,T4,T9 -SB T1,0000 (T3) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T6,0298 (SP) -ADDU T0,T8,T6 -LBU T5,0001 (T0) -ADDU T7,T6,T8 -LBU T2,0000 (T7) -SLL T4,T5,0x8 -OR T9,T2,T4 -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0DD5CC: -LHU T1,0298 (SP) -ADDIU T3,T1,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) -//7F0DD5DC: DD: --- DD --- -LW T7,028C (SP) -ADDIU T6,R0,0001 -SB T6,0286 (SP) -ADDIU T8,T7,0004 -SW T8,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -SB R0,0285 (SP) -//7F0DD5F8: DE: SBC A,n 7 -LW T0,028C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T2,0298 (SP) -ADDIU T5,T0,0007 -SW T5,028C (SP) ;cycles+=7 -ADDU T9,T2,T4 -LBU T1,0000 (T9) -ANDI T7,S1,0001 -ANDI T0,S0,000F -SUBU T3,S0,T1 -SUBU T8,T3,T7 -ANDI T6,T8,01FF -ANDI T3,T1,000F -ADDU T8,T3,T7 -SLT T2,T0,T8 -ANDI T5,T6,00A8 -SRA T4,T6,0x8 -OR T9,T5,T4 -XOR T3,S0,T1 -SLL T5,T2,0x4 -XOR T8,T6,S0 -SH T6,00EE (SP) -LBU S0,00EF (SP) -ANDI T7,T3,0080 -AND T2,T7,T8 -OR T4,T9,T5 -SRA T9,T2,0x5 -LHU T8,0298 (SP) -OR S1,T4,T9 -SB T1,00ED (SP) -SLTIU T3,S0,0001 -SLL T0,T3,0x6 -ORI T1,S1,0002 -OR S1,T1,T0 -ANDI T7,S1,00FF -ADDIU T2,T8,0001 -OR S1,T7,R0 -SW T3,0048 (SP) -BEQ R0,R0,7F0E27FC -SH T2,0298 (SP) -//7F0DD69C: DF: RST 18 (11) -LHU T5,0292 (SP) -LW T4,028C (SP) -LUI T0,8009 -ADDIU T1,T5,FFFE -ANDI T3,T1,FFFF -SLTI AT,T3,5B00 -ADDIU T9,T4,000B -SW T9,028C (SP) ;cycles+=B -BNE AT,R0,7F0DD6D8 -SH T1,0292 (SP) -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T6,0298 (SP) -ADDU T7,T0,T3 -BEQ R0,R0,7F0DD760 -SB T6,0000 (T7) -//7F0DD6D8: -LHU T8,0292 (SP) -LHU T6,0292 (SP) -LUI T4,8009 -SLTI AT,T8,5800 -BNEL AT,R0,7F0DD720 -SLTI AT,T6,4000 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T2,0298 (SP) -LUI T1,8009 -ADDU T9,T4,T8 -SB T2,0000 (T9) -LHU T0,0292 (SP) -LW T1,E32C (T1) -ADDIU T5,R0,0001 -ADDU T3,T1,T0 -BEQ R0,R0,7F0DD760 -SB T5,A800 (T3) -//7F0DD71C: -SLTI AT,T6,4000 -BNE AT,R0,7F0DD760 -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T7,0298 (SP) -ADDIU T2,R0,0001 -ADDU T8,T4,T6 -SB T7,0000 (T8) -LHU T9,0292 (SP) -LUI T4,8009 -LW T4,E32C (T4) -ANDI T1,T9,1800 -SRA T0,T1,0x3 -ANDI T5,T9,00FF -OR T3,T0,T5 -ADDU T6,T4,T3 -SB T2,0000 (T6) -LHU T7,0292 (SP) -LHU T4,0292 (SP) -LHU T1,0298 (SP) -ADDIU T8,T7,0001 -SLTI AT,T8,5B00 -BNE AT,R0,7F0DD794 -ADDIU T3,T4,0001 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -SRA T9,T1,0x8 -ADDU T5,T0,T7 -BEQ R0,R0,7F0DD824 -SB T9,0001 (T5) -//7F0DD794: -SLTI AT,T3,5800 -BNE AT,R0,7F0DD7D4 -LHU T3,0292 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T2,0298 (SP) -LUI T7,8009 -ADDU T1,T8,T4 -SRA T6,T2,0x8 -SB T6,0001 (T1) -LHU T9,0292 (SP) -LW T7,E32C (T7) -ADDIU T0,R0,0001 -ADDU T5,T7,T9 -BEQ R0,R0,7F0DD824 -SB T0,A801 (T5) -//7F0DD7D4: -ADDIU T2,T3,0001 -SLTI AT,T2,4000 -BNE AT,R0,7F0DD824 -LHU T8,0298 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SRA T4,T8,0x8 -ADDIU T7,R0,0001 -ADDU T1,T6,T3 -SB T4,0001 (T1) -LHU T9,0292 (SP) -LUI T3,8009 -LW T3,E32C (T3) -ADDIU T0,T9,0001 -ANDI T5,T0,1800 -SRA T2,T5,0x3 -ANDI T8,T0,00FF -OR T6,T2,T8 -ADDU T4,T3,T6 -SB T7,0000 (T4) -//7F0DD824: -ADDIU T1,R0,0018 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) -//7F0DD830: E0: RET PO 11(5) -LW T9,028C (SP) -ANDI T0,S1,0004 -LUI T6,8009 -ADDIU T5,T9,0005 -BNE T0,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=5 -LHU T3,0292 (SP) -LW T6,E328 (T6) ;T6=spectrum.ROMs -ADDIU T8,T5,0006 -SW T8,028C (SP) ;cycles+=6 B total -ADDU T1,T6,T3 -LBU T9,0001 (T1) -ADDU T7,T3,T6 -LBU T4,0000 (T7) -SLL T5,T9,0x8 -ADDIU T2,T3,0002 -OR T0,T4,T5 -SH T0,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T2,0292 (SP) -//7F0DD880: E1: POP HL 10 -LW T8,028C (SP) -LBU T6,0287 (SP) -LBU T0,0287 (SP) -ADDIU T7,T8,000A -BNE T6,R0,7F0DD8BC -SW T7,028C (SP) ;cycles+=A -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -LHU T1,0292 (SP) -ADDU T4,T1,T9 -LBU S7,0000 (T4) -LBU S6,0001 (T4) -ADDIU T5,T1,0002 -BEQ R0,R0,7F0E27FC -SH T5,0292 (SP) -//7F0DD8BC: -ADDIU AT,R0,0001 -BNE T0,AT,7F0DD8FC -LUI T8,8009 -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LHU T3,0292 (SP) -ADDU T6,T2,T3 -LBU T9,0001 (T6) -ADDU T8,T3,T2 -LBU T7,0000 (T8) -SLL T4,T9,0x8 -ADDIU T5,T3,0002 -OR T1,T7,T4 -SH T1,0296 (SP) -BEQ R0,R0,7F0E27FC -SH T5,0292 (SP) -//7F0DD8FC: -LHU T0,0292 (SP) -LW T8,E328 (T8) ;T8=spectrum.ROMs -ADDIU T3,T0,0002 -ADDU T9,T8,T0 -LBU T7,0001 (T9) -ADDU T2,T0,T8 -LBU T6,0000 (T2) -SLL T4,T7,0x8 -SH T3,0292 (SP) -OR T1,T6,T4 -BEQ R0,R0,7F0E27FC -SH T1,0294 (SP) -//7F0DD92C: E2: JP PO,nn 10 -LW T5,028C (SP) -ANDI T8,S1,0004 -LHU T9,0298 (SP) -ADDIU T2,T5,000A -BNE T8,R0,7F0DD96C -SW T2,028C (SP) ;cycles+=A -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -ADDU T1,T7,T9 -LBU T0,0001 (T1) -ADDU T6,T9,T7 -LBU T4,0000 (T6) -SLL T3,T0,0x8 -OR T5,T4,T3 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) -//7F0DD96C: -LHU T2,0298 (SP) -ADDIU T8,T2,0002 -BEQ R0,R0,7F0E27FC -SH T8,0298 (SP) -//7F0DD97C: E3: EX (SP),HL 19 -LW T6,028C (SP) -LBU T9,0287 (SP) -LBU T4,0287 (SP) -ADDIU T7,T6,0013 -BNE T9,R0,7F0DDB1C -SW T7,028C (SP) ;cycles+=13 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T1,0292 (SP) -LHU T7,0292 (SP) -LUI T9,8009 -ADDU T5,T0,T1 -LBU T2,0001 (T5) -ADDU T4,T1,T0 -LBU T3,0000 (T4) -SLL T8,T2,0x8 -SLTI AT,T7,5B00 -OR T6,T3,T8 -BNE AT,R0,7F0DD9DC -SH T6,00EA (SP) -LW T9,E328 (T9) ;T9=spectrum.ROMs -ADDU T4,T9,T7 -BEQ R0,R0,7F0DDA5C -SB S7,0000 (T4) -//7F0DD9DC: -LHU T0,0292 (SP) -LHU T9,0292 (SP) -LUI T1,8009 -SLTI AT,T0,5800 -BNEL AT,R0,7F0DDA20 -SLTI AT,T9,4000 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LUI T3,8009 -ADDIU T2,R0,0001 -ADDU T5,T1,T0 -SB S7,0000 (T5) -LHU T8,0292 (SP) -LW T3,E32C (T3) -ADDU T6,T3,T8 -BEQ R0,R0,7F0DDA5C -SB T2,A800 (T6) -//7F0DDA1C: -SLTI AT,T9,4000 -BNE AT,R0,7F0DDA5C -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LUI T6,8009 -ADDIU T1,R0,0001 -ADDU T4,T7,T9 -SB S7,0000 (T4) -LHU T0,0292 (SP) -LW T6,E32C (T6) -ANDI T5,T0,1800 -SRA T3,T5,0x3 -ANDI T8,T0,00FF -OR T2,T3,T8 -ADDU T7,T6,T2 -SB T1,0000 (T7) -LHU T9,0292 (SP) -LHU T3,0292 (SP) -LUI T5,8009 -ADDIU T4,T9,0001 -SLTI AT,T4,5B00 -BNE AT,R0,7F0DDA88 -ADDIU T8,T3,0001 -LW T5,E328 (T5) ;T5=spectrum.ROMs -ADDU T0,T5,T9 -BEQ R0,R0,7F0DDB08 -SB S6,0001 (T0) -//7F0DDA88: -SLTI AT,T8,5800 -BNE AT,R0,7F0DDAC0 -LHU T9,0292 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LUI T7,8009 -ADDIU T1,R0,0001 -ADDU T2,T6,T3 -SB S6,0001 (T2) -LHU T4,0292 (SP) -LW T7,E32C (T7) -ADDU T5,T7,T4 -BEQ R0,R0,7F0DDB08 -SB T1,A801 (T5) -//7F0DDAC0: -ADDIU T0,T9,0001 -SLTI AT,T0,4000 -BNE AT,R0,7F0DDB08 -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -ADDIU T3,R0,0001 -ADDU T6,T8,T9 -SB S6,0001 (T6) -LHU T2,0292 (SP) -LUI T8,8009 -LW T8,E32C (T8) -ADDIU T7,T2,0001 -ANDI T4,T7,1800 -SRA T1,T4,0x3 -ANDI T5,T7,00FF -OR T0,T1,T5 -ADDU T9,T8,T0 -SB T3,0000 (T9) -LHU S6,00EA (SP) -LBU S7,00EB (SP) -SRA T6,S6,0x8 -BEQ R0,R0,7F0E27FC -ANDI S6,T6,00FF -//7F0DDB1C: -ADDIU AT,R0,0001 -BNE T4,AT,7F0DDCCC -LHU T8,0292 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T7,0292 (SP) -LHU T2,0292 (SP) -ADDU T0,T1,T7 -LBU T3,0001 (T0) -ADDU T5,T7,T1 -LBU T8,0000 (T5) -SLL T9,T3,0x8 -SLTI AT,T2,5B00 -OR T6,T8,T9 -BNE AT,R0,7F0DDB74 -SH T6,00E8 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T4,0296 (SP) -ADDU T1,T5,T2 -BEQ R0,R0,7F0DDBFC -SB T4,0000 (T1) -//7F0DDB74: -LHU T7,0292 (SP) -LHU T4,0292 (SP) -LUI T3,8009 -SLTI AT,T7,5800 -BNEL AT,R0,7F0DDBBC -SLTI AT,T4,4000 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T0,0296 (SP) -LUI T6,8009 -ADDU T8,T3,T7 -SB T0,0000 (T8) -LHU T5,0292 (SP) -LW T6,E32C (T6) -ADDIU T9,R0,0001 -ADDU T2,T6,T5 -BEQ R0,R0,7F0DDBFC -SB T9,A800 (T2) -//7F0DDBB8: -SLTI AT,T4,4000 -BNE AT,R0,7F0DDBFC -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T1,0296 (SP) -ADDIU T0,R0,0001 -ADDU T7,T3,T4 -SB T1,0000 (T7) -LHU T8,0292 (SP) -LUI T3,8009 -LW T3,E32C (T3) -ANDI T6,T8,1800 -SRA T5,T6,0x3 -ANDI T9,T8,00FF -OR T2,T5,T9 -ADDU T4,T3,T2 -SB T0,0000 (T4) -LHU T1,0292 (SP) -LHU T3,0292 (SP) -LHU T6,0296 (SP) -ADDIU T7,T1,0001 -SLTI AT,T7,5B00 -BNE AT,R0,7F0DDC30 -ADDIU T2,T3,0001 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -SRA T8,T6,0x8 -ADDU T9,T5,T1 -BEQ R0,R0,7F0DDCC0 -SB T8,0001 (T9) -//7F0DDC30: -SLTI AT,T2,5800 -BNE AT,R0,7F0DDC70 -LHU T2,0292 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T0,0296 (SP) -LUI T1,8009 -ADDU T6,T7,T3 -SRA T4,T0,0x8 -SB T4,0001 (T6) -LHU T8,0292 (SP) -LW T1,E32C (T1) -ADDIU T5,R0,0001 -ADDU T9,T1,T8 -BEQ R0,R0,7F0DDCC0 -SB T5,A801 (T9) -//7F0DDC70: -ADDIU T0,T2,0001 -SLTI AT,T0,4000 -BNE AT,R0,7F0DDCC0 -LHU T7,0296 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -SRA T3,T7,0x8 -ADDIU T1,R0,0001 -ADDU T6,T4,T2 -SB T3,0001 (T6) -LHU T8,0292 (SP) -LUI T2,8009 -LW T2,E32C (T2) -ADDIU T5,T8,0001 -ANDI T9,T5,1800 -SRA T0,T9,0x3 -ANDI T7,T5,00FF -OR T4,T0,T7 -ADDU T3,T2,T4 -SB T1,0000 (T3) -LHU T6,00E8 (SP) -BEQ R0,R0,7F0E27FC -SH T6,0296 (SP) -//7F0DDCCC: -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -LHU T3,0292 (SP) -ADDU T7,T9,T8 -LBU T2,0001 (T7) -ADDU T5,T8,T9 -LBU T0,0000 (T5) -SLL T4,T2,0x8 -SLTI AT,T3,5B00 -OR T1,T0,T4 -BNE AT,R0,7F0DDD14 -SH T1,00E6 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T6,0294 (SP) -ADDU T9,T5,T3 -BEQ R0,R0,7F0DDD9C -SB T6,0000 (T9) -//7F0DDD14: -LHU T8,0292 (SP) -LHU T6,0292 (SP) -LUI T2,8009 -SLTI AT,T8,5800 -BNEL AT,R0,7F0DDD5C -SLTI AT,T6,4000 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LHU T7,0294 (SP) -LUI T1,8009 -ADDU T0,T2,T8 -SB T7,0000 (T0) -LHU T5,0292 (SP) -LW T1,E32C (T1) -ADDIU T4,R0,0001 -ADDU T3,T1,T5 -BEQ R0,R0,7F0DDD9C -SB T4,A800 (T3) -//7F0DDE58: -SLTI AT,T6,4000 -BNE AT,R0,7F0DDD9C -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LHU T9,0294 (SP) -ADDIU T7,R0,0001 -ADDU T8,T2,T6 -SB T9,0000 (T8) -LHU T0,0292 (SP) -LUI T2,8009 -LW T2,E32C (T2) -ANDI T1,T0,1800 -SRA T5,T1,0x3 -ANDI T4,T0,00FF -OR T3,T5,T4 -ADDU T6,T2,T3 -SB T7,0000 (T6) -LHU T9,0292 (SP) -LHU T2,0292 (SP) -LHU T1,0294 (SP) -ADDIU T8,T9,0001 -SLTI AT,T8,5B00 -BNE AT,R0,7F0DDDD0 -ADDIU T3,T2,0001 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -SRA T0,T1,0x8 -ADDU T4,T5,T9 -BEQ R0,R0,7F0DDE60 -SB T0,0001 (T4) -//7F0DDDD0: -SLTI AT,T3,5800 -BNE AT,R0,7F0DDE10 -LHU T3,0292 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T7,0294 (SP) -LUI T9,8009 -ADDU T1,T8,T2 -SRA T6,T7,0x8 -SB T6,0001 (T1) -LHU T0,0292 (SP) -LW T9,E32C (T9) -ADDIU T5,R0,0001 -ADDU T4,T9,T0 -BEQ R0,R0,7F0DDE60 -SB T5,A801 (T4) -//7F0DDE10: -ADDIU T7,T3,0001 -SLTI AT,T7,4000 -BNE AT,R0,7F0DDE60 -LHU T8,0294 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SRA T2,T8,0x8 -ADDIU T9,R0,0001 -ADDU T1,T6,T3 -SB T2,0001 (T1) -LHU T0,0292 (SP) -LUI T3,8009 -LW T3,E32C (T3) -ADDIU T5,T0,0001 -ANDI T4,T5,1800 -SRA T7,T4,0x3 -ANDI T8,T5,00FF -OR T6,T7,T8 -ADDU T2,T3,T6 -SB T9,0000 (T2) -//7F0DDE60: -LHU T1,00E6 (SP) -BEQ R0,R0,7F0E27FC -SH T1,0294 (SP) -//7F0DDE6C: E4: CALL PO,nn 17(10) -LW T0,028C (SP) -ANDI T5,S1,0004 -ADDIU T4,T0,000A -BNE T5,R0,7F0DE044 -SW T4,028C (SP) ;cycles+=A -LHU T3,0292 (SP) -ADDIU T8,T4,0007 -SW T8,028C (SP) ;cycles+=7 11 total -ADDIU T6,T3,FFFE -ANDI T9,T6,FFFF -SLTI AT,T9,5B00 -BNE AT,R0,7F0DDEBC -SH T6,0292 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T2,0298 (SP) -ADDU T4,T0,T9 -ADDIU T1,T2,0002 -BEQ R0,R0,7F0DDF48 -SB T1,0000 (T4) -//7F0DDEBC: -LHU T5,0292 (SP) -LHU T4,0292 (SP) -LHU T7,0298 (SP) -SLTI AT,T5,5800 -BNE AT,R0,7F0DDF00 -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -ADDIU T8,T7,0002 -LUI T0,8009 -ADDU T6,T3,T5 -SB T8,0000 (T6) -LHU T9,0292 (SP) -LW T0,E32C (T0) -ADDIU T2,R0,0001 -ADDU T1,T0,T9 -BEQ R0,R0,7F0DDF48 -SB T2,A800 (T1) -//7F0DDF00: -SLTI AT,T4,4000 -BNE AT,R0,7F0DDF48 -LHU T7,0298 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -ADDIU T3,T7,0002 -ADDIU T6,R0,0001 -ADDU T8,T5,T4 -SB T3,0000 (T8) -LHU T0,0292 (SP) -LUI T5,8009 -LW T5,E32C (T5) -ANDI T9,T0,1800 -SRA T2,T9,0x3 -ANDI T1,T0,00FF -OR T7,T2,T1 -ADDU T4,T5,T7 -SB T6,0000 (T4) -LHU T3,0292 (SP) -LHU T7,0292 (SP) -LHU T9,0298 (SP) -ADDIU T8,T3,0001 -SLTI AT,T8,5B00 -BNE AT,R0,7F0DDF80 -ADDIU T6,T7,0001 -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -ADDIU T0,T9,0002 -SRA T2,T0,0x8 -ADDU T5,T1,T3 -BEQ R0,R0,7F0DE018 -SB T2,0001 (T5) -//7F0DDF80: -SLTI AT,T6,5800 -BNE AT,R0,7F0DDFC4 -LHU T4,0292 (SP) -LHU T4,0298 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T8,T4,0002 -SRA T9,T8,0x8 -ADDU T1,T0,T7 -SB T9,0001 (T1) -LUI T2,8009 -LW T2,E32C (T2) -LHU T5,0292 (SP) -ADDIU T3,R0,0001 -ADDU T6,T2,T5 -BEQ R0,R0,7F0DE018 -SB T3,A801 (T6) -//7F0DDFC4: -ADDIU T8,T4,0001 -SLTI AT,T8,4000 -BNE AT,R0,7F0DE018 -LHU T0,0298 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -ADDIU T7,T0,0002 -SRA T9,T7,0x8 -ADDU T2,T1,T4 -SB T9,0001 (T2) -LHU T3,0292 (SP) -LUI T4,8009 -LW T4,E32C (T4) -ADDIU T6,T3,0001 -ANDI T8,T6,1800 -SRA T0,T8,0x3 -ANDI T7,T6,00FF -OR T1,T0,T7 -ADDIU T5,R0,0001 -ADDU T9,T4,T1 -SB T5,0000 (T9) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T2,0298 (SP) -ADDU T0,T3,T2 -LBU T7,0001 (T0) -ADDU T8,T2,T3 -LBU T6,0000 (T8) -SLL T4,T7,0x8 -OR T1,T6,T4 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) -//7F0DE044: -LHU T5,0298 (SP) -ADDIU T9,T5,0002 -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0DE054: E5: PUSH HL 11 -LW T8,028C (SP) -LBU T2,0287 (SP) -LBU T7,0287 (SP) -ADDIU T3,T8,000B -BNE T2,R0,7F0DE1C8 -SW T3,028C (SP) ;cycles+=B -LHU T0,0292 (SP) -LUI T4,8009 -ADDIU T7,T0,FFFE -ANDI T6,T7,FFFF -SLTI AT,T6,5B00 -BNE AT,R0,7F0DE098 -SH T7,0292 (SP) -LW T4,E328 (T4) ;T4=spectrum.ROMs -ADDU T1,T4,T6 -BEQ R0,R0,7F0DE118 -SB S7,0000 (T1) -//7F0DE098: -LHU T5,0292 (SP) -LHU T4,0292 (SP) -LUI T9,8009 -SLTI AT,T5,5800 -BNEL AT,R0,7F0DE0DC -SLTI AT,T4,4000 -LW T9,E328 (T9) ;T9=spectrum.ROMs -LUI T2,8009 -ADDIU T3,R0,0001 -ADDU T8,T9,T5 -SB S7,0000 (T8) -LHU T0,0292 (SP) -LW T2,E32C (T2) -ADDU T7,T2,T0 -BEQ R0,R0,7F0DE118 -SB T3,A800 (T7) -//7F0DE0D8: -SLTI AT,T4,4000 -BNE AT,R0,7F0DE118 -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LUI T7,8009 -ADDIU T9,R0,0001 -ADDU T1,T6,T4 -SB S7,0000 (T1) -LHU T5,0292 (SP) -LW T7,E32C (T7) -ANDI T8,T5,1800 -SRA T2,T8,0x3 -ANDI T0,T5,00FF -OR T3,T2,T0 -ADDU T6,T7,T3 -SB T9,0000 (T6) -LHU T4,0292 (SP) -LHU T2,0292 (SP) -LUI T8,8009 -ADDIU T1,T4,0001 -SLTI AT,T1,5B00 -BNE AT,R0,7F0DE144 -ADDIU T0,T2,0001 -LW T8,E328 (T8) ;T8=spectrum.ROMs -ADDU T5,T8,T4 -BEQ R0,R0,7F0E27FC -SB S6,0001 (T5) -//7F0DE144: -SLTI AT,T0,5800 -BNE AT,R0,7F0DE17C -LHU T4,0292 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LUI T6,8009 -ADDIU T9,R0,0001 -ADDU T3,T7,T2 -SB S6,0001 (T3) -LHU T1,0292 (SP) -LW T6,E32C (T6) -ADDU T8,T6,T1 -BEQ R0,R0,7F0E27FC -SB T9,A801 (T8) -//7F0DE17C: -ADDIU T5,T4,0001 -SLTI AT,T5,4000 -BNE AT,R0,7F0E27FC -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T2,R0,0001 -ADDU T7,T0,T4 -SB S6,0001 (T7) -LHU T3,0292 (SP) -LUI T0,8009 -LW T0,E32C (T0) -ADDIU T6,T3,0001 -ANDI T1,T6,1800 -SRA T9,T1,0x3 -ANDI T8,T6,00FF -OR T5,T9,T8 -ADDU T4,T0,T5 -BEQ R0,R0,7F0E27FC -SB T2,0000 (T4) -//7F0DE1C8: -ADDIU AT,R0,0001 -BNE T7,AT,7F0DE354 -LHU T1,0292 (SP) -LHU T3,0292 (SP) -LUI T8,8009 -ADDIU T1,T3,FFFE -ANDI T6,T1,FFFF -SLTI AT,T6,5B00 -BNE AT,R0,7F0DE204 -SH T1,0292 (SP) -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T9,0296 (SP) -ADDU T0,T8,T6 -BEQ R0,R0,7F0DE28C -SB T9,0000 (T0) -//7F0DE204: -LHU T5,0292 (SP) -LHU T9,0292 (SP) -LUI T4,8009 -SLTI AT,T5,5800 -BNEL AT,R0,7F0DE24C -SLTI AT,T9,4000 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T2,0296 (SP) -LUI T1,8009 -ADDU T7,T4,T5 -SB T2,0000 (T7) -LHU T8,0292 (SP) -LW T1,E32C (T1) -ADDIU T3,R0,0001 -ADDU T6,T1,T8 -BEQ R0,R0,7F0DE28C -SB T3,A800 (T6) -//7F0DE248: -SLTI AT,T9,4000 -BNE AT,R0,7F0DE28C -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T0,0296 (SP) -ADDIU T2,R0,0001 -ADDU T5,T4,T9 -SB T0,0000 (T5) -LHU T7,0292 (SP) -LUI T4,8009 -LW T4,E32C (T4) -ANDI T1,T7,1800 -SRA T8,T1,0x3 -ANDI T3,T7,00FF -OR T6,T8,T3 -ADDU T9,T4,T6 -SB T2,0000 (T9) -LHU T0,0292 (SP) -LHU T4,0292 (SP) -LHU T1,0296 (SP) -ADDIU T5,T0,0001 -SLTI AT,T5,5B00 -BNE AT,R0,7F0DE2C0 -ADDIU T6,T4,0001 -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -SRA T7,T1,0x8 -ADDU T3,T8,T0 -BEQ R0,R0,7F0E27FC -SB T7,0001 (T3) -//7F0DE2C0: -SLTI AT,T6,5800 -BNE AT,R0,7F0DE300 -LHU T6,0292 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T2,0296 (SP) -LUI T0,8009 -ADDU T1,T5,T4 -SRA T9,T2,0x8 -SB T9,0001 (T1) -LHU T7,0292 (SP) -LW T0,E32C (T0) -ADDIU T8,R0,0001 -ADDU T3,T0,T7 -BEQ R0,R0,7F0E27FC -SB T8,A801 (T3) -//7F0DE300: -ADDIU T2,T6,0001 -SLTI AT,T2,4000 -BNE AT,R0,7F0E27FC -LHU T5,0296 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -SRA T4,T5,0x8 -ADDIU T0,R0,0001 -ADDU T1,T9,T6 -SB T4,0001 (T1) -LHU T7,0292 (SP) -LUI T6,8009 -LW T6,E32C (T6) -ADDIU T8,T7,0001 -ANDI T3,T8,1800 -SRA T2,T3,0x3 -ANDI T5,T8,00FF -OR T9,T2,T5 -ADDU T4,T6,T9 -BEQ R0,R0,7F0E27FC -SB T0,0000 (T4) -//7F0DE354: -ADDIU T7,T1,FFFE -ANDI T3,T7,FFFF -SLTI AT,T3,5B00 -BNE AT,R0,7F0DE380 -SH T7,0292 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LHU T8,0294 (SP) -ADDU T5,T2,T3 -BEQ R0,R0,7F0DE408 -SB T8,0000 (T5) -//7F0DE380: -LHU T6,0292 (SP) -LHU T8,0292 (SP) -LUI T0,8009 -SLTI AT,T6,5800 -BNEL AT,R0,7F0DE3C8 -SLTI AT,T8,4000 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T9,0294 (SP) -LUI T7,8009 -ADDU T4,T0,T6 -SB T9,0000 (T4) -LHU T2,0292 (SP) -LW T7,E32C (T7) -ADDIU T1,R0,0001 -ADDU T3,T7,T2 -BEQ R0,R0,7F0DE408 -SB T1,A800 (T3) -//7F0DE3C4: -SLTI AT,T8,4000 -BNE AT,R0,7F0DE408 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T5,0294 (SP) -ADDIU T9,R0,0001 -ADDU T6,T0,T8 -SB T5,0000 (T6) -LHU T4,0292 (SP) -LUI T0,8009 -LW T0,E32C (T0) -ANDI T7,T4,1800 -SRA T2,T7,0x3 -ANDI T1,T4,00FF -OR T3,T2,T1 -ADDU T8,T0,T3 -SB T9,0000 (T8) -LHU T5,0292 (SP) -LHU T0,0292 (SP) -LHU T7,0294 (SP) -ADDIU T6,T5,0001 -SLTI AT,T6,5B00 -BNE AT,R0,7F0DE43C -ADDIU T3,T0,0001 -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -SRA T4,T7,0x8 -ADDU T1,T2,T5 -BEQ R0,R0,7F0E27FC -SB T4,0001 (T1) -//7F0DE43C: -SLTI AT,T3,5800 -BNE AT,R0,7F0DE47C -LHU T3,0292 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T9,0294 (SP) -LUI T5,8009 -ADDU T7,T6,T0 -SRA T8,T9,0x8 -SB T8,0001 (T7) -LHU T4,0292 (SP) -LW T5,E32C (T5) -ADDIU T2,R0,0001 -ADDU T1,T5,T4 -BEQ R0,R0,7F0E27FC -SB T2,A801 (T1) -//7F0DE47C: -ADDIU T9,T3,0001 -SLTI AT,T9,4000 -BNE AT,R0,7F0E27FC -LHU T6,0294 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -SRA T0,T6,0x8 -ADDIU T5,R0,0001 -ADDU T7,T8,T3 -SB T0,0001 (T7) -LHU T4,0292 (SP) -LUI T3,8009 -LW T3,E32C (T3) -ADDIU T2,T4,0001 -ANDI T1,T2,1800 -SRA T9,T1,0x3 -ANDI T6,T2,00FF -OR T8,T9,T6 -ADDU T0,T3,T8 -BEQ R0,R0,7F0E27FC -SB T5,0000 (T0) -//7F0DE4D0: E6: AND n 7 -LW T7,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T2,0298 (SP) ;T2=spec.PC -ADDIU T4,T7,0007 -SW T4,028C (SP) ;cycles+=7 -ADDU T9,T1,T2 -LBU T6,0000 (T9) ;T6=ROM+PC: n -LUI T2,8009 -LW T2,E334 (T2) ;T2=8008E334: -AND S0,S0,T6 ;spec.A &= n -ANDI T3,S0,00FF -SLTIU T8,T3,0001 ;T8= True if 0 -SW T8,0048 (SP) ;SP+48= ZERO -SLL T7,T8,0x6 ;T7=T8*40: ZERO flag -ADDU T9,T3,T2 -LBU T6,0000 (T9) -ANDI T5,T3,00A8 -LHU T8,0298 (SP) -OR T4,T5,T7 -ORI T1,T4,0010 ;set HALFCARRY -OR S0,T3,R0 -OR S1,T6,T1 -ANDI T3,S1,00FF -ADDIU T0,T8,0001 -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) ;PC+=1 -//7F0DE540: E7: RST 20 11 -LHU T4,0292 (SP) -LW T5,028C (SP) -LUI T1,8009 -ADDIU T2,T4,FFFE -ANDI T9,T2,FFFF -SLTI AT,T9,5B00 -ADDIU T7,T5,000B -SW T7,028C (SP) ;cycles+=B -BNE AT,R0,7F0DE57C -SH T2,0292 (SP) -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T6,0298 (SP) -ADDU T3,T1,T9 -BEQ R0,R0,7F0DE604 -SB T6,0000 (T3) -//7F0DE57C: -LHU T8,0292 (SP) -LHU T6,0292 (SP) -LUI T5,8009 -SLTI AT,T8,5800 -BNEL AT,R0,7F0DE5C4 -SLTI AT,T6,4000 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T0,0298 (SP) -LUI T2,8009 -ADDU T7,T5,T8 -SB T0,0000 (T7) -LHU T1,0292 (SP) -LW T2,E32C (T2) -ADDIU T4,R0,0001 -ADDU T9,T2,T1 -BEQ R0,R0,7F0DE604 -SB T4,A800 (T9) -//7F0DE5C0: -SLTI AT,T6,4000 -BNE AT,R0,7F0DE604 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T3,0298 (SP) -ADDIU T0,R0,0001 -ADDU T8,T5,T6 -SB T3,0000 (T8) -LHU T7,0292 (SP) -LUI T5,8009 -LW T5,E32C (T5) -ANDI T2,T7,1800 -SRA T1,T2,0x3 -ANDI T4,T7,00FF -OR T9,T1,T4 -ADDU T6,T5,T9 -SB T0,0000 (T6) -LHU T3,0292 (SP) -LHU T5,0292 (SP) -LHU T2,0298 (SP) -ADDIU T8,T3,0001 -SLTI AT,T8,5B00 -BNE AT,R0,7F0DE638 -ADDIU T9,T5,0001 -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -SRA T7,T2,0x8 -ADDU T4,T1,T3 -BEQ R0,R0,7F0DE6C8 -SB T7,0001 (T4) -//7F0DE638: -SLTI AT,T9,5800 -BNE AT,R0,7F0DE678 -LHU T9,0292 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T0,0298 (SP) -LUI T3,8009 -ADDU T2,T8,T5 -SRA T6,T0,0x8 -SB T6,0001 (T2) -LHU T7,0292 (SP) -LW T3,E32C (T3) -ADDIU T1,R0,0001 -ADDU T4,T3,T7 -BEQ R0,R0,7F0DE6C8 -SB T1,A801 (T4) -//7F0DE678: -ADDIU T0,T9,0001 -SLTI AT,T0,4000 -BNE AT,R0,7F0DE6C8 -LHU T8,0298 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SRA T5,T8,0x8 -ADDIU T3,R0,0001 -ADDU T2,T6,T9 -SB T5,0001 (T2) -LHU T7,0292 (SP) -LUI T9,8009 -LW T9,E32C (T9) -ADDIU T1,T7,0001 -ANDI T4,T1,1800 -SRA T0,T4,0x3 -ANDI T8,T1,00FF -OR T6,T0,T8 -ADDU T5,T9,T6 -SB T3,0000 (T5) -ADDIU T2,R0,0020 -BEQ R0,R0,7F0E27FC -SH T2,0298 (SP) -//7F0DE6D4: E8: RET PE 11(5) -LW T7,028C (SP) -ANDI T1,S1,0004 -LUI T6,8009 -ADDIU T4,T7,0005 -BEQ T1,R0,7F0E27FC -SW T4,028C (SP) ;cycles+=5 -LHU T9,0292 (SP) -LW T6,E328 (T6) ;T6=spectrum.ROMs -ADDIU T8,T4,0006 -SW T8,028C (SP) ;cycles+=6 B total -ADDU T2,T6,T9 -LBU T7,0001 (T2) -ADDU T3,T9,T6 -LBU T5,0000 (T3) -SLL T4,T7,0x8 -ADDIU T0,T9,0002 -OR T1,T5,T4 -SH T1,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T0,0292 (SP) -//7F0DE724: E9: JP (HL) 4 -LW T8,028C (SP) -LBU T6,0287 (SP) -LBU T5,0287 (SP) -ADDIU T3,T8,0004 -BNE T6,R0,7F0DE74C -SW T3,028C (SP) ;cycles+=4 -SLL T2,S6,0x8 -OR T7,T2,S7 -BEQ R0,R0,7F0E27FC -SH T7,0298 (SP) -//7F0DE74C: -ADDIU AT,R0,0001 -BNE T5,AT,7F0DE764 -LHU T1,0294 (SP) -LHU T4,0296 (SP) -BEQ R0,R0,7F0DE768 -SW T4,0048 (SP) -//7F0DE764: -SW T1,0048 (SP) -LW T9,0048 (SP) -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0DE774: EA: JP PE,nn 10 -LW T0,028C (SP) -ANDI T3,S1,0004 -LHU T6,0298 (SP) -ADDIU T8,T0,000A -BEQ T3,R0,7F0DE7B4 -SW T8,028C (SP) ;cycles+=A -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -ADDU T4,T2,T6 -LBU T1,0001 (T4) -ADDU T7,T6,T2 -LBU T5,0000 (T7) -SLL T9,T1,0x8 -OR T0,T5,T9 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0DE7B4: -LHU T8,0298 (SP) -ADDIU T3,T8,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) -//7F0DE7C4: EB: EX DE,HL 4 -LW T7,028C (SP) -SB S6,00E5 (SP) -SB S5,00E4 (SP) -ANDI S6,S4,00FF -ANDI S5,S7,00FF -ADDIU T2,T7,0004 -SW T2,028C (SP) ;cycles+=4 -LBU S4,00E5 (SP) -BEQ R0,R0,7F0E27FC -LBU S7,00E4 (SP) -//7F0DE7EC: EC: CALL PE,nn 17(10) -LW T6,028C (SP) -ANDI T1,S1,0004 -ADDIU T4,T6,000A -BEQ T1,R0,7F0DE9C4 -SW T4,028C (SP) ;cycles+=A -LHU T0,0292 (SP) -ADDIU T9,T4,0007 -SW T9,028C (SP) ;cycles+=7 11 total -ADDIU T8,T0,FFFE -ANDI T3,T8,FFFF -SLTI AT,T3,5B00 -BNE AT,R0,7F0DE83C -SH T8,0292 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T7,0298 (SP) -ADDU T4,T6,T3 -ADDIU T2,T7,0002 -BEQ R0,R0,7F0DE8C8 -SB T2,0000 (T4) -//7F0DE83C: -LHU T1,0292 (SP) -LHU T4,0292 (SP) -LHU T5,0298 (SP) -SLTI AT,T1,5800 -BNE AT,R0,7F0DE880 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T9,T5,0002 -LUI T6,8009 -ADDU T8,T0,T1 -SB T9,0000 (T8) -LHU T3,0292 (SP) -LW T6,E32C (T6) -ADDIU T7,R0,0001 -ADDU T2,T6,T3 -BEQ R0,R0,7F0DE8C8 -SB T7,A800 (T2) -//7F0DE880: -SLTI AT,T4,4000 -BNE AT,R0,7F0DE8C8 -LHU T5,0298 (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -ADDIU T0,T5,0002 -ADDIU T8,R0,0001 -ADDU T9,T1,T4 -SB T0,0000 (T9) -LHU T6,0292 (SP) -LUI T1,8009 -LW T1,E32C (T1) -ANDI T3,T6,1800 -SRA T7,T3,0x3 -ANDI T2,T6,00FF -OR T5,T7,T2 -ADDU T4,T1,T5 -SB T8,0000 (T4) -LHU T0,0292 (SP) -LHU T5,0292 (SP) -LHU T3,0298 (SP) -ADDIU T9,T0,0001 -SLTI AT,T9,5B00 -BNE AT,R0,7F0DE900 -ADDIU T8,T5,0001 -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -ADDIU T6,T3,0002 -SRA T7,T6,0x8 -ADDU T1,T2,T0 -BEQ R0,R0,7F0DE998 -SB T7,0001 (T1) -//7F0DE900: -SLTI AT,T8,5800 -BNE AT,R0,7F0DE944 -LHU T4,0292 (SP) -LHU T4,0298 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -ADDIU T9,T4,0002 -SRA T3,T9,0x8 -ADDU T2,T6,T5 -SB T3,0001 (T2) -LUI T7,8009 -LW T7,E32C (T7) -LHU T1,0292 (SP) -ADDIU T0,R0,0001 -ADDU T8,T7,T1 -BEQ R0,R0,7F0DE998 -SB T0,A801 (T8) -//7F0DE944: -ADDIU T9,T4,0001 -SLTI AT,T9,4000 -BNE AT,R0,7F0DE998 -LHU T6,0298 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -ADDIU T5,T6,0002 -SRA T3,T5,0x8 -ADDU T7,T2,T4 -SB T3,0001 (T7) -LHU T0,0292 (SP) -LUI T4,8009 -LW T4,E32C (T4) -ADDIU T8,T0,0001 -ANDI T9,T8,1800 -SRA T6,T9,0x3 -ANDI T5,T8,00FF -OR T2,T6,T5 -ADDIU T1,R0,0001 -ADDU T3,T4,T2 -SB T1,0000 (T3) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T7,0298 (SP) -ADDU T6,T0,T7 -LBU T5,0001 (T6) -ADDU T9,T7,T0 -LBU T8,0000 (T9) -SLL T4,T5,0x8 -OR T2,T8,T4 -BEQ R0,R0,7F0E27FC -SH T2,0298 (SP) -//7F0DE9C4: -LHU T1,0298 (SP) -ADDIU T3,T1,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) -//7F0DE9D4: ED: --- ED --- -LW T9,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T7,0298 (SP) -ADDIU T0,T9,0004 -SW T0,028C (SP) ;cycles+=4 -ADDU T5,T7,T6 -LBU T8,0000 (T5) ;T8=ROM+PC: cmd -LW T2,0288 (SP) -ADDIU T4,T7,0001 -ANDI T3,T8,00FF -SLTI AT,T3,007F -ADDIU T1,T2,0001 -SH T4,0298 (SP) -SW T1,0288 (SP) -SW T3,0048 (SP) -BNE AT,R0,7F0DEA40 ;branch if cmd 0-7F -SB T8,00E3 (SP) -ADDIU T9,T3,FF60 ;cmd-=A0 -SLTIU AT,T9,001C -BEQ AT,R0,7F0E1A6C ;skip if not A0-BB -SLL T9,T9,0x2 -LUI AT,8006 -ADDU AT,AT,T9 -LW T9,C6AC (AT) ;T9=8005C6AC+offset: p->handler -JR T9 -NOP -//7F0DEA40: -LW T0,0048 (SP) -ADDIU T6,T0,FFC0 -SLTIU AT,T6,003F -BEQ AT,R0,7F0E1A6C ;skip if cmd 0-3F -SLL T6,T6,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,C71C (AT) ;T6=8005C71C+offset: p->handler -JR T6 -NOP -//7F0DEA68: ED.40: IN B,(C) 12(8) -LW T5,028C (SP) -OR A1,S2,R0 ;A1=S2: spec.B -OR A2,S3,R0 ;A2=S3: spec.C -ADDIU A0,T5,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T7,028C (SP) -ANDI T4,V0,FFFF -SRA T2,T4,0x8 -SH V0,00E0 (SP) ;SP+E0= input -ADDU T1,T7,T2 -LBU S2,00E1 (SP) ;S2= keys set spec.B -LUI T7,8009 -LW T7,E334 (T7) ;T7=8008E334: keyboardtbl -SLTIU T3,S2,0001 -SW T3,0048 (SP) ;SP+48= TRUE if input=0 -SW T1,028C (SP) ;cycles+= upper bit if set (usually isn't) -ADDU T2,S2,T7 -LBU T1,0000 (T2) ;T1=keyboardtbl[keys] -ANDI T9,S1,0001 ;T9= retained flags (00000001) -ANDI T0,S2,00A8 ;T0= keys & A8 (10101000) -OR T6,T9,T0 -SLL T8,T3,0x6 ;T8= ZERO flag (40) -OR T4,T6,T8 -OR S1,T1,T4 ;set flags: Sign, Zero, Half-carry, Parity; unset flags: additioN -ANDI T3,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T3,R0 -//7F0DEAD8: -LW T9,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T9,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S2,R0 -LW T5,028C (SP) -SW V0,0048 (SP) -ADDU T8,T5,V0 -BEQ R0,R0,7F0E27FC -SW T8,028C (SP) -//7F0DEB08: -SLL T1,S2,0x8 -LW T7,028C (SP) -OR T4,T1,S3 -SLL T3,S6,0x8 -OR T9,T3,S7 -ANDI T0,T4,FFFF -SUBU T5,T9,T0 -ANDI T6,S1,0001 -LUI AT,0001 -ORI AT,AT,FFFF -SUBU T8,T5,T6 -ADDIU T2,T7,000B -AND T7,T8,AT -SRL T3,T7,0x8 -ANDI T9,T3,00A8 -SRL T0,T7,0x10 -SW T2,028C (SP) ;cycles+=B -OR T5,T9,T0 -ANDI T2,T7,FFFF -SLTIU T1,T2,0001 -ORI T6,T5,0002 -SLL T0,S6,0x8 -OR T5,T0,S7 -ANDI T2,T4,0FFF -ANDI T3,S1,0001 -ADDU T9,T2,T3 -ANDI T8,T5,0FFF -SLT T2,T8,T9 -SLL T3,T2,0x4 -OR T0,T6,T3 -SLL T5,S6,0x8 -OR T8,T5,S7 -SLL T2,S6,0x8 -OR T6,T2,S7 -OR T3,T4,R0 -XOR T5,T6,T3 -XOR T9,T8,T7 -AND T8,T5,T9 -ANDI T2,T8,8000 -SH T4,00DE (SP) -SRL T4,T2,0xD -OR T6,T0,T4 -SLL T3,T1,0x6 -OR S1,T6,T3 -SRL S6,T7,0x8 -ANDI T8,S6,00FF -ORI T5,S1,0002 -SW T7,00D8 (SP) -LBU S7,00DB (SP) -ANDI S1,T5,00FF -OR S6,T8,R0 -BEQ R0,R0,7F0E27FC -SW T1,0048 (SP) -//7F0DEBDC: -LW T2,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T4,0298 (SP) -ADDIU T0,T2,0010 -SW T0,028C (SP) ;cycles+=10 -ADDU T5,T1,T4 -LBU T9,0001 (T5) -ADDU T6,T4,T1 -LBU T3,0000 (T6) -SLL T7,T9,0x8 -ADDIU T2,T4,0002 -OR T8,T3,T7 -ANDI T0,T8,FFFF -SLTI AT,T0,5B00 -SH T8,00D6 (SP) -BNE AT,R0,7F0DEC38 -SH T2,0298 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -ADDU T1,T6,T0 -BEQ R0,R0,7F0DECB8 -SB S3,0000 (T1) -//7F0DEC38: -LHU T5,00D6 (SP) -LHU T6,00D6 (SP) -LUI T9,8009 -SLTI AT,T5,5800 -BNEL AT,R0,7F0DEC7C -SLTI AT,T6,4000 -LW T9,E328 (T9) ;T9=spectrum.ROMs -LUI T8,8009 -ADDIU T7,R0,0001 -ADDU T3,T9,T5 -SB S3,0000 (T3) -LHU T4,00D6 (SP) -LW T8,E32C (T8) -ADDU T2,T8,T4 -BEQ R0,R0,7F0DECB8 -SB T7,A800 (T2) -//7F0DEC78: -SLTI AT,T6,4000 -BNE AT,R0,7F0DECB8 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LUI T2,8009 -ADDIU T9,R0,0001 -ADDU T1,T0,T6 -SB S3,0000 (T1) -LHU T5,00D6 (SP) -LW T2,E32C (T2) -ANDI T3,T5,1800 -SRA T8,T3,0x3 -ANDI T4,T5,00FF -OR T7,T8,T4 -ADDU T0,T2,T7 -SB T9,0000 (T0) -//7F0DECB8: -LHU T6,00D6 (SP) -LHU T8,00D6 (SP) -LUI T3,8009 -ADDIU T1,T6,0001 -SLTI AT,T1,5B00 -BNE AT,R0,7F0DECE4 -ADDIU T4,T8,0001 -LW T3,E328 (T3) ;T3=spectrum.ROMs -ADDU T5,T3,T6 -BEQ R0,R0,7F0E27FC -SB S2,0001 (T5) -//7F0DECE4: -SLTI AT,T4,5800 -BNE AT,R0,7F0DED1C -LHU T6,00D6 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LUI T0,8009 -ADDIU T9,R0,0001 -ADDU T7,T2,T8 -SB S2,0001 (T7) -LHU T1,00D6 (SP) -LW T0,E32C (T0) -ADDU T3,T0,T1 -BEQ R0,R0,7F0E27FC -SB T9,A801 (T3) -//7F0DED1C: -ADDIU T5,T6,0001 -SLTI AT,T5,4000 -BNE AT,R0,7F0E27FC -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -ADDIU T8,R0,0001 -ADDU T2,T4,T6 -SB S2,0001 (T2) -LHU T7,00D6 (SP) -LUI T4,8009 -LW T4,E32C (T4) -ADDIU T0,T7,0001 -ANDI T1,T0,1800 -SRA T9,T1,0x3 -ANDI T3,T0,00FF -OR T5,T9,T3 -ADDU T6,T4,T5 -BEQ R0,R0,7F0E27FC -SB T8,0000 (T6) -//7F0DED68: -SUBU S0,R0,S0 -ANDI T1,S0,00FF -LW T2,028C (SP) -SLTIU T0,T1,0001 -ANDI T8,T1,000F -OR S0,T1,R0 -ANDI T9,T1,00A8 -ADDIU T7,T2,0004 -XORI T1,T1,0080 -SLT T6,R0,T8 -SLL T4,T0,0x6 -SW T7,028C (SP) ;cycles+=4 -OR T5,T9,T4 -SLL T2,T6,0x4 -SLTIU T1,T1,0001 -SW T0,0048 (SP) -SLL T0,T1,0x2 -OR T7,T5,T2 -OR T3,T7,T0 -ORI T9,T3,0002 -SLT T4,R0,S0 -OR S1,T9,T4 -ANDI T8,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T8,R0 -//7F0DEDCC: -LW T6,028C (SP) -LUI T3,8009 -LBU T2,029C (SP) -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T0,0292 (SP) -ADDIU T5,T6,0004 -SW T5,028C (SP) ;cycles+=4 -ADDIU T7,T5,0006 -SW T7,028C (SP) ;cycles+=6 A total -SB T2,029D (SP) -ADDU T8,T3,T0 -LBU T6,0001 (T8) -ADDU T9,T0,T3 -LBU T4,0000 (T9) -SLL T5,T6,0x8 -ADDIU T1,T0,0002 -OR T2,T4,T5 -SH T2,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T1,0292 (SP) -//7F0DEE1C: -LW T7,028C (SP) -SB R0,029B (SP) -ADDIU T9,T7,0004 -BEQ R0,R0,7F0E27FC -SW T9,028C (SP) ;cycles+=4 -//7F0DEE30: -LW T3,028C (SP) -SB S0,029E (SP) -ADDIU T8,T3,0005 -BEQ R0,R0,7F0E27FC -SW T8,028C (SP) ;cycles+=5 -//7F0DEE44: ED.48 IN C,(C) 12(8) -LW T6,028C (SP) -OR A1,S2,R0 ;A1=spec.B -OR A2,S3,R0 ;A2=spec.C -ADDIU A0,T6,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T5,028C (SP) -ANDI T2,V0,FFFF -SRA T0,T2,0x8 -SH V0,00D4 (SP) ;SP+D4= input -ADDU T1,T5,T0 -LBU S3,00D5 (SP) ;S3=keys set spec.C -LUI T5,8009 -LW T5,E334 (T5) ;T5=8008E334: keyboardtbl -SLTIU T7,S3,0001 -SW T7,0048 (SP) -SW T1,028C (SP) ;cycles+=upper bit if set -ADDU T0,S3,T5 -LBU T1,0000 (T0) ;T1=keyboardtbl[keys] -ANDI T9,S1,0001 -ANDI T3,S3,00A8 -OR T8,T9,T3 -SLL T4,T7,0x6 -OR T2,T8,T4 -OR S1,T1,T2 -ANDI T7,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 ;set flags: -//7F0DEEB4: -LW T9,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T9,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S3,R0 -LW T6,028C (SP) -SW V0,0048 (SP) -ADDU T4,T6,V0 -BEQ R0,R0,7F0E27FC -SW T4,028C (SP) -//7F0DEEE4: -SLL T1,S2,0x8 -OR T2,T1,S3 -SLL T7,S6,0x8 -OR T9,T7,S7 -ANDI T3,T2,FFFF -LW T5,028C (SP) -ADDU T6,T9,T3 -ANDI T8,S1,0001 -ADDU T4,T6,T8 -ADDIU T0,T5,000B -SRL T1,T4,0x8 -SW T0,028C (SP) ;cycles+=B -ANDI T7,T1,00A8 -ANDI T5,T4,FFFF -SRL T9,T4,0x10 -SLL T6,S6,0x8 -OR T8,T6,S7 -OR T3,T7,T9 -SLTIU T0,T5,0001 -ANDI T5,T8,0FFF -ANDI T7,T2,0FFF -ADDU T9,T5,T7 -ANDI T6,S1,0001 -ADDU T8,T9,T6 -ADDIU AT,R0,0FFF -SLT T1,AT,T8 -SLL T5,T1,0x4 -OR T7,T3,T5 -SLL T9,S6,0x8 -OR T6,T9,S7 -SLL T1,S6,0x8 -NOR T3,T1,S7 -OR T5,T2,R0 -XOR T9,T3,T5 -XOR T8,T6,T4 -AND T6,T9,T8 -ANDI T1,T6,8000 -SH T2,00D2 (SP) -SRL T2,T1,0xD -OR T3,T7,T2 -SLL T5,T0,0x6 -OR S1,T3,T5 -SRL S6,T4,0x8 -ANDI T6,S6,00FF -ORI T9,S1,0002 -SW T4,00CC (SP) -LBU S7,00CF (SP) -ANDI S1,T9,00FF -OR S6,T6,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0DEFB0: -LW T1,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T2,0298 (SP) -ADDIU T7,T1,0010 -SW T7,028C (SP) ;cycles+=10 -ADDU T9,T0,T2 -LBU T8,0001 (T9) -ADDU T3,T2,T0 -LBU T5,0000 (T3) -SLL T4,T8,0x8 -ADDIU T1,T2,0002 -OR T6,T5,T4 -ANDI T7,T6,FFFF -SH T6,00CA (SP) -SH T1,0298 (SP) -ADDU T3,T7,T0 -LBU S3,0000 (T3) -BEQ R0,R0,7F0E27FC -LBU S2,0001 (T3) -//7F0DF000: -SUBU S0,R0,S0 -ANDI T5,S0,00FF -LW T9,028C (SP) -SLTIU T4,T5,0001 -ANDI T0,T5,000F -OR S0,T5,R0 -ANDI T6,T5,00A8 -ADDIU T8,T9,0004 -XORI T5,T5,0080 -SLT T3,R0,T0 -SLL T1,T4,0x6 -SW T8,028C (SP) ;cycles+=4 -OR T7,T6,T1 -SLL T9,T3,0x4 -SLTIU T5,T5,0001 -SW T4,0048 (SP) -SLL T4,T5,0x2 -OR T8,T7,T9 -OR T2,T8,T4 -ORI T6,T2,0002 -SLT T1,R0,S0 -OR S1,T6,T1 -ANDI T0,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T0,R0 -//7F0DF064: -LW T3,028C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T8,0292 (SP) -ADDIU T7,T3,0004 -SW T7,028C (SP) ;cycles+=4 -ADDIU T5,T7,0006 -SW T5,028C (SP) ;cycles+=6 A total -ADDU T1,T4,T8 -LBU T0,0001 (T1) -ADDU T2,T8,T4 -LBU T6,0000 (T2) -SLL T3,T0,0x8 -ADDIU T9,T8,0002 -OR T7,T6,T3 -SH T7,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T9,0292 (SP) -//7F0DF0AC: -LW T5,028C (SP) -ADDIU T4,R0,0001 -SB T4,029B (SP) -ADDIU T2,T5,0004 -BEQ R0,R0,7F0E27FC -SW T2,028C (SP) ;cycles+=4 -//7F0DF0C4: -LW T1,028C (SP) -ANDI T6,S0,00FF -SB S0,02A7 (SP) -ADDIU T0,T1,0005 -SW T0,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SW T6,0288 (SP) -//7F0DF0E0: -LW T3,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T3,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T8,028C (SP) -ANDI T9,V0,FFFF -SRA T5,T9,0x8 -SH V0,00C8 (SP) -ADDU T2,T8,T5 -LBU S4,00C9 (SP) -LUI T8,8009 -LW T8,E334 (T8) ;T8=8008E334: keyboardtbl -SLTIU T4,S4,0001 -SW T4,0048 (SP) -SW T2,028C (SP) -ADDU T5,S4,T8 -LBU T2,0000 (T5) -ANDI T1,S1,0001 -ANDI T0,S4,00A8 -OR T6,T1,T0 -SLL T7,T4,0x6 -OR T9,T6,T7 -OR S1,T2,T9 -ANDI T4,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T4,R0 -//7F0DF150: -LW T1,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T1,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S4,R0 -LW T3,028C (SP) -SW V0,0048 (SP) -ADDU T7,T3,V0 -BEQ R0,R0,7F0E27FC -SW T7,028C (SP) -//7F0DF180: -SLL T2,S4,0x8 -LW T8,028C (SP) -OR T9,T2,S5 -SLL T4,S6,0x8 -OR T1,T4,S7 -ANDI T0,T9,FFFF -SUBU T3,T1,T0 -ANDI T6,S1,0001 -LUI AT,0001 -ORI AT,AT,FFFF -SUBU T7,T3,T6 -ADDIU T5,T8,000B -AND T8,T7,AT -SRL T4,T8,0x8 -ANDI T1,T4,00A8 -SRL T0,T8,0x10 -SW T5,028C (SP) ;cycles+=B -OR T3,T1,T0 -ANDI T5,T8,FFFF -SLTIU T2,T5,0001 -ORI T6,T3,0002 -SLL T0,S6,0x8 -OR T3,T0,S7 -ANDI T5,T9,0FFF -ANDI T4,S1,0001 -ADDU T1,T5,T4 -ANDI T7,T3,0FFF -SLT T5,T7,T1 -SLL T4,T5,0x4 -OR T0,T6,T4 -SLL T3,S6,0x8 -OR T7,T3,S7 -SLL T5,S6,0x8 -OR T6,T5,S7 -OR T4,T9,R0 -XOR T3,T6,T4 -XOR T1,T7,T8 -AND T7,T3,T1 -ANDI T5,T7,8000 -SH T9,00C6 (SP) -SRL T9,T5,0xD -OR T6,T0,T9 -SLL T4,T2,0x6 -OR S1,T6,T4 -SRL S6,T8,0x8 -ANDI T7,S6,00FF -ORI T3,S1,0002 -SW T8,00C0 (SP) -LBU S7,00C3 (SP) -ANDI S1,T3,00FF -OR S6,T7,R0 -BEQ R0,R0,7F0E27FC -SW T2,0048 (SP) -//7F0DF254: -LW T5,028C (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LHU T9,0298 (SP) -ADDIU T0,T5,0010 -SW T0,028C (SP) ;cycles+=10 -ADDU T3,T2,T9 -LBU T1,0001 (T3) -ADDU T6,T9,T2 -LBU T4,0000 (T6) -SLL T8,T1,0x8 -ADDIU T5,T9,0002 -OR T7,T4,T8 -ANDI T0,T7,FFFF -SLTI AT,T0,5B00 -SH T7,00BE (SP) -BNE AT,R0,7F0DF2B0 -SH T5,0298 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -ADDU T2,T6,T0 -BEQ R0,R0,7F0DF330 -SB S5,0000 (T2) -LHU T3,00BE (SP) -LHU T6,00BE (SP) -LUI T1,8009 -SLTI AT,T3,5800 -BNEL AT,R0,7F0DF2F4 -SLTI AT,T6,4000 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LUI T7,8009 -ADDIU T8,R0,0001 -ADDU T4,T1,T3 -SB S5,0000 (T4) -LHU T9,00BE (SP) -LW T7,E32C (T7) -ADDU T5,T7,T9 -BEQ R0,R0,7F0DF330 -SB T8,A800 (T5) -SLTI AT,T6,4000 -BNE AT,R0,7F0DF330 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LUI T5,8009 -ADDIU T1,R0,0001 -ADDU T2,T0,T6 -SB S5,0000 (T2) -LHU T3,00BE (SP) -LW T5,E32C (T5) -ANDI T4,T3,1800 -SRA T7,T4,0x3 -ANDI T9,T3,00FF -OR T8,T7,T9 -ADDU T0,T5,T8 -SB T1,0000 (T0) -LHU T6,00BE (SP) -LHU T7,00BE (SP) -LUI T4,8009 -ADDIU T2,T6,0001 -SLTI AT,T2,5B00 -BNE AT,R0,7F0DF35C -ADDIU T9,T7,0001 -LW T4,E328 (T4) ;T4=spectrum.ROMs -ADDU T3,T4,T6 -BEQ R0,R0,7F0E27FC -SB S4,0001 (T3) -SLTI AT,T9,5800 -BNE AT,R0,7F0DF394 -LHU T6,00BE (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LUI T0,8009 -ADDIU T1,R0,0001 -ADDU T8,T5,T7 -SB S4,0001 (T8) -LHU T2,00BE (SP) -LW T0,E32C (T0) -ADDU T4,T0,T2 -BEQ R0,R0,7F0E27FC -SB T1,A801 (T4) -ADDIU T3,T6,0001 -SLTI AT,T3,4000 -BNE AT,R0,7F0E27FC -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -ADDIU T7,R0,0001 -ADDU T5,T9,T6 -SB S4,0001 (T5) -LHU T8,00BE (SP) -LUI T9,8009 -LW T9,E32C (T9) -ADDIU T0,T8,0001 -ANDI T2,T0,1800 -SRA T1,T2,0x3 -ANDI T4,T0,00FF -OR T3,T1,T4 -ADDU T6,T9,T3 -BEQ R0,R0,7F0E27FC -SB T7,0000 (T6) -//7F0DF3E0: -SUBU S0,R0,S0 -ANDI T2,S0,00FF -LW T5,028C (SP) -SLTIU T0,T2,0001 -ANDI T7,T2,000F -OR S0,T2,R0 -ANDI T1,T2,00A8 -ADDIU T8,T5,0004 -XORI T2,T2,0080 -SLT T6,R0,T7 -SLL T9,T0,0x6 -SW T8,028C (SP) ;cycles+=4 -OR T3,T1,T9 -SLL T5,T6,0x4 -SLTIU T2,T2,0001 -SW T0,0048 (SP) -SLL T0,T2,0x2 -OR T8,T3,T5 -OR T4,T8,T0 -ORI T1,T4,0002 -SLT T9,R0,S0 -OR S1,T1,T9 -ANDI T7,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0DF444: -LW T6,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T8,0292 (SP) -ADDIU T3,T6,0004 -SW T3,028C (SP) ;cycles+=4 -ADDIU T2,T3,0006 -SW T2,028C (SP) ;cycles+=6 A total -ADDU T9,T0,T8 -LBU T7,0001 (T9) -ADDU T4,T8,T0 -LBU T1,0000 (T4) -SLL T6,T7,0x8 -ADDIU T5,T8,0002 -OR T3,T1,T6 -SH T3,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T5,0292 (SP) -//7F0DF48C: -LW T2,028C (SP) -ADDIU T0,R0,0002 -SB T0,029B (SP) -ADDIU T4,T2,0004 -BEQ R0,R0,7F0E27FC -SW T4,028C (SP) ;cycles+=4 -//7F0DF4A4: -LBU S0,029E (SP) -LW T9,028C (SP) -LBU T0,029C (SP) -ANDI T6,S1,0001 -SLTIU T1,S0,0001 -ANDI T3,S0,00A8 -OR T8,T6,T3 -SLL T2,T1,0x6 -ADDIU T7,T9,0005 -OR T4,T8,T2 -SLL T9,T0,0x2 -SW T7,028C (SP) ;cycles+=5 -OR S1,T4,T9 -ANDI T7,S1,00FF -OR S1,T7,R0 -BEQ R0,R0,7F0E27FC -SW T1,0048 (SP) -//7F0DF4E8: -LW T1,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T1,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T3,028C (SP) -ANDI T5,V0,FFFF -SRA T8,T5,0x8 -SH V0,00BC (SP) -ADDU T2,T3,T8 -LBU S5,00BD (SP) -LUI T3,8009 -LW T3,E334 (T3) ;T3=8008E334: keyboardtbl -SLTIU T0,S5,0001 -SW T0,0048 (SP) -SW T2,028C (SP) -ADDU T8,S5,T3 -LBU T2,0000 (T8) -ANDI T4,S1,0001 -ANDI T9,S5,00A8 -OR T7,T4,T9 -SLL T6,T0,0x6 -OR T5,T7,T6 -OR S1,T2,T5 -ANDI T0,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T0,R0 -//7F0DF558: -LW T4,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T4,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S5,R0 -LW T1,028C (SP) -SW V0,0048 (SP) -ADDU T6,T1,V0 -BEQ R0,R0,7F0E27FC -SW T6,028C (SP) -//7F0DF588: -SLL T2,S4,0x8 -OR T5,T2,S5 -SLL T0,S6,0x8 -OR T4,T0,S7 -ANDI T9,T5,FFFF -LW T3,028C (SP) -ADDU T1,T4,T9 -ANDI T7,S1,0001 -ADDU T6,T1,T7 -ADDIU T8,T3,000B -SRL T2,T6,0x8 -SW T8,028C (SP) ;cycles+=B -ANDI T0,T2,00A8 -ANDI T3,T6,FFFF -SRL T4,T6,0x10 -SLL T1,S6,0x8 -OR T7,T1,S7 -OR T9,T0,T4 -SLTIU T8,T3,0001 -ANDI T3,T7,0FFF -ANDI T0,T5,0FFF -ADDU T4,T3,T0 -ANDI T1,S1,0001 -ADDU T7,T4,T1 -ADDIU AT,R0,0FFF -SLT T2,AT,T7 -SLL T3,T2,0x4 -OR T0,T9,T3 -SLL T4,S6,0x8 -OR T1,T4,S7 -SLL T2,S6,0x8 -NOR T9,T2,S7 -OR T3,T5,R0 -XOR T4,T9,T3 -XOR T7,T1,T6 -AND T1,T4,T7 -ANDI T2,T1,8000 -SH T5,00BA (SP) -SRL T5,T2,0xD -OR T9,T0,T5 -SLL T3,T8,0x6 -OR S1,T9,T3 -SRL S6,T6,0x8 -ANDI T1,S6,00FF -ORI T4,S1,0002 -SW T6,00B4 (SP) -LBU S7,00B7 (SP) -ANDI S1,T4,00FF -OR S6,T1,R0 -BEQ R0,R0,7F0E27FC -SW T8,0048 (SP) -//7F0DF654: -LW T2,028C (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T5,0298 (SP) -ADDIU T0,T2,0010 -SW T0,028C (SP) ;cycles+=10 -ADDU T4,T8,T5 -LBU T7,0001 (T4) -ADDU T9,T5,T8 -LBU T3,0000 (T9) -SLL T6,T7,0x8 -ADDIU T2,T5,0002 -OR T1,T3,T6 -ANDI T0,T1,FFFF -SH T1,00B2 (SP) -SH T2,0298 (SP) -ADDU T9,T0,T8 -LBU S5,0000 (T9) -BEQ R0,R0,7F0E27FC -LBU S4,0001 (T9) -//7F0DF6A4: -SUBU S0,R0,S0 -ANDI T3,S0,00FF -LW T4,028C (SP) -SLTIU T6,T3,0001 -ANDI T8,T3,000F -OR S0,T3,R0 -ANDI T1,T3,00A8 -ADDIU T7,T4,0004 -XORI T3,T3,0080 -SLT T9,R0,T8 -SLL T2,T6,0x6 -SW T7,028C (SP) ;cycles+=4 -OR T0,T1,T2 -SLL T4,T9,0x4 -SLTIU T3,T3,0001 -SW T6,0048 (SP) -SLL T6,T3,0x2 -OR T7,T0,T4 -OR T5,T7,T6 -ORI T1,T5,0002 -SLT T2,R0,S0 -OR S1,T1,T2 -ANDI T8,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T8,R0 -//7F0DF708: -LW T9,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T7,0292 (SP) -ADDIU T0,T9,0004 -SW T0,028C (SP) ;cycles+=4 -ADDIU T3,T0,0006 -SW T3,028C (SP) ;cycles+=6 A total -ADDU T2,T6,T7 -LBU T8,0001 (T2) -ADDU T5,T7,T6 -LBU T1,0000 (T5) -SLL T9,T8,0x8 -ADDIU T4,T7,0002 -OR T0,T1,T9 -SH T0,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T4,0292 (SP) -//7F0DF750: -LW T3,028C (SP) -ADDIU T6,R0,0003 -SB T6,029B (SP) -ADDIU T5,T3,0004 -BEQ R0,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=4 -//7F0DF768: -LBU T1,02A7 (SP) -LW T0,0288 (SP) -LW T2,028C (SP) -ANDI T9,T1,0080 -ANDI T7,T0,007F -OR S0,T9,T7 -ANDI T3,S0,00FF -ADDIU T8,T2,0005 -LBU T7,029C (SP) -SW T8,028C (SP) ;cycles+=5 -ANDI T2,T3,00A8 -SLTIU T5,T3,0001 -ANDI T6,S1,0001 -OR T8,T6,T2 -SLL T0,T5,0x6 -SB S0,02A7 (SP) -OR T9,T8,T0 -SLL T4,T7,0x2 -OR S0,T3,R0 -OR S1,T9,T4 -ANDI T3,S1,00FF -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -SW T5,0048 (SP) -//7F0DF7C8: -LW T5,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T5,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T2,028C (SP) -ANDI T1,V0,FFFF -SRA T8,T1,0x8 -SH V0,00B0 (SP) -ADDU T0,T2,T8 -LBU S6,00B1 (SP) -LUI T2,8009 -LW T2,E334 (T2) ;T2=8008E334: keyboardtbl -SLTIU T7,S6,0001 -SW T7,0048 (SP) -SW T0,028C (SP) -ADDU T8,S6,T2 -LBU T0,0000 (T8) -ANDI T9,S1,0001 -ANDI T4,S6,00A8 -OR T3,T9,T4 -SLL T6,T7,0x6 -OR T1,T3,T6 -OR S1,T0,T1 -ANDI T7,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0DF838: -LW T9,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T9,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S6,R0 -LW T5,028C (SP) -SW V0,0048 (SP) -ADDU T6,T5,V0 -BEQ R0,R0,7F0E27FC -SW T6,028C (SP) -//7F0DF868: -SLL T0,S6,0x8 -LW T2,028C (SP) -OR T1,T0,S7 -SLL T7,S6,0x8 -OR T9,T7,S7 -ANDI T4,T1,FFFF -SUBU T5,T9,T4 -ANDI T3,S1,0001 -LUI AT,0001 -ORI AT,AT,FFFF -SUBU T6,T5,T3 -ADDIU T8,T2,000B -AND T2,T6,AT -SRL T7,T2,0x8 -ANDI T9,T7,00A8 -SRL T4,T2,0x10 -SW T8,028C (SP) ;cycles+=B -OR T5,T9,T4 -ANDI T8,T2,FFFF -SLTIU T0,T8,0001 -ORI T3,T5,0002 -SLL T4,S6,0x8 -OR T5,T4,S7 -ANDI T8,T1,0FFF -ANDI T7,S1,0001 -ADDU T9,T8,T7 -ANDI T6,T5,0FFF -SLT T8,T6,T9 -SLL T7,T8,0x4 -OR T4,T3,T7 -SLL T5,S6,0x8 -OR T6,T5,S7 -SLL T8,S6,0x8 -OR T3,T8,S7 -OR T7,T1,R0 -XOR T5,T3,T7 -XOR T9,T6,T2 -AND T6,T5,T9 -ANDI T8,T6,8000 -SH T1,00AE (SP) -SRL T1,T8,0xD -OR T3,T4,T1 -SLL T7,T0,0x6 -OR S1,T3,T7 -SRL S6,T2,0x8 -ANDI T6,S6,00FF -ORI T5,S1,0002 -SW T2,00A8 (SP) -LBU S7,00AB (SP) -ANDI S1,T5,00FF -OR S6,T6,R0 -BEQ R0,R0,7F0E27FC -SW T0,0048 (SP) -//7F0DF93C: -LW T8,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T1,0298 (SP) -ADDIU T4,T8,0010 -SW T4,028C (SP) ;cycles+=10 -ADDU T5,T0,T1 -LBU T9,0001 (T5) -ADDU T3,T1,T0 -LBU T7,0000 (T3) -SLL T2,T9,0x8 -ADDIU T8,T1,0002 -OR T6,T7,T2 -ANDI T4,T6,FFFF -SLTI AT,T4,5B00 -SH T6,00A6 (SP) -BNE AT,R0,7F0DF998 -SH T8,0298 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -ADDU T0,T3,T4 -BEQ R0,R0,7F0DFA18 -SB S7,0000 (T0) -LHU T5,00A6 (SP) -LHU T3,00A6 (SP) -LUI T9,8009 -SLTI AT,T5,5800 -BNEL AT,R0,7F0DF9DC -SLTI AT,T3,4000 -LW T9,E328 (T9) ;T9=spectrum.ROMs -LUI T6,8009 -ADDIU T2,R0,0001 -ADDU T7,T9,T5 -SB S7,0000 (T7) -LHU T1,00A6 (SP) -LW T6,E32C (T6) -ADDU T8,T6,T1 -BEQ R0,R0,7F0DFA18 -SB T2,A800 (T8) -SLTI AT,T3,4000 -BNE AT,R0,7F0DFA18 -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LUI T8,8009 -ADDIU T9,R0,0001 -ADDU T0,T4,T3 -SB S7,0000 (T0) -LHU T5,00A6 (SP) -LW T8,E32C (T8) -ANDI T7,T5,1800 -SRA T6,T7,0x3 -ANDI T1,T5,00FF -OR T2,T6,T1 -ADDU T4,T8,T2 -SB T9,0000 (T4) -LHU T3,00A6 (SP) -LHU T6,00A6 (SP) -LUI T7,8009 -ADDIU T0,T3,0001 -SLTI AT,T0,5B00 -BNE AT,R0,7F0DFA44 -ADDIU T1,T6,0001 -LW T7,E328 (T7) ;T7=spectrum.ROMs -ADDU T5,T7,T3 -BEQ R0,R0,7F0E27FC -SB S6,0001 (T5) -SLTI AT,T1,5800 -BNE AT,R0,7F0DFA7C -LHU T3,00A6 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LUI T4,8009 -ADDIU T9,R0,0001 -ADDU T2,T8,T6 -SB S6,0001 (T2) -LHU T0,00A6 (SP) -LW T4,E32C (T4) -ADDU T7,T4,T0 -BEQ R0,R0,7F0E27FC -SB T9,A801 (T7) -ADDIU T5,T3,0001 -SLTI AT,T5,4000 -BNE AT,R0,7F0E27FC -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -ADDIU T6,R0,0001 -ADDU T8,T1,T3 -SB S6,0001 (T8) -LHU T2,00A6 (SP) -LUI T1,8009 -LW T1,E32C (T1) -ADDIU T4,T2,0001 -ANDI T0,T4,1800 -SRA T9,T0,0x3 -ANDI T7,T4,00FF -OR T5,T9,T7 -ADDU T3,T1,T5 -BEQ R0,R0,7F0E27FC -SB T6,0000 (T3) -//7F0DFAC8: -SUBU S0,R0,S0 -ANDI T0,S0,00FF -LW T8,028C (SP) -SLTIU T4,T0,0001 -ANDI T6,T0,000F -OR S0,T0,R0 -ANDI T9,T0,00A8 -ADDIU T2,T8,0004 -XORI T0,T0,0080 -SLT T3,R0,T6 -SLL T1,T4,0x6 -SW T2,028C (SP) ;cycles+=4 -OR T5,T9,T1 -SLL T8,T3,0x4 -SLTIU T0,T0,0001 -SW T4,0048 (SP) -SLL T4,T0,0x2 -OR T2,T5,T8 -OR T7,T2,T4 -ORI T9,T7,0002 -SLT T1,R0,S0 -OR S1,T9,T1 -ANDI T6,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T6,R0 -//7F0DFB2C: -LW T3,028C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T2,0292 (SP) -ADDIU T5,T3,0004 -SW T5,028C (SP) ;cycles+=4 -ADDIU T0,T5,0006 -SW T0,028C (SP) ;cycles+=6 A total -ADDU T1,T4,T2 -LBU T6,0001 (T1) -ADDU T7,T2,T4 -LBU T9,0000 (T7) -SLL T3,T6,0x8 -ADDIU T8,T2,0002 -OR T5,T9,T3 -SH T5,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T8,0292 (SP) -//7F0DFB74: -LW T0,028C (SP) -SB R0,029B (SP) -ADDIU T7,T0,0004 -BEQ R0,R0,7F0E27FC -SW T7,028C (SP) ;cycles+=4 -//7F0DBF88: -LW T4,028C (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -SLL T6,S6,0x8 -OR T9,T6,S7 -ADDIU T1,T4,000E -SW T1,028C (SP) ;cycles+=E -ADDU T5,T9,T3 -LBU T2,0000 (T5) -SLL T0,S0,0x4 -ANDI T1,S0,00F0 -SLL T9,S6,0x8 -ANDI T4,T2,000F -OR S0,T1,T4 -OR T3,T9,S7 -SRA T8,T2,0x4 -OR T7,T0,T8 -ANDI T6,S0,00FF -SLTI AT,T3,5B00 -SB T7,00A4 (SP) -OR S0,T6,R0 -BNE AT,R0,7F0DFC04 -SB T2,00A5 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -OR T5,T7,R0 -SLL T8,S6,0x8 -OR T7,T8,S7 -ADDU T2,T0,T7 -BEQ R0,R0,7F0DFCAC -SB T5,0000 (T2) -SLL T1,S6,0x8 -OR T4,T1,S7 -SLTI AT,T4,5800 -BNE AT,R0,7F0DFC54 -SLL T3,S6,0x8 -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -LBU T6,00A4 (SP) -SLL T3,S6,0x8 -OR T8,T3,S7 -ADDU T0,T9,T8 -LUI T5,8009 -SB T6,0000 (T0) -LW T5,E32C (T5) -SLL T2,S6,0x8 -OR T1,T2,S7 -ADDIU T7,R0,0001 -ADDU T4,T5,T1 -BEQ R0,R0,7F0DFCAC -SB T7,A800 (T4) -//7F0DFC54: -OR T9,T3,S7 -SLTI AT,T9,4000 -BNE AT,R0,7F0DFCAC -LBU T8,00A4 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SLL T0,S6,0x8 -OR T2,T0,S7 -ADDU T5,T6,T2 -SB T8,0000 (T5) -SLL T7,S6,0x8 -OR T4,T7,S7 -LUI T5,8009 -LW T5,E32C (T5) -ANDI T3,T4,1800 -OR T6,T0,S7 -ANDI T2,T6,00FF -SRA T9,T3,0x3 -OR T8,T9,T2 -ADDIU T1,R0,0001 -ADDU T7,T5,T8 -SB T1,0000 (T7) -LUI T8,8009 -LW T8,E334 (T8) ;T8=8008E334: keyboardtbl -SLTIU T4,S0,0001 -SW T4,0048 (SP) -ADDU T1,S0,T8 -LBU T7,0000 (T1) -ANDI T3,S1,0001 -ANDI T0,S0,00A8 -OR T6,T3,T0 -SLL T2,T4,0x6 -OR T5,T6,T2 -OR S1,T7,T5 -ANDI T4,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T4,R0 -//7F0DFCE8: -LW T3,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T3,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T9,028C (SP) -ANDI T6,V0,FFFF -SRA T2,T6,0x8 -SH V0,00A2 (SP) -ADDU T8,T9,T2 -LBU S7,00A3 (SP) -LUI T9,8009 -LW T9,E334 (T9) ;T9=8008E334: keyboardtbl -SLTIU T1,S7,0001 -SW T1,0048 (SP) -SW T8,028C (SP) -ADDU T2,S7,T9 -LBU T8,0000 (T2) -ANDI T7,S1,0001 -ANDI T5,S7,00A8 -OR T4,T7,T5 -SLL T0,T1,0x6 -OR T6,T4,T0 -OR S1,T8,T6 -ANDI T1,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T1,R0 -//7F0DFD58: -LW T7,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T7,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S7,R0 -LW T3,028C (SP) -SW V0,0048 (SP) -ADDU T0,T3,V0 -BEQ R0,R0,7F0E27FC -SW T0,028C (SP) -//7F0DFD88: -SLL T8,S6,0x8 -OR T6,T8,S7 -SLL T1,S6,0x8 -OR T7,T1,S7 -ANDI T5,T6,FFFF -LW T9,028C (SP) -ADDU T3,T7,T5 -ANDI T4,S1,0001 -ADDU T0,T3,T4 -ADDIU T2,T9,000B -SRL T8,T0,0x8 -SW T2,028C (SP) ;cycles+=B -ANDI T1,T8,00A8 -ANDI T9,T0,FFFF -SRL T7,T0,0x10 -SLL T3,S6,0x8 -OR T4,T3,S7 -OR T5,T1,T7 -SLTIU T2,T9,0001 -ANDI T9,T4,0FFF -ANDI T1,T6,0FFF -ADDU T7,T9,T1 -ANDI T3,S1,0001 -ADDU T4,T7,T3 -ADDIU AT,R0,0FFF -SLT T8,AT,T4 -SLL T9,T8,0x4 -OR T1,T5,T9 -SLL T7,S6,0x8 -OR T3,T7,S7 -SLL T8,S6,0x8 -NOR T5,T8,S7 -OR T9,T6,R0 -XOR T7,T5,T9 -XOR T4,T3,T0 -AND T3,T7,T4 -ANDI T8,T3,8000 -SH T6,00A0 (SP) -SRL T6,T8,0xD -OR T5,T1,T6 -SLL T9,T2,0x6 -OR S1,T5,T9 -SRL S6,T0,0x8 -ANDI T3,S6,00FF -ORI T7,S1,0002 -SW T0,009C (SP) -LBU S7,009F (SP) -ANDI S1,T7,00FF -OR S6,T3,R0 -BEQ R0,R0,7F0E27FC -SW T2,0048 (SP) -//7F0DFE54: -LW T8,028C (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LHU T6,0298 (SP) -ADDIU T1,T8,0010 -SW T1,028C (SP) ;cycles+=10 -ADDU T7,T2,T6 -LBU T4,0001 (T7) -ADDU T5,T6,T2 -LBU T9,0000 (T5) -SLL T0,T4,0x8 -ADDIU T8,T6,0002 -OR T3,T9,T0 -ANDI T1,T3,FFFF -SH T3,009A (SP) -SH T8,0298 (SP) -ADDU T5,T1,T2 -LBU S7,0000 (T5) -BEQ R0,R0,7F0E27FC -LBU S6,0001 (T5) -//7F0DFEA4: -SUBU S0,R0,S0 -ANDI T9,S0,00FF -LW T7,028C (SP) -SLTIU T0,T9,0001 -ANDI T2,T9,000F -OR S0,T9,R0 -ANDI T3,T9,00A8 -ADDIU T4,T7,0004 -XORI T9,T9,0080 -SLT T5,R0,T2 -SLL T8,T0,0x6 -SW T4,028C (SP) ;cycles+=4 -OR T1,T3,T8 -SLL T7,T5,0x4 -SLTIU T9,T9,0001 -SW T0,0048 (SP) -SLL T0,T9,0x2 -OR T4,T1,T7 -OR T6,T4,T0 -ORI T3,T6,0002 -SLT T8,R0,S0 -OR S1,T3,T8 -ANDI T2,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T2,R0 -//7F0DFF08: -LW T5,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T4,0292 (SP) -ADDIU T1,T5,0004 -SW T1,028C (SP) ;cycles+=4 -ADDIU T9,T1,0006 -SW T9,028C (SP) ;cycles+=6 A total -ADDU T8,T0,T4 -LBU T2,0001 (T8) -ADDU T6,T4,T0 -LBU T3,0000 (T6) -SLL T5,T2,0x8 -ADDIU T7,T4,0002 -OR T1,T3,T5 -SH T1,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T7,0292 (SP) -//7F0DFF50: -LW T9,028C (SP) -ADDIU T0,R0,0001 -SB T0,029B (SP) -ADDIU T6,T9,0004 -BEQ R0,R0,7F0E27FC -SW T6,028C (SP) ;cycles+=4 -//7F0DFF68: -LW T8,028C (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -SLL T3,S6,0x8 -OR T5,T3,S7 -ADDIU T2,T8,0005 -SW T2,028C (SP) ;cycles+=5 -ADDU T4,T5,T1 -LBU T7,0000 (T4) -ANDI T6,S0,000F -ANDI T2,S0,00F0 -SLL T5,S6,0x8 -SRA T8,T7,0x4 -OR S0,T2,T8 -OR T1,T5,S7 -SLL T9,T7,0x4 -OR T0,T6,T9 -ANDI T3,S0,00FF -SLTI AT,T1,5B00 -SB T0,0098 (SP) -OR S0,T3,R0 -BNE AT,R0,7F0DFFE4 -SB T7,0099 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -OR T4,T0,R0 -SLL T9,S6,0x8 -OR T0,T9,S7 -ADDU T7,T6,T0 -BEQ R0,R0,7F0E008C -SB T4,0000 (T7) -SLL T2,S6,0x8 -OR T8,T2,S7 -SLTI AT,T8,5800 -BNE AT,R0,7F0E0034 -SLL T1,S6,0x8 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LBU T3,0098 (SP) -SLL T1,S6,0x8 -OR T9,T1,S7 -ADDU T6,T5,T9 -LUI T4,8009 -SB T3,0000 (T6) -LW T4,E32C (T4) -SLL T7,S6,0x8 -OR T2,T7,S7 -ADDIU T0,R0,0001 -ADDU T8,T4,T2 -BEQ R0,R0,7F0E008C -SB T0,A800 (T8) -OR T5,T1,S7 -SLTI AT,T5,4000 -BNE AT,R0,7F0E008C -LBU T9,0098 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -SLL T6,S6,0x8 -OR T7,T6,S7 -ADDU T4,T3,T7 -SB T9,0000 (T4) -SLL T0,S6,0x8 -OR T8,T0,S7 -LUI T4,8009 -LW T4,E32C (T4) -ANDI T1,T8,1800 -OR T3,T6,S7 -ANDI T7,T3,00FF -SRA T5,T1,0x3 -OR T9,T5,T7 -ADDIU T2,R0,0001 -ADDU T0,T4,T9 -SB T2,0000 (T0) -LUI T9,8009 -LW T9,E334 (T9) -SLTIU T8,S0,0001 -SW T8,0048 (SP) -ADDU T2,S0,T9 -LBU T0,0000 (T2) -ANDI T1,S1,0001 -ANDI T6,S0,00A8 -OR T3,T1,T6 -SLL T7,T8,0x6 -OR T4,T3,T7 -OR S1,T0,T4 -ANDI T8,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T8,R0 -//7F0E00C8: -LW T1,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T1,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T3,028C (SP) -ANDI T8,V0,FFFF -SRA T7,T8,0x8 -ADDU T9,T3,T7 -SW T9,028C (SP) -LUI T9,8009 -LW T9,E334 (T9) -ANDI T2,T8,00FF -ANDI T1,T8,00A8 -SLTIU T0,T2,0001 -SB T8,0097 (SP) -ANDI T4,S1,0001 -OR T6,T4,T1 -SW T0,0048 (SP) -SH V0,0094 (SP) -ADDU T8,T2,T9 -LBU T4,0000 (T8) -SLL T3,T0,0x6 -OR T7,T6,T3 -OR S1,T4,T7 -ANDI T1,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T1,R0 -//7F0E013C: -LW T0,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T0,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,R0,R0 -LW T3,028C (SP) -SW V0,0048 (SP) -ADDU T2,T3,V0 -BEQ R0,R0,7F0E27FC -SW T2,028C (SP) -//7F0E016C: -LHU T4,0292 (SP) -LW T9,028C (SP) -SLL T7,S6,0x8 -OR T1,T7,S7 -ANDI T6,S1,0001 -LUI AT,0001 -SUBU T0,T1,T4 -SUBU T3,T0,T6 -ORI AT,AT,FFFF -ADDIU T8,T9,000B -SW T8,028C (SP) ;cycles+=B -AND T5,T3,AT -SRL T8,T5,0x8 -ANDI T7,T8,00A8 -SRL T1,T5,0x10 -OR T0,T7,T1 -ANDI T2,T5,FFFF -SLTIU T9,T2,0001 -ANDI T2,S1,0001 -ORI T6,T0,0002 -SLL T1,S6,0x8 -ANDI T3,T4,0FFF -ADDU T7,T3,T2 -OR T0,T1,S7 -ANDI T3,T0,0FFF -SLT T2,T3,T7 -SLL T1,T2,0x4 -OR T0,T6,T1 -SLL T3,S6,0x8 -OR T7,T3,S7 -SLL T6,S6,0x8 -OR T1,T6,S7 -XOR T3,T1,T5 -XOR T2,T7,T4 -AND T7,T2,T3 -SH T4,0092 (SP) -ANDI T4,T7,8000 -SRL T6,T4,0xD -SW T5,008C (SP) -SLL T5,T9,0x6 -OR T1,T0,T6 -OR S1,T1,T5 -ORI T2,S1,0002 -ANDI S1,T2,00FF -LBU S7,008F (SP) -ANDI S6,T8,00FF -BEQ R0,R0,7F0E27FC -SW T9,0048 (SP) -//7F0E022C: -LW T7,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T0,0298 (SP) -ADDIU T4,T7,0010 -SW T4,028C (SP) ;cycles+=10 -ADDU T5,T6,T0 -LBU T2,0001 (T5) -ADDU T9,T0,T6 -LBU T1,0000 (T9) -SLL T3,T2,0x8 -ADDIU T7,T0,0002 -OR T8,T1,T3 -ANDI T4,T8,FFFF -SLTI AT,T4,5B00 -SH T8,008A (SP) -BNE AT,R0,7F0E028C -SH T7,0298 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T9,0292 (SP) -ADDU T5,T6,T4 -BEQ R0,R0,7F0E0314 -SB T9,0000 (T5) -LHU T2,008A (SP) -LHU T9,008A (SP) -LUI T3,8009 -SLTI AT,T2,5800 -BNEL AT,R0,7F0E02D4 -SLTI AT,T9,4000 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T1,0292 (SP) -LUI T7,8009 -ADDU T8,T3,T2 -SB T1,0000 (T8) -LHU T6,008A (SP) -LW T7,E32C (T7) -ADDIU T0,R0,0001 -ADDU T4,T7,T6 -BEQ R0,R0,7F0E0314 -SB T0,A800 (T4) -SLTI AT,T9,4000 -BNE AT,R0,7F0E0314 -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T5,0292 (SP) -ADDIU T1,R0,0001 -ADDU T2,T3,T9 -SB T5,0000 (T2) -LHU T8,008A (SP) -LUI T3,8009 -LW T3,E32C (T3) -ANDI T7,T8,1800 -SRA T6,T7,0x3 -ANDI T0,T8,00FF -OR T4,T6,T0 -ADDU T9,T3,T4 -SB T1,0000 (T9) -LHU T5,008A (SP) -LHU T3,008A (SP) -LHU T7,0292 (SP) -ADDIU T2,T5,0001 -SLTI AT,T2,5B00 -BNE AT,R0,7F0E0348 -ADDIU T4,T3,0001 -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SRA T8,T7,0x8 -ADDU T0,T6,T5 -BEQ R0,R0,7F0E27FC -SB T8,0001 (T0) -SLTI AT,T4,5800 -BNE AT,R0,7F0E0388 -LHU T4,008A (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LHU T1,0292 (SP) -LUI T5,8009 -ADDU T7,T2,T3 -SRA T9,T1,0x8 -SB T9,0001 (T7) -LHU T8,008A (SP) -LW T5,E32C (T5) -ADDIU T6,R0,0001 -ADDU T0,T5,T8 -BEQ R0,R0,7F0E27FC -SB T6,A801 (T0) -ADDIU T1,T4,0001 -SLTI AT,T1,4000 -BNE AT,R0,7F0E27FC -LHU T2,0292 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -SRA T3,T2,0x8 -ADDIU T5,R0,0001 -ADDU T7,T9,T4 -SB T3,0001 (T7) -LHU T8,008A (SP) -LUI T4,8009 -LW T4,E32C (T4) -ADDIU T6,T8,0001 -ANDI T0,T6,1800 -SRA T1,T0,0x3 -ANDI T2,T6,00FF -OR T9,T1,T2 -ADDU T3,T4,T9 -BEQ R0,R0,7F0E27FC -SB T5,0000 (T3) -//7F0E03DC: -SUBU S0,R0,S0 -ANDI T0,S0,00FF -LW T7,028C (SP) -SLTIU T6,T0,0001 -ANDI T5,T0,000F -OR S0,T0,R0 -ANDI T1,T0,00A8 -ADDIU T8,T7,0004 -XORI T0,T0,0080 -SLT T3,R0,T5 -SLL T4,T6,0x6 -SW T8,028C (SP) ;cycles+=4 -OR T9,T1,T4 -SLL T7,T3,0x4 -SLTIU T0,T0,0001 -SW T6,0048 (SP) -SLL T6,T0,0x2 -OR T8,T9,T7 -OR T2,T8,T6 -ORI T1,T2,0002 -SLT T4,R0,S0 -OR S1,T1,T4 -ANDI T5,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T5,R0 -//7F0E0440: -LW T3,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T8,0292 (SP) -ADDIU T9,T3,0004 -SW T9,028C (SP) ;cycles+=4 -ADDIU T0,T9,0006 -SW T0,028C (SP) ;cycles+=6 A total -ADDU T4,T6,T8 -LBU T5,0001 (T4) -ADDU T2,T8,T6 -LBU T1,0000 (T2) -SLL T3,T5,0x8 -ADDIU T7,T8,0002 -OR T9,T1,T3 -SH T9,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T7,0292 (SP) -//7F0E0488: -LW T0,028C (SP) -ADDIU T6,R0,0002 -SB T6,029B (SP) -ADDIU T2,T0,0004 -BEQ R0,R0,7F0E27FC -SW T2,028C (SP) ;cycles+=4 -//7F0E04A0: ED.78: IN A,(C) -LW T4,028C (SP) -OR A1,S2,R0 ;A1= spec.B -OR A2,S3,R0 ;A2= spec.C -ADDIU A0,T4,0008 -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=8 -LW T1,028C (SP) -ANDI T3,V0,FFFF -SRA T9,T3,0x8 -SH V0,0088 (SP) -ADDU T8,T1,T9 -LBU S0,0089 (SP) ;spec.A= input -LUI T1,8009 -LW T1,E334 (T1) -SLTIU T7,S0,0001 -SW T7,0048 (SP) -SW T8,028C (SP) -ADDU T9,S0,T1 -LBU T8,0000 (T9) -ANDI T0,S1,0001 -ANDI T2,S0,00A8 -OR T6,T0,T2 -SLL T5,T7,0x6 -OR T3,T6,T5 -OR S1,T8,T3 -ANDI T7,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T7,R0 -//7F0E0510: -LW T0,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T0,0008 -SW A0,028C (SP) ;cycles+=8 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -OR A3,S0,R0 -LW T4,028C (SP) -SW V0,0048 (SP) -ADDU T5,T4,V0 -BEQ R0,R0,7F0E27FC -SW T5,028C (SP) -//7F0E0540: -LHU T8,0292 (SP) -SLL T3,S6,0x8 -LW T1,028C (SP) -OR T7,T3,S7 -ANDI T2,S1,0001 -ADDU T0,T7,T8 -ADDU T4,T0,T2 -ADDIU T9,T1,000B -SW T9,028C (SP) ;cycles+=B -SRL T1,T4,0x8 -ANDI T9,T1,00A8 -ANDI T6,T4,FFFF -SRL T3,T4,0x10 -SLL T0,S6,0x8 -OR T2,T0,S7 -OR T7,T9,T3 -SLTIU T5,T6,0001 -ANDI T6,T2,0FFF -ANDI T9,T8,0FFF -ADDU T3,T6,T9 -ANDI T0,S1,0001 -ADDU T2,T3,T0 -ADDIU AT,R0,0FFF -SLT T6,AT,T2 -SLL T9,T6,0x4 -OR T3,T7,T9 -SLL T0,S6,0x8 -NOR T2,T0,S7 -SLL T7,S6,0x8 -OR T9,T7,S7 -XOR T0,T9,T4 -XOR T6,T2,T8 -AND T2,T6,T0 -SH T8,0086 (SP) -ANDI T8,T2,8000 -SRL T7,T8,0xD -SW T4,0080 (SP) -SLL T4,T5,0x6 -OR T9,T3,T7 -OR S1,T9,T4 -ORI T6,S1,0002 -ANDI S1,T6,00FF -LBU S7,0083 (SP) -ANDI S6,T1,00FF -BEQ R0,R0,7F0E27FC -SW T5,0048 (SP) -//7F0E05F8: -LW T2,028C (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T3,0298 (SP) -ADDIU T8,T2,0010 -SW T8,028C (SP) ;cycles+=10 -ADDU T4,T7,T3 -LBU T6,0001 (T4) -ADDU T5,T3,T7 -LBU T9,0000 (T5) -SLL T0,T6,0x8 -ADDIU T2,T3,0002 -OR T1,T9,T0 -ANDI T8,T1,FFFF -SH T1,007E (SP) -SH T2,0298 (SP) -ADDU T6,T7,T8 -LBU T9,0001 (T6) -ADDU T5,T8,T7 -LBU T4,0000 (T5) -SLL T0,T9,0x8 -OR T1,T4,T0 -BEQ R0,R0,7F0E27FC -SH T1,0292 (SP) -//7F0E0658: -SUBU S0,R0,S0 -ANDI T5,S0,00FF -LW T3,028C (SP) -SLTIU T7,T5,0001 -ANDI T0,T5,000F -OR S0,T5,R0 -ANDI T8,T5,00A8 -ADDIU T2,T3,0004 -XORI T5,T5,0080 -SLT T1,R0,T0 -SLL T9,T7,0x6 -SW T2,028C (SP) ;cycles+=4 -OR T4,T8,T9 -SLL T3,T1,0x4 -SLTIU T5,T5,0001 -SW T7,0048 (SP) -SLL T7,T5,0x2 -OR T2,T4,T3 -OR T6,T2,T7 -ORI T8,T6,0002 -SLT T9,R0,S0 -OR S1,T8,T9 -ANDI T0,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T0,R0 -//7F0E06BC: -LW T1,028C (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T2,0292 (SP) -ADDIU T4,T1,0004 -SW T4,028C (SP) ;cycles+=4 -ADDIU T5,T4,0006 -SW T5,028C (SP) ;cycles+=6 A total -ADDU T9,T7,T2 -LBU T0,0001 (T9) -ADDU T6,T2,T7 -LBU T8,0000 (T6) -SLL T1,T0,0x8 -ADDIU T3,T2,0002 -OR T4,T8,T1 -SH T4,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T3,0292 (SP) -//7F0E0704: -LW T5,028C (SP) -ADDIU T7,R0,0003 -SB T7,029B (SP) -ADDIU T6,T5,0004 -BEQ R0,R0,7F0E27FC -SW T6,028C (SP) ;cycles+=4 -//7F0E071C: -LW T9,028C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -SLL T8,S6,0x8 -OR T1,T8,S7 -ADDIU T0,T9,000C -SW T0,028C (SP) ;cycles+=C -SLL T5,S4,0x8 -ADDU T2,T1,T4 -LBU T3,0000 (T2) -OR T6,T5,S5 -SLTI AT,T6,5B00 -BNE AT,R0,7F0E0770 -SB T3,007D (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -SLL T0,S4,0x8 -OR T8,T0,S5 -ADDU T1,T9,T8 -BEQ R0,R0,7F0E0818 -SB T3,0000 (T1) -//7F0E0770: -SLL T4,S4,0x8 -OR T2,T4,S5 -SLTI AT,T2,5800 -BNE AT,R0,7F0E07C0 -SLL T6,S4,0x8 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LBU T3,007D (SP) -SLL T6,S4,0x8 -OR T0,T6,S5 -ADDU T9,T5,T0 -LUI T7,8009 -SB T3,0000 (T9) -LW T7,E32C (T7) -SLL T1,S4,0x8 -OR T4,T1,S5 -ADDIU T8,R0,0001 -ADDU T2,T7,T4 -BEQ R0,R0,7F0E0818 -SB T8,A800 (T2) -//7F0E07C0: -OR T5,T6,S5 -SLTI AT,T5,4000 -BNE AT,R0,7F0E0818 -LBU T0,007D (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -SLL T9,S4,0x8 -OR T1,T9,S5 -ADDU T7,T3,T1 -SB T0,0000 (T7) -SLL T8,S4,0x8 -OR T2,T8,S5 -LUI T7,8009 -LW T7,E32C (T7) -ANDI T6,T2,1800 -OR T3,T9,S5 -ANDI T1,T3,00FF -SRA T5,T6,0x3 -OR T0,T5,T1 -ADDIU T4,R0,0001 -ADDU T8,T7,T0 -SB T4,0000 (T8) -ADDIU S7,S7,0001 -ANDI T2,S7,00FF -BNE T2,R0,7F0E0834 -OR S7,T2,R0 -ADDIU S6,S6,0001 -ANDI T6,S6,00FF -OR S6,T6,R0 -//7F0E0834: -ADDIU S5,S5,0001 -ANDI T9,S5,00FF -BNE T9,R0,7F0E0850 -OR S5,T9,R0 -ADDIU S4,S4,0001 -ANDI T3,S4,00FF -OR S4,T3,R0 -//7F0E0850: -SLTIU T5,S3,0001 -ADDIU S3,S3,FFFF -ANDI T1,S3,00FF -OR S3,T1,R0 -BEQ T5,R0,7F0E0874 -SW T5,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T0,S2,00FF -OR S2,T0,R0 -//7F0E0874: -LBU T8,007D (SP) -OR T9,S2,S3 -SLT T3,R0,T9 -ANDI T4,S1,00C1 -ANDI T2,T8,0028 -OR T6,T4,T2 -SLL T5,T3,0x2 -OR S1,T6,T5 -ANDI T1,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T1,R0 -//7F0E08A0: -LW T7,028C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -SLL T4,S6,0x8 -ANDI T8,S1,0001 -OR T2,T4,S7 -ADDIU T0,T7,000C -SW T0,028C (SP) ;cycles+=C -SB T8,007C (SP) -ADDU T3,T2,T9 -LBU T6,0000 (T3) -ADDIU S7,S7,0001 -SUBU T5,S0,T6 -ANDI T1,T5,01FF -ANDI T7,T1,FFFF -SLTIU T0,T7,0001 -ANDI T7,S0,000F -ANDI T5,T6,000F -SLT T8,T7,T5 -ANDI T4,T1,00A8 -SRA T9,T1,0x8 -OR T3,T4,T9 -SLL T2,T8,0x4 -OR T5,T1,R0 -XOR T9,S0,T6 -ANDI T7,T9,0080 -XOR T8,T5,S0 -OR T4,T3,T2 -AND T3,T7,T8 -SRA T2,T3,0x5 -SB T6,0079 (SP) -OR T6,T4,T2 -SH T1,007A (SP) -SLL T1,T0,0x6 -ORI T9,T6,0002 -OR S1,T9,T1 -ANDI T5,S1,00FF -ANDI T7,S7,00FF -OR S1,T5,R0 -SW T0,0048 (SP) -BNE T7,R0,7F0E0954 -OR S7,T7,R0 -ADDIU S6,S6,0001 -ANDI T8,S6,00FF -OR S6,T8,R0 -//7F0E0954: -SLTIU T3,S3,0001 -ADDIU S3,S3,FFFF -ANDI T4,S3,00FF -OR S3,T4,R0 -BEQ T3,R0,7F0E0978 -SW T3,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T6,S2,00FF -OR S2,T6,R0 -LBU T9,007C (SP) -OR T5,S2,S3 -SLT T7,R0,T5 -ANDI T0,S1,00FA -SLL T8,T7,0x2 -OR T1,T0,T9 -OR S1,T1,T8 -ANDI T3,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T3,R0 -//7F0E09A0: -LW T4,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T4,000C -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=C -SLL T6,S6,0x8 -OR T0,T6,S7 -SLTI AT,T0,5B00 -BNE AT,R0,7F0E09E8 -SH V0,0076 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -SLL T7,S6,0x8 -OR T1,T7,S7 -ADDU T8,T5,T1 -BEQ R0,R0,7F0E0A90 -SB V0,0000 (T8) -//7F0E09E8: -SLL T3,S6,0x8 -OR T4,T3,S7 -SLTI AT,T4,5800 -BNE AT,R0,7F0E0A38 -SLL T0,S6,0x8 -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T2,0076 (SP) -SLL T0,S6,0x8 -OR T7,T0,S7 -ADDU T5,T6,T7 -LUI T9,8009 -SB T2,0000 (T5) -LW T9,E32C (T9) -SLL T8,S6,0x8 -OR T3,T8,S7 -ADDIU T1,R0,0001 -ADDU T4,T9,T3 -BEQ R0,R0,7F0E0A90 -SB T1,A800 (T4) -//7F0E0A38: -OR T6,T0,S7 -SLTI AT,T6,4000 -BNE AT,R0,7F0E0A90 -LHU T7,0076 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -SLL T5,S6,0x8 -OR T8,T5,S7 -ADDU T9,T2,T8 -SB T7,0000 (T9) -SLL T1,S6,0x8 -OR T4,T1,S7 -LUI T9,8009 -LW T9,E32C (T9) -ANDI T0,T4,1800 -OR T2,T5,S7 -ANDI T8,T2,00FF -SRA T6,T0,0x3 -OR T7,T6,T8 -ADDIU T3,R0,0001 -ADDU T1,T9,T7 -SB T3,0000 (T1) -//7F0E0A90: -LHU T0,0076 (SP) -LW T4,028C (SP) -ADDIU S7,S7,0001 -SRA T5,T0,0x8 -ANDI T6,S7,00FF -ADDU T2,T4,T5 -SW T2,028C (SP) -BNE T6,R0,7F0E0AC0 -OR S7,T6,R0 -ADDIU S6,S6,0001 -ANDI T8,S6,00FF -OR S6,T8,R0 -//7F0E0AC0: -LUI T5,8009 -LW T5,E334 (T5) -ADDIU S2,S2,FFFF -ANDI T9,S2,00FF -ADDU T2,T9,T5 -LBU T6,0000 (T2) -SLT T3,R0,T9 -SLL T1,T3,0x6 -ANDI T7,T9,00A8 -OR S2,T9,R0 -OR T0,T7,T1 -XOR T8,T6,S3 -ANDI T9,T8,0004 -ORI T4,T0,0002 -OR S1,T9,T4 -ANDI T3,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T3,R0 -//7F0E0B08: -LW T7,028C (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -SLL T0,S6,0x8 -OR T5,T0,S7 -ADDIU A0,T7,000C -SW A0,028C (SP) ;cycles+=C -ADDU T6,T5,T2 -LBU A3,0000 (T6) -OR A1,S2,R0 -OR A2,S3,R0 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -SB A3,0075 (SP) -LW T9,028C (SP) -ADDIU S7,S7,0001 -ANDI T7,S7,00FF -ADDU T3,T9,V0 -SW T3,028C (SP) -SW V0,0048 (SP) -BNE T7,R0,7F0E0B68 -OR S7,T7,R0 -ADDIU S6,S6,0001 -ANDI T0,S6,00FF -OR S6,T0,R0 -//7F0E0B68: -ADDIU S2,S2,FFFF -ANDI T5,S2,00FF -ANDI T2,S1,0001 -ORI T6,T2,0012 -ANDI T1,T5,00A8 -SLTIU T9,T5,0001 -SLL T4,T9,0x6 -OR T8,T6,T1 -OR S1,T8,T4 -ANDI T3,S1,00FF -OR S2,T5,R0 -BEQ R0,R0,7F0E27FC -OR S1,T3,R0 -//7F0E0B9C: -LW T7,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SLL T5,S6,0x8 -OR T2,T5,S7 -ADDIU T0,T7,000C -SW T0,028C (SP) ;cycles+=C -SLL T8,S4,0x8 -ADDU T1,T2,T6 -LBU T9,0000 (T1) -OR T4,T8,S5 -SLTI AT,T4,5B00 -BNE AT,R0,7F0E0BF0 -SB T9,0074 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -SLL T0,S4,0x8 -OR T5,T0,S5 -ADDU T2,T7,T5 -BEQ R0,R0,7F0E0C98 -SB T9,0000 (T2) -//7F0E0BF0: -SLL T6,S4,0x8 -OR T1,T6,S5 -SLTI AT,T1,5800 -BNE AT,R0,7F0E0C40 -SLL T4,S4,0x8 -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LBU T9,0074 (SP) -SLL T4,S4,0x8 -OR T0,T4,S5 -ADDU T7,T8,T0 -LUI T3,8009 -SB T9,0000 (T7) -LW T3,E32C (T3) -SLL T2,S4,0x8 -OR T6,T2,S5 -ADDIU T5,R0,0001 -ADDU T1,T3,T6 -BEQ R0,R0,7F0E0C98 -SB T5,A800 (T1) -//7F0E0C40: -OR T8,T4,S5 -SLTI AT,T8,4000 -BNE AT,R0,7F0E0C98 -LBU T0,0074 (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -SLL T7,S4,0x8 -OR T2,T7,S5 -ADDU T3,T9,T2 -SB T0,0000 (T3) -SLL T5,S4,0x8 -OR T1,T5,S5 -LUI T3,8009 -LW T3,E32C (T3) -ANDI T4,T1,1800 -OR T9,T7,S5 -ANDI T2,T9,00FF -SRA T8,T4,0x3 -OR T0,T8,T2 -ADDIU T6,R0,0001 -ADDU T5,T3,T0 -SB T6,0000 (T5) -SLTIU T1,S7,0001 -ADDIU S7,S7,FFFF -ANDI T4,S7,00FF -OR S7,T4,R0 -BEQ T1,R0,7F0E0CBC -SW T1,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T9,S6,00FF -OR S6,T9,R0 -SLTIU T8,S5,0001 -ADDIU S5,S5,FFFF -ANDI T2,S5,00FF -OR S5,T2,R0 -BEQ T8,R0,7F0E0CE0 -SW T8,0048 (SP) -ADDIU S4,S4,FFFF -ANDI T0,S4,00FF -OR S4,T0,R0 -//7F0E0CE0: -SLTIU T6,S3,0001 -ADDIU S3,S3,FFFF -ANDI T5,S3,00FF -OR S3,T5,R0 -BEQ T6,R0,7F0E0D04 -SW T6,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T4,S2,00FF -OR S2,T4,R0 -LBU T9,0074 (SP) -OR T3,S2,S3 -SLT T0,R0,T3 -ANDI T7,S1,00C1 -ANDI T8,T9,0028 -OR T2,T7,T8 -SLL T6,T0,0x2 -OR S1,T2,T6 -ANDI T5,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T5,R0 -//7F0E0D30: -LW T1,028C (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -SLL T7,S6,0x8 -ANDI T9,S1,0001 -OR T8,T7,S7 -ADDIU T4,T1,000C -SW T4,028C (SP) ;cycles+=C -SB T9,0073 (SP) -ADDU T0,T8,T3 -LBU T2,0000 (T0) -SUBU T6,S0,T2 -ANDI T5,T6,01FF -ANDI T1,T5,FFFF -SLTIU T4,T1,0001 -ANDI T1,S0,000F -ANDI T6,T2,000F -SLT T9,T1,T6 -ANDI T7,T5,00A8 -SRA T3,T5,0x8 -OR T0,T7,T3 -SLL T8,T9,0x4 -OR T6,T5,R0 -XOR T3,S0,T2 -ANDI T1,T3,0080 -XOR T9,T6,S0 -OR T7,T0,T8 -AND T0,T1,T9 -SRA T8,T0,0x5 -SB T2,006F (SP) -OR T2,T7,T8 -SH T5,0070 (SP) -SLL T5,T4,0x6 -ORI T3,T2,0002 -SLTIU T1,S7,0001 -OR S1,T3,T5 -ADDIU S7,S7,FFFF -ANDI T6,S1,00FF -SW T4,0048 (SP) -ANDI T9,S7,00FF -OR S1,T6,R0 -OR S7,T9,R0 -BEQ T1,R0,7F0E0DEC -SW T1,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T7,S6,00FF -OR S6,T7,R0 -//7F0E0DEC: -SLTIU T8,S3,0001 -ADDIU S3,S3,FFFF -ANDI T2,S3,00FF -OR S3,T2,R0 -BEQ T8,R0,7F0E0E10 -SW T8,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T3,S2,00FF -OR S2,T3,R0 -//7F0E0E10: -LBU T6,0073 (SP) -OR T9,S2,S3 -SLT T0,R0,T9 -ANDI T5,S1,00FA -SLL T7,T0,0x2 -OR T1,T5,T6 -OR S1,T1,T7 -ANDI T8,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T8,R0 -//7F0E0E38: -LW T2,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T2,000C -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=C -SLL T3,S6,0x8 -OR T5,T3,S7 -SLTI AT,T5,5B00 -BNE AT,R0,7F0E0E80 -SH V0,006C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -SLL T0,S6,0x8 -OR T1,T0,S7 -ADDU T7,T9,T1 -BEQ R0,R0,7F0E0F28 -SB V0,0000 (T7) -//7F0E0E80: -SLL T8,S6,0x8 -OR T2,T8,S7 -SLTI AT,T2,5800 -BNE AT,R0,7F0E0ED0 -SLL T5,S6,0x8 -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T4,006C (SP) -SLL T5,S6,0x8 -OR T0,T5,S7 -ADDU T9,T3,T0 -LUI T6,8009 -SB T4,0000 (T9) -LW T6,E32C (T6) -SLL T7,S6,0x8 -OR T8,T7,S7 -ADDIU T1,R0,0001 -ADDU T2,T6,T8 -BEQ R0,R0,7F0E0F28 -SB T1,A800 (T2) -//7F0E0ED0: -OR T3,T5,S7 -SLTI AT,T3,4000 -BNE AT,R0,7F0E0F28 -LHU T0,006C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -SLL T9,S6,0x8 -OR T7,T9,S7 -ADDU T6,T4,T7 -SB T0,0000 (T6) -SLL T1,S6,0x8 -OR T2,T1,S7 -LUI T6,8009 -LW T6,E32C (T6) -ANDI T5,T2,1800 -OR T4,T9,S7 -ANDI T7,T4,00FF -SRA T3,T5,0x3 -OR T0,T3,T7 -ADDIU T8,R0,0001 -ADDU T1,T6,T0 -SB T8,0000 (T1) -//7F0E0F28: -LHU T5,006C (SP) -LW T2,028C (SP) -SLTIU T3,S7,0001 -ADDIU S7,S7,FFFF -SRA T9,T5,0x8 -ANDI T7,S7,00FF -ADDU T4,T2,T9 -SW T4,028C (SP) -OR S7,T7,R0 -BEQ T3,R0,7F0E0F60 -SW T3,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T0,S6,00FF -OR S6,T0,R0 -LUI T3,8009 -LW T3,E334 (T3) -ADDIU S2,S2,FFFF -ANDI T8,S2,00FF -ADDU T7,T8,T3 -LBU T6,0000 (T7) -ANDI T1,T8,00A8 -SLT T5,R0,T8 -OR S2,T8,R0 -SLL T2,T5,0x6 -XOR T0,T6,S3 -XORI T8,T0,0004 -OR T9,T1,T2 -ORI T4,T9,0002 -ANDI T5,T8,0004 -OR S1,T5,T4 -ANDI T1,S1,00FF -BEQ R0,R0,7F0E27FC -OR S1,T1,R0 -//7F0E0F9C: -LW T2,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SLL T3,S6,0x8 -OR T7,T3,S7 -ADDIU A0,T2,000C -SW A0,028C (SP) ;cycles+=C -ADDU T0,T7,T6 -LBU A3,0000 (T0) -OR A1,S2,R0 -OR A2,S3,R0 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -SB A3,006B (SP) -LW T5,028C (SP) -SLTIU T2,S7,0001 -ADDIU S7,S7,FFFF -SW V0,0048 (SP) -ANDI T3,S7,00FF -ADDU T1,T5,V0 -SW T1,028C (SP) -OR S7,T3,R0 -BEQ T2,R0,7F0E1014 -SW T2,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T6,S6,00FF -OR S6,T6,R0 -ADDIU S2,S2,FFFF -ANDI T0,S2,00FF -ANDI T9,S1,0001 -ORI T8,T9,0012 -ANDI T5,T0,00A8 -SLTIU T1,T0,0001 -SLL T2,T1,0x6 -OR T4,T8,T5 -OR S1,T4,T2 -ANDI T3,S1,00FF -OR S2,T0,R0 -BEQ R0,R0,7F0E27FC -OR S1,T3,R0 -//7F0E1038: -LW T7,028C (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -SLL T0,S6,0x8 -OR T9,T0,S7 -ADDIU T6,T7,000C -SW T6,028C (SP) ;cycles+=C -SLL T4,S4,0x8 -ADDU T5,T9,T8 -LBU T1,0000 (T5) -OR T2,T4,S5 -SLTI AT,T2,5B00 -BNE AT,R0,7F0E109C -SB T1,006A (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -SLL T6,S4,0x8 -OR T0,T6,S5 -ADDU T9,T7,T0 -BEQ R0,R0,7F0E1144 -SB T1,0000 (T9) -//7F0E109C: -SLL T8,S4,0x8 -OR T5,T8,S5 -SLTI AT,T5,5800 -BNE AT,R0,7F0E10EC -SLL T2,S4,0x8 -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LBU T1,006A (SP) -SLL T2,S4,0x8 -OR T6,T2,S5 -ADDU T7,T4,T6 -LUI T3,8009 -SB T1,0000 (T7) -LW T3,E32C (T3) -SLL T9,S4,0x8 -OR T8,T9,S5 -ADDIU T0,R0,0001 -ADDU T5,T3,T8 -BEQ R0,R0,7F0E1144 -SB T0,A800 (T5) -//7F0E10EC: -OR T4,T2,S5 -SLTI AT,T4,4000 -BNE AT,R0,7F0E1144 -LBU T6,006A (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -SLL T7,S4,0x8 -OR T9,T7,S5 -ADDU T3,T1,T9 -SB T6,0000 (T3) -SLL T0,S4,0x8 -OR T5,T0,S5 -LUI T3,8009 -LW T3,E32C (T3) -ANDI T2,T5,1800 -OR T1,T7,S5 -ANDI T9,T1,00FF -SRA T4,T2,0x3 -OR T6,T4,T9 -ADDIU T8,R0,0001 -ADDU T0,T3,T6 -SB T8,0000 (T0) -ADDIU S7,S7,0001 -ANDI T5,S7,00FF -BNE T5,R0,7F0E1160 -OR S7,T5,R0 -ADDIU S6,S6,0001 -ANDI T2,S6,00FF -OR S6,T2,R0 -ADDIU S5,S5,0001 -ANDI T7,S5,00FF -BNE T7,R0,7F0E117C -OR S5,T7,R0 -ADDIU S4,S4,0001 -ANDI T1,S4,00FF -OR S4,T1,R0 -SLTIU T4,S3,0001 -ADDIU S3,S3,FFFF -ANDI T9,S3,00FF -OR S3,T9,R0 -BEQ T4,R0,7F0E11A0 -SW T4,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T6,S2,00FF -OR S2,T6,R0 -//7F0E11A0: -LBU T0,006A (SP) -OR T7,S2,S3 -SLT T1,R0,T7 -ANDI T8,S1,00C1 -ANDI T5,T0,0028 -OR T2,T8,T5 -SLL T4,T1,0x2 -OR S1,T2,T4 -ANDI T9,S1,00FF -OR T3,S2,S3 -BEQ T3,R0,7F0E27FC -OR S1,T9,R0 -LHU T6,0298 (SP) -LW T8,028C (SP) -ADDIU T0,T6,FFFE -ADDIU T5,T8,0005 -SW T5,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0E11EC: -LW T7,028C (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -SLL T4,S6,0x8 -ANDI T2,S1,0001 -OR T9,T4,S7 -ADDIU T1,T7,000C -SW T1,028C (SP) ;cycles+=C -SB T2,0069 (SP) -ADDU T6,T9,T3 -LBU T0,0000 (T6) -ADDIU S7,S7,0001 -ADDIU AT,R0,0004 -SUBU T8,S0,T0 -ANDI T5,T8,01FF -ANDI T7,T5,FFFF -SLTIU T1,T7,0001 -ANDI T7,S0,000F -ANDI T8,T0,000F -SLT T2,T7,T8 -ANDI T4,T5,00A8 -SRA T3,T5,0x8 -OR T6,T4,T3 -SLL T9,T2,0x4 -OR T8,T5,R0 -XOR T3,S0,T0 -ANDI T7,T3,0080 -XOR T2,T8,S0 -OR T4,T6,T9 -AND T6,T7,T2 -SRA T9,T6,0x5 -SB T0,0065 (SP) -OR T0,T4,T9 -SH T5,0066 (SP) -SLL T5,T1,0x6 -ORI T3,T0,0002 -OR S1,T3,T5 -ANDI T8,S1,00FF -ANDI T7,S7,00FF -OR S1,T8,R0 -SW T1,0048 (SP) -BNE T7,R0,7F0E12A4 -OR S7,T7,R0 -ADDIU S6,S6,0001 -ANDI T2,S6,00FF -OR S6,T2,R0 -//7F0E12A4: -SLTIU T6,S3,0001 -ADDIU S3,S3,FFFF -ANDI T4,S3,00FF -OR S3,T4,R0 -BEQ T6,R0,7F0E12C8 -SW T6,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T0,S2,00FF -OR S2,T0,R0 -LBU T3,0069 (SP) -OR T8,S2,S3 -SLT T7,R0,T8 -ANDI T1,S1,00FA -SLL T2,T7,0x2 -OR T5,T1,T3 -OR S1,T5,T2 -ANDI T6,S1,00FF -ANDI T4,T6,0044 -BNE T4,AT,7F0E27FC -OR S1,T6,R0 -LHU T9,0298 (SP) -LW T1,028C (SP) -ADDIU T0,T9,FFFE -ADDIU T3,T1,0005 -SW T3,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0E1310: -LW T8,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T8,000C -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=C -SLL T5,S6,0x8 -OR T2,T5,S7 -SLTI AT,T2,5B00 -BNE AT,R0,7F0E1358 -SH V0,0062 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -SLL T9,S6,0x8 -OR T0,T9,S7 -ADDU T1,T4,T0 -BEQ R0,R0,7F0E1400 -SB V0,0000 (T1) -//7F0E1358: -SLL T3,S6,0x8 -OR T8,T3,S7 -SLTI AT,T8,5800 -BNE AT,R0,7F0E13A8 -SLL T2,S6,0x8 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T7,0062 (SP) -SLL T2,S6,0x8 -OR T9,T2,S7 -ADDU T4,T5,T9 -LUI T6,8009 -SB T7,0000 (T4) -LW T6,E32C (T6) -SLL T1,S6,0x8 -OR T3,T1,S7 -ADDIU T0,R0,0001 -ADDU T8,T6,T3 -BEQ R0,R0,7F0E1400 -SB T0,A800 (T8) -//7F0E13A8: -OR T5,T2,S7 -SLTI AT,T5,4000 -BNE AT,R0,7F0E1400 -LHU T9,0062 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -SLL T4,S6,0x8 -OR T1,T4,S7 -ADDU T6,T7,T1 -SB T9,0000 (T6) -SLL T0,S6,0x8 -OR T8,T0,S7 -LUI T6,8009 -LW T6,E32C (T6) -ANDI T2,T8,1800 -OR T7,T4,S7 -ANDI T1,T7,00FF -SRA T5,T2,0x3 -OR T9,T5,T1 -ADDIU T3,R0,0001 -ADDU T0,T6,T9 -SB T3,0000 (T0) -//7F0E1400: -LHU T2,0062 (SP) -LW T8,028C (SP) -ADDIU S7,S7,0001 -SRA T4,T2,0x8 -ANDI T5,S7,00FF -ADDU T7,T8,T4 -SW T7,028C (SP) -BNE T5,R0,7F0E1430 -OR S7,T5,R0 -ADDIU S6,S6,0001 -ANDI T1,S6,00FF -OR S6,T1,R0 -//7F0E1430: -LUI T4,8009 -LW T4,E334 (T4) -ADDIU S2,S2,FFFF -ANDI T6,S2,00FF -ADDU T7,T6,T4 -LBU T5,0000 (T7) -SLT T3,R0,T6 -SLL T0,T3,0x6 -ANDI T9,T6,00A8 -OR S2,T6,R0 -OR T2,T9,T0 -XOR T1,T5,S3 -ANDI T6,T1,0004 -ORI T8,T2,0002 -OR S1,T6,T8 -ANDI T3,S1,00FF -BEQ S2,R0,7F0E27FC -OR S1,T3,R0 -LHU T9,0298 (SP) -LW T2,028C (SP) -ADDIU T0,T9,FFFE -ADDIU T4,T2,0005 -SW T4,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0E1494: -LW T7,028C (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -SLL T1,S6,0x8 -OR T6,T1,S7 -ADDIU A0,T7,000C -SW A0,028C (SP) ;cycles+=C -ADDU T3,T6,T8 -LBU A3,0000 (T3) -OR A1,S2,R0 -OR A2,S3,R0 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -SB A3,0061 (SP) -LW T0,028C (SP) -ADDIU S7,S7,0001 -ANDI T7,S7,00FF -ADDU T4,T0,V0 -SW T4,028C (SP) -SW V0,0048 (SP) -BNE T7,R0,7F0E14F4 -OR S7,T7,R0 -ADDIU S6,S6,0001 -ANDI T1,S6,00FF -OR S6,T1,R0 -//7F0E14F4: -ADDIU S2,S2,FFFF -ANDI T6,S2,00FF -ANDI T8,S1,0001 -ORI T3,T8,0012 -ANDI T5,T6,00A8 -SLTIU T0,T6,0001 -SLL T2,T0,0x6 -OR T9,T3,T5 -OR S1,T9,T2 -ANDI T4,S1,00FF -OR S2,T6,R0 -BEQ T6,R0,7F0E27FC -OR S1,T4,R0 -LHU T7,0298 (SP) -LW T6,028C (SP) -ADDIU T1,T7,FFFE -ADDIU T8,T6,0005 -SW T8,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) -//7F0E1544: -LW T3,028C (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -SLL T0,S6,0x8 -OR T9,T0,S7 -ADDIU T5,T3,000C -SW T5,028C (SP) ;cycles+=C -SLL T1,S4,0x8 -ADDU T4,T9,T2 -LBU T7,0000 (T4) -OR T6,T1,S5 -SLTI AT,T6,5B00 -BNE AT,R0,7F0E1598 -SB T7,0060 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -SLL T5,S4,0x8 -OR T0,T5,S5 -ADDU T9,T3,T0 -BEQ R0,R0,7F0E1640 -SB T7,0000 (T9) -//7F0E1598: -SLL T2,S4,0x8 -OR T4,T2,S5 -SLTI AT,T4,5800 -BNE AT,R0,7F0E15E8 -SLL T6,S4,0x8 -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LBU T7,0060 (SP) -SLL T6,S4,0x8 -OR T5,T6,S5 -ADDU T3,T1,T5 -LUI T8,8009 -SB T7,0000 (T3) -LW T8,E32C (T8) -SLL T9,S4,0x8 -OR T2,T9,S5 -ADDIU T0,R0,0001 -ADDU T4,T8,T2 -BEQ R0,R0,7F0E1640 -SB T0,A800 (T4) -//7F0E15E8: -OR T1,T6,S5 -SLTI AT,T1,4000 -BNE AT,R0,7F0E1640 -LBU T5,0060 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -SLL T3,S4,0x8 -OR T9,T3,S5 -ADDU T8,T7,T9 -SB T5,0000 (T8) -SLL T0,S4,0x8 -OR T4,T0,S5 -LUI T8,8009 -LW T8,E32C (T8) -ANDI T6,T4,1800 -OR T7,T3,S5 -ANDI T9,T7,00FF -SRA T1,T6,0x3 -OR T5,T1,T9 -ADDIU T2,R0,0001 -ADDU T0,T8,T5 -SB T2,0000 (T0) -//7F0E1640: -SLTIU T4,S7,0001 -ADDIU S7,S7,FFFF -ANDI T6,S7,00FF -OR S7,T6,R0 -BEQ T4,R0,7F0E1664 -SW T4,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T7,S6,00FF -OR S6,T7,R0 -SLTIU T1,S5,0001 -ADDIU S5,S5,FFFF -ANDI T9,S5,00FF -OR S5,T9,R0 -BEQ T1,R0,7F0E1688 -SW T1,0048 (SP) -ADDIU S4,S4,FFFF -ANDI T5,S4,00FF -OR S4,T5,R0 -SLTIU T2,S3,0001 -ADDIU S3,S3,FFFF -ANDI T0,S3,00FF -OR S3,T0,R0 -BEQ T2,R0,7F0E16AC -SW T2,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T6,S2,00FF -OR S2,T6,R0 -LBU T7,0060 (SP) -OR T8,S2,S3 -SLT T5,R0,T8 -ANDI T3,S1,00C1 -ANDI T1,T7,0028 -OR T9,T3,T1 -SLL T2,T5,0x2 -OR S1,T9,T2 -ANDI T0,S1,00FF -OR T4,S2,S3 -BEQ T4,R0,7F0E27FC -OR S1,T0,R0 -LHU T6,0298 (SP) -LW T3,028C (SP) -ADDIU T7,T6,FFFE -ADDIU T1,T3,0005 -SW T1,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T7,0298 (SP) -//7F0E16F8: -LW T8,028C (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -SLL T2,S6,0x8 -ANDI T9,S1,0001 -OR T0,T2,S7 -ADDIU T5,T8,000C -SW T5,028C (SP) ;cycles+=C -SB T9,005F (SP) -ADDU T6,T0,T4 -LBU T7,0000 (T6) -ADDIU AT,R0,0004 -SUBU T3,S0,T7 -ANDI T1,T3,01FF -ANDI T8,T1,FFFF -SLTIU T5,T8,0001 -ANDI T8,S0,000F -ANDI T3,T7,000F -SLT T9,T8,T3 -ANDI T2,T1,00A8 -SRA T4,T1,0x8 -OR T6,T2,T4 -SLL T0,T9,0x4 -OR T3,T1,R0 -XOR T4,S0,T7 -ANDI T8,T4,0080 -XOR T9,T3,S0 -OR T2,T6,T0 -AND T6,T8,T9 -SRA T0,T6,0x5 -SB T7,005B (SP) -OR T7,T2,T0 -SH T1,005C (SP) -SLL T1,T5,0x6 -ORI T4,T7,0002 -SLTIU T8,S7,0001 -OR S1,T4,T1 -ADDIU S7,S7,FFFF -ANDI T3,S1,00FF -SW T5,0048 (SP) -ANDI T9,S7,00FF -OR S1,T3,R0 -OR S7,T9,R0 -BEQ T8,R0,7F0E17B8 -SW T8,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T2,S6,00FF -OR S6,T2,R0 -SLTIU T0,S3,0001 -ADDIU S3,S3,FFFF -ANDI T7,S3,00FF -OR S3,T7,R0 -BEQ T0,R0,7F0E17DC -SW T0,0048 (SP) -ADDIU S2,S2,FFFF -ANDI T4,S2,00FF -OR S2,T4,R0 -LBU T3,005F (SP) -OR T9,S2,S3 -SLT T6,R0,T9 -ANDI T1,S1,00FA -SLL T2,T6,0x2 -OR T8,T1,T3 -OR S1,T8,T2 -ANDI T0,S1,00FF -ANDI T7,T0,0044 -BNE T7,AT,7F0E27FC -OR S1,T0,R0 -LHU T5,0298 (SP) -LW T1,028C (SP) -ADDIU T4,T5,FFFE -ADDIU T3,T1,0005 -SW T3,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T4,0298 (SP) -//7F0E1824: -LW T9,028C (SP) -OR A1,S2,R0 -OR A2,S3,R0 -ADDIU A0,T9,000C -JAL 7F0D36D8 ;V0=input from source A2 using register A1 -SW A0,028C (SP) ;cycles+=C -SLL T8,S6,0x8 -OR T2,T8,S7 -SLTI AT,T2,5B00 -BNE AT,R0,7F0E186C -SH V0,0058 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -SLL T5,S6,0x8 -OR T4,T5,S7 -ADDU T1,T7,T4 -BEQ R0,R0,7F0E1914 -SB V0,0000 (T1) -//7F0E186C: -SLL T3,S6,0x8 -OR T9,T3,S7 -SLTI AT,T9,5800 -BNE AT,R0,7F0E18BC -SLL T2,S6,0x8 -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T6,0058 (SP) -SLL T2,S6,0x8 -OR T5,T2,S7 -ADDU T7,T8,T5 -LUI T0,8009 -SB T6,0000 (T7) -LW T0,E32C (T0) -SLL T1,S6,0x8 -OR T3,T1,S7 -ADDIU T4,R0,0001 -ADDU T9,T0,T3 -BEQ R0,R0,7F0E1914 -SB T4,A800 (T9) -//7F0E18BC: -OR T8,T2,S7 -SLTI AT,T8,4000 -BNE AT,R0,7F0E1914 -LHU T5,0058 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SLL T7,S6,0x8 -OR T1,T7,S7 -ADDU T0,T6,T1 -SB T5,0000 (T0) -SLL T4,S6,0x8 -OR T9,T4,S7 -LUI T0,8009 -LW T0,E32C (T0) -ANDI T2,T9,1800 -OR T6,T7,S7 -ANDI T1,T6,00FF -SRA T8,T2,0x3 -OR T5,T8,T1 -ADDIU T3,R0,0001 -ADDU T4,T0,T5 -SB T3,0000 (T4) -LHU T2,0058 (SP) -LW T9,028C (SP) -SLTIU T8,S7,0001 -ADDIU S7,S7,FFFF -SRA T7,T2,0x8 -ANDI T1,S7,00FF -ADDU T6,T9,T7 -SW T6,028C (SP) -OR S7,T1,R0 -BEQ T8,R0,7F0E194C -SW T8,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T5,S6,00FF -OR S6,T5,R0 -//7F0E194C: -LUI T8,8009 -LW T8,E334 (T8) -ADDIU S2,S2,FFFF -ANDI T3,S2,00FF -ADDU T1,T3,T8 -LBU T0,0000 (T1) -ANDI T4,T3,00A8 -SLT T2,R0,T3 -OR S2,T3,R0 -SLL T9,T2,0x6 -XOR T5,T0,S3 -XORI T3,T5,0004 -OR T7,T4,T9 -ORI T6,T7,0002 -ANDI T2,T3,0004 -OR S1,T2,T6 -ANDI T4,S1,00FF -BEQ S2,R0,7F0E27FC -OR S1,T4,R0 -LHU T9,0298 (SP) -LW T8,028C (SP) -ADDIU T7,T9,FFFE -ADDIU T1,T8,0005 -SW T1,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T7,0298 (SP) -//7F0E19B4: -LW T0,028C (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SLL T3,S6,0x8 -OR T2,T3,S7 -ADDIU A0,T0,000C -SW A0,028C (SP) ;cycles+=C -ADDU T4,T2,T6 -LBU A3,0000 (T4) -OR A1,S2,R0 -OR A2,S3,R0 -JAL 7F0D37DC ;V0= A3 written to port A2 or 0 if not required -SB A3,0057 (SP) -LW T7,028C (SP) -SLTIU T0,S7,0001 -ADDIU S7,S7,FFFF -SW V0,0048 (SP) -ANDI T3,S7,00FF -ADDU T1,T7,V0 -SW T1,028C (SP) -OR S7,T3,R0 -BEQ T0,R0,7F0E1A1C -SW T0,0048 (SP) -ADDIU S6,S6,FFFF -ANDI T6,S6,00FF -OR S6,T6,R0 -ADDIU S2,S2,FFFF -ANDI T4,S2,00FF -ANDI T5,S1,0001 -ORI T9,T5,0012 -ANDI T7,T4,00A8 -SLTIU T1,T4,0001 -SLL T0,T1,0x6 -OR T8,T9,T7 -OR S1,T8,T0 -ANDI T3,S1,00FF -OR S2,T4,R0 -BEQ T4,R0,7F0E27FC -OR S1,T3,R0 -LHU T2,0298 (SP) -LW T4,028C (SP) -ADDIU T6,T2,FFFE -ADDIU T5,T4,0005 -SW T5,028C (SP) ;cycles+=5 -BEQ R0,R0,7F0E27FC -SH T6,0298 (SP) -//7F0E1A6C: -LW T9,028C (SP) -ADDIU T7,T9,0004 -BEQ R0,R0,7F0E27FC -SW T7,028C (SP) ;cycles+=4 -//7F0E1A7C: EE: XOR n 7 -LW T1,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T3,0298 (SP) -ADDIU T8,T1,0007 -SW T8,028C (SP) ;cycles+=7 -ADDU T2,T0,T3 -LBU T6,0000 (T2) -LUI T0,8009 -LW T0,E334 (T0) -XOR S0,S0,T6 -ANDI T4,S0,00FF -SLTIU T5,T4,0001 -SW T5,0048 (SP) -ADDU T3,T4,T0 -LBU T2,0000 (T3) -OR S0,T4,R0 -ANDI T9,T4,00A8 -LHU T4,0298 (SP) -SLL T1,T5,0x6 -OR T8,T9,T1 -OR S1,T2,T8 -ANDI T6,S1,00FF -ADDIU T5,T4,0001 -OR S1,T6,R0 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) -//7F0E1AE8: EF: RST 28 11 -LHU T1,0292 (SP) -LW T7,028C (SP) -LUI T8,8009 -ADDIU T0,T1,FFFE -ANDI T3,T0,FFFF -SLTI AT,T3,5B00 -ADDIU T9,T7,000B -SW T9,028C (SP) ;cycles+=B -BNE AT,R0,7F0E1B24 -SH T0,0292 (SP) -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T2,0298 (SP) -ADDU T6,T8,T3 -BEQ R0,R0,7F0E1BAC -SB T2,0000 (T6) -//7F0E1B24: -LHU T4,0292 (SP) -LHU T2,0292 (SP) -LUI T7,8009 -SLTI AT,T4,5800 -BNEL AT,R0,7F0E1B6C -SLTI AT,T2,4000 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T5,0298 (SP) -LUI T0,8009 -ADDU T9,T7,T4 -SB T5,0000 (T9) -LHU T8,0292 (SP) -LW T0,E32C (T0) -ADDIU T1,R0,0001 -ADDU T3,T0,T8 -BEQ R0,R0,7F0E1BAC -SB T1,A800 (T3) -//7F0E1B68: -SLTI AT,T2,4000 -BNE AT,R0,7F0E1BAC -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T6,0298 (SP) -ADDIU T5,R0,0001 -ADDU T4,T7,T2 -SB T6,0000 (T4) -LHU T9,0292 (SP) -LUI T7,8009 -LW T7,E32C (T7) -ANDI T0,T9,1800 -SRA T8,T0,0x3 -ANDI T1,T9,00FF -OR T3,T8,T1 -ADDU T2,T7,T3 -SB T5,0000 (T2) -//7F0E1BAC: -LHU T6,0292 (SP) -LHU T7,0292 (SP) -LHU T0,0298 (SP) -ADDIU T4,T6,0001 -SLTI AT,T4,5B00 -BNE AT,R0,7F0E1BE0 -ADDIU T3,T7,0001 -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -SRA T9,T0,0x8 -ADDU T1,T8,T6 -BEQ R0,R0,7F0E1C70 -SB T9,0001 (T1) -//7F0E1BE0: -SLTI AT,T3,5800 -BNE AT,R0,7F0E1C20 -LHU T3,0292 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -LHU T5,0298 (SP) -LUI T6,8009 -ADDU T0,T4,T7 -SRA T2,T5,0x8 -SB T2,0001 (T0) -LHU T9,0292 (SP) -LW T6,E32C (T6) -ADDIU T8,R0,0001 -ADDU T1,T6,T9 -BEQ R0,R0,7F0E1C70 -SB T8,A801 (T1) -//7F0E1C20: -ADDIU T5,T3,0001 -SLTI AT,T5,4000 -BNE AT,R0,7F0E1C70 -LHU T4,0298 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -SRA T7,T4,0x8 -ADDIU T6,R0,0001 -ADDU T0,T2,T3 -SB T7,0001 (T0) -LHU T9,0292 (SP) -LUI T3,8009 -LW T3,E32C (T3) -ADDIU T8,T9,0001 -ANDI T1,T8,1800 -SRA T5,T1,0x3 -ANDI T4,T8,00FF -OR T2,T5,T4 -ADDU T7,T3,T2 -SB T6,0000 (T7) -ADDIU T0,R0,0028 -BEQ R0,R0,7F0E27FC -SH T0,0298 (SP) -//7F0E1C7C: F0: RET P 11(5) -LW T9,028C (SP) -ANDI T8,S1,0080 -LUI T2,8009 -ADDIU T1,T9,0005 -BNE T8,R0,7F0E27FC -SW T1,028C (SP) ;cycles+=5 -LHU T3,0292 (SP) -LW T2,E328 (T2) ;T2=spectrum.ROMs -ADDIU T4,T1,0006 -SW T4,028C (SP) ;cycles+=6 B total -ADDU T0,T2,T3 -LBU T9,0001 (T0) -ADDU T6,T3,T2 -LBU T7,0000 (T6) -SLL T1,T9,0x8 -ADDIU T5,T3,0002 -OR T8,T7,T1 -SH T8,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T5,0292 (SP) -//7F0E1CCC: F1: POP AF 10 -LW T4,028C (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LHU T2,0292 (SP) -ADDIU T6,T4,000A -SW T6,028C (SP) ;cycles+=A -ADDU T9,T2,T0 -LBU S1,0000 (T9) -LBU S0,0001 (T9) -ADDIU T7,T2,0002 -BEQ R0,R0,7F0E27FC -SH T7,0292 (SP) -//7F0E1CFC: F2: JP P,nn 10 -LW T1,028C (SP) -ANDI T3,S1,0080 -LHU T5,0298 (SP) -ADDIU T8,T1,000A -BNE T3,R0,7F0E1D3C -SW T8,028C (SP) ;cycles+=A -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -ADDU T9,T4,T5 -LBU T2,0001 (T9) -ADDU T6,T5,T4 -LBU T0,0000 (T6) -SLL T7,T2,0x8 -OR T1,T0,T7 -BEQ R0,R0,7F0E27FC -SH T1,0298 (SP) -//7F0E1D3C: -LHU T8,0298 (SP) -ADDIU T3,T8,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) -//7F0E1D4C: F3: DI 4 -LW T6,028C (SP) -SB R0,029C (SP) -SB R0,029D (SP) -ADDIU T4,T6,0004 -SW T4,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -SB R0,0285 (SP) -//7F0E1D68: F4: CALL P,nn 17(10) -LW T5,028C (SP) -ANDI T2,S1,0080 -ADDIU T9,T5,000A -BNE T2,R0,7F0E1F40 -SW T9,028C (SP) ;cycles+=A -LHU T1,0292 (SP) -ADDIU T7,T9,0007 -SW T7,028C (SP) ;cycles+=7 11 total -ADDIU T8,T1,FFFE -ANDI T3,T8,FFFF -SLTI AT,T3,5B00 -BNE AT,R0,7F0E1DB8 -SH T8,0292 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T6,0298 (SP) -ADDU T9,T5,T3 -ADDIU T4,T6,0002 -BEQ R0,R0,7F0E1E44 -SB T4,0000 (T9) -//7F0E1DB8: -LHU T2,0292 (SP) -LHU T9,0292 (SP) -LHU T0,0298 (SP) -SLTI AT,T2,5800 -BNE AT,R0,7F0E1DFC -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -ADDIU T7,T0,0002 -LUI T5,8009 -ADDU T8,T1,T2 -SB T7,0000 (T8) -LHU T3,0292 (SP) -LW T5,E32C (T5) -ADDIU T6,R0,0001 -ADDU T4,T5,T3 -BEQ R0,R0,7F0E1E44 -SB T6,A800 (T4) -//7F0E1DFC: -SLTI AT,T9,4000 -BNE AT,R0,7F0E1E44 -LHU T0,0298 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -ADDIU T1,T0,0002 -ADDIU T8,R0,0001 -ADDU T7,T2,T9 -SB T1,0000 (T7) -LHU T5,0292 (SP) -LUI T2,8009 -LW T2,E32C (T2) -ANDI T3,T5,1800 -SRA T6,T3,0x3 -ANDI T4,T5,00FF -OR T0,T6,T4 -ADDU T9,T2,T0 -SB T8,0000 (T9) -//7F0E1E44: -LHU T1,0292 (SP) -LHU T0,0292 (SP) -LHU T3,0298 (SP) -ADDIU T7,T1,0001 -SLTI AT,T7,5B00 -BNE AT,R0,7F0E1E7C -ADDIU T8,T0,0001 -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -ADDIU T5,T3,0002 -SRA T6,T5,0x8 -ADDU T2,T4,T1 -BEQ R0,R0,7F0E1F14 -SB T6,0001 (T2) -//7F0E1E7C: -SLTI AT,T8,5800 -BNE AT,R0,7F0E1EC0 -LHU T9,0292 (SP) -LHU T9,0298 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -ADDIU T7,T9,0002 -SRA T3,T7,0x8 -ADDU T4,T5,T0 -SB T3,0001 (T4) -LUI T6,8009 -LW T6,E32C (T6) -LHU T2,0292 (SP) -ADDIU T1,R0,0001 -ADDU T8,T6,T2 -BEQ R0,R0,7F0E1F14 -SB T1,A801 (T8) -//7F0E1EC0: -ADDIU T7,T9,0001 -SLTI AT,T7,4000 -BNE AT,R0,7F0E1F14 -LHU T5,0298 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=spectrum.ROMs -ADDIU T0,T5,0002 -SRA T3,T0,0x8 -ADDU T6,T4,T9 -SB T3,0001 (T6) -LHU T1,0292 (SP) -LUI T9,8009 -LW T9,E32C (T9) -ADDIU T8,T1,0001 -ANDI T7,T8,1800 -SRA T5,T7,0x3 -ANDI T0,T8,00FF -OR T4,T5,T0 -ADDIU T2,R0,0001 -ADDU T3,T9,T4 -SB T2,0000 (T3) -//7F0E1F14: -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -LHU T6,0298 (SP) -ADDU T5,T1,T6 -LBU T0,0001 (T5) -ADDU T7,T6,T1 -LBU T8,0000 (T7) -SLL T9,T0,0x8 -OR T4,T8,T9 -BEQ R0,R0,7F0E27FC -SH T4,0298 (SP) -//7F0E1F40: -LHU T2,0298 (SP) -ADDIU T3,T2,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) -//7F0E1F50: F5: PUSH AF 11 -LHU T6,0292 (SP) -LW T7,028C (SP) -LUI T8,8009 -ADDIU T5,T6,FFFE -ANDI T0,T5,FFFF -SLTI AT,T0,5B00 -ADDIU T1,T7,000B -SW T1,028C (SP) ;cycles+=B -BNE AT,R0,7F0E1F88 -SH T5,0292 (SP) -LW T8,E328 (T8) ;T8=spectrum.ROMs -ADDU T9,T8,T0 -BEQ R0,R0,7F0E2008 -SB S1,0000 (T9) -//7F0E1F88: -LHU T4,0292 (SP) -LHU T8,0292 (SP) -LUI T2,8009 -SLTI AT,T4,5800 -BNEL AT,R0,7F0E1FCC -SLTI AT,T8,4000 -LW T2,E328 (T2) ;T2=spectrum.ROMs -LUI T1,8009 -ADDIU T7,R0,0001 -ADDU T3,T2,T4 -SB S1,0000 (T3) -LHU T6,0292 (SP) -LW T1,E32C (T1) -ADDU T5,T1,T6 -BEQ R0,R0,7F0E2008 -SB T7,A800 (T5) -//7F0E1FC8: -SLTI AT,T8,4000 -BNE AT,R0,7F0E2008 -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -LUI T5,8009 -ADDIU T2,R0,0001 -ADDU T9,T0,T8 -SB S1,0000 (T9) -LHU T4,0292 (SP) -LW T5,E32C (T5) -ANDI T3,T4,1800 -SRA T1,T3,0x3 -ANDI T6,T4,00FF -OR T7,T1,T6 -ADDU T0,T5,T7 -SB T2,0000 (T0) -//7F0E2008: -LHU T8,0292 (SP) -LHU T1,0292 (SP) -LUI T3,8009 -ADDIU T9,T8,0001 -SLTI AT,T9,5B00 -BNE AT,R0,7F0E2034 -ADDIU T6,T1,0001 -LW T3,E328 (T3) ;T3=spectrum.ROMs -ADDU T4,T3,T8 -BEQ R0,R0,7F0E27FC -SB S0,0001 (T4) -//7F0E2034: -SLTI AT,T6,5800 -BNE AT,R0,7F0E206C -LHU T8,0292 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LUI T0,8009 -ADDIU T2,R0,0001 -ADDU T7,T5,T1 -SB S0,0001 (T7) -LHU T9,0292 (SP) -LW T0,E32C (T0) -ADDU T3,T0,T9 -BEQ R0,R0,7F0E27FC -SB T2,A801 (T3) -//7F0E206C: -ADDIU T4,T8,0001 -SLTI AT,T4,4000 -BNE AT,R0,7F0E27FC -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -ADDIU T1,R0,0001 -ADDU T5,T6,T8 -SB S0,0001 (T5) -LHU T7,0292 (SP) -LUI T6,8009 -LW T6,E32C (T6) -ADDIU T0,T7,0001 -ANDI T9,T0,1800 -SRA T2,T9,0x3 -ANDI T3,T0,00FF -OR T4,T2,T3 -ADDU T8,T6,T4 -BEQ R0,R0,7F0E27FC -SB T1,0000 (T8) -//7F0E20B8: F6: OR n 7 -LW T5,028C (SP) -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -LHU T0,0298 (SP) ;T0=PC -ADDIU T7,T5,0007 -SW T7,028C (SP) ;cycles+=7 -ADDU T2,T9,T0 -LBU T3,0000 (T2) ;T3=ROM+PC: n -LUI T9,8009 -LW T9,E334 (T9) -OR S0,S0,T3 ;spec.A |= n -ANDI T6,S0,00FF -SLTIU T4,T6,0001 ;True if zero -SW T4,0048 (SP) ;SP+48= ZERO flag -ADDU T0,T6,T9 -LBU T2,0000 (T0) -OR S0,T6,R0 -ANDI T1,T6,00A8 -LHU T6,0298 (SP) -SLL T5,T4,0x6 ;T5= ZERO flag -OR T7,T1,T5 -OR S1,T2,T7 -ANDI T3,S1,00FF -ADDIU T4,T6,0001 -OR S1,T3,R0 -BEQ R0,R0,7F0E27FC -SH T4,0298 (SP) ;PC+=1 -//7F0E2124: F7: RST 30 11 -LHU T5,0292 (SP) -LW T8,028C (SP) -LUI T7,8009 -ADDIU T9,T5,FFFE -ANDI T0,T9,FFFF -SLTI AT,T0,5B00 -ADDIU T1,T8,000B -SW T1,028C (SP) ;cycles+=B -BNE AT,R0,7F0E2160 -SH T9,0292 (SP) -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T2,0298 (SP) -ADDU T3,T7,T0 -BEQ R0,R0,7F0E21E8 -SB T2,0000 (T3) -//7F0E2160: -LHU T6,0292 (SP) -LHU T2,0292 (SP) -LUI T8,8009 -SLTI AT,T6,5800 -BNEL AT,R0,7F0E21A8 -SLTI AT,T2,4000 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T4,0298 (SP) -LUI T9,8009 -ADDU T1,T8,T6 -SB T4,0000 (T1) -LHU T7,0292 (SP) -LW T9,E32C (T9) -ADDIU T5,R0,0001 -ADDU T0,T9,T7 -BEQ R0,R0,7F0E21E8 -SB T5,A800 (T0) -//7F0E21A8: -SLTI AT,T2,4000 -BNE AT,R0,7F0E21E8 -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T3,0298 (SP) -ADDIU T4,R0,0001 -ADDU T6,T8,T2 -SB T3,0000 (T6) -LHU T1,0292 (SP) -LUI T8,8009 -LW T8,E32C (T8) -ANDI T9,T1,1800 -SRA T7,T9,0x3 -ANDI T5,T1,00FF -OR T0,T7,T5 -ADDU T2,T8,T0 -SB T4,0000 (T2) -LHU T3,0292 (SP) -LHU T8,0292 (SP) -LHU T9,0298 (SP) -ADDIU T6,T3,0001 -SLTI AT,T6,5B00 -BNE AT,R0,7F0E221C -ADDIU T0,T8,0001 -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -SRA T1,T9,0x8 -ADDU T5,T7,T3 -BEQ R0,R0,7F0E22AC -SB T1,0001 (T5) -//7F0E221C: -SLTI AT,T0,5800 -BNE AT,R0,7F0E225C -LHU T0,0292 (SP) -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T4,0298 (SP) -LUI T3,8009 -ADDU T9,T6,T8 -SRA T2,T4,0x8 -SB T2,0001 (T9) -LHU T1,0292 (SP) -LW T3,E32C (T3) -ADDIU T7,R0,0001 -ADDU T5,T3,T1 -BEQ R0,R0,7F0E22AC -SB T7,A801 (T5) -//7F0E225C: -ADDIU T4,T0,0001 -SLTI AT,T4,4000 -BNE AT,R0,7F0E22AC -LHU T6,0298 (SP) -LUI T2,8009 -LW T2,E328 (T2) ;T2=spectrum.ROMs -SRA T8,T6,0x8 -ADDIU T3,R0,0001 -ADDU T9,T2,T0 -SB T8,0001 (T9) -LHU T1,0292 (SP) -LUI T0,8009 -LW T0,E32C (T0) -ADDIU T7,T1,0001 -ANDI T5,T7,1800 -SRA T4,T5,0x3 -ANDI T6,T7,00FF -OR T2,T4,T6 -ADDU T8,T0,T2 -SB T3,0000 (T8) -//7F0E22AC: -ADDIU T9,R0,0030 -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0E22B8: F8: RET M 11(5) -LW T1,028C (SP) -ANDI T7,S1,0080 -LUI T2,8009 -ADDIU T5,T1,0005 -BEQ T7,R0,7F0E27FC -SW T5,028C (SP) ;cycles+=5 -LHU T0,0292 (SP) -LW T2,E328 (T2) ;T2=spectrum.ROMs -ADDIU T6,T5,0006 -SW T6,028C (SP) ;cycles+=6 B total -ADDU T9,T2,T0 -LBU T1,0001 (T9) -ADDU T3,T0,T2 -LBU T8,0000 (T3) -SLL T5,T1,0x8 -ADDIU T4,T0,0002 -OR T7,T8,T5 -SH T7,0298 (SP) -BEQ R0,R0,7F0E27FC -SH T4,0292 (SP) -//7F0E2308: F9: LD SP,HL 6 -LW T6,028C (SP) -LBU T2,0287 (SP) -LBU T8,0287 (SP) -ADDIU T3,T6,0006 -BNE T2,R0,7F0E2330 -SW T3,028C (SP) ;cycles+=6 -SLL T9,S6,0x8 -OR T1,T9,S7 -BEQ R0,R0,7F0E27FC -SH T1,0292 (SP) -//7F0E2330: -ADDIU AT,R0,0001 -BNE T8,AT,7F0E2348 -LHU T7,0294 (SP) -LHU T5,0296 (SP) -BEQ R0,R0,7F0E234C -SW T5,0048 (SP) -//7F0E2348: -SW T7,0048 (SP) -LW T0,0048 (SP) -BEQ R0,R0,7F0E27FC -SH T0,0292 (SP) -//7F0E2358: FA: JP M,nn 10 -LW T4,028C (SP) -ANDI T3,S1,0080 -LHU T2,0298 (SP) -ADDIU T6,T4,000A -BEQ T3,R0,7F0E2398 -SW T6,028C (SP) ;cycles+=A -LUI T9,8009 -LW T9,E328 (T9) ;T9=spectrum.ROMs -ADDU T5,T9,T2 -LBU T7,0001 (T5) -ADDU T1,T2,T9 -LBU T8,0000 (T1) -SLL T0,T7,0x8 -OR T4,T8,T0 -BEQ R0,R0,7F0E27FC -SH T4,0298 (SP) -//7F0E2398: -LHU T6,0298 (SP) -ADDIU T3,T6,0002 -BEQ R0,R0,7F0E27FC -SH T3,0298 (SP) -//7F0E23A8: FB: EI 4 -LW T1,028C (SP) -ADDIU T2,R0,0001 -ADDIU T5,R0,0001 -ADDIU T9,T1,0004 -SW T9,028C (SP) ;cycles+=4 -SB T5,029D (SP) -SB T2,029C (SP) -BEQ R0,R0,7F0E27FC -SB R0,0285 (SP) -//7F0E23CC: FC: CALL M,nn 17(10) -LW T7,028C (SP) -ANDI T0,S1,0080 -ADDIU T8,T7,000A -BEQ T0,R0,7F0E25A4 -SW T8,028C (SP) ;cycles+=A -LHU T3,0292 (SP) -ADDIU T6,T8,0007 -SW T6,028C (SP) ;cycles+=7 11 total -ADDIU T1,T3,FFFE -ANDI T9,T1,FFFF -SLTI AT,T9,5B00 -BNE AT,R0,7F0E241C -SH T1,0292 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T2,0298 (SP) -ADDU T8,T7,T9 -ADDIU T5,T2,0002 -BEQ R0,R0,7F0E24A8 -SB T5,0000 (T8) -//7F0E241C: -LHU T0,0292 (SP) -LHU T8,0292 (SP) -LHU T4,0298 (SP) -SLTI AT,T0,5800 -BNE AT,R0,7F0E2460 -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -ADDIU T6,T4,0002 -LUI T7,8009 -ADDU T1,T3,T0 -SB T6,0000 (T1) -LHU T9,0292 (SP) -LW T7,E32C (T7) -ADDIU T2,R0,0001 -ADDU T5,T7,T9 -BEQ R0,R0,7F0E24A8 -SB T2,A800 (T5) -//7F0E2460: -SLTI AT,T8,4000 -BNE AT,R0,7F0E24A8 -LHU T4,0298 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU T3,T4,0002 -ADDIU T1,R0,0001 -ADDU T6,T0,T8 -SB T3,0000 (T6) -LHU T7,0292 (SP) -LUI T0,8009 -LW T0,E32C (T0) -ANDI T9,T7,1800 -SRA T2,T9,0x3 -ANDI T5,T7,00FF -OR T4,T2,T5 -ADDU T8,T0,T4 -SB T1,0000 (T8) -//7F0E24A8: -LHU T3,0292 (SP) -LHU T4,0292 (SP) -LHU T9,0298 (SP) -ADDIU T6,T3,0001 -SLTI AT,T6,5B00 -BNE AT,R0,7F0E24E0 -ADDIU T1,T4,0001 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -ADDIU T7,T9,0002 -SRA T2,T7,0x8 -ADDU T0,T5,T3 -BEQ R0,R0,7F0E2578 -SB T2,0001 (T0) -//7F0E24E0: -SLTI AT,T1,5800 -BNE AT,R0,7F0E2524 -LHU T8,0292 (SP) -LHU T8,0298 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -ADDIU T6,T8,0002 -SRA T9,T6,0x8 -ADDU T5,T7,T4 -SB T9,0001 (T5) -LUI T2,8009 -LW T2,E32C (T2) -LHU T0,0292 (SP) -ADDIU T3,R0,0001 -ADDU T1,T2,T0 -BEQ R0,R0,7F0E2578 -SB T3,A801 (T1) -//7F0E2524: -ADDIU T6,T8,0001 -SLTI AT,T6,4000 -BNE AT,R0,7F0E2578 -LHU T7,0298 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -ADDIU T4,T7,0002 -SRA T9,T4,0x8 -ADDU T2,T5,T8 -SB T9,0001 (T2) -LHU T3,0292 (SP) -LUI T8,8009 -LW T8,E32C (T8) -ADDIU T1,T3,0001 -ANDI T6,T1,1800 -SRA T7,T6,0x3 -ANDI T4,T1,00FF -OR T5,T7,T4 -ADDIU T0,R0,0001 -ADDU T9,T8,T5 -SB T0,0000 (T9) -//7F0E2578: -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T2,0298 (SP) -ADDU T7,T3,T2 -LBU T4,0001 (T7) -ADDU T6,T2,T3 -LBU T1,0000 (T6) -SLL T8,T4,0x8 -OR T5,T1,T8 -BEQ R0,R0,7F0E27FC -SH T5,0298 (SP) -//7F0E25A4: -LHU T0,0298 (SP) -ADDIU T9,T0,0002 -BEQ R0,R0,7F0E27FC -SH T9,0298 (SP) -//7F0E25B4: FD: --- FD --- -LW T6,028C (SP) -ADDIU T2,R0,0002 -SB T2,0286 (SP) -ADDIU T3,T6,0004 -SW T3,028C (SP) ;cycles+=4 -BEQ R0,R0,7F0E27FC -SB R0,0285 (SP) -//7F0E25D0: FE: CP n 7 -LW T7,028C (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T1,0298 (SP) -ADDIU T4,T7,0007 -SW T4,028C (SP) ;cycles+=7 -ADDU T5,T1,T8 -LBU T0,0000 (T5) -SUBU T9,S0,T0 -ANDI T6,T9,01FF -ANDI T3,T6,FFFF -SLTIU T2,T3,0001 -ANDI T3,S0,000F -ANDI T9,T0,000F -SLT T7,T3,T9 -ANDI T4,T6,00A8 -SRA T8,T6,0x8 -OR T5,T4,T8 -SLL T1,T7,0x4 -OR T9,T6,R0 -XOR T8,S0,T0 -ANDI T3,T8,0080 -XOR T7,T9,S0 -OR T4,T5,T1 -AND T5,T3,T7 -SRA T1,T5,0x5 -SB T0,0053 (SP) -LHU T3,0298 (SP) -OR T0,T4,T1 -SH T6,0054 (SP) -SLL T6,T2,0x6 -ORI T8,T0,0002 -OR S1,T8,T6 -ANDI T9,S1,00FF -ADDIU T7,T3,0001 -OR S1,T9,R0 -SW T2,0048 (SP) -BEQ R0,R0,7F0E27FC -SH T7,0298 (SP) -//7F0E266C: FF: RST 38 11 -LHU T1,0292 (SP) -LW T5,028C (SP) -LUI T6,8009 -ADDIU T0,T1,FFFE -ANDI T2,T0,FFFF -SLTI AT,T2,5B00 -ADDIU T4,T5,000B -SW T4,028C (SP) ;cycles+=B -BNE AT,R0,7F0E26A8 -SH T0,0292 (SP) -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T8,0298 (SP) -ADDU T9,T6,T2 -BEQ R0,R0,7F0E2730 -SB T8,0000 (T9) -//7F0E26A8: -LHU T3,0292 (SP) -LHU T8,0292 (SP) -LUI T5,8009 -SLTI AT,T3,5800 -BNEL AT,R0,7F0E26F0 -SLTI AT,T8,4000 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T7,0298 (SP) -LUI T0,8009 -ADDU T4,T5,T3 -SB T7,0000 (T4) -LHU T6,0292 (SP) -LW T0,E32C (T0) -ADDIU T1,R0,0001 -ADDU T2,T0,T6 -BEQ R0,R0,7F0E2730 -SB T1,A800 (T2) -//7F0E26EC: -SLTI AT,T8,4000 -BNE AT,R0,7F0E2730 -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -LHU T9,0298 (SP) -ADDIU T7,R0,0001 -ADDU T3,T5,T8 -SB T9,0000 (T3) -LHU T4,0292 (SP) -LUI T5,8009 -LW T5,E32C (T5) -ANDI T0,T4,1800 -SRA T6,T0,0x3 -ANDI T1,T4,00FF -OR T2,T6,T1 -ADDU T8,T5,T2 -SB T7,0000 (T8) -//7F0E2730: -LHU T9,0292 (SP) -LHU T5,0292 (SP) -LHU T0,0298 (SP) -ADDIU T3,T9,0001 -SLTI AT,T3,5B00 -BNE AT,R0,7F0E2764 -ADDIU T2,T5,0001 -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SRA T4,T0,0x8 -ADDU T1,T6,T9 -BEQ R0,R0,7F0E27F4 -SB T4,0001 (T1) -//7F0E2764: -SLTI AT,T2,5800 -BNE AT,R0,7F0E27A4 -LHU T2,0292 (SP) -LUI T3,8009 -LW T3,E328 (T3) ;T3=spectrum.ROMs -LHU T7,0298 (SP) -LUI T9,8009 -ADDU T0,T3,T5 -SRA T8,T7,0x8 -SB T8,0001 (T0) -LHU T4,0292 (SP) -LW T9,E32C (T9) -ADDIU T6,R0,0001 -ADDU T1,T9,T4 -BEQ R0,R0,7F0E27F4 -SB T6,A801 (T1) -//7F0E27A4: -ADDIU T7,T2,0001 -SLTI AT,T7,4000 -BNE AT,R0,7F0E27F4 -LHU T3,0298 (SP) -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -SRA T5,T3,0x8 -ADDIU T9,R0,0001 -ADDU T0,T8,T2 -SB T5,0001 (T0) -LHU T4,0292 (SP) -LUI T2,8009 -LW T2,E32C (T2) -ADDIU T6,T4,0001 -ANDI T1,T6,1800 -SRA T7,T1,0x3 -ANDI T3,T6,00FF -OR T8,T7,T3 -ADDU T5,T2,T8 -SB T9,0000 (T5) -//7F0E27F4: loop until cycle count met -ADDIU T0,R0,0038 -SH T0,0298 (SP) -LW T4,028C (SP) ;T4=SP+28C: cycles -LW T1,0280 (SP) ;T1=SP+280: cycles.max -SLTU AT,T4,T1 -BNE AT,R0,7F0D39D8 -NOP -//7F0E2810: -LBU T6,0285 (SP) -BEQ T6,R0,7F0D39D8 -NOP -//7F0E281C: -LW T7,028C (SP) ;T7= cycles -LW T3,0280 (SP) ;T3= cycles.max -LBU T2,0285 (SP) -SLTU AT,T7,T3 -BNE AT,R0,7F0E2C08 -NOP -//7F0E2834: -BEQ T2,R0,7F0E2C08 -NOP -//7F0E283C: -LBU T9,029D (SP) -SUBU T8,T7,T3 -SW T8,028C (SP) ;save cycle overrun (cycles-cycles.max) -BEQ T9,R0,7F0E2C08 -LHU T5,0298 (SP) -LUI T0,8009 -LW T0,E328 (T0) ;T0=spectrum.ROMs -ADDIU AT,R0,0076 -ADDIU T6,T5,0001 -ADDU T4,T5,T0 -LBU T1,0000 (T4) -BNEL T1,AT,7F0E2878 -LW T2,028C (SP) -SH T6,0298 (SP) -LW T2,028C (SP) -LBU T3,029B (SP) -SB R0,029C (SP) -ADDIU T7,T2,0005 -SB R0,029D (SP) -SW T7,028C (SP) ;cycles+=5 -BEQ T3,R0,7F0E28B8 -SW T3,0048 (SP) -ADDIU AT,R0,0001 -BEQ T3,AT,7F0E28B8 -ADDIU AT,R0,0002 -BEQ T3,AT,7F0E28B8 -ADDIU AT,R0,0003 -BEQ T3,AT,7F0E2A4C -LW T9,028C (SP) -BEQ R0,R0,7F0E2C08 -NOP -LHU T0,0292 (SP) -LW T8,028C (SP) -LUI T6,8009 -ADDIU T4,T0,FFFE -ANDI T1,T4,FFFF -SLTI AT,T1,5B00 -ADDIU T9,T8,0008 -SW T9,028C (SP) ;cycles+=8 -BNE AT,R0,7F0E28F4 -SH T4,0292 (SP) -LW T6,E328 (T6) ;T6=spectrum.ROMs -LHU T5,0298 (SP) -ADDU T2,T6,T1 -BEQ R0,R0,7F0E297C -SB T5,0000 (T2) -LHU T7,0292 (SP) -LHU T5,0292 (SP) -LUI T8,8009 -SLTI AT,T7,5800 -BNEL AT,R0,7F0E293C -SLTI AT,T5,4000 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T3,0298 (SP) -LUI T4,8009 -ADDU T9,T8,T7 -SB T3,0000 (T9) -LHU T6,0292 (SP) -LW T4,E32C (T4) -ADDIU T0,R0,0001 -ADDU T1,T4,T6 -BEQ R0,R0,7F0E297C -SB T0,A800 (T1) -SLTI AT,T5,4000 -BNE AT,R0,7F0E297C -LUI T8,8009 -LW T8,E328 (T8) ;T8=spectrum.ROMs -LHU T2,0298 (SP) -ADDIU T3,R0,0001 -ADDU T7,T8,T5 -SB T2,0000 (T7) -LHU T9,0292 (SP) -LUI T8,8009 -LW T8,E32C (T8) -ANDI T4,T9,1800 -SRA T6,T4,0x3 -ANDI T0,T9,00FF -OR T1,T6,T0 -ADDU T5,T8,T1 -SB T3,0000 (T5) -LHU T2,0292 (SP) -LHU T8,0292 (SP) -LHU T4,0298 (SP) -ADDIU T7,T2,0001 -SLTI AT,T7,5B00 -BNE AT,R0,7F0E29B0 -ADDIU T1,T8,0001 -LUI T6,8009 -LW T6,E328 (T6) ;T6=spectrum.ROMs -SRA T9,T4,0x8 -ADDU T0,T6,T2 -BEQ R0,R0,7F0E2A40 -SB T9,0001 (T0) -SLTI AT,T1,5800 -BNE AT,R0,7F0E29F0 -LHU T1,0292 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T3,0298 (SP) -LUI T2,8009 -ADDU T4,T7,T8 -SRA T5,T3,0x8 -SB T5,0001 (T4) -LHU T9,0292 (SP) -LW T2,E32C (T2) -ADDIU T6,R0,0001 -ADDU T0,T2,T9 -BEQ R0,R0,7F0E2A40 -SB T6,A801 (T0) -ADDIU T3,T1,0001 -SLTI AT,T3,4000 -BNE AT,R0,7F0E2A40 -LHU T7,0298 (SP) -LUI T5,8009 -LW T5,E328 (T5) ;T5=spectrum.ROMs -SRA T8,T7,0x8 -ADDIU T2,R0,0001 -ADDU T4,T5,T1 -SB T8,0001 (T4) -LHU T9,0292 (SP) -LUI T1,8009 -LW T1,E32C (T1) -ADDIU T6,T9,0001 -ANDI T0,T6,1800 -SRA T3,T0,0x3 -ANDI T7,T6,00FF -OR T5,T3,T7 -ADDU T8,T1,T5 -SB T2,0000 (T8) -ADDIU T4,R0,0038 -BEQ R0,R0,7F0E2C08 -SH T4,0298 (SP) -LBU T6,029E (SP) -LUI T1,8009 -LW T1,E328 (T1) ;T1=spectrum.ROMs -SLL T3,T6,0x8 -ADDIU T0,T9,000E -ORI T7,T3,00FF -LHU T6,0292 (SP) -SW T0,028C (SP) ;cycles+=E -ADDU T8,T1,T7 -LBU T4,0001 (T8) -ADDU T5,T7,T1 -LBU T2,0000 (T5) -ADDIU T3,T6,FFFE -ANDI T5,T3,FFFF -SLL T9,T4,0x8 -SLTI AT,T5,5B00 -OR T0,T2,T9 -SW T0,004C (SP) -BNE AT,R0,7F0E2AB4 -SH T3,0292 (SP) -LUI T7,8009 -LW T7,E328 (T7) ;T7=spectrum.ROMs -LHU T1,0298 (SP) ;T1=spec.PC -ADDU T8,T7,T5 -BEQ R0,R0,7F0E2B3C -SB T1,0000 (T8) -LHU T4,0292 (SP) -LHU T1,0292 (SP) -LUI T9,8009 -SLTI AT,T4,5800 -BNEL AT,R0,7F0E2AFC -SLTI AT,T1,4000 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T2,0298 (SP) ;T2=spec.PC -LUI T3,8009 -ADDU T0,T9,T4 -SB T2,0000 (T0) -LHU T7,0292 (SP) -LW T3,E32C (T3) -ADDIU T6,R0,0001 -ADDU T5,T3,T7 -BEQ R0,R0,7F0E2B3C -SB T6,A800 (T5) -SLTI AT,T1,4000 -BNE AT,R0,7F0E2B3C -LUI T9,8009 -LW T9,E328 (T9) ;T9=p->spectrum.ROMs -LHU T8,0298 (SP) ;T8=spec.PC -ADDIU T2,R0,0001 -ADDU T4,T9,T1 -SB T8,0000 (T4) -LHU T0,0292 (SP) -LUI T9,8009 -LW T9,E32C (T9) -ANDI T3,T0,1800 -SRA T7,T3,0x3 -ANDI T6,T0,00FF -OR T5,T7,T6 -ADDU T1,T9,T5 -SB T2,0000 (T1) -LHU T8,0292 (SP) -LHU T9,0292 (SP) -LHU T3,0298 (SP) ;T3=spec.PC -ADDIU T4,T8,0001 -SLTI AT,T4,5B00 -BNE AT,R0,7F0E2B70 -ADDIU T5,T9,0001 -LUI T7,8009 -LW T7,E328 (T7) ;T7=p->spectrum.ROMs -SRA T0,T3,0x8 -ADDU T6,T7,T8 -BEQ R0,R0,7F0E2C00 -SB T0,0001 (T6) -SLTI AT,T5,5800 -BNE AT,R0,7F0E2BB0 -LHU T5,0292 (SP) -LUI T4,8009 -LW T4,E328 (T4) ;T4=p->spectrum.ROMs -LHU T2,0298 (SP) ;T2=spec.PC -LUI T8,8009 -ADDU T3,T4,T9 -SRA T1,T2,0x8 -SB T1,0001 (T3) -LHU T0,0292 (SP) -LW T8,E32C (T8) -ADDIU T7,R0,0001 -ADDU T6,T8,T0 -BEQ R0,R0,7F0E2C00 -SB T7,A801 (T6) -ADDIU T2,T5,0001 -SLTI AT,T2,4000 -BNE AT,R0,7F0E2C00 -LHU T4,0298 (SP) ;T4=spec.PC -LUI T1,8009 -LW T1,E328 (T1) ;T1=p->spectrum.ROMs -SRA T9,T4,0x8 -ADDIU T8,R0,0001 -ADDU T3,T1,T5 -SB T9,0001 (T3) -LHU T0,0292 (SP) -LUI T5,8009 -LW T5,E32C (T5) -ADDIU T7,T0,0001 -ANDI T6,T7,1800 -SRA T2,T6,0x3 -ANDI T4,T7,00FF -OR T1,T2,T4 -ADDU T9,T5,T1 -SB T8,0000 (T9) -LW T3,004C (SP) -SH T3,0298 (SP) ;spec.PC = SP+4C -LUI AT,8009 -SB S0,E338 (AT) -LUI AT,8009 -SB S1,E339 (AT) -LUI AT,8009 -SB S2,E33A (AT) -LUI AT,8009 -SB S3,E33B (AT) -LUI AT,8009 -SB S4,E33C (AT) -LUI AT,8009 -SB S5,E33D (AT) -LUI AT,8009 -SB S6,E33E (AT) -LBU T0,02A6 (SP) -LUI AT,8009 -SB S7,E33F (AT) -LBU T6,02A5 (SP) -LUI AT,8009 -SB T0,E340 (AT) -LBU T7,02A4 (SP) -LUI AT,8009 -SB T6,E341 (AT) -LBU T2,02A3 (SP) -LUI AT,8009 -SB T7,E342 (AT) -LBU T4,02A2 (SP) -LUI AT,8009 -SB T2,E343 (AT) -LBU T5,02A1 (SP) -LUI AT,8009 -SB T4,E344 (AT) -LBU T1,02A0 (SP) -LUI AT,8009 -SB T5,E345 (AT) -LBU T8,029F (SP) -LUI AT,8009 -SB T1,E346 (AT) -LBU T9,029D (SP) -LUI AT,8009 -SB T8,E347 (AT) -LBU T3,029C (SP) -LUI AT,8009 -SB T9,E34A (AT) -LBU T0,029E (SP) -LUI AT,8009 -SB T3,E34B (AT) -LBU T6,02A7 (SP) -LUI AT,8009 -SB T0,E348 (AT) -LBU T2,029B (SP) -LUI AT,8009 -SB T6,E349 (AT) -LHU T4,0296 (SP) -LUI AT,8009 -SB T2,E34C (AT) -LHU T5,0294 (SP) -LUI AT,8009 -SH T4,E34E (AT) -LHU T1,0292 (SP) -LUI AT,8009 -LW T7,0288 (SP) -SH T5,E350 (AT) -LW RA,0034 (SP) -LUI AT,8009 -LHU T8,0298 (SP) ;T8=spec.PC -SH T1,E352 (AT) -LUI AT,8009 -LW S7,0030 (SP) -LW S6,002C (SP) -LW S5,0028 (SP) -LW S4,0024 (SP) -LW S3,0020 (SP) -LW S2,001C (SP) -LW S1,0018 (SP) -LW S0,0014 (SP) -SB T7,02A7 (SP) -ADDIU SP,SP,02B0 -JR RA -SH T8,E354 (AT) diff --git a/notes/GE Documentation/Gameplay and Misc/System/Boot/70006060 - main program loop.txt b/notes/GE Documentation/Gameplay and Misc/System/Boot/70006060 - main program loop.txt deleted file mode 100644 index 86c5251..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Boot/70006060 - main program loop.txt +++ /dev/null @@ -1,625 +0,0 @@ -70006060 6C60 Main Program Loop -ADDIU SP,SP,FE20 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -//7000608C: test memstring for "-level_##" -JAL 7F0D1A4C ;reset memory bank 5 -SW R0,01DC (SP) -LUI A1,8003 -ADDIU A1,A1,9104 ;A1=80029104: "-level_" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -BEQ V0,R0,700060DC -ADDIU A0,R0,0001 ;A0=1 -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,910C ;A1=8002910C: "-level_" -LBU T7,0000 (V0) ;T7=1st level# byte -LBU T6,0001 (V0) ;T6=2nd level# byte -LUI AT,8002 -SLL T8,T7,0x2 -ADDU T8,T8,T7 -SLL T8,T8,0x1 ;T8=upper byte * 0xA: to tens place -ADDU T9,T6,T8 ;T9=upper byte + lower -ADDIU T0,T9,FDF0 ;T0=# - 0x210: compensate for 0x30 on each byte of ASCII numerals 30*B, or 30*A + 30 -SW T0,41A8 (AT) ;T0->800241A8: stage# -//700060DC: set stage defaults if not menus -LUI T1,8002 -LW T1,41A8 (T1) ;T1=800241A8: stage# -ADDIU AT,R0,005A -BEQ T1,AT,70006160 ;branch if stage 5A: title/menus -NOP -JAL 7F01DF90 -NOP -JAL 7F01D590 ;A0->folder# -OR A0,R0,R0 ;A0=0 -JAL 7F01D59C ;A0->difficulty -OR A0,R0,R0 ;A0=0 -LUI A0,8002 -JAL 7F01D5EC ;A0->stage#, set solo + p->briefing -LW A0,41A8 (A0) ;A0=800241A8: stage# -//70006114: test memstring for "-hard#" -LUI A1,8003 -ADDIU A1,A1,9114 ;A1=80029114: "-hard" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -BEQ V0,R0,70006160 ;branch if string not present -ADDIU A0,R0,0001 ;A0=1 -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,911C ;A1=8002911C: "-hard" -LBU A0,0000 (V0) ;A0=ASCII difficulty level -JAL 7F01D59C ;A0->difficulty [8002A8FC]; forces invalid difficulties to 0 (agent) -ADDIU A0,A0,FFD0 ;A0-=0x30: account for 0x30 ASCII extension -//70006144: this last bit seems needless, and if anything would cause issues... -LUI A1,8003 -ADDIU A1,A1,9124 ;A1=80029124: "" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -LBU A0,0000 (V0) ;A0= ASCII difficulty level -JAL 7F0BFC1C ;A0->difficulty [8002A8FC] -ADDIU A0,A0,FFD0 ;A0-=0x30: account for 0x30 ASCII extension -//70006160: -JAL 7000D8E0 -NOP -JAL 7000A498 ;increment random number -OR A0,V0,R0 ;A0=V0 -LUI S6,8003 -LUI S5,8008 -ADDIU S5,S5,A0B0 ;S5=8007A0B0 -ADDIU S6,S6,9134 ;S6=80029134 -ADDIU S7,SP,0058 ;S7=SP+58: p->instance -ADDIU S4,SP,005C ;S4=SP+5C: buffer for string -LW S3,01A8 (SP) ;S3=SP+1A8: p->DL -//7000618C: -LUI T3,8002 -SW R0,01D4 (SP) ;0->800201D4: -ADDIU T3,T3,4304 ;T3=80024304 -LW AT,0000 (T3) ;AT=80024304: -LW T7,0004 (T3) ;T7=80024308: -ADDIU T2,SP,01B4 ;T2=SP+1B4: -SW AT,0000 (T2) -SW T7,0004 (T2) -LW T7,000C (T3) ;T7=80024310: -LW AT,0008 (T3) ;AT=8002430C: -OR S8,R0,R0 ;S8=0 -SW T7,000C (T2) -SW AT,0008 (T2) -LW AT,0010 (T3) ;AT=80024314: -LW T7,0014 (T3) ;T7=80024318: -OR S1,R0,R0 ;S1=0 -SW AT,0010 (T2) -SW T7,0014 (T2) -LW T7,001C (T3) ;T7=80024320: -LW AT,0018 (T3) ;AT=8002431C: -SW T7,001C (T2) -SW AT,0018 (T2) -//700061E4: test if replaying or recording demos this stage load -JAL 7F0BFC10 ;V0=difficulty -SW R0,01AC (SP) -LUI A0,8002 -LW A0,41A8 (A0) ;A0=800241A8: stage# -JAL 7F0C0640 ;detect if recording or replaying demos this stage load -OR A1,V0,R0 ;A1=V0: difficulty -//700061FC: -LUI T6,8002 -LW T6,41A4 (T6) ;T6=800241A4: -LUI T8,8002 -BEQ T6,R0,700062EC ;branch if not set -NOP -LW T8,41A8 (T8) ;T8=800241A8: stage# -ADDIU AT,R0,005A -ADDIU S0,R0,FFFF -BEQ T8,AT,70006294 ;branch if stage 5A: title/menus -NOP -//70006224: detect if multiplayer -JAL 7F010290 ;V0=#players -NOP -SLTI AT,V0,0002 ;TRUE if solo -BNE AT,R0,70006294 ;branch if solo -//70006234: multiplayer stage prep -LUI A1,8002 -ADDIU A1,A1,41BC ;A1=800241BC -LW T9,0000 (A1) ;T9=800241BC: memstring table -OR S0,R0,R0 ;S0=0 -LUI A0,8002 -BEQ T9,R0,7000627C ;branch if NULL (end of table) -LUI T0,8002 -LW A0,41A8 (A0) ;A0=800241A8: stage# -ADDIU V0,T0,41BC ;V0=800241BC -LW V1,0000 (V0) ;V1=800241BC: stage ID for memstring -ADDIU A0,A0,0190 ;A0+=0x190: MP stage# offset same as stage+400... -//70006260: loop until a match for MP stage -BEQL A0,V1,70006280 ;branch if stage IDs match -SLL T1,S0,0x3 -LW V1,0008 (V0) ;V1=next memstring stage ID# entry -ADDIU S0,S0,0001 ;S0++ count++ -ADDIU V0,V0,0008 ;V0+=8 next table entry -BNE V1,R0,70006260 ;loop for each entry -NOP -//7000627C: check if invalid/NULL entry -SLL T1,S0,0x3 ;T1=offset to entry -ADDU T5,A1,T1 ;T5=800241BC+offset -LW T4,0000 (T5) ;T4=800241BC+offset: memstring stage ID -BNE T4,R0,70006294 ;branch if not zero -NOP -ADDIU S0,R0,FFFF ;S0=-1 default to skip -//70006294: solo memstring lookup, which multi needlessly reuses -LUI A1,8002 -BGEZ S0,700062DC ;skip if invalid entry -ADDIU A1,A1,41BC ;A1=800241BC -LW T2,0000 (A1) ;T2=800241BC: memstring stage ID -OR S0,R0,R0 ;S0=0 count=0 -LUI A0,8002 -BEQ T2,R0,700062DC ;branch if NULL -LUI T3,8002 -ADDIU V0,T3,41BC ;V0=800241BC -LW V1,0000 (V0) ;V1=800241BC: memstring stage ID -LW A0,41A8 (A0) ;A0=800241A8: stage# -//700062C0: loop until a hit found -BEQL A0,V1,700062E0 ;branch if matching entry -SLL T7,S0,0x3 -LW V1,0008 (V0) ;V1=next memstring stage ID -ADDIU S0,S0,0001 ;S0++ count++ -ADDIU V0,V0,0008 ;V0+=8 next memstring -BNE V1,R0,700062C0 ;loop for each entry -NOP -//700062DC: tokenize memory allocation string -SLL T7,S0,0x3 -ADDU T6,A1,T7 ;T6=800241BC+offset: p->matching memstring entry -JAL 7000A58C ;strtok(memstring A0,' '); -LW A0,0004 (T6) ;A0=p->memstring -//700062EC: reinitialize memory bank -JAL 7000999C ;reset memory bank A0 -ADDIU A0,R0,0004 ;A0=4 -JAL 7F0BD1BC ;??? with memory bank A0 -ADDIU A0,R0,0004 ;A0=4 -//700062FC: determine -ma allocation -LUI A1,8003 -ADDIU A1,A1,912C ;A1=8002912C: "-ma" -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A0,R0,0001 ;A0=1 -BEQ V0,R0,7000633C ;branch if token not found -ADDIU A0,R0,0001 ;A0=1 -LUI A1,8003 -JAL 7000A6A0 ;V0=p->A0th instance of token A1 -ADDIU A1,A1,9130 ;A1=80029130: "-ma" -OR A0,V0,R0 ;A0=V0: p->instance -OR A1,R0,R0 ;A1=NULL p->extra characters -JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -OR A2,R0,R0 ;A2=0 default target base -SLL T8,V0,0xA ;T8=value * 0x400: total allocated memory -LUI AT,8002 -SW T8,41B0 (AT) ;T8->800241B0: temp -ma allocation -//7000633C: allocates "-ma" bytes to mem bank 4 -LUI A0,8002 -LW A0,41B0 (A0) ;A0=800241B0: temp -ma allocation -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1=bank 4 -LUI A1,8002 -LW A1,41B0 (A1) ;A1=800241B0: size -JAL 70009D98 ;reset memtable with base allocation -OR A0,V0,R0 ;A0=V0: p->allocation -//7000635C: reset player data -JAL 7F09A32C ;reset player data pointers -NOP -//70006364: initialize stage -LUI T9,8002 -LW T9,41A8 (T9) ;T9=800241A8: stage# -ADDIU AT,R0,005A -BEQ T9,AT,70006398 ;branch if stage 5A: title/menus -NOP -JAL 7F010290 ;V0=#players -ADDIU S1,R0,0001 ;S1=1 #players -SLTI AT,V0,0002 ;TRUE if solo -BNE AT,R0,70006398 ;branch if solo -NOP -//7000638C: MP sets #players -JAL 7F010290 ;V0=#players -NOP -OR S1,V0,R0 ;S1=V0: #players -//70006398: -JAL 7F09A38C -OR A0,S1,R0 ;A0=S1: #players 0-title, 1-solo, 1,2,3,4-multi -JAL 7F0BD48C ;set vertex and graphics memory -NOP -JAL 7000B6AC -NOP -LUI A0,8002 -JAL 7F0BDAB0 -LW A0,41A8 (A0) ;A0=800241A8: stage# -JAL 70003124 -NOP -JAL 7000ADB0 -NOP -JAL 7F0C0B4C -NOP -JAL 70002810 -NOP -//700063DC: -LUI A0,8006 -ADDIU A0,A0,D9A0 ;A0=8005D9A0: -ADDIU A1,SP,01D4 -JAL 7000DDD0 -OR A2,R0,R0 -BNE V0,R0,70006410 ;branch if not NULL -//700063F4: -LUI A0,8006 -ADDIU A0,A0,D9A0 ;A0=8005D9A0: -ADDIU A1,SP,01D4 -JAL 7000DDD0 -OR A2,R0,R0 -BEQ V0,R0,700063F4 ;loop while NULL -NOP -//70006410: -LUI T0,8002 -LW T0,42FC (T0) ;T0=800242FC: loaded stage# -BGEZ T0,700068B4 ;branch if not -1 -//7000641C: -LUI A0,8006 -ADDIU A0,A0,D9A0 ;A0=8005D9A0: -ADDIU A1,SP,01D4 -JAL 7000DDD0 -ADDIU A2,R0,0001 -LW T1,01D4 (SP) -ADDIU AT,R0,0001 -LH V1,0000 (T1) -BEQ V1,AT,70006464 -ADDIU AT,R0,0002 -BEQ V1,AT,70006890 -LUI V0,8002 -ADDIU AT,R0,0005 -BEQ V1,AT,7000689C -LUI V0,8002 -LUI V0,8002 -BEQ R0,R0,700068A4 -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -//70006464: -JAL 7000D8E0 -NOP -LUI T5,8005 -LW T5,84B0 (T5) ;T5=800484B0: -LUI AT,0005 -ORI AT,AT,EB61 ;AT=5EB61 -SUBU V1,V0,T5 -SLTU AT,V1,AT -BEQ AT,R0,70006498 -LUI V0,8002 -LUI V0,8002 -BEQ R0,R0,700068A4 -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -//70006498: step through ramrom demo file -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -SLTIU AT,S8,0002 -BGEZ V0,700068A4 ;branch if not stage -1 -NOP -BEQ AT,R0,700068A4 ;branch if not solo? set to 0, nothing seems to alter... -ADDIU T4,SP,01B4 -JAL 7F0BFC8C ;V0=TRUE if demos running [80048474] -SW T4,0048 (SP) -BEQ V0,R0,700064D0 ;branch if demo not playing -NOP -JAL 7F0C0268 ;iterate ramrom entries until end, and handle camera out -NOP -BEQ R0,R0,700064D8 -NOP -//700064D0: -JAL 7F0C0B4C -NOP -//700064D8: -JAL 70002CD8 -NOP -JAL 70002810 -NOP -JAL 70002854 -LUI A0,0002 -JAL 7000BD0C ;redirect to ramrom replay and record handlers if set -NOP -JAL 70000988 ;A0-> [8002309C] -OR A0,R0,R0 ;A0=0 -JAL 7F0BD674 ;V0=p->display list -NOP -//70006508: if available, handle debug menu and ramrom packet record -LUI T2,8002 -LW T2,4300 (T2) ;T2=80024300: state of debug menu -SW V0,01A4 (SP) ;SP+1A4=V0: p->DL -OR S3,V0,R0 ;S3=V0: p->DL -BEQ T2,R0,70006590 ;branch if not available -NOP -JAL 7000C0EC ;cur.controller A0 horz.stick pos. -OR A0,R0,R0 ;A0=0 controller 1 -SLL S0,V0,0x18 -SRA T3,S0,0x18 -OR S0,T3,R0 ;S0=horz.stick pos. -JAL 7000C1FC ;cur.controller A0 vert.stick pos. -OR A0,R0,R0 ;A0=0 controller 1 -SLL S1,V0,0x18 -SRA T7,S1,0x18 -OR S1,T7,R0 ;S1=vert.stick pos. -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,FFFF ;A1= any and all -ANDI S2,V0,FFFF ;S2=buttons held -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,FFFF ;A1= any and all -SLL A0,S0,0x18 -SLL A1,S1,0x18 -SRA T8,A1,0x18 -SRA T6,A0,0x18 -OR A0,T6,R0 ;A0=horz.stick pos. -OR A1,T8,R0 ;A1=vert.stick pos. -ANDI A2,S2,FFFF ;A2= buttons held -JAL 7F0905A0 ;debug menu processor -ANDI A3,V0,FFFF ;A3= buttons pressed -LUI AT,8002 -SW V0,4300 (AT) ;V0->80024300: state of debug menu -//70006590: -JAL 7F0BEB88 ;manage MP game when applicable -NOP -JAL 7F09B41C -NOP -//700065A0: set up viewports when applicable -LUI T9,8002 -LW T9,41A8 (T9) ;T9=800241A8: stage# -ADDIU AT,R0,005A -BEQ T9,AT,70006610 ;branch if stage 5A: title/menus -NOP -JAL 7F09A464 ;#players -OR S1,R0,R0 ;S1=0 player count -BLEZ V0,70006610 ;branch if invalid #players -NOP -//700065C4: set each player's viewport -JAL 7F09B528 -OR A0,S1,R0 ;A0=S1: player# -JAL 7F09B10C ;set cur. player to A0 -OR A0,V0,R0 ;A0=V0: player# -LW S0,0000 (S5) ;S0=8007A0B0: p->BONDdata -LH A0,07F0 (S0) ;A0=BONDdata+7F0: viewport width -JAL 7000443C ;set viewport width (A0) and height (A1) -LH A1,07F2 (S0) ;A1=BONDdata+7F2: viewport height -LW S0,0000 (S5) ;S0=8007A0B0: p->BONDdata -LH A0,07F4 (S0) ;A0=BONDdata+7F4: viewport ulx -JAL 700044BC ;set viewport ulx (A0) and uly (A1) -LH A1,07F6 (S0) ;A1=BONDdata+7F6: viewport uly -JAL 7F0BF800 -NOP -JAL 7F09A464 ;V0=#players -ADDIU S1,S1,0001 ;S1++ count++ -SLT AT,S1,V0 ;TRUE if count < players -BNE AT,R0,700065C4 ;loop for each player -NOP -//70006610: handle line mode when applicable -JAL 7F0BE30C -OR A0,S3,R0 ;A0=S3: p->DL -JAL 7F090FDC ;V0=line mode flag -OR S3,V0,R0 ;S3=V0: p->DL -BEQ V0,R0,70006700 ;branch if line mode not enabled -//70006624: global microcode snippet to force line mode -ADDIU A3,R0,FFFF ;A3=-1 -OR V0,S3,R0 ;V0=S3: p->DL -ADDIU S3,S3,0008 ;S3+=8: next DL op -LUI T0,E700 -OR V1,S3,R0 ;V1=S3: p->DL -SW T0,0000 (V0) ;DL+0= pipesync.u -SW R0,0004 (V0) ;DL+0= pipesync.l -ADDIU S3,S3,0008 ;S3+=8: next DL op -//70006644: set cycle type -LUI T1,BA00 -OR A0,S3,R0 ;A0=S3: p->DL -ORI T1,T1,1402 ;T1=BA001402 -ADDIU S3,S3,0008 ;S3+=8: next DL op -SW T1,0000 (V1) ;DL+0= setothermode_h.u: shift 14, 2 bits -SW R0,0004 (V1) ;DL+4= setothermode_h.l: cycle type-1cycle -//7000665C: white blend colour -OR A1,S3,R0 ;A1=S3: p->DL -LUI T5,F900 -ADDIU S3,S3,0008 ;S3+=8: next DL op -SW T5,0000 (A0) ;DL+0= setblendcolour.u -SW A3,0004 (A0) ;DL+4= setblendcolour.l: FFFFFFFF-white100% -//70006670: -OR A2,S3,R0 ;A2=S3: p->DL -LUI T4,EE00 -ADDIU S3,S3,0008 ;S3+=8: next DL op -SW T4,0000 (A1) ;DL+0= setprimdepth.u -SW A3,0004 (A1) ;DL+4= setprimdepth.l: depth=max, Ddepth=max -//70006684: set depth source to primitive -LUI T2,B900 -OR V0,S3,R0 ;V0=S3: p->DL -ORI T2,T2,0201 ;T2=B9000201 -ADDIU T3,R0,0004 -ADDIU S3,S3,0008 ;S3+=8: next DL op -LUI T7,B900 -LUI T6,0FA5 -SW T3,0004 (A2) ;DL+0= setothermode_l.l: depth source: primitive -SW T2,0000 (A2) ;DL+4= setothermode_l.u: shift 2, 1 bit -//700066A8: set blender -ORI T6,T6,4040 ;T6=0FA54040 -ORI T7,T7,031D ;T7=B900031D -OR S0,S3,R0 ;S0=S3: p->DL -SW T7,0000 (V0) ;DL+4= setothermode_l.u: shift 3, 1D bits -SW T6,0004 (V0) ;DL+0= setothermode_l.l: render mode: image read; converge delta-ST clamp; depth mode: force blender; blender: blend 1 machine, blend 1, blend colour memory, blend colour fog, blend alpha in, blend alpha fog, blend alpha shade, blend 0 -//700066BC: draws viewport as a fillrect? -JAL 7000441C ;V0= text clip width -ADDIU S3,S3,0008 ;S3+=8: next DL op -SLL S1,V0,0x10 -SRA T8,S1,0x10 -JAL 7000442C ;V0= text clip height -OR S1,T8,R0 ;S1= text clip width -ADDIU T9,V0,FFFF ;T9= height-1 -ANDI T0,T9,03FF ;T0=height to 10 bits -ADDIU T4,S1,FFFF ;T4=width-1 -ANDI T2,T4,03FF ;T2=width to 10 bits -SLL T1,T0,0x2 ;T1=height->lry -LUI AT,F600 -OR T5,T1,AT ;T5= fillrect | lry -SLL T3,T2,0xE ;T3=width->lrx -OR T7,T5,T3 ;T7= fillrect | lrx | lry -SW T7,0000 (S0) ;DL+0= fillrect.u: lrx, lry -SW R0,0004 (S0) ;DL+4= fillrect.l: ulx=0, uly=0 -//70006700: feed screen to VI -JAL 7000B27C ;draw screen display block to screen -OR A0,S3,R0 ;A0=S3: p->DL -//70006708: test if displaying memory usage -JAL 7F090F34 ;V0= memory usage display flag [80036F74] -OR S3,V0,R0 ;S3=V0: p->DL -BEQ V0,R0,70006724 ;branch if not displaying memory usage -NOP -JAL 70002958 -OR A0,S3,R0 ;V0=S3: p->DL -OR S3,V0,R0 ;S3=V0: p->DL -//70006724: display debug menu if applicable -LUI T6,8002 -LW T6,4300 (T6) ;T6=80024300: state of debug menu -BEQL T6,R0,7000674C ;branch if debug not available -OR V0,S3,R0 -JAL 7F090490 ;display debug menu text on screen -NOP -JAL 7F08FE74 -OR A0,S3,R0 ;V0=S3: p->DL -OR S3,V0,R0 ;S3=V0: p->DL -//70006748: sync and end display list -OR V0,S3,R0 ;V0=S3: p->DL -ADDIU S3,S3,0008 ;S3+=8 next DL op -LUI T8,E900 -SW T8,0000 (V0) ;DL+0= fullsync.u -SW R0,0004 (V0) ;DL+4= fullsync.l -OR V1,S3,R0 ;V1=S3: p->DL -LUI T9,B800 -SW T9,0000 (V1) ;DL+0= enddl.u -SW R0,0004 (V1) ;DL+4= enddl.l -//7000676C: handle show mem use, when applicable -LUI T0,8002 -LW T0,41B4 (T0) ;T0=800241B4: 1- "show mem use" -ADDIU S3,S3,0008 ;S3+=8 next DL op -BEQ T0,R0,700067A8 ;branch if "show mem use" not set -NOP -JAL 700098F0 ;V0=8 loops 8 times, needlessly -NOP -JAL 7000A29C -NOP -JAL 7F0BD774 ;A0->SP+0; deleted debug routine -OR A0,S3,R0 ;V0=S3: p->DL -JAL 7F0C6650 ;unconditional return -OR A0,R0,R0 ;A0=0 -LUI AT,8002 -SW R0,41B4 (AT) ;0->show mem use flag -//700067A8: handle show mem bars, when applicable -LUI T1,8002 -LW T1,41B8 (T1) ;T1=800241B8: 1- "show mem bars" -BEQ T1,R0,700067C0 ;branch if "show mem bars" not set -NOP -JAL 7F0BD810 -OR A0,S3,R0 ;V0=S3: p->DL -//700067C0: -JAL 7F0BD69C -OR A0,S3,R0 ;V0=S3: p->DL -JAL 7F0BD738 -NOP -JAL 70003298 -NOP -//700067D8: handle grab task flag, when applicable -JAL 7F09106C ;V0= grab task debugger flag -NOP -BEQ V0,R0,70006854 ;branch if grab task not set -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,C000 ;A1=A, B buttons -BEQ V0,R0,70006854 ;branch if not pressed -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,C000 ;A1=A, B buttons -ORI AT,R0,C000 -BNE V0,AT,70006854 ;branch if A+B was not precisely what was pressed -//70006808: generate a unique name for this taskgrab -LUI A2,8002 -LW A2,4324 (A2) ;A2=80024324: "taskgrab" ram dump # -OR A0,S4,R0 ;A0=S4: p->string buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,S6,R0 ;A1=S6: 80029134="u64.taskgrab.%d.core" -OR A0,S4,R0 ;A0=S4: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S7,R0 ;A1=S7: @filesize -BEQ V0,R0,70006844 ;branch if unique -//7000682C: loop and increment value if found -LUI A2,8002 -LW A2,4324 (A2) ;A2=80024324: taskgrab count -LUI AT,8002 -ADDIU A2,A2,0001 -BEQ R0,R0,70006808 ;loop until a new instance can be found -SW A2,4324 (AT) ;taskgrab count++ -//70006844: -OR A0,S4,R0 ;A0=S4: p->string -LUI A1,8000 ;A1=80000000 start address -JAL 7F0CFFE0 ;send capture data A1 of size A2 named A0 -LUI A2,0040 ;A2=0x400000 4MB size -//70006854: -LW A0,01A4 (SP) ;A0=SP+1A4: org.p->DL -OR A1,S3,R0 ;A1=S3: p->DL -OR A2,R0,R0 ;A2=0 -JAL 7F0CFE18 -LW A3,0048 (SP) ;A3=SP+48: -JAL 70009E10 -ADDIU S8,S8,0001 ;S8++ -LW T4,01AC (SP) -LUI A0,0001 ;A0=10000 -XORI T2,T4,0001 -JAL 70002854 -SW T2,01AC (SP) ;SP+1AC^=1 -LUI V0,8002 -BEQ R0,R0,700068A4 -LW V0,42FC (V0) -//70006890: -ADDIU S8,S8,FFFF ;S8-- player count-1? -BEQ R0,R0,700068A4 -LW V0,42FC (V0) -//7000689C: -ADDIU S8,R0,0004 ;S8=4 player count=4? -//700068A0: -LW V0,42FC (V0) ;V0=800242FC: loaded stage# -BLTZ V0,7000641C ;loop if stage# is -1 -NOP -BNE S8,R0,7000641C -NOP -//700068B4: unload stage -JAL 7F0BFB20 ;unload stage -NOP -JAL 7F0C08FC ;stop demos at end of stage -NOP -JAL 700099C4 ;??? to memory bank A0 -ADDIU A0,R0,0004 ;A0=bank 4 -JAL 7F0BD1BC ;??? to memory bank A0 -ADDIU A0,R0,0004 ;A0=bank 4 -LUI V0,8002 -ADDIU V0,V0,42FC ;V0=800242FC -LW T5,0000 (V0) ;T5=800242FC: loaded stage# -LW T7,01DC (SP) -LUI AT,8002 -ADDIU T3,R0,FFFF ;T3=-1 -SW T5,41A8 (AT) ;stage#->800241A8: stage# -BEQ T7,R0,7000618C ;loop if still zero, which as far as I know it always does -SW T3,0000 (V0) ;-1->800242FC: loaded stage# -//700068F8: do something with mem bank 5 -JAL 7F0D1A7C -SW S3,01A8 (SP) ;SP+1A8=S3: p->DL -//70006900: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,01E0 diff --git a/notes/GE Documentation/Gameplay and Misc/System/Boot/7000A5C0 - handle command line options.txt b/notes/GE Documentation/Gameplay and Misc/System/Boot/7000A5C0 - handle command line options.txt deleted file mode 100644 index b3436f5..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Boot/7000A5C0 - handle command line options.txt +++ /dev/null @@ -1 +0,0 @@ -7000A5C0 B1C0 handle command line options returns V0=TRUE only if "debug mode" enabled ADDIU SP,SP,FFC0 SW S1,001C (SP) SW RA,0024 (SP) LUI S1,00FF SW S2,0020 (SP) SW S0,0018 (SP) SW R0,0028 (SP) ;0->SP+28: return FALSE by default JAL 7000CEA8 ;V0= 1; would have returned 0 if debug console present ORI S1,S1,B000 ;S1=00FFB000 BEQ V0,R0,7000A5F8 ;branch if debugger present LUI S0,8006 LUI AT,8006 BEQ R0,R0,7000A61C SW R0,4C30 (AT) ;0->80064C30: NULL->buffer //7000A5F8: copy string from debug console to buffer LUI S2,8006 ADDIU S2,S2,4EB0 ;S2=80064EB0 ADDIU S0,S0,4C30 ;S0=80064C30 OR A0,S1,R0 ;A0=S1: hardware address JAL 70013810 ;copies word from hardware A0 to rdram A1 OR A1,S0,R0 ;A1=S0: target address ADDIU S0,S0,0004 ;S0+=4 BNE S0,S2,7000A604 ;loop to copy 0x280 bytes ADDIU S1,S1,0004 ;S1+=4 //7000A61C: test for "debug mode" flag LUI A0,8006 JAL 7000A4F0 ;strtok(A0,' ') ADDIU A0,A0,4C30 ;A0=80064C30: p->buffer LUI A1,8003 ADDIU A1,A1,91F4 ;A1=800291F4: "-d" JAL 7000A6A0 ;V0=p->A0th instance of token A1 ADDIU A0,R0,0001 ;A0=1: 1st instance BEQ V0,R0,7000A648 ;branch if not found ADDIU A0,R0,0001 ;A0=1: 1st instance ADDIU T6,R0,0001 SW T6,0028 (SP) ;1->SP+28: returns TRUE, not FALSE //7000A648: test for "sound disabled" flag LUI A1,8003 JAL 7000A6A0 ;V0=p->A0th instance of token A1 ADDIU A1,A1,91F8 ;A1=800291F8: "-s" BEQ V0,R0,7000A668 ;branch if not found ADDIU A0,R0,0001 ;A0=1: 1st instance ADDIU T7,R0,0001 LUI AT,8002 SB T7,43F8 (AT) ;1->800243F8: disable sound //7000A668: test for "japanese" flag LUI A1,8003 JAL 7000A6A0 ;V0=p->A0th instance of token A1 ADDIU A1,A1,91FC ;A1=800291FC: "-j" BEQ V0,R0,7000A684 ;branch if not found ADDIU T8,R0,0001 LUI AT,8005 SB T8,84D0 (AT) ;1->800484D0: language //7000A684: return LW RA,0024 (SP) LW V0,0028 (SP) LW S0,0018 (SP) LW S1,001C (SP) LW S2,0020 (SP) JR RA ADDIU SP,SP,0038 \ No newline at end of file diff --git a/notes/GE Documentation/Gameplay and Misc/System/Boot/7000D740 - establishes debug mode.txt b/notes/GE Documentation/Gameplay and Misc/System/Boot/7000D740 - establishes debug mode.txt deleted file mode 100644 index 0a03f75..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Boot/7000D740 - establishes debug mode.txt +++ /dev/null @@ -1,82 +0,0 @@ -7000D740 E340 establishes debug mode - accepts: A0=p->??? - fries: AT,V0,A0,A1,A2,A3,T0,T1,T2,T6,T7,T8,T9 -ADDIU SP,SP,FFC8 -SW RA,0024 (SP) -SW A0,0038 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 700185F0 ;V0= COP0 status interrupt enabled flag -SW S0,0018 (SP) -LW T6,0038 (SP) -OR S0,V0,R0 ;S0=V0: COP0 int.enabled -BNEZ T6,7000D774 ;branch if a valid pointer -NOP -BEQ R0,R0,7000D77C -ADDIU S1,R0,0004 ;S1=4 NULL pointers default to 4 -//7000D774: pull value from pointer -LW T7,0038 (SP) -LHU S1,0010 (T7) ;S1=T7+10: -//7000D77C: -OR S2,S1,R0 ;S2=S1: value (power of 2) -ADDIU AT,R0,0002 -BEQ S2,AT,7000D7C4 ;branch if 2 -ADDIU AT,R0,0004 -BEQ S1,AT,7000D7A4 ;branch if 4 -ADDIU AT,R0,0008 -BEQ S2,AT,7000D7C4 ;branch if 8 -NOP -BEQ R0,R0,7000D7E0 ;return by default -NOP -//7000D7A4: 4 -LUI T9,8002 -LW T9,7730 (T9) ;T9=80027730: [8005D640] -ADDIU T8,R0,0001 -OR A0,R0,R0 ;A0=0 -JAL 700107AC ;odd, isn't this an exception handler? -SH T8,0010 (T9) ;1->[@80027730] -BEQ R0,R0,7000D7E0 -NOP -//7000D7C4: 2,8 -LW T1,0038 (SP) -ADDIU T0,R0,0001 -SH T0,0010 (T1) ;replace 2,8 with 1 -LW T2,0038 (SP) -LW A0,0008 (T2) ;A0=T2+8: p->??? -JAL 70010A90 -OR A1,T2,R0 ;A1=p->??? -//7000D7E0: reset status -JAL 70018610 ;Set flags A0 in COP0 status -OR A0,S0,R0 ;A0=S0: int.enabled flag, others unmasked! -//7000D7E8: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0038 - -+_+ - -70010A90 - accepts: A0=p->???, A1=p->??? - fries: A2,A3,T6 -OR A2,A0,R0 ;A2=A0: -LW A3,0000 (A2) ;A3= -ADDIU SP,SP,FFF8 -BEQ A3,R0,70010AC8 ;return if NULL -NOP -//70010AA4: -BNE A3,A1,70010AB8 ;branch if pointers not identical -NOP -LW T6,0000 (A1) -BEQ R0,R0,70010AC8 ;return -SW T6,0000 (A2) ;@A1 -> @A2 -//70010AB8: -OR A2,A3,R0 ;A2=A3: -LW A3,0000 (A2) ;A3=A2+0: -BNEZ A3,70010AA4 ;loop until a match or NULL pointer -NOP -//70010AC8: return -JR RA -ADDIU SP,SP,0008 diff --git a/notes/GE Documentation/Gameplay and Misc/System/Boot/80000000 - boot.txt b/notes/GE Documentation/Gameplay and Misc/System/Boot/80000000 - boot.txt deleted file mode 100644 index c843ff2..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Boot/80000000 - boot.txt +++ /dev/null @@ -1,162 +0,0 @@ -80000000 4C0 Bootcode immediately following bootstrap, as opposed to BadVAddr handler - this occurs just after the A4000040 - A40004C0 stuff -LUI T3,B000 -LW T1,0008 (T3) ;T1=B0000008: p->boot address -LUI T2,1FFF -ORI T2,T2,FFFF -LUI AT,A460 -AND T1,T1,T2 ;T1=p->boot & 0x1FFFFFFF: remove address mask -SW T1,0000 (AT) ;PI_RDRAM_ADDR = boot address (80000400) -//8000001C: -LUI T0,A460 -LW T0,0010 (T0) ;T0=PI_STATUS -ANDI T0,T0,0002 -BNEL T0,R0,80000020 ;loop until ready -LUI T0,A460 -ADDIU T0,R0,1000 -ADD T0,T0,T3 ;T0=B0001000 -AND T0,T0,T2 ;t0&=0x1FFFFFFF: remove address mask -LUI AT,A460 -SW T0,0004 (AT) ;PI_CART_ADDR = 10001000: main memory region (70000400-70020D90) -LUI T2,0010 -ADDIU T2,T2,FFFF ;T2=0xFFFFF: size=100000-1 -LUI AT,A460 -SW T2,000C (AT) ;PI_WR_LEN = 0xFFFFF -//80000054: -... ;no code present -//800000C4: -LUI T3,A460 -LW T3,0010 (T3) ;T3=PI_STATUS -ANDI T3,T3,0001 -BNEZ T3,80000054 ;loop until transfer complete -NOP -//800000D8: -LUI T3,B000 -LW A0,0008 (T3) ;A0=p->boot -OR A1,S6,R0 -LUI AT,5D58 -ORI AT,AT,8B65 -MULTU A1,AT -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0014 (SP) -LUI RA,0010 -OR V1,R0,R0 -OR T0,R0,R0 -OR T1,A0,R0 -ADDIU T5,R0,0020 -MFLO V0 -ADDIU V0,V0,0001 -OR A3,V0,R0 -OR T2,V0,R0 -OR T3,V0,R0 -OR S0,V0,R0 -OR A2,V0,R0 -OR T4,V0,R0 -//80000130: calculate checksum -LW V0,0000 (T1) -ADDU V1,A3,V0 -SLTU AT,V1,A3 -BEQ AT,R0,80000148 -OR A1,V1,R0 -ADDIU T2,T2,0001 -//80000148: -ANDI V1,V0,001F -SUBU T7,T5,V1 -SRLV T8,V0,T7 -SLLV T6,V0,V1 -OR A0,T6,T8 -SLTU AT,A2,V0 -OR A3,A1,R0 -XOR T3,T3,V0 -BEQ AT,R0,8000017C -ADDU S0,S0,A0 -XOR T9,A3,V0 -BEQ R0,R0,80000180 -XOR A2,T9,A2 -//8000017C: -XOR A2,A2,A0 -//80000180: -ADDIU T0,T0,0004 -XOR T7,V0,S0 -ADDIU T1,T1,0004 -BNE T0,RA,80000130 -ADDU T4,T7,T4 -XOR T6,A3,T2 -XOR A3,T6,T3 -XOR T8,S0,A2 -XOR S0,T8,T4 -LUI T3,B000 -LW T0,0010 (T3) -BNE A3,T0,800001C8 -NOP -LW T0,0014 (T3) -BNE S0,T0,800001C8 -NOP -BGEZAL R0,800001D0 ;branch if checksum okay -NOP -//800001C8: -BGEZAL R0,800001C8 -NOP -//800001D0: -LUI T1,A408 -LW T1,0000 (T1) -LW S0,0014 (SP) -LW RA,001C (SP) -BEQ T1,R0,800001FC -ADDIU SP,SP,0020 -ADDIU T2,R0,0041 -LUI AT,A404 -SW T2,0010 (AT) -LUI AT,A408 -SW R0,0000 (AT) -LUI T3,00AA -ORI T3,T3,AAAE -LUI AT,A404 -SW T3,0010 (AT) -LUI AT,A430 -ADDIU T0,R0,0555 -SW T0,000C (AT) -LUI AT,A480 -SW R0,0018 (AT) -LUI AT,A450 -SW R0,000C (AT) -LUI AT,A430 -ADDIU T1,R0,0800 -SW T1,0000 (AT) -ADDIU T1,R0,0002 -LUI AT,A460 -LUI T0,A000 -ORI T0,T0,0300 -SW T1,0010 (AT) -SW S7,0014 (T0) -SW S5,000C (T0) -SW S3,0004 (T0) -BEQ S3,R0,80000268 -SW S4,0000 (T0) -LUI T1,A600 -BEQ R0,R0,80000270 -ADDIU T1,T1,0000 -//80000268: -LUI T1,B000 -ADDIU T1,T1,0000 -SW T1,0008 (T0) -LUI T0,A400 -ADDIU T0,T0,0000 -ADDI T1,T0,1000 -//80000280: -ADDIU T0,T0,0004 -BNE T0,T1,80000280 -SW R0,FFFC (T0) -LUI T0,A400 -ADDIU T0,T0,1000 -ADDI T1,T0,1000 -//80000298: -ADDIU T0,T0,0004 -BNE T0,T1,80000298 -SW R0,FFFC (T0) -LUI T3,B000 -LW T1,0008 (T3) ;T1=p->boot addy -JR T1 ;jump to 80000400 -NOP -//800002B4 \ No newline at end of file diff --git a/notes/GE Documentation/Gameplay and Misc/System/Boot/80000400 - initialize game.txt b/notes/GE Documentation/Gameplay and Misc/System/Boot/80000400 - initialize game.txt deleted file mode 100644 index 7ee04c2..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Boot/80000400 - initialize game.txt +++ /dev/null @@ -1,183 +0,0 @@ -80000400 1000 inception point -LUI T0,8006 -LUI T1,0003 -ADDIU T0,T0,D2E0 ;T0=8005D2E0 -ORI T1,T1,1080 ;T1=31080 -//80000410: initialize 31080 bytes at 8005D2E0 -ADDI T1,T1,FFF8 -SW R0,0000 (T0) -SW R0,0004 (T0) -BNEZ T1,80000410 -ADDI T0,T0,0008 -//80000424: set stack pointer and jump to 80000450 -LUI T2,8000 -LUI SP,803B -ADDIU T2,T2,0450 ;T2=80000450 -JR T2 -ADDIU SP,SP,B410 ;SP=803AB410 - -80000450 1050 establish root TLB entry and proceed -ADDIU V0,R0,0001 -ADDIU V1,R0,0000 -ADDIU A0,R0,0000 -LUI A1,7000 -ADDIU A2,R0,001F -ADDIU A3,R0,0001 -LUI T0,007F -ORI T0,T0,E000 -MTC0 V0,Index -SRL V1,V1,0xC -SLL V1,V1,0x6 -ADDU V1,V1,A2 ;V1=A2 -MTC0 V1,EntryLo0 -SRL A0,A0,0xC -SLL A0,A0,0x6 -ADDU A0,A0,A3 ;A0=A3 -MTC0 A0,EntryLo1 -SRL A0,A1,0xD -SLL A0,A0,0xD ;A0=A1 -MTC0 A0,EntryHi -MTC0 T0,PageMask -NOP -TLBWI -//800004AC: jump to 70000510 -LUI T2,7000 -ADDIU T2,T2,0510 ;T2=70000510 -JR T2 -NOP - -70000510 1110 decompress main compressed block, -ADDIU SP,SP,FFC0 -SW RA,0024 (SP) -SW S1,0020 (SP) -JAL 700004BC ;V0=80020D90: target address for main compressed block (21990) -SW S0,001C (SP) -JAL 700004C8 ;V0=21990: ROM address of main compressed block -OR S0,V0,R0 ;S0=V0: 80020D90 -JAL 700004D4 ;V0=33590: ROM endpoint of main compressed block -SW V0,0034 (SP) ;SP+34= main.pos -LW T6,0034 (SP) -JAL 700004E0 ;V0=33590: ROM address of 70200000 RareZip ASM [33590-34B30 ROM] -SUBU S1,V0,T6 ;S1=V0-T6: compressed size of main compressed block -JAL 700004EC ;V0=34B30: ROM endpoint of RareZip (address of 7F- TLB routines) -SW V0,0028 (SP) ;SP+28= RareZip.pos -//70000548: -LW T7,0028 (SP) -LUI T2,7020 ;T2=70200000: target vaddress for RareZip -OR A1,S0,R0 ;A1=S0: target address for main.bin -SUBU T8,V0,T7 ;T8=V0-T7: RareZip.sz = RareZip.end - RareZip.pos -ADDU A0,S1,T8 ;A0=S1+T8: main.cmp_sz + RareZip.sz -ADDIU V1,A0,FFFF ;V1= total size - 1 -BLTZ V1,7000058C ;skip if nothing to copy -LUI A2,8030 ;A2=80300000: buffer for decompression tables -LUI T9,7020 -SUBU A0,T9,S1 ;A0=70200000 - main.cmp_sz: vaddr for main -ADDU V0,S0,V1 ;V0=S0+V1: target address + total size -//70000574: loop to copy from source to virtual target instead of mapping... -LBU T0,0000 (V0) -ADDU T1,A0,V1 -ADDIU V1,V1,FFFF -ADDIU V0,V0,FFFF -BGEZ V1,70000574 -SB T0,0000 (T1) -//7000058C: decompress main compressed block -JAL 700004F8 ;redirect to 7020141C: decompress A0 to A1; A2=buffer -SUBU A0,T2,S1 ;A0=p->source: RareZip.vaddr - main.cmp_sz -//70000594: -LUI T3,0003 -LUI T4,0000 -ADDIU T4,T4,1050 ;T4=1050 -ADDIU T3,T3,3590 ;T3=33590: ROM address of 70200000 RareZip ASM [33590-34B30 ROM] -LUI AT,000F -ORI AT,AT,FFB1 ;AT=FFFB1 -SUBU V0,T3,T4 ;V0=33590 - 1050: 32550 -SLT AT,V0,AT -BNEZ AT,70000604 ;branch if 32550 < FFFB1, which it always will be... -LUI AT,FFF0 -//700005BC: on failure, presumes a 6103 CIC is present!? Probably just alt address for uncompressed ROM structure. -ORI AT,AT,0050 ;AT= -FFFB0 -LUI A1,0010 -LUI A2,7010 -ADDIU A2,A2,0400 ;A2=70100400 -ADDIU A1,A1,1000 ;A1=101000 -ADDU A3,V0,AT ;A3= difference - FFFB0 -JAL 7000CF90 ;read (A0) A3 bytes from ROM A1 to A2 -OR A0,R0,R0 ;A0=0 (read) -JAL 7000D070 ;V0=PI status -NOP -ANDI T5,V0,0001 -BEQ T5,V0,70000604 ;branch if ready -NOP -//700005F0: wait until PI ready -JAL 7000D070 ;V0=PI status -NOP -ANDI T6,V0,0001 -BNEZ T6,700005F0 -NOP -//70000604: -JAL 7000D080 -NOP -JAL 70001BB0 -NOP -LUI S0,8000 -LUI V0,7000 -LUI A0,8000 -ADDIU V0,V0,1B60 -OR V1,S0,R0 -ORI A0,A0,0080 -//7000062C: -LW T7,0000 (V0) -ADDIU V1,V1,0010 -ADDIU V0,V0,0010 -SW T7,FFF0 (V1) -LW T8,FFF4 (V0) -SW T8,FFF4 (V1) -LW T9,FFF8 (V0) -SW T9,FFF8 (V1) -LW T0,FFFC (V0) -BNE V1,A0,7000062C -SW T0,FFFC (V1) -//70000658: -JAL 7000D320 -NOP -OR A0,S0,R0 -JAL 7000D350 -ADDIU A1,R0,4000 -ADDIU S0,R0,0002 -ADDIU S1,R0,0020 -//70000674: -JAL 7000D3D0 -OR A0,S0,R0 -ADDIU S0,S0,0001 -BNE S0,S1,70000674 -NOP -//70000688: -JAL 7000D410 -NOP -JAL 7000D420 -ORI A0,V0,0E80 -LUI A0,803B -ADDIU A0,A0,B950 -JAL 700006F0 -ORI A1,R0,8000 -//700006A8: -LUI S0,8006 -ADDIU S0,S0,D640 -LUI A2,7000 -ADDIU T4,R0,000A -SW T4,0014 (SP) -ADDIU A2,A2,089C -OR A0,S0,R0 -ADDIU A1,R0,0003 -OR A3,R0,R0 -JAL 7000D430 -SW V0,0010 (SP) -JAL 7000D580 -OR A0,S0,R0 -LW RA,0024 (SP) -LW S0,001C (SP) -LW S1,0020 (SP) -JR RA -ADDIU SP,SP,0040 - -7000D080 DC80 diff --git a/notes/GE Documentation/Gameplay and Misc/System/Boot/A4000778 0x778 - bootstrap after copied bootcode.txt b/notes/GE Documentation/Gameplay and Misc/System/Boot/A4000778 0x778 - bootstrap after copied bootcode.txt deleted file mode 100644 index 769557e..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Boot/A4000778 0x778 - bootstrap after copied bootcode.txt +++ /dev/null @@ -1,269 +0,0 @@ -A40002B8 0x778 more bootcode - -ADDIU SP,SP,FF60 -SW S0,0040 (SP) -SW S1,0044 (SP) -OR S1,R0,R0 -OR S0,R0,R0 -SW V0,0000 (SP) -SW V1,0004 (SP) -SW A0,0008 (SP) -SW A1,000C (SP) -SW A2,0010 (SP) -SW A3,0014 (SP) -SW T0,0018 (SP) -SW T1,001C (SP) -SW T2,0020 (SP) -SW T3,0024 (SP) -SW T4,0028 (SP) -SW T5,002C (SP) -SW T6,0030 (SP) -SW T7,0034 (SP) -SW T8,0038 (SP) -SW T9,003C (SP) -SW S2,0048 (SP) -SW S3,004C (SP) -SW S4,0050 (SP) -SW S5,0054 (SP) -SW S6,0058 (SP) -SW S7,005C (SP) -SW S8,0060 (SP) -SW RA,0064 (SP) -JAL A4000880 -NOP -ADDIU S0,S0,0001 -SLTI T1,S0,0004 -BNE T1,R0,-5 -ADDU S1,S1,V0 -SRL A0,S1,0x2 -JAL A4000A40 -ADDIU A1,R0,0001 -LW RA,0064 (SP) -SRL V0,S1,0x2 -LW S1,0044 (SP) -LW V1,0004 (SP) -LW A0,0008 (SP) -LW A1,000C (SP) -LW A2,0010 (SP) -LW A3,0014 (SP) -LW T0,0018 (SP) -LW T1,001C (SP) -LW T2,0020 (SP) -LW T3,0024 (SP) -LW T4,0028 (SP) -LW T5,002C (SP) -LW T6,0030 (SP) -LW T7,0034 (SP) -LW T8,0038 (SP) -LW T9,003C (SP) -LW S0,0040 (SP) -LW S2,0048 (SP) -LW S3,004C (SP) -LW S4,0050 (SP) -LW S5,0054 (SP) -LW S6,0058 (SP) -LW S7,005C (SP) -LW S8,0060 (SP) -JR RA -ADDIU SP,SP,00A0 - -//A4000880: -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -OR T1,R0,R0 -OR T3,R0,R0 -OR T4,R0,R0 -SLTI K0,T4,0040 -BEQL K0,R0,+24 -OR V0,R0,R0 -JAL A400090C -OR A0,T4,R0 -BLEZL V0,+8 -SLTI K0,T1,0050 -SUBU K0,V0,T1 -MULTU K0,T4 -OR T1,V0,R0 -MFLO K0 -ADDU T3,T3,K0 -NOP -SLTI K0,T1,0050 -BNE K0,R0,-15 -ADDIU T4,T4,0001 -SLL A0,T3,0x2 -SUBU A0,A0,T3 -SLL A0,A0,0x2 -SUBU A0,A0,T3 -SLL A0,A0,0x1 -JAL A4000980 -ADDIU A0,A0,FC90 -BEQ R0,R0,+3 -LW RA,001C (SP) -OR V0,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -//A400090C: -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -OR V0,R0,R0 -JAL A4000A40 -ADDIU A1,R0,0002 -OR S8,R0,R0 -ADDIU K0,R0,FFFF -SW K0,0004 (S4) -LW V1,0004 (S4) -SW K0,0000 (S4) -SW K0,0000 (S4) -OR GP,R0,R0 -SRL V1,V1,0x10 -ANDI K0,V1,0001 -BEQL K0,R0,+3 -ADDIU GP,GP,0001 -ADDIU V0,V0,0001 -ADDIU GP,GP,0001 -SLTI K0,GP,0008 -BNE K0,R0,-7 -SRL V1,V1,0x1 -ADDIU S8,S8,0001 -SLTI K0,S8,000A -BNEL K0,R0,-17 -ADDIU K0,R0,FFFF -LW RA,001C (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -//A4000980: -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -SW A0,0020 (SP) -SB R0,0027 (SP) -OR T0,R0,R0 -OR T2,R0,R0 -ORI T5,R0,C800 -OR T6,R0,R0 -SLTI K0,T6,0040 -BNEL K0,R0,+4 -OR A0,T6,R0 -BEQ R0,R0,+32 -OR V0,R0,R0 -OR A0,T6,R0 -JAL A4000A40 -ADDIU A1,R0,0001 -JAL A4000AD0 -ADDIU A0,SP,0027 -JAL A4000AD0 -ADDIU A0,SP,0027 -LBU K0,0027 (SP) -ADDIU K1,R0,0320 -LW A0,0020 (SP) -MULTU K0,K1 -MFLO T0 -SUBU K0,T0,A0 -BGEZL K0,+3 -SLT K1,K0,T5 -SUBU K0,A0,T0 -SLT K1,K0,T5 -BEQL K1,R0,+4 -LW A0,0020 (SP) -OR T5,K0,R0 -OR T2,T6,R0 -LW A0,0020 (SP) -SLT K1,T0,A0 -BEQL K1,R0,+6 -ADDU V0,T2,T6 -ADDIU T6,T6,0001 -SLTI K1,T6,0041 -BNEL K1,R0,-32 -SLTI K0,T6,0040 -ADDU V0,T2,T6 -SRL V0,V0,0x1 -LW RA,001C (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -//A4000A40: -ADDIU SP,SP,FFD8 -ANDI A0,A0,00FF -ADDIU K1,R0,0001 -XORI A0,A0,003F -SW RA,001C (SP) -BNE A1,K1,+3 -LUI T7,4600 -LUI K0,8000 -OR T7,T7,K0 -ANDI K0,A0,0001 -SLL K0,K0,0x6 -OR T7,T7,K0 -ANDI K0,A0,0002 -SLL K0,K0,0xD -OR T7,T7,K0 -ANDI K0,A0,0004 -SLL K0,K0,0x14 -OR T7,T7,K0 -ANDI K0,A0,0008 -SLL K0,K0,0x4 -OR T7,T7,K0 -ANDI K0,A0,0010 -SLL K0,K0,0xB -OR T7,T7,K0 -ANDI K0,A0,0020 -SLL K0,K0,0x12 -OR T7,T7,K0 -ADDIU K1,R0,0001 -BNE A1,K1,+3 -SW T7,0000 (S5) -LUI K0,A430 -SW R0,0000 (K0) -LW RA,001C (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -//A4000AD0: -ADDIU SP,SP,FFD8 -SW RA,001C (SP) -ADDIU K0,R0,2000 -LUI K1,A430 -SW K0,0000 (K1) -OR S8,R0,R0 -LW S8,0000 (S5) -ADDIU K0,R0,1000 -SW K0,0000 (K1) -ADDIU K1,R0,0040 -AND K1,K1,S8 -SRL K1,K1,0x6 -OR K0,R0,R0 -OR K0,K0,K1 -ADDIU K1,R0,4000 -AND K1,K1,S8 -SRL K1,K1,0xD -OR K0,K0,K1 -LUI K1,0040 -AND K1,K1,S8 -SRL K1,K1,0x14 -OR K0,K0,K1 -ADDIU K1,R0,0080 -AND K1,K1,S8 -SRL K1,K1,0x4 -OR K0,K0,K1 -ORI K1,R0,8000 -AND K1,K1,S8 -SRL K1,K1,0xB -OR K0,K0,K1 -LUI K1,0080 -AND K1,K1,S8 -SRL K1,K1,0x12 -OR K0,K0,K1 -SB K0,0000 (A0) -LW RA,001C (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -A4000B6C - A4001000 -some kind of data, could be any number of things - diff --git a/notes/GE Documentation/Gameplay and Misc/System/Controllers/7000C980 - send rumble off packet.txt b/notes/GE Documentation/Gameplay and Misc/System/Controllers/7000C980 - send rumble off packet.txt deleted file mode 100644 index 950c836..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Controllers/7000C980 - send rumble off packet.txt +++ /dev/null @@ -1,86 +0,0 @@ -7000C980 D580 send rumble off packet to PIFram [800655A0+offset] - accepts: A0=p->packet - returns: V0=0 if okay, 4 if I/O error, 8 if not present -ADDIU SP,SP,FFB0 -SW RA,0014 (SP) -JAL 70015E60 -SW A0,0050 (SP) ;A0->SP+50: -LW T7,0050 (SP) ;T7=SP+50: -ADDIU T6,R0,0003 -LUI AT,8006 -SB T6,7CE0 (AT) ;3->80067CE0: PIFcomand-write mempak -LW T8,0008 (T7) ;T8=packet+8: controller#? -LUI T0,8006 -ADDIU T0,T0,55A0 ;T0=800655A0: -SLL T9,T8,0x6 ;T9=T8 * 0x40 -ADDU A1,T9,T0 ;A1=800655A0 + offset: p->data to be written -JAL 70015ED0 ;PIFram access -ADDIU A0,R0,0001 ;A0=1: write -//7000C9BC: -LW T1,0050 (SP) ;T1=SP+50: p->controller.packet -OR A1,R0,R0 ;A1=NULL -ADDIU A2,R0,0001 ;A2=1 -JAL 7000DDD0 -LW A0,0004 (T1) ;A0=packet+4: p->??? -LUI A1,8006 -ADDIU A1,A1,7D70 ;A1=80067D70: p->target -JAL 70015ED0 ;PIFram access -OR A0,R0,R0 ;A0=0: read -//7000C9E0: -LW T2,0050 (SP) ;T2=SP+50: p->controller.packet -OR A1,R0,R0 -ADDIU A2,R0,0001 -JAL 7000DDD0 -LW A0,0004 (T2) ;A0=packet+4: p->??? -//7000C9F4: offset target address for correct channel# -LW T3,0050 (SP) ;T3=SP+50: p->controller.packet -LUI V1,8006 -ADDIU V1,V1,7D70 ;V1=80067D70: p->target/source -LW A0,0008 (T3) ;A0=packet+8: # -ADDIU T4,SP,001C ;T4=SP+1C: space for data on stack -BEQL A0,R0,7000CA2C ;branch if A0=0: channel 0 (controller 1) -OR T7,V1,R0 -BLEZ A0,7000CA28 -OR V0,R0,R0 ;V0=0 -//7000CA18: skip to start of channel -ADDIU V0,V0,0001 ;V0++ -SLT AT,V0,A0 ;TRUE if count < A0: -BNE AT,R0,7000CA18 -ADDIU V1,V1,0001 ;V1++ p->source++ -//7000CA28: copy data from buffer to stack -OR T7,V1,R0 ;T7=p->source -ADDIU T6,V1,0024 ;T6=end of source -//7000CA30: loop -LWL AT,0000 (T7) -LWR AT,0003 (T7) ;AT=word from target -ADDIU T7,T7,000C -ADDIU T4,T4,000C -SW AT,FFF4 (T4) -LWL AT,FFF8 (T7) -LWR AT,FFFB (T7) -SW AT,FFF8 (T4) -LWL AT,FFFC (T7) -LWR AT,FFFF (T7) -BNE T7,T6,7000CA30 -SW AT,FFFC (T4) -//7000CA60: determine error status for retrieved data -LWL AT,0000 (T7) -LWR AT,0003 (T7) -SW AT,0000 (T4) -LBU V0,001E (SP) ;V0=SP+1E: r byte (error flag return) -LBU T0,0042 (SP) ;T0=SP+42: data.CRC -ANDI T8,V0,00C0 -SRA A0,T8,0x4 ;A0&=0xC0 / 0x10 -BNE A0,R0,7000CA90 ;branch if something set -NOP -BEQ T0,R0,7000CA90 ;branch if data.CRC 0 -NOP -ADDIU A0,R0,0004 ;4->SP+48: force "I/O error" -//7000CA90: -JAL 70015EA4 -SW A0,0048 (SP) ;SP+48=error status -LW RA,0014 (SP) -LW V0,0048 (SP) ;V0=error status -ADDIU SP,SP,0050 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/System/Controllers/7000CD38 - rumble pak output.txt b/notes/GE Documentation/Gameplay and Misc/System/Controllers/7000CD38 - rumble pak output.txt deleted file mode 100644 index 1a61df9..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Controllers/7000CD38 - rumble pak output.txt +++ /dev/null @@ -1,101 +0,0 @@ -7000CD38 D938 generates rumble on/off commands for channel A2 - accepts: A0=p-> [80065350], A1=p->controller packet [800653F8+pl.*0x68], A2=controller# -ADDIU SP,SP,FFA8 -SW S0,0020 (SP) -SW RA,0024 (SP) -ADDIU A3,R0,0080 -OR S0,A2,R0 ;S0=A2: controller# (channel) -SW A0,0004 (A1) ;A0->packet+4: p->??? -SW A2,0008 (A1) ;A2->packet+8: channel# -SW R0,0000 (A1) ;0 ->packet+0: -SB A3,0065 (A1) ;80->packet+65: device type -ADDIU V0,SP,0030 ;V0=SP+30: start of buffer -ADDIU V1,SP,0050 ;A1=SP+50: end of buffer -//7000CD64: fill buffer with 0x80's -ADDIU V0,V0,0001 ;V0++ buffer++ -SLTU AT,V0,V1 -BNE AT,R0,7000CD64 -SB A3,FFFF (V0) ;80->buffer -//7000CD74: -OR A1,S0,R0 ;A1=S0: channel# -ADDIU A2,R0,0400 ;A2=0x400: slot+0x8000 - device controller -ADDIU A3,SP,0030 ;A3=SP+30: p->data -SW R0,0010 (SP) ;SP+10=0: -JAL 70016100 ;sends data A3 to controller slot A1 at address A2 -SW A0,0058 (SP) ;A0->SP+58: [80065350] -ADDIU AT,R0,0002 -BNE V0,AT,7000CDB4 ;branch if no problem -OR V1,V0,R0 ;V1=V0: error return... -LW A0,0058 (SP) -OR A1,S0,R0 ;A1=S0: channel# -ADDIU A2,R0,0400 ;A2=0x400: device controller -ADDIU A3,SP,0030 ;A3=SP+30: p->data -JAL 70016100 ;sends data A3 to controller slot A1 at address A2 -SW R0,0010 (SP) -//7000CDB0: return if still invalid -OR V1,V0,R0 -BEQ V0,R0,7000CDC4 -LW A0,0058 (SP) -BEQ R0,R0,7000CE8C -OR V0,V1,R0 -//7000CDC4: -OR A1,S0,R0 ;A1=S0: channel# -ADDIU A2,R0,0400 ;A2=0x400: block# -JAL 700164B0 ;read data from channel A1 at block A2 into buffer A3 -ADDIU A3,SP,0030 ;A3=SP+30: p->data -BEQ V0,R0,7000CDE4 ;branch if no problem -LBU T6,004F (SP) ;T6=last byte of data -BEQ R0,R0,7000CE90 -LW RA,0024 (SP) -//7000CDE4: -ADDIU AT,R0,0080 -BEQ T6,AT,7000CDF8 ;branch if equals 0x80 (rumble paks always return 0x80) -LUI A0,8006 -BEQ R0,R0,7000CE8C ;return 0xB: not a rumble pak -ADDIU V0,R0,000B -//7000CDF8: -LUI V1,8006 -LUI A1,8006 -ADDIU A1,A1,57C0 ;A1=800657C0: end of stop.buffer -ADDIU V1,V1,57A0 ;V1=800657A0: start of stop.buffer -ADDIU A0,A0,57C0 ;A0=800657C0: start.buffer -ADDIU V0,R0,0001 -//7000CE10: fill rumble buffers -ADDIU V1,V1,0004 ;V1+=4 next word in stop.buffer -SB V0,0001 (A0) ;1->start.buffer -SB R0,FFFD (V1) ;0->stop.buffer -SB V0,0002 (A0) -SB R0,FFFE (V1) -SB V0,0003 (A0) -SB R0,FFFF (V1) -ADDIU A0,A0,0004 -SB V0,FFFC (A0) -BNE V1,A1,7000CE10 ;loop until buffers filled -SB R0,FFFC (V1) -//7000CE3C: -LUI T7,8006 -ADDIU T7,T7,56A0 -LUI A2,8006 -SLL V0,S0,0x6 ;V0=S0*0x40: player#->offset -ADDU A3,V0,T7 ;A3=800656A0+offset: -SW V0,002C (SP) ;1->SP+2C: -ADDIU A2,A2,57C0 ;A2=800657C0: start.buffer -OR A0,S0,R0 ;A0=S0: channel# -JAL 7000CBDC -ADDIU A1,R0,0600 ;A1=0x600: rumble activation block -LW V0,002C (SP) -LUI T8,8006 -ADDIU T8,T8,55A0 -LUI A2,8006 -ADDIU A2,A2,57A0 -OR A0,S0,R0 ;A0=S0: channel# -ADDIU A1,R0,0600 ;A1=0x600: block# - rumble activation block -JAL 7000CBDC ;A3=p->PIF write command to channel A0, block A1, using data A2 -ADDU A3,V0,T8 ;A3=V0+T8: 800655A0+0x40 channel offset: rumble off buffer -OR V0,R0,R0 -//7000CE8C: -LW RA,0024 (SP) -LW S0,0020 (SP) -ADDIU SP,SP,0058 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/System/Controllers/700147F4 - retrieve current controller slot status from PIF.txt b/notes/GE Documentation/Gameplay and Misc/System/Controllers/700147F4 - retrieve current controller slot status from PIF.txt deleted file mode 100644 index 8c89979..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Controllers/700147F4 - retrieve current controller slot status from PIF.txt +++ /dev/null @@ -1,76 +0,0 @@ -700147F4 153F4 retrieve current controller slot status from PIF - accepts: A0=, A1=channel# -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -SW A0,0038 (SP) ;SP+38= A0: -SW A1,003C (SP) ;SP+3C= A1: -SW R0,0034 (SP) ;SP+34= 0: error return: OK! -JAL 70015C40 ;generate PIFram command: request status for #channels at 80067CE1 -OR A0,R0,R0 ;A0=0 -LUI A1,8006 -ADDIU A1,A1,7D70 ;A1=80067D70: p->source -JAL 70015ED0 ;PIFram read/write request -ADDIU A0,R0,0001 ;A0=1: write -SW V0,0034 (SP) ;SP+34=V0: error return -LW A0,0038 (SP) -ADDIU A1,SP,0030 -JAL 7000DDD0 -ADDIU A2,R0,0001 -//70014834: read back response from PIFram -LUI A1,8006 -ADDIU A1,A1,7D70 ;A1=80067D70: p->target -JAL 70015ED0 ;PIFram read/write request -OR A0,R0,R0 ;A0=0: read -SW V0,0034 (SP) ;SP+34=V0: error return -LW A0,0038 (SP) -ADDIU A1,SP,0030 -JAL 7000DDD0 -ADDIU A2,R0,0001 -ADDIU A0,SP,002F ;A0=SP+2F: -JAL 70015D3C ;generates status list from ram PIFram output at A1 -ADDIU A1,SP,001C ;A1=SP+1C: p->target -//70014864: determine what's connected -LW T6,003C (SP) ;T6=SP+3C: channel# -SLL T7,T6,0x2 ;T7= T6 * 4: channel->offset -ADDU T8,SP,T7 ;T8= SP+T7: offset to channel status data -LBU T8,001E (T8) ;T8=status+2: slot -ANDI T9,T8,0001 -BEQ T9,R0,70014894 ;branch if "slot filled" not set -NOP -ANDI T0,T8,0002 -BEQ T0,R0,70014894 ;branch if "slot empty" not set -NOP -BEQ R0,R0,700148F0 ;return 2 if no slot response... -ADDIU V0,R0,0002 -//70014894: check error byte -LW T1,003C (SP) ;T1=SP+3C: channel# -ADDIU T3,SP,001C ;T3=SP+1C: p->copied status -SLL T2,T1,0x2 ;T2= T1 * 4: channel->offset -ADDU T4,T2,T3 ;T4=p->channel#'s status -LBU T5,0003 (T4) ;T5=status+3: error flags -BNE T5,R0,700148C0 ;branch if an error found -NOP -LBU T6,0002 (T4) ;T6=slot state -ANDI T7,T6,0001 -BNE T7,R0,700148C8 ;branch if slot filled -NOP -//700148C0: -BEQ R0,R0,700148F0 ;return 1 if slot empty or error found -ADDIU V0,R0,0001 -//700148C8: test for a bad CRC -LW T9,003C (SP) ;T9=SP+3C: channel# -SLL T8,T9,0x2 ;T8= T9 * 4: channel->offset -ADDU T0,SP,T8 ;T0= SP+T8: offset to channel status data -LBU T0,001E (T0) ;T0=slot state -ANDI T1,T0,0004 -BEQ T1,R0,700148EC ;branch if no address error found -NOP -BEQ R0,R0,700148F0 ;return 4 if bad address CRC -ADDIU V0,R0,0004 -//700148EC: normal return is SI error -LW V0,0034 (SP) ;V0=SP+34: error return -//700148F0: return -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/System/Controllers/7001EA1C - generate CRC16s for blocks 1-7 of mempak.txt b/notes/GE Documentation/Gameplay and Misc/System/Controllers/7001EA1C - generate CRC16s for blocks 1-7 of mempak.txt deleted file mode 100644 index 4291aed..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Controllers/7001EA1C - generate CRC16s for blocks 1-7 of mempak.txt +++ /dev/null @@ -1,30 +0,0 @@ -7001EA1C 1F61C generate CRC16s for 0x1C bytes of mempak data - accepts: A0=p->source, A1=p->(short) CRC, A2=p->(short) invert CRC -ADDIU SP,SP,FFF8 -SH R0,0006 (SP) ;0->SP+6: current short -SH R0,0000 (A2) ;0->A2+0: invert tally -LHU T6,0000 (A2) ;T6=A2+0: 0 -SH T6,0000 (A1) ;0->A1+0: tally -SW R0,0000 (SP) ;0->SP+0: count -//7001EA34: generate checksum -LW T7,0000 (SP) ;T7=SP+0: count -ADDU T8,A0,T7 ;T8=source+count -LHU T9,0000 (T8) ;T9=short f/ source -SH T9,0006 (SP) ;T9->SP+6: save current short from stream -LHU T0,0000 (A1) ;T0=A1+0: tally -ADDU T1,T0,T9 ;T1=tally+cur. -SH T1,0000 (A1) ;update tally -LHU T3,0006 (SP) ;T3=SP+6: current -LHU T2,0000 (A2) ;T2=A2+0: invert tally -NOR T4,T3,R0 ;T4=~current -ADDU T5,T2,T4 ;T5= invert+~current -SH T5,0000 (A2) ;update invert tally -LW T6,0000 (SP) ;T6=SP+0: count -ADDIU T7,T6,0002 ;T7=count+2 -SLTIU AT,T7,001C ;TRUE for first 0x1C bytes -BNEZ AT,7001EA34 ;loop for packet -SW T7,0000 (SP) ;update count -//7001EA78: return -OR V0,R0,R0 ;V0=0 return 0 -JR RA -ADDIU SP,SP,0008 diff --git a/notes/GE Documentation/Gameplay and Misc/System/Display/7F0D238C - allocate viewport buffer.txt b/notes/GE Documentation/Gameplay and Misc/System/Display/7F0D238C - allocate viewport buffer.txt deleted file mode 100644 index dd6f471..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Display/7F0D238C - allocate viewport buffer.txt +++ /dev/null @@ -1,61 +0,0 @@ -Fairly certain this is the camera. Used for FE and FF commands and directly impacts visible display. -Most likely use is to generate a player's viewport here then copy the result to the actual video buffer. - -7F0D2380 106EB0 remove viewport buffer -LUI AT,8005 -JR RA -SW R0,EB00 (AT) ;NULL->8004EB00: viewport.img - -7F0D238C 106EBC allocate viewport buffer -LUI T6,8003 -LW T6,6428 (T6) ;T6=80036428: resolution -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ T6,R0,7F0D23C0 ;branch if normal (lower) resolution -//7F0D23A0: -LUI V0,8009 -ADDIU T7,R0,01B8 -LUI AT,8009 -ADDIU V0,V0,E314 -SW T7,E310 (AT) ;1B8->8008E310: viewport.img.width -ADDIU T8,R0,014A -BEQ R0,R0,7F0D23FC -SW T8,0000 (V0) ;14A->8008E314: viewport.img.height -//7F0D23C0: -ADDIU T9,R0,0140 -LUI AT,8009 -JAL 7F09A464 ;V0= # players -SW T9,E310 (AT) ;140->8008E310: viewport.img.w -ADDIU AT,R0,0001 -BNE V0,AT,7F0D23EC ;branch if multi -//7F0D23D8: solo -LUI V0,8009 -ADDIU V0,V0,E314 -ADDIU T0,R0,00F0 -BEQ R0,R0,7F0D23FC -SW T0,0000 (V0) ;F0->8008E314: viewport.img.height (full) -//7F0D23EC: MP -LUI V0,8009 -ADDIU V0,V0,E314 -ADDIU T1,R0,0078 -SW T1,0000 (V0) ;78->8008E314: viewport.img.height (half) -//7F0D23FC: -LUI T2,8009 -LW T2,E310 (T2) ;T2=8008E310: viewport.img.w -LW T3,0000 (V0) ;T3=8008E314: viewport.img.h -ADDIU A1,R0,0004 ;A1= bank 4 -MULTU T2,T3 -MFLO A0 -SLL T4,A0,0x1 -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A0,T4,0040 ;A0= 40 + 2(8008E310 * 8008E314) -LW RA,0014 (SP) -LUI V1,8005 -ADDIU V1,V1,EB00 -ADDIU T6,V0,003F -ADDIU AT,R0,FFC0 -SW V0,0000 (V1) -AND T7,T6,AT ;align V0 to nearest 0x40 -SW T7,0000 (V1) ;V0->8004EB00: p->viewport.img -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Gameplay and Misc/System/Indy Development Features/Indy Management 7F0CFF30 - 7F0D1998.txt b/notes/GE Documentation/Gameplay and Misc/System/Indy Development Features/Indy Management 7F0CFF30 - 7F0D1998.txt deleted file mode 100644 index 2649e60..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Indy Development Features/Indy Management 7F0CFF30 - 7F0D1998.txt +++ /dev/null @@ -1,2034 +0,0 @@ -# Indy management -7F0CFF30 104A60 initializes Indy if not ready -LUI V1,8005 -ADDIU V1,V1,EAC8 -LW T6,0000 (V1) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFE8 -ADDIU V0,R0,0001 -BEQ V0,T6,7F0CFF54 ;return if Indy ready -SW RA,0014 (SP) -JAL 7F0CFF6C ;initializes Indy if ready -SW V0,0000 (V1) ;1->8004EAC8: set Indy ready -//7F0CFF50: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0CFF64 104A94 unconditional return -JR RA -NOP - -7F0CFF6C 104A9C initializes Indy if ready -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQL T6,R0,7F0CFF90 ;return if not ready -LW RA,0014 (SP) -JAL 7F0D0A3C ;post indy.res.cmd structure 1:0:2: initialize -NOP -//7F0CFF90: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0CFF9C 104ACC load resource named A0 from Indy to A1 - accepts: A0=p->string, A1=p->target -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -BEQ T6,R0,7F0CFFD0 ;return if Indy not ready -SW A1,002C (SP) -JAL 7F0D0BA4 ;post indy.res.cmd structure 1:7:2: send request for file named A0, size A1 -LUI A1,0040 ;A1=size 0x400000 -ADDIU A0,SP,0020 ;A0=SP+20: @response1 -ADDIU A1,SP,001C ;A1=SP+1C: @response2 -ADDIU A2,SP,0018 ;A2=SP+18: @size -JAL 7F0D17FC ;(A0,A1)= response, A3= p->data of size A2 from indy.res.cmd structure 1:8:2: recieve file A3, size A2 -LW A3,002C (SP) ;A3= A1 f/caller: p->target -//7F0CFFD0: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7F0CFFE0 104B10 send capture data A1 of size A2 named A0 - accepts: A0=p->string, A1=p->data, A2=size -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BEQ T6,R0,7F0D000C ;return if Indy not ready -SW A1,0024 (SP) -OR A1,A2,R0 ;A1=A2: size -JAL 7F0D0C68 ;post indy.res.cmd structure 1:9:2: send capture data A1, size A2 named A0 -LW A2,0024 (SP) ;A2= p->data -JAL 7F0D1864 ;A0= response from indy.res.cmd structure 1:A:2: recieve capture data sucess -ADDIU A0,SP,001C -//7F0D000C: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0D001C 104B4C load ramrom file named A0 from Indy to buffer A1, size A2 - accepts: A0=p->string, A1=p->target, A2=@filesize -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -BEQL T6,R0,7F0D0050 ;return if Indy not ready -LW RA,0014 (SP) -JAL 7F0D0D18 ;post indy.res.cmd structure 1:F:2: request ramrom file named A0 sent to buffer A1, size A2 -NOP -ADDIU A0,SP,0024 -ADDIU A1,SP,0020 -JAL 7F0D18AC ;(A0,A1,A2)= response from indy.res.cmd structure 1:10:2: sucess/failure to load file to A1, size A2 -ADDIU A2,SP,001C -//7F0D004C: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7F0D005C 104B8C V0=TRUE if file A0 at hardware A1 of size A2 successfully exported - accepts: A0=p->string, A1=hardware address, A2=size -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BEQ T6,R0,7F0D0088 ;return if Indy not ready -SW A1,0024 (SP) -OR A1,A2,R0 ;A1= A2: size -JAL 7F0D0DD0 ;post indy.res.cmd structure 1, D, 2: (game) prof send - filename A0 of size A1 at hardware address A2 -LW A2,0024 (SP) ;A2= A1 f/caller: hardware address -JAL 7F0D1908 ;A0= response from indy.res.cmd structure 1:E:2; V0=TRUE if file generated via 1:D:2 indy.res.cmd -ADDIU A0,SP,001C -//7F0D0088: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0D0098 104BC8 V0=TRUE if resource named A0 found on Indy and filesize set to A1 - accepts: A0=p->string, A1=@filesize -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BNE T6,R0,7F0D00B8 ;return 0 if Indy not ready -SW A1,0024 (SP) -BEQ R0,R0,7F0D00D0 -OR V0,R0,R0 -//7F0D00B8: -JAL 7F0D0B0C ;post indy.res.cmd structure 1:5:2 -NOP -ADDIU A0,SP,001C -JAL 7F0D17AC ; A0=TRUE and A1=filesize if file requested by 1:5:2 indy.res.cmd found -LW A1,0024 (SP) -LW V0,001C (SP) ;V0= discovery value -//7F0D00D0: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0D00E0 104C10 V0= response from command string A0 sent to host PC via Indy - accepts: A0=p->string -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BNE T6,R0,7F0D0100 ;return FALSE if Indy not ready -NOP -BEQ R0,R0,7F0D0114 -OR V0,R0,R0 -//7F0D0100: send commands and verify -JAL 7F0D0E74 ;post indy.res.cmd structure 1:B:2 -NOP -JAL 7F0D1950 ;A0= response from indy.res.cmd structure 1:C:2 -ADDIU A0,SP,001C ;A0=SP+1C: @response -LW V0,001C (SP) ;V0= return response -//7F0D0114: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0D0124 104C54 removed: V0= -1 -LUI T6,8005 -LW T6,EAC8 (T6) ;T6=8004EAC8: TRUE if Indy ready -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQL T6,R0,7F0D0148 ;return if Indy not ready -LW RA,0014 (SP) -JAL 7000CEB0 ;removed: V0= -1 -NOP -//7F0D0144: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0D0154 104C84 send close port command to PC - sends unix commands to console: wait 5 seconds, then kill all instances of ghost and gload - sleep: delay for a specified amount of time, seconds if no type given - killall: kill processes by name - ghost: game host utility - gload: graphical load monitor -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8006 -JAL 7F0D00E0 ;V0= response from command string A0 sent to host PC via Indy -ADDIU A0,A0,BFC0 ;A0=8005BFC0: "sleep 5; /etc/killall ghost gload" -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -# Indy: resource entry management -Indy resource entries: -0x0 4 resourceID [9ABF1623] -0x4 4 type -0x8 4 size -0xC 4 read size of following entry -0x10 4 write size of following entry -0x14 var. command-specific data - -7F0D0180 104CB0 removed: read A1 bytes f/indy.res to A0 - accepts: A0=p->buffer, A1=size of buffer -ADDIU SP,SP,FFE8 -LUI V1,0001 -SW RA,0014 (SP) -ORI V1,V1,86A0 ;V1=0x186A0 -OR V0,R0,R0 -//7F0D0194: sit-and-spin 0x21A8 times -ADDIU V0,V0,0004 -BNEL V0,V1,7F0D0198 -ADDIU V0,V0,0004 -//7F0D01A0: -JAL 7000CEC0 ;unconditional return -NOP -LUI V1,0001 -ORI V1,V1,86A0 ;V1=0x186A0 -OR V0,R0,R0 -//7F0D01B4: sit-and-spin 0x21A8 times -ADDIU V0,V0,0004 -BNEL V0,V1,7F0D01B8 -ADDIU V0,V0,0004 -//7F0D01C0: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0D01D0 104D00 removed: write A1 bytes to indy.res from A0 - accepts: A0=p->buffer, A1=size of buffer -ADDIU SP,SP,FFE8 -LUI V1,0001 -SW RA,0014 (SP) -ORI V1,V1,86A0 ;V1=0x186A0 -OR V0,R0,R0 -//7F0D01E4: sit-and-spin 0x61A8 times -ADDIU V0,V0,0004 -BNEL V0,V1,7F0D01E8 -ADDIU V0,V0,0004 -//7F0D01F0: -JAL 7000CEB8 ;unconditional return -NOP -LUI V1,0001 -ORI V1,V1,86A0 ;V1=0x186A0 -OR V0,R0,R0 -//7F0D0204: sit-and-spin 0x261A8 times -ADDIU V0,V0,0004 -BNEL V0,V1,7F0D0208 -ADDIU V0,V0,0004 -//7F0D0210: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0D0220 104D50 post Indy resource command A0 of size A1 - accepts: A0=p->struct, A1=size -ADDIU SP,SP,FAC0 -ADDIU V0,SP,0040 ;V0=SP+40: p->buffer -ANDI T7,A0,0007 -SW RA,0014 (SP) -SW A0,0540 (SP) -OR A2,A1,R0 ;A2= A1 f/caller: struct size -OR V1,V0,R0 ;V1= SP+40: p->buffer -BEQ T7,R0,7F0D02EC ;branch if DW aligned -OR A3,V0,R0 ;A3= SP+40: p->buffer -SLTIU AT,A1,0501 -//7F0D0248: -BNE AT,R0,7F0D0258 ;return FALSE if over 500 bytes -ANDI T8,V0,0007 -BEQ R0,R0,7F0D0348 -OR V0,R0,R0 -//7F0D0258: -BEQ T8,R0,7F0D0268 ;skip if buffer DW aligned -LUI T0,8005 -ADDIU A3,SP,0044 ;A3= SP+44: p->buffer -OR V1,A3,R0 ;V1= SP+44: p->buffer -//7F0D0268: -ADDU A0,V1,A2 ;A0=buffer + size: p->buffer.end -SLTU AT,V1,A0 -BEQ AT,R0,7F0D0290 ;skip if nonexistant buffer -LW V0,0540 (SP) ;V0= A0 f/caller: p->struct -//7F0D0278: copy struct to buffer -LBU T9,0000 (V0) -ADDIU V1,V1,0001 -SLTU AT,V1,A0 -ADDIU V0,V0,0001 -BNE AT,R0,7F0D0278 -SB T9,FFFF (V1) -//7F0D0290: -LW T0,EAC4 (T0) ;T0=8004EAC4: Indy Status -ADDIU A1,A2,0003 -ADDIU AT,R0,FFFC -ANDI T1,T0,0020 -BEQ T1,R0,7F0D02D8 ;skip if flag 0x20 set: -AND T2,A1,AT ;T2= size to nearest word -BEQ A2,R0,7F0D02D8 ;skip if no data -OR V0,R0,R0 -ANDI A0,A2,0003 -BEQ A0,R0,7F0D02CC ;skip if data word aligned -OR V1,A0,R0 -//7F0D02BC: loop for stray bytes -ADDIU V0,V0,0001 -BNEL V1,V0,7F0D02C0 -ADDIU V0,V0,0001 -BEQ V0,A2,7F0D02D8 -//7F0D02CC: loop for remaining filesize -ADDIU V0,V0,0004 -BNEL V0,A2,7F0D02D0 -ADDIU V0,V0,0004 -//7F0D02D8: write to Indy -OR A0,A3,R0 ;A0=p->buffer -JAL 7F0D01D0 ;removed: write A1 bytes to indy.res from A0 -OR A1,T2,R0 ;A1=T2: size -BEQ R0,R0,7F0D0348 ;return TRUE -ADDIU V0,R0,0001 -//7F0D02EC: -LUI T3,8005 -LW T3,EAC4 (T3) ;T0=8004EAC4: Indy Status -ADDIU A1,A2,0003 -ADDIU AT,R0,FFFC -ANDI T4,T3,0020 -BEQ T4,R0,7F0D0338 ;skip if flag 0x20 set: -AND T5,A1,AT ;T5= size to nearest word -BEQ A2,R0,7F0D0338 ;skip if no data -OR V0,R0,R0 -ANDI A0,A2,0003 -BEQ A0,R0,7F0D032C ;skip if data word aligned -OR V1,A0,R0 -//7F0D031C: loop for stray bytes -ADDIU V0,V0,0001 -BNEL V1,V0,7F0D0320 -ADDIU V0,V0,0001 -BEQ V0,A2,7F0D0338 -//7F0D032C: loop for remaining filesize -ADDIU V0,V0,0004 -BNEL V0,A2,7F0D0330 -ADDIU V0,V0,0004 -//7F0D0338: write to Indy -LW A0,0540 (SP) ;A0 f/caller: p->struct -JAL 7F0D01D0 ;removed: write A1 bytes to indy.res from A0 -OR A1,T5,R0 -ADDIU V0,R0,0001 ;return TRUE -//7F0D0348: return -LW RA,0014 (SP) -ADDIU SP,SP,0540 -JR RA -NOP - -7F0D0358 104D88 post two Indy resource commands A0 and A2 of sizes A1 and A3, respectively - accepts: A0=p->indy.res 1, A1=size of indy.res 1, A2=indy.res 2, A3=size of indy.res 2 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A2,0020 (SP) -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -SW A3,0024 (SP) -LW A0,0020 (SP) ;A0= A2 f/caller: p->struct 2 -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -LW A1,0024 (SP) ;A1= A3 f/caller: size of struct 2 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D038C 104DBC post type 1 indy.res.cmd: size of next command A0,A1 - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0001 -ADDIU T8,R0,0014 -SW A0,0028 (SP) ;struct+C= A0 f/caller: -SW A1,002C (SP) ;struct+10=A1 f/caller: -SW T6,001C (SP) ;struct+0= resourceID -SW T7,0020 (SP) ;struct+4= type 1 -SW T8,0024 (SP) ;struct+8= 14 bytes -ADDIU A1,R0,0014 ;A1=14 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,001C ;A0=SP+1C: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D03D4 104E04 post type 2 indy.res.cmd: commands ready to process - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0002 -ADDIU T8,R0,0014 -SW A0,0028 (SP) ;struct+C= -SW A1,002C (SP) ;struct+10= -SW T6,001C (SP) ;struct+0= resourceID -SW T7,0020 (SP) ;struct+4= type 2 -SW T8,0024 (SP) ;struct+8= size: 14 bytes -ADDIU A1,R0,0014 ;A1= 14 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,001C ;A0=SP+1C: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D041C 104E4C post type 0 indy.res.cmd: initialize - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0014 -SW A0,0028 (SP) ;struct+C= -SW A1,002C (SP) ;struct+10= -SW T6,001C (SP) ;struct+0= resourceID -SW R0,0020 (SP) ;struct+4= type 0 -SW T7,0024 (SP) ;struct+8= size: 14 bytes -ADDIU A1,R0,0014 ;A1= 14 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,001C ;A0=SP+1C: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D0460 104E90 post type 3 indy.res.cmd: - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string (100 bytes) -ADDIU SP,SP,FED0 -SW A1,0134 (SP) -LUI T6,9ABF -SW A1,002C (SP) ;struct+10= -SW RA,0014 (SP) -SW A2,0138 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0003 -ADDIU T8,R0,0114 -SW A0,0028 (SP) ;struct+C= -OR A1,A2,R0 ;A1=A2: p->string -SW T6,001C (SP) ;struct+0= resourceID -SW T7,0020 (SP) ;struct+4= type 3 -SW T8,0024 (SP) ;struct+8= size: 114 bytes -ADDIU A2,R0,0100 ;A2= 100 bytes -JAL 7000A7A0 ;strncpy(A0,A1,A2) -ADDIU A0,SP,0030 ;struct+14=target for string -SB R0,012F (SP) ;NULL terminate string -ADDIU A0,SP,001C ;A0=SP+1C: p->struct -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A1,R0,0114 ;A1= 114 bytes -LW RA,0014 (SP) -ADDIU SP,SP,0130 -JR RA -NOP - -7F0D04C4 104EF4 post type 4 indy.res.cmd: data recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -SW A1,0034 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0004 -ADDIU T8,R0,0018 -SW A0,0024 (SP) ;struct+C= -SW A1,0028 (SP) ;struct+10= -SW T6,0018 (SP) ;struct+0= resourceID -SW T7,001C (SP) ;struct+4= type 4 -SW T8,0020 (SP) ;struct+8= size: 18 bytes -SW A2,002C (SP) ;struct+14= -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,0018 ;A0=SP+18: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D0514 105044 post type 5 indy.res.cmd: printf send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string (100 bytes) -ADDIU SP,SP,FED0 -SW A1,0134 (SP) -LUI T6,9ABF -SW A1,002C (SP) -SW RA,0014 (SP) -SW A2,0138 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0005 -ADDIU T8,R0,0114 -SW A0,0028 (SP) -OR A1,A2,R0 ;A1=A2: p->string -SW T6,001C (SP) ;struct+0= resourceID -SW T7,0020 (SP) -SW T8,0024 (SP) -ADDIU A2,R0,0100 ;A2= 100 bytes -JAL 7000A7A0 ;strncpy(A0,A1,A2) -ADDIU A0,SP,0030 ;struct+14: target for string -SB R0,012F (SP) ;NULL terminate string -ADDIU A0,SP,001C -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A1,R0,0114 -LW RA,0014 (SP) -ADDIU SP,SP,0130 -JR RA -NOP - -7F0D0578 1050A8 post type 6 indy.res.cmd: printf recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= -ADDIU SP,SP,FFC8 -LUI T6,9ABF -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0006 -ADDIU T8,R0,001C -SW A0,0028 (SP) -SW A1,002C (SP) -SW T6,001C (SP) -SW T7,0020 (SP) -SW T8,0024 (SP) -SW A2,0030 (SP) -SW A3,0034 (SP) -ADDIU A1,R0,001C -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,001C -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7F0D05D0 105100 post type 7 indy.res.cmd: log send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3= -ADDIU SP,SP,FED0 -SW A1,0134 (SP) -LUI T6,9ABF -SW A1,0028 (SP) -SW RA,0014 (SP) -SW A0,0130 (SP) -SW A2,0138 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0007 -ADDIU T8,R0,0118 -SW A0,0024 (SP) -OR A1,A2,R0 ;A1=A2: p->string -SW A3,013C (SP) -SW T6,0018 (SP) -SW T7,001C (SP) -SW T8,0020 (SP) -ADDIU A2,R0,0100 ;A2= 100 bytes -JAL 7000A7A0 ;strncpy(A0,A1,A2) -ADDIU A0,SP,002C ;struct+14: target for string -LW T1,013C (SP) -SB R0,012B (SP) ;NULL terminate string -ADDIU A0,SP,0018 -ADDIU A1,R0,0118 ;A1= 118 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -SW T1,012C (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0130 -JR RA -NOP - -7F0D0644 105174 post type 8 indy.res.cmd: log recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=, A3=, SP+10=size of struct 2, SP+14=p->struct 2 -ADDIU SP,SP,FFC8 -SW A3,0044 (SP) -LW A3,0048 (SP) ;A3= SP+10 f/caller: size of struct 2 -ADDIU AT,R0,FFFC -LW T4,0044 (SP) -ADDIU T8,A3,0003 -LUI T6,9ABF -AND T9,T8,AT ;T9= A3 to nearest word: size of struct 2 -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -SW A2,0040 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0008 -ADDIU T0,T9,0020 -SW A0,0024 (SP) ;struct1+C= -SW A1,0028 (SP) ;struct1+10= -SW A2,002C (SP) ;struct1+14= -SW T6,0018 (SP) ;struct1+0= resourceID -SW T7,001C (SP) ;struct1+4= type 8 -SW T0,0020 (SP) ;struct1+8= 20 bytes + size of struct2 -LW A2,004C (SP) ;A2= SP+14 f/caller: p->struct 2 -ADDIU A1,R0,0020 ;A1= 20 bytes (size of struct 1) -ADDIU A0,SP,0018 ;A0=SP+18: p->struct 1 -SW A3,0034 (SP) ;struct1+1C=SP+10 f/caller -JAL 7F0D0358 ;post two Indy resource commands A0 and A2 of sizes A1 and A3, respectively -SW T4,0030 (SP) ;struct1+18=A3 f/caller -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7F0D06C0 1051F0 post type 9 indy.res.cmd: app. command ready - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3=size of struct 2, SP+10=p->struct 2 -ADDIU SP,SP,FED0 -ADDIU T9,A3,0003 -ADDIU AT,R0,FFFC -SW A1,0134 (SP) -LUI T6,9ABF -AND T0,T9,AT ;T0=A3 to nearest word: size of struct 2 -SW A1,002C (SP) ;struct+10= -SW RA,0014 (SP) -SW A0,0130 (SP) -SW A2,0138 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0009 -ADDIU T1,T0,0114 -SW A0,0028 (SP) ;struct+C= -OR A1,A2,R0 ;A1=A2: p->string -SW A3,013C (SP) -SW T6,001C (SP) ;struct1+0= resourceID -SW T7,0020 (SP) ;struct1+4= type 9 -SW T1,0024 (SP) ;struct1+8= size: 114 bytes -ADDIU A2,R0,0100 ;A2= 100 bytes -JAL 7000A7A0 ;strncpy(A0,A1,A2) -ADDIU A0,SP,0030 ;struct+14= target for string -SB R0,012F (SP) ;NULL terminate string -ADDIU A0,SP,001C ;A0=SP+1C: p->struct 1 -ADDIU A1,R0,0114 ;A1= 114 bytes (size of struct 1) -LW A2,0140 (SP) ;A2= SP+10 f/caller: p->struct 2 -JAL 7F0D0358 ;post two Indy resource commands A0 and A2 of sizes A1 and A3, respectively -LW A3,013C (SP) ;A3= A3 f/caller: size of struct 2 -LW RA,0014 (SP) -ADDIU SP,SP,0130 -JR RA -NOP - -7F0D0740 105270 post type A indy.res.cmd: app. command received - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -SW A1,0034 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,000A -ADDIU T8,R0,0018 -SW A0,0024 (SP) ;struct+C= -SW A1,0028 (SP) ;struct+10= -SW T6,0018 (SP) ;struct+0= resourceID -SW T7,001C (SP) ;struct+4= type A -SW T8,0020 (SP) ;struct+8= size: 18 bytes -SW A2,002C (SP) ;struct+14= -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,0018 ;A0=SP+18: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D0790 1052C0 post type F indy.res.cmd: fault send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3=p->target, SP+10=@filesize -ADDIU SP,SP,FEC8 -SW A1,013C (SP) -LUI T6,9ABF -SW A1,002C (SP) -SW RA,0014 (SP) -SW A0,0138 (SP) -SW A2,0140 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,000F -ADDIU T8,R0,011C -SW A0,0028 (SP) ;struct+C= -OR A1,A2,R0 ;A1=A2: p->string -SW A3,0144 (SP) -SW T6,001C (SP) ;struct+0= resourceID -SW T7,0020 (SP) ;struct+4= type F -SW T8,0024 (SP) ;struct+8= size: 11C bytes -ADDIU A2,R0,0100 ;A2= 100 bytes -JAL 7000A7A0 ;strncpy(A0,A1,A2) -ADDIU A0,SP,0030 ;struct+14= target for string -LW T1,0144 (SP) -LW T2,0148 (SP) -SB R0,012F (SP) ;NULL terminate string -ADDIU A0,SP,001C ;A0=SP+1C: p->struct -ADDIU A1,R0,011C ;A1= 11C bytes -SW T1,0130 (SP) ;struct+114= A3 f/caller: -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -SW T2,0134 (SP) ;struct+118= SP+10 f/caller: -LW RA,0014 (SP) -ADDIU SP,SP,0138 -JR RA -NOP - -7F0D080C 10533C post type 10 indy.res.cmd: fault acknowledged by host - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=, A3=, SP+10= -ADDIU SP,SP,FFC8 -LW T1,0048 (SP) -LUI T6,9ABF -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,0010 -ADDIU T8,R0,0020 -SW A0,0024 (SP) ;struct+C= -SW A1,0028 (SP) ;struct+10= -SW T6,0018 (SP) ;struct+0= resourceID -SW T7,001C (SP) ;struct+4= type 10 -SW T8,0020 (SP) ;struct+8= size: 20 bytes -SW A2,002C (SP) ;struct+14= -SW A3,0030 (SP) ;struct+18= -ADDIU A1,R0,0020 ;A1= 20 bytes -ADDIU A0,SP,0018 ;A0=SP+18: p->struct -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -SW T1,0034 (SP) ;struct+1C= SP+10 f/caller: -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7F0D086C 10539C post type D indy.res.cmd: prof send - filename A2 of size A3 at hardware address SP+10 - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3=size, SP+10=hardware address -ADDIU SP,SP,FEC8 -SW A1,013C (SP) -LUI T6,9ABF -SW A1,002C (SP) ;struct+10= -SW RA,0014 (SP) -SW A0,0138 (SP) -SW A2,0140 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,000D -ADDIU T8,R0,011C -SW A0,0028 (SP) ;struct+C= -OR A1,A2,R0 ;A1=A2: p->string -SW A3,0144 (SP) -SW T6,001C (SP) ;struct+0= resourceID -SW T7,0020 (SP) ;struct+4= type D -SW T8,0024 (SP) ;struct+8= size: 11C bytes -ADDIU A2,R0,0100 ;A2= 100 bytes -JAL 7000A7A0 ;strncpy(A0,A1,A2) -ADDIU A0,SP,0030 ;struct+14= target for string -LW T1,0144 (SP) -LW T2,0148 (SP) -SB R0,012F (SP) ;NULL terminate string -ADDIU A0,SP,001C ;A0=SP+1C: p->struct -ADDIU A1,R0,011C ;A1= 11C bytes -SW T1,0130 (SP) ;struct+114= A3 f/caller: -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -SW T2,0134 (SP) ;struct+118= SP+10 f/caller: -LW RA,0014 (SP) -ADDIU SP,SP,0138 -JR RA -NOP - -7F0D08E8 105418 post type E indy.res.cmd: prof recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -SW A1,0034 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,000E -ADDIU T8,R0,0018 -SW A0,0024 (SP) ;struct+C= -SW A1,0028 (SP) ;struct+10= -SW T6,0018 (SP) ;struct+0= resourceID -SW T7,001C (SP) ;struct+4= type E -SW T8,0020 (SP) ;struct+8= size: 18 bytes -SW A2,002C (SP) ;struct+14= -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,0018 ;A0=SP+18: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D0938 105468 post type B indy.res.cmd: host prof request - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string -ADDIU SP,SP,FBD0 -SW A1,0434 (SP) -LUI T6,9ABF -SW A1,002C (SP) ;struct+10= -SW RA,0014 (SP) -SW A2,0438 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,000B -ADDIU T8,R0,0414 -SW A0,0028 (SP) ;struct+C= -OR A1,A2,R0 ;A1=A2: p->string -SW T6,001C (SP) ;struct+0= resourceID -SW T7,0020 (SP) ;struct+4= type B -SW T8,0024 (SP) ;struct+8= size: 414 bytes -ADDIU A2,R0,0400 ;A2= 400 bytes -JAL 7000A7A0 ;strncpy(A0,A1,A2) -ADDIU A0,SP,0030 ;struct+14= target for string -SB R0,042F (SP) ;NULL terminate string -ADDIU A0,SP,001C ;A0=SP+1C: p->struct -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A1,R0,0414 ;A1= 414 bytes -LW RA,0014 (SP) -ADDIU SP,SP,0430 -JR RA -NOP - -7F0D099C 1054CC post type C indy.res.cmd: prof send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -SW A1,0034 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,000C -ADDIU T8,R0,0018 -SW A0,0024 (SP) ;struct+C= -SW A1,0028 (SP) ;struct+10= -SW T6,0018 (SP) ;struct+0= resourceID -SW T7,001C (SP) ;struct+4= type C -SW T8,0020 (SP) ;struct+8= size: 18 bytes -SW A2,002C (SP) ;struct+14= -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,0018 ;A0=SP+18: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D09EC 10551C post type A indy.res.cmd: app. data recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= -ADDIU SP,SP,FFD0 -LUI T6,9ABF -SW RA,0014 (SP) -SW A1,0034 (SP) -ORI T6,T6,1623 ;T6=9ABF1623: resourceID -ADDIU T7,R0,000A -ADDIU T8,R0,0018 -SW A0,0024 (SP) ;struct+C= -SW A1,0028 (SP) ;struct+10= -SW T6,0018 (SP) ;struct+0= resourceID -SW T7,001C (SP) ;struct+4= type A -SW T8,0020 (SP) ;struct+8= size: 18 bytes -SW A2,002C (SP) ;struct+14= -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0220 ;post Indy resource command A0 of size A1 -ADDIU A0,SP,0018 ;A0=SP+18: p->struct -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D0A3C 10556C post indy.res.cmd structure 1, 0, 2: initialize -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU A0,R0,0014 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0014 -ADDIU A0,R0,0014 -JAL 7F0D041C ;post type 0 indy.res.cmd -ADDIU A1,R0,0014 -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0A7C 1055AC post indy.res.cmd structure 1, 3, 2: (game) data send - accepts: A0=p->string -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0114 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0114 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D0460 ;post type 3 indy.res.cmd -LW A2,0018 (SP) ;A2= A0 f/caller: p->string -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0AC4 1055F4 post indy.res.cmd structure 1, 4, 2: (debug) data rec. - accepts: A0= -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D04C4 ;post type 4 indy.res.cmd -LW A2,0018 (SP) -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0B0C 10563C post indy.res.cmd structure 1:5:2: (game) printf send - accepts: A0=p->string -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0114 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0114 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D0514 ;post type 5 indy.res.cmd -LW A2,0018 (SP) ;A2= A0 f/caller: p->string -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0B54 105684 post indy.res.cmd structure 1, 6, 2: (debug) printf rec. - accepts: A0=, A1= -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -ADDIU A1,R0,001C -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A0,R0,001C -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0018 (SP) -JAL 7F0D0578 ;post type 6 indy.res.cmd -LW A3,001C (SP) -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0BA4 1056D4 post indy.res.cmd structure 1:7:2: send request for file named A0, size A1 - accepts: A0=p->string, A1=size -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -ADDIU A1,R0,0118 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A0,R0,0118 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0018 (SP) ;A2= A0 f/caller: p->string -JAL 7F0D05D0 ;post type 7 indy.res.cmd -LW A3,001C (SP) ;A3= A1 f/caller: size -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0BF4 105724 post indy.res.cmd structure 1, 8, 2: - accepts: A0=, A1=, A2=size of struct2, A3=p->struct2 -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -ADDIU A0,A2,0003 -ADDIU AT,R0,FFFC -SW RA,001C (SP) -SW A1,0024 (SP) -AND T6,A0,AT -SW A2,0028 (SP) -SW A3,002C (SP) -ADDIU A0,T6,0020 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0020 -LW T7,0028 (SP) -LW T8,002C (SP) -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0020 (SP) -LW A3,0024 (SP) -SW T7,0010 (SP) ;SP+10= A2 f/caller: size of struct2 -JAL 7F0D0644 ;post type 8 indy.res.cmd -SW T8,0014 (SP) ;SP+14= A3 f/caller: p->struct2 -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0C68 105798 post indy.res.cmd structure 1:9:2: send capture data A1, size A2 named A0 - accepts: A0=p->string, A1=size of data, A2=p->data -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -ADDIU A0,A1,0003 -ADDIU AT,R0,FFFC -SW RA,001C (SP) -SW A1,0024 (SP) -AND T6,A0,AT -SW A2,0028 (SP) -ADDIU A0,T6,0114 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0114 -LW T7,0028 (SP) -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0020 (SP) ;A2= A0 f/caller: p->string -LW A3,0024 (SP) ;A3= A1 f/caller: size of data -JAL 7F0D06C0 ;post type 9 indy.res.cmd -SW T7,0010 (SP) ;SP+10= A2 f/caller: p->data -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0CD0 105800 post indy.res.cmd structure 1:A:2: recieve capture data success - accepts: A0=@success -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D0740 ;post type A indy.res.cmd -LW A2,0018 (SP) ;A2= A0 f/caller: -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0D18 105848 post indy.res.cmd structure 1:F:2: - accepts: A0=p->string, A1=p->target, A2=@filesize -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -ADDIU A1,R0,011C -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A0,R0,011C -LW T6,0024 (SP) -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0020 (SP) ;A2= A0 f/caller: p->string -LW A3,0028 (SP) ;A3= A1 f/caller: p->target -JAL 7F0D0790 ;post type F indy.res.cmd -SW T6,0010 (SP) ;SP+10= A2 f/caller: @filesize -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0D74 1058A4 post indy.res.cmd structure 1, 10, 2: - accepts: A0=, A1=, A2= -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -ADDIU A1,R0,0020 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A0,R0,0020 -LW T6,0028 (SP) -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0020 (SP) ;A2= A0 f/caller: -LW A3,0024 (SP) ;A3= A1 f/caller: -JAL 7F0D080C ;post type 10 indy.res.cmd -SW T6,0010 (SP) ;SP+10= A2 f/caller: -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0DD0 105900 post indy.res.cmd structure 1, D, 2: (game) prof send - filename A0 of size A1 at hardware address A2 - accepts: A0=p->string, A1=size, A2=hardware address -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -ADDIU A1,R0,011C -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A0,R0,011C -LW T6,0024 (SP) -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0020 (SP) ;A2= A0 f/caller: p->string -LW A3,0028 (SP) ;A3= A1 f/caller: size -JAL 7F0D086C ;post type D indy.res.cmd -SW T6,0010 (SP) ;SP+10= A2 f/caller: hardware address -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0E2C 10595C post indy.res.cmd structure 1:E:2: (host) prof rec. - accepts: A0= -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D08E8 ;post type E indy.res.cmd -LW A2,0018 (SP) ;A2= A0 f/caller: -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0E74 1059A4 post indy.res.cmd structure 1:B:2: - accepts: A0=p->string -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0414 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0414 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D0938 ;post type B indy.res.cmd -LW A2,0018 (SP) ;A2= A0 f/caller: p->command string -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0EBC 1059EC post indy.res.cmd structure 1:C:2: - accepts: A0= -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D099C ;post type C indy.res.cmd -LW A2,0018 (SP) ;A2= A0 f/caller: -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0F04 105A34 post indy.res.cmd structure 1:A:2: - accepts: A0= -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D038C ;post type 1 indy.res.cmd -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D09EC ;post type A indy.res.cmd -LW A2,0018 (SP) -OR A0,R0,R0 -JAL 7F0D03D4 ;post type 2 indy.res.cmd -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D0F4C 105A7C read Indy resource command of size A1 to A0 - accepts: A0=p->buffer, A1=size of buffer -ADDIU SP,SP,FBC0 -ADDIU V0,SP,0040 ;V0=SP+40: p->buffer -ANDI T7,A0,0007 -SW RA,0014 (SP) -SW A0,0440 (SP) -OR A2,A1,R0 -OR V1,V0,R0 ;V1=V0: p->buffer -BEQ T7,R0,7F0D1030 ;branch if buffer DW aligned -OR A3,V0,R0 ;A3=V0: p->buffer -SLTIU AT,A1,0401 -BNE AT,R0,7F0D0F84 ;return FALSE if over 0x400 bytes -ANDI T8,V0,0007 -BEQ R0,R0,7F0D1098 -OR V0,R0,R0 -//7F0D0F84: DW-align buffer -BEQ T8,R0,7F0D0F94 ;skip if buffer DW aligned -ADDIU A1,A2,0003 -ADDIU V1,SP,0044 ;V1=SP+44: p->buffer -OR A3,V1,R0 ;A3=SP+44: p->buffer -//7F0D0F94: -ADDIU AT,R0,FFFC -AND T9,A1,AT -OR A1,T9,R0 ;A1=size word aligned -OR A0,A3,R0 ;A0=A3: p->buffer -SW V1,003C (SP) -JAL 7F0D0180 ;removed: read A1 bytes f/indy.res to A0 -SW A2,0444 (SP) -LW V1,003C (SP) ;V1=p->buffer -LW A2,0444 (SP) ;A2 f/caller -LW V0,0440 (SP) ;V0=A0: p->target -LUI T1,8005 -ADDU A0,V1,A2 ;A0= buffer+offset: data.end -SLTU AT,V1,A0 -BEQ AT,R0,7F0D0FE8 ;skip if nothing to copy -NOP -//7F0D0FD0: copy A2 bytes from buffer to output -LBU T0,0000 (V1) -ADDIU V1,V1,0001 -SLTU AT,V1,A0 -ADDIU V0,V0,0001 -BNE AT,R0,7F0D0FD0 -SB T0,FFFF (V0) -//7F0D0FE8: -LW T1,EAC4 (T1) ;T1=8004EAC4: Indy Status -ANDI T2,T1,0010 -BEQ T2,R0,7F0D1028 ;skip if 0x10 flag not set -NOP -BEQ A2,R0,7F0D1028 ;skip if no data -OR V0,R0,R0 -ANDI A0,A2,0003 -BEQ A0,R0,7F0D101C ;skip if data word aligned -OR V1,A0,R0 -//7F0D100C: loop for stray bytes -ADDIU V0,V0,0001 -BNEL V1,V0,7F0D1010 -ADDIU V0,V0,0001 -BEQ V0,A2,7F0D1028 -//7F0D101C: loop for remaining filesize -ADDIU V0,V0,0004 -BNEL V0,A2,7F0D1020 -ADDIU V0,V0,0004 -//7F0D1028: return TRUE -BEQ R0,R0,7F0D1098 -ADDIU V0,R0,0001 -//7F0D1030: -ADDIU A1,A2,0003 -ADDIU AT,R0,FFFC -AND T3,A1,AT -OR A1,T3,R0 ;A1=A2 to nearest word -LW A0,0440 (SP) -JAL 7F0D0180 ;removed: read A1 bytes f/indy.res to A0 -SW A2,0444 (SP) -LUI T4,8005 -LW T4,EAC4 (T4) ;T4=8004EAC4: Indy Status -LW A2,0444 (SP) -ANDI T5,T4,0010 -BEQL T5,R0,7F0D1098 ;return TRUE if 0x10 flag not set -ADDIU V0,R0,0001 -BEQ A2,R0,7F0D1094 ;skip if no data -OR V0,R0,R0 -ANDI A0,A2,0003 -BEQ A0,R0,7F0D1088 ;skip if data word aligned -OR V1,A0,R0 -//7F0D1078: loop for stray bytes -ADDIU V0,V0,0001 -BNEL V1,V0,7F0D107C -ADDIU V0,V0,0001 -BEQ V0,A2,7F0D1094 -//7F0D1088: loop for remaining filesize -ADDIU V0,V0,0004 -BNEL V0,A2,7F0D108C -ADDIU V0,V0,0004 -//7F0D1094: return TRUE -ADDIU V0,R0,0001 -//7F0D1098: return -LW RA,0014 (SP) -ADDIU SP,SP,0440 -JR RA -NOP - -7F0D10A8 105BD8 read two Indy resource commands A0 and A2 of sizes A1 and A3, respectively - accepts: A0=p->buffer1, A1=size of buffer 1, A2=buffer2, A3=size of buffer 2 -ADDIU SP,SP,FFE8 -SW A1,001C (SP) -ADDIU A1,A1,0003 -ADDIU AT,R0,FFFC -SW RA,0014 (SP) -AND T6,A1,AT -SW A2,0020 (SP) -SW A3,0024 (SP) -JAL 7F0D0180 ;removed: read A1 bytes f/indy.res to A0 -OR A1,T6,R0 ;A1 to nearest word -//7F0D10D0: load second file -LW A1,0024 (SP) -ADDIU AT,R0,FFFC -LW A0,0020 (SP) ;A0= A2 f/caller -ADDIU A1,A1,0003 -AND T7,A1,AT -JAL 7F0D0180 ;removed: read A1 bytes f/indy.res to A0 -OR A1,T7,R0 ;A1= A3 f/caller to nearest word -//7F0D10EC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D1100 105C30 V0= TRUE if current indy.res.cmd type 1 with expected sizes (A0,A1) - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -ADDIU A1,R0,0014 ;A1=14 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,001C ;A0=SP+1C: p->buffer -LW T6,001C (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D1138 ;return FALSE if invalid resourceID -LW V0,0030 (SP) ;V0= A0 f/caller: -BEQ R0,R0,7F0D119C -OR V0,R0,R0 -//7F0D1138: test if type 1 -LW T7,0020 (SP) ;T7=indy.res.cmd.type -ADDIU AT,R0,0001 -LW T8,0024 (SP) ;T8=indy.res.cmd.size -BEQL T7,AT,7F0D1158 ;return FALSE if not type 1 -ADDIU AT,R0,0014 -BEQ R0,R0,7F0D119C -OR V0,R0,R0 -//7F0D1154: test sizes -ADDIU AT,R0,0014 -BEQ T8,AT,7F0D1168 ;return FALSE if size mismatch -NOP -BEQ R0,R0,7F0D119C -OR V0,R0,R0 -//7F0D1168: test first value versus A0 -BEQ V0,R0,7F0D1180 ;skip if A0 was zero -LW T9,0028 (SP) ;T9= indy.res.cmd+C: -BEQL T9,V0,7F0D1184 ;return FALSE if A0 mismatch -LW T0,002C (SP) -BEQ R0,R0,7F0D119C -OR V0,R0,R0 -//7F0D1180: test second value versus A1 -LW T0,002C (SP) ;T0= indy.res.cmd+10: -LW T1,0034 (SP) ;T1= A1 f/caller: -ADDIU V0,R0,0001 -BEQ T0,T1,7F0D119C ;return TRUE on match -NOP -BEQ R0,R0,7F0D119C -OR V0,R0,R0 -//7F0D119C: return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D11AC 105CDC V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -ADDIU A1,R0,0014 ;A1= 14 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,001C ;A0=SP+1C: p->buffer -LW T6,001C (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D11E4 ;return FALSE if invalid resourceID -LW RA,0014 (SP) -BEQ R0,R0,7F0D1240 -OR V0,R0,R0 -//7F0D11E4: test if type 2 -LW T7,0020 (SP) ;T7=indy.res.cmd.type -ADDIU AT,R0,0002 -LW T8,0024 (SP) ;T8=indy.res.cmd.size -BEQL T7,AT,7F0D1204 ;return FALSE if not type 2 -ADDIU AT,R0,0014 -BEQ R0,R0,7F0D1240 -OR V0,R0,R0 -//7F0D1200: test sizes -ADDIU AT,R0,0014 -BEQ T8,AT,7F0D1214 ;return FALSE if size mismatch -LW T9,0028 (SP) ;T9=indy.res.cmd+C: -BEQ R0,R0,7F0D1240 -OR V0,R0,R0 -//7F0D1214: test first value versus A0 -LW T0,0030 (SP) ;T0= A0 f/caller: -LW T1,002C (SP) ;T1=indy.res.cmd+10: -LW T2,0034 (SP) ;T2= A1 f/caller: -BEQ T9,T0,7F0D1230 ;return FALSE if wrong value -NOP -BEQ R0,R0,7F0D1240 -OR V0,R0,R0 -//7F0D1230: test second value versus A1 -BEQ T1,T2,7F0D1240 ;return TRUE if value matches -ADDIU V0,R0,0001 -BEQ R0,R0,7F0D1240 -OR V0,R0,R0 -//7F0D1240: return -JR RA -ADDIU SP,SP,0030 - -7F0D1248 105D78 V0= TRUE if current indy.res.cmd type 4 with expected values (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,0018 ;A0=SP+18: p->buffer -LW T6,0018 (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D1284 ;return FALSE if invalid resourceID -LW T7,001C (SP) ;T7=indy.res.cmd.type -BEQ R0,R0,7F0D12E4 -OR V0,R0,R0 -//7F0D1284: test if type 4 -ADDIU AT,R0,0004 -BEQ T7,AT,7F0D1298 ;return FALSE if not type 4 -LW T8,0020 (SP) ;T8=indy.res.cmd.size -BEQ R0,R0,7F0D12E4 -OR V0,R0,R0 -//7F0D1298: test sizes -ADDIU AT,R0,0018 -BEQ T8,AT,7F0D12AC ;return FALSE if size mismatch -LW T9,0024 (SP) -BEQ R0,R0,7F0D12E4 -OR V0,R0,R0 -//7F0D12AC: test first value versus A0 -LW T0,0030 (SP) -LW T1,0028 (SP) -LW T2,0034 (SP) -BEQ T9,T0,7F0D12C8 ;return FALSE if wrong value -NOP -BEQ R0,R0,7F0D12E4 -OR V0,R0,R0 -//7F0D12C8: test second value versus A1 -BEQ T1,T2,7F0D12D8 ;return FALSE if wrong value -LW T3,002C (SP) -BEQ R0,R0,7F0D12E4 -OR V0,R0,R0 -//7F0D12D8: return TRUE and set response -LW T4,0038 (SP) -ADDIU V0,R0,0001 -SW T3,0000 (T4) ;struct+14 -> A2 f/caller: return response -//7F0D12E4: return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D12F4 105E24 V0= TRUE if current indy.res.cmd type 6 with expected values (A0,A1); A2,A3= responses (struct+14,+18) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@reponse1, A3=@response2 -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -SW A2,0040 (SP) -SW A3,0044 (SP) -ADDIU A1,R0,001C ;A1= 1C bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,001C ;A0=SP+1C: p->buffer -LW T6,001C (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D1334 ;return FALSE if invalid resourceID -LW T7,0020 (SP) ;T7=indy.res.cmd.type -BEQ R0,R0,7F0D13A0 -OR V0,R0,R0 -//7F0D1334: test if type 6 -ADDIU AT,R0,0006 -BEQ T7,AT,7F0D1348 ;return FALSE if not type 6 -LW T8,0024 (SP) ;T8=indy.res.cmd.size -BEQ R0,R0,7F0D13A0 -OR V0,R0,R0 -//7F0D1348: test sizes -ADDIU AT,R0,001C -BEQ T8,AT,7F0D135C ;return FALSE if size mismatch -LW T9,0028 (SP) -BEQ R0,R0,7F0D13A0 -OR V0,R0,R0 -//7F0D135C: test first value versus A0 -LW T0,0038 (SP) -LW T1,002C (SP) -LW T2,003C (SP) -BEQ T9,T0,7F0D1378 -NOP -BEQ R0,R0,7F0D13A0 -OR V0,R0,R0 -//7F0D1378: test second value versus A1 -BEQ T1,T2,7F0D1388 -LW T3,0030 (SP) -BEQ R0,R0,7F0D13A0 -OR V0,R0,R0 -//7F0D1388: return TRUE and set responses -LW T4,0040 (SP) -ADDIU V0,R0,0001 -SW T3,0000 (T4) ;struct+14 -> A2 f/caller -LW T6,0044 (SP) -LW T5,0034 (SP) -SW T5,0000 (T6) ;struct+18 -> A3 f/caller -//7F0D13A0: return -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7F0D13B0 105EE0 V0= TRUE if current indy.res.cmd type 8 with expected values (A0,A1); A2,A3= responses (struct+14,+18) if TRUE, SP+14= child indy.res.cmd of size A3 - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response1, A3=@response2, SP+10=@size of child indy.res.cmd, SP+14=@child indy.res.cmd -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -SW A0,0038 (SP) ;SP+38= A0 -SW A1,003C (SP) ;SP+3C= A1 -SW A2,0040 (SP) ;SP+40= A2 -SW A3,0044 (SP) ;SP+44= A3 -ADDIU A1,R0,0020 ;A1=20 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,0018 ;A0=SP+18: p->buffer -LW T6,0018 (SP) ;T6=struct+0: resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D13F0 ;return FALSE if invalid resourceID -LW T7,001C (SP) ;T7=struct+4: type -BEQ R0,R0,7F0D1488 -OR V0,R0,R0 -//7F0D13F0: test if type 8 -ADDIU AT,R0,0008 -BEQ T7,AT,7F0D1404 ;return FALSE if not type 8 -LW T9,0034 (SP) -BEQ R0,R0,7F0D1488 -OR V0,R0,R0 -//7F0D1404: test sizes -LW T8,0020 (SP) ;T8=struct+8: size -ADDIU V0,R0,FFFC -ADDIU T0,T9,0003 -AND T1,T0,V0 ;T1=T9 to nearest word -ADDIU T2,T1,0020 -BEQ T8,T2,7F0D1428 ;return FALSE if size mismatch -LW T3,0024 (SP) -BEQ R0,R0,7F0D1488 -OR V0,R0,R0 -//7F0D1428: test first value versus A0 -LW T4,0038 (SP) -LW T5,0028 (SP) -LW T6,003C (SP) -BEQ T3,T4,7F0D1444 -NOP -BEQ R0,R0,7F0D1488 -OR V0,R0,R0 -//7F0D1444: test second value versus A1 -BEQ T5,T6,7F0D1454 -LW T7,002C (SP) -BEQ R0,R0,7F0D1488 -OR V0,R0,R0 -//7F0D1454: return TRUE, responses, and child entry -LW T9,0040 (SP) -SW T7,0000 (T9) ;struct+14 -> A2 f/caller: -LW T1,0044 (SP) -LW T0,0030 (SP) -SW T0,0000 (T1) ;struct+18 -> A3 f/caller: -LW T8,0034 (SP) ;T8=buffer+1C: data length -LW T2,0048 (SP) -ADDIU T3,T8,0003 -SW T8,0000 (T2) ;T8-> SP+10 f/caller: size to nearest word -LW A0,004C (SP) ;A0=SP+14 f/caller: p->target -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -AND A1,T3,V0 ;A1=size to nearest word -ADDIU V0,R0,0001 ;return TRUE -//7F0D1488: return -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7F0D1498 105FC8 V0= TRUE if current indy.res.cmd type A with expected values (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,0018 ;A0=SP+18: p->buffer -LW T6,0018 (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D14D4 ;return FALSE if invalid resourceID -LW T7,001C (SP) ;T7=indy.res.cmd.type -BEQ R0,R0,7F0D1534 -OR V0,R0,R0 -//7F0D14D4: test if type A -ADDIU AT,R0,000A -BEQ T7,AT,7F0D14E8 ;return FALSE if not type A -LW T8,0020 (SP) ;T8=indy.res.cmd.size -BEQ R0,R0,7F0D1534 -OR V0,R0,R0 -//7F0D14E8: test sizes -ADDIU AT,R0,0018 -BEQ T8,AT,7F0D14FC ;return FALSE if size mismatch -LW T9,0024 (SP) -BEQ R0,R0,7F0D1534 -OR V0,R0,R0 -//7F0D14FC: test first value versus A0 -LW T0,0030 (SP) -LW T1,0028 (SP) -LW T2,0034 (SP) -BEQ T9,T0,7F0D1518 -NOP -BEQ R0,R0,7F0D1534 -OR V0,R0,R0 -//7F0D1518: test second value versus A1 -BEQ T1,T2,7F0D1528 -LW T3,002C (SP) -BEQ R0,R0,7F0D1534 -OR V0,R0,R0 -//7F0D1528: return TRUE and set response -LW T4,0038 (SP) -ADDIU V0,R0,0001 -SW T3,0000 (T4) ;struct+14 -> A2 f/caller -//7F0D1534: return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D1544 106074 V0= TRUE if current indy.res.cmd type 10 with expected values (A0,A1); A2,A3,SP+10= responses (struct+14,+18,+1C) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response1, A3=@response2, SP+10=@response3 -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -SW A0,0038 (SP) -SW A1,003C (SP) -SW A2,0040 (SP) -SW A3,0044 (SP) -ADDIU A1,R0,0020 ;A1= 20 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,0018 ;A0=SP+18: p->buffer -LW T6,0018 (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D1584 ;return FALSE if invalid resourceID -LW T7,001C (SP) ;T7=indy.res.cmd.type -BEQ R0,R0,7F0D15FC -OR V0,R0,R0 -//7F0D1584: test if type 10 -ADDIU AT,R0,0010 -BEQ T7,AT,7F0D1598 ;return FALSE if not type 10 -LW T8,0020 (SP) ;T8=indy.res.cmd.size -BEQ R0,R0,7F0D15FC -OR V0,R0,R0 -//7F0D1598: test sizes -ADDIU AT,R0,0020 -BEQ T8,AT,7F0D15AC ;return FALSE if size mismatch -LW T9,0024 (SP) -BEQ R0,R0,7F0D15FC -OR V0,R0,R0 -//7F0D15AC: test first value versus A0 -LW T0,0038 (SP) -LW T1,0028 (SP) -LW T2,003C (SP) -BEQ T9,T0,7F0D15C8 -NOP -BEQ R0,R0,7F0D15FC -OR V0,R0,R0 -//7F0D15C8: test second value versus A1 -BEQ T1,T2,7F0D15D8 -LW T3,002C (SP) -BEQ R0,R0,7F0D15FC -OR V0,R0,R0 -//7F0D15D8: return TRUE and set responses -LW T4,0040 (SP) -ADDIU V0,R0,0001 -SW T3,0000 (T4) ;struct+14 -> A2 f/caller: -LW T6,0044 (SP) -LW T5,0030 (SP) -SW T5,0000 (T6) ;struct+18 -> A3 f/caller: -LW T8,0048 (SP) -LW T7,0034 (SP) -SW T7,0000 (T8) ;struct+1C -> SP+10 f/caller: -//7F0D15FC: return -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - -7F0D160C 10613C V0= TRUE if current indy.res.cmd type E with expected values (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,0018 ;A0=SP+18: p->buffer -LW T6,0018 (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D1648 ;return FALSE if invalid resourceID -LW T7,001C (SP) ;T7=indy.res.cmd.type -BEQ R0,R0,7F0D16A8 -OR V0,R0,R0 -//7F0D1648: test if type E -ADDIU AT,R0,000E -BEQ T7,AT,7F0D165C ;return FALSE if not type E -LW T8,0020 (SP) ;T8=indy.res.cmd.size -BEQ R0,R0,7F0D16A8 -OR V0,R0,R0 -//7F0D165C: test sizes -ADDIU AT,R0,0018 -BEQ T8,AT,7F0D1670 ;return FALSE if size mismatch -LW T9,0024 (SP) -BEQ R0,R0,7F0D16A8 -OR V0,R0,R0 -//7F0D1670: test first value versus A0 -LW T0,0030 (SP) -LW T1,0028 (SP) -LW T2,0034 (SP) -BEQ T9,T0,7F0D168C -NOP -BEQ R0,R0,7F0D16A8 -OR V0,R0,R0 -//7F0D168C: test second value versus A1 -BEQ T1,T2,7F0D169C -LW T3,002C (SP) -BEQ R0,R0,7F0D16A8 -OR V0,R0,R0 -//7F0D169C: return TRUE and set response -LW T4,0038 (SP) -ADDIU V0,R0,0001 -SW T3,0000 (T4) ;struct+14 -> A2 f/caller -//7F0D16A8: return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D16B8 1061E8 V0= TRUE if current indy.res.cmd type C with expected values (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) -ADDIU A1,R0,0018 ;A1= 18 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,0018 ;A0=SP+18: p->buffer -LW T6,0018 (SP) ;T6=indy.res.cmd.resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -BEQ T6,AT,7F0D16F4 ;return FALSE if invalid resourceID -LW T7,001C (SP) ;T7=indy.res.cmd.type -BEQ R0,R0,7F0D1754 -OR V0,R0,R0 -//7F0D16F4: test if type C -ADDIU AT,R0,000C -BEQ T7,AT,7F0D1708 ;return FALSE if not type C -LW T8,0020 (SP) ;T8=indy.res.cmd.size -BEQ R0,R0,7F0D1754 -OR V0,R0,R0 -//7F0D1708: test sizes -ADDIU AT,R0,0018 -BEQ T8,AT,7F0D171C ;return FALSE if size mismatch -LW T9,0024 (SP) -BEQ R0,R0,7F0D1754 -OR V0,R0,R0 -//7F0D171C: test first value versus A0 -LW T0,0030 (SP) -LW T1,0028 (SP) -LW T2,0034 (SP) -BEQ T9,T0,7F0D1738 -NOP -BEQ R0,R0,7F0D1754 -OR V0,R0,R0 -//7F0D1738: test second value versus A1 -BEQ T1,T2,7F0D1748 -LW T3,002C (SP) -BEQ R0,R0,7F0D1754 -OR V0,R0,R0 -//7F0D1748: return TRUE and set response -LW T4,0038 (SP) -ADDIU V0,R0,0001 -SW T3,0000 (T4) ;struct+14 -> A2 f/caller -//7F0D1754: return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -7F0D1764 106294 A0= response from indy.res.cmd structure 1:4:2 - accepts: A0=@response -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D1100 ;V0= TRUE if current indy.res.cmd type 1 with expected values (A0,A1) -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D1248 ;V0= TRUE if current indy.res.cmd type 4 with expected values (A0,A1) -LW A2,0018 (SP) ;A2= A0 f/caller: @response -OR A0,R0,R0 -JAL 7F0D11AC ;V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D17AC 1062DC (A0,A1)= response from indy.res.cmd structure 1:6:2; A0=TRUE and A1=filesize if file requested by 1:5:2 indy.res.cmd found - accepts: A0=@discovered (TRUE/FALSE), A1=@filesize -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -SW A1,001C (SP) -ADDIU A1,R0,001C -JAL 7F0D1100 ;V0= TRUE if current indy.res.cmd type 1 with expected values (A0,A1) -ADDIU A0,R0,001C -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0018 (SP) ;A2= A0 f/caller: @response1 -JAL 7F0D12F4 ;V0= TRUE if current indy.res.cmd type 6 with expected values (A0,A1) -LW A3,001C (SP) ;A3= A1 f/caller: @response2 -OR A0,R0,R0 -JAL 7F0D11AC ;V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D17FC 10632C (A0,A1)= response, A3= p->data of size A2 from indy.res.cmd structure 1:8:2: recieve file A3, size A2 - accepts: A0=@response1, A1=@response2, A2=@data size, A3=@data -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -SW A3,002C (SP) -ADDIU A1,R0,0020 -JAL 7F0D1100 ;V0= TRUE if current indy.res.cmd type 1 with expected values (A0,A1) -OR A0,R0,R0 -LW T6,0028 (SP) -LW T7,002C (SP) -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0020 (SP) ;A2= A0 f/caller: @response1 -LW A3,0024 (SP) ;A3= A1 f/caller: @response2 -SW T6,0010 (SP) ;SP+10= A2 f/caller: @data size -JAL 7F0D13B0 ;V0= TRUE if current indy.res.cmd type 8 with expected values (A0,A1) -SW T7,0014 (SP) ;SP+14= A3 f/caller: @data -OR A0,R0,R0 -JAL 7F0D11AC ;V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) -OR A1,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D1864 106394 A0= response from indy.res.cmd structure 1:A:2 - accepts: A0=@response -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D1100 ;V0= TRUE if current indy.res.cmd type 1 with expected values (A0,A1) -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D1498 ;V0= TRUE if current indy.res.cmd type A with expected values (A0,A1) -LW A2,0018 (SP) ;A2= A0 f/caller: @response -OR A0,R0,R0 -JAL 7F0D11AC ;V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D18AC 1063DC (A0,A1,A2)= response from indy.res.cmd structure 1:10:2 - accepts: A0=@response1, A1=@response2, A2=@response3 -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW A0,0020 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -ADDIU A1,R0,0020 -JAL 7F0D1100 ;V0= TRUE if current indy.res.cmd type 1 with expected values (A0,A1) -ADDIU A0,R0,0020 -LW T6,0028 (SP) -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -LW A2,0020 (SP) ;A2= A0 f/caller: @response1 -LW A3,0024 (SP) ;A3= A1 f/caller: @response2 -JAL 7F0D1544 ;V0= TRUE if current indy.res.cmd type 10 with expected values (A0,A1) -SW T6,0010 (SP) ;SP+10= A2 f/caller: @response3 -OR A0,R0,R0 -JAL 7F0D11AC ;V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) -OR A1,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D1908 106438 A0= response from indy.res.cmd structure 1:E:2 - accepts: A0=@response -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D1100 ;V0= TRUE if current indy.res.cmd type 1 with expected values (A0,A1) -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D160C ;V0= TRUE if current indy.res.cmd type E with expected values (A0,A1) -LW A2,0018 (SP) ;A2= A0 f/caller: @response -OR A0,R0,R0 -JAL 7F0D11AC ;V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D1950 106480 A0= response from indy.res.cmd structure 1:C:2 - accepts: A0=@response -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -ADDIU A0,R0,0018 -JAL 7F0D1100 ;V0= TRUE if current indy.res.cmd type 1 with expected values (A0,A1) -ADDIU A1,R0,0018 -ADDIU A0,R0,0014 -ADDIU A1,R0,0014 -JAL 7F0D16B8 ;V0= TRUE if current indy.res.cmd type C with expected values (A0,A1) -LW A2,0018 (SP) ;A2= A0 f/caller: @response -OR A0,R0,R0 -JAL 7F0D11AC ;V0= TRUE if current indy.res.cmd type 2 with expected values (A0,A1) -OR A1,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -ADDIU V0,R0,0001 -JR RA -NOP - -7F0D1998 1064C8 V0= TRUE if current indy.res.cmd matches expected values (A0,A1) - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size -ADDIU SP,SP,FFD0 -SW RA,0014 (SP) -SW A0,0030 (SP) -SW A1,0034 (SP) -ADDIU A1,R0,0014 ;A1=14 bytes -JAL 7F0D0F4C ;read Indy resource command of size A1 to A0 -ADDIU A0,SP,001C ;A0=SP+1C: p->buffer -LW T6,001C (SP) ;T6=struct+0: resourceID -LUI AT,9ABF -ORI AT,AT,1623 ;AT=9ABF1623: resourceID -LW V0,0030 (SP) -BEQ T6,AT,7F0D19D4 ;return FALSE if invalid resourceID -LW V1,0034 (SP) -BEQ R0,R0,7F0D1A08 -OR V0,R0,R0 -//7F0D19D4: test first value versus A0 -BEQ V0,R0,7F0D19EC ;skip if A0 zero -LW T7,0028 (SP) ;T7=struct+C: -BEQ T7,V0,7F0D19EC ;return FALSE if values differ -NOP -BEQ R0,R0,7F0D1A08 -OR V0,R0,R0 -//7F0D19EC: test second value versus A1 -BEQ V1,R0,7F0D1A04 -LW T8,002C (SP) ;T8=struct+10: -BEQL T8,V1,7F0D1A08 ;return TRUE if values same -ADDIU V0,R0,0001 -BEQ R0,R0,7F0D1A08 -OR V0,R0,R0 -//7F0D1A04: return TRUE -ADDIU V0,R0,0001 -//7F0D1A08: return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/System/Resource Loaders 7F0BCAA0 - 7F0BD410.txt b/notes/GE Documentation/Gameplay and Misc/System/Resource Loaders 7F0BCAA0 - 7F0BD410.txt deleted file mode 100644 index 51dff21..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/Resource Loaders 7F0BCAA0 - 7F0BD410.txt +++ /dev/null @@ -1,751 +0,0 @@ -resource table entry format: -0x0 4 index -0x4 4 p->resource name -0x8 4 hardware address - -resource data entry format: -0x0 4 filesize -0x4 4 temporary: remaining buffer -0x8 4 temporary: filesize of Indy-derived files -0xC 4 remaining buffer -0x10 1 mem bank when loaded -0x11 1 -0x12 2 RESERVED - - -7F0BCAA0 F15D0 load resource table/data entry (A2,A3) to buffer A0 of size A1 - accepts: A0=p->rdram target, A1=buffer size or 0 to ignore, A2=p->resource table entry, A3=p->resource data entry -ADDIU SP,SP,DED8 -SW RA,0014 (SP) -SW A0,2128 (SP) ;SP+2128= A0: p->target -BNE A1,R0,7F0BCAC8 ;branch if size explicitly mentioned -SW A2,2130 (SP) ;SP+2130= A2: p->resource table -LW A1,0008 (A2) ;A1=res.tbl+8: hardware address -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -LW A2,0000 (A3) ;A2=res.data+0: filesize -BEQ R0,R0,7F0BCB28 ;return -LW RA,0014 (SP) -//7F0BCAC8: test if falls within buffer size -LW A2,0000 (A3) ;A2=res.data+0: filesize -LW T7,2128 (SP) ;T7=p->target -ADDIU AT,R0,FFF8 -ADDIU T9,A2,0007 -AND T0,T9,AT ;T0= computed filesize to DW bound -ADDU T8,T7,A1 -SUBU A0,T8,T0 ;A0= p->target + size - filesize -SUBU T1,A0,T7 ;T1= size - filesize -SLTIU AT,T1,0008 -BEQ AT,R0,7F0BCAFC ;return if difference of less than 8 -LW T2,2130 (SP) -BEQ R0,R0,7F0BCB24 -SW R0,0004 (A3) ;0->res.data+4: 0->remaining buffer -//7F0BCAFC: load resource if fits -LW A1,0008 (T2) ;A1=res.tbl+8: hardware address -SW A3,2134 (SP) -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -SW A0,2124 (SP) -LW A0,2124 (SP) ;A0= p->target.corrected -LW A1,2128 (SP) ;A1= p->target -JAL 7F0CE7F0 ;decompress data A0 to A1, advancing past header -ADDIU A2,SP,0024 ;A2=SP+24: p->buffer -LW A3,2134 (SP) ;A3= remaining buffer -SW V0,0004 (A3) ;res.data+4= remaining buffer -//7F0BCB24: return -LW RA,0014 (SP) -ADDIU SP,SP,2128 -JR RA -NOP - -7F0BCB34 F1664 load resource table/data entry (A2,A3) from Indy into allocated buffer A0 of size A1 - accepts: A0=p->allocated data, A1=buffer size or 0 to ignore, A2=p->resource entry, A3=p->resource data entry -ADDIU SP,SP,DED8 -SW S1,0018 (SP) -SW S0,0014 (SP) -OR S0,A0,R0 ;S0=A0: p->target -OR S1,A3,R0 ;S1=A3: p->res.data -SW RA,001C (SP) -BNE A1,R0,7F0BCB68 ;branch if buffer size declared -SW A1,212C (SP) ;SP+212C= A1: size -LW A0,0004 (A2) ;A0=res.tbl+4: p->name -JAL 7F0CFF9C ;load resource named A0 from Indy to A1 -OR A1,S0,R0 ;A1=S0: p->target -BEQ R0,R0,7F0BCC18 ;return -LW RA,001C (SP) -//7F0BCB68: find instance on Indy -LW A0,0004 (A2) ;A0=res.tbl+4: p->name -SW A2,2130 (SP) ;SP+2130= A2: p->res.tbl -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -ADDIU A1,S1,0008 ;A1=p->res.data+8: target for filesize -//7F0BCB78: test if falls within buffer size -LW T9,0008 (S1) ;T9=res.data+8: filesize -LW T7,212C (SP) ;T7=size.buf -ADDIU AT,R0,FFF8 -ADDIU T0,T9,0007 -AND T1,T0,AT :T1=filesize to DW boundry -ADDU T8,S0,T7 -SUBU A3,T8,T1 ;A3= p->target + buffer size - filesize -SUBU T2,A3,S0 ;T2= buffer size - filesize -SLTIU AT,T2,0008 -BEQ AT,R0,7F0BCBAC ;return if won't fit within buffer -LW A2,2130 (SP) -BEQ R0,R0,7F0BCC14 -SW R0,0004 (S1) ;0->res.data+4: no remaining buffer -//7F0BCBAC: load resource from Indy -LW A0,0004 (A2) ;A0=res.tbl+4: p->name -SW A3,2124 (SP) -JAL 7F0CFF9C ;load resource named A0 from Indy to A1 -OR A1,A3,R0 ;A1=A3: p->target, aligned to end of buffer -//7F0BCBBC: manual test for rarezip header (aegh...) -LW A3,2124 (SP) ;A3=p->file -LUI T4,8006 -LBU T4,B66C (T4) ;T4=8005B66C: 1172 .rz header -LBU T3,0000 (A3) ;T3=file[0] -LUI T6,8006 -OR A1,S0,R0 ;A1=p->target (original) -BNE T3,T4,7F0BCC04 ;skip if not compressed -OR A0,A3,R0 ;A0=A3: p->file -LBU T5,0001 (A3) ;T5=file[1] -LBU T6,B671 (T6) ;T4=8005B671: another 1172 .rz header -ADDIU A2,SP,0024 ;A2=SP+24: p->decompression object target -BNE T5,T6,7F0BCC04 ;skip if not compressed -NOP -OR A0,A3,R0 ;A0=A3: p->file -JAL 7F0CE7F0 ;decompress data A0 to A1, advancing past header -OR A1,S0,R0 ;A1=S0: filesize -BEQ R0,R0,7F0BCC10 -OR V1,V0,R0 -//7F0BCC04: copy from one end of the buffer to the other -JAL 7000F970 ;V0=p->A2 bytes copied from A0 to A1 -LW A2,0008 (S1) ;A2=res.data+8: filesize -LW V1,0008 (S1) -SW V1,0004 (S1) ;filesize -> res.data+4 -//7F0BCC14: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,2128 - -7F0BCC28 F1758 generate resource data filesize entries -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8004 -LUI A1,8006 -ADDIU A1,A1,B674 ;A1=8005B674: "ob_c_debug" -JAL 70004E60 ;V0=p->debug.notice.list entry for name A1 and data A0 -ADDIU A0,A0,6050 ;A0=80046050: -LUI V1,8005 -LW V1,82D4 (V1) ;V1=800482D4: calculated # resource entries -LUI A0,8004 -ADDIU A0,A0,6060 ;A0=80046060: p->resource table -ADDIU V1,V1,FFFF -SLTI AT,V1,0002 -BNE AT,R0,7F0BCCAC ;return if last entry -LUI V0,8009 -SLL T6,V1,0x2 -ADDU T6,T6,V1 -LUI T7,8009 -ADDIU T7,T7,88B0 ;T7=800888B0: p->resource data -SLL T6,T6,0x2 ;T6=entries.max*14 -ADDU A1,T6,T7 ;A1=p->res.data.final -ADDIU V0,V0,88C4 ;V0=800888C4: p->res.data.next -//7F0BCC80: loop for total entries - 1 -LW T8,0014 (A0) ;T8=res.tbl.next+8: next hardware address -LW T9,0008 (A0) ;T9=res.tbl+8: hardware address -ADDIU V0,V0,0014 ;V0+=14: next res.data entry -SLTU AT,V0,A1 ;TRUE if next res.data entry not final -SUBU V1,T8,T9 ;V1=difference in sizes -ADDIU A0,A0,000C -SW V1,FFEC (V0) ;res.data+0 = filesize -SW R0,FFF0 (V0) ;res.data+4 = 0 -SW R0,FFF4 (V0) ;res.data+8 = 0 -BNE AT,R0,7F0BCC80 -SW R0,FFF8 (V0) ;res.data+C = 0 -//7F0BCCAC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BCCBC F17EC loads ROM index# A0 into memory bank A3; redirects to 7F0BCE0C - accepts: A0=index#, A1=mode, A2=update flag, A3=bank -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A3,0024 (SP) -ANDI T6,A3,00FF -JAL 7F0BCE0C ;load ROM index# A0 into memory bank A3 -OR A3,T6,R0 ;A3->byte -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BCCE4 F1814 load resource index# A0 into memory; redirects to 7F0BCFE0 - accepts: A0=index#, A1=bank, A2=p->target, A3=size of buffer -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0BCFE0 ;load resource index A0 to buffer A2 of size A3 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BCD04 F1834 load resource named A0 to bank A3; redirects to 7F0BCE0C - accepts: A0=p->name, A1=mode, A2=update flag, A3=bank -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -SW A2,0020 (SP) -JAL 7F0BD254 ;V0=index# of resource named A0 -SW A3,0024 (SP) -OR A0,V0,R0 ;A0=V0: index -LW A1,001C (SP) ;A1= A1 f/caller -LW A2,0020 (SP) ;A2= A2 f/caller -JAL 7F0BCE0C ;load resource index# A0 into memory bank A3 -LBU A3,0027 (SP) ;A3= A3 f/caller -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BCD40 F1870 load resource named A0 to buffer A2 of size A3; redirects to 7F0BCFE0 - accepts: A0=p->name, A1=mode, A2=p->target, A3=size of buffer -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -SW A2,0020 (SP) -JAL 7F0BD254 ;V0=index# of resource named A0 -SW A3,0024 (SP) -OR A0,V0,R0 ;A0=V0: index -LW A1,001C (SP) ;A1= A1 f/caller -LW A2,0020 (SP) ;A2= A2 f/caller -JAL 7F0BCFE0 ;load resource index A0 to buffer A2 of size A3 -LW A3,0024 (SP) ;A3= A3 f/caller -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BCD7C F18AC loads A3 bytes of BG file named A0 starting at A2 to rdram A1 - accepts: A0=p->name, A1=p->target, A2=offset, A3=size -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) ;SP+1C= A1 -SW A2,0020 (SP) ;SP+20= A2 -JAL 7F0BD254 ;V0=index# of resource named A0 -SW A3,0024 (SP) ;SP+24= A3 -SLL T8,V0,0x2 -ADDU T8,T8,V0 -SLL T8,T8,0x2 ;T8=index*14: offset in res.data -LUI V1,8009 -ADDU V1,V1,T8 -LW V1,88B0 (V1) ;V1=800888B0+offset: res.data.filesize -SLL T6,V0,0x2 -SUBU T6,T6,V0 -LUI T7,8004 -ADDIU T7,T7,6054 -SLL T6,T6,0x2 ;T6=index*C: offset in res.tbl -LW A2,0024 (SP) ;A2= A3 f/caller: size -LW T0,0020 (SP) ;T0= A2 f/caller: offset -BEQ V1,R0,7F0BCDFC ;return if NULL file -ADDU A3,T6,T7 ;A3=80046054+offset: res.tbl[index] -ADDU T9,T0,A2 ;T9= size + offset -ADDIU T1,V1,000F -SLTU AT,T1,T9 -BEQL AT,R0,7F0BCDF0 ;branch if doesn't exceed total filesize -LW T2,0008 (A3) -//7F0BCDE4: permanent loop! -BEQ R0,R0,7F0BCDE4 -NOP -//7F0BCDEC: load segment of file -LW T2,0008 (A3) ;T2=res.tbl[index].hardware -LW A0,001C (SP) ;A0= A1 f/caller: p->target -JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 -ADDU A1,T2,T0 ;A1=hardware + offset -//7F0BCDFC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BCE0C F193C load resource index# A0 into memory bank A3 - accepts: A0=index#, A1=mode, A2=do not update bank index (FALSE,TRUE), A3=bank - Mode > 2 forces load without buffer size reference. -ADDIU SP,SP,FFD0 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A0,0030 (SP) ;SP+30= A0 -SW A1,0034 (SP) ;SP+34= A1 -SW A2,0038 (SP) ;SP+38= A2 -BEQ A1,R0,7F0BCE44 ;branch if mode 0 -SW A3,003C (SP) ;SP+3C= A3 -ADDIU AT,R0,0001 -BEQ A1,AT,7F0BCE44 -ADDIU AT,R0,0002 -BNE A1,AT,7F0BCF0C -LW T5,0030 (SP) -//7F0BCE44: modes 0-2 -LW T7,0030 (SP) ;T7=index -LUI T9,8009 -ADDIU T9,T9,88B0 -SLL T8,T7,0x2 -ADDU T8,T8,T7 -SLL T8,T8,0x2 ;T8=index*14: offset in res.data -ADDU S1,T8,T9 ;S1=800888B0+offset: res.data[index] -LW S0,0004 (S1) ;S0=res.data+4: res.data.temp.remaining -BNEL S0,R0,7F0BCE80 ;branch if set -OR A0,S0,R0 -JAL 70009910 ;V0= total allocated size of bank A0 -LBU A0,003F (SP) ;A0= A3 f/caller: bank -SW V0,0004 (S1) ;set res.data.temp.remaining to total size of bank -OR S0,V0,R0 ;S0=V0: remaining -//7F0BCE7C: -OR A0,S0,R0 ;A0=S0: remaining -JAL 70009720 ;V0=p->A0 bytes of memory allocated in bank A1 -LBU A1,003F (SP) ;A1= A3 f/caller: bank -LW S0,0004 (S1) ;S0=res.data+4: res.data.temp.remaining -LUI T2,8004 -ADDIU T2,T2,6054 -SW S0,000C (S1) ;S0->res.data+C: res.data.remaining -LW T0,0030 (SP) ;T0= A0 f/caller: index -OR A0,V0,R0 ;A0=p->allocated buffer -OR A3,S1,R0 ;A3=res.data[index] -SLL T1,T0,0x2 -SUBU T1,T1,T0 -SLL T1,T1,0x2 -ADDU A2,T1,T2 ;A2=80046054+offset: res.tbl[index] -LW T3,0008 (A2) ;T3=res.tbl.hardware -OR A1,S0,R0 ;A1=remaining buffer -BNE T3,R0,7F0BCEDC ;skip if hardware address declared -NOP -//7F0BCEC4: if no hardware address, pull from Indy -OR A1,S0,R0 ;A1= remaining size -OR A3,S1,R0 ;A3=res.data[index] -JAL 7F0BCB34 ;load resource table/data entry (A2,A3) from Indy into allocated buffer A0 of size A1 -SW V0,0024 (SP) -BEQ R0,R0,7F0BCEE8 -LW S0,0024 (SP) -//7F0BCEDC: load from hardware -JAL 7F0BCAA0 ;load resource table/data entry (A2,A3) to buffer A0 of size A1 -SW A0,0024 (SP) -//7F0BCEE4: aligns or corrects data entry in mem block -LW S0,0024 (SP) ;S0= p->allocated buffer -LW T4,0034 (SP) ;T4= A1 f/caller: mode -OR A0,S0,R0 ;A0= p->buffer -LBU A2,003F (SP) ;A2= A3 f/caller: bank -BEQL T4,R0,7F0BCFCC ;return if mode 0 -LW RA,001C (SP) -JAL 70009804 -LW A1,0004 (S1) ;A1=res.data+4: temp.remaining -BEQ R0,R0,7F0BCFCC -LW RA,001C (SP) -//7F0BCF0C: mode > 2 -SLL T6,T5,0x2 -ADDU T6,T6,T5 -LUI T7,8009 -ADDIU T7,T7,88B0 -SLL T6,T6,0x2 -ADDU S1,T6,T7 ;S1=800888B0+offset: res.data[index] -LW S0,0004 (S1) ;S0=res.data.temp.remaining -BNEL S0,R0,7F0BCF50 ;skip if set -OR A0,S0,R0 -LW V0,0000 (S1) ;V0= res.data.filesize -BEQ V0,R0,7F0BCF44 ;if not present use Indy filesize -OR S0,V0,R0 -BEQ R0,R0,7F0BCF4C -SW V0,0004 (S1) ;copy res.data.filesize -> res.data.temp.remaining -//7F0BCF44: if remaining size not found, use filesize -LW S0,0008 (S1) -SW S0,0004 (S1) ;copy res.data.indyfilesize -> res.data.temp.remaining -//7F0BCF4C: allocate -OR A0,S0,R0 ;A0=S0: res.data.temp.remaining -JAL 70009720 ;V0=p->A0 bytes of memory allocated in bank A1 -LBU A1,003F (SP) ;A1= A3 f/caller: bank -LW T9,0004 (S1) ;T9=res.data.temp.remaining -LUI T2,8004 -ADDIU T2,T2,6054 -SW T9,000C (S1) ;copy res.data.temp.remaining -> res.data.remaining -LW T0,0030 (SP) ;T0= A0 f/caller: index -OR S0,V0,R0 ;S0=V0: p->buffer -OR A3,S1,R0 ;A3=res.data[index] -SLL T1,T0,0x2 -SUBU T1,T1,T0 -SLL T1,T1,0x2 -ADDU A2,T1,T2 ;A2=80046054+offset: res.tbl[index] -LW T3,0008 (A2) ;T3=res.tbl.hardware -OR A0,S0,R0 ;A0=p->buffer -OR A1,R0,R0 -BNE T3,R0,7F0BCFAC ;pull from hardware addy if set -NOP -//7F0BCF98: if no hardware address, pull from Indy -OR A0,V0,R0 ;A0= p->buffer -JAL 7F0BCB34 ;load resource table/data entry (A2,A3) from Indy into allocated buffer A0 of size A1 -OR A1,R0,R0 ;A1=0: no size declared (forced) -BEQ R0,R0,7F0BCFB8 -LW T4,0038 (SP) -//7F0BCFAC: load from hardware -JAL 7F0BCAA0 ;load resource table/data entry (A2,A3) to buffer A0 of size A1 -OR A3,S1,R0 ;A3=res.data[index] -//7F0BCFB4: if A2 FALSE, write bank number to res.data -LW T4,0038 (SP) ;T4= A2 f/caller -LBU T5,003F (SP) -BNEL T4,R0,7F0BCFCC ; if 0, write bank number to res.data+10 -LW RA,001C (SP) -SB T5,0010 (S1) ;res.data+10 = bank -//7F0BCFC8: return -LW RA,001C (SP) -OR V0,S0,R0 ;V0= p->buffer -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0030 - -7F0BCFE0 F1B10 load resource index A0 to buffer A2 of size A3 - accepts: A0=index#, A1=mode, A2=p->target, A3=size of buffer - Mode > 2 forces load without buffer size reference. -SLL T6,A0,0x2 -ADDIU SP,SP,FFE0 -ADDU T6,T6,A0 -LUI T7,8009 -SW S0,0018 (SP) -ADDIU T7,T7,88B0 -SLL T6,T6,0x2 -ADDU S0,T6,T7 ;S0=800888B0+offset: res.data[index] -LW T8,0004 (S0) ;T8= res.data+4: res.data.temp.remaining -SW RA,001C (SP) -SW A2,0028 (SP) ;SP+28= A2 -BNE T8,R0,7F0BD030 ;skip if set -SW A3,002C (SP) ;SP+2C= A3 -LW V0,0000 (S0) -BEQL V0,R0,7F0BD02C -LW T9,0008 (S0) -BEQ R0,R0,7F0BD030 -SW V0,0004 (S0) ;copy res.data.filesize -> res.data.temp.remaining -//7F0BD028: if remaining size not found, use filesize -LW T9,0008 (S0) -SW T9,0004 (S0) ;copy res.data.indyfilesize -> res.data.temp.remaining -//7F0BD030: shuffle by mode -BEQ A1,R0,7F0BD048 -ADDIU AT,R0,0001 -BEQ A1,AT,7F0BD048 -ADDIU AT,R0,0002 -BNE A1,AT,7F0BD0A8 -SLL T5,A0,0x2 -//7F0BD048: modes 0-2 -SLL T0,A0,0x2 -SUBU T0,T0,A0 -LUI T1,8004 -ADDIU T1,T1,6054 -SLL T0,T0,0x2 -ADDU A2,T0,T1 ;A2=80046054+offset: res.tbl[index] -LW T2,0008 (A2) ;T7=res.tbl.hardware -LW T3,002C (SP) -LW T4,002C (SP) -BNE T2,R0,7F0BD090 -OR A3,S0,R0 ;A3=S0: res.data[index] -//7F0BD074: if no hardware address, pull from Indy -SW T3,000C (S0) ;size -> res.data.remaining -LW A0,0028 (SP) ;A0= A2 f/caller: p->target -LW A1,002C (SP) ;A1= A3 f/caller: size -JAL 7F0BCB34 ;load resource table/data entry (A2,A3) from Indy into allocated buffer A0 of size A1 -OR A3,S0,R0 ;A3=S0: res.data[index] -BEQ R0,R0,7F0BD0F0 -LW RA,001C (SP) -//7F0BD090: load from hardware -SW T4,000C (S0) ;size -> res.data.remaining -LW A1,002C (SP) ;A1= A3 f/caller: size -JAL 7F0BCAA0 ;load resource table/data entry (A2,A3) to buffer A0 of size A1 -LW A0,0028 (SP) ;A0= A2 f/caller: p->target -BEQ R0,R0,7F0BD0F0 -LW RA,001C (SP) -//7F0BD0A8: mode > 2 -SUBU T5,T5,A0 -LUI T6,8004 -ADDIU T6,T6,6054 -SLL T5,T5,0x2 -ADDU A2,T5,T6 ;A2=80046054+offset: res.tbl[index] -LW T7,0008 (A2) ;T7=res.tbl.hardware -OR A3,S0,R0 ;A3=S0: res.data[index] -LW A0,0028 (SP) ;A0= A2 f/caller: p->target -BNE T7,R0,7F0BD0E4 -OR A1,R0,R0 ;A1=0: no size declared (forced) -//7F0BD0D0: if no hardware address, pull from Indy -LW A0,0028 (SP) ;A0= A2 f/caller: p->target -JAL 7F0BCB34 ;load resource table/data entry (A2,A3) from Indy into allocated buffer A0 of size A1 -OR A1,R0,R0 ;A1=0: no size declared (forced) -BEQ R0,R0,7F0BD0F0 -LW RA,001C (SP) -//7F0BD0E4: load from hardware -JAL 7F0BCAA0 ;load resource table/data entry (A2,A3) to buffer A0 of size A1 -OR A3,S0,R0 ;A3=S0: res.data[index] -//7F0BD0EC: return -LW RA,001C (SP) -LW V0,0028 (SP) ;V0= p->target -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -7F0BD100 F1C30 V0= temp. remaining buffer for resource index A0 - accepts: A0=index -SLL T6,A0,0x2 -ADDU T6,T6,A0 -SLL T6,T6,0x2 ;T6=index*14 -LUI V0,8009 -ADDU V0,V0,T6 -JR RA -LW V0,88B4 (V0) ;V0=800888B0+4+offset: res.data[index].temp.remaining - -7F0BD11C F1C4C V0= remaining buffer for resource index A0 - accepts: A0=index -SLL T6,A0,0x2 -ADDU T6,T6,A0 -SLL T6,T6,0x2 ;T6=index*14 -LUI V0,8009 -ADDU V0,V0,T6 -JR RA -LW V0,88BC (V0) ;V0=800888B0+C+offset: res.data[index].remaining - -7F0BD138 F1C68 set remaining buffer size for resource entry A0, and if A3 TRUE update bank 4 for buffer A1 of size A2 - accepts: A0=index, A1=p->buffer, A2=remaining buffer size, A3=update TRUE/FALSE -SLL T6,A0,0x2 -ADDU T6,T6,A0 -LUI T7,8009 -ADDIU T7,T7,88B0 -SLL T6,T6,0x2 -ADDIU SP,SP,FFE8 -ADDU V0,T6,T7 ;V0=800888B0+offset: res.data[index] -SW RA,0014 (SP) -SW A1,001C (SP) -SW A2,0004 (V0) ;remaining->res.data[index].temp.remaining -BEQ A3,R0,7F0BD178 ;branch if not updating -SW A2,000C (V0) ;remaining->res.data[index].remaining -//7F0BD168: update bank 4 if A3 TRUE -OR A0,A1,R0 ;A0=A1: p->buffer -OR A1,A2,R0 ;A1=A2: remaining buffer -JAL 70009804 -ADDIU A2,R0,0004 ;A2=bank 4 -//7F0BD178: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BD188 F1CB8 V0=temporary buffer remaining value for resource named A0; res.data[index]+4 - accepts: A0=p->name -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0BD254 ;V0=index# of resource named A0 -NOP -SLL T6,V0,0x2 -ADDU T6,T6,V0 -LW RA,0014 (SP) -SLL T6,T6,0x2 ;T6=index*14: offset in res.data -LUI V0,8009 -ADDU V0,V0,T6 -LW V0,88B4 (V0) ;V0=800888B0+offset+4: res.data.temp.remaining -JR RA -ADDIU SP,SP,0018 - -7F0BD1BC F1CEC remove resource bank values matching or above bank A0; also eliminates bank 4 temp remaining values - accepts: A0=bank -LUI V1,8005 -LW V1,82D4 (V1) ;V1=800482D4: # resource entries -ANDI T6,A0,00FF -SW A0,0000 (SP) -SLTI AT,V1,0002 -BNE AT,R0,7F0BD22C ;return if only two entries -OR V0,T6,R0 ;V0=bank->byte -SLL T7,V1,0x2 -ADDU T7,T7,V1 -LUI T8,8009 -ADDIU T8,T8,88B0 -SLL T7,T7,0x2 -LUI A1,8009 -ADDIU A1,A1,88C4 ;A1=800888C4: res.data[1] -ADDU A2,T7,T8 ;A2=800888B0+offset: res.data.final -ADDIU V1,R0,0004 -//7F0BD1FC: remove bank numbers for entries in bank A0 or above -LBU T9,0010 (A1) ;T9=res.data+10: res.data.bank -SLT AT,V0,T9 -BNE AT,R0,7F0BD210 ;branch if bank# < resource's bank -NOP -SB R0,0010 (A1) ;0->res.data.bank -//7F0BD210: if bank 4, eliminate the temp.remaining value -BNEL V1,V0,7F0BD220 ;skip if not bank 4 -ADDIU A1,A1,0014 -SW R0,0004 (A1) ;0->res.data.temp.remaining -//7F0BD21C: iterate entire list -ADDIU A1,A1,0014 ;A1+=14: next entry -SLTU AT,A1,A2 -BNEL AT,R0,7F0BD200 ;continue for entire list -LBU T9,0010 (A1) -//7F0BD22C: return -JR RA -NOP - -7F0BD234 F1D64 remove resource bank values for banks 5 and 6; redirect to 7F0BD1BC -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0BD1BC ;remove resource bank values matching or above bank A0 -ADDIU A0,R0,0005 ;A0= bank 5 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BD254 F1D84 V0=index# of resource named A0 - accepts: A0=p->name - Iterates names in resource table searching for a match. - If not found, searches Indy for file and if found appends to res.tbl while space permits. -ADDIU SP,SP,FFC0 -SW S2,001C (SP) -LUI S2,8005 -ADDIU S2,S2,82D4 -LW V0,0000 (S2) ;V0=800482D4: # resource entries -SW S3,0020 (SP) -SW S1,0018 (SP) -SLTI AT,V0,0002 -OR S3,A0,R0 ;S3=A0: p->name -SW RA,0024 (SP) -SW S0,0014 (SP) -BNE AT,R0,7F0BD2CC ;branch if only one entry (aegh...) -ADDIU S1,R0,0001 ;S1=1 init.count -LUI S0,8004 -ADDIU S0,S0,6060 ;S0=80046060: resource table entry 1 -//7F0BD290: test name against table -LW A1,0004 (S0) ;A1=res.tbl+4: p->name -BEQL A1,R0,7F0BD2B8 ;continue if name NULL -LW V0,0000 (S2) -JAL 7000A84C ;V0= strcmp(A0,A1) -OR A0,S3,R0 ;A0=S3: p->name -BNEL V0,R0,7F0BD2B8 ;continue if names differ -LW V0,0000 (S2) -BEQ R0,R0,7F0BD368 -OR V0,S1,R0 ;V0=S1: index -//7F0BD2B4: loop through entire table -LW V0,0000 (S2) ;V0=800482D4: # resource entries -ADDIU S1,S1,0001 ;S1+=1 count+=1 -ADDIU S0,S0,000C ;S0+=C next entry -SLT AT,S1,V0 -BNEL AT,R0,7F0BD294 ;repeat for each entry -LW A1,0004 (S0) -//7F0BD2CC: test if entries remain beyond table -SLTI AT,V0,02E0 -BNE AT,R0,7F0BD2E0 ;return 0 if 2E0 entries or more (last possible entry) -OR S1,V0,R0 ;S1=V0: #entries -BEQ R0,R0,7F0BD368 -OR V0,R0,R0 -//7F0BD2E0: test for and grab filesize for resource -ADDIU T6,V0,0001 -SW T6,0000 (S2) ;800482D4+=1: #entries+=1 -OR A0,S3,R0 ;A0=S3: p->name -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -ADDIU A1,SP,0034 ;A1=SP+34: @filesize -BNE V0,R0,7F0BD304 ;return 0 if resource not found -SLL T7,S1,0x2 -BEQ R0,R0,7F0BD368 -OR V0,R0,R0 -//7F0BD304: generate and initialize a resource entry -SUBU T7,T7,S1 -LUI T8,8004 -ADDIU T8,T8,6054 -SLL T7,T7,0x2 ;T7= index*C: offset in res.tbl -SLL T9,S1,0x2 -ADDU S0,T7,T8 ;S0=80046054+offset: res.tbl[index] -ADDU T9,T9,S1 -LUI T0,8009 -ADDIU T0,T0,88B0 -SLL T9,T9,0x2 ;T9= index*14: offset in res.data -SW S1,0000 (S0) ;res.tbl+0 = index -SW S3,0004 (S0) ;res.tbl+4 = p->name -ADDU V1,T9,T0 ;V1=800888B0+offset: res.data[index] -SB R0,0011 (V1) ;res.data+11 = 0 -SW R0,0008 (S0) ;res.tbl+8 = NULL hardware address -SW R0,0000 (V1) ;res.data+0= 0: init.filesize -SW R0,0004 (V1) ;res.data+4= 0: init.temp.buffer.remaining -LW T1,0034 (SP) ;T1= filesize -SW R0,000C (V1) ;res.data+C= 0: init.buffer.remaining -SB R0,0010 (V1) ;res.data+10 = 0 -ADDIU T2,T1,000F -ORI T3,T2,000F -XORI T4,T3,000F ;T4=filesize to QW boundry -SW T4,0008 (V1) ;res.data+8= T4: temp.filesize -OR V0,S1,R0 ;V0=S1: index -//7F0BD368: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0040 - -7F0BD384 F1DB4 removed: A0->SP+0 - accepts: A0=resource index -JR RA -SW A0,0000 (SP) ;A0->SP+0 - -7F0BD38C F1DBC removed: calls 7F0BD384 for each resource entry index -ADDIU SP,SP,FFE0 -SW S1,0018 (SP) -LUI S1,8005 -ADDIU S1,S1,82D4 -LW T6,0000 (S1) ;T6=800482D4: # resource entries -SW S0,0014 (SP) -SW RA,001C (SP) -SLTI AT,T6,0002 -BNE AT,R0,7F0BD3D0 ;return if only two entries -ADDIU S0,R0,0001 ;S0=1 init.count -//7F0BD3B4: iterate through each resource entry -JAL 7F0BD384 ;removed; A0->SP+0 -OR A0,S0,R0 ;A0=S0: resource entry count -LW T7,0000 (S1) ;T7=800482D4: # resource entries -ADDIU S0,S0,0001 ;S0+=1 -SLT AT,S0,T7 -BNE AT,R0,7F0BD3B4 ;loop for remaining indicies -NOP -//7F0BD3D0: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -7F0BD3E4 F1E14 removed: V0=# resource entries -LUI V1,8005 -LW V1,82D4 (V1) ;V1=800482D4: # resource entries -ADDIU V0,R0,0001 ;V0=1 init.count -SLTI AT,V1,0002 -BNE AT,R0,7F0BD408 ;return if only two entries -//7F0BD3F8: stupidly uses loop to return V0=# resource entries -ADDIU V0,V0,0001 ;count+=1 -SLT AT,V0,V1 -BNEL AT,R0,7F0BD3FC ;loop while count < resource entries -ADDIU V0,V0,0001 -//7F0BD408: return -JR RA -NOP - -7F0BD410 F1E40 removed: V0= p->res.data.final -LUI V1,8005 -LW V1,82D4 (V1) ;V1=800482D4: # resource entries -LUI V0,8009 -ADDIU V0,V0,88C4 ;V0=800888C4: res.data[1] -SLTI AT,V1,0002 -BNE AT,R0,7F0BD450 ;return if only two entries -SLL T6,V1,0x2 -ADDU T6,T6,V1 -LUI T7,8009 -ADDIU T7,T7,88B0 -SLL T6,T6,0x2 -ADDU A0,T6,T7 ;A0=800888B0+offset: res.data.final -//7F0BD440: stupidly uses loop to return V0=res.data.final -ADDIU V0,V0,0014 ;V0+=14 next entry -SLTU AT,V0,A0 -BNEL AT,R0,7F0BD444 ;loop if not equal or greater -ADDIU V0,V0,0014 -//7F0BD450: return -JR RA -NOP diff --git a/notes/GE Documentation/Gameplay and Misc/System/TLB-ROM loading function.txt b/notes/GE Documentation/Gameplay and Misc/System/TLB-ROM loading function.txt deleted file mode 100644 index 0010bd3..0000000 --- a/notes/GE Documentation/Gameplay and Misc/System/TLB-ROM loading function.txt +++ /dev/null @@ -1,97 +0,0 @@ -700019D8: 25D8 translates and loads ROM based on TLB address - accepts: A0=TLB address -LUI V0,8002 -ADDIU V0,V0,30D0 ;V0=800230D0 -LW T6,0000 (V0) ;T6=800230D0: # TLB page entries? -LUI AT,7FFF -ADDIU SP,SP,FFB0 -ORI AT,AT,E000 ;AT=7FFFE000: address mask for TLB address (0x2000 pages) -SW RA,001C (SP) -AND A0,A0,AT ;A0&=7FFFE000: TLB address & mask -ADDIU T7,T6,0001 ;T7=T6+1 -SW S0,0018 (SP) -SW T7,0000 (V0) ;count at 800230D0++ -JAL 70001920 -SW A0,0028 (SP) ;SP+28=A0: TLB address mask -JAL 70001B10 -NOP -//70001A14: -ADDIU AT,R0,005A ;AT=0x5A -DIVU V0,AT -MFHI A0 ;A0=V0/0x5A -LUI V1,8002 -ADDIU V1,V1,30D4 ;V1=800230D4 -SW A0,0000 (V1) ;A0->800230D4: segment# (0x2000 block #) -JAL 70001954 -OR S0,A0,R0 ;S0=A0 -//70001A34: -LW V0,0028 (SP) ;V0=SP+28: TLB address mask -LUI T9,8006 -LW T9,E4A8 (T9) ;T9=8005E4A8: p->next bit of open memory? -LUI AT,00FF -ORI AT,AT,E000 ;AT=FFE000: ROM address mask -SLL T0,S0,0xD ;T0=S0 * 0x2000: offset to memory -LUI T2,0003 -AND T1,V0,AT ;T1=V0 & FFE000: range - 7F-extension -ADDIU T2,T2,4B30 ;T2=0x34B30: start of TLB ROM range -ADDU A0,T9,T0 ;A0=p->memory + offset to block -SW A0,0034 (SP) ;SP+34=rdram target -ADDU A1,T1,T2 ;A1=offset + ROM address -OR V0,T1,R0 ;V0=offset -SW T1,0024 (SP) ;SP+24=offset -JAL 70005C1C ;loads A2 bytes from A1 to A2 -ADDIU A2,R0,2000 ;A2=0x2000: size -//70001A74: -LUI A0,4000 ;A0=40000000 -JAL 7000D350 -LUI A1,4000 ;A1=40000000 -LUI A0,8000 ;A0=80000000 -JAL 7000D350 -LUI A1,1000 ;A1=10000000 -//70001A8C: -LW A1,0024 (SP) ;A1=SP+24: offset -LUI T5,8006 -ADDIU T5,T5,DBF0 ;T5=8005DBF0: table indicating loaded TLB blocks -SRL T3,A1,0xD ;T3=offset/0x2000: block# -SLL T4,T3,0x4 ;T4=block# *0x10: -ADDU A2,T4,T5 ;A2=address of block's index -SW S0,0004 (A2) ;S0->block index+4: offset to memory -SW A2,0020 (SP) ;SP+20=A2: address of block's index -SW T3,0028 (SP) ;SP+28=T3: block# -JAL 7000E8B0 -LW A0,0034 (SP) ;A0=SP+34: rdram target -//70001AB8: -LW RA,001C (SP) -SRL T6,V0,0xC ;T6=V0/0x1000 -SLL T9,S0,0x1 ;T9=S0*2: offset to memory * 2 -LUI T0,8006 -LW A1,0028 (SP) ;A1=SP+28: block# -LW A2,0020 (SP) ;A2=SP+20: address of block's index -SLL T7,T6,0x6 ;T7=4(V0/0x100) -ADDIU T0,T0,E3F0 ;T0=8005E3F0 -ORI T8,T7,001F ;T8=4(V0/0x100) | 0x1F -ADDU V1,T9,T0 ;V1=8005E3F0 + offset to memory * 2 -LW S0,0018 (SP) ;S0=SP+18: offset to memory -SB R0,0000 (V1) ;0-> 8005E3F0 + offset to memory * 2 -ADDIU SP,SP,0050 -SB A1,0001 (V1) ;block# -> 8005E3F1 + offset to memory * 2 -JR RA -SW T8,0000 (A2) ;4(V0/0x100) | 0x1F -> address of block's index - - -70001920: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 700018C0 -NOP -SLL T6,V0,0x0 -BLTZ T6,70001944 -OR A0,V0,R0 -JAL 7000D3D0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - diff --git a/notes/GE Documentation/Gameplay and Misc/loaded room index.txt b/notes/GE Documentation/Gameplay and Misc/loaded room index.txt deleted file mode 100644 index f0c3cc6..0000000 --- a/notes/GE Documentation/Gameplay and Misc/loaded room index.txt +++ /dev/null @@ -1,30 +0,0 @@ -Room index runs from 80041424 - 800442F4 at runtime only. -800442F4 denotes maximum number of rooms. - -Room Information: 0x50 each -0x0 2 bitflags probably -0x2 1 set when the model binaries have been loaded (prior to collisions) -0x3 1 bitflags probably -0x4 4 pointer to point index in model buffer or NULL -0x8 4 pointer to expanded mapping information in model buffer or NULL -0xC 4 pointer to secondary expanded mapping information in model buffer or NULL -0x10 4 compressed size of point index binary or 0 -0x14 4 compressed size of primary display list or 0 -0x18 4 compressed size of secondary display list or 0 -0x1C 4 uncompressed size of point index binary or 0 -0x20 4 uncompressed and expanded size of primary display list or 0 -0x24 4 uncompressed and expanded size of secondary display list or 0 -0x28 4 total size dedicated to current room - (above binaries are increased +0x4-0x10 bits to align to 128bit bounds) -0x2C 4 pointer to index of unique points used in room for collision purposes - (xxx1yyy1zzz1,xxx2yyy2zzz2,etc.) -0x30 4 bitflags probably -0x34 1 0000FFFF when room is not loaded -0x35 1 -0x36 2 -0x38 4 float: minimum x bounds -0x3C 4 float: minimum y bounds -0x40 4 float: minimum z bounds -0x44 4 float: maximum x bounds -0x48 4 float: maximum y bounds -0x4C 4 float: maximum z bounds diff --git a/notes/GE Documentation/Gameplay and Misc/player statistics.txt b/notes/GE Documentation/Gameplay and Misc/player statistics.txt deleted file mode 100644 index cd2d1be..0000000 --- a/notes/GE Documentation/Gameplay and Misc/player statistics.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ 80079EE0 -pointers to player data (players 1-4) -Japan 0x80079F60 -America 0x80079EF0 -Europe 0x80068A00 - -player 1 -9EF0 4 +0 shots fired (guns only) -9EF4 4 +4 head hits -9EF8 4 +8 body hits -9EFC 4 +C leg hits -9F00 4 +10 other hits: weapon -9F04 4 +14 other hits: hat -9F08 4 +18 other hits: objects -9F0C 4 +1C kill count total (display only - not used for score) -9F10 4 +20 killed owner of MwtGX special weapon -9F14 4 +24 killed player 1 -9F18 4 +28 killed player 2 -9F1C 4 +2C killed player 3 -9F20 4 +30 killed player 4 -9F24 4 +34 time other players have been on your screen (ms) -9F28 4 +38 (float) distance travelled -9F2C 4 +3C number of shots in the back - explosions as well -9F30 4 +40 (float) # BA pickups -9F34 4 +44 minimum time b/w kills (ms) -9F38 4 +48 longest time b/w kills (ms) -9F3C 4 +4C longest inning (ms) -9F40 4 +50 shortest inning (ms) -9F44 4 +54 most players killed in one life -9F48 4 +58 most people killed at one time -9F4C 4 +5C (float) player handicap (200=LTK) -9F50 4 +60 flag counter (ms) -9F54 4 +64 (float) player perspective height -9F58 1 +68 order you lost in "You Only Live Twice" -9F59 1 +69 1 if flag/golden gun are held -9F5A 1 +6A autoaim [1:on] -9F5B 1 +6B sight [1:on] -9F5C 4 +6C killed civilians - - -then player 2... - -00 Lemming Award most suicides -01 Where's the Ammo? least amount of ammo on you (I think at end of stage...) -02 Where's the Armor? least armor pickups -03 AC -10 Award most armor pickups -04 Marksmanship Award highest accuracy -05 Most Professional most head shots -06 Most Deadly most kills -07 Mostly Harmless least damage dealt -08 Most Cowardly least amount of time on screen with players -09 Most Frantic most amount of time on screen with players -0A Most Honorable least shots in the back -0B Most Dishonorable most shots in the back -0C Shortest Innings shortest time in play before death -0D Longest Innings longest time in play before death -0E Double Kill -if you killed two people at once -0F Triple Kill -if you killed three people at once -10 Quad Kill (Doh!) -if you killed four people at once diff --git a/notes/GE Documentation/General explaination.txt b/notes/GE Documentation/General explaination.txt deleted file mode 100644 index bf28962..0000000 --- a/notes/GE Documentation/General explaination.txt +++ /dev/null @@ -1,7 +0,0 @@ - This "documentation" is two-fold. It serves as an annotated record of disassembled GE binaries first and foremost. In addition, it documents code changes made during various hacking projects. Concidering all of these projects rely not on compiling code but directly editing assembly-level or runtime code, this is about the closest thing to open-source as you can get. - - This was also released freely to avoid the common issue of having to replicate the work of others. All information in here is freely available to the community in the hopes it will save them the time and effort of locating, disassembling, and deciphering the often convoluted codework used. Anyone who has followed the Zelda64 fiasco should know how important this is. - - Also, it should be noted these documents may be freely distributed without recieving prior express authority. - --Zoinkity diff --git a/notes/GE Documentation/Main Menus/7F01A61C - menu initialization and interface handler.txt b/notes/GE Documentation/Main Menus/7F01A61C - menu initialization and interface handler.txt deleted file mode 100644 index 70e0fe0..0000000 --- a/notes/GE Documentation/Main Menus/7F01A61C - menu initialization and interface handler.txt +++ /dev/null @@ -1,660 +0,0 @@ -7F01A61C 4F14C menu initialization and interface handler -LUI T6,8003 -LW T6,A8C0 (T6) ;T6=8002A8C0: menu.cur -ADDIU SP,SP,FFE8 -ADDIU AT,R0,0017 -BNE T6,AT,7F01A6A4 ;skip if not menu 17: switch menus -SW RA,0014 (SP) -//7F01A634: -LUI T7,8003 -LW T7,A944 (T7) ;T7=8002A944: -LUI T0,8003 -BEQ T7,R0,7F01A674 -NOP -//7F01A648: -JAL 70003C1C ;V0=p->video2.buf -NOP -LUI T8,803E -ADDIU T8,T8,A800 -BNE V0,T8,7F01A6A4 ;branch if not video buffer 2 -ADDIU T9,R0,0001 -LUI AT,8003 -SW T9,A940 (AT) ;1->8002A940: 440x330 -LUI AT,8003 -BEQ R0,R0,7F01A6A4 -SW R0,A944 (AT) ;0->8002A944: -//7F01A674: set flags for Spectrum -LW T0,A948 (T0) -BEQ T0,R0,7F01A6A4 ;branch if not emulating Spectrum -NOP -JAL 70003C1C ;V0=p->video2.buf -NOP -LUI T1,803B -ADDIU T1,T1,5000 -BNE V0,T1,7F01A6A4 ;branch if not video buffer 1 -LUI AT,8003 -SW R0,A940 (AT) ;0->8002A940: 320x240 -LUI AT,8003 -SW R0,A948 (AT) ;0->8002A948: reset Spectrum emulation flag -//7F01A6A4: -LUI T2,8003 -LW T2,A940 (T2) ;T2=8002A940: screen size -LUI AT,8005 -BEQ T2,R0,7F01A734 -NOP -JAL 70003C1C ;V0=p->video2.buf -NOP -LUI T3,803E -ADDIU T3,T3,A800 -BNE V0,T3,7F01A6D8 ;branch if not video buffer 2 -LUI A0,8003 -JAL 70003C3C ;A0->video2.buf -LW A0,A954 (A0) ;A0=8002A954: -//7F01A6D8: 440x330 -LUI AT,8005 -JAL 70004590 -LWC1 F12,1B44 (AT) ;F12=80051B44: -ADDIU A0,R0,01B8 ;A0=txtClipW -JAL 700043F8 ;set video2 text clip width (A0) and height (A1) -ADDIU A1,R0,014A ;A1=txtClipH -ADDIU A0,R0,01B8 -JAL 700043B4 -ADDIU A1,R0,014A -ADDIU A0,R0,01B8 -JAL 7F09B1DC ;set cur.player screen width (A0) and height (A1) -ADDIU A1,R0,014A -ADDIU A0,R0,01B8 -JAL 7000443C ;set video2 width (A0) and height (A1) -ADDIU A1,R0,014A -OR A0,R0,R0 -JAL 7F09B1F8 ;set cur.player viewport width (A0) and height (A1) -OR A1,R0,R0 -OR A0,R0,R0 ;ulx = 0 -JAL 700044BC ;set video2 ulx (A0) and uly (A1) -OR A1,R0,R0 ;uly = 0 -BEQ R0,R0,7F01A784 -NOP -//7F01A734: 320x240 -JAL 70004590 -LWC1 F12,1B48 (AT) ;F12=80051B48: -ADDIU A0,R0,0140 -JAL 700043F8 ;set video2 text clip width (A0) and height (A1) -ADDIU A1,R0,00F0 -ADDIU A0,R0,0140 -JAL 700043B4 -ADDIU A1,R0,00F0 -ADDIU A0,R0,0140 -JAL 7F09B1DC ;set cur.player screen width (A0) and height (A1) -ADDIU A1,R0,00F0 -ADDIU A0,R0,0140 -JAL 7000443C ;set video2 width (A0) and height (A1) -ADDIU A1,R0,00F0 -OR A0,R0,R0 -JAL 7F09B1F8 ;set cur.player viewport width (A0) and height (A1) -OR A1,R0,R0 -OR A0,R0,R0 ;ulx = 0 -JAL 700044BC ;set video2 ulx (A0) and uly (A1) -OR A1,R0,R0 ;uly = 0 -//7F01A784: -LUI V0,8003 -LW V0,A8C4 (V0) ;V0=8002A8C4: menu.update -LUI A0,8003 -ADDIU A0,A0,A8C0 -BGEZ V0,7F01A7A8 ;branch if set -LUI T4,8003 -LW T4,A8C8 (T4) ;T4=8002A8C8: -BLTZ T4,7F01AA80 ;skip if not set -NOP -//7F01A7A8: run on menu update -LW V1,0000 (A0) ;V1=8002A8C0: menu.cur -ADDIU AT,R0,0017 -BEQ V1,AT,7F01AA80 ;branch if menu 17: update (does not update menu.cur) -SLTIU AT,V1,001A -BEQ AT,R0,7F01AA70 -SLL T5,V1,0x2 -LUI AT,8005 -ADDU AT,AT,T5 -LW T5,1B4C (AT) ;T5=80051B4C+offset: -JR T5 -NOP -//7F01A7D4: menu 00 update -JAL 7F00A6B0 -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 ;A0=8002A8C0: p->menu.update -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) ;V0=8002A8C4: -//7F01A7F0: menu 01 update -JAL 7F00ACA4 -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A80C: menu 02 update -JAL 7F00B0A4 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A828: menu 03 update -JAL 7F00B190 -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A844: menu 04 update -JAL 7F00B304 ;set menus have run flag and ignore title splash on skip -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A860: menu 05 update -JAL 7F00BAE0 -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A87C: menu 06 update -JAL 7F00D290 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A898: menu 07 update -JAL 7F00DEB0 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A8B4: menu 08 update -JAL 7F00E7B8 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A8D0: menu 09 update -JAL 7F00F36C ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A8EC: menu 0A update -JAL 7F015640 -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A908: menu 0C update -JAL 7F016108 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A924: menu 0D update -JAL 7F0166D0 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A940: menu 0E update -JAL 7F010840 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A95C: menu 13 update -JAL 7F0147B0 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A978: menu 0F update -JAL 7F011ECC ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A994: menu 14 update -JAL 7F014D40 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A9B0: menu 10 update -JAL 7F012EBC ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A9CC: menu 11 update -JAL 7F013600 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01A9E8: menu 12 update -JAL 7F013DCC ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01AA04: menu 15 update -JAL 7F017BF4 -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01AA20: menu 16 update -JAL 7F018440 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) -//7F01AA3C: menu 18 update -JAL 7F018F18 -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -BEQ R0,R0,7F01AA70 -LW V0,A8C4 (V0) ;V0=8002A8C4: menu.update -//7F01AA58: menu 19 update -JAL 7F01A480 ;unconditional return -NOP -LUI V0,8003 -LUI A0,8003 -ADDIU A0,A0,A8C0 -LW V0,A8C4 (V0) ;V0=8002A8C4: menu.update -//7F01AA70: set to switch menus and reset counter unless already set to do so; menu 0B unhandled -BLTZ V0,7F01AA80 -ADDIU T6,R0,0017 -JAL 7F00AAEC ;0->menu timer -SW T6,0000 (A0) ;17->8002A8C0: menu.cur = switch screens -//7F01AA80: -LUI V0,8003 -LW V0,A8C8 (V0) -LUI A0,8003 -ADDIU A0,A0,A8C0 -BLTZ V0,7F01ACB8 -ADDIU T7,R0,FFFF -SW V0,0000 (A0) -LUI AT,8003 -SW T7,A8C8 (AT) -LW T8,0000 (A0) ;T8=8002A8C0: menu.cur -SLTIU AT,T8,001A -BEQ AT,R0,7F01ACB8 -SLL T8,T8,0x2 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,1BB4 (AT) ;T8=80051BB4+offset: menu initialization handler -JR T8 -NOP -//7F01AAC8: menu 00 initialization -JAL 7F00A5E8 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AADC: menu 01 initialization -JAL 7F00ABC8 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AAF0: menu 02 initialization -JAL 7F00B064 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB04: menu 03 initialization -JAL 7F00B154 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB18: menu 04 initialization -JAL 7F00B258 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB2C: menu 05 initialization -JAL 7F00B9E8 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB40: menu 06 initialization -JAL 7F00D250 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB54: menu 07 initialization -JAL 7F00DE50 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB68: menu 08 initialization -JAL 7F00E780 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB7C: menu 09 initialization -JAL 7F00F300 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AB90: menu 0A initialization -JAL 7F0155F4 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01ABA4: menu 0B initialization -JAL 7F016064 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01ABB8: menu 0C initialization -JAL 7F016094 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01ABCC: menu 0D initialization -JAL 7F01667C -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01ABE0: menu 0E initialization -JAL 7F01073C -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01ABF4: menu 13 initialization -JAL 7F014764 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC08: menu 0F initialization -JAL 7F011C3C -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC1C: menu 14 initialization -JAL 7F014CC0 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC30: menu 10 initialization -JAL 7F012E30 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC44: menu 11 initialization -JAL 7F013574 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC58: menu 12 initialization -JAL 7F013D78 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC6C: menu 15 initialization -JAL 7F017B50 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC80: menu 16 initialization -JAL 7F018438 -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01AC94: menu 18 initialization -JAL 7F01869C -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 -//7F01ACA8: menu 19 initialization -JAL 7F01A39C -NOP -LUI A0,8003 -ADDIU A0,A0,A8C0 -//7F01ACB8: (note: menu 17 has no initialization) -LW T9,0000 (A0) -SLTIU AT,T9,001A -BEQ AT,R0,7F01AEEC -SLL T9,T9,0x2 -LUI AT,8005 -ADDU AT,AT,T9 -LW T9,1C1C (AT) ;T9=80051C1C+offset: menu interface handler -JR T9 -NOP -//7F01ACDC: menu 00 interface reroute -JAL 7F00A6DC -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ACEC: menu 17 interface reroute -JAL 7F00AB00 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ACFC: menu 01 interface reroute -JAL 7F00ACC8 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD0C: menu 02 interface reroute -JAL 7F00B0AC -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD1C: menu 03 interface reroute -JAL 7F00B1B0 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD2C: menu 04 interface reroute -JAL 7F00B330 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD3C: menu 05 interface reroute -JAL 7F00BBCC -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD4C: menu 06 interface reroute -JAL 7F00D298 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD5C: menu 07 interface reroute -JAL 7F00DEB8 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD6C: menu 08 interface reroute -JAL 7F00E7C0 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD7C: menu 09 interface reroute -JAL 7F00F374 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD8C: menu 0A interface reroute -JAL 7F01569C -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AD9C: menu 0C interface reroute -JAL 7F016110 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ADAC: menu 0D interface reroute -JAL 7F0166D8 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ADBC: menu 0E interface reroute -JAL 7F010848 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ADCC: menu 13 interface reroute -JAL 7F0147B8 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ADDC: menu 0F interface reroute -JAL 7F011ED4 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ADEC: menu 14 interface reroute -JAL 7F014D48 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01ADFC: menu 10 interface reroute -JAL 7F012EC4 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE0C: menu 11 interface reroute -JAL 7F013608 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE1C: menu 12 interface reroute -JAL 7F013DD4 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE2C: menu 15 interface reroute -JAL 7F017C88 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE3C: menu 16 interface reroute -JAL 7F018448 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE4C: menu 18 interface reroute -JAL 7F018F60 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE5C: menu 19 interface reroute -JAL 7F01A488 -NOP -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE6C: menu 0B interface -JAL 7F0BFCA4 -NOP -BEQ V0,R0,7F01AE90 ;gameplay returns True if replaying ramrom -LUI T0,8003 -OR A0,R0,R0 ;A0=menu 00: legal screen -JAL 7F01A5D4 ;set to menu A0 in mode A1 -ADDIU A1,R0,0001 ;A1= on return -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE90: if multiplayer return to MP options screen -LW T0,A8F0 (T0) ;T0=8002A8F0: mode -ADDIU AT,R0,0001 -ADDIU A0,R0,000E ;A0=menu 0E: multiplayer options -BNE T0,AT,7F01AEB4 ;branch if not multiplayer mode (1) -LUI T1,8003 -JAL 7F01A5D4 ;set to menu A0 in mode A1 -ADDIU A1,R0,0001 ;A1= on return -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AEB4: test following with end cutscene or mission status -LW T1,A8F4 (T1) ;T1=8002A8F4: stage# -ADDIU AT,R0,0036 -ADDIU A0,R0,000C ;A0=menu 0C: mission failed -BNE T1,AT,7F01AEE4 ;branch if not Cuba (36) -NOP -//7F01AEC8: end cutscene gets the extended casting call -JAL 7F018670 ;if A0 TRUE, play extended actor intro [8002B5FC] and do not play intro movie [8002B5E8] -ADDIU A0,R0,0001 ;A0= True -ADDIU A0,R0,0018 ;A0=menu 18: casting call -JAL 7F01A5D4 ;set to menu A0 in mode A1 -ADDIU A1,R0,0001 ;A1= on return -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AEE4: set mission failed -JAL 7F01A5D4 ;set to menu A0 in mode A1 -ADDIU A1,R0,0001 ;A1= on return -//7F01AEEC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/7F017C88 - menu 15 interface - cheat menu.TXT b/notes/GE Documentation/Main Menus/Cheat Menu/7F017C88 - menu 15 interface - cheat menu.TXT deleted file mode 100644 index 7e5f9d1..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/7F017C88 - menu 15 interface - cheat menu.TXT +++ /dev/null @@ -1,188 +0,0 @@ -7F017C88: menu 15 (cheat menu) interface -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,1AE4 (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1AE8 (AT) -JAL 70004534 -OR A0,R0,R0 -LUI AT,8003 -SW R0,B5E4 (AT) -OR A0,R0,R0 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,A000 -BNEZ V0,7F017E04 -LUI AT,8003 -SW R0,A8E4 (AT) -LUI AT,8003 -SW R0,A8E0 (AT) -LUI AT,8003 -SW R0,A8DC (AT) -LUI AT,8003 -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -SW R0,B5E0 (AT) -BEQ V0,R0,7F017D1C -LUI A1,8003 -ADDIU T6,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F017E04 -SW T6,A8E4 (AT) -LW A1,B5DC (A1) -LUI T1,8003 -SLTI AT,A1,000D -BNEZ AT,7F017D9C -LUI AT,8003 -LWC1 F4,A908 (AT) -ADDIU V1,A1,FFF3 -TRUNC.W.S F6,F4 -MFC1 T8,F6 -NOP -SLTI AT,T8,00DC -BNEZ AT,7F017D9C -NOP -BLTZ V1,7F017D9C -LUI AT,8003 -LWC1 F8,A90C (AT) -SLL V0,V1,0x2 -ADDU V0,V0,V1 -TRUNC.W.S F10,F8 -SLL V0,V0,0x2 -ADDIU V0,V0,0035 -MFC1 A0,F10 -NOP -SLT AT,A0,V0 -BNEZ AT,7F017D90 -ADDIU T0,V1,000C -LUI AT,8003 -BEQ R0,R0,7F017D9C -SW T0,B5E0 (AT) -ADDIU V1,V1,FFFF -BGEZ V1,7F017D78 -ADDIU V0,V0,FFEC -LW T1,B5E0 (T1) -SLTI AT,A1,000D -BNEL T1,R0,7F017E08 -OR A0,R0,R0 -BNEZ AT,7F017DBC -ADDIU V1,A1,FFFF -BEQ R0,R0,7F017DBC -ADDIU V1,R0,000B -BLTZ V1,7F017E04 -LUI AT,8003 -LWC1 F16,A90C (AT) -SLL V0,V1,0x2 -ADDU V0,V0,V1 -TRUNC.W.S F18,F16 -SLL V0,V0,0x2 -ADDIU V0,V0,0035 -MFC1 A0,F18 -NOP -SLT AT,A0,V0 -BNEZ AT,7F017DF8 -LUI AT,8003 -BEQ R0,R0,7F017E04 -SW V1,B5E0 (AT) -ADDIU V1,V1,FFFF -BGEZ V1,7F017DE4 -ADDIU V0,V0,FFEC -//7F017E04: detect if option selected -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,A000 ;A1=A, Z buttons -BEQ V0,R0,7F017E5C ;branch if entry not selected -OR A0,R0,R0 ;A0=0 -//7F017E18: toggle cheat option -LUI T3,8003 -LW T3,A8E4 (T3) ;T3=8002A8E4: TRUE if folder tab 3 highlighted -LUI A0,8006 -ADDIU A1,R0,00C7 ;A1=0xC7 -BEQ T3,R0,7F017E40 ;branch if not hovering over folder tab 3 -OR A2,R0,R0 ;A2=0 -ADDIU T4,R0,0001 ;T4=1 -LUI AT,8003 -BEQ R0,R0,7F017E4C ;tab selected (back) -SW T4,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected -//7F017E40: option selected -ADDIU T5,R0,0001 -LUI AT,8003 -SW T5,B5E4 (AT) ;1->8002B5E4: TRUE when option selected -//7F017E4C: -JAL 70008E08 -LW A0,3720 (A0) ;A0=80033720: ??? -BEQ R0,R0,7F017E88 -NOP -//7F017E5C: -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=B Button -BEQ V0,R0,7F017E88 -ADDIU T6,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW T6,A8D8 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -//7F017E88: -LUI A0,8003 -JAL 7F00B724 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0: item #: tabs on side of folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,002A ;A1=0x2A -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1 -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0006 ;A1=6 -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1 -JAL 7F009B84 -NOP -LUI T7,8003 -LW T7,A8D8 (T7) ;T7=8002A8D8: -ADDIU A0,R0,0006 ;A0=6 -LUI T8,8003 -BEQ T7,R0,7F017F0C -NOP -JAL 7F01A5D4 -OR A1,R0,R0 -LUI A0,8003 -JAL 7F00D7FC -LW A0,A8F0 (A0) -BEQ R0,R0,7F017F50 -LW RA,0014 (SP) -LW T8,B5E4 (T8) -LUI T9,8003 -BEQL T8,R0,7F017F50 -LW RA,0014 (SP) -LW T9,B5E0 (T9) -LUI V1,8007 -LUI T1,8007 -SLL T0,T9,0x2 -ADDU V1,V1,T0 -LW V1,97F0 (V1) -ADDIU T1,T1,96A0 -ADDIU T3,R0,0001 -ADDU V0,V1,T1 -LBU T2,0000 (V0) -SUBU T4,T3,T2 -SB T4,0000 (V0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/7F017F5C - menu 15 constructor - cheat menu.TXT b/notes/GE Documentation/Main Menus/Cheat Menu/7F017F5C - menu 15 constructor - cheat menu.TXT deleted file mode 100644 index 6483657..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/7F017F5C - menu 15 constructor - cheat menu.TXT +++ /dev/null @@ -1,329 +0,0 @@ -relies on several tables: - -80069650 table of bytes indicating if cheat unlocked -800696A0 table of bytes indicating if cheat activated -800697F0 table of word values indicating which cheats appear in menu - -7F017F5C: menu 15 (cheat menu) constructor - accepts: A0=? -ADDIU SP,SP,FF68 -SW RA,005C (SP) -SW S8,0058 (SP) -SW S7,0054 (SP) -SW S6,0050 (SP) -SW S5,004C (SP) -SW S4,0048 (SP) -SW S3,0044 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 ;A1=0: -OR A2,R0,R0 ;A2=0: -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 ;A3=0: -JAL 70003EF8 -OR A0,V0,R0 ;A0=V0: -JAL 7F00D5E8 -OR A0,V0,R0 ;A0=V0: -JAL 7F0ACD98 -OR A0,V0,R0 ;A0=V0: -LUI V1,8003 -LW V1,B5DC (V1) ;V1=8002B5DC: total unlocked cheats -OR S4,V0,R0 ;S4=V0: -OR S8,R0,R0 ;S8=0 -SLTI AT,V1,000D ;AT=TRUE if 12 or fewer cheats (more than one column) -BNEZ AT,7F017FD4 ;branch if one column -OR S1,V1,R0 ;S1=V1: #unlocked -BEQ R0,R0,7F017FD4 -ADDIU S1,R0,000C ;S1=C -//7F017FD4: draw first column -BLEZ S1,7F0181F0 ;branch if stupid number of entries -SLL T6,S8,0x2 ;T6=cur->offset -SLL S5,S8,0x2 -ADDU S5,S5,S8 -LUI T7,8007 -ADDIU T7,T7,97F0 ;T7=800697F0: table of cheat entries appearing in the cheat folder -SLL S5,S5,0x2 ;S5=cur*0x14: y offset for each entry -LUI S7,8004 -LUI S6,8004 -ADDIU S6,S6,0EB8 ;S6=80040EB8: [80169534] ? table of entries 0x14 in size -ADDIU S7,S7,0EB4 ;S7=80040EB4: [80169290] ? table -ADDIU S5,S5,0035 ;S5=cur*0x14 + 0x35: add base y position -ADDU S3,T6,T7 ;S3=800697F0+offset: cheat register -//7F018008: -JAL 7F092774 ;V0= p->text for cheat A0 -LW A0,0000 (S3) ;A0=cheat toggle -LW T8,0000 (S7) -OR S2,V0,R0 -ADDIU A0,SP,0080 -ADDIU A1,SP,007C -OR A2,V0,R0 -LW A3,0000 (S6) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T8,0010 (SP) -LUI T9,8003 -LW T9,B5E0 (T9) ;T9=8002B5E0: -ADDIU V0,R0,0037 ;V0=0x37: x position -SW V0,0088 (SP) ;SP+88= x position -BNE S8,T9,7F018090 -SW S5,0084 (SP) ;SP+84= y position -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -NOP -BNEZ V0,7F018090 -LW V1,0084 (SP) ;V1=SP+84: y position -LW V0,0088 (SP) ;V0=SP+88: x position -LW T0,007C (SP) ;T0=SP+7C: width of text? -ADDIU T1,V1,000E ;T1=y pos+0xE: bottom of "text box" -ADDIU T2,R0,0032 ;T2=0x32: x position -5, accounting for left border -ADDU A3,V0,T0 ;A3=x position + str width -ADDIU A3,A3,0005 ;A3+=5: right border -SW T2,0014 (SP) ;SP+14=T2: left x position -SW T1,0010 (SP) ;SP+10=T1: bottom y pos -OR A0,S4,R0 ;A0=S4: p->DL target -ADDIU A2,V1,FFFF ;A2=V1-1: upper y pos, accounting for upper border -JAL 7F0AD014 ;generates display list... -ADDIU A1,V0,FFFE ;A1=V0-2: x pos -2, accounting for border -OR S4,V0,R0 ;S4=V0: new DL target -//7F018090: -JAL 7000441C -NOP -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C -OR S0,T3,R0 -LW T4,0000 (S6) -LW T5,0000 (S7) -ADDIU T6,R0,00FF -SW T6,0018 (SP) -OR A0,S4,R0 -ADDIU A1,SP,0088 ;A1=SP+88: p->x position -ADDIU A2,SP,0084 ;A2=SP+84: p->y position -OR A3,S2,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0010 (SP) -JAL 7F009760 ;load palette and display text -SW T5,0014 (SP) -LW T7,0000 (S3) -LUI T8,8007 -OR S4,V0,R0 -ADDU T8,T8,T7 -LBU T8,96A0 (T8) ;T8=800696A0+offset: TRUE if cheat ON -ORI S1,R0,9C74 ;S1=text ID 9C74: "OFF\n" -BEQ T8,R0,7F01810C -NOP -BEQ R0,R0,7F01810C -ORI S1,R0,9C73 ;S1=text ID 9C73: "ON\n" -//7F01810C: -JAL 7F0C1DD8 ;V0=p->text ID -OR A0,S1,R0 ;A0=S1: text ID to display -LW T9,0000 (S7) -OR S2,V0,R0 -ADDIU A0,SP,0080 -ADDIU A1,SP,007C -OR A2,V0,R0 -LW A3,0000 (S6) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T9,0010 (SP) -LW T0,0000 (S3) -LUI T1,8007 -ADDIU V0,R0,00B3 -ADDU T1,T1,T0 -LBU T1,96A0 (T1) ;T1=800696A0+offset: TRUE if cheat ON -SW V0,0088 (SP) -SW S5,0084 (SP) -BEQ T1,R0,7F018168 ;branch if OFF -ADDIU S1,R0,00FF ;S1=000000FF: black -LUI S1,A000 -BEQ R0,R0,7F018168 ;S1=A00000FF if ON: red -ORI S1,S1,00FF -//7F018168: -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LW T3,0000 (S6) -LW T4,0000 (S7) -OR A0,S4,R0 ;A0=S4: p->DL target -ADDIU A1,SP,0088 ;A1=SP+88: p->x pos -ADDIU A2,SP,0084 ;A2=SP+84: p->y pos -OR A3,S2,R0 ;A3=S2: p->text -SW S1,0018 (SP) ;SP+18=S1: font colour -SW S0,001C (SP) ;SP+1C=S0: maximum width (always writes first entry) -SW V0,0020 (SP) ;SP+20=V0: maximum height (always writes first entry) -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T3,0010 (SP) ;SP+10=T3: p->second font table? -JAL 7F009760 ;writes text to screen -SW T4,0014 (SP) ;SP+14=T4: p->first font table? -//7F0181B8: detect if second column applicable -LUI V1,8003 -LW V1,B5DC (V1) -ADDIU S8,S8,0001 -ADDIU S3,S3,0004 -SLTI AT,V1,000D -ADDIU S5,S5,0014 -BNEZ AT,7F0181E0 -OR S4,V0,R0 -BEQ R0,R0,7F0181E4 -ADDIU S1,R0,000C -//7F0181E0: -OR S1,V1,R0 -//7F0181E4: -SLT AT,S8,S1 -BNEZ AT,7F018008 -NOP -//7F0181F0: -LUI S6,8004 -LUI S7,8004 -SLTI AT,V1,000D -ADDIU S7,S7,0EB4 -BNEZ AT,7F0183F8 ;branch if no cheats will appear in column 2 -ADDIU S6,S6,0EB8 -ADDIU T5,V1,FFF4 -BLEZ T5,7F0183F8 -OR S8,R0,R0 -LUI S3,8007 -ADDIU S3,S3,97F0 ;T7=800697F0: table of cheat entries appearing in the cheat folder -ADDIU S5,R0,0035 ;S5=0x35 -JAL 7F092774 ;V0= p->text for cheat A0 -LW A0,0030 (S3) -LW T6,0000 (S7) -OR S2,V0,R0 -ADDIU A0,SP,0080 -ADDIU A1,SP,007C -OR A2,V0,R0 -LW A3,0000 (S6) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T6,0010 (SP) -LUI T8,8003 -LW T8,B5E0 (T8) -ADDIU V0,R0,00DC -ADDIU T7,S8,000C -SW V0,0088 (SP) -BNE T7,T8,7F0182AC -SW S5,0084 (SP) -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -NOP -BNEZ V0,7F0182AC -LW V1,0084 (SP) -LW V0,0088 (SP) -LW T9,007C (SP) -ADDIU T0,V1,000E -ADDIU T1,R0,0032 -ADDU A3,V0,T9 -ADDIU A3,A3,0005 -SW T1,0014 (SP) -SW T0,0010 (SP) -OR A0,S4,R0 -ADDIU A2,V1,FFFF -JAL 7F0AD014 -ADDIU A1,V0,FFFE -OR S4,V0,R0 -JAL 7000441C -NOP -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C -OR S0,T2,R0 -LW T3,0000 (S6) -LW T4,0000 (S7) -ADDIU T5,R0,00FF -SW T5,0018 (SP) -OR A0,S4,R0 -ADDIU A1,SP,0088 -ADDIU A2,SP,0084 -OR A3,S2,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0010 (SP) -JAL 7F009760 -SW T4,0014 (SP) -LW T6,0030 (S3) -LUI T7,8007 -OR S4,V0,R0 -ADDU T7,T7,T6 -LBU T7,96A0 (T7) ;T7=800696A0+offset: TRUE if "ON" -ORI S1,R0,9C74 ;S1=text ID 9C74: "OFF\n" -BEQ T7,R0,7F018328 -NOP -BEQ R0,R0,7F018328 -ORI S1,R0,9C73 ;S1=text ID 9C73: "ON\n" -//7F018328: -JAL 7F0C1DD8 ;V0=p->text -OR A0,S1,R0 ;A0=S1: text ID -LW T8,0000 (S7) -OR S2,V0,R0 -ADDIU A0,SP,0080 -ADDIU A1,SP,007C -OR A2,V0,R0 -LW A3,0000 (S6) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T8,0010 (SP) -LW T9,0030 (S3) -LUI T0,8007 -ADDIU V0,R0,0158 -ADDU T0,T0,T9 -LBU T0,96A0 (T0) -SW V0,0088 (SP) -SW S5,0084 (SP) -BEQ T0,R0,7F018384 -ADDIU S1,R0,00FF -LUI S1,A000 -BEQ R0,R0,7F018384 -ORI S1,S1,00FF -JAL 7000441C -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C -OR S0,T1,R0 -LW T2,0000 (S6) -LW T3,0000 (S7) -OR A0,S4,R0 -ADDIU A1,SP,0088 -ADDIU A2,SP,0084 -OR A3,S2,R0 -SW S1,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0010 (SP) -JAL 7F009760 -SW T3,0014 (SP) -LUI T4,8003 -LW T4,B5DC (T4) -ADDIU S8,S8,0001 -ADDIU S3,S3,0004 -ADDIU T5,T4,FFF4 -SLT AT,S8,T5 -ADDIU S5,S5,0014 -BNEZ AT,7F018220 -OR S4,V0,R0 -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,S4,R0 -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 -LW RA,005C (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -LW S4,0048 (SP) -LW S5,004C (SP) -LW S6,0050 (SP) -LW S7,0054 (SP) -LW S8,0058 (SP) -JR RA -ADDIU SP,SP,0098 diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/Activate Cheats.txt b/notes/GE Documentation/Main Menus/Cheat Menu/Activate Cheats.txt deleted file mode 100644 index 45972ba..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/Activate Cheats.txt +++ /dev/null @@ -1,1026 +0,0 @@ -7F091B64 C6694 activate cheat A0 -SLL T6,A0,0x4 ;T6=cheat#*0x10 -LUI T7,8004 -ADDU T7,T7,T6 -LW T7,F808 (T7) ;T7=8003F808+offset: last word of cheat entry: cheat.flag -ADDIU SP,SP,FFC0 -SW RA,0014 (SP) -SW A0,0040 (SP) ;SP+40=A0: cheat# -JAL 7F09B150 ;V0=cur.player# -SW T7,003C (SP) ;SP+3C=T7: cheat.flags -JAL 7F09A464 ;V0=# players -SW V0,0038 (SP) ;SP+38=V0: cur.player# -LW V1,003C (SP) ;V1=cheat.flags -LW A2,0040 (SP) ;A2=cheat# -SW V0,0034 (SP) ;SP+34=#players -ANDI T8,V1,0010 -BNEZ T8,7F091BEC ;branch if 0x10 flag set: do not set activation flag -ANDI T9,V1,0020 -BNEZ T9,7F091BD4 ;branch if 0x20 flag set: set all player flags -LW A1,0038 (SP) ;A1=cur.player# -//7F091BB0 -LUI T1,8008 -ADDIU T1,T1,9E30 -ADDU V1,A2,T1 ;V1=p->cheat activation flag -LBU T2,0000 (V1) ;T2=activation flag -ADDIU T3,R0,0001 -SLLV T4,T3,A1 ;T4=1<txt -ORI A0,R0,B010 -JAL 7F08A3C8 display l. txt -OR A0,V0,R0 -JAL 7F08C29C sets cur. player all-gun flag to A0 - LUI T6,8008 - LW T6,A0B0 (T6) - JR RA - SW A0,11EC (T6) -ADDIU A0,R0,0001 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091C80 C67B0 Max. Ammo -JAL 7F0C1DD8 ret p->txt -ORI A0,R0,B011 -JAL 7F08A3C8 disp l. txt -OR A0,V0,R0 -JAL 7F0692F0 ;set ammo ammo for all types -NOP -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -7F0692F0 9DE20 set max ammo for all types -ADDIU SP,SP,FFD8 -SW S1,001C (SP) -SW S2,0020 (SP) -SW S0,0018 (SP) -LUI S1,8003 -SW RA,0024 (SP) -ADDIU S1,S1,5EF0 S1=80035EF0: max ammo totals -OR S0,R0,R0 -ADDIU S2,R0,001E do 1E ammo types -//0x9DE44 iterate through each ammo type and copy! -OR A0,S0,R0 ;A0=type -JAL 7F069130 ;add ammo type A0, amount A1 to inventory -LW A1,0000 (S1) ;A1=80035EF0+offset: max ammo for type -ADDIU S0,S0,0001 -BNE S0,S2,0x9DE44 -ADDIU S1,S1,000C next ammo counter -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -+-+ - -7F091CA0 C67D0 deactivates invincibility for all players in multiplayer stages -SLTI AT,V0,0002 -BNEZ AT,7F092428 ;quit if solo -SW R0,002C (SP) -BLEZ V0,0xC6834 -SW R0,0030 (SP) -//0xC67E4: -LW A1,0038 (SP) -LW T1,0030 (SP) -BEQ T1,A1,0xC6818 -NOP -JAL 7F09B10C sets cur. player data pointers to pl. #A0 - SLL T6,A0,0x2 T6=PLAYER# * 4 - LUI T7,8008 - ADDU T7,T7,T6 - LW T7,9EE0 (T7) T7=PLAYERDATA - LUI AT,8008 - SW A0,A0B8 (AT) save current player # - SLL T8,A0,0x3 - LUI AT,8008 - SUBU T8,T8,A0 - LUI T9,8008 - ADDIU T9,T9,9EF0 - SLL T8,T8,0x4 T8=player# * 0x70 - SW T7,A0B0 (AT) set playerdata as current - LUI AT,8008 - ADDU T0,T8,T9 - JR RA - SW T0,A0B4 (AT) set player stats as current -OR A0,T1,R0 -JAL 7F089F58 ;ret. V0=cur. invincibility flag -NOP -BEQ V0,R0,0xC6818 ;quit if already untoggled -OR A0,R0,R0 -ADDIU T3,R0,0001 -JAL 7F089F48 untoggle invincibility flag - LUI T6,8008 - LW T6,A0B0 (T6) - JR RA - SB A0,12B6 (T6) -SW T3,002C (SP) -//0xC6818: -JAL 7F09B10C ;sets cur. player data pointers to pl. #A0 -LW A0,0038 (SP) -LW T2,0030 (SP) -LW T5,0034 (SP) -ADDIU T4,T2,0001 -BNE T4,T5,0xC67E4 -SW T4,0030 (SP) -//0xC6818: -LW T6,002C (SP) -LUI A0,8006 -ADDIU A1,R0,009F ;A1=SE 09F: beep -BEQ T6,R0,7F092428 ;branch if didn't nerf players -OR A2,R0,R0 ;A2=NULL -JAL 70008E08 ;play sound effect A1 -LW A0,3720 (A0) ;A0=80063720: buffer -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091D28 0xC6858 Line Mode -JAL 7F090FE8 - LUI AT,8003 - JR RA - SW A0,6FA8 (AT) A0->80036FA8 -ADDIU A0,R0,0001 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091D38 0xC6868 Super 2x Health -LUI V0,8008 -LW V0,A0B0 (V0) V0=cur. playerdata -LUI AT,3F80 -MTC1 AT,F4 -LWC1 F6,2A3C (V0) F6=cur. player's health? No... -LUI AT,3F80 -C.EQ.S F4,F6 -NOP -BC1T 0xC68AC -NOP -LWC1 F8,00DC (V0) F8=cur. player's health? -MTC1 AT,F10 -NOP -C.LT.S F8,F10 -NOP -BC1FL 7F09242C -LW RA,0014 (SP) -//0xC68AC: -JAL 7F0C1DD8 ret. p->txt -ORI A0,R0,B012 -JAL 7F08A3C8 disp. l. txt -OR A0,V0,R0 -LUI AT,3F80 -LUI T7,8008 -LW T7,A0B0 (T7) T7=cur. player data -MTC1 AT,F16 -LUI AT,4000 -LUI T8,8008 -SWC1 F16,00DC (T7) 1.0->cur. health? -LW T8,A0B0 (T8) -MTC1 AT,F18 -BEQ R0,R0,7F09242C -SWC1 F18,2A3C (T8) 2.0->cur. health? - -+-+ - -7F091DB8 0xC68E8 Super 2x Body Armor -LUI V0,8008 -LW V0,A0B0 (V0) V0=cur. playerdata -LUI AT,3F80 -MTC1 AT,F0 -LWC1 F4,2A40 (V0) F6=cur. player's BA? -C.EQ.S F0,F4 -NOP -BC1T 0xC6920 -NOP -LWC1 F6,00E0 (V0) F6=cur. player's BA? -C.LT.S F6,F0 -NOP -BC1FL 7F09242C -LW RA,0014 (SP) -//0xC6920: -JAL 7F0C1DD8 ret. p->txt -ORI A0,R0,B013 -JAL 7F08A3C8 disp. l. txt -OR A0,V0,R0 -LUI V0,8008 -LW V0,A0B0 (V0) V0=cur. player data -LUI AT,3F80 -MTC1 AT,F8 -LUI AT,4000 -MTC1 AT,F10 -SWC1 F8,00E0 (T9) 1.0->cur. BA? -LW T1,0000 (V0) -BEQ R0,R0,7F09242C -SWC1 F10,2A40 (T1) 2.0->cur. BA? - -+-+ - -7F091E2C 0xC695C Invisibility -JAL 7F089F74 - LUI V0,8003 - JR RA - LW V0,64C4 (V0) -NOP -BEQL V0,R0,7F09242C -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B014 -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F089F68 - LUI AT,8003 - JR RA - SW A0,64C4 (AT) -OR A0,R0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091E5C 0xC698C Infinite Ammo -JAL 7F0C1DD8 -ORI A0,R0,B016 -JAL 7F08A3C8 -OR A0,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091E74 0xC69A4 DK Mode -JAL 7F0C1DD8 -ORI A0,R0,B017 -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F0927F4 ;does stuff. somewhat long -ADDIU A0,R0,0001 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091E94 0xC69C4 Extra Weapons -ADDIU AT,R0,0001 -BNEL V0,AT,7F09242C -LW RA,0014 (SP) -JAL 7F08C488 add magnum (A0) to inventory -ADDIU A0,R0,0012 -SW V0,0028 (SP) -JAL 7F08C488 add laser to inventory -ADDIU A0,R0,0016 -LW T3,0028 (SP) -ADDIU A0,R0,0013 -ADDU T2,T3,V0 -JAL 7F08C488 add golden gun to inventory -SW T2,0028 (SP) -LW T4,0028 (SP) -ADDIU A0,R0,0014 -ADDU T5,T4,V0 -JAL 7F08C488 add silver pp7 to inventory -SW T5,0028 (SP) -LW T6,0028 (SP) -ADDIU A0,R0,0015 -ADDU T7,T6,V0 -JAL 7F08C488 add gold pp7 to inventory -SW T7,0028 (SP) -LW T8,0028 (SP) -ADDIU A0,R0,000C A0=magnum ammo -ADDU T9,T8,V0 -JAL 7F0692D4 -SW T9,0028 (SP) -ADDIU A0,R0,000C A0=magnum ammo -JAL 7F069130 -OR A1,V0,R0 -JAL 7F0692D4 -ADDIU A0,R0,000D A0=golden ammo -ADDIU A0,R0,000D A0=golden ammo -JAL 7F069130 -OR A1,V0,R0 -JAL 7F0692D4 -ADDIU A0,R0,0001 A0=9mm ammo -ADDIU A0,R0,0001 A0=9mm ammo -JAL 7F069130 -OR A1,V0,R0 -LW T1,0028 (SP) -BLEZL T1,7F09242C -LW RA,0014 (SP) -JAL 7F0C1DD8 ret. p->txt -ORI A0,R0,B018 -JAL 7F08A3C8 disp l. txt -OR A0,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091F5C 0xC6A8C Tiny Bond -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 ;quit if MP -LUI T3,8008 -LW T3,A0B4 (T3) -LUI AT,3F80 -MTC1 AT,F16 -LWC1 F18,0064 (T3) ;F18=player perspective -C.EQ.S F16,F18 -NOP -BC1FL 7F09242C ;quit if already set -LW RA,0014 (SP) -JAL 7F0C1DD8 ;ret. p->txt -ORI A0,R0,B019 -JAL 7F08A3C8 ;disp l.txt -OR A0,V0,R0 -LUI AT,3F00 -LUI T2,8008 -MTC1 AT,F0 -LW T2,A0B4 (T2) -LUI T4,8008 -SWC1 F0,0064 (T2) ;save 0.5 to player perspective -LW T4,A0B0 (T4) ;T4=current playerdata -LW A0,00D4 (T4) ;A0=pointer to character object instance -BEQL A0,R0,7F09242C -LW RA,0014 (SP) -LWC1 F4,0014 (A0) ;F4=character scale -MUL.S F6,F4,F0 ;1/2 scale to A1 -MFC1 A1,F6 -JAL 7F06CE78 ;saves new character scale -NOP -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091FDC 0xC6B0C Paintball Mode -JAL 7F0C1DD8 -ORI A0,R0,B01A -JAL 7F08A3C8 -OR A0,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F091FF4 0xC6B24 Super x10 Health -LUI V0,8008 -LW V0,A0B0 (V0) -LUI AT,3F80 -MTC1 AT,F0 -LWC1 F8,2A3C (V0) -C.EQ.S F0,F8 -NOP -BC1T 0xC6B5C -NOP -LWC1 F10,00DC (V0) -C.LT.S F10,F0 -NOP -BC1FL 7F09242C -LW RA,0014 (SP) -//0xC6B5C -JAL 7F0C1DD8 -ORI A0,R0,B01B -JAL 7F08A3C8 -OR A0,V0,R0 -LUI V0,8008 -ADDIU V0,V0,A0B0 -LUI AT,3F80 -MTC1 AT,F16 -LW T5,0000 (V0) -LUI AT,4120 -MTC1 AT,F18 -SWC1 F16,00DC (T5) -LW T6,0000 (V0) -BEQ R0,R0,7F092428 -SWC1 F18,2A3C (T6) - -+-+ - -7F092068 0xC6B98 Magnum -ADDIU AT,R0,0001 -BNEL V0,AT,7F09242C -LW RA,0014 (SP) -JAL 7F08C488 -ADDIU A0,R0,0012 -JAL 7F0692D4 ;returns V0=max ammo for type - SLL T6,A0,0x2 - SUBU T6,T6,A0 - SLL T6,T6,0x2 T6=ammo type * 0xC - LUI V0,8003 - ADDU V0,V0,T6 - JR RA - LW V0,5EF0 (V0) V0=max for ammo type -ADDIU A0,R0,000C -ADDIU A0,R0,000C -JAL 7F069130 ;assign max to cur. r.hand weapon (max magnum shells) -OR A1,V0,R0 ;A1=max ammo for type -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - - -7F069130: 9DC60 assigns maximum ammo for current weapon -ADDIU SP,SP,FFD8 -SW S0,0018 (SP) -OR S0,A0,R0 S0=ammo type -SW RA,001C (SP) -SW A1,002C (SP) save ammo total -JAL 7F05D9D0 returns V0= cur. weapon in hand 0-right : 1-left - SLL T7,A0,0x3 - SUBU T7,T7,A0 - SLL T7,T7,0x2 - ADDU T7,T7,A0 - LUI T6,8008 - LW T6,A0B0 (T6) - SLL T7,T7,0x2 - ADDU T7,T7,A0 - SLL T7,T7,0x3 T7=0x3A8 * hand - ADDU T8,T6,T7 - JR RA - LW V0,0870 (T8) V0=weapon# -OR A0,R0,R0 -SW V0,0024 (SP) save -JAL 7F06942C returns V0=ammo type for weapon A0 - ADDIU SP,SP,FFE8 - SW RA,0014 (SP) - JAL 7F05C8B4 returns V0=weapon statistics pointer - SLL T6,A0,0x3 - SUBU T6,T6,A0 - LUI T7,8003 - ADDIU T7,T7,3924 T7=watch/equipment menu - SLL T6,T6,0x3 T6=0x38 * weapon# - ADDU V1,T6,T7 - LW T8,0008 (V1) T8=1 if model/stats present - BNEZ T8,0x91410 - NOP - JR RA - LW V0,000C (V1) V0=weapon statistics - //0x91410: - LUI V0,8003 - ADDIU V0,V0,2494 V0=80032494 (default stats) - JR RA - NOP - NOP - LW RA,0014 (SP) - LW V0,001C (SP) V0=ammo type - ADDIU SP,SP,0018 - JR RA - NOP -OR A0,V0,R0 A0=weapon# -BNE V0,S0,0x9DD08 -LW A0,0024 (SP) -JAL 7F05E0B4 -LUI A1,0020 -BEQ V0,R0,0x9DD08 -LUI V1,8008 -LW V1,A0B0 (V1) -LW T7,002C (SP) -LW T6,089C (V1) -ADDU T8,T6,T7 -SW T8,089C (V1) -JAL 7F05C8B4 -LW A0,0024 (SP) -LUI V1,8008 -LW V1,A0B0 (V1) -LH T9,0020 (V0) -LW T0,089C (V1) -SLT AT,T9,T0 -BEQL AT,R0,0x9DCFC -SLL T3,S0,0x2 -JAL 7F05C8B4 -LW A0,0024 (SP) -LUI T2,8008 -LW T2,A0B0 (T2) -LH T1,0020 (V0) -LUI V1,8008 -SW T1,089C (T2) -LW V1,A0B0 (V1) -SLL T3,S0,0x2 -//0x9DCFC: -ADDU T4,V1,T3 -BEQ R0,R0,0x9DD5C -SW R0,1130 (T4) -//0x9DD08: -SLL T5,S0,0x2 -SUBU T5,T5,S0 -SLL T5,T5,0x2 T5=ammo type * C -LUI V0,8003 -ADDU V0,V0,T5 -LW V1,002C (SP) V1=ammo total (f/ org. arguments) -LW V0,5EF0 (V0) V0=max ammo for type -LUI T6,8008 -LUI T9,8008 -SLT AT,V0,V1 -BEQ AT,R0,0x9DD4C -NOP -LW T6,A0B0 (T6) filled to the brim -SLL T7,S0,0x2 -ADDU T8,T6,T7 -BEQ R0,R0,0x9DD5C -SW V0,1130 (T8) save max ammo to player inventory -//0x9DD4C: save new total after collection -LW T9,A0B0 (T9) -SLL T0,S0,0x2 -ADDU T1,T9,T0 -SW V1,1130 (T1) save new ammo to player inventory -//0x9DD5C: -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -+-+ - -7F092098 0xC6BC8 Laser - -+-+ - -7F0920B4 0xC6BE4 Golden Gun - -+-+ - -7F0920E4 0xC6C14 Silver PP7 - -+-+ - -7F092114 0xC6C44 Gold PP7 - -+-+ - -7F092144 0xC6C74 Invisibility (Multi) -LUI AT,4396 -MTC1 AT,F12 F12=300 -LUI AT,8005 -JAL 7F080A10 - LUI A0,8008 - ADDIU A0,A0,A0B0 - LW V1,0000 (A0) V1=cur. playerdata - LW T6,00A8 (V1) T6=cur. 8006 position - LW V0,0004 (T6) V0=cur. player's guarddata - BEQ V0,R0,0xB55A8 - NOP - MTC1 R0,F4 - LUI AT,4F80 - SWC1 F4,018C (V1) 0->0x18C+playerdata - LW T7,0000 (A0) - SWC1 F12,0190 (T7) 300->0x190+playerdata - LBU T8,000C (V0) - MTC1 T8,F6 - BGEZ T8,0xB558C - CVT.S.W F8,F6 - MTC1 AT,F10 F10=256 - NOP - ADD.S F8,F8,F10 - //0xB558C: - LUI AT,437F - MTC1 AT,F16 F16=255 - LW T9,0000 (A0) - DIV.S F18,F8,F16 - SWC1 F18,0194 (T9) - LW T0,0000 (A0) - SWC1 F14,0198 (T0) - //0xB55A8: - JR RA - NOP -LWC1 F14,73D8 (AT) F14=800573D8: [0x36648] 0.05 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092160 0xC6C90 Fast Mode -JAL 7F091018 returns V0=80036FCC [0x1623C] fast mode -NOP -BNEL V0,R0,7F09242C -LW RA,0014 (SP) -JAL 7F0C1DD8 p->txt -ORI A0,R0,B01D -JAL 7F08A3C8 disp. l.txt -OR A0,V0,R0 -JAL 7F091024 set 80036FCC->A0 1=fast mode -ADDIU A0,R0,0001 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092190 0xC6CC0 ManPos Display -JAL 7F090F88 returns V0=80036FC8 [0x16238] debug position flag -NOP -BNEL V0,R0,7F09242C -LW RA,0014 (SP) -JAL 7F090F94 set 80036FC8->A0 1=on -ADDIU A0,R0,0001 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F0921B0 0xC6CE0 Fast Animation -JAL 7F0205E4 returns F0=animation speed - LUI AT,8003 - JR RA - LWC1 F0,C900 (AT) F0=8002C900 [0xBB70]: animation speed -NOP -LUI AT,4080 -MTC1 AT,F4 -NOP -C.LT.S F0,F4 -NOP -BC1FL 7F09242C -LW RA,0014 (SP) -JAL 7F0C1DD8 ;ret. p->txt -ORI A0,R0,B034 -JAL 7F08A3C8 ;disp. l.txt -OR A0,V0,R0 -LUI AT,4080 -MTC1 AT,F12 -JAL 7F020540 [55070] - ADDIU SP,SP,FFD0 - SW S3,0028 (SP) - LUI S3,8003 - ADDIU S3,S3,C900 - SWC1 F12,0000 (S3) ;save new animation rate -> 8002C900 - //55084: set animation rate for all guards as well - LUI V0,8003 - LW V0,CC68 (V0) V0=8002CC68: #guards - SW S1,0020 (SP) - SW RA,002C (SP) - SW S2,0024 (SP) - SW S0,001C (SP) - SDC1 F20,0010 (SP) - BLEZ V0,0x550F4 QUIT if no guards - OR S1,R0,R0 - LUI AT,4416 - LUI S2,8003 - MTC1 AT,F20 - ADDIU S2,S2,CC64 S2=8002CC64: guarddata pointer - OR S0,R0,R0 - //0x550BC: - LW T6,0000 (S2) - ADDU T7,T6,S0 - LW A0,001C (T7) - BEQL A0,R0,0x550E8 - ADDIU S1,S1,0001 - MFC1 A2,F20 - JAL 7F06FF18 - LW A1,0000 (S3) - LUI V0,8003 - LW V0,CC68 (V0) - ADDIU S1,S1,0001 - //0x550E8: - SLT AT,S1,V0 - BNEZ AT,0x550BC - ADDIU S0,S0,01DC - //0x550F4: - LW RA,002C (SP) - LDC1 F20,0010 (SP) - LW S0,001C (SP) - LW S1,0020 (SP) - LW S2,0024 (SP) - LW S3,0028 (SP) - JR RA - ADDIU SP,SP,0030 -NOP -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F0921FC 0xC6D2C slow animation -JAL 7F0205E4 -NOP -LUI AT,3E80 -MTC1 AT,F6 -NOP -C.LT.S F6,F0 -NOP -BC1FL 7F09242C -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B032 -JAL 7F08A3C8 -OR A0,V0,R0 -LUI AT,3E80 -MTC1 AT,F12 -JAL 7F020540 -NOP -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092248 0xC6D78 x2 R. Launcher -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 -ADDIU A0,R0,0019 -JAL 7F08C50C equip weapons A0 & A1 () -ADDIU A1,R0,0019 -JAL 7F0692D4 ret. V0=max ammo -ADDIU A0,R0,0006 -ADDIU A0,R0,0006 -JAL 7F069130 set ammo total A1 for type A0 -OR A1,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092278 0xC6DA8 x2 G. Launcher -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 -ADDIU A0,R0,0018 -JAL 7F08C50C -ADDIU A1,R0,0018 -JAL 7F0692D4 -ADDIU A0,R0,000B -ADDIU A0,R0,000B -JAL 7F069130 -OR A1,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F0922A8 0xC6DD8 x2 RC-P90 -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 -ADDIU A0,R0,000E -JAL 7F08C50C -ADDIU A1,R0,000E -JAL 7F0692D4 -ADDIU A0,R0,0001 -ADDIU A0,R0,0001 -JAL 7F069130 -OR A1,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F0922D8 0xC6E08 x2 Throwing Knives -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 -ADDIU A0,R0,0003 -JAL 7F08C50C -ADDIU A1,R0,0003 -JAL 7F0692D4 -ADDIU A0,R0,000A -ADDIU A0,R0,000A -JAL 7F069130 -OR A1,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092308 0xC6E38 x2 Hunting Knives -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 -ADDIU A0,R0,0002 -JAL 7F08C50C -ADDIU A1,R0,0002 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092324 0xC6E54 x2 Laser -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 -ADDIU A0,R0,0016 -JAL 7F08C50C -ADDIU A1,R0,0016 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092340 0xC6E70 Unlock Cheat # -LUI A0,8003 -LW A0,A8E8 (A0) A0=8002A8E8: -ADDIU A1,A2,FFDD -BLTZ A0,7F092428 -SLTI AT,A0,0004 -BEQL AT,R0,7F09242C -LW RA,0014 (SP) -JAL 7F01E760 [53290] - ADDIU SP,SP,FF80 - SW RA,0014 (SP) - BLTZ A0,0x53394 - OR A3,A0,R0 - SLTI AT,A0,0004 - BEQL AT,R0,0x53398 - LW RA,0014 (SP) - BLTZ A1,0x53394 - SLTI AT,A1,0014 - BEQL AT,R0,0x53398 - LW RA,0014 (SP) - SW A1,0084 (SP) - JAL 7F01DDC4 [528F4] - SW A3,0080 (SP) - LW A3,0080 (SP) - BEQ V0,R0,0x532F4 - OR A2,V0,R0 - OR A0,V0,R0 - LW A1,0084 (SP) - SW V0,007C (SP) - JAL 7F01DD20 [52850] - BLTZ A1,0x52898 - SLTI AT,A1,0014 - BEQ AT,R0,0x52898 - ADDIU T3,R0,0001 - LBU A2,0010 (A0) - LBU T6,000E (A0) - LBU T1,000F (A0) - SLL T7,A2,0x18 - SLL T9,A2,0x10 - OR T8,T6,T7 - OR T0,T8,T9 - SLL T2,T1,0x8 - OR V1,T0,T2 - SLLV T4,T3,A1 - AND V0,T4,V1 - SLTU T5,R0,V0 - JR RA - OR V0,T5,R0 - //52898: - OR V0,R0,R0 - JR RA - NOP - SW A3,0080 (SP) - LW A2,007C (SP) - BNEZ V0,0x53394 - LW A3,0080 (SP) - LUI T6,8003 - ADDIU A0,SP,001C - ADDIU T6,T6,C6C0 - ADDIU T8,T6,0060 - OR T9,A0,R0 - LW AT,0000 (T6) - ADDIU T6,T6,000C - ADDIU T9,T9,000C - SW AT,FFF4 (T9) - LW AT,FFF8 (T6) - SW AT,FFF8 (T9) - LW AT,FFFC (T6) - BNE T6,T8,0x53308 - SW AT,FFFC (T9) - BEQ A2,R0,0x5336C - OR A1,A3,R0 - OR T2,A2,R0 - OR T3,A0,R0 - ADDIU T1,A2,0060 - LW AT,0000 (T2) - ADDIU T2,T2,000C - ADDIU T3,T3,000C - SW AT,FFF4 (T3) - LW AT,FFF8 (T2) - SW AT,FFF8 (T3) - LW AT,FFFC (T2) - BNE T2,T1,0x53340 - SW AT,FFFC (T3) - BEQ R0,R0,0x53380 - LW A1,0084 (SP) - JAL 7F01D8D8 - SW A2,007C (SP) - LW A2,007C (SP) - ADDIU A0,SP,001C - LW A1,0084 (SP) - JAL 7F01DD74 - SW A2,007C (SP) - LW A0,007C (SP) - JAL 7F01E504 - ADDIU A1,SP,001C - LW RA,0014 (SP) - ADDIU SP,SP,0080 - JR RA - NOP -NOP -LUI A0,8006 -LW A0,3720 (A0) A0=80063720: -ADDIU A1,R0,009F -JAL 70008E08 -OR A2,R0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+-+ - -7F092380 0xC6EB0 Unlock Stage # (37-4A) -LUI V0,8003 -ADDIU V0,V0,A8E8 ;V0=8002A8E8 -LW A0,0000 (V0) ;A0=folder# -ADDIU T0,A2,FFC9 ;T0=stage.lock# -BLTZ A0,7F092428 ;branch if invalid folder# -SLTI AT,A0,0004 -BEQ AT,R0,7F092428 ;branch if invalid folder# -OR V1,R0,R0 ;V1=0 -BLEZ T0,0xC6F24 ;branch if invalid stage# -OR A1,R0,R0 ;A1=0 -//0xC6ED8: -LUI V0,8003 -ADDIU V0,V0,A8E8 -LW A0,0000 (V0) ;A0=folder# -OR A2,R0,R0 ;A2=agent -SW V1,0018 (SP) ;SP+18=V1 (0) -SW A1,001C (SP) ;SP+1C=A1 (stage#) -JAL 7F01E2C0 ;V0=TRUE if stage A1 complete on difficulty A2 in eeprom folder A0 -SW T0,0020 (SP) ;SP+20=stage.lock# -ADDIU AT,R0,0003 -LW V1,0018 (SP) -LW A1,001C (SP) -BNE V0,AT,0xC6F10 ;branch if stage not complete -LW T0,0020 (SP) -ADDIU V1,V1,0001 ;V1++ total complete stages -//0xC6F10: -ADDIU A1,A1,0001 ;A1++ next stage# -BNE A1,T0,0xC6ED8 ;loop for each stage -NOP -LUI V0,8003 -ADDIU V0,V0,A8E8 ;V0=8002A8E8: -//0xC6F24: -ADDIU T7,V1,0001 ;T7=#complete+1 -BNE T0,T7,7F092428 ;skip if previous stages not yet complete -ADDIU A1,T0,FFFF ;A1=stage.lock# -LUI A3,05F5 -ORI A3,A3,E0FF ;A3=05F5E0FF -LW A0,0000 (V0) ;A0=folder# -JAL 7F01E5F8 ;unlock stage A1 in folder A0 on difficulty A2 -OR A2,R0,R0 ;A2=agent -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,009F ;A1=SE #09F -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -LW RA,0014 (SP) -//0xC6F5C: 7F09242C -ADDIU SP,SP,0040 -JR RA -NOP - - -+-+-+ diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/Button Cheat Codes.txt b/notes/GE Documentation/Main Menus/Cheat Menu/Button Cheat Codes.txt deleted file mode 100644 index 44a023d..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/Button Cheat Codes.txt +++ /dev/null @@ -1,134 +0,0 @@ -A really fun 21990 feature, originally hacked by Krijy. This table sets up the button codes used to access cheats in-game, the text displayed for the cheats in the cheat menu, and whether text is displayed when a button code is entered. They correspond to the selectable cheat list generated at 80069650, the cheats selected list at 800696A0, and the data following that address are used for constructing the screen displayed. - -For a quick summary of how this works, each entry in the table corresponds to an available cheat. Although you can change the order of each cheat, and doing so changes the cheat activated when the button code is used, it will NOT affect the cheat activated through the cheat menu. So, in other words, there isn't much reason to shuffle the cheat numbers around. - -What the table will let you do is assign a button code to a cheat, fiddle with the button code needed to activate the cheat, when each cheat can be triggered, and change any text displayed in the Cheat folder. - -JAP 0x1EA6C -USA 0x1EA7C -PAL 0x1A80C - -Format: -0x0 1 cheat to activate with code (don't change these) -0x1 1 # keypresses in button input. 00 designates it can not be activated with a button code. -0x2 2 filler -0x4 4 literal Ram pointer to button string (see below for conversion) -0x8 2 text digits - displayed in Cheat folder -0xA 5 filler -0xF 1 bitflags for usage (input times and how often applied) - x1xx xxxx constant: multi - xx1x xxxx constant: solo un/set for all players - xxx1 xxxx exclusively acts on player 1? do not un/set activation flag when toggled in play - xxxx x1xx at start: multi - xxxx xx1x at start: solo - xxxx xxx1 usable on folder screens - - By default, cheats are deactivated on a per-player basis. - -Each button code is 0x14 in size. Each button input is 2 bytes long and coresponds to the button input from the controller. That makes 10 input slots per code. Each uses a literal Ram pointer to target the string of buttons, but they can be anywhere in the file if need be. Not all are assigned to usable cheats anyway, and some aren't assigned to anything at all! Otherwise, it wouldn't be hard to limit the number. - -conversions for pointer -JAP -80020DD0 -USA -80020D90 -PAL -8001EC50 -that will return an offset within the 21990 file. - -The list of button input codes spans from: -JAP 0x1E690 0x1EA6C -USA 0x1E6A0 0x1EA7C -PAL 0x1A430 0x1A80C - -The 2 byte button code masks are the same as usual: -1xxx xxxx xxxx xxxx A button -x1xx xxxx xxxx xxxx B button -xx1x xxxx xxxx xxxx Z button -xxx1 xxxx xxxx xxxx Start -xxxx 1xxx xxxx xxxx D-up -xxxx x1xx xxxx xxxx D-down -xxxx xx1x xxxx xxxx D-left -xxxx xxx1 xxxx xxxx D-right -xxxx xxxx xx1x xxxx L button -xxxx xxxx xxx1 xxxx R button -xxxx xxxx xxxx 1xxx C-up -xxxx xxxx xxxx x1xx C-down -xxxx xxxx xxxx xx1x C-left -xxxx xxxx xxxx xxx1 C-right - - -List of cheats: -01 Extra Multiplayer Characters -02 Invincibility -03 All Guns -04 Maximum Ammo -05 -invalid- -06 Deactivate Invincibility [Multi] -07 Line Mode -08 Super 2x Health -09 Super 2x Armour -0A Invisibility -0B Infinite Ammo -0C DK Mode -0D Extra Weapons (Magnum, G.G., Gold/Silver PP7) -0E Tiny Bond -0F Paintball Mode -10 Super 10x Health -11 Magnum -12 Laser -13 Golden Gun -14 Silver PP7 -15 Gold PP7 -16 Invisibility [Multi] -17 No Radar [Multi] -18 Fast Mode -19 Debug Position Display (invalid on PAL) -1A Fast Motion -1B Slow Motion -1C Enemy Rockets -1D 2x Rocket L. -1E 2x Grenade L. -1F 2x RC-P90 -20 2x Throwing Knife -21 2x Hunting Knife -22 2x Laser -23 Unlock Paintball Mode -24 Unlock Invincible -25 Unlock DK Mode -26 Unlock 2x Grenade L. -27 Unlock 2x Rocket L. -28 Unlock Turbo Mode -29 Unlock No Radar [Multi] -2A Unlock Tiny Bond -2B Unlock 2x Throwing Knife -2C Unlock Fast Animation -2D Unlock Bond Invisible -2E Unlock Enemy Rockets -2F Unlock Slow Animation -30 Unlock Silver PP7 -31 Unlock 2x Hunting Knife -32 Unlock Infinite Ammo -33 Unlock 2x RC-P90 -34 Unlock Gold PP7 -35 Unlock 2x Laser -36 Unlock All Guns -37 -invalid- -38 Unlock Facility -39 Unlock Runway -3A Unlock Surface I -3B Unlock Bunker I -3C Unlock Silo -3D Unlock Frigate -3E Unlock Surface II -3F Unlock Bunker II -40 Unlock Statue -41 Unlock Archives -42 Unlock Streets -43 Unlock Depot -44 Unlock Train -45 Unlock Jungle -46 Unlock Control -47 Unlock Caverns -48 Unlock Cradle -49 Unlock Aztec -4A Unlock Egypt - --Zoinkity diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/Deactivate Cheats.txt b/notes/GE Documentation/Main Menus/Cheat Menu/Deactivate Cheats.txt deleted file mode 100644 index 5ea9503..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/Deactivate Cheats.txt +++ /dev/null @@ -1,191 +0,0 @@ -7F092438 C6F68 handle cheat deactivation - accepts: A0=cheat# -SLL T6,A0,0x4 ;T6=offset to entry A0 -LUI T7,8004 -ADDU T7,T7,T6 -LW T7,F808 (T7) ;T7=8003F808+offset: last word of cheat entry - flags -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) ;SP+20=A0: cheat# -JAL 7F09B150 ;V0=cur.player# -SW T7,001C (SP) ;SP+1C=T7: cheat.flags -JAL 7F09A464 ;V0=#players -SW V0,0018 (SP) ;SP+18=V0: cur.player# -//7F092464: -LW V1,001C (SP) ;V1=cheat.flags -LW A0,0020 (SP) ;A0=cheat# -ANDI T8,V1,0010 ;T8=cheat.flags & 0x10 -BNEZ T8,7F0924B4 ;branch if 0x10 set: skip deactivation -ANDI T9,V1,0020 -BNEZ T9,7F0924A8 ;branch if 0x20 set: deactivates for all players -LUI T0,8008 -LW T2,0018 (SP) ;T2=cur.player# -ADDIU T0,T0,9E30 ;T0=80079E30: -ADDU V1,A0,T0 ;V1=80079E30+offset -LBU T1,0000 (V1) ;T1=activation flag -ADDIU T3,R0,0001 -SLLV T4,T3,T2 ;T4=1<80079E30+offset: deactivate for all players -//7F0924B4: -ADDIU T7,A0,FFFF -SLTIU AT,T7,004A -BEQ AT,R0,7F0926B0 -SLL T7,T7,0x2 ;T7=cheat#->offset -LUI AT,8005 -ADDU AT,AT,T7 -LW T7,73DC (AT) ;T7=800573DC+offset: TLB pointer to deactivation/text display routine -JR T7 -NOP - -7F0924D8: [C7008] invincibility off -JAL 7F089F58 returns V0=cur. player invinciblity flag -NOP -BEQL V0,R0,7F0926B4 -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B01E -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F089F48 sets cur. player invincibility flag to A0 -OR A0,R0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092508: [C7038] all guns off -JAL 7F08C2AC returns V0=cur. player all-gun flag -NOP -BEQL V0,R0,7F0926B4 -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B01F -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F08C29C sets cur. player all-gun flag to A0 -OR A0,R0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092538: [C7068] line mode off -JAL 7F090FE8 -OR A0,R0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092548: [C7078] invisibility off -JAL 7F089F74 -NOP -BNEL V0,R0,7F0926B4 -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B020 -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F089F68 -ADDIU A0,R0,0001 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092578: [C70A8] infinite ammo off -JAL 7F0C1DD8 -ORI A0,R0,B022 -JAL 7F08A3C8 -OR A0,V0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092590: [C70C0] DK mode off -JAL 7F0C1DD8 -ORI A0,R0,B023 -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F0927F4 -OR A0,R0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F0925B0: [C70E0] tiny bond off -ADDIU AT,R0,0001 -BNE V0,AT,7F0926B0 -LUI T8,8008 -LW T8,A0B4 (T8) -LUI AT,3F80 -MTC1 AT,F4 -LWC1 F6,0064 (T8) -C.EQ.S F4,F6 -NOP -BC1TL 7F0926B4 -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B024 -JAL 7F08A3C8 -OR A0,V0,R0 -LUI AT,3F80 -LUI T9,8008 -LW T9,A0B4 (T9) -MTC1 AT,F8 -LUI T0,8008 -SWC1 F8,0064 (T9) -LW T0,A0B0 (T0) -LW A0,00D4 (T0) -BEQL A0,R0,7F0926B4 -LW RA,0014 (SP) -LWC1 F0,0014 (A0) -ADD.S F10,F0,F0 -MFC1 A1,F10 -JAL 7F06CE78 -NOP -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092630: [C7160] paintball off -JAL 7F0C1DD8 -ORI A0,R0,B025 -JAL 7F08A3C8 -OR A0,V0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092648: [C7178] invisibility (multi) off -LUI AT,4396 -MTC1 AT,F12 -LUI AT,3F80 -MTC1 AT,F14 -JAL 7F080A10 -NOP -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092668: [C7198] turbo mode off -JAL 7F091018 -NOP -BEQL V0,R0,7F0926B4 -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B027 -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F091024 -OR A0,R0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F092698: [C71C8] debug position off -JAL 7F090F88 -NOP -BEQL V0,R0,7F0926B4 -LW RA,0014 (SP) -JAL 7F090F94 -OR A0,R0,R0 -//7F0926B0: [C71E0] do nothing and quit. Use on codes that can't be deactivated -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/all guns multi.txt b/notes/GE Documentation/Main Menus/Cheat Menu/all guns multi.txt deleted file mode 100644 index 1084087..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/all guns multi.txt +++ /dev/null @@ -1,152 +0,0 @@ -complex 2pl -800ADA4C player 1 all guns toggle -800B04CC player 2 all guns -800B2F4C player 3 all guns -800B59CC player 4 all guns - - -nemu - temple 2pl -800A854C -800AAFCC ---------------------------------- -MAIN CALL ROUTINE: -(partial, unsure on start 7F090684?) -7F090758: -SLTIU AT,V0,004D //V0=option value -BEQ AT,R0,7F090E74 //if move view, branch -SLL T9,V0,0x2 //T9=V0->a pointer offset -LUI AT,8005 -ADDU AT,AT,T9 -LW T9,56FC (AT) //T9=debug option table pointer -JR T9 -NOP - -refs table pointer table @800556FC - - - -7F0908F4: -JAL 7F09B10C -LW A0,005C (SP) //A0=player tally - -7F09B10C: -SLL T6,A0,0x2 //T6=4*players=offset to pointer -LUI T7,8008 -ADDU T7,T7,T6 -LW T7,9EE0 (T7) //T7=player pointer -LUI AT,8008 -SW A0,A0B8 (AT) //8007A0B8=player tally -SLL T8,A0,0x3 //T8=8*tally=8 -SUBU T8,T8,A0 // -LUI T9,8008 -ADDIU T9,T9,9EF0 //T9=80079EF0= -SLL T8,T8,0x4 //T8=T8*0x10 -SW T7,A0B0 (AT) //8007A0B0=T7=800A9DE0 -LUI AT,8008 -ADDU T0,T8,T9 //T0=80079EF0 -JR RA -SW T0,A0B4 (AT) // - -7F0908FC: -JAL 7F08C2AC -NOP - -7F08C2AC: -LUI T6,8008 -LW T6,A0B0 (T6) //T6=8007A0B0=800A9DE0 -JR RA -LW V0,11EC (T6) //V0=800711EC=0 - -write 1pl f/ debug (800A854C=toggle) -off of 7F090904: -JAL 7F08C29C -SLTIU A0,V0,0001 - -7F08C29C: -LUI T6,8008 -LW T6,A0B0 -JR RA -SW A0,11EC (T6) - -return 7F09090C: -LW T2,005C (SP) //T2=803B3724=0 -ADDIU T3,T2,0001 //T3=T2++=1 -JAL 7F09A464 -SW T3,005C (SP) //803B3724=1 - -7F09A464: -LUI T6,8008 -LW T6,9EE0 (T6) //T6=80079EE0=800A7360 -OR V1,R0,R0 //V1=0 -LUI T7,8008 -BEQ T6,R0,7F09A480 //branch if no more players -LUI T8,8008 -ADDIU V1,R0,0001 //V1=1 -LW T7,9EE4 (T7) //T7=80079EE4=800A9DE0 -LUI T9,8008 -BEQ T7,R0,7F09A494 //branch if only one player -NOP -ADDIU V1,V1,0001 //V1++ (V1=2) -LW T8,9EE8 (T8) //T8=80079EE8=third player stuff pointer -BEQ T8,R0,7F09A4A4 -NOP -ADDIU V1,V1,0001 //V1++ -LW T9,9EEC (T9) //T9=80079EEC=fourth player pointer -BEQ T9,R0,7F09A4B4 -NOP -ADDIU V1,V1,0001 //V1++ -JR RA //7F09A4B4, so routine ends here -OR V0,V1,R0 //V0=# players - -return to 7F09091C: -LW T4,005C (SP) //T4=counter of players already dealt with -SLT AT,T4,V0 //TRUE if more to go -BNEZ AT,7F0908F4 -NOP -else: -BEQ R0,R0,7F090E78 -LW T8,0018 (SP) - --------------------- -tracing inf ammo cheat: -starts somewhere around 7F0BDBB0 - -7F0BDC20: -LBU T1,0000 (S1) //T1=800696A8 (inf ammo toggle) -BEQL T1,R0,7F0BDC48 -ADDIU S0,S0,0001 -JAL 7F091A5C -OR A0,S0,R0 //A0=S0=cheat number=B - -7F091A5C: -ADDIU AT,R0,001C //AT=001C -BNE A0,AT,7F091A70 -OR V0,R0,R0 //V0=0 - JR RA - ADDIU V0,R0,0001 -JR RA -NOP - -7F0BDC34: -BEQL V0,R0,7F0BDC48 - ADDIU S0,S0,0001 //S0=cheat#+1 - -7F0BDC48: -BNE S0,S2,7F0BDC20 -ADDIU S1,S1,0001 //active cheat toggle address +1 - -7F0BDC20: -LBU - -no........ this is closer to actual executions: - - -...7F0BEC74 -LW V1,001C (SP) -BNEZ V0,7F0BEC94 -LW A0,0194 (SP) -SW V1,001C (SP) -JAL 7F091AAC -SW A0,0194 (SP) - -8007A0B8 - player stats? \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/cheat text & button codes (Krijy).txt b/notes/GE Documentation/Main Menus/Cheat Menu/cheat text & button codes (Krijy).txt deleted file mode 100644 index 2fa4fe9..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/cheat text & button codes (Krijy).txt +++ /dev/null @@ -1,165 +0,0 @@ -Originally compiled by Krijy - -802A -efe0-Invincible -efeb -efec-All Guns -eff7 -eff8-Super x2 Health0-f007 -f008-Super 2x Armor -f017 -f018-Bond Invisible -f027 -f028-Bond Phase -f033 -f034-Infinite Ammo -f043 -f044-DK Mode -f04b -f04c-Tiny Bond -f057 -f058-Super x10 Health -f06b -f06c-Magnum -fo73 -f074-Laser -f07b -f07c-Golden Gun -f087 -f088-Silver PP7 -f093 -f094-Gold PP7 -f09f -(+ terminate in 0A, appear on screen) -f0a0-invincibility on+ -f0b3 -f0b4-all guns on+ -f0c3 -f0c4-maximum ammo+ -f0d2 -f0d4-super x2 health+ -f0e7 -f0e8-super x2 armor+ -f0f7 -f0f8-invisibility on+ -f10b -f10c-bond phase on+ -f11b -f11c-infinate ammo on+ -f12b -f12c-dk mode on+ -f13b -f13c-extra weapons+ -f14b -f14c-tiny bond on+ -f15b -f15c-paintball mode on+ -f16f -f170-super x10 health+ -f183 -f184-happy now karl?+ -f197 -f198-fast mode on+ -f1a7 -f1a8-invincibility off+ -f1bb -f1bc-all guns off+ -f1cb -f1cc-invisibility off+ -f1df -f1e0-bond phase off+ -f1ef -f1f0-infinate ammo off+ -f203 -f204-dk mode off+ -f213 -f214-tiny bond off+ -f223 -f224-paintball mode off+ -f237 -f238-radar on+ -f243 -f244-fast mode off+ -f253 -f254-NO NAME E R R O R+ -f267 -f268-no briefing for this mission+ -f287 -(dropped one maybe?) -f288-+ -f28b -f28c-objective -f297 -f298-completed+ -f2a3 -f2a4-incomplete+ -f2af -f2b0-failed+ -f2b7 -f2b8-slowest motion+ -f2c7 -f2c8-very slow motion+ -f2db -f2dc-slow motion+ -f2eb -f2ec-normal motion+ -f2fb -f2fc-fast motion+ -f30b -f30c-very fast motion+ -f31f -f320-fastest motion+ -f32f -f330-Line Mode -f33b -f33c-Paintball Mode -f34b -f34c-Enemy Rockets -f35b -f35c-2x Rocket L. -f36b -f36c-2x Grenade L. -f37b -f37c-2x RC-P90 -f387 -f388-2x Throwing Knife -f39b -f39c-2x Hunting Knife -f3af -f3b0-2x Laser -f3bb -f3bc-Turbo Mode -f3c7 -f3c8-Fast Animation -f3d7 -f3d8-Slow Animation -f3e7 -f3e8-No Radar [Multi] -f3fb(ff?) - -Change Invincibility In-game activation code: (Press C-Right ten times) -8103F444 0001 -8103F446 0001 -8103F448 0001 -8103F44A 0001 -8103F44C 0001 -8103F44E 0001 -8103F450 0001 -8103F452 0001 -8103F454 0001 -8103F456 0001 -8103F81C XX0A - -01 - Extra Multiplayer Characters - Character Select Menu -02 - Invincibility - In-game with text -03 - All Guns - - In-game with text -04 - Maximum Ammo - In-game with text - BETA -05 - ??? - 0820 0011 0014 0032 0230 0130 0410 0018 0011 0430 -06 - ??? - 0110 0220 0220 0810 0420 0014 0022 0031 0420 0028 -07 - Line Mode - In-game with text -08 - Super 2x Health - In-game with text - BETA -09 - Super 2x Armour - In-game with text - BETA -0A - Invisibility - In-game with text -0B - Infinite Ammo - In-game with text -0C - DK Mode - In-game with text -0D - Extra Weapons (Gives you Magnum, Golden Gun, Golden and Silver PP7 + max ammo for these weapons) - In-game with text - BETA -0E - Tiny Bond - In-game with text -0F - Paintball Mode - In-game with text -10 - Super 10x Health - In-game with text - BETA -11 - Magnum - In-game with text -12 - Laser - In-game with text -13 - Golden Gun - In-game with text -14 - Silver PP7 - In-game with text -15 - Gold PP7 - In-game with text -16 - Invisibility [Multi] - BETA -17 - No Radar [Multi] - In-game with text -18 - Fast Mode - In-game with text -19 - Debug Mode (Bar at the top of the screen showing room number, x, y and z -coords and direction you're looking in) - In-game - BETA -1A - Fast Motion - In-game with text -1B - Slow Motion - In-game with text -1C - Enemy Rockets - In-game with text -1D - 2x Rocket L. - In-game with text -1E - 2x Grenade L. - In-game with text -1F - 2x RC-P90 - In-game with text -20 - 2x Throwing K. - In-game with text -21 - 2x Hunting K. - In-game with text -22 - 2x Laser - In-game with text -23 to 36 - Unlocks all the cheats at the Cheat Menu -37 - ??? - 0038 0210 0014 0024 0810 0420 0011 0120 0130 0014 -38 to 4A - Complete levels after one another - One-player mission select - -Extra Multiplayer Character ASM! -318280: -240E 0040 -3C01 8003 -03E0 0008 -AC2E B194 -3C0E 8003 -8DCE A8F0 -2401 0001 -2402 0001 -15C1 0004 -0000 0000 - ------------------------ ------------------------ -format of above button codes: - -List at 8003F80C: -ccbb0000 pppppppp tttt0000 000000ff -[c]ode number from above to activate -[b]utton code for selected cheat when set to 0A (toggle on/off) -[p]ointer to string defining controller input used to activate cheat -[t]ext displayed when de/activated -[f]lags indicating aloowable times for usage - 00000001 on main menus/folder screens - 00000010 at start: solo - 00000100 at start: multi - 00001000 - 00010000 player 1 exclusively - 00100000 constant: solo - 01000000 constant: multi - 10000000 - ------------------------- -80069651 - 8006969A cheat options above are available in cheat folder menu -800696A1 - 800696EA cheat options above are activated - -80067770 pointer to word "Start" -80069778 pointer to word "Previous" -800697F0 list of cheat option numbers as they appear in-order for display in cheat menu. \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/detect completed stages.txt b/notes/GE Documentation/Main Menus/Cheat Menu/detect completed stages.txt deleted file mode 100644 index baabf21..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/detect completed stages.txt +++ /dev/null @@ -1,100 +0,0 @@ -7F01E9F4: 53524 V0=TRUE is Cradle completed on any difficulty - accepts: A0=eeprom folder # -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) ;SP+18=A0: eeprom folder# -//7F01EA00: determine if Cradle unlocked on agent -ADDIU A1,R0,0011 ;A1=11: stage# (Cradle) -JAL 7F01E2C0 ;V0=TRUE if stage A1 complete on difficulty A2 in eeprom folder A0 -OR A2,R0,R0 ;A2=0: difficulty (agent) -XORI T6,V0,0003 ;T6=V0^3: test if this was the highest difficulty completed -SLTIU V0,T6,0001 ;V0=TRUE if highest difficulty completed -BNEZ V0,7F01EA4C ;return TRUE if this was the highest difficulty unlocked -LW A0,0018 (SP) -//7F01EA1C: determine if Cradle unlocked on secret agent -ADDIU A1,R0,0011 -JAL 7F01E2C0 ;V0=TRUE if stage A1 complete on difficulty A2 in eeprom folder A0 -ADDIU A2,R0,0001 -XORI T7,V0,0003 -SLTIU V0,T7,0001 -BNEZ V0,7F01EA4C -LW A0,0018 (SP) -//7F01EA38: determine if Cradle unlocked on 00 agent -ADDIU A1,R0,0011 -JAL 7F01E2C0 ;V0=TRUE if stage A1 complete on difficulty A2 in eeprom folder A0 -ADDIU A2,R0,0002 -XORI T8,V0,0003 -SLTIU V0,T8,0001 -//7F01EA4C: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F01EA5C: 5358C V0=TRUE is Aztec completed on secret or 00 agent - accepts: A0=eeprom folder # -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -//7F01EA68: -ADDIU A1,R0,0012 -JAL 7F01E2C0 -ADDIU A2,R0,0001 -XORI T6,V0,0003 -SLTIU V0,T6,0001 -BNEZ V0,7F01EA98 -LW A0,0018 (SP) -//7F01EA84: -ADDIU A1,R0,0012 -JAL 7F01E2C0 -ADDIU A2,R0,0002 -XORI T7,V0,0003 -SLTIU V0,T7,0001 -//7F01EA98: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F01EAA8: 535D8 V0=TRUE is Egypt completed on 00 agent - accepts: A0=eeprom folder # -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU A1,R0,0013 -JAL 7F01E2C0 -ADDIU A2,R0,0002 -LW RA,0014 (SP) -XORI T6,V0,0003 -SLTIU V0,T6,0001 -JR RA -ADDIU SP,SP,0018 - -+_+ -7F01EAD0: 53600 V0= TRUE if Cradle completed on any folder - -7F01EB20: 53650 V0= TRUE if Aztec completed on secret or 00 agent on any folder - -7F01EB70: 536A0 V0= TRUE if Egypt completed on 00 agent on any folder -ADDIU SP,SP,FFE0 -SW S1,0018 (SP) -SW S0,0014 (SP) -SW RA,001C (SP) -OR S0,R0,R0 ;S0=0: init folder# -ADDIU S1,R0,0004 ;S1=4: folders 0-3 -//7F01EB88: loopus per folder -JAL 7F01EAA8 ;V0=TRUE is Egypt completed on 00 agent -OR A0,S0,R0 ;A0=current folder -BEQ V0,R0,7F01EBA0 ;if not unlocked, try the next folder -ADDIU S0,S0,0001 ;S0++: folder#++ -BEQ R0,R0,7F01EBAC ;return TRUE -ADDIU V0,R0,0001 -//7F01EBA0: -BNE S0,S1,7F01EB88 ;loopus for folders 0-3 -NOP -OR V0,R0,R0 ;return FALSE - unecessary since V0 already=0 -//7F01EBAC: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 diff --git a/notes/GE Documentation/Main Menus/Cheat Menu/testing cheats.txt b/notes/GE Documentation/Main Menus/Cheat Menu/testing cheats.txt deleted file mode 100644 index af00fc9..0000000 --- a/notes/GE Documentation/Main Menus/Cheat Menu/testing cheats.txt +++ /dev/null @@ -1,100 +0,0 @@ -7F091B64 used for text-related activated cheats -only called at beginning of stage if a cheat is active - otherwise ignored - -7F091AAC decides its fate... - -7F091A5C: 0xC658C tests if at last applicable gameplay cheat# -ADDIU AT,R0,001C -BNE A0,AT,7F091A70 -OR V0,R0,R0 -JR RA -ADDIU V0,R0,0001 -//7F091A70: -JR RA -NOP - -7F091A78: 0xC65A8 V0=1 if MP flag for cheat# A0 set -SLL T6,A0,0x4 -LUI T7,8004 -ADDU T7,T7,T6 -LW T7,F808 (T7) -ADDIU AT,R0,0004 -OR V0,R0,R0 -ANDI T8,T7,0004 -BNE T8,AT,7F091AA4 -NOP -JR RA -ADDIU V0,R0,0001 -//7F091AA4: -JR RA -NOP - - -7F091AAC 0xC65DC - activate cheat# A0; loops for all players in multiplayer -ADDIU SP,SP,FFD0 -SW S0,0018 (SP) -LUI S0,8004 -SLL T6,A0,0x4 ;T6=cheat# A0 * offset for each entry -SW RA,0024 (SP) -SW S2,0020 (SP) -ADDU S0,S0,T6 -OR S2,A0,R0 ;S2=cheat# -SW S1,001C (SP) -JAL 7F09B150 ;V0=cur.player# -LW S0,F808 (S0) ;S0=cheat's activation flags -JAL 7F09A464 ;ret. V0=#players -SW V0,0028 (SP) ;SP+28=cur.player# -ADDIU AT,R0,0001 -BNE V0,AT,7F091AFC ;branch if multi -OR S1,V0,R0 ;S1=#players -//7F091AEC: solo only yo -JAL 7F091B64 ;activate cheat A0 -OR A0,S2,R0 -BEQ R0,R0,7F091B50 -LW RA,0024 (SP) -//7F091AFC: multiplayer -ANDI T7,S0,0004 -BEQ T7,R0,7F091B4C ;flag 04 must be set to allow in multiplayer! -ANDI T8,S0,0020 -BEQ T8,R0,7F091B20 ;loop for each character flag -NOP -JAL 7F091B64 ;activate cheat# A0 -OR A0,S2,R0 ;A0=cheat# -BEQ R0,R0,7F091B50 -LW RA,0024 (SP) -//7F091B20: -BLEZ V0,7F091B44 ;skips if player# invalid -OR S0,R0,R0 ;player#=0 -//7F091B28: -JAL 7F09B10C ;set cur. player -OR A0,S0,R0 ;A0=S0: player# -JAL 7F091B64 ;activate cheat# A0 -OR A0,S2,R0 ;A0=S2: cheat# -ADDIU S0,S0,0001 ;S0++ -BNE S0,S1,7F091B28 ;loop for each player -NOP -//7F091B44: -JAL 7F09B10C ;set back to original player; at least, in theory -LW A0,0028 (SP) -//7F091B4C: -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0030 - -I believe this is all the source of a bug, making it difficult to properly assign global cheats to all players in multiplayer. -The routine above loops for each player, but notice that in that routine it sets all player bitflags to activated. -This inhibits toggle-like commands, and confuses matters when deactivating cheats. - -So, to straighten things out is going to be pleasant. -1) the 0x20 flag must loop the activation/deactivation for each player within the de/activation routine. -2) at the start of multiplayer stages, all cheats should loop for each player to ensure all players are affected unless the 0x20 flag is set. -3) any non-global cheat effect should inhibit the 0x20 flag. Examples would be all guns, inf.ammo, etc. Cheats that require this flag would be fast/slow animation and motion, paintball, etc. -4) multiplayer should allow for individual activation of cheats. - -//7F0BDC0C: runs through the list of cheats and calls for each - -//7F0BEC4C: one used in multiplayer or stage load or something, iterates them and stuff \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C2E80 - interface.txt b/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C2E80 - interface.txt deleted file mode 100644 index 81f270b..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C2E80 - interface.txt +++ /dev/null @@ -1,490 +0,0 @@ -7F0C2E80 F79B0 Multiplayer In-Game Menu Interface -ADDIU SP,SP,FFC8 -SW RA,0014 (SP) -JAL 7F09B150 ;V0= cur player # -NOP -JAL 7F09A464 ;V0= # players -SW V0,0034 (SP) ;SP+34= cur.player# -LB A0,0037 (SP) ;A0=cur.player# -ADDIU A1,R0,FFFE -ADDIU A2,R0,0001 -SW V0,0030 (SP) ;SP+30= #players -JAL 7000C4B4 ;V0=state of player A0's control stick; -2 left : 1 right -SW A0,0018 (SP) ;SP+18= cur.player -SW V0,002C (SP) ;SP+2C= horz.state -JAL 7F09B4D8 -LW A0,0034 (SP) ;A0=cur.player# -BNEZ V0,7F0C2EF8 -LW T0,0030 (SP) ;T0=#players -// -LUI A1,8009 -ADDIU A1,A1,C704 ;A1=8008C704 -LW V0,0000 (A1) ;V0=8008C704: TRUE when game over -LUI T6,8005 -SLTI AT,V0,0002 -BNEZ AT,7F0C2EF8 -NOP -LW T6,8498 (T6) ;T6=80048498: TRUE when advancing the blink registers -ADDIU T9,R0,0001 -SUBU T7,V0,T6 -BGTZ T7,7F0C2EF8 -SW T7,0000 (A1) -SW T9,0000 (A1) -//7F0C2EF8: -LUI A1,8009 -ADDIU AT,R0,0001 -BEQ T0,AT,7F0C3590 -ADDIU A1,A1,C704 ;A1=8008C704 -LUI A3,8008 -ADDIU A3,A3,A0B0 ;A3=8007A0B0 -LW V1,0000 (A3) ;V1=8007A0B0: p->BONDdata -LW V0,0000 (A1) ;V0=8008C704: TRUE when game over -LW T1,00D8 (V1) ;T1=player button control -SLTI AT,V0,0002 -BEQ T1,R0,7F0C2F40 ;branch if buttons disabled -NOP -BNEZ V0,7F0C2F40 ;branch if game over -NOP -SW R0,29C4 (V1) ;0->BONDdata+29C4: disable MP menu -LW T2,0000 (A3) ;T2=p->BONDdata -BEQ R0,R0,7F0C3590 -SW R0,2A00 (T2) ;0->BONDdata+2A00: hide health display -//7F0C2F40: -BEQ AT,R0,7F0C3590 -LW A0,0034 (SP) ;A0=cur.player# -JAL 7F09B4D8 -SW T0,0030 (SP) ;SP+30= #players -LUI A3,8008 -ADDIU A3,A3,A0B0 ;A3=8007A0B0 -BNEZ V0,7F0C2FE0 -LW T0,0030 (SP) -LUI A0,8009 -ADDIU A0,A0,C70C ;A0=8008C70C -LUI A1,8009 -LUI V0,8005 -LW V0,8498 (V0) ;V0=80048498: TRUE when advancing the blink registers -LW T3,0000 (A0) ;T3=8008C70C: current <> blink timer -ADDIU A1,A1,C714 ;A1=8008C714 -LW T5,0000 (A1) ;T5=8008C714: current GO blink timer -ADDU T4,T3,V0 -SLTI AT,T4,0014 -ADDU T6,T5,V0 -SW T4,0000 (A0) ;T4=8008C70C: current <> blink timer -BNEZ AT,7F0C2FB4 -SW T6,0000 (A1) -LUI A2,8009 -ADDIU A2,A2,C708 -LW V0,0000 (A2) -ADDIU T7,T4,FFEC -SW T7,0000 (A0) -SLTIU T8,V0,0001 -SW T8,0000 (A2) -LW V1,0000 (A1) -LUI A0,8009 -ADDIU A0,A0,C710 -SLTI AT,V1,0078 -BNEZ AT,7F0C2FE0 -NOP -LW V0,0000 (A0) -ADDIU T9,V1,FF88 -SW T9,0000 (A1) -SLTIU T1,V0,0001 -SW T1,0000 (A0) -LUI V0,8008 -LW V0,A0B4 (V0) ;V0=8007A0B4: p->stats -LW T2,0000 (A3) ;T2=p->BONDdata -LW T3,0054 (V0) ;T3=time b/w kills -LW V1,29F8 (T2) ;V1=BONDdata+29F8: -SLT AT,T3,V1 -BEQ AT,R0,7F0C3004 -NOP -SW V1,0054 (V0) -JAL 7F08BFB8 ;V0= 80079A20 -SW T0,0030 (SP) -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW V1,0000 (A3) ;V1=p->BONDdata -LUI T4,8008 -LW T4,A0B4 (T4) ;T4=p->stats -LW T6,29F4 (V1) ;T6=BONDdata+29F4: -LW T0,0030 (SP) -LW T5,004C (T4) -SUBU T7,V0,T6 -SLT AT,T5,T7 -BEQL AT,R0,7F0C3070 -LW T3,29C4 (V1) ;T3=BONDdata+29C4: TRUE if MP menu enabled -JAL 7F08BFB8 ;V0= 80079A20 -SW T0,0030 (SP) -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T8,0000 (A3) ;T8=p->BONDdata -LUI T2,8008 -LW T2,A0B4 (T2) ;T2=p->stats -LW T9,29F4 (T8) ;T9=BONDdata+29F4: -LW T0,0030 (SP) -SUBU T1,V0,T9 -SW T1,004C (T2) -LW V1,0000 (A3) -LW T3,29C4 (V1) ;T3=BONDdata+29C4: TRUE if MP menu activated -LB A0,001B (SP) -BEQ T3,R0,7F0C3534 ;branch if MP menu not activated -NOP -//7F0C307C: test if right pressed -LW A0,0034 (SP) ;A0=player# -JAL 7F0C1EF8 ;V0=TRUE if player A0 pressed right -SW T0,0030 (SP) -BEQ V0,R0,7F0C30C4 ;branch if didn't press right -LW T0,0030 (SP) -JAL 7F0C1E20 ;V0=TRUE when right enabled on MP menu page -SW T0,0030 (SP) -BEQ V0,R0,7F0C30C4 ;branch if right not enabled -LW T0,0030 (SP) -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW V1,0000 (A3) ;V1=p->BONDdata -LW T4,29C8 (V1) ;T4=BONDdata+29C8: selected MP page -ADDIU T6,T4,0001 ;T6=page+1 -BEQ R0,R0,7F0C3508 -SW T6,29C8 (V1) ;update page number -//7F0C30C4: test if left pressed -LW A0,0034 (SP) -JAL 7F0C1F68 ;V0=TRUE if player A0 pressed left -SW T0,0030 (SP) -BEQ V0,R0,7F0C310C ;branch if left wasn't pressed -LW T0,0030 (SP) -JAL 7F0C1E8C ;TRUE when left enabled on MP menu page -SW T0,0030 (SP) -BEQ V0,R0,7F0C310C ;branch if left isn't enabled -LW T0,0030 (SP) -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW V1,0000 (A3) ;V1=p->BONDdata -LW T5,29C8 (V1) ;T5=BONDdata+29C8: MP page -ADDIU T7,T5,FFFF ;T7=page-1 -BEQ R0,R0,7F0C3508 -SW T7,29C8 (V1) ;update watch page -//7F0C310C: test if right pressed -LW A0,0034 (SP) -JAL 7F0C1EF8 ;V0=TRUE if player A0 pressed right -SW T0,0030 (SP) -LUI A3,8008 -ADDIU A3,A3,A0B0 -BEQ V0,R0,7F0C315C ;branch if right not pressed -LW T0,0030 (SP) -LW T8,0000 (A3) ;T8=p->BONDdata -ADDIU AT,R0,0006 -LW T9,29C8 (T8) ;T9=BONDdata+29C8: watch page -BNEL T9,AT,7F0C3160 ;branch if not page 6: cancel/confirm -LW A0,0034 (SP) -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T2,0000 (A3) ;T2=p->BONDdata -ADDIU T1,R0,0001 -BEQ R0,R0,7F0C3508 -SW T1,29CC (T2) ;1->BONDdata+29CC: set "CONFIRM" -//7F0C3160: -LW A0,0034 (SP) -JAL 7F0C1F68 ;V0=TRUE if player A0 pressed left -SW T0,0030 (SP) -LUI A3,8008 -ADDIU A3,A3,A0B0 -BEQ V0,R0,7F0C31A8 ;branch if left wasn't pressed -LW T0,0030 (SP) -LW T3,0000 (A3) ;T3=p->BONDdata -ADDIU AT,R0,0006 -LW T4,29C8 (T3) ;T4=BONDdata+29C8: MP page -BNEL T4,AT,7F0C31AC ;branch if not page 6--cancel/confirm -LB A0,001B (SP) -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T6,0000 (A3) ;T6=p->BONDdata -BEQ R0,R0,7F0C3508 -SW R0,29CC (T6) ;0->BONDdata+29CC: select "CANCEL" -//7F0C31A8: -LB A0,001B (SP) ;SP+1B= player# -ORI A1,R0,8000 ;A1=A button -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -SW T0,0030 (SP) -LUI A3,8008 -ADDIU A3,A3,A0B0 -BEQ V0,R0,7F0C324C ;branch if A not pressed -LW T0,0030 (SP) -LW T5,0000 (A3) ;T5=p->BONDdata -ADDIU AT,R0,0004 -LW T7,29C8 (T5) ;T7=BONDdata+29C8: MP page -BNEL T7,AT,7F0C3250 ;branch if not page 4--pause -LW T2,0000 (A3) -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI V1,8009 -ADDIU V1,V1,C718 -LW T8,0000 (V1) ;T8=8008C718: TRUE if paused -ADDIU T9,R0,0001 -BNEZ T8,7F0C321C ;branch if paused -NOP -//7F0C31FC: pause if unpaused -JAL 7F09B150 ;V0= cur player # -SW T9,0000 (V1) -LUI AT,8009 -SW V0,C71C (AT) ;V0=8008C71C: player# who paused game -JAL 7F0BFBF8 ;A0->80048370: player control lock -ADDIU A0,R0,0001 ;A0=1: lock controls -BEQ R0,R0,7F0C350C -LW V0,002C (SP) -//7F0C321C: unpause if paused -JAL 7F09B150 ;V0= cur player # -NOP -LUI T1,8009 -LW T1,C71C (T1) ;T1=8008C71C: player# who paused game -LUI V1,8009 -ADDIU V1,V1,C718 -BNE V0,T1,7F0C3508 ;branch if you didn't pause the game -OR A0,R0,R0 ;A0=0: unlock -JAL 7F0BFBF8 ;A0->80048370: player control lock -SW R0,0000 (V1) ;0->8008C718: unpause -BEQ R0,R0,7F0C350C -LW V0,002C (SP) -//7F0C324C: -LW T2,0000 (A3) ;T2=p->BONDdata -ADDIU A2,R0,0007 -LB A0,001B (SP) ;A0=cur.player# -LW T3,29C8 (T2) ;T3=BONDdata+29C8: MP page -ORI A1,R0,9000 ;A1=A, Start button -BNE A2,T3,7F0C32A8 ;branch if not page 7 -NOP -//7F0C3268: get back into MP menus after finished -LB A0,001B (SP) -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=B button -BEQL V0,R0,7F0C350C ;branch if no buttons pressed -LW V0,002C (SP) -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T6,0000 (A3) ;T6=p->BONDdata -ADDIU T4,R0,0001 -ADDIU T5,R0,0003 -SW T4,29C4 (T6) ;1->BONDdata+29C4: enable MP menu -LW T7,0000 (A3) -BEQ R0,R0,7F0C3508 -SW T5,29C8 (T7) ;3->BONDdata+29C8: page 3--scores -//7F0C32A8: -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -SW T0,0030 (SP) -LUI A3,8008 -ADDIU A3,A3,A0B0 -BEQ V0,R0,7F0C32F4 ;branch if A or Start not pressed -LW T0,0030 (SP) -LW V1,0000 (A3) ;V1=p->BONDdata -ADDIU AT,R0,0005 -LW V0,29C8 (V1) ;V0=BONDdata+29C8: MP page -BEQ V0,AT,7F0C32D8 ;branch if page 5--exit -ADDIU AT,R0,0006 -BNE V0,AT,7F0C330C ;branch if not page 6--cancel/confirm -//7F0C32D8: -ADDIU AT,R0,0006 -BNEL V0,AT,7F0C32F8 ;branch if not page 6--cancel/confirm -LB A0,001B (SP) -LW T8,29CC (V1) ;T8=BONDdata+29CC: selected page 6 option -ADDIU AT,R0,0001 -BNE T8,AT,7F0C330C ;branch if "CONFIRM" not selected -NOP -//7F0C32F4: page 5 and confirm -LB A0,001B (SP) ;A0=cur.player# -ADDIU A1,R0,4000 ;A1=B button -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -SW T0,0030 (SP) -BEQ V0,R0,7F0C3450 ;branch if B not pressed -LW T0,0030 (SP) -JAL 7F0C1FDC ;play watch beep SE -SW T0,0030 (SP) -LUI T9,8009 -LW T9,C704 (T9) ;T9=8008C704: TRUE when game over -LUI A3,8008 -ADDIU A3,A3,A0B0 -ADDIU A2,R0,0007 -BEQ T9,R0,7F0C3410 ;branch if game not over -LW T0,0030 (SP) -LW T1,0000 (A3) ;T1=p->BONDdata -OR V1,R0,R0 ;V1=0 #finished -OR A0,R0,R0 ;A0=0 count -BLEZ T0,7F0C33F8 ;branch if invalid #players -SW A2,29C8 (T1) ;7->BONDdata+29C8: set page 7--waiting for end of MP stage -ANDI A3,T0,0003 ;A3=#players -BEQ A3,R0,7F0C3384 ;branch if invalid # players -OR A1,A3,R0 ;A1=#players -LUI T3,8008 -ADDIU T3,T3,9EE0 ;T3=80079EE0: table of player BONDdata pointers -SLL T2,R0,0x2 -ADDU V0,T2,T3 ;V0=offset to next BONDdata pointer -//7F0C3360: get count of players finished with menus -LW T4,0000 (V0) ;T4=p->BONDdata -ADDIU A0,A0,0001 ;A0++ count++ -LW T6,29C8 (T4) ;T6=BONDdata+29C8: MP page -BNE A2,T6,7F0C3378 ;branch if not set to page 7 -NOP -ADDIU V1,V1,0001 ;V1++ finished++ -BNE A1,A0,7F0C3360 ;loop for each player -ADDIU V0,V0,0004 ;V0+=4 next BONDdata entry -BEQ A0,T0,7F0C33F8 ;branch if count equals #players -LUI T7,8008 -ADDIU T7,T7,9EE0 ;T7=80079EE0: table of BONDdata pointers -SLL T5,A0,0x2 ;T5=count->offset -SLL T8,T0,0x2 ;T8=#players->offset -ADDU A1,T8,T7 ;A1=p->BONDdata for last player -ADDU V0,T5,T7 ;V0=p->BONDdata for player -LW T9,0000 (V0) ;T9=p->BONDdata -LW T1,29C8 (T9) ;T1=BONDdata+29C8: MP page -BNEL A2,T1,7F0C33B4 ;branch if not page 7 -LW T2,0004 (V0) -ADDIU V1,V1,0001 ;V1++ finished++ -//7F0C33B0: -LW T2,0004 (V0) ;T2=p->next BONDdata -LW T3,29C8 (T2) ;T3=BONDdata+29C8: MP page -BNEL A2,T3,7F0C33C8 ;branch if not page 7 -LW T4,0008 (V0) -ADDIU V1,V1,0001 ;V1++ finished++ -//7F0C33C4: -LW T4,0008 (V0) ;T4=p->next next BONDdata -LW T6,29C8 (T4) ;T6=BONDdata+29C8: MP page -BNEL A2,T6,7F0C33DC ;branch if not page 7 -LW T5,000C (V0) -ADDIU V1,V1,0001 ;V1++ finished++ -//7F0C33D8: -LW T5,000C (V0) ;T5=p->next next next BONDdata -ADDIU V0,V0,0010 ;V0+=10 offset to table end -LW T8,29C8 (T5) ;T8=BONDdata+29C8: MP page -BNE A2,T8,7F0C33F0 ;branch if not page 7 -NOP -ADDIU V1,V1,0001 ;V1++ finished++ -//7F0C33F0: -BNEL V0,A1,7F0C33A0 ;branch if V0!=end of table -LW T9,0000 (V0) -//7F0C33F8: return to menus if everyone finished -BNEL V1,T0,7F0C350C ;branch if all players aren't finished yet -LW V0,002C (SP) -JAL 70006950 ;set loaded stage number; incidentally, could use 70006930 to set to 5A -ADDIU A0,R0,005A ;A0=5A: return to main menus -BEQ R0,R0,7F0C350C -LW V0,002C (SP) -//7F0C3410: return to MP gameplay -LW T7,0000 (A3) ;T7=p->BONDdata -ADDIU T9,R0,003C -SW R0,29C4 (T7) ;0->BONDdata+29C4: disable MP menu -LW T1,0000 (A3) ;T1=p->BONDdata -JAL 7F09B150 ;V0=cur.player# -SW T9,2A00 (T1) ;3C->BONDdata+2A00: display health for 60 seconds -LUI T2,8009 -LW T2,C71C (T2) ;T2=8008C71C: player# who paused game -LUI V1,8009 -ADDIU V1,V1,C718 -BNE V0,T2,7F0C3508 ;branch if didn't pause game -OR A0,R0,R0 ;A0=0: unlock -JAL 7F0BFBF8 ;A0->80048370: player control lock -SW R0,0000 (V1) ;0->8008C718: unpause -BEQ R0,R0,7F0C350C -LW V0,002C (SP) -//7F0C3450: test if pressed select on page 5 -LB A0,001B (SP) ;A0=cur.player# -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,9000 ;A1=A, Start button -LUI A3,8008 -BEQ V0,R0,7F0C34A4 ;branch if didn't press buttons -ADDIU A3,A3,A0B0 -LW T3,0000 (A3) ;T3=p->BONDdata -ADDIU AT,R0,0005 -LW T4,29C8 (T3) ;T4=BONDdata+29C8: MP page -BNEL T4,AT,7F0C34A8 ;branch if not page 5--exit -LB A0,001B (SP) -//7F0C347C: swap page 5 for 6 -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T5,0000 (A3) ;T5=p->BONDdata -ADDIU T6,R0,0006 -SW T6,29C8 (T5) ;6->BONDdata+29C8: set page 6--cancel/confirm -LW T8,0000 (A3) ;T8=p->BONDdata -BEQ R0,R0,7F0C3508 -SW R0,29CC (T8) ;0->BONDdata+29CC: select "CANCEL" -//7F0C34A4: test if pressed select on page 6 -LB A0,001B (SP) -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,9000 ;A1=A, Start button -LUI A3,8008 -BEQ V0,R0,7F0C3508 ;branch if buttons not pressed -ADDIU A3,A3,A0B0 -LW V1,0000 (A3) ;V1=p->BONDdata -ADDIU AT,R0,0006 -LW T7,29C8 (V1) ;T7=BONDdata+29C8: MP page -BNEL T7,AT,7F0C350C ;branch if not page 6--cancel/confirm -LW V0,002C (SP) -//7F0C34D0: cancel or confirm -LW T9,29CC (V1) ;T9=BONDdata+29CC: selected page 6 option -ADDIU AT,R0,0001 -BNEL T9,AT,7F0C350C ;branch if "CONFIRM" not selected -LW V0,002C (SP) -//7F0C34E0: "CONFIRM" selected -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T1,0000 (A3) ;T1=p->BONDdata -OR A0,R0,R0 -SW R0,29C4 (T1) ;0->BONDdata+29C4: disable MP menu -LW T2,0000 (A3) -JAL 7F0C2530 ;determines and sets MP awards -SW R0,2A00 (T2) ;0->BONDdata+2A00: hide health display -//7F0C3508: reset press register -LW V0,002C (SP) ;V0=horz.state -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=p->BONDdata -BEQ V0,R0,7F0C3520 ;branch if not pressing left or right -ADDIU AT,R0,FFFF -BNE V0,AT,7F0C352C ;branch if not pressing left -//7F0C3520: set to 1 if 0 or -1 -ADDIU T3,R0,0001 -BEQ R0,R0,7F0C3590 ;good as pressing left -SW T3,29D0 (V1) ;1->BONDdata+29D0: press register ready -//7F0C352C: pressing left or right -BEQ R0,R0,7F0C3590 -SW R0,29D0 (V1) ;0->BONDdata+29D0: reset press register -//7F0C3534: test if activating the menu -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,1000 ;A1=Start button -BEQL V0,R0,7F0C3594 ;branch if start wasn't pressed -LW RA,0014 (SP) -//7F0C3544: activate the menu -JAL 7F0C1FDC ;play watch beep SE -NOP -LUI A3,8008 -ADDIU A3,A3,A0B0 -LW T6,0000 (A3) ;T6=p->BONDdata -ADDIU T4,R0,0001 -ADDIU T5,R0,0003 -SW T4,29C4 (T6) ;1->BONDdata+29C4: enable MP menu -LW T8,0000 (A3) ;T8=p->BONDdata -ADDIU T7,R0,0001 -SW T5,29C8 (T8) ;3->BONDdata+29C8: set page 3--scores page -LW T9,0000 (A3) ;T9=p->BONDdata -SW T7,29D0 (T9) ;1->BONDdata+29D0: press register ready -LW V1,0000 (A3) ;V1=p->BONDdata -LWC1 F4,00DC (V1) ;F4=BONDdata+DC: watch: health -SWC1 F4,00EC (V1) ;F4->BONDdata+EC: display watch health total -LW V1,0000 (A3) ;V1=p->BONDdata -LWC1 F6,00E0 (V1) ;F6=BONDdata+E0: watch: armour -SWC1 F6,00F0 (V1) ;F6->BONDdata+F0: display watch armour total -//7F0C3590: return -LW RA,0014 (SP) -ADDIU SP,SP,0038 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C35A0 - display value.txt b/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C35A0 - display value.txt deleted file mode 100644 index 28a9c6c..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C35A0 - display value.txt +++ /dev/null @@ -1,230 +0,0 @@ -7F0C35A0 F80D0 Displays player data on MP menu screens; returns V0=new DL pos. - accepts: A0=p->DL, A1=x pos., A2=y pos., A3=p->data arguments, SP+10=display type - display types: - 0 green - 1 green highlighted - 2 red - 3 red highlighted - 4 blue - 5 blue highlighted - -ADDIU SP,SP,FFA0 -SW S0,0034 (SP) -OR S0,A1,R0 ;S0=A1: x position -SW S1,0038 (SP) -OR S1,A0,R0 ;S1=A0: p->DL -SW RA,003C (SP) -SW A2,0068 (SP) ;SP+68=A2: -LUI A1,8006 -ADDIU A1,A1,BC20 ;A1=8005BC20: p->"%d" -OR A2,A3,R0 ;A2=A3: p->data arguments -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A0,SP,0048 ;A0=SP+48: p->buffer for new string -LUI T6,8004 -LW T6,0EAC (T6) ;T6=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: p->ret.height -ADDIU A1,SP,0054 ;A1=SP+54: p->ret.width -ADDIU A2,SP,0048 ;A2=SP+48: p->text -SW R0,0014 (SP) ;SP+14=0 ??? -JAL 7F0AE98C ;proportions of string A2 -SW T6,0010 (SP) ;SP+10=p->1st font table -//7F0C35F8: -LW T7,0054 (SP) ;T7=str.width -LW T1,0070 (SP) ;T1=SP+70 (SP+10 from caller): disp.type -LW T0,0068 (SP) ;T0=SP+68: y pos. -SRA T8,T7,0x1 -SUBU T9,S0,T8 ;T9=x pos. - (width/2) -SLTIU AT,T1,0006 ;TRUE if type 0-5 -SW T9,005C (SP) ;SP+5C= T9: x pos. -BEQ AT,R0,7F0C38C0 ;skip if not valid type -SW T0,0058 (SP) ;SP+58= T0: ypos -SLL T1,T1,0x2 -LUI AT,8006 -ADDU AT,AT,T1 -LW T1,BC88 (AT) ;T1=8005BC88+offset: display routine -JR T1 -NOP - -7F0C3634 green text - normal -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 ;S0=clip width -LUI T3,8004 -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LW T3,0EB0 (T3) ;T3=80040EB0: p->2nd font table -LUI T5,00FF -ORI T5,T5,00B0 ;T5=00FF00B0 green -SW T5,0018 (SP) ;SP+18=font colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,005C ;A1=SP+5C: x pos. -ADDIU A2,SP,0058 ;A2=SP+58: y pos. -ADDIU A3,SP,0048 ;A3=SP+48: p->text -SW S0,001C (SP) ;SP+1C= clip width -SW V0,0020 (SP) ;SP+20= clip height -SW R0,0024 (SP) ;SP+24= y offset (0) -SW R0,0028 (SP) ;SP+28= x offset (0) -SW T4,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text on MP menu -SW T3,0010 (SP) ;SP+10= p->2nd font table -BEQ R0,R0,7F0C38C0 -OR S1,V0,R0 - -7F0C369C green text highlighted -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 ;S0=clip width -LUI T7,8004 -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LW T7,0EB0 (T7) ;T7=80040EB0: p->2nd font table -LUI T9,A0FF -LUI T0,0070 -ORI T0,T0,00A0 ;T0=007000A0 bg colour (dark green) -ORI T9,T9,A0F0 ;T9=A0FFA0F0 fg colour (light green) -SW T9,0018 (SP) ;SP+18= fg colour -SW T0,001C (SP) ;SP+1C= bg colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,005C ;A1=SP+5C: p->x position -ADDIU A2,SP,0058 ;A2=SP+58: p->y position -ADDIU A3,SP,0048 ;A3=SP+48: p->text -SW S0,0020 (SP) ;SP=20= clip height -SW V0,0024 (SP) ;SP+24= clip width -SW R0,0028 (SP) ;SP=28= y offset (0) -SW R0,002C (SP) ;SP+2C= x offset (0) -SW T8,0014 (SP) ;SP+14= p->1st font table -JAL 7F0AE6EC ;display 2-tone text on MP menu -SW T7,0010 (SP) ;SP+10= p->2nd font table -BEQ R0,R0,7F0C38C0 -OR S1,V0,R0 - -7F0C3710 red text normal -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 -LUI T2,8004 -LUI T3,8004 -LW T3,0EAC (T3) ;T3=80040EAC: p->1st font table -LW T2,0EB0 (T2) ;T2=80040EB0: p->2nd font table -LUI T4,FF40 -ORI T4,T4,40B0 ;T4=FF4040B0 red -SW T4,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,005C -ADDIU A2,SP,0058 -ADDIU A3,SP,0048 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0014 (SP) -JAL 7F0ADABC ;display monotone text on MP menu -SW T2,0010 (SP) -BEQ R0,R0,7F0C38C0 -OR S1,V0,R0 - -7F0C3778 red text highlighted -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 -LUI T6,8004 -LUI T7,8004 -LW T7,0EAC (T7) -LW T6,0EB0 (T6) -LUI T8,FFA0 -LUI T9,7000 -ORI T9,T9,00A0 ;T9=700000A0 bg colour (dk. red) -ORI T8,T8,A0F0 ;T8=FFA0A0F0 fg colour (lt. red) -SW T8,0018 (SP) -SW T9,001C (SP) -OR A0,S1,R0 -ADDIU A1,SP,005C -ADDIU A2,SP,0058 -ADDIU A3,SP,0048 -SW S0,0020 (SP) -SW V0,0024 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T7,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text on MP menu -SW T6,0010 (SP) -BEQ R0,R0,7F0C38C0 -OR S1,V0,R0 - -7F0C37EC blue text normal -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T0,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T0,R0 -LUI T1,8004 -LUI T2,8004 -LW T2,0EAC (T2) -LW T1,0EB0 (T1) -LUI T3,4040 -ORI T3,T3,FFB0 ;T3=4040FFB0 blue -SW T3,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,005C -ADDIU A2,SP,0058 -ADDIU A3,SP,0048 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -JAL 7F0ADABC ;display monotone text on MP menu -SW T1,0010 (SP) -BEQ R0,R0,7F0C38C0 -OR S1,V0,R0 - -7F0C3854 blue text highlighted -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LUI T5,8004 -LUI T6,8004 -LW T6,0EAC (T6) -LW T5,0EB0 (T5) -LUI T7,A0A0 -ORI T7,T7,FFF0 ;T7=A0A0FFF0 fg colour (lt. blue) -ADDIU T8,R0,70A0 ;T8=000070A0 bg colour (dk. blue) -SW T8,001C (SP) -SW T7,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,005C -ADDIU A2,SP,0058 -ADDIU A3,SP,0048 -SW S0,0020 (SP) -SW V0,0024 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T6,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text on MP menu -SW T5,0010 (SP) -OR S1,V0,R0 -//7F0C38C0: return -LW RA,003C (SP) -OR V0,S1,R0 ;V0=S1: p->DL -LW S1,0038 (SP) -LW S0,0034 (SP) -JR RA -ADDIU SP,SP,0060 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C4024 - display pages.txt b/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C4024 - display pages.txt deleted file mode 100644 index 84ba35c..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/7F0C4024 - display pages.txt +++ /dev/null @@ -1,2157 +0,0 @@ -7F0C4024 F8B54 multiplayer watch menu display - accepts: A0=p->display list -ADDIU SP,SP,FF28 -SW RA,003C (SP) -SW S1,0038 (SP) -OR S1,A0,R0 ;S1=A0: p->display list (DL) -JAL 7F09B150 ;V0= cur player # -SW S0,0034 (SP) -JAL 7F09A464 ;V0=# players -SW V0,00D4 (SP) ;SP+D4= cur.player -ADDIU AT,R0,0001 -OR T0,V0,R0 ;T0=#players -BNE V0,AT,7F0C405C ;branch if multi -OR S0,R0,R0 ;S0=0 -BEQ R0,R0,7F0C6034 ;quit if solo -OR V0,S1,R0 ;V0=S1: DL -//7F0C405C: -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -OR A0,S1,R0 ;A0=S1: DL -LW T6,29C4 (V1) ;T6=BONDdata+29C4: TRUE when menu activated -BEQL T6,R0,7F0C5E24 ;branch if not set -LW T6,00D8 (V1) -JAL 7F0ACD98 -SW T0,00D0 (SP) ;SP+D0=T0: #players -LW T7,00D0 (SP) ;T7=SP+D0: #players -ADDIU AT,R0,0002 -OR S1,V0,R0 ;S1=V0: p->DL -BNE T7,AT,7F0C409C ;branch if 3-4 player -LUI T9,8008 -ADDIU T8,R0,0050 -BEQ R0,R0,7F0C40A0 -SW T8,00A8 (SP) ;SP+A8=0x50 -//7F0C409C: 3-4 player SP+A8=0 -SW R0,00A8 (SP) ;SP+A8=0 -//7F0C40A0: 2 player SP+A8=0x50 -LW T9,A0B0 (T9) ;T9=8007A0B0: p->BONDdata -LW T1,29C8 (T9) ;T1=BONDdata+29C8: selected page in menu -SLTIU AT,T1,0008 -BEQ AT,R0,7F0C4190 ;branch if invalid page -SLL T1,T1,0x2 -LUI AT,8006 -ADDU AT,AT,T1 -LW T1,BD00 (AT) ;T1=8005BD00+offset: jump to page handler -JR T1 -NOP -//7F0C40C8: pages 0,1,2,3 - play -LUI T2,8009 -LW T2,C704 (T2) ;T2=8008C704: TRUE when game over -LUI T3,8009 -BNEZ T2,7F0C40EC -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A015 ;A0=ID A015: "PLAY" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) -// "GAME OVER" -LW T3,C710 (T3) ;T3=8007C710: "blink" register -BEQ T3,R0,7F0C4108 ;branch if not set -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A016 ;A0=ID A016: "GAME OVER" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) -// "START TO EXIT" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A017 ;A0=A017: "START TO EXIT" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) -//7F0C4118: page 7 - blank -LUI T4,8006 -ADDIU T4,T4,BC24 ;T4=8005BC24: NULL -BEQ R0,R0,7F0C4190 -SW T4,00A4 (SP) -//7F0C4128: page 4 - pause/unpause -LUI T5,8009 -LW T5,C718 (T5) ;T5=8008C718: TRUE if paused -BEQ T5,R0,7F0C4160 ;branch if unpaused -NOP -// "PAUSED" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A018 ;A0=ID A018: "PAUSED" -JAL 7F09B150 ;V0= cur player # -SW V0,00A4 (SP) -LUI T6,8009 -LW T6,C71C (T6) ;T6=8008C71C: player# who paused game -BNE V0,T6,7F0C4190 ;branch if not player who paused game -NOP -BEQ R0,R0,7F0C4190 -ADDIU S0,R0,0001 ;S0=1 you paused game -//7F0C4160: "PAUSE" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A019 ;A0=ID A019: "PAUSE" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) -//7F0C4170: pages 5,6 - exit -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01A ;A0=ID A01A: "EXIT" -JAL 70004514 ;V0= [p@800232A8+20] -SW V0,00A4 (SP) -LW T7,00A8 (SP) -ADDU A0,V0,T7 -ADDIU A0,A0,0041 -SW A0,00CC (SP) -//7F0C4190: display text to window -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -LW A2,00A4 (SP) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T8,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T9,00A8 (SP) -LW T2,00C0 (SP) -ADDU T1,V0,T9 -SRA T3,T2,0x1 -SUBU A0,T1,T3 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T4,00BC (SP) -SRA T5,T4,0x1 -SUBU T6,V0,T5 -ADDIU T7,T6,0016 -BEQ S0,R0,7F0C426C ;branch if you didn't pause game -SW T7,00C8 (SP) -//7F0C4208: -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LUI T9,8004 -LUI T2,8004 -LW T2,0EAC (T2) ;T2=80040EAC: p->1st font table -LW T9,0EB0 (T9) ;T9=80040EB0: p->2nd font table -LUI T1,A0FF -LUI T3,0070 -ORI T3,T3,00A0 ;T3=007000A0: text colour (dark green) -ORI T1,T1,A0F0 ;T1=A0FFA0F0: text colour (light green) -SW T1,0018 (SP) ;SP+18= text foreground colour -SW T3,001C (SP) ;SP+1C= text background colour -OR A0,S1,R0 ;A0=p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->string -SW S0,0020 (SP) ;SP+20= clip height -SW V0,0024 (SP) ;SP+24= clip width -SW R0,0028 (SP) ;SP+28= y offset -SW R0,002C (SP) ;SP+2C= x offset -SW T2,0014 (SP) ;SP+14= p->1st font table -JAL 7F0AE6EC ;display 2-tone text -SW T9,0010 (SP) ;SP+10= p->2nd font table -BEQ R0,R0,7F0C42D0 -OR S1,V0,R0 -//7F0C426C: -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LUI T5,8004 -LUI T6,8004 -LW T6,0EAC (T6) -LW T5,0EB0 (T5) -LUI T7,00FF -ORI T7,T7,00B0 ;T7=00FF00B0: : text colour (pure green) -SW T7,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T5,0010 (SP) -OR S1,V0,R0 -//7F0C42D0: -JAL 7F0C1E8C ;TRUE when left enabled on MP menu page -NOP -BEQ V0,R0,7F0C4434 ;branch if left not enabled -NOP -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LUI V1,8009 -LW V1,C704 (V1) ;V1=8008C704: TRUE when game over -SLL T9,V0,0x10 -ADDIU T8,R0,000A -BEQL V1,R0,7F0C430C ;branch if game running -SW R0,0050 (SP) ;SP+50= 0 -BEQ R0,R0,7F0C430C -SW T8,0050 (SP) ;SP+50= 0xA -//7F0C4308: -SW R0,0050 (SP) -LW T1,00A8 (SP) -LW T4,0050 (SP) -SRA T2,T9,0x10 -ADDU T3,T2,T1 -SUBU A0,T3,T4 -ADDIU A0,A0,0028 -BEQ V1,R0,7F0C4334 ;branch if game running -SW A0,00CC (SP) -ADDIU A0,A0,FFF8 -SW A0,00CC (SP) -//7F0C4334: -JAL 70004524 ;V0= [p@800232A8+22] -NOP -LUI T6,8009 -LW T6,C708 (T6) ;T6=8008C708: -ADDIU T5,V0,0016 -SW T5,00C8 (SP) -BNEZ T6,7F0C43C0 ;branch if ??? -NOP -// -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 -LUI T8,8004 -LUI T9,8004 -LW T9,0EAC (T9) -LW T8,0EB0 (T8) -LUI T2,00FF -ORI T2,T2,00B0 -LUI A3,8006 -ADDIU A3,A3,BC28 ;A3=8005BC28: "<" [3C00] -SW T2,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T8,0010 (SP) -BEQ R0,R0,7F0C4434 -OR S1,V0,R0 -//7F0C43C0: -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 -LUI T3,8004 -LUI T4,8004 -LW T4,0EAC (T4) -LW T3,0EB0 (T3) -LUI T5,A0FF -LUI T6,0070 -ORI T6,T6,00A0 -ORI T5,T5,A0F0 -LUI A3,8006 -ADDIU A3,A3,BC28 ;A3=8005BC28: "<" [3C00] -SW T5,0018 (SP) -SW T6,001C (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -SW S0,0020 (SP) -SW V0,0024 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T4,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text -SW T3,0010 (SP) -OR S1,V0,R0 -// -JAL 7F0C1E20 ;TRUE when right enabled on MP menu page -NOP -BEQ V0,R0,7F0C4598 -NOP -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LUI V1,8009 -LW V1,C704 (V1) ;V1=8008C704: TRUE when game over -SLL T9,V0,0x10 -ADDIU T7,R0,000A -BEQL V1,R0,7F0C4470 -SW R0,0050 (SP) ;SP+50: 0 -BEQ R0,R0,7F0C4470 -SW T7,0050 (SP) ;SP+50: 0xA -//7F0C446C: -SW R0,0050 (SP) -LW T8,0050 (SP) -LW T3,00A8 (SP) -SRA T2,T9,0x10 -ADDU T1,T8,T2 -ADDU A0,T1,T3 -ADDIU A0,A0,0070 -BEQ V1,R0,7F0C4498 ;branch when game running -SW A0,00CC (SP) -// -ADDIU A0,A0,0008 -SW A0,00CC (SP) -JAL 70004524 ;V0= [p@800232A8+22] -NOP -LUI T5,8009 -LW T5,C708 (T5) ;T5=8008C708: -ADDIU T4,V0,0016 -SW T4,00C8 (SP) -BNEZ T5,7F0C4524 -NOP -// -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 -LUI T7,8004 -LUI T9,8004 -LW T9,0EAC (T9) -LW T7,0EB0 (T7) -LUI T8,00FF -ORI T8,T8,00B0 -LUI A3,8006 -ADDIU A3,A3,BC2C ;A3=8005BC2C: ">" [3E00] -SW T8,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T7,0010 (SP) -BEQ R0,R0,7F0C4598 -OR S1,V0,R0 -// -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LUI T1,8004 -LUI T3,8004 -LW T3,0EAC (T3) -LW T1,0EB0 (T1) -LUI T4,A0FF -LUI T5,0070 -ORI T5,T5,00A0 -ORI T4,T4,A0F0 -LUI A3,8006 -ADDIU A3,A3,BC2C ;A3=8005BC2C: ">" [3E00] -SW T4,0018 (SP) -SW T5,001C (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -SW S0,0020 (SP) -SW V0,0024 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T3,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text -SW T1,0010 (SP) -OR S1,V0,R0 -//7F0C4598: -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=8007A0B0: BONDdata pointer -ADDIU AT,R0,0003 -LW T6,00D0 (SP) ;T6=SP+D0: #players -LW V0,29C8 (V1) ;V0=BONDdata+29C8: selected page in MP menu -BEQ V0,AT,7F0C45BC ;branch if scores page (3) -ADDIU AT,R0,0004 -BNEL V0,AT,7F0C4C60 ;branch if not pause page (4) -ADDIU AT,R0,0002 -//7F0C45BC: page 3--scores -BLEZ T6,7F0C45F4 ;branch if stupid #players -OR A0,R0,R0 ;A0=playercount -ADDIU V1,SP,0094 ;V1=SP+94: buffer for scores -//7F0C45C8: collect scores -SW V1,0044 (SP) -JAL 7F0C38D8 ;returns V0=score (in NSNA: V0=score, V1=time) -SW A0,0090 (SP) ;SP+90= count -ADDU V0,V0,V1 ;V0=total score in NSNA -LW V1,0044 (SP) -LW A0,0090 (SP) ;A0=count -SW V0,0000 (V1) -LW T7,00D0 (SP) ;T7=#players -ADDIU A0,A0,0001 ;A0++ count++ -BNE A0,T7,7F0C45C8 ;loop for each player -ADDIU V1,V1,0004 ;V1+=4 next word in buffer -//7F0C45F4: -LUI A0,8009 -LW A0,C704 (A0) ;A0=8008C704: TRUE when game over -SLTIU T9,A0,0001 ;TRUE if game running -BEQ T9,R0,7F0C4618 ;branch if game over -OR A0,T9,R0 ;A0=0 -LUI A0,8009 -LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped -SLTIU T8,A0,0001 ;TRUE if playing -OR A0,T8,R0 ;A0=!play -//7F0C4618: determine if displaying scores... -JAL 7F0C3F5C ;V0=TRUE if rank to be displayed on MP menu -NOP -BEQ V0,R0,7F0C46F4 -ADDIU A0,SP,00AC -//7F0C4628: display scores -JAL 7F0C3C94 ;sprint rank of player A1 to A0 -LW A1,00D4 (SP) -LUI T2,8004 -LW T2,0EAC (T2) -LUI A3,8004 -LW A3,0EB0 (A3) -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -ADDIU A2,SP,00AC -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T1,00A8 (SP) -LW T4,00C0 (SP) -ADDU T3,V0,T1 -SRA T5,T4,0x1 -SUBU A0,T3,T5 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T6,00BC (SP) -SRA T7,T6,0x1 -SUBU T9,V0,T7 -ADDIU T8,T9,0025 -JAL 7000441C ;V0= text clip width -SW T8,00C8 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LUI T1,8004 -LUI T4,8004 -LW T4,0EAC (T4) -LW T1,0EB0 (T1) -LUI T3,00FF -ORI T3,T3,00B0 ;T3=00FF00B0 font colour [green] -SW T3,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -ADDIU A3,SP,00AC -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T1,0010 (SP) -OR S1,V0,R0 -//7F0C46F4: -LUI A0,8009 -LW A0,C704 (A0) ;A0=8008C704: TRUE when game over -SLTIU T5,A0,0001 ;!game over -BEQ T5,R0,7F0C4718 ;branch if game over -OR A0,T5,R0 ;A0=0 -LUI A0,8009 -LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped -SLTIU T6,A0,0001 ;!play stopped -OR A0,T6,R0 ;A0=!play stopped -//7F0C4718: determine if displaying text... -JAL 7F0C3FCC ;V0= TRUE if displaying score in MP menu -NOP -BEQ V0,R0,7F0C4C50 -NOP -//7F0C4728: -JAL 7F014758 ;V0=scenario (in NSNA: scenario::flags) -NOP -SW V0,0080 (SP) ;SP+80= scenario::flags -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01B ;A0=ID A01B: "SCORES" -LUI T7,8004 -LW T7,0EAC (T7) ;T7=80040EAC: -LUI A3,8004 -SW V0,00A4 (SP) ;SP+A4= p->text -LW A3,0EB0 (A3) ;A3=80040EB0: -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T7,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T9,00A8 (SP) -LW T2,00C0 (SP) -ADDU T8,V0,T9 -SRA T1,T2,0x1 -SUBU A0,T8,T1 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T4,00BC (SP) -SRA T3,T4,0x1 -SUBU T5,V0,T3 -ADDIU T6,T5,0035 -JAL 7000441C ;V0= text clip width -SW T6,00C8 (SP) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 -LUI T9,8004 -LUI T2,8004 -LW T2,0EAC (T2) -LW T9,0EB0 (T9) -LUI T8,00FF -ORI T8,T8,00B0 ;T8=00FF00B0: font colour [green] -SW T8,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) -LW V1,0080 (SP) ;V1=SP+80: scenario::flags -ADDIU AT,R0,0005 -OR S1,V0,R0 ;S1=V0: DL -BEQ V1,AT,7F0C4834 ;branch if team 2vs2 -LW T1,00D4 (SP) ;T1=cur.player -ADDIU AT,R0,0006 -BEQ V1,AT,7F0C4834 ;branch if team 3vs1 -ADDIU AT,R0,0007 -BEQ V1,AT,7F0C4834 ;branch if team 2vs1 -ADDIU AT,R0,0002 -BEQ V1,AT,7F0C4834 ;branch if Flag Tag -ADDIU AT,R0,0003 -BNE V1,AT,7F0C4888 ;branch if not MwtGX -//7F0C4834: -SLL T4,T1,0x3 -SUBU T4,T4,T1 -SLL T4,T4,0x4 -LUI T3,8008 -ADDU T3,T3,T4 -LBU T3,9F59 (T3) ;T3=80079F59+offset: stats::scenario flags -ADDIU T9,R0,0005 -ADDIU T2,R0,0004 -BNEZ T3,7F0C4878 ;branch if "team 2" -ADDIU T8,R0,0002 -//7F0C485C: team 1 (red) -ADDIU T5,R0,0003 -ADDIU T6,R0,0002 -ADDIU T7,R0,0004 -SW T5,008C (SP) ;SP+8C= 3 red highlighted -SW T6,0088 (SP) ;SP+88= 2 red -BEQ R0,R0,7F0C4898 -SW T7,0084 (SP) ;SP+84= 4 blue -//7F0C4878: team 2 (blue) -SW T9,008C (SP) ;SP+8C= 5 blue highlighted -SW T2,0088 (SP) ;SP+88= 4 blue -BEQ R0,R0,7F0C4898 -SW T8,0084 (SP) ;SP+84= 2 red -//7F0C4888: default -ADDIU T1,R0,0001 -SW T1,008C (SP) ;SP+8C= 1 green highlighted -SW R0,0088 (SP) ;SP+88= 0 green -SW R0,0084 (SP) ;SP+84= 0 green -//7F0C4898: 2 player display -LW T4,00D0 (SP) ;T4=SP+D0: #players -ADDIU AT,R0,0002 -BNE T4,AT,7F0C49DC ;branch if 3-4 player -NOP -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T3,R0 -LW T0,00D4 (SP) ;T0=cur.player# -SLL V1,V0,0x10 -SRA T5,V1,0x10 -BNEZ T0,7F0C48E0 ;branch if not player 1 -OR V1,T5,R0 -LW T6,008C (SP) -BEQ R0,R0,7F0C4918 -SW T6,0050 (SP) ;SP+50=highlighted colour -//7F0C48E0: -SLL T9,T0,0x3 -SUBU T9,T9,T0 -SLL T9,T9,0x4 -LUI T2,8008 -ADDU T2,T2,T9 -LUI T7,8008 -LBU T7,9F59 (T7) ;T7=player 1's team flag -LBU T2,9F59 (T2) ;T2=team flag for current player -LW A2,0084 (SP) ;A2=enemy team -BNE T7,T2,7F0C4914 ;branch if not a team member -NOP -BEQ R0,R0,7F0C4914 -LW A2,0088 (SP) ;A2=friendly team -//7F0C4914: -SW A2,0050 (SP) ;SP+50=team colour -LW T8,00A8 (SP) -LW T1,0050 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T8 -ADDIU A1,A1,0050 ;A1=x position -ADDIU A2,V1,0046 ;A2=y position -LW A3,0094 (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T1,0010 (SP) ;SP+10= colour type -// handle next row - player 2 -JAL 70004514 ;V0= [p@800232A8+20] -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T4,R0 -LW A0,00D4 (SP) -SLL V1,V0,0x10 -SRA T3,V1,0x10 -ADDIU AT,R0,0001 -BNE A0,AT,7F0C4978 -OR V1,T3,R0 -LW T5,008C (SP) -BEQ R0,R0,7F0C49B0 -SW T5,0050 (SP) -//7F0C4978: -SLL T9,A0,0x3 -SUBU T9,T9,A0 -LUI V0,8008 -ADDIU V0,V0,9EF0 ;80079EF0: p->stats -SLL T9,T9,0x4 -ADDU T7,V0,T9 ;T7=p->player's stats -LBU T2,0069 (T7) ;T2=stats::scenario flags -LBU T6,00D9 (V0) ;T6=player 2's stats::scenario flags -LW A2,0084 (SP) -BNE T6,T2,7F0C49AC -NOP -BEQ R0,R0,7F0C49AC -LW A2,0088 (SP) -//7F0C49AC: -SW A2,0050 (SP) -LW T8,00A8 (SP) -LW T1,0050 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T8 -ADDIU A1,A1,0050 ;A1=x pos. -ADDIU A2,V1,0056 ;A2=y pos. -LW A3,0098 (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T1,0010 (SP) ;SP+10= colour -BEQ R0,R0,7F0C4C50 -OR S1,V0,R0 -//7F0C49DC: 3-4 player -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T4,R0 -LW T0,00D4 (SP) -SLL V1,V0,0x10 -SRA T3,V1,0x10 -BNEZ T0,7F0C4A14 -OR V1,T3,R0 -LW T5,008C (SP) -BEQ R0,R0,7F0C4A4C -SW T5,0050 (SP) -//7F0C4A14: -SLL T7,T0,0x3 -SUBU T7,T7,T0 -SLL T7,T7,0x4 -LUI T6,8008 -ADDU T6,T6,T7 -LUI T9,8008 -LBU T9,9F59 (T9) -LBU T6,9F59 (T6) -LW A2,0084 (SP) -BNE T9,T6,7F0C4A48 -NOP -BEQ R0,R0,7F0C4A48 -LW A2,0088 (SP) -//7F0C4A48: -SW A2,0050 (SP) -LW T2,00A8 (SP) -LW T8,0050 (SP) -OR A0,S1,R0 -ADDU A1,S0,T2 -ADDIU A1,A1,0040 -ADDIU A2,V1,0046 -LW A3,0094 (SP) -JAL 7F0C35A0 ;display player data to MP menu -SW T8,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T1,R0 -LW T0,00D4 (SP) -SLL V1,V0,0x10 -SRA T4,V1,0x10 -ADDIU AT,R0,0001 -BNE T0,AT,7F0C4AAC -OR V1,T4,R0 -LW T3,008C (SP) -BEQ R0,R0,7F0C4AE4 -SW T3,0050 (SP) -//7F0C4AAC: -SLL T7,T0,0x3 -SUBU T7,T7,T0 -SLL T7,T7,0x4 -LUI T9,8008 -ADDU T9,T9,T7 -LUI T5,8008 -LBU T5,9FC9 (T5) -LBU T9,9F59 (T9) -LW A2,0084 (SP) -BNE T5,T9,7F0C4AE0 -NOP -BEQ R0,R0,7F0C4AE0 -LW A2,0088 (SP) -//7F0C4AE0: -SW A2,0050 (SP) -LW T6,00A8 (SP) -LW T2,0050 (SP) -OR A0,S1,R0 -ADDU A1,S0,T6 -ADDIU A1,A1,0060 -ADDIU A2,V1,0046 -LW A3,0098 (SP) -JAL 7F0C35A0 ;display player data to MP menu -SW T2,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T8,R0 -LW T0,00D4 (SP) -SLL V1,V0,0x10 -SRA T1,V1,0x10 -ADDIU AT,R0,0002 -BNE T0,AT,7F0C4B44 -OR V1,T1,R0 -LW T4,008C (SP) -BEQ R0,R0,7F0C4B7C -SW T4,0050 (SP) -//7F0C4B44: -SLL T7,T0,0x3 -SUBU T7,T7,T0 -SLL T7,T7,0x4 -LUI T5,8008 -ADDU T5,T5,T7 -LUI T3,8008 -LBU T3,A039 (T3) ;T3=8007A039: -LBU T5,9F59 (T5) ;T5=80079F59: stats::scenario flags -LW A2,0084 (SP) -BNE T3,T5,7F0C4B78 -NOP -BEQ R0,R0,7F0C4B78 -LW A2,0088 (SP) -//7F0C4B78: -SW A2,0050 (SP) -LW T9,00A8 (SP) -LW T6,0050 (SP) -OR A0,S1,R0 -ADDU A1,S0,T9 -ADDIU A1,A1,0040 -ADDIU A2,V1,0056 -LW A3,009C (SP) -JAL 7F0C35A0 ;display player data to MP menu -SW T6,0010 (SP) -LW T2,00D0 (SP) ;T2=SP+D0: #players -ADDIU AT,R0,0004 -OR S1,V0,R0 -BNE T2,AT,7F0C4C50 ;branch if not 4 players -NOP -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T8,R0 -LW A0,00D4 (SP) -SLL V1,V0,0x10 -SRA T1,V1,0x10 -ADDIU AT,R0,0003 -BNE A0,AT,7F0C4BF0 -OR V1,T1,R0 -LW T4,008C (SP) -BEQ R0,R0,7F0C4C28 -SW T4,0050 (SP) -//7F0C4BF0: -SLL T3,A0,0x3 -SUBU T3,T3,A0 -LUI V0,8008 -ADDIU V0,V0,9EF0 -SLL T3,T3,0x4 -ADDU T5,V0,T3 -LBU T9,0069 (T5) -LBU T7,01B9 (V0) -LW A2,0084 (SP) -BNE T7,T9,7F0C4C24 -NOP -BEQ R0,R0,7F0C4C24 -LW A2,0088 (SP) -//7F0C4C24: -SW A2,0050 (SP) -LW T6,00A8 (SP) -LW T2,0050 (SP) -OR A0,S1,R0 -ADDU A1,S0,T6 -ADDIU A1,A1,0060 -ADDIU A2,V1,0056 -LW A3,00A0 (SP) -JAL 7F0C35A0 ;display player data to MP menu -SW T2,0010 (SP) -OR S1,V0,R0 -//7F0C4C50: -LUI V1,8008 -BEQ R0,R0,7F0C5B44 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->cur.BONDdata -//7F0C4C5C: page 2--player kills -ADDIU AT,R0,0002 -BNE V0,AT,7F0C50D4 ;branch if not player kills page -LUI A0,8009 -LW A0,C704 (A0) ;A0=8008C704: TRUE when game over -SLTIU T8,A0,0001 ;!game over -BEQ T8,R0,7F0C4C88 ;branch if game over -OR A0,T8,R0 ;A0=0 -LUI A0,8009 -LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped -SLTIU T1,A0,0001 ;!stopped -OR A0,T1,R0 ;A0=!stopped -//7F0C4C88: determine if displaying text -JAL 7F0C3F5C -NOP -BEQ V0,R0,7F0C4D64 -ADDIU A0,SP,00AC -//7F0C4C98: -JAL 7F0C3C94 ;print rank of player A1 to A0 -LW A1,00D4 (SP) -LUI T4,8004 -LW T4,0EAC (T4) -LUI A3,8004 -LW A3,0EB0 (A3) -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -ADDIU A2,SP,00AC -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T3,00A8 (SP) -LW T7,00C0 (SP) -ADDU T5,V0,T3 -SRA T9,T7,0x1 -SUBU A0,T5,T9 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T6,00BC (SP) -SRA T2,T6,0x1 -SUBU T8,V0,T2 -ADDIU T1,T8,0025 -JAL 7000441C ;V0= text clip width -SW T1,00C8 (SP) -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LUI T3,8004 -LUI T7,8004 -LW T7,0EAC (T7) -LW T3,0EB0 (T3) -LUI T5,00FF -ORI T5,T5,00B0 ;T5=00FF00B0: font colour [green] -SW T5,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -ADDIU A3,SP,00AC -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T3,0010 (SP) -OR S1,V0,R0 -//7F0C4D64: display "P# KILLS" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01C ;A0=ID A01C: "P" -ORI A0,R0,A01D ;A0=ID A01D: "KILLS" -JAL 7F0C1DD8 ;V0=p->text A0 -SW V0,004C (SP) -LW A3,00D4 (SP) ;A3=cur.player# -LUI A1,8006 -ADDIU A1,A1,BC30 ;A1=8005BC30: "%s%d %s" -LW A2,004C (SP) -ADDIU A0,SP,00AC -SW V0,0010 (SP) -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A3,A3,0001 -LUI T9,8004 -LW T9,0EAC (T9) -LUI A3,8004 -LW A3,0EB0 (A3) -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -ADDIU A2,SP,00AC -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T9,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T6,00A8 (SP) -LW T8,00C0 (SP) -ADDU T2,V0,T6 -SRA T1,T8,0x1 -SUBU A0,T2,T1 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T4,00BC (SP) -SRA T3,T4,0x1 -SUBU T7,V0,T3 -ADDIU T5,T7,0035 -JAL 7000441C ;V0= text clip width -SW T5,00C8 (SP) -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LUI T6,8004 -LUI T8,8004 -LW T8,0EAC (T8) -LW T6,0EB0 (T6) -LUI T2,00FF -ORI T2,T2,00B0 ;T2=00FF00B0: font colour [green] -SW T2,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -ADDIU A3,SP,00AC -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T6,0010 (SP) -LW T1,00D0 (SP) ;T1=SP+D0: #players -OR S1,V0,R0 -//7F0C4E5C: -ADDIU AT,R0,0002 -BNE T1,AT,7F0C4F34 ;branch if 3-4 players -LW V0,00D4 (SP) -LW V0,00D4 (SP) ;V0=cur.player# -BEQL V0,R0,7F0C4ED4 -ADDIU AT,R0,0001 -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T4,R0 -LW T7,00D4 (SP) ;cur.player# -LW T3,00A8 (SP) -LUI A3,8008 -SLL T5,T7,0x3 -SUBU T5,T5,T7 -SLL T5,T5,0x4 -ADDU A3,A3,T5 -ADDU A1,S0,T3 -ADDIU A1,A1,0050 -LW A3,9F14 (A3) ;A3=80079F14+offset: stats+0x24: -OR A0,S1,R0 -ADDIU A2,V0,0046 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10=0: green -OR S1,V0,R0 -LW V0,00D4 (SP) ;cur.player# -ADDIU AT,R0,0001 -//7F0C4ED0: -BEQ V0,AT,7F0C50C8 -SLL T9,V0,0x3 -SUBU T9,T9,V0 -LUI T6,8008 -ADDIU T6,T6,9EF0 -SLL T9,T9,0x4 -ADDU T8,T9,T6 -JAL 70004514 ;V0= [p@800232A8+20] -SW T8,0044 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T2,R0 -LW T1,00A8 (SP) -LW T4,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T1 -LW A3,0028 (T4) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0050 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -BEQ R0,R0,7F0C50C8 -OR S1,V0,R0 -//7F0C4F34: -BEQL V0,R0,7F0C4F98 -ADDIU AT,R0,0001 -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T3,R0 -LW T5,00D4 (SP) ;cur.player# -LW T7,00A8 (SP) -LUI A3,8008 -SLL T9,T5,0x3 -SUBU T9,T9,T5 -SLL T9,T9,0x4 -ADDU A3,A3,T9 -ADDU A1,S0,T7 -ADDIU A1,A1,0040 -LW A3,9F14 (A3) -OR A0,S1,R0 -ADDIU A2,V0,0046 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10=0: green -OR S1,V0,R0 -LW V0,00D4 (SP) ;cur.player# -//7F0C4F94: -ADDIU AT,R0,0001 -BEQ V0,AT,7F0C4FF8 -SLL T6,V0,0x3 -SUBU T6,T6,V0 -LUI T8,8008 -ADDIU T8,T8,9EF0 -SLL T6,T6,0x4 -ADDU T2,T6,T8 -JAL 70004514 ;V0= [p@800232A8+20] -SW T2,0044 (SP) -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T1,R0 -LW T4,00A8 (SP) -LW T3,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T4 -LW A3,0028 (T3) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0060 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -OR S1,V0,R0 -LW V0,00D4 (SP) ;cur.player# -//7F0C4FF8: -ADDIU AT,R0,0002 -BEQ V0,AT,7F0C505C ;branch if 2 player -SLL T7,V0,0x3 -SUBU T7,T7,V0 -LUI T5,8008 -ADDIU T5,T5,9EF0 -SLL T7,T7,0x4 -ADDU T9,T7,T5 -JAL 70004514 ;V0= [p@800232A8+20] -SW T9,0044 (SP) -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T6,R0 -LW T8,00A8 (SP) -LW T2,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T8 -LW A3,002C (T2) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0040 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -OR S1,V0,R0 -LW V0,00D4 (SP) ;cur.player# -//7F0C505C: -LW T1,00D0 (SP) ;T1=#players -ADDIU AT,R0,0004 -BNE T1,AT,7F0C50C8 ;branch if not 4 player -ADDIU AT,R0,0003 -BEQ V0,AT,7F0C50C8 -SLL T4,V0,0x3 -SUBU T4,T4,V0 -LUI T3,8008 -ADDIU T3,T3,9EF0 -SLL T4,T4,0x4 -ADDU T7,T4,T3 -JAL 70004514 ;V0= [p@800232A8+20] -SW T7,0044 (SP) -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T5,R0 -LW T9,00A8 (SP) -LW T6,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T9 -LW A3,0030 (T6) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0060 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -OR S1,V0,R0 -//7F0C50C8: -LUI V1,8008 -BEQ R0,R0,7F0C5B44 -LW V1,A0B0 (V1) -//7F0C50D4: page 1--player losses -ADDIU AT,R0,0001 -BNE V0,AT,7F0C5780 ;branch if not player losses menu (1) -LUI A0,8009 -LW A0,C704 (A0) -SLTIU T8,A0,0001 -BEQ T8,R0,7F0C5100 -OR A0,T8,R0 -LUI A0,8009 -LW A0,C700 (A0) -SLTIU T2,A0,0001 -OR A0,T2,R0 -//7F0C5100: -JAL 7F0C3F5C ;V0=TRUE if rank to be displayed on MP menu -NOP -BEQ V0,R0,7F0C51DC -ADDIU A0,SP,00AC -//7F0C5110: -JAL 7F0C3C94 ;print rank of player A1 to A0 -LW A1,00D4 (SP) ;cur.player# -LUI T1,8004 -LW T1,0EAC (T1) -LUI A3,8004 -LW A3,0EB0 (A3) -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -ADDIU A2,SP,00AC -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T1,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T4,00A8 (SP) -LW T7,00C0 (SP) -ADDU T3,V0,T4 -SRA T5,T7,0x1 -SUBU A0,T3,T5 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T9,00BC (SP) -SRA T6,T9,0x1 -SUBU T8,V0,T6 -ADDIU T2,T8,0025 -JAL 7000441C ;V0= text clip width -SW T2,00C8 (SP) -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 -LUI T4,8004 -LUI T7,8004 -LW T7,0EAC (T7) -LW T4,0EB0 (T4) -LUI T3,00FF -ORI T3,T3,00B0 ;T3=00FF00B0: font colour [green] -SW T3,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -ADDIU A3,SP,00AC -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T4,0010 (SP) -OR S1,V0,R0 -//7F0C51DC: display "P# LOSSES" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01C ;A0=ID A01C: "P" -ORI A0,R0,A01E ;A0=ID A01E: "LOSSES" -JAL 7F0C1DD8 ;V0=p->text A0 -SW V0,004C (SP) -LW A3,00D4 (SP) ;cur.player# -LUI A1,8006 -ADDIU A1,A1,BC38 ;A1=8005BC38: "%s%d %s" -LW A2,004C (SP) -ADDIU A0,SP,00AC -SW V0,0010 (SP) -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A3,A3,0001 -LUI T5,8004 -LW T5,0EAC (T5) -LUI A3,8004 -LW A3,0EB0 (A3) -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -ADDIU A2,SP,00AC -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T9,00A8 (SP) -LW T8,00C0 (SP) -ADDU T6,V0,T9 -SRA T2,T8,0x1 -SUBU A0,T6,T2 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T1,00BC (SP) -SRA T4,T1,0x1 -SUBU T7,V0,T4 -ADDIU T3,T7,0035 -JAL 7000441C ;V0= text clip width -SW T3,00C8 (SP) -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 -LUI T9,8004 -LUI T8,8004 -LW T8,0EAC (T8) -LW T9,0EB0 (T9) -LUI T6,FF40 -ORI T6,T6,40B0 ;T6=FF4040B0: font colour [red] -SW T6,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -ADDIU A3,SP,00AC -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) -LW T2,00D0 (SP) ;T2=#players -ADDIU AT,R0,0002 -OR S1,V0,R0 -// -BNE T2,AT,7F0C5468 ;branch if 3-4 player -LW T8,00D4 (SP) ;cur.player# -LW V0,00D4 (SP) ;cur.player# -LUI T5,8008 -BEQ V0,R0,7F0C5348 -NOP -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T1,R0 -LW T7,00D4 (SP) ;cur.player# -LW T4,00A8 (SP) -LUI A3,8008 -SLL T3,T7,0x2 -ADDU A3,A3,T3 -ADDU A1,S0,T4 -ADDIU A1,A1,0050 -LW A3,9F14 (A3) -OR A0,S1,R0 -ADDIU A2,V0,0046 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10=0: green -OR S1,V0,R0 -BEQ R0,R0,7F0C53A8 -LW V0,00D4 (SP) ;cur.player# -//7F0C5348: -LW T5,9F14 (T5) -BLEZL T5,7F0C53AC -ADDIU AT,R0,0001 -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T9,R0 -LW T6,00D4 (SP) ;cur.player# -LW T8,00A8 (SP) -LUI A3,8008 -SLL T2,T6,0x2 -ADDU A3,A3,T2 -ADDIU T1,R0,0003 -ADDU A1,S0,T8 -ADDIU A1,A1,0050 -SW T1,0010 (SP) ;SP+10=3: red highlighted -LW A3,9F14 (A3) -OR A0,S1,R0 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -OR S1,V0,R0 -//7F0C53A4: -LW V0,00D4 (SP) ;cur.player# -ADDIU AT,R0,0001 -BEQ V0,AT,7F0C5408 -LUI T6,8008 -LUI T7,8008 -ADDIU T7,T7,9EF0 -SLL T4,V0,0x2 -ADDU T3,T4,T7 -JAL 70004514 ;V0= [p@800232A8+20] -SW T3,0044 (SP) -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T5,R0 -LW T9,00A8 (SP) -LW T8,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T9 -LW A3,0094 (T8) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0050 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -BEQ R0,R0,7F0C5774 -OR S1,V0,R0 -//7F0C5408: -LW T6,9F88 (T6) -LUI T1,8008 -ADDIU T1,T1,9EF0 -BLEZ T6,7F0C5774 -SLL T2,V0,0x2 -ADDU T4,T2,T1 -JAL 70004514 ;V0= [p@800232A8+20] -SW T4,0044 (SP) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T7,R0 -LW T3,00A8 (SP) -LW T5,0044 (SP) -ADDIU T9,R0,0003 -ADDU A1,S0,T3 -LW A3,0094 (T5) -SW T9,0010 (SP) ;SP+10=3: red highlighted -ADDIU A1,A1,0050 -OR A0,S1,R0 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -BEQ R0,R0,7F0C5774 -OR S1,V0,R0 -//7F0C5468: -BEQ T8,R0,7F0C54C0 -LUI T7,8008 -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T6,R0 -LW T1,00D4 (SP) ;cur.player# -LW T2,00A8 (SP) -LUI A3,8008 -SLL T4,T1,0x2 -ADDU A3,A3,T4 -ADDU A1,S0,T2 -ADDIU A1,A1,0040 -LW A3,9F14 (A3) -OR A0,S1,R0 -ADDIU A2,V0,0046 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10=0: green -BEQ R0,R0,7F0C551C -OR S1,V0,R0 -//7F0C54C0: -LW T7,9F14 (T7) -BLEZL T7,7F0C5520 -LW T2,00D4 (SP) ;cur.player# -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T3,R0 -LW T9,00D4 (SP) ;cur.player# -LW T5,00A8 (SP) -LUI A3,8008 -SLL T8,T9,0x2 -ADDU A3,A3,T8 -ADDIU T6,R0,0003 -ADDU A1,S0,T5 -ADDIU A1,A1,0040 -SW T6,0010 (SP) ;SP+10=3: red highlighted -LW A3,9F14 (A3) -OR A0,S1,R0 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -OR S1,V0,R0 -//7F0C551C: -LW T2,00D4 (SP) ;cur.player# -ADDIU AT,R0,0001 -LUI T8,8008 -BEQ T2,AT,7F0C5580 -SLL T1,T2,0x2 -LUI T4,8008 -ADDIU T4,T4,9EF0 -ADDU T7,T1,T4 -JAL 70004514 ;V0= [p@800232A8+20] -SW T7,0044 (SP) -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T3,R0 -LW T5,00A8 (SP) -LW T9,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T5 -LW A3,0094 (T9) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0060 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -BEQ R0,R0,7F0C55E0 -OR S1,V0,R0 -//7F0C5580: -LW T8,9F88 (T8) -LW T6,00D4 (SP) ;cur.player# -LUI T1,8008 -BLEZ T8,7F0C55E0 -SLL T2,T6,0x2 -ADDIU T1,T1,9EF0 -ADDU T4,T2,T1 -JAL 70004514 ;V0= [p@800232A8+20] -SW T4,0044 (SP) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T7,R0 -LW T3,00A8 (SP) -LW T5,0044 (SP) -ADDIU T9,R0,0003 -ADDU A1,S0,T3 -LW A3,0094 (T5) -SW T9,0010 (SP) ;SP+10=3: red highlighted -ADDIU A1,A1,0060 -OR A0,S1,R0 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -OR S1,V0,R0 -//7F0C55E0: -LW T8,00D4 (SP) ;cur.player# -ADDIU AT,R0,0002 -LUI T5,8008 -BEQ T8,AT,7F0C5644 -SLL T6,T8,0x2 -LUI T2,8008 -ADDIU T2,T2,9EF0 -ADDU T1,T6,T2 -JAL 70004514 ;V0= [p@800232A8+20] -SW T1,0044 (SP) -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T4,R0 -LW T7,00A8 (SP) -LW T3,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T7 -LW A3,0104 (T3) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0040 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -BEQ R0,R0,7F0C56A4 -OR S1,V0,R0 -//7F0C5644: -LW T5,9FFC (T5) -LW T9,00D4 (SP) ;cur.player# -LUI T6,8008 -BLEZ T5,7F0C56A4 -SLL T8,T9,0x2 -ADDIU T6,T6,9EF0 -ADDU T2,T8,T6 -JAL 70004514 ;V0= [p@800232A8+20] -SW T2,0044 (SP) -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T1,R0 -LW T4,00A8 (SP) -LW T7,0044 (SP) -ADDIU T3,R0,0003 -ADDU A1,S0,T4 -LW A3,0104 (T7) -SW T3,0010 (SP) ;SP+10=3: red highlighted -ADDIU A1,A1,0040 -OR A0,S1,R0 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -OR S1,V0,R0 -//7F0C56A4: -LW T5,00D0 (SP) -ADDIU AT,R0,0004 -LW T9,00D4 (SP) ;cur.player# -BNE T5,AT,7F0C5774 ;branch if not 4 player -ADDIU AT,R0,0003 -BEQ T9,AT,7F0C5714 -LUI T3,8008 -LUI T6,8008 -ADDIU T6,T6,9EF0 -SLL T8,T9,0x2 -ADDU T2,T8,T6 -JAL 70004514 ;V0= [p@800232A8+20] -SW T2,0044 (SP) -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T1,R0 -LW T4,00A8 (SP) -LW T7,0044 (SP) -OR A0,S1,R0 -ADDU A1,S0,T4 -LW A3,0174 (T7) -SW R0,0010 (SP) ;SP+10=0: green -ADDIU A1,A1,0060 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -BEQ R0,R0,7F0C5774 -OR S1,V0,R0 -//7F0C5714: -LW T3,A070 (T3) -LW T5,00D4 (SP) ;cur.player# -LUI T8,8008 -BLEZ T3,7F0C5774 -SLL T9,T5,0x2 -ADDIU T8,T8,9EF0 -ADDU T6,T9,T8 -JAL 70004514 ;V0= [p@800232A8+20] -SW T6,0044 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 70004524 ;V0= [p@800232A8+22] -OR S0,T2,R0 -LW T1,00A8 (SP) -LW T4,0044 (SP) -ADDIU T7,R0,0003 -ADDU A1,S0,T1 -LW A3,0174 (T4) -SW T7,0010 (SP) ;SP+10=3: red highlighted -ADDIU A1,A1,0060 -OR A0,S1,R0 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -OR S1,V0,R0 -//7F0C5774: -LUI V1,8008 -BEQ R0,R0,7F0C5B44 -LW V1,A0B0 (V1) -//7F0C5780: -BNEL V0,R0,7F0C5B48 ;branch if not page 0--awards -LW T7,29C8 (V1) ;T7=BONDdata+29C8: selected page -LW T5,00D0 (SP) -LW T3,00A8 (SP) -SLTI AT,T5,0003 -BNEZ AT,7F0C57C0 -SW T3,0074 (SP) -LW T9,00D4 (SP) ;cur.player# -LW T2,00A8 (SP) -ADDIU T6,T3,FFF9 -ANDI T8,T9,0001 -BEQ T8,R0,7F0C57BC -ADDIU T1,T2,0007 -BEQ R0,R0,7F0C57C0 -SW T6,0074 (SP) -//7F0C57BC: -SW T1,0074 (SP) -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01F ;A0=1D A01F: "Weapon of choice:" -LUI T4,8004 -LW T4,0EAC (T4) -LUI A3,8004 -SW V0,00A4 (SP) -LW A3,0EB0 (A3) -ADDIU A0,SP,007C -ADDIU A1,SP,0078 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T7,0074 (SP) -LW T9,0078 (SP) -ADDU T5,V0,T7 -SRA T8,T9,0x1 -SUBU A0,T5,T8 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T3,007C (SP) -SRA T6,T3,0x1 -SUBU T2,V0,T6 -ADDIU T1,T2,0025 -JAL 7000441C ;V0= text clip width -SW T1,00C8 (SP) -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LUI T7,8004 -LUI T9,8004 -LW T9,0EAC (T9) -LW T7,0EB0 (T7) -LUI T5,00FF -ORI T5,T5,00B0 ;T5=00FF00B0: font colour [green] -SW T5,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T7,0010 (SP) -OR S1,V0,R0 -//7F0C5890: -LW A0,00D4 (SP) ;A0=cur.player# -JAL 7F009B50 -OR A1,R0,R0 ;A1=0: -LUI T8,8004 -LW T8,0EAC (T8) -LUI A3,8004 -SW V0,00A4 (SP) ;SP+A4=p->text -LW A3,0EB0 (A3) -ADDIU A0,SP,007C -ADDIU A1,SP,0078 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T8,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T3,0074 (SP) -LW T2,0078 (SP) -ADDU T6,V0,T3 -SRA T1,T2,0x1 -SUBU A0,T6,T1 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LUI T7,8005 -LB T7,84D0 (T7) ;T7=800484D0: selected language -SLL V1,V0,0x10 -SRA T4,V1,0x10 -BLEZ T7,7F0C5910 ;branch if english-ish -OR V1,T4,R0 -BEQ R0,R0,7F0C5914 ;japanese-ish A0=4 -ADDIU A0,R0,0004 -//7F0C5910: english-ish A0=0 -OR A0,R0,R0 ;A0=0 -LW T5,007C (SP) -ADDU T9,A0,V1 -SRA T8,T5,0x1 -SUBU T3,T9,T8 -ADDIU T2,T3,0035 -JAL 7000441C ;V0= text clip width -SW T2,00C8 (SP) -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 -LUI T1,8004 -LUI T4,8004 -LW T4,0EAC (T4) -LW T1,0EB0 (T1) -LUI T7,00FF -ORI T7,T7,00B0 ;T7=00FF00B0: font colour [green] -SW T7,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T1,0010 (SP) -LUI V1,8008 -LW V1,A0B0 (V1) -OR S1,V0,R0 -//7F0C5994: -ADDIU A0,SP,007C -LW T0,2A10 (V1) ;T0=BONDdata+2A10: -ADDIU A1,SP,0078 -LUI A3,8004 -BEQ T0,R0,7F0C5A6C -OR A2,T0,R0 -LUI T5,8004 -LW T5,0EAC (T5) -LW A3,0EB0 (A3) -SW R0,0014 (SP) -SW T0,00A4 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T9,0074 (SP) -LW T3,0078 (SP) -ADDU T8,V0,T9 -SRA T2,T3,0x1 -SUBU A0,T8,T2 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T6,007C (SP) -SRA T1,T6,0x1 -SUBU T4,V0,T1 -ADDIU T7,T4,004B -JAL 7000441C ;V0= text clip width -SW T7,00C8 (SP) -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 -LUI T9,8004 -LUI T3,8004 -LW T3,0EAC (T3) -LW T9,0EB0 (T9) -LUI T8,00FF -ORI T8,T8,00B0 ;T8=00FF00B0: font colour [green] -SW T8,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) -LUI V1,8008 -LW V1,A0B0 (V1) -OR S1,V0,R0 -//7F0C5A6C: -LW V0,2A14 (V1) ;V0=BONDdata+2A14: -ADDIU A0,SP,007C -ADDIU A1,SP,0078 -BEQ V0,R0,7F0C5B44 -OR A2,V0,R0 -LUI T2,8004 -LW T2,0EAC (T2) -LUI A3,8004 -LW A3,0EB0 (A3) -SW R0,0014 (SP) -SW V0,00A4 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T6,0074 (SP) -LW T4,0078 (SP) -ADDU T1,V0,T6 -SRA T7,T4,0x1 -SUBU A0,T1,T7 -ADDIU A0,A0,0050 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T5,007C (SP) -SRA T9,T5,0x1 -SUBU T3,V0,T9 -ADDIU T8,T3,0058 -JAL 7000441C ;V0= text clip width -SW T8,00C8 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LUI T6,8004 -LUI T4,8004 -LW T4,0EAC (T4) -LW T6,0EB0 (T6) -LUI T1,00FF -ORI T1,T1,00B0 ;T1=00FF00B0: font colour [green] -SW T1,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T6,0010 (SP) -LUI V1,8008 -LW V1,A0B0 (V1) -OR S1,V0,R0 -//7F0C5B44: -LW T7,29C8 (V1) ;T7=BONDdata+29C8: selected page -ADDIU AT,R0,0006 -BNE T7,AT,7F0C5E10 ;branch if not cancel/confirm page -NOP -//7F0C5B54: page 6--exit: cancel / confirm -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A020 ;A0=1D A020: "cancel" -LUI T5,8004 -LW T5,0EAC (T5) -LUI A3,8004 -SW V0,00A4 (SP) -LW A3,0EB0 (A3) -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T9,00A8 (SP) -LW T8,00C0 (SP) -ADDU T3,V0,T9 -SRA T2,T8,0x1 -SUBU A0,T3,T2 -ADDIU A0,A0,0036 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T6,00BC (SP) -LUI T5,8008 -LW T5,A0B0 (T5) -SRA T4,T6,0x1 -SUBU T1,V0,T4 -ADDIU T7,T1,0036 -SW T7,00C8 (SP) -LW T9,29CC (T5) -BNEZ T9,7F0C5C4C -NOP -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LUI T3,8004 -LUI T2,8004 -LW T2,0EAC (T2) -LW T3,0EB0 (T3) -LUI T6,A0FF -LUI T4,0070 -ORI T4,T4,00A0 ;T4=007000A0: font colour [half green] -ORI T6,T6,A0F0 ;T6=A0F0A0F0: font colour [green] -SW T6,0018 (SP) -SW T4,001C (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,0020 (SP) -SW V0,0024 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T2,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text -SW T3,0010 (SP) -BEQ R0,R0,7F0C5CB0 -OR S1,V0,R0 -//7F0C5C4C: -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 -LUI T7,8004 -LUI T5,8004 -LW T5,0EAC (T5) -LW T7,0EB0 (T7) -LUI T9,00FF -ORI T9,T9,00B0 ;T9=00FF00B0: font colour [green] -SW T9,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T7,0010 (SP) -OR S1,V0,R0 -//7F0C5CB0: -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A021 ;A0=ID A021: "confirm" -LUI T8,8004 -LW T8,0EAC (T8) -LUI A3,8004 -SW V0,00A4 (SP) -LW A3,0EB0 (A3) -ADDIU A0,SP,00BC -ADDIU A1,SP,00C0 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T8,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -LW T3,00A8 (SP) -LW T6,00C0 (SP) -ADDU T2,V0,T3 -SRA T4,T6,0x1 -SUBU A0,T2,T4 -ADDIU A0,A0,0068 -JAL 70004524 ;V0= [p@800232A8+22] -SW A0,00CC (SP) -LW T1,00BC (SP) -LUI T8,8008 -LW T8,A0B0 (T8) -SRA T7,T1,0x1 -SUBU T5,V0,T7 -ADDIU T9,T5,0036 -SW T9,00C8 (SP) -LW T3,29CC (T8) -ADDIU AT,R0,0001 -BNE T3,AT,7F0C5DAC -NOP -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 -LUI T2,8004 -LUI T4,8004 -LW T4,0EAC (T4) -LW T2,0EB0 (T2) -LUI T1,A0FF -LUI T7,0070 -ORI T7,T7,00A0 -ORI T1,T1,A0F0 -SW T1,0018 (SP) -SW T7,001C (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,0020 (SP) -SW V0,0024 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T4,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text -SW T2,0010 (SP) -BEQ R0,R0,7F0C5E10 -OR S1,V0,R0 -//7F0C5DAC: -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 -LUI T9,8004 -LUI T8,8004 -LW T8,0EAC (T8) -LW T9,0EB0 (T9) -LUI T3,00FF -ORI T3,T3,00B0 ;T3=00FF00B0: font colour [green] -SW T3,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) -OR S1,V0,R0 -//7F0C5E10: -JAL 7F0ACEF0 ;set combiner: bayer, lod, perspective -OR A0,S1,R0 ;A0=S1: DL -BEQ R0,R0,7F0C6030 -OR S1,V0,R0 ;S1=V0: DL -//7F0C5E20: -LW T6,00D8 (V1) ;T6=BONDdata+D8: player button control -BEQL T6,R0,7F0C6034 ;return if control disabled -OR V0,S1,R0 -LW T2,0428 (V1) ;T2=BONDdata+428: 1: fading to black -BEQL T2,R0,7F0C6034 ;return if fading to black -OR V0,S1,R0 -LW T4,0424 (V1) ;T4=BONDdata+424: 1: dying -LUI T1,8009 -BEQL T4,R0,7F0C6034 ;branch if dying -OR V0,S1,R0 -LW T1,C700 (T1) ;T1=8008C700: nonzero stops play -LUI T7,8009 -BNEL T1,R0,7F0C6034 ;return if play stopped -OR V0,S1,R0 -LW T7,C704 (T7) ;T7=8008C704: TRUE when game over -OR A0,R0,R0 -BNEL T7,R0,7F0C6034 ;return if game over -OR V0,S1,R0 -BLEZ V0,7F0C5F08 -SW T1,00D4 (SP) ;SP+D4= T1 TRUE if play stopped -//7F0C5E70: note: hacked version f/ NSNA 0.13 appears here -SLL T1,T1,0x2 -LUI V1,8008 -ADDU V1,V1,T1 -LW V1,9EE0 (V1) ;V1=80079EE0+offset: p->player T1's BONDdata -BEQ V1,R0,7F0C5F08 -OR A0,R0,R0 -LW A0,29D8 (V1) ;A0=BONDdata+29D8: #deaths -LW V1,29DC (V1) ;V1=BONDdata+29DC: #suicides -ADDU A0,V1,A0 ;A0=A0+V1: total deaths -ADDIU A0,A0,0001 ;A0+=1 account for the one being processed right now that won't show up yet -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C5F08: -JAL 7F01475C ;NSNA--scenario bitflags & V1 -ADDIU V1,R0,0001 -BEQ V0,R0,7F0C5F2C -NOP -JAL 7F01045C ;NSNA--V0=#lives -NOP -SLT AT,A0,V0 -BEQL AT,R0,7F0C6034 -OR V0,S1,R0 -//7F0C5F2C: -JAL 7F0B4FB4 -OR A0,S1,R0 -JAL 7F0ACD98 -OR A0,V0,R0 -OR S1,V0,R0 -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A022 ;A0=ID A022: "press start*" -LUI T1,8004 -LW T1,0EAC (T1) -LUI A3,8004 -SW V0,0060 (SP) -LW A3,0EB0 (A3) -ADDIU A0,SP,0064 -ADDIU A1,SP,0068 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T1,0010 (SP) -JAL 70004514 ;V0= [p@800232A8+20] -NOP -JAL 7000449C ;V0= [p@800232A8+1C] -SH V0,0056 (SP) -LH V1,0056 (SP) -LW T5,0068 (SP) -SRA T7,V0,0x1 -ADDU T9,T7,V1 -SRA T8,T5,0x1 -SUBU T3,T9,T8 -JAL 70004524 ;V0= [p@800232A8+22] -SW T3,0070 (SP) -JAL 700044AC ;V0= [p@800232A8+1E] -SH V0,0056 (SP) -LH V1,0056 (SP) -LW T4,0064 (SP) -SRA T2,V0,0x1 -ADDU T1,T2,V1 -SRA T7,T4,0x1 -SUBU T5,T1,T7 -JAL 7000441C ;V0= text clip width -SW T5,006C (SP) -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LUI T8,8004 -LUI T3,8004 -LW T3,0EAC (T3) -LW T8,0EB0 (T8) -LUI T6,00FF -ORI T6,T6,00B0 ;T6=00FF00B0: font colour [green] -SW T6,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,0070 -ADDIU A2,SP,006C -LW A3,0060 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0014 (SP) -JAL 7F0ADABC ;display monotone text -SW T8,0010 (SP) -JAL 7F0ACEF0 ;set combiner: bayer, lod, perspective -OR A0,V0,R0 -OR S1,V0,R0 ;S1=V0: DL -//7F0C6030: return -OR V0,S1,R0 ;V0=S1: DL -LW RA,003C (SP) -LW S0,0034 (SP) -LW S1,0038 (SP) -JR RA -ADDIU SP,SP,00D8 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/advance MP menu pages.txt b/notes/GE Documentation/Main Menus/Ingame menus/MP menu/advance MP menu pages.txt deleted file mode 100644 index 29a8a3d..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/MP menu/advance MP menu pages.txt +++ /dev/null @@ -1,67 +0,0 @@ -7F0C1E20: TRUE when right enabled on MP menu page -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=p->BONDdata -00001025 OR V0,R0,R0 -8DCF29C8 LW T7,29C8 (T6) ;T7=BONDdata+29C8: current MP menu page -2DE10008 SLTIU AT,T7,0008 -10200013 BEQ AT,R0,7F0C1E84 ;branch if invalid page -000F7880 SLL T7,T7,0x2 -3C018006 LUI AT,8006 -002F0821 ADDU AT,AT,T7 -8C2FBC40 LW T7,BC40 (AT) ;T7=8005BC40+offset: p->TLB for advance handler -01E00008 JR T7 -00000000 NOP -//7F0C1E50: pages 0,1,2,4 -03E00008 JR RA -24020001 ADDIU V0,R0,0001 ;V0=TRUE -//7F0C1E54: pages 5,6,7 -03E00008 JR RA -00001025 OR V0,R0,R0 ;V0=FALSE -//7F0C1E60: page 3 -3C188009 LUI T8,8009 -8F18C704 LW T8,C704 (T8) ;T8=8008C704: TRUE when game over -24030001 ADDIU V1,R0,0001 ;V1=1: TRUE -13000003 BEQ T8,R0,7F0C1E7C ;branch if not game over -00000000 NOP -03E00008 JR RA -00001025 OR V0,R0,R0 ;V0=FALSE - //7F0C1E7C: -03E00008 JR RA -00601025 OR V0,V1,R0 ;V0=TRUE - //7F0C1E84: invalid has no return -03E00008 JR RA -00000000 NOP - -7F0C1E8C: TRUE when left enabled on MP menu page -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=p->BONDdata -00001025 OR V0,R0,R0 -8DCF29C8 LW T7,29C8 (T6) ;T7=BONDdata+29C8: current MP menu page -2DE10008 SLTIU AT,T7,0008 -10200013 BEQ AT,R0,7F0C1EF0 ;branch if invalid page -000F7880 SLL T7,T7,0x2 -3C018006 LUI AT,8006 -002F0821 ADDU AT,AT,T7 -8C2FBC60 LW T7,BC60 (AT) ;T7=8005BC60+offset: p->TLB for advance handler -01E00008 JR T7 -00000000 NOP -//7F0C1EBC: pages 2,3,4,5 -03E00008 JR RA -24020001 ADDIU V0,R0,0001 -//7F0C1EC4: pages 0,6,7 -03E00008 JR RA -00001025 OR V0,R0,R0 -//7F0C1ECC: page 1 -3C188009 LUI T8,8009 -8F18C704 LW T8,C704 (T8) -00001825 ADDIU V1,R0,0001 -13000003 BEQ T8,R0,7F0C1EE8 -00000000 NOP -03E00008 JR RA -24020001 ADDIU V0,R0,0001 -//7F0C1EE8: -03E00008 JR RA -00601025 OR V0,V1,R0 -//7F0C1EF0: -03E00008 JR RA -00000000 NOP diff --git a/notes/GE Documentation/Main Menus/Ingame menus/control scheme labels.txt b/notes/GE Documentation/Main Menus/Ingame menus/control scheme labels.txt deleted file mode 100644 index 8d5ecd6..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/control scheme labels.txt +++ /dev/null @@ -1,32 +0,0 @@ - Here's something neat. It's the labels that appear on the control scheme menu in the single-player watch. First, there's the control type itself, then the text for each button. If somebody hacks the control type list (wherever that is) this is how they'd change the labels. - -1FC48 number of control schemes in following list -1FC4C-1FCEC solo control types and labels for each control 0x14 each - 0x0 2 control type - 0x2 2 A button label - 0x4 2 B button label - 0x6 2 Z button label - 0x8 2 L button label - 0xA 2 R button label - 0xC 2 C button label - 0xE 2 Dpad button label - 0x10 2 Start button label - 0x12 2 Control Stick label - - - This is followed by the solo settings in the watch menu. The address in the original 21990 doc is wrong. Here's the good one! -1FCEC-1FD4C solo watch setting labels - 0x0 2 name of setting - 0x2 2 option 1 - 0x4 2 option 2 - 0x6 2 option 3 (usually blank) - 0x8 4 setting default value - The default values are sort of nice. It might help emu users save time setting their favorite settings right when they start the game the first time. The settings themselves have been released many times before, but if you don't have them I've got them written down. - - You can also set the default data that appears in your eeprom file. That's at: -B790-BB70 reset for eeprom - It won't be saved until you finish a stage or something, but you could probably activate all cheats, stages, etc right from the beginning. I have yet to try copying an eeprom directly into it. - - Still running through the 21990. An amazing amount of it is dedicated to various debug routines. Also, some of it includes the Mp watch menu displays, etc. Accidentally deleted the menu at one point. Rather funny, actually. - - diff --git a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/DEBUG MENU.txt b/notes/GE Documentation/Main Menus/Ingame menus/debug menu/DEBUG MENU.txt deleted file mode 100644 index d9d2a34..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/DEBUG MENU.txt +++ /dev/null @@ -1,286 +0,0 @@ -55370 move view -5537C stan view -55388 bond view -55394 level -5539C region -553A4 scale -553AC play title -553B8 bond die - -553C0 select anim -553D0 gun pos -553D8 flash colour -553E8 hit colour -553F4 music -553FC sfx -55400 invincible -5540C visible -55414 collisions -55420 all guns -5542C max ammo - -55438 display speed -55448 background -55454 props -5545C stan hit -55468 stan region -55474 stan problems -55484 print man pos -55494 port close -554A0 port inf -554AC port approx -554B8 pr room loads -554C8 show mem use -554D8 show mem bars -554E8 grab rbg -554F4 grab jpeg -55500 grab task - -5550C rnd walk -55518 record ramrom -55528 record 1 -55534 record 2 -55540 record 3 -5554C replay ramrom -5555C save ramrom -55568 load ramrom -55574 auto y aim -55580 auto x aim -55588 007 -55590 agent -55598 all -5559C fast - - objectives - marg top - marg bot - marg left - marg right - marg reset - screen size - screen pos - show patrols - intro - intro edit - intro pos - world pos - gun key pos - vis cvg - chr num - room blocks - profile - obj load - weapon load - joy 2 sky edit - joy2 hits edit - joy2 detail edit - explosion info - magic fog - gun watch pos - testing man pos - fog - ------------- -58C48 PORT and ROOM displays -54FC0 pos xyz and rotation display - - -(starts at 7F08AAE8) --7F08ADC0: //display room# -LUI A1,8005 -ADDIU A1,A1,4FC0 -ADDIU A0,SP,00C4 -JAL 7000AC94 -OR A2,V0,R0 --7008ADD4: //display x pos -LUI T0,8008 -LW T0,A0B0 (T0) //T0= handle to BONDdata -LUI A1,8005 -ADDIU A1,A1,4FC4 //A1= handle to display string -LWC1 F18,048C (T0) //F18= BOND xpos -ADDIU A0,SP,00B4 -CVT.D.S F4,F18 -MFC1 A3,F4 -MFC1 A2,F5 -JAL 7000AC94 -NOP --7008AE00: //display y pos -LUI T1,8008 -LW T1,A0B0 (T1) //T1= handle to BONDdata -LUI A1,8005 -ADDIU A1,A1,4FC4 //A1= handle to display string -LWC1 F6,0490 (T1) //F6= BOND ypos -ADDIU A0,SP,00A4 -CVT.D.S F8,F6 -MFC1 A3,F8 -MFC1 A2,F9 -JAL 7000AC94 -NOP --7008AE2C: //display z pos -LUI T2,8008 -LW T2,A0B0 (T2) //T2= handle to BONDdata -LUI A1,8005 -ADDIU A1,A1,4FC4 //A1= handle to display string -LWC1 F10,0494 (T2) //F10= BOND zpos -ADDIU A0,SP,0094 -CVT.D.S F16,F10 -MFC1 A3,F16 -MFC1 A2,F17 -JAL 7000AC94 -NOP --7008AE58: //display rotation -LW A3,0068 (SP) -ADDIU AT,R0,002D -LUI A1,8005 -ADDIU T6,A3,0016 -DIV T6,AT -MFLO T5 -SLL T3,T5,0x2 -SUBU T3,T3,T5 -ADDIU T4,SP,004C -ADDU A2,T3,T4 -ADDIU A1,A1,4FDC -JAL 7000AC94 -ADDIU A0,SP,0084 --7008AE8C: //and now... -JAL 70004514 //returns V0=800232C8= 0000 -NOP -ADDIU T7,V0,0011 //T7= 11 -JAL 70004524 //returns V0=800232CA= 0001 -SW T7,0080 (SP) -ADDIU A2,V0,0011 -ADDIU T8,A2,000A -SW -SW - - - --7000AC94: C-parser -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -SW RA,0014 (SP) -SW A1,0024 (SP) -SW A2,0028 (SP) -SW A3,002C (SP) -LUI A0,7001 -ADDIU A0,A0,AC70 -ADDIU A3,SP,0028 -LW A2,0024 (SP) -JAL 70013F60 -LW A1,0020 (SP) --7000ACC4: -BLTZ V0,7000ACD8 //V0= #characters in display string -OR V1,V0,R0 //V1= V0 -LW T6,0020 (SP) -ADDU T7,T6,V0 //T7= end of string buffer -SB R0,0000 (T7) //write EOL -LW RA,0014 (SP) -ADDIU SP,SP,0020 -ADDIU V0,V1,FFFF -JR RA -NOP - - -70013F60: display text to screen -ADDIU SP,SP,FF20 -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S8,0038 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW A3,00EC (SP) -LUI S5,8002 -LUI S6,8003 -LUI S7,8002 -OR A3,A2,R0 -OR S3,A1,R0 -OR S4,A0,R0 -SW RA,003C (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A2,00E8 (SP) -SW R0,00D4 (SP) -ADDIU S7,S7,7740 //S7= 80027740 32 " "'s -ADDIU S6,S6,96F4 //S6= 800296F4 " +-#0" -ADDIU S5,S5,7764 //S5= 80027764 32 "30"'s -ADDIU S8,R0,000A --70013FC0: -LBU S0,0000 (A3) //A3=pointer to display string -ADDIU S2,A3,0001 -ADDIU V1,R0,0025 -BLEZ S0,70013FF4 -OR A0,S3,R0 --70013FD4: -BNEL V1,S0,70013FE8 //display %- printf() type stuff - LBU S0,0000 (S2) -BEQ R0,R0,70013FF4 -ADDIU S2,S2,FFFF --70013FE4: -LBU S0,0000 (S2) --70013FE8: -ADDIU S2,S2,0001 -BGTZ S0,70013FD4 -NOP --70013FF4: -SUBU V0,S2,A3 -BLEZ V0,7001402C -OR A1,A3,R0 -OR S1,V0,R0 -JALR RA,S4 //jal to 7000AC70 -OR A2,V0,R0 -BEQ V0,R0,70014024 -OR S3,V0,R0 -LW T6,00D4 (SP) -ADDU T7,T6,S1 -BEQ R0,R0,7001402C -SW T7,00D4 (SP) --70014024: -BEQ R0,R0,70014574 -LW V0,00D4 (SP) --7001402C: -BNEZ S0,7001403C -ADDIU S2,S2,0001 -BEQ R0,R0,70014574 -LW V0,00D4 (SP) --7001403C: -SW R0,00D8 (SP) -LBU A1,0000 (S2) -JAL 700138A4 -OR A0,S6,R0 -BEQ V0,R0,7001408C -OR S0,V0,R0 -SUBU T9,S0,S6 -SLL T6,T9,0x2 -LUI T7,8003 -ADDU T7,T7,T6 -LW T7,96FC (T7) -LW T8,00D8 (SP) -ADDIU S2,S2,0001 -OR A0,S6,R0 -OR T9,T8,T7 -SW T9,00D8 (SP) -JAL 700138A4 -LBU A1,0000 (S2) -BNEZ V0,70014054 -OR S0,V0,R0 -LBU T6,0000 (S2) -ADDIU V0,R0,002A -LW T8,00EC (SP) -BNE V0,T6,700140E0 -LUI A0,8003 - -70014574: RETURN -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,00E0 \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/GEramrom.txt b/notes/GE Documentation/Main Menus/Ingame menus/debug menu/GEramrom.txt deleted file mode 100644 index 33e8048..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/GEramrom.txt +++ /dev/null @@ -1,206 +0,0 @@ -Notes left over from the demo ripping project: -80024337 music modifier - -80048468 location file is loaded to -8004846C stores address for actual code block, one block at a time. -80048470 (0x20) lists code under each "heading", running to next heading - -80048490 previous sum of bytes -80048494 current sum of bytes -80048498 first value in command (difference b/w values) -8004849C previous ??? -800484A0 current ??? -800484A8 difference b/w above - -8008C5F4 gets the address for the demo loaded - ---------- -7F0BFD60 F4890 save ramrom -ADDIU SP,SP,FED0 -SW S2,001C (SP) -SW S3,0020 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LUI S2,8006 -SW RA,0024 (SP) -ADDIU S2,S2,B750 ;S2=8005B750 "replay/demo.%d" -ADDIU S0,R0,0001 ;S0=1 -ADDIU S1,SP,002C ;S1=SP+2C: p->buffer for string -ADDIU S3,SP,0028 ;S3=SP+28: p->instance -//7F0BFD8C: search for string instance -OR A0,S1,R0 ;A0=S1: p->string -OR A1,S2,R0 ;A1=S2: "replay/demo.%d" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A2,S0,R0 ;A2=S0: count -OR A0,S1,R0 ;A0=S1: p->string -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -OR A1,S3,R0 ;A1=S3: @filesize -BEQ V0,R0,7F0BFDB8 ;branch if unique -NOP -BEQ R0,R0,7F0BFD8C ;loop until a new entry found -ADDIU S0,S0,0001 ;S0++ -//7F0BFDB8: on hit, make final resource name -LUI A1,8006 -ADDIU A1,A1,B760 ;A1=8005B760 "replay/demo.%d" -OR A0,S1,R0 ;A0=S1: p->string -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A2,S0,R0 ;A2=S0: count -LUI T6,8005 -LW T6,8468 (T6) ;T6=80048468 p->demo block -OR A0,S1,R0 ;A0=S1: "name" -LUI A1,00F0 ;A1=00F00000 -JAL 7F0D005C ;save resource A0 of size A2 at A1 -LW A2,0080 (T6) ;A2= demo block+80: size -//7F0BFDE4: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0130 - -7F0BFE00 F4930 load ramrom -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LUI A0,8006 -ADDIU A0,A0,B770 ;A0=8005B770 "replay/demo.load" -JAL 7F0D0098 ;V0=TRUE if resource named A0 found on Indy and filesize set to A1 -ADDIU A1,SP,001C ;A1=SP+1C: @filesize -BEQ V0,R0,7F0BFE4C ;return if not found -//7F0BFE1C: copy data to memory -LUI A0,8006 -ADDIU A0,A0,B770 ;A0=8005B770 "replay/demo.load" -LUI A1,00F0 ;A1=00F00000: devtool root address -JAL 7F0D001C ;load ramrom file named A0 from Indy to buffer A1, size A2 -LW A2,001C (SP) ;A2=SP+1C: filesize -LUI A0,8009 -ADDIU A0,A0,C270 ;A0=8008C270 start of data -LUI A1,00F0 ;A1=00F00000: devtool root address -JAL 70005C44 ;align and read A2 bytes of data from hardware A1 to A0 -ADDIU A2,R0,00E8 ;A2=0xE8 -LUI AT,8005 -SW V0,8468 (AT) ;V0->80048468 (location of demo file) -//7F0BFE4C: -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F0C07BC F52EC record ramrom jump - A0=memsave to use as base -ADDIU T6,R0,0001 -LUI AT,8005 -SW T6,8488 (AT) //80048488=1: 1- record next stage loaded -LUI AT,8009 -JR RA -SW A0,C5F0 (AT) //A0->8008C5F0: record slot # - -------- -7F0C07D4 F5304 stop recording -LUI T6,8005 -LW T6,8484 (T6) //T6<-80048484: finished recording flag -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQL T6,R0,7F0C0810 ;return if not set -LW RA,0014 (SP) -JAL 7F0BFCB0 ;update ramrom on hardware -NOP -JAL 7000BBBC ;0->80026928: reset recorder handler -OR A0,R0,R0 ;A0=NULL -LUI AT,8005 -SW R0,8484 (AT) //0->80048484: reset flag -LUI AT,8005 -SW R0,8480 (AT) //0->80048480: no longer recording? -LW RA,0014 (SP) -//7F0C0810: -ADDIU SP,SP,0018 -JR RA -NOP - -7F0C081C F534C play ramrom file at hardware address A0 - normal usage is from 7F0C0970 - accepts: A0=hardware address -LUI V1,8009 -ADDIU V1,V1,C5F4 ;V1=8008C5F4 gets the address for the demo loaded -SW A0,0000 (V1) ;A0->address for loaded demo -SW RA,0014 (SP) -LUI A0,8009 -ADDIU A0,A0,C270 ;A0=8008C270: target? -LW A1,0000 (V1) ;A1=hardware address -JAL 70005C44 ;V0=p->data at target A0 from hardware A1 of size A2 -ADDIU A2,R0,00E8 ;A2=0xE8 size -LUI V1,8009 -ADDIU V1,V1,C5F4 ;V1=8008C5F4 -LW T6,0000 (V1) ;T6<-8008C5F4: p->loaded demo -LUI A1,8005 -ADDIU A1,A1,8468 ;A1=80048468 location the file is loaded to -ADDIU T7,T6,00E8 ;T7=T6+0xE8 T7=next memfile -SW V0,0000 (A1) ;V0->80048468: p->demo block -SW T7,0000 (V1) ;T7->8008C5F4: p->loaded demo -ADDIU T8,R0,0001 ;T8=1 -LUI AT,8005 -SW T8,847C (AT) ;1->8004847C: run demo at next stage load -LW T9,0000 (A1) ;T9=80048468: p->demo -JAL 7F01D5EC ;set stage A0, mode solo, p->briefing data -LW A0,0010 (T9) ;A0=demo+10: stage # -LUI T0,8005 -LW T0,8468 (T0) ;T0=80048468: p->demo -JAL 7F01D59C ;A0-> difficulty -LW A0,0014 (T0) ;A0=difficulty -ADDIU A0,R0,000B ;A0=0xB menu mode (stage active) -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0C08A8 F53D8 replay ramrom -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0C081C ;main replay routine -LUI A0,00F0 ;A0=0xF00000 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -+_+ - -7000BD0C C90C redirect to ramrom handlers if set -LUI V0,8002 -LW V0,6924 (V0) ;V0=80026924: p->ramrom replay TLB handler -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ V0,R0,7000BD48 ;branch if not replaying -//7000BD20: use the replay handler -LUI A0,8006 -LUI A1,8006 -LW A1,530C (A1) ;A1=8006530C: -JALR RA,V0 ;jump to replay handler (7F0C0080) -ADDIU A0,A0,512C ;A0=8006512C: -LUI AT,8006 -LUI A0,8006 -SW V0,5314 (AT) ;V0->80065314: -JAL 7000BBC8 -ADDIU A0,A0,512C ;A0=8006512C: -//7000BD48: -LUI A0,8006 -JAL 7000BBC8 -ADDIU A0,A0,4F30 ;A0=80064F30: p->cur.point in controller input index -LUI V0,8002 -LW V0,6928 (V0) ;V0=80026928: p->ramrom record TLB handler -LUI A0,8006 -ADDIU A0,A0,4F30 ;A0=80064F30: p->cur.point in controller input index -BEQL V0,R0,7000BD7C ;branch if not recording -LW RA,0014 (SP) -//7000BD6C: record controller input packet -LW A1,01E4 (A0) ;A1=cont.index+1E4: [E] -JALR RA,V0 ;jump to record handler (7F0BFE5C) -LW A2,01E0 (A0) ;A2=cont.index+1E0: [F] -//7000BD78: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/WIP Display position Debug.txt b/notes/GE Documentation/Main Menus/Ingame menus/debug menu/WIP Display position Debug.txt deleted file mode 100644 index 34c10a8..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/WIP Display position Debug.txt +++ /dev/null @@ -1,73 +0,0 @@ -7F090F88: -LUI V0,8003 -JR RA -LW V0,6FC8 (V0) //if 80036FC8 =1, display position debug - -7F08AD1C: -JAL 7F090F88 -NOP -BEQ V0,R0,7F08B0DC //if !=1, don't display position -LUI V0,8008 -LW V0,A0B0 (V0) //V0=8007A0B0 [current player data] -LWC1 F0,0498 (V0) -LWC1 F14,04A0 (V0) -JAL 7F05AA30 -NEG.S F12,F0 -LUI AT,4334 -MTC1 AT,F4 -LUI AT,8005 -LWC1 F8,52BC (AT) -MUL.S F6,F0,F4 -LUI T4,8003 -ADDIU T4,T4,68B8 -ADDIU T3,SP,004C -LUI T8,8008 -DIV.S F10,F6,F8 -TRUNC.W F16,F10 -MFC1 T2,F16 -NOP - - ----------- -lets try something different... -7F0BCA58: -LWC1 F4,000C (T7) -LWC1 F6,0000 (A2) -MUL.S F8,F4,F6 -//7F0BCA64: -SWC1 F8,0000 (A1) //Current player 0x38 current model x pos? -LW T8,0000 (V1) //T8=start of BG room data -LWC1 F16,0000 (A2) -ADDU T9,T8,V0 //T9= offset to room data -LWC1 F10,0010 (T9) -MUL.S F18,F10,F16 -//7F0BCA7C: -SWC1 F18,0004 (A1) //Current player 0x3C current model y pos? -LW T0,0000 (V1) //T0=start of BG room data -LWC1 F6,0000 (A2) -ADDU T1,T0,V0 //T1= offset to room data -LWC1 F4,0014 (T1) -MUL.S F8,F4,F6 -JR RA -//7F0BCA98: -SWC1 F8,0008 (A1) //Current player 0x40 current model z pos? - - ------------- -this routine has to do with determining what is within eyesight -7F081674: -JAL 7F080D60 -LW A2,04BC (V0) //A2=Z position -LUI T0,8008 -ADDIU T0,T0,A0B0 //T0=8007A0B0 -LW T6,0000 (T0) //T6=Pcur_pl -LUI A0,8005 -ADDIU A0,A0,8374 //A0=80048374 -//7F081690: -SWC1 F0,04A8 (T6) //F0->Y position of character (the 'low' address) -LW V0,0000 (T0) //V0=Pcur_pl, and T0/V0 are used a lot after this. - F0 gets fried and no longer used! -thankfully, it's a bit redundant. so, time to take advantage of it! -7F0816CC: SWC1 F6,04A8 (V0) E44604A8 -doesn't work - diff --git a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/draw debug menu.txt b/notes/GE Documentation/Main Menus/Ingame menus/debug menu/draw debug menu.txt deleted file mode 100644 index ff4c559..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/debug menu/draw debug menu.txt +++ /dev/null @@ -1,586 +0,0 @@ -80036B70 highlighted debug option -80036B74 p->last group cutoff (# entries) -80036B78 p->text pointers -80036B7C p->positions -80036B80 number of groups -80036B84 p->groupings (group cutoff entries) -80036B88 [2] -80036B8C-F 4 bytes: [7,7,7,0] x offset multiplier -80036B90-3 4 bytes: [4,4,4,0] y offset mutliplier - -7F090490 C4FC0 send out to draw menu -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8003 -LUI A1,8003 -LUI A2,8003 -ADDIU A2,A2,6BA4 ;A2=80036BA4: p->groupings -ADDIU A1,A1,6BC8 ;A1=80036BC8: p->positions -JAL 7F08FE14 ;initialize debug menu values -ADDIU A0,A0,6E30 ;A0=80036E30: p->text pointers for each entry -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F08FE14 C4944 initialize debug menu values - accepts: A0=p->text, A1=p->positions, A2=p->groupings -LUI AT,8003 -SW A0,6B78 (AT) ;p->text -> 80036B78: -LUI AT,8003 -SW A1,6B7C (AT) ;p->positions -> 80036B7C: -LUI AT,8003 -SW A2,6B84 (AT) ;p->groupings -> 80036B84: -LW T6,0000 (A2) ;T6=1st group cutoff -OR V0,R0,R0 ;V0=0 -OR V1,A2,R0 ;V1=p->groups -BLTZL T6,7F08FE58 ;branch if end of list -SLL T8,V0,0x2 -//7F08FE40: figure out number of groups -LW T7,0004 (V1) ;T7=next group cutoff -ADDIU V0,V0,0001 ;V0++ count++ -ADDIU V1,V1,0004 ;V1+=4 next group entry -BGEZL T7,7F08FE44 ;loop until end of list entry -LW T7,0004 (V1) -//7F08FE54: save group end and # -SLL T8,V0,0x2 ;T8=#groups->offset -ADDU T9,A2,T8 ;T9=p->end of groups -LW T0,FFFC (T9) ;T0=p->last group -LUI AT,8003 -SW T0,6B74 (AT) ;p->last group -> 80036B74 -LUI AT,8003 -JR RA -SW V0,6B80 (AT) ;V0->80036B80: # groups - - -7F08FE74 C49A4 print debug menu to stdout; returns V0=A0 - accepts: A0=(unused) -ADDIU SP,SP,FFC0 -LUI V0,8003 -LW V0,6B88 (V0) ;V0=80036B88: [2] -LUI T6,8003 -LW T6,6B74 (T6) ;T6=80036B74: last group (# entries) -SW S8,0038 (SP) -SW S7,0034 (SP) -LUI S7,8003 -LUI S8,8003 -SW S0,0018 (SP) -ADDU S7,S7,V0 -ADDU S8,S8,V0 -SW RA,003C (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW A0,0040 (SP) -LBU S7,6B8C (S7) ;S7=80036B8C+offset: [7] x offset multiplier -LBU S8,6B90 (S8) ;S8=80036B90+offset: [4] y offset multiplier -BLEZ T6,7F08FFD8 ;branch if invalid #entries -OR S0,R0,R0 ;S0=0 -//7F08FED4 -LUI S6,8003 -LUI S4,8003 -LUI S3,8003 -ADDIU S3,S3,6B70 ;S3=80036B70: highlighted option # -ADDIU S4,S4,6B7C ;S4=80036B7C: p->positions -ADDIU S6,S6,6B78 ;S6=80036B78: p->text pointers -OR S1,R0,R0 ;S1=0: offset in positions table -OR S2,R0,R0 ;S2=0: offset in text table -ADDIU S5,R0,0007 ;S5=7 -//7F08FEF8 -JAL 7F08FE00 ;does nothing! -NOP -LW T7,0000 (S3) ;T7=80036B70: highlighted option -ADDIU A0,R0,00C0 ;A0=C0 red -ADDIU A1,R0,00C0 ;A1=C0 green -BNE S0,T7,7F08FF30 -ADDIU A2,R0,00C0 ;A2=C0 blue -//7F08FF14: highlighted red text -ADDIU A0,R0,00C0 ;A0=C0 red -OR A1,R0,R0 ;A1=00 green -OR A2,R0,R0 ;A2=00 blue -JAL 7000B06C ;colour -> 800268AC -ADDIU A3,R0,00C0 ;A3=C0 alpha -BEQ R0,R0,7F08FF3C -LW T8,0000 (S4) -//7F08FF30: grey text -JAL 7000B06C ;colour -> 800268AC -ADDIU A3,R0,00C0 ;A3=C0 alpha -//7F08FF38: -LW T8,0000 (S4) ;T8=positions -ADDU V0,T8,S1 ;V0=T8+S1: block+offset to entry's position -LW T9,0000 (V0) ;T9=x position -LW T1,0004 (V0) ;T1=y position -MULTU T9,S7 -MFLO A0 ;A0=xpos * x offset mutliplier -ADDIU A0,A0,FFEC ;A0-=0x14 -BGEZ A0,7F08FF64 ;branch if on-screen -SRA T0,A0,0x2 ;T0=xpos/4 -ADDIU AT,A0,0003 -SRA T0,AT,0x2 ;T0=(xpos+3)/4 -//7F08FF64 -MULTU T1,S8 -OR A0,T0,R0 ;A0=T0: xpos/4 -MFLO T2 ;T2=ypos *yoffset multiplier -ADDIU T3,T2,FFF8 ;T3=T2-8: ypos-8 -NOP -DIV T3,S5 -MFLO A1 ;A1=ypos/7 -BNEZ S5,7F08FF8C ;branch if no division by zero -NOP -BREAK -//7F08FF8C -ADDIU AT,R0,FFFF -BNE S5,AT,7F08FFA4 ;branch if not -1 -LUI AT,8000 -BNE T3,AT,7F08FFA4 ;branch if not address or invalid -NOP -BREAK -//7F08FFA4 -JAL 7000B040 ;save final debug text positions -NOP -LW T4,0000 (S6) ;T4=p->text pointers -ADDU T5,T4,S2 ;T5=p->text for entry -JAL 7000B1E8 ;write string A0 to stdout -LW A0,0000 (T5) ;A0=p->text -LUI T6,8003 -LW T6,6B74 (T6) ;T6=80036B74: #entries -ADDIU S0,S0,0001 -ADDIU S1,S1,0008 -SLT AT,S0,T6 -BNEZ AT,7F08FEF8 -ADDIU S2,S2,0004 -//7F08FFD8 return -LW RA,003C (SP) -LW V0,0040 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0040 - - -7000B06C AC6C save debug menu text colour w/ alpha inverted - accepts: A0=red, A1=green, A2=blue, A3=alpha - fries: T0,T3,T6,T7,T8,T9 -SLL T6,A0,0x18 ;T6=RR000000 -SLL T7,A1,0x10 ;T7=00GG0000 -OR T8,T6,T7 ;T8=RRGG0000 -SLL T9,A2,0x8 ;T9=0000BB00 -ADDIU T1,R0,00FF -SUBU T2,T1,A3 ;T2=FF-alpha: alpha inverted -OR T0,T8,T9 ;T0=RRGGBB00 -OR T3,T0,T2 ;T3=RRGGBBaa -LUI AT,8002 -JR RA -SW T3,68AC (AT) ;colour -> 800268AC: debug text colour - -7000B040 AC40 saves final debug menu text position - accepts: A0=xpos, A1=ypos - fries: AT,A0,A1,T6,T7 -LUI T6,8002 -LW T6,4FA0 (T6) ;T6=80024FA0: [5] -LUI T7,8002 -LW T7,4FA4 (T7) ;T7=80024FA4: [1] -LUI AT,8002 -ADDU A0,A0,T6 ;xpos+=xoffset -SW A0,4FA8 (AT) ;xpos->80024FA8 -LUI AT,8002 -ADDU A1,A1,T7 ;ypos+=yoffset -JR RA -SW A1,4FAC (AT) ;ypos->80024FAC - -7000B1E8 ADE8 write string A0 to stdout - accepts: A0=p->text -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LBU S0,0000 (A0) ;S0=char -OR S1,A0,R0 ;S1=A0: p->text -BEQ S0,R0,7000B21C ;branch if NULL -ANDI A0,S0,00FF ;A0=absolutely unsigned char -//7000B208: read in string -JAL 7000B0C4 ;write one character -ADDIU S1,S1,0001 ;S1++ next char in string -LBU S0,0000 (S1) ;S0=char -BNEL S0,R0,7000B208 ;loop if not NULL -ANDI A0,S0,00FF ;A0=absolutely unsigned char -//7000B21C: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -7000B0C4 BCC4 writes char A0 to screen -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -JAL 7000441C -SW A0,0028 (SP) ;SP+28=A0: char -ADDIU T6,V0,FFF3 -BGEZ T6,7000B0E8 -SRA T7,T6,0x2 -ADDIU AT,T6,0003 -SRA T7,AT,0x2 -//7000B0E8: -JAL 7000442C -SW T7,0024 (SP) -ADDIU T0,V0,FFF6 -ADDIU AT,R0,0007 ;AT=7 -DIV T0,AT -LBU A2,002B (SP) ;A2=char -MFLO T0 ;T0/=7: -LUI V0,8002 -BEQ A2,R0,7000B120 ;branch if NULL -OR V1,A2,R0 ;V1=A2: char -SLTI AT,V1,0020 -BNEZ AT,7000B148 ;branch if control char -SLTI AT,V1,007F -BEQ AT,R0,7000B148 ;branch if not ANSI standard -//7000B120: valid characters... -LUI A3,8002 -ADDIU A3,A3,4FAC ;A3=80024FAC -ADDIU V0,V0,4FA8 ;V0=80024FA8 -LW A0,0000 (V0) ;A0=80024FA8: x position -LW A1,0000 (A3) ;A1=80024FAC: y position -SW V1,001C (SP) ;SP+1C=char -JAL 7000ADD0 ;display text to coordinates... -SW T0,0020 (SP) ;SP+20=T0: -LW V1,001C (SP) ;SP+1C=char -LW T0,0020 (SP) -//7000B148: control and invalid characters -LUI V0,8002 -ADDIU V0,V0,4FA8 ;V0=80024FA8 -LW T9,0000 (V0) ;T9=80024FA8: x position -LUI A3,8002 -ADDIU AT,R0,000D ;AT=D -ADDIU T1,T9,0001 ;T1=T9+1: xpos+1 -ADDIU A3,A3,4FAC ;A3=80024FAC -BEQ V1,AT,7000B184 ;branch if char is newline (or is it return? always mix those up...) -SW T1,0000 (V0) ;save updated xpos -ADDIU AT,R0,000A -BEQ V1,AT,7000B184 ;branch if char is return (newline? can't remember) -LW T3,0024 (SP) -SLT AT,T1,T3 -BNEL AT,R0,7000B1B4 ;branch if not on-screen? -LW RA,0014 (SP) -//7000B184: else wordwrap? -LW T5,0000 (A3) ;T5=80024FAC: y position -LUI T4,8002 -LW T4,4FA0 (T4) ;T4=80024FA0: [5] -ADDIU T6,T5,0001 ;T6=T5+1: ypos+1 -SLT AT,T6,T0 -SW T6,0000 (A3) ;save updated ypos -BNEZ AT,7000B1B0 ;branch if still on-screen? -SW T4,0000 (V0) ;[5]->xpos -LUI T8,8002 -LW T8,4FA4 (T8) ;T8=80024FA4: ypos -SW T8,0000 (A3) ;T8->80024FAC -//7000B1B0: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - -7000ADD0 B9D0 place character into screen display position - accepts: A0=xpos, A1=ypos, A2=char -SW A2,0008 (SP) ;SP+8=A2: char -ANDI T6,A2,00FF ;T6=char -LUI V1,8002 -LUI T0,8002 -LUI T2,8002 -LUI T1,8002 -OR A2,T6,R0 ;A2&=0xFF -SW A0,0000 (SP) ;SP+0=A0: xpos -ADDIU T1,T1,68B0 ;T1=800268B0 -ADDIU T2,T2,6710 ;T2=80026710 -ADDIU T0,T0,6610 ;T0=80026610 -LW V1,68AC (V1) ;V1=800268AC: debug text colour -OR V0,R0,R0 ;V0=0 -OR A3,R0,R0 ;A3=0 -//7000AE08: check if colour is already in index -LW T7,0004 (T0) ;T7=80026614: -ADDIU T0,T0,0008 ;T0+=8 -ADDU T9,T2,A3 ;T9=T2+offset: -BNEL V1,T7,7000AE30 ;branch if colour isn't same as 80026614 -ADDIU V0,V0,0001 ;V0++ -//7000AE1C: -LW T8,0004 (T1) ;T8=800268B4: colour -LW T3,0004 (T9) ;T3=80026714+offset: -BEQL T8,T3,7000AEA8 ;branch if colour same as value -LW T6,0000 (SP) ;T6=xpos -//7000AE2C: loop until done checking the colour index -ADDIU V0,V0,0001 ;V0++ -SLTI AT,V0,0020 -BNEZ AT,7000AE08 ;branch if count<20 -ADDIU A3,A3,0008 ;A3+=8: -//7000AE3C: add colour to index (I think...) -LUI A3,8002 -ADDIU A3,A3,6810 ;A3=80026810 -LW V1,0000 (A3) ;V1=80026810: #registered colours -LUI T6,8002 -ADDIU T6,T6,68A8 ;T6=800268A8 -LW AT,0000 (T6) ;AT=800268A8: -LUI T4,8002 -ADDIU T4,T4,6610 ;T4=80026610 -SLL A0,V1,0x3 ;A0=V1->offset -ADDU T5,A0,T4 ;T5=80026610+offset to entry -SW AT,0000 (T5) ;AT->80026610+offset: -LW T9,0004 (T6) ;T9=800268AC: debug text colour -ADDU T8,T2,A0 ;T8=80026710+offset: -ADDIU T7,V1,0001 ;T7=V1+1: updated colour count -SW T9,0004 (T5) ;debug text colour -> next entry in 80026610 -LW AT,0000 (T1) ;AT=800268B0: -SW AT,0000 (T8) ;AT -> 80026710+offset -LW T4,0004 (T1) ;T4=800268B4: colour -SW T4,0004 (T8) ;T4 -> 80026714+offset -BGEZ T7,7000AE9C ;branch if valid number -ANDI T5,T7,001F ;T5=entry 0-1F -BEQ T5,R0,7000AE9C ;branch if entry 0 -NOP -ADDIU T5,T5,FFE0 ;T5-=20: correct register -//7000AE9C: write text entry - char in position, colour -SW T5,0000 (A3) ;T5=80026810: new # registered colours -OR V0,T5,R0 ;V0=T5 -LW T6,0000 (SP) ;T6=xpos -SLL T3,A1,0x1 ;T3=ypos*2 -LUI T4,8002 -SLL T9,T6,0x3 -ADDU T9,T9,T6 -SLL T9,T9,0x2 -SUBU T9,T9,T6 -SLL T9,T9,0x1 ;T9=xpos * 0x46 -ADDU T8,T9,T3 ;T8=(xpos*0x46)+(ypos*2) -ADDIU T4,T4,5030 ;T4=80025030 -ADDU V1,T8,T4 ;V1=80025030+offset -SB A2,0000 (V1) ;char -> 80025030 table -JR RA -SB V0,0001 (V1) ;vcolour index -> 80025031 table - - -7000B27C BE7C read screen display block and write characters to positions - accepts: A0=p->display list target - uses offset within J-text image bank (probably), acting as an s/t formula -ADDIU SP,SP,FF78 -SW S5,002C (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -LUI A3,8002 -OR S0,A0,R0 ;S0=A0: DL -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -OR S1,A0,R0 ;S1=A0: DL -ADDIU A2,R0,FFFF ;A2=-1 -ADDIU A3,A3,6610 ;A3=80026610: #colours -OR S5,R0,R0 ;S5=0 -OR T0,R0,R0 ;T0=0: offset to current entry -//7000B2C4: set entry in column -LUI T6,8002 -ADDIU A1,T6,5030 ;A1=80025030: p->screen entries -ADDU A0,T0,A1 ;A0=p->current entry -//7000B2D0: read entries to allocate space -LBU V0,0000 (A0) ;V0=char -ADDIU A1,A1,0046 ;A1+=46: next entry in row -LBU V1,0001 (A0) ;V1=colour# -BEQ V0,R0,7000B2F8 ;branch if no entry -NOP -BEQL V1,A2,7000B2F8 ;branch if invalid colour -ADDIU S1,S1,0018 -ADDIU S1,S1,0010 ;S1+=10: -OR A2,V1,R0 ;A2=colour# -ADDIU S1,S1,0018 ;S1+=18: -//7000B2F8: loop for each row and column -BNE A1,A3,7000B2D0 ;loop until end of screen -ADDIU A0,A0,0046 ;A0+=46: next entry in row -ADDIU T0,T0,0002 ;T0+=2: next entry in column -SLTI AT,T0,0046 -BNEZ AT,7000B2C4 ;loop for each entry in column -NOP -//7000B310: -JAL 7F0BD77C ;V0=#commands that can fit in block -OR A0,S0,R0 ;A0=S0: DL start -SUBU A0,S1,S0 ;A0=S1-S0: allocated size -BGTZ A0,7000B32C ;branch if something to write -ADDIU V1,V0,F800 ;V1=#commands-0x800 -BEQ R0,R0,7000B528 ;return if nothing to write -OR V0,S0,R0 ;V0=S0: DL -//7000B32C: -BGTZ V1,7000B340 ;branch if at least 0x800 commands can be written -ADDIU S4,R0,FFFF ;S4=-1 -LUI AT,8002 -BEQ R0,R0,7000B398 -SW R0,68B8 (AT) ;0->800268B8: -//7000B340: -SLT AT,V1,A0 -BEQ AT,R0,7000B38C -SLL T7,V1,0x8 -SUBU T7,T7,V1 -DIV T7,A0 -BNEZ A0,7000B360 -NOP -BREAK -//7000B360: -ADDIU AT,R0,FFFF -BNE A0,AT,7000B378 -LUI AT,8000 -BNE T7,AT,7000B378 -NOP -BREAK -//7000B378: -LUI AT,8002 -MFLO T8 -SW T8,68B8 (AT) -BEQ R0,R0,7000B39C -OR V0,S0,R0 -//7000B38C: -ADDIU T9,R0,0100 -LUI AT,8002 -SW T9,68B8 (AT) ;0x100 -> 800268B8: -//7000B398: -OR V0,S0,R0 ;V0=S0: DL -LUI T2,8002 -ADDIU T2,T2,4FB0 ;T2=80024FB0: display list snippet -LUI T1,0600 -SW T1,0000 (V0) ;06000000 -> DL+0: rsp_displaylist: push -SW T2,0004 (V0) ;80024FB0 -> DL+4: rsp_displaylist: use display list snippet -LUI S8,8002 -LUI S7,8002 -ADDIU S0,S0,0008 ;S0+=8: next DL -ADDIU S7,S7,6610 ;S7=80026610: primary colour index -ADDIU S8,S8,6710 ;S8=80026710: enviroment colour index -SW R0,0040 (SP) ;SP+40=0 -OR S5,R0,R0 ;S%=0 -ADDIU S6,R0,0050 ;S6=0x50 -//7000B3D0: -LW T3,0040 (SP) ;T3=offset to entry in column -LUI T4,8002 -ADDIU T4,T4,5030 ;T4=80025030: p->screen entries -OR S1,R0,R0 ;S1=0 count -ADDU S2,T3,T4 ;S2=p->entry in column -//7000B3E4: grab entry -LBU S3,0000 (S2) ;S3=char -LBU V1,0001 (S2) ;V1=colour# -BEQL S3,R0,7000B504 ;skip if no text -ADDIU S1,S1,0001 -BEQ V1,S4,7000B42C ;branch if colour# -1 (invalid) -SLL V0,V1,0x3 ;V0=colour#*8 colour->offset -//7000B3FC: write colourizer ops -ADDU T5,S7,V0 ;T5=80026610+offset: p->foreground colour -LW AT,0000 (T5) ;AT=prim colour upper op [FA000000] -ADDU T8,S8,V0 ;T8=80026710+offset: p->background colour -ADDIU S0,S0,0010 ;S0+=10: next 2 DL ops -SW AT,FFF0 (S0) ;AT->DL-10: rdp_setprimcolour upper half -LW T7,0004 (T5) ;T7=80026614+offset: prim colour -OR S4,V1,R0 ;S4=V1: offset in colour tables -SW T7,FFF4 (S0) ;T7->DL-C: rdp_setprimcolour: colour -LW AT,0000 (T8) ;AT=env colour upper op [FB000000] -SW AT,FFF8 (S0) ;AT->DL-8: rdp_setenvcolour upper half -LW T1,0004 (T8) ;T7=80026714+offset: background colour -SW T1,FFFC (S0) ;T1->DL-4: rdp_setenvcolour: colour -//7000B42C: test if you can draw text, apparently skipped randomly -JAL 7000A450 ;V0=random# -NOP -LUI T3,8002 -LW T3,68B8 (T3) ;T3=800268B8: ??? -ANDI T2,V0,00FF ;T2=random byte -SLTU AT,T2,T3 -BEQL AT,R0,7000B504 ;branch if rand < value -ADDIU S1,S1,0001 -JAL 7F0BD77C ;V0=#commands that can fit in block -OR A0,S0,R0 ;A0=S0: DL -SLTI AT,V0,0400 -BNEZ AT,7000B500 ;don't write if there isn't at least 0x400 commands available -OR V0,S0,R0 ;V0=S0: DL -//7000B460: draw text using textrect -SLL V1,S1,0x4 ;V1=S1*0x10: count*0x10 -SLL A0,S5,0x3 -SUBU A0,A0,S5 -ADDIU T4,V1,0010 ;T4=(S1+1)*10 -ANDI T6,T4,0FFF ;T6=((S1+1)*10) & 0xFFF -SLL A0,A0,0x2 ;A0=S5*1C -ANDI T2,V1,0FFF ;T2=(S1*0x10) & 0xFFF -SLL T3,T2,0xC ;T3=T2 * 0x1000: lower right x -SLL T5,T6,0xC ;T5=T6 * 0x1000: upper left x -ADDIU T9,A0,001C ;T9=(S5+1)*1C -ANDI T4,A0,0FFF ;T4=(S5*1C) & 0xFFF: lower right y -LUI AT,E400 -ADDIU A2,S3,FFE0 ;A2=char-0x20 -SRA T2,A2,0x5 ;T2=(char-0x20) / 0x20 -OR T7,T5,AT ;T7=E4000000 | ulx -OR T6,T3,T4 ;T6=lrx | lry -ANDI T8,T9,0FFF ;T8=(S5+1)*1C) & 0xFFF: upper left y -OR T1,T7,T8 ;T1=E4000000 | ulx | uly -SLL T3,T2,0x3 -SUBU T3,T3,T2 -ADDIU S0,S0,0008 ;S0+=8: next DL op -OR A1,S0,R0 ;A1=S0: DL -SLL T3,T3,0x5 ;T3=(char-0x20) / 0x20 * 0xE0: bank# -SW T1,0000 (V0) ;T1->DL+0: rdp_texrect: upper word -ANDI T8,A2,001F ;T8=(char-0x20) & 0x1F -SW T6,0004 (V0) ;T6->DL+4: rdp_texrect: lower word -SLL T1,T8,0x17 ;T1=((char-0x20) & 0x1F)*0x800000: entry in bank [0F800000] -ANDI T4,T3,FFFF ;T4=T3->short -ADDIU S0,S0,0008 ;S0+=8: next DL op -LUI T5,B400 -SW T5,0000 (A1) ;T5->DL+8: rsp_rdphalf_1: upper word -OR A3,S0,R0 ;A3=S0: DL -OR T6,T1,T4 ;T6=entry in bank | bank#: upper left s | upper left t -SW T6,0004 (A1) ;T6->DL+C: rsp_rdphalf_1: lower word, of formula 0F80.01C0 -LUI T9,0400 -ORI T9,T9,0400 ;T9=04000400: dsdx|dtdy -LUI T5,B300 -SW T5,0000 (A3) ;T5->DL+10: rsp_rdphalf_2: upper word -SW T9,0004 (A3) ;T9->DL+14: rsp_rdphalf_2: change in s/x, t/y -ADDIU S0,S0,0008 ;S0+=8: next DL op -//7000B500: loop for each row and column (in a rather silly way...) -ADDIU S1,S1,0001 ;S1++ -BNE S1,S6,7000B3E4 ;branch if count < 0x50 -ADDIU S2,S2,0046 ;S2+=46: next character in row -LW T7,0040 (SP) ;T7=SP+40: offset to entry in column -ADDIU S5,S5,0001 ;S5++ count++ -ADDIU AT,R0,0023 ;AT=0x23: #characters in a column -ADDIU T8,T7,0002 ;T8=T7+2: next entry in column -BNE S5,AT,7000B3D0 ;loop for each character in column -SW T8,0040 (SP) ;save updated value -OR V0,S0,R0 ;V0=S0: DL -//7000B528: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0088 - - -7F0BD77C F22AC compute number of microcode commands that can fit in memory chunk - accepts: A0=p->display list target -LUI T6,8009 -LBU T6,C250 (T6) ;T6=8008C250: -LUI T8,8009 -SLL T7,T6,0x2 ;T7=value->offset -ADDU T8,T8,T7 -LW T8,C234 (T8) ;T8=8008C234+offset: -SUBU V0,T8,A0 ;V0=size of block between T8 and A0 -SRA T9,V0,0x3 ;T9=size/8: #ucode commands between blocks -JR RA -OR V0,T9,R0 ;V0=#commands possible diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F057540 - solo watch objectives status.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F057540 - solo watch objectives status.txt deleted file mode 100644 index 38667a8..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F057540 - solo watch objectives status.txt +++ /dev/null @@ -1,162 +0,0 @@ -7F057540 8C070 display "objective x: status" when status of objective changes -ADDIU SP,SP,FF70 -SW S6,0030 (SP) -SW S3,0024 (SP) -LUI T6,8005 -ADDIU S3,SP,0054 ;S3=SP+54: p->buffer -LUI S6,8003 -SW S4,0028 (SP) -ADDIU T6,T6,3610 ;T6=80053610 -ADDIU S6,S6,22F0 ;S6=800322F0 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S5,002C (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -OR S4,R0,R0 ;S4=0 -ADDIU T9,T6,0030 ;T9=80053640 -OR T0,S3,R0 ;T0=S3: p->buffer -//7F05758C: copy data from 80053610 to buffer -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T6) -SW AT,FFF8 (T0) -LW AT,FFFC (T6) -BNE T6,T9,7F05758C ;loop until copied -SW AT,FFFC (T0) -LHU AT,0000 (T6) -LUI S5,8007 -LUI S8,8005 -SH AT,0000 (T0) -LW T1,0000 (S6) ;T1=#objectives -ADDIU S8,S8,3644 ;S8=80053644: "%s [0x80]%c " -ADDIU S5,S5,5D58 ;S5=80075D58 -BLTZ T1,7F057714 ;branch if no objectives -OR S2,R0,R0 ;S2=0 count=0 -LUI S7,8005 -ADDIU S7,S7,84D0 ;S7=800484D0 -//7F0575DC: test status for change -JAL 7F057238 ;V0=status of objective A0 -OR A0,S2,R0 ;A0=S2: objective# -LW T2,0000 (S5) ;T2=completion status for entry S2 -OR S1,V0,R0 ;S1=V0: status -OR A0,S2,R0 ;A0=S2: count -BEQ V0,T2,7F0576DC ;branch if status didn't change -NOP -//7F0575F8: when status changes, display a "objective x: status" message -JAL 7F057204 ;V0= difficulty for objective# A0 -SW V0,0000 (S5) ;save completion status -JAL 7F0BFC10 ;V0=difficulty -OR S0,V0,R0 ;S0=V0: objective difficulty -SLT AT,V0,S0 ;TRUE if difficulty < objective's difficulty -BNEZ AT,7F0576DC ;branch if not using objective -NOP -LB T3,0000 (S7) ;T3=800484D0: selected language -ADDIU S0,S4,001A ;S0=S4+1A: 801A+objective#: "A"+# -ORI A0,R0,B02C ;A0=B02C: "objective" -BEQ T3,R0,7F05764C ;branch if english -NOP -//7F057628: japanese -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,B02C ;A0=B02C: "objective" -OR A0,S3,R0 ;A0=S3: p->buffer -OR A1,S8,R0 ;A1=S8: "%s [0x80]%c " -OR A2,V0,R0 ;A2=V0: p->text -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A3,S0,R0 ;A3=S0: objective letter -BEQ R0,R0,7F057670 -ADDIU AT,R0,0001 -//7F05764C: english -JAL 7F0C1DD8 ;V0=p->text ID A0 -ADDIU S0,S4,0061 ;S0=S4+61: objective#+"a" -LUI A1,8005 -ADDIU A1,A1,364C ;A1=8005364C: "%s %c: " -OR A0,S3,R0 ;A0=S3: p->buffer -OR A2,V0,R0 ;A2=V0: p->text -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A3,S0,R0 ;A3=S0: objective letter -//7F05766C: print "completed" -ADDIU AT,R0,0001 -BNE S1,AT,7F057694 ;branch if status not "complete" -NOP -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,B02D ;A0=B02D: "completed\n" -OR A0,S3,R0 ;A0=S3: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F0576D4 -NOP -//7F057694: print "incomplete" -BNEZ S1,7F0576B8 ;branch if status not "incomplete" -ADDIU AT,R0,0002 -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,B02E ;A0=B02E: "incomplete\n" -OR A0,S3,R0 ;A0=S3: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F0576D4 -NOP -//7F0576B8: print "failed" -BNE S1,AT,7F0576D4 ;branch if status not "failed" -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,B02F ;A0=B02F: "failed\n" -OR A0,S3,R0 ;A0=S3: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -//7F0576D4: -JAL 7F08A3C8 ;display text A0 in lower left -OR A0,S3,R0 ;A0=S3: p->text buffer -//7F0576DC: increment displayed objective count if objective within difficulty -JAL 7F057204 ;V0= difficulty for objective# A0 -OR A0,S2,R0 ;A0=S2: objective# -JAL 7F0BFC10 ;V0=difficulty -OR S0,V0,R0 ;S0=V0: objective difficulty -SLT AT,V0,S0 ;TRUE if difficulty pales n light of objective's difficulty -BNEL AT,R0,7F057700 ;branch if not using -LW T4,0000 (S6) -ADDIU S4,S4,0001 ;S4++ -//7F057700: loop for each objective -LW T4,0000 (S6) ;T4=#objectives -ADDIU S2,S2,0001 ;S2++ count++ -ADDIU S5,S5,0004 ;S5+=4: next status register -SLT AT,T4,S2 ;TRUE if total < count -BEQ AT,R0,7F0575DC ;loop for each objective -NOP -//7F057718: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0090 - -+_+ - -7F057204 8BD34 V0= difficulty for objective# A0 - accepts: A0=objective# - fries: AT,V1,T6 -SLTI AT,A0,000A -BEQ AT,R0,7F05722C ;branch if over objective cap of 10 -SLL T6,A0,0x2 -LUI V1,8007 -ADDU V1,V1,T6 ;V1=objective#->offset -LW V1,5D30 (V1) ;V1=80075D30+offset: p->objective data -BEQL V1,R0,7F057230 ;default if NULL pointer -OR V0,R0,R0 -JR RA -LB V0,000F (V1) ;V0=minimum difficulty -//7F05722C: default to agent -OR V0,R0,R0 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A526C - solo watch main page advance.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A526C - solo watch main page advance.txt deleted file mode 100644 index 20da63b..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A526C - solo watch main page advance.txt +++ /dev/null @@ -1,100 +0,0 @@ -7F0A526C: solo watch - main page interface -LUI T6,8004 -LW T6,09A8 (T6) ;T6=1 if an option has been selected for editting -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) ;SP+14=0 -BNEZ T6,7F0A5384 -LUI T6,8004 -SW R0,001C (SP) ;SP+1C=0: pressed "left" register -JAL 7F091054 ;V0=TRUE if movable inventory item image enabled -SW R0,0018 (SP) ;SP+18=0: pressed "right" register -BNEZ V0,7F0A52C4 ;branch if not catching shoulder and c pad -OR A0,R0,R0 ;A0=0: player 1 -//7F0A5298: c-left, L button -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0022 ;A1=0022: c-left, L button -BEQ V0,R0,7F0A52B0 ;branch if neither pressed -OR A0,R0,R0 ;A0=0: player 1 -ADDIU T7,R0,0001 -SW T7,001C (SP) ;SP+1C=1: left pressed -//7F0A52B0: c-right, R button -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0011 ;A1=0011: c-right, R button -BEQ V0,R0,7F0A52C4 ;branch if not pressed -ADDIU T8,R0,0001 -SW T8,0018 (SP) ;SP+18=1: right pressed -//7F0A52C4: left on d-pad or control stick -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0200 ;A1=0200: +-left -BNEL V0,R0,7F0A52E8 ;branch if set -ADDIU T9,R0,0001 -JAL 7F0A4FB0 ;V0=TRUE if pressed left on control stick -NOP -BEQ V0,R0,7F0A52EC ;branch if not set -ADDIU T9,R0,0001 -//7F0A52E8: right on d-pad or control stick -SW T9,001C (SP) ;SP+1C=1: left pressed -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0100 ;A1=0100: +-right -BNEL V0,R0,7F0A5310 ;branch if set -ADDIU T0,R0,0001 -JAL 7F0A4FEC ;V0=TRUE if pressed right on control stick -NOP -BEQ V0,R0,7F0A5314 ;branch if not set -ADDIU T0,R0,0001 -//7F0A5310: handle page swap if left pressed -SW T0,0018 (SP) ;SP+18=1: right pressed -LW T1,001C (SP) ;T1=TRUE if left pressed -ADDIU T2,R0,0004 -LUI AT,8004 -BEQL T1,R0,7F0A534C ;branch if left not pressed -LW T3,0018 (SP) ;T3=TRUE if right pressed -JAL 7F0A5210 ;set new page -SW T2,0994 (AT) ;4->80040994: page 4 (objectives) -LUI AT,8006 -LWC1 F12,8458 (AT) ;F12=brief/objective zoom -LUI AT,4170 -MTC1 AT,F14 ;F14=time -JAL 7F07E400 ;set the transition in motion -NOP -LW T3,0018 (SP) -//7F0A534C: -ADDIU T4,R0,0001 ;advance to inventory -LUI AT,8004 -BEQL T3,R0,7F0A53CC ;branch if right not pressed -LW RA,0014 (SP) -JAL 7F0A5210 ;set new page -SW T4,0994 (AT) ;1->80040994: menu 1 (inventory) -LUI AT,8006 -LWC1 F12,845C (AT) ;F12=inventory zoom -LUI AT,4170 -MTC1 AT,F14 ;F14=time -JAL 7F07E400 ;set the transition in motion -NOP -BEQ R0,R0,7F0A53CC -LW RA,0014 (SP) -//7F0A5384: -LW T5,09A4 (T5) ;T5=800409A4: abort selected -OR A0,R0,R0 ;A0=0: player 1 -BEQL T5,R0,7F0A53CC -LW RA,0014 (SP) -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,A000 ;A1=A000: A, Z buttons -BEQ V0,R0,7F0A53C8 ;branch if not pressed -LUI AT,8004 -SW R0,09A4 (AT) ;0->800409A4: deselect abort -JAL 7F0C0C3C -OR A0,R0,R0 ;A0=0 -JAL 70006930 ;0x5A->loaded stage# -NOP -ADDIU T6,R0,0001 -LUI AT,8003 -JAL 7F01D524 ;update eeprom file? -SW T6,A924 (AT) ;1->8002A924: -LW RA,0014 (SP) -//7F0A53CC: -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A53D8 - solo watch inventory page advance.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A53D8 - solo watch inventory page advance.txt deleted file mode 100644 index 32b5c50..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A53D8 - solo watch inventory page advance.txt +++ /dev/null @@ -1,86 +0,0 @@ -7F0A53D8: solo watch menu: inventory page advance interface -LUI T6,8004 -LW T6,09A8 (T6) ;T6=800409A8: option selected register -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -BNEL T6,R0,7F0A54F8 ;branch if selected -NOP -//7F0A53F0: -SW R0,001C (SP) ;SP+1C=0: "left" register -JAL 7F091054 ;V0=TRUE if movable inventory item image enabled -SW R0,0018 (SP) ;SP+18=0: "right" register -BNEZ V0,7F0A5430 ;branch if not catching shoulder and c pad -OR A0,R0,R0 ;A0=0: player 1 -//7F0A5404: left shoulder or c pad -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0022 ;A1=0022: L button, c-left -BEQ V0,R0,7F0A541C ;branch if not pressed -OR A0,R0,R0 ;A0=0: player 1 -ADDIU T7,R0,0001 -SW T7,001C (SP) ;1->SP+1C: left pressed -//7F0A541C right shoulder or c pad -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0011 ;A1=0011: R button, c-right -BEQ V0,R0,7F0A5430 ;branch if not pressed -ADDIU T8,R0,0001 -SW T8,0018 (SP) ;1->SP+18: right pressed -//7F0A5430: left stick or + pad -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0200 ;A1=0200: +-left -BNEL V0,R0,7F0A5454 ;branch if pressed -ADDIU T9,R0,0001 -JAL 7F0A4FB0 ;V0=TRUE if pressed left on control stick -NOP -BEQ V0,R0,7F0A5458 ;branch if not pressed -//7F0A5450: set left -ADDIU T9,R0,0001 -SW T9,001C (SP) ;1->SP+1C: left pressed -//7F0A5458: right stick or + pad -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0100 ;A1=0100: +-right -BNEL V0,R0,7F0A547C ;branch if pressed -ADDIU T0,R0,0001 -JAL 7F0A4FEC ;V0=TRUE if pressed right on control stick -NOP -BEQ V0,R0,7F0A5480 ;branch if not pressed -//7F0A5478: set right -ADDIU T0,R0,0001 -SW T0,0018 (SP) ;1->SP+18: right pressed -//7F0A5480: handle pressing left -LW T1,001C (SP) ;T1="left" register -LUI AT,8004 -BEQL T1,R0,7F0A54BC ;branch if not set -LW T2,0018 (SP) ;T2= "right" register -JAL 7F0AB4A4 ;reset solo watch main page selection -SW R0,0994 (AT) ;0->80040994: solo watch page 0: main -JAL 7F0A5210 ;switch solo watch page -NOP -LUI AT,8006 -LWC1 F12,8460 (AT) ;F12=80058460: zoom for inventory->main watch menu -LUI AT,4170 -MTC1 AT,F14 ;F14= transition time [41700000] -JAL 7F07E400 ;trigger watch zoom -LW T2,0018 (SP) ;T2= "right" register -JAL 7F07E420 ;copy final size to zoom register -//7F0A54BC: handle pressing right -ADDIU T3,R0,0002 -LUI AT,8004 -BEQL T2,R0,7F0A54F8 ;branch if right not pressed -NOP -JAL 7F0A4FA4 ;0->80040ADC: -SW T3,0994 (AT) ;2->80040994: solo watch page 2: controls -JAL 7F0A5210 ;switch solo watch page -NOP -LUI AT,4170 -MTC1 AT,F14 ;F14= transition time [41700000] -LUI AT,8006 -JAL 7F07E400 ;trigger watch zoom -LWC1 F12,8464 (AT) ;F12=80058464: zoom for inventory->control watch menu -JAL 7F07E420 ;copy final size to zoom register -NOP -//7F0A54F8: return -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0020 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A5504 - solo watch beta objectives page advance.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A5504 - solo watch beta objectives page advance.txt deleted file mode 100644 index 878c5bf..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A5504 - solo watch beta objectives page advance.txt +++ /dev/null @@ -1,55 +0,0 @@ -7F0A5504: solo watch menu: beta objective page advance interface (removed) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -//7F0A550C: detect left + pad, c pad, shoulder -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0222 ;A1=0222: +-left, L, c-left -BNEZ V0,7F0A552C ;branch if pressed -NOP -JAL 7F0A4FB0 ;V0= TRUE if pressed left on control stick (0x2E) -NOP -BEQ V0,R0,7F0A5554 ;branch if not pressed -//7F0A552C: if left pressed... -LUI T6,8004 -LW T6,09A8 (T6) ;T6=800409A8: option selected register -ADDIU T7,R0,0001 -LUI AT,8004 -BNEL T6,R0,7F0A5558 ;branch if set -OR A0,R0,R0 -JAL 7F0A4FA4 ;0->80040ADC: -SW T7,0994 (AT) ;1->80040994: solo watch page 1: inventory -BEQ R0,R0,7F0A55B8 -NOP -//7F0A5554: detect right + pad, c pad, shoulder -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0111 ;A1=0111: +-right, R, c-right -BNEZ V0,7F0A5574 ;branch if set -NOP -JAL 7F0A4FEC ;V0= TRUE if pressed right on control stick (0x2E) -NOP -BEQ V0,R0,7F0A55B4 ;branch if not pressed -//7F0A5574: right pressed -LUI T8,8004 -LW T8,09A8 (T8) ;T8=800409A8: option selected register -ADDIU T9,R0,0002 -LUI AT,8004 -BNEL T8,R0,7F0A55B8 ;branch if set -NOP -JAL 7F0AB48C ;0->80040998: controls page setting selection -SW T9,0994 (AT) ;2->80040994: solo watch page 2: controls -JAL 7F0A5210 ;switch solo watch page -NOP -//7F0A559C: -LUI AT,4170 -MTC1 AT,F14 ;F14= transition time [41700000] -LUI AT,8006 -JAL 7F07E400 ;trigger watch zoom -LWC1 F12,8468 (AT) ;F12=80058468: unused zoom for control->options watch menu -JAL 7F07E420 ;copy final size to zoom register -NOP -//7F0A55B8: return -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A55C4 - solo watch controls page advance.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A55C4 - solo watch controls page advance.txt deleted file mode 100644 index 1c8b66c..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A55C4 - solo watch controls page advance.txt +++ /dev/null @@ -1,62 +0,0 @@ -7F0A55C4: solo watch menu: controls page advance interface -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -//7F0A55CC: detect left + pad, c pad, shoulder -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0222 ;A1=0222: +-left, L, c-left -BNEL V0,R0,7F0A55F0 ;branch if set -OR A0,R0,R0 -JAL 7F0A4FB0 ;V0= TRUE if pressed left on control stick (0x2E) -NOP -BEQ V0,R0,7F0A563C ;branch if not set -OR A0,R0,R0 ;A0=0: player 1 -//7F0A55F0: -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,2000 ;A1=2000: Z button -BNEZ V0,7F0A563C ;branch if set -LUI T6,8004 -LW T6,09A8 (T6) ;T6=800409A8: option selected register -ADDIU T7,R0,0001 -LUI AT,8004 -BNEL T6,R0,7F0A5640 ;branch if set -OR A0,R0,R0 -JAL 7F0A5210 ;switch solo watch page -SW T7,0994 (AT) ;1->80040994: solo watch page 1: inventory -LUI AT,8006 -LWC1 F12,846C (AT) ;F12=8005846C: zoom for control->inventory watch menu -LUI AT,4170 -MTC1 AT,F14 ;F14=transition time [41700000] -JAL 7F07E400 ;trigger watch zoom -LUI AT,8005 -BEQ R0,R0,7F0A5694 -SWC1 F12,507C (AT) ;F12->8005507C: copy watch zoom final size to zoom factor register -//7F0A563C: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0111 ;A1=0111: +-right, R, c-right -BNEL V0,R0,7F0A5660 ;branch if pressed -OR A0,R0,R0 -JAL 7F0A4FEC ;V0= TRUE if pressed right on control stick (0x2E) -NOP -BEQ V0,R0,7F0A5694 ;branch if not pressed -//7F0A565C: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,2000 ;A1=2000: Z button -BNEZ V0,7F0A5694 ;branch if held -LUI T8,8004 -LW T8,09A8 (T8) ;T8=800409A8: option selected register -ADDIU T9,R0,0003 -LUI AT,8004 -BNEL T8,R0,7F0A5698 ;branch if selected -LW RA,0014 (SP) -JAL 7F0AB498 ;0->8004099C: option page setting selected -SW T9,0994 (AT) ;3->80040994: solo watch page 3: options -JAL 7F0A4FA4 ;0->80040ADC: -NOP -//7F0A5694: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A56A4 - solo watch options page advance.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A56A4 - solo watch options page advance.txt deleted file mode 100644 index 35b0aa9..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A56A4 - solo watch options page advance.txt +++ /dev/null @@ -1,62 +0,0 @@ -7F0A56A4: solo watch menu: options page advance interface -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -//7F0A56AC: detect left stick, + pad, c pad, shoulder -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0222 ;A1=0222: +-left, L, c-left -BNEL V0,R0,7F0A56D0 ;branch if pressed -OR A0,R0,R0 ;A0=0: player 1 -JAL 7F0A4FB0 ;V0=TRUE if pressed left on control stick -NOP -BEQ V0,R0,7F0A570C -OR A0,R0,R0 ;A0=0: player 1 -//7F0A56D0: left pressed... -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,2000 ;A1=2000: Z button -BNEZ V0,7F0A570C ;branch if holding Z -LUI T6,8004 -LW T6,09A8 (T6) ;T6=800409A8: option selected register -ADDIU T7,R0,0002 -LUI AT,8004 -BNEL T6,R0,7F0A5710 ;branch if editting option -OR A0,R0,R0 -JAL 7F0AB48C ;0->80040998: controls page setting selection -SW T7,0994 (AT) ;2->80040994: solo watch page 2: controls -JAL 7F0A4FA4 ;0->80040ADC: -NOP -BEQ R0,R0,7F0A5778 -NOP -//7F0A570C: detect right stick, shoulder, + pad, c pad -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0111 ;A1=0010: R button, + right, c right -BNEL V0,R0,7F0A5730 ;branch if pressed -OR A0,R0,R0 ;A0=0: player 1 -JAL 7F0A4FEC ;V0=TRUE if pressed right on control stick -NOP -BEQ V0,R0,7F0A5774 ;branch if not pressed -//7F0A572C: right pressed... -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,2000 ;A1=2000: Z button -BNEZ V0,7F0A5774 ;branch if holding Z -LUI T8,8004 -LW T8,09A8 (T8) ;T8=800409A8: highlighted setting selected register -ADDIU T9,R0,0004 -LUI AT,8004 -BNEL T8,R0,7F0A5778 ;branch if editting selection -NOP -JAL 7F0A5210 ;switch solo watch page -SW T9,0994 (AT) ;3->80040994: solo watch page 3: objectives/briefing -LUI AT,4170 -MTC1 AT,F14 ;F14=transition time [41700000] -LUI AT,8006 -JAL 7F07E400 ;trigger watch zoom -LWC1 F12,8470 (AT) ;F12=80058470: zoom for options->objective/briefing watch menu -JAL 7F07E420 ;copy final size to zoom register -//7F0A5778: return -NOP -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A5784 - solo watch briefing page advance.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A5784 - solo watch briefing page advance.txt deleted file mode 100644 index 8c04ada..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A5784 - solo watch briefing page advance.txt +++ /dev/null @@ -1,61 +0,0 @@ -7F0A5784: solo watch menu: objectives/briefing page advance interface -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -//7F0A578C: detect if left stick, shoulder, + pad, c pad -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0222 ;A1=0222: +-left, L, c-left -BNEZ V0,7F0A57AC ;branch if pressed -NOP -JAL 7F0A4FB0 ;V0=TRUE if pressed left on control stick -NOP -BEQ V0,R0,7F0A57F4 ;branch if not pressed -//7F0A57AC: left pressed... -LUI T6,8004 -LW T6,09A8 (T6) ;T6=800409A8: option selected register -ADDIU T7,R0,0003 -LUI AT,8004 -BNEL T6,R0,7F0A57F8 ;branch if editting selection -OR A0,R0,R0 -JAL 7F0AB498 ;0->8004099C: option page setting selected -SW T7,0994 (AT) ;3->80040994: solo watch page 3: options -JAL 7F0A5210 ;switch solo watch page -NOP -LUI AT,8006 -LWC1 F12,8474 (AT) ;F12=80058474: zoom for objective/briefing->options watch menu -LUI AT,4170 -MTC1 AT,F14 ;F14=transition time [41700000] -JAL 7F07E400 ;trigger watch zoom -LUI AT,8005 -BEQ R0,R0,7F0A5854 -SWC1 F12,507C (AT) ;F12=8005507C: copy watch zoom final size to zoom factor register -//7F0A57F4: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0111 ;A1=0111: +-right, R, c-right -BNEZ V0,7F0A5814 ;branch if pressed -NOP -JAL 7F0A4FEC ;V0=TRUE if pressed right on control stick -NOP -BEQ V0,R0,7F0A5850 ;branch if not pressed -//7F0A5814: -LUI T8,8004 -LW T8,09A8 (T8) ;T8=800409A8: option selected register -LUI AT,8004 -BNEL T8,R0,7F0A5854 ;branch if editting selection -NOP -JAL 7F0AB4A4 ;reset solo watch main page selection -SW R0,0994 (AT) ;0->80040994: solo watch page 0: main -JAL 7F0A5210 ;switch solo watch page -NOP -LUI AT,4170 -MTC1 AT,F14 ;F14=transition time [41700000] -LUI AT,8006 -JAL 7F07E400 ;trigger watch zoom -LWC1 F12,8478 (AT) ;F12=80058478: zoom for objective/briefing->main watch menu -JAL 7F07E420 ;copy final size to zoom register -//7F0A5850: return -NOP -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A6A80 - solo watch menu interface.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A6A80 - solo watch menu interface.txt deleted file mode 100644 index 6f20df2..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0A6A80 - solo watch menu interface.txt +++ /dev/null @@ -1,356 +0,0 @@ -7F0A6A80 DB5B0 solo watch menu interface - note: this file reflects NSNA binary... -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -OR A0,R0,R0 ;A0=0: player1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,1000 ;A1=Start button -BEQ V0,R0,7F0A6AA4 ;branch if start not pressed -NOP -JAL 7F07F860 ;1->BONDdata+1D0: -NOP -//7F0A6AA4: reset control stick press registers -LUI T6,8004 -LW T6,0ADC (T6) ;T6=80040ADC: TRUE if l/r stick enabled -BNEZ T6,7F0A6B4C ;branch if stick enabled -NOP -JAL 7000C0EC ;V0=current position left/right on player A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,FFF6 ;TRUE if left -BNEZ AT,7F0A6AE8 ;branch if pressing left -NOP -JAL 7000C0EC ;V0=current position left/right on player A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,000B ;TRUE if not right -BEQ AT,R0,7F0A6AE8 ;branch if pressing right -ADDIU T7,R0,0001 -LUI AT,8004 -BEQ R0,R0,7F0A6B4C -SW T7,0ADC (AT) ;1->80040ADC: re-enable stick -//7F0A6AE8: -JAL 7000C0EC ;V0=current position left/right on player A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,000B ;TRUE if not right -BEQ AT,R0,7F0A6B1C ;branch if pressing right -NOP -JAL 7000C174 ;V0= previous position left<->right of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,000B ;TRUE if not right -BNEZ AT,7F0A6B1C ;branch if wasn't right -ADDIU T8,R0,0001 -LUI AT,8004 -BEQ R0,R0,7F0A6B4C -SW T8,0ADC (AT) ;1->80040ADC: re-enable stick -//7F0A6B1C: -JAL 7000C0EC ;V0=current position left/right on player A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,FFF6 ;TRUE if left -BNEZ AT,7F0A6B4C -NOP -JAL 7000C174 ;V0= previous position left<->right of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,FFF6 ;TRUE if was left -BEQ AT,R0,7F0A6B4C ;branch if wasn't left -ADDIU T9,R0,0001 -LUI AT,8004 -SW T9,0ADC (AT) ;1->80040ADC: re-enable stick -//7F0A6B4C: -LUI T0,8004 -LW T0,0AE0 (T0) ;T0=80040AE0: TRUE if up/down on control stick enabled -BNEZ T0,7F0A6BF4 ;branch if enabled -NOP -JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,FFF6 ;TRUE if down pressed -BNEZ AT,7F0A6B90 ;branch if down pressed -NOP -JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,000B ;TRUE if up wasn't pressed -BEQ AT,R0,7F0A6B90 ;branch if up pressed -ADDIU T1,R0,0001 -LUI AT,8004 -BEQ R0,R0,7F0A6BF4 -SW T1,0AE0 (AT) ;1->80040AE0: re-enable stick -//7F0A6B90: -JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,000B ;TRUE if up wasn't pressed -BEQ AT,R0,7F0A6BC4 ;branch if up pressed -NOP -JAL 7000C284 ;V0= previous position up<->down of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,000B ;TRUE if up wasn't pressed -BNEZ AT,7F0A6BC4 ;branch if up wasn't pressed -ADDIU T2,R0,0001 -LUI AT,8004 -BEQ R0,R0,7F0A6BF4 -SW T2,0AE0 (AT) ;1->80040AE0: re-enable stick -//7F0A6BC4: -JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,FFF6 ;TRUE if down pressed -BNEZ AT,7F0A6BF4 ;branch if down pressed -NOP -JAL 7000C284 ;V0= previous position up<->down of controller A0's control stick -OR A0,R0,R0 ;A0=player1 -SLTI AT,V0,FFF6 ;TRUE if down pressed -BEQ AT,R0,7F0A6BF4 ;branch if down wasn't pressed -ADDIU T3,R0,0001 -LUI AT,8004 -SW T3,0AE0 (AT) ;1->80040AE0: re-enable stick -//7F0A6BF4: tick down blink/fade timer for Mission Status -LUI V1,8004 -ADDIU V1,V1,0AF8 ;V1=80040AF8 -LW V0,0000 (V1) ;V0=80040AF8: timer -BGEZ V0,7F0A6C20 ;branch if timer hasn't run down -ADDIU T6,V0,FFFF ;T6=V0-1: timer-- -LUI A0,8004 -ADDIU A0,A0,0AF4 ;A0=80040AF4 -LW T4,0000 (A0) ;T4=80040AF4: font colour -LUI AT,FFF0 -ADDU T5,T4,AT ;T5=colour - FFF00000 -SW T5,0000 (A0) ;80040AF4-=FFF00000: colour fade -//7F0A6C20: detect if faded too far -LUI A0,8004 -ADDIU A0,A0,0AF4 -LW T7,0000 (A0) ;T7=80040AF4: colour? -LUI AT,005F -ORI AT,AT,00A1 ;AT=005F00A1 -SLTU AT,T7,AT ;TRUE if colour < 005F00A1 -BEQ AT,R0,7F0A6C54 ;branch if false -SW T6,0000 (V1) ;80040AF8-=1 -//7F0A6C40: restore to green -LUI T8,00FF -ORI T8,T8,00A0 ;T8=00FF00A0: green -ADDIU T9,R0,000F -SW T8,0000 (A0) -SW T9,0000 (V1) ;80040AF8= 0xF -//7F0A6C54: tick down blink/fade timer for objectives -LUI V1,8004 -ADDIU V1,V1,0B00 ;V1=80040B00 -LW V0,0000 (V1) ;V0=80040B00: timer -LUI A0,8004 -ADDIU A0,A0,0AFC ;A0=80040AFC -BGEZ V0,7F0A6C7C ;branch if time left -LUI T6,8005 -LW T0,0000 (A0) ;T0=80040AFC: colour -ADDIU T1,T0,FFF0 -SW T1,0000 (A0) ;FFF00000->colour -//7F0A6C7C: check if ticked over -LUI A0,8004 -ADDIU A0,A0,0AFC ;A0=80040AFC -LW T3,0000 (A0) ;T3=80040AFC: bg colour -ADDIU T2,V0,FFFF -SW T2,0000 (V1) ;T2=timer-- -SLTIU AT,T3,0060 ;TRUE if timer < 60 -BEQ AT,R0,7F0A6CA8 ;branch if roll over -//7F0A6C98: restore colour and timer -ADDIU T4,R0,00FF -ADDIU T5,R0,000F -SW T4,0000 (A0) ;80040AFC=000000FF: black -SW T5,0000 (V1) ;80040B00= 0xF: timer -//7F0A6CA8: -LW T6,8498 (T6) ;T6=80048498: TRUE advances game clock while player is alive -LUI AT,8004 -LWC1 F4,0B1C (AT) ;F4=80040B1C: -MTC1 T6,F6 -LUI AT,8006 -LWC1 F16,84C8 (AT) ;F16=800584C8: -CVT.S.W F8,F6 ;F8=1.0 when advancing time -LUI AT,43B4 -MTC1 AT,F6 ;F6= [43B40000] -LUI V0,8004 -ADDIU V0,V0,0B14 ;V0=80040B14 -MUL.S F10,F4,F8 -LWC1 F8,0000 (V0) ;F8=80040B14: -MUL.S F18,F10,F16 -DIV.S F4,F18,F6 -ADD.S F10,F8,F4 -SWC1 F10,0000 (V0) ;F10->80040B14: -JAL 7F0A6A2C ;correct for full rotation -LWC1 F12,0000 (V0) ;F12=80040B14: -LUI V0,8004 -ADDIU V0,V0,0B14 ;V0=80040B14 -SWC1 F0,0000 (V0) ;F0->80040B14: -//7F0A6D00: trigger random static -LUI T7,8004 -LW T7,0B0C (T7) ;T7=80040B0C: -SLL T8,T7,0x10 -JAL 7000A450 ;V0=random# -SW T8,001C (SP) -LW T9,001C (SP) -SLTU AT,T9,V0 -BEQ AT,R0,7F0A6D2C ;branch if # > rand: don't set static -NOP -JAL 7F0A51D8 ;sets watch static effect [80040B04 |= 0x80] -NOP -//7F0A6D2C: -LUI A0,8004 -ADDIU A0,A0,0B04 ;A0=80040B04 -LW V1,0000 (A0) ;V1=80040B04: watch effect flag registers -SLTI AT,V1,00E0 -BEQL AT,R0,7F0A6D68 ;branch if watch static, etc not set -SLTI AT,V1,00E1 -JAL 7000A450 ;V0=random -NOP -LUI A0,8004 -ADDIU A0,A0,0B04 ;A0=80040B04 -LW T0,0000 (A0) ;T0=80040B04: watch effect flag registers -SRL T1,V0,0x1E ;T1=V0 / 40000000 -ADDU V1,T0,T1 ;V1=watch flags + 0-3 -SW V1,0000 (A0) ;update watch effect flags -//7F0A6D64: mostly to catch 0x3 overflows from above -SLTI AT,V1,00E1 ;TRUE if E1 or more flags set -BNEZ AT,7F0A6D78 ;branch if E0 or fewer flags set -ADDIU T0,R0,0156 -ADDIU V1,R0,00E0 ;V1=E0 -SW V1,0000 (A0) ;reset flags to E0 -//7F0A6D78: -SUBU T4,R0,V1 ;T4= !flags -SLL T5,T4,0x2 ;T5= !flags * 4 -LUI A0,8004 -ADDIU T6,T5,0380 ;T6= !flags * 4 + 380 -LUI AT,8004 -ADDIU A0,A0,0B40 ;A0=80040B40 -SW T6,0B08 (AT) ;80040B08= !flags * 4 + 380: -LW T7,0000 (A0) ;T7=80040B40: -ADDIU V0,T7,FFFC ;V0=T7-4: -SLTI AT,V0,0157 -BNEZ AT,7F0A6DB0 ;branch if less than 157 -SW V0,0000 (A0) ;80040B40-=4 -ADDIU V0,R0,FEAA -SW V0,0000 (A0) ;80040B40-=156: 0, or -156 -//7F0A6DB0: reset if -156 -SLTI AT,V0,FEAA -BEQ AT,R0,7F0A6DC0 ;branch if not < -156 -LUI V0,8004 -SW T0,0000 (A0) ;80040B40=156: -//7F0A6DC0: -ADDIU V0,V0,0B44 ;V0=80040B44 -LH T1,0000 (V0) ;T1=80040B44: -LUI T5,8004 -ADDIU T2,T1,0001 -SH T2,0000 (V0) -LH T3,0000 (V0) -ANDI T4,T3,0001 -SH T4,0000 (V0) ;80040B44^=1 -//7F0A6DE0: -LW T5,0994 (T5) ;T5=80040994: page -SLTIU AT,T5,0005 -BEQ AT,R0,7F0A6ED8 ;branch if not pages 0-4: invalid -SLL T5,T5,0x1 ;T5=page#->offset -LUI AT,7F0A -ADDU T5,AT,T5 -LH T5,6EA0 (T5) ;T5=7F0A6EA0+offset: TLB offset note, this has been hacked in! -ADDU T5,AT,T5 ;T5=7F0A0000+offset: TLB pointer for page handler -JR T5 -NOP -//7F0A6E08: page 0: main -JAL 7F0A526C ;page advance f/ main page of watch menu -NOP -BEQ R0,R0,7F0A6ED8 -NOP -//7F0A6E18: page 2: controls -LUI V0,8004 -LW V0,0998 (V0) ;V0=80040998: highlighted controls page selection -BNEZ V0,7F0A6E38 ;branch if control type not selected -ADDIU AT,R0,0001 -JAL 7F0A5860 ;advance up/down on "controls::control style" submenu of watch menu -NOP -BEQ R0,R0,7F0A6E48 -NOP -//7F0A6E38: controller selected -BNE AT,V0,7F0A6E48 ;branch if controller not selected -NOP -JAL 7F0A5900 ;advance up/down on "controls::controller" submenu of watch menu -NOP -//7F0A6E48: advance page -JAL 7F0A55C4 ;page advance f/ control page of watch menu -NOP -BEQ R0,R0,7F0A6ED8 -NOP -NOP -NOP -//7F0A6E60: page 3: options -LUI T6,8004 -LW T6,099C (T6) ;T6=8004099C: highlighted options page selection -SLTIU AT,T6,000A -BEQ AT,R0,7F0A6E90 ;skip if not selection 0-9 -LUI V0,7F0A -ADDIU V0,V0,5998 ;V0=7F0A5998: advance up/down on selected "options" submenu of watch menu -BEQL AT,T6,7F0A6E80 -ADDIU V0,V0,015C ;V0=7F0A5AF4: advance up/down on "options::effects" submenu of watch menu -BEQL R0,T6,7F0A6E88 -ADDIU V0,V0,00CC ;V0=7F0A5A64: advance up/down on "options::music" submenu of watch menu -JALR RA,V0 -NOP -//7F0A6E90: -JAL 7F0A56A4 ;page advance f/ options page of watch menu -NOP -BEQ R0,R0,7F0A6ED8 -NOP -//7F0A6EA0: TLB offsets for each page NSNA hack -6E08 6ED0 -6E18 6E60 -6EC0 0000 -NOP -NOP -NOP -NOP -NOP -//7F0A6EC0: page 4: briefing -JAL 7F0A5784 ;page advance f/ objectives/briefing page of watch menu -NOP -BEQ R0,R0,7F0A6EDC -LW RA,0014 (SP) -//7F0A6ED0: page 1: inventory -JAL 7F0A53D8 ;page advance f/ inventory page of watch menu -NOP -//7F0A6ED8: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - - -+_+ - -Just a note, since this uses a float from above and happens to do something odd with it... -//7F0A8954: -LUI AT,8004 -LWC1 F18,09BC (AT) ;F18=800409BC: position -LUI T6,8004 -LW T6,09B8 (T6) ;T6=800409B8: highlighted inventory selection -CVT.D.S F4,F18 -LUI A1,8005 -LUI A2,8004 -LUI A3,8004 -SW V0,004C (SP) -LW A3,09B4 (A3) ;A3=800409B4: final scroll position -LW A2,09B0 (A2) ;A2=800409B0: current scroll position -ADDIU A1,A1,7768 ;A1=80057768: p->"%d, %d\n%d %f\n" -SDC1 F4,0018 (SP) ;SP+18= position -ADDIU A0,SP,0060 ;A0=SP+60: text buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,...) -SW T6,0010 (SP) ;SP+10= highlighted inventory selection -//7F0A8994: -JAL 7F0ACD98 -LW A0,0928 (SP) -SW V0,0928 (SP) -ADDIU A0,SP,0050 ;A0=@height -ADDIU A1,SP,0054 ;A1=@width -ADDIU A2,SP,0060 ;A2=SP+60: p->string -LW A3,0058 (SP) ;A3=SP+58: 2nd font table -SW S0,0010 (SP) ;SP+10=S0: 1st font table -JAL 7F0AE98C ;proportions of string A2 -SW R0,0014 (SP) ;SP+14=NULL -//7F0A89BC: -LUI T7,8004 -LW T7,09C0 (T7) ;T7=800409C0: 0 scrolls to entry -LUI T8,8005 -ADDIU A0,SP,0050 -BEQ T7,R0,7F0A8AFC ;skip if not displaying item text -ADDIU A1,SP,0054 -//7F0A89D4: -nothing else is related, so must have NOPed the display routine \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0AC168 - Display Watch Page 4 Text - Briefings and Objective List.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0AC168 - Display Watch Page 4 Text - Briefings and Objective List.txt deleted file mode 100644 index a92afb9..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0AC168 - Display Watch Page 4 Text - Briefings and Objective List.txt +++ /dev/null @@ -1,593 +0,0 @@ -7F0AC168 E0C98 Display Solo Watch Menu Briefings and Objective List - accepts: A0=p->DL, A1= -ADDIU SP,SP,F218 -SW RA,005C (SP) -SW S8,0058 (SP) -SW S7,0054 (SP) -SW S6,0050 (SP) -SW S5,004C (SP) -SW S4,0048 (SP) -SW S3,0044 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -JAL 7F0A714C -OR A2,R0,R0 ;A2=0 -JAL 7F07E5FC ;V0=TRUE if watch page transition running -SW V0,0DE8 (SP) ;SP+DE8=V0: p->DL -ADDIU AT,R0,0001 -BEQ V0,AT,7F0AC9F4 ;return if watch transition running -ADDIU T6,SP,0DAC ;T6=SP+DAC: p->buffer -LUI T7,8004 -ADDIU T7,T7,0DFC ;T7=80040DFC: source -ADDIU T9,T7,003C ;T9=80040E38: endpoint -//7F0AC1BC: copy in first table of long values -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T7) -SW AT,FFF8 (T6) -LW AT,FFFC (T7) -BNE T7,T9,7F0AC1BC ;loop to copy 0x3C from source to buffer -SW AT,FFFC (T6) -//7F0AC1E0: copy in second table of long values -LUI T1,8004 -ADDIU T1,T1,0E38 ;T1=80040E38: next source -LW AT,0000 (T1) -LW T3,0004 (T1) -ADDIU T0,SP,0DA4 ;T0=SP+DA4: p->buffer (placing second block before first) -LUI T5,8004 -ADDIU T5,T5,0E40 ;T5=80040E40: next part of source -ADDIU T9,T5,003C ;T9=80040E7C: source end -ADDIU T4,SP,0D68 ;T4=SP+D68: p->buffer (placing third block before previous) -SW AT,0000 (T0) -SW T3,0004 (T0) -//7F0AC20C: copy in third table of long values -LW AT,0000 (T5) -ADDIU T5,T5,000C -ADDIU T4,T4,000C -SW AT,FFF4 (T4) -LW AT,FFF8 (T5) -SW AT,FFF8 (T4) -LW AT,FFFC (T5) -BNE T5,T9,7F0AC20C ;loop to copy 0x3C from source to buffer -SW AT,FFFC (T4) -//7F0AC230: -LUI T7,8004 -LUI T6,8004 -LW T7,0EAC (T7) ;T7=80040EAC: p->1st font table -LW T6,0EB0 (T6) ;T6=80040EB0: p->2nd font table -LUI T0,8005 -ADDIU T0,T0,77C0 ;T0=800577C0: start source -SW R0,0D54 (SP) ;SP+D54=0: height -SW R0,0D50 (SP) ;SP+D50=0: width -ADDIU T8,T0,0BB8 ;T8=80058378: end source -ADDIU T2,SP,0190 ;T2=SP+190: p->buffer -SW T7,0D4C (SP) ;SP+D4C= p->1st font table -SW T6,0D48 (SP) ;SP+D48= p->2nd font table -//7F0AC260: copy huge buffer needlessly -LW AT,0000 (T0) -ADDIU T0,T0,000C -ADDIU T2,T2,000C -SW AT,FFF4 (T2) -LW AT,FFF8 (T0) -SW AT,FFF8 (T2) -LW AT,FFFC (T0) -BNE T0,T8,7F0AC260 ;loop to copy 0x3C from source to buffer -SW AT,FFFC (T2) -//7F0AC284: load all possible text -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC28 ;A0=AC28: "complete\n" -SW V0,016C (SP) ;SP+16C= p->"complete\n" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC29 ;A0=AC29: "incomplete\n" -SW V0,0168 (SP) ;SP+168= p->"incomplete\n" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC37 ;A0=AC37: "failed\n" -SW V0,0164 (SP) ;SP+164= p->"failed\n" -JAL 7F057104 ;V0=p->text for watch briefing page A0 (0-5) -OR A0,R0,R0 ;A0=page 0: title of stage -OR S0,V0,R0 ;S0=V0: p->string -JAL 7F0ACD98 -LW A0,0DE8 (SP) ;A0=p->DL -LW T9,0D4C (SP) ;T9= p->1st font table -SW V0,0DE8 (SP) ;SP+DE8= p->DL -ADDIU A0,SP,0D54 ;A0= @height -ADDIU A1,SP,0D50 ;A1= @width -OR A2,S0,R0 ;A2=S0: p->string -LW A3,0D48 (SP) ;A3= p->2nd font table -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T9,0010 (SP) ;SP+10= p->1st font table -LW V0,0D50 (SP) ;V0=width -ADDIU T5,R0,00AA -LW T3,0D54 (SP) ;T3=height -SUBU V1,T5,V0 ;V1=AA-width: -BGEZ V1,7F0AC300 -SRA T4,V1,0x1 ;T4= -ADDIU AT,V1,0001 -SRA T4,AT,0x1 -//7F0AC300: draw box behind text -ADDIU V1,T4,004B ;V1=T4+4B: -ADDIU T7,R0,001E ;T7=1E: uly -ADDIU T8,SP,0D58 -ADDU T6,V1,V0 ;T6=V1+V0: ulx+ -ADDIU T1,T3,001E ;T1=T3+1E: height+uly -SW T7,0D60 (SP) ;SP+D60=T7: uly (1E) -SW T6,0D5C (SP) ;SP+D5C=T6: lrx -SW T1,0D58 (SP) ;SP+D58=T1: lry -SW T8,0010 (SP) ;SP+10= lry -SW V1,0D64 (SP) ;SP+D64=V1: ulx -LW A0,0DE8 (SP) ;A0= p->DL -ADDIU A1,SP,0D64 ;A1=ulx -ADDIU A2,SP,0D60 ;A2=uly -JAL 7F0ACF4C ;draw black box -ADDIU A3,SP,0D5C ;A3=lrx -//7F0AC33C: -LW T0,0D48 (SP) ;T0= p->2nd font table -LW T2,0D4C (SP) ;T2= p->1st font table -LW T5,0D50 (SP) ;T5=width -LW T4,0D54 (SP) ;T4=height -LUI T9,A0FF -ORI T9,T9,A0F0 ;T9=A0FFA0F0: lt.green -SW T9,0018 (SP) -OR A0,V0,R0 -ADDIU A1,SP,0D64 ;A1=@width -ADDIU A2,SP,0D60 ;A2=@height -OR A3,S0,R0 ;A3=S0: p->text -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0010 (SP) ;SP+10= p->2nd font table -SW T2,0014 (SP) ;SP+14= p->1st font table -SW T5,001C (SP) -JAL 7F0ADABC ;display monotone text -SW T4,0020 (SP) -//7F0AC384: fill page -LUI T7,8004 -LW T7,09A0 (T7) ;T7=800409A0: briefing page selection -ADDIU V1,R0,0041 -SW V0,0DE8 (SP) ;SP+DE8= p->DL -SLTIU AT,T7,0005 -BEQ AT,R0,7F0AC8EC ;branch if isn't a valid page -SW V1,0D64 (SP) ;SP+D64= width (41) -SLL T7,T7,0x2 -LUI AT,8006 -ADDU AT,AT,T7 -LW T7,8570 (AT) ;T7=80058570+offset: TLB handler for page -JR T7 -NOP -//7F0AC3B8: solo watch briefing page 0: Background -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC38 ;A0=AC38: "2. background\n" -ADDIU A0,SP,0170 ;A0=SP+170: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,V0,R0 ;A1=p->source -JAL 7F057104 ;V0=p->text for watch briefing page A0 (0-5) -ADDIU A0,R0,0001 ;A0=page 1: background -LW T6,0D4C (SP) ;T6= p->1st font table -ADDIU A0,R0,00D2 ;A0=0D2: max width -OR A1,V0,R0 ;A1=V0: p->text -ADDIU A2,SP,0190 ;A2=SP+190: p->buffer -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AEB64 ;A2=text A1 fit to width A0 -SW T6,0010 (SP) ;SP+10= p->1st font table -JAL 7F0A6618 ;advance up/down from "background" submenu of watch menu - tests +/c-up, then +/c-down -NOP -BEQ R0,R0,7F0AC8F0 -LW T2,0D4C (SP) ;T2= p->1st font table -//7F0AC400: solo watch briefing page 1: M Briefing -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC39 ;A0=AC39: "3. M briefing\n" -ADDIU A0,SP,0170 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,V0,R0 -JAL 7F057104 ;V0=p->text for watch briefing page A0 (0-5) -ADDIU A0,R0,0002 ;A0=page 2: M breifing -LW T3,0D4C (SP) ;T3= p->1st font table -ADDIU A0,R0,00D2 ;A0=0D2: max width -OR A1,V0,R0 ;A1=V0: p->text -ADDIU A2,SP,0190 ;A2=SP+190: p->buffer -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AEB64 ;A2=text A1 fit to width A0 -SW T3,0010 (SP) ;SP+10= p->1st font table -JAL 7F0A66A0 ;advance up/down from "M briefing" submenu of watch menu - tests +/c-up, then +/c-down -NOP -BEQ R0,R0,7F0AC8F0 -LW T2,0D4C (SP) ;T2= p->1st font table -//7F0AC448: solo watch briefing page 2: Q Briefing -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC3A ;A0=AC3A: "4. Q branch\n" -ADDIU A0,SP,0170 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,V0,R0 -JAL 7F057104 ;V0=p->text for watch briefing page A0 (0-5) -ADDIU A0,R0,0003 ;A0=page 3: Q Briefing -LW T1,0D4C (SP) ;T1= p->1st font table -ADDIU A0,R0,00D2 ;A0=0D2: max width -OR A1,V0,R0 ;A1=V0: p->text -ADDIU A2,SP,0190 ;A2=SP+190: p->buffer -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AEB64 ;A2=text A1 fit to width A0 -SW T1,0010 (SP) ;SP+10= p->1st font table -JAL 7F0A672C ;advance up/down from "Q branch" submenu of watch menu - tests +/c-up, then +/c-down -NOP -BEQ R0,R0,7F0AC8F0 -LW T2,0D4C (SP) ;T2= p->1st font table -//7F0AC490: solo watch briefing page 3: Monneypenny -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC3B ;A0=AC3B: "5. moneypenny\n" -ADDIU A0,SP,0170 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,V0,R0 -JAL 7F057104 ;V0=p->text for watch briefing page A0 (0-5) -ADDIU A0,R0,0004 ;A0=page 4: Monneypenny -LW T8,0D4C (SP) ;T8= p->1st font table -ADDIU A0,R0,00D2 ;A0=0D2: max width -OR A1,V0,R0 ;A1=V0: p->text -ADDIU A2,SP,0190 ;A2=SP+190: p->buffer -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AEB64 ;A2=text A1 fit to width A0 -SW T8,0010 (SP) ;SP+10= p->1st font table -JAL 7F0A67BC ;advance up/down from "Moneypenny" submenu of watch menu - tests +/c-up, then +/c-down -NOP -BEQ R0,R0,7F0AC8F0 -LW T2,0D4C (SP) ;T2= p->1st font table -//7F0AC4D8: solo watch briefing page 4: objectives -LUI T0,8006 -ADDIU S1,SP,0088 ;S1=SP+88: p->buffer -ADDIU T0,T0,8378 ;T0=80058378: start source -ADDIU T5,T0,00C0 ;T5=80058438: end source -OR T4,S1,R0 ;T4=S1: p->buffer -//7F0AC4EC: copy source to buffer -LW AT,0000 (T0) -ADDIU T0,T0,000C -ADDIU T4,T4,000C -SW AT,FFF4 (T4) -LW AT,FFF8 (T0) -SW AT,FFF8 (T4) -LW AT,FFFC (T0) -BNE T0,T5,7F0AC4EC ;loop to copy source to buffer -SW AT,FFFC (T4) -//7F0AC510: -LW AT,0000 (T0) -LUI T7,8005 -ADDIU S2,R0,0001 ;S2=1 -SW AT,0000 (T4) -LW T5,0004 (T0) -OR S3,R0,R0 ;S3=0 -ADDIU A0,R0,0005 ;A0=5 if english-ish -SW T5,0004 (T4) -LB T7,84D0 (T7) ;T7=800484D0: language -SW R0,0074 (SP) ;SP+74=0: -BLEZ T7,7F0AC548 ;branch if english-ish -NOP -BEQ R0,R0,7F0AC548 -ADDIU A0,R0,0001 ;A1=1 if japanese-ish... -//7F0AC548: -JAL 7F0ACBA0 A0-> overlap correction -NOP -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,AC3C ;A0=AC3C: "1. mission objectives\n" -ADDIU A0,SP,0170 ;A0=SP+170: p->buffer -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A1,V0,R0 ;A1=V0: p->text -JAL 7F0571A8 ;V0=#objectives -OR S8,R0,R0 ;S8=0 -BLEZ V0,7F0AC8DC ;kill if not a valid # objectives -LUI S7,8006 -LUI S6,8006 -LUI S5,8006 -LUI S4,8006 -ADDIU S4,S4,8440 ;S4=80058440: " \n" -ADDIU S5,S5,8444 ;S5=80058444: " \n\n" -ADDIU S6,S6,8450 ;S6=80058450: " \n" -ADDIU S7,S7,8454 ;S7=80058454: " \n\n" -JAL 7F057204 ;V0= difficulty for objective# A0 -OR A0,S8,R0 ;A0=S8: objective# (count) -JAL 7F0BFC10 ;V0=difficulty -SW V0,0068 (SP) ;SP+68= min. difficulty -LW A0,0068 (SP) ;A0=SP+68: min.difficulty -SLT AT,V0,A0 ;TRUE if difficulty < min.difficulty -BNEZ AT,7F0AC8C8 ;skip if too difficult -OR A0,S8,R0 ;A0=S8: objective# -JAL 7F0571B8 ;V0=p->text for objective# A0 -OR S0,R0,R0 ;S0=0: -SW V0,0078 (SP) ;SP+78=p->text -BLEZ S2,7F0AC5E0 -SB R0,0088 (SP) -OR A0,S1,R0 ;A0=p->buffer -//7F0AC5C8: -JAL 7000A7FC ;strcat(A0,A1) -OR A1,S4,R0 ;A1=S4: " \n" -ADDIU S0,S0,0001 ;S0++ -BNEL S0,S2,7F0AC5C8 -OR A0,S1,R0 ;A0=p->buffer -OR S0,R0,R0 -//7F0AC5E0: -BLEZ S3,7F0AC600 -OR A0,S1,R0 ;A0=p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,S5,R0 ;A1=S5: " \n\n" -ADDIU S0,S0,0001 ;S0++ -BNEL S0,S3,7F0AC5E8 -OR A0,S1,R0 ;A0=p->buffer -OR S0,R0,R0 ;S0=0 -//7F0AC600: -JAL 7001387C ;V0=strlen(A0) -OR A0,S1,R0 ;A0=p->buffer -LW A2,0074 (SP) ;A2=displayed objective count -ADDU A0,V0,S1 ;A0=strlen+buffer: p->end of string -LUI A1,8006 -SW A0,006C (SP) ;SP+6C= p->end of string -ADDIU A1,A1,8448 ;A1=80058448: "%c: " -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A2,A2,0061 ;A2+=61: count+"a" -OR A0,S1,R0 ;A0=S1: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -LW A1,0078 (SP) ;A1=SP+78: p->text for objective -LUI T6,8005 -LB T6,84D0 (T6) ;T6=800484D0: language -LW T3,0D60 (SP) ;T3=height -ADDIU A0,R0,0005 -BLEZ T6,7F0AC650 ;branch if english-ish -ADDIU T8,R0,003C -BEQ R0,R0,7F0AC650 -ADDIU A0,R0,0001 -//7F0AC650: -ADDU T1,A0,T3 ;T1=height+yoffset -SW T1,0154 (SP) ;SP+154= height -JAL 7000441C ;V0= text clip width -SW T8,0150 (SP) ;SP+150= width -JAL 7000442C ;V0= text clip height -SH V0,0064 (SP) ;SP+64= text clip width -LW T9,0D48 (SP) ;T9= p->2nd font table -LW T2,0D4C (SP) ;T2= p->1st font table -LH T0,0064 (SP) ;T0= text clip width -LUI T5,00FF -ORI T5,T5,00B0 ;T5=00FF00B0 green -ADDIU T4,R0,000A -SW T4,0028 (SP) ;SP+28= x offset: 0xA -SW T5,0018 (SP) ;SP+18= colour -LW A0,0DE8 (SP) ;A0=p->DL -ADDIU A1,SP,0150 ;A1= @xpos -ADDIU A2,SP,0154 ;A2= @ypos -OR A3,S1,R0 ;A3=p->buffer -SW V0,0020 (SP) ;SP+20= text clip height -SW R0,0024 (SP) ;SP+24= y offset: 0 -SW T9,0010 (SP) ;SP+10= p->2nd font table -SW T2,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T0,001C (SP) ;SP+1C= text clip width -SW V0,0DE8 (SP) ;SP+DE8= p->DL -// -JAL 7F0AC0E8 ;#newlines in string A0 -LW A0,006C (SP) ;A0= p->string -ADDU S2,S2,V0 ;S2+=#lines -JAL 7F0AC120 ;V0= p->string following final newline -LW A0,006C (SP) ;A0= p->string -LW T7,0D4C (SP) ;T7= p->1st font table -ADDIU T6,R0,000A -SW T6,0014 (SP) ;SP+14= x offset: 0xA -ADDIU A0,SP,0D54 ;A0=@height -ADDIU A1,SP,0D50 ;A1=@width -OR A2,V0,R0 ;A2=V0: p->string -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AE98C ;proportions of string A2 -SW T7,0010 (SP) ;SP+10= p->1st font table -JAL 7000441C ;V0= text clip width -NOP -LW T1,0D50 (SP) ;T1=width -BGEZ V0,7F0AC708 -SRA T3,V0,0x1 -ADDIU AT,V0,0001 -SRA T3,AT,0x1 -ADDIU T8,T1,003C -SLT AT,T8,T3 -BEQ AT,R0,7F0AC71C -NOP -ADDIU S2,S2,FFFF -BLEZ S2,7F0AC740 -SB R0,0088 (SP) -OR A0,S1,R0 ;A0=S1: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,S6,R0 ;A1=S6: " \n" -ADDIU S0,S0,0001 -BNEL S0,S2,7F0AC728 -OR A0,S1,R0 ;A0=S1: p->buffer -OR S0,R0,R0 -BLEZ S3,7F0AC75C -OR A0,S1,R0 ;A0=S1: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,S7,R0 ;A1=S7: " \n\n" -ADDIU S0,S0,0001 -BNEL S0,S3,7F0AC748 -OR A0,S1,R0 ;A0=S1: p->buffer -JAL 7F057238 ;V0=status of objective A0 -OR A0,S8,R0 ;A0=S8: objective# -BEQ V0,R0,7F0AC78C ;branch if objective incomplete -OR A0,S1,R0 ;A0=S1: p->buffer -ADDIU AT,R0,0001 -BEQ V0,AT,7F0AC7B4 ;branch if objective complete -OR A0,S1,R0 ;A0=S1: p->buffer -ADDIU AT,R0,0002 -BEQ V0,AT,7F0AC7D0 ;branch if objective failed -OR A0,S1,R0 ;A0=S1: p->buffer -BEQ R0,R0,7F0AC804 -LW T1,0D4C (SP) ;T1= p->1st font table -//7F0AC78C: objective incomplete -JAL 7000A7FC ;strcat(A0,A1) -LW A1,0168 (SP) ;A1=SP+168: "incomplete\n" -LUI T9,8004 -LW T9,0AFC (T9) ;T9=80040AFC: solo watch objective colour -LUI AT,4000 -ORI AT,AT,40FF ;AT=400040FF -SLL T2,T9,0x10 ;T2=colour * 0x10000: degree of green component -OR T5,T2,AT ;T5=final colour -BEQ R0,R0,7F0AC800 -SW T5,0084 (SP) ;SP+84= objective colour -//7F0AC7B4: objective completed -LUI T0,A0FF -ORI T0,T0,A0F0 ;T0=A0FFA0F0: lt.green -SW T0,0084 (SP) ;SP+84= objective colour -JAL 7000A7FC ;strcat(A0,A1) -LW A1,016C (SP) ;A1=SP+16C: "complete\n" -BEQ R0,R0,7F0AC804 -LW T1,0D4C (SP) ;T1= p->1st font table -//7F0AC7D0: objective failed -JAL 7000A7FC ;strcat(A0,A1) -LW A1,0164 (SP) ;A1=SP+164: "failed\n" -LUI T4,8005 -LB T4,84D0 (T4) ;T4=800484D0: language -LUI T6,00FF -LUI T7,A0FF -BLEZ T4,7F0AC7FC ;branch if english-ish -ORI T6,T6,00B0 ;T6=00FF00B0: green -ORI T7,T7,A0F0 ;T7=A0FFA0FF: lt.green -BEQ R0,R0,7F0AC800 -SW T7,0084 (SP) ;SP+84= objective colour -//7F0AC7FC: -SW T6,0084 (SP) ;SP+84= objective colour -//7F0AC800: -LW T1,0D4C (SP) ;T1= p->1st font table -ADDIU T3,R0,000A -SW T3,0014 (SP) -ADDIU A0,SP,0D54 ;A0=SP+D54: @height -ADDIU A1,SP,0D50 ;A1=SP+D50: @width -OR A2,S1,R0 ;A2=S1: p->string -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AE98C ;proportions of string A2 -SW T1,0010 (SP) ;SP+10= p->1st font table -LUI V0,8005 -LB V0,84D0 (V0) ;V0=800484D0: language -LW T8,0D60 (SP) ;T8=SP+D60: -ADDIU A0,R0,0005 -BLEZ V0,7F0AC844 -ADDIU T4,R0,00AF -BEQ R0,R0,7F0AC844 -ADDIU A0,R0,0001 -ADDU T9,A0,T8 -BEQ V0,R0,7F0AC864 -SW T9,0154 (SP) -LW T2,0D50 (SP) -ADDIU T5,R0,00F5 -SUBU T0,T5,T2 -BEQ R0,R0,7F0AC868 -SW T0,0150 (SP) -SW T4,0150 (SP) -JAL 7000442C ;V0= text clip height -NOP -LW T7,0D48 (SP) ;T7= p->2nd font table -LW T6,0D4C (SP) ;T6= p->1st font table -LW T1,0084 (SP) -ADDIU T3,R0,00D2 -ADDIU T8,R0,000A -SW T8,0028 (SP) -SW T3,001C (SP) -LW A0,0DE8 (SP) ;A0=p->DL -ADDIU A1,SP,0150 -ADDIU A2,SP,0154 -OR A3,S1,R0 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW T7,0010 (SP) ;SP+10= p->2nd font table -SW T6,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T1,0018 (SP) -LW T9,0074 (SP) -SW V0,0DE8 (SP) ;SP+DE8= p->DL -ADDIU S3,S3,0001 -ADDIU T5,T9,0001 -SW T5,0074 (SP) -JAL 7F0571A8 ;V0=#objectives -ADDIU S8,S8,0001 ;S8++ count++ -SLT AT,S8,V0 ;TRUE if more objectives -BNEZ AT,7F0AC590 ;loop to display each to screen -NOP -//7F0AC8DC: -JAL 7F0ACBA0 A0-> overlap correction -ADDIU A0,R0,FFFF ;-1->80040E90 -JAL 7F0A684C ;advance up/down from "objectives" submenu of watch menu - tests +/c-up, then +/c-down -NOP -//7F0AC8EC: -LW T2,0D4C (SP) ;T2= p->1st font table -ADDIU T0,R0,000A -SW T0,0014 (SP) -ADDIU A0,SP,0D54 ;A0=@height -ADDIU A1,SP,0D50 ;A1=@width -ADDIU A2,SP,0170 -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10= p->1st font table -LW T4,0D48 (SP) ;T4= p->2nd font table -LW T7,0D4C (SP) ;T7= p->1st font table -LUI T6,A0FF -ORI T6,T6,A0F0 ;T6=A0FFA0F0: lt.green -ADDIU T1,R0,00D2 -ADDIU T3,R0,0082 -ADDIU T8,R0,000A -SW T8,0028 (SP) -SW T3,0020 (SP) -SW T1,001C (SP) -SW T6,0018 (SP) -LW A0,0DE8 (SP) ;A0= p->DL -ADDIU A1,SP,0D64 ;A1= p->width -ADDIU A2,SP,0D60 ;A2= p->height -ADDIU A3,SP,0170 -SW R0,0024 (SP) -SW T4,0010 (SP) ;SP+10= p->2nd font table -JAL 7F0ADABC ;display monotone text -SW T7,0014 (SP) ;SP+14= p->1st font table -//7F0AC95C: -LW T9,0D60 (SP) ;T9=height -LW T2,0D4C (SP) ;T2= p->1st font table -ADDIU V1,R0,003C -ADDIU T0,R0,000A -ADDIU T5,T9,0005 ;T5=height+5 -SW V0,0DE8 (SP) ;SP+DE8= p->DL -SW T5,0D60 (SP) ;height+=5 -SW T0,0014 (SP) ;SP+14=0xA -SW V1,0D64 (SP) ;SP+D64= width -ADDIU A0,SP,0D54 ;A0=@height -ADDIU A1,SP,0D50 ;A1=@width -ADDIU A2,SP,0190 ;p->string -LW A3,0D48 (SP) ;A3= p->2nd font table -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10= p->1st font table -JAL 7000441C ;V0= text clip width -NOP -JAL 7000442C ;V0= text clip height -SH V0,0064 (SP) -LW T4,0D48 (SP) ;T4= p->2nd font table -LW T7,0D4C (SP) ;T7= p->1st font table -LH T1,0064 (SP) -LUI T6,00FF -ORI T6,T6,00B0 ;T6=00FF00B0: green -ADDIU T3,R0,000A -SW T3,0028 (SP) -SW T6,0018 (SP) -LW A0,0DE8 (SP) ;A0= p->DL -ADDIU A1,SP,0D64 ;A1= p->width -ADDIU A2,SP,0D60 ;A2= p->height -ADDIU A3,SP,0190 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW T4,0010 (SP) ;SP+10= p->2nd font table -SW T7,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T1,001C (SP) -SW V0,0DE8 (SP) ;SP+DE8= p->DL -//7F0AC9F4: return -LW RA,005C (SP) -LW V0,0DE8 (SP) ;V0=p->DL -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -LW S4,0048 (SP) -LW S5,004C (SP) -LW S6,0050 (SP) -LW S7,0054 (SP) -LW S8,0058 (SP) -JR RA -ADDIU SP,SP,0DE8 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0ACA28 - display current solo watch page text.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0ACA28 - display current solo watch page text.txt deleted file mode 100644 index 9e99067..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/7F0ACA28 - display current solo watch page text.txt +++ /dev/null @@ -1,94 +0,0 @@ -7F0ACA28 E1558 display current solo watch page text - accepts: A0=p->DL, A1=, A2=interface mode (1-on; 0-off) -ADDIU SP,SP,FFE0 -SW A1,0024 (SP) ;SP+24=A1: -SW S0,0018 (SP) -LUI A1,8008 -LW A1,A0B0 (A1) ;A1=8007A0B0: p->cur.BONDdata -OR S0,A0,R0 ;S0=A0: p->DL -SW RA,001C (SP) -LUI A0,8004 -SW A2,0028 (SP) ;SP+28=A2: -LW A0,0994 (A0) ;A0=80040994: selected solo watch page -JAL 7F0A70AC -ADDIU A1,A1,1878 ;A1=BONDdata+1878: -LW V0,0028 (SP) ;V0=SP+28: interface mode -ADDIU AT,R0,0001 -BNE V0,AT,7F0ACB34 ;branch if not 1: -NOP -//7F0ACA68: 1: watch interface available -JAL 7F07EAD0 ;A0->BONDdata+1CC -OR A0,R0,R0 ;A0=0 -JAL 7F0BD8FC ;A0->pause -OR A0,R0,R0 ;A0=0 -LUI T6,8004 -LW T6,0994 (T6) ;T6=80040994: selected solo watch page -ADDIU AT,R0,0001 -OR A0,R0,R0 ;A0=0 -BEQ T6,AT,7F0ACAA8 ;branch if page 1: Inventory -NOP -//7F0ACA90: look for non-inventory select -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,A000 ;A1=A000: A, Z buttons -BEQ V0,R0,7F0ACAA8 ;branch if none pressed -NOP -JAL 7F0A4EF8 -NOP -//7F0ACAA8: load specific watch page handler -LUI T7,8004 -LW T7,0994 (T7) ;T7=80040994: selected solo watch page -SLTIU AT,T7,0005 -BEQ AT,R0,7F0ACB5C ;return if an invalid page# -SLL T7,T7,0x2 -LUI AT,8006 -ADDU AT,AT,T7 -LW T7,8584 (AT) ;T7=80058584+offset: sets up each solo watch page -JR T7 -NOP -//7F0ACAD0: page 0: Main Page -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F0A830C display text for solo watch page 0: Main Page -LW A1,0024 (SP) -BEQ R0,R0,7F0ACB5C -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ACAE4: page 1: Inventory -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F0A8424 display text for solo watch page 1: Inventory -LW A1,0024 (SP) -BEQ R0,R0,7F0ACB5C -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ACAF8: page 2: Controls -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F0AB4B8 display text for solo watch page 2: Controls -LW A1,0024 (SP) -BEQ R0,R0,7F0ACB5C -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ACB0C: page 3: Options -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F0ABDFC display text for solo watch page 3: Options - slidebar constructor and interface -LW A1,0024 (SP) -BEQ R0,R0,7F0ACB5C -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ACB20: page 4: Briefing -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F0AC168 display text for solo watch page 4: Briefing -LW A1,0024 (SP) -BEQ R0,R0,7F0ACB5C -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ACB34: 0: watch interface closed -BNEL V0,R0,7F0ACB60 ;return if V0 isn't zero -LW RA,001C (SP) -JAL 7F0BD8FC ;A0->pause -ADDIU A0,R0,0001 ;A0=1: pause game -JAL 7F07EAD0 ;A0->BONDdata+1CC: -ADDIU A0,R0,0001 -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F0A77A8 -LW A1,0024 (SP) -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ACB5C: return -LW RA,001C (SP) -OR V0,S0,R0 ;V0=S0: p->DL -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0020 diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/edit options page settings.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/edit options page settings.txt deleted file mode 100644 index 100909e..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/edit options page settings.txt +++ /dev/null @@ -1,614 +0,0 @@ -7F0AB7D8: E0308 solo watch menu - options page toggles interface - accepts: A0=setting (0-7) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) ;SP+18=A0: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0222 ;A1=0222: left c, +, or shoulder -BNEZ V0,7F0AB804 ;branch if pressed -NOP -JAL 7F0A4FB0 ;V0= TRUE if pressed left on control stick (0x2E) -NOP -BEQ V0,R0,7F0AB86C ;branch if not pressing left -//7F0AB804: pressing left... -LUI T6,8004 -LW T6,09A8 (T6) ;T6=800409A8: highlighted setting selected register -LW T7,0018 (SP) ;T7=SP+18: setting -LUI T9,8004 -BEQ T6,R0,7F0AB86C ;branch if not selected -SLL T8,T7,0x2 -SUBU T8,T8,T7 -SLL T8,T8,0x2 ;T8=T7*0xC: offset to setting -ADDIU T9,T9,0A7C -ADDU V0,T8,T9 ;V0=80040A7C+offset: watch setting label list -LW V1,0008 (V0) ;V1=setting -ADDIU AT,R0,0001 -ADDIU A0,V0,0008 ;A0=p->setting -BNEL V1,AT,7F0AB854 ;branch if setting not=1 -ADDIU AT,R0,0002 -JAL 7F0AB7A4 ;revise setting: wrap around to 0 -OR A1,R0,R0 ;A1=0 -BEQ R0,R0,7F0AB8FC -LW RA,0014 (SP) -//7F0AB850: set to option 1 -ADDIU AT,R0,0002 -BNE V1,AT,7F0AB8F8 ;branch if setting not=2 -ADDIU A0,V0,0008 ;A0=p->setting -JAL 7F0AB7A4 ;revise setting -ADDIU A1,R0,0001 ;A1=1 -BEQ R0,R0,7F0AB8FC -LW RA,0014 (SP) -//7F0AB86C: test if pressing right -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0111 ;A1=0111: right c, +, shoulder -BNEZ V0,7F0AB88C ;branch if pressed -NOP -JAL 7F0A4FEC ;V0= TRUE if pressed right on control stick (0x2E) -NOP -BEQ V0,R0,7F0AB8F8 ;branch if not pressed -//7F0AB88C: right pressed... -LUI T0,8004 -LW T0,09A8 (T0) ;T0=800409A8: highlighted setting selected register -LW T1,0018 (SP) ;T1=SP+18: setting -LUI T3,8004 -BEQ T0,R0,7F0AB8F8 ;branch if not selected -SLL T2,T1,0x2 -SUBU T2,T2,T1 -SLL T2,T2,0x2 ;T2=setting*0xC -ADDIU T3,T3,0A7C -ADDU V0,T2,T3, ;V0=80040A7C+offset: watch setting label list -LW V1,0008 (V0) ;V1=V0+8: cur.setting -ADDIU A0,V0,0008 ;A0=V0+8: p->cur.setting -ADDIU AT,R0,0001 -BNEZ V1,7F0AB8D8 ;branch if not set to 0 -NOP -JAL 7F0AB7A4 ;revise setting -ADDIU A1,R0,0001 ;A1=1 -BEQ R0,R0,7F0AB8FC -LW RA,0014 (SP) -//7F0AB8D8: detect 3rd option -BNEL V1,AT,7F0AB8FC ;branch if not set to 1 -LW RA,0014 (SP) -LHU T4,0006 (V0) ;T4=3rd option text label -ADDIU A0,V0,0008 ;A0=V0+8: p->cur.setting -BEQL T4,R0,7F0AB8FC ;branch if not present -LW RA,0014 (SP) -JAL 7F0AB7A4 ;revise setting -ADDIU A1,R0,0002 ;A1=2: -//7F0AB8F8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -7F0AB7A4: E02D4 change toggle options in watch menu - accepts: A0=p->setting register,A1=new setting -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0A4FA4 ;0->80040ADC: update menu? -SW A1,0000 (A0) ;A1->A0: new setting -> register -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,002B ;A1=SE 02B -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -7F0AB908: E0438 solo watch menu - options page - options list and interface - accepts: A0=p->display list target, A1=ypos, A2=setting#, A3=highlight mode (0-2) -LUI V1,8005 -LB V1,84D0 (V1) ;V1=800484D0: language -ADDIU SP,SP,FFA0 -LUI V0,0080 -ORI T2,V0,0080 ;T2=00800080 - normal colour -SW RA,0034 (SP) -SW A0,0060 (SP) ;SP+60=A0: DL -SW A1,0064 (SP) ;SP+64=A1: y position -OR T1,T2,R0 ;T1=00800080 - normal colour -BLEZ V1,7F0AB93C ;branch if english or below -SW T2,0054 (SP) ;SP+54=00800080 - normal colour -BEQ R0,R0,7F0AB940 -ADDIU A1,R0,00AA ;A1=00AA: japanese -//7F0AB93C: -ADDIU A1,R0,00B4 ;A1=00B4: english -+BEQ V1,R0,7F0AB954 ;branch if english or below -ADDIU T7,R0,00E1 -ADDIU T6,R0,00DC -BEQ R0,R0,7F0AB958 -SW T6,004C (SP) ;SP+4C=00DC: japanese -//7F0AB954: determine type of highlighting -SW T7,004C (SP) ;SP+4C=00E1: english -BEQ A3,R0,7F0AB990 ;branch if A3=0 -SLL T3,A2,0x2 -ADDIU V1,R0,0001 -BEQ A3,V1,7F0AB9E8 ;branch if A3=1 -SLL T6,A2,0x2 -ADDIU AT,R0,0002 -BEQ A3,AT,7F0ABA3C ;branch if A3=2 -SLL T8,A2,0x2 -SUBU T8,T8,A2 -LUI T9,8004 -ADDIU T9,T9,0A7C -SLL T8,T8,0x2 ;T8=A2*0xC: offset to setting data -BEQ R0,R0,7F0ABAB8 -ADDU T0,T8,T9 ;T0=80040A7C+offset: watch setting label list -//7F0AB990: determine set option: option=0 -SUBU T3,T3,A2 -LUI T4,8004 -ADDIU T4,T4,0A7C -SLL T3,T3,0x2 ;T3=A2*0xC: offset to setting data -ADDU T0,T3,T4 ;T0=80040A7C+offset: watch setting label list -LW V0,0008 (T0) ;V0=cur.setting -ADDIU V1,R0,0001 -BNEZ V0,7F0AB9C0 ;branch if not option 0 -NOP -LUI T1,00FF -BEQ R0,R0,7F0ABAB8 -ORI T1,T1,00B0 ;T1=00FF00B0 - highlight colour -//7F0AB9C0: option=1 -BNE V1,V0,7F0AB9D4 ;branch if not option 1 -ADDIU AT,R0,0002 -LUI T2,00FF -BEQ R0,R0,7F0ABAB8 -ORI T2,T2,00B0 ;T2=00FF00B0 - highlight colour -//7F0AB9D4: option=2 -BNE V0,AT,7F0ABAB8 ;branch if not option 2 -LUI T5,00FF -ORI T5,T5,00B0 -BEQ R0,R0,7F0ABAB8 -SW T5,0054 (SP) ;SP+54=T5: 00FF00B0 - highlight colour -//7F0AB9E8: -SUBU T6,T6,A2 -LUI T7,8004 -ADDIU T7,T7,0A7C -SLL T6,T6,0x2 ;T6=A2*0xC: offset to setting data -ADDU T0,T6,T7 ;T0=80040A7C+offset: watch setting label list -LW V0,0008 (T0) ;V0=cur.setting -BNEZ V0,7F0ABA14 ;branch if not 0 -NOP -LUI T1,00FF -BEQ R0,R0,7F0ABAB8 -ORI T1,T1,00B0 ;T1=00FF00B0 - highlight colour -//7F0ABA14: option=1 -BNE V1,V0,7F0ABA28 ;branch if not 1 -ADDIU AT,R0,0002 -LUI T2,00FF -BEQ R0,R0,7F0ABAB8 -ORI T2,T2,00B0 ;T2=00FF00B0 - highlight colour -//7F0ABA28: option=2 -BNE V0,AT,7F0ABAB8 -LUI T8,00FF -ORI T8,T8,00B0 -BEQ R0,R0,7F0ABAB8 -SW T8,0054 (SP) ;SP+54=T8: 00FF00B0 - highlight colour -//7F0ABA3C: detect setting changes -OR A0,A2,R0 ;A0=A2: setting# -SW A1,0050 (SP) ;SP+50=A1: language-specific value (y position) -SW A2,0068 (SP) ;SP+68=A2: setting# -SW T1,005C (SP) ;SP+5C=T1: 00800080 - normal colour -JAL 7F0AB7D8 ;switch left/right option A0 (0-7) on solo watch options page -SW T2,0058 (SP) ;SP+58=T2: 00800080 - normal colour -//7F0ABA54: -LW A2,0068 (SP) ;A2=setting# -LUI T3,8004 -ADDIU T3,T3,0A7C -SW T9,A2,0x2 -SUBU T9,T9,A2 -SLL T9,T9,0x2 ;T9=A2*0xC: offset to setting data -ADDU T0,T9,T3 ;T0=80040A7C+offset: watch setting label list -LW V0,0008 (T0) ;V0=cur.setting -ADDIU V1,R0,0001 -LW A1,0050 (SP) ;A1=y position -LW T1,005C (SP) ;T1=00800080 - normal colour -BNEZ V0,7F0ABA94 ;branch if option not 0 -LW T2,0058 (SP) ;T2=00800080 - normal colour -LUI T1,A0FF -BEQ R0,R0,7F0ABAB8 -ORI T1,T1,A0F0 ;T1=A0FFA0F0 - selected colour -//7F0ABA94: option=1 -BNE V1,V0,7F0ABAA8 ;branch if option not 1 -ADDIU AT,R0,0002 -LUI T2,A0FF -BEQ R0,R0,7F0ABAB8 -ORI T2,T2,A0F0 ;T2=A0FFA0F0 - selected colour -//7F0ABAA8: -BNE V0,AT,7F0ABAB8 ;branch if option not 2 -LUI T4,A0FF -ORI T4,T4,A0F0 -SW T4,0054 (SP) ;SP+54=T4: A0FFA0F0 - selected colour -//7F0ABAB8: -LHU T5,0006 (T0) ;T5=3rd label -BNEZ T5,7F0ABAF4 ;branch if present -LUI V1,8005 -LB V1,84D0 (V1) ;V1=800484D0: language -ADDIU A1,R0,00C8 ;A1=00C8: english -ADDIU T7,R0,00FA ;T7=00FA -BLEZ V1,7F0ABAE0 ;branch if english or less -ADDIU T6,R0,00FA ;T6=00FA -BEQ R0,R0,7F0ABAE0 -ADDIU A1,R0,00BE ;A1=00BE: japanese -//7F0ABAE0: -BEQL V1,R0,7F0ABAF4 ;branch if english -SW T7,004C (SP) ;SP+4C=00FA -BEQ R0,R0,7F0ABAF4 ;japanese, same as english -SW T6,004C (SP) ;SP+4C=00FA -//7F0ABAF0: write 1st label -SW T7,004C (SP) -LHU A0,0002 (T0) ;A0=1st label -SW A1,0050 (SP) ;SP+50=A1: language-specific value -SW T0,003C (SP) ;SP+3C=T0: p->watch setting label list -SW T1,005C (SP) ;SP+5C=T1: -JAL 7F0C1DD8 ;V0=p->text A0 -SW T2,0058 (SP) ;SP+58=T2: -LW T1,005C (SP) ;T1 recovered -LUI T3,0030 -ORI T3,T3,00B0 -ADDIU T8,R0,FFFF -ADDIU T9,R0,0001 -SW T9,001C (SP) ;SP+1C=1 -SW T8,0018 (SP) ;SP+18=-1 -SW T3,0024 (SP) ;SP+24=003000B0: backdrop colour -LW A1,0050 (SP) ;A1=x position (language-specific value) -LW A0,0060 (SP) ;A0=DL -LW A2,0064 (SP) ;A2=y position -OR A3,V0,R0 ;A3=V0: p->text -SW R0,0014 (SP) ;SP+14=0: -SW R0,0020 (SP) ;SP+20=0 -SW R0,0028 (SP) ;SP+28=0 -JAL 7F0A9398 ;display text -SW T1,0010 (SP) ;SP+10=text colour -//7F0ABB50: write 2nd label -LW T0,003C (SP) ;T0=p->watch setting label list -SW V0,0060 (SP) ;SP+60=V0: DL -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,0004 (T0) ;A0=2nd label -LW T2,0058 (SP) -LUI T6,0030 -ORI T6,T6,00B0 -ADDIU T4,R0,FFFF -ADDIU T5,R0,0001 -SW T5,001C (SP) ;SP+1C=1 -SW T4,0018 (SP) ;SP+18=-1 -SW T6,0024 (SP) ;SP+24=003000B0: backdrop colour -LW A0,0060 (SP) ;A0=DL -LW A1,004C (SP) ;A1=x position -LW A2,0064 (SP) ;A2=y position -OR A3,V0,R0 ;A3=V0: p->text -SW R0,0014 (SP) ;SP+14=0: -SW R0,0020 (SP) ;SP+20=0 -SW R0,0028 (SP) ;SP+28=0 -JAL 7F0A9398 ;display text -SW T2,0010 (SP) ;SP+10=text colour -//7F0ABBA4: write 3rd label -LW T0,003C (SP) ;T0=p->watch setting label list -SW V0,0060 (SP) ;SP+60=V0: DL -LHU V1,0006 (T0) ;V1=3rd label -BEQL V1,R0,7F0ABC0C ;branch if no 3rd label -LW RA,0034 (SP) -JAL 7F0C1DD8 ;V0=p->text A0 -OR A0,V1,R0 ;A0=V1: 3rd label -LW T7,0054 (SP) ;T7=highlight colour -LUI T3,0030 -ORI T3,T3,00B0 -ADDIU T8,R0,FFFF -ADDIU T9,R0,0001 -SW T9,001C (SP) ;SP+1C=1 -SW T8,0018 (SP) ;SP+18=-1 -SW T3,0024 (SP) ;SP+24=003000B0: backdrop colour -LW A0,0060 (SP) ;A0=DL -ADDIU A1,R0,010E ;A1=010E -LW A2,0064 (SP) ;A2=y position -OR A3,V0,R0 ;A3=V0: p->text -SW R0,0014 (SP) ;SP+14=0: -SW R0,0020 (SP) ;SP+20=0 -SW R0,0028 (SP) ;SP+28=0 -JAL 7F0A9398 ;display text -SW T7,0010 (SP) ;SP+10=text colour -SW V0,0060 (SP) -//7F0ABC08: -LW RA,0034 (SP) -LW V0,0060 (SP) -ADDIU SP,SP,0060 -JR RA -NOP - - -7F0ACD98: - accepts: A0=p->display list target -OR V0,A0,R0 ;V0=A0: DL -ADDIU A0,A0,0008 ;A0+=8: next DL op -LUI T6,E700 -SW T6,0000 (V0) ;DL+0 =T6: E7000000 - rdp_pipesync: upper word -SW R0,0004 (V0) ;DL+4 =R0: 00000000 - rdp_pipesync: lower word -OR V1,A0,R0 ;V1=DL -ADDIU A0,A0,0008 ;A0+=8: next DL op -LUI T7,BA00 -ORI T7,T7,1402 -OR A1,A0,R0 ;A1=DL -SW T7,0000 (V1) ;DL+8 =T7: BA001402 - rsp_setothermode_h: cycle type -SW R0,0004 (V1) ;DL+C =R0: 00000000 - rsp_setothermode_h: 1cycle -ADDIU A0,A0,0008 ;A0+=8: next DL op -LUI T8,BA00 -ORI T8,T8,0602 -ADDIU T9,R0,00C0 -OR A2,A0,R0 ;A2=DL -SW T9,0004 (A1) ;DL+10=T9: BA000602 - rsp_setothermode_h: RGB dither -SW T8,0000 (A1) ;DL+14=T8: 000000C0 - rsp_setothermode_h: disable? bayer/noise? -ADDIU A0,A0,0008 ;A0+=8: next DL op -LUI T0,B900 -LUI T1,0050 -ORI T1,T1,41C8 -ORI T0,T0,031D -OR A3,A0,R0 ;A3=DL -SW T0,0000 (A2) ;DL+18=T0: B900031D - rsp_setothermode_l: render mode -SW T1,0004 (A2) ;DL+1C=T1: 005041C8 - rsp_setothermode_l: antialias, image read, clear on converge, converge delta-ST wrap, force blender, blend colour in, blend colour blender -LUI T2,FCFF -LUI T3,FF2D -ORI T3,T3,FEFF -ORI T2,T2,97FF -ADDIU A0,A0,0008 ;A0+=8: next DL op -SW T2,0000 (A3) ;DL+20=T2: FCFF97FF - rdp_setcombine: -SW T3,0004 (A3) ;T3+24=T3: FF2DFEFF - rdp_setcombine: -OR V0,A0,R0 ;V0=DL -ADDIU A0,A0,0008 ;A0+=8: next DL op -LUI T4,BA00 -ORI T4,T4,1301 -OR V1,A0,R0 ;V1=DL -SW T4,0000 (V0) ;DL+28=T4: BA001301 - rsp_setothermode_h: texture perspective -SW R0,0004 (V0) ;DL+2C=R0: 00000000 - rsp_setothermode_h: off -ADDIU A0,A0,0008 ;A0+=8: next DL op -LUI T5,B900 -ORI T5,T5,0002 -OR A1,A0,R0 ;A1=DL -SW T5,0000 (V1) ;DL+30=T5: B9000002 - rsp_setothermode_l: alpha compare -SW R0,0004 (V1) ;DL+34=R0: 00000000 - rsp_setothermode_l: none -ADDIU A0,A0,0008 ;A0+=8: next DL op -LUI T6,BA00 -ORI T6,T6,1001 -OR A2,A0,R0 ;A2=DL -SW T6,0000 (A1) ;DL+38=T6: BA001001 - rsp_setothermode_h: texture LOD -SW R0,0004 (A1) ;DL+3C=R0: 00000000 - rsp_setothermode_h: tile -LUI T7,BA00 -ORI T7,T7,0903 -ADDIU A0,A0,0008 ;A0+=8: next DL op -ADDIU T8,R0,0C00 -SW T8,0004 (A2) ;DL+44=T8: 00000C00 - rsp_setothermode_h: filter -SW T7,0000 (A2) ;DL+40=T7: BA000903 - rsp_setothermode_h: texture conversion -OR A3,A0,R0 ;A3=DL -LUI T9,BA00 -ORI T9,T9,0E02 -SW T9,0000 (A3) ;DL+48=T9: BA000E02 - rsp_setothermode_h: texture LUT -SW R0,0004 (A3) ;DL+4C=R0: 00000000 - rsp_setothermode_h: none -LUI T0,8004 -LW T0,0E94 (T0) ;T0=80040E94: -ADDIU A0,A0,0008 ;A0+=8: next DL op -OR V0,A0,R0 ;V0=DL -BEQ T0,R0,7F0ACED4 ;branch if not set -LUI T3,BA00 -//7F0ACEB0: 80040E94 set -OR V0,A0,R0 ;V0=DL -LUI T1,BA00 -ORI T1,T1,0C02 -ADDIU T2,R0,3000 -SW T2,0004 (V0) ;DL+50=T2: BA000C02 - rsp_setothermode_h: texture filter -SW T1,0000 (V0) ;SL+54=T1: 00003000 - rsp_setothermode_h: average -ADDIU A0,A0,0008 ;A0+=8: next DL op -JR RA -OR V0,A0,R0 ;V0=A0: final DL -//7F0ACED4: 80040E94 unset -ORI T3,T3,0C02 -ADDIU T4,R0,2000 -SW T4,0004 (V0) ;DL+54=T4: 00002000 - rsp_setothermode_h: bi-level interpretation -SW T3,0000 (V0) ;DL+50=T3: BA000C02 - rsp_setothermode_h: texture filter -ADDIU A0,A0,0008 ;A0+=8: next DL op -JR RA -OR V0,A0,R0 ;V0=A0: final DL - - -7F0ABDFC: solo watch menu options page - slidebars -ADDIU SP,SP,FFA0 -SW RA,003C (SP) -SW S0,0038 (SP) -JAL 7F0A714C -OR A2,R0,R0 ;A2=0 -JAL 7F07E5FC ;V0=TRUE if watch page transition running -OR S0,V0,R0 ;S0=V0: p->DL -ADDIU AT,R0,0001 -BEQL V0,AT,7F0AC0D8 ;return if still running -LW RA,003C (SP) -//7F0ABE24: -JAL 7F0A91C8 -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F0A8FEC -OR A0,V0,R0 ;A0=V0: p->DL -LUI T6,8004 -LUI T7,8004 -LW T6,0EAC (T6) -LW T7,0EB0 (T7) -OR A0,V0,R0 ;A0=V0: p->DL -SW T6,0044 (SP) -JAL 7F0ACD98 ;microcode... -SW T7,0040 (SP) -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ABE48: -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,AC35 ;A0=AC35: "MUSIC\n" -LUI T0,8004 -LW T0,099C (T0) ;T0=8004099C: selection on page -ADDIU T8,R0,0040 -ADDIU T9,R0,0025 -LUI V1,00FF -OR A2,V0,R0 -SW T8,0054 (SP) -SW T9,0050 (SP) -BNEZ T0,7F0ABEA4 ;branch if not highlighted -ORI V1,V1,00B0 ;V1=00FF00B0: green -LUI T1,8004 -LW T1,09A8 (T1) ;T1=800409A8: TRUE if selected -LUI V1,A0FF -ORI V1,V1,A0F0 ;V1=A0FFA0F0: bright green -BEQL T1,R0,7F0ABEA8 ;branch if not selected -LW T2,0044 (SP) -ADDIU V1,R0,FFFF ;V1=FFFFFFFF: black -//7F0ABEA4: -LW T2,0044 (SP) -ADDIU A0,SP,0048 -ADDIU A1,SP,004C -LW A3,0040 (SP) -SW R0,0014 (SP) -SW V1,005C (SP) -SW A2,0058 (SP) -JAL 7F0AE98C ;V0=width of string -SW T2,0010 (SP) -LUI T3,8004 -LW T3,09A8 (T3) ;T3=800409A8: TRUE if selected -LW V1,005C (SP) -LW A3,0058 (SP) -BEQ T3,R0,7F0ABF4C ;branch if not selected -LUI T4,8004 -LW T4,099C (T4) ;T4=8004099C: selection on page -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU A1,SP,0054 -BNEZ T4,7F0ABF4C ;branch if not highlighted -ADDIU A2,SP,0050 -LW T8,004C (SP) -SW V1,0018 (SP) -LW T5,0040 (SP) -LW T6,0044 (SP) -LW T0,0048 (SP) -LUI V1,00FF -LUI T7,0070 -ORI T7,T7,00A0 ;T7=007000A0: dk.green -ORI V1,V1,00B0 ;V1=00FF00B0: green -ADDIU T9,T8,0001 -SW T9,0020 (SP) -SW V1,005C (SP) -SW T7,001C (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T5,0010 (SP) -SW T6,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text -SW T0,0024 (SP) -LW V1,005C (SP) -BEQ R0,R0,7F0ABF9C -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ABF4C: not highlighted or selected... -SW V1,0018 (SP) -LW T1,0040 (SP) -LW T2,0044 (SP) -LW T3,004C (SP) -LW T4,0048 (SP) -LUI V1,00FF -ORI V1,V1,00B0 ;V1=00FF00B0: green -SW V1,005C (SP) -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU A1,SP,0054 -ADDIU A2,SP,0050 -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T1,0010 (SP) -SW T2,0014 (SP) -SW T3,001C (SP) -JAL 7F0ADABC ;display monotone text -SW T4,0020 (SP) -LW V1,005C (SP) -OR S0,V0,R0 ;S0=V0: p->DL -//7F0ABF9C: -ORI A0,R0,AC36 ;A0=AC36: "FX\r" -JAL 7F0C1DD8 ;V0=text A0 -SW V1,005C (SP) -LUI T7,8004 -LW T7,099C (T7) ;T7=8004099C: selection on page -ADDIU T5,R0,0040 -ADDIU T6,R0,003B -ADDIU AT,R0,0001 -LW V1,005C (SP) -OR A2,V0,R0 -SW T5,0054 (SP) -BNE T7,AT,7F0ABFEC ;branch if option 2 not selected -SW T6,0050 (SP) -LUI T8,8004 -LW T8,09A8 (T8) ;T8=800409A8: TRUE if selected -LUI V1,A0FF -ORI V1,V1,A0F0 ;V1=A0FFA0F0: lt.green -BEQL T8,R0,7F0ABFF0 ;branch if not selected -LW T9,0044 (SP) -ADDIU V1,R0,FFFF ;V1=FFFFFFFF: black -//7F0ABFEC: -LW T9,0044 (SP) -ADDIU A0,SP,0048 -ADDIU A1,SP,004C -LW A3,0040 (SP) -SW R0,0014 (SP) -SW V1,005C (SP) -SW A2,0058 (SP) -JAL 7F0AE98C ;V0=width of string -SW T9,0010 (SP) -LUI T0,8004 -LW T0,09A8 (T0) ;T0=800409A8: TRUE if selected -LW V1,005C (SP) -LW A3,0058 (SP) -BEQ T0,R0,7F0AC088 ;branch if not selected -LUI T1,8004 -LW T1,099C (T1) ;T1=8004099C: selection on page -ADDIU AT,R0,0001 -OR A0,S0,R0 ;A0=S0: p->DL -BNE T1,AT,7F0AC088 ;branch if not highlighted -ADDIU A1,SP,0054 -LW T5,004C (SP) -LW T2,0040 (SP) -LW T3,0044 (SP) -LW T7,0048 (SP) -LUI T4,0070 -ORI T4,T4,00A0 ;T4=007000A0: dk.green -ADDIU T6,T5,0001 -SW T6,0020 (SP) -SW T4,001C (SP) -ADDIU A2,SP,0050 -SW V1,0018 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T2,0010 (SP) -SW T3,0014 (SP) -JAL 7F0AE6EC ;display 2-tone text -SW T7,0024 (SP) -BEQ R0,R0,7F0AC0C8 -OR S0,V0,R0 ;S0=V0: p->DL -//7F0AC088: -LW T8,0040 (SP) -LW T9,0044 (SP) -LW T0,004C (SP) -LW T1,0048 (SP) -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU A1,SP,0054 -ADDIU A2,SP,0050 -SW V1,0018 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0010 (SP) -SW T9,0014 (SP) -SW T0,001C (SP) -JAL 7F0ADABC ;display monotone text -SW T1,0020 (SP) -OR S0,V0,R0 ;S0=V0: p->DL -//7F0AC0C8: -JAL 7F0ABC1C ;draw options and handle selection -OR A0,S0,R0 ;A0=S0: p->DL -OR S0,V0,R0 ;S0=V0: p->DL -//7F0AC0D4: return -LW RA,003C (SP) -OR V0,S0,R0 ;V0=S0: p->DL -LW S0,0038 (SP) -JR RA -ADDIU SP,SP,0060 - - - diff --git a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/solo watch menu.txt b/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/solo watch menu.txt deleted file mode 100644 index cf80946..0000000 --- a/notes/GE Documentation/Main Menus/Ingame menus/solo watch menu/solo watch menu.txt +++ /dev/null @@ -1,208 +0,0 @@ -7F0A4868 0xD9398 initialize watch menu variables at stage load -LUI AT,8004 -SW R0,0994 (AT) selected page -LUI AT,8004 -SW R0,0998 (AT) highlighted control page selection -LUI AT,8004 -SW R0,099C (AT) highlighted option page selection -LUI AT,8004 -ADDIU T6,R0,0004 -SW T6,09A0 (AT) briefing page selection -LUI AT,8004 -SW R0,09A4 (AT) selected option on Abort dialog -LUI AT,8004 -SW R0,09A8 (AT) edit flag -LUI AT,8004 -SW R0,09AC (AT) ? -LUI AT,8004 -SW R0,09B0 (AT) current position in scrolling lists -LUI AT,8004 -SW R0,09B4 (AT) final position in scrolling list -MTC1 R0,F0 -LUI AT,8004 -SW R0,09B8 (AT) highlighted inventory selection -LUI AT,8004 -SWC1 F0,09BC (AT) position of entry in scrolling list -LUI AT,8004 -SW R0,09C0 (AT) 0=scroll list to entry -LUI AT,8004 -SW R0,09C4 (AT) ? -LUI AT,8004 -SWC1 F0,09C8 (AT) ? -LUI AT,8004 -LUI T8,8005 -SWC1 F0,09CC (AT) ? -LW T8,84D0 (T8) T8=J_text flag -LUI AT,8004 -ADDIU T7,R0,FFFF -SW T7,09D0 (AT) ? -ADDIU SP,SP,FFE8 -LUI AT,8004 -SW RA,0014 (SP) -BEQ T8,R0,0xD9448 -SWC1 F0,09D4 (AT) ? -BEQ R0,R0,0xD9448 Japanese only, but nothing to be done -NOP -//0xD9448 - - -7F0A69A8 DB4D8 initialize watch menu variables on open -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7000B9F8 ;V0= #controllers plugged in -NOP -SLTI AT,V0,0002 -BEQ AT,R0,7F0A69D4 ;branch if not exactly 1 controller -ADDIU T7,R0,0008 -ADDIU T6,R0,0004 -LUI AT,8004 -BEQ R0,R0,7F0A69DC -SW T6,09D8 (AT) ;4->800409D8 -//7F0A69D4: DB504 -LUI AT,8004 -SW T7,09D8 (AT) ;8->800409D8 -//7F0A69DC: DB50C -JAL 7F0A4F44 - LUI AT,8004 - JR RA - SW R0,09A8 (AT) -NOP -LUI AT,8004 -SW R0,0994 (AT) set to main page -LUI AT,8004 -ADDIU T8,R0,0004 -SW T8,09A0 (AT) set objective page top -LUI AT,8006 -LWC1 F4,84B0 (AT) 800584B0: 3F7FBE77 (0.999) -LUI AT,8004 -SWC1 F4,09C8 (AT) -LUI AT,8006 -LWC1 F6,84B4 (AT) 800584B4: 3F7FF972 (0.9999) -LUI AT,8004 -JAL 7F08D8E0 -SWC1 F6,09CC (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -Called every time you enter the thing. Used here: -//7F07F9E0 -JAL 7F0A69A8 -NOP - -//7F07FBA4 called when you reopen as it is closing -JAL 7F0A69A8 -SW R0,01C4 (T3) - -//7F07FBD8 arm is moving to left -JAL 7F0A69A8 -SW R0,01C4 (T3) - -//7F07FC0C -JAL 7F0A69A8 -SW R0,01C4 (T3) - - -at stage load uses a different routine, 7F0A4868, to intialize values -could NOP the menu init during gameplay. Only trouble is it doesn't set zoom until you flip pages. Would have to reprogram the watch thingie to do that - - -7F07E400: trigger watch zoom; fries: V0,V1,T6,T7,T8,F4,F6 - accepts: F12=final, F14=time -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T6,0000 (V1) -MTC1 R0,F4 -NOP -SWC1 F4,11BC (T6) reset timer -LW T7,0000 (V1) -SWC1 F14,11C0 (T7) set time for transition -LW V0,0000 (V1) -LWC1 F6,11C4 (V0) -SWC1 F6,11C8 (V0) copy current to initial value -LW T8,0000 (V1) -JR RA -SWC1 F12,11CC (T8) set final value - - -7F07E52C: call watch zoom during entry; called only when opening -LUI T6,8008 -LW T6,A0B0 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,8005 -LWC1 F12,507C (AT) F12=main page's zoom factor; can just target zooms here -LUI AT,4234 -MTC1 AT,F8 -SUB.S F6,F12,F4 -LUI AT,8005 -LWC1 F16,5080 (AT) -MTC1 R0,F18 -MUL.S F10,F6,F8 -DIV.S F14,F10,F16 F14=time factor, which should always be positive -C.LT.S F14,F18 -NOP -BC1F 7F07E57C -NOP -NEG.S F14,F14 -//7F07E57C: -JAL 7F07E400 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -7F07E594 call watch zoom on exit -LUI T6,8008 -LW T6,A0B0 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,4270 -MTC1 AT,F12 -LWC1 F4,11C4 (T6) -LUI AT,4234 -MTC1 AT,F8 -SUB.S F6,F12,F4 -LUI AT,8005 -LWC1 F16,5084 (AT) -MTC1 R0,F18 -MUL.S F10,F6,F8 -DIV.S F14,F10,F16 -C.LT.S F14,F18 -NOP -BC1F 7F07E5E4 -NOP -NEG.S F14,F14 -JAL 7F07E400 zoom! -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -zoom values for transition are retrieved from a table using current->next/prev thingy -80058458 376C8 zoom for main->objective/briefing watch menu [40933333] -8005845C 376CC zoom for main->inventory watch menu [40933333] -80058460 376D0 zoom for inventory->main watch menu [40BCCCCD] -80058464 376D4 zoom for inventory->control watch menu [407CCCCD] -80058468 376D8 unused zoom for control->options watch menu [407CCCCD] -8005846C 376DC zoom for control->inventory watch menu [40933333] -80058470 376E0 zoom for options->objective/briefing watch menu [40933333] -80058474 376E4 zoom for objective/briefing->options watch menu [407CCCCD] -80058478 376E8 zoom for objective/briefing->main watch menu [40BCCCCD] - -MAIN MENU 40BCCCCD 5.9 -INVENTORY 40933333 4.6 -CONTROLLER 407CCCCD 3.95 -OPTION MENU 407CCCCD 3.95 -OBJECTIVES 40933333 4.6 - -80040994 1FC04 selected page - (0:main, 1:inventory, 2:control, 3:options, 4:brief) - -All follow this pattern. Should kill the 21990 dependancy, and make a routine to \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/Intro/7F000C70 - Allocate Introduction Matrices.txt b/notes/GE Documentation/Main Menus/Intro/7F000C70 - Allocate Introduction Matrices.txt deleted file mode 100644 index 08994b7..0000000 --- a/notes/GE Documentation/Main Menus/Intro/7F000C70 - Allocate Introduction Matrices.txt +++ /dev/null @@ -1,50 +0,0 @@ -7F000C70 357A0 allocate introduction matrices -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,8003 -SW R0,A7D0 (AT) ;0->8002A7D0: -ADDIU A0,R0,0080 ;A0= 80 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000C8C: -LUI AT,8007 -SW V0,9558 (AT) ;V0->80069558: -ADDIU A0,R0,0040 ;A0= 40 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000CA0: -LUI AT,8007 -SW V0,955C (AT) ;V0->8006955C: -ADDIU A0,R0,0080 ;A0= 80 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000CB4: -LUI AT,8007 -SW V0,9560 (AT) ;V0->80069560: -ADDIU A0,R0,0080 ;A0= 80 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000CC8: -LUI AT,8007 -SW V0,9564 (AT) ;V0->80069564: -ADDIU A0,R0,0080 ;A0= 80 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000CDC: -LUI AT,8007 -SW V0,9568 (AT) ;V0->80069568: -ADDIU A0,R0,0080 ;A0= 80 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000CF0: -LUI AT,8007 -SW V0,956C (AT) ;V0->8006956C: -ADDIU A0,R0,0080 ;A0= 80 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F000D04: return -LW RA,0014 (SP) -LUI AT,8007 -SW V0,9570 (AT) ;V0->80069570: -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/7F00A8E0 - menu 00 constructor - legal screen.txt b/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/7F00A8E0 - menu 00 constructor - legal screen.txt deleted file mode 100644 index d0d71ec..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/7F00A8E0 - menu 00 constructor - legal screen.txt +++ /dev/null @@ -1,359 +0,0 @@ -7F00A8E0: 3F410 menu 00 constructor: legal screen - accepts: A0=display list target -ADDIU SP,SP,FED8 -SW S1,0034 (SP) -LUI T6,8003 -ADDIU S1,SP,00E4 ;S1=SP+E4: copy location -SW S4,0040 (SP) -ADDIU T6,T6,AABC ;T6=8002AABC -OR S4,A0,R0 ;S4=A0: DL -SW RA,0044 (SP) -SW S3,003C (SP) -SW S2,0038 (SP) -SW S0,0030 (SP) -ADDIU T9,T6,003C ;T9=8002AAF8 -OR T0,S1,R0 ;T0=S1: copy location (volatile) -//7F00A914: loop to copy -LW AT,0000 (T6) ;AT=8002AABC: -ADDIU T6,T6,000C ;T6+=C -ADDIU T0,T0,000C ;T0+=C -SW AT,FFF4 (T0) -LW AT,FFF8 (T6) -SW AT,FFF8 (T0) -LW AT,FFFC (T6) -BNE T6,T9,7F00A914 ;loop to copy range -SW AT,FFFC (T0) -//7F00A938: -LW AT,0000 (T6) ;AT=8002AABC+40: source -OR A0,S4,R0 ;A0=S4: DL -JAL 7F01C0D0 ;load image -SW AT,0000 (T0) ;AT->S1+40: copy target -//7F00A948: -MTC1 R0,F0 ;F0=0.0 -LUI AT,3F80 -MTC1 AT,F4 ;F4=1.0 [3F800000] -ADDIU S0,SP,00A0 ;S0=SP+A0: -MFC1 A1,F0 ;A1=0 -MFC1 A2,F0 ;A2=0 -OR S4,V0,R0 ;S4=V0: DL -OR A0,S0,R0 ;A0=S0: SP+A0: buffer for display list -LUI A3,457A ;A3=4000.0 [457A0000] -SWC1 F0,0010 (SP) ;SP+10=0 -SWC1 F0,0014 (SP) ;SP+14=0 -SWC1 F0,0018 (SP) ;SP+18=0 -SWC1 F0,001C (SP) ;SP+1C=0 -SWC1 F0,0024 (SP) ;SP+24=0 -JAL 7F059694 -SWC1 F4,0020 (SP) ;SP+20=0 -//7F00A988: -LUI S3,8003 -ADDIU S3,S3,A958 ;S3=8002A958 -LW T1,0000 (S3) ;T1=8002A958: p->object instance -SW S0,00E4 (SP) ;S0->SP+E4: buffer for display list above (SP+A0) -LW T2,0008 (T1) ;T2=p->obj.header -LH A0,000E (T2) ;A0=#obj.groups -SLL T3,A0,0x6 -JAL 7F0BD714 ;allocate space for the group entries -OR A0,T3,R0 ;A0=#obj.groups * 0x40 (offset to group) -//7F00A9AC: -SW V0,00F4 (SP) ;V0=p->allocated memory -OR A0,S0,R0 ;A0=S0: DL -JAL 7F058020 ;copy submatrix from A0 to A1 -OR A1,V0,R0 ;A1=p->allocated memory -LW T4,00F4 (SP) ;T4=p->allocated memory -LW T5,0000 (S3) ;T5=p->obj.instance -SW T4,000C (T5) ;T4->obj.instance+C: matrix conversion -JAL 7F06EFC4 ;something to do with parsing the object... -LW A0,0000 (S3) ;A0=p->obj.instance -//7F00A9D0: -ADDIU T8,R0,0003 -SW T8,00EC (SP) ; 3->SP+EC: -SW R0,00E8 (SP) ; 0->SP+E8: -SW S4,00F0 (SP) ;S4->SP+F0: -OR A0,S1,R0 ;A0=S1: copy location -JAL 7F074684 -LW A1,0000 (S3) ;A1=p->obj.instance -//7F00A9EC: -LW V0,0000 (S3) -LW S4,00F0 (SP) -OR S0,R0,R0 ;S0=0 -LW T7,0008 (V0) -OR S1,R0,R0 ;S1=0 -ADDIU S2,SP,0058 ;S2=SP+58: -LH T9,000E (T7) -BLEZ T9,7F00AA58 -NOP -//7F00AA10: -LW T6,000C (V0) -OR A1,S2,R0 -JAL 7F058020 ;copy submatrix from A0 to A1 -ADDU A0,T6,S1 -LW T0,0000 (S3) -SLL T2,S0,0x6 -OR A0,S2,R0 -LW T1,000C (T0) -JAL 7F058C9C -ADDU A1,T1,T2 -LW V0,0000 (S3) -ADDIU S0,S0,0001 ;S0+=1 -ADDIU S1,S1,0040 ;S1+=40 -LW T3,0008 (V0) -LH T4,000E (T3) -SLT AT,S0,T4 -BNEL AT,R0,7F00AA14 -LW T6,000C (V0) -//7F00AA58: parse text entry list to display to screen -JAL 7F0ACD98 ;??? - microcode constructor -OR A0,S4,R0 -LUI S0,8003 -LUI S1,8003 -LUI S3,8004 -LUI S2,8004 -OR S4,V0,R0 ;S4=V0: DL -ADDIU S0,S0,A9CC ;S0=8002A9CC -ADDIU S1,S1,AABC ;S1=8002AABC -ADDIU S2,S2,0EB8 ;S2=80040EB8 -ADDIU S3,S3,0EB4 ;S3=80040EB4 -//7F00AA84: display text entries to screen -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,0006 (S0) ;A0=8002A9CC+6+offset: text ID -LH A1,0000 (S0) ;A1=8002A9CC+offset: x pos -LH A2,0002 (S0) ;A2=8002A9CC+2+offset: y pos -LB A3,0004 (S0) ;A3=8002A9CC+4+offset: alignment -LW T8,0000 (S2) ;T8=80040EB8: p->2nd font table -LW T7,0000 (S3) ;T7=80040EB4: p->1st font table -SW V0,0014 (SP) ;V0->SP+14: p->text -OR A0,S4,R0 ;A0=S4: DL -SW R0,0010 (SP) ; 0->SP+10 -SW T8,0018 (SP) ;T8->SP+18: p->2nd font table -JAL 7F00A7E4 ;display text to screen -SW T7,001C (SP) ;T7=SP+1C: p->1st font table -//7F00AAB8: loop for each text entry -LB T5,0005 (S0) ;T5=8002A9CC+5+offset: kill bytes -BNEZ T5,7F00AACC ;return if final entry -ADDIU S0,S0,0008 ;S0+=8: next entry -BNE S0,S1,7F00AA84 ;branch if S0!=8002AABC (end of list) -OR S4,V0,R0 ;S4=V0: DL -//7F00AACC: return -LW RA,0044 (SP) -LW S0,0030 (SP) -LW S1,0034 (SP) -LW S2,0038 (SP) -LW S3,003C (SP) -LW S4,0040 (SP) -JR RA -ADDIU SP,SP,0128 - -+_+ - -7F01C0D0: 50C00 insert image DL, stats at 800232A8 - accepts: A0=display list target -ADDIU SP,SP,FFC8 -SW S0,0018 (SP) -SW RA,001C (SP) -LUI T6,BA00 -ORI T6,T6,1402 ;T6=BA001402 -LUI T7,0030 ;T7=00300000 -SW T7,0004 (A0) ;T7->A0+4: setothermode - fill -SW T6,0000 (A0) ;T6->A0+0: setothermode - texture LUT, -ADDIU S0,A0,0008 ;S0=A0+8 -SW S0,0030 (SP) ;SP+30=DL -JAL 7000441C ;returns V0=image width -ADDIU SP,SP,0008 -//7F01C100: -ADDIU T8,V0,FFFF ;T8=value-1 -LW T1,0030 (SP) ;T1=DL -ANDI T9,T8,0FFF ;T9=(value-1) & 0xFFF -LUI AT,FF10 -OR T0,T9,AT ;T0=FF100xxx -JAL 70003C1C ;V0=800232A8+28: p->image? -SW T0,0000 (T1) ;T0->DL: setcolourimage - 16bit rgba, width 0x13F -JAL 7000E8B0 ;translates virtual address for pointer A0 -OR A0,V0,R0 ;A0=V0: p->image? -//7F01C124: -LW T2,0030 (SP) ;T2=DL -OR V1,S0,R0 ;V1=S0: DL -LUI T4,0001 -SW V0,0004 (T2) ;V0->DL: setcolourimage - p->image -ORI T4,T4,0001 ;T4=00010001 -LUI T3,F700 ;T3=F7000000 -SW T3,0000 (V1) ;T3->DL: setfillcolour -SW T4,0004 (V1) ;T4->DL: setfillcolour - black, black -ADDIU S0,S0,0008 ;S0+=8: DL -SW S0,0028 (SP) ;SP+28=S0: DL -JAL 7000441C ;V0=width -ADDIU S0,S0,0008 ;S0+=8 -JAL 7000442C ;V0=height -SH V0,0022 (SP) ;SP+22=V0: width -//7F01C15C: -LH T9,0022 (SP) ;T9=SP+22: width -ADDIU T5,V0,FFFF ;T5=height-1 -LW V1,0028 (SP) ;V1=SP+28: DL -ANDI T6,T5,03FF ;T6=(height-1)& 0x3FF -ADDIU T0,T9,FFFF ;T0=width-1 -ANDI T1,T0,03FF ;T1=(width-1) & 0x3FF -SLL T7,T6,0x2 ;T7=(height * 4) lower right y -LUI AT,F600 -OR T8,T7,AT ;T8=F6000FFC -SLL T2,T1,0xE ;T2=width * 0x4000: lower right x -OR T3,T8,T2 ;T3=F6000000 | lrx | lry -SW T3,0000 (V1) ;T3->DL: fillrect - lrx 0x13F, lry 0xEF -SW R0,0004 (V1) ; 0->DL: fillrect - ulx 0, uly 0 -LW RA,001C (SP) -OR V0,S0,R0 ;V0=S0: new DL address -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0038 - -7000E8B0: F4B0 -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) ;SP+18=A0: -LW T6,0018 (SP) ;T6=A0 -LUI AT,8000 -SW RA,0014 (SP) -SLTU AT,T6,AT ;AT=TRUE if A0 < 80000000 -BNEZ AT,7000E8E8 ;branch if not in 70- range -LUI AT,A000 -SLTU AT,T6,AT ;AT=TRUE if A0 < A0000000 -BEQ AT,R0,7000E8E8 ;branch if not in 80- range -LUI AT,1FFF -ORI AT,AT,FFFF ;AT=1FFFFFFF -BEQ R0,R0,7000E91C -AND V0,T6,AT ;V0=A0 & 1FFFFFFF: address mask -//7000E8E8: -LW T7,0018 (SP) ;T7=A0 -LUI AT,A000 -SLTU AT,T7,AT ;AT=TRUE if A0 < A0000000 -BNEZ AT,7000E914 ;branch if not in 80- range -LUI AT,C000 -SLTU AT,T7,AT ;AT=TRUE if A0 < C0000000 -BEQ AT,R0,7000E914 ;branch if not in A0- range -LUI AT,1FFF -ORI AT,AT,FFFF -BEQ R0,R0,7000E91C -AND V0,T7,AT ;V0=A0 & 1FFFFFFF: address mask -//7000E914: -JAL 70019020 ;translate virtual address? -LW A0,0018 (SP) -//7000E91C: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BD714: F2244 allocate A0 space in geometry memory - accepts: A0=size of data to allocate - returns: V0=p->allocated space -LUI A2,8009 -ADDIU A2,A2,C24C ;A2=8008C24C -LW V0,0000 (A2) ;V0=8008C24C: p->next bit of space for DL -ADDIU A0,A0,000F -ORI T6,A0,000F -XORI T7,T6,000F ;T7=A0 to nearest 0x10 boundry -ADDU T8,V0,T7 ;T8=DL target + size of data -JR RA -SW T8,0000 (A2) ;T8->8008C24C: updated DL position - -7F058020: 8CB50 copy submatrix from A0 to A1 - fries: V0,V1,A0,A1,A2,F4,F6,F8,F10 -OR A2,A0,R0 ;A2=A0: DL -ADDIU A0,R0,0004 ;A0=4 -OR V0,R0,R0 ;V0=0 -OR V1,A1,R0 ;V1=A1: allocated memory -//7F058030: copy each line -LWC1 F4,0000 (A2) -ADDIU V0,V0,0001 ;V0++ -ADDIU V1,V1,0010 ;V1+=0x10 -SWC1 F4,FFF0 (V1) -LWC1 F6,0004 (A2) -ADDIU A2,A2,0010 ;A2+=0x10 -SWC1 F6,FFF4 (V1) -LWC1 F8,FFF8 (A2) -SWC1 F8,FFF8 (V1) -LWC1 F10,FFFC (A2) -BNE V0,A0,7F058030 ;loop 4 times -SWC1 F10,FFFC (V1) -//7F058060: return -JR RA -NOP - -7F06EFC4: A3AF4 -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LW T6,0008 (A0) ;T6=A0+8: p->obj.header -OR S1,A0,R0 ;S1=A0: p->obj.instance -LW S0,0000 (T6) ;S0=obj.header+0: p->obj.table -BEQL S0,R0,7F06F0C0 ;branch if invalid -LW RA,001C (SP) -//7F06EFE8: -LHU V0,0000 (S0) ;V0=entry type -ANDI T7,V0,00FF ;T7=entry type (no flags) -ADDIU T8,T7,FFFF ;T8=entry-1 -SLTIU AT,T8,0018 ;AT=TRUE if type 1-18 -BEQ AT,R0,7F06F078 ;branch if invalid type -SLL T8,T8,0x2 ;T8=type->offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,4C80 (AT) ;T8=80054C80+offset: TLB pointer for entry type -JR T8 -NOP -7F06F014: type 8 - distance trigger -OR A0,S1,R0 -JAL 7F06E858 -OR A1,S0,R0 -BEQ R0,R0,7F06F07C -LW V0,0014 (S0) -7F06F028: type 9 - head/hat placement interlink -OR A0,S1,R0 -JAL 7F06EB3C -OR A1,S0,R0 -BEQ R0,R0,7F06F07C -LW V0,0014 (S0) -7F06F03C: type 7 - unknown type -OR A0,S1,R0 -JAL 7F06ECF8 -OR A1,S0,R0 -BEQ R0,R0,7F06F07C -LW V0,0014 (S0) -7F06F050: type 12 - handle/switch -OR A0,S1,R0 -JAL 7F06E9BC -OR A1,S0,R0 -BEQ R0,R0,7F06F07C -LW V0,0014 (S0) -7F06F064: type 17 - placeholder for pointer to head -OR A0,S1,R0 -JAL 7F06EA08 -OR A1,S0,R0 -BEQ R0,R0,7F06F07C -LW V0,0014 (S0) -7F06F078: default -LW V0,0014 (S0) -BEQ V0,R0,7F06F08C -NOP -BEQ R0,R0,7F06F0B4 -OR S0,V0,R0 -//7F06F08C: -BEQ S0,R0,7F06F0B4 -NOP -//7F06F094: -LW V0,000C (S0) -BEQL V0,R0,7F06F0AC -LW S0,0008 (S0) -BEQ R0,R0,7F06F0B4 -OR S0,V0,R0 -//7F06F0A8: -LW S0,0008 (S0) -BNEL S0,R0,7F06F098 -LW V0,000C (S0) -//7F06F0B4: -BNEL S0,R0,7F06EFEC -LHU V0,0000 (S0) -//7F06F0BC: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/Legal Screen.txt b/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/Legal Screen.txt deleted file mode 100644 index 885aa5f..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/Legal Screen.txt +++ /dev/null @@ -1,161 +0,0 @@ -Text appearing on legal screen spans 8002A9CC-8002AABC [0x9C3C-0x9D2C] -Init. for legal screen object 8002AABC-8002AAF8 [0x9D2C-0x9D68] - -8002AABC: -0,1,3,0, -0,0,0,0, -0,0,0,0, -0,0,0,0 - - -format: -0x0 4 x pos -0x4 4 y pos -0x8 4 alignment: 0-left align, 1-center, 2-right align -0xC 4 line offset: x lines up/down; same as +/-8 in y pos -0x10 2 text ID# -0x12 2 RESERVED - -Used WITHIN: 7F00A8E0 0x -7F00A8E0 displays legal screen - accepts: A0=p->display list -ADDIU SP,SP,FED8 -SW S1,0034 (SP) -LUI T6,8003 -ADDIU S1,SP,00E4 ;S1=SP+E4: p->buffer -SW S4,0040 (SP) -ADDIU T6,T6,AABC ;T6=8002AABC -OR S4,A0,R0 ;S4=A0: p->DL -SW RA,0044 (SP) -SW S3,003C (SP) -SW S2,0038 (SP) -SW S0,0030 (SP) -ADDIU T9,T6,003C -OR T0,S1,R0 ;T0=buffer -//7F00A914: copy 0x3C bytes from 8002AABC to buffer -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T6) -SW AT,FFF8 (T0) -LW AT,FFFC (T6) -BNE T6,T9,7F00A914 -SW AT,FFFC (T0) -//7F00A938: display image -LW AT,0000 (T6) -OR A0,S4,R0 ;A0=S4: p->DL -JAL 7F01C0D0 ;insert image DL via data @ 800232A8 -SW AT,0000 (T0) -//7F00A948: -MTC1 R0,F0 -LUI AT,3F80 -MTC1 AT,F4 -ADDIU S0,SP,00A0 ;S0=SP+A0: buffer -MFC1 A1,F0 ;A1=0 -MFC1 A2,F0 ;A2=0 -OR S4,V0,R0 ;S4=V0: update DL -OR A0,S0,R0 ;A0=S0: p->buffer -LUI A3,457A ;A3=4000.0 (457A0000) -SWC1 F0,0010 (SP) ;SP+10=0 -SWC1 F0,0014 (SP) ;SP+14=0 -SWC1 F0,0018 (SP) ;SP+18=0 -SWC1 F0,001C (SP) ;SP+1C=0 -SWC1 F0,0024 (SP) ;SP+24=0 -JAL 7F059694 -SWC1 F4,0020 (SP) ;SP+20=1.0 -//7F00A988: -LUI S3,8003 -ADDIU S3,S3,A958 ;S3=8002A958 -LW T1,0000 (S3) ;T1=8002A958: p->object instance for legal screen -SW S0,00E4 (SP) ;SP+E4=S0: set p->generated float data -LW T2,0008 (T1) ;T2=p->header entry for legal screen -LH A0,000E (T2) ;A0=header+E: #obj.groups -SLL T3,A0,0x6 -JAL 7F0BD714 ;p->A0 allocated space in geometry mem -OR A0,T3,R0 ;A0<<=6: A0*=40 -SW V0,00F4 (SP) ;SP+F4=V0: p->mem -OR A0,S0,R0 ;A0=S0: p->floats -JAL 7F058020 ;copy 0x40 bytes from A0 to A1 -OR A1,V0,R0 ;A1=V0: p->mem -LW T4,00F4 (SP) ;T4=p->mem -LW T5,0000 (S3) ;T5=p->obj.instance for legal screen -SW T4,000C (T5) ;T5+C= p->mem: save to obj.instance -JAL 7F06EF68 -LW A0,0000 (S3) ;A0=S3: p->obj.instance -ADDIU T8,R0,0003 -SW T8,00EC (SP) ;3->SP+EC: already initialized to value -SW R0,00E8 (SP) ;0->SP+E8: fry dirty flag -SW S4,00F0 (SP) ;SP+F0=S4: save DL -OR A0,S1,R0 ;A0=S1: p->buffer -JAL 7F074684 -LW A1,0000 (S3) ;A1=p->obj.instance for legal screen -LW V0,0000 (S3) ;V0=p->obj.instance for legal screen -LW S4,00F0 (SP) ;S4= p->DL -OR S0,R0,R0 ;S0=0 init.count -LW T7,0008 (V0) ;T7=p->obj.header -OR S1,R0,R0 ;S1=0 init.offset -ADDIU S2,SP,0058 ;S2=SP+58: p->buffer -LH T9,000E (T7) ;T9=#obj.groups -BLEZ T9,7F00AA58 ;branch if none to work with -NOP -//7F00AA10: fiddle with each object group -LW T6,000C (V0) ;T6=p->mem -OR A1,S2,R0 ;A1=S2: p->buffer -JAL 7F058020 -ADDU A0,T6,S1 ;A0=T6+S1: mem+offset -LW T0,0000 (S3) ;T0=p->obj.instance for legal screen -SLL T2,S0,0x6 ;T2=count*40 -OR A0,S2,R0 ;A0=S2: p->buffer -LW T1,000C (T0) ;T1=p->mem -JAL 7F058C9C -ADDU A1,T1,T2 ;A1=T1+T2: mem+offset -LW V0,0000 (S3) ;V0=p->obj.instance for legal screen -ADDIU S0,S0,0001 ;S0++ count++ -ADDIU S1,S1,0040 ;S1+=40 offset+=40 -LW T3,0008 (V0) ;T3=p->header -LH T4,000E (T3) ;T4=#obj.groups -SLT AT,S0,T4 -BNEL AT,R0,7F00AA14 ;branch if count<#groups -LW T6,000C (V0) -//7F00AA58: -JAL 7F0ACD98 ;microcode initializer for text -OR A0,S4,R0 ;A0=S4: p->DL -//7F00AA60: 0x3F590 init. variables for legal text -LUI S0,8003 -LUI S1,8003 -LUI S3,8004 -LUI S2,8004 -OR S4,V0,R0 ;S4=V0: update DL -ADDIU S0,S0,A9CC ;S0=8002A9CC: start of legal screen text -ADDIU S1,S1,AABC ;S1=8002AABC: end of legal screen text -ADDIU S2,S2,0EB8 -ADDIU S3,S3,0EB4 -//7F00AA84: 0x3F5B4 write each line of text to screen -JAL 7F0C1DD8 ;V0=p->text -LHU A0,0010 (S0) ;A0=textID -LW T5,000C (S0) ;T5=line offset -LW A1,0000 (S0) ;A1=x pos -LW A2,0004 (S0) ;A2=y pos -LW A3,0008 (S0) ;A3=alignment -LW T8,0000 (S2) ;T8=p->font1 -LW T7,0000 (S3) ;T7=p->font2 -SW V0,0014 (SP) ;SP+14=p->text -OR A0,S4,R0 ;A0=S4: p->DL -SW T5,0010 (SP) ;SP+10=width multiplier -SW T8,0018 (SP) ;SP+18=p->font1 -JAL 7F00A7E4 ;display aligned white text to screen -SW T7,001C (SP) ;SP+1C=p->font2 -ADDIU S0,S0,0014 ;S0+=14: advance to next entry -SLTU AT,S0,S1 -BNEZ AT,7F00AA84 ;loop until at endpoint -OR S4,V0,R0 ;S4=V0: update DL -//7F00AACC: return to sender -LW RA,0044 (SP) -LW S0,0030 (SP) -LW S1,0034 (SP) -LW S2,0038 (SP) -LW S3,003C (SP) -LW S4,0040 (SP) -JR RA -ADDIU SP,SP,0128 diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img1.tga b/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img1.tga deleted file mode 100644 index bd9666c..0000000 Binary files a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img1.tga and /dev/null differ diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img2.tga b/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img2.tga deleted file mode 100644 index 3a9c633..0000000 Binary files a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img2.tga and /dev/null differ diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img3.tga b/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img3.tga deleted file mode 100644 index 46f068f..0000000 Binary files a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img3.tga and /dev/null differ diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img4.tga b/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img4.tga deleted file mode 100644 index 4148f7c..0000000 Binary files a/notes/GE Documentation/Main Menus/Intro/Menu 00 - Legal Screen/images/7EDCB0-img4.tga and /dev/null differ diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 01 - Nintendo Logo/7F00ACC8 - menu 01 interface - Nintendo logo.txt b/notes/GE Documentation/Main Menus/Intro/Menu 01 - Nintendo Logo/7F00ACC8 - menu 01 interface - Nintendo logo.txt deleted file mode 100644 index 8952fa1..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 01 - Nintendo Logo/7F00ACC8 - menu 01 interface - Nintendo logo.txt +++ /dev/null @@ -1,59 +0,0 @@ -7F00ACC8: 3F7F8 menu 01 interface: Nintendo logo -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 ;F12= [42700000] -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,19FC (AT) ;F12=800519FC: -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000]: -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A00 (AT) ;F14=80051A00: -JAL 70004534 -OR A0,R0,R0 -//7F00AD08: increment and test timer -LUI V0,8003 -ADDIU V0,V0,A8CC ;V0=8002A8CC -LUI T7,8005 -LW T7,8374 (T7) ;T7=80048374: clock timer -LW T6,0000 (V0) ;T6=8002A8CC: menu timer -ADDIU A1,R0,0001 ;A1=1: return -OR A0,R0,R0 ;A0=0 -ADDU T8,T6,T7 ;T8=T6+T7: advance timer using CPU clock -SLTI AT,T8,01F5 ;TRUE if timer < 501 (0x1F5) -BNEZ AT,7F00AD44 ;branch if timer still running -SW T8,0000 (V0) ;T8->8002A8CC: advance menu timer -//7F00AD34: advance to next menu when time elapsed -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A0,R0,0002 ;A0=2: menu 02 - Rareware logo -BEQ R0,R0,7F00AD8C ;return -LW RA,0014 (SP) -//7F00AD44: test if button pressed advance -JAL 7000C3AC ;test if buttons pressed -ORI A1,R0,FFFF ;A1=FFFF: any button -BEQ V0,R0,7F00AD88 ;return if none pressed -LUI T0,8003 -LW T0,A930 (T0) ;T0=8002A930: TRUE if first time through menus -ADDIU T1,R0,0001 -LUI AT,8003 -BNEZ T0,7F00AD7C ;branch if first time -ADDIU A0,R0,0002 ;A0=2: menu 02 - Rareware logo -//7F00AD68: -ADDIU A0,R0,0005 ;A0=5: menu 05 - file selection screen -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00AD8C ;return -LW RA,0014 (SP) -//7F00AD7C: -SW T1,A934 (AT) ;1->8002A934: -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -//7F00AD88: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 01 - Nintendo Logo/7F00AD98 - menu 01 constructor - Nintendo logo.txt b/notes/GE Documentation/Main Menus/Intro/Menu 01 - Nintendo Logo/7F00AD98 - menu 01 constructor - Nintendo logo.txt deleted file mode 100644 index 5a86b9a..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 01 - Nintendo Logo/7F00AD98 - menu 01 constructor - Nintendo logo.txt +++ /dev/null @@ -1,179 +0,0 @@ -ADDIU SP,SP,FE98 -SW S2,0034 (SP) -LUI T6,8003 -ADDIU S2,SP,0128 -ADDIU T6,T6,AB08 -SW RA,003C (SP) -SW S3,0038 (SP) -SW S1,0030 (SP) -SW S0,002C (SP) -ADDIU T9,T6,003C -OR T0,S2,R0 -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T6) -SW AT,FFF8 (T0) -LW AT,FFFC (T6) -BNE T6,T9,7F00ADC4 -SW AT,FFFC (T0) -LW AT,0000 (T6) -JAL 7F01C0D0 -SW AT,0000 (T0) -LUI T1,BC00 -LUI T2,8000 -LUI T3,0386 -LUI T4,8003 -ADDIU T4,T4,A990 -ORI T3,T3,0010 -ORI T2,T2,0040 -ORI T1,T1,0002 -SW T1,0000 (V0) -SW T2,0004 (V0) -SW T3,0008 (V0) -SW T4,000C (V0) -ADDIU T5,V0,0018 -LUI A0,8003 -SW T5,0168 (SP) -LUI T8,0388 -ADDIU A0,A0,A988 -ORI T8,T8,0010 -SW T8,0010 (V0) -SW A0,0014 (V0) -LUI T7,8003 -LW T7,A8CC (T7) -ADDIU A1,R0,00FF -LUI AT,FFFE -MULTU T7,A1 -ORI AT,AT,8F72 -LUI V0,8007 -ADDIU V0,V0,9614 -MFLO T9 -ADDU T6,T9,AT -ADDIU AT,R0,0064 -DIV T6,AT -MFLO T0 -SUBU V1,A1,T0 -SLTI AT,V1,0100 -BNEZ AT,7F00AE8C -NOP -ADDIU V1,R0,00FF -BGEZ V1,7F00AE98 -LUI AT,8005 -OR V1,R0,R0 -SB V1,0006 (A0) -SB V1,0005 (A0) -SB V1,0004 (A0) -SB V1,0002 (A0) -SB V1,0001 (A0) -SB V1,0000 (A0) -LWC1 F6,1A04 (AT) -LWC1 F4,0000 (V0) -ADDIU S1,SP,0090 -OR A1,S1,R0 -ADD.S F8,F4,F6 -SWC1 F8,0000 (V0) -JAL 7F0585FC -LWC1 F12,0000 (V0) -LUI S0,8007 -ADDIU S0,S0,9618 -LWC1 F12,0000 (S0) -JAL 7F058BB8 -OR A1,S1,R0 -LUI AT,8005 -LWC1 F0,1A08 (AT) -LUI AT,8005 -LWC1 F16,1A0C (AT) -LWC1 F10,0000 (S0) -LUI AT,3F80 -MTC1 AT,F6 -MUL.S F18,F10,F16 -LUI A3,457A -SWC1 F18,0000 (S0) -LWC1 F4,0000 (S0) -C.LT.S F0,F4 -NOP -BC1FL 7F00AF28 -MTC1 R0,F0 -SWC1 F0,0000 (S0) -MTC1 R0,F0 -ADDIU S0,SP,00E0 -OR A0,S0,R0 -MFC1 A1,F0 -MFC1 A2,F0 -SWC1 F6,0020 (SP) -SWC1 F0,0010 (SP) -SWC1 F0,0014 (SP) -SWC1 F0,0018 (SP) -SWC1 F0,001C (SP) -JAL 7F059694 -SWC1 F0,0024 (SP) -OR A0,S0,R0 -JAL 7F058068 -OR A1,S1,R0 -OR A0,S1,R0 -JAL 7F058020 -OR A1,S0,R0 -LUI S3,8003 -ADDIU S3,S3,A958 -LW T1,0000 (S3) -SW S0,0128 (SP) -LW T2,0008 (T1) -LH A0,000E (T2) -SLL T3,A0,0x6 -JAL 7F0BD714 -OR A0,T3,R0 -SW V0,0138 (SP) -OR A0,S0,R0 -JAL 7F058020 -OR A1,V0,R0 -LW T4,0138 (SP) -LW T5,0000 (S3) -SW T4,000C (T5) -JAL 7F06EFC4 -LW A0,0000 (S3) -LW T7,0168 (SP) -ADDIU T8,R0,0003 -SW T8,0130 (SP) -SW R0,012C (SP) -OR A0,S2,R0 -LW A1,0000 (S3) -JAL 7F074684 -SW T7,0134 (SP) -LW T9,0134 (SP) -LW V0,0000 (S3) -OR S0,R0,R0 -SW T9,0168 (SP) -LW T6,0008 (V0) -OR S1,R0,R0 -ADDIU S2,SP,0050 -LH T0,000E (T6) -BLEZL T0,7F00B048 -LW RA,003C (SP) -LW T1,000C (V0) -OR A1,S2,R0 -JAL 7F058020 -ADDU A0,T1,S1 -LW T2,0000 (S3) -SLL T4,S0,0x6 -OR A0,S2,R0 -LW T3,000C (T2) -JAL 7F058C9C -ADDU A1,T3,T4 -LW V0,0000 (S3) -ADDIU S0,S0,0001 -ADDIU S1,S1,0040 -LW T5,0008 (V0) -LH T8,000E (T5) -SLT AT,S0,T8 -BNEL AT,R0,7F00B000 -LW T1,000C (V0) -LW RA,003C (SP) -LW V0,0168 (SP) -LW S0,002C (SP) -LW S1,0030 (SP) -LW S2,0034 (SP) -LW S3,0038 (SP) -JR RA -ADDIU SP,SP,0168 diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 02 - Rareware Logo/7F00B0AC - menu 02 interface - Rareware logo.txt b/notes/GE Documentation/Main Menus/Intro/Menu 02 - Rareware Logo/7F00B0AC - menu 02 interface - Rareware logo.txt deleted file mode 100644 index e755771..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 02 - Rareware Logo/7F00B0AC - menu 02 interface - Rareware logo.txt +++ /dev/null @@ -1,39 +0,0 @@ -7F00B0AC: 3FBDC menu 02 interface: Rareware logo -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70004534 -OR A0,R0,R0 -JAL 7F008DD0 -NOP -BEQ V0,R0,7F00B0E0 ;branch if zero -OR A0,R0,R0 ;A0=0: player 1 -//7F00B0CC -ADDIU A0,R0,0003 ;A0=3: menu 03 - Eye intro -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00B128 ;return -LW RA,0014 (SP) -//7F00B0E0: button pressing action -JAL 7000C3AC ;test if buttons pressed -ORI A1,R0,FFFF ;A1=FFFF: any button -BEQ V0,R0,7F00B124 ;return if none pressed -LUI T6,8003 -LW T6,A930 (T6) ;T6=8002A930: TRUE if first time through intros -ADDIU T7,R0,0001 -LUI AT,8003 -BNEZ T6,7F00B118 ;branch if first time through intros -ADDIU A0,R0,0003 ;A0=3: menu 03 - Eye intro -ADDIU A0,R0,0005 ;A0=5: menu 05 - folder select screen -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00B128 ;return -LW RA,0014 (SP) -//7F00B118: normal advance: menu 03 - Eye intro -SW T7,A934 (AT) ;1->8002A934: -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -//7F00B124: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 02 - Rareware Logo/7F00B134 - menu 02 constructor - Rareware logo.txt b/notes/GE Documentation/Main Menus/Intro/Menu 02 - Rareware Logo/7F00B134 - menu 02 constructor - Rareware logo.txt deleted file mode 100644 index 64558b2..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 02 - Rareware Logo/7F00B134 - menu 02 constructor - Rareware logo.txt +++ /dev/null @@ -1,11 +0,0 @@ -7F00B134: 3FC64 menu 02 constructor - Rareware logo -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F008BDC -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F008BDC: 3D70C retrieve and display the Rareware logo diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/7F00B1B0 - menu 03 interface - Eye intro.txt b/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/7F00B1B0 - menu 03 interface - Eye intro.txt deleted file mode 100644 index e93810e..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/7F00B1B0 - menu 03 interface - Eye intro.txt +++ /dev/null @@ -1,39 +0,0 @@ -7F00B1B0: 3FCE0 menu 03 interface - Eye intro -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70004534 -OR A0,R0,R0 -JAL 7F009744 -NOP -BEQ V0,R0,7F00B1E4 -OR A0,R0,R0 ;A0=0: player 1 -//7F00B1D0: -ADDIU A0,R0,0004 ;A0=4: menu 4 - GoldenEye splash screen -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00B22C ;return -LW RA,0014 (SP) -//7F00B1E4: button pressing action -JAL 7000C3AC ;test if buttons pressed -ORI A1,R0,FFFF ;A1=FFFF: any button -BEQ V0,R0,7F00B228 ;return if none pressed -LUI T6,8003 -LW T6,A930 (T6) ;T6=8002A930: set when intros have already been viewed (game reset to intros) -ADDIU T7,R0,0001 -LUI AT,8003 -BNEZ T6,7F00B21C ;branch if nonzero -ADDIU A0,R0,0004 ;A0=4: -ADDIU A0,R0,0005 ;A0=5: menu 5 - file select screen -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00B22C ;return -LW RA,0014 (SP) -//7F00B21C: normal advance: menu 4 - GoldenEye splash screen -SW T7,A934 (AT) ;1->8002A934: -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -//7F00B228: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/7F00B238 - menu 03 constructor - Eye intro.txt b/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/7F00B238 - menu 03 constructor - Eye intro.txt deleted file mode 100644 index 25c2fb0..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/7F00B238 - menu 03 constructor - Eye intro.txt +++ /dev/null @@ -1,350 +0,0 @@ -7F00B238 3FD68 menu 03 constructor - Eye intro -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F009254 ;construct Eye intro -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F009254 3DD84 construct Eye intro - accepts: A0=p->display list -LUI V0,8003 -ADDIU V0,V0,A7D0 -LW T6,0000 (V0) ;T6=8002A7D0: -ADDIU T7,R0,0001 -LUI T9,8003 -SUBU T8,T7,T6 -SW T8,0000 (V0) ;1-value ->8002A7D0 -LBU T9,A7D4 (T9) ;T9=8002A7D4: step -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU T0,T9,FFFE ;T0=step-2 -SLTIU AT,T0,0007 -BEQ AT,R0,7F009730 ;return if 0-1 or 9+ -OR A1,A0,R0 ;A1=A0: p->DL -//7F00928C: jump to step handler -SLL T0,T0,0x2 -LUI AT,8005 -ADDU AT,AT,T0 -LW T0,F2E0 (AT) ;T0=8004F2E0+offset: -JR T0 -NOP -//7F0092A4: step 2 -JAL 7F007A40 -OR A0,A1,R0 ;A0=p->DL -LUI A3,8007 -ADDIU A3,A3,9574 -LUI AT,40C0 -MTC1 AT,F6 -LWC1 F4,0000 (A3) ;F4=80069574: Eye.pos.leading -LUI V1,8007 -ADDIU V1,V1,9584 -ADD.S F8,F4,F6 -LH A0,0000 (V1) ;A0=80069584: eye differential -OR A1,V0,R0 -BGEZ A0,7F009300 ;update position every 200 cycles -SWC1 F8,0000 (A3) ;pos += 6.0: rate first circle moves at -//7F0092DC: if negative update trailing position -LUI AT,4140 -MTC1 AT,F10 -LWC1 F0,0000 (A3) -ADDIU T1,R0,00C8 -SH T1,0000 (V1) ;80069584+=200 (0xC8) -SUB.S F16,F0,F10 -LUI AT,8007 -BEQ R0,R0,7F00930C -SWC1 F16,957C (AT) ;8006957C: Eye.pos.trailing = Eye.pos.leading - 12.0 -//7F009300: if positive play with count -ADDIU T2,A0,FFFA -SH T2,0000 (V1) ;80069584-=6 -LWC1 F0,0000 (A3) -//7F00930C: go to next segment after time met -LUI AT,8005 -LWC1 F18,F2FC (AT) ;F18=8004F2FC: 1390.0 step 2 run length -C.LT.S F18,F0 -NOP -BC1F 7F009730 ;return when time not met -LUI T3,8003 -LBU T3,A7D4 (T3) -LUI AT,8003 -ADDIU T4,T3,0001 -SB T4,A7D4 (AT) ;8002A7D4+=1: next step -LUI AT,8005 -LWC1 F4,F300 (AT) ;F4=8004F300: 1276.0 -BEQ R0,R0,7F009730 -SWC1 F4,0000 (A3) ;save as Eye.pos -//7F009344: step 3 -LUI T7,0100 -ADDIU T7,T7,0000 -OR V0,A1,R0 -LUI T5,0600 -SW T5,0000 (V0) ;DL+0= rsp.displaylist.u: push -SW T7,0004 (V0) ;DL+4= rsp.displaylist.l: 01000000 -JAL 7F01C0D0 ;insert image DL -ADDIU A0,A1,0008 ;A0=A1+8: next DL -JAL 7F01C0D0 ;insert image DL -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F01C0D0 ;insert image DL -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F01C0D0 ;insert image DL -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F01C0D0 ;insert image DL -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F007D8C ;insert sniper sight in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F007B94 ;insert sight backdrop in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -LUI A3,8007 -ADDIU A3,A3,9574 -LUI AT,4416 -MTC1 AT,F6 -LWC1 F0,0000 (A3) ;F0=80069574: Eye.pos -OR A1,V0,R0 -C.LT.S F0,F6 -NOP -BC1F 7F0093D4 ;skip if Eye.pos >= 600.0 -NOP -//7F0093BC: display Bond -JAL 7F0082C8 ;insert Bond in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -LUI A3,8007 -ADDIU A3,A3,9574 -LWC1 F0,0000 (A3) ;F0=80069574: Eye.pos -OR A1,V0,R0 -//7F0093D4: shift Eye left 5.8 -LUI AT,8005 -LWC1 F8,F304 (AT) ;F8=8004F304: 5.8 -LUI AT,C2A0 -MTC1 AT,F16 -SUB.S F10,F0,F8 -LUI A2,8003 -ADDIU A2,A2,A8A0 -LUI T6,8003 -SWC1 F10,0000 (A3) ;Eye.pos -= 5.8 -LWC1 F18,0000 (A3) -C.LE.S F18,F16 -NOP -BC1FL 7F009734 ;return if Eye.pos >= -80.0 -LW RA,0014 (SP) -//7F00940C: next step -LBU T6,A7D4 (T6) -LUI AT,8003 -ADDIU T9,R0,0014 -ADDIU T8,T6,0001 -SB T8,A7D4 (AT) ;8002A7D4 += 1: next step -BEQ R0,R0,7F009730 -SW T9,0000 (A2) ;14->8002A8A0: count -//7F009428: step 4 -JAL 7F007D8C ;insert sniper sight in Eye intro -OR A0,A1,R0 -JAL 7F007B94 ;insert sight backdrop in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F0082C8 ;insert Bond in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -LUI A2,8003 -ADDIU A2,A2,A8A0 -LW T0,0000 (A2) ;T0=8002A8A0: count -OR A1,V0,R0 -LUI T3,8003 -ADDIU T1,T0,FFFF -BGEZ T1,7F009730 ;return first 20 iterations -SW T1,0000 (A2) ;8002A8A0-=1 -//7F009460: next step -LBU T3,A7D4 (T3) -LUI AT,8003 -OR A0,R0,R0 ;A0=0: start -ADDIU T4,T3,0001 -SB T4,A7D4 (AT) ;8002A7D4 += 1: next step -JAL 7F01C284 ;start or stop (A0) red bleeding animation -SW V0,0018 (SP) -LUI A2,8003 -LUI AT,8003 -ADDIU A2,A2,A8A0 -SW R0,A8A4 (AT) ;0->8002A8A4: bleeding state -ADDIU T5,R0,0001 -LW A1,0018 (SP) ;A1=p->DL -BEQ R0,R0,7F009730 -SW T5,0000 (A2) ;1->8002A8A0: count -//7F00949C: step 5 -LUI A2,8003 -ADDIU A2,A2,A8A0 -LW T7,0000 (A2) -ADDIU A0,R0,0001 ;A0=1: stop -ADDIU T6,T7,FFFF -BNE T6,R0,7F0094DC ;skip every so many tests -SW T6,0000 (A2) ;8002A8A0-=1: count-=1 -//7F0094B8: test state of bleeding -JAL 7F01C284 ;start or stop (A0) red bleeding animation -SW A1,0018 (SP) -LUI A2,8003 -LUI AT,8003 -SW V0,A8A4 (AT) ;V0->8002A8A4: bleeding state -ADDIU A2,A2,A8A0 -ADDIU T9,R0,0002 -LW A1,0018 (SP) -SW T9,0000 (A2) ;2->8002A8A0: don't test for 2 more iterations -//7F0094DC: -JAL 7F007D8C ;insert sniper sight in Eye intro -OR A0,A1,R0 ;A0=A1: p->DL -JAL 7F007B94 ;insert sight backdrop in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F0082C8 ;insert Bond in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F01C400 -OR A0,V0,R0 ;A0=V0: p->DL -LUI T0,8003 -LW T0,A8A4 (T0) ;T0=8002A8A4: bleeding state -LUI A2,8003 -ADDIU A2,A2,A8A0 -BEQ T0,R0,7F009730 ;return if running -OR A1,V0,R0 -//7F009514: next step -LUI T1,8003 -LBU T1,A7D4 (T1) -LUI A3,8007 -LUI AT,8003 -ADDIU T2,T1,0001 -ADDIU A3,A3,9574 -SB T2,A7D4 (AT) ;8002A7D4+=1: next step -LWC1 F4,0000 (A3) ;F4=80069574: time in Eye -LUI V1,8007 -ADDIU V1,V1,9584 -SH R0,0000 (V1) ;0->80069584: init. drift.cur -LUI AT,8007 -SWC1 F4,957C (AT) ;time in Eye->8006957C: -BEQ R0,R0,7F009730 -SW R0,0000 (A2) ;0->8002A8A0: init. count -//7F009550: step 6 -LUI V1,8007 -LUI A2,8003 -ADDIU A2,A2,A8A0 -ADDIU V1,V1,9584 -LH T3,0000 (V1) ;T3=80069584: drift.cur -LW T5,0000 (A2) ;T5=8002A8A0: count -SW A1,0018 (SP) -ADDIU T4,T3,038E -ADDIU T7,T5,0001 -SH T4,0000 (V1) ;80069584+=38E: update drift -SW T7,0000 (A2) ;8002A8A0+=1 -JAL 70016C60 ;V0= next eye intro drift -ANDI A0,T4,FFFF ;A0=drift->short -MTC1 V0,F6 -LUI AT,4280 -MTC1 AT,F10 -CVT.S.W F8,F6 ;F8=drift.next->float -LUI AT,4700 -MTC1 AT,F18 -LUI AT,8007 -LWC1 F6,957C (AT) ;F6=8006957C: time -LUI A3,8007 -MUL.S F16,F8,F10 -ADDIU A3,A3,9574 -LW A0,0018 (SP) ;A0= p->DL -DIV.S F4,F16,F18 ;F4 = (drift.next * 64.0) / 32768.0 -ADD.S F8,F4,F6 -JAL 7F007D8C ;insert sniper sight in Eye intro -SWC1 F8,0000 (A3) ;80069574= (drift.next * 64.0) / 32768.0 + time -JAL 7F007B94 ;insert sight backdrop in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F0082C8 ;insert Bond in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F01CA18 -OR A0,V0,R0 ;A0=V0: p->DL -LUI A2,8003 -ADDIU A2,A2,A8A0 -LW T6,0000 (A2) ;T6=8002A8A0: count -OR A1,V0,R0 -LUI V0,8003 -SLTI AT,T6,006C -BNE AT,R0,7F009730 ;return if count < 108 (0x6C) -ADDIU V0,V0,A7D4 -//7F0095FC: next step -LBU T8,0000 (V0) -SW R0,0000 (A2) ;0->8002A8A0: init. count -ADDIU T9,T8,0001 -BEQ R0,R0,7F009730 -SB T9,0000 (V0) ;8002A7D4+=1: next step -//7F009610: step 7 -LUI V1,8007 -ADDIU V1,V1,9584 -LH T0,0000 (V1) ;T0=80069584: drift.cur -SW A1,0018 (SP) -ADDIU T1,T0,038E -SH T1,0000 (V1) ;update 80069584: drift+=38E -JAL 70016C60 ;V0= next eye intro drift -ANDI A0,T1,FFFF ;dtrift->short -MTC1 V0,F10 -LUI AT,4280 -MTC1 AT,F18 -CVT.S.W F16,F10 -LUI AT,4700 -MTC1 AT,F6 -LUI AT,8007 -LWC1 F10,957C (AT) ;F10=8006957C: -LUI A3,8007 -MUL.S F4,F16,F18 -ADDIU A3,A3,9574 -LW A0,0018 (SP) -DIV.S F8,F4,F6 ;F8= (drift.next * 64.0) / 32768.0 -ADD.S F16,F8,F10 -JAL 7F007D8C ;insert sniper sight in Eye intro -SWC1 F16,0000 (A3) ;80069574 = (drift.next * 64.0) / 32768.0 + time -JAL 7F007B94 ;insert sight backdrop in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F0082C8 ;insert Bond in Eye intro -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F01CA18 -OR A0,V0,R0 ;A0=V0: p->DL -LUI A2,8003 -ADDIU A2,A2,A8A0 -LW T2,0000 (A2) ;T2=8002A8A0: count -OR A0,V0,R0 ;A0=V0: p->DL -ADDIU A1,T2,0008 -JAL 7F007E70 -SW A1,0000 (A2) ;count+=8 -LUI A2,8003 -ADDIU A2,A2,A8A0 -LW T4,0000 (A2) -OR A1,V0,R0 -LUI V0,8003 -SLTI AT,T4,00F7 -BNE AT,R0,7F009730 ;return if count < 0xF7 -ADDIU V0,V0,A7D4 -//7F0096C4: next step -LBU T5,0000 (V0) -SW R0,0000 (A2) ;0->8002A8A0: init. count -ADDIU T7,T5,0001 -BEQ R0,R0,7F009730 -SB T7,0000 (V0) ;8002A7D4+=1: next step -//7F0096D8: step 8 -LUI T8,0100 -ADDIU T8,T8,0000 -OR V0,A1,R0 -LUI T6,0600 -SW T6,0000 (V0) ;DL+0= rsp.displaylist.u: push -SW T8,0004 (V0) ;DL+4= rsp.displaylist.l: 01000000 -JAL 7F01C0D0 ;insert image DL -ADDIU A0,A1,0008 ;A0=A1+8: next DL -LUI A2,8003 -ADDIU A2,A2,A8A0 -LW V1,0000 (A2) ;V1=8002A8A0: count -OR A1,V0,R0 -LUI V0,8003 -SLTI A0,V1,001E -ADDIU T9,V1,0001 -BNE A0,R0,7F009730 ;return if count < 30 (0x1E) -SW T9,0000 (A2) ;count+=1 -//7F00971C: next step -ADDIU V0,V0,A7D4 -LBU T0,0000 (V0) -SW R0,0000 (A2) ;0->count -ADDIU T1,T0,0001 -SB T1,0000 (V0) ;8002A7D4+=1: next step -//7F009730: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,A1,R0 ;V0=A1: p->DL -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/Eye intro microcode.txt b/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/Eye intro microcode.txt deleted file mode 100644 index 51ef1d7..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 03 - Eye Intro/Eye intro microcode.txt +++ /dev/null @@ -1,92 +0,0 @@ -70016C30: calls 70016C60, adding +4000 to the value - accepts: A0=previous value -ADDIU SP,SP,FFE8 ;SP-=18 -SW A0,0018 (SP) ;SP+18=A0 -OR A1,A0,R0 ;A1=A0 -ADDIU A0,A1,4000 ;A0+=4000: either force 2nd table or force invert if 2nd table -SW RA,0014 (SP) -ANDI T6,A0,FFFF -JAL 70016C60 ;get value from table -OR A0,T6,R0 ;A0->short -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA - -70016C60: retrieve next coded value in sequence - accepts: A0=previous value -ANDI T6,A0,FFFF ;T6=A0->short -SRL T7,T6,0x4 -ANDI T8,T7,FFFF ;T8=A0>>4: 0XXX -ANDI T9,T8,0400 ;T9=A0 & 4000 -SW A0,0000 (SP) ;SP+0=A0: ??? -BEQ T9,R0,70016C98 ;branch if bit not set -OR V0,T8,R0 ;V0=0XXX -//70016C7C: -ANDI T0,T8,03FF ;T3=V0 & 0x3FF -SLL T1,T0,0x1 ;T1=value->offset -LUI V1,8002 -ADDU V1,V1,T2 ;V1=80027FCE+offset: value in table -BEQ R0,R0,70016CAC -LH V1,7FCE (V1) ;V1=80027FCE: last short in table -//70016C98: -ANDI T3,V0,03FF ;T3=V0 & 0x3FF -SLL T4,T3,0x1 ;T4=value->offset -LUI V1,8002 -ADDU V1,V1,T4 ;V1=800277D0+offset: value in table -LH V1,77D0 (V1) ;V1=800277D0: eye motion table -//70016CAC: -ANDI T5,V0,0800 ;T5=V0 & 0x800 -BEQ T5,R0,70016CC8 ;branch if not set -OR V0,V1,R0 ;V0=V1: value in table -SUBU V0,R0,V1 ;V0=0-value -SLL T6,V0,0x10 -JR RA -SRA V0,T6,0x10 ;V0=(0-value) sign extended -//70016CC8: -JR RA -NOP - -+_+ - -called at 7F073E4C: -//7F073E4C: sets up, just before bleeding -JAL 7000A450 ;V0=random -OR S1,V1,R0 -SLL T9,V0,0xA ;T9=V0*0x400: initial value (FC00) -SH T9,0056 (SP) ;SP+56=initial value -JAL 70016C30 ;retrieve coded value+4000 -ANDI A0,T9,FFFF ;A0=initial value -//7F073E64: -LBU T8,0004 (S1) -LHU A0,0056 (SP) ;A0=initial value -MULTU V0,T8 -MFLO T1 ;T1=value* -SLL T5,T1,0x2 -SUBU T5,T5,T1 -SLL T5,T5,0x2 -SUBU T5,T5,T1 -SLL T5,T5,0x2 -ADDU T5,T5,T1 -SLL T5,T5,0x2 -ADDU T5,T5,T1 ;T5*=0xB5 -SRA T4,T5,0x12 ;T4=T5/0x4000: -JAL 70016C60 ;retrieve next value -SW T4,0050 (SP) ;SP+50=(value*0xB5)/0x4000 -//7F073EA0: - -and again... -//7F009550: -LUI V1,8007 -LUI A2,8003 -ADDIU A2,A2,A8A0 ;A2=8002A8A0 -ADDIU V1,V1,9584 ;V1=80069584 -LH T3,0000 (V1) ;T3=80069584: -LW T5,0000 (A2) ;T5=8002A8A0: -SW A1,0018 (SP) -ADDIU T4,T3,038E -ADDIU T7,T5,0001 -SH T4,0000 (V1) ;@80069584+=0x38E -SW T7,0000 (A2) ;@8002A8A0++ -JAL 70016C60 ;retrieve next value -ANDI A0,T4,FFFF ;A0=T4: value+0x38E -//7F009584: diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 04 - GoldenEye Splash Screen/7F00B330 - menu 04 interface - GoldenEye splash screen.txt b/notes/GE Documentation/Main Menus/Intro/Menu 04 - GoldenEye Splash Screen/7F00B330 - menu 04 interface - GoldenEye splash screen.txt deleted file mode 100644 index 68519fc..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 04 - GoldenEye Splash Screen/7F00B330 - menu 04 interface - GoldenEye splash screen.txt +++ /dev/null @@ -1,91 +0,0 @@ -7F00B330: 3FE60 menu 04 interface: GoldenEye splash screen -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 ;F12= [42700000] -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A10 (AT) ;F12=80051A10: -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000] -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A14 (AT) ;F14=80051A14: -JAL 70004534 -OR A0,R0,R0 ;A0=0 -//7F00B370: -LUI V1,8003 -ADDIU V1,V1,A8CC ;V1=8002A8CC -LUI T7,8005 -LW T7,8374 (T7) ;T7=80048374: clock timer -LW T6,0000 (V1) ;T6=8002A8CC: menu timer -LUI T9,8003 -ADDU T8,T6,T7 ;T8=menu timer + clock timer; update time -SW T8,0000 (V1) ;T8->8002A8CC: update menu timer -LW T9,A930 (T9) ;T9=8002A930: TRUE if first time through menus -SLTI AT,T8,00B5 ;TRUE if time < 181 (0xB5) -BEQL T9,R0,7F00B3C8 ;branch if quick advance enabled -LW T1,0000 (V1) -BEQ AT,R0,7F00B3C4 ;branch if time expired -LUI T0,8003 -LW T0,A938 (T0) ;T0=8002A938: -SLTI AT,T8,005B ;TRUE if time < 91 (0x5B) -OR A0,R0,R0 ;A0=0 -BEQ T0,R0,7F00B454 ;branch if [8002A938]=0 -NOP -BNEZ AT,7F00B454 ;return if time < 91 -NOP -//7F00B3C4: advance to folder select on timeout after pressing key -LW T1,0000 (V1) ;T1=8002A8CC: menu timer -LUI T2,8003 -OR A0,R0,R0 ;A0=0: player 1 -SLTI AT,T1,00B5 ;TRUE if time < 181 (0xB5) -BNEZ AT,7F00B418 ;branch if timer running -NOP -LW T2,A934 (T2) ;T2=8002A934: key pressed earlier -ADDIU A0,R0,0005 ;A0=5: menu 5 - folder select screen -BEQ T2,R0,7F00B3FC ;branch if not set -NOP -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00B470 -LW RA,0014 (SP) -//7F00B3FC: set actor intro - normal timeout advance -JAL 7F018670 ;play actor intro -OR A0,R0,R0 ;A0=0: normal intro -ADDIU A0,R0,0018 ;A0=18: menu 18 - actor intro -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00B470 -LW RA,0014 (SP) -//7F00B418: detect keypresses -JAL 7000C3AC ;test if button pressed -ORI A1,R0,FFFF ;A1=FFFF: any button -BNEZ V0,7F00B440 ;branch if pressed -LUI T3,8003 -LW T3,A930 (T3) ;T3=8002A930: TRUE if first time through menus -LUI T4,8003 -BEQL T3,R0,7F00B470 ;branch if quick advance enabled -LW RA,0014 (SP) -LW T4,A938 (T4) ;T4=8002A938: key pressed -BEQ T4,R0,7F00B46C ;return if -//7F00B440: advance to folder select on keypress -ADDIU A0,R0,0005 ;A0=5: menu 5 - folder select screen -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F00B470 -LW RA,0014 (SP) -//7F00B454: detect keypress -JAL 7000C3AC ;test if button pressed -ORI A1,R0,FFFF ;A1=FFFF: any button -BEQ V0,R0,7F00B46C ;branch if not pressed -ADDIU T5,R0,0001 -LUI AT,8003 -SW T5,A938 (AT) ;1->8002A938: key pressed -//7F00B46C: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 04 - GoldenEye Splash Screen/7F00B47C - menu 04 constructor - GoldenEye splash screen.txt b/notes/GE Documentation/Main Menus/Intro/Menu 04 - GoldenEye Splash Screen/7F00B47C - menu 04 constructor - GoldenEye splash screen.txt deleted file mode 100644 index 532b12e..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 04 - GoldenEye Splash Screen/7F00B47C - menu 04 constructor - GoldenEye splash screen.txt +++ /dev/null @@ -1,186 +0,0 @@ -7F00B47C: 3FFAC menu 04 constructor: GoldenEye splash screen - accepts: A0=p->display list target -ADDIU SP,SP,FE80 -SW S2,0040 (SP) -LUI T6,8003 -ADDIU S2,SP,0140 ;S2=SP+0140: copy buffer -SW S4,0048 (SP) -ADDIU T6,T6,AB54 ;T6=8002AB54 -OR S4,A0,R0 ;S4=A0: DL -SW RA,004C (SP) -SW S3,0044 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -ADDIU T9,T6,003C ;T9=8002AB90: end of data; buffer is 0x40 large -OR T1,S2,R0 ;T1=S2: buffer -//7F00B4B0: copy first 0x3C bytes to buffer -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T1,T1,000C -SW AT,FFF4 (T1) -LW AT,FFF8 (T6) -SW AT,FFF8 (T1) -LW AT,FFFC (T6) -BNE T6,T9,7F00B4B0 -SW AT,FFFC (T1) -//7F00B4D4: -LW AT,0000 (T6) ;AT=8002AB94: last word -OR A0,S4,R0 ;A0=S4: DL -OR A1,R0,R0 ;A1=0: red -OR A2,R0,R0 ;A2=0: green -OR A3,R0,R0 ;A3=0: blue -JAL 700046D0 ;setfillcolour(&A0,"black") -SW AT,0000 (T1) ;last word -> buffer -JAL 70003EF8 ;fillrect -OR A0,V0,R0 ;A0=V0: DL -OR S4,V0,R0 ;S4=V0: DL -JAL 7F0BD6F8 -ADDIU A0,R0,0002 ;A0=2: -//7F00B504: -MTC1 R0,F0 ;F0=0.0 -LUI AT,457A -MTC1 AT,F4 ;F4=4000.0 [457A0000] -LUI AT,3F80 -MTC1 AT,F6 ;F6=1.0 [3F800000] -MFC1 A2,F0 ;A2=0 -MFC1 A3,F0 ;A3=0 -OR S0,V0,R0 ;S0=V0: DL -ADDIU A0,SP,00B0 ;A0=SP+B0: buffer -OR A1,V0,R0 ;A1=V0: DL -SWC1 F0,0014 (SP) ;SP+14=0: -SWC1 F0,0018 (SP) ;SP+18=0: -SWC1 F0,001C (SP) ;SP+1C=0: -SWC1 F0,0020 (SP) ;SP+20=0: -SWC1 F0,0028 (SP) ;SP+28=0: -SWC1 F4,0010 (SP) ;SP+10=4000.0: -JAL 70017370 -SWC1 F6,0024 (SP) ;SP+24=1.0 -//7F00B54C: move stuff -OR V0,S4,R0 ;V0=S4: DL -ADDIU S4,S4,0008 ;S4+=8: next op -LUI T2,BC00 -LUI T3,8000 -ORI T3,T3,0040 ;T3=80000040 -ORI T2,T2,0002 ;T2=BC000002 -OR V1,S4,R0 ;V1=S4: DL+8 -ADDIU S4,S4,0008 ;S4+=8: next op -SW T2,0000 (V0) ;T2->DL+0: moveword - matrix -SW T3,0004 (V0) ;T3->DL+4: moveword - address/offset -LUI T4,0386 -LUI T5,8003 -ADDIU T5,T5,A978 ;T5=8002A978 -ORI T4,T4,0010 ;T4=03860010 -OR A0,S4,R0 ;A0=S4: DL+10 -ADDIU S4,S4,0008 ;S4+=8: next op -SW T4,0000 (V1) ;T4->DL+8: movemem - light[0] -SW T5,0004 (V1) ;T5->DL+C: movemem - address(8002A978) -LUI T8,0388 -LUI T7,8003 -ADDIU T7,T7,A970 ;T7=8002A970 -ORI T8,T8,0010 ;T8=02880010 -OR A1,S4,R0 ;A1=S4: DL+18 -SW T8,0000 (A0) ;T8->DL+10: movemem - light[1] -SW T7,0004 (A0) ;T7->DL+14: movemem - address(8002A970) -LUI T9,0384 -ORI T9,T9,0010 ;T9=03840010 -MTC1 R0,F0 ;F0=0 -SW T9,0000 (A1) ;T9->DL+18: movemem - lookatx -SW S0,0004 (A1) ;S0->DL+1C: DL -ADDIU S4,S4,0008 ;S4+=8: next op -OR T0,S4,R0 ;T0=S4: DL+20 -LUI T6,0382 -ORI T6,T6,0010 ;T6=03820010 -ADDIU T1,S0,0010 ;T1=S0+10: DL+10 -SW T1,0004 (T0) ;T1->SP+24: DL+10 -SW T6,0000 (T0) ;T6->SP+20: movemem - lookaty -//7F00B5E0: -LUI AT,3F80 -MTC1 AT,F8 ;F8=1.0 [3F800000] -ADDIU S1,SP,00F8 ;S1=SP+F8: buffer -LUI A3,453B -MFC1 A1,F0 ;A1=0.0 -MFC1 A2,F0 ;A2=0.0 -ADDIU S4,S4,0008 ;S4+=8: next op -ORI A3,A3,8000 ;A3=453B8000 -OR A0,S1,R0 ;A0=buffer -SWC1 F0,0024 (SP) ;SP+24=0: -SWC1 F0,001C (SP) ;SP+1C=0: -SWC1 F0,0018 (SP) ;SP+18=0: -SWC1 F0,0014 (SP) ;SP+14=0: -SWC1 F0,0010 (SP) ;SP+10=0: -JAL 7F059694 -SWC1 F8,0020 (SP) ;SP+20=1.0: -//7F00B620: -LUI S3,8003 -ADDIU S3,S3,A958 ;S3=8002A958 -LW T2,0000 (S3) ;T2=obj.instance -SW S1,0140 (SP) -LW T3,0008 (T2) ;T3=p->obj.header -LH A0,000E (T3) ;A0=#parts -SLL T4,A0,0x6 ;T4=#parts * 0x40 -JAL 7F0BD714 ;Allocates A0 memory in geometry mem -OR A0,T4,R0 ;A0=T4: #parts * 0x40 -//7F00B644: -LUI AT,8005 -SW V0,0150 (SP) -LWC1 F12,1A18 (AT) ;F12=80051A18: -JAL 7F058A7C ;multiply matrix A1 by F12 -OR A1,S1,R0 ;A1=S1: buffer -OR A0,S1,R0 ;A0=S1: buffer -JAL 7F058020 ;copy matrix from A0 to A1 -LW A1,0150 (SP) ;A1=p->allocated memory -//7F00B664: -LW T5,0150 (SP) ;T5=p->allocated memory -LW T8,0000 (S3) ;T8=p->obj.instance -SW T5,000C (T8) ;T5->T8+C: submatrix for obj.instance -JAL 7F06EFC4 -LW A0,0000 (S3) ;A0=p->obj.instance -//7F00B678: -ADDIU T7,R0,0003 -SW T7,0148 (SP) ; 3->SP+148: -SW R0,0144 (SP) ; 0->SP+144: -SW S4,014C (SP) ;S4->SP+14C: DL -OR A0,S2,R0 ;A0=S2: buffer -JAL 7F074684 -LW A1,0000 (S3) ;A1=S3: p->obj.instance -//7F00B694: move each part's matrix -LW V0,0000 (S3) ;V0=S3: p->obj.instance -LW S4,014C (SP) ;S4=DL -OR S0,R0,R0 ;S0=0 -LW T9,0008 (V0) ;T9=p->obj.header -OR S1,R0,R0 ;S1=0 -ADDIU S2,SP,005C ;S2=SP+5C: buffer -LH T6,000E (T9) ;T6=#parts -BLEZL T6,7F00B704 ;branch if none or invalid -LW RA,004C (SP) -//7F00B6B8: loop for each part -LW T1,000C (V0) ;T1=submatrix -OR A1,S2,R0 ;A1=S2: buffer -JAL 7F058020 ;copy matrix from A0 to A1 -ADDU A0,T1,S1 ;A0=submatrix + offset: matrix entry for part -//7F00B6C8 -LW T2,0000 (S3) ;T2=S3: p->obj.instance -SLL T4,S0,0x6 ;T4=S0*0x40: # * size of data -OR A0,S2,R0 ;A0=S2: buffer -LW T3,000C (T2) ;T3=p->submatrix -JAL 7F058C9C -ADDU A1,T3,T4 ;A1=p->matrix -//7F00B6E0: -LW V0,0000 (S3) ;V0=S3: p->obj.instance -ADDIU S0,S0,0001 ;S0+=1: next part # -ADDIU S1,S1,0040 ;S1+=40: offset to next matrix -LW T5,0008 (V0) ;T5=V0+8: p->obj.header -LH T8,000E (T5) ;T8=#parts -SLT AT,S0,T8 ;AT=TRUE if part# < #parts -BNEL AT,R0,7F00B6BC ;branch while more parts remain -LW T1,000C (V0) -//7F00B700: return -LW RA,004C (SP) -OR V0,S4,R0 ;V0=S4: new DL -LW S4,0048 (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -JR RA -ADDIU SP,SP,0180 diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 16 - No Controller Warning/7F018450 - menu 16 constructor - no controller warning.txt b/notes/GE Documentation/Main Menus/Intro/Menu 16 - No Controller Warning/7F018450 - menu 16 constructor - no controller warning.txt deleted file mode 100644 index 50ae273..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 16 - No Controller Warning/7F018450 - menu 16 constructor - no controller warning.txt +++ /dev/null @@ -1,148 +0,0 @@ -7F018450 4CF80 menu 16 constructor - no controller warning -ADDIU SP,SP,FFA0 -SW RA,0034 (SP) -JAL 7000BA70 ;V0=800268D0: connected controller flags -SW A0,0060 (SP) -ANDI T6,V0,0008 -//7F018464: increment T0 if 0x8 set -OR T0,R0,R0 ;T0=0 -BEQ T6,R0,7F018474 -OR V1,V0,R0 ;V1=V0: flags -ADDIU T0,R0,0001 ;T0=1 if 0x8 set -//7F018474: increment T0 if 0x4 set -ANDI T7,V1,0004 -BEQ T7,R0,7F018484 -ANDI T8,V1,0002 -ADDIU T0,T0,0001 ;T0++ if 0x4 set -//7F018484: increment T0 if 0x2 set -BEQ T8,R0,7F018490 -LW A0,0060 (SP) ;A0=DL -ADDIU T0,T0,0001 ;T0++ if 0x2 set -//7F018490: -JAL 7F01C0D0 ;insert image DL -SW T0,0044 (SP) -JAL 7F0ACD98 ;??? microcode insert -OR A0,V0,R0 ;A0=V0: DL -LW T0,0044 (SP) -SW V0,0060 (SP) ;SP+60= DL -ADDIU AT,R0,0001 -BEQL T0,R0,7F0184CC ; -ORI A0,R0,9C76 ;A0=ID 9C76: "No controller in controller slot 1" -BEQ T0,AT,7F0184C8 -ADDIU AT,R0,0002 -BEQ T0,AT,7F0184C8 -ADDIU AT,R0,0003 -BNE T0,AT,7F0184DC -//7F0184C8: -ORI A0,R0,9C76 ;A0=ID 9C76: "No controller in controller slot 1" -JAL 7F0C1DD8 ;ret V0=p->text A0 -SW T0,0044 (SP) -LW T0,0044 (SP) -SW V0,004C (SP) ;SP+4C=p->text -//7F0184DC: -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LUI A3,8004 -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,005C ;A0=SP+5C: p->height -ADDIU A1,SP,0058 ;A1=SP+58: p->width -LW A2,004C (SP) -SW R0,0014 (SP) -SW T0,0044 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T9,0010 (SP) -//7F018508: -LW T1,0058 (SP) ;T1=width -LW T5,005C (SP) ;T5=height -ADDIU T3,R0,00DC ;screen center width -ADDIU T7,R0,0099 ;screen center height -SRA T2,T1,0x1 ;T2=width/2 -SRA T6,T5,0x1 ;T6=height/2 -SUBU T4,T3,T2 ;T4=center-width -SUBU T8,T7,T6 ;T8=center-height -SW T4,0054 (SP) ;SP+54=x pos -JAL 7000441C ;V0= text clip width -SW T8,0050 (SP) ;SP+50=y pos -JAL 7000442C ;V0= text clip height -SH V0,003C (SP) ;SP+3C= clip height -LUI T9,8004 -LUI T1,8004 -LW T1,0EB4 (T1) ;T1=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LH T2,003C (SP) -ADDIU T3,R0,FFFF -SW T3,0018 (SP) ;SP+18= font colour (white) FFFFFFFF -LW A0,0060 (SP) ;A0= SP+60: p->DL -ADDIU A1,SP,0054 ;A1= p->xpos -ADDIU A2,SP,0050 ;A2= p->ypos -LW A3,004C (SP) ;A3= p->text -SW V0,0020 (SP) ;SP+20= clip height -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T1,0014 (SP) ;SP+14= p->1st font table -SW T9,0010 (SP) ;SP+10= p->2nd font table -JAL 7F0ADABC ;display text -SW T2,001C (SP) ;SP+1C= clip width -//7F018584: second line of text -LW T0,0044 (SP) -SW V0,0060 (SP) -ADDIU AT,R0,0001 -BEQ T0,R0,7F0185B0 -NOP -BEQ T0,AT,7F0185B0 -ADDIU AT,R0,0002 -BEQ T0,AT,7F0185B0 -ADDIU AT,R0,0003 -BNE T0,AT,7F0185BC -NOP -//7F0185B0: -JAL 7F0C1DD8 -ORI A0,R0,9C77 -SW V0,004C (SP) -//7F0185BC: -LUI T4,8004 -LW T4,0EB4 (T4) -LUI A3,8004 -LW A3,0EB8 (A3) -ADDIU A0,SP,005C -ADDIU A1,SP,0058 -LW A2,004C (SP) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) -LW T5,0058 (SP) -LW T9,005C (SP) -ADDIU T6,R0,00DC -ADDIU T3,R0,00B1 -SRA T7,T5,0x1 -SRA T1,T9,0x1 -SUBU T8,T6,T7 -SUBU T2,T3,T1 -SW T8,0054 (SP) -JAL 7000441C ;V0= text clip width -SW T2,0050 (SP) -JAL 7000442C ;V0= text clip height -SH V0,003C (SP) -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) -LW T4,0EB8 (T4) -LH T7,003C (SP) -ADDIU T6,R0,FFFF -SW T6,0018 (SP) -LW A0,0060 (SP) -ADDIU A1,SP,0054 -ADDIU A2,SP,0050 -LW A3,004C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -SW T4,0010 (SP) -JAL 7F0ADABC ;display text -SW T7,001C (SP) -//7F018660: return -LW RA,0034 (SP) -ADDIU SP,SP,0060 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 16 - No Controller Warning/controller detection on boot.txt b/notes/GE Documentation/Main Menus/Intro/Menu 16 - No Controller Warning/controller detection on boot.txt deleted file mode 100644 index 45fbcd3..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 16 - No Controller Warning/controller detection on boot.txt +++ /dev/null @@ -1,699 +0,0 @@ -Cheap method to add controller detection to 'no controller' screen: -7F00A760 NOP -03F290 0004 00000000 - -7F01AE3C JAL 7F00A6DC -04F96E 0002 29B7 - -Just replaces the normal menu 16 interface with legal's, changing a bit to loop the bugger -It isn't really ideal. It only updates when the timer rolls around. -Ideally, write one specificly for it that works instantly. It isn't intricate: -SW RA,FFFC (SP) -JAL 7000B9F8 V0= #controllers plugged in -ADDIU SP,SP,FFE8 -BLEZ V0,+3 -//: set 'Nintendo' -ADDIU A0,R0,0001 -JAL 7F01A5D4 -ADDIU A1,R0,0001 -//: RETURN -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 - -+-+ - -Set SI interrupt: DRAM addy -70015ED0: 0x20320 copy/paste SI Reg. operations - accepts: A0=mode (0:read; 1:write), A1=p->dram -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) ;A0=mode: 1=write to PIF, 0=read from -JAL 7001F720 ;V0= TRUE if SI not ready, FALSE otherwise -SW A1,001C (SP) ;A1=RDRAM address copied to SI+0x0 -BEQ V0,R0,70015EF4 ;continue if no issue -NOP -BEQ R0,R0,70015F6C ;return invalid (-1) -ADDIU V0,R0,FFFF -//70015EF4: -LW T6,0018 (SP) ;T6=mode -ADDIU AT,R0,0001 -BNE T6,AT,70015F10 ;branch if reading PIF -NOP -//70015F04: cache if writing -LW A0,001C (SP) ;A0=address of PIFram data in memory -JAL 70010BD0 ;cache A1 bytes at A0 prior to write request -ADDIU A1,R0,0040 ;A1=0x40: length of PIFram data expected -//70015F10: resolve RDRAM address -JAL 7000E8B0 ;V0= offset corresponding to address A0 -LW A0,001C (SP) ;A0=SP+1C: p->RDRAM target or source -LUI T7,A480 -SW V0,0000 (T7) ;V0->A4800000: RDRAM address -LW T8,0018 (SP) ;T8=mode -BNEZ T8,70015F40 ;branch if writing -NOP -//70015F2C: PIF reading -LUI T9,1FC0 -ORI T9,T9,07C0 ;T9=1FC007C0: PIF dedicated to attached stuff -LUI T0,A480 -BEQ R0,R0,70015F50 -SW T9,0004 (T0) ;PIFram->A4800004: SI Read.64 -//70015F40: PIF writing -LUI T1,1FC0 -ORI T1,T1,07C0 ;T1=1FC007C0: PIF dedicated to attached stuff -LUI T2,A480 -SW T1,0010 (T2) ;PIFram->A4800010: SI Write.64 -//70015F50: cache PIF read target -LW T3,0018 (SP) ;T3=mode -BNEZ T3,70015F68 ;branch if writing -NOP -//70015F5C: cache target area -LW A0,001C (SP) ;A0=p->RDRAM address -JAL 70010B20 ;cache A1 bytes at A0 prior to hardware read request -ADDIU A1,R0,0040 ;A1=0x40: size -//70015F68: return okay -OR V0,R0,R0 -//70015F6C: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -//70014AB4: lift DATA for each controller, or error codes if a problem -LW A0,0084 (SP) -JAL 70014AF8 SEE BELOW -LW A1,0088 (SP) -//70014AC0: -LUI AT,8006 -JAL 70015E10 -SB R0,7CE0 (AT) -//70014ACC: - - -After above hits, first read from 80067CA0 -70014AF8: 0x Copy DATA for each controller or error codes if not available -LUI T7,8006 -LBU T7,7CE1 (T7) -ADDIU SP,SP,FFE8 -LUI T6,8006 -ADDIU T6,T6,7CA0 T6=80067CA0: RDRAM address for attachments (PIFram) -SB R0,0007 (SP) -SW T6,0014 (SP) save PIFram -BLEZ T7,70014BB8 -SW R0,0008 (SP) -//70014B1C: -LW T9,0014 (SP) T9=PIFram -ADDIU T8,SP,000C -LWL AT,0000 (T9) -LWR AT,0003 (T9) AT=controller 1 status -SW AT,0000 (T8) save -LWL T1,0004 (T9) -LWR T1,0007 (T9) T1=controller 1 data -SW T1,0004 (T8) save -LBU T2,000E (SP) T2=controller 1 status+0x2: data size and error codes -ANDI T3,T2,00C0 T3=test for io error and presence flags -SRA T4,T3,0x4 -SB T4,0003 (A1) save -LBU T5,0003 (A1) T5=error flags -BNEZ T5,70014B8C branch if controller is screwed up -NOP -LBU T6,0011 (SP) -LBU T0,0010 (SP) -ADDIU T3,R0,0001 -SLL T7,T6,0x8 -OR T8,T7,T0 -SH T8,0000 (A1) -LBU T9,0012 (SP) -SB T9,0002 (A1) -LW T2,0008 (SP) -LBU T1,0007 (SP) -SLLV T4,T3,T2 -OR T5,T1,T4 -SB T5,0007 (SP) -//70014B8C: next command -LW T6,0008 (SP) T6=count -LUI T9,8006 -LBU T9,7CE1 (T9) T9=80067CE1: count for thingies -LW T0,0014 (SP) T0=PIFram -ADDIU T7,T6,0001 T7=count+1 -SLT AT,T7,T9 1 if still more to test -ADDIU T8,T0,0008 -SW T8,0014 (SP) save next PIFram command address (+8) -SW T7,0008 (SP) save new count -BNEZ AT,70014B1C -ADDIU A1,A1,0004 A1=slot for next controller data -//70014BB8 -LBU T3,0007 (SP) -ADDIU SP,SP,0018 -JR RA -SB T3,0000 (A0) -(800653E8 is address for copy of error codes detected) - - -70014E34: 0x copy data or error for controllers; different from above -LUI T7,8006 -LBU T7,7CE1 (T7) #expected PIFram entries -LUI T6,8006 -ADDIU SP,SP,FFF0 -ADDIU T6,T6,7CA0 T6=80067CA0: RDRAM PIFram address -SW T6,000C (SP) -BLEZ T7,70014ED4 -SW R0,0000 (SP) -//70014E54: -LW T9,000C (SP) T9=RDRAM PIFram -ADDIU T8,SP,0004 -LWL AT,0000 (T9) -LWR AT,0003 (T9) -SW AT,0000 (T8) save controller command+status -LWL T1,0004 (T9) -LWR T1,0007 (T9) -SW T1,0004 (T8) save controller data -LBU T2,0006 (SP) T2=length and error -ANDI T3,T2,00C0 T3=io and disconnect error flags -SRA T4,T3,0x4 -SB T4,0004 (A0) save error codes [80064F4C+] -LBU T5,0004 (A0) -BNEZ T5,70014EA8 skip data read if error present -NOP -//70014E90: copy data segment - should be three bytes -LHU T6,0008 (SP) -SH T6,0000 (A0) -LB T7,000A (SP) -SB T7,0002 (A0) -LB T0,000B (SP) -SB T0,0003 (A0) -//70014EA8: NEXT COMMAND -LW T8,0000 (SP) T8=count -LUI T3,8006 -LBU T3,7CE1 (T3) T3=total PIFram commands -LW T1,000C (SP) T1=RDRAM PIFram -ADDIU T9,T8,0001 -SLT AT,T9,T3 -ADDIU T2,T1,0008 -SW T2,000C (SP) save next PIFram addy -SW T9,0000 (SP) save count++ -BNEZ AT,70014E54 -ADDIU A0,A0,0006 data address +6 -//70014ED4: -JR RA -ADDIU SP,SP,0010 - - -FIRST THING THAT CHECKS THE ERROR RETRIEVED -from errors in 70014AF8: -7000B810: -... -//7000B88C: -LUI T8,8006 -LBU T8,53EB (T8) error code -LUI T0,8006 -LUI T2,8006 -ANDI T9,T8,0008 T9=test for disconnect error on controller 1 -BEQ T9,R0,7000B8AC -LUI T4,8006 -ADDIU S0,R0,000E S0=E (unset 0x1) -//7000B8AC: -LBU T0,53EF (T0) -LUI AT,8002 -ANDI T1,T0,0008 T1=test for disconnect error on controller 2 -BEQ T1,R0,7000B8C4 -NOP -ADDIU S0,S0,FFFE S0=unset 0x2 -//7000B8C4: -LBU T2,53F3 (T2) -ANDI T3,T2,0008 T3=test for disconnect error on controller 3 -BEQ T3,R0,7000B8D8 -NOP -ADDIU S0,S0,FFFC S0=unset 0x4 -//7000B8D8: -LBU T4,53F7 (T4) -ANDI T5,T4,0008 T5=test for disconnect error on controller 4 -BEQ T5,R0,7000B8EC -NOP -ADDIU S0,S0,FFF8 S0=unset 0x8 -//7000B8EC: -SB S0,68D0 (AT) S0->800268D0 -OR S0,R0,R0 -ADDIU S0,S0,0001 -//7000B8F8: completely USELESS routine... -SLL T8,S0,0x18 -SRA S0,T6,0x18 -SLTI AT,S0,0004 -BNEL AT,R0,7000B8F8 -ADDIU S0,S0,0001 -//7000B90C: -LUI A3,8002 -LUI A2,8002 -ADDIU A2,A2,68D8 -ADDIU A3,A3,68D4 -OR S0,R0,R0 -LUI T9,8002 -LBU T9,68D0 (T9) T9=detected controller bitflags from before -ADDIU T8,R0,0001 -SLLV A1,T8,S0 -AND T0,T9,A1 test if bit for controller 1 present -BEQ T0,R0,7000B9B0 -LBU V1,0000 (A3) -... -//7000B9B0: -AND T9,V1,A1 -BEQ T9,R0,7000B9CC -... -//7000B9CC: -ADDIU S0,S0,0001 -SLL T3,S0,0x18 -SRA S0,T3,0x18 -SLTI AT,S0,0004 -BNEZ AT,7000B920 -NOP -//7000B9E4: -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0038 -JR RA -NOP - - -from errors in 70014E34: -//7000BED4: -JAL 70014E34 -SW V1,0040 (SP) -... -//7000BF2C: -LUI A1,8006 -ADDIU A1,A1,4F30 A1=80064F30: start of some controller functions... -LW V0,01E8 (A1) -SLL T9,V0,0x2 -SUBU T9,T9,V0 -SLL T9,T9,0x3 -ADDU A2,A1,T9 -OR A0,R0,R0 -ADDIU A3,R0,0006 -//7000BF50: -MULTU A0,A3 -MFLO V0 -ADDU T3,A2,V0 -LBU V1,0004 (T3) -BNEZ V1,7000BF8C if error code in controller, branch -NOP -//7000BF68: -... -//7000BF8C: -BEQ V1,R0,7000BFC8 -ADDIU A0,A0,0001 -LW T9,01EC (A1) -SLL T3,T9,0x2 -SUBU T3,T3,T9 -SLL T3,T3,0x3 -ADDU T4,A1,T3 -ADDU T5,T4,V0 -LBU T6,0004 (T5) -BNEL T6,R0,7000BFCC -SLL T7,A0,0x18 T7=A0 * 01000000 -JAL 7000B810 would usually take jump... -NOP -BEQ R0,R0,7000BFDC -NOP -//7000BFC8: -SLL T7,A0,0x18 T7=A0 * 01000000 -SRA A0,T7,0x18 A0=same, converted to negative if 80 -SLTI AT,A0,0004 -BNEZ AT,7000BF50 -NOP -//7000BFDC: -JAL 7000BA7C -NOP -... - - -+ + - + -+ + - -other half - setting the menu -7F000000 34B30 initialize menus and all at load -LUI AT,3F80 -MTC1 AT,F0 -ADDIU V0,R0,FFFF -LUI AT,8003 -SW V0,A8C0 (AT) ;-1->8002A8C0: current menu -LUI AT,8003 -SW R0,A8C4 (AT) ;0->8002A8C4: update for current menu -LUI AT,8003 -SW V0,A8C8 (AT) ;-1->8002A8C8 -LUI AT,8003 -SW R0,A8CC (AT) ;0->8002A8CC: timer on folder select screen -LUI AT,8003 -SW V0,A8F4 (AT) ;-1->8002A8F4: selected stage -LUI AT,8003 -SW V0,A8F8 (AT) ;-1->8002A8F8: selected mission briefing page -LUI AT,8003 -SW V0,A8FC (AT) ;-1->8002A8FC: difficulty -LUI AT,8003 -SW R0,A940 (AT) ;0->8002A940: 320x240 -LUI AT,8003 -SW R0,A918 (AT) ;0->8002A918: icon on folder select screen = sight -LUI AT,8003 -SW R0,A8E8 (AT) ;0->8002A8E8: folder# -LUI AT,8003 -SW R0,A924 (AT) ;0->8002A924: mission failed -ADDIU V1,R0,0001 -LUI AT,8003 -SW V1,A92C (AT) ;1->8002A92C: TRUE if first time on legal screen -LUI AT,8003 -SW V1,A930 (AT) ;1->8002A930: TRUE if first time through menus -LUI AT,8003 -SW R0,A934 (AT) ;0->8002A934 -MTC1 R0,F4 -LUI AT,8003 -SW V1,A93C (AT) ;1->8002A93C -LUI AT,8003 -SWC1 F4,A9A0 (AT) ;0.0->8002A9A0: 007: "Enemy reaction speed" setting -LUI AT,8003 -SWC1 F0,A9A4 (AT) ;1.0->8002A9A4: 007: "Enemy health" setting -LUI AT,8003 -SWC1 F0,A9A8 (AT) ;1.0->8002A9A8: 007: "Enemy accuracy" setting -LUI AT,8003 -SWC1 F0,A9AC (AT) ;1.0->8002A9AC: 007: "Enemy damage" setting -LUI AT,8003 -SW R0,B5E8 (AT) ;0->8002B5E8: do not play ramrom after actors -LUI AT,8003 -SW R0,B5EC (AT) ;0->8002B5EC: randomly-selected intro animation -LUI AT,8003 -SW R0,B5F0 (AT) ;0->8002B5F0: intro animation count -LUI AT,8003 -SW R0,B5F4 (AT) ;0->8002B5F4 -LUI AT,8003 -SW R0,B5F8 (AT) ;0->8002B5F8 -LUI AT,8003 -JR RA -SW R0,B5FC (AT) ;0->8002B5FC: if TRUE, actor intros play full character list - - -7F000D20 35850 initialize menus prior to first display -ADDIU V0,R0,FFFF -LUI AT,8003 -SW V0,A8C0 (AT) ;-1-> 8003A8C0: menu.cur -LUI AT,8003 -SW V0,A8C8 (AT) ;-1-> 8003A8C8: menu.next -LUI AT,8003 -SW R0,A940 (AT) ;0 -> 8002A940: 320x240 -ADDIU V1,R0,0001 -LUI AT,8003 -SW V1,A944 (AT) ;1 -> 8002A944: -LUI AT,8003 -SW R0,A948 (AT) ;0 -> 8002A948: True if emulating Spectrum -LUI AT,8003 -SW R0,A918 (AT) ;0 -> 8002A918: icon on folder select screen = sight -LUI AT,8003 -SW V0,A91C (AT) ;-1-> 8002A91C: no folder selected for deletion -LUI AT,8003 -SW V1,A920 (AT) ;1 -> 8002A920: delete folder minimenu selected option = cancel -LUI AT,8003 -SW R0,A8DC (AT) ;0 -> 8002A8DC: dehighlight folder tab 1 -LUI AT,8003 -SW R0,A8E0 (AT) ;0 -> 8002A8E0: dehighlight folder tab 2 -LUI T6,8003 -LW T6,A934 (T6) ;T6= 8002A934: keypress.prev -LUI AT,8003 -SW R0,A8E4 (AT) ;0 -> 8002A8E4: dehighlight folder tab 3 -//7F000D88: skip if nothing pressed -ADDIU SP,SP,FFE8 -LUI AT,8003 -SW RA,0014 (SP) -BEQ T6,R0,7F000DAC -SW V1,A93C (AT) ;1 -> 8002A93C: -//7F000D9C: if pressed, set 'main folder select' -LUI V0,8003 -ADDIU V0,V0,A8C4 -ADDIU T7,R0,0005 -SW T7,0000 (V0) ;5->menu update: set 'MAIN FOLDER SELECT' -//7F000DAC: -LUI V0,8003 -ADDIU V0,V0,A8C4 -LW T8,0000 (V0) ;T8=menu.update -LUI A0,0007 -ADDIU T9,R0,0005 -BGEZ T8,7F000DCC -ORI A0,A0,8000 ;A0=78000 -SW T9,0000 (V0) ;5->menu update: set 'MAIN FOLDER SELECT' -//7F000DCC: allocate buffers for stdout and stderr displays... -JAL 70009720 ;V0= p->A0 bytes allocated in memory bank A1 -ADDIU A1,R0,0004 ;A1=bank 4 -LUI AT,8003 -LUI A0,0004 -SW V0,A950 (AT) ;V0->8002A950: p->DL target for nintendologo, goldeneyelogo, and walletbond object data -ORI A0,A0,B040 ;A0=4B040 -JAL 70009720 ;V0= p->A0 bytes allocated in memory bank A1 -ADDIU A1,R0,0004 ;A1=bank 4 -LUI V1,8003 -ADDIU T1,V0,003F -ADDIU AT,R0,FFC0 -ADDIU V1,V1,A954 -AND T2,T1,AT -SW V0,0000 (V1) ;V0->8002A954: p->data -SW T2,0000 (V1) ;resave, aligned to 0x40 boundry -//7F000E04: -LUI AT,8003 -SW R0,A95C (AT) ;NULL -> p->folder object instance -LUI AT,8003 -SW R0,A960 (AT) -LUI AT,8003 -SW R0,A964 (AT) -LUI AT,8003 -JAL 7F000C70 -SW R0,A968 (AT) -//7F000E2C: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -Actual bugger that sets the timer for legal and skips to next screen: -7F00A6DC 0x Legal Screen Processing -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 ;F12->video2 page width [p@800232A8+C] and something else... -LWC1 F12,19E4 (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 -LWC1 F14,19E8 (AT) -JAL 70004534 ;A0->video2+24 -OR A0,R0,R0 -LUI V0,8003 -ADDIU V0,V0,A8CC -LUI T7,8005 -LW T7,8374 (T7) ;T7=80048374: -LW T6,0000 (V0) ;T6=8002A8CC: timer on folder select screen -OR A0,R0,R0 -ADDU T8,T6,T7 -SLTI AT,T8,00F1 -BNEZ AT,7F00A788 ;branch when legal screen timer still running -SW T8,0000 (V0) -//7F00A744: -JAL 7000B9F8 V0= #controllers plugged in - LUI T6,8002 - LW T6,68C4 (T6) T6=800268C4: index of controller read requests - LUI V0,8002 - LW V1,01F8 (T6) V1=80064F30+1F8: controller index - BLTZ V1,7000BA20 - NOP - SLL V0,V1,0x18 - SRA T7,V0,0x18 - JR RA - OR V0,T7,R0 - //7000BA20: - ...etc - -NOP -BGTZ V0,7F00A774 -LUI T0,8003 -LW T0,A92C (T0) -ADDIU A0,R0,0016 A0=no controller menu -BEQL T0,R0,7F00A778 -ADDIU A0,R0,0001 A0=Nintendo menu -//7F00A764: set 'no controller' -JAL 7F01A5D4 -ADDIU A1,R0,0001 -BEQ R0,R0,7F00A7D8 -LW RA,0014 (SP) -//7F00A774: set 'Nintendo' -ADDIU A0,R0,0001 -JAL 7F01A5D4 -ADDIU A1,R0,0001 -BEQ R0,R0,7F00A7D8 -LW RA,0014 (SP) -//7F00A788: legal screen timer advance -JAL 7000C3AC -ORI A1,R0,FFFF -BEQ V0,R0,7F00A7D4 -LUI T1,8003 -LW T1,A92C (T1) T1=8002A92C -LUI T2,8003 -BNEL T1,R0,7F00A7D8 if set, no advance possible -LW RA,0014 (SP) -LW T2,A930 (T2) T2=8002A930 -ADDIU A1,R0,0001 -ADDIU A0,R0,0001 -BNEZ T2,7F00A7CC if set, advance to Nintendo, not files -NOP -JAL 7F01A5D4 set 'select file' -ADDIU A0,R0,0005 -BEQ R0,R0,7F00A7D8 -LW RA,0014 (SP) -//7F00A7CC: -JAL 7F01A5D4 set 'Nintendo' -ADDIU A1,R0,0001 -LW RA,0014 (SP) -//7F00A7D8: -ADDIU SP,SP,0018 -JR RA -NOP - - - -THING RESPONSIBLE FOR SETTING THE MENU - A0=menu#, A1=mode: 1=update, 2=return -7F01A5D4 0x -ADDIU AT,R0,000B -BEQ A0,AT,7F01A5E8 ;branch if stage active selected -ADDIU T6,R0,0001 -ADDIU AT,R0,0019 -BNE A0,AT,7F01A5F0 -//7F01A5E8: -LUI AT,8003 -SW T6,A948 (AT) ;if menu 19, 1->8002A948: set if emulating Spectrum -//7F01A5F0: -BEQ A1,R0,7F01A604 -LUI AT,8003 -LUI AT,8003 -JR RA -SW A0,A8C4 (AT) ;set to update -//7F01A604: -SW A0,A8C8 (AT) ;set as return -JR RA -NOP - - -7F01AEFC 0x constructs the menu pages themselves, or at least text, etc. -LUI T6,8003 -LW T6,A8C0 (T6) -ADDIU SP,SP,FFE0 -SW S0,0018 (SP) -SLTIU AT,T6,001A -OR S0,A0,R0 -BEQ AT,R0,7F01B0C0 -SW RA,001C (SP) -SLL T6,T6,0x2 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,1C84 (AT) -JR T6 -NOP -//7F01AF34: menu 00-legal -//7F01AF44: menu 17-switch -JAL 7F00ABA8 - ADDIU SP,SP,FFE8 - SW RA,0014 (SP) - JAL 7F01C0D0 looks like it constructs the thing! - NOP - LW RA,0014 (SP) - ADDIU SP,SP,0018 - JR RA - NOP -OR A0,S0,R0 -BEQ R0,R0,7F01B0C0 -OR S0,V0,R0 -//7F01AF54: menu 01-Nintendo -//7F01AF64: menu 02-Rare -//7F01AF74: menu 03-Eye -//7F01AF84: menu 04-GE splash -//7F01AF94: menu 05-file select -//7F01AFA4: menu 06-main folder menu -//7F01AFB4: menu 07-mission select -//7F01AFC4: menu 08-objectives -//7F01AFD4: menu 09-007 options -//7F01AFE4: menu 0A-briefings -//7F01AFF4: menu 0C-Failed -//7F01B004: menu 0D-Complete -//7F01B014: menu 0E-MP options -//7F01B024: menu 13-scenario -//7F01B034: menu 0F-character select -//7F01B044: menu 14-teams -//7F01B054: menu 10-handicap -//7F01B064: menu 11-control -//7F01B074: menu 12-MP stage select -//7F01B084: menu 15-cheats -//7F01B094: menu 16-no controller -//7F01B0A4: menu 18-actor intro -//7F01B0B4: menu 19-Spectrum emulator -//7F01B0C0: menu 0B-active play, general return -LW RA,001C (SP) -OR V0,S0,R0 -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -+ + - + -+ + - -POTENTIAL REWRITE! -//7F00A73C: 0x3F26C -14200007 *BNEZ AT,7F00A75C branch when legal screen timer still running -AC580000 +SW T8,0000 (V0) -//7F00A744: -0C002E7E +JAL 7000B9F8 V0= #controllers plugged in -00000000 +NOP -1840000D *BLEZ V0,7F00A784 if controller count silly, show no controller screen -24040016 *ADDIU A0,R0,0016 A0=no controller menu -1000000B *BEQ R0,R0,7F00A784 -24040001 *ADDIU A0,R0,0001 A0=Nintendo menu -//7F00A75C: legal screen timer advance -0C0030EB JAL 7000C3AC -3405FFFF ORI A1,R0,FFFF -10400009 *BEQ V0,R0,7F00A78C -3C0A8003 *LUI T2,8003 -8D49A92C *LW T1,A92C (T2) T1=8002A92C -15200006 *BNE T1,R0,7F00A78C if set, no advance possible -8D4AA930 LW T2,A930 (T2) T2=8002A930 -24040001 ADDIU A0,R0,0001 -51400001 *BEQL T2,R0,+1 if set, advance to Nintendo, not files -24040005 ADDIU A0,R0,0005 -//7F00A784: -0FC06975 JAL 7F01A5D4 set 'Nintendo' -24050001 ADDIU A1,R0,0001 -//7F00A78C: -8FBF0014 *LW RA,0014 (SP) -03E00008 JR RA -27BD0018 *ADDIU SP,SP,0018 - -7F00A798: 0x3F2C8 type 16 cheats and borrows from prior routine! -AFBFFFFC SW RA,FFFC (SP) -0C002E7E JAL 7000B9F8 V0= #controllers plugged in -27BDFFE8 ADDIU SP,SP,FFE8 -1000FFEF BEQ R0,R0,7F00A764 -NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP --NOP - diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F01869C - menu 18 initialization - display cast.txt b/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F01869C - menu 18 initialization - display cast.txt deleted file mode 100644 index c517e4b..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F01869C - menu 18 initialization - display cast.txt +++ /dev/null @@ -1,581 +0,0 @@ -7F01869C 4D1CC menu 18 initialization - display cast - note: reflects NSNA alterations -LUI T6,8003 -LW T6,A950 (T6) ;T6=8002A950: p->DL -ADDIU SP,SP,FF48 -LUI T8,8003 -SW RA,001C (SP) -ADDIU T8,T8,BA2C ;T8=8002BA2C -SW T6,00B4 (SP) ;SP+B4: p->DL -LW AT,0000 (T8) ;AT=8002BA2C: -ADDIU T7,SP,00A0 ;T7=SP+A0: -LW T1,0004 (T8) ;T1=8002BA30: -SW AT,0000 (T7) ;SP+A0= -LW AT,0008 (T8) ;AT=8002BA34: -SW T1,0004 (T7) ;SP+A4= -SW AT,0008 (T7) ;SP+A8= -JAL 7000A450 ;V0=random -SW R0,007C (SP) ;SP+7C=0: -LUI T3,8003 -LW T3,B5FC (T3) ;T3=8002B5FC: TRUE plays full cast call -ANDI T2,V0,0001 ;T2=random &1 -SW T2,0070 (SP) ;SP+70= 0 or 1 -BEQ T3,R0,7F018718 ;branch if partial cast -//7F0186F0: reinitialize music if you aren't sucking it from the main menus -LUI T4,8003 -LW T4,B5E8 (T4) ;T4=8002B5E8: entry# -BNEZ T4,7F018718 ;branch if not first or last entry -NOP -JAL 7000703C ;??? sets something for music -ADDIU A0,R0,7FFF -LUI AT,8002 -SW R0,434C (AT) ;0->8002434C: -JAL 70006E7C ;play music A0 -ADDIU A0,R0,0002 -//7F018718: count #animations -LUI V1,8003 -ADDIU A0,V1,B8BC ;A0=8002B8BC -OR T2,R0,R0 ;T2=animation count -//7F018724: count valid entries -SLL T7,T2,0x3 ;T7=entry#->offset -ADDU T8,A0,T7 ;T8=8002B8BC+offset: p->animation entry -LH T1,0000 (T8) ;T1=animation code -SW T2,B5F0 (V1) ;count->8002B5F0: animation count -BGEZL T1,7F018724 ;loop for each animation -ADDIU T2,T2,0001 ;T2++ -//7F01873C: randomly select an intro animation -JAL 7000A450 ;V0=random -LW T4,B5E8 (V1) ;T4=8002B5E8: entry# -DIVU V0,T2 -MFHI T3 ;T3=random % count: animation# -LUI AT,8003 -SW T3,B5EC (AT) ;sel.animation->8002B5EC: save randomly-selected animation -//7F018754: convert and save rate -SLL V0,T3,0x3 ;V0=entry#->offset -ADDU V0,V0,AT -LHU V0,B8C0 (V0) ;V0=8002B8C0+offset: rate -MTC1 V0,F4 -LUI AT,461C -ADDIU AT,AT,4000 ;AT= 10000.0 [461C4000] -MTC1 AT,F12 -CVT.S.W F8,F4 ;F8=(float) rate -DIV.S F4,F8,F12 ;F4= rate/10000 -SWC1 F4,0014 (SP) ;SP+14= converted rate -NOP -NOP -NOP -NOP -//7F01878C: grab applicable weapon type for animation -LUI T7,8003 -SLL T5,T4,0x2 -LW T7,B5EC (T7) ;T7=8002B5EC: sel.anim. -LUI T6,8003 -ADDU T5,T5,T4 -SLL T5,T5,0x1 ;T5=entry# * 0xA: offset to entry -ADDIU T6,T6,B600 ;T6=8002B600 -ADDU A0,T5,T6 ;A0=8002B600+offset -LB T0,0000 (A0) ;T0=body -LUI T1,8003 -SLL T8,T7,0x3 ;T8=anim#->offset -ADDU T1,T1,T8 -LB T9,0001 (A0) ;T9=head -LB T1,B8C3 (T1) ;T1=8002B8C3+offset: applicable weapon type -SW T1,006C (SP) ;SP+6C= weapon type -BNEZ T2,7F0187D4 ;catch division by zero, way after the fact... -NOP -BREAK -//7F0187D4: handle random heads -ADDI T2,R0,FFFF ;T2=-1 -BNE T0,T2,7F018818 ;branch if not random body (FF) -LUI T2,8003 -JAL 7000A450 ;V0=random -LBU T0,CD02 (T2) ;T0=8002CD02: #total bodies -DIVU V0,T0 -MFHI AT ;AT=random % total: selected random body -LBU T1,CD08 (T2) ;T1=8002CD08: cur.random body -BEQL AT,T1,7F0187FC ;branch if same -ADDIU AT,AT,0001 ;AT++ next body -//7F0187FC: body=0 if invalid -BEQL AT,T0,7F018804 ;correct an invalid body entry -ADDIU AT,R0,0000 ;AT=0 -SB T1,CD08 (T2) ;update cur.random body -NOP -NOP -//7F018810: retrieve random body entry from table -ADDU T2,AT,T2 -LBU T0,CD09 (T2) ;T0=8002CD09+offset: random body# -//7F018818: deal with special-case bodies -ADDIU AT,R0,0016 -SW T0,008C (SP) ;SP+8C= body# -OR T2,T0,R0 ;T2=T0: body# -SW T9,0088 (SP) ;SP+88= head# -BNE T0,AT,7F01886C ;branch if not body 16: bond::boilersuit -NOP -NOP -NOP -JAL 7000A450 ;V0=random -ADDIU T4,R0,0005 -DIVU V0,T4 -MFHI T3 -ADDU T8,T3,T0 -ADDIU T7,R0,001A -BEQL T7,T8,7F018858 -ADDIU T8,R0,0005 -BEQL T4,T8,7F018860 -ADDIU T9,R0,004E -SW T9,0088 (SP) -BEQ R0,R0,7F0188C0 -SW T8,008C (SP) -LW T2,008C (SP) -ADDIU AT,R0,0010 -LW T5,008C (SP) -BNEL T2,AT,7F0188A0 -ADDIU AT,R0,0009 -JAL 7000A450 ;V0=random -NOP -ANDI T3,V0,0001 -BEQ T3,R0,7F0188C0 -ADDIU T4,R0,004F -BEQ R0,R0,7F0188C0 -SW T4,008C (SP) -ADDIU AT,R0,0009 -BNEL T5,AT,7F0188C4 -LW T9,0088 (SP) -JAL 7000A450 ;V0=random -NOP -ANDI T6,V0,0001 -BEQ T6,R0,7F0188C0 -ADDIU T0,R0,0008 -SW T0,008C (SP) -LW T9,0088 (SP) -ADDIU AT,R0,FF9F -BGEZL T9,7F0188E0 -LW T7,00B4 (SP) -JAL 7F023660 ;V0=random head -LW A0,008C (SP) -SW V0,0088 (SP) -LW T7,00B4 (SP) -LUI V0,0003 -ORI V0,V0,1160 -ADDU A0,T7,V0 ;A0=T7 + 31160 -ADDIU A0,A0,003F -ORI T8,A0,003F -XORI A0,T8,003F -SW V0,00B0 (SP) -ADDIU A1,R0,01B8 -JAL 7F0D2448 -ADDIU A2,R0,014A -LUI A2,0001 -ORI A2,A2,9000 -ADDIU A0,SP,0090 -JAL 7F0CBAF4 ;set start and end of block to A0 -LW A1,00B4 (SP) -LW T2,008C (SP) -LUI T4,8004 -LW A2,00B4 (SP) -SLL T3,T2,0x1 -ADDU T3,T3,T2 -LW A3,00B0 (SP) -LUI V1,0001 -SLL T3,T3,0x2 -ADDIU T4,T4,DE10 -ORI V1,V1,9000 -ADDU V0,T3,T4 -LW A0,0000 (V0) -ADDIU T5,SP,0090 -ADDU A2,A2,V1 -SUBU A3,A3,V1 -SW A3,00B0 (SP) -SW A2,00B4 (SP) -SW T5,0010 (SP) -LW A1,0004 (V0) -SW V0,0024 (SP) -JAL 7F0764A4 ;loads obj and fills header -SW A0,0080 (SP) -LW V0,0024 (SP) -JAL 7F0BD188 -LW A0,0004 (V0) -ADDIU V1,V0,003F -LW T9,00B0 (SP) -LW T8,00B4 (SP) -ORI T6,V1,003F -LW T2,0088 (SP) -XORI T0,T6,003F -SUBU T7,T9,T0 -ADDU T1,T8,T0 -SW T7,00B0 (SP) -BLTZ T2,7F018A18 -SW T1,00B4 (SP) -SLL T3,T2,0x1 -ADDU T3,T3,T2 -LUI T4,8004 -ADDIU T4,T4,DE10 -SLL T3,T3,0x2 -ADDU V0,T3,T4 -LW A0,0000 (V0) -ADDIU T5,SP,0090 -SW T5,0010 (SP) -LW A1,0004 (V0) -SW V0,0024 (SP) -OR A2,T1,R0 -OR A3,T7,R0 -JAL 7F0764A4 ;loads obj and fills header -SW A0,007C (SP) -LW V0,0024 (SP) -JAL 7F0BD188 -LW A0,0004 (V0) -ADDIU V1,V0,003F -LW T9,00B0 (SP) -LW T2,00B4 (SP) -ORI T6,V1,003F -XORI T0,T6,003F -SUBU T8,T9,T0 -ADDU T3,T2,T0 -SW T8,00B0 (SP) -SW T3,00B4 (SP) -LW A0,008C (SP) -LW A1,0088 (SP) -LW A2,0080 (SP) -LW A3,007C (SP) -JAL 7F0234A8 -SW R0,0010 (SP) -LUI V1,8003 -ADDIU V1,V1,B5F4 -LUI A1,3DCC -SW V0,0000 (V1) ;V0->8002B5F4 -ORI A1,A1,CCCD -JAL 7F06CE78 ;set scale A1 to object instance controller A0 + 14 -OR A0,V0,R0 -LW T4,006C (SP) -LUI T7,8003 -ADDU T6,T4,T7 -LBU T6,BA74 (T6) -BEQ T6,R0,7F018C40 -ADDU T0,R0,T6 -JAL 7000A450 ;V0=random -ADDIU T1,R0,0002 -BEQL T4,R0,7F018A74 -ADDIU T0,T0,0001 -DIVU V0,T0 -MFHI T0 -BEQ T0,T6,7F018C40 -SLL T0,T0,0x1 -ADDU V1,T0,T7 -BNEL T4,T1,7F018A90 -ADDIU V1,V1,0018 -BEQL T4,R0,7F018A98 -ADDIU V1,V1,001E -BEQ R0,R0,7F018B14 -LHU V1,BA38 (V1) -SW T6,0014 (T1) -ADDIU AT,R0,0006 -DIVU V0,AT -MFHI T0 -SLL T9,T0,0x2 -ADDU V1,SP,T9 -BEQ R0,R0,7F018B14 -LW V1,0054 (V1) -LUI T2,8003 -ADDIU T2,T2,BA50 -ADDIU T4,T2,0024 -LW AT,0000 (T2) -ADDIU T2,T2,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T2) -SW AT,FFF8 (T8) -LW AT,FFFC (T2) -BNE T2,T4,7F018ACC -SW AT,FFFC (T8) -LW AT,0000 (T2) -JAL 7000A450 ;V0=random -SW AT,0000 (T8) -ADDIU AT,R0,000A -DIVU V0,AT -MFHI T5 -SLL T1,T5,0x2 -ADDU V1,SP,T1 -LW V1,002C (V1) -ADDIU AT,R0,00BE -BNEL V1,AT,7F018B38 -ADDIU AT,R0,00BB -JAL 7F01EAD0 ;V0= TRUE if Cradle completed on any difficulty in any folder -SW V1,0084 (SP) -BNEZ V0,7F018B34 -LW V1,0084 (SP) -ADDIU V1,R0,00BF -ADDIU AT,R0,00BB -BNEL V1,AT,7F018B58 -ADDIU AT,R0,00D0 -JAL 7F01EADC -SW V1,0084 (SP) -BNEZ V0,7F018B54 -LW V1,0084 (SP) -ADDIU V1,R0,00BF -ADDIU AT,R0,00D0 -BNEL V1,AT,7F018B78 -SLL T7,V1,0x2 -JAL 7F01EAE8 -SW V1,0084 (SP) -BNEZ V0,7F018B74 -LW V1,0084 (SP) -ADDIU V1,R0,00BF -SLL T7,V1,0x2 -SUBU T7,T7,V1 -LUI T6,8004 -ADDIU T6,T6,A228 -SLL T7,T7,0x2 -ADDU V0,T7,T6 -LW A0,0000 (V0) -ADDIU T0,SP,0090 -SW T0,0010 (SP) -LW A1,0004 (V0) -SW V0,0024 (SP) -LW A2,00B4 (SP) -LW A3,00B0 (SP) -JAL 7F0764A4 ;loads obj and fills header -SW A0,0078 (SP) -LW V0,0024 (SP) -JAL 7F0BD188 -LW A0,0004 (V0) -JAL 7F075CF4 ;set obj. use flag, compute group #s, set obj loaded byte -LW A0,0078 (SP) -JAL 7F06C094 ;V0=obj.instance controller generated from nonaircraft object header A0 -LW A0,0078 (SP) -LUI V1,8003 -ADDIU V1,V1,B5F8 -LUI A1,3DCC -SW V0,0000 (V1) ;obj.inst.cntl -> 8002B5F8 -ORI A1,A1,CCCD -JAL 7F06CE78 ;set scale A1 to object instance controller A0 + 14 -OR A0,V0,R0 -LUI V1,8003 -LUI A2,8003 -ADDIU A2,A2,B5F4 -ADDIU V1,V1,B5F8 -LW T3,0000 (V1) ;T3= obj.inst.cntl -LW T9,0000 (A2) ;T9= -ADDIU V0,R0,0003 -SW T9,0018 (T3) -LW T4,0070 (SP) -BEQ T4,R0,7F018C1C -NOP -BEQ R0,R0,7F018C1C -ADDIU V0,R0,0005 -LW T2,0000 (A2) -SLL T1,V0,0x2 -LW T0,0000 (V1) -LW T8,0008 (T2) -LW T5,0008 (T8) -ADDU T7,T5,T1 -LW T6,0000 (T7) -BEQ R0,R0,7F018C54 -SW T6,001C (T0) -LUI V1,8003 -ADDIU V1,V1,B5F8 -LUI A2,8003 -ADDIU A2,A2,B5F4 -SW R0,0000 (V1) -LUI A1,3DCC -ORI A1,A1,CCCD -JAL 7F06CE84 -LW A0,0000 (A2) ;A0=8002B5F4: -LUI A0,8003 -LW A0,B5F4 (A0) -JAL 7F06CC0C -ADDIU A1,SP,00A0 -LUI A0,8003 -LW A0,B5F4 (A0) -JAL 7F06CD3C -ADDIU A1,R0,0000 -LUI A0,8003 -LW A0,B5F4 (A0) -LUI A1,3F00 -JAL 7F06FF18 -ADDIU A2,R0,0000 -LUI T4,8003 -LW T9,B5EC (T4) -SLL T3,T9,0x3 -ADDU V0,T3,T4 -LHU A3,B8BE (V0) -MTC1 A3,F6 -LH T2,B8BC (V0) -NOP -NOP -CVT.S.W F12,F6 -SLL T8,T2,0x2 -ADDU A1,T4,T8 -LWC1 F4,0014 (SP) -LW V0,B5F4 (T4) -LW A1,9D6C (A1) ;A1= 80029D6C: ani.table.ptrs -MFC1 A3,F12 -LW A2,0070 (SP) -SWC1 F4,0010 (SP) -JAL 7F06FCA8 -SW R0,0014 (SP) -LUI AT,8003 -JAL 7000A450 ;V0=random -SW R0,A8CC (AT) ;8002A8CC=0: reset menu timer -MTC1 V0,F8 -BGEZ V0,7F018D10 -CVT.S.W F10,F8 -LUI AT,4F80 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -LUI AT,2F80 -MTC1 AT,F18 -LUI AT,42A0 -MTC1 AT,F6 -MUL.S F4,F10,F18 -LUI AT,428C -MTC1 AT,F16 -LUI AT,8007 -MUL.S F8,F4,F6 -ADD.S F10,F8,F16 -JAL 7000A450 ;V0=random -SWC1 F10,95A4 (AT) -MTC1 V0,F18 -LUI AT,4F80 -BGEZ V0,7F018D5C -CVT.S.W F4,F18 -MTC1 AT,F6 -NOP -ADD.S F4,F4,F6 -LUI AT,2F80 -MTC1 AT,F8 -LUI AT,42A0 -MTC1 AT,F10 -MUL.S F16,F4,F8 -LUI AT,428C -MTC1 AT,F6 -LUI AT,8007 -MUL.S F18,F16,F10 -ADD.S F4,F18,F6 -JAL 7000A450 ;V0=random -SWC1 F4,95A8 (AT) -MTC1 V0,F8 -LUI AT,4F80 -BGEZ V0,7F018DA8 -CVT.S.W F16,F8 -MTC1 AT,F10 -NOP -ADD.S F16,F16,F10 -LUI AT,2F80 -MTC1 AT,F18 -LUI AT,3F00 -MTC1 AT,F4 -MUL.S F6,F16,F18 -LUI AT,8005 -LWC1 F10,1B00 (AT) ;F10 -> 80051B00: -LUI AT,8007 -SUB.S F8,F6,F4 -MUL.S F16,F8,F10 -JAL 7000A450 ;V0=random -SWC1 F16,95B0 (AT) -MTC1 V0,F18 -LUI AT,4F80 -BGEZ V0,7F018DF4 -CVT.S.W F6,F18 -MTC1 AT,F4 -NOP -ADD.S F6,F6,F4 -LUI AT,2F80 -MTC1 AT,F8 -LUI AT,3F00 -MTC1 AT,F16 -MUL.S F10,F6,F8 -LUI AT,8005 -LWC1 F4,1B04 (AT) ;F4 -> 80051B04: -LUI AT,8007 -SUB.S F18,F10,F16 -MUL.S F6,F18,F4 -JAL 7000A450 ;V0=random -SWC1 F6,95B4 (AT) -MTC1 V0,F8 -LUI AT,4F80 -BGEZ V0,7F018E40 -CVT.S.W F10,F8 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -LUI AT,2F80 -MTC1 AT,F18 -LUI AT,4348 -MTC1 AT,F6 -MUL.S F4,F10,F18 -LUI AT,C2C8 -MTC1 AT,F16 -LUI AT,8007 -MUL.S F8,F4,F6 -ADD.S F10,F8,F16 -JAL 7000A450 ;V0=random -SWC1 F10,95BC (AT) -MTC1 V0,F18 -LUI V1,8007 -MTC1 R0,F0 -ADDIU V1,V1,95E8 -BGEZ V0,7F018E98 -CVT.S.W F4,F18 -LUI AT,4F80 -MTC1 AT,F6 -NOP -ADD.S F4,F4,F6 -LUI AT,2F80 -MTC1 AT,F8 -LUI AT,4348 -MTC1 AT,F10 -MUL.S F16,F4,F8 -LUI AT,C2C8 -MTC1 AT,F6 -LUI AT,8007 -LW RA,001C (SP) -ADDIU T5,R0,0001 -MUL.S F18,F16,F10 -ADD.S F4,F18,F6 -SWC1 F4,95C0 (AT) ;800695C0= -LUI AT,8007 -LWC1 F8,95A4 (AT) ;800695A4= -LUI AT,8007 -SWC1 F8,95A0 (AT) ;800695A0= -LUI AT,8007 -LWC1 F16,95B0 (AT) ;800695B0= -LUI AT,8007 -SWC1 F16,95AC (AT) ;800695AC= -LUI AT,8007 -LWC1 F10,95BC (AT) ;800695BC= -LUI AT,8007 -ADDIU SP,SP,00B8 -SWC1 F10,95B8 (AT) ;800695B8= -LUI AT,8007 -SW T5,95E4 (AT) ;800695E4= 1 -SWC1 F0,0000 (V1) ;800695E8+0 = 0.0 -SWC1 F0,0004 (V1) ;800695E8+4 = 0.0 -JR RA -SWC1 F0,0008 (V1) ;800695E8+8 = 0.0 - -+_+ - -7F018F18 4DA48 -LUI A0,8003 -LW A0,B5F4 (A0) ;A0=8002B5F4: p->??? -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ A0,R0,7F018F38 ;branch if NULL -NOP -//7F018F30: -JAL 7F06C3F8 ;0->A0+8: -NOP -//7F018F38: -LUI A0,8003 -LW A0,B5F8 (A0) ;A0=8002B5F8: p->obj.inst.controller -BEQL A0,R0,7F018F54 ;branch if NULL -LW RA,0014 (SP) -//7F018F48: -JAL 7F06C234 ;0->A0+8: -NOP -//7F018F50: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F018F60 - menu 18 interface - display cast.txt b/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F018F60 - menu 18 interface - display cast.txt deleted file mode 100644 index 96cd6b5..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F018F60 - menu 18 interface - display cast.txt +++ /dev/null @@ -1,264 +0,0 @@ -7F018F60 4DA90 menu 18 interface - display cast - note: reflects new NSNA entry format -ADDIU SP,SP,FFD8 -LUI AT,4238 -SW RA,0024 (SP) -MTC1 AT,F12 ;F12= [42380000] -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -JAL 70004544 -SW S0,0014 (SP) -LUI AT,4120 -MTC1 AT,F12 ;F12= [41200000] -LUI AT,44FA -MTC1 AT,F14 ;F14= [44FA0000] -JAL 70004650 -NOP -JAL 70004534 -ADDIU A0,R0,0001 ;A0=1 -//7F018FA4: set screen and view dimentions -LUI AT,8005 -JAL 70004590 ;set page width -LWC1 F12,1B08 (AT) ;F12=80051B08: -ADDIU A0,R0,01B8 ;A0=1B8: screen width -JAL 7F09B1DC ;Store screen width A0 & height A1 to current player -ADDIU A1,R0,014A ;A1=14A: screen height -ADDIU A0,R0,01B8 ;A0=1B8: viewport width -JAL 7000443C ;set viewport width (A0) and height (A1) -ADDIU A1,R0,014A ;A1=14A: viewport height -OR A0,R0,R0 ;A0=0 -JAL 7F09B1F8 ;Store viewport width A0 & viewport height A1 to current player -OR A1,R0,R0 ;A1=0 -OR A0,R0,R0 ;A0=0 -JAL 700044BC ;set viewport ulx (A0) and uly (A1) -OR A1,R0,R0 ;A1=0 -//7F018FE0: -LUI V0,8003 -ADDIU V0,V0,A8CC ;V0=8002A8CC -LUI T7,8005 -LW T7,8374 (T7) ;T7=80048374: 1 if not paused -LW T6,0000 (V0) ;T6=8002A8CC: menu timer -LUI S0,8003 -OR A0,R0,R0 ;A0=0 -ADDU T8,T6,T7 ;T8=timer+clock -SLTI AT,T8,00B5 ;TRUE if < 3 sec. -BNEZ AT,7F0192E4 ;check player advance if within 3 seconds... -SW T8,0000 (V0) ;update timer -//7F01900C: -ADDIU S0,S0,B5E8 ;S0=8002B5E8 -LW T0,0000 (S0) ;T0=8002B5E8: entry count -LUI S1,8003 -ADDIU S1,S1,B600 ;S1=8002B600 -ADDIU T1,T0,0001 ;T1=T0+1: entry++ -SW T1,0000 (S0) ;update value -ADDIU S3,R0,2710 -ADDIU S2,R0,000A -//7F01902C: check when character appears -LW V1,0000 (S0) ;V1=8002B5E8: entry# -LUI T4,8003 -MULTU V1,S2 -MFLO T2 ;T2=entry# * A: offset to entry -ADDU V0,S1,T2 ;V0=S1+offset: cast entry in 8002B600 table -LB T3,0008 (V0) ;T3=TRUE if only appears in credits -BEQL T3,R0,7F019068 ;branch if will always appear -LB T6,0000 (V0) -LW T4,B5FC (T4) ;T4=8002B5FC: TRUE plays full cast call -ADDIU T5,V1,0001 ;T5=entry#+1 -BNEL T4,R0,7F019068 ;branch if playing them all -LB T6,0000 (V0) -BEQ R0,R0,7F01902C ;try next character -SW T5,0000 (S0) ;update entry# -//7F019064: only display moonraker(m) after Aztec -LB T6,0000 (V0) ;T6=body -ADDIU AT,R0,0027 -BNEL T6,AT,7F019098 ;branch if not body 27: moonraker(m) -LW T9,0000 (S0) -JAL 7F01EADC ;V0= TRUE if Aztec completed on secret or 00 agent on any folder -NOP -BNEL V0,R0,7F019098 ;branch if it was -LW T9,0000 (S0) -LW T7,0000 (S0) ;T7=8002B5E8: entry# -ADDIU T8,T7,0001 ;T8=entry+1 -BEQ R0,R0,7F01902C ;try next character if Aztec wasn't finished -SW T8,0000 (S0) ;update entry# -//7F019094: only display moonraker(f) after Aztec -LW T9,0000 (S0) ;T9=entry# -ADDIU AT,R0,0028 -MULTU T9,S2 -MFLO T0 ;T0=entry# * A: offset to entry -ADDU T1,S1,T0 ;T1=8002B600+offset: p->entry in cast call -LB T2,0000 (T1) ;T2=body -BNEL T2,AT,7F0190D8 ;branch if not body 28: moonraker(f) -LW T5,0000 (S0) -JAL 7F01EADC ;V0= TRUE if Aztec completed on secret or 00 agent on any folder -NOP -BNEL V0,R0,7F0190D8 ;branch if it was -LW T5,0000 (S0) -LW T3,0000 (S0) ;T3=entry# -ADDIU T4,T3,0001 ;T4=entry#+1 -BEQ R0,R0,7F01902C ;try next character if Aztec wasn't finished -SW T4,0000 (S0) ;update entry# -//7F0190D4: only display Mayday after Aztec -LW T5,0000 (S0) ;T5=entry# -ADDIU AT,R0,000E -MULTU T5,S2 -MFLO T6 ;T6=entry# * A: offset to entry -ADDU T7,S1,T6 ;T7=8002B600+offset: p->entry in cast call -LB T8,0000 (T7) ;T8=body -BNEL T8,AT,7F01913C ;branch if not body E: Mayday -LW T2,0000 (S0) -JAL 7F01EADC ;V0= TRUE if Aztec completed on secret or 00 agent on any folder -NOP -BNEL V0,R0,7F01913C ;branch if it was -LW T2,0000 (S0) -JAL 7000A450 ;V0=random -NOP -DIVU V0,S3 -MFHI T9 ;T9=0-270F -BNEZ S3,7F019120 ;catch division by zero -NOP -BREAK -//7F019120: -BEQL T9,R0,7F01913C ;you have a 1/10000 chance of displaying it anyway! -LW T2,0000 (S0) -LW T0,0000 (S0) ;T0=entry# -ADDIU T1,T0,0001 ;T1=entry+1 -BEQ R0,R0,7F01902C ;try next character -SW T1,0000 (S0) ;update entry# -//7F019138: only display Jaws after Aztec -LW T2,0000 (S0) ;T2=entry# -ADDIU AT,R0,000D -MULTU T2,S2 -MFLO T3 -ADDU T4,S1,T3 -LB T5,0000 (T4) ;T5=body -BNEL T5,AT,7F0191A0 ;branch if not body D: Jaws -LW T9,0000 (S0) -JAL 7F01EADC ;V0= TRUE if Aztec completed on secret or 00 agent on any folder -NOP -BNEL V0,R0,7F0191A0 ;branch if it was -LW T9,0000 (S0) -JAL 7000A450 ;V0=random -NOP -DIVU V0,S3 -MFHI T6 ;T6=0-270F -BNEZ S3,7F019184 ;catch division by zero -NOP -BREAK -//7F019184: -BEQL T6,R0,7F0191A0 ;you have a 1/10000 chance of displaying it anyway! -LW T9,0000 (S0) -LW T7,0000 (S0) ;T7=entry# -ADDIU T8,T7,0001 ;T8=entry+1 -BEQ R0,R0,7F01902C ;try next character -SW T8,0000 (S0) ;update entry# -//7F01919C: only display Oddjob after Egypt -LW T9,0000 (S0) ;T9=entry# -ADDIU AT,R0,000F -MULTU T9,S2 -MFLO T0 -ADDU T1,S1,T0 -LB T2,0000 (T1) ;T2=body -BNEL T2,AT,7F019204 ;branch if not body F: Oddjob -LW T6,0000 (S0) -JAL 7F01EAE8 ;V0= TRUE if Egypt completed on 00 agent on any folder -NOP -BNEL V0,R0,7F019204 ;branch if it was -LW T6,0000 (S0) -JAL 7000A450 ;V0=random -NOP -DIVU V0,S3 -MFHI T3 ;T3=0-270F -BNEZ S3,7F0191E8 ;catch division by zero -NOP -BREAK -//7F0191E8: -BEQL T3,R0,7F019204 ;you have a 1/10000 chance of displaying it anyway! -LW T6,0000 (S0) -LW T4,0000 (S0) ;T1=entry# -ADDIU T5,T4,0001 ;T5=entry+1 -BEQ R0,R0,7F01902C ;try next character -SW T5,0000 (S0) ;update entry -//7F019200: only display Baron Samedi after Egypt -LW T6,0000 (S0) ;T6=entry# -ADDIU AT,R0,000C -MULTU T6,S2 -MFLO T7 -ADDU T8,S1,T7 -LB T9,0000 (T8) ;T9=body -BNEL T9,AT,7F019268 ;branch if not body C: Baron Samedi -LW V1,0000 (S0) -JAL 7F01EAE8 ;V0= TRUE if Egypt completed on 00 agent on any folder -NOP -BNEL V0,R0,7F019268 ;branch if it was -LW V1,0000 (S0) -JAL 7000A450 ;V0=random -NOP -DIVU V0,S3 -MFHI T0 ;T0=0-270F -BNEZ S3,7F01924C ;catch division by zero -NOP -BREAK -//7F01924C: -BEQL T0,R0,7F019268 ;you have a 1/10000 chance of displaying it anyway! -LW V1,0000 (S0) -LW T1,0000 (S0) ;T1=entry# -ADDIU T2,T1,0001 ;T2=entry+1 -BEQ R0,R0,7F01902C ;try next character -SW T2,0000 (S0) ;update entry -//7F019264: test for the end of the list -LW V1,0000 (S0) ;V1=entry# -ADDIU A0,R0,0018 ;A0=menu 18: cast call -LUI T6,8003 -MULTU V1,S2 -MFLO T3 -ADDU T4,S1,T3 -LB T3,0009 (T4) ;T3=kill byte -BEQ T3,R0,7F019290 ;branch if list isn't ending -LB T5,0000 (T4) ;T5=body -SW R0,0000 (S0) ;0->entry# -OR V1,R0,R0 ;V1=0 -//7F019290: calling menu 18 again runs the next actor! -BLEZ V1,7F0192A8 ;branch if invalid or final valid entry# -NOP -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1 on return -BEQ R0,R0,7F019310 -LW RA,0024 (SP) -//7F0192A8: set return to stage select menu after Cradle -LW T6,B5FC (T6) ;T6=8002B5FC: TRUE plays full cast call -ADDIU A0,R0,0007 ;A0=menu 7: select mission -BEQ T6,R0,7F0192D4 ;branch if wasn't triggered by Cradle -NOP -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1 on return -JAL 7F00E3E0 ;set cursor position to stage A0 on solo mission select page -ADDIU A0,R0,0011 ;A0=11: Aztec -LUI AT,8003 -BEQ R0,R0,7F01930C -SW R0,B5FC (AT) ;0->8002B5FC: reset flag -//7F0192D4: run an intro movie -JAL 7F0C0970 ;select and run an intro movie -NOP -BEQ R0,R0,7F019310 -LW RA,0024 (SP) -//7F0192E4: detect player advancing past menu -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,FFFF ;A1=any button -BEQ V0,R0,7F01930C ;branch if nothing pressed -LUI T7,8003 -LW T7,B5FC (T7) ;T7=8002B5FC: TRUE plays full cast call -ADDIU A0,R0,0005 ;A0=menu 5: main folder select -BNEL T7,R0,7F019310 ;can't advance when playing from Cradle -LW RA,0024 (SP) -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=on return -//7F01930C: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F019328 - menu 18 constructor - display cast.txt b/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F019328 - menu 18 constructor - display cast.txt deleted file mode 100644 index 5645342..0000000 --- a/notes/GE Documentation/Main Menus/Intro/Menu 18 - Display Cast/7F019328 - menu 18 constructor - display cast.txt +++ /dev/null @@ -1,1086 +0,0 @@ -7F019328 4DE58 menu 18 constructor - display cast -ADDIU SP,SP,FDB0 -LUI T6,8003 -SW RA,004C (SP) -SW S4,0048 (SP) -SW S3,0044 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -ADDIU T6,T6,BA78 ;T6=8002BA78 -LW AT,0000 (T6) ;AT=8002BA78: -ADDIU T7,SP,0244 -LW T4,0004 (T6) -SW AT,0000 (T7) -LW AT,0008 (T6) -LUI T5,8003 -ADDIU T5,T5,BA84 ;T5=8002BA84 -SW T4,0004 (T7) -SW AT,0008 (T7) -LW AT,0000 (T5) ;AT=8002BA84: -ADDIU T9,SP,0238 -LW T7,0004 (T5) -SW AT,0000 (T9) -LW AT,0008 (T5) -LUI T4,8003 -ADDIU T4,T4,BA90 ;T4=8002BA90 -SW T7,0004 (T9) -SW AT,0008 (T9) -LW AT,0000 (T4) ;AT=8002BA90: -ADDIU T6,SP,022C -LW T9,0004 (T4) -SW AT,0000 (T6) -LW AT,0008 (T4) -LUI T7,8003 -ADDIU T7,T7,BA9C ;T7=8002BA9C -SW T9,0004 (T6) -SW AT,0008 (T6) -OR S3,A0,R0 -ADDIU T6,T7,003C -ADDIU T5,SP,01A8 -//7F0193C4: copy 3C bytes from 8002BA9C to stack -LW AT,0000 (T7) ;AT=8002BA9C: -ADDIU T7,T7,000C -ADDIU T5,T5,000C -SW AT,FFF4 (T5) -LW AT,FFF8 (T7) -SW AT,FFF8 (T5) -LW AT,FFFC (T7) -BNE T7,T6,7F0193C4 -SW AT,FFFC (T5) -//7F0193E8: -LW AT,0000 (T7) -LUI V0,8003 -LUI T9,8003 -SW AT,0000 (T5) -LW V0,A8CC (V0) ;V0=8002A8CC: menu timer -LUI AT,4334 -MTC1 AT,F18 -MTC1 V0,F14 -ADDIU T9,T9,BADC ;T9=8002BADC -LW AT,0000 (T9) ;AT=8002BADC: -CVT.S.W F0,F14 ;F0=(float) menu timer -LW T6,0004 (T9) -ADDIU T4,SP,0134 -SW AT,0000 (T4) -LW AT,0008 (T9) -SW T6,0004 (T4) -DIV.S F16,F0,F18 -BLTZ V0,7F019440 -SW AT,0008 (T4) -SLTI AT,V0,00B4 -BNEL AT,R0,7F019450 -SLTI AT,V0,001E -//7F019440: -MTC1 R0,F4 -BEQ R0,R0,7F0194A8 -SWC1 F4,0144 (SP) -//7F01944C: -SLTI AT,V0,001E -BEQ AT,R0,7F01946C -LUI AT,41F0 -MTC1 AT,F10 -NOP -DIV.S F8,F0,F10 -BEQ R0,R0,7F0194A8 -SWC1 F8,0144 (SP) -//7F01946C: -SLTI AT,V0,0097 -BNEZ AT,7F019498 -ADDIU T7,R0,00B4 -SUBU T5,T7,V0 -MTC1 T5,F6 -LUI AT,41F0 -MTC1 AT,F10 -CVT.S.W F4,F6 -DIV.S F8,F4,F10 -BEQ R0,R0,7F0194A8 -SWC1 F8,0144 (SP) -//7F019498: -LUI AT,3F80 -MTC1 AT,F6 -NOP -SWC1 F6,0144 (SP) -//7F0194A8: fill background -OR A0,S3,R0 ;A0=S3: p->DL -OR A1,R0,R0 ;A1=0 red -OR A2,R0,R0 ;A2=0 green -OR A3,R0,R0 ;A3=0 blue -JAL 700046D0 ;setfillcolour("black") -SWC1 F16,0148 (SP) -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 ;A0=V0: p->DL -//7F0194C8: -LUI AT,8007 -LWC1 F0,95A4 (AT) ;F0=800695A4: -LUI AT,8007 -LWC1 F4,95A8 (AT) ;F4=800695A8: -LWC1 F16,0148 (SP) -LUI S1,8007 -SUB.S F10,F4,F0 -ADDIU S1,S1,95A0 ;S1=800695A0 -LUI AT,8007 -LUI S0,8007 -MUL.S F8,F10,F16 -ADDIU S0,S0,95AC ;S0=800695AC -LUI S2,8007 -ADDIU S2,S2,95B8 ;S2=800695B8 -OR S3,V0,R0 ;S3=V0: p->DL -ADD.S F6,F8,F0 -SWC1 F6,0000 (S1) -LWC1 F2,95B0 (AT) -LUI AT,8007 -LWC1 F4,95B4 (AT) -LUI AT,8007 -SUB.S F10,F4,F2 -MUL.S F8,F10,F16 -ADD.S F6,F8,F2 -SWC1 F6,0000 (S0) -LWC1 F12,95BC (AT) -LUI AT,8007 -LWC1 F4,95C0 (AT) -LWC1 F14,0000 (S0) -SUB.S F10,F4,F12 -MTC1 R0,F4 -MUL.S F8,F10,F16 -C.LT.S F14,F4 -ADD.S F6,F8,F12 -BC1F 7F01956C -SWC1 F6,0000 (S2) -LUI AT,8005 -LWC1 F10,1B0C (AT) -ADD.S F8,F14,F10 -SWC1 F8,0000 (S0) -LWC1 F14,0000 (S0) -//7F01956C: -JAL 7F057EAC -MOV.S F12,F14 -SWC1 F0,0078 (SP) -JAL 7F057EA0 -LWC1 F12,0000 (S0) -LUI AT,8005 -LWC1 F6,1B10 (AT) -LWC1 F2,0000 (S1) -LWC1 F8,0078 (SP) -MUL.S F4,F0,F6 -LWC1 F12,0000 (S0) -MUL.S F10,F4,F2 -NOP -MUL.S F6,F2,F8 -LWC1 F8,0000 (S2) -SWC1 F8,0248 (SP) -ADD.S F4,F10,F6 -JAL 7F057EA0 -SWC1 F4,0244 (SP) -SWC1 F0,0078 (SP) -JAL 7F057EAC -LWC1 F12,0000 (S0) -LWC1 F2,0000 (S1) -LWC1 F10,0078 (SP) -LUI AT,8005 -LWC1 F4,1B14 (AT) -MUL.S F6,F2,F10 -LWC1 F12,0000 (S0) -MUL.S F8,F0,F4 -NOP -MUL.S F10,F8,F2 -SUB.S F4,F6,F10 -JAL 7F057EA0 -SWC1 F4,024C (SP) -LUI AT,8005 -LWC1 F8,1B18 (AT) -LWC1 F10,0000 (S1) -LWC1 F12,0000 (S0) -MUL.S F6,F0,F8 -LWC1 F8,0238 (SP) -MUL.S F4,F6,F10 -ADD.S F6,F8,F4 -JAL 7F057EAC -SWC1 F6,0238 (SP) -LUI AT,8005 -LWC1 F8,1B1C (AT) -NEG.S F10,F0 -LWC1 F6,0000 (S1) -MUL.S F4,F10,F8 -LWC1 F8,0240 (SP) -ADDIU A0,R0,0002 -MUL.S F10,F4,F6 -ADD.S F4,F8,F10 -JAL 7F0BD6F8 -SWC1 F4,0240 (SP) -MTC1 R0,F0 -LUI AT,457A -MTC1 AT,F6 -LUI AT,3F80 -MTC1 AT,F8 -MFC1 A2,F0 -MFC1 A3,F0 -OR S0,V0,R0 -ADDIU A0,SP,00E0 -OR A1,V0,R0 -SWC1 F0,0014 (SP) -SWC1 F0,0018 (SP) -SWC1 F0,001C (SP) -SWC1 F0,0020 (SP) -SWC1 F0,0028 (SP) -SWC1 F6,0010 (SP) -JAL 70017370 -SWC1 F8,0024 (SP) -//7F019690: moveword -OR V0,S3,R0 ;V0=S3: p->DL -ADDIU S3,S3,0008 ;S3+=8: next DL op -LUI T3,BC00 -LUI T8,8000 -ORI T8,T8,0040 -ORI T3,T3,0002 -OR V1,S3,R0 ;V1=S3: p->DL -ADDIU S3,S3,0008 ;S3+=8: next DL op -SW T3,0000 (V0) ;DL+0= moveword.u: int.matrix -SW T8,0004 (V0) ;DL+4= moveword.l: 80000040 -//7F0196B8: -LUI T4,0386 -LUI T9,8003 -ADDIU T9,T9,A978 -ORI T4,T4,0010 -OR A0,S3,R0 -ADDIU S3,S3,0008 -SW T4,0000 (V1) -SW T9,0004 (V1) -LUI T6,0388 -LUI T7,8003 -ADDIU T7,T7,A970 -ORI T6,T6,0010 -OR A1,S3,R0 -SW T6,0000 (A0) -SW T7,0004 (A0) -LUI T5,0384 -ORI T5,T5,0010 -SW T5,0000 (A1) -SW S0,0004 (A1) -ADDIU S3,S3,0008 -OR A3,S3,R0 -LUI T3,0382 -ORI T3,T3,0010 -ADDIU T8,S0,0010 -LUI S4,8003 -ADDIU S4,S4,B5F4 ;S4=8002B5F4 -SW T8,0004 (A3) -SW T3,0000 (A3) -//7F019728: -LUI A1,8005 -ADDIU S3,S3,0008 -LW A1,8374 (A1) ;A1=80048374: 1 if clock running -LW A0,0000 (S4) ;A0=8002B5F4: -JAL 7F070AEC -ADDIU A2,R0,0001 ;A2=1 -JAL 7F06C400 ;A0-> [80036084] -ADDIU A0,R0,0001 ;A0=1 -JAL 7F073FC8 ;A0-> [800363F0] -OR A0,R0,R0 ;A0=0 -JAL 7F06D6B0 -LW A0,0000 (S4) ;A0=8002B5F4: -LUI A3,8003 -LW A3,B5F8 (A3) ;A3=8002B5F8: -BEQ A3,R0,7F019790 -NOP -LW T4,0008 (A3) -LW T9,0008 (T4) -LW A1,0000 (T9) -BEQ A1,R0,7F019790 -NOP -JAL 7F06C79C -OR A0,A3,R0 -SH R0,0000 (V0) -LUI A3,8003 -LW A3,B5F8 (A3) ;A3=8002B5F8: -BEQL A3,R0,7F0197BC -LW T5,0000 (S4) -LW T6,0008 (A3) -LW T7,0008 (T6) -LW A1,0008 (T7) -BEQL A1,R0,7F0197BC -LW T5,0000 (S4) -JAL 7F06C79C -OR A0,A3,R0 -SW R0,0000 (V0) -LW T5,0000 (S4) -LW T3,0008 (T5) -LH A0,000E (T3) -SLL T8,A0,0x6 -JAL 7F0BD714 -OR A0,T8,R0 -ADDIU S2,SP,01E8 -SW V0,01B8 (SP) -JAL 7F057FD0 -OR A0,S2,R0 -SW S2,01A8 (SP) -ADDIU A0,SP,01A8 -JAL 7F06F2F8 -LW A1,0000 (S4) -LW A0,0000 (S4) -JAL 7F06CB98 -ADDIU A1,SP,0128 -LUI A2,8007 -ADDIU A2,A2,95E4 -LW V0,0000 (A2) -OR S1,R0,R0 -LUI V1,8005 -BEQ V0,R0,7F019828 -NOP -LWC1 F10,012C (SP) -LUI S0,8007 -ADDIU S0,S0,95E8 -SWC1 F10,0004 (S0) -LUI S0,8007 -ADDIU S0,S0,95E8 -LWC1 F4,0000 (S0) -LWC1 F6,0128 (SP) -LUI AT,8005 -SWC1 F4,006C (SP) -LWC1 F8,006C (SP) -LWC1 F4,0004 (S0) -LWC1 F18,8378 (AT) -SUB.S F10,F6,F8 -SWC1 F4,0064 (SP) -LWC1 F8,0064 (SP) -LWC1 F6,012C (SP) -LWC1 F4,0008 (S0) -DIV.S F2,F10,F18 -SWC1 F4,0060 (SP) -SUB.S F10,F6,F8 -LWC1 F8,0060 (SP) -LWC1 F6,0130 (SP) -DIV.S F12,F10,F18 -SUB.S F10,F6,F8 -BEQ V0,R0,7F0198AC -DIV.S F14,F10,F18 -LUI AT,8005 -LWC1 F16,1B20 (AT) -LUI V0,8007 -ADDIU V0,V0,9608 -DIV.S F4,F2,F16 -DIV.S F6,F12,F16 -SWC1 F4,0000 (V0) -DIV.S F8,F14,F16 -SWC1 F6,0004 (V0) -SWC1 F8,0008 (V0) -LW V1,8374 (V1) -LUI V0,8007 -LUI AT,8005 -LWC1 F16,1B24 (AT) -ADDIU V0,V0,9608 -SWC1 F2,0134 (SP) -SWC1 F12,0138 (SP) -BLEZ V1,7F019960 -SWC1 F14,013C (SP) -LUI AT,8005 -LWC1 F0,1B28 (AT) -LWC1 F4,0000 (V0) -ADDIU S1,S1,0001 -SLT AT,S1,V1 -MUL.S F10,F0,F4 -BEQ AT,R0,7F01992C -LWC1 F8,0004 (V0) -MUL.S F6,F0,F8 -ADD.S F4,F2,F10 -LWC1 F8,0008 (V0) -ADDIU S1,S1,0001 -SLT AT,S1,V1 -MUL.S F10,F0,F8 -SWC1 F4,0000 (V0) -ADD.S F6,F12,F6 -LWC1 F4,0000 (V0) -SWC1 F6,0004 (V0) -ADD.S F6,F14,F10 -MUL.S F10,F0,F4 -LWC1 F8,0004 (V0) -BNEZ AT,7F0198F0 -SWC1 F6,0008 (V0) -MUL.S F6,F0,F8 -LWC1 F8,0008 (V0) -ADD.S F4,F2,F10 -MUL.S F10,F0,F8 -SWC1 F4,0000 (V0) -ADD.S F6,F12,F6 -SWC1 F6,0004 (V0) -ADD.S F6,F14,F10 -SWC1 F6,0008 (V0) -SWC1 F14,013C (SP) -SWC1 F12,0138 (SP) -SWC1 F2,0134 (SP) -OR S1,R0,R0 -LWC1 F4,0000 (V0) -LWC1 F8,0004 (V0) -LUI V1,8007 -MUL.S F6,F4,F16 -LWC1 F4,0008 (V0) -ADDIU V1,V1,95F8 -MUL.S F10,F8,F16 -LWC1 F8,006C (SP) -LW T4,0000 (S4) -ADDIU A1,SP,0134 -SWC1 F6,0000 (V1) -MUL.S F6,F4,F16 -SWC1 F10,0004 (V1) -LWC1 F10,0000 (V1) -MUL.S F4,F10,F18 -SWC1 F6,0008 (V1) -LWC1 F10,0064 (SP) -ADD.S F6,F8,F4 -LWC1 F8,0004 (V1) -MUL.S F4,F8,F18 -SWC1 F6,0000 (S0) -LWC1 F8,0060 (SP) -ADD.S F6,F10,F4 -LWC1 F10,0008 (V1) -MUL.S F4,F10,F18 -SWC1 F6,0004 (S0) -ADD.S F6,F8,F4 -SWC1 F6,0008 (S0) -JAL 7F058474 -LW A0,000C (T4) -LWC1 F10,0004 (S0) -LWC1 F4,0008 (S0) -LUI A2,8007 -ADDIU A2,A2,95E4 -LW T9,0000 (A2) -LUI AT,8005 -SWC1 F10,0064 (SP) -SWC1 F4,0060 (SP) -LWC1 F2,0134 (SP) -LWC1 F12,0138 (SP) -LWC1 F14,013C (SP) -LWC1 F18,0000 (S0) -LWC1 F8,0064 (SP) -LWC1 F6,0060 (SP) -LWC1 F0,1B30 (AT) -LUI AT,8005 -LWC1 F16,1B34 (AT) -SUB.S F2,F2,F18 -SUB.S F12,F12,F8 -BEQ T9,R0,7F019A50 -SUB.S F14,F14,F6 -DIV.S F10,F2,F16 -LUI V0,8007 -ADDIU V0,V0,95D8 -SW R0,0000 (A2) -DIV.S F8,F12,F16 -SWC1 F10,0000 (V0) -DIV.S F4,F14,F16 -SWC1 F8,0004 (V0) -SWC1 F4,0008 (V0) -LUI V1,8005 -LW V1,8374 (V1) -LUI V0,8007 -ADDIU V0,V0,95D8 -BLEZL V1,7F019AE8 -LWC1 F10,0000 (V0) -LWC1 F4,0000 (V0) -ADDIU S1,S1,0001 -SLT AT,S1,V1 -MUL.S F8,F0,F4 -BEQ AT,R0,7F019ABC -LWC1 F10,0004 (V0) -MUL.S F6,F0,F10 -ADD.S F4,F2,F8 -LWC1 F10,0008 (V0) -ADDIU S1,S1,0001 -SLT AT,S1,V1 -MUL.S F8,F0,F10 -SWC1 F4,0000 (V0) -ADD.S F6,F12,F6 -LWC1 F4,0000 (V0) -SWC1 F6,0004 (V0) -ADD.S F6,F14,F8 -MUL.S F8,F0,F4 -LWC1 F10,0004 (V0) -BNEZ AT,7F019A80 -SWC1 F6,0008 (V0) -MUL.S F6,F0,F10 -LWC1 F10,0008 (V0) -ADD.S F4,F2,F8 -MUL.S F8,F0,F10 -SWC1 F4,0000 (V0) -ADD.S F6,F12,F6 -SWC1 F6,0004 (V0) -ADD.S F6,F14,F8 -SWC1 F6,0008 (V0) -OR S1,R0,R0 -LWC1 F10,0000 (V0) -LWC1 F4,0004 (V0) -LUI V1,8007 -MUL.S F8,F10,F16 -LWC1 F10,0008 (V0) -ADDIU V1,V1,95C8 -MUL.S F6,F4,F16 -LUI AT,4120 -LWC1 F0,023C (SP) -OR A0,S2,R0 -SWC1 F8,0000 (V1) -MUL.S F8,F10,F16 -LWC1 F4,0000 (V1) -SWC1 F6,0004 (V1) -LWC1 F10,0004 (V1) -LWC1 F6,0064 (SP) -ADD.S F2,F18,F4 -MTC1 AT,F4 -SWC1 F8,0008 (V1) -ADD.S F8,F6,F10 -LWC1 F10,0060 (SP) -SWC1 F6,0050 (SP) -LUI AT,4252 -SUB.S F12,F8,F4 -LWC1 F8,0008 (V1) -LWC1 F4,0238 (SP) -SWC1 F10,0054 (SP) -ADD.S F14,F10,F8 -LWC1 F10,0050 (SP) -LWC1 F6,0244 (SP) -ADD.S F8,F4,F2 -LWC1 F4,0240 (SP) -SWC1 F14,013C (SP) -ADD.S F6,F6,F18 -SWC1 F8,0238 (SP) -SWC1 F8,0050 (SP) -MTC1 AT,F8 -ADD.S F4,F4,F14 -SWC1 F6,0244 (SP) -MFC1 A1,F6 -ADD.S F10,F10,F8 -LWC1 F8,0248 (SP) -SWC1 F4,0240 (SP) -SWC1 F4,0058 (SP) -ADD.S F8,F8,F10 -LWC1 F10,024C (SP) -LWC1 F4,0054 (SP) -ADD.S F0,F0,F12 -SWC1 F8,0248 (SP) -MFC1 A2,F8 -ADD.S F10,F10,F4 -LWC1 F4,0050 (SP) -LWC1 F8,022C (SP) -LWC1 F6,0058 (SP) -SWC1 F10,024C (SP) -MFC1 A3,F10 -SWC1 F4,0010 (SP) -LWC1 F4,0234 (SP) -LWC1 F10,0230 (SP) -SWC1 F0,0014 (SP) -SWC1 F0,023C (SP) -SWC1 F12,0138 (SP) -SWC1 F2,0134 (SP) -SWC1 F8,001C (SP) -SWC1 F6,0018 (SP) -SWC1 F4,0024 (SP) -JAL 7F059694 -SWC1 F10,0020 (SP) -LW T6,0000 (S4) -SW S2,01A8 (SP) -LW T7,0008 (T6) -LH A0,000E (T7) -SLL T5,A0,0x6 -JAL 7F0BD714 -OR A0,T5,R0 -SW V0,01B8 (SP) -ADDIU A0,SP,01A8 -JAL 7F06F2F8 -LW A1,0000 (S4) -LUI A3,8003 -LW A3,B5F8 (A3) ;A3=8002B5F8: -BEQL A3,R0,7F019CC0 -ADDIU T8,R0,0007 -LW A0,0000 (S4) -LW A1,001C (A3) -JAL 7F06C660 -OR A2,R0,R0 -LW T8,0000 (S4) -SW V0,01A8 (SP) -LUI A3,8003 -LW T4,0008 (T8) -LW A3,B5F8 (A3) ;A3=8002B5F8: -ADDIU S2,SP,0160 -LW T9,0008 (T4) -LW T3,001C (A3) -OR A1,S2,R0 -LW T6,0014 (T9) -LUI AT,8005 -BNEL T3,T6,7F019C98 -LW T7,0008 (A3) -JAL 7F058688 -LWC1 F12,1B38 (AT) -LW A0,01A8 (SP) -JAL 7F058068 -OR A1,S2,R0 -LUI A3,8003 -LW A3,B5F8 (A3) ;A3=8002B5F8: -SW S2,01A8 (SP) -LW T7,0008 (A3) -LH A0,000E (T7) -SLL T5,A0,0x6 -JAL 7F0BD714 -OR A0,T5,R0 -LUI A1,8003 -SW V0,01B8 (SP) -LW A1,B5F8 (A1) ;A1=8002B5F8: -JAL 7F06F248 -ADDIU A0,SP,01A8 -ADDIU T8,R0,0007 -ADDIU T4,R0,0001 -ADDIU T9,R0,0003 -ADDIU S2,SP,0160 -SW T8,01D8 (SP) -SW T4,01AC (SP) -SW S3,01B4 (SP) -SW T9,01B0 (SP) -ADDIU A0,SP,01A8 -JAL 7F074684 -LW A1,0000 (S4) -LUI A3,8003 -LW A3,B5F8 (A3) ;A3=8002B5F8: -BEQ A3,R0,7F019D00 -ADDIU A0,SP,01A8 -JAL 7F074684 -OR A1,A3,R0 -LW S3,01B4 (SP) -JAL 7F06C400 -OR A0,R0,R0 -LW V0,0000 (S4) -LW T3,0008 (V0) -LH T6,000E (T3) -BLEZ T6,7F019D68 -OR S0,R0,R0 -LW T7,000C (V0) -OR A1,S2,R0 -JAL 7F058020 -ADDU A0,T7,S0 -LW T5,0000 (S4) -SLL T4,S1,0x6 -OR A0,S2,R0 -LW T8,000C (T5) -JAL 7F058C9C -ADDU A1,T8,T4 -LW V0,0000 (S4) -ADDIU S1,S1,0001 -ADDIU S0,S0,0040 -LW T9,0008 (V0) -LH T3,000E (T9) -SLT AT,S1,T3 -BNEL AT,R0,7F019D24 -LW T7,000C (V0) -LUI A3,8003 -LW A3,B5F8 (A3) ;A3=8002B5F8: -BEQL A3,R0,7F019DE4 -OR V0,S3,R0 -LW T6,0008 (A3) -OR S1,R0,R0 -OR S0,R0,R0 -LH T7,000E (T6) -BLEZL T7,7F019DE4 -OR V0,S3,R0 -LW T5,000C (A3) -OR A1,S2,R0 -JAL 7F058020 -ADDU A0,T5,S0 -LUI T8,8003 -LW T8,B5F8 (T8) ;T8=8002B5F8: -SLL T9,S1,0x6 -OR A0,S2,R0 -LW T4,000C (T8) -JAL 7F058C9C -ADDU A1,T4,T9 -LUI A3,8003 -LW A3,B5F8 (A3) ;A3=8002B5F8: -ADDIU S1,S1,0001 -ADDIU S0,S0,0040 -LW T3,0008 (A3) -LH T6,000E (T3) -SLT AT,S1,T6 -BNEL AT,R0,7F019D94 -LW T5,000C (A3) -// -OR V0,S3,R0 ;V0=S3: p->DL -LUI T5,006E -ORI T5,T5,0528 ;T5=006E0528: lrx=6E0 | lry=528 -LUI T7,ED00 -SW T7,0000 (V0) ;DL+0= setscissor.u: ulx=0, uly=0 -SW T5,0004 (V0) ;DL+4= setscissor.l: lrx=6E0, lry=528 -// ppesync -ADDIU S3,S3,0008 -LUI A3,E700 -ADDIU A0,S3,0008 ;A0=S3+8: next DL op -SW A3,0000 (S3) ;DL+0= pipesync.u -SW R0,0004 (S3) ;DL+4= pipesync.l -// setothermode_h: cycle -LUI T8,BA00 -ORI T8,T8,1402 ;T8= setothermode_h | cycle type -SW T8,0000 (A0) ;DL+0= setothermode_h.u: cycle type -SW R0,0004 (A0) ;DL+4= setothermode_h.l: 1 cycle -// setothermode_h: rgb dither -ADDIU A1,A0,0008 ;A1=A0+8: next DL op -LUI T0,BA00 -ORI T0,T0,0602 ;T0= setothermode_h | rgb dither -ADDIU A2,A1,0008 ;A2=A1+8: next DL op -ADDIU T4,R0,00C0 -LUI T1,BA00 -SW T4,0004 (A1) ;DL+4= setothermode_h.l: disable -SW T0,0000 (A1) ;DL+0= setothermode_h.u: rgbdither -// setothermode_h: texture perspective -ORI T1,T1,1301 ;T1= setothermode_h | texture perspective -ADDIU V0,A2,0008 ;V0=A2+8: next DL op -SW T1,0000 (A2) ;DL+0= setothermode_h.u: texture perspective -SW R0,0004 (A2) ;DL+4= setothermode_h.l: none -// setothermode_l -LUI T9,B900 -ORI T9,T9,0002 -ADDIU V1,V0,0008 -LUI T2,BA00 -SW T9,0000 (V0) -SW R0,0004 (V0) -// setothermode_h: texture level of detail -ORI T2,T2,1001 ;T2= setothermode_h | texture level of detail -ADDIU S3,V1,0008 ;S3=V1+8: next DL op -SW T2,0000 (V1) ;DL+0= setothermode_h.u: texture lod -SW R0,0004 (V1) ;DL+4= setothermode_h.l: clamp -// setothermode_h: texture filter -OR A0,S3,R0 ;A0=S3: p->DL -LUI T3,BA00 -ORI T3,T3,0C02 ;T3= setothermode_h | texture filter -ADDIU T6,R0,2000 -SW T6,0004 (A0) ;DL+4= setothermode_h.l: bi-level interpretation -SW T3,0000 (A0) ;DL+0= setothermode_h.u: texture filter -// setothermode_h: texture convert -ADDIU A1,S3,0008 ;A1=S3+8: next DL op -LUI T7,BA00 -ORI T7,T7,0903 ;T7= setothermode_h | texture convert -SW T7,0000 (A1) ;DL+0= setothermode_h.u: texture convert -ADDIU A2,A1,0008 ;A2=A1+8: next DL op -ADDIU T5,R0,0C00 -SW T5,0004 (A1) ;DL+4= setothermode_h.l: filter -// setothermode_h: texture look-up table -LUI T8,BA00 -ORI T8,T8,0E02 ;T8= setothermode_h | texture look-up table -ADDIU V0,A2,0008 ;V0=A2+8: next DL op -SW T8,0000 (A2) ;DL+0= setothermode_h.u: texture lut -SW R0,0004 (A2) ;DL+4= setothermode_h.l: none -// setothermode_l -LUI T9,0050 -LUI T4,B900 -ORI T4,T4,031D -ORI T9,T9,4340 -ADDIU V1,V0,0008 -SW T9,0004 (V0) -SW T4,0000 (V0) -// -LUI T3,FCFF -LUI T6,FFFD -ORI T6,T6,F6FB -ORI T3,T3,FFFF -SW T3,0000 (V1) -SW T6,0004 (V1) -// setprimcolour: set alpha level for screen -ADDIU A0,V1,0008 -LUI T7,FA00 -SW T7,0000 (A0) ;DL+0= setprimcolour.u -LUI AT,437F -MTC1 AT,F6 -LWC1 F8,0144 (SP) -ADDIU T4,R0,00FF ;T4=000000FF black -ADDIU S3,A0,0008 ;S3=A0+8: next DL op -MUL.S F0,F6,F8 -LUI T6,F66E -ORI T6,T6,0528 ;T6=F66E0528: fillrect | lrx=1B8 | lrx fract=2 | lry=14A | lry fract=0 -ADDIU A2,S3,0008 ;A2=S3+8: next DL op -ADDIU V0,A2,0008 ;V0=A2+8: next DL op -ADDIU V1,V0,0008 ;V1=V0+8: next DL op -ADDIU T7,R0,0040 ;T7=40 -TRUNC.W.S F10,F0 -LUI T5,0008 -ADDIU A1,V1,0008 ;A1=V1+8: next DL op -MFC1 T8,F10 -NOP -SUBU T9,T4,T8 ;T9=100% black - timed opacity -ANDI T3,T9,00FF ;T3=foreground colour -SW T3,0004 (A0) ;DL+4= setprimcolour.l: black x% -// fillrect -SW R0,0004 (S3) ;DL+4= fillrect.l: ulx=0, ulx fract=0, uly=0, uly fract=0 -SW T6,0000 (S3) ;DL+0= fillrect.u: lrx=1B8,lry=14A -// pipesync -SW R0,0004 (A2) ;DL+4= pipesync.l -SW A3,0000 (A2) ;DL+0= pipesync.u -// setothermode_h: bayer -SW T7,0004 (V0) ;DL+4= setothermode_h.l: bayer -SW T0,0000 (V0) ;DL+0= setothermode_h.u: rgbdither -// setothermode_h: texture perspective -SW T5,0004 (V1) ;DL+4= setothermode_h.l: perspective -SW T1,0000 (V1) ;DL+0= setothermode_h.u: texture perspective -// setothermode_h: texture level of detail -LUI T4,0001 -SW T4,0004 (A1) ;DL+4= lod -SW T2,0000 (A1) ;DL+0= setothermode_h.u: texture lod -// call another microcode constructor -ADDIU A0,A1,0008 ;A0=A1+8: next DL op -JAL 7F0ACD98 -SWC1 F0,0070 (SP) -// -LUI T8,8003 -LW T8,B5FC (T8) ;T8=8002B5FC: if TRUE, actor intros play full character list -OR S3,V0,R0 ;S3=V0: p->DL -BNEZ T8,7F01A110 ;branch if playing the full list -LUI T9,8003 -LW T9,B5E8 (T9) ;T9=8002B5E8: if TRUE, don't play an intro movie after the actors list -LUI A0,8003 -SLL T3,T9,0x2 -ADDU T3,T3,T9 -SLL T3,T3,0x1 -ADDU A0,A0,T3 -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,B602 (A0) ;A0=8002B602: -LUI T6,8004 -LW T6,0EB4 (T6) -LUI S4,8004 -ADDIU S4,S4,0EB8 -OR S1,V0,R0 -LW A3,0000 (S4) -ADDIU A0,SP,0150 -ADDIU A1,SP,0154 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C -SW T6,0010 (SP) -LW V0,0154 (SP) -LW T8,0150 (SP) -ADDIU T5,R0,013B -BGEZ V0,7F01A004 -SRA T7,V0,0x1 -ADDIU AT,V0,0001 -SRA T7,AT,0x1 -SUBU A1,T5,T7 -ADDIU T4,R0,006C -ADDU A3,A1,V0 -ADDIU T9,T8,006D -SW T4,0158 (SP) -SW T9,0010 (SP) -ADDIU A3,A3,0001 -SW A1,015C (SP) -OR A0,S3,R0 -ADDIU A2,R0,006C -JAL 7F0AD014 -SW R0,0014 (SP) -JAL 7000441C -OR S3,V0,R0 -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C -OR S0,T3,R0 -CFC1 T7,F31 -ADDIU T4,R0,0001 -CTC1 T4,F31 -LWC1 F4,0070 (SP) -LUI T5,8004 -LW T5,0EB4 (T5) -CVT.W.S F6,F4 -LW T6,0000 (S4) -OR A0,S3,R0 -ADDIU A1,SP,015C -CFC1 T4,F31 -ADDIU A2,SP,0158 -OR A3,S1,R0 -ANDI T4,T4,0078 -SW T5,0014 (SP) -BEQ T4,R0,7F01A0D8 -SW T6,0010 (SP) -LUI AT,4F00 -MTC1 AT,F6 -ADDIU T4,R0,0001 -SUB.S F6,F4,F6 -CTC1 T4,F31 -NOP -CVT.W.S F6,F6 -CFC1 T4,F31 -NOP -ANDI T4,T4,0078 -BNEZ T4,7F01A0D0 -NOP -MFC1 T4,F6 -LUI AT,8000 -BEQ R0,R0,7F01A0E8 -OR T4,T4,AT -BEQ R0,R0,7F01A0E8 -ADDIU T4,R0,FFFF -MFC1 T4,F6 -NOP -BLTZ T4,7F01A0D0 -NOP -ADDIU AT,R0,FF00 -OR T8,T4,AT -CTC1 T7,F31 -SW T8,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -JAL 7F0ADABC -SW R0,0028 (SP) -OR S3,V0,R0 -CFC1 T6,F31 -ADDIU S2,R0,0001 -CTC1 S2,F31 -LWC1 F8,0070 (SP) -LUI T9,8003 -LW T9,B5E8 (T9) -CVT.W.S F10,F8 -LUI A0,8003 -SLL T3,T9,0x2 -ADDU T3,T3,T9 -CFC1 S2,F31 -SLL T3,T3,0x1 -LUI S4,8004 -ADDU A0,A0,T3 -ANDI S2,S2,0078 -ADDIU S4,S4,0EB8 -BEQ S2,R0,7F01A1A0 -LHU A0,B604 (A0) -LUI AT,4F00 -MTC1 AT,F10 -ADDIU S2,R0,0001 -SUB.S F10,F8,F10 -CTC1 S2,F31 -NOP -CVT.W.S F10,F10 -CFC1 S2,F31 -NOP -ANDI S2,S2,0078 -BNEZ S2,7F01A198 -NOP -MFC1 S2,F10 -LUI AT,8000 -BEQ R0,R0,7F01A1B0 -OR S2,S2,AT -BEQ R0,R0,7F01A1B0 -ADDIU S2,R0,FFFF -MFC1 S2,F10 -NOP -BLTZ S2,7F01A198 -NOP -ADDIU AT,R0,FF00 -OR T5,S2,AT -CTC1 T6,F31 -JAL 7F0C1DD8 -OR S2,T5,R0 -LUI T7,8004 -LW T7,0EB4 (T7) -OR S1,V0,R0 -ADDIU A0,SP,0150 -ADDIU A1,SP,0154 -OR A2,V0,R0 -LW A3,0000 (S4) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T7,0010 (SP) -LW V0,0154 (SP) -LW T3,0150 (SP) -ADDIU T8,R0,013B -BGEZ V0,7F01A208 -SRA T4,V0,0x1 -ADDIU AT,V0,0001 -SRA T4,AT,0x1 -SUBU A1,T8,T4 -ADDIU T9,R0,0098 -ADDU A3,A1,V0 -ADDIU T6,T3,0099 -SW T9,0158 (SP) -SW T6,0010 (SP) -ADDIU A3,A3,0001 -SW A1,015C (SP) -OR A0,S3,R0 -ADDIU A2,R0,0098 -JAL 7F0AD014 -SW R0,0014 (SP) -JAL 7000441C -OR S3,V0,R0 -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C -OR S0,T5,R0 -LUI T8,8004 -LW T8,0EB4 (T8) -LW T7,0000 (S4) -OR A0,S3,R0 -ADDIU A1,SP,015C -ADDIU A2,SP,0158 -OR A3,S1,R0 -SW S2,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -JAL 7F0ADABC -SW T7,0010 (SP) -LUI T4,8003 -LW T4,B5E8 (T4) -LUI A0,8003 -OR S3,V0,R0 -SLL T9,T4,0x2 -ADDU T9,T9,T4 -SLL T9,T9,0x1 -ADDU A0,A0,T9 -JAL 7F0C1DD8 -LHU A0,B606 (A0) -LUI T3,8004 -LW T3,0EB4 (T3) -OR S1,V0,R0 -ADDIU A0,SP,0150 -ADDIU A1,SP,0154 -OR A2,V0,R0 -LW A3,0000 (S4) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T3,0010 (SP) -LW V0,0154 (SP) -LW T8,0150 (SP) -ADDIU T5,R0,013B -BGEZ V0,7F01A2F8 -SRA T6,V0,0x1 -ADDIU AT,V0,0001 -SRA T6,AT,0x1 -SUBU A1,T5,T6 -ADDIU T7,R0,00AE -ADDU A3,A1,V0 -ADDIU T4,T8,00AF -SW T7,0158 (SP) -SW T4,0010 (SP) -ADDIU A3,A3,0001 -SW A1,015C (SP) -OR A0,S3,R0 -ADDIU A2,R0,00AE -JAL 7F0AD014 -SW R0,0014 (SP) -JAL 7000441C -OR S3,V0,R0 -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C -OR S0,T9,R0 -LUI T5,8004 -LW T5,0EB4 (T5) -LW T3,0000 (S4) -OR A0,S3,R0 -ADDIU A1,SP,015C -ADDIU A2,SP,0158 -OR A3,S1,R0 -SW S2,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -JAL 7F0ADABC -SW T3,0010 (SP) -LW RA,004C (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -LW S4,0048 (SP) -JR RA -ADDIU SP,SP,0250 diff --git a/notes/GE Documentation/Main Menus/MP menus/MP set default routine.txt b/notes/GE Documentation/Main Menus/MP menus/MP set default routine.txt deleted file mode 100644 index 3284e5e..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/MP set default routine.txt +++ /dev/null @@ -1,265 +0,0 @@ -7F010608 initialize MP menu -ADDIU SP,SP,FFE0 -SW S0,0018 (SP) -SLTI AT,A0,0002 -OR S0,A0,R0 //S0=A0=#players -BEQ AT,R0,7F010624 //if #players<2, set to 2 -SW RA,001C (SP) -ADDIU S0,R0,0002 //S0=2 -//7F010624: -LUI V0,8003 -ADDIU V0,V0,B520 -SW S0,0000 (V0) //save #players -//7F010630: -OR V1,R0,R0 //V1=0=counter -BLEZ S0,7F0106A8 -OR A2,S0,R0 //A2=S0=player# -LUI A1,8003 -LUI T2,8007 -LUI T0,8007 -ADDIU T0,T0,97A8 //T0=800697A8=handicap -ADDIU T2,T2,97B8 //T2=800697B8=control style -ADDIU A1,A1,B524 //A1=8002B524=MP character -OR A0,R0,R0 //A0=offset to player's data -ADDIU T1,R0,0005 //T1=5 -ADDIU A3,R0,FFFF //A3=-1 -//7F010660: set character and handicap if still default -LW T6,0000 (A1) //T6=char -ADDU T7,T0,A0 //T7=addy of player's handicap -SLTI AT,S0,0003 //TRUE if 4-players -BNE A3,T6,7F01067C //skip if a character has been selected -ADDU V0,T2,A0 //V0=addy of player's control style -SW V1,0000 (A1) //V1->character slot (incrementally bond, nat, etc.) -SW T1,0000 (T7) //5->handicap (default normal damage) -//7F01067C: set control setting to default -BNE AT,7F010698 -ADDIU V1,V1,0001 //inc next char -LW T8,0000 (V0) //T8=control style -SLTI AT,T8,0004 //TRUE if setting is valid -BNEL AT,R0,7F01069C -SLT AT,V1,A2 -SW R0,0000 (V0) -SLT AT,V1,A2 -//7F01069C: loopus -ADDIU A0,A0,0004 //next player data increment -BNEZ AT,7F010660 //more players! -ADDIU A1,A1,0004 -//7F0106A8: set scenario to default -LUI T9,8003 -LW T9,B540 (T9) //T9=8002B540=scenario -LUI T4,8003 -ADDIU T4,T4,B054 //T4=8002B054 (table of text, min/max players) -SLL T3,T9,0x2 //T3=scenario->offset -ADDU V0,T3,T4 //V0=8002B054+ -LBU T5,0003 (V0) //T5=max players -SLT AT,T5,A2 //TRUE if < max -BNEZ AT,7F0106E0 -NOP -LBU T6,0002 (V0) //T6=min players -SLT AT,A2,T6 //TRUE if < min -BEQ AT,R0,7F0106F0 -NOP -//7F0106E0: bad bad rubber piggy - RESET ALL MP VALUES -JAL 7F010468 //sets defaults for each scenario type -OR A0,R0,R0 //A0=0 -LUI A2,8003 -LW A2,B520 (A2) //A2=8002B520=#players -LUI V0,8003 -ADDIU V0,V0,B534 //V0=8002B534 -LW T7,0000 (V0) //T7=selected MP stage -LUI T9,8003 -//7F010700: 45230 -ADDIU T3,R0,0001 //T3=1 -SLL T8,T7,0x2 -SUBU T8,T8,T7 -SLL T8,T8,0x3 //T8=MPstage*0x18 -ADDU T9,T9,T8 -LW T9,B088 (T9) //T9=8002B088+ MPstage max players -SLT AT,T9,A2 //TRUE if stage selectable w/ player total -BEQL AT,R0,7F01072C -LW RA,001C (SP) -SW T3,0000 (V0) //default stage to Temple -//7F01072C: -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP -++++++++++++++++++++++++++++++++ -move to next MP game length setting... -only called in one place: 0x459A4. set to JAL 7F010188 to disable flag test -0FC0405C->0FC04062 - -7F010170: test for flag tag... - -3C0E8003 LUI T6,8003 -8DCEB540 LW T6,B540 (T6) T6=scenario -24010002 ADDIU AT,R0,0002 -3C028003 LUI V0,8003 -11C1000B BEQ T6,AT,7F0101B0 if flag tag, see below -2442B538 ADDIU V0,V0,B538 V0=8002B538 selected game length -//7F010188: roll over selection if 7... -3C028003 LUI V0,8003 -2442B538 ADDIU V0,V0,B538 V0=8002B538 -8C4F0000 LW T7,0000 (V0) T7=selected game length -24010007 ADDIU AT,R0,0007 AT=unlimited->20 points -25F80001 ADDIU T8,T7,0001 T8=next entry -0301001A DIV T8,AT -0000C810 MFHI T9 -AC590000 SW T9,0000 (V0) 7%length. clever. -03E00008 JR RA -00000000 NOP -//7F0101B0: The Living Daylights -8C480000 LW T0,0000 (V0) T0=selected game length -25090001 ADDIU T1,T0,0001 T1=length++ -05210004 BGEZ T1,7F0101CC -312A0003 ANDI T2,T1,0003 if new is 1-3, you're okay... -11400002 BEQ T2,R0,7F0101CC -00000000 NOP -254AFFFC ADDIU T2,T2,FFFC else, -4 to rollover into 0 -//7F0101CC: -AC4A0000 SW T2,0000 (V0) -03E00008 JR RA -00000000 NOP - -++++++++++++++++++++++++++++++++ --7F010468: reset MP options. Accepts A0=scenario - this resets when a scenario is selected, locking options - 0x44F98-E -3C038003 LUI V1,8003 -2463B540 ADDIU V1,V1,B540 //V1=8002B540=scenario -24020001 ADDIU A0,R0,0001 -AC640000 SW A0,0000 (V1) //A0->scenario -3C018003 LUI AT,8003 -AC22B544 SW V0,B544 (AT) //UNlock stage select -3C018003 LUI AT,8003 -AC22B548 SW V0,B548 (AT) //UNlock game length -3C018003 LUI AT,8003 -AC22B54C SW V0,B54C (AT) //UNlocK characters -3C018003 LUI AT,8003 -AC22B550 SW V0,B550 (AT) //UNlock weapon select -3C018003 LUI AT,8003 -AC22B554 SW V0,B554 (AT) //UNlock health -3C018003 LUI AT,8003 -AC22B558 SW V0,B558 (AT) //UNlock control style -3C018003 LUI AT,8003 -AC22B55C SW V0,B55C (AT) //UNlock aim adjustment -8C6E0000 LW T6,0000 (V1) //T6=scenario -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -2DC10008 SLTIU AT,T6,0008 //TRUE if valid scenario -1020004D BEQ AT,R0,7F0105F8 -000E7080 SLL T6,T6,0x2 //T6=scenario->offset -3C018005 LUI AT,8005 -002E0821 ADDU AT,AT,T6 -8C2E1A60 LW T6,1A60 (AT) //T6=80051A60+ -01C00008 JR T6 -00000000 NOP - --7F0104DC: normal and team settings - 0x4500C-E -3C028003 LUI V0,8003 -2442B538 ADDIU V0,V0,B538 -8C4F0000 LW T7,0000 (V0) //T7=8002B538=game length -29E10007 SLTI AT,T7,0007 //TRUE if valid -14200002 BNEZ AT,7F0104F8 -24180002 ADDIU T8,R0,0002 //set time default (5 minutes?) -AC580000 SW T8,0000 (V0) -//7F0104F8 -0FC3198F JAL 7F0C663C //returns V0=weapon set -00000000 NOP -2841000E SLTI AT,V0,000E //TRUE if valid -5420003D BNEL AT,R0,7F0105FC -8FBF0014 LW RA,0014 (SP) -0FC3198C JAL 7F0C6630 //reset weapon set to D (Golden Gun) -2404000D ADDIU A0,R0,000D //A0=D -10000039 BEQ R0,R0,7F0105FC -8FBF0014 LW RA,0014 (SP) - --7F01051C: You Only Live Twice - 0x4504C-E -3C028003 LUI V0,8003 -2442B538 ADDIU V0,V0,B538 //V0=8002B538=game length -24190007 ADDIU T9,R0,0007 -0FC3198F JAL 7F0C663C //returns V0=weapon set -AC590000 SW T9,0000 (V0) //save 'last alive' -2841000E SLTI AT,V0,000E //TRUE if valid weapon set -14200003 BNEZ AT,7F010544 -00000000 NOP -0FC3198C JAL 7F0C6630 //reset weapon set to GG -2404000D ADDIU A0,R0,000D -//7F010544 -3C018003 LUI AT,8003 -1000002B BEQ R0,R0,7F0105F8 -AC20B548 SW R0,B548 (AT) //lock game length - --7F010550: The Living Daylights - 0x45080-E -3C028003 LUI V0,8003 -2442B538 ADDIU V0,V0,B538 //V0=8002B538 -8C480000 LW T0,0000 (V0) //T0=game length -24090002 ADDIU T1,R0,0002 //T1=2 -29010004 SLTI AT,T0,0004 //TRUE if a time-only selection -14200002 BNEZ AT,7F010570 -00000000 NOP -AC490000 SW T1,0000 (V0) //reset time (10 minutes?) -//7F010570 -0FC3198F JAL 7F0C663C //returns V0=weapon set -00000000 NOP -2841000E SLTI AT,V0,000E //TRUE if a valid weapon set -5420001F BNEL AT,R0,7F0105FC -8FBF0014 LW RA,0014 (SP) -0FC3198C JAL 7F0C6630 //reset weapon set to GG -2404000D ADDIU A0,R0,000D -1000001B BEQ R0,R0,7F0105FC -8FBF0014 LW RA,0014 (SP) - --7F010594: Man With the Golden Gun - 0x450C4-E -3C028003 LUI V0,8003 -2442B538 ADDIU V0,V0,B538 //V0=8002B538=game length -8C4A0000 LW T2,0000 (V0) //T2=game length -240B0002 ADDIU T3,R0,0002 -29410007 SLTI AT,T2,0007 //TRUE if valid length -14200002 BNEZ AT,7F0105B4 -00000000 NOP -AC4B0000 SW T3,0000 (V0) //reset time (10 minutes?) -//7F0105B4 -0FC3198C JAL 7F0C6630 //reset weapon set to Golden Gun -2404000D ADDIU A0,R0,000D -3C018003 LUI AT,8003 -1000000D BEQ R0,R0,7F0105F8 -AC20B550 SW R0,B550 (AT) //lock weapon select - --7F0105C8: Licence to Kill - 0x450F8-E -3C028003 LUI V0,8003 -2442B538 ADDIU V0,V0,B538 //V0=8002B538=game length -8C4C0000 LW T4,0000 (V0) //T4=game length -240D0002 ADDIU T5,R0,0002 -29810007 SLTI AT,T4,0007 //TRUE if valid length -14200002 BNEZ AT,7F0105E8 -00000000 NOP -AC4D0000 SW T5,0000 (V0) //reset time (10 minutes?) - //7F0105E8 0x45118-E/-J/-P -0FC3198C JAL 7F0C6630 //reset weapon to pistols -24040001 ADDIU A0,R0,0001 -3C018003 LUI AT,8003 -AC20B554 SW R0,B554 (AT) //lock handicap - --7F0105F8: return... -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - -======================= - -7F0C6630: stores A0->weapon set; fries AT -LUI AT,8005 -JR RA -SW A0,9160 (AT) //A0=80049160 - -7F0C663C: returns V0=weapon set -LUI V0,8005 -JR RA -LW V0,9160 (V0) //V0=80049160 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/7F010848 - menu 0E interface - MP options.txt b/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/7F010848 - menu 0E interface - MP options.txt deleted file mode 100644 index b968dd9..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/7F010848 - menu 0E interface - MP options.txt +++ /dev/null @@ -1,553 +0,0 @@ -note that this routine is the hacked version as of rand++ 0.8 - -01 stage select lock -02 game length lock -04 weapon select lock -08 character lock -10 health lock -20 control style lock -40 aim adjustment lock -80 [new] point lock - -7F010848: 45378 menu 0E - interface for MP options -ADDIU SP,SP,FFC0 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -SW R0,003C (SP) -SW R0,0038 (SP) -SW R0,0034 (SP) -SW R0,0030 (SP) -SW R0,002C (SP) -SW R0,0028 (SP) -SW R0,0024 (SP) -SW R0,0020 (SP) -JAL 70004544 -SW R0,001C (SP) -LUI AT,8005 -JAL 70004590 ;F12->page width -LWC1 F12,1A80 (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 ;set page height -LWC1 F14,1A84 (AT) -JAL 70004534 -OR A0,R0,R0 -//7F0108B8: back one menu if only 1 player -JAL 7000B9F8 ;#controllers plugged in -NOP -SLTI AT,V0,0002 ;AT=TRUE if fewer that 2 controllers -BEQ AT,R0,7F0108D0 ;branch if still multiplayer -ADDIU A0,R0,0006 ;A0=6: menu 6: mode select folder -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -LUI A0,8003 -JAL 7F00D7FC ;set cursor position to A0 -LW A0,A8F0 (A0) ;A0=8002A8F0: selected mode -//7F0108D0: set # players to max if invalid -JAL 7000B9F8 ;#controllers plugged in -NOP -LUI T6,8003 -LW T6,B520 (T6) ;T6=8002B520: # players selected -SLT AT,V0,T6 ;TRUE if #controllers < #players -BEQL AT,R0,7F010900 ;branch if still okay -OR A0,R0,R0 -JAL 7000B9F8 ;#controllers plugged in -NOP -JAL 7F010608 ;initialize MP menu -OR A0,V0,R0 ;A0=V0: #players -OR A0,R0,R0 ;A0=0: player 1 -//7F010900: fry all highlighting before revision -JAL 7000C30C ;test if buttons held -ORI A1,R0,A000 ;A1=A000: A, Z button -BNEZ V0,7F010AF4 ;branch if something held -LUI AT,8003 -SW R0,A8E4 (AT) ;0->8002A8E4: tab 3 highlight -LUI AT,8003 -SW R0,A8E0 (AT) ;0->8002A8E0: tab 2 highlight -LUI AT,8003 -SW R0,A8DC (AT) ;0->8002A8DC: tab 1 highlight -LUI AT,8007 -SW R0,97C8 (AT) ;0->800697C8: highlight players -LUI AT,8007 -SW R0,97CC (AT) ;0->800697CC: highlight scenario -LUI AT,8007 -SW R0,97D0 (AT) ;0->800697D0: highlight stage -LUI AT,8007 -SW R0,97D4 (AT) ;0->800697D4: highlight length -LUI AT,8007 -SW R0,97D8 (AT) ;0->800697D8: highlight character -LUI AT,8007 -SW R0,97DC (AT) ;0->800697DC: highlight weapon -LUI AT,8007 -SW R0,97E0 (AT) ;0->800697E0: highlight handicap -LUI AT,8007 -SW R0,97E4 (AT) ;0->800697E4: highlight control style -LUI AT,8007 -JAL 7F00A39C ;V0=1 if cursor on tab 3 -SW R0,97E8 (AT) ;0->800697E8: highlight aim -//7F010970: test if tab 3 highlighted -BEQ V0,R0,7F010984 -ADDIU T7,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F010AF4 -SW T7,A8E4 (AT) ;1->8002A8DE4: highlight tab 3 -//7F010984: test if tab 1 highlighted -JAL 7F00A1E4 ;V0=1 if cursor on tab 1 -NOP -BEQ V0,R0,7F0109A4 -LUI AT,8003 -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F010AF4 -SW V1,A8DC (AT) ;1->8002A8DC: highlight tab 1 -//7F0109A4: vertical rollover tests -LWC1 F4,A90C (AT) ;F4=8002A90C: vertical screen position -LUI T2,8003 -TRUNC.W.S F6,F4 -MFC1 V0,F6 ;V0=(long) screen position -ADDIU V1,R0,0001 -LBU T2,B544 (T2) ;T2=8002B544: lock stage -LUI T1,8007 -//7F0109C0: rollover trigger bypasses for locked MP options -SLTI AT,V0,0119 -BNEZ AT,7F0109E0 -ANDI T0,T2,0040 ;T0=aim adjustment lock -BNEL T0,R0,7F010AF4 -SW V1,97E8 (T1) -NOP -NOP -NOP -//7F0109E0: -SLTI AT,V0,0105 -BNEZ AT,7F010A08 -ANDI T0,T2,0020 ;T0=control style lock -BNEL T0,R0,7F010AF4 -SW V1,97E4 (T1) -NOP -NOP -NOP -NOP -NOP -//7F010A08: -SLTI AT,V0,00F1 -BNEZ AT,7F010A30 -ANDI T0,T2,0010 ;T0=health lock -BNEL T0,R0,7F010AF4 -SW V1,97E0 (T1) -NOP -NOP -NOP -NOP -NOP -//7F010A30: -SLTI AT,V0,00DD -BNEZ AT,7F010A58 -ANDI T0,T2,0008 ;T0=character lock -BNEL T0,R0,7F010AF4 -SW V1,97D8 (T1) -NOP -NOP -NOP -NOP -NOP -//7F010A58: -SLTI AT,V0,00C9 -BNEZ AT,7F010A80 -ANDI T0,T2,0004 ;T0=weapon select lock -BNEL T0,R0,7F010AF4 -SW V1,97DC (T1) -NOP -NOP -NOP -NOP -NOP -//7F010A80: -SLTI AT,V0,00B5 -BNEZ AT,7F010AA8 -ANDI T0,T2,0002 ;T0=game length lock -BNEL T0,R0,7F010AF4 -SW V1,97D4 (T1) -NOP -NOP -NOP -NOP -NOP -//7F010AA8: -SLTI AT,V0,00A1 -BNEZ AT,7F010AD0 -ANDI T0,T2,0001 ;T0=stage select lock -BNEL T0,R0,7F010AF4 -SW V1,97D0 (T1) -NOP -NOP -NOP -NOP -NOP -//7F010AD0: -SLTI AT,V0,008D -BNEL AT,R0,7F010AF4 -SW V1,97C8 (T1) ;V1=800697C8: highlight players -SW V1,97CC (T1) ;V1=800697CC: highlight scenario -NOP -NOP -NOP -NOP -NOP -//7F010AF4: start controller detection -OR A0,R0,R0 -JAL 7000C3AC ;TRUE if player 1 pressed start -ADDIU A1,R0,1000 -BEQ V0,R0,7F010B2C ;branch if they didn't press start -ADDIU V1,R0,0001 -//7F010B08: start a multiplayer game -LUI AT,8003 -LUI A0,8006 -SW V1,A8D0 (AT) ;1->8002A8D0: tab1 selected - same as 'start' -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 -JAL 70008E08 ;play sound 0C7: folder switch -OR A2,R0,R0 ;A2=NULL pointer to data (no SE source) -BEQ R0,R0,7F010CB0 -NOP -//7F010B2C: detect selecting currently highlighted option -OR A0,R0,R0 -JAL 7000C3AC ;TRUE if player 1 pressed A or Z -ORI A1,R0,A000 ;A1=mask: A + Z button -BEQ V0,R0,7F010C80 ;branch if neither button pressed -ADDIU V1,R0,0001 ;V1=1 -//7F010B40: detect if tab 3 selected -LUI T6,8003 -LW T6,A8E4 (T6) ;T6=8002A8E4: TRUE if folder tab 3 highlighted -LUI T7,8003 -LUI A0,8006 -BEQ T6,R0,7F010B60 ;branch if tab 3 not highlighted -ADDIU A1,R0,00C7 ;A1=0C7: folder switch SE -LUI AT,8003 -SW V1,A8D8 (AT) ;1->8002A8D8: tab3 selected -//7F010B60: detect if tab 1 selected -LW T7,A8DC (T7) ;T7=8002A8DC: TRUE if folder tab 1 highlighted -LUI AT,8003 -LUI T8,8007 -BEQ T7,R0,7F010B7C ;branch if tab 1 not highlighted -OR A2,R0,R0 ;A2=0: NULL pointer to data (no SE source) -BEQ R0,R0,7F010C70 -SW V1,A8D0 (AT) ;1->8002A8D0: tab1 selected -//7F010B7C: detect if players selected -LW T8,97C8 (T8) ;T8=800697C8: TRUE if #players highlighted -ADDIU T9,R0,0001 -LUI T0,8007 -BEQ T8,R0,7F010B98 ;branch if not highlighted -NOP -BEQ R0,R0,7F010C70 -SW T9,003C (SP) ;1->SP+3C: #players selected -//7F010B98: detect if scenario selected -LW T0,97CC (T0) ;T0=800697CC: TRUE if scenario highlighted -ADDIU T1,R0,0001 -LUI T2,8007 -BEQ T0,R0,7F010BB4 -NOP -BEQ R0,R0,7F010C70 -SW T1,0038 (SP) ;1->SP+38: scenario selected -//7F010BB4: detect if stage select selected -LW T2,97D0 (T2) ;T2=800697D0: TRUE if stage select highlighted -ADDIU T3,R0,0001 -LUI T4,8007 -BEQ T2,R0,7F010BD0 -NOP -BEQ R0,R0,7F010C70 -SW T3,0034 (SP) ;1->SP+34: stage select selected -//7F010BD0: detect if game length selected -LW T4,97D4 (T4) ;T4=800697D4: TRUE if game length highlighted -ADDIU T5,R0,0001 -LUI T6,8007 -BEQ T4,R0,7F010BEC -NOP -BEQ R0,R0,7F010C70 -SW T5,0030 (SP) ;1->SP+30: game length selected -//7F010BEC: detect if character selected -LW T6,97D8 (T6) ;T6=800697D8: TRUE if character highlighted -ADDIU T7,R0,0001 -LUI T8,8007 -BEQ T6,R0,7F010C08 -NOP -BEQ R0,R0,7F010C70 -SW T7,002C (SP) ;1->SP+2C: character selected -//7F010C08: detect if weapon select selected -LW T8,97DC (T8) ;T8=800697DC: TRUE if weapon select highlighted -ADDIU T9,R0,0001 -LUI T0,8007 -BEQ T8,R0,7F010C24 -NOP -BEQ R0,R0,7F010C70 -SW T9,0028 (SP) ;1->SP+28: weapon select selected -//7F010C24: detect if health selected -LW T0,97E0 (T0) ;T0=800697E0: TRUE if health highlighted -ADDIU T1,R0,0001 -LUI T2,8007 -BEQ T0,R0,7F010C40 -NOP -BEQ R0,R0,7F010C70 -SW T1,0024 (SP) ;1->SP+24: health selected -//7F010C40: detect if control style selected -LW T2,97E4 (T2) ;T2=800697E4: TRUE if control style highlighted -ADDIU T3,R0,0001 -LUI T4,8007 -BEQ T2,R0,7F010C5C -NOP -BEQ R0,R0,7F010C70 -SW T3,0020 (SP) ;1->SP+20: control style selected -//7F010C5C: detect if aim adjustment selected -LW T4,97E8 (T4) ;T4=800697E8: TRUE if aim adjustment highlighted -ADDIU T5,R0,0001 -BEQ T4,R0,7F010C70 -NOP -SW T5,001C (SP) ;1->SP+1C: aim adjustment selected -//7F010C70: 457A0 play selected sound effect -JAL 70008E08 ;play SE 0C7: selected folder option -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -BEQ R0,R0,7F010CB0 ;proceed to figure out what to do with selected option -NOP -//7F010C80: detect if B button pressed -OR A0,R0,R0 -JAL 7000C3AC ;TRUE if player 1 pressed B button -ADDIU A1,R0,4000 ;A1=4000: B button -BEQ V0,R0,7F010CB0 -ADDIU V1,R0,0001 ;V1=1; -//7F010C94: B button pressed -LUI AT,8003 -LUI A0,8006 -SW V1,A8D8 (AT) ;1->8002A8D8: tab 3 selected (same as 'back') -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=0C7: SE -JAL 70008E08 ;play SE 0C7 for folder switch -OR A2,R0,R0 ;A2=NULL pointer to data (no source) -//7F010CB0: show folder components -LUI A0,8003 -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0: item #: tabs on side of folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0001 ;A1=1: item #: basic folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0003 ;A1=3: item #: OHMSS -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0005 ;A1=5: item #: CONFIDENTIAL - multi -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -JAL 7F009B84 ;control stick tracking -NOP -//7F010D14: detect if 'back' selected -LUI T6,8003 -LW T6,A8D8 (T6) ;T6=8002A8D8: TRUE if tab3 selected -ADDIU A0,R0,0006 ;A0=6: menu 6 - mode select folder -LUI T7,8003 -BEQ T6,R0,7F010D48 ;branch if not backtracking -NOP -//7F010D2C: backtrack one folder... -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 ;A1=0: current menu -LUI A0,8003 -JAL 7F00D7FC -LW A0,A8F0 (A0) ;A0=8002A8F0: mode -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010D48: detect if 'start' selected -LW T7,A8D0 (T7) ;T7=8002A8D0: TRUE if tab1 selected -LUI T8,8003 -LW T3,003C (SP) ;T3=TRUE if #players selected -BEQ T7,R0,7F010DF4 ;branch if 'start' not selected -NOP -//7F010D5C: start MP game! -LW T8,B534 (T8) ;T8=8002B534: MP stage selected -LUI V0,8003 -LUI AT,8003 -SLL T9,T8,0x2 -SUBU T9,T9,T8 -SLL T9,T9,0x3 ;T9=MPstage * 0x18: offset to stage entry -ADDU V0,V0,T9 -LW V0,B07C (V0) ;V0=8002B07C+offset: stage# -BGEZ V0,7F010DD0 ;branch if not random -NOP -//7F010D84: handle random stage select -JAL 7000A450 ;V0=random# -NOP -ADDIU AT,R0,000B ;AT=# stage entries -DIVU V0,AT -MFHI V1 ;V1=rand % #entries: MP stage entry in that range -SLL T0,V1,0x2 -SUBU T0,T0,V1 -SLL T0,T0,0x3 ;T0=MPstage * 0x18 -LUI T1,8003 -ADDU T1,T1,T0 -LW T1,B094 (T1) ;T1=8002B094+offset: stage# -LUI AT,8003 -ADDIU A0,V1,0001 ;A0=MPstage#+1: MPstage from 1-B (no rand) -JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -SW T1,A8F4 (AT) ;stage#->8002A8F4: stage selected -BEQ V0,R0,7F010D84 ;branch if stage# still = 0 -NOP -BEQ R0,R0,7F010DD8 -ADDIU T2,R0,FFFF -//7F010DD0: -SW V0,A8F4 (AT) -ADDIU T2,R0,FFFF -//7F010DD8: press A: start stage -LUI AT,8003 -SW T2,A8F8 (AT) ;-1->8002A8F8: no briefing data -ADDIU A0,R0,000B ;A0=B: -stage active- -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010DF4: press A: 'Players' selected -BEQ T3,R0,7F010E34 -LW T4,0038 (SP) -JAL 7000B9F8 ;V0= # controllers plugged in -NOP -LUI V1,8003 -LW V1,B520 (V1) ;V1=8002B520: # players selected on MP menu -ADDIU V1,V1,0001 ;V1+=1 -SLT AT,V0,V1 ;AT=TRUE if #controllers < #selected -BEQ AT,R0,7F010E24 ;branch if false -OR A0,V1,R0 ;A0=updated # controllers -BEQ R0,R0,7F010E24 -ADDIU A0,R0,0002 ;A0=2: 2 players default -//7F010E24: -JAL 7F010608 ;initialize MP menu -NOP -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010E34: press A: 'Scenario' selected -BEQ T4,R0,7F010E50 -LW T5,0034 (SP) -ADDIU A0,R0,0013 ;A0=13: menu 13: scenario select -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010E50: press A: 'Level' selected -BEQ T5,R0,7F010E6C -LW T6,0030 (SP) -ADDIU A0,R0,0012 ;A0=12: menu 12: MP stage select -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010E6C: press A: 'Game Length' selected -BEQ T6,R0,7F010E84 -LW T7,002C (SP) -JAL 7F010170 ;selects next game length accounting for scenarios -NOP -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010E84: press A: 'Select Character' selected -BEQ T7,R0,7F010EA0 -LW T8,0028 (SP) -ADDIU A0,R0,000F ;A0=F: menu F: character select -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010EA0: press A: 'Weapons' selected -BEQ T8,R0,7F010EB8 -LW T9,0024 (SP) -JAL 7F0C65CC ;advance MP weapon set menu one option -NOP -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010EB8: press A: 'Health' selected -BEQ T9,R0,7F010ED4 -LW T0,0020 (SP) -ADDIU A0,R0,0010 ;A0=10: menu 10: handicap settings -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010ED4 press A: 'Control Style' selected -BEQ T0,R0,7F010EF0 -LW T1,001C (SP) -ADDIU A0,R0,0011 ;A0=11: menu 11: MP control settings -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010EF0: press A: 'Aim' selected -BEQL T1,R0,7F010F04 -LW RA,0014 (SP) -JAL 7F01023C ;advance aim settings selection -NOP -//7F010F00: return! -LW RA,0014 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -+_+ - -various minor advancement routines - -7F010170: 44CA0 advance game length selection -LUI T6,8003 -LW T6,B540 (T6) ;T6=8002B540: scenario -ADDIU AT,R0,0002 -LUI V0,8003 -BEQ T6,AT,7F0101B0 ;branch if scenario 2: Flag Tag -ADDIU V0,V0,B538 ;V0=8002B538 -//7F010188: normal select - time and points -LUI V0,8003 -ADDIU V0,V0,B538 ;V0=8002B538 -LW T7,0000 (V0) ;T7=8002B538: game length -ADDIU AT,R0,0007 -ADDIU T8,T7,0001 ;T8=game length + 1 -DIV T8,AT -MFHI T9 ;T9=(length+1) % 7 -SW T9,0000 (V0) ;new length -> 8002B538 -JR RA -NOP -//7F0101B0: time only -LW T0,0000 (V0) ;T0=8002B538: game length -ADDIU T1,T0,0001 ;T1=length +1 -BGEZ T1,7F0101CC ;branch if not negative -ANDI T2,T1,0003 ;T2=length 3 or less -BEQ T2,R0,7F0101CC ;branch if 0, since this would be -4 -NOP -ADDIU T2,T2,FFFC ;T2=-1 -//7F0101CC: -SW T2,0000 (V0) ;new length -> 8002B538 -JR RA -NOP - - -7F01023C: 44D6C advance aim settings selection -LUI V0,8003 -ADDIU V0,V0,B53C ;V0=8002B53C: aim settings -LW T6,0000 (V0) ;T6=current setting -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU T7,T6,0001 ;T7=T6+1: next setting -BGEZ T7,7F010268 ;branch if >=0 -ANDI T8,T7,0003 ;T8=next & 3 -BEQ T8,R0,7F010268 ;branch if equal to 0 (which is what you'd want to reset to -NOP -ADDIU T8,T8,FFFC ;subtract 4 otherwise, but this assumes you'd be above 4... -//7F010268: -JAL 7F0101D8 ;copy autoaim and sight settings to player stats -SW T8,0000 (V0) ;T8->V0: save new setting -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/7F010F10 - menu 0E constructor - MP options.txt b/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/7F010F10 - menu 0E constructor - MP options.txt deleted file mode 100644 index a3065cf..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/7F010F10 - menu 0E constructor - MP options.txt +++ /dev/null @@ -1,897 +0,0 @@ -7F010F10: 45A40 menu 0E constructor - MP options - accepts: A0=p->display list target -ADDIU SP,SP,FF98 -SW RA,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 -JAL 7F00D5E8 -OR A0,V0,R0 -JAL 7F0ACD98 ;??? some kind of microcode constructor -OR A0,V0,R0 -OR S0,V0,R0 ;S0=V0: DL -//7F010F48: Page Title -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,9C4C ;A0=9C4C: "MULTIPLAYER OPTIONS:\r" -ADDIU T6,R0,0037 -ADDIU T7,R0,005F -SW V0,0064 (SP) -SW T6,0058 (SP) -JAL 7000441C ;V0=clip height -SW T7,0054 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LW T8,0EB8 (T8) ;T8=80040EB8: p->2nd font table -LH T1,0044 (SP) -ADDIU T0,R0,00FF -SW T0,0018 (SP) ;SP+18=T6: font colour -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T9,0014 (SP) ;SP+14=T5: p->1st font table -SW T8,0010 (SP) ;SP+10=T4: p->2nd font table -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F010FB8: display "Players:" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,9C4D ;A0=9C4D: "Players:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) ;SP+64=p->text -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97C8 (T5) ;T5=800697C8: TRUE if highlighted "Players" -ADDIU T3,R0,0039 -ADDIU T4,R0,0079 -SW T3,0058 (SP) ;SP+58=x pos -BEQ T5,R0,7F011038 ;branch if not highlighted -SW T4,0054 (SP) ;SP+54=y pos -//7F011008: draw highlight box for "Players:" -LW A3,004C (SP) ;A3=width -ADDIU T6,R0,0087 -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,0078 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F011038: display text -JAL 7000441C ;V0=clip height -NOP -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LW T8,0EB8 (T8) ;T8=80040EB8: p->2nd font table -LH T1,0044 (SP) -ADDIU T0,R0,00FF -SW T0,0018 (SP) ;SP+18=T6: font colour -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T9,0014 (SP) ;SP+14=T5: p->1st font table -SW T8,0010 (SP) ;SP+10=T4: p->2nd font table -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011090: -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,9C4E ;A0=9C4E: "Scenario:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97CC (T5) ;T5=800697CC: TRUE if "Scenario" highlighted -ADDIU T3,R0,0039 -ADDIU T4,R0,008D -SW T3,0058 (SP) -BEQ T5,R0,7F011110 ;branch if not highlighted -SW T4,0054 (SP) -//7F0110E4: draw highlight box for "Scenario" -LW A3,004C (SP) -ADDIU T6,R0,009B -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,008C ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F011110: display text -JAL 7000441C ;V0=clip height -NOP -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LW T8,0EB8 (T8) ;T8=80040EB8: p->2nd font table -LH T1,0044 (SP) -ADDIU T0,R0,00FF -SW T0,0018 (SP) ;SP+18=T6: font colour -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T9,0014 (SP) ;SP+14=T5: p->1st font table -SW T8,0010 (SP) ;SP+10=T4: p->2nd font table -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011168: display label for "Level" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -ORI A0,R0,9C4F ;A0=9C4F: "Level:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97D0 (T5) ;T5=800697D0: TRUE if "Level" highlighted -ADDIU T3,R0,0039 -ADDIU T4,R0,00A1 -SW T3,0058 (SP) -BEQ T5,R0,7F0111E8 ;branch if not highlighted -SW T4,0054 (SP) -//7F0111BC: draw highlight box for "Level" -LW A3,004C (SP) -ADDIU T6,R0,00AF -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,00A0 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F0111E8: determine text colour -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: MP locks -ANDI T8,T8,0001 -NOP -BNEL T8,R0,7F011204 ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F011204: draw text -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F01125C: display label for "Game Length" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -ORI A0,R0,9C50 ;A0=9C50: "Game Length:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97D4 (T5) ;T5=800697D4: TRUE if game length highlighted -ADDIU T3,R0,0039 -ADDIU T4,R0,00B5 -SW T3,0058 (SP) -BEQ T5,R0,7F0112DC ;branch if not highlighted -SW T4,0054 (SP) -//7F0112B0: draw highlight box for "Game Length" -LW A3,004C (SP) -ADDIU T6,R0,00C3 -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,00B4 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F0112DC: determine font colour -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: MP locks -ANDI T8,T8,0002 -NOP -BNEL T8,R0,7F0112F8 ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F0112F8: draw text -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011350: display label for "Weapons" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -ORI A0,R0,9C51 ;A0=9C51: "Weapons:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97DC (T5) ;T5=800697DC: TRUE if weapon select highlighted -ADDIU T3,R0,0039 -ADDIU T4,R0,00C9 -SW T3,0058 (SP) -BEQ T5,R0,7F0113D0 ;branch if not highlighted -SW T4,0054 (SP) -//7F1013A4: draw highlight box for "Weapons" -LW A3,004C (SP) -ADDIU T6,R0,00D7 -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,00C8 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F1013D0: determine font colour -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: MP locks -ANDI T8,T8,0004 -NOP -BNEL T8,R0,7F0113EC ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F0113EC: draw text -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011444: display label for "Characters" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -ORI A0,R0,9C52 ;A0=9C52: "Characters:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97D8 (T5) ;T5=800697D8: TRUE if character highlighted -ADDIU T3,R0,0039 -ADDIU T4,R0,00DD -SW T3,0058 (SP) -BEQ T5,R0,7F0114C4 ;branch if unhighlighted -SW T4,0054 (SP) -//7F011498: draw highlight box for "Characters" -LW A3,004C (SP) -ADDIU T6,R0,00EB -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,00DC ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F0114C4: determine font colour -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: MP locks -ANDI T8,T8,0008 ;T8=mask for weapons -NOP -BNEL T8,R0,7F0114E0 ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F0114E0: draw text -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011538: display label for "Health" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -ORI A0,R0,9C53 ;A0=9C53: "Health:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97E0 (T5) ;T5=800697E0: TRUE if health highlighted -ADDIU T3,R0,0039 -ADDIU T4,R0,00F1 -SW T3,0058 (SP) -BEQ T5,R0,7F0115B8 ;branch if not highlighted -SW T4,0054 (SP) -//7F01158C: draw highlight box for "Health" -LW A3,004C (SP) -ADDIU T6,R0,00FF -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,00F0 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F0115B8: determine font colour -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: MP locks -ANDI T8,T8,0010 -NOP -BNEL T8,R0,7F0115D4 ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F0115D4: draw text -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F01162C: display label for "Control Style" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -ORI A0,R0,9D1E ;A0=9D1E: "Control Style\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97E4 (T5) ;T5=800697E4: TRUE if control style highlighted -ADDIU T3,R0,0039 -ADDIU T4,R0,0105 -SW T3,0058 (SP) -BEQ T5,R0,7F0116AC ;branch if unhighlighted -SW T4,0054 (SP) -//7F011680: draw highlight box for "Control Style" -LW A3,004C (SP) -ADDIU T6,R0,0113 -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,0104 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F0116AC: determine font colour -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: MP locks -ANDI T8,T8,0020 -NOP -BNEL T8,R0,7F0116C8 ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F0116C8: draw text -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011720: display label for "Aim" -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -ORI A0,R0,9C54 ;A0=9C54: "Aim:\r" -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LUI A3,8004 -SW V0,0064 (SP) -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @height of string -ADDIU A1,SP,004C ;A1=SP=4C: @width of string -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10=p->1st font table -LUI T5,8007 -LW T5,97E8 (T5) -ADDIU T3,R0,0039 -ADDIU T4,R0,0119 -SW T3,0058 (SP) -BEQ T5,R0,7F0117A0 -SW T4,0054 (SP) -//7F011774: draw highlight box for "Aim" -LW A3,004C (SP) -ADDIU T6,R0,0127 -ADDIU T7,R0,0032 -SW T7,0014 (SP) ;SP+14=colour -SW T6,0010 (SP) ;SP+10=lry -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,R0,0037 ;A1=ulx -ADDIU A2,R0,0118 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C ;A3=lrx -OR S0,V0,R0 ;S0=V0: DL -//7F0117A0: 462D0 determine font colour -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: MP locks -ANDI T8,T8,0040 ;T8=mask for Aim -NOP -BNEL T8,R0,7F0117BC ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F0117BC: 462EC draw text -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011814: 46344 display selected players -LUI A1,8005 -LUI A2,8003 -OR S0,V0,R0 ;S0=V0: DL -LW A2,B520 (A2) ;A2=8002B520: #players selected -ADDIU A1,A1,0C4C ;A1=80050C4C: "%d" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A0,SP,005C ;A0=SP+5C: buffer for text -ADDIU T2,R0,00A0 -ADDIU T3,R0,0079 -SW T2,0058 (SP) ;SP+58=0xA0 x position -JAL 7000441C ;V0=clip height -SW T3,0054 (SP) ;SP+54=0x79 y position -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -//7F01183C: write to screen -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) ;T5=80040EB4: p->1st font table -LW T4,0EB8 (T4) ;T4=80040EB8: p->2nd font table -LH T7,0044 (SP) ;T7=SP+44: clip height -ADDIU T6,R0,00FF ;T6=000000FF: black -SW T6,0018 (SP) ;SP+18=T6: font colour -OR A0,S0,R0 ;A0=S0: display list target -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -ADDIU A3,SP,005C ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T5,0014 (SP) ;SP+14=T5: p->1st font table -SW T4,0010 (SP) ;SP+10=T4: p->2nd font table -JAL 7F009760 ;write text -SW T7,001C (SP) ;SP+1C=T7: clip height -//7F011884: display selected scenario -LUI T8,8003 -LW T8,B540 (T8) ;T8=8002B540: selected scenario -LUI A0,8003 -OR S0,V0,R0 ;S0=V0: DL -SLL T9,T8,0x2 ;T9=scenario ->offset -ADDU A0,A0,T9 -JAL 7F0C1DD8 ;V0=text ID A0 -LHU A0,B054 (A0) ;A0=8002B054+offset: scenario name -ADDIU T0,R0,00A0 -ADDIU T1,R0,008D -SW V0,0064 (SP) ;SP+64=V0: p->text -SW T0,0058 (SP) ;SP+58: x pos -JAL 7000441C ;V0=clip height -SW T1,0054 (SP) ;SP+54: y pos -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T2,8004 -LUI T3,8004 -LW T3,0EB4 (T3) ;T3=80040EB4: p->1st font table -LW T2,0EB8 (T2) ;T2=80040EB8: p->2nd font table -LH T5,0044 (SP) -ADDIU T4,R0,00FF -SW T4,0018 (SP) ;SP+18=T6: font colour -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T3,0014 (SP) ;SP+14=T5: p->1st font table -SW T2,0010 (SP) ;SP+10=T4: p->2nd font table -JAL 7F009760 ;write text -SW T5,001C (SP) ;SP+1C: clip height -//7F01191C: display selected stage -LUI T6,8003 -LH T6,B534 (T6) ;T6=MP stage selected -LUI A0,8003 -OR S0,V0,R0 ;S0=V0: DL -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x3 ;T7=T6 * 0x18: offset to MP stage selected -ADDU A0,A0,T7 -JAL 7F0C1DD8 ;V0=text ID A0 -LHU A0,B074 (A0) ;A0=8002B074: selected stage name -LUI T0,8003 -LBU T0,B544 (T0) ;T0=8002B544: MP locks -ADDIU T8,R0,00A0 -ADDIU T9,R0,00A1 -SW V0,0064 (SP) -SW T8,0058 (SP) -ANDI T0,T0,0001 ;mask for Stage Select -SW T9,0054 (SP) -BNEL T0,R0,7F011970 ;branch if unlocked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T1,8004 -LUI T2,8004 -LW T2,0EB4 (T2) ;T2=80040EB4: p->1st font table -LW T1,0EB8 (T1) ;T1=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T3,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T2,0014 (SP) ;SP+14=T5: p->1st font table -SW T1,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T3,001C (SP) ;SP+1C: clip height -//7F0119C8: display selected length -LUI T4,8003 -LW T4,B538 (T4) ;T4=8002B538: selected game length -LUI A0,8003 -OR S0,V0,R0 ;S0=V0: DL -SLL T5,T4,0x2 -SUBU T5,T5,T4 -SLL T5,T5,0x2 ;T5=T4 * 0xC: offset to game length -ADDU A0,A0,T5 -JAL 7F0C1DD8 ;V0=text ID A0 -LHU A0,AFF4 (A0) ;A0=8002AFF4+offset: game length name -LUI T8,8003 -LBU T8,B544 (T8) ;T8=8002B544: stage select lock -ADDIU T6,R0,00A0 -ADDIU T7,R0,00B5 -SW V0,0064 (SP) -SW T6,0058 (SP) -ANDI T8,T8,0002 ;mask for Game Length -SW T7,0054 (SP) -BNEL T8,R0,7F011A1C ;branch if unlocked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -//7F011A1C: -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) ;T0=80040EB4: p->1st font table -LW T9,0EB8 (T9) ;T9=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T0,0014 (SP) ;SP+14=T5: p->1st font table -SW T9,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C: clip height -//7F011A74: display selected weapon set -JAL 7F0C6614 ;V0=p->selected weapon set data -OR S0,V0,R0 ;S0=V0: DL -JAL 7F0C1DD8 ;V0=text ID A0 -LHU A0,0010 (V0) ;A0=V0+10: name of weapon set -LUI T4,8003 -LBU T4,B544 (T4) ;T4=8002B544: MP locks -ADDIU T2,R0,00A0 -ADDIU T3,R0,00C9 -SW V0,0064 (SP) -SW T2,0058 (SP) -ANDI T4,T4,0004 ;mask for Weapon Set -SW T3,0054 (SP) -BNEL T4,R0,7F011AB0 ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T5,8004 -LUI T6,8004 -LW T6,0EB4 (T6) ;T6=80040EB4: p->1st font table -LW T5,0EB8 (T5) ;T5=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T7,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T6,0014 (SP) ;SP+14=T5: p->1st font table -SW T5,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T7,001C (SP) ;SP+1C: clip height -//7F011B08: display selected aim -LUI T8,8003 -LW T8,B53C (T8) ;T8=8002B53C: selected aim setting -LUI A0,8003 -OR S0,V0,R0 ;S0=V0: DL -SLL T9,T8,0x2 ;T9=aim -> offset -ADDU A0,A0,T9 -JAL 7F0C1DD8 ;V0=text ID A0 -LHU A0,B510 (A0) ;A0=8002B510: name of aim setting -LUI T2,8003 -LBU T2,B544 (T2) ;T2=8002B544: MP locks -ADDIU T0,R0,00A0 -ADDIU T1,R0,0119 -SW V0,0064 (SP) -SW T0,0058 (SP) -ANDI T2,T2,0040 ;mask for Aim Setting -SW T1,0054 (SP) -BNEL T2,R0,7F011B54 ;branch if not locked -ADDIU V1,R0,00FF ;V1=black -ADDIU V1,R0,0070 ;V1=grey -JAL 7000441C ;V0=clip height -SW V1,0048 (SP) -JAL 7000442C ;V0=clip width -SH V0,0044 (SP) -LUI T3,8004 -LUI T4,8004 -LW T4,0EB4 (T4) ;T4=80040EB4: p->1st font table -LW T3,0EB8 (T3) ;T3=80040EB8: p->2nd font table -LW V1,0048 (SP) -LH T5,0044 (SP) -OR A0,S0,R0 ;A0=S0: p->display list -ADDIU A1,SP,0058 ;A1=p->x position -ADDIU A2,SP,0054 ;A2=p->y position -LW A3,0064 (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20=V0: clip width -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T4,0014 (SP) ;SP+14=T5: p->1st font table -SW T3,0010 (SP) ;SP+10=T4: p->2nd font table -SW V1,0018 (SP) ;SP+18=T6: font colour -JAL 7F009760 ;write text -SW T5,001C (SP) ;SP+1C: clip height -//7F011BAC: sidebar and cursor -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,V0,R0 -JAL 7F00A080 ;add tab 1: "START" -OR A0,V0,R0 -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 -//7F011BC4: return -LW RA,003C (SP) -LW S0,0038 (SP) -ADDIU SP,SP,0068 -JR RA -NOP - -+_+ - -70003EF8: generate a generic fillrect, probably untextured - accepts: A0=display list target -LUI T6,BA00 -ORI T6,T6,1402 -LUI T7,0030 -SW T7,0004 (A0) ;A0+4= 00300000 setothermode_h: cycle type-fill -SW T6,0000 (A0) ;A0+0= BA001402 setothermode_h: -LUI A2,8002 -LW A2,32A8 (A2) ;A2=800232A8: -ADDIU A1,A0,0008 ;A1=A0+8: next DL op -LUI AT,F600 -LH T8,0018 (A2) ;T8=halfword @ 800232A8+18: lr y -LH T3,001A (A2) ;T8=halfword @ 800232A8+1A: lr x -ADDIU A3,A1,0008 ;A3=A0+10: next next DL op -ADDIU T9,T8,FFFF -ANDI T0,T9,03FF ;T0=(T8-1) & 0x3FF -ADDIU T4,T3,FFFF -ANDI T5,T4,03FF ;T5=(T3-1) & 0x3FF -SLL T1,T0,0xE ;T1=T0 * 0x4000 -OR T2,T1,AT -SLL T6,T5,0x2 ;T6=T5 * 4 -OR T7,T2,T6 -SW T7,0000 (A1) ;A0+8= F6.FFC.FFC fillrect -SW R0,0004 (A1) ;A0+C= 00000000 lr x+y = 0 -LUI T8,E700 -SW T8,0000 (A3) ;A0+10: E7000000 pipesync -SW R0,0004 (A3) ;A0+14: 00000000 -JR RA -ADDIU V0,A3,0008 ;V0=A0+18: next DL op address diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/MP menu option locks.txt b/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/MP menu option locks.txt deleted file mode 100644 index acba8eb..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 0E - MP options/MP menu option locks.txt +++ /dev/null @@ -1,328 +0,0 @@ -This outlines when each of the locks is used, so as to hack the table much, much smaller -Also implementing single byte array for highlights -800697C8 1- highlight players -800697C9 1- highlight scenario -800697CA 1- highlight stage select -800697CB 1- highlight game length -800697CC 1- highlight character -800697CD 1- highlight weapon select -800697CE 1- highlight health -800697CF 1- highlight control style -800697D0 1- highlight aim adjustment - - - -part of 7F010848 - MP options interface, specificly rollover highlight and selection -//7F010908: fry all highlighting before revision -BNEZ V0,7F010AF4 -LUI AT,8003 -SW R0,A8E4 (AT) -NOP -SW R0,A8E0 (AT) -NOP -SW R0,A8DC (AT) -NOP -SW R0,97C8 (AT) -NOP -SW R0,97CC (AT) -NOP -SW R0,97D0 (AT) -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -JAL 7F00A39C ;V0=1 if cursor on tab 3 -NOP -//7F010970: test if tab 3 selected -BEQ V0,R0,7F010984 -ADDIU T7,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F010AF4 -SW T7,A8E4 (AT) ;1->8002A8DE4: highlight tab 3 -//7F010984: test if tab 1 selected -JAL 7F00A1E4 ;V0=1 if cursor on tab 1 -NOP -BEQ V0,R0,7F0109A4 -LUI AT,8003 -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F010AF4 -SW V1,A8DC (AT) ;1->8002A8DC: highlight tab 1 -//7F0109A4: vertical rollover tests -LWC1 F4,A90C (AT) ;F4=8002A90C: vertical screen position -LUI T9,8003 -TRUNC.W.S F6,F4 -MFC1 V0,F6 ;V0=(long) screen position -NOP -//7F0109B8: rollover trigger bypasses for locked MP options -SLTI AT,V0,0119 -BNEL AT,R0,7F0109E4 -SLTI AT,V0,0105 -LW T9,B55C (T9) ;T9=aim adjustment lock -ADDIU V1,R0,0001 -LUI AT,8007 -BEQL T9,R0,7F0109E4 -SLTI AT,V0,0105 -BEQ R0,R0,7F010AF4 -*SB V1,97D0 (AT) -//7F0109E0: -SLTI AT,V0,0105 -BNEZ AT,7F010A08 -LUI T0,8003 -LW T0,B558 (T0) ;T0=control style lock -ADDIU V1,R0,0001 -LUI AT,8007 -BEQL T0,R0,7F010A0C ;branch if locked -SLTI AT,V0,00F1 -BEQ R0,R0,7F010AF4 -*SB V1,97CF (AT) ;1->800697E4: -//7F010A08: -SLTI AT,V0,00F1 -BNEZ AT,7F010A30 -LUI T1,8003 -LW T1,B554 (T1) ;T1=health lock -ADDIU V1,R0,0001 -LUI AT,8007 -BEQL T1,R0,7F010A34 -SLTI AT,V0,00DD -BEQ R0,R0,7F010AF4 -*SB V1,97CE (AT) -//7F010A30: -SLTI AT,V0,00DD -BNEZ AT,7F010A58 -LUI T2,8003 -LW T2,B54C (T2) ;T2=character lock -ADDIU V1,R0,0001 -LUI AT,8007 -BEQL T2,R0,7F010A5C -SLTI AT,V0,00C9 -BEQ R0,R0,7F010AF4 -*SB V1,97CC (AT) -//7F010A58: -SLTI AT,V0,00C9 -BNEZ AT,7F010A80 -LUI T3,8003 -LW T3,B550 (T3) ;T3=weapon select lock -ADDIU V1,R0,0001 -LUI AT,8007 -BEQL T3,R0,7F010A84 -SLTI AT,V0,00B5 -BEQ R0,R0,7F010AF4 -*SB V1,97CD (AT) -//7F010A80: -SLTI AT,V0,00B5 -BNEZ AT,7F010AA8 -LUI T4,8003 -LW T4,B548 (T4) ;T4=game length lock -ADDIU V1,R0,0001 -LUI AT,8007 -BEQL T4,R0,7F010AAC -SLTI AT,V0,00A1 -BEQ R0,R0,7F010AF4 -*SB V1,97CB (AT) -//7F010AA8: -SLTI AT,V0,00A1 -BNEZ AT,7F010AD0 -LUI T5,8003 -LW T5,B544 (T5) ;T5=stage select lock -ADDIU V1,R0,0001 -LUI AT,8007 -BEQL T5,R0,7F010AD4 -SLTI AT,V0,008D -BEQ R0,R0,7F010AF4 -*SB V1,97CA (AT) -//7F010AD0: scenario selected -SLTI AT,V0,008D -BNEZ AT,7F010AEC -ADDIU V1,R0,0001 -ADDIU V1,R0,0001 -LUI AT,8007 -BEQ R0,R0,7F010AF4 -*SB V1,97C9 (AT) -//7F010AEC: by default, # players highlighted -LUI AT,8007 -*SB V1,97C8 (AT) ;V1=800697C8: highlight players -//7F010AF4: -... - - - -+_+ - -part of 7F010F10 - MP menu constructor -//7F0111E8: test stage select lock -3C188003 LUI T8,8003 -8F18B544 LW T8,B544 (T8) -53000004 BEQL T8,R0,7F011204 ;70->Alpha if locked -24030070 ADDIU V1,R0,0070 -10000002 BEQ R0,R0,7F011204 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F011200: locked -24030070 ADDIU V1,R0,0070 -//7F011204: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0112DC: test game length lock -3C188003 LUI T8,8003 -8F18B548 LW T8,B548 (T8) -53000004 BEQL T8,R0,7F0112F8 ;70->Alpha if locked -24030070 ADDIU V1,R0,0070 -10000002 BEQ R0,R0,7F0112F8 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F0112F4: locked -24030070 ADDIU V1,R0,0070 -//7F0112F8: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0113D0: test weapon select lock -3C188003 LUI T8,8003 -8F18B550 LW T8,B550 (T8) -53000004 BEQL T8,R0,7F0113EC ;70->Alpha if locked -24030070 ADDIU V1,R0,0070 -10000002 BEQ R0,R0,7F0113EC ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F0113E8: locked -24030070 ADDIU V1,R0,0070 -//7F0113EC: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0114C4: test character select lock -3C188003 LUI T8,8003 -8F18B54C LW T8,B54C (T8) -53000004 BEQL T8,R0,7F0114E0 ;70->Alpha if locked -24030070 ADDIU V1,R0,0070 -10000002 BEQ R0,R0,7F0114E0 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F0114DC: locked -24030070 ADDIU V1,R0,0070 -//7F0114E0: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0115B8: test health lock -3C188003 LUI T8,8003 -8F18B54C LW T8,B554 (T8) -53000004 BEQL T8,R0,7F0115D4 ;70->Alpha if locked -24030070 ADDIU V1,R0,0070 -10000002 BEQ R0,R0,7F0115D4 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F0115D0: locked -24030070 ADDIU V1,R0,0070 -//7F0115D4: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0116AC: test controller style lock -3C188003 LUI T8,8003 -8F18B54C LW T8,B558 (T8) -53000004 BEQL T8,R0,7F0116C8 ;70->Alpha if locked -24030070 ADDIU V1,R0,0070 -10000002 BEQ R0,R0,7F0116C8 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F0116C4: locked -24030070 ADDIU V1,R0,0070 -//7F0116C8: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0117A0: test aim adjustment lock -3C188003 LUI T8,8003 -8F18B54C LW T8,B55C (T8) -53000004 BEQL T8,R0,7F0117BC ;70->Alpha if locked -24030070 ADDIU V1,R0,0070 -24030070 BEQ R0,R0,7F0117BC ;FF->Alpha if unlocked -24030070 ADDIU V1,R0,00FF -//7F0117B8: locked -24030070 ADDIU V1,R0,0070 -//7F0117BC: save and do stuff -24030070 JAL 7000441C -24030070 SW V1,0048 (SP) -... - -//7F011944: test stage select lock - name of stage -3C088003 LUI T0,8003 -8D08B544 LW T0,B544 (T0) -241800A0 ADDIU T8,R0,00A0 -241900A1 ADDIU T9,R0,00A1 -AFA20064 SW V0,0064 (SP) -AFB80058 SW T8,0058 (SP) -11000003 BEQL T0,R0,7F01196C ;70->Alpha if locked -AFB90054 SW T9,0054 (SP) -10000002 BEQ R0,R0,7F011970 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F01196C: locked -24030070 ADDIU V1,R0,0070 -//7F011970: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0119F0: test game length lock - name of length -3C188003 LUI T8,8003 -8F18B548 LW T8,B548 (T8) -240E00A0 ADDIU T6,R0,00A0 -240F00B5 ADDIU T7,R0,00B5 -AFA20064 SW V0,0064 (SP) -AFAE0058 SW T6,0058 (SP) -13000003 BEQL T8,R0,7F011A18 ;70->Alpha if locked -AFAF0054 SW T7,0054 (SP) -10000002 BEQ R0,R0,7F011A1C ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F01196C: locked -24030070 ADDIU V1,R0,0070 -//7F011970: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F011A84: test weapon select lock - name of set -3C0C8003 LUI T4,8003 -8D8CB550 LW T4,B550 (T4) -240A00A0 ADDIU T2,R0,00A0 -240B00C9 ADDIU T3,R0,00C9 -AFA20064 SW V0,0064 (SP) -AFAA0058 SW T2,0058 (SP) -11800003 BEQL T4,R0,7F011AAC ;70->Alpha if locked -AFAB0054 SW T3,0054 (SP) -10000002 BEQ R0,R0,7F011AB0 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F011AAC: locked -24030070 ADDIU V1,R0,0070 -//7F011AB0: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F011B28: test aim adjustment lock - name of setting -3C0A8003 LUI T2,8003 -8D4AB55C LW T2,B55C (T2) -240800A0 ADDIU T0,R0,00A0 -24090119 ADDIU T1,R0,0119 -AFA20064 SW V0,0064 (SP) -AFA80058 SW T0,0058 (SP) -11400003 BEQL T2,R0,7F011B50 ;70->Alpha if locked -AFA90054 SW T1,0054 (SP) -10000002 BEQ R0,R0,7F011B54 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F011B50: locked -24030070 ADDIU V1,R0,0070 -//7F011B54: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F011C3C - initialize and build character select list.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F011C3C - initialize and build character select list.TXT deleted file mode 100644 index 4f9bb18..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F011C3C - initialize and build character select list.TXT +++ /dev/null @@ -1,178 +0,0 @@ -7F011C3C: initialize MP character select list -LUI AT,8003 -SW R0,A8D0 (AT) ;0->8002A8D0: unselect folder tab 1 -LUI AT,8003 -SW R0,A8D4 (AT) ;0->8002A8D4: unselect folder tab 2 -LUI AT,8003 -ADDIU SP,SP,FFD0 -SW R0,A8D8 (AT) ;0->8002A8D8: unselect folder tab 3 -LUI AT,8003 -SW R0,A8E4 (AT) ;0->8002A8E4: unhighlight tab 3 -LUI AT,8003 -SW S4,0028 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW R0,A8E0 (AT) ;0->8002A8E0: unhighlight tab 2 -SW S3,0024 (SP) -LUI AT,8003 -LUI S1,8003 -LUI S2,8009 -LUI S4,8003 -SW RA,002C (SP) ;SP+2C=RA -SW S0,0018 (SP) -SW R0,A8DC (AT) ;0->8002A8DC: unhighlight tab 1 -ADDIU S4,R0,0001 ;S4=1 -ADDIU S2,S2,D130 ;S2=8008D130: p->char.imgs in global bank -ADDIU S1,S1,B198 ;S1=8002B198: character list -ADDIU S3,R0,000C ;S3=C -//7F011CA4: load each of the four images for each entry -LBU V1,0003 (S1) ;V1=8002B19B: portrait -LW T7,0000 (S2) ;T7=8008D130: character select image bank -SLL T6,V1,0x2 ;T6=V1*4: portrait->offset for set -MULTU T6,S3 -MFLO S0 ;S0=T6*0xC: offset to image declaration -ADDU V0,T7,S0 ;V0=T7+S0: bank+offset to entry -LW A2,0000 (V0) ;A2=image 1 ID# -SLTIU AT,A2,0FFF ;AT=TRUE if image loaded -BEQ AT,R0,7F011CDC ;branch if already loaded -OR A0,A2,R0 ;A0=A2: image ID# -JAL 7F0CBEE8 ;load image ID A0 -OR A1,R0,R0 ;A1=0 -LW T8,0000 (S2) ;T8=character select image bank -ADDU V0,T8,S0 ;V0=T8+S0: bank+offset to entry -//7F011CDC: -LW V1,000C (V0) ;V1=image 2 ID# -SLTIU AT,V1,0FFF ;AT=TRUE if image loaded -BEQ AT,R0,7F011CFC ;branch if already loaded -OR A0,V1,R0 ;A0=image ID -JAL 7F0CBEE8 ;load image ID A0 -OR A1,R0,R0 ;A1=0 -LW T9,0000 (S2) ;T9=character select image bank -ADDU V0,T9,S0 ;V0=T9+S0: bank+offset to entry -//7F011CFC: -LW V1,0018 (V0) ;V1=image 3 ID# -SLTIU AT,V1,0FFF ;AT=TRUE if image loaded -BEQ AT,R0,7F011D1C ;branch if already loaded -OR A0,V1,R0 ;A0=image ID -JAL 7F0CBEE8 ;load image ID A0 -OR A1,R0,R0 ;A1=0 -LW T0,0000 (S2) ;T0=character select image bank -ADDU V0,T0,S0 ;V0=T0+S0: bank+offset to entry -//7F011D1C: -LW V1,0024 (V0) ;V1=image 4 ID# -SLTIU AT,V1,0FFF ;AT=TRUE if image loaded -BEQ AT,R0,7F011D34 ;branch if already loaded -OR A0,V1,R0 ;A0=image ID -JAL 7F0CBEE8 ;load image ID A0 -OR A1,R0,R0 ;A1=0 -//7F011D34: loop for all entries -ADDIU S1,S1,0006 ;S1+=6: next entry -LB AT,0002 (S1) ;AT=end flag -BGEZ AT,7F011CA4 ;loop until end -ADDIU S4,S4,0001 ;S4++: total count of characters -//7F011D44: -LUI S1,8003 -ADDIU S1,S1,B194 ;S1=8002B194: #available -LB T1,0003 (S1) ;T1=all characters flag -ADDIU AT,R0,0040 ;AT=0x40 -LUI A0,8003 -BNEZ T1,7F011D7C ;branch if all characters in use -ADDIU A1,R0,0011 ;A1=0x11 -LW A0,A8E8 (A0) ;A0=8002A8E8: folder# -JAL 7F01E2C0 ;V0=TRUE if stage 0x11 (A1) complete on agent+ (A2) in folder A0 -OR A2,R0,R0 ;A2=0 -ADDIU AT,R0,0003 -BNE V0,AT,7F011D84 ;branch if not 3 -ADDIU T3,R0,0009 ;T3=9 -ADDIU T2,R0,0040 ;T2=0x40 -//7F011D7C: all characters available -BEQ R0,R0,7F011DE8 -SH S4,0000 (S1) ;count->8002B194: all characters available -//7F011D84: limitted characters available -LUI S2,8003 -LUI S3,8003 -SH T3,0000 (S1) ;9->8002B194: basic 9 characters available -ADDIU S3,S3,B534 ;S3=8002B534: end of data words -ADDIU S2,S2,B524 ;S2=8002B524: pl1 selected character -//7F011D98: reset if selected character out of list bounds -LH V0,0000 (S1) ;V0=8002B194: # available characters -LW T4,0000 (S2) ;T4=8002B524: selected character -SLT AT,T4,V0 -BNEL AT,R0,7F011DE0 ;branch if selected character in list bounds -ADDIU S2,S2,0004 ;S2+=4: next player's character -BLEZ V0,7F011DD8 ;branch if invalid # characters -OR S0,R0,R0 ;S0=0 -//7F011DB4: find last valid entry -JAL 7F011BD8 -OR A0,S0,R0 ;A0=0 -BEQL V0,R0,7F011DDC -SW S0,0000 (S2) -LH T5,0000 (S1) ;T5=# available characters -ADDIU S0,S0,0001 ;S0++ -SLT AT,S0,T5 -BNEZ AT,7F011DB4 ;branch if selected < available -NOP -//7F011DD8: loop for each player -SW S0,0000 (S2) ;S0->selected character -ADDIU S2,S2,0004 ;S2+=4: next player -BNEL S2,S3,7F011D9C ;branch while more players to deal with -LH V0,0000 (S1) -//7F011DE8: initialize the interface -LUI V0,8003 -LW V0,B524 (V0) ;V0=8002B524: pl1 character -LUI AT,8007 -LUI V1,8003 -SW V0,9710 (AT) ;80069710=pl1 current character selection -LUI AT,8007 -SW V0,9720 (AT) ;80069720=pl1 previous character selection -LUI AT,8007 -SW R0,9730 (AT) ;80069730=0: pl1 buffer -LUI AT,8007 -SW R0,9740 (AT) ;80069740=0: pl1 entry not selected -LW V1,B528 (V1) ;V1=8002B528: pl2 character -LUI AT,8007 -SW R0,9750 (AT) ;80069750=0: pl1 size of image -LUI AT,8007 -SW V1,9714 (AT) ;80069714=pl2 current character selection -LUI AT,8007 -SW V1,9724 (AT) ;80069724=pl2 previous character selection -LUI AT,8007 -SW R0,9734 (AT) ;80069734=0: pl2 buffer -LUI AT,8007 -SW R0,9744 (AT) ;80069744=0: pl2 entry not selected -LUI A0,8003 -LW A0,B52C (A0) ;A0=8002B52C: pl3 character -LUI AT,8007 -SW R0,9754 (AT) ;80069754=0: pl2 size of image -LUI AT,8007 -SW A0,9718 (AT) ;80069718=pl3 current character selection -LUI AT,8007 -SW A0,9728 (AT) ;80069728=pl3 previous character selection -LUI AT,8007 -SW R0,9738 (AT) ;80069738=0: pl3 buffer -LUI AT,8007 -SW R0,9748 (AT) ;80069748=0: pl3 entry not selected -LUI A1,8003 -LW A1,B530 (A1) ;A1=8002B530: pl4 character -LUI AT,8007 -SW R0,9758 (AT) ;80069758=0: pl3 size of image -LUI AT,8007 -SW A1,971C (AT) ;8006971C=pl4 current character selection -LUI AT,8007 -SW A1,972C (AT) ;8006972C=pl4 previous character selection -LUI AT,8007 -SW R0,973C (AT) ;8006973C=0: pl4 buffer -LUI AT,8007 -SW R0,974C (AT) ;8006974C=0: pl4 entry not selected -LUI AT,8007 -JAL 7F00B8AC -SW R0,975C (AT) ;8006975C=0: pl4 size of image -//7F011EAC: return -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F011ED4 - menu 0F interface - character select.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F011ED4 - menu 0F interface - character select.TXT deleted file mode 100644 index a16b978..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F011ED4 - menu 0F interface - character select.TXT +++ /dev/null @@ -1,296 +0,0 @@ -7F011ED4: menu 0F interface: MP character select -ADDIU SP,SP,FFB0 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 7F010290 ;V0=#players -SW S0,0018 (SP) -LUI AT,4270 -MTC1 AT,F12 -SW V0,004C (SP) ;SP+4C=#players -JAL 70004544 -SW R0,0044 (SP) -LUI AT,8005 -JAL 70004590 ;set page width -LWC1 F12,1A88 (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 ;set page height -LWC1 F14,1A8C (AT) -JAL 70004534 -OR A0,R0,R0 -//7F011F40: -LW T6,004C (SP) ;T6=#players -OR S6,R0,R0 ;S6=0 cur.player# -OR S3,R0,R0 ;S3=0 cur.player->offset -BLEZ T6,7F012228 ;branch if invalid #players -LUI S4,8007 -LUI S5,8007 -LUI S1,8007 -LUI S2,8007 -LUI S8,8006 -LUI S7,8007 -ADDIU S7,S7,9750 ;S7=80069750: size of selected pic -ADDIU S8,S8,3720 ;S8=80063720: p->SE buffer -ADDIU S2,S2,9730 ;S2=80069730: selection buffer -ADDIU S1,S1,9710 ;S1=80069710: cur.selections -ADDIU S5,S5,9720 ;S5=80069720: org.selections -ADDIU S4,S4,9740 ;S4=80069740: selected flag -//7F011F80: grow image on select -LW T7,0000 (S4) ;T7=selected flag -SLL A0,S6,0x18 ;A0=S6 * 1000000 -ADDU V0,S7,S3 ;V0=size.reg + S3 -BEQ T7,R0,7F011FE0 ;branch if none selected -SRA T1,A0,0x18 ;T1=S6 & FF -LW V1,0000 (V0) ;V1=picsize -OR A0,T1,R0 ;A0=T1: cur.player -SLTI AT,V1,000B ;TRUE if picsize small -BEQ AT,R0,7F011FC0 ;branch if at max size -NOP -LW T8,0000 (S5) ;T8=org.selection -LW T9,0000 (S1) ;T9=highlighted selection -ADDIU T0,V1,0001 ;T0=picsize++ -BNE T8,T9,7F011FC0 ;branch if not the same -NOP -SW T0,0000 (V0) ;increase picsize -//7F011FC0: reset selection on "B" -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=B button -BEQ V0,R0,7F011FE0 ;branch if not backtracking -ADDIU A1,R0,00C7 ;A1=SE 0C7 -SW R0,0000 (S4) ;S4=0: reset selected flag -LW A0,0000 (S8) ;A0=p->SE buffer -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 ;A2=NULL -//7F011FE0: shrink image on deselect -LW A2,0000 (S4) ;A2=selected flag -ADDU V0,S7,S3 ;V0=size.reg+player.offset -BNEZ A2,7F012004 ;branch if selection already made -NOP -LW V1,0000 (V0) ;V1=picsize -BLEZ V1,7F012004 ;skip if normal size -ADDIU T2,V1,FFFF ;T2=picsize-1 -BEQ R0,R0,7F012164 -SW T2,0000 (V0) ;shrink picsize -//7F012004: test for left button presses -BNEZ A2,7F012164 ;branch if selection already made -SLL S0,S6,0x18 -SRA T3,S0,0x18 -SLL A0,T3,0x18 -SRA T4,A0,0x18 -OR A0,T4,R0 ;A0=cur.player# -OR S0,T3,R0 ;S0=cur.player# -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0202 ;A1=c.left, +.left -BEQ V0,R0,7F012044 ;branch if not pressed -SLL A0,S0,0x18 -LW V0,0000 (S1) ;V0=highlighted entry -BLEZ V0,7F012164 ;branch if all the way left -ADDIU T5,V0,FFFF ;T5=entry-1 -BEQ R0,R0,7F012164 -SW T5,0000 (S1) ;update highlighted entry -//7F012044: test for right pressed -SRA T6,A0,0x18 -OR A0,T6,R0 ;A0=cur.player# -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0101 ;A1=c.right, +.right -BEQ V0,R0,7F012080 -SLL A0,S0,0x18 -LUI T7,8003 -LH T7,B194 (T7) ;T7=8002B194: #characters -LW V0,0000 (S1) ;V0=highlighted entry -ADDIU T8,T7,FFFF ;T8=#entries-1: last entry# -SLT AT,V0,T8 ;TRUE if can still move right one -BEQ AT,R0,7F012164 ;skip if can't -ADDIU T9,V0,0001 ;T9=entry+1 -BEQ R0,R0,7F012164 -SW T9,0000 (S1) ;update highlighted entry -//7F012080: detect if selection made -SRA T0,A0,0x18 -OR A0,T0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,B000 ;A1=A, Z, Start buttons -BEQ V0,R0,7F0120DC -SLL A0,S0,0x18 -JAL 7F011BD8 ;V0= #players who selected MP character A0 -LW A0,0000 (S1) ;A0=highlighted selection -BNEZ V0,7F012164 ;branch on duplicate -LUI AT,8003 -LW T1,0000 (S1) ;T1=highlighted selection -ADDU AT,AT,S3 -ADDIU V0,R0,0001 -ADDU T2,S7,S3 ;T2=size.reg + pl.offset -SW T1,B524 (AT) ;8002B524+offset: save cur.selection -SW V0,0000 (T2) ;1->size.reg -SW V0,0000 (S4) ;1->selected.reg -LW A0,0000 (S8) -ADDIU A1,R0,00C7 -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 -BEQ R0,R0,7F012168 -LW A1,0000 (S5) -//7F0120DC: check if stick right -SRA T3,A0,0x18 -OR A0,T3,R0 ;A0=T3: player# -ADDIU A1,R0,FFFE ;A1=left limit -JAL 7000C4B4 ;V0=horz.control stick state -ADDIU A2,R0,0001 ;A2=right limit -BLEZ V0,7F012128 ;branch if not right -SLL A0,S0,0x18 -LW T4,0000 (S2) ;T4=TRUE if selection made -LUI T5,8003 -BNEL T4,R0,7F012168 ;skip if already selected -LW A1,0000 (S5) -LH T5,B194 (T5) ;T5=8002B194: #characters -LW V0,0000 (S1) ;V0=highlighted selection -ADDIU T6,T5,FFFF ;T6=#characters-1: #entries -SLT AT,V0,T6 ;TRUE if can move right one -BEQ AT,R0,7F012164 -ADDIU T7,V0,0001 ;T7=highlighted entry+1 -BEQ R0,R0,7F012164 -SW T7,0000 (S1) ;update highlighted entry -//7F012128: pressed check if stick left -SRA T8,A0,0x18 -OR A0,T8,R0 ;A0=T8: player# -ADDIU A1,R0,FFFE ;A1=left limit -JAL 7000C4B4 ;V0=horz.control stick state -ADDIU A2,R0,0001 ;A2=right limit -SLTI AT,V0,FFFF ;TRUE if left (-2) -BEQL AT,R0,7F012168 ;branch if not left -LW A1,0000 (S5) -LW T9,0000 (S2) ;T9=TRUE if selection made -BNEL T9,R0,7F012168 ;skip if already selected -LW A1,0000 (S5) -LW V0,0000 (S1) ;V0=highlighted selection -BLEZ V0,7F012164 ;branch if left-most entry -ADDIU T0,V0,FFFF ;T0=entry-1 -SW T0,0000 (S1) ;update highlighted entry -//7F012164: -LW A1,0000 (S5) ;A1=org.selections -ADDIU A3,R0,0054 -LW T2,0000 (S1) ;T2=highlighted entry -MULTU A1,A3 -LW V0,0000 (S2) -ADDIU S6,S6,0001 ;S6++ -ADDIU S4,S4,0004 ;S4+=4: next player's selected register -ADDIU S1,S1,0004 ;S1+=4: next player's highlighted entry -LW A2,FFFC (S4) ;A2=TRUE if selected character -ADDU T9,S7,S3 -ADDIU T3,V0,FFF4 -MFLO T1 ;T1=org.sel * 54: -ADDU V1,V0,T1 -NOP -MULTU T2,A3 -MFLO A0 -SLT AT,A0,V1 -BEQL AT,R0,7F0121D0 -SLT AT,V1,A0 -BGEZ T3,7F0121F4 -SW T3,0000 (S2) -ADDIU T4,T3,0054 -ADDIU T5,A1,FFFF -SW T4,0000 (S2) -BEQ R0,R0,7F0121F4 -SW T5,0000 (S5) -//7F0121CC: -SLT AT,V1,A0 -BEQ AT,R0,7F0121F4 -ADDIU T6,V0,000C -SLTI AT,T6,0054 -BNEZ AT,7F0121F4 -SW T6,0000 (S2) -ADDIU T7,T6,FFAC -ADDIU T8,A1,0001 -SW T7,0000 (S2) -SW T8,0000 (S5) -//7F0121F4: -BEQL A2,R0,7F012218 ;branch if selection wasn't made -LW T3,004C (SP) -LW T0,0000 (T9) ;T0=pic.size -LW T1,0044 (SP) ;T1=total selections -ADDIU AT,R0,000B -BNE T0,AT,7F012214 ;branch if pic size is still small -ADDIU T2,T1,0001 ;T2=total+1 -SW T2,0044 (SP) ;update total selections -//7F012214: loop for each player -LW T3,004C (SP) ;T3=#players -ADDIU S3,S3,0004 ;S3+=4 -ADDIU S5,S5,0004 ;S5+=4 -BNE S6,T3,7F011F80 ;loop for each player -ADDIU S2,S2,0004 ;S2+=4 -//7F012228: set folder backdrop and controller interface -LUI S0,8003 -ADDIU S0,S0,A95C ;S0=8002A95C -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,0000 (S0) ;A0=8002A95C: p->object instance -LW A0,0000 (S0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0: -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1 visible -LW A0,0000 (S0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,002A ;A1=2A: -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1 visible -JAL 7F009B84 ;control stick tracking -NOP -//7F012260: return to options menu when players everyone has selected -LW T4,0044 (SP) ;T4=SP+44: total selection -LW T5,004C (SP) ;T5=#players -BNE T4,T5,7F012278 ;branch while indecisive -ADDIU A0,R0,000E ;A0=menu E: MP options -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 ;A1=0 immediate -//7F012278: return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0050 - -+_+ - -7F011BD8 46708 V0= #players who have selected MP character A0 - accepts: A0=multiplayer character entry# - fries: AT,V1,A0,A1,A2,A3,T0,T6,T7,T8,T9 -LUI A1,8003 -LW A1,B520 (A1) ;A1=8002B520: #players selected -OR A2,A0,R0 ;A2=A0: -OR V1,R0,R0 ;V1=0 -BLEZ A1,7F011C34 ;return if invalid #players -OR V0,R0,R0 ;V0=FALSE -LUI T6,8007 -SLL T7,A1,0x2 ;T7=#players->offset -LUI A1,8003 -ADDIU A0,T6,9740 ;A0=80069740 -ADDU A3,T7,A0 ;A3=p->last word to be checked -ADDIU A1,A1,B524 ;A1=8002B524 -//7F011C08: detect if selection made and which one -LW T8,0000 (A0) ;T8=TRUE if player's MP character selected -ADDIU A0,A0,0004 ;A0+=4 next entry -SLTU AT,A0,A3 ;TRUE if not last entry -BEQ T8,R0,7F011C2C ;branch if not selected -ADDU T9,A1,V0 ;T9=8002B524+offset: p->player's selected character -LW T0,0000 (T9) ;T0=selected character -BNE A2,T0,7F011C2C ;branch if not character tested for -NOP -ADDIU V1,R0,0001 ;V1++ -//7F011C2C: loop for each player -BNEZ AT,7F011C08 ;loop for each player -ADDIU V0,V0,0004 ;V0+=4 offset to next character's selection -//7F011C34: return -JR RA -OR V0,V1,R0 ;V0=V1: diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F012794 - menu 0F constructor - character select.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F012794 - menu 0F constructor - character select.TXT deleted file mode 100644 index 1fdd9be..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 0F - character select/7F012794 - menu 0F constructor - character select.TXT +++ /dev/null @@ -1,627 +0,0 @@ -7F012794: menu 0F constructor: MP character select - accepts: A0=p->display list -ADDIU SP,SP,FF18 -SW RA,0064 (SP) -SW S1,0044 (SP) -OR S1,A0,R0 ;S1=A0: display list target -SW S8,0060 (SP) -SW S7,005C (SP) -SW S6,0058 (SP) -SW S5,0054 (SP) -SW S4,0050 (SP) -SW S3,004C (SP) -SW S2,0048 (SP) -SW S0,0040 (SP) -JAL 7F010290 ;V0=#players selected -SDC1 F20,0038 (SP) -SW V0,00E4 (SP) ;SP+E4=V0: #players -OR A0,S1,R0 ;A0=S1: DL -OR A1,R0,R0 ;A1=0 -OR A2,R0,R0 ;A2=0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 ;A3=0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 ;A0=V0: DL -JAL 7F00D5E8 -OR A0,V0,R0 ;A0=V0: DL -JAL 7F0ACD98 -OR A0,V0,R0 ;A0=V0: DL -//7F0127FC: make 2-screen division -ADDIU T6,R0,00AB -ADDIU T7,R0,0090 -SW T7,0014 (SP) ;SP+14= 00000090: colour (alpha present) -SW T6,0010 (SP) ;SP+10= 0xAB: lower right y position -OR A0,V0,R0 ;A0=V0: DL -ADDIU A1,R0,0026 ;A1=0x26: upper left x position -ADDIU A2,R0,00A9 ;A2=0xA9: upper left y position -JAL 7F0AD014 ;draw coloured box -ADDIU A3,R0,0184 ;A3=0x184: lower right x position -//7F012820: detect if 3-4 player -LW T0,00E4 (SP) ;T0=SP+E4: #players -OR S1,V0,R0 ;S1=V0: DL -OR A0,S1,R0 ;A0=S1: DL -SLTI AT,T0,0003 ;AT=TRUE if 1-2 players -BNEZ AT,7F01285C ;branch if 2-screen -ADDIU A1,R0,00D4 ;A1= 0xD4: ul x -//7F012838: add 4-screen division -ADDIU T8,R0,0136 -ADDIU T9,R0,0080 -SW T9,0014 (SP) ;SP+14= 00000080: colour -SW T8,0010 (SP) ;SP+10= 0x136: lr y -ADDIU A2,R0,001E ;A2=0x1E: ul y -JAL 7F0AD014 ;draw coloured box -ADDIU A3,R0,00D6 ;A3=0xD6: lr x -OR S1,V0,R0 ;S1=V0: DL -LW T0,00E4 (SP) ;T0=#players -//7F01285C: -BLEZ T0,7F012DF4 ;branch if invalid # players -LUI T1,8007 -LUI T2,8007 -LUI T3,8007 -LUI T4,8007 -LUI AT,4080 -ADDIU T4,T4,9720 ;T4=80069720: original selections -ADDIU T3,T3,9730 ;T3=80069730: selection buffer -ADDIU T2,T2,9710 ;T2=80069710: current selections -ADDIU T1,T1,9740 ;T1=80069740: TRUE when selection made -LUI S8,8007 -MTC1 AT,F20 ;F20=4.0 [40800000]: -ADDIU S8,S8,9750 ;S8=80069750: size of selected image -SW T1,0088 (SP) ;SP+88=80069740: TRUE when selection made -SW T2,0080 (SP) ;SP+80=80069710: current selections -SW T3,0074 (SP) ;SP+74=80069730: selection buffer -SW T4,0070 (SP) ;SP+70=80069720: original selections -SW R0,00E0 (SP) ;SP+E0=0: -//7F0128A4: placement of character bars on screen -LW T0,00E4 (SP) ;T0=SP+E4: #players -LW A0,00E0 (SP) ;A0=SP+E0: -ADDIU AT,R0,0002 -BNE T0,AT,7F0128D8 ;branch if not 2 player -ANDI T5,A0,0001 ;T5=A0 & 1: player 1 or 3 -ADDIU S2,R0,0026 ;S2=0x26 -BLEZ A0,7F0128CC ;branch if count is 0 -ADDIU S4,R0,015E ;S4=0x15E frame width -BEQ R0,R0,7F012908 -ADDIU S7,R0,00AA ;S7=0xAA frame height -//7F0128CC: -OR V1,R0,R0 ;V1=0 -BEQ R0,R0,7F012908 -ADDIU S7,V1,001E ;S7=0x1E + 0 frame height -//7F0128D8: 2-screen division -SLTI AT,A0,0002 ;AT=TRUE if count < 2 -BNEZ AT,7F0128EC ;branch if 0,1 -ADDIU S4,R0,00AF ;S4=0xAF frame width -BEQ R0,R0,7F0128F0 -ADDIU V1,R0,008C ;V1=0x8C -//7F0128EC: -OR V1,R0,R0 ;V1=0 -//7F0128F0: -BEQ T5,R0,7F012900 ;branch if odd count -ADDIU S7,V1,001E ;S7=V1 + 0x1E -BEQ R0,R0,7F012904 -ADDIU V1,R0,00AF ;V1=0xAF -//7F012900: -OR V1,R0,R0 ;V1=0 -//7F012904: -ADDIU S2,V1,0026 ;S2=0x26 + V1 -//7F012908: generate setscissor DL op -ADDIU T6,S2,0006 ;T6=S2+6: frame width + margin -MTC1 T6,F4 -ADDIU S0,S7,0005 ;S0=S7+5: frame height + margin -MTC1 S0,F16 -CVT.S.W F6,F4 ;F6=(float) S2+6: -ADDU T7,S2,S4 ;T7=S2+S4: frame width + margin -LUI AT,ED00 -ADDIU S1,V0,0008 ;S1=V0+8: DL -CVT.S.W F18,F16 ;F18=(float) S7+5: -MUL.S F8,F6,F20 -TRUNC.W.S F10,F8 ;F10=F6 * 4.0: -MUL.S F4,F18,F20 -MFC1 T8,F10 ;T8=F10: -NOP -ANDI T9,T8,0FFF ;T9=T8 & 0xFFF: upper left x -TRUNC.W.S F6,F4 ;F6=F18 * 4.0: -SLL T1,T9,0xC ;T1=T9*0x1000: upper left x << C -ADDIU T9,T7,FFFA ;T9=T7-6: -MTC1 T9,F8 -MFC1 T4,F6 ;T4=F6: -OR T2,T1,AT ;T2=ED.FFF.000: setscissor | ulx -CVT.S.W F10,F8 ;F10=T9: -ANDI T5,T4,0FFF ;T5=T4 & 0xFFF: upper left y -OR T6,T2,T5 ;T6=ED.FFF.FFF: setscissor | uly -ADDIU T5,S7,0087 ;T5=S7+0x87: -MTC1 T5,F4 -SW T6,0000 (V0) ;setscissor->DL -MUL.S F16,F10,F20 ;F16=F10 * 4.0: -SW T7,008C (SP) ;SP+8C=T7: -CVT.S.W F6,F4 ;F6=(float) T5 -TRUNC.W.S F18,F16 -MUL.S F8,F6,F20 ;F8=F6 * 4.0: -MFC1 T3,F18 ;T3=F16: -NOP -ANDI T4,T3,0FFF ;T4=T3 & 0xFFF: lower right x -TRUNC.W.S F10,F8 -SLL T2,T4,0xC ;T2=T4 * 0x1000: lrx << C -MFC1 T7,F10 ;T7=F8 -NOP -ANDI T8,T7,0FFF ;T8=T7 & 0xFFF: lower right y -OR T9,T2,T8 ;T9=00.FFF.FFF: lrx | lry -SW T9,0004 (V0) ;setscissor->DL -//7F0129B0: -LW T1,0088 (SP) ;T1=SP+88: selected flags -SW A0,00E0 (SP) ;A0->SP+E0: count -LW T3,0000 (T1) ;T3=TRUE if pl1 has selected -BNEL T3,R0,7F012A90 ;branch if pl1 selection made -LW T6,0080 (SP) -LW T4,0000 (S8) ;T4=size of image -SW A0,00E0 (SP) ;A0->SP+E0: count -BNEL T4,R0,7F012A90 ;branch if large (selection made) -LW T6,0080 (SP) -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,9C55 ;A0=9C55: "Select Character" -LUI T5,8004 -LW T5,0EB4 (T5) ;T5=80040EB4: p->1st font table -LUI A3,8004 -OR S3,V0,R0 ;S3=V0: p->text -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,00BC ;A0=SP+BC: @height -ADDIU A1,SP,00B8 ;A1=SP+B8: @width -OR A2,V0,R0 ;A2=V0: p->text -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) ;SP+10=p->1st font table -//7F012A08: -LW T2,00B8 (SP) ;T2=SP+B8: width -SRA T6,S4,0x1 ;T6=S4/2: frame width/2 -ADDU T7,T6,S2 ;T7=(S4/2)+S2: frame width/2 + margin -SRA T8,T2,0x1 ;T8=T2/2: width/2 -SUBU T9,T7,T8 ;T9=(S4/2)+S2-(T2/2): x position -SW T9,00B4 (SP) ;T9->SP+B4: x pos. -SW S0,00B0 (SP) ;S0->SP+B0: y pos. -JAL 7F0ACD98 -OR A0,S1,R0 ;A0=S1: DL -JAL 7000441C ;V0= text clip width -OR S1,V0,R0 ;S1=V0: DL -SLL S0,V0,0x10 -SRA T1,S0,0x10 ;T1=text clip height -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 ;S0=V0 & 0xFFFF -LUI T3,8004 -LUI T4,8004 -LW T4,0EB4 (T4) ;T4=80040EB4: p->1st font table -LW T3,0EB8 (T3) ;T3=80040EB8: p->2nd font table -ADDIU T5,R0,00FF ;T5=000000FF black -SW T5,0018 (SP) ;SP+18=RGBA -OR A0,S1,R0 ;A0=S1: DL -ADDIU A1,SP,00B4 ;A1=SP+B4: p->x pos. -ADDIU A2,SP,00B0 ;A2=SP+B0: p->y pos. -OR A3,S3,R0 ;A3=S3: p->text -SW S0,001C (SP) ;S0->SP+1C: clip width -SW V0,0020 (SP) ;V0->SP+20: clip height -SW R0,0024 (SP) ;0 ->SP+24: y offset -SW R0,0028 (SP) ;0 ->SP+28: x offset -SW T4,0014 (SP) ;T4->SP+14: p->1st font table -JAL 7F009760 ;writes text to screen at absolute coordinates -SW T3,0010 (SP) ;T3->SP+10: p->2nd font table -OR S1,V0,R0 -//7F012A8C: display name of current selection -LW T6,0080 (SP) ;T6=SP+80: cur.selections -LUI A0,8003 -SRA T8,S4,0x1 ;T8=S4/2: -LW T2,0000 (T6) ;T2=cur.selection -ADDU S6,T8,S2 ;S6=(S4/2)+S2 -SLL T7,T2,0x2 -SUBU T7,T7,T2 -SLL T7,T7,0x1 ;T7=cur.selection * 0x6 -ADDU A0,A0,T7 -JAL 7F0C1DD8 ;V0=p->text ID A0 -LHU A0,B198 (A0) ;A0=8002B198+offset: character name -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LUI A3,8004 -OR S3,V0,R0 ;S3=V0: p->text -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,SP,00A8 ;A0=SP+A8: -ADDIU A1,SP,00A4 ;A1=SP+A4: -OR A2,V0,R0 ;A2=V0: p->text -SW R0,0014 (SP) ;0 ->SP+14: -JAL 7F0AE98C ;determine width of string -SW T9,0010 (SP) ;T9->SP+10: p->1st font table -//7F012AE4: -LW T1,00A4 (SP) ;T1=SP+A4: strwidth -ADDIU T5,S7,0078 -SW T5,009C (SP) ;0x78->SP+9C: text y position -SRA T3,T1,0x1 ;T3=strwidth /2 -SUBU T4,S6,T3 ;T4=x position - (strwidth/2) -SW T4,00A0 (SP) ;T4->SP+A0: text x position -JAL 7F0ACD98 -OR A0,S1,R0 ;A0=S1: DL -JAL 7000441C ;V0= halfword @ 800232A8: -OR S1,V0,R0 ;S1=V0: DL -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C -OR S0,T6,R0 ;S0=V0 & 0xFFFF: -LUI T2,8004 -LUI T7,8004 -LW T7,0EB4 (T7) ;T7=80040EB4: p->1st font table -LW T2,0EB8 (T2) ;T2=80040EB8: p->2nd font table -ADDIU T8,R0,00FF ;T8=000000FF -SW T8,0018 (SP) ;RGBA->SP+18 -OR A0,S1,R0 ;A0=S1: DL -ADDIU A1,SP,00A0 ;A1=SP+A0: p->x pos -ADDIU A2,SP,009C ;A2=SP+9C: p->y pos -OR A3,S3,R0 ;A3=S3: p->text -SW S0,001C (SP) ;S0->SP+1C: clip width -SW V0,0020 (SP) ;V0->SP+20: clip height -SW R0,0024 (SP) ;0 ->SP+24: y offset -SW R0,0028 (SP) ;0 ->SP+28: x offset -SW T7,0014 (SP) ;T7->SP+14: p->1st font table -JAL 7F009760 ;draw text to screen -SW T2,0010 (SP) ;T2->SP+10: p->2nd font table -//7F012B60: -LW T9,0074 (SP) ;T9=selection buffer -LW T3,0070 (SP) ;T3=original selections -LW S4,008C (SP) ;S4= -LW T1,0000 (T9) ;T1=value in selection buffer -ADDIU S5,S7,0046 ;S5=S7+0x46 -SW S5,0010 (SP) ;S5->SP+10 -LW T5,0000 (S8) ;T5=size of image -LW T4,0000 (T3) ;T4=original selection -ADDIU S3,S2,000D ;S3=S2+0xD: -ADDIU S4,S4,FFF2 ;S4-=E: -OR A2,S4,R0 ;A2=S4 -OR A1,S3,R0 ;A1=S3: -OR A0,V0,R0 ;A0=V0: DL -SUBU A3,S6,T1 ;A3=S6-T1: x position - T1 -SW T5,0018 (SP) ;SP+18=size of image -JAL 7F01231C -SW T4,0014 (SP) ;SP+14=original selection -//7F012BA4: set size when not selected -LW T6,0088 (SP) ;T6=SP+88: selected flags -OR S1,V0,R0 ;S1=V0: DL -LW T8,0070 (SP) ;T8=SP+70: original selections -LW T2,0000 (T6) ;T2=TRUE if selected -LW T1,0080 (SP) ;T1=SP+80: cur. selections -BNEL T2,R0,7F012BD0 ;branch if selected -LW T9,0000 (T8) -LW T7,0000 (S8) ;T7=S8: size of image -BEQL T7,R0,7F012BE0 ;branch if not enlarged and not selected -LW T4,0070 (SP) -//7F012BCC: enlarged or selected -LW T9,0000 (T8) ;T9=original selection -LW T3,0000 (T1) ;T3=cur.selection -BEQL T9,T3,7F012DB0 ;branch if same selection -LW T3,0088 (SP) -//7F012BDC: -LW T4,0070 (SP) ;T4=SP+70: original selections -OR A0,S1,R0 ;A0=S1: DL -OR A1,S3,R0 ;A1=S3: -LW S0,0000 (T4) ;S0=original selection -OR A2,S4,R0 ;A2=S4: -LW T5,0074 (SP) ;T5=SP+74: selection buffer -SLTI AT,S0,0003 ;AT=TRUE if org.sel < 3 -BNEZ AT,7F012C2C ;branch if true -ADDIU T2,S0,FFFD ;T2=S0-3: -LW T6,0000 (T5) ;T6=value -LW T7,0000 (S8) ;T7=size of image -SW T2,0014 (SP) ;T2->SP+14: -SUBU A3,S6,T6 ;A3=x position - value -ADDIU A3,A3,FF04 ;A3-=0xFC -SW S5,0010 (SP) ;SP+10=S5: -JAL 7F01231C -SW T7,0018 (SP) ;SP+18=T7: size of image -LW T8,0070 (SP) ;T8=SP+70: original selections -OR S1,V0,R0 ;S1=V0: DL -LW S0,0000 (T8) ;S0=original selection -//7F012C2C: -SLTI AT,S0,0002 -BNEZ AT,7F012C74 -OR A0,S1,R0 -LW T1,0074 (SP) -LW T4,0000 (S8) -ADDIU T3,S0,FFFE -LW T9,0000 (T1) -SW T3,0014 (SP) -SW S5,0010 (SP) -SUBU A3,S6,T9 -ADDIU A3,A3,FF58 -OR A1,S3,R0 -OR A2,S4,R0 -JAL 7F01231C -SW T4,0018 (SP) -LW T5,0070 (SP) -OR S1,V0,R0 -LW S0,0000 (T5) -//7F012C74: -BLEZ S0,7F012CB8 -OR A0,S1,R0 -LW T6,0074 (SP) -LW T8,0000 (S8) -ADDIU T7,S0,FFFF -LW T2,0000 (T6) -SW T7,0014 (SP) -SW S5,0010 (SP) -SUBU A3,S6,T2 -ADDIU A3,A3,FFAC -OR A1,S3,R0 -OR A2,S4,R0 -JAL 7F01231C -SW T8,0018 (SP) -LW T1,0070 (SP) -OR S1,V0,R0 -LW S0,0000 (T1) -//7F012CB8: -LUI V1,8003 -LH V1,B194 (V1) -OR A0,S1,R0 -OR A1,S3,R0 -ADDIU T9,V1,FFFF -SLT AT,S0,T9 -BEQ AT,R0,7F012D14 -OR A2,S4,R0 -LW T3,0074 (SP) -LW T6,0000 (S8) -ADDIU T5,S0,0001 -LW T4,0000 (T3) -SW T5,0014 (SP) -SW S5,0010 (SP) -SUBU A3,S6,T4 -ADDIU A3,A3,0054 -JAL 7F01231C -SW T6,0018 (SP) -LW T2,0070 (SP) -LUI V1,8003 -LH V1,B194 (V1) -OR S1,V0,R0 -LW S0,0000 (T2) -//7F012D14: -ADDIU T7,V1,FFFE -SLT AT,S0,T7 -BEQ AT,R0,7F012D68 -OR A0,S1,R0 -LW T8,0074 (SP) -LW T3,0000 (S8) -ADDIU T9,S0,0002 -LW T1,0000 (T8) -SW T9,0014 (SP) -SW S5,0010 (SP) -SUBU A3,S6,T1 -ADDIU A3,A3,00A8 -OR A1,S3,R0 -OR A2,S4,R0 -JAL 7F01231C -SW T3,0018 (SP) -LW T4,0070 (SP) -LUI V1,8003 -LH V1,B194 (V1) -OR S1,V0,R0 -LW S0,0000 (T4) -//7F012D68: -ADDIU T5,V1,FFFD -SLT AT,S0,T5 -BEQ AT,R0,7F012DAC -OR A0,S1,R0 -LW T6,0074 (SP) -LW T8,0000 (S8) -ADDIU T7,S0,0003 -LW T2,0000 (T6) -SW T7,0014 (SP) -SW S5,0010 (SP) -SUBU A3,S6,T2 -ADDIU A3,A3,00FC -OR A1,S3,R0 -OR A2,S4,R0 -JAL 7F01231C -SW T8,0018 (SP) -OR S1,V0,R0 -//7F012DAC: -LW T3,0088 (SP) -LW T1,00E0 (SP) -LW T5,0080 (SP) -LW T2,0074 (SP) -LW T8,0070 (SP) -ADDIU T4,T3,0004 -LW T3,00E4 (SP) -ADDIU T9,T1,0001 -ADDIU T6,T5,0004 -ADDIU T7,T2,0004 -ADDIU T1,T8,0004 -SW T1,0070 (SP) -SW T7,0074 (SP) -SW T6,0080 (SP) -SW T9,00E0 (SP) -SW T4,0088 (SP) -BNE T9,T3,7F0128A4 -ADDIU S8,S8,0004 -JAL 7F0ACEF0 -OR A0,S1,R0 -//7F012DFC: return -LW RA,0064 (SP) -LDC1 F20,0038 (SP) -LW S0,0040 (SP) -LW S1,0044 (SP) -LW S2,0048 (SP) -LW S3,004C (SP) -LW S4,0050 (SP) -LW S5,0054 (SP) -LW S6,0058 (SP) -LW S7,005C (SP) -LW S8,0060 (SP) -JR RA -ADDIU SP,SP,00E8 - - -7F00D5E8: - accepts: A0=p->display list target -ADDIU SP,SP,FEA8 -SW S2,0034 (SP) -LUI S2,8003 -ADDIU S2,S2,A8E8 ;S2=8002A8E8: folder# -LW T6,0000 (S2) ;T6=folder# -SW S3,0038 (SP) -ADDIU S3,R0,000C ;S3=C -MULTU T6,S3 -SW S1,0030 (SP) -LUI S1,8003 -ADDIU S1,S1,AB94 ;S1=8002AB94: -LUI T9,8003 -ADDIU T9,T9,AFB4 ;T9=8002AFB4: start of copy block -MTC1 R0,F12 -SW RA,003C (SP) -SW S0,002C (SP) -SW A0,0158 (SP) ;SP+158=A0: DL -MFLO T7 ;T7=folder# * C: -ADDU V0,S1,T7 ;V0=8002AB94+(folder*C): -LWC1 F0,0000 (V0) ;F0=x position -LWC1 F2,0004 (V0) ;F2=y position -ADDIU T2,T9,003C ;T2=8002AFF0: end of block -ADDIU T8,SP,010C ;T8=SP+10C: target -//7F00D644: copy to stack -LW AT,0000 (T9) -ADDIU T9,T9,000C ;T9+=C: next entry -ADDIU T8,T8,000C ;T8+=C: target+=C -SW AT,FFF4 (T8) -LW AT,FFF8 (T9) -SW AT,FFF8 (T8) -LW AT,FFFC (T9) -BNE T9,T2,7F00D644 ;branch until 0x3C bytes copied -SW AT,FFFC (T8) -//7F00D668: -LW AT,0000 (T9) -ADDIU A0,SP,00C8 ;A0=SP+C8: -SW AT,0000 (T8) ;0x40 bytes copied -LUI AT,8003 -LWC1 F4,AFC4 (AT) ;F4=8002AFC4: -LUI AT,8003 -LWC1 F6,AFC8 (AT) ;F6=8002AFC8: -LUI AT,457A -MTC1 AT,F8 ;F8=4000.0 -LUI AT,8003 -LWC1 F10,AFCC (AT) ;F10=8002AFCC: -ADD.S F0,F0,F4 ;F0=F0+F4: xpos+ -LUI AT,3F80 -MTC1 AT,F18 ;F18=1.0 -ADD.S F2,F2,F6 ;F2=F2+F6: ypos+ -MFC1 A1,F0 ;A1=F0 -SWC1 F0,0010 (SP) ;SP+10=F0 -ADD.S F16,F8,F10 ;F16=F8+F10: 4000.0+ -MFC1 A2,F2 ;A2=F2: -SWC1 F2,0014 (SP) ;SP+14=F2: -SWC1 F12,0024 (SP) ;SP+24=0 -MFC1 A3,F16 ;A3=F16: -SWC1 F12,001C (SP) ;SP+1C=0 -SWC1 F12,0018 (SP) ;SP+18=0 -JAL 7F059694 -SWC1 F18,0020 (SP) ;SP+20=F18: -//7F00D6D0: -LW T3,0000 (S2) ;T3=folder# -ADDIU S0,SP,0088 ;S0=SP+88: -OR A1,S0,R0 ;A1=SP+88 -MULTU T3,S3 -MFLO T4 ;T4=folder# * C -ADDU A0,S1,T4 ;A0=8002AB94+offset: positions? -JAL 7F058964 ;initialize and copy positions to A1 -NOP -//7F00D6F0: -LUI AT,3E80 -MTC1 AT,F12 ;F12=0.25 -JAL 7F058A7C ;multiply matrix A1 by F12 -OR A1,S0,R0 ;A1=SP+88 -ADDIU A0,SP,00C8 ;A0=SP+C8: -JAL 7F058068 -OR A1,S0,R0 ;A1=SP+88 -//7F00D70C: -LUI S3,8003 -ADDIU S3,S3,A95C ;S3=8002A95C: p->obj.instance -LW T5,0000 (S3) ;T5=object instance data -SW S0,010C (SP) ;SP+10C=S0: SP+88 -LW T6,0008 (T5) ;T6=p->object header -LH A0,000E (T6) ;A0=number of object groups -SLL T7,A0,0x6 -JAL 7F0BD714 ; -OR A0,T7,R0 ;A0=#groups * 0x40: -//7F00D730: -SW V0,011C (SP) ;SP+11C=V0: -OR A0,S0,R0 ;A0=SP+88 -JAL 7F058020 -OR A1,V0,R0 ;A1=V0: -//7F00D740: -LW T1,011C (SP) -LW T0,0000 (S3) -ADDIU T2,R0,0003 -ADDIU A0,SP,010C -SW T1,000C (T0) -LW T9,0158 (SP) -SW T2,0114 (SP) -SW R0,0110 (SP) -LW A1,0000 (S3) -JAL 7F074684 -SW T9,0118 (SP) -//7F00D770: -LW V0,0000 (S3) -OR S0,R0,R0 -SW T8,0158 (SP) -LW T3,0008 (V0) -OR S1,R0,R0 -ADDIU S2,SP,0048 -LH T4,000E (T3) -BLEZL T4,7F00D7E0 -LW RA,003C (SP) -//7F00D794: -LW T5,000C (V0) -OR A1,S2,R0 -JAL 7F058020 -ADDU A0,T5,S1 -LW T6,0000 (S3) -SLL T1,S0,0x6 -OR A0,S2,R0 -LW T7,000C (T6) -JAL 7F058C9C -ADDU A1,T7,T1 -LW V0,0000 (S3) -ADDIU S0,S0,0001 -ADDIU S1,S1,0040 -LW T0,0008 (V0) -LH T2,000E (T0) -SLT AT,S0,T2 -BNEL AT,R0,7F00D798 -LW T5,000C (V0) -//7F00D7DC: -LW RA,003C (SP) -LW V0,0158 (SP) -LW S0,002C (SP) -LW S1,0030 (SP) -LW S2,0034 (SP) -LW S3,0038 (SP) -JR RA -ADDIU SP,SP,0158 - - -7F058964: initialize A1 and copy position from A0 to A1+0x30 - accepts: A0=, A1=p->target -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) ;A0->SP+18: position data -SW A1,001C (SP) ;A1->SP+1C: buffer -JAL 7F057FD0 ;initialize buffer A1 (zero, 1.0 to 0x3C) -OR A0,A1,R0 ;A0=A1: buffer -LW A0,0018 (SP) ;A0=original -JAL 7F058998 ;copies positions A0 to A1+0x30 -LW A1,001C (SP) ;A1=buffer -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0BD714: - A0=offset in model -LUI A2,8009 -ADDIU A2,A2,C24C -LW V0,0000 (A2) ;V0=8008C24C: -ADDIU A0,A0,000F ;A0+=F: -ORI T6,A0,000F -XORI T7,T6,000F ;T7=A0 to nearest 0x10 -ADDU T8,V0,T7 ;T8= + T7: -JR RA -SW T8,0000 (A2) ;8008C24C=T8: diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/7F012EC4 - menu 10 interface - handicap menu.txt b/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/7F012EC4 - menu 10 interface - handicap menu.txt deleted file mode 100644 index 8038de2..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/7F012EC4 - menu 10 interface - handicap menu.txt +++ /dev/null @@ -1,190 +0,0 @@ -7F012EC4 479F4 menu 10 interface: handicap select -ADDIU SP,SP,FFB8 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 7F010290 ;ret V0=selected #MP players -SW S0,0018 (SP) -LUI AT,4270 -MTC1 AT,F12 ;F12=60.0 -SW V0,0044 (SP) ;#player->SP+44 -JAL 70004544 -OR S8,R0,R0 -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A90 (AT) ;60.0->80051A90: ??? -LUI AT,42C8 -MTC1 AT,F12 ;F12=100.0 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A94 (AT) ;100.0->80051A94: ??? -JAL 70004534 ;stores A0->p@800232A8+24: ??? -OR A0,R0,R0 ;A0=0 -LW T6,0044 (SP) ;T6=SP+44: #sel players -OR S3,R0,R0 ;S3=0: playercounter -OR S4,R0,R0 ;S4=0: offset to player's slot -BLEZ T6,7F0130FC ;branch if stupid # players -LUI S1,8007 -LUI S6,8007 -LUI S5,8006 -ADDIU S5,S5,3720 ;S5=80063720: p->SE buffer -ADDIU S6,S6,97A8 ;S6=800697A8: selected handicaps -ADDIU S1,S1,9740 ;S1=80069740: ??? -ADDIU S7,R0,0001 ;S7=1 -//7F012F5C: 47A8C test each player for updates - cancel first -LW T7,0000 (S1) -SLL A0,S3,0x18 ;A0=S3<<18: player*1000000 -SRA T8,A0,0x18 ;T8=A0>>18: 1-byte player number -BEQ T7,R0,7F012F90 -OR A0,T8,R0 ;A0=T8: playercount & 0xFF -JAL 7000C3AC ;ret V0=button mask A1 on player A0's controller -ADDIU A1,R0,4000 ;A1=0x4000: B button -BEQ V0,R0,7F012F90 ;branch if B not pressed -ADDIU A1,R0,00C7 ;A1=SE 0C7: menu selection and folder change -SW R0,0000 (S1) -LW A0,0000 (S5) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play SE A1 -OR A2,R0,R0 ;A2=0: NULL p->data -//7F012F90: -LW V0,0000 (S1) -SLL S0,S3,0x18 -SRA T9,S0,0x18 -BNEZ V0,7F0130E0 -OR S0,T9,R0 -//7F012FA4: 47AD4 press left - decrement list -SLL A0,T9,0x18 -LUI T1,8007 -ADDIU T1,T1,9760 ;T1=80069760: -SRA T0,A0,0x18 -OR A0,T0,R0 -ADDU S2,S4,T1 -JAL 7000C3AC ;ret V0=button mask A1 on player A0's controller -ADDIU A1,R0,0202 ;A1=0202: dpad or c-left -BNEZ V0,7F012FF4 ;branch if either was pressed -SLL A0,S0,0x18 -SRA T2,A0,0x18 -OR A0,T2,R0 ;A0=player# -ADDIU A1,R0,FFFE -JAL 7000C4B4 ;ret V0=control stick state? -OR A2,S7,R0 -SLTI AT,V0,FFFF ;TRUE if holding stick left -BEQ AT,R0,7F01300C ;??? - test increment -SLL A0,S0,0x18 -LW T3,0000 (S2) -BEQ T3,R0,7F01300C ;??? - increment instead -//7F012FF4: 47B24 decrement if not at end -ADDU V0,S6,S4 ;V0=S6+S4: p->sel.handicaps + offset to player's entry -LW V1,0000 (V0) ;V1=cur.handicap -BLEZ V1,7F01308C ;branch if already at 0 -ADDIU T4,V1,FFFF ;T4=cur.handicap-- -BEQ R0,R0,7F01308C -SW T4,0000 (V0) ;T4->cur.handicap: save new setting -//7F01300C: 47B54 press right - increment list -SRA T5,A0,0x18 -OR A0,T5,R0 -JAL 7000C3AC ;ret V0=button mask A1 on player A0's controller -ADDIU A1,R0,0101 ;A1=0101: dpad or c-right -BNEZ V0,7F013048 -SLL A0,S0,0x18 -SRA T6,A0,0x18 -OR A0,T6,R0 -ADDIU A1,R0,FFFE -//7F013030: -JAL 7000C4B4 -OR A2,S7,R0 -BLEZ V0,7F013064 -SLL A0,S0,0x18 -LW T7,0000 (S2) -BEQ T7,R0,7F013064 -//7F013048: 47B78 increment if not at end -ADDU V0,S6,S4 ;V0=S6+S4: p->sel.handicaps + offset to player's entry -LW V1,0000 (V0) ;V1=cur.handicap -SLTI AT,V1,000A ;TRUE if < A (max # entries) -BEQ AT,R0,7F01308C ;branch if over limit -ADDIU T8,V1,0001 ;T8=cur.handicap++ -BEQ R0,R0,7F01308C -SW T8,0000 (V0) ;T8->cur.handicap: save new handicap -//7F013064: 47B94 press A - select entry -SRA T9,A0,0x18 -OR A0,T9,R0 ;A0=player# & 0xFF, effectively -JAL 7000C3AC ;ret V0=button mask A1 on player A0's controller -ORI A1,R0,B000 ;A1=button mask -BEQ V0,R0,7F01308C -ADDIU A1,R0,00C7 ;A1=SE 0C7: menu selection and folder change -SW S7,0000 (S1) -LW A0,0000 (S5) ;A0=p->SE buffer -JAL 70008E08 ;play SE 0C7 -OR A2,R0,R0 ;A2=0: NULL p->data -//7F01308C: 47BBC -SLL A0,S0,0x18 -SRA T0,A0,0x18 -OR A0,T0,R0 -ADDIU A1,R0,FFFE -JAL 7000C4B4 -OR A2,S7,R0 -ADDIU AT,R0,FFFF -BEQ V0,AT,7F0130CC -SLL A0,S0,0x18 -SRA T1,A0,0x18 -OR A0,T1,R0 -ADDIU A1,R0,FFFE -JAL 7000C4B4 -OR A2,S7,R0 -BNEL V0,R0,7F0130DC -SW R0,0000 (S2) -//7F0130CC: -SW S7,0000 (S2) -BEQ R0,R0,7F0130E0 -LW V0,0000 (S1) -//7F0130D8: -SW R0,0000 (S2) -LW V0,0000 (S1) -//7F0130E0: -BEQ V0,R0,7F0130EC -LW T2,0044 (SP) ;T2=sel#players -ADDIU S8,S8,0001 ;S8++ -//7F0130EC: 47C1C loop per player -ADDIU S3,S3,0001 ;S3++ -ADDIU S4,S4,0004 ;S4+=4: next player slot -BNE S3,T2,7F012F5C ;branch if you have more players to go -ADDIU S1,S1,0004 ;S1+=4 -//7F0130FC: 47C2C done checking updates... -LUI S0,8003 -ADDIU S0,S0,A95C ;S0=8002A95C: ??? -JAL 7F00B724 -LW A0,0000 (S0) -LW A0,0000 (S0) -OR A1,R0,R0 ;A1=0 -JAL 7F00B7C0 -ADDIU A2,R0,0001 ;A2=1 -LW A0,0000 (S0) -ADDIU A1,R0,002A -JAL 7F00B7C0 -ADDIU A2,R0,0001 -JAL 7F009B84 -NOP -LW T3,0044 (SP) -ADDIU A0,R0,000E -BNEL S8,T3,7F013150 -LW RA,003C (SP) -JAL 7F01A5D4 -OR A1,R0,R0 -//7F01314C: 47C7C return -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0048 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/7F01317C - menu 10 constructor - handicap menu.txt b/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/7F01317C - menu 10 constructor - handicap menu.txt deleted file mode 100644 index ebfa301..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/7F01317C - menu 10 constructor - handicap menu.txt +++ /dev/null @@ -1,263 +0,0 @@ -7F01317C: 47CAC menu 10 constructor: handicap select -ADDIU SP,SP,FF30 -SW RA,0064 (SP) -SW S1,0044 (SP) -OR S1,A0,R0 -SW S8,0060 (SP) -SW S7,005C (SP) -SW S6,0058 (SP) -SW S5,0054 (SP) -SW S4,0050 (SP) -SW S3,004C (SP) -SW S2,0048 (SP) -SW S0,0040 (SP) -JAL 7F010290 ;V0=#MP players -SDC1 F20,0038 (SP) -//7F0131B4: -SW V0,00CC (SP) -OR A0,S1,R0 -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 -JAL 7F00D5E8 -OR A0,V0,R0 -JAL 7F0ACD98 ;??? - microcode constructor -OR A0,V0,R0 -//7F0131E4: -ADDIU T6,R0,00AB -ADDIU T7,R0,0090 -SW T7,0014 (SP) -SW T6,0010 (SP) -OR A0,V0,R0 -ADDIU A1,R0,0026 -ADDIU A2,R0,00A9 -JAL 7F0AD014 -ADDIU A3,R0,0184 -//7F013208: -LW T0,00CC (SP) -OR S1,V0,R0 -OR A0,S1,R0 -SLTI AT,T0,0003 -BNEZ AT,7F013244 -ADDIU A1,R0,00D4 -ADDIU T8,R0,0136 -ADDIU T9,R0,0080 -SW T9,0014 (SP) -SW T8,0010 (SP) -ADDIU A2,R0,001E -JAL 7F0AD014 -ADDIU A3,R0,00D6 -//7F01323C: -OR S1,V0,R0 -LW T0,00CC (SP) -BLEZ T0,7F013538 -OR S6,R0,R0 -//7F01324C: -LUI T1,8007 -LUI T2,8007 -LUI AT,4080 -ADDIU T2,T2,97A8 ;T2=800697A8: p->selected handicaps for each player -ADDIU T1,T1,9740 ;T1=80069740: ??? -LUI S8,8004 -LUI S7,8004 -MTC1 AT,F20 -ADDIU S7,S7,0EB8 -ADDIU S8,S8,0EB4 -SW T1,0074 (SP) -SW T2,0070 (SP) ;T2->SP+70: save p->selected handicap -LW T0,00CC (SP) -ADDIU AT,R0,0002 -ADDIU S3,R0,0026 -BNE T0,AT,7F0132AC -ANDI T3,S6,0001 -BLEZ S6,7F0132A0 -ADDIU S5,R0,015E -BEQ R0,R0,7F0132DC -ADDIU S2,R0,00AA -//7F0132A0: -OR V1,R0,R0 -BEQ R0,R0,7F0132DC -ADDIU S2,V1,001E -//7F0132AC: -SLTI AT,S6,0002 -BNEZ AT,7F0132C0 -ADDIU S5,R0,00AF -BEQ R0,R0,7F0132C4 -ADDIU V1,R0,008C -OR V1,R0,R0 -BEQ T3,R0,7F0132D4 -ADDIU S2,V1,001E -BEQ R0,R0,7F0132D8 -ADDIU V1,R0,00AF -OR V1,R0,R0 -ADDIU S3,V1,0026 -ADDIU T4,S3,0006 -MTC1 T4,F4 -ADDIU T1,S2,0005 -MTC1 T1,F16 -CVT.S.W F6,F4 -LUI AT,ED00 -ADDIU S1,V0,0008 -CVT.S.W F18,F16 -MUL.SF8,F6,F20 -TRUNC.W.S F10,F8 -MUL.SF4,F18,F20 -MFC1 T6,F10 -NOP -ANDI T7,T6,0FFF -TRUNC.W.S F6,F4 -SLL T8,T7,0xC -ADDU T6,S3,S5 -ADDIU T7,T6,FFFA -MFC1 T3,F6 -MTC1 T7,F8 -OR T9,T8,AT -ANDI T4,T3,0FFF -OR T5,T9,T4 -ADDIU T9,S2,0087 -CVT.S.W F10,F8 -MTC1 T9,F4 -SW T5,0000 (V0) -CVT.S.W F6,F4 -MUL.S F16,F10,F20 -NOP -MUL.S F8,F6,F20 -TRUNC.W.S F18,F16 -TRUNC.W.S F10,F8 -MFC1 T1,F18 -MFC1 T5,F10 -ANDI T2,T1,0FFF -SLL T3,T2,0xC -ANDI T6,T5,0FFF -OR T7,T3,T6 -SW T7,0004 (V0) -LW T8,0074 (SP) -LW T1,0000 (T8) -BNEZ T1,7F013444 -NOP -JAL 7F0C1DD8 ;ret V0=p->text ID A0 -ORI A0,R0,9C56 ;A0=9C56: "Select Handicap:" -LW T2,0000 (S8) -OR S4,V0,R0 -ADDIU A0,SP,00A4 -ADDIU A1,SP,00A0 -OR A2,V0,R0 -LW A3,0000 (S7) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T2,0010 (SP) -LW T7,00A4 (SP) -LW T5,00A0 (SP) -SRA T9,S5,0x1 -SRA T8,T7,0x1 -ADDU T4,T9,S3 -SUBU T1,S2,T8 -SRA T3,T5,0x1 -SUBU T6,T4,T3 -ADDIU T2,T1,0037 -SW T6,009C (SP) -SW T2,0098 (SP) -JAL 7F0ACD98 -OR A0,S1,R0 -JAL 7000441C -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C -OR S0,T9,R0 -LW T5,0000 (S7) -LW T4,0000 (S8) -ADDIU T3,R0,00FF -SW T3,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,009C -ADDIU A2,SP,0098 -OR A3,S4,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0010 (SP) -JAL 7F009760 -SW T4,0014 (SP) -//7F013440: 47F78 load current handicap settings -OR S1,V0,R0 -LW T6,0070 (SP) ;T6=SP+70: p->selected handicap -LUI A0,8003 -SRA T1,S5,0x1 -LW T7,0000 (T6) ;T7=800697A8+offset: player's handicap -ADDU S0,T1,S3 -ADDIU S4,S2,0046 -SLL T8,T7,0x3 ;T8=handicap->offset: offset to option in list -ADDU A0,A0,T8 ;A0=8002B498+offset: handicap menu options -JAL 7F0C1DD8 ;ret V0=p->text ID A0 -LHU A0,B498 (A0) ;A0=text ID -LW T2,0000 (S8) -OR S2,V0,R0 -ADDIU A0,SP,0090 -ADDIU A1,SP,008C -OR A2,V0,R0 -LW A3,0000 (S7) -SW R0,0014 (SP) -JAL 7F0AE98C -SW T2,0010 (SP) -LW T3,0090 (SP) -LW T9,008C (SP) -OR A0,S1,R0 -SRA T6,T3,0x1 -SUBU T7,S4,T6 -SRA T5,T9,0x1 -SUBU T4,S0,T5 -ADDIU T8,T7,000F -SW T4,0088 (SP) -JAL 7F0ACD98 -SW T8,0084 (SP) -JAL 7000441C -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C -OR S0,T1,R0 -LW T2,0000 (S7) -LW T9,0000 (S8) -ADDIU T5,R0,00FF -SW T5,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,0088 -ADDIU A2,SP,0084 -OR A3,S2,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0010 (SP) -JAL 7F009760 -SW T9,0014 (SP) -LW T4,0074 (SP) -LW T6,0070 (SP) ;T6=SP+70: p->player's handicap value -LW T8,00CC (SP) -ADDIU S6,S6,0001 -ADDIU T3,T4,0004 -ADDIU T7,T6,0004 ;T7=T6+4: next player's slot -SW T7,0070 (SP) ;T7->SP+70: save new p->selected handicap -SW T3,0074 (SP) -BNE S6,T8,7F01327C -OR S1,V0,R0 -JAL 7F0ACEF0 -OR A0,S1,R0 -LW RA,0064 (SP) -LDC1 F20,0038 (SP) -LW S0,0040 (SP) -LW S1,0044 (SP) -LW S2,0048 (SP) -LW S3,004C (SP) -LW S4,0050 (SP) -LW S5,0054 (SP) -LW S6,0058 (SP) -LW S7,005C (SP) -LW S8,0060 (SP) -JR RA -ADDIU SP,SP,00D0 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/Handicap.txt b/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/Handicap.txt deleted file mode 100644 index a28c94a..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 10 - handicap/Handicap.txt +++ /dev/null @@ -1,59 +0,0 @@ -A708-A760 Handicap menu -0x0 2 txtID# -0x2 2 RESERVED -0x4 4 float multiplier - -43480000 200. LtK - -41200000 10.000000 -10 -4036CA56 2.856100 -4 -400C9BA5 2.197000 -3 -3FD851EA 1.690000 -2 -3FA66666 1.300000 -1 -3F800000 1.000000 +0 normal -3F44EC4F 0.769231 +1 -3F177AB3 0.591716 +2 -3EE90B8A 0.455166 +3 -3EB343F4 0.350128 +4 -3DCCCCCD 0.100000 +10 - - - -//7F0BDCC8: F27F8 multi perspective -LUI S1,8008 -ADDIU S1,S1,9EF0 -JAL 7F014758 RETURNS V0=scenario - LUI V0,8003 - JR RA - LW V0,B540 (V0) V0=8002B540: -NOP -BNE V0,S3,7F0BDCE8 branch if not "License to Kill" -NOP -BEQ R0,R0,7F0BDCF4 -SWC1 F20,005C (S1) 43480000->handicap (LtK) -JAL 7F0103AC 0x44EDC returns handicap for player; only used here - SLL T6,A0,0x2 - LUI T7,8007 - ADDU T7,T7,T6 - LW T7,97A8 (T7) T7=800697A8+offset: player's handicap setting - LUI AT,8003 - SLL T8,T7,0x3 - ADDU AT,AT,T8 - JR RA - LWC1 F0,B49C (AT) F0=setting's value -OR A0,S0,R0 A0=player# -SWC1 F0,005C (S1) save handicap - -+-+ - -Setting is set or something in: -f()@ 7F010608 0x45138 (0x45178) -f()@ 7F012EC4 0x479F4 (0x47A80) -f()@ 7F01317C 0x47CAC (0x47D88) -f()@ 7F0C03A8 0xF4ED8 (0xF4F6C) intro movie set routine - called @ 7F0C0640 0xF5170 (0xF51E8 & 0xF5290) -f()@ 7F0C04F4 0xF5024 (0xF50C0) intro movie set routine - called @ 7F0C0640 0xF5170 (0xF5298) - called @ 7F0C08FC 0xF542C (0xF5464) - -0x74BC JAL 7F0C08FC \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 11 - control style/7F013608 - menu 11 interface - control style.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 11 - control style/7F013608 - menu 11 interface - control style.TXT deleted file mode 100644 index 7a8b651..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 11 - control style/7F013608 - menu 11 interface - control style.TXT +++ /dev/null @@ -1,232 +0,0 @@ -7F013608: menu 11 interface: control style -ADDIU SP,SP,FFB0 -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S6,0030 (SP) -SW S5,002C (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 7F010290 ;V0=#players selected -SW S0,0018 (SP) -//7F013638: -LUI AT,4270 -MTC1 AT,F12 ;F12= [42700000] -OR S6,V0,R0 ;S6=#players -JAL 70004544 -SW R0,0044 (SP) ; 0->SP+44: -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A98 (AT) ;F12=80051A98: x size -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000] -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A9C (AT) ;F14=80051A9C: z size -JAL 70004534 -OR A0,R0,R0 ;A0=0 -//7F013674: -BLEZ S6,7F013900 ;branch if invalid # players -OR S1,R0,R0 ;S1=0: cur.player -LUI S2,8007 -LUI S3,8007 -ADDIU S3,S3,97B8 ;S3=800697B8 -ADDIU S2,S2,9740 ;S2=80069740 -OR S5,R0,R0 ;S5=0 -ADDIU S8,R0,0001 ;S8=1 -ADDIU S7,R0,0002 ;S7=2 -LW T6,0000 (S2) ;T6=80069740: TRUE if selection made -SLL A0,S1,0x18 -SRA T7,A0,0x18 -BEQ T6,R0,7F0136D0 -OR A0,T7,R0 ;A0=player # - 1 byte -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=4000: B button -BEQ V0,R0,7F0136D0 ;branch if nothing pressed -LUI A0,8006 -//7F0136BC: B button pressed -SW R0,0000 (S2) ; 0->selection flag -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=SE 0C7 -JAL 70008E08 ;play sound effect -OR A2,R0,R0 ;A2=p->NULL -//7F0136D0: -LW V0,0000 (S2) ;V0=selection flag -SLL S0,S1,0x18 -SRA T8,S0,0x18 -BNEZ V0,7F0138E0 ;branch if selection made -OR S0,T8,R0 ;S0=player# -//7F0136E4: selection allowed -SLL A0,T8,0x18 -LUI T0,8007 -ADDIU T0,T0,9760 ;T0=80069760 -SRA T9,A0,0x18 -OR A0,T9,R0 ;A0=player# -ADDU S4,S5,T0 ;S4=S5+80069760: -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0202 ;A1=0202: +left or cleft -BNEZ V0,7F013734 ;branch if either pressed -SLL A0,S0,0x18 -SRA T1,A0,0x18 -OR A0,T1,R0 ;A0=player# -ADDIU A1,R0,FFFE ;A1=-2: left -JAL 7000C4B4 ;V0=control stick state -OR A2,S8,R0 ;A2=S8: [1] -SLTI AT,V0,FFFF ;TRUE if left on control stick -BEQ AT,R0,7F0137A8 ;branch if not pressing left -SLL A0,S0,0x18 -LW T2,0000 (S4) ;T2=80069760+playeroffet: cur.setting -BEQ T2,R0,7F0137A8 ;branch if 0: no further left -//7F013734: left pressed -ADDU V1,S3,S5 ;V1=800697B8+playeroffset: control style -LW V0,0000 (V1) ;V0=control style selected -BLEZL V0,7F013890 ;don't go left if 0 or less -SLL A0,S0,0x18 -BNE S6,S7,7F01376C ;branch if not 2 players -ADDIU T4,V0,FFFF ;T4=sel.-1 -BNEL S1,S8,7F013770 ;branch if cur.player not [1] -SW T4,0000 (V1) -LW T3,0000 (S3) ;T3=800697B8: control style -SLTI AT,T3,0004 -BNEZ AT,7F01376C -SLTI AT,V0,0005 -BNEZ AT,7F013770 -NOP -//7F01376C: -SW T4,0000 (V1) -BNEL S6,S7,7F013890 ;branch if not 2 players -SLL A0,S0,0x18 -BNEL S1,R0,7F013890 -SLL A0,S0,0x18 -LW T5,0000 (S3) -SLTI AT,T5,0004 -BEQL AT,R0,7F013890 -SLL A0,S0,0x18 -LW T6,0004 (S3) -SLTI AT,T6,0004 -BNEL AT,R0,7F013890 -SLL A0,S0,0x18 -BEQ R0,R0,7F01388C -SW R0,0004 (S3) -//7F0137A8: -SRA T7,A0,0x18 -OR A0,T7,R0 -JAL 7000C3AC -ADDIU A1,R0,0101 -BNEZ V0,7F0137E8 -SLL A0,S0,0x18 -SRA T8,A0,0x18 -OR A0,T8,R0 -ADDIU A1,R0,FFFE -JAL 7000C4B4 -OR A2,S8,R0 -BLEZ V0,7F013860 -SLL A0,S0,0x18 -LW T9,0000 (S4) -BEQL T9,R0,7F013864 -SRA T5,A0,0x18 -BNE S6,S7,7F0137F8 -ADDU V1,S3,S5 -BEQL S1,R0,7F01380C -LW V0,0000 (V1) -LW V0,0000 (V1) -SLTI AT,V0,0004 -BNEL AT,R0,7F013850 -SLTI AT,V0,0003 -LW V0,0000 (V1) -SLTI AT,V0,0007 -BEQ AT,R0,7F01388C -ADDIU T0,V0,0001 -BNEZ S1,7F01388C -SW T0,0000 (V1) -LW T1,0000 (S3) -ADDIU AT,R0,0004 -BNEL T1,AT,7F013890 -SLL A0,S0,0x18 -LW T2,0004 (S3) -ADDIU T3,R0,0004 -SLTI AT,T2,0004 -BEQL AT,R0,7F013890 -SLL A0,S0,0x18 -BEQ R0,R0,7F01388C -SW T3,0004 (S3) -SLTI AT,V0,0003 -BEQ AT,R0,7F01388C -ADDIU T4,V0,0001 -BEQ R0,R0,7F01388C -SW T4,0000 (V1) -SRA T5,A0,0x18 -OR A0,T5,R0 -JAL 7000C3AC -ORI A1,R0,B000 -BEQ V0,R0,7F01388C -LUI A0,8006 -SW S8,0000 (S2) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -SLL A0,S0,0x18 -SRA T6,A0,0x18 -OR A0,T6,R0 -ADDIU A1,R0,FFFE -JAL 7000C4B4 -OR A2,S8,R0 -ADDIU AT,R0,FFFF -BEQ V0,AT,7F0138CC -SLL A0,S0,0x18 -SRA T7,A0,0x18 -OR A0,T7,R0 -ADDIU A1,R0,FFFE -JAL 7000C4B4 -OR A2,S8,R0 -BNEL V0,R0,7F0138DC -SW R0,0000 (S4) -SW S8,0000 (S4) -BEQ R0,R0,7F0138E0 -LW V0,0000 (S2) -SW R0,0000 (S4) -LW V0,0000 (S2) -BEQ V0,R0,7F0138F4 -ADDIU S1,S1,0001 -LW T8,0044 (SP) -ADDIU T9,T8,0001 -SW T9,0044 (SP) -ADDIU S5,S5,0004 -BNE S1,S6,7F013698 -ADDIU S2,S2,0004 -LUI S0,8003 -ADDIU S0,S0,A95C -JAL 7F00B724 -LW A0,0000 (S0) -LW A0,0000 (S0) -OR A1,R0,R0 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -LW A0,0000 (S0) -ADDIU A1,R0,002A -JAL 7F00B7C0 -ADDIU A2,R0,0001 -JAL 7F009B84 -NOP -LW T0,0044 (SP) -ADDIU A0,R0,000E -BNEL T0,S6,7F013954 -LW RA,003C (SP) -JAL 7F01A5D4 -OR A1,R0,R0 -LW RA,003C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -LW S5,002C (SP) -LW S6,0030 (SP) -LW S7,0034 (SP) -LW S8,0038 (SP) -JR RA -ADDIU SP,SP,0050 -ADDIU SP,SP,FF30 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 11 - control style/7F013980 - menu 11 constructor - control style.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 11 - control style/7F013980 - menu 11 constructor - control style.TXT deleted file mode 100644 index 0cfee33..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 11 - control style/7F013980 - menu 11 constructor - control style.TXT +++ /dev/null @@ -1,268 +0,0 @@ -7F013980: 484B0 menu 11 constructor: control style - accepts: A0=display list target -ADDIU SP,SP,FF30 -SW RA,0064 (SP) -SW S1,0044 (SP) -OR S1,A0,R0 ;S1=A0: DL -SW S8,0060 (SP) -SW S7,005C (SP) -SW S6,0058 (SP) -SW S5,0054 (SP) -SW S4,0050 (SP) -SW S3,004C (SP) -SW S2,0048 (SP) -SW S0,0040 (SP) -JAL 7F010290 ;V0=players selected -SDC1 F20,0038 (SP) -//7F0139B8: -SW V0,00CC (SP) ;SP+CC=V0: #players -OR A0,S1,R0 ;A0=DL -OR A1,R0,R0 ;A1=0 -OR A2,R0,R0 ;A2=0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 ;A3=0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 ;A0=DL -JAL 7F00D5E8 -OR A0,V0,R0 ;A0=DL -JAL 7F0ACD98 -OR A0,V0,R0 ;A0=DL -//7F0139E8: horizontal division -ADDIU T6,R0,00AB -ADDIU T7,R0,0090 -SW T7,0014 (SP) ;SP+14=T7: 00000090: RGBA fill -SW T6,0010 (SP) ;SP+10=0xAB: lry -OR A0,V0,R0 ;A0=DL -ADDIU A1,R0,0026 ;A1=26: ulx -ADDIU A2,R0,00A9 ;A2=A9: uly -JAL 7F0AD014 ;draws coloured rectangle -ADDIU A3,R0,0184 ;A3=184: lrx -//7F013A0C: draw vertical division if required -LW T0,00CC (SP) ;T0=#players -OR S1,V0,R0 ;S1=DL -OR A0,S1,R0 ;A0=DL -SLTI AT,T0,0003 -BNEZ AT,7F013A48 ;branch if not 3-4 player -ADDIU A1,R0,00D4 ;A1=D4: ulx -ADDIU T8,R0,0136 -ADDIU T9,R0,0080 -SW T9,0014 (SP) ;SP+14=00000080: RGBA fill -SW T8,0010 (SP) ;SP+10=136: lry -ADDIU A2,R0,001E ;A2=1E: uly -JAL 7F0AD014 ;draws coloured rectangle -ADDIU A3,R0,00D6 ;A3=D6: lrx -OR S1,V0,R0 ;S1=DL -LW T0,00CC (SP) ;T0=#players -//7F013A48: -BLEZ T0,7F013D3C ;branch if invalid # players -OR S6,R0,R0 ;S6=0 -LUI T1,8007 -LUI T2,8007 -LUI AT,4080 -ADDIU T2,T2,97B8 ;T2=800697B8 -ADDIU T1,T1,9740 ;T1=80069740 -LUI S8,8004 -LUI S7,8004 -MTC1 AT,F20 ;F20= [40800000] -ADDIU S7,S7,0EB8 ;S7=80040EB8 -ADDIU S8,S8,0EB4 ;S8=80040EB4 -SW T1,0074 (SP) ;T1->SP+74: TRUE if selection made -SW T2,0070 (SP) ;T2->SP+70: selected control style -LW T0,00CC (SP) ;T0=#players -ADDIU AT,R0,0002 -ADDIU S3,R0,0026 ;S3=0x26 -BNE T0,AT,7F013AB0 ;branch if not 2 player -ANDI T3,S6,0001 -BLEZ S6,7F013AA4 -ADDIU S5,R0,015E -BEQ R0,R0,7F013AE0 -ADDIU S2,R0,00AA -//7F013AA4: -OR V1,R0,R0 -BEQ R0,R0,7F013AE0 -ADDIU S2,V1,001E -//7F013AB0: -SLTI AT,S6,0002 -BNEZ AT,7F013AC4 -ADDIU S5,R0,00AF -BEQ R0,R0,7F013AC8 -ADDIU V1,R0,008C -//7F013AC4: -OR V1,R0,R0 -BEQ T3,R0,7F013AD8 -ADDIU S2,V1,001E -BEQ R0,R0,7F013ADC -ADDIU V1,R0,00AF -//7F013AD8: -OR V1,R0,R0 -ADDIU S3,V1,0026 -//7F013AE0: set scissor -ADDIU T4,S3,0006 ;T4=V1+2C: account for left margin -MTC1 T4,F4 -ADDIU T1,S2,0005 ;T1=S2+5: account for upper edge -MTC1 T1,F16 -CVT.S.W F6,F4 ;F6=(float) horizontal position -LUI AT,ED00 -ADDIU S1,V0,0008 -CVT.S.W F18,F16 ;F18=(float) vertical position -MUL.S F8,F6,F20 ;F8=horz.pos * F20: -TRUNC.W.S F10,F8 -MUL.S F4,F18,F20 ;F4=vert.pos.* F20 -MFC1 T6,F10 ;T6=F10: upper left x position -NOP -ANDI T7,T6,0FFF -TRUNC.W.S F6,F4 -SLL T8,T7,0xC -ADDU T6,S3,S5 -ADDIU T7,T6,FFFA -MFC1 T3,F6 ;T3=F6: upper left y position -MTC1 T7,F8 -OR T9,T8,AT ;T9=rdp_setscissor (U) | ulx -ANDI T4,T3,0FFF -OR T5,T9,T4 -ADDIU T9,S2,0087 -CVT.S.W F10,F8 ;F10= 0xCF -MTC1 T9,F4 -SW T5,0000 (V0) ;T5->DL+0: rdp_setscissor (U) -CVT.S.W F6,F4 ;F6= 0x87 -MUL.S F16,F10,F20 -NOP -MUL.S F8,F6,F20 -TRUNC.W.S F18,F16 -TRUNC.W.S F10,F8 -MFC1 T1,F18 -MFC1 T5,F10 -ANDI T2,T1,0FFF -SLL T3,T2,0xC -ANDI T6,T5,0FFF -OR T7,T3,T6 -SW T7,0004 (V0) ;T7->DL+4: rdp_setscissor (L) -//7F013B80: -LW T8,0074 (SP) ;T8=p->select table -LW T1,0000 (T8) ;T1=TRUE if selection made -BNEZ T1,7F013C48 ;branch if selected -NOP -//7F013B90: -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,9D1D ;A0=9D1D: "Select Control Style*" -LW T2,0000 (S8) ;T2=80040EB4: p->1st font table -OR S4,V0,R0 ;S4=V0: p->text -ADDIU A0,SP,00A4 ;A0=SP+A4: p->width? -ADDIU A1,SP,00A0 ;A1=SP+A0: p->height? -OR A2,V0,R0 ;A2=p->text -LW A3,0000 (S7) ;A3=80040EB8: p->2nd font table -SW R0,0014 (SP) ; 0->SP+14: -JAL 7F0AE98C ;computes width and height of string -SW T2,0010 (SP) ;T2->SP+10: p->1st font table -//7F013BBC: -LW T7,00A4 (SP) ;T7=p->width? -LW T5,00A0 (SP) ;T5=p->height? -SRA T9,S5,0x1 ;T9=port width/2 (center of port) -SRA T8,T7,0x1 ;T8=width/2 (center of string) -ADDU T4,T9,S3 -SUBU T1,S2,T8 ;T1=window width - centerpoint -SRA T3,T5,0x1 -SUBU T6,T4,T3 -ADDIU T2,T1,0037 ;T2=T1+37: text display offset -SW T6,009C (SP) ;SP+9C=T6: x position -SW T2,0098 (SP) ;SP+98=T2: y position -JAL 7F0ACD98 -OR A0,S1,R0 -JAL 7000441C -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C -OR S0,T9,R0 -LW T5,0000 (S7) ;T5=80040EB8: p->2nd font table -LW T4,0000 (S8) ;T4=80040EB4: p->1st font table -ADDIU T3,R0,00FF -SW T3,0018 (SP) ;SP+18=000000FF: "black" -OR A0,S1,R0 ;A0=S1: DL -ADDIU A1,SP,009C ;A1=SP+9C: x position -ADDIU A2,SP,0098 ;A2=SP+98: y position -OR A3,S4,R0 ;A3=p->text -SW S0,001C (SP) ;SP+1C=S0: clip width -SW V0,0020 (SP) ;SP+20=V0: clip height -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: x offset -SW T5,0010 (SP) ;SP+10=T5: p->2nd font table -JAL 7F009760 ;writes text to screen at absolute coordinates -SW T4,0014 (SP) ;SP+14=T4: p->1st font table -OR S1,V0,R0 ;S1=V0: DL -LW T6,0070 (SP) ;T6=SP+70: p->selected control style -LUI A0,8003 -SRA T1,S5,0x1 ;port width/2 -LW T7,0000 (T6) ;T7=selected control style -ADDU S0,T1,S3 -ADDIU S4,S2,0046 -SLL T8,T7,0x2 ;control style->offset -ADDU A0,A0,T8 -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,B4F0 (A0) ;A0=8002B4F0+offset: text label -LW T2,0000 (S8) -OR S2,V0,R0 -ADDIU A0,SP,0090 -ADDIU A1,SP,008C -OR A2,V0,R0 ;A2=V0: p->text -LW A3,0000 (S7) -SW R0,0014 (SP) -JAL 7F0AE98C ;computes width and height of string A2 for cur. font set -SW T2,0010 (SP) -LW T3,0090 (SP) -LW T9,008C (SP) -OR A0,S1,R0 -SRA T6,T3,0x1 -SUBU T7,S4,T6 -SRA T5,T9,0x1 -SUBU T4,S0,T5 -ADDIU T8,T7,000F -SW T4,0088 (SP) -JAL 7F0ACD98 -SW T8,0084 (SP) -JAL 7000441C -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C -OR S0,T1,R0 -LW T2,0000 (S7) -LW T9,0000 (S8) -ADDIU T5,R0,00FF ;T5=000000FF: "black" -SW T5,0018 (SP) -OR A0,S1,R0 ;A0=S1: DL -ADDIU A1,SP,0088 ;A1=SP+88: x position -ADDIU A2,SP,0084 ;A2=SP+84: y position -OR A3,S2,R0 ;A3=S2: p->text -SW S0,001C (SP) ;SP+1C=S0: clip width -SW V0,0020 (SP) ;SP+20=V0: clip height -SW R0,0024 (SP) ;SP+24=0: y offset -SW R0,0028 (SP) ;SP+28=0: y offset -SW T2,0010 (SP) ;SP+10=T2: p->2nd font table -JAL 7F009760 ;writes text -SW T9,0014 (SP) ;SP+14=T9: p->1st font table -LW T4,0074 (SP) -LW T6,0070 (SP) -LW T8,00CC (SP) -ADDIU S6,S6,0001 -ADDIU T3,T4,0004 -ADDIU T7,T6,0004 -SW T7,0070 (SP) -SW T3,0074 (SP) -BNE S6,T8,7F013A80 -OR S1,V0,R0 -JAL 7F0ACEF0 -OR A0,S1,R0 -LW RA,0064 (SP) -LDC1 F20,0038 (SP) -LW S0,0040 (SP) -LW S1,0044 (SP) -LW S2,0048 (SP) -LW S3,004C (SP) -LW S4,0050 (SP) -LW S5,0054 (SP) -LW S6,0058 (SP) -LW S7,005C (SP) -LW S8,0060 (SP) -JR RA -ADDIU SP,SP,00D0 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 12 - multiplayer stage select/7F013DD4 - menu 12 interface - multiplayer stage select.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 12 - multiplayer stage select/7F013DD4 - menu 12 interface - multiplayer stage select.TXT deleted file mode 100644 index 120703b..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 12 - multiplayer stage select/7F013DD4 - menu 12 interface - multiplayer stage select.TXT +++ /dev/null @@ -1,228 +0,0 @@ -7F013DD4: menu 12 interface: MP stage select -ADDIU SP,SP,FFE0 -LUI AT,4270 -SW RA,001C (SP) -MTC1 AT,F12 ;F12=60.0 [42700000] -JAL 70004544 -SW S0,0018 (SP) -//7F013DEC: -LUI AT,8005 -JAL 70004590 -LWC1 F12,1AA0 (AT) ;F12=80051AA0: -//7F013DF8: -LUI AT,42C8 -MTC1 AT,F12 ;F12=100.0 [42C80000] -LUI AT,8005 -JAL 70004650 -LWC1 F14,1AA4 (AT) ;F14=80051AA4: -JAL 70004534 ;A0->p@800232A8+24 -OR A0,R0,R0 ;A0=0 -//7F013E14: -OR A0,R0,R0 ;A0=0: -JAL 7000C30C -ORI A1,R0,B000 ;A1=B000: -BNEZ V0,7F013F18 ;branch if flags not set -LUI AT,8003 -SW R0,A8E4 (AT) ;0->8002A8E4: NO highlight folder tab 3 -LUI AT,8003 -SW R0,A8E0 (AT) ;0->8002A8E0: NO highlight folder tab 2 -LUI AT,8003 -//7F013E38: detect if over tab 3 -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -SW R0,A8DC (AT) ;0->8002A8DC: NO highlight folder tab 1 -BEQ V0,R0,7F013E58 ;branch otherwise -LUI AT,8003 -ADDIU T6,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F013F18 -SW T6,A8E4 (AT) ;1->8002A8E4: highlight tab 3 -//7F013E58: detect vertical cursor position -LWC1 F4,A90C (AT) ;F4=8002A90C: vert.pos. -LUI S0,8007 -ADDIU S0,S0,977C ;S0=8006977C: highlighted stage -TRUNC.W.S F6,F4 -MFC1 V0,F6 ;V0=vert.pos -NOP -//7F013E70: third row -SLTI AT,V0,00F0 ;TRUE if pos < 0xF0: third row -BNEL AT,R0,7F013E88 ;branch if not 3rd row -SLTI AT,V0,00AA -BEQ R0,R0,7F013E98 -ADDIU V1,R0,0002 ;V1=2: 3rd row -//7F013E84: second+first row -SLTI AT,V0,00AA ;AT=TRUE if pos < 0xAA: second row -BNEZ AT,7F013E98 ;branch if not 2nd row -OR V1,R0,R0 ;V1=0: 1st row -BEQ R0,R0,7F013E98 -ADDIU V1,R0,0001 ;V1=1: 2nd row -//7F013E98: horizontal cursor position -LUI AT,8003 -LWC1 F8,A908 (AT) ;F8=8002A908: horz.pos -SLL T9,V1,0x2 ;T9=row * 4: #entries per row -TRUNC.W.S F10,F8 -MFC1 V0,F10 ;V0=horz.pos -NOP -//7F013EB0: 4th column -SLTI AT,V0,0124 ;TRUE if pos < 124: 4th column -BNEL AT,R0,7F013EC8 ;branch if not 4th column -SLTI AT,V0,00CF -BEQ R0,R0,7F013EEC -ADDIU V0,R0,0003 ;V0=3: 4th column -//7F013EC4: 3rd column -SLTI AT,V0,00CF ;TRUE if pos < CF: 3rd column -BNEL AT,R0,7F013EDC ;branch if not 3rd column -SLTI AT,V0,007A -BEQ R0,R0,7F013EEC -ADDIU V0,R0,0002 ;V0=2: 3rd column -//7F013ED8: -SLTI AT,V0,007A ;TRUE if pos < 7A: 2nd column -BNEZ AT,7F013EEC ;branch if not 2nd column -OR V0,R0,R0 ;V0=0: 1st column -BEQ R0,R0,7F013EEC -ADDIU V0,R0,0001 ;V0=1: 2nd column -//7F013EEC: determine if highlighted stage unlocked -ADDU A0,T9,V0 ;A0=T9+V0: (row*4)+column -JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -SW A0,0000 (S0) ;A0->S0: MP stage# -BNEZ V0,7F013F18 ;branch if available -NOP -//7F013F00: if not available, try previous entry -LW T1,0000 (S0) -ADDIU A0,T1,FFFF ;A0-- -JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -SW A0,0000 (S0) ;A1-- -> S0: MP stage# -BEQL V0,R0,7F013F04 ;branch until a hit -LW T1,0000 (S0) -//7F013F18: select option -LUI S0,8007 -ADDIU S0,S0,977C ;S0=8006977C: highlighted stage -OR A0,R0,R0 ;A0=0 -JAL 7000C3AC ;V0=TRUE if A, Z, START pressed -ORI A1,R0,B000 ;A1=B000: -BEQ V0,R0,7F013F84 ;branch if none set -ADDIU V1,R0,0001 ;V1=1 -//7F013F34: tab 3 selected sets previous -LUI T3,8003 -LW T3,A8E4 (T3) ;T3=8002A8E4: folder tab 3 highlight -LUI A0,8006 -ADDIU A1,R0,00C7 ;A1=SE 0C7 -BEQ T3,R0,7F013F58 ;branch if not over tab 3 -OR A2,R0,R0 ;A2=0: NULL data pointer -LUI AT,8003 -BEQ R0,R0,7F013F74 -SW V1,A8D8 (AT) ;1->8002A8D8: tab 3 selected -//7F013F58: stage selected sets tab 2 -LW V0,0000 (S0) ;V0=highlighted stage -LUI AT,8003 -BLTZ V0,7F013F74 ;branch if invalid -NOP -SW V1,A8D4 (AT) ;1->8002A8D4: tab 2 selected -LUI AT,8003 -SW V0,B534 (AT) ;8002B534=highlighted stage -//7F013F74: -JAL 70008E08 ;play sound A1 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -BEQ R0,R0,7F013FB4 -NOP -//7F013F84: B button pressed - back -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=4000: B button -BEQ V0,R0,7F013FB4 ;branch if B button isn't pressed -ADDIU V1,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW V1,A8D8 (AT) ;1->8002A8D8: tab 3 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=SE 0C7 -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=p->NULL data -//7F013FB4: toggle stuff on -LUI S0,8003 -ADDIU S0,S0,A95C ;S0=8002A95C: p->obj.instance -JAL 7F00B724 -LW A0,0000 (S0) ;A0=obj.instance -LW A0,0000 (S0) ;A0=obj.instance -OR A1,R0,R0 ;A1=item 0 -JAL 7F00B7C0 ;set item 0 in A0 visible -ADDIU A2,R0,0001 ;A2=visible -LW A0,0000 (S0) ;A0=obj.instance -ADDIU A1,R0,002A ;A1=item 2A -JAL 7F00B7C0 ;set item 0 in A0 visible -ADDIU A2,R0,0001 ;A2=visible -LW A0,0000 (S0) ;A0=obj.instance -ADDIU A1,R0,0003 ;A1=item 3 -JAL 7F00B7C0 ;set item 0 in A0 visible -ADDIU A2,R0,0001 ;A2=visible -JAL 7F009B84 -NOP -//7F013FFC: tab 2 selected - stage selected -LUI T4,8003 -LW T4,A8D4 (T4) ;T4=8002A8D4: tab 2 selected -ADDIU A0,R0,000E ;A0=E -LUI T5,8003 -BEQ T4,R0,7F014024 ;branch if not selected -NOP -JAL 7F01A5D4 ;set MP options (menu E) as current -OR A1,R0,R0 ;A1=0 -BEQ R0,R0,7F014040 -LW RA,001C (SP) -//7F014024: tab 3 selected - previous -LW T5,A8D8 (T5) ;T5=8002A8D8: tab 3 selected -ADDIU A0,R0,000E ;A0=E -BEQL T5,R0,7F014040 ;branch if not selected -LW RA,001C (SP) -JAL 7F01A5D4 ;set MP options (menu E) as current -OR A1,R0,R0 ;A1=0 -LW RA,001C (SP) -//7F014040: return -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - - -7000C30C: -LUI V1,8002 -LW V1,68C4 (V1) ;V1=800268C4: -SW A0,0000 (SP) -SW A1,0004 (SP) -LW T9,01F8 (V1) ;T9=V1+1F8: -SLL T6,A0,0x18 -SRA T7,T6,0x18 -ANDI T8,A1,FFFF -OR A1,T8,R0 ;A1&=FFFF -BGEZ T9,7000C370 ;branch if not -1 -OR A0,T7,R0 ;A0=A0 & 0xFF -//7000C338: -LUI T0,8002 -LBU T0,68D0 (T0) ;T0=800268D0: -LUI T4,8002 -ADDIU T4,T4,6950 ;T4=80026950: -SRAV T1,T0,T7 ;T1=T0 >> A0 -ANDI T2,T1,0001 ;T2=TRUE if bit A0 toggled -BNEZ T2,7000C370 ;branch if bit set -SLL T3,T7,0x2 ;T3=A0*4 -//7000C358: return false -ADDU V1,T3,T4 ;V1=80026950 + A0->offset: -LW T5,0000 (V1) -OR V0,R0,R0 ;V0=0: false return -ADDIU T6,T5,0001 -JR RA -SW T6,0000 (V1) ;80026950+offset ++ -//7000C370: return true -LW T7,01E0 (V1) ;T7=V1+1E0: -SLL T0,A0,0x2 -SUBU T0,T0,A0 -SLL T8,T7,0x2 -SUBU T8,T8,T7 -SLL T8,T8,0x3 ;T8-T7*0x18: -ADDU T9,V1,T8 ;T9=V1+T8: [80064F30]+offset -SLL T0,T0,0x1 ;T0=A0*6: -ADDU T1,T9,T0 ;T1=[80064F30]+(T7*0x18)+(A0*0x6) -LHU T2,0000 (T1) ;T2= -AND V0,T2,A1 ;V0=T2 & A1: -ANDI T3,V0,FFFF -OR V0,T3,R0 ;V0=(T2 & A1) & 0xFFFF -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 12 - multiplayer stage select/7F014050 - menu 12 constructor - multiplayer stage select.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 12 - multiplayer stage select/7F014050 - menu 12 constructor - multiplayer stage select.TXT deleted file mode 100644 index 1d603a0..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 12 - multiplayer stage select/7F014050 - menu 12 constructor - multiplayer stage select.TXT +++ /dev/null @@ -1,519 +0,0 @@ -7F014050: menu 12 constructor: MP stage select -ADDIU SP,SP,FEC8 -SW RA,0074 (SP) -SW S8,0070 (SP) -SW S7,006C (SP) -SW S6,0068 (SP) -SW S5,0064 (SP) -SW S4,0060 (SP) -SW S3,005C (SP) -SW S2,0058 (SP) -SW S1,0054 (SP) -SW S0,0050 (SP) -SDC1 F22,0048 (SP) -SDC1 F20,0040 (SP) -SW A0,0138 (SP) ;SP+138=A0: DL target -OR A1,R0,R0 ;A1=0 -OR A2,R0,R0 ;A2=0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 ;A3=0 -SW V0,0138 (SP) ;SP+138=V0: new DL target -JAL 70003EF8 -OR A0,V0,R0 ;A0=V0: DL address -SW V0,0138 (SP) ;SP+138=V0: new DL target -JAL 7F00D5E8 -OR A0,V0,R0 -SW V0,0138 (SP) ;SP+138=V0: new DL target -JAL 7F0ACD98 -OR A0,V0,R0 -LUI S2,1010 -SW V0,0138 (SP) ;SP+138=V0: new DL target -ORI S2,S2,10FF ;S2=101010FF ;mostly black - backdrop behind images -ADDIU S1,R0,006C ;S1=0x6C -ADDIU S0,R0,00A0 ;S0=0xA0 -ADDIU S3,R0,0172 ;S3=0x172 -//7F0140D4: -LW A0,0138 (SP) ;A0=SP+138: DL target -ADDIU A1,R0,0025 ;A1=0x25 -OR A2,S1,R0 ;A2=S1: 0x6C -ADDIU A3,R0,0185 ;A3=0x185 -SW S0,0010 (SP) ;SP+10: A0 -JAL 7F0AD014 ;draw coloured box -SW S2,0014 (SP) ;SP+14: 101010FF -//7F0140F0: -ADDIU S0,S0,0046 ;S0+=0x46 -ADDIU S1,S1,0046 ;S1+=0x46 -BNE S0,S3,7F0140D4 ;branch if S0 != 0x172 (loops 3 times) -SW V0,0138 (SP) ;SP+138=V0: new DL target -JAL 7F0ACEF0 -OR A0,V0,R0 ;A0=V0: DL target -//7F014108: -ADDIU T6,V0,0008 ;T6=V0+8: DL target + 8 (one op) -SW T6,0138 (SP) ;SP+138=T6: new DL target -LUI T7,BA00 -ORI T7,T7,0C02 ;T7=BA000C02 -SW T7,0000 (V0) ;V0+0= BA000C02 -SW R0,0004 (V0) ;V0+4= 00000000 -LUI S0,8009 -LW S0,D128 (S0) ;S0=8008D128: main folder icons -ADDIU S3,SP,0138 ;S3=SP+138: p->DL target -ADDIU T8,R0,0002 ;T8=2 -ADDIU S0,S0,003C ;S0+=0x3C: checkmark -OR A1,S0,R0 ;A1=S0: p->checkmark img declaration -SW T8,0010 (SP) -OR A0,S3,R0 -ADDIU A2,R0,0001 ;A2=1 -JAL 7F076D68 -OR A3,R0,R0 ;A3=0 -//7F01414C: -LUI AT,4330 -MTC1 AT,F2 -LUI AT,4080 -MTC1 AT,F12 -LUI AT,4214 -MTC1 AT,F4 -LUI AT,42C8 -MTC1 AT,F8 -ADD.S F6,F2,F4 -LUI AT,428C -MTC1 AT,F22 -ADD.S F0,F12,F8 -LUI AT,4270 -MTC1 AT,F20 -SWC1 F6,0100 (SP) -SWC1 F0,0104 (SP) -OR S1,R0,R0 ;S1=0 -ADDIU S4,SP,00F8 -ADDIU S2,SP,0100 -SWC1 F2,00F8 (SP) -SWC1 F12,00FC (SP) -//7F0141A0: -ADDIU T9,R0,0012 ;T9=12 -ADDIU T1,R0,0001 ;T1=1 -ADDIU T2,R0,006B ;T2=6B -ADDIU T3,R0,0067 ;T3=67 -ADDIU T4,R0,0053 ;T4=53 -ADDIU T5,R0,00FF ;T5=FF -SW T5,002C (SP) ;SP+2C=FF -SW T4,0028 (SP) ;SP+28=53 -SW T3,0024 (SP) ;SP+24=67 -SW T2,0020 (SP) ;SP+20=6B -SW T1,001C (SP) ;SP+1C=1 -SW T9,0010 (SP) ;SP+10=12 -SW R0,0014 (SP) ;SP+14=0 -SW R0,0018 (SP) ;SP+18=0 -LBU T6,0006 (S0) ;T6=S0+6: 0003, possibly image type? -SW R0,0034 (SP) ;SP+34=0 -OR A0,S3,R0 ;A0=S3: DL -SLT T7,R0,T6 ;T7=TRUE if 0 < type -SW T7,0030 (SP) ;SP+30=!imgtype -OR A1,S2,R0 ;A1=S2: SP+100 -OR A2,S4,R0 ;A2=S4: SP+F8 -JAL 7F06AFE8 -ADDIU A3,R0,02F0 ;A3=0x2F0 -//7F0141FC: -LWC1 F10,0104 (SP) -ADDIU T8,R0,0012 -ADDIU T9,R0,0001 -ADD.S F16,F10,F20 -ADDIU T1,R0,006B -ADDIU T2,R0,0067 -ADDIU T3,R0,0053 -ADDIU T4,R0,00FF -SWC1 F16,0104 (SP) -SW T4,002C (SP) ;SP+2C=FF -SW T3,0028 (SP) ;SP+28=53 -SW T2,0024 (SP) ;SP+24=67 -SW T1,0020 (SP) ;SP+20=6B -SW T9,001C (SP) ;SP+1C=1 -SW T8,0010 (SP) ;SP+10=12 -SW R0,0014 (SP) ;SP+14=0 -SW R0,0018 (SP) ;SP+18=0 -LBU T5,0006 (S0) ;T6=S0+6: 0003, possibly image type? -SW R0,0034 (SP) ;SP+34=0 -OR A0,S3,R0 ;A0=S3: SP+138 - DL target -SLT T6,R0,T5 ;T6=TRUE if 0 < image type -SW T6,0030 (SP) ;SP+30=!imgtype -OR A1,S2,R0 ;A1=S2: SP+100 -OR A2,S4,R0 ;A2=S4: SP+F8 -JAL 7F06AFE8 -ADDIU A3,R0,02F0 ;A3=0x2F0 -//7F014264: -LWC1 F0,0104 (SP) ;F0=SP+104: -ADDIU S1,S1,0001 -ADDIU AT,R0,0003 -SUB.S F0,F0,F20 ;F0=F0-F20: F0-column offset -ADD.S F0,F0,F22 ;F0=F0+F22: F0+row offset -BNE S1,AT,7F0141A0 -SWC1 F0,0104 (SP) ;SP+104=F0: updated position -//7F014280: -LUI AT,4208 -MTC1 AT,F18 ;F18=64.0 [42800000]: image width -LUI AT,41B0 -MTC1 AT,F0 ;F0=22.0 [41B00000]: image height -LUI AT,42D8 -MTC1 AT,F4 ;F4=108.0 [42D80000]: -LUI AT,4080 -MTC1 AT,F8 ;F8=4.0 [40800000]: -ADD.S F6,F0,F4 -LUI AT,42AA ;AT=85.0 [42AA0000]: offset between columns -LUI S6,8003 -MTC1 AT,F20 ;F20=position between columns -ADD.S F10,F6,F8 ;F10=F0+F4+F8: image y position -OR S1,R0,R0 ;S1=0: stage count -ADDIU S6,S6,B074 ;S6=8002B074: MP stage list -SW R0,00B4 (SP) ;SP+B4=0: row count -SWC1 F10,00DC (SP) ;SP+DC: image y position -ADDIU S8,R0,000C ;S8=0xC: size of image declaration -ADDIU S7,R0,0018 ;S7=0x18: size of MP stage entry -ADDIU S5,SP,00D0 -ADDIU S4,SP,00D8 -SWC1 F18,00D0 (SP) ;SP+D0=F18: image width -SWC1 F0,00D4 (SP) ;SP+D4=F0: image height -LUI AT,42AC -MTC1 AT,F16 ;F16=42AC0000: image x position (1st column) -OR S2,R0,R0 ;S2=column count (count in row) -SWC1 F16,00D8 (SP) ;SP+D8=F16: image x position -//7F0142EC: load images for each stage in row -SLTI AT,S1,000C ;TRUE if current < total entries (C) -BEQL AT,R0,7F0144DC -LWC1 F18,00D8 (SP) -MULTU S1,S7 ;S1*S7: entry * 0x18 -LUI T2,8009 -LW T2,D134 (T2) ;T2=8008D134: MP stage select images -ADDIU T3,R0,0002 ;T3=2 -OR A0,S3,R0 -ADDIU A2,R0,0001 ;A2=1 -OR A3,R0,R0 ;A3=0 -MFLO T7 -ADDU T8,S6,T7 ;T8=p->MP stage entry -LW T9,0004 (T8) ;T9=T8+4: image -SW T3,0010 (SP) ;SP+10=2 -MULTU T9,S8 ;T9*S8: image index * C=offset to declaration -MFLO T1 -ADDU S0,T1,T2 ;S0=T1+T2: p->image declaration -JAL 7F076D68 -OR A1,S0,R0 ;A1=S0 -LUI T4,8007 -LW T4,977C (T4) ;T4=8006977C: highlighted MP stage -LW T5,0138 (SP) -LUI T7,BA00 -BNE S1,T4,7F01440C -ADDIU T6,T5,0008 -//7F014350: combiner -SW T6,0138 (SP) -ORI T7,T7,1402 ;T7=BA001402 -LUI T8,0010 -SW T8,0004 (T5) ;T5+4=00100000 -SW T7,0000 (T5) ;T5+0=BA001402 -LW T9,0138 (SP) ;T9=SP+138: DL target -LUI T2,F800 -ADDIU T3,R0,FF0A ;T3=FFFFFF0A -ADDIU T1,T9,0008 ;T1=T9+8: next DL op -SW T1,0138 (SP) -SW T3,0004 (T9) ;T9+4= FFFFFF0A -SW T2,0000 (T9) ;T9+0= F8000000 -LW T4,0138 (SP) ;T4=SP+138: DL target -LUI T7,C411 -LUI T6,B900 -ADDIU T5,T4,0008 ;T5=T4+4: next DL op -SW T5,0138 (SP) ;save DL pos -ORI T6,T6,031D ;T6=B900031D -ORI T7,T7,2048 ;T7=C4112048 -SW T7,0004 (T4) ;T4+4= C4112048 -SW T6,0000 (T4) ;T4+0= B900031D -ADDIU T4,R0,00FF -ADDIU T2,R0,00FF -ADDIU T9,R0,0001 -ADDIU T3,R0,00FF -ADDIU T1,R0,00FF -ADDIU T8,R0,002C -SW T8,0010 (SP) ;SP+10=2C -SW T1,0020 (SP) ;SP+20=FF -SW T3,0028 (SP) ;SP+28=FF -SW T9,001C (SP) ;SP+1C=1 -SW T2,0024 (SP) ;SP+24=FF -SW T4,002C (SP) ;SP+2C=FF -SW R0,0018 (SP) ;SP+18=0 -SW R0,0014 (SP) ;SP+14=0 -LBU T5,0006 (S0) ;T5=S0+6: image type -ADDIU T7,R0,0001 -SW T7,0034 (SP) ;SP+34=1 -SLT T6,R0,T5 ;T6=TRUE if 0 < image type -SW T6,0030 (SP) ;SP+30=!imgtype -OR A0,S3,R0 ;A0=p->DL -OR A1,S4,R0 ;A1=SP+D8: image position -OR A2,S5,R0 ;A2=SP+D0: image size -JAL 7F06AFE8 -ADDIU A3,R0,0044 ;A3=44 -BEQ R0,R0,7F0144DC -LWC1 F18,00D8 (SP) -//7F01440C: display stage icon if unlocked -JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -OR A0,S1,R0 -BEQ V0,R0,7F014480 ;branch if unavailable -OR A0,S3,R0 ;A0=S3: p->DL -ADDIU T8,R0,002C -ADDIU T9,R0,0001 -ADDIU T1,R0,006E -ADDIU T2,R0,006E -ADDIU T3,R0,006E -ADDIU T4,R0,00FF -SW T4,002C (SP) ;SP+2C=FF -SW T3,0028 (SP) ;SP+28=6E -SW T2,0024 (SP) ;SP+24=6E -SW T1,0020 (SP) ;SP+20=6E -SW T9,001C (SP) ;SP+1C=1 -SW T8,0010 (SP) ;SP+10=2C -SW R0,0014 (SP) ;SP+14=0 -SW R0,0018 (SP) ;SP+18=0 -LBU T5,0006 (S0) ;T5=S0+6: image type -SW R0,0034 (SP) ;SP+34=0 -OR A0,S3,R0 ;A0=S3: p->DL -SLT T6,R0,T5 ;T6=TRUE if 0 < image type -SW T6,0030 (SP) ;SP+30=!imgtype -OR A1,S4,R0 ;A1=SP+D8: image position -OR A2,S5,R0 ;A2=SP+D0: image size -JAL 7F06AFE8 -ADDIU A3,R0,0044 ;A3=44 -BEQ R0,R0,7F0144DC -LWC1 F18,00D8 (SP) -//7F014480: stage dark when unavailable -ADDIU T7,R0,002C -ADDIU T8,R0,0001 -ADDIU T9,R0,000F -ADDIU T1,R0,000F -ADDIU T2,R0,000F -ADDIU T3,R0,00FF -SW T3,002C (SP) ;SP+2C=FF -SW T2,0028 (SP) ;SP+28=0F -SW T1,0024 (SP) ;SP+24=0F -SW T9,0020 (SP) ;SP+20=0F -SW T8,001C (SP) ;SP+1C=1 -SW T7,0010 (SP) ;SP+10=2C -SW R0,0014 (SP) ;SP+14=0 -SW R0,0018 (SP) ;SP+18=0 -LBU T4,0006 (S0) ;T4=S0+6: image type -SW R0,0034 (SP) ;SP+34=0 -OR A1,S4,R0 ;A1=SP+D8: image position -SLT T5,R0,T4 ;T5=TRUE if 0 < image type -SW T5,0030 (SP) ;SP+30=!imgtype -OR A2,S5,R0 ;A2=SP+D0: image size -JAL 7F06AFE8 -ADDIU A3,R0,0044 ;A3=44 -//7F0144D8: loop for each entry in row -LWC1 F18,00D8 (SP) ;F18=SP+D8: image x position -ADDIU S2,S2,0001 ;S2++: count in row (column count) -ADDIU AT,R0,0004 ;AT=4: entries per row -ADD.S F4,F18,F20 ;F4=F18+F20: imgX + offset -ADDIU S1,S1,0001 ;S1++: stage count++ -BNE S2,AT,7F0142EC ;loop for each entry in row -SWC1 F4,00D8 (SP) ;SP+D8=updated column position -//7F0144F4: loop for each column -LWC1 F6,00DC (SP) ;F6=SP+DC: image y position -LW T6,00B4 (SP) ;T6=SP+B4: row count -ADDIU AT,R0,0003 -ADD.S F8,F6,F22 ;F8=F6+F22: imgY + offset -ADDIU T7,T6,0001 ;T7=T6+1: next row -SW T7,00B4 (SP) ;SP+B4=updated row count -BNE T7,AT,7F0142DC ;loop for each row -SWC1 F8,00DC (SP) ;SP+DC=updated image y position -//7F014514: -JAL 7F0ACD98 -LW A0,0138 (SP) -ADDIU T8,R0,0097 -LUI S8,8004 -SW V0,0138 (SP) -OR S5,R0,R0 ;S5=0: entry count -SW T8,0090 (SP) ;SP+90=97 -ADDIU S8,S8,0EB0 ;S8=80040EB0: -SW R0,009C (SP) ;SP+9C=0 -//7F014538: -ADDIU S6,R0,0056 -OR S7,R0,R0 ;S7=0 -//7F014540: text highlight -SLTI AT,S5,000C ;AT=TRUE if selected < C -BEQL AT,R0,7F0146D0 -ADDIU S7,S7,0001 ;S7++ -JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -OR A0,S5,R0 ;A0=S5: entry count -BEQ V0,R0,7F0146CC -LUI S2,9696 -LUI T2,8007 -LW T2,977C (T2) ;T2=8006977C: highlighted MP stage -SLL T9,S5,0x2 -SUBU T9,T9,S5 -LUI T1,8003 -ADDIU T1,T1,B074 ;T1=8002B074: MP stage list -SLL T9,T9,0x3 ;T9=S5 * 0x18: offset to selected MP stage -ORI S2,S2,9600 ;S2=96969600: grey -BNE S5,T2,7F014588 -ADDU S3,T9,T1 ;S3=p->selected MP stage entry -ADDIU S2,R0,FF00 ;S2=FFFFFF00: white -//7F014588: -JAL 7F0C1DD8 ;ret V0=p->text A0 -LHU A0,0002 (S3) ;A0=stage name text -LUI T3,8004 -LW T3,0EAC (T3) ;T3=80040EAC: -ADDIU A0,SP,0128 :A0=SP+128: -ADDIU A1,SP,0124 ;A1=SP+124: -OR A2,V0,R0 ;A2=V0: p->text -LW A3,0000 (S8) ;A3=80040EB0: -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;compute string width? -SW T3,0010 (SP) ;SP+10=T3: -//7F0145B4: draw backdrop box for text (technically invisible) -LW V1,0128 (SP) -LW T4,0090 (SP) ;T4=SP+90: 0x97 -LW T5,0124 (SP) -ADDIU S4,S6,FFE1 ;S4=S6-0x1F: -SUBU A2,T4,V1 -ADDU T6,A2,V1 -OR A1,S4,R0 ;A1=S6-0x1F -SW T6,0010 (SP) ;SP+10=position? -SW A2,012C (SP) -SW S4,0130 (SP) -LW A0,0138 (SP) ;A0=SP+138: DL -SW R0,0014 (SP) ;SP+14=0: black -JAL 7F0AD014 ;draw coloured box -ADDU A3,S4,T5 -SW V0,0138 (SP) ;SP+138=V0: DL address -//7F0145F0: -JAL 7F0C1DD8 ;ret V0=p->text A0 -LHU A0,0002 (S3) ;A0=stage name text -JAL 7000441C ;V0= halfword @ 800232A8: -OR S1,V0,R0 ;S1=p->text -//7F014600: -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C -OR S0,T7,R0 -LUI T9,8004 -LW T9,0EAC (T9) -LW T8,0000 (S8) -ORI T1,S2,00FF -SW T1,0018 (SP) -LW A0,0138 (SP) -ADDIU A1,SP,0130 -ADDIU A2,SP,012C -OR A3,S1,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F0ADABC -SW T8,0010 (SP) -//7F014650: -LW V1,0128 (SP) -LW T2,0090 (SP) -SW V0,0138 (SP) -LHU A0,0002 (S3) ;A0=stage name text -SUBU A2,T2,V1 -SW A2,012C (SP) -JAL 7F0C1DD8 ;ret V0=p->text A0 -SW S4,0130 (SP) -JAL 7000441C ;V0= halfword @ 800232A8: -OR S1,V0,R0 -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C -OR S0,T3,R0 -//7F014688: -LUI T5,8004 -LW T5,0EAC (T5) ;T5=80040EAC: -LW T4,0000 (S8) -ORI T6,S2,0064 -SW T6,0018 (SP) -LW A0,0138 (SP) -ADDIU A1,SP,0130 -ADDIU A2,SP,012C -OR A3,S1,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -JAL 7F0ADABC -SW T4,0010 (SP) -SW V0,0138 (SP) -//7F0146CC: -ADDIU S7,S7,0001 -ADDIU AT,R0,0004 -ADDIU S6,S6,0055 -BNE S7,AT,7F014540 -ADDIU S5,S5,0001 -//7F0146E0: -LW T9,009C (SP) -LW T7,0090 (SP) -ADDIU AT,R0,0003 -ADDIU T1,T9,0001 -ADDIU T8,T7,0046 -SW T1,009C (SP) -BNE T1,AT,7F014538 -SW T8,0090 (SP) -//7F014700: -JAL 7F0ACD98 -LW A0,0138 (SP) -SW V0,0138 (SP) -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,V0,R0 -SW V0,0138 (SP) -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 -//7F014720: -LW RA,0074 (SP) -LDC1 F20,0040 (SP) -LDC1 F22,0048 (SP) -LW S0,0050 (SP) -LW S1,0054 (SP) -LW S2,0058 (SP) -LW S3,005C (SP) -LW S4,0060 (SP) -LW S5,0064 (SP) -LW S6,0068 (SP) -LW S7,006C (SP) -LW S8,0070 (SP) -JR RA -ADDIU SP,SP,0138 - - -700046D0: V0=p->new DL address - creates a setfillcolour op from colour samples. uses 800232AC to set output mode - accepts: A0=p->DL target, A1=red, A2=green, A3=blue -LUI T6,8002 -LW T6,32AC (T6) ;T6=800232AC: colour output mode -OR V0,A0,R0 ;V0=A0: -LUI T8,F700 -BEQ T6,R0,70004730 ;branch if flag not set: 32bit -SLL T0,A1,0x18 ;T0=A1 * 0x01000000 -SLL T8,A1,0x8 ;T8=A1 * 0x100 -SLL T0,A2,0x3 ;T0=A2 * 0x8 -ANDI T1,T0,07C0 ;T1=T0 & 0x07C0: 16bit green mask -ANDI T9,T8,F800 ;T9=T8 & 0xF800: 16bit red mask -SRA T3,A3,0x2 ;T3=A3 / 4 -ANDI T4,T3,003E ;T4=T3 & 0x003E: 16bit blue mask -OR T2,T9,T1 -OR V1,T2,T4 -ORI T5,V1,0001 ;T5=r+g+b+a -OR V0,A0,R0 -LUI T7,F700 -SW T7,0000 (V0) ;F7000000->V0+0 -SLL T6,T5,0x10 ;T6=rgba * 0x10000 -OR T7,T6,T5 ;T7=rgba | rgba -SW T7,0004 (V0) ;rgba | rgba ->V0+4 -ADDIU A0,A0,0008 ;A0+=8 -JR RA -OR V0,A0,R0 ;V0=p->new address -//70004730: 32bit RGBA sample -SLL T9,A2,0x10 ;T9=green * 0x10000 -OR T1,T0,T9 -SLL T3,A3,0x8 ;T3=blue 8 0x100 -OR T2,T1,T3 -ORI T4,T2,00FF ;T4=RR+GG+BB+AA -SW T4,0004 (V0) ;RRGGBBAA->V0+4 -ADDIU A0,A0,0008 ;A0+=8 -SW T8,0000 (V0) ;F7000000->V0+0 -JR RA -OR V0,A0,R0 ;V0=A0: updated ucode target - diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 13 - scenario select/7F0147B8 - menu 13 interface - scenario select.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 13 - scenario select/7F0147B8 - menu 13 interface - scenario select.TXT deleted file mode 100644 index 10c733a..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 13 - scenario select/7F0147B8 - menu 13 interface - scenario select.TXT +++ /dev/null @@ -1,175 +0,0 @@ -7F0147B8 Menu 13 interface - MP scenario select -ADDIU SP,SP,FFD0 -LUI AT,4270 -SW RA,0024 (SP) -MTC1 AT,F12 -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -JAL 70004544 -SW R0,002C (SP) -LUI AT,8005 -JAL 70004590 -LWC1 F12,1AA8 (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1AAC (AT) -JAL 70004534 -OR A0,R0,R0 -//7F014804: -OR A0,R0,R0 ;A0=0 player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,A000 ;A1=A, Z button -BNEZ V0,7F0148D4 ;branch if not pressed -LUI AT,8003 -SW R0,A8E4 (AT) ;0->8002A8E4: 1- highlight folder tab 3 -LUI AT,8003 -SW R0,A8E0 (AT) -LUI AT,8003 -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -SW R0,A8DC (AT) -BEQ V0,R0,7F014850 -ADDIU T7,R0,0001 -ADDIU T6,R0,0001 -LUI AT,8003 -SW T6,A8E4 (AT) -LUI AT,8007 -BEQ R0,R0,7F0148D4 -SW R0,9780 (AT) -//7F014850: -LUI AT,8007 -SW T7,9780 (AT) -ADDIU S1,R0,0007 -ADDIU S2,R0,011D -LUI AT,8003 -LWC1 F4,A90C (AT) -LUI T1,8003 -ADDIU T1,T1,B054 -TRUNC.W.S F6,F4 -SLL T0,S1,0x2 -MFC1 T9,F6 -NOP -SLT AT,T9,S2 -BNEL AT,R0,7F0148CC -ADDIU S1,S1,FFFF -JAL 7F010290 ;V0=#MP players -ADDU S0,T0,T1 -LBU T2,0002 (S0) -SLT AT,V0,T2 -BNEL AT,R0,7F0148CC -ADDIU S1,S1,FFFF -JAL 7F010290 ;V0=#MP players -NOP -LBU T3,0003 (S0) -SLT AT,T3,V0 -BNEZ AT,7F0148C8 -ADDIU T4,S1,0001 -LUI AT,8007 -BEQ R0,R0,7F0148D4 -SW T4,9780 (AT) -//7F0148C8: -ADDIU S1,S1,FFFF -BNEZ S1,7F014860 -ADDIU S2,S2,FFEA -//7F0148D4: test if selection made -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,B000 ;A1=A, Z, Start button -BEQ V0,R0,7F014970 ;branch if not pressed -OR A0,R0,R0 -LUI T5,8003 -LW T5,A8E4 (T5) -ADDIU T6,R0,0001 -LUI AT,8003 -BEQ T5,R0,7F014908 -LUI A0,8007 -BEQ R0,R0,7F014954 -SW T6,A8D8 (AT) -// -LW A0,9780 (A0) -ADDIU AT,R0,0005 -ADDIU A0,A0,FFFF -BEQ A0,AT,7F01492C -ADDIU AT,R0,0006 -BEQ A0,AT,7F01492C -ADDIU AT,R0,0007 -BNE A0,AT,7F014940 -NOP -JAL 7F010468 ;set default MP menu settings for scenario A0 -NOP -ADDIU T7,R0,0001 -BEQ R0,R0,7F014954 -SW T7,002C (SP) -JAL 7F010468 ;set default MP menu settings for scenario A0 -NOP -ADDIU T8,R0,0001 -LUI AT,8003 -SW T8,A8D8 (AT) -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 -BEQ R0,R0,7F01499C -NOP -//7F014970: backtrack -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=B button -BEQ V0,R0,7F01499C -ADDIU T9,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW T9,A8D8 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 -//7F01499C: construct folder -LUI S0,8003 -ADDIU S0,S0,A95C -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,0000 (S0) -LW A0,0000 (S0) -OR A1,R0,R0 ;A1=item 0: -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=ON -LW A0,0000 (S0) -ADDIU A1,R0,0001 ;A1=item 1: -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=ON -LW A0,0000 (S0) -ADDIU A1,R0,0003 ;A1=item 3: -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=ON -LW A0,0000 (S0) -ADDIU A1,R0,0006 ;A1=item 6: -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=ON -JAL 7F009B84 ;control stick tracking -NOP -//7F0149F4: -LW T0,002C (SP) -ADDIU A0,R0,0014 ;A0=14: team setup -LUI T1,8003 -BEQ T0,R0,7F014A18 -NOP -JAL 7F01A5D4 ;set to menu A0 to mode A1 -OR A1,R0,R0 ;A1=0: current -BEQ R0,R0,7F014A34 -LW RA,0024 (SP) -//7F014A18: -LW T1,A8D8 (T1) -ADDIU A0,R0,000E ;A0=E: MP options -BEQL T1,R0,7F014A34 -LW RA,0024 (SP) -JAL 7F01A5D4 ;set to menu A0 to mode A1 -OR A1,R0,R0 ;A1=0: current -//7F014A30: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0030 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 13 - scenario select/7F014A48 - menu 13 constructor - scenario select.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 13 - scenario select/7F014A48 - menu 13 constructor - scenario select.TXT deleted file mode 100644 index 5cbc72b..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 13 - scenario select/7F014A48 - menu 13 constructor - scenario select.TXT +++ /dev/null @@ -1,151 +0,0 @@ -7F014A48 Menu 13 Constructor: Scenario Select -ADDIU SP,SP,FF68 -SW RA,005C (SP) -SW S8,0058 (SP) -SW S7,0054 (SP) -SW S6,0050 (SP) -SW S5,004C (SP) -SW S4,0048 (SP) -SW S3,0044 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 -JAL 7F00D5E8 -OR A0,V0,R0 -JAL 7F0ACD98 ;??? - microcode constructor -OR A0,V0,R0 -OR S4,V0,R0 -// -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C57 ;A0="scenario:" -ADDIU T6,R0,0037 -ADDIU V1,R0,0066 -OR S6,V0,R0 -SW T6,0088 (SP) -JAL 7000441C ;V0= text clip width -SW V1,0084 (SP) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 -LUI S7,8004 -LUI S8,8004 -ADDIU S8,S8,0EB4 -ADDIU S7,S7,0EB8 -LW T8,0000 (S7) -LW T9,0000 (S8) -ADDIU T0,R0,00FF -SW T0,0018 (SP) -OR A0,S4,R0 -ADDIU A1,SP,0088 -ADDIU A2,SP,0084 -OR A3,S6,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0010 (SP) -JAL 7F009760 ;write text -SW T9,0014 (SP) -// -LUI S1,8003 -OR S4,V0,R0 -ADDIU S1,S1,B054 ;S1=8002B054: scenario entries -OR S2,R0,R0 -ADDIU S5,R0,0083 -JAL 7F010290 ;V0=#MP players -ADDIU S3,R0,00FF -LBU T1,0003 (S1) ;T1=max # players for scenario -SLT AT,T1,V0 -BNEL AT,R0,7F014B64 ;branch if too many players -ADDIU S3,R0,0070 -JAL 7F010290 ;V0=#MP players -NOP -LBU T2,0002 (S1) ;T2=min # players for scenario -SLT AT,V0,T2 -BEQ AT,R0,7F014B64 ;branch if too few players -NOP -// -ADDIU S3,R0,0070 -JAL 7F0C1DD8 ;ret V0=p->text A0 -LHU A0,0000 (S1) ;A0=name for scenario -LW T3,0000 (S8) -OR S6,V0,R0 -ADDIU A0,SP,007C -ADDIU A1,SP,0078 -OR A2,V0,R0 -LW A3,0000 (S7) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T3,0010 (SP) -LUI T6,8007 -LW T6,9780 (T6) ;T6=80069780: -ADDIU T4,R0,0039 -ADDIU T5,S2,0001 -SW T4,0088 (SP) -OR V1,S5,R0 -BNE T5,T6,7F014BE0 -SW S5,0084 (SP) -LW A3,0078 (SP) -ADDIU T7,V1,000E -ADDIU T8,R0,0032 -SW T8,0014 (SP) -SW T7,0010 (SP) -OR A0,S4,R0 -ADDIU A1,R0,0037 -ADDIU A2,V1,FFFF -SW V1,0084 (SP) -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,003C -OR S4,V0,R0 -// -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LW T0,0000 (S7) -LW T1,0000 (S8) -OR A0,S4,R0 -ADDIU A1,SP,0088 -ADDIU A2,SP,0084 -OR A3,S6,R0 -SW S3,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0010 (SP) -JAL 7F009760 ;write text -SW T1,0014 (SP) -// -ADDIU S2,S2,0001 -ADDIU AT,R0,0008 -ADDIU S1,S1,0004 -ADDIU S5,S5,0016 -BNE S2,AT,7F014B30 ;loop for each entry -OR S4,V0,R0 -// -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,V0,R0 -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 -LW RA,005C (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -LW S4,0048 (SP) -LW S5,004C (SP) -LW S6,0050 (SP) -LW S7,0054 (SP) -LW S8,0058 (SP) -JR RA -ADDIU SP,SP,0098 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 14 - teams/7F014D48 - menu 14 interface - team setup.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 14 - teams/7F014D48 - menu 14 interface - team setup.TXT deleted file mode 100644 index a048cba..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 14 - teams/7F014D48 - menu 14 interface - team setup.TXT +++ /dev/null @@ -1,279 +0,0 @@ -7F014D48 49878 Menu 14 Interface: Team Setup -ADDIU SP,SP,FFE0 -LUI AT,4270 -SW RA,001C (SP) -MTC1 AT,F12 ;F12= [42700000] -SW S1,0018 (SP) -JAL 70004544 -SW S0,0014 (SP) -LUI AT,8005 -JAL 70004590 -LWC1 F12,1AB0 (AT) ;F12=80051AB0: -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000] -LUI AT,8005 -JAL 70004650 -LWC1 F14,1AB4 (AT) ;F14=80051AB4: -JAL 70004534 ;0->p@800232A8+24 -OR A0,R0,R0 -//7F014D8C: update blink timer -LUI V0,8003 -ADDIU V0,V0,B560 -LW T6,0000 (V0) ;T6=8002B560: timer -ADDIU AT,R0,0014 ;20ms timer -OR A0,R0,R0 ;A0=0: player 1 -ADDIU T7,T6,0001 ;T7=T6+1: -DIV T7,AT -MFHI T8 ;(T6+1) % 20 -SW T8,0000 (V0) ;T8->8002B560: update timer -//7F014DB0: -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0101 ;A1= C right, + right -BNEZ V0,7F014DD0 ;branch if buttons pressed -OR A0,R0,R0 ;A0=0: player 1 -ADDIU A1,R0,FFFE ;A1=-2: left -JAL 7000C4B4 ;state of plaer A0's stick horz. -ADDIU A2,R0,0001 ;A2=1 ??? -BLEZ V0,7F014E50 ;branch if left or neutral -//7F014DD0: right pressed... -LUI T9,8003 -LW T9,B540 (T9) ;T9=8002B540: scenario -ADDIU AT,R0,0007 ;AT=7: team 2vs1 -LUI S1,8007 -BNE T9,AT,7F014E20 ;branch if not 2vs1 -ADDIU S1,S1,9788 ;S1=80069788 -//7F014DE8: team 2vs1 -LUI S1,8007 -ADDIU S1,S1,9788 ;S1=80069788 -LW T0,0000 (S1) ;T0=80069788: starts out at 3 -ADDIU T2,R0,0001 -LUI A0,8006 -ANDI T1,T0,0001 ;T1=T0 & 1 -BNEZ T1,7F01503C ;branch if 1 set -ADDIU A1,R0,00C7 ;A1=SE 0C7 -SW T2,0000 (S1) ;1->80069788: -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01503C -NOP -//7F014E20: all other teams -LW V0,0000 (S1) ;V0=80069788: starts out at 2 -LUI A0,8006 -ADDIU A1,R0,00C7 ;A1=SE 0C7 -ANDI T3,V0,0001 ;T1=T0 & 1 -BNEZ T3,7F01503C ;branch if 1 set -ADDIU T4,V0,0001 -SW T4,0000 (S1) ;1->80069788: -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01503C -NOP -//7F014E50: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0808 ;A1= c up, + up -BNEZ V0,7F014E74 ;branch if pressed -OR A0,R0,R0 ;A0=0: player 1 -ADDIU A1,R0,FFFE ;A1=down -JAL 7000C528 ;state of plaer A0's stick vert. -ADDIU A2,R0,0001 ;A2=1: ??? -BLEZ V0,7F014EF4 ;branch if down or stationary -//7F014E74: up pressed... -LUI T5,8003 -LW T5,B540 (T5) ;T5=8002B540: scenario -ADDIU AT,R0,0005 ;AT=5: team 2vs2 -LUI S1,8007 -BNE T5,AT,7F014EC4 ;branch if not team 2vs2 -ADDIU S1,S1,9788 ;S1=80069788 -//7F014E8C: team 2vs2 -LUI S1,8007 -ADDIU S1,S1,9788 ;S1=80069788 -LW T6,0000 (S1) ;T6=80069788: -ADDIU T8,R0,0001 -LUI A0,8006 -ANDI T7,T6,0002 ;T7=T6 & 2: -BEQ T7,R0,7F01503C ;branch if top row -ADDIU A1,R0,00C7 ;A1=SE 0C7 -SW T8,0000 (S1) ;1->80069788: -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01503C -NOP -//7F014EC4: other team scenarios -LW V0,0000 (S1) -LUI A0,8006 -ADDIU A1,R0,00C7 ;A1=SE 0C7 -ANDI T9,V0,0002 -BEQ T9,R0,7F01503C -ADDIU T0,V0,FFFE -SW T0,0000 (S1) -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01503C -NOP -//7F014EF4: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0202 ;A1= c left, + left -BNEZ V0,7F014F1C -OR A0,R0,R0 ;A0=0: player 1 -ADDIU A1,R0,FFFE ;A1=-2: left -JAL 7000C4B4 ;state of plaer A0's stick horz. -ADDIU A2,R0,0001 ;A2=1: ??? -SLTI AT,V0,FFFF ;TRUE if < 0 (left) -BEQ AT,R0,7F014F9C ;branch if not left -//7F014F1C: left pressed... -LUI T1,8003 -LW T1,B540 (T1) ;T1=8002B540: scenario -ADDIU AT,R0,0005 ;AT=5: team 2vs2 -LUI S1,8007 -BNE T1,AT,7F014F6C ;branch if not 2vs2 -ADDIU S1,S1,9788 ;S1=80069788 -// 2vs2 left -LUI S1,8007 -ADDIU S1,S1,9788 ;S1=80069788 -LW T2,0000 (S1) ;T2=80069788: -ADDIU T4,R0,0002 -LUI A0,8006 -ANDI T3,T2,0001 ;T3=T2 & 1 -BEQ T3,R0,7F01503C ;branch if 1 not set -ADDIU A1,R0,00C7 ;A1=SE 0C7 -SW T4,0000 (S1) ;2->80069788 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01503C -NOP -// all others left -LW V0,0000 (S1) ;V0=80069788: -LUI A0,8006 -ADDIU A1,R0,00C7 ;A1=SE 0C7 -ANDI T5,V0,0001 -BEQ T5,R0,7F01503C ;branch if 1 not set -ADDIU T6,V0,FFFF ;T6=V0-1: -SW T6,0000 (S1) -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01503C -NOP -//7F014F9C: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,0404 ;A1= c down, + down -BNEZ V0,7F014FC4 ;branch if buttons pressed -OR A0,R0,R0 ;A0=0: player 1 -ADDIU A1,R0,FFFE ;A1=-2: down -JAL 7000C528 ;state of plaer A0's stick vert. -ADDIU A2,R0,0001 ;A2=1: ??? -SLTI AT,V0,FFFF ;TRUE if stick < 0 -BEQ AT,R0,7F01503C ;branch if not down (>=0) -//7F014FC4: down pressed... -LUI T7,8003 -LW T7,B540 (T7) -ADDIU AT,R0,0007 ;AT=7: team 2vs1 -LUI S1,8007 -BNE T7,AT,7F015014 ;branch if not team 2vs2 -ADDIU S1,S1,9788 -// 2vs2 down -LUI S1,8007 -ADDIU S1,S1,9788 -LW T8,0000 (S1) -ADDIU T0,R0,0002 -LUI A0,8006 -ANDI T9,T8,0002 -BNEZ T9,7F01503C -ADDIU A1,R0,00C7 ;A1=SE 0C7 -SW T0,0000 (S1) -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01503C -NOP -// all others down -LW V0,0000 (S1) -LUI A0,8006 -ADDIU A1,R0,00C7 ;A1=SE 0C7 -ANDI T1,V0,0002 -BNEZ T1,7F01503C -ADDIU T2,V0,0002 -SW T2,0000 (S1) -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -//7F01503C: construct folder backdrop -LUI S0,8003 -ADDIU S0,S0,A95C ;S0=8002A95C -LUI S1,8007 -ADDIU S1,S1,9788 ;S1=80069788 -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,0000 (S0) ;A0=8002A95C: p->object instance -LW A0,0000 (S0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0: item #: tabs on side of folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LW A0,0000 (S0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,002A ;A1=2A: -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -JAL 7F009B84 ;control stick tracking -NOP -//7F01507C: detect if selection made -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,B000 ;A1= A, Z, Start button -BEQ V0,R0,7F015124 ;branch if not pressed -OR S0,R0,R0 -//7F015090: selected... -LUI T3,8003 -LW T3,B540 (T3) ;T3=8002B540: scenario -ADDIU AT,R0,0005 -BNEL T3,AT,7F0150D8 ;branch if not team 2vs2 -LW T5,0000 (S1) ;T5=80069788: -BEQ S0,R0,7F0150BC -NOP -LW T4,0000 (S1) -ADDIU A1,R0,0001 -BNE S0,T4,7F0150C4 -NOP -//7F0150BC: -BEQ R0,R0,7F0150C4 -OR A1,R0,R0 -//7F0150C4: -JAL 7F014CA4 ;A1->player A0's team/scenario flag -OR A0,S0,R0 -BEQ R0,R0,7F0150F8 -ADDIU S0,S0,0001 -//7F0150D4: -LW T5,0000 (S1) -ADDIU A1,R0,0001 -BEQ S0,T5,7F0150EC -NOP -BEQ R0,R0,7F0150EC -OR A1,R0,R0 -//7F0150EC: -JAL 7F014CA4 ;A1->player A0's team/scenario flag -OR A0,S0,R0 -ADDIU S0,S0,0001 -ADDIU AT,R0,0004 -BNE S0,AT,7F015090 -NOP -//7F015104 -ADDIU A0,R0,000E ;A0=menu E: MP options -JAL 7F01A5D4 ;set to menu A0 to mode A1 -OR A1,R0,R0 ;A1=0: current -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=SE 0C7 -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -//7F015124: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 diff --git a/notes/GE Documentation/Main Menus/MP menus/menu 14 - teams/7F015138 - menu 14 constructor - team setup.TXT b/notes/GE Documentation/Main Menus/MP menus/menu 14 - teams/7F015138 - menu 14 constructor - team setup.TXT deleted file mode 100644 index a8f8c95..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/menu 14 - teams/7F015138 - menu 14 constructor - team setup.TXT +++ /dev/null @@ -1,267 +0,0 @@ -7F015138 49C68 Menu 14 Constructor: Team Setup - accepts: A0=@display list target -ADDIU SP,SP,FF30 -SW RA,0064 (SP) -SW S5,0054 (SP) -OR S5,A0,R0 ;S5=A0: DL -SW S8,0060 (SP) -SW S7,005C (SP) -SW S6,0058 (SP) -SW S4,0050 (SP) -SW S3,004C (SP) -SW S2,0048 (SP) -SW S1,0044 (SP) -SW S0,0040 (SP) -JAL 7F010290 ;V0=selected #players -SDC1 F20,0038 (SP) -SW V0,00CC (SP) ;SP+CC= #players -OR A0,S5,R0 ;A0=S5: DL -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 -JAL 7F00D5E8 -OR A0,V0,R0 -JAL 7F0ACD98 -OR A0,V0,R0 -//7F0151A0: -ADDIU T6,R0,00AB ;SP+10=lry -ADDIU T7,R0,0090 ;SP+14=RGBA -SW T7,0014 (SP) -SW T6,0010 (SP) -OR A0,V0,R0 ;A0=V0: DL -ADDIU A1,R0,0026 ;A1=ulx -ADDIU A2,R0,00A9 ;A2=uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,R0,0184 ;A3=lrx -//7F0151C4: -LW T8,00CC (SP) ;T8= #players -OR S5,V0,R0 -OR A0,V0,R0 -SLTI AT,T8,0003 ;TRUE if 1-2 players -BNEZ AT,7F0151FC ;branch if 2 players -ADDIU A1,R0,00D4 -ADDIU T9,R0,0136 -ADDIU T0,R0,0080 -SW T0,0014 (SP) -SW T9,0010 (SP) -ADDIU A2,R0,001E -JAL 7F0AD014 ;draw coloured box -ADDIU A3,R0,00D6 -//7F0151F8: -OR S5,V0,R0 ;S5=V0: DL -LW T1,00CC (SP) ;SP+CC= #players -OR S4,R0,R0 -LUI AT,4080 -BLEZ T1,7F0154D4 ;branch if invalid #players -LUI S7,8004 -LUI S8,8004 -MTC1 AT,F20 ;F20= [40800000] -ADDIU S8,S8,0EB4 -ADDIU S7,S7,0EB8 -//7F015220: set vertical position -SLTI AT,S4,0002 ;TRUE if < 2 -BNEZ AT,7F015234 ;V0=0 if 1 or 2 -ANDI T2,S4,0001 ;T2=TRUE if 1 or 3 -BEQ R0,R0,7F015238 ;V0=8C if 3 or 4 -ADDIU V0,R0,008C -//7F015234: -OR V0,R0,R0 -//7F015238: set horizontal position -BEQ T2,R0,7F015248 ;V0=0 if 0 or 2 -ADDIU S6,V0,001E ;S6=V0+1E: account for upper margin -BEQ R0,R0,7F01524C ;V0=AF if 1 or 3 -ADDIU V0,R0,00AF -//7F015248: -OR V0,R0,R0 -//7F01524C: sets the scissor to clip each subsection -ADDIU T3,V0,002C ;T3=V0+2C: account for left margin -MTC1 T3,F4 -ADDIU S0,S6,0005 ;S0=S6+5: account for upper edge -MTC1 S0,F16 -CVT.S.W F6,F4 ;F6=(float) horizontal position -ADDIU T3,V0,00CF -ADDIU T9,S6,0087 ;T9=upper margin + 87 -LUI AT,ED00 -OR V1,S5,R0 -CVT.S.W F18,F16 ;F18=(float) vertical position -MUL.S F8,F6,F20 ;F8=horz.pos * 4.0: -ADDIU S1,V0,007D -SLTIU S2,S4,0001 -ADDIU S5,S5,0008 -MUL.S F4,F18,F20 ;F4=vert.pos.* 4.0 -TRUNC.W.S F10,F8 -MTC1 T3,F8 -TRUNC.W.S F6,F4 -MFC1 T5,F10 ;T5=F10: upper left x position -MTC1 T9,F4 -CVT.S.W F10,F8 ;F10= 0xCF -MFC1 T0,F6 ;T0=F6: upper left y position -ANDI T6,T5,0FFF -SLL T7,T6,0xC ;T7=ulx -OR T8,T7,AT ;T8=rdp_setscissor (U) | ulx -CVT.S.W F6,F4 ;F6= 0x87 -MUL.S F16,F10,F20 ;F16=F10 * 4.0 -ANDI T1,T0,0FFF -OR T2,T8,T1 -SW T2,0000 (V1) ;T2->DL+0: rdp_setscissor (U) -MUL.S F8,F6,F20 ;F8=F6 * 4.0 -TRUNC.W.S F18,F16 -TRUNC.W.S F10,F8 -MFC1 T5,F18 -MFC1 T8,F10 -ANDI T6,T5,0FFF -SLL T7,T6,0xC -ANDI T1,T8,0FFF -OR T2,T7,T1 -SW T2,0004 (V1) ;T2->DL+4: rdp_setscissor (L) -//7F0152EC: -BEQ S2,R0,7F015388 -SW S1,00B4 (SP) -//7F0152F4: write "Select Teams" in corner -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C58 ;A0="Select Teams" -LW T3,0000 (S8) -OR S3,V0,R0 -ADDIU A0,SP,00A4 -ADDIU A1,SP,00A0 -OR A2,V0,R0 -LW A3,0000 (S7) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T3,0010 (SP) -LW T4,00A0 (SP) -SW S0,0098 (SP) -SRA T5,T4,0x1 -SUBU T6,S1,T5 -JAL 7000441C ;V0=text clip height -SW T6,009C (SP) -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LW T0,0000 (S7) -LW T8,0000 (S8) -ADDIU T7,R0,00FF -SW T7,0018 (SP) -OR A0,S5,R0 -ADDIU A1,SP,009C -ADDIU A2,SP,0098 -OR A3,S3,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0010 (SP) -JAL 7F009760 ;writes text to screen -SW T8,0014 (SP) -//7F015384: -OR S5,V0,R0 -LUI T1,8003 -LW T1,B540 (T1) ;T1=8002B540: scenario -ADDIU AT,R0,0005 -LUI T3,8007 -BNE T1,AT,7F0153C0 ;branch if not team 2vs2 -NOP -BNEZ S2,7F0153B8 -OR V0,S2,R0 -LUI T2,8007 -LW T2,9788 (T2) ;T2=80069788: -XOR V0,S4,T2 -SLTIU V0,V0,0001 -BEQ R0,R0,7F0153CC -OR S0,V0,R0 -//7F0153B8: -LW T3,9788 (T3) -XOR S0,S4,T3 -SLTU S0,R0,S0 -BEQ S0,R0,7F0153E4 -NOP -//7F0153CC: red team -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C59 ;A0="Red Team" -BEQ R0,R0,7F0153F0 -OR S1,V0,R0 ;S1=p->text -//7F0153DC: blue team -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C5A ;A0="Blue Team" -OR S1,V0,R0 ;S1=p->text -BEQ S0,R0,7F015404 -ADDIU A0,SP,0090 -LUI S2,FF00 -BEQ R0,R0,7F015408 -ORI S2,S2,00FF ;S2=FF0000FF: red -//7F015404: blue team -ORI S2,R0,FFFF ;S2=0000FFFF: blue -//7F015408: red team -LW T4,0000 (S8) -ADDIU A1,SP,008C -OR A2,S1,R0 -LW A3,0000 (S7) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) -LW T8,0090 (SP) -LW T6,008C (SP) -LW T5,00B4 (SP) -LUI V0,8007 -LW V0,9788 (V0) ;V0=80069788: selected -SRA T7,T8,0x1 -SUBU T1,S6,T7 -SRA T9,T6,0x1 -ADDIU T2,T1,0046 -SUBU T0,T5,T9 -SW T0,0088 (SP) -BNE S4,V0,7F015470 -SW T2,0084 (SP) -BNE S4,V0,7F0154C4 -LUI T3,8003 -LW T3,B560 (T3) ;T3=8002B560: blink register -SLTI AT,T3,000A ;TRUE if T3<10 -BEQL AT,R0,7F0154C8 ;branch if false -LW T9,00CC (SP) ;SP+CC= #players -//7F015470: -JAL 7000441C ;V0=text clip height -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LW T6,0000 (S7) -LW T5,0000 (S8) -OR A0,S5,R0 -ADDIU A1,SP,0088 -ADDIU A2,SP,0084 -OR A3,S1,R0 -SW S2,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0010 (SP) -JAL 7F009760 ;writes text to screen -SW T5,0014 (SP) -OR S5,V0,R0 ;S5=V0: DL -//7F0154C4: -LW T9,00CC (SP) ;SP+CC= #players -ADDIU S4,S4,0001 ;S4++ playercount++ -BNEL S4,T9,7F015224 ;loop for each player -SLTI AT,S4,0002 -JAL 7F0ACEF0 ;combiner: bayer, lod, perspective -OR A0,S5,R0 ;A0=S5: DL -//7F0154DC: -LW RA,0064 (SP) -LDC1 F20,0038 (SP) -LW S0,0040 (SP) -LW S1,0044 (SP) -LW S2,0048 (SP) -LW S3,004C (SP) -LW S4,0050 (SP) -LW S5,0054 (SP) -LW S6,0058 (SP) -LW S7,005C (SP) -LW S8,0060 (SP) -JR RA -ADDIU SP,SP,00D0 diff --git a/notes/GE Documentation/Main Menus/MP menus/trace of random stage select value.txt b/notes/GE Documentation/Main Menus/MP menus/trace of random stage select value.txt deleted file mode 100644 index 63079f7..0000000 --- a/notes/GE Documentation/Main Menus/MP menus/trace of random stage select value.txt +++ /dev/null @@ -1,150 +0,0 @@ -break on random level select read (FFFFFFFF) - -7F010D78: -LW V0,B07C (V0) [V0=8002B07C=FFFFFFFF] -BGEZ V0,7F010DD0 -NOP -JAL 7000A450 -NOP - -7000A450: -LUI A0,8002 -LD A0,4460 (A0) [A0=80024460=00000000-057DC330] -LUI AT,8002 -DSLL32 A2,A0,0x1F [A2=0] -DSLL A1,A0,0x1F [A1=2BEE1998-00000000] -DSRL A2,A2,0x1F [A2=0] -DSRL32 A1,A1,0x0 [A1=00000000-2BEE1998] -DSLL32 A0,A0,0xC [A0=C3300000-00000000] -OR A2,A2,A1 [A2=00000000-2BEE1998] -DSRL32 A0,A0,0x0 [A0=00000000-C3300000] -XOR A2,A2,A0 [A2=00000000-E8DD1998] -DSRL A0,A2,0x14 [A0=00000000-00000E8D] -ANDI A0,A0,0FFF [A0=0E8D] -XOR A0,A0,A2 [A0=E8DD1715] -DSLL32 V0,A0,0x0 [V0=E8DD1715-00000000] -SD A0,4460 (AT) [80024460=A0=00000000-E8DD1715] -JR RA -DSRA32 V0,V0,0x0 [V0=E8DD1715] - -7F010D8C: -ADDIU AT,R0,000B [AT=000B] -DIVU V0,AT -MFHI V1 [V1=5] -SLL T0,V1,0x2 [T0=14] -SUBU T0,T0,V1 [T0=F] -SLL T0,T0,V1 [T0=78] -LUI T1,8003 -ADDU T1,T1,T0 [T1=80030078] -LW T1,B094 (T1) [T1=8002B10C=2E] -LUI AT,8003 -ADDIU A0,V1,0001 [A0=6] -JAL 7F0100D0 -SW T1,A8F4 (AT) [8002A8F4=2E] - -anyway, it goes on from here, but that was all to get a stage number... - -for weapons, it would almost be better to get a number that is pseudo-random (like a time counter or VI reg) and just mask it. - ------------------------------------------ -DISPLAY weapon routine! -(3b363c...) - -7F0C65F8: (3065f8) -3C0E8005 LUI T6,8005 -8DCE9160 LW T6,9160 (T6) [T6=80049160=0B; selection] -3C188005 LUI T8,8005 -271890F0 ADDIU T8,T8,90F0 [T8=800490F0] -000E78C0 SLL T7,T6,0x3 [T7=58] -03E00008 JR RA -01F81021 ADDU V0,T7,T8 [V0=address=80049148 (ROCKETS)] - -etc... - -!!!!!!!!!!!!!!!!!!!!! -Load! weapon routine -ref: 8004ef30 - 8004ef50 -hits them in order: -8004ef30 -so, just jump out at 8004ef30, do something, grab the next flag and jump to it -...7f002850 -LW T6,EF30 (AT) [T6=8004EF30+offset] -JR T6 -NOP - - -7F002870: -JAL 7F0C6614 -SW A3,002C (SP) - -7F0C6614: -LUI T6,8005 -LW T6,9160 (T6) [T6=80049160=selected weapon=B] -LUI V0,8005 -SLL T7,T6,0x3 [T7=58] -ADDU V0,V0,T7 [V0=80050058] -JR RA -LW V0,90F4 (V0) [V0=8004914C=80048EB0] - - -7F002878: - - -------------------- -here's my routine -selects between 0-D (1-D if not first slot...) - - -8C2E9160 LW T6,9160 (T7) [T6=80049160=selected weapon] -15C00008 BNEZ T6,+6 [skip this routine otherwise] -3C0E8002 LUI T6,8002 - -8DCE30F4 LW T6,30F4 (T6) [load pseudo-random number] -31CE000F ANDI T6,T6,0xF [T6 is 0-F] -2DC2000D SLTI V0,T6,000D [if T6right of controller A0's control stick -OR A0,R0,R0 -SLTI AT,V0,FFFB -BNEZ AT,7F00BC4C -NOP -JAL 7000C0EC ;V0= current position left<->right of controller A0's control stick -OR A0,R0,R0 -SLTI AT,V0,0006 -BEQ AT,R0,7F00BC4C -NOP -JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -OR A0,R0,R0 -SLTI AT,V0,FFFB -BNEZ AT,7F00BC4C -NOP -JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -OR A0,R0,R0 -SLTI AT,V0,0006 -BNEZ AT,7F00BC58 -LUI T6,8003 -//7F00BC4C: reset inactivity timer -LUI AT,8003 -BEQ R0,R0,7F00BC70 -SW R0,A8CC (AT) ;0->8002A8CC: timer -//7F00BC58: increment inactivity timer -LUI T7,8005 -LW T7,8374 (T7) ;T7=80048374: value tied to FPS control and monitor timers -LW T6,A8CC (T6) ;T6=8002A8CC: timer -LUI AT,8003 -ADDU T8,T6,T7 ;T8=timer+value -SW T8,A8CC (AT) ;revised time -> 8002A8CC -//7F00BC70: -LUI AT,4270 -MTC1 AT,F12 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A1C (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A20 (AT) -JAL 70004534 -OR A0,R0,R0 -LUI T9,8003 -ADDIU T9,T9,AB94 ;T9=8002AB94: -LUI S0,8003 -LUI S1,8007 -MTC1 R0,F20 -ADDIU S1,S1,9620 ;S1=80069620: -ADDIU S0,S0,A95C ;S0=8002A95C: p->object instance -SW T9,0054 (SP) -OR S2,R0,R0 -ADDIU S3,SP,0088 -LUI AT,3F80 -MTC1 AT,F4 -MFC1 A1,F20 -MFC1 A2,F20 -ADDIU A0,SP,00C8 -LUI A3,457A -SWC1 F20,0010 (SP) -SWC1 F20,0014 (SP) -SWC1 F20,0018 (SP) -SWC1 F20,001C (SP) -SWC1 F20,0024 (SP) -JAL 7F059694 -SWC1 F4,0020 (SP) -LW A0,0054 (SP) -JAL 7F058964 ;initializes A1 and copies position data from A0 to A1+30 -OR A1,S3,R0 -LUI AT,8005 -LWC1 F12,1A24 (AT) -JAL 7F058A7C ;multiply matrix A1 by F12? -OR A1,S3,R0 -ADDIU A0,SP,00C8 -JAL 7F058068 -OR A1,S3,R0 -LW T0,0000 (S0) -LW T1,0008 (T0) -LH A0,000E (T1) -SLL T2,A0,0x6 -JAL 7F0BD714 ;allocates A0 space in geometry memory [8008C24C] -OR A0,T2,R0 -LW T3,0000 (S0) -OR A0,S3,R0 -SW V0,000C (T3) -LW T4,0000 (S0) -JAL 7F058020 -LW A1,000C (T4) -LW A0,0000 (S0) -LW T5,000C (A0) -LWC1 F6,0030 (T5) -SWC1 F6,0000 (S1) -LW T6,000C (A0) -LWC1 F8,0034 (T6) -SWC1 F8,0004 (S1) -LW T7,000C (A0) -LWC1 F10,0038 (T7) -JAL 7F00B724 ;disable all switches in object A0 -SWC1 F10,0008 (S1) -JAL 7F01EBD0 -OR A0,S2,R0 -LW A0,0000 (S0) -JAL 7F00B808 ;selects and loads the Bond picture used on folders -OR A1,V0,R0 -LW A0,0000 (S0) -ADDIU A1,R0,000E ;A1=E: shadow beneath photo -JAL 7F00B7C0 ;set offset A1 in obj.inst. A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LW A0,0000 (S0) -ADDIU A1,R0,000D ;A1=D: folder select screen -JAL 7F00B7C0 ;set offset A1 in obj.inst. A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LW T8,0054 (SP) -ADDIU S2,S2,0001 -ADDIU AT,R0,0004 -ADDIU T9,T8,000C -SW T9,0054 (SP) -ADDIU S0,S0,0004 -BNE S2,AT,7F00BCD0 -ADDIU S1,S1,000C -LUI V0,8003 -ADDIU V0,V0,A8E8 ;V0=8002A8E8 -LW A0,0000 (V0) ;A0=8002A8E8: sel.folder# -ADDIU AT,R0,0064 -BLTZ A0,7F00BE30 ;branch if -1 (none selected) -NOP -BNE A0,AT,7F00BE04 ;branch if != 64 (blank) -LUI T0,8003 -LW A0,A8EC (T0) ;A0=8002A8EC: folder# on stack? -SW A0,0000 (V0) ;folder#->8002A8E8: sel.folder# -//7F00BE04: -BLTZ A0,7F00BE14 ;branch if no folder# selected -SLTI AT,A0,0004 -BNEZ AT,7F00BE1C ;branch if valid folder 0-3 -NOP -//7F00BE14: -SW R0,0000 (V0) ;0->8002A8E8: sel.folder# = 0 (default) -OR A0,R0,R0 ;A0=0 -//7F00BE1C: -JAL 7F00BB68 ;toggle deletion minimenu on folder A0 -NOP -ADDIU S1,R0,FFFF -LUI AT,8003 -SW S1,A8E8 (AT) ;-1->8002A8E8: no folder selected -//7F00BE30: interface for folder deletion minimenu: press left on minimenu -LUI T1,8003 -LW T1,A91C (T1) ;T1=8002A91C: folder# being deleted -ADDIU S1,R0,FFFF ;S1=-1 -OR S2,R0,R0 ;S2=0 -BLTZ T1,7F00BFEC ;branch if -1 (not deleting a folder) -LUI S0,8003 -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;V0=buttons A1 pressed -ADDIU A1,R0,0222 ;A1=0222: d-left, c-left, L -BEQ V0,R0,7F00BE90 ;branch if buttons not pressed -LUI S0,8003 -ADDIU S0,S0,A920 ;S0=8002A920 -LW T2,0000 (S0) ;T2=8002A920: selected option (0-confirm : 1-cancel) -LUI S3,8006 -ADDIU S3,S3,3720 ;S3=80063720 -BNEZ T2,7F00BE90 ;branch if cancel already highlighted -ADDIU T3,R0,0001 -SW T3,0000 (S0) ;1->8002A920: highlight cancel -LW A0,0000 (S3) ;A0=80063720: SE buffer -ADDIU A1,R0,0012 ;A1=012: tap SE -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -OR A2,R0,R0 ;A2=0: NULL p->data -BEQ R0,R0,7F00BED0 -NOP -//7F00BE90: press right on deletion minimenu -LUI S0,8003 -ADDIU S0,S0,A920 ;S0=8002A920 -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;V0=buttons A1 pressed -ADDIU A1,R0,0111 ;A1=0111: d-right, c-right, R -BEQ V0,R0,7F00BED0 ;branch if no puttons pressed -NOP -LW T4,0000 (S0) ;T4=8002A920: highlighted option -LUI S3,8006 -ADDIU S3,S3,3720 ;S3=80063720 -BEQ T4,R0,7F00BED0 ;branch if confirm already highlighted -ADDIU A1,R0,0012 ;A1=012: tap SE -SW R0,0000 (S0) ;0->8002A920: confirm selected -LW A0,0000 (S3) ;A0=80063720: SE buffer -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -OR A2,R0,R0 ;A2=0: NULL p->data -//7F00BED0: detect control stick left on minimenu -LUI S3,8006 -ADDIU S3,S3,3720 ;S3=80063720 -JAL 7000C0EC ;return state of control stick L<->R -OR A0,R0,R0 ;A0=0: controller 1 -SLTI AT,V0,FFD3 -BEQ AT,R0,7F00BF14 ;branch if not left enough -NOP -LW T5,0000 (S0) ;T5=8002A920: highlighted option -ADDIU T6,R0,0001 -ADDIU A1,R0,0012 ;A1=012: tap SE -BNEZ T5,7F00BF14 ;branch if already selected -OR A2,R0,R0 ;A2=0: NULL p->data -SW T6,0000 (S0) ;1->8002A920: cancel selected -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -LW A0,0000 (S3) ;A0=80063720: SE buffer -BEQ R0,R0,7F00BF4C -OR A0,R0,R0 ;A0=0: controller 1 -//7F00BF14: detect control stick right on minimenu -JAL 7000C0EC ;return state of control stick L<->R -OR A0,R0,R0 ;A0=0: controller 1 -SLTI AT,V0,002E -BNEL AT,R0,7F00BF4C ;branch if not right enough -OR A0,R0,R0 ;A0=0: controller 1 -LW T7,0000 (S0) ;T7=8002A920: highlighted option -ADDIU A1,R0,0012 ;A1=012: tap SE -OR A2,R0,R0 ;A2=0: NULL p->data -BEQL T7,R0,7F00BF4C ;branch if already set -OR A0,R0,R0 -SW R0,0000 (S0) ;0->8002A920: confirm highlighted -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -LW A0,0000 (S3) ;A0=80063720: SE buffer -OR A0,R0,R0 ;A0=0: controller 1 -//7F00BF4C: test if selected highlighted minimenu option -JAL 7000C3AC ;V0=buttons A1 pressed -ORI A1,R0,B000 ;A1=B000: A, Z, start -BEQL V0,R0,7F00BFB4 ;branch if no button pressed -OR A0,R0,R0 -LW T8,0000 (S0) ;T8=8002A920: highlighted option -LUI A0,8003 -ADDIU A1,R0,0076 ;A1=076: SE -BNEZ T8,7F00BF90 ;branch if cancel is selected -OR A2,R0,R0 ;A2=NULL p->data -JAL 7F01EC04 ;delete eeprom file A0 -LW A0,A91C (A0) ;A0=8002A91C: folder# being deleted -LW A0,0000 (S3) ;A0=80063720: SE buffer -ADDIU A1,R0,0076 ;A1=076: SE -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -OR A2,R0,R0 ;A2=NULL p->data -BEQ R0,R0,7F00BF98 -NOP -//7F00BF90: cancel minimenu -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -LW A0,0000 (S3) ;A0=80063720: SE buffer -//7F00BF98: remove menu from screen -LUI A0,8003 -JAL 7F00BB68 ;toggle deletion minimenu on folder A0 -LW A0,A91C (A0) ;A0=8002A91C: folder# being deleted -LUI AT,8003 -BEQ R0,R0,7F00C31C -SW S1,A91C (AT) ;S1->8002A91C: reset to -1 (no folder selected for deletion) -//7F00BFB0: test if exiting minimenu -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;V0=buttons A1 pressed -ADDIU A1,R0,4000 ;A1=4000: B -BEQ V0,R0,7F00C31C ;branch if no button pressed -LUI A0,8003 -JAL 7F00BB68 ;toggle deletion minimenu on folder A0 -LW A0,A91C (A0) ;A0=8002A91C: folder# being deleted -LUI AT,8003 -SW S1,A91C (AT) ;S1->8002A91C: reset to -1 (no folder selected for deletion) -LW A0,0000 (S3) ;A0=80063720: SE buffer -ADDIU A1,R0,0076 ;A1=076: SE -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -OR A2,R0,R0 ;A2=NULL p->data -BEQ R0,R0,7F00C31C -NOP -//7F00BFEC: -LUI S1,8007 -ADDIU S1,S1,9620 ;S1=80069620 -ADDIU S0,S0,A95C ;S0=8002A95C -ADDIU S3,SP,007C -ADDIU T9,SP,0074 -SW T9,0010 (SP) -LW A0,0000 (S0) ;A0=8002A95C: p->object instance -ADDIU A1,SP,0080 -OR A2,S3,R0 -JAL 7F03F90C -ADDIU A3,SP,0078 -ADDIU T0,SP,0064 -SW T0,0010 (SP) -OR A0,S1,R0 ;A0=S1: 80069620 -OR A1,S3,R0 ;A1=S3: -ADDIU A2,SP,0074 -JAL 7F03F948 -ADDIU A3,SP,006C -LUI AT,8003 -LWC1 F2,A908 (AT) ;F2=8002A908: horz.cur.pos. -LWC1 F16,006C (SP) -LWC1 F18,0064 (SP) -C.LE.S F16,F2 -NOP -BC1FL 7F00C188 -ADDIU S2,S2,0001 -C.LE.S F2,F18 -LUI AT,8003 -LWC1 F4,0070 (SP) -BC1FL 7F00C188 -ADDIU S2,S2,0001 -LWC1 F0,A90C (AT) ;F0=8002A90C: vert.cur.pos. -LWC1 F6,0068 (SP) -C.LE.S F4,F0 -NOP -BC1FL 7F00C188 -ADDIU S2,S2,0001 -C.LE.S F0,F6 -OR A0,S2,R0 -ADDIU A1,SP,0060 -BC1FL 7F00C188 -ADDIU S2,S2,0001 -JAL 7F01E874 -ADDIU A2,SP,005C -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;V0=buttons A1 pressed -ORI A1,R0,B000 ;A1=B000: A, Z, start -BEQL V0,R0,7F00C188 ;branch if none pressed -ADDIU S2,S2,0001 -LUI S1,8003 -ADDIU S1,S1,A918 -LW V0,0000 (S1) -LUI S3,8006 -ADDIU S3,S3,3720 -BNEZ V0,7F00C0EC -LUI AT,8003 -SW S2,A8E8 (AT) -LW A0,0000 (S3) ;A0=80063720: SE buffer -ADDIU A1,R0,004D ;A1=04D: SE -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -OR A2,R0,R0 ;A2=NULL p->data -LUI S3,8006 -BEQ R0,R0,7F00C1A8 -ADDIU S3,S3,3720 -//7F00C0EC: -ADDIU AT,R0,0001 -BNEL V0,AT,7F00C12C -ADDIU AT,R0,0002 -JAL 7F01EDA0 -OR A0,S2,R0 -LUI S3,8006 -ADDIU S3,S3,3720 -SW R0,0000 (S1) -LW A0,0000 (S3) ;A0=80063720: SE buffer -ADDIU A1,R0,004F ;A1=04F: SE -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -OR A2,R0,R0 ;A2=NULL p->data -LUI S3,8006 -BEQ R0,R0,7F00C1A8 -ADDIU S3,S3,3720 -//7F00C128: -ADDIU AT,R0,0002 -BNE V0,AT,7F00C178 -NOP -LW T1,0060 (SP) -LUI S3,8006 -ADDIU S3,S3,3720 -BLTZ T1,7F00C168 -ADDIU A1,R0,0012 ;A1=012: SE -LW T2,005C (SP) -LUI S0,8003 -ADDIU S0,S0,A920 ;S0=8002A920 -BLTZ T2,7F00C168 ;branch if not deleting -LUI AT,8003 -SW S2,A91C (AT) ;S2->8002A91C: folder# selected for deleteion -ADDIU T3,R0,0001 -SW T3,0000 (S0) ;1->8002A920: set to cancel -//7F00C168: -SW R0,0000 (S1) -LW A0,0000 (S3) ;A0=80063720: SE buffer -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -OR A2,R0,R0 ;A2=NULL p->data -//7F00C178: -LUI S3,8006 -BEQ R0,R0,7F00C1A8 -ADDIU S3,S3,3720 ;S3=80063720: SE buffer -//7F00C184: -ADDIU S2,S2,0001 -ADDIU AT,R0,0004 -ADDIU S0,S0,0004 -BNE S2,AT,7F00BFFC -ADDIU S1,S1,000C -LUI S3,8006 -LUI S1,8003 -ADDIU S1,S1,A918 ;S1=8002A918 -ADDIU S3,S3,3720 ;S3=80063720 -//7F00C1A8: detect if something is selected -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;V0=buttons A1 pressed -ORI A1,R0,B000 ;A1=B000: A, Z, start -BEQ V0,R0,7F00C2E0 ;branch if no buttons were pressed -LUI V0,8003 -//7F00C1BC: detect if copy selected -ADDIU V0,V0,ABC4 ;V0=8002ABC4 -LUI AT,8003 -LWC1 F2,A908 (AT) ;F2=8002A908: horz.cursor pos. -LWC1 F8,0000 (V0) -C.LE.S F8,F2 -NOP -BC1F 7F00C23C -NOP -LWC1 F10,0008 (V0) -LUI AT,8003 -C.LE.S F2,F10 -NOP -BC1F 7F00C23C -NOP -LWC1 F0,A90C (AT) -LWC1 F16,0004 (V0) -C.LE.S F16,F0 -NOP -BC1F 7F00C23C -NOP -LWC1 F18,000C (V0) -ADDIU T4,R0,0001 -ADDIU A1,R0,00DE ;A1=0DE: SE -C.LE.S F0,F18 -OR A2,R0,R0 ;A2=NULL p->data -BC1F 7F00C23C -NOP -SW T4,0000 (S1) ;1->8002A918: use copy icon -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -LW A0,0000 (S3) ;A0=80063720: SE buffer -BEQ R0,R0,7F00C314 -NOP -//7F00C23C: detect if delete icon was selected -LUI V0,8003 -ADDIU V0,V0,ABD4 ;V0=8002ABD4 -LWC1 F4,0000 (V0) ;F4=8002ABD4: delete horz. left bounds -C.LE.S F4,F2 -NOP -BC1FL 7F00C2BC ;branch if l.bounds>=horz.cur.pos. -LW T6,0000 (S1) ;T6=8002A918: cursor icon -LWC1 F6,0008 (V0) ;F6=8002ABDC: delete horz. right bounds -LUI AT,8003 -C.LE.S F2,F6 -NOP -BC1FL 7F00C2BC ;branch if horz.cur.pos.>=r.bounds -LW T6,0000 (S1) ;T6=8002A918: cursor icon -LWC1 F0,A90C (AT) ;F0=8002A90C: vert.cur.pos -LWC1 F8,0004 (V0) ;F8=8002ABD8: delete vert. upper bounds -C.LE.S F8,F0 -NOP -BC1FL 7F00C2BC ;branch if u.bounds>=vert.cur.pos. -LW T6,0000 (S1) ;T6=8002A918: cursor icon -LWC1 F10,000C (V0) ;F10=8002ABE0: delete vert. lower bound -ADDIU T5,R0,0002 -ADDIU A1,R0,00DE ;A1=0DE: SE -C.LE.S F0,F10 -OR A2,R0,R0 ;A2=NULL p->data -BC1FL 7F00C2BC ;branch if vert.cur.pos>=l.bound -LW T6,0000 (S1) ;T6=8002A918: cursor icon -SW T5,0000 (S1) ;2->8002A918: set to delete icon -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -LW A0,0000 (S3) ;A0=80063720: SE buffer -BEQ R0,R0,7F00C314 -NOP -//7F00C2B8: if no folder or icon was target, set to sight -LW T6,0000 (S1) ;T6=8002A918: cursor icon -ADDIU A1,R0,0076 ;A1=076: SE -OR A2,R0,R0 ;A2=NULL p->data -BEQ T6,R0,7F00C314 ;skip if already set to sight icon -NOP -SW R0,0000 (S1) ;0->8002A918: set to sight icon -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -LW A0,0000 (S3) ;A0=80063720: SE buffer -BEQ R0,R0,7F00C314 -NOP -//7F00C2E0: on cancel, set cursor to sight icon -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;V0=buttons A1 pressed -ADDIU A1,R0,4000 ;A1=4000: B -BEQ V0,R0,7F00C314 ;branch if not pressed -NOP -LW T7,0000 (S1) ;T7=8002A918: cursor icon -ADDIU A1,R0,0076 ;A1=076: SE -OR A2,R0,R0 ;A2=NULL p->data -BEQ T7,R0,7F00C314 ;skip if already set to sight icon -NOP -SW R0,0000 (S1) ;0->8002A918: set to sight icon -JAL 70008E08 ;play SE A1 in buffer A0 using data A2 -LW A0,0000 (S3) ;A0=80063720: SE buffer -//7F00C314: -JAL 7F009B84 ;probably detects if a folder is selected -NOP -//7F00C31C: advance to selected folder -LUI T8,8003 -LW T8,A8E8 (T8) ;T8=8002A8E8: selected folder# -BLTZ T8,7F00C344 ;branch if -1 (not selected) -ADDIU A0,R0,0006 ;A0=6: mode select -JAL 7F01A5D4 ;set menu A0 in mode A1: replace w/ mode select -OR A1,R0,R0 ;A1=0: current -JAL 7F00D7FC ;??? - uses mode A0 -OR A0,R0,R0 ;A0=0: mode=solo -BEQ R0,R0,7F00C368 ;return -LW RA,0044 (SP) -//7F00C344: if timer over 30sec, return to legal screen -LUI T9,8003 -LW T9,A8CC (T9) ;T9=8002A8CC: timer -OR A0,R0,R0 ;A0=0: legal screen -SLTI AT,T9,0709 ;TRUE if timer < 709 (30 secs) -BNEL AT,R0,7F00C368 ;branch if still time left -LW RA,0044 (SP) -JAL 7F01A5D4 ;set menu A0 in mode A1: legal screen on return -ADDIU A1,R0,0001 ;A1=1: return -LW RA,0044 (SP) -//7F00C368: return -LDC1 F20,0028 (SP) -LW S0,0034 (SP) -LW S1,0038 (SP) -LW S2,003C (SP) -LW S3,0040 (SP) -JR RA -ADDIU SP,SP,0110 - -+_+ - -7F00BB68 40698 toggle minimenu - accepts: A0=folder# -SLL T6,A0,0x2 -ADDIU SP,SP,FFE0 -SUBU T6,T6,A0 -LUI T7,8007 -SW RA,0014 (SP) -ADDIU T7,T7,9620 -SLL T6,T6,0x2 ;T6=A0*0xC -ADDU A0,T6,T7 ;A0=80069620+offset: -JAL 7F077FF4 ;retrieve screen coordinates -ADDIU A1,SP,0018 ;A1=SP+18: -//7F00BB90: -LUI AT,BF80 -MTC1 AT,F6 ;F6=-1.0 (BF800000) -LWC1 F4,0018 (SP) ;F4=SP+18: xpos -LUI AT,8003 -LWC1 F10,001C (SP) ;F10=SP+1C: ypos -ADD.S F8,F4,F6 ;F8=F4-1: -LW RA,0014 (SP) -ADDIU SP,SP,0020 -SWC1 F8,A908 (AT) ;F8->8002A908: xcurpos=xpos-1 -LUI AT,41A0 -MTC1 AT,F16 ;F16=20.0 (41A00000) -LUI AT,8003 -ADD.S F18,F10,F16 ;F18=F10+20: -JR RA -SWC1 F18,A90C (AT) ;F18->8002A90C: ycurpos=ypos+20 - -+_+ - -7F077FF4 - accepts: A0=p->screen positions, A1=&ret.positions - Struct for A0: - 0x0 4 [float] x position - 0x4 4 [float] y position - 0x8 4 [float] z position - Struct for A1: - 0x0 4 [float] x position - 0x4 4 [float] y position -LUI AT,3F80 -MTC1 AT,F4 ;F4=1.0 (3F800000) -LWC1 F6,0008 (A0) ;F6=A0+8: -LWC1 F8,0004 (A0) ;F8=A0+4: -LUI V1,8008 -DIV.S F0,F4,F6 ;F0=1 / F6 -ADDIU V1,V1,A0B0 -LW V0,0000 (V1) ;V0=8007A0B0: BONDdata -LWC1 F16,10C0 (V0) ;F16=BONDdata+10C0: -LWC1 F4,109C (V0) ;F4=BONDdata+109C: -LWC1 F6,10B0 (V0) ;F6=BONDdata+10B0: -MUL.S F10,F8,F0 ;F10=A0+4 / A0+8 -ADD.S F8,F4,F6 ;F8=BONDdata+109C + BONDdata+10B0 -MUL.S F18,F10,F16 ;F18=F10 * BONDdata+10C0 -ADD.S F10,F18,F8 ;F10=F18+F8 -SWC1 F10,0004 (A1) ;F10->A1+4 -// -LWC1 F18,0000 (A0) ;F18=A0+0: -LW V0,0000 (V1) ;V0=8007A0B0: BONDdata -MUL.S F8,F18,F0 ;F8=A0+0 / A0+8 -LWC1 F16,1098 (V0) ;F16=BONDdata+1098: -LWC1 F4,10AC (V0) ;F4=BONDdata+10AC: -LWC1 F10,10BC (V0) ;F10=BONDdata+10BC: -ADD.S F6,F16,F4 ;F6=F16+F4 -MUL.S F16,F8,F10 ;F16=F8 * F10 -SUB.S F4,F6,F16 ;F4=F6-F16 -JR RA -SWC1 F4,0000 (A1) ;F4->A1+0: - diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 05 - file select/7F00C408 - menu 05 constructor - file select screen.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 05 - file select/7F00C408 - menu 05 constructor - file select screen.txt deleted file mode 100644 index 1e2282c..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 05 - file select/7F00C408 - menu 05 constructor - file select screen.txt +++ /dev/null @@ -1,1044 +0,0 @@ -7F00C408 40F38 menu 05 constructor: folder select screen -ADDIU SP,SP,FE48 -LUI T6,8003 -SW RA,0064 (SP) -SW S8,0060 (SP) -SW S7,005C (SP) -SW S6,0058 (SP) -SW S5,0054 (SP) -SW S4,0050 (SP) -SW S3,004C (SP) -SW S2,0048 (SP) -SW S1,0044 (SP) -SW S0,0040 (SP) -SW A0,01B8 (SP) -ADDIU T6,T6,AF2C -LW AT,0000 (T6) ;AT=8002AF2C: -ADDIU S0,SP,01A8 ;S0=SP+1A8: -LUI T0,8003 -SW AT,0000 (S0) ;AT->SP+1A8 -LW T9,0004 (T6) ;T9=8002AF30: -ADDIU T0,T0,AF38 ;T0=8002AF38: -ADDIU S1,SP,019C ;S1=SP+19C: -SW T9,0004 (S0) ;T9->SP+1AC -LW AT,0008 (T6) -SW AT,0008 (S0) -LW AT,0000 (T0) -SW AT,0000 (S1) -LW T3,0004 (T0) -SW T3,0004 (S1) -LW AT,0008 (T0) -SW AT,0008 (S1) -JAL 7F01C0D0 ;insert image DL, stats at 800232A8 -LW A0,01B8 (SP) ;A0=SP+1B8: DL -// -ADDIU T4,V0,0008 ;T4=V0+8: DL+8 -SW T4,01B8 (SP) ;DL->SP+1B8 -LUI T5,FC16 -LUI T8,33FD -ORI T8,T8,F6FB ;T8=33FDF6FB -ORI T5,T5,7E2C ;T5=FC167E2C -SW T5,0000 (V0) ;DL+0=FC167E2C setcombine: a0=1 c0=C Aa0=7 Ac0=7 a1=1 c1=C -SW T8,0004 (V0) ;DL+4=33FDF6FB setcombine: b0=3 b1=3 Aa1=7 Ac1=7 d0=3 Ab0=7 Ad0=3 d1=3 Ab1=7 Ad1=3 -LW T7,01B8 (SP) ;T7=DL -LUI T9,FB00 -ADDIU T2,R0,FF14 -ADDIU T6,T7,0008 ;T6=DL+8 -SW T6,01B8 (SP) ;update DL -SW T2,0004 (T7) ;DL+4=0000FF14 setenvcolour: blue 8% -JAL 7000441C ;V0= text clip width -SW T9,0000 (T7) ;DL+0=FB000000 setenvcolour -// -MTC1 V0,F4 -LUI AT,C2A0 -MTC1 AT,F8 ;F8=-80.0 [C2A00000] -CVT.S.W F6,F4 ;F6=V0: text clip height -LUI AT,44A0 -MTC1 AT,F16 ;F16=1280.0 [44A00000] -MUL.S F10,F6,F8 ;F10=yclip * -80 -JAL 7F05C360 -DIV.S F12,F10,F16 ;F12=yclip * -1/16 -// -TRUNC.W.S F18,F0 -LW A0,01B8 (SP) -OR A2,S0,R0 -OR A3,S1,R0 -MFC1 A1,F18 -JAL 7F007CC8 -NOP -// -ADDIU T0,V0,0008 ;T0=V0+8: next DL op -SW T0,01B8 (SP) -LUI T3,0100 -LUI A1,0600 ;A1=06000000 -ADDIU T3,T3,0000 ;T3=01000000 -SW T3,0004 (V0) ;T3->DL+4: rsp_uc05_displaylist (L): segment 01 -SW A1,0000 (V0) ;A1->DL+0: rsp_uc05_displaylist (U): push DL -LW T4,01B8 (SP) -LUI T8,0100 -ADDIU T8,T8,0040 ;T8=01000040 -ADDIU T5,T4,0008 -SW T5,01B8 (SP) -LUI S2,8003 -LUI S4,8003 -ADDIU S4,S4,AF44 ;S4=8002AF44: -ADDIU S2,S2,A968 -ADDIU S3,SP,0108 -SW T8,0004 (T4) ;T3->DL+C: rsp_uc05_displaylist (L): segment 01, offset 0x40 -SW A1,0000 (T4) ;A1->DL+8: rsp_uc05_displaylist (U): push DL -// -ADDIU A0,SP,014C ;A0=SP+14C: buffer for ??? -OR T2,A0,R0 ;T2=A0 -OR T9,S4,R0 ;T9=S4: 8002AF44 -ADDIU T6,S4,003C ;T6=S4+3C: 8002AF80 -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T2,T2,000C -SW AT,FFF4 (T2) -LW AT,FFF8 (T9) -SW AT,FFF8 (T2) -LW AT,FFFC (T9) -BNE T9,T6,7F00C564 ;copy 0x40 zeroes from here to there -SW AT,FFFC (T2) -LW AT,0000 (T9) -ADDIU T1,R0,0003 -OR S1,R0,R0 -SW AT,0000 (T2) -LW T0,01B8 (SP) -SW T1,0154 (SP) -SW R0,0150 (SP) -LW A1,0000 (S2) -JAL 7F074684 -SW T0,0158 (SP) -// -LW T3,0158 (SP) -LW V0,0000 (S2) -OR S0,R0,R0 -SW T3,01B8 (SP) -LW T4,0008 (V0) -LH T5,000E (T4) -BLEZ T5,7F00C618 -NOP -LW T8,000C (V0) -OR A1,S3,R0 -JAL 7F058020 -ADDU A0,T8,S0 -LW T7,0000 (S2) -SLL T9,S1,0x6 -OR A0,S3,R0 -LW T6,000C (T7) -JAL 7F058C9C -ADDU A1,T6,T9 -LW V0,0000 (S2) -ADDIU S1,S1,0001 -ADDIU S0,S0,0040 -LW T2,0008 (V0) -LH T1,000E (T2) -SLT AT,S1,T1 -BNEL AT,R0,7F00C5D4 -LW T8,000C (V0) -LUI T0,8003 -ADDIU T0,T0,A95C -ADDIU S2,S2,FFFC -SLTU AT,S2,T0 -BEQL AT,R0,7F00C558 -ADDIU A0,SP,014C -JAL 7F0ACD98 -LW A0,01B8 (SP) -SW V0,01B8 (SP) -JAL 7F0ACB78 ;0->80040E84 -A0=0 -OR A0,R0,R0 -LUI T3,8007 -ADDIU T3,T3,9620 ;T3=80069620: -LUI S8,EBD8 -LUI S4,8004 -LUI S3,8004 -ADDIU S3,S3,0EB8 -ADDIU S4,S4,0EB4 -ORI S8,S8,79FF ;S8=EBD879FF: -SW T3,0074 (SP) -SW R0,01B4 (SP) -ADDIU S7,SP,00FC -ADDIU S6,SP,0100 -ADDIU S5,SP,00BC -LW A0,0074 (SP) -JAL 7F077FF4 -ADDIU A1,SP,00E4 -LUI T4,8003 -LW A0,01B4 (SP) -LW T4,A91C (T4) ;T4=8002A91C: folder selected for deletion or -1 -ADDIU A1,SP,00F0 -BNE A0,T4,7F00CA60 -NOP -JAL 7F05C360 -LWC1 F12,00E4 (SP) -TRUNC.W.S F4,F0 -LWC1 F12,00E8 (SP) -MFC1 S2,F4 -NOP -ADDIU S2,S2,FFCF -JAL 7F05C360 -SW S2,0100 (SP) -TRUNC.W.S F6,F0 -LW A1,0100 (SP) -ADDIU T6,R0,0032 -SW T6,0014 (SP) -MFC1 S0,F6 -LW A0,01B8 (SP) -ADDIU A3,A1,0063 -ADDIU A2,S0,0019 -ADDIU T7,A2,002A -SW T7,0010 (SP) -JAL 7F0AD014 ;draw coloured box -SW A2,00FC (SP) -SW V0,01B8 (SP) -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C17 ;A0=9C17: "Erase file?\r" -OR S1,V0,R0 -JAL 7F05C360 -LWC1 F12,00E4 (SP) -TRUNC.W.S F8,F0 -LWC1 F12,00E8 (SP) -MFC1 S2,F8 -NOP -ADDIU S2,S2,FFD1 -JAL 7F05C360 -SW S2,0100 (SP) -TRUNC.W.S F10,F0 -MFC1 S0,F10 -NOP -ADDIU S0,S0,001E -JAL 7000441C ;V0= text clip width -SW S0,00FC (SP) -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 -LW T0,0000 (S3) -LW T3,0000 (S4) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S1,R0 ;A3=S1: "Erase file?\r" -SW S8,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T3,0014 (SP) -SW V0,01B8 (SP) -// -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C18 ;A0=9C18: "cancel\r" -OR S1,V0,R0 -JAL 7F05C360 -LWC1 F12,00E4 (SP) -TRUNC.W.S F16,F0 -LWC1 F12,00E8 (SP) -MFC1 S2,F16 -NOP -ADDIU S2,S2,FFD1 -JAL 7F05C360 -SW S2,0100 (SP) -TRUNC.W.S F18,F0 -LUI T8,8003 -LW T8,A920 (T8) ;T8=8002A920: delete folder minimenu selected option (0-confirm : 1-cancel) -ADDIU A0,SP,00F8 -MFC1 S0,F18 -ADDIU A1,SP,00F4 -OR A2,S1,R0 -ADDIU S0,S0,0032 -BEQ T8,R0,7F00C890 -SW S0,00FC (SP) -LW T7,0000 (S4) -SW R0,00F4 (SP) -SW R0,00F8 (SP) -LW A3,0000 (S3) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T7,0010 (SP) -LW S0,00FC (SP) -LW S2,0100 (SP) -LW T6,00F4 (SP) -LW T9,00F8 (SP) -ADDIU T1,R0,0032 -ADDU A3,S2,T6 -ADDU T2,S0,T9 -SW T2,0010 (SP) -ADDIU A3,A3,0003 -SW T1,0014 (SP) -LW A0,01B8 (SP) -ADDIU A2,S0,FFFF -JAL 7F0AD014 ;draw coloured box -ADDIU A1,S2,FFFF -JAL 7000441C ;V0= text clip width -SW V0,01B8 (SP) -SLL S0,V0,0x10 -SRA T0,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T0,R0 -LW T3,0000 (S3) -LW T4,0000 (S4) -ADDIU T5,R0,FFFF -SW T5,0018 (SP) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S1,R0 ;A3=S1: "cancel\r" -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T4,0014 (SP) -BEQ R0,R0,7F00C8E4 -SW V0,01B8 (SP) -// -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LW T7,0000 (S3) -LW T6,0000 (S4) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S1,R0 ;A3=S1: "cancel\r" -SW S8,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T6,0014 (SP) -SW V0,01B8 (SP) -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C19 ;A0=9C19: "confirm\r" -OR S1,V0,R0 -JAL 7F05C360 -LWC1 F12,00E4 (SP) -LUI T9,8005 -LB T9,84D0 (T9) ;T9=800484D0: selected language -MOV.S F2,F0 -TRUNC.W.S F4,F2 -BLEZ T9,7F00C918 ;branch if english-ish -ADDIU V0,R0,FFFF -BEQ R0,R0,7F00C918 -ADDIU V0,R0,0017 -//7F00C918: -MFC1 T1,F4 -LWC1 F12,00E8 (SP) -ADDU S2,V0,T1 -ADDIU S2,S2,FFFF -JAL 7F05C360 -SW S2,0100 (SP) -TRUNC.W.S F6,F0 -LUI T3,8003 -LW T3,A920 (T3) ;T3=8002A920: delete folder minimenu selected option (0-confirm : 1-cancel) -ADDIU A0,SP,00F8 -MFC1 S0,F6 -ADDIU A1,SP,00F4 -OR A2,S1,R0 -ADDIU S0,S0,0032 -BEQ T3,R0,7F00C9B0 -SW S0,00FC (SP) -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LW T5,0000 (S3) -LW T8,0000 (S4) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S1,R0 ;A3=S1: "confirm\r" -SW S8,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T8,0014 (SP) -BEQ R0,R0,7F00CD04 -SW V0,01B8 (SP) -LW T7,0000 (S4) -SW R0,00F4 (SP) -SW R0,00F8 (SP) -LW A3,0000 (S3) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T7,0010 (SP) -LW S0,00FC (SP) -LW S2,0100 (SP) -LW T6,00F4 (SP) -LW T9,00F8 (SP) -ADDIU T1,R0,0032 -ADDU A3,S2,T6 -ADDU T2,S0,T9 -SW T2,0010 (SP) -ADDIU A3,A3,0003 -SW T1,0014 (SP) -LW A0,01B8 (SP) -ADDIU A2,S0,FFFF -JAL 7F0AD014 ;draw coloured box -ADDIU A1,S2,FFFF -JAL 7000441C ;V0= text clip width -SW V0,01B8 (SP) -SLL S0,V0,0x10 -SRA T0,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T0,R0 -LW T3,0000 (S3) -LW T4,0000 (S4) -ADDIU T5,R0,FFFF -SW T5,0018 (SP) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S1,R0 ;A3=S1: "confirm\r" -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T4,0014 (SP) -BEQ R0,R0,7F00CD04 -SW V0,01B8 (SP) -// -JAL 7F01E874 ;returns the highest stage and difficulty completed for eeprom folder A0 -ADDIU A2,SP,00EC -LW V0,00F0 (SP) -LW A0,00EC (SP) -BLTZL V0,7F00CD08 -LW T1,01B4 (SP) -BLTZL A0,7F00CD08 -LW T1,01B4 (SP) -JAL 7F00C384 ;writes available difficulties to screen -NOP -BEQ V0,R0,7F00CB6C -ADDIU A0,SP,00D0 -JAL 7000A770 ;V0= strcpy(A0,A1) -OR A1,V0,R0 -LUI A1,8005 -ADDIU A1,A1,F488 ;A1=8004F488: p->text "\r" [0xA] -JAL 7000A7FC ;strcat(A0,A1) -ADDIU A0,SP,00D0 -LW T8,0000 (S4) -SW R0,00F4 (SP) -SW R0,00F8 (SP) -ADDIU A0,SP,00F8 -ADDIU A1,SP,00F4 -ADDIU A2,SP,00D0 -LW A3,0000 (S3) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T8,0010 (SP) -JAL 7F05C360 -LWC1 F12,00E4 (SP) -TRUNC.W.S F8,F0 -LW T9,00F4 (SP) -LWC1 F12,00E8 (SP) -MFC1 T6,F8 -BGEZ T9,7F00CAF8 -SRA T2,T9,0x1 -ADDIU AT,T9,0001 -SRA T2,AT,0x1 -SUBU S2,T6,T2 -ADDIU S2,S2,FFFF -JAL 7F05C360 -SW S2,0100 (SP) -TRUNC.W.S F10,F0 -MFC1 S0,F10 -NOP -ADDIU S0,S0,0015 -JAL 7000441C ;V0= text clip width -SW S0,00FC (SP) -SLL S0,V0,0x10 -SRA T0,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T0,R0 -LW T3,0000 (S3) -LW T4,0000 (S4) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -ADDIU A3,SP,00D0 ;A3=SP+D0: p->generated string -SW S8,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T4,0014 (SP) -SW V0,01B8 (SP) -// -LW A0,00EC (SP) -ADDIU AT,R0,0003 -ADDIU S2,R0,FFFF -BEQ A0,AT,7F00CD04 -OR S1,R0,R0 -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C1A ;A0=9C1A: "Mission " -OR A0,S5,R0 ;A0=S5: -JAL 7000A770 ;V0= strcpy(A0,A1) -OR A1,V0,R0 ;A1=V0: p->"Mission " -LUI T5,8003 -LHU T5,ABE8 (T5) ;T5=8002ABE8: name of solo stage -LUI S0,8003 -ADDIU S0,S0,ABE4 ;S0=8002ABE4: p->stage# in solo menu -BEQ T5,R0,7F00CBDC -LW V0,00F0 (SP) -LW T8,0014 (S0) -BNEL V0,T8,7F00CBCC -LHU T7,0020 (S0) -JAL 7F00BB1C -OR A0,S1,R0 -BEQ R0,R0,7F00CBDC -OR S2,V0,R0 -LHU T7,0020 (S0) -ADDIU S1,S1,0001 -ADDIU S0,S0,001C -BNEL T7,R0,7F00CBB0 -LW T8,0014 (S0) -SLL T9,S1,0x3 -SUBU T9,T9,S1 -LUI T6,8003 -ADDIU T6,T6,ABE4 -SLL T9,T9,0x2 -BLTZ S2,7F00CC24 -ADDU S0,T9,T6 -SLL T2,S2,0x3 -SUBU T2,T2,S2 -SLL T2,T2,0x2 -ADDU T1,T2,T6 -LW A1,0000 (T1) -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S5,R0 -LUI A1,8005 -ADDIU A1,A1,F48C ;A1=8004F48C: p->text "." [2E] -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S5,R0 -OR A0,S5,R0 -JAL 7000A7FC ;strcat(A0,A1) -LW A1,0000 (S0) -LUI A1,8005 -ADDIU A1,A1,F490 ;A1=8004F490: p->text "\r" [0A] -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S5,R0 -LW T0,0000 (S4) -SW R0,00F4 (SP) -SW R0,00F8 (SP) -ADDIU A0,SP,00F8 -ADDIU A1,SP,00F4 -OR A2,S5,R0 -LW A3,0000 (S3) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T0,0010 (SP) -JAL 7F05C360 -LWC1 F12,00E4 (SP) -TRUNC.W.S F16,F0 -LW T5,00F4 (SP) -LWC1 F12,00E8 (SP) -MFC1 T4,F16 -BGEZ T5,7F00CC90 -SRA T8,T5,0x1 -ADDIU AT,T5,0001 -SRA T8,AT,0x1 -SUBU S2,T4,T8 -ADDIU S2,S2,FFFF -JAL 7F05C360 -SW S2,0100 (SP) -TRUNC.W.S F18,F0 -MFC1 S0,F18 -NOP -ADDIU S0,S0,002D -JAL 7000441C ;V0= text clip width -SW S0,00FC (SP) -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LW T2,0000 (S3) -LW T6,0000 (S4) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S5,R0 ;A3= Mission string -SW S8,0018 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T6,0014 (SP) -SW V0,01B8 (SP) -// -LW T1,01B4 (SP) -LW T3,0074 (SP) -ADDIU AT,R0,0004 -ADDIU T0,T1,0001 -ADDIU T5,T3,000C -SW T5,0074 (SP) -BNE T0,AT,7F00C678 -SW T0,01B4 (SP) -JAL 7F0ACB78 ;0->80040E84 -A0=0 -OR A0,R0,R0 -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C1B -LW T4,0000 (S4) -OR S1,V0,R0 -SW R0,00F4 (SP) -SW R0,00F8 (SP) -ADDIU A0,SP,00F8 -ADDIU A1,SP,00F4 -OR A2,V0,R0 -LW A3,0000 (S3) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) -LW T8,00F8 (SP) -ADDIU S8,R0,011D -ADDIU S2,R0,00F7 -BGEZ T8,7F00CD7C -SRA T7,T8,0x1 -ADDIU AT,T8,0001 -SRA T7,AT,0x1 -SUBU S0,S8,T7 -SW S0,00FC (SP) -JAL 7000441C ;V0= text clip width -SW S2,0100 (SP) -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LW T2,0000 (S3) -LW T6,0000 (S4) -ADDIU T1,R0,FFFF -SW T1,0018 (SP) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S1,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T6,0014 (SP) -LW S2,0100 (SP) -LW T3,00F4 (SP) -LUI S5,8003 -ADDIU S5,S5,ABC4 ;S5=8002ABC4: (float) copy left bound -ADDU T5,S2,T3 -MTC1 T5,F4 -SW V0,01B8 (SP) -ORI A0,R0,9C1C ;A0=9C1C: "Erase\r" -CVT.S.W F6,F4 -JAL 7F0C1DD8 ;ret V0=p->text A0 -SWC1 F6,0008 (S5) -LW T0,0000 (S4) -OR S1,V0,R0 -SW R0,00F4 (SP) -SW R0,00F8 (SP) -ADDIU A0,SP,00F8 -ADDIU A1,SP,00F4 -OR A2,V0,R0 -LW A3,0000 (S3) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T0,0010 (SP) -LW T4,00F8 (SP) -ADDIU S2,R0,0165 -SW S2,0100 (SP) -BGEZ T4,7F00CE4C -SRA T8,T4,0x1 -ADDIU AT,T4,0001 -SRA T8,AT,0x1 -SUBU S0,S8,T8 -JAL 7000441C ;V0= text clip width -SW S0,00FC (SP) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 -LW T9,0000 (S3) -LW T2,0000 (S4) -ADDIU T6,R0,FFFF -SW T6,0018 (SP) -LW A0,01B8 (SP) -OR A1,S6,R0 -OR A2,S7,R0 -OR A3,S1,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0010 (SP) -JAL 7F0ADABC ;display text A3 at (A1,A2) in DL A0 -SW T2,0014 (SP) -//7F00CEA4: 419D4 -LW T1,0100 (SP) ;T1=text left position -LW T3,00F4 (SP) ;erase text width -LUI AT,3F00 -MTC1 AT,F0 ;F0=1.0 [3F800000] -ADDU T5,T1,T3 -MTC1 T5,F8 -LUI S3,8003 -LUI AT,4361 -CVT.S.W F10,F8 -MTC1 AT,F16 ;F16=225.0 [43610000] -ADDIU S3,S3,ABD4 ;S3=8002ABD4: (float) erase left bound -LUI S1,8009 -LUI AT,8005 -ADDIU S1,S1,D128 ;S1=8008D128: p->main folder images -SWC1 F10,0008 (S3) -LWC1 F18,1A28 (AT) ;F18=80051A28: copy icon y (vertical) position -LW S0,0000 (S1) ;S0=8008D128: copy icon -SW V0,01B8 (SP) -SWC1 F16,00AC (SP) ;SP+AC=xpos 225.0 -SWC1 F18,00B0 (SP) ;SP+B0=ypos -LBU T0,0004 (S0) ;T0=width -ADDIU S2,SP,01B8 -MTC1 T0,F4 -BGEZ T0,7F00CF18 -CVT.S.W F6,F4 ;F6=(float) width -LUI AT,4F80 -MTC1 AT,F8 ;F8=4294967296.0 [4F800000] -NOP -ADD.S F6,F6,F8 ;F6=correction for negative proportion -//7F00CF18: -MUL.S F10,F6,F0 -SWC1 F10,00A4 (SP) ;SP+A4=(float) width -LBU T4,0005 (S0) ;T4=height -MTC1 T4,F16 -BGEZ T4,7F00CF40 -CVT.S.W F18,F16 -LUI AT,4F80 -MTC1 AT,F4 ;F4=4294967296.0 [4F800000] -NOP -ADD.S F18,F18,F4 ;F18=correction for negative proportion -//7F00CF40: -MUL.S F8,F18,F0 -OR A0,S2,R0 ;A0=S2: DL -OR A1,S0,R0 ;A1=S0: p->img.decl. -ADDIU A2,R0,0004 ;A2=4 ??? -OR A3,R0,R0 ;A3=0 ??? -SW R0,0010 (SP) ;SP+10=0 ??? -JAL 7F076D68 ;generates a display list for image declaration A1 -SWC1 F8,00A8 (SP) ;SP+A8=(float) height -LW S0,0000 (S1) ;S0=8008D128: copy icon -ADDIU T7,R0,0001 -ADDIU T9,R0,00FF -LBU T8,0005 (S0) ;T8=image height -LBU A3,0004 (S0) ;A3=image width -ADDIU T2,R0,00FF -ADDIU T6,R0,00FF -ADDIU T1,R0,00FF -SW T1,002C (SP) ;SP+2C= alpha FF -SW T6,0028 (SP) ;SP+28= blue FF -SW T2,0024 (SP) ;SP+24= green FF -SW T9,0020 (SP) ;SP+20= red FF -SW T7,001C (SP) ;SP+1C= flip vertically -SW R0,0018 (SP) ;SP+18= no horizontal flip -SW R0,0014 (SP) ;SP+14= ??? 0 -SW T8,0010 (SP) ;SP+10= image height -LBU T3,0006 (S0) ;T3=image format -SW R0,0034 (SP) ;SP+34= ??? 0 -OR A0,S2,R0 ;A0=S2: DL -SLT T5,R0,T3 -SW T5,0030 (SP) ;SP+30: !format -ADDIU A1,SP,00AC ;A1=SP+AC: p->positions -JAL 7F06AFE8 ;display image at position on screen -ADDIU A2,SP,00A4 ;A2=SP+A4: p->dimentions -//7F00CFC4: 41AF4 -LWC1 F6,00AC (SP) ;F6=x position -LWC1 F10,00A4 (SP) ;F10=width -LWC1 F4,00B0 (SP) ;F4=y position -LWC1 F18,00A8 (SP) ;F18=height -SUB.S F16,F6,F10 ;F16=xpos-width -LWC1 F10,00B0 (SP) ;F10=ypos -LWC1 F6,00A8 (SP) ;F6=height -SUB.S F8,F4,F18 ;F8=ypos-height -SWC1 F16,0000 (S5) -LUI AT,3F00 -ADD.S F16,F6,F10 -MTC1 AT,F0 ;F0=1.0 [3F800000] -SWC1 F8,0004 (S5) -LUI AT,8005 -SWC1 F16,000C (S5) -LWC1 F4,1A2C (AT) ;F4=80051A2C: xpos 335.0 [43A78000] -LUI AT,8005 -LWC1 F18,1A30 (AT) ;F18=80051A30: ypos 285.0 [438E8000] -LW S0,0000 (S1) ;S0=8008D128+C: delete icon -SWC1 F4,009C (SP) ;SP+94= xpos -SWC1 F18,00A0 (SP) -LBU T0,0010 (S0) ;T0=width -LUI AT,4F80 -MTC1 T0,F8 -BGEZ T0,7F00D034 -CVT.S.W F6,F8 -MTC1 AT,F10 -NOP -ADD.S F6,F6,F10 -MUL.S F16,F6,F0 -LUI AT,4F80 -SWC1 F16,0094 (SP) ;SP+94= width -LBU T4,0011 (S0) ;T4=height -MTC1 T4,F4 -BGEZ T4,7F00D05C -CVT.S.W F18,F4 -MTC1 AT,F8 -NOP -ADD.S F18,F18,F8 -//7F00D05C: -MUL.S F10,F18,F0 -OR A0,S2,R0 -ADDIU A1,S0,000C -ADDIU A2,R0,0004 -OR A3,R0,R0 -SW R0,0010 (SP) -JAL 7F076D68 ;generates a display list for image declaration A1 -SWC1 F10,0098 (SP) ;SP+98= height -LW S0,0000 (S1) ;S0=8008D128+C: delete icon -ADDIU T7,R0,0001 -ADDIU T9,R0,00FF -LBU T8,0011 (S0) -LBU A3,0010 (S0) -ADDIU T2,R0,00FF -ADDIU T6,R0,00FF -ADDIU T1,R0,00FF -SW T1,002C (SP) -SW T6,0028 (SP) -SW T2,0024 (SP) -SW T9,0020 (SP) -SW T7,001C (SP) -SW R0,0018 (SP) -SW R0,0014 (SP) -SW T8,0010 (SP) -LBU T3,0012 (S0) -SW R0,0034 (SP) -OR A0,S2,R0 -SLT T5,R0,T3 -SW T5,0030 (SP) -ADDIU A1,SP,009C -JAL 7F06AFE8 ;display image at position on screen -ADDIU A2,SP,0094 -//7F00D0DC: 41C0C -LWC1 F6,009C (SP) -LWC1 F16,0094 (SP) -LWC1 F8,00A0 (SP) -LWC1 F18,0098 (SP) -SUB.S F4,F6,F16 -LWC1 F16,00A0 (SP) -LWC1 F6,0098 (SP) -SUB.S F10,F8,F18 -SWC1 F4,0000 (S3) -LUI AT,42DC -ADD.S F4,F6,F16 -MTC1 AT,F8 ;F8=xpos 110.0 [42DC0000] -SWC1 F10,0004 (S3) -LUI AT,8005 -SWC1 F4,000C (S3) -LWC1 F18,1A34 (AT) ;F18=ypos 285.0 [438E8000] -LW S0,0000 (S1) ;S0=8008D128+18: SELECT FILE -SWC1 F8,008C (SP) -SWC1 F18,0090 (SP) -LBU T0,001C (S0) ;T0=width -LUI AT,4F80 -MTC1 T0,F10 -BGEZ T0,7F00D148 -CVT.S.W F6,F10 -MTC1 AT,F16 -NOP -ADD.S F6,F6,F16 -LUI AT,3F00 -MTC1 AT,F4 -LUI AT,4F80 -MUL.S F8,F6,F4 -SWC1 F8,0084 (SP) -LBU T4,001D (S0) ;T4=height -MTC1 T4,F18 -BGEZ T4,7F00D178 -CVT.S.W F10,F18 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -//7F00D178: -LUI AT,3F00 -MTC1 AT,F6 -OR A0,S2,R0 -ADDIU A1,S0,0018 -MUL.S F4,F10,F6 -ADDIU A2,R0,0004 -OR A3,R0,R0 -SW R0,0010 (SP) -JAL 7F076D68 ;generates a display list for image declaration A1 -SWC1 F4,0088 (SP) -LW S0,0000 (S1) ;S0=8008D128+18: SELECT FILE -ADDIU T7,R0,0001 -ADDIU T9,R0,00FF -LBU T8,001D (S0) -LBU A3,001C (S0) -ADDIU T2,R0,00FF -ADDIU T6,R0,00FF -ADDIU T1,R0,00FF -SW T1,002C (SP) -SW T6,0028 (SP) -SW T2,0024 (SP) -SW T9,0020 (SP) -SW T7,001C (SP) -SW R0,0018 (SP) -SW R0,0014 (SP) -SW T8,0010 (SP) -LBU T3,001E (S0) -SW R0,0034 (SP) -OR A0,S2,R0 -SLT T5,R0,T3 -SW T5,0030 (SP) -ADDIU A1,SP,008C -JAL 7F06AFE8 ;display image at position on screen -ADDIU A2,SP,0084 -//7F00D200: 41D30 -LUI T0,8003 -LW T0,A91C (T0) ;T0=8002A91C: folder selected for deletion or -1 -BGEZL T0,7F00D220 ;branch if not deleting a folder -LW RA,0064 (SP) -JAL 7F009F08 ;loads selected icon for folder select -LW A0,01B8 (SP) -SW V0,01B8 (SP) -//7F00D21C: return -LW RA,0064 (SP) -LW V0,01B8 (SP) -LW S0,0040 (SP) -LW S1,0044 (SP) -LW S2,0048 (SP) -LW S3,004C (SP) -LW S4,0050 (SP) -LW S5,0054 (SP) -LW S6,0058 (SP) -LW S7,005C (SP) -LW S8,0060 (SP) -JR RA -ADDIU SP,SP,01B8 - -+_+ - -7F009F08 3EA38 loads selected icon for folder select [8002A918] -LUI V0,8003 -LW V0,A918 (V0) ;V0=8002A918: icon -ADDIU SP,SP,FF98 -SW RA,0044 (SP) -SW S0,0040 (SP) -BNEZ V0,7F009F34 ;branch if not sight -SW A0,0068 (SP) -//7F009F24: normal crosshair sight -LUI S0,8009 -LW S0,D114 (S0) ;S0=8008D114: cursor group -BEQ R0,R0,7F009F64 -SW S0,0054 (SP) ;SP+54=8008D114: cursor group -//7F009F34: -ADDIU AT,R0,0001 -BNE V0,AT,7F009F4C ;branch if not copy icon -LUI S0,8009 -LW S0,D128 (S0) -BEQ R0,R0,7F009F64 -SW S0,0054 (SP) -//7F009F4C: -ADDIU AT,R0,0002 -BNE V0,AT,7F009F64 -LUI S0,8009 -LW S0,D128 (S0) -ADDIU S0,S0,000C -SW S0,0054 (SP) -//7F009F64: -LW S0,0054 (SP) -ADDIU A0,SP,0068 -ADDIU A2,R0,0004 -OR A3,R0,R0 -SW R0,0010 (SP) -JAL 7F076D68 ;generates a display list for image declaration A1 -OR A1,S0,R0 -//7F009F80: -LUI AT,8003 -LWC1 F4,A908 (AT) -LUI AT,3F00 -MTC1 AT,F6 -JAL 7F05C360 -ADD.S F12,F4,F6 -//7F009F98: -LUI AT,8003 -LWC1 F8,A90C (AT) -LUI AT,3F00 -MTC1 AT,F10 -SWC1 F0,0060 (SP) -JAL 7F05C360 -ADD.S F12,F8,F10 -//7F009FB4: -SWC1 F0,0064 (SP) -LBU T6,0004 (S0) -LUI AT,3F00 -MTC1 AT,F2 -MTC1 T6,F16 -ADDIU A0,SP,0068 -BGEZ T6,7F009FE4 -CVT.S.W F18,F16 -LUI AT,4F80 -MTC1 AT,F4 -NOP -ADD.S F18,F18,F4 -//7F009FE4: -MUL.S F6,F18,F2 -LUI AT,4F80 -SWC1 F6,0058 (SP) -LBU T7,0005 (S0) -MTC1 T7,F8 -BGEZ T7,7F00A00C -CVT.S.W F10,F8 -MTC1 AT,F16 -NOP -ADD.S F10,F10,F16 -//7F00A00C: -MUL.S F4,F10,F2 -ADDIU T9,R0,0001 -ADDIU T0,R0,00FF -ADDIU T1,R0,00FF -ADDIU T2,R0,00FF -ADDIU T3,R0,00DC -ADDIU A1,SP,0060 -SWC1 F4,005C (SP) -LBU T8,0005 (S0) -LBU A3,0004 (S0) -SW T3,002C (SP) -SW T2,0028 (SP) -SW T1,0024 (SP) -SW T0,0020 (SP) -SW T9,001C (SP) -SW R0,0018 (SP) -SW R0,0014 (SP) -SW T8,0010 (SP) -LBU T4,0006 (S0) -SW R0,0034 (SP) -ADDIU A2,SP,0058 -SLT T5,R0,T4 -JAL 7F06AFE8 ;display image at position on screen -SW T5,0030 (SP) -//7F00A06C: -LW RA,0044 (SP) -LW V0,0068 (SP) -LW S0,0040 (SP) -JR RA -ADDIU SP,SP,0068 diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 06 - mode select/7F00D298 - menu 06 interface - mode select.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 06 - mode select/7F00D298 - menu 06 interface - mode select.txt deleted file mode 100644 index 8faa492..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 06 - mode select/7F00D298 - menu 06 interface - mode select.txt +++ /dev/null @@ -1,236 +0,0 @@ -7F00D298: 41DC8 menu 06 interface: mode select screen - note: this printout uses the revised BONDFOLDER addresses. see "usage of the selected Bond features" for details -ADDIU SP,SP,FFD0 -SW S0,0018 (SP) -LUI AT,8003 -LUI V1,8007 -SW RA,001C (SP) -SW R0,A94C (AT) ;0->8002A94C: cheat menu unavailable -ADDIU V1,V1,9651 ;V1=80069651: base address for unlocked cheat flags -ADDIU S0,R0,0001 ;S0=1: counter for cheats -//7F00D2B8: determine if any cheats are available -OR A0,S0,R0 ;A0=S0: cheat# -JAL 7F009848 ;V0=TRUE if cheat A0 unlocked -SW V1,0024 (SP) ;V1->SP+24: p->unlocked cheat flag -BEQ V0,R0,7F00D2E4 ;branch if not available -LW V1,0024 (SP) ;V1=SP+24: p->unlocked cheat flag -ADDIU T6,R0,0001 -SB T6,0000 (V1) ;1->unlocked cheat flag: unlock cheat in cheat menu -ADDIU T7,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F00D2E8 -SW T7,A94C (AT) ;1->8002A94C: set cheat menu available -//7F00D2E4: cheat not available -SB R0,0000 (V1) -//7F00D2E8: iterate for all cheats -ADDIU S0,S0,0001 ;S0++: next cheat # -ADDIU AT,R0,004B -BNE S0,AT,7F00D2B8 ;continue for cheats 1-4A -ADDIU V1,V1,0001 ;V1++: p->next cheat unlock flag -//7F00D2F8: -LUI AT,4270 -MTC1 AT,F12 ;F12=60.0 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A38 (AT) ;F12=80051B38: 1.3- -LUI AT,42C8 -MTC1 AT,F12 ;F12=100.0 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A3C (AT) ;F14=80051B3C: 10000.0 -JAL 70004534 -OR A0,R0,R0 ;A0=0 -//7F00D330: assemble folder on-screen -LUI S0,8003 -ADDIU S0,S0,A95C ;S0=8002A95C: location of walletbond in rdram -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,0000 (S0) ;A0=p->walletbond obj. instance -LUI A0,8003 -JAL 7F01EBC8 ;V0= selected Bond for file A0 -LW A0,A8E8 (A0) ;A0=8002A8E8: folder# -LW A0,0000 (S0) ;A0=p->walletbond obj. instance -JAL 7F00B808 ;toggles folder images on/off -OR A1,V0,R0 ;A1=V0: selected Bond -LW A0,0000 (S0) ;A0=p->walletbond obj. instance -OR A1,R0,R0 ;A1=item 0: tabs on side of folder -JAL 7F00B7C0 ;toggle item on (draw to screen) -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;A0=p->walletbond obj. instance -ADDIU A1,R0,0001 ;A1=item 1: basic folder -JAL 7F00B7C0 ;toggle item on (draw to screen) -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;A0=p->walletbond obj. instance -ADDIU A1,R0,0003 ;A1=item 3: OHMSS -JAL 7F00B7C0 ;toggle item on (draw to screen) -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;A0=p->walletbond obj. instance -ADDIU A1,R0,0007 ;A1=item 7: shadow beneath character image -JAL 7F00B7C0 ;toggle item on (draw to screen) -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;A0=p->walletbond obj. instance -ADDIU A1,R0,0002 ;A1=item 2: FOR YOUR EYES ONLY -JAL 7F00B7C0 ;toggle item on (draw to screen) -ADDIU A2,R0,0001 ;A2=mode: on -//7F00D3A8: detect if tab 3 selected -LUI S0,8007 -LUI AT,8003 -ADDIU S0,S0,9784 ;S0=80069784: p->selected mode? -SW R0,A8E4 (AT) ;0->8002A8E4: unhighlight folder tab 3 -ADDIU T8,R0,FFFF -JAL 7F00A39C ;V0=TRUE if cursor is on tab 3 -SW T8,0000 (S0) ;-1->80069784: reset mode to folder select -BEQ V0,R0,7F00D410 ;branch if tab 3 not selected -LUI T1,8003 -//7F00D3CC: tab 3 selected -ADDIU T9,R0,0001 -LUI AT,8003 -SW T9,A8E4 (AT) ;1->8002A8E4: highlight folder tab 3 -OR A0,R0,R0 ;A0=0 -JAL 7000C3AC ;test if buttons in A1 were pressed -ORI A1,R0,B000 ;A1=B000: A,Z,start -BEQ V0,R0,7F00D51C ;branch if none were pressed -ADDIU T0,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW T0,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C7 ;A1=0C7: page turning sound effect -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL p->data -BEQ R0,R0,7F00D520 -OR A0,R0,R0 ;A0=0 -//7F00D410: cheat menu selected -LW T1,A94C (T1) ;T1=8002A94C: cheat menu available flag -LUI AT,8003 -BEQ T1,R0,7F00D478 ;branch if cheat menu not an option -NOP -LWC1 F4,A90C (AT) ;F4=8002A90C: vertical position -LUI AT,8005 -LWC1 F6,1A40 (AT) ;F6=80051A40: selection spacing value -ADDIU T2,R0,0002 -OR A0,R0,R0 -C.LE.S F6,F4 -ORI A1,R0,B000 ;A1=B000: A,Z,start -BC1F 7F00D478 ;branch if bounds < vert. position -NOP -JAL 7000C3AC ;test if buttons in A1 were pressed -SW T2,0000 (S0) ;2->highlighted mode: cheats -BEQ V0,R0,7F00D51C ;branch if no buttons pressed -ADDIU T3,R0,0002 -//7F00D454: cheats selected -LUI AT,8003 -LUI A0,8006 -SW T3,A8F0 (AT) ;2->8002A8F0: mode=cheats -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C5 ;A1=0C5: backpedal folder SE -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL p->data -BEQ R0,R0,7F00D520 -OR A0,R0,R0 ;A0=0 -//7F00D478: detect if multiplayer selected -LUI AT,8003 -LWC1 F8,A90C (AT) ;F8=8002A90C: vertical position -LUI AT,4373 -MTC1 AT,F10 ;F10=AT: 244.0 -NOP -C.LE.S F10,F8 -NOP -BC1FL 7F00D4F0 ;branch if 244.0 < pos. (multi not selected) -SW R0,0000 (S0) ;0->highlighted mode: solo -JAL 7000B9F8 ;V0=#controllers plugged in -NOP -SLTI AT,V0,0002 ;TRUE if 0-1 -BNEZ AT,7F00D4EC ;branch if fewer than 2 controllers -ADDIU T4,R0,0001 -SW T4,0000 (S0) ;1->highlighted mode: multi -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;test if buttons in A1 were pressed -ORI A1,R0,B000 ;A1=B000: A,Z,start -BEQ V0,R0,7F00D51C ;branch if none were pressed -ADDIU T5,R0,0001 -//7F00D4C8: multiplayer selected -LUI AT,8003 -LUI A0,8006 -SW T5,A8F0 (AT) ;1->8002A8F0: mode=multi -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C5 ;A1=0C5: page turn SE -JAL 70008E08 ;play SE A1 -OR A2,R0,R0 ;A2=NULL p->data -BEQ R0,R0,7F00D520 -OR A0,R0,R0 ;A0=0 -//7F00D4EC: -SW R0,0000 (S0) ;0->highlighted mode -//7F00D4F0: detect if solo selected -OR A0,R0,R0 ;A0=0: controller 1 -JAL 7000C3AC ;test if buttons in A1 were pressed -ORI A1,R0,B000 ;A1=B000: A,Z,start -BEQ V0,R0,7F00D51C ;branch if no buttons pressed -LUI AT,8003 -LUI A0,8006 -SW R0,A8F0 (AT) ;0->8002A8F0: mode=solo -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C5 ;A1=0C5: page turning SE -JAL 70008E08 ;play SE A1 -OR A2,R0,R0 ;A2=NULL p->data -//7F00D51C: buttons were not pressed -OR A0,R0,R0 -//7F00D520: test if backpedalling one page -JAL 7000C3AC ;test if buttons in A1 were pressed -ADDIU A1,R0,4000 ;A1=4000: B -BEQ V0,R0,7F00D54C ;branch if B wasn't pressed -ADDIU T6,R0,0001 -//7F00D530: backpedal -LUI AT,8003 -LUI A0,8006 -SW T6,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected (back) -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C7 ;A1=0C7: page turning SE -JAL 70008E08 ;play SE A1 -OR A2,R0,R0 ;A2=NULL p->data -//7F00D54C: sort out what functions occur -JAL 7F009B84 ;control stick tracking -NOP -LUI V0,8003 -LW V0,A8F0 (V0) ;V0=8002A8F0: mode -ADDIU A0,R0,0007 ;A0=7: select mission -ADDIU AT,R0,0001 ;AT=1 -BNEZ V0,7F00D584 ;branch if mode != solo -NOP -//7F00D56C: jump to "select mission" -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -JAL 7F00E3E0 -OR A0,R0,R0 ;A0=0 -BEQ R0,R0,7F00D5D8 -LW RA,001C (SP) -//7F00D584: detect if multiplayer selected -BNE V0,AT,7F00D59C ;if mode != 1, branch -ADDIU A0,R0,000E ;A0=E: multiplayer options -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F00D5D8 -LW RA,001C (SP) -//7F00D59C: detect if cheats selected -ADDIU AT,R0,0002 -BNE V0,AT,7F00D5BC ;branch if mode != 2 -LUI T7,8003 -ADDIU A0,R0,0015 ;A0=15: cheat menu -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F00D5D8 -LW RA,001C (SP) -//7F00D5BC: -LW T7,A8D8 (T7) ;T7=8002A8D8: folder tab 3 selected (back) -ADDIU A0,R0,0005 ;A0=5: folder select -BEQL T7,R0,7F00D5D8 ;if no set, branch -LW RA,001C (SP) -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -LW RA,001C (SP) -//7F00D5D8: return -LW S0,0018 (SP) -ADDIU SP,SP,0030 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 06 - mode select/7F00D828 - menu 06 constructor - mode select.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 06 - mode select/7F00D828 - menu 06 constructor - mode select.txt deleted file mode 100644 index b389643..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 06 - mode select/7F00D828 - menu 06 constructor - mode select.txt +++ /dev/null @@ -1,315 +0,0 @@ -7F00D828: 42358 menu 06 constructor - mode select - accepts: A0=p->display list target -ADDIU SP,SP,FFA0 -SW RA,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 -JAL 7F00D5E8 -OR A0,V0,R0 -JAL 7F0ACD98 -OR A0,V0,R0 -//7F00D85C: display "1." -ADDIU T6,R0,0096 -ADDIU T7,R0,00DC -OR S0,V0,R0 -SW T6,0058 (SP) -JAL 7000441C -SW T7,0054 (SP) -JAL 7000442C -SH V0,0044 (SP) -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T8,0EB8 (T8) -LH T1,0044 (SP) -LUI A3,8005 -ADDIU T0,R0,00FF -SW T0,0018 (SP) -ADDIU A3,A3,F494 ;A3=8004F494: "1." -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -SW T8,0010 (SP) -JAL 7F009760 -SW T1,001C (SP) -//7F00D8C8: determine if cheating -LUI T2,8003 -LW T2,A900 (T2) ;T2=8002A900: TRUE if displaying cheat select mission -OR S0,V0,R0 -BEQL T2,R0,7F00D8E8 ;branch if "select mission" -ORI A0,R0,9C1D -BEQ R0,R0,7F00D8E8 -ORI A0,R0,9C75 -//7F00D8E4: display cheat select mission or select mission -ORI A0,R0,9C1D -JAL 7F0C1DD8 -NOP -LUI T3,8004 -LW T3,0EB4 (T3) -LUI A3,8004 -SW V0,005C (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,004C -ADDIU A1,SP,0050 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T3,0010 (SP) -LUI T6,8007 -LW T6,9784 (T6) ;T6=80069784: selected mode -ADDIU T4,R0,00AA -ADDIU T5,R0,00DC -SW T4,0058 (SP) -BNEZ T6,7F00D964 ;skip if not highlighted -SW T5,0054 (SP) -//7F00D938: highlight select mission -LW A3,0050 (SP) -ADDIU T7,R0,00EA -ADDIU T8,R0,0032 -SW T8,0014 (SP) -SW T7,0010 (SP) -OR A0,S0,R0 -ADDIU A1,R0,0094 -ADDIU A2,R0,00DA -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,00AF -OR S0,V0,R0 -//7F00D964: display "select mission" -JAL 7000441C -NOP -JAL 7000442C -SH V0,0044 (SP) -LUI T9,8004 -LUI T0,8004 -LW T0,0EB4 (T0) -LW T9,0EB8 (T9) -LH T2,0044 (SP) -ADDIU T1,R0,00FF -SW T1,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -LW A3,005C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0014 (SP) -SW T9,0010 (SP) -JAL 7F009760 -SW T2,001C (SP) -//7F00D9BC: determine if multiplayer available -ADDIU T3,R0,0096 -ADDIU T4,R0,00FC -OR S0,V0,R0 -SW T3,0058 (SP) -JAL 7000B9F8 ;V0= #controllers plugged in -SW T4,0054 (SP) -SLTI AT,V0,0002 ;TRUE if 1 player -BNEZ AT,7F00D9E8 ;branch if not available -ADDIU T5,R0,00FF -BEQ R0,R0,7F00D9F0 -SW T5,0048 (SP) -//7F00D9E8: -ADDIU T6,R0,0070 -SW T6,0048 (SP) -//7F00D9F0: display "2." -JAL 7000441C -NOP -JAL 7000442C -SH V0,0044 (SP) -LUI T7,8004 -LUI T8,8004 -LW T8,0EB4 (T8) -LW T7,0EB8 (T7) -LW T9,0048 (SP) -LH T0,0044 (SP) -LUI A3,8005 -ADDIU A3,A3,F498 ;A3=8004F498: "2." -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -SW T7,0010 (SP) -SW T9,0018 (SP) -JAL 7F009760 -SW T0,001C (SP) -//7F00DA4C: determine if cheating -LUI T1,8003 -LW T1,A904 (T1) ;T1=8002A904: TRUE if displaying "cheat multi" -OR S0,V0,R0 -ORI A0,R0,9C1E -BEQ T1,R0,7F00DA6C -NOP -BEQ R0,R0,7F00DA6C -ORI A0,R0,9D14 -//7F00DA6C: -JAL 7F0C1DD8 -NOP -LUI T2,8004 -LW T2,0EB4 (T2) -LUI A3,8004 -SW V0,005C (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,004C -ADDIU A1,SP,0050 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) -LUI T5,8007 -LW T5,9784 (T5) ;T5=80069784: selected mode -ADDIU T3,R0,00AA -ADDIU T4,R0,00FC -ADDIU AT,R0,0001 -SW T3,0058 (SP) -BNE T5,AT,7F00DAEC ;skip if multi not selected -SW T4,0054 (SP) -//7F00DAC0: highlight "multi" -LW A3,0050 (SP) -ADDIU T6,R0,010A -ADDIU T7,R0,0032 -SW T7,0014 (SP) -SW T6,0010 (SP) -OR A0,S0,R0 -ADDIU A1,R0,0094 -ADDIU A2,R0,00FA -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,00AF -OR S0,V0,R0 -//7F00DAEC: display "multi" -JAL 7000441C -NOP -JAL 7000442C -SH V0,0044 (SP) -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T8,0EB8 (T8) -LW T0,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -LW A3,005C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -SW T8,0010 (SP) -SW T0,0018 (SP) -JAL 7F009760 -SW T1,001C (SP) -// determine if cheats available -LUI T2,8003 -LW T2,A94C (T2) ;T2=8002A94C: TRUE if cheat menu available -OR S0,V0,R0 -ADDIU T3,R0,0096 -BEQ T2,R0,7F00DC9C ;skip if it isn't available -ADDIU T4,R0,011C -// display "3." -SW T3,0058 (SP) -JAL 7000441C -SW T4,0054 (SP) -JAL 7000442C -SH V0,0044 (SP) -LUI T5,8004 -LUI T6,8004 -LW T6,0EB4 (T6) -LW T5,0EB8 (T5) -LH T8,0044 (SP) -LUI A3,8005 -ADDIU T7,R0,00FF -SW T7,0018 (SP) -ADDIU A3,A3,F49C ;A3=8004F49C: "3." -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -SW T5,0010 (SP) -JAL 7F009760 -SW T8,001C (SP) -//7F00DBBC: cheat -OR S0,V0,R0 -JAL 7F0C1DD8 -ORI A0,R0,9C1F -LUI T9,8004 -LW T9,0EB4 (T9) -LUI A3,8004 -SW V0,005C (SP) ;SP+5C=p->text -LW A3,0EB8 (A3) -ADDIU A0,SP,004C -ADDIU A1,SP,0050 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T9,0010 (SP) -LUI T2,8007 -LW T2,9784 (T2) ;T2=80069784: selected mode -ADDIU T0,R0,00AA -ADDIU T1,R0,011C -ADDIU AT,R0,0002 -SW T0,0058 (SP) -BNE T2,AT,7F00DC40 ;skip if not cheats -SW T1,0054 (SP) -//7F00DC14: highlight "Cheats" -LW A3,0050 (SP) -ADDIU T3,R0,012A -ADDIU T4,R0,0032 -SW T4,0014 (SP) -SW T3,0010 (SP) -OR A0,S0,R0 -ADDIU A1,R0,0094 -ADDIU A2,R0,011A -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,00AF -OR S0,V0,R0 -//7F00DC40: display "cheats" -JAL 7000441C -NOP -JAL 7000442C -SH V0,0044 (SP) -LUI T5,8004 -LUI T6,8004 -LW T6,0EB4 (T6) -LW T5,0EB8 (T5) -LH T8,0044 (SP) -ADDIU T7,R0,00FF -SW T7,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -LW A3,005C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -SW T5,0010 (SP) -JAL 7F009760 -SW T8,001C (SP) -OR S0,V0,R0 -//7F00DC9C: tack on tab support -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,S0,R0 -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 -//7F00DCAC: return -LW RA,003C (SP) -LW S0,0038 (SP) -ADDIU SP,SP,0060 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 0B - run stage/7F01AE6C - menu 0B interface reroute - run stage.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 0B - run stage/7F01AE6C - menu 0B interface reroute - run stage.txt deleted file mode 100644 index eb4376a..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 0B - run stage/7F01AE6C - menu 0B interface reroute - run stage.txt +++ /dev/null @@ -1,43 +0,0 @@ -7F01AE6C: 4F99C menu 0B 'interface' - sets return from stage -JAL 7F0BFCA4 ;V0=8004847C: !0 if intros running -NOP -BEQ V0,R0,7F01AE90 -LUI T0,8003 -//7F01AE7C: -OR A0,R0,R0 ;A0=0: legal screen -JAL 7F01A5D4 ;set menu A0, mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AE90: menu return for multiplayer -LW T0,A8F0 (T0) ;T0=8002A8F0: mode -ADDIU AT,R0,0001 -ADDIU A0,R0,000E ;A0=E: multiplayer options -BNE T0,AT,7F01AEB4 ;branch if not multiplayer -LUI T1,8003 -JAL 7F01A5D4 ;set menu A0, mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AEB4: menu return for solo - Cuba -LW T1,A8F4 (T1) ;T1=8002A8F4: stage selected -ADDIU AT,R0,0036 ;AT=36: Cuba -ADDIU A0,R0,000C ;A0=C: mission failed -BNE T1,AT,7F01AEE4 ;branch if not Cuba -NOP -JAL 7F018670 ;set actor intro mode -ADDIU A0,R0,0001 ;A0=TRUE: extended intro and no movies -ADDIU A0,R0,0018 ;A0=18: actor intro -JAL 7F01A5D4 ;set menu A0, mode A1 -ADDIU A1,R0,0001 ;A1=1: return -BEQ R0,R0,7F01AEF0 -LW RA,0014 (SP) -//7F01AEE4: menu return for all other solo stages -JAL 7F01A5D4 ;set menu A0, mode A1 -ADDIU A1,R0,0001 ;A1=1: return -LW RA,0014 (SP) -//7F01AEF0: return for all menu interface types -ADDIU SP,SP,0018 -JR RA -NOP - diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 0B - run stage/7F0BFCA4 - menu 0B interface - run stage.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 0B - run stage/7F0BFCA4 - menu 0B interface - run stage.txt deleted file mode 100644 index 64e698e..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 0B - run stage/7F0BFCA4 - menu 0B interface - run stage.txt +++ /dev/null @@ -1,4 +0,0 @@ -7F0BFCA4: F47D4 menu 0B interface: -active gameplay- -LUI V0,8005 -JR RA -LW V0,847C (V0) diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 17 - switch screens/7F00AB00 - menu 17 interface - switch screens.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 17 - switch screens/7F00AB00 - menu 17 interface - switch screens.txt deleted file mode 100644 index ff0fa19..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 17 - switch screens/7F00AB00 - menu 17 interface - switch screens.txt +++ /dev/null @@ -1,48 +0,0 @@ -7F00AB00: 3F630 menu 17 interface: switch screens -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 ;F12= [42700000] -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,19EC (AT) ;F12=800519EC: 1.3- -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000] -LUI AT,8005 -JAL 70004650 -LWC1 F14,19F0 (AT) ;F14=800519F0: 10000.0 -JAL 70004534 -OR A0,R0,R0 -//7F00AB40: -LUI V0,8003 -ADDIU V0,V0,A8CC ;V0=8002A8CC -LW T6,0000 (V0) ;T6=8002A8CC: menu timer -LUI T9,8003 -ADDIU T7,T6,0001 ;T7=T6+1: timer+1 -SLTI AT,T7,0004 ;AT=TRUE if timer < 4 -BNEZ AT,7F00AB98 ;return if time left on clock -SW T7,0000 (V0) ;T7->8002A8CC: advance menu timer -//7F00AB60: -LW T9,A944 (T9) ;T9=8002A944: -LUI T0,8003 -BNEL T9,R0,7F00AB9C ;return if set -LW RA,0014 (SP) -//7F00AB70: -LW T0,A948 (T0) ;T0=8002A948: True if emulating Spectrum -LUI V0,8003 -ADDIU V0,V0,A8C4 ;V0=8002A8C4 -BNEL T0,R0,7F00AB9C ;return if set -LW RA,0014 (SP) -//7F00AB84: -LW T1,0000 (V0) ;T1=8002A8C4: menu update slot -LUI AT,8003 -ADDIU T2,R0,FFFF -SW T1,A8C8 (AT) ;update menu -> 8002A8C8: next menu slot -SW T2,0000 (V0) ;-1 -> menu update slot -//7F00AB98: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 17 - switch screens/7F00ABA8 - menu 17 constructor - switch screens.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 17 - switch screens/7F00ABA8 - menu 17 constructor - switch screens.txt deleted file mode 100644 index 02b2ce0..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 17 - switch screens/7F00ABA8 - menu 17 constructor - switch screens.txt +++ /dev/null @@ -1,70 +0,0 @@ -7F00ABA8 3F6D8 menu 17 constructor: switch screens -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F01C0D0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F01C0D0 50C00 insert image DL, stats at 800232A8 - accepts: A0=display list target -ADDIU SP,SP,FFC8 -SW S0,0018 (SP) -SW RA,001C (SP) -LUI T6,BA00 -ORI T6,T6,1402 ;T6=BA001402 -LUI T7,0030 ;T7=00300000 -SW T7,0004 (A0) ;T7->A0+4: setothermode - fill -SW T6,0000 (A0) ;T6->A0+0: setothermode - texture LUT, -ADDIU S0,A0,0008 ;S0=A0+8 -SW S0,0030 (SP) ;SP+30=DL -JAL 7000441C ;returns V0=image width -ADDIU SP,SP,0008 -//7F01C100: -ADDIU T8,V0,FFFF ;T8=value-1 -LW T1,0030 (SP) ;T1=DL -ANDI T9,T8,0FFF ;T9=(value-1) & 0xFFF -LUI AT,FF10 -OR T0,T9,AT ;T0=FF100xxx -JAL 70003C1C ;V0=800232A8+28: p->image? -SW T0,0000 (T1) ;T0->DL: setcolourimage - 16bit rgba, width 0x13F -JAL 7000E8B0 ;translates virtual address for pointer A0 -OR A0,V0,R0 ;A0=V0: p->image? -//7F01C124: -LW T2,0030 (SP) ;T2=DL -OR V1,S0,R0 ;V1=S0: DL -LUI T4,0001 -SW V0,0004 (T2) ;V0->DL: setcolourimage - p->image -ORI T4,T4,0001 ;T4=00010001 -LUI T3,F700 ;T3=F7000000 -SW T3,0000 (V1) ;T3->DL: setfillcolour -SW T4,0004 (V1) ;T4->DL: setfillcolour - black, black -ADDIU S0,S0,0008 ;S0+=8: DL -SW S0,0028 (SP) ;SP+28=S0: DL -JAL 7000441C ;V0=width -ADDIU S0,S0,0008 ;S0+=8 -JAL 7000442C ;V0=height -SH V0,0022 (SP) ;SP+22=V0: width -//7F01C15C: -LH T9,0022 (SP) ;T9=SP+22: width -ADDIU T5,V0,FFFF ;T5=height-1 -LW V1,0028 (SP) ;V1=SP+28: DL -ANDI T6,T5,03FF ;T6=(height-1)& 0x3FF -ADDIU T0,T9,FFFF ;T0=width-1 -ANDI T1,T0,03FF ;T1=(width-1) & 0x3FF -SLL T7,T6,0x2 ;T7=(height * 4) lower right y -LUI AT,F600 -OR T8,T7,AT ;T8=F6000FFC -SLL T2,T1,0xE ;T2=width * 0x4000: lower right x -OR T3,T8,T2 ;T3=F6000000 | lrx | lry -SW T3,0000 (V1) ;T3->DL: fillrect - lrx 0x13F, lry 0xEF -SW R0,0004 (V1) ; 0->DL: fillrect - ulx 0, uly 0 -LW RA,001C (SP) -OR V0,S0,R0 ;V0=S0: new DL address -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0038 - - diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A39C - Menu 19 initializer - removed Spectrum file select.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A39C - Menu 19 initializer - removed Spectrum file select.txt deleted file mode 100644 index 6e92625..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A39C - Menu 19 initializer - removed Spectrum file select.txt +++ /dev/null @@ -1,68 +0,0 @@ -7F01A39C 4EECC menu 19 initializer: removed Spectrum game selection screen -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -//7F01A3A8: c-left game 0: Sabre Wulf -OR S0,R0,R0 ;S0=0 selected game# -ADDIU A0,R0,0002 ;A0=2: player 3 -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0002 ;A1= c-left -BNE V0,R0,7F01A464 -ADDIU A0,R0,0002 ;A0=2: player 3 -//7F01A3C0: c-right game 1: Atic Atac -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0001 ;A1= c-right -BEQ V0,R0,7F01A3D8 -ADDIU A0,R0,0002 ;A0=2: player 3 -BEQ R0,R0,7F01A464 -ADDIU S0,R0,0001 -//7F01A3D8: c-up game 2: jetpac -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0008 -BEQ V0,R0,7F01A3F0 -ADDIU A0,R0,0002 ;A0=2: player 3 -BEQ R0,R0,7F01A464 -ADDIU S0,R0,0002 -//7F01A3F0: c-down game 3: jetman -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0004 -BEQ V0,R0,7F01A408 -ADDIU A0,R0,0002 ;A0=2: player 3 -BEQ R0,R0,7F01A464 -ADDIU S0,R0,0003 -//7F01A408: +-left game 4: alien8 -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0200 -BEQ V0,R0,7F01A420 -ADDIU A0,R0,0002 ;A0=2: player 3 -BEQ R0,R0,7F01A464 -ADDIU S0,R0,0004 -//7F01A420: +-right game 5: gunfright -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0100 -BEQ V0,R0,7F01A438 -ADDIU A0,R0,0002 ;A0=2: player 3 -BEQ R0,R0,7F01A464 -ADDIU S0,R0,0005 -//7F01A438: +-up game 6: underwurlde -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0800 -BEQ V0,R0,7F01A450 -ADDIU A0,R0,0002 ;A0=2: player 3 -BEQ R0,R0,7F01A464 -ADDIU S0,R0,0006 -//7F01A450: +-down game 7: knightlore -JAL 7000C30C ;V0= player A0's buttons A1 held -ADDIU A1,R0,0400 -BEQ V0,R0,7F01A464 -NOP -ADDIU S0,R0,0007 -//7F01A464: load game -JAL 7F0D2FC4 ;initialize Spectrum running game index #A0 -OR A0,S0,R0 ;A0=S0: game# -//7F01A46C: -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A488 - Menu 19 interface - removed Spectrum file select.txt b/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A488 - Menu 19 interface - removed Spectrum file select.txt deleted file mode 100644 index a032f69..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A488 - Menu 19 interface - removed Spectrum file select.txt +++ /dev/null @@ -1,24 +0,0 @@ -7F01A488 4EFB8 menu 19 interface: removed Spectrum game selection screen -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 ;F12=60.0 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 ;F12->video2 page width & something else... -LWC1 F12,1B3C (AT) ;F12=80051B3C: 10000.0 -LUI AT,42C8 -MTC1 AT,F12 ;F12=100.0 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1B40 (AT) ;F14=80051B40: 275.0 -JAL 70004534 -OR A0,R0,R0 ;A0=0 -JAL 7F0D3374 ;run loaded Spectrum game -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - diff --git a/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A4E0 - Menu 19 constructor - removed Spectrum file select.TXT b/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A4E0 - Menu 19 constructor - removed Spectrum file select.TXT deleted file mode 100644 index d453f0f..0000000 --- a/notes/GE Documentation/Main Menus/Main and Misc/menu 19 - Spectrum emulator (removed)/7F01A4E0 - Menu 19 constructor - removed Spectrum file select.TXT +++ /dev/null @@ -1,86 +0,0 @@ -7F01A4E0 4F010 menu 19 constructor: removed Spectrum game selection screen -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F01C0D0 ;insert image DL, stats at 800232A8 -NOP -LUI T6,BA00 -LUI T2,FFFC -ORI T6,T6,1402 ;T6=BA001402 -LUI T7,B900 -LUI T8,0055 -LUI T9,B600 ;T9=B6000000 -ADDIU T0,R0,0204 ;T0=00000204 -ORI T2,T2,F87C ;T2=FFFCF87C -LUI T1,FCFF -LUI T3,BA00 -SW T6,0000 (V0) ;DL+0: rsp.setothermode_h.u: shift 14, len 2: set cycle type -ORI T8,T8,2048 ;T8=00552048 -ORI T7,T7,031D ;T7=B900031D -SW T0,0014 (V0) -SW T9,0010 (V0) -ORI T1,T1,FFFF ;T1=FCFFFFFF -SW T2,001C (V0) -ORI T3,T3,0C02 ;T3=BA000C02 -SW T7,0008 (V0) -SW T8,000C (V0) -SW T1,0018 (V0) -SW T3,0020 (V0) -LUI T5,8003 -LUI T6,F500 -LUI T9,F000 -LUI T0,0701 -LUI T2,BA00 -ADDIU T5,T5,BAF0 ;T5=8002BAF0: palette -LUI T4,FD50 ;T4=FD500000 -ORI T6,T6,0300 ;T6=F5000300 -LUI T7,0700 ;T7=07000000 -LUI T8,E600 ;T8=E6000000 -ORI T0,T0,CFF0 ;T0=0701CFF0 -ORI T9,T9,0FF0 ;T9=F0000FF0 -LUI T1,E700 ;T1=E7000000 -ORI T2,T2,0E02 ;T2=BA000E02 -ORI T3,R0,8000 ;T3=00008000 -SW R0,0004 (V0) ;DL+4: rsp.setothermode_h.l: cycle type: 1cycle -SW R0,0024 (V0) -SW T4,0028 (V0) -SW T5,002C (V0) -SW T7,0034 (V0) -SW T6,0030 (V0) -SW T8,0038 (V0) -SW R0,003C (V0) -SW T9,0040 (V0) -SW T0,0044 (V0) -SW T1,0048 (V0) -SW R0,004C (V0) -SW T3,0054 (V0) -SW T2,0050 (V0) -JAL 7F0D33B4 ;???; Spectrum microcode generator... -ADDIU A0,V0,0058 ;A0=V0+58: p->next microcode command -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -microcode generated: sets an 8-color palette used by 7F0D33B4 -BA001402 00000000 rsp.setothermode_h: cycle type: 1cycle -B900031D 00552048 rsp.setothermode_l: antialias enabled, image read, converge delta-ST clamp, alpha converge selection, blender: 1 machine, 1, color in, color blender -B6000000 00000204 rsp.cleargeometrymode: shade smooth, shade -FCFFFFFF FFFCF87C rdp.setcombine: -BA000C02 00000000 rsp.setothermode_h: texture filter: point -FD500000 8002BAF0 rdp.settextureimage: ci16 @8002BAF0 -F5000300 07000000 rdp.settile: line 1; tile #7, palette 0 -E6000000 00000000 rdp.loadsync -F0000FF0 0701CFF0 rdp.loadtlut: x=0, y=-10; tile #7, 1C, -10 -E7000000 00000000 rdp.pipesync -BA000E02 00008000 rsp.setothermode_h: palette: rgba - - -palette (seemingly) only lists eight colours -0001 000000FF black -001F 000078FF 50% blue -03C1 007800FF 50% green -03DF 007878FF 50% cyan -7801 780000FF 50% red -781F 780078FF 50% magenta -7BC1 787800FF 50% yellow -7BDF 787878FF 50% grey diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F00DEB8 - menu 07 interface - solo mission select.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F00DEB8 - menu 07 interface - solo mission select.txt deleted file mode 100644 index 46496bb..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F00DEB8 - menu 07 interface - solo mission select.txt +++ /dev/null @@ -1,338 +0,0 @@ -7F00DEB8: 429E8 menu 07 interface: solo mission select -ADDIU SP,SP,FFA0 -LUI AT,4270 -SW RA,002C (SP) -MTC1 AT,F12 -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -JAL 70004544 -SW S0,0014 (SP) -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A44 (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A48 (AT) -JAL 70004534 -OR A0,R0,R0 -LUI A0,8003 -JAL 7F00B724 -LW A0,A95C (A0) -LUI A0,8003 -LW A0,A95C (A0) -OR A1,R0,R0 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -LUI A0,8003 -LW A0,A95C (A0) -ADDIU A1,R0,0013 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -LUI A0,8003 -LW A0,A95C (A0) -ADDIU A1,R0,0014 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -LUI AT,8003 -SW R0,A8E4 (AT) -LUI AT,8007 -ADDIU T6,R0,FFFF -JAL 7F00A39C -SW T6,9784 (AT) -BEQ V0,R0,7F00DF84 -OR S4,R0,R0 -ADDIU T7,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F00E0F8 -SW T7,A8E4 (AT) -LUI AT,3F00 -LUI A0,8003 -LUI V1,8003 -MTC1 AT,F0 -ADDIU V1,V1,A908 -ADDIU A0,A0,AFD0 -ADDIU S3,R0,0005 -SLTI AT,S4,0004 -BEQ AT,R0,7F00DFEC -SLL T8,S4,0x2 -ADDU V0,A0,T8 -LW T9,0004 (V0) -LW T0,0000 (V0) -LWC1 F4,0000 (V1) -ADDU T1,T9,T0 -MTC1 T1,F6 -NOP -CVT.S.W F8,F6 -MUL.S F10,F8,F0 -C.LT.S F4,F10 -NOP -BC1T 7F00DFEC -NOP -ADDIU S4,S4,0001 -BNEL S4,S3,7F00DFA4 -SLTI AT,S4,0004 -LUI A0,8003 -LUI V1,8003 -ADDIU V1,V1,A90C -ADDIU A0,A0,AFE4 -OR S2,R0,R0 -ADDIU A1,R0,0004 -SLTI AT,S2,0003 -BEQ AT,R0,7F00E050 -SLL T2,S2,0x2 -ADDU V0,A0,T2 -LW T3,0004 (V0) -LW T4,0000 (V0) -LWC1 F16,0000 (V1) -ADDU T5,T3,T4 -MTC1 T5,F18 -NOP -CVT.S.WF6,F18 -MUL.SF8,F6,F0 -C.LT.SF16,F8 -NOP -BC1T 7F00E050 -NOP -ADDIU S2,S2,0001 -BNEL S2,A1,7F00E008 -SLTI AT,S2,0003 -BLEZ S2,7F00E098 -SLL S5,S2,0x2 -ADDU S5,S5,S2 -OR S1,R0,R0 -OR S0,S5,R0 -JAL 7F00DD60 -OR A0,S0,R0 -BGEZL V0,7F00E084 -SLTI AT,S1,0005 -ADDIU S1,S1,0001 -BNE S1,S3,7F00E064 -ADDIU S0,S0,0001 -SLTI AT,S1,0005 -BNEL AT,R0,7F00E09C -SLL S5,S2,0x2 -ADDIU S2,S2,FFFF -BGTZ S2,7F00E05C -ADDIU S5,S5,FFFB -SLL S5,S2,0x2 -BLTZ S4,7F00E0C4 -ADDU S5,S5,S2 -ADDU S0,S5,S4 -JAL 7F00DD60 -OR A0,S0,R0 -BGEZ V0,7F00E0C4 -NOP -ADDIU S4,S4,FFFF -BGEZ S4,7F00E0A8 -ADDIU S0,S0,FFFF -BGEZ S4,7F00E0EC -OR S0,S5,R0 -OR S4,R0,R0 -JAL 7F00DD60 -OR A0,S0,R0 -BGEZL V0,7F00E0F0 -ADDU T6,S5,S4 -ADDIU S4,S4,0001 -BNE S4,S3,7F00E0D0 -ADDIU S0,S0,0001 -ADDU T6,S5,S4 -LUI AT,8007 -SW T6,9784 (AT) -LUI A0,8003 -LW A0,A95C (A0) -LW T7,0008 (A0) -LW T8,0008 (T7) -LW A1,0054 (T8) -BEQL A1,R0,7F00E260 -OR A0,R0,R0 -JAL 7F06C79C -LW S4,0004 (A1) -OR S1,V0,R0 -JAL 7F0BD6C4 -LH A0,000C (S4) -SW V0,0000 (S1) -LH T9,000C (S4) -OR S2,R0,R0 -OR S0,R0,R0 -BLEZ T9,7F00E25C -ADDIU S5,R0,00F5 -ADDIU S3,R0,006E -LW T2,0008 (S4) -LW T0,0000 (S1) -ADDU T3,T2,S0 -LW AT,0000 (T3) -ADDU T1,T0,S0 -SW AT,0000 (T1) -LW T5,0004 (T3) -SW T5,0004 (T1) -LW AT,0008 (T3) -SW AT,0008 (T1) -LW T5,000C (T3) -SW T5,000C (T1) -BGEZ S2,7F00E184 -SRA A0,S2,0x2 -ADDIU AT,S2,0003 -SRA A0,AT,0x2 -JAL 7F00DD60 -SW A0,0030 (SP) -ADDIU V1,R0,00FF -LW A0,0030 (SP) -BLTZ V0,7F00E214 -ADDIU A1,R0,000F -LUI T6,8007 -LW T6,9784 (T6) -BNEL A0,T6,7F00E1E4 -LW T5,0000 (S1) -LW T7,0000 (S1) -ADDU T8,T7,S0 -SB V1,000C (T8) -LW T9,0000 (S1) -ADDU T0,T9,S0 -SB V1,000D (T0) -LW T2,0000 (S1) -ADDU T4,T2,S0 -SB V1,000E (T4) -LW T1,0000 (S1) -ADDU T3,T1,S0 -BEQ R0,R0,7F00E244 -SB S5,000F (T3) -//7F00E150 -LW T5,0000 (S1) -ADDU T6,T5,S0 -SB S3,000C (T6) -LW T7,0000 (S1) -ADDU T8,T7,S0 -SB S3,000D (T8) -LW T9,0000 (S1) -ADDU T0,T9,S0 -SB S3,000E (T0) -LW T2,0000 (S1) -ADDU T4,T2,S0 -BEQ R0,R0,7F00E244 -SB V1,000F (T4) -//7F00E184 -LW T1,0000 (S1) -ADDU T3,T1,S0 -SB A1,000C (T3) -LW T5,0000 (S1) -ADDU T6,T5,S0 -SB A1,000D (T6) -LW T7,0000 (S1) -ADDU T8,T7,S0 -SB A1,000E (T8) -LW T9,0000 (S1) -ADDU T0,T9,S0 -SB V1,000F (T0) -LH T2,000C (S4) -ADDIU S2,S2,0001 -ADDIU S0,S0,0010 -SLT AT,S2,T2 -BNEL AT,R0,7F00E148 -LW T2,0008 (S4) -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,B000 -BEQ V0,R0,7F00E314 -OR A0,R0,R0 -LUI T4,8003 -LW T4,A8E4 (T4) -ADDIU T1,R0,0001 -LUI AT,8003 -BEQ T4,R0,7F00E2A8 -LUI A0,8007 -LUI A0,8006 -SW T1,A8D8 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -BEQ R0,R0,7F00E340 -NOP -//7F00E2A8: -LW A0,9784 (A0) -BLTZ A0,7F00E340 -NOP -JAL 7F00DCC0 -NOP -LUI AT,8003 -SW V0,A8F8 (AT) -LUI T3,8003 -LW T3,A8F8 (T3) -LUI T6,8003 -LUI AT,8003 -SLL T5,T3,0x3 -SUBU T5,T5,T3 -SLL T5,T5,0x2 -ADDU T6,T6,T5 -LW T6,ABEC (T6) -ADDIU T7,R0,0001 -LUI A0,8006 -SW T6,A8F4 (AT) -LUI AT,8003 -SW T7,A8D4 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -BEQ R0,R0,7F00E340 -NOP -//7F00E314: -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 -BEQ V0,R0,7F00E340 -ADDIU T8,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW T8,A8D8 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -//7F00E340: -JAL 7F009B84 -NOP -LUI T9,8003 -LW T9,A8D4 (T9) -ADDIU A0,R0,0008 -LUI T4,8003 -BEQ T9,R0,7F00E39C -NOP -JAL 7F01A5D4 -OR A1,R0,R0 -LUI T0,8003 -LW T0,A8F8 (T0) -LUI A0,8003 -SLL T2,T0,0x3 -SUBU T2,T2,T0 -SLL T2,T2,0x2 -ADDU A0,A0,T2 -JAL 7F00DD60 -LW A0,ABF8 (A0) -JAL 7F00ED64 -OR A0,V0,R0 -BEQ R0,R0,7F00E3C0 -LW RA,002C (SP) -//7F00E39C: -LW T4,A8D8 (T4) -ADDIU A0,R0,0006 -BEQL T4,R0,7F00E3C0 -LW RA,002C (SP) -JAL 7F01A5D4 -OR A1,R0,R0 -JAL 7F00D7FC -OR A0,R0,R0 -LW RA,002C (SP) -//7F00E3C0: -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0060 diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F00E458 - menu 07 constructor - solo mission select.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F00E458 - menu 07 constructor - solo mission select.txt deleted file mode 100644 index c1bd57d..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F00E458 - menu 07 constructor - solo mission select.txt +++ /dev/null @@ -1,202 +0,0 @@ -ADDIU SP,SP,FF20 -SW RA,005C (SP) -SW S8,0058 (SP) -SW S7,0054 (SP) -SW S6,0050 (SP) -SW S5,004C (SP) -SW S4,0048 (SP) -SW S3,0044 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 -OR A3,R0,R0 -JAL 70003EF8 -OR A0,V0,R0 -LUI T6,F800 -ADDIU T7,R0,FFFF -SW T7,0004 (V0) -SW T6,0000 (V0) -JAL 7F00D5E8 -ADDIU A0,V0,0008 -JAL 7F0ACD98 -OR A0,V0,R0 -ADDIU S1,SP,0090 -OR S4,V0,R0 -OR S2,S1,R0 -SW R0,00D8 (SP) -LW S3,00D8 (SP) -OR S6,R0,R0 -JAL 7F00DCC0 -OR A0,S3,R0 -OR S0,V0,R0 -JAL 7F00DD60 -OR A0,S3,R0 -BLTZ V0,7F00E71C -LUI S5,9696 -LW T9,00D8 (SP) -LUI T4,8007 -LW T4,9784 (T4) -LUI T1,8003 -LUI T3,8003 -ADDIU T3,T3,AFE4 -ADDIU T1,T1,AFD0 -SLL T2,S6,0x2 -SLL T0,T9,0x2 -ORI S5,S5,9600 -ADDU S7,T0,T1 -BNE S3,T4,7F00E528 -ADDU S8,T2,T3 -ADDIU S5,R0,FF00 -SLL T5,S0,0x3 -SUBU T5,T5,S0 -LUI T6,8003 -ADDIU T6,T6,ABE4 -SLL T5,T5,0x2 -ADDU V0,T5,T6 -LHU V1,0006 (V0) -BEQ V1,R0,7F00E568 -NOP -JAL 7F0C1DD8 -OR A0,V1,R0 -OR A0,S2,R0 -JAL 7000A770 -OR A1,V0,R0 -BEQ R0,R0,7F00E57C -NO -JAL 7F0C1DD8 -LHU A0,0004 (V0) -OR A0,S2,R0 -JAL 7000A770 -OR A1,V0,R0 -LUI T7,8005 -LB T7,84D0 (T7) -BGTZ T7,7F00E5C4 -NO -JAL 7001387C -OR A0,S2,R0 -ADDIU V1,V0,FFFF -BLTZ V1,7F00E5C4 -ADDU V0,S2,V1 -LBU V1,0000 (V0) -SLTI AT,V1,0061 -BNEZ AT,7F00E5B4 -ADDIU T8,V1,FFE0 -SB T8,0000 (V0) -ADDIU V0,V0,FFFF -SLTU AT,V0,S1 -BEQL AT,R0,7F00E5A4 -LBU V1,0000 (V0) -LUI A1,8005 -ADDIU A1,A1,F4A0 -JAL 7000A7FC -OR A0,S2,R0 -LUI T9,8004 -LW T9,0EAC (T9) -LUI A3,8004 -SW R0,00C4 (SP) -LW A3,0EB0 (A3) -ADDIU A0,SP,00C8 -ADDIU A1,SP,00C4 -OR A2,S2,R0 -SW R0,0014 (SP) -SW R0,00C8 (SP) -JAL 7F0AE98C -SW T9,0010 (SP) -LW V1,00C8 (SP) -LW T0,0000 (S8) -LW A1,0000 (S7) -LW T1,00C4 (SP) -SUBU A2,T0,V1 -ADDIU A2,A2,001D -ADDU T2,A2,V1 -ADDIU A1,A1,FFE1 -SW A1,008C (SP) -SW T2,0010 (SP) -SW A2,0088 (SP) -OR A0,S4,R0 -SW R0,0014 (SP) -JAL 7F0AD014 -ADDU A3,A1,T1 -JAL 7000441C -OR S4,V0,R0 -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C -OR S0,T3,R0 -LUI T4,8004 -LUI T5,8004 -LW T5,0EAC (T5) -LW T4,0EB0 (T4) -ORI T6,S5,00FF -SW T6,0018 (SP) -OR A0,S4,R0 -ADDIU A1,SP,008C -ADDIU A2,SP,0088 -OR A3,S2,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -JAL 7F0ADABC -SW T4,0010 (SP) -LW V1,00C8 (SP) -LW T7,0000 (S8) -LW A1,0000 (S7) -OR S4,V0,R0 -SUBU A2,T7,V1 -ADDIU A2,A2,001D -ADDIU A1,A1,FFE1 -SW A1,008C (SP) -JAL 7000441C -SW A2,0088 (SP) -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C -OR S0,T8,R0 -LUI T9,8004 -LUI T0,8004 -LW T0,0EAC (T0) -LW T9,0EB0 (T9) -ORI T1,S5,0064 -SW T1,0018 (SP) -OR A0,S4,R0 -ADDIU A1,SP,008C -ADDIU A2,SP,0088 -OR A3,S2,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0014 (SP) -JAL 7F0ADABC -SW T9,0010 (SP) -OR S4,V0,R0 -ADDIU S6,S6,0001 -ADDIU AT,R0,0004 -BNE S6,AT,7F00E4D4 -ADDIU S3,S3,0005 -LW T2,00D8 (SP) -ADDIU AT,R0,0005 -ADDIU T3,T2,0001 -BNE T3,AT,7F00E4CC -SW T3,00D8 (SP) -JAL 7F00A238 -OR A0,S4,R0 -JAL 7F009F08 -OR A0,V0,R0 -LW RA,005C (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -LW S4,0048 (SP) -LW S5,004C (SP) -LW S6,0050 (SP) -LW S7,0054 (SP) -LW S8,0058 (SP) -JR RA -ADDIU SP,SP,00E0 diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F00E7C0 - menu 08 interface - mission difficulty.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F00E7C0 - menu 08 interface - mission difficulty.txt deleted file mode 100644 index 15b3a89..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F00E7C0 - menu 08 interface - mission difficulty.txt +++ /dev/null @@ -1,205 +0,0 @@ -7F00E7C0: 432F0 menu 08 interface: mission objectives -LUI T6,8003 -LW T6,A8F8 (T6) ;T6=8002A8F8: selected mission briefing page -ADDIU SP,SP,FFE0 -LUI A0,8003 -SLL T7,T6,0x3 -SUBU T7,T7,T6 -SLL T7,T7,0x2 ;T7=selected mission * 0x1C -SW RA,0014 (SP) -ADDU A0,A0,T7 -JAL 7F00DD60 ;highest unlocked difficulty for solo stage A0 -LW A0,ABF8 (A0) ;A0=8002ABF8+offset: solo stage # -LUI AT,4270 -MTC1 AT,F12 -JAL 70004544 -SW V0,001C (SP) ;SP+1C=V0: highest unlocked difficulty -LUI AT,8005 -JAL 70004590 ;F12->page width -LWC1 F12,1A4C (AT) ;F12=80051A4C: mission difficulty page width -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 ;set page height -LWC1 F14,1A50 (AT) ;F14=80051A50: -JAL 70004534 -OR A0,R0,R0 ;A0=0 -//7F00E824: display folder backdrop -LUI A0,8003 -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0: item #: tabs on side of folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0001 ;A1=1: item #: basic folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0003 ;A1=3: item #: OHMSS -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0004 -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -//7F00E880: test tab 3 highlight -LUI V1,8007 -LUI AT,8003 -ADDIU V1,V1,9784 ;V1=80069784: option highlighted -SW R0,A8E4 (AT) ;0->8002A8E4: reset highlight flag for folder tab 3 -ADDIU T8,R0,FFFF -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -SW T8,0000 (V1) ;-1 ->80069784: no option highlighted -LUI V1,8007 -BEQ V0,R0,7F00E8B8 ;branch if tab3 not highlighted -ADDIU V1,V1,9784 ;V1=80069784: option highlighted -ADDIU T9,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F00E95C -SW T9,A8E4 (AT) ;1->8002A8E4: tab 3 highlighted -//7F00E8B8: test 007 highlighted -LW A0,001C (SP) ;A0=SP+1C: highest unlocked difficulty -LUI V0,8003 -ADDIU V0,V0,A90C ;V0=8002A90C: vert.pos. -SLTI AT,A0,0003 -BNEZ AT,7F00E8F4 ;branch if A0 < 3: 007 not unlocked -LUI AT,8005 -LWC1 F6,1A54 (AT) ;F6=80051A54: 007.vert.pos -LWC1 F4,0000 (V0) ;F4=8002A90C: vert.pos. -ADDIU T0,R0,0003 -C.LE.S F6,F4 -NOP -BC1F 7F00E8F4 ;branch if vert.pos higher than 007.vert.pos -NOP -BEQ R0,R0,7F00E95C -SW T0,0000 (V1) ;3->80069784: 007 highlighted -//7F00E8F4: test 00 Agent highlighted -LUI V0,8003 -SLTI AT,A0,0002 -BNEZ AT,7F00E92C ;branch if A0 < 2: 00 Agent not unlocked -ADDIU V0,V0,A90C ;V0=8002A90C -LUI AT,4373 -MTC1 AT,F10 -LWC1 F8,0000 (V0) ;F8=8002A90C: vert.pos. -ADDIU T1,R0,0002 -C.LE.S F10,F8 -NOP -BC1F 7F00E92C ;branch if vert.pos higher than 00Agent.vert.pos -NOP -BEQ R0,R0,7F00E95C -SW T1,0000 (V1) ;2->80069784: 00 Agent highlighted -//7F00E92C: test Secret Agent highlighted -BLEZ A0,7F00E958 ;branch if A0 0 or invalid: Agent -LUI AT,4353 -LWC1 F16,0000 (V0) ;F16=8002A90C: vert.pos. -MTC1 AT,F18 -ADDIU A3,R0,0001 -C.LE.S F18,F16 -NOP -BC1FL 7F00E95C ;branch if vert.pos higher than SecretAgent.vert.pos -SW R0,0000 (V1) -BEQ R0,R0,7F00E95C -SW A3,0000 (V1) ;1->80069784: Secret Agent highlighted -//7F00E958: default to Agent -SW R0,0000 (V1) ;0->80069784: Agent highlighted -//7F00E95C: test if highlighted option selected -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,B000 ;A1= A, Z, Start buttons -LUI V1,8007 -ADDIU V1,V1,9784 ;V1=80069784: option highlighted -BEQ V0,R0,7F00E9DC ;branch if buttons not pressed -ADDIU A3,R0,0001 -LUI T2,8003 -LW T2,A8E4 (T2) ;T2=8002A8E4: TRUE if folder tab 3 highlighted -LUI AT,8003 -LUI A0,8006 -BEQ T2,R0,7F00E9A8 ;branch if tab 3 not highlighted -ADDIU A1,R0,00C7 ;A1=SE 0C7: folder switch SE -SW A3,A8D8 (AT) ;1->8002A8D8: tab 3 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F00EA0C -NOP -//7F00E9A8: option or tab 2 selected -LW V0,0000 (V1) ;V0=80069784: option highlighted -LUI AT,8003 -LUI A0,8006 -BLTZ V0,7F00EA0C ;branch if tab 2 highlighted instead -ADDIU A1,R0,004D ;A1=SE 04D: -SW V0,A8FC (AT) ;highlighted option -> 8002A8FC: difficulty -LUI AT,8003 -SW A3,A8D4 (AT) ;1->8002A8D4: tab 2 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F00EA0C -NOP -//7F00E9DC: test for backtrack -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;B button -BEQ V0,R0,7F00EA0C ;branch if B not pressed -ADDIU A3,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW A3,A8D8 (AT) ;1->8002A8D8: tab 3 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=SE 0C7: folder switch SE -JAL 70008E08 ;play sound effect A1 -OR A2,R0,R0 ;A2=NULL -//7F00EA0C: test for tab 2 selected: "NEXT" -JAL 7F009B84 ;control stick tracking -NOP -LUI T3,8003 -LW T3,A8D4 (T3) ;T3=8002A8D4: TRUE if tab 2 selected -LUI T4,8003 -LUI T5,8003 -BEQ T3,R0,7F00EA70 ;branch if tab 2 not selected -NOP -LW T4,A8FC (T4) ;T4=8002A8FC: difficulty -ADDIU AT,R0,0003 -OR A1,R0,R0 ;A1=0: immediate -BNE T4,AT,7F00EA58 ;branch if difficulty not 3: not 007 -ADDIU A0,R0,000A ;A0=A: mission objectives page -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A0,R0,0009 ;A0=9: 007 options page -JAL 7F00A3F0 ;set cursor position to tab 2 -NOP -BEQ R0,R0,7F00EAB0 -LW RA,0014 (SP) -//7F00EA58: advance to mission objectives page -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 ;A1=0: immediate -JAL 7F00A3F0 ;set cursor position to tab 2 -NOP -BEQ R0,R0,7F00EAB0 -LW RA,0014 (SP) -//7F00EA70: backtrack to solo select menu -LW T5,A8D8 (T5) ;T5=8002A8D8: TRUE if tab3 selected -ADDIU A0,R0,0007 ;A0=7: solo stage select menu -BEQL T5,R0,7F00EAB0 ;branch if tab 3 not selected -LW RA,0014 (SP) -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 ;A1=0: immediate -LUI T6,8003 -LW T6,A8F8 (T6) ;T6=8002A8F8: selected mission briefing page -LUI A0,8003 -SLL T7,T6,0x3 -SUBU T7,T7,T6 -SLL T7,T7,0x2 ;T7=selected mission * 0x1C -ADDU A0,A0,T7 -JAL 7F00E3E0 ;set cursor to stage A0 on mission select -LW A0,ABF8 (A0) ;A0=8002ABF8+offset: solo stage# -//7F00EAAC: return -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F00EABC - print solo stage briefing name.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F00EABC - print solo stage briefing name.txt deleted file mode 100644 index ea6aae1..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F00EABC - print solo stage briefing name.txt +++ /dev/null @@ -1,249 +0,0 @@ -7F00EABC 435EC print solo stage name for briefing - accepts: A0=p->DL, A1=p->text buffer -LUI A2,8003 -LW A2,A8FC (A2) ;A2=8002A8FC: difficulty -ADDIU SP,SP,FFA8 -SW S0,0038 (SP) -OR S0,A1,R0 ;S0=A1: p->buffer -SW RA,003C (SP) -BLTZ A2,7F00EB6C ;branch if multiplayer -SW A0,0058 (SP) ;SP+58=A0: p->DL -//7F00EADC: concoct difficulty string -JAL 7F00C384 ;V0=p->difficulty name -OR A0,A2,R0 ;A0=A2: difficulty -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000A770 ;V0= strcpy(A0,A1) -OR A1,V0,R0 ;A1=V0: p->difficulty name -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C20 ;A0=9C20: ": James Bond\n" -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -//7F00EB04: display difficulty string -ADDIU T6,R0,0037 ;T6=0x37: xpos -ADDIU T7,R0,0057 ;T7=0x57: ypos -SW T6,0054 (SP) ;SP+54= xpos -JAL 7000441C ;V0= text clip width -SW T7,0050 (SP) ;SP+50= ypos -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) ;SP+44= text clip width -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LW T8,0EB8 (T8) ;T8=80040EB8: p->2nd font table -LH T1,0044 (SP) ;T1= text clip width -ADDIU T0,R0,00FF ;T0=000000FF black -SW T0,0018 (SP) ;SP+18= colour -LW A0,0058 (SP) ;A0= p->DL -ADDIU A1,SP,0054 ;A1=SP+54: p->xpos -ADDIU A2,SP,0050 ;A2=SP+50: p->ypos -OR A3,S0,R0 ;A3=S0: p->text -SW V0,0020 (SP) ;SP+20= text clip height -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T9,0014 (SP) ;SP+14= p->1st font table -SW T8,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C= text clip width -SW V0,0058 (SP) ;SP+58=V0: p->DL -//7F00EB6C: find the mission's chapter heading -LUI A0,8003 -JAL 7F00BB1C ;V0=chapter entry# for briefing A0 -LW A0,A8F8 (A0) ;A0=8002A8F8: selected mission briefing page -BLTZ V0,7F00EC60 ;branch if no chapter found -SW V0,004C (SP) ;SP+4C=V0: chapter briefing entry# -//7F00EB80: concoct mission# line -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C21 ;A0=9C21: "Mission " -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000A770 ;V0= strcpy(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -LW T2,004C (SP) ;T2= chapter entry# -LUI T4,8003 -ADDIU T4,T4,ABE4 ;T4=8002ABE4: table of missions and briefings -SLL T3,T2,0x3 -SUBU T3,T3,T2 -SLL T3,T3,0x2 ;T3=entry * 1C: offset to chapter entry -ADDU V1,T3,T4 ;V1=p->chapter entry -LW A1,0000 (V1) ;A1=p->chapter# -SW V1,0040 (SP) ;SP+40=V1: p->chapter# -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S0,R0 ;A0=S0: p->buffer -LUI A1,8005 -ADDIU A1,A1,F4A4 ;A1=8004F4A4: ": " -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S0,R0 ;A0=S0: p->buffer -LW T5,0040 (SP) ;SP+40=V1: p->chapter# -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,0004 (T5) ;A0=name of chapter/stage 1 -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -LUI A1,8005 -ADDIU A1,A1,F4A8 ;A1=8004F4A8: "\n" -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S0,R0 ;A0=S0: p->buffer -//7F00EBFC: display "Mission %d: %s\n" string -ADDIU T6,R0,0037 ;T6=37 xpos -ADDIU T7,R0,0067 ;T7=67 ypos -SW T6,0054 (SP) ;SP+54= xpos -JAL 7000441C ;V0= text clip width -SW T7,0050 (SP) ;SP+50= ypos -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) ;SP+40= text clip width -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LW T8,0EB8 (T8) ;T8=80040EB8: p->2nd font table -LH T1,0044 (SP) ;T1= text clip width -ADDIU T0,R0,00FF ;T0=000000FF black -SW T0,0018 (SP) ;SP+18= colour -LW A0,0058 (SP) ;A0=SP+58: p->DL -ADDIU A1,SP,0054 ;A1=SP+54: p->xpos -ADDIU A2,SP,0050 ;A2=SP+50: p->ypos -OR A3,S0,R0 ;A3=S0: p->text -SW V0,0020 (SP) ;SP+20= text clip height -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T9,0014 (SP) ;SP+14= p->1st font table -SW T8,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C= text clip width -SW V0,0058 (SP) ;SP+58=V0: p->DL -//7F00EC64: concoct part and mission name string -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C22 ;A0=9C22: "Part " -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000A770 ;V0= strcpy(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -LUI T2,8003 -LW T2,A8F8 (T2) ;T2=8002A8F8: selected mission briefing page -LUI A1,8003 -OR A0,S0,R0 ;A0=S0: p->buffer -SLL T3,T2,0x3 -SUBU T3,T3,T2 -SLL T3,T3,0x2 ;T3=page * 1C: offset to data -ADDU A1,A1,T3 -JAL 7000A7FC ;strcat(A0,A1) -LW A1,ABE4 (A1) ;A1=8002ABE4+offset: part # (this must be a stage entry, after all) -LUI A1,8005 -ADDIU A1,A1,F4AC ;A1=8004F4AC: ": " -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S0,R0 ;A0=S0: p->buffer -LUI T4,8003 -LW T4,A8F8 (T4) ;T4=8002A8F8: selected mission briefing page -LUI A0,8003 -SLL T5,T4,0x3 -SUBU T5,T5,T4 -SLL T5,T5,0x2 ;T5=page * 1C: offset to data -ADDU A0,A0,T5 -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,ABE8 (A0) ;A0=8002ABE8+offset: name of chapter/stage 1 -OR A0,S0,R0 ;A0=S0: p->buffer -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -LUI A1,8005 -ADDIU A1,A1,F4B0 ;A1=8004F4B0: "\n" -JAL 7000A7FC ;strcat(A0,A1) -OR A0,S0,R0 ;A0=S0: p->buffer -//7F00ECF0: display "Part %s: %s\n" string -ADDIU T6,R0,0037 ;T6=37 xpos -ADDIU T7,R0,0077 ;T7=77 ypos -SW T6,0054 (SP) ;SP+54= xpos -JAL 7000441C ;V0= text clip width -SW T7,0050 (SP) ;SP+50= ypos -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) ;SP+44= text clip width -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LW T8,0EB8 (T8) ;T8=80040EB8: p->2nd font table -LH T1,0044 (SP) ;T1=text clip width -ADDIU T0,R0,00FF ;T0=000000FF black -SW T0,0018 (SP) ;SP+18= colour -LW A0,0058 (SP) ;A0=SP+58: p->DL -ADDIU A1,SP,0054 ;A1=SP+54: p->ypos -ADDIU A2,SP,0050 ;A2=SP+50: p->ypos -OR A3,S0,R0 ;A3=S0: p->text -SW V0,0020 (SP) ;SP+20= text clip height -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T9,0014 (SP) ;SP+14= p->1st font table -SW T8,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T1,001C (SP) ;SP+1C= text clip width -//7F00ED54: return -LW RA,003C (SP) -LW S0,0038 (SP) -ADDIU SP,SP,0058 -JR RA -NOP - -+_+ - -7F00C384 40EB4 V0=p->name of difficulty A0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ A0,R0,7F00C3B8 ;branch if agent (0) -OR V1,R0,R0 ;V1=0: NULL -ADDIU AT,R0,0001 -BEQ A0,AT,7F00C3C8 ;branch if secret agent (1) -ADDIU AT,R0,0002 -BEQ A0,AT,7F00C3D8 ;branch if 00 agent (2) -ADDIU AT,R0,0003 -BEQ A0,AT,7F00C3E8 ;branch if 007 -NOP -BEQ R0,R0,7F00C3F8 ;return if default -LW RA,0014 (SP) -//7F00C3B8: agent -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C13 ;A0=9C13: "agent" -BEQ R0,R0,7F00C3F4 -OR V1,V0,R0 ;V1=V0: p->text -//7F00C3C8: secret agent -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C14 ;A0=9C13: "secret agent" -BEQ R0,R0,7F00C3F4 -OR V1,V0,R0 ;V1=V0: p->text -//7F00C3D8: 00 agent -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C15 ;A0=9C13: "00 agent" -BEQ R0,R0,7F00C3F4 -OR V1,V0,R0 ;V1=V0: p->text -//7F00C3E8: 007 -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C16 ;A0=9C13: "007" -OR V1,V0,R0 ;V1=V0: p->text -//7F00C3F4: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,V1,R0 ;V0=V1: p->text or NULL -JR RA -NOP - -+_+ - -7F00BB1C 4064C V0=chapter briefing # for briefing A0 - accepts: A0=briefing entry# -BLTZ A0,7F00BB5C ;branch if invalid page -OR V1,A0,R0 ;V1=A0: page -SLL T6,A0,0x3 -SUBU T6,T6,A0 -LUI T7,8003 -ADDIU T7,T7,ABE4 ;T7=8002ABE4: table of missions and briefings -SLL T6,T6,0x2 ;T6=page * 0x1C -ADDU V0,T6,T7 ;V0=p->briefing page data -//7F00BB3C: find nearest chapter heading -LW T8,0010 (V0) ;T8=data+10: chapter flag -BEQL T8,R0,7F00BB54 ;branch if not a chapter heading -ADDIU V1,V1,FFFF -JR RA -OR V0,V1,R0 ;V0=V1: page# -//7F00BB50: -ADDIU V1,V1,FFFF ;V1-- page-- -BGEZ V1,7F00BB3C ;loop for each page until out of pages -ADDIU V0,V0,FFE4 ;V0-=1C: previous chunk of data -//7F00BB5C: -ADDIU V0,R0,FFFF -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F00ED98 - menu 08 constructor - mission difficulty.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F00ED98 - menu 08 constructor - mission difficulty.txt deleted file mode 100644 index 0883d8a..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F00ED98 - menu 08 constructor - mission difficulty.txt +++ /dev/null @@ -1,370 +0,0 @@ -7F00ED98: 438C8 menu 08 constructor: mission objectives - accepts: A0=p->display list target -ADDIU SP,SP,F390 -LUI T6,8003 -LW T6,A8F8 (T6) ;T6=8002A8F8: selected mission briefing page (solo stage menu numbering, inc. groups) -SW A0,0C70 (SP) -LUI A0,8003 -SLL T7,T6,0x3 -SUBU T7,T7,T6 -SLL T7,T7,0x2 ;T7=selected mission * 0x1C -SW RA,006C (SP) -ADDU A0,A0,T7 -SW S8,0068 (SP) -SW S7,0064 (SP) -SW S6,0060 (SP) -SW S5,005C (SP) -SW S4,0058 (SP) -SW S3,0054 (SP) -SW S2,0050 (SP) -SW S1,004C (SP) -SW S0,0048 (SP) -SDC1 F20,0040 (SP) -JAL 7F00DD60 -LW A0,ABF8 (A0) ;A0=8002ABF8: -// -SW V0,0C68 (SP) -LW A0,0C70 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -SW V0,0C70 (SP) -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 -SW V0,0C70 (SP) -JAL 7F00D5E8 -OR A0,V0,R0 -// copy to buffer -LUI T9,8005 -ADDIU T9,T9,F4B4 -SW V0,0C70 (SP) -ADDIU T3,T9,0BB8 ;T3=8005006C: end copy -ADDIU T8,SP,00A4 -LW AT,0000 (T9) ;AT=8004F4B4: start copy: \r, then nothing until sound buffer -ADDIU T9,T9,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T9) -SW AT,FFF8 (T8) -LW AT,FFFC (T9) -BNE T9,T3,7F00EE34 -SW AT,FFFC (T8) -// -JAL 7F0ACD98 -OR A0,V0,R0 -SW V0,0C70 (SP) -OR A0,V0,R0 -JAL 7F00EABC -ADDIU A1,SP,00A4 -SW V0,0C70 (SP) -// display "DIFFICULTY:\r" -JAL 7F0C1DD8 ;p->text ID "DIFFICULTY:\r" -ORI A0,R0,9C23 -ADDIU T4,R0,0037 -ADDIU T5,R0,008F -OR S1,V0,R0 -SW T4,0C60 (SP) -JAL 7000441C ;V0= text clip width -SW T5,0C5C (SP) -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 -LUI S5,8004 -LUI S6,8004 -ADDIU S6,S6,0EB4 -ADDIU S5,S5,0EB8 -LW T7,0000 (S5) -LW T2,0000 (S6) -ADDIU T1,R0,00FF -SW T1,0018 (SP) -LW A0,0C70 (SP) -ADDIU A1,SP,0C60 -ADDIU A2,SP,0C5C -OR A3,S1,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0010 (SP) -JAL 7F009760 ;write text -SW T2,0014 (SP) -// -LUI T0,8007 -LW T0,9784 (T0) ;T0=80069784: -SW V0,0C70 (SP) -LW A0,0C70 (SP) -BLTZ T0,7F00EF50 -LUI T3,8005 -LB T3,84D0 (T3) ;T3=800484D0: selected language -SLL V1,T0,0x4 -SUBU V1,V1,T0 -BLEZ T3,7F00EF24 ;branch if english-ish (no text offset) -ADDIU T9,R0,007E -BEQ R0,R0,7F00EF28 -ADDIU V0,R0,0032 -//7F00EF24: -OR V0,R0,R0 -//7F00EF28: -SLL V1,V1,0x1 -ADDIU T8,V1,00C3 -ADDIU T4,R0,0032 -SW T4,0014 (SP) -SW T8,0010 (SP) -ADDIU A2,V1,00B2 -SUBU A1,T9,V0 -JAL 7F0AD014 ;draw coloured box -ADDIU A3,R0,00F0 -SW V0,0C70 (SP) -OR S1,R0,R0 -ADDIU S8,R0,0002 -ADDIU S7,R0,0001 -ADDIU S4,R0,0003 -LW S2,00A0 (SP) -BEQ S1,R0,7F00EF74 -LW T5,0C68 (SP) -SLT AT,T5,S1 -BNEZ AT,7F00F174 -LUI T6,8005 -LB T6,84D0 (T6) ;T6=800484D0: selected language -SLL S3,S1,0x4 -SUBU S3,S3,S1 -SLL S3,S3,0x1 -BLEZ T6,7F00EFF8 -ADDIU S3,S3,00B4 -BEQ S1,R0,7F00EFE8 -ORI A0,R0,9D09 ;A0=text ID 9D09: "1.\r" -BEQ S1,S7,7F00EFE8 -NOP -BEQ S1,S8,7F00EFE8 -NOP -BEQ S1,S4,7F00EFE8 -NOP -BEQ R0,R0,7F00F014 -LW T2,0000 (S6) -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -JAL 7F0C1DD8 ;ret V0=p->text A0 -ADDU A0,A0,S1 -BEQ R0,R0,7F00F010 -OR S2,V0,R0 -// -ADDIU S2,SP,00A4 -LUI A1,7F01 -ADDIU A1,A1,EFB8 ;A1=7F00EFB8: "%d.\r" -OR A0,S2,R0 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A2,S1,0001 -LW T2,0000 (S6) -ADDIU A0,SP,0098 -ADDIU A1,SP,009C -OR A2,S2,R0 -LW A3,0000 (S5) -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) -LUI T1,8005 -LB T1,84D0 (T1) ;T1=800484D0: selected language -ADDIU T3,R0,0082 -OR V0,R0,R0 -BLEZ T1,7F00F054 ;branch if english-ish -NOP -LW V0,009C (SP) -BEQ R0,R0,7F00F054 -ADDIU V0,V0,FFF6 -//7F00F054: -SUBU T9,T3,V0 -SW T9,0C60 (SP) -JAL 7000441C ;V0= text clip width -SW S3,0C5C (SP) -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LW T4,0000 (S5) -LW T5,0000 (S6) -ADDIU T6,R0,00FF -SW T6,0018 (SP) -LW A0,0C70 (SP) -ADDIU A1,SP,0C60 -ADDIU A2,SP,0C5C -OR A3,S2,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0010 (SP) -JAL 7F009760 ;write text -SW T5,0014 (SP) -// -BEQ S1,R0,7F00F0D8 -SW V0,0C70 (SP) -BEQ S1,S7,7F00F0E8 -NOP -BEQ S1,S8,7F00F0F8 -NOP -BEQ S1,S4,7F00F108 -NOP -BEQ R0,R0,7F00F118 -ADDIU T7,R0,0096 -// -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C24 ;A0=9C24: "Agent\r" -BEQ R0,R0,7F00F114 -OR S2,V0,R0 -// -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C25 ;A0=9C25: "Secret Agent\r" -BEQ R0,R0,7F00F114 -OR S2,V0,R0 -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C26 ;A0=9C26: "00 Agent\r" -BEQ R0,R0,7F00F114 -OR S2,V0,R0 -JAL 7F0C1DD8 ;ret V0=p->text A0 -ORI A0,R0,9C27 ;A0=9C27: "007\r" -OR S2,V0,R0 -//7F00F114: -ADDIU T7,R0,0096 -SW T7,0C60 (SP) -JAL 7000441C ;V0= text clip width -SW S3,0C5C (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LW T1,0000 (S5) -LW T3,0000 (S6) -ADDIU T9,R0,00FF -SW T9,0018 (SP) -LW A0,0C70 (SP) -ADDIU A1,SP,0C60 -ADDIU A2,SP,0C5C -OR A3,S2,R0 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T1,0010 (SP) -JAL 7F009760 ;write text -SW T3,0014 (SP) -SW V0,0C70 (SP) -// -ADDIU S1,S1,0001 -SLTI AT,S1,0004 -BNEZ AT,7F00EF64 ;loop for each potential entry -NOP -SW S2,00A0 (SP) -JAL 7F00A238 ;add tab 3: "PREVIOUS" -LW A0,0C70 (SP) -LUI AT,3F00 -MTC1 AT,F20 ;F20=1.0 [3F800000] -SW V0,0C70 (SP) -OR S1,R0,R0 -ADDIU S2,SP,0C70 -BEQ S1,R0,7F00F1B4 -LW T8,0C68 (SP) -SLT AT,T8,S1 -BNEZ AT,7F00F2B8 -//7F00F1B4: -LUI A0,8003 -LW A0,A8F8 (A0) ;A0=8002A8F8: solo stage# -JAL 7F00DD0C ;determine if stage complete for difficulty -OR A1,S1,R0 ;A1=S1: difficulty -BNE V0,S4,7F00F2B8 ;branch if not true -SLL T4,S1,0x4 -//7F00F1CC: display check -SUBU T4,T4,S1 -SLL T4,T4,0x1 ;T4=difficulty * 0x1E -ADDIU T5,T4,00BA ;T5=0xBA+offset: vertical position -MTC1 T5,F6 -LUI AT,438C -MTC1 AT,F4 ;F4=280.0 [438C0000] -CVT.S.W F8,F6 ;F8=vert.pos. -LUI S0,8009 -LW S0,D128 (S0) ;S0=8008D128: p->main folder images -SWC1 F4,0090 (SP) ;SP+90= horizontal position -LUI AT,4F80 -ADDIU S0,S0,0030 ;S0+=30: checkmark -SWC1 F8,0094 (SP) ;SP+94= vert.pos. -LBU T6,0004 (S0) ;T6=width -MTC1 T6,F10 -BGEZ T6,7F00F21C ;skip if a positive value -CVT.S.W F16,F10 ;F16=width -// correct for a negative width -MTC1 AT,F18 ;F18=4294967296.0 [4F800000] -NOP -ADD.S F16,F16,F18 ;F16+=4294967296.0: width+=negative converter -//7F00F21C: -MUL.S F4,F16,F20 ;F4=width * 1.0 -LUI AT,4F80 -SWC1 F4,0088 (SP) ;SP+88= width -LBU T7,0005 (S0) ;T7=height -MTC1 T7,F6 -BGEZ T7,7F00F244 ;skip if a positive value -CVT.S.W F8,F6 -// -MTC1 AT,F10 ;F10=4294967296.0 [4F800000] -NOP -ADD.S F8,F8,F10 ;F8+=4294967296.0: height+=negative converter -//7F00F244: append image to display list -MUL.S F18,F8,F20 ;F18=height * 1.0 -OR A0,S2,R0 ;A0=S2: p->display list -OR A1,S0,R0 ;A1=S0: p->image declaration -ADDIU A2,R0,0004 ;A2=4: ??? -OR A3,R0,R0 ;A3=0: ??? -SW R0,0010 (SP) ;SP+10=0: ??? -JAL 7F076D68 ;generates a display list for image declaration A1 -SWC1 F18,008C (SP) ;SP+8C= height -//7F00F264: display image at position -LBU T2,0005 (S0) ;T2=height -LBU A3,0004 (S0) ;A3=width -ADDIU T1,R0,0001 -ADDIU T3,R0,00B4 -ADDIU T9,R0,00FF -SW T9,002C (SP) ;SP+2C=FF: alpha channel -SW T3,0020 (SP) ;SP+20=B4: red channel -SW T1,001C (SP) ;SP+1C=1: 1-flip vertical -SW R0,0028 (SP) ;SP+28=00: blue channel -SW R0,0024 (SP) ;SP+24=00: green channel -SW R0,0018 (SP) ;SP+18=0: 1-flip horizontally -SW R0,0014 (SP) ;SP+14=0: no rotate -SW T2,0010 (SP) ;SP+10: height -LBU T8,0006 (S0) ;T8=format -SW R0,0034 (SP) ;SP+34=0: -OR A0,S2,R0 ;A0=S2: p->display list -SLT T4,R0,T8 ;T4=TRUE if format != 0 -SW T4,0030 (SP) ;SP+30=!format -ADDIU A1,SP,0090 ;A1=SP+90: p->x/y position -JAL 7F06AFE8 ;display image at position on screen -ADDIU A2,SP,0088 ;A2=SP+88: -//7F00F2B8: -ADDIU S1,S1,0001 -BNE S1,S4,7F00F1A4 ;loop for each difficulty listed -NOP -JAL 7F009F08 ;loads selected icon for folder select -LW A0,0C70 (SP) -LW RA,006C (SP) -LDC1 F20,0040 (SP) -LW S0,0048 (SP) -LW S1,004C (SP) -LW S2,0050 (SP) -LW S3,0054 (SP) -LW S4,0058 (SP) -LW S5,005C (SP) -LW S6,0060 (SP) -LW S7,0064 (SP) -LW S8,0068 (SP) -JR RA -ADDIU SP,SP,0C70 diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F00F374 - menu 09 interface - 007 options.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F00F374 - menu 09 interface - 007 options.txt deleted file mode 100644 index a6ca1ac..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F00F374 - menu 09 interface - 007 options.txt +++ /dev/null @@ -1,357 +0,0 @@ -7F00F374: 43EA4 menu 09 interface: 007 options -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 ;F12= [42700000] -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A58 (AT) ;AT=80051A58: folder x dimention -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000] -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A5C (AT) ;F14=80051A5C: folder z dimention -JAL 70004534 -OR A0,R0,R0 ;A0=0 -//7F00F3B4: test if A/Z held -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,A000 ;A1=A000: A, Z button -BNEZ V0,7F00F4CC ;branch if held -LUI AT,8003 -//7F00F3C8: folder interface -SW R0,A8E4 (AT) ;0->8002A8E4: unhighlight tab 3 -LUI AT,8003 -SW R0,A8E0 (AT) ;0->8002A8E0: unhighlight tab 2 -LUI AT,8003 -SW R0,A8DC (AT) ;0->8002A8DC: unhighlight tab 1 -LUI AT,8007 -SW R0,9794 (AT) ;0->80069794: highlight "Enemy reaction speed" -LUI AT,8007 -SW R0,9798 (AT) ;0->80069798: highlight "Enemy health" -LUI AT,8007 -SW R0,979C (AT) ;0->8006979C: highlight "Enemy accuracy" -LUI AT,8007 -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -SW R0,97A0 (AT) ;0->800697A0: highlight "Enemy damage" -BEQ V0,R0,7F00F414 ;branch if it isn't -ADDIU T6,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F00F4CC -SW T6,A8E4 (AT) ;1->8002A8E4: highlight tab 3 -//7F00F414: tab 2 rollover detection -JAL 7F00A578 ;V0=TRUE if cursor on tab 2 -NOP -BEQ V0,R0,7F00F430 ;branch if it isn't -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F00F4CC -SW V1,A8E0 (AT) ;1->8002A8E0: highlight tab 2 -//7F00F430: tab 1 rollover detection -JAL 7F00A1E4 ;V0=TRUE if cursor on tab 1 -NOP -BEQ V0,R0,7F00F450 ;branch if it isn't -LUI AT,8003 -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F00F4CC -SW V1,A8DC (AT) ;1->8002A8DC: highlight tab 1 -//7F00F450: detect if rollover slidebars -LWC1 F4,A90C (AT) ;F4=8002A90C: vert.pos. -ADDIU V1,R0,0001 -TRUNC.W.S F6,F4 -MFC1 V0,F6 ;V0=vert.pos. -NOP -SLTI AT,V0,0107 -BNEZ AT,7F00F478 ;branch if 0-106 -LUI AT,8007 -BEQ R0,R0,7F00F4CC -SW V1,9794 (AT) ;1->80069794: highlight "Enemy reaction speed" -//7F00F478: rollover "Enemy damage" -SLTI AT,V0,00E6 -BNEZ AT,7F00F490 ;branch if 0-E5 -ADDIU V1,R0,0001 -LUI AT,8007 -BEQ R0,R0,7F00F4CC -SW V1,97A0 (AT) ;1->800697A0: highlight "Enemy damage" -//7F00F490: rollover "Enemy accuracy" -SLTI AT,V0,00C5 -BNEZ AT,7F00F4A8 ;branch if 0-C5 -ADDIU V1,R0,0001 -LUI AT,8007 -BEQ R0,R0,7F00F4CC -SW V1,979C (AT) ;1->8006979C: highlight "Enemy accuracy" -//7F00F4A8: rollover "Enemy health" -SLTI AT,V0,00A4 -BNEZ AT,7F00F4C4 ;branch if 0-A4 -ADDIU V1,R0,0001 -ADDIU V1,R0,0001 -LUI AT,8007 -BEQ R0,R0,7F00F4CC -SW V1,9798 (AT) ;1->80069798: highlight "Enemy health" -//7F00F4C4: default -LUI AT,8003 -SW V1,A8E0 (AT) ;1->8002A8E0: highlight folder tab 2 -//7F00F4CC: -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,1000 ;A1=1000: start button -BEQ V0,R0,7F00F504 ;branch if not pressed -ADDIU V1,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW V1,A8D0 (AT) ;1->8002A8D0: tab1 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=0C7: sound effect -JAL 70008E08 ;get and set sound effect to use -OR A2,R0,R0 ;A2=0: NULL -BEQ R0,R0,7F00F5B4 -OR A0,R0,R0 ;A0=0 -//7F00F504: test if selection made: tab 2 selected -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,A000 ;A1=A000: A,Z button -BEQ V0,R0,7F00F580 ;branch if not pressed -ADDIU V1,R0,0001 -LUI T8,8003 -LW T8,A8E0 (T8) ;T8=8002A8E0: folder tab 2 highlight -LUI A0,8006 -ADDIU A1,R0,00C7 ;A1=0C7: SE -BEQ T8,R0,7F00F53C ;branch if tab 2 not highlighted -OR A2,R0,R0 ;A2=0: NULL -LUI AT,8003 -BEQ R0,R0,7F00F570 -SW V1,A8D4 (AT) ;1->8002A8D4: tab 2 selected -//7F00F53C: test if tab 3 selected -LUI T9,8003 -LW T9,A8E4 (T9) ;T9=8002A8E4: folder tab 3 highlight -LUI AT,8003 -LUI T0,8003 -BEQ T9,R0,7F00F55C ;branch if tab 3 not highlighted -NOP -BEQ R0,R0,7F00F570 -SW V1,A8D8 (AT) ;1->8002A8D8: tab 3 selected -//7F00F55C: test if tab 1 selected -LW T0,A8DC (T0) ;T0=8002A8DC: folder tab 1 highlight -LUI AT,8003 -BEQ T0,R0,7F00F570 -NOP -SW V1,A8D0 (AT) ;1->8002A8D0: tab 1 selected -//7F00F570: play sound when changing folder page -JAL 70008E08 ;play sound A1 -LW A0,3720 (A0) ;A0=80063720: SE buffer -BEQ R0,R0,7F00F5B4 -OR A0,R0,R0 ;A0=0 -//7F00F570: test if (B)ackpedaling -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=4000: B button -BEQ V0,R0,7F00F5B0 ;branch if not pressed -//7F00F580: backpedal one page -ADDIU V1,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW V1,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C7 ;A1=0C7: SE -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=0: NULL -//7F00F5A0: test if holding button to move slider -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,A000 ;A1=A000: A,Z buttons -BEQ V0,R0,7F00F6B8 ;branch if none held -//7F00F5B0: determine length of slider -LUI A0,8003 -LUI AT,3F80 -MTC1 AT,F2 ;F2=1.0 [3F800000] -LUI AT,8003 -LWC1 F8,A908 (AT) ;F8=8002A908: horz.pos. -LUI AT,425C -MTC1 AT,F10 ;F10=55.0 [425C0000] -LUI AT,4396 -MTC1 AT,F18 ;F18=300.0 [43960000] -SUB.S F16,F8,F10 ;F16=horz.pos - 55.0 -LUI T1,8007 -LUI AT,8003 -LUI T2,8007 -DIV.S F0,F16,F18 ;F0=(horz.pos - 55.0)/ 300.0 -C.LT.S F2,F0 -NOP -BC1FL 7F00F610 ;branch if 1.0 >= ratio -MTC1 R0,F2 -MOV.S F0,F2 ;F0=F2: 1.0 if > 100%, becomes 100% -//7F00F60C: -MTC1 R0,F2 ;F2=0 -NOP -C.LT.S F0,F2 -NOP -BC1F 7F00F628 ;branch if ratio >= 0 -NOP -MOV.S F0,F2 ;F0=F2: 0 if < 0%, becomes 0% -//7F00F628: determine which slider changed; test "Enemy reaction speed" -LW T1,9794 (T1) ;T1=80069794: highlight "Enemy reaction speed" -BEQ T1,R0,7F00F63C ;branch if not highlighted -NOP -BEQ R0,R0,7F00F6B8 -SWC1 F0,A9A0 (AT) ;F0->8002A9A0: percentage->"Enemy reaction speed" slider setting -//7F00F63C: test "Enemy health" -LW T2,9798 (T2) ;T2=80069798: highlight "Enemy health" -LUI T3,8007 -BEQ T2,R0,7F00F668 ;branch if not highlighted -NOP -MUL.S F4,F0,F0 ;F4=percentage^2 -LUI AT,4120 -MTC1 AT,F6 ;F6=10.0 [41200000] -LUI AT,8003 -MUL.S F8,F4,F6 ;F8=10.0 * percentage^2 -BEQ R0,R0,7F00F6B8 -SWC1 F8,A9A4 (AT) ;F8->8002A9A4: percentage->"Enemy health" slider setting -//7F00F668: test "Enemy accuracy" -LW T3,979C (T3) ;T3=8006979C: highlight "Enemy accuracy" -LUI T4,8007 -BEQ T3,R0,7F00F694 ;branch if not highlighted -NOP -MUL.S F10,F0,F0 ;F10=percentage^2 -LUI AT,4120 -MTC1 AT,F16 ;F16=10.0 [41200000] -LUI AT,8003 -MUL.S F18,F10,F16 ;F18=10.0 * percentage^2 -BEQ R0,R0,7F00F6B8 -SWC1 F18,A9A8 (AT) ;F18->8002A9A8: percentage->"Enemy accuracy" slider setting -//7F00F694: test "Enemy damage" -LW T4,97A0 (T4) ;T4=800697A0: highlight "Enemy damage" -BEQ T4,R0,7F00F6B8 ;branch if not highlighted -NOP -MUL.S F4,F0,F0 ;F4=percentage^2 -LUI AT,4120 -MTC1 AT,F6 ;F6=10.0 [41200000] -LUI AT,8003 -MUL.S F8,F4,F6 ;F8=10.0 * percentage^2 -SWC1 F8,A9AC (AT) ;F8->8002A9AC: percentage->"Enemy damage" slider setting -//7F00F6B8: set folder backdrops -JAL 7F00B724 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0 -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0001 ;A1=1 -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0003 ;A1=3 -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0006 ;A1=6 -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -JAL 7F009B84 -NOP -//7F00F718: handle if tab1 selection -LUI T5,8003 -LW T5,A8D0 (T5) ;T5=8002A8D0: TRUE if tab1 selected -ADDIU A0,R0,000B ;A0=menu B: active gameplay -LUI T6,8003 -BEQ T5,R0,7F00F740 ;branch if tab1 not selected -NOP -JAL 7F01A5D4 ;set to menu A0 in mode A1 -ADDIU A1,R0,0001 ;A1=1: update -BEQ R0,R0,7F00F78C -LW RA,0014 (SP) -//7F00F740: handle if tab2 selection -LW T6,A8D4 (T6) ;T6=8002A8D4: TRUE if tab2 selected -ADDIU A0,R0,000A ;A0=menu A: mission briefings -LUI T7,8003 -BEQ T6,R0,7F00F764 ;branch if not selected -NOP -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current -BEQ R0,R0,7F00F78C -LW RA,0014 (SP) -//7F00F764: handle if tab3 selection -LW T7,A8D8 (T7) ;T7=8002A8D8: TRUE if tab3 selected -ADDIU A0,R0,0008 ;A0=menu 8: mission objectives -BEQL T7,R0,7F00F78C -LW RA,0014 (SP) -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 ;A1=0: current -LUI A0,8003 -JAL 7F00ED64 ;set cursor position for difficulty -LW A0,A8FC (A0) ;A0=8002A8FC: difficulty -//7F00F788: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -7F00B724: 40254 disable all switches in object (hide all) - accepts: A0=p->object instance -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LW V1,0008 (A0) ;V1=obj.inst.+8: p->obj.header -OR S2,A0,R0 ;S2=p->obj.inst. -OR S0,R0,R0 ;S0=0 count -LH A2,000C (V1) ;A2=obj.header+C: #offsets -OR S1,R0,R0 ;S1=0 offset to current entry -ADDIU S3,R0,0012 ;S3=0x12 command 12: handle/switch type -BLEZL A2,7F00B7A8 ;branch if none or invalid -LW RA,0024 (SP) -//7F00B75C: -LW T6,0008 (V1) ;T6=obj.header+8: p->obj.offsets -ADDU T7,T6,S1 ;T7=p->obj.offsets+offset: p->current offset -LW A1,0000 (T7) ;A1=current offset -BEQL A1,R0,7F00B798 ;branch if not present -ADDIU S0,S0,0001 -LHU T8,0000 (A1) ;T8=table command type bytes -ANDI T9,T8,00FF ;T9=command type -BNEL S3,T9,7F00B798 ;branch if not 0x12 -ADDIU S0,S0,0001 -JAL 7F06C79C ;grab group# from table entry A1 -OR A0,S2,R0 ;A0=S2: p->obj.instance -SW R0,0000 (V0) ;0->entry disable switch -LW V1,0008 (S2) ;V1=obj.inst.+8: p->obj.header -LH A2,000C (V1) ;A2=obj.header+C: #offsets -//7F00B794: loop for each entry -ADDIU S0,S0,0001 ;S0++ count++ -SLT AT,S0,A2 -BNEZ AT,7F00B75C ;branch if more entries -ADDIU S1,S1,0004 ;S1+=4: next entry -//7F00B7A4: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7F00ED64: 43894 set cursor position on difficulty selection page - accepts: A0=difficulty -SLL T6,A0,0x4 -SUBU T6,T6,A0 -SLL T6,T6,0x1 ;T6=difficulty * 0xE -ADDIU T7,T6,00BA ;T7=00BA + offset: vertical position on-screen -MTC1 T7,F6 -LUI AT,42D4 -MTC1 AT,F4 ;F4=106.0 [42D40000]: horizontal position on-screen -CVT.S.W F8,F6 ;F8=(float) vert.pos. for setting -LUI AT,8003 -SWC1 F4,A908 (AT) ;hor.pos -> 8002A908: horz. cursor position -LUI AT,8003 -JR RA -SWC1 F8,A90C (AT) ;vert.pos -> 8002A90C: vert. cursor position - diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F00F798 - menu 09 constructor - 007 options.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F00F798 - menu 09 constructor - 007 options.txt deleted file mode 100644 index b5ca5c7..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F00F798 - menu 09 constructor - 007 options.txt +++ /dev/null @@ -1,598 +0,0 @@ -7F00F798: 442C8 menu 09 constructor: 007 options - accepts: A0=p->display list -ADDIU SP,SP,F3E8 -SW RA,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 ;A1=red -OR A2,R0,R0 ;A2=green -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 ;A3=blue -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 ;A0=V0: DL -JAL 7F00D5E8 -OR A0,V0,R0 ;A0=V0: DL -NOP -NOP -ADDIU T0,R0,0BB8 -ADDIU T6,SP,0054 -OR T7,R0,R0 -//7F00F7D8: loop to clear buffer -ADDIU T7,T7,000C -ADDIU T6,T6,000C -SW R0,FFF4 (T6) -SW R0,FFF8 (T6) -BNE T7,T0,7F00F7D8 -SW R0,FFFC (T6) -//7F00F7F0: -LUI T7,0A00 -SW T7,0054 (SP) ;SP+54= "\n" -JAL 7F0ACD98 ;microcode... -OR A0,V0,R0 ;A0=V0: DL -OR A0,V0,R0 ;A0=V0: DL -JAL 7F00EABC -ADDIU A1,SP,0054 ;A1=SP+54: p->buffer -OR S0,V0,R0 ;S0=V0: DL -//7F00F810: display "special options" -JAL 7F0C1DD8 ;V0=p->text ID -ORI A0,R0,9C28 ;A0="SPECIAL OPTIONS:\n" -ADDIU T1,R0,0037 -ADDIU V1,R0,008F -SW V0,0C14 (SP) ;SP+C14= V0: p->text -SW T1,0C10 (SP) ;SP+C10= xpos -JAL 7000441C ;V0= text clip width -SW V1,0C0C (SP) ;SP+C0C= ypos -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) -LUI T2,8004 -LUI T3,8004 -LW T3,0EB4 (T3) ;T3=80040EB4: p->1st font table -LW T2,0EB8 (T2) ;T2=80040EB8: p->2nd font table -LH T5,0044 (SP) -ADDIU T4,R0,00FF ;T4=000000FF -SW T4,0018 (SP) ;SP+18= black -OR A0,S0,R0 ;A0=S0: DL -ADDIU A1,SP,0C10 ;A1=SP+C10: xpos -ADDIU A2,SP,0C0C ;A2=SP+C0C: ypos -LW A3,0C14 (SP) ;A3=SP+C14: p->text -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y.offset -SW R0,0028 (SP) ;SP+28= x.offset -SW T3,0014 (SP) ;SP+14= p->1st font table -SW T2,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;writes text to screen -SW T5,001C (SP) ;SP+1C= text clip height -OR S0,V0,R0 ;S0=V0: DL -//7F00F884: display "enemy health" -JAL 7F0C1DD8 ;V0=p->text ID -ORI A0,R0,9C2A ;A0="Enemy health\n" -ADDIU T9,R0,0039 -ADDIU V1,R0,00A4 -ADDIU T8,R0,00C0 -ADDIU T0,R0,0032 ;T0=00000032 black 20% -SW V0,0C14 (SP) ;SP+C14= p->text -SW T9,0C10 (SP) ;SP+C10= xpos -SW T0,0014 (SP) ;SP+14= colour -SW T8,0010 (SP) ;SP+10= lry -SW V1,0C0C (SP) ;SP+C0C= ypos -OR A0,S0,R0 ;A0=S0: DL -ADDIU A1,R0,0037 ;A1= ulx -ADDIU A2,R0,00B5 ;A2= uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,R0,0163 ;A3= lrx -LUI AT,8003 -LWC1 F4,A9A4 (AT) ;F4=8002A9A4: "Enemy health" setting -LUI AT,4120 -MTC1 AT,F6 ;F6= [41200000] -OR S0,V0,R0 ;S0=V0: DL -JAL 7001F7E0 ;F0= sqrt(F12) -DIV.S F12,F4,F6 -LUI AT,4396 -MTC1 AT,F8 ;F8= [43960000] -LW V1,0C0C (SP) ;V1=ypos -ADDIU T1,R0,0064 ;T1=00000064 black 40% -MUL.S F10,F0,F8 -ADDIU T6,V1,001C -SW T6,0010 (SP) ;SP+10= lry -SW T1,0014 (SP) ;SP+14= colour -OR A0,S0,R0 ;A0=S0: DL -ADDIU A1,R0,0037 ;A1= ulx -ADDIU A2,V1,0011 ;A2= uly -TRUNC.W.S F16,F10 -MFC1 A3,F16 -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,0037 ;A3=lrx -LUI T2,8007 -LW T2,9798 (T2) ;T2=80069798: highlight for "Enemy health" -OR S0,V0,R0 ;S0=V0: DL -BEQ T2,R0,7F00F95C ;branch if not highlighted -NOP -LW V1,0C0C (SP) -ADDIU T4,R0,0032 -SW T4,0014 (SP) -ADDIU T3,V1,000E -SW T3,0010 (SP) -OR A0,V0,R0 -ADDIU A1,R0,0037 -ADDIU A3,R0,00C7 -JAL 7F0AD014 -ADDIU A2,V1,FFFF -OR S0,V0,R0 -JAL 7000441C -NOP -JAL 7000442C -SH V0,0044 (SP) -LUI T5,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T5,0EB8 (T5) -LH T0,0044 (SP) -ADDIU T8,R0,00FF -SW T8,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -LW A3,0C14 (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -SW T5,0010 (SP) -JAL 7F009760 -SW T0,001C (SP) -LUI AT,8003 -LWC1 F18,A9A4 (AT) -LUI AT,42C8 -MTC1 AT,F4 -LUI A1,7F01 -OR S0,V0,R0 -MUL.S F6,F18,F4 -ADDIU A1,A1,EFC1 -ADDIU A0,SP,0054 -TRUNC.W.S F8,F6 -MFC1 A2,F8 -JAL 7000AC94 -NOP -LUI T6,8004 -LW T6,0EB4 (T6) -LUI A3,8004 -SW R0,004C (SP) -SW R0,0050 (SP) -LW A3,0EB8 (A3) ;A3=p->2nd font table -ADDIU A0,SP,0050 ;A0=SP+50: @width -ADDIU A1,SP,004C ;A1=SP+4C: @height -ADDIU A2,SP,0054 ;A2=SP+54: p->text -SW R0,0014 (SP) ;SP+14=NULL -JAL 7F0AE98C ;proportions of string A2 -SW T6,0010 (SP) ;SP+10= p->1st font table -LW T1,004C (SP) -ADDIU T2,R0,011D -ADDIU V1,R0,00A4 -SUBU T3,T2,T1 -SW T3,0C10 (SP) -JAL 7000441C -SW V1,0C0C (SP) -JAL 7000442C -SH V0,0044 (SP) -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) -LW T4,0EB8 (T4) -LH T8,0044 (SP) -ADDIU T9,R0,00FF -SW T9,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -ADDIU A3,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -SW T4,0010 (SP) -JAL 7F009760 -SW T8,001C (SP) -OR S0,V0,R0 -// -JAL 7F0C1DD8 ;V0=p->text ID -ORI A0,R0,9C2B ;A0="Enemy damage\n" -ADDIU T0,R0,0039 -ADDIU V1,R0,00C5 -ADDIU T7,R0,00E1 -ADDIU T6,R0,0032 -SW V0,0C14 (SP) -SW T0,0C10 (SP) -SW T6,0014 (SP) -SW T7,0010 (SP) -SW V1,0C0C (SP) -OR A0,S0,R0 -ADDIU A1,R0,0037 -ADDIU A2,R0,00D6 -JAL 7F0AD014 -ADDIU A3,R0,0163 -LUI AT,8003 -LWC1 F10,A9A8 (AT) -LUI AT,4120 -MTC1 AT,F16 -OR S0,V0,R0 -JAL 7001F7E0 -DIV.S F12,F10,F16 -LUI AT,4396 -MTC1 AT,F18 -LW V1,0C0C (SP) -ADDIU T3,R0,0064 -MUL.S F4,F0,F18 -ADDIU T1,V1,001C -SW T1,0010 (SP) -SW T3,0014 (SP) -OR A0,S0,R0 -ADDIU A1,R0,0037 -ADDIU A2,V1,0011 -TRUNC.W.S F6,F4 -MFC1 A3,F6 -JAL 7F0AD014 -ADDIU A3,A3,0037 -LUI T4,8007 -LW T4,979C (T4) -OR S0,V0,R0 -BEQ T4,R0,7F00FB60 -NOP -LW V1,0C0C (SP) -ADDIU T9,R0,0032 -SW T9,0014 (SP) -ADDIU T5,V1,000E -SW T5,0010 (SP) -OR A0,V0,R0 -ADDIU A1,R0,0037 -ADDIU A3,R0,00C7 -JAL 7F0AD014 -ADDIU A2,V1,FFFF -OR S0,V0,R0 -JAL 7000441C -NOP -JAL 7000442C -SH V0,0044 (SP) -LUI T8,8004 -LUI T0,8004 -LW T0,0EB4 (T0) -LW T8,0EB8 (T8) -LH T6,0044 (SP) -ADDIU T7,R0,00FF -SW T7,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -LW A3,0C14 (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0014 (SP) -SW T8,0010 (SP) -JAL 7F009760 -SW T6,001C (SP) -LUI AT,8003 -LWC1 F8,A9A8 (AT) -LUI AT,42C8 -MTC1 AT,F10 -LUI A1,7F01 -OR S0,V0,R0 -MUL.S F16,F8,F10 -ADDIU A1,A1,EFC1 -ADDIU A0,SP,0054 -TRUNC.W.S F18,F16 -MFC1 A2,F18 -JAL 7000AC94 -NOP -LUI T1,8004 -LW T1,0EB4 (T1) -LUI A3,8004 -SW R0,004C (SP) -SW R0,0050 (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,0050 -ADDIU A1,SP,004C -ADDIU A2,SP,0054 -SW R0,0014 (SP) -JAL 7F0AE98C -SW T1,0010 (SP) -LW T3,004C (SP) -ADDIU T4,R0,011D -ADDIU V1,R0,00C5 -SUBU T5,T4,T3 -SW T5,0C10 (SP) -JAL 7000441C -SW V1,0C0C (SP) -JAL 7000442C -SH V0,0044 (SP) -LUI T9,8004 -LUI T8,8004 -LW T8,0EB4 (T8) -LW T9,0EB8 (T9) -LH T7,0044 (SP) -ADDIU T0,R0,00FF -SW T0,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -ADDIU A3,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -SW T9,0010 (SP) -JAL 7F009760 -SW T7,001C (SP) -OR S0,V0,R0 -// -JAL 7F0C1DD8 ;V0=p->text ID -ORI A0,R0,9C2C ;A0="Enemy accuracy\n" -ADDIU T6,R0,0039 -ADDIU V1,R0,00E6 -ADDIU T2,R0,0102 -ADDIU T1,R0,0032 -SW V0,0C14 (SP) -SW T6,0C10 (SP) -SW T1,0014 (SP) -SW T2,0010 (SP) -SW V1,0C0C (SP) -OR A0,S0,R0 -ADDIU A1,R0,0037 -ADDIU A2,R0,00F7 -JAL 7F0AD014 -ADDIU A3,R0,0163 -LUI AT,8003 -LWC1 F4,A9AC (AT) -LUI AT,4120 -MTC1 AT,F6 -OR S0,V0,R0 -JAL 7001F7E0 -DIV.S F12,F4,F6 -LUI AT,4396 -MTC1 AT,F8 -LW V1,0C0C (SP) -ADDIU T5,R0,0064 -MUL.S F10,F0,F8 -ADDIU T3,V1,001C -SW T3,0010 (SP) -SW T5,0014 (SP) -OR A0,S0,R0 -ADDIU A1,R0,0037 -ADDIU A2,V1,0011 -TRUNC.W.S F16,F10 -MFC1 A3,F16 -JAL 7F0AD014 -ADDIU A3,A3,0037 -LUI T9,8007 -LW T9,97A0 (T9) -OR S0,V0,R0 -BEQ T9,R0,7F00FD64 -NOP -LW V1,0C0C (SP) -ADDIU T0,R0,0032 -SW T0,0014 (SP) -ADDIU T8,V1,000E -SW T8,0010 (SP) -OR A0,V0,R0 -ADDIU A1,R0,0037 -ADDIU A3,R0,00C7 -JAL 7F0AD014 -ADDIU A2,V1,FFFF -OR S0,V0,R0 -JAL 7000441C -NOP -JAL 7000442C -SH V0,0044 (SP) -LUI T7,8004 -LUI T6,8004 -LW T6,0EB4 (T6) -LW T7,0EB8 (T7) -LH T1,0044 (SP) -ADDIU T2,R0,00FF -SW T2,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -LW A3,0C14 (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -SW T7,0010 (SP) -JAL 7F009760 -SW T1,001C (SP) -LUI AT,8003 -LWC1 F18,A9AC (AT) -LUI AT,4120 -MTC1 AT,F4 -LUI A1,7F01 -OR S0,V0,R0 -MUL.S F6,F18,F4 -ADDIU A1,A1,EFC1 -ADDIU A0,SP,0054 -TRUNC.W.S F8,F6 -MFC1 A2,F8 -JAL 7000AC94 -NOP -LUI T3,8004 -LW T3,0EB4 (T3) -LUI A3,8004 -SW R0,004C (SP) -SW R0,0050 (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,0050 -ADDIU A1,SP,004C -ADDIU A2,SP,0054 -SW R0,0014 (SP) -JAL 7F0AE98C -SW T3,0010 (SP) -LW T5,004C (SP) -ADDIU T9,R0,011D -ADDIU V1,R0,00E6 -SUBU T8,T9,T5 -SW T8,0C10 (SP) -JAL 7000441C -SW V1,0C0C (SP) -JAL 7000442C -SH V0,0044 (SP) -LUI T0,8004 -LUI T7,8004 -LW T7,0EB4 (T7) -LW T0,0EB8 (T0) -LH T2,0044 (SP) -ADDIU T6,R0,00FF -SW T6,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -ADDIU A3,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0014 (SP) -SW T0,0010 (SP) -JAL 7F009760 -SW T2,001C (SP) -OR S0,V0,R0 -// -JAL 7F0C1DD8 ;V0=p->text ID -ORI A0,R0,9C29 ;A0="Enemy reaction speed\n" -ADDIU T1,R0,0039 -ADDIU V1,R0,0107 -ADDIU T4,R0,0123 -ADDIU T3,R0,0032 -SW V0,0C14 (SP) -SW T1,0C10 (SP) -SW T3,0014 (SP) -SW T4,0010 (SP) -SW V1,0C0C (SP) -OR A0,S0,R0 -ADDIU A1,R0,0037 -ADDIU A2,R0,0118 -JAL 7F0AD014 ;draw coloured box -ADDIU A3,R0,0163 -LUI AT,8003 -LWC1 F10,A9A0 (AT) ;F10=8002A9A0: "Enemy reaction speed" setting -LUI AT,4396 -MTC1 AT,F16 ;F16=43960000 -LUI AT,3F80 -MTC1 AT,F4 ;F4=3F800000 1.0 -MUL.S F18,F10,F16 -LW V1,0C0C (SP) -ADDIU T8,R0,0064 -SW T8,0014 (SP) -ADDIU T5,V1,001C -SW T5,0010 (SP) -OR A0,V0,R0 -MUL.S F6,F18,F4 -ADDIU A1,R0,0037 -ADDIU A2,V1,0011 -TRUNC.W.S F8,F6 -MFC1 A3,F8 -JAL 7F0AD014 ;draw coloured box -ADDIU A3,A3,0037 -LUI T0,8007 -LW T0,9794 (T0) ;T0=80069794: highlight "Enemy reaction speed" -OR S0,V0,R0 -BEQ T0,R0,7F00FF60 -NOP -LW V1,0C0C (SP) -ADDIU T6,R0,0032 -SW T6,0014 (SP) -ADDIU T7,V1,000E -SW T7,0010 (SP) -OR A0,V0,R0 -ADDIU A1,R0,0037 -ADDIU A3,R0,00C7 -JAL 7F0AD014 ;draw coloured box -ADDIU A2,V1,FFFF -OR S0,V0,R0 -//7F00FF60: -JAL 7000441C ;V0= text clip width -NOP -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) -LUI T2,8004 -LUI T1,8004 -LW T1,0EB4 (T1) -LW T2,0EB8 (T2) -LH T3,0044 (SP) -ADDIU T4,R0,00FF -SW T4,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -LW A3,0C14 (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T1,0014 (SP) -SW T2,0010 (SP) -JAL 7F009760 ;writes text to screen -SW T3,001C (SP) -// -LUI AT,8003 -LWC1 F10,A9A0 (AT) ;F10=8002A9A0: "Enemy reaction speed" setting -LUI AT,42C8 -MTC1 AT,F16 -LUI A1,7F01 -OR S0,V0,R0 -MUL.S F18,F10,F16 -ADDIU A1,A1,EFC1 ;A1=7F00EFC1 -ADDIU A0,SP,0054 -TRUNC.W.S F4,F18 -MFC1 A2,F4 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -NOP -LUI T5,8004 -LW T5,0EB4 (T5) -LUI A3,8004 -SW R0,004C (SP) -SW R0,0050 (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,0050 -ADDIU A1,SP,004C -ADDIU A2,SP,0054 -SW R0,0014 (SP) -JAL 7F0AE98C ;V0=width of string -SW T5,0010 (SP) -LW T8,004C (SP) -ADDIU T0,R0,011D -ADDIU V1,R0,0107 -SUBU T7,T0,T8 -SW T7,0C10 (SP) -JAL 7000441C ;V0= text clip width -SW V1,0C0C (SP) -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) -LUI T6,8004 -LUI T2,8004 -LW T2,0EB4 (T2) -LW T6,0EB8 (T6) -LH T4,0044 (SP) -ADDIU T1,R0,00FF -SW T1,0018 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0C10 -ADDIU A2,SP,0C0C -ADDIU A3,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -SW T6,0010 (SP) -JAL 7F009760 ;writes text to screen -SW T4,001C (SP) -// -JAL 7F00A080 ;add tab 1: "START" -OR A0,V0,R0 -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,V0,R0 -JAL 7F00A414 ;add tab 2: "NEXT" -OR A0,V0,R0 -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 -// -LW RA,003C (SP) -LW S0,0038 (SP) -ADDIU SP,SP,0C18 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F0155F4 - menu 0A initializer - mission briefings.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F0155F4 - menu 0A initializer - mission briefings.txt deleted file mode 100644 index e222d87..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F0155F4 - menu 0A initializer - mission briefings.txt +++ /dev/null @@ -1,89 +0,0 @@ -7F0155F4 4A124 initialize menu 0A - mission briefings -LUI AT,8003 -SW R0,A8D4 (AT) ;0->8002A8D4: reset selected flag for folder tab 2 -ADDIU SP,SP,FFE8 -SW R0,A8D8 (AT) ;0->8002A8D8: reset selected flag for folder tab 3 -SW RA,0014 (SP) -ADDIU T6,R0,0005 -SW T6,A910 (AT) ;5->8002A910: last menu briefing page -JAL 7F015510 ;set briefing page for menu 0A -OR A0,R0,R0 ;A0=0 -JAL 7F00B8AC ;loads walletbond, used to construct main menus -NOP -JAL 7F015520 ;load briefing and text; V0=# entries in briefing file -NOP -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 - -7F015510 4A040 set briefing page for menu 0A - accepts: A0=page to display - 0 Objectives - 1 Background - 2 M Briefing - 3 Q Branch - 4 Moneypenny -LUI V0,8003 -ADDIU V0,V0,A914 -JR RA -SW A0,0000 (V0) ;A0->8002A914: menu briefing page - -7F015520 4A050 V0=# entries in briefing file; loads briefing and text for selected stage -LUI T6,8003 -LW T6,A8F8 (T6) ;T6=8002A8F8: selected mission briefing page -ADDIU SP,SP,FFD8 -SW S0,0018 (SP) -LUI S0,8003 -LW S0,A950 (S0) ;S0=8002A950: p->DL target -SLL T7,T6,0x3 -SUBU T7,T7,T6 -ORI AT,R0,A000 -SLL T7,T7,0x2 ;T7=selected page * 0x1C -LUI A0,8003 -SW RA,001C (SP) -ADDU A0,A0,T7 -ADDU S0,S0,AT ;S0+=0xA000 -OR A2,S0,R0 ;A2=p->DL buffer -LW A0,ABFC (A0) ;A0=8002ABFC+offset: p->UbriefnameZ -ADDIU A1,R0,0001 ;A1=1 -JAL 7F0BCD40 ;load resource using string A0 into buffer A2 of size A3 -ADDIU A3,R0,0200 ;A3=0x200 -//7F01556C 4A06C -LUI T9,8003 -LW T9,A8F8 (T9) ;T9=8002A8F8: selected mission briefing page -LUI T8,0006 -LUI A0,8003 -SLL T0,T9,0x3 -SUBU T0,T0,T9 -SLL T0,T0,0x2 ;T0=selected page * 0x1C -LUI AT,8007 -ORI T8,T8,DE00 ;T8=0x6DE00 -ADDU A0,A0,T0 -SW V0,978C (AT) ;V0->8006978C: position in buffer -ADDIU S0,S0,0200 ;S0+=0x200 -SW T8,0020 (SP) ;SP+20= 0x6DE00 -JAL 7F0C15E0 ;returns the text bank number for a specific stage# -LW A0,ABEC (A0) ;A0=8002ABEC+offset: stage# -//7F0155A8 4A0D8 load text bank! -OR A0,V0,R0 ;A0=V0: text bank # -OR A1,S0,R0 ;A1=S0: p->buffer -JAL 7F0C1D38 ;load resource to memory -LW A2,0020 (SP) ;A2=SP+20: 0x6DE00 size of buffer -//7F0155B8 4A0E8 set up objective counter -LUI V1,8007 -LW V1,978C (V1) ;V1=8006978C: p->briefing data -OR V0,R0,R0 ;V0=0 -ADDIU A0,R0,0028 ;A0=0x28 10 objectives max! -//7F0155C8 4A0F8 determine # objectives -LHU T1,0008 (V1) ;T1=objective -ADDIU V0,V0,0004 ;V0+=4 -BEQL T1,R0,7F0155E4 ;return if end of list -LW RA,001C (SP) -BNE V0,A0,7F0155C8 ;loop 10 times tops -ADDIU V1,V1,0004 -//7F0155E0 4A110 return # objectives! -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F01569C - menu 0A interface - mission briefings.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F01569C - menu 0A interface - mission briefings.txt deleted file mode 100644 index 5b85342..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F01569C - menu 0A interface - mission briefings.txt +++ /dev/null @@ -1,220 +0,0 @@ -7F01569C 4A1CC Menu 0A Interface: Mission Briefings -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 ;set page width -LWC1 F12,1AB8 (AT) -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 ;set page height -LWC1 F14,1ABC (AT) -JAL 70004534 -OR A0,R0,R0 -LUI AT,8003 -SW R0,A8E4 (AT) -LUI AT,8003 -SW R0,A8E0 (AT) -LUI AT,8003 -JAL 7F00A39C -SW R0,A8DC (AT) -BEQ V0,R0,7F01570C -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F01579C -SW V1,A8E4 (AT) -JAL 7F00A578 -NOP -BEQ V0,R0,7F015744 -LUI T6,8003 -LUI T7,8003 -LW T7,A910 (T7) -LW T6,A914 (T6) -ADDIU V1,R0,0001 -ADDIU T8,T7,FFFF -SLT AT,T6,T8 -BEQ AT,R0,7F015744 -LUI AT,8003 -BEQ R0,R0,7F01579C -SW V1,A8E0 (AT) -JAL 7F00A1E4 -NOP -BEQ V0,R0,7F015764 -LUI T9,8003 -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F01579C -SW V1,A8DC (AT) -LUI T0,8003 -LW T0,A910 (T0) -LW T9,A914 (T9) -ADDIU V1,R0,0001 -ADDIU T1,T0,FFFF -SLT AT,T9,T1 -BEQ AT,R0,7F015794 -NOP -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F01579C -SW V1,A8E0 (AT) -LUI AT,8003 -SW V1,A8DC (AT) -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,1000 -BEQ V0,R0,7F0157D4 -ADDIU V1,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW V1,A8D4 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -BEQ R0,R0,7F0158D0 -NOP -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,A000 -BEQ V0,R0,7F015880 -ADDIU V1,R0,0001 -LUI T2,8003 -LW T2,A8E0 (T2) -LUI A0,8003 -LUI T3,8003 -BEQ T2,R0,7F015814 -NOP -LW A0,A914 (A0) -JAL 7F015510 -ADDIU A0,A0,0001 -BEQ R0,R0,7F015864 -NOP -LW T3,A8E4 (T3) -LUI V0,8003 -LUI T4,8003 -BEQ T3,R0,7F015850 -NOP -LW V0,A914 (V0) -LUI AT,8003 -BLEZ V0,7F015848 -NOP -JAL 7F015510 -ADDIU A0,V0,FFFF -BEQ R0,R0,7F015864 -NOP -BEQ R0,R0,7F015864 -SW V1,A8D8 (AT) -LW T4,A8DC (T4) -LUI AT,8003 -BEQ T4,R0,7F015864 -NOP -SW V1,A8D4 (AT) -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -BEQ R0,R0,7F0158D0 -NOP -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 -BEQ V0,R0,7F0158D0 -ADDIU V1,R0,0001 -LUI V0,8003 -LW V0,A914 (V0) -LUI AT,8003 -BLEZ V0,7F0158B8 -NOP -JAL 7F015510 -ADDIU A0,V0,FFFF -BEQ R0,R0,7F0158BC -NOP -SW V1,A8D8 (AT) -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -LUI A0,8003 -JAL 7F00B724 -LW A0,A95C (A0) -LUI A2,8003 -LW A2,A914 (A2) -LUI A0,8003 -LW A0,A95C (A0) -SLTIU T5,A2,0001 -OR A2,T5,R0 -JAL 7F00B7C0 -ADDIU A1,R0,000C -LUI T7,8003 -LW T7,A8F8 (T7) -LUI A2,8003 -LW A2,A914 (A2) -SLL T6,T7,0x3 -SUBU T6,T6,T7 -SLL T6,T6,0x2 -LUI A1,8003 -ADDU A1,A1,T6 -LW A1,ABF8 (A1) -LUI A0,8003 -SLTIU T8,A2,0001 -OR A2,T8,R0 -LW A0,A95C (A0) -JAL 7F00B7C0 -ADDIU A1,A1,0016 -LUI A0,8003 -LW A0,A95C (A0) -OR A1,R0,R0 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -LUI A0,8003 -LW A0,A95C (A0) -ADDIU A1,R0,0001 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -LUI A0,8003 -LW A0,A95C (A0) -ADDIU A1,R0,0003 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -LUI A0,8003 -LW A0,A95C (A0) -ADDIU A1,R0,0006 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -JAL 7F009B84 -NOP -LUI T0,8003 -LW T0,A8D4 (T0) -ADDIU A0,R0,000B -LUI T9,8003 -BEQ T0,R0,7F0159BC -NOP -JAL 7F01A5D4 -ADDIU A1,R0,0001 -BEQ R0,R0,7F0159FC -LW RA,0014 (SP) -LW T9,A8D8 (T9) -ADDIU A0,R0,0007 -BEQL T9,R0,7F0159FC -LW RA,0014 (SP) -JAL 7F01A5D4 -OR A1,R0,R0 -LUI T1,8003 -LW T1,A8F8 (T1) -LUI A0,8003 -SLL T2,T1,0x3 -SUBU T2,T2,T1 -SLL T2,T2,0x2 -ADDU A0,A0,T2 -JAL 7F00E3E0 -LW A0,ABF8 (A0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F015A08 - print objective list.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F015A08 - print objective list.txt deleted file mode 100644 index 8683460..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F015A08 - print objective list.txt +++ /dev/null @@ -1,282 +0,0 @@ -7F015A08 4A538 print objective list to main menus - accepts: A0=p->DL, A1=y offset, A2=p->text buffer, A3=TRUE if printing objective status -ADDIU SP,SP,FF60 -SW S5,004C (SP) -SW S4,0048 (SP) -SW S8,0058 (SP) -SW S6,0050 (SP) -SW S3,0044 (SP) -LUI S4,8004 -LUI S5,8004 -OR S3,A2,R0 ;S3=A2: p->text buffer -OR S6,A0,R0 ;S6=A0: p->DL -SW RA,005C (SP) -SW S7,0054 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -SW A1,00A4 (SP) ;SP+A4=A1: y offset -SW A3,00AC (SP) ;SP+AC=A3: status flag -SW R0,0098 (SP) ;SP+98=0: letter offset (entry#) -OR S8,R0,R0 ;S8=0 #lines -ADDIU S5,S5,0EB4 ;S5=80040EB4: p->1st font table -ADDIU S4,S4,0EB8 ;S4=80040EB8: p->2nd font table -OR T0,R0,R0 ;T0=0 entry# -OR T1,R0,R0 ;T1=0 offset to entry -//7F015A64: determine if valid objective -LUI T6,8007 -LW T6,978C (T6) ;T6=8006978C: p->briefing data -LUI T7,8003 -ADDU V0,T6,T1 ;V0=data+offset to next entry -LHU V1,0008 (V0) ;V1=objective text ID -BEQL V1,R0,7F015D34 ;loop if dead entry -ADDIU T0,T0,0001 -LW T7,A8FC (T7) ;T7=8002A8FC: difficulty -LHU T8,000A (V0) ;T8=objective min.difficulty -OR A0,V1,R0 ;A0=V1: objective text ID -OR S7,R0,R0 ;S7=0 -SLT AT,T7,T8 ;TRUE if difficulty < min.difficulty -BNEL AT,R0,7F015D34 ;loop if entry isn't pertinent -ADDIU T0,T0,0001 -//7F015A9C: figure out leading letter and print -SW T1,006C (SP) ;SP+6C=T1: offset to entry -JAL 7F0C1DD8 ;V0=p->text A0 -SW T0,009C (SP) ;SP+9C=T0: entry# -LUI A1,7F01 -OR S1,V0,R0 ;S1=V0: p->text -ADDIU A1,A1,EFBD ;A1=7F00EFBD: "a.\n" org.80050C50 -JAL 7000A770 ;V0= strcpy(A0,A1) -OR A0,S3,R0 ;A0=S3: p->buffer -LBU T9,0000 (S3) ;T9="a" -LW T2,0098 (SP) ;T2= letter offset -ADDIU A0,SP,0094 ;A0=SP+94: @height -ADDIU A1,SP,0090 ;A1=SP+90: @width -ADDU T3,T9,T2 ;T3="a"+offset: a-z -SB T3,0000 (S3) ;letter->buffer -LW T4,0000 (S5) ;T4=p->1st font table -SW R0,0094 (SP) ;SP+94=0: @height -SW R0,0090 (SP) ;SP+90=0: @width -SW R0,0014 (SP) ;SP+14=NULL -LW A3,0000 (S4) ;A3=p->2nd font table -OR A2,S3,R0 ;A2=S3: p->text -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) ;SP+10= p->1st font table -LW T6,0094 (SP) ;T6=height -LW T8,00A4 (SP) ;T8=SP+A4: y offset -ADDIU T5,R0,0037 ;T5=37 -MULTU T6,S8 -SW T5,008C (SP) ;SP+8C=37: xpos -MFLO T7 ;T7=height * #lines: line offset -ADDU T9,T7,T8 ;T9=y offset + line offset -ADDU T2,T9,S7 ;T2=y offset + line offset + offset: ypos -JAL 7000441C ;V0= text clip width -SW T2,0088 (SP) ;SP+88=T2: ypos -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T3,R0 ;S0= text clip width -LW T4,0000 (S4) ;T4=p->2nd font table -LW T5,0000 (S5) ;T5=p->1st font table -ADDIU T6,R0,00FF ;T6=000000FF black -SW T6,0018 (SP) ;SP+18= colour -OR A0,S6,R0 ;A0=S6: p->DL -ADDIU A1,SP,008C ;A1=SP+8C: xpos -ADDIU A2,SP,0088 ;A2=SP+88: ypos -OR A3,S3,R0 ;A3=S3: p->text -SW S0,001C (SP) ;SP+1C= text clip width -SW V0,0020 (SP) ;SP+20= text clip height -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T4,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T5,0014 (SP) ;SP+14= p->1st font table -//7F015B68: fit line to width accounting for status when present -LW T8,0094 (SP) ;T8=SP+94: @height -LW T2,00A4 (SP) ;T2=SP+A4: y offset -LW T5,00AC (SP) ;T5=SP+AC: status -MULTU T8,S8 -ADDIU T7,R0,004B ;T7=4B xpos -OR S6,V0,R0 ;S6=V0: p->DL -SW T7,008C (SP) ;SP+8C= xpos -ADDIU A0,R0,0140 ;A0=140: default width -OR A1,S1,R0 ;A1=S1: p->text -OR A2,S3,R0 ;A2=S3: p->buffer -MFLO T9 ;T9=height*#lines: line offset -ADDU T3,T9,T2 ;T3=line offset + y offset -ADDU T4,T3,S7 ;T4=line offset + y offset + offset: ypos -BEQ T5,R0,7F015BD8 ;branch if not displaying status -SW T4,0088 (SP) ;SP+88= ypos -//7F015BA4: handle status display wordwrap -JAL 7F0ACB94 ;A0-> #spaces following wordwrap [80040E8C] -ADDIU A0,R0,0002 ;A0=2 -LW T6,0000 (S5) ;T6=p->1st font table -ADDIU A0,R0,00DC ;A0=DC: width -OR A1,S1,R0 ;A1=S1: p->text -OR A2,S3,R0 ;A2=S3: p->buffer -LW A3,0000 (S4) ;A3=p->2nd font table -JAL 7F0AEB64 ;A2=text A1 fit to width A0 -SW T6,0010 (SP) ;SP+10= p->1st font table -JAL 7F0ACB94 ;A0-> #spaces following wordwrap [80040E8C] -OR A0,R0,R0 ;A0=0 -BEQ R0,R0,7F015BE8 -NOP -//7F015BD8: no status display -LW T7,0000 (S5) ;T7=p->1st font table -LW A3,0000 (S4) ;A3=p->2nd font table -JAL 7F0AEB64 ;A2=text A1 fit to width A0 -SW T7,0010 (SP) ;SP+10= p->1st font table -//7F015BE8: display objective text -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 ;S0= text clip width -LW T9,0000 (S4) ;T9=p->2nd font table -LW T2,0000 (S5) ;T2=p->1st font table -ADDIU T3,R0,00FF ;T3=000000FF black -SW T3,0018 (SP) ;SP+18= colour -OR A0,S6,R0 ;A0=S6: p->DL -ADDIU A1,SP,008C ;A1= p->xpos -ADDIU A2,SP,0088 ;A2= p->ypos -OR A3,S3,R0 ;A3=S3: p->text -SW S0,001C (SP) ;SP+1C= text clip width -SW V0,0020 (SP) ;SP+20= text clip height -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T9,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T2,0014 (SP) ;SP+14= p->1st font table -//7F015C3C: skip if status not displayed -LW T4,00AC (SP) ;T4=SP+AC: status -OR S6,V0,R0 ;S6=V0: p->DL -BEQ T4,R0,7F015D10 ;branch if status isn't displayed -NOP -//7F015C4C: -JAL 7F057238 ;V0=TRUE if objective A0 complete -LW A0,009C (SP) ;A0=SP+9C: entry# -BEQ V0,R0,7F015C88 ;branch if failed (0) -ADDIU AT,R0,0001 -BEQ V0,AT,7F015C78 ;branch if complete (1) -ORI A0,R0,9C5B ;A0=9C5B: "Completed\n" -ADDIU AT,R0,0002 -BEQL V0,AT,7F015C8C ;branch if incomplete (2) -LUI S2,7800 -BEQ R0,R0,7F015C8C ;else, assume incomplete -LUI S2,7800 -//7F015C78: complete -JAL 7F0C1DD8 ;V0=p->text A0 -ADDIU S2,R0,00FF ;S2=000000FF black -BEQ R0,R0,7F015C9C -OR S1,V0,R0 -//7F015C88: incomplete or failed -LUI S2,7800 -ORI S2,S2,00FF ;S2=780000FF red -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C5C ;A0=9C5C: "FAILED\n" -//7F015C98: display status -OR S1,V0,R0 ;S1=V0: p->text -LW T6,0094 (SP) ;T6= @height -LW T8,00A4 (SP) ;T8= y offset -ADDIU T5,R0,0136 ;T5=136 xpos -MULTU T6,S8 -SW T5,008C (SP) ;SP+8C= xpos -MFLO T7 ;T7=height * #lines: line offset -ADDU T9,T7,T8 -ADDU T2,T9,S7 ;T2=line offset + y offset + offset: ypos -JAL 7000441C ;V0= text clip width -SW T2,0088 (SP) ;SP+88= ypos -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T3,R0 ;S0= text clip width -LW T4,0000 (S4) ;T4=p->2nd font table -LW T5,0000 (S5) ;T5=p->1st font table -OR A0,S6,R0 ;A0=S6: p->DL -ADDIU A1,SP,008C ;A1=p->xpos -ADDIU A2,SP,0088 ;A2=p->ypos -OR A3,S1,R0 ;A3=S1: p->text -SW S2,0018 (SP) ;SP+18= colour -SW S0,001C (SP) ;SP+1C= text clip width -SW V0,0020 (SP) ;SP+20= text clip height -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T4,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T5,0014 (SP) ;SP+14= p->1st font table -OR S6,V0,R0 ;S6=V0: p->DL -//7F015D10: -JAL 7F0AC0E8 ;V0= #newlines in string A0 -OR A0,S3,R0 ;A0=S3: p->text -LW T6,0098 (SP) ;T6=letter offset -ADDU S8,S8,V0 ;S8+=V0: #lines+=#newlines -LW T1,006C (SP) ;T1= offset offset*4 -ADDIU T7,T6,0001 ;T7=letter+1 -SW T7,0098 (SP) ;update letter offset -LW T0,009C (SP) ;T0= entry# -//7F015D30: loop for each objective -ADDIU T0,T0,0001 ;T0++ entry# -ADDIU AT,R0,000A ;AT= A -BNE T0,AT,7F015A64 ;loop until 10 entries read -ADDIU T1,T1,0004 ;T1+=4: offset -//7F015D40: return -LW RA,005C (SP) -OR V0,S6,R0 ;V0=S6: p->DL -LW S6,0050 (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S3,0044 (SP) -LW S4,0048 (SP) -LW S5,004C (SP) -LW S7,0054 (SP) -LW S8,0058 (SP) -JR RA -ADDIU SP,SP,00A0 - -+_+ - -7F0AC0E8 E0C18 V0=#newlines in string A0 - accepts: A0=p->text - fries: V1,A0,A1 -LBU V0,0000 (A0) ;V0=char -OR V1,R0,R0 ;V1=0 count=0 -ADDIU A1,R0,000A ;A1="\n" -BEQ V0,R0,7F0AC118 ;quit if NULL detected -NOP -//7F0AC0FC: count newlines -BNEL A1,V0,7F0AC10C ;branch if not a newline -LBU V0,0001 (A0) -ADDIU V1,V1,0001 ;V1++ -//7F0AC108: loop through string -LBU V0,0001 (A0) ;V0=next char -ADDIU A0,A0,0001 ;A0++ p->next char in string -BNEZ V0,7F0AC0FC ;loop until NULL character -NOP -//7F0AC118: return -JR RA -OR V0,V1,R0 ;V0=V1: #newlines - -7F0AC120 E0C50 V0= p->string following final newline - accepts: A0=p->text - fries: V1,A0,A1,T6 -LBU V0,0000 (A0) ;V0=char -OR V1,A0,R0 ;V1=A0: p->string -ADDIU A1,R0,000A ;A1="\n" -BEQ V0,R0,7F0AC160 ;quit if NULL detected -NOP -//7F0AC134: -BNEL A1,V0,7F0AC154 ;branch if not newline -LBU V0,0001 (A0) -LBU T6,0001 (A0) ;T6=next char -ADDIU A0,A0,0001 ;A0++ p->next char in string -BEQL T6,R0,7F0AC154 ;branch if NULL -LBU V0,0001 (A0) -OR V1,A0,R0 ;V1=A0 p->string following newline -//7F0AC150: loop through string -LBU V0,0001 (A0) ;V0=next char -ADDIU A0,A0,0001 ;A0++ p->next char in string -BNEZ V0,7F0AC134 ;loop until NULL -NOP -JR RA -OR V0,V1,R0 ;V0=V1: p->string diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F015D74 - menu 0A constructor - mission briefings.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F015D74 - menu 0A constructor - mission briefings.txt deleted file mode 100644 index fb35044..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F015D74 - menu 0A constructor - mission briefings.txt +++ /dev/null @@ -1,206 +0,0 @@ -7F015D74 4A8A4 Menu 0A Constructor - Mission Briefings -ADDIU SP,SP,F3F0 -SW RA,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 -JAL 7F00D5E8 -OR A0,V0,R0 -NOP -NOP -//7F015DA8: set up text buffer -ADDIU T0,R0,0BB8 -ADDIU T6,SP,004C ;T6=SP+4C: text buffer -OR T7,R0,R0 -ADDIU T7,T7,000C -ADDIU T6,T6,000C -SW R0,FFF4 (T6) -SW R0,FFF8 (T6) -BNE T7,T0,7F015DB4 ;loop to initialize buffer -SW R0,FFFC (T6) -//7F015DCC: -LUI T7,0A00 -SW T7,004C (SP) ;"\n"->text buffer -JAL 7F0ACD98 -OR A0,V0,R0 -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F00EABC -ADDIU A1,SP,004C ;A1=p->text buffer -LUI T1,8003 -LW T1,A914 (T1) ;T1=8002A914: current briefing page -OR S0,V0,R0 ;S0=V0: p->DL -SLTIU AT,T1,0005 -BEQ AT,R0,7F015E60 ;skip if not a valid page -//7F015DFC: -ORI A0,R0,9C5D ;A0=txt ID 9C5D: "PRIMARY OBJECTIVES:\n" -JAL 7F0C1DD8 ;V0=p->text A0 -ADDU A0,A0,T1 ;A0+=page#: title for page -BEQ R0,R0,7F015E60 ;skip deleted lines of code -SW V0,0C0C (SP) ;SP+C0C= p->text -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F015E60: write page title -ADDIU T2,R0,0037 ;T2=xpos: 37 -ADDIU T3,R0,008F ;T3=ypos: 8F -SW T2,0C08 (SP) ;SP+C08= xpos -JAL 7000441C ;V0= text clip width -SW T3,0C04 (SP) ;SP+C04= ypos -JAL 7000442C ;V0= text clip height -SH V0,0048 (SP) ;SP+48= text clip height -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) ;T5=80040EB4: p->1st font table -LW T4,0EB8 (T4) ;T4=80040EB8: p->2nd font table -LH T8,0048 (SP) -ADDIU T9,R0,00FF ;T9=000000FF: black -SW T9,0018 (SP) ;SP+18= colour -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU A1,SP,0C08 ;A1=p->xpos -ADDIU A2,SP,0C04 ;A2=p->ypos -LW A3,0C0C (SP) ;A3=p->text -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T5,0014 (SP) ;SP+14= p->1st font table -SW T4,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T8,001C (SP) ;SP+1C= text clip height -//7F015EC4: -LUI V1,8003 -LW V1,A914 (V1) ;V1=8002A914: current briefing page -OR S0,V0,R0 ;S0=V0: p->DL -ADDIU AT,R0,0001 -BNEZ V1,7F015EF4 ;branch if not page 0 -OR A0,V0,R0 ;A0=V0: p->DL -//7F015EDC: page 0 -ADDIU A1,R0,00A7 -ADDIU A2,SP,004C -JAL 7F015A08 -OR A3,R0,R0 -BEQ R0,R0,7F016014 -OR S0,V0,R0 ;S0=V0: p->DL -//7F015EF4: -BEQ V1,AT,7F015F28 ;branch if page 1 -LUI T0,8007 -ADDIU AT,R0,0002 -BEQ V1,AT,7F015F3C ;branch if page 2 -LUI T7,8007 -ADDIU AT,R0,0003 -BEQ V1,AT,7F015F50 ;branch if page 3 -LUI T6,8007 -ADDIU AT,R0,0004 -BEQ V1,AT,7F015F64 ;branch if page 4 -LUI T1,8007 -BEQ R0,R0,7F015F74 -NOP -//7F015F28: page 1: Background -LW T0,978C (T0) ;T0=8006978C: p->briefing data -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,0000 (T0) ;A0=text ID for "Background" -BEQ R0,R0,7F015F74 -SW V0,0C0C (SP) ;SP+C0C= p->text -//7F015F3C: page 2: M Briefing -LW T7,978C (T7) ;T7=8006978C: p->briefing data -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,0002 (T7) ;A0=text ID for "M Briefing" -BEQ R0,R0,7F015F74 -SW V0,0C0C (SP) ;SP+C0C= p->text -//7F015F50: page 3: Q Branch -LW T6,978C (T6) ;T6=8006978C: p->briefing data -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,0004 (T6) ;A0=text ID for "Q Branch" -BEQ R0,R0,7F015F74 -SW V0,0C0C (SP) ;SP+C0C= p->text -//7F015F64: page 4: Moneypenny -LW T1,978C (T1) ;T1=8006978C: p->briefing data -JAL 7F0C1DD8 ;V0=p->text A0 -LHU A0,0006 (T1) ;A0=text ID for "Moneypenny" -SW V0,0C0C (SP) ;SP+C0C= p->text -//7F015F74: -LUI T4,8004 -LW T4,0EB4 (T4) ;T4=80040EB4: p->1st font table -ADDIU T2,R0,0037 -ADDIU T3,R0,00A7 -LUI A3,8004 -SW T2,0C08 (SP) ;SP+C08= width -SW T3,0C04 (SP) ;SP+C04= height -LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -ADDIU A0,R0,0140 ;A0= 140 max width -LW A1,0C0C (SP) ;A1=p->text -ADDIU A2,SP,004C ;A2=p->text buffer -JAL 7F0AEB64 ;A2=text A1 fit to width A0 -SW T4,0010 (SP) ;SP+10= p->1st font table -//7F015FA8: -JAL 7F0ACBA0 ;A0->80040E90 -ADDIU A0,R0,0008 ;A0=8 -//7F015FB0: -JAL 7000441C ;V0= text clip width -NOP -JAL 7000442C ;V0= text clip height -SH V0,0048 (SP) ;SP+48= text clip height -LUI T5,8004 -LUI T9,8004 -LW T9,0EB4 (T9) ;T9=80040EB4: p->1st font table -LW T5,0EB8 (T5) ;T5=80040EB8: p->2nd font table -LH T0,0048 (SP) -ADDIU T8,R0,00FF ;T8=000000FF: black -SW T8,0018 (SP) ;SP+18= colour -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU A1,SP,0C08 ;A1=p->width -ADDIU A2,SP,0C04 ;A2=p->height -ADDIU A3,SP,004C ;A3=p->text -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T9,0014 (SP) ;SP+14= p->1st font table -SW T5,0010 (SP) ;SP+10= p->2nd font table -JAL 7F009760 ;write text -SW T0,001C (SP) ;SP+1C= text clip height -OR S0,V0,R0 ;S0=V0: p->DL -//7F01600C: -JAL 7F0ACBA0 ;A0->80040E90 -ADDIU A0,R0,FFFF ;A0=-1 -JAL 7F00A080 ;add tab 1: "START" -OR A0,S0,R0 ;A0=S0: p->DL -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,V0,R0 ;A0=V0: p->DL -LUI T7,8003 -LW T7,A914 (T7) ;T7=8002A914: current briefing page -OR S0,V0,R0 ;S0=V0: p->DL -SLTI AT,T7,0004 -BEQ AT,R0,7F016048 ;branch if page 4 -NOP -JAL 7F00A414 ;add tab 2: "NEXT" -OR A0,V0,R0 ;A0=V0: p->DL -OR S0,V0,R0 ;S0=V0: p->DL -//7F016048: -JAL 7F009F08 ;loads selected icon for folder select -OR A0,S0,R0 ;A0=S0: p->DL -//7F016050: -LW RA,003C (SP) -LW S0,0038 (SP) -ADDIU SP,SP,0C10 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F016094 - menu 0C initializer - mission failed.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F016094 - menu 0C initializer - mission failed.txt deleted file mode 100644 index 86ea9ec..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F016094 - menu 0C initializer - mission failed.txt +++ /dev/null @@ -1,31 +0,0 @@ -7F016094 4ABC4 initialize menu 0C: mission failed -LUI AT,8003 -ADDIU SP,SP,FFE8 -SW R0,A8D4 (AT) ;0->8002A8D4: reset selected flag for folder tab 2 -SW RA,0014 (SP) -LUI AT,8003 -JAL 7F00B8AC ;loads walletbond, used to construct main menus -SW R0,A8D8 (AT) ;0->8002A8D8: reset selected flag for folder tab 3 -JAL 7F015520 ;load briefing and text; V0=# entries in briefing file -NOP -JAL 7F00A3F0 ;set cursor position to tab 2 -NOP -LUI T6,8003 -LW T6,A93C (T6) ;T6=8002A93C: -BEQL T6,R0,7F0160FC ;return if zero -LW RA,0014 (SP) -JAL 700091E8 ;fill @80063BA8 table with A0 -ADDIU A0,R0,7FFF ;A0=7FFF: reset value for these? -JAL 7000703C ;set something for current music track -ADDIU A0,R0,7FFF ;A0=7FFF: -LUI AT,8002 -SW R0,434C (AT) ;0->800243AC: -JAL 70006E7C ;play music A0 -ADDIU A0,R0,0017 ;A0=17: folder soundtrack -LUI AT,8003 -SW R0,A93C (AT) ;0->8002A93C: -//7F0160F8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F016110 - menu 0C interface - mission failed.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F016110 - menu 0C interface - mission failed.txt deleted file mode 100644 index ec8c7f9..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F016110 - menu 0C interface - mission failed.txt +++ /dev/null @@ -1,144 +0,0 @@ -7F016110 4AC40 Menu 0C Interface: Mission Failed -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 ;set page width -LWC1 F12,1AD4 (AT) ;F12= 80051AD4: debriefing width -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 ;set page height -LWC1 F14,1AD8 (AT) ;F14= 80051AD8: debriefing height -JAL 70004534 -OR A0,R0,R0 -LUI AT,8003 -SW R0,A8E0 (AT) ;0->8002A8E0: unhighlight folder tab 2 -LUI AT,8003 -JAL 7F00A39C ;V0=TRUE if cursor is on tab 3 -SW R0,A8E4 (AT) ;0->8002A8E4: unhighlight folder tab 3 -BEQ V0,R0,7F016178 ;skip if not on tab 3 -//7F016168: -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F0161A0 -SW V1,A8E4 (AT) ;1->8002A8E4: highlight folder tab 3 -//7F016178: -JAL 7F00A578 ;V0=TRUE if cursor is on tab 2 -NOP -BEQ V0,R0,7F016198 ;skip if not on tab -ADDIU V1,R0,0001 -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F0161A0 -SW V1,A8E0 (AT) ;1->8002A8E0: highlight folder tab 2 -//7F016198: no tab 1 -LUI AT,8003 -SW V1,A8E0 (AT) ;1->8002A8E0: highlight folder tab 2 -//7F0161A0: detect 'select' -OR A0,R0,R0 ;A0= player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,B000 ;A1= A, Z, Start -BEQ V0,R0,7F016214 ;skip if not selected -//7F0161B0: advance selected tab: tab 3 -ADDIU V1,R0,0001 -LUI T6,8003 -LW T6,A8E4 (T6) ;T6=8002A8E4: folder tab 3 highlight -LUI AT,8003 -LUI A0,8006 -BEQ T6,R0,7F0161E8 ;select onhover -LUI T7,8003 -SW V1,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected -LW A0,3720 (A0) ;A0=80063720: p->sound effect buffer -ADDIU A1,R0,00C7 ;A1= SE 0C7: page flip -JAL 70008E08 ;sets sound effect A1 using instance A2 in buffer A0 -OR A2,R0,R0 ;A2= NULL -BEQ R0,R0,7F016244 -NOP -//7F0161E8: advance selected tab: tab 2 -LW T7,A8E0 (T7) ;T7=8002A8E0: folder tab 2 highlight -LUI AT,8003 -LUI A0,8006 -BEQ T7,R0,7F016244 ;select onhover -ADDIU A1,R0,00C7 ;A1= SE 0C7: page flip -SW V1,A8D4 (AT) ;1->8002A8D4: folder tab 2 selected -LW A0,3720 (A0) ;A0=80063720: p->sound effect buffer -JAL 70008E08 ;sets sound effect A1 using instance A2 in buffer A0 -OR A2,R0,R0 -BEQ R0,R0,7F016244 -NOP -//7F016214: detect 'cancel' -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1= B -BEQ V0,R0,7F016244 ;skip if not pressed -ADDIU V1,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW V1,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected -LW A0,3720 (A0) ;A0=80063720: p->sound effect buffer -ADDIU A1,R0,00C7 ;A1= SE 0C7: page flip -JAL 70008E08 ;sets sound effect A1 using instance A2 in buffer A0 -OR A2,R0,R0 -//7F016244: assemble page -LUI A0,8003 -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,A95C (A0) ;A0=8002A95C: p->folder object instance -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->folder object instance -OR A1,R0,R0 ;A1=item 0: tabs on side of folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2= visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->folder object instance -ADDIU A1,R0,0001 ;A1=item 1: basic folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2= visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->folder object instance -ADDIU A1,R0,0003 ;A1=item 3: OHMSS -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2= visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->folder object instance -ADDIU A1,R0,0006 ;A1=item 6: CLASSIFIED -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2= visible -//7F0162A0: track controller movement -JAL 7F009B84 -NOP -//7F0162A8: handle tab 2 selection -LUI T8,8003 -LW T8,A8D4 (T8) ;T8=8002A8D4: folder tab 2 selected flag -ADDIU A0,R0,000D ;A0=menu D: mission complete -LUI T9,8003 -BEQ T8,R0,7F0162D0 ;skip to mission complete if tab 2 selected -NOP -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 -BEQ R0,R0,7F016310 -LW RA,0014 (SP) -//7F0162D0: handle tab 3 selection -LW T9,A8D8 (T9) ;T9=8002A8D8: folder tab 3 selected flag -ADDIU A0,R0,0007 ;A0=menu 7: solo mission select -BEQL T9,R0,7F016310 ;skip to select mission if tab 3 selected -LW RA,0014 (SP) -JAL 7F01A5D4 ;set to menu A0 in mode A1 -OR A1,R0,R0 -LUI T0,8003 -LW T0,A8F8 (T0) ;T0=8002A8F8: selected mission briefing page -LUI A0,8003 -SLL T1,T0,0x3 -SUBU T1,T1,T0 -SLL T1,T1,0x2 ;T1= T0 * 0x1C: offset for solo stage entry -ADDU A0,A0,T1 -JAL 7F00E3E0 ;set cursor position to stage A0 on solo mission select page -LW A0,ABF8 (A0) ;A0=8002ABF8+offset: cursor position for stage -//7F01630C: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F0163EC - menu 0C constructor - mission failed.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F0163EC - menu 0C constructor - mission failed.txt deleted file mode 100644 index face096..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F0163EC - menu 0C constructor - mission failed.txt +++ /dev/null @@ -1,178 +0,0 @@ -7F0163EC 4AF1C Menu 0C Constructor: Mission Failed -ADDIU SP,SP,F3E8 -SW RA,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F00D5E8 ;microcode -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F0ACD98 ;microcode -OR A0,V0,R0 ;A0=V0: p->DL -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F00EABC ;print "part #: stage name" string to screen -ADDIU A1,SP,0058 ;A1=SP+58: buffer -SW V0,0C18 (SP) -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C62 ;A0="REPORT:\n" -ADDIU T6,R0,0037 -ADDIU T7,R0,008F -OR S0,V0,R0 -SW T6,0C14 (SP) -JAL 7000441C ;V0= text clip width -SW T7,0C10 (SP) -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T8,0EB8 (T8) -LH T1,0044 (SP) -ADDIU T0,R0,00FF -SW T0,0018 (SP) -LW A0,0C18 (SP) -ADDIU A1,SP,0C14 -ADDIU A2,SP,0C10 -OR A3,S0,R0 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -SW T8,0010 (SP) -JAL 7F009760 ;write text -SW T1,001C (SP) -SW V0,0C18 (SP) -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C63 ;A0="Mission status:\n" -LUI T2,8004 -LW T2,0EB4 (T2) -LUI A3,8004 -OR S0,V0,R0 -SW R0,0048 (SP) -SW R0,004C (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,004C -ADDIU A1,SP,0048 -OR A2,V0,R0 -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) -ADDIU T3,R0,0037 -ADDIU T4,R0,00A7 -SW T3,0C14 (SP) -JAL 7000441C ;V0= text clip width -SW T4,0C10 (SP) -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) -LUI T5,8004 -LUI T6,8004 -LW T6,0EB4 (T6) -LW T5,0EB8 (T5) -LH T8,0044 (SP) -ADDIU T7,R0,00FF -SW T7,0018 (SP) -LW A0,0C18 (SP) -ADDIU A1,SP,0C14 -ADDIU A2,SP,0C10 -OR A3,S0,R0 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -SW T5,0010 (SP) -JAL 7F009760 ;write text -SW T8,001C (SP) -// figure out how you lost... -LUI T9,8003 -LW T9,A928 (T9) ;T9=8002A928: 0-aborted; 1-killed in action -SW V0,0C18 (SP) -LUI T0,8003 -BEQ T9,R0,7F016574 ;branch if aborted -NOP -// killed in action -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C64 ;A0=" KILLED IN ACTION\n" -LUI V1,7800 -OR S0,V0,R0 -BEQ R0,R0,7F0165D0 -ORI V1,V1,00FF ;V1=780000FF: red 50% -// figure out if aborted or failed mission -LW T0,A924 (T0) ;T0=8002A924: 0-failed, 1-aborted -BEQ T0,R0,7F016598 ;branch if failed -NOP -// aborted -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C65 ;A0=" ABORTED\n" -LUI V1,7800 -OR S0,V0,R0 -BEQ R0,R0,7F0165D0 -ORI V1,V1,00FF ;V1=780000FF: red 50% -// test if completed with failure or full-on failed mission -JAL 7F01631C -NOP -BEQ V0,R0,7F0165BC ;branch if full-on failed mission -NOP -// completed -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C66 ;A0=" Completed\n" -OR S0,V0,R0 -BEQ R0,R0,7F0165D0 -ADDIU V1,R0,00FF ;V1=000000FF: black -// failed -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C67 ;A0=" FAILED\n" -LUI V1,7800 -OR S0,V0,R0 -ORI V1,V1,00FF ;V1=780000FF: red 50% -// display status -LW T1,0048 (SP) -ADDIU T3,R0,00A7 -SW T3,0C10 (SP) -ADDIU T2,T1,0037 -SW T2,0C14 (SP) -JAL 7000441C ;V0= text clip width -SW V1,0050 (SP) -JAL 7000442C ;V0= text clip height -SH V0,0044 (SP) -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) -LW T4,0EB8 (T4) -LW V1,0050 (SP) -LH T6,0044 (SP) -LW A0,0C18 (SP) -ADDIU A1,SP,0C14 -ADDIU A2,SP,0C10 -OR A3,S0,R0 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -SW T4,0010 (SP) -SW V1,0018 (SP) -JAL 7F009760 ;write text -SW T6,001C (SP) -// print objectives and their status -OR A0,V0,R0 ;A0=V0: p->DL -ADDIU A1,R0,00BF ;A1=0xBF: y offset -ADDIU A2,SP,0058 ;A2=SP+58: p->string buffer -JAL 7F015A08 ;print objective list -ADDIU A3,R0,0001 ;A3=1: print status -// menu interface components -JAL 7F00A414 ;add tab 2: "NEXT" -OR A0,V0,R0 -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,V0,R0 -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 -// return -LW RA,003C (SP) -LW S0,0038 (SP) -ADDIU SP,SP,0C18 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F01667C - menu 0D initializer - mission complete.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F01667C - menu 0D initializer - mission complete.txt deleted file mode 100644 index 5df6d24..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F01667C - menu 0D initializer - mission complete.txt +++ /dev/null @@ -1,24 +0,0 @@ -7F01667C 4B1AC initialize menu 0D: mission complete -LUI AT,8003 -ADDIU SP,SP,FFE8 -SW R0,A8D4 (AT) ;0->8002A8D4: reset selected flag for folder tab 2 -SW RA,0014 (SP) -LUI AT,8003 -JAL 7F00B8AC ;loads walletbond, used to construct main menus -SW R0,A8D8 (AT) ;0->8002A8D8: reset selected flag for folder tab 3 -JAL 7F015520 ;load briefing and text; V0=# entries in briefing file -NOP -LUI T6,8007 -LW T6,9790 (T6) ;T6=80069790: TRUE if cheat unlocked -LUI A0,8006 -ADDIU A1,R0,0102 ;A1=SE 102: cymbal splash -BEQ T6,R0,7F0166C0 ;return if no cheats unlocked -OR A2,R0,R0 ;A2=NULL -JAL 70008E08 ;play sound effect A1 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -//7F0166C0: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F0166D8 - menu 0D interface - mission complete.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F0166D8 - menu 0D interface - mission complete.txt deleted file mode 100644 index c292d64..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F0166D8 - menu 0D interface - mission complete.txt +++ /dev/null @@ -1,220 +0,0 @@ -7F0166D8 4B208 Menu 0D Interface: Mission Complete -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 ;set page width -LWC1 F12,1ADC (AT) ;F12=80051ADC: x dimention -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000] -LUI AT,8005 -JAL 70004650 ;set page height -LWC1 F14,1AE0 (AT) ;F14=80051AE0: z dimention -JAL 70004534 -OR A0,R0,R0 -// -LUI AT,8003 -SW R0,A8E4 (AT) ;0->8002A8E4: reset highlight flag for folder tab 3 -LUI AT,8003 -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -SW R0,A8E0 (AT) ;0->8002A8E0: reset highlight flag for folder tab 2 -BEQ V0,R0,7F016740 ;branch if not highlighted -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F016768 -SW V1,A8E4 (AT) ;1->8002A8E4: folder tab 3 selected -//7F016740: -JAL 7F00A578 ;V0=TRUE if cursor on tab 2 -NOP -BEQ V0,R0,7F016760 ;branch if not highlighted -ADDIU V1,R0,0001 -ADDIU V1,R0,0001 -LUI AT,8003 -BEQ R0,R0,7F016768 -SW V1,A8E0 (AT) ;1->8002A8E0: folder tab 2 selected -//7F016760: silly really. select either way -LUI AT,8003 -SW V1,A8E0 (AT) ;1->8002A8E0: folder tab 2 selected -//7F016768: -OR A0,R0,R0 ;A0=player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,B000 ;A1=Z,A,Start button -BEQ V0,R0,7F0167DC ;branch if none pressed -ADDIU V1,R0,0001 -LUI T6,8003 -LW T6,A8E0 (T6) ;T6=8002A8E0: folder tab 2 selected -LUI AT,8003 -LUI A0,8006 -BEQ T6,R0,7F0167B0 ;branch if it wasn't, though it always is... -LUI T7,8003 -SW V1,A8D4 (AT) ;1->8002A8D4: tab 2 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=SE 0C7 -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01680C -NOP -//7F0167B0: -LW T7,A8E4 (T7) ;T7=TRUE if tab 3 selected -LUI AT,8003 -LUI A0,8006 -BEQ T7,R0,7F01680C ;branch if not selected -ADDIU A1,R0,00C7 ;A1=SE 0C7 -SW V1,A8D8 (AT) ;1->8002A8D8: tab 3 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -BEQ R0,R0,7F01680C -NOP -//7F0167DC: test if backtracking -OR A0,R0,R0 ;A0=player 1 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 ;A1=B button -BEQ V0,R0,7F01680C ;branch if not pressed -ADDIU V1,R0,0001 -LUI AT,8003 -LUI A0,8006 -SW V1,A8D8 (AT) ;1->8002A8D8: tab 3 selected -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C7 ;A1=SE 0C7 -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -//7F01680C: build folder backdrop -LUI A0,8003 -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0: item #: tabs on side of folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0001 ;A1=1: item #: basic folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0003 ;A1=3: item #: OHMSS -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0006 ;A1=6: item #: CLASSIFIED -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=visible -JAL 7F009B84 ;control stick tracking -NOP -// -LUI T8,8003 -LW T8,A8D4 (T8) ;T8=8002A8D4: TRUE if tab 2 selected -LUI T1,8003 -BEQ T8,R0,7F0169B4 ;branch if not selected -NOP -JAL 7F01631C -NOP -BEQ V0,R0,7F0169A0 -LUI T9,8003 -LW T9,A900 (T9) ;T9=8002A900: TRUE if displaying cheat select mission -LUI T0,8003 -ADDIU T0,T0,A8F8 ;T0=8002A8F8: selected mission briefing page -BNEL T9,R0,7F0169A4 ;branch if cheating -ADDIU A0,R0,000A -LW A1,0000 (T0) ;A1=selected mission briefing page -ADDIU A3,R0,001C -LUI A2,8003 -MULTU A1,A3 ;A1=selected page * 0x1C -ADDIU A2,A2,ABE4 ;A2=8002ABE4: table of missions and briefings -ADDIU AT,R0,0011 -ADDIU A0,R0,000B ;A0=stage active -MFLO T1 -ADDU T2,A2,T1 ;T2=p->mission briefing -LW V0,0014 (T2) ;V0=stage slot# -BNEL V0,AT,7F0168F4 ;branch if not stage 11: Cradle -SLTI AT,V0,0012 -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A1,R0,0001 -ADDIU T3,R0,0036 ;T3=36: cuba -LUI AT,8003 -BEQ R0,R0,7F0169F8 -SW T3,A8F4 (AT) ;cuba->8002A8F4: stage selected -//7F0168F0: current mission -SLTI AT,V0,0012 -BNEZ AT,7F01693C ;branch if stages Dam-Cradle -ADDIU V1,A1,0001 ;V1=selected page + 1 -ADDIU A0,R0,0007 ;A0=7: -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -LUI T0,8003 -ADDIU T0,T0,A8F8 ;T0=8002A8F8 -LW T4,0000 (T0) ;T4=8002A8F8: selected mission briefing page -ADDIU A3,R0,001C -LUI A2,8003 -MULTU T4,A3 -ADDIU A2,A2,ABE4 ;A2=8002ABE4: table of missions and briefings -MFLO T5 -ADDU T6,A2,T5 ;T6=p->selected mission -JAL 7F00E3E0 ;set cursor to stage A0 on mission select -LW A0,0014 (T6) ;A0=mission+14: menu slot -BEQ R0,R0,7F0169FC -LW RA,0014 (SP) -//7F01693C: next mission! -MULTU V1,A3 -OR A1,R0,R0 -MFLO T7 -ADDU V0,A2,T7 ;V0=p->next mission -LHU A0,0004 (V0) ;A0=text ID for stage name 1 -BEQ A0,R0,7F016978 ;branch if not present -NOP -//7F016958: loop until you hit a stage entry -LW T8,0008 (V0) ;T8=stage# to load -BGEZ T8,7F016978 ;branch if not a chapter heading -NOP -LHU A0,0020 (V0) ;A0=next mission's text ID -ADDIU V1,V1,0001 ;V1++ next slot# -ADDIU V0,V0,001C ;V0+=1C: next mission entry -BNEL A0,R0,7F01695C ;loop if not present -LW T8,0008 (V0) ;T8=stage# to load -//7F016978: -BEQ A0,R0,7F016990 ;branch if invalid stage -NOP -LW T9,0008 (V0) ;T9=stage# to load -SW V1,0000 (T0) ;V1->selected mission briefing page -LUI AT,8003 -SW T9,A8F4 (AT) ;T9->8002A8F4: stage selected -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A0,R0,000A ;A0=A: briefing page -BEQ R0,R0,7F0169FC -LW RA,0014 (SP) -// -ADDIU A0,R0,000A ;A0=A: briefing page -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -BEQ R0,R0,7F0169FC ;return -LW RA,0014 (SP) -// set cursor on page if returning to mission select -LW T1,A8D8 (T1) ;T1=8002A8D8: tab 3 selected -ADDIU A0,R0,0007 ;A0=7: mission select page -BEQL T1,R0,7F0169FC ;return if not selected -LW RA,0014 (SP) -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -LUI T0,8003 -ADDIU T0,T0,A8F8 -LW T2,0000 (T0) ;T2=8002A8F8: selected mission briefing page -ADDIU A3,R0,001C -LUI A2,8003 -MULTU T2,A3 -ADDIU A2,A2,ABE4 ;A2=8002ABE4: table of missions and briefings -MFLO T3 ;T3=briefing * 0x1C: offset to mission entry -ADDU T4,A2,T3 ;T4=p->mission entry -JAL 7F00E3E0 ;set cursor to stage A0 on mission select -LW A0,0014 (T4) ;A0=stage slot # -//7F0169F8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Main Menus/Solo Menus/7F016A08 - menu 0D constructor - mission complete.txt b/notes/GE Documentation/Main Menus/Solo Menus/7F016A08 - menu 0D constructor - mission complete.txt deleted file mode 100644 index 022d303..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/7F016A08 - menu 0D constructor - mission complete.txt +++ /dev/null @@ -1,1148 +0,0 @@ -7F016A08 4B538 Menu 0D Constructor - Mission Complete -ADDIU SP,SP,F398 -SW RA,003C (SP) -SW S1,0038 (SP) -SW S0,0034 (SP) -OR A1,R0,R0 ;A1=red -OR A2,R0,R0 ;A2=green -JAL 700046D0 ;setfillcolour("black") -OR A3,R0,R0 ;A3=blue -JAL 70003EF8 ;fillrect() -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F00D5E8 -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F0ACD98 -OR A0,V0,R0 ;A0=V0: p->DL -// retrieve statistics -JAL 7F08BFB8 -OR S1,V0,R0 ;S1=V0: p->DL -JAL 7F06A924 ;V0=cur.player's total kill count -SW V0,0098 (SP) ;SP+98= -SW V0,0094 (SP) ;SP+94= kill total -JAL 7F06A740 ;V0=#shots of type A0 -OR A0,R0,R0 ;A0=0: total -SW V0,0090 (SP) ;SP+90= shot total -JAL 7F06A740 ;V0=#shots of type A0 -ADDIU A0,R0,0001 ;A0=1: head shots -SW V0,008C (SP) ;SP+8C= head shots -JAL 7F06A740 ;V0=#shots of type A0 -ADDIU A0,R0,0002 ;A0=2: body shots -SW V0,0088 (SP) ;SP+88= body shots -JAL 7F06A740 ;V0=#shots of type A0 -ADDIU A0,R0,0003 ;A0=3: leg shots -SW V0,0084 (SP) ;SP+84= leg shots -JAL 7F06A740 ;V0=#shots of type A0 -ADDIU A0,R0,0004 ;A0=4: other shots -SW V0,0080 (SP) ;SP+80= other hits (1) -JAL 7F06A740 ;V0=#shots of type A0 -ADDIU A0,R0,0005 ;A0=5: ??? -SW V0,007C (SP) ;SP+7C= other hits (2) -JAL 7F06A740 ;V0=#shots of type A0 -ADDIU A0,R0,0006 ;A0=6: ??? -// tally hits -LW T6,008C (SP) ;T6=head hits -LW T7,0088 (SP) ;T7=body hits -LW T9,0084 (SP) ;T9=leg hits -LW T3,0080 (SP) ;T3=other hits (1) -LW T5,007C (SP) ;T5=other hits (2) -ADDU T8,T6,T7 -ADDU T2,T8,T9 -ADDU T4,T2,T3 -ADDU A2,T4,T5 -ADDU T6,A2,V0 ;T6=shot total -BGTZ A2,7F016AD8 ;branch if at least something hit -SW T6,0074 (SP) ;SP+74=hit total -ADDIU A2,R0,0001 ;A2=1 -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00A8 ;A1=SP+A8 -JAL 7F00EABC -SW A2,0070 (SP) ;SP+70=1 -OR S1,V0,R0 ;S1=V0: p->DL -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C68 ;A0=9C68: "STATISTICS:\n" -ADDIU T7,R0,0037 -ADDIU T8,R0,008F -SW V0,00A4 (SP) ;SP+A4= p->"STATISTICS:\n" -SW T7,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T8,0C60 (SP) -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LUI T2,8004 -LUI T3,8004 -LW T3,0EB4 (T3) -LW T2,0EB8 (T2) -ADDIU T4,R0,00FF -SW T4,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) ;A3= p->"STATISTICS:\n" -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0014 (SP) -JAL 7F009760 ;write text -SW T2,0010 (SP) -// compute offset to next line of text -LUI T5,8004 -LW T5,0EB4 (T5) -LUI A3,8004 -OR S1,V0,R0 ;S1=V0: p->DL -SW R0,009C (SP) -SW R0,00A0 (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,00A0 -ADDIU A1,SP,009C -LW A2,00A4 (SP) ;A2=SP+A4: p->"STATISTICS:\n" -SW R0,0014 (SP) -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) -// display "Time:" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C69 ;A0=9C69: "Time:\n" -ADDIU T6,R0,0037 -ADDIU T7,R0,00A7 -SW V0,00A4 (SP) -SW T6,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T7,0C60 (SP) -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LUI T9,8004 -LUI T2,8004 -LW T2,0EB4 (T2) -LW T9,0EB8 (T9) -ADDIU T3,R0,00FF -SW T3,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -JAL 7F009760 ;write text -SW T9,0010 (SP) -// calculate and display completion time -LUI A0,8003 -OR S1,V0,R0 ;S1=V0: p->DL -JAL 7F01DDC4 ;V0=p->eeprom folder A0 -LW A0,A8E8 (A0) ;A0=8002A8E8: cur.folder -LUI T4,8003 -LW T4,A8F8 (T4) ;T4=8002A8F8: selected mission briefing page -LUI S0,8003 -ADDIU S0,S0,ABE4 ;S0=8002ABE4: table of missions and briefings -SLL T5,T4,0x3 -SUBU T5,T5,T4 -SLL T5,T5,0x2 -ADDU T6,S0,T5 ;T6=p->mission -LUI A2,8003 -LW A2,A8FC (A2) ;A2=8002A8FC: difficulty -LW A1,0014 (T6) ;A1=mission+14: slot -JAL 7F01D990 ;V0= completion time for stage A1 on difficulty A2 -OR A0,V0,R0 ;A0=V0: p->eeprom folder -BEQ V0,R0,7F016C60 ;branch if 0, which would mean it wasn't finished -OR T1,V0,R0 -SLTI AT,V0,03FF ;stage times are only 10 bits long... -BNEZ AT,7F016C64 ;branch if also zero, after getting rid of stupid bits -NOP -ADDIU T1,R0,FFFF -LUI V0,8003 -LW V0,A8FC (V0) ;V0=8002A8FC: difficulty -ADDIU T0,R0,003C -LUI T7,8003 -SLTI AT,V0,0003 -BNEZ AT,7F016C88 -LUI T6,8003 -BEQ R0,R0,7F016C8C -ADDIU V1,R0,0002 -//7F016C88: -OR V1,V0,R0 -LW T7,A8F8 (T7) ;T7=8002A8F8: selected mission briefing page -SLL T4,V1,0x1 ;T4=difficulty * 2 -LUI A1,8005 -SLL T8,T7,0x3 -SUBU T8,T8,T7 -LW T7,0098 (SP) ;T7=SP+98: -SLL T8,T8,0x2 ;T8=mission * 1C: offset to mission entry -ADDU T9,S0,T8 ;T9=p->mission entry -DIV T7,T0 -MFLO V0 -LW T2,0014 (T9) ;T2=mission slot -SB R0,00A8 (SP) -DIV V0,T0 -SLL T3,T2,0x2 -SUBU T3,T3,T2 -SLL T3,T3,0x1 ;T3=slot * 6 -ADDU T5,T3,T4 ;T5=slot*6 + difficulty*2: offset to target time -ADDU T6,T6,T5 -LH T6,B564 (T6) ;T6=8002B564+offset: target mission time -MFHI A3 -MFLO A2 -SW T1,0064 (SP) -ADDIU A1,A1,180C ;A1=8005180C: "%02d:%02d" -ADDIU A0,SP,00A8 -SW T6,0060 (SP) ;SP+60=target time -BNEZ T0,7F016CFC -NOP -BREAK -ADDIU AT,R0,FFFF -BNE T0,AT,7F016D14 -LUI AT,8000 -BNE T7,AT,7F016D14 -NOP -BREAK -BNEZ T0,7F016D20 -NOP -BREAK -ADDIU AT,R0,FFFF -BNE T0,AT,7F016D38 -LUI AT,8000 -BNE V0,AT,7F016D38 -NOP -BREAK -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -NOP -ADDIU T8,R0,0082 -ADDIU T9,R0,00A7 -SW T8,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T9,0C60 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LUI T3,8004 -LUI T4,8004 -LW T4,0EB4 (T4) -LW T3,0EB8 (T3) -ADDIU T5,R0,00FF -SW T5,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0014 (SP) -JAL 7F009760 ;write text -SW T3,0010 (SP) -// display if cheat unlocked -LUI T6,8007 -LW T6,9790 (T6) ;T6=80069790: TRUE if cheat unlocked -OR S1,V0,R0 ;S1=V0: p->DL -BEQL T6,R0,7F016E44 ;skip if no cheat unlocked -LW T3,0060 (SP) -SB R0,00A8 (SP) -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9D13 ;A0=9D13: "New Cheat Available" -LUI A1,8005 -ADDIU A1,A1,1818 ;A1=80051818: " [%s]" -ADDIU A0,SP,00A8 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A2,V0,R0 ;A2=V0: p->"New Cheat Available" -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T8,0EB8 (T8) -LUI T2,A000 -ORI T2,T2,00FF ;T2=A00000FF red -SW T2,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F009760 ;write text -SW T8,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -//7F016E40: display target time if applicable -LW T3,0060 (SP) ;T3=target time -BLEZ T3,7F01708C ;branch if there isn't a valid one -LUI T4,8003 -LW T4,A8FC (T4) ;T4=8002A8FC: difficulty -ADDIU AT,R0,0003 -BEQL T4,AT,7F017090 ;branch if 007 -LW V0,0064 (SP) -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9D12 ;A0=9D12: "Target:" -LW T6,00A0 (SP) -ADDIU T5,R0,0037 -SW V0,00A4 (SP) -ADDIU T7,T6,00A9 -SW T5,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T7,0C60 (SP) -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LUI T9,8004 -LUI T2,8004 -LW T2,0EB4 (T2) -LW T9,0EB8 (T9) -ADDIU T3,R0,00FF -SW T3,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -JAL 7F009760 ;write text -SW T9,0010 (SP) -// calculate and display target time -LW T4,0060 (SP) ;T4=SP+60: target time -ADDIU V1,R0,003C ;V1=60 (0x3C) -LUI A1,8005 -DIV T4,V1 -MFHI A3 ;A3=time % 60: seconds -MFLO A2 ;A2=time / 60: minutes -OR S1,V0,R0 ;S1=V0: p->DL -SB R0,00A8 (SP) -ADDIU A1,A1,1824 ;A1=80051824: "%02d:%02d" -ADDIU A0,SP,00A8 -BNEZ V1,7F016F08 ;check if there was division by 0, which isn't really necessary -NOP -BREAK -//7F016F08: -ADDIU AT,R0,FFFF -BNE V1,AT,7F016F20 ;nothing personal, but V1 is a static value... -LUI AT,8000 -BNE T4,AT,7F016F20 -NOP -BREAK -//7F016F20: -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -NOP -LW T6,00A0 (SP) -ADDIU T5,R0,0082 -SW T5,0C64 (SP) -ADDIU T7,T6,00A9 -JAL 7000441C ;V0= text clip width -SW T7,0C60 (SP) -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LUI T9,8004 -LUI T2,8004 -LW T2,0EB4 (T2) -LW T9,0EB8 (T9) -ADDIU T3,R0,00FF -SW T3,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -JAL 7F009760 ;write text -SW T9,0010 (SP) -// -LW V1,0064 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -BLTZ V1,7F0171B4 -SLTI AT,V1,03FF -BEQ AT,R0,7F0171B4 -NOP -BLTZ V1,7F017018 -SB R0,00A8 (SP) -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9D11 ;A0=9D11: "Best Time:" -LW V1,0064 (SP) -ADDIU T0,R0,003C ;T0=60 (0x3C) -LUI A1,8005 -DIV V1,T0 -MFHI T4 -MFLO A3 ;A3=time / 60: minutes -SW T4,0010 (SP) ;SP+10= seconds -ADDIU A1,A1,1830 ;A1=80051830: " (%s %02d:%02d)" -ADDIU A0,SP,00A8 ;A0=SP+A8: buffer -OR A2,V0,R0 ;A2=V0: p->text -BNEZ T0,7F016FF0 -NOP -BREAK -//7F016FF0: -ADDIU AT,R0,FFFF -BNE T0,AT,7F017008 -LUI AT,8000 -BNE V1,AT,7F017008 -NOP -BREAK -//7F017008: -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -NOP -BEQ R0,R0,7F017028 -NOP -//7F017018: make a NULL string instead -LUI A1,8005 -ADDIU A1,A1,1848 ;A1=80051848: "" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A0,SP,00A8 -//7F017028: -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 -LUI T6,8004 -LUI T7,8004 -LW T7,0EB4 (T7) -LW T6,0EB8 (T6) -ADDIU T8,R0,00FF -SW T8,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0014 (SP) -JAL 7F009760 ;write text -SW T6,0010 (SP) -BEQ R0,R0,7F0171B4 -OR S1,V0,R0 ;S1=V0: p->DL -// -LW V0,0064 (SP) -BLTZ V0,7F0171B4 -SLTI AT,V0,03FF -BEQ AT,R0,7F0171B4 -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9D11 ;A0=9D11: "Best Time:" -LW T2,00A0 (SP) -ADDIU T9,R0,0037 -SW V0,00A4 (SP) -ADDIU T3,T2,00A9 -SW T9,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T3,0C60 (SP) -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LUI T5,8004 -LUI T6,8004 -LW T6,0EB4 (T6) -LW T5,0EB8 (T5) -ADDIU T7,R0,00FF -SW T7,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -JAL 7F009760 ;write text -SW T5,0010 (SP) -// -LW T8,0064 (SP) -ADDIU AT,R0,003C -LUI A1,8005 -DIV T8,AT -MFHI A3 -MFLO A2 -OR S1,V0,R0 ;S1=V0: p->DL -SB R0,00A8 (SP) -ADDIU A1,A1,184C ;A1=8005184C: "%02d:%02d" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A0,SP,00A8 -LW T2,00A0 (SP) -ADDIU T9,R0,0082 -SW T9,0C64 (SP) -ADDIU T3,T2,00A9 -JAL 7000441C ;V0= text clip width -SW T3,0C60 (SP) -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LUI T5,8004 -LUI T6,8004 -LW T6,0EB4 (T6) -LW T5,0EB8 (T5) -ADDIU T7,R0,00FF -SW T7,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -JAL 7F009760 ;write text -SW T5,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// display "accuracy" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C6A ;A0=ID 9C6A: "accuracy:" -ADDIU T8,R0,0037 -ADDIU T9,R0,00CC -SW V0,00A4 (SP) -SW T8,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T9,0C60 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LUI T3,8004 -LUI T4,8004 -LW T4,0EB4 (T4) -LW T3,0EB8 (T3) -ADDIU T5,R0,00FF -SW T5,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0014 (SP) -JAL 7F009760 ;write text -SW T3,0010 (SP) -// calculate and display accuracy -LW V1,0090 (SP) ;V1=SP+90: shot total -OR S1,V0,R0 ;S1=V0: p->DL -ADDIU A0,SP,00A8 ;A0=SP+A8: buffer -BLEZL V1,7F017268 ;branch if you didn't fire -MTC1 R0,F0 -LW T6,0074 (SP) ;T6=SP+74: hit total -LUI AT,42C8 -MTC1 AT,F8 ;F8=100.0 [42C80000] -MTC1 T6,F4 -MTC1 V1,F16 -CVT.S.W F6,F4 ;F6=(float) hits -CVT.S.W F18,F16 ;F18=(float) shots -MUL.S F10,F6,F8 ;F10=hits * 100.0 -BEQ R0,R0,7F01726C -DIV.S F0,F10,F18 ;F0=hits * 100.0 / shots -//7F017264: if zero, set as zero -MTC1 R0,F0 -NOP -//7F01726C: -CVT.D.S F4,F0 ;F4=(double) percentage -LUI A1,8005 -MFC1 A3,F4 ;A3=percentage (lower) -MFC1 A2,F5 ;A2=percentage (upper) -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A1,A1,1858 ;A1=80051858: "%.1f%%" -ADDIU T7,R0,0082 -ADDIU T8,R0,00CC -SW T7,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T8,0C60 (SP) -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 -LUI T2,8004 -LUI T3,8004 -LW T3,0EB4 (T3) -LW T2,0EB8 (T2) -ADDIU T4,R0,00FF -SW T4,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T3,0014 (SP) -JAL 7F009760 ;write text -SW T2,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C6B -ADDIU T5,R0,0037 -ADDIU T6,R0,00DC -SW V0,00A4 (SP) -SW T5,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T6,0C60 (SP) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T8,0EB8 (T8) -ADDIU T2,R0,00FF -SW T2,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F009760 ;write text -SW T8,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// -OR A0,R0,R0 ;A0=player 1 -JAL 7F009B50 ;V0=p->name of player A0's favored weapon in hand A1 -OR A1,R0,R0 ;A1=right hand -ADDIU A0,SP,00A8 ;A0=SP+A8: buffer -JAL 7000A770 ;V0= strcpy(A0,A1) -OR A1,V0,R0 ;A1=p->text -LUI A0,8007 -ADDIU A0,A0,96F0 ;A0=800696F0: player 1's favored items -LW V1,0000 (A0) ;V1=800696F0: player 1's favored right item -BLEZL V1,7F0173C4 -ADDIU T6,R0,00BE -LW T3,0004 (A0) ;T3=800696F4: player 1's favored left item -BNEL T3,V1,7F0173C4 ;branch if not a double -ADDIU T6,R0,00BE -// append "x2" to item name for doubles -JAL 7001387C ;V0=strlen(A0) -ADDIU A0,SP,00A8 ;A0=SP+A8: text buffer -ADDIU T4,V0,FFFF ;T4=strlen-NULL -ADDIU T5,SP,00A8 -LUI A1,8005 -ADDIU A1,A1,1860 ;A1=80051860: " x 2\n" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDU A0,T4,T5 -//7F0173C0: -ADDIU T6,R0,00BE -ADDIU T7,R0,00DC -SW T6,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T7,0C60 (SP) -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LUI T9,8004 -LUI T2,8004 -LW T2,0EB4 (T2) -LW T9,0EB8 (T9) -ADDIU T3,R0,00FF -SW T3,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -JAL 7F009760 ;write text -SW T9,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C6C ;A0=9C6C: "shot total:" -ADDIU T4,R0,0037 -ADDIU T5,R0,00F4 -SW V0,00A4 (SP) -SW T4,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T5,0C60 (SP) -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 -LUI T7,8004 -LUI T8,8004 -LW T8,0EB4 (T8) -LW T7,0EB8 (T7) -ADDIU T9,R0,00FF -SW T9,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -JAL 7F009760 ;write text -SW T7,0010 (SP) -// write # shots -LUI A1,8005 -OR S1,V0,R0 ;S1=V0: p->DL -ADDIU A1,A1,1868 ;A1=80051868: "%d" -ADDIU A0,SP,00A8 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -LW A2,0090 (SP) ;A2=SP+90: # shots -ADDIU T2,R0,0082 -ADDIU T3,R0,00F4 -SW T2,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T3,0C60 (SP) -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 -LUI T5,8004 -LUI T6,8004 -LW T6,0EB4 (T6) -LW T5,0EB8 (T5) -ADDIU T7,R0,00FF -SW T7,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T6,0014 (SP) -JAL 7F009760 ;write text -SW T5,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C6D -ADDIU T8,R0,00B4 -ADDIU T9,R0,00F4 -SW V0,00A4 (SP) -SW T8,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T9,0C60 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LUI T3,8004 -LUI T4,8004 -LW T4,0EB4 (T4) -LW T3,0EB8 (T3) -ADDIU T5,R0,00FF -SW T5,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0014 (SP) -JAL 7F009760 ;write text -SW T3,0010 (SP) -// calculate and display head hits -LW T7,008C (SP) ;T7=head hits -LW T6,0070 (SP) ;T6=total hits -LUI AT,42C8 -MTC1 T7,F8 -MTC1 AT,F10 ;F10=100.0 [42C80000] -MTC1 T6,F6 -CVT.S.W F16,F8 ;F16=(float) head hits -LUI AT,3F00 -OR S1,V0,R0 ;S1=V0: p->DL -CVT.S.W F0,F6 ;F0=(float) total -MUL.S F18,F16,F10 ;F18=head hits * 100.0 -MTC1 AT,F6 ;F6=0.5 [3F000000] -SWC1 F0,0048 (SP) ;SP+48= total -DIV.S F4,F18,F0 ;F4=(head hits * 100.0)/total -JAL 7F05C360 ;F0= truncf(F12) -ADD.S F12,F4,F6 ;F12=(head hits * 100.0)/total + 0.5: percentage rounded up -TRUNC.W.S F8,F0 ;F8=F0: percentage -LUI A1,8005 -ADDIU A1,A1,186C ;A1=8005186C: "%d (%d%%)" -ADDIU A0,SP,00A8 ;A0=SP+A8: buffer -MFC1 A3,F8 ;A3=percentage -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -LW A2,008C (SP) ;A2=head hits -ADDIU T9,R0,012C -ADDIU T2,R0,00F4 -SW T9,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T2,0C60 (SP) -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T3,R0 -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) -LW T4,0EB8 (T4) -ADDIU T6,R0,00FF -SW T6,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -JAL 7F009760 ;write text -SW T4,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C6E ;A0=9C6E: "body hits:\n" -LW T8,00A0 (SP) -ADDIU T7,R0,00B4 -SW V0,00A4 (SP) -ADDIU T9,T8,00F4 -SW T7,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T9,0C60 (SP) -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 -LUI T3,8004 -LUI T4,8004 -LW T4,0EB4 (T4) -LW T3,0EB8 (T3) -ADDIU T5,R0,00FF -SW T5,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T4,0014 (SP) -JAL 7F009760 ;write text -SW T3,0010 (SP) -// -LW T6,0088 (SP) ;T6=SP+88: body hits -LUI AT,42C8 -MTC1 AT,F18 ;F18=100.0 [42C80000] -MTC1 T6,F16 -LWC1 F6,0048 (SP) ;F6=total -LUI AT,3F00 -CVT.S.W F10,F16 -MTC1 AT,F16 ;F16=0.5 [3F000000] -OR S1,V0,R0 ;S1=V0: p->DL -MUL.S F4,F10,F18 -DIV.S F8,F4,F6 -JAL 7F05C360 ;F0= truncf(F12) -ADD.S F12,F8,F16 ;F12=(body * 100.0)/total + 0.5: rounded up -TRUNC.W.S F10,F0 ;F10=F0: body hit% -LUI A1,8005 -ADDIU A1,A1,1878 ;A1=80051878: "%d (%d%%)" -ADDIU A0,SP,00A8 -MFC1 A3,F10 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -LW A2,0088 (SP) -LW T9,00A0 (SP) -ADDIU T8,R0,012C -SW T8,0C64 (SP) -ADDIU T2,T9,00F4 -JAL 7000441C ;V0= text clip width -SW T2,0C60 (SP) -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T3,R0 -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) -LW T4,0EB8 (T4) -ADDIU T6,R0,00FF -SW T6,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -JAL 7F009760 ;write text -SW T4,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// display limb hits -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C6F ;A0=9C6F: "limb hits:\n" -LW T8,00A0 (SP) -ADDIU T7,R0,00B4 -SW V0,00A4 (SP) -SLL T9,T8,0x1 -ADDIU T2,T9,00F4 -SW T7,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T2,0C60 (SP) -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T3,R0 -LUI T4,8004 -LUI T5,8004 -LW T5,0EB4 (T5) -LW T4,0EB8 (T4) -ADDIU T6,R0,00FF -SW T6,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T5,0014 (SP) -JAL 7F009760 ;write text -SW T4,0010 (SP) -// calculate and display limb hits -LW T7,0084 (SP) ;T7=SP+84: limb hits -LUI AT,42C8 -MTC1 AT,F6 ;F6=100.0 [42C80000] -MTC1 T7,F18 -LWC1 F16,0048 (SP) -LUI AT,3F00 -CVT.S.W F4,F18 ;F4=(float) limb hits -MTC1 AT,F18 ;F18=0.5 [3F000000] -OR S1,V0,R0 ;S1=V0: p->DL -MUL.S F8,F4,F6 -DIV.S F10,F8,F16 -JAL 7F05C360 ;F0= truncf(F12) -ADD.S F12,F10,F18 ;F12=(limb * 100.0)/total + 0.5: rounded up -TRUNC.W.S F4,F0 -LUI A1,8005 -ADDIU A1,A1,1884 ;A1=80051884: "%d (%d%%)" -ADDIU A0,SP,00A8 -MFC1 A3,F4 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -LW A2,0084 (SP) -LW T2,00A0 (SP) -ADDIU T9,R0,012C -SW T9,0C64 (SP) -SLL T3,T2,0x1 -ADDIU T4,T3,00F4 -JAL 7000441C ;V0= text clip width -SW T4,0C60 (SP) -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 -LUI T6,8004 -LUI T7,8004 -LW T7,0EB4 (T7) -LW T6,0EB8 (T6) -ADDIU T8,R0,00FF -SW T8,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0014 (SP) -JAL 7F009760 ;write text -SW T6,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C70 ;A0=9C70: "others:\n" -LW T2,00A0 (SP) -ADDIU T9,R0,00B4 -SW V0,00A4 (SP) -SLL T3,T2,0x2 -SUBU T3,T3,T2 -ADDIU T4,T3,00F4 -SW T9,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T4,0C60 (SP) -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 -LUI T6,8004 -LUI T7,8004 -LW T7,0EB4 (T7) -LW T6,0EB8 (T6) -ADDIU T8,R0,00FF -SW T8,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T7,0014 (SP) -JAL 7F009760 ;write text -SW T6,0010 (SP) -// calculate and display other hits -LW T9,007C (SP) ;T9=SP+7C: other hits 2 -LW T2,0080 (SP) ;T2=SP+80: other hits 1 -LUI AT,42C8 -MTC1 AT,F16 ;F16=100.0 [42C80000] -ADDU S0,T9,T2 ;S0=other + other -MTC1 S0,F6 -LWC1 F18,0048 (SP) -LUI AT,3F00 -CVT.S.W F8,F6 ;F8=(float) other hits -MTC1 AT,F6 -OR S1,V0,R0 ;S1=V0: p->DL -MUL.S F10,F8,F16 -DIV.S F4,F10,F18 -JAL 7F05C360 ;F0= truncf(F12) -ADD.S F12,F4,F6 ;F12=(other * 100.0)/total + 0.5 -TRUNC.W.S F8,F0 -LUI A1,8005 -ADDIU A1,A1,1890 ;A1=80051890: "%d (%d%%)" -ADDIU A0,SP,00A8 -MFC1 A3,F8 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -OR A2,S0,R0 -LW T5,00A0 (SP) -ADDIU T4,R0,012C -SW T4,0C64 (SP) -SLL T6,T5,0x2 -SUBU T6,T6,T5 -ADDIU T7,T6,00F4 -JAL 7000441C ;V0= text clip width -SW T7,0C60 (SP) -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 -LUI T9,8004 -LUI T2,8004 -LW T2,0EB4 (T2) -LW T9,0EB8 (T9) -ADDIU T3,R0,00FF -SW T3,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T2,0014 (SP) -JAL 7F009760 ;write text -SW T9,0010 (SP) -OR S1,V0,R0 ;S1=V0: p->DL -// -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C71 ;A0=9C71: "Kill total:\n" -LW T5,00A0 (SP) -ADDIU T4,R0,0037 -SW V0,00A4 (SP) -ADDIU T6,T5,00F4 -SW T4,0C64 (SP) -JAL 7000441C ;V0= text clip width -SW T6,0C60 (SP) -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T8,0EB8 (T8) -ADDIU T2,R0,00FF -SW T2,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -LW A3,00A4 (SP) -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F009760 ;write text -SW T8,0010 (SP) -LUI A1,8005 -OR S1,V0,R0 ;S1=V0: p->DL -// display # kills -ADDIU A1,A1,189C ;A1=8005189C: "%d" -ADDIU A0,SP,00A8 -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -LW A2,0094 (SP) ;A2=SP+94: kill total -LW T4,00A0 (SP) -ADDIU T3,R0,0082 -SW T3,0C64 (SP) -ADDIU T5,T4,00F4 -JAL 7000441C ;V0= text clip width -SW T5,0C60 (SP) -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 -LUI T7,8004 -LUI T8,8004 -LW T8,0EB4 (T8) -LW T7,0EB8 (T7) -ADDIU T9,R0,00FF -SW T9,0018 (SP) -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0C64 -ADDIU A2,SP,0C60 -ADDIU A3,SP,00A8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T8,0014 (SP) -JAL 7F009760 ;write text -SW T7,0010 (SP) -// -JAL 7F00A414 ;add tab 2: "NEXT" -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F00A238 ;add tab 3: "PREVIOUS" -OR A0,V0,R0 ;A0=V0: p->DL -JAL 7F009F08 ;loads selected icon for folder select -OR A0,V0,R0 ;A0=V0: p->DL -// return -LW RA,003C (SP) -LW S0,0034 (SP) -LW S1,0038 (SP) -JR RA -ADDIU SP,SP,0C68 diff --git a/notes/GE Documentation/Main Menus/Solo Menus/briefings.txt b/notes/GE Documentation/Main Menus/Solo Menus/briefings.txt deleted file mode 100644 index b7f39b6..0000000 --- a/notes/GE Documentation/Main Menus/Solo Menus/briefings.txt +++ /dev/null @@ -1,79 +0,0 @@ -Briefings: 0x9E54; each is 0x1C in size -0x 0 4 pointer to chapter number (1,2,3... or i,ii,iii...) -0x 4 2 name of chapter/stage 1 -0x 6 2 name of chapter/stage 2 -0x 8 4 stage to load or -1 if not applicable -0x C 4 row on screen (0-4) -0x10 4 1 for chapter heading (no briefing present) -0x14 4 stage slot number 0-19 -0x18 4 pointer to briefing text or NULL - -8004F310 9C780000 FFFFFFFF 00000000 00000001 FFFFFFFF 00000000 -8004F314 9C790000 00000021 00000000 00000000 00000000 8004F318 -8004F324 9C7A0000 00000022 00000000 00000000 00000001 8004F328 -8004F334 9C7B0000 00000023 00000000 00000000 00000002 8004F338 -8004F344 9C7C0000 FFFFFFFF 00000000 00000001 FFFFFFFF 00000000 -8004F348 9C7D0000 00000024 00000000 00000000 00000003 8004F34C -8004F358 9C7E0000 00000009 00000000 00000000 00000004 8004F35C -8004F370 9C7F0000 FFFFFFFF 00000001 00000001 FFFFFFFF 00000000 -8004F374 9C809C81 00000014 00000001 00000000 00000005 8004F378 -8004F384 9C820000 FFFFFFFF 00000001 00000001 FFFFFFFF 00000000 -8004F388 9C830000 0000001A 00000001 00000000 00000006 8004F38C -8004F398 9C7C0000 FFFFFFFF 00000001 00000001 FFFFFFFF 00000000 -8004F39C 9C7D0000 0000002B 00000001 00000000 00000007 8004F3A0 -8004F3B0 9C7E0000 0000001B 00000001 00000000 00000008 8004F3B4 -8004F3C0 9C840000 FFFFFFFF 00000002 00000001 FFFFFFFF 00000000 -8004F3C4 9C859C86 00000016 00000002 00000000 00000009 8004F3C8 -8004F3D8 9C879C88 00000018 00000002 00000000 0000000A 8004F3DC -8004F3E8 9C890000 0000001D 00000002 00000000 0000000B 8004F3EC -8004F3F8 9C8A0000 0000001E 00000002 00000000 0000000C 8004F3FC -8004F408 9C8B0000 00000019 00000002 00000000 0000000D 8004F40C -8004F418 9C8C0000 FFFFFFFF 00000003 00000001 FFFFFFFF 00000000 -8004F41C 9C8D0000 00000025 00000003 00000000 0000000E 8004F420 -8004F42C 9C8E9C8F 00000017 00000003 00000000 0000000F 8004F430 -8004F440 9C909C91 00000027 00000003 00000000 00000010 8004F444 -8004F450 9C929C93 00000029 00000003 00000000 00000011 8004F454 -8004F460 9C940000 FFFFFFFF 00000004 00000001 FFFFFFFF 00000000 -8004F464 9C959C96 0000001C 00000004 00000000 00000012 8004F468 -8004F474 9C970000 FFFFFFFF 00000004 00000001 FFFFFFFF 00000000 -8004F478 9C989C99 00000020 00000004 00000000 00000013 8004F47C -00000000 00000000 FFFFFFFF FFFFFFFF 00000000 FFFFFFFF 00000000 - -+_+ - - Briefing files (Ubrief*Z) are used by the solo menus to determine what text should appear on each screen of the briefing reviews. -Format of briefing files: 0x30 large -0x0 2 "Background" page text ID -0x2 2 "M Briefing" page text ID -0x4 2 "Q Branch" page text ID -0x6 2 "Moneypenny" page text ID -0x8 objective entries max of 10 (0xA) - 0x0 2 text ID - 0x2 2 lowest difficulty for objective - -+_+ - - Objective register set at start of stage by 7F001020. -LUI AT,3F80 -MTC1 AT,F0 -LUI AT,8003 -SW R0,0978 (AT) ;0->80030978: objective register -LUI AT,8003 -SWC1 F0,CE40 (AT) ;1.0 -> 8002CE40: AI accuracy modifier -LUI AT,8003 -SWC1 F0,CE44 (AT) ;1.0 -> 8002CE44: AI damage multiplier (value * AI's weapon damage) -LUI AT,8003 -SWC1 F0,CE48 (AT) ;1.0 -> 8002CE48: AI "health" multiplier - damage done by player per shot -LUI AT,8003 -SWC1 F0,CE4C (AT) ;1.0 -> 8002CE4C: -LUI AT,8003 -JR RA -SWC1 F0,CE50 (AT) ;1.0 -> 8002CE50: - -Also called at end of stage at 7F000EA0 using 7F000E40, called at 7F0BDDD8 using 7F0BDAB0. -So in other words, same scheme... Will need to omit the reset... -Note that it is not set by the intro movies, so no problem there. -Probably unlink from function and reset independantly in the game loop initializer (7F016064) and initializers for the briefing menu page (7F0155F4). - -7F01AB90 7F0155F4 init menu 0A -7F01ABA4 7F016064 init menu 0B (runtime) diff --git a/notes/GE Documentation/Main Menus/menu construction.txt b/notes/GE Documentation/Main Menus/menu construction.txt deleted file mode 100644 index 4387084..0000000 --- a/notes/GE Documentation/Main Menus/menu construction.txt +++ /dev/null @@ -1,168 +0,0 @@ -menu constructions 16cc6c -points start at offset 0D48! - -16d518 00 (0D48) -main folder backdrop (behind folders) - -16D5B8 01 (0DE8) -tabs on side of folders - -16D718 02 -folder 1 -(most menus) - -16D888 03 -folder #2 -(cheats, multi, briefings) - -16D948 04 -solo stage select (black stage borders, filmstrip, bottom of folder, etc) - -16E718 05 -? - rather large, actually... - -16F1E0 07 -FOR YOUR EYES ONLY - -16F300 08 -OHMSS - -16F3A0 09 -Briefing Confidential - -16F440 0A -multi confidential - -16F440 0B -classified - -16F580 0C -shadow under bond pic - -16F610 0D -Bond Photo - -16F730 0E -Beta Bond Photo 2 - -16F850 0F -Beta Bond Photo 3 - -16F970 10 -Beta Bond Photo 4 - -16FA88 11 -Photo Paper Clip - -16FAE8 12 -Dam Briefing Image - -16FC18 13 -Facility Briefing Image - -16FCB8 14 -Runway Briefing Image - -16FD38 15 -Surface Briefing Image - -16FDF8 16 -Bunker1 Briefing Image - -16FE98 17 -Silo Briefing Image - -16FF38 18 -Frigate Briefing Image - -16FFD8 19 -Surface2 Briefing Image - -170078 1A -Bunker2 Briefing Image - -170118 1B -Statue Briefing Image - -1701B8 1C -Archives Briefing Image - -170258 1D -Streets Briefing Image - -1702F8 1E -Depot Briefing Image - -170390 1F -Train Briefing Image - -170438 20 -Jungle Briefing Image - -1704D8 21 -Control Briefing Image - -170578 22 -Caverns Briefing Image - -170618 23 -Cradle Briefing Image - -1706B8 24 -Aztec Briefing Image - -170758 25 -Egypt Briefing Image - -1707F0 08 -Briefing paper clip - -170850 26 -4 Folders - folder, sheet, shadow, symbol - -170AD0 27 -4 Folder Bond Pic Shadow - -170B60 28 -4 Folder Bond Pic - -170C80 29 -4 Folder Beta Bond Pic 2 - -170DA0 2A -4 Folder Beta Bond Pic 3 - -170EC8 2B -4 Folder Beta Bond Pic 4 - -170FD8 10 -4 Folder Paper Clip - ------------------ -other pointer assemblies... -pointer assemblies follow simple order... -00120000 address_for_points table_home next_in_set prev_in_set pointer_to_00040000 -00040000 handle_for_point_table pointer_to_00120000 -pointed at by block preceeding -can use this to ID each handle to point table. - -16c7d0. pointers to 16ccB4+ - - 16cc84 (171030) Backdrop for folders 000A0000 8016D4F8 8016CC6C 00000000 00000000 8016CC9C -> 00040000 8016D598 8016CC84 8016CCB4 00000000 00000000 -16C7D0 16CCB4 (171140) tabs on side of folder 00120000 8016d5ac 8016cc84 8016cce4 8016cc9c 8016cccc -> 00040000 8016d6f8 8016ccb4 00000000 00000000 00000000 - 16cce4 folder 1 00120000 8016d70c 8016cc84 8016cd14 8016ccb4 8016ccfc -> 00040000 8016d868 8016cce4 00000000 00000000 00000000 - 16CDA4 For Your Eyes Only - 16CDD4 OHMSS - 16ce04 briefing confidential - 16ce34 multiplayer confidential - 16ce64 Classified - 16ce94 shadow under bond pic 00120000 8016F574 8016CC84 8016CF9C 8016CE64 8016CEAC -> 00040000 8016F5F0 8016CE94 8016CEAC 00000000 00000000 -16c7f0 16ceC4 Bond Photo 00120000 8016F604 8016CE94 8016CEF4 8016CEAC 8016CEDC -> 00040000 8016F710 8016CEC4 00000000 00000000 00000000 - 16cef4 Bond Photo 2 00120000 8016F724 8016CE94 8016CF24 8016CEC4 00000000 -> 00040000 8016F830 8016CEF4 00000000 00000000 00000000 - 16CF24 Bond Photo 3 00120000 8016F844 8016CE94 8016CF54 8016CEF4 00000000 -> (SHOUDL BE 8016CF3C) 00040000 8016F950 8016CF24 00000000 00000000 00000000 - 16CF54 Bond Photo 4 00120000 8016F964 8016CE94 8016CF84 8016CF24 00000000 -> 00040000 8016FA70 8016CF54 00000000 00000000 00000000 -PAPER CLIP! + 00040000 8016FAC8 8016CE94 00000000 8016CF54 - -16C7D0 to 16CCB4. pic 2 -16c7f0 to 16cec4. -16c870 to 16d32c \ No newline at end of file diff --git a/notes/GE Documentation/Main Menus/return positions.txt b/notes/GE Documentation/Main Menus/return positions.txt deleted file mode 100644 index 2634049..0000000 --- a/notes/GE Documentation/Main Menus/return positions.txt +++ /dev/null @@ -1,31 +0,0 @@ -Folder Select: -LL 42B4CA56 43474A17 -UL 431AB295 42FFAF42 -LR 438DA6B5 43474A17 -UR 43ADCD6A 42FFAF42 - -Main Page: -Solo 42FC0000 43620000 -Multi 42FC0000 43810000 -Cheats 42FC0000 43910000 - -Solo stage select: -row: -1 42920000 -2 430E0000 -3 43540000 -4 438D0000 -5 43B00000 - -column: -1 42780000 -2 43030000 -3 43490000 -4 43870000 - - -difficulty selection: -007 42D40000 438A0000 - -Briefing pages: -Next 43C78000 43100000 \ No newline at end of file diff --git a/notes/GE Documentation/Multiplayer/7F0888E8 - MP respawn.txt b/notes/GE Documentation/Multiplayer/7F0888E8 - MP respawn.txt deleted file mode 100644 index 7e3494c..0000000 --- a/notes/GE Documentation/Multiplayer/7F0888E8 - MP respawn.txt +++ /dev/null @@ -1,278 +0,0 @@ -7F0888E8 MP respawn -ADDIU SP,SP,FFA8 -LUI T7,8003 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -ADDIU T7,T7,688C ;T7=8003688C -LW AT,0000 (T7) -ADDIU T6,SP,004C -LW T0,0004 (T7) -SW AT,0000 (T6) -LW AT,0008 (T7) -LUI S0,8007 -SW T0,0004 (T6) -SW AT,0008 (T6) ;copy 8003688C-9C -> SP+4C-5C -JAL 7F0793EC ;initialize playerdata -LW S0,5D08 (S0) ;S0=80075D08: p->setup.intro -JAL 7F0798B8 -NOP -//7F088930: -LUI S1,8008 -ADDIU S1,S1,A0B0 ;S1=8007A0B0: p->cur.playerdata -LW T1,0000 (S1) ;T1=cur.playerdata -ADDIU T4,R0,0001 -ADDIU V0,R0,0007 -SW R0,00D8 (T1) ;0->BONDdata+D8: disable player button control -LW T2,0000 (S1) ;T2=cur.playerdata -ADDIU T7,R0,0002 -ADDIU A0,R0,FFFF -SW R0,0428 (T2) ;0->BONDdata+428: -LW T3,0000 (S1) -SW R0,0424 (T3) ;0->BONDdata+424: -LW T5,0000 (S1) -SW T4,0420 (T5) ;1->BONDdata+420: -LW T9,0000 (S1) -SW V0,29B8 (T9) ;7->BONDdata+29B8: -LW T8,0000 (S1) -SW V0,29D4 (T8) ;7->BONDdata+29D4: -LW T6,0000 (S1) -SW R0,1064 (T6) ;0->BONDdata+1064: -LW T0,0000 (S1) -JAL 7F08A380 -SW T7,1128 (T0) ;2->BONDdata+1128: -JAL 7F08A928 -ADDIU A0,R0,FFFF -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0002 -BNE AT,R0,7F0889C4 ;branch if solo -LUI T1,8008 -LW T1,9C28 (T1) ;T1=80079C28: -BLEZL T1,7F0889C8 -OR V1,R0,R0 -JAL 7F0790F0 -NOP -BEQ R0,R0,7F0889C8 -OR V1,V0,R0 -//7F0889C4: -OR V1,R0,R0 -//7F0889C8: -SLL T2,V1,0x2 -LUI V0,8008 -ADDU V0,V0,T2 -LW V0,9C2C (V0) ;V0=80079C2C: -LWC1 F4,0000 (V0) -SWC1 F4,004C (SP) -LWC1 F6,0008 (V0) -LW A1,004C (SP) -SWC1 F6,0054 (SP) -LW A0,0028 (V0) ;A0= +28: p->tile -LW A2,0054 (SP) -JAL 7F080D60 -SW A0,0044 (SP) -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F8,29BC (V0) ;F8=BONDdata+29BC -ADD.S F10,F8,F0 -SWC1 F10,0050 (SP) -SWC1 F0,0070 (V0) ;F0->BONDdata+70 -JAL 7000A450 ;V0=random -SWC1 F0,003C (SP) -MTC1 V0,F16 -LUI AT,8005 -LWC1 F12,5284 (AT) ;F12=80055284: -LWC1 F2,003C (SP) -BGEZ V0,7F088A40 -CVT.S.W F18,F16 ;F18=(float) random -LUI AT,4F80 -MTC1 AT,F4 -NOP -ADD.S F18,F18,F4 -//7F088A40: -LUI AT,2F80 -MTC1 AT,F6 -LUI AT,43B4 -MTC1 AT,F10 -MUL.S F8,F18,F6 -LW T3,0000 (S1) ;T3=cur.playerdata -LUI AT,8005 -ADDIU A1,SP,004C -MUL.S F0,F8,F12 -NOP -MUL.S F16,F0,F10 -SWC1 F0,0048 (SP) -DIV.S F4,F16,F12 -SWC1 F4,0148 (T3) ;F4->BONDdata+148: lateral rotation 1st -LW T4,0000 (S1) ;T4=cur.playerdata -SWC1 F2,0074 (T4) -LWC1 F18,5288 (AT) ;F18=80055288: -LW T5,0000 (S1) ;T5=cur.playerdata -DIV.S F6,F2,F18 -SWC1 F6,006C (T5) -LW A0,0000 (S1) ;A0=cur.playerdata -LW A2,0044 (SP) ;A2=SP+44: p->target tile -JAL 7F07C730 ;move player to location -ADDIU A0,A0,0488 ;A0=BONDdata+488: p->cur.tile, though really position block -//7F088AA0: -JAL 7F057EAC -LWC1 F12,0048 (SP) -LW T9,0000 (S1) ;T9=cur.playerdata -NEG.S F8,F0 -MTC1 R0,F10 -SWC1 F8,0498 (T9) ;F8->BONDdata+498 -LW T8,0000 (S1) ;T8=cur.playerdata -SWC1 F10,049C (T8) ;F10->BONDdata+49C -JAL 7F057EA0 -LWC1 F12,0048 (SP) -LW T6,0000 (S1) ;T6=cur.playerdata -LUI AT,8005 -LWC1 F12,528C (AT) ;F12=8005528C: 0.1 [3DCCCCD0] -SWC1 F0,04A0 (T6) ;F0->BONDdata+4A0 -LW T7,0000 (S1) ;T7=cur.playerdata -LWC1 F2,004C (SP) -SWC1 F2,0408 (T7) ;F2->BONDdata+408: xpos -LW T0,0000 (S1) ;T0=cur.playerdata -LW T1,00A8 (T0) ;T1=p->pos.data -SWC1 F2,0008 (T1) ;F2->pos.data.x -LW T2,0000 (S1) ;T2=cur.playerdata -LWC1 F2,0050 (SP) -SWC1 F2,040C (T2) ;F2->BONDdata+40C: ypos -LW T3,0000 (S1) ;T3=cur.playerdata -LW T4,00A8 (T3) ;T4=p->pos.data -SWC1 F2,000C (T4) ;F2->pos.data.y -LW T5,0000 (S1) ;T5=cur.playerdata -LWC1 F2,0054 (SP) -SWC1 F2,0410 (T5) ;F2->BONDdata+410: zpos -LW T9,0000 (S1) ;T9=cur.playerdata -LW T8,00A8 (T9) ;T8=p->pos.data -SWC1 F2,0010 (T8) ;F2->pos.data.z -LW T7,0000 (S1) ;T7=cur.playerdata -LW T6,0044 (SP) -LW T0,00A8 (T7) ;T0=p->pos.data -SW T6,0014 (T0) ;T6->pos.data.tile -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F16,04B4 (V0) ;F16=BONDdata+4B4: xpos -DIV.S F4,F16,F12 ;F4=xpos/10 -SWC1 F4,03B8 (V0) ;F4->BONDdata+3B8 -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F18,04B8 (V0) ;F18=BONDdata+4B8: ypos -DIV.S F6,F18,F12 ;F6=ypos/10 -SWC1 F6,03BC (V0) ;F6->BONDdata+3BC -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F8,04BC (V0) ;F8=BONDdata+4BC: zpos -DIV.S F10,F8,F12 ;F10=zpos/10 -JAL 7F08BFF0 ;reinitialize player inventory -SWC1 F10,03C0 (V0) ;F10->BONDdata+3C0 -//7F088B64: fry ammo totals -LW T1,0000 (S1) ;T1=cur.playerdata -ADDIU V0,R0,0008 -ADDIU V1,R0,0078 -SW R0,1130 (T1) ;0->BONDdata+1130: NULL ammo type 1 -LW T2,0000 (S1) ;T2=cur.playerdata -SW R0,1134 (T2) ;0->BONDdata+1134: NULL ammo type 2 -//7F088B7C: loop for remaining entries -LW T3,0000 (S1) ;T3=cur.playerdata -ADDU T4,T3,V0 ;T4=BONDdata+8 -SW R0,1130 (T4) ;0->BONDdata+1130+x: NULL next ammo type -LW T5,0000 (S1) ;T5=cur.playerdata -ADDU T9,T5,V0 -SW R0,1134 (T9) ;0->BONDdata+1134+x: NULL next ammo type -LW T8,0000 (S1) ;T8=cur.playerdata -ADDU T7,T8,V0 -SW R0,1138 (T7) ;0->BONDdata+1138+x: NULL next ammo type -LW T6,0000 (S1) ;T6=cur.playerdata -ADDU T0,T6,V0 -ADDIU V0,V0,0010 ;V0+=10 -BNE V0,V1,7F088B7C ;loop until 0x78 -SW R0,113C (T0) ;0->BONDdata+113C+x: NULL next ammo type -//7F088BB4: parse intro block -BEQL S0,R0,7F088C90 ;skip if no intro block -MTC1 R0,F0 -LW V0,0000 (S0) ;V0=intro.type -ADDIU AT,R0,0009 -BEQ V0,AT,7F088C8C ;quit if type 9 (EOL) -SLTIU AT,V0,0007 -//7F088BCC: loop for each type, looking for items and ammo -BEQ AT,R0,7F088C78 ;branch if type 7 or 8 -SLL T1,V0,0x2 ;T1=type->offset -LUI AT,8005 -ADDU AT,AT,T1 -LW T1,5290 (AT) ;T1=80055290+offset: handler for intro.type -JR T1 -NOP -//7F088BE8: intro type 0: spawn -BEQ R0,R0,7F088C7C -ADDIU S0,S0,000C ;S0+=C -//7F088BF0: intro type 1: weapon -JAL 7F0C0A20 ;V0=set# -NOP -LW T2,000C (S0) ;T2=cmd+C: set# -BNE V0,T2,7F088C28 ;branch if set mismatch -NOP -LW A1,0008 (S0) ;A1=cmd+8: left weapon -BLTZ A1,7F088C20 ;branch if single weapon -NOP -JAL 7F08C50C ;add doubles (A0+A1) to inventory -LW A0,0004 (S0) ;A0=cmd+4: right weapon -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0010 ;S0+=10 -//7F088C20: single weapon -JAL 7F08C488 ;add weapon A0 to inventory -LW A0,0004 (S0) ;A0=cmd+4: right weapon -//7F088C28: -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0010 ;S0+=10 -//7F088C30: intro type 2: ammo -JAL 7F0C0A20 ;V0=set# -NOP -LW T3,000C (S0) ;T3=cmd+C: set# -BNE V0,T3,7F088C50 ;branch if set mismatch -NOP -LW A0,0004 (S0) ;A0=cmd+4: type -JAL 7F069130 ;add ammo type A0, total A1 to inventory -LW A1,0008 (S0) ;A1=cmd+8: quantity -//7F088C50: -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0010 ;S0+=10 -//7F088C58: intro type 3: intro swirly -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0020 ;S0+=20 -//7F088C60: intro type 4: intro animation -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0008 ;S0+=8 -//7F088C68: intro type 5: hand/cuff -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0008 ;S0+=8 -//7F088C70: intro type 6: intro camera -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0028 ;S0+=28 -//7F088C78: type 7 (8 as well, but would bug on this! -ADDIU S0,S0,0004 ;S0+=4 -//7F088C7C: -LW V0,0000 (S0) ;V0=intro.type -ADDIU AT,R0,0009 -BNEL V0,AT,7F088BCC ;loop unless EOL type (9) -SLTIU AT,V0,0007 -//7F088C8C: BD7BC fade in - last thing you do... -MTC1 R0,F0 -LW T4,0000 (S1) ;T4=cur playerdata [S1=8007A0B0] -LUI AT,8005 -SWC1 F0,0078 (T4) ;BONDdata+0x78= 0.0 -LW T5,0000 (S1) ;T5=cur playerdata -LWC1 F16,52AC (AT) ;F16=800552AC: -0.0001 [B8D1B717] -LUI AT,42F0 -MTC1 AT,F12 ;F12= 120.0 [42F00000] timer (ms.) -SWC1 F16,007C (T5) ;BONDdata+0x7C= -0.0001 -LW T9,0000 (S1) ;T9=cur playerdata -LUI AT,3F80 -MTC1 AT,F14 ;F14= 1.0 [3F800000] final level 100% -JAL 7F080A10 ;set cur. player fade -SWC1 F0,0080 (T9) ;BONDdata+0x80= 0.0 -//7F088CC4: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0058 - -//7F088CD8: diff --git a/notes/GE Documentation/Multiplayer/7F0C3C94 - determine rank.txt b/notes/GE Documentation/Multiplayer/7F0C3C94 - determine rank.txt deleted file mode 100644 index 37b243a..0000000 --- a/notes/GE Documentation/Multiplayer/7F0C3C94 - determine rank.txt +++ /dev/null @@ -1,205 +0,0 @@ -7F0C3C94 F87C4 sprint rank of player A1 to A0 - accepts: A0=@string buffer, A1=player# (0-3) -ADDIU SP,SP,FF80 -SW RA,001C (SP) -SW S0,0018 (SP) -SW A0,0080 (SP) ;SP+80=A0: p->string -JAL 7F014758 ;V0=8002B540: scenario -SW A1,0084 (SP) ;SP+84=A1: player# -JAL 7F09A464 ;V0=# players -SW V0,007C (SP) ;SP+7C=V0: scenario -OR T3,V0,R0 ;T3=#players -BLEZ V0,7F0C3D08 ;branch if invalid #players -OR S0,R0,R0 ;S0=0 playercount -ADDIU V1,SP,0068 ;V1=SP+68: score list -ADDIU A1,SP,0058 ;A1=SP+58: player list -//7F0C3CC8: get each player's scores -OR A0,S0,R0 ;A0=S0: player A0 -SW V1,0038 (SP) ;SP+38=V1: table.scores -SW A1,003C (SP) ;SP+3C=A1: table.player -JAL 7F0C38D8 ;returns V0=score -SW T3,0078 (SP) ;SP+78=T3: #players -LW A1,003C (SP) ;A1=table.player -LW T3,0078 (SP) ;T3=#players -LW V1,0038 (SP) ;V1=table.scores -SW S0,0000 (A1) ;S0->table.player: cur.player# -ADDIU S0,S0,0001 ;S0++ test next player -SLT AT,S0,T3 ;TRUE if cur.player < total players -ADDIU A1,A1,0004 ;A1+=4 next entry -ADDIU V1,V1,0004 ;V1+=4 next entry -BNEZ AT,7F0C3CC8 ;loop for each player -SW V0,FFFC (V1) ;V0->table.scores save score for player -//7F0C3D04: -OR S0,R0,R0 ;S0=0 -BLEZ T3,7F0C3E08 ;branch if invalid #players -OR T2,R0,R0 ;T2=0 -ADDIU T4,T3,FFFF ;T4=#players-1 0-3, not 1-4 -ADDIU T0,SP,0058 ;T0=SP+58: table.player -LW A1,0068 (SP) ;A1=player1's score -LW A0,006C (SP) ;A0=player2's score -//7F0C3D20: -BLEZ T4,7F0C3DF4 ;branch if player 1 or invalid -ADDIU T2,T2,0001 ;T2++ -ADDIU V0,T3,FFFF ;V0=#players-1 0-3, not 1-4 -ANDI T6,V0,0001 ;T6=T3: #players -BEQ T6,R0,7F0C3D60 -SLT AT,A1,A0 ;TRUE if pl1.score < pl2.score -BEQ AT,R0,7F0C3D5C ;branch if pl1 outscored pl2 -ADDIU S0,R0,0001 ;S0=1 -//7F0C3D40: pl2 outscored pl1 -OR V0,A0,R0 ;V0=A0: pl2.score -OR A0,A1,R0 ;A0=A1: pl1.score -OR A1,V0,R0 ;A1=V0: pl2.score -LW V0,005C (SP) ;V0=SP+5C: pl2.player -LW T7,0058 (SP) ;T7=SP+5C: pl1.player -SW V0,0058 (SP) ;pl1.player swap -SW T7,005C (SP) ;pl2.player swap -//7F0C3D5C: -BEQ S0,T4,7F0C3DF0 ;branch if only 2 players -//7F0C3D60: -ADDIU T8,SP,0068 ;T8=table.scores -SLL A3,S0,0x2 ;A3=count*4 -SLL T9,T4,0x2 ;T9=#players*4 -ADDU T1,T9,T8 ;T1=p->final player's score -ADDU V1,A3,T8 ;V1=p->cur.player's score -SW A0,006C (SP) ;A0->pl2.score -SW A1,0068 (SP) ;A1->pl1.score -//7F0C3D7C: test next two scores -LW A2,0000 (V1) ;A2=pl.score -LW A0,0004 (V1) ;A0=pl+1.score -ADDU A1,T0,A3 ;A1=p->cur.player's player -SLT AT,A2,A0 ;TRUE if cur.score < next.score -BEQL AT,R0,7F0C3DB4 ;branch if cur.score higher -LW A2,0008 (V1) ;A2=3rd score -//7F0C3D94: cur.score < next.score -LW V0,0004 (A1) ;V0=next.player -LW T5,0000 (A1) ;T5=cur.player -SW A0,0000 (V1) ;cur.score = next.score -SW A2,0004 (V1) ;next.score = cur.score -OR A0,A2,R0 ;A0=A2: cur.score -SW V0,0000 (A1) ;cur.player = next.player -SW T5,0004 (A1) ;next.player = cur.player -LW A2,0008 (V1) ;A2=3rd score -//7F0C3DB4: check 3rd player -ADDU A1,T0,A3 ;A1=p->cur.player's player -SLT AT,A0,A2 ;TRUE if next.score < 3rd.score -BEQL AT,R0,7F0C3DE0 ;branch if next.score higher -ADDIU V1,V1,0008 -//7F0C3DC4: next.score < 3rd.score -LW V0,0008 (A1) ;V0=3rd.player -LW T6,0004 (A1) ;T6=2nd.player -SW A0,0008 (V1) ;2nd.score->3rd.score -SW A2,0004 (V1) ;3rd.score->2nd.score -SW V0,0004 (A1) ;3rd.player->2nd.player -SW T6,0008 (A1) ;2nd.player->3rd.player -//7F0C3DDC: -ADDIU V1,V1,0008 ;V1+=8 -LW A0,006C (SP) ;A0=pl2.score -LW A1,0068 (SP) ;A1=pl1.score -BNE V1,T1,7F0C3D7C ;loop for 4th player if present -ADDIU A3,A3,0008 ;A3+=8 -//7F0C3DF0: -OR S0,R0,R0 ;S0=0 -BNE T2,T3,7F0C3D20 ;loop if count < #players -NOP -SW A1,0068 (SP) ;A1->pl1.score -SW A0,006C (SP) ;A0->pl2.score -OR T2,R0,R0 ;T2=0 playercount -BLEZ T3,7F0C3E2C ;branch if valid #players -ADDIU A1,SP,0058 ;A1=SP+58: p->table.player -LW V0,0084 (SP) ;V0=player# -//7F0C3E14: match entry with player# -LW T7,0000 (A1) ;T7=entry.player -BEQ V0,T7,7F0C3E2C ;branch if entry matches player# -NOP -ADDIU S0,S0,0001 ;S0++ count++ -BNE S0,T3,7F0C3E14 ;loop to test all players -ADDIU A1,A1,0004 ;A1+=4 next entry -//7F0C3E2C: get cur.player's score -BLTZ S0,7F0C3E5C ;branch if invalid player# -SLL T9,S0,0x2 ;T9=entry*4 -ADDIU V0,SP,0068 ;V0=SP+68: table.score -ADDU T5,T9,V0 ;T5=table+offset: p->cur.score -LW A2,0000 (T5) ;A2=score for player# -//7F0C3E40: find nearest matching entry -LW T6,0000 (V0) ;T6=entry.score -ADDIU T7,S0,0001 ;T7=entry#+1 -BEQ T6,A2,7F0C3E5C ;branch if entry1.score matches cur.player's.score -NOP -ADDIU T2,T2,0001 ;T2++ playercount++ -BNE T7,T2,7F0C3E40 ;loop until cur.entry read -ADDIU V0,V0,0004 ;V0+=4 next entry -//7F0C3E5C: -BEQ T2,R0,7F0C3E88 ;branch if 1st place uncontested -ADDIU AT,R0,0001 -BEQ T2,AT,7F0C3EA4 ;branch if 2nd place -ADDIU AT,R0,0002 -BEQ T2,AT,7F0C3EC0 ;branch if 3rd place -LW V0,007C (SP) ;V0=SP+7C: scenario -ADDIU AT,R0,0003 -BEQ T2,AT,7F0C3F0C ;branch if 4th place -LW T9,007C (SP) -BEQ R0,R0,7F0C3F4C ;return if didn't rank for some reason... -LW RA,001C (SP) -//7F0C3E88: output 1st place -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A011 ;A0=A011: "Rank: 1st" -LW A0,0080 (SP) ;A0=SP+80: p->output -JAL 7000AC94 ;sprintf(A0,A1,...) -OR A1,V0,R0 ;A1=V0: p->source -BEQ R0,R0,7F0C3F4C -LW RA,001C (SP) -//7F0C3EA4: output 2nd place -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A012 ;A0=A012: "Rank: 2nd" -LW A0,0080 (SP) ;A0=SP+80: p->output -JAL 7000AC94 ;sprintf(A0,A1,...) -OR A1,V0,R0 ;A1=V0: p->source -BEQ R0,R0,7F0C3F4C -LW RA,001C (SP) -//7F0C3EC0: 3rd place: check scenario -ADDIU AT,R0,0005 -BEQ V0,AT,7F0C3EF0 ;branch if scenario 5: team 2vs2 -ADDIU AT,R0,0007 -BEQ V0,AT,7F0C3EF0 ;branch if scenario 7: team 2vs1 -NOP -//7F0C3ED4: output 3rd place -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A013 ;A0=A013: "Rank: 3rd" -LW A0,0080 (SP) ;A0=SP+80: p->output -JAL 7000AC94 ;sprintf(A0,A1,...) -OR A1,V0,R0 ;A1=V0: p->source -BEQ R0,R0,7F0C3F4C -LW RA,001C (SP) -//7F0C3EF0: 2 teams will always display 2nd place... -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A012 ;A0=A012: "Rank: 2nd" -LW A0,0080 (SP) ;A0=SP+80: p->output -JAL 7000AC94 ;sprintf(A0,A1,...) -OR A1,V0,R0 ;A1=V0: p->source -BEQ R0,R0,7F0C3F4C -LW RA,001C (SP) -//7F0C3F0C: 4th place: check scenario -ADDIU AT,R0,0006 -BEQ T9,AT,7F0C3F34 ;branch if scenario 6: team 3vs1 -NOP -//7F0C3F18: output 4th place -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A014 ;A0=A014: "Rank: 4th" -LW A0,0080 (SP) ;A0=SP+80: p->output -JAL 7000AC94 ;sprintf(A0,A1,...) -OR A1,V0,R0 ;A1=V0: p->source -BEQ R0,R0,7F0C3F4C -LW RA,001C (SP) -//7F0C3F34: 2 teams will always display 2nd place... -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A012 ;A0=A012: "Rank: 2nd" -LW A0,0080 (SP) ;A0=SP+80: p->output -JAL 7000AC94 ;sprintf(A0,A1,...) -OR A1,V0,R0 ;A1=V0: p->source -//7F0C3F48: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0080 -JR RA -NOP diff --git a/notes/GE Documentation/Multiplayer/7F0C6090 - Radar Display.txt b/notes/GE Documentation/Multiplayer/7F0C6090 - Radar Display.txt deleted file mode 100644 index 37dc3ff..0000000 --- a/notes/GE Documentation/Multiplayer/7F0C6090 - Radar Display.txt +++ /dev/null @@ -1,373 +0,0 @@ -7F0C6090 FABC0 display positions on MP radar - accepts: A0=p->display list -ADDIU SP,SP,FF78 -SW RA,006C (SP) -SW S7,0068 (SP) -SW S6,0064 (SP) -SW S5,0060 (SP) -SW S4,005C (SP) -SW S3,0058 (SP) -SW S2,0054 (SP) -SW S1,0050 (SP) -SW S0,004C (SP) -SDC1 F30,0040 (SP) -SDC1 F28,0038 (SP) -SDC1 F26,0030 (SP) -SDC1 F24,0028 (SP) -SDC1 F22,0020 (SP) -SDC1 F20,0018 (SP) -//7F0C60D0: -JAL 7F014758 ;V0=scenario -SW A0,0088 (SP) ;SP+88= DL -JAL 7F09B150 ;V0=8007A0B8: cur.player# -OR S4,V0,R0 ;S4=V0: scenario -JAL 7F09A464 ;V0=#players -SW V0,0070 (SP) ;SP+70= cur.player# -ADDIU AT,R0,0001 -BNE V0,AT,7F0C60FC ;branch if multiplayer -SW V0,0074 (SP) ;SP+74= #players -BEQ R0,R0,7F0C6588 ;return if solo -LW V0,0088 (SP) -//7F0C60FC: multiplayer -LUI S7,8008 -ADDIU S7,S7,A0B0 ;S7=8008A0B0: p->BONDdata -LW V0,0000 (S7) -LW T6,29C4 (V0) ;T6=BONDdata+29C4: -BNEZ T6,7F0C6120 ;return if set -NOP -LW T7,00D8 (V0) ;T7=SP+0x50 -BEQ T7,R0,7F0C6128 -NOP -//7F0C6120: return -BEQ R0,R0,7F0C6588 ;return -LW V0,0088 (SP) -//7F0C6128: test if no radar -JAL 7F0927BC ;V0= TRUE if cheat A0 activated for cur.player -ADDIU A0,R0,0017 ;A0=17: "No Radar (Multi)" cheat -BEQ V0,R0,7F0C6140 ;continue if radar present -NOP -BEQ R0,R0,7F0C6588 ;return -LW V0,0088 (SP) -//7F0C6140: -JAL 70004514 ;V0= [p@800232A8+20] -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000449C ;V0= [p@800232A8+1C] -OR S0,T8,R0 -ADDU S5,V0,S0 -JAL 70004524 ;V0= [p@800232A8+22] -ADDIU S5,S5,FFD7 ;S5-=0x29: x position -LW T9,0074 (SP) ;T9=#players -ADDIU S6,V0,001A ;S6=V0+1A: y position -ADDIU A0,SP,0088 -SLTI AT,T9,0003 ;TRUE if 2 player -BNEZ AT,7F0C6190 ;branch if 2 player -LUI A1,8009 -LW T1,0070 (SP) ;T1=SP+70: cur.player# -ANDI T2,T1,0001 ;T2= TRUE if player 2 or 4 (right side of screen) -BNEL T2,R0,7F0C6194 -ADDIU T3,R0,0002 -ADDIU S5,S5,000F ;S5+=F: x position -//7F0C6190: -ADDIU T3,R0,0002 -SW T3,0010 (SP) -LW A1,D12C (A1) ;A1=8008D12C: radar backdrop -ADDIU A2,R0,0002 -JAL 7F076D68 ;append image to p->DL A0 using image declaration A1 -OR A3,R0,R0 -JAL 7F0ACD98 ;microcode -LW A0,0088 (SP) -//7F0C61B0: set combiner -ADDIU T4,V0,0008 ;T4=V0+8: next DL op -SW T4,0088 (SP) ;SP+88= DL -LUI T5,FCFF -LUI T6,FF65 -ORI T6,T6,FEFF ;T6=FF65FEFF: -ORI T5,T5,B3FF ;T5=FCFFB3FF: -SW T5,0000 (V0) -SW T6,0004 (V0) -//7F0C61D0: set foreground colour -LW T7,0088 (SP) -LUI T9,FA00 -ADDIU T1,R0,00A0 ;T1=000000A0: fg colour [black] -ADDIU T8,T7,0008 ;T8=T7+8: next DL op -SW T8,0088 (SP) ;SP+88= DL -ADDIU T4,S5,0010 ;T4=S5+10: x position right offset -SW T1,0004 (T7) ;DL+4= rdp_setprimcolour (L) -SW T9,0000 (T7) ;DL+0= rdp_setprimcolour (U) -//7F0C61F0: set textured rectangle -LW A0,0088 (SP) -SLL T5,T4,0x2 ;T5=T4*4: upper left x -ANDI T6,T5,0FFF -ADDIU T9,S6,0010 ;T9=S6+10: y position upper offset -SLL T1,T9,0x2 ;T1=T9*4: upper left y -SLL T7,T6,0xC ;T7=ulx -LUI AT,E400 -OR T8,T7,AT ;T8=texrect | ulx -ANDI T2,T1,0FFF ;T2=uly -ADDIU T4,S5,FFF0 ;T4=S6-10: x position left offset -ADDIU T3,A0,0008 -SW T3,0088 (SP) ;SP+88= DL -SLL T5,T4,0x2 ;T5=T4*4: lower right x -ADDIU T9,S6,FFF0 ;T9=S6-10: y position lower offset -SLL T1,T9,0x2 ;T1=T9*4: lower right y -ANDI T6,T5,0FFF -OR T3,T8,T2 ;T3=texrect | ulx | uly -ANDI T8,T1,0FFF -SLL T7,T6,0xC ;T7=lrx -OR T2,T7,T8 ;T2=lrx | lry -SW T2,0004 (A0) ;DL+4: rdp_texrect (L) -SW T3,0000 (A0) ;DL+0: rdp_texrect (U) -//7F0C6248: second half of textured rectangle (mapping) -LW T3,0088 (SP) ;SP+88= DL -LUI T6,0010 -ORI T6,T6,0010 ;T6=00100010: upper left s | upper left t -ADDIU T4,T3,0008 -SW T4,0088 (SP) ;SP+88= DL -LUI T5,B400 -SW T5,0000 (T3) ;DL+0: rsp_uc05_rdphalf_1 (U) -SW T6,0004 (T3) ;DL+4: rdp_texrect_2 (U) -//7F0C6268: -LW T9,0088 (SP) ;SP+88= DL -LUI T8,0400 -ORI T8,T8,0400 ;T8=04000400: delta-s delta-x | delta-t delta-y -ADDIU T1,T9,0008 -SW T1,0088 (SP) ;SP+88= DL -LUI T7,B300 -SW T7,0000 (T9) ;DL+0: rsp_uc05_rdphalf_2 (U) -SW T8,0004 (T9) ;DL+4: rdp_texrect_2 (L) -//7F0C6288: first player blip background -ADDIU T3,R0,0040 ;T3=00000040: colour [1/4 black] -ADDIU T2,S6,0002 ;T2=y position + 2: lry -SW T2,0010 (SP) ;SP+10= lry -SW T3,0014 (SP) ;SP+14= rgba -LW A0,0088 (SP) ;A0=SP+88: DL -ADDIU A1,S5,FFFE ;A1=x position - 2: ulx -ADDIU A2,S6,FFFE ;A2=y position - 2: uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,S5,0002 ;A3=x position + 2: lrx -//7F0C62AC: determine scenario -ADDIU AT,R0,0005 -BEQ S4,AT,7F0C62DC ;branch if team 2vs2 -SW V0,0088 (SP) -ADDIU AT,R0,0006 -BEQ S4,AT,7F0C62DC ;branch if team 3vs1 -ADDIU AT,R0,0007 -BEQ S4,AT,7F0C62DC ;branch if team 2vs1 -ADDIU AT,R0,0002 -BEQ S4,AT,7F0C62DC ;branch if flag tag -ADDIU AT,R0,0003 -BNE S4,AT,7F0C6338 ;branch if not MwtGX -LW A0,0088 (SP) -//7F0C62DC: team/coloured squares -LW T4,0070 (SP) ;T4=SP+70: cur.player# -LUI T6,8008 -LW A0,0088 (SP) -SLL T5,T4,0x3 -SUBU T5,T5,T4 -SLL T5,T5,0x4 -ADDU T6,T6,T5 -LBU T6,9F59 (T6) ;T6=stats::scenario flags -ADDIU A1,S5,FFFF ;A1=x position - 1: ulx -ADDIU A2,S6,FFFF ;A2=y position - 1: uly -BNEZ T6,7F0C6318 ;branch if team 2 (blue) -ADDIU A3,S5,0001 ;A3=x position + 1: lrx -//7F0C630C: team 1 (red) -LUI V0,FF77 -BEQ R0,R0,7F0C6320 -ORI V0,V0,77FF -//7F0C6318: team 2 (blue) -LUI V0,8888 -ORI V0,V0,FFFF -//7F0C6320: -ADDIU T9,S6,0001 ;T9=y position + 1: lry -SW T9,0010 (SP) ;SP+10= lry -JAL 7F0AD014 ;draw coloured box -SW V0,0014 (SP) ;SP+14= rgba -BEQ R0,R0,7F0C635C -SW V0,0088 (SP) ;SP+88= DL -//7F0C6338: default coloured boxes -ADDIU T1,S6,0001 ;T1=y position + 1: lry -ADDIU T7,R0,FFA0 ;T7=FFFFFFA0: colour [white] -SW T7,0014 (SP) ;SP+14= rgba -SW T1,0010 (SP) ;SP+10= lry -ADDIU A1,S5,FFFF ;A1=x position - 1: ulx -ADDIU A2,S6,FFFF ;A2=y position - 1: uly -JAL 7F0AD014 ;draw coloured box -ADDIU A3,S5,0001 ;A3=x position + 1: lrx -SW V0,0088 (SP) ;SP+88= DL -//7F0C635C: set up loop to display other player blips -LW T8,0074 (SP) ;T8=#players -OR S3,R0,R0 ;S3=0 count=0 -LUI AT,4334 -BLEZ T8,7F0C6580 ;quit if invalid -NOP -MTC1 AT,F30 ;F30=180.0 [43340000] -NOP -//7F0C6378: draw squares for other players -LW T2,0070 (SP) ;T2=SP+70: cur.player# -SLL T3,S3,0x2 -LUI A0,8008 -BEQ S3,T2,7F0C6570 ;loop if current player (already drew the central dot) -ADDU A0,A0,T3 -LW A0,9EE0 (A0) ;A0=80079EE0+offset: player S3's p->BONDdata -LW T4,00D8 (A0) ;T4=player button control -BNEL T4,R0,7F0C6574 ;try next if not disabled (dead) -LW T8,0074 (SP) -LW T5,0000 (S7) ;T5=p->org.BONDdata -LW V0,00A8 (A0) ;V0=S3's p->positiondata -LUI AT,4180 -LW V1,00A8 (T5) ;V1=org p->positiondata -LWC1 F28,0008 (V0) ;F28=cur.xpos -LWC1 F18,0010 (V0) ;F18=cur.zpos -LWC1 F16,0008 (V1) ;F18=org.xpos -LWC1 F10,0010 (V1) ;F10=org.zpos -MTC1 AT,F8 ;F8=16.0 [41800000] -SUB.S F20,F28,F16 ;F20=difference in xpos -LUI AT,457A -MTC1 AT,F16 ;F16=4000.0 [457A0000] -SUB.S F22,F18,F10 ;F22=difference in ypos -ADDIU T6,R0,0010 -MTC1 T6,F10 -DIV.S F26,F8,F16 ;F26=16.0 / 4000.0 = 0.004 -MOV.S F12,F20 ;F12=xdif -MOV.S F14,F22 ;F14=ydif -JAL 7F05AA30 ;F0=lateral rotation -CVT.S.W F24,F10 ;F24=(float) 16.0 -//7F0C63EC: determine vector (direction + distance) -MUL.S F6,F0,F30 ;F6=rotation * 180.0 -LUI AT,8006 -LWC1 F8,BD20 (AT) ;F8=8005BD20: Pi -MUL.S F4,F20,F20 ;F4=xdif^2 -LW T9,0000 (S7) ;T9=org.BONDdata -LWC1 F16,0148 (T9) ;F16=org.lateral rotation -DIV.S F10,F6,F8 ;F10=rotation * 180.0/Pi that's either into or out of radians -MUL.S F6,F22,F22 ;F6=ydif^2 -ADD.S F12,F4,F6 ;F12=xdif^2 + ydif^2 -ADD.S F18,F10,F16 ;F18=org.rotation + cur.rotation -JAL 7001F7E0 ;F0=sqrt(F12) distance -ADD.S F28,F18,F30 ;F28=org.rotation + cur.rotation + 180.0 -//7F0C641C: determine scenario -MUL.S F2,F0,F26 ;F2=distance * 0.004 -ADDIU AT,R0,0005 -SLL T1,S3,0x3 -SUBU T1,T1,S3 -BEQ S4,AT,7F0C6458 ;branch if scenario team 2vs2 -MOV.S F22,F2 ;F22=distance * 0.004 -ADDIU AT,R0,0006 -BEQ S4,AT,7F0C6458 ;branch if scenario team 3vs1 -ADDIU AT,R0,0007 -BEQ S4,AT,7F0C6458 ;branch if scenario team 2vs1 -ADDIU AT,R0,0002 -BEQ S4,AT,7F0C6458 ;branch if scenario Flag Tag -ADDIU AT,R0,0003 -BNEL S4,AT,7F0C64C0 ;branch if not scenario MwtGX -C.LT.S F2,F24 -//7F0C6458: colourized radar boxes -C.LT.S F2,F24 -LUI T7,8008 -ADDIU T7,T7,9EF0 -SLL T1,T1,0x4 -BC1F 7F0C6494 ;branch if 0.004*distance >= 16.0 -ADDU V0,T1,T7 ;V0=80079EF0+offset: p->cur.stats -LBU T8,0069 (V0) ;T8=cur.stats::scenario flags -LUI S1,2828 -BNEZ T8,7F0C648C ;branch if team 2 -NOP -//7F0C6480: team 1 (red) -LUI S1,FF00 -BEQ R0,R0,7F0C64E0 -ORI S1,S1,00A0 ;S1=FF0000A0: colour [red] -//7F0C648C: team 2 (blue) -BEQ R0,R0,7F0C64E0 -ORI S1,S1,FFFF ;S1=2828FFFF: colour [blue] -//7F0C6494: -LBU T2,0069 (V0) ;T2=cur.stats::scenario flags -MOV.S F22,F24 ;F22=F24: set to 16.0 - edge of radar -LUI S1,2828 -BNEZ T2,7F0C64B4 ;branch if team 2 -NOP -//7F0C64A8: team 1 (red) -LUI S1,FF00 -BEQ R0,R0,7F0C64E0 -ORI S1,S1,0060 ;S1=FF000060: colour [red] -//7F0C64B4: team 2 (blue) -BEQ R0,R0,7F0C64E0 -ORI S1,S1,FFB0 ;S1=2828FFB0: colour [blue] -//7F0C64BC: normal game modes -C.LT.S F2,F24 -LUI S1,FFFF -ORI S1,S1,0060 ;S1=FFFF0060: colour [yellow] -BC1FL 7F0C64E0 ;branch if 0.004*distance >= 16.0 -MOV.S F22,F24 -LUI S1,FFFF -BEQ R0,R0,7F0C64E0 -ORI S1,S1,00A0 ;S1=FFFF00A0: colour [yellow] -//7F0C64DC: -MOV.S F22,F24 -//7F0C64E0: -LUI AT,8006 -LWC1 F8,BD24 (AT) ;F8=8005BD24: 0.017453 Pi/180 -MUL.S F20,F28,F8 ;rotation * radian conversion -JAL 7F057EAC -MOV.S F12,F20 ;F12=F20: rotation -MUL.S F10,F0,F22 -MOV.S F12,F20 -TRUNC.W.S F16,F10 -MFC1 T4,F16 -JAL 7F057EA0 -ADDU S0,T4,S5 -//7F0C650C: draw black base box on radar -MUL.S F18,F0,F22 -ADDIU T1,R0,0040 ;T1=00000040: colour [1/4 black] -SW T1,0014 (SP) ;SP+14= rgba -LW A0,0088 (SP) ;A0=SP+88: DL -ADDIU A1,S0,FFFE -ADDIU A3,S0,0002 -TRUNC.W.S F4,F18 -MFC1 T6,F4 -NOP -ADDU V0,T6,S6 -ADDIU T9,V0,0002 -OR S2,V0,R0 -SW T9,0010 (SP) -JAL 7F0AD014 ;draw coloured box -ADDIU A2,V0,FFFE -//7F0C6548: draw inner box on top of it -ADDIU T7,S2,0001 -SW V0,0088 (SP) -SW T7,0010 (SP) -OR A0,V0,R0 -ADDIU A1,S0,FFFF -ADDIU A2,S2,FFFF -ADDIU A3,S0,0001 -JAL 7F0AD014 ;draw coloured box -SW S1,0014 (SP) ;SP+14=rgba -SW V0,0088 (SP) -//7F0C6570: loop for each player -LW T8,0074 (SP) ;T8=#players -ADDIU S3,S3,0001 ;S3++ count++ -BNEL S3,T8,7F0C637C ;loop for all players -LW T2,0070 (SP) -//7F0C6580: reset combiner -JAL 7F0ACEF0 ;set combiner: bayer, lod, perspective -LW A0,0088 (SP) ;A0=SP+88: DL -//7F0C6588: return -LW RA,006C (SP) -LDC1 F20,0018 (SP) -LDC1 F22,0020 (SP) -LDC1 F24,0028 (SP) -LDC1 F26,0030 (SP) -LDC1 F28,0038 (SP) -LDC1 F30,0040 (SP) -LW S0,004C (SP) -LW S1,0050 (SP) -LW S2,0054 (SP) -LW S3,0058 (SP) -LW S4,005C (SP) -LW S5,0060 (SP) -LW S6,0064 (SP) -LW S7,0068 (SP) -JR RA -ADDIU SP,SP,0088 diff --git a/notes/GE Documentation/Multiplayer/Player death animations.txt b/notes/GE Documentation/Multiplayer/Player death animations.txt deleted file mode 100644 index d0b2ed4..0000000 --- a/notes/GE Documentation/Multiplayer/Player death animations.txt +++ /dev/null @@ -1,112 +0,0 @@ -800364D8 0x15748 12 longs, probably offsets - -most likely death animations - -//7F006160: determine number of entries, save to 8003650C -LUI A0,8003 -ADDIU A0,A0,64D8 -SLL T0,R0,0x2 -ADDU T1,A0,T0 -LW T3,0000 (T1) T3=800364D8: 000030B8, first of values -LUI V1,8003 -ADDIU V1,V1,650C -SW R0,0000 (V1) 0->8003650C: counter of values -BEQ T3,R0,7F0061A8 -OR V0,R0,R0 V0=counter -ADDIU T4,V0,0001 -//7F00618C: -SLL T2,T4,0x2 -ADDU T9,A0,T2 -LW T5,0000 (T9) retrieve value -SW T4,0000 (V1) save running total -OR V0,T4,R0 -BNEL T5,R0,7F00618C keep indexing -ADDIU T4,V0,0001 -//7F0061A8: - - -Used here when blowing a player up in multiplayer. Recalls a random entry -7F080B34: recall and use player death animation, or something like that -... -//7F080BC4: -JAL 7000A450 ret. V0=rand -SW V0,0044 (SP) -LUI T9,8003 -LW T9,650C (T9) #entries -LW T8,0044 (SP) -LUI T2,8003 -LUI T3,8007 -DIVU T8,T9 -MFHI T0 -SLL T1,T0,0x2 T0=random entry in range -ADDU T2,T2,T1 -LW T2,64D8 (T2) load the animation offset -LW T3,9538 (T3) T3=80069538: p->animation binaries -MFC1 A2,F20 -BNEZ T9,7F080C08 -NOP -BREAK -ANDI A1,V0,0001 -LUI A3,3F80 -JAL 7F08EA48 -ADDU A0,T2,T3 final animation value - -//7F08B3AC: -LUI A3,8003 -LW A3,650C (A3) A3=#ani -OR A1,R0,R0 -OR S0,R0,R0 -BLEZ A3,7F08B400 skip if stupid -LUI T9,8003 -ADDIU V0,T9,64D8 V0=800364D8: base for ani table -LUI V1,8007 -SLL T1,A3,0x2 T1=entry -> offset -ADDU A0,T1,V0 A0=entry -LW V1,9538 (V1) -LW A2,1284 (T0) A2=player's cur animation; T0=playerdata -LW T2,0000 (V0) -//7F08B3E0: -ADDIU V0,V0,0004 span the list, looking for a hit -SLTU AT,V0,A0 -ADDU T3,T2,V1 -BNE A2,T3,7F08B3F8 -NOP -ADDIU A1,R0,0001 -//7F08B3F8: -BNEL AT,R0,7F08B3E0 -LW T2,0000 (V0) -//7F08B400: -BEQ A1,R0,7F08B418 -LUI AT,3F00 -LW A2,1284 (T0) -MTC1 AT,F12 -BEQ R0,R0,7F08B470 -SW A2,009C (SP) -//7F08B418: -JAL 7000A450 -SWC1 F2,0094 (SP) -LUI T4,8003 -LW T4,650C (T4) -LUI T7,8003 -LUI T8,8007 -DIVU V0,T4 -MFHI T5 -SLL T6,T5,0x2 -ADDU T7,T7,T6 -LW T7,64D8 (T7) -LW T8,9538 (T8) -LW T0,0000 (S1) -LUI AT,3F00 -ADDU T1,T7,T8 -SW T1,009C (SP) -MTC1 AT,F12 -LWC1 F2,0094 (SP) -BNEZ T4,7F08B46C -NOP -BREAK -LW A2,1284 (T0) -MTC1 R0,F14 -NOP -SWC1 F14,008C (SP) -BEQ R0,R0,7F08B858 -SWC1 F14,0088 (SP) diff --git a/notes/GE Documentation/Multiplayer/Radar Blips - 7F0AD014.txt b/notes/GE Documentation/Multiplayer/Radar Blips - 7F0AD014.txt deleted file mode 100644 index 15c9a68..0000000 --- a/notes/GE Documentation/Multiplayer/Radar Blips - 7F0AD014.txt +++ /dev/null @@ -1,59 +0,0 @@ -7F0AD014: E1B44 inserts square blips on radar - accepts: A0=p->display list, A1=ul x, A2=ul y, A3=lr x, SP+10=lr y, SP+14=RGBA value for square -OR V0,A0,R0 -LUI T6,B900 -LUI T7,0050 -ORI T7,T7,4240 ;T7=00504240: image read, converge delta-ST full, depthmode-force blender, blend colour in+blender -ORI T6,T6,031D ;T6=B900031D: shift 3 bits, 1D data bits -SW T6,0000 (V0) ;DL+0=rsp_uc05_setothermode_l (U) -SW T7,0004 (V0) ;DL+4=rsp_uc05_setothermode_l (L) -LUI T8,FCFF -LUI T9,FFFD -ADDIU A0,A0,0008 -ORI T9,T9,F6FB ;T9=FFFDF6FB: b0=K5, b1=K5, Aa1=0, Ac1=0, d0=primitive, Ab0=0, Ad0=primitive, d1=primitive, Ab1=0. Ad1=primitive -ORI T8,T8,FFFF ;T8=FCFFFFFF: a0=K5, c0=0, Aa0=0, Ac0=0, a1=K5, c1=K5 -SW T8,0000 (A0) ;DL+0=rdp_setcombine (U) -SW T9,0004 (A0) ;DL+4=rdp_setcombine (L) -ADDIU T0,A0,0008 -LUI T2,FA00 -SW T2,0000 (T0) ;FA000000->DL (upper): set primary colour -LW T3,0014 (SP) ;T3=RGBA value -LUI AT,F600 -ADDIU T1,T0,0008 ;it should be noted -SRL T9,T3,0x10 ;that this whole mess -ANDI T2,T9,00FF ;is dedicated to stripping -SLL T4,T2,0x10 ;the R, G, B, and A values -SRL T6,T3,0x18 ;from T3 -SLL T7,T6,0x18 ;then recombining them -SRL T8,T3,0x8 ;back into an RGBA value -ANDI T9,T8,00FF -OR T5,T7,T4 -SLL T2,T9,0x8 -OR T4,T3,R0 -ANDI T6,T4,00FF -OR T7,T5,T2 -OR T8,T7,T6 -SW T8,0004 (T0) ;RGBA value->DL (lower): set primary colour -LW T3,0010 (SP) ;T3=SP+10: lower right y value for blip -ANDI T9,A3,03FF ;T9=A3 & 0x3FF: lower right x -SLL T5,T9,0xE -OR T2,T5,AT ;T2=F6000000 | lrx -ANDI T4,T3,03FF -SLL T7,T4,0x2 -OR T6,T2,T7 ;T6=F6000000 | lrx | lry -ANDI T5,A2,03FF ;T5=A2 & 0x3FF: upper left y -ANDI T8,A1,03FF ;T8=A2 & 0x3FF: upper left x -SLL T9,T8,0xE -SLL T3,T5,0x2 -OR T4,T9,T3 ;T4=ulx | uly -ADDIU V1,T1,0008 -LUI T7,FF2D -LUI T2,FCFF -SW T4,0004 (T1) ;xxxxxxxx->DL (lower): set fill rectangle -SW T6,0000 (T1) ;F6xxxxxx->DL (upper): set fill rectangle -ORI T2,T2,97FF ;T2=FCFF97FF -ORI T7,T7,FEFF ;T7=FF2DFEFF -SW T7,0004 (V1) ;FF2DFEFF->DL (lower): set combine - b0=F, b1=F, Aa1=1, Ac1=3, d0=1F, Ab0=7, Ad0=7, d1=3, Ab1=7, Ad1=7 -SW T2,0000 (V1) ;FCFF97FF->DL (upper): set combine - a0=F, c0=1F, Aa0=1, Ac0=3, a1=F, c1=1F -JR RA -ADDIU V0,V1,0008 diff --git a/notes/GE Documentation/Multiplayer/death fadeout and respawn.txt b/notes/GE Documentation/Multiplayer/death fadeout and respawn.txt deleted file mode 100644 index 550a35c..0000000 --- a/notes/GE Documentation/Multiplayer/death fadeout and respawn.txt +++ /dev/null @@ -1,150 +0,0 @@ -7F080A10: B5540 Executes player fades - F12=time, in ms (usually 300) - F14=target opactity (1.0=100%) - - - -//7F089584: BE0B4 CALL FADEOUT -JAL 7F080A10 ;set cur. player fade -NOP -//7F08958C: RETURN FROM FADEOUT CALL -JAL 7F08088C ;V0=TRUE if done with fade - LUI T6,8008 - LW T6,A0B0 (T6) ;T6=p->BONDdata - MTC1 R0,F6 - OR V0,R0,R0 ;V0=0 - LWC1 F4,03E4 (T6) ;F4=BONDdata+0x3E4: - C.LT.S F4,F6 - NOP - BC1F 7F0808B4 ;branch if value >= 0 - NOP - ADDIU V0,R0,0001 ;V0=1 - //7F0808B4: - JR RA - NOP -NOP -BEQ V0,R0,7F089658 -NOP -JAL 7F09A464 ;V0=# players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F0895C0 ;branch if multiplayer -NOP -JAL 7F07A9B8 ;use intro camera mode A0 -ADDIU A0,R0,0005 -BEQ R0,R0,7F089658 -NOP -//7F0895C0: BE0F0 multiplayer -JAL 7F014758 ;V0=8002B540: scenario -NOP -JAL 7F09B150 ;V0=8007A0B8: cur.player# -SW V0,0040 (SP) ;SP+40= scenario -JAL 7F09A464 ;V0=# players -SW V0,003C (SP) ;SP+3C= cur.player# -OR A1,V0,R0 ;A1=V0: #players -OR A0,R0,R0 -BLEZ V0,7F089614 ;branch if invalid #players -OR V1,R0,R0 ;V1=0 -LW T0,003C (SP) ;T0= player killed -LUI T2,8008 -ADDIU T2,T2,9EF0 ;T2=80079EF0 -SLL T1,T0,0x2 ;T1= player->offset: offset to #playerkills, to compute total deaths -ADDU V0,T1,T2 ;V0=80079EF0+offset: base for player data, offset for player kills to pull -//7F0895FC: grab #deaths for You Only Live Twice -LW T3,0024 (V0) ;T3=#times player killed this guy -ADDIU V1,V1,0001 ;V1++ playercount -SLT AT,V1,A1 ;TRUE if count < total -ADDIU V0,V0,0070 ;V0+=0x70: next player's stats -BNEZ AT,7F0895FC ;loop until all losses computed -ADDU A0,A0,T3 ;A0+=T3: running total of losses -//YOLT -LW T4,0040 (SP) ;T4=scenario -ADDIU AT,R0,0001 -BNE T4,AT,7F08962C ;branch if not "You Only Live Twice" -SLTI AT,A0,0002 ;TRUE if died less than twice -BEQ AT,R0,7F089658 ;skip if you're out! -NOP -//7F08962C: Test if player pressing button to respawn -JAL 7F09B150 ;V0=8007A0B8: cur.player# -NOP -SLL A0,V0,0x18 -SRA T5,A0,0x18 -OR A0,T5,R0 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,B000 ;A1= A, Z, Start buttons -BEQ V0,R0,7F089658 ;branch if not pressed -NOP -JAL 7F0888E8 -NOP -//7F089658: -JAL 7F08A4E4 -NOP -JAL 7F08A5FC -LW A0,0058 (SP) -JAL 7F08A9F8 -SW V0,0058 (SP) -JAL 7F08AAE8 -LW A0,0058 (SP) -SW V0,0058 (SP) -JAL 7F06A5E4 -ADDIU A0,SP,0058 -JAL 7F069CF4 -LW A0,0058 (SP) -SW V0,0058 (SP) -JAL 7F056210 -OR A0,V0,R0 -SW V0,0058 (SP) -JAL 7F0C6090 ;Display red/blue positions on radar; uses scenario flags for TLD, MwtGX, and all the teams -OR A0,V0,R0 -SW V0,0058 (SP) -JAL 7F0804E0 -OR A0,V0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0058 -JR RA -NOP - - -+-+-+-+ - -upon respawn, triggers a fade-in -(throw a test on this to unstupid MP invisibility) - -called by 7F088CBC -anyone's guess how to tack in an invisibility test... -//7F088C8C: BD7BC fade in - last thing you do... V0 not important -MTC1 R0,F0 ;F0=0.0 -LW T4,0000 (S1) ;T4=cur playerdata [S1=8007A0B0] -LUI AT,8005 -SWC1 F0,0078 (T4) ;BONDdata+0x78= 0.0 -LW T5,0000 (S1) -LWC1 F16,52AC (AT) ;F16=800552AC: -0.0001 [B8D1B717] -LUI AT,42F0 -MTC1 AT,F12 ;F12= 120.0 [42F00000] timer (ms.) -SWC1 F16,007C (T5) ;BONDdata+0x7C= -0.0001 -LW T9,0000 (S1) -LUI AT,3F80 -MTC1 AT,F14 ;F14= 1.0 [3F800000] final level 100% -JAL 7F080A10 ;set cur. player fade -SWC1 F0,0080 (T9) ;BONDdata+0x80= 0.0 -//7F088CC4: return... - - -efficient this up a bit... -!REVISED! -//7F088C8C: fade in - last thing you do... V0 not important - *NOP - LW T4,0000 (S1) - LUI AT,8005 - *SW R0,0078 (T4) - *NOP - LWC1 F16,52AC (AT) - LUI AT,42F0 - MTC1 AT,F12 - SWC1 F16,007C (T4) - *NOP - LUI AT,3F80 - MTC1 AT,F14 - JAL 7F080A10 - *SW R0,0080 (T4) ;assume no need for F0=0 -//7F088CC4: return... diff --git a/notes/GE Documentation/Multiplayer/object respawn.txt b/notes/GE Documentation/Multiplayer/object respawn.txt deleted file mode 100644 index 70a6088..0000000 --- a/notes/GE Documentation/Multiplayer/object respawn.txt +++ /dev/null @@ -1,43 +0,0 @@ -object respawn flag is obj+2, bit 04 - -7F001D9C: prepares object for play -... -//7F001E14: multiplayer-only object expansion code - sets respawn -JAL 7F09A464 -SWC1 F4,0074 (S1) -SLTI AT,V0,0002 -BNEZ AT,7F001E90 ;branch if solo -ADDIU V1,R0,0001 -//7F001E28: object generator - scenario-specific to FlagTag -JAL 7F014758 ;ret V0=scenario -SW V1,0074 (SP) -ADDIU AT,R0,0002 -BNE V0,AT,7F001E54 ;branch if not flag tag -LW V1,0074 (SP) -//7F001E3C: test if object is a flag -LH T8,0004 (S1) ;T8=model (S1=p->obj.data) -ADDIU AT,R0,014D -BNE T8,AT,7F001E54 ;branch if not using flag model (14D) -NOP -BEQ R0,R0,7F001E7C ;V1=0: inhibit respawn -OR V1,R0,R0 -//7F001E54: object generator - scenario-specific to MwtGG -JAL 7F014758 ;ret V0=scenario -SW V1,0074 (SP) -ADDIU AT,R0,0003 -BNE V0,AT,7F001E7C ;branch if not MwtGG -LW V1,0074 (SP) -//7F001E68: test if GG -LH T9,0004 (S1) ;T9=model (S1=p->obj.data) -ADDIU AT,R0,00D0 -BNE T9,AT,7F001E7C ;branch if not using GG model (0D0) -NOP -OR V1,R0,R0 ;V1=0: inhibit respawn -//7F001E7C: if not scenario item, set respawn flag -BEQL V1,R0,7F001E94 ;branch if scenario item -LW V1,0008 (S1) -LBU T0,0002 (S1) ;T0=obj.data+2: -ORI T1,T0,0004 -SB T1,0002 (S1) ;obj.data+2 |= 0x04: respawn flag! -//7F001E90: -... ;etc diff --git a/notes/GE Documentation/Multiplayer/scenarios/Scenario menu defaults.txt b/notes/GE Documentation/Multiplayer/scenarios/Scenario menu defaults.txt deleted file mode 100644 index 4ca8add..0000000 --- a/notes/GE Documentation/Multiplayer/scenarios/Scenario menu defaults.txt +++ /dev/null @@ -1,111 +0,0 @@ -7F010468: 44F98 set default MP menu settings for scenario A0 -LUI V1,8003 -ADDIU V1,V1,B540 ;V1=8002B540: selected scenario -ADDIU V0,R0,0001 -SW A0,0000 (V1) ;A0->8002B540: save scenario -LUI AT,8003 -SW V0,B544 (AT) ;1->8002B544: unlock stage select -LUI AT,8003 -SW V0,B548 (AT) ;1->8002B548: unlock game length -LUI AT,8003 -SW V0,B54C (AT) ;1->8002B54C: unlock characters -LUI AT,8003 -SW V0,B550 (AT) ;1->8002B550: unlock weapon select -LUI AT,8003 -SW V0,B554 (AT) ;1->8002B554: unlock health -LUI AT,8003 -SW V0,B558 (AT) ;1->8002B558: unlock control style -LUI AT,8003 -SW V0,B55C (AT) ;1->8002B55C: unlock aim adjustment -LW T6,0000 (V1) ;T6=scenario -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SLTIU AT,T6,0008 -BEQ AT,R0,7F0105F8 ;only scenarios 0-7 are valid -SLL T6,T6,0x2 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,1A60 (AT) ;T6=80051A60+offset: j->scenario handler -JR T6 -NOP -//7F0104DC: set normal and team scenario specific settings -LUI V0,8003 -ADDIU V0,V0,B538 -LW T7,0000 (V0) -SLTI AT,T7,0007 -BNEZ AT,7F0104F8 -ADDIU T8,R0,0002 -SW T8,0000 (V0) -JAL 7F0C663C -NOP -SLTI AT,V0,000E -BNEL AT,R0,7F0105FC -LW RA,0014 (SP) -JAL 7F0C6630 -ADDIU A0,R0,000D -BEQ R0,R0,7F0105FC -LW RA,0014 (SP) -//7F01051C: set you only live twice scenario specific settings -LUI V0,8003 -ADDIU V0,V0,B538 -ADDIU T9,R0,0007 -JAL 7F0C663C -SW T9,0000 (V0) -SLTI AT,V0,000E -BNEZ AT,7F010544 -NOP -JAL 7F0C6630 -ADDIU A0,R0,000D -LUI AT,8003 -BEQ R0,R0,7F0105F8 -SW R0,B548 (AT) -//7F010550: set the living daylights scenario specific settings -LUI V0,8003 -ADDIU V0,V0,B538 -LW T0,0000 (V0) -ADDIU T1,R0,0002 -SLTI AT,T0,0004 -BNEZ AT,7F010570 -NOP -SW T1,0000 (V0) -JAL 7F0C663C -NOP -SLTI AT,V0,000E -BNEL AT,R0,7F0105FC -LW RA,0014 (SP) -JAL 7F0C6630 -ADDIU A0,R0,000D -BEQ R0,R0,7F0105FC -LW RA,0014 (SP) -//7F010594: set man with the golden gun scenario specific settings -LUI V0,8003 -ADDIU V0,V0,B538 -LW T2,0000 (V0) ;T2=8002B538: game length -ADDIU T3,R0,0002 -SLTI AT,T2,0007 -BNEZ AT,7F0105B4 ;if length>=7 (last person alive), set to 2 (10 mins) -NOP -SW T3,0000 (V0) ;2->game length -JAL 7F0C6630 ;set selected weapon set to A0 -ADDIU A0,R0,000D ;A0=D: Golden Gun set -LUI AT,8003 -BEQ R0,R0,7F0105F8 -SW R0,B550 (AT) ;0->8002B550: lock weapon set -//7F0105C8: set license to kill scenario specific settings: -LUI V0,8003 -ADDIU V0,V0,B538 -LW T4,0000 (V0) -ADDIU T5,R0,0002 -SLTI AT,T4,0007 -BNEZ AT,7F0105E8 -NOP -SW T5,0000 (V0) -JAL 7F0C6630 -ADDIU A0,R0,0001 -LUI AT,8003 -SW R0,B554 (AT) -//7F0105F8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Multiplayer/scenarios/flag tag scoring.txt b/notes/GE Documentation/Multiplayer/scenarios/flag tag scoring.txt deleted file mode 100644 index deef4bb..0000000 --- a/notes/GE Documentation/Multiplayer/scenarios/flag tag scoring.txt +++ /dev/null @@ -1,1002 +0,0 @@ -The problem lies with flag tag returning a millisecond value instead of a proper score. So, to keep from breaking the scoring routine, it still needs to return V0=score but when testing game length read a V0/3600 value. This way, it is testing if the flag was held for a full minute. - -5 kill/10 min would essentially end the match if a player has the flag for a full five minutes. squee! - -+++++++++++++++++++++++++++++++ -part of MP initialization... called four times (despite # players) -//7F0BDD0C: retrieve and store MP time -JAL 7F010420 returns V0=game length: time -NOP -JAL 7F0BFC28 A0->80048398 -OR A0,V0,R0 A0=V0=time -//7F0BDD1C: retrieve and store MP kills -JAL 7F010444 returns V0=game length: kills -NOP -JAL 7F0BFC34 A0->8004839C -OR A0,V0,R0 A0=V0=#kills -//7F0BDD2C: F285C -JAL 7F0101D8 copy autoaim and sight settings to player stats -NOP -MTC1 R0,F8 -MTC1 R0,F10 -LUI V0,7FFF -ORI V0,V0,FFFF -SW R0,0034 (S4) -SW R0,003C (S4) -SW V0,0044 (S4) -SW R0,0048 (S4) -SW R0,0054 (S4) -SW R0,0058 (S4) -SW R0,004C (S4) -SW V0,0050 (S4) -SB R0,0068 (S4) -SW R0,0060 (S4) -SWC1 F8,0038 (S4) -SWC1 F10,0040 (S4) -LUI T3,8008 -ADDIU T3,T3,A0B0 -ADDIU S2,S2,0070 -ADDIU S4,S4,0070 -SW R0,FFC0 (S2) -SW R0,FFBC (S2) -SW R0,FFB8 (S2) -BNE S2,T3,7F0BDC94 -SW R0,FFB4 (S2) -//7F0BDD98: -JAL 7F004EC0 -NOP -etc... - ---------------------------------- -Flag Tag stage length check -(generic routine, really) - -//7F0BED7C: recover MP time -LUI V1,8005 -LW V1,8398 (V1) V1=MP time -LUI V0,8005 -LUI T9,8005 -BLEZ V1,7F0BEEB4 invalid time = skip time test -NOP -//7F0BED94: MP time test: one minute left -LW V0,8394 (V0) V0=80048394=curtime -LW T9,8374 (T9) T9=80048374=1 if not paused! -ADDIU A0,V1,F1F0 A0=time-1min (3600 sec.) -SLT AT,V0,A0 TRUE if curtime<1minleft -ADDU T6,T9,V0 T6=nextV0 -SW T6,0180 (SP) [incremented V0 (nexttime)] -BEQ AT,R0,7F0BEE04 -SW V0,0184 (SP) [current V0 (curtime)] -SLT AT,T6,A0 TRUE if counter(T6) < time-1min -BNEZ AT,7F0BEE04 if not at 1 minute left, branch -NOP -JAL 7F09A464 -SW R0,017C (SP) -BLEZ V0,7F0BEE04 -NOP -//7F0BEDD0: -JAL 7F09B10C -LW A0,017C (SP) -LUI A0,8006 -JAL 7F08A3C8 -ADDIU A0,A0,B704 -LW T7,017C (SP) -ADDIU T8,T7,0001 -JAL 7F09A464 -SW T8,017C (SP) -LW T9,017C (SP) -SLT AT,T9,V0 -BNEZ AT,7F0BEDD0 -NOP -//7F0BEE04: MP time test: 10 second warning -LUI T7,8005 -LW T7,8398 (T7) T7=MPtime -LW T6,0180 (SP) T6=nexttime -LUI T9,8005 -ADDIU T8,T7,FDA8 T8=MPtime-10sec -SLT AT,T6,T8 TRUE if nexttime<10sec warning -BNEZ AT,7F0BEE54 -NOP -LW T9,83A0 (T9) T9=800483A0=? -BNEZ T9,7F0BEE54 -NOP -LW T9,83A0 (T9) T9=800483A0=? -BNEZ T9,7F0BEE54 -NOP -JAL 7F0BFC04 returns V0=80048370 1 locks player controls? -NOP -BNEZ V0,7F0BEE54 -LUI A0,8006 -LUI A2,8005 -ADDIU A2,A2,83A0 A2=800483A0 -LW A0,3720 (A0) A0=80063720 -JAL 70008E08 get and set SE to use; A1=sound, A0=buffer loc? -ADDIU A1,R0,00A1 -//7F0BEE54: -JAL 7F0BFC04 V0=80048370=? toggle, initial=0 -NOP -BEQ V0,R0,7F0BEE88 -LUI A0,8005 -LW A0,83A0 (A0) -BEQ A0,R0,7F0BEE88 -NOP -JAL 70008DF0 -NOP -BEQ V0,R0,7F0BEE88 -LUI A0,8005 -JAL 70009020 -LW A0,8320 (A0) -//7F0BEE88: -LUI V1,8005 -LW V1,8398 (V1) V1=80048398=MPtime -LW T7,0184 (SP) T7=curtime -LW T6,0180 (SP) T6=nexttime -SLT AT,T7,V1 TRUE if curtime8008C700 stop play -NOP - -//7F0BEFB8: You Only Live Twice -JAL 7F014758 ;RETURNS V0=scenario -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F0BF1E0 ;branch if not "You Only Live Twice" -LUI T7,8005 -LW T7,8374 (T7) -BEQ T7,R0,7F0BF1E0 ;branch if game running -NOP -JAL 7F09A464 ;V0=#PLAYERS -NOP -//7F0BEFE0 -MTC1 R0,F0 -OR T2,V0,R0 ;T2=V0=#PLAYERS -OR T5,R0,R0 ;T5=0 -OR RA,R0,R0 ;RA=0 -BLEZ V0,7F0BF1AC ;skip if invalid #players -OR T4,R0,R0 ;T4=0: current player# -OR A1,R0,R0 ;A1=0: personal # deaths? -//7F0BEFFC: loop for each character... -OR A2,R0,R0 ;A2=0 -BLEZ V0,7F0BF124 ;branch if invalid # players, again(?) -OR A3,R0,R0 ;A3=0 -ANDI T1,V0,0003 -BEQ T1,R0,7F0BF074 ;branch if 4 player... -SLL T3,T4,0x2 ;T3=cur.player->offset -LUI T8,8008 -ADDIU T8,T8,9EE0 ;T8=p->BONDdata -SLL T6,R0,0x2 -SLL T9,R0,0x3 -SUBU T9,T9,R0 -ADDU V1,T6,T8 ;V1=p->player's BONDdata -LUI T6,8008 -SLL T9,T9,0x4 ;T9=offset to player's stats (0*0x70) -ADDU T7,T9,T3 ;T7=offset to stats + offset to playeroffset to pull kills -ADDIU T6,T6,9EF0 ;T6=playerstats -ADDU A0,T7,T6 ;A0=player's stats+offset to player's death register -OR T0,T1,R0 ;T0=T1: #players -//7F0BF044: pull # deaths from each player's statistics -LW T8,0000 (V1) ;T8=BONDdata -ADDIU A3,A3,0001 ;A3++ playercount++ -ADDIU V1,V1,0004 ;V1+=4 p->next player's BONDdata -LW T9,00D8 (T8) ;T9!=0 if dead player button control -BNEL T9,R0,7F0BF064 ;branch if dead -LW T7,0024 (A0) ;T7=playerkills -ADDIU A2,A2,0001 ;A2++ A2=#players living -LW T7,0024 (A0) ;T7=playerkills -//7F0BF064: loop for each player -ADDIU A0,A0,0070 ;A0=next player's stat offset -BNE T0,A3,7F0BF044 ;loop if the playercount doesn't match total players -ADDU A1,A1,T7 ;A1=death count -BEQ A3,V0,7F0BF124 ;branch if playercount matches total players, which will always return true... -//7F0BF074: test player 1's pulse - skip first iteration above if 4 player -// redundant, insofar as the routine above works well anyway... -LUI T8,8008 -SLL T9,A3,0x3 -SUBU T9,T9,A3 -ADDIU T8,T8,9EE0 -SLL T6,A3,0x2 -ADDU V1,T6,T8 ;V1=80079EE0+offset: p->BONDdata -SLL T9,T9,0x4 -ADDU T7,T9,T3 -LUI T6,8008 -ADDIU T6,T6,9EF0 -SLL T9,T2,0x2 -ADDU T0,T9,T8 -ADDU A0,T7,T6 ;A0=80079EF0+offset: stats -LW T7,0000 (V1) ;T7=BONDdata -LW T6,00D8 (T7) ;T6=player button control !0 if dead -BNEL T6,R0,7F0BF0C0 ;branch if dead -LW T8,0004 (V1) ;T8=next BONDdata -ADDIU A2,A2,0001 ;A2++ -LW T8,0004 (V1) -//7F0BF0C0: test player 2's pulse -LW T9,0024 (A0) ;T9=stats+24: player1kills -LW T7,00D8 (T8) ;T7=player button control !0 if dead -ADDU A1,A1,T9 ;A1+=playerkills total kills -BNEL T7,R0,7F0BF0DC ;branch if dead -LW T9,0008 (V1) ;T9=next BONDdata -ADDIU A2,A2,0001 ;A2++ -LW T9,0008 (V1) -//7F0BF0DC: test player 3's pulse -LW T6,0094 (A0) ;next player's player2kills -LW T8,00D8 (T9) ;T8=player button control !0 if dead -ADDU A1,A1,T6 ;A1+=playerkills total kills -BNEL T8,R0,7F0BF0F8 ;branch if dead -LW T6,000C (V1) ;T6=next BONDdata -ADDIU A2,A2,0001 ;A2++ -LW T6,000C (V1) -//7F0BF0F8: test player 4's pulse -LW T7,0104 (A0) ;next player's player3kills -ADDIU V1,V1,0010 ;V1+=10 -LW T9,00D8 (T6) ;T8=player button control !0 if dead -ADDU A1,A1,T7 -BNEL T9,R0,7F0BF118 -LW T8,0174 (A0) ;next player's player4kills -ADDIU A2,A2,0001 ;A2++ -LW T8,0174 (A0) -//7F0BF118: -ADDIU A0,A0,01C0 -BNE V1,T0,7F0BF0A8 ;branch if stats not for current player? -ADDU A1,A1,T8 ;tally of all kills/suicides -//7F0BF124: set the order of death when each player drops -SLTI AT,A1,0002 ;TRUE if tally < 2 this is what sets the game to end after Twice -BNEZ AT,7F0BF19C ;check next character if tally < 2 -SLL T7,T4,0x3 ;T7=T4*0x70: offset to player T4's stats -SUBU T7,T7,T4 -LUI T6,8008 -ADDIU T6,T6,9EF0 -SLL T7,T7,0x4 -ADDU V1,T7,T6 ;V1=stats -LBU T7,0068 (V1) ;T7=stats+68: order you lost in YOLX -LUI T8,8008 -ADDIU T8,T8,9EE0 -SLL T9,T4,0x2 ;T9=offset to player T4's BONDdata pointer -BNEZ T7,7F0BF164 ;branch if set -ADDU A0,T9,T8 ;A0=p->BONDdata -ADDIU T6,A2,0001 ;T6=A2+1 -SB T6,0068 (V1) ;T6->loser register -//7F0BF164: -LW V1,0000 (A0) ;V1=BONDdata -ADDIU T5,T5,0001 -LW T9,0424 (V1) ;T9=dying register 1: dying (allow respawn) -BEQL T9,R0,7F0BF1A0 ;branch still dying -ADDIU T4,T4,0001 -LW T8,0428 (V1) ;T8=blacken 1: fading to black -BEQL T8,R0,7F0BF1A0 ;branch still dying -ADDIU T4,T4,0001 -LWC1 F10,03E4 (V1) ;time to next respawn? Animation? Fade? -C.LT.S F10,F0 ;branch when it isn't -1, which signals end -NOP -BC1FL 7F0BF1A0 ;final confirmation, probably against some kind of timer -ADDIU T4,T4,0001 -ADDIU RA,RA,0001 ;RA++ confirmed player out -ADDIU T4,T4,0001 -//7F0BF1A0: loop for each character -SLT AT,T4,T2 ;branch if count < #players -BNEL AT,R0,7F0BEFFC ;loop for each character -OR A1,R0,R0 -//7F0BF1AC: test if finally dead? -ADDIU V1,V0,FFFF ;V1=V0-1: #players-1 -SLT AT,RA,V1 ;TRUE if RA < #players-1 -BNEL AT,R0,7F0BF1D0 ;branch if not at end yet -SLT AT,T5,V1 -JAL 7F0C2530 -OR A0,R0,R0 ;A0=0: -BEQ R0,R0,7F0BF1E0 -NOP -//7F0BF1CC: test if end of match -SLT AT,T5,V1 ;TRUE #deceased < #players-1 -BNEZ AT,7F0BF1E0 ;branch if not at end yet -NOP -JAL 7F0C2520 ;stop play -NOP - -//7F0BF1E0: test if game running, then deal with the final score screen -LUI V0,8005 -LUI T7,8005 -LW T7,8394 (T7) ;T7=MP cur time -LW V0,8374 (V0) ;V0=pause flag -LUI AT,4270 -MTC1 AT,F0 ;F0=60 -ADDU T6,T7,V0 ;T6=cur time + 1 if unpaused (nextime) -MTC1 T6,F16 -LUI AT,8005 -SW T6,8394 (AT) ;save nexttime to curtime -CVT.SW F18,F16 ;F18=nexttime -LUI V1,8005 -LUI AT,8005 -ADDIU V1,V1,83A8 ;V1=800483A8 -OR A0,R0,R0 ;A0=0 -ORI A1,R0,FFFF ;A1=0000FFFF -DIV.S F4,F18,F0 ;F4=time in seconds (instead of ms) -SWC1 F4,83A4 (AT) ;save MP current time in sec -LW T9,0000 (V1) ;T9=cycle counter maybe? -LUI AT,8005 -ADDU T7,T9,V0 -MTC1 T7,F6 -SW T7,0000 (V1) -CVT.SW F8,F6 -DIV.S F10,F8,F0 -JAL 7000C3AC ;test player 1's controller for any button -SWC1 F10,83AC (AT) -//7F0BF24C: - - - -================================= -7000C3AC: tests player A0's controller for button mask A1 -LUI V1,8002 -LW V1,68C4 (V1) V1=800268C4=[80064F30] -SW A0,0000 (SP) -SW A1,0004 (SP) -LW T9,01F8 (V1) T9= -SLL T6,A0,0x18 -SRA T7,T6,0x18 -ANDI T8,A1,FFFF -OR A1,T8,R0 A1=org limitted to 2 bytes -BGEZ T9,7000C410 -OR A0,T7,R0 A0=org limited to 2 bytes -LUI T0,8002 -LBU T0,68D0 (T0) T0=800268D0=[0F] -LUI T4,8002 -ADDIU T4,T4,6960 T4=80026960 -SRAV T1,T0,T7 -ANDI T2,T1,0001 -BNEZ T2,7000C410 -SLL T3,T7,0x2 -ADDU V1,T3,T4 -LW T5,0000 (V1) -OR V0,R0,R0 -ADDIU T6,T5,0001 -JR RA -SW T6,0000 (V1) -//7000C410: -SLL T7,A0,0x1 -ADDU T8,V1,0x1 -LHU T9,01F0 (T8) -AND V0,T9,A1 -ANDI T0,V0,FFFF -OR V0,T0,R0 -JR RA -NOP - -================================= -7F0101D8: set player aim settings -LUI T6,8003 -LW T6,B53C (T6) //T6=selected aim settings -LUI T8,8003 -ADDIU T8,T8,B510 //T8=8002B510 -SLL T7,T6,0x2 //setting->offset -ADDU V0,T7,T8 //V0=pointer to selected settings -LBU V1,0003 (V0) //V1=autoaim [1:on] -LUI AT,8008 -SB V1,9F5A (AT) //set player 1 autoaim 80079F5A -LBU A0,0002 (V0) //A0=sight [1:on] -LUI AT,8008 -SB A0,9F5B (AT) //set player 1 sight 80079F5B -LUI AT,8008 -SB V1,9FCA (AT) //set player 2 autoaim 80079FCA -LUI AT,8008 -SB A0,9FCB (AT) //set player 2 sight 80079FCB -LUI AT,8008 -SB V1,A03A (AT) //set player 3 autoaim 8007A03A -LUI AT,8008 -SB A0,A03B (AT) //set player 3 sight 8007A03B -LUI AT,8008 -SB V1,A0AA (AT) //set player 4 autoaim 8007A0AA -LUI AT,8008 -JR RA -SB A0,A0AB (AT) //set player 4 sight 8007A0AB - ---------------------------------- -7F010420: recovers time from selected MP length setting - 0x44F50-E -J -P -LUI T6,8003 -LW T6,B538 (T6) //T6=selected game length -LUI V0,8003 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x2 //T7=length*0xC (offset) -ADDU V0,V0,T7 -JR RA -LW V0,AFF8 (V0) //V0=8002AFF8+offset selected time - ---------------------------------- -7F010444: recovers kills from selected MP length setting - 0x44F74-E -J -P -LUI T6,8003 -LW T6,B538 (T6) //T6=selected game length -LUI V0,8003 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x2 //T7=length*0xC (offset) -ADDU V0,V0,T7 -JR RA -LW V0,AFFC (V0) //V0=8002AFFC+offset selected #kills - ---------------------------------- -7F0BFC28: save MP time setting; A0->80048398, FRY AT - 0xF4758-E -J -P -LUI AT,8005 -JR RA -SW A0,8398 (AT) - ---------------------------------- -7F0BFC34: save MP kills setting; A0->8004839C, FRY AT - 0xF4764-E -J -P -LUI AT,8005 -JR RA -SW A0,839C (AT) - ---------------------------------- -7F0C2520: -ADDIU T6,R0,0001 T6=1 -LUI AT,8009 -JR RA -SW T6,C700 (AT) 1->8008C700 - ---------------------------------- -7F0C38D8: returns V0=#points - ACCEPTS A0=player# -SLL T6,A0,0x3 -LUI V1,8008 -SUBU T6,T6,A0 -ADDIU V1,V1,9EF0 V1=player stat offset -SLL T6,T6,0x4 T6=A0*0x70 (next player) -ADDIU SP,SP,FFC8 -ADDU T3,V1,T6 T3=Player A0's stats -LBU A3,0069 (T3) A3=flag/GG ownership byte -SW RA,0014 (SP) -SW T3,0018 (SP) -SW A0,0038 (SP) -JAL 7F09A464 returns V0=#players -SW A3,0034 (SP) -SW R0,0024 (SP) -JAL 7F014758 V0=scenario -SW V0,0030 (SP) -LUI V1,8008 -SLTIU AT,V0,0008 TRUE if scenario < 8 -ADDIU V1,V1,9EF0 V1=80079EF0=player stat offset -LW A0,0024 (SP) A0=0 -LW A1,0038 (SP) A1=player# -LW A3,0034 (SP) A3=flag/GG ownership -LW T2,0030 (SP) T2=# players -BEQ AT,R0,7F0C3C80 -LW T3,0018 (SP) T3=player stats -SLL T7,V0,0x2 -LUI AT,8006 -ADDU AT,AT,T7 -LW T7,BCA0 (AT) T7=8005BCA0+offset specific routine for scenario -JR T7 -NOP -... 7F0C3954: Normal, Licence to Kill, Man with the Golden Gun -BLEZ T2,7F0C3AF8 skip if invalid # players -OR T1,R0,R0 T1=0 (testchar) -ANDI T0,T2,0003 -BEQ T0,R0,7F0C39C0 -OR V0,T0,R0 -//7F0C3968: tally point total (player kills only) -BEQ T1,A1,7F0C3994 if matches player#, branch suicide count -SLL T8,T1,0x3 T8=8*testchar -SLL T8,A1,0x3 T8=8*player# -SUBU T8,T8,A1 -SLL T8,T8,0x4 T8=player# * 0x70 -ADDU T9,V1,T8 T9=offset to playerstats -SLL T5,T1,0x2 T5=offset to testchar's death total -ADDU T6,T9,T5 -LW T7,0024 (T6) T7=player kill register -BEQ R0,R0,7F0C39B0 -ADDU A0,A0,T7 A0+=playerkill keeps a running tally -//7F0C3994: suicide... -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 offset to playerstats -ADDU T6,T9,T5 -LW T7,0024 (T6) T7=player kill register -SUBU A0,A0,T7 A-=playerkill keeps a running tally -//7F0C39B0: -ADDIU T1,T1,0001 next testchar -BNE V0,T1,7F0C3968 loop until A0=full player score -NOP -BEQ T1,T2,7F0C3AF8 -//7F0C39C0: -ADDIU V0,A1,FFFF V0=player#-1 -ADDIU A2,A1,FFFE A2=player#-2 -ADDIU A3,A1,FFFD A3=player#-3 -//7F0C39CC: -BEQ T1,A1,7F0C39F8 -SLL T8,T1,0x3 -SLL T8,A1,0x3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 T9=offset to playerstats -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,0024 (T6) T7= -BEQ R0,R0,7F0C3A14 -ADDU A0,A0,T7 -//7F0C39F8: suicide counts... -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0024 (T6) -SUBU A0,A0,T7 -//7F0C3A14: -BEQ T1,V0,7F0C3A40 -SLL T8,T1,0x3 -SLL T8,A1,0X3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 T9=playerstats -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,0028 (T6) P2 kills... -BEQ R0,R0,7F0C3A5C -ADDU A0,A0,T7 -//7F0C3A40: -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 T9=playerstats -SLL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0094 (T6) uh, next player's kill totals... -SUBU A0,A0,T7 -//7F0C3A5C: -BEQ T1,A2,7F0C3A88 -SLL T8,T1,0x3 -SLL T8,A1,0x3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,002C (T6) P3's kills... -BEQ R0,R0,7F0C3AA4 -ADDU A0,A0,T7 -//7F0C3A88: -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0104 (T6) third player's kill totals... -SUBU A0,A0,T7 -//7F0C3AA4: -BEQ T1,A3,7F0C3AD0 -SLL T8,T1,0x3 -SLL T8,A1,0x3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,0030 (T6) P4 kills -BEQ R0,R0,7F0C3AEC -ADDU A0,A0,T7 -//7F0C3AD0: -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0174 (T6) fourth player's kills... -SUBU A0,A0,T7 -ADDIU T1,T1,0004 -BNE T1,T2,7F0C39CC -NOP -//7F0C3AF8: -LW T8,0020 (T3) T8=0x20 in player stats... -ADDIU T9,T2,FFFE T9=#players-2 -MULTU T8,T9 -MFLO T5 -ADDU A0,A0,T5 -BEQ R0,R0,7F0C3C84 -LW RA,0014 (SP) - -... 7F0C3B14: You Only Live Twice -LBU T6,0068 (T3) T6=death counter -ADDIU T7,R0,0004 T7=4 -BEQ R0,R0,7F0C3C80 -SUBU A0,T7,T6 A0=4-death counter - -... 7F0C3B24: The Living Daylights -BEQ R0,R0,7F0C3C80 -LW A0,0060 (T3) A0=flag timer counter - -... 7F0C3B2C: Teams -BLEZ T2,7F0C3C80 Should be valid # players -OR T1,R0,R0 T1=0 -LUI T4,8008 -ADDIU T4,T4,9EF0 T4=80079EF0=player stat offset -//7F0C3B3C: -LBU T8,0069 (T4) T8=Flag/GG ownership//Team flag -BNEL A3,T8,7F0C3C78 if flag doesn't match player flag, next! -ADDIU T1,T1,0001 -BLEZ T2,7F0C3C74 loop until out of players -OR A1,R0,R0 A1=0 -SLL T9,T1,0x3 -SUBU T9,T9,T1 -LUI T5,8008 -ADDIU T5,T5,9EF0 T5=80079EF0 -SLL T9,T9,0x4 T9=matching player # * 0x70 -ANDI T0,T2,0003 -BEQ T0,R0,7F0C3BC0 -ADDU T3,T9,T5 -SLL T7,R0,0x3 -SUBU T7,T7,R0 -SLL T7,T7,0x4 -SLL T6,R0,0x2 -ADDU V0,T3,T6 -ADDU V1,T7,T5 -OR A2,T0,R0 -//7F0C3B8C: -LBU T8,0069 (V1) -ADDIU A1,A1,0001 -ADDIU V1,V1,0070 -BEQL A3,T8,7F0C3BB0 -LW T7,0024 (V0) -LW T9,0024 (V0) -BEQ R0,R0,7F0C3BB4 -ADDU A0,A0,T9 -//7F0C3BAC: -LW T7,0024 (V0) -//7F0C3BB0: -SUBU A0,A0,T7 -//7F0C3BB4: -BNE A2,A1,7F0C3B8C -ADDIU V0,V0,0004 -BEQ A1,T2,7F0C3C74 -//7F0C3BC0: -SLL T5,A1,0x3 -SUBU T5,T5,A1 -LUI T6,8008 -ADDIU T6,T6,9EF0 -SLL T5,T5,0x4 -SLL A2,A1,0x2 -ADDU V0,T3,A2 -ADDU V1,T5,T6 -SLL T0,T2,0x2 -//7F0C3BE4: -LBU T8,0069 (V1) -ADDIU A2,A2,0010 -BEQL A3,T8,7F0C3C04 -LW T7,0024 (V0) -LW T9,0024 (V0) -BEQ R0,R0,7F0C3C08 -ADDU A0,A0,T9 -//7F0C3C00: -LW T7,0024 (V0) -//7F0C3C04: -SUBU A0,A0,T7 -//7F0C3C08: -LBU T5,00D9 (V1) -BEQL A3,T5,7F0C3C24 -LW T8,0028 (V0) -LW T6,0028 (V0) -BEQ R0,R0,7F0C3C28 -ADDU A0,A0,T6 -//7F0C3C20: -LW T8,0028 (V0) -//7F0C3C24: -SUBU A0,A0,T8 -//7F0C3C28: -LBU T9,0149 (V1) -BEQL A3,T9,7F0C3C44 -LW T5,002C (V0) -LW T7,002C (V0) -BEQ R0,R0,7F0C3C48 -ADDU A0,A0,T7 -//7F0C3C40: -LW T5,002C (V0) -//7F0C3C44: -SUBU A0,A0,T5 -//7F0C3C48: -LBU T6,01B9 (V1) -ADDIU V1,V1,01C0 -BEQL A3,T6,7F0C3C68 -LW T9,0030 (V0) -LW T8,0030 (V0) -BEQ R0,R0,7F0C3C6C -ADDU A0,A0,T8 -//7F0C3C64: -LW T9,0030 (V0) -//7F0C3C68: -SUBU A0,A0,T9 -//7F0C3C6C: -BNE A2,T0,7F0C3BE4 -ADDIU V0,V0,0010 -//7F0C3C74: -ADDIU T1,T1,0001 -BNE T1,T2,7F0C3B3C -ADDIU T4,T4,0070 -//7F0C3C80: return... -LW RA,0014 (SP) -ADDIU SP,SP,0038 -OR V0,A0,R0 V0=A0=score data -JR RA -NOP - -======================================== -======================================== - -Flag possession tests - -basically, anything that calls this bugger: - --7F08CF80: test if possess flag -LUI T6,8008 -LW T6,A0B0 (T6) //T6=cur.player data -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW T7,00D8 (T6) //T7=player death attrib -OR V0,R0,R0 -BNEZ T7,7F08CFB0 //skip if player dead or dying -NOP -JAL 7F08C314 //returns V0=1 if flag posessed -ADDIU A0,R0,0058 -BEQ R0,R0,7F08CFB4 -LW RA,0014 (SP) -//7F08CFB0: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP ----------------------- - -part of larger routine... -//7F083DAC: -ADDIU T2,R0,0001 -JAL 7F09A464 ;V0=#players -SW T2,0074 (SP) -SLTIU AT,V0,0002 -BNEL AT,R0,7F083DF0 -LW T3,0074 (SP) -JAL 7F014758 ;V0=scenario -NOP -ADDIU AT,R0,0002 -BNEL V0,AT,7F083DF0 ;skip if not flag tag -LW T3,0074 (SP) -//7F083DD8: kill inventory if flag possessed -JAL 7F08CF80 ;return V0=1 if holding flag -NOP -BEQL V0,R0,7F083DF0 -LW T3,0074 (SP) -SW R0,0074 (SP) ;trash SP+0x74 if flag held (disable inventory) -LW T3,0074 (SP) ;T3=1 -//7F083DF0: -BEQL T3,R0,7F083E24 -LW T8,01BC (SP) -LW T5,0174 (SP) -BEQL T5,R0,7F083E10 -LW T4,0170 (SP) -JAL 7F05D768 -NOP -LW T4,0170 (SP) -//7F083E10: -BEQL T4,R0,7F083E24 -LW T8,01BC (SP) -JAL 7F05D6D0 -NOP -LW T8,01BC (SP) -//7F083E24: -BEQL T8,R0,7F083E3C -LW T7,01B8 (SP) -LW T6,0000 (S0) -BEQ R0,R0,7F083E50 -SW R0,0430 (T6) -//7F083E3C: -BEQL T7,R0,7F083E54 -LW T3,0000 (S0) -LW T2,0000 (S0) -ADDIU T9,R0,0002 -SW T9,0430 (T2) -//7F083E50: -LW T3,0000 (S0) -LW V0,0430 (T3) -BNEL V0,R0,7F083F64 -ADDIU AT,R0,0002 -JAL 7F067AA4 -OR A0,R0,R0 -...ETC... - - -ANOTHER ROUTINE -//7F0BFA30: this is used to force the flag out when owned - 0xF4560-E -0FC051D6 JAL 7F014758 V0=scenario -E4460038 SWC1 F6,0038 (V0) -24010002 ADDIU AT,R0,0002 -14410024 BNE V0,AT,7F0BFAD0 skip if not flag tag -00000000 NOP -0FC233E0 JAL 7F08CF80 V0=1 if flag held -00000000 NOP -1040001C BEQ V0,R0,7F0BFAC0 skip if flag not held -00000000 NOP -0FC17674 JAL 7F05D9D0 V0=weapon# in use -00002025 OR A0,R0,R0 check right gun (A0=0) -24010058 ADDIU AT,R0,0058 -1041000B BEQ V0,AT,7F0BFA90 if flag already set get to scoring -00002025 OR A0,R0,R0 draw right weapon (A0=0) -0FC17645 JAL 7F05D914 1st person draw weapon -24050058 ADDIU A1,R0,0058 draw flag (A1=58) -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) V0=current player data -24010002 ADDIU AT,R0,0002 AT=2 -24090005 ADDIU T1,R0,0005 T1=5 -8C480894 LW T0,0894 (V0) FIDDLE with the weapon state flag -15010002 BNE T0,AT,7F0BFA90 if playerdata+0x894==2, set to 5 -00000000 NOP -AC490894 SW T1,0894 (V0) set playerdata+0x894 to 5 -//7F0BFA90: advance flag time and set flag ownership -3C038008 LUI V1,8008 -2463A0B4 ADDIU V1,V1,A0B4 -8C620000 LW V0,0000 (V1) V0=current player stat pointer -3C0B8005 LUI T3,8005 -8D6B8374 LW T3,8374 (T3) T3=1 if not paused (used to advance flag time) -8C4A0060 LW T2,0060 (V0) T2=flag held time -240D0001 ADDIU T5,R0,0001 -014B6021 ADDU T4,T2,T3 -AC4C0060 SW T4,0060 (V0) advance flag held time one more millisecond -8C6E0000 LW T6,0000 (V1) T6=current player stat pointer -10000015 BEQ R0,R0,7F0BFB10 -A1CD0069 SB T5,0069 (T6) 1->flag byte -//7F0BFAC0: flag not held... -3C0F8008 LUI T7,8008 -8DEFA0B4 LW T7,A0B4 (T7) T7=current player stat pointer -10000011 BEQ R0,R0,7F0BFB10 -A1E00069 SB R0,0069 (T7) blank the flag byte -//7F0BFAD0: -0FC051D6 JAL 7F014758 -00000000 NOP - - -also.. -//7F050A94: 855C4 disable BA collection -ADDIU AT,R0,0002 -BNE V0,AT,7F050ABC branch if not flag tag -OR V1,V0,R0 -JAL 7F08CF80 V0=1 if flag held -SW V0,0059 (SP) -BEQ V0,R0,7F050ABC -LW V1,0058 (SP) -ADDIU T1,R0,0001 -BEQ R0,R0,7F050ADC -SW T1,005C (SP) -//7F050ABC: -ADDIU AT,R0,0003 -BNEL V1,AT,7F050AE0 branch if not MwtGG -LW T3,005C (SP) -JAL 7F08CFC0 V0=1 if GG held -NOP -BEQ V0,R0,7F050ADC -ADDIU T2,R0,0001 -SW T2,005C (SP) -//7F050ADC: -LW T3,005C (SP) -BEQ T3,R0,7F050AF0 other scenarios... -NOP -BEQ R0,R0,7F050D20 if either are held, end the routine... -OR V0,R0,R0 - - -7F0503F0: test if remote mines -ADDIU AT,R0,001D -LB A0,0080 (T5) -BNEL A0,AT,7F050414 -ADDIU AT,R0,0058 -//7F000400: add detonator too! -JAL 7F08C488 -ADDIU A0,R0,001E -BEQ R0,R0,7F050428 -LW T6,006C (SP) -//7F050410: Test if collected item is the flag. If so, place in hand -ADDIU AT,R0,0058 //this command is missed when jump used (7F0503F8) -BNE A0,AT,7F050424 [beq r0,r0 etc 10000003 disables flag draw thingy] -ADDIU A1,R0,0058 -JAL 7F05D914 -OR A0,R0,R0 -//7F050424: I think this is the left-hand weapon test -LW T6,006C (SP) -LW T9,0048 (SP) //T9=object data pointer -LW T7,0064 (T6) //This should be the runtime bitflag field being tested for 00000400 -ANDI T8,T7,0400 -BEQ T8,R0,7F0504A4 -NOP -LB T0,0080 (T9) -SLTI AT,T0,0021 - - - - -read amount of ammo for weapon A0 current player has -7F069450: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F05C8B4 V0=address of weapon A0's data -NOP -LW T7,001C (V0) T7=ammo type -LUI T6,8008 -LW T6,A0B0 (T6) -LW RA,0014 (SP) -SLL T8,T7,0x2 T8=ammo type->offset -ADDU T9,T6,T8 -LW V0,1130 (T9) V0=amount of ammo owned by current player -JR RA -ADDIU SP,SP,0018 \ No newline at end of file diff --git a/notes/GE Documentation/Multiplayer/scenarios/game length.txt b/notes/GE Documentation/Multiplayer/scenarios/game length.txt deleted file mode 100644 index 067b14c..0000000 --- a/notes/GE Documentation/Multiplayer/scenarios/game length.txt +++ /dev/null @@ -1,903 +0,0 @@ -The problem lies with flag tag returning a millisecond value instead of a proper score. So, to keep from breaking the scoring routine, it still needs to return V0=score but when testing game length read a V0/3600 value. This way, it is testing if the flag was held for a full minute. - -5 kill/10 min would essentially end the match if a player has the flag for a full five minutes. squee! - -+++++++++++++++++++++++++++++++ -part of MP initialization... called four times (despite # players) -//7F0BDD0C: retrieve and store MP time -JAL 7F010420 returns V0=game length: time -NOP -JAL 7F0BFC28 A0->80048398 -OR A0,V0,R0 A0=V0=time -//7F0BDD1C: retrieve and store MP kills -JAL 7F010444 returns V0=game length: kills -NOP -JAL 7F0BFC34 A0->8004839C -OR A0,V0,R0 A0=V0=#kills -//7F0BDD2C: -JAL 7F0101D8 copy autoaim and sight settings to player stats -NOP -MTC1 R0,F8 -MTC1 R0,F10 -LUI V0,7FFF -ORI V0,V0,FFFF -SW R0,0034 (S4) -SW R0,003C (S4) -SW V0,0044 (S4) -SW R0,0048 (S4) -SW R0,0054 (S4) -SW R0,0058 (S4) -SW R0,004C (S4) -SW V0,0050 (S4) -SB R0,0068 (S4) -SW R0,0060 (S4) -SWC1 F8,0038 (S4) -SWC1 F10,0040 (S4) -LUI T3,8008 -ADDIU T3,T3,A0B0 -ADDIU S2,S2,0070 -ADDIU S4,S4,0070 -SW R0,FFC0 (S2) -SW R0,FFBC (S2) -SW R0,FFB8 (S2) -BNE S2,T3,7F0BDC94 -SW R0,FFB4 (S2) -//7F0BDD98: -JAL 7F004EC0 -NOP -etc... - ---------------------------------- -Flag Tag stage length check -(generic routine, really) - -//7F0BED7C: recover MP time -LUI V1,8005 -LW V1,8398 (V1) V1=MP time -LUI V0,8005 -LUI T9,8005 -BLEZ V1,7F0BEEB4 invalid time = skip time test -NOP -//7F0BED94: MP time test: one minute left -LW V0,8394 (V0) V0=80048394=curtime -LW T9,8374 (T9) T9=80048374=1 if not paused! -ADDIU A0,V1,F1F0 A0=time-1min (3600 sec.) -SLT AT,V0,A0 TRUE if curtime<1minleft -ADDU T6,T9,V0 T6=nextV0 -SW T6,0180 (SP) [incremented V0 (nexttime)] -BEQ AT,R0,7F0BEE04 -SW V0,0184 (SP) [current V0 (curtime)] -SLT AT,T6,A0 TRUE if counter(T6) < time-1min -BNEZ AT,7F0BEE04 if not at 1 minute left, branch -NOP -JAL 7F09A464 -SW R0,017C (SP) -BLEZ V0,7F0BEE04 -NOP -//7F0BEDD0: display 1 minute warning -JAL 7F09B10C ;set working player# to A0 -LW A0,017C (SP) ;A0=cur player# -LUI A0,8006 -JAL 7F08A3C8 -ADDIU A0,A0,B704 ;A0=8005B704: "One minute left" -LW T7,017C (SP) ;T7=cur player# -ADDIU T8,T7,0001 ;T8=T7+1: next player -JAL 7F09A464 ;V0=#players -SW T8,017C (SP) ;SP+17C=T8: cur player# -LW T9,017C (SP) -SLT AT,T9,V0 ;branch if more players to go -BNEZ AT,7F0BEDD0 -NOP -//7F0BEE04: MP time test: 10 second warning -LUI T7,8005 -LW T7,8398 (T7) T7=MPtime -LW T6,0180 (SP) T6=nexttime -LUI T9,8005 -ADDIU T8,T7,FDA8 T8=MPtime-10sec -SLT AT,T6,T8 TRUE if nexttime<10sec warning -BNEZ AT,7F0BEE54 -NOP -LW T9,83A0 (T9) T9=800483A0=? -BNEZ T9,7F0BEE54 -NOP -LW T9,83A0 (T9) T9=800483A0=? -BNEZ T9,7F0BEE54 -NOP -JAL 7F0BFC04 returns V0=80048370 1 locks player controls? -NOP -BNEZ V0,7F0BEE54 -LUI A0,8006 -LUI A2,8005 -ADDIU A2,A2,83A0 A2=800483A0 -LW A0,3720 (A0) A0=80063720 -JAL 70008E08 get and set SE to use; A1=sound, A0=buffer loc? -ADDIU A1,R0,00A1 -//7F0BEE54: -JAL 7F0BFC04 V0=80048370=? toggle, initial=0 -NOP -BEQ V0,R0,7F0BEE88 -UI A0,8005 -LW A0,83A0 (A0) -BEQ A0,R0,7F0BEE88 -NOP -JAL 70008DF0 -NOP -BEQ V0,R0,7F0BEE88 -LUI A0,8005 -JAL 70009020 -LW A0,8320 (A0) -//7F0BEE88: -LUI V1,8005 -LW V1,8398 (V1) V1=80048398=MPtime -LW T7,0184 (SP) T7=curtime -LW T6,0180 (SP) T6=nexttime -SLT AT,T7,V1 TRUE if curtime8008C700 stop play -NOP - -//7F0BEFB8: -JAL 7F014758 RETURNS V0=scenario -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F0BF1E0 branch if not "You Only Live Twice" -LUI T7,8005 -LW T7,8374 (T7) -BEQ T7,R0,7F0BF1E0 -NOP -JAL 7F09A464 v0=#PLAYERS -NOP -//7F0BEFE0 -MTC1 R0,F0 -OR T2,V0,R0 T2=V0=#PLAYERS -OR T5,R0,R0 T5=0 -OR RA,R0,R0 RA=0 -BLEZ V0,7F0BF1AC skip if invalid player # -OR T4,R0,R0 T4=0 -OR A1,R0,R0 A1=0 -OR A2,R0,R0 A2=0 -BLEZ V0,7F0BF124 -OR A3,R0,R0 A3=0 -ANDI T1,V0,0003 -BEQ T1,R0,7F0BF074 -SLL T3,T4,0x2 -LUI T8,8008 -ADDIU T8,T8,9EE0 T8=PLAYERDATA -SLL T6,R0,0x2 Uh, T6=0 -SLL T9,R0,0x3 Uh, T9=0 -SUBU T9,T9,R0 T9 still=0 -ADDU V1,T6,T8 -LUI T6,8008 -SLL T9,T9,0x4 -ADDU T7,T9,T3 -ADDIU T6,T6,9EF0 T6=playerstats -ADDU A0,T7,T6 A0=player's stats -OR T0,T1,R0 -//7F0BF044: -LW T8,0000 (V1) -ADDIU A3,A3,0001 -ADDIU V1,V1,0004 -LW T9,00D8 (T8) T9!=0 if dead -BNEL T9,R0,7F0BF064 -LW T7,0024 (A0) T7=P1kill -ADDIU A2,A2,0001 -LW T7,0024 (A0) T7=P1kill -//7F0BF064: -ADDIU A0,A0,0070 A0=next player's stat offset -BNE T0,A3,7F0BF044 -ADDU A1,A1,T7 A1=death count -BEQ A3,V0,7F0BF124 -//7F0BF074: -LUI T8,8008 -... -... -... -//7F0BF1E0: for game clock -LUI V0,8005 -LUI T7,8005 -LW T7,8394 (T7) T7=MP cur time -LW V0,8374 (V0) V0=pause flag -UI AT,4270 -MTC1 AT,F0 F0=60 -ADDU T6,T7,V0 T6=cur time + 1 if unpaused (nextime) -MTC1 T6,F16 -LUI AT,8005 -SW T6,8394 (AT) save nexttime to curtime -CVT.SW F18,F16 F18=nexttime -LUI V1,8005 -LUI AT,8005 -ADDIU V1,V1,83A8 V1=800483A8 -OR A0,R0,R0 A0=0 -ORI A1,R0,FFFF A1=0000FFFF -DIV.S F4,F18,F0 F4=time in seconds (instead of ms) -SWC1 F4,83A4 (AT) save MP current time in sec -LW T9,0000 (V1) T9=cycle counter maybe? -LUI AT,8005 -ADDU T7,T9,V0 -MTC1 T7,F6 -SW T7,0000 (V1) -CVT.SW F8,F6 -DIV.S F10,F8,F0 -JAL 7000C3AC ;TRUE if player 1 pressed any button -SWC1 F10,83AC (AT) -//7F0BF24C: - - - -================================= -7000C3AC: test player A0's controller for mask A1 -LUI V1,8002 -LW V1,68C4 (V1) V1=800268C4=[80064F30] -SW A0,0000 (SP) -SW A1,0004 (SP) -LW T9,01F8 (V1) T9= -SLL T6,A0,0x18 -SRA T7,T6,0x18 -ANDI T8,A1,FFFF -OR A1,T8,R0 A1=org limitted to 2 bytes -BGEZ T9,7000C410 -OR A0,T7,R0 A0=org limited to 2 bytes -LUI T0,8002 -LBU T0,68D0 (T0) T0=800268D0=[0F] -LUI T4,8002 -ADDIU T4,T4,6960 T4=80026960 -SRAV T1,T0,T7 -ANDI T2,T1,0001 -BNEZ T2,7000C410 -SLL T3,T7,0x2 -ADDU V1,T3,T4 -LW T5,0000 (V1) -OR V0,R0,R0 -ADDIU T6,T5,0001 -JR RA -SW T6,0000 (V1) -//7000C410: -SLL T7,A0,0x1 -ADDU T8,V1,0x1 -LHU T9,01F0 (T8) -AND V0,T9,A1 -ANDI T0,V0,FFFF -OR V0,T0,R0 -JR RA -NOP - -================================= -7F0101D8: set player aim settings -LUI T6,8003 -LW T6,B53C (T6) //T6=selected aim settings -LUI T8,8003 -ADDIU T8,T8,B510 //T8=8002B510 -SLL T7,T6,0x2 //setting->offset -ADDU V0,T7,T8 //V0=pointer to selected settings -LBU V1,0003 (V0) //V1=autoaim [1:on] -LUI AT,8008 -SB V1,9F5A (AT) //set player 1 autoaim 80079F5A -LBU A0,0002 (V0) //A0=sight [1:on] -LUI AT,8008 -SB A0,9F5B (AT) //set player 1 sight 80079F5B -LUI AT,8008 -SB V1,9FCA (AT) //set player 2 autoaim 80079FCA -LUI AT,8008 -SB A0,9FCB (AT) //set player 2 sight 80079FCB -LUI AT,8008 -SB V1,A03A (AT) //set player 3 autoaim 8007A03A -LUI AT,8008 -SB A0,A03B (AT) //set player 3 sight 8007A03B -LUI AT,8008 -SB V1,A0AA (AT) //set player 4 autoaim 8007A0AA -LUI AT,8008 -JR RA -SB A0,A0AB (AT) //set player 4 sight 8007A0AB - ---------------------------------- -7F010420: recovers time from selected MP length setting - 0x44F50-E -J -P -LUI T6,8003 -LW T6,B538 (T6) //T6=selected game length -LUI V0,8003 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x2 //T7=length*0xC (offset) -ADDU V0,V0,T7 -JR RA -LW V0,AFF8 (V0) //V0=8002AFF8+offset selected time - ---------------------------------- -7F010444: recovers kills from selected MP length setting - 0x44F74-E -J -P -LUI T6,8003 -LW T6,B538 (T6) //T6=selected game length -LUI V0,8003 -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x2 //T7=length*0xC (offset) -ADDU V0,V0,T7 -JR RA -LW V0,AFFC (V0) //V0=8002AFFC+offset selected #kills - ---------------------------------- -7F0BFC28: save MP time setting; A0->80048398, FRY AT - 0xF4758-E -J -P -LUI AT,8005 -JR RA -SW A0,8398 (AT) - ---------------------------------- -7F0BFC34: save MP kills setting; A0->8004839C, FRY AT - 0xF4764-E -J -P -LUI AT,8005 -JR RA -SW A0,839C (AT) - ---------------------------------- -7F0C2520: -ADDIU T6,R0,0001 T6=1 -LUI AT,8009 -JR RA -SW T6,C700 (AT) 1->8008C700 - ---------------------------------- -7F0C38D8: returns V0=#points - ACCEPTS A0=player# -SLL T6,A0,0x3 -LUI V1,8008 -SUBU T6,T6,A0 -ADDIU V1,V1,9EF0 V1=player stat offset -SLL T6,T6,0x4 T6=A0*0x70 (next player) -ADDIU SP,SP,FFC8 -ADDU T3,V1,T6 T3=Player A0's stats -LBU A3,0069 (T3) A3=flag/GG ownership byte -SW RA,0014 (SP) -SW T3,0018 (SP) -SW A0,0038 (SP) -JAL 7F09A464 returns V0=#players -SW A3,0034 (SP) -SW R0,0024 (SP) -JAL 7F014758 V0=scenario -SW V0,0030 (SP) -LUI V1,8008 -SLTIU AT,V0,0008 TRUE if scenario < 8 -ADDIU V1,V1,9EF0 V1=80079EF0=player stat offset -LW A0,0024 (SP) A0=0 -LW A1,0038 (SP) A1=player# -LW A3,0034 (SP) A3=flag/GG ownership -LW T2,0030 (SP) T2=# players -BEQ AT,R0,7F0C3C80 -LW T3,0018 (SP) T3=player stats -SLL T7,V0,0x2 -LUI AT,8006 -ADDU AT,AT,T7 -LW T7,BCA0 (AT) T7=8005BCA0+offset specific routine for scenario -JR T7 -NOP -... 7F0C3954: Normal, Licence to Kill, Man with the Golden Gun -BLEZ T2,7F0C3AF8 skip if invalid # players -OR T1,R0,R0 T1=0 (testchar) -ANDI T0,T2,0003 -BEQ T0,R0,7F0C39C0 -OR V0,T0,R0 -//7F0C3968: tally point total (player kills only) -BEQ T1,A1,7F0C3994 if matches player#, branch suicide count -SLL T8,T1,0x3 T8=8*testchar -SLL T8,A1,0x3 T8=8*player# -SUBU T8,T8,A1 -SLL T8,T8,0x4 T8=player# * 0x70 -ADDU T9,V1,T8 T9=offset to playerstats -SLL T5,T1,0x2 T5=offset to testchar's death total -ADDU T6,T9,T5 -LW T7,0024 (T6) T7=player kill register -BEQ R0,R0,7F0C39B0 -ADDU A0,A0,T7 A0+=playerkill keeps a running tally -//7F0C3994: suicide... -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 offset to playerstats -ADDU T6,T9,T5 -LW T7,0024 (T6) T7=player kill register -SUBU A0,A0,T7 A-=playerkill keeps a running tally -//7F0C39B0: -ADDIU T1,T1,0001 next testchar -BNE V0,T1,7F0C3968 loop until A0=full player score -NOP -BEQ T1,T2,7F0C3AF8 -//7F0C39C0: -ADDIU V0,A1,FFFF V0=player#-1 -ADDIU A2,A1,FFFE A2=player#-2 -ADDIU A3,A1,FFFD A3=player#-3 -//7F0C39CC: -BEQ T1,A1,7F0C39F8 -SLL T8,T1,0x3 -SLL T8,A1,0x3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 T9=offset to playerstats -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,0024 (T6) T7= -BEQ R0,R0,7F0C3A14 -ADDU A0,A0,T7 -//7F0C39F8: suicide counts... -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0024 (T6) -SUBU A0,A0,T7 -//7F0C3A14: -BEQ T1,V0,7F0C3A40 -SLL T8,T1,0x3 -SLL T8,A1,0X3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 T9=playerstats -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,0028 (T6) P2 kills... -BEQ R0,R0,7F0C3A5C -ADDU A0,A0,T7 -//7F0C3A40: -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 T9=playerstats -SLL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0094 (T6) uh, next player's kill totals... -SUBU A0,A0,T7 -//7F0C3A5C: -BEQ T1,A2,7F0C3A88 -SLL T8,T1,0x3 -SLL T8,A1,0x3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,002C (T6) P3's kills... -BEQ R0,R0,7F0C3AA4 -ADDU A0,A0,T7 -//7F0C3A88: -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0104 (T6) third player's kill totals... -SUBU A0,A0,T7 -//7F0C3AA4: -BEQ T1,A3,7F0C3AD0 -SLL T8,T1,0x3 -SLL T8,A1,0x3 -SUBU T8,T8,A1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,T1,0x2 -ADDU T6,T9,T5 -LW T7,0030 (T6) P4 kills -BEQ R0,R0,7F0C3AEC -ADDU A0,A0,T7 -//7F0C3AD0: -SUBU T8,T8,T1 -SLL T8,T8,0x4 -ADDU T9,V1,T8 -SLL T5,A1,0x2 -ADDU T6,T9,T5 -LW T7,0174 (T6) fourth player's kills... -SUBU A0,A0,T7 -ADDIU T1,T1,0004 -BNE T1,T2,7F0C39CC -NOP -//7F0C3AF8: -LW T8,0020 (T3) T8=0x20 in player stats... -ADDIU T9,T2,FFFE T9=#players-2 -MULTU T8,T9 -MFLO T5 -ADDU A0,A0,T5 -BEQ R0,R0,7F0C3C84 -LW RA,0014 (SP) - -... 7F0C3B14: You Only Live Twice -LBU T6,0068 (T3) T6=death counter -ADDIU T7,R0,0004 T7=4 -BEQ R0,R0,7F0C3C80 -SUBU A0,T7,T6 A0=4-death counter - -... 7F0C3B24: The Living Daylights -BEQ R0,R0,7F0C3C80 -LW A0,0060 (T3) A0=flag timer counter - -... 7F0C3B2C: Teams -BLEZ T2,7F0C3C80 Should be valid # players -OR T1,R0,R0 T1=0 -LUI T4,8008 -ADDIU T4,T4,9EF0 T4=80079EF0=player stat offset -//7F0C3B3C: -LBU T8,0069 (T4) T8=Flag/GG ownership//Team flag -BNEL A3,T8,7F0C3C78 if flag doesn't match player flag, next! -ADDIU T1,T1,0001 -BLEZ T2,7F0C3C74 loop until out of players -OR A1,R0,R0 A1=0 -SLL T9,T1,0x3 -SUBU T9,T9,T1 -LUI T5,8008 -ADDIU T5,T5,9EF0 T5=80079EF0 -SLL T9,T9,0x4 T9=matching player # * 0x70 -ANDI T0,T2,0003 -BEQ T0,R0,7F0C3BC0 -ADDU T3,T9,T5 -SLL T7,R0,0x3 -SUBU T7,T7,R0 -SLL T7,T7,0x4 -SLL T6,R0,0x2 -ADDU V0,T3,T6 -ADDU V1,T7,T5 -OR A2,T0,R0 -//7F0C3B8C: -LBU T8,0069 (V1) -ADDIU A1,A1,0001 -ADDIU V1,V1,0070 -BEQL A3,T8,7F0C3BB0 -LW T7,0024 (V0) -LW T9,0024 (V0) -BEQ R0,R0,7F0C3BB4 -ADDU A0,A0,T9 -//7F0C3BAC: -LW T7,0024 (V0) -//7F0C3BB0: -SUBU A0,A0,T7 -//7F0C3BB4: -BNE A2,A1,7F0C3B8C -ADDIU V0,V0,0004 -BEQ A1,T2,7F0C3C74 -//7F0C3BC0: -SLL T5,A1,0x3 -SUBU T5,T5,A1 -LUI T6,8008 -ADDIU T6,T6,9EF0 -SLL T5,T5,0x4 -SLL A2,A1,0x2 -ADDU V0,T3,A2 -ADDU V1,T5,T6 -SLL T0,T2,0x2 -//7F0C3BE4: -LBU T8,0069 (V1) -ADDIU A2,A2,0010 -BEQL A3,T8,7F0C3C04 -LW T7,0024 (V0) -LW T9,0024 (V0) -BEQ R0,R0,7F0C3C08 -ADDU A0,A0,T9 -//7F0C3C00: -LW T7,0024 (V0) -//7F0C3C04: -SUBU A0,A0,T7 -//7F0C3C08: -LBU T5,00D9 (V1) -BEQL A3,T5,7F0C3C24 -LW T8,0028 (V0) -LW T6,0028 (V0) -BEQ R0,R0,7F0C3C28 -ADDU A0,A0,T6 -//7F0C3C20: -LW T8,0028 (V0) -//7F0C3C24: -SUBU A0,A0,T8 -//7F0C3C28: -LBU T9,0149 (V1) -BEQL A3,T9,7F0C3C44 -LW T5,002C (V0) -LW T7,002C (V0) -BEQ R0,R0,7F0C3C48 -ADDU A0,A0,T7 -//7F0C3C40: -LW T5,002C (V0) -//7F0C3C44: -SUBU A0,A0,T5 -//7F0C3C48: -LBU T6,01B9 (V1) -ADDIU V1,V1,01C0 -BEQL A3,T6,7F0C3C68 -LW T9,0030 (V0) -LW T8,0030 (V0) -BEQ R0,R0,7F0C3C6C -ADDU A0,A0,T8 -//7F0C3C64: -LW T9,0030 (V0) -//7F0C3C68: -SUBU A0,A0,T9 -//7F0C3C6C: -BNE A2,T0,7F0C3BE4 -ADDIU V0,V0,0010 -//7F0C3C74: -ADDIU T1,T1,0001 -BNE T1,T2,7F0C3B3C -ADDIU T4,T4,0070 -//7F0C3C80: return... -LW RA,0014 (SP) -ADDIU SP,SP,0038 -OR V0,A0,R0 V0=A0=score data -JR RA -NOP - -======================================== -======================================== - -Flag possession tests - -basically, anything that calls this bugger: - --7F08CF80: test if possess flag -LUI T6,8008 -LW T6,A0B0 (T6) //T6=cur.player data -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW T7,00D8 (T6) //T7=player death attrib -OR V0,R0,R0 -BNEZ T7,7F08CFB0 //skip if player dead or dying -NOP -JAL 7F08C314 //returns V0=1 if flag posessed -ADDIU A0,R0,0058 -BEQ R0,R0,7F08CFB4 -LW RA,0014 (SP) -//7F08CFB0: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP ----------------------- - -part of larger routine... -//7F083DAC: -ADDIU T2,R0,0001 -JAL 7F09A464 V0=#players -SW T2,0074 (SP) -SLTIU AT,V0,0002 -BNEL AT,R0,7F083DF0 -LW T3,0074 (SP) -JAL 7F014758 V0=scenario -NOP -ADDIU AT,R0,0002 -BNEL V0,AT,7F083DF0 skip if flag tag -LW T3,0074 (SP) -//7F083DD8: flag-specific code -JAL 7F08CF80 return V0=1 if holding flag -NOP -BEQL V0,R0,7F083DF0 -LW T3,0074 (SP) -SW R0,0074 (SP) trash SP+0x74 if flag held (disable inventory) -LW T3,0074 (SP) T3=1 -//7F083DF0: -BEQL T3,R0,7F083E24 -LW T8,01BC (SP) -LW T5,0174 (SP) -BEQL T5,R0,7F083E10 -LW T4,0170 (SP) -JAL 7F05D768 -NOP -LW T4,0170 (SP) -//7F083E10: -BEQL T4,R0,7F083E24 -LW T8,01BC (SP) -JAL 7F05D6D0 -NOP -LW T8,01BC (SP) -//7F083E24: -BEQL T8,R0,7F083E3C -LW T7,01B8 (SP) -LW T6,0000 (S0) -BEQ R0,R0,7F083E50 -SW R0,0430 (T6) -//7F083E3C: -BEQL T7,R0,7F083E54 -LW T3,0000 (S0) -LW T2,0000 (S0) -ADDIU T9,R0,0002 -SW T9,0430 (T2) -//7F083E50: -LW T3,0000 (S0) -LW V0,0430 (T3) -BNEL V0,R0,7F083F64 -ADDIU AT,R0,0002 -JAL 7F067AA4 -OR A0,R0,R0 -...ETC... - - -ANOTHER ROUTINE -//7F0BFA30: this is used to force the flag out when owned - 0xF4560-E -0FC051D6 JAL 7F014758 V0=scenario -E4460038 SWC1 F6,0038 (V0) -24010002 ADDIU AT,R0,0002 -14410024 BNE V0,AT,7F0BFAD0 skip if not flag tag -00000000 NOP -0FC233E0 JAL 7F08CF80 V0=1 if flag held -00000000 NOP -1040001C BEQ V0,R0,7F0BFAC0 skip if flag not held -00000000 NOP -0FC17674 JAL 7F05D9D0 V0=weapon# in use -00002025 OR A0,R0,R0 check right gun (A0=0) -24010058 ADDIU AT,R0,0058 -1041000B BEQ V0,AT,7F0BFA90 if flag already set get to scoring -00002025 OR A0,R0,R0 draw right weapon (A0=0) -0FC17645 JAL 7F05D914 1st person draw weapon -24050058 ADDIU A1,R0,0058 draw flag (A1=58) -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) V0=current player data -24010002 ADDIU AT,R0,0002 AT=2 -24090005 ADDIU T1,R0,0005 T1=5 -8C480894 LW T0,0894 (V0) FIDDLE with the weapon state flag -15010002 BNE T0,AT,7F0BFA90 if playerdata+0x894==2, set to 5 -00000000 NOP -AC490894 SW T1,0894 (V0) set playerdata+0x894 to 5 -//7F0BFA90: advance flag time and set flag ownership -3C038008 LUI V1,8008 -2463A0B4 ADDIU V1,V1,A0B4 -8C620000 LW V0,0000 (V1) V0=current player stat pointer -3C0B8005 LUI T3,8005 -8D6B8374 LW T3,8374 (T3) T3=1 if not paused (used to advance flag time) -8C4A0060 LW T2,0060 (V0) T2=flag held time -240D0001 ADDIU T5,R0,0001 -014B6021 ADDU T4,T2,T3 -AC4C0060 SW T4,0060 (V0) advance flag held time one more millisecond -8C6E0000 LW T6,0000 (V1) T6=current player stat pointer -10000015 BEQ R0,R0,7F0BFB10 -A1CD0069 SB T5,0069 (T6) 1->flag byte -//7F0BFAC0: flag not held... -3C0F8008 LUI T7,8008 -8DEFA0B4 LW T7,A0B4 (T7) T7=current player stat pointer -10000011 BEQ R0,R0,7F0BFB10 -A1E00069 SB R0,0069 (T7) blank the flag byte -//7F0BFAD0: -0FC051D6 JAL 7F014758 -00000000 NOP - - -also.. -//7F050A94: -ADDIU AT,R0,0002 -BNE V0,AT,7F050ABC branch if not flag tag -OR V1,V0,R0 -JAL 7F08CF80 V0=1 if flag held -SW V0,0059 (SP) -BEQ V0,R0,7F050ABC ;branch if not yours -LW V1,0058 (SP) -ADDIU T1,R0,0001 -BEQ R0,R0,7F050ADC -SW T1,005C (SP) ;1->SP+5C -//7F050ABC: -ADDIU AT,R0,0003 -BNEL V1,AT,7F050AE0 branch if not MwtGG -LW T3,005C (SP) -JAL 7F08CFC0 V0=1 if GG held -NOP -BEQ V0,R0,7F050ADC -ADDIU T2,R0,0001 -SW T2,005C (SP) ;1->SP+5C -//7F050ADC: -LW T3,005C (SP) -BEQ T3,R0,7F050AF0 other scenarios... -NOP -BEQ R0,R0,7F050D20 if either are held, end the routine... -OR V0,R0,R0 - - -7F0503F0: test if remote mines -ADDIU AT,R0,001D -LB A0,0080 (T5) -BNEL A0,AT,7F050414 -ADDIU AT,R0,0058 -//7F000400: add detonator too! -JAL 7F08C488 -ADDIU A0,R0,001E -BEQ R0,R0,7F050428 -LW T6,006C (SP) -//7F050410: Test if collected item is the flag. If so, place in hand -ADDIU AT,R0,0058 //this command is missed when jump used (7F0503F8) -BNE A0,AT,7F050424 [beq r0,r0 etc 10000003 disables flag draw thingy] -ADDIU A1,R0,0058 -JAL 7F05D914 -OR A0,R0,R0 -//7F050424: I think this is the left-hand weapon test -LW T6,006C (SP) -LW T9,0048 (SP) //T9=object data pointer -LW T7,0064 (T6) //This should be the runtime bitflag field being tested for 00000400 -ANDI T8,T7,0400 -BEQ T8,R0,7F0504A4 -NOP -LB T0,0080 (T9) -SLTI AT,T0,0021 - - - - -read amount of ammo for weapon A0 current player has -7F069450: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F05C8B4 V0=address of weapon A0's data -NOP -LW T7,001C (V0) T7=ammo type -LUI T6,8008 -LW T6,A0B0 (T6) -LW RA,0014 (SP) -SLL T8,T7,0x2 T8=ammo type->offset -ADDU T9,T6,T8 -LW V0,1130 (T9) V0=amount of ammo owned by current player -JR RA -ADDIU SP,SP,0018 \ No newline at end of file diff --git a/notes/GE Documentation/Multiplayer/setting default MP player settings.txt b/notes/GE Documentation/Multiplayer/setting default MP player settings.txt deleted file mode 100644 index da998f0..0000000 --- a/notes/GE Documentation/Multiplayer/setting default MP player settings.txt +++ /dev/null @@ -1,117 +0,0 @@ -NTSC USA list of addresses -rom address given first, then TLB address, ASM, then description -Except for the last section specificly stating 21990 mods, all addresses given are actual rom addresses. -These affect TLB-loaded routines used to set default multiplayer values. - - -45188 7F010658 ADDIU T1,R0,0005 -Sets player default handicap to 5 (normal) - -45230 7F010700 ADDIU T3,R0,0001 -Sets default MP stage to slot 2 (Temple, unless hacked) -Possible values 0-B - - -Note: Settings below are the default reset values, used when scenarios are selected. - Setting them affects all scenarios! - You can use it to block off health/aim/etc. settings for tournament play - -44FAC 7F01047C AC22B544 SW V0,B544 (AT) -lock (R0~AC20B544) or unlock (V0~AC22B544) stage select - -44FB4 7F010484 AC22B548 SW V0,B548 (AT) -lock (R0) or unlock (V0) game length - -44FBC 7F01048C AC22B54C SW V0,B54C (AT) -lock (R0) or unlock (V0) character select - -44FC4 7F010494 AC22B550 SW V0,B550 (AT) -lock (R0) or unlock (V0) weapon select - -44FCC 7F01049C AC22B554 SW V0,B554 (AT) -lock (R0) or unlock (V0) health - -44FD4 7F0104A4 AC22B558 SW V0,B558 (AT) -lock (R0) or unlock (V0) control style - -44FDC 7F0104AC AC22B55C SW V0,B55C (AT) -lock (R0) or unlock (V0) aim adjustment - -45020 7F0104F0 24180002 ADDIU T8,R0,0002 -Normal and Team default game length -Valid Entries: 0-6 (7 if manually set for 'Last Person Alive' entry) - -45040 7F010510 2404000D ADDIU A0,R0,000D -Normal and Team default selected weapon (golden gun) -Valid entries: 0-D - -45054 7F010524 24190007 ADDIU T9,R0,0007 -'You Only Live Twice' default game length (Last Person Alive) - -45070 7F010540 2404000D ADDIU A0,R0,000D -'You Only Live Twice' default selected weapon - -4507C 7F01054C AC20B548 SW R0,B548 (AT) -'You Only Live Twice' game length lock -Set to NOP to keep game length unlocked - -4508C 7F01055C 24090002 ADDIU T1,R0,0002 -'The Living Daylights' default game length -Valid entries: 0-3 (all are valid with flag-tag patch) - -450B8 7F010588 2404000D ADDIU A0,R0,000D -'The Living Daylights' default selected weapon - -450D0 7F0105A0 240B0002 ADDIU T3,R0,0002 -'Man with the Golden Gun' default game length - -450E8 7F0105B8 2404000D ADDIU A0,R0,000D -'Man with the Golden Gun' default selected weapon -Don't change this without hacking the scenario, as it tests actual pickup type for scoring -Without a GG, the scenario will not work! - -450F4 7F0105C4 AC20B550 SW R0,B550 (AT) -'Man with the Golden Gun' weapon select lock -Set to NOP to allow weapon selection. -Don't change this without hacking the scenario, as it tests actual pickup type for scoring -Without a GG, the scenario will not work! - -45100 7F0105D0 240D0002 ADDIU T5,R0,0002 -'License to Kill' default game length - -45118 7F0105E8 0FC3198C JAL 7F0C6630 -'License to Kill' weapon reset -NOP this to avoid resetting the weapon - -4511C 7F0105EC 24040001 ADDIU A0,R0,0001 -'License to Kill' default selected weapon - -45124 7F0105F4 AC20B554 SW R0,B554 (AT) -'License to Kill' handicap lock -NOP to remove the lock on the handicap menu - - -21990 addresses for other defautl values: -0xA7AB game length - 0 unlimitted - 1 5 Minutes - 2 10 Minutes - 3 20 Minutes - 4 5 Kills - 5 10 Kills - 6 20 Kills - 7 Last Person Alive Wins - -0xA7AF aim (xxx1) and sight(xx1x) - 0 sight off / aim off - 1 sight on / aim off - 2 sight off / aim on - 3 sight on / aim on - -0xA7B3 scenario - 0 Normal - 1 You Only Live Twice - 2 The Living Daylights - 3 Man with the Golden Gun - 4 License to Kill - 5 Team (all settings) diff --git a/notes/GE Documentation/Music and Sound Effects/7F027060 - play sound for shot actor.txt b/notes/GE Documentation/Music and Sound Effects/7F027060 - play sound for shot actor.txt deleted file mode 100644 index 838286b..0000000 --- a/notes/GE Documentation/Music and Sound Effects/7F027060 - play sound for shot actor.txt +++ /dev/null @@ -1,217 +0,0 @@ -7F027060 5BB90 play sound when shot actor - accepts: A0=p->GUARDdata -ADDIU SP,SP,FF98 -SW RA,0014 (SP) -SW A0,0068 (SP) ;SP+68=A0: p->GUARDdata -LW A1,0018 (A0) ;A1=p->pos.data (8006) -ADDIU AT,R0,0006 -OR V1,R0,R0 ;V1=0 female -LBU T7,0000 (A1) ;T7=pos.data+0: entry.type -OR A0,A1,R0 ;A0=A1: p->pos.data -BNEL T7,AT,7F0270B4 ;branch if not 6: player -LW T1,0068 (SP) -//7F027088: handle player entries -JAL 7F09B15C ;V0=cur.player# -SW R0,0060 (SP) ;SP+60=0 -SLL T8,V0,0x2 ;T8=player#->offset -LUI T9,8008 -ADDU T9,T9,T8 -LW T9,9EE0 (T9) ;T9=80079EE0+offset: p->BONDdata -LW V1,0060 (SP) ;V1=SP+60: default gender -LW T0,00D8 (T9) ;T0=TRUE if player controlled -BNEL T0,R0,7F027270 ;return if player in active whatnot -LW RA,0014 (SP) -//7F0270B0: -LW T1,0068 (SP) ;T1=p->GUARDdata -ADDIU AT,R0,0006 -LW T9,0068 (SP) ;T9=p->GUARDdata -LW T2,0018 (T1) ;T2=p->pos.data (8006) -LBU T3,0000 (T2) ;T3=entry.type -BNEL T3,AT,7F02713C ;branch if not 6: player -LB T0,000F (T9) -//7F0270CC: handle players: solo -JAL 7F09A464 ;V0=#players -SW V1,0060 (SP) ;SP+60=default gender -ADDIU AT,R0,0001 -BNE V0,AT,7F027110 ;branch if multiplayer -LW V1,0060 (SP) ;V1=default gender: male -LW T4,0068 (SP) ;T4=p->GUARDdata -LUI T7,8004 -LB T5,000F (T4) ;T5=GUARDdata+F: body -SLL T6,T5,0x2 -ADDU T6,T6,T5 -SLL T6,T6,0x2 ;T6=body*14: offset -ADDU T7,T7,T6 -LBU T7,DE20 (T7) ;T7=8003DE20+offset: gender -BEQ T7,R0,7F027160 ;branch if female -NOP -BEQ R0,R0,7F027160 -ADDIU V1,R0,0001 ;V1=1: male -//7F027110: multiplayer -LW T8,0068 (SP) ;T8=p->GUARDdata -LW A0,0018 (T8) ;A0=p->pos.data -JAL 7F09B15C ;V0=cur.player# -SW V1,0060 (SP) ;SP+60= default gender -JAL 7F01030C ;MP yelps for player A0 -OR A0,V0,R0 ;A0=V0: player# -BEQ V0,R0,7F027160 ;branch if female -LW V1,0060 (SP) ;V1=default: female -BEQ R0,R0,7F027160 -ADDIU V1,R0,0001 ;V1=1: male -//7F027138: other actors -LB T0,000F (T9) ;T0=GUARDdata+F: body -LUI T2,8004 -SLL T1,T0,0x2 -ADDU T1,T1,T0 -SLL T1,T1,0x2 ;T1=body*0x14: offset -ADDU T2,T2,T1 -LBU T2,DE20 (T2) ;T2=8003DE20+offset: gender flag -BEQ T2,R0,7F027160 ;branch if female -NOP -ADDIU V1,R0,0001 ;V1=1 if male -//7F027160: handle male sounds -BEQ V1,R0,7F0271F8 ;branch if female -LUI T0,8003 -LUI T3,8003 -ADDIU V0,SP,0028 ;V0=SP+28: buffer -ADDIU T3,T3,09F8 ;T3=800309F8 start -ADDIU T5,T3,0030 ;T5=80030A28 end -OR T6,V0,R0 ;T6=V0: buffer -//7F02717C: copy male sounds to buffer -LW AT,0000 (T3) -ADDIU T3,T3,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T3) -SW AT,FFF8 (T6) -LW AT,FFFC (T3) -BNE T3,T5,7F02717C -SW AT,FFFC (T6) -//7F0271A0: grab and play sound -LHU AT,0000 (T3) -LUI T7,8003 -LUI A0,8006 -SH AT,0000 (T6) -LW T7,0A34 (T7) ;T7=80030A34: cur.male SE -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -OR A2,R0,R0 ;A2=NULL -SLL T8,T7,0x1 ;T8=selection->offset -ADDU T9,V0,T8 ;T9=table.copy + offset: p->SE -JAL 70008E08 ;play sound effect A1 -LH A1,0000 (T9) ;A1=male SE -//7F0271CC: update cur.male SE -LUI V1,8003 -LW V1,0A34 (V1) ;V1=80030A34: cur.male SE -LUI AT,8003 -OR A0,V0,R0 ;A0=V0: p->SE entry -ADDIU V1,V1,0001 ;V1++ next sound -SW V1,0A34 (AT) ;update cur.male SE -SLTI AT,V1,0019 ;TRUE if within table -BNEZ AT,7F02725C ;branch if within table -LUI AT,8003 -BEQ R0,R0,7F02725C -SW R0,0A34 (AT) ;0->80030A34: roll around cur.male SE -//7F0271F8: handle female sounds -ADDIU T0,T0,0A2C ;T0=80030A2C -LW AT,0000 (T0) ;AT=80030A2C: female SEs -ADDIU V0,SP,0020 ;V0=SP+20: buffer -LUI T5,8003 -SW AT,0000 (V0) ;copy female SEs to buffer -LHU AT,0004 (T0) -//7F027210: retrieve and play female SE -LUI A0,8006 -OR A2,R0,R0 ;A2=NULL -SH AT,0004 (V0) ;copy female SEs to buffer -LW T5,0A38 (T5) ;T5=80030A38: cur.female SE -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -SLL T3,T5,0x1 ;T3=cur.SE->offset -ADDU T6,V0,T3 ;T6=table.copy + offset: p->cur.female SE -JAL 70008E08 ;play sound effect A1 -LH A1,0000 (T6) ;A1=female SE -//7F027340: update cur.female SE -LUI V1,8003 -LW V1,0A38 (V1) ;V1=80030A38: cur.female SE -LUI AT,8003 -OR A0,V0,R0 ;A0=V0: p->SE entry -ADDIU V1,V1,0001 ;V1++ next SE -SW V1,0A38 (AT) ;update cur.female SE -SLTI AT,V1,0003 ;TRUE if within table -BNEZ AT,7F02725C ;branch if within table -LUI AT,8003 -SW R0,0A38 (AT) ;0->cur.female SE: roll around table -//7F02725C: set sound source -LW T7,0068 (SP) ;T7=p->GUARDdata -LW A1,0018 (T7) ;A1=GUARDdata+18: p->pos.data -JAL 7F053A10 -ADDIU A1,A1,0008 ;A1=pos.data+8: p->xyz positions -//7F02726C: return -LW RA,0014 (SP) -ADDIU SP,SP,0068 -JR RA -NOP - -+_+ - -7F023290 57DC0 load body/head entry A0 if not already loaded - accepts: A0=body/head# -SLL T6,A0,0x2 -ADDU T6,T6,A0 -LUI T7,8004 -ADDIU T7,T7,DE10 ;T7=8003DE10 -SLL T6,T6,0x2 -ADDU V0,T6,T7 ;V0=8003DE10+offset: entry for specific body/head -LW A2,0000 (V0) ;A2=p->obj.header -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW T8,0000 (A2) ;T8=header+0: p->obj.table or NULL -OR A0,A2,R0 ;A0=A2: p->obj.table -BNEL T8,R0,7F0232D8 ;return FALSE if already loaded -OR V0,R0,R0 -JAL 7F07654C ;load object A1 into memory using header A0 -LW A1,0004 (V0) ;A1=p->recall string -BEQ R0,R0,7F0232D8 ;return TRUE when loaded -ADDIU V0,R0,0001 -//7F0232D4: return FALSE -OR V0,R0,R0 -//7F0232D8: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -+_+ - -7F028DA0 5D8D0 play SE for hit actor at appropriate volume - accepts: A0=p->GUARDdata -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -808E000F LB T6,000F (A0) ;T6=GUARDdata+F: body -3C068004 LUI A2,8004 -90850059 LBU A1,0059 (A0) ;A1=GUARDdata+59: distance counter... -000E7880 SLL T7,T6,0x2 -01EE7821 ADDU T7,T7,T6 -000F7880 SLL T7,T7,0x2 ;T7=body * 0x14: offset -00CF3021 ADDU A2,A2,T7 -0FC0A297 JAL 7F028A5C ; -90C6DE20 LBU A2,DE20 (A2) ;A2=8003DE20+offset: gender flag -//7F028DCC: return -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - -+_+ - -7F053A10 88540 set source for sound effect to position - accepts: A0=p->SE entry, A1=p->(float) xyz positions -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A2,459C -LUI A3,45BB -ORI A3,A3,8000 ;A3=6000.0 [45BB8000] -JAL 7F05396C -ORI A2,A2,4000 ;A2=5000.0 [459C4000] -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Music and Sound Effects/Music table format.txt b/notes/GE Documentation/Music and Sound Effects/Music table format.txt deleted file mode 100644 index 5f399ca..0000000 --- a/notes/GE Documentation/Music and Sound Effects/Music table format.txt +++ /dev/null @@ -1,12 +0,0 @@ - Music table occurs at 0x419790 (NGEE). First entry is a short indicating number of samples (0x3F). A list of sample entries starts at 0x419794: -0x0 4 offset from 0x419790 to music data -0x4 2 size of data decompressed -0x6 2 size of data compressed - Samples are 1172 compressed. - - Internal format differs slightly from normal music macros. Each is preceeded by a table of offsets. Once music data can be parsed these can be identified more clearly. -0x0 4 offset in file to start of music data. This is usually 0x44, so I'm using that in this example -0x4+ 4 table of long values, probably indicating loop points or other data deemed imporatant -data-4 4 always 0x180. Unsure usage, though probably indicates some playback feature like "loop me" or rate -0x44 ~ music data - diff --git a/notes/GE Documentation/Music and Sound Effects/Play, load, a unload music.txt b/notes/GE Documentation/Music and Sound Effects/Play, load, a unload music.txt deleted file mode 100644 index ef1a840..0000000 --- a/notes/GE Documentation/Music and Sound Effects/Play, load, a unload music.txt +++ /dev/null @@ -1,197 +0,0 @@ -70006E7C 7A7C play music track A0 - accepts: A0=music track# -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: nonzero when sound can't be played... -ADDIU SP,SP,DEB8 -SW RA,001C (SP) -SW S0,0018 (SP) -BNEZ T6,70006FBC ;return if sound can't be played -SW A0,2148 (SP) ;SP+2148= A0: track# -LUI T7,8002 -LW T7,4334 (T7) ;T7=80024334: cur.track# -BEQL T7,R0,70006EB4 ;branch if nothing playing -LW T8,2148 (SP) -JAL 70006FD0 ;stop playing first music track -NOP -//70006EB0: set new track number and wait for previous to stop -LW T8,2148 (SP) ;T8=track# -LUI S0,8006 -LUI AT,8002 -ADDIU S0,S0,3728 ;S0=80063728: p->1st.music controller block -SW T8,4334 (AT) ;track#->80024334: set new track number -JAL 70012230 ;TRUE if playing -LW A0,0000 (S0) ;A0=80063728: p->1st.music controller block -BEQ V0,R0,70006EE4 ;branch if not playing -NOP -//70006ED4: loop until not playing... -JAL 70012230 ;TRUE if playing -LW A0,0000 (S0) ;A0=80063728: p->1st.music controller block -BNEZ V0,70006ED4 ;loop until stopped playing -NOP -//70006EE4: -LUI A3,8002 -LW A3,4334 (A3) ;A3=80024334: track# -LUI T9,8006 -LW T9,3734 (T9) ;T9=80063734: p->music data table -SLL T1,A3,0x3 ;T1=track * 8: offset -LUI AT,0001 -ADDU T2,T9,T1 ;T2=music.data + offset -LW A1,0004 (T2) ;A1=ROM address for track -LUI V1,8006 -SLL V0,A3,0x1 ;V0=track*2 -SLTU AT,A1,AT ;TRUE if address < 00010000, which is used as NULL entry -BEQ AT,R0,70006F28 ;branch if valid entry -ADDU V1,V1,V0 -//70006F18: play default music, solo death -JAL 70006E7C ;play music A0 -ADDIU A0,R0,0001 ;A0=1: solo death -BEQ R0,R0,70006FC0 -LW RA,001C (SP) -//70006F28: load compressed music file from ROM -LHU V1,3738 (V1) ;V1=80063738+offset: decompressed size, to nearest halword boundry -LUI A2,8006 -ADDU A2,A2,V0 -LHU A2,37B8 (A2) ;A2=800637B8+offset: compressed size, to nearest halword boundry, which they already are... -LUI T0,8006 -ADDIU V1,V1,000F -LW T0,3838 (T0) ;T0=80063838: p->decompression target address -ORI T3,V1,000F -XORI T4,T3,000F ;T4=decompressed size, to 0x10 boundry -ADDIU A2,A2,000F -ADDIU V1,T4,0040 ;V1=dec.size+0x40 -ORI T5,A2,000F -XORI A2,T5,000F ;A2=compressed size, to 0x10 boundry -ADDU T7,T0,V1 ;T7=address + suspected size -SUBU A0,T7,A2 ;A0=address + suspected size - comp.size -SW A0,0028 (SP) ;SP+28= address+difference in dec and comp sizes -JAL 70005C1C ;loads A2 bytes from A1 to A0: comp.size from ROM to end of target buffer -SW T0,2140 (SP) ;SP+2140= p->target -//70006F70: -LW A0,0028 (SP) ;A0=p->compressed -LW A1,2140 (SP) ;A1=p->decompressed -JAL 7F0CE7F0 ;decompress data A0 to A1, advancing past header -ADDIU A2,SP,0034 ;A2=SP+34: -//70006F80: play the track (maybe...) -LUI A0,8006 -LUI A1,8006 -LW A1,3838 (A1) ;A1=80063838: p->music binary -JAL 7001279C -ADDIU A0,A0,3860 ;A0=80063860: -JAL 70012D00 ;do something to music at controller A0 -LW A0,0000 (S0) ;A0=80063728: p->1st.music controller block -JAL 70007030 ;V0=80024338: -NOP -JAL 7000703C ;sets something for currently running music track -ANDI A0,V0,FFFF ;A0=V0-1: -JAL 70012D40 ;do something to music at controller A0 -LW A0,0000 (S0) ;A0=80063728: p->1st.music controller block -//70006FBC: -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,2148 -JR RA -NOP - - -70006FD0 7BD0 stop playing first music track -LUI T6,8002 -LB T6,43F8 (T6) ;T6=800243F8: TRUE if can't play sound -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BNEZ T6,70007020 ;return if can't play sound -LUI T7,8002 -LW T7,4334 (T7) ;T7=80024334: cur.track# -LUI AT,8002 -SW R0,434C (AT) ;0->8002434C: -BEQ T7,R0,70007018 ;branch if track 0: no music -LUI A0,8006 -JAL 70012230 ;V0=A0+2C: TRUE if playing -LW A0,3728 (A0) ;A0=80063728: p->1st.music controller block -ADDIU AT,R0,0001 -BNE V0,AT,70007018 ;branch if not playing -LUI A0,8006 -JAL 70012D70 ;do something to music at controller A0 -LW A0,3728 (A0) ;A0=80063728: p->1st.music controller -//70007018: kill music: track#=0 -LUI AT,8002 -SW R0,4334 (AT) ;0->80024334: track 0 -//70007020: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -7000703C 7C3C ??? - sets something for currently running music track... - accepts: A0=value -LUI T6,8002 -LW T6,4334 (T6) ;T6=80024334: music track# -LUI T8,8002 -ANDI A2,A0,FFFF ;A2=(short) A0 -SLL T7,T6,0x1 -ADDU T8,T8,T7 -LH T8,4358 (T8) ;T8=80024358+offset: value for track in bank -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) ;SP+18= A0 -MULTU A2,T8 -SW RA,0014 (SP) -LUI AT,8002 -LUI A0,8006 -SH A2,4338 (AT) ;(short) A0->80024338: -LW A0,3728 (A0) ;A0=80063728: p->1st.music controller block -MFLO V0 ;V0=value * A0: -SRL T9,V0,0xF -SLL A1,T9,0x10 ;A1=(value * A0)*2 & FFFF0000 -SRA T0,A1,0x10 -JAL 70012DA0 -OR A1,T0,R0 ;A1=upper short of 2(value * A0) -//70007090: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -700091E8 9DE8 set first 7 entries in [@80063BA8] table to A0 - accepts: A0=value -ADDIU SP,SP,FFE0 -SW S1,0018 (SP) -SW S0,0014 (SP) -ANDI S1,A0,FFFF ;S1=(short) A0 -SW RA,001C (SP) -SW A0,0020 (SP) -OR S0,R0,R0 ;S0=0 count -//70009204: -ANDI A0,S0,00FF ;A0=entry# -JAL 70009284 ;set entry A0 to A1 in @80063BA8 table, sorta-kinda -ANDI A1,S1,FFFF ;A1=value -ADDIU S0,S0,0001 ;S0++ count++ -ANDI T6,S0,00FF -SLTI AT,T6,0007 ;TRUE if 0-6 -BNEZ AT,70009204 ;loop for 7 ou of 8 entries -OR S0,T6,R0 -//70009224: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0020 - -70012DA0 139A0 ??? - tied to sound effects - accepts: A0=p->???, A1=value -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A1,002C (SP) ;SP+2C= A1 -OR T6,A1,R0 -ADDIU T7,R0,000A -SH T7,0018 (SP) ;SP+18= 0xA<<10 -SH T6,001C (SP) ;SP+1C= A1<<10 -ADDIU A1,SP,0018 ;A1=p->four values on stack -ADDIU A0,A0,0048 ;A0+=48: -JAL 70012EFC -OR A2,R0,R0 ;A2=0 -//70012DCC: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP diff --git a/notes/GE Documentation/Music and Sound Effects/SEgrab.txt b/notes/GE Documentation/Music and Sound Effects/SEgrab.txt deleted file mode 100644 index b598912..0000000 --- a/notes/GE Documentation/Music and Sound Effects/SEgrab.txt +++ /dev/null @@ -1,135 +0,0 @@ -ADDIU SP, SP, 0xFF80 -LUI T7, 0x8002 -LB T7, 0x43F8 (T7) -SW S1, 0x001C (SP) -SLL S1, A1, 0x10 -SRA T6, S1, 0x10 -SW S8, 0x0038 (SP) -SW S7, 0x0034 (SP) -SW S4, 0x0028 (SP) -OR S8, A0, R0 -OR S1, T6, R0 -SW RA, 0x003C (SP) -SW S6, 0x0030 (SP) -SW S5, 0x002C (SP) -SW S3, 0x0024 (SP) -SW S2, 0x0020 (SP) -SW S0, 0x0018 (SP) -SW A1, 0x0084 (SP) -SW A2, 0x0088 (SP) -OR S7, R0, R0 -SH R0, 0x006E (SP) -BEQ T7, R0, 0x70008E6C -OR S4, R0, R0 -BEQ R0, R0, 0x70008FF0 -OR V0, R0, R0 -BNEZ S1, 0x70008E7C -ADDIU S6, SP, 0x0050 -BEQ R0, R0, 0x70008FF0 -OR V0, R0, R0 -LUI S5, 0x8002 -ADDIU S5, S5, 0x43F0 -LW S3, 0x0064 (SP) -LW T8, 0x000C (S8) -SLL T9, S1, 0x2 -OR A0, S8, R0 -ADDU T0, T8, T9 -LW S2, 0x000C (T0) -JAL 0x70008B70 -OR A1, S2, R0 -BEQ V0, R0, 0x70008F48 -OR S0, V0, R0 -LW T1, 0x0000 (S5) -ADDIU T2, R0, 0x0001 -OR A1, S6, R0 -SW V0, 0x003C (T1) -SH T2, 0x0050 (SP) -SW V0, 0x0054 (SP) -LW T3, 0x0004 (S2) -LBU T5, 0x003E (V0) -LBU S3, 0x0001 (T3) -ANDI T6, T5, 0x0010 -SLL T4, S3, 0x6 -ADDU T4, T4, S3 -SLL T4, T4, 0x3 -ADDU T4, T4, S3 -SLL T4, T4, 0x2 -SUBU T4, T4, S3 -SLL T4, T4, 0x2 -ADDU T4, T4, S3 -SLL T4, T4, 0x2 -ADDU T4, T4, S3 -BEQ T6, R0, 0x70008F34 -OR S3, T4, R0 -LBU T7, 0x003E (V0) -OR A1, S6, R0 -ADDIU A2, S4, 0x0001 -ANDI T8, T7, 0xFFEF -SB T8, 0x003E (V0) -LW A0, 0x0000 (S5) -JAL 0x70012EFC -ADDIU A0, A0, 0x0014 -ADDIU T9, S3, 0x0001 -SW T9, 0x0068 (SP) -BEQ R0, R0, 0x70008F44 -SH S1, 0x006E (SP) -LW A0, 0x0000 (S5) -ADDIU A2, S3, 0x0001 -JAL 0x70012EFC -ADDIU A0, A0, 0x0014 -OR S7, S0, R0 -LW V0, 0x0004 (S2) -ADDU S4, S4, S3 -LBU T1, 0x0002 (V0) -LBU T0, 0x0000 (V0) -ANDI T2, T1, 0x00C0 -SLL T3, T2, 0x2 -ADDU S1, T0, T3 -SLL T4, S1, 0x10 -SRA S1, T4, 0x10 -BEQ S1, R0, 0x70008F80 -NOP -BNEL S0, R0, 0x70008E8C -LW T8, 0x000C (S8) -SW S3, 0x0064 (SP) -BEQL S7, R0, 0x70008FE0 -LW T4, 0x0088 (SP) -LBU T6, 0x003E (S7) -ADDIU T0, R0, 0x0200 -ADDIU A1, SP, 0x0040 -ORI T7, T6, 0x0001 -SB T7, 0x003E (S7) -LW T8, 0x0088 (SP) -ORI T2, T7, 0x0010 -SW T8, 0x0030 (S7) -LH T9, 0x006E (SP) -BEQL T9, R0, 0x70008FE0 -LW T4, 0x0088 (SP) -SB T2, 0x003E (S7) -LH T3, 0x006E (SP) -LW A0, 0x0000 (S5) -SH T0, 0x0040 (SP) -SW S7, 0x0044 (SP) -SW S8, 0x004C (SP) -LW A2, 0x0068 (SP) -SW T3, 0x0048 (SP) -JAL 0x70012EFC -ADDIU A0, A0, 0x0014 -LW T4, 0x0088 (SP) -OR V0, S7, R0 -BEQ T4, R0, 0x70008FF0 -NOP -SW S7, 0x0000 (T4) -LW RA, 0x003C (SP) -LW S0, 0x0018 (SP) -LW S1, 0x001C (SP) -LW S2, 0x0020 (SP) -LW S3, 0x0024 (SP) -LW S4, 0x0028 (SP) -LW S5, 0x002C (SP) -LW S6, 0x0030 (SP) -LW S7, 0x0034 (SP) -LW S8, 0x0038 (SP) -JR RA -ADDIU SP, SP, 0x0080 -ADDIU SP, SP, 0xFFD8 diff --git a/notes/GE Documentation/Music and Sound Effects/music controller block.txt b/notes/GE Documentation/Music and Sound Effects/music controller block.txt deleted file mode 100644 index 5a479a8..0000000 --- a/notes/GE Documentation/Music and Sound Effects/music controller block.txt +++ /dev/null @@ -1,52 +0,0 @@ -80063728: p->1st.music controller block -8006372C: p->2nd.music controller block -80063730: p->3rd.music controller block -80063734: p->music data table - - -Music Data Table Format: -0x0 2 #entries -0x2 2 RESERVED -0x4 var. entries - Format: 0x8 each entry - 0x0 4 ROM address - 0x4 2 decompressed size - 0x6 2 compressed size - - -Music Controller Block Format: 0x80 each, usually 4 allocated -0x0 4 p->prev.entry in table or NULL -0x4 4 p->this entry in table -0x8 4 ??? TLB pointer? usually 70011A6C -0xC 4 -0x10 2 positive value -0x12 2 negative value -0x14 4 p-> [8005E750] -0x18 4 p-> [80063860] -0x1C 2 [0411] -0x1E 2 [FE00] -0x20 4 p-> [802CB6B8] -0x24 4 -0x28 4 [3E80] -0x2C 4 1 when playing music -0x30 2 [00FF] -0x32 2 [6664] -0x34 4 [10000000] -0x38 4 [00090000] -0x3C 4 [00000050] -0x40 4 p-> [8005E750] -0x44 4 p-> [802CEA50] -0x48 4 p-> [802EC1BC] -0x4C 4 -0x50 4 p-> [802EC0C0] -0x54 4 -0x58 4 -0x5C 4 [3E80] -0x60 4 p->start of table [802EB690] -0x64 4 p-> [802EB8E0] -0x68 4 p-> [802EB918] -0x6C 4 p-> [802EB870] -0x70 4 -0x74 4 -0x78 4 -0x7C 4 \ No newline at end of file diff --git a/notes/GE Documentation/Music and Sound Effects/sound effects.txt b/notes/GE Documentation/Music and Sound Effects/sound effects.txt deleted file mode 100644 index 298db82..0000000 --- a/notes/GE Documentation/Music and Sound Effects/sound effects.txt +++ /dev/null @@ -1,273 +0,0 @@ -[This list is an old one ripped from GScentral.com] -sounds (maybe db register?) - -0001 - Rocket Launching -0002 - Glass shattering, fade in -0003 - Throwing knife hitting ground -0004 - Throwing a throwing knife -0005 - Quiet Throwing knife -0006 - Nothing -0007 - Elevator ding (BETA?) -0008 - Train track sound 1 -0009 - Train track sound 2 -000A - Radio noise? -000B - Tank firing -000C - Grenade launcher firing -000D - Female gasp 1 -000E - Female gasp 2 -000F - Female scream -0010 - Short "beep" tone 1 -0011 - Short "beep" tone 2 (BETA) -0012 - Short "tap" sound (BETA) -0013 - Gunshot ricochet 1 -0014 - Gunshot ricochet 2 -0015 - Gunshot ricochet 3 -0016 - Gunshot ricochet 4 -0017 - Gunshot ricochet 5 -0018 - Gunshot ricochet 6 -0019 - Gunshot ricochet 7 -001A - Gunshot ricochet 8 -001B - Gunshot ricochet 9 -001C - Gunshot ricochet 10 -001D - Gunshot ricochet 11 -001E - Gunshot ricochet 12 -001F - Gunshot ricochet 13 -0020 - Gunshot ricochet 14 -0021 - Gunshot ricochet 15 -0022 - Gunshot ricochet 16 -0023 - Gunshot ricochet 17 -0024 - Gunshot ricochet 18 -0025 - Gunshot ricochet 19 -0026 - Gunshot ricochet 20 -0027 - Gunshot ricochet 21 -0028 - Gunshot ricochet 22 -0029 - Gunshot ricochet 23 -002A - Gunshot ricochet 24 -002B - Clip empty sound 1, BETA -002C - Odd firing/ricochet sound -002D - Grenade landing -002E - Silenced firing -002F - Punch landing 1 -0030 - Punch landing 2 -0031 - Punch landing 3 -0032 - Gun reloading -0033 - Train track sound 3 -0034 - Train track sound 4 -0035 - Train track sound 5 -0036 - Baron Samedi laugh -0037 - Baron Samedi laugh echo -0038 - Baron Samedi laugh echo -0039 - Baron Samedi laugh echo -003A - Helicopter blade sound -003B - Helicopter blade sound, lower -003C - Engine sound -003D - Train brake sound 1 -003E - Engine sound 2, BETA? -003F - Train brake sound 2 -0040 - Train engine sound -0041 - Truck engine sound, BETA -0042 - Truck engine sound + ignition, BETA -0043 - Truck engine sound 2, BETA -0044 - Bond gasp -0045 - Bullet hitting CHR -0046 - Bullet hitting GLASS -0047 - Glass shattering -0048 - Bullet hitting METAL -0049 - Bullet hitting metal 2 -004A - bullet hitting SNOW (Hunting knife hitting body?) -004B - Bullet hitting WOOD -004C - Bullet hitting WATER -004D - Page turning 1 -004E - Page turning 2 -004F - Modem sound -0050 - Radio tuning in -0051 - Zipper sound, body armour -0052 - Ammo/weapon regenerating -0053 - High-pitched beep, BETA -0054 - Woman gasp -0055 - Satellite dish shutting down -0056 - Satellite dish shutting down, longer -0057 - Satellite dish powering up -0058 - Satellite dish powering up, longer -0059 - Clip empty sound 2 -005A - Silence -005B - Electric zap sound 1, BETA -005C - Electric zap sound 2, BETA -005D - Electric zap sound 3, BETA -005E - Radio tuning in -005F - Single throwing knife throw 1 -0060 - Single throwing knife throw 2 -0061 - Single throwing knife throw 3 -0062 - Bond cough, twice -0063 - Bond cough, once -0064 - Tazer sound -0065 - Tazer sound, looping -0066 - Gas leak, looping -0067 - Ti-tap, BETA -0068 - Unknown thump, BETA -0069 - Whoosh sound -006A - Klobb sound -006B - PP7 sound -006C - Unknown gunshot, BETA -006D - KF7 gunshot -006E - Uzi gunshot -006F - Magnum gunshot -0070 - DD44 gunshot -0071 - AR33 gunshot -0072 - Grenade launcher gunshot -0073 - Unknown gunshot, BETA -0074 - ??? -0075 - D5K gunshot -0076 - Unknown gunshot -0077 - Unknown gunshot, BETA -0078 - Bullet hitting METALOBJ 1 -0079 - Unknown gunshot, BETA -007A - Casing 'ting' -007B - Body hitting floor 1 -007C - Body hitting floor 2 -007D - Body hitting floor 3 -007E - Body hitting floor 4 -007F - Body hitting floor 5 -0080 - Body hitting floor 6 -0081 - Body hitting floor 7 -0082 - Body hitting floor 8 -0083 - Body hitting floor 9 -0084 - Body hitting floor 10 -0085 - Body crumpling to floor -0086 - Male cry 1 -0087 - Male cry 2 -0088 - Male cry 3 -0089 - Male cry 4 -008A - Male cry 5 -008B - Male cry 6 -008C - Male cry 7 -008D - Male cry 8 -008E - Male cry 9 -008F - Male cry 10 -0090 - Male cry 11 -0091 - Male cry 12 -0092 - Male cry 13 -0093 - Male cry 14 -0094 - Male cry 15 -0095 - Male cry 16 -0096 - Male cry 17 -0097 - Male cry 18 -0098 - Male cry 19 -0099 - Male cry 20 -009A - Male cry 21 -009B - Male cry 22 -009C - Male cry 23 -009D - Male cry 24 -009E - Male cry 25 -009F - Watch beep -00A0 - Unknown beep, BETA -00A1 - Klaxon alarm -00A2 - Another alarm -00A3 - Yet another alarm -00A4 - Muted gunshot 1 -00A5 - Muted gunshot 2 -00A6 - Crossbow/arrow shot 1, BETA -00A7 - Crossbow/arrow shot 2, BETA -00A8 - Another gunshot, BETA -00A9 - Explosion 1, BETA -00AA - Explosion 2 -00AB - Explosion 3 -00AC - Explosion 4, BETA -00AD - Explosion 5 -00AE - Explosion 6, BETA -00AF - Explosion 7, BETA -00B0 - Explosion 8 -00B1 - Explosion 9, BETA -00B2 - Explosion 10, BETA -00B3 - Explosion 11, BETA -00B4 - Explosion 12 -00B5 - Explosion 13 -00B6 - Explosion 14 -00B7 - Tank crush scream -00B8 - Typing at a computer -00B9 - Bullet hitting DIRT -00BA - Trying to open a locked door -00BB - Door Closing 1 -00BC - Door Opening 1 -00BD - Beeping -00BE - Floppy disk drive -00BF - Train door opening -00C0 - "Pop" sound -00C1 - Jungle background noise -00C2 - Garage door opening, looped -00C3 - Garage door opening stop -00C4 - Door Opening 2 -00C5 - Door Closing 2 -00C6 - Machine start, BETA -00C7 - Door Closing 3 -00C8 - Unknown -00C9 - Unknown 2, BETA -00CA - Door Opening 3 -00CB - Door Closing 4 -00CC - Machine going, BETA -00CD - Click -00CE - Click 2 -00CF - Click 3 -00D0 - Bullet hitting STONE 1 -00D1 - Bullet hitting STONE 2 -00D2 - Thud -00D3 - Glass lab door opening -00D4 - Bullet hitting TILE -00D5 - Enemy getting run over, crunch -00D6 - Door Opening 4 -00D7 - Door Closing 5 -00D8 - Machine going 2, BETA -00D9 - Bullet hitting WOOD -00DA - Table retracting -00DB - Table retracting stop -00DC - Bullet hitting DIRT 1 -00DD - Bullet hitting METALOBJ 2 -00DE - Click -00DF - Train track noise -00E0 - Bullet hitting MUD 1 -00E1 - Rock door opening, looped -00E2 - Rock door opening stop -00E3 - Modem 2 -00E4 - Moonraker firing -00E5 - Watch beep 2 -00E6 - Bullet hitting MUD 2 -00E7 - Bullet hitting MUD 3 -00E8 - Gun switch -00E9 - Knife switch -00EA - Gun switch 2 -00EB - Mine switch -00EC - Watch static -00ED - Watch screen opening -00EE - Watch screen closing -00EF - Bullet hitting METAL 3 -00F0 - Bullet hitting METAL 4 -00F1 - Latch closing -00F2 - Moonraker switch -00F3 - Some electronic sound, I forget -00F4 - Camera snapshot -00F5 - Floppy disk drive 2 -00F6 - Unknown weird machine noise, BETA -00F7 - Beeping noise, BETA -00F8 - Plane taking off from Runway cinema -00F9 - Train noise -00FA - Train noise again -00FB - More train noise -00FC - Even more train noise -00FD - Autogun firing -00FE - Ping noise, BETA -00FF - Weird machine noise, BETA -0100 - Golden gun shot -0101 - Sneeze -0102 - Cymbal slide from intro -0103 - Cymbal slide from intro 2 -0104 - Cymbal slide from intro 3 -0105 - Grate hitting bottom of ventilation shaft from Surface end cinema - -music or SE base address: - -baseaddy: address: len: DACrate: Bitrate: -802DB750 802DB7B0 B40 -- -802DC410 802DC470 B40 -- -802DD0D0 802DD130 B40 diff --git a/notes/GE Documentation/Objects and Attributes/7F03C648 - respawn.txt b/notes/GE Documentation/Objects and Attributes/7F03C648 - respawn.txt deleted file mode 100644 index d79248f..0000000 --- a/notes/GE Documentation/Objects and Attributes/7F03C648 - respawn.txt +++ /dev/null @@ -1,273 +0,0 @@ -7F03C648 71178 handles respawn, possibly more -ADDIU SP,SP,FFA8 -SW RA,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -JAL 7F03291C -SW S0,0014 (SP) -JAL 7F03A424 ;V0=cur.posdata entry (8006) -NOP -BEQ V0,R0,7F03CA14 ;quit if end of list or invalid -OR S1,V0,R0 ;S1=V0: posdata -LW T6,0024 (S1) -ADDIU AT,R0,0003 -OR S2,R0,R0 -SW T6,004C (SP) -LBU V0,0000 (S1) ;V0=obj.pos+0: type -BNEL V0,AT,7F03C6B0 ;branch if not type 3: guard -ADDIU AT,R0,0001 -LW S0,0004 (S1) -JAL 7F062B00 -ADDIU A0,S0,0180 -JAL 7F062B00 -ADDIU A0,S0,01AC -BEQ R0,R0,7F03C9C4 -ADDIU AT,R0,0005 -//7F03C6AC: -ADDIU AT,R0,0001 -BEQ V0,AT,7F03C6C8 ;branch if type 1: norm.obj -ADDIU AT,R0,0004 -BEQ V0,AT,7F03C6C8 ;branch if type 4: weapon -ADDIU AT,R0,0002 -BNEL V0,AT,7F03C90C ;branch if not type 2: door -ADDIU AT,R0,0007 -//7F03C6C8: -LH V0,0002 (S1) ;V0=obj.posdata+2: value? -LW S0,0004 (S1) ;S0=obj.posdata+4: p->obj.data -OR S3,R0,R0 ;S3=0 -BLEZ V0,7F03C8E4 ;branch if value negative -SLTI AT,V0,003C -BNEZ AT,7F03C6E8 ;branch if not 1-3B -ADDIU V1,R0,0001 ;V1=1 -OR V1,R0,R0 ;V1=0 -//7F03C6E8: -LUI T7,8005 -LW T7,8374 (T7) ;T7=80048374: 1 if not paused! -SUBU T8,V0,T7 ;T8=value-timer -SH T8,0002 (S1) ;value-=timer -LH T9,0002 (S1) ;T9=time -SLTI AT,T9,003C -BEQL AT,R0,7F03C730 ;branch if not 0-3B -LH V0,0002 (S1) -BNEZ V1,7F03C72C ;branch if just hit valid range -OR A0,S1,R0 ;A0=S1: obj.posdata -JAL 7F03C574 -SW V1,0038 (SP) ;SP+38=V1: 0 -BNEZ V0,7F03C72C -LW V1,0038 (SP) -LH T0,0002 (S1) -ADDIU T1,T0,003C -SH T1,0002 (S1) -//7F03C72C: -LH V0,0002 (S1) -BGTZ V0,7F03C770 -SLTI AT,V0,003C -SH R0,0002 (S1) -LBU T2,0002 (S0) ;T2=obj.data+2: state -ANDI T3,T2,0010 -BEQL T3,R0,7F03C760 ;branch if state 0x10 not set -LW T6,0064 (S0) -LW T4,0064 (S0) ;T4=obj.data+64: runtimeflags -ORI T5,T4,1000 -BEQ R0,R0,7F03C8E4 -SW T5,0064 (S0) ;runtimeflags |= 10000000 -//7F03C75C: -LW T6,0064 (S0) ;T6=obj.data+64: runtimeflags -ADDIU AT,R0,EFFF -AND T7,T6,AT -BEQ R0,R0,7F03C8E4 -SW T7,0064 (S0) ;runtimeflags |= 10000000 -//7F03C770: -BEQL AT,R0,7F03C8E8 -LBU T9,0003 (S0) -BNEL V1,R0,7F03C8E8 -LBU T9,0003 (S0) -MTC1 R0,F0 -LWC1 F4,0070 (S0) -C.EQ.S F0,F4 -NOP -BC1FL 7F03C868 -LBU T0,0002 (S0) -LBU T8,0002 (S0) ;T8=obj.data+2: state -ANDI T9,T8,0080 ;T9= state & 80: destroyed flag -BNEL T9,R0,7F03C868 ;branch if destroyed -LBU T0,0002 (S0) -//7F03C7A8: -LW T0,0008 (S0) ;T0=obj.data+8: obj.flags1 -ANDI T1,T0,8000 ;T1= obj.flags1 & 80000000: activated -BEQ T1,R0,7F03C840 ;branch if flag not set -NOP -JAL 7F03E18C -OR A0,S1,R0 ;A0=S1: obj.posdata -JAL 7F03A538 -OR A0,S1,R0 ;A0=S1: obj.posdata -LW T2,0064 (S0) ;T2=obj.data+64: runtimeflags -ADDIU AT,R0,F7FF -OR A0,S1,R0 ;A0=S1: obj.posdata -AND T3,T2,AT -JAL 7F056BA8 -SW T3,0064 (S0) ;runtimeflags ^ 08000000 -SW V0,0030 (SP) -LH T4,0006 (S0) ;T4=obj.data+6: preset -JAL 7F0BDF04 ;V0=cur.stage# (?) -SW T4,002C (SP) ;SP+2C= preset -LW T5,0030 (SP) -LW T6,002C (SP) ;T6=preset -OR A0,V0,R0 ;A0=V0: -JAL 7F056EA0 -ADDU A1,T5,T6 -BEQL V0,R0,7F03C8B0 -LBU T8,0003 (S0) -LW T7,0010 (V0) -BEQL T7,R0,7F03C8B0 -LBU T8,0003 (S0) -LW A0,0014 (S0) -LW A1,0014 (A0) -JAL 7F06CE78 ;[float] A1->A0+14 -SW V0,0028 (SP) -LW V1,0028 (SP) -LW A0,0010 (S0) -JAL 7F03A5A4 -LW A1,0010 (V1) -BEQ R0,R0,7F03C8AC -ADDIU S3,R0,0001 -//7F03C840: -JAL 7F03A404 ;state | 4 -OR A0,S1,R0 ;A0=S1: obj.posdata -JAL 7F03E134 -OR A0,S1,R0 ;A0=S1: obj.posdata -LW T8,0064 (S0) ;T8=obj.data+64: runtimeflags -ADDIU AT,R0,F7FF -AND T9,T8,AT -BEQ R0,R0,7F03C8AC -SW T9,0064 (S0) ;runtimeflags ~| 00000800 -//7F03C864: respawn -LBU T0,0002 (S0) ;T0=obj.data+2: state -ANDI T1,T0,0008 ;T1= state & 08: repair collisions flag -BEQL T1,R0,7F03C888 ;branch if removing collisions -LW T4,0008 (S0) -LW T2,0008 (S0) ;T2=obj.data+8: obj.flags1 -ORI T3,T2,0100 -BEQ R0,R0,7F03C894 -SW T3,0008 (S0) ;obj.flags1 |= 00000100: collisions... -//7F03C884: flag not set -LW T4,0008 (S0) ;T4=obj.flags1 -ADDIU AT,R0,FEFF -AND T5,T4,AT ;T5=obj.flags1 & FFFFFEFF: untoggle collisions -SW T5,0008 (S0) ;T5=obj.flags1 ^ collisions -//7F03C894: -LBU T6,0002 (S0) ;T6=obj.state flags -SWC1 F0,0070 (S0) ;obj.data+70= 0.0: cur.damage? -LW A0,0014 (S0) -ANDI T7,T6,FF7F ;T7=state & FF7F: unmask "dead" -JAL 7F050DE8 -SB T7,0002 (S0) ;obj.state ^ dead -//7F03C8AC: reset body armour health -LBU T8,0003 (S0) ;T8=S0+3: obj.type -ADDIU AT,R0,0015 -LUI A0,8006 -BNE T8,AT,7F03C8C8 ;branch if not type 15: BA -ADDIU A1,R0,0052 ;A1=SE 052 -LWC1 F6,0080 (S0) ;F6=obj.data+80: max health -SWC1 F6,0084 (S0) ;obj.data+84=max health: cur.health set to full -//7F03C8C8: -BNEZ S3,7F03C8E4 ;skip if not playing sound -OR A2,R0,R0 ;A2=0 -JAL 70008E08 ;play sound effect A1 -LW A0,3720 (A0) ;A0=80063720: buffer -OR A0,V0,R0 -JAL 7F053A10 -ADDIU A1,S1,0008 -//7F03C8E4: -LBU T9,0003 (S0) ;T9=S0+3: obj.type -ADDIU AT,R0,000D -BNEL T9,AT,7F03C9C4 ;branch if not type 0D: autoturret -ADDIU AT,R0,0005 -LW V0,0004 (S1) ;V0=obj.posdata+4: p->obj.data (same as S0) -JAL 7F062B00 -LW A0,00CC (V0) ;A0=obj.data+CC: p->allocated memory -BEQ R0,R0,7F03C9C4 -ADDIU AT,R0,0005 -//7F03C908: -ADDIU AT,R0,0007 -BNEL V0,AT,7F03C928 ;branch if V0=7 -ADDIU AT,R0,0008 -JAL 7F09CEE8 -OR A0,S1,R0 ;A0=S1: p->obj.posdata -BEQ R0,R0,7F03C9C0 -OR S2,V0,R0 -//7F03C924: -ADDIU AT,R0,0008 -BNEL V0,AT,7F03C944 ;branch if V0=8 -ADDIU AT,R0,0006 -JAL 7F09E8AC -OR A0,S1,R0 ;A0=S1: p->obj.posdata -BEQ R0,R0,7F03C9C0 -OR S2,V0,R0 -//7F03C940: -ADDIU AT,R0,0006 -BNEL V0,AT,7F03C9C4 ;branch if V0=6 -ADDIU AT,R0,0005 -JAL 7F09B15C ;V0=player#, though no idea particulars... -OR A0,S1,R0 ;A0=S1: p->obj.posdata -SLL T0,V0,0x2 -LUI A0,8008 -ADDU A0,A0,T0 -LW A0,9EE0 (A0) ;A0=BONDdata for player# -JAL 7F062B00 -ADDIU A0,A0,0A54 ;A0+=A54: -JAL 7F09B15C ;V0=player#, though no idea particulars... -OR A0,S1,R0 -SLL T1,V0,0x2 -LUI A0,8008 -ADDU A0,A0,T1 -LW A0,9EE0 (A0) ;A0=BONDdata for player# -JAL 7F062B00 -ADDIU A0,A0,0DFC ;A0+=DFC: -LW T2,0004 (S1) ;T2=obj.pos+4: p->obj.data -BEQL T2,R0,7F03C9C4 ;skip if invalid -ADDIU AT,R0,0005 -JAL 7F09A464 ;V0= # players -NOP -SLTI AT,V0,0002 -BNEL AT,R0,7F03C9C4 ;skip if solo -ADDIU AT,R0,0005 -LW S0,0004 (S1) ;S0=obj.data -JAL 7F062B00 -ADDIU A0,S0,0180 ;A0=obj.data+180: -JAL 7F062B00 -ADDIU A0,S0,01AC ;A0=obj.data+1AC: -//7F03C9C0: S3=5... -ADDIU AT,R0,0005 -BNEL S2,AT,7F03C9D8 ;branch if S3 isn't 5 -ADDIU AT,R0,0003 -BEQ R0,R0,7F03CA0C -LW S0,004C (SP) -//7F03C9D4: -ADDIU AT,R0,0003 -BNE S2,AT,7F03CA00 ;branch if S3 isn't 3 -LW S0,0024 (S1) -JAL 7F03A538 -OR A0,S1,R0 -JAL 7F03A4F0 ;A0->first obj.pos.data+0x24 -OR A0,S1,R0 -BNEZ S0,7F03CA0C -NOP -BEQ R0,R0,7F03CA0C -OR S0,S1,R0 -//7F03CA00: -OR A0,S1,R0 -JAL 7F03C2BC -OR A1,S2,R0 -//7F03CA0C: -BNEZ S0,7F03C674 -OR S1,S0,R0 -//7F03CA14: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0058 diff --git a/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/monitor animation command list.txt b/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/monitor animation command list.txt deleted file mode 100644 index 268da54..0000000 --- a/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/monitor animation command list.txt +++ /dev/null @@ -1,603 +0,0 @@ -[80030B74 00 Bond] -00000007 00000000 -00000001 00000400 00000014 -00000008 00000014 -00000002 00000400 00000014 -0000000D 000000FF 00000014 -00000008 00000014 -00000005 00000200 00000014 -00000006 00000200 00000014 -0000000D FFFFFFFF 00000014 -00000008 00000014 -00000005 00000400 00000014 -00000006 00000400 00000014 -00000008 00000014 -0000000B - -[80030C00 01 Desktops, Satellite] -00000007 0000000C -00000001 00000400 00000014 -00000008 00000014 -00000002 00000400 00000014 -0000000D 000000FF 00000014 -00000008 00000014 -00000005 00000200 00000014 -00000006 00000200 00000014 -0000000D FFFFFFFF 00000014 -00000008 00000014 -00000005 00000400 00000014 -00000006 00000400 00000014 -00000008 00000014 -00000007 0000000D -00000001 00000400 00000014 -00000008 00000014 -00000002 00000400 00000014 -0000000D 000000FF 00000014 -00000008 00000014 -00000005 00000200 00000014 -00000006 00000200 00000014 -0000000D FFFFFFFF 00000014 -00000008 00000014 -00000005 00000400 00000014 -00000006 00000400 00000014 -00000008 00000014 -00000007 0000000E -00000001 00000400 00000014 -00000008 00000014 -00000002 00000400 00000014 -0000000D 000000FF 00000014 -00000008 00000014 -00000005 00000200 00000014 -00000006 00000200 00000014 -0000000D FFFFFFFF 00000014 -00000008 00000014 -00000005 00000400 00000014 -00000006 00000400 00000014 -00000008 00000014 -00000007 0000000F -00000001 00000400 00000014 -00000008 00000014 -00000002 00000400 00000014 -0000000D 000000FF 00000014 -00000008 00000014 -00000005 00000200 00000014 -00000006 00000200 00000014 -0000000D FFFFFFFF 00000014 -00000008 00000014 -00000005 00000400 00000014 -00000006 00000400 00000014 -00000008 00000014 -0000000B -[80030E24 02 10 screens: astrological] -00000007 00000011 -00000008 00000050 -00000007 00000012 -00000008 00000050 -00000007 00000013 -00000008 00000050 -00000007 00000014 -00000008 00000050 -00000007 00000015 -00000008 00000050 -00000007 00000016 -00000008 00000050 -00000007 00000017 -00000008 00000050 -00000007 00000018 -00000008 00000050 -00000007 00000019 -00000008 00000050 -00000007 0000001A -00000008 00000050 -0000000B -[80030F44 03 3 wave patterns] -0000000D 202020FF 00000001 -00000007 0000001C -00000001 00000800 00000078 -00000008 00000078 -00000005 00000100 00000001 -00000006 00000200 0000003C -00000001 FFFFE000 00000078 -00000008 00000078 -00000005 00000400 00000001 -00000006 00000400 0000003C -00000006 00000400 0000003C -00000001 00000800 00000078 -00000008 00000078 -00000005 00000080 00000001 -00000006 00000800 0000003C -00000006 00000400 00000078 -00000002 00000400 0000003C -00000001 00000200 00000078 -00000008 00000078 -0000000B -[80031018 04 wave pattern] -0000000D 202020FF 00000001 -00000007 0000001C -00000005 00000080 00000001 -00000006 00000800 0000003C -00000006 00000400 00000078 -00000002 00000400 0000000A -00000001 00000200 00000028 -00000008 00000078 -0000000B -[80031074 05 green text up] -00000007 0000001D -0000000D 008000FF 00000001 -00000002 FFFFFE00 00000050 -00000008 00000078 -00000002 FFFFFF00 00000014 -00000008 00000078 -00000002 FFFFFF80 0000000A -00000008 00000028 -00000002 FFFFFE00 00000028 -00000008 0000003C -00000002 FFFFFFC0 0000001E -00000008 00000078 -0000000B -[800310F0 06 red text down] -00000007 0000001D -0000000D 280000FF 00000001 -00000002 00000200 00000050 -00000008 00000078 -00000002 00000100 00000014 -00000008 00000078 -00000002 00000080 0000000A -00000008 00000028 -00000002 00000200 00000028 -00000008 0000003C -00000002 00000040 0000001E -00000008 00000078 -00000002 00000100 00000014 -00000008 00000078 -00000002 00000080 0000000A -0000000B -[8003118C 07 d. green text down] -00000007 0000001D -0000000D 003C00FF 00000001 -00000002 00000200 00000050 -00000008 00000078 -00000002 00000080 0000000A -00000008 00000028 -00000002 00000100 00000014 -00000008 00000078 -00000002 00000080 0000000A -00000008 00000028 -00000002 00000200 00000028 -00000008 0000003C -00000002 00000040 0000001E -00000008 00000078 -0000000B -[8003121C 08 red bar graph +] -00000007 0000001E -0000000D 404000FF 00000001 -00000001 00000280 00000001 -00000008 0000000A -0000000B -[80031248 09 blue bar graph +] -00000007 0000001E -0000000D 004040FF 00000001 -00000001 00000280 00000001 -00000008 0000000A -0000000B -[80031274 0A green bar graph -] -00000007 0000001E -0000000D 406440FF 00000001 -00000001 FFFFFD80 00000001 -00000008 0000000A -0000000B -[800312A0 subroutine used by radar] -0000000D 0AFF0AFE 00000014 -00000009 800312C8 -[800312B4 subroutine used by radar] -0000000D 0A640AFE 00000014 -00000009 800312C8 -[800312C8 subroutine used by radar] -0000000F 000000B6 -00000008 00000001 -0000000A 800312A0 0000051E -0000000A 800312B4 0000147A -0000000B -00000007 0000001E -0000000D 406440FF 00000001 -00000001 FFFFFD80 00000001 -00000008 0000000A -0000000B -[800312F4 0B radar] -00000007 00000030 -0000000D 0A960AFE 00000001 -00000009 800312B4 -[80031310 0C spinning cube] -00000007 00000010 -0000000D 303080FF 0000001E -00000008 00000005 -00000007 0000002D -00000008 00000005 -00000007 0000002E -00000008 00000005 -00000007 0000002F -00000008 00000005 -0000000B -[80031490 0D 3 screens: location, weapon armed, ] -0000000D 000000FF 00000001 -0000000D C8C8C8FF 00000190 -00000007 00000001 -00000008 000002A8 -00000007 00000002 -00000008 000002A8 -00000007 00000004 -00000008 000000B4 -0000000D 808032FF 00000001 -00000007 00000004 -00000008 000000C8 -0000000B -[800314F8 0E red target] -00000005 00000400 00000001 -00000006 00000400 00000001 -0000000D C81414FF 00000001 -00000007 00000006 -00000008 00000258 -0000000D C8C8C8FF 00000005 -00000008 00000005 -0000000D 383838FF 0000003C -00000007 0000001B -0000000D 0A0A0AFF 00000064 -00000008 00000190 -0000000B -[80030EC8 0F 7 screens: satellite, targetting, ] -00000007 00000007 -00000008 00000050 -00000007 00000008 -00000008 00000050 -00000007 00000009 -00000008 00000050 -00000007 0000000C -00000008 00000050 -00000007 0000000D -00000008 00000050 -00000008 00000050 -00000007 00000019 -00000008 00000050 -00000007 00000014 -00000008 00000050 -0000000B -[80031360 10 global map] -00000007 0000002C -0000000D 308030FF 0000001E -00000001 FFFFFC00 00000400 -00000008 000005A0 -00000003 00000288 00000168 -00000004 000003AA 00000168 -00000005 00000080 0000012C -00000006 00000080 0000012C -0000000D 000000FF 0000003C -00000008 0000003C -0000000D 808080FF 0000000A -00000008 0000005A -0000000D 38C838FF 0000001E -00000008 0000001E -0000000D 803838FF 0000003C -00000008 0000003C -0000000D 808080FF 0000003C -00000008 0000003C -00000003 00000200 00000168 -00000004 00000200 00000168 -00000005 00000400 000002D0 -00000006 00000400 000002D0 -00000008 0000012C -00000007 0000002C -00000008 000001A4 -0000000D 00C800FF 0000001E -00000008 0000001E -0000000D 1E381EFF 0000003C -00000008 0000003C -0000000B -[8003156C 11 Karl yelling] -0000000D 0A960AFF 00000000 -00000007 00000028 -00000008 00000005 -00000007 00000029 -00000008 00000005 -00000007 0000002A -00000008 00000005 -00000007 0000002B -00000008 0000000A -00000007 00000029 -00000008 00000005 -0000000B -[800315CC 12 skateboard] -00000007 00000024 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -00000001 00000264 0000001E -00000007 00000025 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -00000007 00000026 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -00000007 00000027 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -00000001 0000019C 00000028 -00000007 00000026 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -00000007 00000025 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000D 0A960AFF 00000000 -00000008 00000003 -0000000D 087808FF 00000000 -00000008 00000002 -0000000B -[80031848 13 police guy] -0000000D 0A780AFF 00000000 -00000007 00000020 -00000008 00000005 -00000007 00000021 -00000008 00000005 -00000007 00000022 -00000008 00000005 -00000007 00000023 -00000008 00000005 -0000000B -[80031898 14 'off'] -00000007 0000001C -0000000D 00800000 00000001 -00000008 00000005 -0000000B -[800318B8 15 randomly select one of seven animations] -0000000A 80031018 00001999 //j->#04 -0000000A 8003156C 00001999 //j->#11 -0000000A 8003121C 00001999 //j->#08 -0000000A 80031248 00001999 //j->#09 -0000000A 80031274 00001999 //j->#0A -0000000A 800310F0 00003333 //j->#06 -0000000A 8003118C 00006666 //j->#07 -0000000A 80031074 0000FFFF //j->#05 -0000000B -[8003191C 16 randomly select random screens + random effects or boring] -0000000A 80030F44 0000051E //j->#03 -0000000A 8003121C 0000051E //j->#08 -0000000A 80031074 0000051E //j->#05 -0000000A 80031950 00009999 //j->#17 -0000000B -[80031950 17 Base Function for random screens + random effects] -0000000A 800319D4 00001999 //j->#18 -0000000A 800319F0 00001999 //j->#19 -0000000A 80031A0C 00001999 //j->#1A -0000000A 80031A28 00001999 //j->#1B -0000000A 80031A44 00001999 //j->#1C -0000000A 80031A60 00001999 //j->#1D -0000000A 80031A7C 00001999 //j->#1E -0000000A 80031A98 00001999 //j->#1F -0000000A 80031AB4 00001999 //j->#20 -0000000A 80031AD0 00001999 //j->#21 -00000008 00000064 -0000000B -[800319D4 18 random screens + random effects - set image] -00000007 00000011 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[800319F0 19 random screens + random effects - set image] -00000007 00000012 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031A0C 1A random screens + random effects - set image] -00000007 00000013 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031A28 1B random screens + random effects - set image] -00000007 00000014 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031A44 1C random screens + random effects - set image] -00000007 00000015 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031A60 1D random screens + random effects - set image] -00000007 00000016 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031A7C 1E random screens + random effects - set image] -00000007 00000017 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031A98 1F random screens + random effects - set image] -00000007 00000018 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031AB4 20 random screens + random effects - set image] -00000007 00000019 -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031AD0 21 random screens + random effects - set image] -00000007 0000001A -00000008 00000014 -0000000A 80031AEC 0000FFFF //j->#22 -[80031AEC 22 random screens + random effects - colourizer] -0000000A 80031B24 00001999 //j->#23 -0000000A 80031B38 00001999 //j->#24 -0000000A 80031B4C 00001999 //j->#25 -0000000D C8C8C8FF 0000003C -00000009 80031B60 //j->#26 -[80031B24 23 random screens + random effects - colourizer] -0000000D C83232FF 0000003C -00000009 80031B60 //j->#26 -[80031B38 24 random screens + random effects - colourizer] -0000000D 32C832FF 0000003C -00000009 80031B60 //j->#26 -[80031B4C 25 random screens + random effects - colourizer] -0000000D 3232C8FF 0000003C -00000009 80031B60 //j->#26 -[80031B60 26 random screens + random effects] -00000008 00000032 -0000000A 80031BB4 00001999 //j->#27 -0000000A 80031BD0 00001999 //j->#28 -0000000A 80031BEC 00001999 //j->#29 -0000000A 80031C08 00001999 //j->#2A -0000000A 80031C80 00001999 //j->#2B -00000008 0000012C -00000009 80031D30 //j->#2C -[80031BB4 27 random screens + random effects - scroll right] -00000001 00000800 00000078 -00000008 00000078 -00000009 80031D30 //j->#2C -[80031BD0 28 random screens + random effects - scroll up fast] -00000002 00002000 00000032 -00000008 000000C8 -00000009 80031D30 //j->#2C -[80031BEC 29 random screens + random effects - scroll up] -00000002 00002000 000000C8 -00000008 000000C8 -00000009 80031D30 //j->#2C -[80031C08 2A random screens + random effects - scroll and zoom] -00000003 00000288 0000012C -00000004 000003AA 0000012C -00000005 00000080 000000C8 -00000006 00000080 000000C8 -00000008 0000012C -00000003 00000200 00000032 -00000004 00000200 000000C8 -00000005 00000400 000002D0 -00000006 00000400 000002D0 -00000008 00000258 -00000009 80031D30 //j->#2C -[80031C80 2B random screens + random effects - scroll and zoom] -00000003 00000320 00000190 -00000004 00000190 00000190 -00000005 00000080 000000C8 -00000006 00000080 000000C8 -00000008 0000012C -00000003 000000C8 000000C8 -00000004 00000190 00000320 -00000005 00000200 000002D0 -00000006 00000200 000002D0 -00000008 00000320 -00000005 00000400 000002D0 -00000006 00000400 000002D0 -00000003 00000200 00000064 -00000004 00000200 0000003C -00000008 000001F4 -00000009 80031D30 //j->#2C -[80031D30 2C random screens + random effects - wait and route] -00000008 00000032 -0000000A 80031AEC 00001999 //j->#22 -0000000A 80031D58 00003333 //j->#2D -00000009 80031950 //j->#17 -[80031D58 2D random screens + random effects - flash] -00000008 00000032 -0000000D FFFFFFFF 0000000A -0000000D 000000FF 00000005 -0000000D FFFFFFFF 0000000A -00000008 00000019 -0000000D 000000FF 000000C8 -00000008 000001F4 -00000009 80031950 //j->#17 -[80031DA8 2E red brightening screen] -00000007 00000031 -00000005 00000200 00000000 -00000006 00000200 00000000 -0000000D DC2828FF 0000003C -00000008 0000003C -0000000D 323232FF 0000000A -00000008 0000000A -0000000B -[80031DF4 2F green brightening screen] -00000007 00000031 -00000005 00000200 00000000 -00000006 00000200 00000000 -0000000D 32C832FF 0000003C -00000008 0000003C -0000000D 323232FF 0000000A -00000008 0000000A -0000000B -[80031E40 30 grey solid] -00000007 00000031 -00000005 00000200 00000000 -00000006 00000200 00000000 -0000000D 323232FF 0000000A -00000008 0000000A -0000000B -[80031E78 31 red solid] -00000007 00000031 -00000005 00000200 00000000 -00000006 00000200 00000000 -0000000D DC2828FF 0000000A -00000008 0000000A -0000000B -[80031EB0 32 green solid] -00000007 00000031 -00000005 00000200 00000000 -00000006 00000200 00000000 -0000000D 32C832FF 0000000A -00000008 0000000A -0000000B -[80031EE8 33 black solid] -00000007 00000000 -0000000D 000000FF 00000000 -0000000C -[80031F00 34 ??? Not Included in Normal List - linked @ 0x9544] -00000005 00000400 00000000 -00000006 00000400 00000000 -00000008 00000001 -00000005 00001000 00000014 -00000006 00001000 00000014 -00000008 00000014 -0000000B -[80031F44 35 Taser Not Included in Normal List!] -00000007 00000000 -00000001 00000400 00000014 -00000008 00000014 -00000002 00000400 00000014 -0000000D 000000FF 00000014 -00000008 00000014 -00000005 00000200 00000014 -00000006 00000200 00000014 -0000000D FFFFFFFF 00000014 -00000008 00000014 -00000005 00000400 00000014 -00000006 00000400 00000014 -00000008 00000014 -0000000B \ No newline at end of file diff --git a/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/monitor animations.txt b/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/monitor animations.txt deleted file mode 100644 index d35e2dc..0000000 --- a/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/monitor animations.txt +++ /dev/null @@ -1,783 +0,0 @@ -uses a variety of microcode! -starts @ 0xFDE4 - -Stop Scolling: -00000000 -Sets both scroll timers to zero - -Horizontal Scroll: -00000001 xxxxxxxx tttttttt -[x] 'width' value like in image mapping to shift the image; short hex percent -[t]ime the move occurs in - -Vertical Scroll: -00000002 yyyyyyyy tttttttt -[y] 'height' value like in image mapping to shift image; short hex percent -[t]ime the move occurs in - -Horizontal Scroll Nonadditive: -00000003 xxxxxxxx tttttttt -[x] 'width' value shifting the image from original position; short hex percent -[t]ime the move occurs in - -Vertical Scroll Nonadditive: -00000004 yyyyyyyy tttttttt -[y] 'height' value shifting the image from original position; short hex percent -[t]ime the move occurs in - -Zoom Width: -00000005 xxxxxxxx tttttttt -[x] zoom factor as a short hex percentage -[t]ime for complete zoom - -Zoom Height: -00000006 yyyyyyyy tttttttt -[x] zoom factor as a short hex percentage -[t]ime for complete zoom - -Use image: -00000007 000000xx -xx is image number in global image list, starting with 0=BOND - -Hold for Time: -00000008 tttttttt -[t]ime to hold; necessary to break loops, like the 03 action command - -Jump to Routine: -00000009 pppppppp -[p]ointer to another animation routine where processing resumes - -Jump on Chance: -0000000A pppppppp 0000xxxx -[p]ointer to another animation routine where processing resumes -[x] value to test against a random value. Jump if rand < xxxx - -Loop: -0000000B -restarts group from the beginning of the current animation - -Stop Animation: -0000000C -Unconditionally stops the animation using the S1 flag. - -RGBA: -0000000D RRGGBBAA tttttttt -New [R]ed, [G]reen, [B]lue, and [A]lpha components -[t]ime for complete transition - -Set Rotation: -0000000E rrrrrrrr -set image [r]otation; 0x2000 rotates 360 degrees -primarily used to reset rotation to 0 - -Rotate Image: -0000000F rrrr.rrrr -[r]otate image incrementally rrrr.rrrr%; -0x2000 rotates approximately 45 degrees, 0x1555 to mimic a clock - -+ + - + -+ + - -7F049F48: Process monitor microcode -... -//7F049FEC: -OR S1,R0,R0 -LHU V0,0004 (S0) V0=offset in ani code; S0=ani values at 0x80 in 0A objects -//7F049FF4: -LW T1,0000 (S0) T1=pointer to animation microcode from object -SLL T2,V0,0x2 -ADDU V1,T1,T2 -LW T3,0000 (V1) T3=command type; V1=offset to command -SLTIU AT,T3,0010 -BEQ AT,R0,7F04A468 -SLL T3,T3,0x2 -LUI AT,8005 -ADDU AT,AT,T3 -LW T3,2C6C (AT) T3=80052C6C: TLB table for processing command types -JR T3 -NOP - -//7F04A024: command 00: stop scrolling -ADDIU T4,V0,0001 -SWC1 F20,0040 (S0) 0->reset x offsetting -SWC1 F20,0054 (S0) 0->reset y offsetting -BEQ R0,R0,7F04A468 -SH T4,0004 (S0) save offset - -//7F04A038: command 01: horizontal scroll -SWC1 F20,003C (S0) 0-> -LW T5,0008 (V1) -LUI AT,4F80 -MTC1 T5,F4 -BGEZ T5,7F04A05C -CVT.S.W F6,F4 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -//7F04A05C: -DIV.S F10,F24,F6 -LWC1 F0,0038 (S0) cur. x pos? -ADDIU T7,V0,0003 -SWC1 F0,0044 (S0) saved to 'start x' slot -SWC1 F10,0040 (S0) time for shift -LW T6,0004 (V1) -SH T7,0004 (S0) -MTC1 T6,F18 -NOP -CVT.S.W F4,F18 -MUL.S F8,F4,F22 -ADD.S F6,F0,F8 -BEQ R0,R0,7F04A468 -SWC1 F6,0048 (S0) save 'end x' slot - -//7F04A094: command 02: vertical scroll -SWC1 F20,0050 (S0) -LW T8,0008 (V1) -LUI AT,4F80 -MTC1 T8,F10 -BGEZ T8,7F04A0B8 -CVT.S.W F18,F10 -MTC1 AT,F4 -NOP -ADD.S F18,F18,F4 -//7F04A0B8: -DIV.S F8,F24,F18 -LWC1 F0,004C (S0) -ADDIU T0,V0,0003 -SWC1 F0,0058 (S0) -SWC1 F8,0054 (S0) -LW T9,0004 (V1) -SH T0,0004 (S0) -MTC1 T9,F6 -NOP -CVT.S.W F10,F6 -MUL.S F4,F10,F22 -ADD.S F18,F0,F4 -BEQ R0,R0,7F04A468 -SWC1 F18,005C (S0) - -//7F04A0F0: command 03: same as 01, but doesn't add to previous (obj+0x38) -SWC1 F20,003C (S0) -LW T1,0008 (V1) -LUI AT,4F80 -MTC1 T1,F8 -BGEZ T1,7F04A114 -CVT.S.W F6,F8 -MTC1 AT,F10 -NOP -ADD.S F6,F6,F10 -//7F04A114: -DIV.S F4,F24,F6 -LWC1 F18,0038 (S0) -ADDIU T3,V0,0003 -SWC1 F18,0044 (S0) -SWC1 F4,0040 (S0) -LW T2,0004 (V1) -SH T3,0004 (S0) -MTC1 T2,F8 -NOP -CVT.S.W F10,F8 -MUL.S F6,F10,F22 -BEQ R0,R0,7F04A468 -SWC1 F6,0048 (S0) - -//7F04A148: command 04: same as 02, but doesn't add to previous (obj+0x4C) -SWC1 F20,0050 (S0) -LW T4,0008 (V1) -LUI AT,4F80 -MTC1 T4,F4 -BGEZ T4,7F04A0B8 -CVT.S.W F18,F4 -MTC1 AT,F8 -NOP -ADD.S F18,F18,F8 -//7F04A0B8: -DIV.S F10,F24,F18 -LWC1 F6,004C (S0) -ADDIU T6,V0,0003 -SWC1 F6,0058 (S0) -SWC1 F10,0054 (S0) -LW T5,0004 (V1) -SH T6,0004 (S0) -MTC1 T5,F4 -NOP -CVT.S.W F8,F4 -MUL.S F18,F8,F22 -BEQ R0,R0,7F04A468 -SWC1 F18,005C (S0) - -//7F04A1A0: command 05: Zoom X -SWC1 F20,0014 (S0) -LW T7,0008 (V1) -LUI AT,4F80 -MTC1 T7,F10 -BGEZ T7,7F04A1C4 -CVT.S.W F6,F10 -MTC1 AT,F4 -NOP -ADD.S F6,F6,F4 -//7F04A1C4: -DIV.S F8,F24,F6 -LWC1 F18,0010 (S0) -ADDIU T9,V0,0003 -SWC1 F18,001C (S0) -SWC1 F8,0018 (S0) -LW T8,0004 (V1) -SH T9,0004 (S0) -MTC1 T8,F10 -NOP -CVT.S.W F4,F10 -MUL.S F6,F4,F22 -BEQ R0,R0,7F04A468 -SWC1 F6,0020 (S0) - -//7F04A1F8: command 06: Zoom Y -SWC1 F20,0028 (S0) -LW T0,0008 (V1) -LUI AT,4F80 -MTC1 T0,F8 -BGEZ T0,7F04A1C4 -CVT.S.W F18,F8 -MTC1 AT,F10 -NOP -ADD.S F18,F18,F10 -//7F04A1C4: -DIV.S F4,F24,F18 -LWC1 F6,0024 (S0) -ADDIU T2,V0,0003 -SWC1 F6,0030 (S0) -SWC1 F4,002C (S0) -LW T1,0004 (V1) -SH T2,0004 (S0) -MTC1 T1,F8 -NOP -CVT.S.W F10,F8 -MUL.S F18,F10,F22 -BEQ R0,R0,7F04A468 -SWC1 F18,0034 (S0) - -//7F04A250: command 07: use image from global monitor image list -OR A0,S0,R0 -JAL 7F049F40 - JR RA - SW A1,0008 (A0) save image to obj -LW A1,0004 (V1) -LHU T3,0004 (S0) -LUI AT,4780 -MTC1 AT,F2 F2=65536 -ADDIU T4,T3,0002 -BEQ R0,R0,7F04A468 -SH T4,0004 (S0) - -//7F04A274: command 08: halt processing for time -LH V0,0006 (S0) -LUI T5,8005 -BLTZL V0,7F04A2B8 -LW T0,0004 (V1) -LW T5,8374 (T5) T5=80048374: ? also used in FPS control... Processor step? -SUBU T6,V0,T5 -SH T6,0006 (S0) -LH T7,0006 (S0) -BLTZL T7,7F04A2A8 -LHU T8,0004 (S0) -BEQ R0,R0,7F04A468 -ADDIU S1,R0,0001 -LHU T8,0004 (S0) -//7F04A2A8: add to delay time counter -ADDIU T9,T8,0002 -BEQ R0,R0,7F04A468 -SH T9,0004 (S0) -LW T0,0004 (V1) -//7F04A2B8: when not already set copy directly -ADDIU S1,R0,0001 -BEQ R0,R0,7F04A468 -SH T0,0006 (S0) - -//7F04A2C4: command 09: jump -OR A0,S0,R0 -JAL 7F049C8C - SW A1,0000 (A0) pointer to routine - JR RA - SH R0,0004 (A0) count in routine -LW A1,0004 (V1) -LUI AT,4780 -MTC1 AT,F2 F2=65536 -BEQ R0,R0,7F04A468 -NOP - -//7F04A2E0: command 0A: jump if rand < x -JAL 7000A450 ret. V0=rand -SW V1,0094 (SP) -LW V1,0094 (SP) -SRL T1,V0,0x10 T1=rand / 0x10000 -OR A0,S0,R0 -LW T2,0008 (V1) -SLTU AT,T1,T2 -BEQL AT,R0,7F04A320 don't jump ani if rand < given value -LHU T3,0004 (S0) -JAL 7F049C8C - SW A1,0000 (A0) pointer to routine - JR RA - SH R0,0004 (A0) count in routine -LW A1,0004 (V1) -LUI AT,4780 -MTC1 AT,F2 F2=65536 -BEQ R0,R0,7F04A468 -NOP -LHU T3,0004 (S0) -//7F04A320: -LUI AT,4780 -MTC1 AT,F2 F2=65536 -ADDIU T4,T3,0003 -SH T4,0004 (S0) -BEQ R0,R0,7F04A468 -NOP - -//7F04A338: command 0B: restart group -BEQ R0,R0,7F04A468 -SH R0,0004 (S0) - -//7F04A340: command 0C: stop animation -BEQ R0,R0,7F04A468 -ADDIU S1,R0,0001 - -//7F04A348: command 0D: -SWC1 F20,006C (S0) -LW T5,0008 (V1) -LUI AT,4F80 -MTC1 T5,F4 -BGEZ T5,7F04A36C -CVT.S.W F6,F4 -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -//7F04A36C: -DIV.S F10,F24,F6 -LBU T6,0060 (S0) T6=cur R -LBU T0,0063 (S0) T0=cur G -LBU T4,0066 (S0) T4=cur B -SB T6,0061 (S0) move cur R->0x61 -LBU T8,0069 (S0) T8=cur A -SWC1 F10,0070 (S0) -LW T7,0004 (V1) T7=new RGBA -SB T0,0064 (S0) move cur G->0x64 -SRL T9,T7,0x18 -SB T9,0062 (S0) final R->0x62 -LW T1,0004 (V1) T1=new RGBA -SB T4,0067 (S0) move cur B->0x67 -SRL T3,T1,0x10 -SB T3,0065 (S0) final G->0x65 -LW T5,0004 (V1) T5=new RGBA -SB T8,006A (S0) move cur A->0x6A -ADDIU T1,V0,0003 -SRL T7,T5,0x8 -SB T7,0068 (S0) final B->0x68 -LW T0,0004 (V1) T0=new RGBA -SH T1,0004 (S0) -BEQ R0,R0,7F04A468 -SB T0,006B (S0) final A->0x6B - -//7F04A3CC: command 0E: set image rotation -LW T2,0004 (V1) -ADDIU T3,V0,0002 -SH T3,0004 (S0) new com offset -MTC1 T2,F18 -NOP -CVT.S.W F4,F18 -MUL.S F8,F4,F26 F26=pi*2 -DIV.S F6,F8,F2 F2=65536 -BEQ R0,R0,7F04A468 -SWC1 F6,000C (S0) - -//7F04A3F4: command 0F: rotate image from current -LW T4,0004 (V1) -LUI AT,8005 -LWC1 F10,8378 (AT) F10=80048378: ? -MTC1 T4,F18 -NOP -CVT.S.W F4,F18 -MUL.S F8,F10,F4 -LWC1 F10,000C (S0) -MUL.S F6,F8,F26 F26=pi*2 -DIV.S F18,F6,F2 F2=65536 -ADD.S F4,F10,F18 -SWC1 F4,000C (S0) -LWC1 F12,000C (S0) -C.LE.S F26,F12 -NOP -BC1FL 7F04A448 -C.LT.S F12,F20 -SUB.S F8,F12,F26 -SWC1 F8,000C (S0) -LWC1 F12,000C (S0) -C.LT.S F12,F20 -//7F04A448: -NOP -BC1FL 7F04A460 -LHU T5,0004 (S0) -ADD.S F6,F12,F26 -SWC1 F6,000C (S0) -LHU T5,0004 (S0) -//7F04A460: -ADDIU T6,T5,0002 -SH T6,0004 (S0) -//7F04A468: iterate to next command if not stopped -BEQL S1,R0,7F049FF4 -LHU V0,0004 (S0) -... -//7F04AC18: -JR RA -ADDIU SP,SP,00B0 - -+ + - + -+ + - -routine to set the thingies for each object: -7F049C98 7E7C8 accepts A1=ani to use, A0=target ani block to fill -ADDIU SP,SP,FFE8 -LUI A2,8003 -SLTIU AT,A1,0034 -SW RA,0014 (SP) -BEQ AT,R0,7F049F28 -ADDIU A2,A2,0B74 A2=80030B74: start of table (BOND) -SLL T6,A1,0x2 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,2B98 (AT) T6=80052B98: TLB that sets the address for each animation -JR T6 -NOP - - -//7F049F28: return and default -JAL 7F049C8C - SW A1,0000 (A0) - JR RA - SH R0,0004 (A0) -OR A1,A2,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -+ + - + -+ + - -object animation controller 0x74 -0x0 4 pointer to animation -0x4 2 offset to current command, in words -0x6 2 wait counter; FFFF indicates currently running -0x8 4 image # from monitor image bank -0xC 4 [float] rotation -0x10 4 [float] current zoom X -0x14 4 [float] 0= start zoom X -0x18 4 [float] zoom X timer -0x1C 4 [float] initial zoom X -0x20 4 [float] final zoom X -0x24 4 [float] current zoom Y -0x28 4 [float] 0= start zoom Y -0x2C 4 [float] zoom Y timer -0x30 4 [float] initial zoom Y -0x34 4 [float] final zoom Y -0x38 4 [float] current horizontal position -0x3C 4 [float] 0= start horizontal scroll -0x40 4 [float] horizontal scroll timer -0x44 4 [float] horizontal initial position -0x48 4 [float] horizontal final position -0x4C 4 [float] current vertical position -0x50 4 [float] 0= start vertical scroll -0x54 4 [float] vertical scroll timer -0x58 4 [float] vertical initial position -0x5C 4 [float] vertical final position -0x60 1 current red component -0x61 1 initial red component -0x62 1 final red component -0x63 1 current green component -0x64 1 initial green component -0x65 1 final green component -0x66 1 current blue component -0x67 1 initial blue component -0x68 1 final blue component -0x69 1 current alpha component -0x6A 1 initial alpha component -0x6B 1 final alpha component -0x6C 4 [float] 0= start colour shift -0x70 4 [float] colour shift timer -0x74 4 [float] - - -object animation controller copies -8002A260/80075B98 94D0-9544 Monitor image object animation controller -8002A2D4/80075C10 9544-95B8 ? object animation controller -8002A348/80075C88 95B8-962C Taser object animation controller - - -CALLED BY A LARGER ROUTINE... -7F001750: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F001958 -NOP -JAL 7F001B08 - LUI AT,8007 - SW R0,1E00 (AT) - LUI AT,8007 - LUI V1,8007 - LUI V0,8007 - ADDIU V0,V0,1E78 - ADDIU V1,V1,1E08 - SW R0,1E04 (AT) - //7F001B28: - ADDIU V1,V1,0010 - SW R0,FFF4 (V1) - SW R0,FFF8 (V1) - SW R0,FFFC (V1) - BNE V1,V0,7F001B28 - SW R0,FFF0 (V1) - JR RA - NOP -NOP -... -//7F001900: -LUI AT,8003 -ADDIU SP,SP,0018 -JR RA -SWC1 F0,0828 (AT) - - -7F001958 COPIES 8002-s to stack, then from stack to 8007-s -ADDIU SP,SP,FEA0 -LUI T6,8003 -ADDIU V0,SP,00EC V0=spot on stack for #3 - standard controller -ADDIU T6,T6,A260 T6=8002A260: start of block -ADDIU V1,SP,0078 V1=spot on stack for #2 - unknown controller -ADDIU A0,SP,0004 A0=spot on stack for #1 - Taser controller -ADDIU T9,T6,006C T9=addy for last word of block -OR T0,V0,R0 T0=copy spot 3 -//7F001978: copy standard controller onto stack -LW AT,0000 (T6) -ADDIU T6,T6,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T6) -SW AT,FFF8 (T0) -LW AT,FFFC (T6) -BNE T6,T9,7F001978 copy standard controller onto stack to end -SW AT,FFFC (T0) -//7F00199C: final entries and prep write -LW AT,0000 (T6) -LUI T1,8007 -ADDIU T1,T1,5B98 T1=80075B98: target copy address -SW AT,0000 (T0) second to last entry -LW T9,0004 (T6) -OR T5,V0,R0 T5=copy spot #3 -ADDIU T4,V0,006C T4=endpoint -SW T9,0004 (T0) final entry -//7F0019BC: write standard controller to 80075B98 -LW AT,0000 (T5) -ADDIU T5,T5,000C -ADDIU T1,T1,000C -SW AT,FFF4 (T1) -LW AT,FFF8 (T5) -SW AT,FFF8 (T1) -LW AT,FFFC (T5) -BNE T6,T9,7F0019BC -SW AT,FFFC (T1) -//7F0019E0: -LW AT,0000 (T5) -LUI T8,8003 -ADDIU T8,T8,A2D4 T8=8002A2D4: Unknown controller -SW AT,0000 (T1) -LW T4,0004 (T5) -ADDIU T6,T8,006C T6=endpoint -OR T0,V1,R0 T0=copy spot #2 -SW T4,0004 (T1) -//7F001A00: -LW AT,0000 (T8) -ADDIU T8,T8,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T8) -SW AT,FFF8 (T0) -LW AT,FFFC (T8) -BNE T6,T9,7F001A00 -SW AT,FFFC (T0) -//7F001A24: -LW AT,0000 (T8) -LUI T3,8007 -ADDIU T3,T3,5C10 -SW AT,0000 (T0) -LW T6,0004 (T8) -OR T1,V1,R0 -ADDIU T5,V1,006C -SW T6,0004 (T0) -//7F001A44: -LW AT,0000 (T1) -ADDIU T1,T1,000C -ADDIU T3,T3,000C -SW AT,FFF4 (T3) -LW AT,FFF8 (T1) -SW AT,FFF8 (T3) -LW AT,FFFC (T1) -BNE T6,T9,7F001A44 -SW AT,FFFC (T3) -//7F001A68: -LW AT,0000 (T1) -LUI T9,8003 -ADDIU T9,T9,A348 -SW AT,0000 (T3) -LW T5,0004 (T1) -ADDIU T8,T9,006C -OR T0,A0,R0 -SW T5,0004 (T3) -//7F001A88: -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T9) -SW AT,FFF8 (T0) -LW AT,FFFC (T9) -BNE T6,T9,7F001A44 -SW AT,FFFC (T0) -//7F001AAC: -LW AT,0000 (T9) -LUI T4,8007 -ADDIU T4,T4,5C88 -SW AT,0000 (T0) -LW T8,0004 (T9) -OR T3,A0,R0 -ADDIU T1,A0,006C -SW T8,0004 (T0) -//7F001ACC: -LW AT,0000 (T3) -ADDIU T3,T3,000C -ADDIU T4,T4,000C -SW AT,FFF4 (T4) -LW AT,FFF8 (T3) -SW AT,FFF8 (T4) -LW AT,FFFC (T3) -BNE T6,T9,7F001ACC -SW AT,FFFC (T4) -//7F001AF0: -LW AT,0000 (T3) -SW AT,0000 (T4) -LW T1,0004 (T3) -ADDIU SP,SP,0160 -JR RA -SW T1,0004 (T4) - - -+ + - + -+ + - -Used animation routines: (ensure no ruptures!) -1 desktops -2 10 screens -3 3 wave patterns -5 scrolling green text (up) -8 red bar graph + -B radar -C spinning cube -D 3 screens -E red target -F 7 screens -10 world map -11 karl yelling -12 skateboard -13 police guy -16 BUNKER SCREENS 16 (first entry) -2E red brighten -2F green brighten -30 grey solid -31 red solid -32 green solid -33 black solid -34 special -35 taser - -+ + - + -+ + - -TASER read directly from 80075C88 - -read for image offset: -//7F04A7CC: -LW V0,0008 (S0) -SLTIU AT,V0,0064 only +img offsets allowed; what test retains pointer support? -BEQ AT,R0,7F04A7F4 -OR S1,V0,R0 assumes it is a pointer -SLL T5,V0,0x2 -LW T7,D120 (T7) T7=8008D120: pointer to monitor images in global img table -SUBU T5,T5,V0 -SLL T5,T5,0x2 T5=img# * 0xC; offset to entry in global img table -BEQ R0,R0,7F04A7F4 -ADDU S1,T5,T7 -//7F04A7F4: -BEQ S1,R0,7F04AA9C -LUI AT,3F00 - -+ + - + -+ + - -More Fun - Explosions manually set pointers! -//7F04E5BC: 0x handle a destroyed 0A object! -ADDIU AT,R0,000A -BNEL V0,AT,7F04E5F4 -ADDIU AT,R0,000B -JAL 7F03FFC0 - LBU T6,0002 (A0) - ANDI T7,T6,0080 - BNEL T7,R0,7F03FFDC - LWC1 F4,0070 (A0) - JR RA - OR V0,R0,R0 - //7F03FFDC: - TRUNC.W.S F6,F4 - MFC1 V0,F6 - NOP - SRA T9,V0,0x2 - ADDIU V0,T9,0001 - JR RA - NOP -OR A0,S0,R0 -ADDIU AT,R0,0001 -BNE V0,AT,7F04E6CC -ADDIU A0,S0,0080 -LUI A1,8003 -JAL 7F049C8C -ADDIU A1,A1,1EE8 -BEQ R0,R0,7F04E6CC -NOP - -//7F04E5F0: 0x handle a destroyed 0B object! -ADDIU AT,R0,000A -BNEL V0,AT,7F04E658 -ADDIU AT,R0,0024 -JAL 7F03FFC0 -OR A0,S0,R0 -ADDIU AT,R0,0001 -BNE V0,AT,7F04E6CC -ADDIU A0,S0,0080 -LUI A1,8003 -JAL 7F049C8C set monitor 1 -ADDIU A1,A1,1EE8 -LUI A1,8003 -ADDIU A1,A1,1EE8 -JAL 7F049C8C set monitor 2 -ADDIU A0,S0,00F4 -LUI A1,8003 -ADDIU A1,A1,1EE8 -JAL 7F049C8C set monitor 3 -ADDIU A0,S0,0168 -LUI A1,8003 -ADDIU A1,A1,1EE8 -JAL 7F049C8C set monitor 4 -ADDIU A0,S0,01DC -BEQ R0,R0,7F04E6CC -NOP diff --git a/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/wallscreens.txt b/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/wallscreens.txt deleted file mode 100644 index 002341a..0000000 --- a/notes/GE Documentation/Objects and Attributes/Data and Features/0A 0B Monitors/wallscreens.txt +++ /dev/null @@ -1,115 +0,0 @@ -individual screen images -00 - Bond Silhouette -01 - NOKAYOH -02 - BENOH APM3A -03 - TAPI(backwards E)T -04 - C383PHAEA -05 - NOPATYAPRET -06 - White Emblem -07 - Slanted Earth View -08 - Jewish Star Screen -09 - Hot Green/Orange Planet -0A - Asteroid With Lines -0B - Blue Computer Screen -0C - Wheels and Squares of colour -0D - Satellite Above Planet -0E - Shuttle Info and Pic -0F - Computer Windows -10 - White 3D Box -11 - Shuttle Slanted Blasting Off -12 - Shuttle Blasting Off -13 - Earth On Whole Screen -14 - Earth On Whole Screen -15 - Galaxy With Star -16 - Galaxy With Star -17 - Saturn -18 - Earth Great Lakes View -19 - Crosshair On Earth -1A - Galaxy -1B - Fizzled Screen -1C - Radio Wave (Squiggle) -1D - Green Text -1E - Bar Graph -1F - Squares Around Larger Squares -20 - Russian With Hat (From Surface 2 If You Press Computer) -21 - Russian With Hat Arm Up -22 - Russian With Hat Arm Up More -23 - Russian With Hat Arm Up More -24 - Silhouette With SkateBoard (From Bunker 2 In First Room After Cells) -25 - Silhouette With SkateBoard Moving -26 - Silhouette With SkateBoard Moving More -27 - Silhouette With SkateBoard Moving More -28 - Person Talking (From Bunker 2 In First Room After Cells) -29 - Person Talking With Mouth Open -2A - Person Talking With Mouth Open More -2B - Person Talking With Mouth Closed -2C - World Map From Large Screens -2D - 3D Cube -2E - 3D Cube Other Direction -2F - 3D Cube Other Direction -30 - White Flag With Black Piece -31 - Sink? -32 - Sky? -33 - Dots? -34 - Blue? -35 - Copier From Folder Screen! -36 - Eraser From Folder Screen! -37 - SELECT FILE -38 - A Check (After Completing An Agent Level, The Red Check) -39 - An X -3A - Opal-Shaped Dot -3B - ? (Looks like Texture of Exploding Cans) -3C - Bond Multi Image Piece -3D - Bond Multi Image Piece -3E - Bond Multi Image Piece -3F - Bond Multi Image Piece -40 - Beta Bond Multi Image Piece -41 - Beta Bond Multi Image Piece -42 - Beta Bond Multi Image Piece -43 - Beta Bond Multi Image Piece -44 - Beta Bond 2Multi Image Piece -45 - Beta Bond 2Multi Image Piece -46 - Beta Bond 2Multi Image Piece -47 - Beta Bond 2Multi Image Piece -48 - Beta Bond 3Multi Image Piece -49 - Beta Bond 3Multi Image Piece -4A - Beta Bond 3Multi Image Piece -4B - Beta Bond 3Multi Image Piece -4C - Boris Multi Piece -4D - Boris Multi Piece -4E - Boris Multi Piece -4F - Boris Multi Piece -50 - Ourumov Multi Picture -51 - ? - -animation values -00 beta bond - scrolling -01 desktops, sattelite - scrolling -02 10 screens... earths, galaxies, targetting, shuttles -03 3 wave patterns -04 sine wave pattern -05 scrolling green text (up) -06 scrolling dark red text (down) -07 scrolling dark green text (down) -08 red bar graph (increment) -09 blue bar graph (increment) -0A green bar graph (decrement) -0B radar display -0C spinning cube -0D 3 screens... location, weapon armed, severnaya -0E red target in center of bunker display -0F 7 screens... sattelite, targetting, orbit, telemetric -10 green global map - scrolling -11 karl yelling -12 skateboard -13 police guy -14 -15 scrolling green text (up) -16 - 2D same set as #2/#F, with all possible techniques used -(2e, 2f used on pushbuttons) -2E red brightening screen -2F green brightening screen -30 grey solid screen -31 red solid screen -32 green solid screen -33 black solid screen \ No newline at end of file diff --git a/notes/GE Documentation/Objects and Attributes/Data and Features/0D Autoturrets/(sub) 7F046C6C - autoturret activation.txt b/notes/GE Documentation/Objects and Attributes/Data and Features/0D Autoturrets/(sub) 7F046C6C - autoturret activation.txt deleted file mode 100644 index 264485d..0000000 --- a/notes/GE Documentation/Objects and Attributes/Data and Features/0D Autoturrets/(sub) 7F046C6C - autoturret activation.txt +++ /dev/null @@ -1,790 +0,0 @@ -subsection of 7F0452D4 - -//7F046C6C autogun actvation routine -LW T4,0008 (S1) ;T4=first bitflag field (S1=p->setup object declaration) -SLL T6,T4,0x3 ;T6=T4*8: mask first three bits, theoretically -BLTZL T6,7F047564 ;skip if activated (20000000: rotate toward player) -ADDIU AT,R0,0027 -JAL 7F089798 ;V0=p->cur.BONDposdata (8006) -LW S0,0004 (S3) ;S0=p->object data (S3=p->obj.posdata (8006)) -SW R0,04AC (SP) -SW R0,04A8 (SP) -SW R0,04A4 (SP) -LW V1,000C (S1) ;V1=obj.data+C: second bitflag field -OR S2,V0,R0 ;S2=V0: p->cur.BONDposdata -SLL T5,V1,0x0 ;T5=V1: 2nd bitflag field -BGEZ T5,7F046DF8 ;branch if "disable player detection" not set 80000000 -SLL T7,V1,0x1 -BGEZL T7,7F046CC8 ;branch if "?" not set 40000000 -LWC1 F2,0084 (S0) -LWC1 F8,0090 (S0) -LWC1 F4,009C (S0) -SWC1 F8,0084 (S0) ;data+84=F8: swap rotation -LWC1 F2,0084 (S0) ;F2=new rotation -BEQ R0,R0,7F046D98 -SWC1 F4,0098 (S0) ;data+98=F4: swap elevation -//7F046CC4: -LWC1 F2,0084 (S0) ;F2=data+84: rotation -LWC1 F10,0090 (S0) -C.EQ.S F2,F10 -NOP -BC1F 7F046D98 ;branch if rotation != cur.rot -NOP -LWC1 F6,0098 (S0) ;F6=data+98: elevation -LWC1 F4,009C (S0) -C.EQ.S F6,F4 -NOP -BC1F 7F046D98 ;branch if elevation != cur.elevation -NOP -JAL 7000A450 ;V0=random byte -NOP -MTC1 V0,F8 -LUI AT,8005 -LWC1 F20,2AE8 (AT) ;F20=80052AE8: -BGEZ V0,7F046D20 -CVT.S.W F10,F8 -LUI AT,4F80 -MTC1 AT,F6 -NOP -ADD.S F10,F10,F6 -LUI AT,2F80 -MTC1 AT,F4 -LUI AT,421C -MTC1 AT,F6 -MUL.S F8,F10,F4 -LUI AT,3F80 -MTC1 AT,F4 -LUI AT,43B4 -MUL.S F10,F8,F6 -ADD.S F8,F10,F4 -MTC1 AT,F10 -MUL.S F6,F8,F20 -DIV.S F4,F6,F10 -JAL 7000A450 ;V0=random byte -SWC1 F4,0098 (S0) -MTC1 V0,F8 -LUI AT,4F80 -BGEZ V0,7F046D78 -CVT.S.W F6,F8 -MTC1 AT,F10 -NOP -ADD.S F6,F6,F10 -LUI AT,2F80 -MTC1 AT,F4 -NOP -MUL.S F8,F6,F4 -NOP -MUL.S F10,F8,F20 -SWC1 F10,0084 (S0) -LWC1 F2,0084 (S0) -//7F046D98: -LUI AT,8005 -LWC1 F0,2AEC (AT) ;F0=80052AEC: [37433637] -LUI AT,8005 -LWC1 F6,2AF4 (AT) ;F6=80052AF4: [3A3702D4] -MFC1 A1,F2 -MFC1 A3,F0 -ADDIU A0,S0,0090 ;A0=p->obj.data+90: cur.rotation -ADDIU A2,S0,0094 ;A2=p->obj.data+94: -SWC1 F0,0010 (SP) ;SP+10= -JAL 7F04310C -SWC1 F6,0014 (SP) ;SP+14= -LUI AT,8005 -LWC1 F0,2AF8 (AT) ;F0=80052AF8: [36C33637] -LUI AT,8005 -LWC1 F4,2AFC (AT) ;F4=80052AFC: [39B702D4] -LW A1,0098 (S0) ;A1=obj.data+98: elevation -MFC1 A3,F0 -ADDIU A0,S0,009C ;A0=p->obj.data+9C: cur.elevation -ADDIU A2,S0,00A0 ;A2=p->obj.data+A0: -SWC1 F0,0010 (SP) ;SP+10=F0: -JAL 7F04310C -SWC1 F4,0014 (SP) ;SP+14=F4: -BEQ R0,R0,7F048230 -LBU V0,0003 (S1) ;V0=obj.data+3: object type -//7F046DF8: probably only routine used... -LWC1 F8,0008 (S2) ;F8=BONDposdata+8: BOND.xpos -LWC1 F10,0058 (S1) ;F10=objdata+58: obj.xpos -LWC1 F6,000C (S2) ;F6=BONDposdata+C: BOND.ypos -LWC1 F4,005C (S1) ;F4=objdata+5C: obj.ypos -SUB.S F0,F8,F10 ;F0=dif.xpos -LUI AT,41A0 -MTC1 AT,F10 ;F10=20.0 [41A00000] -SUB.S F8,F6,F4 ;F8=dif.ypos -SUB.S F6,F8,F10 ;F6=dif.ypos - 20.0 -MUL.S F10,F0,F0 ;F10=(dif.xpos)^2 -SWC1 F6,04C0 (SP) ;SP+4C0= (dif.ypos - 20.0) -LWC1 F8,0060 (S1) ;F8=objdata+60: obj.zpos -LWC1 F4,0010 (S2) ;F4=BONDposdata+10: BOND.zpos -SWC1 F0,04C4 (SP) ;SP+4C4= dif.xpos -SUB.S F2,F4,F8 ;F2=dif.zpos -MUL.S F6,F2,F2 ;F6=(dif.zpos)^2 -SWC1 F2,04BC (SP) ;SP+4BC= dif.zpos -ADD.S F20,F10,F6 ;F20=(dif.xpos)^2 + (dif.zpos)^2 -SWC1 F20,04B8 (SP) ;SP+4B8= (dif.xpos)^2 + (dif.zpos)^2 -JAL 7001F7E0 ;F0=sqrt(F12): distance -MOV.S F12,F20 ;F12=(dif.xpos)^2 + (dif.zpos)^2 -SWC1 F0,04B0 (SP) ;SP+4B0= distance -//7F046E50: -LW T8,0008 (S1) ;T8=1st bitflag field -MOV.S F2,F0 ;F2=distance -SLL T0,T8,0x4 ;T0=flags*0x10 -BGEZL T0,7F046E80 ;branch if 08000000 not set -LWC1 F12,04B8 (SP) -//7F046E64: -LWC1 F0,04C0 (SP) ;F0=(dif.ypos - 20.0) -MUL.S F4,F0,F0 ;F4=(dif.ypos - 20.0)^2 -ADD.S F12,F20,F4 ;F12=(dif.xpos)^2 + (dif.zpos)^2 + (dif.ypos - 20.0)^2 -JAL 7001F7E0 ;F0=sqrt(F12): distance -SWC1 F12,04B8 (SP) ;SP+4B8= (dif.xpos)^2 + (dif.zpos)^2 + (dif.ypos - 20.0)^2 -MOV.S F2,F0 ;F2= distance -LWC1 F12,04B8 (SP) ;F12=(dif.xpos)^2 + (dif.zpos)^2 -//7F046E80: -JAL 7F02D244 ;F0=multiplier based on distance -SWC1 F2,04B4 (SP) ;SP+4B4= distance -SWC1 F0,04A0 (SP) ;SP+4A0= multiplier -LWC1 F8,0098 (S0) ;F8=objdata+0x98: base turret elevation -LWC1 F16,0084 (S0) ;F16=objdata+0x84: base turret rotation -LWC1 F2,04B4 (SP) ;F2=SP+4B4: distance -SWC1 F8,04D4 (SP) ;SP+4D4= base turret elevation (objdata+0x98) -LWC1 F10,00A8 (S0) ;F10=objdata+0xA8: activation distance -C.LE.S F2,F10 ;dist < active.dist -NOP -BC1FL 7F047104 ;branch if not within range -LW T4,04AC (SP) -//7F046EB0: within activation range -LWC1 F12,04C4 (SP) ;F12=dif.xpos -LWC1 F14,04BC (SP) ;F14=dif.zpos -JAL 7F05AA30 ;F0= angle btw F12 & F14: lateral rotation -SWC1 F16,04D8 (SP) ;SP+4D8= base lateral turret rotation (objdata+0x84) -SWC1 F0,049C (SP) ;SP+49C= lateral rotation -LWC1 F12,04C0 (SP) ;F12=(dif.ypos - 20.0) -JAL 7F05AA30 ;F0= elevation -LWC1 F14,04B0 (SP) ;F14= distance -SWC1 F0,0498 (SP) ;SP+498= vertical rotation -LW V0,0008 (S1) ;V0=1st bitflag field -LWC1 F16,04D8 (SP) ;F16= lateral turret rotation (objdata+0x84) -ADDIU T9,R0,0001 -SLL T3,V0,0x1 ;T3= test for 40000000: -BLTZ T3,7F046EF4 ;branch if set -SLL T1,V0,0x2 ;T1= test for 20000000: obj.in motion -BGEZ T1,7F046F04 ;branch if not set -LWC1 F6,049C (SP) ;F6=lateral rot. -//7F046EF4: if 60000000 set... -LUI AT,8005 -LWC1 F20,2B00 (AT) ;F20=80052B00: 2*Pi [40C90FDB] -BEQ R0,R0,7F046F9C -SW T9,04AC (SP) ;SP+4AC= 1 -//7F046F04: if neither set... -LWC1 F4,0090 (S0) ;F4=obj.data+90: -LUI AT,8005 -SUB.S F12,F6,F4 ;F12=lat.rot - (obj.data+90) -C.LT.S F12,F22 ;dif.lat.rot < 0 -NOP -BC1F 7F046F28 -NOP -LWC1 F20,2B04 (AT) ;F20=80052B04: 2*Pi [40C90FDB] -ADD.S F12,F12,F20 ;dif.lat.rot += 2Pi -//7F046F28: -LUI AT,8005 -LWC1 F20,2B08 (AT) ;F20=80052B08: 2*Pi [40C90FDB] -LUI AT,8005 -LWC1 F8,2B0C (AT) ;F8=80052B0C: Pi [40490FDB] -LUI AT,8005 -C.LT.S F8,F12 ;Pi < dif.lat.rot -NOP -BC1FL 7F046F54 -LWC1 F10,009C (S0) -SUB.S F12,F12,F20 ;dif.lat.rot += 2Pi -LWC1 F10,009C (S0) ;F10=obj.data+9C: -//7F046F54: -SUB.S F2,F0,F10 ;F2=vert.rot - (obj.data+9C) -C.LT.S F2,F22 ;dif.vert.rot < 0 -NOP -BC1F 7F046F68 -NOP -//7F046F68: -LWC1 F6,2B10 (AT) ;F6=80052B10: 1.221731 [3F9C61AB] -LUI AT,8005 -C.LT.S F12,F6 ;dif.vert.rot < 1.221731 -NOP -BC1FL 7F046FA0 -LW T4,04AC (SP) -LWC1 F4,2B14 (AT) ;F4=80052B14: -1.221731 [BF9C61AB] -ADDIU T2,R0,0001 -C.LT.S F4,F12 ;-1.221731 < dif.vert.rot -NOP -BC1FL 7F046FA0 -LW T4,04AC (SP) -SW T2,04AC (SP) ;SP+4AC= 1 -//7F046F9C: -LW T4,04AC (SP) -LWC1 F8,049C (SP) ;F8=lat.rot -OR A0,S2,R0 ;A0=S2: BONDposdata -BEQ T4,R0,7F047100 ;branch if not set from above -OR A1,R0,R0 ;A1=0 -LWC1 F10,0084 (S0) ;F10=obj.data+84: -LUI AT,8005 -LWC1 F6,2B18 (AT) ;F6=80052B18: -Pi [C0490FDB] -SUB.S F0,F8,F10 ;F0=lat.rot - base turret rotation -LW T6,0014 (S3) ;T6=obj.posdata+14: p->tile -LUI AT,8005 -C.LT.S F0,F6 ;dif.lat.rot < -Pi -SW T6,0490 (SP) ;SP+490= p->tile -BC1F 7F046FE0 -NOP -BEQ R0,R0,7F046FF8 -ADD.S F0,F0,F20 ;dif.lat.rot += 2Pi -//7F046FE0: -LWC1 F4,2B1C (AT) ;F4=80052B1C: Pi [40490FDB] -C.LE.S F4,F0 ;Pi < dif.lat.rot -NOP -BC1FL 7F046FFC -SWC1 F0,0494 (SP) -//7F046FF4: -SUB.S F0,F0,F20 ;F0= dif.lat.rot -= 2Pi -SWC1 F0,0494 (SP) ;SP+494= dif.lat.rot -JAL 7F08A03C -SWC1 F16,04D8 (SP) ;SP+4D8= base turret rotation (objdata+0x84) -LWC1 F0,0494 (SP) ;F0=dif.lat.rot -LWC1 F8,0088 (S0) -LWC1 F16,04D8 (SP) -C.LE.S F0,F8 -NOP -BC1FL 7F0470B8 -LW V0,00B8 (S0) -LWC1 F10,008C (S0) -ADDIU T5,R0,001B -C.LE.S F10,F0 -NOP -BC1FL 7F0470B8 -LW V0,00B8 (S0) -LWC1 F6,0010 (S2) -LW A1,0008 (S3) -LW A2,0010 (S3) -LW A3,0008 (S2) -SW T5,0014 (SP) -SWC1 F6,0010 (SP) -LWC1 F0,000C (S3) -ADDIU A0,SP,0490 -SWC1 F0,0018 (SP) -SWC1 F0,001C (SP) -LWC1 F2,000C (S2) -SWC1 F16,04D8 (SP) -SWC1 F2,0020 (SP) -JAL 7F0B0E24 -SWC1 F2,0024 (SP) -BEQ V0,R0,7F0470B4 -LWC1 F16,04D8 (SP) -LW T7,0490 (SP) -LW T8,0014 (S2) -BNEL T7,T8,7F0470B8 -LW V0,00B8 (S0) -//7F04708C: set bitflag -LW T0,0008 (S1) ;T0=obj.data+8: 1st bitflag field -LUI AT,2000 -ADDIU T1,R0,0001 -OR T3,T0,AT -SW T3,0008 (S1) ;flags |= 20000000: -LWC1 F4,0498 (SP) ;F4=vert.rot. -SW T1,04A4 (SP) ;SP+4A4= 1 -LWC1 F16,049C (SP) -BEQ R0,R0,7F0470EC -SWC1 F4,04D4 (SP) ;SP+4D4= base elevation -//7F0470B4: -LW V0,00B8 (S0) -LUI T9,8005 -BLTZL V0,7F0470EC -SW R0,04AC (SP) -LW T9,837C (T9) ;T9=8004837C: -ADDIU T2,T9,FF88 -SLT AT,T2,V0 -BEQL AT,R0,7F0470EC -SW R0,04AC (SP) -LWC1 F8,009C (S0) -LWC1 F16,0090 (S0) -BEQ R0,R0,7F0470EC -SWC1 F8,04D4 (SP) -//7F0470E8: -SW R0,04AC (SP) -OR A0,S2,R0 -ADDIU A1,R0,0001 -JAL 7F08A03C -SWC1 F16,04D8 (SP) -LWC1 F16,04D8 (SP) -LW T4,04AC (SP) -//7F047104: -LUI AT,8005 -LWC1 F20,2B20 (AT) -BEQL T4,R0,7F04712C -LW T6,00D0 (S0) -LWC1 F12,04B8 (SP) -JAL 7F02D244 -SWC1 F16,04D8 (SP) -LWC1 F16,04D8 (SP) -SWC1 F0,04A0 (SP) -//7F047128: -LW T6,00D0 (S0) -BEQ T6,R0,7F0471AC -LUI T5,8005 -LW T5,837C (T5) -ADDIU AT,R0,0078 -SWC1 F16,04D8 (SP) -DIV T5,AT -MFHI T7 -MTC1 T7,F10 -LUI AT,42F0 -MTC1 AT,F8 -CVT.S.W F6,F10 -MUL.S F4,F6,F20 -JAL 7F057EAC -DIV.S F12,F4,F8 -LUI AT,8005 -LWC1 F6,2B24 (AT) -LWC1 F10,04A0 (SP) -LWC1 F16,04D8 (SP) -MUL.S F4,F10,F6 -NOP -MUL.S F8,F4,F0 -ADD.S F16,F16,F8 -C.LT.S F16,F22 -NOP -BC1F 7F047198 -NOP -ADD.S F16,F16,F20 -C.LE.S F20,F16 -NOP -BC1FL 7F0471B0 -LWC1 F2,0084 (S0) -SUB.S F16,F16,F20 -//7F0471AC: -LWC1 F2,0084 (S0) -LUI AT,8005 -LWC1 F10,2B28 (AT) -SUB.S F0,F16,F2 -ADDIU A0,S0,0090 -C.LT.S F0,F10 -NOP -BC1F 7F0471D8 -NOP -BEQ R0,R0,7F0471F4 -ADD.S F0,F0,F20 -//7F0471D8: -LUI AT,8005 -LWC1 F6,2B2C (AT) -C.LE.S F6,F0 -NOP -BC1FL 7F0471F8 -LWC1 F12,0088 (S0) -SUB.S F0,F0,F20 -//7F0471F4: -LWC1 F12,0088 (S0) -LUI AT,8005 -C.LT.S F12,F0 -NOP -BC1FL 7F047218 -LWC1 F12,008C (S0) -BEQ R0,R0,7F04722C -ADD.S F16,F2,F12 -//7F047214: -LWC1 F12,008C (S0) -C.LT.S F0,F12 -NOP -BC1FL 7F047230 -C.LT.S F16,F22 -ADD.S F16,F2,F12 -//7F04722C: -C.LT.S F16,F22 -NOP -BC1FL 7F047244 -C.LE.S F20,F16 -ADD.S F16,F16,F20 -//7F047240: -C.LE.S F20,F16 -NOP -BC1F 7F047254 -NOP -SUB.S F16,F16,F20 -//7F047254: -LWC1 F0,2B30 (AT) -MFC1 A1,F16 -ADDIU A2,S0,0094 -SWC1 F0,0010 (SP) -LWC1 F4,00A4 (S0) -MFC1 A3,F0 -SWC1 F16,04D8 (SP) -JAL 7F04310C -SWC1 F4,0014 (SP) -LUI AT,8005 -LWC1 F0,2B34 (AT) -ADDIU A0,S0,009C -LW A1,04D4 (SP) -SWC1 F0,0010 (SP) -LWC1 F8,00A4 (S0) -MFC1 A3,F0 -ADDIU A2,S0,00A0 -JAL 7F04310C -SWC1 F8,0014 (SP) -LWC1 F16,04D8 (SP) -LWC1 F10,0090 (S0) -LUI AT,8005 -LWC1 F6,04D4 (SP) -SUB.S F12,F16,F10 -C.LT.S F12,F22 -NOP -BC1F 7F0472C8 -NOP -ADD.S F12,F12,F20 -//7F0472C8: -LWC1 F0,2B38 (AT) -C.LT.S F0,F12 -NOP -BC1FL 7F0472E4 -LWC1 F4,009C (S0) -SUB.S F12,F12,F20 -//7F0472E0: -LWC1 F4,009C (S0) -SUB.S F2,F6,F4 -C.LT.S F2,F22 -NOP -BC1FL 7F047300 -C.LT.S F0,F2 -ADD.S F2,F2,F20 -//7F0472FC: -C.LT.S F0,F2 -NOP -BC1FL 7F047314 -SW R0,00D0 (S0) -SUB.S F2,F2,F20 -//7F047310: -SW R0,00D0 (S0) -LW T8,04AC (SP) -LWC1 F8,04A0 (SP) -BEQL T8,R0,7F04743C -LW T9,04A8 (SP) -C.LT.S F12,F8 -LWC1 F10,04A0 (SP) -BC1FL 7F04739C -ADD.S F0,F10,F10 -NEG.S F0,F8 -C.LT.S F0,F12 -NOP -BC1FL 7F04739C -ADD.S F0,F10,F10 -C.LT.S F2,F8 -NOP -BC1FL 7F04739C -ADD.S F0,F10,F10 -C.LT.S F0,F2 -ADDIU T0,R0,0001 -BC1FL 7F04739C -ADD.S F0,F10,F10 -SW T0,00D0 (S0) -LW T1,04A4 (SP) -ADDIU T3,R0,0001 -SW T3,04A8 (SP) -BEQ T1,R0,7F047438 -LUI T9,8005 -LW T9,837C (T9) -LUI T2,8005 -SW T9,00B8 (S0) -LW T2,837C (T2) -BEQ R0,R0,7F047438 -SW T2,00BC (S0) -//7F047398: -ADD.S F0,F10,F10 -C.LT.S F12,F0 -NOP -BC1FL 7F047408 -LW V0,00B8 (S0) -NEG.S F14,F0 -C.LT.S F14,F12 -NOP -BC1FL 7F047408 -LW V0,00B8 (S0) -C.LT.S F2,F0 -NOP -BC1FL 7F047408 -LW V0,00B8 (S0) -C.LT.S F14,F2 -ADDIU T4,R0,0001 -BC1FL 7F047408 -LW V0,00B8 (S0) -SW T4,00D0 (S0) -LW T5,04A4 (SP) -ADDIU T6,R0,0001 -SW T6,04A8 (SP) -BEQ T5,R0,7F047438 -LUI T7,8005 -LW T7,837C (T7) -BEQ R0,R0,7F047438 -SW T7,00B8 (S0) -//7F047404: -LW V0,00B8 (S0) -LUI T8,8005 -BLTZL V0,7F04743C -LW T9,04A8 (SP) -LW T8,837C (T8) -ADDIU T3,R0,0001 -ADDIU T1,R0,0001 -ADDIU T0,T8,FF88 -SLT AT,T0,V0 -BEQL AT,R0,7F04743C -LW T9,04A8 (SP) -SW T3,00D0 (S0) -SW T1,04A8 (SP) -//7F047438: -LW T9,04A8 (SP) -LUI AT,8005 -BEQL T9,R0,7F047490 -LWC1 F2,00B0 (S0) -LWC1 F0,2B3C (AT) -LUI AT,8005 -LWC1 F6,2B40 (AT) -LUI AT,8005 -LWC1 F4,8378 (AT) -LWC1 F10,00B0 (S0) -MUL.S F8,F6,F4 -ADD.S F6,F10,F8 -SWC1 F6,00B0 (S0) -LWC1 F2,00B0 (S0) -C.LT.S F0,F2 -NOP -BC1FL 7F047508 -C.LT.S F22,F2 -SWC1 F0,00B0 (S0) -BEQ R0,R0,7F047504 -LWC1 F2,00B0 (S0) -//7F04748C: -LWC1 F2,00B0 (S0) -LUI T2,8005 -C.LT.S F22,F2 -NOP -BC1FL 7F047508 -C.LT.S F22,F2 -LW T2,8374 (T2) -OR V0,R0,R0 -LUI AT,8005 -BLEZ T2,7F0474E4 -NOP -LWC1 F0,2B44 (AT) -LWC1 F4,00B0 (S0) -LUI T4,8005 -ADDIU V0,V0,0001 -MUL.S F10,F4,F0 -SWC1 F10,00B0 (S0) -LW T4,8374 (T4) -SLT AT,V0,T4 -BNEL AT,R0,7F0474C0 -LWC1 F4,00B0 (S0) -LWC1 F2,00B0 (S0) -//7F0474E4: -LUI AT,8005 -LWC1 F8,2B48 (AT) -C.LE.S F2,F8 -NOP -BC1FL 7F047508 -C.LT.S F22,F2 -SWC1 F22,00B0 (S0) -LWC1 F2,00B0 (S0) -//7F047504: -C.LT.S F22,F2 -LUI AT,8005 -BC1FL 7F048230 -LBU V0,0003 (S1) -LWC1 F4,8378 (AT) -LWC1 F6,00B4 (S0) -MUL.S F10,F2,F4 -ADD.S F8,F6,F10 -SWC1 F8,00B4 (S0) -LWC1 F0,00B4 (S0) -C.LE.S F20,F0 -NOP -BC1FL 7F048230 -LBU V0,0003 (S1) -SUB.S F4,F0,F20 -SWC1 F4,00B4 (S0) -LWC1 F0,00B4 (S0) -C.LE.S F20,F0 -NOP -BC1TL 7F047540 -SUB.S F4,F0,F20 -BEQ R0,R0,7F048230 -LBU V0,0003 (S1) - - -+_+ - ---on detection of player, changes to allocated data segment... -//7F049984: -ADDIU T6,R0,000E -SB R0,0000 (V1) ;data+0=0: status (detect counter) -SB T6,0001 (V1) ;data+1=E: -BC1F 7F04999C -SWC1 F12,001C (V1) -MOV.S F12,F0 -//7F04999C: -LB T5,0001 (V1) ;T5=data+1: -ADDIU AT,R0,0016 -BNE T5,AT,7F049A40 ;branch if data+1 != 16 -LUI AT,8005 -//7F0499AC: data+1 = 16... -LWC1 F2,2B7C (AT) ;F2=80052B7C: [453B8000] -LUI AT,3E80 -MTC1 AT,F10 ;F10= [3E800000] -LUI AT,8005 -MUL.S F4,F10,F12 -SWC1 F4,0020 (V1) -LWC1 F8,2B80 (AT) ;F8=80052B80: [3F19999A] -MUL.S F0,F8,F12 -C.LT.S F2,F0 -SWC1 F0,0024 (V1) -BC1FL 7F0499E4 -SW V1,0090 (SP) -SWC1 F2,0024 (V1) -//7F0499E0: -SW V1,0090 (SP) -JAL 7000A450 -SWC1 F12,0094 (SP) -MTC1 V0,F6 -LW V1,0090 (SP) -LWC1 F12,0094 (SP) -BGEZ V0,7F049A10 -CVT.S.W F10,F6 -LUI AT,4F80 -MTC1 AT,F4 -NOP -ADD.S F10,F10,F4 -//7F049A10: -LUI AT,2F80 -MTC1 AT,F8 -LUI AT,8005 -LWC1 F4,8005 -LWC1 F4,2B84 (AT) -MUL.S F6,F10,F8 -LUI AT,8005 -LWC1 F8,2B88 (AT) -MUL.S F10,F6,F4 -SUB.S F6,F8,F10 -MUL.S F4,F6,F12 -BEQ R0,R0,7F049AC8 -SWC1 F4,0028 (V1) -//7F049A40: -etc... - -+_+ - -7F02D244 61D74 F0=multiplier based on distance - accepts: F12=distance^2 -LUI AT,8005 -LWC1 F4,1F2C (AT) ;F4=80051F2C: 2560000.0 [4A1C4000] -LUI AT,8005 -C.LT.S F4,F12 ;1600^2 < distance^2 -NOP -BC1F 7F02D26C -NOP -LUI AT,8005 -JR RA -LWC1 F0,1F30 (AT) ;F0=80051F30: 0.018756 [3C99A5B7] -//7F02D26C: -LWC1 F6,1F34 (AT) ;F6=80051F34: 640000.0 [491C4000] -LUI AT,8005 -C.LT.S F6,F12 -NOP -BC1F 7F02D290 ;800^2 < distance^2 -NOP -LUI AT,8005 -JR RA -LWC1 F0,1F38 (AT) ;F0=80051F38: 0.037624 [3D1A1B7B] -//7F02D290: -LWC1 F8,1F3C (AT) ;F8=80051F3C: 160000.0 [481C4000] -LUI AT,8005 -C.LT.S F8,F12 -NOP -BC1F 7F02D2B4 ;400^2 < distance^2 -NOP -LUI AT,8005 -JR RA -LWC1 F0,1F40 (AT) ;F0=80051F40: 0.074800 [3D9930A7] -//7F02D2B4: -LWC1 F10,1F44 (AT) ;F10=80051F44: 40000.0 [471C4000] -LUI AT,8005 -C.LT.S F10,F12 -NOP -BC1F 7F02D2D8 ;200^2 < distance^2 -NOP -LUI AT,8005 -JR RA -LWC1 F0,1F48 (AT) ;F0=80051F48: 0.149600 [3E1930A7] -//7F02D2D8: -LWC1 F0,1F4C (AT) ;F0=80051F4C: 0.251327 [3E80ADFD] -JR RA -NOP - -+_+ - -7F062B00 ??? - increments autoturret timer + ??? - accepts: A0=p->allocated data -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LB T6,0000 (A0) ;T6=data+0: leader byte -LUI T7,8005 -BLTZL T6,7F062BD8 ;return if no data in use -LW RA,0014 (SP) -LW T7,8374 (T7) ;T7=80048374: 1 if not paused! -SLTI AT,T7,0003 ;TRUE if clock running below 3 ticks... -BEQ AT,R0,7F062B44 ;branch if for some reason it isn't, though can't say when this would trigger... -LUI AT,8005 -//7F062B28: -LWC1 F6,8378 (AT) ;F6=80048378: ??? multiplier -LWC1 F4,0020 (A0) ;F4=data+20: -LWC1 F10,0028 (A0) ;F10=data+28: -MUL.S F8,F4,F6 -ADD.S F16,F10,F8 -BEQ R0,R0,7F062BA4 -SWC1 F16,0028 (A0) ;data+28 += F4*F6 -//7F062B44: clock acting funny... -JAL 7000A450 ;create psuedo-random byte -SW A0,0018 (SP) -MTC1 V0,F18 -LW A0,0018 (SP) -BGEZ V0,7F062B6C -CVT.S.W F4,F18 ;F4=(float) random -LUI AT,4F80 -MTC1 AT,F6 ;F6=4294967296.0 [4F800000] -NOP -ADD.S F4,F4,F6 ;rand += 4294967296.0 -//7F062B6C: -LUI AT,2F80 -MTC1 AT,F10 ;F10= [2F800000] -LUI AT,3F00 -MTC1 AT,F16 ;F16=0.5 [3F000000] -MUL.S F8,F4,F10 ;F8=d.rand / ??? -LUI AT,4000 -MTC1 AT,F6 ;F6=2.0 [40000000] -LWC1 F10,0020 (A0) ;F10=data+20: -MUL.S F18,F8,F16 ;F18=d.rand / 2*??? -LWC1 F16,0028 (A0) ;F16=data+28: -ADD.S F4,F6,F18 ;F4=2.0 + (d.rand / 2*???) -MUL.S F8,F10,F4 ;F8=F10 * (2.0 + (d.rand / 2*???)) -ADD.S F6,F16,F8 -SWC1 F6,0028 (A0) ;data+28 += value -//7F062BA4: -LWC1 F18,0028 (A0) ;F18=data+28: -LWC1 F10,001C (A0) ;F10=data+1C: -ADDIU T8,R0,FFFF ;T8= -1 -C.LE.S F10,F18 -NOP -BC1FL 7F062BCC ;branch if data+1C > data+28 -LB T9,0000 (A0) -BEQ R0,R0,7F062BD4 -SB T8,0000 (A0) ;state = -1 -//7F062BC8: -LB T9,0000 (A0) ;T9=data+0: state -ADDIU T0,T9,0001 -SB T0,0000 (A0) ;state +=1 -//7F062BD4: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Objects and Attributes/Data and Features/0D Autoturrets/notes.txt b/notes/GE Documentation/Objects and Attributes/Data and Features/0D Autoturrets/notes.txt deleted file mode 100644 index cd7ce7d..0000000 --- a/notes/GE Documentation/Objects and Attributes/Data and Features/0D Autoturrets/notes.txt +++ /dev/null @@ -1,4 +0,0 @@ -Sub: Poked around enough, finally got it. I was actually tracing the flash, turned out they shared the same counter and I missed this before. Of course, since damage is separate, you have to set them independently: It seems to fire more than one bullet at once. I’ll prob have to keep tracing to disable some JALs I imagine if I can. -80052b74 = 31DE4 Damage frequency value, how often hit -7F0497FC Damage of drone gun -7F04935C Firing rate of drone gun bullets/flash (it’s actually a SLTIU of a counter, was set to alternate (1) but setting higher works nicely) diff --git a/notes/GE Documentation/Objects and Attributes/Data and Features/14 Ammo Crate/14 object collection.txt b/notes/GE Documentation/Objects and Attributes/Data and Features/14 Ammo Crate/14 object collection.txt deleted file mode 100644 index a1a0e5c..0000000 --- a/notes/GE Documentation/Objects and Attributes/Data and Features/14 Ammo Crate/14 object collection.txt +++ /dev/null @@ -1,56 +0,0 @@ -ACTUALLY collect the blasted ammo box... -7F050338: 84E68 collect ammo crate -00001025 OR V0,R0,R0 ;cur=0 -00608025 OR S0,V1,R0 ;S0=V1: p->obj.data -24430001 ADDIU V1,V0,0001 ;V1=cur+1 type -//7F050344: 84E74 this forces type 2 to become type 1 ammo -24010001 ADDIU AT,R0,0001 -14410002 BNE V0,AT,7F050354 ;if cur =1, set type=1 -00602025 OR A0,V1,R0 ;A0=V1: A0=type -24040001 ADDU A0,R0,0001 ;force type=1 -//7F050354: 84E84 retrieve ammo total for current type -96050082 LHU A1,0082 (S0) ;A1=ammo from object -AFA4004C SW A0,004C (SP) ;SP+4C= ammo type -AFA30020 SW V1,0020 (SP) ;SP+20= actual type -0FC26919 JAL 7F09A464 ;ret V0=# players; fries V0,V1,T6,T7,T8,T9 -AFA50050 SW A1,0050 (SP) ;SP+50: ammo -24010001 ADDIU AT,R0,0001 -8FA30020 LW V1,0020 (SP) ;V1=actual type -8FA4004C LW A0,004C (SP) ;A0=ammo type -14410009 BNE V0,AT,7F05039C ;branch if multi -8FA50050 LW A1,0050 (SP) ;A1=ammo -//7F05037C: 84EAC solo only: ammo multiplier -44852000 MTC1 A1,F4 ;F4=ammo -3C018003 LUI AT,8003 -C4280B28 LWC1 F8,0B28 (AT) ;F8=80030B28: 1.0 -468021A0 CVT.S.W F6,F4 -46083282 MUL.S F10,F6,F8 -4600540D TRUNC.W.S F16,F10 -44058000 MFC1 A1,F16 ;A1=new ammo total -00000000 NOP -//7F05039C: 84ECC attribute the ammo! -00003025 OR A2,R0,R0 ;A2=0 no sound effect on ammo collection -8FA70074 LW A3,0074 (SP) ;A3=text display attribute (1 usually) -0FC13E9A JAL 7F04FA68 ;add the ammo to player's inventory -AFA30020 SW V1,0020 (SP) ;SP+20= actual type -8FA20020 LW V0,0020 (SP) ;V0=actual type -2401000D ADDIU AT,R0,000D ;AT=D ammo boxes hold 1-D ammo -26100004 ADDIU S0,S0,0004 ;S0+=4 next ammo slot -5441FFE2 BNEL V0,AT,7F050344 ;branch if more types -24430001 ADDIU V1,V0,0001 ;V1=next -//7F0503C0: 84EF0 play collection sound effect -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) ;A0=80063720: buffer -240500EA ADDIU A1,R0,00EA ;A1=SE 0EA -0C002382 JAL 70008E08 ;play sound 0EA -00003025 OR A2,R0,R0 ;A2=0 -100000A7 BEQ R0,R0,7F050674 ;all done -24030001 ADDIU V1,R0,0001 ;V1=1 - - -7F04FA68: - if A3=1: 7F04F9F8 text A0=type, A1=amount - if A2=1: 7F04F788 sound A0=type - - note: earmark 7F04F788 for reduction: use offset + pull SE from table. no TLB jumps! - also earmark 7F04FC3C to use a table with values for all ammo types. No TLB jumps! diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/07 ammo clip/07 ammo clips.txt b/notes/GE Documentation/Objects and Attributes/Expansion/07 ammo clip/07 ammo clips.txt deleted file mode 100644 index a312af3..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/07 ammo clip/07 ammo clips.txt +++ /dev/null @@ -1,26 +0,0 @@ -Ironically synominous with 03 objects, just stupidly - -7F004468: 38F98 expand 04 ammo clip objects -8FA80278 LW T0,0278 (SP) -110001A3 BEQ T0,R0,7F004AFC -00000000 NOP -8E49000C LW T1,000C (S2) -02A02025 OR A0,S5,R0 -02402825 OR A1,S2,R0 -0134C824 AND T9,T1,S4 -1720019D BNEZ T9,7F004AFC -00000000 NOP -0FC00A87 JAL 7F002A1C -02603025 OR A2,S3,R0 -10000199 BEQ R0,R0,7F004AFC -00000000 NOP - -7F002A1C: 3754C -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC00767 JAL 7F001D9C -00000000 NOP -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/07 ammo clip/Collect Clip.txt b/notes/GE Documentation/Objects and Attributes/Expansion/07 ammo clip/Collect Clip.txt deleted file mode 100644 index a997068..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/07 ammo clip/Collect Clip.txt +++ /dev/null @@ -1,11 +0,0 @@ -7F050310: - OR S0,V1,R0 - JAL 7F04FC3C ;ret V0=ammo for clip - OR A0,V1,R0 ;A0=V1: type of ammo - LW A0,0080 (S0) ;A0=ammo type - OR A1,V0,R0 ;A1=V0: amount of ammo - ADDIU A2,R0,0001 ;A2=play sound (sound flag=TRUE) - JAL 7F04FA68 ;add A1 of type A0 ammo to player's stock - LW A3,0074 (SP) ;A3=display text flag - BEQ R0,R0,7F050674 - ADDIU V1,R0,0001 diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/08 weapons/08 MP expansion.txt b/notes/GE Documentation/Objects and Attributes/Expansion/08 weapons/08 MP expansion.txt deleted file mode 100644 index 577b3c9..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/08 weapons/08 MP expansion.txt +++ /dev/null @@ -1,201 +0,0 @@ -refer to '08 weapon object type' for more info. - -rearranging the normal weapon routine. -Also, all MP weapons just jump to 7F002870, since they do anyway. -F0-FF are now valid, as opposed to F0-F8 -Best of all, will accept an Armor object. uses type FF - -7F00282C: -LBU V0,0080 (A3) //V0=type -SLTI AT,V0,0059 //tests if weapon is valid (<59) -BNEZ AT,7F00285C //retrieve type for MP or use current -ADDIU T6,V0,FF10 //T6=MP weapon # converted to index -//7F00283C: this only applies to MP weapons -SLTIU AT,T6,0008 -BEQ AT,R0,7F00296C //if < 8, doesn't think it is an MP weapon -SLL T6,T6,0x2 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,EF30 (AT) //T6=8004EF30 + offset (all 8 = 7F002870) -JR T6 -NOP - -7F00285C: write 08 object fields; deal with flag first -ADDIU AT,R0,0058 -BEQL V0,AT,7F002950 //branch if flag -SW A1,0018 (SP) -BEQ R0,R0,7F002970 //branch if a normal weapon pickup -LB A0,0080 (A3) //A0=weapon type - -7F002870: figure out MP weapon type -JAL 7F0C6614 //returns V0=pointer to weapon set -SW A3,002C (SP) -LW A3,002C (SP) //A3=object address -LUI AT,8007 -ADDIU T1,R0,0001 -LBU A0,0080 (A3) //A0=weapon type -ADDIU A0,A0,FF10 //A0=0-F -SLL T7,A0,0x2 -SUBU T7,R7,A0 -SLL T7,T7,0x3 //T7=offset type*0x18 -SW A0,9540 (AT) //converted type->80069540... -ADDU V1,V0,T7 //V1=pointer to specific weapon data in set -LW T8,0000 (V1) //T8=weapon type -LUI AT,4380 -MTC1 AT,F6 -SB T8,0080 (A3) //change object's weapon type to literal -LW T9,0004 (V1) //T9=model type -LUI AT,4F00 -SH T9,0004 (A3) //change model type -LWC1 F4,0008 (V1) //F4=scale -MUL.S F8,F4,F6 //F8=scale * 256 -... -//7F002930: -NOP -BLTZ T1,7F002924 -NOP -CTC1 T0,F31 -SH T1,0000 (A3) //scale->header -BEQ R0,R0,7F00296C -LW A1,0014 (V1) //A1=1 if weapon pickup present - -//7F00294C: //Flag tag check -SW A1,0018 (SP) -JAL 7F014758 //returns V0=8002B540=scenario -SW A3,002C (SP) -ADDIU AT,R0,0002 -LW A1,0018 (SP) -BEQ V0,AT,7F00296C //available if flag tag... -LW A3,002C (SP) //A3=object data -OR A1,R0,R0 //A1=0 (no pickup!) - - -======================================== -7F002800-7F002818 are presumed available - -//not sure if these are still necessary. Add if needed... -ADDIU A1,R0,0001 -SW A1,0018 (SP) -//These three lines are left untouched -7F002820: -*ADDIU T5,R0,FFFF //T5=-1 -*LUI AT,8007 -*SW T5,9540 (AT) //-1->80069540 mp weapon to draw ammo from (used in 14 ammo box routine) - - -rearrange the tests. -7F00282C: 0x3735C-E - LBU V0,0080 (A3) //V0=type - SLTI AT,V0,0059 //tests if weapon is valid (<59) -1020000C *BEQ AT,R0,7F002868 //jump smack to the MP listing if MP item - //only trouble is all invalid weapons go there too! -244EFF10 ADDIU T6,V0,FF10 //T6=MP weapon # converted to index -//7F00283C: test for flag and normal; do flag tag stuff -24010058 ADDIU AT,R0,0058 -1422004A *BNE V0,AT,7F00296C //branch if a normal weapon pickup -24010002 *ADDIU AT,R0,0002 -0FC051D6 *JAL 7F014758 //returns V0=8002B540=scenario -8FA7002C *LW A3,002C (SP) //A3=object data -54220046 *BNEL V0,AT,7F00296C -00002825 *OR A1,R0,R0 -8FA7002C *BEQ R0,R0,7F00296C -8FA50018 *LW A1,0018 (SP) - -(two available ops - save for scenario->bitflag hacks) -*NOP -*NOP - -//7F002868 -05C20040 *BLTZL T6,7F00296C //if not F0-FF, weapon will not appear -00002825 *OR A1,R0,R0 - -//7F002928: -ADDIU T1,R0,0100 - -//7F002930: hack the test. assume T5 still = -1 - 0x37460 - NOP - BLTZ T1,7F002924 - NOP - CTC1 T0,F31 - SH T1,0000 (A3) //scale->header -80E40080 *LB A0,0080 (A3) -148D0009 *BNE A0,T5,7F002970 //if type = -1, make some BA -8C650014 *LW A1,0014 (V1) //A1=1 if weapon pickup present -//7F002950: //BA check; - 0x37480 -8FBF0014 *LW RA,0014 (SP) -24010015 *ADDIU AT,R0,0015 -A0E10003 *SB AT,0003 (A3) make 15 obj type (BA) -3C010001 *LUI AT,0001 -ACE10080 *SW AT,0080 (A3) SET amount (100%) -1000000D *BEQ R0,R0,7F00299C -27FF0160 *ADDIU RA,RA,0160 offset from return to obj15 stuff - - -********************** -slight edit to above. We're inserting the flag test at the end, possibly with a branch. -Reason is you can then handle sets that don't include flag tag. Plus, multiflag etc. possible then. -Worth testing for. - -However! Do need to add a test to see if inf. ammo is on. If so, should force weapon available and kill ammo box - -7F00282C: 0x3735C-E - *LBU A0,0080 (A3) //V0=type - *SLTI AT,A0,0059 //tests if weapon is valid (<59) -1420004D *BNE AT,R0,7F00296C //skip MP listing if a valid object -244EFF10 *ADDIU T6,A0,FF10 //T6=MP weapon # converted to index -//7F00283C: test if MP -05C10040 *BGEZ T6,7F002870 //if not F0-FF, weapon will not appear -24010058 ADDIU AT,R0,0058 - -//7F002844: -5422004A *BNEL A0,AT,7F00299C //branch if an invalid (nonflag) that got routed here -00002825 *OR A1,R0,R0 -0FC051D6 *JAL 7F014758 //returns V0=8002B540=scenario -24010002 *ADDIU AT,R0,0002 -54220046 *BNEL V0,AT,7F00299C -00002825 *OR A1,R0,R0 - *BEQ R0,R0,7F00297C - *LW A1,002C (SP) //A1=object offset - - -//7F002928: -ADDIU T1,R0,0100 - -//7F002930: hack the test. assume T5 still = -1 - 0x37460 - NOP - BLTZ T1,7F002924 - NOP - CTC1 T0,F31 - SH T1,0000 (A3) //scale->header -80E40080 *LB A0,0080 (A3) -148D0008 *BNE A0,T5,7F00296C //if type = -1, make some BA -8C650014 *LW A1,0014 (V1) //A1=1 if weapon pickup present -//7F002950: //BA check; - 0x37480 -8FBF0014 *LW RA,0014 (SP) -24010015 *ADDIU AT,R0,0015 -A0E10003 *SB AT,0003 (A3) make 15 obj type (BA) -3C010001 *LUI AT,0001 -ACE10080 *SW AT,0080 (A3) SET amount (100%) -1000000D *BEQ R0,R0,7F00299C -27FF0160 *ADDIU RA,RA,0160 offset from return to obj15 stuff -//7F00296C - *BEQ A1,R0,7F00299C //skip if no pickup - *SLTI AT,A0,0058 //1 if not flag or invalid - *BEQL AT,R0,7F002844 -24010058 *ADDIU AT,R0,0058 - *BEQ A0,R0,7F00299C //skip if type 0 - *any stupid thing... - *JAL 7F005710 //sets throwable models. returns V0=1 loaded model - *SW A3,002C (SP) //save the object offset - *LW A1,002C (SP) //A1=object offset - *LW A0,0028 (SP) - *JAL 7F001D9C //expand object - *LW A2,0030 (SP) -//7F00299C - *LW RA,0014 (SP) - JR RA - *ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/08 weapons/08 weapon object type.txt b/notes/GE Documentation/Objects and Attributes/Expansion/08 weapons/08 weapon object type.txt deleted file mode 100644 index 68bae0a..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/08 weapons/08 weapon object type.txt +++ /dev/null @@ -1,493 +0,0 @@ -NOTE: I have undoubtedly molested this routine when hacking the no flag scenarios. Read that for sure... - -7F004434: jump that executes specific object expansion -LW T7,0278 (SP) //the infamous 'better equal 1 if you want objects'... -BEQ T7,R0,7F004AFC -NOP -LW T6,000C (S2) //upper 32 bitflags -OR A0,S5,R0 -OR A1,S2,R0 //A1=S2=address of object -AND T8,T6,S4 -BNEZ T8,7F004AFC //skip if killflags present -NOP -JAL 7F002738 //specific parsing code for weapons -OR A2,S3,R0 -//7F004460: -BEQ R0,R0,7F004AFC -NOP - - -7F002738: the main honcho. calls necessary 08 expansion code -ADDIU SP,SP,FFD8 -SW RA,0014 (SP) -SW A0,0028 (SP) -SW A2,0030 (SP) -LW T6,0008 (A1) //T6=high bitfield -OR A3,A1,R0 //A3=A1=object data address -ANDI T7,T6,4000 -BEQL T7,R0,7F002804 //branch if no assigned to a guard -ADDIU A1,R0,0001 //A1=1 -//7F00275C: weapon attached to guard -LH A0,0006 (A1) //A0=preset -JAL 7F022FC8 -SW A1,002C (SP) -LW A3,002C (SP) //A3=object data address -BEQ V0,R0,7F002998 -SW V0,001C (SP) -LW T8,0018 (V0) // -BEQL T8,R0,7F00299C -LW RA,0014 (SP) -LW T9,001C (V0) -ADDIU A0,R0,001C //A0=1C -BEQL T9,R0,7F00299C -LW RA,0014 (SP) -JAL 7F0927BC -SW A3,002C (SP) -//7F002798: -BEQ V0,R0,7F0027E0 -LW A3,002C (SP) -LB T0,0080 (A3) -ADDIU T1,T0,FFFE -SLTIU AT,T1,001E -BEQ AT,R0,7F0027E0 -SLL T1,T1,0x2 -LUI AT,8005 -ADDU AT,AT,T1 -LW T1,EEB8 (AT) //T1=8004EEB8 + offset -JR T1 -NOP - --------------------------------------- -//7F0027C8: -ADDIU T2,R0,0019 -ADDIU T3,R0,00D3 -ADDIU T4,R0,0100 -SB T2,0080 (A3) //set weapon as grenade -SH T3,0004 (A3) //set model as grenade -SH T4,0000 (A3) //set scale=100% -//7F0027E0: -LB A0,0080 (A3) //A0=weapon type -JAL 7F005710 -SW A3,002C (SP) -LW A0,002C (SP) //A0=object data address -JAL 7F052030 -LW A1,001C (SP) -BEQ R0,R0,7F00299C -LW RA,0014 (SP) - --------------------------------------- -//7F002800: 0x37330-E MP expansion handling -ADDIU A1,R0,0001 -SW A1,0018 (SP) -JAL 7F09A464 //RETURNS V0=# players -SW A3,002C (SP) -SLTI AT,V0,0002 //TRUE if solo -LW A1,0018 (SP) -BNEZ AT,7F00296C //skip MP weapon expansion if solo -LW A3,002C (SP) -ADDIU T5,R0,FFFF //T5=-1 -LUI AT,8007 -SW T5,9540 (AT) //-1->80069540 -LBU V0,0080 (A3) //V0=type -SLTI AT,V0,0059 //tests if weapon is valid (<59) -BNEZ AT,7F00285C //retrieve type for MP or use current -ADDIU T6,V0,FF10 //T6=MP weapon # converted to index -//7F00283C: this only applies to MP weapons -SLTIU AT,T6,0008 -BEQ AT,R0,7F00296C //if < 8, doesn't think it is an MP weapon -SLL T6,T6,0x2 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,EF30 (AT) //T6=8004EF30 + offset (all 8 = 7F002870) -JR T6 -NOP - --------------------------------------- -7F00285C: write 08 object fields; deal with flag first - 0x3738C-E -ADDIU AT,R0,0058 -BEQL V0,AT,7F002950 //branch if flag -SW A1,0018 (SP) -BEQ R0,R0,7F002970 //branch if a normal weapon pickup -LB A0,0080 (A3) //A0=weapon type - -7F002870: figure out MP weapon type - 0x373B0-E -0FC31985 JAL 7F0C6614 //returns V0=pointer to weapon set -AFA7002C SW A3,002C (SP) -8FA7002C LW A3,002C (SP) //A3=object address -3C018007 LUI AT,8007 -24090001 ADDIU T1,R0,0001 -90E40080 LBU A0,0080 (A3) //A0=weapon type -2484FF10 ADDIU A0,A0,FF10 //A0=0-8 -00047880 SLL T7,A0,0x2 -01E47823 SUBU T7,T7,A0 -000F78C0 SLL T7,T7,0x3 //T7=offset type*0x18 -AC249540 SW A0,9540 (AT) //weapon set #->80069540 current weapon in set, read by 14 ammo box routine to set ammo type -004F1821 ADDU V1,V0,T7 //V1=pointer to specific weapon data in set -8C780000 LW T8,0000 (V1) //T8=weapon type -3C014380 LUI AT,4380 -44813000 MTC1 AT,F6 ;F6=256.0 -A0F80080 SB T8,0080 (A3) //change object's weapon type to literal -8C790004 LW T9,0004 (V1) //T9=model type -3C014F00 LUI AT,4F00 -A4F90004 SH T9,0004 (A3) //change model type -C4640008 LWC1 F4,0008 (V1) //F4=scale -46062202 MUL.S F8,F4,F6 //F8=scale * 256. -4448F800 CFC1 T0,F31 ;keep its current state here -44C9F800 CTC1 T1,F31 ;sets rounding mode -00000000 NOP -460042A4 CVT.WS F10,F8 -4449F800 CFC1 T1,F31 -00000000 NOP -31290078 ANDI T1,T1,0078 -51200013 BEQL T1,R0,7F002930 -44095000 MFC1 T1,F10 //T1=scale modified -> header scale value -//7F0028E8: -44815000 MTC1 AT,F10 -24090001 ADDIU T1,R0,0001 -460A4281 SUB.S F10,F8,F10 -44C9F800 CTC1 T1,F31 -00000000 NOP -460052A4 CVT.WS F10,F10 -4449F800 CFC1 T1,F31 -00000000 NOP -31290078 ANDI T1,T1,0078 -15200005 BNEZ T1,7F002924 -00000000 NOP -44095000 MFC1 T1,F10 -3C018000 LUI AT,8000 -10000007 BEQ R0,R0,7F00293C -01214825 OR T1,T1,AT -//7F002924: -10000005 BEQ R0,R0,7F00293C -2409FFFF ADDIU T1,R0,FFFF ;default scale... -44095000 MFC1 T1,F10 -//7F002930: -00000000 NOP -0520FFFB BLTZ T1,7F002924 -00000000 NOP -44C8F800 CTC1 T0,F31 -A4E90000 SH T1,0000 (A3) //scale->header -10000009 BEQ R0,R0,7F00296C -8C650014 LW A1,0014 (V1) //A1=1 if weapon pickup present ----------- -//7F00294C: //Flag tag check; remember to set SP and RA back to normal - 0x3747C-E -SW A1,0018 (SP) -JAL 7F014758 //returns V0=8002B540=scenario -SW A3,002C (SP) -ADDIU AT,R0,0002 -LW A1,0018 (SP) -BEQ V0,AT,7F00296C //available if flag tag... -LW A3,002C (SP) //A3=object data -OR A1,R0,R0 //A1=0 (no pickup!) ----------- -//7F00296C: generic weapon expansion - SOLO and MP - 0x3749C-E -LB A0,0080 (A3) //weapon type - -BEQL A0,R0,7F00299C //skip if type 0 -LW RA,0014 (SP) -BEQL A1,R0,7F00299C //skip if no pickup -LW RA,0014 (SP) -JAL 7F005710 //sets throwable models. returns V0=1 loaded model -SW A3,002C (SP) //save the object offset -LW A1,002C (SP) //A1=object offset -LW A0,0028 (SP) -JAL 7F001D9C //expand object -LW A2,0030 (SP) -LW RA,0014 (SP) -//7F00299C -ADDIU SP,SP,0028 -JR RA -NOP - --------------------------------------- - - --------------------------------------- --7F005710: -ADDIU T6,A0,FFFD //T6=weapon type-3 -ADDIU SP,SP,FFE8 -SLTIU AT,T6,002E //TRUE if a selectable weapon (Tank and below) -SW RA,0014 (SP) -BEQ AT,R0,7F00589C -ADDIU A1,R0,FFFF //A1=-1 -SLL T6,T6,0x2 //weapon type -> offset -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,F0F0 (AT) //T6=8004F0F0 + offset -JR T6 -NOP -... -sets model values for specific objects -... -//7F00579C: -BLTZ A1,7F0057B4 //if model not set, return -OR V0,R0,R0 -JAL 7F056C38 //if model loaded, return V0=1? -OR A0,A1,R0 //A0=A1=model -BEQ R0,R0,7F0057B8 -LW RA,0014 (SP) -//7F0057B4: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --------------------------------------- -7F001D9C: expand object. All objects call this routine - --------------------------------------- -7F056C38: returns V0=1 if model sucessfully loaded - ACCEPTS A0=model -SLL T6,A0,0x2 -SUBU T6,T6,A0 -LUI T7,8004 -ADDIU T7,T7,A228 //T7=8003A228 -SLL T6,T6,0x2 //T6=model# * 0xC -ADDU V0,T6,T7 -LW A2,0000 (V0) //A2=model load line from object ist -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LW T8,0000 (A2) //T8=address of model data; NULL if not loaded -OR A0,A2,R0 //A0=A2=model load line -BNEL T8,R0,7F056C90 //don't bother if the model is loaded -OR V0,R0,R0 -LW A1,0004 (V0) //A1=addy of model archetype -JAL 7F07654C //loads model and images -SW V0,001C (SP) -LW V0,001C (SP) -JAL 7F075CF4 //process entry#s for all model Table types -LW A0,0000 (V0) -BEQ R0,R0,7F056C90 -ADDIU V0,R0,0001 //return sucessful -//7F056C90: -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - - -7F075B1C: set Table list entry numbers for types; returns V0=last entry# -ADDIU SP,SP,FFE0 -SW S1,0018 (SP) -SW S0,0014 (SP) -SW RA,001C (SP) -OR A2,A0,R0 //A2=A0=Table entry -OR S1,R0,R0 //S1=0 -BEQ A0,R0,7F075CDC //kill if NULL pointer -OR S0,A0,R0 //S0=A0=Table entry -LHU V0,0000 (S0) //V0=type -//7F075B40: -ANDI T6,V0,00FF //T6=type (no flags) -ADDIU T7,T6,FFFF //T7=type-1 -SLTIU AT,T7,0018 //TRUE if valid (1-18) -BEQ AT,R0,7F075C84 -SLL T7,T7,0x2 //T7=type->offset -LUI AT,8005 -ADDU AT,AT,T7 -LW T7,4E74 (AT) //T7=80054E74+offset -JR T7 -NOP -... -7F075B68: 01 entries container for complex multipart models -LW V0,0004 (S0) //V0=entry's data -SH S1,000C (V0) //save counter to 01 data+0xC -ADDIU S1,S1,0018 //S1+=18 offset to next -ANDI T8,S1,FFFF -OR S1,T8,R0 //S1 remains a halfword -BEQ R0,R0,7F075C88 -LW V1,0014 (S0) //V1=child entry -... -7F075B84: 07 entries UNKNOWN TYPE! -LW V0,0004 (S0) //V0=entry's data -SH S1,01AA (V0) //save counter to 07 data + 0x1AA -ADDIU S1,S1,0001 //S1++ -ANDI T9,S1,FFFF -OR S1,T9,R0 //S1 remains a halfword -BEQ R0,R0,7F075C88 -LW V1,0014 (S0) //V1=child entry -... -7F075BA0: 08 entries distance trigger -LW V0,0004 (S0) -SH S1,000C (V0) //save counter to 08 data + 0xC -LW V1,0008 (V0) //V1=offset to activated display list entry -ADDIU S1,S1,0001 //S1++ -ANDI T0,S1,FFFF -OR S1,T0,R0 //S1 remains a halfword -BEQ R0,R0,7F075C88 -SW V1,0014 (S0) //activated->child entry -... -7F075BC0: 12 entries tag entry -LW V0,0004 (S0) -SH S1,0004 (V0) //save counter to 12 data + 0x4 -LW V1,0000 (V0) //V1=offset to display list entry -ADDIU S1,S1,0001 //S1++ -ANDI T2,S1,FFFF -OR S1,T2,R0 //S1 remains halfword -BEQ R0,R0,7F075C88 -SW V1,0014 (S0) //DL->child entry -... -7F075BE0: 17 entries head model placeholder -LW V0,0004 (S0) -OR V1,R0,R0 //V1=0 -SH S1,0000 (V0) //save counter to 17 data + 0x0 -ADDIU S1,S1,0002 //S1+=2 -ANDI T4,S1,FFFF -OR S1,T4,R0 //S1 remains halfword -BEQ R0,R0,7F075C88 -SW R0,0014 (S0) //eliminate any child entries -... -7F075C00: 09 entries hat placement -LW V0,0004 (S0) //V0=entry's data -OR A0,S0,R0 //A0=S0=Table entry pointer -OR A1,R0,R0 //A1=0 -SH S1,0022 (V0) //save counter to 09 data + 0x22 -ADDIU S1,S1,0001 //S1++ -ANDI T5,S1,FFFF -OR S1,T5,R0 //S1 remains halfword -JAL 7F06EA54 -SW A2,0020 (SP) -LW A2,0020 (SP) -BEQ R0,R0,7F075C88 -LW V1,0014 (S0) //v1=child entry -... -7F075C30: 0B entries UNKNOWN TYPE! -LW V0,0004 (S0) -SH S1,0044 (V0) //save counter to 0B data + 0x44 -ADDIU S1,S1,0001 //S1++ -ANDI T6,S1,FFFF -OR S1,T6,R0 //S1 remains halfword -BEQ R0,R0,7F075C88 -LW V1,0014 (S0) //V1=child entry -... -7F075C4C: 0C entries firing effect for weapons -LW V0,0004 (S0) -SH S1,0020 (V0) //save counter to 0C data + 0x20 -ADDIU S1,S1,0001 //S1++ -ANDI T7,S1,FFFF -OR S1,T7,R0 //S1 remains hafword -BEQ R0,R0,7F075C88 -LW V1,0014 (S0) //V1=child entry -... -7F075C68: 18 entries display list (2 DLs, collisions, merging) -LW V0,0004 (S0) -SH S1,001A (V0) //save counter to 18 data + 0x1A -ADDIU S1,S1,0002 //S1+=2 -ANDI T8,S1,FFFF -OR S1,T8,R0 //S1 remains halfword -BEQ R0,R0,7F075C88 -LW V1,0014 (S0) //V1=child entry -... -7F075C84: loopus -LW V1,0014 (S0) //V1=child entry -BEQ V1,R0,7F075C98 -NOP -BEQ R0,R0,7F075CD4 -OR S0,V1,R0 //S0=V1=child entry -//7F075C98: if child NULL... -BEQ S0,R0,7F075CD4 -NOP -LW V1,0008 (A2) //V1=parent entry -//7F075CA4: -BNEL S0,V1,7F075CB8 //test if self-referencing... -LW V0,000C (S0) //V0=next entry (I think) -BEQ R0,R0,7F075CD4 -OR S0,R0,R0 //S0=NULL -//7F075CB8: -BEQL V0,R0,7F075CCC //test if next entry NULL -LW S0,0008 (S0) //S0=parent entry -BEQ R0,R0,7F075CD4 -OR S0,V0,R0 //S0=V0=next entry -//7F075CCC: -BNEZ S0,7F075CA4 //either parent NULL or use parent's next -NOP -//7F075CD4: -BNEL S0,R0,7F075B40 //if there's another entry to process, branch -LHU V0,0000 (S0) //V0=type -LW RA,001C (SP) -OR V0,S1,R0 //V0=S1=counter -LW S1,0018 (SP) -LW S0,0014 (SP) -JR RA -ADDIU SP,SP,0020 - -7F075CF4: reroute to 7F075B1C -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -ADDIU T6,R0,0001 //T6=1 -OR A1,A0,R0 //A1=A0=model load line -SW T6,001C (A0) //1->model loaded indicator -LW A0,0000 (A0) //A0=offset to Table -JAL 7F075B1C //sets entry numbers for certain model Table types - //returns V0=last entry # -SW A1,0018 (SP) -LW A1,0018 (SP) //A1=model load line -SH V0,0014 (A1) //save last entry # to 0x14 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -7F0764A4: loads model with A0=load line, A1=string name -ADDIU SP,SP,FFE0 -SW S0,0018 (SP) -OR S0,A0,R0 //S0=A0=model load line address -SW RA,001C (SP) -SW A1,0024 (SP) //A1=P->string name -BEQ A2,R0,7F0764D4 -SW A2,0028 (SP) //[specificly set to 0 by referer] -//7F0764C0: -OR A0,A1,R0 -JAL 7F0BCD40 -OR A1,R0,R0 -BEQ R0,R0,7F0764EC -OR A2,V0,R0 -//7F0764D4: -LW A0,0024 (SP) //A0=string name -OR A1,R0,R0 //A1=0 -ADDIU A2,R0,0100 //A2=0100 -JAL 7F0BCD04 //I think this loads model data! returns V0=addy -ADDIU A3,R0,0004 //A3=4 -OR A2,V0,R0 //A2=V0=pointer to model data -//7F0764EC: -LH T9,0016 (S0) //T9=# images -LH T7,000C (S0) //T7=# offsets -SW A2,0008 (S0) //save model data offset to 0x8 in load line -SLL T0,T9,0x2 -SUBU T0,T0,T9 -SLL T8,T7,0x2 //T8=size of offset block -ADDU V0,A2,T8 //V0=offset to images (data + offsets) -SLL T0,T0,0x2 //T0=size of image block -ADDU T1,V0,T0 //T1=offset to Table (data + offsets + images) -SW V0,0018 (S0) //image block offset->load line + 0x18 -SW T1,0000 (S0) //Table offset -> load line 0x0 -OR A0,S0,R0 //A0=S0=load line pointer -JAL 7F075A90 //I think this expands all the object offsets -LUI A1,0500 -OR A0,S0,R0 //A0=S0=load line offset -LW A1,0024 (SP) //A1=string name pointer -LW A2,0028 (SP) //A2=[set to 0 by referer] -JAL 7F0762E0 //loads and expands images, DLs -LW A3,0030 (SP) //A3=[also set to 0 by referer] -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - - -7F07654C: reroute to 7F0764A4; load model -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW R0,0010 (SP) -OR A2,R0,R0 //A2=0 -JAL 7F0764A4 -OR A3,R0,R0 //A3=0 -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/0D autoturrets/7F004500 - object 0D expansion - autoturrets.txt b/notes/GE Documentation/Objects and Attributes/Expansion/0D autoturrets/7F004500 - object 0D expansion - autoturrets.txt deleted file mode 100644 index f20ec48..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/0D autoturrets/7F004500 - object 0D expansion - autoturrets.txt +++ /dev/null @@ -1,168 +0,0 @@ -runtime autogun offsets: -0x80 preset used to center turret -0x84 (float) lateral turret rotation, based on targetted preset -0x88 (float) converted positive range -0x8C (float) converted negative range -0x90 (float) ??? - initialized to 0.0; prob. cur.rotation -0x94 (float) ??? - initialized to 0.0 -0x98 (float) turret elevation, based on targetted preset -0x9C (float) ??? - initialized to 0.0; prob. cur.elevation -0xA0 (float) ??? - initialized to 0.0 -0xA4 (float) converted rotation rate -0xA8 (float) converted activation distance -0xAC ??? - initialized to 0; probably #shots fired -0xB0 (float) timer for rotating turret - initialized to 0.0 -0xB4 (float) ??? - initialized to 0.0 -0xB8 ??? - initialized to -1 -0xBC ??? - initialized to -1 -0xC0 ??? - initialized to -1 -0xC4 p->allocated data (0xC0 bytes) while active only; NULL otherwise -0xC8 p->allocated data (0x10 bytes) while active only; NULL otherwise -0xCC p->allocated memory segment (0x30 bytes) -0xD0 TRUE if active -0xD4 (float) ??? - initialized to 0.0 - -allocated data block: -0x0 1 state; when set acts as a timer - -0x1C 4 (float) ??? -0x20 4 (float) ??? - -0x28 4 (float) ??? - -//7F004500 39030 object 0D expansion - autoturrets -BEQ S8,R0,7F004AFC ;skip if not activated -NOP -LW T6,000C (S2) -OR A0,S5,R0 -OR A1,S2,R0 -AND T8,T6,S4 -BNEZ T8,7F004AFC ;skip if inhibitted -NOP -JAL 7F002C58 ;expand object -OR A2,S3,R0 -BEQ R0,R0,7F004AFC -NOP - -7F002C58 37788 expand 0D object - autoturrets - accepts: A0=, A1=p->object data, A2= -ADDIU SP,SP,FFC8 -SW RA,001C (SP) -SW S0,0018 (SP) -JAL 7F001D9C ;prepares and loads object -OR S0,A1,R0 ;S0=A1: p->obj.data -//7F002C6C: -LW T6,00A4 (S0) ;T6=obj.data+A4: turnrate -LW T7,00A8 (S0) ;T7=obj.data+A8: activation distance -LUI AT,4780 -MTC1 T6,F4 -MTC1 AT,F2 ;F2=65536.0 [47800000] -LUI AT,8005 -CVT.S.W F6,F4 ;F6=(float) turnrate -LWC1 F12,EF54 (AT) ;F12=8004EF54: ??? -MTC1 T7,F16 -LUI AT,42C8 -MTC1 AT,F4 ;F4=100.0 [42C80000] -CVT.S.W F18,F16 ;F18=(float) act.dist -MUL.S F8,F6,F12 ;F8= turnrate * value -LW T8,0088 (S0) ;T8=obj.data+88: up/left range -LW T9,008C (S0) ;T9=obj.data+8C: down/right range -MTC1 R0,F0 -ADDIU V1,R0,FFFF -MUL.S F6,F18,F4 ;F6=act.dist * 100.0 -SW R0,00AC (S0) ; 0-> obj.data+AC -SW V1,00B8 (S0) ;-1-> obj.data+B8 -SW V1,00BC (S0) ;-1-> obj.data+BC -SW V1,00C0 (S0) ;-1-> obj.data+C0 -SW R0,00C4 (S0) ; 0-> obj.data+C4 -DIV.S F10,F8,F2 ;F10=(turnrate * value) / 65536.0 -SW R0,00C8 (S0) ; 0-> obj.data+C8 -ADDIU A0,R0,0030 ;A0=30: # bytes to allocate -ADDIU A1,R0,0004 ;A1=4: bank 4 -SWC1 F0,0090 (S0) ; 0-> obj.data+90 -SWC1 F0,0094 (S0) ; 0-> obj.data+94 -SWC1 F0,0084 (S0) ; 0-> obj.data+84 -SWC1 F0,009C (S0) ; 0-> obj.data+9C -SWC1 F0,00A0 (S0) ; 0-> obj.data+A0 -SWC1 F0,0098 (S0) ; 0-> obj.data+98 -SWC1 F0,00B0 (S0) ; 0-> obj.data+B0 -SWC1 F0,00B4 (S0) ; 0-> obj.data+B4 -DIV.S F8,F6,F2 ;F8=(act.dist * 100.0) / 65536.0 -SWC1 F10,00A4 (S0) ;obj.data+A4= converted turnrate -MTC1 T8,F10 -MTC1 T9,F6 -CVT.S.W F16,F10 ;F16=(float) up/left range -MUL.S F18,F16,F12 ;F18=pos.range * value -SWC1 F8,00A8 (S0) ;obj.data+A8= converted act.dist -CVT.S.W F8,F6 ;F8=(float) down/right range -DIV.S F4,F18,F2 ;F4=(pos.range * value) / 65536.0 -MUL.S F10,F8,F12 ;F10=neg.range * value -DIV.S F16,F10,F2 ;F16=(neg.range * value) / 65536.0 -SWC1 F4,0088 (S0) ;obj.data+88= converted pos.range -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -SWC1 F16,008C (S0) ;obj.data+8C= converted neg.range -//7F002D30: determine type of preset to center toward -ADDIU V1,R0,FFFF -SW V0,00CC (S0) ;obj.data+CC= p->allocated memory -SB V1,0000 (V0) ;-1->mem(0) -LW A0,0080 (S0) ;A0=obj.data+80: preset# -MTC1 R0,F0 -SW R0,00D0 (S0) ; 0->obj.data+D0 -BLTZ A0,7F002E08 ;if A0 < 0, return -SWC1 F0,00D4 (S0) ; 0->obj.data+D4 -SLTI AT,A0,2710 -BEQ AT,R0,7F002D80 ;branch if 2xxx preset -SLL T2,A0,0x4 -//7F002D5C: 0xxx presets -SLL T0,A0,0x2 -SUBU T0,T0,A0 -SLL T0,T0,0x2 -LUI T1,8007 -LW T1,5D18 (T1) ;T1=80075D18: p->0xxx preset list -SUBU T0,T0,A0 -SLL T0,T0,0x2 -BEQ R0,R0,7F002DA0 -ADDU V1,T0,T1 ;V1=p->preset data -//7F002D80: 378B0 2xxx presets -LUI T3,8007 -LW T3,5D1C (T3) ;T3=80075D1C: p->2xxx preset bank -ADDU T2,T2,A0 -SLL T2,T2,0x2 -LUI AT,FFF5 -ORI AT,AT,9FC0 ;AT=FFF59FC0: correction for 2710 offset -ADDU V1,T2,T3 -ADDU V1,V1,AT ;V1=p->preset data -//7F002DA0: 378D0 center object on preset by default -LW V0,0010 (S0) ;V0=obj.data+10: p->obj.posdata (8006) -LWC1 F6,0004 (V1) ;F6=preset+4: ypos -LWC1 F18,0000 (V1) ;F18=preset+0: xpos -LWC1 F8,000C (V0) ;F8=obj.posdata+C: ypos -LWC1 F4,0008 (V0) ;F4=obj.posdata+8: xpos -SUB.S F10,F6,F8 ;F10=p.ypos - o.ypos -SUB.S F12,F18,F4 ;F12=p.xpos - o.xpos -SWC1 F10,0028 (SP) ;SP+28= dif.ypos -LWC1 F16,0008 (V1) ;F16=preset+8: zpos -LWC1 F18,0010 (V0) ;F18=obj.posdata+10: zpos -SWC1 F12,002C (SP) ;SP+2C= dif.xpos -SUB.S F14,F16,F18 ;F14=p.zpos - o.zpos -JAL 7F05AA30 ;F0=angle between x vector and z vector -SWC1 F14,0024 (SP) ;SP+24= dif.zpos -//7F002DD8: 37908 -LWC1 F2,002C (SP) ;F2=dif.xpos -LWC1 F14,0024 (SP) ;F14=dif.zpos -SWC1 F0,0084 (S0) ;obj.data+84=F0: lateral turret rotation -MUL.S F4,F2,F2 ;F4=(dif.xpos)^2 -NOP -MUL.S F6,F14,F14 ;F6=(dif.zpos)^2 -JAL 7001F7E0 ;F0= sqrt(F12): distance to preset -ADD.S F12,F4,F6 ;F12=(dif.xpos)^2 + (dif.zpos)^2 -LWC1 F12,0028 (SP) ;F12=dif.ypos -JAL 7F05AA30 ;computes angle between vectors F12 and F14 -MOV.S F14,F0 ;F14=F0: distance to preset -SWC1 F0,0098 (S0) ;obj.data+98= vertical elevation of turret -//7F002E08: 37938 return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0038 -JR RA -NOP diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/14 ammo crate/14 ammo box objects.txt b/notes/GE Documentation/Objects and Attributes/Expansion/14 ammo crate/14 ammo box objects.txt deleted file mode 100644 index 1314e52..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/14 ammo crate/14 ammo box objects.txt +++ /dev/null @@ -1,110 +0,0 @@ - -7F004760: primary expansion routine -JAL 7F09A464 //returns V0=#players -ADDIU S0,R0,0001 //ensures solo ammo boxes appear -SLTI AT,V0,0002 -BNEZ AT,7F0047A8 //branch if solo -NOP -//7F004774: MP ammo attributement -JAL 7F0C6614 //returns V0=pointer to weapon set -NOP -LUI T6,8007 -LW T6,9540 (T6) //T6=80069540 last MP weapon# or -1 -SLL T8,T6,0x2 -SUBU T8,T8,T6 -SLL T8,T8,0x3 //T8=weapon# * 0x18 (offset to data) -ADDU V1,V0,T8 -LW A0,000C (V1) //A0=ammo type -LW S0,0010 (V1) //S0=amount of ammo -SLL T0,A0,0x2 //offset within ammo list -ADDU T1,S2,T0 -SH S0,007E (T1) //save ammo total to proper HW slot -//7F0047A8: generic Solo/MP ammo box stuff -BLEZ S0,7F004AFC //if no ammo for ammo box, don't render -NOP -BEQ S8,R0,7F004AFC //generic objects appear flag test -NOP -LW T9,000C (S2) //second 32bit flagfield -OR S1,R0,R0 //S1=0 (ammo counter) -OR S0,S2,R0 //S0=object data offset -AND T2,T9,S4 -BNEZ T2,7F004AFC //test if killflags present -NOP -//7F0047D0: test if any ammo actually assigned -LHU T3,0082 (S0) //T3=ammo total for slot -BLEZL T3,7F0047F4 //if not valid, NEXT! -ADDIU S1,S1,0004 -LHU A0,0080 (S0) //A0=first halfword apparently is a model # -BEQL S6,A0,7F0047F4 //if A0=FFFF, NEXT! (S6=FFFF, somehow) -ADDIU S1,S1,0004 -JAL 7F056C38 //load model A0! -NOP -ADDIU S1,S1,0004 -//7F0047F4: -BNE S1,S7,7F0047D0 //test until S1=34 (S7=34, apparently) -ADDIU S0,S0,0004 -OR A0,S5,R0 -OR A1,S2,R0 -JAL 7F001D9C //expand object -OR A2,S3,R0 -BEQ R0,R0,7F004AFC -NOP - - -reads ammo to determine collectability -//7F050980: ammo box collectability -24010014 ADDIU AT,R0,0014 -1441002C BNE V0,AT,7F050A38 ;if object isn't an ammo box, try BA instead -8FA90088 LW T1,0088 (SP) -//7F05098C: test if the thing is even collectable... -8D2A0004 LW T2,0004 (T1) ;T2=p->obj.data (T1=obj.pos data in 8006) -240B0001 ADDIU T3,R0,0001 -AFAB006C SW T3,006C (SP) ;SP+6C= 1 -00A02025 OR A0,A1,R0 ;A0=A1: p->obj.data -0FC0FFF0 JAL 7F03FFC0 ;ret V0!=0 if object was destroyed -AFAA0070 SW T2,0070 (SP) ;SP+70= p->obj.data -//7F0509A4: -10400003 BEQ V0,R0,7F0509B4 ;branch if not destroyed -8FA30070 LW V1,0070 (SP) ;V1=p->obj.data -100000DC BEQ R0,R0,7F050D20 ;quit if object destroyed -00001025 OR V0,R0,R0 ;V0=0 -//7F0509B4: 854E4 initialize loop if object valid -00001025 OR V0,R0,R0 ;V0=0 current ammo type -1 -//7F0509B8: 854E8 loop for ? -24450001 ADDIU A1,V0,0001 ;A1=V0+1 next type -24010001 ADDIU AT,R0,0001 ;AT=1 -14410002 BNE V0,AT,7F0509CC ;redirect ammo type 2 to 1 -00A02025 OR A0,A1,R0 ;A0=type+1 counter->type conversion -24040001 ADDIU A0,R0,0001 ;A0=1 -//7F0509CC: 854FC -946C0082 LHU T4,0082 (V1) ;T4=ammo for type -59800011 BLEZL T4,7F050A18 ;if no ammo (or stupid ammo), loopus -2401000D ADDIU AT,R0,000D ;AT=D: total number of ammo types in a box -AFA30030 SW V1,0030 (SP) ;save p->obj+offset to current ammo -AFA40064 SW A0,0064 (SP) ;SP+64= type of ammo -0FC1A490 JAL 7F069240 ;ret V0=player's total ammo of type A0 -AFA50034 SW A1,0034 (SP) ;SP+34= curtype -8FA40064 LW A0,0064 (SP) ;A0=type of ammo -0FC1A4B5 JAL 7F0692D4 ;ret V0=max ammo for type A0 -AFA20038 SW V0,0038 (SP) ;SP+38= stock -8FA60038 LW A2,0038 (SP) ;A2=stock -8FA30030 LW V1,0030 (SP) ;V1= p->obj.cur.type -8FA50034 LW A1,0034 (SP) ;A1= curtype -00C2082A SLT AT,A2,V0 ;AT=TRUE if stocknext ammo type in obj. -//7F050A24: -8FAD006C LW T5,006C (SP) ;T5=0 if collectable, 1 if not -11A00031 BEQ T5,R0,7F050AF0 ;branch if collectable -00000000 NOP -100000BB BEQ R0,R0,7F050D20 ;quit otherwise -00001025 OR V0,R0,R0 ;V0=0 - - diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/14 ammo crate/ammo box.txt b/notes/GE Documentation/Objects and Attributes/Expansion/14 ammo crate/ammo box.txt deleted file mode 100644 index f4839f7..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/14 ammo crate/ammo box.txt +++ /dev/null @@ -1,185 +0,0 @@ -7F004760: ammo box routine -JAL 7F09A464 -ADDIU S0,R0,0001 //S0=1 - -7F09A464: # players -LUI T6,8008 -LW T6,9EE0 (T6) //T6=80079EE0=800A7360 -OR V1,R0,R0 //V1=0 -LUI T7,8008 -BEQ T6,R0,7F09A480 //if pointer NULL, branch -LUI T8,8008 -//ELSE: -ADDIU V1,R0,0001 //V1=1 -LW T7,9EE4 (T7) //T7=80079EE4=800A9DE0 -LUI T9,8008 -BEQ T7,R0,7F09A494 //if pointer NULL, branch -NOP -//ELSE: -ADDIU V1,V1,0001 //V1++ = 2 -LW T8,9EE8 (T8) //T8=80079EE8=0 -BEQ T8,R0,7F09A4A4 //if NULL, branch -NOP - ADDIU V1,V1,0001 -LW T9,9EEC (T9) //T9=80079EEC=0 -BEQ T9,R0,7F09A4B4 -NOP - ADDIU V1,V1,0001 -JR RA -OR V0,V1,R0 //V0=V1=2 - -7F004768: -SLTI AT,V0,0002 //if V0<2, AT=1 -BNEZ AT,7F0047A8 //if more than 2 pointers, branch -NOP -JAL 7F0C6614 -NOP - -7F0C6614: increment for weapon set number -LUI T6,8005 -LW T6,9160 (T6) //T6=80049160=B -LUI V0,8005 -SLL T7,T6,3 //T7=T6*8=58 -ADDU V0,V0,T7 //V0=80050058 -JR RA -LW V0,90F4 (V0) //V0=800490F4=80048EB0 - -7F00477C: increment for weapon in set -LUI T6,8007 -LW T6,9540 (T6) //T6=80069540=0 -SLL T8,T6,2 //T8=T6*4=0 -SUBU T8,T8,T6 //T8=0 -SLL T8,T8,3 //T8=T8*8=0 -ADDU V1,V0,T8 //V1=pointer to weapon=80048EB0 -LW A0,000C (V1) //A0=ammo type -LW S0,0010 (V1) //S0=ammo amount -SLL T0,A0,2 //T0=A0*4=4 -ADDU T1,S2,T0 //T1=obj address + offset to ammo type (4) -SH S0,007E (T1) //store ammo amount into correct ammo slot -BLEZ S0,7F004AFC //if there was no ammo, abort ammo box! -NOP -BEQ S8,R0,7F004AFC //if S8 = 0, abort as well (S8=1) -NOP -LW T9,000C (S2) //load bitflags (00000000) -OR S1,R0,R0 //S1=0 -OR S0,S2,R0 //S0=S2=object pointer -AND T2,T9,S4 //if flags 00400008 are set, toggle T2 -BNEZ T2,7F004AFC //If something set, abort! -NOP -//okay, still going... -LHU T3,0082 (S0) //T3=type 1 ammo -BLEZL T3,7F0047F4 //if type1 ammo <= 0, branch... - ADDIU S1,S1,0004 -LHU A0,0080 (S0) //loads the FFFF prior to ammo 1... -BEQL S6,A0,7F0047F4 //should always be true, since S6=FFFF=A0 -ADDIU S1,S1,0004 //S1+=4=4 -//if ever it isn't, jal -JAL 7F056C38 -NOP -ADDIU S1,S1,0004 - -7F0047F4: -BNE S1,S7,7F0047D0 //loop this routine until all ammo tested -ADDIU S0,S0,0004 -//ELSE: - - - ------------------------------------------------ -lets say you follow JAL... -7F056C38 load model A0. Returns V0=1 if successful - accepts: A0=model# -SLL T6,A0,0x2 -SUBU T6,T6,A0 -LUI T7,8004 -ADDIU T7,T7,A228 //T7=8003A228 Object List! (motorcyclelauncher.txt) -SLL T6,T6,0x2 //T6=A0*C -ADDU V0,T6,T7 //V0=object in object list -LW A2,0000 (V0) //A2=first pointer in list (8003 addy - OBJ header data) -ADDIU SP,SP,FFE0 //SP=803B3450 -SW RA,0014 (SP) //803B3464=RA(7F0047F0) -LW T8,0000 (A2) //T8=p->object table -OR A0,A2,R0 //A0=A2: p->object header -BNEL T8,R0,7F056C90 //fail if valid pointer (already loaded) - OR V0,R0,R0 -LW A1,0004 (V0) //A1=p->text call line -JAL 7F07654C //load object A1 using header A0 -SW V0,001C (SP) //SP+1C=Object in object list -LW V0,001C (SP) //V0=Object in object list -JAL 7F075CF4 -LW A0,0000 (V0) ;A0=p->object header -BEQ R0,R0,7F056C90 ;return success -ADDIU V0,R0,0001 -//7F056C8C: failure -OR V0,R0,R0 -//7F056C90: quit -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -7F07654C: -ADDIU SP,SP,FFE0 //803B3430 -SW RA,001C (SP) //803B344C=7F056C78 -SW R0,0010 (SP) //803B3440=0 -OR A2,R0,R0 //A2=0 -JAL 7F0764A4 -OR A3,R0,R0 //A3=0 - -7F0764A4: -ADDIU SP,SP,FFE0 //803B3410 -SW S0,0018 (SP) //803B3428=801A3208 (obj in setup) -OR S0,A0,R0 //S0=A0=first pointer in list -SW RA,001C (SP) //803B342C=7F076564 -SW A1,0024 (SP) //803B3434=second pointer in list -BEQ A2,R0,7F0764D4 -SW A2,0028 (SP) //803B3438=content of first pointer - -LW A0,0024 (SP) //A0=second word -OR A1,R0,R0 //A1=0 -ADDIU A2,R0,0100 //A2=0100 -JAL 7F0BCD04 -ADDIU A3,R0,0004 //A3=4 - -7F0BCD04: -ADDIU SP,SP,FFE8 //SP=803B33F8 -SW RA,0014 (SP) //803B340C=7F0764E8 -SW A1,001C (SP) //803B3414=0 -SW A2,0020 (SP) //803B3418=100 -JAL 7F0BD254 -SW A3,0024 (SP) //803B341C=4 - -7F0BD254: -ADDIU SP,SP,FFC0 //803B33B8 -SW S2,001C (SP) //803B33D4=obj in setup -LUI S2,8005 -ADDIU S2,S2,82D4 //S2=800482D4 (NOT SURE) -LW V0,0000 (S2) //V0=2D7 -SW S3,0020 (SP) -SW S1,0018 (SP) -SLTI AT,V0,0002 -OR S3,A0,R0 -SW RA,0024 (SP) -SW S0,0014 (SP) -BNEZ AT,7F0BD2CC -ADDIU S1,R0,0001 - -ETC... BORED NOW -/******************************************* - - -*******************************************/ -READ AMMO ROUTINE: -7F0509CC -LHU T4,0082 (V1) -BLEZL T4,7F050A18 - ADDIU AT,R0,000D -SW V1,0030 (SP) -SW A0,0064 (SP) -JAL 7F069240 -SW A1,0034 (SP) - -7F050A18: -OR V0,A1,R0 -BNE A1,AT,7F0509B8 -ADDIU V1,V1,0004 diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/15 Body Armor/15 body armor expansion routine.txt b/notes/GE Documentation/Objects and Attributes/Expansion/15 Body Armor/15 body armor expansion routine.txt deleted file mode 100644 index e5fc5da..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/15 Body Armor/15 body armor expansion routine.txt +++ /dev/null @@ -1,25 +0,0 @@ -7F0045C0: type 15: Body Armor expansion routine -0x390F0 USA -0x JAP -0x PAL -13C0014E BEQ S8,R0,7F004AFC //S8 better equal 1 (valid) -00000000 NOP -8E4C000C LW T4,000C (S2) //T4=lower 32 bitflags -01947824 AND T7,T4,S4 //true if any insidious bitflags toggled -15E0014A BNEZ T7,7F004AFC //if any killtags assigned, abort! -00000000 NOP -8E4E0080 LW T6,0080 (S2) //T6=BA value -3C014780 LUI AT,4780 -44813000 MTC1 AT,F6 //F6=65536. -448E9000 MTC1 T6,F18 -02A02025 OR A0,S5,R0 //A0=S5=obj# -02402825 OR A1,S2,R0 //A1=S2=cur obj pointer -46809120 CVT.SW F4,F18 //F4=BA value (as float) -02603025 OR A2,S3,R0 //A2=S3=validity flag -46062203 DIV.S F8,F4,F6 //F8=armor as percentage -E6480080 SWC1 F8,0080 (S2) //save float version of armor -C64A0080 LWC1 F10,0080 (S2) //F10=armor value -0FC00767 JAL 7F001D9C //expands data into a valid object -E64A0084 SWC1 F10,0084 (S2) //armor value copied to obj offset 0x84 -1000013B BEQ R0,R0,7F004AFC -00000000 NOP diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/2D Tank/2D tank object expansion.txt b/notes/GE Documentation/Objects and Attributes/Expansion/2D Tank/2D tank object expansion.txt deleted file mode 100644 index 6b2553d..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/2D Tank/2D tank object expansion.txt +++ /dev/null @@ -1,40 +0,0 @@ -0x39344 7F004814 expand 2D object type - S2=p->object -BEQ S8,R0,0x3962C -NOP -LW T5,000C (S2) ;upper 32 bitflags -ADDIU A0,R0,0020 ;A0=20 tank -AND T4,T5,S4 ;& with killflags from generic caller -BNEZ T4,0x3962C ;skip object if killflags present! -NOP -JAL 7F005710 ;generates weapon type for tank? stupidly, this does nothing really. -SWC1 F20,00E8 (SP) -OR A0,S5,R0 -OR A1,S2,R0 ;A1=S2: p->object -JAL 7F001D9C -OR A2,S3,R0 -SWC1 F20,00C8 (S2) -SWC1 F20,00CC (S2) -LWC1 F12,0038 (S2) -JAL 7F05AA30 -LWC1 F14,0040 (S2) -LUI AT,8005 -LWC1 F6,F024 (AT) -LW V0,0010 (S2) -SUB.S F16,F6,F0 -BEQ V0,R0,+6 -SWC1 F16,00DC (S2) -LW A0,0014 (V0) -LW A1,0008 (V0) -JAL 7F0B2970 -LW A2,0010 (V0) -SWC1 F0,00E8 (SP) -// -LWC1 F2,00E8 (SP) -LUI AT,8005 -SWC1 F2,00D4 (S2) -LWC1 F4,F028 (AT) -DIV.S F8,F2,F4 -BEQ R0,R0,0x3962C -SWC1 F8,00D0 (S2) - diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/STDOBJs/03 expansion, shared by others.txt b/notes/GE Documentation/Objects and Attributes/Expansion/STDOBJs/03 expansion, shared by others.txt deleted file mode 100644 index 049a9f3..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/STDOBJs/03 expansion, shared by others.txt +++ /dev/null @@ -1,13 +0,0 @@ -7F004730: 39260 03, 05, 07, 24, 29, 2A, 2B object expansions -BEQ S8,R0,7F004AFC -NOP -LW T4,000C (S2) //lower 32 bitflags -OR A0,S5,R0 -OR A1,S2,R0 -AND T7,T4,S4 -BNEZ T7,7F004AFC -NOP -JAL 7F001D9C -OR A2,S3,R0 -BEQ R0,R0,7F004AFC -NOP \ No newline at end of file diff --git a/notes/GE Documentation/Objects and Attributes/Expansion/other object header tables.txt b/notes/GE Documentation/Objects and Attributes/Expansion/other object header tables.txt deleted file mode 100644 index ff87a2e..0000000 --- a/notes/GE Documentation/Objects and Attributes/Expansion/other object header tables.txt +++ /dev/null @@ -1,42 +0,0 @@ - The last page of the 21990 has the feature so you can edit the header data for the normal object list. There are two more lists that can be added on this page, one for the G_Z models and the other for heads/bodies. - - Listed below is a breakdown of the lists that call the headers. Header data is the same for all types of objects (including PD minus last word). To properly match them up, grab the string name and then grab the header address. Pull the header from the converted offset. - -Head/Body List: -0x1D080 - (normally) 0x1D6D4 [note: I made a patch that may break this...] -each entry is 0x14 in size -0x0 4 pointer to header - subtract 0x20D90 to create offset in 21990 binary -0x4 4 pointer to string - subtract 0x20D90 to create offset in 21990 binary -0x8 4 [float] width -0xC 4 [float] height -0x10 1 gender; 0:female, 1:male -0x11 1 !0 if object contains a head or is a head -[note: all these headers usually lie in 1C680-1D080 unless hacked] - - -G_Z 1st Person Model List: -0x12B94 - 0x13F0C -each entry is 0x38 in size -0x0 4 pointer to header - subtract 0x20D90 to create offset in 21990 binary -0x4 4 pointer to string - subtract 0x20D90 to create offset in 21990 binary -0x8 4 no fire = 1? -0xC 4 pointer to weapon statistics: fire rate, ammo type, position, etc. -0x10 2 watch inventory text (selected) -0x12 2 watch inventory text (selected) -0x14 4 [float] x value, unknown use. -0x18 4 [float] y value, unknown use. -0x1C 4 [float] z value, unknown use. -0x20 4 [float] unknown use. -0x24 4 [float] unknown use. -0x28 2 inventory text -0x2A 2 inventory text -0x2C 4 [float] unknown use. -0x30 4 [float] unknown use. -0x34 4 [float] unknown use. -[note: all these headers usually lie in 1BA30-1C5B0 unless hacked] - - In both cases, suck up the string to use as the label for the box. Then, suck up the header data from the offset given. It is important to do it this way, since some entries are not found in the main index and when renaming occurs it can screw up the name and data association. - --Zoinkity - - diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/7F04F40C - text on collection.txt b/notes/GE Documentation/Objects and Attributes/ammunition/7F04F40C - text on collection.txt deleted file mode 100644 index 418ede0..0000000 --- a/notes/GE Documentation/Objects and Attributes/ammunition/7F04F40C - text on collection.txt +++ /dev/null @@ -1,255 +0,0 @@ -7F04F40C: 83F3C append ammo name to string - accepts: A0=p->final, A1=type, A2=quantity -ADDIU SP,SP,FFE0 -SW S0,0018 (SP) -ADDIU V0,R0,0001 -OR S0,A0,R0 ;S0=A0: p->final -SW RA,001C (SP) -BEQ A1,V0,7F04F43C ;branch if type=1 -SW A2,0028 (SP) ;SP+28=A2: quantity -ADDIU AT,R0,0002 -BEQ A1,AT,7F04F43C ;branch if type=2 -ADDIU AT,R0,0003 -BNEL A1,AT,7F04F45C ;branch if type!=3 -ADDIU AT,R0,000A -//7F04F43C: standard ammo - types 1-3 -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A405 ;A0=A405: "ammo" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F778 -LW RA,001C (SP) -//7F04F458: throwing knives -ADDIU AT,R0,000A -BNEL A1,AT,7F04F4C4 ;branch if not type A -ADDIU AT,R0,0013 -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A40F ;A0=A40F: "throwing " -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -LW T6,0028 (SP) ;T6=quantity -ADDIU AT,R0,0001 -BNE T6,AT,7F04F4A4 ;branch if multiple -NOP -//7F04F488: single knife -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A410 ;A0=A410: "knife" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F778 -LW RA,001C (SP) -//7F04F4A4: multiple knives -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A411 ;A0=A411: "knives" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F778 -LW RA,001C (SP) -//7F04F4C0: dynamite -ADDIU AT,R0,0013 -BNE A1,AT,7F04F524 ;branch if not type 13 -ADDIU T8,A1,FFFC ;T8=A1-4: type-4 -LW T7,0028 (SP) ;T7=quantity -BNE T7,V0,7F04F4F4 ;branch if multiples -NOP -//7F04F4D8: single -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A419 ;A0=A419: "stick " -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F508 -NOP -//7F04F4F4: multiple -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A41A ;A0=A41A: "sticks " -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -//7F04F508: -of dynamite -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A418 ;A0=A418: "of dynamite" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F778 -LW RA,001C (SP) -//7F04F524: all non-special case ammo types -SLTIU AT,T8,001A -BEQ AT,R0,7F04F750 ;branch if not type 4-1D -SLL T8,T8,0x2 ;T8=type->offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,2F84 (AT) ;T8=80052F84+offset: TLB jump to handle each type -JR T8 -NOP -//7F04F544 display "shotgun cartridge" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A406 ;A0=A406: "shotgun cartridge" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F560 display "magnum bullet" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A407 ;A0=A407: "magnum bullet" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F57C display "golden bullet" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A408 ;A0=A408: "golden bullet" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F598 display "hand grenade" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A409 ;A0=A409: "hand grenade" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F5B4 display "grenade round" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A40A ;A0=A40A: "grenade round" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F5D0 display "rocket" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A40B ;A0=A40B: "rocket" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F5EC display "remote mine" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A40C ;A0=A40C: "remote mine" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F608 display "proximity mine" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A40D ;A0=A40D: "proximity mine" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F624 display "timed mine" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A40E ;A0=A40E: "timed mine" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F640 display "dart" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A413 ;A0=A413: "dart" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F65C display "explosive pen" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A414 ;A0=A414: "explosive pen" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F678 display "explosive case" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A415 ;A0=A415: "explosive case" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F694 display "flare" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A416 ;A0=A416: "flare" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F6B0 display "piton" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A417 ;A0=A417: "piton" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F6CC display "bug" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A41B ;A0=A41B: "bug" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F6E8 display "micro camera" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A41C ;A0=A41C: "micro camera" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F704 display "GoldenEye key" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A41D ;A0=A41D: "GoldenEye key" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F720 display "token" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A41E ;A0=A41E: "token" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -BEQ R0,R0,7F04F754 -LW T9,0028 (SP) -//7F04F73C display "plastique" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A41F ;A0=A41F: "plastique" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -LW T9,0028 (SP) -//7F04F754: pluralize if required -SLTI AT,T9,0002 -BNEL AT,R0,7F04F778 ;branch if singular -LW RA,001C (SP) -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A412 ;A0=A412: "s" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->text -//7F04F774: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/7F04F920 - append ammo type text.txt b/notes/GE Documentation/Objects and Attributes/ammunition/7F04F920 - append ammo type text.txt deleted file mode 100644 index a2ca5de..0000000 --- a/notes/GE Documentation/Objects and Attributes/ammunition/7F04F920 - append ammo type text.txt +++ /dev/null @@ -1,100 +0,0 @@ - -7F04F9F8: 84528 display ammo collection text - accepts: A0=type, A1=amount -27BDFF80 ADDIU SP,SP,FF80 -AFA40080 SW A0,0080 (SP) ;SP+80=A0: ammo type -3C0E8005 LUI T6,8005 -27A4001C ADDIU A0,SP,001C ;A0=SP+1C: buffer for string -00A03025 OR A2,A1,R0 ;A2=A1: quantity -25CE29D8 ADDIU T6,T6,29D8 ;T6=800529D8: 0x64 of NULLs -8FA50080 LW A1,0080 (SP) ;A1=SP+80: ammo type -AFBF0014 SW RA,0014 (SP) -25D90060 ADDIU T9,T6,0060 ;T9=80052A30: endpoint of block -00804025 OR T0,A0,R0 ;T0=A0: p->buffer -//7F04FA20: initialize buffer (memset) -8DC10000 LW AT,0000 (T6) -25CE000C ADDIU T6,T6,000C -2508000C ADDIU T0,T0,000C -AD01FFF4 SW AT,FFF4 (T0) -8DC1FFF8 LW AT,FFF8 (T6) -AD01FFF8 SW AT,FFF8 (T0) -8DC1FFFC LW AT,FFFC (T6) -15D9FFF8 BNE T6,T9,7F04FA20 -AD01FFFC SW AT,FFFC (T0) -//7F04FA44: copy last NULL word, then send out for text -8DC10000 LW AT,0000 (T6) -0FC13E48 JAL 7F04F920 ;creates ammo collection string -AD010000 SW AT,0000 (T0) -//7F04FA50: display text -0FC228F2 JAL 7F08A3C8 ;display A0 in lower-left corner -27A4001C ADDIU A0,SP,001C ;A0=SP+1C: p->final string -//7F04FA58: -8FBF0014 LW RA,0014 (SP) -27BD0080 ADDIU SP,SP,0080 -03E00008 JR RA -00000000 NOP - - -7F04F920: 84450 generate ammo type string - accepts: A0=p->final string, A1=ammo type, A2=quantity -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SB R0,0000 (A0) ;NULL->final -LUI T6,8005 -LW T6,84D0 (T6) ;T6=800484D0: language -OR S0,A0,R0 ;S0=A0: p->final -OR S1,A1,R0 ;S1=A1: type -BEQ T6,R0,7F04F990 ;branch if english -OR S2,A2,R0 ;A2=S2: quantity -//7F04F950: japanese -JAL 7F04F40C ;append ammo type name -NOP -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0003 -BEQ AT,R0,7F04F978 ;branch if 3-4 player -OR A0,S0,R0 ;A0=S0: p->final -OR A1,S1,R0 ;A1=S1: ammo type -JAL 7F04F2B4 ;append "Picked up " -OR A2,S2,R0 ;A2=S2: quantity -//7F04F978: -LUI A1,8005 -ADDIU A1,A1,29D0 ;A1=800529D0: "\r" -JAL 7000A7FC ;append newline -OR A0,S0,R0 ;A0=S0: p->final -BEQ R0,R0,7F04F9E4 -LW RA,0024 (SP) -//7F04F990: english -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0003 -BEQ AT,R0,7F04F9C0 ;branch if 3-4 player -OR A0,S0,R0 ;A0=S0: p->final -//7F04F9A4: append "Picked up " -OR A1,S1,R0 ;A1=S1: ammo type -JAL 7F04F2B4 ;append "Picked up " -OR A2,S2,R0 ;A2=S2: quantity -OR A0,S0,R0 ;A0=S0: p->final -OR A1,S1,R0 ;A1=S1: ammo type -JAL 7F04F2EC ;append article to string -OR A2,S2,R0 ;A2=S2: quantity -//7F04F9C0: append ammo type text -OR A0,S0,R0 ;A0=S0: p->final -OR A1,S1,R0 ;A1=S1: ammo type -JAL 7F04F40C ;append ammo type text -OR A2,S2,R0 ;A2=S2: quantity -//7F04F9D0: append end of sentence -LUI A1,8005 -ADDIU A1,A1,29D4 ;A1=800529D4: "./r" -JAL 7000A7FC ;strcat(A0,"./r") -OR A0,S0,R0 ;A0=S0: p->final -//7F04F9E0: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/Sounds on collection.txt b/notes/GE Documentation/Objects and Attributes/ammunition/Sounds on collection.txt deleted file mode 100644 index afbff90..0000000 --- a/notes/GE Documentation/Objects and Attributes/ammunition/Sounds on collection.txt +++ /dev/null @@ -1,43 +0,0 @@ -7F04F788 0x842B8 plays sound for ammo clip collection - accepts: A0=ammo type -248EFFFF ADDIU T6,A0,FFFF -27BDFFE8 ADDIU SP,SP,FFE8 -2DC1001D SLTIU AT,T6,001D -1020001A BEQ AT,R0,7F04F800 -AFBF0014 SW RA,0014 (SP) -000E7080 SLL T6,T6,0x2 -3C018005 LUI AT,8005 -002E0821 ADDU AT,AT,T6 -8C2E2FEC LW T6,2FEC (AT) -01C00008 JR T6 -00000000 NOP - -//7F04F7B4: 0x842E4 firearm -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) -240500EA ADDIU A1,R0,00EA -0C002382 JAL 70008E08 -00003025 OR A2,R0,R0 -1000000E BEQ R0,R0,7F04F804 -8FBF0014 LW RA,0014 (SP) - -//7F04F7D4: 0x84304 mine -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) -240500EB ADDIU A1,R0,00EB -0C002382 JAL 70008E08 -00003025 OR A2,R0,R0 -10000007 BEQ R0,R0,7F04F804 -8FBF0014 LW RA,0014 (SP) - -//7F04F7EC: 0x8431C knife -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) -240500E9 ADDIU A1,R0,00E9 -0C002382 JAL 70008E08 -00003025 OR A2,R0,R0 -//7F04F800: 0x84330 return -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/ammo on object collection.txt b/notes/GE Documentation/Objects and Attributes/ammunition/ammo on object collection.txt deleted file mode 100644 index 1ef4553..0000000 --- a/notes/GE Documentation/Objects and Attributes/ammunition/ammo on object collection.txt +++ /dev/null @@ -1,134 +0,0 @@ -7F04FC3C V0= amount of ammo received from 07 clip object - accepts: A0=p->obj.data -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF0014 SW RA,0014 (SP) -8C8E0080 LW T6,0080 (A0) ;T6=ammo type -24030001 ADDIU V1,R0,0001 ;V1=1: default amount of ammo -25CFFFFF ADDIU T7,T6,FFFF ;T7=T6-1: type-1 -2DE1000E SLTIU AT,T7,000E -10200013 BEQ AT,R0,7F04FCA4 ;only process types 1-E -000F7880 SLL T7,T7,0x2 ;T7=type->offset -3C018005 LUI AT,8005 -002F0821 ADDU AT,AT,T7 -8C2F3060 LW T7,3060 (AT) ;T7=80053060+offset: TLB jump for each type -01E00008 JR T7 -00000000 NOP -//7F04FC70: type 1 -1000000C BEQ R0,R0,7F04FCA4 -2403000A ADDIU V1,R0,000A -//7F04FC78: type 2 -1000000A BEQ R0,R0,7F04FCA4 -2403000A ADDIU V1,R0,000A -//7F04FC80: type 3 -10000008 BEQ R0,R0,7F04FCA4 -2403000A ADDIU V1,R0,000A -//7F04FC88: type 4 -10000006 BEQ R0,R0,7F04FCA4 -24030005 ADDIU V1,R0,0005 -//7F04FC90: type C -10000004 BEQ R0,R0,7F04FCA4 -24030005 ADDIU V1,R0,0005 -//7F04FC98: type D -10000002 BEQ R0,R0,7F04FCA4 -24030003 ADDIU V1,R0,0003 -//7F04FCA0: type E -24030004 ADDIU V1,R0,0004 -//7F04FCA4: -28610002 SLTI AT,V1,0002 -5420000F BNEL AT,R0,7F04FCE8 ;quit if only 0-1 ammo present -8FBF0014 LW RA,0014 (SP) -//7F04FCB0: test multiplayer -0FC26919 JAL 7F09A464 ;returns V0=# players -AFA3001C SW V1,001C (SP) ;SP+1C= ammo -24010001 ADDIU AT,R0,0001 -14410009 BNE V0,AT,7F04FCE4 ;branch if multiplayer -8FA3001C LW V1,001C (SP) ;V1= ammo -//7F04FCC4: solo ammo multiplier -44832000 MTC1 V1,F4 -3C018003 LUI AT,8003 -C4280B28 LWC1 F8,0B28 (AT) ;F8=80030B28: ammo multiplier -468021A0 CVT.S.W F6,F4 ;F6= (float) ammo -46083282 MUL.S F10,F6,F8 ;F10= ammo * mult -4600540D TRUNC.W.S F16,F10 -44038000 MFC1 V1,F16 ;V1=new ammo -00000000 NOP -//7F04FCE4: return -8FBF0014 LW RA,0014 (SP) -27BD0020 ADDIU SP,SP,0020 -00601025 OR V0,V1,R0 ;V0=V1: amount of ammo -03E00008 JR RA -00000000 NOP - -7F04FCF8 V0= amount of ammo received from 08 item object - accepts: A0=p->obj.data -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF0014 SW RA,0014 (SP) -AFA40020 SW A0,0020 (SP) ;SP+20= p->obj.data -0FC1A50B JAL 7F06942C ;ret V0= ammo type for weapon A0 -80840080 LB A0,0080 (A0) ;A0= weapon type -8FAF0020 LW T7,0020 (SP) ;T7= p->obj.data -2448FFFF ADDIU T0,V0,FFFF ;T0= type-1 -24030001 ADDIU V1,R0,0001 ;V1=1: default amount of ammo -8DF80008 LW T8,0008 (T7) ;T8=object bitflags upper word -2D01000E SLTIU AT,T0,000E ;AT=TRUE if type 1-E -0018C840 SLL T9,T8,0x1 -07210003 BGEZ T9,7F04FD34 ;branch if 0x40000000 not set -00000000 NOP -10000028 BEQ R0,R0,7F04FDD0 ; kill if 0x40000000 set... -00001025 OR V0,R0,R0 -//7F04FD34: jump to specific ammo routine -10200015 BEQ AT,R0,7F04FD8C ;skip if aboe type E -00084080 SLL T0,T0,0x2 -3C018005 LUI AT,8005 -00280821 ADDU AT,AT,T0 ;AT=type -> offest -8C283098 LW T0,3098 (AT) ;T0=8005308+offset: TLB jump for each type -01000008 JR T0 -00000000 NOP -//7F04FD50: type 1 -1000000E BEQ R0,R0,7F04FD8C -2403000A ADDIU V1,R0,000A -//7F04FD58: type 2 -1000000C BEQ R0,R0,7F04FD8C -2403000A ADDIU V1,R0,000A -//7F04FD60: type 3 -1000000A BEQ R0,R0,7F04FD8C -2403000A ADDIU V1,R0,000A -//7F04FD68: type 4 -10000008 BEQ R0,R0,7F04FD8C -24030005 ADDIU V1,R0,0005 -//7F04FD70: type C -10000006 BEQ R0,R0,7F04FD8C -24030005 ADDIU V1,R0,0005 -//7F04FD78: type D -10000004 BEQ R0,R0,7F04FD8C -24030003 ADDIU V1,R0,0003 -//7F04FD80: type E -10000002 BEQ R0,R0,7F04FD8C -24030004 ADDIU V1,R0,0004 -//7F04FD88: type B -24030003 ADDIU V1,R0,0003 -//7F04FD8C: test amount of ammo -28610002 SLTI AT,V1,0002 -5420000F BNEL AT,R0,7F04FDD0 ;quit if 0 or 1 ammo received -00601025 OR V0,V1,R0 -//7F04FD98: determine if multiplayer -0FC26919 JAL 7F09A464 ;ret V0=# players -AFA30018 SW V1,0018 (SP) ;SP+18= ammo -24010001 ADDIU AT,R0,0001 -14410009 BNE V0,AT,7F04FDCC ;branch if multi -8FA30018 LW V1,0018 (SP) ;V1= ammo -//7F04FDAC: solo ammo multiplier -44832000 MTC1 V1,F4 -3C018003 LUI AT,8003 -C4280B28 LWC1 F8,0B28 (AT) ;F8=80030B28: ammo multiplier -468021A0 CVT.S.W F6,F4 ;F6= (float) ammo -46083282 MUL.S F10,F6,F8 ;F10= ammo * mult -4600540D TRUNC.W.S F16,F10 -44038000 MFC1 V1,F16 ;V1=new ammo -00000000 NOP -//7F04FDCC: return -00601025 OR V0,V1,R0 ;V0=V1: ammo -8FBF0014 LW RA,0014 (SP) -27BD0020 ADDIU SP,SP,0020 -03E00008 JR RA -00000000 NOP diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/ammo types and amounts.txt b/notes/GE Documentation/Objects and Attributes/ammunition/ammo types and amounts.txt deleted file mode 100644 index 32c7512..0000000 --- a/notes/GE Documentation/Objects and Attributes/ammunition/ammo types and amounts.txt +++ /dev/null @@ -1,37 +0,0 @@ -ammo box ammo types - - -type # amount text on pickup description of type - -01 10 ammo 9mm ammo -02 10 ammo seemingly also 9mm ammo -03 10 ammo rifle ammo -04 5 cartridges shotgun cartridges -05 1 grenades hand grenades -06 1 rockets rockets -07 1 remote mines remote mines -08 1 proximity mines proximity mines -09 1 timed mines timed mines -0A 1 knives throwing knives -0B 3 grenade rounds grenade launcher round -0C 5 magnum bullets magnum rounds -0D 3 golden bullets golden bullets - -0E 4 darts no assigned object -0F 1 explosive pen no assigned object -10 1 explosive case bombcase -11 1 flare flare gun (non-functional) -12 1 piton piton gun (non-functional) -13 1 stick of dynamite no assigned object -14 1 a bug bug used in dam, frigate -15 1 a micro camera micro camera beta pickup -16 1 goldeneye key goldeneye key -17 1 plastique plastique -18 ? . watch laser -19 ? . watch magnet attract -1A ? . no assigned object -1B ? . camera -1C ? . tank -1D 1 the token multiplayer flag - -all others can not be collected \ No newline at end of file diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/ammo value tables and maximums.txt b/notes/GE Documentation/Objects and Attributes/ammunition/ammo value tables and maximums.txt deleted file mode 100644 index 7a0b135..0000000 --- a/notes/GE Documentation/Objects and Attributes/ammunition/ammo value tables and maximums.txt +++ /dev/null @@ -1,112 +0,0 @@ -800A8490 player data: table of ammo of each type left (doesn't count current clip, in other words...) - -80035EEC: table of ammo maximums and images assigned! -type name RDRAM address 21990 max image image vertical position offset -00 NULL 80035EF0 0x1515C 0 NULL 00000000 -01 9mm Ammo 80035EFC 0x15168 320 02000C84 00000000 -02 Unused 80035F08 0x15174 C8 NULL 00000000 -03 Rifle Ammo 80035F14 0x15180 190 02000C90 C0000000 -04 Cartridges 80035F20 0x1518C 64 02000C9C 00000000 -05 Grenades 80035F2C 0x15198 C 02000CD8 00000000 -06 Rockets 80035F38 0x151A4 3 02000CC0 C0000000 -07 Remote Mines 80035F44 0x151B0 A 02000CFC 3F800000 -08 Proximity M. 80035F50 0x151BC A 02000D14 3F800000 -09 Timed Mines 80035F5C 0x151C8 A 02000D08 3F800000 -0A Throwing K. 80035F68 0x151D4 A 02000CA8 00000000 -0B Grenade Rnds. 80035F74 0x151E0 C 02000CB4 00000000 -0C Magnum Shells 80035F80 0x151EC C8 02000CE4 00000000 -0D Golden Shells 80035F8C 0x151F8 64 02000CF0 00000000 -0E Darts 80035F98 0x15204 32 NULL 00000000 -0F Explosive Pen 80035FA4 0x15210 A NULL 00000000 -10 Bombcase 80035FB0 0x1521C 2 NULL 00000000 -11 Flare 80035FBC 0x15228 8 NULL 00000000 -12 Piton 80035FC8 0x15234 6 NULL 00000000 -13 Dynamite 80035FD4 0x15240 A NULL 00000000 -14 Bug 80035FE0 0x1524C A NULL 00000000 -15 Microcamera 80035FEC 0x15258 A NULL 00000000 -16 Goldeneye Key 80035FF8 0x15264 1 NULL 00000000 -17 Plastique 80036004 0x15270 A NULL 00000000 -18 Watch Laser 80036010 0x1527C 3E8 NULL 00000000 -19 Watch Magnet 8003601C 0x15288 A NULL 00000000 -1A Unused 80036028 0x15294 A NULL 00000000 -1B Camera 80036034 0x152A0 A NULL 00000000 -1C Tank 80036040 0x152AC 32 02000D20 BF800000 -1D Token 8003604C 0x152B8 1 NULL 00000000 - - -7F069130-923C: called when incrementing ammo on collection -ADDIU SP,SP,FFD8 -SW S0,0018 (SP) -OR S0,A0,R0 -SW RA,001C (SP) -SW A1,002C (SP) -JAL 7F05D9D0 -OR A0,R0,R0 -SW V0,0024 (SP) -JAL 7F06942C -OR A0,V0,R0 -BNE V0,S0,7F0691D8 -LW A0,0024 (SP) -JAL 7F05E0B4 -LUI A1,0020 -BEQ V0,R0,7F0691D8 -LUI V1,8008 -LW V1,A0B0 (V1) -LW T7,002C (SP) -LW T6,089C (V1) -ADDU T8,T6,T7 -SW T8,089C (V1) -JAL 7F05C8B4 -LW A0,0024 (SP) -//7F06918C: -LUI V1,8008 -LW V1,A0B0 (V1) -LH T9,0020 (V0) -LW T0,089C (V1) -SLT AT,T9,T0 -BEQL AT,R0,7F0691CC -SLL T3,S0,0x2 -//7F0691A8: -JAL 7F05C8B4 -LW A0,0024 (SP) -LUI T2,8008 -LW T2,A0B0 (T2) ;T2=p->BONDdata -LH T1,0020 (V0) -LUI V1,8008 -SW T1,089C (T2) -LW V1,A0B0 (V1) -SLL T3,S0,0x2 -//7F0691CC: -ADDU T4,V1,T3 -BEQ R0,R0,7F06922C -SW R0,1130 (T4) ;set player's ammo for type to 0 -//7F0691D8: -SLL T5,S0,0x2 -SUBU T5,T5,S0 -SLL T5,T5,0x2 -LUI V0,8003 -ADDU V0,V0,T5 -LW V1,002C (SP) -LW V0,5EF0 (V0) //V0=value from table at 80035EEC (second value is max ammo!) -LUI T6,8008 -LUI T9,8008 -SLT AT,V0,V1 -BEQ AT,R0,7F06921C -NOP -LW T6,A0B0 (T6) -SLL T7,S0,0x2 -ADDU T8,T6,T7 -BEQ R0,R0,7F06922C -SW V0,1130 (T8) //store the new ammo total (pl. data + 0x1130) -//7F06921C: -LW T9,A0B0 (T9) -SLL T0,S0,0x2 -ADDU T1,T9,T0 -SW V1,1130 (T1) //store the new ammo total -//7F06922C: -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/append articles.txt b/notes/GE Documentation/Objects and Attributes/ammunition/append articles.txt deleted file mode 100644 index 70f1d5f..0000000 --- a/notes/GE Documentation/Objects and Attributes/ammunition/append articles.txt +++ /dev/null @@ -1,82 +0,0 @@ -7F04F2EC: 83E1C appends article before ammo type text - accepts: A0=p->final string, A1=ammo type, A2=quantity -ADDIU T6,A1,FFFF ;T6=A1-1: ammo types 1-1D -ADDIU SP,SP,FFE8 -SLTIU AT,T6,001D ;TRUE if valid ammo type -SW RA,0014 (SP) -BEQ AT,R0,7F04F3FC ;branch if invalid type -SW A0,0018 (SP) ;SP+18=A0: p->final -SLL T6,T6,0x2 ;T6=ammo type -> offset -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,2F10 (AT) ;T6=80052F10+offset: TLB redirect for text displayed -JR T6 -NOP -//7F04F31C: "some"/"some" -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A401 ;A0=A401: "some" -LW A0,0018 (SP) ;A0=SP+18: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->article -BEQ R0,R0,7F04F400 -LW RA,0014 (SP) -//7F04F388: "a"/"some" - single -ADDIU AT,R0,0001 -BNE A2,AT,7F04F360 ;branch if multiple ammo -NOP -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A402 ;A0=A402: "a" -LW A0,0018 (SP) ;A0=SP+18: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->article -BEQ R0,R0,7F04F400 -LW RA,0014 (SP) -//7F04F360: "a"/"some" - multiple -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A401 ;A0=A401: "some" -LW A0,0018 (SP) ;A0=SP+18: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->article -BEQ R0,R0,7F04F400 -LW RA,0014 (SP) -//7F04F37C: "an"/"some" - single -ADDIU AT,R0,0001 -BNE A2,AT,7F04F3A4 -NOP -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A403 ;A0=A403: "an" -LW A0,0018 (SP) ;A0=SP+18: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->article -BEQ R0,R0,7F04F400 -LW RA,0014 (SP) -//7F04F3A4: "an"/"some" - multiple -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A401 ;A0=A401: "some" -LW A0,0018 (SP) ;A0=SP+18: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->article -BEQ R0,R0,7F04F400 -LW RA,0014 (SP) -//7F04F3C0: "the"/"some" - single -ADDIU AT,R0,0001 -BNE A2,AT,7F04F3E8 -NOP -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A404 ;A0=A404: "the" -LW A0,0018 (SP) ;A0=SP+18: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->article -BEQ R0,R0,7F04F400 -LW RA,0014 (SP) -//7F04F3E8: "the"/"some" - multiple -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A401 ;A0=A401: "some" -LW A0,0018 (SP) ;A0=SP+18: p->final -JAL 7000A7FC ;strcat(A0,A1) -OR A1,V0,R0 ;A1=V0: p->article -//7F04F3FC: return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/GE Documentation/Objects and Attributes/ammunition/max ammo table.xls b/notes/GE Documentation/Objects and Attributes/ammunition/max ammo table.xls deleted file mode 100644 index 3db3737..0000000 Binary files a/notes/GE Documentation/Objects and Attributes/ammunition/max ammo table.xls and /dev/null differ diff --git a/notes/GE Documentation/Objects and Attributes/destruction table.txt b/notes/GE Documentation/Objects and Attributes/destruction table.txt deleted file mode 100644 index 76c2d76..0000000 --- a/notes/GE Documentation/Objects and Attributes/destruction table.txt +++ /dev/null @@ -1,361 +0,0 @@ -Format Code 0x0 - This sets the way the object is destroyed. -0000 object breaks. no bits or explosion -0001 same as 0 -0002 med explosion letter tray, books, small desk items -0003 med explosion chairs, locker, briefcase -0004 large explosion w/ bits funiture, boxes, heavy vehicles -0005 large explosion w/ bits explosion bit, torpedos, warhead, ICBM -0006 small explosion w/ bits electronics -0007 small explosion lamp, camera, radio, dish, tv -0008 med explode+small explosions w/ bits other consoles -0009 multi small explosions w/ bits consoles -000A med explosion w/ bits -000B med explosion large subsequent explosion; missiles, ammo crates -000C large explosion fire extinguisher -000D large explosion frigate engine, all explosive weapons, cars, landmines -000E fiery plume gas canister explosion type -000F bits only desks and tables - ----------------------------------------------------- -0006 315C 7B6C DBFF 5126 FB59 7CA7 -0006 2AFE CB3E 73F4 278F 6D3A 44C8 -0005 0000 0000 0000 0000 0000 0000 -000B B9B0 3EBA AD62 75C8 B70F F06E -000B 17D9 DFCC 57CD 8254 7345 E011 -000B 3779 ED72 688D F67B 37E5 4F89 -000B E277 0474 DD1E 0C48 486C F87D -000B 7C3F 16BC 44A9 1A58 E412 9297 -0000 3DC2 16B6 E30D BCAB C592 F9B5 -0002 719C 7024 9EE0 C175 A5DD C933 -0002 8E16 BBCA 05C0 1A73 81BE F821 -0000 0000 0000 0000 0000 0000 0000 -0008 2716 F544 0D35 C20E 83D7 7D73 -0008 81A1 B772 1B57 437A 85FA B6C1 -0008 27EB 5A7A BD1A 27EB 5A7A BD1A -0008 98DE 8C36 DDD5 F74B 4F0A 1F14 -0008 34F5 F199 A9F2 3D27 C707 B9AD -0008 678F DB91 2A2E 8D91 6EEE 925E -0004 D82F F4D7 546F D6C7 87D9 0143 -0004 100E ADF2 1FDD 45F1 4772 F8C6 -0004 EF0B 71BB B7F7 BFA3 03B8 E44E -0004 DFD1 676A 8597 E8AC E210 9A4D -0004 AB48 DD9B 4343 04B8 0DCC 3B3D -0004 836B 6BBF 9DBB 3DB7 5957 7341 -0007 0000 0000 0000 0000 0000 0000 -0009 B1CC 19E2 0EA5 B1CC 19E2 0EA5 -0009 F093 B2DF 1409 271E E0B3 418A -0009 3AC2 0102 BF01 3AC2 0102 BF01 -0009 3AC6 E449 A56E A4CF EDA0 1719 -0009 9BCF C333 6384 4298 D455 7BFA -0009 839E 0BA7 1466 DB6D D1B3 1233 -0009 3F67 7A70 83DE 7052 07D2 36FF -0009 A409 692D E286 C63C 82D0 5D07 -0009 D6CA 1866 839C BC6A 86AD 4DC6 -0009 96FC A1EF A9E6 B9D2 A3C5 A045 -0009 7D2B E7DC 55DB 378E 4765 B09C -0009 E2AF 2D43 71FE E390 93B3 57E3 -0009 9367 098A 3B68 D6F8 4EAF 7B83 -000F 0000 0000 0000 0000 0000 0000 -000F 0000 0000 0000 0000 0000 0000 -0007 993D A2B2 5028 825E 25B8 D8EF -0006 6553 024D FD22 D469 18E4 32F6 -0006 F742 0CB5 8ED2 6021 6AD5 AA88 -0004 06D8 82EF 5B19 4147 5AE1 374E -0004 284D 3E7C 9330 CF1E 013F 4E29 -0006 E339 C0B6 E5FC 7054 83A8 C118 -0004 B49F 0002 4EF6 8849 0002 070B -0002 2D56 A1EE 4105 8AE6 6A2A 60DD -0009 79B2 BC78 B9B9 C76A 97A1 3DA3 -0009 3292 DDC3 9265 12A6 E935 B9BC -0003 04DB 3CFD DB5C 3B29 50B7 83D1 -0004 BE64 08AD 150D 6AED 542E 63B3 -0004 D7E5 1369 5ACC 535A 2105 1BF7 -0004 7222 3CEE 1A15 122A ADEC 5EF3 -0004 927F 10B0 5125 7F4E BBC5 8088 -000B E89D 7502 9003 469D 19F0 A5E6 -000B 3771 C002 80FF DBF6 1705 497A -000E A954 AFDE BB6C D4A6 9883 FA27 -000E DE9F CEF0 6346 80FB A382 14D1 -000E 448E D4CC C1B5 442F C1D1 EE05 -000E C7C0 F918 095E ECE2 06D4 C64D -000E C491 16EC DEA7 5A19 9DE7 FF28 -000E E889 2DA6 2775 153C BAE6 CB1B -0000 2D56 A1EE 4105 8AE6 6A2A 60DD -0006 E5E6 8FB7 D5FE E959 D656 FB82 -0007 5876 3A4F D115 A10D 265D 2C02 -0007 787E C128 D96A 60C9 18E7 99AD -0007 879A 90E4 C20F 35FE C807 91D8 -0007 40AE 62B6 D240 AC8D 47C5 17D1 -0000 0000 0000 0000 0000 0000 0000 -0007 15C6 B37D 118A 4E61 5D02 7D50 -0006 15C6 B37D 118A 4E61 5D02 7D50 -0003 0000 0000 0000 0000 0000 0000 -0003 2469 8AE5 524F E5F6 BE4A C865 -0005 2957 1B22 27C7 9663 0DDF 411F -0007 15C6 B37D 118A 4E61 5D02 7D50 -0004 0000 0000 0000 0000 0000 0000 -0006 F8F4 F1E0 473F 41DD A510 C9C6 -0008 0000 0000 0000 0000 0000 0000 -0004 7A51 2382 9B36 29E5 5921 017A -0004 8666 3DD9 E619 6134 CC94 1A5C -0004 7F39 31C5 9AC3 70AB 0551 B069 -0003 D727 7AB2 786B F5AD 3FC4 D6CE -0003 4548 D59E 1EDC E88D E9E4 AF76 -0003 262F 491B FD57 6715 E7ED 2626 -000F 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0004 BCAE 0BD1 0FF7 3A30 7240 83B7 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0006 B2C6 170A 0A23 6BBE B593 82DB -0005 275B 8AD3 002C 27B5 8AD3 002C -0005 0000 0000 0000 0000 0000 0000 -0008 33A1 8A01 4D42 D9CB B865 B336 -0004 8C06 78FC 8F9A 4DF5 4D53 22F9 -0003 99E9 0107 EF5E 0560 E6DF 4B36 -0003 31E7 0023 B2AE A2D7 E540 90B2 -0008 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0008 33A1 8A01 4D42 D9CB B865 B336 -0008 33A1 8A01 4D42 D9CB B865 B336 -0008 33A1 8A01 4D42 D9CB B865 B336 -0008 33A1 8A01 4D42 D9CB B865 B336 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0002 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0006 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -000C 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0003 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0006 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0006 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0004 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0007 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0006 0000 0000 0000 0000 0000 0000 -0006 0000 0000 0000 0000 0000 0000 -0009 0000 0000 0000 0000 0000 0000 -000D 0000 0000 0000 0000 0000 0000 -0000 0000 0000 0000 0000 0000 0000 -0000 FFFF FFFF FFFF FFFF FFFF FFFF diff --git a/notes/GE Documentation/Objects and Attributes/explosions and smoke.txt b/notes/GE Documentation/Objects and Attributes/explosions and smoke.txt deleted file mode 100644 index dd90c77..0000000 --- a/notes/GE Documentation/Objects and Attributes/explosions and smoke.txt +++ /dev/null @@ -1,100 +0,0 @@ -explosion types -0x0 4 [float] horizontal range for explosions -0x4 4 [float] vertical range for explosions -0x8 4 [float] horizontal range change rate -0xC 4 [float] vertical range change rate -0x10 4 [float] size of individual explosions -0x14 4 [float] initial blast range -0x18 4 [float] persistant damage range -0x1C 2 blast duration, in milliseconds -0x1E 2 propagation rate -0x20 4 [float] flare animation speed time each frame is held -0x24 2 #bits of shrapnel -0x26 2 RESERVED -0x28 4 [float] size of shrapnel -0x2C 4 [float] scatter distance of shrapnel -0x30 4 [float] horizontal velocity of shrapnel -0x34 4 [float] vertical velocity of shrapnel -0x38 1 smoke type 0-A, see bleow -0x39 1 sound effect -0x3A 2 RESERVED -0x3C 4 [float] damage - - -0 3DCCCCCD 3DCCCCCD 00000000 00000000 3DCCCCCD 00000000 00000000 00010001 3F800000 00000000 3DCCCCCD 00000000 00000000 00000000 00000000 00000000 -1 3F800000 3F800000 00000000 00000000 3F800000 00000000 00000000 001E0001 3F800000 000A0000 40A00000 00000000 40000000 40C00000 07000000 00000000 -2 41A00000 41A00000 00000000 00000000 41F00000 42480000 42480000 00500001 40400000 00280000 40C00000 40A00000 3F333333 40C00000 02B50000 3E000000 -3 42480000 42480000 00000000 00000000 42480000 42C80000 42C80000 005A0001 40800000 00320000 40C00000 41200000 3F800000 40C00000 02B60000 3F000000 -4 42700000 42A00000 3F800000 3E99999A 42C80000 43160000 438C0000 00780002 40A00000 00500000 41000000 41F00000 40000000 40C00000 01AC0000 3F800000 -5 42700000 42F00000 3F800000 3E99999A 43160000 43480000 439B0000 00780002 40A00000 00500000 41000000 41F00000 40000000 40C00000 01AC0000 40000000 -6 41A00000 41A00000 00000000 00000000 41B00000 42200000 42200000 00500001 40400000 00280000 40C00000 40A00000 3F333333 40C00000 02B50000 3F000000 -7 420C0000 42200000 00000000 00000000 420C0000 428C0000 428C0000 005A0001 40800000 00320000 40C00000 41200000 3F800000 40C00000 02B60000 3F800000 -8 42480000 42A00000 3F800000 3E99999A 42480000 42C80000 435C0000 00780002 40A00000 00500000 41000000 41F00000 40000000 40C00000 01AC0000 40000000 -9 42700000 42F00000 3F800000 3E99999A 42480000 43020000 43660000 00780002 40A00000 00500000 41000000 41F00000 40000000 40C00000 01AC0000 40000000 -A 42200000 42200000 3ECCCCCD 3E4CCCCD 428C0000 42C80000 43340000 00AA0004 40A00000 00780000 40C00000 41F00000 40200000 40C00000 04AE0000 3F800000 -B 42480000 42480000 3F19999A 3ECCCCCD 42C80000 43160000 43820000 00B40001 40800000 00960000 40C00000 41F00000 40400000 40C00000 04AC0000 40000000 -C 428C0000 42700000 3F800000 3F19999A 43160000 43610000 43A00000 00B40002 40A00000 00960000 40C00000 41F00000 40800000 41400000 05AC0000 40800000 -D 42A00000 42700000 40000000 3F333333 43480000 43960000 43F00000 00B40002 40A00000 00C80000 40C00000 41F00000 40C00000 41700000 06AD0000 40800000 -E 42480000 42480000 00000000 00000000 42F00000 43480000 43C80000 00960004 40800000 00960000 40C00000 41F00000 40400000 40C00000 04AD0000 40800000 -F 3F800000 3F800000 00000000 00000000 3F800000 00000000 00000000 00010001 3F800000 00960000 40C00000 41F00000 40200000 40C00000 07AA0000 00000000 -10 3F800000 3F800000 00000000 00000000 3F800000 00000000 00000000 00010001 3F800000 00640000 40C00000 41F00000 40200000 40C00000 07AA0000 00000000 -11 42A00000 42700000 41700000 40A00000 44BB8000 45098000 45610000 012C0001 40000000 00000000 00000000 00000000 00000000 00000000 00AD0000 40800000 -12 42A00000 42700000 40400000 3F800000 43960000 43E10000 44200000 003C0001 40000000 00000000 00000000 00000000 00000000 00000000 00AD0000 40800000 -13 42B40000 42960000 40200000 3F5EB852 437A0000 43BB8000 44160000 00B40002 40A00000 00C80000 40C00000 41F00000 40C00000 41700000 06AD0000 40800000 -14 43200000 42F00000 40C00000 40000000 44160000 43E10000 44200000 003C0001 40000000 00000000 00000000 00000000 00000000 00000000 00AD0000 40800000 - - -smoke types -0x0 2 duration must be less than 0x1FE0 -0x2 2 rate clouds develop complete opacity -0x4 2 rate clouds dissipate -0x6 2 size -0x8 4 [float] background rotation rate -0xC 1 red component -0xD 1 green component -0xE 1 blue component -0xF 1 RESERVED -0x10 4 [float] foreground rotation rate -0x14 2 # propagated clouds -0x16 2 RESERVED - -note: 7,8,9 do not reload their duration values -0 0001 003C 0063 0000 00000000 80 80 80 00 3E99999A 00B4 0000 -1 01E0 003C 002D 003C 3CA3D70A 50 50 60 00 3E99999A 00B4 0000 -2 01E0 003C 0032 0014 3C23D70A 80 80 80 00 3E99999A 00B4 0000 -3 0280 003C 0078 0064 3C23D70A C0 C0 C0 00 3E99999A 00B4 0000 -4 0280 003C 003C 0050 3CA3D70A 40 40 40 00 3E99999A 00B4 0000 -5 0302 003C 0032 00BE 3E19999A 40 40 40 00 3E99999A 00B4 0000 -6 0384 003C 0046 012C 3C23D70A 40 40 40 00 3E99999A 00B4 0000 -7 003C 003C 0008 000F 3CF5C28F FF FF FF 00 3E99999A 00B4 0000 -8 0014 0001 0006 001E 3CF5C28F FF FF FF 00 40000000 001E 0000 -9 0019 0001 0007 0010 3CF5C28F E0 E0 E0 00 40400000 001E 0000 -A 0384 003C 0046 0384 3C23D70A 40 40 40 00 3E99999A 00B4 0000 - -+_+ - -Explosion Buffer, filled at runtime 6 total, 0x3E0 each -0x0 4 p->pos.data, or NULL if entry available -0x4 4 p->???.pos.data or NULL -0x8 18 frame packets, 0x28 frames total -//frame packet 0x18 each - 0x0 4 (float) xpos - 0x4 4 (float) ypos - 0x8 4 (float) zpos - 0xC 4 (float) maximum size - 0x10 4 (float) minimum size - 0x14 2 !0 if displaying frame; number - 0x16 2 RESERVED -//0x28 frames total -... -0x3C8 2 cur.time -0x3CA 2 time to next child explosion, or -1 for default -0x3CC 1 explosion type -0x3CD 1 TRUE forces to ground -0x3CE 1 owner's player# -0x3CF 1 RESERVED -0x3D0 4 (float) xpos -0x3D4 4 (float) ypos -0x3D8 4 (float) zpos -0x3DC 2 room# - diff --git a/notes/GE Documentation/Objects and Attributes/objectified.xls b/notes/GE Documentation/Objects and Attributes/objectified.xls deleted file mode 100644 index e5d78dc..0000000 Binary files a/notes/GE Documentation/Objects and Attributes/objectified.xls and /dev/null differ diff --git a/notes/GE Documentation/Objects and Attributes/weapons/7F005710 - Thrown Item Object Model.txt b/notes/GE Documentation/Objects and Attributes/weapons/7F005710 - Thrown Item Object Model.txt deleted file mode 100644 index ca4a3d8..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/7F005710 - Thrown Item Object Model.txt +++ /dev/null @@ -1,61 +0,0 @@ -7F005710 3A240 V0=model ID for thrown item A0 - accepts: A0=item# (from 1st person weapon/item index) -248EFFFD ADDIU T6,A0,FFFD ;T6=item#-3 -27BDFFE8 ADDIU SP,SP,FFE8 -2DC1002E SLTIU AT,T6,002E ;TRUE if item < 31 -AFBF0014 SW RA,0014 (SP) -1020001E BEQ AT,R0,7F00579C ;skip if outside table -2405FFFF ADDIU A1,R0,FFFF ;A1=-1 invalid -000E7080 SLL T6,T6,0x2 ;T6->offset -3C018005 LUI AT,8005 -002E0821 ADDU AT,AT,T6 -8C2EF0F0 LW T6,F0F0 (AT) ;T6=8004F0F0+offset: pointer to handler -01C00008 JR T6 -00000000 NOP -//7F005740: 03 throwing knife -10000016 BEQ R0,R0,7F00579C -240500BA ADDIU A1,R0,00BA -//7F005748: 18 grenade launcher round -10000014 BEQ R0,R0,7F00579C -240500CB ADDIU A1,R0,00CB -//7F005750: 19 rocket -10000012 BEQ R0,R0,7F00579C -240500CA ADDIU A1,R0,00CA -//7F005758: 1A grenade -10000010 BEQ R0,R0,7F00579C -240500C4 ADDIU A1,R0,00C4 -//7F005760: 1B timed mine -1000000E BEQ R0,R0,7F00579C -240500C9 ADDIU A1,R0,00C9 -//7F005768: 1C proximity mine -1000000C BEQ R0,R0,7F00579C -240500C8 ADDIU A1,R0,00C8 -//7F005770: 1D remote mine -1000000A BEQ R0,R0,7F00579C -240500C7 ADDIU A1,R0,00C7 -//7F005778: 20 rocket -10000008 BEQ R0,R0,7F00579C -240500CA ADDIU A1,R0,00CA -//7F005780: 21 bombcase -10000006 BEQ R0,R0,7F00579C -240500E2 ADDIU A1,R0,00E2 -//7F005788: 22 plastique -10000004 BEQ R0,R0,7F00579C -24050111 ADDIU A1,R0,0111 -//7F005790: 2F bug -10000002 BEQ R0,R0,7F00579C -240500F5 ADDIU A1,R0,00F5 -//7F005798: 30 microcamera -240500F6 ADDIU A1,R0,00F6 -//7F00579C: load model ID if applicable -04A00005 BLTZ A1,7F0057B4 ;if not found, return 0 -00001025 OR V0,R0,R0 ;V0=0 -0FC15B0E JAL 7F056C38 ;load model A0 -00A02025 OR A0,A1,R0 ;A0=A1: model ID -10000002 BEQ R0,R0,7F0057B8 ;return -8FBF0014 LW RA,0014 (SP) -//7F0057B4: return -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP diff --git a/notes/GE Documentation/Objects and Attributes/weapons/7F05206C - generate temporary item instance.txt b/notes/GE Documentation/Objects and Attributes/weapons/7F05206C - generate temporary item instance.txt deleted file mode 100644 index d8be0fa..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/7F05206C - generate temporary item instance.txt +++ /dev/null @@ -1,95 +0,0 @@ -SLL T6,A0,0x2 -ADDIU SP,SP,FF48 -SUBU T6,T6,A0 -SLL T6,T6,0x2 -LUI T7,8004 -ADDU T7,T7,T6 -LW T7,A228 (T7) -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A1,00BC (SP) -SW A0,00B8 (SP) -JAL 7F056C38 -SW T7,00B4 (SP) -JAL 7F03A430 -NOP -OR S0,V0,R0 -JAL 7F06C094 -LW A0,00B4 (SP) -SLTIU A0,S0,0001 -SLTIU A1,V0,0001 -LW A2,00B4 (SP) -JAL 7F05126C -SW V0,00AC (SP) -LW A3,00AC (SP) -BNE S0,R0,7F0520E8 -OR S1,V0,R0 -JAL 7F03A430 -SW A3,00AC (SP) -LW A3,00AC (SP) -OR S0,V0,R0 -BNE A3,R0,7F0520FC -NOP -JAL 7F06C094 -LW A0,00B4 (SP) -OR A3,V0,R0 -BEQ S1,R0,7F0521B0 -NOP -BEQ S0,R0,7F0521B0 -NOP -BEQ A3,R0,7F0521B0 -ADDIU V0,SP,0020 -LUI T8,8003 -ADDIU T8,T8,2194 -ADDIU T0,T8,0084 -OR T1,V0,R0 -LW AT,0000 (T8) -ADDIU T8,T8,000C -ADDIU T1,T1,000C -SW AT,FFF4 (T1) -LW AT,FFF8 (T8) -SW AT,FFF8 (T1) -LW AT,FFFC (T8) -BNE T8,T0,7F052124 -SW AT,FFFC (T1) -LW AT,0000 (T8) -OR T4,V0,R0 -OR T5,S1,R0 -ADDIU T3,V0,0084 -SW AT,0000 (T1) -LW AT,0000 (T4) -ADDIU T4,T4,000C -ADDIU T5,T5,000C -SW AT,FFF4 (T5) -LW AT,FFF8 (T4) -SW AT,FFF8 (T5) -LW AT,FFFC (T4) -BNE T4,T3,7F05215C -SW AT,FFFC (T5) -LW AT,0000 (T4) -OR A0,S1,R0 -OR A2,S0,R0 -SW AT,0000 (T5) -LW T6,00BC (SP) -SB T6,0080 (S1) -LW T7,00B8 (SP) -SH T7,0004 (S1) -JAL 7F051D90 -LW A1,00B4 (SP) -BEQ R0,R0,7F0521D4 -LW RA,001C (SP) -BEQ A3,R0,7F0521C0 -OR S1,R0,R0 -JAL 7F06C234 -OR A0,A3,R0 -BEQL S0,R0,7F0521D4 -LW RA,001C (SP) -JAL 7F03A484 -OR A0,S0,R0 -LW RA,001C (SP) -OR V0,S1,R0 -LW S1,0018 (SP) -LW S0,0014 (SP) -JR RA -ADDIU SP,SP,00B8 diff --git a/notes/GE Documentation/Objects and Attributes/weapons/7F05D6D0 - test if over weapon cap.txt b/notes/GE Documentation/Objects and Attributes/weapons/7F05D6D0 - test if over weapon cap.txt deleted file mode 100644 index 2f530eb..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/7F05D6D0 - test if over weapon cap.txt +++ /dev/null @@ -1,117 +0,0 @@ -7F05D6D0: 92200 advance through weapon set -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -00002025 OR A0,R0,R0 ;A0=0: right hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24050001 ADDIU A1,R0,0001 ;A1=mode (normal? previous?) -AFA20024 SW V0,0024 (SP) ;SP+24=next right weapon -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24050001 ADDIU A1,R0,0001 ;A1=mode (normal? previous?) -8FAE0024 LW T6,0024 (SP) ;T6=next right weapon -AFA20020 SW V0,0020 (SP) ;SP+20=next left weapon -29C10021 SLTI AT,T6,0021 -10200003 BEQ AT,R0,7F05D710 ;branch if right weapon a gadget -28410021 SLTI AT,V0,0021 -14200008 BNEZ AT,7F05D72C ;branch if left weapon a gadget -27A40024 ADDIU A0,SP,0024 ;A0=p->SP+24: pointer to next right weapon # -//7F05D710: right-hand gadget -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) ;V0=p->BONDdata -8C4F0878 LW T7,0878 (V0) ;T7=previous right weapon -AFAF0024 SW T7,0024 (SP) ;SP+24=previous right weapon -8C580C20 LW T8,0C20 (V0) ;T8=previous left weapon -10000004 BEQ R0,R0,7F05D738 -AFB80020 SW T8,0020 (SP) ;SP+20=previous left weapon -//7F05D72C: left-hand gadget -27A50020 ADDIU A1,SP,0020 ;A1=p->SP+20: p->left weapon -0FC2321B JAL 7F08C86C ;draw next weapon in cycle (I think...) -00003025 OR A2,R0,R0 ;A2=0 -//7F05D738: set new weapons -00002025 OR A0,R0,R0 ;A0=0: right hand -8FA50024 LW A1,0024 (SP) ;A1=right weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -24060001 ADDIU A2,R0,0001 ;A2=1 (mode?) -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -8FA50020 LW A1,0020 (SP) ;A1=left weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -24060001 ADDIU A2,R0,0001 ;A2=1 -8FBF0014 LW RA,0014 (SP) -27BD0028 ADDIU SP,SP,0028 -03E00008 JR RA -00000000 NOP - - -7F05D768: 92298 advance backward through weapon set -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -00002025 OR A0,R0,R0 ;A0=0: right hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -2405FFFF ADDIU A1,R0,FFFF ;A1=mode (normal? previous?) -AFA20024 SW V0,0024 (SP) ;SP+24=next right weapon -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -2405FFFF ADDIU A1,R0,FFFF ;A1=mode (normal? previous?) -8FAE0024 LW T6,0024 (SP) ;T6=next right weapon -AFA20020 SW V0,0020 (SP) ;SP+20=next left weapon -29C10021 SLTI AT,T6,0021 -10200003 BEQ AT,R0,7F05D7A8 ;branch if right weapon a gadget -28410021 SLTI AT,V0,0021 -14200008 BNEZ AT,7F05D7C4 ;branch if left weapon a gadget -27A40024 ADDIU A0,SP,0024 ;A0=p->SP+24: pointer to next right weapon # -//7F05D7A8 922D8 right-hand gadget -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) ;V0=p->BONDdata -8C4F0878 LW T7,0878 (V0) ;T7=previous right weapon -AFAF0024 SW T7,0024 (SP) ;SP+24=previous right weapon -8C580C20 LW T8,0C20 (V0) ;T8=previous left weapon -10000004 BEQ R0,R0,7F05D7D0 -AFB80020 SW T8,0020 (SP) ;SP+20=previous left weapon -//7F05D7C4 922F4 left-hand gadget -27A50020 ADDIU A1,SP,0020 ;A1=p->SP+20: p->left weapon -0FC232C4 JAL 7F08CB10 ;draw next weapon in cycle (I think...) -00003025 OR A2,R0,R0 ;A2=0 -//7F05D7D0 92300 set new weapons -00002025 OR A0,R0,R0 ;A0=0: right hand -8FA50024 LW A1,0024 (SP) ;A1=right weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -2406FFFF ADDIU A2,R0,FFFF ;A2=1 (mode?) -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -8FA50020 LW A1,0020 (SP) ;A1=left weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -2406FFFF ADDIU A2,R0,FFFF ;A2=1 -8FBF0014 LW RA,0014 (SP) -27BD0028 ADDIU SP,SP,0028 -03E00008 JR RA -00000000 NOP - -7F05D800: 92330 auto-advance when last of ammo for weapon spent -27BDFFD8 ADDIU SP,SP,FFD0 -AFBF0014 SW RA,0014 (SP) -00002025 OR A0,R0,R0 ;A0=0: right hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24050001 ADDIU A1,R0,0001 ;A1=mode (normal? previous?) -AFA20024 SW V0,002C (SP) ;SP+2C=next right weapon -AFA20024 SW V0,0024 (SP) ;SP+24=next right weapon -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24050001 ADDIU A1,R0,0001 ;A1=mode (normal? previous?) -8FAE0024 LW T6,0024 (SP) ;T6=next right weapon -00401825 OR V1,V0,R0 -AFA20020 SW V0,0020 (SP) ;SP+20=next left weapon -29C10021 SLTI AT,T6,0021 -10200003 BEQ AT,R0,7F05D848 ;branch if right weapon a gadget -28410021 SLTI AT,V0,0021 -14200008 BNEZ AT,7F05D864 ;branch if left weapon a gadget -8FB90024 LW T9,0024 (SP) ;T6=next right weapon -//7F05D848 right-hand gadget -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) ;V0=p->BONDdata -8C4F0878 LW T7,0878 (V0) ;T7=previous right weapon -AFAF0024 SW T7,0024 (SP) ;SP+24=previous right weapon -8C580C20 LW T8,0C20 (V0) ;T8=previous left weapon -10000004 BEQ R0,R0,7F05D8E4 -AFB80020 SW T8,0020 (SP) ;SP+20=previous left weapon -//7F05D864: - - diff --git a/notes/GE Documentation/Objects and Attributes/weapons/7F05DB54 - prev weapon.txt b/notes/GE Documentation/Objects and Attributes/weapons/7F05DB54 - prev weapon.txt deleted file mode 100644 index 7bd90db..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/7F05DB54 - prev weapon.txt +++ /dev/null @@ -1,83 +0,0 @@ -7F05DB54: 92684 handles switching weapons (maybe...) - accepts: A0=hand (0-R:1-L), A1=weapon# -ADDIU SP,SP,FFD8 -SLL T6,A0,0x3 -SW S1,0018 (SP) ;SP+18=S1 -SUBU T6,T6,A0 -LUI S1,8008 -SLL T6,T6,0x2 -ADDIU S1,S1,A0B0 ;S1=8007A0B0 -ADDU T6,T6,A0 -LW T7,0000 (S1) ;T7=8007A0B0: p->BONDdata -SLL T6,T6,0x2 -SW S0,0014 (SP) ;SP+14=S0 -ADDU T6,T6,A0 -SLL S0,T6,0x3 ;S0=hand*3A8: offset between hand data -SW RA,001C (SP) ;SP+1C=RA -SW A0,0028 (SP) ;SP+28=A0: hand -SW A1,002C (SP) ;SP+2C=A1: weapon# -ADDU T8,T7,S0 ;T8=p->BONDdata+offset -LW A0,0870 (T8) ;A0=weapon in hand A0 -JAL 7F06942C ;ret V0=ammo type for weapon A0 -SW A0,0024 (SP) ;SP+24=A0: current hand's weapon -LW V1,0000 (S1) ;V1=p->BONDdata -LW A2,0024 (SP) ;A2=current hand's weapon -OR A3,V0,R0 ;A3=ammo type -ADDU A0,V1,S0 ;A0=BONDdata+offset -LW T9,0874 (A0) ;T9=hand's ??? -LW A1,002C (SP) ;A1=weapon# -BGEZL T9,7F05DBE8 -LW A1,089C (A0) -LW A0,0028 (SP) ;A0=hand -SW A2,0024 (SP) ;A2=current weapon -JAL 7F05CFA4 ;places weapon A1 in hand A0 -SW V0,0020 (SP) ;SP+20=ammo type -LW V1,0000 (S1) ;V1=p->BONDdata -LW A2,0024 (SP) ;A2=org. weapon -LW A3,0020 (SP) ;A3=org. ammo type -ADDU A0,V1,S0 ;A0=BONDdata+offset -LW A1,089C (A0) ;A1=hand's clip ammo -//7F05DBE8: -SLL T0,A3,0x2 ;T0=ammo type->offset -ADDU V0,V1,T0 ;V0=BONDdata+ammo type offset -BLEZ A1,7F05DC04 ;branch if no ammo for weapon -SLTI AT,A2,0021 ;TRUE if original weapon not a gadget -LW T1,1130 (V0) ;T1=ammo total for weapon -ADDU T2,T1,A1 ;T2=ammo total + clip ammo -SW T2,1130 (V0) ;T2=updated value -//7F05DC04: -BEQ AT,R0,7F05DC18 ;branch if a gadget -NOP -LW T3,0000 (S1) ;T3=p->BONDdata -ADDU T4,T3,S0 ;T4=BONDdata+handoffset -SW A2,0878 (T4) ;save prev. weapon to BONDdata+878+hand -//7F05DC18: -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0002 -BNEZ AT,7F05DC34 ;branch if solo -NOP -JAL 7F09B368 -LW A0,0028 (SP) ;A0=hand -//7F05DC34: -JAL 7F05FB00 -LW A0,0028 (SP) -LW T6,0000 (S1) -LW T5,002C (SP) -ADDU T7,T6,S0 -SW T5,0870 (T7) -LW T8,0000 (S1) -ADDU T9,T8,S0 -SW R0,089C (T9) -LW T0,0000 (S1) -ADDU T1,T0,S0 -SW R0,0A4C (T1) -LW T2,0000 (S1) -ADDU T3,T2,S0 -JAL 7F08D8E0 -SW R0,0A50 (T3) -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Objects and Attributes/weapons/7F08CB10-inventory-backward.txt b/notes/GE Documentation/Objects and Attributes/weapons/7F08CB10-inventory-backward.txt deleted file mode 100644 index 2cc0553..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/7F08CB10-inventory-backward.txt +++ /dev/null @@ -1,239 +0,0 @@ -7F08CB10: C1640 parse inventory backward - accepts: A0=p->right weapon#, A1=p->left weapon#, A2=1 if switching allowed -ADDIU SP,SP,FFD8 -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=p->BONDdata -SW RA,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A0,0028 (SP) ;SP+28=A0: p->right weapon -SW A1,002C (SP) ;SP+2C=A1: p->left weapon -LW V0,11E0 (V1) ;V0=p->inventory -OR S2,A2,R0 ;S2=A2: mode? -LW S1,0000 (A0) ;S1=cur. right weapon -OR T6,A0,R0 ;T6=A0: p->right weapon -LW S3,0000 (A1) ;S3=cur. left weapon -BEQ V0,R0,7F08CC58 ;if inventory invalid, branch -OR T7,A1,R0 ;T7=A1: p->left weapon -LW S0,0010 (V0) ;S0=p->previous item in cycle -LW V0,0000 (S0) ;V0=type of entry -ADDIU AT,R0,0001 -BNEL V0,AT,7F08CBC4 ;branch if not a right-handed weapon -ADDIU AT,R0,0003 -//7F08CB68 C1698 right-handed weapon -LW A0,0004 (S0) ;A0=right weapon -SLTI AT,A0,0021 -BEQ AT,R0,7F08CC2C ;branch if a gadget -NOP -SLT AT,A0,S1 -BNEZ AT,7F08CB94 ;branch if weapon code < cur. -NOP -BNE S1,A0,7F08CC2C ;branch if not same item -NOP -BLEZ S3,7F08CC2C ;branch if left weapon invalid -NOP -//7F08CB94 C16C4 set new right weapon -BEQL S2,R0,7F08CBB8 ;don't set if mode=0 -OR S1,A0,R0 ;S1=A0: new right weapon -JAL 7F05E05C ;TRUE if ammo for right weapon -NOP -BEQ V0,R0,7F08CC2C ;branch if you don't have ammo for it -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=p->BONDdata -LW A0,0004 (S0) ;A0=right weapon -OR S1,A0,R0 ;S1=right weapon -//7F08CBB8 -BEQ R0,R0,7F08CC58 -OR S3,R0,R0 ;S3=0: NULL left weapon -//7F08CBC0: double weapon sets -ADDIU AT,R0,0003 -BNE V0,AT,7F08CC2C ;branch if not a double weapon set -NOP -LW A0,0004 (S0) ;A0=right weapon -SLT AT,A0,S1 -BNEZ AT,7F08CBF4 ;branch if right weapon < cur -NOP -BNE S1,A0,7F08CC2C -NOP -LW T8,0008 (S0) ;T8=left weapon -SLT AT,T8,S3 -BEQ AT,R0,7F08CC2C -NOP -//7F08CBF4 C1724 set new double weapon set -BEQ S2,R0,7F08CC18 ;skip if mode =0 -NOP -JAL 7F05E05C ;TRUE if ammo for right weapon -NOP -BNEZ V0,7F08CC18 ;branch if no ammo for weapon -NOP -JAL 7F05E05C ;TRUE if ammo for left weapon -LW A0,0008 (S0) ;A0=left weapon -BEQ V0,R0,7F08CC2C ;branch if no ammo for weapon -//7F08CC18 -LUI V1,8008 -LW S1,0004 (S0) ;S1=right weapon -LW S3,0008 (S0) ;S3=left weapon -BEQ R0,R0,7F08CC58 -LW V1,A0B0 (V1) ;V1=p->BONDdata -//7F08CC2C -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=p->BONDdata -LW T9,11E0 (V1) ;T9=p->inventory -BNE S0,T9,7F08CC50 ;continue if more entries to check -NOP -BNEL S2,R0,7F08CC5C ;branch if mode flag=1 (writable) -LW T0,11EC (V1) ;T0=all guns flag -ADDIU S1,R0,03E8 ;S1=03E8 -ADDIU S3,R0,03E8 ;S3=03E8 -BEQ R0,R0,7F08CB58 -LW S0,0010 (S0) ;S0=p->previous item -//7F08CC58: all guns stuff -LW T0,11EC (V1) ;T0=all guns flag -LW T2,002C (SP) ;T2=p->left weapon -BEQL T0,R0,7F08CE48 ;branch if flag not set -LW T6,0028 (SP) -LW T3,0000 (T2) ;T3=left weapon -LW T1,0028 (SP) ;T1=p->right weapon -ADDIU V1,R0,0021 ;V1=number of valid weapons -BNEZ T3,7F08CCE4 ;branch if doubles -LW S0,0000 (T1) ;S0=right weapon -//7F08CC7C C17AC right-handed weapon -ADDIU T4,S0,0020 ;T4=same as wep#-1 -DIV T4,V1 -MFHI S0 ;S0=weapon-1 -ADDIU T5,S0,0020 ;T5=weapon-1 -BNEZ V1,7F08CC98 -NOP -BREAK -//7F08CC98 -ADDIU AT,R0,FFFF -BNE V1,AT,7F08CCB0 -LUI AT,8000 -BNE T4,AT,7F08CCB0 -NOP -BREAK -//7F08CCB0 -BNEZ S0,7F08CCE4 -NOP -DIV T5,V1 -MFHI S0 -BNEZ V1,7F08CCCC -NOP -BREAK -//7F08CCCC -ADDIU AT,R0,FFFF -BNE V1,AT,7F08CCE4 -LUI AT,8000 -BNE T5,AT,7F08CCE4 -NOP -BREAK -//7F08CCE4 -BNE S0,S1,7F08CD60 -NOP -JAL 7F09A464 ;V0=#players -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F08CE44 ;branch if multi -OR A0,S0,R0 -JAL 7F05E0B4 -LUI A1,0010 -BEQL V0,R0,7F08CE48 -LW T6,0028 (SP) -BEQL S2,R0,7F08CD2C -LW T6,0028 (SP) -JAL 7F05E05C -OR A0,S0,R0 -BEQL V0,R0,7F08CE48 -LW T6,0028 (SP) -LW T6,0028 (SP) -LW T8,002C (SP) -LW T7,0000 (T6) -BNEL S0,T7,7F08CD4C -SLT AT,S3,S0 -LW T9,0000 (T8) -SLT AT,S0,T9 -BEQ AT,R0,7F08CE44 -SLT AT,S3,S0 -BEQL AT,R0,7F08CE48 -LW T6,0028 (SP) -OR S1,S0,R0 -BEQ R0,R0,7F08CE44 -OR S3,S0,R0 -BEQ S2,R0,7F08CD78 -NOP -JAL 7F05E05C -OR A0,S0,R0 -BEQ V0,R0,7F08CDD4 -ADDIU V1,R0,0021 -JAL 7F09A464 -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F08CDC8 -OR A0,S0,R0 -JAL 7F05E0B4 -LUI A1,0010 -BEQ V0,R0,7F08CDC8 -LW T0,0028 (SP) -LW T1,0000 (T0) -LW T2,002C (SP) -OR S1,S0,R0 -BNE S0,T1,7F08CDC0 -NOP -LW T3,0000 (T2) -SLT AT,S0,T3 -BEQL AT,R0,7F08CDCC -OR S1,S0,R0 -//7F08CDC0 -BEQ R0,R0,7F08CE44 -OR S3,S0,R0 -//7F08CDC8 -OR S1,S0,R0 -BEQ R0,R0,7F08CE44 -OR S3,R0,R0 -//7F08CDD4 -ADDIU T4,S0,0020 -DIV T4,V1 -MFHI S0 -BNEZ V1,7F08CDEC -NOP -BREAK -//7F08CDEC -ADDIU AT,R0,FFFF -BNE V1,AT,7F08CE04 -LUI AT,8000 -BNE T4,AT,7F08CE04 -NOP -BREAK -//7F08CE04 -BNEZ S0,7F08CCE4 -NOP -ADDIU T5,S0,0020 -DIV T5,V1 -MFHI S0 -BNEZ V1,7F08CE24 -NOP -BREAK -//7F08CE24 -ADDIU AT,R0,FFFF -BNE V1,AT,7F08CE3C -LUI AT,8000 -BNE T5,AT,7F08CE3C -NOP -BREAK -//7F08CE3C -BEQ R0,R0,7F08CCE4 -NOP -//7F08CE44 C1974 Porygon, return! -LW T6,0028 (SP) -SW S1,0000 (T6) -LW T7,002C (SP) -SW S3,0000 (T7) -LW RA,0024 (SP) -LW S3,0020 (SP) -LW S2,001C (SP) -LW S1,0018 (SP) -LW S0,0014 (SP) -JR RA -ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Objects and Attributes/weapons/Drawing Weapons.txt b/notes/GE Documentation/Objects and Attributes/weapons/Drawing Weapons.txt deleted file mode 100644 index 2defd7a..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/Drawing Weapons.txt +++ /dev/null @@ -1,274 +0,0 @@ -7F08C86C: C139C handles pulling next item out of inventory -27BDFFD8 ADDIU SP,SP,FFD8 -3C038008 LUI V1,8008 -8C63A0B0 LW V1,A0B0 (V1) -AFBF0024 SW RA,0024 (SP) -AFB30020 SW S3,0020 (SP) -AFB2001C SW S2,001C (SP) -AFB10018 SW S1,0018 (SP) -AFB00014 SW S0,0014 (SP) -AFA40028 SW A0,0028 (SP) -AFA5002C SW A1,002C (SP) -8C7011E0 LW S0,11E0 (V1) ;S0=p->inventory -00C09025 OR S2,A2,R0 -8C910000 LW S1,0000 (A0) -1200003D BEQ S0,R0,7F08C998 ;kill if no inventory -8CB30000 LW S3,0000 (A1) -8E020000 LW V0,0000 (S0) ;V0=type of entry -//7F08C8AC: a later branch jumps here -24010001 ADDIU AT,R0,0001 -54410013 BNEL V0,AT,7F08C900 ;branch if not a right-handed weapon -24010003 ADDIU AT,R0,0003 ;AT=3: entry for doubles -8E040004 LW A0,0004 (S0) -28810021 SLTI AT,A0,0021 -10200029 BEQ AT,R0,7F08C968 ;if >0x20 - gadget detected! -0224082A SLT AT,S1,A0 -10200027 BEQ AT,R0,7F08C968 ;branch if next weapon < cur? -00000000 NOP -//7F08C8D0: right weapon testing -52400008 BEQL S2,R0,7F08C8F4 -00808825 OR S1,A0,R0 ;S1=right weapon -0FC17817 JAL 7F05E05C ;TRUE if ammo for right weapon -00000000 NOP -10400021 BEQ V0,R0,7F08C968 ;branch if out! -3C038008 LUI V1,8008 -8C63A0B0 LW V1,A0B0 (V1) ;V1=p->BONDdata -8E040004 LW A0,0004 (S0) ;A0=right weapon -00808825 OR S1,A0,R0 ;S1=right weapon -//7F08C8F4: -10000028 BEQ R0,R0,7F08C998 -00009825 OR S3,R0,R0 ;S3=left weapon -//7F08C8FC: double weapon set -24010003 ADDIU AT,R0,0003 -14410019 BNE V0,AT,7F08C968 ;branch if not doubles! -00000000 NOP -8E040004 LW A0,0004 (S0) ;A0=right weapon -0224082A SLT AT,S1,A0 -14200007 BNEZ AT,7F08C930 -00000000 NOP -16240013 BNE S1,A0,7F08C968 -00000000 NOP -8E180008 LW T8,0008 (S0) ;T8=left weapon -0278082A SLT AT,S3,T8 -1020000F BEQ AT,R0,7F08C968 -00000000 NOP -//7F08C930: -12400008 BEQ S2,R0,7F08C954 -00000000 NOP -0FC17817 JAL 7F05E05C ;TRUE if ammo for right weapon -00000000 NOP -14400004 BNEZ V0,7F08C954 ;branch if you're out! -00000000 NOP -0FC17817 JAL 7F05E05C ;TRUE if ammo for left weapon -8E040008 LW A0,0008 (S0) ;A0=left weapon -10400005 BEQ V0,R0,7F08C968 ;branch if you're out! -//7F08C954: -3C038008 LUI V1,8008 -8E110004 LW S1,0004 (S0) ;S1=right weapon -8E130008 LW S3,0008 (S0) ;S3=left weapon -1000000D BEQ R0,R0,7F08C998 -8C63A0B0 LW V1,A0B0 (V1) ;V1=p->BONDdata -//7F08C968: -... -//7F08C990: loop backward -BNEL S0,R0,7F08C8AC -LW V0,0000 (S0) -... -//7F08CA2C all guns - single weapon drawn -8FAF0028 LW T7,0028 (SP) ;T7=p->right weapon# on stack -24030021 ADDIU V1,R0,0021 ;V1=all-guns activated range -8DF80000 LW T8,0000 (T7) ;T8=right weapon -16380005 BNE S1,T8,7F08CA50 ;branch if it isn't the same as the next weapon in inventory -00000000 NOP -8FB9002C LW T9,002C (SP) ;T9=p->left weapon# on stack -8F280000 LW T0,0000 (T9) ;T0=left weapon -56680027 BNEL S3,T0,7F08CAE8 ;branch if it isn't the same as the next left weapon -8FAB0028 LW T3,0028 (SP) -//7F08CA50 -26090001 ADDIU T1,S0,0001 ;T1=next weapon# -0123001A DIV T1,V1 -00008010 MFHI S0 ;S0=next.wep# % allguns# -260A0001 ADDIU T2,S0,0001 ;T2=next.wep -14600002 BNEZ V1,7F08CA6C ;branch if there wasn't division by zero -00000000 NOP -0007000D BREAK -//7F08CA6C -2401FFFF ADDIU AT,R0,FFFF -14610004 BNE V1,AT,7F08CA84 ;branch if allguns# != -1 -3C018000 LUI AT,8000 -15210002 BNE T1,AT,7F08CA84 -00000000 NOP -0006000D BREAK -//7F08CA84 -1600000C BNEZ S0,7F08CAB8 -00000000 NOP -0143001A DIV T2,V1 -00008010 MFHI S0 -14600002 BNEZ V1,7F08CAA0 -00000000 NOP -0007000D BREAK -//7F08CAA0 -2401FFFF ADDIU AT,R0,FFFF -14610004 BNE V1,AT,7F08CAB8 -3C018000 LUI AT,8000 -15410002 BNE T2,AT,7F08CAB8 -00000000 NOP -0006000D BREAK -//7F08CAB8 -52400006 BEQL S2,R0,7F08CAD4 -02008825 OR S1,S0,R0 -0FC17817 JAL 7F05E05C -02002025 OR A0,S0,R0 -10400004 BEQ V0,R0,7F08CADC -24030021 ADDIU V1,R0,0021 ;V1=all-guns activated range -//7F08CAD0 -02008825 OR S1,S0,R0 ;S1=S0: right weapon -10000003 BEQ R0,R0,7F08CAE4 -00009825 OR S3,R0,R0 ;S3=NULL left weapon -//7F08CADC -5611FFDD BNEL S0,S1,7F08CA54 -26090001 ADDIU T1,S0,0001 -//7F08CAE4 return -8FAB0028 LW T3,0028 (SP) -AD710000 SW S1,0000 (T3) -8FAC002C LW T4,002C (SP) -AD930000 SW S3,0000 (T4) -8FBF0024 LW RA,0024 (SP) -8FB30020 LW S3,0020 (SP) -8FB2001C LW S2,001C (SP) -8FB10018 LW S1,0018 (SP) -8FB00014 LW S0,0014 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -+_+ - -7F08C488: C0FB8 collect weapon of type - returns V0=1 if gadget or all guns in effect -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC230C5 JAL 7F08C314 ;TRUE if item A0 is in inventory -AFA40018 SW A0,0018 (SP) ;SP+18=item# -54400018 BNEL V0,R0,7F08C4FC ;if no ammo, return -00001025 OR V0,R0,R0 ;V0=0: return FALSE -0FC23091 JAL 7F08C244 ;V0=p->next available weapon? -00000000 NOP -10400006 BEQ V0,R0,7F08C4C4 ;branch if NULL pointer -00402025 OR A0,V0,R0 ;A0=V0: entry type-right handed -240E0001 ADDIU T6,R0,0001 -AC4E0000 SW T6,0000 (V0) ;1->thingy -8FAF0018 LW T7,0018 (SP) ;T7=SP+18: item# -0FC23065 JAL 7F08C194 ;add an addition entry to inventory -AC4F0004 SW T7,0004 (V0) ;item#->V0+4: item type -//7F08C4C4 C0FF4 -3C188008 LUI T8,8008 -8F18A0B0 LW T8,A0B0 (T8) ;T8=p->BONDdata -8FA80018 LW T0,0018 (SP) ;T0=weapon type -8F1911EC LW T9,11EC (T8) ;T9=all guns flag -29010021 SLTI AT,T0,0021 ;TRUE if weapon, not gadget -13200005 BEQ T9,R0,7F08C4F0 ;branch if all guns in effect -00000000 NOP -10200003 BEQ AT,R0,7F08C4F0 ;branch if a gadget -00000000 NOP -10000004 BEQ R0,R0,7F08C4FC ;otherwise return false -00001025 OR V0,R0,R0 -//7F08C4F0 C1020 all guns and gadgets return 1 -10000002 BEQ R0,R0,7F08C4FC -24020001 ADDIU V0,R0,0001 -00001025 OR V0,R0,R0 -//7F08C4FC -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - -=_= - -7F08C40C C0F3C - accepts: A0=weapon, A1=hand (0-R:1-L) -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=p->BONDdata -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -AFA5001C SW A1,001C (SP) ;SP+1C=A1: hand -8DCF11EC LW T7,11EC (T6) ;T7=all guns flag -28810021 SLTI AT,A0,0021 -11E00011 BEQ T7,R0,7F08C470 ;branch if all guns not set -00000000 NOP -1020000F BEQ AT,R0,7F08C470 ;branch if weapon# is gadget -00000000 NOP -1485000D BNE A0,A1,7F08C470 ;branch if hand != weapon? -00000000 NOP -0FC26919 JAL 7F09A464 ;ret V0=# players -AFA40018 SW A0,0018 (SP) ;SP+18=A0: right weapon -24010001 ADDIU AT,R0,0001 -14410008 BNE V0,AT,7F08C470 ;branch if multiplayer -8FA40018 LW A0,0018 (SP) -//7F08C454 solo - determine if capable of doubles? -3C050010 LUI A1,0010 -0FC1782D JAL 7F05E0B4 ;TRUE if mask 00100000 is set in weapon A0's stats -AFA40018 SW A0,0018 (SP) -10400003 BEQ V0,R0,7F08C470 ;branch if it wasn't set -8FA40018 LW A0,0018 (SP) -10000003 BEQ R0,R0,7F08C478 ;return TRUE! -24020001 ADDIU V0,R0,0001 -//7F08C470 multiplayer and default -0FC230E7 JAL 7F08C39C ;TRUE if item A0 for hand A1 in inventory -8FA5001C LW A1,001C (SP) -//7F08C478 -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - -%_% - -7F08C3C0: C0EF0 V0=TRUE if item is available - accepts: A0=weapon# - fries: AT,V1,A0,A1,T6,T7,T8 -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=p->BONDdata -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -8DCF11EC LW T7,11EC (T6) ;T7=all guns flag -11E00007 BEQ T7,R0,7F08C3F4 ;branch if all guns not set -00000000 NOP -10800005 BEQ A0,R0,7F08C3F4 ;branch if no weapon -28810021 SLTI AT,A0,0021 -10200003 BEQ AT,R0,7F08C3F4 ;branch if a gadget -00000000 NOP -10000003 BEQ R0,R0,7F08C3FC ;if all guns and a weapon 1-20, V0=1 -24020001 ADDIU V0,R0,0001 -//7F08C3F4 C0F24 determine if the player owns the thing -0FC230C5 JAL 7F08C314 ;V0=TRUE if weapon A0 in inventory -00000000 NOP -//7F08C3FC C0F2C return -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - -+.+ - -this one only in part -deals with determining the next item with ammo for it -... -//7F08D0C8 C1BF8 proceeding from weapon w/o ammo -55420009 BNEL T2,V0,7F08D0F0 ;branch if not a right-handed weapon -8CA5000C LW A1,000C (A1) ;doesn't increment V1... -50800006 BEQL A0,R0,7F08D0EC ;branch if all guns is not set -24630001 ADDIU V1,V1,0001 -8CAD0004 LW T5,0004 (A1) ;T5=right weapon -29A10059 SLTI AT,T5,0021 ;loop through this many items -54200003 BNEL AT,R0,7F08D0F0 ;branch if not a gadget -8CA5000C LW A1,000C (A1) ;doesn't increment V1... -//7F08D0E8 C1C18 various things branch here, so it can't move easily -24630001 ADDIU V1,V1,0001 ;V1=counter? -8CA5000C LW A1,000C (A1) ;A1=p->next item in inventory -10A60003 BEQ A1,A2,7F08D100 ; -00000000 NOP -54A0FFDD BNEL A1,R0,7F08D070 -8CA20000 LW V0,0000 (A1) -//7F08D100 C1C30 kill at EOL -03E00008 JR RA -00601025 OR V0,V1,R0 - diff --git a/notes/GE Documentation/Objects and Attributes/weapons/autogenerated weapons.txt b/notes/GE Documentation/Objects and Attributes/weapons/autogenerated weapons.txt deleted file mode 100644 index b5fd4f5..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/autogenerated weapons.txt +++ /dev/null @@ -1,108 +0,0 @@ -Autogenerated weapons are stored starting at 80071E80 - -Weapons are generated when players draw them or use them. -{side: halfword at 0x82 is timer for mines/grenades} -7F05F5D0: remote mine timer (after 3 seconds, you can activate) -JAL 7F09A464 //returns V0=#players playing -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F05F5F0 -ADDIU T3,R0,00B4 //T3=3sec (180) -ADDIU T2,R0,012C //T2=5sec (300) -BEQ R0,R0,7F05F684 //solo timer -SH T2,0082 (S0) //save 5sec initial time on timer halfword -BEQ R0,R0,7F05F684 //mp timer -SH T3,0082 (S0) //save 3sec initial time on timer halfword - -EXACT same routine at 7F05F5F8, 7F05F620, 7F05F648 -7F05F670: -ADDIU T0,R0,0001 -BEQ R0,R0,7F05F684 -SH T0,0082 (S0) //1sec timer eek! -7F05F67C: -ADDIU T1,R0,00F0 -SH T1,0082 (S0) //save 4sec initial time on timer halfword -//7F05F684: -LW T2,0064 (S0) //T2=object attribute field -LUI AT,FFF9 -ORI AT,AT,FFFF //AT=FFF9FFFF -AND T3,T2,AT -JAL 7F09B150 //returns V0=8007A0B8 -SW T3,0064 (S0) //untoggle bits 00060000 -//7F05F69C: - -Countdown: 7f043df0 -checks if a grenade, NULL 57 and 56, plastique, bomb case, etc. - - - -presets for players -1388 player1 -1389 player2 -138A player3 -138B player4 - - -When uzi drawn MP: -//7F052320: copy from buffer to final location -LW AT,0000 (T6) //AT=01000008 generic weapon header code -ADDIU T6,T6,000C //SP+4C -ADDIU T8,T8,000C //T8=objmem+C -SW AT,FFF4 (T8) //save header -LW AT,FFF8 (T6) -SW AT,FFF8 (T8) //00004001-> IMAGE+PRESET -LW AT,FFFC (T6) -BNE T6,T5,7F052320 //if not at endpoint (T5), keep copying data -SW AT,FFFC (T8) - -[side note: uzi weapon at current] -01000008 00004001 00000000 00000000 -00000000 00000000 3F800000 00000000 -00000000 00000000 00000000 3F800000 -00000000 00000000 00000000 00000000 -3F800000 00000000 00000000 00000000 -00000000 3F800000 00000000 00000000 -00000000 00000000 00000000 00000000 -00000000 447A0000 FFFFFF00 FFFFFF00 -00FFFFFF 00000000 - -7F052214: creates drawn weapon -//7F052344: data is copied, so fill in -LW AT,0000 (T6) -OR A0,S0,R0 //A0=S0=pointer to objdata -OR A3,S1,R0 //A3=S1=8006 handle -SW AT,0000 (T8) -LW T9,00C8 (SP) //T9=object type -SB T9,0080 (S0) //save to type slot for left weapon -LW T7,00C4 (SP) //T7=model# -SH T7,0004 (S0) //save to model slot -LW T1,00CC (SP) //T1=bitflags (upper32) -ORI T2,T1,4000 //T2=attached to guard flag toggled -SW T2,0008 (S0) //T2-> upper32 bitflags -LW T0,00C0 (SP) //T0=object request data pointer (801A5840, for example) -LH T3,0000 (T0) //T3=halfword there (1388) -SH T3,0006 (S0) //set as preset -SW S2,0010 (SP) //save instance data pointer -LW A2,00D4 (SP) //A2=Pchr*Z load line -JAL 7F051F30 //sets instance and 8006 pointers, scales; prepares wep. -LW A1,00C0 (SP) //A1=request data -BEQ R0,R0,7F0523B8 -OR S1,V0,R0 -//7F052394: -BEQ S2,R0,7F0523A4 -NOP -JAL 7F06C234 -OR A0,S2,R0 -BEQL S1,R0,7F0523BC - LW RA,002C (SP) -JAL 7F03A484 -OR A0,S1,R0 -OR S1,R0,R0 -//7F0523B8: -LW RA,002C (SP) -OR V0,S1,R0 -LW S1,0024 (SP) -LW S0,0020 (SP) -LW S2,0028 (SP) -JR RA -ADDIU SP,SP,00C0 \ No newline at end of file diff --git a/notes/GE Documentation/Objects and Attributes/weapons/collecting weapons.txt b/notes/GE Documentation/Objects and Attributes/weapons/collecting weapons.txt deleted file mode 100644 index cec7074..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/collecting weapons.txt +++ /dev/null @@ -1,129 +0,0 @@ -7F0503DC: 84F0C 08 weapon collection subroutine -SW R0,0044 (SP) ;SP+44=0 -LB A0,0080 (V1) ;A0=item type -JAL 7F04F810 ;sets sound effects on weapon type A0 collection -SW V1,0048 (SP) ;SP+48=p->weapon -LW T5,0048 (SP) ;T5=p->weapon -ADDIU AT,R0,001D -LB A0,0080 (T5) ;A0=item type -BNEL A0,AT,7F050414 ;branch if not 1D: remote mines -ADDIU AT,R0,0058 -//7F050400: add detonator when remote mines collected -JAL 7F08C488 ;Add item A0 to inventory -ADDIU A0,R0,001E ;A0=1E: detonator -BEQ R0,R0,7F050428 -LW T6,006C (SP) -//7F050410: handle flag -ADDIU AT,R0,0058 -BNE A0,AT,7F050424 ;branch if not 58: token (flag) -ADDIU A1,R0,0058 ;A1=58: token -JAL 7F05D914 ;set item A1 in hand A0 -OR A0,R0,R0 ;A0=0: right hand -//7F050424: -LW T6,006C (SP) ;T6=SP+6C: probably also p->weapon -LW T9,0048 (SP) ;T9=p->weapon -LW T7,0064 (T6) -ANDI T8,T7,0400 -BEQ T8,R0,7F0504A4 ;branch if flag 0x400 not set -NOP -LB T0,0080 (T9) ;T0=item type -SLTI AT,T0,0021 ;TRUE if item Unarmed - Tank -BEQL AT,R0,7F050458 ;branch if gadget -LW T1,0074 (SP) -JAL 7F08C764 -LW A0,0070 (SP) ;A0=SP+70: -//7F050454: -LW T1,0074 (SP) ;T1=SP+74: -BEQL T1,R0,7F050498 ;branch if not set -LW T4,0048 (SP) -JAL 7F08D95C -LW A0,006C (SP) ;A0=SP+6C: p->weapon -BEQ V0,R0,7F050480 -OR A0,V0,R0 -JAL 7F08A3C8 -NOP -BEQ R0,R0,7F050490 -ADDIU T3,R0,0001 -//7F050480: -LW T2,0048 (SP) -JAL 7F050224 -LB A0,0080 (T2) -ADDIU T3,R0,0001 -//7F050490: -SW T3,0044 (SP) -LW T4,0048 (SP) ;T4=p->item type -ADDIU V1,R0,0004 -BEQ R0,R0,7F050510 -LB A0,0080 (T4) -//7F0504A4: -JAL 7F08C764 -LW A0,0070 (SP) -BEQ V0,R0,7F0504B8 -ADDIU T5,R0,0001 -SW T5,0044 (SP) -//7F0504B8: -LW T6,0074 (SP) -LW T7,0048 (SP) -BEQL T6,R0,7F050508 -LW T1,0048 (SP) -JAL 7F08D9A4 -LB A0,0080 (T7) -BEQ V0,R0,7F0504EC -OR A0,V0,R0 -ADDIU T8,R0,0001 -JAL 7F08A3C8 -SW T8,0044 (SP) -BEQ R0,R0,7F050508 -LW T1,0048 (SP) -//7F0504EC: display weapon name on collection -LW T9,0044 (SP) -LW T0,0048 (SP) -BEQL T9,R0,7F050508 -LW T1,0048 (SP) -JAL 7F050224 ;display text for collecting weapon A0 in lower left -LB A0,0080 (T0) ;A0=item type -//7F050504: -LW T1,0048 (SP) -ADDIU V1,R0,0001 -LB A0,0080 (T1) ;A0=item type -JAL 7F06942C -SW V1,0068 (SP) -LW V1,0068 (SP) -BEQ V0,R0,7F050674 -OR S0,V0,R0 -LW A0,0048 (SP) -JAL 7F04FC4C ;V0=#ammo collected from item -SW V1,0068 (SP) -LW V1,0068 (SP) -BLEZ V0,7F050674 ;branch if stupid total -SW V0,0034 (SP) ;SP+34=#ammo -OR A0,S0,R0 -JAL 7F069240 -SW V1,0068 (SP) -SW V0,0024 (SP) -JAL 7F0692D4 -OR A0,S0,R0 -LW T2,0024 (SP) -LW V1,0068 (SP) -OR A0,S0,R0 -SLT AT,T2,V0 -BEQL AT,R0,7F050678 -ADDIU AT,R0,0001 -JAL 7F069240 -SW V1,0068 (SP) -LW T3,0034 (SP) -OR A0,S0,R0 -JAL 7F069130 -ADDU A1,V0,T3 -LW T4,0044 (SP) -LW V1,0068 (SP) -LW T5,0074 (SP) -BNEL T4,R0,7F050678 -ADDIU AT,R0,0001 -BEQ T5,R0,7F050674 -OR A0,S0,R0 -LW A1,0034 (SP) -JAL 7F04F9F8 -SW V1,0068 (SP) -BEQ R0,R0,7F050674 -LW V1,0068 (SP) diff --git a/notes/GE Documentation/Objects and Attributes/weapons/explosive weapon timers.txt b/notes/GE Documentation/Objects and Attributes/weapons/explosive weapon timers.txt deleted file mode 100644 index 4999b30..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/explosive weapon timers.txt +++ /dev/null @@ -1,91 +0,0 @@ -Weapons are generated when players draw them or use them. -{side: halfword at 0x82 is timer for mines/grenades} - -//7F05F534: -LW A1,0038 (SP) -BNEZ S0,7F05F5A8 -ADDIU T0,A1,FFE5 -SLTIU AT,T0,0023 -BEQ AT,R0,7F05F598 -ADDIU A0,R0,00C7 //set remote mine model (default) -SLL T0,T0,0x2 -LUI AT,8005 -ADDU AT,AT,T0 -LW T0,3CB0 (AT) //T0=80053CB0+offset TIMED MINE-GEkey -JR T0 -NOP -... 7F05F564: set proximity mine model -BEQ R0,R0,7F05F598 -ADDIU A0,R0,00C8 -... 7F05F56C: set timed mine model -BEQ R0,R0,7F05F598 -ADDIU A0,R0,00C9 -... 7F05F574: set bombcase model -BEQ R0,R0,7F05F598 -ADDIU A0,R0,00E2 -... 7F05F57C: set bug model -BEQ R0,R0,7F05F598 -ADDIU A0,R0,00F5 -... 7F05F584: set microcamera model -BEQ R0,R0,7F05F598 -ADDIU A0,R0,00F6 -... 7F05F58C: set goldeneye key model -BEQ R0,R0,7F05F598 -ADDIU A0,R0,00F8 -... 7F05F594: set plastique model -ADDIU A0,R0,0111 -//7F05F598: -JAL 7F05206C -NOP -//7F05F5A0: -OR S0,V0,R0 -LW A1,0038 (SP) -BEQ S0,R0,7F05F728 -ADDIU T1,A1,FFE5 -SLTIU AT,T1,0023 -BEQ AT,R0,7F05F67C -SLL T1,T1,0x2 -LUI AT,8005 -ADDU AT,AT,T1 -LW T1,3D3C (AT) //T1=80053D3C+offset TIMED MINE-GEkey -JR T1 -NOP -... -7F05F5D0: remote mine timer (after 3 seconds, you can activate) -JAL 7F09A464 //returns V0=#players playing -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F05F5F0 -ADDIU T3,R0,00B4 //T3=3sec (180) -ADDIU T2,R0,012C //T2=5sec (300) -BEQ R0,R0,7F05F684 //solo timer -SH T2,0082 (S0) //save 5sec initial time on timer halfword -BEQ R0,R0,7F05F684 //mp timer -SH T3,0082 (S0) //save 3sec initial time on timer halfword -... -7F05F5F8: proximity mine timer 3 sec. MP, 5 sec. solo -... -7F05F620: timed mine timer 3 seconds MP, 5 solo -... -7F05F648: bombcase 3 sec. MP, 5 sec. solo -... -7F05F670: plastique, bug, microcamera, GE Key instantly active -ADDIU T0,R0,0001 -BEQ R0,R0,7F05F684 -SH T0,0082 (S0) //1ms timer eek! -... -7F05F67C: default for non-timed weapons within mine-gekey range -ADDIU T1,R0,00F0 -SH T1,0082 (S0) //save 4sec initial time on timer halfword -... -7F05F684: -LW T2,0064 (S0) //T2=object attribute field -LUI AT,FFF9 -ORI AT,AT,FFFF //AT=FFF9FFFF -AND T3,T2,AT -JAL 7F09B150 //returns V0=8007A0B8 -SW T3,0064 (S0) //untoggle bits 00060000 -//7F05F69C: - -Countdown: 7f043df0 -checks if a grenade, NULL 57 and 56, plastique, bomb case, etc. diff --git a/notes/GE Documentation/Objects and Attributes/weapons/text on weapon collection.txt b/notes/GE Documentation/Objects and Attributes/weapons/text on weapon collection.txt deleted file mode 100644 index 6b88b06..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/text on weapon collection.txt +++ /dev/null @@ -1,310 +0,0 @@ -7F04FDE0: 84910 creates region-specific text @ A0 for item A1 collection -LUI T6,8005 -LW T6,84D0 (T6) ;T6=800484D0: selected language -ADDIU SP,SP,FFD8 -SW S0,0018 (SP) -OR S0,A0,R0 ;S0=A0: p->final string -SW RA,001C (SP) -SW A1,002C (SP) ;SP+2C=A1: item type -BEQ T6,R0,7F04FE2C ;branch if 0 - english -SW R0,0024 (SP) ;SP+24=0 -//7F04FE04: japanese -LUI A1,8005 -JAL 7000A770 ;strcpy(A0,A1): copy NULL to output -ADDIU A1,A1,2A3C ;A1=80052A3C: NULL -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0003 -BNEZ AT,7F04FE54 ;branch if not 3-4 player (quad screen) -ADDIU T7,R0,0001 -BEQ R0,R0,7F04FE54 -SW T7,0024 (SP) ;SP+24=1: inhibit 'picked up' text -//7F04FE2C: english -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0003 -BEQL AT,R0,7F04FE58 ;branch if not 3-4 player (quad screen) -LW T8,002C (SP) -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A400 ;A0=A400: "Picked up" -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A770 ;strcpy(A0,A1) -OR A1,V0,R0 ;A1=V0: p->"Picked up" -//7F04FE54: -LW T8,002C (SP) ;T8=SP+2C: item type -ADDIU T9,T8,FFFE ;T9=T8-2: item type -2 (no NULL, unarmed) -SLTIU AT,T9,0057 ;TRUE if hunting knife - flag -BEQ AT,R0,7F050190 ;branch if invalid -SLL T9,T9,0x2 ;T9=item#->offset -LUI AT,8005 -ADDU AT,AT,T9 -LW T9,30D0 (AT) ;T9=800530D0+offset: p->item name routine -JR T9 -NOP -// -JAL 7F06942C ;V0=ammo type for item A0 -LW A0,002C (SP) ;A0=SP+2C: item type -OR A0,S0,R0 ;A0=S0: p->final -OR A1,V0,R0 ;A1=V0: ammo type -JAL 7F04F920 ;display ammo type collection text -ADDIU A2,R0,0001 ;A2=1: -BEQ R0,R0,7F050214 -LW RA,001C (SP) -// -JAL 7F0C1DD8 -ORI A0,R0,A420 ;A0=A420: "a hunting knife.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A421 ;A0=A421: "a PP7.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A422 ;A0=A422: "a silenced PP7.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A423 ;A0=A423: "a DD44 Dostovei.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A424 ;A0=A424: "a Klobb.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A425 ;A0=A425: "a KF7 Soviet.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A426 ;A0=A426: "a ZMG (9mm).*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A427 ;A0=A427: "a D5K Deutsche.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A428 ;A0=A428: "a silenced D5K.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A429 ;A0=A429: "a Phantom.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A42A ;A0=A42A: "an AR33 assault rifle.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A42B ;A0=A42B: "an RC-P90.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A42C ;A0=A42C: "a shotgun.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A42D ;A0=A42D: "an automatic shotgun.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A42E ;A0=A42E: "a sniper rifle.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A42F ;A0=A42F: "a grenade launcher.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A430 ;A0=A430: "a rocket launcher.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A431 ;A0=A431: "a Cougar Magnum.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A432 ;A0=A432: "the Golden Gun.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A433 ;A0=A433: "a Moonraker laser.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A434 ;A0=A434: "a flare pistol.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A435 ;A0=A435: "a piton gun.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A436 ;A0=A436: "a silver PP7.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A437 ;A0=A437: "a gold PP7.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A438 ;A0=A438: "a keycard.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A439 ;A0=A439: "a yale key.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A43A ;A0=A43A: "a bolt key.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -BEQ R0,R0,7F0501A4 -NOP -// -JAL 7F0C1DD8 -ORI A0,R0,A43B ;A0=A43B: "a new weapon.*" -OR A0,S0,R0 -JAL 7000A7FC -OR A1,V0,R0 -// -LUI T0,8005 -LW T0,84D0 (T0) ;T0=800484D0: selected language -LW T1,0024 (SP) ;T1=SP+24: inhibit "picked up.*" text -BEQL T0,R0,7F050214 ;branch if english -LW RA,001C (SP) -BNEL T1,R0,7F050214 ;branch if text inhibitted -LW RA,001C (SP) -//7F0501C0: japanese: remove /r at end of string if present -JAL 7001387C ;V0=strlen(A0) -OR A0,S0,R0 ;A0=S0: p->final -ADDU T2,V0,S0 ;T2=p->NULL at end of string -LBU T3,FFFF (T2) ;T3=last character -ADDIU AT,R0,000A -BNE T3,AT,7F0501EC ;branch if not a /r -NOP -JAL 7001387C ;V0=strlen(A0) -OR A0,S0,R0 ;A0=S0: p->final -ADDU T4,S0,V0 ;T4=p->NULL at end of string -SB R0,FFFF (T4) ;overwrite /r character -//7F0501EC: append japanese "picked up." text -JAL 7F0C1DD8 ;V0=p->text ID A0 -ORI A0,R0,A400 ;A0=A400: " picked up." -OR A0,S0,R0 ;A0=S0: p->final -JAL 7000A7FC ;strcat(A0,A1): append " picked up." -OR A1,V0,R0 ;A1=V0: p->" picked up." -LUI A1,8005 -ADDIU A1,A1,2A40 ;A1=80052A40: "\r" -JAL 7000A7FC ;strcat(A0,A1): append "\r" -OR A0,S0,R0 ;A0=S0: p->final -//7F050210: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP diff --git a/notes/GE Documentation/Objects and Attributes/weapons/watch equipment.txt b/notes/GE Documentation/Objects and Attributes/weapons/watch equipment.txt deleted file mode 100644 index 56fc73c..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/watch equipment.txt +++ /dev/null @@ -1,1011 +0,0 @@ -800490F0 - links to the weapon sets - -90 models total. known IDs are given - -0x0 model header line (if applicable) -0x4 text call line (if applicable) -0x8 hold only = 1 -0xC weapon statistics: fire rate, ammo type, position, etc. -0x10 solo watch text - main page upper line -0x12 solo watch text - main page lower line -0x14 [float] vertical position on solo watch menu main page -0x18 [float] lateral position on solo watch menu main page -0x1C [float] depth on solo watch menu main page -0x20 [float] z rotation on solo watch menu -0x24 [float] x rotation on solo watch menu -0x28 collection text -0x2A solo watch text - inventory -0x2C [float] horizontal offset on solo watch menu inventory page; sets distance from rotation centerpoint -0x30 [float] vertical offset on solo watch menu inventory page -0x34 [float] depth offset on solo watch menu inventory page - -Note that the watch model zoom feature alters the floating-point values in this table! - - -Nothing... -[\-] -[-\-] -80033924 00000000.00000000 -8003392C 00000001.00000000 -80033934 98839811.00000000 -8003393C 00000000.447A0000 -80033944 00000000.00000000 -8003394C 98119811.41200000 -80033954 41200000.447A0000 - -Unarmed -[\Unarmed] -[Unarmed\unarmed] -8003395C 8003CB20.80053794 -80033964 00000000.80032504 -8003396C 98839876.00000000 -80033974 00000000.447A0000 -8003397C 00000000.00000000 -80033984 987698CD.41200000 -8003398C 41200000.447A0000 - -hunting knives -[\Knife] -[Hunting Knife\hunting knife] -80033994 8003CA20.8005379C -8003399C 00000000.80032574 -800339A4 98839846.43480000 -800339AC 421C0000.44A5E000 -800339B4 00000000.00000000 -800339BC 984098A8.42180000 -800339C4 42EC0000.44480000 - -throwing knives -[Throwing\Knife] -[Throwing Knife\throwing knife] -800339CC 8003CA40.800537A4 -800339D4 00000000.800325E4 -800339DC 98719806.43480000 -800339E4 424C0000.44A5E000 -800339EC 00000000.00000000 -800339F4 987098CA.42180000 -800339FC 42EC0000.44480000 - -pp7 -[PP7 Special\Issue] -[PP7 Special Issue\pp7] -80033A04 8003C7C0.800537B4 -80033A0C 00000000.80032654 -80033A14 98579801.41A00000 -80033A1C 42C20000.4410C000 -80033A24 00000000.00000000 -80033A2C 985698BA.42BC0000 -80033A34 40000000.43B20000 - -silenced pp7 -[PP7\(silenced)] -[PP7 (silenced)\pp7 (silenced)] -80033A3C 8003C7E0.800537BC -80033A44 00000000.800326C4 -80033A4C 98039810.41D00000 -80033A54 43220000.44270000 -80033A5C 00000000.00000000 -80033A64 985598B9.43290000 -80033A6C 40A00000.4405C000 - -dd44 -[DD44\Dostovei] -[DD44 Dostovei\dd44] -80033A74 8003C800.800537C8 -80033A7C 00000000.80032734 -80033A84 98049832.41B00000 -80033A8C 43000000.44314000 -80033A94 00000000.00000000 -80033A9C 982A989A.42F80000 -80033AA4 41600000.43E38000 - -klobb -[\Klobb] -[Klobb\klobb] -80033AAC 8003C820.800537D0 -80033AB4 00000000.800327A4 -80033ABC 9883986B.42380000 -80033AC4 42F80000.44444000 -80033ACC 00000000.00000000 -80033AD4 986B98C6.42F80000 -80033ADC 42000000.44084000 - -K47 -[KF7\Soviet] -[KF7 Soviet\kf7 soviet] -80033AE4 8003C840.800537DC -80033AEC 00000000.80032814 -80033AF4 98089868.C1E80000 -80033AFC 43998000.44B04000 -80033B04 00000000.00000000 -80033B0C 984298AB.43980000 -80033B14 C1F80000.447F0000 - -ZMG -[\ZMG (9mm)] -[ZMG (9mm)\zmg (9mm)] -80033B1C 8003C860.800537E4 -80033B24 00000000.80032884 -80033B2C 98839882.C1900000 -80033B34 42640000.4495C000 -80033B3C 00000000.00000000 -80033B44 988298D7.42880000 -80033B4C C2440000.4426C000 - -D5K -[D5K\Deutsche] -[D5K Deutsche\] -80033B54 8003C880.800537EC -80033B5C 00000000.800328F4 -80033B64 9800982F.41400000 -80033B6C 42E00000.44A28000 -80033B74 00000000.00000000 -80033B7C 98299896.42F60000 -80033B84 C0000000.441D0000 - -Silenced D5K -[D5K\(silenced)] -[D5K (silenced)\d5k (silenced)] -80033B8C 8003C8A0.800537F4 -80033B94 00000000.80032964 -80033B9C 98009810.41600000 -80033BA4 43630000.44A28000 -80033BAC 00000000.00000000 -80033BB4 98289895.43620000 -80033BBC C1200000.44508000 - -Phantom -[\Phantom] -[Phantom\phantom] -80033BC4 8003C9C0.80053800 -80033BCC 00000000.800329D4 -80033BD4 98839858.C0800000 -80033BDC 43100000.448D0000 -80033BE4 00000000.00000000 -80033BEC 985898B4.43120000 -80033BF4 C1900000.44484000 - -AR33 -[US AR33\Assault] -[US AR33 Assault Rifle\ar33] -80033BFC 8003C8C0.8005380C -80033C04 00000000.80032A44 -80033C0C 98759812.41C80000 -80033C14 437B0000.44E08000 -80033C1C 00000000.00000000 -80033C24 98749884.43760000 -80033C2C C2340000.44BB2000 - -RCP90 -[\RC-P90] -[RC-P90\rc-p90] -80033C34 8003C8E0.80053814 -80033C3C 00000000.80032AB4 -80033C44 9883985E.42B00000 -80033C4C C2300000.448A6000 -80033C54 00000000.00000000 -80033C5C 985E98BC.C2300000 -80033C64 41F80000.4458C000 - -Shotgun -[\Shotgun] -[Shotgun\shotgun] -80033C6C 8003C960.8005381C -80033C74 00000000.80032B24 -80033C7C 98839864.421C0000 -80033C84 438D8000.44990000 -80033C8C 00000000.00000000 -80033C94 986498C1.438E0000 -80033C9C C1B00000.4479C000 - -Autoshotgun -[Automatic\ Shotgun] -[Automatic Shotgun\auto shotgun] -80033CA4 8003C980.80053828 -80033CAC 00000000.80032B94 -80033CB4 9816980C.42920000 -80033CBC 438E8000.44990000 -80033CC4 00000000.00000000 -80033CCC 98159886.438E0000 -80033CD4 40800000.44750000 - -Sniper Rifle -[Sniper\ Rifle] -[Sniper Rifle\sniper rifle] -80033CDC 8003CB40.80053834 -80033CE4 00000000.80032C04 -80033CEC 9867980A.42440000 -80033CF4 43848000.44DC0000 -80033CFC 00000000.00000000 -80033D04 986698C3.43860000 -80033D0C 41600000.44BB2000 - -Magnum -[Cougar\Magnum] -[Cougar Magnum\cougar magnum] -80033D14 8003C920.80053844 -80033D1C 00000000.80032C74 -80033D24 9826984C.423C0000 -80033D2C 43380000.44404000 -80033D34 00000000.00000000 -80033D3C 98259893.43360000 -80033D44 42100000.44170000 - -Golden Gun -[Golden\ Gun] -[Golden Gun\golden gun] -80033D4C 8003C940.8005384C -80033D54 00000000.80032CE4 -80033D5C 983B9805.41E80000 -80033D64 43120000.441D4000 -80033D6C 00000000.00000000 -80033D74 983998A3.43100000 -80033D7C 41900000.43E80000 - -Silver PP7 -[\Silver PP7] -[Silver PP7\silver pp7] -80033D84 8003CCC0.80053858 -80033D8C 00000000.80032D54 -80033D94 98839865.41A00000 -80033D9C 42C20000.4410C000 -80033DA4 00000000.00000000 -80033DAC 986598C2.42BC0000 -80033DB4 40000000.43B20000 - -Golden PP7 -[\Gold PP7] -[Gold PP7\gold pp7] -80033DBC 8003CCE0.80053868 -80033DC4 00000000.80032DC4 -80033DCC 98839838.41A00000 -80033DD4 42C20000.4410C000 -80033DDC 00000000.00000000 -80033DE4 983898A2.42BC0000 -80033DEC 40000000.43B20000 - -Laser -[Military\Laser] -[Military Laser\laser] -80033DF4 8003C9E0.80053874 -80033DFC 00000000.80032E34 -80033E04 98529847.42860000 -80033E0C 42D40000.44388000 -80033E14 00000000.00000000 -80033E1C 985198AC.42CE0000 -80033E24 41A80000.44084000 - -Watch Laser -[Watch\Laser] -[Watch Laser\watch laser] -80033E2C 8003CFE0.8005387C -80033E34 00000000.80032EA4 -80033E3C 987F9847.42A40000 -80033E44 00000000.45329000 -80033E4C 00000000.42B40000 -80033E54 987B98D2.00000000 -80033E5C C2200000.44ACE000 - -Grenade Launcher -[Grenade\Launcher] -[Grenade Launcher\grenade launcher] -80033E64 8003C9A0.8005388C -80033E6C 00000000.80032F14 -80033E74 983D9848.41D80000 -80033E7C 438B8000.44900000 -80033E84 00000000.00000000 -80033E8C 983C98A5.438E0000 -80033E94 C1B00000.44700000 - -Rocket Launcher -[ Rocket\Launcher] -[Rocket Launcher\rocket launcher] -80033E9C 8003CA00.8005389C -80033EA4 00000000.80032F84 -80033EAC 980B9848.42DE0000 -80033EB4 C2480000.44CB0000 -80033EBC 00000000.00000000 -80033EC4 986198BF.C2280000 -80033ECC 41800000.44ACA000 - -Grenades -[\Grenade] -[Hand Grenade\grenade] -80033ED4 8003CB00.800538AC -80033EDC 00000000.80032FF4 -80033EE4 9883983D.43340000 -80033EEC 00000000.452B9000 -80033EF4 00000000.42B40000 -80033EFC 983E98A6.00000000 -80033F04 42400000.44B78000 - -Timed Mines -[ Mine\(Timed)] -[Timed Mine\timed mine] -80033F0C 8003CAC0.800538B8 -80033F14 00000000.80033064 -80033F1C 9809980F.41000000 -80033F24 00000000.43B60000 -80033F2C 42B40000.00000000 -80033F34 987298CB.00000000 -80033F3C C0400000.43330000 - -Proximity Mines -[ Mine\(Proximity)] -[Proximity Mine\proximity mine] -80033F44 8003CAA0.800538C4 -80033F4C 00000000.800330D4 -80033F54 9802980D.41000000 -80033F5C 00000000.43B60000 -80033F64 42B40000.00000000 -80033F6C 985D98BB.00000000 -80033F74 C0400000.43330000 - -Remote Mines -[ Mine\(Remote)] -[Remote Mine\remote mine] -80033F7C 8003CA80.800538D4 -80033F84 00000000.80033144 -80033F8C 9807980E.41000000 -80033F94 00000000.43B60000 -80033F9C 42B40000.00000000 -80033FA4 986098BE.00000000 -80033FAC C0400000.43330000 - -Detonator -[\Detonator] -[Detonator\detonator] -80033FB4 8003CAE0.800538E4 -80033FBC 00000000.800331B4 -80033FC4 9883982E.42A40000 -80033FCC 00000000.45329000 -80033FD4 00000000.42B40000 -80033FDC 982E989B.00000000 -80033FE4 C2200000.44ACE000 - -Taser -[\Taser] -[Taser\taser] -80033FEC 8003CA60.800538F0 -80033FF4 00000000.80033224 -80033FFC 9883986F.42D60000 -80034004 42440000.440E0000 -8003400C 00000000.00000000 -80034014 986F98C9.42800000 -8003401C 42A00000.43A68000 - -Tank -[\Tank] -[Tank\tank] -80034024 00000000.00000000 -8003402C 00000000.80033294 -80034034 9883986E.41A00000 -8003403C 42C20000.4410C000 -80034044 00000000.00000000 -8003404C 986E98C8.42BC0000 -80034054 40000000.43B20000 - -Bombcase -[\Bomb Case] -[Bomb Case\bomb case] -8003405C 8003CC40.800538F8 -80034064 00000000.80033304 -8003406C 9883981A.41800000 -80034074 00000000.440E0000 -8003407C 00000000.42B40000 -80034084 981A988A.00000000 -8003408C C1000000.43A18000 - -Plastique -[\Plastique] -[Plastique\plastique] -80034094 8003D0E0.80053904 -8003409C 00000000.80033374 -800340A4 9883985B.41E00000 -800340AC 00000000.4484C000 -800340B4 42A00000.42B40000 -800340BC 985B98B7.00000000 -800340C4 C1800000.4438C000 - -Flare Pistol -[\Flare Pistol] -[Flare Pistol\flare pistol] -800340CC 8003CC60.80053910 -800340D4 00000000.800333E4 -800340DC 98839834.00000000 -800340E4 00000000.447A0000 -800340EC 00000000.00000000 -800340F4 9834989F.00000000 -800340FC 00000000.447A0000 - -Piton Gun -[\Piton Gun] -[Piton Gun\piton gun] -80034104 8003CC80.80053920 -8003410C 00000000.80033454 -80034114 98839859.00000000 -8003411C 00000000.447A0000 -80034124 00000000.00000000 -8003412C 985998B5.00000000 -80034134 00000000.447A0000 - -Bungee -[\Bungee] -[Bungee\bungee] -8003413C 8003CD20.8005392C -80034144 00000001.00000000 -8003414C 9883981F.00000000 -80034154 00000000.447A0000 -8003415C 00000000.00000000 -80034164 981F988F.00000000 -8003416C 00000000.447A0000 - -Door Decoder -[\Door Decoder] -[Door Decoder\door decoder] -80034174 8003CD40.80053938 -8003417C 00000001.00000000 -80034184 98839830.41400000 -8003418C 00000000.43B60000 -80034194 42B40000.42B40000 -8003419C 9830989C.00000000 -800341A4 C0C00000.43470000 - -Bomb Defuser -[\Bomb Defuser] -[Bomb Defuser\bomb defuser] -800341AC 8003CD60.80053948 -800341B4 00000001.00000000 -800341BC 9883981B.41600000 -800341C4 00000000.43BD8000 -800341CC 42B40000.42B40000 -800341D4 981B988B.00000000 -800341DC 00000000.438B8000 - -Camera -[\Camera] -[Camera\camera] -800341E4 8003CDC0.80053958 -800341EC 00000000.80033684 -800341F4 98839820.40800000 -800341FC 00000000.43430000 -80034204 41A00000.42B40000 -8003420C 98209890.00000000 -80034214 C0000000.43100000 - -Lock Exploder -[\Lock Exploder] -[Lock Exploder\lock exploder] -8003421C 8003CDE0.80053964 -80034224 00000001.00000000 -8003422C 9883984A.00000000 -80034234 00000000.447A0000 -8003423C 00000000.00000000 -80034244 984A98AE.00000000 -8003424C 00000000.447A0000 - -Door Exploder -[\Door Exploder] -[Door Exploder\door exploder] -80034254 8003CE00.80053974 -8003425C 00000001.00000000 -80034264 98839831.00000000 -8003426C 00000000.447A0000 -80034274 00000000.00000000 -8003427C 9831989D.00000000 -80034284 00000000.447A0000 - -Briefcase -[\Briefcase] -[Briefcase\briefcase] -8003428C 8003D0A0.80053984 -80034294 00000001.00000000 -8003429C 9883981C.41800000 -800342A4 00000000.440E0000 -800342AC 00000000.42B40000 -800342B4 981C988C.00000000 -800342BC C1000000.43A18000 - -Weapon Case -[\Weapon Case] -[Weapon Case\weapon case] -800342C4 8003CE40.80053990 -800342CC 00000001.00000000 -800342D4 98839880.41800000 -800342DC 00000000.440E0000 -800342E4 00000000.42B40000 -800342EC 988098D5.00000000 -800342F4 C1000000.43A18000 - -Safecracker Case -[\Safecracker] -[Safecracker Case\safecracker] -800342FC 8003CDA0.800539A0 -80034304 00000001.00000000 -8003430C 98839863.41800000 -80034314 00000000.440E0000 -8003431C 00000000.42B40000 -80034324 986298C0.00000000 -8003432C C1000000.43A18000 - -Key Analyser Case -[\Key Analyser] -[Key Analyser Case\key analyser] -80034334 8003CE20.800539B4 -8003433C 00000001.00000000 -80034344 98839844.41800000 -8003434C 00000000.440E0000 -80034354 00000000.42B40000 -8003435C 984398A9.00000000 -80034364 C1000000.43A18000 - -Bug -[\Bug] -[Bug\bug] -8003436C 8003CEC0.800539C8 -80034374 00000000.800334C4 -8003437C 9883981E.41800000 -80034384 00000000.44004000 -8003438C 00000000.42B40000 -80034394 981E988E.00000000 -8003439C C0C00000.43C18000 - -Microcamera -[\Micro Camera] -[Micro Camera\micro camera] -800343A4 8003CEE0.800539D0 -800343AC 00000000.80033534 -800343B4 9883984E.41000000 -800343BC 00000000.439B0000 -800343C4 00000000.43870000 -800343CC 984E98B0.00000000 -800343D4 C1000000.43650000 - -Bug Detector -[\Bug Detector] -[Bug Detector\bug detector] -800343DC 8003CD80.800539E0 -800343E4 00000001.00000000 -800343EC 9883981D.00000000 -800343F4 00000000.447A0000 -800343FC 00000000.00000000 -80034404 981D988D.00000000 -8003440C 00000000.447A0000 - -Explosive Floppy -[\Guidance Data] -[Guidance Data\guidance data] -80034414 8003CF00.800539F0 -8003441C 00000001.00000000 -80034424 98839833.41400000 -8003442C 00000000.43A80000 -80034434 00000000.42B40000 -8003443C 9833989E.00000000 -80034444 C0800000.43300000 - -Polarized Glasses -[\Polarized Glasses] -[Polarized Glasses\polarized glasses] -8003444C 8003CF40.80053A04 -80034454 00000001.00000000 -8003445C 9883985C.40000000 -80034464 00000000.43370000 -8003446C 41700000.42B40000 -80034474 985C98B8.00000000 -8003447C 00000000.43130000 - -Dark Glasses -[\Dark Glasses] -[Dark Glasses\dark glasses] -80034484 8003CF80.80053A18 -8003448C 00000001.00000000 -80034494 9883982B.00000000 -8003449C 00000000.447A0000 -800344A4 00000000.00000000 -800344AC 982B9897.00000000 -800344B4 00000000.447A0000 - -Credit Card -[\Credit Card] -[Credit Card\credit card] -800344BC 8003CF60.80053A28 -800344C4 00000001.00000000 -800344CC 98839827.00000000 -800344D4 00000000.447A0000 -800344DC 00000000.00000000 -800344E4 98279894.00000000 -800344EC 00000000.447A0000 - -Gas Keyring -[\Gas Keyring] -[Gas Keyring\gas keyring] -800344F4 8003D060.80053A38 -800344FC 00000001.00000000 -80034504 98839835.41D00000 -8003450C 00000000.44404000 -80034514 42B40000.42B40000 -8003451C 983598A0.00000000 -80034524 C1000000.43C18000 - -Datathief -[\Datathief] -[Datathief\datathief] -8003452C 8003D080.80053A48 -80034534 00000001.00000000 -8003453C 9883982D.41800000 -80034544 00000000.43ED0000 -8003454C 42A00000.00000000 -80034554 982D9899.00000000 -8003455C C0C00000.43AF0000 - -Watch Identifier -[Watch\Identifier] -[Watch Identifier\watch identifer] -80034564 8003CFA0.80053A54 -8003456C 00000001.00000000 -80034574 987F9841.42A40000 -8003457C 00000000.45329000 -80034584 00000000.42B40000 -8003458C 987A98D1.00000000 -80034594 C2200000.44ACE000 - -Watch Communicator -[Watch\Communicator] -[\watch communicator] -8003459C 8003CFC0.80053A68 -800345A4 00000001.00000000 -800345AC 987F9823.42A40000 -800345B4 00000000.45329000 -800345BC 00000000.42B40000 -800345C4 987898CF.00000000 -800345CC C2200000.44ACE000 - -Watch Geiger Counter -[Watch\Geiger Counter] -[Watch Geiger Counter\watch geiger counter] -800345D4 8003D000.80053A7C -800345DC 00000001.00000000 -800345E4 987F9836.42A40000 -800345EC 00000000.45329000 -800345F4 00000000.42B40000 -800345FC 987998D0.00000000 -80034604 C2200000.44ACE000 - -Watch Magnet Repel -[Watch\Magnet Repel] -[Watch Magnet Repel\watch magnet repel] -8003460C 8003D020.80053A94 -80034614 00000001.00000000 -8003461C 987F984B.42A40000 -80034624 00000000.45329000 -8003462C 00000000.42B40000 -80034634 987D98D4.00000000 -8003463C C2200000.44ACE000 - -Watch Magnet Attract -[Watch Magnet\Attract] -[Watch Magnet Attract\watch magnet attract] -80034644 8003D040.80053AA8 -8003464C 00000000.800335A4 -80034654 987E9813.42A00000 -8003465C 00000000.453DC000 -80034664 00000000.42B40000 -8003466C 987C98D3.00000000 -80034674 C2200000.44ACE000 - -Goldeneye Key -[\GoldenEye Key] -[GoldenEye Key\goldeneye key] -8003467C 8003CF20.80053AC0 -80034684 00000000.80033614 -8003468C 9883983A.41900000 -80034694 00000000.440C0000 -8003469C 42A00000.00000000 -800346A4 983A98A4.00000000 -800346AC C0800000.439B0000 - -Black Box -[\Blackbox] -[Blackbox\blackbox] -800346B4 8003D0C0.80053AD0 -800346BC 00000001.00000000 -800346C4 98839817.41900000 -800346CC 00000000.44084000 -800346D4 00000000.42B40000 -800346DC 98179887.00000000 -800346E4 C1000000.43BE0000 - -Circuitboard -[\Circuit Board] -[Circuit Board\circuit board] -800346EC 8003D220.80053ADC -800346F4 00000001.00000000 -800346FC 98839821.41A00000 -80034704 00000000.440E0000 -8003470C 42A00000.00000000 -80034714 98219891.00000000 -8003471C 00000000.43C50000 - -Clipboard -[\Clipboard] -[Clipboard\clipboard] -80034724 8003D120.80053AEC -8003472C 00000001.00000000 -80034734 98839822.42200000 -8003473C 00000000.448FE000 -80034744 42A00000.42B40000 -8003474C 98229892.00000000 -80034754 C1A00000.44110000 - -Stafflist -[\Staff List] -[Staff List\staff list] -8003475C 8003D140.80053AF8 -80034764 00000001.00000000 -8003476C 9883986C.42300000 -80034774 00000000.449F4000 -8003477C 42A00000.42B40000 -80034784 986C98C7.00000000 -8003478C C1800000.442A4000 - -Dossier Red -[\Red Dossier] -[Red Dossier\red dossier] -80034794 8003D160.80053B04 -8003479C 00000001.00000000 -800347A4 9883985F.42180000 -800347AC 00000000.44878000 -800347B4 43AF0000.42B40000 -800347BC 985F98BD.00000000 -800347C4 C1400000.44110000 - -Plans -[\Plans] -[Plans\plans] -800347CC 8003D1C0.80053B14 -800347D4 00000001.00000000 -800347DC 9883985A.41900000 -800347E4 00000000.43E80000 -800347EC 43AF0000.42B40000 -800347F4 985A98B6.00000000 -800347FC C0000000.437D0000 - -Spy File -[\Spy File] -[Spy File\spy file] -80034804 8003D1E0.80053B1C -8003480C 00000001.00000000 -80034814 9883986A.00000000 -8003481C 00000000.447A0000 -80034824 00000000.00000000 -8003482C 986A98C5.00000000 -80034834 00000000.447A0000 - -Blueprints -[\Blueprints] -[Blueprints\blueprints] -8003483C 8003D200.80053B28 -80034844 00000001.00000000 -8003484C 98839818.41900000 -80034854 00000000.4410C000 -8003485C 43AF0000.42B40000 -80034864 98189888.00000000 -8003486C C1000000.43B60000 - -Map -[\Map] -[Map\map] -80034874 8003D240.80053B38 -8003487C 00000001.00000000 -80034884 9883984D.41900000 -8003488C 00000000.4410C000 -80034894 43AF0000.42B40000 -8003489C 984D98AF.00000000 -800348A4 C0C00000.43B60000 - -Audio Tape -[\Audio Tape] -[Audio Tape\audio tape] -800348AC 8003D180.80053B40 -800348B4 00000001.00000000 -800348BC 98839814.41800000 -800348C4 00000000.43D60000 -800348CC 42B40000.42B40000 -800348D4 98149885.00000000 -800348DC C0000000.43920000 - -Video Tape -[\Video Tape] -[Video Tape\video tape] -800348E4 8003D100.80053B4C -800348EC 00000001.00000000 -800348F4 98839877.41D00000 -800348FC 00000000.443C4000 -80034904 42B40000.00000000 -8003490C 987798CE.00000000 -80034914 C1000000.43C58000 - -DAT -[\Dat Tape] -[Dat Tape\dat tape] -8003491C 8003D1A0.80053B58 -80034924 00000001.00000000 -8003492C 9883982C.41600000 -80034934 00000000.43C18000 -8003493C 42B40000.42B40000 -80034944 982C9898.00000000 -8003494C 00000000.436E0000 - -Spool Tape -[\Spool Tape] -[Spool Tape\spool tape] -80034954 8003D260.80053B64 -8003495C 00000001.00000000 -80034964 98839869.00000000 -8003496C 00000000.447A0000 -80034974 00000000.00000000 -8003497C 986998C4.00000000 -80034984 00000000.447A0000 - -Microfilm -[\Microfilm] -[Microfilm\microfilm] -8003498C 8003D280.80053B70 -80034994 00000001.00000000 -8003499C 98839850.00000000 -800349A4 00000000.447A0000 -800349AC 00000000.00000000 -800349B4 985098B2.00000000 -800349BC 00000000.447A0000 - -Microcode -[\Microcode] -[Microcode\microcode] -800349C4 8003D2A0.80053B7C -800349CC 00000001.00000000 -800349D4 9883984F.00000000 -800349DC 00000000.447A0000 -800349E4 00000000.00000000 -800349EC 984F98B1.00000000 -800349F4 00000000.447A0000 - -Lectre -[\Lectre] -[Lectre\lectre] -800349FC 8003D2C0.80053B88 -80034A04 00000001.00000000 -80034A0C 98839849.00000000 -80034A14 00000000.447A0000 -80034A1C 00000000.00000000 -80034A24 984998AD.00000000 -80034A2C 00000000.447A0000 - -Money -[\Money] -[Money\money] -80034A34 8003D2E0.80053B94 -80034A3C 00000001.00000000 -80034A44 98839853.00000000 -80034A4C 00000000.447A0000 -80034A54 00000000.00000000 -80034A5C 985398B3.00000000 -80034A64 00000000.447A0000 - -Gold Bar -[\Gold Bar] -[Gold Bar\gold bar] -80034A6C 8003D300.80053B9C -80034A74 00000001.00000000 -80034A7C 98839837.00000000 -80034A84 00000000.447A0000 -80034A8C 00000000.00000000 -80034A94 983798A1.00000000 -80034A9C 00000000.447A0000 - -Heroin -[\Heroine] -[Heroine\heroine] -80034AA4 8003D320.80053BA8 -80034AAC 00000001.00000000 -80034AB4 9883983F.00000000 -80034ABC 00000000.447A0000 -80034AC4 00000000.00000000 -80034ACC 983F98A7.00000000 -80034AD4 00000000.447A0000 - -Keycard -[\Keycard] -[Keycard\keycard] -80034ADC 8003CE60.80053BB4 -80034AE4 00000001.00000000 -80034AEC 98839845.41C00000 -80034AF4 00000000.440B0000 -80034AFC 42A00000.42B40000 -80034B04 984598AA.00000000 -80034B0C C0C00000.43CD8000 - -Yale Key -[\Yale Key] -[Yale Key\yale key] -80034B14 8003CE80.80053BC0 -80034B1C 00000001.00000000 -80034B24 98839881.42800000 -80034B2C 00000000.44EF0000 -80034B34 43820000.42B40000 -80034B3C 988198D6.00000000 -80034B44 C1900000.44C40000 - -Bolt Key -[\Bolt Key] -[Bolt Key\bolt key] -80034B4C 8003CEA0.80053BCC -80034B54 00000001.00000000 -80034B5C 98839819.429C0000 -80034B64 00000000.455BE000 -80034B6C 42A00000.42B40000 -80034B74 98199889.00000000 -80034B7C C1400000.45216000 - -Left Suit Hand -[\Suit_lf_hand] -[\] -80034B84 8003D930.80053BD8 -80034B8C 00000000.800336F4 -80034B94 9883986D.00000000 -80034B9C 00000000.447A0000 -80034BA4 00000000.00000000 -80034BAC 98839883.41200000 -80034BB4 41200000.447A0000 - -Joypad -[\Controller] -[\] -80034BBC 8003CBE0.80053BE8 -80034BC4 00000000.80033764 -80034BCC 98839824.00000000 -80034BD4 00000000.447A0000 -80034BDC 00000000.00000000 -80034BE4 98839883.41200000 -80034BEC 41200000.447A0000 - - -[\Null] -[\] -80034BF4 00000000.00000000 -80034BFC 00000000.800337D4 -80034C04 98839854.00000000 -80034C0C 00000000.447A0000 -80034C14 00000000.00000000 -80034C1C 98839883.41200000 -80034C24 41200000.447A0000 - - -[\Null] -[\] -80034C2C 00000000.00000000 -80034C34 00000000.80033844 -80034C3C 98839854.00000000 -80034C44 00000000.447A0000 -80034C4C 00000000.00000000 -80034C54 98839883.41200000 -80034C5C 41200000.447A0000 - -flag -[\Token] -[Token\token] -80034C64 00000000.00000000 -80034C6C 00000000.800338B4 -80034C74 98839873.41400000 -80034C7C 00000000.44040000 -80034C84 42A00000.00000000 -80034C8C 987398CC.00000000 -80034C94 C0800000.439B0000 - -EOF -80034C9C 00000000.00000000 -80034CA4 00000000.00000000 -80034CAC 00000000.00000000 -80034CB4 00000000.00000000 -80034CBC 00000000.3F000000 -80034CC4 41000000.00000000 -80034CCC 00000000.00000000 diff --git a/notes/GE Documentation/Objects and Attributes/weapons/weapon statistics bitflags.txt b/notes/GE Documentation/Objects and Attributes/weapons/weapon statistics bitflags.txt deleted file mode 100644 index 9b6aa73..0000000 --- a/notes/GE Documentation/Objects and Attributes/weapons/weapon statistics bitflags.txt +++ /dev/null @@ -1,92 +0,0 @@ -0x0 4 [float] -0x4 4 [float] position horizontally from center of screen -0x8 4 [float] position vertically from center of screen -0xC 4 [float] position from player's viewport; -depth places in view -0x10 4 [float] elevating movement speed -0x14 4 [float] decending movement speed -0x18 4 [float] horizontal movement speed -0x1C 4 ammo type -0x20 2 ammo on clip -0x22 1 shot delay (1-255) -0x23 1 time b/w shots -0x24 1 # piercable objects -0x25 1 -0x26 2 firing SE -0x28 4 p->object model header -0x2C 4 [float] damage -0x30 4 [float] inaccuracy -0x34 4 [float] zoom -0x38 4 [float] -0x3C 4 [float] -0x40 4 [float] -0x44 1 -0x45 1 -0x46 1 -0x47 1 -0x48 4 [float] -0x4C 4 [float] recoil -0x50 4 [float] -0x54 4 [float] volume per round fired -0x58 4 [float] maximum volume -0x5C 4 [float] -0x60 4 [float] -0x64 4 [float] -0x68 4 [float] -0x6C 4 weapon bitflags - 00400000 no ammo clip/reloads - draw straight from ammo supply (right of icon) - 00200000 limit ammo to assigned value on clip - 00100000 capable of doubles - 00080000 do not display ammo on-screen - 00040000 - 00020000 - 00010000 count hits in player statistics - 00008000 can not crouch - 00004000 hide 1st person model in menu - 00002000 hide 1st person model in hand - 00001000 - 00000800 display 1st person model - 00000400 mirror double weapon, not copy - 00000200 hold up as weapon. untoggle for gadgets - 00000100 hold like pistol, not rifle - 00000080 - 00000040 - 00000020 - 00000010 - 00000008 auto-aim capable - 00000004 fire three-round burst - 00000002 skip from fire to reload animation; item "disappears" after use, redrawn from off-screen - 00000001 - - -samples: -00000110 Nothing, Left Hand, Joypad, NULL1, NULL2 -00064D91 Unarmed -00160D91 Hunting Knives -00560D83 Throwing Knives -00170FB9 PP7, PP7 (sil), DD44, Magnum, Silver PP7, Gold PP7 -00170B79 Klobb -00171A7C KF7, AR33 -00171B79 ZMG -00171A79 D5K, D5K (sil), Phantom -00171A78 RC-P90 -00170AF9 Shotgun, Autoshotgun -00178A70 Sniper Rifle -00170F99 Golden Gun -00170B99 Laser -00600F91 Watch Laser -00120AF1 Grenade Launcher -00120FF1 Rocket Launcher -00422982 Grenades -00422D82 Timed Mines, Proximity Mines, Remote Mines -00000890 Detonator -00620F70 Taser -00076781 Tank -00402D82 Briefcase Bomb -00422D82 Plastique -00000AF1 Flare Pistol, Piton Gun -00402982 Bug, Micro Camera -00602980 Watch Magnet Attract -00482982 GoldenEye Key -0000A990 Camera -00082182 Token - diff --git a/notes/GE Documentation/Operation MonkeyWrench Documention/Default Text Bank Fix.txt b/notes/GE Documentation/Operation MonkeyWrench Documention/Default Text Bank Fix.txt deleted file mode 100644 index f808880..0000000 --- a/notes/GE Documentation/Operation MonkeyWrench Documention/Default Text Bank Fix.txt +++ /dev/null @@ -1,7 +0,0 @@ - 7F0C15E0 returns the text bank # for a given stage# A0. Any stage lacking a specific bank will loop endlessly. This only applies to hacked stages, including Citadel. - - Technically the Citadel correction was a matter of giving it a valid bank pointer and its assigned number, but this patch is more generic. It should default to Bunker I's text bank, as the default stage is Bunker I. All invalids become valid. - -//7F0C16DC: F620C default text bank -2402001E *ADDIU V0,R0,001E - NOP diff --git a/notes/GE Documentation/Operation MonkeyWrench Documention/Explosion staggering fix.txt b/notes/GE Documentation/Operation MonkeyWrench Documention/Explosion staggering fix.txt deleted file mode 100644 index 72e878b..0000000 --- a/notes/GE Documentation/Operation MonkeyWrench Documention/Explosion staggering fix.txt +++ /dev/null @@ -1,202 +0,0 @@ -Note: utilizes "remote mine fix" - -7F09C250 needs to return V0=0 on fail, V0=1 on success - On success, the return can be shifted and ORed to remove the detonated object. - There's only two fail points, then handle B*L to return. - Oh, since the only things that use this are the ones that require the 0x4 flag, just having a TRUE return =4 - -7F09C250 D0D80 generates explosions and smoke at location -//7F09C2DC: D0E0C loop until all entries tested - ADDIU V0,V0,03E0 ;V0+=0x3E0: next entry - SLTI AT,V0,1740 ;TRUE if offset<0x1740 six entries total - BNE AT,R0,7F09C2C8 ;loop until all entries tested - ADDIU V1,V1,03E0 ;V1+=3E0: p->next entry -51000128 *BEQL T0,R0,7F09C790 ;return if NULL pointer -00001025 *OR V0,R0,R0 -//7F09C2F4: play sound effect -//7F09C348: D0E78 this returns okay, since out-of-room explosions are heard but not seen! -10E00110 *BEQ A3,R0,7F09C78C ;return if NULL pos.data - LW A2,0060 (SP) ;A2=SP+60: p->room# list -//7F09C620: D1150 multiplayer-specific - JAL 7F09A464 ;V0=# players - NOP - SLTI AT,V0,0002 -14200057 *BNE AT,R0,7F09C78C ;return if solo - OR A2,R0,R0 ;A2=0 offset -//7F09C784: D12B4 - ADDIU A2,A2,0660 -14DFFFB3 *BNE A2,RA,7F09C654 -24020001 *ADDIU V0,R0,0001 -//7F09C790: return - -force 7F043B7C to do the shifting, as it is exclusively called by routine requiring it. -//7F043D5C: 7888C return - LW RA,002C (SP) - LW S0,0028 (SP) - ADDIU SP,SP,0060 - JR RA -00021080 *SLL V0,V0,0x2 - - -Gotta catch 'em all! -calls to 7F09C250: -7F03B934 70464 hit impact - no modification necessary - hit impact allowed to fail - may want to skip multiplayer to increase explosion success -7F043B7C 786AC generate explosion at object position - no modification necessary - test for uses; will return V0 -7F046244 7AD74 general destroyed object - forces explosion type 14 - may only destroy... -7F04CE0C 8193C ??? - object explosion related - only removes conditionally, edit probably not necessary -7F07B080 AFBB0 during death/respawn, probably when vehicle blows under you - no modification necessary -7F084360 B8E90 - forces explosion type 12; hopefully won't need return, would require huge rewrite! - -calls to 7F043B7C: -all within "handles thrown explosive detonation" -7F043DC0 788F0 - replace ORI -7F043E4C 7897C - replace ORI -7F043EA0 789D0 - replace ORI -7F043EDC 78A0C - replace ORI -7F043F70 78AA0 - replace ORI -7F04403C 78B6C - ORI, timer set at branch -7F044078 78BA8 - ORI, timer set at branch -7F044098 78BC8 - ORI, timer -7F0441C8 78CF8 - ORI, timer - -7F043D70 788A0 handle explosive objects -//7F043DA8: 788D8 ammo clips - LW T7,0008 (A3) ;T7=obj.data+8= 1st bitflag field - LW A0,0020 (SP) ;A0=p->pos.data - ADDIU A1,R0,000C - SLL T8,T7,0x3 ;T8=flags.1*8: test for 10000000 - BGEZL T8,7F0441F4 ;return if 10000000 not set - LW RA,0014 (SP) - JAL 7F043B7C ;generate explosion at object position - SW A3,001C (SP) ;SP+1C= p->obj.data - LW A3,001C (SP) ;A3=p->obj.data - LW T9,0064 (A3) ;T9=obj.data+64= runtime flags -03224025 *OR T0,T9,V0 ;flags.run | 4: ??? - BEQ R0,R0,7F0441F0 ;return - SW T0,0064 (A3) ;update flags.run -//7F043DDC: collectable item -//7F043E04: grenades -//7F043E4C: 7897C detonate - JAL 7F043B7C - SW A3,001C (SP) ;SP+1C=A3: p->obj.data - LW A3,001C (SP) ;A3=p->obj.data - LW T7,0064 (A3) ;T7=obj.data+64: flags.run -01E2C025 *OR T8,T7,V0 ;flags.run | 4 - BEQ R0,R0,7F0441F0 - SW T8,0064 (A3) ;update flags -//7F043E68: beta item 0x56 -//7F043EA0: 789D0 detonate - JAL 7F043B7C - SW A3,001C (SP) - LW A3,001C (SP) ;A3=p->obj.data - LW T2,0064 (A3) ;T2=obj.data+64: flags.run -01425825 *OR T3,T2,V0 ;flags.run | 4 - BEQ R0,R0,7F0441F0 - SW T3,0064 (A3) ;update flags -//7F043EC0: plastique -//7F043EE4: 78A14 -104000C2 *BEQ V0,R0,7F0441F0 ;branch if didn't blow -24040002 ADDIU A0,R0,0002 ;A0=clock lock 2: plastique -0FC15858 JAL 7F056160 ;set clock lock A0 -00002825 OR A1,R0,R0 ;A1=set lock -0FC22FF1 JAL 7F08BFC4 ;trigger explosions around players -24040078 -ADDIU A0,R0,0078 ;A0=explosion delay: 120 -8FA7001C -LW A3,001C (SP) ;A3=p->obj.data -8CED0064 -LW T5,0064 (A3) ;T5=obj.data+64: flags.run -35AE0004 -ORI T6,T5,0004 ;T6= flags.run | 4 -100000B9 *BEQ R0,R0,7F0441F0 -ACEE0064 -SW T6,0064 (A3) ;update flags -//7F043F10: timed explosives -//7F043F24: timed mines/bombcase -//7F043F78: 78AA8 detonate -1040009D *BEQ V0,R0,7F0441F0 - LW A3,001C (SP) ;p->obj.data - ADDIU T2,R0,FFFF -A4EA0082 *SH T2,0082 (A3) ;-1 -> timer - LW T3,0064 (A3) ;T3=obj.data+64: flags.run - ORI T4,T3,0004 ;T4=flags.run | 4 - BEQ R0,R0,7F0441F0 - SW T4,0064 (A3) ;update flags -//7F043F98: handle triggered remote mines - ADDIU AT,R0,001D ;AT=1D: remote mines - BNEL V1,AT,7F0440C4 ;branch if not remotes - ADDIU AT,R0,001C - LUI V1,8003 - LW V1,0AF4 (V1) ;V1=80030AF4: remote mine trigger - LUI T0,8005 -1060000C *BEQ V1,R0,7F043FE4 ;branch if players didn't trigger theirs - LH V0,0082 (A2) -0440008D +BLTZ V0,7F0441F0 ;return if timer at -1 -8CE20064 LW V0,0064 (A3) ;V0=obj.data+64: flags.run -3C010006 LUI AT,0006 -240F0001 ADDIU T7,R0,0001 -00416824 AND T5,V0,AT ;T5=flags.run & 00060000: player ownership flags -000D7442 SRL T6,T5,0x11 ;T6=flags / 0x20000 -01CFC004 SLLV T8,T7,T6 ;T8=1<bitmask -0078C824 AND T9,V1,T8 ;T9= mine reg & ownership: TRUE if detonated mine -57200001 *BNEL T9,R0,+1 ;set as detonated if triggered - SH R0,0082 (A2) ;0->timer -//7F043FE0: decrement timer but ensure not < 0 (not sure if this would alter detonation) -//7F044018: determine explosion radius -//7F044048: 78B78 -10000015 *BEQ R0,R0,7F0440A0 - LW A3,001C (SP) ;A3=p->pos.data -//7F044050: normal explosions -//7F044084: 78BB4 -10000006 *BEQ R0,R0,7F0440A0 - LW A3,001C (SP) -//7F04408C: normal explosions -//7F0440A0: 78BD0 update timer and flags -10400053 *BEQ V0,R0,700441F0 ;branch if no explosion occured - LW A3,001C (SP) ;A3=p->obj.data Likelies skip this OP - ADDIU T6,R0,FFFF -A4EE0082 *SH T6,0082 (A3) ;-1 -> timer - LW T7,0064 (A3) ;T7=flags.run - ORI T8,T7,0004 ;flags.run | 4 - BEQ R0,R0,7F0441F0 - SW T8,0064 (A3) ;update flags -//7F0440C0: proximity mines -//7F044120: primed proximity mine -//7F044198: -//7F0441B4: 78CE4 -05C20001 *BLTZL T6,7F0441BC ;branch if 80000000 not set: large explosions -24050011 -ADDIU A1,R0,0011 -//7F0441BC: 78CEC detonate -AFA60018 -SW A2,0018 (SP) -0FC10EDF -JAL 7F043B7C ;generate explosion at object position -AFA7001C -SW A3,001C (SP) -//7F0441C8: 78CF8 fix -8FA40018 -LW A0,0018 (SP) -240F0001 *ADDIU T7,R0,0001 -50400007 *BEQL V0,R0,7F0441F0 ;branch if unsuccessful -A48F0082 *SH T7,0082 (A0) -240FFFFF ADDIU T7,R0,FFFF -A48F0082 SH T7,0082 (A0) ;-1 -> timer -8C980064 *LW T8,0064 (A0) ;T8=flags.run -37190004 ORI T9,T8,0004 ;flags.run | 4 -0FC146E5 JAL 7F051B94 ;remove proxy entry -AC990064 *SW T9,0064 (A0) ;update flags -//7F0441F0: return - LW RA,0014 (SP) - ADDIU SP,SP,0020 - JR RA - NOP - \ No newline at end of file diff --git a/notes/GE Documentation/Operation MonkeyWrench Documention/Remote Mine Timer Fix.txt b/notes/GE Documentation/Operation MonkeyWrench Documention/Remote Mine Timer Fix.txt deleted file mode 100644 index 218a511..0000000 --- a/notes/GE Documentation/Operation MonkeyWrench Documention/Remote Mine Timer Fix.txt +++ /dev/null @@ -1,23 +0,0 @@ -Fix: timers at -1 do not detonate. -Remote mines ignore timers. As a side effect, can detonate stray remotes as player 1 and re-detonate mines not removed. -Note: should NSNA rewrite the whole thing, decreasing timers on all collectables globally. Not that remotes even need timers, since these are ignored. - -Future: stagger explosions via setting flag only when explosion routine returns TRUE - -Fix: timers at -1 do not detonate -//7F043FA4: 78AD4 handle triggered remote mines - LUI V1,8003 - LW V1,0AF4 (V1) ;V1=80030AF4: remote mine trigger - LUI T0,8005 -1060000C *BEQ V1,R0,7F043FE4 ;branch if players didn't trigger theirs - LH V0,0082 (A2) -0440008D +BLTZ V0,7F0441F0 ;return if timer at -1 -8CE20064 LW V0,0064 (A3) ;V0=obj.data+64: flags.run -3C010006 LUI AT,0006 -240F0001 ADDIU T7,R0,0001 -00416824 AND T5,V0,AT ;T5=flags.run & 00060000: player ownership flags -000D7442 SRL T6,T5,0x11 ;T6=flags / 0x20000 -01CFC004 SLLV T8,T7,T6 ;T8=1<bitmask -0078C824 AND T9,V1,T8 ;T9= mine reg & ownership: TRUE if detonated mine -57200001 *BNEL T9,R0,+1 ;set as detonated if triggered - SH R0,0082 (A2) ;0->timer diff --git a/notes/GE Documentation/Other WIPs/21990 other.txt b/notes/GE Documentation/Other WIPs/21990 other.txt deleted file mode 100644 index c33f36e..0000000 --- a/notes/GE Documentation/Other WIPs/21990 other.txt +++ /dev/null @@ -1,454 +0,0 @@ -BBB0 table: 0x2C each entry - Unsure what this does. Might even be part of debug for all I know - Never threw a breakpoint in the first 0x200... - -- - -C0B0 table: 0x1C each entry - Add +802AF4C0 to all offset values for runtime pointers - animation table. -0x0 4 [float] -0x4 4 [float] -0x8 4 [float] -0xC 4 [float] -0x10 4 [float] -0x14 4 offset in animation binary -0x18 4 flag: 0,1,2 - -- - -A870 intro table: 0x14 each entry -0x0 4 body -0x4 4 head (-1=internal, FFFFFF9F=random) -0x8 2 string 1 -0xA 2 string 2 -0xC 2 string 3 -0xE 2 unused -0x10 4 flag (1 indicates only on extended intro) - -8002B5E8 current entry in table - only 3 text values - final is NULL - -++++++++++ -8002B5E8 current entry -8002B5EC current animation -8002B5F0 # random animations -8002B5F4 current head? -8002B5F8 -8002B5FC 1 indicates in credits (not intro) mode -8002B600 character intro list -8002B8BC random intro animation table -8002BA2C -8002BA30 -8002BA34 -8002BA38 random rifles -8002BA50 random pistols - -8002CD00 # random bodies -8002CD04 # random male heads -8002CD08 # random female heads -8002CD0C random bodies/heads table -8002CE34 current random body -8002CE38 current random male head -8002CE3C current random female head -- - -7F01869C: handle entries in character intros -LUI T6,8003 -LW T6,A950 (T6) T6=8002A950: ??? pointer to something... -ADDIU SP,SP,FF48 -LUI T8,8003 -SW RA,001C (SP) -ADDIU T8,T8,BA2C T8=8002BA2C: three blank words prior to random rifles... -SW T6,00B4 (SP) -LW AT,0000 (T8) AT=8002BA2C: ??? -ADDIU T7,SP,00A0 -LW T1,0004 (T8) T1=8002BA30: ??? -SW AT,0000 (T7) -LW AT,0008 (T8) AT=8002BA34: ??? -SW T1,0004 (T7) -SW AT,0008 (T7) -//7F0186D4: -JAL 7000A450 V0=rand -SW R0,007C (SP) -LUI T3,8003 -LW T3,B5FC (T3) T3=8002B5FC: ??? -ANDI T2,V0,0001 -SW T2,0070 (SP) -BEQ T3,R0,7F018718 -LUI T4,8003 -LW T4,B5E8 (T4) T4=8002B5E8: current entry -BNEZ T4,7F018718 -NOP -//7F018700: -JAL 7000703C -ADDIU A0,R0,7FFF -LUI AT,8002 -SW R0,434C (AT) 0->8002434C -JAL 70006E7C -ADDIU A0,R0,0002 -//7F018718: test if there *are* animations... -LUI A0,8003 -ADDIU A0,A0,B8BC A0=8002B8BC: random intro animation table -SLL T5,R0,0x4 -ADDU T6,A0,T5 -LW T0,0000 (T6) T0: animation value or -1 (ends list) -LUI V1,8003 -ADDIU V1,V1,B5F0 V1=8002B5F0: # random animations -SW R0,0000 (V1) 0->8002B5F0 blank # animations -BLTZ T0,7F018760 -OR V0,R0,R0 -ADDIU T9,V0,0001 -//7F018744: if there are animations, get an accurate count -SLL T7,T9,0x4 -ADDU T8,A0,T7 -LW T1,0000 (T8) T1=animation # -SW T9,0000 (V1) update count -OR V0,T9,R0 -BGEZL T1,7F018744 -ADDIU T9,V0,0001 -//7F018760: -JAL 7000A450 V0=rand -NOP -LUI V1,8003 -ADDIU V1,V1,B5F0 -LW T2,0000 (V1) T2=8002B5F0: # random animations -LUI T4,8003 -LW T4,B5E8 (T4) T4=8002B5E8: current entry -DIVU V0,T2 -MFHI T3 -LUI AT,8003 -SW T3,B5EC (AT) T3=8002B5EC: current animation -LUI T6,8003 -ADDU T5,T5,T4 T5=current entry + skip value? -SLL T5,T5,0x2 -ADDIU T6,T6,B600 T6=8002B600: character intro list -ADDU A0,T5,T6 -LW T0,0000 (A0) T0=body from list -LUI T1,8003 -SLL T8,T7,0x4 -ADDU T1,T1,T8 -//7F0187BC: -LW T9,0004 (A0) head value -LW T1,B8C8 (T1) T1=8002B8C8+: last word (flag) in animation table entry -ADDIU AT,R0,0016 -BNEZ T2,7F0187D4 OK if no animations -NOP -BREAK -//7F0187D4: -SW T0,008C (SP) save body -OR T2,T0,R0 -SW T9,0088 (SP) save head -BNE T0,AT,7F01886C branch if not the bond suit #16 -SW T1,006C (SP) -//7F0187E8-7F01886C random bond lookup -JAL 7000A450 returns V0=random; fries AT,A0,A1,A2,V0 -NOP -ADDIU AT,R0,0005 -DIVU V0,AT -MFHI T3 -SLTIU AT,T3,0005 -BEQ AT,R0,7F0188C0 if some crazy number, skip body and do heads -SLL T3,T3,0x2 -LUI AT,8005 -ADDU AT,AT,T3 -LW T3,1AEC (AT) -JR T3 -NOP -//7F01881C: (1) needless TLB pointer for suit=17 -ADDIU T4,R0,0017 -ADDIU T5,R0,004B -SW T5,0088 (SP) -BEQ R0,R0,7F0188C0 -SW T4,008C (SP) -//7F018830: (2) needless TLB pointer for suit=18 -ADDIU T6,R0,0018 -ADDIU T0,R0,004B -SW T0,0088 (SP) -BEQ R0,R0,7F0188C0 -SW T6,008C (SP) -//7F018844: (3) needless TLB pointer for suit=19 -ADDIU T9,R0,0019 -ADDIU T7,R0,004B -SW T7,0088 (SP) -BEQ R0,R0,7F0188C0 -SW T9,008C (SP) -//7F018858: (4) needless TLB pointer for suit=5, head=4E -ADDIU T8,R0,0005 -ADDIU T1,R0,004E -SW T1,0088 (SP) -BEQ R0,R0,7F0188C0 -SW T8,008C (SP) -//7F01886C: -LW T2,008C (SP) T2=body -ADDIU AT,R0,0010 -LW T5,008C (SP) T5=body -BNEL T2,AT,7F0188A0 test if Nat -ADDIU AT,R0,0009 -//7F018880-7F0188A0 randomly select Jungle or skirt Nat -JAL 7000A450 -NOP -ANDI T3,V0,0001 -BEQ T3,R0,7F0188C0 -ADDIU T4,R0,004F -BEQ R0,R0,7F0188C0 -SW T4,008C (SP) -ADDIU AT,R0,0009 -//7F0188A0: test if trev -BNEL T5,AT,7F0188C4 -LW T9,0088 (SP) T9=head -//7F0188A8-7F0188C4 randomly select boiler or Janus Trev -JAL 7000A450 -NOP -ANDI T6,V0,0001 -BEQ T6,R0,7F0188C0 -ADDIU T0,R0,0008 -SW T0,008C (SP) -//7F0188C0: !do the heads! -LW T9,0088 (SP) -ADDIU AT,R0,FF9F -BNEL T9,AT,7F0188E0 branch if not FF9F... -LW T7,00B4 (SP) -//7F0188D0: -JAL 7F023660 RETURNS V0=very random head -LW A0,008C (SP) A0=body -SW V0,0088 (SP) -LW T7,00B4 (SP) -//7F0188E0: -LUI V0,0003 -ORI V0,V0,1160 -ADDU A0,T7,V0 -ADDIU A0,A0,003F -ORI T8,A0,003F -XORI A0,T8,003F -SW V0,00B0 (SP) -ADDIU A1,R0,01B8 -JAL 7F0D2448: - LUI AT,8005 - SW A0,EB00 (AT) A0=8004EB00: - LUI AT,8009 - SW A1,E310 (AT) A1=8004E310: 0x1B8 - LUI AT,8009 - JR RA - SW A2,E314 (AT) A2=8004E314: 0x14A -ADDIU A2,R0,014A -//7F018908: -LUI A2,0001 -ORI A2,A2,9000 A2=00019000 -ADDIU A0,SP,0090 -JAL 7F0CBAF4: - ADDU V0,A1,A2 V0=pointer+0x19000 - SW A1,0000 (A0) SAVE BASE - SW V0,0004 (A0) SAVE END - SW A1,0008 (A0) SAVE BASE - JR RA - SW V0,000C (A0) SAVE END -LW A1,00B4 (SP) -LW T2,008C (SP) T2=BODY -LUI T4,8004 -LW A2,00B4 (SP) -SLL T3,T2,0x2 -ADDU T3,T3,T2 -LW A3,00B0 (SP) -LUI V1,0001 -SLL T3,T3,0x2 -ADDIU T4,T4,DE10 T4=8003DE10: body/head table -ORI V1,V1,9000 V1=00019000 -ADDU V0,T3,T4 V0=table + offset*0x14 -LW A0,0000 (V0) A0=BODY HEADER -ADDIU T5,SP,0090 -ADDU A2,A2,V1 -SUBU A3,A3,V1 -SW A3,00B0 (SP) -SW A2,00B4 (SP) -SW T5,0010 (SP) -LW A1,0004 (V0) A1=BODY STRING LOOKUP TEXT -SW V0,0024 (SP) SAVE BODY ENTRY POINTER -JAL 7F0764A4 -SW A0,0080 (SP) -//7F018974: -LW V0,0024 (SP) V0=BODY ENTRY -JAL 7F0BD188 -LW A0,0004 (V0) A0=BODY STRING LOOKUP TEXT -ADDIU V1,V0,003F -LW T9,00B0 (SP) -LW T8,00B4 (SP) -ORI T6,V1,003F -//7F018990: -LW T2,0088 (SP) T2=head -XORI T0,T6,003F -SUBU T7,T9,T0 -ADDU T1,T8,T0 -SW T7,00B0 (SP) -BLTZ T2,7F018A18 -SW T1,00B4 (SP) -//7F0189AC: load head, I assume -SLL T3,T2,0x2 -ADDU T3,T3,T2 -LUI T4,8004 -ADDIU T4,T4,DE10 -SLL T3,T3,0x2 -ADDU V0,T3,T4 -LW A0,0000 (V0) -ADDIU T5,SP,0090 -SW T5,0010 (SP) -LW A1,0004 (V0) -SW V0,0024 (SP) -OR A2,T1,R0 -OR A3,T7,R0 -JAL 7F0764A4 -SW A0,007C (SP) -LW V0,0024 (SP) -JAL 7F0BD188 -LW A0,0004 (V0) -ADDIU V1,V0,003F -LW T9,00B0 (SP) -LW T2,00B4 (SP) -ORI T6,V1,003F -XORI T0,T6,003F -SUBU T8,T9,T0 -ADDU T3,T2,T0 -SW T8,00B0 (SP) -SW T3,00B4 (SP) -//7F018A18: -LW A0,008C (SP) A0=body -LW A1,0088 (SP) A1=head -LW A2,0080 (SP) A2=body header? -LW A3,007C (SP) A3=head header? -JAL 7F0234A8 -SW R0,0010 (SP) -//7F018A30: -LUI V1,8003 -ADDIU V1,V1,B5F4 V1=8002BF54: -LUI A1,3DCC -SW V0,0000 (V1) save the returned data pointer -ORI A1,A1,CCCD A1=3DCCCCCD -JAL 7F06CE78: - MTC1 A1,F12 - JR RA - SWC1 F12,0014 (A0) -OR A0,V0,R0 -LW T4,006C (SP) last word of animation - applied weapon sets! -ADDIU AT,R0,0002 -BEQ T4,R0,7F018C40 if weapon value=0, branch -NOP -BNE T4,AT,7F018AC0 if weapon value=1, branch -ADDIU T8,SP,002C -//7F018A64: 2=rifles -LUI T7,8003 -ADDIU T7,T7,BA38 T7=8002BA38: base for random rifles -LW AT,0000 (T7) AT=B8 -LW T6,0004 (T7) T6=BC -ADDIU T1,SP,0054 -SW AT,0000 (T1) -SW T6,0004 (T1) -LW T6,000C (T7) T6=CF -LW AT,0008 (T7) AT=C5 -SW T6,000C (T1) -SW AT,0008 (T1) -LW AT,0010 (T7) AT=B9 -LW T6,0014 (T7) T6=D2 -SW AT,0010 (T1) -JAL 7000A450 V0=rand -SW T6,0014 (T1) -ADDIU AT,R0,0006 -DIVU V0,AT -MFHI T0 -SLL T9,T0,0x2 -ADDU V1,SP,T9 -BEQ R0,R0,7F018B14 -LW V1,0054 (V1) V1=random weapon stored to stack... -//7F018AC0: 1=pistols -LUI T2,8003 -ADDIU T2,T2,BA50 T2=8002BA50: list of pistols -ADDIU T4,T2,0024 T4=endpoint -//7F018ACC: loopus -LW AT,0000 (T2) AT=current -ADDIU T2,T2,000C T2+=C (next 3) -ADDIU T8,T8,000C T8+=C -SW AT,FFF4 (T8) -LW AT,FFF8 (T2) -SW AT,FFF8 (T8) -LW AT,FFFC (T2) -BNE T2,T4,7F018ACC write all to stack... -SW AT,FFFC (T8) -LW AT,0000 (T2) last entry... -JAL 7000A450 V0=rand -SW AT,0000 (T8) -ADDIU AT,R0,000A At=#entries -DIVU V0,AT -MFHI T5 -SLL T1,T5,0x2 T1=rand# -> offset -ADDU V1,SP,T1 -LW V1,002C (V1) V1=random weapon stored to stack -//7F018B14: if magnum, test doubling-up! -ADDIU AT,R0,00BE -BNEL V1,AT,7F018B38 -ADDIU AT,R0,00BB -JAL 7F01EAD0 -SW V1,0084 (SP) -BNEZ V0,7F018B34 -LW V1,0084 (SP) -ADDIU A1,R0,00BF -ADDIU AT,R0,00BB -//7F018B38: if laser, test doubling-up! -BNEL V1,AT,7F018B58 -ADDIU AT,R0,00D0 -JAL 7F01EB20 -SW V1,0084 (SP) -BNEZ V0,7F018B54 -LW V1,0084 (SP) -ADDIU V1,R0,00BF -ADDIU AT,R0,00D0 -//7F018B58: if golden gun, test doubling-up! -BNEL V1,AT,7F018B78 -SLL T7,V1,0x2 -JAL 7F01EB70 -SW V1,0084 (SP) -BNEZ V0,7F018B74 -LW V1,0084 (SP) -ADDIU V1,R0,00BF -SLL T7,V1,0x2 -//7F018B78: load said object -SUBU T7,T7,V1 -LUI T6,8004 -ADDIU T6,T6,A228 -ETC... - -//7F018C40: 0=unarmed; carry on with animation loading - - - -//7F01A28C: third text value -LUI T4,8003 -LW T4,B5E8 (T4) current entry -LUI A0,8003 -OR S3,V0,R0 -SLL T9,T4,0x2 -ADDU T9,T9,T4 -SLL T9,T9,0x2 T9=entry * 0x14 -ADDU A0,A0,T9 -JAL 7F0C1DD8 -LHU A0,B60C (A0) A0=3rd txt ID - - -- -7F0C1DD8: retrieve pointer to text (V0) from text ID (A0) -SRA T6,A0,0xA -SLL T7,T6,0x2 -LUI V0,8009 -ADDU V0,V0,T7 -LW V0,C640 (V0) -ANDI T8,A0,03FF -SLL T9,T8,0x2 -ADDU T0,V0,T9 -LW V1,0000 (T0) -OR A0,R0,R0 -BEQ V1,R0,7F0C1E14 -NOP -ADDU A0,V1,V0 -JR RA -OR V0,A0,R0 -//7F0C1E14: -JR RA -OR V0,A0,R0 diff --git a/notes/GE Documentation/Other WIPs/GS ramrom hardware intercept.txt b/notes/GE Documentation/Other WIPs/GS ramrom hardware intercept.txt deleted file mode 100644 index 1b5f024..0000000 --- a/notes/GE Documentation/Other WIPs/GS ramrom hardware intercept.txt +++ /dev/null @@ -1,62 +0,0 @@ -Oh yeah! Need to code in a hardware intercept for GE. - -6798 "read A2 bytes from hardware A1 to rdram A0" -681C "handles hardware read request" -68B0 "writes A2 bytes of data from A0 to hardware address A1" - -Basics: -1) if an 00F0- address detected, ORI with 80B0- -2) use usual PI I/O catch from original patch - -Trick is to alter the ROM address test to be improper ;*) -70005CF0 68F0 V0=TRUE if A1 not ROM address; fries AT -3C017000 LUI AT,7000 -00A1082B SLTU AT,A1,AT ;TRUE if addy < 70000000 -3C02B000 LUI V0,B000 -00A2102B SLTU V0,A1,V0 ;TRUE if addy < B0000000 -03E00008 JR RA -00411026 XOR V0,V0,AT ;TRUE if normal addy, false if ROM or weird -00000000 NOP -00000000 NOP - -to -70005CE8 68E8 V0=TRUE if A1 not ROM address; fries AT -3C0100F0 LUI AT,00F0 -00A1102B SLTU V0,A1,AT ;TRUE if addy < 00F00000 -00251824 AND V1,AT,A1 -14610002 BNE V1,AT,+2 -3C0180B0 LUI AT,80B0 -00252826 XOR A1,AT,A1 -03E00008 JR RA -38420001 XORI V0,V0,0001 ;TRUE if normal addy, false if ROM or weird - -then change calls in modified PI I/O -0C00173C -> 0C00173A - -70005B98 6798 58 "read A2 bytes from hardware A1 to rdram A0" - 0C00173A AFA40010 10400005 AFA5002C - 0C004E14 00000000 1000000C 2402FFFF - AFA60014 0C0042C8 00C02825 00003025 - 3C048006 249836F0 248436D0 AFB80018 - 00002825 0C003DA8 8FA7002C 8FBF0024 - 03E00008 27BD0028 - -70005C1C 681C 28 "handles hardware read request" - AFBFFFFC 0C0016E4 27BDFFE8 04420004 - 8FBF0014 0C0016FC 00000000 8FBF0014 - 03E00008 27BD0018 - -70005CB0 68B0 38 "writes A2 bytes of data from A0 to hardware address A1" - 0C00173A AFA40010 10400006 AFA5002C - 00802825 0C004E14 8FA4002C 080016F9 - 2402FFFF AFA60014 0C0042F4 00C02825 - 080016F2 24060001 - -70005CE8 68E8 20 "TRUE if A1 not ROM address" - 3C0100F0 00A1102B 00251824 14610002 - 3C0180B0 00252826 03E00008 38420001 - -70005D08 6908 28 "handles hardware write request" - AFBFFFFC 0C00172A 27BDFFE8 04420004 - 8FBF0014 0C0016FC 00000000 8FBF0014 - 03E00008 27BD0018 diff --git a/notes/GE Documentation/Other WIPs/Lets find the 007 options.txt b/notes/GE Documentation/Other WIPs/Lets find the 007 options.txt deleted file mode 100644 index ef020f8..0000000 --- a/notes/GE Documentation/Other WIPs/Lets find the 007 options.txt +++ /dev/null @@ -1,80 +0,0 @@ -part of the routine: - -70319884: bunker i 007 options, from fresh start, nothing else selected -JAL 7F0C1DD8 -ORI A0,R0,9C2A //display text line "Enemy Health" -ADDIU T9,R0,0039 -ADDIU V1,R0,00A4 -ADDIU T8,R0,00C0 -ADDIU T0,R0,0032 -SW V0,0C14 (SP) -SW T9,0C10 (SP) -SW T0,0014 (SP) -SW T8,0010 (SP) -SW V1,0C0C (SP) -OR A0,S0,R0 -ADDIU A1,R0,0037 -ADDIU A2,R0,00B5 -JAL 7F0AD014 -ADDIU A3,R0,0163 // -//703198C4: -LUI AT,8003 -LWC1 F4,A9A4 (AT) -LUI AT,4120 -MTC1 AT,F6 -OR S0,V0,R0 -JAL 7001F7E0 -DIV.S F12,F4,F6 -LUI AT,4396 -MTC1 AT,F8 -LW V1,0C0C (SP) -ADDIU T1,R0,0064 -MUL.S F10,F0,F8 -ADDIU T6,V1,001C -SW T6,0010 (SP) -SW T1,0014 (SP) -OR A0,S0,R0 -ADDIU A1,R0,0037 -ADDIU A2,V1,0011 -TRUNC.W.S F16,F10 -MFC1 A3,F16 -JAL 7F0AD014 -ADDIU A3,A3,0037 -LUI T2,8007 -LW T2,9798 (T2) -OR S0,V0,R0 -BEQ T2,R0,7031995C -NOP -//70319930: - - --------------- -initialization of values probably used for 007 options, IN PART -7F0000080: -MTC1 R0,F4 -LUI AT,8003 -SW V1,A93C (AT) //1->8002A93C -LUI AT,8003 -SWC1 F4,A9A0 (AT) //0.0->8002A9A0 enemy reaction speed (0.0 - 1.0 00000000 3F800000) -LUI AT,8003 -SWC1 F0,A9A4 (AT) //1.0->8002A9A4 enemy health (0.0 - 10.0 00000000 41200000) -LUI AT,8003 -SWC1 F0,A9A8 (AT) //1.0->8002A9A8 enemy damage (0.0 - 10.0 00000000 41200000) -LUI AT,8003 -SWC1 F0,A9AC (AT) //1.0->8002A9AC enemy accuracy (0.0 - 10.0 00000000 41200000) -LUI AT,8003 -SW R0,B5E8 (AT) //0->8002B5E8 -LUI AT,8003 -SW R0,B5EC (AT) //0->8002B5EC -LUI AT,8003 -SW R0,B5F0 (AT) //0->8002B5F0 -LUI AT,8003 -SW R0,B5F4 (AT) //0->8002B5F4 -LUI AT,8003 -SW R0,B5F8 (AT) //0->8002B5F8 -LUI AT,8003 -JR RA -SW R0,B5FC (AT) //0->8002B5FC - - - diff --git a/notes/GE Documentation/Other WIPs/SmartSpawn 1.0 multiregion.txt b/notes/GE Documentation/Other WIPs/SmartSpawn 1.0 multiregion.txt deleted file mode 100644 index 2518272..0000000 --- a/notes/GE Documentation/Other WIPs/SmartSpawn 1.0 multiregion.txt +++ /dev/null @@ -1,249 +0,0 @@ -Note: this is getting replaced through 2.0 revision in rand++ - -v1.0 multiregion GS codes and ASM - -Sets patch: -USA -03A5C0 50 3C01800814020004820F000B100F00033C0280038C42B520144F000F3C0A80078E0800048C229C6800084880012848238D4A5D1800094880012848230009488000026080002C6021012A5821AD8B9C28 - -JAP -03A5E8 50 3C01800814020004820F000B100F00033C0280038C42B560144F000F3C0A80078E0800048C229CD800084880012848238D4A5D5800094880012848230009488000026080002C6021012A5821AD8B9C98 - -PAL -0383E8 50 3C01800714020004820F000B100F00033C0280028C426A70144F000F3C0A80068E0800048C22877800084880012848238D4A4C5800094880012848230009488000026080002C6021012A5821AD8B8738 - - -Sets Codes -USA -81079C70 820F -81079C72 000B -81079C74 100F -81079C76 0004 -81079C78 3C01 -81079C7A 8008 -81079C7C 3C02 -81079C7E 8003 -81079C80 8C42 -81079C82 B520 -81079C84 144F -81079C86 000D -81079C88 8E08 -81079C8A 0004 -81079C8C 8C22 -81079C8E 9C68 -81079C90 3409 -81079C92 002C -81079C94 0109 -81079C96 0019 -81079C98 3C0A -81079C9A 8007 -81079C9C 8D4A -81079C9E 5D18 -81079CA0 0000 -81079CA2 4812 -81079CA4 0002 -81079CA6 6080 -81079CA8 002C -81079CAA 6021 -81079CAC 012A -81079CAE 5821 -81079CB0 AD8B -81079CB2 9C28 -81079CB4 244D -81079CB6 0001 -81079CB8 AC2D -81079CBA 9C68 -81079CBC 0BC0 -81079CBE 1779 -81079CC0 2610 -81079CC2 000C -8104F1AC 7007 -8104F1AE 9C70 - -Jap -81079CE0 820F -81079CE2 000B -81079CE4 100F -81079CE6 0004 -81079CE8 3C01 -81079CEA 8008 -81079CEC 3C02 -81079CEE 8003 -81079CF0 8C42 -81079CF2 B560 -81079CF4 144F -81079CF6 000D -81079CF8 8E08 -81079CFA 0004 -81079CFC 8C22 -81079CFE 9CD8 -81079D00 3409 -81079D02 002C -81079D04 0109 -81079D06 0019 -81079D08 3C0A -81079D0A 8007 -81079D0C 8D4A -81079D0E 5D58 -81079D10 0000 -81079D12 4812 -81079D14 0002 -81079D16 6080 -81079D18 002C -81079D1A 6021 -81079D1C 012A -81079D1E 5821 -81079D20 AD8B -81079D22 9C98 -81079D24 244D -81079D26 0001 -81079D28 AC2D -81079D2A 9CD8 -81079D2C 0BC0 -81079D2E 177A -81079D30 2610 -81079D32 000C -8104F1DC 7007 -8104F1DE 9CE0 - -PAL -81068780 820F -81068782 000B -81068784 100F -81068786 0004 -81068788 3C01 -8106878A 8007 -8106878C 3C02 -8106878E 8002 -81068790 8C42 -81068792 6A70 -81068794 144F -81068796 000D -81068798 8E08 -8106879A 0004 -8106879C 8C22 -8106879E 8778 -810687A0 3409 -810687A2 002C -810687A4 0109 -810687A6 0019 -810687A8 3C0A -810687AA 8006 -810687AC 8D4A -810687AE 4C58 -810687B0 0000 -810687B2 4812 -810687B4 0002 -810687B6 6080 -810687B8 002C -810687BA 6021 -810687BC 012A -810687BE 5821 -810687C0 AD8B -810687C2 8738 -810687C4 244D -810687C6 0001 -810687C8 AC2D -810687CA 8778 -810687CC 0BC0 -810687CE 175A -810687D0 2610 -810687D2 000C -810475FC 7006 -810475FE 8780 - ------------ -jap offset for 03A5D4 -3C0E8007 LUI T6,8007 -8DCE5D58 LW T6,5D58 (T6) //T6=offset to 0xxx preset table -11C00018 BEQ T6,R0,[END] //abort if NULL -00000000 NOP -0FC305A4 JAL 7F0C1690 //returns V0=set number -00000000 NOP -8E0F0008 LW T7,0008 (S0) //T7=set# for spawn -3C0A8007 LUI T2,8007 -3C018008 LUI AT,8008 -144F0011 BNE V0,T7,[END] //branch if set numbers don't match -00000000 NOP -8E080004 LW T0,0004 (S0) //T0=0xxx preset -3C028008 LUI V0,8008 -8C429CD8 LW V0,9CD8 (V0) //V0=spawn counter -00084880 SLL T1,T0,0x2 -01284823 SUBU T1,T1,T0 -8D4A5D58 LW T2,5D58 (T2) //T2=0xxx preset list -00094880 SLL T1,T1,0x2 -01284823 SUBU T1,T1,T0 -00094880 SLL T1,T1,0x2 //T1=preset * 2C (offset) -00026080 SLL T4,V0,0x2 //T4=offset in spawn pointer list -002C0821 ADDU AT,AT,T4 -012A5821 ADDU T3,T1,T2 //T3=address of preset -AC2B9C98 SW T3,9C98 (AT) //save preset address in list -3C018008 LUI AT,8008 -244D0001 ADDIU T5,V0,0001 //count++ -AC2D9CD8 SW T5,9CD8 (AT) //save new count -//[END] -100000C5 BEQ R0,R0,[process next command] -2610000C ADDIU S0,S0,000C //S0=next command - ----------------- -PAL 0383D4 -3C0E8006 LUI T6,8006 -8DCE4C58 LW T6,4C58 (T6) //T6=offset to 0xxx preset table -11C00018 BEQ T6,R0,[END] //abort if NULL pointer -00000000 NOP -0FC2FFA8 JAL 7F0BFEA0 //returns V0=set number -00000000 NOP -8E0F0008 LW T7,0008 (S0) //T7=set# for spawn -3C0A8006 LUI T2,8006 -3C018007 LUI AT,8007 -144F0011 BNE V0,T7,[END] //branch if wrong set -00000000 NOP -8E080004 LW T0,0004 (S0) //T0=preset -3C028007 LUI V0,8007 -8C428778 LW V0,8778 (V0) //V0=spawn counter -00084880 SLL T1,T0,0x2 -01284823 SUBU T1,T1,T0 -8D4A4C58 LW T2,4C58 (T2) -00094880 SLL T1,T1,0x2 -01284823 SUBU T1,T1,T0 -00094880 SLL T1,T1,0x2 //T1=preset * 2C (offset) -00026080 SLL T4,V0,0x2 //T4=offset in spawn list -002C0821 ADDU AT,AT,T4 -012A5821 ADDU T3,T1,T2 //T3=address of preset -AC2B8738 SW T3,8738 (AT) //save preset address to list -3C018007 LUI AT,8007 -244D0001 ADDIU T5,V0,0001 //count++ -AC2D8778 SW T5,8778 (AT) //save new count -//[END] -100000C5 BEQ R0,R0,[PROCESS NEXT COMMAND] -2610000C ADDIU S0,S0,000C //S0=next command - -+++++++++++++++++++++++ -820F000B LB T7,000B (S0) //T7=set# -100F0004 BEQ T7,R0,[expando] //set is 0 -3C01800? LUI AT,800? -3C02800? LUI V0,800? -8C42???? LW V0,???? (V0) //V0=#Players -144F000C BNE V0,T7,[END] //set = player# or else -8E080004 LW T0,0004 (S0) -8C22???? LW V0,???? (AT) //V0=counter -3409002C ORI T1,R0,002C -02090019 MULTU T1,T0 -3C0A800? LUI T2,800? -8D4A???? LW T2,???? (T2) //T2=0xxx preset list -00004812 MFLO T1 -002C6021 ADDU T4,AT,T4 - -012A5821 ADDU T3,T1,T2 -AD8B???? SW T3,???? (T4) //store spawn addy -244D0001 ADDIU T5,V0,0001 //count++ -AC2D???? SW T5,???? (AT) //save new count -[END] -3C187F00 LUI T8,7F00 -2718???? ADDIU T8,T8,???? //T8=return address -03000008 JR T8 -2610000C ADDIU S0,S0,000C - -[alt end, if within first 4MB] -0BC0???? J 7F00???? -2610000C ADDIU S0,S0,000C diff --git a/notes/GE Documentation/Other WIPs/TLB and doubles.txt b/notes/GE Documentation/Other WIPs/TLB and doubles.txt deleted file mode 100644 index cceeff9..0000000 --- a/notes/GE Documentation/Other WIPs/TLB and doubles.txt +++ /dev/null @@ -1,130 +0,0 @@ -rom to TLB 34B30: 7F000000 - -8005DBF0-list of loaded? TLB entries - -looking to add: -7F08C50C, from 7F08C000 -page size is from 0x1000 to 0x2000, that should be effective... - -Reading TLB entries when written: -MTC0 - EntryHi Values used to recall data (ie. 70000000 for normal memory) - EntryLo0 size of thingy. 1F is largest I think, at 0x400000. - EntryLo1 ??? - context *200=entryhi... - Index index for an indexed entry - PageMask /0x2000 to get register size - 00000000 0x0000: 4KB (0x1000 bytes) - 00006000 0x0003: 16KB (0x4000 bytes) - 0001E000 0x000F: 64KB (0x10000 bytes) - 0007E000 0x003F: 256KB (0x40000 bytes) - 001FE000 0x00FF: 1MB (0x100000 bytes) - 007FE000 0x03FF: 4MB (0x400000 bytes) - 01FFE000 0x0FFF: 16MB (0x1000000 bytes) - -index0 in GE: - index 00000000 - entrylo0 02000016 800000, noncoherant, valid - entrylo1 00000000 - pagemask 0 0x1000 - entryhi C0000000 wait, that's weird... C0 isn't mapped at runtime, is it? - - - -Initial 70000000 write is at 80000450 - index 00000001 - entrylo0 0000001F c=3(noncoherant), dirty, valid, global - entrylo1 00000001 global - pagemask 007FE000 3FF (4MB). change to 01FFE000 (FFF) for 16MB - entryhi 70000000 - -7000E880 generic TLBR, gets entryhi for index=A0 -MTC0 A0,Index -NOP -TLBR -NOP -NOP -NOP -MFC0 V0,EntryHi -JR RA -NOP - -700018C0 really interesting routine. Checks if a specific address space has already been loaded. Loops through all indices using 7000E880 -70001920 calls above, and I think it fries the entry! -7000D3D0 fries a TLB entry? - - - -80000000 -I always thought that this handled misses when something isn't loaded but already present in TLB. Apparently this is nonsense - Index 80000000 (random?) - entrylo0 00000001 - entrylo1 00000041 - context 003F8000 - PageMask 00000000 - entryhi 7F000000 - - -ROM 0x2760 -40802800 MTC0 R0,PageMask -00000000 NOP -401A2000 MFC0 K0,Context -3C1B8006 LUI K1,8006 *00000000 NOP -277BE4A4 ADDIU K1,K1,E4A4 *3C1B8006 LUI K1,8006 -8F7B0000 LW K1,0000 (K1) *8F7BE4A4 LW K1,E4A4 (K1) -035BD021 ADDU K0,K0,K1 -8F5B0000 LW K1,0000 (K0) -409B1000 MTC0 K1,EntryLo0 -00000000 NOP -277B0040 ADDIU K1,K1,0040 -409B1800 MTC0 K1,EntryLo1 -00000000 NOP -42000006 TLBWR -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -42000018 ERET -00000000 NOP - -more appropriately... - ah, wait. It just screwed up the context! context should be 003F8340 for this routine... - -theoretical! - TLB miss drops the current spot into the BadVAddr slot - IF! -1) grab BadVAddr -2) &FFFFE000 + >>9 - -or- /2000 (>>D) + <<4 -3) MTC0 result, Context - --or- -1) grab EntryHi -2) >>9 - - -new problem... -in 70000EB4 [0EF8]: JAL 70007914 - this is nonsense! That's not executable code. it's been butchered! find out why... -It's getting overwritten by loop at 7F0C6C2C-7F0C6C40! Why?!? - V1=7914, saving T6 into it. This occurs when double weapons are in use during rendered gameplay -BP-W 80007914 to test. Need to look at this routine's variables during solo+doubles. - - -7F0C6BC8 this copies a loaded image to final memory location - expects a pointer stored to SP+0x10 before calling routine. target address - [7F0C6BE4] - also expects source pointer in A0 - called by 7F0C68F0 - S0 is set to sp=0x10. S0 is T1+S1. T1 is just an offset when bad thing occurs, and S1=0... - T1 is set to SP at 7F0C6684 -7F0C665C: list of stores before JAL 7F0CBF10 - - -Aegh! Okay, what's really happening: - Overwrite occurs due to mirroring routine. Pointer processing is failing, so it leaves weird pointer values. On access, these will be used by write functions and PLSTOUIHWUNC, you get a huge mess - - So... - Must figure out what's up with mirroring in MP. Gotta get these pointers processed right! That's the only hitch. - -Workaround... - Could remove 1st person lefty models altogether, or the guns on-screen. Bad fix, but it would work perfectly! \ No newline at end of file diff --git a/notes/GE Documentation/Other WIPs/Things that use c text calls.txt b/notes/GE Documentation/Other WIPs/Things that use c text calls.txt deleted file mode 100644 index 2ea14bd..0000000 --- a/notes/GE Documentation/Other WIPs/Things that use c text calls.txt +++ /dev/null @@ -1,439 +0,0 @@ -stuff that calls MP menu text (8005BC20) -probably starts at 7F0C40C8... - -//7F0C4354: call "<" from 8005BC28 -JAL 7000441C -NOP -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C -OR S0,T7,R0 -LUI T8,8004 -LUI T9,8004 -LW T9,0EAC (T9) -LW T8,0EB0 (T8) -LUI T2,00FF -ORI T2,T2,00B0 -LUI A3,8006 -ADDIU A3,A3,BC28 -SW T2,0018 (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -SW S0,001C (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -JAL 7F0ADABC -SW T8,0010 (SP) -BEQ R0,R0,7F0C4434 -OR S1,V0,R0 -//7F0C43C0: This probably does the highlighted "<" -JAL 7000441C -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C -OR S0,T1,R0 -LUI T3,8004 -LUI T4,8004 -LW T4,0EAC (T4) -LW T3,0EB0 (T3) -LUI T5,A0FF -LUI T6,0070 -ORI T6,T6,00A0 -ORI T5,T5,A0F0 -LUI A3,8006 -ADDIU A3,A3,BC28 -SW T5,0018 (SP) -SW T6,001C (SP) -OR A0,S1,R0 -ADDIU A1,SP,00CC -ADDIU A2,SP,00C8 -SW S0,0020 (SP) -SW V0,0024 (SP) -SW R0,0028 (SP) -SW R0,002C (SP) -SW T4,0014 (SP) -JAL 7F0AE6EC -SW T3,0010 (SP) -OR S1,V0,R0 -//7F0C4434: -ETC... -//7F0C44B8: display ">" - -//7F0C4524: display highlight ">" - - - -++++ -7F00D828: build your main folder page 1. 2. 3. etc... -ADDIU SP,SP,FFA0 -SW RA,003C (SP) -SW S0,0038 (SP) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 700046D0 -OR A3,R0,R0 -JAL 70003EF8 -OR A0,V0,R0 -JAL 7F00D5E8 -OR A0,V0,R0 -JAL 7F0ACD98 -OR A0,V0,R0 -//7F00D85C: -ADDIU T6,R0,0096 -ADDIU T7,R0,00DC -OR S0,V0,R0 -SW T6,0058 (SP) T6,T7=screen positions? -JAL 7000441C -SW T7,0054 (SP) -JAL 7000442C -SH V0,0044 (SP) -LUI T8,8004 -LUI T9,8004 -LW T9,0EB4 (T9) -LW T8,0EB8 (T8) -LH T1,0044 (SP) -//7F00D890: write 1. on main folder menu -LUI A3,8005 -ADDIU T0,R0,00FF -SW T0,0018 (SP) -ADDIU A3,A3,F494 A3=8004F494: "1.\N" -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T9,0014 (SP) -SW T8,0010 (SP) -JAL 7F009760 interpret said text -SW T1,001C (SP) -//7F00D8C8: test if active cheats -LUI T2,8003 -LW T2,A900 (T2) -OR S0,V0,R0 -BEQL T2,R0,7F00D8E8 -ORI A0,R0,9C1D A0: SELECT MISSION -BEQ R0,R0,7F00D8E8 -ORI A0,R0,9C75 A0: CHEAT SELECT MISSION -ORI A0,R0,9C1D -//7F00D8E8: -JAL 7F0C1DD8 takes A0=recall text halfword; spits out V0=pointer to text -NOP -LUI T3,8004 -LW T3,0EB4 (T3) -LUI A3,8004 -SW V0,005C (SP) -LW A3,0EB8 (A3) -ADDIU A0,SP,004C -ADDIU A1,SP,0050 -OR A2,V0,R0 A2=text pointer -SW R0,0014 (SP) -JAL 7F0AE98C -SW T3,0010 (SP) -//7F00D91C: -this stuff goes on through -//7F00DCAC: -LW RA,003C (SP) -LW S0,0038 (SP) -ADDIU SP,SP,0060 -JR RA -NOP - ---- -7F0C1DD8: returns V0&A0=pointer to text called with A0 text recall halfword! -SRA T6,A0,0xA -SLL T7,T6,0x2 T7=offset in table (extension, in other words) -LUI V0,8009 -ADDU V0,V0,T7 -LW V0,C640 (V0) V0=8008C640+offset: pointer to text bank -ANDI T8,A0,03FF -SLL T9,T8,0x2 T9: text value converted to an offset in bank -ADDU T0,V0,T9 -LW V1,0000 (T0) -OR A0,R0,R0 -BEQ V1,R0,7F0C1E14 kill if pointer inside table is invalid -NOP -ADDU A0,V1,V0 -JR RA -OR V0,A0,R0 -//7F0C1E14: -JR RA -OR V0,A0,R0 - ---- -7F009760: routine that calls the appropriate text interpretter -LUI T6,8005 -LW T6,84D0 (T6) -ADDIU SP,SP,FFC8 -SW RA,0034 (SP) -BEQ T6,R0,7F0097F8 follows this for straight text offsets -LW T5,0048 (SP) -//7F009778: -we'll skip this for now... -//7F0097F8: straight text -LW T4,004C (SP) -LW T6,0050 (SP) -LW T7,0054 (SP) -LW T8,0058 (SP) -LW T9,005C (SP) -LW T0,0060 (SP) -SW T5,0010 (SP) -SW T4,0014 (SP) -SW T6,0018 (SP) -SW T7,001C (SP) -SW T8,0020 (SP) -SW T9,0024 (SP) -JAL 7F0ADABC process A3. Put it into DL @ A0. A1,A2 do stuff too... RETURNS V0=new DL pos -SW T0,0028 (SP) -OR A0,V0,R0 A0=new DL position -//7F009834: RETURN -LW RA,0034 (SP) -ADDIU SP,SP,0038 -OR V0,A0,R0 -JR RA -NOP - -+++++++++ -7F0ADABC: processes c text display strings - A0=pointer to display list (for 4folders 1st run, 800A5328) - A1= - A2= - A3=pointer to text string -ADDIU SP,SP,FF58 -ADDIU T6,R0,0001 -LUI AT,8004 -LW T8,00D0 (SP) -SW RA,005C (SP) -SW S8,0058 (SP) -SW S7,0054 (SP) -SW S6,0050 (SP) -SW S5,004C (SP) -SW S4,0048 (SP) -SW S3,0044 (SP) -SW S2,0040 (SP) -SW S1,003C (SP) -SW S0,0038 (SP) -SW T6,0EA8 (AT) T6->80040EA8 -//7F0ADAF8: -LW T7,0000 (A2) -LW S4,0000 (A1) -OR S0,A3,R0 -OR S1,A1,R0 -OR S2,A2,R0 -OR S3,A0,R0 -ADDIU S5,R0,0048 -BNEZ T8,7F0ADB30 -SW T7,00A0 (SP) -//7F0ADB1C: -LW T9,00B8 (SP) -LW T0,088C (T9) -LW T1,0890 (T9) -ADDU T2,T0,T1 -SW T2,00D0 (SP) -//7F0ADB30: -LUI T3,8005 -LW T3,84D0 (T3) T3:800484D0... -LW T4,00D0 (SP) -OR A0,S3,R0 -BEQ T3,R0,7F0ADB54 -SLTI AT,T4,000E -BEQ AT,R0,7F0ADB54 -ADDIU T5,R0,000E -SW T5,00D0 (SP) -//7F0ADB54: build FA op -LW V1,00C0 (SP) -LUI T6,FA00 -SW T6,0000 (A0) save upper word of FA op -SRL T9,V1,0x18 -SRL T2,V1,0x10 -ANDI T3,T2,00FF -SLL T0,T9,0x18 -SRL T7,V1,0x8 -ANDI T8,T7,00FF -SLL T4,T3,0x10 -OR T5,T0,T4 -SLL T9,T8,0x8 -OR T1,T5,T9 -ANDI T3,V1,00FF -OR T0,T1,T3 -SW T0,0004 (A0) save lower word of FA op -//7F0ADB94: pull and handle each char of text -LBU V0,0000 (S0) load text character -ADDIU S3,S3,0008 -LW S7,00BC (SP) -BEQ V0,R0,7F0ADD78 kill on a NULL character -LW S8,00C4 (SP) -ADDIU S6,SP,006C -ADDIU AT,R0,0020 -//7F0ADBB0: test if space -BNEL V0,AT,7F0ADBD4 branch if not a space -ADDIU AT,R0,000A -LW T4,0000 (S1) -ADDIU S5,R0,0048 -ADDIU S0,S0,0001 -ADDIU T6,T4,0005 -BEQ R0,R0,7F0ADD6C Next! -SW T6,0000 (S1) -ADDIU AT,R0,000A -//7F0ADBD4: test if 0A (return) -BNEL V0,AT,7F0ADC28 branch if not a return -SLTI AT,V0,0080 -LUI V0,8004 -LW V0,0E90 (V0) -ADDIU S5,R0,0048 -LW T2,00D0 (SP) -BLTZ V0,7F0ADC10 -ADDIU S0,S0,0001 -LW T7,0000 (S1) -BNEL S4,T7,7F0ADC14 -LW T9,0000 (S2) -LW T8,0000 (S2) -ADDU T5,T8,V0 -BEQ R0,R0,7F0ADC1C -SW T5,0000 (S2) -//7F0ADC10: -LW T9,0000 (S2) -ADDU T1,T9,T2 -SW T1,0000 (S2) -//7F0ADC1C: Next! -BEQ R0,R0,7F0ADD6C -SW S4,0000 (S1) -SLTI AT,V0,0080 -//7F0ADC28: NORMAL CHARACTERS -BEQ AT,R0,7F0ADCA0 MULTICHARACTER support -LUI T6,8004 -ADDIU V1,R0,0018 offset= 0x18*character value -MULTU V0,V1 -LW T0,00B8 (SP) -LW T8,00A0 (SP) -LW T5,00C8 (SP) -LW T9,00CC (SP) -OR A0,S3,R0 -OR A1,S1,R0 -OR A2,S2,R0 -SW S7,0014 (SP) -SW S4,0018 (SP) -MFLO T3 -ADDU A3,T3,T0 -ADDIU A3,A3,FCE8 -MULTU S5,V1 -SW S8,0020 (SP) -SW T8,001C (SP) -SW T5,0024 (SP) -SW T9,0028 (SP) -MFLO T4 -ADDU T6,T4,T0 -ADDIU T7,T6,FCE8 -JAL 7F0AD0F8 -SW T7,0010 (SP) -OR S3,V0,R0 -LBU S5,0000 (S0) -BEQ R0,R0,7F0ADD6C -ADDIU S0,S0,0001 -//7F0ADCA0: MULTICHARACTER support -ADDIU T6,T6,0EFC -LW AT,0000 (T6) -LBU T2,0001 (S0) -ANDI T3,V0,007F -SW AT,0000 (S6) -LW T8,0004 (T6) -SLL T4,T3,0x7 -ANDI T1,T2,007F -SW T8,0004 (S6) -LW AT,0008 (T6) -OR V1,T1,T4 -ANDI A0,V1,FFFF -SW AT,0008 (S6) -LW T8,000C (T6) -ANDI T5,A0,2000 -ANDI T3,A0,1FFF -SW T8,000C (S6) -LW AT,0010 (T6) -ADDIU T9,R0,000F -ADDIU T2,R0,0010 -SW AT,0010 (S6) -LW T8,0014 (T6) -SLTI AT,T3,03C7 -BEQ T5,R0,7F0ADD0C -SW T8,0014 (S6) -SW T9,0078 (SP) -SW T2,0074 (SP) -//7F0ADD0C: -BNEL AT,R0,7F0ADD1C -ADDIU T1,A0,0080 -ADDIU A0,R0,0002 -ADDIU T1,A0,0080 -//7F0ADD1C: -JAL 7F0C1A30 -SW T1,006C (SP) -LW T4,00A0 (SP) -LW T0,00C8 (SP) -LW T7,00CC (SP) -SW V0,0080 (SP) -OR A0,S3,R0 -OR A1,S1,R0 -OR A2,S2,R0 -OR A3,S6,R0 -SW S6,0010 (SP) -SW S7,0014 (SP) -SW S4,0018 (SP) -SW S8,0020 (SP) -SW T4,001C (SP) -SW T0,0024 (SP) -JAL 7F0AD0F8 -SW T7,0028 (SP) -OR S3,V0,R0 -ADDIU S0,S0,0002 -//7F0ADD6C: loopus next character -LBU V0,0000 (S0) -BNEL V0,R0,7F0ADBB0 -ADDIU AT,R0,0020 -//7F0ADD78: RETURN -LW RA,005C (SP) -OR V0,S3,R0 -LW S3,0044 (SP) -LW S0,0038 (SP) -LW S1,003C (SP) -LW S2,0040 (SP) -LW S4,0048 (SP) -LW S5,004C (SP) -LW S6,0050 (SP) -LW S7,0054 (SP) -LW S8,0058 (SP) -JR RA -ADDIU SP,SP,00A8 - -++++++++ -other text-utilizing routines: - -7F00DCC0: pulls and displays text for folder entry A0 -LUI T6,8003 -LHU T6,ABE8 (T6) T6=text string: Arkangelsk -LUI V0,8003 -ADDIU V0,V0,ABE4 V0=pointer to "1" -BEQ T6,R0,7F00DD00 ditch this if no string to display -OR V1,R0,R0 -LW T7,0014 (V0) T7:8002ABF8= -1 -//7F00DCDC: -BNEL A0,T7,7F00DCF0 -LHU T8,0020 (V0) T8:8002AC08= 0000 -JR RA -OR V0,V1,R0 V0=count -LHU T8,0020 (V0) -//7F00DCF0: -ADDIU V1,V1,0001 V1++ (count) -ADDIU V0,V0,001C V0+=1C: next entry in table -BNEL T8,R0,7F00DCDC -LW T7,0014 (V0) -//7F00DD00: return invalid if never found -ADDIU V0,R0,FFFF V0=-1 -JR RA -NOP - ------------ -70013F60 interpret text containing % characters and whatnot - linked off MP menu "%d" \ No newline at end of file diff --git a/notes/GE Documentation/Other WIPs/WIP editor project.txt b/notes/GE Documentation/Other WIPs/WIP editor project.txt deleted file mode 100644 index e76ad7d..0000000 --- a/notes/GE Documentation/Other WIPs/WIP editor project.txt +++ /dev/null @@ -1,6766 +0,0 @@ -S7= pointer to current GUARD data -0x0 FD - current guard -//these three can be set. -0x116 FC set with action F9 -0x118 FA -0x11A FB set to guardID# of guard visibly shot - -F9 guardID# + 0x2710 -F8 player801D6D10 - - --7000695C: //V0= stage# --7F0101D8: //copy autoaim and sight settings to player stats --7F010420: //V0= selected MP time --7F010444: //V0= selected MP kills --7F014758: //V0=8002B540=scenario --7F033040: //V0= handle to guard ID# (A1= #) --7F0570C0: //V0= handle to tagged object # (A0= #) --7F056160: timer mode bits. - A1= mode (1-set, 0-unset) - A0= bits to toggle. 1x unknown; x1 show timer --7F05C8B4: //feed A0=weapon type; V0= handle to weapon data --7F07CE78: //V0= (80036448) --7F07A528: //V0= current mode. (80036494) --7F09A464: //returns V0=# players (T6,T7,T8,T9,V1,V0 fried) --7F09B150: //V0= 8007A0B8 --7F0BFBF8: //A0->80048370 --7F0BFC04: //V0= 80048370 --7F0BFC10: //V0= difficulty --7F0BFC1C: //A0= difficulty --7F0BFC28: //A0->80048398 selected MP time --7F0BFC34: //A0->8004839C selected MP kills --7F0BFC40: //F0= 800483A4 --7F0BFC4C: //F0= 800483AC --7F0BFC58: //F0= stage time in seconds --7F0BFC64: //F0= time since power on, in seconds --7F0BFC70: //reset 80048468,C,70 to 0 --7F0BFC8C: //V0= 80048474 --7F0BFC98: //V0= 80048480 --7F0BFCA4: //V0= 8004847C --7F0C65F8: //returns V0= pointer to selected weapon set text --7F0C6614: //V0= pointer to weapon set data --7F0C6630: //A0->weapon set (fries AT) --7F0C663C: //V0= selected weapon set # - - -------------------- -object type 9 - guard data. mostly to make sense of other stuff -7F023720: -A1 pointer to object -A0/V1 9 (type) -A2/S3 79? not sure what this is - -LHU T6,0006 (A1) //T6= preset -LUI T8,8007 -LW T8,5D18 (T8) //T8= pointer to 0xxx presets -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x2 -OR S0,A1,R0 //S0= pointer to object -ADDU A0,T7,T8 //A0= address of preset -LW A1,0028 (A0) //A1= room pointer -ADDIU T9,SP,0054 -SW T9,0010 (SP) -SW A0,005C (SP) -LUI A2,41A0 -JAL 7F056850 //grabs data from preset -ADDIU A3,SP,0048 -BEQ V0,R0,7F0238FC -ADDIU T0,R0,FFFF -SW T0,0030 (SP) -LHU V0,0008 (S0) //V0= body -ORI AT,R0,FFFF -BNEL V0,AT,7F023794 //branch if not -1 -SW V0,0034 (SP) -JAL 7F023590 //random body?!? -NOP --7F023790: -SW V0,0034 (SP) -LW T1,0034 (SP) -LUI T3,8004 -SLL T2,T1,0x2 -ADDU T2,T2,T1 -SLL T2,T2,0x2 -ADDU T3,T3,T2 -LBU T3,DE21 (T3) //gender tag -BNEL T3,R0,7F0237DC -LW A0,0034 (SP) --7F0237D4: -SW V0,0030 (SP) -LW A0,0034 (SP) -LW A1,0030 (SP) -JAL 7F0234D0 -LHU A2,0014 (S0) //A2= 0x14 (0) - - - -------------------- -0A action type -0000 FFFF FFFF 0610 FFFF FFFF 4410 FFFF 0002 0610 0002 FFFF 0610 -0001 FFFF FFFF 0410 -0002 FFFF 0002 0600(plane/helicopter rotors...) -000B 0014 003C 0010 0014 003C 0210 -001E 0053 0054 0410 -0028 FFFF FFFF 0610 -002A FFFF FFFF 0610 -0041 0015 0028 0410 -0042 0000 0014 0410 -0052 FFFF FFFF 0610 -0053 0000 0022 0010 -0054 0000 0024 0010 -0059 FFFF FFFF 0610 -005A FFFF FFFF 0610 - 0007 FFFF 0610 -0061 0000 0001 0410 - 0001 FFFF 0410 - FFFF 00AF 0410 -0062 007F FFFF 8610 - 0000 0001 0410 - 0001 FFFF 0410 - FFFF 0063 0410 -0063 0000 0001 0610 - 0001 FFFF 0610 - FFFF 0042 0610 - FFFF 0060 0410 - 0000 0095 0010 - FFFF FFFF 0410(runway intro) -0064 0000 0001 0410 - 0001 FFFF 0410 -0065 0033 FFFF 0610 - 0022 FFFF 0610 - FFFF 0022 0610 - 0008 006D 0410 -0066 0000 0001 0410 - 0001 FFFF 0410 -0067 0000 0001 0410 - 0001 FFFF 0410 -0068 0000 FFFF 0610 - FFFF FFFF 0610 -0069 0000 001D 0610 - 001D 00A0 0610 -006A FFFF FFFF 0610 - FFFF FFFF 0600 - FFFF FFFF 4400 -006B FFFF FFFF 0610 - FFFF FFFF 8610 -0073 FFFF FFFF 0610 -0093 0000 0019 0010 -0094 0000 0011 0010 -0096 0000 0056 0010 -0097 0000 0056 0010 -009A 0000 00C1 1810 -009B 0000 0126 1810 -009C 0000 00B7 1810 -009D 0000 007B 1810 -009E 0000 0038 1810 -009F 0000 0089 1810 -00A3 0000 008C 0010 - 00AA 0128 0010 -00A8 003C 0078 0010 -00AC 0000 0045 0010 -00AD 0000 004A 0010 -00AE 0000 004F 0010 -00AF 0000 0059 0010 -00B1 FFFF 0003 2410 - 0003 005A 0410 - 0050 FFFF 0410 -00B2 0014 FFFF 0618 -00B3 0002 FFFF 0610 -00B4 FFFF FFFF 0610 -00B5 FFFF FFFF 0600 - 009E 00FA 4420 - 0103 FFFF 4420 -00B6 FFFF FFFF 0600 - 009E 00FA 4420 - 0103 FFFF 4420 - -set data read (intro movies) -7F005A94: -LW T7,0008 (S0) //grab set # from CAM0(preset) type -LUI T2,8007 -LUI AT,8008 -BNE V0,T7,7F005AE8 //V0=test set number (1), should match pulled value -NOP -LW T0,0004 (S0) //grab preset number -LUI V0,8008 -LW V0,9C68 (V0) //V0=80079C68=0 -SLL T1,T0,0x2 //T1=008B*4=22C -SUBU T1,T1,T0 //T1=1A1 -LW T2,5D18 (T2) //T2=80075D18=0xxx preset pointer -SLL T1,T1,0x2 //T1=T1*4=684 -SUBU T1,T1,T0 //T1=5F9 -SLL T1,T1,0x2 //T1=17E4 -SLL T4,V0,0x2 //T4=V0*4=0 -ADDU AT,AT,T4 //AT+=offset in table -ADDU T3,T1,T2 //T3=offset to preset -SW T3,9C28 (AT) //T3->80079C28 -LUI AT,8008 -ADDIU T5,V0,0001 //counter++ -SW T5,9C68 (AT) //counter->80079C68 -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C //next type - -read it again: -7F005E98: -LW T0,9C68 (T0) //T0=#spawns -BLEZL T0,7F005F50 - ADDIU A0,SP,008C -JAL 7F09A464 -NOP - -7F09A464: V0= # players loaded - fries: T6,V1,T7,T8, T9, V0 -LUI T6,8008 -LW T6,9EE0 (T6) //T6=80079EE0=800C6760 (player1 pointer) -OR V1,R0,R0 //V1=playercount -LUI T7,8008 -BEQ T6,R0,7F09A480 //if NULL branch -LUI T8,8008 -ADDIU V1,R0,0001 -LW T7,9EE4 (T7) //T7=player2 pointer -LUI T9,8008 -BEQ T7,R0,7F09A494 -NOP -ADDIU V1,V1,0001 -LW T8,9EE8 (T8) //T8=player3 pointer -BEQ T8,R0,7F09A4A4 -NOP -ADDIU V1,V1,0001 -LW T9,9EEC (T9) //T9=player4 pointer -BEQ T9,R0,7F09A4B4 -NOP -ADDIU V1,V1,0001 -JR RA -OR V0,V1,R0 //V0=#players - -7F005EAC: -SLTI AT,V0,0002 -BNEZ AT,7F005ED4 -LUI T1,8008 - - - -------------------- -guard data follows level-specific text -Pointer @ 8002CC64 -objective pointers starting at 80075d30 - -BP facility 801d22d4 (00000012 00000033 0000003F) -7F004388: -LBU S0,000B (S2) //S0=yy (3F, in this case) -JAL 7f022FC8 -LW A0,0004 (S2) //A0=xxxxxxxx (00000033, in this case) - -7F022FC8: -LUI V1,8003 -LW V1,CC68 (V1) //V1=8003CC68=0000004B (# GUARDS) -OR A3,A0,R0 //A3=A0=33 -LUI A0,8003 -BLEZ V1,7F023020 -OR V0,R0,R0 -LW A0,CC64 (A0) //A0=8002CC64=801D9270 (guard data handle) -OR A1,R0,R0 -OR A2,A0,R0 -7F022FEC: -LW T6,001C (A2) //T6=801D928C=801E55B0 -ADDIU V0,V0,0001 -SLT AT,V0,V1 -BEQL T6,R0,7F023018 //if T6=NULL, branch - ADDIU A1,A1,01DC -LH T7,0000 (A2) //T7=801D9270=0 -BNEL A3,T7,7F023018 //branch once A3=T7 (T7=33) - ADDIU A1,A1,01DC -JR RA -ADDU V0,A1,A0 //V0=base address + offset=801DED8C -7F023018: -BNEZ AT,7F022FEC -ADDIU A2,A2,01DC - -7F004394: -BEQ V0,R0,7F004AFC //branch if NULL pointer -NOP -LW T1,0018 (V0) //T1=801DEDA4=8006D580 (handle to the 8006 stuff stored when expanding objects) -BEQ T1,R0,7F004AFC //branch if NULL -NOP -LW T9,001C (V0) //T9=801DEDA8=801E79AC -BEQ T9,R0,7F004AFC //branch if NULL -NOP -BEQ R0,R0,7F004AFC -SB S0,0010 (V0) //3F->801DED9C (just before 8006 and 801E pointers) - -7F004AFC: -JAL 7F0568F4 //increment to next object routine -OR A0,S2,R0 ----------- -02 type expansion: -7F004410: -LW T4,0004(S2) //T4=data to be converted to float -LUI AT,4780 -MTC1 AT,F10 //F10=47800000 [65536.] -MTC1 T4,F6 //F6=value -LUI AT,8003 -CVT.S.W F8,F6 //F8=F6->float=4B800000 [1.677722e7] -DIV.S F16,F8,F10 //F16=F8/F10=43800000 [256] -BEQ R0,R0,7F004AFC -SWC1 F16,A3C0(AT) //43800000->8002A3C0 - -format: -00000002 xxxxxxxx - -x converted to float and divided by 65536 (0x10000) -value is stored to 8002A3C0. Possibly a scale modifer or some such nonsense. -The value is used for door calculations. Changing it will shrink/enlarge doors. -Why they ever made it is beyond me. - ----------- - -1F type expansion: -7F056AEC: -LBU T8,0003 (S1) -ADDIU S0,S0,0001 //S0=counter of objects -BNE S2,T8,7F056ACC //if not at end of list, branch -NOP - -7F056ACC: this conditional isn't taken, but I'm curious -BNE S0,S3,7F056ADC -NOP -BEQ R0,R0,7F056B00 -OR V0,S1,R0 -7F056ADC: -JAL 7F0568F4 -OR A0,S1,R0 - -7F056B00: -LW RA,0024(SP) -LW S0,0014(SP) -LW S1,0018(SP) -LW S3,0020(SP) -JR RA -ADDIU SP,SP,0028 - -7F003BD0: -BEQ R0,R0,7F003BDC -SW V0,00C8(S1) -7F003BDC: -LW RA,0034(SP) -LW S0,002C(SP) -LW S1,0030(SP) -JR RA -ADDIU SP,SP,01D8 - -7F004408: -BEQ R0,R0,7F004AFC -NOP - -7F004AFC: -JAL 7F0568F4 -OR A0,S2,R0 - - - ----------- -objective block tracing: -7F057264: -LUI A0,8007 -ADDU A0,A0,V0 -LW A0,5D30 (A0) //objective pointer grabbed from 80075D30 pointers -BNEL A0,R0,7F05728C //if pointer valid branch -LBU V1,0003 (V0) //get objective type - -7F05728C: -ADDIU AT,R0,0018 -OR S2,A0,R0 //S2=A0=pointer to objective -BEQ V1,AT,7F057484 //test if objective end (18) -ADDIU S4,R0,0001 //S4=1 -ADDIU T6,V1,FFE9 //objective - 17 -SLTIU AT,T6,000C //AT=1 if type 17-22 -BEQ AT,R0,7F057438 -OR S1,S4,R0 //S1=1 -SLL T6,T6,0x2 //convert to offset -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,3654 (AT) //80053654 TABLE -JR T6 -NOP - -7F057438: //END OF ROUTINE, LOOP -BNE S3,S4,7F057450 -NOP -BEQ S1,S4,7F057464 -NOP -BEQ R0,R0,7F057464 -OR S3,S1,R0 -7F057450: -BNEZ S3,7F057464 -ADDIU AT,R0,0002 -BNE S1,AT,7F057464 -NOP -OR S3,S1,R0 -7F057464: -JAL 7F0568F4 //advance a code type -OR A0,S2,R0 - -type 07 7F005D14: watch time -SW R0,0000 (S1) //0->80079A24 -LW A0,0008 (S0) //A0=second value (34) -ADDIU AT,R0,003C -BLEZL A0,7F005D50 //second value should be valid - LW V0,0004 (S0) //V0=first value -DIV A0,AT //34/3C -MFHI T7 //T7=%result -SLL T0,T7,0x3 //T0=value * 8=1A0 -SUBU T0,T0,T7 //T0= org value *7 after all that=16C -SLL T0,T0,0x5 //T0*0x20 = 2D80 -ADDU T0,T0,T7 //T0+org value = 2DB4 -SLL T0,T0,0x4 //T0*0x10(move over a few places)=2DB40 -LUI AT,8008 -SW T0,9A24 (AT) //2DB40->80079A24 -LW V0,0004 (S0) //V0=first value -7F005D50: -ADDIU AT,R0,000C -BLEZ V0,7F005D84 //first value should be valid -NOP -DIV V0,AT //B/C -MFHI T3 //T3=%result -LUI AT,0003 -ORI AT,AT,4BC0 //AT=34BC0 -MULTU T3,AT //B*34BC0=00244140 -LW T2,0000 (S1) //T2=result from above (2DB40) -LUI AT,8008 -MFLO T4 //T4=244140 -ADDU T5,T2,T4 //T5=244140+2DB40=271C80 -SW T5,9A24 (AT) //271C80->80079A24 -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C //advance to next address - -value pulled at 7F0873D4: increment time -LUI T3,8005 -LW T3,8498 (T3) //T3=80048498=1 -LW T2,0000 (V0) //T2=271C80 -LUI T5,8003 -7F0873E4: -ADDU T4,T2,T3 //T4=271C80 + 1 //to go backwards!-014B6023 -SW T4,0000 (V0) //save it back -LW T5,64A0 (T5) //T5=800364A0=0 -BEQ T5,R0,7F08750C -NOP -in watch menu pulls it at 7F0880E0 update display for hands - - -NEXT... -7F005DE4: -LW V0,0000 (S0) -ADDIU AT,R0,0009 -BNEL V0,AT,7F005A60 //branch if not at end - SLTIU AT,V0,0009 - -type 3 swirly camera: - -7F07B354: bitflag read -LW T5,0004 (V0) //T5=bitflag following camera type3 -ADDIU A2,A2,0001 //A2=step#? -ANDI T6,T5,0002 //T6=test for 2 -BEQL T6,R0,7F07B3C4 //if not 2, branch - LWC1 F16,0008 (V0) -LW V1,0000 (T1) //V1=8007A0B0=800B3B60 -LWC1 F6,0008 (V0) //F6=X value -LWC1 F10,0010 (V0) //F10=Z value -LWC1 F4,04A0 (V1) //F4=800B4000=3F800000 -LWC1 F16,0498 (V1) //F16=800B3FF8=338885A3 -MUL.S F8,F4,F6 //F8=F4*F6=resultant x value -NOP -MUL.S F18,F10,F16 //F18=F10*F16=resultant z value -ADD.S F4,F8,F18 //F4=F18+F8 -SWC1 F4,000C (A1) //F4= -LWC1 F6,000C (V0) // -SWC1 F6,0010 (A1) // -LWC1 F10,0010 (V0) // -LWC1 F16,04A0 (V1) // -LWC1 F4,0008 (V1) // -LWC1 F18,0498 (V1) // -MUL.S F8,F10,F16 // -NOP -MUL.S F6,F18,F4 // -SUB.S F10,F8,F6 // -BEQ R0,R0,7F07B3D8 -SWC1 F10,0014 (A1) // -7F07B3C0: - ----------- ----------- ----------- -action/intro block -7F005A38: -LW V0,0000 (S0) //V0=action/intro type -ADDIU AT,R0,0009 -LUI S2,8008 -BEQ V0,AT,7F005DF4 //if type=9, end -LUI AT,42C8 -MTC1 AT,F22 -LUI AT,4780 -MTC1 AT,F20 -ADDIU S2,S2,A0B0 //S2=8007A0B0 -SLTIU AT,V0,0009 -7F005A60: -BEQ AT,R0,7F005DE0 -SLL T8,V0,0x2 //convert to pointer offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,F1AC (AT) //TBL entry @ 8004F1AC -JR T8 -NOP - -------- -------- --- -type 4 7F005C28: use Bond default intro animation # -LW T8,0004 (S0) //grab value following type -LUI AT,8003 -ADDIU S0,S0,0008 //advance address to next command -BEQ R0,R0,7F005DE4 -SW T8,6514 (AT) //store value to 80036514 - --when screen goes black after intro camera (loading bond): 7F07ABBC grabs this value! -7F07ABBC: although usually 0, in Bunker1=1 -LUI T0,8003 -LW T0,6514 (T0) //T0=mystery value -LUI T2,8003 -LUI S0,8008 -ADDIU T2,T2,6518 //T2=80036518 -SLL T1,T0,0x4 //T1=T0 * 0x10=0x10 -ADDIU S0,S0,A0B0 //S0=8007A0B0 BONDdata -ADDU V0,T1,T2 //V0=80036518+10=80036528 -LW T5,0000 (S0) //T5=800B3B60 -LWC1 F0,0004 (V0) //F0=40E00000 (otherwise, =42BE0000) -LUI T4,8007 -LW T4,9538 (T4) //T4=80069538=802AF4C0 -LW T3,0000 (V0) //T3=80036528=6254 (otherwise, =5744) -LWC1 F12,0008 (V0) //F12=42200000 (otherwise, =BF800000) -LWC1 F2,000C (V0) //F2=3F000000 (otherwise, =3CA3D70A) -MTC1 R0,F10 -LW A0,00D4 (T5) //A0=800B3C34=80236F50 -MFC1 A3,F0 //A3=40E00000 -OR A2,R0,R0 -ADDU A1,T3,T4 //A1=802AF4C0+6254=802B5714 -SWC1 F12,0078 (SP) -SWC1 F1,0010 (SP) -JAL 7F06FCA8 -SWC1 F10,0014 (SP) //SPcurrent=803B3638 -7F07AC1C: (return) -LWC1 F12,0078 (SP) -MTC1 R0,F16 -NOP -C.LT.S F16,F12 //F16=0,F12=42200000 -NOP -BC1FL 7F07AC4C - LW T7,0000 (S0) //T7=8007A0B0=800B3B60 -7F07AC38: -LW T6,0000 (S0) //T6=8007A0B0=800B3B60 -MFC1 A1,F12 //A1=42200000 -JAL 7F06FDE8 -LW A0,00D4 (T6) //A0=800B3C34=80236F50 -7F07AC48: -LW T7,0000 (S0) //T7=8007A0B0=800B3B60 BONDdata -ADDIU T9,R0,0017 //T9=0017 -LW T8,00A8 (T7) //T8=800B3C08=8006BC84 -LW V0,0004 (T8) //V0=8006BC88=801D99B0 -SB T9,0007 (V0) //17->801D99B7 -SB R0,0008 (V0) //00->801D99B8 -LW T0,0000 (S0) //T0=8007A0B0=800B3B60 -BEQ R0,R0,7F07B190 -SW R0,0034 (T0) //0->800B3B94 - -7F07B190: -LW RA,002C (SP) //RA=803B3664=7F07B1F8 -LW S0,0028 (SP) //S0=803B3660=800B3B60 -ADDIU SP,SP,0088 //803B36C0 -JR RA -NOP - -7F07B1F8: -BEQ R0,R0,7F07B294 -LW RA,0014 (SP) //RA=803B36D4=7F087524 - --animation values! 80036518 -actionoff -00005744 42BE0000 BF800000 3CA3D70A -00006254 40E00000 42200000 3F000000 -000078C8 00000000 BF800000 3F000000 -00007AA8 00000000 BF800000 3F000000 -00007C4C 00000000 BF800000 3F000000 -00007D04 00000000 BF800000 3F000000 -00007F0C 00000000 BF800000 3F000000 -00007FB4 00000000 BF800000 3F000000 -0000D89C 00000000 BF800000 3F000000 - --- -type 5 7F005C3C: -LW T6,0004 (S0) //T6=value following type -LW T7,0000 (S2) //handle to character data -ADDIU S0,S0,0008 //advance address to next command -BEQ R0,R0,7F005DE4 -SW T6,041C (T7) //character/cuff-> data+41C --- - 6.xxxx set RA to this block --- - ----------- - -action block 97 scientist tag is 80 -action block 97 just before ouromov says "lay down your weapons" 01 (can hurt guards?) - -FACILITY -attrib 07: 0,4,9,E,13,18,1D,22,27,2A,2C,2E,30 - -ARCHIVES (mostly used by the mishkin-ish guys) -attrib 19: 14,15,16,9,A,D -attrib 0C: B,C,1A,1B,1C - -AZTEC -attrib 7F: 3,6,7,8,9,A,B,C,D - -caverns -attrib 19: 1D,22,27,2C,31,36 -attrib E5: 30,39,46,47 -attrib FF: 58 - -control (all guards set to 040C) -attrib FF: 17,18,1A,1B - -Cradle -attrib FF: 0 (trev) - -Frigate -attrib 19: 10,1A,22 - -Jungle (all in a row...) -attrib CC: 18,7,A,1D,22,1E - -Streets -attrib 19: 2,6,9,C,E,F,11,15,17,19 - -Runway (only one of these is not spawned) -attrib 19: 8,B,E,10,12,14 - -Bunker1 -attrib 0C: 0,8,A,B,18 (keycard guys + -attrib 19: C,12 (red special forces, officer) - -Surface 2 -attrib 0C: 12 - -Bunker2: none -Surface 1: none -Silo: none -Statue: none -Egyptian: none -Dam: none -Depot: none - - -attrib defaults: -health 100% -damage 100% -accuracy 10% -reaction speed 0% - ---------------------- -action block ---------------------- -7F035768 08 ????? -JAL 7F0335D4 -OR A0,S7,R0 //A0=801E0794 (guard data pointer) -(followed by return to 7F03558C) - -7F0335D4: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F02A258 -SW A0,0018 (SP) //save a copy of the guard data pointer -BEQL V0,R0,7F033600 //if guard shot, dead, or dying, branch - OR V0,R0,R0 -JAL 7F023E48 -LW A0,0018 (SP) -BEQ R0,R0,7F033600 -ADDIU V0,R0,0001 -7F033600: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F02A258: if guard not getting shot, dead, or dying, returns V0=1 -LB V0,0007 (A0) //7th byte of guard data (0xF in this case) -ADDIU AT,R0,0004 -BEQ V0,AT,7F02A290 -ADDIU AT,R0,0005 -BEQ V0,AT,7F02A290 -ADDIU AT,R0,0007 -BEQ V0,AT,7F02A290 -ADDIU AT,R0,0006 -BNEL V0,AT,7F02A29C //if !=6 (getting shot), V0=1 - ADDIU V0,R0,0001 -LW T6,0014 (A0) //T6=guard bitflags -ANDI T7,T6,0200 -BNEL T7,R0,7F02A29C - ADDIU V0,R0,0001 -7F02A290: -JR RA -OR V0,R0,R0 -ADDIU V0,R0,0001 -7F02A29C: -JR RA -NOP - -7F023E48: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F023CB8 -SW A0,0018 (SP) -LW T7,0018 (SP) //T7= GUARDdata -ADDIU T6,R0,0001 -SW T6,0040 (T7) //1->GUARDdata 0x40 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F023CB8: -ADDIU SP,SP,FFD0 -SW RA,0024 (SP) -SW S0,0020 (SP) -LB T6,0007 (A0) //7th byte of guard data -ADDIU AT,R0,0002 -OR S0,A0,R0 -BNE T6,AT,7F023DF8 //if guard value!=2, branch -LUI A1,4180 -JAL 7F02D184 -NOP - -7F023DF8: -JAL 7F023A94 -OR A0,S0,R0 -LW RA,0024 (SP) -LW S0,0020 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - ---7F023A94: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -JAL 7F02D184 -SW A0,0018 (SP) -LW A0,0018 (SP) //A0= GUARDdata -ADDIU T6,R0,0001 -ADDIU T7,R0,0002 -SB T6,0007 (A0) //1-> GUARD action type (stand still) -SW R0,002C (A0) -SW R0,0030 (A0) -SW R0,0034 (A0) -SW R0,0038 (A0) -SW T7,003C (A0) -JAL 7000A450 //tinkers with value at 80024460 -SW R0,0040 (A0) -ADDUI AT,R0,0078 -DIVU V0,AT //result from fnction / 0x78 -LW A0,0018 (SP) //A0= GUARDdata -MFHI T8 -LWC1 F12,001C (SP) //F12= 41800000 -LW T0,001C (A0) //T0= GUARD model data handle -ADDIU T9,T8,00B4 -LUI AT,3F80 -SW T9,0044 (A0) -MTC1 AT,F4 -LWC1 F2,00A4 (T0) -LUI AT,42FE -MOV.S F0,F12 -C.EQ.S F4,F2 //if F2 = 1.0, branch -NOP -BC1TL 7F023B20 - MTC1 AT,F2 -DIV.S F0,F12,F2 -MTC1 AT,F2 --7F023B20 -NOP -C.LT.S F2,F0 -NOP -BC1FL 7F023B3C - TRUNC.W.S F6,F0 -MOV.S F0,F2 -TRUNC.W.S F6,F0 --7F023B3C -MFC1 A1,F12 -MFC1 T2,F6 -JAL 7F023948 -SB T2,0008 (A0) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - ---7F02D184 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) -OR A1,R0,R0 -JAL 7F02D118 //check if a right hand weapon -OR A2,R0,R0 -LW A0,0018 (SP) -ADDIU A1,R0,0001 -JAL 7F02D118 //check if a left hand weapon -OR A2,R0,R0 -JAL 7F02D0F8 //fry some guard data? -LW A0,0018 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - ----7F02D0F8: fry a bunch of guard data -MTC1 R0,F0 -ADDIU T6,R0,000A -SB T6,000E (A0) //0A-> GUARDdata 0xE -SWC1 F0,0154 (A0) //00-> GUARDdata 0x154 -SWC1 F0,0150 (A0) //00-> GUARDdata 0x150 -SWC1 F0,0158 (A0) //00-> GUARDdata 0x158 -JR RA -SWC1 F0,015C (A0) //00-> GUARDdata 0x15C - ----7F02D118: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F02302C //A1=hand (1-L, 0-R); returns V0=8006 for guard weapon -SW A2,0020 (SP) -BEQ V0,R0,... -OR A0,V0,R0 //A0=V0= GUN 8006 -JAL 7F052574 -LW A1,0020 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - ----7F052574: -save RA position... -SW A1,0024 (SP) -LW V0,0004 (A0) //V0= GUNdata -LW A2,0014 (V0) //A2= P->funny data tying model to object instance -BEQL A2,R0,... - ... -LW V0,0008 (A2) //V0= P->model load line -LUI T6,8004 -ADDIU T6,T6,C4FC //T6= 8003C4FC (last entry?) -LW T7,0004 (V0) //T7= -BNEL T6,T7,... - ... -LW V1,0008 (V0) -OR A0,A2,R0 -LW A1,0000 (V1) -BEQL A1,R0,7F0525DC - LW A1,0008 (V1) -JAL 7F06C79C -SW A2,0018 (SP) -LW T8,0024 (SP) -LW A2,0018 (SP) -SH T8,0000 (V0) -LW T9,0008 (A2) -LW V1,0008 (T9) -LW A1,0008 (V1) --7F0525DC -BEQL A1,R0,... - ... -JAL 7F06C79C -OR A0,A2,R0 -LW T0,0024 (SP) -SW T0,0000 (V0) -reset vars and RETURN... - -------- -7F03577C type 9 - guard kneels -JAL 7F0336C4 -OR A0,S7,R0 -ADDIU S2,S2,0001 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 - -7F0336C4: - - -------- -7F03589C 0B.rr if guard is wasting time, return -LB T3,0007 (S7) //T3= action type -ADDIU AT,R0,0003 -OR A0,S6,R0 -BNE T3,AT,7F0358C4 //if =3, (should be wasting time or rolling)return -OR A1,S2,R0 -JAL 7F0352F0 -LBU A2,0001 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C -ADDU S1,S6,V0 -7F0358C4: -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 - -------- - -7F0358D0 0C shuffle feet? -there's distance checking, and within certain ranges guards will look around. If it is beyond a certain range, the guards don't do anything at all... checks if guard has a weapon, but as to what it *does*... - -JAL 7F033610 -OR A0,S7,R0 //A0= GUARDdata -ADDIU S2,S2,0001 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 - --7F033610: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F02A258 //returns V0=1 if the guy isn't dead, shot, etc. -SW A0,0018 (SP) -BEQL V0,R0,... - OR V0,R0,R0 -JAL 7F024418 -LW A0,0018 (SP) //A0= GUARDdata -BEQ R0,R0,... -OR V0,R0,R0 -ETC. - ---7F024418: -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -JAL 7F032C4C //returns F0= difference between current and BOND -OR S0,A0,R0 //S0= GUARDdata -LUI AT,8005 -LWC1 F4,1DA0 (AT) //F4=80051DA0= some sort of min range... -LUI AT,8005 -OR A0,S0,R0 //A0= GUARDdata -C.LT.S F0,F4 -NOP -BC1T 7F024460 -NOP -LWC1 F6,1DA4 (AT) //F6=80051DA4= some sort of max range -C.LT.S F6,F0 -NOP -BC1F 7F024480 -NOP --7F024460 //when < value at 80051DA4 -JAL 7F024334 //not entirely sure, but checks weapons and stuff... -LUI A1,4180 -JAL 7F02D184 -OR A0,S0,R0 //A0= GUARDdata -ADDIU T6,R0,0012 -SB T6,0007 (S0) //look around self -BEQ R0,R0,... -SB R0,0008 (S0) --7F024480 //when beyond range... -JAL 7F029C5C //check if doing anything useful... -OR A0,S0,R0 //A0= GUARDdata -BNEL V0,R0,... - ... -JAL 7F023CB8 -OR A0,S0,R0 //A0= GUARDdata -UNFUNK AND RETURN - ---7F032C5C -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F089798 //returns V0= BONDdata 8006 -SW A0,0018 (SP) -LW A0,0018 (SP) -JAL 7F032BD8 //returns F0= distance between current and BOND -ADDIU A1,V0,0008 //A1= BONDxpos -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -7F0358E4 type D - guard looks around when shot at -JAL 7F033688 -OR A0,S7,R0 -ADDIU S2,S2,0001 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 - --- -7F0359E8 0E.rr step sideways, return -JAL 7F02A2C8 -OR A0,S7,R0 -...if !V0, STD. RETURN - --7F02A2C8: -ADDIU SP,SP,FFB0 -SW RA,001C (SP) -SW S0,0018 (SP) -JAL 7F02A258 //returns V0= 1 if guard NOT hurt, dead, or dying -OR S0,A0,R0 //S0= P->GUARDdata -BEQL V0,R0,7F02A414 - OR V0,R0,R0 -LW T6,0018 (S0) //T6= GUARD 8006 -JAL 7F089798 //returns V0= handle to BOND8006 -SW T6,004C (SP) -LW A0,001C (S0) //A0=model data handle -JAL 7F06CC80 -SW V0,0048 (SP) -LW V0,004C (SP) //V0= GUARD 8006 -LW V1,0048 (SP) //V1= BOND 8006 -LWC1 F6,0008 (V0) //F6= GUARDxpos -LWC1 F10,0010 (V0) //F10= GUARDzpos -LWC1 F4,0008 (V1) //F4= BONDxpos -LWC1 F8,0010 (V1) //F8= BONDzpos -SWC1 F0,0040 (SP) -SUB.S F12,F4,F6 //F12= D.xpos -JAL 7F05AA30 -SUB.S F14,F8,F10 //F14= D.zpos -LWC1 F16,0040 9SP) //F16= guard scale -LUI AT,8005 -C.LT.S F0,F16 //if computed difference less than "bubble"... -SUB.S F12,F0,F16 -BC1F 7F02A344 -MOV.S F2,F12 -LWC1 F18,1E38 (AT) //F18=80051E38= -ADD.S F2,F12,F18 -LUI AT,8005 --7F02A344 -LWC1 F4,1E3C (AT) //F4=80051E3C= -LUI AT,8005 -C.LT.S F2,F4 -NOP -BC1T 7F02A3A4 -NOP -LWC1 F6,1E40 (AT) //F6=80051E40= -LUI AT,8005 -C.LT.S F6,F2 -NOP -BC1T 7F02A3A4 -NOP -LWC1 F8,1E44 (AT) //F8=80051E44= -LUI AT,8005 -C.LT.S F8,F2 -NOP -BC1FL 7F02A414 -OR V0,R0,R0 -LWC1 F10,1E48 (AT) -C.LT.S F2,F10 -NOP -BC1FL 7F02A414 -OR V0,R0,R0 -JAL 7000A450 -NOP -ANDI A1,V0,0001 -SLTIU T7,A1,0001 -OR A1,T7,R0 -SW T7,002C (SP) -OR A0,S0,R0 -JAL 7F02A1E8 -LUI A2,42C8 -BEQ V0,R0,7F02A3E4 -LW A3,002C (SP) -OR A0,S0,R0 -... -... --7F02A414 -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0050 -JR RA -NOP - - --7F02A258: if flags !=4,5,6,7, return 1 ---current action type tests: dying, fading, limping, shot -LB V0,0007 (A0) //V0= GUARDdata +7 (flag?) -ADDIU AT,R0,0004 -BEQ V0,AT,... -ADDIU AT,R0,0005 -BEQ V0,AT,... -ADDIU AT,R0,0007 -BEQ V0,AT,... -ADDIU AT,R0,0006 -BNEL V0,AT,... //if flags=!6, V0=1 - ADDIU V0,R0,0001 -LW T7,T6,0200 //T6= function that called this, so function+200? -BNEL T7,R0,... - ADDIU V0,R0,0001 -JR RA -OR V0,R0,R0 - --7F06CC80: load model if not loaded and pull the scale modifier for it... -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BNEZ A0,7F06CCA4 -SW A0,0018 (SP) -//if there isn't attached model info... -LUI A0,8005 -JAL 7000CF44 -ADDIU A0,A0,473C //A0=8005473C -JAL 7F06C46C -NOP --7F06CCA4 -LW T7,0018 (SP) //T7=A0= attached model info pointer -LUI A0,8005 -LW V0,0008 (T7) //V0= body model load line -BNEL V0,R0,7F06CCD4 - LW V1,0000 (V0) -//if model not attached or loaded... -JAL 7000CF44 -ADDIU A0,A0,4754 //A0= 80054754 -JAL 7F06C46C -NOP -LW T8,0018 (SP) -LW V0,0008 (T8) -LW V1,0000 (V0) //V1= body model data pointer directory --7F06CCD4 -LUI A0,8005 -BNEL V1,R0,7F06CD00 - LHU T1,0000 (V1) -//if the data hasn't been loaded yet, load it! -JAL 7000CF44 -ADDIU A0,A0,4778 //A0= 80054778 -JAL 7F06C46C -NOP -LW T9,0018 (SP) -LW T0,0008 (T9) -LW V1,0000 (T0) -LHU T1,0000 (V1) //header ID byte for group --7F06CD00 -ADDIU AT,R0,0001 -OR A1,V1,R0 //A1=V1= body model data pointers -ANDI T2,T1,00FF //T2= header ID# -BNEL T2,AT,7F06CD28 - MTC1 R0,F0 -//if it does equal 1, which it very well should... -JAL 7F06C79C -LW A0,0018 (SP) //A0= attached model info pointer -BEQ R0,R0,7F06CD2C -LWC1 F0,0014 (V0) //scale of guard(?) --7F06CD28 -NOP --7F06CD2C -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - ---7F06C79C: returns V0= P->5th entry in proportion data. -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LHU T6,0000 (A1) //T6= header ID for group -OR A2,R0,R0 -LW A3,0010 (A0) //A3= pointer to proportion data? (can't remember...) -ANDI T7,T6,00FF //T7= header ID -ADDIU T8,T7,FFFF //T8= header ID-1 -SLTIU AT,T8,0018 //TRUE if < 18 (validifies model, really) -BEQ AT,R0,7F06C840 -SLL T8,T8,0x2 //T8*=4 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,4AF8 (AT) //T8=80054AF8 + offset -JR T8 -NOP - --- -7F035A1C 0F.rr hop sideways, return --- -7F035A50 10.rr run sideways, return --- -7F035A84 11.rr walk while firing, return --- -7F035AB8 12.rr run while firing, return --- -7F035AEC 13.rr roll, fire crouched; return --- -7F035B20 14.xxxx.####.rr stand and aim at guard -A2= #### -A1= xxxx -check if GUARDdata+7 !=4,5,6,7 (guard not dying or getting killed) -check right weapon valid -check left weapon valid -... -OR A2,T6,T7 //A2=#### -JAL 7F02AA1C -OR A1,T9,T1 //A1=xxxx -BEQ V0,R0,7F035B68 //if V0!=0, return value -OR A0,S6,R0 -STD. RETURN - -7F02AA1C: typically A2=0, A1=1 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) //save guarddata -SW A1,001C (SP) //save xxxx -JAL 7F02A258 //returns V0=0 if guard gettiing shot or killed -SW A2,0020 (SP) //save #### -BEQ V0,R0,7F02AA74 -LW A0,0018 (SP) //A0=GUARDDATA -JAL 7F02303C //returns V0=1 if right weapon valid -OR A1,R0,R0 -BNEZ V0,7F02AA5C //skip left check if right found -LW A0,0018 (SP) //A0=guarddata -JAL 7F02303C //returns V0=1 if left weapon valid -ADDIU A1,R0,0001 -BEQL V0,R0,7F02AA78 //if no weapon, abandon this - OR V0,R0,R0 -//7F02AA5C: -LW A0,0018 (SP) //A0=guarddata -LW A1,001C (SP) //A1=xxxx -JAL 7F025560 -LW A2,0020 (SP) //A2=#### -BEQ R0,R0,7F02AA78 -ADDIU V0,R0,0001 -//7F02AA74: -OR V0,R0,R0 -//7F02AA78: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - - - --7F02303C: [A1]=weapon to test 0-r, 1-l; returns V0= 1 if weapon valid -ADDIU SP,SP,FFE0 -SLL T6,A1,0x2 -SW RA,0014 (SP) -ADDU T7,A0,T6 //T7= GUARDdata + offset -LW V1,0160 (T7) //V1= 8006 for right weapon [A1=0] or left [A1=1] -BEQL V1,R0,7F02307C - LW RA,0014 (SP) -LW V0,0004 (V1) //V0= WEPdata pointer -ADDIU A1,R0,0200 -LB A0,0080 (V0) //A0= weapon # -JAL 7F05E0B4 //confirm if weapon type valid -SW V1,001C (SP) -BNEZ V0,7F023078 -LW V1,001C (SP) //V1= 8006 for weapon -OR V1,R0,R0 --7F023078 -LW RA,0014 (SP) --7F02307C -ADDIU SP,SP,0020 -OR V0,V1,R0 -JR RA -NOP - --7F025560: -ADDIU SP,SP,FFB0 -SW RA,0024 (SP) -SW A1,0054 (SP) -SW A0,0050 (SP) -SW A2,0058 (SP) -JAL 7F02302C //A1=hand (1-L, 0-R); returns V0=8006 for guard weapon -ADDIU A1,R0,0001 -SW V0,004C (SP) -LW A0,0050 (SP) //A0= GUARDdata -JAL 7F02302C -OR A1,R0,0000 //returns V0=8006 for right gun -LUI T7,8003 -ADDIU T7,T7,09B8 //T7= 800309B8 -LW A0,004C (SP) //A0= left hand 8006 -LW AT,0000 (T7) //0 -LW T0,0004 (T7) //0 -ADDIU T6,SP,0038 -OR A1,V0,R0 //A1= 8006 right gun -SW AT,0000 (T6) //AT->SP+38 -BEQ A0,R0,7F025660 //branch if right weapon only -SW T0,0004 (T6) -... --7F025660 -JAL 7F023910 -SW A1,0048 (SP) -BNEZ V0,7F025680 -LW A1,0048 (SP) -JAL 7F023910 -OR A0,A1,R0 -BEQL V0,R0,7F0256A4 - LW V0,004C (SP) -... --7F0256A4 -LUI A1,8003 -ADDIU A1,A1,ED28 -SLTU A2,R0,V0 -SLTIU T0,A2,0001 -... - --- -7F035B74 15.xxxx.####.rr kneel and aim at guard --- -7F035C50 16.xxxx.####.rr stand and aim at guard - --- -7F035CA4 17.xxxx.####.rr face guard --- -7F035CF8 18.##.xx.ww shoot guardID# in the X w/[W]eapon# -x=6E to shoot their hat off? -x=8 usually used. very lethal - -OR A0,S7,R0 -JAL 7F033040 //returns V0= guard ID handle -LBU A1,0001 (S1) -LUI T8,8003 -ADDIU T8,T8,0A70 //T8=80030A70 -LW AT,0000 (T8) -ADDIU T7,SP,06F4 -LW T1,0004 (T8) -SW AT,0000 (T7) //SW AT,06F4 (SP) -LW AT,0008 (T8) -OR A0,V0,R0 //A0= P->tagged OBJ -SW T1,0004 (T7) //SW T1,06F8 (SP) -BEQ V0,R0,... -SW AT,0008 (T7) //SW AT,06FC (SP) -LW T2,0018 (V0) //T2= GUARDcur 8006 data -BEQL T2,R0,... - ... -LB A1,0002 (S1) -LBU A3,0003 (S1) (should be a weapon type value) -SW R0,0010 (SP) -JAL 7F02727C -ADDIU A2,SP,06F4 -RETURN... - -18.00.08.06 -00=NAT - --7F02727C: -ADDIU SP,SP,FF98 //SP-68 -SW RA,0024 (SP) -SW S0,0020 (SP) -SW A1,006C (SP) -SW A2,0070 (SP) -SW A3,0074 (SP) -LW T6,0018 (A0) //T6= GUARD 8006 position data -ADDIU AT,R0,006E -OR S0,A0,R0 //S0= GUARDdata -BNE A1,AT,7F02734C //if x==6E, do this stuff -SW T6,0060 (SP) -LW A0,01D8 (A0) //A0= HAT 8006 -BEQL A0,R0,7F027350 //no hat? then skip this! - LW T7,0078 (SP) //T7= 0 in both types 18 & 19 -JAL 7F052684 -NOP -ADDIU AT,R0,0005 -BNE V0,AT,7F0272D0 -ADDIU T8,R0,0008 -BEQ R0,R0,7F02734C -SW T8,006C (SP) --7F0272D0 -ADDIU AT,R0,0003 -BEQ V0,AT,7F0272F8 -LUI T2,8003 -LW A0,01D8 (S0) -JAL 7F04BFD0 -ADDIU A1,R0,0004 -LHU T9,0012 (SP) -ORI T0,T9,0001 -BEQ R0,R0,7F02734C -SH T0,0012 (S0) --7F0272F8 -ADDIU T2,T2,0A3C -LW AT,0000 (T2) -ADDIU T1,SP,0054 -SW AT,0004 (T1) -LHU AT,0004 (T2) -JAL 7000A450 -SH AT,0004 (T1) -ADDIU AT,R0,0003 -DIVU V0,AT -MFHI T5 -SLL T6,T5,0x1 -ADDU A1,SP,T6 -LUI A0,8006 -LW A0,3720 (A0) -LH A1,0054 (A1) -JAL 70008E08 -OR A2,R0,R0 -LW A1,0018 (S0) -OR A0,V0,R0 -JAL 7F053A10 -ADDIU A1,A1,0008 --7F02734C //POST-HAT code -LW T7,0078 (SP) //T7=0 in both 18 & 19 --7F027350 -LW T8,006C (SP) //T8= x -BEQL T7,R0,7F0273EC - LW T3,0014 (S0) //T3= GUARD bitflags -BEQ T8,R0,7F0273E8 //branch x=0 -ADDIU AT,R0,0007 -BEQ T8,AT,7F0273D0 //branch x=7 -LW A0,0074 (SP) //A0= weapon value -ADDIU AT,R0,0008 -BEQ T8,AT,7F0273A0 //branch x=8 -ADDIU A1,R0,0001 -ADDIU AT,R0,000F -BEQ T8,AT,7F0273D0 //branch x=F -ADDIU AT,R0,0064 -BEQ T8,AT,7F0273B0 //branch x=64 -LW A0,0074 (SP) //A0= weapon value -ADDIU AT,R0,006E -BEQ T8,AT,7F0273C0 //branch x=6E -LW A0,0074 (SP) //A0= weapon value -BEQ R0,R0,7F0273E0 -LW A0,0074 (SP) //A0= weapon value --7F0273A0 //////////x=8 -JAL 7F06A6F8 -LW A0,0074 (SP) -BEQ R0,R0,7F0273EC -LW T3,0014 (S0) //T3=guard bitflags --7F0273B0 /////////x=64 -JAL 7F06A6F8 -ADDIU A1,R0,0004 -BEQ R0,R0,7F0273EC -LW T3,0014 (S0) //T3=guard bitflags -....... -....... --7F0273EC -LB T9,000B (S0) //T9= # times shot -LUI AT,0020 -OR T1,T3,AT //T1= toggled bitflag -ANDI T4,T1,0010 -ADDIU T0,T9,0001 -SB T0,000B (S0) //# times shot +1? does it shoot the guard? -BEQ T4,R0,7F02741C //test if 0010 toggled -SW T1,0014 (S0) //save amended bitflags -JAL 7F0206D4 -OR A0,S0,R0 //A0= GUARDdata -BEQ R0,R0,7F0277F0 -OR V0,R0,R0 --7F02741C -LB V0,0007 (S0) //V0= that funny flag thingy -ADDIU AT,R0,0004 -BEQ V0,AT,7F0277EC //shouldn't be dying -ADDIU AT,R0,0005 -BEQL V0,AT,7F0277F0 //or fading away for that matter - ADDIU V0,R0,0001 -JAL 7F05DF84 //returns F0= weapon data[V0] offset 0x2C -LW A0,0074 (SP) //A0= weapon type -LW T5,0078 (SP) //T5= the old T7 value... -MOV.S F2,F0 //F2=F0 -BEQL T5,R0,7F027474 - LW V0,0070 (SP) -JAL 7F09A464 -SWC1 F2,003C (SP) -ADDIU AT,R0,0001 -BNE V0,AT,7F027470 -LWC1 F2,003C (SP) -LUI AT,8003 -LWC1 F4,CE48 (AT) //F4= 8002CE48 -MUL.S F2,F2,F4 -NOP --7F027470 -LW V0,0070 (SP) //V0= pointer to Difference between positions -LW T6,0060 (SP) //T6= GUARD 8006 -OR A0,S0,R0 //A0=S0= GUARDdata -LWC1 F8,0000 (V0) //F8= saved xpos -LWC1 F6,0008 (T6) //F6= GUARD xpos -ADDIU A1,SP,0044 -SUB.S F10,F6,F8 //F10= D.xpos -SWC1 F10,0044 (SP) -LWC1 F18,0004 (V0) //F18= saved ypos -LWC1 F16,000C (T6) //F16= GUARDypos -SUB.S F4,F16,F18 //F4= D.ypos -SWC1 F4,0048 (SP) -LWC1 F8,0008 (V0) //F8= saved zpos -LWC1 F6,0010 (T6) //F6= GUARDzpos -SWC1 F2,003C (SP) -SUB.S F10,F6,F8 //F10= D.zpos -JAL 7F032BD8 -SWC1 F10,004C (SP) --7F0274B8 -*****************keep going from here --7F0277F0 //RETURN! -LW RA,0024 (SP) -LW S0,0020 (SP) -ADDIU SP,SP,0068 -JR RA -NOP - - ---7F06A6F8 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -JAL 7F05E0B4 returns V1= P-> weapon handler for weapon A1 -LUI A1,0001 -BEQ V0,R0,... -LUI T6,8008 -LW T7,001C (SP) //T7= x -LW T6,A0B4 (T6) //T6=80079EF0= ??? -SLL T8,T7,0x2 //T8= x*4 -ADDU V0,T6,T8 //V0= 80079EF0 + offset -LW T9,0000 (V0) -ADDIU T0,T9,0001 //T0=T9++ -SW T0,0000 (V0) //increment xth word at 80079EF0 by 1 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --- -7F035D5C 19.#1.#2.xx GuardID#1 shoots GuardID#2 in the x -OR A0,S7,R0 -JAL 7F033040 //returns V0= guard ID handle -LBU A1,0001 (S1) -OR S0,V0,R0 //S0= GUARD#1 handle -OR A0,S7,R0 -JAL 7F033040 -LBU A1,0002 (S1) -BEQ S0 or V0=0, ... -SW V0,06E8 (SP) -OR S3,V0,R0 //S3= GUARD#2 handle -LW T3,0018 (S0) //T3= GUARD#1 8006 -BEQL T3,R0,... - ... -LW T4,0018 (V0) //T4= GUARD#2 8006 -OR A0,S0,R0 //A0= GUARD#1 handle -BEQL T4,R0,... - ... -JAL 7F02303C //V0=1 if GUARD#1 has a GUNrh -OR A1,R0,R0 -LUI T6,8003 -ADDIU T6,T6,0A7C -LW AT,0000 (T6) //AT=80030A7C= -ADDIU T5,SP,06D4 -LW T7,0004 (T6) -SW AT,0000 (T5) //SW AT,06D4 (SP) -LW AT,0008 (T6) -OR V1,V0,R0 -SW T7,0004 (T5) //SW T7,06D8 (SP) -BNEZ V0,7F035DE8 -SW AT,0008 (T5) //SW AT,06DC (SP) -... just checks if there"s a left_handed weapon on guard#1 --7F035DE8 -BEQL V0,R0,... - ... -LW T8,0018 (S3) //T8= GUARD#2 8006 -LW T1,0018 (S0) //T1= GUARD#1 8006 -ADDIU A0,SP,06D4 -LWC1 F18,0008 (T8) //F18= GUARD#1 xpos -LWC1 F4,0008 (T1) //F4= GUARD#2 xpos -ADDIU A1,SP,06D8 -ADDIU A2,SP,06DC -SUB.S F6,F18,F4 //F6= D.xpos -SWC1 F6,06D4 (SP) -LW T3,0018 (S0) //T3= GUARD#1 8006 -LW T2,0018 (S3) //T2= GUARD#2 8006 -LWC1 F10,000C (T3) //F10= GUARD#1 ypos -LWC1 F8,000C (T2) //F8= GUARD#2 ypos -SUB.S F16,F8,F10 //F6= D.ypos -SWC1 F16,06D8 (SP) -LW T9,0018 (S0) //T9= GUARD#1 8006 -LW T4,0018 (S3) //T4= GUARD#2 8006 -LWC1 F4,0010 (T9) //F4= GUARD#1 zpos -LWC1 F18,0010 (T4) //F18=GUARD#2 zpos -SW V1,06E4 (SP) -SUB.S F6,F18,F4 //F6= D.zpos -JAL 7001F750 -SWC1 F6,06DC (SP) -LW V1,06E4 (SP) -LB A1,0003 (S1) //A1= x -OR A0,S3,R0 //A0= GUARD#2 handle -LW V0,0004 (V1) -ADDIU A2,SP,06D4 //A2= Pointer to difference between two positions -LB A3,0080 (V0) //A3= weapon type -JAL 7F02727C -SW R0,0010 (SP) -RETURN... - --- -7F035E78 1A.rr throw grenade -JAL 7F03457C -OR A0,S7,R0 -BEQ V0,R0,7F035EA0 -OR A0,S6,R0 -OR A1,S2,R0 -JAL 7F0352F0 -LBU A2,0001 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C //return -ADDU S1,S6,V0 -//7F035EA0 -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 - -//7F03457C: -through 7F0345A4: tests if random value/256 < 0x10 Offset -7F0345B4 JAL 7F032DE4 (handles position info) -through 7F0345D0: tests if player too close -7F0345E0 JAL 7F02A258 (V0=0 if dying, getting shot, etc) - -//7F0345F0: check left hand weapon -JAL 7F02302C //A1=hand (1-L, 0-R); returns V0=8006 for guard weapon -ADDIU A1,R0,0000 -SW V0,0024 (SP) -OR A0,S0,R0 -JAL 7F02302C //V0=right hand weapon 8006 -OR A1,R0,R0 -LW A1,0024 (SP) //A1=lefty weapon -BEQ V0,R0,7F034644 //branch if right hand empty -SW V0,0020 (SP) -//7F034614: left hand -LW V1,0004 (V0) //V1=weapon data offset -ADDIU AT,R0,001A //AT=grenade type -OR A0,S0,R0 //A0=guarddata -LB T8,0080 (V1) //T8=weapon type -OR A2,R0,R0 //A2=right hand? -OR A3,R0,R0 -BNE T8,AT,7F034644 //branch if not a grenade -NOP -//7F034634: chuck it! -JAL 7F024238 -OR A1,V0,R0 //A1=V0=8006 for weapon -BEQ R0,R0,7F0346E8 -ADDIU V0,R0,0001 -//7F034644: right hand weapon test -BEQ A1,R0,7F034678 //branch if hand empty -NOP -LW V1,0004 (A1) //V1=weapon object data -ADDIU AT,R0,001A //AT=grenade type -OR A0,S0,R0 -LB T9,0080 (V1) //T9=held weapon type -ADDIU A2,R0,0001 //A2=left hand? -BNE T9,AT,7F034678 //I ain't got no limbs left! -NOP -//7F034668: chuck it! -JAL 7F024238 -OR A3,R0,R0 -BEQ R0,R0,7F0346E8 -ADDIU V0,R0,0001 -//7F034678: messy redirection -BEQ A1,R0,7F034688 //keep going if hand was empty -OR A0,S0,R0 //A0=guarddata -BNEL V0,R0,7F0346E8 //kill it if you've got a weapon - OR V0,R0,R0 -//7F034688: -BEQ V0,R0,7F034694 -OR A3,R0,R0 //if no weapons at all, A3=0. Otherwise, A3=10000000 -LUI A3,1000 -ADDIU A1,R0,00C4 //A1=grenade model -JAL 7F0523D4 //loads a grenade to empty hand! -ADDIU A2,R0,001A //A2=grenade type -BEQ V0,R0,7F0346E4 //if new 8006 NULL, skip out -OR A1,V0,R0 //A1=new object 8006 -LW V1,0004 (V0) //V1=object data for weapon (80071E80, for instance) -OR A0,S0,R0 -ADDIU A2,R0,0001 /A2=1 -LW T0,0064 (V1) //T0=0x64 in object data. Can't remember use -ORI T1,T0,0800 -SW T1,0064 (V1) -LW T2,0020 (SP) //T2=right hand weapon 8006 -BNEZ T2,7F0346D4 //replace left (A2=1) -NOP -BEQ R0,R0,7F0346D4 //replace right (A2=0) -OR A2,R0,R0 -//7F0346D4: chuck the thing! A2=that which is chucked -JAL 7F024238 //chuck hand=A2. A3=1 when permanent -ADDIU A3,R0,0001 -BEQ R0,R0,7F0346E8 //happy return=1 -ADDIU V0,R0,0001 -//7F0346E4 -OR V0,R0,R0 //V0=0 when nothing is chucked -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - - -7F0523D4: guard draws new weapon of type, returns V0=8006 for it - accepts: A1=wep model, A2=wep type -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW R0,0010 (SP) -JAL 7F052214 -SW R0,0014 (SP) -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - --7F024238 throw object from hand - expects: A2=hand(0R 1L),A3=1 if temp object, S0=guarddata - - -7F02302C: retrieve current guard weapon 8006 data - expects A0=guarddata, A1=right-0:left-1 FRIES T7 - returns V0=8006 for weapon in hand -SLL T6,A1,0x2 -ADDU T7,A0,T6 -JR RA -LW V0,0160 (T7) - --- -7F035EAC: type 1B - 1B.xxXX.yy.rr drop armed weapon -LBU T5,0001 (S1) -LBU T7,0002 (S1) -OR A0,S7,R0 -SLL T6,T5,0x8 -OR V0,T6,T7 -ANDI A1,V0,FFFF //A1=2byte x value -JAL 7F0346FC -LBU A2,0003 (S1) //A2=type of weapon - --7F0346FC: -ADDIU SP,SP,FFE0 -SW A0,0020 (SP) -SW RA,0014 (SP) -ANDI T6,A2,00FF //T6=1byte weapon value -OR A0,A1,R0 -SW A2,0028 (SP) -JAL 7F05206C //A0=model, A1=type. loads weapon (probably) -OR A1,T6,R0 - -7F038AF4: type BE - spawn weapon - --- -7F036218: type 1C - 1C.xxXX jog to preset -LBU T4,0001 (S1) //T4=x upper half of preset -LBU T5,0002 (S1) //T5=X lower half of preset -OR A0,S7,R0 //A0=pointer to guard block -SLL T9,T4,0x8 //T9=T4*0x100 -OR V0,T9,T5 //V0=preset -ANDI A1,V0,FFFF //A1=V0 reduced to a 2byte short -JAL 7F02ABB4 //A2 -> jog to preset -ADDIU A2,R0,0001 -ADDIU S2,S2,0003 //inc offset -BEQ R0,R0,7F03558C -ADDIU S1,S1,0003 - --- -7F036244: type 1D - 1D jog to alarm (preset noted in guard data) -OR A0,S7,R0 //A0=pointer to guard block -LH A1,0114 (S7) //A1=guard data + 0x114 -JAL 7F02ABB4 -ADDIU A2,R0,0001 //jog to A1 preset... -ADDIU S2,S2,0001 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 - --7F02ABB4: set guard movement. A0=address, A1=preset, A2=speed - -guard data amendment: -type 09: -00000009 iiii 0xxx bbbb aaaa pppp ???? llll rrrr ???? hhhh ???????? -i ID number -0xxx 0xxx preset to be spawned at -b body -a action/path assignment -p preset of an alarm to trigger or other path-related object (default FFFF) set to 0x114 -? unknown (default FFFF) -l life (health). 1 bullet ~E4 -r reaction time? accuracy? -? unknown (default FFFF) -h head. random=FFFF -? last 8 bytes unknown. - --- -7F036260: type 1E - 1E.xxXX walk to preset -same as 1C, except passes 0 as action to take --- -7F03628C: type 1F - 1F.xxXX run to preset -same as 1C, except passes 2 as action to take --- -7F0362B8: type 20 - 20.xx activate path -JAL 7F035434 //V0=p->path -LBU A0,0001 (S1) //A0=path# -OR A0,S7,R0 -JAL 7F02AD54 -OR A1,V0,R0 -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 --- -7F035EF8 21 surrender -JAL 7F033364 -OR A0,S7,R0 - --- -7F035F0C 22 fade away guard -JAL 7F0333A0 -OR A0,S7,R0 - --7F0333A0: -JAL 7F0247B8 - --7F0247B8: -... -LB T6,0007 (A0) -ADDIU AT,R0,0005 -BEQL T6,AT,... - ... -JAL 7F02D184 -SW A0,0018 (SP) -LW A0,0018 (SP) //A0= GUARDdata -ADDIU T7,R0,0005 -ADDIU T8,R0,FFFF -SB T7,0007 (A0) //fade away action -SW T8,002C (A0) -SB R0,0008 (A0) -reset vars and RETURN - --- -7F035F20 23.## eliminate guard ID# -OR A0,S7,R0 -JAL 7F033040 //returns V0= GUARDdata for ID# -LBU A1,0001 (S1) -BEQ V0,R0,... -... -LW T1,0018 (V0) //T1= GUARD 8006 -BEQ T1,R0,... -NOP -LHU T2,0012 (V0) //T2= typically set by loop counter... -ORI T3,T2,0020 //eliminate guard! -SH T3,0012 (V0) //toggle 0x0020 on GUARDdata 0x12 -RETURN... - --- -7F035F54: type 24 - 24.xxXX.rr activate object at preset -LBU T4,0001 (S1) -LBU T5,0002 (S1) -OR A0,S7,R0 -SLL T9,T4,0x8 -OR V0,T9,T5 -JAL 7F034514 //tests... -ANDI A1,V0,FFFF //A1=2byte x value -BEQ V0,R0,7F035F90 -OR A0,S6,R0 -OR A1,S2,R0 -JAL 7F0352F0 //return A2 -LBU A2,0003 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C -ADDU S1,S6,V0 -7F035F90: -ADDIU S2,S2,0004 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0004 - --7F034514: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F032F94 //handle 2328 presets -SW A0,0018 (SP) //A0=guard pointer -SW V0,001C (SP) //+1C=preset value -JAL 7F02A258 //test if guard getting shot or something... -LW A0,0018 (SP) //A0=guard pointer -BEQL V0,R0,7F03456C //if last test FALSE, return - OR V0,R0,R0 -JAL 7F03FA44 -LW A0,001C (SP) //A0=preset value -BEQ V0,R0,7F034568 //V0=pointer to object at that location -OR A0,V0,R0 -JAL 7F04EF34 -NOP -BEQL V0,R0,7F03456C - OR V0,R0,R0 -JAL 7F024150 -LW A0,0018 (SP) -BEQ R0,R0,7F03456C -ADDIU V0,R0,0001 -7F034568: -OR V0,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --7F032F94: handle 2328 presets -ADDIU AT,R0,2328 -BNE A1,AT,7F032FA4 //if not previously loaded value "2328" -NOP -LH A1,0114 (A0) //grab preloaded value -7F032FA0: -JR RA -OR V0,A1,R0 //V0=preset value - --7F02A258: if getting shot or ???, V0=1 -LB V0,0007 (A0) //V0=guard data +0x7 (activity? 01 walk, etc?) -ADDIU AT,R0,0004 -BEQ V0,AT,7F02A290 //if dying, V0=0 -ADDIU AT,R0,0005 -BEQ V0,AT,7F02A290 //if fading away, V0=0 -ADDIU AT,R0,0007 -BEQ V0,AT,7F02A290 //if ???, V0=0 -ADDIU AT,R0,0006 -BEQ V0,AT,7F02A29C //if getting shot, V0=1 -ADDIU V0,R0,0001 -LW T6,0014 (A0) //T6=guard bitflags -ANDI T7,T6,0200 //T7=test for 00000200 -BNEL T7,R0,7F02A29C - ADDIU V0,R0,0001 -7F02A290: return FALSE -JR RA -OR V0,R0,R0 -ADDIU V0,R0,0001 -7F02A29C: return TRUE -JR RA -NOP - --- -7F035F9C: type 25 - 25 turn on alarm -JAL 7F055DC8 -NOP -ADDIU S2,S2,0001 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 - --7F055DC8: start alarm -LUI V0,8003 -ADDIU V0,V0,0AC0 //V0=80030AC0 -LW T6,0000 (V0) -ADDIU T7,R0,0001 -BGTZ T6,7F055DE4 //if already on, branch -NOP -SW T7,0000 (V0) //1->80030AC0 -7F055DE4: -JR RA -NOP --- -7F005FB0: type 26 - 26 turn off alarm -JAL 7F055E2C -NOP -ADDIU S2,S2,0001 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 - --7F055E2C: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI AT,8003 -JAL 7F055DEC -SW R0,0AC0 (AT) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --7F055DEC: alarm routine? -LUI A0,8003 -LW A0,0AC4 (A0) //A0= pointer... -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQL A0,R0,7F055E20 //if not valid, just return - LW RA,0014 (SP) -JAL 70008DF0 //looks at pointer and stores 0x3F-> V0 -NOP -7F055E0C: -BEQ V0,R0,7F055E1C //V0 either =1 or 0 -LUI A0,8003 -JAL 70009020 -LW A0,0AC4 (A0) //A0=value @ 80030AC4 -7F055E1C: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --- -7F035FC4 type 27 - 27.rr invalid type (only returns false) -JAL 7F0344FC -OR A0,S7,R0 //current guard address -BEQ V0,R0,7F035FEC -OR A0,S6,R0 -OR A1,S2,R0 -JAL 7F0352F0 //return A2 -LBU A2,0001 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C -ADDU S1,S6,V0 -7F035FEC: -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 - --7F0344FC: -SW A0,0000 (SP) //store guard address -JR RA -OR V0,R0,R0 //V0=0 - --- -7F035FF8 type 28 - 28.rr jog to bond -OR A0,S7,R0 -JAL 7F0334A0 -ADDIU A1,R0,0001 - -STD.RETURN - --7F0334A0: guard to bond position -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) //store guard pointer -JAL 7F02A258 -SW A1,001C (SP) //store speed -BEQ V0,R0,7F0334F8 -LUI T6,8003 -LW T6,CE50 (T6) //T6=8002CE50=? -SLTI AT,T6,000A -BEQL AT,R0,7F0334FC - OR V0,R0,R0 -JAL 7F089798 -NOP -LW A0,0018 (SP) //A0=p->guarddata -ADDIU A1,V0,0008 //A1=p->cur.player xyz pos -LW A2,0014 (V0) //A2=player's room -JAL 7F028DDC -LW A3,001C (SP) //A3=speed -BEQL V0,R0,7F0334FC - OR V0,R0,R0 -BEQ R0,R0,7F0334FC -ADDIU V0,R0,0001 -7F0334F8: -OR V0,R0,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --- -7F036030 type 29 - 29.rr walk to bond -same as 28, A1=0 --- -7F036068 type 2A - 2A.rr run to bond -same as 28, A1=2 --- -7F0360A0 type 2B - 2B.rr invalid type (only returns false) -JAL 7F034508 -OR A0,S7,R0 //A0=guard address - -STD. RETURN - --7F034508: always return false? That can't be it... stores guardaddy -SW A0,0000 (SP) -JR RA -OR V0,R0,R0 - --- -7F0360D4 type 2C - 2C.xx.rr jog to character position -OR A0,S7,R0 -LBU A1,0001 (S1) //A1=x value -JAL 7F03350C -ADDIU A2,R0,0001 //A2=1 - -STD.RETURN - --7F03350C: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A0,0018 (SP) //store guard addy -SW A1,001C (SP) //store x value -JAL 7F02A258 -SW A2,0020 (SP) //store movement type -BEQ V0,R0,7F033590 -LUI T6,8003 -LW T6,CE50 (T6) //T6=8002CE50=??? -LW A0,0018 (SP) //A0=guard addy -SLTI AT,T6,000A -BEQL AT,R0,7F033594 - OR V0,R0,R0 -JAL 7F033040 //returns V0=target guard addy -LW A1,001C (SP) //A1=x value -BEQL V0,R0,7F033594 - OR V0,R0,R0 -LW T7,001C (V0) //T7=? -BEQL T7,R0,7F033594 - OR V0,R0,R0 -LW T8,0018 (V0) //T8= 8006 data -BEQL T8,R0,7F033594 - OR V0,R0,R0 -LW V0,0018 (V0) //V0= 8006 position data -LW A0,0018 (SP) -LW A3,0020 (SP) //A3= movement type -ADDIU A1,V0,0008 //A1= xyz for guard -JAL 7F028DDC -LW A2,0014 (V0) //room pointer -BEQL V0,R0,7F033594 - OR V0,R0,R0 -BEQ R0,R0,7F033594 -ADDIU V0,R0,0001 -7F033590: -OR V0,R0,R0 -7F033594: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --7F033040: //returns V0= pointer to guardID#[A1]'s data -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F032FAC -NOP -OR A0,V0,R0 //A0=result from 7F032FAC -JAL 7F022FC8 -SW V0,001C (SP) //save result -LW A2,001C (SP) //A2=result from 7F032FAC -BNEZ V0,7F0330B0 -OR T0,V0,R0 -LUI A1,8003 -LW A1,0980 (A1) //A1=80030980=value? -OR V0,R0,R0 -LUI A3,8003 -BLEZL A1,7F0330B4 - LW RA,0014 (SP) -LW A3,097C (A3) //A3=8003097C=pointer -OR A0,R0,R0 -OR V1,A3,R0 -7F03308C: -LH T6,0000 (V1) -ADDIU V0,V0,0001 -SLT AT,V0,A1 -BNE A2,T6,7F0330A8 -ADDIU V1,V1,01DC -BEQ R0,R0,7F0330B0 -ADDU T0,A0,A3 -7F0330A8: -BNEZ AT,7F03308C -ADDIU A0,A0,01DC -7F0330B0: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,T0,R0 -JR RA -NOP - --7F032FAC: returns V0= guardID# -ADDIU AT,R0,00FA -BNEL A1,AT,7F032FC4 //test x==FA -ADDIU AT,R0,00FB -JR RA -LH V0,0118 (A0) //V0=offset 0x118 (FA) -7F032FC4: -BNEL A1,AT,7F032FD8 //test x==FB -ADDIU AT,R0,00FC -JR RA -LH V0,011A (A0) //V0=offset 0x11A (FB) -7F032FD8: -BNEL A1,AT,7F032FEC -ADDIU AT,R0,00FD //test x==FC -JR RA -LH V0,0116 (A0) //V0=offset 0x116 (FC) -7F032FEC: -BNEL A1,AT,7F033000 -ADDIU AT,R0,00F9 //test x==FD -JR RA -LH V0,0000 (A0) //V0=offset 0 (F9) -7F033000: -BNEL A1,AT,7F033018 //test x==F9 -ADDIU AT,R0,00F8 -LH A1,0000 (A0) //A1=current guardID# -JR RA -ADDIU V0,A1,2710 //V0=2710+current guardID# -7F033018: -BNEL A1,AT,7F033038 //test x==F8 -LUI T6,8008 -LW T6,A0B0 (T6) //T6=8007A0B0=pointer -LW T7,00A8 (T6) //8006 position data -LW V0,0004 (T7) //pointer to object data -BEQ V0,R0,7F033038 //if pointer NULL, branch -NOP -LH A1,0000 (V0) -7F033038: -JR RA -OR V0,A1,R0 //V0=A1=original value - - --- -7F036110 type 2D - 2D.xx.rr walk to character position -same as 2C, A2=0 --- -7F03614C type 2E - 2E.xx.rr run to character position -same as 2C, A2=2 --- -7F0358F8 type 2F - 2F.rr return if guard not moving -JAL 7F029C5C -... -BEQ V0,R0,... -... -STD. RETURN - --7F029C5C: - - --- -7F03592C 30.##.rr if guardID# killed, return -...get guard pointer -JAL 7F02A2A4 -NOP -BEQ V0,R0,... -... -STD. RETURN - --7F02A2A4: check if guard dying flag set -LB V1,0007 (A0) //V1= GUARDdata action type -XORI V0,V1,0004 //V0= bit toggled (dying) -SLTIU V0,V0,0001 //TRUE if dying -BNEZ V0,7F02A2C0 //if anything other than 1 toggled, return -NOP -XORI V0,V1,0005 //V0= untoggle 4 and 1 (fade away) -SLTIU V0,V0,0001 //TRUE if fading away -JR RA -NOP - --- -7F035974 31.xx.rr if bond in room with guardID#, return -OR A0,S7,R0 -JAL 7F033040 //RETURNS V0=handle to guardID -LBU A1,0001 (S1) -BEQ V0,R0,7F035990 - --- -7F0359B4 32.rr if bond in sight, return --- -7F036188 33 seed random byte - --7000A450: create psuedo-random byte -LUI A0,8002 -LD A0,4460 (A0) //create and store twiddled seed at 80024460 - - --- -7F0361A0 type 34 - 34.xx.rr val>seed, return -LBU T8,010F (S7) // S7=guard data pointer -LBU T1,0001 (S1) //T1=valuex S1=pointer to command -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,T8,T1 //seed < x -BEQL AT,R0,7F0361D4 - ADDIU S2,S2,0003 -JAL 7F0352F0 //return A2 -LBU A2,0002 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C -ADDU S1,S6,V0 -ADDIU S2,S2,0003 -7F0361D4: -BEQ R0,R0,7F03558C -ADDIU S1,S1,0003 - --- -7F0361DC type 35 - 35.xx.rr val 0 -NOP -BC1F 7F055F5C //return V0=1 if F6 > 0 -NOP -ADDIU V0,R0,0001 -7F055F5C: -JR RA -NOP - ----also seen at: -7F055FC4 -ADDIU V1,V1,0AC8 -LWC1 F0,0000 (V1) -LUI T7,8003 -C.LT.S F16,F0 -NOP -BC1FL 7F056154 //if F16 <= 0, kill - LW RA,001C (SP) -LW T7,64B4 (T7) //T7= 800364B4 (object collisions?) -LUI AT,8007 -BNEL T7,R0,7F056154 - LW RA,001C (SP) -LWC1 F18,1E78 (AT) //F18=80071E78= something like sky density -JAL 7F0BACA8 -DIV.S F12,F0,F18 // - ---------- -7F036374 39.rr -JAL 7F033354 -OR A0,S7,R0 - --7F033354: -LHU V0,0012 (A0) ;V0=bitflags -ANDI T6,V0,0002 -JR RA -SLTU V0,R0,T6 ;TRUE if flag 02 set - --- -7F0363A8 3A.rr return if FA target has been set --- -7F0363DC 3B.rr return if FB target has been set --- -7F036410 3C.rr -JAL 7F0294BC -OR A0,S7,R0 --- -7F036444 3D.rr -JAL 7F033DC4 -OR A0,S7,R0 -BEQ V0,R0,... -... -STD. RETURN - --7F033DC4: -... -SW S1,0028 (SP) -SW S0,0024 (SP) -JAL 7F089798 //returns V0= BOND 8006 -SW A0,0060 (SP) -LW T6,0060 (SP) //T6= GUARDcur -OR S1,V0,R0 //S1= BONDdata -LW S0,0018 (T6) //S0= GUARDcur 8006 -LW T7,0014 (S0) //T7= room pointer -JAL 7F0B1CC4 -SW T7,0054 (SP) -LWC1 F4,0010 (S1) //F4= BOND zpos -LW A1,0008 (S0) //A1= GUARDcur xpos -LW A2,0010 (S0) //A2= GUARDcur zpos -LW A3,0008 (S1) //A3= BOND xpos -ADDIU A0,SP,0054 -JAL 7F0B0BE4 -SWC1 F4,0010 (SP) -BEQ V0,R0,7F033E20 -ADDIU A0,SP,0048 -BEQ R0,R0,... -OR V0,R0,R0 --7F033E20 -JAL 7F0B28B0 -ADDIU A1,SP,003C -LW A2,0014 (S0) //A2= GUARDcur room pointer -ADDIU V1,S1,0008 //V1= BOND xyz -SW V1,0010 (SP) -LW T8,0014 (S1) //T8= BOND room pointer -ADDIU A1,S0,0008 //A1= GUARDcur xyz -SW A1,0038 (SP) -SW V1,0034 (SP) -SW R0,0018 (SP) -LW A0,0060 (SP) //A0= GUARDcur -ADDIU A3,SP,0048 -JAL 7F0304AC -SW T8,0014 (SP) -LW V1,0034 (SP) //V1= BOND xyz -BNEZ V0,7F033E8C -LW A1,0038 (SP) //A1= GUARDcur xyz -LW A2,0014 (S0) //A2= GUARDcur room pointer -SW V1,0010 (SP) -LW T9,0014 (S1) //T9= BOND room pointer -SW R0,0018 (SP) -LW A0,0060 (SP) //A0= GUARDcur -ADDIU A3,SP,003C -JAL 7F0304AC -SW T9,0014 (SP) -BEQL V0,R0,... -OR V0,R0,R0 --7F033E8C -BEQ ... -ADDIU V0,R0,0001 -RESET VARS AND RETURN - - ---7F0B1CC4: -LUI AT,8008 -SW R0,B9E4 (AT) //0->8007B9E4 -LUI AT,8008 -SW R0,B9E8 (AT) //0->8007B9E8 -LUI AT,8004 -JR RA -SW R0,13BC (AT) //0->800413BC - ---7F0B0BE4: -ADDIU SP,SP,FFD8 -MTC1 A1,F12 //F12= GUARDcur xpos -MTC1 A2,F14 //F14= GUARDcur zpos -LWC1 F4,0038 (SP) //F4= BOND zpos [SP+10] -SW RA,0024 (SP) -MFC1 A1,F12 //A1= GUARDcur xpos -MFC1 A2,F14 //A2= GUARDcur zpos -SW A3,0034 (SP) //A3->SP=34: BOND xpos -SW R0,0014 (SP) -SW R0,0018 (SP) -JAL 7F0B0914 -SWC1 F4,0010 (SP) //SP+10=F4: BOND zpos -LW RA,0024 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - --- -7F036478 3E.rr if shot return? -JAL 7F032B68 -OR A0,S7,R0 --- -7F0364AC 3F.rr if heard player return? -JAL 7F032BA0 -OR A0,S7,R0 --- -7F0364E0 40.##.rr if current guard in the same room as GUARD#, return -(not completely sure) -OR A0,S7,R0 -JAL 7F033040 //returns V0= handle to guardID# -LBU A1,0001 (S1) -BEQL V0,R0,7F036538 - ADDIU S2,S2,0003 -LW T6,0018 (V0) //T6= guard 8006 position data -BEQL T6,R0,7F036538 - ADDIU S2,S2,0003 -LW V0,0018 (V0) //V0= guard 8006 position data -OR A0,S7,R0 //A0= pointer to current guardID -ADDIU A1,V0,0008 //A1= P->xyz for guard -JAL 7F0295D0 -LW A2,0014 (V0) //A2= room pointer -BEQ V0,R0,7F036534 -OR A0,S6,R0 -OR A1,S2,R0 -STD. RETURN - --7F0295D0: -... -SW A1,0044 (SP) -SW A2,0048 (SP) -LUI AT,41A0 -MTC1 AT,F6 //F6= 41A00000 20.0 -LWC1 F4,0028 (A0) // -LW V0,0018 (A0) //V0= GUARD 8006 -SW R0,0030 (SP) -SUB.S F0,F4,F6 //F0= guard float-41A00000 -SW A0,0040 (SP) -OR A1,R0,R0 -SW V0,003C (SP) -JAL 7F01F5E8 //sets GUARD 0x12 if xyz pointer invalid (unsets if not) -SWC1 F0,0034 (SP) -LW V0,003C (SP) //V0= GUARD 8006 -LW V1,0044 (SP) //V1= GUARD xyz -LWC1 F0,0034 (SP) //F0= converted float -LW T6,0014 (V0) //T6= room pointer -LUI AT,3F80 -MTC1 AT,F16 //F16= 3F800000 1.0 -SW T6,0038 (SP) -LWC1 F8,0008 (V1) //F8= zpos -LW A2,0010 (V0) //A2= zpos -LW A1,0008 (V0) //A1= xpos -LW A3,0000 (V1) //A3= xpos -MTC1 R0,F10 -ADDIU T7,R0,0113 -SW T7,0014 (SP) -ADDIU A0,SP,0038 -SWC1 F0,001C (SP) -SWC1 F0,0018 (SP) -SWC1 F16,0024 (SP) -SWC1 F8,0010 (SP) -JAL 7F0B0E24 -SWC1 F10,0020 (SP) -BEQ V0,R0,7F029680 -ADDIU A1,R0,0001 -LW T8,0038 (SP) //T8= room pointer -LW T9,0048 (SP) //T9= room pointer -ADDIU T0,R0,0001 -BNE T8,T9,7F029680 -NOP -SW T0,0030 (SP) --7F029680 -JAL 7F01F5E8 //sets GUARD 0x12 if xyz pointer invalid (unsets if not) -LW A0,0040 (SP) -LW RA,002C (SP) -LW V0,0030 (SP) //V0= 1 if room pointers match -ADDIU SP,SP,0040 -JR RA -NOP - ---7F01F5E8: if xyz pointer invalid set 0100 @GUARD 0x12. unset if valid -BEQL A1,R0,7F01F604 - LHU T8,0012 (A0) -LHU T6,0012 (A0) -ANDI T7,T6,FEFF -JR RA -SH T7,0012 (A0) --7F01F604 //if P->GUARDxyz invalid -ORI T9,T8,0100 -SH T9,0012 (A0) -JR RA -NOP - -7f02b800 if seen guard get shot, sets that ID to viewer and returns --- -7F036540 41.rr guard has been loaded/on screen -LW T7,0014 (S7) //T7= GUARDcur bitflags -OR A0,S6,R0 -OR A1,S2,R0 -ANDI T8,T7,0008 //T8= test for 8 (loaded - has been seen?) -BNEL T8,R0,... - ADDIU S2,S2,0002 -STD. RETURN - --- -7F036578 42.rr if current guard on screen, return -LW T1,0018 (S7) //T1= GUARDcur 8006 position data -OR A0,S6,R0 -OR A1,S2,R0 -LBU T2,0001 (T1) //T2= 8006 type or state data... -ANDI T3,T2,0002 //T3= test for 2 (physically on screen) -BEQL T3,R0, ... - ADDIU S2,S2,0002 -STD. RETURN - --- -7F0365B4 43.rr if guard in a room currently loaded, return -LW T4,0018 (S7) //T4= GUARDcur 8006 -JAL 7F0B2FD8 //returns V0= room number -LW A0,0014 (T4) //A0= GUARDcur room pointer -JAL 7F0B5E50 //returns V0= pointer of loaded room data -OR A0,V0,R0 -BEQ V0,R0,... -... -STD. RETURN - --- -7F0365F4 44.xxxx.rr if room containing preset[x] is loaded, return - -LBU T9,0001 (S1) -LBU T6,0002 (S1) -OR A0,S7,R0 -SLL T5,T9,0x8 -OR V0,T5,T6 -JAL 7F032EFC //grabs room data from preset value x -ANDI A1,V0,FFFF //A1= xxxx -BEQ V0,R0,7F036630 //if room loaded, return -OR A0,S6,R0 -OR A1,S2,R0 -STD. RETURN - --7F032EFC: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F032F94 //returns V0= preset (sorts out 2328) -NOP -SLTI AT,V0,2710 -BEQ AT,R0,7F032F3C -SLL T8,V0,0x4 -SLL T6,V0,0x2 -SUBU T6,T6,V0 -SLL T6,T6,0x2 -LUI T7,8007 -LW T7,5D18 (T7) -SUBU T6,T6,V0 -SLL T6,T6,0x2 -BEQ R0,R0,7F032F5C -ADDU V1,T6,T7 -LUI T9,8007 //0xxx preset -LW T9,5D1C (T9) -ADDU T8,T8,V0 -SLL T8,T8,0x2 -LUI AT,FFF5 -ORI AT,AT,9FC0 -ADDU V1,T8,T9 -ADDU V1,V1,AT --7F032F5C: //V1= pointer to preset -LW A0,0028 (V1) //A0= preset room pointer -OR V0,R0,R0 -BEQ A0,R0,7F032F84 -NOP -JAL 7F0B2FD8 //V0= A0+0x3 (room number) -NOP -JAL 7F0B5E50 //returns V0= pointer to loaded room data -OR A0,V0,R0 //A0= room# -BEQ R0,R0,7F032F88 -LW RA,0014 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --7F0B5E50: -SLL T6,A0,0x2 //T6= 4# -ADDU T6,T6,A0 //T6= 5# -SLL T6,T6,0x4 //T6= 50# (80*ROOM NUMBER) -LUI V0,8004 -ADDU V0,V0,T6 -JR RA -LBU V0,1414 (V0) //V0=80041414= loaded room data - --- -7F03663C 45.rr return when guard on screen and within autoaim bounds - -JAL 7F0333F8 -OR A0,S7,R0 -BEQ V0,R0,7F036664 -OR A0,S6,R0 -STD. RETURN - --7F0333F8: -... -JAL 7F029760 -SW A0,0048 (SP) -BEQ V0,R0,7F03347C -LW T6,0048 (SP) //T6= GUARDdata -LW A0,001C (T6) //A0= GUARD model data -JAL 7F06D00C -SW A0,0044 (SP) -LUI AT,8005 -LWC1 F4,20D8 (AT) //F4= 800520D8 -ADDIU A0,SP,0038 -ADDIU A1,SP,002C -MUL.S F6,F0,F4 -JAL 7F068190 -SWC1 F6,001C (SP) -LW A0,0044 (SP) //A0= GUARD model data -JAL 7F06CB98 -ADDIU A1,SP,0020 -JAL 7F0783C4 //returns V0= BONDdata 0x10CC -NOP -OR A0,V0,R0 -JAL 7F058474 -ADDIU A1,SP,0020 -ADDIU A0,SP,0038 -ADDIU A1,SP,002C -ADDIU A2,SP,0020 -JAL 7F041074 //returns V0= 1 if visible guard shot at -LW A3,001C (SP) -BEQL V0,R0,7F033480 - OR V0,R0,R0 -BEQ R0,R0,7F033480 -ADDIU V0,R0,0001 --7F03347C -OR V0,R0,R0 --7F033480 -LW RA,0014 (SP) -ADDIU SP,SP,0048 -JR RA -NOP - --7F041074: -long story short, returns 1 if visible guard was shot at - --- -7F036670 46.rr return if invisible -JAL 7F033490 -OR A0,S7,R0 -BEQ V0,R0,7F03.... -OR A0,S6,R0 -STD. RETURN - --7F033490: - ---//47-4A: x->float. might be sight/distance or notice thingies. -7F0366A4 47.xx.rr if x > distance between current and Bond, return -JAL 7F032C4C -OR A0,S7,R0 - --7F032C4C: -... -JAL 7F089798 //returns V0= BOND 8006 -SW A0,0018 (SP) -LW A0,0018 (SP) //A0= GUARDcur -JAL 7F032BD8 -ADDIU A1,V0,0008 //A1= BONDxyz -reset and RETURN... - ---7F032BD8: returns F0= distance between current and BOND - --- -7F036718 48.xx.rr if x < distance between current and Bond, return --- -7F03678C 49.xx.rr if x > F0, return angle b/w guard and player -JAL 7F032D70 -OR A0,S7,R0 - --7F032D70: -... -JAL 7F089EE4 -JAL 7F089798 //returns V0= BOND 8006 -JAL 7F05AA30 - ---7F089EE4: -LUI T6,8008 -LW T6,A0B0 (T6) //T6= BONDdata -LUI AT,43B4 -MTC1 AT,F2 //F2= 43B40000 -LWC1 F4,0148 (T6) //F4= BONDdata 0x148 -LUI AT,8005 -LWC1 F8,52B4 (AT) -SUB.S F6,F2,F4 -MUL.S F10,F6,F8 -JR RA -DIV.S F0,F10,F2 - --- -7F036800 4A.xx.rr if x < F0, return ????? --- -7F036874 4B.xxxx.rr return if within x units of Bond --- -7F0368DC 4C.xxxx.rr return if not within x units of Bond --- -7F036944 4D.##.xxxx.pppp.rr if GuardID# within x units of preset, return --- -7F0369D4 4E.##.xxxx.pppp.rr if GuardID# not within x units of preset, return --- -7F036A64 4F.xxxx.##.rr If current is within x units of GuardID#, return -...long story short, T4= xxxx -MTC1 T4,F8 -NOP -CVT.S.W F10,F8 -MUL.S F16,F10,F24 //F16= x converted to float and translated to scale -SWC1 F16,05CC (SP) -JAL 7F0330C4 //distance between guards -LBU A1,0003 (S1) -LWC1 F18,05CC (SP) //F18= x -OR A0,S6,R0 -OR A1,S2,R0 -C.LT.S F0,F18 //if guards closer than x, return -NOP -BC1FL 7F036AC8 -ADDIU S2,S2,0005 -STD. RETURN - --7F0330C4: //returns F0= distance between current guard and guardID#[A1] -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LW V1,0018 (A0) //V1= current guard 8006 position data -JAL 7F033040 //returns V0= handle to GuardID# -SW V1,001C (SP) -MTC1 R0,F2 -BEQ V0 invalid -LW V1,001C (SP) //V1= GUARDorg 8006 -LW T6,001C (V0) //T6= GUARD# equipment handle? -BEQL T6 invalid -... -LW T7,0018 (V0) //T7= GUARD# 8006 -BEQL T7 invalid -... -LW V0,0018 (V0) //V0= GUARD# 8006 -LWC1 F6,0008 (V1) //F6= GUARDorg xpos -LWC1 F10,000C (V1) //F10=GUARDorg ypos -LWC1 F4,0008 (V0) //F4= GUARDID# xpos -LWC1 F8,000C (V0) //F8= GUARDID# ypos -LWC1 F18,0010 (V1) //F18=GUARDorg zpos -SUB.S F0,F4,F6 //F0= xpos-xpos -LWC1 F16,0010 (V0) //F16=GUARDID# zpos -SUB.S F2,F8,F10 //F2= ypos-ypos -MUL.S F4,F0,F0 //F4= F0^2 -SUB.S F14,F16,F18 //F14= zpos-zpos -MUL.S F6,F2,F2 //F6= F2^2 -ADD.S F8,F4,F6 //F8= xpos^2 + ypos^2 -MUL.S F10,F14,F14 //F10= F14^2 -JAL 7001F7E0 //returns F0= sqrt(F12) -ADD.S F12,F8,F10 //F12= xpos^2 + ypos^2 + zpos^2 -MOV.S F2,F0 -LW RA,0014 (SP) -ADDIU SP,SP,0020 -MOV.S F0,F2 -JR RA -NOP - - --- -7F036AD0 50.xxxx.##.rr opposite of 4F --- -7F036B3C 51.xxxx.rr if current is within x units of another guard, return -checks if a guard is visible within x units of it. If a room uses special visibilty, this type will not work - -...long story short, T3= x -MTC1 T3,F16 -NOP -... F0= (float)x, converted to stage scale -MFC1 A1,F0 -JAL 7F033B38 -NOP -BEQ V0,R0,7F036B8C -OR A0,S6,R0 -STD. RETURN - --7F033B38: -ADDIU SP,SP,FF98 -MTC1 A1,F12 //F12= x converted -SW RA,0064 (SP) -SW S5,005C (SP) -OR S5,A0,R0 -S0->SPx60 -S4->SPx58 -S3->SPx54 -S2->SPx50 -S1->SPx4C -S0->SPx48 -D30->SPx40 -D28->SPx38 -D26->SPx30 -D24->SPx28 -D22->SPx20 -D20->SPx18 -JAL 7F01F530 //returns V0= #guards -D12->SPx6C -LW V1,0018 (S5) //V1= guard 8006 -LWC1 F12,006C (SP) //F12= x -OR S4,V0,R0 //S4= #guards -LWC1 F0,0008 (V1) //F0= xpos -LWC1 F2,000C (V1) //F2= ypos -LWC1 F14,0010 (V1) //F14=zpos -LW T6,0014 (V1) //T6= room pointer -OR S1,R0,R0 -SUB.S F20,F0,F12 //F20=xpos-x -LBU S3,0003 (T6) //S3= room# -ADD.S F22,F0,F12 //F22=xpos+x -SUB.S F24,F2,F12 //F24=ypos-x -ADD.S F26,F2,F12 //F26=ypos+x -SUB.S F28,F14,F12 //F28=zpos-x -BLEZ V0,7F033CB0 -ADD.S F30,F14,F12 //F30=zpos+x -LUI S6,8003 -ADDIU S6,S6,CC64 //S6=8002CC64 (guard data) -OR S2,R0,R0 --7F033BD0: //check all guards -LW T7,0000 (S6) //T7=GUARDdata handle -ADDU S0,S2,T7 //S0=GUARDx handle -BEQL S0,S5,7F033CA4 - ADDIU S1,S1,0001 -LW T8,001C (S0) //T8=GUARDx equipment handle? -BEQL T8,R0,7F033CA4 - ADDIU S1,S1,0001 -JAL 7F02A2A4 -OR A0,S0,R0 -BNEL V0,R0,7F033CA4 //THOSE FLAGS BETTER HAVE BEEN SET - ADDIU S1,S1,0001 -LW V1,0018 (S0) //V1= GUARDx 8006 -ADDIU V0,V1,0008 //V0= GUARDx xyz -//see if xpos falls within cur_xpos+-X -LWC1 F0,0000 (V0) //F0= GUARDx xpos -C.LE.S F20,F0 -NOP -BC1FL 7F033CA4 - ADDIU S1,S1,0001 -C.LE.S F0,F22 -NOP -BC1FL 7F033CA4 - ADDIU S1,S1,0001 -//see if ypos falls within cur_ypos+-X -LWC1 F0,0004 (V0) -C.LE.S F24,F0 -NOP -BC1FL 7F033CA4 - ADDIU S1,S1,0001 -C.LE.S F0,F26 -NOP -BC1FL 7F033CA4 - ADDIU S1,S1,0001 -//see if zpos falls within cur_zpos+-X -LWC1 F0,0008 (V0) -C.LE.S F28,F0 -NOP -BC1FL 7F033CA4 - ADDIU S1,S1,0001 -C.LE.S F0,F30 -NOP -BC1FL 7F033CA4 - ADDIU S1,S1,0001 -//check room pointer -LW T9,0014 (V1) //T9= room pointer -LBU A1,0003 (T9) //A1= room# -BEQL S3,A1,7F033C94 - LH T0,0000 (S0) //T0=guardID# -JAL 7F0B8FD0 //returns 1 if visible across standard room boundry -OR A0,S3,R0 -BEQL V0,R0,7F033CA4 - ADDIU S1,S1,0001 -LH T0,0000 (S0) --7F033C94: //if within range and in same room -ADDIU V0,R0,0001 -BEQ R0,R0,7F033CB4 -SH T0,0116 (S5) //GuardID#-> FC value --7F033CA0: -ADDIU S1,S1,0001 --7F033CA4: -SLT AT,S1,S4 //TRUE if S1(count) < #guards -BNEZ AT,7F033BD0 -ADDIU S2,S2,01DC //S2= next guard addy -OR V0,R0,R0 --7F033CB4: -RESTORE AND RETURN - --7F02A2A4: //check if guard dying flag set -LB V1,0007 (A0) //V1= weird flag... -XORI V0,V1,0004 -SLTIU V0,V0,0001 -BNEZ V0,7F02A2C0 -NOP -XORI V0,V1,0005 -SLTIU V0,V0,0001 --7F02A2C0: -JR RA -NOP - --7F0B8FD0: //check if guards are just across a visible room boundry -//returns 1 if visible through boundry, 0 if not -LUI V1,8008 -LW V1,FF80 (V1) //V1= pointer to portal table -OR A2,A0,R0 //A2= guard's room# -LW T6,0000 (V1) //T6= pointer to portal -OR A0,V1,R0 //A0= pointer to portal table -BEQL T6,R0,7F0B9038 - OR V0,R0,R0 -LBU V0,0004 (A0) //V0= room#1 --7F0B8FF0: -LBU V1,0005 (A0) //V1= room#2 -BNE V0,A2,7F0B900C //if room#1 != GUARDcur's room, branch -NOP -BNE V1,A1,7F0B900C //if room#2 != GUARDx's room, branch -NOP -JR RA -ADDIU V0,R0,0001 --7F0B900C: -BNEL V1,A2,7F0B9028 //if room#2 != GUARDcur's room, branch - LW T7,0008 (A0) -BNEL V0,A1,7F0B9028 //if room#1 != GUARDx's room, branch - LW T7,0008 (A0) -JR RA -ADDIU V0,R0,0001 --7F0B9028: //keep checking until out of pointers -ADDIU A0,A0,0008 -BNEL T7,R0,7F0B8FF0 - LBU V0,0004 (A0) -OR V0,R0,R0 -JR RA -NOP - --- -7F036B98 52.xxxx.pppp.rr if within x units of preset, return - -LBU T7,0001 (S1) -LBU T1,0002 (S1) -LBU T4,0003 (S1) -SLL T8,T7,0x8 -OR T2,T8,T1 //T2=xxxx -MTC1 T2,F4 //F4=xxxx -LBU T5,0004 (S1) -SLL T9,T4,0x8 -CVT.S.W F6,F4 //F6=float(xxxx) -OR V0,T9,T5 //V0=pppp -ANDI A1,V0,FFFF //A1=V0=pppp -OR A0,S7,R0 //A0=S7= current guard addy? -MUL.S F8,F6,F24 //F8= x * scale modifier or some such nonsense. -JAL 7F033154 -SWC1 F8,05B0 (SP) -LWC1 F10,05B0 (SP) //F10=F8 from above -OR A0,S6,R0 -OR A1,S2,R0 -C.LT.S F0,F10 -NOP -BC1FL 7F036C08 //return value if distance < F10 - ADDIU S2,S2,0006 -JAL 7F0352F0 -LBU A2,0005 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C -ADDU S1,S6,V0 -ADDIU S2,S2,0006 -//7F036C08: -BEQ R0,R0,7F03558C -ADDIU A1,A1,0006 - --7F033154: returns F0= distance b/w BOND and preset -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 7F089798 //returns V0=handle to BOND -SW A1,0024 (SP) -LW A0,0020 (SP) -LW A1,0024 (SP) -JAL 7F032F94 //returns V0=resolved preset -SW V0,001C (SP) -SLTI AT,V0,2710 -BEQ AT,R0,7F0331A8 //branch if a 2710 preset -LW A2,001C (SP) //A2=BOND handle -SLL T6,V0,0x2 //0xxx preset handle to V1 -SUBU T6,T6,V0 -SLL T6,T6,0x2 -LUI T7,8007 -LW T7,5D18 (T7) -SUBU T6,T6,V0 -SLL T6,T6,0x2 -BEQ R0,R0,7F0331CC -ADDU V1,T6,T7 -//7F0331A8: 2xxx preset handle to V1 -LUI T9,8007 -LW T9,5D1C (T9) -SLL T8,V0,0x4 -ADDU T8,T8,V0 -SLL T8,T8,0x2 -LUI AT,FFF5 -ORI AT,AT,9FC0 -ADDU V1,T8,T9 -ADDU V1,V1,AT -//7F0331CC: //compute distance -LWC1 F4,0000 (V1) //preset x coord -LWC1 F6,0008 (A2) //BOND x coord -LWC1 F8,0004 (V1) //preset y coord -LWC1 F10,000C (A2) //BOND y coord -SUB.S F0,F4,F6 //F0= x1-x2 -LWC1 F16,0008 (V1) //preset z coord -LWC1 F18,0010 (A2) //BOND z coord -SUB.S F2,F8,F10 //F2= y1-y2 -MUL.S F4,F0,F0 //F4= F0^2 -SUB.S F14,F16,F18 //F14= z1-z2 -MUL.S F6,F2,F2 //F6= F2^2 -ADD.S F8,F4,F6 //F8= X+Y -MUL.S F10,F14,F14 //F10= F14^2 -JAL 7001F7E0 //returns sqrt(F10)-> F0 -ADD.S F12,F8,F10 //F12= X+Y+Z -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - --- -7F036C10 53.xxxx.pppp.rr if not within x units of preset, return --- -7F036C88 54.##.pppp.rr when GuardID# at preset, return -... -ANDI A2,V0,FFFF -JAL 7F034388 -LBU A1,0001 (S1) --- -7F036CD4 55.xxxx.rr when at preset xxxx, return --- -7F036D1C 56.##.rr if collected tagged item, return -JAL 7F0570C0 ;V0=p->obj.data -LBU A0,0001 (S1) ;A0=obj tag# -BEQL V0,R0,+10 ;quit if invalid -ADDIU S2,S2,0003 -LW T1,0010 (V0) ;T1=p->obj.pos.data -BEQL T1,R0,+D ;quit if invalid -ADDIU S2,S2,0003 -JAL 7F08CFE0 -LW A0,0010 (V0) ;A0=p->obj.pos.data -etc... --- -7F036D6C 57.ii.rr if item# deposited, return - can only be used with 08 weapon types, seemingly -JAL 7F051AEC -LBU A0,0001 (S1) --- -7F036DA0 58.ii.##.rr if deposited item on tagged obj#, return ---------- -7F036E2C 59.##.rr if weapon value = ##, return rr --- -7F036E78 5A.##.rr if type16# obj loaded, return - actually tests if 0x10 != 0 - std. objs only return if the 8006 pointer is preset, which is only available when the object is loaded. ie. the flag in MP only would return if flag tag was on. You can test for BA in solo this way, since it only appears if certain difficulty levels are set. - most types that aren't standard objects would return false. However, the most common tagged types (guards, cutscene cameras) would return because data is stored at that offset. - --- -7F036EBC 5B.##.rr if tagged object not destroyed, return --- -7F036F0C 5C.##.rr if tagged object# activated, return --- -7F036F70 5D.##.rr use gadget on object -get handle to object -grab object's 8006 -test state vs. 40 (obj +2) -if toggled, untoggles and returns - -weapons that set flag: -bomb defuser -door decoder -datathief - --- -7F036FD0 5E.xx type 16#xx activates --- -7F037038 5F.xx detonate type 16#xx --- -7F0370B4 60.xx Guard Drops type 16#xx --- -7F037118 61.## kill guard# -A0= guard handle -T6= guard 8006 -JAL 7F021B20 //called when a guard dies. throw equipment? kill guard? - --7F021B20: -seems to do the same thing as type 62, but also includes the hat -checks 8006+0x20 to see if a hat, then compares to hat pointer from guard data - --- -7F03714C 62.## guard# throws gun -get handle to guard -pull guard 8006 - -7F03716C: -LW T8,0160 (V0) //T8= weapon 8006 -ADDIU A1,R0,0001 -BEQL T8,R0,7F037194 - LW A0,0164 (S0) -JAL 7F04BFD0 //----called in the drop type#16, and at guard death -LW A0,0160 (V0) //A0= weapon 8006 -LHU T1,0012 (S0) //T1= bit set by loop counter... -ORI T2,T1,0001 //T2= toggle first bit -SH T2,0012 (S0) //save back to thing set by loop counter -LW A0,0164 (S0) //A0= ??? --7F037194: -BEQL A0,R0,7F0371B4 - ADDIU S2,S2,0002 -JAL 7F04BFD0 -ADDIU A1,R0,0001 -LHU T3,0012 (S0) //T3= bit set by loop counter... -ORI T4,T3,0001 //T4= first bit toggled -SH T4,0012 (S0) //save back -RETURN... - --- -7F0371BC 63.## guard gives bond type16#xx item -get obj handle -send obj 8006 to 7F050250 //bond picks up object -send obj 8006 & ? to 7F03C2BC - --- -7F0371FC 64.##.gg tagged obj#; [g]uard# ??? -either [g]uard gives obj# to bond or picks up obj# - -JAL 7F0570C0 //returns V0= handle to tagged object -LBU A0,0001 (S1) //A0= # -OR S0,V0,R0 //S0= obj handle -OR A0,S7,R0 -JAL 7F033040 //returns V0= handle to [g]uardID# -LBU A1,0002 (S1) //A1= gg -BEQ S0,R0,7F037294 -OR S3,V0,R0 //S3= guard handle -LW A0,0010 (S0) //A0= 8006 for obj -BEQL A0,R0,7F037298 - ADDIU S2,S2,0003 -BEQL A0,R0,7F037298 - ADDIU S2,S2,0003 -LW T5,001C (A0) //T5= I'm not even sure if this = anything but 0 -BEQ T5,R0,7F03724C -NOP -JAL 7F04C044 -NOP -BEQ R0,R0,7F037268 -LBU T6,0003 (S0) --7F03724C: -JAL 7F03E18C -NOP -JAL 7F03A538 -LW A0,0010 (S0) //A0= 8006 of obj -JAL 7F03A414 -LW A0,0010 (S0) //A0= 8006 of obj -LBU T6,0003 (S0) //T6= obj type --7F037268: -ADDIU AT,R0,0008 -OR A0,S0,R0 //A0= obj handle -BNEL T6,AT,7F03728C //branch if not a weapon - LW A0,0010 (S0) //A0= 8006 of obj -JAL 7F051E1C -OR A1,S3,R0 //A1= guard handle -BNEL V0,R0,7F037298 - ADDIU S2,S2,0003 -LW A0,0010 (S0) --7F03728C: -JAL 7F03A5A4 -LW A1,0018 (S3) //A1= 8006 of guard --7F037294: -ADDIU S2,S2,0003 --7F037298: -BEQ R0,R0,7F03558C -ADDIU S1,S1,0003 - --- -7F0372A0 65.##.xxxx move object to preset --- -7F0373BC 66.## open tagged door --- -7F037400 67.## close tagged door -JAL 7F0570C0 //returns V0=handle to tagged object -LBU A0,0001 (S1) -BEQ V0,R0,7F037438 -OR A2,V0,R0 //A2= obj handle -LW A0,0010 (V0) //A0= 8006 position data -BEQL A0,R0,7F03743C - ADDIU S2,S2,0002 -LBU T8,0000 (A0) //T8= -ADDIU AT,R0,0002 -OR A0,V0,R0 -BNEL T8,AT,7F03743C - ADDIU S2,S2,0002 -JAL 7F054988 //set door state -ADDIU A1,R0,0002 -STD. RETURN --- -7F037444 68.##.ss.rr check [s]tate of door type16#, [r]eturn if true. -LBU A0,0001 (S1) -JAL 7F0570C0 //returns V0= tagged obj data -OR S0,R0,R0 -BEQ V0,R0,7F0374F0 -OR A0,S6,R0 -LW T1,0010 (V0) //T1= 8006 position data -BEQ T1,R0,7F0374F0 -NOP -LBU T2,0003 (V0) -ADDIU AT,R0,0001 -BNE T2,AT,7F0374F0 //if not a door, kill -NOP -LB V1,00BC (V0) -ADDIU AT,R0,0001 -BNEZ V1,7F0374B8 -NOP -etc... --- -7F037518 69.##.rr if object is a valid loaded door, return -JAL 7F0570C0 //returns V0= handle to tagged object# -LBU A0,0001 (S1) //A0= # -BEQL V0,R0,7F037574 -ADDIU S2,S2,0003 -LW T2,0010 (V0) //T2= 8006 position data -BEQL T2,R0,7F037574 -ADDIU S2,S2,0003 -LBU T3,0003 (V0) //T3= object type -ADDIU AT,R0,0001 -BNEL T3,AT,7F037574 //abort if not a door -ADDIU S2,S2,0003 -LW T4,0064 (V0) //T4= ... not certain. ordinarily not set -OR A0,S6,R0 -OR A1,S2,R0 -ANDI T9,T4,0200 //T9= tests 00000200 -BEQL T9,R0,7F037574 //I've never seen this toggled, so should be okay -ADDIU S2,S2,0003 -STD. RETURN - --- -7F03757C 6A.##.xx set lock value to x for door type16# --- -7F0375C0 6B.##.xx unset lock value for door type16# --- -7F037608 6C.##.xx.rr if door lock bits toggled, return -LBU A0,0001 (S1) //A0= xx -JAL 7F0570C0 //V0= handle to type16# -OR S0,R0,R0 -BEQ V0,R0,7F037650 -OR A1,S2,R0 -LW A0,0010 (V0) //A0= 8006 address of object -BEQ A0,R0,7F037650 -NOP -LBU T4,0000 (A0) //type byte from 8006 address -ADDIU AT,R0,0002 -BNE T4,AT,7F037650 //ABORT if type = 2 -NOP -LBU V1,0002 (S1) //V1= xx -LW T9,009C (V0) //T9= door lock -AND T5,T9,V1 //T5= test if bits toggled (ie. 6&2= 2) -BNE V1,T5,7F037650 //return if lock bits toggled (ie. 2=2) -NOP -ADDIU S0,R0,0001 //RETURN! --7F037650: -BEQ S0,R0,7F03766C -OR A0,S6,R0 -STD. RETURN - --- -7F037678 6D.##.rr if objective# complete, return -JAL 7F0571A8 -NOP -LBU A1,0001 (S1) -SLT AT,A1,V0 -BEQL AT,R0,... //quit if # higher than #total objectives - S2,S2,0003 -JAL 7F057238 -OR A0,A1,R0 -ADDIU AT,R0,0001 -BNE V0,AT,... -STD. RETURN - --7F0571A8: -LUI V0,8003 -LW V0,22F0 (V0) //V0=800322F0= #objectives -JR RA -ADDIU V0,V0,0001 //V0= #objectives to int - --7F057238: -... -SW S3,0024 (SP) -SLTI AT,A0,000A //there can't be more than 10 objectives... -... -SW S4,0028 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -BEQ AT,R0,7F057484 //too big a #, quit... -ADDIU S3,R0,0001 -SLL V0,A0,0x2 //V0= objective# * 4 -LUI A0,8007 -ADDU A0,A0,V0 -LW A0,5D30 (A0) //A0=80075D30 + off.= pointers to objective in obj block -BNEL A0,R0,7F05728C - LBU V1,0003 (A0) //V1= objective type -LUI S3,8007 -ADDU S3,S3,V0 -BEQ R0,R0,7F057484 -LW S3,5D58 (S3) //S3=80075D58 + offset = ? --7F05728C //When there's a pointer to the objective (always...) -ADDIU AT,R0,0018 -OR S2,A0,R0 //S2= Pobjective -BEQ V1,AT,7F057484 //quit if at end of objective block (type18) -ADDIU S4,R0,0001 -ADDIU T6,V1,FFE9 //T6= objective type -0x16 (limit just to objective types) --7F0572A0 //keep checking the different objective types... -SLTIU AT,T6,000C //TRUE if a valid objective 17-22 -BEQ AT,R0,7F057438 -OR S1,S4,R0 -SLL T6,T6,0x2 // -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,3654 (AT) //T6=80053654 + offset= jump... -JR T6 -NOP - ---7F057438: iterate to next objective type in clump - --- -+7F05737C type 1D check (deposit object) -JAL 7F0570C0 //returns V0= obj to deposit (checks 0010 @ obj+64) -LW A0,0004 (S2) //A0= obj# deposit -BEQ V0,R0,... -NOP -LW T9,0010 (V0) -BEQ T9,R0,... -NOP -JAL 7F08CFE0 // -OR A0,T9,R0 //A0= obj 8006 data -BEQ V0,R0,... -NOP -BEQ ... -OR S1,R0,R0 - --- -+7F0573B0 type 1E check (photograph object) -JAL 7F0570C0 //returns V0= obj to be photographed -LW A0,0004 (S2) -LW T0,0008 (S2) //T0= next value... -OR A0,V0,R0 //A0= obj to be photographed -BNEZ T0,... -NOP -BEQ V0,R0,7F0573EC //should be valid handle -NOP -LW T1,0010 (V0) //T1= obj 8006 -BEQ T1,R0,7F0573EC -NOP -JAL 7F04EF34 //returns V0=1 if object not destroyed -NOP -BNEZ V0,7F0573F4 -NOP --7F0573EC -BEQ ... -ADDIU S1,R0,0002 --7F0573F4 S1=0 if object not destroyed -BEQ ... -OR S1,R0,R0 - -++7F04EF34: returns 1 if object not destroyed -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F03FFC0 //returns V0=0 if object not destroyed -NOP -LW RA,0014 (SP) -SLTIU T6,V0,0001 //TRUE if obj not destroyed -OR V0,T6,R0 //V0=T6 -JR RA -ADDIU SP,SP,0018 - -++7F03FFC0: test if object is destroyed... -LBU T6,0002 (A0) -ANDI T7,T6,0080 //test if object is destroyed -BNEL T7,R0,7F03FFDC - LWC1 F4,0070 (A0) //F4= -JR RA -OR V0,R0,R0 --7F03FFDC //if object is destroyed... -TRUNC.W.S F6,F4 -MFC1 V0,F6 -NOP -SRA T9,V0,0x2 -ADDIU V0,T9,0001 -JR RA -NOP - --- -+7F057424 type22 check (use key analyzer) -JAL 7F066EF8 -NOP -BNEZ V0,... -NOP -OR S1,R0,R0 - -++7F066EF8: do check... -LUI T6,8008 -LW T6,A0B0 (T6) //T6= BONDdata -JR RA -LW V0,1060 (T6) //V0= - --- -7F0376C8 6E.xx.rr return if guard's 2328 is set by function -x value tells you where to pull the preset to save to guard's 2328 -options: -20 next step in path -10 go to Bond's position -08 -04 go to Bond if within range -02 go to Bond if within mid range -01 go to Bond if within short range - -Note: unlike most types, it uses path preset table, link sets, and Pad values to compute where Bond is roughly within the stage. This may require more extensive path preset tables than before. These two types are the reason for the overly-complex path tables. - -OR A0,S7,R0 //A0= current guard -JAL 7F033998 -LBU A1,0001 (S1) -BEQ V0,R0,7F0376F4 -... -STD. RETURN - --7F033998: -ADDIU SP,SP,FFB8 -SW S0,0014 (SP) -ANDI S0,A1,00FF //S0= x VALUE (0-FF) -SW S1,0018 (SP) -ADDIU AT,R0,0010 //AT= 0010 -OR S1,A0,R0 //S1=A0= current guard -SW RA,001C (SP) -SW A1,004C (SP) -BEQ S0,AT,7F0339CC //branch if x=10 -OR A2,S0,R0 //A2= x -ADDIU AT,R0,0020 //AT= 0x20 -BNE S0,AT,7F033A60 //branch on anything but 20 -NOP --7F0339CC: if x == 0x10 or 0x20 -LW S0,0018 (S1) //S0= handle to guard position -JAL 7F089798 //returns V0= handle to bond -SW A2,0020 (SP) -LW A1,0014 (S0) //A1= room pointer -SW V0,0040 (SP) //save BOND8006 -JAL 7F027CD4 //returns V0= addy of path preset -ADDIU A0,S0,0008 //A0= direct handle to guard xyz -LW V1,0040 (SP) //V1= handle to bond -OR S0,V0,R0 //S0=V0= addy of path preset -ADDIU A0,V1,0008 //A0= direct handle to bond xyz -JAL 7F027CD4 -LW A1,0014 (V1) //A1= bond room pointer -LW A2,0020 (SP) //A2= x -BEQ S0,R0,7F033A94 //branch on NULL pointer -OR A1,V0,R0 //A1= addy of Bond path preset? -BEQ V0,R0,7F033A94 //branch on NULL pointer -ADDIU AT,R0,0010 -BNE A2,AT,7F033A40 //branch if x= 20 -OR A0,S0,R0 //A0=S0= addy of path preset --7F033A18 x=10 -ADDIU A2,SP,002C -JAL 7F08F4F0 //sets 27xx and returns 3? -ADDIU A3,R0,0003 -SLTI AT,V0,0003 //V0 should be >= 3 -BNEZ AT,7F033A94 -LW T6,0030 (SP) //T6= path preset addy (2711) -LW T7,0000 (T6) //T7= actual preset -ADDIU V0,R0,0001 -BEQ R0,R0,7F033A98 -SH T7,0114 (S1) //T7-> guard's 2328 value --7F033A40: x=20 get next preset in path and store to 2328! -JAL 7F08FB90 //returns V0= addy of next path preset in path -OR A0,S0,R0 //A0=S0= pointer to a path preset -BEQL V0,R0,7F033A98 - OR V0,R0,R0 -LW T8,0000 (V0) //T8= preset at path preset -ADDIU V0,R0,0001 -BEQ R0,R0,7F033A98 -SH T8,0114 (S1) //T8-> guard's 2328 value --7F033A60: if other than 0x10 and 0x20 -JAL 7F06CC80 //debug objinst errors (if A0 or V0 are invalid) -LW A0,001C (S1) //A0= handle to model data handle -LW V0,0018 (S1) //V0= handle to guard position -MFC1 A2,F0 //A2= F0 (stage scale?) -ANDI A3,S0,00FF //A3=S0= x -ADDIU A0,V0,0008 //A0= pointer to guard xyz -JAL 7F033834 -LW A1,0014 (V0) //A1= room pointer -BLTZL V0,7F033A98 //preset returned should be valid - OR V0,R0,R0 -SH V0,0114 (S1) //V0-> guard's 2328 value -BEQ R0,R0,7F033A98 -ADDIU V0,R0,0001 //will return value! --7F033A94: -OR V0,R0,R0 --7F033A98: -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0048 - --7F027CD4: grabs 2328 from GUARDcur & returns V0= address of matching path preset - --7F06CC80: an interesting routine that pops up messages for objinst errors - --7F033834: figures out what you want to test and returns V0= preset value - A1=room#; A3/S0= x -ADDIU SP,SP,FFC8 -SDC1 F20,0018 (SP) -MTC1 A2,F20 //F20= A2 (RETURN F/7F06CC80. 3F864A11 ~1.05) -SW RA,0034 (SP) -SW S4,0030 (SP) -SW S0,0020 (SP) -ANDI S0,A3,00FF //S0= x -OR S4,A0,R0 //S4= BOND xyz -SW S3,002C (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -JAL 7F027CD4 //returns V0= addy of path preset (same as current2328) -SW A3,0044 (SP) -BEQ V0,R0,7F033970 -OR S3,V0,R0 //S3=V0= P.P. -ADDIU AT,R0,0001 -BEQ S0,AT,7F0338A0 //x=1 -OR A0,S3,R0 //A0=S3=V0= P.P. -ADDIU AT,R0,0002 -BEQ S0,AT,7F0338B0 //x=2 -ADDIU AT,R0,0004 -BEQ SO,AT,7F0338C0 //x=4 -ADDIU AT,R0,0008 -BEQ S0,AT,7F0338CC //x=8 -NOP -BEQ R0,R0,7F0338CC //everything else is just assumed option 8 -NOP --7F0338A0 //x=1! -LUI AT,8005 -LWC1 F4,20E8 (AT) //F4=800520E8= 40490FDB -BEQ R0,R0,7F0338CC -ADD.S F20,F20,F4 --7F0338B0 //x=2! -LUI AT,8005 -LWC1 F6,20EC (AT) //F6=800520EC= 3FC90FDB -BEQ R0,R0,7F0338CC -ADD.S F20,F20,F6 --7F0338C0 //x=4! -LUI AT,8005 -LWC1 F8,20F0 (AT) //F8=800520F0= 4096CBE4 -ADD.S F20,F20,F4 --7F0338CC //x=8! (or anything else!) -LUI AT,8005 -LWC1 F0,20F4 (AT) //F0=800520F4= 40C90FDB [6.28] -C.LE.S F0,F20 -NOP -BC1FL 7F0338EC //skip if F0>F20 - MFC1 A2,F20 -SUB.S F20,F20,F0 //F20-=F0 (F0 must be greater) -MFC1 A2,F20 //A2= F20 --7F0338EC -JAL 7F033780 //returns V0=1 if stuff happened (gets preset, etc) -OR A1,S4,R0 //A1=S4= BONDxyz -BEQL V0,R0,7F033908 - LW T6,0004 (S3) -BEQ R0,R0,7F033974 -LW V0,0000 (S3) //V0= preset at path preset address --7F033908 -LUI S2,8007 -ADDIU S2,S2,5D00 //S2= addy path preset table -LW S1,0000 (T6) -OR S0,R0,R0 -BLTZL S1,7F033974 - ADDIU V0,R0,FFFF -LW T8,0000 (S2) --7F033924 -SLL T7,S1,0x4 -MFC1 A2,F20 -OR A1,S4,R0 -JAL 7F033780 -ADDU A0,T7,T8 -BEQL V0,R0,7F033958 - LW T2,0004 (S3) -LW T9,0000 (S2) -SLL T0,S1,0x4 -ADDU T1,T9,T0 -BEQ R0,R0,7F033974 -LW V0,0000 (T1) --7F033954 -LW T2,0004 (S3) --7F033958 -ADDIU S0,S0,0001 -SLL T3,S0,0x2 -ADDU T4,T2,T3 -LW S1,0000 (T4) -BGEZL S1,7F033924 - LW T8,0000 (S2) --7F033970 -ADDIU V0,R0,FFFF --7F033974 -LW RA,0034 (SP) -LDC1 F20,0018 (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -LW S3,002C (SP) -LW S4,0030 (SP) -JR RA -ADDIU SP,SP,0038 - --7F08F4F0: set the 27xx and return 3? -ADDIU SP,SP,FF90 -SW S0,0018 (SP) -LUI S0,8007 -LW S0,5D04 (S0) //S0= path preset link table -SW S6,0030 (SP) -SW S4,0028 (SP) -SW S1,001C (SP) -OR S1,A3,R0 //S1=A3= 3 -OR S6,A0,R0 //S6=A0= addy of path preset -SW RA,003C (SP) -SW S8,0038 (SP) -SW S7,0034 (SP) -SW S5,002C (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW A1,0074 (SP) -SW A2,0078 (SP) -BEQ S0,R0,7F08F634 //S0 should = path preset link table -OR S4,A2,R0 //S4=A2= offset from SP -LW T6,0008 (A0) //T6= set of path preset -ADDIU V0,R0,000C -LW T9,0008 (A1) //T9= set of other path preset -MULTU T6,V0 -OR A2,S0,R0 //A2=S0= path preset link table -MFLO T7 -ADDU S3,T7,S0 //S3= offset for set data -OR A0,S3,R0 //A0=S3= offset for set data -MULTU T9,V0 -MFLO T0 -ADDU S8,T0,S0 //S8= offset for other set data -JAL 7F08EF1C -OR A1,S8,R0 //A1=S8= offset for other set data -BEQL V0,R0,7F08F638 //should have returned 1, unless set data bad - SW R0,0000 (S4) -LW S0,0008 (S3) //S0= 27xx just set -LW T1,0008 (S8) //T1= same as S3, so same value (probably set-specific) -OR S5,S6,R0 //S5=S6= path preset addy -ADDIU S0,S0,0001 //27xx++ -SLT AT,T1,S0 //check if first 27xx+1 > second 27xx -BNEZ AT,7F08F614 -OR S2,S3,R0 //S2=S3= set address in link table -SLTI AT,S1,0002 -BNEZ AT,7F08F614 -ADDIU S7,SP,0044 -ADDIU S6,SP,0048 -LW A0,0000 (S2) --7F08F5A8 -JAL 7F08ED60 -OR A1,S0,R0 -OR S3,V0,R0 -OR A0,S2,R0 -OR A1,V0,R0 -OR A2,S6,R0 -JAL 7F08F438 -OR A3,S7,R0 -OR A0,S5,R0 -LW A1,0048 (SP) -OR A2,S4,R0 -JAL 7F08F350 -OR A3,S1,R0 -LW T4,0008 (S8) -ADDIU S0,S0,0001 -ADDIU T2,V0,FFFF -SUBU S1,S1,V0 -SLL T3,T2,0x2 -SLT AT,T4,S0 -ADDIU S1,S1,0001 -ADDU S4,S4,T3 -LW S5,0044 (SP) -BNEZ AT,7F08F614 -OR S2,S3,R0 -SLTI AT,S1,0002 -BEQL AT,R0,7F08F5A8 - LW A0,0000 (S2) --7F08F614 -OR A0,S5,R0 //A0=S5= path preset addy -LW A1,0074 (SP) //A1= other path preset addy -OR A2,S4,R0 //A2=S4= offset from SP -JAL 7F08F350 -OR A3,S1,R0 //A3=S1= 3 -ADDIU T5,V0,FFFF //T5= 3-1 -SLL T6,T5,0x2 //T6= 2*4 (V0->offset) -ADDU S4,S4,T6 //S4= offset from SP --7F08F634 -SW R0,0000 (S4) //0->offset from SP --7F08F638 -LW T7,0078 (SP) //T7=offset from SP -ADDIU S4,S4,0004 //next point on stack offset -LW RA,003C (SP) -SUBU V0,S4,T7 //V0= difference in stack offset and S4 -SRA T8,V0,0x2 //T8= 3 -LW S4,0028 (SP) -LW S8,0038 (SP) -LW S7,0034 (SP) -LW S6,0030 (SP) -LW S5,002C (SP) -LW S3,0024 (SP) -LW S2,0020 (SP) -LW S1,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0070 -JR RA -OR V0,T8,R0 //V0=T8= 3 - ---7F08EF1C: generate the 27xx things for path preset link table -ADDIU SP,SP,FFD0 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A1,0034 (SP) -JAL 7F08EE70 -OR A3,R0,R0 -LW A1,0034 (SP) //A1= addy of set data for P.P -BEQ V0,R0,7F08EF88 -SW V0,0024 (SP) -LW S0,0008 (A1) //check if end of link list? -OR S1,A1,R0 //S1=A1= add of set data for P.P -ADDIU S0,S0,FFFF -BLTZL S0,7F08EF80 //if not already set to a 27xx value, do so - LW T8,0008 (S1) //T8= that value again --7F08EF58 run through set data -LW T6,0008 (S1) -LW A0,0000 (S1) -OR A1,S0,R0 -ADDIU T7,T6,2710 -JAL 7F08ED60 -SW T7,0008 (S1) -ADDIU S0,S0,FFFF -BGEZ S0,7F08EF58 -OR S1,V0,R0 -LW T8,0008 (S1) --7F08EF80 -ADDIU T9,T8,2710 //T9+=2710 -SW T9,0008 (S1) //set to end of link offsets --7F08EF88 reset and return -LW RA,001C (SP) -LW V0,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0030 - --7F08FB90: returns V0= addy of next path preset in path -LUI A2,8007 -LW A2,5D04 (A2) //A2= path preset link table -ADDIU SP,SP,FFA8 -SW S1,0018 (SP) //save S1 (GUARDdata) -OR S1,A0,R0 //S1=A0= addy current path preset used -SW RA,001C (SP) -BEQ A2,R0,7F08FD04 //branch if there isn't a path preset table -SW S0,0014 (SP) //save S0 (addy cur path preset) -LW T6,0008 (A0) //T6= path preset group # -ADDIU V0,R0,000C //V0= 0xC -LW T8,0008 (A1) //T8= different path preset group # -MULTU T6,V0 //set # * 12 -OR A3,R0,R0 -MFLO T7 //T7= offset to path group -ADDU S0,T7,A2 //S0= addy of set link table -NOP -MULTU T8,V0 //other set # * 12 -MFLO T9 //T9= offset to other path group -ADDU A0,T9,A2 //A0= addy of other set link table -BNE S0,A0,7F08FC38 //if it isn't the same table, branch -NOP -JAL 7F08F67C //resets last entry in following path presets -SW A1,005C (SP) -LW A0,005C (SP) //A0=A1= different path preset address -OR A1,S1,R0 //A1=S1= path preset address -JAL 7F08F1D8 //sets last entry in path presets (from set order) -ADDIU A2,R0,0001 -LW A0,0004 (S1) //A0= pointer in table -JAL 7F08F6B0 //returns V0= addy of next path preset in path -ADDIU A1,R0,FFFF -BEQL V0,R0,7F08FC1C //better be valid! - LW A1,000C (S1) -BEQ R0,R0,7F08FD0C -LW RA,001C (SP) --7F08FC18 -LW A1,000C (S1) -LW A0,0004 (S1) -JAL 7F08F6B0 -ADDIU A1,A1,0001 -BEQL V0,R0,7F08FD08 - OR V0,R0,R0 -BEQ R0,R0,7F08FD0C -LW RA,001C (SP) --7F08FC38 //Do this if the sets are not the same! -... --7F08FD0C -LW S0,0014 (SP) //S0= path preset addy -LW S1,0018 (SP) //S1= GUARDdata -JR RA -ADDIU SP,SP,0058 - - ---7F08F67C: reset last entry in table to -1 (from 27xx) -LUI V0,8007 -LW V0,5D00 (V0) //V0= addy path preset table -ADDIU V1,R0,FFFF //V1= -1 -LW T6,0000 (V0) //T6= preset in P.P.T -BLTZ T6,7F08F6A8 //if end of path preset table, QUIT -NOP -LW T7,0010 (V0) //T7= next preset --7F08F698 //Copy over following presets' last entry -SW V1,000C (V0) //27xx copied over with -1 -ADDIU V0,V0,0010 //advance to next preset -BGEZL T7,7F08F698 - LW T7,0010 (V0) --7F08F6A8 -JR RA -NOP - - --- -7F037700 6F.xx.rr same as 6E? -20 next point in path; same as 6E -10 go to Bond; same as 6E -08 -04 -02 -01 - -OR A0,S7,R0 -JAL 7F033AAC -LBU A1,0001 (S1) -BEQ V0,R0,don't return - --7F033AAC: -ADDIU SP,SP,FFE0 -ANDI A3,A1,00FF //A3= x -ADDIU AT,R0,0010 -SW RA,0014 (SP) -SW A0,0020 (SP) //save GUARDcur -SW A1,0024 (SP) //save x -BEQ A3,AT,7F033AD8 //test x=10 -OR V0,A3,R0 //V0= x -ADDIU AT,R0,0020 -BNE V0,AT,7F033AEC //test x!=20 -NOP --7F033AD8 *x=10/20 -LW A0,0020 (SP) //A0= GUARDcur -JAL 7F033998 //this is the main block from the 6E type... -ANDI A1,A3,00FF //A1= x -BEQ R0,R0,7F033B2C -LW RA,0014 (SP) --7F033AEC *x<10 -JAL 7F089EE4 -SB A3,0027 (SP) //save x -JAL 7F089798 //returns V0= handle to BOND 8006 -SWC1 F0,001C (SP) //stage scale? ??? -LBU A3,0027 (SP) //A3= x -ADDIU A0,V0,0008 //A0= BOND xyz -LW A1,0014 (V0) //A1= BOND room pointer -JAL 7F033834 //x-specific stuff -LW A2,001C (SP) //A2= stage scale? ??? -BLTZ V0,7F033B24 -LW T6,0020 (SP) //T6= GUARDcur -SH V0,0114 (T6) //set GUARD 2328 preset -BEQ R0,R0,7F033B28 //return TRUE! -ADDIU V0,R0,0001 --7F033B24 -OR V0,R0,R0 //dud return --7F033B28 -LW RA,0014 (SP) --7F033B2C -ADIU SP,SP,0020 -JR RA -NOP - - ---------- ---------- -7F037A94 type 70 - 70.xx.rr if difficulty x, return -JAL 7F0BFC10 -NOP -LBU T2,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,T2,V0 -BEQL AT,R0,7F037B0C -ADDIU S2,S2,0003 -STD. RETURN - --- -7F037B14 type 72 - 72.XXxx.rr if x > time in stage, return -LBU T3,0001 (S1) -LBU T9,0002 (S1) -SLL T4,T3,0x8 -OR T5,T4,T9 //T5=XXxx -MTC1 T5,F4 //F4=T5 -NOP -CVT.S.W F8,F4 //F8=(float)F4 -JAL 7F0BFC40 -SWC1 F8,0400 (SP) -LWC1 F10,0400 (SP) //F10=(float)xxxx -OR A0,S6,R0 -OR A1,S2,R0 -C.LT.S F0,F10 //branch if timevalue -ADDIU S2,S2,0004 -STD. RETURN --- -7F037BD4 type 74 - 74.XXxx.rr x > time since power on, return -LBU T2,0001 (S1) -LBU T4,0002 (S1) -SLL T3,T2,0x8 -OR T9,T3,T4 -MTC1 T9,F4 -NOP -CVT.S.W F8,F4 -JAL 7F0BFC4C -SWC1 F10,03F0 (SP) -LWC1 F18,03F0 (SP) -OR A0,S6,R0 -OR A1,S2,R0 -C.LT.S F0,F18 -NOP -BC1FL 7F037C30 -ADDIU S2,S2,0004 -STD. RETURN - --7F0BFC4C: //time since power on -LUI AT,8005 -JR RA -LWC1 F0,83AC (AT) //F0=800483AC=4190CCCD - --- -7F037C38 type 75 - 75.XXxx.rr opposite of 74 -LBU T5,0001 (S1) -LBU T7,0002 (S1) -SLL T6,T5,0x8 -OR T8,T6,T7 -MTC1 T8,F6 -NOP -CVT.S.W F16,F6 -JAL 7F0BFC4C -SWC1 F4,03E8 (SP) -LWC1 F8,03E8 (SP) -OR A0,S6,R0 -OR A1,S2,R0 -C.LT.S F8,F0 -NOP -BC1FL 7F037C94 -ADDIU S2,S2,0004 -STD. RETURN - --- -7F037C9C type 76 - 76.xx.rr if stage# < x, return -JAL 7000695C -NOP -LBU T1,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,V0,T1 //stage x, return -JAL 7000695C -NOP -LBU T2,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,T2,V0 //x times shot -ADDIU S2,S2,0003 -STD. RETURN - --7F0335A4: //guard data + 0xB (times shot) -JR RA -LB V0,000B (A0) - --- -7F037778 type 79 - 79.xx.rr if shot guard more than x times, return -JAL 7F0335A4 //V0= # times shot -OR A0,S7,R0 -LBU T7,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,T7,V0 //return if x < times shot -BEQL AT,R0,7F0377B0 -ADDIU S2,S2,0003 -STD. RETURN - --- -7F0377B8 7A.xx.rr if x > number of near-miss shots, return -JAL 7F0335AC //returns V0=GUARD offset 0xA -OR A0,S7,R0 -LBU T8,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,V0,T8 -BEQL AT,R0,7F0377F0 -ADDIU S2,S2,0003 -STD. RETURN - --- -7F0377F8 7B.xx.rr if x < number of near-miss shots, return -JAL 7F0335AC //returns V0=GUARD offset 0xA -OR A0,S7,R0 -LBU T1,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,T1,V0 //A1 TRUE if x < V0 -BEQL AT,R0,7F037830 -ADDIU S2,S2,0003 -STD. RETURN - --7F0335AC: //GUARD attrib 0x000A -JR RA -LB V0,000A (A0) - --- -7F037838 type 7C - 7C.##.xx.rr if guard# health > x, return -LBU T2,0002 (S1) -LUI AT,4F80 -MTC1 T2,F4 -BGEZ T2,7F037858 -CVT.S.W F6,F4 //F6=(float)xx -MTC1 AT,F8 -NOP -ADD.S F6,F6,F8 -7F037858: -LUI AT,8005 -LWC1 F10,28EC (AT) //F10= 800528EC=float... -OR A0,S7,R0 -MUL.S F16,F6,F10 //F16= x * multiplier -SWC1 F16,0438 (SP) -JAL 7F033040 //resolve guard# (A1=#) -LBU A1,0001 (S1) -BEQL V0,R0,7F0378BC //if V0= NULL, branch -ADDIU S2,S2,0004 -LWC1 F18,0100 (V0) //F18=GUARD +0x100 -LWC1 F4,00FC (V0) //F4= GUARD + 0xFC -LWC1 F6,0438 (SP) //F6= x -OR A0,S6,R0 -SUB.S F8,F18,F4 //F8=health (life - damage?) -OR A1,S2,R0 -C.LT.S F8,F6 -NOP -BC1FL 7F0378BC //return if F8(health) > F6(x value) -ADDIU S2,S2,0004 -STD. RETURN --- -7F0378C4 type 7D - 7D.##.xx.rr if guard# health < x, return --- -7F037950 type 7E - 7E.##.rr if guard#'s bitflag 01000000 set, return -OR A0,S7,R0 -JAL 7F033040 //returns V0=guard handle -LBU A1,0001 (S1) -BEQL V0,R0,7F0379A4 //if V0= NULL, abort -ADDIU S2,S2,0003 -LW T4,0014 (V0) //T4= GUARD + 0x14 -ADDIU AT,R0,FEFF -ANDI T9,T4,0100 -BEQL T9,R0,7F0379A4 //if 0100 flag set, return rr -ADDIU S2,S2,0003 -LW T5,0014 (V0) -OR A0,S6,R0 -OR A1,S2,R0 -AND T6,T5,AT //unset 0100 flag -SW T6,0014 (V0) -JAL 7F0352F0 -LBU A2,0002 (S1) - --7F033040: // -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F032FAC -NOP -OR A0,V0,R0 -JAL 7F022FC8 -SW V0,001C (SP) -LW A2,001C (SP) -BNEZ V0,7F0330B0 -OR T0,V0,R0 - --- -7F0379AC type 7F - 7F.xx.rr if health < x, return - -LBU T7,0001 (S1) -LUI AT,4F80 -MTC1 T7,F4 //F4=T7=xx=health -BGEZ T7,7F0379CC -CVT.S.W F8,F4 //F8=(float)health -MTC1 AT,F10 //F10=AT=4F800000 (absurdly high value) -ADD.S F8,F8,F10 -//7F0379CC: -LUI AT,437F -MTC1 AT,F18 //F18=AT= 255. -NOP -DIV.S F6,F8,F18 //F6= health/255 -JAL 7F08A2EC //returns F0=player health -SWC1 F6,0418 (SP) -LWC1 F16,0418 (SP) //F16= health/255 -OR A0,S6,R0 -OR A1,S2,R0 -C.LT.S F0,F16 -NOP -BC1FL 7F037A18 - ADDIU S2,S2,0003 -JAL 7F0352F0 //RETURN -LBU A2,0002 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C -ADDU S1,S6,V0 -//7F037A18: //DON'T RETURN -BEQ R0,R0,7F03558C -ADDU S1,S1,0003 ---------- ---------- - ---------- ---------- -7F037D1C 81.xx set GUARDoffset 0x10C --- -7F037D30 82.xx adds x to G.o. 0x10C or limits to FF --- -7F037D70 83.xx subtracts x from G.o. 0x10C or reduces to 0 --- -7F037DA4 84.xx.rr if x > GUARDoffset 0x10C, return --- -7F037DE0 85.rr if GUARDoffsets 0x10C < 0x10F, return --- -7F037E1C 86.xx set GUARDoffset 0x10D --- -7F037E30 87.xx adds x to G.o. 0x10D or limits to FF -LBU A1,0001 (S1) //A1= x -LBU V0,010D (S7) //V0= GUARDoffset 0x10D -ADDIU T9,R0,00FF -SUBU T5,T9,A1 //T5= x - FF (x-1) -SLT AT,T5,V0 //AT=1 if x-1 < V0 -BEQ AT,R0,7F037E60 -ADDU T7,V0,A1 -ADDIU T6,R0,00FF -SB T6,010D (S7) //GUARDoffset 0x10D = FF -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C //RETURN -ADDIU S1,S1,0002 -7F037E60: -SB T7,010D (S7) //GUARDoffset 0x10D += x -RETURN... - --- -7F037E70 88.xx subtracts x from G.o. 0x10D or reduces to 0 -LBU V0,010D (S7) -LBU A1,0001 (S1) -SLT AT,V0,A1 //AT=1 if x > GUARDoffset 0x10D -BEQ AT,R0,7F037E94 -SUBU T8,V0,A1 -SB R0,010D (S7) //GUARDoffset 0x10D = 0 -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 -7F037E94: -SB T8,010D (S7) //GUARDoffset 0x10D -= x -RETURN... - --- -7F037EA4 89.xx.rr if x > GUARDoffset 0x10D, return -LBU T1,010D (S7) -LBU T2,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,T1,T2 //AT=1 if x > GUARDoffset 0x10D -BEQL AT,R0,7F037ED8 -ADDIU S2,S2,0003 -STD. RETURN - --- -7F037EE0 8A.rr if GUARDoffsets 0x10D < 0x10F, return -LBU T3,010D (S7) -LBU T4,010F (S7) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,T3,T4 //AT=1 if T3 < 33 -BEQL AT,R0,7F037F14 -ADDIU S2,S2,0002 -STD. RETURN - --- -7F037F1C 8B.XXxx set GUARDoffset 0xEC (hearing ability) -LBU T9,0001 (S1) -LBU T6,0002 (S1) -LUI AT,447A -SLL T5,T9,0x8 -OR T7,T5,T6 //T7= xxxx -MTC1 T7,F10 //F10= T7 -MTC1 AT,F6 //F6=447A0000 -ADDIU S2,S2,0003 -CVT.S.W F18,F10 //F18= (float)xxxx -ADDIU S1,S1,0003 -DIV.S F0,F18,F6 //F0= F18/ -BEQ R0,R0,7F03558C -SWC1 F0,00EC (S7) //F0-> GUARDoffset 0xEC --- -7F037F50 8C.xx set GUARDoffset 0xD0 (reaction time) -LBU T8,0001 (S1) -LUI AT,4F80 -ADDIU S2,S2,0002 -MTC1 T8,F16 //F16= T8 -ADDIU S1,S1,0002 -BGEZ T8,7F037F78 //if x is a negative value, convert to negative float -CVT.S.W F4,F16 //F4= (float)x -MTC1 AT,F8 //F8= 4F800000 -NOP -ADD.S F4,F4,F8 //F4= x converted to proper negative -7F037F78: -BEQ R0,R0,7F03558C //return -SWC1 F4,00D0 (S7) //F4-> GUARDoffset 0xD0 --- -7F037F80 8D.xx set GUARDoffset 0x10 --- -7F037F94 8E.xx set GUARDoffset 0x0 (ID#) --- -7F037FA8 8F.xxxx set guard health --- -7F037FE8 90.xxxx set guard BA amount --- -7F038028 91.xx set GUARDoffset 0x3 --- -7F03803C 92.xx set GUARDoffset 0xD --- -7F038050 93.xx set GUARDoffset 0x2 --- -7F038064 94.xx mask GUARDoffset 0x10E (guard type) --- -7F03807C 95.xx unmask GUARDoffset 0x10E (guard type) --- -7F038094 96.xx.rr if GUARDoffset 0x10E bits masked, return (guard type) --- -7F0380CC 97.##.xx mask guard# type with x -OR A0,S7,R0 -LBU A1,0001 (S1) //A1= guardID# -JAL 7F033260 -LBU A2,0002 (S1) //A2= xx -ADDIU S2,S2,0003 -BEQ R0,R0,7F03558C //RETURN -ADDIU S1,S1,0003 - --7F033260: //grab handle to guardID# and send xx -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F033040 //returns V0= pointer to guard# -SW A2,0020 (SP) -BEQ V0,R0,7F033280 //abort if V0= NULL -OR A0,V0,R0 //A0=V0=GUARDPOINTER -JAL 7F033218 -LBU A1,0023 (SP) //A1=xx -LW RA,0014 (SP) //return to 7F0380DC -ADDIU SP,SP,0018 -JR RA -NOP - --7F033218: -SW A1,0004 (SP) -LBU T7,010E (A0) -OR T8,T7,A1 //T8= GUARDoffset 0x10E | x -JR RA -SB T8,010E (A0) // - --- -7F0380E8 98.##.xx unmask guard# type with x --- -7F038104 99.##.xx.rr if guard# type set, return --- -7F038140 9A.xxxxxxxx Set Objective Bits --- -7F03817C 9B.xxxxxxxx Unset Objective Bits --- -7F0381B8 9C.xxxxxxxx.rr if Objective Bits Set, Return --- -7F038214 9D.xxxxxxxx set Guard bits (0x14 offset) --- -7F038254 9E.xxxxxxxx unset guard bits (0x14 offset) --- -7F038298 9F.xxxxxxxx.rr if Guard Bits Set, Return (0x14 offset) --- -7F0382F4 A0.##.xxxxxxxx set Guard# bits (0x14 offset) - -LBU T3,0002 (S1) -LBU T5,0003 (S1) -LBU T8,0004 (S1) -SLL T4,T3,0x18 -SLL T9,T5,0x10 -LBU T2,0005 (S1) -OR T6,T4,T9 -SLL T7,T8,0x8 -OR T1,T6,T7 -OR A0,S7,R0 -LBU A1,0001 (S1) //A1=guardID # -JAL 7F033040 //returns V0=guarddata or NULL -OR S0,T1,T2 //S0=xxxxxxxx -BEQ V0,R0,7F03833C -ADDIU S2,S2,0006 -LW T3,0014 (V0) //toggle given bitflags! -OR T5,T3,S0 -SW T5,0014 (V0) -//7F03833C: -BEQ R0,R0,7F03558C -ADDIU S1,S1,0006 - --7F033040: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F032FAC //returns V0=guardID -NOP -OR A0,V0,R0 //A0=guardID -JAL 7F022FC8 //returns handle to guardID data or null if other (player, etc.) -SW V0,001C (SP) -LW A2,001C (SP) //A2=guardID -BNEZ V0,7F0330B0 //if good pointer, branch -OR T0,V0,R0 -LUI A1,8003 -LW A1,0980 (A1) //A1=80030980... -OR V0,R0,R0 -LUI A3,8003 -BLEZL A1,7F0330B4 - LW RA,0014 (SP) -LW A3,097C (A3) //A3=8003097C... holds an array of guarddata? with pointers to action groups. -OR A0,R0,R0 -OR V1,A3,R0 -//7F03308C: //loop this crap until something matches the ID from before -LH T6,0000 (V1) -ADDIU V0,V0,0001 -SLT AT,V0,A1 -BNE A2,T6,7F0330A8 -ADDIU V1,V1,01DC -BEQ R0,R0,7F0330B0 -ADDU T0,A0,A3 -//7F0330A8: -BNEZ AT,7F03308C -ADDIU A,A0,01DC -//7F0330B0: //returns V0=guard data pointer or NULL -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,T0,R0 -JR RA -NOP - - --- -7F038344 A1.##.xxxxxxxx unset guard# bits (0x14 offset) --- -7F038398 A2.##.xxxxxxxx.rr if Guard Bits Set, Return (0x14 offset) --- -7F03840C A3.##.xxxxxxxx set type16# bits (0x8 offset) -JAL 7F0570C0 //V0= handle to type16# object -LW T5,0008 (V0) //T5= bitflag field at offset 0x8 - --- -7F038464 A4.##.xxxxxxxx unset type16# bits (0x8 offset) --- -7F0384C0 A5.##.xxxxxxxx.rr if type16#'s bits set, return --- -7F03853C A6.##.xxxxxxxx set type16# bits (0xC offset) --- -7F038594 A7.##.xxxxxxxx unset type16# bits (0xC offset) --- -7F0385F0 A8.##.xxxxxxxx.rr if type16#'s bits set, return --- -7F03866C A9.## set FC value for guard to # -OR A0,S7,R0 -JAL 7F033CF4 -LBU A1,0001 (S1) -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 - --7F033CF4: //register guardID to FC -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F032FAC //A0= preset resolved -SW A0,0018 (SP) -LW T6,0018 (SP) //T6= S7 -SH V0,0116 (SP) //V0-> FC -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - --- -7F038684 AA.#1.#2 set FC value for guardID#1 to #2 -OR A0,S7,R0 -LBU A1,0001 (S1) -JAL 7F033D1C -LBU A2,0002 (S1) -RETURN... - --7F033D1C: -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 7F033040 //V0= handle of guard# -SW A2,0028 (SP) -BEQ V0,R0,7F033D4C -LW A0,0020 (SP) -LW A1,0028 (SP) //A1= xx -JAL 7F032FAC //A0= preset resolved -SW V0,001C (SP) -LW V1,001C (SP) //V1= guard handle -SH V0,0116 (V1) -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - --- -7F0386A0 AB.xxxx set guard's 2328 value to x -LBU T2,0001 (S1) -LBU T3,0002 (S1) -LW T9,07AC (SP) -SLL T4,T2,0x8 -OR V0,T4,T3 -ANDI T8,V0,FFFF //T8= xxxx -BEQ S7,R0,7F0386D8 //if current guard pointer NULL, branch -OR V0,T8,R0 //V0= xxxx -OR A0,S7,R0 //A0= current guard handle -JAL 7F033D5C -OR A1,T8,R0 -RETURN... - --- -7F0386EC AC.##.xxxx set guardID#'s 2328 value to x -LBU T7,0002 (S1) -LBU T5,0003 (S1) -OR A0,S7,R0 -SLL T6,T7,0x8 -OR V0,T6,T5 -ANDI A2,V0,FFFF //A2=xxxx -JAL 7F033D84 -LBU A1,0001 (S1) -RETURN... - --7F033D84: -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) -JAL 7F033040 //returns V0= handle to guard -SW A2,0028 (SP) -BEQ V0,R0,7F033DB4 -LW A0,0020 (SP) -LW A1,0028 (SP) //A1= xxxx -JAL 7F032F94 //returns V0= resolved preset -SW V0,001C (SP) -LW V1,001C (SP) //V1= handle to guard -SH V0,0114 (SP) //V0-> 2328 preset position -ADDIU SP,SP,0020 -JR RA -NOP - --- -7F038718 AD comment string, null terminated --- -//these are guard related, actually. may have to do with paths and such - -7F038730 AE reset and enable loop counter -JAL 7F0333C4 -OR A0,S7,R0 -STD. RETURN - -LHU T6,0012 (A0) //T6=GUARDcur + 0x12 -SW R0,0110 (A0) //0->GUARDcur + 0x110 (loop counter) -ORI T7,T6,0040 -JR RA -SH T7,0012 (A0) //toggle 0040 and store to GUARDcur +0x12 --- -7F038744 AF reset loop counter -SW R0,0110 (S7) //blank loop counter -STD. RETURN --- -7F038754 B0 disable loop counter -LHU T2,0012 (S7) //pull bitflags -... -ANDI T4,T2,FFBF //unset loop counter -... -SH T4,0012 (S7) save it back --- -7F03876C B1 enable loop counter --- -7F038784 B2.rr if loop counter enabled, return --- -7F0387BC B3.xxxxxx.rr if counter > x, return --- -7F038840 B4.xxxxxx.rr if counter < x, return --- -7F0388C4 B5 show timer (80030AE8) -7F056160 set timer mode --- -7F0388DC B6 hide timer --- -7F0388F4 B7.xxxx set timer to x (80030AF0) --- -7F038928 B8 stop timer (80030AEC) -7F0561C8 start[1]/stop[0] timer A0=mode --- -7F03893C B9 start timer --- -7F038950 BA.rr returns if timer running --- -7F038984 BB.xxxx.rr if timer < x, return --- -7F0389E8 BC.xxxx.rr if timer > x, return --- -7F038A4C BD.bb.hh.pppp.aaaa.xxxxxxxx.rr guard: -[b]ody -[h]ead -[p]reset -[a]ction -[x] flags -[r]eturn if loaded - -LBU T6,0003 (S1) -LBU T1,0004 (S1) -LBU T2,0007 (S1) -SLL T7,T6,0x8 -LBU T3,0008 (S1) -OR S0,T7,T1 -LBU T6,0009 (S1) -ANDI T5,S0,FFFF -OR S0,T5,R0 //S0= preset -LBU T5,000A (S1) -SLL T4,T2,0x18 -SLL T8,T3,0x10 -OR T9,T4,T8 -SLL T7,T6,0x8 -OR T1,T9,T7 -OR T2,T1,T5 //T2= bitflags -SW T2,0280 (SP) //SP+280=T2: bitflags -LBU T3,0005 (S1) -LBU T8,0006 (S1) -SLL T4,T3,0x8 -OR V0,T4,T8 -JAL 7F035398 //returns V0= pointer to action -ANDI A0,V0,FFFF //A0= action -LW T9,0280 (SP) //T9= bitflags -LBU A1,0001 (S1) //A1= body -LB A2,0002 (S1) //A2= head -SW V0,0010 (SP) -OR A0,S7,R0 //A0= current GUARD -OR A3,S0,R0 //A3= GUARDdata -JAL 7F034258 -SW T9,0014 (SP) //SP+14=bitflags -BEQ V0,R0,7F038AE8 //if NULL, quit -STD. RETURN - - --- -7F038AF4 BE.bb.hh.##.aaaa.xxxxxxxx.rr guard: -[b]ody -[h]ead -ID[#] -[a]ction -[x] flags -[r]etrun if loaded --- -7F038B7C BF.mmmm.##.xxxxxxxx.rr weapon: [m]odel, wep#, x= flags; return --- -7F038C80 C0.mmmm.xxxxxxxx.rr hat: [m]odel, x= flags; return if loaded --- -7F038D10 C1.##.xxxx.rr guard# does action x if hears a lot of gunfire, return when action complete -LBU T8,0002 (S1) -LBU T7,0003 (S1) -SW R0,020C (SP) -SLL T6,T8,0x8 -OR V0,T6,T7 -ANDI A0,V0,FFFF //A0=xxxx -SW R0,0210 (SP) -SW R0,0234 (SP) -OR S3,R0,R0 -JAL 7F035398 //returns V0= pointer to action -OR S4,R0,R0 -OR S0,V0,R0 //S0=V0= action pointer -OR A0,S7,R0 //A0= pointer to guard -JAL 7F033040 //returns V0= handle to guard# -LBU A1,0001 (S1) //A1= guardID# -BEQ V0,R0,7F038E94 -OR S5,V0,R0 //S5= pointer to guard# -LW T5,0014 (V0) //T5= guard bitflags -OR A0,S7,R0 //A0= guard pointer -ANDI T2,T5,0002 //T2= test for 00000002 (doing something?) -BEQL T2,R0,7F038E98 -LW T1,0234 (SP) //T1= 0 -LB A1,000F (V0) //A1= ??? (from guard data) -LH A3,0000 (V0) //A3= guard preset -SW R0,0014 (SP) -SW S0,0010 (SP) -JAL 7F034308 -ADDIU A2,R0,FFFF //A2= -1 -BEQL V0,R0,7F038E98 -LW T1,0234 (SP) -LW T1,0004 (V0) //T1= state flags? -OR A0,S7,R0 -SW T1,0218 (SP) --7F038E94: -LH S0,0000 (S5) //S0= guard preset --7F038E98: -ADDIU S0,S0,2710 //S0= door preset converted to normal -JAL 7F033040 //V0= pointer to preset -OR A1,S0,R0 //A1= S0 -BNEZ V0,7F038DB4 -OR A0,S5,R0 //A0= guard data pointer -LW T4,0218 (SP) //T4= -SH S0,0000 (T4) //preset stored back to guard --7F038DB4: -JAL 7F02302C -OR A1,R0,R0 -BEQL 7F038DF0 -OR A0,S5,R0 -LW S4,0004 (V0) //S4= state flags? -LW A0,0218 (SP) //A0= -OR A3,R0,R0 -LH A1,0004 (S4) -JAL 7F0523D4 -LB A2,0080 (S4) -BEQL V0,R0,7F038DF0 -OR A0,S5,R0 -LW T3,0004 (V0) -SW T3,020C (SP) -OR A0,S5,R0 --7F038DF0: -JAL 7F02302C -ADDIU A1,R0,0001 -BEQ V0,R0,7F038E28 -NOP -LW S3,0004 (V0) -LW A0,0218 (SP) -LUI A3,1000 -LH A1,0004 (S3) -JAL 7F0523D4 -LB A2,0080 (S3) -BEQ V0,R0,7F038E28 -NOP -LW T8,0004 (V0) -SW T8,0210 (SP) --7F038E28: -BEQL S3,R0,7F038E70 -LW V1,01D8 (S5) -BEQL S4,R0,7F038E6C -LW T6,0210 (SP) -BEQ T6,R0,7F038E6C -LW T7,020C (SP) -BEQL T7,R0,7F038E70 -LW V1,01D8 (S5) -LW T9,0084 (S3) -BNEL S4,T9,7F038E70 -LW V1,01D8 (S5) -LW T5,0084 (S4) -OR A0,T6,R0 -BNEL S3,T5,7F038E70 -LW V1,01D8 (S5) -JAL 7F051D74 -OR A1,T7,R0 --7F038E6C: -LW V1,01D8 (S5) --7F038E70: -LW A0,0218 (SP) -BEQL V1,R0,7F038E90 -ADDIU T2,R0,0001 -LW V0,0004 (V1) -OR A2,R0,R0 -JAL 7F0510C0 -LH A1,0004 (V0) -ADDIU T2,R0,0001 --7F038E90: -SW T2,0234 (SP) -LW T1,0234 (SP) -OR A0,S6,R0 -OR A1,S2,R0 -BEQL T1,R0,7F038EC0 -ADDIU S2,S2,0005 -STD. RETURN - --7F034308: // -ADDIU SP,SP,FFD0 -SW RA,0024 (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) //A2= -1 -JAL 7F033040 //returns V0= pointer -OR A1,A3,R0 -LW T6,0014 (V0) //T6= guard bitflags -ANDI T7,T6,0008 //test if dead or not moving or something? -BNEL T7,R0,7F034378 -OR V0,R0,R0 -LW A0,001C (V0) //A0= handle to equipment -JAL 7F06CC80 -SW V0,002C (SP) -LW V1,002C (SP) //V1= guard handle -LW T8,0040 (SP) -LW T9,0044 (SP) -LW V0,0018 (V1) //V0= handle to position data (8006) -LW A0,0034 (SP) //A0= action flag? -LW A1,0038 (SP) //A1= -1 -LW A3,0014 (SP) //A3= 0 -SWC1 F0,0010 (SP) -SW T8,0014 (SP) -SW T9,0018 (SP) -JAL 7F03415C -ADDIU A2,V0,0008 -BEQ R0,R0,7F03437C -LW RA,0024 (SP) -OR V0,R0,R0 -LW RA,0024 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - --- -7F038EC8 C2.xxxx lower text display -922C0001 LBU T4,0001 (S1) -92380002 LBU T8,0002 (S1) -000C5A00 SLL T3,T4,0x8 -0FC30776 JAL 7F0C1DD8 ;ret V0=p->text A0 -01782025 OR A0,T3,T8 ;A0=xxxx: text ID -0FC228F2 JAL 7F08A3C8 ;display text at A0 in lower left -00402025 OR A0,V0,R0 ;A0=p->text -26520003 ADDIU S2,S2,0003 -1000F1A8 BEQ R0,R0,7F03558C -26310003 ADDIU S1,S1,0003 - --- -7F038EF0 C3.xxxx upper text display --- -SE registers -0x0 pointer to sound effect data -0x4 (default 00007FFF) -0x8 audible range (default FFFFFFFF) -0xC (default 00007FFF) -0x10 address of preset to emenate sound from -0x14 address of object to emenate sound from - -7F038F18 C4.ssss.## set [s]ound effect to slot # -LBU T7,0001 (S1) -LBU T1,0002 (S1) -LB A0,0003 (S1) //A0= ## -SLL T2,T7,0x8 -OR A1,T2,T1 //A1= ssss -SLL T4,A1,0x10 //T4= ssss0000 -JAL 7F034924 -SRA A1,T4,0x10 //A1= 1000ssss (SRA duplicates the sign bit if toggled) -ADDIU S2,S2,0004 -BEQ R0,R0,7F03558C //RETURN -ADDIU S1,S1,0004 - --7F034924: // -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A1,0024 (SP) -BLTZ A0,7F03499C //if y > 7F, branch -OR A2,R0,R0 -SLTI AT,A0,0008 -BEQ AT,R0,7F03499C //or if y < 8, branch -SLL T6,A0,0x2 -SUBU T6,T6,A0 //T6= A0*3 -LUI T7,8007 -ADDIU T7,T7,9B70 //T7=80069B70 -SLL T6,T6,0x3 //T6*=8 -ADDU V1,T6,T7 //V1= offset (seems like 0x18 each) -LW A1,0000 (V1) //A1= pointer? -BEQ A1,R0,7F03497C -OR A0,A1,R0 //A0=A1 -SW V1,0018 (SP) -JAL 70008DF0 //if A0=NULL, V0=0; else, V0= A0+0x3F -SW R0,001C (SP) -LW V1,0018 (SP) //V1= offset to sound -BNEZ V0,7F03499C -LW A2,001C (SP) //A2= 0 --7F03497C: //fill in data that apparently was not set -ADDIU V0,R0,7FFF //V0= 7FFF -ADDIU T8,R0,FFFF //T8= -1 -OR A2,V1,R0 //A2= offset -SW V0,000C (V1) //7FFF-> sound+0xC -SW V0,0004 (V1) //7FFF-> sound+0x4 -SW T8,0008 (V1) //FFFFFFFF-> sound+0x8 -SW R0,0010 (V1) //0-> sound+0x10 -SW R0,0014 (V1) //0-> sound+0x14 --7F03499C: -LUI A0,8006 -LW A0,3720 (A0) //A0=80063720: p->SE buffer? -JAL 70008E08 -LH A1,0026 (SP) //A1= xxxx -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - --70008E08: get and set sound effect to use -ADDIU SP, SP, 0xFF80 -LUI T7, 0x8002 -LB T7, 0x43F8 (T7) //T7= 800243F8= ??? -SW S1, 0x001C (SP) -SLL S1, A1, 0x10 //S1= A1*1000 -SRA T6, S1, 0x10 //T6= A1 -SW S8, 0x0038 (SP) -SW S7, 0x0034 (SP) -SW S4, 0x0028 (SP) -OR S8, A0, R0 //S8= offset to sounds? -OR S1, T6, R0 //S1=T6= A1 -SW RA, 0x003C (SP) -SW S6, 0x0030 (SP) -SW S5, 0x002C (SP) -SW S3, 0x0024 (SP) -SW S2, 0x0020 (SP) -SW S0, 0x0018 (SP) -SW A1, 0x0084 (SP) -SW A2, 0x0088 (SP) -OR S7, R0, R0 -SH R0, 0x006E (SP) -BEQ T7, R0, 0x70008E6C //skip SE if T7 set already! -OR S4, R0, R0 -BEQ R0, R0, 0x70008FF0 -OR V0, R0, R0 --70008E6C -BNEZ S1, 0x70008E7C //if there's a sound, branch -ADDIU S6, SP, 0x0050 -BEQ R0, R0, 0x70008FF0 -OR V0, R0, R0 --70008E7C -LUI S5, 0x8002 -ADDIU S5, S5, 0x43F0 //S5= 800243F0 -LW S3, 0x0064 (SP) -LW T8, 0x000C (S8) //T8= pointer to run info? -SLL T9, S1, 0x2 //T9= sound to offset -OR A0, S8, R0 //A0=S8= sound data offset? -ADDU T0, T8, T9 //T0= sound sample root + offset -LW S2, 0x000C (T0) //S2= sample address? -JAL 70008B70 -OR A1, S2, R0 //A1= S2 -BEQ V0, R0, 0x70008F48 -OR S0, V0, R0 -LW T1, 0x0000 (S5) //T1= 80063B50 -ADDIU T2, R0, 0x0001 -OR A1, S6, R0 -SW V0, 0x003C (T1) //V0-> 80063B8C -SH T2, 0x0050 (SP) -SW V0, 0x0054 (SP) -LW T3, 0x0004 (S2) -LBU T5, 0x003E (V0) -LBU S3, 0x0001 (T3) -ANDI T6, T5, 0x0010 -SLL T4, S3, 0x6 -ADDU T4, T4, S3 -SLL T4, T4, 0x3 -ADDU T4, T4, S3 -SLL T4, T4, 0x2 -SUBU T4, T4, S3 -SLL T4, T4, 0x2 -ADDU T4, T4, S3 -SLL T4, T4, 0x2 -ADDU T4, T4, S3 -BEQ T6, R0, 0x70008F34 -OR S3, T4, R0 -LBU T7, 0x003E (V0) -OR A1, S6, R0 -ADDIU A2, S4, 0x0001 -ANDI T8, T7, 0xFFEF -SB T8, 0x003E (V0) -LW A0, 0x0000 (S5) ;A0=80063B50 -JAL 0x70012EFC -ADDIU A0, A0, 0x0014 ;A0=80063B64 -ADDIU T9, S3, 0x0001 -SW T9, 0x0068 (SP) -BEQ R0, R0, 0x70008F44 -SH S1, 0x006E (SP) --70008F34 -LW A0, 0x0000 (S5) -ADDIU A2, S3, 0x0001 -JAL 0x70012EFC -ADDIU A0, A0, 0x0014 --70008F44 -OR S7, S0, R0 --70008F48 -LW V0, 0x0004 (S2) -ADDU S4, S4, S3 -LBU T1, 0x0002 (V0) -LBU T0, 0x0000 (V0) -ANDI T2, T1, 0x00C0 -SLL T3, T2, 0x2 -ADDU S1, T0, T3 -SLL T4, S1, 0x10 -SRA S1, T4, 0x10 -BEQ S1, R0, 0x70008F80 -NOP -BNEL S0, R0, 0x70008E8C - LW T8, 0x000C (S8) -SW S3, 0x0064 (SP) ---70008F80 -BEQL S7, R0, 0x70008FE0 - LW T4, 0x0088 (SP) -LBU T6, 0x003E (S7) -ADDIU T0, R0, 0x0200 -ADDIU A1, SP, 0x0040 -ORI T7, T6, 0x0001 -SB T7, 0x003E (S7) -LW T8, 0x0088 (SP) -ORI T2, T7, 0x0010 -SW T8, 0x0030 (S7) -LH T9, 0x006E (SP) -BEQL T9, R0, 0x70008FE0 - LW T4, 0x0088 (SP) -SB T2, 0x003E (S7) -LH T3, 0x006E (SP) -LW A0, 0x0000 (S5) -SH T0, 0x0040 (SP) -SW S7, 0x0044 (SP) -SW S8, 0x004C (SP) -LW A2, 0x0068 (SP) -SW T3, 0x0048 (SP) -JAL 0x70012EFC -ADDIU A0, A0, 0x0014 -LW T4, 0x0088 (SP) ---70008FE0 -OR V0, S7, R0 -BEQ T4, R0, 0x70008FF0 -NOP -SW S7, 0x0000 (T4) ---70008FF0 -LW RA, 0x003C (SP) -LW S0, 0x0018 (SP) -LW S1, 0x001C (SP) -LW S2, 0x0020 (SP) -LW S3, 0x0024 (SP) -LW S4, 0x0028 (SP) -LW S5, 0x002C (SP) -LW S6, 0x0030 (SP) -LW S7, 0x0034 (SP) -LW S8, 0x0038 (SP) -JR RA -ADDIU SP, SP, 0x0080 - - --- -7F0390C4 C5.##.JJ.xxxx emanate sound in slot# from ob[J]ect; x is audible range - JJ = tagged obj -xxxx-> 69B78 - 0-> 69B80 -Pobj-> 69B84 - --- -7F039160 C6.##.pppp.xxxx -called in bunker2, when nat checks console -# sound slot (0-7), [p]reset, x probably sound value -xxxx-> 69B78 -PtoP-> 69B80 - 0-> 69B84 -LBU T5,0002 (S1) -LBU T7,0003 (S1) -LBU T1,0004 (S1) -LBU T3,0005 (S1) -SLL T6,T5,0x8 -OR V0,T6,T7 //V0= [p]reset -SLL T4,T1,0x8 -ANDI T2,V0,FFFF //T2= [p]reset -OR A1,T4,T3 -ANDI T8,A1,FFFF //T8= xxxx -SLTI AT,T2,2710 //AT=TRUE if a normal preset -OR A1,T8,R0 //A1= xxxx -BEQ AT,R0,7F0391BC //branch if a 2710 preset -OR V1,T2,R0 //V1= preset --7F039198: //convert 0xxx preset to address -SLL T9,T2,0x2 -SUBU T9,T9,T2 -SLL T9,T9,0x2 -LUI T5,8007 -LW T5,5D18 (T5) //T5= 0xxx offset -SUBU T9,T9,T2 -SLL T9,T9,0x2 -BEQ R0,R0,7F0391E0 -ADDU A0,T9,T5 //A0= offset to preset --7F0391BC: //convert 2xxx preset to address -LUI T7,8007 -LW T7,5D1C (T7) -SLL T6,V1,0x4 -ADDU T6,T6,V1 -SLL T6,T6,0x2 -LUI AT,FFF5 -ORI AT,AT,9FC0 //AT= FFF59FC0 -ADDU A0,T6,T7 -ADDU A0,A0,AT //A0= offset to preset --7F0391E0: -LB V1,0001 (S1) //V1= # -BLTZ V1,7F039254 -SLTI AT,V1,0008 //AT=TRUE if V1<8 -BEQL AT,R0,7F039258 //accept only within 8 (otherwise, into obj8006) - ADDIU S2,S2,0006 -BEQ A0,R0,7F039254 -SLL T2,V1,0x2 //T2= # * 4 -SUBU T2,T2,V1 //T2-= # -SLL T2,T2,0x3 //T2*= 8 (max, 0xC0. 0x18 each) -LUI AT,8007 -ADDU AT,AT,T2 //AT= offset into 80069B78 table -SW A1,9B78 (AT) //xxxx -> 80069B78+(x * 0x18) -LB T1,0001 (S1) -LUI AT,8007 -SLL T4,T1,0x2 -SUBU T4,T4,T1 -SLL T4,T4,0x3 -ADDU AT,AT,T4 -SW A0,9B80 (AT) //pppp -> 80069B80+(x * 0x18) -LB T3,0001 (S1) -LUI AT,8007 -SLL T8,T3,0x2 -SUBU T8,T8,T3 -SLL T8,T8,0x3 -ADDU AT,AT,T8 -BNEZ A1,7F039254 -SW R0,9B84 (AT) //0 -> 80069B84+(x * 0x18) -JAL 7F0347A0 //if your s=0, do this (sound jump) -LB A0,0001 (S1) --7F039254: //done. -ADDIU S2,S2,0006 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0006 - - - --- -7F038F58 C7.##.vvvv.xxxx sound # crecendos to [v]olume over [x] milliseconds -A0= vvvv -t3= xxxx - -xxxx->80069B78 audible range. if zero, resets to default -vvvv->80069B7C max volume -0 ->80069B80 -0 ->80069B84 -74 counts up to value at 7C --- -7F039008 C8.##.vvvv.xxxx sound# fades from [v]olume to nothing over [x] milliseconds -t2/f10/f12=ssss -t8=xxxx -0 ->80069B80 -vvvv->80069B7C ??? v in this case is converted to float, however... -xxxx->80069B78 audible range -74 counts down to value at 7C (0) --- -7F038F44 C9.## shut off sound # --- -7F039260 CA.##.ssss.rr s > value, return ??? -test 80069B74+(x * 0x18) < ssss - --- -7F0392D4 CB.## -JAL 7F035434 //returns V0= pointer to path# -LBU A0,0001 (S1) //A0= path# -LW T3,07B0 (SP) -ADDIU S2,S2,0002 -BEQ T3,R0,7F0392F4 -NOP -SW V0,00A4 (T3) //store path pointer to obj0xA4 -SW R0,00A8 (T3) //blank obj0xA8 -BEQ R0,R0,7F03558C //end. -ADDIU S1,S1,0002 - --7F035434: -LUI A1,8007 -LW A1,5D10 (A1) //A1= PATH pointer -OR V1,R0,R0 -LW T6,0000 (A1) //T6= PATHs -OR V0,A1,R0 //V0= PATH pointer -BEQL T6,R0,7F03547C -OR V0,R0,R0 -LBU T7,0004 (V0) //T7= PATH# --7F035454: -BNE A0,T7,7F035464 //branch if not your path -SLL T8,V1,0x3 //T8= V1*8 -JR RA -ADDU V0,T8,A1 //V0= pointer to path# --7F035464: -LW T9,0008 (V0) -ADDIU V1,V1,0001 -ADDIU V0,V0,0008 -BNEL T9,R0,7F035454 -LBU T7,0004 (V0) -OR V0,R0,R0 --7F03547C: -JR RA -NOP - --- -7F0392FC CC.xxxx.yyyy speed of 27object; x= speed, y= accel rate -speed -> obj0x94 -accel -> obj0x98 - --- -7F039360 CD.xxxx.yyyy speed of rotor; x= speed, y= accel rate -speed -> obj0x90 -accel -> obj0x94 - --- -7F0393BC CE.rr return if in the intro camera -80036494 = -1= intro camera -2= fade from camera --- -7F039408 CF.rr return if in the spiral -3= intro swirl -(4= first-person mode) --- -7F039440 D0.##.xx.ii change tagged monitor#'s xth image --- -7F0394CC D1.rr if in tank, return -JAL 7F07CE78 //V0= 80036448 (usually 0, tests for 1) -NOP -return if V0==1 - --7F07CE78: // -LUI V0,8003 -JR RA -LW V0,6448 (V0) //V0=80036448= 1 if in tank - --tested for at: - 7F080DFC - 7F082DD4 - 7F0836B4 - 7F083AFC - 7F083C54 - -also tested for at 7F0828C4. if =1, does the following: -LW T6,0000 (S0) //T6= BONDdata -LW T7,0124 (T6) //T7= -BEQL T7,R0,7F082964 (same jump as if 80036448=0) - LW T8,005C (SP) -JAL 7F05D9D0 //returns V0= right gun being used -OR A0,R0,R0 -ADDIU AT,R0,0020 -BNE V0,AT,7F08290C //if not tank, branch -LWC1 F8,018C (SP) -ADDIU T9,R0,0001 -SW R0,0134 (SP) -BEQ R0,R0,7F082958 -SW T9,01A8 (SP) --7F08290C -C.EQ.S F8,F20 -LWC1 F10,0188 (SP) -BCIFL 7F08295C - SWC1 F20,017C (SP) -C.EQ.S F10,F20 -LWC1 F18,017C (SP) -BC1FL 7F08295C - SWC1 F20,017C (SP) -C.LT.S F20,F18 -NOP -BC1FL 7F082944 - LWC1 F4,0178 (SP) -SWC1 F18,018C (SP) -LWC1 F4,0178 (SP) --7F082944 -C.LT.S F20,F4 -NOP -BC1FL 7F08295C - SWC1 F20,017C (SP) -SWC1 F4,0188 (SP) --7F082958 -SWC1 F20,017C (SP) --7F08295C -SWC1 F20,0178 (SP) -LW T8,005C (SP) --7F082964 - --- -7F039504 D2 exit level --- -7F039550 D3 return from camera -JAL 7F07A9B8 -ADDIU A0,R0,0008 -RETURN... - --- -7F039564 D4.xxxx Camera looks at Bond from Preset x -probably set Bond's position to preset xxxx - -LBU T2,0001 (S1) -LBU T4,0002 (S1) -LUI T7,8007 -SLL T1,T2,0x8 -OR V0,T1,T4 -ANDI T3,V0,FFFF //T3= xxxx (preset) -SLTI AT,T3,2710 -BEQ AT,R0,7F0395B4 -OR V1,T3,R0 //V1= preset -SLL T8,T3,0x2 //0xxx Preset -SUBU T8,T8,T3 -LUI T9,8007 -LW T9,5D18 (T9) -SLL T8,T8,0x2 -SUBU T8,T8,T3 -SLL T8,T8,0x2 -LUI AT,8008 -ADDU T5,T8,T9 //T5= address of preset data -BEQ R0,R0,7F0395DC -SW T5,99F8 (AT) //preset addy -> 800799F8 --7F0395B4: //2xxx Preset -LW T7,5D1C (T7) -SLL T6,V1,0x4 -ADDU T6,T6,V1 -SLL T6,T6,0x2 -LUI AT,FFF5 -ORI AT,AT,9FC0 -ADDU T2,T6,T7 -ADDU T1,T2,AT //T1= address of preset data -LUI AT,8008 -SW T1,99F8 (AT) //preset addy -> 800799F8 camera position to preset --7F0395DC: -JAL 7F07A9B8 -ADDIU A0,R0,0007 -RETURN... - --7F07A9B8: -ADDIU SP,SP,FF78 -SW S0,0028 (SP) -LUI S0,8003 -ADDIU S0,S0,6494 //S0= 80036494 -SW A0,0000 (S0) //7->80036494 set camera position mode. -LUI AT,8003 -SW R0,6498 (AT) //0->80036498 -LW V0,0000 (S0) //V0= 7 -ADDIU V1,R0,0001 -SW RA,002C (SP) -BNE V1,V0,7F07AA80 //if A0!=1, branch -ADDIU AT,R0,0002 -...for A0=7... --7F07B0E8: -JAL 7F079CF0 -NOP -LUI S0,8008 -ADDIU S0,S0,A0B0 -LW T7,0000 (S0) //S0=8007A0B0 (P->BONDdata) -BEQ R0,R0,7F07B190 -SW R0,0034 (T7) //0->BONDdata +0x34 (KILL BOND'S ROOM POINTER) --7F07B190: -LW RA,002C (SP) -LW S0,0028 (SP) -ADDIU SP,SP,0088 -JR RA -NOP - - --- -7F0395F0 D5.##.xxxx.yyyy Go to camera ## -if x = 1 the camera stays fixed on Bond, not camera rotation. -y can be set but the value isn't read. Rare never set it either - -JAL 7F057080 //returns V0= t16->CAMdata -LBU A0,0001 (S1) -BEQ V0,R0,... -OR S0,V0,R0 //S0= t16->CAMdata -JAL 7F056B1C //returns V0= which #obj in file the type16 is -OR A0,V0,R0 //A0= t16->CAMdata -BLTZL V0,... - ADDIU S2,S2,0006 -LH T4,0006 (S0) //T4= #objects to CAMdata -JAL 7F056A88 //returns V0= CAMdata -ADDU A0,T4,V0 //A0= which #obj in file is the camera in question -LUI AT,8008 -SW R0,99F8 (AT) //0->800799F8 (not a preset, a camera) -LUI AT,8008 -SW V0,99FC (AT) //CAMdata->800799FC (set camera pov) -LBU T3,0002 (S1) -LBU T9,0003 (S1) -LUI AT,8008 -SLL T8,T3,0x8 -OR T5,T8,T9 //T5= xxxx -SW T5,9A18 (AT) //xxxx->80079A18 -LBU T6,0004 (S1) -LBU T2,0005 (S1) -LUI AT,8008 -SLL T7,T6,0x8 -OR T1,T7,T2 //T1= yyyy -SW T1,9A1C (AT) //yyyy->80079A1C -JAL 7F07A9B8 -ADDIU A0,R0,0007 -RETURN... - --7F057080: returns V0= type16 handle with corresponding ID#[A0] -LUI V1,8007 -LW V1,5D80 (V1) //V1=80075D80= type16 handle -ANDI V0,A0,FFFF //V0= #-- -BEQL V1,R0,... - OR V0,R0,R0 -LHU T6,0004 (V1) //T6= type16 id# -BNEL V0,T6,7F0570AC //if it doesn"t match, iterate - LW V1,0008 (V1) //V1= prior type16 -JR RA -OR V0,V1,R0 //V0=V1= refereced object handle --7F0570AC -BNEL V1,R0,7F057098 - LHU T6,0004 (V1) //T6= next type16 id# -OR V0,R0,R0 -JR RA -NOP - --7F07A9B8: -... -SW S0,0028 (SP) -LUI S0,8003 -ADDIU S0,S0,6494 -SW A0,0000 (S0) -LUI AT,8003 -SW R0,6498 (AT) -LW V0,0000 (S0) -ADDIU V1,R0,0001 -... -BNE V1,V0,7F07AA80 -ADDIU AT,R0,0002 -LUI T6,8003 -LW T6,64C0 (T6) -BEQ T6,R0,7F07AA70 -NOP -JAL 7F0BFC98 -NOP -BNEZ V0,7F07AA70 -NOP -JAL 7F0BFC8C -NOP -BNEZ V0,7F07AA70 -LUI AT,8003 -MTC1 R0,F4 -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,R0,R0 -LUI A3,3F80 -JAL 7F0807B0 -SWC1 F4,64A4 (AT) -LUI AT,4270 -MTC1 AT,F12 -MTC1 R0,F14 -JAL 7F080858 -NOP -JAL 7000695C //returns stage #... -NOP -OR A0,V0,R0 -JAL 7F0BAA64 -ADDIU A1,R0,0001 -LUI S0,8008 -ADDIU S0,S0,A0B0 -LW T7,0000 (S0) -BEQ ...,7F07B190 -SW R0,0034 (T7) --7F07AA70 -ETC... - --- -7F039670 D6 --- -7F0396DC D7.xx Disables text. - by default, disables on-screen ammo - subsequent calls will re-enable text - also see type D8 -bitflag controls: - xxx1 do not disable upper text display - xx1x do not disable lower text display - x1xx do not disable on-screen clock - -note: the clock is disabled differently than types B5/B6, so you must use D7 or D8 to re-enable - -ADDIU A0,R0,0004 -JAL 7F06A5A8 //set bit 4 in BONDdata 0x1128 -OR A1,R0,R0 -ADDIU A0,R0,0002 -JAL 7F0690F4 //set bit 2 in BONDdata 0x1064 -OR A1,R0,R0 -LBU A1,0001 (S1) -ANDI T7,A1,0002 -BNEL T7,R0,7F039714 //if x==2, branch - ANDI T2,A1,0001 -//!2 -JAL 7F08A39C //sets 2 in BONDdata 0x11D8 -ADDIU A0,R0,0002 -LBU A1,0001 (S1) -ANDI T2,A1,0001 --7F039714: //test x==1... -BNEL T2,R0,7F03972C - ANDI T1,A1,0004 //test if A1=4 -//!1 -JAL 7F08A944 //sets 2 to 800368B4 -ADDIU A0,R0,0002 -LBU A1,0001 (S1) -ANDI T1,A1,0004 --7F03972C: //test if x==4 -BNEZ T1,7F03973C -ADDIU A0,R0,0010 -//!4 -JAL 7F056160 //hide clock; sets 0x10 to clock value... -OR A1,R0,R0 --7F03973C: -LUI AT,8003 -SW R0,64B0 (AT) //0->800364B0 --7F039744: -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 - --7F06A5A8: //un/mask BONDdata 0x1128; A1=0 toggle on, A1=1 toggle off -BEQ A1,R0,7F06A5CC -LUI V0,8008 --7F06A5B0: //toggle off A0 -LUI V0,8008 -LW V0,A0B0 (V0) -NOR T7,A0,R0 //T7= ~A0 -LW T6,1128 (V0) -AND T8,T6,T7 //unset bits given in A0 -JR RA -SW T8,1128 (V0) --7F06A5CC: //toggle on A0 -LW V0,A0B0 (V0) //V0=8007A0B0= BONDdata pointer -LW T9,1128 (V0) //T8= BONDdata + 0x1128 -OR T0,T9,A0 -SW T0,1128 (V0) //set bits given in A0 -JR RA -NOP - - --7F0690F4: //on-screen ammo control; A1=0 toggle on, A1=1 toggle off -set to 2 to disable -BEQ A1,R0,7F069118 -LUI V0,8008 --7F0690FC: //toggle off A0 -LUI V0,8008 -LW V0,A0B0 (V0) -NOR T7,A0,R0 -LW T6,1064 (V0) -AND T8,T6,T7 -JR RA -SW T8,1064 (V0) --7F039118: //toggle on A0 -LW V0,A0B0 (V0) -LW T9,1064 (V0) -OR T0,T9,A0 -SW T0,T9,A0 -SW T0,1064 (V0) //set bits given in A0 -JR RA -NOP - --7F056160: //un/mask Clock!; A1=0 toggle on, A1=1 toggle off -BEQ A1,R0,7F056184 -LUI V0,8003 --7F036168: //toggle off A0 -LUI V0,8003 -ADDIU V0,V0,0AE8 //V0=80030AE8 (clock on/off) -LW T6,0000 (V0) -NOR T7,A0,R0 -AND T8,T6,T7 //send 10, so this function has exclusive control of clock -JR RA -SW T8,0000 (V0) --7F036184: //toggle on A0 -ADDIU V0,V0,0AE8 -LW T9,0000 (V0) -OR T0,T9,A0 -SW T0,0000 (V0) -JR RA -NOP - -!1 //upper text display control -set to 2 to disable. subseqent calls can re-enable --7F08A944: //set bits from A0 to 800368B4 -LUI V0,8003 -ADDIU V0,V0,68B4 //V0=800368B4 -LW T6,0000 (V0) -OR T7,T6,A0 -JR RA -SW T7,0000 (V0) - -!2 //lower text display control -set to 2 to disable. subseqent calls can re-enable --7F08A39C: // -LUI V0,8008 -LW V0,A0B0 (V0) -LW T6,11D8 (V0) -OR T7,T6,A0 -JR RA -SW T7,11D8 (V0) - --- -7F039750 D8 enable all on-screen text displays - undoes changes from the D7 thingy. either hides or shows all text -ADDIU A0,R0,0004 -JAL 7F06A5A8 //Toggle off 4 @ BONDdata 0x1128 uncertain... -ADDIU A1,R0,0001 -ADDIU A0,R0,0002 -JAL 7F0690F4 //Toggle off 2 @ BONDdata 0x1064 on-screen ammo -ADDIU A1,R0,0001 -JAL 7F08A380 //Toggle off 2 @ BONDdata 0x11D8 lower text -ADDIU A0,R0,0002 -JAL 7F08A928 //Toggle off 2 @ 800368B4 upper text -ADDIU A0,R0,0002 -ADDIU A0,R0,0010 -JAL 7F056160 //Toggle off bit 0x10 on clock mode -ADDIU A1,R0,0001 -ADDIU T4,R0,0001 -LUI AT,8003 -SW T4,64B0 (AT) //1->800364B0 -ADDIU S2,S2,0001 -BEQ R0,R0,7F03558C //END. -ADDIU S1,S1,0001 - --7F06A5A8: toggle on[A1=0] or off[A1=1] bits [A0] of BONDdata 0x1128 --7F0690F4: toggle on[A1=0] or off[A1=1] bits [A0] of BONDdata 0x1064 --7F08A380: toggle off bits [A0] of BONDdata 0x11D8 --7F08A928: toggle off bits [A0] at 800368B4 - --- -7F03979C D9.##.xxxx.rr --- -7F039964 DA fade to black -800364A0= fade --- -7F0399A4 DB fade in from black --- -7F0399E0 DC.rr return when fade complete --- -7F039A24 DD hide guards --7F01F530: V0= value @ 8002CC68 --- -7F039A80 DE show guards --- -7F039AD4 DF.## open tagged door# --- -7F039B30 E0.##.xx guardID# draws weapon x --- -7F039B58 E1.xx.rr if at fewer than x #players playing, return -JAL 7F09A464 //V0= # players -NOP -LB T2,0001 (S1) -OR A0,S6,R0 -OR A1,S2,R0 -SLT AT,V0,T2 //AT=1 if #players < x -BEQL AT,R0,7F039B90 -ADDIU S2,S2,0003 -STD. RETURN - --7F09A464: //returns V0= # players! -LUI T6,8008 -LW T6,9EE0 (T6) -OR V1,R0,R0 -LUI T7,8008 -BEQ T6,R0,7F09A480 -LUI T8,8008 -ADDIU V1,R0,0001 --7F09A480: -LW T7,9EE4 (T7) -LUI T9,8008 -BEQ T7,R0,7F09A494 -NOP -ADDIU V1,V1,0001 --7F09A494: -LW T8,9EE8 (T8) -BEQ T8,R0,7F09A4A4 -NOP -ADDIU V1,V1,0001 --7F09A4A4: -LW T9,R0,7F09A4B4 -NOP -ADDIU V1,V1,0001 --7F09A4B4: -JR RA -OR V0,V1,R0 - --- -7F039B98 E2.##.xx.rr if x > total ammo of type#, return -JAL 7F069258 //returns V0= total ammo of type A0 -LB A0,0001 (S1) -LB T1,0002 (S1) -... -SLT AT,V0,T1 //return if total ammo < x -BEQL AT,R0,7F039BD0 -ADDIU S2,S2,0004 -STD. RETURN - --7F069258: -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -JAL 7F069240 //V0= amount of ammo type A0 -SW A0,0020 (SP) -OR S0,V0,R0 //S0= amount of ammo A0 -//right weapon -JAL 7F05D9D0 //returns V0= weapon# being used (f/ammo indicator) -OR A0,R0,R0 -JAL 7F06942C //returns V0= ammo type used by wep#[A0] -OR A0,V0,R0 -LW T6,0020 (SP) //T6= ammo type -BNE V0,T6,7F069298 -NOP -JAL 7F069344 //returns V0= right gun ammo -OR A0,R0,R0 -ADDU S0,S0,V0 --7F069298: //same for left weapon -JAL 7F05D9D0 -ADDIU A0,R0,0001 -JAL 7F06942C // -OR A0,V0,R0 -LW T7,0020 (SP) //T6= ammo type -BNEL V0,T7,7F0692C4 - LW RA,001C (SP) -JAL 7F069344 //returns V0= left gun ammo -ADDIU A0,R0,0001 -ADDU S0,S0,V0 -LW RA,001C (SP) --7F0692C4: -OR V0,S0,R0 //V0= total ammo of type -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0020 - - --7F069240: //returns V0= amount of ammo type A0 -LUI T6,8008 -LW T6,A0B0 (T6) -SLL T7,A0,0x2 -ADDU T8,T6,T7 -JR RA -LW V0,1130 (T8) - --7F05D9D0: -SLL T7,A0,0x3 *8 -SUBU T7,T7,A0 -1 -SLL T7,T7,0x2 *4 -ADDU T7,T7,A0 +1 -LUI T6,8008 -LW T6,A0B0 (T6) -SLL T7,T7,0x2 *4 -ADDU T7,T7,A0 +1 -SLL T7,T7,0x3 *8 -ADDU T8,T6,T7 -JR RA -LW V0,0870 (T8) - --7F05C8B4: A0= weapon#; returns V0= address to weapon data -SLL T6,A0,0x3 -SUBU T6,T6,A0 -LUI T7,8003 -ADDIU T7,T7,3924 //T7= 80033924 (gun inventory) -SLL T6,T6,0x3 -ADDU V1,T6,T7 -LW T8,0008 (V1) //T8= flag indicating if weapon has pointers to data -BNEZ T8,7F05C8E0 -NOP -JR RA -LW V0,000C (V1) //V0= weapon data --7F05C8E0: -LUI V0,8003 -ADDIU V0,V0,2494 //V0= default (80032494) -JR RA -NOP - --- -7F039BD8 E3.ww draw right gun (1st person) -OR A0,R0,R0 -JAL 7F05D914 -LB A1,0001 (S1) -ADDIU A0,R0,0001 -JAL 7F05D914 -OR A1,R0,R0 -RETURN... - -7F05D914: set gun[A1] into player hand[A0] - 1st person -SLL V0,A0,0x3 -SUBU V0,V0,A0 -LUI V1,8008 -SLL V0,V0,0x2 -ADDIU V1,V1,A0B0 -ADDU V0,V0,A0 -LW T7,0000 (V1) T7=cur. player data -SLL V0,V0,0x2 -ADDU V0,V0,A0 -SLL V0,V0,0x3 V0=0x3A8 difference b/w R/L guns -ADDIU T6,R0,0005 T6=initial gun state -ADDU T8,T7,V0 -SW T6,0898 (T8) set gun state [next] -LW T9,0000 (V1) T9=cur. player data -ADDU T0,T9,V0 -SW A1,08AC (T0) gun->1st person hand slot -LW T1,0000 (V1) -ADDU T2,T1,V0 -JR RA -SW R0,08B4 (T2) no update? - --- -7F039BFC E4.ww draw right gun (3rd person) -OR A0,R0,R0 -JAL 7F05DB54 -LB A1,0001 (S1) -ADDIU A0,R0,0001 -JAL 7F05DB54 -OR A1,R0,R0 -RETURN... - -7F05DB54: set weapon [A1] into current player hand [A0] - 3rd person -ADDIU SP,SP,FFD8 -SLL T6,A0,0x3 -SW S1,0018 (SP) -SUBU T6,T6,A0 -LUI S1,8008 -SLL T6,T6,0x2 -ADDIU S1,S1,A0B0 -ADDU T6,T6,A0 -LW T7,0000 (S1) T7=cur. player data -SLL T6,T6,0x2 -SW S0,0014 (SP) -ADDU T6,T6,A0 -SLL S0,T6,0x3 S0=0x3A8 difference b/w R/L guns -SW RA,001C (SP) -SW A0,0028 (SP) SP+28=hand -SW A1,002C (SP) SP+2C=weapon -ADDU T8,T7,S0 -LW A0,0870 (T8) A0=ammo? has to be type... -JAL 7F06942C V0=ammo type used by weapon A0 -SW A0,0024 (SP) SP+24=ammo? has to be type... -LW V1,0000 (S1) V1=cur. player data -LW A2,0024 (SP) A2=ammo? -OR A3,V0,R0 A3=V0=ammo used by weapon -ADDU A0,V1,S0 -LW T9,0874 (A0) T9=attack? -LW A1,002C (SP) A1=weapon -BGEZL T9,7F05DBE8 I think if a close-range weapon, do the following... -LW A1,089C (A0) -LW A0,0028 (SP) A0=hand -SW A2,0024 (SP) SP+24=type? -JAL 7F05CFA4 update model in hand -SW V0,0020 (SP) SP+20=ammo used by weapon -LW V1,0000 (S1) -LW A2,0024 (SP) -LW A3,0020 (SP) -ADDU A0,V1,S0 -LW A1,089C (A0) A1=ammo on screen? -//7F05DBE8: mess with ammo -SLL T0,A3,0x2 T0=offset to ammo -ADDU V0,V1,T0 -BLEZ A1,7F05DC04 ammo on screen? should be positive -SLTI AT,A2,0021 TRUE if animation valid -LW T1,1130 (V0) T1=ammo of type -ADDU T2,T1,A1 -SW T2,1130 (V0) save new value -//7F05DC04: -BEQ AT,R0,7F05DC18 -NOP -LW T3,0000 (S1) T3=cur. player data -ADDU T4,T3,S0 -SW A2,0878 (T4) uhm, now I'm really confused... save type... -//7F05DC18: -JAL 7F09A464 V0=#players -NOP -SLTI AT,V0,0002 TRUE if solo -BNEZ AT,7F05DC34 MP only yo! -NOP -JAL 7F09B368 flip weapon/s runtime flag 0x4 -LW A0,0028 (SP) A0=hand -//7F05DC34: -JAL 7F05FB00 -LW A0,0028 (SP) -LW T6,0000 (S1) -LW T5,002C (SP) -ADDU T7,T6,S0 -SW T5,0870 (T7) -LW T8,0000 (S1) -ADDU T9,T8,S0 -SW R0,089C (T9) -LW T0,0000 (S1) -ADDU T1,T0,S0 -SW R0,0A4C (T1) -LW T2,0000 (S1) -ADDU T3,T2,S0 -JAL 7F08D8E0 -SW R0,0A50 (T3) -LW RA,001C (SP) -W S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0028 - -7F05CFA4: update 1st person weapon [A1] in hand [A0] if not set -LUI A2,8008 -ADDIU A2,A2,A0B0 -LW T6,0000 (A2) T6=cur. player data -SLL V0,A0,0x2 V0=hand->offset -ADDU V1,T6,V0 -LW T7,2A50 (V1) T7=update model flag -BNEZ T7,7F05D010 quit if no update flag set -NOP -LW T8,07F8 (V1) weapon visible flag -BLTZL T8,7F05CFF8 -LW T3,0800 (V1) -LW T9,0800 (V1) T9=weapon # -ADDIU T0,R0,FFFF T0=-1 -BEQ A1,T9,7F05D010 if current is same as new weapon, quit -NOP -SW T0,07F8 (V1) -1->visible (makes visible) -LW T1,0000 (A2) T1=cur. player data -ADDU T2,T1,V0 -JR RA -SW A1,2A44 (T2) set new wep -//7F05CFF8: if weapon is not visible, make it so -ADDIU T4,R0,0001 -BEQL A1,T3,7F05D010 -SW T4,07F8 (V1) set weapon visible -JR RA -SW A1,2A44 (V1) -//7F05D010: if no update flag set, quit -JR RA -NOP - -7F09B368: -LUI T6,8008 -LW T6,A0B0 (T6) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LW T7,00A8 (T6) T7=8006 pos. data -OR A1,A0,R0 A1=hand -JAL 7F0521E8 flip weapon runtime flag 0x4 in guard's hand -LW A0,0004 (T7) A0=player equiv. of guard data -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -7F0521E8: toggle 0x4 in run. flags for weapon in hand [A1] of guard [A0] -SLL T6,A1,0x2 T6=hand->offset -ADDU T7,A0,T6 add to guarddata pointer -LW V0,0160 (T7) V0=position data of weapon in hand -BEQ V0,R0,7F05220C quit if NULL -NOP -LW V1,0004 (V0) V1=weapon data -LW T8,0064 (V1) T8=runtime object bitflags -ORI T9,T8,0004 -SW T9,0064 (V1) save toggled flags -//7F05220C: -JR RA -NOP - --- -7F039C20 E5.xx.zz set Bond's speed for external control -LB T4,0001 (S1) -LUI V0,8008 -ADDIU V0,V0,9990 //V0=80079990 -MTC1 T4,F8 //F8= xx -SWC1 F20,0004 (V0) //F20-> 80079994 (usually 0) -ADDIU S2,S2,0003 -CVT.S.W F4,F8 //F4= (float)x -ADDIU S1,S1,0003 -SWC1 F4,0000 (V0) //(float)x -> 80079990 -LB T3,FFFF (S1) //T3= zz -MTC1 T3,F6 -NOP -CVT.S.W F10,F6 //F10= (float)z -BEQ R0,R0,7F03558C -SWC1 F10,0008 (V0) //(float)y -> 80079998 - --- -7F039C5C E6.##.xxxx.rr return if tagged object and preset are in same room -LBU T8,0002 (S1) -LBU T5,0003 (S1) -LBU A0,0001 (S1) -SLL T9,T8,0x8 -OR S0,T9,T5 -ANDI T6,S0,FFFF //T6= xxxx -JAL 7F0570C0 //returns V0= tagged obj -OR S0,T6,R0 //S0=T6= xxxx -SLTI AT,S0,2710 -BEQ AT,R0,7F039CAC -OR V1,S0,R0 -SLL T7,V1,0x2 //get address of 0xxx preset -SUBU T7,T7,V1 -SLL T7,T7,0x2 -LUI T2,8007 -LW T2,5D18 (T2) -SUBU T7,T7,V1 -SLL T7,T7,0x2 -BEQ R0,R0,7F039CD0 -ADDU A0,T7,T2 //A0= pointer to 0xxx preset --7F039CAC: //get address of 2xxx preset -LUI T4,8007 -LW T4,5D1C (T4) -SLL T1,V1,0x4 -ADDU T1,T1,V1 -SLL T1,T1,0x2 -LUI AT,FFF5 -ORI AT,AT,9FC0 -ADDU A0,T1,T4 -ADDU A0,A0,AT //A0= pointer to 2xxx preset --7F039CD0: -LW V1,0028 (A0) //V1= room pointer f/ preset -BEQL V1,R0,7F039D24 - ADDIU S2,S2,0005 -BEQL V0,R0,7F039D24 - ADDIU S2,S2,0005 -LW A0,0010 (V0) //A0= 8006 position data for tagged obj -BEQL A0,R0,7F039D24 - ADDIU S2,S2,0005 -LW T3,0014 (A0) //T3= room pointer for obj -LBU T9,0003 (V1) //T9= room# preset is within -OR A0,S6,R0 -LBU T8,0003 (T3) //T8= room# obj is within -OR A1,S2,R0 -BNEL T8,T9,7F039D24 //return if object and preset within the same room -ADDIU S2,S2,0005 -STD. RETURN - - --- -7F035BC8 E7.rr if guard walking or running while shooting, return -checks if guard is shooting and moving - -LB T8,0007 (S7) //T8= GUARDdata +0x7 (uncertain flags) -ADDIU AT,R0,0008 -BNEL T8,AT,7F035C14 //if not shooting, branch - ADDIU S2,S2,0002 -LW T9,0058 (S7) //T9= GUARDdata +0x58 must =0 -BNEL T9,R0,7F035C14 - ADDIU S2,S2,0002 -LW T1,004C (S7) //T1= GUARDdata 0x4C -OR A0,S6,R0 -OR A1,S2,R0 -ANDI T2,T1,0040 //test if closer than 40 (probably) -BEQL T2,R0,7F035C14 //branch if not in motion - ADDIU S2,S2,0002 -STD. RETURN - --- -7F035C1C E8.rr if guard is shooting, return -LB T3,0007 (S7) //T3= GUARDdata action type -ADDIU AT,R0,0008 -OR A0,S6,R0 -BNE T3,AT,7F035C44 //return if =8 -OR A1,S2,R0 -STD. RETURN - --- -7F039D2C E9 instantly switch to solo sky 2 -only instance: train 1009. triggered when you step on preset 0062 -preset is under the train floor panel. triggers when you fall down. -RELATED TO SKY/FOG - -LUI AT,3F80 -MTC1 AT,F12 //F12= 1.0f -JAL 7F0BACA8 -NOP -RETURN... - --7F0BACA8: A MASSIVE CONVOLUTED MESS -LUI V0,8008 -LW V0,25EC (V0) //V0=800825EC= 80044F24 (env.table match start) -LUI A0,8008 -ADDIU A0,A0,25F8 //A0=800825F8= 19 (train level #) -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -OR T0,A0,R0 -OR T9,V0,R0 -ADDIU T8,V0,0054 --7F0BACCC //copy lower address data to upper address -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T0,T0,000C -SW AT,FFF4 (T0) -LW AT,FFF8 (T9) -SW AT,FFF8 (T0) -LW AT,FFFC (T9) -BNE T9,T8,7F0BACCC -SW AT,FFFC (T0) - // -LW AT,0000 (T9) -LUI V1,8008 -SW AT,0000 (T0) -LW T8,0004 (T9) -LUI AT,8008 -SW T8,0004 (T0) -LW V1,25F0 (V0) //V1=800825F0= 80044F80 (env.table match endpoint) -LWC1 F0,0004 (V0) -LWC1 F4,0004 (V1) -SUB.S -...ETC. copies sky 2 data to sky info @ 800825FC - --- -7F039D48 EA stop time! -LUI T5,8003 -LW T5,64A0 (T5) //T5=800364A0 pause timer=1 -ADDIU T6,R0,0001 -LUI AT,8003 -BNEZ T5,7F039D64 -ADDIU S2,S2,0001 -SW T6,64A0 (AT) --7F039D64: -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 - --- -7F039D6C EB.rr return if button pressed -reads BONDdata 0xD8 --- -7F039DA8 EC disable player pickups -800364B4= 1 to disable --- -7F039DC0 ED hide 1st person display -7F05CF5C-send A0=0(clear right hand), A0=1(clear left hand) - --7F05CF5C: //clear 1st person gun model - accepts A0= 0(clear right hand), 1(clear left hand) - -LUI V1,8008 -ADDIU V1,V1,A0B0 -LW T6,0000 (V1) //T6= handle to BONDdata -SLL V0,A0,0x2 //V0= #words -> offset -ADDIU T0,R0,FFFF -ADDU T7,T6,V0 //T7= offset in BONDdata -SW R0,07F8 (T7) //0-> BONDdata +0x7F8 +offset show hand -LW T8,0000 (V1) //T8= handle to BONDdata -ADDIU T3,R0,0001 -ADDU T9,T8,V0 //T9= offset in BONDdata -SW R0,0800 (T9) //0-> BONDdata +0x800 +offset #gun in hand -LW T1,0000 (V1) //T1= handle to BONDdata -ADDU T2,T1,V0 //T2= offset in BONDdata -SW T0,2A44 (T2) //-1 -> BONDdata +0x2A44 seemingly always -1 -LW T4,0000 (V1) -ADDU T5,T4,V0 //T5= offset in BONDdata -JR RA -SW T3,2A50 (T5) //1-> BONDdata +2A50 +offset don't update model - - --- -7F039DDC EE cuba circular camera -EE.012C.0064.0012.002E.FFBA.1C71 - . . . .ppp6. -expanded data written to 80079A00 -3F882E37 3AE231D6 43960000 42C80000 -C28C0000 0000002E - --- -7F039EE8 EF Start cuba credits -ADDIU T7,R0,0001 -LUI AT,8003 -SW T7,643C (AT) //1->8003643C -RETURN... - --- -7F039F00 F0.rr return when credits finished -LUI T2,8003 -LW T2,643C (T2) //T2=8003643C -ADDIU AT,R0,0002 -OR A0,S6,R0 -BNE T2,AT,7F039F2C //return if 8003643C=2 -OR A1,S2,R0 - --- -7F039F38 F1.rr if objectives complete, return --- -7F039F6C F2.##.rr if selected Bond# (0-3), return -JAL 7F01D56C -NOP -LB T1,0001 (S1) -... -BNEL V0,T1,7F039FA0 - -7F01D56C: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8003 -JAL 7F01EBC0 -LW A0,A8E8 (A0) //A0=8002A8E8 folder# -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA - -7F01EBC0: -SW A0,0000 (SP) -JR RA -OR V0,R0,R0 - --- -7F039FA8 F3.rr if player pickups disabled, return -LUI T4,8003 -LW T4,64B4 (T4) -... -BEQL T4,R0,7F039FD8 -... - --- -7F039FE0 F4.0s.xx.yy Plays X-themes slot# =0-3; play for x/y seconds -OR V0,S1,R0 -ADDIU S1,S1,0004 -ADDIU S2,S2,0004 -LB A0,0001 (V0) -LBU A1,0002 (V0) -JAL 7F0C14FC -LBU A2,0003 (V0) - - --7F0C14FC: -LUI T6,8009 -ADDIU T6,T6,C608 //T6= 8008C608 -SLL V0,A0,0x2 //V0= s * 4 -ADDU V1,V0,T6 //V1= 8008C608 + offset -LW T7,0000 (V1) -ADDIU A0,R0,003C -BNEZ T7,7F0C1550 //if not 0, kill -NOP -MULTU A1,A0 -ADDIU T8,R0,0001 -LUI AT,8009 -SW T8,0000 (V1) //1-> 8008C608 + offset -ADDU AT,AT,V0 -MFLO T9 //T9= x * 60 -SW T9,C618 (AT) //T9 -> 8008C618 + offset -LUI AT,8009 -MULTU A2,A0 -ADDU AT,AT,V0 -MFLO T0 //T0= y * 60 -SW T0,C628 (AT) //A0*A2 -> 8008C628 + offset -NOP -JR RA -NOP - ---CALLED @ -7F0C13F8: -LW A1,0000 (A3) //A1= first value byte -BNEL A1,R0,7F0C1414 - LW V0,0000 (A0) //V0= second value - //if you don"t have music, do this: -LW T6,0000 (A0) -BLEZL T6,7F0C1488 //test next music sample - ADDIU A0,A0,0004 -LW V0,0000 (A0) --7F0C1414 //there"s some music yo -LUI T7,8009 -ADDIU T7,T7,C628 //T7= 8008C628 -SLT AT,V0,A2 //TRUE if second value < 1 -BNEZ AT,7F0C1434 -ADDU V1,T0,T7 //V1= P->third value - //if > 1, --value and save back -SUBU T8,V0,A2 //T8= second value - 1 -BEQ R0,R0,7F0C1438 -SW T8,0000 (A0) --7F0C1434 //if <1, set to zero -SW R0,0000 (A0) //second value = 0 --7F0C1434 -LW V0,0000 (V1) //V0= third value -BEQ V0,R0,7F0C1484 -SLT AT,V0,A2 //TRUE if third value < 1 -BNEZ AT,7F0C1454 -SUBU T9,V0,A2 //T9= value-- -BEQ R0,R0,7F0C1458 -SW T9,0000 (V1) //save third value back --7F0C1454 -SW R0,0000 (V1) //if <=1, third value =0 --7F0C1458 -LW T3,0000 (V1) //T3= third value -BEQL T3,R0,7F0C1484 - SW R0,0000 (A3) -BNEZ A1,7F0C1478 //if first value=0, check second value instead -NOP -LW T4,0000 (A0) //T4= second value -BEQL T4,R0,7F0C1488 - ADDIU A0,A0,0004 --7F0C1478 -BEQ R0,R0,7F0C1484 -ADDIU T2,R0,0001 //T2= 1 -Then itterate to next music thingy - --- -7F03A004 F5.xx turn off music in slot 0-3 or all music (FF) -(should not be larger than 0x3. if < 0, resets all values at 8008C608) -OR V0,S1,R0 -ADDIU S1,S1,0002 -ADDIU S2,S2,0002 -JAL 7F0C1558 -LB A0,0001 (V0) -RETURN... - --7F0C1558: -BLTZ A0,7F0C1574 -LUI AT,8009 --7F0C1560: -SLL T6,A0,0x2 //T6= A0->pointer offset -LUI AT,8009 -ADDU AT,AT,T6 -JR RA -SW R0,C608 (AT) //0-> 8008C608 + 4*A0 --7F0C1574: //reset (A0 < 0) -SW R0,C608 (AT) //0->8008C608 -LUI AT,8009 -SW R0,C618 (AT) -LUI AT,8009 -SW R0,C628 (AT) -LUI AT,8009 -SW R0,C60C (AT) -LUI AT,8009 -SW R0,C61C (AT) -LUI AT,8009 -SW R0,C62C (AT) -LUI AT,8009 -SW R0,C610 (AT) -LUI AT,8009 -SW R0,C620 (AT) -LUI AT,8009 -SW R0,C630 (AT) -LUI AT,8009 -SW R0,C614 (AT) -LUI AT,8009 -SW R0,C624 (AT) -LUI AT,8009 -SW R0,C634 (AT) -JR RA -NOP - - - --- -7F03A020 F6 BLOW THE SNOT OUT OF EVERYTHING --7F08BFC4: accepts A0=delay to trigger -LUI T7,8005 -LW T7,837C (T7) //T7=8004837C= ??? -ADDIU T6,R0,0001 -LUI AT,8003 -SW T6,6444 (AT) //1-> 80036444 plastique! -LUI AT,8008 -ADDU T8,A0,T7 -SW T8,999C (AT) //offset from current time to execution -LUI AT,8008 -JR RA -SW R0,99A0 (AT) //0-> 800799A0 timer to event trigger - --- -7F03A034 F7.##.rr if # < dead scientists, return -JAL 7F06A770 -NOP -COMPARE AND RETURN - --7F06A770: -LUI T6,8008 -LW T6,A0B4 (T6) //T6=8007A0B4= 80079EF0 -JR RA -LW V0,006C (T6) //V0= +0x6C. guess these are player statistics... - --- -7F03A074 F8.##.rr if guardID#'s 00200000 flag set, unset and return ??? -OR A0,S7,R0 -JAL 7F033040 //returns V0= guard handle -LBU A1,0001 (S1) -BEQL V0,R0,7F03A0CC - ADDIU S2,S2,0003 -LW T8,0014 (V0) //T8= guard bitflags -LUI AT,FFDF -ORI AT,AT,FFFF //AT= FFDFFFFF -SLL T9,T8,0xA //T9= T8 * 0x400 -BGEZL T9,7F03A0CC - ADDIU S2,S2,0003 -LW T5,0014 (V0) //T5= guard bitflags -OR A0,S6,R0 -OR A1,S2,R0 -AND T6,T5,AT //T6= flags with 00200000 untoggled -SW T6,0014 (V0) //save it back -STD. RETURN - --- -7F03A0D4 F9 set "Killed in Action" -ADDIU T7,R0,0001 -LUI AT,8003 -SW T7,A928 (AT) //1->8002A928 -RETURN... - --- -7F03A0EC FA Fawn on shoulder -used only in "Nat follows you" routines (train, bunker, archives) - -JAL 7F03364C -OR A0,S7,R0 -RETURN... - --7F03364C: (not all listed) -JAL 7F02A258 //test if guard not dead -SW A0,0018 (SP) -... if V0 not valid, return V0=0 -JAL 7F0244AC -LW A0,0018 (SP) -ADDIU V0,R0,0001 - --7F0244AC: (NOT ALL LISTED) START HERE!!!!!!!!!!!! -SW S0,0020 (SP) -JAL 7F02D184 -OR S0,A0,R0 //S0= GUARDdata -ADDIU T6,R0,0012 -SB T6,0007 (S0) //T6= guard looks around self -JAL 7000A450 -SB R0,0008 (S0) -LUI A1,3EB3 -LUI A2,3F0F -ORI A2,A2,5C29 //A2= 3F0F5C29 -ORI A1,A1,3333 //A1= 3EB33333 -SW V0,0028 (SP) -JAL 7F023B5C -OR A0,S0,R0 //A0= GUARDdata -LW A2,0028 (SP) //A2=V0= ??? -LUI T7,8007 -LUI AT,4180 -MTC1 AT,F4 -LW T7,9538 (T7) //T7= 80079538 -LUI T8,0000 -ADDIU T8,T8,4384 //T8= 00004384 -LW A0,001C (S0) //A0= model data handle -ANDI T9,A2,0001 -OR A2,T9,R0 //A2= test for 1 -SWC1 F0,0010 (SP) -ADDIU A3,R0,0000 -SWC1 F4,0014 (SP) -JAL 7F06FCA8 -ADDU A1,T7,T8 -LW A0,001C (S0) -JAL 7F06FDE8 -LUI A1,40E0 -reset vars and RETURN... - ---7F06FDE8: -LW V0,0020 (A0) //V0= -MTC1 A1,F12 -LUI AT,BF80 -BEQL V0,R0,7F06FE2C - MTC1 AT,F8 -LHU T6,0004 (V0) -ADDIU T7,T6,FFFF -MTC1 T7,F4 -NOP -CVT.S.W F6,F4 -C.LT.S F12,F6 -NOP -BC1FL 7F06FE2C -MTC1 AT,F8 -JR RA -SWC1 F8,003C (A0) --7F06FE2C -NOP -SWC1 F8,003C (A0) -JR RA -NOP - --- -7F03A100 FB switch to x-sky (if gas-releasing objects, sets them off) -LUI T2,8003 -ADDIU T2,T2,0A88 //T2= 80030A88 -LW AT,0000 (T2) //AT= ??? -ADDIU A0,SP,0090 -SW AT,0000 (A0) //??? -> SP+0x90 -LW T3,0004 (T2) //T3= ???+4 -SW T3,0004 (A0) //T3 -> SP+0x94 -LW AT,0008 (T2) //AT= ???+8 -JAL 7F055E64 -SW AT,0008 (A0) //AT -> SP+0x98 -RETURN... - --- -7F03A134 FC.## drop tagged obj from rack, guard, etc -speculative, but seems to unlink tagged object from whatever it is linked to. -ie: drop a monitor from a hanging monitor rack, guard drops weapon, etc -40 tag only used by monitor rack, 80 tag set when an object falls to ground. -links to 75030 and 73DC0, both of which are used to slave object position. - -JAL 7F0570C0 //returns V0= handle to tagged obj. -LBU A0,0001 (S1) -BEQL V0,R0,7F03A1E4 - ADDIU S2,S2,0002 -LW T8,0010 (V0) //T8= 8006 of tagged obj -BEQL T8,R0,7F03A1E4 - ADDIU S2,S2,0002 -LW A0,0010 (V0) //A0= 8006 of tagged obj -JAL 7F03FDA8 //mess with position offset smidgeons -SW V0,0088 (SP) -LW V1,0088 (SP) //V1= obj. handle -LW T9,0064 (V1) //T9= obj + 0x64 (object flag field) -ANDI T5,T9,0080 -BEQL T5,R0,7F03A1E4 //keep going if 00000080 toggled - ADDIU S2,S2,0002 -LW V0,006C (V1) //V0= obj + 0x6C (pointer to position offset data) -LW T6,0000 (V0) //T6= value there -ORI T7,T6,0601 -SW T7,0000 (V0) //store the value back masked w/ 00000601 -LW A0,0010 (V1) //A0= 8006 of tagged obj. -JAL 7F03FE14 //sets rooms at 0xCC,0xCD -SW V1,0088 (SP) -LW V1,0088 (SP) //V1= obj. handle -LW A0,006C (V1) //A0= obj + 0x6C (pointer to position offset data) -JAL 7F057FD0 //set up smidgeon data -ADDIU A0,A0,0020 -LW V1,0088 (SP) //V1= obj. handle -LUI AT,8005 -LW T4,006C (V1) //T4= obj + 0x6C (pointer to position offset data) -SWC1 F20,0004 (T4) -LWC1 F8,2974 (AT) //F8=80052974= -LW T1,006C (V1) //T1= obj +0x6C (pointer to position offset data) -LUI AT,8005 -SWC1 F8,0008 (T1) // -LW T2,006C (V1) //T2= obj +0x6C (pointer to position offset data) -SWC1 F20,000C (T2) -LW T3,006C (V1) //T3= obj +0x6C (pointer to position offset data) -SWC1 F20,0010 (T3) -LWC1 F4,2978 (AT) //F8=80052978= -LW T8,006C (V1) //T8= obj +0x6C (pointer to position offset data) -SWC1 F4,0014 (T8) -LW T9,006C (V1) //T9= obj +0x6C (pointer to position offset data) -SWC1 F20,0018 (T9) -ADDIU S2,S2,0002 --7F03A1E4: -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 - ---7F03FDA8: routine that translates a slaved object to an ordinary one -ie. when guards drop guns, you shoot an object, etc -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LW V1,0004 (A0) //V1= obj data handle -LW V0,0064 (V1) //V0= obj +0x64 (object flag field) -ANDI T6,V0,0040 -BEQ T6,R0,7F03FDDC //continue if flags= 00000040 (slave obj position) -ANDI T8,V0,0080 -JAL 7F03FC80 //returns V0= 73D30 smidgeon data -SW V1,001C (SP) -LW V1,001C (SP) //V1= obj data handle -LW T7,006C (V1) //T7= obj +0x6C (pointer to position offset data) -BEQ R0,R0,7F03FE04 -SW V0,0044 (T7) //smidgeon handle -> position offset +0x44 --7F03FDDC -BNEL T8,R0,7F03FE08 //return if flags= 00000080 - LW RA,0014 (SP) -JAL 7F03FC80 //returns V0= 73D30 smidgeon data -SW V1,001C (SP) -LW V1,001C (SP) //V1= obj data handle -BEQ V0,R0,7F03FE04 -SW V0,006C (V1) -LW T9,0064 (V1) //T9= obj +0x64 -ORI T0,T9,0080 //T0= obj with 00000080 untoggled -SW T0,0064 (V1) //save it back --7F03FE04 -LW RA,0014 (SP) --7F03FE08 -ADDIU SP,SP,0020 -JR RA -NOP - ---7F03FE14: -LW V0,0004 (A0) //V0= OBJdata -OR V1,R0,R0 -LW A1,0064 (V0) //A1= obj flag field -ANDI T6,A1,0040 -BEQ T6,R0,7F03FE38 //if not controlled by another object, branch -ANDI T8,A1,0080 -LW T7,006C (V0) //T7= obj position offset data -BEQ R0,R0,7F03FE44 -LW V1,0044 (T7) //V1= obj position offset data +0x44 (?) --7F03FE38 -BEQ T8,R0,7F03FE44 //if not 00000080, branch -NOP -LW V1,006C (V0) //V1= obj position offset data --7F03FE44 -BEQ V1,R0,7F03FE80 -NOP -LW T9,0000 (V1) //T9= obj position offset 0x0 (type ID?) -ADDIU T2,R0,00FF -ADDIU T3,R0,00FF -ORI T0,T9,0004 -SW T0,0000 (V1) //toggle 0x4 on ID value -LW V0,0014 (A0) //V0= room pointer -BEQL V0,R0,7F03FE80 - SB T3,00CC (V1) -LBU T1,0003 (V0) //T1= room# -SB T2,00CD (V1) -JR RA -SB T1,00CC (V1) --7F03FE80 -JR RA -NOP - ---7F057FD0: blank data at slave position +0x20 -MTC1 R0,F2 //F2= 0.0 -LUI AT,3F80 -MTC1 AT,F0 //F0= 3F800000 (1.0) -SWC1 F2,0004 (A0) // -SWC1 F2,0008 (A0) -SWC1 F2,000C (A0) -SWC1 F2,0010 (A0) -SWC1 F2,0018 (A0) -SWC1 F2,001C (A0) -SWC1 F2,0020 (A0) -SWC1 F2,0024 (A0) -SWC1 F2,002C (A0) -SWC1 F2,0030 (A0) -SWC1 F2,0034 (A0) -SWC1 F2,0038 (A0) -SWC1 F2,0000 (A0) -SWC1 F2,0014 (A0) -SWC1 F2,0028 (A0) -JR RA -SWC1 F0,003C (A0) - ---7F03FC80: -ADDIU SP,SP,FFD0 -LUI V0,8007 -LUI A0,8007 -SW RA,0014 (SP) -ADDIU A2,R0,FFFF -ADDIU A0,A0,5030 //A0= 80075030 (00000040 obj smidgeon) -ADDIU V0,V0,3DC0 //V0= 80073DC0 (00000080 obj smidgeon) -OR A1,R0,R0 -LUI V1,8000 --7F03FCA4 //test for 80000000 in 0080 smideon table -LW T6,0000 (V0) //T6= tableID -ADDIU V0,V0,00EC -SLTU AT,V0,A0 //20 (0x14) of these max. TRUE if at end of list -AND T7,T6,V1 -BEQ T7,R0,7F03FCD4 //keep searching for 80000000 -LUI A3,8007 -ADDIU A3,A3,3DC0 -ADDU A0,A3,A1 //A0= current smidgeon (offset + base) -JAL 7F03FBFC //blank out (reset) smidgeon info -SW A0,0020 (SP) -BEQ R0,R0,7F03FD98 -LW V0,0020 (SP) //V0= current smidgeon --7F03FCD4 -BNEZ AT,7F03FCA4 -ADDIU A1,A1,00EC - // -LUI V0,8007 -LUI A3,8007 -ADDIU A3,A3,3DC0 //A3= 80073DC0 -ADDIU V0,V0,3DC0 //V0= 80073DC0 -OR V1,R0,R0 -ADDIU A1,R0,00EC -ADDIU A0,R0,0014 --7F03FCF8 -LW T8,00E4 (V0) //T8= smidgeon +0xE4 (OBJdata) -BEQL T8,R0,7F03FD34 - ADDIU V1,V1,0001 -BLTZL A2,7F03FD30 //first run, A2=counter - OR A2,V1,R0 -MULTU A2,A1 //A2*size -LW T9,00E8 (V0) //T9= smidgeonCUR +0xE8 (???) -MFLO T1 -ADDU T2,A3,T1 //T2= prior smidgeon -LW T3,00E8 (T2) //T3= smidgeonLAST +0xE8 (???) -SLT AT,T9,T3 //TRUE if currrent smidgeon less than prior -BEQL AT,R0,7F03FD34 //save counter to A2 if true - ADDIU V1,V1,0001 -OR A2,V1,R0 //A2=counter --7F03FD30 -ADDIU V1,V1,0001 --7F03FD34 -BNE V1,A0,7F03FCF8 -ADDIU V0,V0,00EC - // -BLTZ A2,7F03FD98 //branch if a counter wasn't saved -OR V0,R0,R0 -MULTU A2,A1 -MFLO V1 //V1= offset to smidgeon -ADDU T0,A3,V1 //T0= nifty smidgeon -LW T4,00E4 (T0) //T4= smidgeon +0xE4 (OBJdata) -LW A0,0010 (T4) //A0= OBJ 8006 -SW T0,0020 (SP) -JAL 7F040CF0 //trashes the flags and position data pointer -SW V1,0024 (SP) -LW T0,0020 (SP) //T0= nifty smidgeon -LW V1,0024 (SP) //V1= offset to smidgeon -LUI A3,8007 -LW V0,00E4 (T0) //V0= smidgeon +0xE4 (OBJdata) -ADDIU A3,A3,3DC0 //A3= 80073DC0 -ADDU A0,A3,V1 //A0= nifty smidgeon -LW T5,0064 (V0) //T5= object flaggy things -ORI T6,T5,0004 -SW T6,0064 (V0) //save it back with 04 toggled -JAL 7F03FBFC //blank out (reset) smidgeon info -SW A0,001C (SP) -BEQ R0,R0,7F03FD98 -LW V0,001C (SP) //V0= nifty smidgeon --7F03FD98 //return... -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - ---7F040CF0: -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LW V0,0004 (A0) //V0= OBJdata -LW V1,0064 (V0) //V1= obj flaggy flags -ANDI T6,V1,0040 -BEQ T6,R0,7F040D5C //branch if not an 0040 -ANDI T8,V1,0080 -LW A0,006C (V0) //A0= obj position offset data -BEQL A0,R0,7F040D4C - ADDIU AT,R0,FFBF -LW A1,0044 (A0) //A1= position offset data 0x44 (???) -BEQ A1,R0,7F040D38 -NOP -OR A0,A1,R0 -JAL 7F03FB70 -SW V0,001C (SP) -LW V0,001C (SP) //V0= OBJdata -LW A0,006C (V0) //A0= obj position offset data --7F040D38 //no pointer @ position offset data 0x44 -JAL 7F03FE88 -SW V0,001C (SP) -LW V0,001C (SP) //V0= OBJdata -LW V1,0064 (V0) //V1= obj flaggy flags -ADDIU AT,R0,FFBF --7F040D4C //no position offset data available... -AND T7,V1,AT //untoggle the 00000040 flag -SW R0,006C (V0) //kill the position offset data -BEQ R0,R0,7F040D88 -SW T7,0064 (V0) --7F040D5C //0040 not toggled -BEQL T8,R0,7F040D8C //if not at least an 0080, leave... - LW RA,0014 (SP) -LW A0,006C (V0) //A0= obj position offset data -JAL 7F03FB70 -SW V0,001C (SP) -LW V0,001C (SP) //V0= OBJdata -ADDIU AT,R0,FF7F -LW T9,0064 (V0) //T9= obj flaggy flags -SW R0,006C (V0) //kill the position offset data -AND T0,T9,AT -SW T0,0064 (V0) //untoggle 00000080 from flags --7F040D88 -LW RA,0014 (SP) --7F040F8C -ADDIU SP,SP,0020 -JR RA -NOP \ No newline at end of file diff --git a/notes/GE Documentation/Other WIPs/WIP select same characters.txt b/notes/GE Documentation/Other WIPs/WIP select same characters.txt deleted file mode 100644 index 11f1de9..0000000 --- a/notes/GE Documentation/Other WIPs/WIP select same characters.txt +++ /dev/null @@ -1,297 +0,0 @@ -8002B524 player1 MP character -8002B528 player2 MP character -8002B52C player3 MP character -8002B530 player4 MP character - -Select the same characters -USA 046744 0001 10 -JAP 0467C4 0001 10 -PAL 044504 0001 10 - -++++++++++++++++++++++++++++++++++++ -//7F01AA80: -LUI V0,8003 -LW V0,A8C8 (V0) // -LUI A0,8003 -ADDIU A0,A0,A8C0 //A0=8002A8C0=cur menu -BLTZ V0,7F01ACB8 -ADDIU T7,R0,FFFF //T7=-1 -LUI AT,8003 -SW T7,A8C8 (AT) //-1->8002A8C8 -LW T8,0000 (A0) //T8=cur menu -SLTIU AT,T8,001A -BEQ AT,R0,7F01ACB8 -SLL T8,T8,0x2 //T8=menu#->offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,1BB4 (AT) //T8=80051BB4+ -JR T8 -NOP - -7F01AAC8: -JAL 7F00A5E8 -... - -7F01AADC: -JAL 7F00ABC8 -... - -7F01AAF0: -JAL 7F00B064 -... - -7F01AB04: -JAL 7F00B154 -... - -7F01AB18: -JAL 7F00B258 -... - -7F01AB2C: -JAL 7F00B9E8 -... - -7F01AB40: -JAL 7F00D250 -... - -7F01AB54: -JAL 7F00DE50 -... - -7F01AB68: -JAL 7F00E780 -... - -7F01AB7C: -JAL 7F00F300 -... - -7F01AB90: -JAL 7F0155F4 -... - -7F01ABA4: -JAL 7F016064 -... - -7F01ABB8: -JAL 7F016094 -... - -7F01ABCC: -JAL 7F01667C -... - -7F01ABE0: -JAL 7F01073C -... - -7F01ABF4: -JAL 7F014764 -... - -7F01AC08: call the character selection screen -JAL 7F011C3C //set the player selections and build menu -NOP -LUI A0,8003 -BEQ R0,R0,7F01ACB8 -ADDIU A0,A0,A8C0 //A0=8002A8C0 current menu - -7F01AC1C: -JAL 7F014CC0 -... - -7F01AC30: -JAL 7F012E30 -... - -7F01AC44: -JAL 7F013574 -... - -7F01AC58: -JAL 7F013D78 -... - -7F01AC6C: -JAL 7F017B50 -... - -7F01AC80: -JAL 7F018438 -... - -7F01AC94: -JAL 7F01869C -... - -7F01ACA8: -JAL 7F01A39C -... - -7F01ACB8: return from all above routines -LW T9,0000 (A0) //T9=menu# -SLTIU AT,T9,001A -BEQ AT,R0,7F01AEEC -SLL T9,T9,0x2 //T9=menu#->offset -LUI AT,8005 -ADDU AT,AT,T9 -LW T9,1C1C (AT) //T9=80051C1C+ -JR T9 -NOP - - ---------------------------------------------- -7F011C3C: MP character selection screen -SKIP A FEW... -//7F011D84: -LUI S2,8003 -LUI S3,8003 -SW T3,0000 (S1) //store # MP characters available->8002B194 -ADDIU S3,S3,B534 //S3=mp stage selected -ADDIU S2,S2,B524 //S2=selected characters -LW V0,0000 (S1) //V0=#available characters -//7F011D9C: loopus per char -LW T4,0000 (S2) //T4=selected char -SLT AT,T4,V0 //TRUE if valid selection -BNEL AT,R0,7F011DE0 - ADDIU S2,S2,0004 -BLEZ V0,7F011DD8 //deal with screwy number of available characters -OR S0,R0,R0 -//7F011DB4: -JAL 7F011BD8 -OR A0,S0,R0 //A0=S0=0 -BEQL V0,R0,7F011DDC - SW S0,0000 (S2) //select BOND -LW T5,0000 (S1) //T5=#available chars -ADDIU S0,S0,0001 -SLT AT,S0,T5 -BNEZ AT,7F011DB4 -NOP -//7F011DD8: -SW S0,0000 (S2) //store a valid selection in slot -//7F011DDC: -ADDIU S2,S2,0004 //next char slot -BNEL S2,S3,7F011D9C //more pointers equals more work - LW V0,0000 (S1) //V0=#available chars -//7F011DE8: -LUI V0,8003 -LW V0,B524 (V0) //V0=8002B524=P1 char -LUI AT,8007 -LUI V1,8003 -SW V0,9710 (AT) //P1->80069710 -LUI AT,8007 -SW V0,9720 (AT) //P1->80069720 -LUI AT,8007 -SW R0,9730 (AT) //0->80069730 -LUI AT,8007 -SW R0,9740 (AT) //0->80069740 -//7F011E14: -LW V1,B528 (V1) //V1=8002B528=P2 char -LUI AT,8007 -SW R0,9750 (AT) //0->80069750 -LUI AT,8007 -SW V1,9714 (AT) //P2->80069714 -LUI AT,8007 -SW V1,9724 (AT) //P2->80069724 -LUI AT,8007 -SW R0,9734 (AT) //0->80069734 -LUI AT,8007 -SW R0,9744 (AT) //0->80069744 -//7F011E40: -LUI A0,8003 -LW A0,B52C (A0) //A0=8002B52C=P3 char -LUI AT,8007 -SW R0,9754 (AT) //0->80069754 -LUI AT,8007 -SW A0,9718 (AT) //P3->80069718 -LUI AT,8007 -SW A0,9728 (AT) //P3->80069728 -LUI AT,8007 -SW R0,9738 (AT) //0->80069738 -LUI AT,8007 -SW R0,9748 (AT) //0->80069748 -//7F011E70: -LUI A1,8003 -LW A1,B530 (A1) //A1=8002B530=P4 char -LUI AT,8007 -SW R0,9758 (AT) //0->80069758 -LUI AT,8007 -SW A1,971C (AT) //P4->8006971C -LUI AT,8007 -SW A1,972C (AT) //P4->8006972C -LUI AT,8007 -SW R0,973C (AT) //0->8006973C -LUI AT,8007 -SW R0,974C (AT) //0->8006974C -LUI AT,8007 -JAL 7F00B8AC -SW R0,975C (AT) //0->8006975C -//7F011EA8: -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -+++++++++++++++++++++++++++++ - -Upon selection: [above was all creation...] - -//7F0120A8: -LW T1,0000 (S1) //selected slot from 80069710 line -ADDU AT,AT,S3 //offset to player's char slot -ADDIU V0,R0,0001 //V0=1 -ADDU T2,S7,S3 //T2=player slot on 80069750 -SW T1,B524 (AT) //save selected char to player char slot -SW V0,0000 (T2) //1-> 80069750 line -SW V0,0000 (S4) //1-> 80069740 line -LW A0,0000 (S8) //A0=80063720 -ADDIU A1,R0,00C7 //A1=C7 -JAL 70008E08 -OR A2,R0,R0 //A2=0 -BEQ R0,R0,7F012168 -LW A1,0000 (S5) //A1=selected slot on the 80069720 line - - - -============================= -7F00B8AC: - -============================= -7F011BD8: checks for identical slots return V0=1 if selected -LUI A1,8003 -LW A1,B520 (A1) //A1=8002B520=#players -OR A2,A0,R0 //A2=A0 -OR V1,R0,R0 //V1=0 -BLEZ A1,7F011C34 //do feed it a valid # players -OR V0,R0,R0 -LUI T6,8007 -SLL T7,A1,0x2 //T7=#players to offset -LUI A1,8003 -ADDIU A0,T6,9740 //A0=80069740 -ADDU A3,T7,A0 //A3=A0+offset -ADDIU A1,A1,B524 //A1=8002B524 -//7F011C08 -LW T8,0000 (A0) //T8=selected tag -ADDIU A0,A0,0004 //next value... -SLTU AT,A0,A3 //TRUE if haven't made it through selected char list yet -BEQ T8,R0,7F011C2C //branch if player hasn't selected anything - //!!! The Culprit! I Smite You Now !!! -ADDU T9,A1,V0 -LW T0,0000 (T9) //T0=selected character -BNE A2,T0,7F011C2C -NOP -ADDIU V1,R0,0001 //NEXT! -//7F011C2C -BNEZ AT,7F011C08 -ADDIU V0,V0,0004 //inc offset -//7F011C34 -JR RA -OR V0,V1,R0 //V0=return value - diff --git a/notes/GE Documentation/Other WIPs/WIP unknown data.txt b/notes/GE Documentation/Other WIPs/WIP unknown data.txt deleted file mode 100644 index 2487d1b..0000000 --- a/notes/GE Documentation/Other WIPs/WIP unknown data.txt +++ /dev/null @@ -1,284 +0,0 @@ -pointer at 8002A260 to 80030B74 -7F001958 0x36488 CALLED DURING STAGE LOAD, AT LEAST... - -+-+-+-+-+ -!SOLVED! -0x1581C PP7 08 object - -copied to stack during player creation, but apparently unused -can be eliminated with this sloppy patch: - -//7F079D4C: 0xAE87C this section extroneous -10000010 *BEQ R0,R0,+16 -00002025 *OR A0,R0,R0 - SW V0,00E0 (SP) - ADDIU T4,T9,0084 - ADDIU T8,SP,0054 -//7F079D60: iterate to copy yo - LW AT,0000 (T9) - ADDIU T9,T9,000C - ADDIU T8,T8,000C - SW AT,FFF4 (T8) - LW AT,FFF8 (T9) - SW AT,FFF8 (T8) - LW AT,FFFC (T9) - BNE T9,T4,7F079D60 - SW AT,FFFC (T8) -//7F079D84: - LW AT,0000 (T9) - OR A0,R0,R0 A0=right hand - JAL 7F05DA44 ret. V0=ammo in wep. -0FC17691 *JAL 7F05DA44 ret. V0=ammo in wep. - -or just do this to avoid rewritting the whole routine: -0AE89D 0001 00 -0AE8A5 0001 00 -0AE8B1 0001 00 -0AE8C1 0001 00 - -+-+-+-+-+ - -!SOLVED! -Values at 8002A23C 0x94AC - -look to be models. used in debug weapon load can delete! - -7F00140C: 0x35F3C copies values someplace... - sole caller is 7F090E54, a debug option... weapon load -ADDIU SP,SP,FFB0 -LUI T7,8003 -SW RA,001C (SP) -SW S0,0018 (SP) -ADDIU T7,T7,A23C T7=8002A23C: list of values -LW AT,0000 (T7) -LW T0,0004 (T7) -ADDIU T6,SP,0030 -SW AT,0000 (T6) -SW T0,0004 (T6) -LW T0,000C (T7) -LW AT,0008 (T7) -ADDIU S0,SP,0030 -SW T0,000C (T6) -SW AT,0008 (T6) -LW AT,0010 (T7) -LW T0,0014 (T7) -SW AT,0010 (T6) -SW T0,0014 (T6) -LW T0,001C (T7) -LW AT,0018 (T7) -SW T0,001C (T6) -SW AT,0018 (T6) -LW T1,0030 (SP) -BLTZL T1,0x35FC4 -LW RA,001C (SP) -LW A0,0000 (S0) -//0x35FA8: -JAL 7F056C38 -NOP -LW A0,0004 (S0) -ADDIU S0,S0,0004 -BGEZ A0,0x35FA8 -NOP -LW RA,001C (SP) -//0x35FC4 -LW S0,0018 (SP) -ADDIU SP,SP,0050 -JR RA -NOP - - --------------------- - -values at 8002A9B0 [0x9C20] -!SOLVED! palette for Jtext on menus - -loaded as bytes within routine 7Fxxxxxx [0x3E290] - -7F009760 0x3E290 -LUI T6,8005 -LW T6,84D0 (T6) T6=800484D0: J_text flag -ADDIU SP,SP,FFC8 -SW RA,0034 (SP) -BEQ T6,R0,0x3E328 branch if english -LW T5,0048 (SP) -//0x3E2A8: J_text only -LUI T0,8003 -LUI T2,8003 -LBU T2,A9B4 (T2) T2=8002A9B4: 96 -LBU T0,A9B0 (T0) T0=8002A9B0: A0 -LW T8,004C (SP) -LUI T5,8003 -LBU T5,A9B8 (T5) T5=8002A9B8: 28 -LW T7,0048 (SP) -SLL T3,T2,0x10 T3=00960000 -SLL T1,T0,0x18 T1=A0000000 -SW T8,0014 (SP) -LW T9,0050 (SP) -LUI T8,8003 -OR T4,T1,T3 -LBU T8,A9BC (T8) T8=8002A9BC: 8C -SLL T6,T5,0x8 T6=00002800 -SW T7,0010 (SP) -LW T3,0060 (SP) -LW T1,005C (SP) -LW T0,0054 (SP) -LW T2,0058 (SP) -OR T7,T4,T6 -SW T9,0018 (SP) -OR T9,T7,T8 T9=A096288C -SW T9,001C (SP) -SW T3,002C (SP) -SW T1,0028 (SP) -SW T0,0020 (SP) -JAL 7F0AE6EC -SW T2,0024 (SP) -BEQ R0,R0,0x3E364 -OR A0,V0,R0 -//0x3E328: -LW T4,004C (SP) -LW T6,0050 (SP) -LW T7,0054 (SP) -LW T8,0058 (SP) -LW T9,005C (SP) -LW T0,0060 (SP) -SW T5,0010 (SP) -SW T4,0014 (SP) -SW T6,0018 (SP) -SW T7,001C (SP) -SW T8,0020 (SP) -SW T9,0024 (SP) -JAL 7F0ADABC -SW T0,0028 (SP) -OR A0,V0,R0 -//0x3E364: -LW RA,0034 (SP) -ADDIU SP,SP,0038 -OR V0,A0,R0 -JR RA -NOP - - -!REVISED! mostly to amke it less idiotic and open up some space - 0x3E290 -3C0E8005 -LUI T6,8005 -8DCE84D0 -LW T6,84D0 (T6) T6=800484D0: J_text flag -27BDFFC8 -ADDIU SP,SP,FFC8 -AFBF0034 -SW RA,0034 (SP) -8FAC004C LW T4,004C (SP) -8FAD0048 -LW T5,0048 (SP) -8FB90050 LW T9,0050 (SP) -AFAD0010 SW T5,0010 (SP) -AFAC0014 SW T4,0014 (SP) -AFB90018 SW T9,0018 (SP) -8FAF0054 LW T7,0054 (SP) -8FB80058 LW T8,0058 (SP) -8FB9005C LW T9,005C (SP) -11C0000B BEQ T6,R0,0x3E2F4 branch if english -8FA80060 LW T0,0060 (SP) -//0x3E2CC: J_text only -AFA8002C SW T0,002C (SP) -AFB90028 SW T9,0028 (SP) -AFAF0020 SW T7,0020 (SP) -AFB80024 SW T8,0024 (SP) -3C088003 -LUI T0,8003 -9D08A9B0 *LWU T0,A9B0 (T0) T0=8002A9B0: A0 -0FC2B9BB JAL 7F0AE6EC -AFA8001C *SW T0,001C (SP) -10000006 BEQ R0,R0,0x3E308 -00000000 NOP -//0x3E2F4: -AFAF001C SW T7,001C (SP) -AFB80020 SW T8,0020 (SP) -AFB90024 SW T9,0024 (SP) -0FC2B6AF JAL 7F0ADABC -AFA80028 SW T0,0028 (SP) -//0x3E308: -8FBF0034 -LW RA,0034 (SP) -27BD0038 ADDIU SP,SP,0038 -03E00008 JR RA -00402025 OR A0,V0,R0 it used to copy V0->A0, then back... --NOP - -OPENS UP 0x3E318-0x3E378 0x60 - - -------------------- -+++++++++++++++++++ -------------------- - -animations when actors get hurt: -uses at least three tables for explosions at least - -[all here pertains to explosion animations] -8002E960 second value (# entries?) used to randomly select - added to pointer (1st value) to recover byte -V1= byte * 0x1C + 8002E648 [base for explosion animatoin table] - -broken up into 8 groups, based on cardinal directions. select one within group - -//7F027AD4: -LUI AT,4100 -LUI T3,8007 -LW T3,9538 (T3) pointer to animation binaries -MTC1 AT,F6 -LWC1 F8,0008 (V1) F8=rate -LW T2,0000 (V1) offset to animation -LW A3,000C (V1) start point -LW A2,0004 (V1) ?, either 0 or 1 -LW A0,0054 (SP) obj. instance -SWC1 F6,0014 (SP) save ? -SWC1 F8,0010 (SP) save rate -JAL 7F06FCA8 -ADDU A1,T2,T3 A1=p->animation - - -++++++++++++++++ ----------------- -++++++++++++++++ - -!SOLVED! - -unknown values at 800309F8 [0xFC68] -sound effects played when you shoot a male guard in solo! - -//7F027168: -LUI T3,8003 -ADDIU V0,SP,0028 -ADDIU T3,T3,09F8 T3=800309F8 -ADDIU T5,T3,0030 T5=80030A28 -OR T6,V0,R0 -//7F02717C: loopus -LW AT,0000 (T3) -ADDIU T3,T3,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T3) -SW AT,FFF8 (T6) -LW AT,FFFC (T3) -BNE T3,T5,7F02717C copies table of values to SP+0x28 to later retrieve one value -SW AT,FFFC (T6) -LHU AT,0000 (T3) -LUI T7,8003 -LUI A0,8006 -SH AT,0000 (T6) copy last value -LW T7,0A34 (T7) T7=80030A34: ? -LW A0,3720 (A0) A0=80063720: ? -OR A2,R0,R0 -SLL T8,T7,0x1 -ADDU T9,V0,T8 T9=SP+0x28 + val->offset -JAL 70008E08 -LH A1,0000 (T9) A1=one of the values in table -//7F0271CC: -LUI V1,8003 -LW V1,0A34 (V1) -LUI AT,8003 -OR A0,V0,R0 -ADDIU V1,V1,0001 -SW V1,0A34 (AT) -SLTI AT,V1,0019 -BNEZ AT,7F02725C -LUI AT,8003 -BEQ R0,R0,7F02725C reset counter if over maximum -SW R0,0A34 (AT) -//7F0271F8: - diff --git a/notes/GE Documentation/Other WIPs/double weapons trace.txt b/notes/GE Documentation/Other WIPs/double weapons trace.txt deleted file mode 100644 index 7974408..0000000 --- a/notes/GE Documentation/Other WIPs/double weapons trace.txt +++ /dev/null @@ -1,549 +0,0 @@ -This is a solo, default double weapons trace: -Facility: double pp7 -1d3ec4 - -(800b7548, set from 1E to 1F, and try to get a bombcase...) - -assignment - -7F005B04: -JAL 7F005710 -LW A0, 0004 (S0) //A0=righthanded weapon; S0=weapon assignment command address - -7F005710: -ADDIU T6,A0,FFFD //T6=A0-3 -ADDIU SP,SP,FFE8 //SP=803B3640 -SLTIU AT,T6,002E //AT true if weapon value less than 31 -SW RA,0014 (SP) //803B3640=7f005b0c (save path) -BEQ AT,R0,7F00579C //if unarmed, branch -ADDIU A1,R0,FFFF //A1= -1 -SLL T6,T6,2 //T6*4=8 -LUI AT, 8005 -ADDU AT,AT,T6 //add address offset for weapon -LW T6,F0F0 (AT) //PULL 8005F0F0 + OFFSET -JR T6 //PP7 routine 7F00579C -NOP - -7F00579C: -BLTZ A1,7F0057B4 //if A1<0, branch -OR V0,R0,R0 //V0=0 - - -7F0057B4: -LW RA,0014 (SP) //RA=803B3654=7F005B0C -ADDIU SP,SP,0018 //SP=803B3658 -JR RA -NOP - -7F005B0C: -LW A0,0008 (S0) //Load double! A0=weapon value -BLTZ A0,7F005B34 // if not a double, branch -NOP -JAL 7F005710 //double weapon load! -NOP - -^7F005710 -ADDIU T6,A0,FFFD //T6=weapon number - 3 -ADDIU SP,SP,FFE8 //SP=803B3640 -SLTIU AT,T6,002E //AT=1 if weapon < 31 -SW RA,0014 (SP) //803b3654=7f005b20 -BEQ AT,R0,7F00579C //if unarmed, branch -ADDIU A1,R0,FFFF //A1= -1 -SLL T6,T6,2 //T6=wep # *4 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,F0F0 (AT) //T6=8004F0F0 + offset -JR T6 -NOP - -^7F00579C: -BLTZ A1,7F0057B4 //if A1<0, branch -OR V0,R0,R0 //V0=0 - - -^7F0057B4: -LW RA,0014 (SP) //RA=803B3654=7F005B20 -ADDIU SP,SP,0018 //SP=803B3658 -JR RA -NOP - -* this routine is missing in MP -7F005B20: -LW A0,0004 (S0) //A0=right weapon value -JAL 7F08C50C -LW A1,0008 (S0) //A1=Left Weapon Value - -7F08C50C: -ADDIU SP,SP,FFE8 //SP=803B3640 -SW RA,0014 (SP) //7F005B2C->803B3654 -SW A0,0018 (SP) //right weapon->803B3658 -JAL 7F08C39C -SW A1,001C (SP) //left weapon->803B365C - -7F08C39C: -ADDIU SP,SP,FFE8 //SP=803B3628 -SW RA,0014 (SP) //7F08C520->803B363C -JAL 7F08C338 -NOP - -7F08C338: -LUI T6,8008 -LW T6,A0B0 (T6) //T6=8007A0B0=800B6360 -ADDIU A2,R0,0003 //A2=3 -LW V0,11E0 (T6) //V0=0, ->800B7540 -BEQ V0,R0,7F08C390 //if=0, branch -OR V1,V0,R0 //V1=V0 - -7F08C390: -OR V0,R0,R0 //V0=0 -JR JA //Jump to 7F08C3AC -NOP - -7F08C3AC: -LW RA,0014 (SP) //RA=803B363C=7F08C520 -SLTU T6,R0,V0 //R0&V0=0, so T6=0 -OR V0,T6,R0 //V0=T6 -JR RA -ADDIU SP,SP,0018 //SP=803B3640 - -7F08C520: -BNEL V0,R0,7F08C560 //If V0!=R0, branch -OR V0,R0,R0 //V0=0 -JAL 7F08C244 -NOP - -7F08C244: -LUI V1,8008 -LW V1,A0B0 (V1) //V1=8007A0B0=800B6360 -OR V0,R0,R0 //V0=0 -LW A0,11E8 (V1) //A0=800B7548=1E -BLEZL A0,7F08C294 /if A0<=0, branch -OR V0,R0,R0 //V0=0 -LW A1,11E4 (V1) //A1=800B7544=801EA3D0 -ADDIU V1,R0,FFFF //V1= -1 -OR A2,R0,R0 //A2=0 -OR A3,A1,R0 //A3=A1 -LW T6,0000 (A3) //T6= -1 -ADDIU V0,V0,0001 //V0++, V0=1 -SLT AT,V0,A0 //AT=1 -BNE V1,T6,7F08C288 //If V1(-1)!=T6(-1), branch -ADDIU A3,A3,0014 //A3=801EA3E4 -JR RA //jump to 7F08C530 -ADDU V0,A1,A2 //V0=801EA3D0 - -7F08C530: -BEQ V0,R0,7F08C554 //if null pointer, branch -OR A0,V0,R0 //A0=V0=801EA3D0 -ADDIU T6,R0,0003 //T6=3 -SW T6,0000 (V0) //801EA3D0=3 -LW T7,0018 (SP) //T7=803B3658=right weapon value -SW T7,0004 (V0) //801EA3D4=right weapon value -LW T8,001C (SP) //T8=803B365C=left weapon value -JAL 7F08C194 -SW T8,0008 (V0) //801EA3D8=left weapon value - -7F08C194 -LUI V1,8008 -ADDIU V1,V1,A0B0 //V1=8007A0B0 -LW T6,0000 (V1) //T6=800B6360 -ADDIU SP,SP,FFE8 //SP=803B3628 -SW RA,0014 (SP) //803B363C=7F08C554 -LW V0,11E0 (T6) //V0=800B7540=0 -BEQL V0,R0,7F08C1DC //if NULL, branch -SW A0,000C (A0) //801EA3D0->801EA3DC - -7F08C1DC: -SW A0,0010 (A0) //801EA3D0->801EA3E0 -LW T2,0000 (V1) //T2=8007A0B0=800B6360 -JAL 7F08C054 -SW A0,11E0 (T2) //800B7540=801EA3D0 - -7F08C054: -ADDIU SP,SP,FFF8 //SP=803B3620 -SW S0,0004 (SP) //S0=801D3EC4 -LW A1,0000 (A0) //A1=3 -ADDIU T3,R0,0001 //T3=1 -ADDIU V0,R0,FFFF //V0= -1 -BNE T3,A1,7F08C080 -ADDIU V1,R0,FFFF //V1= -1 - -7F08C080: -ADDIU T5,R0,0003 //T5=3 -BNE T5,A1,7F08C09C -ADDIU S0,R0,0002 //S0=2 -LW V0,0004 (A0) //V0=right weapon value -LW V1,0008 (A0) //V1=left weapon value -BEQ R0,R0,7F08C0A8 -ADDIU S0,R0,0002 //S0=2 - -7F08C0A8: -LUI T4,8008 -ADDIU T4,T4,A0B0 //T4=8007A0B0 -LW A3,0000 (T4) //A3=800B6360 -LW A2,000C (A0) //A2=801EA3D0 -LW T6,11E0 (A3) //T6=801EA3D0 -OR A1,A2,R0 //A1=A2 -BEQL A2,T6,7F08C18C //if same pointer, branch -LW S0,0004 (SP) //S0=801D3EC4 - -7F08C18C: -JR RA //jump to 7F08C1EC -ADDIU SP,SP,0008 //SP=803B3628 - -7F08C1EC: -LW RA,0014 (SP) //RA=803B363C=7F08C554 -ADDIU SP,SP,0018 //SP=803B3640 -JR RA -NOP - -7F08C554: -BEQ R0,R0,7F08C560 -ADDIU V0,R0,0001 //V0=1 -***OR V0,R0,R0 -LW RA,0014 (SP) //RA=7F005B2C -ADDIU SP,SP,0018 //SP=803B3658 -JR RA -NOP - -7F005B2C: -BEQ R0,R0,7F005B40 -LW T8,007C (SP) //T8=0 - -7F005B40: -BNEZ T8,7F005B70 -NOP -LW T6,0004 (S0) //T6=801D3EC8=right weapon value -LUI AT,8008 -ADDIU T7,R0,0001 //T7=1 -SW T6,99E0 (AT) //800799E0=right weapon value -LW A0,0008 (S0) //A0=801D3ECC=left weapon value -SW T7,007C (SP) //803b36d4=1 -LUI AT,8008 -BLTZ A0,7F005B70 //if not a left weapon, branch -NOP -SW A0,99E4 (AT) //800799E4=left weapon value -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,0010 //S0+=10=801D3ED4 - -* -7F005DE4---end routine. sucks up next thingy -* - ------------------------------------------------ -facility solo: equipment @ 800799E0 -actual equipment list 801ea3d0 -equipment format: -0000000F 000000rr 000000LL nextwep last/firstwep -[F]lag 1-single, 3-double -[R]ight weapon -[L]eft weapon -pointer to next weapon data -pointer to last weapon (on first) or first weapon for indexing - -7F08C05C: -LW A1,0000 (A0) //A1=801EA3D0=single/double -ADDIU T3,R0,0001 //T3=1 -ADDIU V0,R0,FFFF //V0= -1 -BNE T3,A1,7F08C080 //if doubles (!1) branch -ADDIU V1,R0,FFFF //V1= -1 - -7F08C080: -ADDIU T5,R0,0003 //T5=3 -BNE T5,A1,7F08C09C //if not doubles (!3) branch -ADDIU S0,R0,0002 //S0=2 -LW V0,0004 (A0) //V0=801EA3D4=right weapon -LW V1,0008 (A0) //V1=801EA3D8=left weapon -BEQ R0,R0,7F08C0A8 -ADDIU S0,R0,0002 //S0=2 - -7F08C0A8: -LUI T4,8008 -ADDIU T4,T4,A0B0 //T4=8007A0B0 -LW A3,0000 (T4) //A3=8007A0B0=800B6360 -LW A2,000C (A0) //A2=801EA3DC=801EA3D0 -LW T6,11E0 (A3) //T6=800B7540=801EA3D0 -OR A1,A2,R0 //A1=A2=801EA3D0 -BEQL A2,T6,7F08C18C -LW S0,0004 (SP) //S0=803B3624=801D3EC4 - -7F08C18C: -JR RA -ADDIU SP,SP,0008 //SP=803B3628 - -7F08C1EC: -LW RA,0014 (SP) //RA=803B363C=7F08C4C4 -ADDIU SP,SP,0018 //SP=803B3640 -JR RA -NOP - -7F08C4C4: -LUI T8,8008 -LW T8,A0B0 (T8) //T8=8007A0B0=800B6360 -LW T0,0018 (SP) //T0=803B3658=WEP VALUE -LW T9,11EC (T8) //T9=800B754C=0 -SLTI AT,T0,0021 //AT=1 if T0<21 -BEQ T9,R0,7F08C4F0 //if pointer NULL, branch -NOP - -7F08C4F0: -BEQ R0,R0,7F08C4FC -ADDIU V0,R0,0001 //V0=1 - -7F08C4FC: -LW RA,0014 (SP) //RA=803B3654=7F005B3C -ADDIU SP,SP,0018 //SP=803B3658 -JR RA -NOP - -7F005B3C: -LW T8,007C (SP) //T8=803B36D4=0 -BNEZ T8,7F005B70 -NOP -//ELSE: -LW T6,0004 (S0) //T6=801D3EC8=5 -LUI AT,8008 -ADDIU T7,R0,0001 //T7=1 -SW T6,99E0 (AT) //5->800799E0 -LW A0,0008 (S0) //A0=801D3ECC= -1 -SW T7,007C (SP) //1->803B36D4 -LUI AT,8008 -BLTZ A0,7F005B70 //if set above, branch -NOP - -7F005B70: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,0010 //S0=801D3ED4 - -7F005DE4--- seems I did the spawn block load again... - ------------------------------------------------------- -MORE OF THE INVENTORY COLLECTION ROUTINE - -7F08C2D4: -LW T7,0000 (V1) //T7=801EA3D0=3 -BNEL A1,T7,7F08C2F8 //if doubles, branch -LW V1,000C (V1) //V1=801EA3D0 - -7F08C2F8: -BEQL V1,V0,7F08C30C //if pointer = same as list start, branch -OR V0,R0,R0 //V0=0 - -7F08C30C: -JR RA //jump to 7F08C324 -NOP - -7F08C324: -LW RA,0014 (SP) //RA=803B363C=7F08C498 -SLTU T6,R0,V0 //T6=0 if V0=NULL -OR V0,T6,R0 //V0=T6 -JR RA -ADDIU SP,SP,0018 //SP=803B3628 - -7F08C498 -BNEL V0,R0,7F08C4FC //if V0!=NULL, branch and link -OR V0,R0,R0 //V0=0 -JAL 7F08C244 -NOP - -7F08C244: -LUI V1,8008 -LW V1,A0B0 (V1) //V1=8007A0B0=800B6360 -OR V0,R0,R0 //V0=0 -LW A0,11E8 (V1) //A0=800B7548=1E -BLEZL A0,7F08C294 - OR V0,R0,R0 //V0=0 -LW A1,11E4 (V1) //A1=800B7544=801EA3D0 -ADDIU V1,R0,FFFF //V1= -1 -OR A2,R0,R0 //A2=0 -OR A3,A1,R0 //A3=A1=801EA3D0 -LW T6,0000 (A3) //T6=3 (double -unarmed&none) -ADDIU V0,V0,0001 //V0++=1 -SLT AT,V0,A0 //if <1E (20), AT=1 -BNE V1,T6,7F08C288 //if a lefty, branch -ADDIU A3,A3,0014 //A3+=14=801EA3E4 - -7F08C288: -BNEZ AT,7F08C26C -ADDIU A2,A2,0014 //A2+=14= - -7F08C26C: -LW T6,0000 (A3) //T6=801EA3E4= -1 -ADDIU V0,V0,0001 //V0++=2 -SLT AT,V0,A0 //if <1E, AT=1 -BNE V1,T6,7F08C288 -ADDIU A3,A3,0014 //A3+=14=801EA3F8 -JR RA -ADDU V0,A1,A2 //V0=801EA3E4 - -7F08C4A8: -BEQ V0,R0,7F08C4C4 //if V0=NULL, branch -OR A0,V0,R0 //A0=801EA3E4 (next inventory) -ADDIU T6,R0,0001 //T6=1 -SW T6,0000 (V0) //801EA3E4=1 -LW T7,0018 (SP) //T7=803B360=1D -JAL 7F08C194 -SW T7,0004 (V0) //801EA3E8=1D - -------------------------------------- - -7F08C0C8: -LW T2,0000 (A2) //T2=801EA3D0=3 -ADDIU T0,R0,FFFF //T0= -1 -ADDIU T1,R0,FFFF //T1= -1 -BNE T3,T2,7F08C0E4 //if not doubles (T3=1), then branch -NOP - -7F08C0E4: -BNE T5,T2,7F08C0F8 //if ONLY a lefty(2), branch -NOP -LW T0,0004 (A2) //T0=801EA3D4=right wep -BEQ R0,R0,7F08C104 -LW T1,0008 (A2) //T1=801EA3D8=left wep - -7F08C104: -SLT AT,T0,V0 //if T0(wep)<1E, AT=TRUE -BNEL AT,R0,7F08C124 -LW A2,000C (A1) //A2=801EA3DC=801EA3E4 - -7F08C124: -BNEL A0,A2,7F08C140 -LW T7,0010 (A0) //T7=801EA408=801EA3E4 - -7F08C140: -SW A2,000C (A0) //801EA404=801EA3E4 -SW T7,0010 (A1) //801EA3E0=801EA3E4 -SW A1,0010 (A0) //801EA408=801EA3D0 -SW A0,000C (A1) //801EA3DC=801EA3F8 -LW T8,000C (A0) //T8=801EA404=801EA3E4 -SW A0,0010 (T8) //801EA3F4=801EA3F8 -LW T9,0010 (A1) //T9=801EA3E0=801EA3E4 -SW A1,000C (T9) //801EA3F0=801EA3D0 -LW A3,0000 (T4) //A3=8007A0B0=800B6360 -LW T0,11E0 (A3) //T0=800B7540=801EA3F8 -BNEL A0,T0,7F08C180 - LW A2,000C (A0) //A2=801EA404 (SKIPS) -SW A1,11E0 (A3) //800B7540=801EA3D0 -LW A3,0000 (T4) //A3=8007A0B0=800B6360 -LW T0,11E0 (A3) //T0=800B7540=801EA3D0 -LW A2,000C (A0) //A2=801EA404=801EA3E4 -BNE A2,T0,7F08C0C8 -OR A1,A2,R0 //A1=A2=801EA3E4 - -7F08C0C8: -next weapon in inventory - ------------------------- -after list is assembled: - -7F08C2D4: -LW T7,0000 (V1) //T7=801EA3D0=3 -BNEL A1,T7,7F08C2F8 //if doubles, branch -LW V1,000C (V1) //V1=801EA3E4 - -7F08C2F8: -BEQL V1,V0,7F08C30C //if pointer = same as list start, branch - OR V0,R0,R0 //V0=0 -BNEL V1,R0,7F08C2D8 -LW T7,0000 (V1) //T7=801EA3E4=1 - -7F08C2D8: -BNEL A1,T7,7F08C2F8 - LW V1,000C (V1) -LW T8,0004 (V1) //T8=801EA3E8=1D -BNEL A0,T8,7F08C2F8 -LW A1,000C (V1) //A1=801EA3F0=801EA3F8 - -repeat until at the end of inventory list... - -7F08C30C: -JR RA -NOP - -7F08C324: -LW RA,0014 (SP) //RA=803B363C=7F08C498 -SLTU T6,R0,V0 //if V0<0, T6=1 -OR V0,T6,R0 //V0=T6 -JR RA -ADDIU SP,SP,0018 //SP+=18=7F08C4B0 - -7F08C498: -BNEL V0,R0,7F08C4FC //if test above true, branch - OR V0,R0,R0 //V0=0 -JAL 7F08C244 -NOP - - -anyway, it's mostly that stuff over and over again ------------------------------------- ------------------------------------- -Facility MP: -801ed944 MP weapon assignment - -read spawny routine: - -7F005B04: -JAL 7F005710 -LW A0,0004 (S0) //A0=801ED948=right weapon val - -7F005710: -ADDIU T6,A0,FFFD //T6=wep val-3 -ADDIU SP,SP,FFE8 //SP=803B3640 -SLTIU AT,T6,002E //AT=TRUE if T6<2E -SW RA,0014 (SP) //803B3640=7F005B0C (keep place) -BEQ AT,R0,7F00579C //if invalid, break -ADDIU A1,R0,FFFF //A1= -1 -SLL T6,T6,2 //wep val*4 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,F0F0 (AT) //8004F0F0+offset for weapon -JR T6 -NOP - -pp7 ROUTINE, since i hacked it... -7F005738: -BLTZ A1,7F0057B4 -OR V0,R0,R0 //V0=0 - -7F0057B4: -LW RA,0014 (SP) //RA=803B3654=7F005B0C -ADDIU SP,SP,0018 //SP+=18=803B3658 -JR RA -NOP - -7F005B0C: -LW A0,0008 (S0) //A0=left wep value -BLTZ A0,7F005B34 //if not one, branch -NOP -JAL 7F005710 -NOP - -7F005710: -ADDIU T6,A0,FFFD //T6=wep val-3 -ADDIU SP,SP,FFE8 //SP=803B3640 -SLTIU AT,T6,002E //AT=TRUE if T6<2E -SW RA,0014 (SP) //803B3654=7F005B20 (keep place) -BEQ AT,R0,7F00579C //if invalid, break -ADDIU A1,R0,FFFF //A1= -1 -SLL T6,T6,2 //wep val*4 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,F0F0 (AT) //8004F0F0+offset for weapon -JR T6 -NOP - -7F00579C: -BLTZ A1,7F0057B4 -OR V0,R0,R0 //V0=0 - -7F0057B4: -LW RA,0014 (SP) //RA=803B3654=7F005B20 -ADDIU SP,SP,0018 //SP+=18 = 803B3658 -JR RA -NOP - -7F005B20: -LW A0,0004 (S0) //A0=801ED948=right wep -JAL 7F08C50C -LW A1,0008 (S0) //A1=left wep value - -*** diff --git a/notes/GE Documentation/Other WIPs/hatpeaked to maskotime.txt b/notes/GE Documentation/Other WIPs/hatpeaked to maskotime.txt deleted file mode 100644 index 5204d37..0000000 --- a/notes/GE Documentation/Other WIPs/hatpeaked to maskotime.txt +++ /dev/null @@ -1,70 +0,0 @@ -need one more image mention... -0xC 00150000 05000054 00000000 00000000 00000000 05000024 -0x24 000A0000 05000068 0500000C 00000000 00000000 0500003C -0x3C 00040000 05000528 05000024 00000000 00000000 00000000 - -15 position: [0xC] -0x54 3FB2DA12 430FA786 42002C60 00000000 431463E9 - 1.397280 143.654388 32.043335 00000000 148.390274 - -0A bounds: [0x24] -0x68 0000006E - C2C60000 42CE0000 -99 103 - C26C0000 42860000 -59 67 - C2FA0000 42FC0000 -125 126 - -{point table @ 0x88} - -04 display list: [0x3C] -0x528 05000540 00000000 0000 0000 05000088 004A 0400 00000000 - primary display list @ 0x540 - no secondary display lists - point table @ 0x88; 0x4A (74) entries - index 04 - - -{display list @ 0x540} -E7000000 00000000 rdp_pipesync -BA001001 00010000 rsp_setothermode_h texture level-of-detail: 8bit lod -BB001801 FFFFFFFF rsp_texture mipmap level 3; use s/t from point table -C0580002 00000796 expand/apply texture 796... -BA001102 00000000 rsp_setothermode_h texture detail: 16bit clamp -BA000C02 00002000 rsp_setothermode_h texture filter: 16bit bilerp -B6000000 00003000 rsp_cleargeometrymode clear CULL_BACK, CULL_FRONT -01020040 03000000 rsp_matrix modelview load nopush; segment 3 -04F00100 05000088 rsp_vertex 15; 0x100 copied f/ 0x88 -B1997632 56541210 rsp_tri4 -B100FEBA DEDC9A98 rsp_tri4 -04F00100 05000188 rsp_vertex 15; 0x100 copied f/ 0x188 -B1005632 74541210 rsp_tri4 -B100FCB5 EDABA987 rsp_tri4 -04E000F0 05000288 rsp_vertex 14; 0xF0 copied f/ 0x288 -B1009652 87454310 rsp_tri4 -B1000EDA 00CDCB89 rsp_tri4 -04E000F0 05000378 rsp_vertex 14; 0xF0 copied f/ 0x378 -B1009632 87542010 rsp_tri4 -B1000CD9 00EBCBA8 rsp_tri4 -04B000C0 05000468 rsp_vertex 11; 0xC0 copied f/ 0x468 -B1007622 64543110 rsp_tri4 -B100008A 0000BA98 rsp_tri4 -B8000000 00000000 rsp_enddl - - -+++++++++++++++++++++++++++++++++++++++++ - -mask of time -position (maybe...) -3FB2DA12 430FA786 42002C60 00000000 431463E9 - -bounds -0000006E -44094000 4495C000 0225 04AE -C495E000 439B0000 FB51 0136 -C4398000 44398000 FD1A 02E6 - - -+_+ - -Evil! - Embedded images break when shot. No default is set for impact, and lookup will fail in main list. Must create a workaround. Should always use a default! - diff --git a/notes/GE Documentation/Other WIPs/matching images.txt b/notes/GE Documentation/Other WIPs/matching images.txt deleted file mode 100644 index 49fa2b8..0000000 --- a/notes/GE Documentation/Other WIPs/matching images.txt +++ /dev/null @@ -1,220 +0,0 @@ -PD ID GE ID notes -000 -001 5EA backfill/placeholder image; for screens, etc. -002 3F7 -003 878 glass impact -004 87B default impact -005 858 -006 850 typical gunfire (can't remember...) -007 -008 -009 857 blue gunfire (laser) -00A 856 blue flare (laser) -00B 8BC GE sight -00D -00E 28E glass overlay (1) -00F 88B monitor img. -010 895 monitor img. -011 8B0 monitor img. -012 8B1 monitor img -013 8B4 sky -014 - -020 828 explosion -021 -022 831 explosion -023 -024 834 -025 -026 836 -027 -028 838 -029 -02A 83A -02B -02C 83C -02D -02E 83E -02F -030 840 -031 -032 826 -033 -034 82A -035 -036 8C2 - -041 308 - -0E3 9AB - -105 A74 - -17D 0C3 PD16,GE256 - -39B 859 weapon flash -39C 85A -39D 85B -39E 85C - -3AB 859 weapon flash -3AC 85A -3AD 85B -3AE 85C - -3E1 86B weapon flash -3E2 869 -3E3 86C -3E4 86A -3E5 867 weapon flash -3E6 865 -3E7 868 -3E8 866 - -3EC 374 weapon flare - -3FE 374 gunfire (a51_turret) - -567 692 ACTOR HEAD - TEST THIS -568 694 -569 694 - -70F 2CF -712 2C2 -713 58C -714 58B PD16,GE256 (19) -715 2A1 -716 2A2 -717 11B -718 493 PD16,GE256 (64) -719 2C1 -71B 11A -729 9AB - -73B 9A8 PD16,GE256 (42) -73C 0A3 -73D 0A6 -73E -745 5B9 -747 9A9 PD16,GE256 (55) - -7C7 28F - -841 649 PD16, GE256 -842 64D PD16, GE256 -843 650 PD16, GE256 -844 653 PD16, GE256 -845 656 PD16, GE256 - -862 0E7 PD16,GE256 -863 -864 -865 0E9 PD16,GE256 - -96A 847 gun flare - -(MORE IMGS HERE AND ABOVE, THROUGH BB4) -BD5 167 -BD6 168 -BD9 107 foucet - -C00 1BE -C01 1BD -C02 1BC -C27 -C28 87A -C29 0CE -C2A 87C -C2B 5C3 -C2C 5C4 -C2D 87E -C2E 87F -C2F 5C6 -C30 5C7 -C31 8BD beta sight -C32 292 -C33 88C -C34 88D -C35 88E -C36 88F -C37 890 -C38 891 -C39 892 -C3A 893 -C3B 894 -C3C 4A1 -C3D 896 -C3E 897 -C3F 4A2 -C40 4A3 -C41 -C42 246 PD16,GE256 -C43 247 PD16,GE256 -C44 87D -C45 248 PD16,GE256 -C46 89A PD16,GE256 -C47 89B PD16,GE256 -C48 89C PD16,GE256 -C49 89D PD16,GE256 -C4A 245 PD16,GE256 -C4B 89E PD16,GE256 -C4C 89F PD16,GE256 -C4D 8B3 -C4E 8AF -C4F 8B2 -C50 8AB -C51 8AC -C52 8AD -C53 8AE -C54 8AA -C55 89F -C56 8A0 -C57 8A1 -C58 8A2 -C59 8A3 -C5A 8A4 -C5B 8A5 -C5C 8A6 -C5D 8A7 -C5E 8A8 -C5F 8A9 -C60 8D7 -C61 345 PD16,GE255 (6A) -C62 8B0 - -CC7 -CC8 -CC9 -CCA 5EA -CCB 308 -CCC -CCD -CCE -CCF 861 -CD0 862 -CD1 863 -CD2 864 -CD3 3FF -CD4 5EA -CD5 01C -CD6 01B -CD7 A71 -CD8 A72 -CD9 A73 kf7 butt -CDA 848 weapon flash -CDB 849 -CDC 84A -CDD 84B -CDE 84C weapon flash -CDF 84D -CE0 84E -CE1 84F -CE4 842 weapon flash -CE5 843 -CE6 844 -CE7 845 -CE8 5EA - -D28 greyharied guy from GE? test... -D29 -D2A \ No newline at end of file diff --git a/notes/GE Documentation/Other WIPs/oddities.txt b/notes/GE Documentation/Other WIPs/oddities.txt deleted file mode 100644 index 7bde367..0000000 --- a/notes/GE Documentation/Other WIPs/oddities.txt +++ /dev/null @@ -1,34 +0,0 @@ -Here's a list of fairly peculiar things. - -7F01EBC0: - This is the basis for a switch that detected which Bond actor was set to the current folder. It recieves A0=folder#, and would have returned V0=0-3. - Originally, you selected the Bond on the folder menu, and this impacted various aspects of the game, including your character in the two bonus stages - Aztec and Egypt. - Currently, it only returns V0=0. Note, this routine is read-only. A seperate would exist for write purposes. - -Cuff 8: - Cuff 8 is a remainant of the 4-bond era. It calls the invalid 7F01D56C, and would have selected a body/head combo specific for the selected Bond for the folder. - Interestingly, there is no attempt to set the cuff to the corresponding bond within this routine. Instead, it relies on runtime switches. - To a degee this is still functional. It still contains valid switches, although the selections are all set to Brosnan's tux and multiplayer head. V0, again, will only be 0. - By utilizing the folder number (OR V0,A0,R0) and setting different heads/bodies, you can simulate the original behaviour. -The correct cuff list is: -0 Blue suit -1 Brosnan tuxedo -2 jungle camo -3 boiler suit -4 snowsuit -5 Connery tuxedo -6 Dalton tuxedo -7 Moore tuxedo -8 selected Bond actor - -Folders: - Folders also retain most of the original code used to display the various Bond characters. It also relies on the deleted function to select them. - Currently, an unhacked rom does not load or use the other Bond actor images. You must manually set each to its corresponding slot. - Again, by utilizing the folder number and adding the images into the directory, the existing switches can be used to simulate the original behaviour. - -Ammo Crates: - In the ammo section of ammo crates, each ammo total register is preceeded by a value -1 (FFFF). This value, is in fact, fully functional. - This value is a model number, which can be set to load the specified model into memory. The model itself is not used. - The speculation is that originally ammo crates functioned more like the embeded objects with ammo clips within them. When destroyed, they originally would spill out the specified number of ammo clips using a particular model. - This would have been ridiculous in multiplayer, so the ammo crate was changed to the current mode and clips simply embedded within crates. - diff --git a/notes/GE Documentation/Other WIPs/text table hacking.txt b/notes/GE Documentation/Other WIPs/text table hacking.txt deleted file mode 100644 index a9bdaaf..0000000 --- a/notes/GE Documentation/Other WIPs/text table hacking.txt +++ /dev/null @@ -1,473 +0,0 @@ -800484D0: J_text trigger! set to 1 to activate J_text -800484D4: text string recall table, containing pointers to L_X strings -8008C640: start of loaded text index, containing pointers to loaded stringtables - -+-+-+-+ - -7F0C15E0: 0xF6110 returns the text bank number for a specific stage# -ADDIU T6,A0,FFF7 -SLTIU AT,T6,002E -BEQ AT,R0,7F0C16DC -SLL T6,T6,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,BB60 (AT) -JR T6 -NOP ---list of stage text offset values... - each contains the JR RA, except the default. That throws an endless loop -extends, at least, to 7F0C16E4 -7F0C16E4: -JR RA -OR V0,V1,R0 - -+-+-+-+ - -7F0C16EC F621C Calling the global banks at startup -ADDIU SP,SP,FFD8 -SW S2,0020 (SP) -LUI S2,8005 -ADDIU S2,S2,84D0 -LW T0,0000 (S2) ;T0=800484D0: language flag -SW RA,0024 (SP) -SW S1,001C (SP) -BEQ T0,R0,7F0C17F0 ;branch if english - now hacked to read BLEZ -SW S0,0018 (SP) -//7F0C1710: allocate Jtxt buffers -ADDIU A0,R0,2E80 ;A0=2E80 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0006 ;A1=6: bank 6 -LUI AT,8009 -SW V0,C6F4 (AT) ;V0->8008C6F4: save p->allocated memory -ADDIU A0,R0,0100 ;A0=100 -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0006 ;A1=bank 6 -LUI A0,8009 -ADDIU A0,A0,C6F8 -SW V0,0000 (A0) ;V0->8008C6F8: save p->allocated memory -OR V1,R0,R0 ;V1=0 -ADDIU A1,R0,00F8 ;A1=0xF8 -//7F0C1744: initialize jtxt registry -LW T6,0000 (A0) ;T6=8008C6F8: p->buffer.reg -ADDU V0,T6,V1 ;V0=mem(100)+offset: -LBU T7,0000 (V0) -ANDI T8,T7,FF3F -SB T8,0000 (V0) ;mem(100)[0] &= ~C0 Completely unnecessary. Will be manually set later. -LW T9,0000 (A0) -ADDU V0,T9,V1 -LHU T2,0000 (V0) -ORI T3,T2,3FFF -SH T3,0000 (V0) ;mem(100)[0:2] |= 3FFF -LW T4,0000 (A0) -ADDU V0,T4,V1 -LBU T5,0002 (V0) -ANDI T6,T5,FF3F -SB T6,0002 (V0) ;mem(100)[2] &= ~C0 -LW T7,0000 (A0) -ADDU V0,T7,V1 -LHU T9,0002 (V0) -ORI T1,T9,3FFF -SH T1,0002 (V0) ;mem(100)[2:4] |= 3FFF -LW T2,0000 (A0) -ADDU V0,T2,V1 -LBU T3,0004 (V0) -ANDI T4,T3,FF3F -SB T4,0004 (V0) ;mem(100)[4] &= ~C0 -LW T5,0000 (A0) -ADDU V0,T5,V1 -LHU T7,0004 (V0) -ORI T8,T7,3FFF -SH T8,0004 (V0) ;mem(100)[4:6] |= 3FFF -LW T9,0000 (A0) -ADDU V0,T9,V1 -LBU T1,0006 (V0) -ANDI T2,T1,FF3F -SB T2,0006 (V0) ;mem(100)[6] &= ~C0 -LW T3,0000 (A0) -ADDU V0,T3,V1 -LHU T5,0006 (V0) -ADDIU V1,V1,0008 ;V1+=8: next entry -ORI T6,T5,3FFF -BNE V1,A1,7F0C1744 -SH T6,0006 (V0) ;mem(100)[6:8] |= 3FFF -LW T0,0000 (S2) ;J_text flag -//7F0C17F0: initialize text pointer table -LUI AT,8009 -LUI V0,8009 -LUI V1,8009 -ADDIU V1,V1,C6F4 -ADDIU V0,V0,C644 ;V0=8008C644: entries for text pointers -SW R0,C640 (AT) ;0->8008C640: -//7F0C1808: loopus thy name is initialize -ADDIU V0,V0,0010 -SW R0,FFF4 (V0) -SW R0,FFF8 (V0) -SW R0,FFFC (V0) -BNE V0,V1,7F0C1808 ;initializes entries 04xx to B0xx -SW R0,FFF0 (V0) -//7F0C1820: load LgunX -LUI S0,8005 -ADDIU S0,S0,84D4 ;S0=800484D4: start of L_X lookup names -SLL T7,T0,0x2 ;T7=4 if J_text is in use -ADDU T8,S0,T7 -LW A0,0130 (T8) ;A0=800484D4+130+offset: p->LgunE -ADDIU A1,R0,0001 -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0006 ;A3= bank 6 -//7F0C1844: load LtitleX -LW T9,0000 (S2) ;language flag -LUI S1,8009 -ADDIU S1,S1,C640 -SLL T1,T9,0x2 -ADDU T2,S0,T1 -SW V0,0098 (S1) -LW A0,0138 (T2) ;A0=800484D4+138+offset: p->LtitleX -ADDIU A1,R0,0001 -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0006 ;A3= bank 6 -//7F0C1870: load LmpmenuX -LW T3,0000 (S2) ;language flag -SW V0,009C (S1) -ADDIU A1,R0,0001 -SLL T4,T3,0x2 -ADDU T5,S0,T4 -LW A0,0140 (T5) ;A0=800484D4+140+offset: p->LmpmenuX -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0006 ;A3= bank 6 -//7F0C1894: load LpropobjX -LW T6,0000 (S2) ;language flag -SW V0,00A0 (S1) -ADDIU A1,R0,0001 -SLL T7,T6,0x2 -ADDU T8,S0,T7 -LW A0,0148 (T8) ;A0=800484D4+148+offset: p->LpropobjX -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0006 ;A3= bank 6 -//7F0C18B8: load LmpweaponsX -LW T9,0000 (S2) ;language flag -SW V0,00A4 (S1) -ADDIU A1,R0,0001 -SLL T1,T9,0x2 -ADDU T2,S0,T1 -LW A0,0150 (T2) ;A0=800484D4+150+offset: p->LmpweaponsX -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0006 ;A3= bank 6 -//7F0C18DC: load LoptionsX -LW T3,0000 (S2) ;language flag -SW V0,00A8 (S1) -ADDIU A1,R0,0001 -SLL T4,T3,0x2 -ADDU T5,S0,T4 -LW A0,0158 (T5) ;A0=800484D4+158+offset: p->LoptionsX -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0006 ;A3= bank 6 -//7F0C1900: load LmiscX -LW T6,0000 (S2) ;language flag -SW V0,00AC (S1) -ADDIU A1,R0,0001 ;A1=1; probably the 1=permabit -SLL T7,T6,0x2 ;T7=language->offset, selecting E, J,or P if PAL game -ADDU T8,S0,T7 -LW A0,0160 (T8) ;A0=800484D4+160+offset: p->LmiscX -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0006 ;A3= bank 6 -//7F0C1924: return -LW RA,0024 (SP) -SW V0,00B0 (S1) ;save pointer to stringtable entry; S1=8008C640: start of index -LW S1,001C (SP) -LW S0,0018 (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -+-+ - -7F0C1940: ??? looks like it would interfere with tables B8xx+ -LUI T6,8005 -LW T6,84D0 (T6) T6=1 if jtext in use? -OR V1,R0,R0 -ADDIU A2,R0,00F8 -BEQ T6,R0,7F0C1A28 if 0, quit -LUI A1,8009 -ADDIU A1,A1,C6F8 A1=8008C6F8 this is after text entry 'B4xx'... -LW T7,0000 (A1) -//7F0C1960: -ADDU V0,T7,V1 -LHU A0,0000 (V0) -SRL T8,A0,0xE -BEQL T8,R0,7F0C1998 -LHU A0,0002 (V0) -//7F0C1974: -LBU T2,0000 (V0) -ADDIU T9,T8,FFFF -... -... -//7F0C1A28: quit -JR RA -NOP - - -+-+ - -7F0C1D08: loads stringtable for stage-specific text -LUI T8,8005 -LW T8,84D0 (T8) -ADDIU SP,SP,FFE8 -SLL T7,A0,0x3 -SW A0,0018 (SP) -SLL T9,T8,0x2 -ADDU T0,T7,T9 -LUI A0,8005 -SW RA,0014 (SP) -ADDU A0,A0,T0 -LW A0,84D4 (A0) -ADDIU A1,R0,0001 -ADDIU A2,R0,0100 -JAL 7F0BCD04 ;load resource to rdram using string value A0 -ADDIU A3,R0,0004 -LW T1,0018 (SP) -LW RA,0014 (SP) -LUI AT,8009 -SLL T2,T1,0x2 -ADDU AT,AT,T2 -SW V0,C640 (AT) -JR RA -ADDIU SP,SP,0018 - -+-+ - -7F0C1D64: ??? loads stringtables for briefings/objectives? -LUI T8,8005 -LW T8,84D0 (T8) T8=1 if J_text? just a guess... -ADDIU SP,SP,FFE8 -SLL T7,A0,0x3 T7=text group *8, offsetting in lookup table; A0 provided -SW A0,0018 (SP) save original text group number -SLL T9,T8,0x2 -OR A3,A2,R0 -ADDU T0,T7,T9 T0=offset to L_X pointer -LUI A0,8005 -OR A2,A1,R0 -SW RA,0014 (SP) -SW A1,001C (SP) -ADDU A0,A0,T0 -LW A0,84D4 (A0) A0=p-> L_X string -JAL 7F0BCD40 jumps to 7F0BCFE0 instead of 7F0BCE0C... -ADDIU A1,R0,0001 -LW T1,0018 (SP) -LW RA,0014 (SP) -LUI AT,8009 -SLL T2,T1,0x2 -ADDU AT,AT,T2 -SW V0,C640 (AT) store pointer to stringtable in appropriate slot -JR RA -ADDIU SP,SP,0018 - -+-+ - -7F0C1DC4: blank stringtable entry A0 -SLL T6,A0,0x2 -LUI AT,8009 -ADDU AT,AT,T6 -JR RA -SW R0,C640 (AT) - -+-+ - -7F0C1DD8: return pointer to text given by txtID (assume stringtable loaded) -SRA T6,A0,0xA reduce 2-byte txtID -> FC00 -SLL T7,T6,0x2 convert back to offset in table -LUI V0,8009 -ADDU V0,V0,T7 -LW V0,C640 (V0) V0=pointer to stringtable -ANDI T8,A0,03FF T8=text # in stringtable -SLL T9,T8,0x2 T9=...converted to offset in index -ADDU T0,V0,T9 -LW V1,0000 (T0) V1=offset to text in the stringtable -OR A0,R0,R0 -BEQ V1,R0,7F0C1E14 -NOP -ADDU A0,V1,V0 A0=offset to text + stringtable address... -JR RA -OR V0,A0,R0 V0=...creating final pointer to text -//7F0C1E14: bad entry = no pointer -JR RA -OR V0,A0,R0 - -+-+-+-+ -7F0BCD04 F1834 load resource to rdram using string value A0 - accepts: A0=p->string, A1=???, A2=???, A3=bank# -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) ;save 1 -SW A2,0020 (SP) ;save 0x100 -JAL 7F0BD254 ;V0=index# in ROM table for string A0 -SW A3,0024 (SP) ;A3=bank -OR A0,V0,R0 ;A0=ROM index # -LW A1,001C (SP) -LW A2,0020 (SP) -JAL 7F0BCE0C loads binary and returns V0=pointer to data - note: looks up filesize from list in 800888B0 -LBU A3,0027 (SP) ;A3=bank -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -+-+ - - - -+-+-+-+ - -7F009760: ??? calls the J_bit though -LUI T6,8005 -LW T6,84D0 (T6) -ADDIU SP,SP,FFC8 -SW RA,0024 (SP) -BEQ T6,R0,7F0097F8 -LW T5,0048 (SP) -//7F009778: -... -... -//7F0097F8: -LW T4,004C (SP) -LW T6,0050 (SP) -LW T7,0054 (SP) -LW T8,0058 (SP) -LW T9,005C (SP) -LW T0,0060 (SP) -SW T5,0010 (SP) -SW T4,0014 (SP) -SW T6,0018 (SP) -SW T7,001C (SP) -SW T8,0020 (SP) -SW T9,0024 (SP) -JAL 7F0ADABC -SW T0,0028 (SP) -OR A0,V0,R0 -LW RA,0034 (SP) -//7F009838: -ADDIU SP,SP,0038 -OR V0,A0,R0 -JR RA -NOP - -+-+ -7F0ADABC: ??? called above... -... -//7F0ADB30: -LUI T3,8005 -LW T3,84D0 (T3) -... -//7F0ADDA4: -JR RA -ADDIU SP,SP,00A8 - -+-+ -7F0AE98C: ??? -... -//7F0AE9C4: -LUI T8,8005 -LW T8,84D0 (T8) -... -//7F0AEB5C: -JR RA -ADDIU SP,SP,0018 - -+-+-+-+ -7F0BFB20: unload stage stuff! -... -//7F0BFB6C: unload stage-specific text -JAL 7F0C1DC4 blanks text bank A0 -OR A0,V0,R0 - -+-+-+-+ -//700094D0 -LW T2,84D0 (T2) J_text flag - - -+_+ - -70009720 Some strange and evil malloc routine - accepts: A0=size, A1=bank# -ADDIU SP,SP,FFE8 -SW A1,001C (SP) ;A1->org.SP+4 -ANDI A3,A1,00FF -LUI A1,8006 -LUI T2,8002 -ADDIU T2,T2,4404 ;T2=80024404: p->malloc.err -ADDIU A1,A1,3BB0 ;A1=80063BB0: p->bank entries -SW RA,0014 (SP) -OR A2,A0,R0 ;A2=A0: -//70009744: -SLL T8,A3,0x4 ;T8=A3*0x10: #->offset -ADDU V1,A1,T8 ;V1=80063BB0+offset: bank entry -LW V0,0004 (V1) ;V0=bank+4: p-> -BNEZ V0,7000976C ;had better not equal 0! -OR T0,V0,R0 ;T0=V0 -//70009758: erratta -ADDIU T9,R0,0001 -LUI AT,8002 -SW T9,4404 (AT) ;1->80024404: -BEQ R0,R0,70009764 ;infinite loop! -NOP -//7000976C: -LW A0,0008 (V1) ;A0=80063BB8+offset: p->??? -ADDU T5,V0,A2 ;T5=start+size -SLTU AT,A0,V0 ;TRUE if end < start -BEQL AT,R0,70009794 ;branch if valid chunk -SLTU AT,A0,T5 -//70009780: erratta -JAL 700098F0 ;V0=8; loop 8 times -ADDIU A3,R0,0006 -BEQ R0,R0,70009788 ;infinite loop! -NOP -//70009794: -SLTU AT,A0,T5 ;TRUE if end < total -BEQL AT,R0,700097E8 ;branch if will fit -ADDU T5,V0,A2 -LW T7,0064 (A1) ;T7=80063BB0+64: point in final buffer -LW T6,0068 (A1) ;T6=80063BB0+68: end of final buffer -ADDIU A3,R0,0006 ;A3=6 default entry# -ADDU T8,T7,A2 ;T8=T7+A2: start+size -SLTU AT,T6,T8 ;TRUE if end < start+size -BNEZ AT,700097D4 ;branch if no memory -NOP -LW V0,0000 (T2) ;V0=80024404: -ADDIU T9,R0,0001 -SW T9,0000 (T2) ;1->80024404 -BNEL V0,R0,70009748 ;regardless if it is set, try again with these values -SLL T8,A3,0x4 -BEQ R0,R0,70009748 -SLL T8,A3,0x4 -//700097D4: erratta -JAL 700098F0 ;V0=8 -NOP -BEQ R0,R0,700097DC ;infinite loop! -NOP -//700097E4: -ADDU T5,V0,A2 ;T5=start+size -SW T5,0004 (V1) ;start+size -> 80063BB4+offset: -SW T0,000C (V1) ;start -> 80063BBC+offset: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,T0,R0 ;V0=start -JR RA -NOP - -700098F0 V0=8; loop eight times, needlessly -ADDIU V0,R0,0001 ;V0=1 -//700098F4: -ADDIU V0,V0,0001 ;V0++ -ANDI T6,V0,00FF -SLTI AT,T6,0007 ;TRUE if T6<7 -BNEZ AT,700098F4 ;loop until untrue -OR V0,T6,R0 ;V0=T6 -JR RA -NOP diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/21990 reduction.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/21990 reduction.txt deleted file mode 100644 index e1648ff..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/21990 reduction.txt +++ /dev/null @@ -1,205 +0,0 @@ -Reducing 21990 compression size -------------------------------- -[note: ` denotes a new item from last revision] - -1) Erasing Unused Data (the easy part) -2) Table Lookup String Reassignment - -Section 1: -Erasing Unused Data (the easy part) -+++++++++++++++++++++++++++++++++++ - - The following memory blocks can be set to zero as their data is not used. Each of the lines below list what you are removing, the start offset, then the size of data. -offset size feature -`0x22BC 0x30 various debuggers -0x2574 0x3D8 RSP debugger -`0x294C 0x3C pointers -`0x3788 0xB18 image and DL for unused feature -0x5A84 0x84 0x1B[# values and associated pointers -`0x69B0 0x20 debug display background alpha -`0x69D4 0x20 debug display background alpha -0x8480 0x190 -0x7640 0x30 debug text -0x7690 0x50 -0x7700 0x32C Image capture -0x7A30 0x2B0 TLB & COP debugger -0x83A4 0x2C -0x8410 0x28 Memory allocation debugger -0x8440 0x3C -0x8B00 0xD4 Assertation fault error messages -0x2DF9C 0x28 Spectrum games and associated pointers -0x3B290 0x10C -0x33690 0x70 Failure to draw objects -0x33870 0x4F8 DL & data parsing errors -0x369D0 0x64 controller debuggery -0x37810 0x2C Clipping debuggery -0x37EAC 0x1C BG debuggery -0x3A8DC 0x20 -0x3A920 0x54 -0x3A984 0x28 Det detail level -0x3A9C0 0x34 Debug recorded intro movies -0x3B1F0 0x28 Fake compressed files -0x3B220 0x68 RSP debuggery -0x3BD00 0x60 RSP signature -0x22BC 0x30 Remove Debug Menu (MCM) -0x15E38 0x39C -0x345B0 0x504 - -optional: delete manpos cheat - not recommended -0x15B28 0x1C cardinal directions -0x34230 0x24 display formatting - also, write 0x01 -> 0x1EBFC. This reroutes a linked cheat code - -Optional special case: delete MP weapon TLB pointers -First, if -ROM- 0x37384 = 01C00008 (JR T6) - set ROM 0x37384 = 10000006 (BEQ R0,R0,+6) -then, in 21990, set the following to 0: - 0x2E1A0 0x20 MP weapon set expansion - - - -Section 2: -Table Lookup String Reassignment -++++++++++++++++++++++++++++++++ - Most of the size reduction is done using this method. This matches the strings kept in various tables through 21990 to the same string in the main text index. The pointer is set to the position of the matching text in the main index, and the original string is deleted. - - The main text bank starts at 0x38010, ending at 0x3A8DC. This is the search range for the text matchup routine. Each string is NULL terminated and extended to the nearest word. For convenience, it may be easiest to preprocess the list by retrieving each string and their initial offsets in the file. - - To condense all the data below, convert the pointer for the entry into an offset in the 21990 by subtracting 0x80020D90. Then, retrieve the NULL-terminated string sample. Compare the sample to all the strings in the main index. In the rare case of a miss, ignore the entry and move to the next. On a hit: -1) delete the original sample string by setting it to zero. -2) take the offset for the matching entry in the main index and add 0x80020D90 to convert it to a pointer -3) replace the original pointer with this new one - -Example: - The first BG text pointer is to 800585F0. -1) Subtract 0x80020D90 to convert it to a file offset: 0x37860. -2) Retrieve the NULL-terminated string at this offset: bg/bg_sev_all_p.seg -3) Search for a match to this string in the main text table (0x38010) - The matching string is at 0x38014. -4) Convert this offset into a pointer by adding 0x80020D90: 80058DA4 -5) Remove the original string at 0x37860 by setting it to zero -6) set the pointer from 800585F0->80058DA4 - - Given are instructions on how to parse each of the tables to retreive the text pointers. I also threw in the data structs for reference. - - --Stage BG and Clipping Table: - Table starts at 0x236FC. Table ends at 0x23A8C. Each entry is 0x18 in size. -struct{ - long stageID; - unsigned long Pbg_file; - unsigned long Pclipping; - float scale; - float visibility; - float unknown; - } - - Grab the pointer at +0x4. Retrieve the text at the offset and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - Grab the pointer at +0x8. Retrieve the text at the offset and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - Increment by 0x18 to test next entry. Table ends at 0x23A8C. - - --Stage Setup Pointer Table: - Table starts at 0x16758. Table ends at 0x16840. Each entry is a pointer to a text string or NULL. - - If the pointer is NULL, do nothing. - Otherwise, retrieve the text at the offset and look it up in the table at 0x38010. On a hit, delete the original string and set a new pointer. On a miss, do not edit the original string. This is important as this table requires text entries taht may not appear in the main text index. - - --Ejected Shell Casings: - Table starts at 0x116DC and ends at 0x11704. There are 5 entries of 0x8 each. -struct{ - unsigned long Pheader; - unsigned long Pname; - } - - Grab the pointer at +0x4. Retrieve the text at the offset and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - --G_weapon and Watch index: - Table starts at 0x12B94 and ends at 0x13F48. Each entry is 0x38 in size. - - Grab the pointer at +0x4. If NULL do nothing. Otherwise, retrieve the text at the offset and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - - --Standard Object Table: - Table starts at 0x19498 and ends at 0x1A494. Each entry is 0xC in size. Alternately, the table ends when the header pointer (+0x0) is NULL. -struct{ - unsigned long Pheader; - unsigned long Pname; - float scale; - } - - Grab the pointer at +0x4. Retrieve the text at the offset and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - - --Character Bodies and Heads: - Table starts at 0x1D080 and ends at 0x1D6D4. Each entry is 0x14 in size. -struct{ - unsigned long Pheader; - unsigned long Pname; - float hor_scale; - float vert_scale; - char gender; //1=male, 0 female - char head; //1=head or included head, 0 body only - short RESERVED; //filler - } - - Grab the pointer at +0x4. If NULL, ignore. Otherwise, retrieve the text at the offset and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - - --Text Table: - Table starts at 0x27744 and ends at 0x278AC. Each entry is a pointer to a text string or NULL. Two pointers are given for each text ID; pointers at +0x8 and +0xC correspond to 04XX text, +0x10 & +0x14 to 08XX text, etc. The first pointer is to English text, the second to Japanese. - -struct{ - unsigned long Penglish; - unsigned long Pjapanese; - } - - If the pointer is NULL ignore. - Otherwise, retrieve the text at the offset and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - - In this particular case you may want to eliminate all the japanese text offsets. Those would be at offsets +0x4. Alternately, you may also want to remove any text that does not have a string offset assigned to it. These can be reassigned later by directly jumping to the correct offset. Formula for english text is: -(First byte of ID)*8 + 0x27744 = offset to matching english text - - If requested, I can make a patch that removes the placeholders for japanese text as well, effectively doubling the number of possible text banks. - - --Briefing Menus: Basic Reassignment - Table starts at 0x9E54 and ends at 0xA19C. Each entry is 0x1C in size. -struct{ - unsigned long Pchaptertxt; - unsigned short txtID_1; - unsigned short txtID_2; - long stage; //stage ID or -1 - long row; //0=top row, 1=second row, 2=third, etc - long option; //stage in list; Dam=0, Facility=1, Runway=2, etc. -1 if catagory - long catagory; //0 if selectable stage, 1 if catagory - unsigned long Pname; - } - - If the pointer is NULL ignore. - Otherwise, retrieve the text pointer at +0x18 and look it up in table at 0x38010. On a hit, delete the original string and set the new pointer. - - --Briefing Menus: Optional - Advanced Menu Reconstruction - This redesigns the menu and makes it dramatically more efficient. This is a two-step operation. - - Reiterate through the briefing menu table. Retrieve the text pointer at 0x0 and eliminate the original text value. Depending on the original string value the following pointer will be assigned: -1 8004F310 -2 8004F312 -3 8004F314 -4 8004F316 -5 8004F318 -6 8004F31A -7 8004F31C -8 8004F31E -9 8004F320 -i 8004F324 -ii 8004F323 -iii 8004F322 -iv 8004F326 -v 8004F327 - - Then replace the binary at 0x2E580 with PATCH>¼‰žU -V<ÇôÑ·[ç¥E‡ü|Ìÿ¹ÖÉn6»þ…SÈ<¾ôÿ’jþüÛ%à MÛ4d”úOÒnã¿Ugø@Iü­B™ýøZ(~”ò+!íŸs *ÙDþïºÄÞÆ’ —B/ó|ô¾¶P8JÏЃ^rvYÞ¥â/ù ¥Ó/Ú/IÓûÅùã?†ëÉß¹c¦¤þÆ_œ?ËŸ‰zògNÊ›©ø³$é͸TüY»üïz¥g<›¿³è¥ŸÃ_Z=Øê"ôDþ+c=èic)ôÒ»üåÒð—ÑEïÒð—™ô¿ñç/½þ\çð—Õåã/½þ\çðgK‰/FcáÕºƒúeVgÞžù# -èœó;CIiâmgß”1{J|Ñé-:=Íÿn¯ \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Background File Data/clipping (stan) files/stan tile roving without table.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Background File Data/clipping (stan) files/stan tile roving without table.txt deleted file mode 100644 index 514cb28..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Background File Data/clipping (stan) files/stan tile roving without table.txt +++ /dev/null @@ -1,31 +0,0 @@ -very simple: -1) LHU +6 to get #sides -2) SRA sizes 0xC to get # alone -3) #sides++ -4) SLL # << 3 - -now 201BC-201C8 can be fried in 21990 - -//7F0AF1D4: E3D04 -26180001 *ADDIU T8,S0,0001 -0018C8C0 *SLL T9,T8,0x3 - -//7F0AF510: E4040 -254B0001 *ADDIU T3,T2,0001 -000B60C0 *SLL T4,T3,0x3 - -//7F0AF8E0: E4410 -25090001 *ADDIU T1,T0,0001 -000950C0 *SLL T2,T1,0x3 - -//7F0AFCC8: E47F8 -254B0001 *ADDIU T3,T2,0001 -000B58C0 *SLL T3,T3,0x3 - -//7F0B2ED4: E7A04 part of name lookup -256C0001 *ADDIU T4,T3,0001 -000C68C0 *SLL T5,T4,0x3 - -//7F0B2FB8: E7AE8 loop for each tile -25CF0001 *ADDIU T7,T6,0001 ;T7=sides+1 -000FC0C0 *SLL T8,T7,0x3 ;T8=offset to next tile diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Blue-min.dl b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Blue-min.dl deleted file mode 100644 index fac515a..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Blue-min.dl and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Blue-min.dl.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Blue-min.dl.txt deleted file mode 100644 index 8da45ac..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Blue-min.dl.txt +++ /dev/null @@ -1,59 +0,0 @@ - -rsp_setothermode_high BA001402 00000000 - Shift 20 bits, 2 bits of data Mask: 00300000 - Cycle Type: 1 cycle -rsp_setothermode_low B900031D 00552048 - Shift 3 bits, 29 bits of data Mask: FFFFFFF8 - Render Mode: antialiasing image read - Converge ST: converge delta-ST clamp - Depth Mode: depth opa - Converge: alpha converge selection - Blender: blend 1 machine blend 1 blend colour in blend colour blender -rdp_setcombine FC119623 FF2FFFFF - a0 texel0 Alpha texel0 a1 texel0 alpha Alpha texel0 - b0 K5 Alpha 0 b1 K5 Alpha 0 - c0 primitive Alpha primitive c1 primitive Alpha primitive - d0 combined alpha Alpha 0 d1 combined alpha Alpha 0 -rsp_setgeometrymode B7000000 00060000 - lighting texture gen -rsp_vertex (RARE) 04F00100 02002B18 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EFBA F8B8A898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {8, 11, 15} - Triangle 4 {8, 15, 14} -rsp_tri4 (RARE) B10007CD 78C8D8E8 - Triangle 1 {8, 14, 13} - Triangle 2 {8, 13, 12} - Triangle 3 {8, 12, 7} - Triangle 4 {8, 7, 0} -rsp_tri4 (RARE) B1004321 38281808 - Triangle 1 {8, 0, 1} - Triangle 2 {8, 1, 2} - Triangle 3 {8, 2, 3} - Triangle 4 {8, 3, 4} -rsp_tri4 (RARE) B1000065 00005848 - Triangle 1 {8, 4, 5} - Triangle 2 {8, 5, 6} -rsp_vertex (RARE) 04D000E0 02002C18 - # 13 total bytes 0xE0 -rsp_tri4 (RARE) B100CBA9 B7A79787 - Triangle 1 {7, 8, 9} - Triangle 2 {7, 9, 10} - Triangle 3 {7, 10, 11} - Triangle 4 {7, 11, 12} -rsp_endDL B8000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Dinky note.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Dinky note.txt deleted file mode 100644 index 500d948..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Dinky note.txt +++ /dev/null @@ -1 +0,0 @@ - This display list is designed for non-mipmapped images but does not disable mipmap usage currently. A correction is coming forthwith. \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/DinkyLogo-emuonly.ips b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/DinkyLogo-emuonly.ips deleted file mode 100644 index d4c89d5..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/DinkyLogo-emuonly.ips and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Gold-min.dl b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Gold-min.dl deleted file mode 100644 index 27f4791..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Gold-min.dl and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Gold-min.dl.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Gold-min.dl.txt deleted file mode 100644 index 8006aa0..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Gold-min.dl.txt +++ /dev/null @@ -1,555 +0,0 @@ - -rsp_setothermode_high BA001402 00000000 - Shift 20 bits, 2 bits of data Mask: 00300000 - Cycle Type: 1 cycle -rsp_setothermode_low B900031D 00552048 - Shift 3 bits, 29 bits of data Mask: FFFFFFF8 - Render Mode: antialiasing image read - Converge ST: converge delta-ST clamp - Depth Mode: depth opa - Converge: alpha converge selection - Blender: blend 1 machine blend 1 blend colour in blend colour blender -rdp_setcombine FC119623 FF2FFFFF - a0 texel0 Alpha texel0 a1 texel0 alpha Alpha texel0 - b0 K5 Alpha 0 b1 K5 Alpha 0 - c0 primitive Alpha primitive c1 primitive Alpha primitive - d0 combined alpha Alpha 0 d1 combined alpha Alpha 0 -rsp_setgeometrymode B7000000 00060000 - lighting texture gen -rsp_texture BB000001 1C811426 - Mipmap Level 0 tile t0 0 on Bowtie: -0 scanlines - ST (7297,5158) -rdp_settilesize F202E074 0007C07C - tile 0 UL ST (46,116) LR ST(124,124) -rsp_vertex (RARE) 04F00100 02002CF8 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B1006521 53431707 - Triangle 1 {7, 0, 1} - Triangle 2 {7, 1, 2} - Triangle 3 {3, 4, 5} - Triangle 4 {3, 5, 6} -rsp_vertex (RARE) 04D000E0 02002EF8 - # 13 total bytes 0xE0 -rsp_tri4 (RARE) B100A7A9 7BCB9787 - Triangle 1 {7, 8, 9} - Triangle 2 {7, 9, 10} - Triangle 3 {11, 12, 7} - Triangle 4 {11, 7, 10} -rsp_tri4 (RARE) B100166B 60D0BDCD - Triangle 1 {13, 12, 11} - Triangle 2 {13, 11, 6} - Triangle 3 {0, 13, 6} - Triangle 4 {0, 6, 1} -rsp_tri4 (RARE) B1000054 00004232 - Triangle 1 {2, 3, 4} - Triangle 2 {2, 4, 5} -rsp_vertex (RARE) 04F00100 02002FD8 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100DF8A EF8B9B98 - Triangle 1 {8, 9, 10} - Triangle 2 {11, 9, 8} - Triangle 3 {11, 8, 15} - Triangle 4 {15, 14, 13} -rsp_tri4 (RARE) B10017CB 0CCDEDDF - Triangle 1 {15, 13, 11} - Triangle 2 {13, 14, 12} - Triangle 3 {13, 12, 7} - Triangle 4 {12, 0, 1} -rsp_tri4 (RARE) B1006327 5421011C - Triangle 1 {12, 1, 7} - Triangle 2 {1, 0, 2} - Triangle 3 {1, 2, 3} - Triangle 4 {4, 5, 6} -rsp_vertex (RARE) 04D000E0 020030D8 - # 13 total bytes 0xE0 -rsp_tri4 (RARE) B1001DC9 06CABA87 - Triangle 1 {7, 8, 9} - Triangle 2 {10, 11, 12} - Triangle 3 {10, 12, 13} - Triangle 4 {6, 0, 1} -rsp_tri4 (RARE) B1000052 00004316 - Triangle 1 {6, 1, 2} - Triangle 2 {3, 4, 5} -rsp_vertex (RARE) 04D000E0 020031B8 - # 13 total bytes 0xE0 -rsp_tri4 (RARE) B10089A9 9BCB9787 - Triangle 1 {7, 8, 9} - Triangle 2 {7, 9, 10} - Triangle 3 {11, 12, 9} - Triangle 4 {11, 9, 8} -rsp_tri4 (RARE) B1006D6B D010BDCD - Triangle 1 {13, 12, 11} - Triangle 2 {13, 11, 6} - Triangle 3 {0, 1, 13} - Triangle 4 {0, 13, 6} -rsp_tri4 (RARE) B1000054 00004232 - Triangle 1 {2, 3, 4} - Triangle 2 {2, 4, 5} -rsp_vertex (RARE) 04F00100 02003298 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100CDBA DFEFA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {15, 14, 13} - Triangle 4 {15, 13, 12} -rsp_tri4 (RARE) B1006521 53431707 - Triangle 1 {7, 0, 1} - Triangle 2 {7, 1, 2} - Triangle 3 {3, 4, 5} - Triangle 4 {3, 5, 6} -rsp_vertex (RARE) 04F00100 02003398 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100CDBA DFEFA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {15, 14, 13} - Triangle 4 {15, 13, 12} -rsp_tri4 (RARE) B100430B 3121B787 - Triangle 1 {7, 8, 11} - Triangle 2 {7, 11, 0} - Triangle 3 {1, 2, 3} - Triangle 4 {1, 3, 4} -rsp_tri4 (RARE) B1000063 00003545 - Triangle 1 {5, 4, 3} - Triangle 2 {5, 3, 6} -rsp_vertex (RARE) 04F00100 02003498 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EFBA F8B8A898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {8, 11, 15} - Triangle 4 {8, 15, 14} -rsp_tri4 (RARE) B1002707 71017DCD - Triangle 1 {13, 12, 7} - Triangle 2 {13, 7, 0} - Triangle 3 {1, 0, 7} - Triangle 4 {1, 7, 2} -rsp_tri4 (RARE) B1006442 45352313 - Triangle 1 {3, 1, 2} - Triangle 2 {3, 2, 4} - Triangle 3 {5, 3, 4} - Triangle 4 {5, 4, 6} -rsp_vertex (RARE) 04D000E0 02003598 - # 13 total bytes 0xE0 -rsp_tri4 (RARE) B10078A9 8BCB9787 - Triangle 1 {7, 8, 9} - Triangle 2 {7, 9, 10} - Triangle 3 {11, 12, 8} - Triangle 4 {11, 8, 7} -rsp_tri4 (RARE) B10061C6 1D0D6BDB - Triangle 1 {11, 13, 6} - Triangle 2 {11, 6, 12} - Triangle 3 {13, 0, 1} - Triangle 4 {13, 1, 6} -rsp_tri4 (RARE) B1000054 00004232 - Triangle 1 {2, 3, 4} - Triangle 2 {2, 4, 5} -rsp_vertex (RARE) 04F00100 02003678 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100CDBA DFEFA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {15, 14, 13} - Triangle 4 {15, 13, 12} -rsp_tri4 (RARE) B100A421 49391707 - Triangle 1 {7, 0, 1} - Triangle 2 {7, 1, 2} - Triangle 3 {9, 3, 4} - Triangle 4 {9, 4, 10} -rsp_tri4 (RARE) B10000F6 00006C5C - Triangle 1 {12, 5, 6} - Triangle 2 {12, 6, 15} -rsp_vertex (RARE) 04F00100 02003778 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B1008EBA EBFBA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {11, 15, 14} - Triangle 4 {11, 14, 8} -rsp_tri4 (RARE) B10021CF 1707FDED - Triangle 1 {13, 14, 15} - Triangle 2 {13, 15, 12} - Triangle 3 {7, 0, 1} - Triangle 4 {7, 1, 2} -rsp_tri4 (RARE) B1003640 64540313 - Triangle 1 {3, 1, 0} - Triangle 2 {3, 0, 4} - Triangle 3 {4, 5, 6} - Triangle 4 {4, 6, 3} -rsp_vertex (RARE) 04D000E0 02003878 - # 13 total bytes 0xE0 -rsp_tri4 (RARE) B100C8A9 8B9B9787 - Triangle 1 {7, 8, 9} - Triangle 2 {7, 9, 10} - Triangle 3 {11, 9, 8} - Triangle 4 {11, 8, 12} -rsp_tri4 (RARE) B10061B6 1D0D6CDC - Triangle 1 {12, 13, 6} - Triangle 2 {12, 6, 11} - Triangle 3 {13, 0, 1} - Triangle 4 {13, 1, 6} -rsp_tri4 (RARE) B1000054 00004232 - Triangle 1 {2, 3, 4} - Triangle 2 {2, 4, 5} -rsp_vertex (RARE) 04F00100 02003958 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100CDBA DFEFA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {15, 14, 13} - Triangle 4 {15, 13, 12} -rsp_tri4 (RARE) B10021F9 17079CAC - Triangle 1 {12, 10, 9} - Triangle 2 {12, 9, 15} - Triangle 3 {7, 0, 1} - Triangle 4 {7, 1, 2} -rsp_tri4 (RARE) B1006541 53431323 - Triangle 1 {3, 2, 1} - Triangle 2 {3, 1, 4} - Triangle 3 {3, 4, 5} - Triangle 4 {3, 5, 6} -rsp_vertex (RARE) 04F00100 02003A58 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EFBA F8B8A898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {8, 11, 15} - Triangle 4 {8, 15, 14} -rsp_tri4 (RARE) B1000DCD D7C7DEFE - Triangle 1 {14, 15, 13} - Triangle 2 {14, 13, 12} - Triangle 3 {7, 12, 13} - Triangle 4 {7, 13, 0} -rsp_tri4 (RARE) B1004121 13231707 - Triangle 1 {7, 0, 1} - Triangle 2 {7, 1, 2} - Triangle 3 {3, 2, 1} - Triangle 4 {3, 1, 4} -rsp_tri4 (RARE) B1000065 00005343 - Triangle 1 {3, 4, 5} - Triangle 2 {3, 5, 6} -rsp_vertex (RARE) 04F00100 02003B58 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EABA AFBFA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {15, 11, 10} - Triangle 4 {15, 10, 14} -rsp_tri4 (RARE) B1000DCD D7C7DFEF - Triangle 1 {15, 14, 13} - Triangle 2 {15, 13, 12} - Triangle 3 {7, 12, 13} - Triangle 4 {7, 13, 0} -rsp_tri4 (RARE) B1004321 32121707 - Triangle 1 {7, 0, 1} - Triangle 2 {7, 1, 2} - Triangle 3 {2, 1, 3} - Triangle 4 {2, 3, 4} -rsp_tri4 (RARE) B1000063 00003545 - Triangle 1 {5, 4, 3} - Triangle 2 {5, 3, 6} -rsp_vertex (RARE) 04F00100 02003C58 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EABA AFBFA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {15, 11, 10} - Triangle 4 {15, 10, 14} -rsp_tri4 (RARE) B10021CE 1707EDFD - Triangle 1 {13, 15, 14} - Triangle 2 {13, 14, 12} - Triangle 3 {7, 0, 1} - Triangle 4 {7, 1, 2} -rsp_tri4 (RARE) B1000065 00005343 - Triangle 1 {3, 4, 5} - Triangle 2 {3, 5, 6} -rsp_vertex (RARE) 04F00100 02003D58 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100CDBA DFEFA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {15, 14, 13} - Triangle 4 {15, 13, 12} -rsp_tri4 (RARE) B10027DC 7101C707 - Triangle 1 {7, 0, 12} - Triangle 2 {7, 12, 13} - Triangle 3 {1, 0, 7} - Triangle 4 {1, 7, 2} -rsp_tri4 (RARE) B1006321 35451343 - Triangle 1 {3, 4, 1} - Triangle 2 {3, 1, 2} - Triangle 3 {5, 4, 3} - Triangle 4 {5, 3, 6} -rsp_vertex (RARE) 04F00100 02003E58 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EFBA FBABA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {11, 10, 15} - Triangle 4 {11, 15, 14} -rsp_tri4 (RARE) B10007EC 7CDCCFDF - Triangle 1 {15, 13, 12} - Triangle 2 {15, 12, 14} - Triangle 3 {12, 13, 7} - Triangle 4 {12, 7, 0} -rsp_tri4 (RARE) B1006543 53233121 - Triangle 1 {1, 2, 3} - Triangle 2 {1, 3, 4} - Triangle 3 {3, 2, 5} - Triangle 4 {3, 5, 6} -rsp_vertex (RARE) 04F00100 02003F58 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EFBA FA9AA898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {10, 9, 15} - Triangle 4 {10, 15, 14} -rsp_tri4 (RARE) B1002D07 D1C17DCD - Triangle 1 {13, 12, 7} - Triangle 2 {13, 7, 0} - Triangle 3 {1, 12, 13} - Triangle 4 {1, 13, 2} -rsp_tri4 (RARE) B1006321 35451343 - Triangle 1 {3, 4, 1} - Triangle 2 {3, 1, 2} - Triangle 3 {5, 4, 3} - Triangle 4 {5, 3, 6} -rsp_vertex (RARE) 04F00100 02004058 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EFBA F8B8A898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {8, 11, 15} - Triangle 4 {8, 15, 14} -rsp_tri4 (RARE) B10007CD 78C8D8E8 - Triangle 1 {8, 14, 13} - Triangle 2 {8, 13, 12} - Triangle 3 {8, 12, 7} - Triangle 4 {8, 7, 0} -rsp_tri4 (RARE) B1004321 38281808 - Triangle 1 {8, 0, 1} - Triangle 2 {8, 1, 2} - Triangle 3 {8, 2, 3} - Triangle 4 {8, 3, 4} -rsp_tri4 (RARE) B1000065 00005848 - Triangle 1 {8, 4, 5} - Triangle 2 {8, 5, 6} -rsp_vertex (RARE) 04F00100 02004158 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100EFBA F8B8A898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {8, 11, 15} - Triangle 4 {8, 15, 14} -rsp_tri4 (RARE) B1002107 1D0D7DCD - Triangle 1 {13, 12, 7} - Triangle 2 {13, 7, 0} - Triangle 3 {13, 0, 1} - Triangle 4 {13, 1, 2} -rsp_tri4 (RARE) B1000065 00005343 - Triangle 1 {3, 4, 5} - Triangle 2 {3, 5, 6} -rsp_vertex (RARE) 04F00100 02004258 - # 15 total bytes 0x100 -rsp_tri4 (RARE) B100DEBA E8F8A898 - Triangle 1 {8, 9, 10} - Triangle 2 {8, 10, 11} - Triangle 3 {8, 15, 14} - Triangle 4 {8, 14, 13} -rsp_tri4 (RARE) B1009A7C A010C8D8 - Triangle 1 {8, 13, 12} - Triangle 2 {8, 12, 7} - Triangle 3 {0, 1, 10} - Triangle 4 {0, 10, 9} -rsp_tri4 (RARE) B1000632 00542090 - Triangle 1 {0, 9, 2} - Triangle 2 {0, 2, 3} - Triangle 3 {4, 5, 6} -rsp_vertex (RARE) 04800090 02004358 - # 8 total bytes 0x90 -rsp_tri4 (RARE) B1000487 45857565 - Triangle 1 {5, 6, 7} - Triangle 2 {5, 7, 8} - Triangle 3 {5, 8, 4} - Triangle 4 {5, 4, 0} -rsp_tri4 (RARE) B1000321 00251505 - Triangle 1 {5, 0, 1} - Triangle 2 {5, 1, 2} - Triangle 3 {5, 2, 3} -rsp_endDL B8000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 -NOP 00000000 00000000 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Text-min.dl b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Text-min.dl deleted file mode 100644 index 3f4ac04..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Text-min.dl and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Text-min.dl.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Text-min.dl.txt deleted file mode 100644 index 8547b2e..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Display Lists and Object Generation/Objects/Rare Logo/Text-min.dl.txt +++ /dev/null @@ -1,229 +0,0 @@ - -rsp_cleargeometrymode B6000000 00060000 - lighting texture gen -rsp_texture BB002801 FFFFFFFF - Mipmap Level 5 tile t0 0 on Bowtie: -0 scanlines - ST (-1,-1) -rdp_pipesync E7000000 00000000 -rsp_setothermode_high BA001402 00100000 - Shift 20 bits, 2 bits of data Mask: 00300000 - Cycle Type: 2 cycle -rdp_setcombine FC169003 1F0C93FF - a0 texel0 Alpha texel0 a1 combined Alpha combined - b0 texel0 Alpha texel0 b1 K5 Alpha 0 - c0 LOD fraction Alpha combined c1 primitive Alpha primitive - d0 texel0 Alpha primitive d1 combined alpha Alpha 0 -rsp_setothermode_high BA001001 00010000 - Shift 16 bits, 1 bits of data Mask: 00010000 - Texture LOD: lod -rdp_settextureimage FD100000 02000020 - 16bit RGBA width 0 -rdp_settile F5100000 07000000 - 16bit RGBA line 0 tmem 0 tile 7 palette 0 - S: shift 0 mask 0 - T: shift 0 mask 0 -rdp_loadsync E6000000 00000000 -rdp_loadblock F3000000 0755B000 - tile: 7 UL ST (0,0) LR ST (342,0) -rdp_settile F5101000 00014050 - 16bit RGBA line 8 tmem 0 tile 0 palette 0 - S: shift 0 mask 5 - T: shift 0 mask 5 -rdp_settilesize F2002002 0007E07E - tile 0 UL ST (2,2) LR ST(126,126) -rdp_settile F5100900 01010441 - 16bit RGBA line 4 tmem 256 tile 1 palette 0 - S: shift 1 mask 4 - T: shift 1 mask 4 -rdp_settilesize F2002002 0103E03E - tile 1 UL ST (2,2) LR ST(62,62) -rdp_settile F5100540 0200C832 - 16bit RGBA line 2 tmem 320 tile 2 palette 0 - S: shift 2 mask 3 - T: shift 2 mask 3 -rdp_settilesize F2002002 0201E01E - tile 2 UL ST (2,2) LR ST(30,30) -rdp_settile F5100350 03008C23 - 16bit RGBA line 1 tmem 336 tile 3 palette 0 - S: shift 3 mask 2 - T: shift 3 mask 2 -rdp_settilesize F2002002 0300E00E - tile 3 UL ST (2,2) LR ST(14,14) -rdp_settile F5100354 04005014 - 16bit RGBA line 1 tmem 340 tile 4 palette 0 - S: shift 4 mask 1 - T: shift 4 mask 1 -rdp_settilesize F2002002 04006006 - tile 4 UL ST (2,2) LR ST(6,6) -rdp_settile F5100356 05001405 - 16bit RGBA line 1 tmem 342 tile 5 palette 0 - S: shift 5 mask 0 - T: shift 5 mask 0 -rdp_settilesize F2002002 05002002 - tile 5 UL ST (2,2) LR ST(2,2) -rsp_setothermode_low B900031D 0F0A4000 - Shift 3 bits, 29 bits of data Mask: FFFFFFF8 - Render Mode: no antialiasing - Converge ST: converge delta-ST clamp - Depth Mode: depth opa - Converge: force blender - Blender: blend alpha memory blend 0 blend alpha in blend alpha fog blend alpha shade blend 0 -rsp_vertex (RARE) 04D000E0 02002C18 - # 13 total bytes 0xE0 -rsp_tri1 (RARE) BF000000 00823C00 - Triangle 1 {13, 6, 0} -rsp_tri1 (RARE) BF000000 0082000A - Triangle 1 {13, 0, 1} -rdp_pipesync E7000000 00000000 -rdp_settextureimage FD100000 02000AE0 - 16bit RGBA width 0 -rdp_settile F5100000 07000000 - 16bit RGBA line 0 tmem 0 tile 7 palette 0 - S: shift 0 mask 0 - T: shift 0 mask 0 -rdp_loadsync E6000000 00000000 -rdp_loadblock F3000000 0755B000 - tile: 7 UL ST (0,0) LR ST (342,0) -rdp_settile F5101000 00014050 - 16bit RGBA line 8 tmem 0 tile 0 palette 0 - S: shift 0 mask 5 - T: shift 0 mask 5 -rdp_settilesize F2002002 0007E07E - tile 0 UL ST (2,2) LR ST(126,126) -rdp_settile F5100900 01010441 - 16bit RGBA line 4 tmem 256 tile 1 palette 0 - S: shift 1 mask 4 - T: shift 1 mask 4 -rdp_settilesize F2002002 0103E03E - tile 1 UL ST (2,2) LR ST(62,62) -rdp_settile F5100540 0200C832 - 16bit RGBA line 2 tmem 320 tile 2 palette 0 - S: shift 2 mask 3 - T: shift 2 mask 3 -rdp_settilesize F2002002 0201E01E - tile 2 UL ST (2,2) LR ST(30,30) -rdp_settile F5100350 03008C23 - 16bit RGBA line 1 tmem 336 tile 3 palette 0 - S: shift 3 mask 2 - T: shift 3 mask 2 -rdp_settilesize F2002002 0300E00E - tile 3 UL ST (2,2) LR ST(14,14) -rdp_settile F5100354 04005014 - 16bit RGBA line 1 tmem 340 tile 4 palette 0 - S: shift 4 mask 1 - T: shift 4 mask 1 -rdp_settilesize F2002002 04006006 - tile 4 UL ST (2,2) LR ST(6,6) -rdp_settile F5100356 05001405 - 16bit RGBA line 1 tmem 342 tile 5 palette 0 - S: shift 5 mask 0 - T: shift 5 mask 0 -rdp_settilesize F2002002 05002002 - tile 5 UL ST (2,2) LR ST(2,2) -rsp_tri1 (RARE) BF000000 00141E28 - Triangle 1 {2, 3, 4} -rsp_tri1 (RARE) BF000000 00142832 - Triangle 1 {2, 4, 5} -rdp_pipesync E7000000 00000000 -rdp_settextureimage FD100000 020015A0 - 16bit RGBA width 0 -rdp_settile F5100000 07000000 - 16bit RGBA line 0 tmem 0 tile 7 palette 0 - S: shift 0 mask 0 - T: shift 0 mask 0 -rdp_loadsync E6000000 00000000 -rdp_loadblock F3000000 0755B000 - tile: 7 UL ST (0,0) LR ST (342,0) -rdp_settile F5101000 00014050 - 16bit RGBA line 8 tmem 0 tile 0 palette 0 - S: shift 0 mask 5 - T: shift 0 mask 5 -rdp_settilesize F2002002 0007E07E - tile 0 UL ST (2,2) LR ST(126,126) -rdp_settile F5100900 01010441 - 16bit RGBA line 4 tmem 256 tile 1 palette 0 - S: shift 1 mask 4 - T: shift 1 mask 4 -rdp_settilesize F2002002 0103E03E - tile 1 UL ST (2,2) LR ST(62,62) -rdp_settile F5100540 0200C832 - 16bit RGBA line 2 tmem 320 tile 2 palette 0 - S: shift 2 mask 3 - T: shift 2 mask 3 -rdp_settilesize F2002002 0201E01E - tile 2 UL ST (2,2) LR ST(30,30) -rdp_settile F5100350 03008C23 - 16bit RGBA line 1 tmem 336 tile 3 palette 0 - S: shift 3 mask 2 - T: shift 3 mask 2 -rdp_settilesize F2002002 0300E00E - tile 3 UL ST (2,2) LR ST(14,14) -rdp_settile F5100354 04005014 - 16bit RGBA line 1 tmem 340 tile 4 palette 0 - S: shift 4 mask 1 - T: shift 4 mask 1 -rdp_settilesize F2002002 04006006 - tile 4 UL ST (2,2) LR ST(6,6) -rdp_settile F5100356 05001405 - 16bit RGBA line 1 tmem 342 tile 5 palette 0 - S: shift 5 mask 0 - T: shift 5 mask 0 -rdp_settilesize F2002002 05002002 - tile 5 UL ST (2,2) LR ST(2,2) -rsp_vertex (RARE) 04F00100 02002CF8 - # 15 total bytes 0x100 -rsp_tri1 (RARE) BF000000 00505A64 - Triangle 1 {8, 9, 10} -rsp_tri1 (RARE) BF000000 0050646E - Triangle 1 {8, 10, 11} -rdp_pipesync E7000000 00000000 -rdp_settextureimage FD100000 02002060 - 16bit RGBA width 0 -rdp_settile F5100000 07000000 - 16bit RGBA line 0 tmem 0 tile 7 palette 0 - S: shift 0 mask 0 - T: shift 0 mask 0 -rdp_loadsync E6000000 00000000 -rdp_loadblock F3000000 0755B000 - tile: 7 UL ST (0,0) LR ST (342,0) -rdp_settile F5101000 00014050 - 16bit RGBA line 8 tmem 0 tile 0 palette 0 - S: shift 0 mask 5 - T: shift 0 mask 5 -rdp_settilesize F2002002 0007E07E - tile 0 UL ST (2,2) LR ST(126,126) -rdp_settile F5100900 01010441 - 16bit RGBA line 4 tmem 256 tile 1 palette 0 - S: shift 1 mask 4 - T: shift 1 mask 4 -rdp_settilesize F2002002 0103E03E - tile 1 UL ST (2,2) LR ST(62,62) -rdp_settile F5100540 0200C832 - 16bit RGBA line 2 tmem 320 tile 2 palette 0 - S: shift 2 mask 3 - T: shift 2 mask 3 -rdp_settilesize F2002002 0201E01E - tile 2 UL ST (2,2) LR ST(30,30) -rdp_settile F5100350 03008C23 - 16bit RGBA line 1 tmem 336 tile 3 palette 0 - S: shift 3 mask 2 - T: shift 3 mask 2 -rdp_settilesize F2002002 0300E00E - tile 3 UL ST (2,2) LR ST(14,14) -rdp_settile F5100354 04005014 - 16bit RGBA line 1 tmem 340 tile 4 palette 0 - S: shift 4 mask 1 - T: shift 4 mask 1 -rdp_settilesize F2002002 04006006 - tile 4 UL ST (2,2) LR ST(6,6) -rdp_settile F5100356 05001405 - 16bit RGBA line 1 tmem 342 tile 5 palette 0 - S: shift 5 mask 0 - T: shift 5 mask 0 -rdp_settilesize F2002002 05002002 - tile 5 UL ST (2,2) LR ST(2,2) -rsp_tri1 (RARE) BF000000 00968C82 - Triangle 1 {15, 14, 13} -rsp_tri1 (RARE) BF000000 00968278 - Triangle 1 {15, 13, 12} -rsp_endDL B8000000 00000000 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/80000400 - rewritten initializer.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/80000400 - rewritten initializer.txt deleted file mode 100644 index be5f4ed..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/80000400 - rewritten initializer.txt +++ /dev/null @@ -1,792 +0,0 @@ - Need to rewrite to accept 8MB expansion pak detection. - -This 'corrects' the 8MB down to 7MB for whatever silly stuff we'd like to do on the side. -You don't have to do any 8MB stuff until the main thread has started, but doing it here anyway. - -80000400 1000 inception point -// First to admit this could be cleaner... -3C088006 LUI T0,8006 -3C090003 LUI T1,0003 -35291080 ORI T1,T1,1080 ;T1=31080 -//8000040C: initialize 31080 bytes at 8005D2E0 -2129FFF0 *ADDI T1,T1,FFF0 -FD00D2E0 *SD R0,D2E0 (T0) -FD00D2E8 *SD R0,D2E8 (T0) -1520FFFC BNEZ T1,8000040C -21080010 *ADDI T0,T0,0010 -//80000420: 'correct' reported memory -3C0A8000 *LUI T2,8000 -8D490318 *LW T1,0318 (T2) ;T1=size of memory -000945C2 *SRL T0,T1,0x17 -00084500 *SLL T0,T0,0x14 -01284823 *SUBU T1,T1,T0 -AD490318 *SW T1,0318 (T2) -//80000420: set stack pointer and jump to 80000450 -3C1D7FFA *LUI SP,7FFA -37BDB410 *ORI SP,SP,B410 -//lead directly into 80000450 -24070001 ADDIU A3,R0,0001 -40870000 *MTC0 A3,Index -2406001F ADDIU A2,R0,001F -40861000 *MTC0 A2,EntryLo0 -3C08007F LUI T0,007F -40871800 MTC0 A3,EntryLo1 -3C057000 LUI A1,7000 -40855000 MTC0 A1,EntryHi -3508E000 ORI T0,T0,E000 -40882800 MTC0 T0,PageMask -3C0A7000 LUI T2,7000 -42000002 TLBWI -254A0510 ADDIU T2,T2,0510 ;T2=70000510 -01400008 JR T2 -03A9E821 *ADDU SP,SP,T1 ;SP= 80000000 - 54BF0 + size of memory - -Amendment to permit mapping 70400000-70800000. -//lead directly into 80000450 -24070001 ADDIU A3,R0,0001 -40870000 *MTC0 A3,Index -2406001F ADDIU A2,R0,001F -40861000 *MTC0 A2,EntryLo0 -00084102 *SRL T0,T0,0x4 ;T0= 10000 if 8MB -55000001 *BNEL T0,R0,+1 ;if 8MBs, map upper 4MB -00C83825 *OR A3,A2,T0 ;A3= 1001F -3C08007F LUI T0,007F -40871800 MTC0 A3,EntryLo1 -3C057000 LUI A1,7000 -40855000 MTC0 A1,EntryHi -3508E000 ORI T0,T0,E000 -40882800 MTC0 T0,PageMask -42000002 TLBWI -24AA0510 ADDIU T2,A1,0510 ;T2=70000510 -01400008 JR T2 -03A9E821 *ADDU SP,SP,T1 ;SP= 80000000 - 54BF0 + size of memory - - -Most thread upper-mem stack pointers go through here. This should auto-correct them upwards. -Redirect 700006F0 or set new pointers; safest to do both, but shouldn't be an issue either way. -7000048C 108C V0= new stack pointer; address A0 + offset A1 - 8 - accepts: A0=p->base SP, A1=offset -3C020040 LUI V0,0040 -00822023 SUBU A0,A0,V0 ;address-=4MB -3C028000 LUI V0,8000 -8C420318 LW V0,0318 (V0) ;V0=amount of memory -00822021 ADDU A0,A0,V0 -00852021 ADDU A0,A0,A1 -03E00008 JR RA -2482FFF8 ADDIU V0,A0,FFF8 - -using spare room for a short external to mask off cached addresses -700004AC 10AC V0=uncached rdram address A0; masks off 20000000 -3C022000 LUI V0,2000 -00822025 OR A0,A0,V0 -03E00008 JR RA -00821026 XOR V0,A0,V0 ;T0= (T0|20000000)^20000000: should get rid of any weirdness here - - -need to address: -700006F0 alter to one-shot all upper-mem stack pointers - Even though JALs will be reset, will turn this into a jump just in case... - -By the time 70003124 is hit both 8002417C and 80024180 are set. -Really, every other routine should access indirectly from there or use a specific offset retrieved from these. - -700009F8 two at the end of this; stderr display tests - actually, could get around this if 700059D0 used an index to the video buffer instead - 700059D0 turns these into uncached ones anyway, so passing those is okay -700009F8 15F8 if not A0, test to display stderr; displays every 16th frame - accepts: A0=timer -27BDFFE8 ADDIU SP,SP,FFE8 -308E000F ANDI T6,A0,000F -15C00015 *BNE T6,R0,70000A74 ;return if A0&F not 0 -AFBF0014 SW RA,0014 (SP) -//70000A08: test if stderr is both permitted and activated -3C0F8002 LUI T7,8002 -8DE1309C *LW AT,309C (T7) ;AT=8002309C: stderr.permitted -8DE23098 *LW V0,3098 (T7) ;V0=80023098: stderr.activated -00411024 *AND V0,V0,AT -8DE13094 *LW AT,3094 (T7) ;V0=80023094: stderr.enable -00411025 *OR V0,V0,AT -//70000A20: -1040000D BEQ V0,R0,70000A74 ;return if not set -00000000 NOP -//70000A38: test for stderr periodic event -0C003638 JAL 7000D8E0 ;V0=Count; only V0 should change... -8DE930A4 *LW T1,30A4 (T7) ;T1=800230A4: previous Count -8DE830A0 LW T0,30A0 (T7) ;T0=800230A0: user.Compare -00495023 SUBU T2,V0,T1 ;T2=Count-T1 -010A082B SLTU AT,T0,T2 -10200006 *BEQ AT,R0,70000A7C ;return if Count-prev.Count <= user.Compare -//70000A64: display stderr -3C048002 *LUI A0,8002 -0C001674 JAL 700059D0 ;write stderr to video buffer A0 -8C84417C *LW A0,417C (A0) ;A0=8002417C: video buffer 1 -3C048002 *LUI A0,8002 -0C001674 JAL 700059D0 ;write stderr to video buffer A0 -8C844180 *LW A0,4180 (A0) ;A0=80024180: video buffer 2 -//70000A78: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - - - -700017E0, most of it. It sets the upper limit of free mem and allocates some E000+ region ahead of it for TLB - From 802F6000 to 803AB400; used as end to general free memory! - note: could use new routine to remove uncached address mask, but would require 5 lines to do properly and 3 to do half-assed. -700017E0 23E0 establishes 7F- TLB buffer and management table -3C0E8006 *LUI T6,8006 -25C2E3F0 *ADDIU V0,T6,E3F0 ;V0=8005E3F0 -25C3DBF0 *ADDIU V1,T6,DBF0 ;V1=8005DBF0 -24040001 ADDIU A0,R0,0001 -//700017F4: initialize the 8005DBF0 - 8005E3F0 table -24630010 ADDIU V1,V1,0010 -0062082B SLTU AT,V1,V0 -AC64FFF0 SW A0,FFF0 (V1) ;1->tbl+0 -1420FFFC BNE AT,R0,700017F4 -AC60FFF4 SW R0,FFF4 (V1) ;0->tbl+4 could omit this, but just in case of a reboot... -//70001808: fill range 8005E3F0 - 8005E4A4 with 0100 -34040100 *ORI A0,R0,0100 -25C2E4A4 *ADDIU V0,T6,E4A4 ;V0=8005E4A4 -//7000182C: loop for remaining -24630004 ADDIU V1,V1,0004 -A464FFFC *SH A0,FFFC (V1) -1462FFFD BNE V1,V0,7000182C -A464FFFE *SH A0,FFFE (V1) ;0100->tbl+2 -//70001854: set 7F- TLB allocation and context conversion -3C088002 *LUI T0,8002 -8D08417C *LW T0,417C (T0) ;T0=8002417C: video.buf1 -3C012000 *LUI AT,2000 -01014025 *OR T0,T0,AT -01014026 *XOR T0,T0,AT ;T0= (T0|20000000)^20000000: should get rid of any weirdness here -3C01000B *LUI AT,000B -3421F000 *ORI AT,AT,F000 -01014023 *SUBU T0,T0,AT ;video.buf1 - BF000: offset to beginning of TLB region -ADC8E4A8 *SW T0,E4A8 (T6) ;T8->8005E4A8: 802F6000, or p->end of free memory and start of TLB block -3C087FC6 *LUI T0,7FC6 -25085BF0 *ADDIU T0,T0,5BF0 ;T0=8005DBF0 - 3F8000: 7FC65BF0 -03E00008 JR RA -ADC8E4A4 *SW T0,E4A4 (T6) ;8005E4A4 = 7FC65BF0: conversion for Context - - -Best bet to read direct from register Oh, and since hardcoded anyway, hardcode it harder! -70003060 3C60 -3C068002 LUI A2,8002 -24C73244 *ADDIU A3,A2,3244 ;A3=80023244: legal screen image entries -3C048006 LUI A0,8006 -8CC9417C *LW T1,417C (A2) ;T0=8002417C: video.buf1 -3C012000 *LUI AT,2000 -01214825 *OR T1,T1,AT -01214826 *XOR T1,T1,AT ;T0= (T0|20000000)^20000000: should get rid of any weirdness here -240E0001 ADDIU T6,R0,0001 -A48E0878 *SH T6,0878 (A0) ;0001-> 80060878 -ACC732A4 *SW A3,32A4 (A2) ;T8->800232A4: save p->image entry to video1 -ACE90028 *SW T1,0028 (A3) ;entry+28 = p->data -3C010002 *LUI AT,0002 -24215800 *ADDIU AT,AT,5800 ;T7*=25800: size of video buffer * entry# (1) -01214821 ADDU T1,T1,AT ;T8=video.buf1 + size -24E7002C *ADDIU A3,A3,002C ;T6=80023244+offset: p->legal screen image entry 1 (2C each entry) -ACC732A8 *SW A3,32A8 (A2) ;T6->800232A8: save p->video2.settings -ACE90028 SW T1,0028 (A3) ;entry+28 = p->data -ACC0329C SW R0,329C (A2) ;0->8002329C: -03E00008 JR RA -ACC032A0 SW R0,32A0 (A2) ;0->800232A0: - - -70003124 initializes both video buffers; probably just grab the two pointers and use the initializer routine - While we're at it, rewrite to use the 70017C40 memset routine -70003124 3D24 initialize both video buffers -AFBFFFFC SW RA,FFFC (SP) -0FC348E0 JAL 7F0D2380 ;0->8004EB00: -27BDFFE8 ADDIU SP,SP,FFE8 -3C058000 *LUI A1,8000 -8CA40318 *LW A0,0318 (A1) -00852025 *OR A0,A0,A1 -3C050004 *LUI A1,0004 -34A5B000 *ORI A1,A1,B000 ;A3=4B000 -//70003150: initialize both video buffers in one shot -0C005F10 *JAL 70017C40 -00852023 *SUBU A0,A0,A1 -//70003180: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -70003298 two instances, sort of inbetween -//700039EC: -3C018002 LUI AT,8002 -AC3932C0 *SW T9,32C0 (AT) -55600007 *BNEL T3,R0,70003A14 -8D020028 *LW V0,0028 (T0) ;V0= -//700039FC: -3C048002 *LUI A0,8002 -0C000127 *JAL 7000049C ;V0= cached address A0 -8C84417C *LW A0,417C (A0) ;T6=803B5000: videobufferroot - *NOP - *NOP - *NOP -// -3C0F8005 *LUI T7,8005 -8DEFEAB0 *LW T7,EAB0 (T7) ;T7=8004EAB0: -ADE20058 *SW V0,0058 (T7) -//70003A20: -... -//70003AB4: -3C048002 *LUI A0,8002 -0C000127 *JAL 7000049C ;V0= cached address A0 -8C84417C *LW A0,417C (A0) ;T6=803B5000: videobufferroot -3C038006 *LUI V1,8006 -90780879 *LBU T8,0879 (V1) - SLL T7,T8,0x2 - ADDU T7,T7,T8 - SLL T7,T7,0x2 - SUBU T7,T7,T8 - SLL T7,T7,0x2 - SUBU T7,T7,T8 - LUI T8,8002 - LW T8,32A8 (T8) ;T8=p->video2.settings - SLL T7,T7,0xB ;T7= T8*25800: offset to buffer T8 -01E2C821 *ADDU T9,T7,V0 - SW T9,0028 (T8) ;p->buffer -> video2.settings+28: video2.buf - - -do these like the 16bit counterparts: grab 800232A8, then +28 from pointer -700048D4 imgcap: 32bit jpeg; not very important -//7000496C: -3C058002 LUI A1,8002 -8CA5417C LW A1,417C (A1) ;A1= video1.buf - -70004BB4 imgcap: 32bit rgba; not very important -//70004C4C: -3C058002 LUI A1,8002 -8CA5417C LW A1,417C (A1) ;A1= video1.buf - -This relies on each buffer being 25800, and each running straight from the end of rdram. -Also, the JAL will address-extend this, so wee! It all works out. -Interlink 70005984 and change JALs to 700059A4 to 5984 -70005984 6584 700059A4 65A4 set pointers to video buffers 1 & 2 -3C048000 LUI A0,8000 -8C840318 LW A0,0318 (A0) ;A0=size of ram -3C020002 LUI V0,0002 -24425800 ADDIU V0,V0,5800 ;V0=25800 -00822823 SUBU A1,A0,V0 -00A22023 SUBU A0,A1,V0 -3C02A000 LUI V0,A000 -00827025 OR T6,A0,V0 ;T6=A0000000 | A0: uncached address -3C018002 LUI AT,8002 -AC2E417C SW T6,417C (AT) ;A0->8002417C: video buffer 1 base -00A27825 OR T7,A1,V0 ;T7=A0000000 | A1: uncached address -03E00008 JR RA -AC2F4180 SW T7,4180 (AT) ;A1->80024180: video buffer 2 base - - - -in order of occurance: -700059A4 -700017E0 maybe set banks off of 8002417C? (need to mask off the address root) -70003060 -700009F8 will repeatedly trigger underneath these -70003124 -70003AC0 will trigger during runtime - - -decompressor, past the intro (which doesn't matter) is embedded (and a different one...) - -as far as usage: -400000 -0 max -3DA800 -25800 25800 video2.buf -3B5000 -4B000 25800 video1.buf -3B4950 -4B6B0 6B0 unused? -3B3950 -4C6B0 1000 SP.70001F7C -3AB950 -546B0 8000 SP.main -3AB750 -548B0 200 SP.70000D00 -3AB710 -548F0 40 SP.Null -3AB410 -54BF0 300 SP.Indi -3AA000 -55000 1400 free...unaligned and neglected by TLB assignment -2F6000 -10A000 E000 TLB - -800236DC has a table with hardcoded SP pointers. Need to either change or destroy its user. - -+_+ - -so, never displays anything o.0 - -No wonder. It'd be a shame if they USED THE REGISTERS THEY CREATED AND STORED! -hits on 803E - 4F180 - 4F1F0 - BBB2C - BBBD0 - -hits on 803B: - 4F1B8 - BBB88 - - -7F086F9C BBACC sets player settings when running game -just absorb these: -//7F086FCC: BBAFC -0C000F07 *JAL 70003C1C -00000000 *NOP -3C012000 *LUI AT,2000 -00411025 *OR V0,V0,AT -3C038003 LUI V1,8003 -8C616430 *LW AT,6430 (V1) -10200013 *BEQ AT,R0,7F087034 -28210004 *SLTI AT,AT,0004 -1420000D BNE AT,R0,7F087024 -8C6E6428 *LW T6,6428 (V1) -55C0000C BEQL T6,R0,7F087028 -8C796430 *LW T9,6430 (V1) -//7F086FF4: -00000000 *NOP -00000000 NOP -3C0F8002 *LUI T7,8002 -8DEF4180 *LW T7,4180 (T7) -3C038003 LUI V1,8003 -144F0004 BNE V0,T7,7F087024 -24180001 ADDIU T8,R0,0001 -AC78642C *SW T8,642C (V1) -1000001A BEQ R0,R0,7F087088 -AC606430 *SW R0,6430 (V1) -//7F087024: -8C796430 *LW T9,6430 (V1) -27390001 *ADDIU T9,T9,0001 -10000016 BEQ R0,R0,7F087088 -AC796430 *SW T9,6430 (V1) -//7F087034: -3C038003 LUI V1,8003 -8C616434 *LW AT,6434 (V1) -10200012 BEQ AT,R0,7F087088 -00000000 *NOP -28210004 SLTI AT,AT,0004 -5420000D BNEL AT,R0,7F087080 -8C6A6434 *LW T2,6434 (V1) -//7F087050: -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -3C098002 *LUI T1,8002 -8D29417C *LW T1,417C (T1) -14490004 *BNE V0,T1,7F08707C -3C038003 *LUI V1,8003 -AC60642C *SW R0,642C (V1) -10000004 BEQ R0,R0,7F087088 -AC606434 *SW R0,6434 (V1) -//7F08707C: -8C6A6434 *LW T2,6434 (V1) -254B0001 ADDIU T3,T2,0001 -AC6B6434 *SW T3,6434 (V1) -//7F087088: need one more line! -00000000 *NOP -00000000 *NOP -00000000 *NOP -8C6C642C *LW T4,642C (V1) -11800007 -BEQ T4,R0,7F0870B8 -00000000 *NOP -3C098002 *LUI T1,8002 -8D29417C *LW T1,417C (T1) -14490003 *BNE V0,T1,7F0870B8 -00000000 *NOP -0C000F0F JAL 70003C3C -8C646428 *LW A0,6428 (V1) -//7F0870B8: - -Rewrite entire menu handler -7F01A61C 4F14C menu update, initialization, and interface handler -AFBFFFFC *SW RA,FFFC (SP) -0C000F07 -JAL 70003C1C ;V0=p->video2.buf -27BDFFE4 *ADDIU SP,SP,FFE4 -3C012000 *LUI AT,2000 -00411025 *OR V0,V0,AT ;just make the value an uncached one for direct comparison -3C088003 *LUI T0,8003 -8D0FA944 *LW T7,A944 (T0) ;T7=8002A944: -8D0DA948 *LW T5,A948 (T0) ;T5=8002A948: True if emulating Spectrum -8D0EA8C0 *LW T6,A8C0 (T0) ;T6=8002A8C0: menu.cur -3C0A8002 *LUI T2,8002 -24010017 ADDIU AT,R0,0017 -15C1000E BNE T6,AT,7F01A684 ;skip if not menu 17: switch menus -8D584180 *LW T8,4180 (T2) ;upper buffer -//7F01A650: -11E00006 BEQ T7,R0,7F01A66C -00000000 *NOP -1458000A BNE V0,T8,7F01A684 -24010001 *ADDIU AT,R0,0001 -AD01A940 *SW AT,A940 (T0) ;1->8002A940: 440x330 -10000007 BEQ R0,R0,7F01A684 -AD00A944 *SW R0,A944 (T0) ;0->8002A944: -//7F01A66C: -11A00005 *BEQ T5,R0,7F01A684 ;branch if not Spectrum -8D49417C *LW T1,417C (T2) ;lower buffer -14490003 *BNE V0,T1,7F01A684 -00000000 *NOP -AD00A940 *SW R0,A940 (T0) ;0->8002A940: 320x240 -AD00A948 *SW R0,A948 (T0) ;0->8002A948: reset Spectrum emulating flag -//7F01A684: -AFB00014 *SW S0,0014 (SP) -8D10A940 *LW S0,A940 (T0) ;T2=8002A940: screen size -12000005 *BEQ S0,R0,7F01A6D8 -001080C0 *SLL S0,S0,0x3 ;S0->offset -14580003 *BNE V0,T8,7F01A6D8 -3C048003 LUI A0,8003 -0C000F0F JAL 70003C3C ;A0->video2.buf -8C84A954 LW A0,A954 (A0) ;A0=8002A954: -//7F01A6D8: 4F1D4 Should rewrite the rest of the code and eliminate all those TLB pointers and redirected redirects. -// if zero, use 80051B48/140/F0; else use 80051B44/1B8/14A; both floats are 3FAAAAAB... -3C017F02 LUI AT,7F02 -00308021 ADDU S0,AT,S0 -0C001164 JAL 70004590 -C60CA820 LWC1 F12,A820 (S0) ;F12=80051B44: 3FAAAAAB -9604A824 LHU A0,A824 (S0) ;A0=txtClipW -0C0010FE JAL 700043F8 ;set video2 text clip width (A0) and height (A1) -9605A826 LHU A1,A826 (S0) ;A1=txtClipH -9604A824 LHU A0,A824 (S0) -0C0010ED JAL 700043B4 -9605A826 LHU A1,A826 (S0) -9604A824 LHU A0,A824 (S0) -0FC26C77 JAL 7F09B1DC ;set cur.player screen width (A0) and height (A1) -9605A826 LHU A1,A826 (S0) -9604A824 LHU A0,A824 (S0) -0C00110F JAL 7000443C ;set video2 width (A0) and height (A1) -9605A826 LHU A1,A826 (S0) -00002025 OR A0,R0,R0 -0FC26C7E JAL 7F09B1F8 ;set cur.player viewport width (A0) and height (A1) -00002825 OR A1,R0,R0 -00002025 OR A0,R0,R0 ;ulx = 0 -0C00112F JAL 700044BC ;set video2 ulx (A0) and uly (A1) -00002825 OR A1,R0,R0 ;uly = 0 -//7F01A784: 4F22C -3C048003 LUI A0,8003 -8C82A8C4 LW V0,A8C4 (A0) ;V0=8002A8C4: menu.update -04410002 BGEZ V0,7F01A7A8 ;branch if set -8C82A8C8 LW V0,A8C8 (A0) ;T4=8002A8C8: -04400011 BLTZ V0,7F01AA80 ;skip if not set -//7F01A7A8: run on menu update -8C82A8C0 LW V0,A8C0 (A0) ;V1=8002A8C0: menu.cur -24010017 ADDIU AT,R0,0017 -1022000E BEQ AT,V0,7F01AA80 ;branch if menu 17: update (does not update menu.cur) -2C41001A SLTIU AT,V0,001A -10200006 BEQ AT,R0,7F01AA70 ;skip if out of range -00021080 SLL V0,V0,0x2 -3C017F02 LUI AT,7F02 -00220821 ADDU AT,AT,V0 -8C21A830 LW AT,A830 (AT) ;T9=80051C1C+offset: menu interface handler -0020F809 JALR RA,AT -00000000 NOP -//7F01AA70: -3C048003 LUI A0,8003 -8C82A8C4 LW V0,A8C4 (A0) ;V0=8002A8C4: -04400003 BLTZ V0,7F01AA80 -240F0017 ADDIU T7,R0,0017 -0FC02ABB JAL 7F00AAEC ;0->menu timer -AC8FA8C0 SW T7,A8C0 (A0) ;17->8002A8C0: menu.cur = switch screens -//7F01AA80: run initializer -3C048003 LUI A0,8003 -2484A8C0 ADDIU A0,A0,A8C0 -8C820008 LW V0,0008 (A0) -0440000B BLTZ V0,7F01ACB8 -240FFFFF ADDIU T7,R0,FFFF -AC820000 SW V0,0000 (A0) -AC8F0008 SW T7,0008 (A0) -2C41001A SLTIU AT,V0,001A -10200006 BEQ AT,R0,7F01ACB8 -00021080 SLL V0,V0,0x2 -3C017F02 LUI AT,7F02 -00220821 ADDU AT,AT,V0 -8C21A898 LW AT,A898 (AT) ;T9=80051C1C+offset: menu interface handler -0020F809 JALR RA,AT -00000000 NOP -//7F01ACB8: run interface -3C048003 LUI A0,8003 -2484A8C0 ADDIU A0,A0,A8C0 ;can't remember if any of these use the value... -8C820000 LW V0,0000 (A0) -2401000B ADDIU AT,R0,000B -14220014 BNE AT,V0,7F01ACCC -2C41001A SLTIU AT,V0,001A -//7F01AE6C: menu 0B interface -0FC2FF29 JAL 7F0BFCA4 -00000000 NOP -5440000D BNEL V0,R0,7F01AED4 ;gameplay returns True if replaying ramrom -00002025 OR A0,R0,R0 ;A0=menu 00: legal screen -//7F01AE90: if multiplayer return to MP options screen -3C098003 LUI T1,8003 -8D28A8F0 LW T0,A8F0 (T1) ;T0=8002A8F0: mode -24010001 ADDIU AT,R0,0001 -51010008 BEQL T0,AT,7F01AED4 ;branch if not multiplayer mode (1) -2404000E ADDIU A0,R0,000E ;A0=menu 0E: multiplayer options -//7F01AEB4: test following with end cutscene or mission status -8D29A8F4 LW T1,A8F4 (T1) ;T1=8002A8F4: stage# -24010036 ADDIU AT,R0,0036 -55210004 BNEL T1,AT,7F01AED4 ;branch if not Cuba (36) -2404000C ADDIU A0,R0,000C ;A0=menu 0C: mission failed -//7F01AEC8: end cutscene gets the extended casting call -0FC0619C JAL 7F018670 ;if A0 TRUE, play extended actor intro [8002B5FC] and do not play intro movie [8002B5E8] -24040001 ADDIU A0,R0,0001 ;A0= True -24040018 ADDIU A0,R0,0018 ;A0=menu 18: casting call -//7F01AED4: change menu -0FC06975 JAL 7F01A5D4 ;set to menu A0 in mode A1 -24050001 ADDIU A1,R0,0001 ;A1= on return -00000825 OR AT,R0,R0 ;this just tricks out the skip test right below -//7F01ACCC: -10200006 BEQ AT,R0,7F01AEEC -00021080 SLL V0,V0,0x2 -3C017F02 LUI AT,7F02 -00220821 ADDU AT,AT,V0 -8C21A900 LW AT,A900 (AT) ;T9=80051C1C+offset: menu interface handler -0020F809 JALR RA,AT -00000000 NOP -//7F01AEEC: return -8FB00014 LW S0,0014 (SP) -8FBF0018 LW RA,0018 (SP) -03E00008 JR RA -27BD001C ADDIU SP,SP,001C - -7F01A820 4F350 screen size tables -3FAAAAAB 0140 00F0 3FAAAAAB 01B8 014A - -7F01A830 4F360 update functions -7F00A6B0 7F00ACA4 7F00B0A4 7F00B190 -7F00B304 7F00BAE0 7F00B0A4 7F00B0A4 -7F00B0A4 7F00B0A4 7F015640 7F00B0A4 -7F00B0A4 7F00B0A4 7F00B0A4 7F00B0A4 -7F00B0A4 7F00B0A4 7F00B0A4 7F00B0A4 -7F00B0A4 7F017BF4 7F00B0A4 7F00B0A4 -7F018F18 7F00B0A4 - -7F01A898 4F3C8 initialization functions -7F00A5E8 7F00ABC8 7F00B064 7F00B154 -7F00B258 7F00B9E8 7F00D250 7F00DE50 -7F00E780 7F00F300 7F0155F4 7F016064 -7F016094 7F01667C 7F01073C 7F011C3C -7F012E30 7F013574 7F013D78 7F014764 -7F014CC0 7F017B50 7F018438 7F00B0A4 -7F01869C 7F01A39C - -7F01A900 4F430 interface functions -7F00A6DC 7F00ACC8 7F00B0AC 7F00B1B0 -7F00B330 7F00BBCC 7F00D298 7F00DEB8 -7F00E7C0 7F00F374 7F01569C 7F00B0A4 -7F016110 7F0166D8 7F010848 7F011ED4 -7F012EC4 7F013608 7F013DD4 7F0147B8 -7F014D48 7F017C88 7F018448 7F00AB00 -7F018F60 7F01A488 - -7F01A968 4F498 -Blank until 7F01AEFC (4FA2C) - -+_+ - -Following need investigation: use 70009720 -355DC 7F000AAC 35690 7F000B60 - allocate and load animation tables -357A0 7F000C70 35850 7F000D20 - allocate introduction matrices -35850 7F000D20 35970 7F000E40 - initialize menus or reset; allocate stdout & stderr -359E8 7F000EB8 35A80 7F000F50 - allocate and intialize GUARDdata entries -35B8C 7F00105C 35D88 7F001258 - allocate false GUARDdata to execute global actions -36100 7F0015D0 36280 7F001750 ? allocate lookup buffers -37788 7F002C58 3794C 7F002E1C - expand 0D object - autoturrets -39C00 7F0050D0 39F80 7F005450 - initialize current player's BONDdata and statistics -3A070 7F005540 3A154 7F005624 -3A154 7F005624 3A240 7F005710 -3A2F4 7F0057C4 3AD20 7F0061F0 - intro block handler -3AD8C 7F00625C 3ADF0 7F0062C0 - allocate and initialize inventory -3B8C0 7F006D90 3BCB0 7F007180 ? allocate explosion, smoke, casings, scorch, and impact buffers -3BCB0 7F007180 3BDC0 7F007290 -3BE50 7F007320 3BEE0 7F0073B0 * set -mt texture allocation -7507C 7F04054C 75228 7F0406F8 - initialize standard object A0 -88120 7F0535F0 882E8 7F0537B8 - initialize door A0 -A0BC4 7F06C094 A0D64 7F06C234 -A0D6C 7F06C23C A0EE4 7F06C3B4 -CEFEC 7F09A4BC CFC3C 7F09B10C initialize player A0's BONDdata -D0350 7F09B820 D05F4 7F09BAC4 -E16DC 7F0ACBAC E18C8 7F0ACD98 - allocate and initialize font tables -E8C54 7F0B4124 E9310 7F0B47E0 -F193C 7F0BCE0C F1B10 7F0BCFE0 loads ROM index# A0 into memory bank A3 -F1FBC 7F0BD48C F21A4 7F0BD674 * set mgfx and mvtx allocations -F2438 7F0BD908 F24B4 7F0BD984 load japanese font DLs to bank 6 -F36B8 7F0BEB88 F4330 7F0BF800 run MP game, its scoring and time - involves selected cheat options -F621C 7F0C16EC F6470 7F0C1940 initialize text bank and load the global text -100AE0 7F0CBFB0 100FEC 7F0CC4BC loads and sets up global image bank -10490C 7F0CFDDC 104948 7F0CFE18 -106EB0 7F0D2380 106F78 7F0D2448 -107AF4 7F0D2FC4 107EA4 7F0D3374 - -+_+ - -This will set stage vertex and graphics memory to twice the normal allocation. -Also, changing behaviour. The values at 800482E0/F0 should be defaults when one isn't found. No writting will occur. -Store #players and memsize conversion to stack from start. #players only called for defaults. -Being conservative. A proportional increase isn't necessary; 6MB is the lower limit for a memory expansion, and since most of the large buffers are static you can get away with having double here. -Proportional would be: V0=0, add (-m << 8) to V0 for #MBs. - -7F0BD48C F1FBC set mgfx and mvtx allocations -27BDFFDC ADDIU SP,SP,FFDC -AFBF0014 SW RA,0014 (SP) -AFB00018 SW S0,0018 (SP) -00008025 OR S0,R0,R0 -//7F0BD49C: retrieve allocation size -0FC2F541 JAL 7F0BD504 ;custom subroutine to calculate allocations -02002025 OR A0,S0,R0 -AFA2001C SW V0,001C (SP) ;V0= allocation size -//7F0BD4A8: allocate 2 mgfx buffers to bank 4 -00022040 SLL A0,V0,0x1 -0C0025C8 JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -24050004 ADDIU A1,R0,0004 ;A1= bank 4 -3C018009 LUI AT,8009 -00101900 SLL V1,S0,0x4 -00230821 ADDU AT,AT,V1 -AC22C230 SW V0,C230 (AT) ;V0->8008C230+offset: p->mgfx[0] -//7F0BD4C4: set rest of mgfx pointers -8FA3001C LW V1,001C (SP) ;V1= allocation size -00431021 ADDU V0,V0,V1 -AC22C234 SW V0,C234 (AT) ;p->mgfx[1] -00431021 ADDU V0,V0,V1 -AC22C238 SW V0,C238 (AT) ;p->mgfx end -//7F0BD4D8: loop -5200FFF0 BEQL S0,R0,7F0BD49C -26100001 ADDIU S0,S0,0001 -//7F0BD4E0: finish up -3C018009 LUI AT,8009 -A020C250 SB R0,C250 (AT) ;8008C250= 0 -AC20C254 SW R0,C254 (AT) ;8008C254= 0 -8C2AC240 LW T2,C240 (AT) ;T2=8004C240: p->mvtx[0] -AC2AC24C SW T2,C24C (AT) ;8008C24C=8004C240: p->mvtx[0] -//7F0BD4F4: return -8FB00018 LW S0,0018 (SP) -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0024 ADDIU SP,SP,0024 - -This needs rewriting as well. -//700062FC: determine -ma allocation - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -//70006330: allocates "-ma" bytes to mem bank 4 -0FC2F541 *JAL 7F0BD504 ;V0=allocation size -24040002 *ADDIU A0,R0,0002 ;A0=2: "-ma" -3C058002 *LUI A1,8002 -ACA241B0 *SW V0,41B0 (A1) -00402025 *OR A0,V0,R0 -0C0025C8 JAL 70009720 ;V0=p->A0 bytes of memory allocated in bank A1 -24050004 ADDIU A1,R0,0004 ;A1=bank 4 -3C058002 LUI A1,8002 -8CA541B0 LW A1,41B0 (A1) ;A1=800241B0: size -0C002766 JAL 70009D98 ;reset memtable with base allocation -00402025 OR A0,V0,R0 ;A0=V0: p->allocation -//7000635C: reset player data - -Alter mt routine to ignore register and use the generic routine. -Actual allocation will be a little larger than before. -7F007320 3BE50 set -mt allocation -27BDFFE4 ADDIU SP,SP,FFE4 -AFBF0014 SW RA,0014 (SP) -3C018009 LUI AT,8009 -AC20D090 SW R0,D090 (AT) -0FC2F541 *JAL 7F0BD504 ;V0=allocation size -24040003 *ADDIU A0,R0,0003 ;A0=3: "-mt" -//7F007344: -AFA20018 SW V0,0018 (SP) -00402025 OR A0,V0,R0 -0C0025C8 JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -24050004 ADDIU A1,R0,0004 ;A1= bank 4 -3C048009 LUI A0,8009 -8FA60018 LW A2,0018 (SP) ;A2=80089170: size -2484C720 ADDIU A0,A0,C720 ;A0= 8008C720 -0FC32EBD JAL 7F0CBAF4 ;set start and end of block to A0 -00402825 OR A1,V0,R0 ;A1=V0: p->data -//7F007398: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD001C ADDIU SP,SP,001C - - -Subroutine to do most of this for you -7F0BD504 F2034 V0=computed allocation size for registered memory string A0 - accepts: A0=index (0:-mgfx, 1:-mvtx, 2:-ma, 3:-mt) -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF0014 SW RA,0014 (SP) -00041080 SLL V0,A0,0x2 -00441023 SUBU V0,V0,A0 -00021080 SLL V0,V0,0x2 -0FC26919 JAL 7F09A464 ;V0= # players -AFA20018 SW V0,0018 (SP) ;save offset to entry -3C017F0C LUI AT,7F0C -8FA30018 LW V1,0018 (SP) -00230821 ADDU AT,AT,V1 -10400003 BEQ V0,R0,+3 -00021040 SLL V0,V0,0x1 -00221021 ADDU V0,AT,V0 -9442D592 LHU V0,D592 (V0) ;40, 60, 80,or A0 -AFA20018 SW V0,0018 (SP) ;V0= 800482E0+offset: base for default mgfx allocations, +0x10 for mvtx -//7F0BD538: search for mgfx token -8C25D590 LW A1,D590 (AT) ;A1=p->string -0C0029A8 JAL 7000A6A0 ;V0= p->A0th instance of token A1 -24040001 ADDIU A0,R0,0001 ;A0= 1st instance -50400005 BEQL V0,R0,7F0BD4E0 ;if not found, use the default -8FA20018 LW V0,0018 (SP) -//7F0BD54C: grab value if found -00402025 OR A0,V0,R0 ;A0=V0: p->value -00002825 OR A1,R0,R0 ;A1=NULL -0C002A78 JAL 7000A9E0 ;V0=strtol(A0,A1,A2) -00003025 OR A2,R0,R0 ;A2=auto -//7F0BD55C: proportionally increase -00021A00 SLL V1,V0,0x8 ;V0= value * 0x100 -00001025 OR V0,R0,R0 -3C018000 LUI AT,8000 -90210319 LBU AT,0319 (AT) -00010902 SRL AT,AT,0x4 ;#MBs -2421FFFF ADDIU AT,AT,FFFF -0423FFFE BGEZL AT,-1 -00431021 ADDU V0,V0,V1 -//7F0BD57C: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 - -7F0BD588 F20B8 entries -0x0 4 p->text -0x4 2 1pl size (40) -0x6 2 2pl size (60) -0x8 2 3pl size (80) -0xA 2 4pl size (A0) - - -+_+ - -With extra memory can now enable doubles in multiplayer! -//7F005110: allocate a right item buffer - LUI A0,8003 - LW A0,245C (A0) ;A0=8003245C: [14820] - JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 - ADDIU A1,R0,0004 ;A1= bank 4 - LUI S0,8008 - ADDIU S0,S0,A0B0 - LW T1,0000 (S0) ;T1=cur.BONDdata - JAL 7F09A464 ;V0= # players - SW V0,0808 (T1) ;V0->BONDdata+808: right weapon buffer - ADDIU AT,R0,0001 -14410006 BNE V0,AT,7F005154 ;skip if multiplayer -//7F00513C: allocate a left item buffer - -+_+ - - 7F- TLB - Now, there's a maximum of 48 entries (0x30), and at least two are hardwired. However, room for 0x5A entries 0x2000 each are allocated and the table supports the whole region. - So... - An 8MB patch could just allocate and load enough for everything. 0x6A before Spectrum, 0x72 w/ Spectrum, 0x80 for whole region. - If there were only 0x2D entries available then this would provide swap room for the whole table. As far as I know though it just direct replaces. - Nuts to this. Just test it and see if it works with 0x4000 blocks. 1<demo -JAL 7F01D440 ;A0->stage, set solo, get p->briefing -LW A0,0010 (T9) ;A0=demo+10: stage# - -//7F0BFBC4: F25B4 -LW T1,0000 (T8) ;T9=p->demo -JAL 7F01D440 ;A0->stage, set solo, get p->briefing -LW A0,0010 (T1) ;A0=demo+10: stage# - -7F01D440 4FE30 A0->stage, set solo, get p->briefing - accepts: A0=stage# -LUI AT,8002 -ADDIU SP,SP,FFE8 -SW R0,5E40 (AT) ;0->80025E40: mode=0 solo -SW RA,0014 (SP) -LUI AT,8002 -JAL 7F00DBD0 ;V0=briefing for solo stage A0 -SW A0,5E44 (AT) ;A0->80025E44: stage# -LW RA,0014 (SP) -LUI AT,8002 -SW V0,5E48 (AT) ;V0->80025E48: p->briefing -JR RA -ADDIU SP,SP,0018 - -Hack! -7F01D440 4FE30 A0->stage, set solo, get p->briefing - accepts: A0=stage#, (A1=mode#) -00002825 *OR A1,R0,R0 --------- ADDIU SP,SP,FFE8 -3C018002 *LUI AT,8002 --------- SW RA,0014 (SP) -AC255E40 *SW A1,5E40 (AT) --------- JAL 7F00DBD0 ;V0=briefing for solo stage A0 --------- SW A0,5E44 (AT) ;A0->80025E44: stage# - -7F0BFC9C F268C replay ramrom file at hardware address A0 -//7F0BFCF0: F26E0 -8C450084 *LW A1,0084 (V0) //A1=demo+84: mode -0FC07511 *JAL 7F01D444 //set stage A0, mode A1, p->briefing data -8C440010 *LW A0,0010 (V0) //A0=demo+10: stage # - -//7F0BFBC4: F25B4 -8D050084 *LW A1,0084 (T0) ;T1=80048468: p->demo block -0FC07511 *JAL 7F01D444 ;A0->stage, set solo, get p->briefing -8D040010 *LW A0,0010 (T0) ;A0=demo+10: stage# - -[+_+] - -Part 2: recording support - -hardware request occurances -F1B6C -F1B98 -F1C48 -F1C94 -F1CA8 -F2558 -F2724 -Hack! -7000503C 5C3C handles hardware read request -AFBFFFFC *SW RA,FFFC (SP) -0C0013EC -JAL 70004FB0 -27BDFFE8 -ADDIU SP,SP,FFE8 -04420004 *BLTZL V0,70005C58 -8FBF0014 *LW RA,0014 (SP) -0C001404 -JAL 70005010 -00000000 -NOP -8FBF0014 -LW RA,0014 (SP) -03E00008 JR RA -27BD0018 -ADDIU SP,SP,0018 - -70005128 5D28 handles hardware write request -AFBFFFFC *SW RA,FFFC (SP) -0C001432 -JAL 700050C8 -27BDFFE8 -ADDIU SP,SP,FFE8 -04420004 *BLTZL V0,70005144 -8FBF0014 *LW RA,0014 (SP) -0C001404 -JAL 70005010 -00000000 -NOP -8FBF0014 -LW RA,0014 (SP) -03E00008 JR RA -27BD0018 -ADDIU SP,SP,0018 - - -70004FB0 5BB0 reads A2 bytes from hardware A1 to rdram A0 - ADDIU SP,SP,FFD8 - SW RA,0024 (SP) -//70004FB8: test and redirect -0C001444 *JAL 70005110 ;V0=FALSE if ROM address -AFA40010 *SW A0,0010 (SP) ;SP+10=A0: p->rdram -10400005 *BEQ V0,R0,+cache -AFA5002C SW A1,002C (SP) ;SP+2C=A1: p->hardware -0C004C20 *JAL 70013080 ;memcpy(A0,A1,A2) -00000000 *NOP -1000000C *BEQ R0,R0,return ;heck, even have a couple extra lines! -2402FFFF *ADDIU V0,R0,FFFF -//70004FD8: CACHE target -AFA60014 *SW A2,0014 (SP) ;SP+30=A2: size -0C0040D4 JAL 70010350 ;cache A1 bytes at A0 -00C02825 OR A1,A2,R0 ;A1=A2: size -//70004FE4: send PI read request -00003025 OR A2,R0,R0 ;A2=0 -//70004FE8: -3C048005 -LUI A0,8005 -249868D0 *ADDIU T8,A0,38D0 ;T8=800568D0 -248468B0 ADDIU A0,A0,38B0 ;A0=800568B0 -AFB80018 SW T8,0018 (SP) ;SP+18= 800636F0 -00002825 OR A1,R0,R0 ;A1=0 -0C003BB4 JAL 7000EED0 -8FA7002C LW A3,002C (SP) ;A3=p->hardware -//70005004: return -8FBF0024 LW RA,0024 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -700050C8 5CC8 writes A2 bytes from rdram A0 to hardware A1 - ADDIU SP,SP,FFD8 - SW RA,0024 (SP) -//700050D0: test and redirect -0C001444 *JAL 70005110 ;V0=FALSE if ROM address -AFA40010 *SW A0,0010 (SP) ;SP+28=A0: p->rdram -10400006 *BEQ V0,R0,+cache -AFA5002C SW A1,002C (SP) ;SP+2C=A1: p->hardware -00802825 *OR A1,A0,R0 ;A1=p->source: p->rdram -0C004C20 *JAL 70013080 ;memcpy(A0,A1,A2) -8FA4002C *LW A0,002C (SP) ;A0=p->target -08001401 *J 70005004 ;sloppy end, I know... -2402FFFF *ADDIU V0,R0,FFFF -//700050F4: CACHE target -AFA60014 *SW A2,0014 (SP) ;SP+30=A2: size -0C004100 JAL 70010400 ;cache -00C02825 OR A1,A2,R0 ;A1=A2: size -//70005100: send PI write request -080013FA *J 70004FE8 -24060001 ADDIU A2,R0,0001 ;A2=1 -00000000 *NOP -00000000 *NOP - -70005110 5D10 V0=TRUE if A1 not ROM address; fries AT -3C017000 LUI AT,7000 -00A1082B SLTU AT,A1,AT ;TRUE if addy < 70000000 -3C02B000 LUI V0,B000 -00A2102B SLTU V0,A1,V0 ;TRUE if addy < B0000000 -03E00008 JR RA -00411026 XOR V0,V0,AT ;TRUE if normal addy, false if ROM or weird - -[+_+] - -Part 3: interface - -Recording occurs when 80041108 = 1 -Recording ceases when 80041104 = 0 - -Requires three interface hacks. -1) L + R (c = set#) on MP options -2) L + R (c = set#) on objectives -3) c-up + c-down in gameplay - -Activation is silly but effective. Hold L+R to activate, and use c-button combinations to set the set number. -L + R is set 0, L + R + c-right is set 1, L + R + c-left is set 2, L + R + c-right + c-left is set 3, etc. -Pass the result to 7F0BFC3C - -7F00D198 3FB88 menu 06 interface: mode select screen -7F00E6F0 410E0 menu 08 interface: mission objectives -7F010738 43128 menu 0E interface: multiplayer options -7F081A18 B4408 player motion and view interface - -0C002C48 JAL 7000B120 ;V0=pressed A1 -0C002C20 JAL 7000B080 ;V0=held A1 - -need to inject something like this... 9 lines -00002025 OR A0,R0,R0 -0C002C20 JAL 7000B080 ;V0=buttons held -3405003F ORI A1,R0,003F -38440030 XORI A0,V0,0030 ;A0=set# or something invalid -2C810010 SLTIU AT,A0,0010 ;TRUE only if L+R held -10200003 BEQ AT,R0,+3 -00000000 NOP -0FC2FF0F JAL 7F0BFC3C ;record ramrom, set A0 -00000000 NOP - -pure C up+down -00002025 OR A0,R0,R0 -0C002C20 JAL 7000B080 ;V0=buttons held -3405000C ORI A1,R0,000C -3841000C XORI AT,V0,000C ;A0=0 if pressed -10200003 BEQ AT,R0,+3 -00000000 NOP -0FC2FF15 JAL 7F0BFC54 ;stop recording -00000000 NOP - -menu 08 interface -7F00E6F0 410E0 menu 08 interface: mission objectives -//7F00E93C: 4132C test for tab 2 selected: "NEXT" -00002025 OR A0,R0,R0 -0C002C20 JAL 7000B080 ;V0=buttons held -3405003F ORI A1,R0,003F -38440030 XORI A0,V0,0030 ;A0=set# or something invalid -2C810010 SLTIU AT,A0,0010 ;TRUE only if L+R held -10200003 BEQ AT,R0,+3 -00000000 NOP -0FC2FF0F JAL 7F0BFC3C ;record ramrom, set A0 -00000000 NOP -// -0FC026A1 JAL 7F009A84 ;control stick tracking -00000000 NOP -3C0D8002 -LUI T5,8005 -8DAB5E24 *LW T3,A8D4 (T5) ;T3=8002A8D4: TRUE if tab 2 selected -1160000B -BEQ T3,R0,7F00EA70 ;branch if tab 2 not selected -8DAC5E4C *LW T4,A8FC (T5) ;T4=8002A8FC: difficulty -24010003 -ADDIU AT,R0,0003 -24040009 -ADDIU A0,R0,0009 ;A0=9: 007 options page -55810001 *BNEL T4,AT,+1 ;branch if difficulty not 3: not 007 -2404000A -ADDIU A0,R0,000A ;A0=A: mission objectives page -0FC0690E JAL 7F01A438 ;set menu A0 to mode A1 -00002825 OR A1,R0,R0 ;A1=0: immediate -0FC028BC JAL 7F00A2F0 ;set cursor position to tab 2 -00000000 NOP -10000011 BEQ R0,R0,7F00EAB0 -8FBF0014 LW RA,0014 (SP) -//7F00EA70: advance to mission objectives page - - -menu 0E interface -//7F0107F0: 431E0 -0C002C20 JAL 7000B080 ;test if buttons held -3405A000 ORI A1,R0,A000 ;A1=A000: A, Z button -1440007A BNEZ V0,7F010AF4 ;branch if something held -00002025 *OR A0,R0,R0 -0C002C20 JAL 7000B080 ;test if buttons held -3405003F *ORI A1,R0,003F ;A1=003F: L, R, C buttons -38440030 *XORI A0,V0,0030 ;A0=set# or something invalid -2C810010 *SLTIU AT,A0,0010 ;TRUE only if L+R held -50200004 *BEQL AT,R0,+4 -3C018002 -LUI AT,8002 -0FC2FF0F *JAL 7F0BFC3C ;record ramrom, set A0 -00000000 *NOP -3C018002 -LUI AT,8002 -AC205E34 -SW R0,5E34 (AT) ;0->80025E34: tab 3 highlight -AC205E30 -SW R0,5E30 (AT) ;0->80025E30: tab 2 highlight -AC205E2C -SW R0,5E2C (AT) ;0->80025E2C: tab 1 highlight -3C018006 -LUI AT,8006 -AC208710 -SW R0,8710 (AT) ;0->80058710: highlight stage -AC208718 SW R0,8718 (AT) ;0->80058718: highlight character -AC208714 -SW R0,8714 (AT) ;0->80058714: highlight length -AC20871C SW R0,871C (AT) ;0->8005871C: highlight weapon -AC208720 SW R0,8720 (AT) ;0->80058720: highlight handicap -AC20870C -SW R0,870C (AT) ;0->8005870C: highlight scenario -AC208724 SW R0,8724 (AT) ;0->80058724: highlight control style -AC208708 -SW R0,8708 (AT) ;0->80058708: highlight players -0FC028A7 JAL 7F00A29C ;V0=1 if cursor on tab 3 -AC208728 SW R0,8728 (AT) ;0->80058728: highlight aim - -7F081A18 B4408 player motion and view interface -//7F081BB4: B45A4 test if gameplay stopped, etc. -//7F081C00: B45F0 figure out control type and set masks -97AD01CA LHU T5,01CA (SP) ;T5=SP+1CA: controller 1 cur. -31A1000C *ANDI AT,T5,000C ;AT= c-up | c-down -3821000C *XORI AT,AT,000C ;FALSE if c-up + c-down -14200003 *BNEZ AT,+3 -AFAD005C -SW T5,005C (SP) ;SP+5C= controller 1 button cur. input -0FC2FF15 *JAL 7F0BFC54 ;stop recording -00000000 *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -0FC29038 JAL 7F0A4DC0 ;V0= cur.player's control type [BONDdata+2A58] -00000000 NOP -2C410004 *SLTIU AT,V0,0004 ;TRUE if single controller types -142001C3 *BNE AT,R0,7F0822B8 ;branch if not type 4: 2.1 -00000000 NOP diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/Ramrom Demos/getting it to record sessions.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/Ramrom Demos/getting it to record sessions.txt deleted file mode 100644 index 007e1a1..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/Ramrom Demos/getting it to record sessions.txt +++ /dev/null @@ -1,290 +0,0 @@ -Look at things that read 8008C5F4 for root export address -70005D08 calls write data to hardware... - 7F0BFCD8 F4808 !finalize ramrom! - 7F0BFD48 F4878 !finalize ramrom! - 7F0C0048 F4B78 !on packet write! - 7F0C06F4 F5224 !initialize at stage start! - -70005C44 aligns and calls read data from hardware... - 7F0BFD00 F4830 !finalize ramrom! - 7F0BFE3C F496C !load ramrom! - 7F0C0280 F4DB0 iterate ramrom entries generic - 7F0C02D0 F4E00 iterate ramrom entries generic - 7F0C083C F536C replay from hardware generic - - -7F0D001C called by load ramrom: name, source, @instance? -7F0D005C called by save ramrom: name, source, -7F0D0098 called by both: name, @instance? - -So really, could tell 70005D08 to detect if a DMA or PI request is called for and pipe accordingly -Or, could be a real bugger and set all these to 70013850, which is memcpy(A0,A1,A2) - To do this, would need to set target as A0, source as A1, size A2 -Best would be to hack handlers to take either argument... - -+_+ - -7F0BFCD8 F4808 !finalize ramrom! -7F0BFD00 F4830 !finalize ramrom! -7F0BFD48 F4878 !finalize ramrom! - -7F0BFCB0 F47E0 -//7F0BFCE0: read in what's already written to devtool -LUI V0,8009 -ADDIU V0,V0,C5F4 -LW T8,0000 (V0) ;T8=8008C5F4: ramrom hardware addy -LUI A0,8009 -ADDIU A0,A0,C270 ;A0=8008C270: ramrom target address -ADDIU T9,T8,0004 ;T9=T8+4: next word... -SW T9,0000 (V0) -LUI A1,00F0 ;A1=0xF00000: hardware address -JAL 70005C44 ;align and read A2 bytes of data from hardware A1 to A0 -ADDIU A2,R0,00F0 ;A2=0xF0: size -//7F0BFD08: set total size and time to ramrom and write to devtool -LUI V1,8005 -ADDIU V1,V1,8468 ;V1=80048468 -SW V0,0000 (V1) ;V0->80048468: return address->demo block -LUI T0,8005 -LUI T1,8005 -LW T1,8374 (T1) ;T1=80048374: 1 if not paused -LW T0,837C (T0) ;T0=8004837C: ms time in stage -LUI T4,8009 -LUI A1,00F0 ;A1=0xF00000: devtool hardware address -SUBU T2,T0,T1 ;T2=timer-clock -SW T2,007C (V0) ;T2->demo+7C: total time -LW T4,C5F4 (T4) ;T4=8008C5F4: ramrom hardware addy -LW T6,0000 (V1) ;T6=V1+0: p->ramrom -ADDIU A2,R0,00F0 ;A2=0xF0: size -SUBU T5,T4,A1 ;T5=current address - base address: size -SW T5,0080 (T6) ;size->ramrom+80: actual size of ramrom data -JAL 70005D08 ;copy A2 bytes from rdram A0 to hardware A1 -LW A0,0000 (V1) ;A0=p->ramrom -//7F0BFD50: -LW RA,0014 (SP) -ADDIU SP,SP,0048 -JR RA -NOP - -+_+ - -Other route: -70005D08 6908 handles hardware write request - accepts: A0=p->rdram source, A1=p->hardware, A2=size -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70005CA8 -NOP -JAL 70005BF0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70005C1C 681C handles hardware read request - accepts: A0=p->rdram, A1=p->hardware, A2=size -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 70005B90 -NOP -JAL 70005BF0 ;might test if transfer worked or something -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -Best solution is to hack these to detect 70 - C0 addresses, then memcpy() instead -7000E8B0 returns > 0 when a valid pointer used, but would fail if a B0-extended ROM address used. - Could always test if < B0000000, then again for the price of a JAL could also test < 70000000... - - -There's no room to really simplify. Nesting subcomponents within write function, which accesses read via psychotic breakdown -This relies heavily on jumpless CACHE routines, and hopefully nothing will overwrite my SP+10-1C... - -70005B90 6790 read A2 bytes from hardware A1 to rdram A0 - reduced. PI write accesses these subcomponents -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0024 SW RA,0024 (SP) -//70005B98: test and redirect -0C00173C *JAL test ;V0=FALSE if ROM address -AFA40010 *SW A0,0010 (SP) ;SP+10=A0: p->rdram -10400005 *BEQ V0,R0,+cache -AFA5002C SW A1,002C (SP) ;SP+2C=A1: p->hardware -0C004E14 *JAL 70013850 ;memcpy(A0,A1,A2) -00000000 *NOP -1000000C *BEQ R0,R0,70005BE4 ;heck, even have a couple extra lines! -2402FFFF *ADDIU V0,R0,FFFF -//70005BB8: CACHE target -AFA60014 *SW A2,0014 (SP) ;SP+30=A2: size -0C0042C8 JAL 70010B20 ;cache A1 bytes at A0 -00C02825 OR A1,A2,R0 ;A1=A2: size -//70005BC4: send PI read request -00003025 OR A2,R0,R0 ;A2=0 -//70005BC8: joint function -3C048006 -LUI A0,8006 -249836F0 *ADDIU T8,A0,36F0 ;T8=800636F0 -248436D0 ADDIU A0,A0,36D0 ;A0=800636D0 -AFB80018 SW T8,0018 (SP) ;SP+18= 800636F0 -00002825 OR A1,R0,R0 ;A1=0 -0C003DA8 JAL 7000F6A0 ;send PI request -8FA7002C LW A3,002C (SP) ;A3=p->hardware -//70005BE4: return -8FBF0024 LW RA,0024 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -70005CA8 68A8 writes A2 bytes of data from A0 to hardware address A1 - simplified, same stipulation. I feel dirty writing this... -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0024 SW RA,0024 (SP) -//70005CB0: test and redirect -0C00173C *JAL test ;V0=FALSE if ROM address -AFA40010 *SW A0,0010 (SP) ;SP+28=A0: p->rdram -10400006 *BEQ V0,R0,+cache -AFA5002C SW A1,002C (SP) ;SP+2C=A1: p->hardware -00802825 *OR A1,A0,R0 ;A1=p->source: p->rdram -0C004E14 *JAL 70013850 ;memcpy(A0,A1,A2) -8FA4002C *LW A0,002C (SP) ;A0=p->target -080016F9 *J 70005BE4 ;sloppy end, I know... -2402FFFF *ADDIU V0,R0,FFFF -//70005CD4: CACHE target -AFA60014 *SW A2,0014 (SP) ;SP+30=A2: size -0C0042F4 JAL 70010BD0 ;cache A1 bytes at A0 -00C02825 OR A1,A2,R0 ;A1=A2: size -//70005CE0: send PI write request -080016F2 *J 70005BC8 -24060001 ADDIU A2,R0,0001 ;A2=1 - *NOP - *NOP -70005CF0 68F0 V0=TRUE if A1 not ROM address; fries AT -3C017000 LUI AT,7000 -00A1082B SLTU AT,A1,AT ;TRUE if addy < 70000000 -3C02B000 LUI V0,B000 -00A2102B SLTU V0,A1,V0 ;TRUE if addy < B0000000 -03E00008 JR RA -00411026 XOR V0,V0,AT ;TRUE if normal addy, false if ROM or weird - -seems to work on its own... -Now to change every instance of 00F00000 to 80400000... -7F0BFCFC F482C finalize ramrom on hardware -7F0BFD28 F4858 "" -7F0BFDD8 F4908 save ramrom to devtool -7F0BFE24 F4954 load ramrom from devtool -7F0BFE38 F4968 "" -7F0C06E8 F5218 record current stage -7F0C08B4 F53E4 replay ramrom on devtool - -These also use devtool ranges: -7000A5CC B1CC FFB000 command line options - -Also, to prevent permaloops due to lack of real devtools -7F0BFDB2 F48E2 0000 no actual branch - -Ah crap! When using the happy copy thing, 7000DDD0's SP is getting fried! -70005CA8'S call to 70005BF0 call to 7000DDD0, wihtin 700107AC -What it amounts to is that 70005BF0 does not like when you directly copy memory! Should skip somehow... -Okay, catch if 7000F6A0 didn't return 0 within its callers, then set -1 as normal return for direct copy. Wow this is going to suck... -70005D08 6908 handles hardware write request - accepts: A0=p->rdram source, A1=p->hardware, A2=size -AFBFFFFC *SW RA,FFFC (SP) -0C00172A JAL 70005CA8 -27BDFFE8 ADDIU SP,SP,FFE8 -04420004 *BLTZL V0,70005C38 -8FBF0014 *LW RA,0014 (SP) -0C0016FC JAL 70005BF0 -00000000 NOP -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -70005C1C 681C handles hardware read request - accepts: A0=p->rdram, A1=p->hardware, A2=size -AFBFFFFC *SW RA,FFFC (SP) -0C0016E4 JAL 70005B90 -27BDFFE8 ADDIU SP,SP,FFE8 -04420004 *BLTZL V0,70005C38 -8FBF0014 *LW RA,0014 (SP) -0C0016FC JAL 70005BF0 ;might test if transfer worked or something -00000000 NOP -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -+_+ - -Not good enough we can record sessions. Now need to record MP! -F5278 7F0C0748 record or replay at stage start -F53A4 7F0C0874 replay recorded movie at hardware address A0 - -Make alternate entry point for this guy... -Use alternate entry to manually set A1 -7F01D5EC 5211C set stage A0, opt. mode A1, briefing for ramrom replay - accepts: A0=stage#, (opt.)A1=mode - fries AT,V0,V1,(A1),T6,T7,T8 -00002825 *OR A1,R0,R0 - ADDIU SP,SP,FFE8 -3C018003 -LUI AT,8003 - SW RA,0014 (SP) -AC25A8F0 *SW A1,A8F0 (AT) ;0->8002A8F0: mode=solo - JAL 7F00DCC0 ;V0=briefing for solo stage A0 - SW A0,A8F4 (AT) ;A0->8002A8F4: A0->selected stage - LW RA,0014 (SP) - LUI AT,8003 ;not necessary. AT doesn't change - SW V0,A8F8 (AT) ;V0->8002A8F8: selected mission briefing page - JR RA - ADDIU SP,SP,0018 - -now rig 'em up to use it! -7F0C081C: main replay routine, called for actual intro movies and also above - normal usage is from 7F0C0970 - accepts: A0=hardware address - LUI V1,8009 - ADDIU V1,V1,C5F4 //V1=8008C5F4 gets the address for the demo loaded - SW A0,0000 (V1) //A0->address for loaded demo - SW RA,0014 (SP) - LUI A0,8009 - ADDIU A0,A0,C270 //A0=8008C270: target? - LW A1,0000 (V1) //A1=hardware address - JAL 70005C44 - ADDIU A2,R0,00E8 //A2=0xE8 size - LUI V1,8009 - ADDIU V1,V1,C5F4 //V1=8008C5F4 - LW T6,0000 (V1) //T6<-8008C5F4: p->loaded demo - LUI A1,8005 - ADDIU A1,A1,8468 //A1=80048468 location the file is loaded to - ADDIU T7,T6,00E8 //T7=T6+0xE8 T7=next memfile - SW V0,0000 (A1) //V0->80048468: p->demo block - SW T7,0000 (V1) //T7->8008C5F4: p->loaded demo - ADDIU T8,R0,0001 //T8=1 - LUI AT,8005 - SW T8,847C (AT) //T8->8004847C: demo running? -//7F0C0870: F53A0 -8C450084 *LW A1,0084 (V0) //A1=demo+84: mode -0FC0757C *JAL 7F01D5F0 //set stage A0, mode A1, p->briefing data -8C440010 *LW A0,0010 (V0) //A0=demo+10: stage # - LUI T0,8005 - LW T0,8468 (T0) //T0<-80048468 T0=address of file - JAL 7F01D59C //A0-> difficulty - LW A0,0014 (T0) //A0=difficulty - ADDIU A0,R0,000B //A0=0xB menu mode (stage active) - JAL 7F01A5D4 ;set menu A0 to mode A1 - ADDIU A1,R0,0001 //A1=1 - LW RA,0014 (SP) - ADDIU SP,SP,0018 - JR RA - NOP - -...and now the other handler... -//7F0C0728: run demo - LUI S0,8005 - LUI AT,8009 - ADDIU S0,S0,8468 ;S0=80048468 - SW R0,C5F8 (AT) - LW T0,0000 (S0) ;T0=80048468: p->demo block - JAL 7F01D59C ;A0->difficulty; fries AT,V0(difficulty) - LW A0,0014 (T0) ;A0=demo+14: difficulty -//7F0C0744: F5274 -8D050084 *LW A1,0084 (T0) ;T1=80048468: p->demo block -0FC0757C *JAL 7F01D5F0 ;A0->stage, set solo, get p->briefing -8D040010 *LW A0,0010 (T0) ;A0=demo+10: stage# diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/TLB manipulation.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/TLB manipulation.txt deleted file mode 100644 index 07b1e63..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Gameplay and Misc/TLB manipulation.txt +++ /dev/null @@ -1,227 +0,0 @@ - Now, to make it more efficient would probably be best to do actual management. - Incrementing entries would be handy but would be most efficient when managing. - Last two longs in table aren't used, so could make a counter that increments +10 every call and decrements all else. - Then, replace entry with lowest value (least occurance). - - -700017E0 23E0 establishes 7F- TLB buffer and management table - LUI V1,8006 - LUI V0,8006 - ADDIU V0,V0,E3F0 ;V0=8005E3F0 - ADDIU V1,V1,DBF0 ;V1=8005DBF0 - ADDIU A0,R0,0001 -//700017F4: initialize the 8005DBF0 - 8005E3F0 table - ADDIU V1,V1,0010 - SLTU AT,V1,V0 - SW A0,FFF0 (V1) ;1->tbl+0 - BNE AT,R0,700017F4 - SW R0,FFF4 (V1) ;0->tbl+4 -//70001808: fill range 8005E3F0 - 8005E4A4 with 0100 - LUI AT,8006 - LUI V1,8006 - LUI V0,8006 - ADDIU V0,V0,E4A4 ;V0=8005E4A4 - ADDIU V1,V1,E3F4 ;V1=8005E3F4 - SB R0,E3F1 (AT) - SB A0,E3F0 (AT) ;0100->8005E3F0 - SB R0,E3F3 (AT) - SB A0,E3F2 (AT) ;0100->8005E3F2 -//7000182C: loop for remaining - ADDIU V1,V1,0008 - SB R0,FFFB (V1) - SB A0,FFFA (V1) ;0100->tbl+2 - SB R0,FFFD (V1) - SB A0,FFFC (V1) ;0100->tbl+4 - SB R0,FFFF (V1) - SB A0,FFFE (V1) ;0100->tbl+6 - SB R0,FFF9 (V1) - BNE V1,V0,7000182C - SB A0,FFF8 (V1) ;0100->tbl+0 -//70001854: set 7F- TLB allocation and context conversion - LUI T6,803B - ADDIU T6,T6,B400 ;T6=803AB400: end of this block - ADDIU AT,R0,E000 - AND T7,T6,AT ;T7=803AB400 & ~1FFF: 803AA000 - LUI AT,FFF4 - ORI AT,AT,C000 - ADDU T8,T7,AT ;T8=803AA000 - B4000: size of bank (0x5A entries) - LUI AT,8006 - SW T8,E4A8 (AT) ;T8->8005E4A8: 802F6000, or p->end of free memory and start of TLB block - LUI AT,FFC0 - LUI T9,8006 - ADDIU T9,T9,DBF0 - ORI AT,AT,8000 - ADDU T0,T9,AT ;T0=8005DBF0 - 3F8000: 7FC65BF0 - LUI AT,8006 - JR RA - SW T0,E4A4 (AT) ;8005E4A4 = 7FC65BF0: conversion for Context - -70001954 2554 remove index A0 TLB entry from table at 8005E3F0 - accepts: A0=TLB entry index - table format: - 0x0 1 if dirty - 0x1 chunk # (7F000000 | chunk<8005DBF0+offset: invalidate - SB V0,0000 (V1) ;set dirty -//700019C8: return - LW RA,0014 (SP) - ADDIU SP,SP,0020 - JR RA - NOP - -700019D8 25D8 translates and loads ROM based on TLB address - accepts: A0=TLB address - LUI V0,8002 - ADDIU V0,V0,30D0 ;V0=800230D0 - LW T6,0000 (V0) ;T6=800230D0: # TLB page entries? - LUI AT,7FFF - ADDIU SP,SP,FFB0 - ORI AT,AT,E000 ;AT=7FFFE000: address mask for TLB address (0x2000 pages) - SW RA,001C (SP) - AND A0,A0,AT ;A0&=7FFFE000: TLB address & mask - ADDIU T7,T6,0001 ;T7=T6+1 - SW S0,0018 (SP) - SW T7,0000 (V0) ;count at 800230D0++ - JAL 70001920 ;find and remove TLB entry A0 - SW A0,0028 (SP) ;SP+28=A0: TLB address mask - JAL 70001B10 ;V0= random value for TLB random entries - NOP -//70001A14: - ADDIU AT,R0,005A ;AT=0x5A - DIVU V0,AT - MFHI A0 ;A0=V0/0x5A - LUI V1,8002 - ADDIU V1,V1,30D4 ;V1=800230D4 - SW A0,0000 (V1) ;A0->800230D4: segment# (0x2000 block #) - JAL 70001954 ;remove index A0 TLB entry from table at 8005E3F0 - OR S0,A0,R0 ;S0=A0 -//70001A34: - LW V0,0028 (SP) ;V0=SP+28: TLB address mask - LUI T9,8006 - LW T9,E4A8 (T9) ;T9=8005E4A8: p->TLB space (after free mem) - LUI AT,00FF - ORI AT,AT,E000 ;AT=FFE000: ROM address mask - SLL T0,S0,0xD ;T0=S0 * 0x2000: offset to memory - LUI T2,0003 - AND T1,V0,AT ;T1=V0 & FFE000: range - 7F-extension - ADDIU T2,T2,4B30 ;T2=0x34B30: start of TLB ROM range - ADDU A0,T9,T0 ;A0=p->memory + offset to block - SW A0,0034 (SP) ;SP+34=rdram target - ADDU A1,T1,T2 ;A1=offset + ROM address - OR V0,T1,R0 ;V0=offset - SW T1,0024 (SP) ;SP+24=offset - JAL 70005C1C ;loads A2 bytes from hardware A1 to A0 - ADDIU A2,R0,2000 ;A2=0x2000: size -//70001A74: - LUI A0,4000 ;A0=40000000 - JAL 7000D350 ;invalidate Cache for A1 bytes at A0 - LUI A1,4000 ;A1=40000000 - LUI A0,8000 ;A0=80000000 - JAL 7000D350 ;invalidate Cache for A1 bytes at A0 - LUI A1,1000 ;A1=10000000 -//70001A8C: - LW A1,0024 (SP) ;A1=SP+24: offset - LUI T5,8006 - ADDIU T5,T5,DBF0 ;T5=8005DBF0: table indicating loaded TLB blocks - SRL T3,A1,0xD ;T3=offset/0x2000: block# - SLL T4,T3,0x4 ;T4=block# *0x10: - ADDU A2,T4,T5 ;A2=address of block's index - SW S0,0004 (A2) ;S0->block index+4: offset to memory - SW A2,0020 (SP) ;SP+20=A2: address of block's index - SW T3,0028 (SP) ;SP+28=T3: block# - JAL 7000E8B0 ;V0=rdram offset derived from pointer A0 - LW A0,0034 (SP) ;A0=SP+34: rdram target -//70001AB8: - LW RA,001C (SP) - SRL T6,V0,0xC ;T6=V0/0x1000 - SLL T9,S0,0x1 ;T9=S0*2: offset to memory * 2 - LUI T0,8006 - LW A1,0028 (SP) ;A1=SP+28: block# - LW A2,0020 (SP) ;A2=SP+20: address of block's index - SLL T7,T6,0x6 ;T7=4(V0/0x100) - ADDIU T0,T0,E3F0 ;T0=8005E3F0 - ORI T8,T7,001F ;T8=4(V0/0x100) | 0x1F - ADDU V1,T9,T0 ;V1=8005E3F0 + offset to memory * 2 - LW S0,0018 (SP) ;S0=SP+18: offset to memory - SB R0,0000 (V1) ;0-> 8005E3F0 + offset to memory * 2 - ADDIU SP,SP,0050 - SB A1,0001 (V1) ;block# -> 8005E3F1 + offset to memory * 2 - JR RA - SW T8,0000 (A2) ;4(V0/0x100) | 0x1F -> address of block's index - -70001AF8 26F8 V0=p->TLB memory, or alternately end of free memory - LUI V0,8006 - JR RA - LW V0,E4A8 (V0) ;V0=8005E4A8: p->TLB allocated block - -70001B10 2710 V0= random value for TLB random entries - LUI A0,8002 - LD A0,30E0 (A0) ;A0=800230E0: TLB random seed - LUI AT,8002 - DSLL32 A2,A0,0x1F - DSLL A1,A0,0x1F - DSRL A2,A2,0x1F - DSRL32 A1,A1,0x0 - DSLL32 A0,A0,0xC - OR A2,A2,A1 - DSRL32 A0,A0,0x0 - XOR A2,A2,A0 - DSRL A0,A2,0x14 - ANDI A0,A0,0FFF - XOR A0,A0,A2 - DSLL32 V0,A0,0x0 - SD A0,30E0 (AT) ;update TLB random - JR RA - DSRA32 V0,V0,0x0 - -70001B60 2760 resolves TLB address on InvalidHit, writting random entry; copied to 80000000 - MTC0 R0,PageMask ;PageMask = 0: 1KB - NOP - MFC0 K0,Context ;K0= Context, which if <<9 = Vaddr base - LUI K1,8006 - ADDIU K1,K1,E4A4 - LW K1,0000 (K1) ;K1=8005E4A4: Context conversion factor [7FC65BF0] - ADDU K0,K0,K1 - LW K1,0000 (K0) ;K1= Context + conversion: 8005DBF0-8005E3F0 - MTC0 K1,EntryLo0 - NOP - ADDIU K1,K1,0040 ;K1+=40: next page (+1000) - MTC0 K1,EntryLo1 - NOP - TLBWR - NOP - NOP - NOP - NOP - ERET - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/image hit correction.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/image hit correction.txt deleted file mode 100644 index 32b0feb..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/image hit correction.txt +++ /dev/null @@ -1,45 +0,0 @@ -floor in Complex: -in non-compacted table -@ 8004A6B0 276 0x9A41C6 - -on image hit call: -7F03B7B8: 702E8 recover random impact sound -SLL T4,T3,0x3 //image ID (T3) *8 -LUI T5,8005 -ADDU T5,T5,T4 -LBU T5,9300 (T5) //first byte of image call value -//7F03B7C8: -LUI S0,8005 -ANDI T6,T5,000F //second nibble dictates the collision -SLL T7,T6,0x2 //*4=offset -LW S0,E86C (S0) //impact (image?) tables -BEQ S1,R0,7F03B868 -NOP - -gets random value (7000A450), retrieves 0xA from impact table (indicates # images), then divides random by this value. -Cool! I can lift this to make the random weapon select routine! - -7F03B8DC: 7040C -LUI V0,8005 -ADDIU AT,R0,0005 -SLL T6,T5,0x3 -ADDU V0,V0,T6 -LBU V0,9300 (V0) -ANDI T7,V0,000F - - -7F064898: 993C8 recover impact sound -LW T3,0088 (SP) -LUI T5,8005 -BLTZ T3,7F064924 -SLL T6,T3,0x3 //image ID (T3) *8 -ADDU T5,T5,T6 -LW T5,9300 (T5) //full image call value -//7F0648B0 -LUI V0,8005 -SRL T8,T5,0x1C //first nibble of value -SLL T4,T8,0x2 -ADDU V0,V0,T4 -LW V0,E86C (V0) //impact (sound?) table - - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/image list hacking.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/image list hacking.txt deleted file mode 100644 index 7049b1b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/image list hacking.txt +++ /dev/null @@ -1,552 +0,0 @@ -part of the routine: -7F0CBB0C: returns V0=offset to matching image list slot, or NULL if no match found -BNEL A1,R0,7F0CBB20 -LW V0,0004 (A1) //V0=address for next entry in image list -LUI A1,8009 -ADDIU A1,A1,C720 //A1=8008C720 -LW V0,0004 (A1) -//7F0CBB20: -LW V1,000C (A1) //V1=address for start of image list -SLTU AT,V1,V0 //true if not at end of list -BEQL AT,R0,7F0CBB5C - OR V0,R0,R0 //V0=0 -LW T6,0000 (V1) //T6=ID word of facemapper image list -//7F0CBB34: -SRL T7,T6,0x14 //T7=ID alone -BNEL A0,T7,7F0CBB4C //branch if no match - ADDIU V1,V1,0010 //V1+=offset for next entry -JR RA -OR V0,V1,R0 //V0=V1=offset in image list to match -ADDIU V1,V1,0010 -//7F0CBB4C: -SLTU AT,V1,V0 //true if still not finished with list -BNEL AT,R0,7F0CBB34 - LW T6,0000 (V1) //T6=next ID word in image list -OR V0,R0,R0 //V0=0 -//7F0CBB5C: search finished -JR RA -NOP - - -7F0CBC18: handles ID image declarations -ADDIU SP,SP,F008 -SW S0,0020 (SP) //save org. op address -OR S0,A1,R0 //S0=A1=address in stack for obj header data -SW RA,0024 (SP) -BNEZ A1,7F0CBC38 -SW A0,0FF8 (SP) -LUI S0,8009 -ADDIU S0,S0,C720 //S0=8008C720 -//7F0CBC38: valid buffer for data -LW T6,0FF8 (SP) //address in stack for img ID -LUI V0,8009 -ADDIU V0,V0,D094 //V0=8008D094 -LW T7,0000 (T6) //T7=img ID -OR A1,S0,R0 //A1=S0=address in stack for obj header data -ANDI A0,T7,FFFF //A0=img ID-1 -JAL 7F0CBB0C //V0=matching offset in facemapper image list, or NULL -SW A0,0000 (V0) //img ID->8008D094 -BNEZ V0,7F0CBE2C //branch if entry found in list -OR V1,V0,R0 //V1=V0=offset in facemapper image list -ADDIU V1,SP,0067 -SRL T9,V1,0x4 -SLL T0,T9,0x4 -JAL 7000D320 -SW T0,002C (SP) -LW A0,002C (SP) -JAL 70010B20 -ADDIU A1,R0,2000 - -7F0CBC80: 0x1007B0 ROM -LUI T1,8009 -LW T1,D094 (T1) //T1=8008D094=image ID, used as offset -LUI T3,8005 -ADDIU T3,T3,9300 -SLL T2,T1,0x3 //T2=T1*8 -ADDU V0,T2,T3 //V0=address for image data -LW V1,0000 (V0) //V1=data for image -LW A3,0008 (V0) //A3=next entry's data -LUI AT,00FF -ORI AT,AT,FFFF //AT=FFFFFF -AND T4,V1,AT //T4=offset to image -AND T5,A3,AT //T5=offset to next image -SUBU A2,T5,T4 //A2=size of file -ADDIU A2,A2,001F //A2+=1F -ADDIU AT,R0,FFF8 //AT=-8 -LUI T7,008F -ADDIU T7,T7,7DF0 //T7=8F7DF0 [ROM address for start of images] -AND T6,T4,AT //T6=size to nearest DWORD -SRL T8,A2,0x4 -SLL A2,T8,0x4 //A2=size of file to nearest QWORD -ADDU A1,T6,T7 //A1=ROM addy of img -SW T4,003C (SP) //save img offset -JAL 70005C1C -LW A0,002C (SP) //A0=unused data to load image to - -- - -7F0CBD88: creates entry in the main facemapper table -LUI T7,8009 -LW V0,0008 (S0) -LW T7,D094 (T7) //T7=8008D094=image ID -LUI T3,8009 -SH T7,0000 (V0) -LW T8,0008 (S0) -LW T0,000C (S0) -ADDIU T9,T8,0008 -ADDIU T1,T0,FFF0 -SW T9,0008 (S0) -SW T1,000C (SP) -LHU T6,0000 (T1) -LW T4,D094 (T3) //T4=8008D094=image ID -OR V1,T1,R0 -ANDI T7,T6,000F -SLL T5,T4,0x4 //T5*=0x10 -OR T8,T5,T7 -SH T8,0000 (T1) -LW T9,0008 (S0) -BEQ A1,R0,7F0CBDF8 -SW T9,0004 (T1) - -- -7F0CBE2C: -JAL 7000E8B0 -LW A0,0004 (V1) //A0=offset to image data -LW T3,0FF8 (SP) //T3=offset in stack to image list addresses -SW V0,0000 (T3) //1B0B08->offset -LW RA,0024 (SP) -LW S0,0020 (SP) //S0=org. op address -ADDIU SP,SP,0FF8 -JR RA -NOP - - -7F0CBE50: model header parsing -//7F0CBE70: call # images -LH V0,0016 (A0) -//7F0CBE90: handle image declarations -LW T6,0000 (S1) //T6=image ID or address -ADDU A0,S0,S3 -SLTI AT,T6,0BB9 //true if under the maximum number of indexed images - BB9. Used to detect offset types -BEQL AT,R0,7F0CBEB4 - ADDIU S2,S2,0001 -//7F0CBEA4: ID image handler -JAL 7F0CBC18 -OR A1,S5,R0 //A1=S5=buffer for image -LH V0,0016 (S4) -ADDIU S2,S2,0001 -//7F0CBEB4: IDs and offsets -SLT AT,S2,V0 -ADDIU S0,S0,000C -BNEZ AT,7F0CBE90 -ADDIU S1,S1,000C -LW RA,002C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0030 - -7F0CBEE8: -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,001C (SP) //store img ID -JAL 7F0CBC18 -ADDIU A0,SP,001C //A0=address of img ID in stack -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - --7F0CC548: check if BA image attributes need setting. V0=true, false -LUI V1,8009 -ADDIU V1,V1,D140 //V1=8008D140 -LW T6,0000 (V1) //T6=-1 -ADDIU V0,R0,0001 //V0=1 -BNEL A0,T6,7F0CC56C - SW A0,0000 (V1) //save the new attributes onto the image attrib buffer -JR RA -OR V0,R0,R0 //V0=0 -//7F0CC56C: -JR RA -NOP - --part of C0 expansion --7F0CC574: no idea. return TRUE if set to new values - accepts: A0=?value, A1=format, A2=bitdepth, A3=???, SP+10=???, SP+14=???, SP+18=?, SP+1C=?, SP+20=?, SP+24=?, SP+28=? -SLL T6,A0,0x2 //[in this case, A0 set to 7] -SUBU T6,T6,A0 //T6=val*3 -SLL T6,T6,0x2 //T6=val*12 -SUBU T6,T6,A0 //T6=val*11 -LUI T7,8009 -ADDIU T7,T7,D148 //T7=8008D148 -SLL T6,T6,0x2 //T6=val*44 -ADDU V0,T6,T7 //V0=8008D148+offset -LW T8,0000 (V0) //T8=first word there -OR V1,R0,R0 //V1=0 -BEQL T8,R0,7F0CC63C ;branch if NULL -LW T7,0010 (SP) -LW T9,0004 (V0) ;T9=second word -BNEL A1,T9,7F0CC63C ;branch if not same as format -LW T7,0010 (SP) -LW T0,0008 (V0) ;T0=third word -BNEL A2,T0,7F0CC63C ;branch if not same as bitdepth -LW T7,0010 (SP) -LW T1,000C (V0) ;T1=fourth word -LW T2,0010 (SP) ;T2=SP+10 -BNEL A3,T1,7F0CC63C ;branch if not same as A3 -LW T7,0010 (SP) -LW T3,0010 (V0) ;T3=fifth word -LW T4,0014 (SP) ;T4=SP+14 -BNEL T2,T3,7F0CC63C ;branch if not same as SP+10 -LW T7,0010 (SP) -LW T5,0014 (V0) ;T5=sixth word -LW T6,0018 (SP) ;T6=SP+18 -BNEL T4,T5,7F0CC63C ;branch if not same as SP+14 -LW T7,0010 (SP) -LW T7,0018 (V0) ;T7=seventh word -LW T8,001C (SP) ;T8=SP+1C -BNEL T6,T7,7F0CC63C ;branch if not same as SP+18 -LW T7,0010 (SP) -LW T9,001C (V0) ;T9=eigth word -LW T0,0020 (SP) ;T0=SP+20 -BNEL T8,T9,7F0CC63C ;branch if not same as SP+1C -LW T7,0010 (SP) -LW T1,0020 (V0) ;T1=ninth word -LW T2,0024 (SP) ;T2=SP+24 -BNEL T0,T1,7F0CC63C ;branch if not same as SP+20 -LW T7,0010 (SP) -LW T3,0024 (V0) ;T3=tenth word -LW T4,0028 (SP) ;T4=SP+28 -BNEL T2,T3,7F0CC63C ;branch if not same as SP+24 -LW T7,0010 (SP) -LW T5,0028 (V0) ;T5=eleventh word -BEQ T4,T5,7F0CC688 ;return if same as SP+28 -NOP -//7F0CC63C: -LW T8,0014 (SP) //copy values from comparison table to V0's table -LW T9,0018 (SP) -LW T0,001C (SP) -LW T1,0020 (SP) -LW T2,0024 (SP) -LW T3,0028 (SP) -ADDIU T6,R0,0001 //T6=1 -ADDIU V1,R0,0001 //V1=1: return TRUE if set to new values -SW T6,0000 (V0) ;1->V0+ 0: -SW A1,0004 (V0) -SW A2,0008 (V0) -SW A3,000C (V0) -SW T7,0010 (V0) ;8008D148 or SP+10 if -SW T8,0014 (V0) -SW T9,0018 (V0) -SW T0,001C (V0) -SW T1,0020 (V0) -SW T2,0024 (V0) -SW T3,0028 (V0) -//7F0CC688: -JR RA -OR V0,V1,R0 ;TRUE if set values, FALSE otherwise - - --7F0CC714: right off, returns V0=img width -BNEZ A1,7F0CC724 -LBU V1,0008 (A0) //V1=width of img -JR RA -OR V0,V1,R0 //V0=V1=width - - --7F0CC7FC: right off, returns V0=img height -BNEZ A1,7F0CC80C -LBU V1,0009 (A0) //V1=height of image -JR RA -OR V0,V1,R0 //V0=V1=height of image -//7F0CC80C: -LW T6,000C (A0) -LUI V0,8009 -SLL T8,T6,0x2 -... - --7F0CC8E4: returns V0=width/bits in image. -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -LW V1,0008 (A0) //V1=third word of facemapper entry -ANDI T6,V1,0003 //T6=img type (bits) -JAL 7F0CC714 //returns V0=img width -SW T6,001C (SP) -LW V1,001C (SP) //V1=image type -ADDIU AT,R0,0003 //AT=3 -OR A0,V0,R0 //A0=V0=width -BNE V1,AT,7F0CC92C //if type!=32bit, branch -LW RA,0014 (SP) -ADDIU V0,V0,0003 //V0=width+3 -BGEZ V0,7F0CC924 -SRA T7,V0,0x2 -ADDIU AT,V0,0003 -SRA T7,AT,0x2 -//7F0CC924: -BEQ R0,R0,7F0CC98C -OR V0,T7,R0 -//7F0CC92C: test if 16bit... -ADDIU AT,R0,0002 //AT=2 -BNE V1,AT,7F0CC950 //if !=16bit, branch -ADDIU V0,A0,0003 //V0=width+3 -BGEZ V0,7F0CC948 -SRA T8,V0,0x2 -ADDIU AT,V0,0003 -SRA T8,AT,0x2 -//7F0CC948: -BEQ R0,R0,7F0CC98C -OR V0,T8,R0 -//7F0CC950: test if 8bit... -ADDIU AT,R0,0001 //AT=1 -BNE V1,AT,7F0CC978 //if !=8bit, branch -ADDIU V0,A0,000F //V0=width + F -ADDIU V0,A0,0007 //V0=width + 7 -BGEZ V0,7F0CC970 -SRA T9,V0,0x3 //T9=(width+7)/8 -ADDIU AT,V0,0007 -SRA T9,AT,0x3 -//7F0CC970: if image not mirrored or invalid or something -BEQ R0,R0,7F0CC98C -OR V0,T9,R0 //V0=T9 -//7F0CC978: 4bit image... -BGEZ V0,7F0CC988 -SRA T0,V0,0x4 -ADDIU AT,V0,000F -SRA T0,AT,R0 -OR V0,T0,R0 -//7F0CC98C: -JR RA -ADDIU SP,SP,0020 - - --7F0CC994: returns V0=(width/type)*height -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) //A0=matching entry in facemapper img list -JAL 7F0CC7FC //returns V0=img height -SW A1,0024 (SP) //A1=0 -SW V0,001C (SP) //V0=height of image -LW A0,0020 (SP) //A0=matching entry in facemapper img list -JAL 7F0CC8E4 //returns V0=width/bitdepth -LW A1,0024 (SP) //A1=0 -LW T6,001C (SP) //T6=height -LW RA,0014 (SP) -ADDIU SP,SP,0020 -MULTU V0,T6 -MFLO V0 //V0=bits in image (ie. 8bit image, 30x20 = C0) -JR RA -NOP - - --7F0CC9D4: - accepts: A0=p->'facemapper' image entry, A1=p->bitdepth target, A2=p->??? -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S3,0020 (SP) //S3=img ID -SW S2,001C (SP) //S2=matching entry in facemapper img list -SW S1,0018 (SP) //S1=matching entry in facemapper img list -SW S0,0014 (SP) //S0=org. op addy -LW V1,0008 (A0) //V1=third word in facemapper entry (size, type, etc) -LBU V0,000B (A0) //V0=format/type byte -OR S1,A2,R0 //S1=A2=pointer on stack... -ANDI T6,V1,0003 //T6=image type (bits) -SRL T7,V0,0x5 //T7= unknown attrib, like masked with E0 -OR S3,A0,R0 //S3=A0=matching entry in facemapper img list -BEQ T7,R0,7F0CCA14 //skip if attribs not set -OR V1,T6,R0 //V1=T6=image type -BEQ R0,R0,7F0CCA18 -OR S2,T7,R0 //S2=T7=attribs -//7F0CCA14: set 3 to stack if 32bit image -ADDIU S2,R0,0001 //S2=1 (not set to attribs) -ADDIU V0,R0,0003 //V0=3 -BNE V1,V0,7F0CCA2C -SW R0,0000 (S1) //0-> some value on stack (SP+88) -BEQ R0,R0,7F0CCA54 -SW V0,0000 (A1) //3-> some value on stack (SP+8C) -//7F0CCA2C: set 2 on stack if 16bit value -ADDIU V0,R0,0002 //V0=2 -BNE V1,V0,7F0CCA40 -ADDIU AT,R0,0001 //AT=1 -BEQ R0,R0,7F0CCA54 -SW V0,0000 (A1) //2-> some value on stack (SP+8C) -//7F0CCA40: set 1 on stack if 8bit, or 0 if 4bit -BNEL V1,AT,7F0CCA54 - SW V0,0000 (A1) //1-> some value on stack (SP+8C) -BEQ R0,R0,7F0CCA54 -SW V0,0000 (A1) //0-> some value on stack (SP+8C) -SW V0,0000 (A1) -//7F0CCA54: -BLEZ S2,7F0CCA80 //when would this equal 0, much less lower... -OR S0,R0,R0 //S0=0 -//7F0CCA5C: -OR A0,S3,R0 //A0=S3=matching entry in facemapper list -JAL 7F0CC994 //returns V0=(width/type)*height #pixels -OR A1,S0,R0 //A1=S0=0 -//7F0CCA68: -LW T8,0000 (S1) //T8=some value on stack (SP+88). probably 0 -SLL T9,V0,0x2 //T9=#pixels *4 -ADDIU S0,S0,0001 //S0++ (S0=1) -ADDU T0,T8,T9 //T0=#pixels + stack value -BNE S0,S2,7F0CCA5C //loop until S0=attrib value -SW T0,0000 (S1) //set to value on stack (SP+88) -//7F0CCA80: when finished, 8bit 30x20 image sets 0x400 on SP+88... -LW RA,0024 (SP) -LW S0,0014 (SP) //S0=org. op addy -LW S1,0018 (SP) //S1=matching entry in facemapper img list -LW S2,001C (SP) //S2=matching entry in facemapper img list -LW S3,0020 (SP) //S3=img ID -JR RA -ADDIU SP,SP,0028 - --7F0CCA9C: returns nearest exponential of A0, for what its worth (ie. 2^5=20, 2^6=40, etc) -ADDIU A0,A0,FFFF //A0=width-1 -BLEZ A0,7F0CCAC4 //bail if invalid width -OR V1,R0,R0 //V1=0 -ADDIU V0,R0,0008 //V0=8 -SRA T6,A0,0x1 //T6=(width-1)/2 -//7F0CCAB0: -OR A0,T6,R0 //A0=T6=tampered width -BLEZ T6,7F0CCAC4 -ADDIU V1,V1,0001 //V1++ -BNEL V1,V0,7F0CCAB0 //keep testing until all possible widths dealt with (0x80 max) -SRA T6,A0,0x1 //T6=tampered width /2 -//7F0CCAC4: -JR RA -OR V0,V1,R0 //V0=V1= [w30=6] - - --part of C0 expansion -7F0CDE18: -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW A2,0030 (SP) //A2=op masked for 00C00000 -SW A1,002C (SP) //A1=matching entry in facemapper img table -SW A3,0034 (SP) //A3=op masked for 00300000 -JAL 7F0CD078 //expand C0 command. May be 256 paletted image specific -OR A2,R0,R0 //A2=0 -//7F0CDE34: -LW T6,0038 (SP) //T6=img type -OR A0,V0,R0 //A0=V0=cur. op offset, after expanding C0 -LW A1,002C (SP) //A1=matching entry in facemapper img table -LW A2,0030 (SP) //A2=op masked for 00C00000 -LW A3,0034 (SP) //A3=op masked for 00300000 -SW R0,0014 (SP) -SW R0,0018 (SP) -JAL 7F0CD430 //WORKING ON THIS ROUTINE THREAD -SW T6,0010 (SP) //save the image type again -//7F0CDE58: -LW A1,002C (SP) //A1=matching entry in facemapper img table -ADDIU AT,R0,0001 //AT=1 -OR A0,V0,R0 -LBU T7,000C (A1) -LW A2,0030 (SP) -LW A3,0034 (SP) -SRL T8,T7,0x5 -BNE T8,AT,7F0CDE94 -LW T9,0038 (SP) -ADDIU T0,R0,0001 -SW T0,0014 (SP) -SW T9,0010 (SP) -JAL 7F0CD430 -SW R0,0018 (SP) -OR A0,V0,R0 -//7F0CDE94: -LW RA,0024 (SP) -ADDIU SP,SP,0028 -OR V0,A0,R0 -JR RA -NOP - -- - -impact list -7F04EC94: 0x837C4 -LH V0,003A (S0) //V0=img ID -OR T1,R0,R0 -LUI T7,8005 -BGEZ V0,7F04ECB4 -SLL T9,V0,0x3 //T9=ID*8 (offset) -LUI T0,8005 -BEQ R0,R0,7F04ECD0 -LW T0,E86C (T0) -ADDU T7,T7,T9 //T7=offset to img data -LBU T7,9300 (T7) //T7=impact data -LUI T0,8005 -ANDI T3,T7,000F //second nibble of impact -ETC. - --7F000BD0: 0x35700 used to convert from image sizes to file offsets -LUI A0,8005 -ADDIU V0,A0,9300 //V0=80049300 -LW T6,0000 (V0) //T6=size -LUI AT,00FF -ORI AT,AT,FFFF //AT=mask for address -ORI A3,R0,FFFF //A3=EOF (-1) -AND T7,T6,AT //T7=size alone -BEQ A3,T7,7F000C40 //branch @ EOF -OR V1,R0,R0 //initial offset -LUI T8,8005 -ADDIU T8,T8,9300 //T8=80049300 -LW A1,0000 (T8) //A1=size -LUI AT,00FF -ORI AT,AT,FFFF -AND A2,A1,AT //A2=size -//7F000C0C: convert all to offsets. sloppy code, really. This must have been written and rewritten a few times. -LUI AT,00FF -ORI AT,AT,FFFF -AND T9,V1,AT //T9=previous offset -XOR T0,T9,A1 -SLL T1,T0,0x8 -SRL T2,T1,0x8 -XOR T3,T2,A1 //T3=offset for current -LW A1,0008 (V0) //A1=next increment -ADDU V1,V1,A2 //V1=new offset -SW T3,0000 (V0) //copy current offset -AND A2,A1,AT //A2=next size -BNE A3,A2,7F000C0C //loop if not EOF -ADDIU V0,V0,0008 //increment to next offset -//7F000C40: -LW A1,0000 (V0) //A1=EOF -LUI AT,00FF -ORI AT,AT,FFFF //AT=size mask -AND T4,V1,AT //T4=cur offset masked -XOR T5,T4,A1 -SLL T6,T5,0x8 -SRL T7,T6,0x8 -XOR T8,T7,A1 -JR RA -SW T8,0000 (V0) //copy last file offset - -[INCIDENTALLY] -70005D58 calls the img size expansion routine. There are a series of calls in this block, and it may be fun to tamper with them... - ----------------- -USA -1007B8 offset to image data list - LUI T3,8005; ADDIU T3,T3,9300 -1007C0 offset within list - 000950C0 -> 00095080 - SLL T2,T1,0x3 -> SLL T2,T1,0x2 -1007EC ROM address of image list - 3C0F008F; 25EF7DF0 - LUI T7,008F; ADDIU T7,T7,7DF0 - -837D4 offset within list - 0002C8C0 -> 0002C880 - SLL T9,V0,0x3 -> SLL T9,V0,0x2 -35758 offset conversion increment - 8C450008 -> 8C450004 - LW A1,0008 (V0) -> LW A1,0004 (V0) -3576C offset conversion increment - 24420008 -> 24420004 - ADDIU V0,V0,0008 -> ADDIU V0,V0,0004 - --- -To move the *entire* image list! -1007BEC: -3C0F008F LUI T7,008F -25EF7E00 ADDIU T7,T7,7DF0 //T7=8F7DF0 [ROM address for start of images] diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/move that text table.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/move that text table.txt deleted file mode 100644 index 41f3b3a..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/move that text table.txt +++ /dev/null @@ -1,183 +0,0 @@ -can't run over 8007C6F4, but can shift it back so 00xx placeholder is at offset for count -single-region this thing; its easy enough to compile with the text -replaces 21990 TLB pointers with entry values - -800484D0 J_text flag -800484D4 start of lookup table -8007C640 pointers to text table -8007C6F4 J-specific processing - -initialization: load base text entries -//7F0C1820: 0xF6350 load LgunX - LUI S0,8005 -261084D0 *ADDIU S0,S0,84D0 S0=800484D4: start of L_X lookup names - SLL T7,T0,0x2 -0200C021 *ADDU T8,S0,R0 -8F040098 *LW A0,0098 (T8) literal offset in table to p->LgunE - ADDIU A1,R0,0001 - ADDIU A2,R0,0100 - JAL 7F0BCD04 load to permatext bank - ADDIU A3,R0,0006 (memory allocation segment 6 - permatext?) -//7F0C1844: load LtitleX - LW T9,0000 (S2) - LUI S1,8009 -2631C63C *ADDIU S1,S1,C63C accounts for entry 00xx - SLL T1,T9,0x2 -02005021 *ADDU T2,S0,R0 - SW V0,0098 (S1) -8D44009C *LW A0,009C (T2) - ADDIU A1,R0,0001 - ADDIU A2,R0,0100 - JAL 7F0BCD04 - ADDIU A3,R0,0006 -//7F0C1870: load LmpmenuX - LW T3,0000 (S2) - SW V0,009C (S1) - ADDIU A1,R0,0001 - SLL T4,T3,0x2 -02006821 *ADDU T5,S0,R0 -8DA400A0 *LW A0,00A0 (T5) - ADDIU A2,R0,0100 - JAL 7F0BCD04 - ADDIU A3,R0,0006 -//7F0C1894: load LpropobjX - LW T6,0000 (S2) - SW V0,00A0 (S1) - ADDIU A1,R0,0001 - SLL T7,T6,0x2 -0200C021 *ADDU T8,S0,R0 -8F0400A4 *LW A0,00A4 (T8) - ADDIU A2,R0,0100 - JAL 7F0BCD04 - ADDIU A3,R0,0006 -//7F0C18B8: load LmpweaponsX - LW T9,0000 (S2) - SW V0,00A4 (S1) - ADDIU A1,R0,0001 - SLL T1,T9,0x2 -02005021 *ADDU T2,S0,R0 -8D4400A8 *LW A0,00A8 (T2) - ADDIU A2,R0,0100 - JAL 7F0BCD04 - ADDIU A3,R0,0006 -//7F0C18DC: load LoptionsX - LW T3,0000 (S2) - SW V0,00A8 (S1) - ADDIU A1,R0,0001 - SLL T4,T3,0x2 -02006821 *ADDU T5,S0,R0 -8DA400AC *LW A0,00AC (T5) - ADDIU A2,R0,0100 - JAL 7F0BCD04 - ADDIU A3,R0,0006 -//7F0C1900: load LmiscX - LW T6,0000 (S2) - SW V0,00AC (S1) - ADDIU A1,R0,0001 A1=1; probably the 1=permabit - SLL T7,T6,0x2 T6=0, so probably the 1=use L_J flag -0200C021 *ADDU T8,S0,R0 -8F0400B0 *LW A0,00B0 (T8) A0=pointer to L_E string ;T8=800484D4: p->txt string recall table - -+++++++++++++ - -7F0AE98C: 0x converts code to text; 7F0AE9D4 is the two-byte testing - -+++++++++++++ - -7F0C1D08: 0xF6838 load mission text bank - LUI T8,8005 - LW T8,84D0 (T8) J_text flag - ADDIU SP,SP,FFE8 -00047880 *SLL T0,A0,0x2 - SW A0,0018 (SP) - SLL T9,T8,0x2 -01E04021 *ADDU T0,T7,R0 - LUI A0,8005 - SW RA,0014 (SP) - ADDU A0,A0,T0 -8C8484D0 *LW A0,84D0 (A0) - ADDIU A1,R0,0001 - ADDIU A2,R0,0100 - JAL 7F0BCD04 - ADDIU A3,R0,0004 - LW T1,0018 (SP) - LW RA,0014 (SP) - LUI AT,8009 - SLL T2,T1,0x2 - ADDU AT,AT,T2 -AC22C63C *SW V0,C63C (AT) - JR RA - ADDIU SP,SP,0018 - -+++++++++++++ - -7F0C1D64: 0xF6894 load briefing text - LUI T8,8005 - LW T8,84D0 (T8) J_text flag - ADDIU SP,SP,FFE8 -00047880 *SLL T0,A0,0x2 - SW A0,0018 (SP) - SLL T9,T8,0x2 - OR A3,A2,R0 -01E04021 *ADDU T0,T7,R0 - LUI A0,8005 - OR A2,A1,R0 - SW RA,0014 (SP) - SW A1,001C (SP) - ADDU A0,A0,T0 -8C8484D0 *LW A0,84D0 (A0) - JAL 7F0BCD40 - ADDIU A1,R0,0001 - LW T1,0018 (SP) - LW RA,0014 (SP) - LUI AT,8009 - SLL T2,T1,0x2 - ADDU AT,AT,T2 -AC22C63C *SW V0,C63C (AT) - JR RA - ADDIU SP,SP,0018 - -+++++++++++++ - -7F0C1DC4: 0xF68F4 blank a text entry - SLL T6,A0,0x2 - LUI AT,8009 - ADDU AT,AT,T6 - JR RA - *SW R0,C63C (AT) - -0F6907 0001 3C - -+++++++++++++ - -7F0C1DD8: 0xF6908 convert from text ID to table offset - SRA T6,A0,0xA - SLL T7,T6,0x2 - LUI V0,8009 - ADDU V0,V0,T7 - *LW V0,C63C (V0) - ANDI T8,A0,03FF - -0F691B 0001 3C - -------------- - -add entries for all stages! default now bunkerI text -hacks table at 0x3ADD0 in 21990 - -7F0C15E0: 0xF6110 returns the text bank number for a specific stage# -2482FFF7 *ADDIU V0,A0,FFF7 -2C41002E *SLTIU AT,V0,002E -50200001 *BEQL AT,R0,7F0C15F0 -00001025 *OR V0,R0,R0 -3C018006 LUI AT,8006 -00220821 *ADDU AT,AT,V0 -03E00008 *JR RA -9022BB60 *LBU V0,BB60 (AT) - -FREES 0xF6130-0xF6214 - -New: embed table following routine, at 7F0C1600 -1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 22 1E 23 08 02 -24 0D 1D 05 19 0C 1A 0A 0B 03 1C 1F 12 0E 07 06 -09 21 20 10 11 04 16 01 1B 17 0F 13 15 14 25 18 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/special light fixture hack.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/special light fixture hack.txt deleted file mode 100644 index f1f2ebb..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Images text and font/special light fixture hack.txt +++ /dev/null @@ -1,52 +0,0 @@ -Alters the format just a smidge, and hopes that the ROM image bank doesn't go over 0x7FFFFF in size. That would be bad. - -New format: -F0000000 Impact sound. -0F000000 Impact texture set. -00800000 New light fixture flag. -007FFFFF In ROM, binary size. Expanded in-game to ROM offset. - -alter! -7F000BDC 3570C - 3C0100FF -> 3C01007F ;LUI AT,007F: change mask to 7FFFFF -7F000C00 35730 - 3C0100FF -> 3C01007F -7F000C0C 3573C - 3C0100FF -> 3C01007F -7F000C44 35774 - 3C0100FF -> 3C01007F - -7F0CBCA0 1007D0 - 3C0100FF -> 3C01007F - -Also need to mask your ROM offset output -7F000C1C 3574C - 00084A00 -> 00084A40 ;SLL T1,T0,0x9 - 00095202 -> 00095242 ;SRL T2,T1,0x9: saves from catching flag, to ensure XOR doesn't reset it - -+_+ - -Now to read it in. -7F0BB630 F0160 V0=TRUE if light fixture - accepts: A0=texture ID# -00040880 SLL AT,A0,0x2 ;AT=ID*4 -3C028005 LUI V0,8005 -00411021 ADDU V0,V0,AT -90429301 LBU V0,9301 (V0) ;V0=80049301+offset: 80049300 is image table, +1 is byte containing flag -03E00008 JR RA -000211C2 SRL V0,V0,0x7 ;V0/=80: state of flag TRUE or FALSE -(memory available to 7F0BB694) - -+_+ - -set flags for these images: -0C9 28894 -0CB 2889C -0CD 288A4 -0FC 28960 -0FE 28968 -0FF 2896C -100 28970 -1AC 28C20 -3D6 294C8 -567 29B0C diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/MISC.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/MISC.txt deleted file mode 100644 index ff233ed..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/MISC.txt +++ /dev/null @@ -1,1695 +0,0 @@ -Hold start button to boot Japanese - -7000601C: 6C1C main program loop, rewritten -//NEW Japanese trigger -00002025 OR A0,R0,R0 -0C0030EB JAL 7000C3AC -34051000 ORI A1,R0,1000 -24050001 ADDIU A1,R0,0001 -3C048005 LUI A0,8005 -54400001 BNEL V0,R0,+1 -A08584D0 SB A1,84D0 (A0) -//set up game and run it -0C00174C JAL 70005D30 -00000000 NOP -0FC33F77 JAL 7F0CFDDC -00000000 NOP -0C001A8C JAL 70006A30 -00000000 NOP -0C001818 JAL 70006060 -00000000 NOP -1000FFFD BEQ R0,R0,-3 -00000000 NOP - -stupidly, this jumps and loops everything immediately after this code. -Could always loop it, or just set the RA and forget about the jump at all... -Either option clears two lines, unnecessarily. - -set this guy to correct region spacing on watch options menu -E0470: -18600004 BLEZ V1,7F0AB954 -E0610: -58600004 BLEZL V1,7F0ABAF4 - -+_+ - -difficulty display string -7F00EFFC 43B2C %d.\r -7F00F7C4 442F4 \r - -//7F00EF90: 43AC0 rewrite to make space -12200015 *BEQ S1,R0,7F00EFE8 -34049D09 *ORI A0,R0,9D09 -12370013 *BEQ S1,S7,7F00EFE8 -00000000 NOP -123E0011 *BEQ S1,S8,7F00EFE8 -00000000 NOP -1234000F BEQ S1,S4,7F00EFE8 -00000000 NOP -10000018 BEQ R0,R0,7F00F014 -8ECA0000 LW T2,0000 (S6) -//7F00EFB8: 43AE8 blank this out -25642E0A "%d.\r" -... -//7F00EFE8: 43B18 -0FC30776 JAL 7F0C1DD8 -00912021 *ADDU A0,A0,S1 -10000007 BEQ R0,R0,7F00F010 -00409025 OR S2,V0,R0 - -//7F00EFFC: 43B2C -3C057F01 LUI A1,7F01 -24A5EFB8 ADDIU A1,A1,EFB8 ;A1=7F00EFB8: "%d.\r" - -//7F00F7C4: 442F4 get rid of that copy loop as well! -3C0F8005 LUI T7,8005 -25EF0074 ADDIU T7,T7,0074 ;T7=7F00EFBB: "\r" - ADDIU T0,T7,0BB8 - ADDIU T6,SP,0054 - LW AT,0000 (T7) - ADDIU T7,T7,000C - ADDIU T6,T6,000C - SW AT,FFF4 (T6) - LW AT,FFF8 (T7) - SW AT,FFF8 (T6) - LW AT,FFFC (T7) - BNE T7,T0,7F00F7D4 - SW AT,FFFC (T6) - JAL 7F0ACD98 - OR A0,V0,R0 - -rewrite: - *NOP - *NOP -24080BB8 *ADDIU T0,R0,0BB8 -27AE0054 ADDIU T6,SP,0054 -00007825 *OR T7,R0,R0 -//7F00F7E0: -25EF000C ADDIU T7,T7,000C -25CE000C ADDIU T6,T6,000C -ADC0FFF4 SW R0,FFF4 (T6) -ADC0FFF8 SW R0,FFF8 (T6) -15E8FFFB *BNE T7,T0,7F00F7E0 -ADC0FFFC SW R0,FFFC (T6) -3C0F0A00 *LUI T7,0A00 -AFAF0054 *SW T7,0054 (SP) - JAL 7F0ACD98 - OR A0,V0,R0 - - -do same for 007 options -//7F00F9C4: 444F4 -3C057F01 *LUI A1,7F01 - OR S0,V0,R0 - MUL.S F6,F18,F4 -24A5EFC1 *ADDIU A1,A1,EFC1 - -//7F00FBC8: 446F8 -3C057F01 *LUI A1,7F01 - OR S0,V0,R0 - MUL.S F16,F8,F10 -24A5EFC1 *ADDIU A1,A1,EFC1 - -//7F00FDCC: 448FC -3C057F01 *LUI A1,7F01 - OR S0,V0,R0 - MUL.S F6,F18,F4 -24A5EFC1 *ADDIU A1,A1,EFC1 - -//7F00FFC8: 44AF8 -3C057F01 *LUI A1,7F01 - OR S0,V0,R0 - MUL.S F16,F8,F10 -24A5EFC1 *ADDIU A1,A1,EFC1 - -another of those "sets a bit buffer for stuff" snippets -//7F015DA0: 4A8D0 MISSION BRIEFING constructor - screen display -LUI T7,8005 -ADDIU T7,T7,0C54 -ADDIU T0,T7,0BB8 -ADDIU T6,SP,004C -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T7) -SW AT,FFF8 (T6) -LW AT,FFFC (T7) -BNE T7,T0,7F015DB0 -SW AT,FFFC (T6) -JAL 7F0ACD98 -OR A0,V0,R0 -//7F015DDC: - -REWRITE -//7F015DA0: 4A8D0 - *NOP - *NOP -24080BB8 *ADDIU T0,R0,0BB8 - ADDIU T6,SP,004C -00007825 *OR T7,R0,R0 -25EF000C ADDIU T7,T7,000C -25CE000C ADDIU T6,T6,000C -ADC0FFF4 *SW R0,FFF4 (T6) -ADC0FFF8 *SW R0,FFF8 (T6) -15E8FFFB *BNE T7,T0,7F015DB0 -ADC0FFFC *SW R0,FFFC (T6) -3C0F0A00 *LUI T7,0A00 -AFAF004C *SW T7,004C (SP) - -this copies the 'letter' used for each objective -//7F015AA8: 4A5D8 -3C057F01 *LUI A1,7F01 - OR S1,V0,R0 -24A5EFBD *ADDIU A1,A1,EFBD - - -+_+ - -eliminate some TLB pointers -//7F015DFC: 4A92C briefing titles -00094880 SLL T1,T1,0x2 -3C018005 LUI AT,8005 -00290821 ADDU AT,AT,T1 -8C291AC0 LW T1,1AC0 (AT) -01200008 JR T1 -00000000 NOP -//7F015E14: -0FC30776 JAL 7F0C1DD8 -34049C5D ORI A0,R0,9C5D -10000010 BEQ R0,R0,7F04A990 -AFA20C0C SW V0,0C0C (SP) -//7F015E24: -0FC30776 JAL 7F0C1DD8 -34049C5E ORI A0,R0,9C5E -1000000C BEQ R0,R0,7F04A990 -AFA20C0C SW V0,0C0C (SP) -//7F015E34: -0FC30776 JAL 7F0C1DD8 -34049C5F ORI A0,R0,9C5F -10000008 BEQ R0,R0,7F04A990 -AFA20C0C SW V0,0C0C (SP) -//7F015E44: -0FC30776 JAL 7F0C1DD8 -34049C60 ORI A0,R0,9C60 -10000004 BEQ R0,R0,7F04A990 -AFA20C0C SW V0,0C0C (SP) -//7F015E54: -0FC30776 JAL 7F0C1DD8 -34049C61 ORI A0,R0,9C61 -AFA20C0C SW V0,0C0C (SP) -//7F015E60: 4A990 - -rewrite -//7F015DFC: 4A92C briefing titles -34049C5D ORI A0,R0,9C5D -0FC30776 JAL 7F0C1DD8 -00892021 ADDU A0,A0,T1 -10000015 BEQ R0,R0,7F04A990 -AFA20C0C SW V0,0C0C (SP) -//7F015E10: - - -+_+ - -eliminate %d string for MP options menu -string occurs at 21990+0x2FEBC -//7F0117CC: 462FC display text - LUI T9,8004 - *eliminate -8F280EB4 *LW T0,0EB4 (T9) -LW T9,0EB8 (T9) -LW V1,0048 (SP) -LH T1,0044 (SP) -OR A0,S0,R0 -ADDIU A1,SP,0058 -ADDIU A2,SP,0054 -LW A3,0064 (SP) -SW V0,0020 (SP) -SW R0,0024 (SP) -SW R0,0028 (SP) -SW T0,0014 (SP) -SW T9,0010 (SP) -SW V1,0018 (SP) -JAL 7F009760 ;write text -SW T1,001C (SP) -//7F011810: 46340 display selected players -3C052564 *LUI A1,2564 -AFA50060 *SW A1,0060 (SP) -... LUI A2,8003 -... OR S0,V0,R0 -... LW A2,B520 (A2) ;A2=8002B520: #players selected -27A50060 *ADDIU A1,SP,0060 ;A1=80050C4C: "%d" - -+_+ - -fix MP character select for 1 player (snicker) -stupid, yes -//7F0128AC: 473DC -29010003 *SLTI AT,T0,0003 -10010009 *BEQ R0,AT,7F0128D8 ;branch if not 2 player - -same for control style -//7F013A84: 485B4 -29010003 *SLTI AT,T0,0003 -... ADDIU S3,R0,0026 ;S3=0x26 -1001008 *BEQ R0,AT,7F013AB0 ;branch if not 2 player - -and the health screen -//7F013280: 47DB0 -29010003 *SLTI AT,T0,0003 - ADDIU S3,R0,0026 -10010008 *BEQ R0,AT,7F0132AC - - -+_+ - -extend global image bank -pushes RAREWARE logo back -2A2F38 020049D8 2A2948 020043E8 -2A2F98 02004A38 2A29A8 02004448 -2A3240 02004CE0 2A2C50 020046F0 -2A3548 02004FE8 2A2F58 020049F8 -2A4550 02005FF0 2A3F60 02005A00 - 2A4760 02006200 - -new size 19F0 -loaded at: 100AE0 - - 100AE0 load global image bank -27BDFFD8 ADDIU SP,SP,FFD8 -3C0E0200 LUI T6,0200 -3C0F0200 LUI T7,0200 -AFB00014 SW RA,0014 (SP) -25EF0000 ADDIU T7,T7,0000 ;T7=02000000: gib base alias -25CE1400 ADDIU T6,T6,1400 ;T6=02001400: gib end alias -... -// 100B30 -3C05002A LUI A1,002A -AE240000 SW A0,0000 (S1) -24A5D160 ADDIU A1,A1,D160 ;A1=0x29D160: global image bank -0C001707 JAL 70005C1C -02003025 OR A2,S0,R0 - -+_+ - -7F0B479C calls something useless (probably old portal debug routine) -This will get fried! -7F0B479C E92CC NOP - -+_+ - -Another few shrinkidink operations -could fuse all three together... - -52000023 *BEQL S0,R0,7F06EF54 ;return if no table -LW RA,0024 (SP) -//7F06EECC: A39FC loop for each entry in table, in order -LHU V0,0000 (S0) ;V0=table command entry -ADDIU S1,R0,0001 ;S1=1 -ANDI T7,V0,00FF ;T7=entry type -ADDIU T8,T7,FFFF ;T8=type-1 -SLTIU AT,T8,0018 ;TRUE if type 1-18 -1020000B *BEQ AT,R0,7F06EF10 ;default for invalid types -0018C040 *SLL T8,T8,0x1 ;T8=type->offset -3C017F07 *LUI AT,7F07 -0038C021 *ADDU T8,AT,T8 -8718XXXX *LH T8,XXXX (T8) ;T8=80054C20+offset: TLB jump for type -53110009 *BEQL T8,S1,7F06EF1C ;if value is 1, matches default for S1 -00008825 -OR S1,R0,R0 ;S1=0: used in branch below -//7F06EEFC types 01,02,03,0B,0C,0D,0E,0F,10,15 -13000004 *BEQ T8,R0,7F06EF10 -0038C021 *ADDU T8,AT,T8 -//7F06EF04 type 08 distance trigger -02402025 OR A0,S2,R0 -0300F809 *JALR RA,T8 -02002825 OR A1,S0,R0 -//7F06EF10 default -8E020014 LW V0,0014 (S0) -5440000C *BNEL V0,R0,7F06EF48 ;branch if no child entry -00028025 -OR S0,V0,R0 ;S0=V0: child entry -//7F06EF1C: -1200000A BEQ S0,R0,7F06EF48 -8FB9002C LW T9,002C (SP) -8F230008 LW V1,0008 (T9) -//7F06EF28 -52030007 *BEQL S0,V1,7F06EF48 -00008025 -OR S0,R0,R0 -//7F06EF30: retrieve next entry -8E02000C LW V0,000C (S0) ;V0=p->next entry -54400004 *BNEL V0,R0,7F06EF48 -00028025 -OR S0,V0,R0 -//7F06EF3C: retrieve parent entry -8E100008 LW S0,0008 (S0) ;S0=p->parent entry -1410FFF9 BNEZ S0,7F06EF28 -00000000 NOP -//7F06EF48: loop for each valid entry -5600FFE1 BNEL S0,R0,7F06EED0 -96020000 LHU V0,0000 (S0) ;V0=entry type -//7F06EF50: -8FBF0024 LW RA,0024 (SP) -8FB00018 LW S0,0018 (SP) -8FB1001C LW S1,001C (SP) -8FB20020 LW S2,0020 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -1 1 1 0 0 0 ECF8 E858 -EB3C 0 1 1 1 1 1 1 -0 0 0 0 1 0 EA08 0 - - - -5200001D *BEQL S0,R0,7F06F058 ;branch if invalid -LW RA,001C (SP) -//7F06EFE8: A3B18 -LHU V0,0000 (S0) ;V0=entry type -ANDI T7,V0,00FF ;T7=entry type (no flags) -ADDIU T8,T7,FFFF ;T8=entry-1 -SLTIU AT,T8,0018 ;AT=TRUE if type 1-18 -10200009 BEQ AT,R0,7F06F020 ;branch if invalid type -0018C040 *SLL T8,T8,0x1 ;T8=type->offset -3C017F07 *LUI AT,7F07 -0038C021 *ADDU T8,AT,T8 -8718F068 *LH T8,F068 (T8) ;T8=7F06F048+offset: TLB pointer for entry type -13000004 *BEQ T8,R0,7F06F020 -0038C021 *ADDU T8,AT,T8 -//7F06F014: type 8 - -02202025 OR A0,S1,R0 -0300F809 *JALR RA,T8 -02002825 OR A1,S0,R0 -//7F06F020: default -8E020014 LW V0,0014 (S0) -54400009 *BNEZL V0,7F06F04C -00028025 -OR S0,V0,R0 -//7F06F02C: -12000007 BEQ S0,R0,7F06F04C -00000000 NOP -//7F06F034: -8E02000C LW V0,000C (S0) -54400004 *BNEZL V0,R0,7F06F04C -00028025 -OR S0,V0,R0 -//7F06F040: -8E100008 LW S0,0008 (S0) -5600FFFC BNEL S0,R0,7F06F038 -8E02000C LW V0,000C (S0) -//7F06F04C: -5600FFE7 BNEL S0,R0,7F06EFEC -96020000 LHU V0,0000 (S0) -//7F06F054: return -8FBF001C LW RA,001C (SP) -8FB00014 LW S0,0014 (SP) -8FB10018 LW S1,0018 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 -//7F06F068 -table of entries spans to 7F06F098 A3BC8 - - -5200002F *BEQL S0,R0,7F06F184 -LW RA,0024 (SP) -//7F06F0FC: A3C2C -LHU V0,0000 (S0) -ANDI T7,V0,00FF -ADDIU T8,T7,FFFF -SLTIU AT,T8,0018 -1020000F *BEQ AT,R0,7F06F14C -0018C040 *SLL T8,T8,0x1 -3C017F07 *LUI AT,7F07 -0038C021 *ADDU T8,AT,T8 -8718XXXX *LH T8,XXXX (T8) -1300000A *BEQ T8,R0,7F06F14C -00380821 *ADDU AT,AT,T8 -//7F06F128 type 01 group heading -271817A8 *ADDIU T8,T8,17A8 -00112025 -OR A0,S1,R0 -07030004 *BGEZL T8,+4 -00102825 -OR A1,S0,R0 -00122025 -OR A0,S2,R0 -00112825 -OR A1,S1,R0 -00103025 -OR A2,S0,R0 -0020F809 *JALR RA,AT -00000000 *NOP -//7F06F14C default -8E020014 LW V0,0014 (S0) -54400009 *BNEZL V0,7F06F178 -00028025 *OR S0,V0,R0 -//7F06F158: -12000007 BEQ S0,R0,7F06F178 -00000000 NOP -//7F06F160: -8E02000C LW V0,000C (S0) -54400004 *BNEZL V0,7F06F178 -00028025 *OR S0,V0,R0 -//7F06F16C: -8E100008 LW S0,0008 (S0) -5600FFFC *BNEL S0,R0,7F06F164 -8E02000C LW V0,000C (S0) -//7F06F178: -5600FFE1 *BNEL S0,R0,7F06F100 -96020000 LHU V0,0000 (S0) -//7F06F180: -8FBF0024 LW RA,0024 (SP) -8FB00018 LW S0,0018 (SP) -8FB1001C LW S1,001C (SP) -8FB20020 LW S2,0020 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -+D738 +E0A0 +E64C 0 0 0 ECF8 E858 -EB3C 0 0 0 0 0 0 0 -0 E9BC 0 0 +E7A8 0 EA08 0 - -clean up by moving stuff a little -A3AF4 7F06EFC4 -> A3A98 7F06EF68 -A3C00 7F06F0D0 -> A3B3C 7F06F00C -A3C04 7F06F0D4 value tables -A3C94 space - -+_+ - -7F010290: 44DC0 revision to player# return - LUI AT,8003 - *LW T6,A8F0 (AT) - ADDIU V0,R0,0001 - *BEQL T6,V0,+1 - *LW V0,B520 (AT) - JR RA - *NOP -//7F0102B4: - *NOP - *NOP - *NOP - NOP - -==|:) - -kill another TLB table, creatively this time -abolishes 80054490 -//7F06B150: 9FC80 -24180001 *ADDIU T8,R0,0001 -2DE10016 *SLTIU AT,T7,0016 -1020000B BEQ AT,R0,7F06B188 -01F8C004 *SLLV T8,T8,T7 ;T8=1< -31CF00FF ANDI T7,T6,00FF ;T7=T6 & 0xFF: type# -25F8FFFF ADDIU T8,T7,FFFF ;T8=type-1 -2F010018 SLTIU AT,T8,0018 -10200009 *BEQ AT,R0,7F06C7E4 ;branch if invalid type -3C017F07 *LUI AT,7F07 -00380821 *ADDU AT,AT,T8 -9038C834 *LBU T8,C834 (AT) ;T8=#halfwords to ID# -2F0100FF *SLTIU AT,T8,00FF -10200004 *BEQ AT,R0,7F06C7E4 ;branch if invalid type -0018C040 *SLL T8,T8,0x1 ;T8=offset to ID -8CAF0004 *LW T7,0004 (A1) -01F87821 *ADDU T7,T7,T8 ;data+offset -95E60000 *LHU A2,0000 (T7) ;A2=group# -//7F06C7E4: default... -8CA20008 LW V0,0008 (A1) -1040000D BEQ V0,R0,7F06C820 ;return if no parent -24030017 *ADDIU V1,R0,0017 -//7F06C7F0: -94580000 LHU T8,0000 (V0) -331900FF ANDI T9,T8,00FF ;T9=parent's type -14790006 *BNE V1,T9,7F06C814 ;branch if not type 17: -00402825 -OR A1,V0,R0 ;A1=V0: p->parent -0FC1B1E7 JAL 7F06C79C ;do entire heirarchy -AFA6001C SW A2,001C (SP) -8FA6001C LW A2,001C (SP) -10000004 BEQ R0,R0,7F06C820 -8C470004 LW A3,0004 (V0) ;A3=p->data -//7F06C814: -8CA20008 LW V0,0008 (A1) ;V0=parent -5440FFF6 BNEL V0,R0,7F06C7F4 ;loop until none left -94580000 LHU T8,0000 (V0) -//7F06C820: return -8FBF0014 LW RA,0014 (SP) -00064080 SLL T0,A2,0x2 ;T0=A2*4: group# * 4 -01071021 ADDU V0,T0,A3 ;V0=p->? + offset: -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 -//7F06C834: -table: -06 FF FF FF FF FF D5 06 -11 FF 22 10 FF FF FF FF -FF 02 FF FF FF FF 00 0D - -+_+ - -More TLB action -Abolishes 80054B60 -//7F06CEC4: A19F4 -10A00012 *BEQ A1,R0,7F06CF10 -00000000 *NOP -94AE0000 LHU T6,0000 (A1) -//7F06CED0: -31CE00FF *ANDI T6,T6,00FF -2DC10016 *SLTIU AT,T6,0016 -1020000A BEQ AT,R0,7F06CF04 -3C017F07 *LUI AT,7F07 -002E0821 *ADDU AT,AT,T6 -8021CF20 *LB AT,CF20 (AT) -04200006 *BLTZ AT,7F06CF04 -8CA20004 LW V0,0004 (A1) -//7F06CEF0: -C4C60014 LWC1 F6,0014 (A2) -00411021 *ADDU V0,V0,AT -C4440000 *LWC1 F4,0000 (V0) -10000005 BEQ R0,R0,7F06CF14 -46062002 -MUL.S F0,F4,F6 -//7F06CF04: -8CA50008 LW A1,0008 (A1) -54A0FFF1 BNEL A1,R0,7F06CED0 -94AE0000 LHU T6,0000 (A1) -44800000 MTC1 R0,F0 -//7F06CF14: return -8FBF0014 LW RA,0014 (SP) -03E00008 -JR RA -27BD0018 -ADDIU SP,SP,0018 -//7F06CF20: -Table: -FF 08 18 18 FF FF FF FF -FF FF FF 40 1C 18 0C 18 -14 FF FF FF FF 10 FF FF - -+_+ - -Default weapon models now use a table. -Abolish 8005762C - -7F09B264: CFD94 -2C810020 SLTIU AT,A0,0020 -50200002 *BEQL AT,R0,+2 -00001025 *OR V0,R0,R0 -00041040 *SLL V0,A0,0x1 -3C017F0A *LUI AT,7F0A -00220821 ADDU AT,AT,V0 -03E00008 *JR RA -8422B284 *LH V0,B284 (AT) -7F09B284: -table; use entry 00 as default -FFFF FFFF 00BA 00D1 00BF 00CC 00CD 00C1 -00B8 00C3 00BD 00CE 00C2 00BC 00C5 00C0 -00CF 00D2 00BE 00D0 00BF 00BF 00BB FFFF -00B9 00D3 00C4 00C9 00C8 00C7 FFFF FFFF - -+_+ - -Removes TLB for these, and unstuipds the tests -Abolish 8005BC40 -7F0C1E20: F6950 TRUE when right enabled on MP menu page -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=p->BONDdata -8DCE29C8 *LW T6,29C8 (T6) ;T7=BONDdata+29C8: current MP menu page -2DC20008 *SLTIU V0,T6,0008 -10400007 *BEQ V0,R0,7F0C1E58 ;branch if invalid page -2DC20005 *SLTIU V0,T6,0005 ;TRUE if 0-4, FALSE if 5-7 -24010003 *ADDIU AT,R0,0003 -142E0004 *BNE AT,T6,7F0C1E58 ;branch if not type 3 -3C018009 *LUI AT,8009 -//7F0C1E4C: page 3 -8C21C704 *LW AT,C704 (AT) ;T8=8008C704: TRUE when game over -54200001 *BNEL AT,R0,+1 -00001025 *OR V0,R0,R0 ;V0=FALSE -//7F0C1E58: return -03E00008 *JR RA -00000000 *NOP - -7F0C1E8C: F69BC TRUE when left enabled on MP menu page -Abolishes 8005BC60 -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=p->BONDdata -8DCE29C8 *LW T6,29C8 (T6) ;T7=BONDdata+29C8: current MP menu page -2DC20008 *SLTIU V0,T6,0008 -10400009 *BEQ V0,R0,7F0C1EC4 ;branch if invalid page -2DC20006 *SLTIU V0,T6,0006 ;TRUE if not 6,7 -51C00001 *BEQ T6,R0,+1 ;TRUE if not 0 -00001025 *OR V0,R0,R0 -//7F0C1EAC: determine if page 1 -24010001 *ADDIU AT,R0,0001 -142E0004 *BNE AT,T6,7F0C1EC4 -3C018009 *LUI AT,8009 -//7F0C1EB8: page 1 -8C21C704 *LW AT,C704 (AT) -50200001 *BEQL AT,R0,+1 -00001025 *OR V0,R0,R0 -//7F0C1EC4: return -03E00008 JR RA -00000000 *NOP -//7F0C1ECC: blank -//7F0C1EF8: F6A28 - -+_+ - -Dwindle this one down as well -Abolishes 80054598 (33808-33868) - -types A,11 same except jump -types 8,12,17 same except jump -types 1,2,3,B,C,D,E,F,10,15 S1=0 + default -types 4,5,6,7,9,13,14,16,18 default - -could be further reduced, but ehh... - -//7F06BE2C: A095C - LW S3,0000 (A0) - OR S4,A1,R0 - OR S5,A2,R0 -1260004F *BEQ S3,R0,7F06BF78 [68] -8FB60048 LW S6,0048 (SP) -... -//7F06BE60: A0990 -52000043 *BEQL S0,R0,7F06BFD4 [5C] -8E730010 LW S3,0010 (S3) -... - -//7F06BEB0: A09E0 -8E100008 LW S0,0008 (S0) -1600FFF5 BNEZ S0,7F06BE8C -00000000 NOP -5200002C *BEQL S0,R0,7F06BF70 [45] -8E730010 LW S3,0010 (S3) -96020000 LHU V0,0000 (S0) -304F00FF *ANDI T7,V0,00FF -//7F06BECC: A09FC S1=0 for those who need it -3C01FFDE *LUI AT,FFDE -342107F1 *ORI AT,AT,07F1 ;AT=FFDE07F1: bitflag word -01E10807 *SRAV AT,AT,T7 ;FFDE07F1 >> type bits -30310001 *ANDI S1,AT,0001 ;S1=TRUE if flag set -//7F06BEDC: A0A0C set up variables -3C187F07 *LUI T8,7F07 -8E640000 *LW A0,0000 (S3) ;used by all jump types -02002825 *OR A1,S0,R0 ;used by all jump types -//7F06BEE8: A0A18 begin tests -24010011 *ADDIU AT,R0,0011 ;type 11 -502F0004 *BEQL AT,T7,7F06BF00 ;+4 -27180044 *ADDIU T8,T8,0044 ;7F074C68+44= 7F074CAC -2401000A *ADDIU AT,R0,000A ;type A -142F0010 *BNE AT,T7,+next ;push big test to end... -24010017 *ADDIU AT,R0,0017 ;type 17 -//7F06BF00: A0A30 types A,11 -27184C68 *ADDIU T8,T8,4C68 -02803025 OR A2,S4,R0 -0300F809 *JALR RA,T8 -02A03825 OR A3,S5,R0 -50400014 *BEQL V0,R0,7F06BF64 -00008825 *OR S1,R0,R0 -8E790000 LW T9,0000 (S3) -8FA80044 LW T0,0044 (SP) -AD190000 SW T9,0000 (T0) -AED00000 SW S0,0000 (S6) -8FA90038 LW T1,0038 (SP) -AD330000 SW S3,0000 (T1) -8E0A0004 LW T2,0004 (S0) -10000013 *BEQ R0,R0,7F06BF84 -8D420000 LW V0,0000 (T2) -//7F06BF3C: A0A6C more tests -502F0006 *BEQL AT,T7,+jumps ;jump if type 17 -27180098 *ADDIU T8,T8,0098 ;7F06E970+98=7F06EA08 -24010012 *ADDIU AT,R0,0012 ;type 12 -502F0003 *BEQL AT,T7,+jumps -2718004C *ADDIU T8,T8,004C ;7F06E970+4C=7F06E9BC -24010008 *ADDIU AT,R0,0008 ;type 8 -142F0003 *BNE AT,T7,7F06BF64 -2718E970 *ADDIU T8,T8,E970 -//7F06BF5C: A0A8C jumps -0300F809 *JALR RA,T8 -00000000 *NOP -//7F06BF64: A0A94 default: 4,5,6,7,9,13,14,16,18 (replaces 7F06BFC8) -1600FFC0 *BNEZ S0,7F06BE68 -00000000 *NOP -//7F06BF6C: A0A9C (replaces 7F06BFD0) -8E730010 *LW S3,0010 (S3) -5660FFB4 *BNEL S3,R0,7F06BE44 -8EC20000 *LW V0,0000 (S6) -//7F06BF78: A0AA8 (replaces 7F06BFDC) -8FAF0038 LW T7,0038 (SP) -00001025 OR V0,R0,R0 -ADE00000 SW R0,0000 (T7) -//7F06BF84: A0AB4 return (replaces 7F06BFE8) -8FBF0034 LW RA,0034 (SP) -8FB00018 LW S0,0018 (SP) -8FB1001C LW S1,001C (SP) -8FB20020 LW S2,0020 (SP) -8FB30024 LW S3,0024 (SP) -8FB40028 LW S4,0028 (SP) -8FB5002C LW S5,002C (SP) -8FB60030 LW S6,0030 (SP) -03E00008 JR RA -27BD0038 ADDIU SP,SP,0038 -//7F06BFAC: space... - -Table: -01 00 00 00 01 01 01 01 -01 01 01 00 00 00 00 00 -00 01 01 01 01 00 01 01 -01 ~etc - -FFDE07F1 -use SRAV to force all invalid values to return 1 - -+_+ - -Slew of tables here... - -Abolish 80054194 [33404-334FC] - *NOP;otherwise, would just jump and set the stupid thing to 0E8 anyway... - NOP -//7F065E34: 9A964 -2E21003E SLTIU AT,S1,003E -3C017F06 *LUI AT,7F06 -50200002 *BEQL AT,R0,+2 -2421003F *ADDIU AT,AT,003F -00310821 *ADDU AT,AT,S1 -90255E68 *LBU A1,5E68 (AT) -10A0001B *BEQ A1,R0,7F065EBC ;no sound = 0 -//7F065E50: 9A980 all sounds go here -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) -0C002382 JAL 70008E08 -00003025 OR A2,R0,R0 -10000016 BEQ R0,R0,7F065EBC -00000000 NOP -//7F065E68: empty... - -//7F065EBC: 9A9EC no sound - -00 00 E9 E9 E8 E8 E8 E8 -E8 E8 E8 E8 E8 E8 E8 E8 -E8 E8 E8 E8 E8 E8 F2 00 -E8 E8 00 EB EB EB 00 00 -00 00 00 E8 E8 E8 E8 E8 -00 E8 E8 E8 E8 E8 E8 00 -00 E8 E8 E8 E8 E8 E8 E8 -E8 E8 E8 E8 00 00 E8 E8 - -play reload sound - 1 inhibits -Abolish 80054294 [33504-335FC] -//7F06618C: 9ACBC -2E21003E SLTIU AT,S1,003E -10200006 *BEQ AT,R0,7F0661AC change to 7F0661C0 to inhibit reload sound for all gadgets -3C017F06 *LUI AT,7F06 -DC385EA8 *LD T8,5EA8 (AT) -0238C017 *DSRAV T8,T8,S1 -33180001 *ANDI T8,T8,0001 -17000006 *BNEZ T8,7F0661C0 - NOP - -1 1 1 1 0 0 0 0 -0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 1 -0 0 1 1 1 1 1 1 -1 1 1 0 0 1 1 1 -1 1 1 1 0 1 1 1 -1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 -F001820F F980000F -FFFFEFE7 FCC0000F - -Also, get rid of a few sneaky float values: -//7F066054: 9AB84 speed you reload at -3C013F33 LUI AT,3F33 -44812000 MTC1 AT,F4 ;F4=80054290: 0.699219 - -//7F065F18: 9AA48 speed you draw the weapon at -3C018005 LUI AT,8005 -C42A428C LWC1 F10,428C (AT) ;F10=8005428C: 0.698132 - -+_+ - -Be cheap about 7F06B29C. Move TLB pointer table to 7F06BFAC A0ADC -Obliterates 800544E4 [33754-337A8] - -7F06B29C 9FDCC -//7F06B2D4: 9FE04 -305800FF ANDI T8,V0,00FF -2F010016 *SLTIU AT,T8,0016 -0018C840 *SLL T9,T8,0x1 -102000F0 BEQ AT,R0,7F06B6A4 -3C017F07 LUI AT,7F07 -0039C821 *ADDU T9,AT,T9 -8739BFAC *LH T9,BFAC (T9) -00390821 *ADDU AT,AT,T9 -00200008 *JR AT -00000000 NOP - -+_+ - -remove watch zoom scales from 21990 -//7F0A5330: D9E60 40933333 -3C014093 LUI AT,8006 -44816000 LWC1 F12,8458 (AT) ;F12=brief/objective zoom - -//7F0A5364: D9E94 40933333 -3C014093 LUI AT,8006 -44816000 LWC1 F12,845C (AT) ;F12=inventory zoom - -//7F0A54A0: D9FD0 40BCCCCD -3C0140BD LUI AT,8006 -44816000 LWC1 F12,8460 (AT) ;F12=80058460: zoom for inventory->main watch menu - -//7F0A54E4: DA014 407CCCCD -3C01407D LUI AT,8006 - JAL 7F07E400 ;trigger watch zoom -44816000 LWC1 F12,8464 (AT) ;F12=80058464: zoom for inventory->control watch menu - -//7F0A55A4: DA0D4 407CCCCD -3C01407D LUI AT,8006 - JAL 7F07E400 ;trigger watch zoom -44816000 LWC1 F12,8468 (AT) ;F12=80058468: unused zoom for control->options watch menu - -//7F0A561C: DA14C 40933333 -3C014093 LUI AT,8006 -44816000 LWC1 F12,846C (AT) ;F12=8005846C: zoom for control->inventory watch menu - -//7F0A5764: DA294 40933333 -3C014093 LUI AT,8006 - JAL 7F07E400 ;trigger watch zoom -44816000 LWC1 F12,8470 (AT) ;F12=80058470: zoom for options->objective/briefing watch menu - -//7F0A57D4: DA304 407CCCCD -3C01407D LUI AT,8006 -44816000 LWC1 F12,8474 (AT) ;F12=80058474: zoom for objective/briefing->options watch menu - -//7F0A5840: DA370 40BCCCCD -3C0140BD LUI AT,8006 - JAL 7F07E400 ;trigger watch zoom -44816000 LWC1 F12,8478 (AT) ;F12=80058478: zoom for objective/briefing->main watch menu - -More calls them than these. Must pilfer... - -+_+ - -Reduce, since this is ugly... -7F00C384 40EB4 V0=p->name of difficulty A0 -27BDFFE8 ADDIU SP,SP,FFE8 -2C820004 SLTIU V0,A0,0004 -10400004 BEQ V0,R0,+return -AFBF0014 SW RA,0014 (SP) -//7F00C3B8: agent -34029C13 ORI V0,R0,9C13 ;V0=9C13: "agent" -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -00442021 ADDU A0,A0,V0 ;A0+=text code: ID 9C13-9C16: difficulty text ID -//7F00C3F4: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -+_+ - -reduce this in size for the 'other' scenario halfword pull - -7F014764 49294 initialize folder tabs and load folder resources -LUI AT,8003 -SW R0,A8D0 (AT) ;0->8002A8D0: reset selected flag for folder tab 1 -LUI AT,8003 -SW R0,A8D4 (AT) ;0->8002A8D4: reset selected flag for folder tab 2 -LUI AT,8003 -SW R0,A8D8 (AT) ;0->8002A8D8: reset selected flag for folder tab 3 -LUI AT,8003 -SW R0,A8E4 (AT) ;0->8002A8E4: reset highlight flag for folder tab 3 -LUI AT,8003 -ADDIU SP,SP,FFE8 -SW R0,A8E0 (AT) ;0->8002A8E0: reset highlight flag for folder tab 2 -SW RA,0014 (SP) -LUI AT,8003 -JAL 7F00B8AC ;loads walletbond, used to construct main menus -SW R0,A8DC (AT) ;0->8002A8DC: reset highlight flag for folder tab 1 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP -JR RA ;return for a deleted routine -NOP - -now: remove reference to unused function, and move one caller of this -//7F014764 49294 initialize folder tabs and load folder resources -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -::7F01477C 492AC initialize multiplayer options menu (moved from 7F013D78) -3C018007 *LUI AT,8007 -AC20977C *SW R0,977C (AT) -::7F014784 492B4 initialize folder tabs and load folder resources -3C018003 LUI AT,8003 -AC20A8D0 SW R0,A8D0 (AT) ;0->8002A8D0: reset selected flag for folder tab 1 -AC20A8D4 SW R0,A8D4 (AT) ;0->8002A8D4: reset selected flag for folder tab 2 -AC20A8D8 SW R0,A8D8 (AT) ;0->8002A8D8: reset selected flag for folder tab 3 -AC20A8E4 SW R0,A8E4 (AT) ;0->8002A8E4: reset highlight flag for folder tab 3 -27BDFFE8 ADDIU SP,SP,FFE8 -AC20A8E0 SW R0,A8E0 (AT) ;0->8002A8E0: reset highlight flag for folder tab 2 -AFBF0014 SW RA,0014 (SP) -0FC02E2B JAL 7F00B8AC ;loads walletbond, used to construct main menus -AC20A8DC SW R0,A8DC (AT) ;0->8002A8DC: reset highlight flag for folder tab 1 -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA ;return for a deleted routine -27BD0018 ADDIU SP,SP,0018 - - -+_+ - -MP option highlights converted to single bytes -45500 AD2397E8 -> A12397D0 -45520 AD2397E4 -> A12397CF -45548 AD2397E0 -> A12397CE -45570 AD2397D8 -> A12397CC -45598 AD2397DC -> A12397CD -455C0 AD2397D4 -> A12397CB -455E8 AD2397D0 -> A12397CA -45608 AD2397C8 -> A12397C8 -4560C AD2397CC -> A12397C9 -4569C 8C3897C8 -> 803897C8 -456A8 8C3897CC -> 803897C9 -456B4 8C3897D0 -> 803897CA -456C0 8C3897D4 -> 803897CB -456CC 8C3897D8 -> 803897CC -456D8 8C3897DC -> 803897CD -456E4 8C3897E0 -> 803897CE -456F0 8C3897E4 -> 803897CF -456FC 8C3897E8 -> 803897D0 -45B24 8DAD97C8 -> 81AD97C8 -45BFC 8DAD97CC -> 81AD97C9 -45CD4 8DAD97D0 -> 81AD97CA -45DC8 8DAD97D4 -> 81AD97CB -45EBC 8DAD97DC -> 81AD97CD -45FB0 8DAD97D8 -> 81AD97CC -460A4 8DAD97E0 -> 81AD97CE -46198 8DAD97E4 -> 81AD97CF -4628C 8DAD97E8 -> 81AD97D0 - -800697C8 hightlight players -800697C9 hightlight scenario -800697CA hightlight level -800697CB hightlight length -800697CC hightlight characters -800697CD hightlight weapons -800697CE hightlight health -800697CF hightlight control -800697D0 hightlight aim -800697D1 hightlight score -800697D2 hightlight minutes - -+_+ - -Get rid of solo watch menu TLB entries -Abolish 3773C-37750 - -//7F0A6DE4: DB914 -2DA10005 SLTIU AT,T5,0005 -1020003B BEQ AT,R0,7F0A6ED8 -000D6840 *SLL T5,T5,0x1 -3C017F0A *LUI AT,7F0A -002D6821 *ADDU T5,AT,T5 -85AD6EA0 *LH T5,6EA0 (T5) -002D6821 *ADDU T5,AT,T5 -01A00008 -JR T5 -00000000 NOP -//7F0A6E08: -0FC2949B -JAL 7F0A526C -00000000 *NOP -10000031 *BEQ R0,R0,7F0A6ED8 -00000000 *NOP -//7F0A6E18: -3C028004 LUI V0,8004 -8C420998 LW V0,0998 (V0) -14400005 *BNE V0,R0,+5 -24010001 *ADDIU AT,R0,0001 -0FC29618 -JAL 7F0A5860 -00000000 NOP -10000005 *BEQ R0,R0,+5 -00000000 NOP -14220003 *BNE AT,V0,+3 -00000000 NOP -0FC29640 -JAL 7F0A5900 -00000000 NOP -0FC29571 JAL 7F0A55C4 -00000000 NOP -10000021 *BEQ R0,R0,7F0A6ED8 -00000000 *NOP -00000000 *NOP -00000000 NOP - - -Get rid of an objectives page option handler... -abolishes 800584E0 (37750-37778) - -//7F0A6E60: DB990 -3C0E8004 LUI T6,8004 -8DCE099C LW T6,099C (T6) -2DC1000A SLTIU AT,T6,000A -10200008 *BEQ AT,R0,7F0A6E90 -3C027F0A *LUI V0,7F0A -24425998 *ADDIU V0,V0,5998 ;all but entries 0 and 1 use this -502E0001 *BEQL AT,T6,+1 -2442015C *ADDIU V0,V0,015C -500E0001 *BEQL R0,T6,+1 -244200CC *ADDIU V0,V0,00CC -0040F809 *JALR RA,V0 -00000000 NOP -//7F0A6E90: -0FC295A9 -JAL 7F0A56A4 -00000000 -NOP -1000000F -BEQ R0,R0,7F0A6ED8 -00000000 *NOP -//7F0A6EA0: -clear through 7F0A6EC0 - -+_+ - -return a default text pointer when a NULL or invalid string used -7F0C1DD8 F6908 V0= p->text ID A0 -SRA T6,A0,0xA -SLL T7,T6,0x2 -LUI V0,8009 -ADDU V0,V0,T7 -LW V0,C63C (V0) ;V0=8008C63C+group offset: p->table -ANDI T8,A0,03FF -SLL T9,T8,0x2 ;T9=(A0 & 0x3FF)*4: offset to entry in table -ADDU T0,V0,T9 -LW V1,0000 (T0) ;V1=offset within bank -OR A0,R0,R0 -BEQ V1,R0,7F0C1E14 -NOP -ADDU A0,V1,V0 ;A0=V1+V0: p->text -JR RA -OR V0,A0,R0 -//7F0C1E14: -JR RA -OR V0,A0,R0 - -revision! returns a valid string when invalid bank or pointer within -7F0C1DD8 F6908 V0= p->text ID A0 -00047283 SRA T6,A0,0xA -000E7080 *SLL T6,T6,0x2 -3C028009 LUI V0,8009 -004E1021 *ADDU V0,V0,T6 -8C42C63C LW V0,C63C (V0) ;V0=8008C63C+group offset: p->table -3C0F7F0C *LUI T7,7F0C -10400007 *BEQ V0,R0,+return ;return default if NULL pointer -25EF1E18 *ADDIU T7,T7,1E18 -308E03FF *ANDI T6,A0,03FF -000E7080 *SLL T6,T6,0x2 ;T9=(A0 & 0x3FF)*4: offset to entry in table -004E7021 *ADDU T6,V0,T6 -8DCE0000 *LW T6,0000 (T6) ;V1=p->text handle -55C00001 *BNEL T6,R0,+1 -01C27821 *ADDU T7,T6,V0 -//7F0C1E14: -03E00008 JR RA -000F1025 *OR V0,T7,R0 - *data: "ERR\0" 45525200 - NOP - -+_+ - -simplify this dramatically! - -used at 7F0BDE6C (stage boot) - 7F088920 (respawn) - -7F0793EC ADF1C initialize playerdata -AFBFFFFC *SW RA,FFFC (SP) -0FC26919 JAL 7F09A464 ;V0=#players -27BDFFE8 ADDIU SP,SP,FFE8 -28410002 SLTI AT,V0,0002 -14200009 BNEZ AT,7F07943C ;branch if solo -00000000 NOP -//7F079408: multiplayer only... -0FC26C54 JAL 7F09B150 ;V0=cur.player# -3C038008 LUI V1,8008 ;this should be safe from both routines -0FC0402F JAL 7F0100BC ;V0= player A0's control style -00022025 OR A0,V0,R0 ;A0=V0: player# -8C6EA0B0 *LW T6,A0B0 (V1) ;T6=8007A0B0: cur.player data pointer -ADC20430 SW V0,0430 (T6) ;cur.player+430: control style -0FC29374 JAL 7F0A4DD0 ;set control style A0 to current playerdata -00022025 OR A0,V0,R0 ;A0=V0: control style -//7F07943C: -3C038008 LUI V1,8008 -8C6EA0B0 *LW T6,A0B0 (V1) ;T7=8007A0B0: cur.BONDdata pointer -3C023F80 *LUI V0,3F80 -3C03BF80 *LUI V1,BF80 -24050001 ADDIU A1,R0,0001 ;A1=1 -2406FFFF ADDIU A2,R0,FFFF ;A2=-1 -24070002 ADDIU A3,R0,0002 ;A3=2 -// yes, I do realize this caould be looped and whatnot... -ADC00000 SW R0,0000 (T6) ;BONDdata+0= 0 -ADC00004 *SW R0,0004 (T6) ;BONDdata+4= 0.0 -ADC00008 *SW R0,0008 (T6) ;BONDdata+8= 0.0 -ADC0000C *SW R0,000C (T6) ;BONDdata+C= 0.0 -ADC00010 *SW R0,0010 (T6) ;BONDdata+10= 0.0 -ADC00014 *SW R0,0014 (T6) ;BONDdata+14= 0.0 -ADC20018 *SW V0,0018 (T6) ;BONDdata+18= 1.0 -ADC0001C *SW R0,001C (T6) ;BONDdata+1C= 0.0 -ADC20020 *SW V0,0020 (T6) ;BONDdata+20= 1.0 -ADC00024 *SW R0,0024 (T6) ;BONDdata+24= 0.0 -ADC00028 *SW R0,0028 (T6) ;BONDdata+28= 0.0 -ADC0002C *SW R0,002C (T6) ;BONDdata+2C= 0.0 -ADC00030 *SW R0,0030 (T6) ;BONDdata+30= 0.0 -ADC00034 SW R0,0034 (T6) ;BONDdata+34= 0 -ADC00038 *SW R0,0038 (T6) ;BONDdata+38= 0.0 -ADC0003C *SW R0,003C (T6) ;BONDdata+3C= 0.0 -ADC00040 *SW R0,0040 (T6) ;BONDdata+40= 0.0 -ADC00044 *SW R0,0044 (T6) ;BONDdata+44= 0.0 -ADC00048 *SW R0,0048 (T6) ;BONDdata+48= 0.0 -ADC0004C *SW R0,004C (T6) ;BONDdata+4C= 0.0 -ADC00050 *SW R0,0050 (T6) ;BONDdata+50= 0.0 -ADC00054 *SW R0,0054 (T6) ;BONDdata+54= 0.0 -ADC00058 *SW R0,0058 (T6) ;BONDdata+58= 0.0 -ADC00084 *SW R0,0084 (T6) ;BONDdata+84= 0.0 -ADC00088 *SW R0,0088 (T6) ;BONDdata+88= 0.0 -ADC0008C SW R0,008C (T6) ;BONDdata+8C= 0 -ADC00090 *SW R0,0090 (T6) ;BONDdata+90= 0.0 -ADC00094 SW R0,0094 (T6) ;BONDdata+94= 0 -ADC00098 *SW R0,0098 (T6) ;BONDdata+98= 0.0 -ADC7009C SW A3,009C (T6) ;BONDdata+9C= 2 -ADC000A0 *SW R0,00A0 (T6) ;BONDdata+A0= 0.0 -ADC000A4 *SW R0,00A4 (T6) ;BONDdata+A4= 0.0 -ADC500AC SW A1,00AC (T6) ;BONDdata+AC= 1 -ADC000D0 SW R0,00D0 (T6) ;BONDdata+D0= 0 -ADC000D8 SW R0,00D8 (T6) ;BONDdata+D8= 0 -ADC200DC *SW V0,00DC (T6) ;BONDdata+DC= 1.0 -ADC000E0 *SW R0,00E0 (T6) ;BONDdata+E0= 0.0 -ADC200E4 *SW V0,00E4 (T6) ;BONDdata+E4= 1.0 -ADC000E8 *SW R0,00E8 (T6) ;BONDdata+E8= 0.0 -ADC200EC *SW V0,00EC (T6) ;BONDdata+EC= 1.0 -ADC000F0 *SW R0,00F0 (T6) ;BONDdata+F0= 0.0 -ADC600F4 SW A2,00F4 (T6) ;BONDdata+F4= -1 -ADC600F8 SW A2,00F8 (T6) ;BONDdata+F8= -1 -ADC00104 SW R0,0104 (T6) ;BONDdata+104= 0 -ADC00108 SW R0,0108 (T6) ;BONDdata+108= 0 -ADC0010C SW R0,010C (T6) ;BONDdata+10C= 0 -ADC00110 SW R0,0110 (T6) ;BONDdata+110= 0 -ADC50114 SW A1,0114 (T6) ;BONDdata+114= 1 -ADC50118 SW A1,0118 (T6) ;BONDdata+118= 1 -ADC0011C SW R0,011C (T6) ;BONDdata+11C= 0 -ADC50120 SW A1,0120 (T6) ;BONDdata+120= 1 -ADC00124 SW R0,0124 (T6) ;BONDdata+124= 0 -ADC50128 SW A1,0128 (T6) ;BONDdata+128= 1 -ADC0012C *SW R0,012C (T6) ;BONDdata+12C= 0.O -ADC00130 SW R0,0130 (T6) ;BONDdata+130= 0 -ADC60134 SW A2,0134 (T6) ;BONDdata+134=-1 -ADC50138 SW A1,0138 (T6) ;BONDdata+138= 1 -ADC0013C *SW R0,013C (T6) ;BONDdata+13C= 0.0 -ADC00140 SW R0,0140 (T6) ;BONDdata+140= 0 -ADC60144 SW A2,0144 (T6) ;BONDdata+144=-1 -ADC0014C *SW R0,014C (T6) ;BONDdata+14C= 0,0 -ADC20150 *SW V0,0150 (T6) ;BONDdata+150= 1.0 -ADC00154 *SW R0,0154 (T6) ;BONDdata+154= 0.0 -3C01C080 LUI AT,C080 -ADC10158 *SW AT,0158 (T6) ;BONDdata+158= -4.0 -3C0143B2 *LUI AT,43B2 -ADC1015C *SW AT,015C (T6) ;BONDdata+15C= 356.0 [43B20000] -ADC00160 *SW R0,0160 (T6) ;BONDdata+160=0.0 -ADC20164 *SW V0,0164 (T6) ;BONDdata+164= 1.0 -ADC00168 *SW R0,0168 (T6) ;BONDdata+168= 0.0 -ADC0016C *SW R0,016C (T6) ;BONDdata+16C= 0.0 -ADC00170 *SW R0,0170 (T6) ;BONDdata+170= 0.0 -ADC00174 *SW R0,0174 (T6) ;BONDdata+174= 0.0 -ADC20178 *SW V0,0178 (T6) ;BONDdata+178= 1.0 -ADC0017C SW R0,017C (T6) ;BONDdata+17C= 0 -ADC00180 *SW R0,0180 (T6) ;BONDdata+180= 0.0 -ADC00184 *SW R0,0184 (T6) ;BONDdata+184= 0.0 -ADC00188 *SW R0,0188 (T6) ;BONDdata+188= 0.0 -ADC3018C *SW V1,018C (T6) ;BONDdata+18C=-1.0 -ADC30190 *SW V1,0190 (T6) ;BONDdata+190=-1.0 -ADC00194 *SW R0,0194 (T6) ;BONDdata+194= 0.0 -ADC00198 *SW R0,0198 (T6) ;BONDdata+198= 0.0 -ADC0019C *SW R0,019C (T6) ;BONDdata+19C= 0.0 -ADC001A0 SW R0,01A0 (T6) ;BONDdata+1A0= 0 -ADC001C0 SW R0,01C0 (T6) ;BONDdata+1C0= 0 -ADC001C4 SW R0,01C4 (T6) ;BONDdata+1C4= 0 -ADC001C8 SW R0,01C8 (T6) ;BONDdata+1C8= 0 -ADC501CC SW A1,01CC (T6) ;BONDdata+1CC= 1 -ADC001D0 SW R0,01D0 (T6) ;BONDdata+1D0= 0 -ADC00200 SW R0,0200 (T6) ;BONDdata+200= 0 -ADC00204 *SW R0,0204 (T6) ;BONDdata+204= 0.0 -ADC00208 *SW R0,0208 (T6) ;BONDdata+208= 0.0 -ADC0020C *SW R0,020C (T6) ;BONDdata+20C= 0.0 -ADC00210 *SW R0,0210 (T6) ;BONDdata+210= 0.0 -ADC00214 *SW R0,0214 (T6) ;BONDdata+214= 0.0 -ADC00218 SW R0,0218 (T6) ;BONDdata+218= 0 -ADC00220 SW R0,0220 (T6) ;BONDdata+220= 0 -ADC00224 *SW R0,0224 (T6) ;BONDdata+224= 0.0 -ADC003B4 *SW R0,03B4 (T6) ;BONDdata+3B4= 0 -ADC003C4 *SW R0,03C4 (T6) ;BONDdata+3C4= 0.0 -ADC003C8 *SW R0,03C8 (T6) ;BONDdata+3C8= 0.0 -ADC203CC *SW V0,03CC (T6) ;BONDdata+3CC= 1.0 -240100FF *ADDIU AT,R0,00FF -ADC103D0 *SW AT,03D0 (T6) ;BONDdata+3D0= FF -ADC103D4 *SW AT,03D4 (T6) ;BONDdata+3D4= FF -ADC103D8 *SW AT,03D8 (T6) ;BONDdata+3D8= FF -ADC003DC *SW R0,03DC (T6) ;BONDdata+3DC= 0.0 -ADC303E0 *SW V1,03E0 (T6) ;BONDdata+3E0=-1.0 -ADC303E4 *SW V1,03E4 (T6) ;BONDdata+3E4=-1.0 -ADC103E8 *SW AT,03E8 (T6) ;BONDdata+3E8= FF -ADC103EC *SW AT,03EC (T6) ;BONDdata+3EC= FF -ADC103F0 *SW AT,03F0 (T6) ;BONDdata+3F0= FF -ADC103F4 *SW AT,03F4 (T6) ;BONDdata+3F4= FF -ADC103F8 *SW AT,03F8 (T6) ;BONDdata+3F8= FF -ADC103FC *SW AT,03FC (T6) ;BONDdata+3FC= FF -ADC00400 *SW R0,0400 (T6) ;BONDdata+400= 0.0 -ADC00404 *SW R0,0404 (T6) ;BONDdata+404= 0.0 -ADC7042C SW A3,042C (T6) ;BONDdata+42C= 2 -ADC00430 SW R0,0430 (T6) ;BONDdata+430= 0 -ADC01274 SW R0,1274 (T6) ;BONDdata+1274= 0.0 -ADC01278 SW R0,1278 (T6) ;BONDdata+1278= 0.0 -ADC0127C SW R0,127C (T6) ;BONDdata+127C= 0.0 -3C014170 LUI AT,4170 -ADC129C0 *SW AT,29C0 (T6) ;BONDdata+29C0= 15.0 -ADC729FC SW A3,29FC (T6) ;BONDdata+29FC= 2 -A5C62A04 SH A2,2A04 (T6) ;BONDdata+2A04=-1 -ADC02A08 SW R0,2A08 (T6) ;BONDdata+2A08= 0.0 -ADC02A0C SW R0,2A0C (T6) ;BONDdata+2A0C= 0.0 -ADC02A4C SW R0,2A4C (T6) ;BONDdata+2A4C= 0.0 -ADC02A6C SW R0,2A6C (T6) ;BONDdata+2A6C= 0 -ADC02A70 SW R0,2A70 (T6) ;BONDdata+2A70= 0 - //7F0798A8: return -8FBF0014 LW RA,0014 (SP) -03E00008 -JR RA -27BD0018 ADDIU SP,SP,0018 -//7F079658 AE188 - -+_+ - -uses TLB pointers at 80052DF0 -7F04DFD0 82B00 -LBU T6,0003 (A0) -ADDIU T7,T6,FFFF -SLTIU AT,T7,002F -BEQ AT,R0,7F04E000 -SLL T7,T7,0x2 -LUI AT,8005 -ADDU AT,AT,T7 -LW T7,2DF0 (AT) -JR T7 -NOP -JR RA -ADDIU V0,R0,0001 -//7F04E000: -OR V0,R0,R0 -JR RA -NOP - -uses TLB pointers at 80052EAC -7F04E00C 82B3C -LBU T6,0003 (A0) -ADDIU T7,T6,FFFC -SLTIU AT,T7,0012 -BEQ AT,R0,7F04E03C -SLL T7,T7,0x2 -LUI AT,8005 -ADDU AT,AT,T7 -LW T7,2EAC (AT) -JR T7 -NOP -JR RA -ADDIU V0,R0,0001 -//7F04E03C: -OR V0,R0,R0 -JR RA -NOP - -rewrite, pertaining to both -uses 0x10 of data, allocating two words to each, ensuring more commands can be written in the future -7F04DFD0 82B00 table of data -35 1E 00 00 C8 57 00 00 00110101 00011110 00000000 00000000 11001000 01010111 -C8 00 19 00 00 00 00 00 11001000 00000000 00011001 00000000 00000000 00000000 - -7F04DFE0 82B10 redirected from 7F04DFD0 -10000002 BEQ R0,R0,+2 -//7F04DFE4: redirected from 7F04E00C -3C017F05 LUI AT,7F05 -24210008 ADDIU AT,AT,0008 -//7F04DFEC: -908E0003 LBU T6,0003 (A0) -25CEFFFF ADDIU T6,T6,FFFF ;commands 01-30 -24020008 ADDIU V0,R0,0008 -01C2001B DIVU T6,V0 ;command / 8. divisor is offset, mordant # bits in byte -00001012 MFLO V0 ;V0= offset in bytes from start of table -00220821 ADDU AT,AT,V0 ;AT=p->byte containing data -9021DFD0 LBU AT,DFD0 (AT) ;AT=byte -00007010 MFHI T6 ;T6= bitshift within byte -24020001 ADDIU V0,R0,0001 -01C21004 SLLV V0,V0,T6 ;V0=1< 0 normalizes to 1 if bit set - -+_+ - -hack to allow stick-up + select to random select -oh, and deal with this: -7F011BD8 eliminate from initializer and interface, but not constructor - well, that looks stupid, so just have the constructor spit out straight black... - repair that line that was changed too so it returns a proper value - -S0= player#, lead in SLL A0,S0,0x18 -//7F012080: 46BB0 detect if selection made -02002025 *OR A0,S0,R0 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -3405B000 ORI A1,R0,B000 ;A1=A, Z, Start buttons -10400021 *BEQ V0,R0,7F012114 ;do left/right stick if no selection -//7F012090: 46BC0 check if stick up: random select -02002025 *OR A0,S0,R0 -2405FFFE *ADDIU A1,R0,FFFE ;A1=low limit -0C00314A *JAL 7000C528 ;V0=vert.control stick state -24060001 *ADDIU A2,R0,0001 ;A2=high limit -18400008 *BLEZ V0,+select -3C088003 *LUI T0,8003 -0C002914 *JAL 7000A450 ;returns V0=random; fries AT,A0,A1,A2 -850AB194 *LH T2,B194 (T0) ;T5=8002B194: #characters -004A001B *DIVU V0,T2 -00001010 *MFHI V0 ;V0=rand % #entries -004A082B *SLTU AT,V0,T2 ;TRUE if valid entry -54200001 *BNEL AT,R0,+1 ;set only if valid -AE220000 *SW V0,0000 (S1) ;update highlighted entry -//7F0120C4: 46BF4 select -8E290000 LW T1,0000 (S1) ;T1=highlighted selection -01134021 *ADDU T0,T0,S3 -02F35021 ADDU T2,S7,S3 ;T2=size.reg + pl.offset -AD09B524 *SW T1,B524 (T0) ;8002B524+offset: save cur.selection -24020001 ADDIU V0,R0,0001 ;must be 1 -AD420000 SW V0,0000 (T2) ;1->size.reg -AE820000 SW V0,0000 (S4) ;1->selected.reg -8FC40000 LW A0,0000 (S8) -240500C7 ADDIU A1,R0,00C7 -0C002382 JAL 70008E08 ;play sound effect A1 -00003025 OR A2,R0,R0 -1000001D BEQ R0,R0,7F012168 -8EA50000 LW A1,0000 (S5) -//7F0120F8: 46C28 - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -//7F012114: 46C44 pressed check if stick left -8E4C0000 LW T4,0000 (S2) ;T4= TRUE if selection made -15800012 *BNE T4,R0,7F012164 ;skip if selection already made -00102025 *OR A0,S0,R0 ;A0=T3: player# -2405FFFE ADDIU A1,R0,FFFE ;A1=left limit -0C00312D JAL 7000C4B4 ;V0=horz.control stick state -24060001 ADDIU A2,R0,0001 ;A2=right limit -8E230000 *LW V1,0000 (S1) ;V1=highlighted selection -5C400004 *BGTZL V0,+correct ;branch if right -24630001 *ADDIU V1,V1,0001 ;selection+1 -2841FFFF SLTI AT,V0,FFFF ;TRUE if left (-2) -10200009 *BEQ AT,R0,7F012164 ;branch if not left -2463FFFF *ADDIU V1,V1,FFFF ;selection-1 -3C088003 LUI T0,8003 -8508B194 LH T0,B194 (T0) ;T5=8002B194: #characters -0068082A *SLT AT,V1,T0 ;TRUE if within thingy -50200001 *BEQL AT,R0,+1 -2503FFFF *ADDIU V1,T0,FFFF ;V1=selection->final -04620001 *BLTZL V1,+1 -00001825 *OR V1,R0,R0 ;V1=first entry -AE230000 *SW V1,0000 (S1) ;update highlighted entry -//7F012164: 46C94 etc... - -+_+ - -Get rid of the stupid TLB thing at the end of the debug menu -Seriously, they're all the same, pointing immendiately +after+ the JR command X{ -Removes 80055830 (34AA0-34AB4) - -//7F090E8C: C59BC -NOP next 8 commands - -+_+ - -killing the radar bug I'm responsible for - -Things pulling the image# -//7F04A7CC: -LW V0,0008 (S0) ;image# -SLTIU AT,V0,0064 ;hmm... limit of 100 images in monitor image bank... -BEQ AT,R0,7F04A7F4 -OR S1,V0,R0 ;S1=V0: presumes must be a pointer to declaration -SLL T5,V0,0x2 -LW T7,D120 (T7) ;T7=8008D120: p->monitor image list -SUBU T5,T5,V0 -SLL T5,T5,0x2 ;T5=image# * 0xC: offset to img.decl. entry -BEQ R0,R0,7F04A7F4 ;stupid extroneous branch -ADDU S1,T5,T7 ;S1=p->img.decl. -//7F04A7F4: - -this grabs the p->image from the declaration, tests if extracted -//7F076E3C: -LW V0,0000 (S7) ;V0=image# or p->img.entry -LBU S5,0004 (S7) ;S5=width -LBU S4,0005 (S7) ;S4=height -SLTIU AT,V0,0BB9 -BEQ AT,R0,7F076E60 -OR A0,S7,R0 -... -//7F076E60: -LUI AT,8000 -OR V1,V0,AT ;V1=p->image -LHU A0,FFF8 (V1) ;A0=img.data-8: header, containing the original image ID# -JAL 7F0CBB0C ;V0=offset to img.list.entry (facemapper table) -OR A1,R0,R0 -LBU V1,0006 (S7) -OR S6,V0,R0 -BNEL V1,R0,7F07741C ;branch if not level 0 -SW R0,00D0 (SP) -BEQL V0,R0,7F076EBC ;branch if invalid pointer -LBU S1,0007 (S7) -LW S2,0008 (V0) ;S2=facemapper+8 -LW T6,000C (V0) ;T6=facemapper+C -SLL S1,S2,0x1B -SRL T7,S1,0x1D ;T7=format -ANDI S1,T7,00FF -SRL T7,T6,0x1E ;T7=mask for C0000000 -SLL T8,T7,0xE ;T8=upper halfword & C000 -ANDI T9,S2,0003 -OR S2,T9,R0 ;S2=bitdepth -BEQ R0,R0,7F076EC0 -SW T8,0144 (SP) -//7F076EB8: -... -//7F076EC0: -BEQ S2,R0,7F076F90 ;branch if 4bit -OR V0,S2,R0 -ADDIU AT,R0,0001 -BEQ V0,AT,7F076F5C ;branch if 8bit -ADDIU T7,R0,0002 -... -//7F076F5C: -SW T7,0140 (SP) ;SP+140=2 -OR A0,S5,R0 ;A0=width -OR A1,S4,R0 ;A1=height -JAL 7F076848 ;V0=(ll) width/2 * height -ADDIU A2,R0,0001 ;A2=1 -ADDIU S3,V0,FFFF -JAL 7F0766AC ;V0=ceil(0x4000 /width) -OR A0,S5,R0 -ADDIU T8,S5,0007 -SRA T9,T8,0x3 -SW V0,0138 (SP) -BEQ R0,R0,7F076FC4 -SW T9,0134 (SP) - -image inserted at 7F04AB34, using JAL 7F076D68 - -on a good ROM: -800B6E30 image 30 -E7000000 00000000 -BA001402 00000000 -B900031D 00552D58 -BB080001 FFFFFFFF -BA001001 00000000 -FC121824 FF33FFFF -FD700000 00187BF8 -F5700000 07080200 -E6000000 00000000 -F3000000 075E7125 -E7000000 00000000 -BA000E02 00000000 -F5680E00 00098260 -F2002002 000D60D6 -01020040 000EA880 -BC001006 000EAA40 -04300040 04000000 -B1000032 00002010 -B8000000 00000000 - -+_+ - -Roman numeral string generator -Assumes you'll provide an adequate buffer... -That would be 4 bytes per placeholder, plus a final NULL -similiar to a base 5 system; all placeholders at 5/10 boundries -3 III 3 000000000011 -4 IV 4 000000000100 -5 V 5 000000000101 &1, >>2 -8 VIII 8 000000001000 -A X 10 000000001010 >>1, &1, >>2 -F XV 15 000000001111 &1, >>2 -14 XX 20 000000010100 -28 XL 40 000000101000 -32 L 50 000000110010 -64 C 100 000001100100 -1F4 500 000111110100 -3E8 M 1000 001111101000 - -1) divide/mordant by 5 -2) if divisor&1, add 5 to mordant -3) if mordant=4, handle subtract from symbol+1/2 -4) shift divisor right 1 -5) lather, rinse, repeat - -63 99 XLIX - /5 13 %5 4 -IX &1 01 - >>1 9 - /5 1 %5 4 -XL &1 1 - -7C 124 CXXVI - /5 18 %5 4 -VI &1 00 - >>1 C - /5 2 %5 2 -XX &1 0 - >>1 1 - /5 0 %5 1 -C &1 0 - -It'll burn cycles like crazy, but could divide by 10, then test its 5 groupings -Use the previous divisor as next doohick and increment the letter keys. -Table the letter keys like so, and increment by 1 each placeshift: -I,V,X,L,C,etc. -Use generic caseshifter to make upper or lower case. -build the string in the 80064C30 buffer, backward. - - accepts: A0=value to translate - fries: AT,V1,A0,A1,A2,A3 - LUI A3,8006 - ORI A2,R0,027F ;80064EAF - SB R0,4EAF (A3) ;set a NULL in the buffer - LUI A1,7Fxx -// so begins the looping - ORI AT,R0,0005 - DIVU A0,AT - MFLO A0 ;A0/=5 - ANDI V1,A0,0001 ;V1=TRUE if 10, not 5 - SRL A0,A0,0x1 ;A0=A0>>1: prepare for next iteration - MFHI AT ;AT=A0%5 - SLTIU V0,AT,0004 ;TRUE if 0-3 - BEQ V0,R0,+X ;branch if a 4 - LBU V0,XXX0 (A1) ;V0=character -// normal output - SUBU A2,A2,AT - SUBU A2,A2,V1 - BLTZ A2,+return ;return if exceeded buffer - NOP - - -// when mordant is 4... - ADDIU A2,A2,FFFE - BLTZ A2,+return - ADDU V1,A1,V1 - LBU V1,XXX1 (V1) - ADDIU A3,A3,FFFE - SB V0,0000 (A3) - SB V1,0001 (A3) -// loopus - BNE A0,R0,-loop - ADDIU A1,A1,0001 ;next set of characters to use -// return - JR RA - ADDIU V0,A3,4EAF - -+_+ - -There's default handling of bad objective test, so small patch to catch the TLB string... -//7F057160: 8BC80 catch bad objective returns: title line -BNEL V1,R0,7F0571A8 ;return if a valid text string --> -0462---- BLTZL V1,7F0571A8 - -+_+ - -Are impact type names + pointers used? Don't seem like it. No references... - -+_+ - -Yet another, linked from one above! -Abolishes 80054D54 -7F074534: -aegh... I'll get to this one later diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Cheat Menu/bigger cheat menu.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Cheat Menu/bigger cheat menu.txt deleted file mode 100644 index 77fe05c..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Cheat Menu/bigger cheat menu.txt +++ /dev/null @@ -1,57 +0,0 @@ -7F017BB8 is responsible for writting words into 800697F0 table -This should make that bytes: -//7F017BB8: 4C6E8 - LW V0,0000 (A1) -00000000 *NOP -00C2C021 *ADDU T8,A2,V0 -A3030000 *SB V1,0000 (T8) - -now for the reads... -//7F017FD8: 4CB08 -001E7025 *OR T6,S8,R0 - SLL S5,S8,0x2 - ADDU S5,S5,S8 - LUI T7,8007 - ADDIU T7,T7,97F0 - SLL S5,S5,0x2 - LUI S7,8004 - LUI S6,8004 - ADDIU S6,S6,0EB8 - ADDIU S7,S7,0EB4 - ADDIU S5,S5,0035 - ADDU S3,T6,T7 -//7F018008: 4CB38 - JAL 7F092774 -92640000 *LBU A0,0000 (S3) -... -//7F0180E4: 4CC14 -926F0000 *LBU T7,0000 (S3) -... -//7F018138: 4CC68 -92680000 *LBU T0,0000 (S3) -... -//7F0181C4: 4CCF4 -26730001 *ADDIU S3,S3,0001 -... -//7F018214: 4CD44 get second column, which is +C - *NOP - *NOP - ADDIU S5,R0,0035 - JAL 7F092774 -92640000 *LBU A0,0000 (S3) -... -//7F018300: 4CE30 -926E0000 *LBU T6,0000 (S3) -... -//7F018354: 4CE84 -92790000 *LBU T9,0000 (S3) -... -//7F0183E0: 4CF10 -26730001 *ADDIU S3,S3,0001 - -at selection... -//7F017F28: 4CA58 -00194025 *OR T0,T9,R0 - ADDU V1,V1,T0 -906397F0 *LBU V1,97F0 (V1) - \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Cheat Menu/fix all cheats.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Cheat Menu/fix all cheats.txt deleted file mode 100644 index ea577e9..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Cheat Menu/fix all cheats.txt +++ /dev/null @@ -1,512 +0,0 @@ -7F08A3C8 0xBEEF8 fries: AT,A0,A1,A2,V0,V1,A3,T0,T1,T2,T3,T6,T7,T8,T9 - at least... -7F0C1DD8 0xF6908 fries: V0,V1,A0,T6,T7,T8,T9 - -+_+ - -Fun thing. -Most cheats follow a "name on/off" model. -So, will make a generic display routine for these. -A1 offsets from 9C73 (ON) to 9C74 (OFF), borrowed from normal cheat menu - -7F079864 AE394 display "cheatname on/off" - accepts: A0=txt ID, A1=(1-on, 0-off) -AFBFFFC4 SW RA,FFC4 (SP) -0FC30776 JAL 7F0C1DD8 ;p->"On" or "Off" -27BDFFB0 ADDIU SP,SP,FFB0 -00023025 OR A2,R0,V0 ;arg1 -34049C74 ORI A0,R0,9C74 -0FC30776 JAL 7F0C1DD8 ;p->"On" or "Off" -00852023 SUBU A0,A0,A1 ;A0="ON\n" or "OFF\n" -00023825 OR A3,R0,V0 ;arg2 -27A40020 ADDIU A0,SP,0020 ;A0=SP+20: p->final string -3C052573 LUI A1,2573 -24A52025 ADDIU A1,A1,2025 -AFA50018 SW A1,0018 (SP) -3C057300 LUI A1,7300 -AFA5001C SW A1,001C (SP) -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -27A50018 ADDIU A1,SP,0018 ;A1=p->"%s %s" -0FC228F2 JAL 7F08A3C8 ;display text lower-left -27A40020 ADDIU A0,SP,0020 -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0050 ADDIU SP,SP,0050 - - -+-+ - -64 char. multi already addressed in rand+, but could do this... - -need to make a line for this to work... -7F010280 44DB0 MAX characters multiplayer cheat toggle - LUI AT,8003 -802EB197 *LB T6,B197 (AT) - XORI T6,T6,0001 - JR RA -A02EB197 *SB T6,B197 (AT) - -+-+ - -combine invincibility on+off - -7F091C20 C6750 toggle Invincibility -0FC227D6 JAL 7F089F58 ;returns V0=cur. player invinciblity flag -00000000 NOP -0FC227D2 JAL 7F089F48 ;sets cur. player invincibility flag to A0 -38440001 XORI A0,V0,0001 ;toggle it and save -00042825 OR A1,A0,R0 -0FC1E619 JAL 7F079864 ;display cheat on/off -3404B000 ORI A0,R0,B000 -1000 BEQ R0,R0,7F09242C -8FBF0014 LW RA,0014 (SP) - -+-+ - -COMBINE DE/ACTIVE - -7F091C50 C6780 toggle All Guns - JAL 7F08C2AC ;returns V0=cur. player all-gun flag - NOP - JAL 7F08C29C ;sets cur. player all-gun flag to A0 - XORI A0,V0,0001 - OR A1,A0,R0 - JAL 7F079864 ;display cheat on/off - ORI A0,R0,B001 - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -+-+ - -need to add a few lines to make this a toggle... - -7F091D28 0xC6858 toggle Line Mode - JAL 7F090FDC ;V0=line mode flag - NOP - JAL 7F090FE8 - XORI A0,V0,0001 - OR A1,A0,R0 - JAL 7F079864 ;display cheat on/off - ORI A0,R0,B037 - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -+-+ - -COMBINE both invisible cheats into a single, horrible one! toggle, for the fun of it -using 3D4D0000, since insignificantly different from current value (and clears up a float) - -7F091E2C 0xC695C toggle Invisibility - JAL 7F089F74 ;V0= invisible to guards flag (1=visible (OFF)) - NOP - OR A1,V0,R0 - JAL 7F079864 ;display cheat on/off - ORI A0,R0,B004 - JAL 7F089F74 ;V0= invisible to guards flag (1=visible (OFF)) - NOP - JAL 7F089F68 ;A0->invisible to guards flag - XORI A0,V0,0001 - LUI AT,3F80 - BEQL A0,R0,+1 - LUI AT,3D4D - MTC1 AT,F14 ;F14=800573D8: [0x36648] 0.05 visibility - LUI AT,4396 - JAL 7F080A10 - MTC1 AT,F12 ;F12=300; timer - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -temporary non-toggle invis.on -0FC227DA JAL 7F089F68 ;A0->invisible to guards flag -34040000 ORI A0,R0,0000 -38850001 XORI A1,A0,0001 -0FC1E619 JAL 7F079864 ;display cheat on/off -3404B004 ORI A0,R0,B004 -0FC227DD JAL 7F089F74 ;V0= invisible to guards flag (1=visible (OFF)) -3C013D4D LUI AT,3D4D -44817000 MTC1 AT,F14 ;F14=800573D8: [0x36648] 0.05 visibility -3C014396 LUI AT,4396 -0FC20284 JAL 7F080A10 -44816000 MTC1 AT,F12 ;F12=300; timer - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -temporary non-toggle invis.off -0FC227DA JAL 7F089F68 ;A0->invisible to guards flag -34040001 ORI A0,R0,0001 -38850001 XORI A1,A0,0001 -0FC1E619 JAL 7F079864 ;display cheat on/off -3404B004 ORI A0,R0,B004 -0FC227DD JAL 7F089F74 ;V0= invisible to guards flag (1=visible (OFF)) -3C013F80 LUI AT,3F80 -44817000 MTC1 AT,F14 ;F14=800573D8: [0x36648] 0.05 visibility -3C014396 LUI AT,4396 -0FC20284 JAL 7F080A10 -44816000 MTC1 AT,F12 ;F12=300; timer - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -+_+ - -don't know how this one operates... - -7F092578: [C70A8] infinite ammo off -JAL 7F0C1DD8 -ORI A0,R0,B022 -JAL 7F08A3C8 -OR A0,V0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -+_+ - -7F092590: [C70C0] DK mode off -JAL 7F0C1DD8 -ORI A0,R0,B023 -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F0927F4 -OR A0,R0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F091E74 0xC69A4 DK Mode -JAL 7F0C1DD8 -ORI A0,R0,B017 -JAL 7F08A3C8 -OR A0,V0,R0 -JAL 7F0927F4 ;does stuff. somewhat long -ADDIU A0,R0,0001 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+_+ - -7F0925B0: [C70E0] tiny bond off -ADDIU AT,R0,0001 -BNE V0,AT,7F0926B0 -LUI T8,8008 -LW T8,A0B4 (T8) -LUI AT,3F80 -MTC1 AT,F4 -LWC1 F6,0064 (T8) -C.EQ.S F4,F6 -NOP -BC1TL 7F0926B4 -LW RA,0014 (SP) -JAL 7F0C1DD8 -ORI A0,R0,B024 -JAL 7F08A3C8 -OR A0,V0,R0 -LUI AT,3F80 -LUI T9,8008 -LW T9,A0B4 (T9) -MTC1 AT,F8 -LUI T0,8008 -SWC1 F8,0064 (T9) -LW T0,A0B0 (T0) -LW A0,00D4 (T0) -BEQL A0,R0,7F0926B4 -LW RA,0014 (SP) -LWC1 F0,0014 (A0) -ADD.S F10,F0,F0 -MFC1 A1,F10 -JAL 7F06CE78 -NOP -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F091F5C 0xC6A8C Tiny Bond -ADDIU AT,R0,0001 -BNE V0,AT,7F092428 quit if MP -LUI T3,8008 -LW T3,A0B4 (T3) -LUI AT,3F80 -MTC1 AT,F16 -LWC1 F18,0064 (T3) F18=player perspective -C.EQ.S F16,F18 -NOP -BC1FL 7F09242C quit if already set -LW RA,0014 (SP) -JAL 7F0C1DD8 ret. p->txt -ORI A0,R0,B019 -JAL 7F08A3C8 disp l.txt -OR A0,V0,R0 -LUI AT,3F00 -LUI T2,8008 -MTC1 AT,F0 -LW T2,A0B4 (T2) -LUI T4,8008 -SWC1 F0,0064 (T2) save 0.5 to player perspective -LW T4,A0B0 (T4) T4=current playerdata -LW A0,00D4 (T4) A0=pointer to character object instance -BEQL A0,R0,7F09242C -LW RA,0014 (SP) -LWC1 F4,0014 (A0) F4=character scale -MUL.S F6,F4,F0 1/2 scale to A1 -MFC1 A1,F6 -JAL 7F06CE78 saves new character scale -NOP -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+_+ - -7F092630: [C7160] paintball off -JAL 7F0C1DD8 -ORI A0,R0,B025 -JAL 7F08A3C8 -OR A0,V0,R0 -BEQ R0,R0,7F0926B4 -LW RA,0014 (SP) - -7F091FDC 0xC6B0C Paintball Mode -JAL 7F0C1DD8 -ORI A0,R0,B01A -JAL 7F08A3C8 -OR A0,V0,R0 -BEQ R0,R0,7F09242C -LW RA,0014 (SP) - -+_+ -combine cheats! - -7F092160 0xC6C90 toggle Fast Mode - JAL 7F091018 returns V0=80036FCC [0x1623C] fast mode - NOP - JAL 7F091024 ;set 80036FCC->A0 1=fast mode - XORI A0,V0,0001 - ORI A1,A0,R0 - JAL 7F079864 ;display cheat on/off - ORI A0,R0,B040 - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -+_+ - -7F092190 0xC6CC0 toggle debug position - JAL 7F090F88 - NOP - JAL 7F090F94 - XORI A0,V0,R0 -//7F0926B0: [C71E0] do nothing and quit. Use on codes that can't be deactivated -LW RA,0014 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - -+_+ -normal rate is 1.0 - -7F0921B0 0xC6CE0 toggle Fast Animation - JAL 7F0205E4 ;returns F0=animation speed - NOP - LUI V0,4080 - MTC1 V0,F4 - OR A1,R0,R0 ;A1=off, for when F0=2.0 - C.LT.S F0,F4 - NOP - BC1FL +2 ;branch if F0=2.0 already - LUI V0,3F80 - ADDIU A1,R0,0001 ;F0=1.0 is ON - MTC1 V0,F12 ;making th wild presumption nothing touches F12... - JAL 7F079864 ;display cheat on/off - ORI A0,R0,B041 - JAL 7F020540 ;F12->animation rate - NOP - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -7F0921FC 0xC6D2C toggle slow animation - JAL 7F0205E4 ;returns F0=animation speed - NOP - LUI V0,3E80 - MTC1 V0,F4 - ADDIU A1,R0,0001 ;A1=off, for when F0=0.5 - C.LT.S F4,F0 - NOP - BC1FL +2 ;branch if F0=0.5 already - LUI V0,3F80 - OR A1,R0,R0 ;F0=1.0 is OFF - MTC1 V0,F12 ;making th wild presumption nothing touches F12... - JAL 7F079864 ;display cheat on/off - ORI A0,R0,B042 - JAL 7F020540 ;F12->animation rate - NOP - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - -+_+ - -//7F0918CC: -JAL 7F0927BC ;V0= TRUE if cheat A0 activated for cur.player -LBU A0,0000 (S1) ;A0=cheat# -BEQ V0,R0,7F0918EC ;activate cheat if not already -NOP -LW T8,000C (S1) ;T8=cheat.flags -ANDI T9,T8,0010 -BEQ T9,R0,7F0918FC ;deactivate cheat if 0x10 flag not set -NOP -//7F0918EC: C641C activate -JAL 7F091B64 ;activate cheat A0 -LBU A0,0000 (S1) ;A0=cheat# -BEQ R0,R0,7F091908 -LBU T0,0010 (S1) -//7F0918FC: deactivate -JAL 7F092438 ;deactivate cheat A0 -LBU A0,0000 (S1) ;A0=cheat# -LBU T0,0010 (S1) -//7F091908: - -7F0926C0 C71F0 deactivate all active cheats -//7F09271C: -JAL 7F0927BC ;V0= TRUE if cheat A0 activated -OR A0,S0,R0 ;A0=cheat# -BEQL V0,R0,7F092738 ;branch if it isn't -ADDIU S0,S0,0001 -JAL 7F092438 ;deactivate cheat A0 -OR A0,S0,R0 ;A0=cheat# -//7F092738: - -called at: -7F0BFB20 F4650 -LUI A0,8005 -LW A0,83A0 (A0) ;A0=800483A0: p->SE buffer(?) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -BEQ A0,R0,7F0BFB50 ;branch if NULL pointer -NOP -JAL 70008DF0 ;V0= TRUE if SE playing -NOP -BEQ V0,R0,7F0BFB50 ;branch if not playing -LUI A0,8005 -JAL 70009020 ;deactivate SE -LW A0,83A0 (A0) ;A0=800483A0: p->SE buffer(?) -//7F0BFB50: -LUI A0,8005 -LW A0,8364 (A0) ;A0=80048364: stage# -ADDIU AT,R0,005A -BEQ A0,AT,7F0BFB7C ;branch if stage# = 0x5A (menus are 90) -NOP -JAL 7F0C15E0 ;V0= text bank number for stage A0 -NOP -JAL 7F0C1DC4 ;blanks text bank A0 -OR A0,V0,R0 ;A0=V0: text bank -JAL 7F007770 -NOP -//7F0BFB7C: -JAL 7F0926C0 ;deactivate all active cheats -NOP -JAL 7F0073B0 -NOP -JAL 7F007460 -NOP -JAL 7F007800 -NOP -JAL 7F007920 -NOP -JAL 7F007970 -NOP -JAL 7F0074D0 -NOP -LUI A0,8005 -JAL 7F007500 -LW A0,8364 (A0) ;A0=80048364: stage# -JAL 7F007590 -NOP -JAL 7F007700 -NOP -JAL 7F007980 -NOP -JAL 7F0C1268 -NOP -JAL 7F0B47E0 -NOP -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -activation used at above, as well as here: -C65DC 7F091AAC tests and reroutes cheat# A0 to activation routine - -+_+ - -Unlock Dam is not only extroneous, but crashes the game, so commandeering cheat #37 -Now will unlock all stages using the 007 flag -set file+9 & 1 - -7F092380 0xC6EB0 Unlock Stage # (37-4A) -3C028003 LUI V0,8003 -8C44A8E8 LW A0,A8E8 (V0) ;A0=folder# -24C8FFC9 -ADDIU T0,A2,FFC9 ;T0=stage.lock# -2C810004 *SLTIU AT,A0,0004 -1020 -BEQ AT,R0,+return ;branch if invalid folder# -00001825 -OR V1,R0,R0 ;V1=0 -2D010014 *SLTIU AT,T0,0014 ;TRUE if 0-13 -1020 *BEQ AT,R0,+return ;branch if invalid stage# -00002825 OR A1,R0,R0 ;A1=0 -15000007 *BNE T0,R0,+7 ;branch if not 0 (all stages) -AFA40024 *SW A0,0024 (SP) -//0xC6EDC: -0FC07771 *JAL 7F01DDC4 ;V0=p->folder A0 -00000000 *NOP -90430009 *LBU V1,0009 (V0) -34630001 *ORI V1,V1,0001 -100000 *BEQ R0,R0,+return -A0430009 *SB V1,0009 (V0) -//0xC6EF0: -8FA40024 *LW A0,0024 (SP) -00003025 OR A2,R0,R0 ;A2=agent -AFA30018 SW V1,0018 (SP) ;SP+18=V1 completed -AFA5001C SW A1,001C (SP) ;SP+1C=A1 cur.stage# -0FC078B0 JAL 7F01E2C0 ;V0=TRUE if stage A1 complete on difficulty A2 in eeprom folder A0 -AFA80020 SW T0,0020 (SP) ;SP+20=stage.lock# -24010003 ADDIU AT,R0,0003 -8FA30018 LW V1,0018 (SP) -8FA5001C LW A1,001C (SP) -14220002 BNE V0,AT,+2 ;branch if stage not complete -8FA80020 LW T0,0020 (SP) -24630001 ADDIU V1,V1,0001 ;V1++ total complete stages -//0xC6F10: -14A8FFF3 *BNE A1,T0,0xC6EF0 ;loop for each stage -24A50001 -ADDIU A1,A1,0001 ;A1++ next stage# -//0xC6F24: -24A8FFFF -ADDIU A1,T0,FFFF ;A1=stage.lock# -14A300 *BNE A1,V1,+return ;skip if previous stages not yet complete -3C0705F5 LUI A3,05F5 -34E7E0FF ORI A3,A3,E0FF ;A3=05F5E0FF ;max completion time? 99999999 -8FA40024 *LW A0,0024 (SP) -JAL 7F01E5F8 ;unlock stage A1 in folder A0 on difficulty A2 -OR A2,R0,R0 ;A2=agent -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,009F ;A1=SE #09F -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL -//0xC6F58: 7F092428 -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0040 - - - -+_+ - -since no need for two invisibility cheats, will commandeer #16 -now: Slow Mode - activate 7F092144 - deactivate 7F092648 - - -Add in Shadowcat (Bond Phase - no object collisions) -7F092144 C6C74 Bond Phase Toggle -0FC227E3 JAL 7F089F8C ;V0=state of bond pahse -00000000 NOP -0FC227E0 JAL 7F089F80 ;A0->bond phase -2C440001 SLTIU A0,V0,0001 -00042825 OR A1,A0,R0 -0FC1E619 JAL 7F079864 ;display cheat on/off -3404B005 ORI A0,R0,B005 - BEQ R0,R0,7F09242C - LW RA,0014 (SP) - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/MPmenuhack.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/MPmenuhack.txt deleted file mode 100644 index 45e59fa..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/MPmenuhack.txt +++ /dev/null @@ -1,3046 +0,0 @@ -This is the working copy of the MP menu, already hacked for the team display. -Should be revised to print each attachment sepertely, use newer generic constructors, and eliminate TLB pointers when possible. - -7F0C4024 F8B54 multiplayer watch menu display - accepts: A0=p->display list -ADDIU SP,SP,FF28 -SW RA,003C (SP) -SW S1,0038 (SP) -OR S1,A0,R0 ;S1=A0: p->display list (DL) -JAL 7F09B150 ;V0= cur player # -SW S0,0034 (SP) -JAL 7F09A464 ;V0=# players -SW V0,00D4 (SP) ;SP+D4= cur.player -ADDIU AT,R0,0001 -OR T0,V0,R0 ;T0=#players -BNE V0,AT,7F0C405C ;branch if multi -OR S0,R0,R0 ;S0=0 -BEQ R0,R0,7F0C6034 ;quit if solo -OR V0,S1,R0 ;V0=S1: DL -//7F0C405C: -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -OR A0,S1,R0 ;A0=S1: DL -LW T6,29C4 (V1) ;T6=BONDdata+29C4: TRUE when menu activated -BEQL T6,R0,7F0C5E24 ;branch if not in menu -LW T6,00D8 (V1) -JAL 7F0ACD98 ;microcode -SW T0,00D0 (SP) ;SP+D0= #players -//7F0C407C: figure 2 player offset -LW T7,00D0 (SP) ;T7=SP+D0: #players -ADDIU AT,R0,0002 -OR S1,V0,R0 ;S1=V0: p->DL -BNE T7,AT,7F0C409C ;branch if 3-4 player -LUI T9,8008 -ADDIU T8,R0,0050 -BEQ R0,R0,7F0C40A0 -SW T8,00A8 (SP) ;SP+A8=0x50 -//7F0C409C: 3-4 player -SW R0,00A8 (SP) ;SP+A8=0 -//7F0C40A0: -LW T9,A0B0 (T9) ;T9=8007A0B0: p->BONDdata -LW T1,29C8 (T9) ;T1=BONDdata+29C8: selected page in menu -ADDIU AT,R0,0007 -BEQ AT,T1,7F0C42D0 ;skip if page 7: waiting for exit -ADDIU AT,R0,0004 -BEQ AT,T1,7F0C4128 ;branch if page 4: pause -ADDIU AT,R0,0005 -BEQ AT,T1,7F0C4170 ;branch if page 5: exit -ADDIU AT,R0,0006 -BEQ AT,T1,7F0C4170 ;branch if page 6: exit-cancel/confirm -NOP -//7F0C40CC: pages 0,1,2,3 - play -LUI T3,8009 -LW T2,C704 (T3) ;T2=8008C704: TRUE when game over -BNEZ T2,7F0C40EC ;branch if game over -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A015 ;A0=ID A015: "PLAY" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) ;SP+A4= p->text -//7F0C40EC: game over if not blinking -LW T3,C710 (T3) ;T3=8007C710: "blink" register -BEQ T3,R0,7F0C4108 ;branch if not set -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A016 ;A0=ID A016: "GAME OVER" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) ;SP+A4= p->text -//7F0C4108: start to exit if blinking -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A017 ;A0=A017: "START TO EXIT" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) ;SP+A4= p->text -//7F0C4118: -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9CE3 ;A0=ID 9CE3: "\n" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) ;SP+A4= p->text -//7F0C4128: page 4 - pause/unpause -LUI T5,8009 -LW T5,C718 (T5) ;T5=8008C718: TRUE if paused -BEQ T5,R0,7F0C4160 ;branch if unpaused -NOP -//7F0C4138: paused -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A018 ;A0=ID A018: "PAUSED" -JAL 7F09B150 ;V0= cur player # -SW V0,00A4 (SP) ;SP+A4= p->text -LUI T6,8009 -LW T6,C71C (T6) ;T6=8008C71C: player# who paused game -BNE V0,T6,7F0C4190 ;branch if not player who paused game -NOP -BEQ R0,R0,7F0C4190 -ADDIU S0,R0,0001 ;S0=1 you paused game -//7F0C4160: unpaused -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A019 ;A0=ID A019: "PAUSE" -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) ;SP+A4= p->text -//7F0C4170: pages 5,6 - exit -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01A ;A0=ID A01A: "EXIT" -JAL 70004514 ;V0=viewport ulx [p@800232A8+20] -SW V0,00A4 (SP) ;SP+A4= p->text -LW T7,00A8 (SP) ;T7=SP+A8: 2-player offset -ADDU A0,V0,T7 ;A0=screenpos+offset -ADDIU A0,A0,0041 ;A0+=41: xpos -SW A0,00CC (SP) ;SP+CC= xpos -//7F0C4190: figure out text x position -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=SP+BC: @height -ADDIU A1,SP,00C0 ;A1=SP+C0: @width -LW A2,00A4 (SP) ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T8,0010 (SP) ;SP+10=p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T9,00A8 (SP) ;T9=2 player offset -LW T2,00C0 (SP) ;T2=str.width -ADDU T1,V0,T9 ;T1=view.x + offset -SRA T3,T2,0x1 ;T3=str.width/2: midpoint -SUBU A0,T1,T3 ;A0=xpos for centering text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0= uly -SW A0,00CC (SP) ;SP+CC=xpos -//7F0C41E0: figure out y position -LW T4,00BC (SP) ;T4=txt.height -SRA T5,T4,0x1 ;T5=height/2 -SUBU T6,V0,T5 ;T6=ypos for centering text -ADDIU T7,T6,0016 ;T7=T6+16: ypos -BEQ S0,R0,7F0C426C ;branch if you didn't pause game -SW T7,00C8 (SP) ;SP+C8=ypos -//7F0C4208: display if you paused game -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 ;S0=text clip height -LUI T9,8004 -LUI T2,8004 -LW T2,0EAC (T2) ;T2=80040EAC: p->1st font table -LW T9,0EB0 (T9) ;T9=80040EB0: p->2nd font table -LUI T1,A0FF -LUI T3,0070 -ORI T3,T3,00A0 ;T3=007000A0: text colour (dark green) -ORI T1,T1,A0F0 ;T1=A0FFA0F0: text colour (light green) -SW T1,0018 (SP) ;SP+18= text foreground colour -SW T3,001C (SP) ;SP+1C= text background colour -OR A0,S1,R0 ;A0=p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->string -SW S0,0020 (SP) ;SP+20= clip height -SW V0,0024 (SP) ;SP+24= clip width -SW R0,0028 (SP) ;SP+28= y offset -SW R0,002C (SP) ;SP+2C= x offset -SW T2,0014 (SP) ;SP+14= p->1st font table -JAL 7F0AE6EC ;display 2-tone text -SW T9,0010 (SP) ;SP+10= p->2nd font table -BEQ R0,R0,7F0C42D0 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C426C: display if hadn't paused game -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 ;S0= text clip height -LUI T5,8004 -LUI T6,8004 -LW T6,0EAC (T6) ;T6=80040EAC: p->1st font table -LW T5,0EB0 (T5) ;T5=80040EB0: p->2nd font table -LUI T7,00FF -ORI T7,T7,00B0 ;T7=00FF00B0: text colour (pure green) -SW T7,0018 (SP) ;SP+18= text colour -OR A0,S1,R0 ;A0=p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= clip height -SW V0,0020 (SP) ;SP+20= clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T6,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T5,0010 (SP) ;SP+10= p->2nd font table -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C42D0: left blinking arrow -JAL 7F0C1E8C ;TRUE when left enabled on MP menu page -NOP -BEQ V0,R0,7F0C4434 ;skip if left not enabled -NOP -JAL 70004514 ;V0=viewport ulx -NOP -LUI V1,8009 -LW V1,C704 (V1) ;V1=8008C704: TRUE when game over -SLL T9,V0,0x10 -ADDIU T8,R0,000A -BEQL V1,R0,7F0C430C ;branch if game running -SW R0,0050 (SP) -BEQ R0,R0,7F0C430C -SW T8,0050 (SP) ;SP+50= 0xA -//7F0C4308: -SW R0,0050 (SP) ;SP+50= 0 -LW T1,00A8 (SP) ;T1=2 player offset -LW T4,0050 (SP) ;T4=game over offset -SRA T2,T9,0x10 ;T2=view.ulx -ADDU T3,T2,T1 ;T3=xpos+offset -SUBU A0,T3,T4 ;A0=xpos+offset-width -ADDIU A0,A0,0028 ;A0+=screenpos -BEQ V1,R0,7F0C4334 ;branch if game running -SW A0,00CC (SP) ;SP+CC=xpos -//7F0C432C: game over... -ADDIU A0,A0,FFF8 ;A0-=8 -SW A0,00CC (SP) ;SP+CC=xpos -//7F0C4334: -JAL 70004524 ;V0=view.uly -NOP -LUI T6,8009 -LW T6,C708 (T6) ;T6=8008C708: TRUE if blinking -ADDIU T5,V0,0016 ;T5=ypos+16 -SW T5,00C8 (SP) ;SP+C8=ypos -BNEZ T6,7F0C43C0 ;branch if set -NOP -//7F0C4354: display normally -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 ;S0= text clip height -LUI T8,8004 -LUI T9,8004 -LW T9,0EAC (T9) ;T9=80040EAC: p->1st font table -LW T8,0EB0 (T8) ;T8=80040EB0: p->2nd font table -LUI T2,00FF -ORI T2,T2,00B0 ;T2=00FF00B0: text colour (pure green) -LUI A3,8006 -ADDIU A3,A3,BC28 ;A3=8005BC28: "<" [3C00] -SW T2,0018 (SP) ;SP+18=colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -SW S0,001C (SP) ;SP+1C=text clip height -SW V0,0020 (SP) ;SP+20=text clip width -SW R0,0024 (SP) ;SP+24=y offset -SW R0,0028 (SP) ;SP+28=x offset -SW T9,0014 (SP) ;SP+14=p->1st font table -JAL 7F0ADABC ;display monotone text -SW T8,0010 (SP) ;SP+10=p->2nd font table -BEQ R0,R0,7F0C4434 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C43C0: display highlighted -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 ;S0= text clip height -LUI T3,8004 -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LW T3,0EB0 (T3) ;T3=80040EB0: p->2nd font table -LUI T5,A0FF -LUI T6,0070 -ORI T6,T6,00A0 ;T6=007000A0: text colour (dark green) -ORI T5,T5,A0F0 ;T5=A0FFA0F0: text colour (light green) -LUI A3,8006 -ADDIU A3,A3,BC28 ;A3=8005BC28: "<" [3C00] -SW T5,0018 (SP) ;SP+18= text foreground colour -SW T6,001C (SP) ;SP+1C= text background colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -SW S0,0020 (SP) ;SP+20=text clip height -SW V0,0024 (SP) ;SP+24=text clip width -SW R0,0028 (SP) ;SP+28=y offset -SW R0,002C (SP) ;SP+2C=x offset -SW T4,0014 (SP) ;SP+14=p->1st font table -JAL 7F0AE6EC ;display 2-tone text -SW T3,0010 (SP) ;SP+10=p->2nd font table -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4434: right blinking arrow -JAL 7F0C1E20 ;TRUE when right enabled on MP menu page -NOP -BEQ V0,R0,7F0C4598 ;branch if not enabled -NOP -JAL 70004514 ;V0=viewport ulx -NOP -LUI V1,8009 -LW V1,C704 (V1) ;V1=8008C704: TRUE when game over -SLL T9,V0,0x10 -ADDIU T7,R0,000A -BEQL V1,R0,7F0C4470 ;branch if still playing -SW R0,0050 (SP) -BEQ R0,R0,7F0C4470 -SW T7,0050 (SP) ;SP+50=A: game over -//7F0C446C: still playing -SW R0,0050 (SP) ;SP+50=0: no offset -LW T8,0050 (SP) -LW T3,00A8 (SP) ;T3=2 player offset -SRA T2,T9,0x10 ;T2=xpos -ADDU T1,T8,T2 ;T1=xpos+offset -ADDU A0,T1,T3 ;A0=xpos+offset+playeroffset -ADDIU A0,A0,0070 ;A0+=70: xpos for text -BEQ V1,R0,7F0C4498 ;branch when game running -SW A0,00CC (SP) -ADDIU A0,A0,0008 ;A0+=8: offset for game running -SW A0,00CC (SP) ;SP+CC=xpos -//7F0C4498: get y position and guess if blinking -JAL 70004524 ;V0=view.uly -NOP -LUI T5,8009 -LW T5,C708 (T5) ;T5=8008C708: TRUE if blinking -ADDIU T4,V0,0016 ;T4=ypos+14 -SW T4,00C8 (SP) ;SP+C8=ypos -BNEZ T5,7F0C4524 ;branch if set -NOP -//7F0C44B8: normal display -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 ;S0=text clip height -LUI T7,8004 -LUI T9,8004 -LW T9,0EAC (T9) ;T9=80040EAC: p->1st font table -LW T7,0EB0 (T7) ;T7=80040EB0: p->2nd font table -LUI T8,00FF -ORI T8,T8,00B0 ;T8=00FF00B0: green -LUI A3,8006 -ADDIU A3,A3,BC2C ;A3=8005BC2C: ">" -SW T8,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T9,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T7,0010 (SP) ;SP+10= p->2nd font table -BEQ R0,R0,7F0C4598 -OR S1,V0,R0 -//7F0C4524: blinking display -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 ;S0=text clip height -LUI T1,8004 -LUI T3,8004 -LW T3,0EAC (T3) ;T3=80040EAC: p->1st font table -LW T1,0EB0 (T1) ;T1=80040EB0: p->2nd font table -LUI T4,A0FF -LUI T5,0070 -ORI T5,T5,00A0 ;T5=007000A0: text colour (dark green) -ORI T4,T4,A0F0 ;T4=A0F0A0FF: text colour (light green) -LUI A3,8006 -ADDIU A3,A3,BC2C ;A3=8005BC2C: ">" -SW T4,0018 (SP) ;SP+18= foreground colour -SW T5,001C (SP) ;SP+1C= background colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -SW S0,0020 (SP) ;SP+20= text clip height -SW V0,0024 (SP) ;SP+24= text clip width -SW R0,0028 (SP) ;SP+28= y offset -SW R0,002C (SP) ;SP+2C= x offset -SW T3,0014 (SP) ;SP+14= p->1st font table -JAL 7F0AE6EC ;display 2-tone text -SW T1,0010 (SP) ;SP+10= p->2nd font table -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4598: specific page displays -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -ADDIU AT,R0,0003 -LW T6,00D0 (SP) ;T6=SP+D0: #players -LW V0,29C8 (V1) ;V0=BONDdata+29C8: selected page in menu -BEQ V0,AT,7F0C45BC ;branch if scores page (3) -ADDIU AT,R0,0004 -BNEL V0,AT,7F0C4C60 ;branch if not pause page (4) -ADDIU AT,R0,0002 -//7F0C45BC: page 3--scores -BLEZ T6,7F0C45F4 ;branch if stupid #players -OR A0,R0,R0 ;A0=playercount -ADDIU V1,SP,0094 ;V1=SP+94: buffer for scores -//7F0C45C8: collect scores -SW V1,0044 (SP) ;SP+44=V1: buffer for scores -JAL 7F0C38D8 ;V0=score (in NSNA: V0=score, V1=time) -SW A0,0090 (SP) ;SP+90= count -ADDU V0,V0,V1 ;V0=total score in NSNA -LW V1,0044 (SP) ;V1=buffer -LW A0,0090 (SP) ;A0=count -SW V0,0000 (V1) ;buffer+0= score -LW T7,00D0 (SP) ;T7=#players -ADDIU A0,A0,0001 ;A0++ count++ -BNE A0,T7,7F0C45C8 ;loop for each player -ADDIU V1,V1,0004 ;V1+=4 next slot in buffer -//7F0C45F4: -LUI A0,8009 -LW A0,C704 (A0) ;A0=8008C704: TRUE when game over -SLTIU T9,A0,0001 ;TRUE if game running -BEQ T9,R0,7F0C4618 ;branch if game over -OR A0,T9,R0 ;A0=TRUE if game running -LUI A0,8009 -LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped -SLTIU T8,A0,0001 ;TRUE if playing -OR A0,T8,R0 ;A0=!play -//7F0C4618: determine if displaying scores... -JAL 7F0C3F5C ;V0=TRUE if rank to be displayed on MP menu -NOP -BEQ V0,R0,7F0C46F4 ;skip if not displaying -ADDIU A0,SP,00AC ;A0=SP+AC: @string buffer -//7F0C4628: display scores -JAL 7F0C3C94 ;print rank of player A1 to A0 -LW A1,00D4 (SP) ;A1=SP+D4: cur.player# -LUI T2,8004 -LW T2,0EAC (T2) ;T2=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=SP=BC: @height -ADDIU A1,SP,00C0 ;A1=SP+C0: @width -ADDIU A2,SP,00AC ;A2=SP+AC: p->string -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T1,00A8 (SP) ;T1=2 player offset -LW T4,00C0 (SP) ;T4=width -ADDU T3,V0,T1 ;T3=xpos -SRA T5,T4,0x1 ;T5=width/2 -SUBU A0,T3,T5 ;A0=xpos of text centered -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T6,00BC (SP) ;T6=height -SRA T7,T6,0x1 ;T7=height/2 -SUBU T9,V0,T7 ;T9=ypos of text centered -ADDIU T8,T9,0025 ;T8=ypos+25 -JAL 7000441C ;V0= text clip width -SW T8,00C8 (SP) ;SP+C8= ypos -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 ;S0=text clip height -LUI T1,8004 -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LW T1,0EB0 (T1) ;T1=80040EB0: p->2nd font table -LUI T3,00FF -ORI T3,T3,00B0 ;T3=00FF00B0: green -SW T3,0018 (SP) ;SP+18=colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -ADDIU A3,SP,00AC ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T4,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T1,0010 (SP) ;SP+10= p->2nd font table -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C46F4: -LUI A0,8009 -LW A0,C704 (A0) ;A0=8008C704: TRUE when game over -SLTIU T5,A0,0001 ;!game over -BEQ T5,R0,7F0C4718 ;branch if game over -OR A0,T5,R0 ;A0=0 -LUI A0,8009 -LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped -SLTIU T6,A0,0001 ;!play stopped -OR A0,T6,R0 ;A0=!play stopped -//7F0C4718: display normal text... -JAL 7F0C3FCC ;V0= TRUE if displaying score in MP menu -NOP -BEQ V0,R0,7F0C4C50 ;skip if not displaying score -NOP -NOP -//7F0C4728: -NOP -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01B ;A0=ID A01B: "SCORES" -LUI T7,8004 -LW T7,0EAC (T7) ;T7=80040EAC: p->1st font table -LUI A3,8004 -SW V0,00A4 (SP) ;SP+A4=p->txt -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=@height -ADDIU A1,SP,00C0 ;A1=@width -OR A2,V0,R0 ;A2=V0: p->txt -SW R0,0014 (SP) ;SP+14=0 -JAL 7F0AE98C ;proportions of string A2 -SW T7,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T9,00A8 (SP) ;T9=2 player offset -LW T2,00C0 (SP) ;T2=width -ADDU T8,V0,T9 ;T8=xpos+offset -SRA T1,T2,0x1 ;T1=width/2 -SUBU A0,T8,T1 ;A0=xpos of centered text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T4,00BC (SP) ;T4=height -SRA T3,T4,0x1 ;T3=height/2 -SUBU T5,V0,T3 ;T5=ypos of centered text -ADDIU T6,T5,0035 ;T6=ypos+35 -JAL 7000441C ;V0= text clip width -SW T6,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T7,R0 ;S0=text clip height -LUI T9,8004 -LUI T2,8004 -LW T2,0EAC (T2) ;T2=80040EAC: p->1st font table -LW T9,0EB0 (T9) ;T9=80040EB0: p->2nd font table -LUI T8,00FF -ORI T8,T8,00B0 ;T8=00FF00B0: green -SW T8,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T2,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) ;SP+10= p->2nd font table -//7F0C47FC: retrieve score -JAL 7F01476C ;V0=scenario::score -OR S1,V0,R0 ;S1=V0: p->DL -SLL V0,V0,0x10 ;V0*=0x10000 -SW V0,0080 (SP) ;SP+80= time * 0x10000 -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C4894: -LW T4,00D0 (SP) ;T4=SP+D0: #players -ADDIU AT,R0,0002 -BNE T4,AT,7F0C49DC ;branch if 3-4 player -NOP -//7F0C48A8: 2 player score display -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T3,R0 ;S0=xpos -LW T0,00D4 (SP) ;T0=cur.player# -SLL V1,V0,0x10 -SRA T5,V1,0x10 -OR V1,T5,R0 ;V1=ypos -LW A2,0080 (SP) ;A2=time -BNEZ T0,7F0C48E4 ;branch if not player 1 -SW A2,0050 (SP) ;SP+50= time -ADDIU T6,R0,0001 -SB T6,0050 (SP) ;SP+50= 1 -//7F0C48E4: -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C490C: -LUI A2,8008 -LBU A2,9F59 (A2) ;A2=player 1's team flag -SB A2,0053 (SP) ;SP+53= player 1's team flag -LW T8,00A8 (SP) ;T8=2 player offset -LW T1,0050 (SP) ;T1=3bit colour code -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T8 ;A1=xpos+offset -ADDIU A1,A1,0050 ;A1+=50: xpos -ADDIU A2,V1,0046 ;A2=ypos+46 -LW A3,0094 (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T1,0010 (SP) ;SP+10= colour type -//7F0C493C: handle next row - player 2 -JAL 70004514 ;V0=viewport ulx -OR S1,V0,R0 ;S1=V0: p->DL -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T4,R0 ;S0=xpos -LW A0,00D4 (SP) ;A0=cur.player# -SLL V1,V0,0x10 -SRA T3,V1,0x10 -ADDIU AT,R0,0001 -OR V1,T3,R0 ;V1=ypos -LW A2,0080 (SP) ;A2=time -BNE A0,AT,7F0C4978 ;branch if not player 2 -SW A2,0050 (SP) ;SP+50= time -SB AT,0050 (SP) ;SP+50=1 -//7F0C4978: -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C49A4: display player 2's score -LUI A2,8008 -LBU A2,9FC9 (A2) ;A2=80079FC9: player 2's team flag -SB A2,0053 (SP) ;SP+53= colour -LW T8,00A8 (SP) ;T8=2 player offset -LW T1,0050 (SP) ;T1= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T8 ;A1=xpos+offset -ADDIU A1,A1,0050 ;A1=x pos. -ADDIU A2,V1,0056 ;A2=y pos. -LW A3,0098 (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T1,0010 (SP) ;SP+10= colour -BEQ R0,R0,7F0C4C50 -OR S1,V0,R0 -//7F0C49DC: 3-4 player score display -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T4,R0 ;S0=xpos -LW T0,00D4 (SP) ;T0=cur.player# -SLL V1,V0,0x10 -SRA T3,V1,0x10 -OR V1,T3,R0 ;V1=ypos -LW A2,0080 (SP) ;A2= time -BNEZ T0,7F0C4A18 ;branch if not player 1 -SW A2,0050 (SP) ;SP+50= time -ADDIU T1,R0,0001 -SB T1,0050 (SP) ;SP+50= 1 -//7F0C4A18: -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C4A40: display player 1 score -LUI A2,8008 -LBU A2,9F59 (A2) ;A2=80079F59: pl1.stats::scenario flags -SB A2,0053 (SP) ;SP+53= teamcolour -LW T2,00A8 (SP) ;T2=2 player offset -LW T8,0050 (SP) ;T8=colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T2 ;A1=xpos+offset -ADDIU A1,A1,0040 ;A1+=40: xpos -ADDIU A2,V1,0046 ;A2=ypos+46 -LW A3,0094 (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T8,0010 (SP) ;SP+10= colour -//7F0C4A70: display player 2 score -JAL 70004514 ;V0=viewport ulx -OR S1,V0,R0 ;S1=V0: p->DL -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T1,R0 ;S0=xpos -LW T0,00D4 (SP) ;T0=cur.player# -SLL V1,V0,0x10 -SRA T4,V1,0x10 -ADDIU AT,R0,0001 -OR V1,T4,R0 ;V1=ypos -LW A2,0080 (SP) ;A2=time -BNE T0,AT,7F0C4AAC ;branch if not player 2 -SW A2,0050 (SP) ;SP+50= time -SB AT,0050 (SP) ;SP+50= 1 -//7F0C4AAC: -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C4AD8: -LUI A2,8008 -LBU A2,9FC9 (A2) ;A2=80079FC9: pl2.stats::scenario flags -SB A2,0053 (SP) ;SP+53=teamcolour -LW T6,00A8 (SP) ;T6=2 player offset -LW T2,0050 (SP) ;T2=colour -OR A0,S1,R0 -ADDU A1,S0,T6 ;A1=xpos+offset -ADDIU A1,A1,0060 ;A1+=60: xpos -ADDIU A2,V1,0046 ;A2=ypos+46 -LW A3,0098 (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T2,0010 (SP) ;SP+10= colour -//7F0C4B08: display player 3 score -JAL 70004514 ;V0=viewport ulx -OR S1,V0,R0 ;S1=V0: p->DL -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T8,R0 ;S0=xpos -LW T0,00D4 (SP) ;T0=cur.player# -SLL V1,V0,0x10 -SRA T1,V1,0x10 -ADDIU AT,R0,0002 -OR V1,T1,R0 ;V1=ypos -LW A2,0080 (SP) ;A2=time -BNE T0,AT,7F0C4B44 ;branch if not player 3 -SW A2,0050 (SP) ;SP+50=time -SB AT,0050 (SP) ;SP+50= 2 -//7F0C4B44: -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C4B70: -LUI A2,8008 -LBU A2,A039 (A2) ;A2=8007A039: pl3.stats::scenario flags -SB A2,0053 (SP) ;SP+53= teamcolour -LW T9,00A8 (SP) ;T9=2 player offset -LW T6,0050 (SP) ;T6=colour -OR A0,S1,R0 ;A0=p->DL -ADDU A1,S0,T9 ;A1=xpos + pl.offset -ADDIU A1,A1,0040 ;A1+=40: xpos -ADDIU A2,V1,0056 ;A2=ypos+56 -LW A3,009C (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T6,0010 (SP) ;SP+10= colour -//7F0C4BA0: determine if four players -LW T2,00D0 (SP) ;T2=#players -ADDIU AT,R0,0004 -OR S1,V0,R0 ;S1=V0: p->DL -BNE T2,AT,7F0C4C50 ;skip if not 4 players -NOP -//7F0C4BB4: display player 4 score -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T8,R0 ;S0=xpos -LW A0,00D4 (SP) ;A0=cur.player# -SLL V1,V0,0x10 -SRA T1,V1,0x10 -ADDIU AT,R0,0003 -OR V1,T1,R0 ;V1=ypos -LW A2,0080 (SP) ;A2=time -BNE A0,AT,7F0C4BF0 ;branch if not player 4 -SW A2,0050 (SP) ;SP+50=time -SB AT,0050 (SP) ;SP+50= 3 -//7F0C4BF0: -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C4C1C: -LUI A2,8008 -LBU A2,A0A9 (A2) ;A2=8007A0A9: pl4.stats::scenario flags -SB A2,0053 (SP) ;SP+53= teamscore -LW T6,00A8 (SP) ;T6=2 player offset -LW T2,0050 (SP) ;T2=colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T6 ;A1=xpos+pl.offset -ADDIU A1,A1,0060 ;A1+=60: xpos -ADDIU A2,V1,0056 ;A2=ypos+56 -LW A3,00A0 (SP) ;A3=arguments (score) -JAL 7F0C35A0 ;display player data to MP menu -SW T2,0010 (SP) ;SP+10= colour -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4C50: return -LUI V1,8008 -BEQ R0,R0,7F0C5B44 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -//7F0C4C5C: page 2--player kills -ADDIU AT,R0,0002 -BNE V0,AT,7F0C50D4 ;branch if not player kills page -LUI A0,8009 -LW A0,C704 (A0) ;A0=8008C704: TRUE when game over -SLTIU T8,A0,0001 ;!game over -BEQ T8,R0,7F0C4C88 ;branch if game over -OR A0,T8,R0 ;A0=0 -LUI A0,8009 -LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped -SLTIU T1,A0,0001 ;!stopped -OR A0,T1,R0 ;A0=!stopped -//7F0C4C88: determine if displaying text -JAL 7F0C3F5C ;V0=TRUE if rank to be displayed on MP menu -NOP -BEQ V0,R0,7F0C4D64 ;skip if rank not displayed -ADDIU A0,SP,00AC ;A0=SP+AC: p->text buffer -//7F0C4C98: display rank -JAL 7F0C3C94 ;print rank of player A1 to A0 -LW A1,00D4 (SP) ;A1=cur.player# -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=@height -ADDIU A1,SP,00C0 ;A1=@width -ADDIU A2,SP,00AC ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) ;SP+10= p->2nd font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T3,00A8 (SP) ;T3=2 player offset -LW T7,00C0 (SP) ;T7=width -ADDU T5,V0,T3 ;T5=xpos+pl.offset -SRA T9,T7,0x1 ;T9=width/2: centerpoint -SUBU A0,T5,T9 ;A0=xpos to center text -ADDIU A0,A0,0050 ;A0+=50 -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T6,00BC (SP) ;T6=height -SRA T2,T6,0x1 ;T2=height/2: centerpoint -SUBU T8,V0,T2 ;T8=ypos to center text -ADDIU T1,T8,0025 ;T1=ypos+25 -JAL 7000441C ;V0= text clip width -SW T1,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 ;S0=text clip height -LUI T3,8004 -LUI T7,8004 -LW T7,0EAC (T7) ;T7=80040EAC: p->1st font table -LW T3,0EB0 (T3) ;T3=80040EB0: p->2nd font table -LUI T5,00FF -ORI T5,T5,00B0 ;T5=00FF00B0: green -SW T5,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -ADDIU A3,SP,00AC ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T7,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T3,0010 (SP) ;SP+10= p->2nd font table -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4D64: display "P# KILLS" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01C ;A0=ID A01C: "P" -ORI A0,R0,A01D ;A0=ID A01D: "KILLS" -JAL 7F0C1DD8 ;V0=p->text A0 -SW V0,004C (SP) ;SP+4C= p->"P" -LW A3,00D4 (SP) ;A3=cur.player# -LUI A1,8006 -ADDIU A1,A1,BC30 ;A1=8005BC30: "%s%d %s" -LW A2,004C (SP) ;A2=p->"P" -ADDIU A0,SP,00AC ;A0=SP+AC: p->buffer -SW V0,0010 (SP) ;SP+10= p->"KILLS" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A3,A3,0001 ;A3++: cur.player++ -LUI T9,8004 -LW T9,0EAC (T9) ;T9=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=SP+BC: @height -ADDIU A1,SP,00C0 ;A1=SP+C0: @width -ADDIU A2,SP,00AC ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T9,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T6,00A8 (SP) ;T6=2 player offset -LW T8,00C0 (SP) ;T8=width -ADDU T2,V0,T6 ;T2=xpos+pl.offset -SRA T1,T8,0x1 ;T1=width/2: centerpoint -SUBU A0,T2,T1 ;A0=xpos of centered text -ADDIU A0,A0,0050 ;A0+=50 -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T4,00BC (SP) ;T4=height -SRA T3,T4,0x1 ;T3=height/2: centerpoint -SUBU T7,V0,T3 ;T7=ypos of centered text -ADDIU T5,T7,0035 ;T5=ypos+35 -JAL 7000441C ;V0= text clip width -SW T5,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 ;S0= text clip height -LUI T6,8004 -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LW T6,0EB0 (T6) ;T6=80040EB0: p->2nd font table -LUI T2,00FF -ORI T2,T2,00B0 ;T2=00FF00B0: green -SW T2,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -ADDIU A3,SP,00AC ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T8,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T6,0010 (SP) ;SP+10= p->2nd font table -//7F0C4E54: 2 or 4 player display -LW T1,00D0 (SP) ;T1=SP+D0: #players -OR S1,V0,R0 ;S1=V0: p->DL -ADDIU AT,R0,0002 -BNE T1,AT,7F0C4F34 ;branch if 3-4 players -LW V0,00D4 (SP) ;V0=cur.player# -//7F0C4E68: 2 player::player 1 KILLS display -LW V0,00D4 (SP) ;V0=cur.player# -BEQL V0,R0,7F0C4ED4 ;skip if player 1 -ADDIU AT,R0,0001 -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T4,R0 ;S0=xpos -LW T7,00D4 (SP) ;T7=cur.player# -LW T3,00A8 (SP) ;T3=2 player offset -LUI A3,8008 -SLL T5,T7,0x3 -SUBU T5,T5,T7 -SLL T5,T5,0x4 ;T5=player# * 0x70 -ADDU A3,A3,T5 -ADDU A1,S0,T3 ;A1=xpos+pl.offset -ADDIU A1,A1,0050 ;A1+=50 -LW A3,9F14 (A3) ;A3=80079F14+offset: #player1 kills -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A2,V0,0046 ;A2=ypos+46 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10: colour (black) -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4EC8: 2 player::player 2 KILLS display -LW V0,00D4 (SP) ;V0=cur.player# -ADDIU AT,R0,0001 -BEQ V0,AT,7F0C50C8 ;skip if player 2 -SLL T9,V0,0x3 -SUBU T9,T9,V0 -LUI T6,8008 -ADDIU T6,T6,9EF0 ;T6=80079EF0: pl1::statistics -SLL T9,T9,0x4 ;T9=player# * 0x70 -ADDU T8,T9,T6 ;T8=statistics+ pl.offset -JAL 70004514 ;V0=viewport ulx -SW T8,0044 (SP) ;SP+44= cur.pl::statistics -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T2,R0 ;S0=xpos -LW T1,00A8 (SP) ;T1=2 player offset -LW T4,0044 (SP) ;T4=cur.pl::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T1 ;A1=xpos+pl.offset -LW A3,0028 (T4) ;A3=#player 2 kills -SW R0,0010 (SP) ;SP+10= colour -ADDIU A1,A1,0050 ;A1+=50: xpos -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 ;A2=ypos+56 -BEQ R0,R0,7F0C50C8 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4F34: 4 player::player 1 KILLS display -BEQL V0,R0,7F0C4F98 ;skip if player 1 -ADDIU AT,R0,0001 -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T3,R0 ;S0=xpos -LW T5,00D4 (SP) ;T5=cur.player# -LW T7,00A8 (SP) ;T7=2 player offset -LUI A3,8008 -SLL T9,T5,0x3 -SUBU T9,T9,T5 -SLL T9,T9,0x4 ;T9=player# * 0x70 -ADDU A3,A3,T9 ;A3=statistics + player offset -ADDU A1,S0,T7 ;A1=xpos+offset -ADDIU A1,A1,0040 ;A1+=40: xpos -LW A3,9F14 (A3) ;A3=#player 1 kills -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A2,V0,0046 ;A2=ypos+46 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10= black -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4F90: 4 player::player 2 KILLS display -LW V0,00D4 (SP) ;V0=cur.player# -ADDIU AT,R0,0001 -BEQ V0,AT,7F0C4FF8 ;skip if player 2 -SLL T6,V0,0x3 -SUBU T6,T6,V0 -LUI T8,8008 -ADDIU T8,T8,9EF0 ;T8=80079EF0: p->statistics -SLL T6,T6,0x4 ;T6=player# * 0x70 -ADDU T2,T6,T8 ;T2=p->player#::statistics -JAL 70004514 ;V0=viewport ulx -SW T2,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T1,R0 ;S0=xpos -LW T4,00A8 (SP) ;T4=2 player offset -LW T3,0044 (SP) ;T3= p->pl#::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T4 ;A1=xpos+offset -LW A3,0028 (T3) ;A3=#player2 kills -SW R0,0010 (SP) ;SP+10= colour (black) -ADDIU A1,A1,0060 ;A1+=60: xpos -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 ;A2=ypos+46 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C4FF4: 4 player::player 3 KILLS display -LW V0,00D4 (SP) ;V0=cur.player# -ADDIU AT,R0,0002 -BEQ V0,AT,7F0C505C ;skip if player 3 -SLL T7,V0,0x3 -SUBU T7,T7,V0 -LUI T5,8008 -ADDIU T5,T5,9EF0 ;T5=80079EF0: p->statistics -SLL T7,T7,0x4 ;T7=player# * 0x70 -ADDU T9,T7,T5 ;T9=statistics + pl.offset -JAL 70004514 ;V0=viewport ulx -SW T9,0044 (SP) ;SP+44=p->pl#::statistics -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T6,R0 ;S0=xpos -LW T8,00A8 (SP) ;T8=2 player offset -LW T2,0044 (SP) ;T2=p->pl#::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T8 ;A1=xpos+offset -LW A3,002C (T2) ;A3=#player3 kills -SW R0,0010 (SP) ;SP+10= colour (black) -ADDIU A1,A1,0040 ;A1+=40: xpos -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 ;A2=ypos+56 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5058: 4 player::player 4 KILLS display -LW V0,00D4 (SP) ;V0=cur.player# -LW T1,00D0 (SP) ;T1=#players -ADDIU AT,R0,0004 -BNE T1,AT,7F0C50C8 ;skip if not 4 players -ADDIU AT,R0,0003 -BEQ V0,AT,7F0C50C8 ;skip if player 4 -SLL T4,V0,0x3 -SUBU T4,T4,V0 -LUI T3,8008 -ADDIU T3,T3,9EF0 ;T3=80079EF0: p->statistics -SLL T4,T4,0x4 ;T4=player# * 0x70 -ADDU T7,T4,T3 ;T7=statistics + pl.offset -JAL 70004514 ;V0=viewport ulx -SW T7,0044 (SP) ;SP+44=p->pl#::statistics -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T5,R0 ;S0=xpos -LW T9,00A8 (SP) ;T9=2 player offset -LW T6,0044 (SP) ;T6=p->pl#::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T9 ;A1=xpos+offset -LW A3,0030 (T6) ;A3=#player4 kills -SW R0,0010 (SP) ;SP+10= colour (black) -ADDIU A1,A1,0060 ;A1+=60: xpos -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 ;A2=ypos+56 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C50C8: -LUI V1,8008 -BEQ R0,R0,7F0C5B44 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -//7F0C50D4: page 1--player losses -ADDIU AT,R0,0001 -BNE V0,AT,7F0C5780 ;branch if not player losses menu (1) -LUI A0,8009 -LW A0,C704 (A0) ;A0=8008C704: TRUE when game over -SLTIU T8,A0,0001 ;T8=!gameover -BEQ T8,R0,7F0C5100 ;branch if game over -OR A0,T8,R0 ;A0=0 -LUI A0,8009 -LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped -SLTIU T2,A0,0001 ;T2=!paused -OR A0,T2,R0 ;A0=!paused -//7F0C5100: -JAL 7F0C3F5C ;V0=TRUE if rank to be displayed on MP menu -NOP -BEQ V0,R0,7F0C51DC ;skip if rank not displayed -ADDIU A0,SP,00AC ;A0=SP+AC: p->buffer -//7F0C5110: display rank -JAL 7F0C3C94 ;print rank of player A1 to A0 -LW A1,00D4 (SP) ;A1=cur.player# -LUI T1,8004 -LW T1,0EAC (T1) ;T1=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=@height -ADDIU A1,SP,00C0 ;A1=@width -ADDIU A2,SP,00AC ;A2=p->text -SW R0,0014 (SP) ;SP+14=NULL -JAL 7F0AE98C ;proportions of string A2 -SW T1,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T4,00A8 (SP) ;T4=2 player offset -LW T7,00C0 (SP) ;T7=width -ADDU T3,V0,T4 ;T3=xpos+offset -SRA T5,T7,0x1 ;T5=width/2: centerpoint -SUBU A0,T3,T5 ;A0=xpos for centered text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T9,00BC (SP) ;T9=height -SRA T6,T9,0x1 ;T6=height/2: centerpoint -SUBU T8,V0,T6 ;T8=ypos for centered text -ADDIU T2,T8,0025 ;T2=ypos+25 -JAL 7000441C ;V0= text clip width -SW T2,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 ;S0= text clip height -LUI T4,8004 -LUI T7,8004 -LW T7,0EAC (T7) ;T7=80040EAC: p->1st font table -LW T4,0EB0 (T4) ;T4=80040EB0: p->2nd font table -LUI T3,00FF -ORI T3,T3,00B0 ;T3=00FF00B0: green -SW T3,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -ADDIU A3,SP,00AC ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T7,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T4,0010 (SP) ;SP+10= p->2nd font table -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C51DC: display "P# LOSSES" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A01C ;A0=ID A01C: "P" -ORI A0,R0,A01E ;A0=ID A01E: "LOSSES" -JAL 7F0C1DD8 ;V0=p->text A0 -SW V0,004C (SP) ;SP+4C= p->"P" -LW A3,00D4 (SP) ;A3=cur.player# -LUI A1,8006 -ADDIU A1,A1,BC38 ;A1=8005BC38: "%s%d %s" -LW A2,004C (SP) ;A2=p->"P" -ADDIU A0,SP,00AC ;A0=SP+AC: p->buffer -SW V0,0010 (SP) ;SP+10= p->"LOSSES" -JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -ADDIU A3,A3,0001 ;A3++ cur.player#++ -LUI T5,8004 -LW T5,0EAC (T5) ;T5=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=@height -ADDIU A1,SP,00C0 ;A1=@width -ADDIU A2,SP,00AC ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T9,00A8 (SP) ;T9=2 player offset -LW T8,00C0 (SP) ;T8=width -ADDU T6,V0,T9 ;T6=xpos+offset -SRA T2,T8,0x1 ;T2=width/2: centerpoint -SUBU A0,T6,T2 ;A0=xpos to center text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T1,00BC (SP) ;T1=height -SRA T4,T1,0x1 ;T4=height/2: centerpoint -SUBU T7,V0,T4 ;T7=ypos to center text -ADDIU T3,T7,0035 ;T3=ypos+35 -JAL 7000441C ;V0= text clip width -SW T3,00C8 (SP) ;SP+C8= ypos -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 ;S0= text clip height -LUI T9,8004 -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LW T9,0EB0 (T9) ;T9=80040EB0: p->2nd font table -LUI T6,FF40 -ORI T6,T6,40B0 ;T6=FF4040B0: red -SW T6,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -ADDIU A3,SP,00AC ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T8,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) ;SP+10= p->2nd font table -//7F0C52D0: determine # pl -LW T2,00D0 (SP) ;T2=#players -ADDIU AT,R0,0002 -OR S1,V0,R0 ;S1=V0: p->DL -BNE T2,AT,7F0C5468 ;branch if 3-4 players -LW T8,00D4 (SP) ;T8=cur.player# -//7F0C52E4: 2 player::player 1 LOSSES display -LW V0,00D4 (SP) ;V0=cur.player# -LUI T5,8008 -BEQ V0,R0,7F0C5348 ;skip if player 1 -NOP -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T1,R0 ;S0=xpos -LW T7,00D4 (SP) ;T7=cur.player# -LW T4,00A8 (SP) ;T4=2 player offset -LUI A3,8008 -SLL T3,T7,0x2 ;T3=player#->offset -ADDU A3,A3,T3 ;A3=statistics+pl.offset -ADDU A1,S0,T4 ;A1=xpos+offset -ADDIU A1,A1,0050 ;A1+=50: xpos -LW A3,9F14 (A3) ;A3=80079F14+offset: player#losses -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A2,V0,0046 ;A2=ypos+46 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10= colour (black) -OR S1,V0,R0 ;S1=V0: p->DL -BEQ R0,R0,7F0C53A8 -LW V0,00D4 (SP) ;V0=cur.player# -//7F0C5348: 2 player::player 1 suicide display -LW T5,9F14 (T5) ;A3=80079F14+offset: player1.losses -BLEZL T5,7F0C53AC ;skip if no suicides -ADDIU AT,R0,0001 -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T9,R0 ;S0=xpos -LW T6,00D4 (SP) ;T6=cur.player# -LW T8,00A8 (SP) ;T8=2 player offset -LUI A3,8008 -SLL T2,T6,0x2 ;T2=player#->offset -ADDU A3,A3,T2 ;A3=statistics+pl.offset -ADDIU T1,R0,0004 -ADDU A1,S0,T8 ;A1=xpos+offset -ADDIU A1,A1,0050 ;A1+=50: xpos -SW T1,0010 (SP) ;SP+10=4: colour (red) -LW A3,9F14 (A3) ;A3=80079F14+offset: player#losses -OR A0,S1,R0 ;A0=S1: p->DL -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 ;A2=ypos+46 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C53A4: 2 player::player 2 LOSSES display -LW V0,00D4 (SP) ;V0=cur.player# -ADDIU AT,R0,0001 -BEQ V0,AT,7F0C5408 ;skip if player 2 -LUI T6,8008 -LUI T7,8008 -ADDIU T7,T7,9EF0 ;T7=80079EF0: statistics -SLL T4,V0,0x2 ;T4=player#->offset -ADDU T3,T4,T7 ;T3=statistics+offset -JAL 70004514 ;V0=viewport ulx -SW T3,0044 (SP) ;SP+44=p->pl#::statistics -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T5,R0 ;S0= xpos -LW T9,00A8 (SP) ;T9=2 player offset -LW T8,0044 (SP) ;T8=p->pl#::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T9 ;A1=xpos+offset -LW A3,0094 (T8) ;A3=statistics+94: nextpl.#pl1 kills -SW R0,0010 (SP) ;SP+10= colour (black) -ADDIU A1,A1,0050 ;A1=xpos+50 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 ;A2=ypos+56 -BEQ R0,R0,7F0C5774 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5408: 2 player::player 2 suicides display -LW T6,9F88 (T6) ;T6=80079F88: #pl2 suicides -LUI T1,8008 -ADDIU T1,T1,9EF0 ;T1=80079EF0: statistics -BLEZ T6,7F0C5774 ;skip if no suicides -SLL T2,V0,0x2 ;T2=player#->offset -ADDU T4,T2,T1 ;T4=offset+statistics -JAL 70004514 ;V0=viewport ulx -SW T4,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T7,R0 ;S0= xpos -LW T3,00A8 (SP) ;T3=2 player offset -LW T5,0044 (SP) ;T5=p->pl#::statistics -ADDIU T9,R0,0004 -ADDU A1,S0,T3 ;A1=xpos+offset -LW A3,0094 (T5) ;A3=stats+94: next player's player 2 kills -SW T9,0010 (SP) ;SP+10=4: colour (red) -ADDIU A1,A1,0050 ;A1+=50: xpos -OR A0,S1,R0 ;A0=S1: p->DL -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 ;A2=ypos+56 -BEQ R0,R0,7F0C5774 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5468: 4 player::player 1 LOSSES display -BEQ T8,R0,7F0C54C0 ;skip if player 1 -LUI T7,8008 -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T6,R0 ;S0= xpos -LW T1,00D4 (SP) ;T1=cur.player -LW T2,00A8 (SP) ;T2=2 player offset -LUI A3,8008 -SLL T4,T1,0x2 ;T4=player#->offset -ADDU A3,A3,T4 ;A3=statistics+playeroffset -ADDU A1,S0,T2 ;A1=xpos+offset -ADDIU A1,A1,0040 ;A1+=40: xpos -LW A3,9F14 (A3) ;A3=pl#::#playerXkills -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A2,V0,0046 ;A2=ypos+46 -JAL 7F0C35A0 ;display player data to MP menu -SW R0,0010 (SP) ;SP+10=colour (black) -BEQ R0,R0,7F0C551C -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C54C0: 4 player::player 1 suicides display -LW T7,9F14 (T7) ;T7=80079F14: pl1::#player1kills -BLEZL T7,7F0C5520 ;skip if none -LW T2,00D4 (SP) ;T2=cur.player -JAL 70004514 ;V0=viewport ulx -NOP -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T3,R0 ;S0= xpos -LW T9,00D4 (SP) ;T9=cur.player -LW T5,00A8 (SP) ;T5=2 player offset -LUI A3,8008 -SLL T8,T9,0x2 -ADDU A3,A3,T8 -ADDIU T6,R0,0004 -ADDU A1,S0,T5 -ADDIU A1,A1,0040 -SW T6,0010 (SP) -LW A3,9F14 (A3) -OR A0,S1,R0 ;A0=S1: p->DL -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -OR S1,V0,R0 ;S1=V0: p->DL -// 4 player::player 2 LOSSES display -LW T2,00D4 (SP) ;T2=cur.player -ADDIU AT,R0,0001 -LUI T8,8008 -BEQ T2,AT,7F0C5580 -SLL T1,T2,0x2 -LUI T4,8008 -ADDIU T4,T4,9EF0 -ADDU T7,T1,T4 -JAL 70004514 ;V0=viewport ulx -SW T7,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T3,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T3,R0 ;S0= xpos -LW T5,00A8 (SP) ;T5=2 player offset -LW T9,0044 (SP) ;T9=p->pl#::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T5 -LW A3,0094 (T9) -SW R0,0010 (SP) -ADDIU A1,A1,0060 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -BEQ R0,R0,7F0C55E0 -OR S1,V0,R0 ;S1=V0: p->DL -// 4 player::player 2 suicides display -LW T8,9F88 (T8) -LW T6,00D4 (SP) ;T6=cur.player -LUI T1,8008 -BLEZ T8,7F0C55E0 -SLL T2,T6,0x2 -ADDIU T1,T1,9EF0 -ADDU T4,T2,T1 -JAL 70004514 ;V0=viewport ulx -SW T4,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T7,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T7,R0 ;S0= xpos -LW T3,00A8 (SP) ;T3=2 player offset -LW T5,0044 (SP) ;T5=p->pl#::statistics -ADDIU T9,R0,0004 -ADDU A1,S0,T3 -LW A3,0094 (T5) -SW T9,0010 (SP) -ADDIU A1,A1,0060 -OR A0,S1,R0 ;A0=S1: p->DL -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0046 -OR S1,V0,R0 ;S1=V0: p->DL -// 4 player::player 3 LOSSES display -LW T8,00D4 (SP) ;T8=cur.player -ADDIU AT,R0,0002 -LUI T5,8008 -BEQ T8,AT,7F0C5644 -SLL T6,T8,0x2 -LUI T2,8008 -ADDIU T2,T2,9EF0 -ADDU T1,T6,T2 -JAL 70004514 ;V0=viewport ulx -SW T1,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T4,R0 ;S0= xpos -LW T7,00A8 (SP) ;T7=2 player offset -LW T3,0044 (SP) ;T3=p->pl#::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T7 -LW A3,0104 (T3) -SW R0,0010 (SP) -ADDIU A1,A1,0040 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -BEQ R0,R0,7F0C56A4 -OR S1,V0,R0 ;S1=V0: p->DL -// 4 player::player 3 suicides display -LW T5,9FFC (T5) -LW T9,00D4 (SP) ;T9=cur.player -LUI T6,8008 -BLEZ T5,7F0C56A4 -SLL T8,T9,0x2 -ADDIU T6,T6,9EF0 -ADDU T2,T8,T6 -JAL 70004514 ;V0=viewport ulx -SW T2,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T1,R0 ;S0= xpos -LW T4,00A8 (SP) ;T4=2 player offset -LW T7,0044 (SP) ;T7=p->pl#::statistics -ADDIU T3,R0,0004 -ADDU A1,S0,T4 -LW A3,0104 (T7) -SW T3,0010 (SP) -ADDIU A1,A1,0040 -OR A0,S1,R0 ;A0=S1: p->DL -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -OR S1,V0,R0 ;S1=V0: p->DL -// 4 player::player 4 LOSSES display -LW T5,00D0 (SP) -ADDIU AT,R0,0004 -LW T9,00D4 (SP) ;T9=cur.player -BNE T5,AT,7F0C5774 -ADDIU AT,R0,0003 -BEQ T9,AT,7F0C5714 -LUI T3,8008 -LUI T6,8008 -ADDIU T6,T6,9EF0 -SLL T8,T9,0x2 -ADDU T2,T8,T6 -JAL 70004514 ;V0=viewport ulx -SW T2,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T1,R0 ;S0= xpos -LW T4,00A8 (SP) ;T4=2 player offset -LW T7,0044 (SP) ;T7=p->pl#::statistics -OR A0,S1,R0 ;A0=S1: p->DL -ADDU A1,S0,T4 -LW A3,0174 (T7) -SW R0,0010 (SP) -ADDIU A1,A1,0060 -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 -BEQ R0,R0,7F0C5774 -OR S1,V0,R0 ;S1=V0: p->DL -// 4 player::player 4 suicides display -LW T3,A070 (T3) -LW T5,00D4 (SP) ;T5=cur.player -LUI T8,8008 -BLEZ T3,7F0C5774 -SLL T9,T5,0x2 -ADDIU T8,T8,9EF0 -ADDU T6,T9,T8 -JAL 70004514 ;V0=viewport ulx -SW T6,0044 (SP) ;SP+44= p->pl#::statistics -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 70004524 ;V0=view.uly -OR S0,T2,R0 ;S0= xpos -LW T1,00A8 (SP) ;T1=2 player offset -LW T4,0044 (SP) ;T4=p->pl#::statistics -ADDIU T7,R0,0004 -ADDU A1,S0,T1 -LW A3,0174 (T4) -SW T7,0010 (SP) ;SP+10=4: colour (red) -ADDIU A1,A1,0060 -OR A0,S1,R0 ;A0=S1: p->DL -JAL 7F0C35A0 ;display player data to MP menu -ADDIU A2,V0,0056 ;A2=ypos+56 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5774: -LUI V1,8008 -BEQ R0,R0,7F0C5B44 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -//7F0C5780: page 0--awards -BNEL V0,R0,7F0C5B48 -LW T7,29C8 (V1) ;T7=BONDdata+29C8: selected page in menu -LW T5,00D0 (SP) -LW T3,00A8 (SP) ;T3=2 player offset -SLTI AT,T5,0003 ;TRUE if pages 0-2 -BNEZ AT,7F0C57C0 ;branch if pages 0-2 -SW T3,0074 (SP) ;SP+74=2 player offset -LW T9,00D4 (SP) ;T9=cur.player -LW T2,00A8 (SP) ;T2=2 player offset -ADDIU T6,T3,FFF9 ;T6=offset - B -ANDI T8,T9,0001 ;T8=cur.player# & 1 -BEQ T8,R0,7F0C57BC ;branch if player 2 or 4 -ADDIU T1,T2,0007 ;T1=2 player offset + 7 -BEQ R0,R0,7F0C57C0 -SW T6,0074 (SP) ;SP+74=2 player offset - 11 (0xB) -//7F0C57BC: display "weapon of choice:" -SW T1,0074 (SP) ;SP+74=2 player offset+7 -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,9C6B ;A0=1D 9C6B: "Weapon of choice:" -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LUI A3,8004 -SW V0,00A4 (SP) ;SP+A4=p->text -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,007C ;A0=@height -ADDIU A1,SP,0078 ;A1=@width -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T4,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T7,0074 (SP) ;T7=2 player offset -LW T9,0078 (SP) ;T9=width -ADDU T5,V0,T7 ;T5=xpos+offset -SRA T8,T9,0x1 ;T8=width/2: centerpoint -SUBU A0,T5,T8 ;A0=xpos for centered text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T3,007C (SP) ;T3=height -SRA T6,T3,0x1 ;T6=height/2: centerpoint -SUBU T2,V0,T6 ;T2=ypos for centered text -ADDIU T1,T2,0025 ;T1=ypos+25 -JAL 7000441C ;V0= text clip width -SW T1,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T4,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T4,R0 ;S0= text clip height -LUI T7,8004 -LUI T9,8004 -LW T9,0EAC (T9) ;T9=80040EAC: p->1st font table -LW T7,0EB0 (T7) ;T7=80040EB0: p->2nd font table -LUI T5,00FF -ORI T5,T5,00B0 ;T5=00FF00B0: green -SW T5,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T9,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T7,0010 (SP) ;SP+10= p->1st font table -OR S1,V0,R0 ;S1=V0: p->DL -// display weapon type -LW A0,00D4 (SP) ;A0=cur.player -JAL 7F009B50 ;V0=p->name of player A0's favored weapon in hand A1 -OR A1,R0,R0 ;A1=right hand -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LUI A3,8004 -SW V0,00A4 (SP) ;SP+A4=p->text -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,007C ;A0=@height -ADDIU A1,SP,0078 ;A1=@width -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T8,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T3,0074 (SP) ;T3=2 player offset -LW T2,0078 (SP) ;T2=width -ADDU T6,V0,T3 ;T6=xpos+offset -SRA T1,T2,0x1 ;T1=width/2: centerpoint -SUBU A0,T6,T1 ;A0=xpos for centered text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LUI T7,8005 -LB T7,84D0 (T7) ;T7=800484D0: selected language -SLL V1,V0,0x10 -SRA T4,V1,0x10 -BLEZ T7,7F0C5910 ;branch if english-ish -OR V1,T4,R0 ;V1=ypos -BEQ R0,R0,7F0C5914 -ADDIU A0,R0,0004 ;A0=4 -//7F0C5910: -OR A0,R0,R0 -LW T5,007C (SP) ;T5=height -ADDU T9,A0,V1 ;T9=ypos+lang.offset -SRA T8,T5,0x1 ;T8=height/2: centerpoint -SUBU T3,T9,T8 ;T3=ypos for centered text -ADDIU T2,T3,0035 ;T2=ypos+35 -JAL 7000441C ;V0= text clip width -SW T2,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 ;S0= text clip height -LUI T1,8004 -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LW T1,0EB0 (T1) ;T1=80040EB0: p->2nd font table -LUI T7,00FF -ORI T7,T7,00B0 ;T7=00FF00B0: green -SW T7,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T4,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T1,0010 (SP) ;SP+10= p->1st font table -//7F0C5988: display award 1 -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -OR S1,V0,R0 ;S1=V0: p->DL -ADDIU A0,SP,007C ;A0=@height -LW T0,2A10 (V1) ;T0=BONDdata+2A10: -ADDIU A1,SP,0078 ;A1=@width -LUI A3,8004 -BEQ T0,R0,7F0C5A6C ;skip if NULL -OR A2,T0,R0 ;A2=p->text -LUI T5,8004 -LW T5,0EAC (T5) ;T5=80040EAC: p->1st font table -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -SW R0,0014 (SP) ;SP+14= NULL -SW T0,00A4 (SP) ;SP+A4=p->text -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T9,0074 (SP) ;T9=2 player offset -LW T3,0078 (SP) ;T3=width -ADDU T8,V0,T9 ;T8=xpos+offset -SRA T2,T3,0x1 ;T2=width/2 -SUBU A0,T8,T2 ;A0=xpos for centered text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T6,007C (SP) ;T6=height -SRA T1,T6,0x1 ;T1=height/2 -SUBU T4,V0,T1 ;T4=ypos for centered text -ADDIU T7,T4,004B ;T7=ypos+4B -JAL 7000441C ;V0= text clip width -SW T7,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 ;S0= text clip height -LUI T9,8004 -LUI T3,8004 -LW T3,0EAC (T3) ;T3=80040EAC: p->1st font table -LW T9,0EB0 (T9) ;T9=80040EB0: p->2nd font table -LUI T8,00FF -ORI T8,T8,00B0 ;T8=00FF00B0: green -SW T8,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T3,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) ;SP+10= p->1st font table -//7F0C5A60: display award 2 -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -OR S1,V0,R0 ;S1=V0: p->DL -LW V0,2A14 (V1) ;V0=BONDdata+2A14: -ADDIU A0,SP,007C ;A0=@height -ADDIU A1,SP,0078 ;A1=@width -BEQ V0,R0,7F0C5B44 ;skip if NULL -OR A2,V0,R0 ;A2=p->text -LUI T2,8004 -LW T2,0EAC (T2) ;T2=80040EAC: p->1st font table -LUI A3,8004 -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -SW R0,0014 (SP) ;SP+14= NULL -SW V0,00A4 (SP) ;SP+A4=p->text -JAL 7F0AE98C ;proportions of string A2 -SW T2,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T6,0074 (SP) ;T6=2 player offset -LW T4,0078 (SP) ;T4=width -ADDU T1,V0,T6 ;T1=xpos+offset -SRA T7,T4,0x1 ;T7=width/2 -SUBU A0,T1,T7 ;A0=xpos for centered text -ADDIU A0,A0,0050 ;A0+=50: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T5,007C (SP) ;T5=height -SRA T9,T5,0x1 ;T9=height/2 -SUBU T3,V0,T9 ;T3=ypos for centered text -ADDIU T8,T3,0058 ;T8=ypos+58 -JAL 7000441C ;V0= text clip width -SW T8,00C8 (SP) ;SP+C8=ypos -SLL S0,V0,0x10 -SRA T2,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T2,R0 ;S0= text clip height -LUI T6,8004 -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LW T6,0EB0 (T6) ;T6=80040EB0: p->2nd font table -LUI T1,00FF -ORI T1,T1,00B0 ;T1=00FF00B0: green -SW T1,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T4,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T6,0010 (SP) ;SP+10= p->1st font table -//7F0C5B38: FA668 menu 06--cancel/confirm exit -LUI V1,8008 -LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5B44: FA674 -LW T7,29C8 (V1) ;T7=BONDdata+29C8: selected page in menu -ADDIU AT,R0,0006 -BNE T7,AT,7F0C6024 ;branch if not page 6 - exit: cancel/confirm -OR V0,S1,R0 -//7F0C5B54: FA684 display cancel/confirm -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A020 ;A0=1D A020: "cancel" -LUI T5,8004 -LW T5,0EAC (T5) ;T5=80040EAC: p->1st font table -LUI A3,8004 -SW V0,00A4 (SP) ;SP+A4=p->text -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=@height -ADDIU A1,SP,00C0 ;A1=@width -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T5,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T9,00A8 (SP) ;T9=2 player offset -LW T8,00C0 (SP) ;T8=width -ADDU T3,V0,T9 ;T3=xpos+offset -SRA T2,T8,0x1 ;T2=width/2 -SUBU A0,T3,T2 ;A0=xpos for centered text -ADDIU A0,A0,0036 ;A0+=36 -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC= xpos -LW T6,00BC (SP) ;T6=height -LUI T5,8008 -LW T5,A0B0 (T5) ;T5=8007A0B0: p->BONDdata -SRA T4,T6,0x1 ;T4=height/2 -SUBU T1,V0,T4 ;T1=ypos for centered text -ADDIU T7,T1,0036 ;T7=ypos+36 -SW T7,00C8 (SP) ;SP+C8=ypos -LW T9,29CC (T5) ;T9=BONDdata+29CC: -BNEZ T9,7F0C5C4C ;branch if not selected -NOP -//7F0C5BD8: highlight cancel -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T8,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T8,R0 ;S0= text clip height -LUI T3,8004 -LUI T2,8004 -LW T2,0EAC (T2) ;T2=80040EAC: p->1st font table -LW T3,0EB0 (T3) ;T3=80040EB0: p->2nd font table -LUI T6,A0FF -LUI T4,0070 -ORI T4,T4,00A0 ;T4=007000A0: dark green -ORI T6,T6,A0F0 ;T6=A0F0A0F0: light green -SW T6,0018 (SP) ;SP+18= foreground colour -SW T4,001C (SP) ;SP+1C= background colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,0020 (SP) ;SP+20= clip height -SW V0,0024 (SP) ;SP+24= clip width -SW R0,0028 (SP) ;SP+28= y offset -SW R0,002C (SP) ;SP+2C= x offset -SW T2,0014 (SP) ;SP+14= p->1st font table -JAL 7F0AE6EC ;display 2-tone text -SW T3,0010 (SP) ;SP+10= p->2nd font table -BEQ R0,R0,7F0C5CB0 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5C4C: normally displayed cancel -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T1,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T1,R0 ;S0= text clip height -LUI T7,8004 -LUI T5,8004 -LW T5,0EAC (T5) ;T5=80040EAC: p->1st font table -LW T7,0EB0 (T7) ;T7=80040EB0: p->2nd font table -LUI T9,00FF -ORI T9,T9,00B0 ;T9=00FF00B0: green -SW T9,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T5,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T7,0010 (SP) ;SP+10= p->1st font table -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5CB0: display "confirm" -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A021 ;A0=ID A021: "confirm" -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LUI A3,8004 -SW V0,00A4 (SP) ;SP+A4=p->text -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,00BC ;A0=@height -ADDIU A1,SP,00C0 ;A1=@width -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T8,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -LW T3,00A8 (SP) ;T3=2 player offset -LW T6,00C0 (SP) ;T6=width -ADDU T2,V0,T3 ;T2=xpos+offset -SRA T4,T6,0x1 ;T4=width/2: centerpoint -SUBU A0,T2,T4 ;A0=xpos for centered text -ADDIU A0,A0,0068 ;A0+=68: xpos -JAL 70004524 ;V0=view.uly -SW A0,00CC (SP) ;SP+CC=xpos -LW T1,00BC (SP) ;T1=height -LUI T8,8008 -LW T8,A0B0 (T8) ;T8=p->BONDdata -SRA T7,T1,0x1 ;T7=height/2: centerpoint -SUBU T5,V0,T7 ;T5=ypos for centerpoint -ADDIU T9,T5,0036 ;T9=ypos+36 -SW T9,00C8 (SP) ;SP+C8=ypos -LW T3,29CC (T8) ;T3=BONDdata+29CC: selected option -ADDIU AT,R0,0001 -BNE T3,AT,7F0C5DAC ;branch if not selected -NOP -// highlight confirm -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T6,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T6,R0 ;S0= text clip height -LUI T2,8004 -LUI T4,8004 -LW T4,0EAC (T4) ;T4=80040EAC: p->1st font table -LW T2,0EB0 (T2) ;T2=80040EB0: p->2nd font table -LUI T1,A0FF -LUI T7,0070 -ORI T7,T7,00A0 ;T7=007000A0: dark green -ORI T1,T1,A0F0 ;T1=A0F0A0F0: light green -SW T1,0018 (SP) ;SP+18= foregound colour -SW T7,001C (SP) ;SP+1C= background colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,0020 (SP) ;SP+20= clip height -SW V0,0024 (SP) ;SP+24= clip width -SW R0,0028 (SP) ;SP+28= y offset -SW R0,002C (SP) ;SP+2C= x offset -SW T4,0014 (SP) ;SP+14= p->1st font table -JAL 7F0AE6EC ;display 2-tone text -SW T2,0010 (SP) ;SP+10= p->2nd font table -BEQ R0,R0,7F0C6024 -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C5DAC: FA8DC normally display confirm -JAL 7000441C ;V0= text clip width -NOP -SLL S0,V0,0x10 -SRA T5,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T5,R0 ;S0= text clip height -LUI T9,8004 -LUI T8,8004 -LW T8,0EAC (T8) ;T8=80040EAC: p->1st font table -LW T9,0EB0 (T9) ;T9=80040EB0: p->2nd font table -LUI T3,00FF -ORI T3,T3,00B0 ;T3=00FF00B0: green -SW T3,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,00CC ;A1=p->xpos -ADDIU A2,SP,00C8 ;A2=p->ypos -LW A3,00A4 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T8,0014 (SP) ;SP+14= p->1st font table -JAL 7F0ADABC ;display monotone text -SW T9,0010 (SP) ;SP+10= p->1st font table -//7F0C5E0C: FA93C -BEQ R0,R0,7F0C6024 -OR S1,V0,R0 ;S1=V0: p->DL -NOP -NOP -NOP -//7F0C5E20: respawn screen -LW T6,00D8 (V1) ;T6=BONDdata+D8: button control -BEQL T6,R0,7F0C6034 ;branch if control disabled -OR V0,S1,R0 ;V0=S1: p->DL -LW T2,0428 (V1) ;T2=BONDdata+428: 1: fading to black -BEQL T2,R0,7F0C6034 ;branch if not fading -OR V0,S1,R0 ;V0=S1: p->DL -LW T4,0424 (V1) ;T4=BONDdata+424: 1: dying -LUI T1,8009 -BEQL T4,R0,7F0C6034 ;branch if not dying -OR V0,S1,R0 ;V0=S1: p->DL -LW T1,C700 (T1) ;T1=8008C700: TRUE if play stopped -LUI T7,8009 -BNEL T1,R0,7F0C6034 ;branch if play stopped -OR V0,S1,R0 ;V0=S1: p->DL -LW T7,C704 (T7) ;T7=8008C704: TRUE when game over -OR A0,R0,R0 ;A0=0 -BNEL T7,R0,7F0C6034 ;branch if game over -OR V0,S1,R0 ;V0=S1: p->DL -BLEZ V0,7F0C5F08 ;branch if invalid DL -LW T1,00D4 (SP) ;SP+D4= player# -SLL T1,T1,0x2 ;T1=player#->offset -LUI V1,8008 -ADDU V1,V1,T1 -LW V1,9EE0 (V1) ;V1=80079EE0+offset: p->BONDdata -BEQ V1,R0,7F0C5F08 ;skip if not loaded -OR A0,R0,R0 ;A0=0 -LW A0,29D8 (V1) ;A0=BONDdata+29D8: #deaths -LW V1,29DC (V1) ;V1=BONDdata+29DC: #suicides -ADDU A0,V1,A0 ;A0=suicides+deaths -//7F0C5E94: -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -//7F0C5F08: fix for You Only Live Twice -JAL 7F01475C ;scenario bitflags & V1 -ADDIU V1,R0,0001 ;V0=TRUE if You Only Live Twice -BEQ V0,R0,7F0C5F2C ;skip if not YOLT -NOP -//7F0C5F18: You Only Live Twice -JAL 7F01045C ;V0=#lives -NOP -SLT AT,A0,V0 ;TRUE if deaths < #lives -BEQL AT,R0,7F0C6034 ;skip if no more lives to live -OR V0,S1,R0 ;V0=S1: p->DL -//7F0C5F2C: initialize viewport -JAL 7F0B4FB4 ;setscissor::viewport -OR A0,S1,R0 ;A0=S1: p->DL -JAL 7F0ACD98 ;microcode -OR A0,V0,R0 ;A0=V0: p->DL -//7F0C5F3C: FAA6C display press start when respawn possible -OR S1,V0,R0 ;S1=V0: p->DL -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,A022 ;A0=ID A022: "press start\n" -LUI T1,8004 -LW T1,0EAC (T1) ;T1=80040EAC: p->1st font table -LUI A3,8004 -SW V0,0060 (SP) ;SP+60= p->text -LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -ADDIU A0,SP,0064 ;A0=@height -ADDIU A1,SP,0068 ;A1=@width -OR A2,V0,R0 ;A2=p->text -SW R0,0014 (SP) ;SP+14= NULL -JAL 7F0AE98C ;proportions of string A2 -SW T1,0010 (SP) ;SP+10= p->1st font table -JAL 70004514 ;V0=viewport ulx -NOP -JAL 7000449C ;V0=view.width -SH V0,0056 (SP) ;SP+56= xpos -LH V1,0056 (SP) ;V1=xpos -LW T5,0068 (SP) ;T5=width -SRA T7,V0,0x1 ;T7=view.w / 2: centerpoint -ADDU T9,T7,V1 ;T9=xpos of middle of screen -SRA T8,T5,0x1 ;T8=width/2: centerpoint -SUBU T3,T9,T8 ;T3=xpos of centered text -JAL 70004524 ;V0=view.uly -SW T3,0070 (SP) ;SP+70=xpos -JAL 700044AC ;V0=view.height -SH V0,0056 (SP) ;SP+56= ypos -LH V1,0056 (SP) ;V1=ypos -LW T4,0064 (SP) ;T4=height -SRA T2,V0,0x1 ;T2=view.h/2: centerpoint -ADDU T1,T2,V1 ;T1=ypos of middle of screen -SRA T7,T4,0x1 ;T2=height/2: centerpoint -SUBU T5,T1,T7 ;T5=ypos of centered text -JAL 7000441C ;V0= text clip width -SW T5,006C (SP) ;SP+6C= ypos -SLL S0,V0,0x10 -SRA T9,S0,0x10 -JAL 7000442C ;V0= text clip height -OR S0,T9,R0 ;S0= text clip height -LUI T8,8004 -LUI T3,8004 -LW T3,0EAC (T3) ;T3=80040EAC: p->1st font table -LW T8,0EB0 (T8) ;T8=80040EB0: p->2nd font table -LUI T6,00FF -ORI T6,T6,00B0 ;T6=00FF00B0: green -SW T6,0018 (SP) ;SP+18= colour -OR A0,S1,R0 ;A0=S1: p->DL -ADDIU A1,SP,0070 ;A1=p->xpos -ADDIU A2,SP,006C ;A2=p->ypos -LW A3,0060 (SP) ;A3=p->text -SW S0,001C (SP) ;SP+1C= text clip height -SW V0,0020 (SP) ;SP+20= text clip width -SW R0,0024 (SP) ;SP+24= y offset -SW R0,0028 (SP) ;SP+28= x offset -SW T3,0014 (SP) ;SP+14= 1st font table -JAL 7F0ADABC ;display monotone text -SW T8,0010 (SP) ;SP+10= p->2nd font table -//7F0C6024: set combiner -JAL 7F0ACEF0 ;set combiner: bayer, lod, perspective -OR A0,V0,R0 ;A0=V0: p->DL -OR S1,V0,R0 ;S1=V0: p->DL -//7F0C6030: return -OR V0,S1,R0 ;V0=S1: DL -LW RA,003C (SP) -LW S0,0034 (SP) -LW S1,0038 (SP) -JR RA -ADDIU SP,SP,00D8 - -+_+ - - -+_+ - -Lets shoot for the slow and methodical method. Change one thing at a time, then merge, then recompile. -Replace the nasty long display code with simplified calls using the new command. - -new stack layout: *indicates dirty -SP+34 S0 -SP+38 S1 -SP+3C RA -SP+40 page# -SP+44 xpos -SP+48 *p->colours -SP+4C *p->scores - -SP+90 *score loop count -SP+94 *pl1 score -SP+98 *pl2 score -SP+9C *pl3 score -SP+A0 *pl4 score -SP+A4 -SP+A8 -SP+AC *pl1 colour *text buffer -SP+B0 *pl2 colour -SP+B4 *pl3 colour -SP+B8 *pl4 colour - -SP+D0 #players -SP+D4 player# - -Also, use a new sort of blink register -80048394 MP current time... -800483B0 milliseconds in current stage - stops when paused -80048498 TRUE when advancing the blink registers -8004849C previous time -800484A0 next time -8008C708 current <> blink register -8008C70C current <> blink timer (0-0x13 0-19) -8008C710 current GO blink register -8008C714 current GO blink timer (0-0x77 0-119) - -line 2: +25 - rank appears on menus 1,2,3,4 -line 3: +35 - p# losses (red) appears on menu 1 - p# wins appears on menu 2 - scores appear on menus 3,4 - cancel+confirm appear on menu 6 (+-18) -4-display for menus 1,2,3,4: +46/+56 - menus 1,2 do not display current player unless suicides (red) - menus 3,4 display team colours -menu 0 unique - -customized... -7F0C4024 F8B54 multiplayer watch menu display - accepts: A0=p->display list -27BDFF28 ADDIU SP,SP,FF28 -AFBF003C SW RA,003C (SP) -AFB10038 SW S1,0038 (SP) -00808825 OR S1,A0,R0 ;S1=A0: p->display list (DL) -0FC26C54 JAL 7F09B150 ;V0= cur player # -AFB00034 SW S0,0034 (SP) -0FC26919 JAL 7F09A464 ;V0=# players -AFA200D4 SW V0,00D4 (SP) ;SP+D4= cur.player -AFA200D0 *SW V0,00D0 (SP) ;SP+D0= #players -2C410002 *SLTIU AT,V0,0002 -142007AE *BNE AT,R0,7F0C6030 ;quit if solo -3C100002 *LUI S0,R0,0002 ;S0=0,2,0 string, no highlight, default colour -//7F0C4050: F8B80 detect if menu in use -0C001127 -JAL 7000449C ;V0=view.width -3C198008 *LUI T9,8008 -0C001145 -JAL 70004514 ;V0=viewport ulx -00020843 *SRA AT,V0,0x1 ;AT=width/2 -00220821 *ADDU AT,AT,V0 ;AT=xpos for center of screen, used by almost everything -8F23A0B0 *LW V1,A0B0 (T9) ;V1=8007A0B0: p->BONDdata -8C6E29C4 LW T6,29C4 (V1) ;T6=BONDdata+29C4: TRUE when menu activated -11C00768 *BEQ T6,R0,7F0C5E20 ;branch if not in menu -AFA10044 *SW AT,0044 (SP) ;SP+A8=xpos -0FC2B366 JAL 7F0ACD98 ;microcode -02202025 -OR A0,S1,R0 ;A0=S1: DL -//7F0C4080: F8BB0 -00408825 OR S1,V0,R0 ;S1=V0: p->DL -3C198008 *LUI T9,8008 -3C0B8009 *LUI T3,8009 -//7F0C409C: F8BCC -8F39A0B0 LW T9,A0B0 (T9) ;T9=8007A0B0: p->BONDdata -8F2929C8 LW T1,29C8 (T9) ;T1=BONDdata+29C8: selected page in menu -AFA900A4 *SW T1,00A4 (SP) ;SP+A4= cur.page# -83A900A7 +LB T1,00A7 (SP) ;cheaper than masking it... -2D210007 *SLTIU AT,T1,0007 ;TRUE if menu 0-6 -1020++++ *BEQ AT,R0,7F0C6024 ;skip if page 7: waiting for exit (and defaults to no display) -24010004 ADDIU AT,R0,0004 -1029000A BEQ AT,T1,7F0C4128 ;branch if page 4: pause -2D210004 *SLTIU AT,T1,0005 ;TRUE if menu 0-4 -50200010 *BEQL AT,R0,7F0C4190 ;branch if page 5,6: exit + cancel/confirm -3404A01A *ORI A0,R0,A01A -//7F0C40C4: F8BF4 pages 0,1,2,3 - play -8D6AC704 LW T2,C704 (T3) ;T2=8008C704: TRUE when game over -1140000D *BEQ T2,R0,7F0C4190 ;branch if still gaming away -3404A015 -ORI A0,R0,A015 ;A0=ID A015: "PLAY" -0FC317F7 *JAL 7F0C5FDC ;V0=TRUE if blinking -34040078 *ORI A0,R0,0078 ;A0=rate: 120 -10000009 BEQ R0,R0,7F0C4190 -3444A016 *ORI A0,V0,A016 ;A0=ID A016/7: "GAME OVER" / "START TO EXIT" -//7F0C4128: F8C58 page 4 - pause/unpause -8D6DC718 *LW T5,C718 (T3) ;T5=8008C718: TRUE if paused -11A00006 *BEQ T5,R0,7F0C4190 ;branch if unpaused -3404A019 -ORI A0,R0,A019 ;A0=ID A019: "PAUSE" -//7F0C4134: F8C64 paused -0FC26C54 JAL 7F09B150 ;V0= cur player # -8D6EC71C *LW T6,C71C (T3) ;T6=8008C71C: player# who paused game -504E0001 *BEQL V0,T6,+1 ;set highlight if you paused game -3C100102 *LUI S0,R0,0102 ;S0=1 you paused game -3404A018 ORI A0,R0,A018 ;A0=ID A018: "PAUSED" -//7F0C4190: F8CC0 figure out text y position -0FC30776 *JAL 7F0C1DD8 ;V0=p->text A0 -8FA50044 *LW A1,0044 (SP) ;A1=xpos -0C001149 -JAL 70004524 ;V0= uly -00023825 *OR A3,V0,R0 ;A3= p->text -24460016 *ADDIU A2,V0,0016 ;A2=ypos+16 -AFB00010 *SW S0,0010 (SP) -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -//7F0C4114: F8DF0 set up blink for arrows -0FC317F7 *JAL 7F0C5FDC ;V0=TRUE if blinking -34040020 *ORI A0,R0,0020 -3C100002 *LUI S0,0002 -54400001 *BNEL V0,R0,+1 ;highlight when applicable -3C100102 *LUI S0,0102 -//7F0C4128: F8E04 left blinking arrow, offset to left of string -0FC307A3 JAL 7F0C1E8C ;TRUE when left enabled on MP menu page -3C068009 *LUI A2,8009 -1040000E BEQ V0,R0,7F0C416C ;skip if left not enabled -8CC6C704 *LW A2,C704 (A2) ;A2=8008C704: TRUE when game over -8FA50044 *LW A1,0044 (SP) ;A1=xpos -54C00001 *BNEL A2,R0,+1 -24A5FFEE *ADDIU A1,A1,FFEE ;xpos-=12: account for longer string -0C001149 -JAL 70004524 ;V0=view.uly -24A5FFD8 *ADDIU A1,A1,FFD8 ;xpos-=28: normal spacing difference -24460016 *ADDIU A2,V0,0016 -27A700AC *ADDIU A3,SP,00AC ;A3=p->SP+AC: text buffer -//7F0C4154: F8E30 create text -3C043C00 *LUI A0,3C00 -AFA400AC *SW A0,00AC (SP) ;SP+AC= "<" -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -//7F0C416C: right blinking arrow -0FC30788 JAL 7F0C1E20 ;TRUE when right enabled on MP menu page -3C068009 *LUI A2,8009 -1040000E BEQ V0,R0,7F0C4598 ;branch if not enabled -8CC6C704 *LW A2,C704 (A2) ;A2=8008C704: TRUE when game over -8FA50044 *LW A1,0044 (SP) ;A1=xpos -54C00001 *BNEL A2,R0,+1 -24A50012 *ADDIU A1,A1,0012 ;xpos+=12: account for longer string -0C001149 -JAL 70004524 ;V0=view.uly -24A50028 *ADDIU A1,A1,0028 ;xpos+=28: normal spacing difference -24460016 *ADDIU A2,V0,0016 -27A700AC *ADDIU A3,SP,00AC ;A3=p->SP+AC: text buffer -//7F0C4198: F8F90 create text -3C043E00 *LUI A0,3E00 -AFA400AC *SW A0,00AC (SP) ;SP+AC= ">" -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -//7F0C41B0: - -//7F0C41B0: F8CE0 page 0--awards when finished, returns -83A200A7 *LB V0,00A7 (SP) ;V0=BONDdata+29C8: selected page in menu -1440002D BNE V0,R0,7F0C426C -3C100002 LUI S0,0002 -//7F0C57BC: display "weapon of choice:" -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -34049C6B ORI A0,R0,9C6B ;A0=1D 9C6B: "Weapon of choice:" -0C001149 -JAL 70004524 ;V0=view.uly -00023825 *OR A3,V0,R0 ;A3= p->text -24460025 *ADDIU A2,V0,0025 ;A2=ypos -8FA50044 *LW A1,0044 (SP) ;A1=xpos -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -// display weapon type -8FA400D4 LW A0,00D4 (SP) ;A0=cur.player -0FC026D4 JAL 7F009B50 ;V0=p->name of player A0's favored weapon in hand A1 -00002825 OR A1,R0,R0 ;A1=right hand -0C001149 -JAL 70004524 ;V0=view.uly -00023825 *OR A3,V0,R0 ;A3= p->text -24460039 *ADDIU A2,V0,0039 ;A2=ypos, technically for japanese. 35 was english -8FA50044 *LW A1,0044 (SP) ;A1=xpos -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -//7F0C5988: display award 1 -3C038008 LUI V1,8008 -8C63A0B0 LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -8C672A10 LW A3,2A10 (V1) ;T0=BONDdata+2A10: name of award1 -10E00009 BEQ A3,R0,7F0C4240 ;skip if NULL -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -0C001149 -JAL 70004524 ;V0=view.uly -8FA50044 *LW A1,0044 (SP) ;A1=xpos -2446004B *ADDIU A2,V0,004B ;A2=ypos -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -//7F0C5A60: display award 2 -3C038008 LUI V1,8008 -8C63A0B0 LW V1,A0B0 (V1) ;V1=8007A0B0: p->BONDdata -8C672A14 LW A3,2A14 (V1) ;T0=BONDdata+2A14: name of award2 -10E00007 BEQ A3,R0,7F0C4264 ;skip if NULL -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -0C001149 -JAL 70004524 ;V0=view.uly -8FA50044 *LW A1,0044 (SP) ;A1=xpos -24460058 *ADDIU A2,V0,0058 ;A2=ypos -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -// hit the combiner and return, since no more menus apply -1000++++ *BEQ R0,R0,7F0C6024 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -// -//7F0C426C: F8D9C rearranged to test if displaying rank -0FC30FD7 JAL 7F0C3F5C ;V0=TRUE if rank to be displayed on MP menu -00000000 *NOP -1040000F BEQ V0,R0,7F0C42B4 ;skip if rank not displayed -3C100002 *LUI S0,0002 -83A200A7 *LB V0,00A7 (SP) ;V0=BONDdata+29C8: selected page in menu -2C410005 *SLTIU AT,V0,0005 ;TRUE if pages 1-4 -1020000B *BEQ AT,R0,7F0C42B4 ;branch if not displaying rank -27A400AC ADDIU A0,SP,00AC ;A0=SP+AC: p->buffer -0FC30F25 JAL 7F0C3C94 ;print rank of player A1 to A0 -8FA500D4 LW A1,00D4 (SP) ;A1=cur.player# -0C001149 -JAL 70004524 ;V0=view.uly -8FA50044 *LW A1,0044 (SP) ;A1=xpos -24460025 *ADDIU A2,V0,0025 ;A2=ypos -27A700AC *ADDIU A3,SP,00AC ;A3=p->SP+AC: text buffer -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -//7F0C4454: F8DE4 rearranged to display line 3--menu specific -83A200A7 *LB V0,00A7 (SP) ;V0=BONDdata+29C8: selected page in menu -24010006 ADDIU AT,R0,0006 -102200++ BEQ AT,V0,+menu6 -2442FFFF *ADDIU V0,V0,FFFF ;AT=page-1 -2C410004 *SLTIU AT,V0,0004 ;TRUE if pages 1-4 -102000++ *BEQ AT,R0,7F0C4C50 -3404A01E ORI A0,R0,A01E ;A0=ID A01E: "LOSSES" -50400008 BEQL V0,R0,+display ;display in red if page 1--losses -36100004 ORI S0,S0,0004 -2C410002 *SLTIU AT,V0,0002 ;TRUE if pages 1-2 -14200005 BNE AT,R0,+display ;branch if page 2--kills -3404A01D ORI A0,R0,A01D ;A0=ID A01D: "KILLS" -// -0FC30FF3 JAL 7F0C3FCC ;V0= TRUE if displaying score in MP menu -00000000 NOP -104000++ BEQ V0,R0,7F0C4C50 ;skip if not displaying score -3404A01B ORI A0,R0,A01B ;A0=ID A01B: "SCORES" -// generate "%s%d %s" string -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -8FA600D4 LW A2,00D4 (SP) ;A3=cur.player# -00022825 OR A1,V0,R0 -27A400AC ADDIU A0,SP,00AC ;A0=SP+AC: p->buffer -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -24C60001 ADDIU A2,A2,0001 ;A2++: cur.player++ -// display line 3 -0C001149 -JAL 70004524 ;V0=view.uly -8FA50044 *LW A1,0044 (SP) ;A1=xpos -24460035 *ADDIU A2,V0,0035 ;A2=ypos -27A700AC *ADDIU A3,SP,00AC ;A3=p->SP+AC: text buffer -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -100000++ *BEQ R0,R0,+4-way -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -//7F0C4330: F8E60 special handler for menu 6--cancel/confirm -//cancel: -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -3404A020 ORI A0,R0,A020 ;A0=1D A020: "cancel" -0C001149 -JAL 70004524 ;V0=view.uly -00023825 *OR A3,V0,R0 ;A3=p->string -8FA50044 *LW A1,0044 (SP) ;A1=xpos -24A5FFFE *ADDIU A1,A1,FFFE ;A1=xpos-18 -24460035 *ADDIU A2,V0,0035 ;A2=ypos -AFB00010 *SW S0,0010 (SP) ;display mode = string, default colour -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) ;V0=8007A0B0: p->BONDdata -8C4229CC LW V0,29CC (V0) ;V0=BONDdata+29CC: (0-cancel, 1-confirm) -AFA200AC SW V0,00AC (SP) -38420003 XORI V0,V0,0003 ;flips highlight test and sets right-align -A3A20010 SB V0,0010 (SP) ;SP+10= highlight -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 OR S1,V0,R0 ;S1=V0: p->DL -//comfirm: -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -3404A021 ORI A0,R0,A021 ;A0=ID A021: "confirm" -0C001149 -JAL 70004524 ;V0=view.uly -00023825 *OR A3,V0,R0 ;A3=p->string -8FA50044 *LW A1,0044 (SP) ;A1=xpos -24A50002 *ADDIU A1,A1,0002 ;A1=xpos+18 -24460035 *ADDIU A2,V0,0035 ;A2=ypos -AFB00010 *SW S0,0010 (SP) ;display mode = string, default colour -8FA200AC *LW V0,00AC (SP) -34420004 +ORI V0,V0,0004 ;set left-align -A3A20010 SB V0,0010 (SP) ;SP+10= highlight -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 OR S1,V0,R0 ;S1=V0: p->DL -//7F0C454C: F8ED8 see if you need a 4-way display -83A800A7 LB T0,00A7 (SP) ;T0=page# -2508FFFF ADDIU T0,T0,FFFF ;T0=page-- (1-7) -2D010004 SLTIU AT,T0,0004 ;TRUE if page 1-4 -1020++++ BEQ AT,R0,+next -//7F0C43B8: initialize the buffers -24020003 ADDIU V0,R0,0003 -001D1825 OR V1,SP,R0 -AC600094 SW R0,0094 (V1) -AC6000AC SW R0,00AC (V1) -24630004 ADDIU V1,V1,0004 -1440FFFC BNE V0,R0,-4 -2442FFFF ADDIU V0,V0,FFFF -//7F0C43D4: sort out which page will be displayed here -27AE0094 ADDIU T6,SP,0094 ;V1=p->scores (usually) -AFAE004C SW T6,004C (SP) ;SP+44= p->scores -27AF00AC ADDIU T7,SP,00AC ;V1=p->colours (usually) -2D020002 SLTIU V0,T0,0002 ;TRUE if page 1-2 -10400019 BEQ V0,R0,+page3 -AFAF0048 SW T7,0048 (SP) ;SP+48= p->colours -//7F0C43EC: both pages 1 and 2: colourize and inhibit by default -8FA100D4 LW AT,00D4 (SP) ;AT=cur.player# -00010880 SLL AT,AT,0x2 ;AT=player->offset -003D1821 ADDU V1,AT,SP ;AT=SP+offset -3402FF04 ORI V0,R0,FF04 ;V0=100: inhibit | red -1500000E BNE T0,R0,+page2 ;branch if page 2 -A46200AE SH V0,00AE (V1) -//7F0C4404: page 1--losses -001D7025 OR T6,SP,R0 -3C038008 LUI V1,8008 -00611821 ADDU V1,V1,AT ;V1+=playeroffset -24020003 ADDIU V0,R0,0003 -8C619F14 LW AT,9F14 (V1) -ADC10094 SW AT,0094 (T6) -54200001 BNEL AT,R0,+1 -A1C000AE SB R0,00AE (T6) -24630070 ADDIU V1,V1,0070 -25CE0004 ADDIU T6,T6,0004 -1440FFF9 BNE V0,R0,-7 -2442FFFF ADDIU V0,V0,FFFF -10000022 BEQ R0,R0,+display ;safe to soak next line -//7F0C4438: page 2--kills -3C028008 LUI V0,8008 -8C42A0B4 LW V0,A0B4 (V0) ;V0=p->cur.stats -24420024 ADDIU V0,V0,0024 ;p->#playerkills -1000001E BEQ R0,R0,+display -AFA2004C SW V0,004C (SP) ;SP+44=p->kills -// -//7F0C444C: page 3--scores -0FC30FF3 JAL 7F0C3FCC ;V0= TRUE if displaying score in MP menu -8FA400D0 LW A0,00D0 (SP) ;T6=SP+D0: #players (1-4) -1040++++ BEQ V0,R0,7F0C4510 ;skip if not displaying score -2484FFFF ADDIU A0,A0,FFFF ;A0=playercount-1 (0-3) -//7F0C445C: retrieve display type -0FC051DB JAL 7F01476C ;V0=scenario::score -00008025 OR S0,R0,R0 ;S0=display::point -54400001 BNEL V0,R0,+1 -3C100001 LUI S0,0001 ;S0=display::time -//7F0C446C: collect scores -0FC30E36 JAL 7F0C38D8 ;V0=score (in NSNA: V0=score, V1=time) -AFA40090 SW A0,0090 (SP) ;SP+90= count -00431021 ADDU V0,V0,V1 ;V0=total score in NSNA -8FA40090 LW A0,0090 (SP) ;A0=count -00041880 SLL V1,A0,0x2 ;V1=player#->offset -007D1821 ADDU V1,SP,V1 ;V1=SP+offset -AC620094 SW V0,0094 (V1) ;score->buffer -AC7000AC SW S0,00AC (V1) ;display->buffer -24010001 ADDIU AT,R0,0001 -8FAE00D4 LW T6,00D4 (SP) ;T6=cur.player# -508E0001 BEQL A0,T6,+1 -A06100AC SB AT,00AC (V1) ;highlight if cur.player -000408C0 SLL AT,A0,0x3 -00240823 SUBU AT,AT,A0 -00010900 SLL AT,AT,0x4 ;AT=player# * 0x70 -3C0E8008 LUI T6,8008 -002E7021 ADDU T6,T6,AT -81C19F59 LB AT,9F59 (T6) ;AT=player's team flag -A06100AF SB AT,00AF (V1) ;team colour for player -1480FFEC BNE A0,R0,7F0C446C ;loop for each player -2484FFFF ADDIU A0,A0,FFFF ;A0++ count++ -// -//7F0C4664: loop to display each line to the screen -00008025 OR S0,R0,R0 -//7F0C4668: loop this. get x/y screen positions, test if inhibitted, then display -8FA50048 +LW A1,0048 (SP) ;A1=p->colours -0FC317F5 JAL 7F0C5FD4 ;A1=xpos,A2=ypos -00102025 OR A0,S0,R0 ;A0=S0: player# -00104080 SLL T0,S0,0x2 ;T0=#players->offset -8FAF004C `LW T7,004C (SP) ;T7=p->scores -8FAE0048 LW T6,0048 (SP) ;T6=p->colours -010E1021 ADDU V0,T6,T0 ;V0=p->player#'s colours -80410002 LB AT,0002 (V0) ;AT=inhibitor -04200007 BLTZ AT,+loopus -8C420000 LW V0,0000 (V0) ;V0=colour -AFA20010 SW V0,0010 (SP) ;SP+10=colour -010F3821 ADDU A3,T7,T0 -8CE70000 LW A3,0000 (A3) ;A3=score -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -00112025 OR A0,S1,R0 -00028825 OR S1,V0,R0 -//7F0C4500: loopus -26100001 ADDIU S0,S0,0001 ;count++ -8FA400D0 LW A0,00D0 (SP) ;T6=SP+D0: #players (1-4) -1490FFEE BNE A0,S0,-display -00000000 NOP -//7F0C4510: - -// return to the microcode generator at end of thing, to correct screen -1000++++ *BEQ R0,R0,7F0C6024 -00111025 *OR V0,S1,R0 ;V0=S1: p->DL - - -//7F0C5E20: FA950 respawn screen -8C6E00D8 LW T6,00D8 (V1) ;T6=BONDdata+D8: button control -11C00082 *BEQ T6,R0,7F0C6030 ;return if control disabled -8C6A0428 LW T2,0428 (V1) ;T2=BONDdata+428: 1: fading to black -11400080 *BEQ T2,R0,7F0C6030 ;return if not fading -8C6C0424 LW T4,0424 (V1) ;T4=BONDdata+424: 1: dying -3C0F8009 *LUI T7,8009 -1180007D *BEQ T4,R0,7F0C6030 ;return if not dying -8DE9C700 *LW T1,C700 (T7) ;T1=8008C700: TRUE if play stopped -1520007B *BNE T1,R0,7F0C6030 ;return if play stopped -8DEFC704 LW T7,C704 (T7) ;T7=8008C704: TRUE when game over -15E00079 *BNE T7,R0,7F0C6030 ;return if game over -8FA900D4 LW T1,00D4 (SP) ;SP+D4= player# -00094880 SLL T1,T1,0x2 ;T1=player#->offset -3C038008 LUI V1,8008 -00691821 ADDU V1,V1,T1 -8C639EE0 LW V1,9EE0 (V1) ;V1=80079EE0+offset: p->BONDdata -10600004 BEQ V1,R0,+4 ;skip if not loaded -00002025 OR A0,R0,R0 ;A0=0 -8C6429D8 LW A0,29D8 (V1) ;A0=BONDdata+29D8: #deaths -8C6329DC LW V1,29DC (V1) ;V1=BONDdata+29DC: #suicides -00642021 ADDU A0,V1,A0 ;A0=suicides+deaths -//7F0C5E74: FA9A4 Free -... -//7F0C5F08: FAA38 fix for You Only Live Twice - JAL 7F01475C ;scenario bitflags & V1 - ADDIU V1,R0,0001 ;V0=TRUE if You Only Live Twice - BEQ V0,R0,7F0C5F2C ;skip if not YOLT - NOP -//7F0C5F18: FAA48 You Only Live Twice - JAL 7F01045C ;V0=#lives - NOP - SLT AT,A0,V0 ;TRUE if deaths < #lives -10200042 *BEQ AT,R0,7F0C6030 ;skip if no more lives to live -00000000 *NOP -//7F0C5F2C: FAA5C initialize viewport -0FC2D3ED JAL 7F0B4FB4 ;setscissor::viewport -00112025 OR A0,S1,R0 ;A0=S1: p->DL -0FC2B366 JAL 7F0ACD98 ;microcode -00022025 OR A0,V0,R0 ;A0=V0: p->DL -//7F0C5EA8: FAA6C display press start when respawn possible -00408825 OR S1,V0,R0 ;S0=V0: p->DL -0FC317F7 *JAL 7F0C5FDC ;V0=TRUE if blinking -3404003C *ORI A0,R0,003C -3404A022 ORI A0,R0,A022 ;A0=ID A022: "press start\n" -50400001 *BNEL V0,R0,+1 -3404A023 *ORI A0,R0,A023 ;A0=ID A023: "to continue\n" -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -8FA50044 -LW A1,0044 (SP) ;A1=x position -//7F0C5F58: FAA88 y position -0C00112B -JAL 700044AC ;V0=view.height -00023825 *OR A3,V0,R0 ;A3=p->text -0C001149 -JAL 70004524 ;V0=view.uly -00023043 *SRA A2,V0,0x1 ;A2=height/2 -00463021 *ADDU A2,A2,V0 ;A2=ypos+offset to center text -//7F0C5F6C: FAA9C -3C040002 *LUI A0,R0,0002 ;A2=00020000: string: default colour (green) -AFA40010 *SW A0,0010 (SP) -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -//7F0C5F84: FAAB4 free -... -//7F0C6024: FAB54 set combiner NOTE: both death and menus should jump into this! - JAL 7F0ACEF0 ;set combiner: bayer, lod, perspective - OR A0,V0,R0 ;A0=V0: p->DL - OR S1,V0,R0 ;S1=V0: p->DL -//7F0C6030: FAB60 return -OR V0,S1,R0 ;V0=S1: DL -LW RA,003C (SP) -LW S0,0034 (SP) -LW S1,0038 (SP) -JR RA -ADDIU SP,SP,00D8 - -Convenience dicatates a rather simple, generic timer test for blinks -The other blinks are okay as-is, but would prefer something less reliant on mortal life -use 800483B0 stage millisecond timer - -7F0C5FBC FAAEC V0=TRUE if blinking - accepts: A0=blinkrate (ms) -3C028005 LUI V0,8005 -8C42849C LW V0,849C (V0) ;ms from start of stage, used for watch -0044001B DIVU V0,A0 -00001012 MFLO V0 ;time / rate -03E00008 JR RA -30420001 ANDI V0,V0,0001 ;V0=1 if even number of divisions - - -For convenience, and since it is the most-used format, have this routine figure out the x/ypos for a given player for a specific #players -7F0C5FD4 FAB04 compute x/y position of player A0's data on current player's MP menu and sets text alignment - accepts: A0=player# (0-3), A1=start of colour table - returns: A1=xpos, A2=ypos - fries: AT,V0,V1,A3,T6,T7,T8,T9 -//7F0C5FF4: FAB24 get # players -27BDFFD0 ADDIU SP,SP,FFD0 -AFBF002C SW RA,002C (SP) -0C001127 JAL 7000449C ;V0=view.width -00053825 +OR A3,A1,R0 -0C001145 JAL 70004514 ;V0=viewport ulx -00022843 SRA A1,V0,0x1 ;A1=width/2 -0C001149 JAL 70004524 ;V0=view.uly -00A22821 ADDU A1,A1,V0 ;A1=xpos+width/2 -0FC26919 JAL 7F09A464 ;V0=#players (1-4) -24460046 ADDIU A2,V0,0046 ;ypos= immediate offset, since easier than 3/5 -00040880 +SLL AT,A0,0x2 -00273821 +ADDU A3,A3,AT ;A3=p->player A0's colour code -2C410003 SLTIU AT,V0,0003 ;TRUE if 1-2 players -1420000A *BNE AT,R0,+ypos ;branch if 1-2 players -30810001 ANDI AT,A0,0001 ;TRUE if player 2/4 -//7F0C6024: FAB54 3/4-player display offsets -50200002 BEQL AT,R0,+2 ;-10 if players 1/3 -24A5FFF8 ADDIU A1,A1,FFF8 -24A50008 ADDIU A1,A1,0008 ;+10 if players 2/4 -3C0E0200 +LUI T6,0200 -002E0804 +SLLV AT,T6,AT ;align left or right -8CEE0000 +LW T6,0000 (A3) -002E0825 +OR AT,T6,AT -ACE10000 +SW AT,0000 (A3) -30810002 ANDI AT,A0,0002 ;TRUE if player 3-4 -//7F0C6034: FAB64 correct ypos for second row -54200001 BNEL AT,R0,+1 ;+10 if second row; AT=TRUE if second row -24C60010 ADDIU A2,A2,0010 -//7F0C603C: FAB6C return -8FBF002C LW RA,002C (SP) -03E00008 JR RA -27BD0030 ADDIU SP,SP,0030 - -+_+ - - -!WIP! -Glean info to build the accuracy display, or more probably make routines that autocalc it and mix into original. -See what's involved in adding another page... I like the flip up/down thing, but others may not... - -7F0C5F08 FAA38 create p->accuracy string of format "%.1f%%" for cur.player - accepts: A0=@struct --[A1=(opt.)#places]-- - struct is as such: make sure buffer is at least 0x20 large... - 0x0 4 total shots - 0x4 4 head hits - 0x8 4 body hits - 0xC 4 limb hits - 0x10 4 other hits - 0x14 var accuracy string. should be at least 7 bytes long, minimum - -// optional idea to make a variable-accuracy format string -// "%%.%df%%%%" not implemented--probably won't be unless called for - ADDIU SP,SP,FF80 - SW RA,007C (SP) - SW A0,0078 (SP) - LUI V0,2525 - SW V0,0048 (SP) - ORI V0,V0,2E25 - SW V0,0040 (SP) - LUI V0,6466 - ORI V0,V0,2525 - SW V0,0044 (SP) - ADDIU A0,SP,0020 ;A0=p->buffer - ORI A2,A1,R0 ;A2=#decimal places - JAL 7000AC94 ;sprintf(A0,A1,A2,A3) - ADDIU A1,SP,0040 - LW A0,0078 (SP) -//proceed with #hits... - -//7F0C5F08: FAA38 actual code starts here. above was theoretical -27BDFF80 ADDIU SP,SP,FF80 -AFBF007C SW RA,007C (SP) -3C02252E LUI V0,252E -34423166 ORI V0,V0,3166 -AFA20020 SW V0,0020 (SP) -3C022525 LUI V0,2525 -AFA20024 SW V0,0024 (SP) -//7F0C5F5C: FAA8C calculate #hits -3C028008 LUI V0,8008 -8C42A0B4 LW V0,A0B4 (V0) ;V0=cur.player's stats -8C430014 LW V1,0014 (V0) ;V1=hat hits -8C410010 LW AT,0010 (V0) ;AT=weapon hits -00231821 ADDU V1,V1,AT -AC830010 +SW V1,0010 (A0) -8C410004 LW AT,0004 (V0) ;AT=head hits -AC810004 +SW AT,0004 (A0) -00231821 ADDU V1,V1,AT -8C410008 LW AT,0008 (V0) ;AT=body hits -AC810008 +SW AT,0008 (A0) -00231821 ADDU V1,V1,AT -8C41000C LW AT,000C (V0) ;AT=limb hits -AC81000C +SW AT,000C (A0) -00231821 ADDU V1,V1,AT -8C410018 LW AT,0018 (V0) ;AT=object hits just like original, don't count object hits in "other" -00231821 ADDU V1,V1,AT ;V1=total hits -//7F0C5F90: FAAC0 calculate accuracy -8C420000 LW V0,0000 (V0) ;V0=total shots -AC820000 +SW V0,0000 (A0) -58400009 BLEZL V0,+create ;branch if you didn't fire -44800000 MTC1 R0,F0 -3C0142C8 LUI AT,42C8 -44814000 MTC1 AT,F8 ;F8=100.0 [42C80000] -44832000 MTC1 V1,F4 -44820000 MTC1 V0,F0 -468021A0 CVT.S.W F6,F4 ;F6=(float) hits -46800120 CVT.S.W F4,F0 ;F18=(float) shots -46083002 MUL.S F0,F6,F8 ;F10=hits * 100.0 -46040003 DIV.S F0,F0,F4 ;F0=hits * 100.0 / shots -//7F0C5FBC: FAAEC create final string -24840014 +ADDIU A0,A0,0014 ;A0=p->text buffer -27A50020 ADDIU A1,SP,0020 ;A1=p->format string -46000121 CVT.D.S F4,F0 ;F4=(double) percentage -44072000 MFC1 A3,F4 ;A3=percentage (lower) -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -44062800 MFC1 A2,F5 ;A2=percentage (upper) -//7F0C5FD0: FAB00 return -8FBF007C LW RA,007C (SP) -03E00008 JR RA -27BD0080 ADDIU SP,SP,0080 - - -Stats to display: -9C6A accuracy: % (shots vs. total hits) -9C6C shot total: -9C6D head hits: # % -9C6E body hits: # % -9C6F limb hits: # % -9C70 others: # % -distance? -longest/shortest inning? -longest/shortest b/w kills? - -Two pages, easiest. Probably press up/down on the awards screen. - head # - body # - limb # - other # - - accuracy % - shot total # - longest inning #:## - streak # - -//7F0C41B0: F8CE0 page ?--accuracy/hit totals when finished, returns -83A20042 *LB V0,0042 (SP) ;V0=BONDdata+29C8: selected page in menu -104000 BEQ V0,R0,7F0C426C ;branch if awards page - LUI S0,0002 -// get all stats and accuracy string. buffer must be at least 0x20 -0FC317C2 JAL 7F0C5F08 ;fill struct A0 with stuff -27A40050 ADDIU A0,SP,0050 ;A0=buffer - LB V0,0042 (SP) - SLTIU V0,V0,0002 -1040 BEQ V0,R0,+hit total page -//7F0C41DC: make corrected x positions, to save code -8FA50044 LW A1,0044 (SP) ;A1=xpos -3C100202 LUI S0,0202 -24A2FFFC ADDIU V0,A1,FFFC -8FA20048 SW V0,0048 (SP) -24A20004 ADDIU V0,A1,0004 -8FA2004C SW V0,004C (SP) -// write all left-hand strings first, then go back and fill in stats -// display "Accuracy:" -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -34049C6A ORI A0,R0,9C6A ;A0=1D 9C6A: "Accuracy:" -0C001149 -JAL 70004524 ;V0=view.uly -00023825 *OR A3,V0,R0 ;A3= p->text -24460025 *ADDIU A2,V0,0025 ;A2=ypos -8FA50048 *LW A1,0048 (SP) ;A1=xpos -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -// display "shot total:" 9C6C -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -34049C6C ORI A0,R0,9C6C ;A0=1D 9C6C: shot total:" -0C001149 -JAL 70004524 ;V0=view.uly -00023825 *OR A3,V0,R0 ;A3= p->text -24460035 *ADDIU A2,V0,0035 ;A2=ypos -8FA50048 *LW A1,0048 (SP) ;A1=xpos -AFB00010 *SW S0,0010 (SP) ;display mode = string -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -// display "longest inning:" A01C -3C100002 LUI S0,0002 -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -3404A01C ORI A0,R0,A01C ;A0=1D 9C6D: "head hits:" -0C001149 -JAL 70004524 ;V0=view.uly -00023825 *OR A3,V0,R0 ;A3= p->text -24460045 *ADDIU A2,V0,0045 ;A2=ypos -8FA50044 *LW A1,0044 (SP) ;A1=xpos -AFB00010 *SW S0,0010 (SP) ;display mode = string, centered -0FC30D68 *JAL 7F0C35A0 ;display player data to MP menu -00112025 *OR A0,S1,R0 -// right hand column does all the stats. -// display accuracy value--note this is a string -3C100402 LUI S0,0402 -0C001149 -JAL 70004524 ;V0=view.uly -00022025 *OR A0,V0,R0 ;S0=V0: p->DL -27A70064 ADDIU A3,SP,0064 ;A3= p->text -24460025 ADDIU A2,V0,0025 ;A2=ypos -8FA5004C LW A1,004C (SP) ;A1=xpos -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFB00010 SW S0,0010 (SP) ;display mode = string -// display shot total value -3C100400 LUI S0,0400 -0C001149 -JAL 70004524 ;V0=view.uly -00022025 OR A0,V0,R0 -24460035 ADDIU A2,V0,0035 ;A2=ypos -8FA5004C LW A1,004C (SP) ;A1=xpos -AFB00010 SW S0,0010 (SP) ;display mode = value, default colour -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -8FA70050 LW A3,0050 (SP) -// display inning (ms) -00028825 OR S1,V0,R0 -0FC1A9D0 JAL 7F06A740 ;retrieve word A0 from stats -24040013 ADDIU A0,R0,0013 ;A0=13: longest inning -0C001149 JAL 70004524 ;V0=view.uly -00023825 OR A3,V0,R0 ;A3=V0: time (ms) -24460055 ADDIU A2,V0,0055 ;A2=ypos -8FA50044 LW A1,0044 (SP) ;A1=xpos -00112025 OR A0,S1,R0 -3C100001 LUI S0,0001 -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFB00010 SW S0,0010 (SP) ;display mode = value, default colour -// hit the combiner and return, since no more menus apply -1000++++ *BEQ R0,R0,7F0C6024 -00408825 *OR S1,V0,R0 ;S0=V0: p->DL -// - - -This is the "hits" page -lists head, body, limb, and other hits, not counting objects -Sequential data + text tags makes for one swanky loop... -//7F0C42E0: F8CE0 page ?--accuracy/hit totals when finished, returns -// set up loop--write in reverse! -24100003 ADDIU S0,R0,0003 -// loopus -34049C6D ORI A0,R0,9C6D ;A0=1D 9C6D: "head hits:" -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -00902021 ADDU A0,A0,S0 ;A0=text ID for string -0C001149 JAL 70004524 ;V0=view.uly -00023825 OR A3,V0,R0 ;A3= p->text -24460025 ADDIU A2,V0,0025 ;A2=ypos + base offset -00101100 SLL V0,S0,0x4 -00C23021 ADDU A2,A2,V0 -AFA60048 SW A2,0048 (SP) ;save corrected ypos -8FA50044 LW A1,0044 (SP) ;A1=xpos -24A5FFFC ADDIU A1,A1,FFFC ;xpos correction -3C020202 LUI V0,0202 -AFA20010 SW V0,0010 (SP) ;display mode = right-align, string -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -00112025 OR A0,S1,R0 -// display value -00408825 OR A0,V0,R0 ;S0=V0: p->DL -8FA60048 LW A2,0048 (SP) ;A2=saved ypos -8FA50044 LW A1,0044 (SP) -24A50004 ADDIU A1,A1,0004 ;A1=corrected xpos -00101080 SLL V0,S0,0x2 -005D1021 ADDU V0,V0,SP -8C470054 LW A3,0054 (V0) ;hit type -3C020400 LUI V0,0400 -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFA20010 SW V0,0010 (SP) ;display mode = value, default colour -// increment and loop -00408825 OR S1,V0,R0 ;S0=V0: p->DL -1600FF-- BNE S0,R0,-loopus -2610FFFF ADDIU S0,S0,FFFF -// hit the combiner and return, since no more menus apply -1000++++ BEQ R0,R0,7F0C6024 -00000000 NOP -// - - -+_+ - -slight interface hack to allow switching to this menu... -Remind me to strip the ears off that stupid routine sometime... -First thing would be hacking that stupid thing to just store the current menu # - -//7F0C3304: F7E34 page 5 and confirm -10400052 *BEQ V0,R0,7F0C3450 ;branch if B not pressed - -//7F0C3450: F7F80 cleared room for menu up/down -3C078008 LUI A3,8008 -8CEBA0B0 LW T3,A0B0 (A3) ;T3=p->BONDdata -816C29CB LB T4,29CB (T3) ;T4=BONDdata+29CB: MP page -15800010 BNE T4,R0,7F0C34A0 ;branch if not menu 0 -816C29CA LB T4,29CA (T3) ;T4=BONDdata+29CA: stats page -0FC307C7 JAL 7F0C1F1C ;TRUE if pressed down -83A4001B LB A0,001B (SP) ;A0=cur.player# -14400005 BNEZ V0,+increment -2405FFFF ADDIU A1,R0,FFFF -0FC307C4 JAL 7F0C1F10 ;TRUE if pressed up -83A4001B LB A0,001B (SP) ;A0=cur.player# -//7F0C347C: F7FAC increment -1040001B BEQ V0,R0,7F0C3508 -00022825 OR A1,V0,R0 -3C048008 LUI A0,8008 -8C84A0B0 LW A0,A0B0 (A0) -248429CA ADDIU A0,A0,29CA -0FC04F5E JAL 7F013D78 ;general inc/dec A0 by A1, ceil A2, floor default -24060003 ADDIU A2,R0,0003 -10000015 BEQ R0,R0,7F0C3500 -AFA6002C SW A2,002C (SP) ;crude method of forcing control stick press register which doesn't work, I may add... -//7F0C34A0: F7FD0 test if pressed select on page 5 -83A4001B LB A0,001B (SP) ;A0=cur.player# -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -34059000 ORI A1,R0,9000 ;A1=A, Start button -10400012 *BEQ V0,R0,7F0C3508 ;branch if didn't press buttons -3C078008 LUI A3,8008 -8CEBA0B0 *LW T3,A0B0 (A3) ;T3=p->BONDdata -24010005 ADDIU AT,R0,0005 -816C29CB LB T4,29CB (T3) ;T4=BONDdata+29C8: MP page -15810004 *BNE T4,AT,7F0C34E4 ;branch if not page 5--exit -24010006 *ADDIU AT,R0,0006 -//7F0C34C8: F7FF8 swap page 5 for 6 -A16129CB *SB AT,29CB (T3) ;6->BONDdata+29C8: set page 6--cancel/confirm -10000008 *BEQ R0,R0,7F0C3500 -AD6029CC *SW R0,29CC (T3) ;0->BONDdata+29CC: select "CANCEL" -//7F0C34E4: test if pressed select on page 6 -15810008 *BNE T4,AT,7F0C3508 ;branch if not page 6--cancel/confirm -8D6C29CC *LW T4,29CC (T3) ;T9=BONDdata+29CC: selected page 6 option -//7F0C34EC: cancel or confirm -11800006 *BEQ T4,R0,7F0C3508 ;branch if "CONFIRM" not selected -00002025 OR A0,R0,R0 -//7F0C34F4: "CONFIRM" selected -AD6029C4 *SW R0,29C4 (T3) ;0->BONDdata+29C4: disable MP menu -0FC3094C JAL 7F0C2530 ;determines and sets MP awards -AD602A00 *SW R0,2A00 (T3) ;0->BONDdata+2A00: hide health display -//7F0C3500: play sound -0FC307F7 JAL 7F0C1FDC ;play watch beep SE -00000000 NOP -//7F0C34F8: F8028 get vert state -83A4001B *LB A0,001B (SP) -2405FFFE *ADDIU A1,R0,FFFE -0C00314A *JAL 7000C528 ;V0=vert.state -24060001 *ADDIU A2,R0,0001 -//7F0C3508: F8038 update press register -24420001 *ADDIU V0,V0,0001 ;-2~1 becomes -1~2 -2C430002 *SLTIU V1,V0,0002 ;TRUE if -1,0 -8FA2002C -LW V0,002C (SP) ;V0=horz.state -24420001 *ADDIU V0,V0,0001 ;-2~1 becomes -1~2 -//7F0C3518: F8048 reset to 1 if 0 or -1 -2C410002 *SLTIU AT,V0,0002 ;TRUE if -1,0 -00610824 *AND AT,AT,V1 ;AT=TRUE only if both in happy state -3C038008 -LUI V1,8008 -8C63A0B0 -LW V1,A0B0 (V1) ;V1=p->BONDdata -10000019 BEQ R0,R0,7F0C3590 -AC6129D0 *SW AT,29D0 (V1) -00000000 *NOP -//7F0C3534: F8064 test if activating the menu diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/pause on MP menus.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/pause on MP menus.txt deleted file mode 100644 index 9f3222a..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/pause on MP menus.txt +++ /dev/null @@ -1,67 +0,0 @@ -7 menus, pulled from playerdata. Look at "expando guard.txt" under BONDdata+29C8 for details - -7F0C40C8 -LUI T2,8009 -LW T2,C704 (T2) ;T2=8008C704: !0 when game over -LUI T3,8009 -BNEZ T2,7F0C40EC -NOP -//7F0C40DC: PLAY -JAL 7F0C1DD8 -ORI A0,R0,A015 -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) -//7F0C40EC: -LW T3,C710 (T3) ;T3=8008C710: timer-triggered flag -BEQ T3,R0,7F0C4108 -NOP -//7F0C40F8: GAME OVER -JAL 7F0C1DD8 -ORI A0,R0,A016 -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) -//7F0C4108: START TO EXIT -JAL 7F0C1DD8 -ORI A0,R0,A017 -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) - -7F0C4118: no display -LUI T4,8006 -ADDIU T4,T4,BC24 ;T4=8005BC24: NULL -BEQ R0,R0,7F0C4190 -SW T4,00A4 (SP) - -7F0C4128: exitted, wainting for everyone else to do the same -LUI T5,8009 -LW T5,C718 (T5) ;T5=8008C718: 1 if paused -BEQ T5,R0,7F0C4160 -NOP -//7F0C4138: PAUSED -JAL 7F0C1DD8 -ORI A0,R0,A018 -JAL 7F09B150 ;V0=player# -SW V0,00A4 (SP) -LUI T6,8009 -LW T6,C71C (T6) ;T6=8008C71C: player who paused game -BNE V0,T6,7F0C4190 ;branch if not equal -NOP -BEQ R0,R0,7F0C4190 -ADDIU S0,R0,0001 ;S0=1: highlight -//7F0C4160: PAUSE -JAL 7F0C1DD8 -ORI A0,R0,A019 -BEQ R0,R0,7F0C4190 -SW V0,00A4 (SP) - -7F0C4170: EXIT -JAL 7F0C1DD8 -ORI A0,R0,A01A -JAL 70004514 -SW V0,00A4 (SP) -LW T7,00A8 (SP) -ADDU A0,A0,T7 -ADDIU A0,A0,0041 -SW A0,00CC (SP) -//7F0C4190: -... diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/watch menu hackery.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/watch menu hackery.txt deleted file mode 100644 index b9b75b4..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Ingame Menus/watch menu hackery.txt +++ /dev/null @@ -1,158 +0,0 @@ -MAIN MENUS THAT REMEMBER THEIR POSITIONS! - -7F0A4868 0xD9398 initialize watch menu variables at stage load -3C0E8006 *LUI T6,8006 -8DCE8460 *LW T6,8460 (T6) scale for main menu -3C018005 *LUI AT,8005 -AC2E507C *SW T6,507C (AT) save to source scale for page - LUI AT,8004 - SW R0,099C (AT) highlighted option page selection - LUI AT,8004 - ADDIU T6,R0,0004 - SW T6,09A0 (AT) briefing page selection -AC200994 -SW R0,0994 (AT) selected page - SW R0,09A4 (AT) selected option on Abort dialog -AC200998 -SW R0,0998 (AT) highlighted control page selection - SW R0,09A8 (AT) edit flag - LUI AT,8004 - SW R0,09AC (AT) ? - LUI AT,8004 -... - -//7F0A69DC: DB50C don't let it reinitialize! -3C018006 LUI AT,8006 -C42484B0 LWC1 F4,84B0 (AT) 3F7FBE77 (0.999) keep until use known -0FC293D1 JAL 7F0A4F44 -C42684B4 LWC1 F6,84B4 (AT) 3F7FF972 (0.9999) keep until use known -E42409C8 SWC1 F4,09C8 (AT) -0FC23638 JAL 7F08D8E0 -E42609CC SWC1 F6,09CC (AT) -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -SIMPLIFY: -7F07E400: B2F30 trigger watch zoom; fries: V0,F6 - accepts: F12=final, F14=time -3C038008 -LUI V1,8008 -8C63A0B0 *LW V1,A0B0 (V1) -AC6011BC *SW R0,11BC (V1) reset timer -E46E11C0 *SWC1 F14,11C0 (V1) set time for transition -C46611C4 *LWC1 F6,11C4 (V1) -E46611C8 *SWC1 F6,11C8 (V1) copy current to initial value -03E00008 JR RA -E46C11CC *SWC1 F12,11CC (V1) set final value - -7F07E420: COPY FINAL VALUE TO 'DEFAULT' FOR WATCH; fries V1, F12 -3C038008 *LUI V1,8008 -8C63A0B0 *LW V1,A0B0 (V1) -C46C11CC *LWC1 F12,11CC (V1) -3C038005 *LW V1,8005 -03E00008 *JR RA -E46C507C *SWC1 F12,507C (V1) - - - -D9D9C 7F0A526C HACK MAIN MENU: -//7F0A5340: D9E70 - -JAL 7F07E400 set the transition in motion -8FAB0018 LW T3,0018 (SP) -0FC1F908 *JAL 7F07E420 copy to happy -//7F0A534C: -ADDIU T4,R0,0001 advance to inventory -LUI AT,8004 -BEQL T3,R0,7F0A53CC -LW RA,0014 (SP) -JAL 7F0A5210 -SW T4,0994 (AT) -LUI AT,8006 -LWC1 F12,845C (AT) F12=inventory zoom -LUI AT,4170 -MTC1 AT,F14 F14=time - -JAL 7F07E400 set the transition in motion -3C018005 *LUI AT,8005 -10000012 *BEQ R0,R0,7F0A53C8 -E42C507C *SWC1 F12,507C (AT) -//7F0A5384: D9EB4 - - -D9F08 7F0A53D8 - 7F0A53EC D9F1C NOP - - D9FE0 7F0A54B0: - -JAL 7F07E400 - 8FAA0018 LW T2,0018 (SP) - 0FC1F908 *JAL 7F07E420 - -ADDIU T3,R0,0002 - - 7F0A54C8 D9FF8 NOP - - DA00C 7F0A54DC: - 3C014170 LUI AT,4170 - 44817000 MTC1 AT,F14 - 3C018006 LUI AT,8006 - 0FC1F900 JAL 7F07E400 - C42C8464 LWC1 F12,8464 (AT) - 0FC1F908 *JAL 7F07E420 - 00000000 NOP - 8FBF0014 LW RA,0014 (SP) - 03E00008 -JR RA - 27BD0020 ADDIU SP,SP,0020 - -DA034 7F0A5504 - 7F0A5550 DA080 NOP - 7F0A5588 DA0B8 NOP - DA0CC 7F0A559C - 3C014170 LUI AT,4170 - 44817000 MTC1 AT,F14 - 3C018006 LUI AT,8006 - 0FC1F900 JAL 7F07E400 - C42C8468 LWC1 F12,8468 (AT) - 0FC1F908 JAL 7F07E420 - 00000000 NOP - 8FBF0014 LW RA,0014 (SP) - -JR RA - 27BD0018 ADDIU SP,SP,0018 - -DA0F4 7F0A55C4 - DA15C 7F0A562C - -JAL 7F07E400 - 3C018005 *LUI AT,8005 - 10000017 *BEQ R0,R0,7F0A5694 - E42C507C *SWC1 F12,507C (AT) - -DA1D4 7F0A56A4 - 7F0A5708 DA238 NOP - 7F0A5750 DA280 NOP - DA28C 7F0A575C - 3C014170 LUI AT,4170 - 44817000 MTC1 AT,F14 - 3C018006 LUI AT,8006 - 0FC1F900 JAL 7F07E400 - C42C8470 LWC1 F12,8470 (AT) - 0FC1F908 *JAL 7F07E420 - 00000000 NOP - 8FBF0014 LW RA,0014 (SP) - -JR RA - 27BD0018 ADDIU SP,SP,0018 - -DA2B4 7F0A5784 - DA314 7F0A57E4 - -JAL 7F07E400 - 3C018005 *LUI AT,8005 - -BEQ R0,R0,7F0A5854 - E42C507C *SWC1 F12,507C (AT) - - 7F0A5824 DA354 NOP - DA368 7F0A5838 - 3C014170 LUI AT,4170 - 44817000 MTC1 AT,F14 - 3C018006 LUI AT,8006 - 0FC1F900 JAL 7F07E400 - C42C8478 LWC1 F12,8478 (AT) - 0FC1F908 JAL 7F07E420 - 00000000 NOP - 8FBF0014 LW RA,0014 (SP) - -JR RA - 27BD0018 ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/cast intro block reduction.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/cast intro block reduction.txt deleted file mode 100644 index 042b0a9..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/cast intro block reduction.txt +++ /dev/null @@ -1,361 +0,0 @@ -Intro Characters start at 21990+0xA870 (8002B600) - -Before... -0x0 4 body -0x4 4 head -0x8 2 text1 -0xA 2 text2 -0xC 2 text3 -0xE 2 UNUSED -0x10 4 1= special set run only at end of game - - -!!!Now!!! half size! -0x0 1 body -0x1 1 head -0x2 2 text1 -0x4 2 text2 -0x6 2 text3 -0x8 1 1= special set run only at end of game -0x9 1 UNUSED - -increment is either *A or: -SLL R2,R1,0x2 *4 -ADDU R2,R2,R1 +1 -SLL R2,R2,0x1 *2 basically, only this line changes! - -+-+-+-+ -note: below is not a full dASM. Just bits to guide hacking stuff - -!!!first call is 16 bond during intros. Will need to do cuba to get tux!!! - - -+-+ - -//7F0187A0: 4D2D0 -SLL T5,T5,0x2 -> "" ',',0x1 table offset -ADDIU T6,T6,B600 -ADDU A0,T5,T6 -LW T0,0000 (A0) -> LB "" body -LUI T1,8003 -SLL T8,T7,0x4 (offset for animation entries) -ADDU T1,T1,T8 -LW T9,0004 (A0) -> LB T9,0001 (A0) head - -04D2D3 0001 40 -04D2DC 0001 80 -04D2EC 0004 80990001 - - -//7F019FA8: 4EAD8 part of text recall routine -SLL T3,T3,0x2 -> "" ',',0x1 table offset -ADDU A0,A0,T3 -JAL 7F0C1DD8 -LHU A0,B608 (A0) -> "" ',B602 (') text1 - -04EADB 0001 40 -04EAE7 0001 02 - - -//7F01A13C: 4EC6C part of text recall -SLL T3,T3,0x2 -> "" ',',0x1 table offset -... -... -... -... -BEQ S2,R0,7F01A1A0 -LHU A0,B60A (A0) -> "" ',B604 (') text2 - -04EC6F 0001 40 -04EC87 0001 04 - - -//7F01A2A4: 4EDD4 part of text recall -SLL T9,T9,0x2 -> "" ',',0x1 table offset -ADDU A0,A0,T9 -JAL 7F0C1DD8 -LHU A0,B60C (A0) -> "" ',B606 (') text3 - -04EDD7 0001 40 -04EDE3 0001 06 - - -//7F019028: 4DB58 test flag -ADDIU S2,R0,0014 -> "" ',',000A -//7F019040: 4DB70 -LW T3,0010 (V0) -> LB T3,0008 (V0) flag -BEQL T3,R0,7F019068 -LW T6,0000 (V0) -> LB "" -//7F0190A8: 4DBD8 -LW T2,0000 (T1) -> LB "" -//7F0190E8: 4DC18 -LW T8,0000 (T7) -> LB "" -//7F01914C: 4DC7C -LW T5,0000 (T4) -> LB "" -//7F0191B0: 4DCE0 -LW T2,0000 (T1) -> LB "" -//7F019214: 4DD44 -LW T9,0000 (T8) -> LB "" -//7F01927C: 4DDAC -LW T5,0000 (T4) -> LB "" - - -04DB5B 0001 0A -04DB70 0009 804B00085160000880 -04DB88 0001 80 -04DB94 0001 80 -04DBD8 0001 81 -04DC18 0001 81 -04DC7C 0001 81 -04DCE0 0001 81 -04DD44 0001 83 -04DDAC 0001 81 - -+-+-+-+-+-+- - -Use the unused byte to indicate endpoint - -7F019040: -LB T3,0008 (V0) credits flag -BEQL T3,R0,7F019068 -LB T6,0000 (V0) T6=body -//7F01904C: -LW T4,B5FC (T4) -ADDIU T5,V1,0001 -BNEL T4,R0,7F019068 -LB T6,0000 (V0) T6=body -... -//7F019064: -LB T6,0000 (V0) T6=body -ADDIU AT,R0,0027 MALE MOONRAKER... -BNEL T6,AT,7F019098 -LW T9,0000 (S0) -... -//7F019098: -ADDIU AT,R0,0028 Female Moonraker -MULTU T9,S2 -MFLO T0 -ADDU T1,S1,T0 -LB T2,0000 (T1) T2=body -BNEL T6,AT,7F0190D8 -LW T5,0000 (S0) -... -//7F0190D8: -ADDIU AT,R0,000E -MULTU T5,S2 -MFLO T6 -ADDU T7,S1,T6 -LB T8,0000 (T7) T8=body -BNEL T8,AT,7F01913C -LW T2,0000 (S0) -... -//7F01913C: -ADDIU AT,R0,000D -MULTU T2,S2 -MFLO T3 -ADDU T4,S1,T3 -LB T5,0000 (T4) T5=body -BNEL T5,AT,7F0191A0 -LW T9,0000 (S0) -... -//7F0191A0: -ADDIU AT,R0,000F -MULTU T9,S2 -MFLO T0 -ADDU T1,S1,T0 -LB T2,0000 (T1) T2=body -BNEL T2,AT,7F019204 -LW T6,0000 (S0) -... -//7F019204: -ADDIU AT,R0,000C -MULTU T6,S2 -MFLO T7 -ADDU T8,S1,T7 -LB T9,0000 (T8) T9=body -BNEL T9,AT,7F019268 -LW V1,0000 (S0) -... -//7F019268: -ADDIU A0,R0,0018 -LUI T6,8003 -MULTU V1,S2 -MFLO T3 -ADDU T4,S1,T3 -//7F01927C: -*LB T5,0000 (T4) -*BGEZ T5,7F019290 -*NOP - -++++++++++++++++++++++++++ - -reducing the animation table as well! - -8002B8BC table - last entry ani= -1 - -target format: 0x8 -0x0 2 ani -0x2 2 val 1 literal unsigned -0x4 2 val 2 fixed point (div by 10000) -0x6 2 valid types: 0=unarmed, 1=pistols, 2=rifles - -43960000 300 012C -43780000 248 00F8 -43160000 150 0096 -42F00000 120 0078 -42C40000 98 0062 -424C0000 51 0033 -42140000 37 0025 -41F80000 31 001F -41D00000 26 001A -41A80000 21 0015 -3F800000 1 2710 -3F68F5C3 0.91 238C -3F666666 0.9 2328 - - -//7F018718: get a count of the elements in table -LUI A0,8003 -ADDIU A0,A0,B8BC -SLL T5,R0,0x4 useless incrementation... -ADDU T6,A0,T5 ani1 -LW T0,0000 (T6) -LUI V1,8003 -ADDIU V1,V1,B5F0 -SW R0,0000 (V1) -BLTZ T0,7F018760 -OR V0,R0,R0 -ADDIU T9,V0,0001 -//7F018744: GET A TOTAL OF ANI ENTRIES -SLL T7,T9,0x4 increment -ADDU T8,A0,T7 -LW T1,0000 (T8) -SW T9,0000 (V1) -OR V0,T9,R0 -BGEZL T1,7F018744 -ADDIU T9,V0,0001 -//7F018760: -JAL 7000A450 ret. V0=rand -NOP -LUI V1,8003 -ADDIU V1,V1,B5F0 V1 already equal to this, but eh... -LW T2,0000 (V1) T9 already set to this, but eh... -LUI T4,8003 -LW T4,B5E8 (T4) -DIVU V0,T2 -MFHI T3 -LUI AT,8003 -SW T3,B5EC (AT) save selected ani slot -LUI T7,8003 -SLL T5,T4,0x2 -LW T7,B5EC (T7) T7=select ani. -LUI T6,8003 -... -//7F0187B0: -LUI T1,8003 -SLL T8,T7,0x4 offset to data -ADDU T1,T1,T8 -LB T9,0001 (A0) -LW T1,B8C8 (T1) T1=wep. type flag -SW T1,006C (SP) -BNEZ T2,7F0187D4 -NOP -BREAK - -//7F018C98: retrieve for use -LUI T9,8003 -LW T9,B5EC (T9) T9=selected ani. -LUI T4,8003 -ADDIU T4,T4,B8BC -SLL T3,T9,0x4 ->offset -ADDU V0,T3,T4 p->ani. -LW T2,0000 (V0) T2=ani. -LWC1 F4,0008 (V0) F4=val2 -MTC1 R0,F6 -LUI A1,8003 -SLL T8,T2,0x2 ani*offset -ADDU A1,A1,T8 -LUI A0,8003 -LW A0,B5F4 (A0) -LW A1,9D6C (A1) -LW A3,0004 (V0) val1 -LW A2,0070 (SP) -SWC1 F4,0010 (SP) -JAL 7F06FCA8 ALL VALUES MUST BE CONVERTED BY HERE! -SWC1 F6,0014 (SP) -//7F018CE8: -+ + - + -+ + -HACKITY HACK! -//7F018718: 4D248 get a count of the elements in table -3C038003 *LUI V1,8003 -2464B8BC *ADDIU A0,V1,B8BC -00005025 *OR T2,R0,R0 reset counter -//7F018724: 4D254 loopus -000A78C0 *SLL T7,T2,0x3 increment -008FC021 ADDU T8,A0,T7 -87090000 *LH T1,0000 (T8) -AC6AB5F0 *SW T2,B5F0 (V1) SAVE TOTAL -0523FFFB BGEZL T1,7F018724 -5 -254A0001 *ADDIU T2,T2,0001 -//7F01873C: 4D274 GET rand. entry # -0C002914 JAL 7000A450 -8C6CB5E8 LW T4,B5E8 (V1) T4=entry for character -004A001B DIVU V0,T2 -00005810 MFHI T3 -3C018003 LUI AT,8003 -AC2BB5EC SW T3,B5EC (AT) save selected ani slot -//7F018754: 4D284 do the conversion for val2, save to SP+14 -000B10C0 SLL V0,T3,0x3 -00411021 ADDU V0,V0,AT -9442B8C0 LHU V0,B8C0 (V0) AT=val2 -44822000 MTC1 V0,F4 -3C01461C LUI AT,461C -24214000 ADDIU AT,AT,4000 -44816000 MTC1 AT,F12 -46802220 CVT.S.W F8,F4 -460C4103 DIV.S F4,F8,F12 F4=val2/10000 -E7A40014 SWC1 F4,0014 (SP) -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP - LUI T7,8003 - SLL T5,T4,0x2 - LW T7,B5EC (T7) T7=select ani. - LUI T6,8003 - ... -//7F0187B0: 4D2E0 - LUI T1,8003 -000FC0C0 *SLL T8,T7,0x3 offset to data - ADDU T1,T1,T8 - LB T9,0001 (A0) -8129B8C3 *LB T1,B8C3 (T1) T1=wep. type flag - SW T1,006C (SP) - BNEZ T2,7F0187D4 - NOP - BREAK - -SP+14 isn't used from above to here, so could commandeer -//7F018C98: 4D7C8 retrieve for use -3C0C8003 *LUI T4,8003 -8D99B5EC *LW T9,B5EC (T4) T9=selected ani. -001958C0 *SLL T3,T9,0x3 ->offset -016C1021 ADDU V0,T3,T4 p->ani. -9447B8BE *LHU A3,B8BE (V0) A3=val1 -44873000 MTC1 A3,F6 -844AB8BC *LH T2,B8BC (V0) T2=ani. -00000000 NOP -00000000 NOP -46803320 CVT.S.W F12,F6 -000AC080 -SLL T8,T2,0x2 ani*offset -01982821 *ADDU A1,T4,T8 -C7A40014 LWC1 F4,0014 (SP) converted val2 from before -8D82B5F4 *LW A0,B5F4 (T4) -8CA59D6C -LW A1,9D6C (A1) -44076000 MFC1 A3,F12 -8FA60070 -LW A2,0070 (SP) -E7A40010 -SWC1 F4,0010 (SP) -0FC1BF2A -JAL 7F06FCA8 ALL VALUES MUST BE CONVERTED BY HERE! -AFA00014 *SW R0,0014 (SP) diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/menu 00 - legal screen/7F00A6DC - menu 00 interface - legal screen.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/menu 00 - legal screen/7F00A6DC - menu 00 interface - legal screen.txt deleted file mode 100644 index ff285dd..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/menu 00 - legal screen/7F00A6DC - menu 00 interface - legal screen.txt +++ /dev/null @@ -1,53 +0,0 @@ -7F00A6DC 3F20C menu 00 interface: legal screen -ADDIU SP,SP,FFE8 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 ;F12= [42700000] -JAL 70004544 -NOP -LUI AT,8005 -JAL 70004590 -LWC1 F12,19E4 (AT) ;F12=800519E4: 1.3... -LUI AT,42C8 -MTC1 AT,F12 ;F12= [42C80000] -LUI AT,8005 -JAL 70004650 -LWC1 F14,19E8 (AT) ;F14=800519E8: 10000.0 -JAL 70004534 ;A0->p@800232A8+24 -OR A0,R0,R0 -//7F00A71C: advance and test timer -LUI V0,8003 -ADDIU V0,V0,A8CC ;V0=8002A8CC -LUI T7,8005 -LW T7,8374 (T7) ;T7=80048374: clock timer -LW T6,0000 (V0) ;T6=8002A8CC: menu timer -OR A0,R0,R0 ;A0=0: player 1 -ADDU T8,T6,T7 ;T8=T6+T7; timer + advance -SLTI AT,T8,00F1 ;AT=TRUE if time < 241 (0xF1) -BNEZ AT,7F00A75C ;branch if timer still running -SW T8,0000 (V0) ;T8->8002A8CC: advance menu timer -JAL 7000B9F8 ;V0= #controllers plugged in -NOP -BLEZ V0,7F00A784 ;branch if no controllers -ADDIU A0,R0,0016 ;A0=16: menu 16 - no controller warning -BEQ R0,R0,7F00A784 ;update menu -ADDIU A0,R0,0001 ;A0=1: menu 01 - Nintendo logo -//7F00A75C: timer running, test for input -JAL 7000C3AC ;test if button pressed -ORI A1,R0,FFFF ;A1=FFFF: any button -BEQ V0,R0,7F00A78C ;return if nothing pressed -LUI T2,8003 -//7F00A76C: test if quick advance possible -LW T1,A92C (T2) ;T1=8002A92C: quick advance -BNEZ T1,7F00A78C ;return if set -LW T2,A930 (T2) ;T2=8002A930: TRUE if first time through menus -ADDIU A0,R0,0001 ;A0=1: menu 01 - Nintendo logo -BEQL T2,R0,7F00A784 ;branch if quick advance enabled -ADDIU A0,R0,0005 ;A0=5: menu 05 - folder selection screen -//7F00A784: update menu -JAL 7F01A5D4 ;set to menu A0 to mode A1 -ADDIU A1,R0,0001 ;A1=1: return -//7F00A78C: return -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/menu 00 - legal screen/Legal Screen Update.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/menu 00 - legal screen/Legal Screen Update.txt deleted file mode 100644 index 15b7aa9..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/menu 00 - legal screen/Legal Screen Update.txt +++ /dev/null @@ -1,151 +0,0 @@ -Text appearing on legal screen spans 8002A9CC-8002AABC [0x9C3C-0x9D2C] -Init. for legal screen object 8002AABC-8002AAF8 [0x9D2C-0x9D68] - -8002AABC: -0,1,3,0, -0,0,0,0, -0,0,0,0, -0,0,0,0 - - -converted so as not to require offset value: -00DC 0017 01 9C07 -0022 004C 00 9C08 -00E2 004D 00 9C09 -00E2 005A 00 9C0A -00E2 0067 00 9C0B -00E2 0073 00 9C0C -00E3 007F 00 9C0D -0132 00CC 01 9C0E -003C 00A2 00 9C0F -003C 00C2 00 9C10 -00DC 0103 01 9C11 -00DC 0111 01 9C12 - -hacked format: -0x0 2 x pos -0x2 2 y pos -0x4 1 alignment -0x5 1 final entry if !=0 -0x6 2 textID# - -Note: could save more room by changing order of below. - Should go back and determine exactly what is being done and minimize. -7F00A8E0 3F410 displays legal screen - accepts: A0=p->display list -27BDFED8 ADDIU SP,SP,FED8 -AFBF0044 SW RA,0044 (SP) -AFB40040 SW S4,0040 (SP) -AFB3003C SW S3,003C (SP) -AFB20038 SW S2,0038 (SP) -AFB10034 SW S1,0034 (SP) -AFB00030 SW S0,0030 (SP) -//7F00A938: display image -0FC07034 JAL 7F01C0D0 ;insert image DL via data @ 800232A8 -27B100E4 ADDIU S1,SP,00E4 ;S1=SP+E4: p->buffer -0040A025 OR S4,V0,R0 ;S4=V0: update DL -//7F00A904: buffer can init to 0 -//Utility.memset0 patch version: -02202025 OR A0,S1,R0 -0FC00020 JAL 7F000080 -24050040 ADDIU A1,R0,0040 -//else: -2625003C ADDIU A1,S1,003C -ACA00000 SW R0,0000 (A1) -14B1FFFD BNE A1,S1,-2 -24A5FFFC ADDIU A1,A1,FFFC -//7F00A988: -3C138003 LUI S3,8003 -8E73A958 LW S3,A958 (S3) ;S3=8002A958 -8E6A0008 LW T2,0008 (S3) ;T2=p->header entry for legal screen -8552000E LH S2,000E (T2) ;A0=header+E: #obj.groups -0FC2F5C5 JAL 7F0BD714 ;p->A0 allocated space in geometry mem -00122180 SLL A0,S2,0x6 ;A0<<=6: A0*=40 -AE220010 SW V0,0010 (S1) ;S1+10=V0: p->mem -AE62000C SW V0,000C (S3) ;T5+C= p->mem: save to obj.instance; org. followed this JAL -//7F00A948: -3C013F80 LUI AT,3F80 -00002825 OR A1,R0,R0 ;A1=0 -00003025 OR A2,R0,R0 ;A2=0 -00402025 OR A0,V0,R0 ;A0=S0: p->buffer -3C07457A LUI A3,457A ;A3=4000.0 (457A0000) -AFA00010 SW R0,0010 (SP) ;SP+10=0 -AFA00014 SW R0,0014 (SP) ;SP+14=0 -AFA00018 SW R0,0018 (SP) ;SP+18=0 -AFA0001C SW R0,001C (SP) ;SP+1C=0 -AFA10020 SW AT,0020 (SP) ;SP+20=1.0 -0FC165A5 JAL 7F059694 -AFA00024 SW R0,0024 (SP) ;SP+24=0 -// -0FC1BBF1 JAL 7F06EFC4 ;NSNA: 0FC1BBDA JAL 7F06EF68 -02602025 OR A0,S3,R0 ;A0=S3: p->obj.instance -24180003 ADDIU T8,R0,0003 -AE380008 SW T8,0008 (S1) ;3->S1+8: already initialized to value -AE34000C SW S4,000C (S1) ;S1+C=S4: save DL -02202025 OR A0,S1,R0 ;A0=S1: p->buffer -0FC1D1A1 JAL 7F074684 -02602825 OR A1,S3,R0 ;A1=p->obj.instance for legal screen -// -00008025 OR S0,R0,R0 ;S0=0 init.count -00008825 OR S1,R0,R0 ;S1=0 init.offset -// loop from here -0212082A SLT AT,S0,S2 -1020000B BEQ AT,R0,7F00AA58 ;branch if count<#groups -8E6E000C LW T6,000C (S3) ;T6=p->mem -//7F00AA10: fiddle with each object group -27A50058 ADDIU A1,SP,0058 ;A1=S2: p->buffer -0FC16008 JAL 7F058020 -01D12021 ADDU A0,T6,S1 ;A0=T6+S1: mem+offset -27A40058 ADDIU A0,SP,0058 ;A0=S2: p->buffer -8E69000C LW T1,000C (S3) ;T1=p->mem -0FC16327 JAL 7F058C9C -01312821 ADDU A1,T1,S1 ;A1=T1+S1: mem+offset -26100001 ADDIU S0,S0,0001 ;S0++ count++ -1000FFF4 BEQ R0,R0,7F00AA14 ;check for more groups -26310040 ADDIU S1,S1,0040 ;S1+=40 offset+=40 -//7F00AA58: begin text display -0FC2B366 JAL 7F0ACD98 ;microcode initializer for text -8E24000C *LW A0,000C (S1) ;A0=S4: p->DL, updated by routine up there -//7F00AA60: base addresses for entries and font controllers -3C10 LUI S0,7Fxx -3C138004 LUI S3,8004 -8E720EB8 LW S2,0EB8 (S3) -8E730EB4 LW S3,0EB4 (S3) -//7F00AA74: display each one aligned at said position -0040A025 OR S4,V0,R0 ;S4=V0: update DL -0FC30776 JAL 7F0C1DD8 ;V0=p->text -9604 LHU A0,xxx6 (S0) ;A0=base+6: textID -8605 LH A1,xxx0 (S0) ;A1=base+0: xpos -8606 LH A2,xxx2 (S0) ;A2=base+2: ypos -8207 LB A3,xxx4 (S0) ;A3=base+4: alignment -AFA20014 SW V0,0014 (SP) ;SP+14=p->text -02802025 OR A0,S4,R0 ;A0=S4: p->DL -AFA00010 SW R0,0010 (SP) ;SP+10=width multiplier, which is now nonexistant -AFB20018 SW S2,0018 (SP) ;SP+18=font controller 1 -0FC029F9 JAL 7F00A7E4 ;display aligned white text to screen -AFB3001C SW S3,001C (SP) ;SP+1C=font controller 2 -820D LB T5,xxx5 (S0) ;T5=base+5: flag -15A0FFF2 BNEZ T5,7F00AA74 ;loop so long as nonzero -26100008 ADDIU S0,S0,0008 ;S0+=8 next entry -//7F00AAB0: return -8FBF0044 LW RA,0044 (SP) -8FB00030 LW S0,0030 (SP) -8FB10034 LW S1,0034 (SP) -8FB20038 LW S2,0038 (SP) -8FB3003C LW S3,003C (SP) -8FB40040 LW S4,0040 (SP) -03E00008 JR RA -27BD0128 ADDIU SP,SP,0128 - -//7F00AA3C 3F56C -entries -//7F00AAEC 3F61C next subroutine - -How did I kill the images on the screen? -Copies to allocated okay. -800B9220 -3F800000 00000000 80000000 00000000 -80000000 3F800000 80000000 00000000 -00000000 00000000 3F800000 00000000 -80000000 80000000 C57A0000 3F800000 - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/pirated controller warning.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/pirated controller warning.txt deleted file mode 100644 index 9636e75..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Intro/pirated controller warning.txt +++ /dev/null @@ -1,445 +0,0 @@ -7F018450 4CF80 menu 16 constructor - no controller warning -AFBFFFD4 *SW RA,FFD4 (SP) ;SP+34 -0FC07034 JAL 7F01C0D0 ;insert image DL -27BDFFA0 -ADDIU SP,SP,FFA0 -0FC2B366 JAL 7F0ACD98 ;??? microcode insert -00402025 OR A0,V0,R0 ;A0=V0: DL -AFB00060 SW S0,0060 (SP) ;SP+60= DL -//7F018468: -00408025 *OR S0,V0,R0 ;SP+4C=p->text -0FC30776 JAL 7F0C1DD8 ;ret V0=p->text A0 -34049C76 ORI A0,R0,9C76 ;A0=ID 9C76: "No controller in controller slot 1" -//7F018474: -AFA2005C *SW V0,005C (SP) ;V0=p->text -00402025 *OR A0,V0,R0 -240500DC *ADDIU A1,R0,01B8 ;A1= xpos -0FC054D6 *JAL 7F015358 ;generic center to region -24060099 *ADDIU A2,R0,0132 ;A2= ypos -2406FFFF *ADDIU A2,R0,FFFF ;A2=white -0FC046B6 *JAL 7F011AD8 ;display text to position -8FA7005C *LW A3,005C (SP) ;A3=p->text -//7F018494: return -8FB00060 LW S0,0060 (SP) ;SP+60= DL -8FBF0034 LW RA,0034 (SP) -03E00008 JR RA -27BD0060 ADDIU SP,SP,0060 - -Now for something more intricate... -assume all these strings follow format: "%ctext%c" -remember to push RA to SP+5C or else! -//7F018474: -27A40010 *ADDIU A0,SP,0010 -00402825 *OR A1,V0,R0 -2406003E ADDIU A2,R0,003E -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -2407003C ADDIU A3,R0,003C -27A40010 *ADDIU A0,SP,0010 -240500DC *ADDIU A1,R0,01B8 ;A1= xpos -0FC054D6 *JAL 7F015358 ;generic center to region -24060099 *ADDIU A2,R0,0132 ;A2= ypos -2406FFFF *ADDIU A2,R0,FFFF ;A2=white -0FC046B6 *JAL 7F011AD8 ;display text to position -27A70010 *ADDIU A3,SP,0010 - -probably better to just use colour code instead - -+_+ - -need to unload the basic text banks, then reload after swapping letter -800484D0 is language flag. Real is -7 from actual offset to letter (english=0/7, japanese=1/8) - -7F0C16EC initializes the text bank, so may be as easy as calling it again... -7F0C1DC4 unloads bank A0 - banks 26,27,28,29,2A,2B,2C need unloading... - -psychotic trick... manually reset memory segment 6 -AFA20058 SW V0,0058 (SP) - JAL 7F0C1DC4 ;unload bank 2D: LnsnaX - ADDIU A0,R0,002D -3C108006 LUI S0,8006 -8E023C10 LW V0,3C10 (S0) -24422F80 ADDIU V0,V0,2F80 ;should be 2F80 of stuff before text... -0FC305BB JAL 7F0C16EC ;reload global text banks -AE023C14 SW V0,3C14 (S0) -8FA20058 LW V0,0058 (SP) - - -+_+ - -create a text bank, independant of region, that contains 32 strings -first 16 B400-B40F language names -final 16 B410-B41F no controller messages -Easiest is likely loading to temporary buffer, just like stage briefings. - Regardless of choice, reload the primary text files... -can probably do the same sort of: -LW 8002A950, +0xA000 - -Also need to figure min/max for language menu -Save that to 8002A910... - 8002A910 selected - 8002A911 min - 8002A912 max - -Initialize! -7F01AC80 4F7B0 jump to initialization routine -0FC0617F *JAL 7F0185FC -00000000 -3C048003 -1000000A -2484A8C0 - -actually, just use 80064C30 as a buffer -It's 0x280 large and everything plays nicely with it. - -7F0185F8 4D128 new initialize menu 16 -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -//7F018604 4D134 load text bank -2404002D ADDIU A0,R0,002D ;A0=2D: text bank # -3C058003 LUI A1,8003 ;A1=: p->buffer -ACA0A910 SW R0,A910 (A1) ;initialize menu registers -8CA5A950 LW A1,A950 (A1) -3406A000 ORI A2,R0,A000 -00A62821 ADDU A1,A1,A2 -0FC3074E JAL 7F0C1D38 ;load resource to memory -3C060007 LUI A2,0007 ;A2= 0x70000 size of buffer -//7F018620 4D150 determine min/max for language list -3C048003 LUI A0,8003 -3C058005 LUI A1,8005 -80A684D0 LB A2,84D0 (A1) ;A2=800484D0: language -24C60007 ADDIU A2,A2,0007 ;A2+=7: account for funny offset -A086A910 SB A2,A910 (A0) ;8002A910= selected entry -24A20010 ADDIU V0,A1,0010 ;cutoff -//7F018638 4D168 loop to figure min entry--presumes there must be at least one entry! -90A68630 LBU A2,8630 (A1) -50C0FFFE BEQL A2,R0,-2 -24A50001 ADDIU A1,A1,0001 -30A6001F ANDI A2,A1,001F -A086A911 SB A2,A911 (A0) -//7F01864C 4D17C loop for Max. Do it for him. -90A68631 LBU A2,8631 (A1) -10C00002 BEQ A2,R0,+2 -24A50001 ADDIU A1,A1,0001 -14A2FFFC BNE A1,V0,-4 -30A6001F ANDI A2,A1,001F -A086A912 SB A2,A912 (A0) -//7F018664 4D194 return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -Remember to unload the bank before returning to main menu! -Also, reset legal screen counter when returning. - -7F018450 4CF80 menu 16 constructor - no controller warning -AFBFFFD4 *SW RA,FFD4 (SP) ;SP+34 -0FC07034 JAL 7F01C0D0 ;insert image DL -27BDFFA0 -ADDIU SP,SP,FFA0 -0FC2B366 JAL 7F0ACD98 ;??? microcode insert -00402025 OR A0,V0,R0 ;A0=V0: DL -AFB00060 SW S0,0060 (SP) ;SP+60= DL -00408025 OR S0,V0,R0 ;S0=V0: p->DL -AFB1005C *SW S1,005C (SP) -// end insertion -2411000F *ADDIU S1,R0,000F -//7F018474: determine if language or no controller warning -0C002E9C *JAL 7000BA70 ;connected controller flags -3404B400 *ORI A0,R0,B400 -30420001 *ANDI V0,V0,0001 ;mask for controller 1 -00021100 *SLL V0,V0,0x4 ;V0 * 0x10 -00442021 *ADDU A0,A0,V0 ;B400 or B410: base for different messages -0FC30776 JAL 7F0C1DD8 ;ret V0=p->text A0 -00912021 *ADDU A0,A0,S1 -// inserted: corrects ERR messages while other screen loads -0441000F +BEQ V0,+skip ;skip writting if default string... -//7F018474: -AFA20058 *SW V0,0058 (SP) ;V0=p->text -00402025 OR A0,V0,R0 -240501B8 ADDIU A1,R0,01B8 ;A1= xpos -0FC054D6 JAL 7F015358 ;generic center to region -24060132 ADDIU A2,R0,0132 ;A2= ypos -// get real y, colour, and print! -00112880 *SLL A1,S1,0x2 -00B12821 *ADDU A1,A1,S1 -00052880 *SLL A1,A1,0x2 ;offset 0x14 each line -3C068003 *LUI A2,8003 -80C6A910 *LB A2,A910 (A2) ;A2=8002A910: selected option -52260002 *BEQL S1,A2,+2 -2406FFFF ADDIU A2,R0,FFFF ;A2=white -2406FF80 *ADDIU A2,R0,FF80 ;A2=50% grey -0FC046B6 JAL 7F011AD8 ;display text to position -8FA70058 *LW A3,0058 (SP) ;A3=p->text -00028025 +OR S0,V0,R0 -1E20FFE8 *BGTZ S1,-loopus -2631FFFF *ADDIU S1,S1,FFFF -//7F018494: return -00101025 +OR V0,S0,R0 ;make sure it spits back the display list! -8FB1005C *LW S1,005C (SP) -8FB00060 LW S0,0060 (SP) ;SP+60= DL -8FBF0034 LW RA,0034 (SP) -03E00008 JR RA -27BD0060 ADDIU SP,SP,0060 - -alternate... -//7F018474: determine if language or no controller warning -0C002E9C *JAL 7000BA70 ;connected controller flags -3404B400 *ORI A0,R0,B400 -30420001 *ANDI V0,V0,0001 ;mask for controller 1 -00021100 *SLL V0,V0,0x4 ;V0 * 0x10 -00442021 *ADDU A0,A0,V0 ;B400 or B410: base for different messages -0FC30776 JAL 7F0C1DD8 ;ret V0=p->text A0 -00912021 *ADDU A0,A0,S1 -// inserted: corrects ERR messages while other screen loads -0441000F BGEZ V0,+skip ;skip writting if default string or NULL. Normal strings will be 80- addresses, therefore "negative" -//7F018474: -00023825 OR A3,V0,R0 ;A3=p->text -0C001127 JAL 7000449C ;V0=view.width -00102025 OR A0,S0,R0 -// get real y, colour, and print! -0C00112B JAL 700044AC ;V0=view.height -3C058003 LUI A1,8003 -00023103 SRA A2,V0,0x4 -00D10019 MULTU A2,S1 -80A5A910 LB A1,A910 (A1) ;A2=8002A910: selected option -00003012 MFLO A2 ;not as small as shifts, but better. can handle any size screen... -52250002 BEQL S1,A1,+2 -3C050102 LUI A1,0102 ;A3=white -3C050002 LUI A1,0002 ;A3=50% grey -AFA50010 SW A1,0010 (SP) -0FC30D68 JAL 7F0C35A0 ;display text to position -00022843 SRA A1,V0,0x1 ;A1=midscreen xpos -00028025 OR S0,V0,R0 -1E20FFE6 *BGTZ S1,-loopus -2631FFFF *ADDIU S1,S1,FFFF -// -00101025 +OR V0,S0,R0 ;make sure it spits back the display list! - - - -Write up a basic interface -Up/down, then button pressing -JAL 7000C3AC ;test if button pressed -should work... -7F013D78 488A8 generic thingy advance - accepts: A0=p->value, A1=inc/decrement, A2=maximum value, A3=minimum value (opt., def=0) - -replace 7F00A798 with this bugger! -7F01AE3C 4F96C reroute to menu 16 interface -0FC0613A *JAL 7F0184E8 - NOP - BEQ R0,R0,7F01AEF0 - LW RA,0014 (SP) - -7F0184E8 4D018 new menu 16 interface - no controller warning/language select -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -//7F0184F0: up on stick -0FC29422 JAL 7F0A5088 ;V0= TRUE if A0 pressed up on stick -00002025 OR A0,R0,R0 -5440000C BNEL V0,R0,+switch -24050001 ADDIU A1,R0,0001 -//7F018500: down on stick -0FC29431 JAL 7F0A50C4 ;V0= TRUE if A0 pressed down on stick -00002025 OR A0,R0,R0 -14400007 BNE V0,R0,+switch-1 -//7F01850C: buttons -00002025 OR A0,R0,R0 ;A0=0: player 1 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -24050C0C ADDIU A1,R0,0C0C ;A1= C up (8), + up, c down (4) + down -1040000B *BEQ V0,R0,+press ;branch if buttons pressed -30420808 ANDI V0,V0,0808 -54400002 BNEL V0,R0,+2 -24050001 ADDIU A1,R0,0001 -2405FFFF ADDIU A1,R0,FFFF -//7F01852C: +addmendum -3C048004 +LUI A0,8004 -AC800AE0 +SW R0,0AE0 (A0) ;80040AE0: player 4,3,2,1 -//7F018534: switch -3C048003 LUI A0,8003 -2484A910 ADDIU A0,A0,A910 -90860002 LBU A2,0002 (A0) -0FC04F5F JAL 7F013D7C -90870001 LBU A3,0001 (A0) -//7F018548: detect a pressed vs. held control stick -0FC05432 JAL 7F0150C8 ;resets controller flag so you get a pressed, not constant action -00002025 OR A0,R0,R0 -// -//7F018550: test for final! -0C0030EB JAL 7000C3AC ;V0=TRUE if A, B, Z, START pressed -3405F000 ORI A1,R0,F000 ;A1=F000: -1040000E BEQ V0,R0,+return -//7F01855C: set menu -00002025 OR A0,R0,R0 ;A0=0: legal screen -0FC06975 JAL 7F01A5D4 ;set to menu A0 to mode A1 -00002825 OR A1,R0,R0 ;A1=0: current -//7F018568: fix regioncode -3C028003 LUI V0,8003 -8042A910 LB V0,A910 (V0) ;V0=8002A910: selected option -2442FFF9 ADDIU V0,V0,FFF9 ;value-7 -3C048005 LUI A0,8005 -A08284D0 SB V0,84D0 (A0) ;save new regioncode -//7F018584: reload global text bank -0C002667 JAL 7000999C -24040006 ADDIU A0,R0,0006 -0FC305BB JAL 7F0C16EC ;reload global text banks -00000000 NOP -// -//7F018598 4D0C8 general return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -USE? -3C048006 LUI A0,8006 -8C823C10 LW V0,3C10 (A0) -24422F80 ADDIU V0,V0,2F80 ;should be 2F80 of stuff before text... -0FC305BB JAL 7F0C16EC ;reload global text banks -AC823C14 SW V0,3C14 (A0) - - -Most sensible thing is to reprogram. -In setup loop, arrange it so text loads last. -Save the location for the text, or draw from first text bank. -Then, reset position for mem6 to this, reloading text - -7000601C 6C1C setup loop -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -0C00174C JAL 70005D30 ;initializes 21990 data, inc. basic text -00000000 NOP -0FC33F77 JAL 7F0CFDDC ; -00000000 NOP -0C001A8C JAL 70006A30 ;sets up animation table -00000000 NOP -0C001818 JAL 70006060 ;run game -00000000 NOP -1000FFFD BEQ R0,R0,-3 -00000000 NOP - -edit to read: -0C00174C JAL 70005D30 ;initializes 21990 data, inc. basic text -00000000 NOP -0FC33F77 JAL 7F0CFDDC ; -00000000 NOP -0C001A8C JAL 70006A30 ;sets up animation table -00000000 NOP -0FC305BB +JAL 7F0C16EC ;intro images and text banks -00000000 +NOP - - - 6B3C call text initializer - remove this line... -0FC305BB JAL 7F0C16EC ;intro images and text banks -00000000 NOP - -To use this setup, just need to reset mem6 manually to the start of the "text" stuff. -That's text-2F80, which you can also find at 8008C6F4 -3C048009 LUI A0,8009 -8C84C6F4 LW A0,C6F4 (A0) -3C028006 LUI V0,8006 -0FC305BB JAL 7F0C16EC ;reload global text banks -AC443C14 SW A0,3C14 (V0) - -To keep text codes from failing on return to menu 0, just set menu 0 to always reset bank 2D. -If loaded, it gets unloaded. If not, nothing happens. -7F00A5E8 3F118 menu 00 initialize: legal screen -27BDFFD0 ADDIU SP,SP,FFD0 -AFBF001C SW RA,001C (SP) -0C001BF4 JAL 70006FD0 -00000000 NOP -//7F01857C: - *NOP - *NOP -240E0001 ADDIU T6,R0,0001 -3C188003 -LUI T8,8003 -AF0EA93C *SW T6,A93C (T8) ;1->8002A93C: -AF00A8CC *SW R0,A8CC (T8) ;0->8002A8CC: - - - -7F00A6DC: 3F20C menu 00 interface: legal screen -27BDFFE8 ADDIU SP,SP,FFE8 -3C014270 LUI AT,4270 -AFBF0014 SW RA,0014 (SP) -0C001151 JAL 70004544 -44816000 -MTC1 AT,F12 ;F12= [42700000] -3C013FAB *LUI AT,3FAB -0C001164 JAL 70004590 -44816000 *MTC1 AT,F12 ;F12= 1.3... -3C0142C8 LUI AT,42C8 -44816000 MTC1 AT,F12 ;F12= [42C80000] -3C01461C *LUI AT,461C -0C001194 JAL 70004650 -44817000 *MTC1 AT,F14 ;F12= 10000.0 -0C00114D JAL 70004534 ;A0->p@800232A8+24 -00002025 OR A0,R0,R0 -//7F00A71C: test if no controllers or quick-advance to language select -0C002E7E JAL 7000B9F8 ;V0= #controllers plugged in -00002825 *OR A1,R0,R0 ;immediate menu change -18400018 BLEZ V0,+switch ;branch if no controllers -24040015 *ADDIU A0,R0,0015 ;A0=16: menu 16 - no controller warning -//7F00A75C: timer running, test for input -00002025 OR A0,R0,R0 -0C0030EB JAL 7000C3AC ;test if button pressed -3405FFFF ORI A1,R0,FFFF ;A1=FFFF: any button -24040030 *ADDIU A0,R0,0030 -10820012 *BEQ A0,V0,+switch ;branch if L+R pressed -24040015 *ADDIU A0,R0,0015 ;A0=16: menu 16 - no controller warning -3042FFC0 *ANDI V0,V0,FFC0 ;mask away the L and R -2C420001 *SLTIU V0,V0,0001 ;TRUE if nothing pressed... -// -3C0A8003 LUI T2,8003 -3C0F8005 LUI T7,8005 -8DEF8374 LW T7,8374 (T7) ;T7=80048374: clock timer -8D4EA8CC *LW T6,A8CC (T2) ;T6=8002A8CC: menu timer -01CFC021 ADDU T8,T6,T7 ;T8=T6+T7; timer + advance -8D45A92C *LW A1,A92C (T2) ;A1=8002A92C: quick advance if zero -00A22825 *OR A1,A1,V0 ;FALSE if both quick advance and button pressed -2B0100F1 SLTI AT,T8,00F1 ;AT=TRUE if time < 241 (0xF1) -00250824 *AND AT,AT,A1 -14200007 BNEZ AT,7F00A75C ;SKIP if timer still running and you're paying attention -AD58A8CC *SW T8,A8CC (T2) ;T8->8002A8CC: advance menu timer -//7F00A76C: test if quick advance possible -8D44A930 *LW A0,A930 (T2) ;T2=8002A930: TRUE if first time through menus -00822025 OR A0,A0,V0 -38840001 *XORI A0,A0,0001 ;FALSE if first run, TRUE if not -00042080 *SLL A0,A0,0x2 -//7F00A784: update menu -0FC06975 JAL 7F01A5D4 ;set to menu A0 to mode A1 -24840001 *ADDIU A0,A0,0001 ;A0++: menu 01 - Nintendo logo / menu 05 - folder selection screen -//7F00A78C: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -+_+ - -About the multi-usage issue... -occurs 2nd, 3rd time through menus -try working from 7F0C1820 -crash occurs in 7F0C1904, while settting/using allocated memory -Must not be clearing this right or something - -+_+ - -7F009760 -writes text to screen at absolute coordinates -this text is tinted in japanese, using 7F0AE6EC and background colour at 8002A9B0 -otherwise draws using 7F0ADABC -accepts: A0=p->display list target, A1=p->x position, A2=p->y position, A3=p->text, - SP+10=p->2nd font table, SP+14=p->1st font table, - SP+18=font colour, - SP+1C=clip width, SP+20=clip height, - SP+24=y offset, SP+28=x offset -7F0ADABC -display text; used by MP watch menu -accepts: A0=p->display list target, A1=p->x position, A2=p->y position, A3=p->text, - SP+10=p->2nd font table, SP+14=p->1st font table, - SP+18=font colour, - SP+1C=clip width, SP+20=clip height, - SP+24=y offset, SP+28=x offset diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/INTERFACE HACK.TXT b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/INTERFACE HACK.TXT deleted file mode 100644 index 5f89568..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/INTERFACE HACK.TXT +++ /dev/null @@ -1,823 +0,0 @@ -To disable cursor, just don't call the "draw cursor" routine. -If disabled, also skip over "control stick tracking". - - -7F010848: MP options interface -ADDIU SP,SP,FFC0 -LUI AT,4270 -SW RA,0014 (SP) -MTC1 AT,F12 -SW R0,003C (SP) -SW R0,0038 (SP) -SW R0,0034 (SP) -SW R0,0030 (SP) -SW R0,002C (SP) -SW R0,0028 (SP) -SW R0,0024 (SP) -SW R0,0020 (SP) -JAL 70004544 -SW R0,001C (SP) -// -LUI AT,8005 -JAL 70004590 ;F12->page width -LWC1 F12,1A80 (AT) ;F12=80051A80: -LUI AT,42C8 -MTC1 AT,F12 -LUI AT,8005 -JAL 70004650 ;set page height -LWC1 F14,1A84 (AT) ;F14=80051A84: -JAL 70004534 -OR A0,R0,R0 -//7F0108B8: back one menu if only 1 player -JAL 7000B9F8 ;V0= #controllers plugged in -NOP -SLTI AT,V0,0002 -BEQ AT,R0,7F0108D0 ;branch if >1 -ADDIU A0,R0,0006 ;A0=6: Mode menu -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 ;A1=0 -LUI A0,8003 -JAL 7F00D7FC ;set cursor position to mode setting A0 -LW A0,A8F0 (A0) ;A0=8002A8F0: mode -//7F0108D0: 45400 set # players to max if invalid -JAL 7000B9F8 ;V0= #controllers plugged in -NOP -LUI T6,8003 -LW T6,B520 (T6) ;T6=8002B520: -SLT AT,V0,T6 -*BEQ AT,R0,7F010900 -*NOP -JAL 7000B9F8 ;V0= #controllers plugged in -NOP -JAL 7F010608 ;initialize MP menu -OR A0,V0,R0 ;A0=V0: #players -//7F0108FC: 45430 detect submenus -*LUI AT,8003 -*LB V0,B53B (AT) ;8002B53B=TRUE if editting game length -*BEQ V0,R0,+7F010900 ;disregard if not in submenu -SW R0,97CC (AT) -//7F010908: detect button controls -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 held -ORI A1,R0,EF3F ;A,Z,B,left, right, up ;less expensive to just mask for what you want -*OR A2,R0,V0 -//7F010918: detect left -*JAL 7F0A4F50 ;V0=TRUE if holding left on stick -*ANDI AT,A2,0222 ;TRUE if left pressed -//7F010920: buttons -*OR AT,AT,V0 -*BEQ AT,R0,+4 ;branch if not left -*LUI A1,8007 -*ADDIU AT,R0,0001 -*SB AT,97D1 (A1) -*SB R0,97D2 (A1) -//7F010938: detect right -*JAL 7F0A4F74 ;V0=TRUE if holding right on stick -*ANDI AT,A2,0111 -*OR AT,AT,V0 -*LUI T2,8003 -*LBU T2,B544 (T2) ;8002B544: mask flags -*ANDI V0,T2,0080 ;TRUE if points locked -*XORI V0,V0,0080 -*OR AT,AT,V0 -*BEQ AT,R0,+3 -*ADDIU AT,R0,0001 -*SB AT,97D2 (A1) -*SB R0,97D1 (A1) -//7F010968: kill menu -*ANDI AT,A2,E000 ;TRUE if A,Z,B -*BEQ AT,R0,+3 ;branch if not killing menu -*NOP -*JAL 7F010170 ;Toggle menu and flags -NOP -//7F01097C: detect up -*JAL 7F0A5028 ;holding up on stick -*ANDI AT,A2,0808 -*OR AT,AT,V0 -*BNEZL AT,+alter -*ADDIU A0,R0,0001 -//7F010990: detect down -*JAL 7F0A504C ;holding down on stick -*ANDI AT,A2,0404 -*OR AT,AT,V0 -*BNEZL V0,R0,+alter -*ADDIU A0,R0,FFFF -*OR A0,R0,R0 -//7F0109A8: alter -*LB V0,97D1 (A1) ;TRUE if points highlighted -*BEQ V0,+3 ;branch if changing points -NOP -*JAL 7F010EE0 ;change points -NOP -*BNE V0,+3 -NOP -//7F0109C4: minutes -*JAL 7F010198 ;change minutes -NOP -*BEQ R0,R0,7F010F00 -NOP -//7F0109D4: 45504 fry all highlighting before revision -OR A0,R0,R0 -JAL 7000C30C ;V0= player A0's buttons A1 held -ORI A1,R0,A000 ;A,Z button -BNEZ V0,7F010AF4 -LUI AT,8003 -SW R0,A8E4 (AT) -SW R0,A8DC (AT) -SW R0,A8E0 (AT) -LUI AT,8007 -SW R0,97C8 (AT) -SW R0,97D0 (AT) -//7F010970: test if tab 3 highlighted -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 --ADDIU V1,R0,0001 -BEQ V0,R0,7F010984 -*LUI T7,8003 -BEQ R0,R0,7F010AF4 -*SW V1,A8E4 (T7) -//7F010984: test if tab 1 highlighted -JAL 7F00A1E4 ;V0=1 if cursor on tab 1 -NOP -BEQ V0,R0,7F0109A4 --LWC1 F4,A90C (T7) ;F4=8002A90C: vert.pos. -BEQ R0,R0,7F010AF4 -*SW V1,A8DC (T7) -//7F0109A4: vertical rollover tests -TRUNC.W.S F6,F4 -MFC1 V0,F6 ;V0=vert.pos -*LBU T2,B544 (T7) ;T2=8002B544: MP option locks -LUI T1,8007 -//7F0109C0: rollover trigger bypasses for locked MP options -SLTI AT,V0,0119 -BNEZ AT,7F0109E0 -ANDI T0,T2,0040 ;T0=aim adjustment lock -BNEL T0,R0,7F010AF4 -SB V1,97D0 (T1) -//7F0109E0: -SLTI AT,V0,0105 -BNEZ AT,7F010A08 -ANDI T0,T2,0020 ;T0=control style lock -BNEL T0,R0,7F010AF4 -SB V1,97CF (T1) -//7F010A08: -SLTI AT,V0,00F1 -BNEZ AT,7F010A30 -ANDI T0,T2,0010 ;T0=health lock -BNEL T0,R0,7F010AF4 -SB V1,97CE (T1) -//7F010A30: -SLTI AT,V0,00DD -BNEZ AT,7F010A58 -ANDI T0,T2,0008 ;T0=character lock -BNEL T0,R0,7F010AF4 -SB V1,97CC (T1) -//7F010A58: -SLTI AT,V0,00C9 -BNEZ AT,7F010A80 -ANDI T0,T2,0004 ;T0=weapon select lock -BNEL T0,R0,7F010AF4 -SB V1,97CD (T1) -//7F010A80: 455B0 -SLTI AT,V0,00B5 -BNEZ AT,7F010AA8 -ANDI T0,T2,0002 ;T0=game length lock -BNEL T0,R0,7F010AF4 -SB V1,97CB (T1) -//7F010AA8: -SLTI AT,V0,00A1 -BNEZ AT,7F010AD0 -ANDI T0,T2,0001 ;T0=stage select lock -BNEL T0,R0,7F010AF4 -SB V1,97CA (T1) -//7F010AD0: -SLTI AT,V0,008D -BNEL AT,R0,7F010AF4 -SB V1,97C8 (T1) ;V1=800697C8: highlight players -SB V1,97C9 (T1) ;V1=800697CC: highlight scenario -//7F010AF4: start controller detection -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,1000 -BEQ V0,R0,7F010B2C -ADDIU V1,R0,0001 -//7F010B08: start a multiplayer game -LUI AT,8003 -LUI A0,8006 -SW V1,A8D0 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -BEQ R0,R0,7F010CB0 -NOP -//7F010B2C: detect selecting currently highlighted option -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ORI A1,R0,A333 -BEQ V0,R0,7F010C80 ;try B instead if none found -ANDI V1,V0,2626 -BEQ V1,R0,7F010B4C -ADDIU V1,R0,0001 -ADDIU V1,R0,FFFF -LUI AT,8003 -LW T8,A8E4 (AT) -BNEL T8,R0,7F010BDC -SW V1,A8D8 (AT) -LW T8,A8DC (AT) -BNEL T8,R0,7F010BDC -SW V1,A8D0 (AT) -//7F010B68: detect if players selected -LUI AT,8007 -LB T8,97C8 (AT) -BNEL T8,R0,7F010BDC -SW V1,003C (SP) -//7F010B7C: detect if scenario selected -LB T8,97C9 (AT) -BNEL T8,R0,7F010BDC -SW V1,0038 (SP) -//7F010B84: detect if stage select selected -LB T8,97CA (AT) -BNEL T8,R0,7F010BDC -SW V1,0034 (SP) -//7F010B90: detect if game length selected -LB T8,97CB (AT) -BNEL T8,R0,7F010BDC -*SB V1,0030 (SP) -//7F010B9C: detect if character selected -LB T8,97CC (AT) -BNEL T8,R0,7F010BDC -SW V1,002C (SP) -//7F010BA8: detect if weapon select selected -LB T8,97CD (AT) -BNEL T8,R0,7F010BDC -SW V1,0028 (SP) -//7F010BB4: detect if health selected -LB T8,97CE (AT) -BNEL T8,R0,7F010BDC -SW V1,0024 (SP) -//7F010BC0: detect if control style selected -LB T8,97CF (AT) -BNEL T8,R0,7F010BDC -SW V1,0020 (SP) -//7F010BCC: detect if aim adjustment selected -LB T8,97D0 (AT) -*BNEL T8,R0,7F010BDC -*SW V1,001C (SP) -//7F010C80: detect if B button pressed -OR A0,R0,R0 -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -ADDIU A1,R0,4000 -BEQ V0,R0,7F010CB0 -ADDIU V1,R0,0001 -LUI AT,8003 -SW V1,A8D8 (AT) ;V1->8002A8D8: tab 3 selected (same as 'back') -//7F010BDC: play selected sound effect -OR A2,R0,R0 -ADDIU A1,R0,00C7 -LUI A0,8006 -JAL 70008E08 -LW A0,3720 (A0) -//7F010CB0: show folder components -LUI A0,8003 -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -OR A1,R0,R0 ;A1=0: item #: tabs on side of folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0001 ;A1=1: item #: basic folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0003 ;A1=3: item #: OHMSS -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -LUI A0,8003 -LW A0,A95C (A0) ;A0=8002A95C: p->object instance -ADDIU A1,R0,0005 ;A1=5: item #: CONFIDENTIAL - multi -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=1: visible -//stick tracking is placed earlier -JAL 7F009B84 ;control stick tracking -NOP -//7F010D14: detect if 'back' selected -*LUI T7,8003 -*LW T6,A8D8 (T7) ;T6=8002A8D8: TRUE if tab3 selected -BEQ T6,R0,7F010D48 ;branch if selected -*ADDIU A0,R0,0006 ;A0=6: menu 6 - mode select folder -//7F010D2C: backtrack one folder... -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 ;A1=0: current menu -LUI A0,8003 -JAL 7F00D7FC ;set cursor position to mode setting A0 -LW A0,A8F0 (A0) ;A0=8002A8F0: mode -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010D48: detect if 'start' selected -*LW T6,A8D0 (T7) ;T7=8002A8D0: TRUE if tab1 selected -LW T3,003C (SP) -*BEQ T6,R0,7F010DF4 -//7F010D5C: start MP game! -*LH T8,B534 (T7) -SLL T9,T8,0x3 -*SH T8,B076 (T7) -*ADDU V0,T7,T9 -LB V0,B07B (V0) -BGEZ V0,7F010DD0 -*SW V0,A8F4 (T7) -//7F010D84: handle random stage select -JAL 7000A450 -LUI T0,8003 -LHU AT,B074 (T0) -DIVU V0,AT -MFHI V1 -ADDIU A0,V1,0001 -SLL AT,A0,0x3 -ADDU T1,T0,AT -LBU V0,B07F (T1) -ANDI V0,V0,0001 -BNEZ V0,7F010D84 -LB V0,B07B (T1) -SW V0,A8F4 (T0) -JAL 7F0100D0 -SH A0,B076 (T0) -BEQ V0,R0,7F010D84 -NOP -//7F010DD4: -ADDIU T2,R0,FFFF -LUI AT,8003 -SW T2,A8F8 (AT) -ADDIU A0,R0,000B -JAL 7F01A5D4 ;set menu A0 to mode A1 -ADDIU A1,R0,0001 -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -// -NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -*NOP -NOP -NOP -NOP -NOP -//7F010DF4: press A: 'Players' selected -BEQ T3,R0,7F010E34 -LW T4,0038 (SP) -JAL 7000B9F8 ;V0= #controllers plugged in -ADDIU T4,R0,0001 -LUI V1,8003 -LW V1,B520 (V1) ;V1=8002B520: -ADDU A0,V1,T3 -SLT AT,V0,A0 -BNEL AT,R0,7F010E24 -ADDIU A0,R0,0002 -BEQL A0,T4,7F010E24 -ADDU A0,R0,V0 ;A0=V0: #players -JAL 7F010608 ;initialize MP menu -NOP -BEQ R0,R0,7F010F00 -NOP -//7F010E34: press A: 'Scenario' selected -BEQ T4,R0,7F010E50 -LW T5,0034 (SP) -ADDIU A0,R0,0013 -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010E50: press A: 'Level' selected -BEQ T5,R0,7F010E6C -*LB T6,0030 (SP) -ADDIU A0,R0,0012 -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010E6C: press A: 'Game Length' selected -BEQ T6,R0,7F010E84 -LW T7,002C (SP) -JAL 7F010170 ;Toggle menu and flags -*NOP -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010E84: press A: 'Select Character' selected -BEQ T7,R0,7F010EA0 -LW T8,0028 (SP) -ADDIU A0,R0,000F -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010EA0: press A: 'Weapons' selected -BEQ T8,R0,7F010EB8 -LW T9,0024 (SP) -JAL 7F0C65CC -OR A0,R0,T8 -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010EB8: press A: 'Health' selected -BEQ T9,R0,7F010ED4 -LW T0,0020 (SP) -ADDIU A0,R0,0010 -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010ED4 press A: 'Control Style' selected -BEQ T0,R0,7F010EF0 -LW T1,001C (SP) -ADDIU A0,R0,0011 -JAL 7F01A5D4 ;set menu A0 to mode A1 -OR A1,R0,R0 -BEQ R0,R0,7F010F04 -LW RA,0014 (SP) -//7F010EF0: press A: 'Aim' selected -BEQL T1,R0,7F010F04 -LW RA,0014 (SP) -JAL 7F01023C -OR A0,R0,T1 -//7F010F00: 45A30 return! -LW RA,0014 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -+_+ - -7F010170 44CA0 toggle game length editting; ONLY use when hovering over thingy -3C018003 LUI AT,8003 -802EB53B LB T6,B53B (AT) ;T6=menu flag -39CE0001 XORI T6,T6,0001 -A02EB53B SB T6,B53B (AT) ;toggle menu -3C018006 LUI AT,8007 -AC2097D0 SW R0,97D0 (AT) -A02E97D1 SB T6,97D1 (AT) -39CE0001 XORI T6,T6,0001 -03E00008 JR RA -A02E97CB SB T6,97CB (AT) -//7F010198 - -7F010ED8/7F010EE0 advance points/Lives - accepts: A0=increment/decrement, -//7F010ED8: 45A08 lives -10000002 BEQ generic -24050002 ADDIU A1,R0,0002 -//7F010EE0: 45A10 points -00002825 OR A1,R0,R0 -//7F010EE4: 45A14 generic; be sure A1 is set -3C018005 LUI AT,8005 -00250821 ADDU AT,AT,A1 -842E839C LH T6,839C (AT) -01C47021 ADDU T6,T6,A0 -05C20001 BLTZL T6,+1 -240E0064 ADDIU T6,R0,0064 -25C4FF9C ADDIU A0,T6,FF9C -5C800001 BGTZL A0,+1 -00007021 OR T6,R0,R0 -03E00008 JR RA -A42E839C SH T6,839C (AT) - -7F010198 44CC8 advance minutes/flag - accepts: A0=increment/decrement -24010E10 ADDIU AT,0E10 -00240019 MULTU AT,A0 -3C018005 LUI AT,8005 -8C2E8398 LW T6,8398 (AT) -00002012 MFLO A0 -01C47021 ADDU T6,T6,A0 -3C040003 LUI A0,0003 -34844BC0 ORI A0,4BC0 (A0) -05C20001 BLTZL T6,+1 -00047021 OR T6,A0,R0 -01C42023 SUBU A0,A0,T6 -5C800001 BGTZL A0,+1 -00007021 OR T6,R0,R0 -03E00008 JR RA -AC2E8398 SW T6,8398 (AT) - -+_+ - -Flag and other time-based scores need hacking! -7F0C38D8 V0=score, but need a V1=time as well -used in 3 places: -7F0BEF4C F3A7C run MP game -7F0C3CD4 F8804 -7F0C45CC F90FC MP watch display - - -This is a slight edit, getting proper scoring for revised score thingy -7F0C3C94 F87C4 display rank -//7F0C3CB4: F87E4 -AFA20078 *SW V0,0078 (SP) -... -//7F0C3CD0: F8800 -0FC30E36 -JAL 7F0C38D8 ;now returns V0=score(ms), V1=time -AFA5003C -SW A1,003C (SP) -00431021 *ADDU V0,V0,V1 ;time is worth a lot more: 1 kill = 1ms! - -likewise here, in another display routine -//7F0C45C8: F90F8 -AFA30044 SW V1,0044 (SP) -0FC30E36 JAL 7F0C38D8 -AFA40090 SW A0,0090 (SP) -00431021 *ADDU V0,V0,V1 -8FA30044 -LW V1,0044 (SP) -8FA40090 -LW A0,0090 (SP) -AC620000 -SW V0,0000 (V1) -8FAF00D0 -LW T7,00D0 (SP) -24840001 -ADDIU A0,A0,0001 -148FFFF6 *BNE A0,T7,7F0C45CC -24630004 -ADDIU V1,V1,0004 - -The whole scoring doohick needs hacking, but for now this will patch it to play nicely with everyone else -7F0C38D8 F8408 now returns V0=score, V1=time -//7F0C3AF8: - LW T8,0020 (T3) T8=0x20 in player stats... - ADDIU T9,T2,FFFE T9=#players-2 - MULTU T8,T9 - MFLO T5 -0FC051D6 *JAL 7F014758 ;V0=scenario -//7F0C3B0C: F863C -24030002 *ADDIU V1,R0,0002 -1443005B *BNE V0,V1,7F0C3C80 ;branch if not The Living Daylights -//7F0C3B14: F8644 The Living Daylights -008D2021 -ADDU A0,A0,T5 -1000005A -BEQ R0,R0,7F0C3C84 -8D630060 *LW V1,0060 (T3) ;A0=flag timer counter -//7F0C3B20: F8650 You Only Live Twice -916E0068 LBU T6,0068 (T3) ;T6=death counter -240F0004 ADDIU T7,R0,0004 ;T7=4 -10000055 BEQ R0,R0,7F0C3C80 -01EE2023 SUBU A0,T7,T6 ;A0=4-death counter -//next one starts one command too late - -*OR V1,R0,R0 ;V1=A1=time data -//7F0C3C84: F87B4 return... --LW RA,0014 (SP) --ADDIU SP,SP,0038 --JR RA --OR V0,A0,R0 ;V0=A0=score data - -Now, the game runtime checks -//7F0BEED4: -JAL 7F09A464 V0=#players --OR A1,R0,R0 A1=0 --OR A3,V0,R0 A3=V0=#players --OR A2,R0,R0 A2=0 --BLEZ V0,7F0BEF90 lets hope the player total isn't invalid... --OR A0,R0,R0 A0=0 --LUI V1,8008 --MTC1 R0,F0 F0=0 -ADDIU V1,V1,9EE0 ;V1=80079EE0=player data pointers -//7F0BEEFC: 0xF3A2C inserted: skip score test if points manually disabled on menu -00000000 *NOP -3C028003 *LUI V0,8003 -9042B544 *LBU V0,B544 (V0) -30410080 *ANDI AT,V0,0080 ;YOLT scenario mask -10200000 *BEQ AT,R0,7F0BEFB8 ;branch if points disabled -//7F0BEF0C: 0xF3A3C -8C620000 LW V0,0000 (V1) ;V0=playerdata -8C4F00D8 LW T7,00D8 (V0) ;T7=player death register -11E00009 *BEQ T7,R0,7F0BEF3C ;skip this if player is alive -8C4E0424 -LW T6,0424 (V0) ;1: dying (allow respawn: Press Start) -11C00006 *BEQ T6,R0,7F0BEF38 -8C580428 LW T8,0428 (V0) ;1 when screen fading to black -13000004 *BEQ T8,R0,7F0BEF38 -C44803E4 LWC1 F8,03E4 (V0) -4608003E C.LE.S F0,F8 -00000000 NOP -45030001 *BC1TL +1 -24A50001 -ADDIU A1,A1,0001 -//7F0BEF3C: -AFA3001C SW V1,001C (SP) -//7F0BEF4C: F3A7C compute and compare scores -AFA40174 SW A0,0174 (SP) -AFA50170 SW A1,0170 (SP) -AFA6016C SW A2,016C (SP) -0FC30E36 JAL 7F0C38D8 ;returns V0=score, V1=time -AFA70178 SW A3,0178 (SP) -0FC04111 *JAL 7F010444 ;V0=gamelength: points -0002C825 *OR T9,V0,R0 ;T9=8004839C=MP kills -44800000 MTC1 R0,F0 -8FA3001C LW V1,001C (SP) ;V1=player data pointer -0322082A *SLT AT,T9,V0 ;TRUE if target score < players score -8FA40174 LW A0,0174 (SP) -8FA50170 LW A1,0170 (SP) -8FA6016C LW A2,016C (SP) -14200002 BNEZ AT,7F0BEF80 -8FA70178 LW A3,0178 (SP) -24C60001 ADDIU A2,A2,0001 ;A2++ indicate a winner - -//7F0BEFB8: You Only Live Twice - JAL 7F014758 ;RETURNS V0=scenario - NOP - ADDIU AT,R0,0001 - BNE V0,AT,7F0BF1E0 ;branch if not "You Only Live Twice" - LUI T7,8005 - LW T7,8374 (T7) - BEQ T7,R0,7F0BF1E0 ;branch if game running - NOP - JAL 7F09A464 ;V0=#PLAYERS - -MTC1 R0,F0 -//7F0BEFE0 - -NOP - OR T2,V0,R0 ;T2=V0=#PLAYERS - OR T5,R0,R0 ;T5=0 - OR RA,R0,R0 ;RA=0 - BLEZ V0,7F0BF1AC ;skip if invalid player # - OR T4,R0,R0 ;T4=0 - OR A1,R0,R0 ;A1=0 - OR A2,R0,R0 ;A2=0 - BLEZ V0,7F0BF124 - OR A3,R0,R0 ;A3=0 - ANDI T1,V0,0003 - BEQ T1,R0,7F0BF074 - SLL T3,T4,0x2 - LUI T8,8008 - ADDIU T8,T8,9EE0 ;T8=p->BONDdata - SLL T6,R0,0x2 - SLL T9,R0,0x3 - SUBU T9,T9,R0 - ADDU V1,T6,T8 ;V1=p->player's BONDdata - LUI T6,8008 - SLL T9,T9,0x4 ;T9=offset to player's stats - ADDU T7,T9,T3 - ADDIU T6,T6,9EF0 ;T6=playerstats - ADDU A0,T7,T6 ;A0=player's stats - OR T0,T1,R0 ;T0=T1: #players -//7F0BF044: - LW T8,0000 (V1) ;T8=BONDdata - ADDIU A3,A3,0001 ;A3++ playercount++ - ADDIU V1,V1,0004 - LW T9,00D8 (T8) ;T9!=0 if dead player button control - BNEL T9,R0,7F0BF064 ;branch if dead - LW T7,0024 (A0) ;T7=playerkills - ADDIU A2,A2,0001 ;A2++ A2=#players dead - LW T7,0024 (A0) ;T7=playerkills -//7F0BF064: loop for each player - ADDIU A0,A0,0070 ;A0=next player's stat offset - BNE T0,A3,7F0BF044 - ADDU A1,A1,T7 ;A1=death count - BEQ A3,V0,7F0BF124 -//7F0BF074: test player 1's pulse - LUI T8,8008 - SLL T9,A3,0x3 - SUBU T9,T9,A3 - ADDIU T8,T8,9EE0 - SLL T6,A3,0x2 - ADDU V1,T6,T8 ;V1=80079EE0+offset: p->BONDdata - SLL T9,T9,0x4 - ADDU T7,T9,T3 - LUI T6,8008 - ADDIU T6,T6,9EF0 - SLL T9,T2,0x2 - ADDU T0,T9,T8 - ADDU A0,T7,T6 ;A0=80079EF0+offset: stats - LW T7,0000 (V1) ;T7=BONDdata - LW T6,00D8 (T7) ;T6=player button control !0 if dead - BNEL T6,R0,7F0BF0C0 ;branch if dead - LW T8,0004 (V1) ;T8=next BONDdata - ADDIU A2,A2,0001 ;A2++ - LW T8,0004 (V1) -//7F0BF0C0: test player 2's pulse - LW T9,0024 (A0) ;T9=stats+24: player1kills - LW T7,00D8 (T8) ;T7=player button control !0 if dead - ADDU A1,A1,T9 ;A1+=playerkills total kills - BNEL T7,R0,7F0BF0DC ;branch if dead - LW T9,0008 (V1) ;T9=next BONDdata - ADDIU A2,A2,0001 ;A2++ - LW T9,0008 (V1) -//7F0BF0DC: test player 3's pulse - LW T6,0094 (A0) ;next player's player2kills - LW T8,00D8 (T9) ;T8=player button control !0 if dead - ADDU A1,A1,T6 ;A1+=playerkills total kills - BNEL T8,R0,7F0BF0F8 ;branch if dead - LW T6,000C (V1) ;T6=next BONDdata - ADDIU A2,A2,0001 ;A2++ - LW T6,000C (V1) -//7F0BF0F8: test player 4's pulse - LW T7,0104 (A0) ;next player's player3kills - ADDIU V1,V1,0010 ;V1+=10 - LW T9,00D8 (T6) ;T8=player button control !0 if dead - ADDU A1,A1,T7 - BNEL T9,R0,7F0BF118 - LW T8,0174 (A0) ;next player's player4kills - ADDIU A2,A2,0001 ;A2++ - LW T8,0174 (A0) -//7F0BF118: - ADDIU A0,A0,01C0 - BNE V1,T0,7F0BF0A8 ;branch if stats not for current player? - ADDU A1,A1,T8 ;tally of all kills/suicides - SLTI AT,A1,0002 ;TRUE if tally < 2 this is what sets the game to end after Twice - BNEZ AT,7F0BF19C ;branch if tally < 2 - SLL T7,T4,0x3 - SUBU T7,T7,T4 - LUI T6,8008 - ADDIU T6,T6,9EF0 - SLL T7,T7,0x4 - ADDU V1,T7,T6 - LBU T7,0068 (V1) ;T7=stats+68: order you lost in YOLX - LUI T8,8008 - ADDIU T8,T8,9EE0 - SLL T9,T4,0x2 - BNEZ T7,7F0BF164 ;branch if set - ADDU A0,T9,T8 ;A0=p->BONDdata - ADDIU T6,A2,0001 ;T6=A2+1 - SB T6,0068 (V1) ;T6->loser register -//7F0BF164: - LW V1,0000 (A0) ;V1=BONDdata - ADDIU T5,T5,0001 - LW T9,0424 (V1) ;T9=dying register 1: dying (allow respawn) - BEQL T9,R0,7F0BF1A0 ;branch if not set - ADDIU T4,T4,0001 - LW T8,0428 (V1) ;T8=blacken 1: fading to black - BEQL T8,R0,7F0BF1A0 ;branch if not set - ADDIU T4,T4,0001 - LWC1 F10,03E4 (V1) - C.LT.S F10,F0 - NOP - BC1FL 7F0BF1A0 - ADDIU T4,T4,0001 - ADDIU RA,RA,0001 - ADDIU T4,T4,0001 -//7F0BF1A0: - SLT AT,T4,T2 - BNEL AT,R0,7F0BEFFC ;branch if set - OR A1,R0,R0 - ADDIU V1,V0,FFFF ;V1=V0-1 - SLT AT,RA,V1 - BNEL AT,R0,7F0BF1D0 ;branch if RA < (V0-1) - SLT AT,T5,V1 - JAL 7F0C2530 - OR A0,R0,R0 - BEQ R0,R0,7F0BF1E0 - NOP -//7F0BF1CC: test if end of match - SLT AT,T5,V1 - BNEZ AT,7F0BF1E0 ;branch if T5 < (V0-1) - NOP - JAL 7F0C2520 ;stop play - NOP - - -+_+ - -Set YOLX to use 7F010ED8 -Also, rig it to not tamper with the game length - -//7F01048C: 44FBC set you only live twice scenario specific settings -24030001 *ADDIU V1,R0,0001 -14830004 *BEQ A0,V1,+4 -24020002 *ADDIU V0,R0,0002 - *NOP - *NOP -3108007F *ANDI T0,T0,007F ;untoggle length+points bit - -+_+ -probably tied to it... -//7F0C5F0C: FAA3C -JAL 7F014758 ;V0=8002B540: scenario -SW A0,0058 (SP) ;SP+58=A0: #deaths -ADDIU AT,R0,0001 -BNE V0,AT,7F0C5F2C ;branch if not You Only Live Twice -LW A0,0058 (SP) ;A0=#deaths -SLTI AT,A0,0002 ;TRUE if died fewer than two times -BEQL AT,R0,7F0C6034 ;skip if no lives to live -OR V0,S1,R0 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/MP options interface update.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/MP options interface update.txt deleted file mode 100644 index 4543c07..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/MP options interface update.txt +++ /dev/null @@ -1,321 +0,0 @@ -This allows cycling options backward -Ls and Z button cycle back -Rs and A button cycle formward - -//7F010B2C: 4565C detect selecting currently highlighted option -00002025 OR A0,R0,R0 -0C0030EB JAL 7000C3AC ;TRUE if player 1 pressed A or Z -3405AF3F *ORI A1,R0,AF3F ;A1=mask: A + Z button -10400051 BEQ V0,R0,7F010C80 ;branch if neither button pressed -//7F010B3C: 4566C set forward or backward. back has precedence -30432626 *ANDI V1,V0,2626 -10600002 *BEQL V1,R0,+2 -24030001 *ADDIU V1,R0,0001 ;forward -2403FFFF *ADDIU V1,R0,FFFF ;backward. still throws nonzero if needed ;*) -//7F010B4C: detect if tab 3 selected -3C018003 -LUI AT,8003 -8C38A8E4 *LW T8,A8E4 (AT) ;T6=8002A8E4: TRUE if folder tab 3 highlighted -57000021 *BNEZL T8,R0,7F010BDC ;branch if tab 3 highlighted -AC23A8D8 SW V1,A8D8 (AT) ;1->8002A8D8: tab3 selected -//7F010B5C: detect if tab 1 selected -8C38A8DC *LW T8,A8DC (AT) ;T7=8002A8DC: TRUE if folder tab 1 highlighted -5700001E *BNEZL T8,R0,7F010BDC ;branch if tab 1 highlighted -AC23A8D0 SW V1,A8D0 (AT) ;1->8002A8D0: tab1 selected -//7F010B68: detect if players selected -3C018007 *LUI AT,8007 -8C3897C8 *LW T8,97C8 (AT) ;T8=800697C8: TRUE if #players highlighted -5700001A *BNEZL T8,R0,7F010BDC ;branch if highlighted -AFA3003C *SW V1,003C (SP) ;1->SP+3C: #players selected -//7F010B78: detect if scenario selected -8C3897CC *LW T8,97CC (AT) ;T0=800697CC: TRUE if scenario highlighted -57000017 *BNEZL T8,R0,7F010BDC -AFA30038 *SW V1,0038 (SP) ;1->SP+38: scenario selected -//7F010B84: detect if stage select selected -8C3897D0 *LW T8,97D0 (AT) ;T2=800697D0: TRUE if stage select highlighted -57000014 *BNEZL T8,R0,7F010BDC -AFA30034 *SW V1,0034 (SP) ;1->SP+34: stage select selected -//7F010B90: detect if game length selected -8C3897D4 *LW T8,97D4 (AT) ;T4=800697D4: TRUE if game length highlighted -57000011 *BNEZL T8,R0,7F010BDC -AFA30030 *SW V1,0030 (SP) ;1->SP+30: game length selected -//7F010B9C: detect if character selected -8C3897D8 *LW T8,97D8 (AT) ;T6=800697D8: TRUE if character highlighted -5700000E *BNEZL T8,R0,7F010BDC -AFA3002C *SW V1,002C (SP) ;1->SP+2C: character selected -//7F010BA8: detect if weapon select selected -8C3897DC *LW T8,97DC (AT) ;T8=800697DC: TRUE if weapon select highlighted -5700000B *BNEZL T8,R0,7F010BDC -AFA30028 *SW V1,0028 (SP) ;1->SP+28: weapon select selected -//7F010BB4: detect if health selected -8C3897E0 LW T8,97E0 (AT) ;T0=800697E0: TRUE if health highlighted -57000008 *BNEZL T8,R0,7F010BDC -AFA30024 *SW V1,0024 (SP) ;1->SP+24: health selected -//7F010BC0: detect if control style selected -8C3897E4 *LW T8,97E4 (AT) ;T2=800697E4: TRUE if control style highlighted -57000005 *BNEZL T8,R0,7F010BDC -AFA30020 *SW V1,0020 (SP) ;1->SP+20: control style selected -//7F010BCC: detect if aim adjustment selected -8C3897E8 *LW T8,97E8 (AT) ;T4=800697E8: TRUE if aim adjustment highlighted -1300002B *BEQ T8,R0,7F010C80 -00000000 *NOP -AFA3001C *SW V1,001C (SP) ;1->SP+1C: aim adjustment selected -//7F010BDC: 45798 play selected sound effect -00003025 -OR A2,R0,R0 ;A2=0: NULL pointer to data (no SE source) -240500C7 -ADDIU A1,R0,00C7 ;A1=0C7: folder switch SE -3C048006 -LUI A0,8006 -0C002382 JAL 70008E08 ;play SE 0C7: selected folder option -8C843720 LW A0,3720 (A0) ;A0=80063720: p->SE buffer -1000002F *BEQ R0,R0,7F010CB0 ;proceed to figure out what to do with selected option -00000000 NOP -//7F010C80: detect if B button pressed - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - -+_+ - -set individual routines to use the new values -//7F010DF4: 45924 press A: 'Players' selected -1160000F BEQ T3,R0,7F010E34 -8FAC0038 LW T4,0038 (SP) -0C002E7E JAL 7000B9F8 ;V0= # controllers plugged in; T3 safe -240C0001 *ADDIU T4,R0,0001 -3C038003 LUI V1,8003 -8C63B520 LW V1,B520 (V1) ;V1=8002B520: # players selected on MP menu -006B2021 *ADDU A0,V1,T3 ;V1+-1 -0044082A *SLT AT,V0,A0 ;AT=TRUE if #controllers < #selected -54200003 *BNEL AT,R0,7F010E24 ;branch if false -24040002 -ADDIU A0,R0,0002 ;A0=2: 2 players default -508C0001 *BEQL A0,T4,7F010E24 -00022021 *OR A0,R0,V0 ;A0=V0: roll around -//7F010E24: -0FC04182 JAL 7F010608 ;initialize MP menu -00000000 NOP -10000034 *BEQ R0,R0,7F010F00 -00000000 *NOP -//7F010E34: press A: 'Scenario' selected - BEQ T4,R0,7F010E50 - LW T5,0034 (SP) - ADDIU A0,R0,0013 ;A0=13: menu 13: scenario select - JAL 7F01A5D4 ;set to menu A0 in mode A1 - OR A1,R0,R0 ;A1=0: current menu - BEQ R0,R0,7F010F04 - LW RA,0014 (SP) -//7F010E50: press A: 'Level' selected - BEQ T5,R0,7F010E6C - LW T6,0030 (SP) - ADDIU A0,R0,0012 ;A0=12: menu 12: MP stage select - JAL 7F01A5D4 ;set to menu A0 in mode A1 - OR A1,R0,R0 ;A1=0: current menu - BEQ R0,R0,7F010F04 - LW RA,0014 (SP) -//7F010E6C: 4599C press A: 'Game Length' selected - BEQ T6,R0,7F010E84 - LW T7,002C (SP) - JAL 7F010170 ;selects next game length accounting for scenarios -000E2025 *OR A0,R0,T7 - BEQ R0,R0,7F010F04 - LW RA,0014 (SP) -//7F010E84: press A: 'Select Character' selected - BEQ T7,R0,7F010EA0 - LW T8,0028 (SP) - ADDIU A0,R0,000F ;A0=F: menu F: character select - JAL 7F01A5D4 ;set to menu A0 in mode A1 - OR A1,R0,R0 ;A1=0: current menu - BEQ R0,R0,7F010F04 - LW RA,0014 (SP) -//7F010EA0: 459D0 press A: 'Weapons' selected - BEQ T8,R0,7F010EB8 - LW T9,0024 (SP) - JAL 7F0C65CC ;advance MP weapon set menu one option -00182025 *OR A0,R0,T8 - BEQ R0,R0,7F010F04 - LW RA,0014 (SP) -//7F010EB8: press A: 'Health' selected - BEQ T9,R0,7F010ED4 - LW T0,0020 (SP) - ADDIU A0,R0,0010 ;A0=10: menu 10: handicap settings - JAL 7F01A5D4 ;set to menu A0 in mode A1 - OR A1,R0,R0 ;A1=0: current menu - BEQ R0,R0,7F010F04 - LW RA,0014 (SP) -//7F010ED4 press A: 'Control Style' selected - BEQ T0,R0,7F010EF0 - LW T1,001C (SP) - ADDIU A0,R0,0011 ;A0=11: menu 11: MP control settings - JAL 7F01A5D4 ;set to menu A0 in mode A1 - OR A1,R0,R0 ;A1=0: current menu - BEQ R0,R0,7F010F04 - LW RA,0014 (SP) -//7F010EF0: 45A20 press A: 'Aim' selected - BEQL T1,R0,7F010F04 - LW RA,0014 (SP) - JAL 7F01023C ;advance aim settings selection -00092025 *OR A0,R0,T1 -//7F010F00: return! - -+_+ - -7F01023C: 44D6C advance aim settings selection - accepts: A0=inc/decrement -3C028003 LUI V0,8003 -904EB53C *LBU T6,B53C (V0) ;T6=current setting -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -01C47021 *ADDU T6,T6,A0 ;T7=T6+1: next setting -05C20001 *BLTZL T6,+1 -240E0003 *ADDIU T6,R0,0003 -2DC10004 *SLTIU AT,T6,0004 ;T8=next & 3 -50200001 *BEQL AT,R0,+1 ;branch if equal to 0 (which is what you'd want to reset to -00007025 *OR T6,R0,R0 -//7F010268: -0FC04076 JAL 7F0101D8 ;copy autoaim and sight settings to player stats -A04EB53C *SB T6,B53C (V0) ;T8->V0: save new setting -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - NOP - *NOP - -game length updater! -7F010170: 44CA0 advance game length selection - accepts: A0=inc/decrement -3C028003 *LUI V0,8003 -8C4EB540 *LW T6,B540 (V0) ;T6=8002B540: scenario -24010002 ADDIU AT,R0,0002 -51C10002 *BEQL T6,AT,+2 ;branch if scenario 2: Flag Tag -24010004 *ADDIU AT,R0,0004 -24010007 *ADDIU AT,R0,0007 -//7F010188: normal select - time and points -8C4EB538 *LW T6,B538 (V0) ;T7=8002B538: game length -01C47021 *ADDU T6,T6,A0 ;T8=game length + 1 -05C20003 *BLTZL T6,+3 -00247021 *ADDU T6,AT,A0 -01C1001A *DIV T6,AT -00007010 *MFHI T6 ;T9=(length+1) % 7 -03E00008 JR RA -AC4EB538 *SW T6,B538 (V0) ;new length -> 8002B538 -//7F0101A8: 44CD8 free! - - -7F0C65CC: FB0FC 0FC31973 advance MP weapon set menu one option; saves updated value - revised to account for variable entry numbers... - accepts: A0=inc/decrement - fries: AT,V0,T6,T7 -3C028005 LUI V0,8005 -804E9162 LB T6,9162 (V0) ;T6=cur selection -80419160 LB AT,9160 (V0) ;AT=max entries -01C47021 *ADDU T6,T6,A0 ;T7=T6+1: set++ -05C20001 +BLTZL T6,+1 -00017025 +OR T6,R0,AT -24210001 ADDIU AT,AT,0001 ;accounts for random entry -01C1001A DIV T6,AT -3C018003 LUI AT,8003 -8C2FB540 LW T7,B540 (AT) ;AT=8002B540: scenario bits -24010003 ADDIU AT,R0,0003 -142F0003 BNE AT,T7,+3 ;skip if not MwtGX -00007010 MFHI T6 ;T6=set % total -51C00001 BEQL T6,R0,+1 -904E915F LBU T6,915F (V0) ;minimum value for scenario -03E00008 JR RA -A04E9162 SB T6,9162 (V0) ;save revised set number - -3C028005 LUI V0,8005 -804E9162 LB T6,9162 (V0) ;T6=cur selection -01C47021 *ADDU T6,T6,A0 ;T7=T6+1: set++ -3C018003 LUI AT,8003 -8C2FB540 LW T7,B540 (AT) ;AT=8002B540: scenario bits -24010003 ADDIU AT,R0,0003 -542F0002 BNEL AT,T7,+2 ;skip if not MwtGX -00007821 OR T7,R0,R0 -904F915F LBU T7,915F (V0) ;minimum value for scenario -01CF082A SLT AT,T6,T7 ;true if new < min -54200001 BNEZL AT,+1 -804E9160 LB T6,9160 (V0) ;AT=max entries -80419160 LB AT,9160 (V0) ;AT=max entries -002E082A SLT AT,AT,T6 ;true if max < cur -54200001 BNEZL AT,+1 -000F7021 OR T6,R0,T7 -03E00008 JR RA -A04E9162 SB T6,9162 (V0) ;save revised set number - - -MOVING THESE: -7F0C6608 FB138 0FC31982 -> 7F0C6614 FB144 0FC31985 -7F0C6614 FB144 0FC31985 -> 7F0C6620 FB150 0FC31988 -7F0C6620 FB150 0FC31988 -> 7F0C662C FB15C 0FC3198B -7F0C6640 FB170 0FC31990 -> 7F0C664C FB17C 0FC31993 -7F0C664C FB17C 0FC31993 -> 7F0104F4 45024 0FC0413D - -+_+ - -7F0101D8: 44D08 set player aim settings revision allowing independant player settings -3C018008 LUI AT,8008 -3C028003 LUI V0,8003 -240E0003 *ADDIU T6,R0,0003 -//7F0101E4: set settings -9044B53C *LBU A0,B53C (V0) //T6=selected aim settings -00041842 *SRL V1,A0,0x1 -30630001 *ANDI V1,V1,0001 -30840001 *ANDI A0,A0,0001 -A0239F5A SB V1,9F5A (AT) //set player 1 autoaim 80079F5A -A0249F5B SB A0,9F5B (AT) //set player 1 sight 80079F5B -24210070 *ADDIU AT,AT,0070 -24420001 *ADDIU V0,V0,0001 -15C0FFF7 *BNEZ T6,-9 -25CEFFFF *ADDIU T6,T6,FFFF -//7F01020C: return -03E00008 JR RA -00000000 *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - -//7F011B08: 46638 - LUI T8,8003 - LBU T8,B53C (T8) -34049C48 *ORI A0,R0,9C48 - OR S0,V0,R0 -00000000 *NOP -00982021 *ADDU A0,A0,T8 - JAL 7F0C1DD8 -00000000 *NOP - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/MP stage length selector.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/MP stage length selector.txt deleted file mode 100644 index 188e99b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/MP stage length selector.txt +++ /dev/null @@ -1,525 +0,0 @@ -Very simple: - View looks normal. When "game length" selected, allows you to select points and time. - Up/down sets selected option, left/right switches between points/time. - When 0, that feature is disregarded. - When selecting, both options appear on-screen, even when set to 0. - - When unselected, view conforms to simplest text setting. - If no time or score set, "unlimitted" (9C2D) appears. - If score set, "point/s" appears. If time set, "minute/s" appears. If both, a ", " appears as well. - A bit intricate, but this should get rid of any scoring setting confusions. - - No longer need 9C2E-9C33. Not sure about "Last person alive" (9C34). - - -+_+ - -For test purposes: - -7F010444 V0=score fry T6,T7 - -7F010420 V0=time (min) fry T6,T7 - -"%i Point%s" -"%i Minute%s" - -7000AC94 sprintf(A0,A1,A2) -7F0C1DD8 V0=text(A0) fries V1,T0,T6,T7,T8,T9 -7000A7FC V0=strcat(A0,A1) fries V1,A1,T6,T7 - -800697D1 highlight score -800697D2 highlight minutes -8002B53B -score appears at A0,B5 -minutes appear at 100,B5 -+_+ - - - -+_+ - -Extensive (or excessive) rewrite of MP options constructor -7F010F10: 45A40 menu 0E constructor - MP options - accepts: A0=p->display list target - -27BDFF80 *ADDIU SP,SP,FF80 -AFBF003C SW RA,003C (SP) -AFB00038 SW S0,0038 (SP) -00002825 OR A1,R0,R0 -00003025 OR A2,R0,R0 -0C0011B4 JAL 700046D0 ;setfillcolour("black") -00003825 OR A3,R0,R0 -0C000FBE JAL 70003EF8 ;fillrect() -00022025 OR A0,V0,R0 -0FC0357A JAL 7F00D5E8 -00022025 OR A0,V0,R0 -0FC2B366 JAL 7F0ACD98 ;??? some kind of microcode constructor -00022025 OR A0,V0,R0 -00028025 OR S0,V0,R0 ;S0=V0: DL -//7F010F48: Page Title -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -34049C4C ORI A0,R0,9C4C ;A0=9C4C: "MULTIPLAYER OPTIONS:\r" -24040037 *ADDIU A0,R0,0037 -2405005F *ADDIU A1,R0,005F -0FC046B5 *JAL 7F011AD4 ;display::black -00023825 *OR A3,V0,R0 -//7F010F60: display "Players:" -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -34049C4D ORI A0,R0,9C4D ;A0=9C4D: "Players:\r" -3C0E8007 *LUI T6,8007 -81CE97C8 *LB T6,97C8 (T6) ;T5=800697C8: TRUE if highlighted "Players" -11C00005 *BEQ T6,R0,7F010F88 ;branch if not highlighted -AFA20064 *SW V0,0064 (SP) ;SP+64=p->text -//7F010F78: highlight -24040039 *ADDIU A0,R0,0039 -24050079 *ADDIU A1,R0,0079 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F010F88: display text -24040039 *ADDIU A0,R0,0039 -24050079 *ADDIU A1,R0,0079 -0FC046B5 *JAL 7F011AD4 ;display::black -8FA70064 *LW A3,0064 (SP) ;p->text -//7F010F98: display "Scenario:" -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -34049C4E ORI A0,R0,9C4E ;A0=9C4E: "Scenario:\r" -3C0E8007 *LUI T6,8007 -81CE97C9 *LB T6,97C9 (T6) ;T5=800697C8: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F010FC0 ;branch if not highlighted -AFA20064 SW V0,0064 (SP) -//7F010FB0: draw highlight box for "Scenario" -24040039 *ADDIU A0,R0,0039 -2405008D *ADDIU A1,R0,008D -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F010FC0: display text -24040039 *ADDIU A0,R0,0039 -2405008D *ADDIU A1,R0,008D -0FC046B5 *JAL 7F011AD4 ;display::black -8FA70064 *LW A3,0064 (SP) ;p->text -//7F010FD0: display label for "Level" -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -34049C4F ORI A0,R0,9C4F ;A0=9C4F: "Level:\r" -3C0E8007 *LUI T6,8007 -81CE97CA *LB T6,97CA (T6) ;T5=800697C8: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F0111E8 ;branch if not highlighted -AFA20064 SW V0,0064 (SP) -//7F010FE8: draw highlight box for "Level" -24040039 *ADDIU A0,R0,0039 -240500A1 *ADDIU A1,R0,00A1 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F010FF8: determine text colour and draw -24040039 *ADDIU A0,R0,0039 -240500A1 *ADDIU A1,R0,00A1 -24060001 *ADDIU A2,R0,0001 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -8FA70064 *LW A3,0064 (SP) ;p->text -//7F01100C: display label for "Game Length" -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -34049C50 ORI A0,R0,9C50 ;A0=9C50: "Game Length:\r" -3C0E8007 *LUI T6,8007 -81CE97CB *LB T6,97CB (T6) ;T5=800697CB: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F0112DC ;branch if not highlighted -AFA20064 SW V0,0064 (SP) -//7F011024: draw highlight box for "Game Length" -24040039 *ADDIU A0,R0,0039 -240500B5 *ADDIU A1,R0,00B5 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F011034: determine font colour and draw -24040039 *ADDIU A0,R0,0039 -240500B5 *ADDIU A1,R0,00B5 -24060002 *ADDIU A2,R0,0002 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -8FA70064 *LW A3,0064 (SP) ;p->text -//7F011048: display label for "Weapons" -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -34049C51 ORI A0,R0,9C51 ;A0=9C51: "Weapons:\r" -3C0E8007 *LUI T6,8007 -81CE97CD *LB T6,97CD (T6) ;T5=800697CB: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F0113D0 ;branch if not highlighted -AFA20064 SW V0,0064 (SP) -//7F011060: draw highlight box for "Weapons" -24040039 *ADDIU A0,R0,0039 -240500C9 *ADDIU A1,R0,00C9 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F011070: determine font colour -24040039 *ADDIU A0,R0,0039 -240500C9 *ADDIU A1,R0,00C9 -24060004 *ADDIU A2,R0,0004 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -8FA70064 *LW A3,0064 (SP) ;p->text -//7F011084: display label for "Characters" -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -34049C52 ORI A0,R0,9C52 ;A0=9C52: "Characters:\r" -3C0E8007 *LUI T6,8007 -81CE97CC *LB T6,97CC (T6) ;T5=800697CB: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F0114C4 ;branch if unhighlighted -AFA20064 SW V0,0064 (SP) -//7F01109C: draw highlight box for "Characters" -24040039 *ADDIU A0,R0,0039 -240500DD *ADDIU A1,R0,00DD -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F0110AC: determine font colour -24040039 *ADDIU A0,R0,0039 -240500DD *ADDIU A1,R0,00DD -24060008 *ADDIU A2,R0,0008 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -8FA70064 *LW A3,0064 (SP) ;p->text -//7F0110C0: display label for "Health" -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -34049C53 ORI A0,R0,9C53 ;A0=9C53: "Health:\r" -3C0E8007 *LUI T6,8007 -81CE97CE *LB T6,97CE (T6) ;T5=800697CB: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F0115B8 ;branch if not highlighted -AFA20064 SW V0,0064 (SP) -//7F0110D8: draw highlight box for "Health" -24040039 *ADDIU A0,R0,0039 -240500F1 *ADDIU A1,R0,00F1 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F0110E8: determine font colour -24040039 *ADDIU A0,R0,0039 -240500F1 *ADDIU A1,R0,00F1 -24060010 *ADDIU A2,R0,0010 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -8FA70064 *LW A3,0064 (SP) ;p->text -//7F0110FC: display label for "Control Style" -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -34049D1E ORI A0,R0,9D1E ;A0=9D1E: "Control Style\r" -3C0E8007 *LUI T6,8007 -81CE97CF *LB T6,97CF (T6) ;T5=800697CB: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F0116AC ;branch if unhighlighted -AFA20064 SW V0,0064 (SP) -//7F011114: draw highlight box for "Control Style" -24040039 *ADDIU A0,R0,0039 -24050105 *ADDIU A1,R0,0105 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F011124: determine font colour -24040039 *ADDIU A0,R0,0039 -24050105 *ADDIU A1,R0,0105 -24060020 *ADDIU A2,R0,0020 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -8FA70064 *LW A3,0064 (SP) ;p->text -//7F011138: display label for "Aim" -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -34049C54 ORI A0,R0,9C54 ;A0=9C54: "Aim:\r" -3C0E8007 *LUI T6,8007 -81CE97D0 *LB T6,97D0 (T6) ;T5=800697CB: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F0117A0 ;branch if unhighlighted -AFA20064 SW V0,0064 (SP) -//7F011150: draw highlight box for "Aim" -24040039 *ADDIU A0,R0,0039 -24050119 *ADDIU A1,R0,0119 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F011160: determine font colour -24040039 *ADDIU A0,R0,0039 -24050119 *ADDIU A1,R0,0119 -24060040 *ADDIU A2,R0,0040 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -8FA70064 *LW A3,0064 (SP) ;p->text -//7F011174: 46340 display selected players -3C052564 LUI A1,2564 -AFA50060 SW A1,0060 (SP) -3C068003 LUI A2,8003 -8CC6B520 LW A2,B520 (A2) ;A2=8002B520: #players selected -27A50060 ADDIU A1,SP,0060 ;A1=p->"%d" -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -27A4005C ADDIU A0,SP,005C ;A0=SP+5C: buffer for text -//7F011190: write to screen -240400A0 *ADDIU A0,R0,00A0 -24050079 *ADDIU A1,R0,0079 -0FC046B5 *JAL 7F011AD4 ;display::black -27A7005C *ADDIU A3,005C (SP) -//7F0111A0: display selected scenario -3C048003 -LUI A0,8003 -8C8EB540 *LW T6,B540 (A0) ;T8=8002B540: selected scenario -000E7080 *SLL T6,T6,0x2 ;T9=scenario ->offset -008E2021 *ADDU A0,A0,T6 -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -9484B054 LHU A0,B054 (A0) ;A0=8002B054+offset: scenario name -//7F0111B8: display -240400A0 *ADDIU A0,R0,00A0 -2405008D *ADDIU A1,R0,008D -0FC046B5 *JAL 7F011AD4 ;display::black -00023825 *OR A3,V0,R0 -//7F0111C8: display selected stage -3C048003 *LUI A0,8003 -848EB534 *LH T6,B534 (A0) ;T6=MP stage selected -000E70C0 *SLL T6,T6,0x3 -008E2021 *ADDU A0,A0,T6 -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -9484B078 LHU A0,B078 (A0) ;A0=8002B074: selected stage name -//7F0111E0: display -240400A0 *ADDIU A0,R0,00A0 -240500A1 *ADDIU A1,R0,00A1 -24060001 *ADDIU A2,R0,0001 -0FC046B0 *JAL 7F011AC0 ;display::mask -00023825 *OR A3,V0,R0 -//7F0111F4: 45D24 display selected length -//score -AFA0005C *SW R0,005C (SP) ;blank out the string -240400A0 *ADDIU A0,R0,00A0 -0FC051D6 *JAL 7F014758 ;V0=scenario -AFA40050 SW A0,0050 (SP) - ADDIU T6,R0,0001 - BEQ V0,T6,+minutes -3C0E8003 *LUI T6,8003 -0FC04111 *JAL 7F010444 ;V0=score -81CEB53B *LB T6,B53B (T6) ;T6=8002B53B: !0=game length selected -004E7025 *OR T6,T6,V0 ;nonzero if displayed -11C00018 *BEQ T6,R0,+minutes -00023025 *OR A2,V0,R0 -//7F011210: 45D40 pluralization -0FC046ED *JAL 7F011BB4 ;plural -00022025 *OR A0,V0,R0 -AFA20054 *SW V0,0054 (SP) -//7F01121C: 45D4C convert string -0FC30776 *JAL 7F0C1DD8 -3404B031 *ORI A0,R0,B031 ;"%i Point%s" -27A4005C *ADDIU A0,SP,005C -27A70054 *ADDIU A3,SP,0054 -0C002B25 *JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -00022825 *OR A1,V0,R0 -//7F011230: 45D60 highlight if applicable -3C0E8007 *LUI T6,8007 -81CE97D1 *LB T6,97D1 (T6) ;TRUE if highlighted -11C00004 *BEQ T6,R0,+display -27A6005C *ADDIU A2,SP,005C -8FA40050 LW A0,0050 (SP) -0FC046CE *JAL 7F011B38 ;box::default -240500B5 *ADDIU A1,R0,00B5 -//7F011258: 45D88 display -8FA40050 LW A0,0050 (SP) -248E0060 *ADDIU T6,A0,0060 -AFAE0050 SW T6,0050 (SP) -240500B5 *ADDIU A1,R0,00B5 -24060080 *ADDIU A2,R0,0080 ;mask for score only -0FC046B0 *JAL 7F011AC0 ;display::mask -27A7005C *ADDIU A3,SP,005C -//7F011260: 45D90 minutes -3C0E8003 *LUI T6,8003 -0FC04108 *JAL 7F010420 ;V0=time -81CEB53B *LB T6,B53B (T6) ;T4=8002B53B: !0=game length selected -34060E10 *ORI A2,R0,0E10 ;3600: conversion of seconds to minutes -0046001B *DIVU V0,A2 -004E7025 *OR T6,T6,V0 ;nonzero if displayed -11C00016 *BEQ T6,R0,+unlimitted -00003012 *MFLO A2 -//7F01127C: 45DAC pluralization -0FC046ED *JAL 7F011BB4 ;plural -00062025 *OR A0,A2,R0 -AFA20058 *SW V0,0058 (SP) -//7F011288: 45DB8 convert string -0FC30776 *JAL 7F0C1DD8 -3404B032 *ORI A0,R0,B032 ;"%i Minute%s" -27A4005C *ADDIU A0,SP,005C -0C002B25 *JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -00022825 *OR A1,V0,R0 -//7F0112A0: 45DD0 highlight if applicable -3C0E8007 *LUI T6,8007 -81CE97D2 *LB T6,97D2 (T6) ;TRUE if highlighted -11C00004 *BEQ T6,R0,+display -27A6005C *ADDIU A2,SP,005C -8FA40050 LW A0,0050 (SP) -0FC046CE *JAL 7F011B38 ;box::default -240500B5 *ADDIU A1,R0,00B5 -//7F0112BC: display -8FA40050 LW A0,0050 (SP) -240500B5 *ADDIU A1,R0,00B5 -24060002 *ADDIU A2,R0,0002 ;mask for time only -0FC046B0 *JAL 7F011AC0 ;display::mask -27A7005C *ADDIU A3,SP,005C -//7F0112D0: unlimitted -8FAE005C *LW T6,005C (SP) -15C0000C *BNEZ T6,+weapons -240E0001 *ADDIU T6,R0,0001 ;YOLT -0FC051D6 *JAL 7F014758 ;V0=scenario -34049C2D *ORI A0,R0,9C2D ;"Unlimitted" -51C20002 *BEQL T6,V0,+1 -34049C34 *ORI A0,R0,9C34 ;"Last ... Wins" -0FC30776 *JAL 7F0C1DD8 ;V0=text ID A0 -00000000 *NOP -//7F0112F8: determine font colour -240400A0 *ADDIU A0,R0,00A0 -240500B5 *ADDIU A1,R0,00B5 -24060002 *ADDIU A2,R0,0002 ;mask -0FC046B0 *JAL 7F011AC0 ;display::mask -00023825 *OR A3,V0,R0 ;p->text -//7F01130C: 45E3C display selected weapon set -0FC31988 JAL 7F0C6620 ;V0=p->selected weapon set data -00000000 *NOP -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -94440010 LHU A0,0010 (V0) ;A0=V0+10: name of weapon set -//7F01131C: display -240400A0 *ADDIU A0,R0,00A0 -240500C9 *ADDIU A1,R0,00C9 -24060004 *ADDIU A2,R0,0004 -0FC046B0 *JAL 7F011AC0 ;display::mask -00023825 *OR A3,V0,R0 -//7F011330: 45E60 display selected aim -3C0E8003 *LUI T6,8003 -91CEB53C *LBU T6,B53C (T6) ;T8=8002B53C: selected aim setting -34049C48 ORI A0,R0,9C48 -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -008E2021 *ADDU A0,A0,T6 -//7F011344: -240400A0 *ADDIU A0,R0,00A0 -24050119 *ADDIU A1,R0,0119 -24060040 *ADDIU A2,R0,0040 -0FC046B0 *JAL 7F011AC0 ;display::mask -00023825 *OR A3,V0,R0 -//7F011358: sidebar and cursor -0FC0288E JAL 7F00A238 ;add tab 3: "PREVIOUS" -00022025 OR A0,V0,R0 -0FC02820 JAL 7F00A080 ;add tab 1: "START" -00022025 OR A0,V0,R0 -3C0E8003 *LUI T6,8003 -81CEB53B *LB T6,B53B (T6) ;8002B53B=TRUE if editting game length -15C00003 *BNEZ T6,+3 -00000000 *NOP -0FC027C2 JAL 7F009F08 ;loads selected icon for folder select -00022025 OR A0,V0,R0 -//7F011370: return -8FBF003C LW RA,003C (SP) -8FB00038 LW S0,0038 (SP) -03E00008 *JR RA -27BD0080 *ADDIU SP,SP,0080 -//7F011380: - -+_+ - -7F011AC0/7F011AD4/7F011AD8 465F0 NO_BRAND HEROES - generic text display for menus - accepts: A0=xpos, A1=ypos, A2=mask/trigger/colour, A3=p->text, S0=p->display list - -//7F011AC0: entry point for masking against MP option locks -3C0E8003 LUI T6,8003 -91CEB544 LBU T6,B544 (T6) ;T6=8002B544: MP locks -00CE3024 AND A2,T6,A2 -50060002 BEQL A2,R0,+2 -24060070 ADDIU A2,R0,0070 ;grey -//7F011AD4: entry point for black -240600FF ADDIU A2,R0,00FF ;black -//7F011AD8: entry point for selective colour! -27BDFFC0 ADDIU SP,SP,FFC0 -AFBF003C SW RA,003C (SP) -AFA60018 SW A2,0018 (SP) ;SP+18=T6: font colour -AFA40038 SW A0,0038 (SP) ;SP+58=0xA0 x position -0C001107 JAL 7000441C ;V0= text clip width -AFA50034 SW A1,0034 (SP) ;SP+54=0x79 y position -0C00110B JAL 7000442C ;V0= text clip height -AFA2001C SW V0,001C (SP) -//7F011AF8: 46628 write to screen -AFA20020 SW V0,0020 (SP) ;SP+20=V0: clip width -3C0E8004 LUI T6,8004 -8DCD0EB4 LW T5,0EB4 (T6) ;T5=80040EB4: p->1st font table -8DCE0EB8 LW T6,0EB8 (T6) ;T4=80040EB8: p->2nd font table -AFAD0014 SW T5,0014 (SP) ;SP+14=T5: p->1st font table -AFAE0010 SW T6,0010 (SP) ;SP+10=T4: p->2nd font table -00102025 OR A0,S0,R0 ;A0=DL -27A50038 ADDIU A1,SP,0038 ;A1=p->x position -27A60034 ADDIU A2,SP,0034 ;A2=p->y position -AFA00024 SW R0,0024 (SP) ;SP+24=0: y offset -0FC025D8 JAL 7F009760 ;write text -AFA00028 SW R0,0028 (SP) ;SP+28=0: x offset -00028025 OR S0,V0,R0 ;updated DL -8FBF003C LW RA,003C (SP) -03E00008 JR RA -27BD0040 ADDIU SP,SP,0040 -//7F011B38: - -SP: -10-28 sent to text writter -2C -30 -34 @ypos -38 @xpos -3C RA - -+_+ - -7F011B38/7F011B3C 46668 similiar, for boxes - accepts: A0=xpos, A1=ypos, A2=p->text, A3=colour (opt.) -//7F011B38: entry for default colour 00000032 -24070032 ADDIU A3,R0,0032 -//7F011B3C: entry if colour defined -27BDFFC0 ADDIU SP,SP,FFC0 -AFBF003C SW RA,003C (SP) -AFA40020 SW A0,0020 (SP) ;xpos -AFA50024 SW A1,0024 (SP) ;ypos -AFA70028 SW A3,0028 (SP) ;colour -3C078004 LUI A3,8004 -8CEE0EB4 LW T6,0EB4 (A3) ;T2=80040EB4: p->1st font table -8CE70EB8 LW A3,0EB8 (A3) ;A3=80040EB8: p->2nd font table -27A40034 ADDIU A0,SP,0034 ;A0=SP+50: @height of string -27A50030 ADDIU A1,SP,0030 ;A1=SP=4C: @width of string -AFA00014 SW R0,0014 (SP) ;SP+14=0 -0FC2BA63 JAL 7F0AE98C ;proportions of string A2 -AFAE0010 SW T6,0010 (SP) ;SP+10=p->1st font table -//7F011B70: draw text to screen -8FAE0028 LW T6,0028 (SP) -AFAE0014 SW T6,0014 (SP) ;SP+14=colour -00102025 OR A0,S0,R0 ;A0=S0: p->display list -8FA70030 LW A3,0030 (SP) ;A3=width -8FA50020 LW A1,0020 (SP) -00E53821 ADDU A3,A1,A3 ;A3=lrx -24A5FFFE ADDIU A1,A1,FFFE ;A1=ulx: x-2 -8FA60024 LW A2,0024 (SP) -24CE000E ADDIU T6,A2,000E ;lry: y+E -AFAE0010 SW T6,0010 (SP) ;SP+10=lry -24C6FFFF ADDIU A2,A2,FFFF ;A2=uly: y-1 -0FC2B405 JAL 7F0AD014 ;draw coloured box -24E70003 ADDIU A3,A3,0003 -00028025 OR S0,V0,R0 ;S0=V0: DL -//7F011BA8: return -8FBF003C LW RA,003C (SP) -03E00008 JR RA -27BD0040 ADDIU SP,SP,0040 -//7F011BB4: - -+_+ - -7F011BB4 466E4 Pluralizes string. Honestly, I thought I made one of these before... - accepts: A0=# -3C028005 *LUI V0,8005 -804284D0 *LB V0,84D0 (V0) -1C400003 *BGTZ V0,+return -24020001 *ADDIU V0,R0,0001 -54440002 *BNEL V0,A0,+2 -3C027320 *LUI V0,7300 -3C022000 *LUI V0,0000 -03E00008 *JR RA -00000000 *NOP -//7F011BD8: - -7F010420 44F50 recover time, rewritten... -LUI V0,8005 -JR RA -LW V0,8398 (V0) - -7F010438 44F68 set points, rewritten... -LUI AT,8005 -JR RA -SH A0,839C (AT) - -7F010444 44F74 recover points, rewritten... -LUI V0,8005 -JR RA -LH V0,839C (V0) - -7F010450 44F80 set #lives (YOLT) -LUI AT,8005 -JR RA -SH A0,839E (AT) - -7F01045C 44F80 recover #lives (YOLT) -LUI V0,8007 -JR RA -LH V0,97DE (V0) - -You Only Live Twice will need to be redirected to the "lives" segment diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/handicap revision.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/handicap revision.txt deleted file mode 100644 index 1572301..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/handicap revision.txt +++ /dev/null @@ -1,236 +0,0 @@ -A708-A760 Handicap menu -0x0 2 txtID# -0x2 2 float multiplier (upper short) - -invert table, so + is left, minus right - strictly convenience. handicap still defaults to 5 -9C47 3DCD 0.1 +10 -9C46 3EB4 0.35 +4 -9C45 3EE9 0.45 +3 -9C44 3F1A 0.6 +2 -9C43 3F45 0.77 +1 -9C42 3F80 1.0 +0 normal -9C41 3FA7 1.3 -1 -9C40 3FD8 1.69 -2 -9C3F 400D 2.2 -3 -9C3E 4036 2.84 -4 -9C3D 4120 10.0 -10 -9C39 4348 200.0 LtK - -Ideally just use sliding bar, but this works fine as it is. - -+_+ - -800697A8 player1 handicap 0-A (5 default) -800697AC player2 handicap -800697B0 player3 handicap -800697B4 player4 handicap -800697B8 player1 control style (0-7: Honey <->Goodhead) -800697BC player2 control style -800697C0 player3 control style -800697C4 player4 control style - - This is getting replaced with a single word for all values. -Now: -800697A8 player1 handicap 0-A (5 default) -800697A9 player2 handicap -800697AA player3 handicap -800697AB player4 handicap -800697AC player1 control style (0-7: Honey <->Goodhead) -800697AD player2 control style -800697AE player3 control style -800697AF player4 control style - - - -@_@ - -7F012EC4 479F4 menu 10 interface: handicap select -//7F012FF4: 47B24 decrement if not at end -02D31021 *ADDU V0,S6,S3 ;V0=S6+S3: p->sel.handicaps + player# -80430000 *LB V1,0000 (V0) ;V1=cur.handicap -........ BLEZ V1,7F01308C ;branch if already at 0 -........ ADDIU T4,V1,FFFF ;T4=cur.handicap-- -........ BEQ R0,R0,7F01308C -A04C0000 *SB T4,0000 (V0) ;T4->cur.handicap: save new setting - -//7F01300C: 47B54 press right - increment list -00046E03 SRA T5,A0,0x18 -01A02025 OR A0,T5,R0 -0C0030EB JAL 7000C3AC ;ret V0=button mask A1 on player A0's controller -24050101 ADDIU A1,R0,0101 ;A1=0101: dpad or c-right -1440000A BNEZ V0,7F013048 -00102600 SLL A0,S0,0x18 -00047603 SRA T6,A0,0x18 -01C02025 OR A0,T6,R0 -2405FFFE ADDIU A1,R0,FFFE -//7F013030: 47B60 -0C00312D JAL 7000C4B4 -02E03025 OR A2,S7,R0 -1840000C *BLEZ V0,7F01306C -00102025 *OR A0,S0,R0 -8E4F0000 LW T7,0000 (S2) -11E00009 *BEQ T7,R0,7F01306C -//7F013048: 47B78 increment if not at end -02D31021 *ADDU V0,S6,S3 ;V0=S6+S3: p->sel.handicaps + player# -90430000 *LBU V1,0000 (V0) ;V1=cur.handicap -3C018003 *LUI AT,8003 -9021B498 *LBU AT,B498 (AT) ;AT=8002B498: #entries -0061082A *SLT AT,V1,AT ;TRUE if < max # entries -1020000B *BEQ AT,R0,7F01308C ;branch if over limit -24780001 *ADDIU T8,V1,0001 ;T8=cur.handicap++ -10000009 *BEQ R0,R0,7F01308C -A0580000 *SB T8,0000 (V0) ;T8->cur.handicap: save new handicap -//7F01306C: 47B9C press A - select entry - - -%_% - -7F01317C 47CAC menu 10 constructor: handicap select -//7F013450: 47F80 load current handicap settings -91CF0000 *LBU T7,0000 (T6) ;T7=800697A8+offset: player's handicap -........ ADDU S0,T1,S3 -........ ADDIU S4,S2,0046 -000FC080 *SLL T8,T7,0x2 ;T8=handicap->offset: offset to option in list -........ ADDU A0,A0,T8 ;A0=8002B498+offset: handicap menu options -........ JAL 7F0C1DD8 ;ret V0=p->text ID A0 -9484B49A *LHU A0,B49A (A0) ;A0=text ID -... -//7F013524: 48054 increment sloty-thing -25CF0001 *ADDIU T7,T6,0001 ;T7=T6+1: next player's slot - -=_= - -//7F010398: 44EC8 - SLL T8,T8,0x2 - ADDU V0,V0,T8 -03E00008 *JR RA -9442B19C *LHU V0,B19C (V0) - -7F0103AC 44EDC 0FC040EB F0= player handicap; A0=player# 0-3, fry AT,A0,F0 -7F0103A8 44ED8 0FC040EA - used upon starting an MP game - used at: F2818 7F0BDCE8 -3C018007 *LUI AT,8007 -00810821 *ADDU AT,AT,A0 ;T7=800697A8+offset: p->handicap setting -902497A8 *LBU A0,97A8 (AT) ;T7=handicap# -//7F0103B4 44EE4 0FC040ED accepts A0=handicap setting -3C018003 LUI AT,8003 -00042080 *SLL A0,A0,0x2 ;A0=handicap->offset -00810821 *ADDU AT,AT,A0 ;AT=8002B49E+offset -9424B49C *LHU A0,B49C (AT) ;A0=upper half of float -00042400 *SLL A0,A0,0x10 ;A0 converted to 32bit float format -03E00008 JR RA -44840000 *MTC1 A0,F0 ;F0=handicap value, A0 as well - -7F0100BC 44BEC V0= player's control style; A0=player# 0-3, fry T6 - used upon starting an MP game - -~_~ - -7F010608 45138 set defaults for multiplayer menu - NOTE: this routine has not been optimized -//7F010630: 45160 -........ OR V1,R0,R0 //V1=0=counter -........ BLEZ S0,7F0106A8 -........ OR A2,S0,R0 //A2=S0=player# -3C098003 *LUI A1,8003 -........ LUI T2,8007 -........ LUI T0,8007 -250897A7 *ADDIU T0,T0,97A7 //T0=800697A8=handicap -........ ADDIU T2,T2,97B8 //T2=800697B8=control style -2525B524 *ADDIU A1,T1,B524 //A1=8002B524=MP character -........ OR A0,R0,R0 //A0=offset to player's data -9129B499 *LBU T1,B499 (T1) //T1=5 -........ ADDIU A3,R0,FFFF //A3=-1 -//7F010660: 45190 set character and handicap if still default -........ LW T6,0000 (A1) //T6=char -25080001 *ADDIU T0,T0,0001 //T7=addy of player's handicap -........ SLTI AT,S0,0003 //TRUE if 4-players -........ BNE A3,T6,7F01067C //skip if a character has been selected -........ ADDU V0,T2,A0 //V0=addy of player's control style -........ SW V1,0000 (A1) //V1->character slot (incrementally bond, nat, etc.) -A1090000 *SB T1,0000 (T0) //5->handicap (default normal damage) -//7F01067C: 451AC set control setting to default -BNE AT,7F010698 -ADDIU V1,V1,0001 //inc next char -LW T8,0000 (V0) //T8=control style -SLTI AT,T8,0004 //TRUE if setting is valid -BNEL AT,R0,7F01069C -SLT AT,V1,A2 -SW R0,0000 (V0) -SLT AT,V1,A2 -//7F01069C: loopus -ADDIU A0,A0,0004 //next player data increment -BNEZ AT,7F010660 //more players! -ADDIU A1,A1,0004 -... - -&_& - --and the intro movies copier doohick... -//7F0C046C: F4F9C copy your current settings -90B90000 *LBU T9,0000 (A1) -AE1900B0 SW T9,00B0 (S0) -90A80001 *LBU T0,0001 (A1) -AE0800B4 SW T0,00B4 (S0) -90A90002 *LBU T1,0002 (A1) -AE0900B8 SW T1,00B8 (S0) -90AA0003 *LBU T2,0003 (A1) -AE0A00BC SW T2,00BC (S0) - -//7F0C05AC: F50DC handicap and control settings -3C018003 LUI AT,8003 -00002025 OR A0,R0,R0 -AC58000C SW T8,000C (V0) -8E1900B0 LW T9,00B0 (S0) ;T9=pl1 handicap -A0790000 *SB T9,0000 (V1) -8E0800B4 LW T0,00B4 (S0) ;T0=pl12 handicap -A0680001 *SB T0,0001 (V1) -8E0900B8 LW T1,00B8 (S0) ;T1=pl3 handicap -A0690002 *SB T1,0002 (V1) -8E0A00BC LW T2,00BC (S0) ;T2=pl4 handicap -A06A0003 *SB T2,0003 (V1) -8E0B00C0 LW T3,00C0 (S0) ;T3=pl1 control -ACCB0000 SW T3,0000 (A2) -8E0C00C4 LW T4,00C4 (S0) ;T3=pl2 control -ACCC0004 SW T4,0004 (A2) -8E0D00C8 LW T5,00C8 (S0) ;T3=pl3 control -ACCD0008 SW T5,0008 (A2) -8E0E00CC LW T6,00CC (S0) ;T3=pl4 control -ACCE000C SW T6,000C (A2) - -(_) - -Well, can rework the LtK scenario now. -How about I be lazy and not touch it until the whole scenario thing is taken care of... - -!note! MwtGX altered this! -//7F0BDC80 F27B0 - *NOP - ADDIU S2,T2,9EF0 - *NOP - ADDIU S3,R0,0004 -... -//7F0BDCC8 F27F8 set player's handicap -3C118008 LUI S1,8008 -0FC00A50 -JAL 7F002940 ;Casino Royale -26319EF0 -ADDIU S1,S1,9EF0 -//7F0BDCD4 F2804 loop for each player -0FC051D6 JAL 7F014758 ;ret V0=scenario -00002025 *OR A0,R0,R0 ;A0=handicap 0: LtK -0FC040ED *JAL 7F0103B4 ;ret F0=LtK handicap; fries AT,A0 -00000000 NOP ;reserved for ANDI test for scenario ANDI V0,V0,0008 -10530003 BEQ V0,S3,7F0BDCF0 ;branch if LtK BNEL V0,R0,+3 -00000000 *NOP -0FC040EA JAL 7F0103A8 -02002025 OR A0,S0,R0 -E620005C SWC1 F0,005C (S1) -//7F0BDCF4 -02002025 OR A0,S0,R0 -26100001 ADDIU S0,S0,0001 ;S0++: player#++ -26310070 ADDIU S1,S1,0070 ;S1=p->next player's stats -1613FFF3 *BNE S0,S3,7F0BDCD4 ;branch if all 4 players dealt with -00000000 NOP - - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/mp weapon revison 2.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/mp weapon revison 2.txt deleted file mode 100644 index 66445f9..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/mp weapon revison 2.txt +++ /dev/null @@ -1,1021 +0,0 @@ -The other works fine, but te code can get convoluted. -To simplify matters, copy selected set to buffer. -MP and object gen will only use the copy. Menus only mess with values. -That will also allow the copy to be editted without destroying the original. - -If there isn't a generic memcpy, will need to write one. - -To save time and make the code more difficult to write (since it really othrwise is pointless) -1) gen a set in the copy slot -2) if random, randomly select a set number -3) copy set to slot - -+_+ - -Since copy can be editted, MwtGX can be revised for all weapon sets. -1) write an independant searcher that scans for duplicates in set -2) scan for ammo-only item in slot F7 -3) if either is the case, replace with GG and rescan -4) if still bad, random the slot and rescan. - - -@_@ - -You know what would be cool? Set MP to display the weapon set + scenarios - -<_> - -0x870 right weapon -0xC18 left weapon - -revise into a generic - test if A0 drawn -7F08CF80: C1AB0 0FC233E0 test if A0 drawn! V0=# of that item held (0-2) - fries: T6, T7 -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=cur.player data -8DCF00D8 LW T7,00D8 (T6) ;T7=player death attrib -15E00007 BNEZ T7,7F08CFAC ;skip if player dead or dying -00001025 OR V0,R0,R0 -8DCF0870 LW T7,0870 (T6) ;T7=right weapon -508F0001 BEQL A0,T7,+1 -24420001 ADDIU V0,V0,0001 -8DCF0C18 LW T7,0C18 (T6) ;T7=right weapon -508F0001 BEQL A0,T7,+1 -24420001 ADDIU V0,V0,0001 -//7F08CFAC: -03E00008 JR RA -00000000 NOP -00000000 NOP -00000000 NOP - -CALLED: - B8908 7F083DD8 sets inhibitor to switch from flag... - F4574 7F0BFA44 funny enough, the only one to use this routine! - -//7F050AA0: 855D0 if flag held, disable BA pickup -AFA20058 SW V0,0058 (SP) -0FC230C5 *JAL 7F08C314 ;V0=TRUE if flag in inventory! -24040058 *ADDIU A0,R0,0058 -8FA30058 LW V1,0058 (SP) -AFA2005C *SW V0,005C (SP) ;SP+5C=1: BA uncollectable -00000000 *NOP -00000000 *NOP - -You know, I don't think we even need this routine any more ;*) -//7F083DAC: B88DC test if MP -ADDIU T2,R0,0001 -JAL 7F09A464 ;V0=#players -SW T2,0074 (SP) -SLTIU AT,V0,0002 -BNEL AT,R0,7F083DF0 -LW T3,0074 (SP) -//7F083DC4: B88F4 test if flag tag -JAL 7F014758 ;V0=scenario -NOP -ADDIU AT,R0,0002 -BNEL V0,AT,7F083DF0 ;skip if not flag tag -LW T3,0074 (SP) -//7F083DD8: B8908 disable inventory if flag in possession -JAL 7F08CF80 ;return V0=1 if holding flag -NOP -BEQL V0,R0,7F083DF0 -LW T3,0074 (SP) -SW R0,0074 (SP) ;trash SP+0x74 if flag held (disable inventory) -LW T3,0074 (SP) T3=1 ;Keep Me! - -reduced to: -240B0001 *ADDIU T3,R0,0001 -AFAB0074 *SW T3,0074 (SP) ;unnecessary (probably) - -+_+ - -//7F0BFA30: F4560 this *was* used to force the flag out when owned -0FC051D6 JAL 7F014758 ;V0=scenario -E4460038 SWC1 F6,0038 (V0) -24010002 ADDIU AT,R0,0002 -14410024 BNE V0,AT,7F0BFAD0 ;skip if not flag tag -24070001 *ADDIU A3,R0,0001 ;V1=unarmed -//7F0BFA44: F4574 test if you have the item in inventory -0FC230C5 *JAL 7F08C314 ;V0=TRUE if flag in inventory! -24040058 *ADDIU A0,R0,0058 -1040001C *BEQ V0,R0,7F0BFAC0 ;branch if they don't have the item available -00000000 *NOP -//7F0BFA54: F4584 replace unarmed with the flag -0FC17674 *JAL 7F05D9D0 ;ret V0=right hand weapon -24040000 *ADDIU A0,R0,0000 ;V0=right hand -14470003 *BNE V0,A3,+3 -24050058 *ADDIU A1,R0,0058 -0FC17645 *JAL 7F05D914 ;draw weapon A1 in hand A0 -24040000 *ADDIU A0,R0,0000 -0FC17674 *JAL 7F05D9D0 ;ret V0=right hand weapon -24040001 *ADDIU A0,R0,0001 ;V0=left hand -14470003 *BNE V0,A3,+3 -24050058 *ADDIU A1,R0,0058 -0FC17645 *JAL 7F05D914 ;draw weapon A1 in hand A0 -24040001 *ADDIU A0,R0,0001 -//7F0BFA84: F45B4 test if you have a flag... -0FC233E0 JAL 7F08CF80 ;V0!=0 if weapon A0 drawn -24040058 *ADDIU A0,R0,0058 ;A0=58: flag -1040000C BEQ V0,R0,7F0BFAC0 ;skip if flag not held -3C038008 *LUI V1,8008 -//7F0BFA94: F45C4 advance flag time and set flag ownership -8C63A0B4 *LW V1,A0B4 (V1) ;V0=current player stat pointer -3C0B8005 LUI T3,8005 -8D6B8374 LW T3,8374 (T3) ;T3=1 if not paused (used to advance flag time) -8C6A0060 *LW T2,0060 (V1) ;T2=flag held time -55600001 *BNEZL T3,+1 -01425021 *ADDU T2,T2,V0 -AC6A0060 *SW T2,0060 (V1) ;advance flag held time by number currently drawn -906D0069 *LBU T5,0069 (V1) -35AD0001 *ORI T5,T5,0001 -10000015 BEQ R0,R0,7F0BFB10 -A06D0069 *SB T5,0069 (V1) ;1->flag byte -//7F0BFAC0: F45F0 flag not held... - -half of that isn't necessary now! -//7F0BFA30: F4560 this *was* used to force the flag out when owned -0FC051D6 JAL 7F014758 ;V0=scenario -E4460038 SWC1 F6,0038 (V0) -24010002 ADDIU AT,R0,0002 -14410024 BNE V0,AT,7F0BFAD0 ;skip if not flag tag -24070001 *ADDIU A3,R0,0001 ;V1=unarmed -//7F0BFA44: F4574 test if you have a flag... -0FC233E0 JAL 7F08CF80 ;V0!=0 if weapon A0 drawn -24040058 *ADDIU A0,R0,0058 ;A0=58: flag -3C038008 *LUI V1,8008 -8C63A0B4 *LW V1,A0B4 (V1) ;V0=current player stat pointer -906D0069 *LBU T5,0069 (V1) -50400008 *BEQL V0,R0,7F0BFA7C ;skip if flag not held -31ADFFFE *ANDI T5,T5,FFEF ;blank the flag byte -//7F0BFA60: F4590 advance flag time and set flag ownership -3C0B8005 LUI T3,8005 -8D6B8374 LW T3,8374 (T3) ;T3=1 if not paused (used to advance flag time) -8C6A0060 *LW T2,0060 (V1) ;T2=flag held time -55600001 *BNEZL T3,+1 -01425021 *ADDU T2,T2,V0 -AC6A0060 *SW T2,0060 (V1) ;advance flag held time by number currently drawn -35AD0001 *ORI T5,T5,0010 -10000015 BEQ R0,R0,7F0BFB10 -A06D0069 *SB T5,0069 (V1) ;1->flag byte -//7F0BFA84: F45B4 - -//7F0BFAD0 F4600 set item ownership flag for MwtGX -0FC051D6 JAL 7F014758 -00000000 NOP -24010003 ADDIU AT,R0,0003 -1441000C *BNE V0,AT,7F0BFB10 ;branch if not scenario 3: MwtGX -//7F0BFAE4 test if own GX -3C088008 -LUI T0,8008 -8D08A0B4 -LW T0,A0B4 (T0) ;T0=p->stats -91190069 *LBU T9,0069 (T0) ;T9=scenario flags -0FC13F66 -JAL 7F04FD98 -240400F7 -ADDIU A0,R0,00F7 -50400002 *BEQL V0,R0,+2 ;branch if you don't have it or aren't alive -3339FFFE *ANDI T9,T9,FFDF ;untoggle flag -37390001 *ORI T9,T9,0020 ;toggle flag -A1190069 *SB T9,0069 (T0) -//7F0BFB08 set GX ownership flag - *NOP - *NOP - *NOP -//7F0BFB10 return -8FBF0014 LW RA,0014 (SP) -27BD0030 ADDIU SP,SP,0030 -03E00008 JR RA -00000000 NOP - - - -7F05D6FC breaks when you advance the thingy - tests for <21 on right+left weapon -followed by 7F08C8BC - skips a bunch of stuff if a gadget - -7F08C4D4 breaks on collection - ret V0=1 if not a gadget - -7F08C424 breaks when drawn, I think... -followed by 7F05DBF0 - saves value as previous right weapon - -quite possibly only need a few of these... C424 - -=_= - -So it begins... Multiplayer selectable gadgets -8004915C 1 solo mode # weapons (normally 0x21) -8004915D 1 mulitplayer mode # weapons (normally 0x59) -8004915E 1 RESERVED - cheats mode # weapons, technically invalid - - -7F002928 37458 0FC00A4A V0=#weapons; uses mode to determine offset for #weapons - fries: AT -3C018003 LUI AT,8003 -8C21A8F0 LW AT,A8F0 (AT) -3C028005 LUI V0,8005 -00221021 ADDU V0,AT,V0 -03E00008 JR RA -9042915C LBU V0,915C (V0) -potentially: - 37458 - 45120 - 84328 - - -//7F08C8AC: C13DC a later branch jumps here -24010001 ADDIU AT,R0,0001 -14410016 *BNE V0,AT,7F08C90C ;branch if not a right-handed weapon -8E040004 -LW A0,0004 (S0) -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -00000000 *NOP -0082082A *SLT AT,A0,V0 -10200028 BEQ AT,R0,7F08C968 ;if >0x20 - gadget detected! -0224082A SLT AT,S1,A0 -10200026 BEQ AT,R0,7F08C968 ;branch if next weapon < cur? -00000000 NOP -//7F08C8D4: C1404 right weapon testing -52400008 BEQL S2,R0,7F08C8F8 -00808825 OR S1,A0,R0 ;S1=right weapon -0FC17817 JAL 7F05E05C ;TRUE if ammo for right weapon -00000000 NOP -10400020 BEQ V0,R0,7F08C968 ;branch if out! -3C038008 LUI V1,8008 -8C63A0B0 LW V1,A0B0 (V1) ;V1=p->BONDdata -8E040004 LW A0,0004 (S0) ;A0=right weapon -00808825 OR S1,A0,R0 ;S1=right weapon -//7F08C8F8: -10000027 BEQ R0,R0,7F08C998 -00009825 OR S3,R0,R0 ;S3=left weapon -//7F08C900: C1430 double weapon set -00000000 NOP -00000000 NOP -00000000 NOP -24010003 ADDIU AT,R0,0003 -14410015 BNE V0,AT,7F08C968 ;branch if not doubles! -0224082A -SLT AT,S1,A0 -14200005 BNEZ AT,7F08C930 -8E180008 -LW T8,0008 (S0) ;T8=left weapon -16240011 BNE S1,A0,7F08C968 -0278082A -SLT AT,S3,T8 -1020000F BEQ AT,R0,7F08C968 -00000000 NOP -//7F08C930: C1460 -12400008 BEQ S2,R0,7F08C954 -00000000 NOP -0FC17817 JAL 7F05E05C ;TRUE if ammo for right weapon -00000000 NOP -14400004 BNEZ V0,7F08C954 ;branch if you're out! -00000000 NOP -0FC17817 JAL 7F05E05C ;TRUE if ammo for left weapon -8E040008 LW A0,0008 (S0) ;A0=left weapon -10400005 BEQ V0,R0,7F08C968 ;branch if you're out! -//7F08C954: C1484 correct your V1... -3C038008 LUI V1,8008 -8E110004 LW S1,0004 (S0) ;S1=right weapon -8E130008 LW S3,0008 (S0) ;S3=left weapon -1000000D BEQ R0,R0,7F08C998 -8C63A0B0 LW V1,A0B0 (V1) ;V1=p->BONDdata -//7F08C968: -... -//7F08C990: loop backward -BNEL S0,R0,7F08C8AC -LW V0,0000 (S0) - --_- - -7F05D6D0: 92200 revert to weapon when advancing from gadget -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -00002025 OR A0,R0,R0 ;A0=0: right hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0; doesn't touch A1... -24050001 ADDIU A1,R0,0001 ;A1=mode (normal? previous?) -AFA20024 SW V0,0024 (SP) ;SP+20=next left weapon -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -AFA20020 SW V0,0020 (SP) ;SP+24=next right weapon -8FAE0020 *LW T6,0020 (SP) ;T6=next left weapon -8FAF0024 *LW T7,0024 (SP) ;T6=next right weapon -01E2082A *SLTI AT,T7,V0 -10200003 BEQ AT,R0,7F05D714 ;branch if right weapon a gadget -01C2082A *SLTI AT,T6,V0 -14200008 BNEZ AT,7F05D730 ;branch if left weapon a gadget -27A40024 ADDIU A0,SP,0024 ;A0=p->SP+24: pointer to next right weapon # -//7F05D714: right-hand gadget -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) ;V0=p->BONDdata -8C4F0878 LW T7,0878 (V0) ;T7=previous right weapon -AFAF0024 SW T7,0024 (SP) ;SP+24=previous right weapon -8C580C20 LW T8,0C20 (V0) ;T8=previous left weapon -10000004 BEQ R0,R0,7F05D73C -AFB80020 SW T8,0020 (SP) ;SP+20=previous left weapon -//7F05D730: left-hand gadget -27A50020 ADDIU A1,SP,0020 ;A1=p->SP+20: p->left weapon -0FC2321B JAL 7F08C86C ;draw next weapon in cycle (I think...) -00003025 OR A2,R0,R0 ;A2=0 -//7F05D73C: set new weapons -00002025 OR A0,R0,R0 ;A0=0: right hand -8FA50024 LW A1,0024 (SP) ;A1=right weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -24060001 ADDIU A2,R0,0001 ;A2=1 (mode?) -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -8FA50020 LW A1,0020 (SP) ;A1=left weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -24060001 ADDIU A2,R0,0001 ;A2=1 -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - - -7F05D768: 92298 same as above but backward through list -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -00002025 OR A0,R0,R0 ;A0=0: right hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -2405FFFF ADDIU A1,R0,FFFF ;A1=mode (normal? previous?) -AFA20024 SW V0,0024 (SP) ;SP+24=next right weapon -0FC1750D *JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24040001 *ADDIU A0,R0,0001 ;A0=1: left hand -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -AFA20020 -SW V0,0020 (SP) ;SP+20=next left weapon -8FAF0020 *LW T7,0020 (SP) ;T6=next right weapon -8FAE0024 LW T6,0024 (SP) ;T6=next right weapon -01C2082A *SLTI AT,T6,V0 -10200003 BEQ AT,R0,7F05D7AC ;branch if right weapon a gadget -01E2082A *SLTI AT,T7,V0 -14200008 BNEZ AT,7F05D7C8 ;branch if left weapon a gadget -27A40024 ADDIU A0,SP,0024 ;A0=p->SP+24: pointer to next right weapon # -//7F05D7AC 922DC right-hand gadget -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) ;V0=p->BONDdata -8C4F0878 LW T7,0878 (V0) ;T7=previous right weapon -AFAF0024 SW T7,0024 (SP) ;SP+24=previous right weapon -8C580C20 LW T8,0C20 (V0) ;T8=previous left weapon -10000004 BEQ R0,R0,7F05D7D4 -AFB80020 SW T8,0020 (SP) ;SP+20=previous left weapon -//7F05D7C8 922F8 left-hand gadget -27A50020 ADDIU A1,SP,0020 ;A1=p->SP+20: p->left weapon -0FC232C4 JAL 7F08CB10 ;draw next weapon in cycle (I think...) -00003025 OR A2,R0,R0 ;A2=0 -//7F05D7D4 92304 set new weapons -00002025 OR A0,R0,R0 ;A0=0: right hand -8FA50024 LW A1,0024 (SP) ;A1=right weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -2406FFFF ADDIU A2,R0,FFFF ;A2=1 (mode?) -24040001 ADDIU A0,R0,0001 ;A0=1: left hand -8FA50020 LW A1,0020 (SP) ;A1=left weapon -0FC17538 JAL 7F05D4E0 ;probably draw weapon A1 in hand A0, mode A2 -2406FFFF ADDIU A2,R0,FFFF ;A2=1 -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0028 -ADDIU SP,SP,0028 - -7F05D800: 92330 another one, again not certain the use of it -27BDFFD8 ADDIU SP,SP,FFD0 -AFBF0014 SW RA,0014 (SP) -00002025 OR A0,R0,R0 ;A0=0: right hand -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24050001 ADDIU A1,R0,0001 ;A1=mode (normal? previous?) -AFA2002C SW V0,002C (SP) ;SP+2C=next right weapon -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -AFA20024 -SW V0,0024 (SP) ;SP+24=next right weapon -00023025 *OR A2,V0,R0 -0FC1750D JAL 7F05D434 ;V0=next weapon in cycle for hand A0 -24040001 -ADDIU A0,R0,0001 ;A0=1: left hand -8FAE0024 LW T6,0024 (SP) ;T6=next right weapon -00401825 OR V1,V0,R0 -AFA20020 SW V0,0020 (SP) ;SP+20=next left weapon -01C6082A *SLT AT,T6,A2 -10200003 BEQ AT,R0,7F05D848 ;branch if right weapon a gadget -0046082A *SLT AT,V0,A2 -14200008 BNEZ AT,7F05D864 ;branch if left weapon a gadget -8FB90024 LW T9,0024 (SP) ;T6=next right weapon -//7F05D848 right-hand gadget -3C028008 LUI V0,8008 -8C42A0B0 LW V0,A0B0 (V0) ;V0=p->BONDdata -8C4F0878 LW T7,0878 (V0) ;T7=previous right weapon -AFAF0024 SW T7,0024 (SP) ;SP+24=previous right weapon -8C580C20 LW T8,0C20 (V0) ;T8=previous left weapon -10000004 BEQ R0,R0,7F05D8E4 -AFB80020 SW T8,0020 (SP) ;SP+20=previous left weapon -... -//7F05D8E4 - OR A0,R0,R0 - LW A1,0024 (SP) - JAL 7F05D4E0 - ADDIU A2,R0,0001 - ADDIU A0,R0,0001 - LW A1,0020 (SP) - JAL 7F05D4E0 - ADDIU A2,R0,0001 - LW RA,0014 (SP) - JR RA - -ADDIU SP,SP,0030 - -=_= - -7F08C488: C0FB8 collect weapon of type - returns V0=1 if gadget or all guns in effect -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC230C5 JAL 7F08C314 ;TRUE if item A0 is in inventory -AFA40018 SW A0,0018 (SP) ;SP+18=item# -54400014 *BNEL V0,R0,7F08C4FC ;if no ammo, return -00001025 OR V0,R0,R0 ;V0=0: return FALSE -... -//7F08C4C4 C0FF4 -3C188008 LUI T8,8008 -8F18A0B0 LW T8,A0B0 (T8) ;T8=p->BONDdata -8FA80018 LW T0,0018 (SP) ;T0=weapon type -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -8F1911EC LW T9,11EC (T8) ;T9=all guns flag -0102082A *SLT AT,T0,V0 ;TRUE if weapon, not gadget -13200003 BEQ T9,R0,7F08C500 ;branch if all guns in effect -24020001 *ADDIU V0,R0,0001 -54200001 BNEL AT,R0,7F08C500 ;branch if not a gadget -00001025 OR V0,R0,R0 -//7F08C4EC C101C return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 -00000000 NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -//7F08C50C - -*_* - -7F08C40C C0F3C -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=p->BONDdata -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -AFA5001C SW A1,001C (SP) ;SP+1C=A1: hand -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -8DCF11EC -LW T7,11EC (T6) ;T7=all guns flag -11E00011 BEQ T7,R0,7F08C470 ;branch if all guns not set -0082082A *SLT AT,A0,V0 -1020000F BEQ AT,R0,7F08C470 ;branch if weapon# is gadget -00000000 NOP -1485000D BNE A0,A1,7F08C470 ;branch if hand != weapon? -00000000 NOP -0FC26919 JAL 7F09A464 ;ret V0=# players -AFA40018 SW A0,0018 (SP) ;SP+18=A0: right weapon -24010001 ADDIU AT,R0,0001 -14410008 BNE V0,AT,7F08C470 ;branch if multiplayer -8FA40018 LW A0,0018 (SP) -//7F08C454 solo - determine if capable of doubles? -3C050010 LUI A1,0010 -0FC1782D JAL 7F05E0B4 ;TRUE if mask 00100000 is set in weapon A0's stats -AFA40018 SW A0,0018 (SP) -10400003 BEQ V0,R0,7F08C470 ;branch if it wasn't set -8FA40018 LW A0,0018 (SP) -10000003 BEQ R0,R0,7F08C478 ;return TRUE! -24020001 ADDIU V0,R0,0001 -//7F08C470 multiplayer and default -0FC230E7 JAL 7F08C39C ;TRUE if item A0 for hand A1 in inventory -8FA5001C LW A1,001C (SP) -//7F08C478 -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - - - -/_/ - -7F05DB54 92684 -//7F05DBE8 92718 -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -00074080 SLL T0,A3,0x2 ;T0=ammo type->offset -18A00004 BLEZ A1,7F05DC04 ;branch if no ammo for weapon -00681821 *ADDU V1,V1,T0 ;V0=BONDdata+ammo type offset -8C691130 *LW T1,1130 (V1) ;T1=ammo total for weapon -01255021 ADDU T2,T1,A1 ;T2=ammo total + clip ammo -AC6A1130 *SW T2,1130 (V1) ;T2=updated value -//7F05DC04 92734 -00C2082A *SLT AT,A2,V0 ;TRUE if original weapon not a gadget -10200003 *BEQ AT,R0,7F05DC18 ;branch if a gadget -8E2B0000 LW T3,0000 (S1) ;T3=p->BONDdata -01706021 ADDU T4,T3,S0 ;T4=BONDdata+handoffset -AD860878 SW A2,0878 (T4) ;save prev. weapon to BONDdata+878+hand -//7F05DC18: - -flip through inventory backward -//7F08CB68 C1698 right-handed weapon -0FC00A4A *JAL 7F002928 ;ret V0=#weapons before gadgets -8E040004 -LW A0,0004 (S0) ;A0=right weapon -0082082A *SLT AT,A0,V0 ;TRUE if original weapon not a gadget -1020002D -BEQ AT,R0,7F08CC2C ;branch if a gadget -0091082A SLT AT,A0,S1 -14200005 BNEZ AT,7F08CB94 ;branch if weapon code < cur. -00000000 NOP -16240029 BNE S1,A0,7F08CC2C ;branch if not same item -00000000 NOP -1A600027 BLEZ S3,7F08CC2C ;branch if left weapon invalid -00000000 NOP - - -left to do... -7F050440 84F70 -7F05D834 92364 these two are used when using the last of an item -7F05D83C 9236C auto-advance, in other words ;*) -7F0665B4 9B0E4 -7F0765F8 AB128 not related -7F076604 AB134 not related and unused, thank you very much -7F08C3E0 C0F10 tests availability if a gadget when drawn - all guns only! - actually, stuff passes 11 to this, so probably not -7F08D0DC C1C0C -used when drawing weapon -7F08D1DC C1D0C drawing a weapon under all guns - all guns -7F09D018 D1B48 -7F0AEBB4 E36E4 -7F0AEC28 E3758 - -uses of all guns flag... -7F08C998 further along in advance routine - 7F08CA30-7F08CAE8 MP+solo(single) all guns handler! - if you set the ADDIU x,y,0021's to 59, you've just made all gadgets available too - so, would need some conditional stuff to allow drawing items outside the inventory range... - if you move the solo branches further in the binary you can do MP-specific stuff - could test S0 versus 20 - if true, see if A0 is larger - if also true, feed it that! -//7F08C9B4 C14E4 -5441001D BNEL V0,AT,7F08CA2C ;branch if multiplayer -8FAF0028 LW T7,0028 (SP) ;note A0 still equals the weapon# -... -//7F08C9CC C14FC -5040001D BEQL V0,R0,7F08CA44 -8FAF0028 LW T7,0028 (SP) -... -//7F08C9E8 C1518 -50200016 BEQL AT,R0,7F08CA44 -8FAF0028 LW T7,0028 (SP) -... -//7F08CA00 C1530 -50400010 BEQL V0,R0,7F08CA44 -8FAF0028 LW T7,0028 (SP) -... -//7F08CA18 C1548 -5020000A BEQL AT,R0,7F08CA44 -8FAF0028 LW T7,0028 (SP) -... -//7F08CA2C C155C new MP-only code -2A010020 *SLTI AT,S0,0020 -14200003 *BNE AT,R0,+3 ;branch if wep# < tank -0204082A *SLT AT,S0,A0 -1420002A *BNE AT,R0,7F08CAE4 ;branch if wep# < nextwep# -00000000 *NOP -//7F08CA40 C1570 all guns - single weapon drawn -8FAF0028 LW T7,0028 (SP) ;T7=p->right weapon# on stack -24030021 ADDIU V1,R0,0021 ;V1=all-guns activated range -8DF80000 LW T8,0000 (T7) ;T8=right weapon -16380003 *BNE S1,T8,7F08CA5C ;branch if it isn't the same as the next weapon in inventory -8FB9002C -LW T9,002C (SP) ;T9=p->left weapon# on stack -8F280000 -LW T0,0000 (T9) ;T0=left weapon -16680022 *BNE S3,T0,7F08CAE4 ;branch if it isn't the same as the next left weapon -//7F08CA5C C158C no more divison to ensure proper rollaround -26100001 *ADDIU S0,S0,0001 ;T1=next weapon# -0203082A *SLT AT,S0,V1 -50200001 *BEQL AT,R0,+1 -00008025 *OR S0,R0,R0 ;roll around if -260A0001 -ADDIU T2,S0,0001 ;T2=next.wep -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -00000000 *NOP -//7F08CA84 -... -//7F08CADC C160C -5611FFE0 *BNEL S0,S1,7F08CA60 -26090001 *ADDIU S0,S0,0001 ;T1=next weapon# - - -This is probably the worst. Backtrack needs rewriting - Should decrement value, test against limit and inventory... - S0=r.weapon, A0 & S1=next according to inventory - -//7F08CC7C C17AC right-handed weapon -2610FFFF *ADDIU S0,S0,FFFF ;S0=wep#-1 -5A000001 *BLEZL S0,+1 -24100020 *ADDIU S0,R0,0020 -0FC26919 *JAL 7F09A464 ;V0=#players -0203082B *SLTU AT,S0,V1 ;TRUE if wep#-1 < 21 -28420002 *SLTI V0,V0,0002 -14400013 *BNEZ V0,+13 ;branch if solo -//7F08CC98 handle weird inventory during all guns multi -00000000 *NOP -50200001 *BEQL AT,R0,+1 ;if wep#-1 is still greater than 20, set to 20 for next thing to work -24100020 *ADDIU S0,R0,0020 -0211082A *SLT AT,S0,S1 ;TRUE if cur < next -14200066 *BNEZ AT,7F08CE44 -00000000 *NOP -//7F08CCB0 -*NOP -NOP -*NOP -*NOP -*NOP -NOP -*NOP -//7F08CCCC -*NOP -*NOP -*NOP -*NOP -NOP -*NOP -//7F08CCE4 C1814 -BNE S0,S1,7F08CD60 -NOP - - -7F08CD60 reroutes and handles multi-only when wep!=prevwep in inventory -//7F08CDC8 - OR S1,S0,R0 ;S1=S0: prevwep=wep - BEQ R0,R0,7F08CE44 - OR S3,R0,R0 ;S3=NULL left weapon, though already set -it would work fine with this... - -*.* - -This definately is the worst!! jumps not allowed (yet) -... -//7F08D0C8 C1BF8 proceeding from weapon w/o ammo -55420009 BNEL T2,V0,7F08D0F0 ;branch if not a right-handed weapon -8CA5000C LW A1,000C (A1) ;doesn't increment V1... -50800006 BEQL A0,R0,7F08D0EC ;branch if all guns is not set -24630001 ADDIU V1,V1,0001 -8CAD0004 LW T5,0004 (A1) ;T5=right weapon -29A10059 SLTI AT,T5,0021 ;max entries to test -54200003 BNEL AT,R0,7F08D0F0 ;branch if not a gadget -8CA5000C LW A1,000C (A1) ;doesn't increment V1... -//7F08D0E8 C1C18 various things branch here, so it can't move easily -24630001 ADDIU V1,V1,0001 ;V1=counter? everything likelies here -8CA5000C LW A1,000C (A1) ;A1=p->next item in inventory -10A60003 BEQ A1,A2,7F08D100 ; -00000000 NOP -54A0FFDD BNEL A1,R0,7F08D070 -8CA20000 LW V0,0000 (A1) -//7F08D100 C1C30 kill at EOL -03E00008 JR RA -00601025 OR V0,V1,R0 - -oh heck... it was a glitch in the original, quite honestly - -~.~ - -rewriting cheat menu to add in Dr. No, Line Mode, and more -Dr. No stage: complete Facility -Line Mode stage: - -no need for a TLB... Should be able to get away with one byte -21990+0x30B10: -C0 type of entry: - 3 bitflag# - 0-2 difficulty for stage -3F cheat bitflag# (0-17) or stage# -value FF has a special meaning - cheat does not appear in menu - -MODIFIED VERSION -7F009848: 3E378 0FC02612 detect if particular cheat is available in menu - accepts: A0=cheat# -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -2484FFFF *ADDIU A0,A0,FFFF //T6=current cheat index-1 -2C81004A *SLTIU AT,A0,004A //TRUE if not a valid cheat (0 or 4A+) -50200016 BEQL AT,R0,+return -00001025 OR V0,R0,R0 -//7F009860: get cheat flag and folder# -3C018005 LUI AT,8005 -00240821 *ADDU AT,AT,A0 -902E18A0 *LBU T6,18A0 (AT) //T6=800518A0+cheat# (test if cheat # available) -2DC400FF SLTIU A0,T6,00FF ;branch if a stupidly ridiculous entry -50800010 BEQL A0,R0,+return -00001025 OR V0,R0,R0 -3C048003 *LUI A0,8003 -8C84A8E8 *LW A0,A8E8 (A0) ;A0=folder# -//7F009874: tear apart the entry -000E3182 SRL A2,T6,0x6 ;T6>>6: bits C0 -2CC50003 SLTIU A1,A2,0003 ;branch if difficulty 0-2 -14A00008 BNEZ A1,+stages -31C5003F ANDI A1,T6,003F -//7F009888: cheats -0FC07771 JAL 7F01DDC4 ;V0=p->eeprom folder A0 -AFA50010 SW A1,0010 (SP) ;stash the cheat# -00022025 OR A0,V0,R0 -0FC07748 JAL 7F01DD20 ;V0=1 if invincible unlocked -8FA50010 LW A1,0010 (SP) ;A1=cheat# -10000003 BEQ R0,R0,+return -00000000 NOP -//7F0098A4: stages -0FC07A7D JAL 7F01E9F4 -00000000 NOP -//7F0098B4: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -7F009874: default for non-menu cheats -7F00987C: [A1=1] return V0=1 if invincible unlocked -7F00989C: [A1=13] return V0=1 if All Guns unlocked -7F0098BC: [A1=6] return V0=1 if No Radar Multi unlocked -7F0098DC: [A1=9] return V0=1 if Fast Animation unlocked -7F0098FC: [A1=A] return V0=1 if Bond Invisible unlocked -7F00991C: [A1=F] return V0=1 if Infinite Ammo unlocked -7F00993C: [A1=2] return V0=1 if DK Mode unlocked -7F00995C: [A1=7] return V0=1 if Tiny Bond unlocked -7F00997C: [A1=C] return V0=1 if Slow Animation unlocked -7F00999C: [A1=0] return V0=1 if Paintball Mode unlocked -7F0099BC: [A1=D] return V0=1 if Silver PP7 unlocked -7F0099DC: [A1=11] return V0=1 if Gold PP7 unlocked -7F0099FC: [A1=B] return V0=1 if Enemy Rockets unlocked -7F009A1C: [A1=4] return V0=1 if 2x Rocket L. unlocked -7F009A3C: [A1=3] return V0=1 if 2x Grenade L. unlocked -7F009A5C: [A1=10] return V0=1 if 2x RC-P90 unlocked -7F009A7C: [A1=8] return V0=1 if 2x Throwing Knife unlocked -7F009A9C: [A1=E] return V0=1 if 2x Hunting Knife unlocked -7F009ABC: [A1=12] return V0=1 if 2x Laser unlocked -7F009ADC: [A1=5] return V0=1 if Turbo Mode unlocked -7F009AFC: 3E62C return V0=1 if unlocked (Cradle completed) -7F009B10: 3E640 return V0=1 if unlocked (Aztec completed) -7F009B24: 3E654 return V0=1 if unlocked (Egypt completed) -7F009B38: 3E668 sit and spin! -7F009B44: 3E674 return - - -7F01E9F4: 53524 0FC07A7D V0=TRUE is stage A1 completed on difficulty A2 in folder A0 - accepts: A0=eeprom folder#, A1=stage#, A2=difficulty (0-2) -//7F01E9F4: if 007 (or multi), set to 00 agent -2CCE0003 +SLTIU T6,A2,0003 -51C00001 +BEQL T6,R0,+1 -24060002 +ADDIU A2,R0,0002 -//7F01EA00: 53530 0FC07A80 start of actual routine -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -AFA40018 SW A0,0018 (SP) ;SP+18=A0: eeprom folder# -AFA50010 *SW A1,0010 (SP) ;SP+10=A1: stage# -AFA6000C *SW A2,000C (SP) ;SP+C= A2: difficulty -//7F01EA14: determine if stage A1 unlocked on difficulty -24C20001 *ADDIU V0,A2,0001 ;V0=difficulty+1 -AFA2000C *SW V0,000C (SP) ;store next difficulty to test -0FC078B0 JAL 7F01E2C0 ;V0=TRUE if stage A1 complete on difficulty A2 in eeprom folder A0 -8FA50010 *LW A1,0010 (SP) ;A1=stage# -//7F01EA24: return TRUE if it was a match -384E0003 XORI T6,V0,0003 ;T6=V0^3: test if this was the highest difficulty completed -2DC20001 SLTIU V0,T6,0001 ;V0=TRUE if highest difficulty completed -14400003 BNEZ V0,7F01EA44 ;return TRUE if this was the highest difficulty unlocked -8FA6000C *LW A2,000C (SP) ;A2=current difficulty -//7F01EA34: loop for each remaining difficulty -2CCE0003 *SLTIU T6,A2,0003 ;only times for agent, secret, and 00 are saved -15C0FFF7 *BNEZ T6,7F01EA1C -8FA40018 *LW A0,0018 (SP) -//7F01EA40: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -This is used in the above routines, and also in these: -7F01EAD0: 53600 0FC07AB4 V0= TRUE if Cradle completed on any folder -7F01EB20: 53650 0FC07AC8 V0= TRUE if Aztec completed on secret or 00 agent on any folder -7F01EB70: 536A0 0FC07ADC V0= TRUE if Egypt completed on 00 agent on any folder - -used at: (respectively) - 4D650 - 4D670, 4DBA4, 4DBE4, 4DC24, 4DC88 - 4D690, 4DCEC, 4DD50, - - -//7F01EAD0: 53600 0FC07AB4 V0= TRUE if Cradle completed on any folder -24050011 ADDIU A1,R0,0011 -10000006 BEQ R0,R0,+6 -00003025 OR A2,R0,R0 -//7F01EADC: 5360C 0FC07AB7 V0= TRUE if Aztec completed on secret or 00 agent on any folder -24050012 ADDIU A1,R0,0012 -10000003 BEQ R0,R0,+3 -24060001 ADDIU A2,R0,0001 -//7F01EAE8: 53618 0FC07ABA V0= TRUE if Egypt completed on 00 agent on any folder -24050013 ADDIU A1,R0,0013 -24060002 ADDIU A2,R0,0002 -//7F01EAF0: 53620 0FC07ABC V0= TRUE if stage A1 completed on difficulties A2 and above -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF001C SW RA,001C (SP) -AFB00018 SW S0,0018 (SP) -AFB10014 SW S1,0014 (SP) -AFB20010 SW S2,0010 (SP) -00008025 OR S0,R0,R0 ;S0=0: init folder# -00058825 *OR S1,A1,R0 ;S1=A1: stage# -00069025 *OR S2,A2,R0 ;S2=S2: difficulties to test -//7F01EB8C: loopus per folder -00123025 *OR A2,S2,R0 -00112825 *OR A1,S1,R0 -0FC07A7D JAL 7F01E9F4 ;V0=TRUE is stage A1 completed on difficulties A2 and above in folder A0 -00102025 OR A0,S0,R0 ;A0=current folder -14400003 *BNE V0,R0,+return ;if unlocked, return -2E040004 *SLTIU A0,S0,0004 -1480FFF9 *BNEZ A0,-loopus ;loopus for folders 0-3 -26100001 ADDIU S0,S0,0001 ;S0++: folder#++ -//7F01EBAC: return -8FBF001C LW RA,001C (SP) -8FB00018 LW S0,0018 (SP) -8FB10014 LW S1,0014 (SP) -8FB20010 LW S2,0010 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 - - -~.~ - -94163 set timed mine MP timer to 1.5 seconds - -7F05F648 94178 briefcase bomb... - rewritting to use the default 4 seconds. - however, it will explode +very+ large -3C188002 *LUI T8,8002 -8F18A8F0 *LW T8,A8F0 (T8) -13000002 *BEQL T8,R0,+2 ;branch if solo -2419012C *ADDIU T9,R0,012C -241900B4 ADDIU T9,R0,00B4 -//7F05F65C: set the 'splodie flag -9218000C *LBU T8,000C (S0) -37180080 *ORI T8,T8,0080 -A218000C *SB T8,000C (S0) -//7F05F668: -10000010 BEQ R0,R0,7F05F684 -A6190082 SH T9,0082 (S0) - -@_@ - -Time to hack the text displayed on weapon collection - -7F04F2EC does ammo collection using TLB pointers -instead, will do a joint routine. TLB pointers get replaced with an index: -# single -0 nothing -1 a -2 an -3 the - -all multiples become "some". - -that means the TLB table gets replaced with two tables. Each value =2bits! -type>>2 + table = byte -(type&3) << 1 = shift -(byte>>shift) & 3 = value -in other words, bitwise... 44332211 88776655 -ammo types -0 1 0 1 1 1 1 1 1 1 1 1 1 1 2 2 -1 1 1 1 1 3 0 0 0 0 0 0 2 - - - - -44 55 55 A5 -55 0D 00 02 - -weapon types (start at 2) -3 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 -1 3 3 3 1 3 1 1 1 1 1 1 3 3 3 1 -0 1 1 1 1 1 1 1 1 1 3 1 3 1 1 1 -2 0 0 1 1 1 3 3 3 3 3 3 3 1 1 1 -1 3 3 3 3 2 1 1 1 0 0 3 0 1 0 1 -1 1 0 0 0 0 3 - - -57 55 55 65 -FD 5D 55 7F -54 55 75 57 -42 F5 FF 57 -FD 5B C1 44 -05 30 - -both tables redirected to 7F04F380 0x83EB0 - -7F04F2EC: 83E1C appends article before ammo type text - accepts: A0=p->final string, A1=ammo type, A2=quantity -24AEFFFF ADDIU T6,A1,FFFF ;T6=A1-1: ammo types 1-1D -2DC1001D SLTIU AT,T6,001D ;TRUE if valid ammo type -10000005 BEQ R0,R0,+7F04F30C -00001025 OR V0,R0,R0 ;starts at start of table -//7F04F2FC: 83E2C 0FC13CBF weapon half -24060001 ADDIU A2,R0,0001 ;default quantity is 1 -24AEFFFE ADDIU T6,A1,FFFE ;weapon list -2 -2DC10057 SLTIU AT,T6,0057 ;TRUE if hunting - token -24020008 ADDIU V0,R0,0008 ;start of weapon type table -//7F04F30C: generic bit -1020001A BEQ AT,R0,7F04F374 ;branch if invalid type -27BDFFE8 ADDIU SP,SP,FFE8 -18C00018 BLEZ A2,7F04F374 ;branch if no ammo -AFA40018 SW A0,0018 (SP) ;SP+18=A0: p->final -AFBF0014 SW RA,0014 (SP) -//7F04F320: multiple ammo always defaults to "some" -3404A401 ORI A0,R0,A401 ;A0=A401: "some" -2CC10002 SLTIU AT,A2,0002 ;TRUE if ammo = 1 -5020000C BEQL AT,R0,7F04F35C ;branch if multiple ammo -00000825 OR AT,R0,R0 -//7F04F330: determine individual ammo's article -3C018005 LUI AT,8005 -00220821 ADDU AT,AT,V0 ;add offset for start of block -000E1082 SRL V0,T6,0x2 ;T6=ammo type -> offset -00220821 ADDU AT,AT,V0 ;dd offset for byte in block -90212F10 LBU AT,2F10 (AT) ;AT=80052F10+offset: byte containing value -31CE0003 ANDI T6,T6,0003 ;T6=sample # within byte -000E7040 SLL T6,T6,0x1 ;T6*=2 -01C10806 SRLV AT,AT,T6 ;AT>>T6 -30210003 ANDI AT,AT,0003 ;AT=code -//7F04F354: test if code = 0 (no text) -50200007 BEQL AT,R0,7F04F374 -8FA40018 LW A0,0018 (SP) -//7F04F35C: retrieve p->text ID -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -00812021 ADDU A0,A0,AT ;A0=A401+code for article -//7F04F364: concatenate the newly-looted string -10400003 BEQ V0,R0,7F04F374 -8FA40018 LW A0,0018 (SP) ;A0=SP+18: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00402825 OR A1,V0,R0 ;A1=V0: p->article -//7F04F374: return -8FBF0014 LW RA,0014 (SP) -//7F04F378: return w/o pulling RA -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -#_# - -use 0FC13CBF to get article for weapon -7F0670DC is long line, used normally -7F0670A8 is short line, used on quad-screen view - -7F04FDE0: 84910 creates region-specific text @ A0 for item A1 collection -27BDFFD8 ADDIU SP,SP,FFD8 -AFB00018 SW S0,0018 (SP) -00808025 OR S0,A0,R0 ;S0=A0: p->final string -AFBF001C SW RA,001C (SP) -AFA5002C SW A1,002C (SP) ;SP+2C=A1: item type -//7F04FDF4: get # players -0FC26919 JAL 7F09A464 ;V0=#players -AE000000 SW R0,0000 (S0) ;NULL the string first -28410003 SLTI AT,V0,0003 -3C0E8005 LUI T6,8005 -81CE84D0 LB T6,84D0 (T6) ;T6=800484D0: selected language -15C0000B BNEZ T6,7F04FE38 ;branch if !0 - japanese -AFA10024 SW AT,0024 (SP) ;SP+24=0 if inhibitted, 1 if not -//7F04FE10: english - "Picked up" -10200006 BEQ AT,R0,7F04FE2C -00000000 NOP -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -3404A400 ORI A0,R0,A400 ;A0=A400: "Picked up" -00102025 OR A0,S0,R0 ;A0=S0: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00022825 OR A1,V0,R0 ;A1=V0: p->"Picked up" -//7F04FE2C: english - appropriate article -00102025 OR A0,S0,R0 ;A0=S0: p->final -0FC13CBF JAL 7F04F2FC -8FA5002C LW A1,002C (SP) ;A1=item type -//7F04FE38: both languages - weapon name, pulled from watch menu! -8FA10024 LW AT,0024 (SP) ;AT=inhibitor -10200005 BEQ AT,R0,7F04FE54 -8FA4002C LW A0,002C (SP) ;A1=item type -0FC19C37 JAL 7F0670DC ;V0=long name -00000000 NOP -10000003 BEQ R0,R0,7F04FE5C -00000000 NOP -//7F04FE54: short line, used during quad-screen games -0FC19C2A JAL 7F0670A8 ;V0=shortname -00000000 NOP -//7F04FE5C: append! -1040001A BEQ V0,R0,7F04FEC8 -00022825 OR A1,V0,R0 -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00102025 OR A0,S0,R0 ;A0=S0: p->final -//7F04FE6C: get strlen -0C004E1F JAL 7001387C ;V0=strlen(A0) -00102025 OR A0,S0,R0 ;A0=S0: p->final -00505021 ADDU T2,V0,S0 ;T2=p->NULL at end of string -//7F04FE78: remove /r at end of string if present -914BFFFF LBU T3,FFFF (T2) ;T3=last character -2401000A ADDIU AT,R0,000A -502B0001 BEQL AT,T3,7F04FE88 ;branch if not a /r -A140FFFF SB R0,FFFF (T2) -//7F04FE88: determine region -3C088005 LUI T0,8005 -810884D0 LB T0,84D0 (T0) ;T0=800484D0: selected language -11000008 BEQ T0,R0,7F04FEB4 ;branch if english -8FA10024 LW AT,0024 (SP) ;T1=SP+24: inhibit "picked up.*" text -10200006 BEQ AT,R0,7F04FEB4 ;branch if text inhibitted -00000000 NOP -//7F04FEA0: japanese: append "picked up" text -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -3404A400 ORI A0,R0,A400 ;A0=A400: " picked up." -00102025 OR A0,S0,R0 ;A0=S0: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1): append " picked up." -00022825 OR A1,V0,R0 ;A1=V0: p->" picked up." -//7F04FEB4: append newline -3C012E0A LUI AT,R0,2E0A ;3E0A0000 = .\r -AFA10024 SW AT,0024 (SP) -27A50024 ADDIU A1,SP,0024 -0C0029FF JAL 7000A7FC ;strcat(A0,A1): append ".\r" -00102025 OR A0,S0,R0 ;A0=S0: p->final -//7F04FEC8: return -8FBF001C LW RA,001C (SP) -8FB00018 LW S0,0018 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/rand++ MP weapon revision.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/rand++ MP weapon revision.txt deleted file mode 100644 index f449832..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0E - MP options/rand++ MP weapon revision.txt +++ /dev/null @@ -1,1077 +0,0 @@ -Known editted if: - 28364 is not a pointer - 283D0 is 0 - -This block can allocate up to 100 weapon sets, including random and custom - -!IMPORTANT NOTE! -to re-enable left-handed weapons, do this: -37347 0x10 - -*_* - -Ammo crate: -0x80 2 model override, shared by both values. -1 to ignore -0x82 1 ammo type +1's ammo -0x83 1 ammo type +D's ammo - -handles types 1-1A. Redirect tank to ammo F -should be backward compatible... - -Annoyingly, just realized there's an ammo multiplier. - Well, for now it will only affect solo, but maybe add in a difficulty setting for multiplayer... - -0x283CF 1 minimum set number for MwtGX, to ensure compliance -0x283D0 1 # sets -0x283D1 1 # weapons (set smaller to exclude last members of list) -0x283D2 1 selected set -0x283D3 1 set in use (allows random to always remain selected, see?) - -+_+ - -Lookup scheme: -weapons from 0-0x58 - Valid MP weapons will be entered into a table with MP data - weapon# -1 is reserved for BA - set 0x80 of table# for left-handed pickup (future use) - other special gadgets can be tacked-in later - -weapon set numbers bring up a list of 0x12 chars for weapon codes -basically a mirror of PAL -0x0 1 weapon -0x1 1 ammo type -0x2 1 ammo amount -0x3 1 flags: - 01 weapon pickup - 02 ammo pickups - 80 left-handed capable -0x4 2 weapon model -0x6 2 scale 0100 = 100% - - weapon code F0-FF use entries 0-F - entries refer to MP data table entries - negative table entry numbers indicate left-handed weapons - mask with +3 from object to determine if left-able - yes, this does presume we'll fix the MP doubles glitch one day... -0x0 1 F0 -0x1 1 F1 -0x2 1 F2 -0x3 1 F3 -0x4 1 F4 -0x5 1 F5 -0x6 1 F6 -0x7 1 F7 used by 'Man with the Golden X' scenario -0x8 1 F8 -0x9 1 F9 -0xA 1 FA -0xB 1 FB -0xC 1 FC -0xD 1 FD -0xE 1 FE -0xF 1 FF -0x10 2 text for weapon select menu - -sets reserve space from 0x27B70 - 0x28270 - sets span from 1-100 - 0 is special code indicating random -0x283D0 1 total number of entries (64 max - doesn't count random entry) -0x283D2 1 selected weapon set -0x283D3 1 still indicates current weapon set - -scale moding is easier now! scale * scale / 0x100 = new scale -BA only - scale value indicates armor value, not scale. -weapon codes 80-A2 reserved for 'cheat' pickup items. - ie: pickup gives invisibility or inf. ammo - (if turbo was player-specific, could have a trans-am pickup!) - -(_( - -278E0-28360 80048670 - 800490F0 MP weapon set data - -weapons: -00 Nothing 0100000000000100 -01 Knives 020A0A8300BA0180 -02 Hunt 0200008100BA0180 -03 Knife 030A0A8200D10180 -04 PP7 0401328300BF0300 -05 PP7(s) 0501328300CC0180 -06 DD44 0601328300CD0300 -07 Klobb 0701648300C10180 -08 KF7 0803648300B80180 -09 ZMG 0901648300C30180 -0A D5K 0A01648300BD0100 -0B D5K(s) 0B01648300CE0100 -0C Phant. 0C01648300C20100 -0D AR33 0D03648300BC0100 -0E RC-P90 0E01648300C50100 -0F Shot. 0F041E8300C00100 -10 A.Shot 10041E8300CF0100 -11 Sniper 1103328300D20100 -12 Magnum 120C328300BE0180 -13 G.G. 130D0A8300D00180 -14 S.PP7 1401328300BF0300 -15 G.PP7 15010A8300BF0300 -16 Laser 1600008100BB0180 -17 Watch 1718960300C60080 -18 G.L. 180B068300B90100 -19 R.L. 1906068300D30180 -1A Gren. 1A05050200C40180 -1B Timed 1B09050200C90180 -1C Prox. 1C08050200C80180 -1D Remote 1D07050200C70180 -1E Tazer 1F00000100C60100 -1F Tank 200F050300CA0100 -20 Case 2100000100E20100 -21 Weap.C 2C00000100F20100 -22 Magnet 4C19050300C60100 -23 Flag 58000001014D0100 -24 L.Armor FF00000100740080 -25 Armor FF00000100730100 -26 H.Armor FF00000100730180 - reserved 22 entries for cheat triggering item pickups - -0x27CC0 80048A50 sets 1-100 -since sets are 0x12, and I don't want specialized code for random, - sets block starts with text code for random - actual offset then is from 80048A40, though entry 0 is forced to a random entry number - -original sets: -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A800 Slappers Only deleting... -05 05 05 04 04 04 11 11 85 85 85 84 84 84 91 91 A801 Pistols -02 02 02 02 02 02 02 02 82 82 82 82 82 82 82 82 A80D Throwing Knives -04 04 05 05 06 06 09 09 84 84 85 85 86 86 89 89 A802 Automatics -05 05 11 11 0D 0D 0F 0F 85 85 91 91 8D 8D 8F 8F A803 Power Weapons -05 05 11 11 06 06 10 10 85 85 91 91 86 86 90 90 A804 Sniper Rifles -05 05 06 06 07 07 19 19 85 85 86 86 87 87 19 19 A805 Grenades -03 03 08 08 0C 0C 1C 1C 83 83 88 88 8C 8C 1C 1C A806 Remote Mines -05 05 06 06 07 07 17 17 85 85 86 86 87 87 97 97 A807 Grenade Launchers -03 03 08 08 0C 0C 1A 1A 83 83 88 88 8C 8C 1A 1A A808 Timed Mines -03 03 08 08 0C 0C 1B 1B 83 83 88 88 8C 8C 1B 1B A809 Proximity Mines -05 05 06 06 07 07 18 18 85 85 86 86 87 87 98 98 A80A Rockets -05 05 06 06 07 07 15 15 85 85 86 86 87 87 16 16 A80B Lasers -05 05 06 06 07 07 04 12 85 85 86 86 87 87 84 23 A80C Golden Gun - -new sets! -9C9A random -08 0A 09 05 06 0B 0C 0D 88 8A 89 85 86 8B 8C 24 [A011] Rattle (PaD) -0E 19 0E 1C 18 1B 17 11 8E 19 8E 1C 98 1B 23 25 [A012] Explosives (Zoinkity) -01 81 0E 8E 0B 8B 16 13 02 82 0E 8E 19 19 24 24 A007 Mostly Harmless (Zoinkity) - -)_) - -routines: -7F0C65D0: FB100 0FC31974 advance MP weapon set menu one option; saves updated value -revised to account for variable entry numbers... - fries: AT,V0,T6,T7,T8 -3C028005 LUI V0,8005 -804E9162 *LB T6,9162 (V0) ;T6=cur selection -80419160 *LB AT,9160 (V0) ;AT=max entries -25CE0001 ADDIU T6,T6,0001 ;T7=T6+1: set++ -24210001 ADDIU AT,AT,0001 ;accounts for random entry -01C1001A DIV T6,AT -00007010 MFHI T6 ;T8=set % total -03E00008 JR RA -A04E9162 *SB T6,9162 (V0) ;save revised set number -00000000 NOP -used at: - 7F010EA8 459D8 - -7F0C65F8: FB128 0FC3197E V0= p->current weapon set's text code - fries: T6,T7,T8 -REMOVED IN HACKED ROM -LUI T6,8005 -LW T6,9160 (T6) ;T6=80049160: selected weapon set -LUI T8,8005 -ADDIU T8,T8,90F0 ;T8=800490F0: p->weapon set text code -SLL T7,T6,0x3 ;T7=T6*8: set# -> offset -JR RA -ADDU V0,T7,T8 ;V0=p->current weapon set's text code -used at: - 7F011A74 465A4 - -!REVISED! -7F0C6614: FB144 0FC31985 V0=p->selected weapon set list; T7=weapon set # -redirected to 7F0C65F4: FB124 0FC3197D - fries: T6,T7 -//7F0C6608 FB138 0FC31982 -3C028005 LUI V0,8005 -10000006 BEQ R0,R0,+3 -904F9160 *LBU T7,9160 (V0) //T6=80049162: final weapon set -//7F0C65F4: 0FC3197D selected weapon set -3C028005 LUI V0,8005 -10000003 BEQ R0,R0,+3 -904F9162 *LBU T7,9162 (V0) //T6=80049162: selected weapon set -//7F0C6600: 0FC31980 current weapon set -3C028005 LUI V0,8005 -904F9163 *LBU T7,9163 (V0) //T6=80049163: current weapon set -000F70C0 *SLL T6,T7,0x3 -01CF7021 ADDU T6,T6,T7 -000E7040 SLL T6,T6,0x1 //T6=T7*12 -004E1021 *ADDU V0,V0,T6 //V0= -03E00008 JR RA -24428A40 ADDIU V0,V0,8A40 //V0=80048A40: MP set menu entries -used at: - 373A0 7F002870 08 weapon expansion - 392A4 7F004774 14 ammo crate expansion - -7F0C6630: FB160 0FC3198C save selected set number A0 - LUI AT,8005 - JR RA -A0249162 *SB A0,9162 (AT) -used at: - 4503C - 4506C - 450B4 - 450E4 - 45118 - F50A0 - -7F0C663C: FB16C 0FC3198F V0= selected set number -moved to: - - LUI V0,8005 - JR RA -80428162 LB V0,9162 (V0) -NOP -NOP -used at: - 45020 - 45058 - 450A0 - F4F50 - -7F0C6650: FB178 0FC31994 deleted routine... - called at 70006798, when doing something with memory allocations... - safe to remove the call, concidering it does nothing at all... -JR RA -NOP - - -7F0693F4 9DF24 converts Fx MP weapon code to p->data - accepts: A0=weapon code - returns: V0=p->data, A0=data# (for lefty comparisons) - fries: A0,T6,T7 -AFBFFFE0 SW RA,FFE0 (SP) -0FC31980 JAL 7F0C6600 ;ret V0=p->cur weapon set -3084000F ANDI A0,A0,000F ;A0=weapon code 0-F -00447021 ADDU T6,A0,V0 ;V0=p->weapon code in set -3C028005 LUI V0,8005 -91C40000 LBU A0,0000 (T6) ;A0=data# -308E007F ANDI T6,A0,007F ;T6=unmask left hand flag -000E70C0 SLL T6,T6,0x3 ;T6=#->offset -24428670 ADDIU V0,V0,8670 ;V0=p->first MP data entry -8FBFFFE0 LW RA,FFE0 (SP) -03E00008 JR RA -01C21021 ADDU V0,T6,V0 ;V0=p->MP data entry - NOP - NOP - -random weapon set: -if selected != 0, copy to current -otherwise: - 7000A450 returns V0=random number - fries: AT,A0,A1,A2,V0 - DIV V0 by max entries - MFHI to get % - ADDIU 1 to result to get a set between 1-max - save result - -7F050A08 85538 0FC14282 copy selected set to current set slot; handles random weapon set - fries: AT,A0,A1,A2,V0,T6,T7 -3C0E8005 LUI T6,8005 -91CF9162 LBU T7,9162 (T6) ;T7=selected -15E00006 BNEZ T7,+6 -AFBFFFE0 SW RA,FFE0 (SP) -0C002914 JAL 7000A450 -91CF9160 LBU T7,9160 (T6) ;T8=max -004F001B DIVU V0,T7 -00007810 MFHI T7 ;T8=set % total -25EF0001 ADDIU T7,T7,0001 -8FBFFFE0 LW RA,FFE0 (SP) -03E00008 JR RA -A1CF9163 SB T7,9163 (T6) - - -@_@ - -04 keys... -7F004468 is silly. It does the same thing as 03's expansion but redirects neeedlessly through 7F002A1C -redirect routine to STDOBJ, then fry both data segments - - -08 weapon hack! -use 7F0693F4: A0=weapon code, returning V0=p->weapon data + A0=# for left comparisons - mask data# with +3 in weapon data to determine if lefty is possible - ANDI data,0x80; AND lefty,data,wep; BNEZL +1, set lefty byte in object -if weapon = -1, this is a BA pickup - change object type to 15 - use scale as BA pickup percentage; scale<<8 -flag is allowable as a pickup type -So ammo boxes don't get weird or broken, they're going to work the same as always. - save p->weapon data to Ammo's buffer (80069540), - rewrite 08 weapon handler to *NOT* write -1 to this. 0 should be default, -Ammo clips look up ammo based on Fx value? - -To be certain the Ammo box thing is always valid: -7F004E10 39940 -3C018007 LUI AT,8007 -AC205D00 SW R0,5D00 (AT) -AC209540 *SW R0,9540 (AT) - - -7F004434: 38F64 jump that executes specific 08 object expansion -8FAF0278 LW T7,0278 (SP) //the infamous 'better equal 1 if you want objects'... -11E001B0 BEQ T7,R0,7F004AFC -8E4E000C LW T6,000C (S2) //upper 32 bitflags -02A02025 OR A0,S5,R0 -01D4C024 AND T8,T6,S4 -170001AC BNEZ T8,7F004AFC //skip if killflags present -02402825 OR A1,S2,R0 //A1=S2=address of object -0FC009CE JAL 7F002738 //specific parsing code for weapons -02603025 OR A2,S3,R0 -//7F004458: -100001A8 BEQ R0,R0,7F004AFC -00000000 NOP -//7F004460: -... ;blank through 7F004460 to 7F00449C -//7F00449C - -7F002738: 37268 08 weapon handler - accepts: -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -AFA40028 SW A0,0028 (SP) ;SP+28= ? -AFA5002C SW A1,002C (SP) ;SP+2C=p->object -AFA60030 SW A2,0030 (SP) ;SP+30= ? -8CAE0008 LW T6,0008 (A1) //T6=high bitfield -00A03825 OR A3,A1,R0 //A3=A1=object data address -31CF4000 ANDI T7,T6,4000 -51E00026 *BEQL T7,R0,7F0027F4 //branch if not assigned to a guard -24050001 ADDIU A1,R0,0001 //A1=1 - -//7F002760: weapon attached to guard -0FC08BF2 JAL 7F022FC8 ;V0= p->guard A0 if present -84A40006 LH A0,0006 (A1) //A0=preset, or in this case guard ID -8FA7002C LW A3,002C (SP) //A3=object data address -10400064 *BEQ V0,R0,7F0028E8 ;branch if guard invalid -AFA2001C SW V0,001C (SP) ;SP+1C=p->GUARDdata -8C580018 LW T8,0018 (V0) ;T8=p->guard's position data -13000061 *BEQ T8,R0,7F0028E8 ;branch if NULL pointer -8C59001C LW T9,001C (V0) ;T9=p->guard's model data handle -1320005F *BEQ T9,R0,7F0028E8 ;branch if NULL pointer -2404001C ADDIU A0,R0,001C //A0=1C -0FC249EF JAL 7F0927BC -AFA7002C SW A3,002C (SP) -//7F002798: error handler for stupid model issues -1040000E *BEQ V0,R0,7F0027E0 -8FA7002C LW A3,002C (SP) -80E80080 LB T0,0080 (A3) ;T0=weapon type -2509FFFE ADDIU T1,T0,FFFE ;T1=weapons 2-1F -2D210016 *SLTIU AT,T1,0016 -14200003 *BNEZ AT,R0,7F0027C8 ;branch if a gadget that falls outside range -2529FFE5 *ADDIU T1,T1,FFE5 ;T1-=0x1B -2D210003 *SLTIU AT,T1,0003 -10200006 *BEQ AT,R0,7F0027E0 ;branch if a gadget that falls outside range - *NOP - *NOP - NOP -//7F0027C8: set weapon as a stock grenade - all but RLS GL gren, prox, timed -240A0019 ADDIU T2,R0,0019 -240B00D3 ADDIU T3,R0,00D3 -240C0100 ADDIU T4,R0,0100 -A0EA0080 SB T2,0080 (A3) //set weapon as grenade -A4EB0004 SH T3,0004 (A3) //set model as grenade -A4EC0000 SH T4,0000 (A3) //set scale=100% -//7F0027E0: -0FC015C4 JAL 7F005710 -80E40080 LB A0,0080 (A3) //A0=weapon type -8FA4002C LW A0,002C (SP) //A0=object data address -0FC1480C JAL 7F052030 -8FA5001C LW A1,001C (SP) -1000003D *BEQ R0,R0,7F0028E8 -00000000 *NOP - -//7F0027F4: 0x37320-E MP expansion handling - REVISED so sets work in solo as well ;*) -;0FC26919 JAL 7F09A464 //RETURNS V0=# players -;AFA50018 SW A1,0018 (SP) ;TRUE = load weapon by default -;3C018007 LUI AT,8007 -;2442FFFF *ADDIU V0,V0,FFFF //MP>0 -;1C400025 *BGTZ V0,7F0028A0 //skip MP weapon expansion if solo -;AC209540 *SW R0,9540 (AT) //0->80069540 ammo box MP type register -;90E40080 *LBU A0,0080 (A3) //A0=type -;28810059 SLTI AT,A0,0059 //tests if weapon is valid (<59) -;14200021 BNEZ AT,7F0028A0 ;if a normal type, jump to flag test after MP stuff -;00000000 *NOP -AFA50018 SW A1,0018 (SP) ;TRUE = load weapon by default -3C188007 LUI T8,8007 -AF009540 *SW R0,9540 (T8) //0->80069540 ammo box MP type register -90E40080 *LBU A0,0080 (A3) //A0=type -28810059 SLTI AT,A0,0059 //tests if weapon is valid (<59) -14200024 BNEZ AT,7F002898 ;if a normal type, jump to flag test after MP stuff -90E10008 *LBU AT,0008 (A3) ;AT=register for left:right weapon -//7F00280C: this only applies to MP weapons -figure out type -0FC1A4FD JAL 7F0693F4 ;returns V0=p->MP weapon data -34210010 *ORI AT,AT,0010 ;premptively toggle left-hand flag TO DISABLE LEFT HANDS, SET THIS TO 0 -//7F002814: oops! forgot to determine lefties! -30850080 *ANDI A1,A0,0080 ;data# & 80 indicates if left or right -90440003 *LBU A0,0003 (V0) ;A0=MPdata L-capable flag -00852824 *AND A1,A0,A1 ;If both are set, southpaw -54A00001 *BNEZL A1,+1 -A0E10008 *SB AT,0008 (A3) ;saves left-handed register -//7F002828: 3735C if inf. ammo activated, force no boxes and weapon pickups! -930596AB *LBU A1,96AB (T8) ;INF AMMO FLAG -14A00005 *BNEZ A1,7F002844 -//7F002830: 37364 test the weapon pickup flag -30850001 *ANDI A1,A0,0001 -AFA50018 *SW A1,0018 (SP) -//7F002838: 3736C test the ammo pickup flag -30850002 *ANDI A1,A0,0002 -54A00001 *BNEZL A1,+1 -AF029540 SW V0,9540 (T8) //MP weapon data pointer->80069540 used by ammo box to determine MP ammo for weapon -//7F002828: 3735C if MwtGX, force -boxes, +pickups if only boxes -;30810002 *ANDI AT,A0,0002 -;1020000B *BEQ AT,R0,+1 ;branch if -boxes -;00052840 SLL A1,A1,0x1 ;sets box and wep flags into same bit -;10250008 BEQ AT,A1,7F002840 ;if both set, it isn't a pickup only type -;90E10080 LBU AT,0080 (A3) ;A1=type -;240500F7 ADDIU A1,R0,00F7 -;14250005 BNE AT,A1,7F002840 ;branch if not scenario weapon -;3C018003 LUI AT,8003 -;8C21B540 LW AT,B540 (AT) ;AT=8002B540: scenario -;24050003 ADDIU A1,R0,0003 -;50250002 BEQL AT,A1,+2 ;if MwtGX, force pickup only if no box -;AFA50018 *SW A1,0018 (SP) ;that's nonzero, so it should work -;AF029540 SW V0,9540 (T8) //MP weapon data pointer->80069540 used by ammo box to determine MP ammo for weapon -//7F002844: mod the model -94450004 *LHU A1,0004 (V0) //T9=model type -A4E50004 *SH A1,0004 (A3) //change model type -//7F00284C: weapon type - use BA routine if = -1 -80450000 *LB A1,0000 (V0) //T8=weapon type -2404FFFF *ADDIU A0,R0,FFFF -5485000A *BNEL A0,A1,+A -A0E50080 *SB A1,0080 (A3) //change object's weapon type to literal -//7F00285C: alter weapon into Body Armor -AF009540 *SW R0,9540 (T8) ;make certain no boxes will appear! -24010015 *ADDIU AT,R0,0015 -A0E10003 *SB AT,0003 (A3) ;set type to 15 (BA) -94410006 *LHU AT,0006 (V0) -00010A00 *SLL AT,AT,0x8 -ACE10080 *SW AT,0080 (A3) ;change 2-byte scale to 4-byte armor percentage -8FBF0014 LW RA,0014 (SP) -1000001A *BEQ R0,R0,7F0028EC ;return with a jump into the body armor handler -27FF0178 *ADDIU RA,RA,0178 ;difference between return and BA no armor tests -//7F002880: scale modifier -944F0006 *LHU T7,0006 (V0) ;T7=scale mod -94E50000 *LHU A1,0000 (A3) ;T1=cur scale -00AF0019 *MULTU A1,T7 -00002812 *MFLO A1 -00052A02 *SRL A1,A1,0x8 ;T1=(cur*mod)/0x100 -A4E50000 SH A1,0000 (A3) //scale->header - -//7F002898: 373CC Solo + Multi - determine if item is a flag! -90E40080 *LBU A0,0080 (A3) //A0=type -24010058 ADDIU AT,R0,0058 -14810005 *BNE A0,AT,+5 //branch if not flag -24010002 ADDIU AT,R0,0002 ;AT=scenario code for flag tag -//7F0028A8: Flag Handler - this may change when scenarios are altered... -0FC051D6 JAL 7F014758 //returns V0=8002B540=scenario -00000000 *NOP -54410001 *BNEL V0,AT,+1 ;if the scenario isn't set, fry the pickup -AFA00018 *SW R0,0018 (SP) ;come to think of it, should probably fry ammo as well... - -//7F0028B8: 373E8 generic weapon expansion - SOLO and MP -10800009 *BEQ A0,R0,7F0028E8 //skip if type 0 -8FA50018 LW A1,0018 (SP) -10A00007 *BEQ A1,R0,7F0028E8 //skip if no pickup -00000000 *NOP -0FC015C4 JAL 7F005710 //sets throwable models. returns V0=1 loaded model -00000000 *NOP -8FA40028 LW A0,0028 (SP) -8FA5002C LW A1,002C (SP) //A1=object offset -0FC00767 JAL 7F001D9C //expand object -8FA60030 LW A2,0030 (SP) - -//7F0028E0: 37410 joint return function -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP - -@_@ - -Ammo boxes and ammo attributement -solo and multi both will use the buffer and model override enabled -if !=0, assumes there's ammo to dump into the thing - then do the normal test for stuff, and quit out. -Also, if ammo on type found, test its model. - If model not -1, replace the model code of the object! - -7F004760: 39290 primary expansion routine -13C000E6 BEQ S8,R0,7F004AFC //generic objects appear flag test -8E44000C *LW A0,000C (S2) //second 32bit flagfield -00942024 *AND A0,A0,S4 -148000E3 *BNEZ A0,7F004AFC //test if killflags present -//7F004770: MP ammo attribument - test if any boxes -3C0E8007 LUI T6,8007 -8DC39540 LW V1,9540 (T6) //T6=80069540 last MP weapon# or 0 -;1060000B *BEQ V1,R0,7F0047A8 -1060000C *BEQ V1,R0,7F0047A8 -24100000 ADDIU S0,R0,0000 //ammo boxes DO NOT appear by default - -//7F004780: MP ammo attribument - test if any boxes -;strike this - weapons already test for this! -;90640003 *LBU A0,0003 (V1) //A0=ammo type -;30840002 *ANDI A0,A0,0002 -;10800007 *BEQ A0,R0,7F0047A8 -//7F00478C: MP ammo attribument -90640001 *LBU A0,0001 (V1) //A0=ammo type -;inserted! test if < 1B (1-1A) -2C82001B *SLTIU V0,A0,001B ;V0=1 if A0 1-1A - writable -10400008 *BEQ V0,R0,+8 ;do not write ammo if it can't fit in object! -2C82000E *SLTIU V0,A0,000E ;V0=1 if A0 1-D -50400001 *BEQL V0,R0,+1 -2484FFF3 *ADDIU A0,A0,FFF3 ;if > D, subtract D -00042080 *SLL A0,A0,0x2 ;A0*=4 -00442021 *ADDU A0,V0,A0 ;A0=offset +1 if 1-D -02442021 *ADDU A0,S2,A0 ;A0=p->obj+offset to data -90620002 *LBU V0,0002 (V1) ;V0=ammo type -A082007D *SB V0,007D (A0) ;ammo -> slot - -//7F0047A8: set up a loop through the ammo; assumes S6=-1 -2644007C *ADDIU A0,S2,007C ;A0=object's ammo offset -264500B0 *ADDIU A1,S2,00B0 ;A1=termination point! -//7F0047B0: loop: read ammo. If none, continue. If some, test if model then break -10850007 *BEQ A0,A1,7F0047D0 -24840004 *ADDIU A0,A0,0004 -94820002 *LHU V0,0002 (A0) ;V0=2 ammo registers -1040FFFC BEQ V0,R0,-4 -00508021 *ADDU S0,V0,S0 ;S0+=ammo, to determine if it should appear -84820000 *LH V0,0000 (A0) ;V0=2 ammo registers -04430001 *BGEZL V0,+1 -A6420004 *SH V0,0004 (S2) -//7F0047D0: test if any ammo actually assigned. Only load model if so -120000C9 *BEQ S0,R0,7F004AFC -02A02025 OR A0,S5,R0 -02402825 OR A1,S2,R0 -0FC00767 JAL 7F001D9C //expand object -02603025 OR A2,S3,R0 -100000C4 BEQ R0,R0,7F004AFC -00000000 *NOP -//7F0047EC: -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP - -|_| - -Ammo Clips, same as the boxes! -redirecting to 7F004468! 38F98 -8FA80278 LW T0,0278 (SP) -110001A3 BEQ T0,R0,7F004AFC -02A02025 OR A0,S5,R0 -8E49000C LW T1,000C (S2) -0134C824 AND T9,T1,S4 -1720019F BNEZ T9,7F004AFC -02402825 OR A1,S2,R0 -0FC00A87 JAL 7F002A1C -02603025 OR A2,S3,R0 -0FC00767 *JAL 7F001D9C -00000000 NOP -10000199 BEQ R0,R0,7F004AFC -00000000 NOP - -7F002A1C: 3754C revised to set clip ammo -3C028007 *LUI V0,8007 -8C429540 *LW V0,9540 (V0) -50400002 *BEQL V0,R0,+2 ;well, doesn't need to be likely, but cleaner code this way -92420083 *LBU V0,0083 (S2) -90420001 *LBU V0,0001 (V0) -03E00008 JR RA -A2420083 *SB V0,0083 (S2) -00000000 *NOP - - -^_^ - -body armor expansion update in seperate doc - -^_^ - -Ammo box reading routine update, to attribute ammo properly to players! -//7F050980: 854B0 ammo box collectability -24010014 ADDIU AT,R0,0014 -1441002C BNE V0,AT,7F050A38 ;if object isn't an ammo box, try BA instead -8FA90088 LW T1,0088 (SP) -//7F05098C: test if the thing is even collectable... -8D2A0004 LW T2,0004 (T1) ;T2=p->obj.data (T1=obj.pos data in 8006) -240B0001 ADDIU T3,R0,0001 -AFAB006C SW T3,006C (SP) ;SP+6C= 1 -00A02025 OR A0,A1,R0 ;A0=A1: p->obj.data -0FC0FFF0 JAL 7F03FFC0 ;ret V0!=0 if object was destroyed -AFAA0070 SW T2,0070 (SP) ;SP+70= p->obj.data -//7F0509A4: -14400016 *BNEZ V0,7F050A00 ;branch if destroyed -8FA30070 LW V1,0070 (SP) ;V1=p->obj.data -//7F0509AC: 854DC initialize loop if object valid -00002025 *OR A0,R0,R0 ;V0=0 current ammo type -1 -//7F0509B0: 854E0 correct for second line of stuff... -24840001 *ADDIU A0,A0,0001 ;A1=V0+1 next type -2401000E *ADDIU AT,R0,000E ;AT=E this is when it loops back on itself -50810001 *BEQL A0,AT,+1 ;redirect ammo type 2 to 1 -2463FFCB *ADDIU V1,V1,FFCB ;subtract -0x35 from thing to get second set of ammo types -//7F0509C0: 854F0 read ammo type and compare to maximum for that type -906C0083 *LBU T4,0083 (V1) ;T4=ammo for type -11800008 *BEQ T4,R0,7F0509E8 ;if no ammo (or stupid ammo), loopus -00000000 *NOP -0FC1A490 JAL 7F069240 ;ret V0=player's total ammo of type A0; fries T6,T7,T8 -00000000 *NOP -0FC1A4B5 JAL 7F0692D4 ;ret V0=max ammo for type A0; fries T6 -00023025 *OR A2,V0,R0 ;A2= stock -00C2082A SLT AT,A2,V0 ;AT=TRUE if stocknext ammo type in obj. -//7F0509F4: test collectability -8FAD006C LW T5,006C (SP) ;T5=0 if collectable, 1 if not -11A0003E BEQ T5,R0,7F050AF0 ;branch if collectable -00000000 *NOP -//7F050A00: 85530 -100000BB BEQ R0,R0,7F050D20 ;quit otherwise -00001025 OR V0,R0,R0 ;V0=0 -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -//7F050A38: 85568 body armor collectability -24010015 ADDIU AT,R0,0015 -1441002C BNE V0,AT,7F050AF0 -8FAE0088 LW T6,0088 (SP) - ... - -$_$ - -otherhalf of ammo crate work - forcing it to spew forth more types - -7F050338: 84E68 collect ammo crate -00002025 *OR A0,R0,R0 ;cur=0 -00608025 OR S0,V1,R0 ;S0=V1: p->obj.data -//7F050340: 84E70 correct for rollaround -24840001 *ADDIU A0,A0,0001 ;V1=cur+1 type -2401000E *ADDIU AT,R0,000E ;rollaround at type E -50810001 *BEQL A0,AT,+1 ;if they match, subtract the buffer difference -2610FFCB *ADDIU S0,S0,FFCB ;start back over at 0x82 -//7F050350: 84E80 retrieve ammo total for current type -0FC26919 JAL 7F09A464 ;ret V0=# players; fries V0,V1,T6,T7,T8,T9 -92050083 *LBU A1,0083 (S0) ;A1=ammo from object -24010001 ADDIU AT,R0,0001 -14410008 *BNE V0,AT,7F050380 ;branch if multi -AFA40020 *SW A0,0020 (SP) ;SP+4C= ammo type -//7F050364: 84E94 solo only: ammo multiplier -44852000 MTC1 A1,F4 ;F4=ammo -3C018003 LUI AT,8003 -C4280B28 LWC1 F8,0B28 (AT) ;F8=80030B28: 1.0 -468021A0 CVT.S.W F6,F4 -46083282 MUL.S F10,F6,F8 -4600540D TRUNC.W.S F16,F10 -44058000 MFC1 A1,F16 ;A1=new ammo total -//7F050380: 84EB0 attribute the ammo! -00003025 OR A2,R0,R0 ;A2=0 no sound effect on ammo collection -0FC13E9A JAL 7F04FA68 ;add the ammo to player's inventory -8FA70074 LW A3,0074 (SP) ;A3=text display attribute (1 usually) -8FA40020 LW A0,0020 (SP) ;V0=actual type -2401001A ADDIU AT,R0,001A ;AT=1A ammo boxes now hold 1-1A ammo -1481FFEA *BNE A0,AT,7F050340 ;branch if more types -26100004 ADDIU S0,S0,0004 ;S0+=4 next ammo slot -//7F05039C: 84ECC play collection sound effect -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) ;A0=80063720: buffer -240500EA ADDIU A1,R0,00EA ;A1=SE 0EA -0C002382 JAL 70008E08 ;play sound 0EA -00003025 OR A2,R0,R0 ;A2=0 -100000B0 BEQ R0,R0,7F050674 ;all done -24030001 ADDIU V1,R0,0001 ;V1=1 -//7F0503B8 84EE8 -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP - -(_) - -A smart person would have linked something in to actually copy the random weapon set code... -0FC14282 copies set number to cur and handles random weapon sets -fries: AT,A0,A1,A2,V0,T6,T7 - -start from MP menu = 7F010D7C -7F01AE6C handles jump to stage - AE7C set return from demos (legal screen) - AEA4 set return from MP (MP options) - AEC8 set return from cuba (actors) - AEE4 set return from solo (mission failed) - -best bet would be to insert it into the stage initializer - just do it all the time -granted, it is used more than once during stage initialization, but that won't affect this. Not one bit - -DIMINISHING THIS MORE THAN NECESSARY TO LEAVE ROOM FOR FUTURE INSERTIONS - -7F001750: 36280 stage multiplier initialization -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC00656 JAL 7F001958 -00000000 NOP -0FC006C2 JAL 7F001B08 -00000000 NOP -//7F001768: 36298 -0FC14282 *JAL 7F050A08 ;MP selected set to cur + set random -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -3C018003 LUI AT,8003 -24250034 ADDIU A1,AT,0034 -AC200AC0 SW R0,0AC0 (AT) -1425FFFE BNE AT,A1,-2 -24210004 ADDIU AT,AT,0004 -24050001 ADDIU A1,R0,0001 -AC250AB0 SW A1,0AB0 (AT) ;1->80030AE8 -3C028007 LUI V0,8007 -24432E70 *ADDIU V1,V0,2E70 -24421E80 ADDIU V0,V0,1E80 -//7F0017EC: 3631C -... - -!_! - -ammo on object collection -replacing TLB jumps with a table -80053060 - 800530D0 0x322D0 - 32340 - -remaps ammo table just after function at 7F05FCC0 - -REWRITE REQUIRES REMAPPING 7F04FCF8 -> 7F04FC4C 0FC13F3E -> 0FC13F13 - -7F04FC3C 8476C V0= amount of ammo received from 07 clip object - accepts: A0=p->obj.data -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF0014 SW RA,0014 (SP) -10000009 *BEQ R0,R0,7F04FC6C -90820083 *LBU V0,0083 (A0) ;T6=ammo type -//7F04FC4C: the old 7F04FCF8 - 08 objects -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF0014 SW RA,0014 (SP) -8C820008 *LW V0,0008 (A0) ;T8=object bitflags upper word -00021040 *SLL V0,V0,0x1 -04420015 *BLTZL V0,7F04FCB4 ;branch if 0x40000000 not set -00001025 OR V0,R0,R0 -0FC1A50B JAL 7F06942C ;ret V0= ammo type for weapon A0 -80840080 LB A0,0080 (A0) ;A0= weapon type -//7F04FC6C: shared routine -2C41001E *SLTIU AT,V0,001E -50200010 *BEQL AT,R0,7F04FCB4 -00001025 *OR V0,R0,R0 -3C018005 LUI AT,7F05 -00220821 *ADDU AT,AT,V0 -9022305F *LBU V0,FCBF (AT) ;remaps type 1 to 7F04FCC0 -//7F04FC84: skip multipliers if 0-1 ammo -24010001 *ADDIU AT,R0,0001 -1022000A BEQ AT,V0,7F04FCB4 ;quit if only 0-1 ammo present -//7F04FC8C: test multiplayer -3C038003 *LUI V1,8003 -8063A8F3 *LB V1,V1,A8F3 -10610007 BEQ V1,AT,7F04FCB4 ;branch if multiplayer -//7F04FC98: solo ammo multiplier -3C018003 LUI AT,8003 -44822000 MTC1 V0,F4 -C4280B28 LWC1 F8,0B28 (AT) ;F8=80030B28: ammo multiplier -468021A0 CVT.S.W F6,F4 ;F6= (float) ammo -46083282 MUL.S F10,F6,F8 ;F10= ammo * mult -4600540D TRUNC.W.S F16,F10 -44028000 MFC1 V0,F16 ;V1=new ammo -//7F04FCB4: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 -//7F04FC70: type 1 -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP - -7F04FCF8 V0= amount of ammo received from 08 item object - accepts: A0=p->obj.data -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF0014 SW RA,0014 (SP) -8C820008 *LW V0,0008 (A0) ;T8=object bitflags upper word -00021040 *SLL V0,V0,0x1 -044200?? *BLTZL V0,+end ;branch if 0x40000000 not set -00001025 OR V0,R0,R0 -0FC1A50B JAL 7F06942C ;ret V0= ammo type for weapon A0 -80840080 LW A0,0080 (A0) ;A0= weapon type -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -00000000 *NOP -//7F04FD34: jump to specific ammo routine -10200015 BEQ AT,R0,7F04FD8C ;skip if aboe type E -00084080 SLL T0,T0,0x2 -3C018005 LUI AT,8005 -00280821 ADDU AT,AT,T0 ;AT=type -> offest -8C283098 LW T0,3098 (AT) ;T0=8005308+offset: TLB jump for each type -01000008 JR T0 -00000000 NOP -//7F04FD50: type 1 -1000000E BEQ R0,R0,7F04FD8C -2403000A ADDIU V1,R0,000A -//7F04FD58: type 2 -1000000C BEQ R0,R0,7F04FD8C -2403000A ADDIU V1,R0,000A -//7F04FD60: type 3 -1000000A BEQ R0,R0,7F04FD8C -2403000A ADDIU V1,R0,000A -//7F04FD68: type 4 -10000008 BEQ R0,R0,7F04FD8C -24030005 ADDIU V1,R0,0005 -//7F04FD70: type C -10000006 BEQ R0,R0,7F04FD8C -24030005 ADDIU V1,R0,0005 -//7F04FD78: type D -10000004 BEQ R0,R0,7F04FD8C -24030003 ADDIU V1,R0,0003 -//7F04FD80: type E -10000002 BEQ R0,R0,7F04FD8C -24030004 ADDIU V1,R0,0004 -//7F04FD88: type B -24030003 ADDIU V1,R0,0003 -//7F04FD8C: test amount of ammo -28610002 SLTI AT,V1,0002 -5420000F BNEL AT,R0,7F04FDD0 ;quit if 0 or 1 ammo received -00601025 OR V0,V1,R0 -//7F04FD98: determine if multiplayer -0FC26919 JAL 7F09A464 ;ret V0=# players -AFA30018 SW V1,0018 (SP) ;SP+18= ammo -24010001 ADDIU AT,R0,0001 -14410009 BNE V0,AT,7F04FDCC ;branch if multi -8FA30018 LW V1,0018 (SP) ;V1= ammo -//7F04FDAC: solo ammo multiplier -44832000 MTC1 V1,F4 -3C018003 LUI AT,8003 -C4280B28 LWC1 F8,0B28 (AT) ;F8=80030B28: ammo multiplier -468021A0 CVT.S.W F6,F4 ;F6= (float) ammo -46083282 MUL.S F10,F6,F8 ;F10= ammo * mult -4600540D TRUNC.W.S F16,F10 -44038000 MFC1 V1,F16 ;V1=new ammo -00000000 NOP -//7F04FDCC: return -00601025 OR V0,V1,R0 ;V0=V1: ammo -8FBF0014 LW RA,0014 (SP) -27BD0020 ADDIU SP,SP,0020 -03E00008 JR RA -00000000 NOP -//7F04FDE0: 84910 - -[_] The amazing, the stunning, "Casino Royale"! - -Completely random set generator -generates 8 weapons, then sets doubles in upper set -rand % cap, +1 -This produces values from 1-cap, which should all be valid numbers - nothing slot - -place as set 1 80048A52; inject in setup thingy, just after random - -7F082BD0 B7700 0FC20AF4 generates random weapons for set - manually rigged to overwrite set 1 - fries: AT,A0,A1,A2,V0,T6,T7,T8 -AFBFFFE0 SW RA,FFE0 (SP) -3C0E8005 LUI T6,8005 -25D80007 ADDIU T8,0007 (T6) ;endpoint -91CF9161 LBU T7,9161 (T6) ;T7=selected -0C002914 JAL 7000A450 ;fries AT,A0,A1,A2,V0 -25CE0001 ADDIU T6,T6,0001 ;next slot -004F001B DIVU V0,T7 -00001010 MFHI V0 ;T8=set % total -24420001 ADDIU V0,V0,0001 ;gets knives - tank -A1C28A51 SB V0,8A51 (T6) -34420080 ORI V0,V0,0080 ;double if possible -55D8FFF8 BNEL T6,T8,-8 -A1C28A59 SB V0,8A59 (T6) -24020025 ADDIU V0,R0,0025 ;V0=BA -8FBFFFE0 LW RA,FFE0 (SP) -03E00008 JR RA -A1C28A59 SB V0,8A59 (T6) - -recoded in MwtGX - -~_~ - - -#_# miscellaneous other mods integrated in patch - -set tank cannon to use type 2 -should now allow type 2 at ammo collection - -propobjE.txt -should display "Picked up a cannon" -A434 "a flare pistol." -> "a tazer." -A438 "a piton gun." -> "a cannon." -insert one for "a gadget." used for watch laser and attract - - -+.+ - -revised to use a table of indices to short values -80052FEC: 1 nibble each remapped to 7F04F7DC -01411442 22311111 21112212 55060100 - -80052FFC: remapped to 7F04F7EC -00EA firearm -00EB mine -00E9 knife -002D !new! rockets and grenades -0064 !new! watch laser and magnet pickup -00F4 !new! film - - -7F04F788 0x842B8 plays sound of ammo type collection - accepts: A0=ammo type -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -00047042 *SRL T6,A0,0x1 ;T6=type/2 -30810001 *ANDI AT,A0,0001 ;AT=TRUE if no need to push -3C048005 *LUI A0,8005 -008E7021 *ADDU T6,A0,T6 -91CE2FEC *LBU T6,2FEC (T6) ;byte containing the nibble -50200001 *BEQL AT,R0,+1 ;if first nibble, move it -000E7102 *SRL T6,T6,0x4 ;A0=upper nibble -31CE000F *ANDI T6,T6,000F ;one nibble only -11C00007 *BEQ T6,R0,+return ;branch if no sound -000E7040 *SLL T6,T6,0x1 ;T6*2=offset in sound table -008E2021 *ADDU A0,A0,T6 -94852FFA *LHU A1,2FFA (A0) ;A1=sound -//7F04F7BC: 0x842E8 play sound -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) -0C002382 JAL 70008E08 -00003025 OR A2,R0,R0 -//7F04F7CC: 0x842F8 return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 -//7F04F7D8: -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -//7F04F808: 0x84338 ... - - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0F - character select/mp character menu reduction.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0F - character select/mp character menu reduction.txt deleted file mode 100644 index 6d8c98a..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 0F - character select/mp character menu reduction.txt +++ /dev/null @@ -1,336 +0,0 @@ -No longer need perspective or (probably) yelps -New format: 0x8 each -0x0 2 textID for label -0x2 1 -1 if last entry -0x3 1 pic -0x4 2 body -0x6 2 head - -+-+-+-+-+ - -//7F0102CC 44DFC recover body - SLL T6,V1,0x2 - SUBU T6,T6,V1 -000E7040 *SLL T6,T6,0x1 - ADDU V0,V0,T6 -8042B19D* LB V0,B19D (V0) - BGEZ V0,7F0102F4 - SW RA,0040 (SP) - LW A0,0044 (SP) - JAL 7F023660 - LW RA,0040 (SP) -//7F0102F4: - JR RA - NOP - -+-+ - -7F01035C 44E8C: hack of MP menu body call -00047080 SLL T6,A0,0x2 -3C028003 LUI V0,8003 -004E1821 ADDU V1,V0,T6 -8C63B524 LW V1,B524 (V1) V1=selection -00037080 SLL T6,V1,0x2 -01C37023 SUBU T6,T6,V1 -000E7040 *SLL T6,T6,0x1 -004E1021 ADDU V0,V0,T6 -8342B19C *LB V0,B19C (V0) V0=body -04410003 BGEZ V0,+3 -AFBF0044 SW RA,0044 (SP) (body is stored here after J, so it works) -0FC08D88 JAL truly-random head routine from above -8FBF0044 LW RA,0044 (SP) (test! Should directly jump back from subroutine) -//7F010388: valid selection -03E00008 JR RA -00000000 NOP - -+-+ - -7F0103D0 recall perspective from a specfic character selection -SLL T6,A0,0x2 -LUI V0,8003 -ADDU V0,V0,T6 -LW V0,B524 (V0) V0=player's MPchar setting -SLL T7,A0,0x2 -LUI AT,8003 -BGEZ V0,7F010408 -SLL T8,V0,0x2 -SUBU T7,T7,A0 -SLL T7,T7,0x2 T7=player# *0xC, used as default for MPchar -LUI AT,8003 -ADDU AT,AT,T7 -JR RA -LWC1 F0,B1A0 (AT) -//7F010408: when a character selected (not default -1) -SUBU T8,T8,V0 -SLL T8,T8,0x2 T8=MPchar# * 0xC -ADDU AT,AT,T8 -LWC1 F0,B1A0 (AT) F0=perspective from the mpcharacter menu -JR RA -NOP - -+-+-+ - -7F011C3C 4676C MP character menu construction -LUI AT,8003 -SW R0,A8D0 (AT) 0->8002A8D0: ??? -LUI AT,8003 -SW R0,A8D4 (AT) 0->8002A8D4: ??? -LUI AT,8003 -ADDIU SP,SP,FFD0 -SW R0,A8D8 (AT) 0->8002A8D8: ??? -LUI AT,8003 -SW R0,A8E4 (AT) 0->8002A8E4: ??? -LUI AT,8003 -SW S4,0028 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW R0,A8E0 (AT) 0->8002A8E0: ??? -SW S3,0024 (SP) -LUI AT,8003 -LUI S1,8003 -LUI S2,8009 -LUI S4,8003 -SW RA,002C (SP) -SW S0,0018 (SP) -SW R0,A8DC (AT) 0->8002A8DC: ??? -ADDIU S4,S4,B498 S4=8002B498: end MPchar select; start handicap options -ADDIU S2,S2,D130 S2=8008D130: pointer to mp character section of main img table -ADDIU S1,S1,B198 S1=8002B198: start of MPchar select -ADDIU S3,R0,000C S3=size of image declaration -LBU V1,0003 (S1) V1=portrait used -//7F011CA8: -LW T7,0000 (S2) T7=list of MP character select image declarations -SLL T6,V1,0x2 portrait *4, since each uses 4 images -MULTU T6,S3 -MFLO S0 -ADDU V0,T7,S0 V0=offset to the four used for this portrait -LW A2,0000 (V0) A2=1st imgID# -SLTIU AT,A2,0BB8 -BEQ AT,R0,7F011CDC branch if not under arbitrary image cap -OR A0,A2,R0 -JAL 7F0CBEE8 load it in! -OR A1,R0,R0 -LW T8,0000 (S2) -ADDU V0,T8,S0 -//7F011CDC: -LW V1,000C (V0) V1=2nd imgID# -SLTIU AT,V1,0BB8 -BEQ AT,R0,7F011CFC branch if not under arbitrary limit -OR A0,V1,R0 -JAL 7F0CBEE8 -OR A1,R0,R0 -LW T9,0000 (S2) -ADDU V0,T9,S0 -//7F011CFC: -LW V1,0018 (V0) V1=3rd imgID# -SLTIU AT,V1,0BB8 -BEQ AT,R0,7F011D1C branch if not under arbitrary limit -OR A0,V1,R0 -JAL 7F0CBEE8 -OR A1,R0,R0 -LW T0,0000 (S2) -ADDU V0,T0,S0 -//7F011D1C: -LW V1,0024 (V0) V1=4th imgID# -SLTIU AT,V1,0BB8 -BEQ AT,R0,7F011D34 branch if not under arbitrary limit -OR A0,V1,R0 -JAL 7F0CBEE8 -OR A1,R0,R0 -//7F011D34: loopus -*ADDIU S1,S1,000C next MP character entry! -*SLTU AT,S1,S4 -*BNEL AT,R0,7F011CA8 -*LBU V1,0003 (S1) V1=portrait -//7F011D44: SET NUMBER OF AVAILABLE MP CHARACTERS -LUI S1,8003 -ADDIU S1,S1,B194 -*LW T1,0000 (S1) T1=8002B194: #available MP characters -ADDIU AT,R0,0040 -LUI A0,8003 -*BEQ T1,AT,7F011DE8 skip this nonsense if already set to max -ADDIU A1,R0,0011 A1=stage# (cradle) -LW A0,A8E8 (A0) A0=8002A8E8: folder# -JAL 7F01E2C0 V0=3 if stage 11 complete -OR A2,R0,R0 A2=minimum difficulty -ADDIU AT,R0,0003 -BNE V0,AT,7F011D84 question is, how can this ever be equal? -ADDIU T3,R0,0009 -ADDIU T2,R0,0040 -BEQ R0,R0,7F011DE8 -*SW T2,0000 (S1) save 0x40 to #available MPchars -//7F011D84: -LUI S2,8003 -LUI S3,8003 -*SW T3,0000 (S1) 9->#available MPchars -ADDIU S3,S3,B534 S3=8002B534 end of selected player chunk; MP stage# -ADDIU S2,S2,B524 S2=8002B524 pl1 selected character -*LW V0,0000 (S1) V0=#available MPchars -//7F011D9C: -LW T4,0000 (S2) player's selected character -SLT AT,T4,V0 ...should be within maximum range -BNEL AT,R0,7F011DE0 -ADDIU S2,S2,0004 next player -BLEZ V0,7F011DD8 branch if it needs initializing -OR S0,R0,R0 -//7F011DB4: -JAL 7F011BD8 -OR A0,S0,R0 -BEQL V0,R0,7F011DDC -SW S0,0000 (S2) -*LW T5,0000 (S1) -ADDIU S0,S0,0001 -SLT AT,S0,T5 -BNEZ AT,7F011DB4 -NOP -//7F011DD8: initialize to player number -SW S0,0000 (S2) -ADDIU S2,S2,0004 -//7F011DE0: -BNEL S2,S3,7F011D9C keep going until all four players are checked -*LW V0,0000 (S1) -//7F011DE8: initialize selection registers -LUI V0,8003 -LW V0,B524 (V0) V0=pl1 selected char# -LUI AT,8007 -LUI V1,8003 -SW V0,9710 (AT) -LUI AT,8007 -SW V0,9720 (AT) -LUI AT,8007 -SW R0,9730 (AT) -LUI AT,8007 -SW R0,9740 (AT) -LUI V1,8003 -LW V1,B528 (V1) V1=pl2 selected char# -LUI AT,8007 -SW R0,9750 (AT) -LUI AT,8007 -SW V1,9714 (AT) -LUI AT,8007 -SW V1,9724 (AT) -LUI AT,8007 -SW R0,9734 (AT) -LUI AT,8007 -SW R0,9744 (AT) -LUI A0,8003 -LW A0,B52C (A0) A0=pl3 selected char# -LUI AT,8007 -SW R0,9754 (AT) -LUI AT,8007 -SW A0,9718 (AT) -LUI AT,8007 -SW A0,9728 (AT) -LUI AT,8007 -SW R0,9738 (AT) -LUI AT,8007 -SW R0,9748 (AT) -LUI A1,8003 -LW A1,B530 (A0) A1=pl4 selected char# -LUI AT,8007 -SW R0,9758 (AT) -LUI AT,8007 -SW A1,971C (AT) -LUI AT,8007 -SW A1,972C (AT) -LUI AT,8007 -SW R0,973C (AT) -LUI AT,8007 -SW R0,974C (AT) -LUI AT,8007 -JAL 7F00B8AC -SW R0,975C (AT) -//7F011EAC: RETURN -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 -//7F011ECC: -JR RA -NOP - -+-+-+-+ - -//7F012568: -ADDIU S3,R0,000C this multiplier for both image offsets and entry offsets - -//7F01259C: -LW T8,00EC (SP) -LW T5,0000 (S4) -ADDIU S5,SP,00D8 -MULTU T8,S3 -ADDIU T6,R0,0002 -SW T6,0010 (SP) -OR A0,S5,R0 -ADDIU A2,R0,0002 -OR A3,R0,R0 -MFLO T7 -ADDU S2,T7,T9 -LBU T3,0003 (S2) - -//7F01261C: -LBU T5,0003 (S2) S2 hasn't changed yet - -//7F012688: -LBU T7,0003 (S2) S2 hasn't changed yet - -//7F0126F4: -LBU T2,0003 (S2) S2 hasn't changed yet - -+-+-+-+ - -7F012AA0 loads the txtID# for label -SLL T7,T2,0x2 -SUBU T7,T7,T2 -*SLL T7,T7,0x2 -ADDU A0,A0,T7 -JAL 7F0C1DD8 -LHU A0,B198 (A0) - -+-+-+-+-+ - -These all handle the now variably-sized MP character list! - -7F012CBC 477EC 8463B194 *LH V1,B194 (V1) -7F012D08 47838 8463B194 *LH V1,B194 (V1) -7F012D5C 4788C 8463B194 *LH V1,B194 (V1) - - -7F011D4C: 4687C check value to maximum -82290003 *LB T1,0003 (S1) -- -- -15200008 *BNEZ T1,7F011D7C - -7F011D80: 468B0 -A6340000 *SH S4,0000 (S1) -- -- -A6++++++ SH T3,0000 (S1) -- -- -86++++++ LH "" - -7F011DC4: 468F4 -86++++++ LH "" - -7F011DE4: 46914 -86++++++ LH "" - - -scrolling limitter: -7F011A60: 46B90 -85++++++ LH "" - 46C38 -85++++++ LH "" - - -7F010280 44DB0 MAX characters multiplayer cheat -240E0001 *ADDIU T6,R0,0001 - LUI AT,8003 - JR RA -A02EB197 *SB T6,B197 (AT) diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 12 - multiplayer stage select/MP stage lookup.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 12 - multiplayer stage select/MP stage lookup.txt deleted file mode 100644 index 12befa8..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 12 - multiplayer stage select/MP stage lookup.txt +++ /dev/null @@ -1,118 +0,0 @@ -7F016064 4AB94 menu 0B initialization - copies stage and difficulty -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -LUI A0,8003 -JAL 70006950 ;stage#->800242FC: loaded stage -LW A0,A8F4 (A0) ;A0=8002A8F4: stage# -LUI A0,8003 -JAL 7F0BFC1C ;A0->80048384: difficulty -LW A0,A8FC (A0) ;A0=8002A8FC: selected difficulty -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -then calls the 'interface', which only sets return menu - -70006884: this was the branch followed by complex, 2pl. - it isn't really that pertinent right now... - -//7F003CB8: 387E8 -SLTI AT,S5,003B -BEQ AT,R0,7F004E10 ;branch if 'stage#' > 0x3B -SLL T7,S5,0x2 ;T7=stage#->offset -LUI T8,8003 -ADDIU T8,T8,74E4 ;T8=800374E4: p->setup pointers for each stage -ADDU S0,T7,T8 ;S0=p->stage T7's setup pointer -LW V0,0000 (S0) ;V0=p->setup filename -LUI T9,8005 -ADDIU S1,SP,0174 ;S1=p->final string -BEQ V0,R0,7F004E10 ;branch if no setup file -ADDIU T9,T9,EDB0 ;T9=8004EDB0: 0x100 of zeroes -OR T2,S1,R0 ;T2=S1: p->final string -ADDIU T1,T9,00FC ;T1=T9+FC: endpoint -//7F003CEC: 3881C prepare buffer for string: copy buffer to target -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T2,T2,000C -SW AT,FFF4 (T2) -LW AT,FFF8 (T9) -SW AT,FFF8 (T2) -LW AT,FFFC (T9) -BNE T9,T1,7F003CEC -SW AT,FFFC (T2) -//7F003D10: 38840 copy last entry and write first byte to buffer -LW AT,0000 (T9) -OR S4,R0,R0 -OR S3,R0,R0 -SW AT,0000 (T2) ;0x100 of zeroes in final string buffer -LBU T3,0000 (V0) ;T3=first byte of filename -SB R0,0175 (SP) ;write NULL after first byte -//7F003D28: 38858 test if MP or solo -JAL 7F09A464 ;ret V0=#players -SB T3,0174 (SP) ;1st byte->buffer -SLTI AT,V0,0002 -BNEZ AT,7F003D48 ;branch if solo -//7F003D38: 38868 loads "mp_" string for string extension -LUI A1,8005 -ADDIU A1,A1,EEB0 ;A1=8004EEB0: "mp_" -JAL 7000A7FC ;append string A1 to A0 -OR A0,S1,R0 ;A0=S1: p->string on stack -//7F003D48: append setup name -LW A1,0000 (S0) ;A1=p->solo setup name for stage -OR A0,S1,R0 ;A0=S1: p->string on stack -JAL 7000A7FC -ADDIU A1,A1,0001 ;A1++ skip the 'U' -//7F003D58: -OR A0,S1,R0 ;A0=S1: setup name -ADDIU A1,R0,0001 ;A1=1: ??? -ADDIU A2,R0,0100 ;A2=0100: ??? -JAL 7F0BCD04 ;load setup file into memory and stuff -ADDIU A3,R0,0004 ;A3=4: bank 4 -//7F003D6C -LUI V1,8007 -ADDIU V1,V1,5D28 -SW V0,0000 (V1) ;V0->80075D28: p->setup file in memory - -+_+ - -7F0BCD04: load resource using string value - accepts: A0=p->name, A1=?, A2=?, A3=bank# -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -SW A1,001C (SP) -SW A2,0020 (SP) -JAL 7F0BD254 ;ret V0=ID# for resource A0 -SW A3,0024 (SP) -OR A0,V0,R0 ;A0=V0: ID# -LW A1,001C (SP) -LW A2,0020 (SP) -JAL 7F0BCE0C ;load ID# A0, A1=?, A2=?, A3=bank# -LBU A3,0027 (SP) -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - ------------------ -7F0C1DD8: returns pointer to text string in given block -expects A0=2byte text value -each text block can contain up to 3FF entries -SRA T6,A0,0xA //mask FC00 -SLL T7,T6,0x2 //T7=most of the first byte of text value -LUI V0,8009 -ADDU V0,V0,T7 //V0=offset to block pointer -LW V0,C640 (V0) //V0=8008C640+ (pointer to text table) -ANDI T8,A0,03FF //T8=specific text entry -SLL T9,T8,0x2 //T9=entry# to offset -ADDU T0,V0,T9 //T0=pointer in table to text offset -LW V1,0000 (T0) //V1=offset to text -OR A0,R0,R0 -BEQ V1,R0,7F0C1E14 -NOP -ADDU A0,V1,V0 //A0=pointer to text -JR RA -OR V0,A0,R0 //V0=A0 -//7F0C1E14: if a NULL entry, set a NULL pointer... -JR RA -OR V0,A0,R0 //V0=A0=0 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 12 - multiplayer stage select/new mp menu.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 12 - multiplayer stage select/new mp menu.txt deleted file mode 100644 index a59ef29..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 12 - multiplayer stage select/new mp menu.txt +++ /dev/null @@ -1,614 +0,0 @@ -OLD stage menu specs: 18bytes -0x0 2 stage name -0x2 2 selected stage -0x4 4 picture -0x8 4 stage# or -1 for random -0xC 4 min stages before selectable -0x10 4 1 if selectable -0x14 4 max # players - - -new stage menu specs: 8bytes -8002B074 2 total stages in list -8002B076 2 current entry (set by rand) -8002B078 x stage entries - -0x0 2 stage name (one name, long acceptable) -0x2 1 picture -0x3 1 stage# or FF for random -0x4 2 ID# for setup file -0x6 C0 difficulty mask for stage# below - 0 agent or above - 1 secret agent or above - 2 00 agent or above - 3 007 - 3F min stages before selectable -0x7 80 red - 40 green - 20 blue - 10 lock 4 player - 08 lock 3 player - 04 lock 2 player - 02 lock 1 player - 01 randomly-unselectable - -0xD standard entries -9C9A 10 FF 0000 00 80 Random -9C9C 0C 26 0263 00 00 Temple -9C9E 0E 1F 0266 00 00 Complex -9CA2 0F 32 0265 00 00 Caves -9CA0 0D 2D 025C 00 00 Library -9D0D 0D 2D 0264 00 00 Basement -9D0F 0D 2D 025F 00 00 Stack -9CA4 04 22 025E 01 00 Facility -9CA6 00 1B 0267 08 00 Bunker II -9CA8 02 18 025D 0A 00 Archives -9CAA 01 27 0260 10 00 Caverns -9CAC 0A 20 0262 12 00 Egyptian -9C86 07 16 0268 09 00 Statue -9C93 08 29 0261 11 00 Cradle - - -also, 8002B534 needs to be a byte or short, not a word... - steal other half of address to resolve randomized entry -go with short - that will more than support everything - - -Without moving anything, that makes for 34 entries. -++++++++++++++++++++++++++++++++++++++++++++++++++ - -most important bit: getting it to accept a custom mp_setup file -only need the 'setup pointers' if solo in use. -Otherwise, need to use the ROM index # - -cleans out 8004EDB0 (0x100) - -will need to rewrite the random stage code to save some semblance of the set used: -stage value = halfword write. lower halfword is MP set -7F000000 no rewrite necessary -42980 7F00DE50 ;save when disp. solo stage select -42E20 7F00E2F0 ;save when disp. mission briefings -458EC 7F010DBC ;save random MP stage -45900 7F010DD0 ;save MP stage -4AB9C 7F01606C ;load stage -4B414 7F0168E4 -4B4B8 7F016988 -4F9E4 7F01AEB4 ;load solo stage -5212C 7F01D5FC ;save demo stage - -7F0106F8: LW -> LH 84- * -7F010724: SW -> SH A4- * -7F0107D0: LW -> LH 84- * -7F0107E0: SW -> SH A4- * -7F010D5C: LW -> LH 87- * -7F011920: LW -> LH 85- * -7F013F70: SW -> SH A4- * - -7F0C0414: LW -> LH 85- * ramrom -7F0C0560: SW -> SH A4- * - -better yet, since it needs a halfword to know the number of entries, - dedicate first halfword at address to #entries, then second to current - random will just have to set it - -//7F003CB8: 387E8 -2AA1003B SLTI AT,S5,003B -10200454 BEQ AT,R0,7F004E10 ;branch if 'stage#' > 0x3B -00157880 SLL T7,S5,0x2 ;T7=stage#->offset -3C188003 LUI T8,8003 -271874E4 ADDIU T8,T8,74E4 ;T8=800374E4: p->setup pointers for each stage -01F88021 ADDU S0,T7,T8 ;S0=p->stage T7's setup pointer -//7F003CD0: 38800 prepare buffer for string: copy buffer to target - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -//7F003D14: 38844 test if MP or solo -0FC26919 JAL 7F09A464 ;ret V0=#players -00009825 OR S3,R0,R0 -28410002 SLTI AT,V0,0002 -1420000C *BNEZ AT,7F003D58 ;branch if solo -0000A025 OR S4,R0,R0 -//7F003D2C: 38868 loads "mp_" string for string extension -3C018003 *LUI AT,8003 -8424B076 *LH A0,B076 (AT) ;selected MP stage -000420C0 *SLL A0,A0,0x3 ;A0=selection * 8: offset to data -00240821 *ADDU AT,AT,A0 -9424B07C *LHU A0,B07C (AT) ;ROM index ID -00042840 *SLL A1,A0,0x1 -00A42821 *ADDU A1,A1,A0 -00052880 *SLL A1,A1,0x2 ;A1=index * C -3C018004 *LUI AT,8004 -00250821 *ADDU AT,AT,A1 -24306058 *ADDIU S0,AT,6058 ;A0=p->ROM lookup string -//7F003D58: 38888 -8E040000 *LW A0,0000 (S0) ;A0=S1: setup name -1080042D *BEQ A0,R0,7F004E10 ;branch if no setup file (0x39940) -24050001 ADDIU A1,R0,0001 ;A1=1: ??? -24060100 ADDIU A2,R0,0100 ;A2=0100: ??? -0FC2F341 JAL 7F0BCD04 ;load setup file into memory and stuff -24070004 ADDIU A3,R0,0004 ;A3=4: bank 4 -//7F003D6C: 3889C -3C038007 LUI V1,8007 -24635D28 ADDIU V1,V1,5D28 -AC620000 SW V0,0000 (V1) ;V0->80075D28: p->setup file in memory - - -+_+ - -changes to menu 12 constructor -//7F0142B8: 48DE8 -26D6B078 *ADDIU S6,S6,B078 ;S6=8002B074: MP stage list -... SW R0,00B4 (SP) ;SP+B4=0: row count -... SWC1 F10,00DC (SP) ;SP+DC: image y position -... ADDIU S8,R0,000C ;S8=0xC: size of image declaration -24170008 *ADDIU S7,R0,0008 ;S7=0x18: size of MP stage entry - -//7F01431C: 48E4C -83190002 *LB T9,0002 (T8) ;T9=T8+4: image - -//7F014564: 49094 -0015C8C0 *SLL T9,S5,0x3 -00000000 *NOP - LUI T1,8003 -2529B078 *ADDIU T1,T1,B078 ;T1=8002B074: MP stage list -00000000 *NOP - -//7F014588: 490B8 - JAL 7F0C1DD8 ;ret V0=p->text A0 -96640000 *LHU A0,0000 (S3) ;A0=stage name text - -//7F0145F0: 49120 - JAL 7F0C1DD8 ;ret V0=p->text A0 -96640000 *LHU A0,0000 (S3) ;A0=stage name text - -//7F01465C: 4918C -96640000 *LHU A0,0000 (S3) ;A0=stage name text - - -MP menu itself (name, randomizer) -//7F010D5C: 4588C start MP game! - LH T8,B534 (T8) ;T8=8002B534: MP stage selected -00000000 *NOP -3C088003 *LUI T0,8003 -0018C8C0 *SLL T9,T8,0x3 -A518B076 *SH T8,B076 (T0) -00000000 *NOP -01191021 *ADDU V0,T0,T9 -8042B07B *LB V0,B07B (V0) ;V0=8002B07C+offset: stage# -04410014 *BGEZ V0,7F010DD0 ;branch if not random -AD02A8F4 *SW V0,A8F4 (T0) ;V0=8002A8F4: stage selected -//7F010D84: 458B4 handle random stage select - JAL 7000A450 ;V0=random# -3C088003 *LUI T0,8003 -9501B074 *LHU AT,B074 (T0) ;total # entries - DIVU V0,AT - MFHI V1 ;V1=rand % #entries: MP stage entry in that range -24640001 -ADDIU A0,V1,0001 ;A0=MPstage#+1: MPstage from 1-B (no rand) -000408C0 *SLL AT,A0,0x3 -01014821 *ADDU T1,T0,AT -9122B07F *LBU V0,B07F (T1) -30420001 *ANDI V0,V0,0001 ;randomly-unselectable flag -1440FFF5 *BNE V0,R0,7F010D84 -8122B07B *LB V0,B07B (T1) ;T1=8002B094+offset: stage# -AD02A8F4 *SW V0,A8F4 (T0) ;stage#->8002A8F4: stage selected - JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -A504B076 *SH A0,B076 (T0) ;8002B076=A0: MP stage - BEQ V0,R0,7F010D84 ;branch if not available - NOP -00000000 *NOP -00000000 *NOP -//7F010DD0: -00000000 *NOP - ADDIU T2,R0,FFFF - -Since this is a little less temporary than originally planned, here's a small revision... -7F014574: 490A4 -03299821 -ADDU S3,T9,T1 -24050096 *ADDIU A1,R0,0096 -56AA0001 *BNEL S5,T2,7F014588 -240500FF *ADDIU A1,R0,00FF -92640007 *LBU A0,0007 (S3) -//00042143 *SRA A0,A0,0x5 -00042142 *SRL A0,A0,0x5 -50800001 *BEQL A0,R0,+1 -34040007 *ORI A0,R0,0007 ;default setting -0FC054F1 *JAL 7F0153C4 - *NOP -345200FF *ORI S2,V0,00FF -0FC30776 JAL 7F0C1DD8 -96640000 LHU A0,0000 (S3) -00028825 *OR S1,V0,R0 - LUI T3,8004 - LW T3,0EAC (T3) - ADDIU A0,SP,0128 - ADDIU A1,SP,0124 - OR A2,V0,R0 - LW A3,0000 (S8) - SW R0,0014 (SP) - JAL 7F0AE98C - SW T3,0010 (SP) - LW V1,0128 (SP) - LW T4,0090 (SP) - LW T5,0124 (SP) - ADDIU S4,S6,FFE1 - SUBU A2,T4,V1 - ADDU T6,A2,V1 - OR A1,S4,R0 - SW T6,0010 (SP) - SW A2,012C (SP) - SW S4,0130 (SP) - LW A0,0138 (SP) - SW R0,0014 (SP) - JAL 7F0AD014 - ADDU A3,S4,T5 -0C001107 -JAL 7000441C -//7F0145F0: 49120 -AFA20138 -SW V0,0138 (SP) - SLL S0,V0,0x10 - SRA T7,S0,0x10 - JAL 7000442C - OR S0,T7,R0 - LUI T9,8004 - LW T9,0EAC (T9) - LW T8,0000 (S8) - *SW S2,0018 (SP) - LW A0,0138 (SP) - ADDIU A1,SP,0130 - ADDIU A2,SP,012C - OR A3,S1,R0 - SW S0,001C (SP) - SW V0,0020 (SP) - SW R0,0024 (SP) - SW R0,0028 (SP) - SW T9,0014 (SP) - JAL 7F0ADABC - SW T8,0010 (SP) -//7F014650: 49180 - LW V1,0128 (SP) - LW T2,0090 (SP) - SW V0,0138 (SP) - SUBU A2,T2,V1 - SW A2,012C (SP) -0C001107 -JAL 7000441C -AFB40130 SW S4,0130 (SP) - SLL S0,V0,0x10 - SRA T3,S0,0x10 - JAL 7000442C - OR S0,T3,R0 - LUI T5,8004 - LW T5,0EAC (T5) - LW T4,0000 (S8) -3A4E009B *XORI T6,S2,009B - SW T6,0018 (SP) - LW A0,0138 (SP) - ADDIU A1,SP,0130 - ADDIU A2,SP,012C - OR A3,S1,R0 - SW S0,001C (SP) - SW V0,0020 (SP) - SW R0,0024 (SP) - SW R0,0028 (SP) - SW T5,0014 (SP) - JAL 7F0ADABC - SW T4,0010 (SP) - SW V0,0138 (SP) -//7F0146CC: 491FC - - -------------- - -7F0100D0: 44C00 returns V0=1 if stage in slot is selectable - accepts: A0=MP stage entry# -27BDFFE0 -ADDIU SP,SP,FFE0 -AFBF0014 -SW RA,0014 (SP) -000470C0 *SLL T6,A0,0x3 -3C0F8003 LUI A0,8003 -95EEB074 *LHU T7,B074 (A0) -01C41023 *SUBU V0,T7,A0 ;TRUE if # entries <= total entries -04420019 *BLTZL V0,7F010160 ;fail if not even a valid entry -00001025 *OR V0,R0,R0 -25EFB078 *ADDIU T7,T7,B078 //T7=8002B074 (MP stage list) -01CF1821 *ADDU V1,T6,T7 //V1=offset to slot data -// -0FC040A4 JAL 7F010290 //returns V0=players selected -80790007 *LB T9,0007 (V1) //T9=max players -00591006 *SRLV V0,T9,V0 ;leading bit will be player mask -30410001 *ANDI AT,V0,0001 ;TRUE if locked for # players -54200010 *BNEL AT,R0,7F010160 -00001025 *OR V0,R0,R0 -//7F0100E8: unlock all stages when 007 -8C84A8E8 *LW A0,A8E8 (A0) //A0=8002A8E8 (folder#) -0FC07D28 JAL 7F01F4A0 -AFA30018 SW V1,0018 (SP) -1440000A BNE V0,R0,7F01015C -8FA30018 LW V1,0018 (SP) -90650006 *LBU A1,0006 (V1) //A1=stages before selectable -//7F01012C: 44C5C -10A00007 *BEQ A1,R0,7F01015C -00053182 *SRL A2,A1,0x6 ;difficulty -30A5003F *ANDI A1,A1,003F -3C048003 *LUI A0,8003 -//7F010144: check stages completed -0FC078B0 JAL 7F01E2C0 //returns V0=1 if stage completed -8C84A8E8 LW A0,A8E8 (A0) //A0=8002A8E8 (folder#) -50400002 *BEQL V0,R0,7F010160 -00001025 OR V0,R0,R0 -24020001 ADDIU V0,R0,0001 -//7F010160: -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 - *NOP - *NOP - *NOP - -+_+ - -MP menu defaults -//7F0106F0: 45220 -3C028003 LUI V0,8003 -0FC04034 *JAL 7F0100D0 ;V0=TRUE if selectable -8444B534 *LH A0,V0,B534 //V0=8002B534 -3C018003 *LUI AT,8003 -//7F010700: 45230 -50400001 *BEQL V0,R0,+1 -AC20B534 *SH R0,B534 (AT) -8FBF001C -LW RA,001C (SP) -8FB00018 -LW S0,0018 (SP) -03E00008 -JR RA -27BD0020 -ADDIU SP,SP,0020 -//7F010718: - blanked! - -+_+ - -MP options menu - -//7F01191C: 4644C - LUI T6,8003 - LH T6,B534 (T6) ;T6=MP stage selected - LUI A0,8003 - OR S0,V0,R0 -000E78C0 *SLL T7,T6,0x3 -00000000 *NOP -00000000 *NOP - ADDU A0,A0,T7 - JAL 7F0C1DD8 ;V0=text ID A0 -9484B078 *LHU A0,B078 (A0) ;A0=8002B074: selected stage name - -+_+ --_- - -temporary replacement menu, until new scrolling one made: -uses index to offset from start of list for each page -8002B536 keeps track of menu offset. +C each, 0 if over total -//7F0142B8: 48DE8 -96D7B536 *LHU S7,B536 (S6) ;S7=offset to entries displayed -26D6B078 *ADDIU S6,S6,B078 ;S6=8002B074: MP stage list -AFA000B4 SW R0,00B4 (SP) ;SP+B4=0: row count -E7AA00DC SWC1 F10,00DC (SP) ;SP+DC: image y position -241E000C ADDIU S8,R0,000C ;S8=0xC: size of image declaration - -//7F0142EC: 48E1C load images for each stage in row -2A21000C SLTI AT,S1,000C ;TRUE if current < total entries (C) -5020007A BEQL AT,R0,7F0144DC -C7B200D8 LWC1 F18,00D8 (SP) -02377821 *ADDU T7,S1,S7 -3C0A8009 LUI T2,8009 -8D4AD134 LW T2,D134 (T2) ;T2=8008D134: MP stage select images -240B0002 ADDIU T3,R0,0002 ;T3=2 -02602025 OR A0,S3,R0 -24060001 ADDIU A2,R0,0001 ;A2=1 -00003825 OR A3,R0,R0 ;A3=0 -000F78C0 *SLL T7,T7,0x3 -02CFC021 ADDU T8,S6,T7 ;T8=p->MP stage entry - -//7F014540: 49070 -2AA1000C SLTI AT,S5,000C ;AT=TRUE if selected < C -50200062 *BEQ AT,R0,7F0146D0 -26F70001 *ADDIU S7,S7,0001 ;S7++ -3C138003 +LUI S3,8003 -9664B536 *LHU A0,B536 (S3) -02A49021 *ADDU S2,S5,A0 -0FC04034 JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -00122025 *OR A0,S2,R0 ;A0+=S5: entry -1040005A `BEQ V0,R0,7F0146CC -3 -3C0A8007 LUI T2,8007 -8D4A977C LW T2,977C (T2) ;T2=8006977C: highlighted MP stage -0012C8C0 *SLL T9,S2,0x3 -2669B078 *ADDIU T1,S3,B078 ;T1=8002B074: MP stage list -3C129696 -LUI S2,9696 -36529600 *LW S2,S2,9600 ;S2=96969600: grey - BNE S5,T2,7F014588 - ADDU S3,T9,T1 ;S3=p->selected MP stage entry - ADDIU S2,R0,FF00 ;S2=FFFFFF00: white -//7F014588: - -=_= - -temporary interface hack -//7F013E20: 48950 -14400038 BNEZ V0,7F013F18 ;branch if flags not set - -//7F013E24: 48954 -3C038003 *LUI V1,8003 -AC60A8E4 *SW R0,A8E4 (V1) ;0->8002A8E4: NO highlight folder tab 3 -AC60A8E0 -SW R0,A8E0 (V1) ;0->8002A8E0: NO highlight folder tab 2 -//7F013E30: detect if over tab 3 -0FC028E7 JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -AC60A8DC *SW R0,A8DC (V1) ;0->8002A8DC: NO highlight folder tab 1 -14400032 BNEZ V0,7F013F18 ;branch otherwise -AC62A8E4 *SW V0,A8E4 (V1) ;1->8002A8E4: highlight tab 3 -0FC0295E JAL 7F00A578 ;V0=TRUE if cursor on tab 2 -00000000 NOP -1440003E *BNEZ V0,7F013F18 -AC62A8E0 *SW V0,A8E0 (V1) ;1->8002A8E0: highlight tab 2 -//7F013E58: detect vertical cursor position -3C018003 LUI AT,8003 -C424A90C LWC1 F4,A90C (AT) ;F4=8002A90C: vert.pos. -C428A908 -LWC1 F8,A908 (AT) ;F8=8002A908: horz.pos -3C108007 LUI S0,8007 -2610977C ADDIU S0,S0,977C ;S0=8006977C: highlighted stage -4600218D TRUNC.W.S F6,F4 -44023000 MFC1 V0,F6 ;V0=vert.pos -9429B536 *LHU T1,B536 (AT) ;selection offset -//7F013E74: rows -24030002 *ADDIU V1,R0,0002 ;V1=2: 3rd row -284100F0 SLTI AT,V0,00F0 ;TRUE if pos < 0xF0: third row -00611823 *SUBU V1,V1,AT -284100AA SLTI AT,V0,00AA -00611823 *SUBU V1,V1,AT -//7F013E88: second+first row -//7F013EA0: horizontal cursor position -0003C880 SLL T9,V1,0x2 ;T9=row * 4: #entries per row -4600428D TRUNC.W.S F10,F8 -44025000 MFC1 V0,F10 ;V0=horz.pos -0329C821 *ADDU T9,T9,T1 -//7F013E94: columns -24030003 *ADDIU V1,R0,0003 ;V0=3: 4th column -28410124 SLTI AT,V0,0124 ;TRUE if pos < 124: 4th column -00611823 *SUBU V1,V1,AT -284100CF SLTI AT,V0,00CF -00611823 *SUBU V1,V1,AT -2841007A SLTI AT,V0,007A ;TRUE if pos < CF: 3rd column -00611823 *SUBU V1,V1,AT -//7F013EB0: determine if highlighted stage unlocked -03232021 *ADDU A0,T9,V1 ;A0=T9+V0: (row*4)+column -0FC04034 JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -AE040000 SW A0,0000 (S0) ;A0->S0: MP stage# -14400011 BNEZ V0,7F013F18 ;branch if available -//7F013EC0: if not available, try previous entry -8E090000 -LW T1,0000 (S0) -2524FFFF ADDIU A0,T1,FFFF ;A0-- -3C098003 *LUI T1,8003 -9522B536 *LHU V0,B536 (T1) ; -0082082A *SLT AT,A0,V0 -1020FFF7 *BEQ AT,R0,-9 - *NOP -A520A8D4 *SH R0,A8D4 (T1) ;roll to next page - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -//7F013F18: select option -3C108007 LUI S0,8007 -2610977C ADDIU S0,S0,977C ;S0=8006977C: highlighted stage -00002025 OR A0,R0,R0 ;A0=0 -0C0030EB JAL 7000C3AC ;V0=TRUE if A, Z, START pressed -3405B000 ORI A1,R0,B000 ;A1=B000: -1040000F BEQ V0,R0,7F013F74 ;branch if none set -24030001 ADDIU V1,R0,0001 ;V1=1 -//7F013F34: tab 3 selected sets previous -3C0B8003 LUI T3,8003 -8D61A8E4 *LW AT,A8E4 (T3) ;T3=8002A8E4: folder tab 3 highlight -14200018 *BNE AT,R0,7F013FA0 ;branch if not over tab 3 -AD61A8D8 *SW AT,A8D8 (T3) ;1->8002A8D8: tab 3 selected -//7F013F30: tab 2 selected sets next -8D61A8E0 *LW AT,A8E0 (T3) ;T3=8002A8E0: folder tab 2 highlight -14200015 *BNE AT,R0,7F013FA0 ;branch if not over tab 2 -AD61A8D4 *SW AT,A8D4 (T3) ;1->8002A8D4: tab 2 selected -//7F013F3C: 48A6C stage selected sets tab 3 -8E020000 LW V0,0000 (S0) ;V0=highlighted stage -3C018003 LUI AT,8003 -9424B536 *LHU A0,B536 (AT) ; -00441021 *ADDU V0,V0,A0 -AD63A8D8 SW V1,A8D8 (T3) ;1->8002A8D8: tab 3 selected -1000000E BEQ R0,R0,7F013FA0 -A562B534 SH V0,B534 (T3) ;8002B534=highlighted stage -//7F013F6C: B button pressed - back -00002025 OR A0,R0,R0 ;A0=0: player 1 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -24054000 ADDIU A1,R0,4000 ;A1=4000: B button -3C018003 LUI AT,8003 -14400008 BNEZ V0,7F013FA0 ;branch if B button isn't pressed -AC22A8D8 *SW V0,A8D8 (AT) ;1->8002A8D8: tab 3 selected -//7F013F84: 48AB4 R - next page -00002025 OR A0,R0,R0 ;A0=0: player 1 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -24050010 ADDIU A1,R0,0111 ;A1=0010: R button, +right, cright -3C018003 LUI AT,8003 -10400007 BEQ V0,R0,7F013FB4 ;branch if B button isn't pressed -AC22A8D4 *SW V0,A8D4 (AT) ;1->8002A8D4: tab 3 selected -00000000 NOP -//7F013F8C: play SE -240500C7 ADDIU A1,R0,00C7 ;A1=SE 0C7 -00003025 OR A2,R0,R0 ;A2=0: NULL data pointer -3C048006 -LUI A0,8006 -0C002382 JAL 70008E08 ;play sound A1 -8C843720 LW A0,3720 (A0) ;A0=80063720: p->SE buffer -//7F013FB4: toggle stuff on - -//7F013FFC: 48B2C tab 2 selected - stage selected -3C0C8003 *LUI T4,8003 -8D8DA8D4 LW T5,A8D4 (T4) ;T4=8002A8D4: tab 2 selected -11A00008 -BEQ T5,R0,7F014024 ;branch if not selected -9584B536 *LHU A0,B536 (T4) ;cur -9585B074 *LHU A1,B074 (T4) ;total -2484000C *ADDIU A0,A0,000C -00A42823 *SUBU A1,A1,A0 -04A20001 *BLTZL A1,+1 -00002025 *OR A0,R0,R0 -10000006 *BEQ R0,R0,7F01403C -A584B536 *SH A0,B536 (T4) -//7F014024: tab 3 selected - previous -8D8DA8D8 LW T5,A8D8 (T4) ;T5=8002A8D8: tab 3 selected -11A00003 *BEQ T5,R0,7F01403C ;branch if not selected -2404000E ADDIU A0,R0,000E ;A0=E -0FC06975 JAL 7F01A5D4 ;set MP options (menu E) as current -00002825 OR A1,R0,R0 ;A1=0 -//7F01403C: 48B6C -3C0D8007 *LUI T5,8007 -9584B536 *LHU A0,B536 (T4) -8DA50000 *LW A1,977C (T5) -00A42823 *SUBU A1,A1,A0 -ADA50000 *SW A1,977C (T5) - -8FBF001C LW RA,001C (SP) - -set the killswitch for visible stages -//7F01440C: 48F3C display stage icon if unlocked -3C0B8003 *LUI T3,8003 -956BB536 *LHU T3,B536 (T3) ;T3=set offset -0FC04034 -JAL 7F0100D0 ;V0=TRUE if MP stage A0 unlocked -022B2021 *ADDU A0,S1,T3 -10400018 *BEQ V0,R0,7F014480 ;branch if unavailable -02602025 -OR A0,S3,R0 ;A0=S3: p->DL -2418002C -ADDIU T8,R0,002C -24190001 -ADDIU T9,R0,0001 -240B006E ADDIU T3,R0,006E -240C00FF ADDIU T4,R0,00FF -AFAC002C SW T4,002C (SP) ;SP+2C=FF -AFAB0028 SW T3,0028 (SP) ;SP+28=6E -AFAB0024 *SW T3,0024 (SP) ;SP+24=6E -AFAB0020 *SW T3,0020 (SP) ;SP+20=6E - - -add happy tab -//7F014700: 49230 -0FC2B366 JAL 7F0ACD98 -8FA40138 LW A0,0138 (SP) -0FC0288E -JAL 7F00A238 ;add tab 3: "PREVIOUS" -00402025 -OR A0,V0,R0 -0FC02905 *JAL 7F00A414 ;add tab 2: "NEXT" -00402025 *OR A0,V0,R0 -0FC027C2 JAL 7F009F08 ;loads selected icon for folder select -00402025 OR A0,V0,R0 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/7F0C3C94 - rank hack for new scenario format.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/7F0C3C94 - rank hack for new scenario format.txt deleted file mode 100644 index 2acb638..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/7F0C3C94 - rank hack for new scenario format.txt +++ /dev/null @@ -1,148 +0,0 @@ -Basis behind rank is to make a list of each player's scores -This list is sorted from highest to lowest -Normal displayed rank is based on the first matching score -Teams alter this value to always display 1st/2nd - -Could patch normal routine, or... - -Total revision can simplify greatly. -1) Create list of 4 scores, sorted highest to lowest (1st to last) -2) store cur.player's score for later comparison -3) If teams detected, simplify list by removing any matching entries -4) copy rank based on first entry matching player's score - -rank+A011 = string ID# -A011 "Rank: 1st" -A012 "Rank: 2nd" -A013 "Rank: 3rd" -A014 "Rank: 4th" - -Also, since numerical copying seemed to be supported at some point, will still use the sprint function and pass it A2="rank#"--entry#+1. -Otherwise, could just use strcpy() - - JAL 7F01475C ;V0=scenario::bitflags & V1 - ORI V1,R0,0002 - BEQ V0,R0,+ - - -stack: +80 -SP+18 S0 -SP+1C RA -SP+38 p->cur.table.scores -SP+3C p->cur.table.players -SP+58-68 table of player#s -SP+68-78 table of scores -SP+78 #players -SP+7C scenario -SP+80 [A0] @string -SP+84 [A1] player# - -new layout: +80 -SP+18 S0 -SP+1C RA -SP+38 `p->cur.pl's.score -SP+3C `S1 -SP+58-68 temp table of scores -SP+68-78 table of scores -SP+78 #players -SP+7C scenario nonzero if teams in use -SP+80 [A0] @string -SP+84 [A1] player# - -rewrite to remove 80000000 entries, or ignore them, or soemthing - -7F0C3C94 F87C4 sprint rank of player A1 to A0 - accepts: A0=@string buffer, A1=player# -27BDFF80 ADDIU SP,SP,FF80 -AFBF001C SW RA,001C (SP) -AFB00018 SW S0,0018 (SP) -AFB1003C *SW S1,003C (SP) -AFA40080 SW A0,0080 (SP) ;SP+80=A0: @string -AFA50084 SW A1,0084 (SP) ;SP+84=A1: player# -0FC051D7 *JAL 7F01475C ;V0=scenario::bitflags & V1 -34030002 *ORI V1,R0,0002 ;teams -0FC26919 JAL 7F09A464 ;V0=# players -AFA2007C SW V0,007C (SP) ;SP+7C=V0: scenario -AFA20078 SW V0,0078 (SP) ;T3=#players -18400037 *BLEZ V0,7F0C3D8C ;return if invalid #players -A0800000 *SB R0,0000 (A0) ;make sure A0 isn;t completely invalid -//7F0C3CC8 initialize final bank with some very unlikely scores... kills a bug - LUI V1,8000 - SW V1,0068 (SP) - SW V1,006C (SP) - SW V1,0070 (SP) - SW V1,0074 (SP) -//7F0C3CC8: set up loop -00008025 OR S0,R0,R0 ;S0=0 playercount -27B10058 *ADDIU S1,SP,0058 ;V1=SP+68: temp list -//7F0C3CD0: get each player's scores -0FC30E36 JAL 7F0C38D8 ;returns V0=score, V1=time -00102025 OR A0,S0,R0 ;A0=S0: player A0 -00431021 ADDU V0,V1,V0 ;V0=total score -8FAB0078 LW T3,0078 (SP) ;T3=#players -AE220000 *SW V0,0000 (S1) ;V0->table.scores save score for player -8FA50084 *LW A1,0084 (SP) ;A1=player# -52050001 *BEQL S0,A1,+1 ;save cur.player's score -AFA20038 *SW V0,0038 (SP) ;SP+38=cur.player's score -26100001 ADDIU S0,S0,0001 ;S0++ test next player -560BFFF6 *BNEL S0,T3,7F0C3CD0 ;loop for each player "likely" ensures S1=p->last entry -26310004 *ADDIU S1,S1,0004 ;S1+=4 next entry -//7F0C3CFC: sort list -27A50058 ADDIU A1,SP,0058 ;A1=SP+58: temp list -27A40068 ADDIU A0,SP,0068 ;A0=SP+68: table.scores -00008025 *OR S0,R0,R0 ;S0=0 count -//7F0C3D08: pull entry -00004825 *OR T1,R0,R0 ;T1=#items >= than entry -8CA20000 *LW V0,0000 (A1) ;V0=cur.score -27A80058 *ADDIU T0,SP,0058 ;T0=table.temp -//7F0C3D14: compare to rest -8D030000 *LW V1,0000 (T0) ;V1=entry.score -0043082A *SLT AT,V0,V1 ;TRUE if score < entry's score -00294821 *ADDU T1,T1,AT ;T1++ if less than score -1511FFFC *BNE T0,S1,7F0C3D14 ;loop for each entry in table -25080004 *ADDIU T0,T0,0004 -//7F0C3D28: set entry to appropriate slot -00094880 *SLL T1,T1,0x2 -01244821 *ADDU T1,T1,A0 ;T1=SP+68 + offset: p->entry in final table -8D230000 *LW V1,0000 (T1) ;T4=entry in this slot -5062FFFE *BEQL V0,V1,-back ;if matches, skip this entry and see if next entry matches -25290004 *ADDIU T1,T1,0004 ;T1+=4 try next entry -AD220000 *SW V0,0000 (T1) -//7F0C3D40: loop for each entry -26100001 *ADDIU S0,S0,0001 -160BFFF0 *BNE S0,T3,7F0C3D08 ;branch if count != total -24A50004 *ADDIU A1,A1,0004 ;p->next table.temp entry -//7F0C3D4C: find nearest matching entry -8FA30038 *LW V1,0038 (SP) ;T6=cur.score -00008025 *OR S0,R0,R0 ;S0=0 count -00008825 *OR S1,R0,R0 ;S1=0 #duplicates -27A40068 *ADDIU A0,SP,0068 -//7F0C3D58: loop for each match. Also count duplicates... -8C820000 *LW V0,0000 (A0) ;V0=1st entry -10430007 BEQ V0,V1,7F0C3D70 ;branch if match -24840004 *ADDIU A0,A0,0004 -8C850000 +LW A1,0000 (A0) ;V1=entry -50A20001 +BEQ A1,V0,+1 ;inc.duplicate count on match -26310001 +ADDIU S1,S1,0001 -00051025 +OR V0,A1,R0 ;V0=A1: save previous entry -14A3FFFA `*BNE A1,V1,7F0C3D60 ;loop until cur.entry read -26100001 *ADDIU S0,S0,0001 -// -8FA2007C +LW V0,007C (SP) ;V0=team flag -54400001 +BNEL V0,R0,+1 ;if set, subtract duplicate count -02118023 +SUBU S0,S0,S1 -//7F0C3D70: one string output to rule them all -3404A011 *ORI A0,R0,A011 ;A0=A011-14: "Rank: xth" - base of all strings -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -00902021 ADDU A0,A0,S0 ;A0=A010+offset (1-4): final rank -26060001 *ADDIU A2,S0,0001 ;A2=#+1: rank as displayed (1-4) -8FA40080 LW A0,0080 (SP) ;A0=SP+80: p->output -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,...) -00022825 OR A1,V0,R0 ;A1=V0: p->source -//7F0C3D8C: return -8FBF001C LW RA,001C (SP) -8FB00018 LW S0,0018 (SP) -8FB1003C *LW S1,003C (SP) -03E00008 JR RA -27BD0080 ADDIU SP,SP,0080 - \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/MwtGX.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/MwtGX.txt deleted file mode 100644 index 7b99410..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/MwtGX.txt +++ /dev/null @@ -1,985 +0,0 @@ -Garoad - MwtGX -Scenario hack setting Man w/ the Golden Gun to use a generic weapon F7 - -scenario flags (apparently) stats+0x69 -0F teams -10 TLD -20 MwtGX - - -Scenario hack - MwtGX -hack: pull A0=MP weapon F7 -7F0693F4 is fed A0=F7, returning V0=p->data. -read byte 1 from this, setting to A0, and send it to the doohick - -First, simplify Flag test for more room. -Maybe hack it so it tests if you have the flag out... probably not now... -7F05D9D0 V0=hand A0's weapon -7F069258 V0=total ammo of type... this may be useful, since it would allow other ammo-based objectives - -7F08CF80: C1AB0 0FC233E0 test if possess flag -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=cur.player data -8DCF00D8 LW T7,00D8 (T6) ;T7=player death attrib -15E00003 BNEZ T7,7F08CFA4 ;skip if player dead or dying -00001025 OR V0,R0,R0 -0FC230C5 JAL 7F08C314 ;returns V0=1 if flag in inventory -24040058 ADDIU A0,R0,0058 -//7F08CFA4: -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 -00000000 NOP -00000000 NOP -00000000 NOP -CALLED: - 855D0 7F050AA0 - B8908 7F083DD8 sets inhibitor to switch from flag... - F4574 7F0BFA44 would need to change to a flag ammo test or the like - forces weapon out and all. look at the flag docs - -Now the scenario you want! -7F08CFC0: C1AF0 0FC233F0 test if possess golden gun -redirected to 7F08CFBC C1AEC 0FC233EF - accepts: A0=MP weapon code! -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC1A4FD JAL 7F0693F4 ;V0=p->MP weapon F7 data - GG slot -00000000 NOP;240400F7 ADDIU A0,R0,00F7 -0FC230C5 JAL 7F08C314 ;V0=TRUE if F7 in inventory -90440000 LBU A0,0000 (V0) ;A0=weapon code -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 -CALLED: - F4614 7F0BFAE4 - 855F8 7F050AC8 - BE844 7F089D14 - -slight revision... -moved! -7F04FD98: 848C8 0FC13F66 test if possess item A0 while alive - can accept an MP weapon# or a literal -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) ;T6=cur.player data -8DCF00D8 LW T7,00D8 (T6) ;T7=player death attrib -15E00009 BNEZ T7,7F08CFA4 ;skip if player dead or dying -00001025 OR V0,R0,R0 -//test if MP weapon... -2C820059 SLTIU V0,A0,0059 ;TRUE if a natural weapon -14400004 BNE V0,R0,+4 -00000000 NOP -0FC1A4FD JAL 7F0693F4 ;V0=p->MP weapon F7 data - GG slot -00000000 NOP -90440000 LBU A0,0000 (V0) ;A0=weapon code -//process this weapon -0FC230C5 JAL 7F08C314 ;returns V0=1 if A0 in inventory -00000000 NOP -//7F08CFA4: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -set the MP menu defaults to lock all sets GG and below -GG set is now #E -always inhibit flag - there isn't a case where you wouldn't want to - especially since it otherwise does nothing at all... - -maybe make a read 8002A8F0 at 0x35684 - -now to set the spawn inhibitor for weapon F7... -stupidly, this uses model# comparisons, so we'll need to hack it a little... -instead, should detect type of item, then weapon code. - -//7F001E14: 36944 multiplayer-only object expansion code - sets respawn -3C028003 *LUI V0,8003 -E6240074 SWC1 F4,0074 (S1) -8C41A8F0 *LW AT,A8F0 (V0) ;AT=mode: solo-0, multi-1, cheats-2 -1020001B *BEQ AT,R0,7F001E90 ;branch if solo -24030004 *ADDIU V1,R0,0004 ;respawn flag is its own mask -//7F001E28: test if 08 weapon -92220003 *LBU V0,0003 (S1) -24010008 *ADDIU AT,R0,0008 -14410014 *BNE V0,AT,7F001E7C ;branch if not a weapon -92380080 *LBU T8,0080 (S1) -//7F001E44: scenario-specific inhibitors -0FC051D6 JAL 7F014758 ;ret V0=scenario -24010003 *ADDIU AT,R0,0003 -1441000E BNE V0,AT,7F001E74 ;branch if not MwtGG -24020058 *ADDIU V0,R0,0058 ;V0=flag - always inhibit flags -//7F001E40: man w/ the GG -0FC1A4FD *JAL 7F0693F4 ;V0=p->MP weapon F7 data - GG slot -240400F7 *ADDIU A0,R0,00F7 -90420000 *LBU V0,0000 (V0) ;A0=weapon code -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -//7F001E7C: test if scenario item V0 matches item T8 -50580001 *BEQL V0,T8,+1 -00001825 OR V1,R0,R0 ;V1=0: inhibit respawn -//7F001E84: if not scenario item, set respawn flag -92280002 LBU T0,0002 (S1) ;T0=obj.data+2: -00684026 *XOR T0,T0,V1 ;mask with flag or nothing, depending -A2280002 *SB T0,0002 (S1) ;obj.data+2 |= 0x04: respawn flag! -//7F001E90: -... ;etc - -:_: UTTERLY PSYCHOTIC rollovers - -option lock system needs retrofitting, which means rollovers need it as well -oy... -all MP option locks kept in one byte @ 8002B544 -80 RESERVED -40 aim adjustment lock -20 control style lock -10 health lock -08 character select lock -04 weapon select lock -02 game length lock -01 stage select lock - -//7F0109A4: 454D4 vertical rollover tests -C424A90C LWC1 F4,A90C (AT) ;F4=8002A90C: vertical screen position -3C0A8003 *LUI T2,8003 -4600218D TRUNC.W.S F6,F4 -44023000 MFC1 V0,F6 ;V0=(long) screen position -24030001 *ADDIU V1,R0,0001 -914AB544 *LBU T2,B544 (T2) ;T9=lock byte -3C098007 *LUI T1,8007 -//7F0109C0: 454F0 rollover trigger bypasses for locked MP options -28410119 SLTI AT,V0,0119 -14200006 *BNEZ AT,7F0109E0 -31480040 *ANDI T0,T2,0040 ;T0=aim adjustment lock bit -55000049 *BNEL T0,R0,7F010AF4 -AD2397E8 *SW V1,97E8 (T1) -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F0109E0: 45510 -28410105 SLTI AT,V0,0105 -14200008 BNEZ AT,7F010A08 -310A0020 *ANDI T0,T2,0020 ;T0=control style lock bit -55000041 *BNEL T0,R0,7F010AF4 -AD2397E4 *SW V1,97E4 (T1) ;1->800697E4: -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F010A08: 45538 -284100F1 SLTI AT,V0,00F1 -14200008 BNEZ AT,7F010A30 -310A0010 *ANDI T0,T2,0010 ;T0=health lock bit -55000037 *BNEL T0,R0,7F010AF4 -AD2397E0 *SW V1,97E0 (T1) -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F010A30: 45560 -284100DD SLTI AT,V0,00DD -14200008 BNEZ AT,7F010A58 -310A0008 *ANDI T0,T2,0008 ;T0=character lock bit -5500002D *BNEL T0,R0,7F010AF4 -AD2397D8 *SW V1,97D8 (T1) -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F010A58: 45588 -284100C9 SLTI AT,V0,00C9 -14200008 BNEZ AT,7F010A80 -310A0004 *ANDI T0,T2,0004 ;T0=weapon select lock bit -55000023 *BNEL T0,R0,7F010AF4 -AD2397DC *SW V1,97DC (T1) -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F010A80: 455B0 -284100B5 SLTI AT,V0,00B5 -14200008 BNEZ AT,7F010AA8 -310A0002 *ANDI T0,T2,0002 ;T0=game length lock -55000019 *BNEL T0,R0,7F010AF4 -AD2397D4 *SW V1,97D4 (T1) -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F010AA8: 455D8 -284100A1 SLTI AT,V0,00A1 -14200008 BNEZ AT,7F010AD0 -310A0001 *ANDI T0,T2,0001 ;T0=stage select lock -5500000F *BNEL T0,R0,7F010AF4 -AD2397D0 *SW V1,97D0 (T1) -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F010AD0: 45600 scenarios and # players -2841008D SLTI AT,V0,008D -54200007 *BNEZL AT,7F010AF4 ;# players is the default otherwise -AD2397C8 *SW V1,97C8 (T1) ;players selected -AD2397CC *SW V1,97CC (T1) ;scenarios selected -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -//7F010AF4: 45624 - -also need to hack all the MP scenario default revisors to use new format... -gets rid of TLB pointers at 80051A60 (0x30CD0) - -7F010468: 44F98 set default MP menu settings for scenario A0 -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -3C018003 *LUI AT,8003 -240800FF *ADDIU T0,R0,00FF ;start with all bits unset -AC24B540 SW A0,B540 (AT) ;A0->8002B540: save scenario -//7F01047C: if "Last ..Alive" set, unset it -8C22B538 *LW V0,B538 (AT) ;length setting -2442FFFA *ADDIU V0,V0,FFFA ;V0-=6: 7=1, all else <=0 -5C400001 *BGTZL V0,+1 -AC22B538 *SW V0,B538 (AT) ;1->length setting if already =7 -//7F01048C: set you only live twice scenario specific settings -//note: further massacred when revising game length routine -24030001 *ADDIU V1,R0,0001 -14830004 *BEQ A0,V1,+4 -24020002 *ADDIU V0,R0,0002 - *NOP - *NOP -3108007F *ANDI T0,T0,007F ;untoggle length+points bit -//7F0104A4: set the living daylights scenario specific settings -14820004 *BNE A0,V0,+4 -8C22B538 *LW V0,B538 (AT) -28420004 *SLTI V0,V0,0004 -50400001 *BEQL V0,R0,+1 -AC22B538 *SW V1,B538 (AT) -//7F0104B8: set license to kill scenario specific settings: -24020004 *ADDIU V0,R0,0004 -50820001 *BEQL A0,V0,+1 -310800EF *ANDI T0,T0,00EF ;untoggle health bit -//7F0104C4: set man with the golden gun scenario specific settings -24020003 *ADDIU V0,R0,0003 -14820006 *BNE A0,V0,+6 -3C038005 *LUI V1,8005 -0FC3198F *JAL 7F0C6640 ;A0->selected MP weapon set -9064915F *LBU A0,915F (V1) -0044102A *SLT V0,V0,A0 ;V0=TRUE if # < minimum -54400001 *BNEL V0,R0,+1 ;only set the flag if < minimum -A0649162 *SB A0,9162 (V1) ;set selected weapon set to A0 -//7F0104E4: finish up -A028B544 *SB T0,B544 (AT) ;save new scenario mask -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - NOP - -also also need to hack MP default routine to use new format... -Hahahahahaha! -No need! It doesn't set this stuff. %Joy% - -also also also need to deal with the menu constructor... -//7F0111E8: 45D18 test stage select lock -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -33180001 *ANDI T8,T8,0001 -00000000 *NOP -57000002 *BNEL T8,R0,+2 ;70->Alpha if locked -240300FF ADDIU V1,R0,00FF -//7F011200: 45D30 locked -24030070 ADDIU V1,R0,0070 -//7F011204: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0112DC: 45E0C test game length lock -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -33180002 *ANDI T8,T8,0002 -00000000 *NOP -57000002 *BNEL T8,R0,+2 ;70->Alpha if locked -240300FF ADDIU V1,R0,00FF -//7F0112F4: locked -24030070 ADDIU V1,R0,0070 -//7F0112F8: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0113D0: 45F00 test weapon select lock -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -33180004 *ANDI T8,T8,0004 -00000000 *NOP -57000002 *BNEL T8,R0,+2 ;70->Alpha if locked -240300FF ADDIU V1,R0,00FF -//7F0113E8: locked -24030070 ADDIU V1,R0,0070 -//7F0113EC: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0114C4: 45FF4 test character select lock -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -33180008 *ANDI T8,T8,0008 -00000000 *NOP -57000002 *BNEL T8,R0,+2 ;70->Alpha if locked -240300FF ADDIU V1,R0,00FF -//7F0114DC: locked -24030070 ADDIU V1,R0,0070 -//7F0114E0: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0115B8: 460E8 test health lock -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -33180010 *ANDI T8,T8,0010 -00000000 *NOP -57000002 *BNEL T8,R0,+2 ;70->Alpha if locked -240300FF ADDIU V1,R0,00FF -//7F0115D0: locked -24030070 ADDIU V1,R0,0070 -//7F0115D4: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0116AC: 461DC test controller style lock -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -33180020 *ANDI T8,T8,0020 -00000000 *NOP -57000002 *BNEL T8,R0,+2 ;70->Alpha if locked -240300FF ADDIU V1,R0,00FF -//7F0116C4: locked -24030070 ADDIU V1,R0,0070 -//7F0116C8: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0117A0: 462D0 test aim adjustment lock -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -33180040 *ANDI T8,T8,0040 -00000000 *NOP -57000002 *BNEL T8,R0,+2 ;70->Alpha if locked -24030070 ADDIU V1,R0,00FF -//7F0117B8: locked -24030070 ADDIU V1,R0,0070 -//7F0117BC: save and do stuff -24030070 JAL 7000441C -24030070 SW V1,0048 (SP) -... - -//7F011944: 46474 test stage select lock - name of stage -3C088003 LUI T0,8003 -9108B544 *LBU T0,B544 (T0) -241800A0 ADDIU T8,R0,00A0 -241900A1 ADDIU T9,R0,00A1 -AFA20064 SW V0,0064 (SP) -AFB80058 SW T8,0058 (SP) -31080001 *ANDI T0,T0,0001 -AFB90054 SW T9,0054 (SP) -55000002 *BNEL T0,R0,7F011970 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F01196C: locked -24030070 ADDIU V1,R0,0070 -//7F011970: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F0119F0: 46520 test game length lock - name of length -3C188003 LUI T8,8003 -9318B544 *LBU T8,B544 (T8) -240E00A0 ADDIU T6,R0,00A0 -240F00B5 ADDIU T7,R0,00B5 -AFA20064 SW V0,0064 (SP) -AFAE0058 SW T6,0058 (SP) -33180002 *ANDI T8,T8,0002 -AFAF0054 SW T7,0054 (SP) -57000002 *BNEL T8,R0,7F011A1C ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F011A18: locked -24030070 ADDIU V1,R0,0070 -//7F011A1C: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F011A84: 465B4 test weapon select lock - name of set -3C0C8003 LUI T4,8003 -918CB544 *LBU T4,B544 (T4) -240A00A0 ADDIU T2,R0,00A0 -240B00C9 ADDIU T3,R0,00C9 -AFA20064 SW V0,0064 (SP) -AFAA0058 SW T2,0058 (SP) -318C0004 *ANDI T4,T4,0004 -AFAB0054 SW T3,0054 (SP) -55800002 *BNEL T4,R0,7F011AB0 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F011AAC: locked -24030070 ADDIU V1,R0,0070 -//7F011AB0: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -//7F011B28: 46658 test aim adjustment lock - name of setting -3C0A8003 LUI T2,8003 -914AB544 *LBU T2,B544 (T2) -240800A0 ADDIU T0,R0,00A0 -24090119 ADDIU T1,R0,0119 -AFA20064 SW V0,0064 (SP) -AFA80058 SW T0,0058 (SP) -314A0040 *ANDI T2,T2,0040 -AFA90054 SW T1,0054 (SP) -55400002 *BNEL T2,R0,7F011B54 ;FF->Alpha if unlocked -240300FF ADDIU V1,R0,00FF -//7F011B50: locked -24030070 ADDIU V1,R0,0070 -//7F011B54: save and do stuff -0C001107 JAL 7000441C -AFA30048 SW V1,0048 (SP) -... - -also also also also (aegh...) need to set menu to only use valid weapon sets -This utilizes the byte at 8004915F (0x283CF) -That sets the minimum weapon set number when the scenario is active -7F0C65CC: FB0FC 0FC31973 advance MP weapon set menu one option; saves updated value - revised to account for variable entry numbers... - fries: AT,V0,T6,T7,T8 -3C028005 LUI V0,8005 -804E9162 LB T6,9162 (V0) ;T6=cur selection -80419160 LB AT,9160 (V0) ;AT=max entries -25CE0001 ADDIU T6,T6,0001 ;T7=T6+1: set++ -24210001 ADDIU AT,AT,0001 ;accounts for random entry -01C1001A DIV T6,AT -3C018003 *LUI AT,8003 -8C21B540 *LW AT,B540 (AT) ;AT=scenario bits -240F0003 *ADDIU T7,R0,0003 -142F0003 *BNE AT,T7,+3 ;skip if not MwtGX -00007010 -MFHI T6 ;T8=set % total -51C00001 *BEQL T6,R0,+1 -904E915F *LBU T6,915F (V0) ;minimum value for scenario -03E00008 JR RA -A04E9162 *SB T6,9162 (V0) ;save revised set number - -7F0C65F4 FB124 0FC3197D -> 7F0C6614 FB144 0FC31985 - occurance @ 0x465A4 -7F0C6600 FB130 0FC31980 -> 7F0C6620 FB150 0FC31988 - occurance @ 0x9DF28 -7F0C6630 FB160 0FC3198C -> 7F0C664C FB17C 0FC31993 - occurance @ 0xF50A0 - -Oh, and revise the 21990... - - -"_" - -revision of Casino Royale code -If, perchance, it happens to make sets with 8 unique weapons, - then it would be acceptable for MwtGX - -7F082BD0 B7700 0FC20AF4 generates random weapons for set - manually rigged to overwrite last set - fries: AT,V0,A0,A1,A2,T6,T7,T8,T9 -AFBFFFE0 SW RA,FFE0 (SP) -3C188005 *LUI T8,8005 -0FC31982 *JAL 7F0C6608 ;V0=p->final set -93189161 *LBU T8,9161 (T8) ;T8=#selectable -244F0007 *ADDIU T7,V0,0007 ;endpoint -00027025 *OR T6,V0,R0 -00024025 *OR T0,V0,R0 -//randomizer -0C002914 JAL 7000A450 ;fries AT,A0,A1,A2,V0 -0008C825 *OR T9,R0,T0 -0058001B *DIVU V0,T8 -00001010 MFHI V0 ;T8=set % total -24420001 ADDIU V0,V0,0001 ;gets knives - tank -//test set for duplicates -93260000 *LBU A2,0000 (T9) -1046FFF9 *BEQ V0,A2,-7 - *NOP -572EFFFC *BNEL T9,T6,-4 -27390001 *ADDIU T9,T9,0001 -//save to set and iterate -A1C20000 SB V0,0000 (T6) -34420080 ORI V0,V0,0080 ;double if possible -A1C20008 SB V0,0008 (T6) -55CFFFF2 *BNEL T6,T7,-14 -25CE0001 ADDIU T6,T6,0001 ;next slot -//no double for F7 - set BA instead -24020025 ADDIU V0,R0,0025 ;V0=BA -8FBFFFE0 LW RA,FFE0 (SP) -03E00008 JR RA -A1C20008 SB V0,0008 (T6) - -I'll have to move it somplace new now... -7F0028F0 0x37420 -7F0104F4 0x45024 -7F04FCC0 0x847F0 - -7F082BD0 B7700 0FC20AF4 -to -7F002940 37470 0FC00A50 - -move Casino Royale to end of MP set list -will need to use a different injection point to keep intro movies from auto-closing -//7F0BDCD0 F2800 set player's handicap -0FC00A50 *JAL 7F002940 ;Casino Royale -00000000 NOP -0FC051D6 -JAL 7F014758 ;ret V0=scenario -00000000 NOP -50530004 *BEQL V0,S3,7F0BDCF4 -E634005C SWC1 F20,005C (S1) - - -oh, need to link in something to test that Casino Royale's final weapon slot is a firearm, not box-ish thing -Ideally, the current set can be copied to a buffer and drawn out of there - that thing can be tested for the two nasties: - 1) replicated weapon - 2) ammo-only type - if either is the case, F7 is replaced with the golden gun -granted that requires rewritting all the existing code... -On the plus side, it would allow you to play MwtGX with any weapon set ;*) - -well, I'll get to that someday. Expect it in revision 2 - - -Squee! All done! - -revised to be consistant with other routines -now T6 is p->player stats, V0=# kills with GX -that means all the routines will set T6=p->stats and V0 as the data! -7F06A934: 9F464 -3C0E8008 LUI T6,8008 -8DCEA0B4 LW T6,T6,A0B4 ;p->stats -8DC20020 LW V0,0020 (T6) ;V0=# kills of MwtGX owner -24420001 ADDIU V0,V0,0001 -03E00008 JR RA -ADC20020 SW V0,0020 (T6) ;save new count - -+_+ - -Final addition - Special weapon will keep its own kills, added temporarily to the owner. - Register for this will be at 8007FF5C, although kills could just as easily be a short value. - Tank eats 8007FF60-80, so work backwards if more values required. - -7F06A934: 9F464 reset MwtGX register -00002025 OR A0,R0,R0 -//7F06A938: 9F468 set MwtGX register to A0 -10000003 BEQ R0,R0,+3 -//7F06A93C: 9F46C increment MwtGX register -3C028008 *LUI V0,8008 -9444FF5C *LHU A0,V0,FF5C ;p->stats -24440001 ADDIU A0,A0,0001 -03E00008 JR RA -A444FF5C SH A0,FF5C (V0) ;save new count - -7F06A950: 9F480 retrieve MwtGX register -3C028008 LUI V0,8008 -03E00008 JR RA -9442FF5C LHU V0,FF5C (V0) - -Aegh! scoring! -//7F089D04: BE834 test scenario-specific handlers: note MP weapon patch shown in this dASM -AFA2002C SW V0,002C (SP) ;SP+2C=V0: killed -//7F089D08: BE838 -0FC159DF JAL 7F05677C ;dump inventory -00000000 NOP -8FA2002C LW V0,002C (SP) -8FA9004C LW T1,004C (SP) ;T1=killer -14490005 *BNE V0,T1,7F089D24 ;branch if not a suicide -00000000 NOP -//7F089D18: BE848 suicides... -0FC1AA86 JAL 7F06AA18 ;increment #suicides and display MP -00000000 NOP -10000018 BEQ R0,R0,7F089D8C -00000000 NOP -//7F089D24: BE854 -0FC1AA57 JAL 7F06A95C ;increment #deaths -00000000 NOP -0FC26C43 JAL 7F09B10C ;set cur. player to A0 -8FA4004C LW A0,004C (SP) ;A0=killer -//7F089D44: BE874 player kills -0FC051D6 JAL 7F014758 ;V0=scenario [8002B540] -24010003 ADDIU AT,R0,0003 -1422000C BNE AT,V0,7F089D84 ;branch if not MwtGX -00000000 NOP -0FC1A4FD JAL 7F0693F4 ;V0=p->MP weapon F7 data - GG slot -240400F7 ADDIU A0,R0,00F7 ;A0=F7: weapon in slot F7: GX -0FC233E0 *JAL 7F08CF80 ;V0!=0 if weapon A0 drawn -90440000 *LBU A0,0000 (V0) ;A0=item type -10400006 *BEQ V0,R0,7F089D70 ;branch if no GX held -3C048008 *LUI A0,8008 -//7F089D5C: BE88C MwtGX specific -8C84A0B4 *LW A0,A0B4 (A0) -8C82001C *LW V0,001C (A0) -2442FFFF *ADDIU V0,V0,FFFF -0FC1AA4F JAL 7F06A93C ;inc. # times killed w/ GX -AC82001C *SW V0,001C (A0) ;GX stole your kill! -//7F089D70: BE8A0 -0FC1A9E0 JAL 7F06A780 ;increment kill count and display MP -00000000 NOP -00000000 NOP -00000000 NOP -//7F089D8C: BE8BC - -oh, and initialize at start of game -//7F00542C: INSERT THIS COMMAND, push all else forward -JAL 7F06A934 ;fries A0,V0 - -and now score... -SP+18 T3 stats -SP+34 A3 Flag/GG/Team byte - T2 total players -SP+38 A1 player# - -yeah, it could be smaller. Seriously though, it isn't that big a deal... - -7F0C38D8: F8408 returns V0=#points - accepts A0=player# -000470C0 SLL T6,A0,0x3 -3C038008 LUI V1,8008 -01C47023 SUBU T6,T6,A0 -24639EF0 ADDIU V1,V1,9EF0 ;V1=player stat offset -000E7100 SLL T6,T6,0x4 ;T6=A0*0x70 (next player) -27BDFFC8 ADDIU SP,SP,FFC8 -006E5821 ADDU T3,V1,T6 ;T3=Player A0's stats -91670069 LBU A3,0069 (T3) ;A3=flag/GG ownership byte -AFBF0014 SW RA,0014 (SP) -AFAB0018 SW T3,0018 (SP) --0FC26919 JAL 7F09A464 ;returns V0=#players -AFA40038 SW A0,0038 (SP) -//trial -0FC051DB *JAL 7F01476C ;V0=scenario::score -AFA20030 SW V0,0030 (SP) -00036025 *OR T4,V1,R0 ;T4=scenario::points -00027025 OR T6,V0,R0 ;T6=scenario::time -00002025 OR A0,R0,R0 ;A0=0: score -8FA50038 LW A1,0038 (SP) ;A1=player# -00003025 OR A2,R0,R0 ;time=0 -0FC044EC *JAL 7F0113B0 ;V0=TRUE if YOLT alone -8FAA0030 -LW T2,0030 (SP) ;T2=# players -00000000 *NOP -1440002B *BNE V0,R0,7F0C3C80 ;branch if YOLT alone... -8FAB0018 LW T3,0018 (SP) ;T3=player stats - -//original -0FC051D6 -JAL 7F014758 ;V0=scenario -AFA20030 -SW V0,0030 (SP) -00020A02 *SRL AT,V0,0x10 ;AT=upper two bytes -00027025 *OR T6,V0,R0 ;T6=scenario -00002025 *OR A0,R0,R0 ;A0=0: score -8FA50038 LW A1,0038 (SP) ;A1=player# -00003025 *OR A2,R0,R0 ;time=0 -8FAA0030 LW T2,0030 (SP) ;T2=# players -14200002 *BNE AT,R0,+2 ;branch if not YOLT - special scoring if alone -31C10001 *ANDI AT,T6,0001 ;AT=FFFF0001: mask for YOLT -1420002B *BNE AT,R0,7F0C3C80 ;branch if YOLT alone... -8FAB0018 LW T3,0018 (SP) ;T3=player stats - -//7F0C3934: F8464 Normal, Licence to Kill, Man with the Golden Gun -2D480005 *SLTIU T0,T2,0005 -1100002C *BEQ T0,R0,7F0C3AF8 ;KILL if invalid character -30EF000F *ANDI T7,A3,000F ;nonzero indicates a team effort -0005C025 *OR T8,A1,R0 ;T8 is first character -;; 0018C880 *SLL T9,T8,0x2 ;player#->offset -//7F0C3948: F847C tally point total (player kills only) - +SLTIU T1,T6,0002 ;TRUE if point scenario 0,1 (norm, MwtGX) - +BEQ T1,R0,7F0C39A8 ;jump to time scenarios -00004025 *OR T0,R0,R0 -01684821 *ADDU T1,T3,T0 -8D220024 *LW V0,0024 (T1) -51190002 *BEQL T0,T9,+2 -00822023 *SUBU A0,A0,V0 -00822021 *ADDU A0,A0,V0 -2D02000C *SLTIU V0,T0,000C -1440FFF9 *BNE V0,R0,7F0C394C -25080004 *ADDIU T0,T0,0004 -//7F0C398C: F84BC POINT SCENERIOS -91620069 *LBU V0,0069 (T3) ;T8=0x69 in player stats... -30420020 *ANDI V0,V0,0020 ;T9=mask for GX -10400004 *BEQ V0,R0,+4 -00000000 *NOP//24010002 *ADDIU AT,R0,0002 ;AT=2: TLD -0FC1AA54 *JAL 7F06A950 ;MwtGX global register -00000000 *NOP -00822021 *ADDU A0,A0,V0 -//7F0C39A8: F84D8 TIME SCENERIOS -0FC30F1D *JAL 7F0C3C74 //142E0002 *BNE AT,T6,+2 ;branch if Flag tag -00001025 *OR V0,R0,R0 //8D620060 *LW V0,0060 (T3) ;V1=flag time -00C23021 *ADDU A2,A2,V0 -//7F0C39B4: determine if team effort -11E00011 *BEQ T7,R0,7F0C3A0C ;jump to scenario-stuff if no teams -27180001 *ADDIU T8,T8,0001 -//7F0C39BC: next character -030A102B *SLTU V0,T8,T2 ;TRUE if # < total players -50400001 *BEQL V0,R0,+1 -0000C025 *OR T8,R0,R0 -//7F0C39C8: correct T3, then figure if rolled around -001858C0 *SLL T3,T8,0x3 -01785823 *SUBU T3,T3,T8 -000B5900 *SLL T3,T3,0x4 -3C028008 *LUI V0,8008 -24429EF0 *ADDIU V0,V0,9EF0 ;V0=base for stats -1305000B *BEQ T8,A1,7F0C3C84 ;jump to scenario-stuff if rolled around -004B5821 *ADDU T3,T3,V0 ;T3=p->player T8's stats -//7F0C39E4: finally, figure if a teammate -91620069 *LBU V0,0069 (T3) -3042000F *ANDI V0,V0,000F -11E2FFDE *BEQ T7,V0,7F0C396C ;add to score if on team -0018C880 *SLL T9,T8,0x2 -//7F0C39F4: -1000FFF1 *BEQ R0,R0,7F0C3994 ;iterate and test next character -27180001 *ADDIU T8,T8,0001 - -//7F0C39FC: You Only Live Twice special handler -91620068 LBU V0,0068 (T3) ;V0=death counter -24010004 *ADDIU AT,R0,0004 ;V1=4 -00222023 *SUBU A0,AT,V0 ;A0=4-death counter -//7F0C3A0C: return -8FBF0014 LW RA,0014 (SP) -27BD0038 ADDIU SP,SP,0038 -00C01825 OR V1,A2,R0 ;V1=time -03E00008 JR RA -00801025 OR V0,A0,R0 ;V0=points - - -Another huge revision, now that scoring needs finalization -//7F0C3934: F8464 Normal, Licence to Kill, Man with the Golden Gun -2D480005 *SLTIU T0,T2,0005 -1100002B *BEQ T0,R0,7F0C3AF8 ;KILL if invalid character -// figure out which players on team and stuff in 8007FF58 -3C198008 LUI T9,8008 -AF20FF58 SW R0,FF58 (T9) -27389EF0 ADDIU T8,T9,9EF0 ;T8=p->stats -00004825 OR T1,R0,R0 -// loopus -24010001 ADDIU AT,R0,0001 -51250007 BEQL T1,A1,+next ;set if this player -A321FF58 SB AT,FF58 (T9) -830F0069 LB T7,0069 (T8) -31EF0007 ANDI T7,T7,0007 ;T7=team flags -11E00003 BEQ T7,R0,+next ;branch if no team -30E20007 *ANDI V0,A3,0007 ;nonzero indicates a team effort -51E20001 BEQL T7,V0,+1 -A321FF58 SB AT,FF58 (T9) -// next -27390001 ADDIU T9,T9,0001 -25290001 ADDIU T1,T1,0001 -012A082B *SLTU AT,T1,T2 ;TRUE if # < total players -1420FFF3 BNE AT,R0,-loopus -27180070 ADDIU T8,T8,0070 - -0005C025 *OR T8,A1,R0 ;T8 is first character -//7F0C3948: F847C tally point total (player kills only) -0FC30E80 JAL 7F0C3A00 ;V0=points for scenario -00001025 OR V0,R0,R0 -00822021 ADDU A0,A0,V0 -//7F0C39A8: F84D8 TIME SCENERIOS -0FC30F19 *JAL 7F0C3C74 //142E0002 *BNE AT,T6,+2 ;branch if Flag tag -00001025 *OR V0,R0,R0 //8D620060 *LW V0,0060 (T3) ;V1=flag time -00C23021 *ADDU A2,A2,V0 -//7F0C39BC: next character -27180001 *ADDIU T8,T8,0001 ;T8=next character -030A102B *SLTU V0,T8,T2 ;TRUE if # < total players -14400003 *BNE V0,R0,+3 -3C028008 *LUI V0,8008 -244B9E80 *ADDIU T3,V0,9E80 ;V0=base for stats-70 -0000C025 *OR T8,R0,R0 -//7F0C39C8: correct T3, then figure if rolled around -1305000A *BEQ T8,A1,7F0C3C84 ;jump to scenario-stuff if rolled around -256B0070 ADDIU T3,T3,0070 -//7F0C39E4: finally, LOOP for each teammate -00581021 ADDU V0,V0,T8 -8042FF58 LB V0,FF58 (V0) -1440FFEF BNE V0,R0,-tally -00000000 NOP -//7F0C39F4: -1000FFF3 *BEQ R0,R0,-next character -00000000 NOP - - -Seperate routine to more easily calculate the point scenarios -currently at 7F0C3A00 F8530 - -T8=cur.player# -2D890003 SLTIU T1,T4,0003 ;TRUE if point scenario 0,1,2 (norm, MwtGX,SnS) -11200011 BEQ T1,R0,7F0C39A8 ;jump to other scenarios -//normal + MwtGX, plus any others that tack into normal scoring -2548FFFF ADDIU T0,T2,FFFF -//loop -00081880 SLL V1,T0,0x2 -01634821 ADDU T1,T3,V1 -8D230024 LW V1,0024 (T1) -3C098008 LUI T1,8008 -0128C821 ADDU T9,T1,T0 -8339FF58 LB T9,FF58 (T9) -54190002 BNEZL T9,+2 -00431023 SUBU V0,V0,V1 ;subtract if friendly -00431021 ADDU V0,V0,V1 ;add if not -1500FFF6 BNE T0,R0,loop -2508FFFF ADDIU T0,T0,FFFF -// MwtGX subsection -91630069 LBU V1,0069 (T3) ;V0=0x69 in player stats... -30630020 ANDI V1,V1,0020 ;V0=mask for GX -54600001 BNEL V1,R0,+1 -8523FF5C LH V1,FF5C (T1) -00621021 ADDU V0,V0,V1 -// Shaken, not Stirred -;; 24090002 ADDIU T1,R0,0002 -;; 152C0001 BNE T1,T4,+return -;; 00000000 NOP -//return -03E00008 JR RA -00000000 NOP - -team scoring: -check players for matching team flag -if match or cur.player, place 1 in register -if zero or differ, place 0 in register -then just look at register to determine if adding or subtracting value - -for team scores, do above then repeat for each matching player - - - - - -Seperate routine to more easily calculate the timed scenarios -currently at 7F0C3C64 F8794 -//Live and Let Die -24010002 ADDIU AT,R0,0002 -142E0006 BNE AT,T6,next -24010001 ADDIU AT,R0,0001 -8D62004C LW V0,004C (T3) -00C2182A SLT V1,A2,V0 ;this works only because increasing float values are incrementally higher -50600002 BEQL V1,R0,+2 ;if old value is larger than new value, abandon new value -00001025 OR V0,R0,R0 ;new value is lost -00003025 OR A2,R0,R0 ;original value is lost -//The Living Daylights -502E0001 BEQL AT,T6,RETURN -8D620060 LW V0,0060 (T3) -//return -03E00008 JR RA -00000000 NOP - -Even crazier: - Make a "tack on scenario score" feature. - Takes the scenario and works out the scoring thingy for each - Yes, that means rewriting the above code, again... - Basically like before, but kills is wrapped into the "score" jump, and all timed are wrapped into time. - If YOLT is alone, special handler grabs that. - -Also need to set scenarios so they use bitflags -Teams will need to set value 1-F, indicating colour -That also means hacking the radar... -This isn't going to be ready by tomorrow... - -7F014758 49288 V0="scenario" bitflags -2404FFFF ADDIU V1,R0,FFFF -3C028003 LUI V0,8003 -9442B540 LHU V0,B540 (V0) -03E00008 JR RA -00441024 AND V0,V0,V1 - -7F01476C 4929C V0=time, V1=point scenarios -3C028003 LUI V0,8003 -9043B543 LBU V1,B543 (V0) -03E00008 JR RA -9042B542 LBU V0,B542 (V0) diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/Shaken, Not Stirred.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/Shaken, Not Stirred.txt deleted file mode 100644 index a80fa59..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/Shaken, Not Stirred.txt +++ /dev/null @@ -1,48 +0,0 @@ - Each type of hit worth a certain value. This is multiplied by accuracy. - To keep within sane limits, 1.00 is 100% accuracy. All displayed values are ints. -head = 4 -body = 2 -else = 1 - -T3=p->stats - -//:7F0C3A4C F857C calculate #hits -24090002 ADDIU T1,R0,0002 -152C001B BNE T1,T4,+return -8D690018 LW T1,0018 (T3) ;V1=object hits (don't count); total hits -8D630014 LW V1,0014 (T3) ;AT=hat hits -8D610010 LW AT,0010 (T3) ;AT=weapon hits -00231821 ADDU V1,V1,AT ;V1=points -8D61000C LW AT,000C (T3) ;AT=limb hits -00231821 ADDU V1,V1,AT -8D610008 LW AT,0008 (T3) ;AT=body hits -00231821 ADDU V1,V1,AT -00694821 ADDU T1,T1,V1 -00231821 ADDU V1,V1,AT -8D610004 LW AT,0004 (T3) ;AT=head hits -00294821 ADDU T1,T1,AT ;total shots -00010880 SLL AT,AT,0x2 -00231821 ADDU V1,V1,AT ;total score -//: calculate accuracy -8D680000 LW T0,0000 (T3) ;V0=total shots -1900000B BLEZ T0,+create ;don't bother if didn't fire -44890000 MTC1 T1,F0 -44882000 MTC1 T0,F4 -46800020 CVT.S.W F0,F0 ;F6=(float) hits -46802120 CVT.S.W F4,F4 ;F18=(float) shots -46040003 DIV.S F0,F0,F4 ;F0=hits * 100.0 / shots -//: create value -44832000 MTC1 V1,F4 -46802120 CVT.S.W F4,F4 ;F18=(float) score -46040002 MUL.S F0,F0,F4 -//: convert to value and add to score -4600000D TRUNC.W.S F0,F0 ;back to word -44030000 MFC1 V1,F0 -00621021 ADDU V0,V0,V1 - - Come to think of it, this would be very messy with teams. Hopefully nobody shoots their buddy... - -+_+ - -registry: -B025.02.00 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/new scenario select.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/new scenario select.txt deleted file mode 100644 index 19a2174..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/new scenario select.txt +++ /dev/null @@ -1,2739 +0,0 @@ -800697F0 borrowed from cheat menu for scenario menu tables - -8002B054 [A2C4] for scenario entries, although could move to TLB -relocated! allocating 0xF0 for these scenarios + 1 dead entry (potentially 20 of each type) -7F0118A8 463D8 -format: -0x0 2 text ID -0x2 1 type flags - E0 RESERVED player lock bitflags. Allow when =1 - 0F type of entry - 02 score scenarios - 01 time scenarios - 00 bitflag entries -0x3 1 RESERVED MP select option mask? - list ends with a null text entry - -800697C8 1-highlighted score option -800697C9 1-highlighted time option -800697CA highlighted bitflag or -1 - -800697F0 p->bitflag options -800697F4 p->time options -800697F8 p->score options -800697FC #bitflag options -800697FD #time options -800697FE #score options -800697FF bitflag offset, used for entries 8-16 -80069800 start data tables - Table consists of entry numbers to offset into the original entry table - Order is essential! Order of entries indicates which flags are used and must match hardcoded entries! - -Filling is easy. - Loop 3 times - pull entry type - test against loop # - if match, add matching index to corresponding table and increase count - save total entries - -To potentially support 16 bitflag entries, activate "next" if over 8 entries - Then, set it to offset 8 in the bitflag list. - The scenario types will still appear on both pages. - -scenario flags stats+0x69 -07 RGBA value -08 "team selected" flag, though don't need to copy it actually -10 The Living Daylights -20 MwtGX - - -+_+ - -Initialize: -7F014784 (probably move) initialize scenario select menu -better yet, write this code and manage a jump to 7F014784 -admittantly, this could be better written -7F013598 480C8 -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -//process a list of stuff -3C018007 LUI AT,8007 -24389800 ADDIU T8,AT,9800 ;output point -0000C825 OR T9,R0,R0 ;iteration - do this 3 times -//type -00002025 OR A0,R0,R0 ;count of entries -00004025 OR T0,R0,R0 ;count of entries for type -00191080 SLL V0,T9,0x2 -00221821 ADDU V1,AT,V0 ;V1=800697F0+offset -AC7897F0 SW T8,97F0 (V1) -//entry -0FC04D60 *JAL 7F013580 ;V0=text ID, V1=type -00000000 *NOP -10400008 *BEQ V0,R0,iterate ;try next type if NULL text -30620003 *ANDI V0,V1,0003 ;V0=type -14590004 BNE V0,T9,next ;try next entry if this doesn't match -25CE0004 ADDIU T6,T6,0004 -//hit -A3040000 SB A0,0000 (T8) ;save hit to table -27180001 ADDIU T8,T8,0001 ;iterate table -25080001 ADDIU T0,T0,0001 -//next -1000FFF6 BEQ R0,R0,entry -24840001 ADDIU A0,A0,0001 -//iterate -00391021 ADDU V0,AT,T9 -A04897FC SB T0,97FC (V0) ;save #entries for type -2F220002 SLTIU V0,T9,0002 -1440FFEC BNE V0,R0,type ;loop for all three types -27390001 ADDIU T9,T9,0001 -//then the generic stuff -0BC051E3 J 7F01478C ;generic initialize -A02097FF SB R0,97FF (AT) -//return - -generic bit is -0->8002A8D0-8002A8E4 -then JAL 7F00B8AC - - -Use this to pull values easier -7F013580 480B0 pull V0=text ID, V1=type for scenario entry A0 -00041080 SLL V0,A0,0x2 -3C038003 LUI V1,8003 -00431821 ADDU V1,V1,V0 -9462B054 LHU V0,B054 (V1) -03E00008 JR RA -9063B056 LBU V1,B056 (V1) - - -Constructor: -7F014A48 49578 Menu 13 Constructor: Scenario Select -27BDFF68 ADDIU SP,SP,FF68 -AFBF005C SW RA,005C (SP) -AFBE0058 SW S8,0058 (SP) -AFB70054 SW S7,0054 (SP) -AFB60050 SW S6,0050 (SP) -AFB5004C SW S5,004C (SP) -AFB40048 SW S4,0048 (SP) -AFB30044 SW S3,0044 (SP) -AFB20040 SW S2,0040 (SP) -AFB1003C SW S1,003C (SP) -AFB00038 SW S0,0038 (SP) -00002825 OR A1,R0,R0 -00003025 OR A2,R0,R0 -0C0011B4 JAL 700046D0 ;setfillcolour("black") -00003825 OR A3,R0,R0 -0C000FBE JAL 70003EF8 ;fillrect() -00022025 OR A0,V0,R0 -0FC0357A JAL 7F00D5E8 -00022025 OR A0,V0,R0 -0FC2B366 JAL 7F0ACD98 -00022025 OR A0,V0,R0 -00028025 *OR S0,V0,R0 ;S0=V0: DL -3C1E8007 `LUI S8,8007 -//7F014AA0: Page Title -0FC30776 JAL 7F0C1DD8 ;ret V0=p->text A0 -34049C57 ORI A0,R0,9C57 ;A0="scenario:" -24040037 *ADDIU A0,R0,0037 -2405005F *ADDIU A1,R0,005F -0FC046B5 *JAL 7F011AD4 ;display::black -00023825 *OR A3,V0,R0 -//7F014AB8: Score Scenario select box -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -3404xxxx *ORI A0,R0,xxxx ;A0=xxxx: "Score:" -83CE97C8 `LB T6,97C8 (S8) ;T5=800697C8: TRUE if highlighted "Players" -11C00005 *BEQ T6,R0,7F014ADC ;branch if not highlighted -AFA20064 *SW V0,0064 (SP) ;SP+64=p->text -//7F014ACC: highlight -24040039 *ADDIU A0,R0,0039 -24050079 *ADDIU A1,R0,0079 -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F014ADC: display text -24040039 *ADDIU A0,R0,0039 -24050079 *ADDIU A1,R0,0079 -0FC046B5 *JAL 7F011AD4 ;display::black -8FA70064 *LW A3,0064 (SP) ;p->text -//7F014AEC: Time Scenario select box -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -34049C69 ORI A0,R0,9C69 ;A0=xxxx: "Time:" -83CE97C9 `LB T6,97C9 (S8) ;T5=800697C8: TRUE if highlighted " -11C00005 *BEQ T6,R0,7F014B10 ;branch if not highlighted -AFA20064 SW V0,0064 (SP) -//7F014B00: draw highlight box -24040039 *ADDIU A0,R0,0039 -2405008D *ADDIU A1,R0,008D -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F014B10: display text -24040039 *ADDIU A0,R0,0039 -2405008D *ADDIU A1,R0,008D -0FC046B5 *JAL 7F011AD4 ;display::black -8FA70064 *LW A3,0064 (SP) ;p->text -//7F014B20: selected scenarios -8FC597F4 `LW A1,97F4 (S8) ;A1=800697F4: p->entries for time scenario -0FC051DB JAL 7F01476C ;V0/V1=selected scenarios -8FC497F8 `LW A0,97F8 (S8) ;A0=800697F8: p->entries for score scenario -00832021 ADDU A0,A0,V1 ;A0+=selected entry: p->score scenario entry -00A22821 ADDU A1,A1,V0 ;A1+=selected entry: p->time scenario entry -AFA50064 SW A1,0064 (SP) ;save time scenario until next iteration -24140079 ADDIU S4,R0,0079 -//7F014B3C: 4966C score, then time -0FC04D60 `JAL 7F013580 -90840000 LBU A0,0000 (A0) ;A0=entry# for score scenario -// Borrowed 2 lines -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID -00022025 *OR A0,V0,R0 -240400A0 *ADDIU A0,R0,00A0 -00142825 OR A1,R0,S4 -24060001 *ADDIU A2,R0,0001 -0FC046B0 *JAL 7F011AC0 ;display::mask -00023825 *OR A3,V0,R0 -2E81008D SLTIU AT,S4,008D -26940014 ADDIU S4,S4,0014 ;S4+=20: next line. Used in bitflag scenarios as well -1420FFF4 BNE AT,R0,7F014B3C -8FA40064 LW A0,0064 (SP) -//7F014B78: Bitflag scenarios -0FC051D6 *JAL 7F014758 ;V0=scenario::flags -8FD397F0 `LW S3,97F0 (S8) ;S3=p->entries appearing in table -0002B825 *OR S7,V0,R0 ;S3=bitflags -93D697FF `LBU S6,97FF (S8) ;AT=8 if page 2; first entry # appearing on page -93D597FC `LBU S5,97FC (S8) ;S1=total entries -02B68823 *SUBU S1,S5,S6 ;S1=entries-offset, to correct number to appear on page -2E210008 *SLTIU AT,S1,0008 -50200001 *BEQL AT,R0,+1 -00008825 *OR S1,R0,R0 -02769821 *ADDU S3,S3,S6 ;S3=p->entries + offset to first -00009025 OR S2,R0,R0 ;S2=0: count=0 -//7F014B98: 496C8 display next eight bitflag scenarios -0FC04D60 `JAL 7F013580 -92640000 *LBU A0,0000 (S3) ;p->entry# -// borrowed two lines -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID -00022025 *OR A0,V0,R0 -83CE97CA `LB T6,97CA (S8) ;T5=80069780: TRUE if highlighted " -15D20005 *BNE T6,S2,7F014BCC ;branch if not highlighted -AFA20064 SW V0,0064 (SP) -//7F014BBC: draw highlight box -24040059 *ADDIU A0,R0,0059 -00142825 *OR A1,R0,S4 ;vertical position -0FC046CE *JAL 7F011B38 ;box::default -00023025 *OR A2,V0,R0 -//7F014BCC: display text -24040059 *ADDIU A0,R0,0050 -00142825 *OR A1,R0,S4 ;vertical position -0FC046B5 *JAL 7F011AD4 ;display::black -8FA70064 *LW A3,0064 (SP) ;p->text -//7F014BDC: 4970C detect flags -02560821 *ADDU AT,S6,S2 -00370807 *SRAV AT,S7,AT ;leading bit now the one you want -30210001 ANDI AT,AT,0001 ;TRUE if flag set -1020000C BEQ AT,R0,7F014C1C -AFB00064 *SW S0,0064 (SP) ;SP+64=p->DL -//7F014BF0: 49720 draw a checkmark -// note: since this must be embedded here and text follows, link in an additional jump to 7F0AD0DC [E1C0C] -// 7F0AD0DC: set V1=DL, return V0=new DL; fries T2,T7 -27A40064 *ADDIU A0,SP,0064 ;A0=DL -3C058009 LUI A1,8009 -8CA5D128 LW A1,D128 (A1) ;A1=8008D128: p->folder images -24A50030 ADDIU A1,A1,0030 ;A1=p->checkmark -00143825 *ADDIU A3,S4,000A ;A3=ypos -24010004 ADDIU AT,R0,0004 ;AT=vert flip -AFA10010 SW AT,0010 (SP) -0FC04667 JAL 7F0119A4 ;gen.image::red (checkmark, X) -24060043 ADDIU A2,R0,0043 ;A2=xpos -8FB00064 *LW S0,0064 (SP) ;SP+64=p->DL -//7F014C1C: loop for each entry -26730001 *ADDIU S3,S3,0001 -26520001 ADDIU S2,S2,0001 -0251082B SLTU AT,S2,S1 -1420FFDB BNE AT,R0,7F014B98 -26940014 ADDIU S4,S4,0014 ;S4+=20: next line. Used in bitflag scenarios as well -// since it doesn't fit, tack in a redirect to handle lower right column -0FC04604 *JAL 7F011810 ;lower right column -00000000 *NOP - -//7F014C34 49764 set details -26A1FFF8 *ADDIU AT,S5,FFF8 -04200003 BLTZ AT,+3 ;write tab if 9-16 entries -00101025 *OR V0,S0,R0 -0FC02905 JAL 7F00A414 ;add tab 2: "NEXT" -00022025 OR A0,V0,R0 -0FC0288E JAL 7F00A238 ;add tab 3: "PREVIOUS" -00022025 OR A0,V0,R0 -0FC027C2 JAL 7F009F08 ;loads selected icon for folder select -00022025 OR A0,V0,R0 -// return -8FBF005C LW RA,005C (SP) -8FB00038 LW S0,0038 (SP) -8FB1003C LW S1,003C (SP) -8FB20040 LW S2,0040 (SP) -8FB30044 LW S3,0044 (SP) -8FB40048 LW S4,0048 (SP) -8FB5004C LW S5,004C (SP) -8FB60050 LW S6,0050 (SP) -8FB70054 LW S7,0054 (SP) -8FBE0058 LW S8,0058 (SP) -03E00008 JR RA -27BD0098 ADDIU SP,SP,0098 - -7F011810 46340 lower right column redirect (won't fit otherwise) - YOLT# 0100 00A1 - teams 0100 00B5 - only S5 and S0 matter at this point, so you can the other SX's -27BDFF80 ADDIU SP,SP,FF80 -AFBF007C SW RA,007C (SP) -// "Live %i Time%s" -0FC04117 JAL 7F01045C ;#lives (YOLT) -83D497CB LB S4,97CB (S8) ;T5=800697C8: which option is highlighted (-1 default, # otherwise) -00023025 OR A2,V0,R0 ;A2=lives (replace %i) -0FC046ED JAL 7F011BB4 ;plural -00022025 OR A0,V0,R0 -AFA2001C SW V0,001C (SP) ; -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -3404B033 ORI A0,R0,B033 ;A0=9c58: "Select Teams" -27A40040 ADDIU A0,SP,0020 -00022825 OR A1,V0,R0 ;A1=src.string -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -27A7001C ADDIU A3,SP,001C -// draw highlight box -16800004 BNE S4,R0,+4 ;branch if not highlighted -27A60040 ADDIU A2,SP,0020 -24040100 ADDIU A0,R0,0100 -0FC046CE JAL 7F011B38 ;box::default -240500A1 ADDIU A1,R0,00A1 -// display text -24040100 ADDIU A0,R0,0100 -240500A1 ADDIU A1,R0,00A1 -0FC046B5 JAL 7F011AD4 ;display::black -27A70040 ADDIU A3,SP,0020 ;p->text -// -// display "Select Teams" -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -34049C58 ORI A0,R0,9C58 ;A0=9c58: "Select Teams" -1A800005 BLEZ S4,+5 ;branch if not highlighted -AFA20078 SW V0,0078 (SP) -//: draw highlight box -24040100 ADDIU A0,R0,0100 -240500B5 ADDIU A1,R0,00B5 -0FC046CE JAL 7F011B38 ;box::default -00023025 OR A2,V0,R0 -//: display text -24040100 *ADDIU A0,R0,0100 -240500B5 *ADDIU A1,R0,00B5 -0FC046B5 *JAL 7F011AD4 ;display::black -8FA70078 *LW A3,0078 (SP) ;p->text -// return -8FBF007C LW RA,007C (SP) -03E00008 JR RA -27BD0080 ADDIU SP,SP,0080 - - -+_+ - -Very important: plaster generic image to location - -7F0119B4/C 464E4 draw image to screen - accepts: A0=p->DL, A1=p->img.decl., A2=xpos, A3=ypos, SP+10=type | flip (4=vert, 2=horz, 1=rot), SP+14=colour (opt.) - -//7F01199C: 464CC red as default; used by checkmarks, X's, and a few other things -3C01B400 LUI AT,B400 -10000002 BEQ R0,R0,+2 -342100FF ORI AT,AT,00FF -//7F0119A8: 464D8 white as default -2401FFFF ADDIU AT,R0,FFFF -AFA10010 SW AT,0014 (SP) -//7F0119B0: 464E0 normal operation: feed it SP+14=colour -27BDFF90 ADDIU SP,SP,FF90 ;SP-70 -AFBF006C SW RA,006C (SP) -AFB00068 SW S0,0068 (SP) -AFB20064 SW S2,0064 (SP) -00049025 OR S2,A0,R0 ;S2=p->DL -00058025 OR S0,A1,R0 ;S0=p->img.decl. -//7F0119C8: 464F8 -3C013F00 LUI AT,3F00 -44810000 MTC1 AT,F0 ;F0=0.5 [3F000000] -44864000 MTC1 A2,F8 -46804120 CVT.S.W F4,F8 ;F4=xpos -44874000 MTC1 A3,F8 -E7A40048 SWC1 F4,0048 (SP) ;SP+9C= (float) x position -46804120 CVT.S.W F4,F8 ;F4=ypos -92090004 LBU T1,0004 (S0) ;T0=width -E7A4004C SWC1 F4,004C (SP) ;SP+A0= (float) y position -44894000 MTC1 T1,F8 -468041A0 CVT.S.W F6,F8 ;F6=(float) width -3C014F80 LUI AT,4F80 -05210002 BGEZ T1,+2 ;branch if not negative -44815000 MTC1 AT,F10 ;F10=4294967296.0 [4F800000] -460A3180 ADD.S F6,F6,F10 -//7F011A04: -46003282 MUL.S F10,F6,F0 ;F16=(float) width * 0.5 -E7AA0040 SWC1 F10,0040 (SP) ;SP+94=(float) width -92090005 LBU T1,0005 (S0) ;T4=height -44894000 MTC1 T1,F8 -468041A0 CVT.S.W F6,F8 ;F18=(float) height -05210002 BGEZ T1,+2 ;branch if not negative -93A60082 *LBU A2,0082 (SP) ;A2=format ??? -460A3180 ADD.S F6,F6,F10 -//7F011A24: -46003282 MUL.S F10,F6,F0 ;F10=(float) height * 0.5 -00003825 OR A3,R0,R0 ;A3=0 ??? -AFA00010 SW R0,0010 (SP) ;SP+10=0 ??? -0FC1DB5A JAL 7F076D68 ;generates a display list for image declaration A1 -E7AA0044 SWC1 F10,0044 (SP) ;SP+98=(float) height -//7F011A38: -92070004 LBU A3,0004 (S0) ;width -920F0005 LBU T7,0005 (S0) ;height -AFAF0010 SW T7,0010 (SP) ;SP+10= image height -93A90087 LBU T1,0087 (SP) -AFA9002C SW T1,002C (SP) ;SP+2C= alpha FF -93A90086 LBU T1,0086 (SP) -AFA90028 SW T1,0028 (SP) ;SP+28= green FF -93A90085 LBU T1,0085 (SP) -AFA90024 SW T1,0024 (SP) ;SP+24= blue FF -93A90084 LBU T1,0084 (SP) -AFA90020 SW T1,0020 (SP) ;SP+20= red FF -93A90083 LBU T1,0083 (SP) ;T1=flip -312F0001 ANDI T7,T1,0001 -AFAF0014 SW T7,0014 (SP) ;SP+14= don't rotate left 90deg. -312F0002 ANDI T7,T1,0002 -AFAF0018 SW T7,0018 (SP) ;SP+18= no horizontal flip -312F0004 ANDI T7,T1,0004 -AFAF001C SW T7,001C (SP) ;SP+1C= flip vertically -920F0006 LBU T7,0006 (S0) ;T3=format -AFA00034 SW R0,0034 (SP) ;SP+34= ??? 0 -00122025 OR A0,S2,R0 ;A0=S2: DL -000F482A SLT T1,R0,T7 -AFA90030 SW T1,0030 (SP) ;SP+30: !format -27A50048 ADDIU A1,SP,0048 ;A1=SP+9C: p->positions -0FC1ABFA JAL 7F06AFE8 ;display image at position on screen -27A60040 ADDIU A2,SP,0040 ;A2=SP+94: p->dimentions -//7F011AA0: this allows you to immediately follow the image with text. It only burns 8 bytes either way, so it won't break the bank -0FC2B436 JAL 7F0AD0D8 ;sets combiner back to normal setting !TEST! 0FC0D294 -8E430000 LW V1,0000 (S2) -AE420000 SW V0,0000 (S2) -//7F011AAC: return -8FB20064 LW S2,0064 (SP) -8FB00068 LW S0,0068 (SP) -8FBF006C LW RA,006C (SP) -03E00008 JR RA -27BD0070 ADDIU SP,SP,0070 ;SP-70 -//7F011AC0: 465F0 - -apparently normal combiner for text -BA001402 00000000 cycle type: 1 cycle -BA000602 000000C0 rgb dither: disable -B900031D 005041C8 render mode: antialias enable, image read, clear on converge, converge delta-ST wrap, force blender, blend colour in, blend colour blender -FCFF97FF FF2DFEFF -BA001301 00000000 texture lut: none -B9000002 00000000 alpha compare: none -BA001001 00000000 texture lod: tile -BA000903 00000C00 texture convert: filter -BA000E02 00000000 texture lut: none -BA000C02 00002000 texture filter: bi-level interpretation -trouble likely isn't with the combiner but with the rendermode options -What I wouldn't give for some documentation on this stuff... - -as a test, see what this does: -7F034A50 69580 !test only! -3C02BA00 LUI V0,BA00 -AC620000 SW V0,0000 (V1) ;BA001402 00000000 cycle type: 1 cycle -AC600004 SW R0,0004 (V1) -AC620008 SW V0,0008 (V1) ;BA000602 000000C0 rgb dither: disable -AC620020 SW V0,0020 (V1) ;BA001301 00000000 texture lut: none -AC600024 SW R0,0024 (V1) -AC620030 SW V0,0030 (V1) ;BA000908 00002C00 texture convert: filter, texture filter: bi-level interpretation, texture lut: none, texture lod: tile -3C02B900 LUI V0,B900 -AC620010 SW V0,0010 (V1) ;B900031D 005041C8 render mode: antialias enable, image read, clear on converge, converge delta-ST wrap, force blender, blend colour in, blend colour blender -AC620028 SW V0,0028 (V1) ;B9000002 00000000 alpha compare: none -AC60002C SW R0,002C (V1) -34021402 ORI V0,R0,1402 -A4620002 SH V0,0002 (V1) -34020602 ORI V0,R0,0602 -A462000A SH V0,000A (V1) -340200C0 ORI V0,R0,00C0 -AC62000C SW V0,000C (V1) -34021301 ORI V0,R0,1301 -A4620022 SH V0,0022 (V1) -34020908 ORI V0,R0,0908 -A4620032 SH V0,0032 (V1) -34022C00 ORI V0,R0,2C00 -AC620034 SW V0,0034 (V1) -3402031D ORI V0,R0,031D -A4620012 SH V0,0012 (V1) -3C020050 LUI V0,0050 -344241C8 ORI V0,V0,41C8 -AC620014 SW V0,0014 (V1) -34020002 ORI V0,R0,0002 -A462002A SH V0,002A (V1) -3C02FCFF LUI V0,FCFF -344297FF ORI V0,V0,97FF ;FCFF97FF FF2DFEFF -AC620018 SW V0,0018 (V1) -3C02FF2D LUI V0,FF2D -3442FEFF ORI V0,V0,FEFF -AC62001C SW V0,001C (V1) -03E00008 JR RA -24620038 ADDIU V0,V1,0038 - -+_+ - -hack the folder select menu to use the new image command -//7F00CEA4: 419D4 rig up rollover detection -3C138003 LUI S3,8003 -AFA201B8 SW V0,01B8 (SP) -27B201B8 ADDIU S2,SP,01B8 -3C014351 LUI AT,4351 -AE61ABC4 SW AT,ABC4 (S3) ;copy-left bound -3C01439F LUI AT,439F -AE61ABD4 SW AT,ABD4 (S3) ;erase-left bound -8FA100F8 LW AT,00F8 (SP) ;copy text width -242100F7 ADDIU AT,AT,00F7 -44814000 MTC1 AT,F8 -3C014387 LUI AT,4387 -468042A0 CVT.S.W F10,F8 -AE61ABC8 SW AT,ABC8 (S3) ;copy-upper bound -AE61ABD8 SW AT,ABD8 (S3) ;erase-upper bound -E66AABCC SWC1 F10,ABCC (S3) ;copy-right bound -8FA100F4 LW AT,00F4 (SP) ;erase text width -24210165 ADDIU AT,AT,0165 -44814000 MTC1 AT,F8 -3C014395 LUI AT,4395 -468042A0 CVT.S.W F10,F8 -AE61ABD0 SW AT,ABD0 (S3) ;copy-lower bound -AE61ABE0 SW AT,ABE0 (S3) ;erase-lower bound -E66AABDC SWC1 F10,ABDC (S3) ;erase-right bound -//7F00CF00: 41A30 copy icon -00122025 OR A0,S2,R0 -3C058009 LUI A1,8009 -8CA5D128 LW A1,D128 (A1) ;A1=p->copy img.decl. -24010004 ADDIU AT,R0,0004 -AFA10010 SW AT,0010 (SP) ;SP+10: mirror vertically -240600E1 ADDIU A2,R0,00E1 ;A2=xpos -0FC0466B JAL 7F0119AC ;place image::white -2407011D ADDIU A3,R0,011D ;A3=ypos -//7F00CF20: 41A50 erase icon -00122025 OR A0,S2,R0 -3C058009 LUI A1,8009 -8CA5D128 LW A1,D128 (A1) -24A5000C ADDIU A1,A1,000C ;A1=p->erase img.decl. -24010004 ADDIU AT,R0,0004 -AFA10010 SW AT,0010 (SP) ;SP+10: mirror vertically -2406014F ADDIU A2,R0,014F ;A2=xpos -0FC0466B JAL 7F0119AC ;place image::white -2407011D ADDIU A3,R0,011D ;A3=ypos -//7F00CF44: 41A74 Select Mission -00122025 OR A0,S2,R0 -3C058009 LUI A1,8009 -8CA5D128 LW A1,D128 (A1) -24A5000C ADDIU A1,A1,0018 ;A1=p->select mission img.decl. -24010004 ADDIU AT,R0,0004 -AFA10010 SW AT,0010 (SP) ;SP+10: mirror vertically -2406006E ADDIU A2,R0,006E ;A2=xpos -0FC0466B JAL 7F0119AC ;place image::white -2407011D ADDIU A3,R0,011D ;A3=ypos -//7F00CF68: 41A98 - -+_+ - -rig up the sight scenario -7F0101D8 44D08 -LUI AT,8008 -LUI V0,8003 -ADDIU T6,R0,0003 -//7F0101E4 -LHU A0,B540 (V0) -ANDI A0,A0,0008 ;flag for a view to a kill -BNEL A0,R0,+2 -OR A0,R0,R0 -LBU A0,B53C (V0) -SRL V1,A0,0x1 -ANDI V1,V1,0001 -ANDI A0,A0,0001 -SB V1,9F5A (AT) -SB A0,9F5B (AT) -ADDIU AT,AT,0070 -ADDIU V0,V0,0000 -BNEZ T6,7F0101E4 -ADDIU T6,T6,FFFF -JR RA -NOP - - -+_+ - -Scenario menu interface rewrite -800697C8 1-highlighted score option -800697C9 1-highlighted time option -800697CA highlighted bitflag or -1 - -7F0147B8 492E8 Menu 13 interface - MP scenario select -27BDFFD0 ADDIU SP,SP,FFD0 -3C014270 LUI AT,4270 -AFBF0024 SW RA,0024 (SP) -44816000 MTC1 AT,F12 -AFB20020 SW S2,0020 (SP) -AFB1001C SW S1,001C (SP) -AFB00018 SW S0,0018 (SP) -0C001151 JAL 70004544 -AFA0002C SW R0,002C (SP) -3C018005 LUI AT,8005 -0C001164 JAL 70004590 -C42C1AA8 LWC1 F12,1AA8 (AT) -3C0142C8 LUI AT,42C8 -44816000 MTC1 AT,F12 -3C018005 LUI AT,8005 -0C001194 JAL 70004650 -C42E1AAC LWC1 F14,1AAC (AT) -0C00114D JAL 70004534 -00002025 OR A0,R0,R0 -//7F01499C: construct folder -3C108003 LUI S0,8003 -2610A95C ADDIU S0,S0,A95C -0FC02DC9 JAL 7F00B724 ;disable all switches in object A0 (hide all) -8E040000 LW A0,0000 (S0) -8E040000 LW A0,0000 (S0) -00002825 OR A1,R0,R0 ;A1=item 0: -0FC02DF0 JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -24060001 ADDIU A2,R0,0001 ;A2=ON -8E040000 LW A0,0000 (S0) -24050001 ADDIU A1,R0,0001 ;A1=item 1: -0FC02DF0 JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -24060001 ADDIU A2,R0,0001 ;A2=ON -8E040000 LW A0,0000 (S0) -24050003 ADDIU A1,R0,0003 ;A1=item 3: -0FC02DF0 JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -24060001 ADDIU A2,R0,0001 ;A2=ON -8E040000 LW A0,0000 (S0) -24050006 ADDIU A1,R0,0006 ;A1=item 6: -0FC02DF0 JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -24060001 ADDIU A2,R0,0001 ;A2=ON -0FC026E1 JAL 7F009B84 ;control stick tracking -00008825 *OR S1,R0,R0 -//7F01485C: -2401FFFF *ADDIU AT,R0,FFFF -3C0E8007 *LUI T6,8007 -ADC097C8 *SW R0,97C8 (T6) ;reset all page highlighting -A5C197CA *SH AT,97CA (T6) ;default for bitflags is -1 -//7F01486C: detect highlight tab 3 -3C0F8003 *LUI T7,8003 -0FC028E7 -JAL 7F00A39C ;V0=TRUE if cursor on tab 3 -ADE0A8DC *SW R0,A8DC (T7) ;0->8002A8E4: 1- highlight folder tab 1 -1440002B *BNE V0,R0,+controller -ADE2A8E4 *SW V0,A8E4 (T7) ;0->8002A8E4: 1- highlight folder tab 3 -//7F014880: detect highlight tab 2 -91E897FC *LBU T0,97FC (T7) ;T0=#bitflag scenarios -2C280008 *SLTIU AT,T0,0008 -14200005 *BNE AT,R0,+buttons -ADE0A8E0 *SW R0,A8E0 (T7) ;0->8002A8E4: 1- highlight folder tab 2 -0FC0295E *JAL 7F00A578 ;V0=TRUE if cursor on tab 2 -00000000 *NOP -14400023 *BNE V0,R0,+controller -ADE2A8E0 *SW V0,A8E0 (T7) ;0->8002A8E0: 1- highlight folder tab 2 -//7F0148A0: highlight buttons -C5E4A90C -LWC1 F4,A90C (T7) ;F4=(float) vertical screen position on menus -4600218D -TRUNC.W.S F6,F4 -C5E4A908 *LWC1 F4,A908 (T7) ;F4=(float) vertical screen position on menus -44193000 -MFC1 T9,F6 ;T9=vertical pos. -4600218D *TRUNC.W.S F6,F4 -//7F0148B8: score scenario -2F21008D *SLTIU AT,T9,008D -44183000 *MFC1 T8,F6 ;T8=horzontal pos. -5420001A *BNEL AT,R0,+controller -A1C197C8 *SB AT,97C8 (T6) ;800697C8= highlight score -//7F0148C8: time scenario -2F2100A1 *SLTIU AT,T9,00A1 -54200017 *BNEL AT,R0,+controller -A1C197C9 *SB AT,97C9 (T6) ;800697C9= highlight time -//7F0148D4: any special-case stuff goes here -2F010100 *SLTIU AT,T8,0100 -14200006 *BNE AT,R0,+bitflags ;branch if left side -2F2100B5 *SLTIU AT,T9,00B5 -54200012 *BNEL AT,R0,+controller ;#lives -A1C097CB *SB R0,97CB (T6) -2F2100C9 *SLTIU AT,T9,00C9 -5420000F *BNEL AT,R0,+controller ;team setup -A1C197CB *SB AT,97CB (T6) -//7F0148F8: bitflag scenarios -240900B5 *ADDIU T1,R0,00B5 ;vertical for first option -91E197FF *LBU AT,97FF (T7) ;AT=offset in option list -01019023 *SUBU S2,T0,AT ;S2=total-offset -2E410008 *SLTIU AT,S2,0008 -50200001 *BEQL AT,R0,+1 -24120008 *ADDIU S2,R0,0008 -//7F014910: loop for each entry -0329082B *SLTU AT,T9,T1 -54200004 *BNEL AT,R0,+controller -A1D197CA *SB S1,97CA (T6) ;800697CA= highlight option #S1 -26310001 *ADDIU S1,S1,0001 -1632FFFB *BNE S1,S2,-loop -25290014 *ADDIU T1,T1,0014 -//7F014928: controller detection -00002025 -OR A0,R0,R0 -0C0030EB -JAL 7000C3AC ;V0= player A0's buttons A1 pressed -3405F000 -ORI A1,R0,F000 ;A1=A, Z, B, Start buttons -30418000 *ANDI AT,V0,8000 -54200002 *BNEL AT,R0,+2 -24110001 *ADDIU S1,R0,0001 -2411FFFF *ADDIU S1,R0,FFFF -1040003B -BEQ V0,R0,+return ;branch if not pressed -30525000 *ANDI S2,V0,5000 ;start, B button -//7F01494C: play sound effect -3C048006 -LUI A0,8006 -8C843720 -LW A0,3720 (A0) -240500C7 -ADDIU A1,R0,00C7 -0C002382 -JAL 70008E08 ;play sound effect A1 -00003025 -OR A2,R0,R0 -//7F014960 redirect to proper handler -3C0F8003 *LUI T7,8003 -8DE2A8E4 *LW V0,A8E4 (T7) ;8002A8E4: 1- highlight folder tab 3 -14400003 *BNEZ V0,+backtrack -2404000E -ADDIU A0,R0,000E ;A0=E: MP options -12400004 *BEQ S2,R0,+selected ;branch if A or Z (selected highlighted option) -8DE1A8E0 *LW AT,A8E0 (T7) ;8002A8E0: 1- highlight folder tab 2 -//7F014978: backtrack -0FC06975 -JAL 7F01A5D4 ;set to menu A0 to mode A1 -00002825 -OR A1,R0,R0 ;A1=0: current -1000002B *BEQ R0,R0,+return -//7F014984: handle selected option: tab 2 -3C0E8007 *LUI T6,8007 -10200005 *BEQ AT,R0,+score -91C197FF *LBU AT,97FF (T6) -24210008 *ADDIU AT,AT,0008 -3021000F *ANDI AT,AT,000F -10000024 *BEQ R0,R0,+return -A1C197FF *SB AT,97FF (T6) -//7F0149A0: handle selecting score -81C197C8 *LB AT,97C8 (T6) ;score selected -91C697FE *LBU A2,97FE (T6) ;A1=800697FE: #score scenarios -54200005 *BNEL AT,R0,+score/time -25E4B543 *ADDIU A0,T7,B543 -81C197C9 *LB AT,97C9 (T6) ;time selected -91C697FD *LBU A2,97FD (T6) ;A1=800697FD: #time scenarios -10200005 *BEQ AT,R0,+bitflags -25E4B542 *ADDIU A0,T7,B542 -//7F0149C0: score/time -0FC04F5E *JAL 7F013D78 ;generic thingy advance::default -00112825 *OR A1,R0,S1 -10000019 *BEQ R0,R0,return -00000000 *NOP -//7F0149D0: bitflag scenarios -81C197CA *LB AT,97CA (T6) ;AT=bitflag selected (-1 is none) -04200008 *BLTZ AT,R0,+more -91C297FF *LBU V0,97FF (T6) ;V0=offset in flag register -00220821 *ADDU AT,AT,V0 ;AT=bitflag# -24020001 *ADDIU V0,R0,0001 -00220804 *SLLV AT,V0,AT ;AT=1<value, A1=inc/decrement, A2=maximum value, A3=minimum value (opt., def=0) - fries: AT -00003825 OR A3,R0,R0 -//7F013D7C 488AC set your minimum -90820000 LBU V0,0000 (A0) -00451021 ADDU V0,V0,A1 -0046082A SLT AT,V0,A2 ;TRUE if new value < max -50200001 BEQL AT,R0,+1 -00071025 OR V0,R0,A3 -0047082A SLTU AT,V0,A3 ;TRUE if new value < min -54200001 BNEL AT,R0,+1 -00C61021 ADDU V0,A2,A1 -03E00008 JR RA -A0820000 SB V0,0000 (A0) - -+_+ - -Must revise "end of game" condition for You Only Live Twice - -REVISION: -//7F0BEFB8: F3AE8 You Only Live Twice -0FC051D7 JAL 7F01475C ;RETURNS V0=scenario -24030001 ADDIU V1,R0,0001 -3C0F8005 -LUI T7,8005 -10400086 BEQ V0,R0,7F0BF1E0 ;branch if not "You Only Live Twice" -8DEF8374 LW T7,8374 (T7) -11E00084 BEQ T7,R0,7F0BF1E0 ;branch if game running -00006825 -OR T5,R0,R0 ;T5=0 iterate! -0FC26919 -JAL 7F09A464 ;V0=#players -00003025 -OR A2,R0,R0 ;A2=0 total fools deceased -244AFFFF *ADDIU T2,V0,FFFF ;T2=V0=#PLAYERS-1, so 0-3 instead of 1-4 -0FC04117 JAL 7F01045C ;#lives (YOLT) -3C188008 -LUI T8,8008 -0002C825 *OR T9,V0,R0 ;T9=#lives -00007825 *OR T7,R0,R0 ;T7 reserved for dead player flags -//7F0BEFF0: F3B20 -8F029EE0 -LW V0,9EE0 (T8) ;T8=p->BONDdata -1040000A *BEQ V0,R0,+recycle -27180004 *ADDIU T8,T8,0004 ;T8+=4 next BONDdata pointer -// grab each player's #deaths -8C4529D8 *LW A1,29D8 (V0) ;A1=0 current deaths -8C4229DC *LW V0,29DC (V0) ;#suicides -00A22821 *ADDU A1,A1,V0 ;A1=total deaths -00B9102B *SLTU V0,A1,T9 ;TRUE if deaths < lives -14400004 *BNE V0,R0,+recycle ;branch if they're still alive -// I see dead people tell interpretter to look at them -24030001 *ADDIU V1,R0,0001 -24C60001 *ADDIU A2,A2,0001 ;A2++ one more poor soul -01A31804 *SLLV V1,V1,T5 ;1<pl1 stats -// loop for each dead player -01AF0806 *SRLV AT,T7,T5 ;AT=flags>>count -30210001 *ANDI AT,AT,0001 ;TRUE if flag set -1020000D *BEQ AT,R0,+loopdeloo -000D1080 *SLL V0,T5,0x2 ;V0=count->offset -// deal with dead guy -90610068 *LBU AT,0068 (V1) -50200001 *BEQL AT,R0,+1 ;if not set, set order of death. should allow ties... -A0660068 *SB A2,0068 (V1) -// determine how dead they are... -00581021 *ADDU V0,T8,V0 -8C429EE0 *LW V0,9EE0 (V0) ;p->player's BONDdata -8C410424 *LW AT,0424 (V0) -10200005 *BEQ AT,R0,+loopdeloo -8C410428 *LW AT,0428 (V0) -10200003 *BEQ AT,R0,+loopdeloo -8C4103E4 *LW AT,03E4 (V0) ;AT= (float) fade timer. -1 is finished, and negative floats set leading bit! -04220001 *BLTZL AT,+1 -// addum -24A50001 *ADDIU A1,A1,0001 ;A1-- keeps count of only completely dead individuals -// loopdeloo -24630070 *ADDIU V1,V1,0070 ;next player's stats -15AAFFEE *BNE T5,T2,-deceased -25AD0001 *ADDIU T5,T5,0001 -// -//fix for teams. if set, detect if only one team left and falsely trigger end -0FC051D7 JAL 7F01475C ;RETURNS V0=scenario -24030002 ADDIU V1,R0,0002 -10400010 BEQ V0,R0,+EOM -00006825 -OR T5,R0,R0 ;T5=0 iterate! -00003825 -OR A0,R0,R0 ;A0=0 living player team flags -2402FFFF -ADDIU V0,R0,FFFF ;V0=-1 #players on team, -1 -//7F0BF0A0: living team flags -01AF0806 *SRLV AT,T7,T5 ;AT=flags>>count -30210001 *ANDI AT,AT,0001 ;TRUE if flag set -14200006 *BNE AT,R0,+next -93019F59 *LBU AT,9F59 (T8) ;AT=team flag -30210007 *ANDI AT,AT,0007 -50800001 BEQL A0,R0,+1 ;if default, set to current -00012025 OR A0,AT,R0 -14810005 BNE A0,AT,+EOM ;if current and previous don't match, fail -24420001 ADDIU V0,V0,0001 ;#players on team++ -// next + falsify -27180070 *ADDIU T8,T8,0070 ;next player's stats -15AAFFF5 *BNE T5,T2,-deceased -25AD0001 *ADDIU T5,T5,0001 -// if made it this far, must be same team -01425023 SUBU T2,T2,V0 ;#players-1 - #"identical" players on team -//7F0BF1CC: test if end of match -00CA082A *SLT AT,A2,T2 ;TRUE if dead people < #players-1 -14200003 BNEZ AT,+3 ;branch if T5 < (V0-1) -00AA102A *SLT V0,A1,T2 ;TRUE if #very dead < #players-1 -0FC30948 JAL 7F0C2520 ;stop play -00000000 NOP -14400003 BNEZ V0,+3 -00000000 NOP -0FC3094C JAL 7F0C2530 -00002025 OR A0,R0,R0 - -+_+ - -7F014C88 V0=player A0's scenario flag; fries T6 -Team Setup Menu Initializer - -Team Setup Menu constructor -7F015138 49C68 Menu 14 Constructor: Team Setup - accepts: A0=@display list target -27BDFFC0 ADDIU SP,SP,FFC0 -AFBF003C SW RA,003C (SP) -AFB3002C SW S3,002C (SP) -AFB20028 SW S2,0028 (SP) -AFB10024 SW S1,0024 (SP) -//7F01514C: set up screen -0FC0551E JAL 7F015478 ;quad-screen -AFB00020 SW S0,0020 (SP) -0FC040A4 JAL 7F010290 ;V0=selected #players -00028025 OR S0,V0,R0 -00028825 OR S1,V0,R0 ;S1=#players -00009825 OR S3,R0,R0 ;S3=count -//7F015164: first thing - set the scissor for window -00132825 OR A1,S3,R0 -0FC054FD JAL 7F0153F4 ;set scissors to region -00102025 OR A0,S0,R0 -00028025 OR S0,V0,R0 -//7F015174: get box colour -3C0E8003 LUI T6,8003 -01C57021 ADDU T6,T6,A1 -91D2B560 LBU S2,B560 (T6) ;S2=team selection -240500B4 ADDIU A1,R0,00B4 -0FC054F1 JAL 7F0153C4 ;V0=RGBA from 3bit colour -32440007 *ANDI A0,S2,0007 -AFA20014 SW V0,0014 (SP) ;SP+14=RGBA -//7F015190: if this works, the scissors will clip it for you! -00102025 OR A0,S0,R0 -24050026 ADDIU A1,R0,0026 ;A1=ulx -2406001E ADDIU A2,R0,001E ;A2=uly -24070184 ADDIU A3,R0,0184 ;A3=lrx -24020136 ADDIU V0,R0,0136 -0FC2B405 JAL 7F0AD014 ;draw coloured box -AFA20010 SW V0,0010 (SP) ;SP+10=lry -//7F0151AC: 49CDC display text while unselected -00028025 OR S0,V0,R0 ;S0=DL -3C018007 +LUI AT,8007 -90219740 +LBU AT,9740 (AT) ;selection flags -02610807 +SRAV AT,AT,S3 -30220001 *ANDI V0,AT,0001 -1440001D BNE V0,R0,+loopus -//7F0151B8: figure out text offset -2A2B0003 SLTI T3,S1,0003 -0FC30776 JAL 7F0C1DD8 ;ret V0=p->text A0 -34049C58 ORI A0,R0,9C58 ;A0="Select Teams" -AFA20030 SW V0,0030 (SP) ;SP+50= p->text -55600002 BNEL T3,R0,+2 -3405015B ORI A1,R0,015B ;1-2 player region width -340500AA ORI A1,R0,00AA ;3-4 player region width -34060087 ORI A2,R0,0087 ;region height -// determine position while the variables still exist -01731024 AND V0,T3,S3 ;TRUE if player 2 in a 2-player stint -340B0028 ORI T3,R0,0028 ;T3=default x pos -54400008 BNEL V0,R0,+8 -340200AE ORI V0,R0,00AE -32620001 ANDI V0,S3,0001 -54400001 BNEL V0,R0,+1 -340B00D9 ORI T3,R0,00D9 -32620002 ANDI V0,S3,0002 -54400002 BNEL V0,R0,+2 -340200AE ORI V0,R0,00AE -34020020 ORI V0,R0,0020 -AFAB0034 SW T3,0034 (SP) ;SP+54: x pos -AFA20038 SW V0,0038 (SP) ;SP+58: y pos -// get the offets for text -0FC054D6 JAL 7F015358 ;center text to region ;A0=xoffset, A1=yoffset -8FA40030 LW A0,0030 (SP) ;p->text -// write text -8FA60034 LW A2,0034 (SP) -00C42021 ADDU A0,A2,A0 -8FA60038 LW A2,0038 (SP) -00C52821 ADDU A1,A2,A1 -0FC046B5 JAL 7F011AD4 ;display::black -8FA70030 LW A3,0030 (SP) -// loopus -26730001 ADDIU S3,S3,0001 ;playercount++ -1671FFC9 BNE S3,S1,-scissors ;loop while more players -// return -8FB20028 LW S2,0028 (SP) -8FB3002C LW S3,002C (SP) -8FB10024 LW S1,0024 (SP) -0FC2B3BC JAL 7F0ACEF0 ;combiner: bayer, lod, perspective. Necessary? -00102025 OR A0,S0,R0 -8FB00020 LW S0,0020 (SP) -8FBF003C LW RA,003C (SP) -03E00008 JR RA -27BD0040 ADDIU SP,SP,0040 - - -7F015358 49E88 generic center text in region (width x height) - accepts: A0=p->text, A1=width, A2=height - returns: A0=xpos, A1=ypos - fries: A0,A1,A2,A3,T6 -27BDFF30 ADDIU SP,SP,FF30 -AFBF0064 SW RA,0064 (SP) -00052843 SRA A1,A1,0x1 ;width/2 -AFA50040 SW A1,0040 (SP) -00063043 SRA A2,A2,0x1 ;height/2 -AFA60044 SW A2,0044 (SP) -// -00043025 OR A2,A0,R0 -27A500A0 ADDIU A1,SP,00A0 ;A1=@width -27A400A4 ADDIU A0,SP,00A4 ;A0=@height -3C078004 LUI A3,8004 -8CEE0EB4 LW T6,0EB4 (A3) -AFAE0010 SW T6,0010 (SP) -8CE70EB8 LW A3,0EB8 (A3) -0FC2BA63 JAL 7F0AE98C ;proportions of string A2 -AFA00014 SW R0,0014 (SP) -//7F015394: -8FA40040 LW A0,0040 (SP) ;width/2 -8FAE00A0 LW T6,00A0 (SP) ;txtwidth -000E7043 SRA T6,T6,0x1 -008E2023 SUBU A0,A0,T6 -8FA50044 LW A1,0044 (SP) ;height/2 -8FAE00A4 LW T6,00A4 (SP) ;txtheight -000E7043 SRA T6,T6,0x1 -00AE2823 SUBU A1,A1,T6 -// return -8FBF0064 LW RA,0064 (SP) -03E00008 JR RA -27BD00D0 ADDIU SP,SP,00D0 - - - -7F015478 49FA8 generic quad-split display -27BDFFD0 ADDIU SP,SP,FFD0 -AFBF002C SW RA,002C (SP) -// -0FC040A4 JAL 7F010290 ;V0=selected #players -00002825 OR A1,R0,R0 -AFA20028 SW V0,0028 (SP) ;SP+CC= #players -00003025 OR A2,R0,R0 -0C0011B4 JAL 700046D0 ;setfillcolour("black") -00003825 OR A3,R0,R0 -0C000FBE JAL 70003EF8 ;fillrect() -00022025 OR A0,V0,R0 -0FC0357A JAL 7F00D5E8 -00022025 OR A0,V0,R0 -0FC2B366 JAL 7F0ACD98 -00022025 OR A0,V0,R0 -// horizontal bar -240E00AB ADDIU T6,R0,00AB ;SP+10=lry -AFAE0010 SW T6,0010 (SP) -240E0090 ADDIU T6,R0,0090 ;SP+14=RGBA -AFAE0014 SW T6,0014 (SP) -00022025 OR A0,V0,R0 ;A0=V0: DL -24050026 ADDIU A1,R0,0026 ;A1=ulx -240600A9 ADDIU A2,R0,00A9 ;A2=uly -0FC2B405 JAL 7F0AD014 ;draw coloured box -24070184 ADDIU A3,R0,0184 ;A3=lrx -// vertical bar -8FA10028 LW AT,0028 (SP) ;T8= #players -28210003 SLTI AT,AT,0003 ;S1=TRUE if 1-2 players -14200009 BNEZ AT,return ;branch if 2 players -00022025 OR A0,V0,R0 -240500D4 ADDIU A1,R0,00D4 -240E0148 ADDIU T6,R0,0148 ;real is 136; bottom of screen in 148 -AFAE0010 SW T6,0010 (SP) -240E0080 ADDIU T6,R0,0080 -AFAE0014 SW T6,0014 (SP) -2406001E ADDIU A2,R0,001E -0FC2B405 JAL 7F0AD014 ;draw coloured box -240700D6 ADDIU A3,R0,00D6 -// return V0=DL -8FBF002C LW RA,002C (SP) -03E00008 JR RA -27BD0030 ADDIU SP,SP,0030 - - -Scissor, specific for window -dimentions below display margins and multiplier (*4) -horizontals: +2C margin +2 line +A4 between segments - 0x2C 0xB0 0x36C -verticals: +1E margin, +5 line +8C between segments, size +87 - 0x78 0x2A8 - -7F0153F4 49F24 scissor generic menu window A0 - accepts: A0=DL, A1=window# (0-3) -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0024 SW RA,0024 (SP) -// -0FC040A4 JAL 7F010290 ;V0=selected #players -AFB00020 SW S0,0020 (SP) -28500003 SLTI S0,V0,0003 ;S0=TRUE if 1-2 player -30A10001 ANDI AT,A1,0001 ;TRUE if 1/3 -00307024 AND T6,AT,S0 ;TRUE if both set -340200A0 ORI V0,R0,00A0 ;default x -34030080 ORI V1,R0,0080 ;default y -55C00008 BNEL T6,R0,+write ;if 2 players and second screen, feed it the y -340302B8 ORI V1,R0,02B8 -54200001 BNEL AT,R0,+1 ;if right screen, set x position -34020364 ORI V0,R0,0364 -30A10002 ANDI AT,A1,0002 -54200001 BNEL AT,R0,+1 ;if lower row, set y position -340302B8 ORI V1,R0,02B8 -52000002 BEQL S0,R0,+2 ;if 3-4 player, set lrx spacing -244E02A4 ADDIU T6,V0,02A4 ;T6+=A3<<2 -//write -240E0608 ADDIU T6,R0,0608 ;T6=0x610 (184<<2) -00021300 SLL V0,V0,0xC -00621025 OR V0,V0,V1 ;ulx | uly -000E7300 SLL T6,T6,0xC -01C31825 OR V1,T6,V1 ;lrx | unconverted y -2463021C ADDIU V1,V1,021C ;T6=lower word + y height offset (0x74<<2) -3C01ED00 LUI AT,ED00 -00220825 OR AT,AT,V0 -AC810000 SW AT,0000 (A0) ;DL+0: rdp_setscissor (U) -AC830004 SW V1,0004 (A0) ;DL+4: rdp_setscissor (L) -24820008 ADDIU V0,A0,0008 -// return -8FB00020 LW S0,0020 (SP) -8FBF0024 LW RA,0024 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -7F0153C0 49EF0 convert 3bit colour to RGBA; fries T6 - accepts: A0=RGB bits, A1=value (opt.) -340500FF ORI A1,R0,00FF -//7F0153C4 49EF4 cite your own colour -30820001 ANDI V0,A0,0001 ;blue -308E0002 ANDI T6,A0,0002 ;green -000E71C0 SLL T6,T6,0x7 -004E1025 OR V0,V0,T6 ;_gb -308E0004 ANDI T6,A0,0004 ;red -000E7380 SLL T6,T6,0xE -004E1025 OR V0,V0,T6 ;rgb -00021200 SLL V0,V0,0x8 -34420001 ORI V0,V0,0001 ;rgba -00450019 MULTU V0,A1 -03E00008 JR RA -00001012 MFLO V0 - -multi-purpose, though not implemented yet (only if required) -//default value, alpha present -10000003 BEQ R0,R0,+3 -//default value, no alpha present -340500FF ORI A1,R0,00FF -//cite value, no alpha present -00042040 SLL A0,A0,0x1 -34840001 ORI A0,A0,0001 -//7F0153C4 49EF4 cite value, alpha present -30820001 ANDI V0,A0,0002 ;blue -308E0002 ANDI T6,A0,0004 ;green -000E7180 SLL T6,T6,0x6 -004E1025 OR V0,V0,T6 ;_gb -308E0004 ANDI T6,A0,0008 ;red -000E7340 SLL T6,T6,0xD -004E1025 OR V0,V0,T6 ;rgb -000211C0 SLL V0,V0,0x7 -308E0002 ANDI T6,A0,0004 ;green -004E1025 OR V0,V0,T6 ;rgba -00450019 MULTU V0,A1 -03E00008 JR RA -00001012 MFLO V0 - - -+_+ - -Team Setup Menu Initializer -7F014CC0 497F0 initialize menu 14: team setup -LUI AT,8003 -SW R0,A8D0 (AT) ;0->8002A8D0: reset selected flag for folder tab 1 -SW R0,A8DC (AT) ;0->8002A8DC: reset highlight flag for folder tab 1 -SW R0,A8D4 (AT) ;0->8002A8D4: reset selected flag for folder tab 2 -SW R0,A8E0 (AT) ;0->8002A8E0: reset highlight flag for folder tab 2 -SW R0,A8D8 (AT) ;0->8002A8D8: reset selected flag for folder tab 3 -LW T6,B540 (AT) ;T6=8002B540: scenario -SW R0,A8E4 (AT) ;0->8002A8E4: reset highlight flag for folder tab 3 -ADDIU SP,SP,FFE8 -ADDIU AT,R0,0007 -BNE T6,AT,7F014D00 ;branch if not "team 2vs1" -SW RA,0014 (SP) -//7F014CF0: -ADDIU T7,R0,0002 -LUI AT,8007 -BEQ R0,R0,7F014D0C -SW T7,9740 (AT) ;2->80069740: team setting -//7F014D00: -ADDIU T8,R0,0003 -LUI AT,8007 -SW T8,9740 (AT) ;3->80069740: team setting -//7F014D0C: -LUI AT,8003 -JAL 7F00B8AC ;loads walletbond, used to construct main menus -SW R0,B560 (AT) ;0->8002B560: blink register -LW RA,0014 (SP) -JR RA -ADDIU SP,SP,0018 - -reorganize 7F012E30 and redirect there -3C018007 LUI AT,8007 -AC20974C SW R0,974C (AT) ;0->8006974C: reset selected flag for player 4 MP character -AC20976C SW R0,976C (AT) ;0->8006976C: reset selected flag for player 4 control/heath menu -AC209768 SW R0,9768 (AT) ;0->80069768: reset selected flag for player 3 control/heath menu -AC209748 SW R0,9748 (AT) ;0->80069748: reset selected flag for player 3 MP character -AC209764 SW R0,9764 (AT) ;0->80069764: reset selected flag for player 2 control/heath menu -AC209740 SW R0,9740 (AT) ;0->80069740: reset selected flag for player 1 MP character -AC209744 SW R0,9744 (AT) ;0->80069744: reset selected flag for player 2 MP character -AC209760 SW R0,9760 (AT) ;0->80069760: reset selected flag for player 1 control/heath menu -// -3C018003 LUI AT,8003 -AC20A8D0 SW R0,A8D0 (AT) ;0->8002A8D0: reset selected flag for folder tab 1 -AC20A8DC SW R0,A8DC (AT) ;0->8002A8DC: reset highlight flag for folder tab 1 -AC20A8D4 SW R0,A8D4 (AT) ;0->8002A8D4: reset selected flag for folder tab 2 -AC20A8E0 SW R0,A8E0 (AT) ;0->8002A8E0: reset highlight flag for folder tab 2 -AC20A8D8 SW R0,A8D8 (AT) ;0->8002A8D8: reset selected flag for folder tab 3 -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC02E2B JAL 7F00B8AC -AC20A8E4 SW R0,A8E4 (AT) ;0->8002A8E4: reset highlight flag for folder tab 3 -// return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - - -Team Setup Menu Interface -80069740 1 current finish flags -80069741 1 previous finish flags -80069742 2 reserved for whatever - - -7F0A4FB4 ;TRUE if stick left -7F0A4FF0 ;TRUE if stick right -do the +1/-1 with these, if neither found bail out -then just use the generic advance with range 1-8. should roll around to 1-7 - -7F013D7C ;advance value - A0=address, A1=+/-value, A2=cap, A3=min - -A, Z, Start toggles 0x8 flag. -B always untoggles 0x8 flag. -SE if 0x8 flag changes - -return if all 0x8 flags are set - -7F014D48 49878 Menu 14 Interface: Team Setup -27BDFFDC ADDIU SP,SP,FFDC -3C014270 LUI AT,4270 -AFBF001C SW RA,001C (SP) -44816000 MTC1 AT,F12 ;F12= [42700000] -AFB20020 +SW S2,0020 (SP) -AFB10018 SW S1,0018 (SP) -0C001151 JAL 70004544 -AFB00014 SW S0,0014 (SP) -3C013FAB *LUI AT,3FAB -0C001164 JAL 70004590 -44816000 *MTC1 AT,F12 ;F12=80051AB0: 3FAB0000 -3C0142C8 LUI AT,42C8 -44816000 MTC1 AT,F12 ;F12= [42C80000] -3C01461C *LUI AT,461C -0C001194 JAL 70004650 -44817000 *MTC1 AT,F14 ;F14=80051AB4: 461C0000 -0C00114D JAL 70004534 ;0->p@800232A8+24 -00002025 OR A0,R0,R0 -//7F014D90: construct the folder now, while there's still a chance! -3C128007 LUI S2,8007 -0FC054C4 JAL 7F015310 -26529740 ADDIU S2,S2,9740 -//7F014D9C: set up the loop! -0FC040A4 JAL 7F010290 ;V0=#players -00008025 OR S0,R0,R0 ;S0=0: count -2451FFFF ADDIU S1,V0,FFFF ;S1=#players-1 (0-3) -92410000 LBU AT,0000 (S2) -A2410001 SB AT,0001 (S2) -//7F014DB0: figure bitmask A2 is safe -24060001 ADDIU A2,R0,0001 -02063004 SLLV A2,A2,S0 -92470000 LBU A3,0000 (S2) -//7F014DBC: detect deselection -00102025 OR A0,R0,S0 ;A0=0: player 1 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -24054000 ADDIU A1,R0,4000 ;A1= B button -10400002 BEQ V0,R0,+Abutton -00060827 NOR AT,R0,A2 -00273824 AND A3,AT,A3 -//7F014DD4: detect selection -00102025 OR A0,R0,S0 ;A0=0: player 1 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -2405B000 ADDIU A1,R0,B000 ;A1= A, Z, Start button -54400001 BNEL V0,R0,+1 -00C73825 OR A3,A2,A3 - -//7F014DE8: change team must follow the de/select routines -00C72024 AND A0,A2,A3 -14800019 *BNE A0,R0,+loopus -A2470000 SB A3,0000 (S2) ;save updated flags -//7F014DF4: right on stick -0FC293FC JAL 7F0A4FF0 ;V0= TRUE if A0 pressed right on stick -00102025 OR A0,R0,S0 -5440000C BNEL V0,R0,+switch -24050001 ADDIU A1,R0,0001 -//7F014E04: left on stick -0FC293ED JAL 7F0A4FB4 ;V0= TRUE if A0 pressed left on stick -00102025 OR A0,R0,S0 -14400007 BNE V0,R0,+switch-1 -//7F014E14: buttons -00102025 OR A0,R0,S0 ;A0=0: player 1 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -24050303 ADDIU A1,R0,0303 ;A1= C right (1), + right, c left (2) + left -1040000D *BEQ V0,R0,+loopus ;branch if buttons pressed -30420101 ANDI V0,V0,0101 -54400002 BNEL V0,R0,+2 -24050001 ADDIU A1,R0,0001 -2405FFFF ADDIU A1,R0,FFFF -//7F014E30: +addmendum -3C048004 +LUI A0,8004 -00902023 +SUBU A0,A0,S0 -A0800ADF +SB R0,0ADF (A0) ;80040ADC: player 4,3,2,1 -//7F014E30: switch -3C048003 LUI A0,8003 -2484B560 ADDIU A0,A0,B560 -00902021 ADDU A0,A0,S0 -24060008 ADDIU A2,R0,0008 -0FC04F5F JAL 7F013D7C -24070001 ADDIU A3,R0,0001 -// -0FC05440 JAL 7F015100 ;resets controller flag so you get a pressed, not constant action -00102025 OR A0,S0,R0 -//7F014E48: loopus -1611FFD4 *BNE S0,S1,-detect -26100001 ADDIU S0,S0,0001 -// read control sticks -0FC026E1 JAL 7F009B84 ;control stick tracking (necessary?) -00000000 NOP -// sound effect for all selections -92440000 LBU A0,0000 (S2) -92450001 LBU A1,0001 (S2) -10850005 BEQ A0,A1,+backtrack -240500C7 -ADDIU A1,R0,00C7 ;A1=SE 0C7 -3C048006 -LUI A0,8006 -8C843720 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -0C002382 JAL 70008E08 ;play sound A1 -00003025 OR A2,R0,R0 ;A2=NULL -// backtrack use this as an oportunity to set the flags for recall -00002025 OR A0,R0,R0 -00002825 ADDIU A1,R0,R0 -92460000 LBU A2,0000 (S2) ;A2=flags -// -30C10001 ANDI AT,A2,0001 ;TRUE if flag set -00812021 ADDU A0,A0,AT -00063043 SRA A2,A2,0x1 -14B1FFFC BNE A1,S1,-count -24A50001 ADDIU A1,A1,0001 -//7F015104 back to scenario menu -26310001 +ADDIU S1,S1,0001 -14910003 BNE A0,S1,+return -24040013 ADDIU A0,R0,0013 ;A0=menu 13: Scenario menu -0FC06975 JAL 7F01A5D4 ;set to menu A0 to mode A1 -00002825 OR A1,R0,R0 ;A1=0: current -//7F015124: return -8FBF001C LW RA,001C (SP) -8FB00014 LW S0,0014 (SP) -8FB10018 LW S1,0018 (SP) -8FB20020 LW S2,0020 (SP) -03E00008 JR RA -27BD0024 ADDIU SP,SP,0024 - -Expecting that the controller hack will be reused a bit, this will reset when at "static" (+/- 0xC) -7F015100: 49C30 reset left<->right pressed register for player A0 -27BDFFE4 ADDIU SP,SP,FFE4 -AFBF0018 SW RA,0018 (SP) -0C00303B JAL 7000C0EC ;V0= current position left<->right of controller A0's control stick -AFA40014 SW A0,0014 (SP) -// -24420010 ADDIU V0,V0,0010 ;allows +/- -2C420020 SLTIU V0,V0,0020 ;allow play of +/- 0x10, which coincides with smallest detectable controller test -8FA40014 LW A0,0014 (SP) -3C038004 LUI V1,8004 -00641823 SUBU V1,V1,A0 -54400001 BNEZL V0,+1 -A0620ADF SB V0,0ADF (V1) -// return -8FBF0018 LW RA,0018 (SP) -03E00008 JR RA -27BD001C ADDIU SP,SP,001C - -7F0150C8 49BF8 reset up<->down pressed register for player A0 -27BDFFE4 ADDIU SP,SP,FFE4 -AFBF0018 SW RA,0018 (SP) -0C00307F JAL 7000C1FC ;V0= current position up<->down of controller A0's control stick -AFA40014 SW A0,0014 (SP) -// -24420010 ADDIU V0,V0,0010 ;allows +/- -2C420020 SLTIU V0,V0,0020 ;allow play of +/- 0x10, which coincides with smallest detectable controller test -8FA40014 LW A0,0014 (SP) -3C038004 LUI V1,8004 -00641823 SUBU V1,V1,A0 -54400001 BNEZL V0,+1 -A0620AE3 SB V0,0AE3 (V1) -// return -8FBF0018 LW RA,0018 (SP) -03E00008 JR RA -27BD001C ADDIU SP,SP,001C - -these are MP in-game menu controller state routines -7F0C1EF8 F6A28 V0=TRUE if player A0 pressed right - ADDIU SP,SP,FFE0 - SLL A0,A0,0x18 - SW RA,0014 (SP) - SRA T6,A0,0x18 ;T6=player# & FF - OR A0,T6,R0 ;A0=player# - SW T6,0018 (SP) ;SP+18=player# - ADDIU A1,R0,FFFE ;A1=range left - JAL 7000C4B4 ;V0=horz.control stick state - ADDIU A2,R0,0001 ;A2=range right - LW A0,0018 (SP) ;A0=player# - SW V0,001C (SP) ;SP+1C= horz.state - JAL 7000C3AC ;V0= player A0's buttons A1 pressed - ADDIU A1,R0,0101 ;A1=c right, + right - BNEZ V0,7F0C1F58 ;return true if pressed - LW RA,0014 (SP) - LW T7,001C (SP) ;T7=horz.state - LUI T8,8008 - OR V0,R0,R0 ;V0=FALSE - BLEZ T7,7F0C1F60 ;return false if left - NOP - LW T8,A0B0 (T8) ;T8=p->BONDdata - LW T9,29D0 (T8) ;T9=BONDdata+29D0: press register - BEQ T9,R0,7F0C1F60 ;return FALSE if press register reset - NOP -//7F0C1F58: return TRUE - BEQ R0,R0,7F0C1F60 - ADDIU V0,R0,0001 ;V0=TRUE -//7F0C1F60: return - JR RA - ADDIU SP,SP,0020 - -7F0C1F68 F6A98 V0=TRUE if player A0 pressed left - ADDIU SP,SP,FFE0 - SLL A0,A0,0x18 - SW RA,0014 (SP) - SRA T6,A0,0x18 ;T6=player# & FF - OR A0,T6,R0 ;A0=player# - SW T6,0018 (SP) ;SP+18=player# - ADDIU A1,R0,FFFE ;A1=range left - JAL 7000C4B4 ;V0=horz.control stick state - ADDIU A2,R0,0001 ;A2=range right - LW A0,0018 (SP) ;A0=player# - SW V0,001C (SP) ;SP+1C= horz.state - JAL 7000C3AC ;V0= player A0's buttons A1 pressed - ADDIU A1,R0,0202 ;A1=c left, + left - BNEZ V0,7F0C1FCC ;return true if pressed - LW RA,0014 (SP) - LW T7,001C (SP) ;T7=horz.state - LUI T8,8008 - OR V0,R0,R0 ;V0=FALSE - SLTI AT,T7,FFFF ;TRUE if state < -1 - BEQ AT,R0,7F0C1FD4 ;return false if right - NOP - LW T8,A0B0 (T8) ;T8=p->BONDdata - LW T9,29D0 (T8) ;T9=BONDdata+29D0: press register - BEQ T9,R0,7F0C1FD4 ;return FALSE if press register reset - NOP -//7F0C1FCC: return TRUE - BEQ R0,R0,7F0C1FD4 - ADDIU V0,R0,0001 ;V0=TRUE -//7F0C1FD4: return - JR RA - ADDIU SP,SP,0020 - -REDIRECT -7F0C1F68 -> 7F0C1F04 -0FC307DA -> 0FC307C1 - -joint routine... -7F0C1EF8 F6A28 V0=TRUE if player A0 pressed right -24050001 ADDIU A1,R0,0001 -10000003 BEQ R0,R0,+3 -34020101 ORI V0,R0,0101 -//7F0C1F04: F6A34 V0=TRUE if player A0 pressed left -34020202 ORI V0,R0,0202 -2405FFFE ADDIU A1,R0,FFFE -//7F0C1F0C: F6A3C generic -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -AFA40018 SW A0,0018 (SP) ;SP+18= player# -AFA2001C SW V0,001C (SP) ;SP+1C= button mask -AFA50020 SW A1,0020 (SP) ;SP+20= controller state -//7F0C1F20: F6A50 pull state and test it -2405FFFE ADDIU A1,R0,FFFE ;A1=range left -0C00312D JAL 7000C4B4 ;V0=horz.control stick state -24060001 ADDIU A2,R0,0001 ;A2=range right -8FA50020 LW A1,0020 (SP) ;A1=test state -3C068008 LUI A2,8008 -8CC6A0B0 LW A2,A0B0 (A2) ;A2=p->BONDdata -14450002 BNE V0,A1,+buttons -8CC229D0 LW V0,29D0 (A2) ;V0=BONDdata+29D0: press register -14400005 BNE V0,R0,+return -//7F0C1F44: F6A74 test buttons if stick silly -8FA40018 LW A0,0018 (SP) ;A0=player# -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -8FA5001C LW A1,001C (SP) ;A1=button mask -2C420001 SLTIU V0,V0,0001 ;V0=TRUE if nothing pressed -38420001 XORI V0,V0,0001 ;V0=TRUE if something pressed -//7F0C1F58: F6A88 return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -duplicate and change jump/registers to do up/down -7F0C1F64 F6A94 V0=TRUE if player A0 pressed up -24050001 ADDIU A1,R0,0001 -10000003 BEQ R0,R0,+3 -34020808 ORI V0,R0,0808 -//7F0C1F70: F6AA0 V0=TRUE if player A0 pressed down -34020404 ORI V0,R0,0404 -2405FFFE ADDIU A1,R0,FFFE -//7F0C1F0C: F6A3C generic -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -AFA40018 SW A0,0018 (SP) ;SP+18= player# -AFA2001C SW V0,001C (SP) ;SP+1C= button mask -AFA50020 SW A1,0020 (SP) ;SP+20= controller state -//7F0C1F20: F6A50 pull state and test it -2405FFFE ADDIU A1,R0,FFFE ;A1=range left -0C00314A JAL 7000C528 ;V0=vert.control stick state -24060001 ADDIU A2,R0,0001 ;A2=range right -8FA50020 LW A1,0020 (SP) ;A1=test state -3C068008 LUI A2,8008 -8CC6A0B0 LW A2,A0B0 (A2) ;A2=p->BONDdata -14450002 BNE V0,A1,+buttons -8CC229D0 LW V0,29D0 (A2) ;V0=BONDdata+29D0: press register -14400005 BNE V0,R0,+return -//7F0C1F44: F6A74 test buttons if stick silly -8FA40018 LW A0,0018 (SP) ;A0=player# -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -8FA5001C LW A1,001C (SP) ;A1=button mask -2C420001 SLTIU V0,V0,0001 ;V0=TRUE if nothing pressed -38420001 XORI V0,V0,0001 ;V0=TRUE if something pressed -//7F0C1F58: F6A88 return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -Could always combine the two of them... -7F0C1EF8 F6A28 V0=TRUE if player A0 pressed right -24050001 ADDIU A1,R0,0001 -34020101 ORI V0,R0,0101 -10000009 BEQ R0,R0,+9 -//7F0C1F04: F6A34 V0=TRUE if player A0 pressed left -3406C4B4 ORI A2,R0,C4B4 -10000006 BEQ R0,R0,+generic-1 -34020202 ORI V0,R0,0202 -//7F0C1F10: F6A40 V0=TRUE if player A0 pressed up -24050001 ADDIU A1,R0,0001 -34020808 ORI V0,R0,0808 -10000003 BEQ R0,R0,+3 -//7F0C1F1C: F6A4C V0=TRUE if player A0 pressed down -3406C528 ORI A2,R0,C528 -34020404 ORI V0,R0,0404 -2405FFFE ADDIU A1,R0,FFFE -//7F0C1F28: F6A58 generic -27BDFFD8 ADDIU SP,SP,FFD8 -AFBF0014 SW RA,0014 (SP) -AFA40018 SW A0,0018 (SP) ;SP+18= player# -AFA2001C SW V0,001C (SP) ;SP+1C= button mask -AFA50020 SW A1,0020 (SP) ;SP+20= controller state -3C027000 +LUI V0,7000 -00461025 +OR V0,V0,A2 -//7F0C1F44: F6A74 pull state and test it -2405FFFE ADDIU A1,R0,FFFE ;A1=range left -0040F809 *JALR RA,V0 -24060001 ADDIU A2,R0,0001 ;A2=range right -8FA50020 LW A1,0020 (SP) ;A1=test state -3C068008 LUI A2,8008 -8CC6A0B0 LW A2,A0B0 (A2) ;A2=p->BONDdata -14450002 BNE V0,A1,+buttons -8CC229D0 LW V0,29D0 (A2) ;V0=BONDdata+29D0: press register -14400005 BNE V0,R0,+return -//7F0C1F68: F6A98 test buttons if stick silly -8FA40018 LW A0,0018 (SP) ;A0=player# -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed -8FA5001C LW A1,001C (SP) ;A1=button mask -2C420001 SLTIU V0,V0,0001 ;V0=TRUE if nothing pressed -38420001 XORI V0,V0,0001 ;V0=TRUE if something pressed -//7F0C1F7C: F6AAC return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 -//7F0C1F88: F6AB8 - -+_+ - -Since at least three menus use this, make a generic routine -//7F015310: 49E40 construct folder backdrop -27BDFFD8 ADDIU SP,SP,FFD8 -AFB00020 SW S0,0020 (SP) -AFBF0024 SW RA,0024 (SP) -// -3C108003 -LUI S0,8003 -2610A95C -ADDIU S0,S0,A95C ;S0=8002A95C -0FC02DC9 JAL 7F00B724 ;disable all switches in object A0 (hide all) -8E040000 LW A0,0000 (S0) ;A0=8002A95C: p->object instance -8E040000 LW A0,0000 (S0) ;A0=8002A95C: p->object instance -00002825 OR A1,R0,R0 ;A1=0: item #: tabs on side of folder -0FC02DF0 JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -24060001 ADDIU A2,R0,0001 ;A2=1: visible -8E040000 LW A0,0000 (S0) ;A0=8002A95C: p->object instance -2405002A ADDIU A1,R0,002A ;A1=2A: -0FC02DF0 JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -24060001 ADDIU A2,R0,0001 ;A2=1: visible -// -8FB00020 LW S0,0020 (SP) -8FBF0024 LW RA,0024 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -+_+ - -Strange controller command modifiers -7F0A4F50 D9A80 V0= TRUE if holding at least 0x2E left on control stick -00002025 *OR A0,R0,R0 ;player 1 -//7F0A4F54 D9A84 A0=controller# -AFBFFFFC *SW RA,FFFC (SP) ;SP+14=RA -0C00303B JAL 7000C0EC -27BDFFE8 *ADDIU SP,SP,FFE8 - -7F0A4F74 D9AA4 V0= TRUE if holding at least 0x2E right on control stick -00002025 *OR A0,R0,R0 ;player 1 -//7F0A4F78 D9A98 A0=controller# -AFBFFFFC *SW RA,FFFC (SP) ;SP+14=RA -0C00303B JAL 7000C0EC -27BDFFE8 *ADDIU SP,SP,FFE8 - -7F0A4FB0 D9AE0 V0= TRUE if pressed left on control stick (0x2E) -00002025 *OR A0,R0,R0 -//7F0A4FB4 D9BE4 A0=controller# -27BDFFE8 *SW RA,FFFC (SP) -AFBF0014 *ADDIU SP,SP,FFE8 -0FC293D5 *JAL 7F0A4F54 -27FF0038 *ADDIU RA,RA,0038 -(zeroes to next function) - -7F0A4FEC D9B1C V0= TRUE if pressed right on control stick (0x2E) -00002025 *OR A0,R0,R0 -//7F0A4FF0 D9B20 A0=controller# -AFBFFFFC *SW RA,FFFC (SP) -0FC293DE *JAL 7F0A4F78 -27BDFFE8 *ADDIU SP,SP,FFE8 - -did the same to the other upsy-downsy types - -copy team settings into playerdata (stats+69) - -try using these -7F0C1EF8 right -7F0C1F68 left - -+_+ - - -MP radar overlay, generic. -Team colour fills box -Outer box changes with collectables -GG is orange border, Flag blue border - -as per scenario flags: -80 outer: purple FF80FF -40 outer: red FF4080 -20 outer: orange FF8040 -10 outer: blue 4040C0 -08 outer: green 408040 -07 inner: team colour as defined - -base transparency is 60. double it when same character - - -7F0C6090 FABC0 display positions on MP radar - accepts: A0=p->display list -27BDFF78 ADDIU SP,SP,FF78 -AFBF006C SW RA,006C (SP) -AFB70068 SW S7,0068 (SP) -AFB60064 SW S6,0064 (SP) -AFB50060 SW S5,0060 (SP) -AFB4005C SW S4,005C (SP) -AFB30058 SW S3,0058 (SP) -AFB20054 SW S2,0054 (SP) -AFB10050 SW S1,0050 (SP) -AFB0004C SW S0,004C (SP) -F7BE0040 SDC1 F30,0040 (SP) -F7BC0038 SDC1 F28,0038 (SP) -F7BA0030 SDC1 F26,0030 (SP) -F7B80028 SDC1 F24,0028 (SP) -F7B60020 SDC1 F22,0020 (SP) -F7B40018 SDC1 F20,0018 (SP) -//7F0C60D0: -0FC051D6 JAL 7F014758 ;V0=scenario -AFA40088 SW A0,0088 (SP) ;SP+88= DL -0FC26C54 JAL 7F09B150 ;V0=8007A0B8: cur.player# -0040A025 OR S4,V0,R0 ;S4=V0: scenario -0FC26919 JAL 7F09A464 ;V0=#players -AFA20070 SW V0,0070 (SP) ;SP+70= cur.player# -24010001 ADDIU AT,R0,0001 -5041---- *BEQL V0,AT,7F0C6374 ;return if solo -8FA20088 -LW V0,0088 (SP) -AFA20074 SW V0,0074 (SP) ;SP+74= #players -//7F0C60FC: multiplayer -3C178008 LUI S7,8008 -26F7A0B0 ADDIU S7,S7,A0B0 ;S7=8008A0B0: p->BONDdata -8EE20000 LW V0,0000 (S7) -8C4E29C4 LW T6,29C4 (V0) ;T6=BONDdata+29C4: menu activated -55C0---- *BNEZL T6,7F0C6374 ;return if set -8FA20088 -LW V0,0088 (SP) -8C4F00D8 LW T7,00D8 (V0) ;T7=SP+0x50 -55E0---- *BNEL T7,R0,7F0C6374 -8FA20088 -LW V0,0088 (SP) -//7F0C6128: test if no radar -0FC249EF JAL 7F0927BC ;V0= TRUE if cheat A0 activated for cur.player -24040017 ADDIU A0,R0,0017 ;A0=17: "No Radar (Multi)" cheat -5440---- BNEL V0,R0,7F0C6374 ;continue if radar present -8FA20088 -LW V0,0088 (SP) -//7F0C6140: -0C001145 JAL 70004514 ;V0= [p@800232A8+20] -00000000 NOP -00028400 SLL S0,V0,0x10 -0010C403 SRA T8,S0,0x10 -0C001127 JAL 7000449C ;V0= [p@800232A8+1C] -03008025 OR S0,T8,R0 -0050A821 ADDU S5,V0,S0 -0C001149 JAL 70004524 ;V0= [p@800232A8+22] -26B5FFD7 ADDIU S5,S5,FFD7 ;S5-=0x29: x position -8FB90074 LW T9,0074 (SP) ;T9=#players -2456001A ADDIU S6,V0,001A ;S6=V0+1A: y position -27A40088 ADDIU A0,SP,0088 -2B210003 SLTI AT,T9,0003 ;TRUE if 2 player -14200005 BNEZ AT,7F0C6190 ;branch if 2 player -3C058009 LUI A1,8009 -8FA90070 LW T1,0070 (SP) ;T1=SP+70: cur.player# -312A0001 ANDI T2,T1,0001 ;T2= TRUE if player 2 or 4 (right side of screen) -55400001 *BEQL T2,R0,7F0C6190 -26B5000F -ADDIU S5,S5,000F -//7F0C6190: insert radar backdrop -00153025 OR A2,S5,R0 -00163825 +OR A3,S6,R0 -8CA5D12C LW A1,D12C (A1) ;A1=8008D12C: radar backdrop -34010200 ORI AT,R0,0200 -AFA10010 SW AT,0010 (SP) -340100A0 ORI AT,R0,00A0 -0FC0466C JAL 7F0119B0 ;insert image -AFA10014 SW AT,0014 (SP) -//7F0C61B0: draw the radar to screen - -alternate insert radar backdrop -//7F0C6190: -24060002 ADDIU A2,R0,0002 -AFA60010 SW A2,0010 (SP) -8CA5D12C LW A1,D12C (A1) ;A1=8008D12C: radar backdrop -0FC1DB5A JAL 7F076D68 ;append image to p->DL A0 using image declaration A1 -00003825 OR A3,R0,R0 -0FC2B366 JAL 7F0ACD98 ;microcode -8FA40088 LW A0,0088 (SP) -//7F0C61B0: set combiner -3C09FCFF LUI T1,FCFF -3C0AFF65 LUI T2,FF65 -3529B3FF ORI T1,T1,B3FF ;T5=FCFFB3FF: -354AFEFF ORI T2,T2,FEFF ;T6=FF65FEFF: -AC490000 SW T1,0000 (V0) -AC4A0004 SW T2,0004 (V0) -//7F0C61D0: set foreground colour -3C09FA00 LUI T1,FA00 -240A00A0 ADDIU T2,R0,00A0 ;T1=000000A0: fg colour [black] -AC490008 SW T1,0008 (V0) ;DL+0= rdp_setprimcolour (U) -AC4A000C SW T2,000C (V0) ;DL+4= rdp_setprimcolour (L) -//7F0C61F0: set textured rectangle -00154880 SLL T1,S5,0x2 ;x * 4 -31290FFF ANDI T1,T1,0FFF -00165080 SLL T2,S6,0x2 ;y * 4 -314A0FFF ANDI T2,T2,0FFF -00094B00 SLL T1,T1,0xC -012A4825 OR T1,T1,T2 ;T1= x | y -3C010004 LUI AT,0004 -34210040 ORI AT,AT,0040 ;T2=00040040 -01215023 SUBU T2,T1,AT ;this works properly only when set to positions > 0x10 -01214821 ADDU T1,T1,AT ;or positions < 0x10 -3C01E400 LUI AT,E400 -01214825 ORI T1,T1,AT -AC490010 SW T1,0010 (V0) ;DL+0: rdp_texrect (U) -AC4A0014 SW T2,0014 (V0) ;DL+4: rdp_texrect (L) -;; ADDIU T4,S5,0010 ;T4=S5+10: x position right offset -;; SLL T5,T4,0x2 ;T5=T4*4: upper left x -;; ANDI T6,T5,0FFF -;; ADDIU T9,S6,0010 ;T9=S6+10: y position upper offset -;; SLL T1,T9,0x2 ;T1=T9*4: upper left y -;; SLL T7,T6,0xC ;T7=ulx -;; LUI AT,E400 -;; OR T8,T7,AT ;T8=texrect | ulx -;; ANDI T2,T1,0FFF ;T2=uly -;; ADDIU T4,S5,FFF0 ;T4=S6-10: x position left offset -;; SLL T5,T4,0x2 ;T5=T4*4: lower right x -;; ADDIU T9,S6,FFF0 ;T9=S6-10: y position lower offset -;; SLL T1,T9,0x2 ;T1=T9*4: lower right y -;; ANDI T6,T5,0FFF -;; OR T3,T8,T2 ;T3=texrect | ulx | uly -;; ANDI T8,T1,0FFF -;; SLL T7,T6,0xC ;T7=lrx -;; OR T2,T7,T8 ;T2=lrx | lry -;; SW T2,0014 (V0) ;DL+4: rdp_texrect (L) -;; SW T3,0010 (V0) ;DL+0: rdp_texrect (U) -//7F0C6248: second half of textured rectangle (mapping) -3C090010 LUI T1,0010 -35290010 ORI T1,T1,0010 ;T6=00100010: upper left s | upper left t -AC490018 SW T1,0018 (V0) ;DL+4: rdp_texrect_2 (U) -;; 3C0AB400 LUI T2,B400 -;; AC4A0018 SW T2,0018 (V0) ;DL+0: rsp_uc05_rdphalf_1 (U) -;; AC49001C SW T1,001C (V0) ;DL+4: rdp_texrect_2 (U) -//7F0C6268: -00095180 SLL T2,T1,0x6 ;T1=04000400: delta-s delta-x | delta-t delta-y -AC4A001C SW T2,001C (V0) ;DL+4: rdp_texrect_2 (L) -24490020 ADDIU T1,V0,0020 -;; 3C09B300 LUI T1,B300 -;; AC490020 SW T1,0020 (V0) ;DL+0: rsp_uc05_rdphalf_2 (U) -;; AC4A0024 SW T2,0024 (V0) ;DL+4: rdp_texrect_2 (L) -;; 24490028 ADDIU T1,V0,0028 -AFA90088 SW T1,0088 (SP) ;SP+88= DL - - -all of this is current-player stuff that will get cut -routine below will handle all players, including current one -use scenario flags to determine box colours, player number comparison to determine alpha level -//7F0C6194: FAE8C -8FB80074 LW T8,0074 (SP) ;T8=#players -00009825 OR S3,R0,R0 ;S3=0 count=0 -1B000075 *BLEZ T8,7F0C6374 ;quit if invalid -3C014334 LUI AT,4334 -4481F000 MTC1 AT,F30 ;F30=180.0 [43340000] -//7F0C61A8: draw squares for players -00135880 SLL T3,S3,0x2 -3C048008 LUI A0,8008 -008B2021 ADDU A0,A0,T3 -8C849EE0 LW A0,9EE0 (A0) ;A0=80079EE0+offset: player S3's p->BONDdata -8C8C00D8 LW T4,00D8 (A0) ;T4=player button control -55800067 *BNEL T4,R0,7F0C635C ;try next if not disabled (dead) -8FB80074 LW T8,0074 (SP) -8EED0000 LW T5,0000 (S7) ;T5=p->org.BONDdata -8C8200A8 LW V0,00A8 (A0) ;V0=S3's p->positiondata -3C014180 LUI AT,4180 -8DA300A8 LW V1,00A8 (T5) ;V1=org p->positiondata -C45C0008 LWC1 F28,0008 (V0) ;F28=cur.xpos -C4520010 LWC1 F18,0010 (V0) ;F18=cur.zpos -C4700008 LWC1 F16,0008 (V1) ;F18=org.xpos -C46A0010 LWC1 F10,0010 (V1) ;F10=org.zpos -44814000 MTC1 AT,F8 ;F8=16.0 [41800000] -4610E501 SUB.S F20,F28,F16 ;F20=difference in xpos -3C01457A LUI AT,457A -44818000 MTC1 AT,F16 ;F16=4000.0 [457A0000] -460A9581 SUB.S F22,F18,F10 ;F22=difference in ypos -240E0010 ADDIU T6,R0,0010 -448E5000 MTC1 T6,F10 -46104683 DIV.S F26,F8,F16 ;F26=16.0 / 4000.0 = 0.004 -4600A306 MOV.S F12,F20 ;F12=xdif -4600B386 MOV.S F14,F22 ;F14=ydif -0FC16A8C JAL 7F05AA30 ;F0=lateral rotation -46805620 CVT.S.W F24,F10 ;F24=(float) 16.0 -//7F0C6214: determine vector (direction + distance) -461E0182 MUL.S F6,F0,F30 ;F6=rotation * 180.0 -3C018006 LUI AT,8006 -C428BD20 LWC1 F8,BD20 (AT) ;F8=8005BD20: Pi -4614A102 MUL.S F4,F20,F20 ;F4=xdif^2 -8EF90000 LW T9,0000 (S7) ;T9=org.BONDdata -C7300148 LWC1 F16,0148 (T9) ;F16=org.lateral rotation -46083283 DIV.S F10,F6,F8 ;F10=rotation * 180.0/Pi that's either into or out of radians -4616B182 MUL.S F6,F22,F22 ;F6=ydif^2 -46062300 ADD.S F12,F4,F6 ;F12=xdif^2 + ydif^2 -46105480 ADD.S F18,F10,F16 ;F18=org.rotation + cur.rotation -0C007DF8 JAL 7001F7E0 ;F0=sqrt(F12) distance -461E9700 ADD.S F28,F18,F30 ;F28=org.rotation + cur.rotation + 180.0 -//7F0C6244: determine scenario -//as per scenario flags: outer 40/80 inner 60/A0 -//80 outer: purple FF80FF -//40 outer: red FF4080 -//20 outer: orange FF8040 -//10 outer: blue 4040C0 -//08 outer: green 408040 -//07 inner: team colour as defined: start with defaults -461A0082 MUL.S F2,F0,F26 ;F2=distance * 0.004 -001348C0 -SLL T1,S3,0x3 -01334823 -SUBU T1,T1,S3 -46001586 -MOV.S F22,F2 ;F22=distance * 0.004 -3C11FFFF *LUI S1,FFFF -8FAA0070 *LW T2,0070 (SP) ;V0=cur.player# -36310060 *ORI S1,S1,0060 ;S1=yellow -51530001 *BEQL T2,S3,+1 -3631FF00 *ORI S1,S1,FF00 ;yellow->white -//7F0C6268: colourized radar boxes -4618103C C.LT.S F2,F24 -3C0F8008 LUI T7,8008 -25EF9EF0 ADDIU T7,T7,9EF0 -00094900 SLL T1,T1,0x4 -45020001 *BC1FL +1 ;branch if 0.004*distance >= 16.0 -4600C586 -MOV.S F22,F24 ;F22=F24: set to 16.0 - edge of radar -012F1021 ADDU V0,T1,T7 ;V0=80079EF0+offset: p->cur.stats -90580069 LBU T8,0069 (V0) ;T8=cur.stats::scenario flags -37020100 `ORI V0,T8,0100 ;forced cutoff -3C037F0C `LUI V1,7F0C -30410008 `ANDI AT,V0,0008 -8C696400 `LW T1,6400 (V1) -00021042 `SRL V0,V0,0x1 -1020FFFC `BEQ AT,R0,-4 -2463FFFC `ADDIU V1,V1,FFFC -33040007 *ANDI A0,T8,0007 -10800004 *BEQ A0,R0,+4 ;default colours -AFA90080 *SW T1,0080 (SP) -//7F0C6294: team colours -0FC054F0 *JAL 7F0153C0 ;V0=RGBA from 3bit colour -00000000 *NOP -2451FF61 *ADDIU S1,V0,FF61 -//7F0C62A0: more alpha when current player -51530001 *BEQL T2,S3,+1 -26310040 *ADDIU S1,S1,0040 -//7F0C62A8: -don't need this stuff either -//7F0C62A8: FB010 -3C018006 LUI AT,8006 -C428BD24 LWC1 F8,BD24 (AT) ;F8=8005BD24: 0.017453 Pi/180 -4608E502 MUL.S F20,F28,F8 ;rotation * radian conversion -0FC15FAB JAL 7F057EAC -4600A306 MOV.S F12,F20 ;F12=F20: rotation -46160282 MUL.S F10,F0,F22 -4600A306 MOV.S F12,F20 -4600540D TRUNC.W.S F16,F10 -440C8000 MFC1 T4,F16 -0FC15FA8 JAL 7F057EA0 -01958021 ADDU S0,T4,S5 -//7F0C62D4: draw black base box on radar -//as per scenario flags: outer 40/80 inner 60/A0 -46160482 MUL.S F18,F0,F22 -//7F0C6340: collected stuff box::colour -8FA90080 *LW T1,0080 (SP) ;V0=cur.stats::scenario flags -51200002 +BEQL T1,R0,+2 -34090040 ORI T1,R0,0040 -2409FF20 +ADDIU T1,R0,FF20 -//7F0C62F8: correct alpha -8FA20070 +LW V0,0070 (SP) ;V0=cur.player# -50530001 +BEQL V0,S3,+1 -25290040 +ADDIU T1,T1,0040 -AFA90014 SW T1,0014 (SP) ;SP+14= rgba -8FA40088 LW A0,0088 (SP) ;A0=SP+88: DL -2605FFFE ADDIU A1,S0,FFFE -4600910D TRUNC.W.S F4,F18 -440E2000 MFC1 T6,F4 -26070002 ADDIU A3,S0,0002 -01D61021 ADDU V0,T6,S6 -24590002 ADDIU T9,V0,0002 -00409025 OR S2,V0,R0 -AFB90010 SW T9,0010 (SP) -0FC2B405 JAL 7F0AD014 ;draw coloured box -2446FFFE ADDIU A2,V0,FFFE -//7F0C6334: draw inner box on top of it -264F0001 ADDIU T7,S2,0001 -AFA20088 SW V0,0088 (SP) -AFAF0010 SW T7,0010 (SP) -00402025 OR A0,V0,R0 -2605FFFF ADDIU A1,S0,FFFF -2646FFFF ADDIU A2,S2,FFFF -26070001 ADDIU A3,S0,0001 -0FC2B405 JAL 7F0AD014 ;draw coloured box -AFB10014 SW S1,0014 (SP) ;SP+14=rgba -AFA20088 SW V0,0088 (SP) -//7F0C6360: draw collected box -8FA90080 +LW T1,0080 (SP) -11200008 +BEQ T1,R0,+8 -AFB20010 +SW S2,0010 (SP) -00123025 +OR A2,S2,R0 -00102825 +OR A1,S0,R0 -00103825 +OR A3,S0,R0 -8FA40088 +LW A0,0088 (SP) -0FC2B405 +JAL 7F0AD014 ;draw coloured box -AFA90014 +SW T1,0014 (SP) ;SP+14= rgba -AFA20088 +SW V0,0088 (SP) -//7F0C635C: loop for each player -8FB80074 LW T8,0074 (SP) ;T8=#players -26730001 ADDIU S3,S3,0001 ;S3++ count++ -5678FF86 BNEL S3,T8,7F0C61A8 ;loop for all players -8FAA0070 LW T2,0070 (SP) -//7F0C636C: reset combiner -0FC2B3BC JAL 7F0ACEF0 ;set combiner: bayer, lod, perspective -8FA40088 LW A0,0088 (SP) ;A0=SP+88: DL -//7F0C6374: return -8FBF006C LW RA,006C (SP) -D7B40018 LDC1 F20,0018 (SP) -D7B60020 LDC1 F22,0020 (SP) -D7B80028 LDC1 F24,0028 (SP) -D7BA0030 LDC1 F26,0030 (SP) -D7BC0038 LDC1 F28,0038 (SP) -D7BE0040 LDC1 F30,0040 (SP) -8FB0004C LW S0,004C (SP) -8FB10050 LW S1,0050 (SP) -8FB20054 LW S2,0054 (SP) -8FB30058 LW S3,0058 (SP) -8FB4005C LW S4,005C (SP) -8FB50060 LW S5,0060 (SP) -8FB60064 LW S6,0064 (SP) -8FB70068 LW S7,0068 (SP) -03E00008 JR RA -27BD0088 ADDIU SP,SP,0088 - -place bitflag RGBA samples here: -7F0C63EC: -00000000 default -408040C0 08: unregistered -4040C0C0 10: Flag blue -C08000C0 20: MwtGX orange -FFFF80C0 40: unregistered -FF80FFC0 80: unregistered - - -buglist (so far) ----------------- -fix team scoring so killing teammates isn't good - -+_+ - -TODO -MP scoring screen, generic. -When time scenario in use, display time on score page -When lonely YOLT, disable display altogether - -7F0C3C94 F87C4 determine/display rank -7F0C4024 watch menu page handler - -//7F0C45BC: page 3--scores - BLEZ T6,7F0C45F4 ;branch if stupid #players - OR A0,R0,R0 ;A0=playercount - ADDIU V1,SP,0094 ;V1=SP+94: buffer for scores -//7F0C45C8: collect scores - SW V1,0044 (SP) - JAL 7F0C38D8 ;returns V0=score (in NSNA: V0=score, V1=time) - SW A0,0090 (SP) ;SP+90= count - ADDU V0,V0,V1 ;V0=total score in NSNA - LW V1,0044 (SP) - LW A0,0090 (SP) ;A0=count - SW V0,0000 (V1) - LW T7,00D0 (SP) ;T7=#players - ADDIU A0,A0,0001 ;A0++ count++ - BNE A0,T7,7F0C45C8 ;loop for each player - ADDIU V1,V1,0004 ;V1+=4 next word in buffer -//7F0C45F4: - LUI A0,8009 - LW A0,C704 (A0) ;A0=8008C704: TRUE when game over - SLTIU T9,A0,0001 ;TRUE if game running - BEQ T9,R0,7F0C4618 ;branch if game over - OR A0,T9,R0 ;A0=0 - LUI A0,8009 - LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped - SLTIU T8,A0,0001 ;TRUE if playing - OR A0,T8,R0 ;A0=!play -//7F0C4618: determine if displaying ranks... - JAL 7F0C3F5C - NOP - BEQ V0,R0,7F0C46F4 - ADDIU A0,SP,00AC -//7F0C4628: display rank - JAL 7F0C3C94 ;print rank of player A1 to A0 - LW A1,00D4 (SP) - LUI T2,8004 - LW T2,0EAC (T2) - LUI A3,8004 - LW A3,0EB0 (A3) - ADDIU A0,SP,00BC - ADDIU A1,SP,00C0 - ADDIU A2,SP,00AC - SW R0,0014 (SP) - JAL 7F0AE98C ;proportions of string A2 - SW T2,0010 (SP) - JAL 70004514 ;V0= [p@800232A8+20] - NOP - LW T1,00A8 (SP) - LW T4,00C0 (SP) - ADDU T3,V0,T1 - SRA T5,T4,0x1 - SUBU A0,T3,T5 - ADDIU A0,A0,0050 - JAL 70004524 ;V0= [p@800232A8+22] - SW A0,00CC (SP) - LW T6,00BC (SP) - SRA T7,T6,0x1 - SUBU T9,V0,T7 - ADDIU T8,T9,0025 - JAL 7000441C ;V0= text clip width - SW T8,00C8 (SP) - SLL S0,V0,0x10 - SRA T2,S0,0x10 - JAL 7000442C ;V0= text clip height - OR S0,T2,R0 - LUI T1,8004 - LUI T4,8004 - LW T4,0EAC (T4) - LW T1,0EB0 (T1) - LUI T3,00FF - ORI T3,T3,00B0 ;T3=00FF00B0 font colour [green] - SW T3,0018 (SP) - OR A0,S1,R0 - ADDIU A1,SP,00CC - ADDIU A2,SP,00C8 - ADDIU A3,SP,00AC - SW S0,001C (SP) - SW V0,0020 (SP) - SW R0,0024 (SP) - SW R0,0028 (SP) - SW T4,0014 (SP) - JAL 7F0ADABC ;display text (details unknown) - SW T1,0010 (SP) - OR S1,V0,R0 -//7F0C46F4: display scores... - LUI A0,8009 - LW A0,C704 (A0) ;A0=8008C704: TRUE when game over - SLTIU T5,A0,0001 ;!game over - BEQ T5,R0,7F0C4718 ;branch if game over - OR A0,T5,R0 ;A0=0 - LUI A0,8009 - LW A0,C700 (A0) ;A0=8008C700: TRUE if play stopped - SLTIU T6,A0,0001 ;!play stopped - OR A0,T6,R0 ;A0=!play stopped -//7F0C4718: determine if displaying text... - JAL 7F0C3FCC ;V0= TRUE if displaying score in MP menu - NOP - BEQ V0,R0,7F0C4C50 - NOP -//7F0C4728: F9258 - *NOP - NOP - *NOP - JAL 7F0C1DD8 ;V0=p->text A0 - ORI A0,R0,A01B ;A0=ID A01B: "SCORES" - LUI T7,8004 - LW T7,0EAC (T7) ;T7=80040EAC: - LUI A3,8004 - SW V0,00A4 (SP) ;SP+A4= p->text - LW A3,0EB0 (A3) ;A3=80040EB0: - ADDIU A0,SP,00BC - ADDIU A1,SP,00C0 - OR A2,V0,R0 - SW R0,0014 (SP) - JAL 7F0AE98C ;proportions of string A2 - SW T7,0010 (SP) - JAL 70004514 ;V0= [p@800232A8+20] - NOP - LW T9,00A8 (SP) - LW T2,00C0 (SP) - ADDU T8,V0,T9 - SRA T1,T2,0x1 - SUBU A0,T8,T1 - ADDIU A0,A0,0050 - JAL 70004524 ;V0= [p@800232A8+22] - SW A0,00CC (SP) - LW T4,00BC (SP) - SRA T3,T4,0x1 - SUBU T5,V0,T3 - ADDIU T6,T5,0035 - JAL 7000441C ;V0= text clip width - SW T6,00C8 (SP) - SLL S0,V0,0x10 - SRA T7,S0,0x10 - JAL 7000442C ;V0= text clip height - OR S0,T7,R0 - LUI T9,8004 - LUI T2,8004 - LW T2,0EAC (T2) - LW T9,0EB0 (T9) - LUI T8,00FF - ORI T8,T8,00B0 ;T8=00FF00B0: font colour [green] - SW T8,0018 (SP) - OR A0,S1,R0 - ADDIU A1,SP,00CC - ADDIU A2,SP,00C8 - LW A3,00A4 (SP) - SW S0,001C (SP) - SW V0,0020 (SP) - SW R0,0024 (SP) - SW R0,0028 (SP) - SW T2,0014 (SP) - JAL 7F0ADABC ;display monotone text - SW T9,0010 (SP) - -//7F0C4800: F9330 -// everything up to here is just really messy. -// so begins the fun part... -0FC051DB *JAL 7F01476C ;V0=scenario::scoring -00408825 OR S1,V0,R0 ;S1=V0: DL -00021400 *SLL V0,V0,0x10 ;T6=scenario::time -AFA20080 *SW V0,0080 (SP) ;V1=SP+80: scenario::flags - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -//7F0C4834: F9364 - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -//7F0C485C: team 1 (red) - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -//7F0C4878: team 2 (blue) - *NOP - *NOP - *NOP - *NOP -//7F0C4888: default - *NOP - *NOP - *NOP - *NOP -//7F0C4898: 2 player display -8FAC00D0 LW T4,00D0 (SP) ;T4=SP+D0: #players -24010002 ADDIU AT,R0,0002 -1581004E BNE T4,AT,7F0C49DC ;branch if 3-4 player -00000000 NOP -0C001145 JAL 70004514 ;V0= [p@800232A8+20] -00000000 NOP -00028400 SLL S0,V0,0x10 -00105C03 SRA T3,S0,0x10 -0C001149 JAL 70004524 ;V0= [p@800232A8+22] -01608025 OR S0,T3,R0 -8FA800D4 LW T0,00D4 (SP) ;T0=cur.player# -00021C00 SLL V1,V0,0x10 -00036C03 SRA T5,V1,0x10 -01A01825 OR V1,T5,R0 -8FA10080 +LW AT,0080 (SP) -15000003 *BNEZ T0,7F0C48E0 ;branch if not player 1 -AFA10050 *SW AT,0050 (SP) -240E0001 *ADDIU T6,R0,0001 -A3AE0050 *SB T6,0050 (SP) ;SP+50=highlighted colour -//7F0C48E0: determine if current player's team - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -3C068008 *LUI A2,8008 -90C69F59 *LBU A2,9F59 (A2) ;T7=player 1's team flag -//7F0C4914: -A3A60053 *SB A2,0053 (SP) ;SP+50=team colour -8FB800A8 LW T8,00A8 (SP) -8FA90050 LW T1,0050 (SP) -02202025 OR A0,S1,R0 -02182821 ADDU A1,S0,T8 -24A50050 ADDIU A1,A1,0050 ;40/60 in 3-4pl. code -24660046 ADDIU A2,V1,0046 -8FA70094 LW A3,0094 (SP) -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFA90010 SW T1,0010 (SP) -0C001145 JAL 70004514 ;V0= [p@800232A8+20] -00408825 OR S1,V0,R0 -00028400 SLL S0,V0,0x10 -00106403 SRA T4,S0,0x10 -0C001149 JAL 70004524 ;V0= [p@800232A8+22] -01808025 OR S0,T4,R0 -8FA400D4 LW A0,00D4 (SP) -00021C00 SLL V1,V0,0x10 -00035C03 SRA T3,V1,0x10 -24010001 ADDIU AT,R0,0001 -14810002 *BNE A0,AT,7F0C4978 -01601825 OR V1,T3,R0 -A3A10050 *SB AT,0050 (SP) - *NOP - *NOP -//7F0C4978: - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -3C068008 *LUI A2,8008 -90C69FC9 *LBU A2,9FC9 (A2) ;T6=player 2's stats::scenario flags -//7F0C49AC: -A3A60053 *SB A2,0053 (SP) -8FB800A8 LW T8,00A8 (SP) -8FA90050 LW T1,0050 (SP) -02202025 OR A0,S1,R0 -02182821 ADDU A1,S0,T8 -24A50050 ADDIU A1,A1,0050 ;40/60 in 3-4pl. code -24660056 ADDIU A2,V1,0056 -8FA70098 LW A3,0098 (SP) -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFA90010 SW T1,0010 (SP) -1000009E BEQ R0,R0,7F0C4C50 -00408825 OR S1,V0,R0 -//7F0C49DC: 3-4 player -0C001145 JAL 70004514 ;V0= [p@800232A8+20] -00000000 NOP -00028400 SLL S0,V0,0x10 -00106403 SRA T4,S0,0x10 -0C001149 JAL 70004524 ;V0= [p@800232A8+22] -01808025 OR S0,T4,R0 -8FA800D4 LW T0,00D4 (SP) -00021C00 SLL V1,V0,0x10 -00035C03 SRA T3,V1,0x10 -01601825 -OR V1,T3,R0 -15000003 *BNEZ T0,7F0C4A14 -AFA00050 *SW R0,0050 (SP) -24090001 *ADDIU T1,R0,0001 -A3A90050 *SB T1,0050 (SP) - *NOP -//7F0C4A14: - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -3C068008 *LUI A2,8008 -90C69F59 *LBU A2,9F59 (A2) -//7F0C4A48: -A3A60053 *SB A2,0053 (SP) -8FAA00A8 LW T2,00A8 (SP) -8FB80050 LW T8,0050 (SP) -02202025 OR A0,S1,R0 -020A2821 ADDU A1,S0,T2 -24A50040 ADDIU A1,A1,0040 -24660046 ADDIU A2,V1,0046 -8FA70094 LW A3,0094 (SP) -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFB80010 SW T8,0010 (SP) -0C001145 JAL 70004514 ;V0= [p@800232A8+20] -00408825 OR S1,V0,R0 -00028400 SLL S0,V0,0x10 -00104C03 SRA T1,S0,0x10 -0C001149 JAL 70004524 ;V0= [p@800232A8+22] -01208025 OR S0,T1,R0 -8FA800D4 LW T0,00D4 (SP) -00021C00 SLL V1,V0,0x10 -00036403 SRA T4,V1,0x10 -24010001 ADDIU AT,R0,0001 -01801825 -OR V1,T4,R0 -15010002 *BNE T0,AT,7F0C4AAC -AFA00050 *SW R0,0050 (SP) -A3A10050 *SB AT,0050 (SP) - *NOP -//7F0C4AAC: - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -3C068008 *LUI A2,8008 -90C69FC9 *LBU A2,9FC9 (A2) ;T5=80079FC9: -//7F0C4AE0: -A3A60053 *SB A2,0053 (SP) -8FAE00A8 LW T6,00A8 (SP) -8FAA0050 LW T2,0050 (SP) -02202025 OR A0,S1,R0 -020E2821 ADDU A1,S0,T6 -24A50060 ADDIU A1,A1,0060 -24660046 ADDIU A2,V1,0046 -8FA70098 LW A3,0098 (SP) -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFAA0010 SW T2,0010 (SP) -0C001145 JAL 70004514 ;V0= [p@800232A8+20] -00408825 OR S1,V0,R0 -00028400 SLL S0,V0,0x10 -0010C403 SRA T8,S0,0x10 -0C001149 JAL 70004524 ;V0= [p@800232A8+22] -03008025 OR S0,T8,R0 -8FA800D4 LW T0,00D4 (SP) -00021C00 SLL V1,V0,0x10 -00034C03 SRA T1,V1,0x10 -24010002 ADDIU AT,R0,0002 -01201825 -OR V1,T1,R0 -15010002 *BNE T0,AT,7F0C4B44 -AFA00050 *SW R0,0050 (SP) -A3A10050 *SB AT,0050 (SP) - *NOP -//7F0C4B44: - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -3C068008 *LUI A2,8008 -90C6A039 *LBU A2,A039 (A2) -//7F0C4B78: -A3A60053 *SB A2,0053 (SP) -8FB900A8 LW T9,00A8 (SP) -8FAE0050 LW T6,0050 (SP) -02202025 OR A0,S1,R0 -02192821 ADDU A1,S0,T9 -24A50040 ADDIU A1,A1,0040 -24660056 ADDIU A2,V1,0056 -8FA7009C LW A3,009C (SP) -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFAE0010 SW T6,0010 (SP) -8FAA00D0 LW T2,00D0 (SP) ;T2=SP+D0: #players -24010004 ADDIU AT,R0,0004 -00408825 OR S1,V0,R0 -15410028 BNE T2,AT,7F0C4C50 ;branch if not 4 players -00000000 NOP -0C001145 JAL 70004514 ;V0= [p@800232A8+20] -00000000 NOP -00028400 SLL S0,V0,0x10 -0010C403 SRA T8,S0,0x10 -0C001149 JAL 70004524 ;V0= [p@800232A8+22] -03008025 OR S0,T8,R0 -8FA400D4 LW A0,00D4 (SP) -00021C00 SLL V1,V0,0x10 -00034C03 SRA T1,V1,0x10 -24010003 ADDIU AT,R0,0003 -01201825 -OR V1,T1,R0 -14810002 *BNE A0,AT,7F0C4BF0 -AFA00050 *SW R0,0050 (SP) -A3A10050 *SB AT,0050 (SP) - *NOP -//7F0C4BF0: - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP -3C068008 *LUI A2,8008 -90C6A0A9 *LBU A2,A0A9 (A2) -//7F0C4C24: -A3A60053 *SB A2,0053 (SP) -8FAE00A8 LW T6,00A8 (SP) -8FAA0050 LW T2,0050 (SP) -02202025 OR A0,S1,R0 -020E2821 ADDU A1,S0,T6 -24A50060 ADDIU A1,A1,0060 -24660056 ADDIU A2,V1,0056 -8FA700A0 LW A3,00A0 (SP) -0FC30D68 JAL 7F0C35A0 ;display player data to MP menu -AFAA0010 SW T2,0010 (SP) -00408825 OR S1,V0,R0 -//7F0C4C50: - LUI V1,8008 - BEQ R0,R0,7F0C5B44 - LW V1,A0B0 (V1) ;V1=8007A0B0: p->cur.BONDdata - - -7F0153C0 49EF0 convert 3bit colour to RGBA; fries T6 -have the value display run this. -normal colours run at B0 - run colour - run 40404040, & FF00 - fg: colour | backdrop - bg: zero (shouldn't be present) -highlights run at 70 - run colour - run A0A0A0A0 - bg: colour + 30 - fg: colour | backdrop - -assumes that 1-colour output is basically single-layer (bg=0) - -+_+ - -This function displays the player data in team colour -7F0C35A0 F80D0 Displays player data on MP menu screens; returns V0=new DL pos. - accepts: A0=p->DL, A1=x pos., A2=y pos., A3=p->data argument, SP+10=special, SP+11=display type, SP+13=3bit colour code - SP+10 format: - 04 align left - 02 align right - 01 highlight - display types: 0: score, 1: time, 2: string -27BDFFA0 ADDIU SP,SP,FFA0 -AFB00034 SW S0,0034 (SP) -00058025 OR S0,A1,R0 ;S0=A1: x position -AFB10038 SW S1,0038 (SP) -00048825 OR S1,A0,R0 ;S1=A0: p->DL -AFBF003C SW RA,003C (SP) -AFA60068 SW A2,0068 (SP) ;SP+68=A2: y position -// figure out display type -83A90071 *LB T1,0071 (SP) -00073025 OR A2,A3,R0 ;A2=A3: p->data arguments -1120000C +BEQ T1,R0,+normal score -3C052564 *LUI A1,2564 -// time, not usual score: converts 'score' into "mins:secs" -24090E10 +ADDIU T1,R0,0E10 -00C9001A +DIV A2,T1 -34A53A25 *ORI A1,A1,3A25 -3C043032 *LUI A0,3032 -00003012 +MFLO A2 -34846400 *ORI A0,A0,6400 -00003810 +MFHI A3 -2409003C +ADDIU T1,R0,003C -00E9001A +DIV A3,T1 -AFA40044 *SW A0,0044 (SP) ;string="%d:%02d" -00003812 +MFLO A3 -// normal score -AFA50040 *SW A1,0040 (SP) ;A1=: p->"%d" -// parse the c-string -27A50040 +ADDIU A1,SP,0040 -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -27A40048 ADDIU A0,SP,0048 ;A0=SP+48: p->buffer for new string -// -3C078004 LUI A3,8004 -8CEE0EAC LW T6,0EAC (A3) ;T6=80040EAC: p->1st font table -8CE70EB0 LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -27A40050 ADDIU A0,SP,0050 ;A0=SP+50: p->ret.height -27A50054 ADDIU A1,SP,0054 ;A1=SP+54: p->ret.width -27A60048 ADDIU A2,SP,0048 ;A2=SP+48: p->text -AFA00014 SW R0,0014 (SP) ;SP+14=0 ??? -0FC2BA63 JAL 7F0AE98C ;proportions of string A2 -AFAE0010 SW T6,0010 (SP) ;SP+10=p->1st font table -//7F0C35F8: -8FAF0054 LW T7,0054 (SP) ;T7=str.width -93A40073 *LBU A0,0073 (SP) ;T1=SP+73 (SP+10 from caller): colour code -30840007 +ANDI A0,A0,0007 ;drop unnecessary flags -50800001 *BEQL A0,R0,+1 ;default to green if no team -24040002 *ADDIU A0,R0,0002 -8FA80068 LW T0,0068 (SP) ;T0=SP+68: y pos. -000FC043 SRA T8,T7,0x1 -0218C823 SUBU T9,S0,T8 ;T9=x pos. - (width/2) -AFB9005C SW T9,005C (SP) ;SP+5C= T9: x pos. -83AE0070 *LB T6,0070 (SP) ;T6=SP+70 (SP+10 from caller): highlight flag -141C0007 *BNEZ T6,+highlight -AFA80058 SW T0,0058 (SP) ;SP+58= T0: ypos -//7F0C3624: no highlight -0FC054F1 *JAL 7F0153C4 ;3-bit colour conversion - A1=value -240500B0 *ADDIU A1,R0,00B0 -3C094040 *LUI T1,4040 -35294000 *ORI T1,T1,4000 ;T1=40404000 -10000006 *BEQ R0,R0,+display!-1 -3045FF00 *ANDI A1,V0,FF00 ;A1=bg: no alpha -//7F0C3640: highlight -0FC054F1 *JAL 7F0153C4 ;3-bit colour conversion - A1=value -24050070 *ADDIU A1,R0,0070 -3C09A0A0 *LUI T1,A0A0 -3529A0A0 *ORI T1,T1,A0A0 -24450030 *ADDIU A1,V0,0030 -00492025 *OR A0,V0,T1 -// display! -AFA40018 *SW A0,0018 (SP) ;SP+18= fg colour -0C001107 JAL 7000441C ;V0= text clip width -AFA5001C *SW A1,001C (SP) ;SP+1C= bg colour -00028400 SLL S0,V0,0x10 -00108403 *SRA S0,S0,0x10 -0C00110B JAL 7000442C ;V0= text clip height -3C0F8004 LUI T7,8004 -8DF80EAC *LW T8,0EAC (T7) ;T8=80040EAC: p->1st font table -8DEF0EB0 LW T7,0EB0 (T7) ;T7=80040EB0: p->2nd font table -00112025 OR A0,S1,R0 ;A0=S1: p->DL -27A5005C ADDIU A1,SP,005C ;A1=SP+5C: p->x position -27A60058 ADDIU A2,SP,0058 ;A2=SP+58: p->y position -27A70048 ADDIU A3,SP,0048 ;A3=SP+48: p->text -AFB00020 SW S0,0020 (SP) ;SP=20= clip height -AFA20024 SW V0,0024 (SP) ;SP+24= clip width -AFA00028 SW R0,0028 (SP) ;SP=28= y offset (0) -AFA0002C SW R0,002C (SP) ;SP+2C= x offset (0) -AFB80014 SW T8,0014 (SP) ;SP+14= p->1st font table -0FC2B9BB JAL 7F0AE6EC ;display 2-tone text on MP menu -AFAF0010 SW T7,0010 (SP) ;SP+10= p->2nd font table -00028825 OR S1,V0,R0 -//7F0C38C0: return -8FBF003C LW RA,003C (SP) -00111025 OR V0,S1,R0 ;V0=S1: p->DL -8FB10038 LW S1,0038 (SP) -8FB00034 LW S0,0034 (SP) -03E00008 JR RA -27BD0060 ADDIU SP,SP,0060 - -second revision, to allow strings to be output. format=2 -third revision, to allow alignment types -27BDFF10 *ADDIU SP,SP,FF10 -AFB00034 SW S0,0034 (SP) -00058025 OR S0,A1,R0 ;S0=A1: x position -AFB10038 SW S1,0038 (SP) -00048825 OR S1,A0,R0 ;S1=A0: p->DL -AFBF003C SW RA,003C (SP) -AFA60050 *SW A2,0050 (SP) ;SP+68=A2: y position -// figure out display type -83A90101 *LB T1,0101 (SP) -00073025 OR A2,A3,R0 ;A2=A3: p->data arguments -1120000F *BEQ T1,R0,+normal score -3C052564 LUI A1,2564 -39290002 +XORI T1,T1,0002 -5120000C +BEQL T1,R0,+normal score -3C052573 +LUI A1,2573 ;"%s" -// time, not usual score: converts 'score' into "mins:secs" -24090E10 ADDIU T1,R0,0E10 -00C9001A DIV A2,T1 -34A53A25 ORI A1,A1,3A25 -3C043032 LUI A0,3032 -00003012 MFLO A2 -34846400 ORI A0,A0,6400 -00003810 MFHI A3 -2409003C ADDIU T1,R0,003C -00E9001A DIV A3,T1 -AFA40044 SW A0,0044 (SP) ;string="%d:%02d" -00003812 MFLO A3 -// normal score -AFA50040 SW A1,0040 (SP) ;A1=: p->"%d" -// parse the c-string -27A50040 ADDIU A1,SP,0040 -0C002B25 JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -27A40058 *ADDIU A0,SP,0058 ;A0=SP+48: p->buffer for new string -// -3C078004 LUI A3,8004 -8CEE0EAC LW T6,0EAC (A3) ;T6=80040EAC: p->1st font table -8CE70EB0 LW A3,0EB0 (A3) ;A3=80040EB0: p->2nd font table -27A40048 *ADDIU A0,SP,0048 ;A0=SP+50: p->ret.height -27A5004C *ADDIU A1,SP,004C ;A1=SP+54: p->ret.width -27A60058 *ADDIU A2,SP,0058 ;A2=SP+48: p->text -AFA00014 SW R0,0014 (SP) ;SP+14=0 ??? -0FC2BA63 JAL 7F0AE98C ;proportions of string A2 -AFAE0010 SW T6,0010 (SP) ;SP+10=p->1st font table -//7F0C35F8: -8FAF004C *LW T7,004C (SP) ;T7=str.width -93A40103 *LBU A0,0103 (SP) ;T1=SP+73 (SP+10 from caller): colour code -30840007 ANDI A0,A0,0007 ;drop unnecessary flags -50800001 BEQL A0,R0,+1 ;default to green if no team -24040002 ADDIU A0,R0,0002 -8FA80050 *LW T0,0050 (SP) ;T0=SP+68: y pos. -// these lines added to do screen alignment -// 0=center(xpos-halfwidth), 2=right-align (xpos-width), 4=left-align (at location) -83AE0100 +LB T6,0100 (SP) ;T6=SP+70 (SP+10 from caller): highlight flag -31C20004 +ANDI V0,T6,0004 -14400004 +BNE V0,R0,+4 ;skip correction when aligning left -31C20002 +ANDI V0,T6,0002 -50400001 +BEQL V0,R0,+1 ;when not set, use halfwidth. When set, use fullwidth -000F7843 *SRA T7,T7,0x1 ;T7=halfwidth -020F8023 *SUBU S0,S0,T7 ;T9=x pos. - (width/2) -AFB00054 *SW S0,0054 (SP) ;SP+5C= T9: x pos. -31CE0001 *ANDI T6,T6,0001 ;T6=SP+70 (SP+10 from caller): highlight flag -// no more changes past this point -15C00007 BNEZ T6,+highlight -AFA80050 *SW T0,0050 (SP) ;SP+58= T0: ypos -//7F0C3624: no highlight -0FC054F1 JAL 7F0153C4 ;3-bit colour conversion - A1=value -240500B0 ADDIU A1,R0,00B0 -3C094040 LUI T1,4040 -35294000 ORI T1,T1,4000 ;T1=40404000 -10000006 BEQ R0,R0,+display!-1 -3045FF00 ANDI A1,V0,FF00 ;A1=bg: no alpha -//7F0C3640: highlight -0FC054F1 JAL 7F0153C4 ;3-bit colour conversion - A1=value -24050070 ADDIU A1,R0,0070 -3C09A0A0 LUI T1,A0A0 -3529A0A0 ORI T1,T1,A0A0 -24450030 ADDIU A1,V0,0030 -00492025 OR A0,V0,T1 -// display! -AFA40018 SW A0,0018 (SP) ;SP+18= fg colour -0C001107 JAL 7000441C ;V0= text clip width -AFA5001C SW A1,001C (SP) ;SP+1C= bg colour -00028400 SLL S0,V0,0x10 -00108403 SRA S0,S0,0x10 -0C00110B JAL 7000442C ;V0= text clip height -3C0F8004 LUI T7,8004 -8DF80EAC LW T8,0EAC (T7) ;T8=80040EAC: p->1st font table -8DEF0EB0 LW T7,0EB0 (T7) ;T7=80040EB0: p->2nd font table -00112025 OR A0,S1,R0 ;A0=S1: p->DL -27A50054 *ADDIU A1,SP,0054 ;A1=SP+5C: p->x position -27A60050 *ADDIU A2,SP,0050 ;A2=SP+58: p->y position -27A70058 *ADDIU A3,SP,0058 ;A3=SP+48: p->text -AFB00020 SW S0,0020 (SP) ;SP=20= clip height -AFA20024 SW V0,0024 (SP) ;SP+24= clip width -AFA00028 SW R0,0028 (SP) ;SP=28= y offset (0) -AFA0002C SW R0,002C (SP) ;SP+2C= x offset (0) -AFB80014 SW T8,0014 (SP) ;SP+14= p->1st font table -0FC2B9BB JAL 7F0AE6EC ;display 2-tone text on MP menu -AFAF0010 SW T7,0010 (SP) ;SP+10= p->2nd font table -00028825 OR S1,V0,R0 -//7F0C38C0: return -8FBF003C LW RA,003C (SP) -00111025 OR V0,S1,R0 ;V0=S1: p->DL -8FB10038 LW S1,0038 (SP) -8FB00034 LW S0,0034 (SP) -03E00008 JR RA -27BD00F0 *ADDIU SP,SP,00F0 - - -correction for static calls: -//7F0C5380: F9EB0 -ADDIU T1,R0,0003 -> 0004 - -//7F0C5440: F9F70 -ADDIU T9,R0,0003 -> 0004 - -//7F0C54F8: FA028 -ADDIU T6,R0,0003 -> 0004 - -//7F0C55BC: FA0EC -ADDIU T9,R0,0003 -> 0004 - -//7F0C5680: FA1B0 -ADDIU T3,R0,0003 -> 0004 - -//7F0C5750: FA280 -ADDIU T7,R0,0003 -> 0004 - -rewrite this so it doesn't use TLB pointers -also, should default to "score" -//7F0C40A0: F8BD0 2 player SP+A8=0x50 - LW T9,A0B0 (T9) ;T9=8007A0B0: p->BONDdata - LW T1,29C8 (T9) ;T1=BONDdata+29C8: selected page in menu -24010007 *ADDIU AT,R0,0007 -10290088 *BEQ AT,T1,7F0C42D0 ;skip write if no text appears -24010004 *ADDIU AT,R0,0004 -1029001C *BEQ AT,T1,7F0C4128 -24010005 *ADDIU AT,R0,0005 -1029 *BEQ AT,T1,7F0C4170 -24010006 *ADDIU AT,R0,0006 -1029 *BEQ AT,T1,7F0C4170 -//7F0C40C8: pages 0,1,2,3 - play -00000000 *NOP -3C0B8009 *LUI T3,8009 -8D6AC704 *LW T2,C704 (T3) ;T2=8008C704: TRUE when game over - -for the record, passing 7F0AE6EC (2-tone) an invisible as the background colour is the same as the monotone function \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/scenario bitflag modification.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/scenario bitflag modification.txt deleted file mode 100644 index 8d118f2..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/MP menus/menu 13 - scenario select/scenario bitflag modification.txt +++ /dev/null @@ -1,692 +0,0 @@ -Goal of this is to set scenarios to use bitflags (mostly) instead of ordinary 0-X values. -This will allow certain scenarios and features to be used in conjunction with each other. -Eventually this will lead to a complete revision of the MP scoring system, but not yet ;*) - -Scenarios are divided into two types: time and point scenarios. -Time scenarios are those like flag tag, requiring a certain time to end the game or score. -Point scenarios end when the given number of points are reached. - -allocating space for 48 scenarios: 16 of each type -7F0118A8 463D8 -scenario word: -0x0 2 bitflags - 0001 you only live x - 0002 teams - 0004 license to kill - 0008 A View to a Kill (no sight or autoaim) - 0010 [Quantum of Solace (temp. invincibility after kills)] -0x2 1 time scenario. - 00 disabled - 01 Flag Tag - 02 Live and Let Die (longest inning) - 03 [TWINE (king of the hill)] - 04 [] -0x3 1 point scenario. - 00 disabled (Normal) - 01 MwtGX - 02 [Shaken, not Stirred (accuracy)] - 03 [] - -New entry format -0x0 2 name -0x2 1 type flags - E0 reserved for player lock bitflags. Allow when =1 - 0F type of entry - 02 score scenarios - 01 time scenarios - 00 bitflag entries -0x3 1 RESERVED option lock mask? -would use this to build a runtime table for each set of entries - - -+_+ - -Stuff that needs modifying: -7F010170 44CA0 handles selecting game length under different scenarios -7F010468 44F98 reset MP options for selected scenario [A0] -7F010608 45138 initialize MP menu - +463C4 menu 0E constructor: multiplayer options -7F014758 49288 V0= MP scenario -7F014CC0 497F0 3->80069788 if scenario 2vs1; else 2->80069788 -7F014D48 49878 menu 14 interface: team setup - -use two scenario-pulling routines: - -7F014758 49288 V0="scenario" bitflags -7F01475C 4928C V0="scenario" bitflags & A0 -7F01476C 4929C V0=time, V1=point scenarios - -uses of the scenario-pulling routine: -7F014758 49288 0FC051D6 -* 7F001E38 36968 sets MP respawn flag; see fix below -* 7F0028A0 373D0 part of 08 expansion, so can probably be fiddled with safely -* 7F0111FC 45D2C MP options screen; safe (?) -* 7F011300 45E30 menu constructor; safe, probably -* 7F050A8C 855BC safe, though does series of tests and copies V0 to V1 -* 7F0895C0 BE0F0 respawn just save the one you need to SP+40 -* 7F089A70 BE5A0 checks handicap for LtK. Rewrite likely, but okay -* 7F089D40 BE870 kill allocation. safe -* 7F0BDCD4 F2804 force handicap for LtK. Rewrite possible, but okay -* 7F0BEFB8 F3AE8 YOLT, display of sorts. safe -* 7F0BFA30 F4560 flag test. safe -~ 7F0BFAD0 F4600 GG. probably also safe. Shorten this routine up -* 7F0C3908 F8438 #points+time. Needs to return V1, so use a different variable for running tally -. 7F0C3CA4 F87D4 rank. should be safe -* 7F0C3F5C F8A8C okay. part of a JR routine... 8005BCC0 -* 7F0C3FD4 F8B04 scenario-specific. unknown, but likely okay. uses JR: 8005BCE0 - 7F0C4728 F9258 okay. save one you need in SP+80 -* 7F0C5F0C FAA3C should be safe. YOLT - 7F0C60D0 FAC00 probably okay. save one you need using OR S4,VX,R0. YOLT - -other things that pull the value 8002B540 -* 7F010468 44F98 set default MP menu settings for scenario A0 - 7F0106A8 451D8 init MP menu: determines min/max players for selected scenario, for selection -- 7F0111A0 45CD0 MP option menu: pulls name of scenario -* 7F0113B0 45EE0 invented routine to test if YOLT is alone -* 7F014758 49288 scenario bitflag command - 7F014CC0 497F0 init.team menu: 2vs1 sets 3 red vs 1 blue - 7F014DD0 49900 team menu interface: 2vs1 - 7F014E74 499A4 team menu interface: 2vs2 - 7F014F1C 49A4C team menu interface: 2vs2 - 7F014FC4 49AF4 team menu interface: 2vs1 - 7F015090 49BC0 team menu interface: 2vs2 - 7F015388 49EB8 team menu construct: 2vs2 -? 7F0C03F0 F4F20 ramrom: save regs before replay -? 7F0C054C F507C ramrom: copy to regs -* 7F0C65CC FB0FC MwtGX: advance MP weapon set menu one option - -Scenario page: - "Normal" unselects all options - Use drop-down menus to select the various scenarios - "Teams" jump to the colour selection window, then back here - - Score: Normal - Man with the Golden Gun - Shaken, not Stirred - Time: Normal - The Living Daylights - Live and Let Die - You Only Live Twice - License to Kill - Teams - - -all these kill reliances on V1... -//7F001E24: 36954 -240A0004 *ADDIU T2,R0,0004 - LBU V0,0003 (S1) - ADDIU AT,R0,0008 - BNE V0,AT,7F001E84 - LBU T8,0080 (S1) -//7F001E38: 36968 -0FC051DB *JAL 7F01476C ;V0=scenario::scores -24010001 *ADDIU AT,R0,0001 ;MwtGX/TLD - BNE V0,AT,+3 -24020058 -ADDIU V0,R0,0058 - BEQL V0,T8,7F001E84 - OR T2,R0,R0 -1461000E *BNE V1,AT,7F001E7C ;upper word, MwtGX - NOP -0FC1A4FD -JAL 7F0693F4 ;V0=p->weapon in set; fries T6,T7 -240400F7 -ADDIU A0,R0,00F7 -90420000 -LBU V0,0000 (V0) -//7F001E54: 36984 -... -//7F001E7C: 369AC LTK - BEQL V0,T8,7F001E84 -00005025 *OR T2,R0,R0 - LBU T0,0002 (S1) -01484026 *XOR T0,T2,T0 - SB T0,0002 (S1) - -use only one flag... -//7F00289C: 373CC - *ADDIU AT,R0,0001 ;time:flag -0FC051DB *JAL 7F01476C ;V0=scenario::scores - NOP - BNEL V0,AT,+1 - SW R0,0018 (SP) - - -does what it says. relies on a new format for entries - -7F010468 44F98 set default MP menu settings for scenarios -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC051D6 *JAL 7F014758 ;scenario bitflags -240800FF ADDIU T0,R0,00FF -//7F010488 44FB8 YOLT -30430001 *ANDI V1,V0,0001 -54600001 *BNEL V1,R0,+1 ;branch if not You Only Live Twice -3108007F -ANDI T0,T0,007F ;set mask -//7F010494 44FC4 LtK -30430004 *ANDI V1,V0,0004 -54600001 *BNEL V1,R0,+1 ;branch if LtK -310800EF -ANDI T0,T0,00EF ;set mask -//7F010490 44FC0 Teams -;OLD VERSION -;30430002 *ANDI V1,V0,0002 -;14600005 *BNE V1,R0,+5 ;branch if teams set; code below resets flags in register -;3C038008 *LUI V1,8008 -;A0609F59 SB R0,9F59 (V1) -;A0609FC9 SB R0,9FC9 (V1) -;A060A039 SB R0,A039 (V1) -;A060A0A9 SB R0,A0A9 (V1) -;NEW VERSION -3C038008 LUI V1,8008 -24040003 ADDIU A0,R0,0003 ;A0=3 work backward -// loop -30410002 ANDI AT,V0,0002 -50200004 BEQL AT,R0,+4 -00000825 OR AT,R0,R0 ;AT=0 no team -3C018003 LUI AT,8003 -00240821 ADDU AT,AT,A0 -9021B560 LBU AT,B560 (AT) ;AT=player's team flag -A061A0A9 SB AT,A0A9 (V1) -2463FF90 ADDIU V1,V1,FF90 ;V1-=0x70 -1C80FFF7 BGTZ A0,-loop -2484FFFF ADDIU A0,A0,FFFF - -//7F0104A0 44FD0 A View to a Kill -30430008 *ANDI V1,V0,0008 -54600001 *BNEL V1,R0,+1 ;branch if AVtaK -310800BF -ANDI T0,T0,00BF ;set mask -//7F0104A0 44FD0 time and score -0FC051DB *JAL 7F01476C ;V0=scenario::scores -24040001 *ADDIU A0,R0,0001 -14640006 *BNE A0,V1,return ;branch if not MwtGX: make sure this is last, since it buggers registers! -3C038005 *LUI V1,8005 -0FC31993 JAL 7F0C664C -9064915F *LBU A0,915F (V1) ;A0=8004915F -0044102A SLT V0,V0,A0 -54400001 BNEL V0,R0,+1 -A0649162 SB A0,9162 (V1) -//7F0104E4 45014 -3C018003 LUI AT,8003 -A028B544 SB T0,B544 (AT) ;save the new option locks -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -7F0106A8 451D8 init MP menu: determines min/max players for selected scenario, for selection -Nowadays, all scenarios must work regardless the number of players -A2=#players -//7F0106A8: 451D8 set scenario to default: NOP all these; don't need 'em - LUI T9,8003 - LW T9,B540 (T9) //T9=8002B540=scenario - LUI T4,8003 - ADDIU T4,T4,B054 //T4=8002B054 (table of text, min/max players) - SLL T3,T9,0x2 //T3=scenario->offset - ADDU V0,T3,T4 //V0=8002B054+ - LBU T5,0003 (V0) //T5=max players - SLT AT,T5,A2 //TRUE if < max - BNEZ AT,7F0106E0 - NOP - LBU T6,0002 (V0) //T6=min players - SLT AT,A2,T6 //TRUE if < min - BEQ AT,R0,7F0106F0 - NOP -//7F0106E0: 45210 bad bad rubber piggy - RESET ALL MP VALUES -JAL 7F010468 //sets defaults for each scenario type -OR A0,R0,R0 //A0=0 - - - -7F0111A0: 45CD0 disable displaying selected scenario -NOP all these commands! -3C048003 -LUI A0,8003 -8C8EB540 *LW T6,B540 (A0) ;T8=8002B540: selected scenario -000E7080 *SLL T6,T6,0x2 ;T9=scenario ->offset -008E2021 *ADDU A0,A0,T6 -0FC30776 JAL 7F0C1DD8 ;V0=text ID A0 -9484B054 LHU A0,B054 (A0) ;A0=8002B054+offset: scenario name -//7F0111B8: display -240400A0 *ADDIU A0,R0,00A0 -2405008D *ADDIU A1,R0,008D -0FC046B5 *JAL 7F011AD4 ;display::black -00023825 *OR A3,V0,R0 - -links to specialized routine below -//7F0111FC 45D2C MP options screen -0FC044EC *JAL 7F0113B0 -00000000 *NOP -1440001E *BNE V0,R0,7F011280 -... - - -this swaps: "Unlimitted" with "Last Person Alive" -//7F0112FC: 45E2C menu constructor -00000000 *NOP -0FC044EC *JAL 7F0113B0 -34049C2D ORI A0,R0,9C2D -54400001 *BNEL V0,R0,+1 -34049C34 ORI A0,R0,9C34 - -For both above, a special routine. This is strictly because both menus require this exact feature. -7F0113B0 45EE0 V0=TRUE if standalone You Only Live Twice -3C038003 LUI V1,8003 -9462B540 LHU V0,B540 (V1) -54400002 BNEL V0,R0,+return -00001025 OR V0,R0,R0 -9462B542 LHU V0,B542 (V1) -03E00008 JR RA -30420001 ANDI V0,V0,0001 - - -tests for both flag and MwtGX, so serial test... -//7F050A8C 855BC -0FC051DB *JAL 7F01476C ;V0=scenario::scores - NOP -24010001 *ADDIU AT,R0,0001 ;new flag - BNE V0,AT,7F050ABC ;branch if not flag -00000000 *NOP -AFA30058 *SW V1,0058 (SP) ;save point scenario - JAL 7F05E05C - ADDIU A0,R0,0058 - LW V1,0058 (SP) - SW V0,005C (SP) - NOP - NOP -//7F050ABC: 855EC -24010001 *ADDIU AT,R0,0001 - BNEL V1,AT,7F050AE0 ;branch if not MwtGX - LW T3,005C (SP) -... - - -rewrite to allow a good scenario test, pulling #YOLX lives -//7F0895C0 BE0F0 -0FC051D6 JAL 7F014758 ;scenario bitflags -... -//7F0895E8: BE118 -8FA8003C LW T0,003C (SP) ;T0= player killed -3C0A8008 LUI T2,8008 -00084880 -SLL T1,T0,0x2 ;T1= player->offset: offset to #playerkills, to compute total deaths -012A1021 -ADDU V0,T1,T2 ;V0=80079EE0+offset: base for player data, offset for player kills to pull -8C429EE0 *LW V0,9EE0 (V0) ;T2=80079EE0: p->BONDdata for each player -//7F0895FC: BE12C grab #deaths for You Only Live Twice -8C4B29D8 *LW T3,29D8 (V0) ;T3=#deaths -8C4429DC *LW A0,29DC (V0) ;A0=#suicides -00000000 *NOP -00000000 *NOP -0FC04117 *JAL 7F01045C ;V0=#lives -008B2021 ADDU A0,A0,T3 ;A0+=T3: #losses -//7F089614: BE144 YOLT -8FAC0040 LW T4,0040 (SP) ;T4=scenario -31810001 *ANDI AT,T4,0001 -10200003 *BEQ AT,R0,7F08962C ;branch if not "You Only Live Twice" -0082082A *SLT AT,A0,V0 ;TRUE if died less than #lives -1020000C BEQ AT,R0,7F089658 ;skip if you're out! -00000000 NOP - - -//7F089A70 BE5A0 LtK -0FC051D7 *JAL 7F01475C ;scenario bitflags & V1 -24030004 *ADDIU V1,R0,0004 - *NOP -1040000B *BEQ V0,R0,7F089AAC - LUI V0,8008 - - -//7F089D40 BE870 kill allocation -0FC051DB *JAL 7F01476C ;V0=scenario::scores -24010001 *ADDIU AT,R0,0001 -1423000C *BNE AT,V1,7F089D7C ;branch if not MwtGX - NOP - JAL ... - - -I should rewrite this one day to use the actual LtK entry -//7F0BDCD4 F2804 force handicap for LtK -0FC051D7 *JAL 7F01475C ;scenario bitflags & V1 -24030004 *ADDIU V1,R0,0004 ;LtK mask -0FC040ED JAL 7F0103B4 ;F0=LtK handicap (first in list) -00002025 -OR A0,R0,R0 -14400003 *BNE V0,R0,7F0BDCF4 ;branch if LtK -00000000 NOP - - -//7F0BEFB8 F3AE8 YOLT -0FC051D7 *JAL 7F01475C ;scenario bitflags & V1 -24030001 *ADDIU V1,R0,0001 ;YOLT mask -00000000 *NOP -10400086 *BEQ V0,R0,7F0BF1E0 - ... -note this still needs to be fixed for 2-life detection - - -//7F0BFA30 F4560 flag... -0FC051DB *JAL 7F01476C ;V0=scenario::scores - SWC1 F6,0038 (V0) - *ADDIU AT,R0,0001 ;flag - BNE V0,AT,7F0BFAD0 - - -//7F0BFA84 F45B4 MwtGX, again... -0FC051DB *JAL 7F01476C ;V0=scenario::scores - NOP -24010001 *ADDIU AT,R0,0001 ;mask for MwtGX -1461000C *BNE V1,AT,7F0BFB10 ;branch if not MwtGX - LUI T0,8008 - - -refer to seperate doc for 7F0C3908 F8438 - -!!DON'T FORGET ME!! forcing false right now -handles displaying rank when playing a 3vs1, which apparently forces 4th place for a losing 1p team -//7F0C3CA4 F87D4 rank - JAL 7F014758 - SW A1,0084 (SP) - JAL 7F09A464 - SW V0,007C (SP) ;scenario->SP+7C -... -// F89AC - BEQ T2,AT,7F0C3F0C - LW T9,007C (SP) ;T9=scenario - BEQ R0,R0,7F0C3F4C - LW RA,001C (SP) -... -//7F0C3F0C F8A3C - ADDIU AT,R0,0006 ;team 3vs1 - BEQ T9,AT,7F0C3F34 ;branch if team - NOP - JAL 7F0C1DD8 - ORI A0,R0,A014 - LW A0,0080 (SP) - JAL 7000AC94 - OR A1,V0,R0 - BEQ R0,R0,7F0C3F4C - LW RA,001C (SP) -//7F0C3F34 F8A64 - JAL 7F0C1DD8 - ORI A0,R0,A012 - LW A0,0080 (SP) - JAL 7000AC94 - OR A1,V0,R0 -//7F0C3F48 F8A78 -maybe just force to always return false or something... - -7F0C3F5C F8A8C V0=TRUE if rank to be displayed on MP menu - accepts: A0=TRUE if playing (false if stopped) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F014758 ;V0=scenario -SW A0,0018 (SP) -SLTIU AT,V0,0008 -BEQ AT,R0,7F0C3FB4 -SLL T6,V0,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,BCC0 (AT) ;T6=8005BCC0+offset: routine assigned to scenario -JR T6 -NOP -//7F0C3F8C F8ABC -BEQ R0,R0,F8AEC -ADDIU V0,R0,0001 -//7F0C3F94 F8AC4 You Only Live Twice -LW T7,0018 (SP) ;T7=A0: TRUE if playing -ADDIU V1,R0,0001 -BEQ T7,R0,7F0C3FAC ;if not playing, return TRUE -NOP -BEQ R0,R0,F8AEC ;if A0!=0, return FALSE -OR V0,R0,R0 -//7F0C3FAC: -BEQ R0,R0,F8AEC -OR V0,V1,R0 -//7F0C3FB4 F8AE4 -BEQ R0,R0,F8AE4 -NOP -//7F0C5DBC FA8EC return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -general rewrite of routine... -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC051D7 *JAL 7F01475C ;V0=TRUE if You Only Live Twice -24030001 *ADDIU V1,R0,0001 -10400003 *BEQ V0,R0,RETURN -24020001 *ADDIU V0,R0,0001 -//you only live twice -54800001 *BNEL A0,R0,+1 -00001025 *OR V0,R0,R0 -//return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -7F0C3F5C F8A8C V0=TRUE if rank to be displayed on MP menu; fries AT -AFBFFFEC SW RA,FFEC (SP) -0FC044EC *JAL 7F0113B0 ;V0=TRUE if YOLT alone -27BDFFE8 ADDIU SP,SP,FFE8 -//test if LalD (causes rank 'flicker') -14400005 *BNE V0,R0,TEST -00001025 *OR V0,R0,R0 -0FC051DB *JAL 7F01476C ;V0=scenario::scoring -24010002 ADDIU AT,R0,0002 -54220002 BNEL AT,V0,+2 ;branch if NOT live and let die -24020001 *ADDIU V0,R0,0001 -//test if still playing -00001025 *OR V0,R0,R0 -3C018009 LUI AT,8009 -8C21C704 LW AT,C704 (AT) ;AT=TRUE if play stopped -00221025 *OR V0,AT,V0 -//return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - - - -7F0C3FCC F8AFC V0=TRUE if score to be displayed on MP menu - accepts: A0=TRUE if playing (false if stopped) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F014758 -SW A0,0018 (SP) -SLTIU AT,V0,0008 -BEQ AT,R0,7F0C400C -SLL T6,V0,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,BCE0 (AT) -JR T6 -NOP -//7F0C3FFC F8B2C -BEQ R0,R0,7F0C4014 -ADDIU V0,R0,0001 -//7F0C4004 F8B34 -BEQ R0,R0,7F0C4014 -OR V0,R0,R0 -//7F0C400C F8B3C -BEQ R0,R0,7F0C400C -NOP -//7F0C4014 F8B44 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -another general rewrite -a better system would be 0 for none, 1 for points, -1 for time -7F0C3FCC F8AFC -AFBFFFFC SW RA,FFFC (SP) ;SP-4=SP-18+14= -//test flag tag -0FC051DB JAL 7F01476C -27BDFFE8 ADDIU SP,SP,FFE8 -24030001 ADDIU V1,R0,0001 -50430004 BEQL V0,V1,RETURN -00001025 OR V0,R0,R0 -//test -0FC051D7 *JAL 7F01475C ;V0=TRUE if You Only Live Twice -24030001 *ADDIU V1,R0,0001 -38020001 *XORI V0,V0,0001 -//return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -7F0C3FCC F8AFC V0=TRUE if score to be displayed on MP menu -AFBFFFFC SW RA,FFFC (SP) ;SP-4=SP-18+14= -//test time scenarios -0FC051DB JAL 7F01476C -27BDFFE8 ADDIU SP,SP,FFE8 -54400004 BNEL V0,R0,RETURN -2402FFFF ADDIU V0,R0,FFFF -//test lonely YOLT -0FC044EC *JAL 7F0113B0 ;V0=TRUE if YOLT alone -00000000 *NOP -38020001 *XORI V0,V0,0001 -//return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -!!DON'T FORGET TO DO ME!! -part of the MP watch menu -//7F0C4728 F9258 - JAL 7F014758 - NOP - SW V0,0080 (SP) -... -//7F0C4800 F9330 - LW V1,0080 (SP) - ADDIU AT,R0,0005 - OR S1,V0,R0 - BEQ V1,AT,7F0C4834 - LW T1,00D4 (SP) - ADDIU AT,R0,0006 - BEQ V1,AT,7F0C4834 - ADDIU AT,R0,0007 - BEQ V1,AT,7F0C4834 - ADDIU AT,R0,0002 - BEQ V1,AT,7F0C4834 ;branch here if teams, MwtGX, Flag Tag (overlay-type scenarios) - ADDIU AT,R0,0003 - BNE V1,AT,7F0C4888 ;branch if normal, you only live twice, LtK - SLL T4,T1,0x3 - - -Prints "Press Start" when more lives to live -//7F0C5E64 FA994 - OR V0,S1,R0 ;V0=#players - BLEZ V0,7F0C5F0C ;skip if invalid - OR A1,R0,R0 ;A1=0: playercount - ANDI A3,V0,0003 - BEQ A3,R0,7F0C5EBC ;branch if 4-player - OR A2,A3,R0 ;A2=#players -//7F0C5E7C FA9AC 1-3 player death calculator - LW T9,00D4 (SP) ;T9=SP+D4: player# - SLL T5,R0,0x3 - SUBU T5,T5,R0 - SLL T5,T5,0x4 - LUI T6,8008 - SLL T8,T9,0x2 - ADDU T3,T5,T8 - ADDIU T6,T6,9EF0 - ADDU V1,T3,T6 ;V1=80079EF0+offset to player kill reg: player stats -//7F0C5EA0 FA9D0 grab number of deaths - LW T2,0024 (V1) ;T2=#kills - ADDIU A1,A1,0001 ;A1++ playercount++ - ADDIU V1,V1,0070 ;V1+=70: next player's stats - BNE A2,A1,7F0C5EA0 ;loop for remaining players - ADDU A0,A0,T2 ;A0+=T2: running total of deaths - BEQ A1,V0,7F0C5F0C ;branch if count=#players always TRUE - NOP -//7F0C5EBC FA9EC 4-player death calculator - LW T1,00D4 (SP) ;T1=SP+D4: player# - SLL T4,A1,0x3 ;same as above, concidering that A1 will always be set to 0... - SUBU T4,T4,A1 - SLL T4,T4,0x4 - LUI T5,8008 - SLL T7,T1,0x2 - ADDU T9,T4,T7 - ADDIU T5,T5,9EF0 - ADDU V1,T9,T5 ;V1=80079EF0+offset to player kill reg: player stats -//7F0C5EE0 FAA10 - LW T8,0024 (V1) - LW T3,0094 (V1) - LW T6,0104 (V1) - ADDU A0,A0,T8 - LW T2,0174 (V1) - ADDU A0,A0,T3 - ADDIU A1,A1,0004 - ADDU A0,A0,T6 - ADDIU V1,V1,01C0 - BNE A1,T0,7F0C5EE0 ;loop for remaining players - ADDU A0,A0,T2 -//7F0C5F0C FAA3C prints "Press Start" when dead - JAL 7F014758 ;V0=scenario - SW A0,0058 (SP) ;SP+58= #deaths, not that the function tampers with it - ADDIU AT,R0,0001 - BNE V0,AT,7F0C5F2C ;branch if not You Only Live Twice - LW A0,0058 (SP) ;A0=#deaths - SLTI AT,A0,0002 ;TRUE if died less than twice - BEQL AT,R0,7F0C6034 ;branch if deceased - OR V0,S1,R0 -//7F0C5F2C - -extensive rewrite... -need to rewrite again. Turns out current death hasn't been tallied yet... -//7F0C5E64 FA994 -02201025 OR V0,S1,R0 ;V0=#players -18400027 *BLEZ V0,7F0C5F08 ;skip if invalid -AFA900D4 *LW T1,00D4 (SP) ;T1=SP+D4: player# -00094880 *SLL T1,T1,0x2 -3C038008 *LUI V1,8008 -00691821 *ADDU V1,V1,T1 -8C639EE0 *LW V1,9EE0 (V1) ;V1=80079EE0: p->player BONDdata -10600021 *BEQ V1,R0,7F0C5F08 ;branch if NULL -00002025 *OR A0,R0,R0 -// A0=#deaths -8C6429D8 *LW A0,29D8 (V1) -8C6329DC *LW V1,29DC (V1) -00642021 *ADDU A0,V1,A0 ;#deaths -24840001 *ADDIU A0,A0,0001 ;this accounts for the death that hasn't been tallied yet... - ... -//7F0C5F08 FAA38 prints "Press Start" when dead -0FC051D7 *JAL 7F01475C ;scenario bitflags & V1 -24030001 *ADDIU V1,R0,0001 ;You Only Live Twice mask -10400006 *BEQ V0,R0,7F0C5F2C ;branch if not You Only Live Twice -00000000 *NOP -0FC04117 *JAL 7F01045C ;V0=#lives -00000000 *NOP -0082082A *SLT AT,A0,V0 ;TRUE if died less than twice -50200043 BEQL AT,R0,7F0C6034 ;branch if deceased -02201025 OR V0,S1,R0 -//7F0C5F2C - -... -oddly, getting an erroneous SH to 802AE2C8 -That's the pointer to "press start" - - -!!DON'T FORGET TO DO ME!! -radar overlays, dependant on scenario -requires extensive overwrite of entire system... -//7F0C60D0 FAC00 - JAL 7F014758 - SW A0,0088 (SP) - JAL 7F09B150 - OR S4,V0,R0 -... -//7F0C6420 FAF50 - ADDIU AT,R0,0005 - SLL T1,S3,0x3 - SUBU T1,T1,S3 - BEQ S4,AT,7F0C6458 - MOV.S F22,F2 - ADDIU AT,R0,0006 - BEQ S4,AT,7F0C6458 - ADDIU AT,R0,0007 - BEQ S4,AT,7F0C6458 - ADDIU AT,R0,0002 - BEQ S4,AT,7F0C6458 ;branch here if team, flag, MwtGX - ADDIU AT,R0,0003 - BNEL S4,AT,7F0C64C0 ;branch if normal, you only live twice, LtK - C.LT.S F2,F24 - \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/7F00D298 - menu 06 interface revision.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/7F00D298 - menu 06 interface revision.txt deleted file mode 100644 index ce0f7a5..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/7F00D298 - menu 06 interface revision.txt +++ /dev/null @@ -1,254 +0,0 @@ -7F00D298: 41DC8 menu 06 interface: mode select screen - note: this printout uses the revised BONDFOLDER addresses. see "usage of the selected Bond features" for details -ADDIU SP,SP,FFD0 -SW S0,0018 (SP) -LUI AT,8003 -LUI V1,8007 -SW RA,001C (SP) -SW R0,A94C (AT) ;0->8002A94C: cheat menu unavailable -ADDIU V1,V1,9651 ;V1=80069651: base address for unlocked cheat flags -ADDIU S0,R0,0001 ;S0=1: counter for cheats -//7F00D2B8: 41DE8 determine if any cheats are available -00102025 OR A0,S0,R0 ;A0=S0: cheat# -0FC02612 JAL 7F009848 ;V0=TRUE if cheat A0 unlocked -AFA30024 SW V1,0024 (SP) ;V1->SP+24: p->unlocked cheat flag -8FA30024 *LW V1,0024 (SP) ;V1=SP+24: p->unlocked cheat flag -10400003 *BEQ V0,R0,+3 ;branch if not available -A0620000 *SB V0,0000 (V1) ;1->unlocked cheat flag: unlock cheat in cheat menu -3C018003 LUI AT,8003 -AC22A94C *SW V0,A94C (AT) ;1->8002A94C: set cheat menu available -//7F00D2D8: iterate for all cheats -26100001 ADDIU S0,S0,0001 ;S0++: next cheat # -2401004B ADDIU AT,R0,004B -1601FFF5 *BNE S0,AT,7F00D2B8 ;continue for cheats 1-4A -24630001 ADDIU V1,V1,0001 ;V1++: p->next cheat unlock flag -//7F00D2E8: 41E18 -3C014270 LUI AT,4270 -0C001151 JAL 70004544 -44816000 MTC1 AT,F12 ;F12=60.0 -3C018005 LUI AT,8005 -0C001164 JAL 70004590 -C42C1A38 LWC1 F12,1A38 (AT) ;F12=80051B38: 1.3- -3C0142C8 LUI AT,42C8 -44816000 MTC1 AT,F12 ;F12=100.0 -3C018005 LUI AT,8005 -0C001194 JAL 70004650 -C42E1A3C LWC1 F14,1A3C (AT) ;F14=80051B3C: 10000.0 -0C00114D JAL 70004534 -00002025 OR A0,R0,R0 ;A0=0 -//7F00D31C: 41E4C assemble folder on-screen -3C108003 LUI S0,8003 -2610A95C ADDIU S0,S0,A95C ;S0=8002A95C: location of walletbond in rdram -0FC02DC9 JAL 7F00B724 -8E040000 LW A0,0000 (S0) ;A0=p->walletbond obj. instance -0FC0755B *JAL 7F01D56C ;V0= selected Bond for CURRENT file -00000000 *NOP -8E040000 LW A0,0000 (S0) ;A0=p->walletbond obj. instance -0FC02E02 JAL 7F00B808 ;toggles folder images on/off -00022825 OR A1,V0,R0 ;A1=V0: selected Bond -8E040000 LW A0,0000 (S0) ;A0=p->walletbond obj. instance -00002825 OR A1,R0,R0 ;A1=item 0: tabs on side of folder -0FC02DF0 JAL 7F00B7C0 ;toggle item on (draw to screen) -24060001 ADDIU A2,R0,0001 ;A2=mode: on -8E040000 LW A0,0000 (S0) ;A0=p->walletbond obj. instance -24050001 ADDIU A1,R0,0001 ;A1=item 1: basic folder -0FC02DF0 JAL 7F00B7C0 ;toggle item on (draw to screen) -24060001 ADDIU A2,R0,0001 ;A2=mode: on -8E040000 LW A0,0000 (S0) ;A0=p->walletbond obj. instance -24050003 ADDIU A1,R0,0003 ;A1=item 3: OHMSS -0FC02DF0 JAL 7F00B7C0 ;toggle item on (draw to screen) -24060001 ADDIU A2,R0,0001 ;A2=mode: on -8E040000 LW A0,0000 (S0) ;A0=p->walletbond obj. instance -24050007 ADDIU A1,R0,0007 ;A1=item 7: shadow beneath character image -0FC02DF0 JAL 7F00B7C0 ;toggle item on (draw to screen) -24060001 ADDIU A2,R0,0001 ;A2=mode: on -8E040000 LW A0,0000 (S0) ;A0=p->walletbond obj. instance -24050002 ADDIU A1,R0,0002 ;A1=item 2: FOR YOUR EYES ONLY -0FC02DF0 JAL 7F00B7C0 ;toggle item on (draw to screen) -24060001 ADDIU A2,R0,0001 ;A2=mode: on -//7F00D390: 41EC0 detect if tab 3 selected -3C108007 LUI S0,8007 -26109784 ADDIU S0,S0,9784 ;S0=80069784: p->highlighted mode -2418FFFF ADDIU T8,R0,FFFF -0FC028E7 JAL 7F00A39C ;V0=TRUE if cursor is on tab 3 -AE180000 SW T8,0000 (S0) ;-1->80069784: do not highlight any mode options -3C098003 *LUI T1,8003 -14400013 *BNE V0,R0,7F00D3F8 ;branch if tab 3 highlighted -AD22A8E4 *SW V0,A8E4 (T1) ;0->8002A8E4: unhighlight folder tab 3 -//7F00D3B0: 41EE0 cheat menu selected -8D21A94C *LW AT,A94C (T1) ;T1=8002A94C: cheat menu available flag -10200007 *BEQ AT,R0,+7 ;branch if cheat menu not an option -C524A90C *LWC1 F4,A90C (T1) ;F4=8002A90C: vertical position -3C018005 LUI AT,8005 -C4261A40 LWC1 F6,1A40 (AT) ;F6=80051A40: selection spacing value -4604303E C.LE.S F6,F4 -240A0002 ADDIU T2,R0,0002 -4503000A BC1TL 7F00D3F8 ;branch if bounds < vert. position -AE0A0000 SW T2,0000 (S0) ;2->highlighted mode: cheats -//7F00D3D4: 41F04 detect if multiplayer selected -3C014373 LUI AT,4373 -0C002E7E JAL 7000B9F8 ;V0=#controllers plugged in -44815000 MTC1 AT,F10 ;F10=AT: 244.0 -2C410002 *SLTIU AT,V0,0002 ;TRUE if 0-1 controllers -4604503E *C.LE.S F10,F4 -38210001 *XORI AT,AT,0001 -45000002 *BC1F +2 ;branch if 244.0 >= pos. (multi not selected) -AE000000 *SW R0,0000 (S0) ;0->highlighted mode: solo (default) -AE010000 *SW AT,0000 (S0) ;AT->highlighted mode: (controllers<2)^1 -//7F00D3F8: 41F28 new bit - photo + -00002025 *OR A0,R0,R0 ;A0=0: controller 1 -0C0030EB *JAL 7000C3AC ;test if buttons in A1 were pressed -34050919 *ORI A1,R0,0919 ;A1=0919: up,right, R, c-up, c-right -14400006 *BNE V0,R0,+6 ;branch if buttons pressed -24040001 *ADDIU A0,R0,0001 ;index++ -//7F00D40C: 41F3C new bit - photo - -00002025 *OR A0,R0,R0 ;A0=0: controller 1 -0C0030EB *JAL 7000C3AC ;test if buttons in A1 were pressed -34050626 *ORI A1,R0,0626 ;A1=0626: down, left, L, c-down, c-left -10400008 *BEQ V0,R0,+8 ;branch if buttons not pressed -2404FFFF *ADDIU A0,R0,FFFF -//7F00D420: 41F50 change the image! -0FC07AE6 *JAL 7F01EB98 ;change index -00000000 *NOP -3C048006 *LUI A0,8006 -8C843720 *LW A0,3720 (A0) ;A0=80063720: SE buffer -240500F4 *ADDIU A1,R0,00F4 ;A1=0F4: snapshot SE -0C002382 *JAL 70008E08 ;play SE A1 -00003025 *OR A2,R0,R0 ;A2=NULL p->data -//7F00D43C: 41F6C detect if current option selected -00002025 OR A0,R0,R0 ;A0=0: controller 1 -0C0030EB JAL 7000C3AC ;test if buttons in A1 were pressed -3405B000 ORI A1,R0,B000 ;A1=B000: A,Z,start -10400009 BEQ V0,R0,7F00D470 ;branch if no buttons pressed -3C018003 LUI AT,8003 -8E060000 *LW A2,0000 (S0) ;AT=selected mode -04C0000B *BLTZ A2,7F00D484 ;branch if on tab 3 (back) -AC26A8F0 *SW A2,A8F0 (AT) ;mode->8002A8F0: mode=highlighted -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) ;A0=80063720: SE buffer -240500C5 ADDIU A1,R0,00C5 ;A1=0C5: page turning SE -0C002382 JAL 70008E08 ;play SE A1 -00003025 OR A2,R0,R0 ;A2=NULL p->data -//7F00D470: 41FA0 test if backpedalling one page -00002025 OR A0,R0,R0 -0C0030EB JAL 7000C3AC ;test if buttons in A1 were pressed -34054000 *ORI A1,R0,4000 ;A1=4000: B -10400007 BEQ V0,R0,7F00D49C ;branch if B wasn't pressed -3C018003 LUI AT,8003 -//7F00D484: 41FB4 backpedal -AC22A8D8 *SW V0,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected (back) -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) ;A0=80063720: SE buffer -240500C7 ADDIU A1,R0,00C7 ;A1=0C7: page turning SE -0C002382 JAL 70008E08 ;play SE A1 -00003025 OR A2,R0,R0 ;A2=NULL p->data -//7F00D49C: 41FCC space... -NOP -*NOP -*NOP -*NOP -*NOP -NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -//7F00D49C: -*NOP -*NOP -//7F00D4E8: -*NOP -//7F00D54C: 4207C sort out what functions occur -JAL 7F009B84 ;??? -NOP -LUI V0,8003 -LW V0,A8F0 (V0) ;V0=8002A8F0: mode -ADDIU A0,R0,0007 ;A0=7: select mission -BNEZ V0,7F00D584 ;branch if mode != solo -ADDIU AT,R0,0001 ;AT=1 -NOP -//7F00D56C: jump to "select mission" -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -JAL 7F00E3E0 -OR A0,R0,R0 ;A0=0 -BEQ R0,R0,7F00D5D8 -LW RA,001C (SP) -//7F00D584: detect if multiplayer selected -BNE V0,AT,7F00D59C ;if mode != 1, branch -ADDIU A0,R0,000E ;A0=E: multiplayer options -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F00D5D8 -LW RA,001C (SP) -//7F00D59C: detect if cheats selected -ADDIU AT,R0,0002 -BNE V0,AT,7F00D5BC ;branch if mode != 2 -LUI T7,8003 -ADDIU A0,R0,0015 ;A0=15: cheat menu -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -BEQ R0,R0,7F00D5D8 -LW RA,001C (SP) -//7F00D5BC: -LW T7,A8D8 (T7) ;T7=8002A8D8: folder tab 3 selected (back) -*BEQ T7,R0,7F00D5D4 ;if no set, branch -ADDIU A0,R0,0005 ;A0=5: folder select -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -*NOP -//7F00D5D4: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -backpedal SE -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C7 ;A1=0C7: page turning sound effect -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL p->data - -selection SE -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: p->SE buffer -ADDIU A1,R0,00C5 ;A1=0C5: backpedal folder SE -JAL 70008E08 ;play sound A1 -OR A2,R0,R0 ;A2=NULL p->data - -selected option-> then play sound -LUI AT,8003 -SW T3,A8F0 (AT) ;2->8002A8F0: mode=cheats \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/mode-select-hack.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/mode-select-hack.txt deleted file mode 100644 index 4e35fa1..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/mode-select-hack.txt +++ /dev/null @@ -1,189 +0,0 @@ -7F00D298 hacked version of mode select, so you can select Bond -ADDIU SP,SP,FFD0 -SW S0,0018 (SP) -LUI AT,8003 -LUI V1,8007 -SW RA,001C (SP) -SW R0,A94C (AT) ;0->8002A94C: cheat menu unavailable -ADDIU V1,V1,9651 ;V1=80069651: base address for unlocked cheat flags -ADDIU S0,R0,0001 ;S0=1: counter for cheats -//7F00D2B8: determine if any cheats are available -OR A0,R0,S0 ;A0=S0: cheat# -JAL 7F009848 ;V0=TRUE if cheat A0 unlocked -SW V1,0024 (SP) ;V1->SP+24: p->unlocked cheat flag -LW V1,0024 (SP) ;V1=SP+24: p->unlocked cheat flag -BEQ V0,R0,7F00D2D8 ;branch if not available -SB V0,0000 (V1) ;increment count if present -LUI AT,8003 -SW V0,A94C (AT) ;V0->8002A94C: cheat menu available -//7F00D2D8: -ADDIU S0,S0,0001 ;S0++: next cheat # -ADDIU AT,R0,004B -BNE S0,AT,7F00D2B8 ;continue for cheats 1-4A -ADDIU V1,V1,0001 ;V1++: p->next cheat unlock flag -//7F00D2E8: -LUI AT,4270 -JAL 70004544 -MTC1 AT,F12 ;F12=60.0 -LUI AT,8005 -JAL 70004590 -LWC1 F12,1A38 (AT) ;F12=80051A38: -LUI AT,42C8 -MTC1 AT,F12 ;F12=100.0 -LUI AT,8005 -JAL 70004650 -LWC1 F14,1A3C (AT) ;F14=80051A3C: -JAL 70004534 -OR A0,R0,R0 ;A0=0 -//7F00D31C: assemble folder on-screen -LUI S0,8003 -ADDIU S0,S0,A95C ;walletbond -JAL 7F00B724 ;disable all switches in object A0 (hide all) -LW A0,0000 (S0) ;S0=8002A95C: p->obj.instance -JAL 7F01D56C ;V0= selected Bond in current file -NOP -LW A0,0000 (S0) ;S0=8002A95C: p->obj.instance -JAL 7F00B808 ;folder picture toggle -OR A1,R0,V0 ;A1=Bond# -LW A0,0000 (S0) ;S0=8002A95C: p->obj.instance -OR A1,R0,R0 ;A1=item 0 tabs -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;S0=8002A95C: p->obj.instance -ADDIU A1,R0,0001 ;A1=item 1 basic folder -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;S0=8002A95C: p->obj.instance -ADDIU A1,R0,0003 ;A1=item 3 OHMSS -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;S0=8002A95C: p->obj.instance -ADDIU A1,R0,0007 ;A1=item 7 photo shadow -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=mode: on -LW A0,0000 (S0) ;S0=8002A95C: p->obj.instance -ADDIU A1,R0,0002 ;A1=item 2 FOR YOUR EYES ONLY -JAL 7F00B7C0 ;sets item A1 in object A0 to mode A2 -ADDIU A2,R0,0001 ;A2=mode: on -//7F00D390: detect if tab 3 selected -LUI S0,8007 -ADDIU S0,S0,9784 ;S0=80069784: p->selected mode -ADDIU T8,R0,FFFF -JAL 7F00A39C ;V0=TRUE if cursor is on tab 3 -SW T8,0000 (S0) ;mode=-1 -LUI T1,8003 -BNEZ V0,7F00D3F8 ;branch if tab 3 highlighted -SW V0,A8E4 (T1) ;V0->8002A8E4: set tab3 highlight on/off -//7F00D3F8: 41F28 portrait swap (moved!) -*JAL 7F00DC78 ;V0=TRUE if hovering over image -*NOP -*BEQ V0,R0,7F00D3B0 -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;test if buttons in A1 were pressed -ORI A1,R0,A333 ;A1=right 8111 left 2222 -*BEQ V0,R0,7F00D524 ;branch if not pressed -*ANDI V0,V0,8111 ;A0=increment -*ADDIU A0,R0,0001 -*BEQL V0,R0,+1 -*ADDIU A0,R0,FFFF ;A0=decrement -JAL 7F01EBA0 ;next/prev. selected image -NOP -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00F4 ;A1=0F4: snapshot -JAL 70008E08 ;set sound effect A1 to slot A0 -OR A2,R0,R0 ;A2=NULL p->data -*BEQ R0,R0,7F00D524 -*NOP -//7F00D3B0: 41EE0 tab 3 selected -LW AT,A94C (T1) ;T1=8002A94C: cheat menu available flag -BEQ AT,R0,7F00D3D4 ;branch if cheat menu not an option -LWC1 F4,A90C (T1) ;F4=8002A90C: vertical position -LUI AT,8005 -LWC1 F6,1A40 (AT) ;F6=80051A40: selection spacing value -C.LE.S F6,F4 -ADDIU T2,R0,0002 -BC1TL 7F00D3F8 -SW T2,0000 (S0) ;mode=2: cheats -LUI AT,4373 -JAL 7000B9F8 -MTC1 AT,F10 -SLTIU AT,V0,0002 -C.LE.S F10,F4 -XORI AT,AT,0001 -BC1F 7F00D3F8 -NOP -SW AT,0000 (S0) -//7F00D43C: test option selected -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;test if buttons in A1 were pressed -ORI A1,R0,B000 ;A1=B000: A,Z,start -BEQ V0,R0,7F00D470 ;branch if no buttons pressed -LUI AT,8003 -LW A2,0000 (S0) ;mode -BLTZ A2,7F00D484 ;branch if tab selected -SW A2,A8F0 (AT) ;0->8002A8F0: mode=solo -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C5 ;A1=0C5: page turning SE -JAL 70008E08 ;play SE A1 -OR A2,R0,R0 ;A2=NULL p->data -//7F00D470: test if backpedalling one page -OR A0,R0,R0 ;A0=0: player 1 -JAL 7000C3AC ;test if buttons in A1 were pressed -ORI A1,R0,4000 ;A1=B button -BEQ V0,R0,7F00D49C ;branch if not pressed -LUI AT,8003 -//7F00D484: backpedal -SW V0,A8D8 (AT) ;1->8002A8D8: folder tab 3 selected (back) -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: SE buffer -ADDIU A1,R0,00C7 ;A1=0C7: page turning SE -JAL 70008E08 ;play SE A1 -OR A2,R0,R0 ;A2=NULL p->data -//7F00D4A8: sort out what functions occur -JAL 7F009B84 ;control stick tracking -NOP -LUI V0,8003 -LW V0,A8F0 (V0) ;V0=8002A8F0: mode -ADDIU A0,R0,0007 ;A0=7: select mission --BNEZ V0,7F00D4D4 ;branch if mode != solo --ADDIU AT,R0,0001 -//: jump to "select mission" -JAL 7F01A5D4 -OR A1,R0,R0 -JAL 7F00E3E0 -OR A0,R0,R0 -BEQ R0,R0,7F00D528 -LW RA,001C (SP) -//7F00D4D4: detect if multiplayer selected -*BEQL V0,AT,7F00D51C ;branch if multi selected -ADDIU A0,R0,000E ;A0=E: multiplayer options -//: detect if cheats selected -ADDIU AT,R0,0002 -*BEQL V0,AT,7F00D51C ;branch if cheats highlighted --ADDIU A0,R0,0015 ;A0=15: cheat menu -//7F00D50C: -LUI T7,8003 -LW T7,A8D8 (T7) ;T7=8002A8D8: folder tab 3 selected (back) -*BEQ T7,R0,7F00D524 ;if not set, return --ADDIU A0,R0,0005 ;A0=5: folder select -//7F00D51C: change menu -JAL 7F01A5D4 ;set menu to A0 in mode A1 -OR A1,R0,R0 ;A1=0: current menu -//7F00D524: return -LW RA,001C (SP) -LW S0,0018 (SP) -JR RA -ADDIU SP,SP,0030 - -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -*NOP -NOP diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/newfangled mode select.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/newfangled mode select.txt deleted file mode 100644 index 6335469..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Main and Misc/menu 06 - mode select/newfangled mode select.txt +++ /dev/null @@ -1,168 +0,0 @@ -revision of mode select constructor, to account for menu functions and newfangled box thingy - -7F00D828: 42358 menu 06 constructor - mode select - accepts: A0=p->display list target - ADDIU SP,SP,FFA0 - SW RA,003C (SP) - SW S0,0038 (SP) - OR A1,R0,R0 - OR A2,R0,R0 - JAL 700046D0 ;setfillcolour("black") - OR A3,R0,R0 - JAL 70003EF8 ;fillrect() - OR A0,V0,R0 - JAL 7F00D5E8 - OR A0,V0,R0 - JAL 7F0ACD98 - OR A0,V0,R0 -00028025 -OR S0,V0,R0 -//7F00D860: display "1." -24040096 *ADDIU A0,R0,0096 -240500DC *ADDIU A1,R0,00DC -27A7005C *ADDIU A3,SP,005C -3C02312E *LUI V0,312E ;"1." -0FC046B5 *JAL 7F011AD4 ;display::black -ACE20000 *SW V0,0000 (A3) -//7F00D8C8: determine if cheating -3C0B8003 *LUI T3,8003 -8D6BA900 *LW T3,A900 (T3) ;T2=8002A900: TRUE if displaying cheat select mission -55600002 *BNEL T3,R0,+2 ;branch if "select mission" -34049C75 ORI A0,R0,9C75 -//7F00D8E4: display cheat select mission or select mission -34049C1D ORI A0,R0,9C1D -0FC30776 JAL 7F0C1DD8 -3C0B8007 *LUI T3,8007 -8D6B9784 *LW T3,9784 (T3) ;T6=80069784: selected mode -15600005 *BNEZ T3,7F00D964 ;skip if not highlighted -AFA2005C -SW V0,005C (SP) ;save p->txt -//7F00D938: highlight select mission -240400AA *ADDIU A0,R0,00AA -240500DC *ADDIU A1,R0,00DC -0FC046CE *JAL 7F011B38 ;box::default -00023025 -OR A2,V0,R0 -//7F00D964: display "select mission" -240400AA *ADDIU A0,R0,00AA -240500DC *ADDIU A1,R0,00DC -0FC046B5 *JAL 7F011AD4 ;display::black -8FA7005C *LW A3,005C (SP) -//7F00D8C0: determine if multiplayer available -0C002E7E -JAL 7000B9F8 ;V0= #controllers plugged in -240600FF *ADDIU A2,R0,00FF -28410002 -SLTI AT,V0,0002 ;TRUE if 1 player -54200001 -BNEZL AT,+1 ;branch if not available -24060070 *ADDIU A2,R0,0070 -AFA60048 *SW A2,0048 (SP) -//7F00D8D8: display "2." -24040096 *ADDIU A0,R0,0096 -240500FC *ADDIU A1,R0,00FC -27A7005C *ADDIU A3,SP,005C -3C02322E *LUI V0,322E ;"2." -0FC046B6 *JAL 7F011AD8 ;display::custom -ACE20000 *SW V0,0000 (A3) -//7F00D8F0: determine if cheating -3C0B8003 *LUI T3,8003 -8D6BA904 *LW T3,A904 (T3) ;T1=8002A904: TRUE if displaying "cheat multi" -51600002 *BEQL T3,R0,+2 -34049C1E -ORI A0,R0,9C1E -34049D14 ORI A0,R0,9D14 -//7F00D904: -0FC30776 JAL 7F0C1DD8 -3C0B8007 *LUI T3,8007 -8D6B9784 *LW T3,9784 (T3) ;T6=80069784: selected mode -256BFFFF *ADDIU T3,T3,FFFF -15600005 *BNEZ T3,7F00DAEC ;skip if not highlighted -AFA2005C *SW V0,005C (SP) ;save p->txt -//7F00D91C: highlight "multi" -240400AA *ADDIU A0,R0,00AA -240500FC *ADDIU A1,R0,00FC -0FC046CE *JAL 7F011B38 ;box::default -00023025 -OR A2,V0,R0 -//7F00D92C: display "multi" -240400AA *ADDIU A0,R0,00AA -240500FC *ADDIU A1,R0,00FC -8FA60048 *LW A2,0048 (SP) -0FC046B6 *JAL 7F011AD8 -8FA7005C *LW A3,005C (SP) -//7F00D940: determine if cheats available -3C0B8003 *LUI T3,8003 -8D6BA94C *LW T3,A94C (T3) ;T2=8002A94C: TRUE if cheat menu available -11600015 *BEQ T3,R0,7F00DC9C ;skip if it isn't available -// display "3." -24040096 *ADDIU A0,R0,0096 -2405011C *ADDIU A1,R0,011C -27A7005C *ADDIU A3,SP,005C -3C02332E *LUI V0,332E ;"3." -0FC046B5 *JAL 7F011AD4 ;display::black -ACE20000 *SW V0,0000 (A3) JAL 7000442C -//7F00DBBC: cheat -0FC30776 -JAL 7F0C1DD8 -34049C1F -ORI A0,R0,9C1F -3C0B8007 *LUI T3,8007 -8D6B9784 *LW T3,9784 (T3) ;T6=80069784: selected mode -256BFFFE *ADDIU T3,T3,FFFE -15600005 *BNEZ T3,7F00DC40 ;skip if not highlighted -AFA2005C -SW V0,005C (SP) ;save p->txt -//7F00DC14: highlight "Cheats" -240400AA *ADDIU A0,R0,00AA -2405011C *ADDIU A1,R0,011C -0FC046CE *JAL 7F011B38 ;box::default -00023025 -OR A2,V0,R0 -//7F00DC40: display "cheats" -240400AA *ADDIU A0,R0,00AA -2405011C *ADDIU A1,R0,011C -0FC046B5 *JAL 7F011AD4 ;display::black -8FA7005C *LW A3,005C (SP) -//7F00DC9C: highlight picture A0=p->display list, A1=ul x, A2=ul y, A3=lr x, SP+10=lr y, SP+14=RGBA value for square -0FC0371E *JAL 7F00DC78 ;V0=ifhover -00102025 *OR A0,S0,R0 -10400009 *BEQ V0,R0,7F00DCA0 ;branch if not highlighted -24050038 *ADDIU A1,R0,0038 -2406001A *ADDIU A2,R0,001A -240700B7 *ADDIU A3,R0,00B7 -240200BB *ADDIU V0,R0,00BB -AFA20010 *SW V0,0010 (SP) -24020032 *ADDIU V0,R0,0032 -0FC2B405 JAL 7F0AD014 ;draw coloured box -AFA20014 *SW V0,0014 (SP) -00028025 *OR S0,V0,R0 -//7F00DCA0: tack on tab support -0FC0288E JAL 7F00A238 ;add tab 3: "PREVIOUS" -00102025 OR A0,S0,R0 -0FC027C2 JAL 7F009F08 ;loads selected icon for folder select -00022025 OR A0,V0,R0 -//7F00DCAC: return -8FBF003C LW RA,003C (SP) -8FB00038 LW S0,0038 (SP) -03E00008 JR RA -27BD0060 ADDIU SP,SP,0060 - - -portrait bounds: -ul 0038 001A 56 26 -lr 00B7 00BB 183 187 - -7F00DC78 427A8 V0=TRUE if hovering over character portrait - fries: AT,T6 -3C018003 LUI AT,8003 -C424A90C LWC1 F4,A90C (AT) ;F4=8002A90C: vert.pos. -4600218D TRUNC.W.S F6,F4 -440E3000 MFC1 T6,F6 ;V0=vert.pos -2DC2001A *SLTIU V0,T6,001A -14400009 *BNE V0,R0,return:bad -2DC200BB *SLTIU V0,T6,00BB -10400007 *BEQ V0,R0,return:bad -C424A908 LWC1 F4,A908 (AT) ;F4=8002A908: horz.pos. -4600218D TRUNC.W.S F6,F4 -440E3000 MFC1 T6,F6 ;V0=vert.pos -2DC20038 *SLTIU V0,T6,0038 -14400002 *BNE V0,R0,return:bad -2DC200B7 *SLTIU V0,T6,00B7 -50400001 *BEQL V0,R0,return:bad -//return:bad -00001025 *OR V0,R0,R0 -//return -03E00008 JR RA -00000000 NOP -//7F00DCC0 427F0 - - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Solo menus/Briefings and Debriefings/proposed new briefing file format.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Solo menus/Briefings and Debriefings/proposed new briefing file format.txt deleted file mode 100644 index 066d57f..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/Solo menus/Briefings and Debriefings/proposed new briefing file format.txt +++ /dev/null @@ -1 +0,0 @@ - Proposed alteration to Briefing files: Objective entries will allow being toggled per-difficulty. Also, allow flags to act as locks to untoggle objectives mid-stage. Eventually will need to remove the 10 objective limit, though anything over 10 is ignored in original game... Calculated limit is 20 without diminishing lock byte to nibble. Format of briefing files: 0x30 large 0x0 2 "Background" page text ID 0x2 2 "M Briefing" page text ID 0x4 2 "Q Branch" page text ID 0x6 2 "Moneypenny" page text ID 0x8 objective entries max of 10 (0xA) 0x0 2 text ID 0x1 1 lock flags 0x2 1 flags 03 minimum difficulty available on 04 do not allow on agent 08 do not allow on secret agent 10 do not allow on 00 agent 20 do not allow on 007 C0 RESERVED By retaining the 0x3 mask, should remain backward-compatible. Under new rules, should then be able to use the flags to omit certain difficulty settings on hacked ROMs. If any flags in the lock value are set, will disallow until matching flags are set in the upper byte of the objective register. All flags set here must match. In other words, AND then XOR, fail on inequality. Objective flags present at 80030978 will not be used. Unlock will occur using saved objective status values at 80075D58. This should be set after stage end yet zeroed on stage selection. Action F1 will need looking at (7F039F38), since it returns TRUE if objectives complete. +_+ 80075D58 table format is converted from words to halfwords. Upper byte is current lock, lower byte traditional return value. p->briefing data at 80075D84 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/new weird language trick.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/new weird language trick.txt deleted file mode 100644 index 5c156cb..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/new weird language trick.txt +++ /dev/null @@ -1,397 +0,0 @@ -NGEE will now use B044 for 1min warning. Everyone else does--so will they -concider this temporary until the scoring is completely rewritten - -//7F0BEDD0: F3900 display 1 minute warning -0FC26C43 JAL 7F09B10C ;set working player# to A0 -8FA4017C LW A0,017C (SP) ;A0=cur player# -0FC30776 *JAL 7F0C1DD8 -3404B044 *ORI A0,R0,B044 -0FC228F2 -JAL 7F08A3C8 -00022025 *OR A0,V0,R0 ;A0=V0: p->string -8FA4017C *LW A0,017C (SP) ;T7=cur player# -24840001 *ADDIU A0,A0,0001 ;T8=T7+1: next player -0FC26919 -JAL 7F09A464 ;V0=#players -AFA4017C *SW A0,017C (SP) ;SP+17C=T8: cur player# -1444FFF5 *BNE V0,A0,7F0BEDD0 -00000000 *NOP -00000000 NOP -(next line is just a LUI T7, so can sucker it) - -+_+ - -language flag 800484D0 - -The funnier part - using concatenation to determine region for text files! -You can't necessarily tell if they're using the lookup table or ROM index -To get around this, assume it ends in a capital letter and do the following: - (1) strcpy to the stack. - (2) get strlen and add that to a copy of the stack pointer - (3) use the language value as an offset into the lettercode word - (4) suck the letter and put it at SP+strlen-1 - (5) use this as your lookup string - - -language flag used at: -A0C4 ok -B27C -3E290 7F009764 ok standard print routine -41428 -430AC 7F00E57C ok solo stage select -43A34 7F00EF04 ok difficulty select -43AA4 7F00EF74 ok also difficulty select -43B60 7F00F030 ok also also difficulty select -84468 -84930 -849B8 -8C104 -D9414 -D9910 -DAAB8 -DC340 -DC830 -DC908 -DD2E0 -DD318 -DD354 -DD398 -DD418 -DD4F4 -DD52C -DE398 -DE3F4 -E0438 -E05F0 -E1044 -E1160 -E1308 -E1354 -E2660 7F0ADB34 ok 007 options -E3290 -E34F4 7F0AE9C8 ok 007 options -F63A0 ok -F63C4 ok -F63E8 ok -F640C ok -F6430 ok -F6224 -F6350 ok -F6470 7F0C1944 ok 007 options -F662C 7F0C16FC ok legal screen or loading -F6838 -F6854 do not tamper with this one! offset into table! -F6894 7F0C1D68 used to offset string pull. dies after this -F68B4 do not tamper with this one! offset into table! -FA420 - -+_+ - -Now the fun part... -give it a buffer of 32 bytes. Overkill (or should be) -do stpncpy to stack, pull language byte, then replace last character -That's 7000AC70, A0=target, A1=source, A2=len; fries V1,A2,T6 - -7F0C1D08: F6838 load mission text bank A0 - accepts: A0=p->string -27BDFFC8 *ADDIU SP,SP,FFC8 -AFBF0034 *SW RA,0034 (SP) -AFA40038 *SW A0,0038 (SP) ;SP+18=A0: text bank -//get language and filename - *LUI T8,8005 - *LB T9,84D0 (T8) ;T8=800484D0: language - *SLL T0,A0,0x2 ;T7=A0*4: A0->offset in text index - *ADDU T9,T8,T9 ;T9=language->offset - *ADDU A0,A0,T8 - *LW A1,84D0 (A0) ;A0=800484D0+offset: p->text bank name string - *OR A0,SP,R0 - *JAL 7000AC70 ;stpncpy(A0,A1) - +ADDIU A2,R0,0020 - +LBU T9,84D2 (T9) ;pull language letter... - +SB T9,FFFF (V0) ;and tack in place of the current one -//load resource - +OR A0,SP,R0 - ADDIU A1,R0,0001 ;A1=1 - ADDIU A2,R0,0100 ;A2=0x100 - JAL 7F0BCD04 ;load resource using string A0 - ADDIU A3,R0,0004 ;A3=4 -//copy to table - generic - *LW T1,0038 (SP) ;T1=text bank - *LW RA,0034 (SP) - LUI AT,8009 - SLL T2,T1,0x2 ;T2=T1*4: text bank->offset - ADDU AT,AT,T2 - SW V0,C63C (AT) ;V0->8008C63C+offset: p->offset to text table - JR RA - *ADDIU SP,SP,0038 - -7F0C1D64: F6894 load briefing text bank A0 - accepts: A0=p->string, A1=p->target, A2=size of target buffer - *ADDIU SP,SP,FFC8 - *SW RA,0034 (SP) - *SW A0,0038 (SP) ;SP+18=A0: text bank - *SW A1,003C (SP) ;SP+1C=A1: p->target - OR A3,A2,R0 ;A3=A2: size of target buffer -//get language and filename - *LUI T8,8005 - *LB T9,84D0 (T8) ;T8=800484D0: language - *SLL T0,A0,0x2 ;T7=A0*4: A0->offset in text index - *ADDIU T9,T8,T9 ;T9=language->offset - *ADDU A0,T8,T0 - *LW A1,84D0 (A0) ;A0=800484D0+offset: p->text bank name string - *OR A0,SP,R0 - *JAL 7000AC70 ;stpncpy(A0,A1) - +ADDIU A2,R0,0020 - +LBU T9,84D2 (T9) ;pull language letter... - +SB T9,FFFF (V0) ;and tack in place of the current one -//load resource - +OR A0,SP,R0 - *OR A2,003C (SP) ;A2=SP+1C: p->target - JAL 7F0BCD40 ;load resource using string A0 into buffer A2 of size A3 - ADDIU A1,R0,0001 ;A1=1 -//copy to table - generic - *LW T1,0038 (SP) ;T1=text bank - *LW RA,0034 (SP) - LUI AT,8009 - SLL T2,T1,0x2 ;T2=T1*4: text bank->offset - ADDU AT,AT,T2 - SW V0,C63C (AT) ;V0->8008C63C+offset: p->offset to text table - JR RA - *ADDIU SP,SP,0038 - -it was too simple before, so lets complicate things: - - -7F0C1D08: F6838 - accepts: A0=p->string -27BDFFC8 ADDIU SP,SP,FFC8 -AFBF0034 SW RA,0034 (SP) -AFA40038 SW A0,0038 (SP) ;SP+18=A0: text bank -//7F0C1D14: send out for spaghetti -0FC30761 JAL 7F0C1D84 +newkid -27A50010 *ADDIU A1,SP,0010 -//7F0C1D1C: load resource -27A40010 *ADDIU A0,SP,0010 -24050001 ADDIU A1,R0,0001 ;A1=1 -24060100 ADDIU A2,R0,0100 ;A2=0x100 -0FC2F341 JAL 7F0BCD04 ;load resource using string A0 -24070004 ADDIU A3,R0,0004 ;A3=4 -//7F0C1D30: branch to the table copier -1000000C BEQ R0,R0,7F0C1D64 +generic -00000000 NOP -//7F0C1D64: -> 7F0C1D38 0FC30759 -> 0FC3074E -27BDFFC8 ADDIU SP,SP,FFC8 -AFBF0034 SW RA,0034 (SP) -AFA40038 SW A0,0038 (SP) ;SP+18=A0: text bank -AFA5003C SW A1,003C (SP) ;SP+1C=A1: p->target -00063825 OR A3,A2,R0 ;A3=A2: size of target buffer -//7F0C1D4C: send out for spaghetti -0FC30761 JAL 7F0C1D84 +newkid -27A50010 *ADDIU A1,SP,0010 -//7F0C1D54: load resource for 7F0C1D64 routine -27A40010 *ADDIU A0,SP,0010 -8FA6003C LW A2,003C (SP) ;A2=SP+1C: p->target -0FC2F350 JAL 7F0BCD40 ;load resource using string A0 into buffer A2 of size A3 -24050001 ADDIU A1,R0,0001 ;A1=1 -//7F0C1D64: copy to table - generic -8FA90038 LW T1,0038 (SP) ;T1=text bank -8FBF0034 LW RA,0034 (SP) -3C018009 LUI AT,8009 -00095080 SLL T2,T1,0x2 ;T2=T1*4: text bank->offset -002A0821 ADDU AT,AT,T2 -AC22C63C SW V0,C63C (AT) ;V0->8008C63C+offset: p->offset to text table -03E00008 JR RA -27BD0038 ADDIU SP,SP,0038 - -newkid: 7F0C1D84 F68B4 -//get language and filename -AFBF0030 SW RA,0030 (SP) -3C188005 LUI T8,8005 -831984D0 LB T9,84D0 (T8) ;T8=800484D0: language -0319C821 ADDU T9,T8,T9 ;T9=language->offset -00047880 SLL T7,A0,0x2 ;T7=A0*4: A0->offset in text index -030F7821 ADDU T7,T8,T7 -0C004E1F *JAL 7001387C ;V0=strlen A0 -8DE484D0 *LW A0,84D0 (T7) ;A0=800484D0+offset: p->text bank name string -00042825 *OR A1,A0,R0 ;A1=A0: source -27A40010 *ADDIU A0,SP,0010 -0C002B1C JAL 7000AC70 ;mempncpy(A0,A1) -24460001 *ADDIU A2,V0,0001 ;A2=strlen -8FBF0030 LW RA,0030 (SP) -93398637 LBU T9,8637 (T9) ;pull language letter... pushed this down there... -03E00008 JR RA -A059FFFE SB T9,FFFE (V0) ;and tack in place of the current one - -strlen 7001387C; fries V1,T6,T7 - -+_+ - -This one handles the globals. It was hacked already, so that's just copied here. - -initialization: load base text entries -S2=800484D0; specificly, it is set to the language flag address - -//7F0C1820: 0xF6350 load LgunX -00128025 *OR S0,S2,R0 ;S0=800484D0: start of L_X lookup names -01129021 *ADDU S2,T0,S2 ;S2+=T0: 800484D0+language -92520002 *LBU S2,0002 (S2) ;S2=language character -0FC30641 *JAL 7F0C1904 newfunky -8E040098 *LW A0,0098 (S0) ;literal offset in table to p->LgunE -3C118009 *LUI S1,8009 -2631C63C *ADDIU S1,S1,C63C accounts for entry 00xx -AE220098 SW V0,0098 (S1) -//7F0C1844: load LtitleX -0FC30641 *JAL 7F0C1904 newfunky -8E04009C *LW A0,009C (S0) -AE22009C SW V0,009C (S1) -//7F0C1870: load LmpmenuX -0FC30641 *JAL 7F0C1904 newfunky -8E0400A0 *LW A0,00A0 (S0) -AE2200A0 SW V0,00A0 (S1) -//7F0C1894: load LpropobjX -0FC30641 *JAL 7F0C1904 newfunky -8E0400A4 *LW A0,00A4 (S0) -AE2200A4 SW V0,00A4 (S1) -//7F0C18B8: load LmpweaponsX -0FC30641 *JAL 7F0C1904 newfunky -8E0400A8 *LW A0,00A8 (S0) -AE2200A8 SW V0,00A8 (S1) -//7F0C18DC: load LoptionsX -0FC30641 *JAL 7F0C1904 newfunky -8E0400AC *LW A0,00AC (S0) -AE2200AC SW V0,00AC (S1) -//7F0C1900: load LmiscX -0FC30641 *JAL 7F0C1904 newfunky -8E0400B0 *LW A0,00B0 (S0) ;A0=pointer to L_E string ;T8=800484D4: p->txt string recall table -AE2200B0 SW V0,00B0 (S1) -//7F0C1924: return -8FBF0024 LW RA,0024 (SP) -8FB1001C LW S1,001C (SP) -8FB00018 LW S0,0018 (SP) -8FB20020 LW S2,0020 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - - -new routine: 7F0C1904 F6434 copy string, do language-specific lookup, load permanent -27BDFFC0 ADDIU SP,SP,FFC0 -AFBF003C SW RA,003C (SP) -0C004E1F JAL 7001387C ;V0=strlen A0 -00042825 OR A1,A0,R0 ;A1=A0: source -27A40010 ADDIU A0,SP,0010 -0C002B1C JAL 7000AC70 ;mempncpy(A0,A1) -24460001 ADDIU A2,V0,0001 ;A2=strlen -A052FFFE SB S2,FFFE (V0) ;and tack in place of the current one -//suck it up -24050001 ADDIU A1,R0,0001 -24060100 ADDIU A2,R0,0100 -0FC2F341 JAL 7F0BCD04 ;load to permatext bank -24070006 ADDIU A3,R0,0006 ;(memory allocation segment 6 - permatext?) -8FBF003C LW RA,003C (SP) -03E00008 JR RA -27BD0040 ADDIU SP,SP,0040 - -+_+ - -Just looking... -//700094C4: -LUI T2,8005 -BNEZ V1,700094FC -NOP -LB T2,84D0 (T2) -SW R0,0024 (SP) -ADDIU V0,R0,0128 ;V0=128 if english -BLEZ T2,700094EC -LW T3,0044 (SP) -BEQ R0,R0,700094EC -ADDIU V0,R0,0134 ;V0=134 if japanese -//700094EC: -SLL V1,V0,0xA ;V1=V0*0x400; E=0x4A000, J=0x4D000 -SUBU T4,T3,V1 ;T4=T3-V1: start address? -SW T4,002C (SP) ;T4->SP+2C: target? -SW V1,0034 (SP) ;V1->SP+34: size? -JAL 70009514 -ADDIU A0,SP,0020 ;A0=SP+20: -LW RA,0014 (SP) -ADDIU SP,SP,0040 -JR RA -NOP - -+_+ - -To allow J-text at any time... -700094D8 A0DA set to 0134 (both same) -7F0C1708 F6238 kill test so J-text always enabled - -+_+ - -One more minor addition... -Language flags will be from 80048630-8640. Entry "0" (E) is +7, all entries prior using English's word order. -Entry "1" (J) is +8 and above, again following japanese order + extended table. -If this is unsatisfactory, will change. - -+_+ - -Guess what? Will need to change all the above. -All will use simple character replacement. -That means string names follow pattern of "Lname%c". - This allows generic language banks while still matching the language file names. -1) load the language number. make sure the 8005 hasn't been eaten -2) add number to 8005 -3) pull 80048637 to get letter. number acts as offset in bank -4) use letter code in string handler function -5) search against the new string during lookup - -newkid: 7F0C1D84 F68B4 - accepts: A0=text bank# -//get language and filename -27BDFFE8 *ADDIU SP,SP,FFE8 -AFBF0014 *SW RA,0014 (SP) -3C188005 LUI T8,8005 -830684D0 *LB A2,84D0 (T8) ;T8=800484D0: language -03063021 *ADDU A2,T8,A2 ;T9=language->offset -00042880 *SLL A1,A0,0x2 ;T7=A0*4: A0->offset in text index -03052821 *ADDU A1,T8,A1 -90C68637 *LBU A2,8637 (A2) ;pull language letter... -27A40010 *ADDIU A0,SP,0028 -0C002B25 *JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -8CA584D0 *LW A1,84D0 (A1) ;A0=800484D0+offset: p->text bank name string -NOP -NOP -8FBF0014 *LW RA,0014 (SP) -03E00008 JR RA -27BD0018 *ADDIU SP,SP,0018 - -new routine: 7F0C1904 F6434 copy string, do language-specific lookup, load permanent -27BDFFC0 ADDIU SP,SP,FFC0 -AFBF003C SW RA,003C (SP) - * -00042825 OR A1,A0,R0 ;A1=A0: source -27A40010 ADDIU A0,SP,0010 -0C002B25 *JAL 7000AC94 ;sprintf(A0,A1,A2,A3) -00123025 *OR A2,S2,R0 -27A40010 *ADDIU A0,SP,0010 -//suck it up -24050001 ADDIU A1,R0,0001 -24060100 ADDIU A2,R0,0100 -0FC2F341 JAL 7F0BCD04 ;load to permatext bank -24070006 ADDIU A3,R0,0006 ;(memory allocation segment 6 - permatext?) -8FBF003C LW RA,003C (SP) -03E00008 JR RA -27BD0040 ADDIU SP,SP,0040 - - -Now that this crappy code is broken, fix it! -//7F0C1D64: -> 7F0C1D38 F6868 0FC30759 -> 0FC3074E - accepts: A0=text bank, A1=p->target, A2=size of buffer -27BDFFC8 ADDIU SP,SP,FFC8 -AFBF0034 SW RA,0034 (SP) -AFA40038 SW A0,0038 (SP) ;SP+18=A0: text bank -AFA5003C SW A1,003C (SP) ;SP+1C=A1: p->target -//7F0C1D48: send out for spaghetti -0FC30761 JAL 7F0C1D84 +newkid -AFA60030 *SW A2,0030 (SP) ;A3=A2: size of target buffer -//7F0C1D50: load resource for 7F0C1D64 routine -8FA70030 *LW A3,0030 (SP) -27A40010 ADDIU A0,SP,0010 -8FA6003C LW A2,003C (SP) ;A2=SP+1C: p->target -0FC2F350 JAL 7F0BCD40 ;load resource using string A0 into buffer A2 of size A3 -24050001 ADDIU A1,R0,0001 ;A1=1 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/sunglasses.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/sunglasses.txt deleted file mode 100644 index 9fb3405..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/sunglasses.txt +++ /dev/null @@ -1,234 +0,0 @@ -Players with sunglasses -basically just need to pass SP+10=!0 to 7F0232E8 - -//7F079FA0: AEAD0 load and initialize solo character -0FC26919 JAL 7F09A464 ;ret. V0=#players -00000000 NOP -24010001 ADDIU AT,R0,0001 -14410082 *BNE V0,AT,7F07A1B8 ;branch if multi -1 from original -8FAF0044 LW T7,0044 (SP) - - -1000001A *BEQ R0,R0,7F07A21C ;-5 from original -A5C20002 -SH V0,0002 (T6) -//7F07A1B8: AECE8 load and initialize multi character -8FAD0040 *LW T5,0040 (SP) -000FC040 SLL T8,T7,0x1 ;for smaller table use SLL T8,T7,0x1 -030FC021 ADDU T8,T8,T7 -3C0C8004 LUI T4,8004 -258CDE10 ADDIU T4,T4,DE10 ;T4=8003DE10: body/head table -0018C080 SLL T8,T8,0x2 -030C1821 ADDU V1,T8,T4 ;V1=p->body entry -000D7040 -SLL T6,T5,0x1 ;for smaller table use SLL T6,T5,0x1 -01CD7021 -ADDU T6,T6,T5 -000E7080 -SLL T6,T6,0x2 -01CC7021 *ADDU T6,T6,T4 ;V1=p->head entry -8C640000 *LW A0,0000 (V1) ;T2=p->body header -AFA400FC *SW A0,00FC (SP) ;SP+FC=T2: p->body header -8C990000 *LW T9,0000 (A0) ;T9=body header+0: p->table (nonzero if object loaded) -17200003 *BNE T9,R0,+3 ;branch if already loaded -AFAE00F8 *SW T6,00F8 (SP) ;temporarily save p->head entry -0FC1D953 JAL 7F07654C ;loads in object name A1 with header A0 -8C650004 LW A1,0004 (V1) ;A1=p->recall string -//7F07A1F4: AED24 -8FA300F8 *LW V1,00F8 (SP) ;V1=p->head entry -8C640000 *LW A0,0000 (V1) ;A3=p->head header -8C990000 *LW T9,0000 (A0) ;T8=head header+0: p->table (nonzero if object loaded) -17200003 *BNE T9,R0,+3 ;branch if already loaded -AFA400F8 -SW A0,00F8 (SP) ;SP+F8= p->head header -0FC1D953 JAL 7F07654C ;loads in object name A1 with header A0 -8C650004 LW A1,0004 (V1) ;A1=p->recall string -//7F07A21C: AED4C -0FC26C54 *JAL 7F09B150 ;V0=cur.player# -00000000 *NOP -0FC041C7 *JAL 7F01071C ;V0=sunglasses flag -00022025 *OR A0,V0,R0 ;A0=V0: player# -00000000 *NOP ;can't think of anything to put here! -//7F07A230: AED5C -8FA700F8 LW A3,00F8 (SP) ;A3=p->head header -8FAC0038 LW T4,0038 (SP) -8FA40044 LW A0,0044 (SP) ;A0=body -8FA50040 LW A1,0040 (SP) ;A1=head -8FA600FC LW A2,00FC (SP) ;A2=p->body header -AFA20010 *SW V0,0010 (SP) ;I'm icky and evil -0FC08CBA JAL 7F0232E8 -AFAC0014 SW T4,0014 (SP) - -things to flag byte for each player's sunglasses -10 [mutli] pl4 -08 [mutli] pl3 -04 [mutli] pl2 -02 [mutli] pl1 -01 solo - -7F0106F8 45228 toggle sunglasses for player A0 - fries: AT,V0,A0 -3C028003 LUI V0,8003 -9041A8F3 LBU AT,A8F3 (V0) ;AT=mode (0=solo, 1=multi) -00242021 ADDU A0,A0,AT ;A0+1 if multiplayer -24010001 ADDIU AT,R0,0001 -00812004 SLLV A0,AT,A0 -9041B55F LBU AT,B55F (V0) -00240826 XOR AT,AT,A0 -03E00008 JR RA -A041B55F SB AT,B55F (V0) - -7F01071C 4524C V0=retrieve sunglasses for player A0 - fries: AT,A0 -3C028003 LUI V0,8003 -9041A8F3 LBU AT,A8F3 (V0) -00242021 ADDU A0,A0,AT -24010001 ADDIU AT,R0,0001 -00812004 SLLV A0,AT,A0 -9042B55F LBU V0,B55F (V0) -03E00008 JR RA -00441024 AND V0,V0,A0 - - -Now, the neat part. Add to menus -For multiplayer, press L or R on the character select menu -For solo, set to 007 menu -While at it, should also rig up a quick first/last entry to up/down -Also,one day will need to rig all these to use the new menu hacks. - -//7F0129B0: 474E0 -8FA90088 LW T1,0088 (SP) ;T1=SP+88: selected flags -8D2B0000 -LW T3,0000 (T1) ;T3=TRUE if pl1 has selected -15600034 *BNE T3,R0,7F012A8C ;branch if pl1 selection made -AFA400E0 -SW A0,00E0 (SP) ;A0->SP+E0: count -0FC041C7 *JAL 7F01071C ;V0=TRUE if glasses on player A0 -8FCC0000 LW T4,0000 (S8) ;T4=size of image -15800030 *BNE T4,R0,7F012A8C ;branch if large (selection made) -34049C55 -ORI A0,R0,9C55 ;A0=9C55: "Select Character" -54400001 *BNEL V0,R0,+1 -3404B034 *ORI A0,R0,B034 ;A0=B027: "Spectacles" -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -00000000 *NOP -3C078004 *LUI A3,8004 -8CED0EB4 *LW T5,0EB4 (A3) ;T5=80040EB4: p->1st font table - -Now the interface hack... -//7F011F40: 46A70 -LW T6,004C (SP) ;T6=#players -OR S6,R0,R0 ;S6=0 cur.player# -OR S3,R0,R0 ;S3=0 cur.player->offset -BLEZ T6,7F012228 ;branch if invalid #players -3C148007 LUI S4,8007 -3C1E8006 LUI S8,8006 -26979750 *ADDIU S7,S4,9750 ;S7=80069750: size of selected pic -27DE3720 ADDIU S8,S8,3720 ;S8=80063720: p->SE buffer -26929730 *ADDIU S2,S4,9730 ;S2=80069730: selection buffer -26919710 *ADDIU S1,S4,9710 ;S1=80069710: cur.selections -26959720 *ADDIU S5,S4,9720 ;S5=80069720: org.selections -26949740 ADDIU S4,S4,9740 ;S4=80069740: selected flag -//7F011F70: 46AA0 new! L or R to toggle specs -00162025 *OR A0,S6,R0 ;A0=cur.player -0C0030EB *JAL 7000C3AC ;V0= player A0's buttons A1 pressed -34050030 *ORI A1,R0,0030 -10400003 *BEQ V0,R0,+3 -8E8F0000 LW T7,0000 (S4) ;T7=selected flag -0FC041BE *JAL 7F0106F8 ;toggle sunglasses for player -00162025 *OR A0,S6,R0 ;A0=cur.player -//7F011F8C: 46ABC normal operation -02F31021 ADDU V0,S7,S3 ;V0=selected flag + S3 -11E00013 *BEQ T7,R0,7F011FE0 ;branch if none selected -00162025 *OR A0,S6,R0 ;A0=cur.player -8C430000 LW V1,0000 (V0) ;V1=selected flag for player S3 -2861000B SLTI AT,V1,000B -10200005 *BEQ AT,R0,7F011FC0 ;branch if -8EB80000 LW T8,0000 (S5) -8E390000 LW T9,0000 (S1) -24680001 ADDIU T0,V1,0001 -53190001 *BEQL T8,T9,7F011FC0 -AC480000 -SW T0,0000 (V0) - *NOP - *NOP -//7F011FC0: 46AF0 -0C0030EB JAL 7000C3AC ;V0= player A0's buttons A1 pressed - -//7F012214: 46D44 -8FAB004C LW T3,004C (SP) ;T3=#players -26730004 ADDIU S3,S3,0004 -26B50004 ADDIU S5,S5,0004 -16CBFF53 *BNE S6,T3,7F011F70 -26520004 ADDIU S2,S2,0004 - -Now the 007 folders. Can use 7F014784 to set up? -7F00F374: 43EA4 menu 09 interface: 007 options -27BDFFE8 ADDIU SP,SP,FFE8 -3C014270 LUI AT,4270 -AFBF0014 SW RA,0014 (SP) -0C001151 -JAL 70004544 -44816000 -MTC1 AT,F12 ;F12= [42700000] -3C018005 LUI AT,8005 -0C001164 JAL 70004590 -C42C1A58 LWC1 F12,1A58 (AT) ;AT=80051A58: folder x dimention -3C0142C8 LUI AT,42C8 -44816000 MTC1 AT,F12 ;F12= [42C80000] -3C018005 LUI AT,8005 -0C001194 JAL 70004650 -C42E1A5C LWC1 F14,1A5C (AT) ;F14=80051A5C: folder z dimention -0C00114D JAL 70004534 -00002025 OR A0,R0,R0 ;A0=0 -//7F00F3B0: 43EE0 test if A/Z held -00002025 OR A0,R0,R0 ;A0=0: player 1 -0C0030C3 JAL 7000C30C ;V0= player A0's buttons A1 held -3405A000 ORI A1,R0,A000 ;A1=A000: A, Z button -14400043 *BNEZ V0,7F00F4CC ;branch if held -00002025 *OR A0,R0,R0 ;A0=0: player 1 -//7F00F3C4: 43EF4 folder interface -0C0030EB *JAL 7000C3AC ;V0= player A0's buttons A1 pressed -34050030 *ORI A1,R0,0030 ;A1=0030: L,R buttons -10400003 *BEQ V0,R0,+3 -3C0E8003 *LUI T6,8003 -0FC041BE *JAL 7F0106F8 ;toggle sunglasses for player -00002025 *OR A0,R0,R0 ;A0=player 1 -3C018007 -LUI AT,8007 -AC209794 SW R0,9794 (AT) ;0->80069794: highlight "Enemy reaction speed" -ADC0A8DC -SW R0,A8DC (T6) ;0->8002A8DC: unhighlight tab 1 -AC209798 SW R0,9798 (AT) ;0->80069798: highlight "Enemy health" -ADC0A8E0 -SW R0,A8E0 (T6) ;0->8002A8E0: unhighlight tab 2 -AC20979C SW R0,979C (AT) ;0->8006979C: highlight "Enemy accuracy" -ADC0A8E4 -SW R0,A8E4 (T6) ;0->8002A8E4: unhighlight tab 3 - ---and the constructor... -Again, one day need to go through and rewrite with nifty new routines in place. -left-align to 0x163. In other words, get width of string, subtract from 0x163 - -//7F00F810: 44340 display "Special Options" note S0=p->DL -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID -34049C28 ORI A0,R0,9C28 ;A0="SPECIAL OPTIONS:\n" -24040037 *ADDIU A0,R0,0037 ;A0= xpos -2405008F *ADDIU A1,R0,008F ;A1= ypos -0FC046B5 *JAL 7F011AD4 ;display::black -00023825 *OR A3,V0,R0 ;A3= p->text -//7F00F828: 44358 test if sunglasses on -0FC041C7 *JAL 7F01071C ;V0= TRUE if glasses set -00002025 *OR A0,R0,R0 ;A0=player 1 -10400014 *BEQ V0,R0,+14 -3C078004 *LUI A3,8004 -0FC30776 *JAL 7F0C1DD8 ;V0=p->text ID -3404B034 *ORI A0,R0,B034 ;A0="Spectacles" -AFA20054 *SW V0,0054 (SP) -//7F00F844: 44374 determine width -27A40050 *ADDIU A0,SP,0050 ;A0=SP+50: @height -27A5004C *ADDIU A1,SP,004C ;A1=SP+4C: @width -00023025 *OR A2,V0,R0 ;A2=p->text -8CE20EB4 *LW V0,0EB4 (A3) -AFA20010 *SW V0,0010 (SP) -8CE70EB8 *LW A3,0EB8 (A3) -0FC2BA63 *JAL 7F0AE98C ;proportions of string A2 -AFA00014 *SW R0,0014 (SP) ;SP+14=NULL -//7F00F864: 44394 write to screen in red -24040163 *ADDIU A0,R0,0163 ;A0= xpos -2405008F *ADDIU A1,R0,008F ;A1= ypos -8FA2004C *LW V0,004C (SP) ;V0= width -00822023 *SUBU A0,A0,V0 ;A0=xpos-width: align left of position -3C06A000 *LUI A2,A000 -34C600FF *ORI A2,A2,00FF ;A2=FF0000FF: red -0FC046B6 *JAL 7F011AD8 ;display::custom -8FA70054 *LW A3,0054 (SP) ;A3=p->text -//7F00F884: 443B4 - -Now to tack in a proper intialization routine -or not. should just initialize with 21990 and remain unspoiled... diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/usage of the selected Bond features.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/usage of the selected Bond features.txt deleted file mode 100644 index 6796235..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Main Menus/usage of the selected Bond features.txt +++ /dev/null @@ -1,230 +0,0 @@ -8002C510-1C copies of each selected Bond value, used to update eeprom and set menus -eeprom+8 & 0x60 flag determining which Bond was selected. - -7F01D924 V0= selected Bond in eeprom. accepts A0=p->eeprom file -7F01D934 A1->selected Bond in eeprom. accepts A0=p->eeprom file, A1=selection - -[7F01D56C] V0= selected Bond in current file (calls 7F01EBC0) -[7F01EBC0] V0= selected Bond for file A0 accepts A0=file# -[7F01EBCC] A1->selected Bond for file A0 accepts A0=file#, A1=selection -[7F01EBF4] deleted routine - likely related -[7F01EBFC] deleted routine - likely related - - -use of 8002C510 index: -7F01E238 - S0=p->entry, calls 7F01D924 to pull selected Bond, stores to entry -[7F01EBC0] - [beta] stores A1 to slot A0 -7F01F34C - if selected Bond doesn't match the eeprom file, set it to the selection - -altering these to use a single-byte index: -52D68: - LUI T4,8003 - ADDIU T4,T4,C510 - *NOP - JAL 7F01D924 -02CC8021 *ADDU S0,S6,T4 -A2020000 *SB V0,0000 (S0) - -53E84: - *NOP - LUI A1,8003 -00B02821 *ADDU A1,A1,S0 -80A5C510 *LB A1,C510 (A1) - - - - -use of 7F01D56C: -7F039F6C - action block type F2 -7F079DCC - solo body and head selectors, tied to cuffs -7F087C24 - pulled from stack and used at 7F087CFC, - no idea what this does - - -use of 7F01EBC0: -7F00BD88 - 4-folder constructor: passed to 7F00B808, which displays that given Bond picture -7F00D344 - main folder constructor: passed to 7F00B808, which displays that given Bond picture -7F01D56C - V0= selected Bond in current file -7F01EED4 - retrieve selected folder using 7F01EBC0, then set using 7F01EBCC - - -use of 7F01EBCC: -7F01ECDC - sets both this and 7F01D934 -7F01EED4 - retrieve selected folder using 7F01EBC0, then set using 7F01EBCC - -=_= - -I'll assume that most of the interface is there - -7F01D56C 5209C V0= selected Bond in current file (calls 7F01EBC0) - fries: AT,A0 -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -3C048003 LUI A0,8003 -0FC07AF0 JAL 7F01EBC0 ;V0= selected Bond for file A0 -8C84A8E8 LW A0,A8E8 (A0) ;A0=8002A8E8: cur. folder# -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - - -7F01EBC0 536F0 0FC07AF0 V0= selected Bond for file A0 - accepts: A0=file# -AFA40000 SW A0,0000 (SP) -03E00008 JR RA -00001025 OR V0,R0,R0 - !NEW! 7F01EBD0 53700 0FC07AF4 -2C810004 SLTIU AT,A0,0004 ;TRUE if valid folder -10200002 BEQ AT,R0,+2 -3C018003 LUI AT,8003 -00240821 ADDU AT,AT,A0 ;AT=8003C510+offset: selected folder registers -03E00008 JR RA -8022C510 LB V0,C510 (AT) ;read value for folder - default is first entry - - - -7F01EBCC 536FC 0FC07AF3 A1->selected Bond for file A0 - accepts: A0=file#, A1=selection -04800007 BLTZ A0,+7 -AFA50004 SW A1,0004 (SP) ;do nothing with selection -28810004 SLTI AT,A0,0004 ;TRUE if valid folder -10200004 BEQ AT,R0,+4 -00047080 SLL T6,A0,0x2 ;T6=file#->offset -3C018003 LUI AT,8003 -002E0821 ADDU AT,AT,T6 ;AT=8003C510+offset: selected folder registers -AC20C510 SW R0,C510 (AT) ;set to SW A1,C510 (AT) to re-enable -//7F01EBEC: return -03E00008 JR RA -00000000 NOP - !NEW! 7F01EBE8 53718 0FC07AFA -2C810004 SLTIU AT,A0,0004 ;TRUE if valid folder -10200003 BEQ AT,R0,+3 -3C018003 LUI AT,8003 -00240821 ADDU AT,AT,A0 ;AT=8003C510+offset: selected folder registers -A025C510 SB A1,C510 (AT) ;set to SW A1,C510 (AT) to re-enable -//7F01EBEC: return -03E00008 JR RA -00000000 NOP - -NEW ROUTINE - next/prev. selected image -7F01EBA0 536D0 0FC07AE8 next/prev. selected image - accepts: A0=increment or decrement to index -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -00042825 OR A1,A0,R0 ;A1=A0: ic/dec to index -3C048003 LUI A0,8003 -0FC07AF0 JAL 7F01EBC0 ;V0= selected Bond for file A0 -8C84A8E8 LW A0,A8E8 (A0) ;A0=8002A8E8: cur. folder# -00452821 ADDU A1,V0,A1 ;A1=org.+- value -0FC07AF3 JAL 7F01EBCC ;set to A1 -30A50003 ANDI A1,A1,0003 ;effectively same as index % 4 -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -7F00B808 40338 0FC02E02 toggles folder images on/off -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW S0,0018 (SP) -SW A1,0024 (SP) -OR S0,A0,R0 -ADDIU A1,R0,0008 -JAL 7F00B7C0 -ADDIU A2,R0,0001 -OR A0,S0,R0 -ADDIU A1,R0,0009 -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,000A -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,000B -JAL 7F00B7C0 -OR A2,R0,R0 -OR S0,A0,R0 -ADDIU A1,R0,000F -JAL 7F00B7C0 -ADDIU A2,R0,0001 -OR A0,S0,R0 -ADDIU A1,R0,0010 -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,0011 -JAL 7F00B7C0 -OR A2,R0,R0 -OR A0,S0,R0 -ADDIU A1,R0,0012 -JAL 7F00B7C0 -OR A2,R0,R0 -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0020 -JR RA -NOP - !REVISED! -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF001C SW RA,001C (SP) -AFB00018 SW S0,0018 (SP) -AFA50024 SW A1,0024 (SP) -00808025 OR S0,A0,R0 -24A50008 ADDIU A1,A1,0008 -0FC02DF0 JAL 7F00B7C0 -24060001 ADDIU A2,R0,0001 -02002025 OR S0,A0,R0 -8FA50024 LW A1,0024 (SP) -24A5000F ADDIU A1,A1,000F -0FC02DF0 JAL 7F00B7C0 -24060001 ADDIU A2,R0,0001 -8FBF001C LW RA,001C (SP) -8FB00018 LW S0,0018 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 - -*_* - -could reserve 8002C514 for bodies, 8002C518 for heads. -it makes a little more code, but allows easier editting for non-hacker people - -actually, whole routine is getting simplified to remove the TLB values -(stupidly replacing with a table...) - -+_+ - -Fun part - folder images -Connery, Moore, and Dalton images replace Brosnan duplicates -Granted, everyone is anal and would +insist+ the default order is the same as the beta shots. - (never mind that you could set them at-will) - -stupid beta pic order: -Moore -Connery -Brosnan -Dalton - -real order acording to cuff info: -Brosnan -Connery -Moore -Dalton - ->_< - -DBA8AE51 8B55D250 8000FFFF 003A0000 -FB85B686 6C5EAAB8 6300FFFF 003A0000 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/COOPpatch.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/COOPpatch.txt deleted file mode 100644 index 297d99b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/COOPpatch.txt +++ /dev/null @@ -1,24 +0,0 @@ -Co-Op Fix NTSC -0BE820 0010 3C0C802B 358CDAE0 01800008 00000000 -29CFA0 0034 3C028008 8C42A0B8 AFA2002C 8FA4004C - 2C810004 14200003 00000000 8FA4002C - AFA4004C 3C0C7F08 358C9D00 01800008 - 00000000 -revised: -0BE820 000C 8FA4004C 0FC26C54 2C810004 - - -Co-Op Fix PAL -0BC864 0010 3C0C802A 358CDC60 01800008 00000000 -289F10 0034 3C028007 8C428BC8 AFA2002C 8FA4004C - 2C810004 14200003 00000000 8FA4002C - AFA4004C 3C0C7F08 358C9E84 01800008 - 00000000 - -Citadel NTSC -0D0194 0010 3C0C802B 358CDAE0 01800008 24000000 -29CFA0 00A0 - -Citadel PAL -0CD594 0010 3C0C802A 358CDC60 01800008 24000000 -289F10 00A0 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/Player Death Animations.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/Player Death Animations.txt deleted file mode 100644 index 2ed1949..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/Player Death Animations.txt +++ /dev/null @@ -1,109 +0,0 @@ -[minor edit so they use less and follow 0A method] -000030B8 001A -000031DC 001B -000032C8 001C -000033AC 001D -000034D4 001E -000035C8 001F -000036D8 0020 -0000384C 0021 -000039C0 0022 -00003AF0 0023 -00003C10 0024 -00003D04 0025 - -!REVISED! -//7F006168: 0x3AC98 -00004040 *SLL T0,R0,0x1 -- -852B0000 *LH T3,0000 (T1) - -//7F00618C: 0x3ACBC -000C5040 *SLL T2,T4,0x1 -- -85EF0000 *LH T5,0000 (T9) retrieve value - -//7F080BC4: 0xB56F4 - -JAL 7000A450 ret. V0=rand - -SW V0,0044 (SP) - -LUI T9,8003 - -LW T9,650C (T9) #entries - -LW T8,0044 (SP) - -LUI T2,8003 -3C0B8003 *LUI T3,8003 -53200003 BEZL T9,+3 -00004025 OR T0,R0,R0 -0319001B DIVU T8,T9 -00004010 MFHI T0 -00084840 *SLL T1,T0,0x1 T0=random entry in range -01495021 ADDU T2,T2,T1 -854A64D8 *LH T2,64D8 (T2) load the animation offset -000A5080 +SLL T2,T2,0x2 -014B2021 ADDU A0,T2,T3 final animation value -4406A000 MFC1 A2,F20 - -ANDI A1,V0,0001 - -LUI A3,3F80 - -JAL 7F08EA48 -8C849D6C LW A0,9D6C (A0) T3=table of animation binary pointers - - -//7F08B3AC: 0xBFEDC -LUI A3,8003 -LW A3,650C (A3) A3=#ani -OR A1,R0,R0 -OR S0,R0,R0 -BLEZ A3,7F08B400 skip if stupid -LUI T9,8003 -ADDIU V0,T9,64D8 V0=800364D8: base for ani table -//7F08B3C8: 0xBFEF8 -00074840 *SLL T1,A3,0x1 T1=entry -> offset -01222021 ADDU A0,T1,V0 A0=entry -27239D6C *ADDIU V1,9D6C (T9) V1=pointers to animation binaries -8D061284 LW A2,1284 (T0) T0=cur playerdata -844A0000 *LH T2,0000 (V0) T2=ani # -//7F08B3DC: 0xBFF0C -000A5080 *SLL T2,T2,0x2 - *ADDIU V0,V0,0002 - -SLTU AT,V0,A0 - -ADDU T3,T2,V1 -8D6B0000 *LW T3,0000 (T3) -50CB0001 *BEQL A2,T3,7F08B3F8 - -ADDIU A1,R0,0001 -//7F08B3F8: 0xBFF28 -5420FFF8 *BNEL AT,R0,7F08B3DC -844A0000 *LH T2,0000 (V0) -//7F08B400: -BEQ A1,R0,7F08B418 -LUI AT,3F00 -LW A2,1284 (T0) -MTC1 AT,F12 -BEQ R0,R0,7F08B470 -SW A2,009C (SP) -//7F08B418: 0xBFF48 -JAL 7000A450 -SWC1 F2,0094 (SP) -3C188003 *LUI T8,8003 -8F0C650C *LW T4,650C (T8) -59800003 *BLEZL T4,+3 -00006825 *OR T5,R0,R0 -004C001B -DIVU V0,T4 -00006810 -MFHI T5 -000D7040 *SLL T6,T5,0x1 offset in table -030E7821 *ADDU T7,T8,T6 -85EF64D8 *LH T7,64D8 (T7) T7=ani# -000F7880 *SLL T7,T7,0x2 -8E280000 -LW T0,0000 (S1) T0=specific playerdata -3C013F00 -LUI AT,3F00 -01F84821 -ADDU T1,T7,T8 -8D299D6C *LW T1,9D6C (T1) 80029D6C+ -AFA9009C SW T1,009C (SP) -44816000 MTC1 AT,F12 -C7A20094 LWC1 F2,0094 (SP) -00000000 -NOP -00000000 *NOP -LW A2,1284 (T0) -MTC1 R0,F14 -NOP -SWC1 F14,008C (SP) -BEQ R0,R0,7F08B858 -SWC1 F14,0088 (SP) diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP Dr No patch.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP Dr No patch.txt deleted file mode 100644 index c3e4cec..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP Dr No patch.txt +++ /dev/null @@ -1,329 +0,0 @@ -patch into routine pointer @ 8004EFB8 - - -7F004368: load the specific routine for object -SLTIU AT,T0,002F -BEQ AT,R0,7F004AFC -SLL T0,T0,0x2 -LUI AT,8005 -ADDU AT,AT,T0 //AT=offset (4*type) -LW T0,EF68 (AT) -JR T0 -NOP - - -7F0045C0: type 15: Body Armor expansion routine -0x390F0 USA -0x JAP -0x PAL -13C0014E BEQ S8,R0,7F004AFC //S8 better equal 1 (valid) -00000000 NOP -8E4C000C LW T4,000C (S2) //T4=lower 32 bitflags -01947824 AND T7,T4,S4 //true if any insidious bitflags toggled - //this run, checked 00400008 (2pl,stack,norm) -15E0014A BNEZ T7,7F004AFC //if any killtags assigned, abort! -00000000 NOP -8E4E0080 LW T6,0080 (S2) //T6=BA value -3C014780 LUI AT,4780 -44813000 MTC1 AT,F6 //F6=65536. -448E9000 MTC1 T6,F18 -02A02025 OR A0,S5,R0 //A0=S5=obj# -02402825 OR A1,S2,R0 //A1=S2=cur obj pointer -46809120 CVT.SW F4,F18 //F4=BA value (as float) -02603025 OR A2,S3,R0 //A2=S3=validity flag -46062203 DIV.S F8,F4,F6 //F8=armor as percentage -E6480080 SWC1 F8,0080 (S2) //save float version of armor -C64A0080 LWC1 F10,0080 (S2) //F10=armor value -0FC00767 JAL 7F001D9C //expands data into a valid object -E64A0084 SWC1 F10,0084 (S2) //armor value copied to obj offset 0x84 -1000013B BEQ R0,R0,7F004AFC -00000000 NOP - -7F001D9C: generic object expansion -expands most object data. --------------------------- -can piggyback the validity test from object 03 (7F004730) -That routine reads: -BEQ S8,R0,7F004AFC -NOP -LW T4,000C (S2) //lower 32 bitflags -OR A0,S5,R0 -OR A1,S2,R0 -AND T7,T4,S4 -BNEZ T7,7F004AFC -NOP -JAL 7F001D9C -OR A2,S3,R0 -BEQ R0,R0,7F004AFC -NOP -++++++++++++++++++++++++++ -HIJACK cheat activated at 80069655 -test if 01 at 800696A5. If !=0 (toggled), branch to 7F004AFC! - -7F0045C0: 0x390F0 new type 15 -BEQ S8,R0,7F004AFC //S8 better equal 1 (test if object loaded) -NOP -*LUI T4,8007 3C0C8007 -*LB T7,96A5 (T4) 818F96A5 -BNEZ T7,7F004AFC //if cheat active, branch -NOP -LW T6,0080 (S2) //T6=BA value -LUI AT,4780 -MTC1 AT,F6 //F6=65536. -MTC1 T6,F18 -OR A0,S5,R0 //A0=S5=obj# -OR A1,S2,R0 //A1=S2=cur obj pointer -CVT.SW F4,F18 //F4=BA value (as float) ie. 65536=00010000 -OR A2,S3,R0 //A2=S3=validity flag -DIV.S F8,F4,F6 //F8=armor as percentage (100%=65536/65536) -SWC1 F8,0080 (S2) //save float version of armor -LWC1 F10,0080 (S2) //F10=armor value -*BEQ R0,R0,7F004738 1000004C //piggyback 03 object validity test -SWC1 F10,0084 (S2) //armor value copied to obj offset 0x84 - -0390F8 08 3C0C8007818F96A5 -039134 04 1000004C - --------------------------- -curiosity stuff... -7F004300: -JAL 7F0BFC10 //returns V0=difficulty (-1 for multi) -NOP -ADDIU T4,V0,0004 //T4=difficulty+4 -ADDIU T5,R0,0001 //T5=1 -JAL 7F09A464 //returns V0=#players -SLLV S4,T5,T4 //S4=difficulty mask: 00000008 multi (-1) - 00000010 agent (0) - 00000020 secret (1) - 00000040 00 (2) - 00000080 007 (3) -SLTI AT,V0,0002 //true if solo -BNEZ AT,7F00433C -NOP -JAL 7F09A464 //and do it again for some stupid reason... -NOP -ADDIU T6,V0,0014 //T6=#players+14 -ADDIU T7,R0,0001 //T7=1 -SLLV T8,T7,T6 //T8=player mask 00400000 2 player - 00800000 3 player - 01000000 4 player -OR S4,S4,T8 //S4 is a lower32 bitflag mask to kill object load -//7F00433C: -LUI S2,8007 -LW S2,5D0C (S2) //S2=pointer to object list -ADDIU AT,R0,0030 //AT=30 (max types) -OR S3,R0,R0 //S3=0 (counter) -LBU V1,0003 (S2) //V1=type -ADDIU S7,R0,0034 //S7=34 -BEQL V1,AT,7F004B30 //branch if no objects in list - LBU V1,0003 (S2) //V1=type -MTC1 R0,F20 //F20=0 -ORI S6,R0,FFFF //S6=-1 -ADDIU T0,V1,FFFF //T0=type-1 -//7F004368: listed above. this section is looped, to determine if valid type - - - -7F0BFC10: returns V0=selected difficulty -LUI V0,8005 -JR RA -LW V0,8384 (V0) //V0=80048384=difficulty - -7F09A464: V0= # players loaded - fries: T6,V1,T7,T8, T9, V0 - -*********************************** -*********************************** -*********************************** -THE OTHER HALF: -eeprom cheat settings -800518A0 table of 'cheat unlocked' detection routines - -7F00D298: 0x41DC8 USA -27BDFFD0 ADDIU SP,SP,FFD0 -AFB00018 SW S0,0018 (SP) -3C018003 LUI AT,8003 -3C038007 LUI V1,8007 -AFBF001C SW RA,001C (SP) -AC20A94C SW R0,A94C (AT) -24639651 ADDIU V1,V1,9651 -24100001 ADDIU S0,R0,0001 -//7F00D2B8: iterate through cheat list to see if menu should be available -02002025 OR A0,S0,R0 -0FC02612 JAL 7F009848 -AFA30024 SW V1,0024 (SP) -10400007 BEQ V0,R0,7F00D2E4 //if cheat isn't unlocked, branch -8FA30024 LW V1,0024 (SP) -240E0001 ADDIU T6,R0,0001 //T6=1 -A06E0000 SB T6,0000 (V1) //1->cheat list slot -240F0001 ADDIU T7,R0,0001 //T7=1 -3C018003 LUI AT,8003 -10000002 BEQ R0,R0,7F00D2E8 -AC3FA94C SW T7,A94C (AT) //1->8002A94C (cheat menu available) -//7F00D2E4: -A0600000 SB R0,0000 (V1) //0->cheat list slot -26100001 ADDIU S0,S0,0001 //S0++ (cheat# counter) -2401004B ADDIU AT,R0,004B //AT=4B (max cheats) -1601FFF1 BNE S0,AT,7F00D2B8 -24630001 ADDIU V1,V1,0001 //V1++ (next cheat list slot) -//7F00D2F8 - -7F009848: detect if particular cheat is available in menu -ADDIU T6,A0,FFFF //T6=current cheat index-1 -ADDIU SP,SP,FFE8 -SLTIU AT,T6,004A //TRUE if not a valid cheat -BEQ AT,R0,7F009B38 -SW RA,0014 (SP) -SLL T6,T6,0x2 //T6=cheat to offset -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,18A0 (AT) //T6=800518A0+offset (test if cheat # available) -JR T6 -NOP - -7F009874: default for non-menu cheats -BEQ R0,R0,7F009B40 -OR V0,R0,R0 -7F00987C: check if invincible unlocked -LUI A0,8003 -JAL 7F01DDC4 -LW A0,A8E8 (A0) //A0=8002A8E8=folder# -OR A0,V0,R0 -JAL 7F01DD20 //V0=1 if invincible unlocked -ADDIU A1,R0,0001 -BEQ R0,R0,7F009B44 -LW RA,0014 (SP) - -[the following are all identical to 7F00987C, except A1 differs] -7F00989C: [A1=13] return V0=1 if All Guns unlocked -7F0098BC: [A1=6] return V0=1 if No Radar Multi unlocked -7F0098DC: [A1=9] return V0=1 if Fast Animation unlocked -7F0098FC: [A1=A] return V0=1 if Bond Invisible unlocked -7F00991C: [A1=F] return V0=1 if Infinite Ammo unlocked -7F00993C: [A1=2] return V0=1 if DK Mode unlocked -7F00995C: [A1=7] return V0=1 if Tiny Bond unlocked -7F00997C: [A1=C] return V0=1 if Slow Animation unlocked -7F00999C: [A1=0] return V0=1 if Paintball Mode unlocked -7F0099BC: [A1=D] return V0=1 if Silver PP7 unlocked -7F0099DC: [A1=11] return V0=1 if Gold PP7 unlocked -7F0099FC: [A1=B] return V0=1 if Enemy Rockets unlocked -7F009A1C: [A1=4] return V0=1 if 2x Rocket L. unlocked -7F009A3C: [A1=3] return V0=1 if 2x Grenade L. unlocked -7F009A5C: [A1=10] return V0=1 if 2x RC-P90 unlocked -7F009A7C: [A1=8] return V0=1 if 2x Throwing Knife unlocked -7F009A9C: [A1=E] return V0=1 if 2x Hunting Knife unlocked -7F009ABC: [A1=12] return V0=1 if 2x Laser unlocked -7F009ADC: [A1=5] return V0=1 if Turbo Mode unlocked - -7F009AFC: return V0=1 if unlocked (Cradle completed) -LUI A0,8003 -JAL 7F01E9F4 -LW A0,A8E8 (A0) //A0=8002A8E8=folder# -BEQ R0,R0,7F009B44 -LW RA,0014 (SP) -7F009B10: return V0=1 if unlocked (Aztec completed) -LUI A0,8003 -JAL 7F01EA5C -LW A0,A8E8 (A0) //A0=8002A8E8=folder# -BEQ R0,R0,7F009B44 -LW RA,0014 (SP) -7F009B24: return V0=1 if unlocked (Egypt completed) - USA 0x3E654 -LUI A0,8003 -JAL 7F01EAA8 -LW A0,A8E8 (A0) //A0=8002A8E8=folder# -BEQ R0,R0,7F009B44 -LW RA,0014 (SP) -7F009B38: sit and spin! - USA 0x3E668 -BEQ R0,R0,7F009B38 -NOP -7F009B44: -ADDIU SP,SP,0018 -JR RA -NOP - - - -7F01DD20: returns V0=1 if requested cheat (A1) is unlocked in mempak -0x52850 USA -0x52A40 JAP -0x50570 PAL -BLTZ A1,7F01DD68 //must be 0-14 -SLTI AT,A1,0014 //TRUE if requested over bitflag 20 (change me!) -BEQ AT,R0,7F01DD68 -ADDIU T3,R0,0001 //T3=1 -LBU A2,0010 (A0) //eeprom cheats byte 3 (z) -LBU T6,000E (A0) //eeprom cheats byte 1 (x) -LBU T1,000F (A0) //eeprom cheats byte 2 (y) -SLL T7,A2,0x18 //T7=zz000000 -SLL T9,A2,0x10 //T9=00zz0000 -OR T8,T6,T7 //T8=zz0000xx -OR T0,T8,T9 //T0=zzzz00xx -SLL T2,T1,0x8 //T2=0000yy00 -OR V1,T0,T2 //V1=zzzzyyxx -SLLV T4,T3,A1 //T4=offset to bitflag (A1_request*2) -AND V0,T4,V1 //V0 != if selected is toggled -SLTU T5,R0,V0 //TRUE if flag set -JR RA -OR V0,T5,R0 //V0= TRUE/FALSE -//7F01DD68: -OR V0,R0,R0 //V0=false -JR RA -NOP - - -7F01E2C0: returns completion time for stage - accepts: A1=solo stage; A2=difficulty; A0=folder# -+++++++++++++++++++++++++++++++++++ -Okay, we're going to HIJACK 7F00D2B8 to do two things. -First, it will be streamlined, saving V0-> V1, since TRUE is active and false inactive anyway. -Secondly, it will auto-available Dr. No, assuming other cheats are unlocked. That saves 21990 hacking, and also saves 'unlocking' the cheat. So, what about the extra code? Lets add in a hack to check if egypt is complete for the line mode cheat. To save 21990, just test prior to loop or something. - -//7F00D2AC: 0x41DDC hack cheats open, Dr. No available -340FB01C *ORI T7,R0,B01C -24639651 ADDIU V1,V1,9651 -24100001 ADDIU S0,R0,0001 //T7=1 -AC30A94C *SW S0,A94C (AT) //1->8002A94C (cheat menu available) -3C018004 *LUI AT,8004 -A42FF854 *SH T7,F854 (AT) //save text mod -3C018005 *LUI AT,8005 -340F9B38 *ORI T7,R0,9B38 -A42F18B2 *SH T7,18B2 (AT) //Dr. No always available -A42F18BA *SH T7,18BA (AT) //Line Mode always available -//7F00D2D4: -02002025 *OR A0,S0,R0 -0FC02612 *JAL 7F009848 -AFA30024 *SW V1,0024 (SP) -8FA30024 *LW V1,0024 (SP) -//7F00D2E4: -A0620000 *SB V0,0000 (V1) //0->cheat list slot -26100001 ADDIU S0,S0,0001 //S0++ (cheat# counter) -2401004B ADDIU AT,R0,004B //AT=4B (max cheats) -1601FFF8 *BNE S0,AT,7F00D2D4 -24630001 ADDIU V1,V1,0001 //V1++ (next cheat list slot) - -7F009B38: force toggled! -24020001 *ADDIU V0,R0,0001 //V0=1 -00000000 NOP -8FBF0014 LW RA,0014 (SP) - - -*********************************** -test any cheat bitflags in eeprom: -USA 052857 0001 18 -JAP 052A47 0001 18 -PAL 050577 0001 18 - -USA BA cheat test (check cheat 5) -0390F8 0008 3C0C8007818F96A5 -039134 0004 1000004C - -USA 21990-friendly cheats -041DDC 0004 340FB01C -041DE8 002E AC30A94C3C018004A42FF8543C018005340F9B38A42F18B2A42F18BA020020250FC02612AFA300248FA30024A062 -041E23 0001 F8 -03E668 0004 24020001 - -rename 1C in LmiscE ("happy now karl?") -"Dr. No!" diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP flag tag score fix.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP flag tag score fix.txt deleted file mode 100644 index 7f0fbf4..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP flag tag score fix.txt +++ /dev/null @@ -1,292 +0,0 @@ -Flag tag score is a long value in milliseconds - -So, pull value, divide by 3600, and bam! You've got minutes held. - -However, you can't do this simply when you pull scoring. You can only do this when it determines stage end. why? Otherwise you'll get a lot of ties... - -as written should work. give it a whirl in a rom. flag confirmed with code as-is, but need to test all other scenarios (and probably flag more) - - -//7F0BEF04: 0xF3A34-E -11E00009 *BEQ T7,R0,7F0BEF2C skip this if player is alive -8C4E0424 *LW T6,0424 (V0) 1 when dying -11C00006 *BEQ T6,R0,7F0BEF28 -8C580428 *LW T8,0428 (V0) 1 when screen fading to black -13000004 *BEQ T8,R0,7F0BEF28 -C44803E4 *LWC1 F8,03E4 (V0) -4608003E *C.LE.S F0,F8 -00000000 *NOP -45020001 *BC1TL 7F0BEF2C -24A50001 *ADDIU A1,A1,0001 -//7F0BEF2C: -AFA3001C *SW V1,001C (SP) 80079EE0 player data pointers -AFA40174 *SW A0,0174 (SP) player# being tested -AFA50170 *SW A1,0170 (SP) nonzero if player dead or dying? -AFA6016C *SW A2,016C (SP) if nonzero indicates a winner -//7F0BEF3C: -0FC30E36 *JAL 7F0C38D8 returns V0=score; copies from A0 -//7F0BEF40: compute and compare scores -AFA70178 *SW A3,0178 (SP) -0FC051D6 *JAL 7F014758 returns V0=scenario -340E0002 *ORI T6,R0,0002 -144E0003 *BNE V0,T6, +3 -340E0E10 *ORI T6,R0,0E10 -008E001A *DIV A0,T6 -00002012 *MFLO A0 -0FC04111 *JAL 7F010444 V0=score (not f/ buffer though...) -8FA3001C LW V1,001C (SP) V1=player data pointer -0082|082A *SLT AT,A0,V0 TRUE if max score < score (copy) -LW A0,0174 (SP) -LW A1,0170 (SP) -LW A2,016C (SP) -BNEZ AT,7F0BEF80 -LW A3,0178 (SP) -ADDIU A2,A2,0001 A2++ indicate a winner -//7F0BEF80: -ADDIU A0,A0,0001 A0++ -SLT AT,A0,A3 TRUE if nextplayer# < maxplayer# -BNEZ AT,7F0BEEFC CHECK NEXT PLAYER DATA -ADDIU V1,V1,0004 -BLEZ A2,7F0BEFB8 no winner yet... -NOP -BNEZ A1,7F0BEFB0 stop play... -NOP -JAL 7F0C2530 -OR A0,R0,R0 -BEQ R0,R0,7F0BEFB8 -NOP -//7F0BEFB0: -JAL 7F0C2520 1->8008C700 stop play -NOP - -========================================== -========================================== -========================================== -holding flag hacking - -This routine needs to set flag to left hand. trickier than it seems: -//7F0BFA30: this is used to force the flag out when owned - 0xF4560-E - JAL 7F014758 V0=scenario - SWC1 F6,0038 (V0) - ADDIU AT,R0,0002 - BNE V0,AT,7F0BFAD0 skip if not flag tag - NOP - JAL 7F08CF80 V0=1 if flag held - NOP - BEQ V0,R0,7F0BFAC0 skip if flag not held - NOP - JAL 7F05D9D0 V0=weapon# in use -24040001 *ADDIU A0,R0,0001 check *left gun (A0=1) - ADDIU AT,R0,0058 - BEQ V0,AT,7F0BFA90 if flag already set get to scoring -24040001 *ADDIU A0,R0,0001 draw *left weapon (A0=1) -0FC176D5 JAL 7F05DB54 *3rd person draw weapon - ADDIU A1,R0,0058 draw flag (A1=58) - LUI V0,8008 - LW V0,A0B0 (V0) V0=current player data - ADDIU AT,R0,0002 AT=2 - ADDIU T1,R0,0005 T1=5 - LW T0,0894 (V0) FIDDLE with the weapon state flag - BNE T0,AT,7F0BFA90 if playerdata+0x894==2, set to 5 - NOP - SW T1,0894 (V0) set playerdata+0x894 to 5 -//7F0BFA90: advance flag time and set flag ownership - LUI V1,8008 - ADDIU V1,V1,A0B4 - LW V0,0000 (V1) V0=current player stat pointer - LUI T3,8005 - LW T3,8374 (T3) T3=1 if not paused (used to advance flag time) - LW T2,0060 (V0) T2=flag held time - ADDIU T5,R0,0001 - ADDU T4,T2,T3 - SW T4,0060 (V0) advance flag held time one more millisecond - LW T6,0000 (V1) T6=current player stat pointer - BEQ R0,R0,7F0BFB10 - SB T5,0069 (T6) 1->flag byte -//7F0BFAC0: flag not held... - LUI T7,8008 - LW T7,A0B4 (T7) T7=current player stat pointer - BEQ R0,R0,7F0BFB10 - SB R0,0069 (T7) blank the flag byte -//7F0BFAD0: - JAL 7F014758 - NOP - - -This disables weapon selection -//7F083DD8: flag-specific code - 0xB890F-E -0FC233E0 JAL 7F08CF80 return V0=1 if holding flag -00000000 NOP -50400003 BEQL V0,R0,7F083DF0 -8FAB0074 LW T3,0074 (SP) -00000000 *NOP {0xB8918} -8FAB0074 LW T3,0074 (SP) T3=1 - - -------------------------------- -0FC17674 JAL 7F05D9D0 V0=weapon# in use -24040001 *ADDIU A0,R0,0001 check *left gun (A0=1) -24010058 ADDIU AT,R0,0058 -1041000B BEQ V0,AT,7F0BFA90 if flag already set get to scoring -8DC90894 LW T1,0894 (T6) //T6 is from 7F05D9D0; weapon state -14090009 BNE T1,R0,7F0BFA90 if weapon at rest, set flag -24040001 *ADDIU A0,R0,0001 draw *left weapon (A0=1) -0FC176D5 JAL 7F05DB54 *3rd person draw weapon -24050058 ADDIU A1,R0,0058 draw flag (A1=58) -0FC17674 JAL 7F05D9D0 V0=weapon# in use -00002025 OR A0,R0,R0 -0FC176D5 JAL 7F05DB54 *3rd person draw weapon -00022825 OR A1,R0,V0 - NOP - SW T1,0894 (V0) set playerdata+0x894 to 5 - -NAH, THIS SHOULD WORK THOUGH: - 7F0BFA30 0xF4560-E -0FC17674 JAL 7F05D9D0 V0=weapon# in use -24040001 *ADDIU A0,R0,0001 check *left gun (A0=1) -24010058 ADDIU AT,R0,0058 -1041000B BEQ V0,AT,7F0BFA90 if flag already set get to scoring -8DC90894 *LW T1,0894 (T6) //T6 is from 7F05D9D0; weapon state -24080008 *ADDIU T0,R0,0008 -15090008 *BNE T0,T1,7F0BFA90 -24040001 *ADDIU A0,R0,0001 -0FC176D5 *JAL 7F05DB54 -24050058 *ADDIU A1,R0,0058 -*nop -*nop -*nop -nop -*nop -fill with spaces! - - -slight issue with above. It sometimes works. This is more accurate, though still problematic -0FC17674 JAL 7F05D9D0 V0=weapon# in use -24040001 *ADDIU A0,R0,0001 check *left gun (A0=1) -24010058 ADDIU AT,R0,0058 -1041000B BEQ V0,AT,7F0BFA90 if flag already set get to scoring -8DC90894 *LW T1,0894 (T6) //T6 is from 7F05D9D0; weapon state -24080008 *ADDIU T0,R0,0008 -15090008 *BNE T0,T1,7F0BFA90 -24040001 *ADDIU A0,R0,0001 -0FC176D5 *JAL 7F05DB54 -24050058 *ADDIU A1,R0,0058 -0FC17674 *JAL 7F05D9D0 -00002025 *OR A0,R0,R0 -00002025 *OR A0,R0,R0 -0FC176D5 *JAL 7F05DB54 -00022825 *OR A1,R0,V0 - -following works if you open fire. otherwise, will continuously draw weapon -7F0BFA50: -OR A0,R0,R0 -JAL 7F05D9D0 -ADDIU AT,R0,0058 -BEQ V0,AT,7F0BFA90 -NOP -JAL 7F05D9D0 -ADDIU A0,R0,0001 -BEQ V0,AT,7F0BFA90 -NOP -JAL 7F05D9D0 -OR A0,R0,R0 -JAL 7F05D914 -OR A1,R0,V0 -ADDIU A0,R0,0001 -JAL 7F05D914 -ADDIU A1,R0,0058 - - -THIS MIGHT WORK TOO: -7F0BFA50: -24040001 ADDIU A0,R0,0001 -0FC17674 JAL 7F05D9D0 -24010058 ADDIU AT,R0,0058 -1041000C BEQ V0,AT,7F0BFA90 [or do I want to jump to -80?] -00002025 OR A0,R0,R0 -0FC17674 JAL 7F05D9D0 -24010002 ADDIU AT,R0,0002 -0FC17645 JAL 7F05D914 -00022825 OR A1,R0,V0 -24040001 ADDIU A0,R0,0001 -0FC17645 JAL 7F05D914 -24050058 ADDIU A1,R0,0058 -8D220894 LW V0,0894 (T1) [not so certain this is always =] -24050005 ADDIU A1,R0,0005 -50450001 BEQL V0,A1,7F0BFA90 -AD210894 SW AT,0894 (T1) - -refine... -24040001 ADDIU A0,R0,0001 -0FC17674 JAL 7F05D9D0 -24050058 ADDIU A1,R0,0058 -10450008 BEQ V0,A1,7F0BFA80 -24010002 ADDIU AT,R0,0002 -0FC17674 JAL 7F05D9D0 -00002025 OR A0,R0,R0 -0FC17645 JAL 7F05D914 -00022825 OR A1,R0,V0 -24040001 ADDIU A0,R0,0001 -0FC17645 JAL 7F05D914 -24050058 ADDIU A1,R0,0058 -8D220894 LW V0,0894 (T1) [not so certain this is always =] -24050005 ADDIU A1,R0,0005 -50450001 BEQL V0,A1,7F0BFA90 -AD210894 SW AT,0894 (T1) - -doesn't work, since you place gun in hand but replace to fire... -test if 5 first... -result: it does actually put the flag out properly, but then there isn't a way to change weapons. Aegh... -24040001 ADDIU A0,R0,0001 -0FC17674 JAL 7F05D9D0 -24010002 ADDIU AT,R0,0002 -8DC90C3C LW T1,0C40 (T6) -24050005 ADDIU A1,R0,0005 -50A90001 BEQL T1,A1, +1 -ADC10C3C SW AT,0C40 (T6) -24010058 ADDIU AT,R0,0058 -10410008 BEQ V0,AT,7F0BFA90 -00000000 NOP -0FC17674 JAL 7F05D9D0 -00002025 OR A0,R0,R0 -0FC17645 JAL 7F05D914 -00022825 OR A1,R0,V0 -24040001 ADDIU A0,R0,0001 -0FC17645 JAL 7F05D914 -24050058 ADDIU A1,R0,0058 ---------7F0B7A94: -3C038008 LUI V1,8008 -8C62A0B4 LW V0,A0B4 (V1) -... -7F0B7AB4: 8C6E0000->8C6EA0B4 - - -how about this: - use the initial pickup call to load doubles with flag left. Use above routine to just lock the flag, probably by firing, which is probably the default action anyway -7F0503F0: test if remote mines - ADDIU AT,R0,001D - LB A0,0080 (T5) - *BNE A0,AT,7F05040C - ADDIU AT,R0,0058 -//7F000400: add detonator too! - JAL 7F08C488 - ADDIU A0,R0,001E - BEQ R0,R0,7F050428 - LW T6,006C (SP) -//7F050410: Test if collected item is the flag. If so, place in hand - *BNE A0,AT,7F050424 [beq r0,r0 etc 10000003 disables flag draw thingy] - *ADDIU A1,R0,0001 - JAL 7F05D914 - OR A0,R0,R0 - OR A0,R0,R0 -//7F050424: I think this is the left-hand weapon test - *NOP - *LW T6,006C (SP) - *LW T9,0048 (SP) //T9=object data pointer - *LW T7,0064 (T6) //This should be the runtime bitflag field being tested for 00000400 - *ANDI T8,T7,0400 - *BEQ T8,R0,7F0504A4 - LB T0,0080 (T9) - SLTI AT,T0,0021 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP scenarios.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP scenarios.txt deleted file mode 100644 index 5a4a788..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/WIP scenarios.txt +++ /dev/null @@ -1,156 +0,0 @@ -7F014758: return V0=scenario -LUI V0,8003 -JR RA -LW V0,B540 - - - -//7F0BDCC8: Test LTK -LUI S1,8008 -ADDIU S1,S1,9EF0 //S1=80079EF0=player statistics -//7F0BDCD0: Loopus -JAL 7F014758 //returns V0=scenario -NOP -BNE V0,S3,7F0BDCE8 //if scenario=4, set a funny float value -NOP -BEQ R0,R0,7F0BDCF4 -SWC1 F20,005C (S1) //200.->mystery float value in stats -//7F0BDCE8: when not LTK, get the normal multiplier -JAL 7F0103AC -OR A0,S0,R0 //A0=player# -SWC1 F0,005C (S1) -//7F0BDCF4: -JAL 7F0103D0 -OR A0,S0,R0 //A0=player# -ADDIU S0,S0,0001 //S0++=next player -ADDIU S1,S1,0070 //S1=offset to next player's stats -BNE S0,S3,7F0BDCD0 //no more than four players! -SWC1 F0,FFF4 (S1) //F0->player perspective stat -//7F0BDD0C: - - --7F0103AC: -SLL T6,A0,0x2 //T6=player# to offset -LUI T7,8007 -ADDU T7,T7,T6 -LW T7,97A8 (T7) //T7=800697A8+=player handicap -LUI AT,8003 -SLL T8,T7,0x3 //T8=8*handicap value -ADDU AT,AT,T8 //to offset -JR RA -LWC1 F0,B49C (AT) //F0=8002B49C (handicap) - - -================================================ -PART OF PLAYER DEATH ATTRIBUTEMENT: -7F089CE0: -JAL 7F09A464 //returns # players -NOP -SLTI AT,V0,0002 //TRUE if not MP -BNEZ AT,7F089DC8 -NOP -JAL 7F09B150 //v0=8007A0B8=victim -NOP -SW V0,002C (SP) //save victim # -7F089D00: -JAL 7F014758 //returns V0=scenario -SW R0,0028 (SP) //0->0x28 (not GG) -ADDIU AT,R0,0003 -BNEL V0,AT,7F089D2C //branch if not "Man with the Golden Gun" -LW T0,002C (SP) //T0=victim -JAL 7F08CFC0 //returns V0=1 if have Golden Gun -NOP -BEQ V0,R0,7F089D28 -ADDIU T9,R0,0001 -SW T9,0028 (SP) //1->0x28 (GG!) -LW T0,002C (SP) //T0=victim -//7F089D2C: attribute the score -LW T1,004C (SP) //T1=player to attribute score -BEQ T0,T1,7F089D48 //branch if suicide! -NOP -JAL 7F05677C -NOP -JAL 7F06A95C -NOP -//7F089D48: -JAL 7F09B10C -LW A0,004C (SP) -ETC... -//7F089DC8: joint solo/multi score attributement - -================================================ -these are routines used to detect flag and golden gun -hack the GG one to pull weapon 8 in set, and BAM! you've got MwtGX - --7F08CF80: test if possess flag -7F08CF80: test if possess flag -3C0E8008 LUI T6,8008 -8DCEA0B0 LW T6,A0B0 (T6) //T6=cur.player data -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -8DCF00D8 LW T7,00D8 (T6) //T7=player death attrib -00001025 OR V0,R0,R0 -15E00005 BNEZ T7,7F08CFB0 //skip if player dead or dying -00000000 NOP -0FC230C5 JAL 7F08C314 //returns V0=1 if flag posessed -24040058 ADDIU A0,R0,0058 -10000002 BEQ R0,R0,7F08CFB4 -8FBF0014 LW RA,0014 (SP) -//7F08CFB0: -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP - --7F08CFC0: test if possess golden gun -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC230C5 JAL 7F08C314 -24040013 ADDIU A0,R0,0013 //A0=13 test if Golden Gun -8FBF0014 LW RA,0014 (SP) -27BD0018 ADDIU SP,SP,0018 -03E00008 JR RA -00000000 NOP -[hack: pull A0=MP weapon F7] - - --7F08C314: returns V0=1 if item=A0 is in inventory -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F08C2BC //returns V0=entry in inventory or NULL -NOP -LW RA,0014 (SP) -SLTU T6,R0,V0 //80 addresses have sign bit set! TRUE if not NULL -OR V0,T6,R0 -JR RA -ADDIU SP,SP,0018 - --7F08C2BC: searches inventory for weapon type set to A0 - returns V0=pointer to entry or NULL -note: 7F08CFE0 does same for 0x0 entry=2 - -LUI T6,8008 -LW T6,A0B0 (T6) //T6=8007A0B0 cur.player data pointer -ADDIU A1,R0,0001 -LW V0,11E0 (T6) //V0=Pointer to player inventory -BEQ V0,R0,7F08C308 //branch if NULL -OR V1,V0,R0 //V1=cur entry, V0=1st entry -LW T7,0000 (V1) //T7=hand? usually 1 -//7F08C2D8: -BNEL A1,T7,7F08C2F8 //next entry -LW V1,000C (V1) //V1=pointer to next entry -LW T8,0004 (V1) //T8=item type -BNEL A0,T8,7F08C2F8 //if not equal to tested weapon, next! -LW V1,000C (V1) -JR RA -OR V0,V1,R0 //V0=pointer to matching inventory line -... -//7F08C2F8: -BEQL V1,V0,7F08C30C //test for end of list -OR V0,R0,R0 -BNEL V1,R0,7F08C2D8 //do next if not NULL -LW T7,0000 (V1) -//7F08C308: -OR V0,R0,R0 -JR RA -NOP diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/scenario flag usage.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/scenario flag usage.txt deleted file mode 100644 index 4a209e9..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Multiplayer/scenarios/scenario flag usage.txt +++ /dev/null @@ -1,476 +0,0 @@ -indexing all to revise system to use flags -00000001 YOLT -00000002 TLD -00000004 MwtGX -00000008 LtK - -teams... will need to do scoring differently - most you could have are 3, and scoring could depend on matching scenario bitflags -40000000 2 teams -80000000 3 teams - teams go in reverse order, so 02 is team 1, 01 team 2, 00 team 3 - that means red, blue, white for colours - -collectables... will need to do different radar overlay and flags - if flag, 04. If GX, 08. Teams use 02,01,00 -00 white yellow -01 FF7777FF red -02 8888FFFF blue -04 -08 FFC000FF [team]/gold -10 flag green border -20 MwtGX gold border - -7F014758: 49288 0FC051D6 return V0=scenario -LUI V0,8003 -JR RA -LW V0,B540 - - -rewritten during MwtGX hack... -//7F001E38: 36968 scenario-specific inhibitors -0FC051D6 JAL 7F014758 ;ret V0=scenario -24010003 ADDIU AT,R0,0003 -1441000E BNE V0,AT,7F001E7C ;branch if not MwtGG -24020058 ADDIU V0,R0,0058 ;V0=flag - always inhibit flags -//7F001E48: 36978 man w/ the GG -0FC1A4FD JAL 7F0693F4 ;V0=p->MP weapon F7 data - GG slot -240400F7 ADDIU A0,R0,00F7 -90420000 LBU V0,0000 (V0) ;A0=weapon code -NOP - - -7F010170 44CA0 handles selecting game length under different scenarios - - -rewritten during MwtGX -7F010468: 44F98 set default MP menu settings for scenario A0 -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -3C018003 LUI AT,8003 -240800FF ADDIU T0,R0,00FF ;start with all bits unset -AC24B540 SW A0,B540 (AT) ;A0->8002B540: save scenario -//7F01047C: if "Last ..Alive" set, unset it -8C22B538 LW V0,B538 (AT) ;length setting -2442FFFA ADDIU V0,V0,FFFA ;V0-=6: 7=1, all else <=0 -5C400001 BGTZL V0,+1 -AC22B538 SW V0,B538 (AT) ;1->length setting if already =7 -//7F01048C: set you only live twice scenario specific settings -24030001 ADDIU V1,R0,0001 -14830003 BNE A0,V1,+3 -24020007 ADDIU V0,R0,0007 -AC22B538 SW V0,B538 (AT) -310800FD ANDI T0,T0,00FD ;untoggle length bit -//7F0104A0: set the living daylights scenario specific settings -24020002 ADDIU V0,R0,0002 -14820004 BNE A0,V0,+4 -8C22B538 LW V0,B538 (AT) -28420004 SLTI V0,V0,0004 -50400001 BEQL V0,R0,+1 -AC22B538 SW V1,B538 (AT) -//7F0104B8: set license to kill scenario specific settings: -24020004 ADDIU V0,R0,0004 -50820001 BEQL A0,V0,+1 -310800EF ANDI T0,T0,00EF ;untoggle health bit -//7F0104C4: set man with the golden gun scenario specific settings -24020003 ADDIU V0,R0,0003 -14820006 BNE A0,V0,+6 -3C038005 LUI V1,8005 -0FC3198F JAL 7F0C6640 ;A0->selected MP weapon set -9064915F LBU A0,915F (V1) -0044102A SLT V0,V0,A0 ;V0=TRUE if # < minimum -54400001 BNEL V0,R0,+1 ;only set the flag if < minimum -A0649162 SB A0,9162 (V1) ;set selected weapon set to A0 -//7F0104E4: finish up -A028B544 SB T0,B544 (AT) ;save new scenario mask -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -+_+ - -the horrible scoring fixes. -seriously, it might just be easier to rewrite the scoring system now... - - -//7F00289C 373CC part of flag handler in 08 object expansion -ADDIU AT,R0,0002 -JAL 7F014758 -NOP -BNEL V0,AT,7F0028B0 -SW R0,0018 (SP) - - -[7F050A38] 15 object collectability: body armor -//7F050A8C 855BC detect if possess flag if Flag Tag active -JAL 7F014758 -NOP -ADDIU AT,R0,0002 -BNE V0,AT,7F050ABC ;branch if not Flag Tag -OR V1,V0,R0 -//7F050AA0: 855D0 if flag held, disable BA pickup -0FC233E0 JAL 7F08CF80 ;V0=TRUE if flag in inventory -AFA20058 SW V0,0058 (SP) -10400004 BEQ V0,R0,0004 ;branch if it isn't in inventory -8FA30058 LW V1,0058 (SP) -24090001 ADDIU T1,R0,0001 ;T1=1: uncollectability flag -10000009 BEQ R0,R0,+9 -AFA9005C SW T1,005C (SP) ;SP+5C=1: BA uncollectable -//7F050ABC: detect if possess F7 if MwtGX active -ADDIU AT,R0,0003 -BNEL V1,AT,7F050AE0 ;branch if not MwtGX -LW T3,005C (SP) ;SP+5C=1 if BA is uncollectable - - -//7F083DC4 B88F4 -JAL 7F014758 -NOP -ADDIU AT,R0,0002 -BNEL V0,AT,7F083DF0 ;branch if not scenario 2: Flag Tag -LW T3,0074 (SP) -JAL 7F08CF80 ;TRUE if player possesses flag -NOP -BEQL V0,R0,7F083DF0 ;branch if they don't -LW T3,0074 (SP) -SW R0,0074 (SP) ;kill player inventory control -LW T3,0074 (SP) - -//7F0895C0 BE0F0 stores to SP+40 -JAL 7F014758 -NOP -JAL 7F09B150 -SW V0,0040 (SP) -... -//7F089614 -LW T4,0040 (SP) -ADDIU AT,R0,0001 -BNE T4,AT,7F08962C ;branch if not you only live twice -SLTI AT,A0,0002 -BEQ AT,R0,7F089658 -NOP - - -//7F089A70 BE5A0 LtK, but no idea what it does... -JAL 7F014758 -NOP -ADDIU AT,R0,0004 -BNE V0,AT,7F089AAC ;branch if not License to Kill -LUI V0,8008 -LW V0,A0B0 (V0) ;V0=p->BONDdata -LWC1 F18,00DC (V0) ;F18=health in watch display -LWC1 F4,2A3C (V0) ;F4=actual Health register -LWC1 F8,00E0 (V0) ;F4=body armor in watch display -LWC1 F10,2A40 (V0) ;F10=actual BA register -MUL.S F6,F18,F4 ;F6=%health * actual -NOP -MUL.S F16,F8,F10 ;F16=%armor * actual -ADD.S F18,F6,F16 ;F18=(%health * actual) + (%armor * actual) -SWC1 F18,003C (SP) ;save total health * percentage - -//7F089D04 BE834 detect MwtGX item -JAL 7F014758 -SW V0,002C (SP) -ADDIU AT,R0,0003 -BNE AT,V0,7F089D28 ;branch if scenario 3: MwtGX -SW R0,0028 (SP) -JAL 7F08CFC0 ;TRUE if item F7 is in inventory -NOP -NOP -SW V0,0028 (SP) - - -7F0BDAB0 calls necessary stuff for stage loading! -//7F0BDC80 F27F0 -LUI AT,4348 -ADDIU S2,T2,9EF0 -MTC1 AT,F20 ;F20=200.0: LtK handicap -ADDIU S3,R0,0004 -... -//7F0BDCD0 F2800 set player's handicap -0FC051D6 JAL 7F014758 -00000000 NOP -14530003 BNE V0,S3,7F0BDCE8 ;branch if not LtK -00000000 NOP -10000004 BEQ R0,R0,7F0BDCF4 -E634005C SWC1 F20,005C (S1) - -!note! MwtGX and Handicaps altered this! -//7F0BDC80 F27B0 - NOP - ADDIU S2,T2,9EF0 - NOP - ADDIU S3,R0,0004 -... -//7F0BDCC8 F27F8 set player's handicap -3C118008 LUI S1,8008 -0FC00A50 JAL 7F002940 ;Casino Royale -26319EF0 ADDIU S1,S1,9EF0 -//7F0BDCD4 F2804 loop for each player -0FC051D6 JAL 7F014758 ;ret V0=scenario -00002025 OR A0,R0,R0 ;A0=handicap 0: LtK -0FC040ED JAL 7F0103B4 ;ret F0=LtK handicap; fries AT,A0 - *ANDI V0,V0,0008 ;V0=scenario & LtK flag -14400003 *BNEZ V0,R0,+3 -00000000 NOP -0FC040EA JAL 7F0103A8 -02002025 OR A0,S0,R0 -E620005C SWC1 F0,005C (S1) -//7F0BDCF4 -02002025 OR A0,S0,R0 -26100001 ADDIU S0,S0,0001 ;S0++: player#++ -26310070 ADDIU S1,S1,0070 ;S1=p->next player's stats -1613FFF3 BNE S0,S3,7F0BDCD4 ;branch if all 4 players dealt with -00000000 NOP - - -7F0BEB88 MP time and score loop - MP game, in other words -//7F0BEFB8 F3AE8 "You Only Live Twice" handling -JAL 7F014758 RETURNS V0=scenario -NOP -ADDIU AT,R0,0001 -BNE V0,AT,7F0BF1E0 branch if not "You Only Live Twice" -LUI T7,8005 - - -7F0BF800 ??? -//7F0BFA30 F4560 set item ownership flag for Flag Tag and force item out -JAL 7F014758 -SWC1 F6,0038 (V0) -ADDIU AT,R0,0002 -BNE V0,AT,7F0BFAD0 ;branch if not scenario 2: flag tag -NOP -... -//7F0BFAD0 F4600 set item ownership flag for MwtGX -JAL 7F014758 -NOP -ADDIU AT,R0,0003 -BNEL V0,AT,7F0BFB14 ;branch if not scenario 3: MwtGX -LW RA,0014 (SP) -//7F0BFAE4 test if own GX -JAL 7F04FD98 -ADDIU A0,R0,00F7 -BEQ V0,R0,7F0BFB08 ;branch if you don't have it or aren't alive -LUI T0,8008 -//7F0BFAF4 set GX ownership flag -LUI T9,8008 -LW T9,A0B4 (T9) -ADDIU T8,R0,0001 -BEQ R0,R0,7F0BFB10 -SB T8,0069 (T9) -//7F0BFB08 reset GX ownership flag -LW T0,A0B4 (T0) -SB R0,0069 (T0) -//7F0BFB10 return -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - - - -7F0C38D8 F8408 MP watch menu, at least in part -//7F0C3910 F8440 use scenario as an offset in TLB table -JAL 7F014758 -SW V0,0030 (SP) -LUI V1,8008 -SLTIU AT,V0,0008 -ADDIU V1,V1,9EF0 -LW A0,0024 (SP) -LW A1,0038 (SP) -LW A3,0034 (SP) -LW T2,0030 (SP) -BEQ AT,R0,7F0C3C80 -LW T3,0018 (SP) -SLL T7,V0,0x2 -LUI AT,8006 -ADDU AT,AT,T7 -LW T7,BCA0 (AT) ;T7=8005BCA0+offset: TLBp->scoring, or something -JR T7 -NOP - -//7F0C3CA4 F87D4 -JAL 7F014758 -SW A1,0084 (SP) -JAL 7F09A464 -SW V0,007C (SP) -... -//7F0C3F0C F8A3C -ADDIU AT,R0,0006 -BEQ T9,AT,7F0C3F34 ;branch if scenario 6: ; display A012, not A014 (2nd, not 4th) -NOP - - -7F0C3F5C F8A94 ??? - uses scenario TLB pointers @ 8005BCC0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F014758 -SW A0,0018 (SP) -SLTIU AT,V0,0008 -BEQ AT,R0,7F0C3FB4 -SLL T6,V0,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,BCC0 (AT) -JR T6 -NOP -... - -7F0C3FCC F8B04 ??? - uses scenario TLB pointers @ 8005BCE0 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F014758 -SW A0,0018 (SP) -SLTIU AT,V0,0008 -BEQ AT,R0,7F0C400C -SLL T6,V0,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,BCE0 (AT) -JR T6 -NOP -... - -also part of watch menu, probably physical display -//7F0C4728 F9258 stores to SP+80, disp. A01B: "SCORES" -JAL 7F014758 -NOP -SW V0,0080 (SP) -... -//7F0C4800 F9330 -LW V1,0080 (SP) -ADDIU AT,R0,0005 -OR S1,V0,R0 -BEQ V1,AT,7F0C4834 ;branch if 2v2 -LW T1,00D4 (SP) -ADDIU AT,R0,0006 -BEQ V1,AT,7F0C4834 ;branch if 3v1 -ADDIU AT,R0,0007 -BEQ V1,AT,7F0C4834 ;branch if 2v1 -ADDIU AT,R0,0002 -BEQ V1,AT,7F0C4834 ;branch if Flag Tag -ADDIU AT,R0,0003 -BNE V1,AT,7F0C4888 ;branch if not MwtGX -SLL T4,T1,0x3 - - -//7F0C5F0C FAA3C handle you only live twice... -JAL 7F014758 -SW A0,0058 (SP) -ADDIU AT,R0,0001 -BNE V0,AT,7F0C5F2C ;branch if scenario isn't 1: you only live twice -LW A0,0058 (SP) - -//7F0C60D0 FAC00 -JAL 7F014758 -SW A0,0088 (SP) -JAL 7F09B150 -OR S4,V0,R0 -... -//7F0C62AC FADDC -ADDIU AT,R0,0005 -BEQ S4,AT,7F0C62DC ;branch if 2v2 -SW V0,0088 (SP) -ADDIU AT,R0,0006 -BEQ S4,AT,7F0C62DC ;branch if 3v1 -ADDIU AT,R0,0007 -BEQ S4,AT,7F0C62DC ;branch if 2v1 -ADDIU AT,R0,0002 -BEQ S4,AT,7F0C62DC ;branch if Flag Tag -ADDIU AT,R0,0003 -BNE S4,AT,7F0C6338 ;branch if not MwtGX -LW A0,0088 (SP) -... -//7F0C6420 FAF50 -ADDIU AT,R0,0005 -SLL T1,S3,0x3 -SUBU T1,T1,S3 -BEQ S4,AT,7F0C6458 ;branch if 2v2 -MOV.S F22,F2 -ADDIU AT,R0,0006 -BEQ S4,AT,7F0C6458 ;branch if 3v1 -ADDIU AT,R0,0007 -BEQ S4,AT,7F0C6458 ;branch if 2v1 -ADDIU AT,R0,0002 -BEQ S4,AT,7F0C6458 ;branch if Flag Tag -ADDIU AT,R0,0007 -BNEL S4,AT,7F0C64C0 ;branch if MwtGX -C.LT.S F2,F24 -... - - -&_& - -player statistics scenario flag usage -note: 7F0C6288 sets the border colour... -//7F0C62E0 -LUI T6,8008 -LW A0,0088 (SP) -SLL T5,T4,0x3 -SUBU T5,T5,T4 -SLL T5,T5,0x4 -ADDU T6,T6,T5 -LBU T6,9F59 (T6) ;T6=stats+0x69: scenario flags -ADDIU A1,S5,FFFF -ADDIU A2,S6,FFFF -BNEZ T6,7F0C6318 ;branch if collected item or blue team -ADDIU A3,S5,0001 -//7F0C630C red team -LUI V0,FF77 -BEQ R0,R0,F70C6320 -ORI V0,V0,77FF -//7F0C6318 blue team -LUI V0,8888 -ORI V0,V0,FFFF -//F70C6320 display block with colour -ADDIU T9,S6,0001 -SW T9,0010 (SP) -JAL 7F0AD014 -SW V0,0014 (SP) -BEQ R0,R0,7F0C635C -SW V0,0088 (SP) -//7F0C6338 - -also radar, but later -//7F0C6458 -C.LT.S F2,F24 -LUI T7,8008 -ADDIU T7,T7,9EF0 -SLL T1,T1,0x4 -BC1F 7F0C6494 -ADDU V0,T1,T7 -LBU T8,0069 (V0) -LUI S1,2828 -BNEZ T8,7F0C648C -NOP -//7F0C6480 red team opaque -LUI S1,FF00 -BEQ R0,R0,7F0C64E0 -ORI S1,S1,00A0 -//7F0C648C blue team opaque -BEQ R0,R0,7F0C64E0 -ORI S1,S1,FFFF -//7F0C6494 -LBU T2,0069 (V0) -MOV.S F22,F24 -LUI S1,2828 -BNEZ T2,7F0C64B4 -NOP -//7F0C64A8 red team translucent - current player -LUI S1,FF00 -BEQ R0,R0,7F0C64E0 -ORI S1,S1,0060 -//7F0C64B4 blue team translucent - current player -BEQ R0,R0,7F0C64E0 -ORI S1,S1,FFB0 -//7F0C64BC normal mode game - current player -C.LT.S F2,F24 -LUI S1,FFFF -ORI S1,S1,0060 ;S1=FFFF0060 -BC1FL 7F0C64E0 ;yellow - mostly translucent -MOV.S F22,F24 -LUI S1,FFFF -BEQ R0,R0,7F0C64E0 ;yellow - less than half translucent -ORI S1,S1,00A0 ;S1=FFFF00A0 -//7F0C64DC -note: 7F0C6510 sets the border colour \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/NTSC to PAL fog.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/NTSC to PAL fog.txt deleted file mode 100644 index b67c3eb..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/NTSC to PAL fog.txt +++ /dev/null @@ -1,316 +0,0 @@ -NTSC will now use PAL's sky format -Type 2 format will mirror type 1 -MP will look for its own set first, then if not found roll back a player#. - This way, you can use one sky for MP, or use one sky per stage - -That should allow many more stages. - -entries vary in size - max 0x22 -/*header and fog 0x8*/ -0x0 2 stage ID number (or multiple thereof) -0x2 1 water and entry flags - 01 water segment present - 10 enviroment segment present -0x3 1 world concavity distort! positive makes world concave, negative world convex. distorts perspective -0x4 1 red component 0-FF -0x5 1 green component 0-FF -0x6 1 blue component 0-FF -0x7 1 cloud flag -/*cloud-specific 0x6*/ -0x8 2 default 5000; cloud image repeat value. larger = more repetitions (pushed to DL) -0xA 1 default 00; offset from loaded sky image (8B6) to image entry used for sky. -0xB 1 cloud red component 0-FF -0xC 1 cloud green component 0-FF -0xD 1 cloud blue component 0-FF -/*water-specific 0x6*/ -0xE 2 default -1000; water image repeat value. larger = more repetition (pushed to DL) -0x10 1 default 01 or 02; offset to loaded water image entry. -0x11 1 water highlight red component 0-FF -0x12 1 water highlight green component 0-FF -0x13 1 water highlight blue component 0-FF -/*enviroment values 0xE*/ -0x14 2 near pervasiveness of fog on rendered surfaces -0x16 2 far fog value; beyond this is complete obscurity -0x18 2 near fog value; distance from player to start of fog gradient -0x1A 2 max obj vis. range; furthest dist standard (non-door) obj and actors are visible at -0x1C 2 obj obfuscation range; objs start to 'fade' at this distance -0x1E 2 default 996 BG: dif. in light. smaller # = foggier near player -0x20 2 default 1000 far ambient light value value. used with above two values - I think this is when fog occurs, and above two are subtracted to create the near fog boundry. - permillage. light/ambient=multiplier - -change of plan. -boring single-size format. Intro type will allow per-setup skies. -same format, just single size - -Hmm... -Could omit the interpretted values for actuals. -Surface I: -0000 30D4 30A2 03E4 -03E8 fog... - -7F054B80 896B0 -7F054BAC: calls +8 from the 800825C4 value -7F054BDC: calls +8 from the 800825C4 value -7F054BF0: calls +4 from the 800825C4 value -7F054C14: calls +0 from the 800825C4 value -7F054C24: calls +0 from the 800825C4 value - -7F054C58 89788 -7F054CF0: calls +8 from the 800825C4 value -7F05FD20: calls +8 from the 800825C4 value -7F05FD34: calls +4 from the 800825C4 value - - -+_+ - - -7F0BAA40 EF570 0FC2EA90 copies fog and concavity - accepts: A0=p->data -3C028004 LUI V0,8004 -808E0003 LB T6,0003 (A0) -448E4000 MTC1 T6,F8 -888E0004 LWL T6,0004 (A0) -988E0007 LWR T6,0005 (A0) -46804120 CVT.S.W F4,F8 -AC4E4DD4 SW T6,4DD4 (V0) -03E00008 JR RA -E4444E04 SWC1 F4,4E04 (V0) - -7F0BA9C0: EF4F0 0FC2EA70 copies in water and cloud values if applicable - accepts: A0=p->data -0000C825 OR T9,R0,R0 -3C028004 LUI V0,8004 -808E0007 LB T6,0007 (A0) ;cloud flag -11C00013 BEQ T6,R0,+repeater ;use 0014 if variable-sized blocks are used! -24980008 ADDIU T8,A0,0008 -//copy in a chunk -870E0000 LH T6,0000 (T8) ;repeat -448E4000 MTC1 T6,F8 -830F0002 LB T7,0002 (T8) ;image offset -46804120 CVT.S.W F4,F8 -930E0003 LBU T6,0003 (T8) ;red -448E4000 MTC1 T6,F8 -E4444DD8 SWC1 F4,44D8 (V0) ;save repeat -46804120 CVT.S.W F4,F8 -930E0004 LBU T6,0004 (T8) ;green -448E4000 MTC1 T6,F8 -E4444DE0 SWC1 F4,44E0 (V0) ;save red -46804120 CVT.S.W F4,F8 -930E0005 LBU T6,0005 (T8) ;blue -448E4000 MTC1 T6,F8 -E4444DE4 SWC1 F4,4DE4 (V0) ;save green -46804120 CVT.S.W F4,F8 -A44F4DDC SH T7,4DDC (V0) -E4444DE8 SWC1 F4,4DE8 (V0) ;save blue -27180006 ADDIU T8,T8,0006 ;next bank offset -// repeater - test if water in use -17200005 BNEZ T9,return ;kills water loops -908E0002 LBU T6,0002 (A0) -31D90001 ANDI T9,T6,0001 -A0594DEC SB T9,4DEC (V0) ;save water flag -1720FFE8 BNE T9,R0,-copy chunk -24420018 ADDIU V0,V0,0018 ;offset to water -// return -03E00008 JR RA -00181025 OR V0,R0,T8 ;returns p->enviroment if present - - -Then you just need a long one for the evil enviroment values... -JAL copies fog and concavity -NOP -LBU T6,0002 (A0) -SRL T6,T6,0x4 -LUI T7,8008 -BEQ T6,R0,+3 -SW T6,25C0 (T7) -JAL evil enviroment values -OR A0,R0,V0 - - determines and copies enviroment values - accepts: A0=p->enviroment data (not start of block!) - note: this block is clumsily written. Revise in the future -27BDFFC8 ADDIU SP,SP,FFC8 -AFBF0014 SW RA,0014 (SP) -848F0002 LH T7,0002 (A0) ;T7=sky+4: far fog -848E0000 LH T6,0000 (A0) ;T6=sky+2: near pervasiveness -AFA40038 SW A0,0038 (SP) ;SP+38=A0: sky -448F3000 MTC1 T7,F6 -448E2000 MTC1 T6,F4 -468033A0 CVT.S.W F14,F6 ;F14=far fog -0C001194 JAL 70004650 ;set page height -46802320 CVT.S.W F12,F4 ;F12=near pervasiveness -0C0011AB JAL 700046AC -27A40030 ADDIU A0,SP,0030 ;A0=SP+30: target for returned float (+0, +4) -0FC2D21E JAL 7F0B4878 ;F0=8003AC4C: 1.0 cutoff. set higher blackens portals and kills objects unless very close -00000000 NOP -//7F0B9A30: -C7A80030 LWC1 F8,0030 (SP) ;F8=SP+30: probably near pervasiveness -C7A40034 LWC1 F4,0034 (SP) ;F4=SP+34: probably far fog -8FA50038 LW A1,0038 (SP) ;A1=sky -46004283 DIV.S F10,F8,F0 -3C01447A LUI AT,447A -3C038008 LUI V1,8008 -246425E4 ADDIU A0,V1,25E4 ;A0=800825E4: -246625E0 ADDIU A2,V1,25E0 ;A2=800825E0: -246325C8 ADDIU V1,V1,25C8 ;V1=800825C8: -3C028004 LUI V0,8004 -24424DCC ADDIU V0,V0,4DCC ;V0=80044DCC: p->current data, starting at BG light -46002183 DIV.S F6,F4,F0 -E7AA0030 SWC1 F10,0030 (SP) -E7A60034 SWC1 F6,0034 (SP) -84B8000A LH T8,000A (A1) ;T6=BG dif.in light -44984000 MTC1 T8,F8 -44812000 MTC1 AT,F4 ;F4=1000.0 -468042A0 CVT.S.W F10,F8 -46045183 DIV.S F6,F10,F4 -//7F0B9A8C: -84B9000C LH T9,000C (A1) ;T9=far ambient light -44994000 MTC1 T9,F8 -E4860000 SWC1 F6,0000 (A0) -468042A0 CVT.S.W F10,F8 -C7A80034 LWC1 F8,0034 (SP) -46045183 DIV.S F6,F10,F4 -C7AA0030 LWC1 F10,0030 (SP) -460A4381 SUB.S F14,F8,F10 -E4C60000 SWC1 F6,0000 (A2) -C4D00000 LWC1 F16,0000 (A2) -46107102 MUL.S F4,F14,F16 -46045180 ADD.S F6,F10,F4 -E446FFF8 SWC1 F6,FFF8 (V0) - //7F0B9AC8: -C4820000 LWC1 F2,0000 (A0) -46027202 MUL.S F8,F14,F2 -46085100 ADD.S F4,F10,F8 -E444FFFC SWC1 F4,FFFC (V0) -//7F0B9ADC: -84A80000 LH T0,0000 (A1) -44883000 MTC1 T0,F6 -3C014300 LUI AT,4300 -468032A0 CVT.S.W F10,F6 -46005203 DIV.S F8,F10,F0 -E4680000 SWC1 F8,0000 (V1) -84A90002 LH T1,0002 (A1) -46028201 SUB.S F8,F16,F2 -C4720000 LWC1 F18,0000 (V1) -44892000 MTC1 T1,F4 -E7A80018 SWC1 F8,0018 (SP) -468021A0 CVT.S.W F6,F4 -44812000 MTC1 AT,F4 -3C013F00 LUI AT,3F00 -44814000 MTC1 AT,F8 -3C014380 LUI AT,4380 -46003283 DIV.S F10,F6,F0 -C7A60018 LWC1 F6,0018 (SP) -E46A0004 SWC1 F10,0004 (V1) -//7F0B9B2C: -46062283 DIV.S F10,F4,F6 -C46C0004 LWC1 F12,0004 (V1) -46024101 SUB.S F4,F8,F2 -E7AA0020 SWC1 F10,0020 (SP) -44815000 MTC1 AT,F10 -3C013F80 LUI AT,3F80 -460A2202 MUL.S F8,F4,F10 -46126281 SUB.S F10,F12,F18 -E7AA0018 SWC1 F10,0018 (SP) -44815000 MTC1 AT,F10 -46064103 DIV.S F4,F8,F6 -C7A80020 LWC1 F8,0020 (SP) -46004187 NEG.S F6,F8 -460A9200 ADD.S F8,F18,F10 -C7AA0018 LWC1 F10,0018 (SP) -E7A4001C SWC1 F4,001C (SP) -460C3102 MUL.S F4,F6,F12 -3C01437F LUI AT,437F -46082182 MUL.S F6,F4,F8 -44814000 MTC1 AT,F8 -3C013F80 LUI AT,3F80 -460A3103 DIV.S F4,F6,F10 -44815000 MTC1 AT,F10 -3C01437F LUI AT,437F -46082183 DIV.S F6,F4,F8 -C7A80020 LWC1 F8,0020 (SP) -460A6100 ADD.S F4,F12,F10 -C7AA0018 LWC1 F10,0018 (SP) -E4660010 SWC1 F6,0010 (V1) -//7F0B9BA4: -46082182 MUL.S F6,F4,F8 -C7A8001C LWC1 F8,001C (SP) -460A3103 DIV.S F4,F6,F10 -44815000 MTC1 AT,F10 -46042180 ADD.S F6,F4,F8 -460A3103 DIV.S F4,F6,F10 -E4640014 SWC1 F4,0014 (V1) -//7F0B9BC4: light values -84AA000A LH T2,000A (A1) ;T2=BG dif.light -AC4A0000 SW T2,0000 (V0) ;T2->8003E2BC -84AB000C LH T3,000C (A1) ;T3=far ambient light -AC4B0004 SW T3,0004 (V0) ;T3->8003E2C0 -//7F0B9D2C: -E4460038 SWC1 F6,0038 (V0) -84A30004 LH V1,0004 (A1) ;V1=near fog value -3C018008 LUI AT,8008 -1060000E BEQ V1,R0,7F0B9D8C ;branch if near fog value present -AC2025C4 SW R0,25C4 (AT) ;0->800825C4 -//7F0B9D48: -44832000 MTC1 V1,F4 -242225F8 ADDIU V0,AT,25F8 ;V0=800825F8 -46802220 CVT.S.W F8,F4 ;F8=(float) near fog value -84A80006 LH T0,0006 (A1) ;T0=max obj vis. range -44885000 MTC1 T0,F10 -E4480000 SWC1 F8,0000 (V0) -468051A0 CVT.S.W F6,F10 ;F6=(float) max obj vis. range -84A90008 LH T1,0008 (A1) ;T1=obfuscation range -44892000 MTC1 T1,F4 -E4460004 SWC1 F6,0004 (V0) -46802220 CVT.S.W F8,F4 ;F8=(float) obfuscation range -E4480008 SWC1 F8,0008 (V0) -AC2225C4 SW V0,25C4 (AT) ;800825F8->800825C4 -//7F0B9D8C: -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0038 ADDIU SP,SP,0038 - - -USAGE OF LARGE ENVIROMENT BANK CODE: - 7F0BAAFC 0xEF62C locate and copy enviroment values - 7F0BAB78 0xEF6A8 locate and copy enviroment values - 7F0BABF0 0xEF720 locate and copy enviroment values - 7F0BB058 0xEFB88 - -USAGE OF SHORT ENVIROMENT BANK CODE: - 7F0BAC84 0xEF7B4 locate and copy enviroment values - -//7F0BAC3C: EF76C -848F0000 *LH T7,0000 (A0) ;T7=env.stage# - LW A2,001C (SP) ;A2=SP+1C: 0 - LW A3,0028 (SP) ;A3=SP+28: stage# - BEQ T7,R0,7F0BAC78 ;branch if no entries in list - OR V1,A0,R0 ;V1=80045F50: env.table 2 - LUI T8,8004 - ADDIU T8,T8,5F50 ;T8=80045F50: env.table 2 -87020000 *LH V0,0000 (T8) ;V0=env.stage# -//7F0BAC5C: EF78C save hits - BNEL A3,V0,7F0BAC6C ;branch if no match -84620014 *LH V0,0014 (V1) - OR A2,V1,R0 ;A2=V1: env.table hit -//7F0BAC68: loop for all entries -84620014 *LH V0,0014 (V1) ;V0=next env.stage# -24630014 *ADDIU V1,V1,0014 ;V1+=0x38: p->env.entry - BNEZ V0,7F0BAC5C ;branch if not at end of list - NOP - -//7F0BAC84: -0FC2EA90 *JAL 7F0BAA40 -00C02025 OR A0,A2,R0 ;A0=A2: p->env.data -3C028008 LUI V0,8008 -0FC2EA70 *JAL 7F0BA9C0 ;copy table 2 enviroment to current -AC4025E8 *SW R0,25E8 (V0) ;0->800825E8: fry env.table hit buffer - -test calls of 7F0BAA64 -7F07AA54 creates sky during intro scene - -7F07AB00 multi: called at swirly camera? calls intro block after this first time, but not second -7F07AB54 solo: called at swirly camera -intro block is loaded and ready long before sky is built -so, could just include it in lookup diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/00-01.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/00-01.bin deleted file mode 100644 index b9b36e9..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/00-01.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/02.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/02.bin deleted file mode 100644 index 0c2f5ad..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/02.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/03-04.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/03-04.bin deleted file mode 100644 index 08cb286..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/03-04.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/05.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/05.bin deleted file mode 100644 index d3db987..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/05.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/06.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/06.bin deleted file mode 100644 index caa49aa..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/06.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/07.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/07.bin deleted file mode 100644 index 2b577a6..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/07.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/08-09-0A.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/08-09-0A.bin deleted file mode 100644 index 4bdb6b8..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/08-09-0A.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0B.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0B.bin deleted file mode 100644 index 6ed1a77..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0B.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0C.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0C.bin deleted file mode 100644 index 528ea71..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0C.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0D.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0D.bin deleted file mode 100644 index 707cc51..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0D.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0E.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0E.bin deleted file mode 100644 index 1656efa..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0E.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0F.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0F.bin deleted file mode 100644 index a01b26f..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/0F.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/10.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/10.bin deleted file mode 100644 index 35c869e..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/10.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/11.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/11.bin deleted file mode 100644 index 8a57c73..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/11.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/12.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/12.bin deleted file mode 100644 index 3ef3fb7..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/12.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/13.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/13.bin deleted file mode 100644 index 0c87675..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/13.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/14.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/14.bin deleted file mode 100644 index c66f148..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/14.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/15.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/15.bin deleted file mode 100644 index a1beeec..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/15.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/16.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/16.bin deleted file mode 100644 index a48681c..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/16.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/17.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/17.bin deleted file mode 100644 index fcaf640..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/17.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/18.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/18.bin deleted file mode 100644 index 1df5cfd..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/18.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/22.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/22.bin deleted file mode 100644 index e9cfd4c..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/22.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/26-2C.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/26-2C.bin deleted file mode 100644 index 4f58d5f..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/26-2C.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/27.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/27.bin deleted file mode 100644 index c99289e..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/27.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/28.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/28.bin deleted file mode 100644 index a3b1f29..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/28.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/29.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/29.bin deleted file mode 100644 index 9d2b090..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/29.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2A.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2A.bin deleted file mode 100644 index 5c99391..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2A.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2B.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2B.bin deleted file mode 100644 index 9174911..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2B.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2D.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2D.bin deleted file mode 100644 index 6f4af72..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2D.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2E-2F.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2E-2F.bin deleted file mode 100644 index 53e0220..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/2E-2F.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/30-31-32-33.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/30-31-32-33.bin deleted file mode 100644 index d9193a0..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/30-31-32-33.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/34.bin b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/34.bin deleted file mode 100644 index ed12df0..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/34.bin and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/monitor animations HACKED.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/monitor animations HACKED.txt deleted file mode 100644 index a22633c..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/monitor animations HACKED.txt +++ /dev/null @@ -1,691 +0,0 @@ -starts @ 0xFDE4, ends at 0x11240 editted if 0xFDE4 does not equal 00000007 -use halfwords, not full words for all microcode commands - friendlier, but not as happy, as bytes - that reduces all hex percents, delays, rotations to shorts - pointers use LWL/LWR, RGBA bytewise (it might as well be anyway) - -New format similar to text files: -table of short ints declare #shorts to selected ani# from initial for table -followed by command lists - -New command list- - -Stop Scroll: -0000 -kills x/y scroll timers - -Horizontal Scroll: -0001 xxxx tttt -[x] 'width' value like in image mapping to shift the image; short hex percent -[t]ime the move occurs in - -Vertical Scroll: -0002 yyyy tttt -[y] 'height' value like in image mapping to shift image; short hex percent -[t]ime the move occurs in - -Horizontal Scroll Nonadditive: -0003 xxxx tttt -[x] 'width' value shifting the image from original position; short hex percent -[t]ime the move occurs in - -Vertical Scroll Nonadditive: -0004 yyyy tttt -[y] 'height' value shifting the image from original position; short hex percent -[t]ime the move occurs in - -Zoom Width: -0005 xxxx tttt -[x] zoom factor as a short hex percentage -[t]ime for complete zoom - -Zoom Height: -0006 yyyy tttt -[x] zoom factor as a short hex percentage -[t]ime for complete zoom - -Use image: -0007 00xx -xx is image number in global image list, starting with 0=BOND -technically can eb negative to search backward in list... - -Hold for Time: -0008 tttt -[t]ime to hold; breaks execution so play resumes -ensured to make at least one break; must, since emu clock hacks would cause inf. loops - -Jump to Routine: -0009 aa xx -[a]nimation group number to jump to -[x] number of shorts in group to start at -writes a new command start pointer from ani# and starts at offset. reset restarts at pointer, not at given offset in - -Jump on Chance: -000A aa xx rrrr -[a]nimation group number to jump to -[x] number of shorts in group to start at -[r] value to test against a random value. Jump if rand < rrrr - -Loop: -000B -restarts group from the beginning of the current animation - -Stop Animation: -000C -Unconditionally breaks processing animations, similar to 03 action block command - -RGBA: -000D RRGGBBAA tttt -New [R]ed, [G]reen, [B]lue, and [A]lpha components -[t]ime for complete transition - -Set Rotation: -000E rrrr.rrrr -set image [r]otation; 0x2000 rotates 360 degrees -primarily used to reset rotation to 0 - -Rotate Image: -000F rrrr.rrrr -[r]otate image incrementally rrrr.rrrr%; B6~=1 degree -0x2000 (1FFE) rotates approximately 45 degrees, 0x1554 to mimic a clock - - -!NEW! Branch on Chance: -0010 xxxx rrrr -[r] value to test against a random value. Jump if rand < rrrr -[x] value added to position of next command to create branch; pointer not affected -on a miss advances normally to next command -on a hit, offset is in shorts from start of next op; FFFD would make an endless loop - -!NEW! Jump and Set: -0011 aa xx -[a]nimation group number to jump to -[x] number of shorts in group to set start at -Sets restart location to a given offset in given command and jumps to position. -Essentially treats target like subroutines from original blocks -Used primarily for loops after a single-execution section, similar to lead-in of a song. -For instance, could show bootup, then sequence windows using a new start position. - -!NEW! Branch and Link: -0012 xxxx -[x] value added to current position to create branch -Sets pointer to next command, just like the JAL or B-AL opcodes -branches from this position to set number of opcodes forward/back; use 000B to return -note that you will need to reset the start position or something for normal repeats -Sorry its an annoying format, but the whole thing is a tad bit limitted space-wise - -!NEW! Branch -0013 xxxx -[x] value added to current position to create branch -simply skips from following op without setting the pointer - -!NEW! Loop -0014 tttt xxxx -[t]ime to hold; necessary to break loops, like the 03 action command -[x] value added to current position to create branch; must be negative to loop! -Note that an 08 command can not be placed within the looped section -Breaks execution like the 08 and 0C commands. -Branches backward the given number of shorts each time the counter is set. -Resumes normally after the given number of cycles -Especially useful to loop the rotatary types: -000F 000000B6 0014 0168 FFFD loops around 360 degrees, one degree at a time - -+ + - + -+ + - -7F049F48: Process monitor microcode -... -//7F049FEC: 7EB1C -OR S1,R0,R0 -*LH V0,0004 (S0) V0=offset in ani code; S0=ani values at 0x80 in 0A objects -//7F049FF4: 7EB24 - LW T1,0000 (S0) T1=pointer to animation microcode from object --40 *SLL T2,V0,0x1 - ADDU V1,T1,T2 -84- *LH T3,0000 (V1) T3=command type; V1=offset to command - *SLTIU AT,T3,0012 being unsigned would catch negative invalids - BEQ AT,R0,7F04A468 - SLL T3,T3,0x2 - LUI AT,8005 - ADDU AT,AT,T3 - *LW T3,2B98 (AT) T3=80052B98: moved TLB table for more entries! - JR T3 - NOP - -//7F04A024: 7EB54 command 00: stop scroll -ADDIU T4,V0,0001 -SWC1 F20,0040 (S0) 0->reset x timer -SWC1 F20,0054 (S0) 0->reset y timer -BEQ R0,R0,7F04A468 -SH T4,0004 (S0) save offset - -//7F04A038: 7EB68 command 01: horizontal scroll; redirect 03 here, and do command test to see if addition occurs - SWC1 F20,003C (S0) 0-> - *LHU T5,0004 (V1) time value, unsigned since it is always positive - LUI AT,4F80 - MTC1 T5,F4 - BGEZ T5,7F04A05C - CVT.S.W F6,F4 - MTC1 AT,F8 - NOP - ADD.S F6,F6,F8 -//7F04A05C: - DIV.S F10,F24,F6 - LWC1 F0,0038 (S0) - ADDIU T7,V0,0003 - SWC1 F0,0044 (S0) - SWC1 F10,0040 (S0) - *LH T6,0002 (V1) scroll can be negative - SH T7,0004 (S0) - MTC1 T6,F18 -84610000 *LH AT,0000 (V1) get command for comparison - CVT.S.W F4,F18 - MUL.S F8,F4,F22 -2021FFFF *ADDI AT,AT,FFFF -50200001 *BEQL AT,R0,+1 command 1 triggers addition, but 3 doesn't -46080200 +*ADD.S F8,F0,F8 - +BEQ R0,R0,7F04A468 -E6080048 +*SWC1 F8,0048 (S0) - -//7F04A09C: 7EBCC command 02: vertical scroll; redirect 04 here, and do command test to see if addition occurs - SWC1 F20,0050 (S0) - *LHU T8,0004 (V1) time can't be negative anyway - LUI AT,4F80 - MTC1 T8,F10 - BGEZ T8,7F04A0B8 - CVT.S.W F18,F10 - MTC1 AT,F4 - NOP - ADD.S F18,F18,F4 -//7F04A0B8: - DIV.S F8,F24,F18 - LWC1 F0,004C (S0) - ADDIU T0,V0,0003 - SWC1 F0,0058 (S0) - SWC1 F8,0054 (S0) - *LH T9,0002 (V1) scroll can be though - SH T0,0004 (S0) - MTC1 T9,F6 -84610000 *LH AT,0000 (V1) - CVT.S.W F10,F6 - MUL.S F4,F10,F22 -2021FFFE *ADDI AT,AT,FFFE -50200001 *BEQL AT,R0,+1 -46040100 +*ADD.S F4,F0,F4 - +BEQ R0,R0,7F04A468 -E604005C +*SWC1 F4,005C (S0) - -*** -new command 10 instered here: -//7F04A100: 7EC30 command 10: branch if rand < x -0C002914 JAL 7000A450 ret. V0=rand -AFA30094 SW V1,0094 (SP) -8FA30094 LW V1,0094 (SP) -00021402 SRL V0,V0,0x10 T1=rand / 0x10000 -946A0004 *LHU T2,0004 (V1) +rand -34090000 ORI T1,R0,0000 normal command offset -004A082B SLTU AT,V0,T2 -50200001 BEQL AT,R0,+1 don't jump ani if rand < given value -84690002 *LH T1,0002 (V1) -860A0004 LH T2,0004 (S0) -01494821 ADDU T1,T1,T2 -25290003 ADDIU T1,T1,0003 -A6090004 SH T1,0004 (S0) update offset from pointer here -3C014780 LUI AT,4780 -100000CB BEQ R0,R0,7F04A468 -44811000 MTC1 AT,F2 F2=65536 -*** -new command 11 inserted here: -//7F04A140 7EC6C command 11: jump and set new start (jump to subroutine) -90650002 LBU A1,0002 (V1) -0FC12726 JAL 7F049C98 set pointer; A0=obj, A1=ani# -02002025 OR A0,S0,R0 -90610003 LB AT,0003 (V1) -00010840 SLL AT,AT,0x1 -8E020000 LW V0,0000 (S0) -00221021 ADDU V0,V0,AT -AE020000 SW V0,0000 (S0) -3C014780 LUI AT,4780 -100000C0 -BEQ R0,R0,7F04A468 -44811000 MTC1 AT,F2 F2=65536 -*** -new command 12 inserted here: -//7F04A16C 7EC9C command 12: branch and link -84690002 LH T1,0002 (V1) branch value -24630004 ADDIU V1,V1,0004 V1=pointer to next op -AE030000 SW V1,0000 (S0) -100000BB BEQ R0,R0,7F04A468 -A6090004 SH T1,0004 (S0) update offset from pointer here -*** -new command 13 inserted here: -//7F04A180 7ECB0 command 13: branch -84620002 LH V0,0002 (V1) branch value -86090004 LH T1,0004 (S0) -00494821 ADDU T1,T1,V0 -25290002 ADDIU T1,T1,0002 account for op -100000B6 BEQ R0,R0,7F04A468 -A6090004 SH T1,0004 (S0) update offset from pointer here -*** -new command 14 inserted here: -//7F04A194 7ECC4 command 14: - - -*** - -//7F04A1A0: 7ECD0 combination zoom -//15 dual zoom -24190001 ADDIU T9,R0,0001 ;special - loops for 15 command -10000005 BEQ R0,R0,+combo -00107825 OR T7,S0,R0 -//05 X zoom -10000002 BEQ R0,R0,+combo -00107825 OR T7,S0,R0 -//06 Y zoom -260F0014 ADDIU T7,S0,0014 -0000C825 *OR T9,R0,R0 -//combo: -E5F40014 *SWC1 F20,0014 (T7) -94680004 *LHU T0,0004 (V1) +time -3C014F80 LUI AT,4F80 -44884000 MTC1 T0,F8 -44815000 MTC1 AT,F10 -05010002 BGEZ T0,7F04A1C4 -468044A0 CVT.S.W F18,F8 -460A9480 ADD.S F18,F18,F10 -//7F04A1C4: -4612C103 DIV.S F4,F24,F18 -E5E40018 *SWC1 F4,0018 (T7) -84690002 *LH T1,0002 (V1) +-zoom -44894000 MTC1 T1,F8 -C5E60010 *LWC1 F6,0010 (T7) -E5E6001C *SWC1 F6,001C (T7) -468042A0 CVT.S.W F10,F8 -46165482 MUL.S F18,F10,F22 -17200087 BNE T9,R0,-yzoom -E5F20020 *SWC1 F18,0020 (T7) -//return and advance -244A0003 ADDIU T2,V0,0003 -10000087 BEQ R0,R0,7F04A468 -A60A0004 SH T2,0004 (S0) - - -//7F04A1A0: 7ECD0 command 05: Zoom X - SWC1 F20,0014 (S0) - *LHU T7,0004 (V1) +time - LUI AT,4F80 - MTC1 T7,F10 - BGEZ T7,7F04A1C4 - CVT.S.W F6,F10 - MTC1 AT,F4 - NOP - ADD.S F6,F6,F4 -//7F04A1C4: - DIV.S F8,F24,F6 - LWC1 F18,0010 (S0) - ADDIU T9,V0,0003 - SWC1 F18,001C (S0) - SWC1 F8,0018 (S0) - *LH T8,0002 (V1) zoom either way - SH T9,0004 (S0) - MTC1 T8,F10 - NOP - CVT.S.W F4,F10 - MUL.S F6,F4,F22 - BEQ R0,R0,7F04A468 - SWC1 F6,0020 (S0) - -//7F04A1F8: 7ED28 command 06: Zoom Y - SWC1 F20,0028 (S0) - *LHU T0,0004 (V1) +time - LUI AT,4F80 - MTC1 T0,F8 - BGEZ T0,7F04A1C4 - CVT.S.W F18,F8 - MTC1 AT,F10 - NOP - ADD.S F18,F18,F10 -//7F04A1C4: - DIV.S F4,F24,F18 - LWC1 F6,0024 (S0) - ADDIU T2,V0,0003 - SWC1 F6,0030 (S0) - SWC1 F4,002C (S0) - *LH T1,0002 (V1) +-zoom - SH T2,0004 (S0) - MTC1 T1,F8 - NOP - CVT.S.W F10,F8 - MUL.S F18,F10,F22 - BEQ R0,R0,7F04A468 - SWC1 F18,0034 (S0) - - -//7F04A250: 7ED80 command 07: use image from global monitor image list - OR A0,S0,R0 - JAL 7F049F40 - JR RA - SW A1,0008 (A0) save image to obj - *LH A1,0002 (V1) +image index - *LH T3,0004 (S0) - LUI AT,4780 - MTC1 AT,F2 F2=65536 - ADDIU T4,T3,0002 - BEQ R0,R0,7F04A468 - SH T4,0004 (S0) - -REWRITE to add loop type -//7F04A274: 7EDA4 command 08/14: halt processing for time/loop -24110001 ADDIU S1,R0,0001 set the break flag -86020006 LH V0,0006 (S0) get the current stall counter -946F0000 LHU T7,0000 (V1) command type -000F7902 SRL T7,T7,0x4 8=0,14=1 -04420001 BLTZL V0,+1 -84620002 LH V0,0002 (V1) if not set, get new stall counter -3C0D8005 LUI T5,8005 -8DAD8374 LW T5,8374 (T5) T5=80048374: increment only during play -004D7023 SUBU T6,V0,T5 -A60E0006 SH T6,0006 (S0) dec it one and save -86180004 LH T8,0004 (S0) offset in command list -05C20005 BLTZL T6,7F04A2B8 if -1, then its done; set offset -27180002 ADDIU T8,T8,0002 -55E00003 BNEL T7,R0,7F04A2B8 if type 14, use a loop not a wait -846F0004 LH T7,0004 (V1) sneaky: loads branch and uses normal movement -1000006D BEQ R0,R0,7F04A468 -00000000 NOP -//7F04A2B8: when you're done waiting, move to next command -01F8C021 ADDU T8,T8,T7 -1000006A BEQ R0,R0,7F04A468 -A6180004 SH T8,0004 (S0) - - -//7F04A2C4: 7EDF4 command 09: jump -90650002 *LBU A1,0002 (V1) -90610003 *LBU AT,0003 (V1) -0FC12727 *JAL 7F049C9C set pointer; A0=obj, A1=ani#, AT=offset -02002025 OR A0,S0,R0 -3C014780 LUI AT,4780 - -BEQ R0,R0,7F04A468 -44811000 MTC1 AT,F2 F2=65536 - -//7F04A2E0: 7EE10 command 0A: jump if rand < x - -JAL 7000A450 ret. V0=rand - -SW V1,0094 (SP) - -LW V1,0094 (SP) - -SRL T1,V0,0x10 T1=rand / 0x10000 - -OR A0,S0,R0 -946A0006 *LHU T2,0006 (V1) +rand - -SLTU AT,T1,T2 - -BEQL AT,R0,7F04A320 don't jump ani if rand < given value - -LHU T3,0004 (S0) -90650002 *LBU A1,0002 (V1) -0FC12727 *JAL 7F049C9C -90610003 *LBU AT,0005 (V1) -3C014780 LUI AT,4780 - -BEQ R0,R0,7F04A468 -44811000 MTC1 AT,F2 F2=65536 - -LHU T3,0004 (S0) -//7F04A320: - -LUI AT,4780 - -MTC1 AT,F2 F2=65536 - *ADDIU T4,T3,0003 - -SH T4,0004 (S0) - -BEQ R0,R0,7F04A468 - -NOP - -//7F04A338: 7EE68 command 0B: restart group -BEQ R0,R0,7F04A468 -SH R0,0004 (S0) - -//7F04A340: 7EE70 command 0C: stop animation -BEQ R0,R0,7F04A468 -ADDIU S1,R0,0001 - -//7F04A348: 7EE78 command 0D: colour transition - SWC1 F20,006C (S0) - *LHU T5,0006 (V1) +time - LUI AT,4F80 - MTC1 T5,F4 - BGEZ T5,7F04A36C - CVT.S.W F6,F4 - MTC1 AT,F8 - NOP - ADD.S F6,F6,F8 -//7F04A36C: - DIV.S F10,F24,F6 - LBU T6,0060 (S0) T6=cur R - LBU T0,0063 (S0) T0=cur G - LBU T4,0066 (S0) T4=cur B - SB T6,0061 (S0) move cur R->0x61 - LBU T8,0069 (S0) T8=cur A - SWC1 F10,0070 (S0) --79- *LBU T9,0002 (V1) T7=new R - SB T0,0064 (S0) move cur G->0x64 - *NOP - SB T9,0062 (S0) final R->0x62 --6B- *LBU T3,0003 (V1) T1=new G - SB T4,0067 (S0) move cur B->0x67 - *NOP - SB T3,0065 (S0) final G->0x65 --6F- *LBU T7,0004 (V1) T5=new B - SB T8,006A (S0) move cur A->0x6A - *ADDIU T1,V0,0004 one more command now - *NOP - SB T7,0068 (S0) final B->0x68 - *LBU T0,0005 (V1) T0=new A - SH T1,0004 (S0) - BEQ R0,R0,7F04A468 - SB T0,006B (S0) final A->0x6B - -//7F04A3CC: 7EEFC command 0E: set image rotation -THIS WORKS STUPID, would be best to overhaul -886A0002 *LWL T2,0002 (V1) -986A0005 *LWR T2,0005 (V1) -244B0003 *ADDIU T3,V0,0003 -448A9000 -MTC1 T2,F18 -A60B0004 SH T3,0004 (S0) new com offset - -CVT.S.W F4,F18 - -MUL.S F8,F4,F26 F26=pi*2 - -DIV.S F6,F8,F2 F2=65536 - -BEQ R0,R0,7F04A468 - -SWC1 F6,000C (S0) - -//7F04A3F4: 7EF24 command 0F: rotate image from current -886C0002 *LWL T4,0002 (V1) -986C0005 *LWR T4,0005 (V1) -3C018005 LUI AT,8005 - -MTC1 T4,F18 -C42A8378 LWC1 F10,8378 (AT) F10=80048378: ? - -CVT.S.W F4,F18 - -MUL.S F8,F10,F4 - -LWC1 F10,000C (S0) - -MUL.S F6,F8,F26 F26=pi*2 - -DIV.S F18,F6,F2 F2=65536 - -ADD.S F4,F10,F18 - -SWC1 F4,000C (S0) - -LWC1 F12,000C (S0) - -C.LE.S F26,F12 - -NOP - -BC1FL 7F04A448 - -C.LT.S F12,F20 - -SUB.S F8,F12,F26 - -SWC1 F8,000C (S0) - -LWC1 F12,000C (S0) - -C.LT.S F12,F20 -//7F04A448: - -NOP - -BC1FL 7F04A460 - *LH T5,0004 (S0) - -ADD.S F6,F12,F26 - -SWC1 F6,000C (S0) - *LH T5,0004 (S0) -//7F04A460: - *ADDIU T6,T5,0003 - -SH T6,0004 (S0) -//7F04A468: iterate to next command if not stopped -BEQL S1,R0,7F049FF4 -*LH V0,0004 (S0) -... -//7F04AC18: -JR RA -ADDIU SP,SP,00B0 - - -potential new type JAL -90650002 LBU A1,0002 (V1) -90610003 LB AT,0003 (V1) -0FC12727 JAL 7F049C9C -02002025 OR A0,S0,R0 -AE030000 SW V1,0000 (S0) - SUBU A1,A1,V1 -00052842 SRL A1,A1,0x1 -86010004 LH AT,0004 (S0) -00A10821 ADDU AT,AT,A1 -100000 BEQ R0,R0,7F04A468 -A6010004 SH AT,0004 (S0) - -+ + - + -+ + - -routine to set the thingies for each object: -7F049C98 accepts A1=ani to use, A0=target ani block to fill -ADDIU SP,SP,FFE8 -LUI A2,8003 -SLTIU AT,A1,0034 0x34 valid entries -SW RA,0014 (SP) -BEQ AT,R0,7F049F28 -ADDIU A2,A2,0B74 A2=80030B74: start of table (BOND) -SLL T6,A1,0x2 -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,2B98 (AT) T6=80052B98: TLB that sets the address for each animation -JR T6 -NOP - -//7F049F28: return and default -JAL 7F049C8C - SW A1,0000 (A0) - JR RA - SH R0,0004 (A0) -OR A1,A2,R0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - - -Okay, this method is stupid. Need an index starting at 80030B74, each short lists #shorts to start of block. -Also, eliminating jump to do a direct write. It kills code and allows other blocks to function without error -Tee Hee! this whole routine is one command shorter than just the reroute from before! -7F049C98 7E7C8 accepts A1=ani to use, A0=target ani block to fill - !NOW! uses AT for group offset; can jump in one command late to set it yourself! -00000825 OR AT,R0,R0 -3C068003 LUI A2,8003 -24C60B74 ADDIU A2,A2,0B74 A2=80030B74: start of table (BOND) -00052840 SLL A1,A1,0x1 A1=offset to index -00C52821 ADDU A1,A2,A1 -94A50000 LHU A1,0000 (A1) -00052840 SLL A1,A1,0x1 A1=#shorts to group * 2 -00C52821 ADDU A1,A2,A1 -AC850000 SW A1,0000 (A0) -03E00008 JR RA -A4810004 SH AT,0004 (A0) - -+ + - + -+ + - -Rewrite repeat copier. Just generate a copy, don't read from 21990. -Normal first-word (80030B74) becomes three monitor ani#s: -00, 34, 00(35) Normal, Unknown, Taser - -REVISION OF BELOW, DOESN'T REALLY USE STACK -7F001958: 0x36488 -27BDFFF8 ADDIU SP,SP,FFF8 only 0x8 - +4 for RA -AFBF0004 SW RA,0004 (SP) -3C048007 LUI A0,8007 -24845B98 ADDIU A0,A0,5B98 A0=target -00001025 OR V0,R0,R0 counter -2405FFFF ADDIU A1,R0,FFFF -//7F001970: setup header for block -AC850004 SW A1,0004 (A0) -AC800008 SW R0,0008 (A0) -AC80000C SW R0,000C (A0) -3C058003 LUI A1,8003 -00452821 ADDU A1,A1,V0 -0FC12726 JAL 7F049C98 A0=base for copy, A1=ani to use -90A5A260 LBU A1,A260 (A1) -//7F00198C: loop to copy the 1,0,0,1,1 pattern; after first two change float -3C063F80 LUI A2,3F80 -AC86006C SW A2,006C (A0) -24050003 ADDIU A1,R0,0003 -24010002 ADDIU AT,R0,0002 -//7F00199C: loopus -AC860010 SW A2,0010 (A0) -AC800014 SW R0,0014 (A0) -AC800018 SW R0,0018 (A0) -AC86001C SW A2,001C (A0) -AC860020 SW A2,0020 (A0) -24840014 ADDIU A0,A0,0014 -50A10001 BEQL A1,AT,+1 -3C063F00 LUI A2,3F00 -14A0FFF7 +BNE A1,R0,7F001998 at end, A1=-1 -24A5FFFF +ADDIU A1,A1,FFFF -//7F0019C4: RGBA and last timers -AC850010 SW A1,0010 (A0) -AC850014 SW A1,0014 (A0) -AC850018 SW A1,0018 (A0) -AC800020 SW R0,0020 (A0) -AC800024 SW R0,0024 (A0) -//7F0019D8: -24840028 ADDIU A0,A0,0028 -1441FFE4 BNE V0,AT,7F001970 -24420001 ADDIU V0,V0,0001 -//7F0019E4: -8FBF0004 LW RA,0004 (SP) -03E00008 JR RA -27BD0008 ADDIU SP,SP,0008 - - -For now route the taser directly to the BOND animation, other to its own entry. -eliminates need for copy block. just need the three ani# bytes - - -More Fun - Explosions manually set pointers! -For this, use entry#4 in that table thingy with the default, unknown, taser setting -Can set 'black' (normal), 'off' (personal favorite), or make your own -//7F04E5D8: 0x83108 handle a destroyed 0A object! - ADDIU A0,S0,0080 - LUI A1,8003 -0FC12726 *JAL 7F049C98 -90A5A263 *LBU A1,A263 (A1) - BEQ R0,R0,7F04E6CC - NOP - -//7F04E60C: 0x8313C handle a destroyed 0B object! - ADDIU A0,S0,0080 - LUI A1,8003 -0FC12726 *JAL 7F049C8C set monitor 1 -90A5A263 *LBU A1,A263 (A1) - LUI A1,8003 -90A5A263 *LBU A1,A263 (A1) -0FC12726 *JAL 7F049C8C set monitor 2 - ADDIU A0,S0,00F4 - LUI A1,8003 -90A5A263 *LBU A1,A263 (A1) -0FC12726 *JAL 7F049C8C set monitor 3 - ADDIU A0,S0,0168 - LUI A1,8003 -90A5A263 *LBU A1,A263 (A1) -0FC12726 *JAL 7F049C8C set monitor 4 - ADDIU A0,S0,01DC - BEQ R0,R0,7F04E6CC - NOP - - -Also, must find all other animation-related stuff - -Also also, must rewrite all ani blocks. In theory, can super-minimize the big bunker one through the new 'rand'. Subroutines can use 'jump and set'. Only one does that? - -MUST SET OFFSET THINGY TO LH, NOT LHU \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/reduced monitor commands b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/reduced monitor commands deleted file mode 100644 index e98a3cb..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/reduced monitor commands and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/wallscreens.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/wallscreens.txt deleted file mode 100644 index 12b23a8..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0A 0B Monitors/revised monitor animations/wallscreens.txt +++ /dev/null @@ -1,118 +0,0 @@ -animated wallscreen presets -animation values -00 beta bond - scrolling -01 desktops, sattelite - scrolling -02 10 screens... earths, galaxies, targetting, shuttles -03 3 wave patterns -04 sine wave pattern -05 scrolling green text (up) -06 scrolling dark red text (down) -07 scrolling dark green text (down) -08 red bar graph (increment) -09 blue bar graph (increment) -0A green bar graph (decrement) -0B radar display -0C spinning cube -0D 3 screens... location, weapon armed, severnaya -0E red target in center of bunker display -0F 7 screens... sattelite, targetting, orbit, telemetric -10 green global map - scrolling -11 karl yelling -12 skateboard -13 police guy -14 N/A -15 scrolling green text (up) -16 - 2D same set as #2/#F, with all possible techniques used -(2e, 2f used on pushbuttons) -2E red brightening screen -2F green brightening screen -30 grey solid screen -31 red solid screen -32 green solid screen -33 black solid screen - -individual screen images -(from global uncompressed image bank in ROM) - -00 - Bond Silhouette -01 - NOKAYOH -02 - BENOH APM3A -03 - TAPI3T -04 - C383PHAEA -05 - NOPATYAPRET -06 - White Emblem -07 - Slanted Earth View -08 - Jewish Star Screen -09 - Hot Green/Orange Planet -0A - Asteroid With Lines -0B - Blue Computer Screen -0C - Wheels and Squares of colour -0D - Satellite Above Planet -0E - Shuttle Info and Pic -0F - Computer Windows -10 - White 3D Box -11 - Shuttle Slanted Blasting Off -12 - Shuttle Blasting Off -13 - Earth On Whole Screen -14 - Earth On Whole Screen -15 - Galaxy With Star -16 - Galaxy With Star -17 - Saturn -18 - Earth Great Lakes View -19 - Crosshair On Earth -1A - Galaxy -1B - Fizzled Screen -1C - Radio Wave (Squiggle) -1D - Green Text -1E - Bar Graph -1F - Squares Around Larger Squares -20 - Russian With Hat (From Surface 2 If You Press Computer) -21 - Russian With Hat Arm Up -22 - Russian With Hat Arm Up More -23 - Russian With Hat Arm Up More -24 - Silhouette With SkateBoard (From Bunker 2 In First Room After Cells) -25 - Silhouette With SkateBoard Moving -26 - Silhouette With SkateBoard Moving More -27 - Silhouette With SkateBoard Moving More -28 - Person Talking (From Bunker 2 In First Room After Cells) -29 - Person Talking With Mouth Open -2A - Person Talking With Mouth Open More -2B - Person Talking With Mouth Closed -2C - World Map From Large Screens -2D - 3D Cube -2E - 3D Cube Other Direction -2F - 3D Cube Other Direction -30 - White Flag With Black Piece -31 - Sink? -32 - Sky? -33 - Dots? -34 - Blue? -35 - Copier From Folder Screen! -36 - Eraser From Folder Screen! -37 - SELECT FILE -38 - A Check (After Completing An Agent Level, The Red Check) -39 - An X -3A - Opal-Shaped Dot -3B - ? (Looks like Texture of Exploding Cans) -3C - Bond Multi Image Piece -3D - Bond Multi Image Piece -3E - Bond Multi Image Piece -3F - Bond Multi Image Piece -40 - Beta Bond Multi Image Piece -41 - Beta Bond Multi Image Piece -42 - Beta Bond Multi Image Piece -43 - Beta Bond Multi Image Piece -44 - Beta Bond 2Multi Image Piece -45 - Beta Bond 2Multi Image Piece -46 - Beta Bond 2Multi Image Piece -47 - Beta Bond 2Multi Image Piece -48 - Beta Bond 3Multi Image Piece -49 - Beta Bond 3Multi Image Piece -4A - Beta Bond 3Multi Image Piece -4B - Beta Bond 3Multi Image Piece -4C - Boris Multi Piece -4D - Boris Multi Piece -4E - Boris Multi Piece -4F - Boris Multi Piece -50 - Ourumov Multi Picture -51 - ? \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0D Autoturrets/autoguns.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0D Autoturrets/autoguns.txt deleted file mode 100644 index b2659db..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/0D Autoturrets/autoguns.txt +++ /dev/null @@ -1,153 +0,0 @@ -Starting trace from Control: -autoguns at: - 801D4FD8 - 801D50C0 - 801D51A8 - 801D5280 - 801D5358 - 801D5430 - 801D5508 - -7F03CA30 - reads first byte from 8006 entry. Depending on type, will use one of several routines... -7F03CA94 reads distance thingy off first autoturret at all times - -7F046C6C - handles autoturret activation - @ 7F046C7C, grabs distance to current player 7F089798: V0=p->cur.BONDposdata (8006) - -+_+ - -Will need to make a distance tester -give it pointer A0,A1; assumes using a 8006, so +8,+C,+10 at each is x,y,z -7F0796C0 AE1F0 F0=distance between two positions - accepts: A0=p->xyz, A1=p->xyz - fries: F12,F14 -C4800008 LWC1 F0,0008 (A0) -C4AE0008 LWC1 F14,0008 (A1) -460E0001 SUB.S F0,F0,F14 -46000302 MUL.S F12,F0,F0 ;F12=(dif.x)^2 -C480000C LWC1 F0,000C (A0) -C4AE000C LWC1 F14,000C (A1) -460E0001 SUB.S F0,F0,F14 -46000002 MUL.S F0,F0,F0 ;F0=(dif.y)^2 -46006300 ADD.S F12,F12,F0 ;F12+=y -C4800010 LWC1 F0,0010 (A0) -C4AE0010 LWC1 F14,0010 (A1) -460E0001 SUB.S F0,F0,F14 -46000002 MUL.S F0,F0,F0 ;F0=(dif.z)^2 -46006300 ADD.S F12,F12,F0 ;F12=(dif.x)^2 + (dif.y)^2 + (dif.z)^2 -03E00008 JR RA -46006004 SQRT.S F0,F12 - -Also, this will retieve player A0's 8006 position data, but only when alive -7F079720 AE250 V0=p->player A0's BONDpos if alive or NULL - fries: V1 (A0 retained) -00041080 SLL V0,A0,0x2 -3C038008 LUI V1,8008 -00431821 ADDU V1,V1,V0 -8C629EE0 LW V0,9EE0 (V1) -10400004 BEQ V0,R0,+return -00000000 NOP -8C430424 LW V1,0424 (V0) ;dying register -8C4200A8 LW V0,00A8 (V0) -54600001 BNEL V1,R0,+1 ;if dead, NULL pointer... -00001025 OR V0,R0,R0 -03E00008 JR RA -00000000 NOP -//7F079750 AE280 - -So, seach each player's positions, returning V0=8006 for closest -Use this as basis for all autogun testing. Camera too? Not sure... - -7F079658 AE188 Find closest player to object A0's position - accepts: A0=p->obj.posdata (8006) - returns: V0=p->closest BONDpos (8006) - fries: V1,A0,A1,A2,F0,F12,F14 -27BDFFD0 ADDIU SP,SP,FFD0 -AFBF002C SW RA,002C (SP) -AFA00028 SW R0,0028 (SP) ;SP+28= p->closest BONDpos -3C067F80 LUI A2,7F80 -AFA60024 SW A2,0024 (SP) ;SP+24= closest distance -AFA40020 SW A0,0020 (SP) ;SP+20= p->obj.pos (8006) -24060004 ADDIU A2,R0,0004 ;A0=4 do this backward -//grab player A0's 8006 -24C6FFFF ADDIU A2,A2,FFFF ;A0-- 3-0 -0FC1E5C8 JAL 7F079720 ;*BONDpos -00062025 OR A0,A2,R0 -1040000A BEQ V0,R0,+next ;branch if no data/not loaded -//compute distance and compare -8FA40020 LW A0,0020 (SP) ;A0=obj.pos -0FC1E5B0 JAL 7F0796C0 ;*distance -00022825 OR A1,V0,R0 ;A1=BONDpos -C7AC0024 LWC1 F12,0024 (SP) -460C003E C.LE.S F0,F12 -00000000 NOP -45000003 BC1F +next ;branch if new distance greater -00000000 NOP -AFA50028 SW A1,0028 (SP) ;save winning BONDpos pointer -E7A00024 SWC1 F0,0024 (SP) ;save winning distance -//loop for each player -1CC0FFF1 BGTZ A2,-loopus ;loop for each player -//return -8FA20028 LW V0,0028 (SP) ;V0=p->closest BONDpos -8FBF002C LW RA,002C (SP) -03E00008 JR RA -27BD0030 ADDIU SP,SP,0030 - - -link it in! -//7F046C7C: 7B7AC -8E700004 -LW S0,0004 (S3) ;S0=p->object data (S3=p->obj.posdata (8006)) -0FC1E596 *JAL 7F079658 [changed from 0FC225E6] -00132025 *OR A0,S3,R0 ;A0=S3: p->obj.pos -AFA004AC -SW R0,04AC (SP) -AFA004A8 -SW R0,04A8 (SP) -AFA004A4 -SW R0,04A4 (SP) -8E23000C -LW V1,000C (S1) ;V1=obj.data+C: second bitflag field -1040000A *BEQ V0,R0,7F046CC4 - *NOP -00409025 -OR S2,V0,R0 ;S2=V0: p->cur.BONDposdata -04610054 *BGEZ V1,7F046DF8 ;branch if "disable player detection" not set 80000000 -00037840 SLL T7,V1,0x1 -05E10005 *BGEZ T7,7F046CC4 ;branch if "?" not set 40000000 -C6080090 LWC1 F8,0090 (S0) -C604009C LWC1 F4,009C (S0) -E6080084 SWC1 F8,0084 (S0) ;data+84=F8: swap rotation -E6040098 -SWC1 F4,0098 (S0) ;data+98=F4: swap elevation -10000035 -BEQ R0,R0,7F046D98 -//7F046CC4: -C6020084 LWC1 F2,0084 (S0) ;F2=data+84: rotation - - -+_+ - -GLITCH! -So, the thing continues to fire at dead players, and if you get within range the damage is automatically assigned to you instead. -Probably just link in a pulse detector... - -+_+ - -last fix - should set respawning items to abolish 10000000 so they reactivate -//7F03C864: 71394 -92080002 LBU T0,0002 (S0) ;T0=obj.data+2: state -31090008 ANDI T1,T0,0008 ;T1=state&08: repair collisions flag -8E0A0008 *LW T2,0008 (S0) ;T2=obj.data+8: obj.flags1 -51200002 *BEQL T1,R0,+2 ;branch if 0x8 not set -314AFEFF *ANDI T2,T2,FEFF ;T3= T2 & FFFFFEFF: unset collisions -354A0100 ORI T2,T2,0100 ;T3= set collisions -3C0BEFFF *LUI T3,EFFF ;T3= T3 & EFFFFFFF: reactivate special features -256BFFFF *ADDIU T3,T3,FFFF -014B5024 *AND T2,T2,T3 -AE0A0008 *SW T2,0008 (S0) ;obj.flags1 |= 00000100: collisions... -//7F03C888: 713B8 -00000000 *NOP -00000000 *NOP -//7F03C894: 713C4 -00000000 *NOP -E6000070 SWC1 F0,0070 (S0) ;obj.data+70= 0.0: cur.damage? -8E040014 LW A0,0014 (S0) -310FFF7F *ANDI T7,T0,FF7F ;T7=state & FF7F: unmask "dead" -0FC1437A JAL 7F050DE8 -A20F0002 SB T7,0002 (S0) ;obj.state ^ dead - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/2D Tank/Tank Revision.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/2D Tank/Tank Revision.txt deleted file mode 100644 index a341b2b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/2D Tank/Tank Revision.txt +++ /dev/null @@ -1,1236 +0,0 @@ --want these three feature added: -1) set weapon to be added to inventory when entered, drawn from object -2) set vehicle sound when running -3) set player ID code for multiplayer (aegh...) - - If MP weapon set is revised could tack the MP weapon to draw up. That would set ammo and weapon with one byte. Tank should be 1E in list - firing effect test should be one byte or one bit, not short - upper halfword of firing effect slot will be sound when running - Player # or ID replaces in-tank value. Each tank must be processed seperately - Tank's SE could be: - 003E tank in motion - 0042 ignition/engine idle - -available slots for data in tank object: - B4 4 - B8 4 - BC 4 - C0 4 - C4 2 - -Also, kill a bug present in GE! - When the tank steals your ammo, it doesn't take it from the curent clip - So, by exitting the tank, bringing up the weapon, then reentering, you get an additional round - the one from the clip! - Fix this by swapping weapons first, +then+ nop the ammo stock - -+_+ - -0xC6 4 !0 triggers firing effect -0xD8 4 ammo total added to inventory at stage load - -Tank is offset from current position, not physically moved (similiar to animated objects) - -7F07CE78 pulls 80036448 !0 when player in tank - -other instances of 7F07CE78: -7F080DFC -7F0828C4 handles turret when in tank and right weapon = 20 -7F082DD4 tank motion -7F0836B4 tank skips to 7F08383C - 7F083850 tank skips to 7F083B40 if BONDdata+104 != 0 -7F083AFC handles vertical limit on turret - tests if 800799B8=2. (turret? aimer?) - If so, tests if vertical rot. < -20. sets the value to -20 if it is -7F083C54 -7F0847BC tank skips to 7F08497C - 7F08497C if not tank skips to 7F0851D8 rotation? -7F07D9F0 triggers a series of object-related tests dealing with tank when occupied -7F07CF8C start of routine that also tests for tank - maybe copies position etc? -7F085318 non-tank jumps to 7F085B48, which is fairly close to forward motion routines - 800799B8=0 7F08533C-7F085630 - 800799B8=1 7F08563C-7F08569C - 800799B8=2 7F0856A0 TANK IN MOTION! - 7F0859E0: - --_- - -Reading firing effect trigger -//7F049190: -LW A1,0020 (V1) -JAL 7F06C79C ;returns V0=5th entry in proportion data -OR A0,S4,R0 -//7F049198: read at all times? -LW T0,00C4 (S1) ;T0=word at +0xC4 in object (S1): firing effect register -SH T0,0000 (V0) ;V0=[801D9DF8]: object instance entry -LW T3,0008 (S4) ;T3=[801D1070]+8: p->object load line (8003 address) -LW V1,0008 (T3) ;V1=obj load line+8: p->object binary in rdram -LW A1,0020 (V1) ;A1=object offset #8: turret controller! -BEQL A1,R0,7F0491C8 ;skip if there isn't a turret! -LW T7,0008 (S4) ;T7=[801D1070]+8: p->object load line (8003 address) -//7F0491B8: -JAL 7F06C79C -OR A0,S4,R0 ;A0=[801D1070]: object block controller -SW R0,0000 (V0) ;clear firing effect saved from above -LW T7,0008 (S4) ;T7=[801D1070]+8: p->object load line (8003 address) -//7F0491C8: - -writes it back regularly here: -//7F0864A8: -OR A0,R0,R0 ;A0=0 test right hand -... -//7F0864C8: -JAL 7F05D9D0 ;returns V0=right hand weapon -SW T8,0130 (SP) -XORI V1,V0,0020 ;weapon^20 V1=0 if tank in use -SLTIU A0,V1,0001 ;A0=1 if tank in use -BEQL A0,R0,7F0864F0 ;skip if not tank. They could have tested equality... -SW A0,00C4 (S0) -//7F0864E0: -JAL 7F05DC88 ;returns V0=firing status for hand A0 -OR A0,R0,R0 ;A0=right hand -SLTU A0,R0,V0 ;A0=1 if V0!=0 -SW A0,00C4 (S0) ;save firing effect register -//7F0864EC: continues with position-type stuff. - - -7F05DC88 Returns V0=current player's weapon firing status - accepts: A0=arm right=0:left=1 - fries: T6,T7,T8 -SLL T7,A0,0x3 -SUBU T7,T7,A0 -SLL T7,T7,0x2 -ADDU T7,T7,A0 -LUI T6,8008 -LW T6,A0B0 (T6) ;T6=8007A0B0 p->current BONDdata -SLL T7,T7,0x2 -ADDU T7,T7,A0 -SLL T7,T7,0x3 ;T7=A0*0x3A8 -ADDU T8,T6,T7 -JR RA -LB V0,087C (T8) ;V0=current gun's firing status - -=_= - -Ammo total: - This gets saved to the player when entering the vehicle and saved back to the object when exitting -This routine is patched into a player's B-button handler -//7F0829D0: bail from the tank; copies ammo back to tank object -LW T3,01B0 (SP) -BEQ T3,R0,7F082C2C ;skip tank stuff if T3 isn't set. T3 is the B-button identifier -LUI T5,8003 -LW T5,6448 (T5) ;T5=80036448: tank occupied flag -ADDIU AT,R0,0001 -LUI T4,8003 -BNE T5,AT,7F082AA4 ;branch if tank flag not set - enter it, not exit! -LUI V0,8003 -LW T4,6450 (T4) ;T4=80036450: p->obj position entry (8006 table) -ADDIU A0,R0,0020 ;A0=20 tank -LW T8,0004 (T4) ;T8=obj pos entry+4: p->object f/ setup -JAL 7F069450 ;ret V0= cur. amount of tank ammo in inventory -SW T8,00F4 (SP) ;SP+F4=p->object -//7F082A04: fry player's tank ammo -LW T6,00F4 (SP) ;T6=p->object -ADDIU A0,R0,0020 ;A0=20 tank -OR A1,R0,R0 ;A1=0 cur ammo+0 -JAL 7F069484 ;Add 0 tank ammo to player's inventory -SW V0,00D8 (T6) ;save amount of tank ammo to tank's register -//7F082A18: fry player's tank item -JAL 7F08C61C ;probably removes tank item from inventory... -ADDIU A0,R0,0020 ;A0=tank item -//7F082A20: if tank, determine ammo on the clip -JAL 7F05D9D0 ;ret V0=right hand weapon -OR A0,R0,R0 ;A0=0 right hand -ADDIU AT,R0,0020 -BNEL V0,AT,7F082A54 ;branch if not tank -LW T2,00F4 (SP) -JAL 7F069344 ;ret V0=right hand's clip ammo -OR A0,R0,R0 ;A0=right hand -//7F082A3C: add in ammo on clip, then cycle weapon -LW V1,00F4 (SP) ;V1=p->object -LW T7,00D8 (V1) ;T7=tank ammo register -ADDU T9,T7,V0 ;ammo + clip -JAL 7F05D800 ;cycle weapon? -SW T9,00D8 (V1) ;save new total -//7F082A50: kill the firing effect -LW T2,00F4 (SP) ;T2=p->object -LUI AT,8003 -OR V0,R0,R0 -SW R0,00C4 (T2) ;0->tank+C4: FIRING EFFECT OFF -SW R0,6448 (AT) ;0->80036448: tank not occupied -LW T3,0000 (S0) -ADDIU V1,R0,000C -SWC1 F20,016C (T3) -LW T5,0000 (S0) -SWC1 F20,0174 (T5) -LW T4,0000 (S0) -SWC1 F20,014C (T4) -//7F082A80: -LW T8,0000 (S0) -ADDU T6,T8,V0 -ADDIU V0,V0,0004 -BNE V0,V1,7F082A80 -SWC1 F20,0180 (T6) -LW T9,0000 (S0) -ADDIU T7,R0,0002 -BEQ R0,R0,7F082C2C -SW T7,009C (T9) - -//7F082AA4 below are called when shoving a player into the tank! -LW V0,6450 (V0) ;V0=p->current obj being parsed: tank -BEQL V0,R0,7F082C24 ;branch on a NULL activation pointer -LW T5,0000 (S0) -LBU T2,0000 (V0) ;V0=8006+0: 1 when active? -ADDIU AT,R0,0001 -BNEL T2,AT,7F082C24 ;branch if it isn't whatever they're testing for... -LW T5,0000 (S0) -LW A1,0004 (V0) ;A1=8006+4: p->tank object -ADDIU AT,R0,002D ;AT=2D: tank object type -LUI T5,8003 -LBU T3,0003 (A1) ;T3=obj+3: object type -BNEL T3,AT,7F082C24 ;skip if object not tank (2D) -LW T5,0000 (S0) -LW T5,6480 (T5) ;T5=80036480: 1 when you are standing on the turret -//7F082ADC: add tank to inventory -ADDIU A0,R0,0020 ;A0=20 tank -BEQL T5,R0,7F082C24 ;skip if 80036480=0. not sure use -LW T5,0000 (S0) -JAL 7F08C488 ;add item A0 to inventory -SW A1,00EC (SP) ;SP+EC= p->tank -//7F082AF0: add tank ammo as per tank object -LW V1,00EC (SP) ;V1=p->tank -ADDIU A0,R0,0020 ;A0=20 weapon=tank -JAL 7F069484 ;add A1 ammo of type A0=tank -LW A1,00D8 (V1) ;A1=tank ammo register -//7F082B00: -LW V1,00EC (SP) -LUI A0,8003 -ADDIU A0,A0,646C -LWC1 F6,00C8 (V1) -SW R0,00D8 (V1) ;set tank's slot to 0, since you have it's ammo stock! -... -//7F082B34: -ADDIU T4,R0,0001 -ADDIU T9,R0,0001 -... -//7F082B90: -LUI AT,8003 -SW T4,6448 (AT) ;1->tank register note that T9 still=1 - - - -7F069450 returns V0=ammo total for weapon A0 in current player's inventory - accepts: A0=weapon type - fries: V1,T6,T7,T8,T9 -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F05C8B4 ;ret V0=handle to weapon A0's weapon data -NOP -LW T7,001C (V0) ;T7=ammo type for weapon -LUI T6,8008 -LW T6,A0B0 (T6) ;T6=8007A0B0: p->current BONDdata -LW RA,0014 (SP) -SLL T8,T7,0x2 ;T8=T7->offset -ADDU T9,T6,T8 -LW V0,1130 (T9) ;V0=BONDdata+1130+offset: ammo of type -JR RA -ADDIU SP,SP,0018 - -%_% - -Movement rate: -okay, below it turns out has little to do with this. Those all have to do with the intensity of SE when tank is in motion -Actual tank motion modifiers are applied to BONDdata directly via: - 7F0830D4- tank: breaks only in motion - 7F085B40- tank: always breaks - -//7F082DD0: detect tank -LUI T4,8003 -LW T4,6448 (T4) -ADDIU AT,R0,0001 -LW T6,0194 (SP) -BNE T4,AT,7F0830FC ;branch if player is not in tank -LUI V0,8003 -//7F082DE8: handle player-driven tank motion -... -//70F82F7C: -BC1FL 7F082F90 -MTC1 AT,F6 -BEQ R0,R0,7F082FAC -MOV.S F0,F2 -//7F082F8C: -MTC1 AT,F6 ;F6=-1.0 -LUI AT,BF80 -C.LT.S F0,F6 -NOP -BC1FL 7F082FB0 ;if F0<-1, set it to -1 -LUI AT,4170 -MTC1 AT,F0 ;F0=-1.0 -NOP -LUI AT,4170 -//7F082FB0: -MTC1 AT,F16 ;F16=15.0 max speed? -LUI V1,8003 -ADDIU V1,V1,6490 -MUL.S F12,F0,F16 ;F12=F0*15.0 -LW V0,0000 (V1) ;V0=80036490: -LUI AT,3F00 -BLEZ V0,7F082FEC -MOV.S F2,F12 -//7F082FD0: -MTC1 AT,F8 ;F8=1.0 -LW T4,8374 (T4) ;T4=80048374: timer tied to FPS control!? -LUI AT,4080 -MTC1 AT,F14 -SUBU T8,V0,T4 -MUL.S F2,F12,F8 -SW T8,0000 (V1) -//7F082FEC -LWC1 F0,0174 (T0) ;F0=speed -C.EQ.S F2,F0 -NOP -BC1T 7F0830F4 ;do nothing if speed=max speed -NOP -C.LT.S F0,F2 -LUI AT,3E80 -BC1FL 7F083080 ;branch if speed >= max speed? -C.LT.S F2,F0 -//7F083010: tank accel -SUB.S F4,F2,F0 ;!difference! F4=MAX-speed! -MTC1 AT,F18 ;F18=0.25 -LUI AT,3F00 -MTC1 AT,F8 ;F8=0.5 acceleration step -MUL.S F10,F4,F18 ;F10=F4/4 -LUI AT,4120 -DIV.S F6,F10,F16 ;F6=F10/F16 [F16=15.0] -MTC1 AT,F10 ;!difference! F10=10 -LUI AT,4270 -ADD.S F4,F6,F8 ;F4=F8+0.5 -MTC1 AT,F8 ;F8=60 -LUI AT,8005 -MUL.S F18,F4,F14 ;F18=F4*F14 [F14=1.0] -LWC1 F4,8378 (AT) ;F4=80048378: 1.0 clock cycle rate counter maybe? multiplier is used in many different animation applications... -MUL.S F6,F18,F10 ;F6=F18*10 -DIV.S F12,F6,F8 ;F12=F6/60 -MUL.S F18,F12,F4 ;F18=F12*1.0 -ADD.S F10,F0,F18 ;F10=speed+F18 -SWC1 F10,0174 (T0) ;F10->player's speed -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F6,0174 (T0) ;F6=speed -C.LT.S F2,F6 -NOP -BC1F 7F0830F4 ;if max speed < speed, set speed to max -NOP -BEQ R0,R0,7F0830F4 -SWC1 F2,0174 (T0) ;max speed -> player's speed -//7F08307C: tank decel? -C.LT.S F2,F0 -LUI AT,3E80 -BC1F 7F0830F4 ;branch if max >= speed (F0=speed) -NOP -SUB.S F8,F0,F2 ;F8=speed-F2 -MTC1 AT,F4 ;F4=0.25 -LUI AT,3F00 -MTC1 AT,F6 ;F6=0.5 decelleration rate -MUL.S F18,F8,F4 ;F18=F8/4 -LUI AT,C120 -DIV.S F10,F18,F16 ;F10=F18/F16 [F16=15.0] -MTC1 AT,F18 ;F18=-10.0 -LUI AT,4270 -ADD.S F8,F10,F6 ;F8=F10+0.5 -MTC1 AT,F6 ;F6=60.0 -LUI AT,8005 -MUL.S F4,F8,F14 ;F4=F8*F14 [F14=1.0] -LWC1 F8,8378 (AT) ;F8=80048378: 1.0 clock cycle rate counter maybe? multiplier is used in many different animation applications... -MUL.S F10,F4,F18 ;F10=F4 * -10.0 -DIV.S F12,F10,F6 ;F12=F10/60.0 -MUL.S F4,F12,F8 ;F4=F12*1.0 -ADD.S F18,F0,F4 ;F18=speed + ((F8/60+0.5)*-1/6) -SWC1 F18,0174 (T0) ;F18->player's speed -LW T0,0000 (S0) ;T0=p->BONDdata -LWC1 F10,0174 (T0) ;F10=speed -C.LT.S F10,F2 -NOP -BC1F 7F0830F4 ;if speed < max, set it to max! -NOP -SWC1 F2,0174 (T0) ;F2->player's speed -//7F0830F4: -BEQ R0,R0,7F083394 -LW T0,0000 (S0) ;T0=p->BONDdata -//7F0830FC: handle normal player motion - -vertical! -LW T4,6448 (T4) -BNEL T4,AT,7F083B40 -LW T6,01A4 (SP) -//7F083B08: test for movement -LW T8,99B8 (T8) ;T8=800799B8: -ADDIU AT,R0,0002 -BNEL T8,AT,7F083B40 -LW T6,01A4 (SP) -//7F083B18: test y sight elevation versus cutoff -LW T0,0000 (S0) -LUI AT,C1A0 -MTC1 AT,F0 ;F0=-20: limit on downward rotation -LWC1 F8,0158 (T0) ;F8=vertical rotation -C.LT.S F8,F0 -NOP -BC1FL 7F083B40 ;if vert. rot. < limit, set to limit -LW T6,01A4 (SP) -SWC1 F0,0158 (T0) ;limit->vertical rotation -LW T6,01A4 (SP) -//7F083B40: both routines continue forth... -incidentally, tank itself can't really get over 41AE59AE either... - -lateral correction for aim! -//7F083C50: test tank -LUI T2,8003 -LW T2,6448 (T2) ;T2=80036448: tank flag -ADDIU AT,R0,0001 -LUI T3,8008 -BNEL T2,AT,7F083D90 ;branch if not tank -LW T6,014C (SP) -//7F083C68: test motion -LW T3,99B8 (T3) -ADDIU AT,R0,0002 -LW T5,01A4 (SP) -BNEL T3,AT,7F083D88 -LW T8,0000 (S0) -//7F083C7C: -BEQ T5,R0,7F083CA0 -MOV.S F2,F20 -LW T4,0000 (S0) -LUI AT,8005 -LWC1 F10,514C (AT) ;F10=8005514C: -LWC1 F18,014C (T4) -MUL.S F2,F18,F10 -BEQ R0,R0,7F083D00 -NOP -//7F083CA0: -LWC1 F4,017C (SP) -LWC1 F8,0178 (SP) -C.LT.S F20,F4 -NOP -BC1FL 7F083CD8 -C.LT.S F20,F8 -JAL 7F080228 -MOV.S F12,F14 -LUI AT,8005 -LWC1 F6,5150 (AT) -MUL.S F2,F0,F6 -BEQ R0,R0,7F083D00 -NOP -//7F083CD4: -C.LT.S F20,F8 -LUI AT,BF80 -BC1F 7F083D00 -NOP -MTC1 AF,F12 -JAL 7F080228 -NOP -LUI AT,8005 -LWC1 F18,5154 (AT) -MUL.S F2,F0,F18 -NOP -//7F083D00: -LUI V1,8005 -LW V1,8374 (V1) ;V1=80048374: -OR V0,R0,R0 -LW T0,0000 (S0) -BLEZ V1,7F083D64 -LUI AT,8005 -LUI A0,8003 -ADDIU A0,A0,6460 ;A0=80036460 -... -... -//7F083D64: -LUI A0,8003 -ADDIU A0,A0,6460 -LUI AT,8005 -LWC1 F18,515C (AT) ;F18=8005515C: -LWC1 F8,0000 (A0) ;F8=80036460: -MUL.S F10,F8,F18 -BEQ R0,R0,7F083D8C -SWC1 F10,014C (T0) ;F10->lat. rot. correction -//7F083D84: -LW T8,0000 (S0) ;T8=p->BONDdata -SWC1 F20,014C (T8) ;F20->lat. rot. correction degree -LW T6,014C (SP) ;T6=lat. rot. correction -//7F083D90: both routines continue... - -7F08497C starts off rotation, maybe? seems a long way off from this stuff here... - -SERIOUSLY, THIS IS STUPID. who bloody well cares? -//7F084E58: breaks when you turn left -BEQ R0,R0,7F084E80 -SUB.S F2,F2,F4 - -7F084E64: this big segment of code... -//7F08550E0: standard rotation -ADD.S F16,F18,F0 -SWC1 F16,0000 (V1) -LUI AT,43B4 -MTC1 AT,F14 -LUI V1,8003 -ADDIU V1,V1,647C -LUI AT,8005 -LWC1 F4,51D0 (AT) -LWC1 F6,0000 (V1) -LW T0,0000 (S1) -LUI AT,4060 -MUL.S F2,F6,F4 -MTC1 AT,F8 -LWC1 F10,014C (T0) -LUI AT,8005 -LWC1 F4,51D4 (AT) -MUL.S F6,F10,F8 -LUI AT,4080 -MTC1 AT,F8 -LUI AT,8003 -MUL.S F10,F6,F4 -LWC1 F4,6464 (AT) -LUI AT,4080 -MUL.S F6,F10,F8 -ADD.S F10,F4,F12 -MTC1 AT,F4 -LUI AT,8005 -ADD.S F8,F10,F6 -MUL.S F10,F2,F4 -ADD.S F6,F8,F10 -LWC1 F8,51D8 (AT) -MUL.S F4,F6,F14 -DIV.S F10,F4,F8 -//7F085164: saves rotation when in tank -SWC1 F10,0148 (T0) - - -first, how normal movement rates are established: -//7F085DC8 trips during normal movement, not tank! -fast motion system for normal movement -//7F085E90: determine player's speed -JAL 7F091018 ;returns V0=fast motion flag -SW T4,0200 (SP) -BEQL V0,R0,7F085F20 ;branch if not set -LW T9,0000 (S1) ;T9=p->BONDdata (S1=8007A0B0) -//7F085EA0: fast motion -LW T0,0000 (S1) ;T0=p->BONDdata -LUI AT,4120 -MTC1 AT,F0 ;F0=10.0 probably rate of motion -LWC1 F4,0498 (T0) ;F4=BONDdata+498: ?-used by manpos -LWC1 F10,0174 (T0) ;F10=BONDdata+174 speed -LWC1 F6,04A0 (T0) ;F6=BONDdata+4A0: ?-used by manpos -LUI AT,8005 -MUL.S F8,F4,F10 -LWC1 F4,016C (T0) ;F4=BONDdata+16C 1.0 if strafing (-left:+right) -LWC1 F14,8378 (AT) ;F14=80048378: 1.0 100% rate increase? -SUB.S F6,F8,F10 -LWC1 F10,03AC (SP) -MUL.S F4,F6,F14 -NOP -MUL.S F8,F4,F0 -ADD.S F6,F10,F8 -SWC1 F6,03AC (SP) -LWC1 F10,0174 (T0) -LWC1 F4,04A0 (T0) -LWC1 F6,0498 (T0) -MUL.S F8,F4,F10 -LWC1 F4,016C (T0) -MUL.S F10,F6,F4 -ADD.S F6,F8,F10 -LWC1 F10,03B4 (SP) -MUL.S F4,F6,F14 -NOP -MUL.S F8,F4,F0 -ADD.S F6,F10,F8 -SWC1 F6,03B4 (SP) -LW T9,0000 (S1) -//7F085F20: both speed functions... - -3F9DFD13 walking top speed? -3F7CC8xx gait messes this up... - -415B6Dxx may be tank top speed... -C15B6Dxx in reverse -nicely, this ties into the SE routines below -//7F0856A0: tank in motion -LW T0,0000 (S1) ;T0=p->BONDdata -LUI AT,4170 -MTC1 AT,F8 ;F8=15.0 rate at which engine volume increases -LWC1 F10,0174 (T0) ;F10=BONDdata+174 speed -LUI AT,8005 -LWC1 F4,51E8 (AT) ;F4=800551E8: 0.3 -DIV.S F0,F10,F8 ;F0=speed/15 rate engine volume increases -LWC1 F6,014C (T0) ;F10=BONDdata+14C lateral rot. degree from center -DIV.S F2,F6,F4 ;F2=lat rot. cor. / 0.3 rate engine vol. inc. while rotating -C.LT.S F0,F20 -NOP -BC1FL 7F0856DC -C.LT.S F2,F20 -NEG.S F0,F0 -C.LT.S F2,F20 -//7F0856DC: -NOP -BC1FL 7F0856F0 -C.LT.S F0,F2 -NEG.S F2,F2 -C.LT.S F0,F2 -//7F0856F0: -MOV.S F12,F0 -BC1FL 7F085704 -C.LT.S F20,F12 -MOV.S F12,F2 -C.LT.S F20,F12 -//7F085704: -NOP -BC1F 7F085818 -LUI AT,3F80 -MTC1 AT,F10 ;F10=1.0 -LUI S0,8003 -ADDIU S0,S0,6458 ;S0=80036458: -C.LT.S F10,F12 -LUI AT,3F80 -BC1FL 7F085738 -LW T9,0004 (S0) -MTC1 AT,F12 ;F12=1.0 -NOP -LW T9,0004 (S0) -//7F085738: if not set, sound the motion SE -BNEL T9,R0,7F085774 -LW A0,0004 (S0) -JAL 7F0BFC04 -SWC1 F12,0244 (SP) -BNEZ V0,7F085770 -LWC1 F12,0244 (SP) -LUI A0,8006 -LUI A2,8003 -ADDIU A2,A2,645C ;A2=8003645C: -LW A0,3720 (A0) ;A0=80063720: -ADDIU A1,R0,003E ;A1=03E: SE -JAL 70008E08 ;set SE 03E: tank in motion -SWC1 F12,0244 (SP) -LWC1 F12,0244 (SP) -//7F085770: play with volume of SE -LW A0,0004 (S0) ;A0=p->can't remember... -LUI AT,8005 -ADDIU A1,R0,0008 ;A1=8 -BEQL A0,R0,7F085850 -LW T6,0000 (S0) -//7F085784: -LWC1 F0,51EC (AT) ;F0=800551EC: intensity rate for motion SE vs speed -ADDIU A2,R0,7FFF ;default sound values for SE regs 4 & C -LUI AT,8005 -C.LT.S F12,F0 -NOP -BC1F 7F0857C0 -NOP -LUI AT,8005 -LWC1 F8,51F0 (AT) ;F8=800551F0: -MUL.S F6,F12,F8 ;F6=intensity of motion SE. smaller F12=louder -DIV.S F4,F6,F0 -TRUNC.W.S F10,F4 -MFC1 A2,F10 -BEQ R0,R0,7F085808 -NOP -//7F0857C0: -LWC1 F8,51F4 (AT) ;F8=800551F4: -LUI AT,8005 -C.LT.S F12,F8 -NOP -BC1F 7F085808 -NOP -SUB.S F6,F12,F0 -LWC1 F4,51F8 (AT) ;F4=800551F8: -LUI AT,3F40 -MTC1 AT,F8 -MUL.S F10,F6,F4 -LUI AT,8005 -LWC1 F4,51FC (AT) ;F4=800551FC: -DIV.S F6,F10,F8 -ADD.S F10,F6,F4 -TRUNC.W.S F8,F10 -MFC1 A2,F8 -NOP -//7F085808: -JAL 70009184 ;accepts A0=p->source, A1=slot?[8], A2=volume? -SWC1 F12,0244 (SP) -BEQ R0,R0,7F08584C -LWC1 F12,0244 (SP) -//7F085818: -... -//7F08584C: - -@_@ - -Sound effect: -note: no obvious connection with tank object. SP+300 probably not absolute -need to link into the tank object and draw up SE overrides -if Tank's SE = 0, use default (BEQL SE,R0,+1, ADDIU A1,R0,00SE) - -set when you enter the tank -//7F085634: -BNE V0,AT,7F0856A0 -LUI S0,8003 -ADDIU T3,R0,0002 ;T3=2 -LUI AT,8008 -ADDIU S0,S0,6458 ;S0=80036458 sound effect data -SW T3,99B8 (AT) ;T3=800799B8: -LW T8,0000 (S0) ;T8=80036458: -BNEL T8,R0,7F08567C ;skip setting sound effect if 80036458 !=2 -LW A0,0000 (S0) ;A0=80036458: -JAL 7F0BFC04 ;V0=80048370: -NOP -//7F085660: start up tank -BNEZ V0,7F085678 ;skip setting sound if 80048370 != 0 -LUI A0,8006 -LW A0,3720 (A0) ;A0=80063720: p->SE handle? -ADDIU A1,R0,0042 ;A1=SE 042: ignition+idle -JAL 70008E08 -OR A2,S0,R0 ;A2=S0: SE data (0x18) -//7F085678: -LW A0,0000 (S0) -ADDIU A1,R0,0008 ;A1=8 -JAL 70009184 -ADDIU A2,R0,61A8 ;A2=61A8 -//7F085688: -LUI V0,8008 -ADDIU V0,V0,99B4 ;V0=800799B4 -ADDIU T4,R0,61A8 ;T4=61A8 -SW T4,0000 (V0) ;61A8->800799B4 -BEQ R0,R0,7F0859E0 -LW T0,0000 (S1) ;T0=p->cur BONDdata -//7F0856A0: tank in motion -... -//7F085750: -LUI A0,8006 -LUI A2,8003 -ADDIU A2,A2,645C -LW A0,3720 (A0) -ADDIU A1,R0,003E ;tank motion SE -JAL 70008E08 -SWC1 F12,0244 (SP) -... -//7F0857B8: -BEQ R0,R0,7F085808 -NOP -//7F0857C0: - -seperate routine, when you eject. switch SE -//7F065EA8: -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00E8 ;switch SE -JAL 70008E08 -OR A2,R0,R0 - - -otake! -known SE occurances: -SNEEZE! -LUI A0,8006 -ADDIU A1,R0,0101 -C.LT.S F0,F8 -OR A2,R0,R0 -BC1FL +8 -LW T4,0014 (S0) -JAL 70008E08 -LW A0,3720 (A0) - -electronic -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00F3 -JAL 70008E08 -OR A2,R0,R0 - -klaxon -LUI A0,8006 -LUI A2,8005 -ADDIU A2,A2,83A0 -LW A0,3720 (A0) -JAL 70008E08 -ADDIU A1,R0,00A1 - -out of ammo! -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,002B -JAL 70008E08 -OR A2,R0,R0 - -zappity laserish sound -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,005B -JAL 70008E08 -SW A2,0060 (SP) - -squish bullet noise (impact snow?) -ADDIU AT,R0,0002 -BNE A3,AT,+8 -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,004A -JAL 70008E08 -SW A2,0060 (SP) - -bullet impact glass -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0046 -JAL 70008E08 -SW V0,001C (SP) - -clip empty? switch? -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0059 -JAL 70008E08 -OR A2,R0,R0 - -switch to laser -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00F2 -JAL 70008E08 -OR A2,R0,R0 - -switch to knives -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00E9 -JAL 70008E08 -OR A2,R0,R0 - -switch to mines -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00EB -JAL 70008E08 -OR A2,R0,R0 - -switch to gun -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00E8 -JAL 70008E08 -OR A2,R0,R0 - -watch beep -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,009F -JAL 70008E08 -OR A2,R0,R0 - -watch static -LUI A0,8006 -SW T6,0B04 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00EC -JAL 70008E08 -OR A2,R0,R0 - -another watch beep -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,009F -JAL 70008E08 -OR A2,R0,R0 - -tank: run over guy -//7F0867e4: -ADDIU A1,R0,00B7 ;SCREAM -LW A0,3720 (A0) -JAL 70008E08 -OR A2,R0,R0 - -tank: crush -//7F086820: -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00D5 -JAL 70008E08 -OR A2,R0,R0 - -woosh (knife or slappers?) -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0069 -JAL 70008E08 -OR A2,R0,R0 - -object respawn sound -//7F03C8AC: 713DC -LBU T8,0003 (S0) -ADDIU AT,R0,0015 -LUI A0,8006 -BNE T8,AT,7F03C8C8 ;branch if not obj 15: body armour -ADDIU A1,R0,0052 -LWC1 F6,0080 (S0) -SWC1 F6,0084 (S0) -BNEZ S3,+6 -OR A2,R0,R0 -JAL 70008E08 -LW A0,3720 (A0) - -watch beep -LUI A0,8006 -ADDIU A1,R0,009F -BEQ T6,R0,+5 -OR A2,R0,R0 -JAL 70008E08 -LW A0,3720 (A0) - -casing hitting ground -LUI A0,8006 -ADDIU A1,R0,007A -BEQ V1,T8,+7 -NOP -LW A0,3720 (A0) -JAL 70008E08 -SW A3,0028 (SP) - -latch or small clicking noise empty? -LUI A0,8006 -ADDIU A1,R0,00F1 -ANDI T0,V0,0008 -BEQ T0,R0,+3 -OR A2,R0,R0 -ORI T1,V0,0010 -SB T1,0001 (S3) -JAL 70008E08 -LW A0,3720 (A0) - -gasping, like gas leak -ADDIU A1,R0,0044 -OR A2,R0,R0 -SW R0,00F8 (T4) -JAL 70008E08 -LW A0,3720 (A0) - -starting tank -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0042 -JAL 70008E08 -OR A2,S0,R0 - -moving tank -LUI A0,8006 -LUI A2,8003 -ADDIU A2,A2,645C -LW A0,3720 (A0) -ADDIU A1,R0,003E -JAL 70008E08 -SWC1 F12,0244 (SP) - -engine idling -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0041 -OR A2,S0,R0 -JAL 70008E08 -SWC1 F12,0244 (SP) - -cough twice -ADDIU A1,R0,0062 -OR A2,R0,R0 -BC1FL +6 -LUI AT,44E1 -JAL 70008E08 -LW A0,3720 (A0) - -gas leak -LUI A0,8006 -LUI A2,8003 -ADDIU A2,A2,0AE4 -LW A0,3720 (A0) -JAL 70008E08 -ADDIU A1,R0,0066 - -alarm -LUI A0,8006 -LUI A2,8003 -ADDIU A2,A2,0AC4 -LW A0,3720 (A0) -JAL 70008E08 -ADDIU A1,R0,00A3 - -door closing, but also used on main menus when moving from folder to folder -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 - -same, but for different instance -LUI A0,8006 -SW T9,A8D8 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,00C7 -JAL 70008E08 -OR A2,R0,R0 -(few more follow these. same effect, different menus) - -watch beep -LUI A0,8006 -SW T7,09C4 (AT) -LW A0,3720 (A0) -ADDIU A1,R0,009F -JAL 70008E08 -OR A2,R0,R0 - -throwing knife hitting ground -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0003 -JAL 70008E08 -OR A2,R0,R0 - -grenade hitting ground -LW A0,3720 (A0) -ADDIU A1,R0,002D -JAL 70008E08 -OR A2,R0,R0 - -running engine -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0041 -JAL 70008E08 -ADDIU A2,S1,00AC - -locked door -LUI A0,8006 -ADDIU A1,R0,00BA -BNE T7,AT,+D -OR A2,R0,R0 -JAL 70008E08 -LW A0,3720 (A0) - -switch guns -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00EA -JAL 70008E08 -OR A2,R0,R0 - -switch mines -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00EB -JAL 70008E08 -OR A2,R0,R0 - -switch knives -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00E9 -JAL 70008E08 -OR A2,R0,R0 - -switch laser -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00F2 -JAL 70008E08 -OR A2,R0,R0 - -open lab door - door SE 1 -ADDIU A1,R0,00D3 -LW A0,3720 (A0) -JAL 70008E08 -OR A2,A3,R0 - -close lab door - door SE 1 -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00D2 -OR A2,R0,R0 -JAL 70008E08 -SW A3,0018 (SP) - -open elevator - door SE 2 -LUI A0,8006 -BEQ A3,R0,+13 -ADDIU A1,R0,0007 -LW A0,3720 (A0) -JAL 70008E08 -OR A2,A3,R0 - -close elevator - door SE 2 -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00CA -OR A2,R0,R0 -JAL 70008E08 -SW A3,0018 (SP) - -looping automated door moving - door SE 3 -LUI A0,8006 -BEQ A3,R0,+3 -ADDIU A1,R0,00CC -LW A0,3720 (A0) -JAL 70008E08 -OR A2,A3,R0 - -somehting with door -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00D6 -OR A2,R0,R0 -JAL 70008E08 -SW A3,0018 (SP) - -open automated door - door SE 4 -ADDIU A1,R0,00D8 -LW A0,3720 (A0) -JAL 70008E08 -OR A2,A3,R0 - -close sliding door - door SE 7 -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00C0 -OR A2,R0,R0 -JAL 70008E08 -SW A3,0018 (SP) - -open sliding door - door SE 7 -ADDIU A1,R0,00BF -LW A0,3720 (A0) -JAL 70008E08 -OR A2,A3,R0 - -open light door - door SE 5 -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00BC -OR A2,R0,R0 -JAL 70008E08 -SW A3,0018 (SP) - -open ding - door SE 2, 6, 8, B, 11 -ADDIU A1,R0,0007 -LW A0,3720 (A0) -JAL 70008E08 -OR A2,A3,R0 - -open garage door - door SE 9 -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00C2 -JAL 70008E08 -OR A2,A3,R0 - -open ding - door SE 2, 6, 8, B, 11 -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0007 -OR A2,R0,R0 -JAL 70008E08 -SW A3,0018 (SP) - -open mechanical door - door SE E -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00DA -JAL 70008E08 -OR A2,A3,R0 - -open stone door - door SE F -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00E1 -JAL 70008E08 -OR A2,A3,R0 - -open UNKNOWN door -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00D6 -JAL 70008E08 -OR A2,R0,R0 - -etc. - -open watch -LUI A0,8006 -ADDIU A1,R0,00ED -BEQ T9,R0,+6 -OR A2,R0,R0 -JAL 70008E08 -LW A0,3720 (A0) - -close watch -LUI A0,8006 -SW T5,01C0 (T6) -LW T7,A0B0 (T7) -ADDIU A1,R0,00EE -OR A2,R0,R0 -SW R0,01C4 (T7) -JAL 70008E08 -LW A0,3720 (A0) - -launch rocket -ADDIU A1,R0,0001 -... -LUI A0,8006 -LW T6,0098 (V0) -ADDIU A2,V0,0098 -BNEL T6,R0,+6 -LW T7,009C (V0) -JAL 70008E08 -LW A0,3720 (A0) -and here... -LUI A0,8006 -ADDIU A1,R0,0001 -BNEZ T7,+3 -ADDIU A2,V0,009C -JAL 70008E08 -LW A0,3720 (A0) - -higher-pitch prop noise -LW A0,3720 (A0) -ADDIU A1,R0,003A -JAL 70008E08 -ADDIU A2,S1,00B0 - -autogun firing -LUI A0,8006 -ADDIU A1,R0,00FD -BNEZ T2,+A -ADDIU A2,S0,00C4 -ADDIU T6,S3,0008 -SW T6,0070 (SP) -JAL 70008E08 -LW A0,3720 (A0) -and here... -LUI A0,8006 -ADDIU A1,R0,00FD -BNEZ T5,+8 -ADDIU A2,S0,00C8 -ADDIU T8,S3,0008 -SW T8,0070 (SP) -JAL 70008E08 -LW A0,3720 (A0) - -reloading -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,0032 -JAL 70008E08 -OR A2,R0,R0 - -floppy or key reader -LW A0,3720 (A0) -ADDIU A1,R0,00F5 -JAL 70008E08 -OR A2,R0,R0 - -watch magnet attract -LUI A0,8006 -LW A0,3720 (A0) -ADDIU A1,R0,00F6 -JAL 70008E08 -ADDIU A2,A3,01D4 - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/2D Tank/Tank Rewrite WIP.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/2D Tank/Tank Rewrite WIP.txt deleted file mode 100644 index 4ff1bad..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Data and Features/2D Tank/Tank Rewrite WIP.txt +++ /dev/null @@ -1,644 +0,0 @@ -opens: 7F082BD0 - 7F082C20 20 ops - 7F0693F4 - 7F06942C 14 ops - -stow weapon # in slot. -on addition: - if -1, skip ammo and weapon additions - if 0, default to 0x20 - stow type in stack between writes - retrieve player's ammo of type and save to object - add to player ammo for type given - -on removal: - to eliminate possible glitches, if -1, skip all ammo and weapon stuff - if 0, default to 0x20 - retrieve amount of ammo - retrieve ammo on clip - save 0 over both ammo slots - subtract saved player ammo from retrieved - if > 0, save difference to object - remove weapon # - fry player ammo - -revision: - 0xB4 2 SE idle - 0xB6 2 SE moving - 0xB8 2 SE crush - 0xBA 1 weapon type (0=default, -1=none) - 0xBB 1 reserved (runtime weapon replace flag) - 0xBC 2 upper half of max speed float - 0xBE 2 upper half of accel/decel step - 0xC0 4 reserved - 0xC7 1 firing effect register - 0xD8 2 player's ammo - 0xDA 2 vehicle's ammo - -+_+ - -revised ASM -tank firing effect to 1 byte (cleaner code) -//7F04919C: 7DCCC -LW T0,00C4 (S1) -> LB T0,00C7 (S1) -//7F0864DC: BB00C -SW A0,00C4 (S0) -> SB A0,00C7 (S0) -//7F0864EC: BB01C -SW A0,00C4 (S0) -> SB A0,00C7 (S0) - - -*_* - -revised ASM - -Convert weird weapon values -0x39344 7F004814 expand 2D object type -13C000B9 BEQ S8,R0,0x3962C -8E4D000C LW T5,000C (S2) ;upper 32 bitflags -01B46024 AND T4,T5,S4 ;& with killflags from generic caller -158000B6 BNEZ T4,0x3962C ;skip object if killflags present! -824400BA *LB A0,00BA (S2) ;A0=weapon type -50800001 *BEQL A0,R0,+1 -24040020 ADDIU A0,R0,0020 ;A0=20 tank -A24400BA *SB A0,00BA (S2) - -Figure current player's ammo -Draw player ammo from tank. -if(cur-player <= 0) set value to 0 -save the difference (or 0) to tank's register -//7F0829D8: B7508 -3C0C8003 *LUI T4,8003 -8D8D6448 *LW T5,6448 (T4) -24010001 ADDIU AT,R0,0001 -15A10034 BNE T5,AT,7F082AA4 -//7F0829F0: B7520 bail from the tank; copies ammo back to tank object -8D8C6450 LW T4,6450 (T4) ;T4=80036450: p->obj position entry (8006 table) -8D8C0004 LW T4,0004 (T4) ;T8=obj pos entry+4: p->object f/ setup -818400BA *LB A0,00BA (T4) ;A0=weapon -04800016 +BLEZ A0,+16+5 ;skip it all if the weapon isn't there! -A18000C7 *SB R0,00C7 (T4) ;0->tank+C4: FIRING EFFECT OFF -//7F082A04: fry player's tank item -818100BB *LB AT,00BB (T4) ;A0=weapon -1020000A +BEQ AT,R0,+A ;skip weapon stuff if you had one before tank -AFAC00F4 SW T4,00F4 (SP) ;SP+F4=p->object -0FC23187 JAL 7F08C61C ;probably removes tank item from inventory... (T4 safe) -00000000 +NOP -//7F082A18: if tank, cycle weapons -0FC17674 JAL 7F05D9D0 ;ret V0=right hand weapon (T4 safe) -00002025 +OR A0,R0,R0 ;A0=0 right hand -818400BA *LB A0,00BA (T4) ;A0=weapon -14440003 *BNE V0,A0,+3 ;branch if not tank -00000000 +NOP -0FC17600 JAL 7F05D800 ;cycle weapon (fries T4) -00000000 +NOP -//7F082A2C: fry player's tank ammo -8FAC00F4 LW T4,00F4 (SP) ;SP+F4=p->object -818400BA +LB A0,00BA (T4) ;A0=weapon -0FC1A4FD +JAL 7F0693F4 ;ret V0=ammo on clip if types match -00002825 +OR A1,R0,R0 ;right hand -00405825 +OR T3,V0,R0 ;T3=clip ammo -;these four lines added for left clip support -818400BA ++LB A0,00BA (T4) ;A0=weapon type -0FC1A4FD ++JAL 7F0693F4 ;ret V0=ammo on clip -24050001 ++ADDIU A1,R0,0001 ;left hand -004B5821 ++ADDU T3,V0,T3 -0FC1A514 JAL 7F069450 ;ret V0= cur. amount of tank ammo in inventory (T4 safe) -818400BA LB A0,00BA (T4) ;A0=weapon -004B5821 +ADDU T3,V0,T3 ;T3=stock + clip when applicable -;original -;8FAC00F4 LW T4,00F4 (SP) ;SP+F4=p->object -;0FC1A514 JAL 7F069450 ;ret V0= cur. amount of tank ammo in inventory (T4 safe) -;818400BA *LB A0,00BA (T4) ;A0=weapon -958500D8 *LHU A1,00D8 (T4) ;A1=original ammo on entry, extended for clip -00AB5823 +SUBU T3,A1,T3 ;V0=original-current dif is actual difference in ammo! -;added following two lines -958500DA +LHU A1,00DA (T4) ;A1=tank's stock -00AB5823 +SUBU T3,A1,T3 ;T3=stock - difference -59600001 +BLEZL T3,+1 ;no need to edit ammo if you chewed up all theirs! -00005825 +OR T3,R0,R0 ;if<0, set to zero so math works -;added following line -004B2823 SUBU A1,V0,T3 ;removes stock from ammo total -0FC1A521 JAL 7F069484 ;Add proper tank ammo to player's inventory (T4 safe) -A58B00DA SH T3,00DA (T4) ;save amount of tank ammo to tank's register -//7F082A6C: no longer in tank -0FC1F3A8 JAL 7F07CEA0 ;NEW! sets tank not occupied -2403000C ADDIU V1,R0,000C -00001025 OR V0,R0,R0 -8E180000 LW T8,0000 (S0) -E714016C SWC1 F20,016C (T8) -E7140174 SWC1 F20,0174 (T8) -E714014C SWC1 F20,014C (T8) -//7F082A80: -03027021 ADDU T6,T8,V0 ;T6=T8+offset -24420004 ADDIU V0,V0,0004 ;V0+=4 -1443FFFC BNE V0,V1,7F082A80 ;branch V0<0xC -E5D40180 SWC1 F20,0180 (T6) ;F20->T6+0x180 -240F0002 ADDIU T7,R0,0002 -1000006A BEQ R0,R0,7F082C2C -AF0F009C SW T7,009C (T8) ;2->T9+0x9C -//7F082AA4: -00000000 NOP -00000000 NOP -00000000 +NOP -00000000 +NOP -00000000 +NOP -00000000 +NOP -00000000 +NOP - - -to make myself look like less of an idiot, use 7F069258: V0= total ammo of type A0, including in weapon clips -exit -//7F082A2C: fry player's tank ammo -8FAC00F4 LW T4,00F4 (SP) ;SP+F4=p->object -0FC1A50B +JAL 7F06942C ;ret V0=ammo type of weapon A0 -818400BA +LB A0,00BA (T4) ;A0=weapon -0FC1A496 +JAL 7F069258 ;ret V0=total ammo of type A0 -00402025 +OR A0,V0,R0 -00405825 +OR T3,V0,R0 ;T3=total ammo -0FC1A4FD NOP -24050001 NOP -004B5821 NOP -004B5821 NOP -0FC1A514 JAL 7F069450 ;ret V0= cur. amount of tank ammo in inventory (T4 safe) -818400BA LB A0,00BA (T4) ;A0=weapon -958500D8 *LHU A1,00D8 (T4) ;A1=original ammo on entry, extended for clip -01655823 +SUBU T3,T3,A1 ;V0=current-original dif is actual difference in ammo! -;added following two lines -958500DA NOP -00AB5823 NOP -59600001 +BLEZL T3,+1 ;no need to edit ammo if you chewed up all theirs! -00005825 +OR T3,R0,R0 ;if<0, set to zero so math works -;added following line -004B2823 SUBU A1,V0,T3 ;removes stock from ammo total -0FC1A521 JAL 7F069484 ;Add proper tank ammo to player's inventory (T4 safe) -A58B00DA SH T3,00DA (T4) ;save amount of tank ammo to tank's register - -intro -//7F082ADC new alternate A0 retrains weapon type -0FC1A50B +JAL 7F06942C ;ret V0=ammo type of weapon A0 -818400BA +LB A0,00BA (T4) ;A0=weapon -0FC1A496 +JAL 7F069258 ;ret V0=total ammo of type A0 -00402025 +OR A0,V0,R0 -0FC1A4FD NOP -24050001 NOP -004B5821 NOP -A58200D8 +SH V0,00D8 (T4) ;save current ammo -0FC1A514 +JAL 7F069450 ;ammo in inventory -818400BA LB A0,00BA (T4) ;A0=weapon type -958500DA LHU A1,00DA (T4) ;A1=tank ammo register -//7F082AF0: add tank ammo as per tank object -0FC1A521 JAL 7F069484 ;add A1 ammo of type A0=tank (T4 safe) -00452821 ADDU A1,V0,A1 ;add cur ammo to tank ammo -00AB1021 NOP - - - -insert hook for clip testing... -//7F082A34: fry player's tank ammo -8FAC00F4 LW T4,00F4 (SP) ;SP+F4=p->object -818400BA LB A0,00BA (T4) ;A0=weapon -0FC1A4FD +JAL 7F0693F4 -00002825 +OR A1,R0,R0 ;right hand -00405825 +OR T3,V0,R0 ;T3=ammo stock -0FC1A514 JAL 7F069450 ;ret V0= cur. amount of tank ammo in inventory (T4 safe) -818400BA LB A0,00BA (T4) ;A0=weapon -004B1021 +ADDU V0,V0,T3 ;V0=stock + clip when applicable -958500D8 LHU A1,00D8 (T4) ;A1=original ammo on entry -00451023 SUBU V0,V0,A1 ;V0=current-original -58400002 BLEZL V0,+2 ;no need to edit ammo if you chewed up all theirs! -00001025 OR V0,R0,R0 ;if<0, set to zero so math works -0FC1A521 JAL 7F069484 ;Add proper tank ammo to player's inventory (T4 safe) -A58200DA SH V0,00DA (T4) ;save amount of tank ammo to tank's register - -same hook, for entering tank -0FC1A4FD +JAL 7F0693F4 -00002825 +OR A1,R0,R0 ;right hand -00405825 *OR T3,V0,R0 ;T3=ammo stock -0FC1A514 -JAL 7F069450 ;returns V0=ammo for weapon A0 (T4 safe) -818400BA LB A0,00BA (T4) ;A0=weapon type -958500DA LHU A1,00DA (T4) ;A1=tank ammo register -//7F082AF0: add tank ammo as per tank object -00452821 ADDU A1,V0,A1 ;add cur ammo to tank ammo -00AB2821 +ADDU A1,A1,T3 ;V0=stock + clip when applicable - - -adding a routine via rewrite of existing one: -7F07CE84 B19B4 return V0=p->object's 8006 if in tank, T6=state -3C028003 LUI V0,8003 -8C4E6448 LW T6,6448 (V0) -55C00002 BNEZL T6,+2 -8C426450 LW V0,6450 (V0) -00001025 OR V0,R0,R0 -03E00008 JR RA -00000000 NOP - -7F07CEA0: B19D0 0FC1F3A8 set exit tank; fries V0 -3C028003 LUI V0,8003 -03E00008 JR RA -AC406448 SW R0,6448 (V0) -00000000 NOP - - - -tank's ammo stock value = 2 bytes. -Upper 2 bytes reserved for runtime player stock total before entering tank -So, it has its own ammo - probably ;*) -//7F082A9C B75D4 below are called when shoving a player into the tank! AT already=1, T4=8003, S0=p->curBOND -;8D8C6450 LW T4,6450 (T4) ;V0=p->current obj being parsed: tank -11800059 *BEQ T4,R0,7F082C20 -3C028003 +LUI V0,8003 -918A0000 LBU T2,0000 (T4) ;V0=8006+0: 1 when you can crawl on it (0=not there, 2=normal object collisions) -15410056 *BNE T2,AT,7F082C20 ;branch if it isn't whatever they're testing for... -8D8C0004 LW T4,0004 (T4) ;A1=8006+4: p->tank object -918B0003 LBU T3,0003 (T4) ;T3=obj+3: object type -2401002D ADDIU AT,R0,002D ;AT=2D: tank object type -15610052 *BNE T3,AT,7F082C20 ;skip if object not tank (2D) -8C4D6480 LW T5,6480 (V0) ;T5=80036480: 1 if on tank turret; T4 already = 8003 -11A00050 *BEQ T5,R0,7F082C20 ;skip if not on turret -818400BA *LB A0,00BA (T4) ;A0=weapon type -04800011 +BLTZ A0,+D+4 ;skip ammo writting if no item -AFAC00EC SW T4,00EC (SP) ;SP+EC= p->tank -//7F082AD0 new alternate -0FC1A4FD +JAL 7F0693F4 ;ret V0=ammo on clip -00002825 +OR A1,R0,R0 ;right hand -00405825 *OR T3,V0,R0 ;T3=ammo on clip stock -;these four lines added for left clip support -818400BA ++LB A0,00BA (T4) ;A0=weapon type -0FC1A4FD ++JAL 7F0693F4 ;ret V0=ammo on clip -24050001 ++ADDIU A1,R0,0001 ;left hand -004B5821 ++ADDU T3,V0,T3 -0FC1A514 -JAL 7F069450 ;returns V0=ammo for weapon A0 (T4 safe) -818400BA LB A0,00BA (T4) ;A0=weapon type -958500DA LHU A1,00DA (T4) ;A1=tank ammo register -//7F082AF0: add tank ammo as per tank object -00452821 ADDU A1,V0,A1 ;add cur ammo to tank ammo -00AB1021 +ADDU V0,A1,T3 ;V0=stock + clip when applicable -;0FC1A514 +JAL 7F069450 ;returns V0=ammo for weapon A0 (T4 safe) -;00000000 +NOP -;818400BA *LB A0,00BA (T4) ;A0=weapon type -;958500DA *LHU A1,00DA (T4) ;A1=tank ammo register -//7F082AF0: add tank ammo as per tank object -;00452821 +ADDU A1,V0,A1 ;add cur ammo to tank ammo -0FC1A521 JAL 7F069484 ;add A1 ammo of type A0=tank (T4 safe) -A58200D8 +SH V0,00D8 (T4) ;save current ammo -//7F082ADC: add tank to inventory -0FC23122 JAL 7F08C488 ;add item A0 to inventory-ret V0=1 if okay, 0 if can't! 0 if already have one, esp.! (fry T4) -818400BA *LB A0,00BA (T4) ;A0=weapon type -//7F082B04: B763C -8FA300EC LW V1,00EC (SP) -0FC20C1A JAL 7F083068 ;set override values -A06200BB +SB V0,00BB (V1) ;save sucess byte; can test later for removal -3C018005 -LUI AT,8005 -C42A5120 -LWC1 F10,5120 (AT) -3C018003 -LUI AT,8003 -2424646C *ADDIU A0,AT,646C -C46600C8 LWC1 F6,00C8 (V1) -E4860000 SWC1 F6,0000 (A0) -460A3483 *DIV.S F18,F6,F10 -E4326470 SWC1 F18,6470 (AT) -24256474 *ADDIU A1,AT,6474 -// -240C0001 ADDIU T4,R0,0001 -3C193C80 *LUI T9,3C80 -8E080000 LW T0,0000 (S0) -E514016C *SWC1 F20,016C (T0) -E5140174 *SWC1 F20,0174 (T0) -E514014C *SWC1 F20,014C (T0) -AD0C009C *SW T4,009C (T0) -C5080148 LWC1 F8,0148 (T0) -C50A0158 LWC1 F10,0158 (T0) -// -3C028008 LUI V0,8008 -AC4099B8 *SW R0,99B8 (V0) -E45499BC *SWC1 F20,99BC (V0) -AC5999C0 *SW T9,99C0 (V0) -E44899C4 *SWC1 F8,99C4 (V0) -E44A99C8 *SWC1 F10,99C8 (V0) -244299D0 ADDIU V0,V0,99D0 ;V0=800799D0 -// -C46400CC LWC1 F4,00CC (V1) -E4246484 SWC1 F4,6484 (AT) -3C018005 LUI AT,8005 -E4A40000 *SWC1 F4,0000 (A1) -C42A5124 LWC1 F10,5124 (AT) -460A2483 *DIV.S F18,F4,F10 -3C018003 LUI AT,8003 -E4326478 SWC1 F18,6478 (AT) -E434647C SWC1 F20,647C (AT) -C46400DC LWC1 F4,00DC (V1) -E4246464 SWC1 F4,6464 (AT) -E4346460 SWC1 F20,6460 (AT) -AC2C6448 SW T4,6448 (AT) -//7F082BC8: -C512048C LWC1 F18,048C (T0) -E4520000 SWC1 F18,0000 (V0) -C5040490 LWC1 F4,0490 (T0) -E4440004 SWC1 F4,0004 (V0) -C5060494 LWC1 F6,0494 (T0) -E4460008 SWC1 F6,0008 (V0) -0FC1F1ED JAL 7F07C7B4 -AC206490 SW R0,6490 (AT) -10000017 BEQ R0,R0,7F082C30 -8FAC0144 LW T4,0144 (SP) -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP - - -00000000 NOP -00000000 NOP -00000000 NOP - -dang. To get this working right, must test if current weapon uses same ammo as the tank's -if the ammo types line up, add in the clip to total. -That assures on entry and exit, if ammo types are the same as the tank's, it will pull the right number - -deleted routine below with stupidity revision -7F0693F4 9DF24 0FC1A4FD NEW! -if ammo types for item in hand A1 and item A0 match, V0=ammo on clip. else, 0 -accepts: A0=weapon, A1=hand -fries: AT,V0,V1,A0,A1,T6,T7,T8 -AFBFFFE0 SW RA,FFE0 (SP) -0FC1A50B JAL 7F06942C ;V0=ammo type for weapon A0; fries V1,T6,T7,T8 -00000000 NOP -00A02025 +OR A0,A1,R0 ;A0 now equals hand -0FC17674 JAL 7F05D9D0 ;V0=hand A0's weapon; fries T6,T7,T8 -00402825 +OR A1,V0,R0 ;A1 now equals ammo type for weapon A0 -8F01089C LW AT,089C (T8) ;clip ammo for hand A1 -0FC1A50B JAL 7F06942C ;V0=ammo type for weapon A0; fries V1,T6,T7,T8 -00402025 +OR A0,V0,R0 -54450001 BNEL V0,A1,+1 -00000825 OR AT,R0,R0 ;fry clip ammo total if they don't match -8FBFFFE0 LW RA,FFE0 (SP) -03E00008 JR RA -00201025 OR V0,AT,R0 - -REWRITING A ROUTINE TO MAKE ROOM FOR THIS! -7F069374 9DEA4 shotgun shell reloader - accepts: A0=hand (0-R,1-L) -27BDFFE0 ADDIU SP,SP,FFE0 -AFBF0014 SW RA,0014 (SP) -0FC17674 JAL 7F05D9D0 ;T7 will be the offset to hand -AFA40020 SW A0,0020 (SP) ;hand->SP+20 -00402025 OR A0,V0,R0 ;A0=hand A0's weapon -AFAF0018 SW T7,0018 (SP) ;offset to hand->SP+18 -0FC1A514 JAL 7F069450 ;ret V0=ammo stock for weapon A0 -AFA2001C SW V0,001C (SP) ;weapon->SP+1C -00402825 OR A1,V0,R0 ;A1=ammo stock -8FAE0020 LW T6,0020 (SP) ;T6=hand -8FA3001C LW V1,001C (SP) ;V1=weapon -2401000F ADDIU AT,R0,000F -10610002 BEQ V1,AT,7F0693B0 ;branch if weapon = shotgun -24010010 ADDIU AT,R0,0010 -1461000E BNE V1,AT,quit ;branch if weapon isn't autoshotgun -//7F0693B0: shotgun and autoshotgun - test other held weapon -240F0001 ADDIU T7,R0,0001 -0FC17674 JAL 7F05D9D0 ;ret V0=other hand's weapon; doesn't touch A1 -01EE2023 SUBU A0,T7,T6 ;A0=hand inverted (1-R,0-L) -10410003 BEQ V0,AT,7F0693D8 ;branch if autoshotgun -2401000F ADDIU AT,R0,000F -14410007 BNE V0,AT,quit-1 ;branch if not shotgun -00005825 OR T3,R0,R0 -//7F0693D8: shotgun and autoshotgun... -8FA80018 LW T0,0018 (SP) ;T9=hand -3C188008 LUI T8,8008 -8F18A0B0 LW T8,A0B0 (T8) ;T8=p->BONDdata -00084823 SUBU T1,R0,T0 ;T1=negative offset -03095021 ADDU T2,T8,T1 -8D4B0C4C LW T3,0C4C (T2) ;T3=BONDdata+0xC4C -00AB1023 SUBU V0,A1,T3 ;V0=ammo stock - value... -//7F06941C: quit -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP -00000000 NOP - - - -//7F083B1C: B864C test y sight elevation versus cutoff -3C018008 LUI AT,8008 -C420FF6C LWC1 F0,FF6C (AT) - - -potential rewrite... -IF PROBLEMS OCCUR, redo the first C.LT.S test and keep an op between them & branches! -//7F082F20: B7A50 -11400008 BEQ T2,R0,+8 -46001386 MOV.S F14,F2 -8FA90120 LW T1,0120 (SP) -3C01428C LUI AT,428C -44892000 MTC1 T1,F4 -44815000 MTC1 AT,F10 -//7F082F38: -468024A0 CVT.S.W F18,F4 -10000009 BEQ R0,R0,+9 -460A9003 DIV.S F0,F18,F10 -//7F082F44: -8FAB019C LW T3,019C (SP) -11600003 BEQ T3,R0,+3 -8FAD0198 LW T5,0198 (SP) -10000004 BEQ R0,R0,+4 -46001006 MOV.S F0,F2 -//7F082F58: -3C01BF80 LUI AT,BF80 -55A00003 BNEZL T5,+1 -44810000 MTC1 AT,F0 -//7F082F64: -3C01BF80 LUI AT,BF80 -4600103C C.LT.S F2,F0 -3C0C8005 LUI T4,8005 -45020003 BC1FL +3 -44813000 MTC1 AT,F6 -10000005 BEQ R0,R0,+5 -46001006 MOV.S F0,F2 -//7F082F80: direction -4606003C C.LT.S F0,F6 -3C01BF80 LUI AT,BF80 -45030001 BC1TL +1 ;if F0<-1, set it to -1 -44810000 MTC1 AT,F0 ;F0=-1.0 -//7F082F90: max speed -3C018008 LUI AT,8008 -C430FF60 LWC1 F16,FF60 (AT) ;F16=15.0 max speed? -//7F082F98: -... - -//7F082FE4: B7B14 dual de/accel routine! -4602003C C.LT.S F0,F2 -3C013E80 LUI AT,3E80 -45020002 BC1FL +2 ;branch if speed >= max speed? -46020101 SUB.S F4,F0,F2 ;DECEL value -46001101 SUB.S F4,F2,F0 ;!difference! F4=MAX-speed! -//7F083014: tank accel -44819000 MTC1 AT,F18 ;F18=0.25 -3C018008 LUI AT,8008 -C428FF64 LWC1 F8,FF64 (AT) ;F8=0.5 acceleration step -46122282 MUL.S F10,F4,F18 ;F10=F4/4 -45020002 BC1FL +2 ;branch if speed >= max speed? -3C01C120 LUI AT,C120 ;decel = -10 -3C014120 LUI AT,4120 ;accel = +10 -46105183 DIV.S F6,F10,F16 ;F6=F10/F16 [F16=15.0] -44815000 MTC1 AT,F10 ;!difference! F10=10 -3C014270 LUI AT,4270 -46083100 ADD.S F4,F6,F8 ;F4=F8+0.5 -44814000 MTC1 AT,F8 ;F8=60 -3C018005 LUI AT,8005 -460E2482 MUL.S F18,F4,F14 ;F18=F4*F14 [F14=1.0] -C4248378 LWC1 F4,8378 (AT) ;F4=80048378: 1.0 clock cycle rate counter maybe? multiplier is used in many different animation applications... -460A9182 MUL.S F6,F18,F10 ;F6=F18*10 -46083303 DIV.S F12,F6,F8 ;F12=F6/60 -46046482 MUL.S F18,F12,F4 ;F18=F12*1.0 -46120280 ADD.S F10,F0,F18 ;F10=speed+F18 -45020002 BC1FL +2 ;branch if speed >= max speed? -4602503C C.LT.S F10,F2 -460A103C C.LT.S F2,F10 -E50A0174 SWC1 F10,0174 (T0) ;F10->player's speed -4500001F BC1F 7F0830F4 ;if max speed < speed, set speed to max -00000000 NOP -1000001D BEQ R0,R0,7F0830F4 -E5020174 SWC1 F2,0174 (T0) ;max speed -> player's speed -//7F083080: empty. safe to commandeer for Tank attribute ripping! Yar! - -//7F085658: BA188 IGNITION + idle (when looped) -0FC2FF01 JAL 7F0BFC04 -3C058008 LUI A1,8008 -14400005 BNEZ V0,7F085678 -3C048006 LUI A0,8006 -8C843720 LW A0,3720 (A0) -94A5FF78 LHU A1,FF78 (A1) - - -//7F085870: BA3A0 idle SE when non-looping! -24050041 ADDIU A1,R0,0041 -> 3C058008 LUI A1,8008 -02003025 OR A2,S0,R0 -0C002382 JAL 70008E08 -E7AC0244 SWC1 F12,0244 (SP) -> 94A5FF7A LHU A1,FF7A (A1) - -//7F085760: BA290 motion SE -3C058008 LUI A1,8008 -0C002382 JAL 70008E08 -94A5FF7C LHU A1,FF7C (A1) - - -//7F0867E0: BB310 crush SE (as opposed to scream, which won't change) -1020000D BEQ AT,R0,7F086818 -... -//7F086818: BB348 -3C058008 LUI A1,8008 - BLEZ V0,7F086840 - LUI A0,8006 - LW A0,3720 (A0) -94A5FF7E LHU A1,FF7E (A1) - JAL 70008E08 - OR A2,R0,R0 - - -technically, can get rid of 7F0830F4 and use branches to 7F083390 instead -however, it would be tedious to recalc all the branches to 30F4... -7F08307C B7BAC 1D+A7 C4 -7F083074 B7BA4 1F+A7 C6 -7F082FF8 B7B28 3E+A7 E5 -7F082F10 B7A40 78+A7 11F -7F082E00 B7930 BC+A7 163 - -0xB4 2 [float - upper short only!] rotation rate override -0xB6 2 [float - upper short only!] acceleration override -0xB8 1 top speed override 0 defaults to 15, -1 sets to immovable -0xB9 1 lower sight limit override 0 defaults to -20 -0xBA 1 item type when riding: 0 defaults to tank, -1 no item -0xBB 1 reserved. used at runtime to determine if the item was already in inventory -0xBC 2 SE ignition. 0 defaults to 042 -0xBE 2 SE idle. 0 defaults to ignition effect -0xC0 2 SE motion. 0 defaults to 03E -0xC2 2 SE crush. 0 defaults to 0D5 - -8007FF60-80 safe? -60 15.0 top speed -64 0.5 accel -68 --- RESERVED for rotation -6C -20.0 lower sight limit -70 --- RESERVED for upper sight limit -74 --- RESERVED for future use -78 0042 SE ignition -7A 0041 SE idle -7C 003E SE motion -7E 00D5 SE crush - -7F083068: B7B98 !NEW! set Tank override values - sets values to 8007FF60 in rdram - accepts: V1=p->tank object - fries: A0,A1,F6 -//Top Speed + accel -3C048008 LUI A0,8008 -806500B8 LB A1,00B8 (V1) -50A00001 BEQL A1,R0,+1 ;default for speed -2405000F ADDIU A1,R0,000F -04A20001 BLTZL A1,+1 ;negative speed = stationary! -24050000 ADDIU A1,R0,0000 -44853000 MTC1 A1,F6 -946500B6 LHU A1,00B6 (V1) ;accel FP upper halfword -468031A0 CVT.S.W F6,F6 -50A00001 BEQL A1,R0,+1 -24053F00 ADDIU A1,R0,3F00 -A485FF64 SH A1,FF64 (A0) -E486FF60 SWC1 F6,FF60 (A0) -//lower sight limit + ignition SE -806500B9 LB A1,00B9 (V1) -50A00001 BEQL A1,R0,+1 ;default for sight -2405FFE0 ADDIU A1,R0,FFE0 -44853000 MTC1 A1,F6 -946500BC LHU A1,00BC (V1) -468031A0 CVT.S.W F6,F6 -50A00001 BEQL A1,R0,+1 -24050042 ADDIU A1,R0,0042 -E486FF6C SWC1 F6,FF6C (A0) -A485FF78 SH A1,FF78 (A0) -//idle SE same as ignition by default -946500BE LHU A1,00BE (V1) -50A00001 BEQL A1,R0,+1 -9485FF78 LHU A1,FF78 (A0) -A485FF7A SH A1,FF7A (A0) -//movement SE -946500C0 LHU A1,00C0 (V1) -50A00001 BEQL A1,R0,+1 -2405003E ADDIU A1,R0,003E -A485FF7C SH A1,FF7C (A0) -//crush SE -946500C2 LHU A1,00C2 (V1) -50A00001 BEQL A1,R0,+1 -240500D5 ADDIU A1,R0,00D5 -03E00008 JR RA -A485FF7E SH A1,FF7E (A0) -00000000 NOP - -dang... than still leaves rotation+ceiling. granted, I never did find rotation... -just have to loot more space! - -oh, incidentally, a passable hoverbike would be: -CC 06 CC D2 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Expansion/15 Body Armor/15 Body Armor Expansion Hack (antiquated).txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Expansion/15 Body Armor/15 Body Armor Expansion Hack (antiquated).txt deleted file mode 100644 index 6710fa5..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Expansion/15 Body Armor/15 Body Armor Expansion Hack (antiquated).txt +++ /dev/null @@ -1,53 +0,0 @@ -++++++++++++++++++++++++++ -HIJACK cheat activated at 80069655 -test if 01 at 800696A5. If !=0 (toggled), branch to 7F004AFC! - -7F0045C0: 0x390F0 new type 15 -BEQ S8,R0,7F004AFC //S8 better equal 1 (test if object loaded) -NOP -*LUI T4,8007 3C0C8007 -*LB T7,96A5 (T4) 818F96A5 -BNEZ T7,7F004AFC //if cheat active, branch -NOP -LW T6,0080 (S2) //T6=BA value -LUI AT,4780 -MTC1 AT,F6 //F6=65536. -MTC1 T6,F18 -OR A0,S5,R0 //A0=S5=obj# -OR A1,S2,R0 //A1=S2=cur obj pointer -CVT.SW F4,F18 //F4=BA value (as float) ie. 65536=00010000 -OR A2,S3,R0 //A2=S3=validity flag -DIV.S F8,F4,F6 //F8=armor as percentage (100%=65536/65536) -SWC1 F8,0080 (S2) //save float version of armor -LWC1 F10,0080 (S2) //F10=armor value -*BEQ R0,R0,7F004738 1000004C //piggyback 03 object validity test -SWC1 F10,0084 (S2) //armor value copied to obj offset 0x84 - - -+_+ - -Final revision for rand++ (Never Say Never Again) -7F0045C0: 390F0 type 15: Body Armor expansion routine -13C0014E BEQ S8,R0,7F004AFC //S8 better equal 1 (valid) -8E4C000C LW T4,000C (S2) //T4=lower 32 bitflags -01946024 *AND T4,T4,S4 //true if any insidious bitflags toggled -1580014B *BNEZ T4,7F004AFC //if any killtags assigned, abort! -//7F0045D0: test if no body armor cheat activated -3C0C8007 *LUI T4,8007 -818C96A5 *LB T4,96A5 (T4) ;T4= Dr. No cheat -15800148 *BNEZ T4,7F004AFC -//7F0045DC: convert BA value into a floating-point number -8E4E0080 LW T6,0080 (S2) //T6=BA value -3C014780 LUI AT,4780 -44813000 MTC1 AT,F6 //F6=65536. -448E9000 MTC1 T6,F18 -02A02025 OR A0,S5,R0 //A0=S5=obj# -02402825 OR A1,S2,R0 //A1=S2=cur obj pointer -46809120 CVT.SW F4,F18 //F4=BA value (as float) -02603025 OR A2,S3,R0 //A2=S3=validity flag -46062203 DIV.S F8,F4,F6 //F8=armor as percentage -E6480080 SWC1 F8,0080 (S2) //save float version of armor -0FC00767 JAL 7F001D9C //expands data into a valid object -E6480084 *SWC1 F8,0084 (S2) //armor value copied to obj offset 0x84 -1000013B BEQ R0,R0,7F004AFC -00000000 NOP diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Weapons/7F005710 - Thrown Item Object Model Edit.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Weapons/7F005710 - Thrown Item Object Model Edit.txt deleted file mode 100644 index 9fffaa7..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Objects and Attributes/Weapons/7F005710 - Thrown Item Object Model Edit.txt +++ /dev/null @@ -1,39 +0,0 @@ -Eliminates need for TLB pointers and utilizes custom tables. - -7F005710 3A240 V0=model ID for thrown item A0 - accepts: A0=item# (from 1st person weapon/item index) -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -3C017F00 LUI AT,7F00 -//7F00571C: loop to find a hit -80225750 LB V0,5750 (AT) -04420008 BLTZL V0,7F005744 ;return if end of list -00001025 OR V0,R0,R0 ;V0=0 -5444FFFC BNEL V0,A0,-loop -24210003 ADDIU AT,AT,0003 -//7F005730: load model ID if applicable -90245751 LBU A0,5751 (AT) -90225752 LBU V0,5752 (AT) -00042200 SLL A0,A0,0x8 -0FC15B0E JAL 7F056C38 ;load model A0 -00442025 OR A0,A0,V0 ;A0=model ID -//7F005744: return -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - -//7F005750: data table -03.00BA -18.00CB -19.00CA -1A.00C4 -1B.00C9 -1C.00C8 -1D.00C7 -20.00CA -21.00E2 -22.0111 -2F.00F5 -30.00F6 - -anathema: 8004F0F0 - 8004F1A8 2E360 - 2E418 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/Gas Toggle Command 2B (Not Incorporated).txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/Gas Toggle Command 2B (Not Incorporated).txt deleted file mode 100644 index f4a5c96..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/Gas Toggle Command 2B (Not Incorporated).txt +++ /dev/null @@ -1,72 +0,0 @@ -Replacing NULL command 2B.rr -10 commands total + 3 at 7F034508 - -JAP 7F0363A0 0x6AF10 -USA 7F0360A0 0x6ABD0 -PAL 7F0360E0 0x68AD0 - -new: 2B.xx x=option to set gas - 0=turn off 1=turn on 10=reset gas released counter - -92260001 LBU A2,0001 (S2) -2CC20010 SLTIU V0,A2,0010 -14020003 BNE R0,V0,0003 -30C60001 ANDI A2,A2,0001 -3C048003 LUI A0,8003 -AC800AC8 SW R0,0AC8 (A0) -3C048007 LUI A0,8007 -AC861E7C SW A2,1E7C (A0) -3C064650 LUI A2,4650 -AC861E78 SW A2,1E78 (A0) - -26520002 ---ADDIU S2,S2,0002 -1000FD32 ---BEQ R0,R0,7F03558C -26310002 ---ADDIU S1,S1,0002 - -------- reduced version: x turns on/off gas -92260001 LBU A2,0001 (S2) -3C048003 LUI A0,8003 -AC860ACC SW A2,0ACC (A0) -3C048007 LUI A0,8007 -AC861E7C SW A2,1E7C (A0) -3C064561 LUI A2,4561 -AC861E78 SW A2,1E78 (A0) - -26520002 ADDIU S2,S2,0002 -1000FD32 ---BEQ R0,R0,7F03558C -26310002 ADDIU S1,S1,0002 - -PAL- return 7F035330, next 7F0355CC -JAP- return 7F0355F0, next 7F03588C - -JAP gas addresses -80030B0C activate gas sound timer -80030B08 gas sound timer -80071EB8 gas endpoint -80071EBC damage player when set to 1 -800525D4 target code address - -PAL gas addresses -8002C01C activate gas sound timer -8002C018 gas sound timer -80060DB8 gas endpoint -80060DBC damage player when set to 1 -800486E4 target code address - ---------------- -GS: start at 8140005C (so can use with 27 type) -92260001 LBU A2,0001 (S2) -2CC20010 SLTIU V0,A2,0010 -14020003 BNE R0,V0,0003 -30C60001 ANDI A2,A2,0001 -3C048003 LUI A0,8003 -AC800AC8 SW R0,0AC8 (A0) -3C048007 LUI A0,8007 -AC861E7C SW A2,1E7C (A0) -3C064650 LUI A2,4650 -AC861E78 SW A2,1E78 (A0) -3C1F7F03 LUI RA,7F03 -37FF558C ORI RA,RA,558C -26520002 ADDIU S2,S2,0002 -03E00008 JR RA -26310002 ADDIU S1,S1,0002 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/WIP new action 27 (Not Incorporated).txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/WIP new action 27 (Not Incorporated).txt deleted file mode 100644 index 0f24230..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/WIP new action 27 (Not Incorporated).txt +++ /dev/null @@ -1,212 +0,0 @@ -neo-27: set word at address. 27.xxxxxxxx.yyyyyyyy -If you only wanted to mess with dram (80000000 - 80800000) then only 8 bytes needed in action. This is way more dynamic though. You can fiddle with hardware registers if you *really* wanted to. Plus, the read routine is shorter if you just pull non-aligned addresses. - -Tested this bugger on console. If you're lucky it may work under emulation. - -size of type: -JR RA 03E00008 -ADDIU V1,R0,0009 24020009 -note: V1= #bytes in type. If an existing type has same size, can just link to it. - -action type code: -LWL A1,0001 (S1) 8A250001 -LWR A1,0003 (S1) 9A250004 -LUI RA,7F03 3C1F7F03 -LWL A0,0005 (S1) 8A240005 -LWR A0,0007 (S1) 9A240008 -ORI RA,RA,558C 37FF558C -SW A0,0000 (A1) ACA40000 -ADDIU S2,S2,0008 26520009 -JR RA 03E00008 -ADDIU S1,S1,0008 26310009 -note: remember, you can't have two LWL/LWR in a row! Be certain there's an op between them as above. - --and here's the code! -"New Action 27 #28" .off -8105219C 8040 -8105219E 002C -8140002C 03E0 -8140002E 0008 -81400030 2402 -81400032 0009 -81052594 8040 -81052596 0034 -81400034 8A25 -81400036 0001 -81400038 9A25 -8140003A 0004 -8140003C 3C1F -8140003E 7F03 -81400040 8A24 -81400042 0005 -81400044 9A24 -81400046 0008 -81400048 37FF -8140004A 558C -8140004C ACA4 -8140004E 0000 -81400050 2652 -81400052 0009 -81400054 03E0 -81400056 0008 -81400058 2631 -8140005A 0009 - - -Here's a few things you can do with it! Well, NTSC at least... -27.8002A8EB.0000000x folder you selected (sets which file is saved to) -27.8002A928.0000000x Autofail! At end of stage will say "aborted"(0) or "killed in action"(1). -27.8002CC68.0000000x hide or show guards - -27.80030AC4.0000000x turn alarm off (0) or on(1) -27.80030ACC.0000000x turn toxic gas off (0) or on(1) -27.80036444.0000000x start(1) or stop(0) those killer spawned explosions! -27.80036494.0000000x current display mode. - 1 starts intro camera, - 2 the fade-out to swirl (use this to restart swirl), - 3 the swirl (use this to restart fade-in), - 4 1st person mode - 7 any other camera position - 9 mp rotating camera (can't trigger it though) - -27.800364B4.0000000x disable(1) or enable(0) player pickups -27.8003689C.00000000 disable lower text displays -27.800368AC.00000000 disable upper text displays - - Heck, you can edit virtualy anything with this code! Change some values in the music table, mess with the sky or fog, autotrigger cheats, or anything else gs codes can do. - Hah! There's one! Set a console that enables and disables line mode. - ------------------------ ------------------------ - -Load Level List. set folder number (8002A8E8) to A0 -JAL 7F01F4A0 - this JAL 7F01DDC4, but can go right to that. -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -JAL 7F01DDC4 -SW S0,0018 (SP) -BEQ V0,R0,7F01F514 -OR S1,V0,R0 -LBU T6,0009 (V0) //test if debug 007 flag toggled! -OR S0,R0,R0 -ADDIU S2,R0,0014 -ANDI T7,T6,0001 -BEQ T7,R0,7F01F4E0 //if not flagged, branch -NOP -BEQ R0,R0,7F01F518 -ADDIU V0,R0,0001 -//7F01F4E0: -OR A0,S1,R0 -OR A1,S0,R0 -JAL 7F01DC60 -ADDIU A2,R0,0002 -OR A1,S0,R0 -JAL 7F01DC60 -ADDIU A2,R0,0002 -BEQ V0,R0,7F01F504 -NOP -ADDIU S0,S0,0001 -BNEL S0,S2,7F01F4E4 - OR A0,S1,R0 -BNEL S0,S2,7F01F518 - OR V0,R0,R0 -BEQ R0,R0,7F01F518 -ADDIU V0,R0,0001 -OR V0,R0,R0 -//7F01F518: -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - - -7F01DDC4: returns V0=pointer of current sram file! -ADDIU SP,SP,FFD8 -SW S1,001C (SP) -SW A0,0018 (SP) -SW S2,0020 (SP) -LUI S0,8007 -LUI S1,8007 -OR S2,A0,R0 -SW RA,0024 (SP) -ADDIU S1,S1,9B00 -ADDIU S0,S0,9920 -JAL 7F01D954 -OR A0,S0,R0 -//7F01DDF4: -BNEL V0,R0,7F01DE18 - ADDIU S0,S0,0060 -JAL 7F01D8C8 -OR A0,S0,R0 -BNEL V0,S2,7F01DE18 - ADDIU S0,S0,0060 -BEQ R0,R0,7F01DE38 -OR V0,S0,R0 -//7F01DE14: -ADDIU S0,S0,0060 -//7F01DE18: -BNE S0,S1,7F01DDEC -NOP -OR V0,R0,R0 -LUI V0,8007 -BEQ R0,R0,7F01DE38 -ADDIU V0,V0,9B00 -//7F01DE38: -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - - -7F01D954: -LBU V0,0008 (A0) -ANDI T6,V0,0080 -JR RA -SLTU V0,R0,T6 - -7F01D8C8: -LBU V0,0008 (A0) -ANDI T6,V0,0007 -JR RA -OR V0,T6,R0 - ------------------------------ ------------------------------ ------------------------------ -New type: if address, return - -??.##.xxxxxxxx.yyyyyyyy.rr - -## some feature like type of comparison -xxxxxxxx target address -yyyyyyyy comparison value -rr return value - -LWL A1,0002 (S1) 8A250002 -LWR A1,0005 (S1) 9A250005 -LUI RA,7F03 3C1F7F03 -LWL A0,0006 (S1) 8A240006 -LWR A0,0009 (S1) 9A240009 - -LW A1,0000 (A1) 4C - -ORI RA,RA,558C 37FF558C -ADDIU S2,S2,0008 26520009 -JR RA 03E00008 -ADDIU S1,S1,0008 26310009 - - -test if toggled: and, then should match original value -AND A0,A1,A0 -BEQ A0,A1, - -test if untoggled: -AND A0,A1,A0 -BGTZ A0, \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/crazy action block hacks (Not Incorporated).txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/crazy action block hacks (Not Incorporated).txt deleted file mode 100644 index ee60d9a..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Action Block Microcode/crazy action block hacks (Not Incorporated).txt +++ /dev/null @@ -1,145 +0,0 @@ -7F039D48 EA stop time! - -> toggle time -USA 0x6E878 -JAP 0x6EBB8 -PAL 0x6C7F8 - -3C0D8003 LUI T5,8003 -8DAD64A0 LW T5,64A0 (T5) //T5=800364A0 pause timer=1 - //64E0-J/19F0-P -240E0001 ADDIU T6,R0,0001 //PAL ADDIU T9,R0,0001 -3C018003 LUI AT,8003 - BNEZ T5,7F039D64 -> XOR T6,T5,T6 - 01AE7026 - PAL XOR T9,T5,T9 - 01B9C826 -26520001 ADDIU S2,S2,0001 -AC2E64A0 SW T6,64A0 (AT) --7F039D64: -1000EE09 BEQ R0,R0,7F03558C -26310001 ADDIU S1,S1,0001 - -USA 06E888 0004 01AE7026 -JAP 06EBC8 0004 01AE7026 -PAL 06C808 0004 01B9C826 - --- -7F039DA8 EC disable player pickups - -> toggle player pickups -USA 0x6E8D8 -JAP 0X6EC18 -PAL 0x6C858 -24090001 ADDIU T1,R0,0001 -> LUI AT,8003 -3C018003 LUI AT,8003 -> LW T1,64B4 (AT) -AC2964B4 SW T1,64B4 (AT) -> XORI T1,T1,0001 -26520001 ADDIU S2,S2,0001 -1000EDF4 BEQ R0,R0,7F03558C -> BEQ R0,R0,7F039DD4 (+6) -26310001 ADDIU S1,S1,0001 -> SW T1,64B4 (AT) - -3C018003 LUI AT,8003 -8C2964B4 LW T1,64B4 (AT) /64F4-J/1A04-P -39290001 XORI T1,T1,0001 -26520001 ADDIU S2,S2,0001 -10000006 BEQ R0,R0,7F039DD4 -AC2964B4 SW T1,64B4 (AT) /64F4-J/1A04-P - -USA 06E8D8 0018 3C0180038C2964B4392900012652000110000006AC2964B4 -JAP 06EC18 0018 3C0180038C2964F4392900012652000110000006AC2964F4 -PAL 06EC18 0018 3C0180038C291A04392900012652000110000006AC291A04 - -7F03A020 F6 BLOW THE SNOT OUT OF EVERYTHING - -> toggle explosions -(given is 7F08BFC4) -USA 0xC0Af4 -JAP 0xC13BC -PAL 0xBECC4 - -JAL 7F08BFC4 -OR A0,R0,R0 -... - -7F08BFC4: accepts A0=timer offset -3C0F8005 LUI T7,8005 -8DEF837C LW T7,837C (T7) //T7=8004837C -240E0001 ADDIU T6,R0,0001 -3C018003 LUI AT,8003 -AC2E6444 SW T6,6444 (AT) //1->80036444 trigger explosions -3C018008 LUI AT,8008 -008FC021 ADDU T8,A0,T7 -AC38999C SW T8,999C (AT) -3C018008 LUI AT,8008 -03E00008 JR RA -AC2099A0 SW R0,99A0 (AT) //0->800799A0 -PAL: - - -NEW: -3C0F8005 LUI T7,8005 //8004-P -8DEF837C LW T7,837C (T7) //83AC-J/0FFC-P -3C018003 *LUI AT,8003 -8C2E6444 *LW T6,6444 (AT) //6484-J/1994-P -39CE0001 *XORI T6,T6,0001 -AC2E6444 *SW T6,6444 (AT) //6484-J/1994-P -3C018008 *LUI AT,8008 //8007-P -008FC021 *ADDU T8,A0,T7 -AC38999C *SW T8,999C (AT) //99DC-J/847C-P -03E00008 JR RA -AC2099A0 SW R0,99A0 (AT) //99E0-J/8480-P - -USA 0C0AFC 001C 3C0180038C2E644439CE0001AC2E64443C018008008FC021AC38999C -JAP 0C13C4 001C 3C0180038C2E648439CE0001AC2E64843C018008008FC021AC3899DC -PAL 0BECC8 001C 3C0180038C2E199439CE0001AC2E19943C018007008FC021AC38847C - - - - -7F03A0D4 F9 set "Killed in Action" - -> toggle "Killed in Action" -USA 0x6EC04 -JAP 0x6EF44 -PAL 0x6CB84 - -240F0001 ADDIU T7,R0,0001 -//PAL 240E0001 ADDIU T6,R0,0001 -3C018003 LUI AT,8003 -//PAL 3C018002 LUI AT,8002 -AC2FA928 SW T7,A928 (AT) //1->8002A928 -//PAL AC2E5E78 SW T6,5E78 (AT) -//RETURN... -26520001 ADDIU S2,S2,0001 -1000ED29 BEQ R0,R0,7F03558C -26310001 ADDIU S1,S1,0001 - -NEW: -3C018003 *LUI AT,8003 -8C2FA928 *LW T7,A928 (AT) //A968-J -39EF0001 *XORI T7,T7,0001 -26520001 ADDIU S2,S2,0001 -10000004 *BEQ R0,R0,7F03A0F8 -AC2FA928 *SW T7,A928 (AT) //A968-J -PAL: -3C018002 *LUI AT,8002 -8C2E5E78 *LW T6,5E78 (AT) -39CE0001 *XORI T6,T6,0001 -26520001 ADDIU S2,S2,0001 -10000004 *BEQ R0,R0,+4 -AC2E5E78 *SW T6,5E78 (AT) - - - -USA 06EC04 000C 3C0180038C2FA92839EF0001 - 06EC16 0006 0004AC2FA928 -JAP 06EF44 000C 3C0180038C2FA96839EF0001 - 06EF56 0006 0004AC2FA968 -PAL 06CB84 000C 3C0180028C2E5E7839CE0001 - 06CB96 0006 0004AC2E5E78 - - -xori: 1 to enable/disable - -38st0001 - ---------------------- -try to get zip folders to appear in explorer pane: -HKLM\SOFTWARE\Classes\CLSID\{E88DCCE0-B7B3-11D1-A9F0-00AA0060FA31}\ShellFolder -Attributes -> 200001A0 from 000001A0 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/3A2F4 - 3AD20 Intro Block Handler Rewrite.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/3A2F4 - 3AD20 Intro Block Handler Rewrite.txt deleted file mode 100644 index d031df1..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/3A2F4 - 3AD20 Intro Block Handler Rewrite.txt +++ /dev/null @@ -1,552 +0,0 @@ -7F0057C4 3A2F4 Intro Block Handler -27BDFF68 ADDIU SP,SP,FF68 -AFBF0034 SW RA,0034 (SP) -AFB20030 SW S2,0030 (SP) -AFB1002C SW S1,002C (SP) -AFB00028 SW S0,0028 (SP) -F7B60020 SDC1 F22,0020 (SP) -F7B40018 SDC1 F20,0018 (SP) -3C118003 -LUI S1,8003 -8E21A780 *LW AT,A780 (S1) -AFA1008C *SW AT,008C (SP) -8E21A784 *LW AT,A784 (S1) -AFA10090 *SW AT,0090 (SP) -8E21A788 *LW AT,A788 (S1) -AFA10094 *SW AT,0094 (SP) -AE20A928 *SW R0,A928 (S1) -26246424 *ADDIU A0,S1,6424 - *JAL initializewords-addy ;init 80036424-800364C0 -262564C4 *ADDIU A1,S1,64C4 -3C108007 LUI S0,8007 -8E105D08 LW S0,5D08 (S0) -AFA0007C SW R0,007C (SP) -0C001A57 JAL 7000695C -AFA00088 *SW R0,0088 (SP) -24010036 ADDIU AT,R0,0036 -1441000A BNE V0,AT,7F005888 -//7F005860: -3C040004 LUI A0,0004 -34846EA0 ORI A0,A0,6EA0 -0C0025C8 JAL 70009720 ;allocate A0 bytes in bank A1 -24050004 ADDIU A1,R0,0004 -244A003F ADDIU T2,V0,003F -2401FFC0 ADDIU AT,R0,FFC0 -01415824 AND T3,T2,AT -240C0001 ADDIU T4,R0,0001 -AE2B6428 *SW T3,6428 (S1) -AE2C6430 *SW T4,6430 (S1) -//7F005888: can be combined with initializations above! -240D0001 ADDIU T5,R0,0001 -AE2D64A8 *SW T5,64A8 (S1) -AE2D64B0 SW T5,64B0 (S1) -AE206514 SW R0,6514 (S1) ;reset selected intro animation -3C028005 *LUI V0,8005 -C450F1A8 *LWC1 F16,F1A8 (V0) -E63065A8 *SWC1 F16,65A8 (S1) -3C028008 LUI V0,8008 -AC409990 *SW R0,9990 (V0) -AC409994 *SW R0,9994 (V0) -AC409998 *SW R0,9998 (V0) -AC409A20 *SW R0,9A20 (V0) -AC409A24 SW R0,9A24 (V0) ;reset watch time -AC409C28 *SW R0,9C28 (V0) -24519A24 *ADDIU S1,V0,9A24 -8C52A0B0 *LW S2,A0B0 (V0) -AC4099E4 *SW R0,99E4 (V0) ;reset init.left item -120000CB` BEQ S0,R0,7F005DF4 ;if nothing to parse, don't even try! -AC4099E0 *SW R0,99E0 (V0) ;reset init.right item -3C0142C8 LUI AT,42C8 -4481B000 MTC1 AT,F22 -3C014780 LUI AT,4780 -4481A000 MTC1 AT,F20 -// loop for each; stop if over limit -92020003 *LBU V0,0003 (S0) -2C41000B *SLTIU AT,V0,000B ;TRUE if 0-9 -102000C3 *BEQ AT,R0,7F005DF4 ;quit if invalid type -3C017F00 *LUI AT,7F00 -0002C080 SLL T8,V0,0x2 -0038C021 *ADDU T8,AT,T8 -8F185F08` *LW T8,5F08 (T8) ;T8=handler for type; 9 will be 7F005DF4 -00220821 *ADDU AT,AT,V0 -90215EF8` *LBU AT,5EF8 (AT) ;AT=size of command V0 -03000008 JR T8 -02018021 *ADDU S0,S0,AT ;S0+=AT: add size of command -//7F005A7C: type 0: spawn -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC LW A0,FFFC (S0) -1040FFF2 *BEQ V0,R0,-loop -3C018008 LUI AT,8008 -8C229C28 LW V0,9C28 (AT) -8E08FFF8 LW T0,FFF8 (S0) -3C0A8007 LUI T2,8007 -290F2710 SLTI T7,T0,2710 -55E00004 BNEL T7,R0,7F005AB0 -3409002C ORI T1,R0,002C -34090044 ORI T1,R0,0044 -254A0004 ADDIU T2,T2,0004 -2508D8F0 ADDIU T0,T0,D8F0 -//7F005AB0: -01280019 MULTU T1,T0 -00027880 SLL T7,V0,0x2 -8D4A5D18 LW T2,5D18 (T2) -002F7821 ADDU T7,AT,T7 -00004812 MFLO T1 -012A4021 ADDU T0,T1,T2 -ADE89C2C SW T0,9C2C (T7) -24420001 ADDIU V0,V0,0001 -1000FFDF BEQ R0,R0,-loop -AC229C28 SW V0,9C28 (AT) -//7F005AD8: type 1: item(s) -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC *LW A0,FFFC (S0) -1040FFDB *BEQ V0,R0,-loop -00000000 *NOP -0FC015C4 JAL 7F005710 -8E04FFF4 LW A0,FFF4 (S0) -0FC015C4 JAL 7F005710 -8E04FFF8 LW A0,FFF8 (S0) -8FAE007C LW T6,007C (SP) -8E04FFF4 LW A0,FFF4 (S0) -15C00006 BNE T6,R0,7F005B18 -8E05FFF8 LW A1,FFF8 (S0) -//7F005B04: -3C018008 LUI AT,8008 -AC2499E0 SW A0,99E0 (AT) -5CA00001 BGTZL A1,7F005B14 -AC2599E4 SW A1,99E4 (AT) -AFA1007C SW AT,007C (SP) ;only has to be nonzero -//7F005B18: -3C187F09 LUI T8,7F09 -04A20002 BLTZL A1,7F005B28 -2718C488 ADDIU T8,T8,C488 -2718C50C ADDIU T8,T8,C50C -//7F005B28: -0300F809 JALR RA,T8 -00000000 NOP -1000FFC6 BEQ R0,R0,-loop -00000000 NOP -//7F005B38: type 2: ammo -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC *LW A0,FFFC (S0) -1040FFC2 *BEQ V0,R0,-loop -8E04FFF4 LW A0,FFF4 (S0) -0FC1A44C JAL 7F069130 -8E05FFF8 LW A1,FFF8 (S0) -1000FFBE BEQ R0,R0,-loop -00000000 NOP -//7F005BA0: type 3: swirling camera -0FC26C54 JAL 7F09B150 -3C018003 LUI AT,8003 -2603FFE0 *ADDIU V1,S0,FFE0 ;V1=p->data -8C2964AC LW T1,64AC (AT) -51200001 BEQL T1,R0,7F005BB4 -AC2364AC *SW V1,64AC (AT) -//7F005BB4: -1440FFB6 BNE V0,R0,-loop -8C6A0008 *LW T2,0008 (V1) -8C6B000C *LW T3,000C (V1) -8C6C0010 *LW T4,0010 (V1) -448A9000 MTC1 T2,F18 -448B4000 MTC1 T3,F8 -8C6D0014 *LW T5,0014 (V1) -46809120 CVT.S.W F4,F18 -448C9000 MTC1 T4,F18 -8C790018 *LW T9,0018 (V1) -468042A0 CVT.S.W F10,F8 -448D4000 MTC1 T5,F8 -46142183 DIV.S F6,F4,F20 -46809120 CVT.S.W F4,F18 -44999000 MTC1 T9,F18 -46145403 DIV.S F16,F10,F20 -E4660008 *SWC1 F6,0008 (V1) -468042A0 CVT.S.W F10,F8 -46142183 DIV.S F6,F4,F20 -E470000C *SWC1 F16,000C (V1) -46809120 CVT.S.W F4,F18 -46145403 DIV.S F16,F10,F20 -E4660010 *SWC1 F6,0010 (V1) -46142183 DIV.S F6,F4,F20 -E4700014 *SWC1 F16,0014 (V1) -1000FF9D BEQ R0,R0,-loop -E4660018 *SWC1 F6,0018 (V1) -//7F005C28: type 4: animation -8E18FFFC LW T8,FFFC (S0) -3C018003 LUI AT,8003 -1000FF99 BEQ R0,R0,-loop -AC386514 SW T8,6514 (AT) -//7F005C3C: type 5: char/cuff -3C018005 LUI AT,8005 -820EFFFC LB T6,FFFC (S0) -A02E4FE5 SB T6,4FE5 (AT) -820EFFFD LB T6,FFFD (S0) -A02E4FE6 SB T6,4FE6 (AT) -820EFFFE LB T6,FFFE (S0) -A02E4FE7 SB T6,4FE7 (AT) -820EFFFF LB T6,FFFF (S0) -1000FF86 BEQ R0,R0,-loop -AE4E041C SW T6,041C (S2) -//7F005C50: type 6: fixed camera -0FC26C54 JAL 7F09B150 -3C018003 LUI AT,8003 -2603FFD8 *ADDIU V1,S0,FFD8 ;V1=p->original data -8C2864B8 LW T0,64B8 (AT) -8C2964BC LW T1,64BC (AT) -AC2364B8 *SW V1,64B8 (AT) -252A0001 ADDIU T2,T1,0001 -1440FF8C BNE V0,R0,-loop -AC2A64BC SW T2,64BC (AT) -AC680024 *SW T0,0024 (V1) -8C6B0004 *LW T3,0004 (V1) -8C6C0008 *LW T4,0008 (V1) -8C6D000C *LW T5,000C (V1) -448B4000 MTC1 T3,F8 -448C9000 MTC1 T4,F18 -8C790010 *LW T9,0010 (V1) -468042A0 CVT.S.W F10,F8 -448D4000 MTC1 T5,F8 -8C780014 *LW T8,0014 (V1) -46809120 CVT.S.W F4,F18 -44999000 MTC1 T9,F18 -46165403 DIV.S F16,F10,F22 -468042A0 CVT.S.W F10,F8 -44984000 MTC1 T8,F8 -46162183 DIV.S F6,F4,F22 -E4700004 *SWC1 F16,0004 (V1) -46809120 CVT.S.W F4,F18 -46165403 DIV.S F16,F10,F22 -E4660008 *SWC1 F6,0008 (V1) -468042A0 CVT.S.W F10,F8 -46142183 DIV.S F6,F4,F20 -E470000C *SWC1 F16,000C (V1) -46145403 DIV.S F16,F10,F20 -E4660010 *SWC1 F6,0010 (V1) -9464001E *LHU A0,001E (V1) -1080FF6A BEQ A0,R0,-loop -E4700014 *SWC1 F16,0014 (V1) -0FC30776 JAL 7F0C1DD8 -00000000 NOP -9604FFFA *LHU A0,FFFA (S0) ;+22 -1080FF65 BEQ A0,R0,-loop -AE02FFF4 *SW V0,FFF4 (S0) ;+1C -0FC30776 JAL 7F0C1DD8 -00000000 NOP -1000FF61 BEQ R0,R0,-loop -AE02FFF8 *SW V0,FFF8 (S0) ;+20 -//7F005D14: type 7: time -00004025 *OR T0,R0,R0 -8E04FFFC LW A0,FFFC (S0) -18800008 *BLEZ A0,7F005D4C -2401003C ADDIU AT,R0,003C -0081001A DIV A0,AT -00007810 MFHI T7 -000F40C0 SLL T0,T7,0x3 -010F4023 SUBU T0,T0,T7 -00084140 SLL T0,T0,0x5 -010F4021 ADDU T0,T0,T7 -00084100 SLL T0,T0,0x4 -//7F005D4C: -8E04FFF8 *LW A0,FFF8 (S0) -18800008 *BLEZ A0,+skip -2401000C ADDIU AT,R0,000C -0081001A *DIV A0,AT -00005810 MFHI T3 -3C010003 LUI AT,0003 -34214BC0 ORI AT,AT,4BC0 -01610019 MULTU T3,AT -00006812 *MFLO T5 -010D4021 *ADDU T0,T0,T5 -//7F005D84: -1000FF4A BEQ R0,R0,-loop -AE280000 *SW T0,0000 (S1) -//7F005D8C: type 8: credits -3C198007 LUI T9,8007 -8F395D28 LW T9,5D28 (T9) -8E18FFFC LW T8,FFFC (S0) -3C018003 LUI AT,8003 -03381021 ADDU V0,T9,T8 -1000FF43 BEQ R0,R0,-loop ;use if below not included... -AC226440 SW V0,6440 (AT) -//7F005DBC: to be perfectly honest, I don't see the point in this bit here -; LHU T0,000C (V0) -; *BNE T0,R0,7F005DBC -; ADDIU V0,V0,000C -; LHU T1,0002 (V0) -; *BNE T1,R0,7F005DBC -; *NOP -//7F005DD8: -; BEQ R0,R0,-loop -; *NOP -//7F005DE4: NEW! type A: respawn distance -8E04FFF8 LW A0,FFF8 (S0) ;A0=1st word, containing type and flags -0FC017AD JAL 7F006EB4 ;smartspawn -00042202 SRL A0,A0,0x8 ;A0=x part of xxxxxx.0A -1040FF3E BEQ V0,R0,-loop -8E02FFFC LW V0,FFFC (S0) ;V0=distance value, which is actually a float -3C018005` LUI AT,8005 -1000FF3B BEQ R0,R0,-loop -AC225290` SW V0,5290 (AT) ;save distance override -//7F005DF4: type 9 targets here, as this ends above -3C018003 LUI AT,8003 -8C2264B8 *LW V0,64B8 (AT) -10400010 BEQ V0,R0,7F005E50 -00000000 *NOP -0C002914 JAL 7000A450 -AC2264C0 SW V0,64C0 (AT) -3C018003 *LUI AT,8003 -8C2B64BC *LW T3,64BC (AT) -004B001B DIVU V0,T3 -00001810 MFHI V1 -15600002 BNE T3,R0,7F005E30 -00000000 NOP -0007000D BREAK 00001C00 -18600005 BLEZ V1,7F005E50 -//7F005E34: -8C2A64C0 *LW T2,64C0 (AT) -2463FFFF ADDIU V1,V1,FFFF -8D4C0024 LW T4,0024 (T2) -1C60FFFC BGTZ V1,7F005E34 -AC2C64C0 SW T4,64C0 (AT) -//7F005E50: -0FC23122 JAL 7F08C488 -24040001 ADDIU A0,R0,0001 -8FAD007C LW T5,007C (SP) -3C088008 LUI T0,8008 -15A00002 BNE T5,R0,7F005E70 -24190001 ADDIU T9,R0,0001 -AD1999E0 SW T9,99E0 (T0) -//7F005E70: -3C018005 LUI AT,8005 -AE400078 *SW R0,0078 (S2) -C424F1D0 LWC1 F4,F1D0 (AT) -E644007C *SWC1 F4,007C (S2) -8D089C28 LW T0,9C28 (T0) -19000027 *BLEZ T0,7F005F4C -AE400080 *SW R0,0080 (S2) -// -0FC26919 JAL 7F09A464 -00000000 NOP -28410002 SLTI AT,V0,0002 -54200008 *BNEL AT,R0,7F005ED8 -00001825 OR V1,R0,R0 -3C098008 LUI T1,8008 -8D299C28 LW T1,9C28 (T1) -59200004 BLEZL T1,7F005ED8 -00001825 OR V1,R0,R0 -0FC1E43C JAL 7F0790F0 -00000000 NOP -00021825 OR V1,V0,R0 -//7F005ED8: -3C0A8008 LUI T2,8008 -00035880 SLL T3,V1,0x2 -016A8821 ADDU S1,T3,T2 -8E309C2C LW S0,9C2C (S1) -C6080000 LWC1 F8,0000 (S0) -E7A8008C SWC1 F8,008C (SP) -C60A0008 LWC1 F10,0008 (S0) -8FA5008C LW A1,008C (SP) -E7AA0094 SWC1 F10,0094 (SP) -8E040028 LW A0,0028 (S0) -8FA60094 LW A2,0094 (SP) -0FC20358 JAL 7F080D60 -AFA40084 SW A0,0084 (SP) -46000506 MOV.S F20,F0 -C65029BC *LWC1 F16,29BC (S2) -46008480 ADD.S F18,F16,F0 -E7B20090 SWC1 F18,0090 (SP) -E6400070 *SWC1 F0,0070 (S2) -C60C0018 LWC1 F12,0018 (S0) -0FC16A8C JAL 7F05AA30 -C60E0020 LWC1 F14,0020 (S0) -3C018005 LUI AT,8005 -C424F1D4 LWC1 F4,F1D4 (AT) -46002181 SUB.S F6,F4,F0 -10000010 BEQ R0,R0,7F005F8C -E7A60088 SWC1 F6,0088 (SP) -//7F005F4C: -27A4008C ADDIU A0,SP,008C -27A50090 ADDIU A1,SP,0090 -27A60094 ADDIU A2,SP,0094 -0FC2BEDE JAL 7F0AFB78 -3C0741F0 LUI A3,41F0 -AFA20084 SW V0,0084 (SP) -00402025 OR A0,V0,R0 -8FA5008C LW A1,008C (SP) -0FC20358 JAL 7F080D60 -8FA60094 LW A2,0094 (SP) -46000506 MOV.S F20,F0 -C64829BC *LWC1 F8,29BC (S2) -46004280 ADD.S F10,F8,F0 -E7AA0090 SWC1 F10,0090 (SP) -E6400070 *SWC1 F0,0070 (S2) -//7F005F8C: -3C0143B4 LUI AT,43B4 -44819000 MTC1 AT,F18 -C7B00088 LWC1 F16,0088 (SP) -3C018005 LUI AT,8005 -C426F1D8 LWC1 F6,F1D8 (AT) -46128102 MUL.S F4,F16,F18 -27A5008C ADDIU A1,SP,008C -46062203 DIV.S F8,F4,F6 -E6480148 *SWC1 F8,0148 (S2) -E6540074 *SWC1 F20,0074 (S2) -C42AF1DC LWC1 F10,F1DC (AT) -460AA403 DIV.S F16,F20,F10 -E650006C *SWC1 F16,006C (S2) -8FA60084 LW A2,0084 (SP) -0FC1F1CC JAL 7F07C730 -26440488 *ADDIU A0,S2,0488 -0FC15FAB JAL 7F057EAC -C7AC0088 LWC1 F12,0088 (SP) -46000487 NEG.S F18,F0 -E6520498 *SWC1 F18,0498 (S2) -AE40049C *SW R0,049C (S2) -0FC15FA8 JAL 7F057EA0 -C7AC0088 LWC1 F12,0088 (SP) -3C018003 LUI AT,8003 -E64004A0 *SWC1 F0,04A0 (S2) -0FC225C6 JAL 7F089718 -C42C64D0 LWC1 F12,64D0 (AT) -3C018008 LUI AT,8008 -24249DA0 ADDIU A0,9DA0 (AT) - *JAL initializewords-addy ;initialize 80079DA0-80079DC8 -24259DCC *ADDIU A1,AT,9DCC -//7F006054: -0FC228CC JAL 7F08A330 -00000000 NOP -0FC22A40 JAL 7F08A900 -00000000 NOP -0FC0E90C JAL 7F03A430 -00000000 NOP -240A0006 ADDIU T2,R0,0006 -AE4200A8 *SW V0,00A8 (S2) -A04A0000 SB T2,0000 (V0) -AC400004 SW R0,0004 (V0) -C7A0008C LWC1 F0,008C (SP) -E6400408 *SWC1 F0,0408 (S2) -E4400008 SWC1 F0,0008 (V0) -C7A00090 LWC1 F0,0090 (SP) -E640040C *SWC1 F0,040C (S2) -E440000C SWC1 F0,000C (V0) -C7A00094 LWC1 F0,0094 (SP) -E6400410 *SWC1 F0,0410 (S2) -E4400010 SWC1 F0,0010 (V0) -8FAD0084 LW T5,0084 (SP) -AC4D0014 SW T5,0014 (V0) -0FC0E929 JAL 7F03A4A4 -00402025 OR A0,V0,R0 -0FC0E901 JAL 7F03A404 -8E4400A8 *LW A0,00A8 (S2) -3C018005 LUI AT,8005 -C420F1E0 LWC1 F0,F1E0 (AT) -C64604B4 *LWC1 F6,04B4 (S2) -46003203 DIV.S F8,F6,F0 -E64803B8 *SWC1 F8,03B8 (S2) -C64A04B8 *LWC1 F10,04B8 (S2) -46005403 DIV.S F16,F10,F0 -E65003BC *SWC1 F16,03BC (S2) -C65204BC *LWC1 F18,04BC (S2) -46009103 DIV.S F4,F18,F0 -0FC26919 JAL 7F09A464 -E64403C0 *SWC1 F4,03C0 (S2) -24040001 ADDIU A0,R0,0001 -10440006 BEQ V0,A0,7F006114 -3C018003 LUI AT,8003 -8C2264B8 LW V0,64B8 (AT) -8C2164AC LW AT,64AC (AT) -00220825 OR AT,AT,V0 -50200001 BEQL AT,R0,7F006114 -24040009 ADDIU A0,R0,0009 -//7F006114: -0FC1EA6E JAL 7F07A9B8 -3C107F00 LUI S0,7F00 ;nonreliant version 00000000 NOP -3C048003 LUI A0,8003 -00001025 OR V0,R0,R0 -//7F006124: note: this section reliant on extended MP death animation hack -00025040 SLL T2,V0,0x1 ;nonreliant version 00025080 SLL T2,V0,0x2 -020A5021 ADDU T2,S0,T2 ;nonreliant version 008A5021 ADDU T2,A0,T2 -954D5F50 LHU T5,5F50 (T2) ;nonreliant version 8D4D64D8 LW T5,64D8 (T2) -55A0FFFC BNEL T5,R0,7F006124 -24420001 ADDIU V0,V0,0001 -AC82650C SW V0,650C (A0) -AC806510 SW R0,6510 (A0) -24180001 ADDIU T8,R0,0001 -AE580420 SW T8,0420 (S2) -AE400424 SW R0,0424 (S2) -AE400428 SW R0,0428 (S2) -//7F006154: return -8FBF0034 LW RA,0034 (SP) -8FB20030 LW S2,0030 (SP) -8FB1002C LW S1,002C (SP) -8FB00028 LW S0,0028 (SP) -D7B60020 LDC1 F22,0020 (SP) -D7B40018 LDC1 F20,0018 (SP) -03E00008 JR RA -27BD0098 ADDIU SP,SP,0098 - -//7F005F00: 3AA30 sizes of intro commands -0C 10 10 20 08 08 28 0C 08 04 [08] [04 04040404 ...] - -//7F005F10: 3AA40 TLB pointer table -7F0058DC 7F005938 7F00599C 7F0059BC 7F005A40 7F005A50 7F005A78 7F005B30 7F005B8C 7F005BC8 7F005BA8 - -//7F005F50: 3AA80 new MP death animation table -0019 001A 001B 001C 001D 001E 001F 0020 0021 0022 0023 0024 0025 0039 003C 0000 - -//7F005F70: 3AAA0 - - -7F005EB4 3A9E4 V0=TRUE if passed smartspawn test - accepts: A0=set + smartspawn flags -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -JAL 7F09A464 -ADDIU AT,R0,0040 -JAL 7F0BFC10 -SLLV T2,AT,V0 -JAL 7F0C0A20 -ADDIU T0,V0,0006 -SLLV T0,AT,T0 -OR T2,T0,T2 -ANDI T0,A0,007F -BNE V0,T0,7F0061E0 -AND T0,T2,A0 -BEQL T0,R0,7F0061E4 -ADDIU V0,R0,0001 -OR V0,R0,R0 -LW RA,001C (SP) -JR RA -ADDIU SP,SP,0020 - -eliminate: 7F009B2C 3E65C -anathema: 8004F1AC - 8004F1D0 - -Correction to existing MP death animation code: -//7F080BD8: B5708 -3C0A7F00 LUI T2,7F00 -//7F080BF8: B5728 -854A5F50 LH T2,5F50 (T2) - -//7F08B3AC: BFEDC -3C198003 *LUI T9,8003 -8F27650C *LW A3,650C (T9) -00002825 OR A1,R0,R0 -00008025 OR S0,R0,R0 -18E00010 BLEZ A3,+etc -3C027F00 *LUI V0,7F00 -24425F50 *ADDIU V0,V0,5F50 - -//7F08B43C: BFF6C -3C0E7F00 *LUI T7,7F00 -01CE7821 *ADDU T7,T7,T6 -85EF5F50 *LH T7,5F50 (T7) ;T7=ani# -000F7880 +SLL T7,T7,0x2 -8E280000 +LW T0,0000 (S1) ;T0=specific playerdata -3C013F00 +LUI AT,3F00 -01F84821 +ADDU T1,T7,T8 -8D299D6C +LW T1,9D6C (T1) ;80029D6C+ -AFA9009C +SW T1,009C (SP) -44816000 +MTC1 AT,F12 -C7A20094 +LWC1 F2,0094 (SP) -00000000 NOP ;last of two empty lines, in case you get more brilliant ideas - -anathema: 800364D8 - 80036508 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/3A2F4 - 3AD20 older intro block handler (smartspawns 3).txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/3A2F4 - 3AD20 older intro block handler (smartspawns 3).txt deleted file mode 100644 index 540ec36..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/3A2F4 - 3AD20 older intro block handler (smartspawns 3).txt +++ /dev/null @@ -1,515 +0,0 @@ -7F0057C4 3A2F4 Intro Block Handler -27BDFF68 ADDIU SP,SP,FF68 -AFBF0034 SW RA,0034 (SP) -AFB20030 SW S2,0030 (SP) -AFB1002C SW S1,002C (SP) -AFB00028 SW S0,0028 (SP) -F7B60020 SDC1 F22,0020 (SP) -F7B40018 SDC1 F20,0018 (SP) -3C118003 -LUI S1,8003 -8E21A780 *LW AT,A780 (S1) -AFA1008C *SW AT,008C (SP) -8E21A784 *LW AT,A784 (S1) -AFA10090 *SW AT,0090 (SP) -8E21A788 *LW AT,A788 (S1) -AFA10094 *SW AT,0094 (SP) -AE20A928 *SW R0,A928 (S1) -26246424 *ADDIU A0,S1,6424 - *JAL initializewords-addy ;init 80036424-800364C0 -262564C4 *ADDIU A1,S1,64C4 -3C108007 LUI S0,8007 -8E105D08 LW S0,5D08 (S0) -AFA0007C SW R0,007C (SP) -0C001A57 JAL 7000695C -AFA00088 *SW R0,0088 (SP) -24010036 ADDIU AT,R0,0036 -1441000A BNE V0,AT,7F005888 -//7F005860: -3C040004 LUI A0,0004 -34846EA0 ORI A0,A0,6EA0 -0C0025C8 JAL 70009720 ;allocate A0 bytes in bank A1 -24050004 ADDIU A1,R0,0004 -244A003F ADDIU T2,V0,003F -2401FFC0 ADDIU AT,R0,FFC0 -01415824 AND T3,T2,AT -240C0001 ADDIU T4,R0,0001 -AE2B6428 *SW T3,6428 (S1) -AE2C6430 *SW T4,6430 (S1) -//7F005888: can be combined with initializations above! -240D0001 ADDIU T5,R0,0001 -AE2D64A8 *SW T5,64A8 (S1) -AE2D64B0 SW T5,64B0 (S1) -AE206514 SW R0,6514 (S1) ;reset selected intro animation -3C028005 *LUI V0,8005 -C450F1A8 *LWC1 F16,F1A8 (V0) -E63065A8 *SWC1 F16,65A8 (S1) -3C028008 LUI V0,8008 -AC409990 *SW R0,9990 (V0) -AC409994 *SW R0,9994 (V0) -AC409998 *SW R0,9998 (V0) -AC409A20 *SW R0,9A20 (V0) -AC409A24 SW R0,9A24 (V0) ;reset watch time -AC409C28 *SW R0,9C28 (V0) -24519A24 *ADDIU S1,V0,9A24 -8C52A0B0 *LW S2,A0B0 (V0) -AC4099E4 *SW R0,99E4 (V0) ;reset init.left item -120000CB` BEQ S0,R0,7F005DF4 ;if nothing to parse, don't even try! -AC4099E0 *SW R0,99E0 (V0) ;reset init.right item -3C0142C8 LUI AT,42C8 -4481B000 MTC1 AT,F22 -3C014780 LUI AT,4780 -4481A000 MTC1 AT,F20 -// loop for each; stop if over limit -92020003 *LBU V0,0003 (S0) -2C41000B *SLTIU AT,V0,000B ;TRUE if 0-9 -102000C3 *BEQ AT,R0,7F005DF4 ;quit if invalid type -3C017F00 *LUI AT,7F00 -0002C080 SLL T8,V0,0x2 -0038C021 *ADDU T8,AT,T8 -8F185F08` *LW T8,5F08 (T8) ;T8=handler for type; 9 will be 7F005DF4 -00220821 *ADDU AT,AT,V0 -90215EF8` *LBU AT,5EF8 (AT) ;AT=size of command V0 -03000008 JR T8 -02018021 *ADDU S0,S0,AT ;S0+=AT: add size of command -//7F005A7C: type 0: spawn -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC LW A0,FFFC (S0) -1040FFF2 *BEQ V0,R0,-loop -3C018008 LUI AT,8008 -8C229C28 LW V0,9C28 (AT) -8E08FFF8 LW T0,FFF8 (S0) -3C0A8007 LUI T2,8007 -290F2710 SLTI T7,T0,2710 -55E00004 BNEL T7,R0,7F005AB0 -3409002C ORI T1,R0,002C -34090044 ORI T1,R0,0044 -254A0004 ADDIU T2,T2,0004 -2508D8F0 ADDIU T0,T0,D8F0 -//7F005AB0: -01280019 MULTU T1,T0 -00027880 SLL T7,V0,0x2 -8D4A5D18 LW T2,5D18 (T2) -002F7821 ADDU T7,AT,T7 -00004812 MFLO T1 -012A4021 ADDU T0,T1,T2 -ADE89C2C SW T0,9C2C (T7) -24420001 ADDIU V0,V0,0001 -1000FFDF BEQ R0,R0,-loop -AC229C28 SW V0,9C28 (AT) -//7F005AD8: type 1: item(s) -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC *LW A0,FFFC (S0) -1040FFDB *BEQ V0,R0,-loop -00000000 *NOP -0FC015C4 JAL 7F005710 -8E04FFF4 LW A0,FFF4 (S0) -0FC015C4 JAL 7F005710 -8E04FFF8 LW A0,FFF8 (S0) -8FAE007C LW T6,007C (SP) -8E04FFF4 LW A0,FFF4 (S0) -15C00006 BNE T6,R0,7F005B18 -8E05FFF8 LW A1,FFF8 (S0) -//7F005B04: -3C018008 LUI AT,8008 -AC2499E0 SW A0,99E0 (AT) -5CA00001 BGTZL A1,7F005B14 -AC2599E4 SW A1,99E4 (AT) -AFA1007C SW AT,007C (SP) ;only has to be nonzero -//7F005B18: -3C187F09 LUI T8,7F09 -04A20002 BLTZL A1,7F005B28 -2718C488 ADDIU T8,T8,C488 -2718C50C ADDIU T8,T8,C50C -//7F005B28: -0300F809 JALR RA,T8 -00000000 NOP -1000FFC6 BEQ R0,R0,-loop -00000000 NOP -//7F005B38: type 2: ammo -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC *LW A0,FFFC (S0) -1040FFC2 *BEQ V0,R0,-loop -8E04FFF4 LW A0,FFF4 (S0) -0FC1A44C JAL 7F069130 -8E05FFF8 LW A1,FFF8 (S0) -1000FFBE BEQ R0,R0,-loop -00000000 NOP -//7F005BA0: type 3: swirling camera -0FC26C54 JAL 7F09B150 -3C018003 LUI AT,8003 -2603FFE0 *ADDIU V1,S0,FFE0 ;V1=p->data -8C2964AC LW T1,64AC (AT) -51200001 BEQL T1,R0,7F005BB4 -AC2364AC *SW V1,64AC (AT) -//7F005BB4: -1440FFB6 BNE V0,R0,-loop -8C6A0008 *LW T2,0008 (V1) -8C6B000C *LW T3,000C (V1) -8C6C0010 *LW T4,0010 (V1) -448A9000 MTC1 T2,F18 -448B4000 MTC1 T3,F8 -8C6D0014 *LW T5,0014 (V1) -46809120 CVT.S.W F4,F18 -448C9000 MTC1 T4,F18 -8C790018 *LW T9,0018 (V1) -468042A0 CVT.S.W F10,F8 -448D4000 MTC1 T5,F8 -46142183 DIV.S F6,F4,F20 -46809120 CVT.S.W F4,F18 -44999000 MTC1 T9,F18 -46145403 DIV.S F16,F10,F20 -E4660008 *SWC1 F6,0008 (V1) -468042A0 CVT.S.W F10,F8 -46142183 DIV.S F6,F4,F20 -E470000C *SWC1 F16,000C (V1) -46809120 CVT.S.W F4,F18 -46145403 DIV.S F16,F10,F20 -E4660010 *SWC1 F6,0010 (V1) -46142183 DIV.S F6,F4,F20 -E4700014 *SWC1 F16,0014 (V1) -1000FF9D BEQ R0,R0,-loop -E4660018 *SWC1 F6,0018 (V1) -//7F005C28: type 4: animation -8E18FFFC LW T8,FFFC (S0) -3C018003 LUI AT,8003 -1000FF99 BEQ R0,R0,-loop -AC386514 SW T8,6514 (AT) -//7F005C3C: type 5: char/cuff -3C018005 LUI AT,8005 -820EFFFC LB T6,FFFC (S0) -A02E4FE5 SB T6,4FE5 (AT) -820EFFFD LB T6,FFFD (S0) -A02E4FE6 SB T6,4FE6 (AT) -820EFFFE LB T6,FFFE (S0) -A02E4FE7 SB T6,4FE7 (AT) -820EFFFF LB T6,FFFF (S0) -1000FF86 BEQ R0,R0,-loop -AE4E041C SW T6,041C (S2) -//7F005C50: type 6: fixed camera -0FC26C54 JAL 7F09B150 -3C018003 LUI AT,8003 -2603FFD8 *ADDIU V1,S0,FFD8 ;V1=p->original data -8C2864B8 LW T0,64B8 (AT) -8C2964BC LW T1,64BC (AT) -AC2364B8 *SW V1,64B8 (AT) -252A0001 ADDIU T2,T1,0001 -1440FF8C BNE V0,R0,-loop -AC2A64BC SW T2,64BC (AT) -AC680024 *SW T0,0024 (V1) -8C6B0004 *LW T3,0004 (V1) -8C6C0008 *LW T4,0008 (V1) -8C6D000C *LW T5,000C (V1) -448B4000 MTC1 T3,F8 -448C9000 MTC1 T4,F18 -8C790010 *LW T9,0010 (V1) -468042A0 CVT.S.W F10,F8 -448D4000 MTC1 T5,F8 -8C780014 *LW T8,0014 (V1) -46809120 CVT.S.W F4,F18 -44999000 MTC1 T9,F18 -46165403 DIV.S F16,F10,F22 -468042A0 CVT.S.W F10,F8 -44984000 MTC1 T8,F8 -46162183 DIV.S F6,F4,F22 -E4700004 *SWC1 F16,0004 (V1) -46809120 CVT.S.W F4,F18 -46165403 DIV.S F16,F10,F22 -E4660008 *SWC1 F6,0008 (V1) -468042A0 CVT.S.W F10,F8 -46142183 DIV.S F6,F4,F20 -E470000C *SWC1 F16,000C (V1) -46145403 DIV.S F16,F10,F20 -E4660010 *SWC1 F6,0010 (V1) -9464001E *LHU A0,001E (V1) -1080FF6A BEQ A0,R0,-loop -E4700014 *SWC1 F16,0014 (V1) -0FC30776 JAL 7F0C1DD8 -00000000 NOP -9604FFFA *LHU A0,FFFA (S0) ;+22 -1080FF65 BEQ A0,R0,-loop -AE02FFF4 *SW V0,FFF4 (S0) ;+1C -0FC30776 JAL 7F0C1DD8 -00000000 NOP -1000FF61 BEQ R0,R0,-loop -AE02FFF8 *SW V0,FFF8 (S0) ;+20 -//7F005D14: type 7: time -00004025 *OR T0,R0,R0 -8E04FFFC LW A0,FFFC (S0) -18800008 *BLEZ A0,7F005D4C -2401003C ADDIU AT,R0,003C -0081001A DIV A0,AT -00007810 MFHI T7 -000F40C0 SLL T0,T7,0x3 -010F4023 SUBU T0,T0,T7 -00084140 SLL T0,T0,0x5 -010F4021 ADDU T0,T0,T7 -00084100 SLL T0,T0,0x4 -//7F005D4C: -8E04FFF8 *LW A0,FFF8 (S0) -18800008 *BLEZ A0,+skip -2401000C ADDIU AT,R0,000C -0081001A *DIV A0,AT -00005810 MFHI T3 -3C010003 LUI AT,0003 -34214BC0 ORI AT,AT,4BC0 -01610019 MULTU T3,AT -00006812 *MFLO T5 -010D4021 *ADDU T0,T0,T5 -//7F005D84: -1000FF4A BEQ R0,R0,-loop -AE280000 *SW T0,0000 (S1) -//7F005D8C: type 8: credits -3C198007 LUI T9,8007 -8F395D28 LW T9,5D28 (T9) -8E18FFFC LW T8,FFFC (S0) -3C018003 LUI AT,8003 -03381021 ADDU V0,T9,T8 -1000FF43 BEQ R0,R0,-loop ;use if below not included... -AC226440 SW V0,6440 (AT) -//7F005DBC: to be perfectly honest, I don't see the point in this bit here -; LHU T0,000C (V0) -; *BNE T0,R0,7F005DBC -; ADDIU V0,V0,000C -; LHU T1,0002 (V0) -; *BNE T1,R0,7F005DBC -; *NOP -//7F005DD8: -; BEQ R0,R0,-loop -; *NOP -//7F005DE4: NEW! type A: respawn distance -8E04FFF8 LW A0,FFF8 (S0) ;A0=1st word, containing type and flags -0FC017AD JAL 7F006EB4 ;smartspawn -00042202 SRL A0,A0,0x8 ;A0=x part of xxxxxx.0A -1040FF3E BEQ V0,R0,-loop -8E02FFFC LW V0,FFFC (S0) ;V0=distance value, which is actually a float -3C018005` LUI AT,8005 -1000FF3B BEQ R0,R0,-loop -AC225290` SW V0,5290 (AT) ;save distance override -//7F005DF4: type 9 targets here, as this ends above -3C018003 LUI AT,8003 -8C2264B8 *LW V0,64B8 (AT) -10400010 BEQ V0,R0,7F005E50 -00000000 *NOP -0C002914 JAL 7000A450 -AC2264C0 SW V0,64C0 (AT) -3C018003 *LUI AT,8003 -8C2B64BC *LW T3,64BC (AT) -004B001B DIVU V0,T3 -00001810 MFHI V1 -15600002 BNE T3,R0,7F005E30 -00000000 NOP -0007000D BREAK 00001C00 -18600005 BLEZ V1,7F005E50 -//7F005E34: -8C2A64C0 *LW T2,64C0 (AT) -2463FFFF ADDIU V1,V1,FFFF -8D4C0024 LW T4,0024 (T2) -1C60FFFC BGTZ V1,7F005E34 -AC2C64C0 SW T4,64C0 (AT) -//7F005E50: -0FC23122 JAL 7F08C488 -24040001 ADDIU A0,R0,0001 -8FAD007C LW T5,007C (SP) -3C088008 LUI T0,8008 -15A00002 BNE T5,R0,7F005E70 -24190001 ADDIU T9,R0,0001 -AD1999E0 SW T9,99E0 (T0) -//7F005E70: -3C018005 LUI AT,8005 -AE400078 *SW R0,0078 (S2) -C424F1D0 LWC1 F4,F1D0 (AT) -E644007C *SWC1 F4,007C (S2) -8D089C28 LW T0,9C28 (T0) -19000027 *BLEZ T0,7F005F4C -AE400080 *SW R0,0080 (S2) -// -0FC26919 JAL 7F09A464 -00000000 NOP -28410002 SLTI AT,V0,0002 -54200008 *BNEL AT,R0,7F005ED8 -00001825 OR V1,R0,R0 -3C098008 LUI T1,8008 -8D299C28 LW T1,9C28 (T1) -59200004 BLEZL T1,7F005ED8 -00001825 OR V1,R0,R0 -0FC1E43C JAL 7F0790F0 -00000000 NOP -00021825 OR V1,V0,R0 -//7F005ED8: -3C0A8008 LUI T2,8008 -00035880 SLL T3,V1,0x2 -016A8821 ADDU S1,T3,T2 -8E309C2C LW S0,9C2C (S1) -C6080000 LWC1 F8,0000 (S0) -E7A8008C SWC1 F8,008C (SP) -C60A0008 LWC1 F10,0008 (S0) -8FA5008C LW A1,008C (SP) -E7AA0094 SWC1 F10,0094 (SP) -8E040028 LW A0,0028 (S0) -8FA60094 LW A2,0094 (SP) -0FC20358 JAL 7F080D60 -AFA40084 SW A0,0084 (SP) -46000506 MOV.S F20,F0 -C65029BC *LWC1 F16,29BC (S2) -46008480 ADD.S F18,F16,F0 -E7B20090 SWC1 F18,0090 (SP) -E6400070 *SWC1 F0,0070 (S2) -C60C0018 LWC1 F12,0018 (S0) -0FC16A8C JAL 7F05AA30 -C60E0020 LWC1 F14,0020 (S0) -3C018005 LUI AT,8005 -C424F1D4 LWC1 F4,F1D4 (AT) -46002181 SUB.S F6,F4,F0 -10000010 BEQ R0,R0,7F005F8C -E7A60088 SWC1 F6,0088 (SP) -//7F005F4C: -27A4008C ADDIU A0,SP,008C -27A50090 ADDIU A1,SP,0090 -27A60094 ADDIU A2,SP,0094 -0FC2BEDE JAL 7F0AFB78 -3C0741F0 LUI A3,41F0 -AFA20084 SW V0,0084 (SP) -00402025 OR A0,V0,R0 -8FA5008C LW A1,008C (SP) -0FC20358 JAL 7F080D60 -8FA60094 LW A2,0094 (SP) -46000506 MOV.S F20,F0 -C64829BC *LWC1 F8,29BC (S2) -46004280 ADD.S F10,F8,F0 -E7AA0090 SWC1 F10,0090 (SP) -E6400070 *SWC1 F0,0070 (S2) -//7F005F8C: -3C0143B4 LUI AT,43B4 -44819000 MTC1 AT,F18 -C7B00088 LWC1 F16,0088 (SP) -3C018005 LUI AT,8005 -C426F1D8 LWC1 F6,F1D8 (AT) -46128102 MUL.S F4,F16,F18 -27A5008C ADDIU A1,SP,008C -46062203 DIV.S F8,F4,F6 -E6480148 *SWC1 F8,0148 (S2) -E6540074 *SWC1 F20,0074 (S2) -C42AF1DC LWC1 F10,F1DC (AT) -460AA403 DIV.S F16,F20,F10 -E650006C *SWC1 F16,006C (S2) -8FA60084 LW A2,0084 (SP) -0FC1F1CC JAL 7F07C730 -26440488 *ADDIU A0,S2,0488 -0FC15FAB JAL 7F057EAC -C7AC0088 LWC1 F12,0088 (SP) -46000487 NEG.S F18,F0 -E6520498 *SWC1 F18,0498 (S2) -AE40049C *SW R0,049C (S2) -0FC15FA8 JAL 7F057EA0 -C7AC0088 LWC1 F12,0088 (SP) -3C018003 LUI AT,8003 -E64004A0 *SWC1 F0,04A0 (S2) -0FC225C6 JAL 7F089718 -C42C64D0 LWC1 F12,64D0 (AT) -3C018008 LUI AT,8008 -24249DA0 ADDIU A0,9DA0 (AT) - *JAL initializewords-addy ;initialize 80079DA0-80079DC8 -24259DCC *ADDIU A1,AT,9DCC -//7F006054: -0FC228CC JAL 7F08A330 -00000000 NOP -0FC22A40 JAL 7F08A900 -00000000 NOP -0FC0E90C JAL 7F03A430 -00000000 NOP -240A0006 ADDIU T2,R0,0006 -AE4200A8 *SW V0,00A8 (S2) -A04A0000 SB T2,0000 (V0) -AC400004 SW R0,0004 (V0) -C7A0008C LWC1 F0,008C (SP) -E6400408 *SWC1 F0,0408 (S2) -E4400008 SWC1 F0,0008 (V0) -C7A00090 LWC1 F0,0090 (SP) -E640040C *SWC1 F0,040C (S2) -E440000C SWC1 F0,000C (V0) -C7A00094 LWC1 F0,0094 (SP) -E6400410 *SWC1 F0,0410 (S2) -E4400010 SWC1 F0,0010 (V0) -8FAD0084 LW T5,0084 (SP) -AC4D0014 SW T5,0014 (V0) -0FC0E929 JAL 7F03A4A4 -00402025 OR A0,V0,R0 -0FC0E901 JAL 7F03A404 -8E4400A8 *LW A0,00A8 (S2) -3C018005 LUI AT,8005 -C420F1E0 LWC1 F0,F1E0 (AT) -C64604B4 *LWC1 F6,04B4 (S2) -46003203 DIV.S F8,F6,F0 -E64803B8 *SWC1 F8,03B8 (S2) -C64A04B8 *LWC1 F10,04B8 (S2) -46005403 DIV.S F16,F10,F0 -E65003BC *SWC1 F16,03BC (S2) -C65204BC *LWC1 F18,04BC (S2) -46009103 DIV.S F4,F18,F0 -0FC26919 JAL 7F09A464 -E64403C0 *SWC1 F4,03C0 (S2) -24040001 ADDIU A0,R0,0001 -10440006 BEQ V0,A0,7F006114 -3C018003 LUI AT,8003 -8C2264B8 LW V0,64B8 (AT) -8C2164AC LW AT,64AC (AT) -00220825 OR AT,AT,V0 -50200001 BEQL AT,R0,7F006114 -24040009 ADDIU A0,R0,0009 -//7F006114: -0FC1EA6E JAL 7F07A9B8 -00000000 NOP -3C048003 LUI A0,8003 -00001025 OR V0,R0,R0 -//7F006124: -00025040 SLL T2,V0,0x1 -008A5021 ADDU T2,A0,T2 -954D64D8 LHU T5,64D8 (T2) -55A0FFFC BNEL T5,R0,7F006124 -24420001 ADDIU V0,V0,0001 -AC82650C SW V0,650C (A0) -AC806510 SW R0,6510 (A0) -24180001 ADDIU T8,R0,0001 -AE580420 SW T8,0420 (S2) -AE400424 SW R0,0424 (S2) -AE400428 SW R0,0428 (S2) -//7F006154: return -8FBF0034 LW RA,0034 (SP) -8FB20030 LW S2,0030 (SP) -8FB1002C LW S1,002C (SP) -8FB00028 LW S0,0028 (SP) -D7B60020 LDC1 F22,0020 (SP) -D7B40018 LDC1 F20,0018 (SP) -03E00008 JR RA -27BD0098 ADDIU SP,SP,0098 - -//7F005F00: 3AA30 sizes of intro commands -0C 10 10 20 08 08 28 0C 08 04 [08] [04 04040404 ...] - -//7F005F10: 3AA40 TLB pointer table -7F0058DC 7F005938 7F00599C 7F0059BC 7F005A40 7F005A50 7F005A78 7F005B30 7F005B8C 7F005BC8 7F005BA8 - -7F005EB4 3A9E4 V0=TRUE if passed smartspawn test - accepts: A0=set + smartspawn flags -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -JAL 7F09A464 -ADDIU AT,R0,0040 -JAL 7F0BFC10 -SLLV T2,AT,V0 -JAL 7F0C0A20 -ADDIU T0,V0,0006 -SLLV T0,AT,T0 -OR T2,T0,T2 -ANDI T0,A0,007F -BNE V0,T0,7F0061E0 -AND T0,T2,A0 -BEQL T0,R0,7F0061E4 -ADDIU V0,R0,0001 -OR V0,R0,R0 -LW RA,001C (SP) -JR RA -ADDIU SP,SP,0020 - -eliminate 7F009B2C 3E65C -anathema: 8004F1AC - 8004F1D0 diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/MP intro camera.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/MP intro camera.txt deleted file mode 100644 index 723dc32..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/MP intro camera.txt +++ /dev/null @@ -1,425 +0,0 @@ -MP gets this forced... -//7F006134: -JAL 7F09A464 ;V0=#players -SWC1 F4,03C0 (V0) -ADDIU AT,R0,0001 -BNE V0,AT,7F006158 -NOP -//7F006148: solo -JAL 7F07A9B8 ;solo intro camera -ADDIU A0,R0,0001 -BEQ R0,R0,7F006160 -NOP -//7F006158: MP -JAL 7F07A9B8 ;set MP rotating camera -ADDIU A0,R0,0009 -//7F006160: - -so, if MP, will need to see if either the 03 or 06 pointers are set -if so, use solo intro routine as override. - -to do that, need a little room... -//7F00606C: big long mess of redundancy -8E480000 LW T0,0000 (S2) -240A0006 ADDIU T2,R0,0006 -AD0200A8 SW V0,00A8 (T0) -8E490000 LW T1,0000 (S2) -8D2B00A8 LW T3,00A8 (T1) -AD600004 SW R0,0004 (T3) -8E4C0000 LW T4,0000 (S2) -8D8D00A8 LW T5,00A8 (T4) -A1AA0000 SB T2,0000 (T5) -8E590000 LW T9,0000 (S2) -C7A0008C LWC1 F0,008C (SP) -E7200408 SWC1 F0,0408 (T9) -8E580000 LW T8,0000 (S2) -8F0F00A8 LW T7,00A8 (T8) -E5E00008 SWC1 F0,0008 (T7) -8E4E0000 LW T6,0000 (S2) -C7A00090 LWC1 F0,0090 (SP) -E5C0040C SWC1 F0,040C (T6) -8E480000 LW T0,0000 (S2) -8D0900A8 LW T1,00A8 (T0) -E520000C SWC1 F0,000C (T1) -8E4B0000 LW T3,0000 (S2) -C7A00094 LWC1 F0,0094 (SP) -E5600410 SWC1 F0,0410 (T3) -8E4C0000 LW T4,0000 (S2) -8D8A00A8 LW T2,00A8 (T4) -E5400010 SWC1 F0,0010 (T2) -8E590000 LW T9,0000 (S2) -8FAD0084 LW T5,0084 (SP) -8F3800A8 LW T8,00A8 (T9) -AF0D0014 SW T5,0014 (T8) -8E4F0000 LW T7,0000 (S2) -//7F0060EC: -0FC0E929 JAL 7F03A4A4 -8DE400A8 LW A0,00A8 (T7) -8E4E0000 LW T6,0000 (S2) -0FC0E901 JAL 7F03A404 -8DC400A8 LW A0,00A8 (T6) -//7F006100: -8E420000 LW V0,0000 (S2) -3C018005 LUI AT,8005 -C420F1E0 LWC1 F0,F1E0 (AT) -C44604B4 LWC1 F6,04B4 (V0) -46003203 DIV.S F8,F6,F0 -E44803B8 SWC1 F8,03B8 (V0) -8E420000 LW V0,0000 (S2) -C44A04B8 LWC1 F10,04B8 (V0) -46005403 DIV.S F16,F10,F0 -E45003BC SWC1 F16,03BC (V0) -8E420000 LW V0,0000 (S2) -C45204BC LWC1 F18,04BC (V0) -46009103 DIV.S F4,F18,F0 -//7F006134: detect MP -0FC26919 JAL 7F09A464 -E44403C0 SWC1 F4,03C0 (V0) -24010001 ADDIU AT,R0,0001 -14410005 BNE V0,AT,7F006158 ;branch if multi -00000000 NOP -//7F006148: solo -0FC1EA6E JAL 7F07A9B8 ;set camera mode -24040001 ADDIU A0,R0,0001 -10000003 BEQ R0,R0,7F006160 -00000000 NOP -//7F006158: multi -0FC1EA6E JAL 7F07A9B8 ;set camera mode -24040009 ADDIU A0,R0,0009 -//7F006160: - - -reduction! -//7F00606C: 3AB9C big long mess of redundancy -8E480000 LW T0,0000 (S2) -240A0006 ADDIU T2,R0,0006 -AD0200A8 SW V0,00A8 (T0) -A04A0000 *SB T2,0000 (V0) -AC400004 *SW R0,0004 (V0) -C7A0008C LWC1 F0,008C (SP) -E5000408 *SWC1 F0,0408 (T0) -E4400008 *SWC1 F0,0008 (V0) -C7A00090 LWC1 F0,0090 (SP) -E500040C *SWC1 F0,040C (T0) -E440000C *SWC1 F0,000C (V0) -C7A00094 LWC1 F0,0094 (SP) -E5000410 *SWC1 F0,0410 (T0) -E4400010 *SWC1 F0,0010 (V0) -8FAD0084 LW T5,0084 (SP) -AC4D0014 *SW T5,0014 (V0) -//7F0060AC: 3ABDC -0FC0E929 JAL 7F03A4A4 -00402025 *OR A0,V0,R0 -8E4E0000 LW T6,0000 (S2) -0FC0E901 JAL 7F03A404 -8DC400A8 LW A0,00A8 (T6) -//7F0060C0: 3ABF0 -8E420000 LW V0,0000 (S2) -3C018005 LUI AT,8005 -C420F1E0 LWC1 F0,F1E0 (AT) -C44604B4 LWC1 F6,04B4 (V0) -46003203 DIV.S F8,F6,F0 -E44803B8 SWC1 F8,03B8 (V0) -C44A04B8 LWC1 F10,04B8 (V0) -46005403 DIV.S F16,F10,F0 -E45003BC SWC1 F16,03BC (V0) -C45204BC LWC1 F18,04BC (V0) -46009103 DIV.S F4,F18,F0 -//7F0060EC: 3AC1C detect MP -0FC26919 JAL 7F09A464 -E44403C0 SWC1 F4,03C0 (V0) -24040001 *ADDIU A0,R0,0001 -10440006 *BEQ V0,A0,7F006114 ;branch if solo -3C018003 *LUI AT,8003 -//7F006100: 3AC30 test if multi set these -8C2264B8 *LW V0,64B8 (AT) ;p->06 intro entry -8C2164AC *LW AT,64AC (AT) ;p->03 intro entry -00220825 *OR AT,AT,V0 ;!0 if either is set -//7F00610C: 3AC3C default multi if neither set -50200001 *BEQL AT,R0,+1 -24040009 ADDIU A0,R0,0009 -0FC1EA6E JAL 7F07A9B8 ;set camera mode -8E490000 *NOP -// -8D2B00A8 *NOP -8E4C0000 *NOP -8D8D00A8 *NOP -8E590000 *NOP -8E580000 *NOP -8F0F00A8 *NOP -8E4E0000 *NOP -8E480000 *NOP -8D0900A8 *NOP -8E4B0000 *NOP -8E4C0000 *NOP -8D8A00A8 *NOP -8E590000 *NOP -8F3800A8 *NOP -8E4F0000 *NOP -8E420000 *NOP -8E420000 *NOP -//7F006160: 3AC90 - -0068 0C46 0000 000D3A59 FFFF73AB FFFA989E 000370C3 0000359D -0068 0C46 0000 000CE3A3 FFFF5C3B FFF9F412 0002EB47 0000506C -0002 0C46 0000 0000CCF2 FFFF648F 0000DCF6 00034415 00002CAE -0068 0C46 0000 000C9EC1 00006DAA FFFAB045 00039E00 000609F1 - --++ 00000000 02530000 FFD80000 0000C000 0019 --++ FFD80000 01FE0000 00000000 0000C000 0019 --++ 00000000 01A90000 00280000 0000C000 0019 --++ 002D0000 01540000 00000000 0000C000 0019 --++ 00000000 00FF0000 FFD30000 0000C000 0019 --++ FFD30000 00AA0000 00000000 0000C000 0019 --++ 00000000 00550000 00280000 0000C000 0019 --++ 00230000 00140000 00050000 0000C000 0019 --++ 000A0000 00000000 FFE70000 0000C000 0019 --+- 00000000 00000000 00000000 00008000 0000 --+- 00000000 00000000 00000000 00008000 0000 -+-- 00000000 00000000 00000000 00000000 0000 - - -seems one more problem. Forces MP when camera detected. -loops for each character. how stupid is that... Wouldn't be so bad if they didn't fry my variables... - -wiped at 7F0059DC/EC -intro commands set it then -loops around and resets it for each player but doesn't parse intro again... -need to push the R0->64AC, R0->64B8, R0->64BC, R0->6514 all up - otherwise, need to get them to parse the stuff prettier - -7F005C50: 3A780 type 6: fixed intro cameras -0FC26C54 JAL 7F09B150 ;V0=player# -3C018003 LUI AT,8003 -8C2864B8 *LW T0,64B8 (AT) ;T0=800364B8:last command in list -8C2964BC *LW T1,64BC (AT) ;T1=800364BC: count of entries -AC3064B8 SW S0,64B8 (AT) ;p->command -> 800364B8:last command in list -252A0001 ADDIU T2,T1,0001 ;T2=count+1 -14400024 BNEZ V0,7F005CB0 ;only do once -AC2A64BC SW T2,64BC (AT) ;800364BC=count++ -//7F005C74: expando -AE080024 SW T0,0024 (S0) ;command+24=p->previous command -8E0B0004 LW T3,0004 (S0) ;T3=command+4: x offset -8E0C0008 LW T4,0008 (S0) ;T4=command+8: y offset -8E0D000C LW T5,000C (S0) ;T5=command+C: z offset -448B4000 MTC1 T3,F8 -448C9000 MTC1 T4,F18 -8E190010 LW T9,0010 (S0) ;T9=command+10: lateral rotation -468042A0 CVT.S.W F10,F8 ;F10=(float) x offset -448D4000 MTC1 T5,F8 -8E180014 LW T8,0014 (S0) ;T8=command+14: vertical rotation -46809120 CVT.S.W F4,F18 ;F4=(float) y offset -44999000 MTC1 T9,F18 -46165403 DIV.S F16,F10,F22 ;F16=x offset/100: x percentage -468042A0 CVT.S.W F10,F8 ;F10=(float) z offset -44984000 MTC1 T8,F8 -46162183 DIV.S F6,F4,F22 ;F6=y offset/100: y percentage -E6100004 SWC1 F16,0004 (S0) ;replace x offset with multiplier -46809120 CVT.S.W F4,F18 ;F4=(float) lateral rotation -46165403 DIV.S F16,F10,F22 ;F16=z offset/100: z percentage -E6060008 SWC1 F6,0008 (S0) ;replace y offset with multiplier -468042A0 CVT.S.W F10,F8 ;F10=(float) vertical rotation -46142183 DIV.S F6,F4,F20 ;F6=lat.rot./0x10000: lat.rot.multiplier -E610000C SWC1 F16,000C (S0) ;replace z offset with multiplier -46145403 DIV.S F16,F10,F20 ;F16=vert.rot./0x10000: vert.rot.multiplier -E6060010 SWC1 F6,0010 (S0) ;replace lat.rot. with multiplier -E6100014 SWC1 F16,0014 (S0) ;replace vert.rot. with multiplier -9604001E LHU A0,001E (S0) ;A0=text value 1 -10800009 *BEQ A0,R0,7F005CBC ;branch if text 1 not present -00000000 NOP -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -00000000 NOP -96040022 *LHU A0,0022 (S0) ;V1=command+20: text value 2 -10800004 *BEQ A0,R0,7F005CBC ;branch if text 2 not present -AE02001C SW V0,001C (S0) ;replace text 1 ID w/ p->text -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -00000000 *NOP -AE020020 SW V0,0020 (S0) ;replace text 2 ID w/ p->text -//7F005CB0: return -10000039 BEQ R0,R0,7F005DE4 -26100028 ADDIU S0,S0,0028 ;S0+=28: next command -00000000 *NOP -00000000 *NOP - -slightly related, this is used in order to omit first text entry -//7F07B5D0: B0100 display first intro camera string -C4248378 LWC1 F4,8378 (AT) -46041180 ADD.S F6,F2,F4 -4606003E C.LE.S F0,F6 -3C058004 LUI A1,8004 -4500000E BC1F 7F07B61C -8CA40EB8 *LW A0,0EB8 (A1) -0FC228ED JAL 7F08A3B4 -8CA50EB4 LW A1,0EB4 (A1) -3C0E8003 LUI T6,8003 -8DCE64C0 LW T6,64C0 (T6) -8DC4001C LW A0,001C (T6) -10800003 *BEQ A0,R0,+3 -00000000 NOP -0FC228F2 JAL 7F08A3C8 -00000000 *NOP -//7F07B60C: B013C - - -7F005BA0 3A6D0 type 3: swirling intro camera -0FC26C54 *JAL 7F09B150 ;V0=player# -3C018003 LUI AT,8003 -8C2964AC *LW T1,64AC (AT) ;T1=800364AC: p->first entry in rotating camera -51200001 *BEQL T1,R0,+1 ;branch if valid pointer -AC3064AC SW S0,64AC (AT) ;p->command -> 800364AC: first entry in rot. camera -1440001A *BNEZ V0,RETURN -02001025 OR V0,S0,R0 ;V0=S0: p->command -//7F005BCC: convert percentages into multipliers -8C4A0008 LW T2,0008 (V0) ;T2=command+8:x offset -8C4B000C LW T3,000C (V0) ;T3=command+C: y offset -8C4C0010 LW T4,0010 (V0) ;T4=command+10: z offset -448A9000 MTC1 T2,F18 -448B4000 MTC1 T3,F8 -8C4D0014 LW T5,0014 (V0) ;T5=lateral rotation -46809120 CVT.S.W F4,F18 ;F4=(float) x offset -448C9000 MTC1 T4,F18 -8C590018 LW T9,0018 (V0) ;T9=rate -468042A0 CVT.S.W F10,F8 ;F10=(float) y offset -448D4000 MTC1 T5,F8 -46142183 DIV.S F6,F4,F20 ;F6=x offset/0x10000: percentage change -46809120 CVT.S.W F4,F18 ;F4=(float) z offset -44999000 MTC1 T9,F18 -46145403 DIV.S F16,F10,F20 ;F16=y offset/0x10000: percentage change -E4460008 SWC1 F6,0008 (V0) ;replace x offset with multiplier -468042A0 CVT.S.W F10,F8 ;F10=(float) lateral rotation -46142183 DIV.S F6,F4,F20 ;F6=z offset/0x10000: percentage change -E450000C SWC1 F16,000C (V0) ;replace y offset with multiplier -46809120 CVT.S.W F4,F18 ;F4=rate -46145403 DIV.S F16,F10,F20 ;F16=lateral rot./0x10000: percentage change -E4460010 SWC1 F6,0010 (V0) ;replace z offset with multiplier -46142183 DIV.S F6,F4,F20 ;F6=rate/0x10000: percentage change -E4500014 SWC1 F16,0014 (V0) ;replace lat.rot. with multiplier -E4460018 SWC1 F6,0018 (V0) ;replace rate with multiplier -10000070 BEQ R0,R0,7F005DE4 -26100020 ADDIU S0,S0,0020 ;S0+=20: next command - -+_+ - -QUICK FIX: -get rid of another TLB table -//7F0B48F0: -2DE10003 *SLTIU AT,T7,0003 -14200007 *BNE AT,R0,7F0B4914 -AC6E0000 SW T6,0000 (V1) -24010006 *ADDIU AT,R0,0006 -102F0004 *BEQ AT,T7,7F0B4914 -24010008 *ADDIU AT,R0,0008 -142F0004 *BNE AT,T7,7F0B491C -00000000 *NOP - -Okay, now it happens to be parsing the commands right and should be at least using the swirlidigs -Only trouble is with fading. Fade is inconsistant between characters. -Could action block, but that would be a very ugly solution. - Instead, should force visible MP regardless if 9 or 1 used. - -7F07B1A4: transitory camera mode handler - LUI V1,8003 - ADDIU V1,V1,6494 ;V1=80036494: p->current camera mode - LW V0,0000 (V1) ;V0=camera mode - SW R0,0000 (V1) ;0->camera mode (reset) - LW AT,8003 - SW R0,6498 (AT) ;0->80036498: gameplay flag - ADDIU SP,SP,FFE8 - ADDIU AT,R0,0001 - BNE V0,AT,7F07B1DC ;branch if not camera 1: rand stationary intro camera - SW RA,0014 (SP) -//7F07B1CC: camera 1: intro stationary camera + text - JAL 7F07A9B8 ;set camera mode - ADDIU A0,R0,0002 ;A0=2: fade-to-swirlidig - BEQ R0,R0,7F07B294 ;return - LW RA,0014 (SP) -//7F07B1DC: test if camera 2 - ADDIU AT,R0,0002 - BNEL V0,AT,7F07B204 ;branch if not camera 2 - ADDIU AT,R0,0009 -//7F07B1E8: camera 2: fade to swirlidig - JAL 7F08A330 - NOP - JAL 7F07A9B8 ;set camera mode - ADDIU A0,R0,0003 ;A0=3: rotating intro camera - BEQ R0,R0,7F07B294 ;return - LW RA,0014 (SP) -//7F07B200: - ADDIU AT,R0,0009 - BEQ V0,AT,7F07B290 ;return if camera 9: MP intro camera - ADDIU AT,R0,0003 - BNEL V0,AT,7F07B244 ;branch if not camera 3 - ADDIU AT,R0,0004 -//7F07B214: camera 3: rotating intro camera - JAL 7F07A4A0 - NOP - LUI AT,3F80 - MTC1 AT,F14 ;F14=1.0: final level (100%) - MTC1 R0,F12 ;F12=0.0: timer - JAL 7F080A10 ;set fade - NOP - JAL 7F07A9B8 ;set camera mode - ADDIU A0,R0,0004 ;A0=4: 1st person mode - BEQ R0,R0,7F07B294 ;return - LW RA,0014 (SP) -//7F07B244: - BEQ V0,AT,7F07B290 ;return if camera 4: 1st person mode - ADDIU AT,R0,0005 - BNEL V0,AT,7F07B268 ;branch if not camera 5 - ADDIU AT,R0,0006 -//7F07B254: camera 5: ??? - JAL 7F07A9B8 ;set camera mode - ADDIU A0,R0,0006 ;A0=6: ??? - BEQ R0,R0,7F07B294 ;return - LW RA,0014 (SP) -//7F07B264: - ADDIU AT,R0,0006 - BNE V0,AT,7F07B290 ;return if not camera 6 - LUI V0,8003 -//7F07B270: camera 6: ??? - ADDIU V0,V0,6510 - LW T6,0000 (V0) ;T6=80036510: ??? - ADDIU T7,T6,0001 ;T7=T6+1: count++ - SLTI AT,T7,0003 - BEQ AT,R0,7F07B290 ;return if > 3 (0-2) - SW T7,0000 (V0) ;count++ -> 80036510 - JAL 7F07A9B8 ;set camera mode - ADDIU A0,R0,0005 ;A0=5: ??? -//7F07B290: return - LW RA,0014 (SP) - ADDIU SP,SP,0018 - JR RA - NOP - - -Don't know what this one does, but tests if 1 or 9... -8007B56C: - ADDIU SP,SP,FFC0 - LUI V0,8003 - LW V0,6494 (V0) ;V0=80036494: camera mode - ADDIU T3,R0,0001 - SW RA,0014 (SP) - SW A0,0040 (SP) - SW A1,0044 (SP) - SW A2,0048 (SP) - BEQ T3,V0,7F07B5A0 ;if camera 1, branch - SW A3,004C (SP) - ADDIU A1,R0,0002 - BNE A1,V0,7F07B858 ;branch if not camera 2 - ADDIU AT,R0,0009 -//7F07B5A0: camera 1 - BNE T3,V0,7F07B708 ;branch if camera 2 - LUI T1,8008 -... -//7F07B858: camera 9 - BNEL V0,AT,7F07BB28 ;branch if not camera 9 - ADDIU AT,R0,0003 - JAL 7F09B150 - NOP - JAL 7F09B4D8 - OR A0,V0,R0 - BNEZ V0,7F07B9C4 - LUI T1,8008 - LUI A3,8005 - LW A3,8374 (A3) - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/SmartSpawns-v3.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/SmartSpawns-v3.txt deleted file mode 100644 index 778b69f..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/SmartSpawns-v3.txt +++ /dev/null @@ -1,191 +0,0 @@ -Smartspawns implements masking an intro block command so it is not executed when a certain number of players are playing - Originally this was implemented as a stand-alone patch, but nobody used it. Can't blame them - it was a stupid and confusing format - This version is simpler and backwards-compatible with non-patched ROMs. -V3 is probably final unless there's other flags that become necessary - -Patch only applies to intro types 0-2 -If I may digress, it would be a good idea to force the other intro types in multiplayer... - -3A2F4 7F0057C4 - load camera/intro type value: calls next 9 entries - 3A5AC 7F005A7C *0 spawn point - 3A620 7F005AF0 *1 weapon - 3A6A8 7F005B78 *2 ammo - 3A6D0 7F005BA0 3 swirling intro camera - 3A758 7F005C28 4 intro animation - 3A76C 7F005C3C 5 cuff/character - 3A780 7F005C50 6 fixed cameras - 3A844 7F005D14 7 watch time - 3A8BC 7F005D8C 8 credits - -+_+ - -General technique: - These use JR's to get to each specific type, and then branch to the end. - A generic code thingy can be linked in as a branch and the original return offset, like so: - BEQ R0,R0,[smart] - ADDIU T8,T8,0008 - Then, end the smart segment with JR T8 to return to the next op of whatever sent you there! - That's the sort of idea only tea-induced delerium can muster. - -This code based on the original smartspawn concept in rand+ -uses 40<<#players to simulate 2^#players -so: -1 0080 1pl (solo) -2 0100 2pl -3 0200 3pl -4 0400 4pl - For difficulty mask, add 6... -5 0800 multi -6 1000 agent -7 2000 secret -8 4000 00 -9 8000 007 - -So, that means up to 127 sets -0x0080 is solo flag test -0x0F00 is multiplayer test flags -0xF000 is solo difficulty tests - -By necessity, since these commands are different sizes for different types, - You must feed it T7=set number -0 920F000B LBU T7,000B (S0) -1 920F000F LBU T7,000F (S0) -2 920F000F LBU T7,000F (S0) - -[smart] accepts: T7=set# from command -7F005B58: 3A688 SMARTSPAWN SUBROUTINE -2705000C ADDIU A1,T8,000C ;Presumes linking back to subroutine -0FC26919 JAL 7F09A464 ;V0=#players -24010040 ADDIU AT,R0,0040 -0FC2FF04 JAL 7F0BFC10 ;V0=difficulty -00415004 SLLV T2,AT,V0 ;T2=2^#players 40<<# -0FC30288 JAL 7F0C0A20 ;V0=set# for intro or 0 -24480006 ADDIU T0,V0,0006 ;T0=difficulty+6 -01014004 SLLV T0,AT,T0 ;T2=difficulty 40<<# -010A5025 OR T2,T0,T2 ;T2=difficulty+player mask -3088007F ANDI T0,A0,007F ;T0=set number - playerflags -14480097 BNE V0,T0,[end] ;kill command if not in set -01444024 AND T0,T2,A0 ;T0=set# & playerflags -15000095 BNEZ T0,[end] ;kill if any of the killflags set -00000000 NOP -00A00008 JR A1 -00000000 NOP - -+,+ - -&_& - -note this was taken from code existing in '2710 spawn points.txt' -This is a hack of the existing implementation for the spawn point smartspawns restrictor - -available: AT,V0,V1,T0,T1,T2,T3,T4,T5,T6,T7,T8 (jumped it here),T9 - -7F005A7C: 3A5AC Type 0: spawn -8E040008 LW A0,0008 (S0) //T7=set# -10000035 *BEQ R0,R0,[smart] -2610000C *ADDIU S0,S0,000C -//7F005A88: -3C018008 *LUI AT,8008 -8C229C28 *LW V0,9C28 (AT) //V0=80079C28 (spawn counter) -//7F005A90 expando! -8E08FFF8 LW T0,FFF8 (S0) ;T0=preset -3C0A8007 LUI T2,8007 -290F2710 SLTI T7,T0,2710 ;T7=TRUE if not a 2710 preset -55E00004 BNEZL T7,[grab] ;branch if using a 0xxx preset -3409002C ORI T1,R0,002C ;T1=0x2C: 0xxx preet multiplier -34090044 ORI T1,R0,0044 ;T1=0x44: 2xxx preset mutliplier -254A0004 ADDIU T2,T2,0004 ;T2+=4: use 2xxx preset table -2508D8F0 ADDIU T0,T0,D8F0 ;T0=preset-2710: actual number in table -//7F005AB0 grab -01280019 MULTU T1,T0 -00027880 SLL T7,V0,0x2 ;T4=offset in spawn pointer list -8D4A5D18 LW T2,5D18 (T2) ;T2=p->preset list -002F7821 *ADDU T7,AT,T7 ;T7=spawn list + offset: p->current entry -00004812 MFLO T1 ;T1=offset in spawn pointer list -012A4021 ADDU T0,T1,T2 ;T0=address of preset -ADE89C2C *SW T0,9C2C (T7) ;current spawn entry=p->preset -24420001 ADDIU V0,V0,0001 ;count++ -//7F005AD0: end -100000C4 BEQ R0,R0,7F005DE4 ;return -AC229C28 SW V0,9C28 (AT) ;save new count - -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP - -&.& - -7F005AF0 3A620 Type 1: weapon -7F005AD8 3A608 Type 1: weapon - note: can't send both to the x2 weapon handler or else r.weapons don't appear in watch menu - however, 7F005710 can accept -1 without issues ;*) -8E04000C LW A0,000C (S0) //T7=set# -10000020 *BEQ R0,R0,[smart] -26100010 *ADDIU S0,S0,0010 -//7F005AE4 preload! -0FC015C4 JAL 7F005710 ;preload: sets weapon model for generated object -8E04FFF4 LW A0,FFF4 (S0) ;A0=right weapon -0FC015C4 JAL 7F005710 ;preload: sets weapon model for generated object -8E04FFF8 LW A0,FFF8 (S0) ;A0=left weapon -//7F005AF4 grab #'s again -8E04FFF4 LW A0,FFF4 (S0) ;A0=right weapon -8E05FFF8 LW A1,FFF8 (S0) ;A1=left weapon -//7F005AFC sort out if 1st set -8FAE007C LW T6,007C (SP) -15C00005 BNEZ T6,7F005B70 ;skip if not first weapon -3C018008 LUI AT,8008 -AC2499E0 SW A0,99E0 (AT) ;r.weapon->800799E0 -5CA00001 BGTZL A1,7F005B70 ;skip if no left weapon - technically not required, but I'd rather it not introduce a bug at a later date -AC2599E4 SW A1,99E4 (AT) ;l.weapon->800799E4 -AFA1007C SW AT,007C (SP) ;SP+7C= nonzero. Stupid, but nonzero -//7F005B18 sort out what adds them to inventory -3C187F09 *LUI T8,7F09 -04A20002 BLTZL A1,+2 ;r-weapon only -2718C488 *ADDIU T8,T8,C488 ;add weapon A0 to inventory -2718C50C *ADDIU T8,T8,C50C ;add doubles (A0+A1) to inventory -0300F809 JALR RA,T8 ;emulators require you to write it so; console assumes RA if rt=0 -00000000 NOP -//7F005B30: right-weapon only -100000AC BEQ R0,R0,7F005DE4 -00000000 NOP -00000000 *NOP -00000000 *NOP -//7F005B38: sets default weapon drawn at start? -//7F005B40: -00000000 NOP -00000000 *NOP -00000000 NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 NOP -//7F005B70: - -&,& - -7F005B78 3A6A8 Type 2: ammo -7F005B38 3A668 Type 2: ammo -//7F005B40: -8E04000C LW A0,000C (S0) //T7=set# -10000006 *BEQ R0,R0,[smart] -26100010 ADDIU S0,S0,0010 -8E04FFF4 LW A0,FFF4 (S0) ;A0=ammo type -0FC1A44C JAL 7F069130 ;add ammo type A0, total A1 to inventory -8E05FFF8 LW A1,FFF8 (S0) ;A1=ammo total -//7F005B58: -100000A4 BEQ R0,R0,7F005DE4 -00000000 *NOP -//7F005B60: 3A690 -00000000 *NOP -00000000 NOP - -^_^ - -set p->newTLB -that's in 21990: 0x2E420 7F005AD8 7F005B38 - 8004F1B0 - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/2710 spawn points.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/2710 spawn points.txt deleted file mode 100644 index f36ed23..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/2710 spawn points.txt +++ /dev/null @@ -1,231 +0,0 @@ -What this does: -1) moves spawn count to 80079C28, list to 80079C2C. allows a couple more entries -2) allows 2710 spawn points -3) links in a better smartspawns - -smartspawns uses upper nibble of the set# byte -don't use if the flag is set for #: -80 4player -40 3player -20 2player -10 1player - - -//7F088920: 0x does re-equip, etc. at respawn -JAL 7F0793EC -LW S0,5D08 (S0) S0=pointer to intro block data - -+-+-+-+-+ - -7F005A7C: 0x3A5AC parse spawn data and fill pointers -LUI T6,8007 -LW T6,5D18 (T6) T6=p->0xxx preset types -BEQ T6,R0,7F005AE8 skip if there aren't any (like that would ever happen...) -NOP -JAL 7F0C0A20 -NOP -LW T7,0008 (S0) T7=set# -LUI T2,8007 -LUI AT,8008 -BNE V0,T7,7F005AE8 -NOP -//7F005AA8: -LW T0,0004 (S0) -LUI V0,8008 -LW V0,9C68 (V0) -SLL T1,T0,0x2 -SUBU T1,T1,T0 -LW T2,5D18 (T2) -SLL T1,T1,0x2 -SUBU T1,T1,T0 -SLL T1,T1,0x2 -SLL T4,V0,0x2 -ADDU AT,AT,T4 -ADDU T3,T1,T2 -SW T3,9C28 (AT) -LUI AT,8008 -ADDIU T5,V0,0001 -SW T5,9C68 (AT) -//7F005AE8: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C - - -+-+-+-+-+ -REWRITTEN ROUTINE FROM SMARTSPAWNS -rewrite: -LUI T6,8007 -LW T6,5D18 (T6) //T6=offset to 0xxx preset table -BEQ T6,R0,7F005AE8 //abort if no 0xxx presets! -NOP -JAL 7F0C0A20 //returns set number when demos are running. V0 only !0 when demo running! - //T2, T7, and AT not affected, so exploiting! -*LUI at,8008 -*bne V0,R0,test -LW T7,0008 (S0) //T7=set# -//set0 in multi always on -*beq t7,r0,expando! -*lui v0,8003 -*lw v0,b520 (v0) //v0=#players (essentially, same as parsing sets) -//test -*bne v0,t7,end -//expando! -LUI T2,8007 -LW T0,0004 (S0) //preset -*LW V0,9C68 (at) //V0=80079C68 (SPAWN COUNTER) -SLL T1,T0,0x2 -SUBU T1,T1,T0 -LW T2,5D18 (T2) //T2=0xxx preset list -SLL T1,T1,0x2 -SUBU T1,T1,T0 -SLL T1,T1,0x2 //T1=offset to preset (preset * 0x2C) -SLL T4,V0,0x2 //T4=offset in spawn pointer list -*ADDU T4,AT,T4 -ADDU T3,T1,T2 //T3=address of preset -*SW T3,9C28 (T4) //save address of preset -ADDIU T5,V0,0001 //count++ -SW T5,9C68 (AT) //save new count -//7F0C5AE8: end -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C //S0=next command - -+-+-+-+-+-+ -FINAL REWRITE -available: AT,V0,V1,T0,T1,T2,T3,T4,T5,T6,T7,T8 (jumped it here),T9 - -7F005A7C: 0x3A5AC -0FC26919 JAL 7F09A464 //ret. V0=#players -24010008 *ADDIU AT,R0,0008 //T2, T7, and AT not affected, so exploiting! -0FC30288 JAL 7F0C0A20 //returns set number when demos are running. V0 only !0 when demo running! -00415004 SLLV T2,AT,V0 T2=2^(#players) -920F000B LBU T7,000B (S0) //T7=set# -31E8000F ANDI T0,T7,000F T0=just set numbers -144800BB *bne V0,T0,end -3C018008 *LUI at,8008 -//player total sorting -014F4024 AND T0,T2,T7 -150000B8 *BNEZ T0,end -8C249C28 *LW V0,9C28 (at) //V0=80079C28 (SPAWN COUNTER) -//expando! -8E080004 LW T0,0004 (S0) //preset -3C0A8007 LUI T2,8007 -290F2710 SLTI T7,T0,2710 -55E00004 BNEZL T7,[grab] -3409002C ORI T1,R0,002C -34090044 ORI T1,R0,0044 -254A0004 ADDIU T2,T2,0004 -2508D8F0 ADDIU T0,T0,D8F0 //'unsigned' just means no overflow -//grab -01280019 MULTU T1,T0 -00027880 SLL T7,V0,0x2 //T4=offset in spawn pointer list -8D4A5D18 LW T2,5D18 (T2) //T2=0xxx preset list -002F7821 *ADDU T7,AT,T7 -00004812 MFLO T1 //T4=offset in spawn pointer list -012A4021 ADDU T0,T1,T2 //T3=address of preset -ADE89C2C *SW T0,9C2C (T7) //save address of preset -24420001 ADDIU V0,V0,0001 //count++ -//7F005AE8: end -100000A6 BEQ R0,R0,7F005D84 //borrow the +0C to position from another routine... -AC229C28 SW V0,9C28 (AT) //save new count - -DEBUG FOR MULTIPLAYER... - ------------- -++++++++++++ ------------- - -Moving the spawn registry -Things that use the index number (80079C68) - -//7F0058CC: 3A3FC reset spawn # counter -*SW R0,9C68 (AT) - - -7F005A7C already addressed - - -//7F005E98: 3A9C8 -*LW T0,9C68 (T0) -BLEZL T0,7F005F50 -ADDIU A0,SP,008C -JAL 7F09A464 -NOP -SLTI AT,V0,0002 -BNEZ AT,7F005ED4 -LUI T1,8008 -*LW T1,9C68 (T1) -BLEZL T1,7F005ED8 -OR V1,R0,R0 -JAL 7F0790F0 -NOP -BEQ R0,R0,7F005ED8 -OR V1,V0,R0 -//7F005ED4: -OR V1,R0,R0 -//7F005ED8: -LUI T2,8008 -*ADDIU T2,T2,9C28 start of spawn pointer list -... - - -//7F00F814: 44344 - - -//7F079130: ADC60 -*LW T6,9C68 (T6) -OR S2,V0,R0 -ADDIU S1,R0,0001 -BLEZ T6,7F07925C -OR S7,R0,R0 -LUI AT,447A spawning radius limit -LUI S8,8008 -LUI S5,8008 -LUI S4,8008 -MTC1 AT,F20 -ADDIU S4,S4,9EE0 -*ADDIU S5,S5,9C28 -ADDIU S8,S8,A0B0 -LW V0,0000 (S8) -LUI T1,8008 -ADDIU S7,S7,0001 -LW T7,29E0 (V0) -OR S1,R0,R0 -OR S0,R0,R0 -ADDIU T8,T7,0001 -SW T8,29E0 (V0) -LW T9,0000 (S8) -//7F079188: ADCB8 -*LW T1,9C68 (T1) -LW T0,29E0 (T9) -DIV T0,T1 -MFHI S3 -BNEZ T1,7F0791A4 -NOP -... THIS IS THE PART THAT HANDLES distance calculation!! - -//7F079248: ADD78 -*LW T7,9C68 (T7) - -//7F07926C: ADD9C -*ADDIU S5,S5,9C28 - -//7F079280: ADDB0 -*LW T8,9C68 (T8) - -//7F0792BC: ADDEC -*LW T3,9C68 (T3) - -//7F079378: ADEA8 -*LW T9,9C68 (T9) - -//7F07939C: ADECC -*LW T0,9C68 (T0) - - - -//7F0889A8: BD4D8 respawn! also seems to do a lot of distance calculations... -*LW T1,9C68 (T1) - -//7F0889D4: BD504 -*LW V0,9C28 (V0) - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/7F0790F0 - selspawn update.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/7F0790F0 - selspawn update.txt deleted file mode 100644 index 7b5cb38..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/7F0790F0 - selspawn update.txt +++ /dev/null @@ -1,483 +0,0 @@ -Can't go roomwise, but can rewrite original to random select from spawns outside distance. -Otherwise, worst case chooses the one everybody is furthest from. - -7F089F68 A0->invisible to guards flag -7F089F74 V0= invisible to guards flag - -use this new NSNA function: -7F0796C0 AE1F0 F0=distance between two positions - accepts: A0=p->xyz (@+8,C,10), A1=p->xyz (@+8,C,10) - -You need distances anyway. Generate list of all distances, and use upper segment as a list of all valids. - -compensating for stage scale: -Facility 3F9A6DF0 1.206480 MP arena is 6200x4500 (rooms sometimes 1000 each!) spawns are all ~1000 away though, so maybe okay here -Archives 3F01BCB6 0.506786 1000 okay -BunkerII 3F0A1081 0.539314 1000.0 okay! 1200 would be better, maybe even 1500 -Statue 3DDB8D2D 0.107203 2000x200 even 250/300 would be okay... -Caverns 3E895721 0.268243 2000x2700 1000 okay, but 500 would be better -Cradle 3E715F16 0.235714 4000x4000 500 would be a lot better -Egyptian 3E831CEB 0.256080 2000x3000 500 would be okay, though 1000 would also work -Temple 3EF15F16 0.471429 3400x3100 1000 is okay -Complex 3F715F16 0.942857 4200x4850 1500 would be more fair..., 2000 even -Stacks 3F28F5C2 0.660000 should be closer to 2000 or at least 1500 -Caves 3E10D2A7 0.141429 400x200 - -NSNA/smartspawns should include type 0A, 8bytes with this format: -0x0 3 smartspawn flags; push >>8 for actual -0x3 1 0A -0x4 4 (float) distance - Nonpatched should ignore, since float must be set nonzero. Using full float allows you to be really specific. - - That requires a slight amendment below, reading F20's value from whatever location you stuffed it in. - Also remember to tack something into MP initialization (or generic init) to set the default value of 1000.0. - -+_+ - -7F0790F0 ADC20 V0=selected spawn# - note: spawncap extension hack shown below! -3C018008 LUI AT,8008 -8C219C28 LW AT,9C28 (AT) ;T6=80079C28: #spawns (hack) -00011080 SLL V0,AT,0x2 ;V0=#spawns->offset -27BDFFA0 ADDIU SP,SP,FFA0 -03A2E823 SUBU SP,SP,V0 ;SP-=space for all spawns -AFBF0040 SW RA,0040 (SP) -AFB60038 SW S6,0038 (SP) -AFB50034 SW S5,0034 (SP) -AFB40030 SW S4,0030 (SP) -AFB3002C SW S3,002C (SP) -AFB20028 SW S2,0028 (SP) -AFB10024 SW S1,0024 (SP) -AFB00020 SW S0,0020 (SP) -F7B40018 SDC1 F20,0018 (SP) -00208025 OR S0,AT,R0 ;S8=#spawns -1A000033 BLEZ S0,7F0791F8 ;return if invalid #spawns -00009825 OR S3,R0,R0 ;S3=0 init spawncount -//7F079130: CHANGE NEXT TWO LINES to LUI AT,addy; LWC1 F20,addy (AT) for smartspawn4 extension -3C01447A LUI AT,447A ; ;3C018005 LUI AT,8005 -4481A000 MTC1 AT,F20 ;F20=1000.0 ;C4345290 LWC1 F20,5290 (AT) -3C158008 LUI S5,8008 -26B59C2C ADDIU S5,S5,9C2C ;S5=80079C2C: spawn pointers -00009025 OR S2,R0,R0 ;count of valid spawns -0000A025 OR S4,R0,R0 ;spawn iterator -44802000 MTC1 R0,F4 ;F4=furthest distance -//7F07914C: loop to find longest distance -2416000C ADDIU S6,R0,000C -3C017F80 LUI AT,7F80 -44811000 MTC1 AT,F2 -//7F079158: figure shortest distance between each point and any player -3C058008 LUI A1,8008 -00B62021 ADDU A0,A1,S6 -8C849EE0 LW A0,9EE0 (A0) -1080000A` BEQ A0,R0,7F079190 -8CA5A0B0 LW A1,A0B0 (A1) -10850008` BEQ A0,A1,7F079190 -24840484 ADDIU A0,A0,0484 ;A0=BONDdata+484: xyzpos-8, to be compatible with thingy -8EA50000 LW A1,0000 (S5) -0FC1E5B0 JAL 7F0796C0 ;F0=distance -24A5FFF8 ADDIU A1,A1,FFF8 ;A1=p->spawn preset-8, to be compatible -4602003C C.LT.S F0,F2 -00000000 NOP -45030001 BC1TL 7F079190 ;branch if greater than given value -46000086 MOV.S F2,F0 ;F2=value -16C0FFF1` BNEZ S6,7F079158 -26D6FFFC ADDIU S6,S6,FFFC ;S7-=4 -//7F079198: keep ID for furthest overall distance -4604103C C.LT.S F2,F4 -00000000 NOP -45010003 BC1T 7F0791B0 ;branch if new value (F2) < old one (F4) -00000000 NOP -46001106 MOV.S F4,F2 ;F4=value -02809825 OR S3,S4,R0 ;S3=spawn index -//7F0791B0: if < 1000, save ID -4614103C C.LT.S F2,F20 -00121080 SLL V0,S2,0x2 -45010003 BC1T 7F0791C8 -005D1021 ADDU V0,V0,SP ;V0=p->indices on stack -AC540050 SW S4,0050 (V0) -26520001 ADDIU S2,S2,0001 -//7F0791C8: loop for each spawn -26940001 ADDIU S4,S4,0001 ;spawn# -1690FFDF` BNE S4,S0,7F07914C -26B50004 ADDIU S5,S5,0004 ;p->next spawn -//7F0791D4: choose one of these IDs -12400008 BEQ S2,R0,7F0791F8 ;branch if no valid spawns; S3 from above becomes return value -00000000 NOP -0C002914 JAL 7000A450 ;V0= random -00000000 NOP -0052001B DIVU V0,S2 -00009810 MFHI S3 ;V0=rand % #spawns; sorry for burning cycles -00131080 SLL V0,S3,0x2 -005D1021 ADDU V0,V0,SP -8C530050 LW S3,0050 (V0) ;S3=randomly selected index from list -//7F0791F8: return -8FBF0044 LW RA,0040 (SP) -02601025 OR V0,S3,R0 ;V0=spawn# -00100880 SLL AT,S0,0x2 ;V0=#spawns->offset -D7B40018 LDC1 F20,0018 (SP) -8FB00020 LW S0,0020 (SP) -8FB10024 LW S1,0024 (SP) -8FB20028 LW S2,0028 (SP) -8FB3002C LW S3,002C (SP) -8FB40030 LW S4,0030 (SP) -8FB50034 LW S5,0034 (SP) -8FB60038 LW S6,0038 (SP) -03A1E821 ADDU SP,SP,AT ;tack back on offset for spawn list -03E00008 JR RA -27BD0060 ADDIU SP,SP,0060 - - Note this would need to be revised for proper spawning with bots, unless you don't really care about them ;*) - -+_+ - -7F091B64 is used to activate a particular cheat#. That's looped per-player in the ordinary route 7F091AAC. However, it really only activates the cheat for the cur.player#. -7F091B64 accepts: A0=activate cheat# for cur.player -7F0927BC V0=TRUE if cheat A0 activated - You're testing for #22 (0x16) -This kills dependance on 80055290-800552AC! - -7F0888E8 BD418 MP respawn - accepts: no arguments -27BDFFA8 ADDIU SP,SP,FFA8 -3C0F8003 LUI T7,8003 -AFBF001C SW RA,001C (SP) -AFB10018 SW S1,0018 (SP) -AFB00014 SW S0,0014 (SP) -8DE1688C *LW AT,688C (T7) ;AT=8003688C: NULL.xpos -AFA1004C *SW AT,004C (SP) -8DE16890 *LW AT,6890 (T7) ;T0=80036890: NULL.ypos -AFA10050 *SW AT,0050 (SP) -8DE16894 LW AT,6894 (T7) ;AT=80036894: NULL.zpos -AFA10054 *SW AT,0054 (SP) ;copy 8003688C-94 -> SP+4C-58 -3C108007 LUI S0,8007 -0FC1E4FB JAL 7F0793EC ;initialize playerdata -8E105D08 LW S0,5D08 (S0) ;S0=80075D08: p->setup.intro -0FC1E62E JAL 7F0798B8 -3C118008 LUI S1,8008 -//7F088930: -8E31A0B0 *LW S1,A0B0 (S1) ;S1=8007A0B0: cur.playerdata -240C0001 ADDIU T4,R0,0001 -24020007 ADDIU V0,R0,0007 -AE2000D8 SW R0,00D8 (S1) ;0->BONDdata+D8: disable player button control -240F0002 ADDIU T7,R0,0002 -2404FFFF ADDIU A0,R0,FFFF -AE200428 *SW R0,0428 (S1) ;0->BONDdata+428: -AE200424 *SW R0,0424 (S1) ;0->BONDdata+424: -AE2C0420 *SW T4,0420 (S1) ;1->BONDdata+420: -AE2229B8 *SW V0,29B8 (S1) ;7->BONDdata+29B8: -AE2229D4 *SW V0,29D4 (S1) ;7->BONDdata+29D4: -AE201064 *SW R0,1064 (S1) ;0->BONDdata+1064: -0FC228E0 JAL 7F08A380 ;unset flags A0 at BONDdata+11D8 -AE2F1128 *SW T7,1128 (S1) ;2->BONDdata+1128: -0FC22A4A JAL 7F08A928 ;unset flags A0 at 800368B4 -2404FFFF ADDIU A0,R0,FFFF ;A0= -1 -0FC26919 JAL 7F09A464 ;V0=#players -00000000 NOP -//7F08899C: note: spawncap extension hack shown below! -28410002 SLTI AT,V0,0002 -54200008 *BNEL AT,R0,7F088998 ;branch if solo -00001825 OR V1,R0,R0 ;index=0 -3C098008 LUI T1,8008 -8D299C28 LW T1,9C28 (T1) ;T1=80079C28: #spawns -59200004 BLEZL T1,7F088998 ;branch if invalid or zero -00001825 OR V1,R0,R0 -0FC1E43C JAL 7F0790F0 ;V0=selected spawn# -00000000 NOP -00021825 OR V1,V0,R0 ;V1=V0: index -//7F088998: set player position to selected spawn -00035080 SLL T2,V1,0x2 ;T2=spawn#->offset -3C028008 LUI V0,8008 -004A1021 ADDU V0,V0,T2 -8C429C2C LW V0,9C2C (V0) ;V0=80079C2C: p->spawns -C4440000 LWC1 F4,0000 (V0) ;F4=spawn.xpos -E7A4004C SWC1 F4,004C (SP) ;SP+4C=spawn.xpos -C4460008 LWC1 F6,0008 (V0) ;F6=spawn.zpos -8FA5004C LW A1,004C (SP) ;A1=xpos -E7A60054 SWC1 F6,0054 (SP) ;SP+54=spawn.zpos -8C440028 LW A0,0028 (V0) ;A0= +28: p->tile -8FA60054 LW A2,0054 (SP) ;A2=zpos -0FC20358 JAL 7F080D60 -AFA40044 SW A0,0044 (SP) ;SP+44=p->tile -C62829BC *LWC1 F8,29BC (S1) ;F8=BONDdata+29BC -46004280 ADD.S F10,F8,F0 -E7AA0050 SWC1 F10,0050 (SP) -E6200070 *SWC1 F0,0070 (S1) ;F0->BONDdata+70 -0C002914 JAL 7000A450 ;V0=random -E7A0003C SWC1 F0,003C (SP) -44828000 MTC1 V0,F16 -3C018005 LUI AT,8005 -C42C5284 LWC1 F12,5284 (AT) ;F12=80055284: -C7A2003C LWC1 F2,003C (SP) -04410005 BGEZ V0,7F088A0C ;branch if positive -468084A0 CVT.S.W F18,F16 ;F18=(float) random -3C014F80 LUI AT,4F80 -44812000 MTC1 AT,F4 ;F4=4294967296.0 [4F800000] -00000000 NOP -46049480 ADD.S F18,F18,F4 ;make positive -//7F088A0C: move player to position -3C012F80 LUI AT,2F80 -44813000 MTC1 AT,F6 -3C0143B4 LUI AT,43B4 -44815000 MTC1 AT,F10 ;F10=360.0 [43B40000] -46069202 MUL.S F8,F18,F6 -3C018005 LUI AT,8005 -460C4002 MUL.S F0,F8,F12 -27A5004C ADDIU A1,SP,004C ;A1=SP+4C: p->xyz positions -460A0402 MUL.S F16,F0,F10 -E7A00048 SWC1 F0,0048 (SP) -460C8103 DIV.S F4,F16,F12 -E6240148 *SWC1 F4,0148 (S1) ;F4->BONDdata+148: lateral rotation 1st -E6220074 *SWC1 F2,0074 (S1) -C4325288 LWC1 F18,5288 (AT) ;F18=80055288: -46121183 DIV.S F6,F2,F18 -E626006C *SWC1 F6,006C (S1) -8FA60044 LW A2,0044 (SP) ;A2=SP+44: p->target tile -0FC1F1CC JAL 7F07C730 ;move player to location -26240488 *ADDIU A0,S1,0488 ;A0=BONDdata+488: p->cur.tile, though really position block -//7F088AA0: move player's viewport etc. to position -0FC15FAB JAL 7F057EAC -C7AC0048 LWC1 F12,0048 (SP) -46000207 NEG.S F8,F0 -44805000 MTC1 R0,F10 -E6280498 *SWC1 F8,0498 (S1) ;F8->BONDdata+498 -E62A049C *SWC1 F10,049C (S1) ;F10->BONDdata+49C -0FC15FA8 JAL 7F057EA0 -C7AC0048 LWC1 F12,0048 (SP) -3C018005 LUI AT,8005 -C42C528C LWC1 F12,528C (AT) ;F12=8005528C: 0.1 [3DCCCCD0] -E62004A0 *SWC1 F0,04A0 (S1) ;F0->BONDdata+4A0 -C7A2004C LWC1 F2,004C (SP) -E6220408 *SWC1 F2,0408 (S1) ;F2->BONDdata+408: xpos -8E2900A8 *LW T1,00A8 (S1) ;T1=p->pos.data -E5220008 SWC1 F2,0008 (T1) ;F2->pos.data.x -C7A20050 LWC1 F2,0050 (SP) -E622040C *SWC1 F2,040C (S1) ;F2->BONDdata+40C: ypos -E522000C *SWC1 F2,000C (T1) ;F2->pos.data.y -C7A20054 LWC1 F2,0054 (SP) -E6220410 *SWC1 F2,0410 (S1) ;F2->BONDdata+410: zpos -E5220010 *SWC1 F2,0010 (T1) ;F2->pos.data.z -8FAE0044 LW T6,0044 (SP) -AD2E0014 *SW T6,0014 (T1) ;T6->pos.data.tile -C63004B4 *LWC1 F16,04B4 (S1) ;F16=BONDdata+4B4: xpos -460C8103 DIV.S F4,F16,F12 ;F4=xpos/10 -E62403B8 *SWC1 F4,03B8 (S1) ;F4->BONDdata+3B8 -C63004B8 *LWC1 F16,04B8 (S1) ;F18=BONDdata+4B8: ypos -460C8103 DIV.S F4,F16,F12 ;F6=ypos/10 -E62403BC *SWC1 F4,03BC (S1) ;F6->BONDdata+3BC -C63004BC *LWC1 F16,04BC (S1) ;F8=BONDdata+4BC: zpos -460C8103 DIV.S F4,F16,F12 ;F10=zpos/10 -0FC22FFC JAL 7F08BFF0 ;reinitialize player inventory -E62403C0 *SWC1 F4,03C0 (S1) ;F10->BONDdata+3C0 -//7F088ADC: fry ammo totals -26241130 *ADDIU A0,S1,1130 -0FC0186C *JAL 7F0061B0 ;initialize A1 bytes at A0 (wordish) -24050078 *ADDIU A1,R0,0078 -//7F088AF4: parse intro block -12000020 *BEQ S0,R0,7F088B78 ;skip if no intro block -//7F088AF8: offset past intro type's data -3C017F00 *LUI AT,7F00 -92020003 *LBU V0,0003 (S0) ;V0=intro.type -00220821 *ADDU AT,AT,V0 -90215F00 *LBU AT,5F00 (AT) ;AT=length of command -02018021 *ADDU S0,S0,AT ;S0=p->next command -//7F088BCC: loop for each type, looking for items and ammo -24010009 *ADDIU AT,R0,0009 -10410019 BEQ V0,AT,7F088B78 ;quit if type 9 (EOL) -24010001 *ADDIU AT,R0,0001 -//7F088BF0: intro type 1: weapon -1422000D *BNE AT,V0,7F088B50 ;branch if not type 1 -24010002 *ADDIU AT,R0,0002 -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC *LW A0,FFFC (S0) -1040FFF3 *BEQ V0,R0,7F088AF8 ;branch if set mismatch -8E05FFF8 LW A1,FFF8 (S0) ;A1=cmd+8: left weapon -3C027F09 *LUI V0,7F09 -04A20002 BLTZL A1,+2 ;branch if single weapon -2442C488 *ADDIU V0,V0,C488 -2442C50C *ADDIU V0,V0,C50C -0040F809 *JALR RA,V0 -8E04FFF4 LW A0,FFF4 (S0) ;A0=cmd+4: right weapon -1000FFEB *BEQ R0,R0,7F088AF8 -00000000 *NOP -//7F088B50: intro type 2: ammo -1422FFE9 *BNE AT,V0,7F088AF8 -00000000 *NOP -0FC017AD JAL 7F006EB4 ;smartspawn -8E04FFFC *LW A0,FFFC (S0) -1040FFE5 *BEQ V0,R0,7F088AF8 ;branch if set mismatch -8E04FFF4 LW A0,FFF4 (S0) ;A0=cmd+4: type -0FC1A44C JAL 7F069130 ;add ammo type A0, total A1 to inventory -8E05FFF8 LW A1,FFF8 (S0) ;A1=cmd+8: quantity -//7F088C50: -1000FFE1 *BEQ R0,R0,7F088AF8 -00000000 NOP -//7F088C8C: BD7BC fade in -3C018005 LUI AT,8005 -AE200078 *SW R0,0078 (S1) ;BONDdata+0x78= 0.0 -C43052AC LWC1 F16,52AC (AT) ;F16=800552AC: -0.0001 [B8D1B717] -3C0142F0 LUI AT,42F0 -44816000 MTC1 AT,F12 ;F12= 120.0 [42F00000] timer (ms.) -E630007C *SWC1 F16,007C (S1) ;BONDdata+0x7C= -0.0001 -3C013F80 LUI AT,3F80 -44817000 MTC1 AT,F14 ;F14= 1.0 [3F800000] final level 100% -0FC20284 JAL 7F080A10 ;set cur. player fade -AE200080 *SW R0,0080 (S1) ;BONDdata+0x80= 0.0 -//7F088BA0: New bit - activate pertinent cheats -2410004B ADDIU S0,R0,004B ;S2=4B #possible cheats -//7F088BAC: loop for each remaining cheat! -3C028007 LUI V0,8007 -00501021 ADDU V0,V0,S0 ;V0+=S0: p->cheat's activated flag -904296A0 LBU V0,96A0 (V0) ;T1=activated flag -10400007 BEQ V0,R0,7F088BDC ;skip if not set -00000000 NOP -0FC24697 JAL 7F091A5C ;V0=TRUE if gameplay cheat -02002025 OR A0,S0,R0 ;A0=S0: cur.cheat# -14400003 BNE V0,R0,7F088BDC ;skip if not pertinent -2631FFFF ADDIU S1,S1,FFFF ;#cheats-- even if not pertinent you have an activation hit -0FC246D9 JAL 7F091B64 ;activate cheat A0 for cur.player -02002025 OR A0,S0,R0 ;A0=S0: cur.cheat# -2E020002 SLTIU V0,S0,0002 ;TRUE if 1 (final entry) -1040FFF2 BEQ V0,R0,7F088BAC ;loop for remaining cheats -2610FFFF ADDIU S0,S0,FFFF ;S0-- count-- -//7F088BE8: return -8FBF001C LW RA,001C (SP) -8FB10018 LW S1,0018 (SP) -8FB00014 LW S0,0014 (SP) -03E00008 JR RA -27BD0058 ADDIU SP,SP,0058 -// - NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - *NOP - -remember to overhaul 8002A900 to be #cheats, not just any amount of cheats... - -Moving this to make it "generic", as in unreliant on other patched features. -maybe add in a memory initializer -//7F00007C: 34BAC memset A0 -> A1 -00A42823 SUBU A1,A1,A0 -//7F000080: 34BB0 normal entry point: memset A1 bytes at A0 (wordwise) -2CA10011 SLTIU AT,A1,0011 -14200008 BNE AT,R0,single -00801025 OR V0,A0,R0 -AC400000 SW R0,0000 (V0) -AC400004 SW R0,0004 (V0) -AC400008 SW R0,0008 (V0) -AC40000C SW R0,000C (V0) -24420010 ADDIU V0,V0,0010 -1000FFF7 BEQ R0,R0,-loop -24A5FFF0 ADDIU A1,A1,FFF0 -// -2CA10005 SLTIU AT,A1,0005 -24A5FFFC ADDIU A1,A1,FFFC -24420004 ADDIU V0,V0,0004 -5020FFFC BEQL AT,R0,words -AC40FFFC SW R0,FFFC (V0) -// -24420001 ADDIU V0,V0,0001 -24A5FFFF ADDIU A1,A1,FFFF -04A3FFFD BGEZL A1,R0,-3 -A040FFFF SB R0,FFFF (V0) -03E00008 JR RA -00000000 NOP -(switch 0FC0186B/0FC0186C with 0FC0001F/0FC00020) - -General cheat activation works like this at 7F0BDBFC and 7F0BEC44: -(note 7F0BEC44 tests for nongameplay cheats, so would need flag to detect!) -Would save space with those, but need something player-specific for above. - ADDIU SP,SP,FFE0 - SW RA,001C (SP) - SW S0,0018 (SP) - SW S1,0014 (SP) - SW A0,0010 (SP) -//: - ADDIU S0,R0,004B ;S0=4B #possible cheats - LUI V0,8003 - LW S1,A900 (V0) ;S1=8002A900: #active cheats -//: loop for each remaining cheat - BEQ S1,R0,[7F0BDC50] ;skip if no cheats; note: omitting unimportant lines - LUI V0,8007 - ADDU V0,V0,S0 ;V0+=S0: p->cheat's activated flag - LBU V0,96A0 (V0) ;T1=activated flag - BEQ V0,R0,7F0BDC48 ;skip if not set - NOP - JAL 7F091A5C ;V0=TRUE if last applicable gameplay cheat - OR A0,S0,R0 ;A0=S0: cur.cheat# - LW AT,0010 (SP) ;AT=mode (0 if gameplay, 1 otherwise) - BEQ V0,AT,7F0BDC48 ;skip if not pertinent - ADDIU S1,S1,FFFF - JAL 7F091AAC ;tests and reroutes cheat# A0 to activation routine - OR A0,S0,R0 ;A0=S0: cur.cheat# -//: - SLTIU V0,S0,0002 ;TRUE if 1 (final entry) - BEQ V0,R0,7F0BDC20 ;loop for remaining cheats - ADDIU S0,S0,FFFF ;S0-- count-- -//: - LW S1,0014 (SP) - LW S0,0018 (SP) - LW RA,001C (SP) - JR RA - ADDIU SP,SP,FFE0 - -rewrite so this isn't a stupid routine: -7F091A5C C658C TRUE if not a gameplay cheat -2C82001C SLTIU V0,A0,001C ;TRUE if gameplay cheat 1-1B -03E00008 JR RA -38420001 XORI V0,V0,0001 ;V0=FALSE if gameplay - -This breaks DK mode. You get ever smaller. It's rigged to do the first 10 guards listed in guarddata instead of, say, a global or at least cur.#guards. -Just fix DK instead. Above works fine otherwise. - -Also, 1x weapons can now be patched to work MP. \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/MP spawn writting routine.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/MP spawn writting routine.txt deleted file mode 100644 index 0e055e7..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/MP spawn writting routine.txt +++ /dev/null @@ -1,374 +0,0 @@ -Two things with this hack... - First, change the address for the count to first position, then the address for the pointers one word ahead (80079C28, 80079C2C). - Second, change the parsing routine to catch the set numbers. - This is rather easy. First, use a simple MULT instead of the shifts to save space. Secondly, grab the player total [8002B520]. Thirdly, grab the op's third word [LW X,0008 (S0)]. If 0, just do normally. If set#=#players, also extract. Otherwise, branch past. - To do without frying demos... - - -console: rewrite the routine! set the JR in the table, then JR back to the normal branch. - skip the set number extraction (fry demos) and assume the preset list exists. - - -Sets patch: -USA -03A5C0 50 3C018008140200048E0F0008100F00033C0280038C42B520144F000F3C0A80078E0800048C229C6800084880012848238D4A5D1800094880012848230009488000026080002C6021012A5821AD8B9C28 - - - --------------------- - -7F005820: -LW S0,5D08 (S0) -SW R0,0000 (S1) -LUI AT,8003 -LUI S2,8003 -SW R0,642C (AT) //0->8003642C -MTC1 R0,F4 -ADDIU S2,S2,6430 //S2=80036430 -SW R0,0000 (S2) //0->80036430 -LUI AT,8003 -SW R0,007C (SP) -SW R0,6434 (AT) //0->80036434 -JAL 7000695C //returns V0=stage# -SWC1 F4,0088 (SP) -//7F005854: CUBA-specific routines -ADDIU AT,R0,0036 -BNE V0,AT,7F005888 //branch if stage# !=36 (cuba) -LUI A0,0004 -ORI A0,A0,6EA0 //A0=46EA0 -JAL 70009720 -ADDIU A0,R0,0004 -//7F00586C: -ADDIU T2,V0,003F -ADDIU AT,R0,FFC0 //AT=FFC0 -SW V0,0000 (S1) -AND T3,T2,AT -ADDIU T4,R0,0001 //T4=1 -SW T3,0000 (S1) -SW T4,0000 (S2) -//7F005888: reset runtime variables -LUI AT,8003 -SW R0,6438 (AT) //0->80036438 -LUI AT,8003 -SW R0,643C (AT) //0->state of credits -LUI AT,8003 -LUI V0,8008 -SW R0,6440 (AT) //0->P.to credits text -MTC1 R0,F6 -MTC1 R0,F8 -MTC1 R0,F10 -ADDIU V0,V0,9990 //V0=80079990 -LUI AT,8003 -SWC1 F6,0000 (V0) -SWC1 F8,0004 (V0) -SWC1 F10,0008 (V0) -SW R0,6444 (AT) //0->plastique explosion reg -LUI AT,8008 -SW R0,9C68 (AT) //0->80079C68 -LUI AT,8003 -SW R0,6448 (AT) //0->PLAYER TANK control reg -LUI AT,8003 -SW R0,644C (AT) //0->8003644C -MTC1 R0,F16 -LUI AT,8003 -SW R0,6450 (AT) //0->80036450 -LUI AT,8003 -LUI V1,8003 -SWC1 F16,6454 (AT) -MTC1 R0,F18 -ADDIU V1,V1,6458 //V1=80036458 -MTC1 R0,F4 -SW R0,0000 (V1) //0->80036458 -SW R0,0004 (V1) //0->8003645C -LUI AT,8003 -SWC1 F18,6460 (AT) -MTC1 R0,F6 -//7F005918: -... -//7F005A38: retrieve spawn locations -LW V0,0000 (S0) //next command in spawn block -ADDIU AT,R0,0009 //AT=9 -LUI S2,8008 -BEQ V0,AT,7F005DF4 //if endpoint reached branch -LUI AT,42C8 -MTC1 AT,F22 -LUI AT,4780 -MTC1 AT,F20 -ADDIU S2,S2,A0B0 //S2=8007A0B0 -SLTIU AT,V0,0009 //TRUE if command < endcommand -BEQ AT,R0,7F005DE0 //END at endcommand -SLL T8,V0,0x2 //T8=COMMAND->offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,F1AC (AT) //T8=op application routine -JR T8 -NOP - -7F005A7C [0x3A5AC] 0 (spawn) op application -3C0E8007 LUI T6,8007 -8DCE5D18 LW T6,5D18 (T6) //T6=offset to 0xxx preset table -11C00018 BEQ T6,R0,7F005AE8 //abort if no 0xxx presets! -00000000 NOP -0FC30288 JAL 7F0C0A20 //returns set number when demos are running -00000000 NOP -8E0F0008 LW T7,0008 (S0) //T7=set# -3C0A8007 LUI T2,8007 -3C018008 LUI AT,8008 -144F0011 BNE V0,T7,7F005AE8 //branch if wrong set -00000000 NOP -//7F005AA8: -8E080004 LW T0,0004 (S0) //preset -3C028008 LUI V0,8008 -8C429C68 LW V0,9C68 (V0) //V0=80079C68 (SPAWN COUNTER) -00084880 SLL T1,T0,0x2 -01284823 SUBU T1,T1,T0 -8D4A5D18 LW T2,5D18 (T2) //T2=0xxx preset list -00094880 SLL T1,T1,0x2 -01284823 SUBU T1,T1,T0 -00094880 SLL T1,T1,0x2 //T1=offset to preset (preset * 0x2C) -00026080 SLL T4,V0,0x2 //T4=offset in spawn pointer list -002C0821 ADDU AT,AT,T4 -012A5821 ADDU T3,T1,T2 //T3=address of preset -//7F0C5AD8: -AC2B9C28 SW T3,9C28 (AT) //save address of preset -3C018008 LUI AT,8008 -244D0001 ADDIU T5,V0,0001 //count++ -AC2D9C68 SW T5,9C68 (AT) //save new count -100000BE BEQ R0,R0,7F005DE4 -2610000C ADDIU S0,S0,000C //S0=next command - -8E080004 -3C028008 -8C429C68 0x3A5E0 -00084880 -01284823 -8D4A5D18 - -++++++++++++++++++++ -rewrite: -LUI T6,8007 -LW T6,5D18 (T6) //T6=offset to 0xxx preset table -BEQ T6,R0,7F005AE8 //abort if no 0xxx presets! -NOP -JAL 7F0C0A20 //returns set number when demos are running. V0 only !0 when demo running! - //T2, T7, and AT not affected, so exploiting! -*LUI at,8008 -*bne V0,R0,test -LW T7,0008 (S0) //T7=set# -//set0 in multi always on -*beq t7,r0,expando! -*lui v0,8003 -*lw v0,b520 (v0) //v0=#players (essentially, same as parsing sets) -//test -*bne v0,t7,end -//expando! -LUI T2,8007 -LW T0,0004 (S0) //preset -*LW V0,9C68 (at) //V0=80079C68 (SPAWN COUNTER) -SLL T1,T0,0x2 -SUBU T1,T1,T0 -LW T2,5D18 (T2) //T2=0xxx preset list -SLL T1,T1,0x2 -SUBU T1,T1,T0 -SLL T1,T1,0x2 //T1=offset to preset (preset * 0x2C) -SLL T4,V0,0x2 //T4=offset in spawn pointer list -*ADDU T4,AT,T4 -ADDU T3,T1,T2 //T3=address of preset -*SW T3,9C28 (T4) //save address of preset -ADDIU T5,V0,0001 //count++ -SW T5,9C68 (AT) //save new count -//7F0C5AE8: end -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C //S0=next command -++++++++++++++++++++ - -7F005DE4 LOOP UNTIL ALL INTRO COMMANDS ARE COMPLETED -LW V0,0000 (S0) //V0=next command -ADDIU AT,R0,0009 //AT=9 (endcommand) -BNEL V0,AT,7F005A60 -SLTIU AT,V0,0009 //TRUE if command < endcommand - - ------------------------------ -7F0C0A20: subroutine extracts set number (probably) -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F0BFC8C //returns V0=? -NOP -BNEZ V0,7F0C0A44 -NOP -JAL 7F0BFC98 //returns V0=? -NOP -BEQ V0,R0,7F0C0A54 -//7F0C0A44: -LUI T6,8005 -LW T6,8468 (T6) //T6=80048468 -BEQ R0,R0,7F0C0A58 -LW V0,0088 (T6) -//7F0C0A54: -OR V0,R0,R0 //V0=0 -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -------------------------- -7000695C: RETURNS V0=stage # -LUI V0,8002 -JR RA -LW V0,41A8 (V0) //V0=800241A8 - -7F0BFC8C: RETURNS V0=? -LUI V0,8005 -JR RA -LW V0,8474 (V0) //V0=80048474 - -7F0BFC98: RETURNS V0=? -LUI V0,8005 -JR RA -LW V0,8480 (V0) //V0=80048480 - ----------------------------- ------------------------------ ------------------------------- -------------------------------- -Spawn selection routine -7F005E98: -LW T0,9C68 (T0) //T0=count (80079C68) -BLEZL T0,7F005F50 - ADDIU A0,SP,008C -JAL 7F09A464 -NOP -SLTI AT,V0,0002 -BNEZ AT,7F005ED4 -LUI T1,8008 -LW T1,9C68 (T1) //T1=count -BLEZL T1,7F005ED8 -OR V1,R0,R0 -JAL 7F0790F0 -NOP -BEQ R0,R0,7F005ED8 -OR V1,V0,R0 -//7F005ED4: -OR V1,R0,R0 -LUI T2,8008 -ADDIU T2,T2,9C28 //T2=base for spawn list - -SLL T3,V1,0x2 //T3=V1->offset -ADDU S1,T3,T2 //S1=SPAWN pointer -LW S0,0000 (S1) //S0=address of preset - - - -7F09A464 crazy subroutine... -//7F07912C: -LUI T6,8008 -LW T6,9C68 (T6) -//7F07915C: -ADDIU S5,S5,9C28 - -AND MUCH MORE... - - - - - - -++++++++++++++++++++ -USED WHEN TRYING TO RESPAWN (HOPEFULLY RANDOMIZATION ROUTINE!) -//7F088984: -JAL 7F08A380 -SW T7,1128 (T0) -JAL 7F08A928 -ADDIU A0,R0,FFFF -JAL 7F09A464 -NOP -//7F08899C: -SLTI AT,V0,0002 -BNEZ AT,7F0889C4 -LUI T1,8008 -LW T1,9C68 (T1) //T1=spawn count -BLEZL T1,7F0889C8 //do if invalid number (must be natural number) - OR V1,R0,R0 -JAL 7F0790F0 -NOP -BEQ R0,R0,7F0889C8 -OR V1,V0,R0 -//7F0889C4: retrieve and opy preset data to Stack -OR V1,R0,R0 -SLL T2,V1,0x2 -LUI V0,8008 -ADDU V0,V0,T2 -LW V0,9C28 (V0) -LWC1 F4,0000 (V0) -... - - - -7F0790F0 I think this chooses a random spawn and does distance checking... -ADDIU SP,SP,FFA0 -SW RA,0044 (SP) -SW S8,0040 (SP) -SW S7,003C (SP) -SW S6,0038 (SP) -SW S5,0034 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -JAL 7F09B150 -SDC1 F20,0018 (SP) -JAL 7F09A464 //V0=#players -OR S6,V0,R0 -//7F07912C -LUI T6,8008 -LW T6,9C68 (T6) //T6=spawn count -OR S2,V0,R0 //S2=#PLAYERS -ADDIU S1,R0,0001 //S1=1 -BLEZ T6,7F07925C -OR S7,R0,R0 -LUI AT,447A -LUI S8,8008 -LUI S5,8008 -LUI S4,8008 -MTC1 AT,F20 //F20=1000. -ADDIU S4,S4,9EE0 //S4=player data offsets -ADDIU S5,S5,9C28 //S5=spawn list -ADDIU S8,S8,A0B0 //S8=current player offset -LW V0,0000 (S8) //V0=playerdata -LUI T1,8008 -ADDIU S7,S7,0001 //S7++ -LW T7,29E0 (V0) //don"t know. ROOM? STATUS? was set to 48... -OR S1,R0,R0 -OR S0,R0,R0 -ADDIU T8,T7,0001 //T8=?+1 -SW T8,29E0 (V0) -LW T9,0000 (S8) //T9=playerdata -LW T1,9C68 (T1) //T1=spawncount -LW T0,29E0 (T9) //T0=?+1 -DIV T0,T1 -MFHI S3 //S3=T0%T1 0x49 is a prime number... -BNEZ T1,7F0791A4 -NOP -BREAK -//7F0791A4: -ADDIU AT,R0,FFFF //AT=-1 -BNE T1,AT,7F0791BC -LUI AT,8000 -BNE T0,AT,7F0791BC -NOP -BREAK -//7F0791BC: -BLEZ S2,7F07923C -NOP - - - ----- -7F09B150 SUBROUTINE returns V0=8007A0B8 -LUI V0,8008 -JR RA -LW V0,A0B8 (V0) - -7F09A464 SUBROUTINE returns V0=#players diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/opLISTFORspawnHACK.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/opLISTFORspawnHACK.txt deleted file mode 100644 index 97d64b4..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/opLISTFORspawnHACK.txt +++ /dev/null @@ -1,177 +0,0 @@ -0x3A5AC 7F005A7C (f/ 8004F1AC) -3D0E8007 LUI T6,8007 -8DCE5D18 LW T6,5D18 (T6) //T6=offset to 0xxx preset table -11C00018 BEQ T6,R0,7F005AE8 //abort if no 0xxx presets! -00000000 NOP -0FC30288 JAL 7F0C0A20 //returns set number when demos are running. -3C018008 *LUI at,8008 -14020004 *bne V0,R0,test -820F000B *LB T7,000B (S0) //T7=set# -100F0003 *beq t7,r0,expando! -3C028003 *lui v0,8003 -8C42B520 *lw v0,b520 (v0) //v0=#players - //7F005AA8 [test] -144F000F *bne v0,t7,end - //7F005AAc [expando!] -3C0A8007 LUI T2,8007 -8E080004 LW T0,0004 (S0) //preset -8C229C68 *LW V0,9C68 (at) //V0=80079C68 (SPAWN COUNTER) -00084880 SLL T1,T0,0x2 -01284823 SUBU T1,T1,T0 -8D4A5D18 LW T2,5D18 (T2) //T2=0xxx preset list -00094880 SLL T1,T1,0x2 -01284823 SUBU T1,T1,T0 -00094880 SLL T1,T1,0x2 //T1=offset to preset (preset * 0x2C) -00026080 SLL T4,V0,0x2 //T4=offset in spawn pointer list -002C6021 *ADDU T4,AT,T4 -012A5821 ADDU T3,T1,T2 //T3=address of preset -AD8B9C28 *SW T3,9C28 (T4) //save address of preset -244D0001 ADDIU T5,V0,0001 //count++ -AC2D9C68 SW T5,9C68 (AT) //save new count - //7F0C5AE8: end -100000BE BEQ R0,R0,7F005DE4 -2610000C ADDIU S0,S0,000C //S0=next command - - -GS! -820F000B LB T7,000B (S0) //T7=set# -100F0004 BEQ T7,R0,[expando] //set is 0 -3C018008 LUI AT,8008 -3C028003 LUI V0,8003 -8C42B520 LW V0,B520 (V0) //V0=#Players -144F000D BNE V0,T7,[END] //set = player# or else -8E080004 LW T0,0004 (S0) -8C229C68 LW V0,9C68 (AT) //V0=counter -3409002C ORI T1,R0,002C -01090019 MULTU T1,T0 -3C0A8007 LUI T2,8007 -8D4A5D18 LW T2,5D18 (T2) //T2=0xxx preset list -00004812 MFLO T1 -00026080 SLL T4,V0,0x2 -002C6021 ADDU T4,AT,T4 -012A5821 ADDU T3,T1,T2 -AD8B9C28 SW T3,9C28 (T4) //store spawn addy -244D0001 ADDIU T5,V0,0001 //count++ -AC2D9C68 SW T5,9C68 (AT) //save new count -0BC01779 J 7F005DE4 -2610000C ADDIU S0,S0,000C - ----------------------------------- -Japanese hack -0x3A5D4 7F005A64 (f/8004F1DC) -3D0E8007 LUI T6,8007 -8DCE5D58 LW T6,5D58 (T6) //T6=offset to 0xxx preset table -11C00018 BEQ T6,R0,7F005AE0 //abort if no 0xxx presets! -00000000 NOP -0FC305A4 JAL 7F0C1690 //returns set number -3C018008 *LUI at,8008 -14020004 *bne V0,R0,test -820F000B *LB T7,000B (S0) //T7=set# -100F0003 *beq t7,r0,expando! -3C028003 *lui v0,8003 -8C42B560 *lw v0,b560 (v0) //v0=#players - //7F005A90 [test] -144F000F *bne v0,t7,end - //7F005A94 [expando!] -3C0A8007 LUI T2,8007 -8E080004 LW T0,0004 (S0) //preset -8C229CD8 *LW V0,9CD8 (at) //V0=80079C68 (SPAWN COUNTER) -00084880 SLL T1,T0,0x2 -01284823 SUBU T1,T1,T0 -8D4A5D58 LW T2,5D58 (T2) //T2=0xxx preset list -00094880 SLL T1,T1,0x2 -01284823 SUBU T1,T1,T0 -00094880 SLL T1,T1,0x2 //T1=offset to preset (preset * 0x2C) -00026080 SLL T4,V0,0x2 //T4=offset in spawn pointer list -002C6021 *ADDU T4,AT,T4 -012A5821 ADDU T3,T1,T2 //T3=address of preset -AD8B9C98 *SW T3,9C98 (T4) //save address of preset -244D0001 ADDIU T5,V0,0001 //count++ -AC2D9CD8 SW T5,9CD8 (AT) //save new count - //[END] -100000C5 BEQ R0,R0,7F005DE8 -2610000C ADDIU S0,S0,000C //S0=next command - - -GS! -820F000B LB T7,000B (S0) //T7=set# -100F0004 BEQ T7,R0,[expando] //set is 0 -3C018008 LUI AT,8008 -3C028003 LUI V0,8003 -8C42B560 LW V0,B560 (V0) //V0=#Players -144F000D BNE V0,T7,[END] //set = player# or else -8E080004 LW T0,0004 (S0) -8C229CD8 LW V0,9CD8 (AT) //V0=counter -3409002C ORI T1,R0,002C -02090019 MULTU T1,T0 -3C0A8007 LUI T2,8007 -8D4A5D58 LW T2,5D58 (T2) //T2=0xxx preset list -00004812 MFLO T1 -00026080 SLL T4,V0,0x2 -002C6021 ADDU T4,AT,T4 -012A5821 ADDU T3,T1,T2 -AD8B9C98 SW T3,9C98 (T4) //store spawn addy -244D0001 ADDIU T5,V0,0001 //count++ -AC2D9CD8 SW T5,9CD8 (AT) //save new count -0BC0177A J 7F005DE8 -2610000C ADDIU S0,S0,000C - --------------------------------------- -PAL HACK -0x383D4 7F0059E4 (f/ 800475FC) -3D0E8006 LUI T6,8006 -8DCE4C58 LW T6,4C58 (T6) //T6=offset to 0xxx preset table -11C00018 BEQ T6,R0,[END] //abort if no 0xxx presets! -00000000 NOP -0FC2FFA8 JAL 7F0BFEA0 //returns set number -3C018007 *LUI at,8007 -14020004 *bne V0,R0,test -820F000B *LB T7,000B (S0) //T7=set# -100F0003 *beq t7,r0,expando! -3C028002 *lui v0,8002 -8C426A70 *lw v0,6A70 (v0) //v0=#players - //7F005A10 [test] -144F000F *bne v0,t7,end - //7F005A14 [expando!] -3C0A8006 LUI T2,8006 -8E080004 LW T0,0004 (S0) //preset -8C228778 *LW V0,8778 (at) //V0=80068778 (SPAWN COUNTER) -00084880 SLL T1,T0,0x2 -01284823 SUBU T1,T1,T0 -8D4A4C58 LW T2,4C58 (T2) //T2=0xxx preset list -00094880 SLL T1,T1,0x2 -01284823 SUBU T1,T1,T0 -00094880 SLL T1,T1,0x2 //T1=offset to preset (preset * 0x2C) -00026080 SLL T4,V0,0x2 //T4=offset in spawn pointer list -002C6021 *ADDU T4,AT,T4 -012A5821 ADDU T3,T1,T2 //T3=address of preset -AD8B8738 *SW T3,8738 (T4) //save address of preset -244D0001 ADDIU T5,V0,0001 //count++ -AC2D8778 SW T5,8778 (AT) //save new count - //7F005A50 [END] -100000C5 BEQ R0,R0,7F005D68 -2610000C ADDIU S0,S0,000C //S0=next command - - -GS! -820F000B LB T7,000B (S0) //T7=set# -100F0004 BEQ T7,R0,[expando] //set is 0 -3C018007 LUI AT,8007 -3C028002 LUI V0,8002 -8C426A70 LW V0,6A70 (V0) //V0=#Players -144F000D BNE V0,T7,[END] //set = player# or else -8E080004 LW T0,0004 (S0) -8C228778 LW V0,8778 (AT) //V0=counter -3409002C ORI T1,R0,002C -01090019 MULTU T1,T0 -3C0A8006 LUI T2,8006 -8D4A4C58 LW T2,4C58 (T2) //T2=0xxx preset list -00004812 MFLO T1 -00026080 SLL T4,V0,0x2 -002C6021 ADDU T4,AT,T4 -012A5821 ADDU T3,T1,T2 -AD8B8738 SW T3,8738 (T4) //store spawn addy -244D0001 ADDIU T5,V0,0001 //count++ -AC2D8778 SW T5,8778 (AT) //save new count -0BC0175A J 7F005D68 -2610000C ADDIU S0,S0,000C diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/solo animations simplified.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/solo animations simplified.txt deleted file mode 100644 index eb7a7a6..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Intro Block/solo animations simplified.txt +++ /dev/null @@ -1,92 +0,0 @@ -potential new format: -0x0 2 anim -0x2 2 start point -0x4 2 run length -0x6 2 rate, * 10000 - -42BE0000 95 005F -42200000 40 0028 -40E00000 7 0007 -3CA3D70A 0.02 00C8 (2710) or 0014 (0064) -3F000000 0.5 1388 (2710) or 01F4 (0064) - -003D 00F4 -0042 0108 -0061 0184 -0062 0188 -0063 018C -0064 0190 -0066 0198 -0067 019C -00B0 02C0 - - -ani val1 val2 val3*10000 -003D 005F FFFF 00C8 -0042 0007 0028 1388 -0061 0000 FFFF 1388 -0062 0000 FFFF 1388 -0063 0000 FFFF 1388 -0064 0000 FFFF 1388 -0066 0000 FFFF 1388 -0067 0000 FFFF 1388 -00B0 0000 FFFF 1388 - - -Potential Rewrite -//7F07AB84: 0xAF6B4 -14400039 -BNEZ V0,7F07AC6C -3C018003 LUI AT,8003 -44806000 -MTC1 R0,F12 F12 must=0 -AC2064A4 SW R0,64A4 (AT) -24190001 -ADDIU T9,R0,0001 -AC3964A8 SW T9,64A8 (AT) -3C013F80 LUI AT,3F80 -0FC20284 JAL 7F080A10 -44817000 MTC1 AT,F14 -0FC1E73C JAL 7F079CF0 leaves AT at 80050000... actually, it doesn't have to... set 7F07A49C->LUI AT,8005 -00000000 NOP -//7F07ABB0: 0xAF6E0 use, to load the animation! -3C0A8003 LUI T2,8003 -8D496514 LW T1,6514 (T2) T0=80036514: animation register -000948C0 SLL T1,T1,0x3 newsize -012A1021 ADDU V0,T1,T2 V0=address for chosen ani data -844B6518 LH T3,6518 (V0) T3=offset to ani -000B5880 SLL T3,T3,0x2 -016A2821 ADDU A1,T3,T2 -8CA59D6C LW A1,9D6C (A1) -3C108008 LUI S0,8008 -2610A0B0 ADDIU S0,S0,A0B0 -8E0D0000 LW T5,0000 (S0) T5=cur. playerdata -8DA400D4 LW A0,00D4 (T5) A0=player's obj.instance -// -8446651E LH A2,651E (V0) -44861000 MTC1 A2,F2 F2=val3 LH A2, MTC1, CVT, DIV, SWC1, and need divisor -C4201A3C LWC1 F0,1A3C (AT) 10000, borrowed from main menu (80051A3C), used in scale division! -468010A0 CVT.S.W F2,F2 -46001083 DIV.S F2,F2,F0 -// -8447651A LH A3,651A (V0) -44870000 MTC1 A3,F0 -E7A20010 SWC1 F2,0010 (SP) save val3 -46800020 CVT.S.W F0,F0 F0=val1 -44070000 MFC1 A3,F0 A3=val1 -// -8446651C LH A2,651C (V0) -44866000 MTC1 A2,F12 -00003025 OR A2,R0,R0 A2=0 -46806320 CVT.S.W F12,F12 -E7AC0078 SWC1 F12,0078 (SP) save val2 -// -0FC1BF2A JAL 7F06FCA8 -AFA00014 SW R0,0014 (SP) 0->SP+14 -44808000 MTC1 R0,F16 -C7AC0078 LWC1 F12,0078 (SP) -460C803C C.LT.S F16,F12 -00000000 NOP -45000004 BC1F +4 -8E0F0000 LW T7,0000 (S0) -//7F07AC3C: 0xAF76C -44056000 -MFC1 A1,F12 -0FC1BF7A -JAL 7F06FDE8 -8DE400D4 LW A0,00D4 (T7) diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Objects/elevator format.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Objects/elevator format.txt deleted file mode 100644 index b924ecc..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/Objects/elevator format.txt +++ /dev/null @@ -1,86 +0,0 @@ -!Proposal! -This is a variably-sized block, just to let you know. It allows for an elevator with 16 stops. Any more would require a word for a whopping 32 stops. 16 is overkill. No turbolifts - only vertical motion can be used in GE! -0x0 2 total size of block -0x2 1 state: 1=enabled (ready for motion) -0x3 1 31 - the type identifier. -0x4 2 offset to trigger chunk -0x6 2 offset to tile chunk -0x8 2 offset to connection chunk -0xA 2 current y offset (signed value) -0xC 2 current timer, counting down to zero -0xE 1 direction, 1=up, 0=disabled, -1=down. -0xF 1 step number -0x10 2 request slots -0x12 2 rate of travel, in clipping units -0x14 2 time spent on each floor (copied to current timer on arrival to floor) - -Step Chunk always at offset 0x16 -0x0 1 # entries -0x1 1 reserved - -entries - 0x0 2 y offset from original tile position for floor - -Trigger Chunk sets off action events at particular floors if requested. -0x0 1 # entries - -entries - 0x0 1 step number - 0x1 2 action block trigger number - -Tile Chunk tiles that compose the elevator floor; what you're moving, in other words -0x0 1 # entries - -entries - 0x0 4 tile ID, converted to pointer at runtime - -Connection Chunk sets a link between two tiles when at the specified floors -0x0 1 # entries - -entries - 0x0 1 step number to set connection at - 0x1 4 tile ID 1, converted to pointer at runtime - 0x5 1 edge of tile 1 to set connection for - 0x6 4 tile ID 2, converted to pointer at runtime - 0xA 1 edge of tile 2 to set connection for - -The object is then padded to the nearest word, to keep from breaking anything else - - -+-+-+-+-+ - -This effectively would be an example of a two-stop, simple platform type elevator consisting of two tiles: -004C 00 31 0000 001A 0023 -0000 0000 01 00 0000 0001 001E -02 00 - 0000 - 0100 -02 - 01020310 - 01020410 -02 - 00 01020310 02 05060712 01 - 01 01020310 02 08090A14 00 - -In this example, the total size of the object is 0x4A + 2 bytes of padding, bringing it to 0x4C. - The elevator moves one unit at a time and waits on each floor 30 seconds (roughly). - There are two stops, at +0 and +0x100. - The trigger chunk is not present, so its offset is zero. - Two tiles are moved, tile 010203 in room 10 and tile 010204 in the same room. For the most part, elevators need either their own room or some global vis settings to appear correctly. - There will be two connections. At step 0, tile 010203-10's third edge is linked to tile 050607-10. It links back along edge two. At step 1, tile 010203-10's third edge is linked to tile 08090A-14, and its first edge links back. - -+_+ - - The way this is set in motion is rather nifty. When a request is set, the timer is copied to the current timer slot and decremented until reaching zero. When it reaches zero, the elevator is set to be enabled. Give it a cycle or two to allow other objects or actions to manipulate this, just in case a door is jammed or something. When all is confirmed the connections for the current floor are killed. - To figure out the next floor number, the request slot is looked at. If it is the same as the current floor then the flag is just flipped. Otherwise, slots are checked from the current floor in the direction the direction value was set to. If zero, it gets set to 1. If there are no stops in that direction, the direction flag is negated and tested in the other direction. The floor is set as the new destination. - Once a destination is chosen, the direction value is multiplied by the step number and added to both the y positions of the tiles in the tile list and to the current y for the elevator. When this value reaches that for the floor, the elevator stops and the floor's bitflag is flipped. - Once stopped, the connection chunk is checked to set any required connections for the floor. That's as simple as taking the pointer for tile connections (someplace in 8003 - can't remember now), subtracting the pointer for the target from it, and dividing by 8. The value is set in the appropriate edge slots. On arrival, the enable flag is set back to 0. Then the request slot is checked for nonzero, and if something is set if begins the timer and whatnot all over again. - - Naturally, it will help to set some action blocks that can read the state of the object so doors and whatnot can be triggered appropriately. The trigger event may be good enough for most doors, but a hack to the object interlink command to read and write to the enable flag would be ideal. Essentially, we just need a set request action for the most part. - Request setting is simple. When you 'activate' the object it would write the given bitflag to the elevator. That allows for remote-enabled type elevators. A mode set would also be useful to lock the elevator on a floor, though this can be handled via interlinking. - -#_# - - For the record, this functions using the principle that y correction occurs for objects on a given tile. The elevator object and any objects riding in the elevator must reside on one of these tiles and is carried up along with it. The only noticable problem with this scheme revolves around the issue of stops set on each clipping tile. A stop creates a sort of wall and can inhibit movement near the stop, not just specificly on the edge of the tile. However, restricting movement of the elevator by tying it with doors, not killing connections on each floor, or a little hacking of the y correction system would solve that. - -@_@ - - How practically can it be implemented? Well, it +can+ be implemented. Making enough space to embed the code will be the most restrictive issue. As for setting objects over the type 30 kill flag, that's not that hard. Don't test for 30, and set a TLB pointer that points to its normal lead-out code. That's backwards and forwards-compatible. Writting a type itself is not actually difficult. Code-wise, looking up tiles by ID is borrowed code. Timers are also borrowed, y inc/decrement is easy to write, connection setting can be borrowed but would require about five lines total. Non-aligned words are two commands instead of one, sure, but no biggie. By setting the block size in the first two bytes it makes moving past a variably-sized chunk really simple. There are already custom action block commands. Seriously, this is quite feasible. - --Zoinkity diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/action block length revision.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/action block length revision.txt deleted file mode 100644 index 751332b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/action block length revision.txt +++ /dev/null @@ -1,57 +0,0 @@ -No need for TLB or jumps -Only revision is written here. It would be stupid to write everything else. - -7F0349FC: 6952C V0=length of command in block A0 at offset A1 - fries: AT,T6 -00851021 ADDU V0,A0,A1 -904E0000 LBU T6,0000 (V0) -2DC100FD SLTIU AT,T6,00FD ;normal cap is FD. You can extend this, however -5020000C *BEQL AT,R0,+quit ;should strike these three, concidering could just set 3 bytes... -24020001 *ADDIU V0,R0,0001 -//7F034A10: handle string type AD -240100AD *ADDIU AT,R0,00AD -542E0007 *BNEL AT,T6,+norm -3C018005 *LUI AT,8005 -00027025 *OR T6,V0,R0 ;T6=V0 -80410000 *LB AT,0000 (V0) -1420FFFE *BNE AT,R0,-2 ;loop until NULL terminator found -24420001 *ADDIU V0,V0,0001 -03E00008 *JR RA -004E1023 *SUBU V0,V0,T6 -//7F034A34: normal return -002E0821 *ADDU AT,AT,T6 -90222100 *LBU V0,2100 (AT) -//7F034A3C: quit -03E00008 *JR RA -00000000 *NOP - -This isn't in use yet, but pending the table require expansion, this would handle the length issue... -At this point, I'm not sure what terrifying calamities befall those who use FD as a command. I'm assuming a lock, but maybe a return. -Currently, assuming FD.-- is the formula... - -00851021 ADDU V0,A0,A1 -904E0000 LBU T6,0000 (V0) -//7F034A10: handle string type AD -240100AD *ADDIU AT,R0,00AD -542E0007 *BNEL AT,T6,+norm -240100FD *ADDIU AT,R0,00FD -00027025 *OR T6,V0,R0 ;T6=V0 -80410000 *LB AT,0000 (V0) -1420FFFE *BNE AT,R0,-2 ;loop until NULL terminator found -24420001 *ADDIU V0,V0,0001 -03E00008 *JR RA -004E1023 *SUBU V0,V0,T6 -//7F034A34: discern normal types -142E0006 BNE AT,T6,+retrieve ;branch if not the FD entension indicator -3C018005 *LUI AT,8005 -24210100 ADDIU AT,AT,0100 ;next half of table -904E0001 LBU T6,0001 (V0) ;T6=FD type extension -2DC20000 SLTIU V0,T6,00XX ;TRUE if within cap -50400003 BEQL V0,R0,+return -24020002 ADDIU V0,R0,0002 ;default size of command should include FD byte -// retrieve size -002E0821 *ADDU AT,AT,T6 -90222100 *LBU V0,2100 (AT) -//7F034A3C: quit -03E00008 *JR RA -00000000 *NOP diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/new setup objective format.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/new setup objective format.txt deleted file mode 100644 index 5e4c26b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/new setup objective format.txt +++ /dev/null @@ -1,65 +0,0 @@ -Minor edit to object type 17 to handle individual difficulty and player values. -Places new masks in first bytes of command word - -d.p.0000.17 000000.ii 0000.TTTT 0000000.* - -0x0 1 flags - F0 difficulty mask (1-agent, 2-secret, 4-00, 8-007) - 0F player mask (1-pl1, 2-pl2, 4-pl3, 8-pl4) -0x1 2 RESERVED -0x3 1 17 start objective -0x4 4 objective number -0x8 2 RESERVED -0xA 2 text ID -0xC 4 minimum difficulty: 0=agent, 1=secret agent, 2=00 agent, 3-007 - -Difficulty and player masks omit the entire objective on that setting. Normal operation is zero. -Note the minimum difficulty must still be set properly and setting these flags will only disallow the objective. This behaviour ensures backward compatability. -To merely hide the objective temporarily, use the new objective occlusion flags. - -+_+ - -New objective commands can utilize the 1F command as a container. -xxxx.tt.1F -0x0 2 data -0x2 1 type must be 00 if data halfword only! -0x3 1 1F ensures this word will be ignored by unhacked game - -+_+ - -01 remove occlusion flags for objective if objective flags unset -02 remove occlusion flags for objective if objective flags set -03 set occlusion flags for objective if objective flags unset -04 set occlusion flags for objective if objective flags set - -+_+ - -Types 1-4 alter occlusion flags for objective - -These four are magic: - -1 to type: 0,1,2,3. &1 is objective flag test, &2 is set flags versus remove - Set flags uses OR, unset ~&. When occlusion masks are equal, objective appears and is used. - When difficulty/player mask set ignores under given scenario. Can occlude objective under certain difficulties or # players automatically. - Normal usage to make an occluded objective appear is using types 3 or 4 - -Format for all four types: -d.p.mm.tt.1F ffff.00.1F ffff.00.1F -0x0 1 flags - F0 difficulty mask (1-agent, 2-secret, 4-00, 8-007) - 0F player mask (1-pl1, 2-pl2, 4-pl3, 8-pl4) -0x1 1 occlusion mask -0x2 1 type -0x3 1 1F -0x4 2 upper half of objective bitflag field -0x6 2 001F -0x8 2 lower half of objective bitflag field -0xA 2 001F - -+_+ - - Tables need to be reconfigured. - 80075D30 starts list of pointers to objectives (type 17 entries). 10 entries, 0x28 total. - 80075D58 starts list of words indicating state of objective. 10 entries, 0x28 total. - - Best bet is to relocate the objective pointers and use full space for state. Set state as halfwords: upper byte locks, lower byte state, never mind the six useless flags. - \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/solo character revision.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/solo character revision.txt deleted file mode 100644 index 3111af6..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/Setup File Microcodes and Paths/solo character revision.txt +++ /dev/null @@ -1,142 +0,0 @@ -revision of solo character selection -part of larger function - only pertinent section written here - -I know this is weird, but these are the memory addresses for the lists -8002C514 3x selected Bond body/head/cuff sets -80054FE4 1 number of entries in cuff list -80054FE5 3x body/head/cuff sets - -sets include cuff as well, as this allows you to mask existing entries after the models have been chosen -a bit messy, sure, but it does allow more characters (sort of) -to include random bodies and heads, use FF. -to use selected Bond value for body or head, use FE - -selected Bond sets: 8002C514 -05 4E FF Brosnan Tux -05 4E FF Connery Tux -05 4E FF Moore Tux -05 4E FF Dalton Tux - -default body/head/cuff sets 80054FE8 -17 4B 00 blue suit (use 0 to correct invalid entries) -05 4E FF Brosnan Tux -18 4C FF jungle camo -16 4A FF boiler suit -19 4B FF snowsuit -05 4E FF Connery Tux -05 4E FF Moore Tux -05 4E FF Dalton Tux -FE FE FE selected Bond -others... entry -1 80054FE5 -00 00 00 special user-designated slot using hacked command! - -examples: -06 FF 02 Boris -08 FF 03 Trevelyan (Janus) -09 FF 03 Trevelyan (006) -0A FF 00 Valentin -0C FF 05 Baron Samedi -0D FF 04 Jaws -0F FF 06 Oddjob - -default value, if invalid, is 17/4B/00 -//7F079DC8: AE8F8 -3C0F8008 LUI T7,8008 -0FC0755B JAL 7F01D56C ;V0=selected Bond -8DEFA0B0 LW T7,A0B0 (T7) -8DE3041C LW V1,041C (T7) ;V1=cuff -3C0B8005 *LUI T3,8005 -81614FE4 *LB AT,4FE4 (T3) ;use signed value to catch -1 special case -0061082A *SLT AT,V1,AT -50200001 *BEQL AT,R0,+1 ;branch if using an invalid cuff -00001825 *OR V1,R0,R0 ;default to cuff 0 if invalid -//7F079DEC: AE91C figure offsets within this block and selected Bond -3C0A8003 *LUI T2,8003 -00020880 *SLL AT,V0,0x2 -00220823 *SUBU AT,AT,V0 -002A5021 *ADDU T2,T2,AT ;T2=80030000 + selected Bond * 3 -00030880 *SLL AT,V1,0x2 -00230823 *SUBU AT,AT,V1 -002B5821 *ADDU T3,T3,AT ;T3=80050000 + cuff * 3 -//7F079E08: AE938 determine if a cuff-swap is in order -81624FEA *LB V0,4FEA (T3) ;V0=cuff value from cuff table -24410002 *ADDIU AT,V0,0002 ;0 if sel.Bond -50200001 *BEQL AT,R0,+1 ;test if selected Bond value -8142C516 *LB V0,C516 (T2) ;V0=body value from sel. Bond table -04430001 *BGEZL V0,+1 -ADE2041C *SW V0,041C (T7) ;V0=NEW cuff -//7F079E20: AE950 read body -340300FE *ORI V1,R0,00FE ;trigger for selected Bond value -341900FF +ORI T9,R0,00FF ;trigger for random value - bodies and heads must be unsigned... -91624FE8 *LBU V0,4FE8 (T3) ;V0=body value from cuff table -50430001 *BEQL V0,V1,+1 ;test if selected Bond value -9142C514 *LBU V0,C514 (T2) ;V0=body value from sel. Bond table -14590003 +BNE V0,T9,+3 -00000000 +NOP -0FC08D88 +JAL 7F023620 -00000000 +NOP -AFA20044 *SW V0,0044 (SP) -//7F079E48: AE978 read head -91624FE9 *LBU V0,4FE9 (T3) ;V0=head value from cuff table -50430001 *BEQL V0,V1,+1 ;test if selected Bond value -9142C515 *LBU V0,C515 (T2) ;V0=head value from sel. Bond table -14590003 +BNE V0,T9,+3 -00000000 +NOP -0FC08D98 +JAL 7F023660 -8FA40044 +LW A0,0044 (SP) -//7F079E64: AE994 branch to next segment -10000047 *BEQ R0,R0,7F079F84 -AFA20040 *SW V0,0040 (SP) -//7F079E6C: AE99C ALL of this code has been removed! -... -//7F079F60: AEA90 multiplayer bodies and heads -JAL 7F09B150 ;ret V0=player# -NOP -JAL 7F01035C ;ret V0=body for player A0 -OR A0,V0,R0 ;A0=V0: player# -JAL 7F09B150 ;ret V0=player# -SW V0,0044 (SP) -JAL 7F0102BC ;ret V0=head for player A0 -OR A0,V0,R0 ;A0=V0: player# -SW V0,0040 (SP) -//7F079F84: - -+_+ - -revision to 05 type: sets body/head/cuff for -1 -using this on an unhacked ROM merely sticks you with bluesuit bond - -will need to move or something... - -7F005C3C 3A76C character/cuff command - 00000005 BBHHCC## - -0FC026CB JAL 7F009B2C ;copies data to special command -8E4F0000 LW T7,0000 (S2) ;handle to character data -26100008 ADDIU S0,S0,0008 ;advance address to next command -10000066 BEQ R0,R0,7F005DE4 -ADEE041C SW T6,041C (T7) ;character/cuff-> data+41C - -7F009B2C 3E65C subroutine to avoid doing anything weird -3C018005 LUI AT,8005 -820E0004 LB T6,0004 (S0) ;T6=body code -A02E4FE5 SB T6,4FE5 (AT) ;body->8002C515 -820E0005 LB T6,0005 (S0) ;T6=head code -A02E4FE6 SB T6,4FE6 (AT) ;head->8002C516 -820E0006 LB T6,0006 (S0) ;T6=cuff code -A02E4FE7 SB T6,4FE7 (AT) ;cuff->8002C516 -03E00008 JR RA -820E0007 LB T6,0007 (S0) ;T6=entry in cuff table - - --_- - -still need to patch in turning randomized values into true ones... - -for MP: -7F023620 V0=random body within 7F01035C - fries AT,A0,A1,A2,T0,T6,T7 -7F023660 V0=random head within 7F0102BC - fries AT,V1,A0,A1,A2,T0,T6,T7,T8,T9 - - \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/actor targetting.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/actor targetting.txt deleted file mode 100644 index 778837b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/actor targetting.txt +++ /dev/null @@ -1,44 +0,0 @@ -Getting actors to target players properly in multiplayer - -Stuff that needs changing: -7F02A704 - calls 7F089798 for cur.player pos -7F02A7F8 - calls 7F089798 for cur.player pos -7F02A8EC - calls 7F089798 for cur.player pos - -7F032C4C returns F0=distance between actor and cur.player - should return for nearest player to position - -+_+ - -unrelated note: -Look at the possibility of using a matrix negation to render left/right hand 1st person models. -If it works at all, would be worth the lunicidal amount of code to pull it off. -Is that right? Need to figure a workaround for the image issue in MP... - -//7F05D134: copies 0x20 of obj.header to T5 -LW AT,0000 (T6) ; -SLL T1,T2,0x5 -ADDU T5,T4,T1 -SW AT,0810 (T5) -LW T9,0004 (T6) -OR A3,V0,R0 -SLL V1,T2,0x4 -SW T9,0814 (T5) -LW AT,0008 (T6) -SW AT,0818 (T5) -LW T9,000C (T6) -SW T9,081C (T5) -LW AT,0010 (T6) -SW AT,0820 (T5) -LW T9,0014 (T6) -SW T9,0824 (T5) -LW AT,0018 (T6) -SW AT,0828 (T5) -LW T9,001C (T6) -ADDIU AT,R0,0054 -BNE S1,AT,7F05D1F4 -SW T9,082C (T5) -//7F05D18C: \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/ammo collection revision.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/ammo collection revision.txt deleted file mode 100644 index 1cba81b..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/ammo collection revision.txt +++ /dev/null @@ -1,198 +0,0 @@ -No need for a big clump of stupidity in 21990... - -7F04F9F8: 84528 display ammo collection text - accepts: A0=type, A1=amount -27BDFF80 ADDIU SP,SP,FF80 -AFA40080 SW A0,0080 (SP) -27A4001C ADDIU A0,SP,001C -00A03025 OR A2,A1,R0 -8FA50080 LW A1,0080 (SP) -AFBF0014 SW RA,0014 (SP) -00804025 -OR T0,A0,R0 -25190060 *ADDIU T9,T0,0060 -//7F04FA20: -25080010 *ADDIU T0,T0,0010 -AD00FFF0 *SW R0,FFF0 (T0) -AD00FFF4 *SW R0,FFF4 (T0) -AD00FFF8 *SW R0,FFF8 (T0) -1519FFFB *BNE T0,T9,7F04FA20 -AD00FFFC *SW R0,FFFC (T0) -//7F04FA44: -0FC13E48 JAL 7F04F920 -AD000000 *SW R0,0000 (T0) -//7F04FA50: -0FC228F2 JAL 7F08A3C8 -27A4001C ADDIU A0,SP,001C -//7F04FA58: -8FBF0014 LW RA,0014 (SP) -03E00008 -JR RA -27BD0080 +ADDIU SP,SP,0080 -00000000 NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP -00000000 *NOP - - -//7F04F978: 844A8 append newline -3C050A00 *LUI A1,0A00 -AFA50014 *SW A1,0014 (SP) -0C0029FF JAL 7000A7FC ;append newline -27A50014 *ADDIU A1,SP,0014 - - -//7F04F9D0: 84500 append end of sentence -3C052E0A *LUI A1,2E0A -AFA50014 *SW A1,0014 (SP) -0C0029FF JAL 7000A7FC ;strcat(A0,"./r") -27A50014 *ADDIU A1,SP,0014 - - -+_+ - -add all ammo type descriptors here... -also, turn the table at 80052F30 (0x321A0)into a table of text IDs -pluralize flags: 80052F68 redirected to 7F04F3D8 0x83F08 -11110100 11111111 01111111 00100000 -F4 FF 7F 20 - -80052F2E: redirected to 7F04F39E 0x83ECE -A405 #### A405 -A406 A409 A40B A40C -A40D A40E ---- A40A -A407 A408 A413 A414 -A415 A416 A417 ---- -A41B A41C A41D A41F -++++ ++++ ---- ^^^^ ----- A41E - -#### tank shell -++++ recharge, nonpluralize! -^^^^ will be film, nonpluralize! - - -7F04F40C: 83F3C append ammo name to string - accepts: A0=p->final, A1=type, A2=quantity -27BDFFE0 ADDIU SP,SP,FFE0 -AFB00018 SW S0,0018 (SP) -24020001 ADDIU V0,R0,0001 -00808025 OR S0,A0,R0 ;S0=A0: p->final -AFBF001C SW RA,001C (SP) -AFA50014 *SW A1,0014 (SP) -24C1FFFF *ADDIU AT,A2,FFFF ;this allows you to do a simple <=0 test -AFA10028 *SW AT,0028 (SP) ;SP+28=AT: quantity-1 -24010018 *ADDIU AT,R0,0018 -10A10004 BEQ A1,AT,7F04F444 ;branch if type watch laser -340498D2 *ORI A0,R0,98D2 ;A0=98D3: "watch laser/r" -24840001 *ADDIU A0,A0,0001 -24010019 *ADDIU AT,R0,0019 -14A1000E *BNE A1,AT,7F04F478 ;branch if type watch magnet -2401000A ADDIU AT,R0,000A -//7F04F448: watch ammo types -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -00000000 *NOP -00102025 OR A0,S0,R0 ;A0=S0: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00022825 OR A1,V0,R0 ;A1=V0: p->text -0C004E1F *JAL 7001387C ;strlen(A0) -00102025 *OR A0,S0,R0 ;A0=S0: p->final -00442021 *ADDU A0,V0,A0 ;A0=p->terminating NULL -9082FFFF *LBU V0,FFFF (A0) ;V0=last character -50220001 *BEQL AT,V0,+1 ;overwrite if /r -A080FFFF *SB R0,FFFF (A0) -10000025 *BEQ R0,R0,7F04F50C ;jump to the main table now for " recharge" -00000000 *NOP -//7F04F478: throwing knives -14A10011 *BNE A1,AT,7F04F4C0 ;branch if not type A -24010013 ADDIU AT,R0,0013 -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -3404A40F ORI A0,R0,A40F ;A0=A40F: "throwing " -00102025 OR A0,S0,R0 ;A0=S0: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00022825 OR A1,V0,R0 ;A1=V0: p->text -8FA10028 *LW AT,0028 (SP) ;T6=quantity -5C200002 *BGTZL AT,+2 -3404A411 *ORI A0,R0,A411 ;A0=A411: "knives" -//7F04F4A0: single/multiple knife -3404A410 ORI A0,R0,A410 ;A0=A410: "knife" -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -00000000 *NOP -00102025 OR A0,S0,R0 ;A0=S0: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00022825 OR A1,V0,R0 ;A1=V0: p->text -10000038 *BEQ R0,R0,7F04F774 -00000000 *NOP -//7F04F4C0: dynamite -24010013 ADDIU AT,R0,0013 ;EXTRONEOUS -14A10010 BNE A1,AT,7F04F524 ;branch if not type 13 -8FAF0028 LW T7,0028 (SP) ;T7=quantity -3404A419 *ORI A0,R0,A419 ;A0=A419: "stick " -5DE00001 *BGTZL T7,+1 ;branch if multiples -24840001 *ADDIU A0,A0,0001 -//7F04F4D8: single/multiple -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -00000000 *NOP -00102025 OR A0,S0,R0 ;A0=S0: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00022825 OR A1,V0,R0 ;A1=V0: p->text -//7F04F4EC: append "of dynamite" -0FC30776 *JAL 7F0C1DD8 ;V0=p->text ID A0 -3404A418 *ORI A0,R0,A418 ;A0=A418: "of dynamite" -00102025 *OR A0,S0,R0 ;A0=S0: p->final -0C0029FF *JAL 7000A7FC ;strcat(A0,A1) -00022825 *OR A1,V0,R0 ;A1=V0: p->text -10000026 *BEQ R0,R0,7F04F774 -00000000 *NOP -//7F04F50C: all non-special case ammo types -8FB80014 *LW T8,0014 (SP) ;T8=type -2F01001E *SLTIU AT,T8,001E -10200005 BEQ AT,R0,7F04F528 ;branch if not type 4-1D: DEFAULT -0018C040 *SLL T8,T8,0x1 ;T8=type->offset -3C018005 LUI AT,8005 -00380821 ADDU AT,AT,T8 -94242F2C *LHU A0,2F2C (AT) ;A0=80052F94+offset: text value for thingy -14800007 *BNEZ A0,7F04F544 ;branch if a value present -3C013F00 *LUI AT,3F00 -//7F04F52C: default for unknown strings -AFA10014 *SW AT,0014 (SP) -00102025 *OR A0,S0,R0 ;A0=S0: p->final -0C0029FF *JAL 7000A7FC ;strcat(A0,A1) -27A50014 *ADDIU A1,SP,0014 -10000017 *BEQ R0,R0,7F04F774 ;return -00000000 *NOP -//7F04F544 pull text and append it -0FC30776 *JAL 7F0C1DD8 ;V0=p->text ID A0 -00000000 *NOP -00102025 *OR A0,S0,R0 ;A0=S0: p->final -0C0029FF *JAL 7000A7FC ;strcat(A0,A1) -00022825 *OR A1,V0,R0 ;A1=V0: p->text -//7F04F758: pluralize if required -8FA10028 *LW AT,0028 (SP) ;SP+28=AT: quantity-1 -1820000F *BLEZ AT,R0,7F04F774 ;branch if singular -3C018005 *LUI AT,8005 -8FA50014 *LW A1,0014 (SP) ;T8=type -0005C0C2 *SRL T8,A1,0x3 ;T8=byte for singularity flag -00380821 *ADDU AT,T8,AT -90212F68 *LBU AT,2F68 (AT) ;AT=80052F30+offset -30B80007 *ANDI T8,A1,0007 ;T8=bit within flag -03010806 *SRLV AT,AT,T8 -30210001 *ANDI AT,AT,0001 ;AT=flag -10200006 *BEQ AT,R0,7F04F774 ;return if it is its own plural -00000000 *NOP -0FC30776 JAL 7F0C1DD8 ;V0=p->text ID A0 -3404A412 ORI A0,R0,A412 ;A0=A412: "s" -00102025 OR A0,S0,R0 ;A0=S0: p->final -0C0029FF JAL 7000A7FC ;strcat(A0,A1) -00022825 OR A1,V0,R0 ;A1=V0: p->text -//7F04F774: return -00102025 *OR A0,S0,R0 ;A0=S0: p->final -8FBF001C LW RA,001C (SP) -8FB00018 LW S0,0018 (SP) -03E00008 JR RA -27BD0020 ADDIU SP,SP,0020 - -TEST LINES: 48A52 -9C9A061F 08101A19 1D1C8686 -9C9A1B03 18121320 17218686 \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/ammo table size reduction.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/ammo table size reduction.txt deleted file mode 100644 index 872ea12..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/ammo table size reduction.txt +++ /dev/null @@ -1,189 +0,0 @@ -ammo table size reduction -reduce format from: -mmmmmmmm.iiiiiiii.pppppppp -to -mmmm.iiii.pppp - -max ammo never exceeds two bytes -image offset can reduce to an index number from start of table -position value float->int - -~.~ - -add ammo to inventory -//7F0691D8: 0x9DD14 test if ammo > maximum for type -00106880 SLL T5,S0,0x2 -01B06823 SUBU T5,T5,S0 -000D6880 SLL T5,T5,0x2 -3C028003 LUI V0,8003 -004D1021 ADDU V0,V0,T5 -8FA3002C LW V1,002C (SP) -8C425EF0 LW V0,5EF0 (V0) -3C0E8008 LUI T6,8008 -3C198008 LUI T9,8008 -0043082A SLT AT,V0,V1 -10200006 BEQ AT,R0,7F06921C -00000000 NOP -//7F069208: -8DCEA0B0 LW T6,A0B0 (T6) -00107880 SLL T7,S0,0x2 -01CFC021 ADDU T8,T6,T7 -10000005 BEQ R0,R0,7F06922C -AF021130 SW V0,1130 (T9) -//7F06921C: -8F39A0B0 LW T9,A0B0 (T9) -00104080 SLL T0,S0,0x2 -03284821 ADDU T1,T9,T0 -AD231130 SW V1,1130 (T1) -//7F06922C: -8FBF001C LW RA,001C (SP) -8FB00018 LW S0,0018 (SP) -27BD0028 ADDIU SP,SP,0028 -03E00008 JR RA -00000000 NOP - -`.` - -7F0692D4 9DE04 V0=max ammo for type -00047080 SLL T6,A0,0x2 -01C47023 SUBU T6,T6,A0 -000E7080 SLL T6,T6,0x2 -3C028003 LUI V0,8003 -004E1021 ADDU V0,V0,T6 -03E00008 JR RA -8C425EF0 LW V0,5EF0 (V0) - - -7F0692F0 9DE20 set max ammo for all types -27BDFFD8 ADDIU SP,SP,FFD8 -AFB1001C SW S1,001C (SP) -AFB20020 SW S2,0020 (SP) -AFB00018 SW S0,0018 (SP) -3C118003 LUI S1,8003 -AFBF0024 SW RA,0024 (SP) -26315EF0 ADDIU S1,S1,5EF0 ;S1=80035EF0: max ammo totals -00008025 OR S0,R0,R0 -2412001E ADDIU S2,R0,001E ;do 1E ammo types -//0x9DE44 iterate through each ammo type and copy! -02002025 OR A0,S0,R0 ;A0=type -0FC1A44C JAL 7F069130 ;add ammo type A0, amount A1 to inventory -8E250000 LW A1,0000 (S1) ;A1=80035EF0+offset: max ammo for type -26100001 ADDIU S0,S0,0001 -1612FFFB BNE S0,S2,0x9DE44 -2631000C ADDIU S1,S1,000C ;next ammo counter -8FBF0024 LW RA,0024 (SP) -8FB00018 LW S0,0018 (SP) -8FB1001C LW S1,001C (SP) -8FB20020 LW S2,0020 (SP) -03E00008 JR RA -27BD0028 ADDIU SP,SP,0028 - -^.^ - -7F0694B0 9DFE0 V0= max ammo for weapon A0 - --.- - -image parameter read -//7F069DD0: 9E900 read image parameter -144000A6 BNEZ V0,7F06A06C -8FAF005C LW T7,005C (SP) -000FC080 SLL T8,T7,0x2 -030FC023 SUBU T8,T8,T7 -3C198003 LUI T9,8003 -27395EF0 ADDIU T9,T9,5EF0 ;T9=80035EF0: ammo table -0018C080 SLL T8,T8,0x2 -03191821 ADDU V1,T8,T9 ;V1=p->entry in ammo type table -8C620004 LW V0,0004 (V1) ;V0=image offset entry -24080005 ADDIU T0,R0,0005 -AFA80044 SW T0,0044 (SP) ;SP+44=5 -10400028 BEQ V0,R0,7F069EA0 ;branch if no image used -//7F069E00: -3C098009 LUI T1,8009 -8D29D0B0 LW T1,D0B0 (T1) ;T1=8008D0B0: 7E184000-0x02000000 from start of generic image bank -AFA30028 SW V1,0028 (SP) ;SP+28=p->ammo table middle entry -00491021 ADDU V0,V0,T1 ;V0=p->image entry in generic bank -0FC1E131 JAL 7F0784C4 -AFA20048 SW V0,0048 (SP) -0FC1E129 JAL 7F0784A4 -E7A00030 SWC1 F0,0030 (SP) -0C001149 JAL 70004524 -E7A00034 SWC1 F0,0034 (SP) -0C00112B JAL 700044AC -A7A20038 SH V0,0038 (SP) -//7F069E30: -... -//7F069E58: -8FAE0028 LW T6,0028 (SP) -... -//7F069E7C: -C5CA0008 LWC1 F10,0008 (T6) -AFAF001C SW T7,001C (SP) -44069000 MFC1 A2,F18 -0FC1A679 JAL 7F0699E4 -E7AA0018 SWC1 F10,0018 (SP) -... - - -"." - -//7F06A0B0 0x9EBF0 -1440009B BNEZ V0,7F06A320 -8FAA005C LW T2,005C (SP) -000A5880 SLL T3,T2,0x2 -016A5823 SUBU T3,T3,T2 -3C098003 LUI T1,8003 -25295EF0 ADDIU T1,T1,5EF0 -000B5880 SLL T3,T3,0x2 -01691821 ADDU V1,T3,T1 -8C620004 LW V0,0004 (V1) -24080005 ADDIU T0,R0,0005 -AFA8003C SW T0,003C (SP) -10400025 BEQ V0,R0,7F06A174 -3C0C8009 LUI T4,8009 -8D8CD0B0 LW T4,D0B0 (T4) -AFA30028 SW V1,0028 (SP) -... -//7F06A118: -8FAA0028 LW T2,0028 (SP) -... -//7F06A150: -C54E0008 LWC1 F14,0008 (T2) ;F14=(float) pos -AFAB001C SW T3,001C (SP) -44068000 MFC1 A2,F16 -0FC1A679 JAL 7F0699E4 -E7AE0018 SWC1 F14,0018 (SP) ;SP+18=(float) pos - -'.' - -//7F06A398 0x9EEC8 - BNEZ V0,7F06A594 - LW T7,004C (SP) - SLL T8,T7,0x2 - SUBU T8,T8,T7 - LUI T9,8003 - ADDIU T9,T9,5EF0 - SLL T8,T8,0x2 - ADDU V0,T8,T9 - LW T0,0004 (V0) - ADDIU T1,R0,0005 - SW T1,003C (SP) - SW V0,0030 (SP) - LW A0,0050 (SP) - JAL 7F05C8B4 - SW T0,0040 (SP) ;SP+40=p->max ammo table entry -//7F06A3D4: - LW V1,0040 (SP) - LUI T2,8009 - BEQ V1,R0,7F06A450 - NOP - LW T2,D0B0 (T2) - ADDU V1,V1,T2 - JAL 70004524 - SW V1,0040 (SP) -//7F06A3F4: -... - - -*.* - diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/body head table replacement.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/body head table replacement.txt deleted file mode 100644 index 67ef5c9..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/body head table replacement.txt +++ /dev/null @@ -1,312 +0,0 @@ -We're aiming at this NEW format: -0x0 4 p->header -0x4 4 p->string -0x8 2 perspective *10000 (0x2710) -0xA 1 gender flag (no point bitflagging these two...) -0xB 1 head flag - -Perspective fix is probably easiest if it gets stripped from the obj. instance y offset spot. - -+-+-+-+-+ -!eliminate need for scale in watch! -0B334F 0005 05C4245088 - - -7F07A250: AED80 fix for perspective - probably ;*) - -3C038008 LUI V1,8008 -8C79A0B4 *LW T9,A0B4 (V1) T9=stats -8C6AA0B0 *LW T2,A0B0 (V1) T2=playerdata -3C018005 LUI AT,8005 -AD4200D4 SW V0,00D4 (T2) save obj. instance pointer! -C44C00B8 *LWC1 F12,00B8 (V0) F12=y offset, same as perspective! -C426502C LWC1 F6,502C (AT) F6=8005502C: ??? -00022025 *OR A0,R0,V0 A0=obj. instance pointer -C4840014 LWC1 F4,0014 (A0) F4=object scale -46062202 MUL.S F8,F4,F6 -44054000 MFC1 A1,F8 -0FC1B39E JAL 7F06CE78 save converted scale -E72C0064 *SWC1 F12,0064 (T9) save perspective to statistics - -+-+-+-+-+ -7F0102D4 44E04 rewrite of rewrite: account for new size -000E7040 *SLL T6,T6,0x2 - ADDU V0,V0,T6 -8042B19D* LB V0,B19D (V0) - -+-+ - -7F010374 44EA4 rewrite of rewrite: account for new size -000E7040 *SLL T6,T6,0x1 -004E1021 ADDU V0,V0,T6 -8342B19C *LB V0,B19C (V0) V0=body - -+-+ - -omit 7F0103D0 entirely; remove only reference. eliminate SW of return value -7F0BDCF4 0xF2824 -00000000 -- -- -- -- -- -00000000 <-E620FFF4 - -+-+ - -PORTRAIT CALLS AND maximum MP characters - -7F011C94: 467C4 make a counter... -24140001 ADDIU S4,R0,0001 - -7F011D34: 46864 reduce MP table: iterate through all portrait calls -26310006 *ADDIU S1,S1,0006 next MP character entry! -82210002 *LB AT,0002 (S1) -0421FFD9 *BGEZ AT,7F011CA4 -26940001 *ADDIU S4,S4,0001 - -046867 000D 06 82 21 00 02 04 21 FF D9 26 94 00 01 - -7F011D4C: 4687C check value to maximum -82290003 *LB T1,0003 (S1) -- -- -15200008 *BNEZ T1,7F011D7C - -7F011D80: 468B0 -A6340000 *SH S4,0000 (S1) -- -- -A6++++++ SH T3,0000 (S1) -- -- -86++++++ LH "" - -7F011DC4: 468F4 -86++++++ LH "" - -7F011DE4: 46914 -86++++++ LH "" - - - -7F011A60: 46B90 -85++++++ LH "" - - 46C38 -85++++++ LH "" - -+-+ - -7F0125A8 470D8 reduce MP table: portrait recall routine -00187840 *SLL T7,T8,0x1 -24060002 *ADDIU A2,R0,0002 -AFA60010 *SW A2,0010 (SP) - OR A0,S5,R0 -01F87821 *ADDU T7,T7,T8 - OR A3,R0,R0 -000F7840 *SLL T7,T7,0x1 - -+-+ - -7F012AA0 475D8 loads txtID# for MP character select labels -000F7840 *SLL T7,T7,0x1 - -0475DB 0001 40 - -+-+-+-+-+ - -All these are OnLy to minimize table size! - - -7F000F78: 35AA8 reset all objects at start/end of stage -*LW V1,000C (V0) -*ADDIU V0,V0,000C -BNEL V1,R0,7F000F78 -SW R0,0000 (V1) - -+-+ - -Bond in EYE intro -7F009010: 3DB40 - *LW A0,0064 (S0) 3C - JAL 7F0764A4 - *LW A1,0068 (S0) 40 - JAL 7F0BD188 - *LW A0,0068 (S0) 40 -... -7F009050: 3DB80 - *LW A0,0618 (S0) 3A8 - JAL 7F0764A4 - *LW A1,061C (S0) 3AC - JAL 7F0BD188 - *LW A0,061C (S0) 3AC -... -7F009090: 3DBC0 - *LW A2,0064 (S0) 3C - *LW A3,0618 (S0) 3A8 - -+-+ - -7F01032C 44E5C MP gender block rewrite -00027040 *SLL T6,V0,0x1 -01C27021 ADDU T6,T6,V0 -000E7080 SLL T6,T6,0x2 T6=head * 0xC -3C028004 LUI V0,8004 -004E1021 ADDU V0,V0,T6 -03E00008 JR RA -9042DE1A *LBU V0,DE1A (V0) - -+-+ - -7F018928: 0x4D458 - *SLL T3,T2,0x2 -7F0189AC: 0x4D4DC - *SLL T3,T2,0x2 - -+-+-+-+-+-+-+ - -LONGEST BIT: creates a character object instance - -7F0232E8: 57E18 process body (A0) + head (A1); A2=body obj.header, A3=head obj.header -00047840 *SLL T7,A0,0x1 A0=body# - ADDU T7,T7,A0 - LUI T8,8004 - ADDIU T8,T8,DE10 - SLL T7,T7,0x2 - ADDU V0,T7,T8 V0=body/head entry in table (A0*0xC) - LUI AT,8005 -C4261A3C *LWC1 F6,1A3C (AT) 10000, borrowed from main menu, used in scale division! -C4281D90 *LWC1 F8,1D90 (AT) F8=final scale for character 0.1 - ADDIU SP,SP,FFC8 -944F0008 *LHU T7,0008 (V0) obj. y off. -448F8000 *MTC1 T7,F16 - SW RA,001C (SP) - SW S1,0018 (SP) - SW S0,0014 (SP) save {8003DE10: body/head table} - SW A0,0038 (SP) save body# - OR S0,A2,R0 S0=body obj.header - OR S1,A3,R0 S1=head obj.header - SW A1,003C (SP) save head# -468082A0 *CVT.S.W F10,F16 - SW R0,002C (SP) - ADDIU A0,R0,000C linked routine now grabs 80079E3C - SW V0,0024 (SP) save table address for body - JAL 7F0927BC -46065283 *DIV.S F10,F10,F6 -//7F02334C: 57E7C if it returned true, multiply further by 0.8... -10400003 *BEQ V0,R0,7F02335C -3C018005 *LUI AT,8005 {not really required...} -C4321D94 *LWC1 F18,1D94 (AT) F18=80051D94: another scale mod? 0.8 -46124202 *MUL.S F8,F8,F18 -E7A80034 *SWC1 F8,0034 (SP) -E7AA0030 *SWC1 F10,0030 (SP) -//7F023364: 57E94 -//7F02337C: 57EAC - JAL 7F075CF4 prep object for use - OR A0,S0,R0 A0=body obj. header - LW T1,0024 (SP) T1=body table address - LW V0,003C (SP) V0=head# - *LBU T2,000B (T1) T2=head flag - BNEL T2,R0,7F0233F4 skip if head is merged - LW T1,004C (SP) - BLTZL V0,7F0233F4 skip if head# is random or invalid (negative) - LW T1,004C (SP) - LW T3,0008 (S0) T3=pointer to body's obj.offsets - LW T4,0010 (T3) T4=pointer to offset for head placeholder (I think...) - BEQ T4,R0,7F0233F0 skip if there isn't one... - SW T4,002C (SP) save head placeholder - LW T6,0000 (S1) T6=pointer to head obj.table - *SLL T7,V0,0x1 - ADDU T7,T7,V0 - BNEZ T6,7F0233D8 - OR A0,S1,R0 A0=head obj.header - SLL T7,T7,0x2 - LUI A1,8004 - ADDU A1,A1,T7 A1=head table address - JAL 7F07654C load body/head using recall string A1 - LW A1,DE14 (A1) A1=pointer to head's text recall string -//7F0233D8: -//7F023430: 57F60 - *LBU T4,000B (T3) T4=head flag - BNEL T4,R0,7F023494 quit if merged head - LW RA,001C (SP) - -+-+ - -7F0234D0 58000 -*SLL T6,A0,0x1 -ADDU T6,T6,A0 -LUI T7,8004 -ADDIU T7,T7,DE10 -SLL T6,T6,0x2 -ADDU A3,T6,T7 -LW T8,0000 (A3) -... -//7F02354C: 5807C -*LBU T2,000B (A3) -*SLL T3,A1,0x1 -ADDU T3,T3,A1 -BNEZ T2,7F023570 -SLL T3,T3,0x2 -LUI T3,8004 -ADDU T4,T4,T3 -LW T4,DE10 (T4) - - -+-+ - -Rewrite of the new gender-ripping subroutine -7F023590: 0x580C0 returns T7=gender flag for body A0 -00047040 *SLL T6,A0,0x1 -01C47021 ADDU T6,T6,A0 -000E7080 SLL T6,T6,0x2 T6=head * 0xC -3C0F8004 LUI T7,8004 -01EE7821 ADDU T7,T7,T6 -03E00008 JR RA -91EFDE1A *LBU T7,DE1A (T7) 8003DE1A: gender flag for body - -+-+ - -7F02379C: 582CC 09 guards -*SLL T2, T1, 0x1 -ADDU T2, T2, T1 -SLL T2, T2, 0x2 //T2=T1*0xC -ADDU T3, T3, T2 -*LBU T3, 0xDE1B (T3) //T3=head flag - - -+-+ - -PLAYERS, MAYBE ALL CHARACTERS - -//7F079FE0: 0xAEB10 - LUI T9,8004 - ADDIU T9,T9,DE10 ---40 *SLL T4,T2,0x2 - ADDU T4,T4,T2 - SLL T4,T4,0x2 - ADDU V1,T4,T9 - LW T8,0000 (V1) - -//7F07A070: 0xAEBA0 - LUI T7,8004 - ADDIU T7,T7,DE10 ---40 *SLL T8,T5,0x2 - ADDU T8,T8,T5 - SLL T8,T8,0x2 - ADDU V1,T8,T7 - LW T3,0000 (V1) - -//7F07A1BC: 0xAECEC ---40 *SLL T8,T7,0x2 - -//7F07A1F8: 0xAED28 - LUI T7,8004 - ADDIU T7,T7,DE10 ---40 *SLL T6,T5,0x2 - ADDU T6,T6,T5 - SLL T6,T6,0x2 - ADDU V1,T6,T7 - LW A3,0000 (V1) diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/edit control types.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/edit control types.txt deleted file mode 100644 index e9bd368..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/edit control types.txt +++ /dev/null @@ -1,87 +0,0 @@ - Sadly original game hardcodes these. Well, since all the motion has to be eaten anyway to get good vehicles working, will rewrite! - - High byte is controller 1, low byte controller two. Uses a simplified button key. - START is always pause (hardcoded), so hijacking it for control stick. Sadly, if only one button per feature could have used nibbles and single byte for both controllers O.o - Also, don't need to set all c's and +'s, so will simple denote when they are used. Otherwise, the format will double in size. Besides, these wind up being specially-handled either way if set to move/look. - 80 A button - 40 B button - 20 Z button - 10 Control stick - 08 + pad - 04 C pad - 02 L button - 01 R button -Format: - 0x0 AIM - 0x2 LOOK - 0x4 ACTION - 0x6 WEAPON - 0x8 FIRE - 0xA MOVE - -1.1 Honey 0300.0C00.4000.8000.2000.1000 -AIM L,R -LOOK C,+ -ACTION B -WEAPON A -FIRE Z -MOVE stick1 - -1.2 Solitaire 0300.1000.4000.8000.2000.0C00 -AIM L,R -LOOK stick1 -ACTION B -WEAPON A -FIRE Z -MOVE C,+ - -1.3 Kissy 2000.0C00.4000.0300.8000.1000 -AIM Z -LOOK C,+ -ACTION B -WEAPON L,R -FIRE A -MOVE stick1 - -1.4 Goodnight 2000.1000.4000.0300.8000.0C00 -AIM Z -LOOK stick1 -ACTION B -WEAPON L,R -FIRE A -MOVE C,+ - -2.1 Plenty 0020.0010.4040.8080.2000.1000 -AIM Z2 -LOOK stick2 -ACTION B1,B2 -WEAPON A1,A2 -FIRE Z1 -MOVE stick1 - -2.2 Galore 0020.1000.4040.8080.2000.0010 -AIM Z2 -LOOK stick1 -ACTION B1,B2 -WEAPON A1,A2 -FIRE Z1 -MOVE stick2 - -2.3 Domino 2000.0010.4040.8080.0020.1000 -AIM Z1 -LOOK stick2 -ACTION B1,B2 -WEAPON A1,A2 -FIRE Z2 -MOVE stick1 - -2.4 Goodhead 2000.1000.4040.8080.0020.0010 -AIM Z1 -LOOK stick1 -ACTION B1,B2 -WEAPON A1,A2 -FIRE Z2 -MOVE stick2 - - - Otherwise, can double the format to allow individual key assignments. diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/hacking the random stuff index.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/hacking the random stuff index.txt deleted file mode 100644 index 28aff22..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/hacking the random stuff index.txt +++ /dev/null @@ -1,634 +0,0 @@ -change a few of the index values: -8002CD00 1 #female heads -8002CD01 1 #male heads -8002CD02 1 #bodies - -8002CD04 1 cur female head -8002CD05 1 cur male head -8002CD06 1 cur body - - -8002CD08 new start of value tables - - -------- -probably replaces most if not all the code - -7F000110: 0x34C40 reset counters for random body/head tables -3C188003 LUI T8,8003 -00182025 OR A0,R0,T8 ;A0=address of lists -240E0002 ADDIU T6,R0,0002 ;T8=OFFSET TO # for each entry -;initialize -00001025 OR V0,R0,R0 ;V0 will be our counter today -01D87821 ADDU T7,T8,T6 ;T7=entry address -;loopus -808DCD08 LB T5,CD08 (A0) -24840001 ADDIU A0,A0,0001 ;next byte in the table -0509FFFD BGEZL T5,-3 [loopus] -24420001 ADDIU V0,V0,0001 ;increment # counter -;save and next -A1E2CD00 SB V0,CD00 (T7) ;save new value -15C0FFF8 BNEZ T6,-8 [initialize] -25CEFFFF ADDIU T6,T6,FFFF ;decrement by 1 -;ditch this -03E00008 JR RA -00000000 NOP - ---------- -all below is new (probably) -//7F000F88: 0x35AB8 set new random value for all groups -34080002 ORI T0,R0,0002 ;write +2,+1,+0 -;loopus -0C002914 JAL 7000A450 ;returns V0=rand fries AT,A0,A1,A2,V0 -3C188003 LUI T8,8003 -03080821 ADDU AT,T8,T0 ;AT=80030000+offset -8038CD00 LB T8,CD00 (AT) ;T8=# stuff -53000004 BEQL T8,R0,+4 -A038CD04 SB T8,CD04 (AT) ;this prevents division by zero -0058001B DIVU V0,T8 -0000C810 MFHI T9 -A039CD04 SB T9,CD04 (AT) ;T9=new random value -1D00FFF6 BGTZ T0,-A (loopus) -2108FFFF ADDIU T0,T0,FFFF -//7F000FB8: -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - This should work, computing body(+2), male(+1), fem(+0). If a table does =0, should handle it (mostly) gracefully. It will probably still crash later on, but not here due to stupid division. - ---------- -new subroutine! -> 7F023590 0x580C0 -7F023620: 0x58150 returns T7=gender flag for body A0 -00047080 SLL T6,A0,0x2 -01C47021 ADDU T6,T6,A0 -000E7080 SLL T6,T6,0x2 T6=head * 0x14 -3C0F8004 LUI T7,8004 -01EE7821 ADDU T7,T7,T6 -03E00008 JR RA -91EFDE20 LBU T7,DE20 (T7) 8003DE20: gender flag for body - ---------- -7F0235AC: 0x580DC normal random head routine -AFBFFFEC *SW RA,FFEC (SP) -0FC08D64 *JAL 7F023590 ;NEW ONE DOWN THERE! -00000000 -100F000F *BEQ T7,R0,7F0235F8 ;PULL FEM HEADS -3C0B8003 *LUI T3,8003 -//7F0235C0: pseudorandomize male head -0C002914 *JAL 7000A450 ;returns V0=random value; fries AT,A0,A1,A2,V0 -9178CD05 *LBU T8,CD05 (T3) ;T8=current random male head -30590003 *ANDI T9,V0,0003 ;reduces rand to two bits (4 unique heads) -8169CD01 *LB T1,CD01 (T3) ;T1=number of male head entries -03194021 *ADDU T0,T8,T9 -5920000F *BLEZL T1,[return] ;no div by zero! -3403004E *ORI V1,R0,004E ;default head is Bond Tux -0109001B *DIVU T0,T1 -00005010 *MFHI T2 ;T2=T0%T1 - number lying between 0-B -016AC021 *ADDU T8,T3,T2 ;T8=upper half of head table offset -9179CD02 *LBU T9,CD02 (T3) ;T9=number of bodies (offset to data in table) -03191821 *ADDU V1,T8,T9 -//7F0235F0: pull male head at offset -10000008 *BEQ R0,R0,7F023614 ;return yo -9063CD09 *LBU V1,CD09 (V1) ;V1=random male head; adds +1 to addy for -1 bod val -//7F0235F8: pull female head at offset -9163CD04 *LBU V1,CD04 (T3) ;cur fem head -916CCD02 *LBU T4,CD02 (T3) ;#bodies -006C1821 *ADDU V1,V1,T4 ;V1+T4 -916CCD01 *LBU T4,CD01 (T3) ;#male -006C1821 *ADDU V1,V1,T4 -006B5821 *ADDU T3,V1,T3 -9163CD0A *LBU V1,CD0A (T3) ;V1=rand fem head; add +2 for -1 male+body entries -//7F023614: return -8FBFFFEC *LW RA,FFEC (SP) -03E00008 *JR RA -00601025 *OR V0,V1,R0 - ---- -7F023590: 0x58150 -15 commands - random bodies MP, single solo - -AFBFFFEC *SW RA,FFEC (SP) -0FC040A4 JAL 7F010290 returns T6=mode, V0=#players -3C0F8003 LUI T7,8003 -59C00007 BLEZL T6, [retrieve] -91E8CD06 *LBU T0,CD06 (T7) -//random -0C002914 *JAL 7000A450 returns V0=random; fries AT,A0,A1,A2,V0 -91EECD02 *LBU T6,CD02 (T7) T9=count for body -59C00003 BLEZL T6,[retrieve] crappy error handling -00004025 OR T0,R0,R0 -004E001B *DIVU V0,T6 -00004010 *MFHI T0 -//retrieve -01E87821 *ADDU T7,T7,T0 -8FBFFFEC *LW RA,FFEC (SP) -03E00008 JR RA -91E2CD08 *LBU V0,CD08 (T7) V0=body value in 8002CD08 body table - -0x582B0 = 0FC08D88 - - - -+++++++++ -7F023660 0x58190 LOAD TRULY RANDOM HEAD -AFBFFFEC *SW RA,FFEC (SP) -0FC08D64 *JAL 7F023590 ;returns T7=gender for body A0 -00000000 *NOP -*3C0E8003 *LUI T6,8003 -*91C3CD02 *LBU V1,CD02 (T6) ;V1=#bodies -*01C3C021 *ADDU T8,T6,V1 ;T8=offset to data -15E00004 *BNEZ T7,7F023684 ;+4 skip female-exclusive data offsetting -*01CFC821 *ADDU T9,T6,T7 ;T9=cur head for gender;acts as an offset! sneaky, eh? -//7F023680: female-exclusive offsetting -*91C3CD01 *LBU V1,CD01 (T6) ;V1=#male -0303C021 *ADDU T8,T8,V1 -27180001 *ADDIU T8,T8,0001 ;accounts for -1 male head entry -//7F023684: all genders -0C002914 *JAL 7000A450 ;returns V0=random; fries AT,A0,A1,A2,V0 -9339CD00 *LB T9,CD00 (T9) ;T9=count for gender -5B200005 *BLEZL T9,7F0236AC ;+5 catch division by zero -3403004E *ORI V1,R0,004E ;default is brosnan tux head -//7F02369C: get head -0059001B *DIVU V0,T9 -00004010 *MFHI T0 -0308C021 *ADDU T8,T8,T0 -9303CD09 *LBU V1,CD09 (T8) ;V1=head; start at data+1 accounting for body entry -1 -//7F0236AC: return -8FBFFFEC *LW RA,FFEC (SP) -03E00008 *JR RA -00601025 *OR V0,V1,R0 - --------- - --------- -MP characters would be done easiest through recall routines. Make them more efficient -7F079F68 calls the two that retrieve heads/bodies - -switch the calls so you can get the body number! -[rewrite] -7F079F68: 0xAEA98 -0FC040D7 *JAL 7F01035C -00402025 OR A0,V0,R0 -0FC26C54 JAL 7F09B150 -AFA20044 *SW V0,0044 (SP) -0FC040AF *JAL 7F0102BC -00402025 OR A0,V0,R0 -AFA20040 *SW V0,0040 (SP) - ---- -7F0102BC: MP character head -SLL T6,A0,0x2 -LUI V1,8003 -ADDU V1,V1,T6 -LW V1,B524 (V1) ;V1=selection -SLL T7,A0,0x2 -LUI V0,8003 -BGEZ V1,7F0102F4 ;uhm, branch if a valid selection? -SLL T8,V1,0x2 -//7F0102E0: invalid selection? -SUBU T7,T7,A0 -LUI V0,8003 -ADDU V0,V0,T7 -JR RA -LHU V0,B19E (V0) -//7F0102F4: valid selection -SUBU T8,T8,V1 -SLL T8,T8,0x2 ;T8=selection * 0xC -ADDU V0,V0,T8 -LHU V0,B19E (V0) ;V0=head -JR RA -NOP - -[Rewrite!] -44DEC: -00047080 SLL T6,A0,0x2 -3C028003 *LUI V0,8003 -004E1821 *ADDU V1,V0,T6 -8C63B524 LW V1,B524 (V1) ;V1=selection -00037080 *SLL T6,V1,0x2 -01C37023 *SUBU T6,T6,V1 -000E7080 *SLL T6,T6,0x2 ;T8=selection * 0xC -004E1021 *ADDU V0,V0,T6 -8342B19E *LH V0,B19E (V0) ;V0=head -04410004 *BGEZ V0,+3 -AFBF0040 *SW RA,0040 (SP) ;(head is stored here after J, so it works) -8FA40044 *LW A0,0044 (SP) ;body value from stack 0FC08D98 *JAL 7F023660 truly-random head routine from above -8FBF0040 *LW RA,0040 (SP) ;(test! Should directly jump back from subroutine) -//7F0102F8: valid selection -03E00008 *JR RA -00000000 *NOP --LHU V0,B19E (V0) V0=head --JR RA --NOP - ------- -7F01030C: 44E3C MP YELP gender block -ORIGINAL -00047080 SLL T6,A0,0x2 -3C038003 LUI V1,8003 -006E1821 ADDU V1,V1,T6 -8C63B524 LW V1,B524 (V1) ;V1=selection -00047880 SLL T7,A0,0x2 -3C028003 LUI V0,8003 -04610007 BGEZ V1,+7 -0003C080 SLL T8,V1,0x2 -01E47823 SUBU T7,T7,A0 -000F7880 SLL T7,T7,0x2 -3C028003 LUI V0,8003 -004F1021 ADDU V0,V0,T7 -03E00008 JR RA -9042B19A LBU V0,B19A (V0) -0303C023 SUBU T8,T8,V1 -0018C080 SLL T8,T8,0x2 -00581021 ADDU V0,V0,T8 -9042B19A LBU V0,B19A (V0) -03E00008 JR RA -00000000 NOP - -rewrite! Should pull it from the body, not from the block of data -[REWRITE] 7F01030C 44E3C MP gender block -00047080 SLL T6,A0,0x2 ;selected(A0)->offset -3C038008 LUI V1,8008 -006E1821 ADDU V1,V1,T6 -8C639EE0 LW V1,9EE0 (V1) ;V1=playerdata for selected -8C6300A8 LW V1,00A8 (V1) ;8006 data for char -8C630004 LW V1,0004 (V1) ;MP only: player guarddata -AFBFFFEC SW RA,FFEC (SP) -0FC08D64 JAL [body->gender subroutine] -9064000F LBU A0,000F (V1) ;A0=BODY -8FBFFFEC LW RA,FFEC (SP) -03E00008 JR RA -000F1025 OR V0,R0,T7 - -or this one omits the subroutine -00047080 SLL T6,A0,0x2 ;selected(A0)->offset -3C028008 LUI V0,8008 -004E1021 ADDU V0,V0,T6 -8C429EE0 LW V0,9EE0 (V0) ;V1=playerdata for selected -8C4200A8 LW V0,00A8 (V0) ;8006 data for char -8C420004 LW V0,0004 (V0) ;MP only: player guarddata -54400001 BNEZL V0,+1 ;skip if pointers get screwed -9042000F LBU V0,000F (V0) ;A0=BODY -00027080 SLL T6,V0,0x2 -01C27021 ADDU T6,T6,V0 -000E7080 SLL T6,T6,0x2 ;T6=head * 0x14 -3C028004 LUI V0,8004 -004E1021 ADDU V0,V0,T6 -03E00008 JR RA -9042DE20 LBU V0,DE20 (V0) - -called (after loading A0=selected) at 7F027118 - when shot - - ------- -7F01035C: MP character body -SLL T6,A0,0x2 ;A0=player# -LUI V1,8003 -ADDU V1,V1,T6 -LW V1,B524 (V1) ;V1=selection -SLL T7,A0,0x2 -LUI V0,8003 -BGEZ V1,7F010394 ;uhm, branch if a valid selection? -SLL T8,V1,0x2 -//7F010380: invalid selection? -SUBU T7,T7,A0 -LUI V0,8003 -ADDU V0,V0,T7 -JR RA -LHU V0,B19C (V0) -//7F010394: valid selection -SUBU T8,T8,V1 -SLL T8,T8,0x2 ;T8=selection * 0xC -ADDU V0,V0,T8 -LHU V0,B19C (V0) ;V0=body -JR RA -NOP - -[REWRITE] -44E8C: -00047080 SLL T6,A0,0x2 -3C028003 *LUI V0,8003 -004E1821 *ADDU V1,V0,T6 -8C63B524 LW V1,B524 (V1) ;V1=selection -00037080 *SLL T6,V1,0x2 -01C37023 *SUBU T6,T6,V1 -000E7080 *SLL T6,T6,0x2 ;T8=selection * 0xC -004E1021 *ADDU V0,V0,T6 -8342B19D *LH V0,B19D (V0) ;V0=body -04410003 *BGEZ V0,+3 -AFBF0044 *SW RA,0044 (SP) ;(body is stored here after J, so it works) -0FC08D88 *JAL truly-random head routien from above -8FBF0044 *LW RA,0044 (SP) ;(test! Should directly jump back from subroutine) -//7F0102F4: valid selection -03E00008 *JR RA -00000000 *NOP - -++++++++ -//7F079FA0: set up playerdata; get # players, hop to 7F07A1BC if multi -//7F07A2A4: calls 7F0200BC: setting guarddata for player I guess - -7F0200BC: first, gets a pointer for player guarddata - 7F020130 sets 8006 positionblock data (0x0-0x14) - 7F020164 calls 7F06FF5C: saves 7F01FC10->[801DB950] - 7F0201A8 recalls current ID (1388) f/ 8002CC60, saves to guarddata - 7F0201C0 inc ID, save it again - 7F0201D4 0->head; 0->body - HEAD=SP+34 or SP+70; BODY=SP+30 or SP+74 - - --- -7F0201A8: 54CD8 COPIES BODY/HEAD TO PLAYER GUARDDATA - LUI V0,8003 -8FAA0030 *LW T2,0030 (SP) BODY -8C48CC60 *LW T0,CC60 (V0) - LUI T3,8005 - LUI AT,437A - SH T0,0000 (S0) -8FA90034 *LW T1,0034 (SP) HEAD - MTC1 AT,F10 - LUI AT,3F80 -25080001 *ADDIU T0,T0,0001 -AC48CC60 *SW T0,CC60 (V0) -A2090006 *SB T1,0006 (S0) -A20A000F *SB T2,000F (S0) - -------------------- -RANDOM BODIES IN INTRO - -//7F0187BC: 0x4D2EC -` LW T9,0004 (A0) head value -` LW T1,B8C8 (T1) 8002B8C8 - probably for random wep or animation selection -AFA9006C *SW T1,006C (SP) -` BNEZ T2,7F0187D4 -` NOP -` BREAK -//7F0187D4: -200AFFFF ADDI T2,R0,FFFF -150A000F BNE T0,T2,7F018818 -3C0A8003 LUI T2,8003 -0C002914 JAL 7000A450 returns V0=random; fries AT,A0,A1,A2,V0 -9148CD02 LUI T2,8003 -//7F0187E8-7F01886C random BODY -0048001B DIVU V0,T0 -00000810 MFHI AT -9149CD06 LBU T1,CD06 (T2) -50290001 BEQL AT,T1,+1 -24210001 ADDIU AT,AT,0001 -50280001 BEQL AT,T0,+1 -24010000 ADDIU AT,R0,0000 -A149CD06 SB T1,CD06 (T2) never the same guy twice! -00000000 nop? -00000000 nop? -002A5021 ADDU T2,AT,T2 -9148CD08 LBU T0,CD08 (T2) -24010016 ADDIU AT,R0,0016 -//7F01881C: -AFA8008C SW T0,008C (SP) save body -01005025 OR T2,T0,R0 -AFB90088 SW T9,0088 (SP) save head -15010010 BNE T0,AT,7F01886C branch if not the bond suit #16 -00000000 *NOP? -//7F018830: -00000000 *NOP? -00000000 *NOP? -0C002914 JAL 7000A450 returns V0=random; fries AT,A0,A1,A2,V0 -240C0005 ADDIU T4,R0,0005 -004C001B DIVU V0,T4 -//7F018844: increment and correct for tux -00005810 MFHI T3 -0168C021 ADDU T8,T3,T0 -240F001A ADDIU T7,R0,001A -51F80001 BEQL T7,T8,+1 -24180005 ADDIU T8,R0,0005 -//7F018858: -51980001 BEQL T4,T8,+1 - ADDIU T9,R0,004E !these lines unchanged! - SW T9,0088 (SP) -!BEQ R0,R0,7F0188C0 -!SW T8,008C (SP) -//7F01886C: - - -//7F0188C0: 0x4D3F0 !do the heads! -LW T9,0088 (SP) -00000000 *nop -07230005 *BGEZL T9,7F0188E0 branch if not FF9F... -LW T7,00B4 (SP) -//7F0188D0: -JAL 7F023660 RETURNS V0=very random head -LW A0,008C (SP) A0=body -SW V0,0088 (SP) -LW T7,00B4 (SP) - -FINAL: -04D3F8 0002 0723 - - -//7F01927C: 0x4DDAC change endpoint to unused!=0 -818B0009 *LB T3,0009 (T4) -11600003 *BEQ T3,R0,7F019290 -818D0000 *LB T5,0000 (T4) - -+_+ - -slight edit, to allow multiplayer-specific gear: -MP (complete list) comes first 3 entries CD00 -SOLO (partial) comes next 3 entries CD03 -random settings listed last 3 entries CD06 -start the list of heads/bodies X entries CD09 - -7F000110 probably not needed... Set by editting tools. (lament) -//7F000F50: - *NOP - *NOP - *NOP -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -AFA40018 SW A0,0018 (SP) -//7F000F68: initialize all characters -3C028004 *LUI V0,8004 -8C43DE10 *LW V1,DE10 (V0) -2442000C -ADDIU V0,V0,000C -5460FFFD *BNEL V1,R0,-3 -AC600000 SW R0,0000 (V1) -//7F000F88: 0x35AB8 set new random value for all groups -34080002 ORI T0,R0,0002 ;write +2,+1,+0 -;loopus -0C002914 JAL 7000A450 ;returns V0=rand fries AT,A0,A1,A2,V0 -3C188003 LUI T8,8003 -03080821 ADDU AT,T8,T0 ;AT=80030000+offset -8F18A8F0 +LW T8,A8F0 (T8) ;0 if solo, 1 if multi, 2 if cheats... -5B000002 +BLEZL T8,R0,+2 ;branch if solo or intro... -8038CD03 +LB T8,CD03 (AT) -8038CD00 LB T8,CD00 (AT) ;T8=# stuff -53000004 BEQL T8,R0,+4 -A038CD04 *SB T8,CD06 (AT) ;this prevents division by zero -0058001B DIVU V0,T8 -0000C810 MFHI T9 -A039CD04 *SB T9,CD06 (AT) ;T9=new random value -1D00FFF3 BGTZ T0,-D (loopus) -2108FFFF ADDIU T0,T0,FFFF -//7F000FB8: -8FBF0014 LW RA,0014 (SP) -03E00008 JR RA -27BD0018 ADDIU SP,SP,0018 - - -7F0235AC: 0x580DC normal random head routine -AFBFFFEC SW RA,FFEC (SP) -0FC08D64 JAL 7F023590 ;NEW ONE DOWN THERE! -00000000 -100F000F BEQ T7,R0,7F0235F8 ;PULL FEM HEADS -3C0B8003 LUI T3,8003 -//7F0235C0: pseudorandomize male head -0C002914 JAL 7000A450 ;returns V0=random value; fries AT,A0,A1,A2,V0 -9178CD05 *LBU T8,CD07 (T3) ;T8=current random male head -30590003 ANDI T9,V0,0003 ;reduces rand to two bits (4 unique heads) -8169CD01 *LB T1,CD04 (T3) ;T1=number of male head entries -03194021 ADDU T0,T8,T9 -5920000F BLEZL T1,[return] ;no div by zero! -3403004E ORI V1,R0,004E ;default head is Bond Tux -0109001B DIVU T0,T1 -00005010 MFHI T2 ;T2=T0%T1 - number lying between 0-B -016AC021 ADDU T8,T3,T2 ;T8=upper half of head table offset -9179CD02 LBU T9,CD02 (T3) ;T9=number of bodies (offset to data in table) -03191821 ADDU V1,T8,T9 -//7F0235F0: pull male head at offset -10000008 BEQ R0,R0,7F023614 ;return yo -9063CD09 *LBU V1,CD09 (V1) ;V1=random male head -//7F0235F8: pull female head at offset -9163CD04 *LBU V1,CD06 (T3) ;cur fem head -916CCD02 LBU T4,CD02 (T3) ;#bodies -006C1821 ADDU V1,V1,T4 ;V1+T4 -916CCD01 LBU T4,CD01 (T3) ;#male -006C1821 ADDU V1,V1,T4 -006B5821 ADDU T3,V1,T3 -9163CD0A *LBU V1,CD09 (T3) ;V1=rand fem head -//7F023614: return -8FBFFFEC LW RA,FFEC (SP) -03E00008 JR RA -00601025 OR V0,V1,R0 - -7F023590: 0x58150 -15 commands - random bodies MP, single solo -AFBFFFEC SW RA,FFEC (SP) -0FC040A4 JAL 7F010290 ;returns T6=mode, V0=#players -3C0F8003 LUI T7,8003 -59C00007 BLEZL T6, [retrieve] -91E8CD06 *LBU T0,CD08 (T7) -//random -0C002914 JAL 7000A450 ;returns V0=random; fries AT,A0,A1,A2,V0 -91EECD02 LBU T6,CD02 (T7) ;T9=count for body -59C00003 BLEZL T6,[retrieve] ;crappy error handling -00004025 OR T0,R0,R0 -004E001B DIVU V0,T6 -00004010 MFHI T0 -//retrieve -01E87821 ADDU T7,T7,T0 -8FBFFFEC LW RA,FFEC (SP) -03E00008 JR RA -91E2CD08 *LBU V0,CD09 (T7) ;V0=body value in 8002CD09 body table - - -7F023660 0x58190 LOAD TRULY RANDOM HEAD -AFBFFFEC SW RA,FFEC (SP) -0FC08D64 JAL 7F023590 ;returns T7=gender for body A0 -00000000 NOP -3C0E8003 LUI T6,8003 -91C3CD02 LBU V1,CD02 (T6) ;V1=#bodies -01C3C021 ADDU T8,T6,V1 ;T8=offset to data -15E00004 BNEZ T7,7F023684 ;+4 skip female-exclusive data offsetting -01CFC821 ADDU T9,T6,T7 ;T9=cur head for gender;acts as an offset! sneaky, eh? -//7F023680: female-exclusive offsetting -91C3CD01 LBU V1,CD01 (T6) ;V1=#male -0303C021 ADDU T8,T8,V1 -00000000 *NOP -//7F023684: all genders -0C002914 JAL 7000A450 ;returns V0=random; fries AT,A0,A1,A2,V0 -9339CD00 LB T9,CD00 (T9) ;T9=count for gender -5B200005 BLEZL T9,7F0236AC ;+5 catch division by zero -3403004E ORI V1,R0,004E ;default is brosnan tux head -//7F02369C: get head -0059001B DIVU V0,T9 -00004010 MFHI T0 -0308C021 ADDU T8,T8,T0 -9303CD09 *LBU V1,CD09 (T8) ;V1=head -//7F0236AC: return -8FBFFFEC LW RA,FFEC (SP) -03E00008 JR RA -00601025 OR V0,V1,R0 - -//7F0187E8-7F01886C 4D318 random BODY -0048001B DIVU V0,T0 -00000810 MFHI AT -9149CD06 *LBU T1,CD08 (T2) -50290001 BEQL AT,T1,+1 -24210001 ADDIU AT,AT,0001 -50280001 BEQL AT,T0,+1 -24010000 ADDIU AT,R0,0000 -A149CD06 *SB T1,CD08 (T2) ;never the same guy twice! -00000000 nop? -00000000 nop? -002A5021 ADDU T2,AT,T2 -9148CD08 *LBU T0,CD09 (T2) -24010016 ADDIU AT,R0,0016 -//7F01881C: - - -- random weapon recall - -//7F018A50: 0x4D580 -3C0F8003 LUI T7,8003 -018F7021 ADDU T6,T7,T4 -91CEBA74 LBU T6,BA74 (T6) -11C00078 BEQ T6,R0,7F018C40 if no weapons, branch -//7F018A64: 2=rifles -000E4021 ADDU T0,R0,T6 -0C002914 JAL 7000A450 -24090002 ADDIU T1,R0,0002 -004E001B DIVU V0,T6 -00004010 MFHI T0 -51800001 BEQL T4,R0,+1 -25080001 ADDIU T0,T0,0001 -110E0070 BEQ T0,T6,7F018C40 completely unarmed when over # entries -00084040 SLL T0,T0,0x1 -010F1821 ADDU V1,T0,T7 -55890001 BNEL T4,T1,+1 if not rifles, add +0x18 -24630018 ADDIU V1,V1,0018 -51800001 BEQL T4,R0,+1 if unarmed, add another +0x1E -2463001E ADDIU V1,V1,001E -1000001E BEQ R0,R0,7F018B14 -9463BA38 LHU V1,BA38 (V1) - -FINAL: -3C 0F 80 03 01 8F 70 21 91 CE BA 74 11 C0 00 78 -00 0E 40 21 0C 00 29 14 24 09 00 02 51 80 00 01 -25 08 00 01 00 48 00 1B 00 00 40 10 11 0E 00 70 -00 08 40 40 01 0F 18 21 55 89 00 01 24 63 00 18 -51 80 00 01 24 63 00 1E 10 00 00 1E 94 63 BA 38 - -+_+ - -MP character select table move -7F010350 44E80 - - - 467AC -3C11 LUI S1,8003 -> - 467CC -2631 ADDIU S1,S1,B198 -> -7F011D44 46874 -3C11 LUI S1,8003 -> -2631 ADDIU S1,S1,B194 -> - - 470A8 - LUI T9,8003 -> - ADDIU T9,T9,B198 -> - -7F012A90 475C0 - LUI A0,8003 -> -7F012AB4 475E4 - LHU A0,B198 (A0) -> - - \ No newline at end of file diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/shrinktbl.rar b/notes/GE Documentation/Rand++ Documentation (Misc)/shrinktbl.rar deleted file mode 100644 index 77bf721..0000000 Binary files a/notes/GE Documentation/Rand++ Documentation (Misc)/shrinktbl.rar and /dev/null differ diff --git a/notes/GE Documentation/Rand++ Documentation (Misc)/stage initialization.txt b/notes/GE Documentation/Rand++ Documentation (Misc)/stage initialization.txt deleted file mode 100644 index 0697534..0000000 --- a/notes/GE Documentation/Rand++ Documentation (Misc)/stage initialization.txt +++ /dev/null @@ -1,43 +0,0 @@ -7F001750: 36280 stage multiplier initialization -27BDFFE8 ADDIU SP,SP,FFE8 -AFBF0014 SW RA,0014 (SP) -0FC00656 JAL 7F001958 -00000000 NOP -0FC006C2 JAL 7F001B08 -00000000 NOP -//7F001768: 36298 -3C018003 LUI AT,8003 -AC200AC0 SW R0,0AC0 (AT) -44800000 MTC1 R0,F0 -3C018003 LUI AT,8003 -AC200AC4 SW R0,0AC4 (AT) -3C018003 LUI AT,8003 -E4200AC8 SWC1 F0,0AC8 (AT) -3C018003 LUI AT,8003 -3C048003 LUI A0,8003 -AC200ACC SW R0,0ACC (AT) -24840AD0 ADDIU A0,A0,0AD0 -3C018003 LUI AT,8003 -E4800000 SWC1 F0,0000 (A0) -E4800004 SWC1 F0,0004 (A0) -E4800008 SWC1 F0,0008 (A0) -AC200ADC SW R0,0ADC (AT) -3C018003 LUI AT,8003 -E4200AE0 SWC1 F0,0AE0 (AT) -3C018003 LUI AT,8003 -AC200AE4 SW R0,0AE4 (AT) -24050001 ADDIU A1,R0,0001 -3C018003 LUI AT,8003 -AC250AE8 SW A1,0AE8 (AT) -3C018003 LUI AT,8003 -AC200AEC SW R0,0AEC (AT) -3C018003 LUI AT,8003 -E4200AF0 SWC1 F0,0AF0 (AT) -3C018003 LUI AT,8003 -3C028007 LUI V0,8007 -3C038007 LUI V1,8007 -AC200AF4 SW R0,0AF4 (AT) -24632E70 ADDIU V1,V1,2E70 -24421E80 ADDIU V0,V0,1E80 -//7F0017EC: 3631C -... diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F00105C - allocate false actor GUARDdata for global actions.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F00105C - allocate false actor GUARDdata for global actions.txt deleted file mode 100644 index cab791d..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F00105C - allocate false actor GUARDdata for global actions.txt +++ /dev/null @@ -1,141 +0,0 @@ -7F00105C 35B8C allocate false actor GUARDdata to execute global actions in setup file (1xxx type) -LUI T5,8007 -ADDIU T5,T5,5D00 -LW A1,0014 (T5) ;A1=80075D00+14: p->setup.actions -LUI V0,8003 -LUI A2,8003 -ADDIU A2,A2,097C ;A2=8003097C -ADDIU V0,V0,0980 ;V0=80030980: #global actions (1xxx type) -ADDIU SP,SP,FDF8 -SW RA,0014 (SP) -SW R0,0000 (A2) ;NULL->8003097C -BEQ A1,R0,7F001248 ;return if NULL -SW R0,0000 (V0) ;0->80030980 -//7F00108C: -LW T6,0000 (A1) ;T6=setup.actions.code -OR V1,A1,R0 ;V1=A1: p->setup.actions -OR A3,R0,R0 -BEQ T6,R0,7F0010CC ;skip if NULL -ADDIU A1,R0,0004 ;A1= bank 4 -//7F0010A0: -LW T7,0004 (V1) ;T7=setup.actions.type -SLTI AT,T7,1000 -BNEL AT,R0,7F0010C0 ;skip if local type -LW T6,0008 (V1) -//7F0010B0: inc. global type count -LW T8,0000 (V0) -ADDIU T9,T8,0001 -SW T9,0000 (V0) ;80030980+=1 -//7F0010BC: loop for each action entry -LW T6,0008 (V1) -ADDIU V1,V1,0008 ;V1+=8 next action -BNEL T6,R0,7F0010A4 -LW T7,0004 (V1) -//7F0010CC: allocate space for each global action -LW V1,0000 (V0) ;V1=80030980: #global actions -OR T0,R0,R0 -BLEZ V1,7F001248 ;return if none -SLL A0,V1,0x4 -SUBU A0,A0,V1 -SLL A0,A0,0x3 -SUBU A0,A0,V1 -SLL A0,A0,0x2 -ADDIU A0,A0,000F -ORI T7,A0,000F -XORI A0,T7,000F ;A0= (1DC*V1)->quadword boundry -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -SW A3,0200 (SP) ;SP+200 = 0: index -//7F001100: set p->allocated memory -LUI T5,8007 -ADDIU T5,T5,5D00 -LW A1,0014 (T5) ;A1=80075D14: p->setup.actions -LUI A2,8003 -ADDIU A2,A2,097C -SW V0,0000 (A2) ;V0->8003097C: set p->global actions buffer -LW T9,0000 (A1) ;T9=setup.actions.code -LW A3,0200 (SP) ;A3=index -OR A0,R0,R0 ;A0= actions offset -BEQ T9,R0,7F001248 ;return if end of list (NULL) -OR V1,A1,R0 ;V1=A1: p->setup.actions -//7F00112C: setup for loop -LUI T0,8003 -ADDIU T0,T0,A060 ;T0=8002A060: start -ADDIU T4,R0,001A -ADDIU T3,R0,FFFF -ADDIU T2,R0,00FE -ADDIU T1,R0,01DC -ADDIU A1,SP,0024 ;A1=SP+24: p->buffer -//7F001148: If the entry is a global type... -LW T6,0004 (V1) ;T6= setup.actions.type -OR T9,T0,R0 ;T9=8002A060: cur -ADDIU T8,T0,01D4 ;T8=8002A234: end -SLTI AT,T6,1000 -BNE AT,R0,7F001234 ;iterate if not a global type -OR T6,A1,R0 ;T6=p->buffer -//7F001160: ...copy 8002A060 -> buffer... -LW AT,0000 (T9) -ADDIU T9,T9,000C -ADDIU T6,T6,000C -SW AT,FFF4 (T6) -LW AT,FFF8 (T9) -SW AT,FFF8 (T6) -LW AT,FFFC (T9) -BNE T9,T8,7F001160 -SW AT,FFFC (T6) -//7F001184: ...work out offset to entry... -MULTU A3,T1 -LW AT,0000 (T9) -SW AT,0000 (T6) -LW T8,0004 (T9) -SW T8,0004 (T6) -LW T7,0000 (A2) ;T7=p->actions.global.buffer -MFLO V0 ;V0=index * 1DC -ADDIU T6,A1,01D4 ;T6=p->end of buffer -ADDU T8,T7,V0 ;T8=actions.global.buffer[index] -OR T7,A1,R0 ;T7=p->start of buffer -//7F0011AC: ...copy buffer to actions.global.buffer[index]... -LW AT,0000 (T7) -ADDIU T7,T7,000C -ADDIU T8,T8,000C -SW AT,FFF4 (T8) -LW AT,FFF8 (T7) -SW AT,FFF8 (T8) -LW AT,FFFC (T7) -BNE T7,T6,7F0011AC -SW AT,FFFC (T8) -//7F0011D0: ...and set up false actor to execute code indefinately. -LW AT,0000 (T7) -ADDIU A3,A3,0001 ;A3+=1 index+=1 -SW AT,0000 (T8) -LW T6,0004 (T7) -SW T6,0004 (T8) -LW T9,0000 (A2) -ADDU T6,T9,V0 -SH T2,0000 (T6) ;FE -> actions.global.buffer[index]+0: ID 00FE -LW T7,0014 (T5) ;T7=p->setup.actions -LW T6,0000 (A2) -ADDU T8,T7,A0 ;T8=setup.actions+offset -LW T9,0000 (T8) ;T9=setup.actions.code -ADDU T7,T6,V0 -SW T9,0104 (T7) ;setup.actions.code -> actions.global.buffer[index]+104: p->action code -LW T8,0000 (A2) -ADDU T6,T8,V0 -SH R0,0108 (T6) ;0 ->actions.global.buffer[index]+108: offset in action to cur. command -LW T9,0000 (A2) -ADDU T7,T9,V0 -SH T3,010A (T7) ;-1->actions.global.buffer[index]+10A: action return value -LW T8,0000 (A2) -ADDU T6,T8,V0 -SB T4,0007 (T6) ;14->actions.global.buffer[index]+7: cur. action type (throw grenade, which is more like 'other') -LW T9,0014 (T5) -ADDU V1,T9,A0 -LW T7,0008 (V1) ;T7=next setup.actions.code -ADDIU A0,A0,0008 ;A0+=8 next offset -ADDIU V1,V1,0008 ;A1+=8 next setup.action -BNEL T7,R0,7F00114C ;loop until NULL -LW T6,0004 (V1) -//7F001248: return -LW RA,0014 (SP) -ADDIU SP,SP,0208 -JR RA -NOP diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F03415C - guard constructor.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F03415C - guard constructor.txt deleted file mode 100644 index 5fb40d0..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F03415C - guard constructor.txt +++ /dev/null @@ -1,181 +0,0 @@ -I *think* this is the action block guard construction... - -REQUIRES THESE: -06D5DC 0001 82 LB A1,0001 (S1) //A1= body -06D664 0001 82 - -returns 0 if unsucessful... -7F03415C: ADDIU SP, SP, 0xFFC0 -7F034160: SW RA, 0x001C (SP) -7F034164: SW A0, 0x0040 (SP) save body -7F034168: SW A1, 0x0044 (SP) save head -7F03416C: SW A2, 0x0048 (SP) save preset address -7F034170: JAL 0x7F01FFC0 returns V0=next available guard ID# -7F034174: SW A3, 0x004C (SP) save pad pointer -7F034178: SLTI AT, V0, 0x0003 -7F03417C: BNEZ AT, 0x7F034244 ID should not be less than 3... -7F034180: LW V1, 0x0048 (SP) V1=preset address -7F034184: LW T6, 0x0044 (SP) T6=head -7F034188: BGEZL T6, 0x7F0341A4 catch random heads -7F03418C: LWC1 F4, 0x0000 (V1) F4=x position -// -7F034190: JAL 0x7F0235AC V0=solo random head; requires A0=body -7F034194: LW A0, 0x0040 (SP) -7F034198: LW V1, 0x0048 (SP) V1=preset address -7F03419C: SW V0, 0x0044 (SP) save head -7F0341A0: LWC1 F4, 0x0000 (V1) -// -7F0341A4: LW A3, 0x0058 (SP) A3=bitflags -7F0341A8: LW T7, 0x004C (SP) T7=pad pointer -7F0341AC: SWC1 F4, 0x0030 (SP) save x pos -7F0341B0: LWC1 F6, 0x0004 (V1) F6=y position -7F0341B4: ANDI T8, A3, 0x0010 -7F0341B8: SLTU A3, R0, T8 -7F0341BC: SWC1 F6, 0x0034 (SP) save y pos -7F0341C0: LWC1 F8, 0x0008 (V1) F8=z position -7F0341C4: ADDIU A0, SP, 0x0030 -7F0341C8: ADDIU A1, SP, 0x0028 -7F0341CC: LW A2, 0x0050 (SP) A2=lateral rotation? -7F0341D0: SW T7, 0x0028 (SP) save pad pointer -7F0341D4: JAL 0x7F033F48 -7F0341D8: SWC1 F8, 0x0038 (SP) save z pos -7F0341DC: BEQ V0, R0, 0x7F034244 expect a valid pointer -7F0341E0: LW A0, 0x0040 (SP) A0=body -7F0341E4: LW A1, 0x0044 (SP) A1=head -7F0341E8: JAL 0x7F0234D0 returns V0= pointer to model stuff? -7F0341EC: LW A2, 0x0058 (SP) A2=bitflags -7F0341F0: BEQ V0, R0, 0x7F034244 -7F0341F4: OR A0, V0, R0 A0=V0 -7F0341F8: LW T0, 0x0054 (SP) T0=pointer to action -7F0341FC: ADDIU A1, SP, 0x0030 -7F034200: LW A2, 0x0050 (SP) A2=lateral rotation? -7F034204: LW A3, 0x0028 (SP) A3=pad pointer -7F034208: JAL 0x7F0203B8 initializes and stores values to guarddata -7F03420C: SW T0, 0x0010 (SP) -7F034210: BEQ V0, R0, 0x7F034244 test to see if valid guarddata pointer? -7F034214: OR A0, V0, R0 -7F034218: JAL 0x7F03A4F0 -7F03421C: SW V0, 0x003C (SP) -7F034220: JAL 0x7F03A404 -7F034224: LW A0, 0x003C (SP) -7F034228: LW V0, 0x003C (SP) -7F03422C: LW T1, 0x0044 (SP) -7F034230: LW V1, 0x0004 (V0) -7F034234: SB T1, 0x0006 (V1) -7F034238: LW T2, 0x0040 (SP) -7F03423C: BEQ R0, R0, 0x7F034248 -7F034240: SB T2, 0x000F (V1) -7F034244: OR V0, R0, R0 -7F034248: LW RA, 0x001C (SP) -7F03424C: ADDIU SP, SP, 0x0040 -7F034250: JR RA -7F034254: NOP - --------- - - --------- -7F01FFC0: returns V1=next available guard ID -LUI A0,8003 -LW A0,CC68 (A0) A0=#guards -OR V1,R0,R0 -OR V0,R0,R0 -BLEZ A0,7F020010 -LUI A1,8003 -SLL A2,A0,0x4 -SUBU A2,A2,A0 -SLL A2,A2,0x3 -SUBU A2,A2,A0 -SLL A2,A2,0x2 A2=#guard*1DC: A2=offset to end of list -LW A1,CC64 (A1) A1=guarddata pointer -//7F01FFF0: -LW T6,001C (A1) T6: pointer to model data -ADDIU V0,V0,01DC -SLT AT,V0,A2 -BNEZ T6,7F020008 -NOP -ADDIU V1,V1,0001 -//7F020008: -BNEZ AT,7F01FFF0 keep going until all current IDs are exhausted -ADDIU A1,A1,01DC -//7F020010: -JR RA -OR V0,V1,R0 - - -++++++++++++ ------------- -[rewrite] I need four lines: 68C8C -7F03415C: 27BDFFC0 ADDIU SP, SP, 0xFFC0 -7F034160: AFBF001C SW RA, 0x001C (SP) -//EDITO! -7F034164: AFA50044 SW A1, 0x0044 (SP) save head - 04810004 BGEZ A0,+4 -7F03416C: AFA60048 SW A2, 0x0048 (SP) save preset address - 0FC08D88 JAL 7F023590 RANDBODY - 00000000 NOP - 00022025 OR A0,V0,R0 -7F03417C: AFA40040 SW A0, 0x0040 (SP) save body -7F034180: C4C40000 LWC1 F4, 0x0000 (A2) F4=x position -7F034184: E7A40030 SWC1 F4, 0x0030 (SP) save x pos -7F034188: C4C60004 LWC1 F6, 0x0004 (A2) F6=y position -7F03418C: E7A60034 SWC1 F6, 0x0034 (SP) save y pos -7F034190: C4C80008 LWC1 F8, 0x0008 (A2) F8=z position -7F034194: E7A80038 SWC1 F8, 0x0038 (SP) save z pos -7F034198: 0FC07FF0 JAL 0x7F01FFC0 returns V0=next available guard ID# -7F03419C: AFA7004C SW A3, 0x004C (SP) save pad pointer -7F0341A0: 28410003 SLTI AT, V0, 0x0003 -7F0341A4: 142000** **BNEZ AT, 0x7F034244 MOVE! -7F0341A8: 8FAE0044 LW T6, 0x0044 (SP) T6=head -7F0341AC: 05C10004 *BGEZ T6, +4 catch random heads -7F0341B0: 8FA70058 LW A3, 0x0058 (SP) A3=bitflags -// -7F0341B4: 0FC08D6B JAL 0x7F0235AC V0=solo random head; requires A0=body -7F0341B8: 8FA40040 LW A0, 0x0040 (SP) --1 -7F0341BC: AFA20044 SW V0, 0x0044 (SP) save head --1 -// --1 7F034180: LW V1, 0x0048 (SP) V1=preset address -7F0341C0: 8FAF004C LW T7, 0x004C (SP) T7=pad pointer -7F0341C4: 30F80010 ANDI T8, A3, 0x0010 -7F0341C8: 0018382B SLTU A3, R0, T8 -//PUSH ALL BELOW +1 0x68CF4 -7F0341CC: 27A40030 ADDIU A0, SP, 0x0030 -7F0341D0: 27A50028 ADDIU A1, SP, 0x0028 -7F0341D4: 8FA60050 LW A2, 0x0050 (SP) A2=lateral rotation? -7F0341D8: 0FC0CFD2 JAL 0x7F033F48 -7F0341DC: AFAF0028 SW T7, 0x0028 (SP) save pad pointer -//END OF EDIT -7F0341DC: BEQ V0, R0, 0x7F034244 expect a valid pointer -7F0341E0: LW A0, 0x0040 (SP) A0=body -7F0341E4: LW A1, 0x0044 (SP) A1=head -7F0341E8: JAL 0x7F0234D0 returns V0= pointer to model stuff? -7F0341EC: LW A2, 0x0058 (SP) A2=bitflags -7F0341F0: BEQ V0, R0, 0x7F034244 -7F0341F4: OR A0, V0, R0 A0=V0 -7F0341F8: LW T0, 0x0054 (SP) T0=pointer to action -7F0341FC: ADDIU A1, SP, 0x0030 -7F034200: LW A2, 0x0050 (SP) A2=lateral rotation? -7F034204: LW A3, 0x0028 (SP) A3=pad pointer -7F034208: JAL 0x7F0203B8 initializes and stores values to guarddata -7F03420C: SW T0, 0x0010 (SP) -7F034210: BEQ V0, R0, 0x7F034244 test to see if valid guarddata pointer? -7F034214: OR A0, V0, R0 -7F034218: JAL 0x7F03A4F0 -7F03421C: SW V0, 0x003C (SP) -7F034220: JAL 0x7F03A404 -7F034224: LW A0, 0x003C (SP) -7F034228: LW V0, 0x003C (SP) -7F03422C: LW T1, 0x0044 (SP) -7F034230: LW V1, 0x0004 (V0) -7F034234: SB T1, 0x0006 (V1) -7F034238: LW T2, 0x0040 (SP) -7F03423C: BEQ R0, R0, 0x7F034248 -7F034240: SB T2, 0x000F (V1) -7F034244: OR V0, R0, R0 -7F034248: LW RA, 0x001C (SP) -//switch with NULL to save a line -7F034250: JR RA -7F03424C: ADDIU SP, SP, 0x0040 --1 diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F049504 - action D2.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F049504 - action D2.txt deleted file mode 100644 index 64f3b7a..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/7F049504 - action D2.txt +++ /dev/null @@ -1,22 +0,0 @@ -7F039504 6E034 action D2: exit stage -LUI T5,8003 -LW T5,642C (T5) ;T5=8003642C: 0 when solo? -LUI T6,8003 -BEQ T5,R0,7F03953C -NOP -LW T6,6434 (T6) ;T6=80036434: -ADDIU T7,R0,0001 -LUI AT,8003 -BNEL T6,R0,7F039548 ;branch if already set -ADDIU S2,S2,0001 -SW T7,6434 (AT) ;1->80036434: -ADDIU S2,S2,0001 ;S2++ -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 ;S1++ -//7F03953C: -JAL 70006968 ;end stage and return to menus -NOP -//7F039544: -ADDIU S2,S2,0001 ;S2++ -BEQ R0,R0,7F03558C -ADDIU S1,S1,0001 ;S1++ diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/Action Block Types.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/Action Block Types.txt deleted file mode 100644 index eec9826..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/Action Block Types.txt +++ /dev/null @@ -1,442 +0,0 @@ -Goldeneye -Item Types - -if > 0x18 subtract 0x19 -if < 0x25 ((0x25 - 0x19) << 2) + 80053654 (still end of table) (TLB pointers to jr) - - -# of words for type - whoo!!! - -# words description -01 40 Door -02 2 Door Scale (beta) -03 20 Std. Object -04 21 Key -05 20 Alarm -06 3B Camera -07 21 Ammo Clip -08 22 Weapon -09 7 Guard -0A 40 Single-Screen Display (monitors, etc) -0B 95 Multi-Screen Display (bunker, for example) -0C 20 Monitor Rack -0D 36 Drone Guns -0E 3 Link Collectables -0F 1 N/A -10 1 N/A -11 20 Hat -12 3 Set Guard Attributes -13 4 Link Objects -14 2D Ammo Box -15 22 Body Armour -16 4 Tag Object -17 4 Start Objective -18 1 End Objective -19 2 Destroy Object -1A 2 Complete if True -1B 2 Failed if True -1C 2 Collect Item -1D 2 Deposit Item -1E 4 Photograph Object -1F 1 N/A -20 4 Enter Room -21 5 Deposit Item in Room -22 1 Use Key Analyzer -23 4 Watch Objective Text -24 20 Gas-Releasing Object -25 A Rename -26 4 Lock -27 2C Wheeled Vehicles -28 2D Aircraft -29 1 N/A -2A 20 Glass -2B 20 Safe -2C 5 Object in Safe -2D 38 Tank -2E 7 Camera -2F 25 Tinted Glass -30+ 1 end setup object list - - -80052100 table -Other type: (note: these are # of bytes, not words in other table) -00 2 -00XX -XX = Return Value -Go into loop executing no commands but going through them until Return Value is met by 02XX Command or 04 is found and terminate - -01 2 -01XX -XX = Return Value -Return to start of block, Go into loop executing no commands but going through them until Return Value is met by 02XX Command or 04 is found and terminate - -02 2 -02XX -XX = Return Value -In main load (not in return loop), 02 does nothing. In the return loop, if current Return Value == XX, go to main load and start executing commands again. - -03 1 iterate -04 1 terminate -05 4 jal; jump to block function with # after its pointer 05.ii.#### [i]dentifier type (FD=guard, F8=Bond),[#] of thing to jump to. given after the pointer to the block data -also: 05 - 4 Default action for guard on the path (ex. walking wait for bond, attacking immediately, wait till bond shoots, etc), 00XX = bank at 80037450, 04XX = level specific, corresponding to table with pointers to spawn stuff - -06 3 06.xxxx set return link to start of this block. -07 1 return to original function -08 1 for about a second aim at bond but do not fire -09 1 kneel -0A 9 - 0AXXXXYYYYZZZZWWWW - XXXX = Animation offset into table (ex. swirling, running, holding gun, etc, sent list before) - YYYY ? - ZZZZ ? - WWWW = some sort of speed halfword, something like that - -0B 2 0B.rr if guard is wasting time, return -0C 1 shuffle feet -0D 1 look around self -0E 2 0E.rr step sideways, return rr (guard action) -0F 2 0F.rr hop sideways, return rr (guard action) -10 2 10.rr run sideways, return rr (guard action) -11 2 11.rr walk while firing, return rr (guard action) -12 2 12.rr run while firing, return rr (guard action) -13 2 13.rr roll along ground, then fire crouched, return rr (guard action) -14 6 14.xxxx.####.rr target guard [#], [r]eturn -15 6 15.xxxx.####.rr kneel targetting guard [#], [r]eturn -16 6 16.xxxx.####.rr stand (bond like) targetting guard [#], [r]eturn -17 6 17.xxxx.####.rr stand still facing guard [#] cordially, [r]eturn value (ie. valentine, mishkin) - guard ID#0000 is Bond. - values for x: - xx2x: aim, but don't fire - xxx1: used to pinpoint bond - xxx4: used to pinpoint guard ID# - xxx8: used to pinpoint preset -18 4 18.##.xx.ww Shoot GuardID# in the x with [W]eapon type# -19 4 19.#1.#2.xx GuardID#1 shoots GuardID#2 in the x -1A 2 1A.rr throw grenade, return rr (guard action) -1B 5 1B.xxxx.##.rr drop weapon: model [x], weapon inventory #, return rr -1B.xxxx.ww.rr if bond within x units, drop [w]eapon inventory #, return rr -(if grenade, mine, etc dropped, they are active and will explode!) - - -1C 3 1C.pppp jog to preset -1D 1 jog to predefined preset (2328) -1E 3 1E.pppp walk to preset -1F 3 1F.pppp run to preset -20 2 Make path active 20XX XX = path designator from after each above path pointers -21 1 Surrender! guard throws down equipment, hands up, knees shaking! -22 1 fade away guard -23 2 23.## eliminate guard# -24 4 24.xxxx.rr activate object at preset -25 1 sound alarm -26 1 shut off alarm -27 2 27.rr invalid type (only returns false) -28 2 28.rr jog to bond. [r]eturns when at location -29 2 29.rr walk to bond. [r]eturns when at location -2A 2 2A.rr run to bond. [r]eturns when at location -2B 2 2B.rr invalid type (only returns false) -2C 3 2C.xx.rr jog to character position, return on arrival -2D 3 2D.xx.rr walk to character position, return on arrival -2E 3 2E.xx.rr run to character position, return on arrival - (for 2C-2E, valid values are guard ID# or F8,F9,FA,FB,FC,& FD) -2F 2 2F.rr if guard stopped moving (arrived at destination) return rr -30 3 30.##.rr if guard ID killed, return rr -31 3 31.##.rr return value when bond in room with guardID# -32 2 32.rr if Bond within sight, return rr -33 1 Seed Random Byte -34 3 34.xx.rr if random < XX, continue to rr -35 3 35.xx.rr if random > XX, continue to rr -36 2 36.rr same as 37, but stores GUARDcur to SP -37 2 37.rr if alarm activated, return rr -38 2 38.rr if toxic gas has been released, return -39 2 39.rr if guard sees gunfire return rr -3A 2 3A.rr if you shoot another guard, return rr -3B 2 3B.rr if you kill someone in front of guard, return rr -3C 2 3C.rr if Bond in line of sight, return rr -3D 2 3D.rr ????? -3E 2 3E.rr if you shot guard, return rr -3F 2 3F.rr if heard bond, return rr -40 3 40.##.rr if GUARDcur in the same room as GUARD#, return -41 2 41.rr guard has been loaded/on screen -42 2 42.rr if current guard on screen, return -43 2 43.rr if guard in a room currently loaded, return -44 4 44.xxxx.rr if room containing preset[x] is loaded, return -45 2 45.rr if Bond has guard at gunpoint, return -46 2 46.rr if you fired a bullet, return -47 3 47.xx.rr if x > distance between current and Bond, return -48 3 48.xx.rr if x < distance between current and Bond, return -49 3 49.xx.rr similar to 47 ????? -4A 3 4A.xx.rr similar to 48 ????? -4B 4 4B.pppp.rr return if within [p]roximity of bond. guessing clipping units. -4C 4 4C.pppp.rr return if not within [p]roximity of bond -4D 7 4D.##.xxxx.pppp.rr if guardID# within [x] units of [p]reset, [r]eturn value. -4E 7 4E.##.xxxx.pppp.rr if guardID# not within [x] units of [p]reset, [r]eturn value. -4F 5 4F.xxxx.##.rr If current is within x units of GuardID#, return -50 5 50.xxxx.##.rr If current is more than x units from GuardID#, r -51 4 51.xxxx.rr if current is within x units of any other guard, set ID# as FC and return -52 6 52.xxxx.####.rr when within [x] units of preset #, return rr -53 6 53.xxxx.####.rr when not within [x] units of preset #, return rr -54 5 54.##.xxxx.rr when guard ID# is at preset [x], return rr -55 4 if step on preset xxxx, return yy -56 3 collecting item; 56.##.rr; #number of type 16 to test, [r]eturn rr -57 3 57.ii.rr if [i]tem was depositted, return rr -58 4 58.ii.##.rr if deposited [i]nventory value on type 16#, return rr -59 3 59.##.rr if weapon value = ##, return rr (ie. 590133: if unarmed, return 33) -5A 3 5A.##.rr if type16# obj loaded, return -5B 3 5B.##.rr if tagged object not destroyed, return -5C 3 5C.##.rr if tagged object# activated, return -5D 3 5D.##.rr use gadget on object; type16[#] -5E 2 5E.## type 16# activates -5F 2 5F.## detonate type 16# -60 2 60.## Guard Drops type 16# -61 2 61.## kill guard# -62 2 62.## guard# throws equipment -63 2 63.xx guard gives bond type16#xx item -64 3 64.xx.## tagged obj[x] is equiped on guardID# -65 4 65.##.xxxx move object to preset (16-object for plane, then preset) -66 2 open door with type 16#xx -67 2 close door with type 16#xx -68 4 68.##.ss.rr check [s]tate of door type16#, [r]eturn if true. - states: - 01: closed - 02: open - 04: closing - 08: opening -69 3 69.##.rr if object is a valid loaded door, return -6A 3 6A.##.xx set lock value to x for door type16# (anything >0 should lock) -6B 3 6B.##.xx unset lock value for door type16# -6C 4 6C.##.xx.rr if tagged door's lock bits toggled, return -6D 3 6D.##.rr if objective number complete, return rr -6E 3 6E.xx.rr set guard's 2328. Options: -6F 3 6F.xx.rr similar or same as to 6E ??? - 20 next step in path - 10 Bond's current location - 08 Bond's location so long as within certain range - 04 "" - 02 "" - 01 "" - -70 3 70.xx.rr if difficulty > x, return rr - 0=secret, 1=00, 2=007 -71 3 71.xx.rr if difficulty < x, return rr - 1=agent, 2=secret, 3=00, 4=007 -72 4 72.xxxx.rr if x > time in stage, return -73 4 73.xxxx.rr if x < time in stage, return -74 4 74.xxxx.rr if x > time since power on, return -75 4 75.xxxx.rr if x < time since power on, return -76 3 76.##.rr if stage# < x, return -77 3 77.##.rr if stage# > x, return -78 3 78.xx.rr if shot guard fewer than x times, return -79 3 79.xx.rr if shot guard more than x times, return -7A 3 7A.xx.rr if x > number of near-miss shots, return -7B 3 7B.xx.rr if x < number of near-miss shots, return -7C 4 7C.##.xx.rr if guard ID#'s health above [x], return [r] -7D 4 7D.##.xx.rr if guard ID#'s health below [x], return [r] -7E 3 7E.##.rr if guard#'s bitflag 01000000 set, return ????? -7F 3 7F.xx.rr if health below xx, return rr -80 3 80.xx.rr if health above xx, return rr -81 2 81.xx set GUARDoffset 0x10C -82 2 82.xx adds x to G.o. 0x10C or limits to FF -83 2 83.xx subtracts x from G.o. 0x10C or reduces to 0 -84 3 84.xx.rr if x > GUARDoffset 0x10C, return -85 2 85.rr if GUARDoffsets 0x10C < random, return -86 2 86.xx sets GUARD offset 0x10D -87 2 87.xx add x to GUARDoffset 0x10D or limits to 0xFF -88 2 88.xx subtracts x from G.o. 0x10D or reduces to 0 -89 3 89.xx.rr if x > GUARDoffset 0x10D, return -8A 2 8A.rr if GUARDoffsets 0x10D < seeded byte, return -8B 3 8B.xxxx sets GUARD offset 0xEC hearing -8C 2 8C.xx sets GUARD offset 0xD0 reaction time -8D 2 8D.xx sets GUARD offset 0x10 ????? -8E 2 8E.## set current guard's ID# -8F 3 8F.xxxx sets guard health -90 3 90.xxxx sets guard body armour amount -ie: blue beret = 0050 - red beret = 003C - black beret = 0014 - -91 2 91.xx sets GUARD offset 0x3 ????? -92 2 92.xx sets GUARD offset 0xD ????? -93 2 93.xx sets GUARD offset 0x2 ????? -94 2 94.xx mask GUARD guard type with x -95 2 95.xx unmask GUARD guard type with x -96 3 96.xx.rr if GUARD type bits masked, return -97 3 97.##.xx mask type of guardID# with x -98 3 98.##.xx unmask guard# type with x -99 4 99.##.xx.rr if guard# type set, return - types: - 01: listen to commands? - 04: ? - trev in cradle (040F) - 80: scientist - -9A 5 9A.xxxxxxxx Set Objective Bits -9B 5 9B.xxxxxxxx Unset Objective Bits -9C 6 9C.xxxxxxxx.rr Check if Objective Value, Return Loop if so -9D 5 9D.xxxxxxxx set Guard bits -9E 5 9E.xxxxxxxx unset guard bits -9F 6 9F.xxxxxxxx.rr if guard bits same, return rr -A0 6 A0.##.xxxxxxxx Set Tags for Guard ID# -A1 6 A1.##.xxxxxxxx UnSet Tags for Guard ID# -A2 7 A2.##.xxxxxxxx.rr if tags for guard ID# xxxxxxxx, return rr - guard tags: - 00000001: ?-unset in cradle (041A) - 00000002: sunglasses (where applicable) - 00000010: invincible - 00000020: ? - guards in dam (040D) - 00000040: can shoot guards - 00000200: ? - Twhere in cradle (0412) - 00000400: ? - fall in cradle (041F) - 00000800: standard clipping (allows him to handle ramps and stuff) - 00001000: ? - jump part of dam - 00002000: ? - jump part of dam - 00004000: ? - set when trev falls in cradle (0418) - 00008000: ? - set when trev starts attacking you (0418) - 00010000: ? - cuba - 00020000: ? - cuba - 00080000: ? - trev in cradle (0408) - 00100000: scientist - 00400000: ? statue guards - -A3 6 A3.##.xxxxxxxx set tagged object# bits (0x8 offset) -A4 6 A4.##.xxxxxxxx unset tagged object# bits (0x8 offset) -A5 7 A5.##.xxxxxxxx if tagged object# bits toggled, return (0x8) - object tags: - 00100000: uncollectable - 00040000: visible? - 00020000: invincible? - -A6 6 A6.##.xxxxxxxx set tagged object# bits (0xC offset) -A7 6 A7.##.xxxxxxxx unset tagged object# bits (0xC offset) -A8 7 A8.##.xxxxxxxx if tagged object# bits toggled, return (0xC) - door tags: - 10000000: locked - 04000000: - 00080000: invisible -A9 2 A9.## guardID# set to FC -AA 3 AA.#1.#2 set FC value for guardID#1 to #2 -AB 3 AB.xxxx set object to y coordinate of xxxx preset //SubDrag... - AB.xxxx set guard's 2328 value to x //me... -AC 4 AC.##.xxxx set guardID#'s 2328 value to x -AD 1 debug text or comments follow. ascii, terminated with 00. Must contain some text or will fail! -AE 1 reset loop counter and enable it (set 40 bit) -AF 1 reset loop counter -B0 1 disable loop counter (unset 40 bit) -B1 1 enable loop counter (set 40 bit) -B2 2 B2.rr if loop counter enabled, return rr (checks 40 bit) -B3 5 B3.xxxxxx.rr if cycle counter < value, return rr -B4 5 B4.xxxxxx.rr if cycle counter > value, return rr -B5 1 Show Timer -B6 1 Hide Timer (Silent Countdown) -B7 3 Set Timer X seconds (Doesn't show timer yet) -B8 1 Stop Timer -B9 1 Start Timer -BA 3 BA.rr return if timer enabled -BB 4 BB.xxxx.rr if timer < x, return -BC 4 BC.xxxx.rr if timer > x, return -BD C spawn guard BD.bb.hh.pppp.aaaa.bbbbbbbb.rr [b]ody, [h]ead, into path table(00=use actual preset number for spawn), [p]reset position (23xx for path table), [a]ction, -BE B spawn guard... BE.bb.hh.tt.aaaa.00000000.rr (unused in bunker1) - [t]ype indicates current guard ID, bonds, etc... - flags: - 00000001 sunglasses (when applicable) - 00000002 - 00000010 scientist? can kill own? -BF 9 weapons BF.mmmm.WW.hh000000.rr [m]odel, [w]eapon inventory #, [h]and - 00 normal, 80=right+90=left for doubles, [r]eturn value if loaded okay -C0 8 hats C0.mmmm.00000000.rr [m]odel, [r]eturn value if loaded okay -C1 5 C1.##.xxxx.rr guard# does action x if hears a lot of gunfire, return when action complete -C2 3 lower display text (text bank values); C2.xxxx -C3 3 upper display text (text bank values); C3.xxxx -C4 4 C4.xxxx.## set sound effect x in slot # -C5 5 C5.##.jj.xxxx set audible range [x] for sound# from ob[j] -C6 6 C6.##.pppp.xxxx set audible range [x] for sound# from [p]reset -C7 6 C7.##.vvvv.xxxx sound # crecendos to [v]olume over [x] milliseconds -C8 6 C8.##.vvvv.xxxx sound # fades from [v]olume over [x] milliseconds -C9 2 C9.## shut off sound# (max of 8) -CA 5 CA.##.xxxx.rr if x > remaining time for SE, return -CB 2 CB.## use path # (sets A4 & A8 in obj data) -CC 5 CC.xxxx.yyyy set speed for type 27 object; x is speed, y amount of time to reach full speed -CD 5 CD.xxxx.yyyy set speed [x] of aircraft rotor (plane prop, etc.) -CE 2 "Detect if Currently in Intro Camera", return if so -CF 2 "Detect if Currently in Intro Swirl", return if so -D0 4 D0.##.ii.aa change type16# monitor [a]nimation to aa. [i]mage slot to be replaced is set here (for 0B multi image monitors) -D1 2 D1.rr if in tank, return -D2 1 exit level -D3 1 Return from Camera scene, Careful Everything is Reset -D4 3 D4.xxxx set camera to preset and focus on Bond -D5 6 D5.##.xxxx.yyyy set camera focus to tagged Camera#. If x=1, focus on Bond and ignore camera rotation. y can be set but is not used in-game. -D6 4 D6.yyyy.rr at elevation y return rr (uses clipping values methinks) -D7 2 D7.xx Disables text. - by default, disables on-screen ammo - subsequent calls will re-enable text -bitflag controls: - xxx1 do not disable upper text display - xx1x do not disable lower text display - x1xx do not disable on-screen clock -note: the clock is disabled differently than types B5/B6, so you must use D7 or D8 to re-enable - -D8 1 Enable all on-screen text displays -should only be called after D7 command, since it may toggle upper/lower text disaplays - -D9 5 D9.##.xxxx.rr guard ID#(or FD for current) moved to preset. return when true -DA 1 fade out for cut-scene -DB 1 fade in from black (reset for DA type) -DC 2 DC.rr return when fade is complete -DD 1 Remove Guards (they're just gone, no firing, nothing, including Bond image) -DE 1 Bring Guards Back -DF 2 DF.## open type 16# door. used in cutscenes -E0 3 E0.##.xx GuardID# draws weapon x (0 disarms) -E1 3 E1.xx.rr if at least x #players playing, return -E2 4 E2.##.xx.rr if x > total ammo of type#, return -E3 2 E3.ww draw weapon type (1st person) -E4 2 E4.ww draw weapon type (3rd person) -E5 3 E5.xxxx set bond's speed (continues in last used direction) -E6 5 E6.##.xxxx.rr return if tagged obj and preset are in same room -E7 2 E7.rr if guard walking or running while shooting, return -E8 2 E8.rr if guard is shooting, return -E9 1 E9 instantly switch to solo sky 2 -EA 1 EA stop time -EB 2 EB.xx on Key-Press, return xx -EC 1 EC disable player pickups -ED 1 hide 1st person display (left hand, weapon etc) -EE D cuba circular camera - EE.xxxx.yyyy.zzzz.uuuu.vvvv.wwww - x: lateral distance away from bond - y: vertical distance from bond - z: rate of spin - u: preset used as focus point for angle - v: offset to y axis, relative to preset - w: inital rotation, relative to preset - (because the camera focuses directly on the preset, v and w offset the camera's focus relative to the preset. It is as though you moved the preset itself that much. x and y set the camera's distance from the preset while focusing on the point.) - -EF 1 EF Start credits (credits at 80036440) -F0 2 F0.rr return when credits finished -F1 2 F1.rr if objectives complete, return rr -F2 3 F2.##.rr if selected Bond=#, return rr -F3 2 F3.rr if guard loaded return rr - (NOW: if player pickups disabled, return) - must disable spawning if bond not loaded or active - -F4 4 F4.0s.xx.yy Plays x-theme slot# =0-3; play for x/y seconds - x is decremented even while the song can't be heard - y is only decremented while the song is playing - the slot dictates the theme played when more than one song is registered -F5 2 F5.xx turn off music in slot 0-3 or all music (FF) -F6 1 Trigger Explosions Around Bond (like plastique detonate) -F7 3 counts scientists who are dead F7.##.rr -F8 3 F8.##.rr if guardID#'s 00200000 bitflag, unset & return -F9 1 F9 set "Killed in Action" -FA 1 FA Fawn on shoulder -FB 1 FB blend into x-sky - (warning! in stages with gas-releasing objects this will activate the gas) -FC 2 FC.## drop tagged obj from rack, guard, etc -FD not valid, end of table - -for all types that use guard ID: - F8 Bond - F9 guard path - FA writable guardID# - FB writable guardID# - recently shot - FC writable guardID# - FD is current guard (one calling routine, if applicable) ------------------- -runway 12s -A6,A3,A0,9E,9C,9A ------------------- diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/BD-BE constructors.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/BD-BE constructors.txt deleted file mode 100644 index cb49f97..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/BD-BE constructors.txt +++ /dev/null @@ -1,82 +0,0 @@ -Action BD guard constructor -7F034258: ADDIU SP, SP, FFD0 -7F03425C: SW RA, 0024 (SP) -7F034260: SW A1, 0034 (SP) save body -7F034264: SW A2, 0038 (SP) save head -7F034268: JAL 7F032F94 handle 2328 presets -7F03426C: OR A1, A3, R0 A1=preset -7F034270: SLTI AT, V0, 2710 -7F034274: BEQ AT, R0, 7F0342A0 -7F034278: SLL T8, V0, 0x4 -// -7F03427C: SLL T6, V0, 0x2 0xxx preset types -7F034280: SUBU T6, T6, V0 -7F034284: SLL T6, T6, 0x2 -7F034288: LUI T7, 8007 -7F03428C: LW T7, 5D18 (T7) -7F034290: SUBU T6, T6, V0 -7F034294: SLL T6, T6, 0x2 T6=preset(V0) * 0x2C -7F034298: BEQ R0, R0, 7F0342C0 -7F03429C: ADDU A2, T6, T7 A2=preset address -// -7F0342A0: LUI T9, 8007 2xxx preset types -7F0342A4: LW T9, 5D1C (T9) -7F0342A8: ADDU T8, T8, V0 -7F0342AC: SLL T8, T8, 0x2 T8=preset(V0) * 0x44 -7F0342B0: LUI AT, FFF5 -7F0342B4: ORI AT, AT, 9FC0 AT=correction for +2710 values -7F0342B8: ADDU A2, T8, T9 -7F0342BC: ADDU A2, A2, AT A2=preset address -// -7F0342C0: LWC1 F12, 0018 (A2) F12=x rotation -7F0342C4: LWC1 F14, 0020 (A2) F14=z rotation -7F0342C8: JAL 7F05AA30 returns F0=lateral rotation? (guessing...) -7F0342CC: SW A2, 002C (SP) save preset address -7F0342D0: LW A2, 002C (SP) A2=preset address -7F0342D4: LW T0, 0040 (SP) T0=pointer to action -7F0342D8: LW T1, 0044 (SP) T1=bitflags -7F0342DC: LW A3, 0028 (A2) A3=pad pointer -7F0342E0: SWC1 F0, 0010 (SP) save lateral rotation -7F0342E4: LW A0, 0034 (SP) A0=body -7F0342E8: LW A1, 0038 (SP) A1=head -7F0342EC: SW T0, 0014 (SP) save pointer to action -7F0342F0: JAL 7F03415C construct character -7F0342F4: SW T1, 0018 (SP) save bitflags -7F0342F8: LW RA, 0024 (SP) -7F0342FC: ADDIU SP, SP, 0030 -7F034300: JR RA -7F034304: NOP - -Action BE guard constructor -7F034308: ADDIU SP, SP, FFD0 -7F03430C: SW RA, 0024 (SP) -7F034310: SW A1, 0034 (SP) -7F034314: SW A2, 0038 (SP) -7F034318: JAL 7F033040 -7F03431C: OR A1, A3, R0 -7F034320: LW T6, 0014 (V0) -7F034324: ANDI T7, T6, 0008 -7F034328: BNEL T7, R0, 7F034378 -7F03432C: OR V0, R0, R0 -7F034330: LW A0, 001C (V0) -7F034334: JAL 7F06CC80 -7F034338: SW V0, 002C (SP) -7F03433C: LW V1, 002C (SP) -7F034340: LW T8, 0040 (SP) -7F034344: LW T9, 0044 (SP) -7F034348: LW V0, 0018 (V1) -7F03434C: LW A0, 0034 (SP) -7F034350: LW A1, 0038 (SP) -7F034354: LW A3, 0014 (V0) -7F034358: SWC1 F0, 0010 (SP) -7F03435C: SW T8, 0014 (SP) -7F034360: SW T9, 0018 (SP) -7F034364: JAL 7F03415C -7F034368: ADDIU A2, V0, 0008 -7F03436C: BEQ R0, R0, 7F03437C -7F034370: LW RA, 0024 (SP) -7F034374: OR V0, R0, R0 -7F034378: LW RA, 0024 (SP) -7F03437C: ADDIU SP, SP, 0030 -7F034380: JR RA -7F034384: NOP diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/Gas go on, Gas go off.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/Gas go on, Gas go off.txt deleted file mode 100644 index 382a02a..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/Gas go on, Gas go off.txt +++ /dev/null @@ -1,29 +0,0 @@ -Normal Gas Operation: -when gas can is destroyed, exe 7F055E64 -stores 1-> 80030ACC activate gas timer -stores 0-> 80030AE0 (float) gas counter -increment->80030AC8 gas timer - -stores 45610000 -> 80071E78 (float) gas endpoint -stores 1 -> 80071E7C damage player when set to 1 - -increments gas timer at 80030AC8. So long as this value is less than endpoint, the player receives damage. - -yes, that works out to 1 minute of evil nasty gas sound - -PAL- return 7F035330, next 7F0355CC -JAP- return 7F0355F0, next 7F03588C - -JAP gas addresses -80030B0C activate gas sound timer -80030B08 gas sound timer -80071EB8 gas endpoint -80071EBC damage player when set to 1 -800525D4 target code address - -PAL gas addresses -8002C01C activate gas sound timer -8002C018 gas sound timer -80060DB8 gas endpoint -80060DBC damage player when set to 1 -800486E4 target code address diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/crazy grenade hack!.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/crazy grenade hack!.txt deleted file mode 100644 index f426e61..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Action block microcode/crazy grenade hack!.txt +++ /dev/null @@ -1,144 +0,0 @@ -0x69148 usa left hand test -0x69488 jap -0x6704C pal -2401001A change from grenade type on test -02002025 -80780080 - -0x69180 usa right hand test -0x694C0 jap -0x67084 pal -2401001A chnage from grenade type on test - -0x691C4 usa created weapon -0x69504 jap -0x670C8 pal -240500C4 change weapon model -0FC148F5/0FC14A34/0FC149AD -2406001A change weapon type - - -7F035E78 1A.rr throw grenade -JAL 7F03457C -OR A0,S7,R0 -BEQ V0,R0,7F035EA0 -OR A0,S6,R0 -OR A1,S2,R0 -JAL 7F0352F0 -LBU A2,0001 (S1) -OR S2,V0,R0 -BEQ R0,R0,7F03558C //return -ADDU S1,S6,V0 -//7F035EA0 -ADDIU S2,S2,0002 -BEQ R0,R0,7F03558C -ADDIU S1,S1,0002 - -//7F03457C: -calls JAL 7F0523D4: A1=model, A2=type -through 7F0345A4: tests if random value/256 < 0x10 Offset -7F0345B4 JAL 7F032DE4 (handles position info) -through 7F0345D0: tests if player too close -7F0345E0 JAL 7F02A258 (V0=0 if dying, getting shot, etc) - -//7F0345F0: check left hand weapon -JAL 7F02302C //A1=hand (1-L, 0-R); returns V0=8006 for guard weapon -ADDIU A1,R0,0000 -SW V0,0024 (SP) -OR A0,S0,R0 -JAL 7F02302C //V0=right hand weapon 8006 -OR A1,R0,R0 -LW A1,0024 (SP) //A1=lefty weapon -BEQ V0,R0,7F034644 //branch if right hand empty -SW V0,0020 (SP) -//7F034614: left hand -LW V1,0004 (V0) //V1=weapon data offset -ADDIU AT,R0,001A //AT=grenade type -OR A0,S0,R0 //A0=guarddata -LB T8,0080 (V1) //T8=weapon type -OR A2,R0,R0 //A2=right hand? -OR A3,R0,R0 -BNE T8,AT,7F034644 //branch if not a grenade -NOP -//7F034634: chuck it! -JAL 7F024238 -OR A1,V0,R0 //A1=V0=8006 for weapon -BEQ R0,R0,7F0346E8 -ADDIU V0,R0,0001 -//7F034644: right hand weapon test -BEQ A1,R0,7F034678 //branch if hand empty -NOP -LW V1,0004 (A1) //V1=weapon object data -ADDIU AT,R0,001A //AT=grenade type -OR A0,S0,R0 -LB T9,0080 (V1) //T9=held weapon type -ADDIU A2,R0,0001 //A2=left hand? -BNE T9,AT,7F034678 //I ain't got no limbs left! -NOP -//7F034668: chuck it! -JAL 7F024238 -OR A3,R0,R0 -BEQ R0,R0,7F0346E8 -ADDIU V0,R0,0001 -//7F034678: messy redirection -BEQ A1,R0,7F034688 //keep going if hand was empty -OR A0,S0,R0 //A0=guarddata -BNEL V0,R0,7F0346E8 //kill it if you've got a weapon - OR V0,R0,R0 -//7F034688: -BEQ V0,R0,7F034694 -OR A3,R0,R0 //if no weapons at all, A3=0. Otherwise, A3=10000000 -LUI A3,1000 -ADDIU A1,R0,00C4 //A1=grenade model -JAL 7F0523D4 //loads a grenade to empty hand! -ADDIU A2,R0,001A //A2=grenade type -BEQ V0,R0,7F0346E4 //if new 8006 NULL, skip out -OR A1,V0,R0 //A1=new object 8006 -LW V1,0004 (V0) //V1=object data for weapon (80071E80, for instance) -OR A0,S0,R0 -ADDIU A2,R0,0001 /A2=1 -LW T0,0064 (V1) //T0=0x64 in object data. Can't remember use -ORI T1,T0,0800 -SW T1,0064 (V1) -LW T2,0020 (SP) //T2=right hand weapon 8006 -BNEZ T2,7F0346D4 //replace left (A2=1) -NOP -BEQ R0,R0,7F0346D4 //replace right (A2=0) -OR A2,R0,R0 -//7F0346D4: chuck the thing! A2=that which is chucked -JAL 7F024238 //chuck hand=A2. A3=1 when permanent -ADDIU A3,R0,0001 -BEQ R0,R0,7F0346E8 //happy return=1 -ADDIU V0,R0,0001 -//7F0346E4 -OR V0,R0,R0 //V0=0 when nothing is chucked -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0028 -JR RA -NOP - - -7F0523D4: guard draws new weapon of type, returns V0=8006 for it - accepts: A1=wep model, A2=wep type -ADDIU SP,SP,FFE0 -SW RA,001C (SP) -SW R0,0010 (SP) -JAL 7F052214 -SW R0,0014 (SP) -LW RA,001C (SP) -ADDIU SP,SP,0020 -JR RA -NOP - --7F024238 throw object from hand - expects: A2=hand(0R 1L),A3=1 if temp object, S0=guarddata - - -7F02302C: retrieve current guard weapon 8006 data - expects A0=guarddata, A1=right-0:left-1 FRIES T7 - returns V0=8006 for weapon in hand -SLL T6,A1,0x2 -ADDU T7,A0,T6 -JR RA -LW V0,0160 (T7) diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/7F0057C4 - Intro Block Handler.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/7F0057C4 - Intro Block Handler.txt deleted file mode 100644 index 13b97f3..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/7F0057C4 - Intro Block Handler.txt +++ /dev/null @@ -1,690 +0,0 @@ -7F0057C4 3A2F4 Intro Block Handler -ADDIU SP,SP,FF68 -LUI T7,8003 -SW RA,0034 (SP) -SW S2,0030 (SP) -SW S1,002C (SP) -SW S0,0028 (SP) -SDC1 F22,0020 (SP) -SDC1 F20,0018 (SP) -ADDIU T7,T7,A780 -LW AT,0000 (T7) ;AT=8002A780: -ADDIU T6,SP,008C -LW T0,0004 (T7) -SW AT,0000 (T6) -LW AT,0008 (T7) -SW T0,0004 (T6) -LUI S1,8003 -SW AT,0008 (T6) ;copy 8002A780-C to stack -LUI AT,8003 -SW R0,A928 (AT) ;0->8002A928: was not killed in action -LUI AT,8003 -LUI S0,8007 -SW R0,6424 (AT) ;0->80036424: -ADDIU S1,S1,6428 -LW S0,5D08 (S0) ;S0=80075D08: p->setup.intro -SW R0,0000 (S1) ;0->80036428: -LUI AT,8003 -LUI S2,8003 -SW R0,642C (AT) -MTC1 R0,F4 -ADDIU S2,S2,6430 -SW R0,0000 (S2) ; 0->80076430: -LUI AT,8003 -SW R0,007C (SP) -SW R0,6434 (AT) -JAL 7000695C ;V0= stage# -SWC1 F4,0088 (SP) -ADDIU AT,R0,0036 -BNE V0,AT,7F005888 ;skip if not 36: Cuba -//7F00585C: -LUI A0,0004 -ORI A0,A0,6EA0 ;A0= 46EA0 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -ADDIU T2,V0,003F -ADDIU AT,R0,FFC0 -SW V0,0000 (S1) -AND T3,T2,AT -ADDIU T4,R0,0001 -SW T3,0000 (S1) ;V0->80036428: -SW T4,0000 (S2) ; 1->80036430: -//7F005888: -LUI AT,8003 -SW R0,6438 (AT) ;0->80036438: -LUI AT,8003 -SW R0,643C (AT) ;0->8003643C: credits not started -LUI AT,8003 -LUI V0,8008 -SW R0,6440 (AT) ;NULL->80036440: NULL p->credits -MTC1 R0,F6 -MTC1 R0,F8 -MTC1 R0,F10 -ADDIU V0,V0,9990 -LUI AT,8003 -SWC1 F6,0000 (V0) ;0.0->80079990: -SWC1 F8,0004 (V0) ;0.0->80079990: -SWC1 F10,0008 (V0) ;0.0->80079990: -SW R0,6444 (AT) ;0->80076444: -LUI AT,8008 -SW R0,9C68 (AT) ;0->80079C68: -LUI AT,8003 -SW R0,6448 (AT) ;0->80036448: -LUI AT,8003 -SW R0,644C (AT) ;0->8003644C: -MTC1 R0,F16 -LUI AT,8003 -SW R0,6450 (AT) ;0->80036450: -LUI AT,8003 -LUI V1,8003 -SWC1 F16,6454 (AT) ;0.0->80036454: -MTC1 R0,F18 -ADDIU V1,V1,6458 -MTC1 R0,F4 -SW R0,0000 (V1) ;0->80036458: -SW R0,0004 (V1) ;0->8003645C: -LUI AT,8003 -SWC1 F18,6460 (AT) ;0.0->80036460: -MTC1 R0,F6 -LUI AT,8003 -SWC1 F4,6464 (AT) ;0.0->80036464: -MTC1 R0,F8 -LUI AT,8003 -SWC1 F6,6468 (AT) ;0.0->80036468: -MTC1 R0,F10 -LUI AT,8003 -SWC1 F8,646C (AT) ;0.0->8003646C: -MTC1 R0,F16 -LUI AT,8003 -SWC1 F10,6470 (AT) ;0.0->80036470: -MTC1 R0,F18 -LUI AT,8003 -SWC1 F16,6474 (AT) ;0.0->80036474: -MTC1 R0,F4 -LUI AT,8003 -SWC1 F18,6478 (AT) ;0.0->80036478: -LUI AT,8003 -SWC1 F4,647C (AT) ;0.0->8003647C: -MTC1 R0,F6 -LUI AT,8003 -SW R0,6480 (AT) ;0->80036480: -MTC1 R0,F8 -LUI AT,8003 -SWC1 F6,6484 (AT) ;0.0->80036484: -LUI AT,8003 -SWC1 F8,6488 (AT) ;0.0->80036488: -LUI AT,8003 -SW R0,648C (AT) ;0->8003648C: -LUI AT,8003 -ADDIU T5,R0,0001 -SW T5,64B0 (AT) ;1->800364B0: -LUI AT,8003 -SW R0,64B4 (AT) ;0->800364B4: -LUI AT,8003 -SW R0,6494 (AT) ;0->80036494: no camera -LUI AT,8003 -SW R0,6498 (AT) ;0->80036498: no motion -LUI AT,8003 -SW R0,649C (AT) ;0->8003649C: -MTC1 R0,F10 -LUI AT,8003 -SW R0,64A0 (AT) ;0->800364A0: -LUI AT,8003 -SWC1 F10,64A4 (AT) ;0.0->800364A4: -LUI AT,8003 -ADDIU T9,R0,0001 -SW T9,64A8 (AT) ;1->800364A8: -LUI AT,8003 -SW R0,64AC (AT) ;0->800364AC: -LUI AT,8003 -SW R0,64C0 (AT) ;NULL->800364C0: RESERVED for randomly selected static camera -LUI AT,8003 -SW R0,64B8 (AT) ;NULL->800364B8: RESERVED for final static camera entry -LUI AT,8003 -SW R0,64BC (AT) ;0->800364BC: reset # static cameras -LUI AT,8008 -LUI S1,8008 -SW R0,9A20 (AT) ;0->80079A20: -ADDIU S1,S1,9A24 -SW R0,0000 (S1) ;0->80079A24: -LUI AT,8003 -SW R0,6514 (AT) ;0->80036514: reset selected animation -LUI AT,8005 -LWC1 F16,F1A8 (AT) -LUI AT,8003 -SWC1 F16,65A8 (AT) -LUI AT,8008 -SW R0,99E4 (AT) -LUI AT,8008 -BEQ S0,R0,7F005DF4 ;skip if NULL -SW R0,99E0 (AT) ;0->800799E0: -LW V0,0000 (S0) ;V0=setup.intro.type -ADDIU AT,R0,0009 -LUI S2,8008 -BEQ V0,AT,7F005DF4 -LUI AT,42C8 -MTC1 AT,F22 -LUI AT,4780 -MTC1 AT,F20 -ADDIU S2,S2,A0B0 -//7F005A5C: reroute to handler for type -SLTIU AT,V0,0009 -BEQ AT,R0,7F005DE0 ;skip command if not known -SLL T8,V0,0x2 -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,F1AC (AT) ;T8=8004F1AC+offset: handler for intro type -JR T8 -NOP -//7F005A7C: type 0: spawn -LUI T6,8007 -LW T6,5D18 (T6) -BEQ T6,R0,7F005AE8 -NOP -JAL 7F0C0A20 ;V0=set # -NOP -LW T7,0008 (S0) -LUI T2,8007 -LUI AT,8008 -BNE V0,T7,7F005AE8 ;skip if wrong set -NOP -LW T0,0004 (S0) -LUI V0,8008 -LW V0,9C68 (V0) -SLL T1,T0,0x2 -SUBU T1,T1,T0 -LW T2,5D18 (T2) -SLL T1,T1,0x2 -SUBU T1,T1,T0 -SLL T1,T1,0x2 -SLL T4,V0,0x2 -ADDU AT,AT,T4 -ADDU T3,T1,T2 -SW T3,9C28 (AT) -LUI AT,8008 -ADDIU T5,V0,0001 -SW T5,9C68 (AT) -//7F005AE8: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C -//7F005AF0: type 1: item -JAL 7F0C0A20 ;V0=set # -NOP -LW T9,000C (S0) -BNE V0,T9,7F005B70 ;skip if wrong set -NOP -JAL 7F005710 -LW A0,0004 (S0) -LW A0,0008 (S0) -BLTZ A0,7F005B34 -NOP -JAL 7F005710 -NOP -LW A0,0004 (S0) -JAL 7F08C50C -LW A1,0008 (S0) -BEQ R0,R0,7F005B40 -LW T8,007C (SP) -//7F005B34: -JAL 7F08C488 -LW A0,0004 (S0) -//7F005B3C: -LW T8,007C (SP) -BNE T8,R0,7F005B70 -NOP -LW T6,0004 (S0) -LUI AT,8008 -ADDIU T7,R0,0001 -SW T6,99E0 (AT) -LW A0,0008 (S0) -SW T7,007C (SP) -LUI AT,8008 -BLTZ A0,7F005B70 -NOP -SW A0,99E4 (AT) -//7F005B70: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,0010 -//7F005B78: type 2: ammo -JAL 7F0C0A20 ;V0=set # -NOP -LW T0,000C (S0) -BNE V0,T0,7F005B98 ;skip if wrong set -NOP -LW A0,0004 (S0) -JAL 7F069130 -LW A1,0008 (S0) -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,0010 -//7F005BA0: type 3: swirling camera -LUI T1,8003 -LW T1,64AC (T1) -OR V0,S0,R0 -LUI AT,8003 -BNEL T1,R0,7F005BC0 -LW T2,0008 (V0) -SW S0,64AC (AT) -//7F005BBC: -LW T2,0008 (V0) -LW T3,000C (V0) -LW T4,0010 (V0) -MTC1 T2,F18 -MTC1 T3,F8 -LW T5,0014 (V0) -CVT.S.W F4,F18 -MTC1 T4,F18 -LW T9,0018 (V0) -ADDIU S0,S0,0020 -CVT.S.W F10,F8 -MTC1 T5,F8 -DIV.S F6,F4,F20 -CVT.S.W F4,F18 -MTC1 T9,F18 -DIV.S F16,F10,F20 -SWC1 F6,0008 (V0) -CVT.S.W F10,F8 -DIV.S F6,F4,F20 -SWC1 F16,000C (V0) -CVT.S.W F4,F18 -DIV.S F16,F10,F20 -SWC1 F6,0010 (V0) -DIV.S F6,F4,F20 -SWC1 F16,0014 (V0) -BEQ R0,R0,7F005DE4 -SWC1 F6,0018 (V0) -//7F005C28: type 4: animation -LW T8,0004 (S0) -LUI AT,8003 -ADDIU S0,S0,0008 -BEQ R0,R0,7F005DE4 -SW T8,6514 (AT) -//7F005C3C: type 5: character and cuff -LW T6,0004 (S0) -LW T7,0000 (S2) -ADDIU S0,S0,0008 -BEQ R0,R0,7F005DE4 -SW T6,041C (T7) -//7F005C50: type 6: fixed camera -JAL 7F09B150 -NOP -BNE V0,R0,7F005D0C -LUI T0,8003 -LW T0,64B8 (T0) -LUI T1,8003 -LUI AT,8003 -SW T0,0024 (S0) -LW T1,64BC (T1) -SW S0,64B8 (AT) -LUI AT,8003 -ADDIU T2,T1,0001 -SW T2,64BC (AT) -LW T3,0004 (S0) -LW T4,0008 (S0) -LW T5,000C (S0) -MTC1 T3,F8 -MTC1 T4,F18 -LW T9,0010 (S0) -CVT.S.W F10,F8 -MTC1 T5,F8 -LW T8,0014 (S0) -LHU A0,001E (S0) -CVT.S.W F4,F18 -MTC1 T9,F18 -DIV.S F16,F10,F22 -CVT.S.W F10,F8 -MTC1 T8,F8 -DIV.S F6,F4,F22 -SWC1 F16,0004 (S0) -CVT.S.W F4,F18 -DIV.S F16,F10,F22 -SWC1 F6,0008 (S0) -CVT.S.W F10,F8 -DIV.S F6,F4,F20 -SWC1 F16,000C (S0) -DIV.S F16,F10,F20 -SWC1 F6,0010 (S0) -JAL 7F0C1DD8 -SWC1 F16,0014 (S0) -LW V1,0020 (S0) -SW V0,001C (S0) -BEQ V1,R0,7F005D0C -NOP -//7F005D00: -JAL 7F0C1DD8 -ANDI A0,V1,FFFF -SW V0,0020 (S0) -//7F005D0C: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,0028 -//7F005D14: type 7: time -SW R0,0000 (S1) -LW A0,0008 (S0) -ADDIU AT,R0,003C -BLEZL A0,7F005D50 -LW V0,0004 (S0) -DIV A0,AT -MFHI T7 -SLL T0,T7,0x3 -SUBU T0,T0,T7 -SLL T0,T0,0x5 -ADDU T0,T0,T7 -SLL T0,T0,0x4 -LUI AT,8008 -SW T0,9A24 (AT) -//7F005D4C: -LW V0,0004 (S0) -ADDIU AT,R0,000C -BLEZ V0,7F005D84 -NOP -DIV V0,AT -MFHI T3 -LUI AT,0003 -ORI AT,AT,4BC0 -MULTU T3,AT -LW T2,0000 (S1) -LUI AT,8008 -MFLO T4 -ADDU T5,T2,T4 -SW T5,9A24 (AT) -//7F005D84: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C -//7F005D8C: type 8: credits -LUI T9,8007 -LW T9,5D28 (T9) -LW T8,0004 (S0) -LUI AT,8003 -ADDU V0,T9,T8 -SW V0,6440 (AT) -LHU T7,0000 (V0) -BNEL T7,R0,7F005DC0 -LHU T0,000C (V0) -LHU T6,0002 (V0) -BEQ T6,R0,7F005DD8 -NOP -//7F005DBC: -LHU T0,000C (V0) -ADDIU V0,V0,000C -BNEL T0,R0,7F005DC0 -LHU T0,000C (V0) -LHU T1,0002 (V0) -BNEL T1,R0,7F005DC0 -LHU T0,000C (V0) -//7F005DD8: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,0008 -//7F005DE0: advance past unknown types -ADDIU S0,S0,0004 -//7F005DE4: -LW V0,0000 (S0) -ADDIU AT,R0,0009 -BNEL V0,AT,7F005A60 -SLTIU AT,V0,0009 -//7F005DF4: -LUI V0,8003 -LW V0,64B8 (V0) -LUI S2,8008 -ADDIU S2,S2,A0B0 -BEQ V0,R0,7F005E50 -LUI AT,8003 -JAL 7000A450 -SW V0,64C0 (AT) -LUI T3,8003 -LW T3,64BC (T3) -DIVU V0,T3 -MFHI V1 -BNE T3,R0,7F005E30 -NOP -BREAK 00001C00 -//7F005E30: -BLEZ V1,7F005E50 -LUI T2,8003 -LW T2,64C0 (T2) -ADDIU V1,V1,FFFF -LUI AT,8003 -LW T4,0024 (T2) -BGTZ V1,7F005E34 -SW T4,64C0 (AT) -//7F005E50: -JAL 7F08C488 -ADDIU A0,R0,0001 -LW T5,007C (SP) -MTC1 R0,F18 -BNE T5,R0,7F005E70 -ADDIU T9,R0,0001 -LUI AT,8008 -SW T9,99E0 (AT) -//7F005E70: -LW T8,0000 (S2) -LUI AT,8005 -MTC1 R0,F6 -SWC1 F18,0078 (T8) -LW T7,0000 (S2) -LWC1 F4,F1D0 (AT) -LUI T0,8008 -SWC1 F4,007C (T7) -LW T6,0000 (S2) -SWC1 F6,0080 (T6) -LW T0,9C68 (T0) -BLEZL T0,7F005F50 -ADDIU A0,SP,008C -JAL 7F09A464 -NOP -SLTI AT,V0,0002 -BNE AT,R0,7F005ED4 -LUI T1,8008 -LW T1,9C68 (T1) -BLEZL T1,7F005ED8 -OR V1,R0,R0 -JAL 7F0790F0 -NOP -BEQ R0,R0,7F005ED8 -OR V1,V0,R0 -//7F005ED4: -OR V1,R0,R0 -//7F005ED8: -LUI T2,8008 -ADDIU T2,T2,9C28 -SLL T3,V1,0x2 -ADDU S1,T3,T2 -LW S0,0000 (S1) -LWC1 F8,0000 (S0) -SWC1 F8,008C (SP) -LWC1 F10,0008 (S0) -LW A1,008C (SP) -SWC1 F10,0094 (SP) -LW A0,0028 (S0) -LW A2,0094 (SP) -JAL 7F080D60 -SW A0,0084 (SP) -LW V0,0000 (S2) -MOV.S F20,F0 -LWC1 F16,29BC (V0) -ADD.S F18,F16,F0 -SWC1 F18,0090 (SP) -SWC1 F0,0070 (V0) -LW S0,0000 (S1) -LWC1 F12,0018 (S0) -JAL 7F05AA30 -LWC1 F14,0020 (S0) -LUI AT,8005 -LWC1 F4,F1D4 (AT) -SUB.S F6,F4,F0 -BEQ R0,R0,7F005F8C -SWC1 F6,0088 (SP) -//7F005F4C: -ADDIU A0,SP,008C -ADDIU A1,SP,0090 -ADDIU A2,SP,0094 -JAL 7F0AFB78 -LUI A3,41F0 -SW V0,0084 (SP) -OR A0,V0,R0 -LW A1,008C (SP) -JAL 7F080D60 -LW A2,0094 (SP) -LW V0,0000 (S2) -MOV.S F20,F0 -LWC1 F8,29BC (V0) -ADD.S F10,F8,F0 -SWC1 F10,0090 (SP) -SWC1 F0,0070 (V0) -//7F005F8C: -LUI AT,43B4 -MTC1 AT,F18 -LWC1 F16,0088 (SP) -LUI AT,8005 -LWC1 F6,F1D8 (AT) -MUL.S F4,F16,F18 -LW T4,0000 (S2) -LUI AT,8005 -ADDIU A1,SP,008C -DIV.S F8,F4,F6 -SWC1 F8,0148 (T4) -LW T5,0000 (S2) -SWC1 F20,0074 (T5) -LWC1 F10,F1DC (AT) -LW T9,0000 (S2) -DIV.S F16,F20,F10 -SWC1 F16,006C (T9) -LW A0,0000 (S2) -LW A2,0084 (SP) -JAL 7F07C730 -ADDIU A0,A0,0488 -JAL 7F057EAC -LWC1 F12,0088 (SP) -LW T8,0000 (S2) -NEG.S F18,F0 -MTC1 R0,F4 -SWC1 F18,0498 (T8) -LW T7,0000 (S2) -SWC1 F4,049C (T7) -JAL 7F057EA0 -LWC1 F12,0088 (SP) -LW T6,0000 (S2) -LUI AT,8003 -SWC1 F0,04A0 (T6) -JAL 7F089718 -LWC1 F12,64D0 (AT) -LUI AT,8008 -SW R0,9DA0 (AT) -LUI AT,8008 -LUI V0,8008 -LUI V1,8008 -ADDIU V1,V1,9DC8 -ADDIU V0,V0,9DA8 -SW R0,9DA4 (AT) -//7F00603C: -ADDIU V0,V0,0010 -SW R0,FFF4 (V0) -SW R0,FFF8 (V0) -SW R0,FFFC (V0) -BNE V0,V1,7F00603C -SW R0,FFF0 (V0) -//7F006054: -JAL 7F08A330 -NOP -JAL 7F08A900 -NOP -JAL 7F03A430 -NOP -LW T0,0000 (S2) -ADDIU T2,R0,0006 -SW V0,00A8 (T0) -LW T1,0000 (S2) -LW T3,00A8 (T1) -SW R0,0004 (T3) -LW T4,0000 (S2) -LW T5,00A8 (T4) -SB T2,0000 (T5) -LW T9,0000 (S2) -LWC1 F0,008C (SP) -SWC1 F0,0408 (T9) -LW T8,0000 (S2) -LW T7,00A8 (T8) -SWC1 F0,0008 (T7) -LW T6,0000 (S2) -LWC1 F0,0090 (SP) -SWC1 F0,040C (T6) -LW T0,0000 (S2) -LW T1,00A8 (T0) -SWC1 F0,000C (T1) -LW T3,0000 (S2) -LWC1 F0,0094 (SP) -SWC1 F0,0410 (T3) -LW T4,0000 (S2) -LW T2,00A8 (T4) -SWC1 F0,0010 (T2) -LW T9,0000 (S2) -LW T5,0084 (SP) -LW T8,00A8 (T9) -SW T5,0014 (T8) -LW T7,0000 (S2) -JAL 7F03A4A4 -LW A0,00A8 (T7) -LW T6,0000 (S2) -JAL 7F03A404 -LW A0,00A8 (T6) -LW V0,0000 (S2) -LUI AT,8005 -LWC1 F0,F1E0 (AT) -LWC1 F6,04B4 (V0) -DIV.S F8,F6,F0 -SWC1 F8,03B8 (V0) -LW V0,0000 (S2) -LWC1 F10,04B8 (V0) -DIV.S F16,F10,F0 -SWC1 F16,03BC (V0) -LW V0,0000 (S2) -LWC1 F18,04BC (V0) -DIV.S F4,F18,F0 -JAL 7F09A464 -SWC1 F4,03C0 (V0) -ADDIU AT,R0,0001 -BNE V0,AT,7F006158 -NOP -JAL 7F07A9B8 ;set intro camera mode A0 -ADDIU A0,R0,0001 ;A0= static camera -BEQ R0,R0,7F006160 -NOP -//7F006158: -JAL 7F07A9B8 ;set intro camera mode A0 -ADDIU A0,R0,0009 ;A0= MP swirling camera -//7F006160: -LUI A0,8003 -ADDIU A0,A0,64D8 -SLL T0,R0,0x2 -ADDU T1,A0,T0 -LW T3,0000 (T1) -LUI V1,8003 -ADDIU V1,V1,650C -SW R0,0000 (V1) -BEQ T3,R0,7F0061A8 -OR V0,R0,R0 -//7F006188: -ADDIU T4,V0,0001 -SLL T2,T4,0x2 -ADDU T9,A0,T2 -LW T5,0000 (T9) -SW T4,0000 (V1) -OR V0,T4,R0 -BNEL T5,R0,7F00618C -ADDIU T4,V0,0001 -//7F0061A8: return -LW T7,0000 (S2) -ADDIU T8,R0,0001 -LUI AT,8003 -SW T8,0420 (T7) -LW T6,0000 (S2) -SW R0,0424 (T6) -LW T0,0000 (S2) -SW R0,0428 (T0) -LW RA,0034 (SP) -LW S2,0030 (SP) -LW S1,002C (SP) -LW S0,0028 (SP) -LDC1 F22,0020 (SP) -LDC1 F20,0018 (SP) -SW R0,6510 (AT) -JR RA -ADDIU SP,SP,0098 diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/7F0888E8 - MP respawn.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/7F0888E8 - MP respawn.txt deleted file mode 100644 index 1fe06ab..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/7F0888E8 - MP respawn.txt +++ /dev/null @@ -1,279 +0,0 @@ -7F0888E8 BD418 MP respawn -ADDIU SP,SP,FFA8 -LUI T7,8003 -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -ADDIU T7,T7,688C ;T7=8003688C -LW AT,0000 (T7) ;AT=8003688C: NULL.xpos -ADDIU T6,SP,004C -LW T0,0004 (T7) ;T0=80036890: NULL.ypos -SW AT,0000 (T6) -LW AT,0008 (T7) ;AT=80036894: NULL.zpos -LUI S0,8007 -SW T0,0004 (T6) -SW AT,0008 (T6) ;copy 8003688C-94 -> SP+4C-58 -JAL 7F0793EC ;initialize playerdata -LW S0,5D08 (S0) ;S0=80075D08: p->setup.intro -JAL 7F0798B8 -NOP -//7F088930: -LUI S1,8008 -ADDIU S1,S1,A0B0 ;S1=8007A0B0: p->cur.playerdata -LW T1,0000 (S1) ;T1=cur.playerdata -ADDIU T4,R0,0001 -ADDIU V0,R0,0007 -SW R0,00D8 (T1) ;0->BONDdata+D8: disable player button control -LW T2,0000 (S1) ;T2=cur.playerdata -ADDIU T7,R0,0002 -ADDIU A0,R0,FFFF -SW R0,0428 (T2) ;0->BONDdata+428: -LW T3,0000 (S1) -SW R0,0424 (T3) ;0->BONDdata+424: -LW T5,0000 (S1) -SW T4,0420 (T5) ;1->BONDdata+420: -LW T9,0000 (S1) -SW V0,29B8 (T9) ;7->BONDdata+29B8: -LW T8,0000 (S1) -SW V0,29D4 (T8) ;7->BONDdata+29D4: -LW T6,0000 (S1) -SW R0,1064 (T6) ;0->BONDdata+1064: -LW T0,0000 (S1) -JAL 7F08A380 ;unset flags A0 at BONDdata+11D8 -SW T7,1128 (T0) ;2->BONDdata+1128: -JAL 7F08A928 ;unset flags A0 at 800368B4 -ADDIU A0,R0,FFFF ;A0= -1 -JAL 7F09A464 ;V0=#players -NOP -//7F08899C: note: spawncap extension hack shown below! -SLTI AT,V0,0002 -BNE AT,R0,7F0889C4 ;branch if solo -LUI T1,8008 -LW T1,9C28 (T1) ;T1=80079C28: #spawns -BLEZL T1,7F0889C8 ;branch if invalid or zero -OR V1,R0,R0 -JAL 7F0790F0 ;V0=selected spawn# -NOP -BEQ R0,R0,7F0889C8 -OR V1,V0,R0 ;V1=V0: index -//7F0889C4: -OR V1,R0,R0 ;index=0 -//7F0889C8: set player position to selected spawn -SLL T2,V1,0x2 ;T2=spawn#->offset -LUI V0,8008 -ADDU V0,V0,T2 -LW V0,9C2C (V0) ;V0=80079C2C: p->spawns -LWC1 F4,0000 (V0) ;F4=spawn.xpos -SWC1 F4,004C (SP) ;SP+4C=spawn.xpos -LWC1 F6,0008 (V0) ;F6=spawn.zpos -LW A1,004C (SP) ;A1=xpos -SWC1 F6,0054 (SP) ;SP+54=spawn.zpos -LW A0,0028 (V0) ;A0= +28: p->tile -LW A2,0054 (SP) ;A2=zpos -JAL 7F080D60 -SW A0,0044 (SP) ;SP+44=p->tile -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F8,29BC (V0) ;F8=BONDdata+29BC -ADD.S F10,F8,F0 -SWC1 F10,0050 (SP) -SWC1 F0,0070 (V0) ;F0->BONDdata+70 -JAL 7000A450 ;V0=random -SWC1 F0,003C (SP) -MTC1 V0,F16 -LUI AT,8005 -LWC1 F12,5284 (AT) ;F12=80055284: -LWC1 F2,003C (SP) -BGEZ V0,7F088A40 ;branch if positive -CVT.S.W F18,F16 ;F18=(float) random -LUI AT,4F80 -MTC1 AT,F4 ;F4=4294967296.0 [4F800000] -NOP -ADD.S F18,F18,F4 ;make positive -//7F088A40: move player to position -LUI AT,2F80 -MTC1 AT,F6 -LUI AT,43B4 -MTC1 AT,F10 ;F10=360.0 [43B40000] -MUL.S F8,F18,F6 -LW T3,0000 (S1) ;T3=cur.playerdata -LUI AT,8005 -ADDIU A1,SP,004C ;A1=SP+4C: p->xyz positions -MUL.S F0,F8,F12 -NOP -MUL.S F16,F0,F10 -SWC1 F0,0048 (SP) -DIV.S F4,F16,F12 -SWC1 F4,0148 (T3) ;F4->BONDdata+148: lateral rotation 1st -LW T4,0000 (S1) ;T4=cur.playerdata -SWC1 F2,0074 (T4) -LWC1 F18,5288 (AT) ;F18=80055288: -LW T5,0000 (S1) ;T5=cur.playerdata -DIV.S F6,F2,F18 -SWC1 F6,006C (T5) -LW A0,0000 (S1) ;A0=cur.playerdata -LW A2,0044 (SP) ;A2=SP+44: p->target tile -JAL 7F07C730 ;move player to location -ADDIU A0,A0,0488 ;A0=BONDdata+488: p->cur.tile, though really position block -//7F088AA0: move player's viewport etc. to position -JAL 7F057EAC -LWC1 F12,0048 (SP) -LW T9,0000 (S1) ;T9=cur.playerdata -NEG.S F8,F0 -MTC1 R0,F10 -SWC1 F8,0498 (T9) ;F8->BONDdata+498 -LW T8,0000 (S1) ;T8=cur.playerdata -SWC1 F10,049C (T8) ;F10->BONDdata+49C -JAL 7F057EA0 -LWC1 F12,0048 (SP) -LW T6,0000 (S1) ;T6=cur.playerdata -LUI AT,8005 -LWC1 F12,528C (AT) ;F12=8005528C: 0.1 [3DCCCCD0] -SWC1 F0,04A0 (T6) ;F0->BONDdata+4A0 -LW T7,0000 (S1) ;T7=cur.playerdata -LWC1 F2,004C (SP) -SWC1 F2,0408 (T7) ;F2->BONDdata+408: xpos -LW T0,0000 (S1) ;T0=cur.playerdata -LW T1,00A8 (T0) ;T1=p->pos.data -SWC1 F2,0008 (T1) ;F2->pos.data.x -LW T2,0000 (S1) ;T2=cur.playerdata -LWC1 F2,0050 (SP) -SWC1 F2,040C (T2) ;F2->BONDdata+40C: ypos -LW T3,0000 (S1) ;T3=cur.playerdata -LW T4,00A8 (T3) ;T4=p->pos.data -SWC1 F2,000C (T4) ;F2->pos.data.y -LW T5,0000 (S1) ;T5=cur.playerdata -LWC1 F2,0054 (SP) -SWC1 F2,0410 (T5) ;F2->BONDdata+410: zpos -LW T9,0000 (S1) ;T9=cur.playerdata -LW T8,00A8 (T9) ;T8=p->pos.data -SWC1 F2,0010 (T8) ;F2->pos.data.z -LW T7,0000 (S1) ;T7=cur.playerdata -LW T6,0044 (SP) -LW T0,00A8 (T7) ;T0=p->pos.data -SW T6,0014 (T0) ;T6->pos.data.tile -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F16,04B4 (V0) ;F16=BONDdata+4B4: xpos -DIV.S F4,F16,F12 ;F4=xpos/10 -SWC1 F4,03B8 (V0) ;F4->BONDdata+3B8 -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F18,04B8 (V0) ;F18=BONDdata+4B8: ypos -DIV.S F6,F18,F12 ;F6=ypos/10 -SWC1 F6,03BC (V0) ;F6->BONDdata+3BC -LW V0,0000 (S1) ;V0=cur.playerdata -LWC1 F8,04BC (V0) ;F8=BONDdata+4BC: zpos -DIV.S F10,F8,F12 ;F10=zpos/10 -JAL 7F08BFF0 ;reinitialize player inventory -SWC1 F10,03C0 (V0) ;F10->BONDdata+3C0 -//7F088B64: fry ammo totals -LW T1,0000 (S1) ;T1=cur.playerdata -ADDIU V0,R0,0008 -ADDIU V1,R0,0078 -SW R0,1130 (T1) ;0->BONDdata+1130: NULL ammo type 1 -LW T2,0000 (S1) ;T2=cur.playerdata -SW R0,1134 (T2) ;0->BONDdata+1134: NULL ammo type 2 -//7F088B7C: loop for remaining entries -LW T3,0000 (S1) ;T3=cur.playerdata -ADDU T4,T3,V0 ;T4=BONDdata+8 -SW R0,1130 (T4) ;0->BONDdata+1130+x: NULL next ammo type -LW T5,0000 (S1) ;T5=cur.playerdata -ADDU T9,T5,V0 -SW R0,1134 (T9) ;0->BONDdata+1134+x: NULL next ammo type -LW T8,0000 (S1) ;T8=cur.playerdata -ADDU T7,T8,V0 -SW R0,1138 (T7) ;0->BONDdata+1138+x: NULL next ammo type -LW T6,0000 (S1) ;T6=cur.playerdata -ADDU T0,T6,V0 -ADDIU V0,V0,0010 ;V0+=10 -BNE V0,V1,7F088B7C ;loop until 0x78 -SW R0,113C (T0) ;0->BONDdata+113C+x: NULL next ammo type -//7F088BB4: parse intro block -BEQL S0,R0,7F088C90 ;skip if no intro block -MTC1 R0,F0 -LW V0,0000 (S0) ;V0=intro.type -ADDIU AT,R0,0009 -BEQ V0,AT,7F088C8C ;quit if type 9 (EOL) -SLTIU AT,V0,0007 -//7F088BCC: loop for each type, looking for items and ammo -BEQ AT,R0,7F088C78 ;branch if type 7 or 8 -SLL T1,V0,0x2 ;T1=type->offset -LUI AT,8005 -ADDU AT,AT,T1 -LW T1,5290 (AT) ;T1=80055290+offset: handler for intro.type -JR T1 -NOP -//7F088BE8: intro type 0: spawn -BEQ R0,R0,7F088C7C -ADDIU S0,S0,000C ;S0+=C -//7F088BF0: intro type 1: weapon -JAL 7F0C0A20 ;V0=set# -NOP -LW T2,000C (S0) ;T2=cmd+C: set# -BNE V0,T2,7F088C28 ;branch if set mismatch -NOP -LW A1,0008 (S0) ;A1=cmd+8: left weapon -BLTZ A1,7F088C20 ;branch if single weapon -NOP -JAL 7F08C50C ;add doubles (A0+A1) to inventory -LW A0,0004 (S0) ;A0=cmd+4: right weapon -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0010 ;S0+=10 -//7F088C20: single weapon -JAL 7F08C488 ;add weapon A0 to inventory -LW A0,0004 (S0) ;A0=cmd+4: right weapon -//7F088C28: -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0010 ;S0+=10 -//7F088C30: intro type 2: ammo -JAL 7F0C0A20 ;V0=set# -NOP -LW T3,000C (S0) ;T3=cmd+C: set# -BNE V0,T3,7F088C50 ;branch if set mismatch -NOP -LW A0,0004 (S0) ;A0=cmd+4: type -JAL 7F069130 ;add ammo type A0, total A1 to inventory -LW A1,0008 (S0) ;A1=cmd+8: quantity -//7F088C50: -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0010 ;S0+=10 -//7F088C58: intro type 3: intro swirly -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0020 ;S0+=20 -//7F088C60: intro type 4: intro animation -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0008 ;S0+=8 -//7F088C68: intro type 5: hand/cuff -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0008 ;S0+=8 -//7F088C70: intro type 6: intro camera -BEQ R0,R0,7F088C7C -ADDIU S0,S0,0028 ;S0+=28 -//7F088C78: type 7 (8 as well, but would bug on this! -ADDIU S0,S0,0004 ;S0+=4 -//7F088C7C: -LW V0,0000 (S0) ;V0=intro.type -ADDIU AT,R0,0009 -BNEL V0,AT,7F088BCC ;loop unless EOL type (9) -SLTIU AT,V0,0007 -//7F088C8C: BD7BC fade in - last thing you do... -MTC1 R0,F0 -LW T4,0000 (S1) ;T4=cur playerdata [S1=8007A0B0] -LUI AT,8005 -SWC1 F0,0078 (T4) ;BONDdata+0x78= 0.0 -LW T5,0000 (S1) ;T5=cur playerdata -LWC1 F16,52AC (AT) ;F16=800552AC: -0.0001 [B8D1B717] -LUI AT,42F0 -MTC1 AT,F12 ;F12= 120.0 [42F00000] timer (ms.) -SWC1 F16,007C (T5) ;BONDdata+0x7C= -0.0001 -LW T9,0000 (S1) ;T9=cur playerdata -LUI AT,3F80 -MTC1 AT,F14 ;F14= 1.0 [3F800000] final level 100% -JAL 7F080A10 ;set cur. player fade -SWC1 F0,0080 (T9) ;BONDdata+0x80= 0.0 -//7F088CC4: return -LW RA,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -JR RA -ADDIU SP,SP,0058 - -//7F088CD8: diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Camera Modes.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Camera Modes.txt deleted file mode 100644 index e4b9ef0..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Camera Modes.txt +++ /dev/null @@ -1,527 +0,0 @@ -7F07A9B8: AF4E8 execute camera modes -ADDIU SP,SP,FF78 -SW S0,0028 (SP) -LUI S0,8003 -ADDIU S0,S0,6494 ;S0=80036494: camera mode -SW A0,0000 (S0) ;A0->80036494: camera mode -LUI AT,8003 -SW R0,6498 (AT) ;0->80036498: disable player control -LW V0,0000 (S0) ;V0=camera mode -ADDIU V1,R0,0001 -SW RA,002C (SP) -BNE V1,V0,7F07AA80 ;branch if not camera 1 -ADDIU AT,R0,0002 -//7F07A9E8: camera 1 - stationary intro camera -LUI T6,8003 -LW T6,64C0 (T6) -BEQ T6,R0,7F07AA70 ;branch if 800364C0=0: no selected 06 camera -NOP -JAL 7F0BFC98 -NOP -BNEZ V0,7F07AA70 -NOP -JAL 7F0BFC8C ;TRUE if in demos -NOP -BNEZ V0,7F07AA70 -LUI AT,8003 -MTC1 R0,F4 -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,R0,R0 -LUI A3,3F80 -JAL 7F0807B0 -SWC1 F4,64A4 (AT) -LUI AT,4270 -MTC1 AT,F12 -MTC1 R0,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -JAL 7000695C -NOP -OR A0,V0,R0 -JAL 7F0BAA64 -ADDIU A1,R0,0001 -LUI S0,8008 -ADDIU S0,S0,A0B0 -LW T7,0000 (S0) -BEQ R0,R0,7F07B190 -SW R0,0034 (T7) -//7F07AA70: -JAL 7F07A9B8 ;calls itself! -ADDIU A0,R0,0003 ;set camera mode 3: rotating intro camera -BEQ R0,R0,7F07B194 -LW RA,002C (SP) -//7F07AA80: camera 2 - fade to twirlidig -BNE V0,AT,7F07AAB8 -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7F0807B0 -ADDIU A3,R0,0000 -LUI AT,4270 -MTC1 AT,F12 -LUI AT,3F80 -MTC1 AT,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -BEQ R0,R0,7F07B194 -LW RA,002C (SP) -//7F07AAB8: camera 9 - multiplayer intro -ADDIU AT,R0,0009 -BNEL V0,AT,7F07AB14 -ADDIU AT,R0,0003 -MTC1 R0,F0 -LUI AT,8008 -SWC1 F0,9E04 (AT) -LUI AT,C2B4 -MTC1 AT,F6 -LUI AT,8008 -SWC1 F6,9E08 (AT) -LUI AT,8008 -SWC1 F0,9E0C (AT) -LUI AT,42A0 -MTC1 AT,F8 -LUI AT,8008 -JAL 7000695C ;V0=stage# -SWC1 F8,9E10 (AT) -OR A0,V0,R0 -JAL 7F0BAA64 -OR A1,R0,R0 -BEQ R0,R0,7F07B194 -LW RA,002C (SP) -//7F07AB10: camera 3 - rotating intro camera -ADDIU AT,R0,0003 -BNE V0,AT,7F07AC7C -OR A0,R0,R0 -LUI AT,8003 -SW R0,649C (AT) -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7F0807B0 -LUI A3,3F80 -LUI AT,4270 -MTC1 AT,F12 -MTC1 R0,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -JAL 7000695C -NOP -OR A0,V0,R0 -JAL 7F0BAA64 -OR A1,R0,R0 -LUI T8,8003 -LW T8,64AC (T8) -BEQ T8,R0,7F07AC6C -NOP -JAL 7F0BFC98 -NOP -BNEZ V0,7F07AC6C -NOP -JAL 7F0BFC8C -NOP -BNEZ V0,7F07AC6C -LUI AT,8003 -MTC1 R0,F12 -SW R0,64A4 (AT) -ADDIU T9,R0,0001 -SW T9,64A8 (AT) -LUI AT,3F80 -JAL 7F080A10 -MTC1 AT,F14 -JAL 7F079CF0 -NOP -LUI T2,8003 -LW T1,6514 (T2) -SLL T1,T1,0x3 -ADDU V0,T1,T2 -LH T3,6518 (V0) -SLL T3,T3,0x2 -ADDU A1,T3,T2 -LW A1,9D6C (A1) -LUI S0,8008 -ADDIU S0,S0,A0B0 -LW T5,0000 (S0) -LW A0,00D4 (T5) -LH A2,651E (V0) -MTC1 A2,F2 -LWC1 F0,1A3C (AT) -CVT.S.W F2,F2 -DIV.SF2,F2,F0 -LH A3,651A (V0) -MTC1 A3,F0 -SWC1 F2,0010 (SP) -CVT.S.W F0,F0 -MFC1 A3,F0 -LH A2,651C (V0) -MTC1 A2,F12 -OR A2,R0,R0 -CVT.S.W F12,F12 -SWC1 F12,0078 (SP) -JAL 7F06FCA8 -SW R0,0014 (SP) -MTC1 R0,F16 -LWC1 F12,0078 (SP) -C.LT.S F16,F12 -NOP -BC1F 7F07AC48 -LW T7,0000 (S0) -MFC1 A1,F12 -JAL 7F06FDE8 -LW A0,00D4 (T7) -LW T7,0000 (S0) -ADDIU T9,R0,0017 -LW T8,00A8 (T7) -LW V0,0004 (T8) -SB T9,0007 (V0) -SB R0,0008 (V0) -LW T0,0000 (S0) -BEQ R0,R0,7F07B190 -SW R0,0034 (T0) -JAL 7F07A9B8 -ADDIU A0,R0,0004 -BEQ R0,R0,7F07B194 -LW RA,002C (SP) -//7F07AC7C: camera 4 - 1st person -ADDIU AT,R0,0004 -BNEL V0,AT,7F07AD6C -ADDIU AT,R0,0005 -JAL 7000695C ;V0=stage# -NOP -ADDIU AT,R0,0036 -BNE V0,AT,7F07ACCC ;branch if not Cuba (36) -LUI T1,8003 -//7F07AC9C: 1st person Cuba -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7F0807B0 -LUI A3,3F80 -LUI AT,3F80 -MTC1 AT,F14 -MTC1 R0,F12 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -BEQ R0,R0,7F07ACFC -NOP -//7F07ACCC: 1st person normal -LW T1,649C (T1) ;T1=8003649C: -OR A0,R0,R0 -OR A1,R0,R0 -BEQ T1,R0,7F07ACFC -OR A2,R0,R0 -JAL 7F0807B0 -LUI A3,3F80 -LUI AT,4270 -MTC1 AT,F12 -MTC1 R0,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -//7F07ACFC: -JAL 7F09A464 ;V0=#players -NOP -SLTI AT,V0,0002 -BNEZ AT,7F07AD24 ;branch if multi -NOP -JAL 7000695C ;V0=stage# -NOP -OR A0,V0,R0 -JAL 7F0BAA64 -OR A1,R0,R0 -//7F07AD24: set initial weapon -LUI S0,8008 -ADDIU S0,S0,A0B0 -LW T2,0000 (S0) ;T2=cur. BONDdata -LUI S0,8008 -ADDIU S0,S0,99E0 ;S0=800799E0: starting weapons -LW T3,01C8 (T2) -ADDIU A0,R0,0001 ;A0=1: left hand -BNEZ T3,7F07AD5C -NOP -JAL 7F05D914 ;set weapon A1 into hand A0 -LW A1,0004 (S0) ;A1=left starting weapon -OR A0,R0,R0 ;A0=0: right hand -JAL 7F05D914 ;set weapon A1 into hand A0 -LW A1,0000 (S0) ;A1=right starting weapon -//7F07AD5C: -LUI AT,8003 -BEQ R0,R0,7F07B190 -SW R0,64A0 (AT) ;0->800364A0: start stage time -//7F07AD6C: camera 5 - unknown: each of three player deaths -ADDIU AT,R0,0005 -BNE V0,AT,7F07B0A0 -OR A0,R0,R0 -MTC1 R0,F18 -LUI AT,8003 -OR A1,R0,R0 -SWC1 F18,64A4 (AT) -LUI AT,8003 -SW V1,64A8 (AT) -OR A2,R0,R0 -JAL 7F0807B0 -LUI A3,3F80 -LUI AT,4270 -MTC1 AT,F12 -MTC1 R0,F14 ;F14=0: fade to black -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -LUI V0,8003 -LW V0,648C (V0) ;V0=8003648C: -LUI S0,8008 -LUI T4,8003 -BEQ V0,R0,7F07ADDC -ADDIU S0,S0,A0B0 -LW T4,6450 (T4) -BEQ T4,R0,7F07ADDC -NOP -LUI S0,8008 -BEQ R0,R0,7F07AF48 -ADDIU S0,S0,A0B0 -LUI AT,8003 -SW R0,6448 (AT) -LW T9,0000 (S0) -OR T8,T9,R0 -ADDIU T7,T9,0054 -LW AT,0434 (T8) -ADDIU T8,T8,000C -ADDIU T9,T9,000C -SW AT,047C (T9) -LW AT,042C (T8) -SW AT,0480 (T9) -LW AT,0430 (T8) -BNE T8,T7,7F07ADF0 -SW AT,0484 (T9) -LW V0,0000 (S0) -LWC1 F4,0414 (V0) -SWC1 F4,0148 (V0) -LW V0,0000 (S0) -LWC1 F6,0418 (V0) -SWC1 F6,0158 (V0) -LW V0,0000 (S0) -LWC1 F8,048C (V0) -LW T0,00A8 (V0) -SWC1 F8,0008 (T0) -LW V0,0000 (S0) -LWC1 F10,0490 (V0) -LW T1,00A8 (V0) -SWC1 F10,000C (T1) -LW V0,0000 (S0) -LWC1 F16,0494 (V0) -LW T2,00A8 (V0) -SWC1 F16,0010 (T2) -LW V0,0000 (S0) -LW T3,0488 (V0) -LW T4,00A8 (V0) -JAL 7F081790 -SW T3,0014 (T4) -MTC1 R0,F12 -NOP -MFC1 A2,F12 -JAL 7F080B34 -MOV.S F14,F12 -JAL 7F081478 -NOP -LUI AT,3F80 -MTC1 AT,F14 -MTC1 R0,F12 -JAL 7F080A10 -NOP -JAL 7F079CF0 -NOP -LW A0,0000 (S0) -JAL 7F06F5AC -ADDIU A0,A0,0598 -LW A0,0000 (S0) -SW V0,0038 (SP) -JAL 7F06F5B4 -ADDIU A0,A0,0598 -MTC1 R0,F0 -LW T6,0000 (S0) -LUI AT,3F00 -MTC1 AT,F18 -LW A0,00D4 (T6) -MFC1 A3,F0 -LW A1,0038 (SP) -OR A2,V0,R0 -SWC1 F0,0014 (SP) -JAL 7F06FCA8 -SWC1 F18,0010 (SP) -LW T5,0000 (S0) -ADDIU T8,R0,0018 -LW T7,00A8 (T5) -LW V1,0004 (T7) -LW T9,0014 (V1) -SB T8,0007 (V1) -SB R0,0008 (V1) -ORI T0,T9,0001 -SW T0,0014 (V1) -LW V0,0000 (S0) -LW A1,00A8 (V0) -LW A0,00D4 (V0) -JAL 7F06CC0C -ADDIU A1,A1,0008 -JAL 7F089EE4 -NOP -LW T1,0000 (S0) -MFC1 A1,F0 -JAL 7F06CD3C -LW A0,00D4 (T1) -LUI V0,8003 -LW V0,648C (V0) -BEQ V0,R0,7F07AFA8 -ADDIU A1,SP,0058 -LUI A0,8003 -LW A0,6450 (A0) -BEQL A0,R0,7F07AFAC -LW V0,0000 (S0) -SW A0,0064 (SP) -LWC1 F4,0008 (A0) -LUI AT,43FA -MTC1 AT,F0 -SWC1 F4,0058 (SP) -LWC1 F6,000C (A0) -OR A2,A0,R0 -SWC1 F6,005C (SP) -LWC1 F8,0010 (A0) -SWC1 F8,0060 (SP) -LWC1 F10,0008 (A0) -SWC1 F10,0048 (SP) -LWC1 F16,000C (A0) -SWC1 F16,004C (SP) -LWC1 F18,0010 (A0) -SWC1 F18,0050 (SP) -BEQ R0,R0,7F07AFF4 -LW V1,0014 (A0) -LW V0,0000 (S0) -LUI AT,4348 -MTC1 AT,F0 -LW T2,00A8 (V0) -SW T2,0064 (SP) -LWC1 F4,03C4 (V0) -SWC1 F4,0058 (SP) -LWC1 F6,03C8 (V0) -SWC1 F6,005C (SP) -LWC1 F8,03CC (V0) -SWC1 F8,0060 (SP) -LWC1 F10,048C (V0) -LW A2,00A8 (V0) -SWC1 F10,0048 (SP) -LWC1 F16,0490 (V0) -SWC1 F16,004C (SP) -LWC1 F18,0494 (V0) -SWC1 F18,0050 (SP) -LW V1,0488 (V0) -LW A0,0064 (SP) -ADDIU A3,SP,0048 -SW V1,0010 (SP) -JAL 7F07A534 -SWC1 F0,0014 (SP) -BEQ V0,R0,7F07B090 -LUI T3,8003 -LW T3,6510 (T3) -BNEZ T3,7F07B034 -NOP -JAL 70006E7C -ADDIU A0,R0,002C -LUI AT,3F00 -MTC1 AT,F12 -JAL 70009238 -NOP -LUI T4,8003 -LW T4,648C (T4) -LUI T6,8003 -BEQL T4,R0,7F07B194 -LW RA,002C (SP) -LW T6,6450 (T6) -BEQL T6,R0,7F07B194 -LW RA,002C (SP) -JAL 7F09B150 -NOP -LUI A0,8003 -LW A0,6450 (A0) -ADDIU A3,R0,000D -LW A2,0014 (A0) -ADDIU T5,A0,002C -SW T5,0018 (SP) -SW R0,001C (SP) -SW V0,0014 (SP) -SW R0,0010 (SP) -JAL 7F09C250 -ADDIU A1,A0,0008 -BEQ R0,R0,7F07B194 -LW RA,002C (SP) -JAL 70006930 -NOP -BEQ R0,R0,7F07B194 -LW RA,002C (SP) -//7F07B0A0: camera 6 - unknown: fade to black after player deaths -ADDIU AT,R0,0006 -BNE V0,AT,7F07B0DC -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7F0807B0 -ADDIU A3,R0,0000 -LUI AT,4270 -MTC1 AT,F12 -LUI AT,3F80 -MTC1 AT,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -BEQ R0,R0,7F07B194 -LW RA,002C (SP) -//7F07B0DC: camera 7 - unknown: respawn for each death scene -ADDIU AT,R0,0007 -BNEL V0,AT,7F07B108 -ADDIU AT,R0,0008 -JAL 7F079CF0 ;set up player's character instance -NOP -LUI S0,8008 -ADDIU S0,S0,A0B0 -LW T7,0000 (S0) -BEQ R0,R0,7F07B190 -SW R0,0034 (T7) -//7F07B104: camera 8 - return to 1st person mode from camera -ADDIU AT,R0,0008 -BNEL V0,AT,7F07B128 -ADDIU AT,R0,000A -JAL 7F07A4A0 -NOP -ADDIU T8,R0,0004 -BEQ R0,R0,7F07B190 -SW T8,0000 (S0) ;80036494=4: switch to camera mode 4 -//7F07B124: camera A - unknown -ADDIU AT,R0,000A -BNEL V0,AT,7F07B194 -LW RA,002C (SP) -JAL 7F09A464 ;V0=#players -OR S0,R0,R0 ;S0=0: player count -BLEZ V0,7F07B188 ;branch if <=0 -NOP -//7F07B140: -JAL 7F09B10C ;set player A0 -OR A0,S0,R0 ;A0=S0: player# -OR A0,R0,R0 -OR A1,R0,R0 -OR A2,R0,R0 -JAL 7F0807B0 -ADDIU A3,R0,0000 -LUI AT,4270 -MTC1 AT,F12 -LUI AT,3F80 -MTC1 AT,F14 -JAL 7F080858 ;fade to F14 over F12 seconds -NOP -JAL 7F09A464 ;V0=#players -ADDIU S0,S0,0001 -SLT AT,S0,V0 -BNEZ AT,7F07B140 ;branch if multi -NOP -//7F07B188: -JAL 7F09B10C ;sets player 0 -OR A0,R0,R0 -//7F07B190: return -LW RA,002C (SP) -LW S0,0028 (SP) -ADDIU SP,SP,0088 -JR RA -NOP diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Intro Block Commands.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Intro Block Commands.txt deleted file mode 100644 index 72b7843..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Intro Block Commands.txt +++ /dev/null @@ -1,298 +0,0 @@ -3A2F4 7F0057C4 - load camera/intro type value: calls next 9 entries - 3A5AC 7F005A7C 0 spawn point - 3A620 7F005AF0 1 weapon - 3A6A8 7F005B78 2 ammo - 3A6D0 7F005BA0 3 swirling intro camera - 3A758 7F005C28 4 intro animation - 3A76C 7F005C3C 5 cuff/character - 3A780 7F005C50 6 fixed cameras - 3A844 7F005D14 7 watch time - 3A8BC 7F005D8C 8 credits - -Uses TLB entries in 21990 - -+_+ - -//7F005A38: parse intro block command list -LW V0,0000 (S0) ;V0=action/intro type -ADDIU AT,R0,0009 -LUI S2,8008 -BEQ V0,AT,7F005DF4 ;if type=9, end -LUI AT,42C8 -MTC1 AT,F22 ;F22=100.0 -LUI AT,4780 -MTC1 AT,F20 ;F20=65536.0 -ADDIU S2,S2,A0B0 ;S2=8007A0B0 -SLTIU AT,V0,0009 -//7F005A60: -BEQ AT,R0,7F005DE0 -SLL T8,V0,0x2 ;convert to pointer offset -LUI AT,8005 -ADDU AT,AT,T8 -LW T8,F1AC (AT) ;TBL entry @ 8004F1AC -JR T8 -NOP - -7F005A7C 3A5AC Type 0: spawn - 00000000 PPPPPPPP SSSSSSSS -3C0E8007 LUI T6,8007 -8DCE5D18 LW T6,5D18 (T6) ;T6=80075D18: p->0xxx presets -11C00018 BEQ T6,R0,7F005AE8 ;kill if NULL pointer -00000000 NOP -0FC30288 JAL 7F0C0A20 ;ret V0=set# -00000000 NOP -8E0F0008 LW T7,0008 (S0) ;T7=command.set# -3C0A8007 LUI T2,8007 -3C018008 LUI AT,8008 -144F0011 BNE V0,T7,7F005AE8 ;kill if sets do not match -00000000 NOP -8E080004 LW T0,0004 (S0) ;T0=command.preset# -3C028008 LUI V0,8008 -8C429C68 LW V0,9C68 (V0) ;V0=80079C68: # spawn points -00084880 SLL T1,T0,0x2 -01284823 SUBU T1,T1,T0 -8D4A5D18 LW T2,5D18 (T2) ;T2=80075D18: p->0xxx presets -00094880 SLL T1,T1,0x2 -01284823 SUBU T1,T1,T0 -00094880 SLL T1,T1,0x2 ;T1=preset * 0x28 -00026080 SLL T4,V0,0x2 ;T4=#spawns->offset -002C0821 ADDU AT,AT,T4 -012A5821 ADDU T3,T1,T2 ;T3=: p->presets + offset to selected preset -AC2B9C28 SW T3,9C28 (AT) ;T3->80079C28+offset: p->preset saved to spawn table -3C018008 LUI AT,8008 -244D0001 ADDIU T5,V0,0001 ;T5=#spawns+1 -AC2D9C68 SW T5,9C68 (AT) ;#spawns+1 -> 80079C68 -//7F005AE8: -100000BE BEQ R0,R0,7F005DE4 -2610000C ADDIU S0,S0,000C - -7F005AF0 3A620 Type 1: weapon - 00000001 RRRRRRRR LLLLLLLL SSSSSSSS -0FC30288 JAL 7F0C0A20 ;ret V0=set# -00000000 NOP -8E19000C LW T9,000C (S0) ;T9=command.set# -1459001C BNE V0,T9,7F005B70 ;kill if sets do not match -00000000 NOP -0FC015C4 JAL 7F005710 ;preload: sets weapon model for generated object -8E040004 LW A0,0004 (S0) ;A0=right weapon -8E040008 LW A0,0008 (S0) ;A0=left weapon -04800008 BLTZ A0,7F005B34 ;end if no left weapon -00000000 NOP -0FC015C4 JAL 7F005710 ;preload: sets weapon model for generated object -00000000 NOP -8E040004 LW A0,0004 (S0) ;A0=right weapon -0FC23143 JAL 7F08C50C ;add doubles (A0+A1) to inventory -8E050008 LW A1,0008 (S0) ;A1=left weapon -10000004 BEQ R0,R0,7F005B40 -8FB8007C LW T8,007C (SP) -//7F005B34: right-weapon only -0FC23122 JAL 7F08C488 ;add weapon A0 to inventory -8E040004 LW A0,0004 (S0) ;A0=right weapon -8FB8007C LW T8,007C (SP) -//7F005B40: sets default weapon drawn at start? -1700000B BNEZ T8,7F005B70 -00000000 NOP -8E0E0004 LW T6,0004 (S0) ;T6=right weapon -3C018008 LUI AT,8008 -240F0001 ADDIU T7,R0,0001 -AC2E99E0 SW T6,99E0 (AT) ;r.weapon->800799E0 -8E040008 LW A0,0008 (S0) ;A0=left weapon -AFAF007C SW T7,007C (SP) ;SP+7C=1 -3C018008 LUI AT,8008 -04800002 BLTZ A0,7F005B70 ;skip if no left weapon -00000000 NOP -AC2499E4 SW A0,99E4 (AT) ;l.weapon->800799E4 -//7F005B70: -1000009C BEQ R0,R0,7F005DE4 -26100010 ADDIU S0,S0,0010 - -7F005B78 3A6A8 Type 2: ammo - 00000002 TTTTTTTT QQQQQQQQ SSSSSSSS -0FC30288 JAL 7F0C0A20 ;ret V0=set# -00000000 NOP -8E08000C LW T0,000C (S0) ;T0=command.set# -14480004 BNE V0,T0,7F005B98 ;kill if sets don't match -00000000 NOP -8E040004 LW A0,0004 (S0) ;A0=ammo type -0FC1A44C JAL 7F069130 ;add ammo type A0, total A1 to inventory -8E050008 LW A1,0008 (S0) ;A1=ammo total -//7F005B98: -10000092 BEQ R0,R0,7F005DE4 -26100010 ADDIU S0,S0,0010 - -7F005BA0 type 3: swirling intro camera - 00000003 -------- XXXXXXXX YYYYYYYY - ZZZZZZZZ LLLLLLLL RRRRRRRR -------- -3C098003 LUI T1,8003 -8D2964AC LW T1,64AC (T1) ;T1=800364AC: p->first entry in rotating camera -02001025 OR V0,S0,R0 ;V0=S0: p->command -3C018003 LUI AT,8003 -55200003 BNEL T1,R0,7F005BD0 ;branch if valid pointer -8C4A0008 LW T2,0008 (V0) -AC3064AC SW S0,64AC (AT) ;p->command -> 800364AC: first entry in rot. camera -8C4A0008 LW T2,0008 (V0) ;T2=command+8:x offset -//7F005BD0: convert percentages into multipliers -8C4B000C LW T3,000C (V0) ;T3=command+C: y offset -8C4C0010 LW T4,0010 (V0) ;T4=command+10: z offset -448A9000 MTC1 T2,F18 -448B4000 MTC1 T3,F8 -8C4D0014 LW T5,0014 (V0) ;T5=lateral rotation -46809120 CVT.S.W F4,F18 ;F4=(float) x offset -448C9000 MTC1 T4,F18 -8C590018 LW T9,0018 (V0) ;T9=rate -26100020 ADDIU S0,S0,0020 ;S0+=20: next command -468042A0 CVT.S.W F10,F8 ;F10=(float) y offset -448D4000 MTC1 T5,F8 -46142183 DIV.S F6,F4,F20 ;F6=x offset/0x10000: percentage change -46809120 CVT.S.W F4,F18 ;F4=(float) z offset -44999000 MTC1 T9,F18 -46145403 DIV.S F16,F10,F20 ;F16=y offset/0x10000: percentage change -E4460008 SWC1 F6,0008 (V0) ;replace x offset with multiplier -468042A0 CVT.S.W F10,F8 ;F10=(float) lateral rotation -46142183 DIV.S F6,F4,F20 ;F6=z offset/0x10000: percentage change -E450000C SWC1 F16,000C (V0) ;replace y offset with multiplier -46809120 CVT.S.W F4,F18 ;F4=rate -46145403 DIV.S F16,F10,F20 ;F16=lateral rot./0x10000: percentage change -E4460010 SWC1 F6,0010 (V0) ;replace z offset with multiplier -46142183 DIV.S F6,F4,F20 ;F6=rate/0x10000: percentage change -E4500014 SWC1 F16,0014 (V0) ;replace lat.rot. with multiplier -10000070 BEQ R0,R0,7F005DE4 -E4460018 SWC1 F6,0018 (V0) ;replace rate with multiplier - - -7F005C28 type 4: use Bond default intro animation # - 00000004 ######## -LW T8,0004 (S0) //grab value following type -LUI AT,8003 -ADDIU S0,S0,0008 //advance address to next command -BEQ R0,R0,7F005DE4 -SW T8,6514 (AT) //store value to 80036514 - -7F005C3C type 5: set hand/cuff (also sets model in solo) - 00000005 ######## -LW T6,0004 (S0) //T6=value following type -LW T7,0000 (S2) //handle to character data -ADDIU S0,S0,0008 //advance address to next command -BEQ R0,R0,7F005DE4 -SW T6,041C (T7) //character/cuff-> data+41C - -7F005C50: type 6: fixed intro cameras - 00000006 XXXXXXXX YYYYYYYY ZZZZZZZZ - LLLLLLLL VVVVVVVV -------- TTTTTTTT - TTTTTTTT CCCCCCCC -0FC26C54 JAL 7F09B150 ;V0=player# -00000000 NOP -1440002C BNEZ V0,7F005CBC ;only do once -3C088003 LUI T0,8003 -8D0864B8 LW T0,64B8 (T0) ;T0=800364B8:last command in list -3C098003 LUI T1,8003 -3C018003 LUI AT,8003 -AE080024 SW T0,0024 (S0) ;command+24=p->previous command -8D2964BC LW T1,64BC (T1) ;T1=800364BC: count of entries -AC3064B8 SW S0,64B8 (AT) ;p->command -> 800364B8:last command in list -3C018003 LUI AT,8003 -252A0001 ADDIU T2,T1,0001 ;T2=count+1 -AC2A64BC SW T2,64BC (AT) ;800364BC=count++ -8E0B0004 LW T3,0004 (S0) ;T3=command+4: x offset -8E0C0008 LW T4,0008 (S0) ;T4=command+8: y offset -8E0D000C LW T5,000C (S0) ;T5=command+C: z offset -448B4000 MTC1 T3,F8 -448C9000 MTC1 T4,F18 -8E190010 LW T9,0010 (S0) ;T9=command+10: lateral rotation -468042A0 CVT.S.W F10,F8 ;F10=(float) x offset -448D4000 MTC1 T5,F8 -8E180014 LW T8,0014 (S0) ;T8=command+14: vertical rotation -9604001E LHU A0,001E (S0) ;A0=text value 1 -46809120 CVT.S.W F4,F18 ;F4=(float) y offset -44999000 MTC1 T9,F18 -46165403 DIV.S F16,F10,F22 ;F16=x offset/100: x percentage -468042A0 CVT.S.W F10,F8 ;F10=(float) z offset -44984000 MTC1 T8,F8 -46162183 DIV.S F6,F4,F22 ;F6=y offset/100: y percentage -E6100004 SWC1 F16,0004 (S0) ;replace x offset with multiplier -46809120 CVT.S.W F4,F18 ;F4=(float) lateral rotation -46165403 DIV.S F16,F10,F22 ;F16=z offset/100: z percentage -E6060008 SWC1 F6,0008 (S0) ;replace y offset with multiplier -468042A0 CVT.S.W F10,F8 ;F10=(float) vertical rotation -46142183 DIV.S F6,F4,F20 ;F6=lat.rot./0x10000: lat.rot.multiplier -E610000C SWC1 F16,000C (S0) ;replace z offset with multiplier -46145403 DIV.S F16,F10,F20 ;F16=vert.rot./0x10000: vert.rot.multiplier -E6060010 SWC1 F6,0010 (S0) ;replace lat.rot. with multiplier -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -E6100014 SWC1 F16,0014 (S0) ;replace vert.rot. with multiplier -8E030020 LW V1,0020 (S0) ;V1=command+20: text value 2 -AE02001C SW V0,001C (S0) ;replace text 1 ID w/ p->text -10600004 BEQ V1,R0,7F005CBC ;branch if text 2 not present -00000000 NOP -0FC30776 JAL 7F0C1DD8 ;V0=p->text A0 -3064FFFF ANDI A0,V1,FFFF -AE020020 SW V0,0020 (S0) ;replace text 2 ID w/ p->text -//7F005CBC: return -10000035 BEQ R0,R0,7F005DE4 -26100028 ADDIU S0,S0,0028 ;S0+=28: next command - - -7F005D14 type 7: watch time for solo watch menu - 00000007 HHHHHHHH MMMMMMMM -SW R0,0000 (S1) -LW A0,0008 (S0) ;A0=minutes -ADDIU AT,R0,003C -BLEZL A0,7F005D50 -LW V0,0004 (S0) -DIV A0,AT -MFHI T7 ;T7=minutes % 60 -SLL T0,T7,0x3 -SUBU T0,T0,T7 -SLL T0,T0,0x5 -ADDU T0,T0,T7 -SLL T0,T0,0x4 ;T0=min. * 3600: minutes->milliseconds (sort of...) -LUI AT,8008 -SW T0,9A24 (AT) ;80079A24=ms. -//7F005D50: hours -LW V0,0004 (S0) ;V0=hours -ADDIU AT,R0,000C -BLEZ V0,7F005D84 ;skip if not valid -NOP -DIV V0,AT -MFHI T3 ;T3=hours % 12 -LUI AT,0003 -ORI AT,AT,4BC0 -MULTU T3,AT -LW T2,0000 (S1) ;T2=time -LUI AT,8008 -MFLO T4 ;T4=hours * 216000: hours->milliseconds (sort of) -ADDU T5,T2,T4 ;T5=(ms)hours+time -SW T5,9A24 (AT) ;T5->80079A24 -//7F005D84: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,000C - -7F005D8C type 8: credits -LUI T9,8007 -LW T9,5D28 (T9) -LW T8,0004 (S0) -LUI AT,8003 -ADDU V0,T9,T8 -SW V0,6440 (AT) -LHU T7,0000 (V0) -BNEL T7,R0,7F005DC0 -LHU T0,000C (V0) -LHU T6,0002 (V0) -BEQ T6,R0,7F005DD8 -NOP -LHU T0,000C (V0) -//7F005DC0: -ADDIU V0,V0,000C -BNEL T0,R0,7F005DC0 -LHU T0,000C (V0) -LHU T1,0002 (V0) -BNEL T1,R0,7F005DC0 -LHU T0,000C (V0) -//7F005DD8: -BEQ R0,R0,7F005DE4 -ADDIU S0,S0,0008 - -7F005DE0 next in list! -ADDIU S0,S0,0004 -//7F005DF4: end diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/7F0790F0 - selected spawn.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/7F0790F0 - selected spawn.txt deleted file mode 100644 index af5bcfa..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/Type 0 - Spawn/7F0790F0 - selected spawn.txt +++ /dev/null @@ -1,208 +0,0 @@ -7F0790F0 ADC20 V0=selected spawn# - note: spawncap extension hack shown below! -ADDIU SP,SP,FFA0 -SW RA,0044 (SP) -SW S8,0040 (SP) -SW S7,003C (SP) -SW S6,0038 (SP) -SW S5,0034 (SP) -SW S4,0030 (SP) -SW S3,002C (SP) -SW S2,0028 (SP) -SW S1,0024 (SP) -SW S0,0020 (SP) -JAL 7F09B150 ;V0= cur.player# -SDC1 F20,0018 (SP) -JAL 7F09A464 ;V0= #players -OR S6,V0,R0 ;S6=cur.player# -LUI T6,8008 -LW T6,9C28 (T6) ;T6=80079C28: #spawns (hack) -OR S2,V0,R0 ;S2=V0: #players -ADDIU S1,R0,0001 ;S1=1 -BLEZ T6,7F07925C ;skip if invalid #spawns -OR S7,R0,R0 ;S7=0 init spawncount -//7F079144: -LUI AT,447A -LUI S8,8008 -LUI S5,8008 -LUI S4,8008 -MTC1 AT,F20 ;F20=1000.0 [447A0000] -ADDIU S4,S4,9EE0 ;S4=80079EE0: p->player BONDdata table -ADDIU S5,S5,9C2C ;S5=80079C2C: spawn pointers -ADDIU S8,S8,A0B0 ;S8=8007A0B0: cur.playerdata table -LW V0,0000 (S8) ;V0=p->cur.playerdata -//7F079168: loops to find a spawn outside 1000 of player -LUI T1,8008 -ADDIU S7,S7,0001 ;S7++ spawncount++ -LW T7,29E0 (V0) ;T7=cur.spawn index -OR S1,R0,R0 ;S1=0 good hit flag -OR S0,R0,R0 ;init S0 playercount -ADDIU T8,T7,0001 ;T8=index++ -SW T8,29E0 (V0) ;update cur.spawn index -LW T9,0000 (S8) ;T9=p->cur.playerdata -LW T1,9C28 (T1) ;T1=80079C28: #spawns -LW T0,29E0 (T9) ;T0=cur.spawn index -DIV T0,T1 -MFHI S3 ;S3 = T0 % T1 -BNE T1,R0,7F0791A4 ;branch if no division by zero -NOP -BREAK 00001C00 -//7F0791A4: check stupid division -ADDIU AT,R0,FFFF -BNE T1,AT,7F0791BC -LUI AT,8000 -BNE T0,AT,7F0791BC -NOP -BREAK 00001800 -//7F0791BC: -BLEZ S2,7F07923C ;branch if invalid #players -NOP -//7F0791C4: -BEQL S0,S6,7F079234 ;branch if playercount=cur.player# -ADDIU S0,S0,0001 -SLL T2,S0,0x2 ;T2=playercount->offset -ADDU T3,S4,T2 ;T3=BONDdata+offset -LW T4,0000 (T3) ;T4=p->player S0's BONDdata -LW V0,00A8 (T4) ;V0=BONDdata+A8: p->pos.data -BEQL V0,R0,7F079234 ;skip if invalid -ADDIU S0,S0,0001 -SLL T5,S3,0x2 ;T5=mordant->offset -ADDU T6,S5,T5 ;T6=spawns+offset -LW V1,0000 (T6) ;V1=p->spawn -LWC1 F4,0008 (V0) ;F4=pos.xpos -LWC1 F8,0010 (V0) ;F8=pos.zpos -LWC1 F6,0000 (V1) ;F6=spawn.xpos -LWC1 F10,0008 (V1) ;F10=spawn.zpos -SUB.S F0,F4,F6 ;F0=dx -SUB.S F2,F8,F10 ;F2=dz -MUL.S F16,F0,F0 ;F16=dx^2 -NOP -MUL.S F18,F2,F2 ;F18=dz^2 -JAL 7001F7E0 ;F0=sqrt(F12) -ADD.S F12,F16,F18 ;F12= dx^2 + dz^2 -C.LT.S F0,F20 -NOP -BC1FL 7F079234 ;branch if distance beyond 1000 -ADDIU S0,S0,0001 -ADDIU S1,R0,0001 ;S1=1 -//7F079230: find first best-fit spawn -ADDIU S0,S0,0001 ;S0++ playercount++ -BNE S0,S2,7F0791C4 ;loop if playercount!=#players -NOP -BEQ S1,R0,7F07925C ;finished if beyond 1000 -SW S3,004C (SP) -LUI T7,8008 -LW T7,9C28 (T7) ;T7=80079C28: #spawns -SLT AT,S7,T7 -BNEL AT,R0,7F079168 ;loop while spawncount < #spawns -LW V0,0000 (S8) -//7F079258: -SW S3,004C (SP) -LUI S4,8008 -LUI S5,8008 -LUI S8,8008 -ADDIU S8,S8,A0B0 ;S8=8007A0B0: cur.playerdata table -ADDIU S5,S5,9C2C ;S5=80079C2C: spawn pointers -ADDIU S4,S4,9EE0 ;S4=80079EE0: p->player BONDdata table -BEQ S1,R0,7F079388 ;skip if you found a good one -LW S3,004C (SP) -LUI T8,8008 -LW T8,9C28 (T8) ;T8=80079C28: #spawns -SLT AT,S7,T8 -BEQ AT,R0,7F079388 ;branch if last spawn -LUI AT,42C8 -MTC1 AT,F20 -NOP -LW V0,0000 (S8) ;V0=p->cur.playerdata -//7F07929C: -LUI T3,8008 -ADDIU S7,S7,0001 ;S7++ spawncount++ -LW T9,29E0 (V0) ;T9=cur.spawn index -OR S1,R0,R0 -OR S0,R0,R0 ;init S0 playercount -ADDIU T0,T9,0001 ;index++ -SW T0,29E0 (V0) ;update cur.spawn index -LW T1,0000 (S8) ;V0=p->cur.playerdata -LW T3,9C28 (T3) ;T3=80079C28: #spawns -LW T2,29E0 (T1) ;T2=cur.spawn index -DIV T2,T3 -MFHI S3 ;S3= cur.spawn index % #spawns: spawn# -BNE T3,R0,7F0792D8 ;check for division by zero -NOP -BREAK 00001C00 -//7F0792D8: more tests for bad division -ADDIU AT,R0,FFFF -BNE T3,AT,7F0792F0 -LUI AT,8000 -BNE T2,AT,7F0792F0 -NOP -BREAK 00001800 -//7F0792F0: test against player S0's position -BLEZ S2,7F079370 ;branch if invalid #players -NOP -//7F0792F8: test if spawn is too close to any player -BEQL S0,S6,7F079368 ;branch if S0=cur.player# -ADDIU S0,S0,0001 -SLL T4,S0,0x2 ;T4=playercount->offset -ADDU T5,S4,T4 ;T5=table+offset -LW T6,0000 (T5) ;T6=p->BONDdata for player S0 -LW V0,00A8 (T6) ;V0=BONDdata+A8: p->pos.data -BEQL V0,R0,7F079368 ;skip if NULL -ADDIU S0,S0,0001 -SLL T7,S3,0x2 ;T7=spawn#->offset -ADDU T8,S5,T7 ;T8=p->spawn -LW V1,0000 (T8) ;V1=p->spawn preset S3 -LWC1 F4,0008 (V0) ;F4=pos.xpos -LWC1 F8,0010 (V0) ;F8=pos.zpos -LWC1 F6,0000 (V1) ;F6=spawn.xpos -LWC1 F10,0008 (V1) ;F10=spawn.zpos -SUB.S F0,F4,F6 ;F0=dx -SUB.S F2,F8,F10 ;F2=dz -MUL.S F16,F0,F0 ;F16=dx^2 -NOP -MUL.S F18,F2,F2 ;F18=dz^2 -JAL 7001F7E0 ;F0=sqrt(F12) -ADD.S F12,F16,F18 ;F12=dx^2 + dz^2 -C.LT.S F0,F20 -NOP -BC1FL 7F079368 ;branch if distance b/w player and spawn >= 1000 -ADDIU S0,S0,0001 -ADDIU S1,R0,0001 ;S1=1 too close -//7F079364: loop for each player -ADDIU S0,S0,0001 ;S0++ playercount++ -BNE S0,S2,7F0792F8 ;loop if count!=#players -NOP -//7F079370: retest if any were within range -BEQ S1,R0,7F079388 ;branch if spawn okay -LUI T9,8008 -LW T9,9C28 (T9) ;T9=80079C28: #spawns -SLT AT,S7,T9 -BNEL AT,R0,7F07929C ;loop while spawncount < #spawns -LW V0,0000 (S8) -//7F079388: worst case, choose a random one -BEQL S1,R0,7F0793B8 ;branch if you found a good one -LW RA,0044 (SP) -JAL 7000A450 ;V0= random -NOP -LUI T0,8008 -LW T0,9C28 (T0) ;T0=80079C28: #spawns -DIVU V0,T0 -MFHI S3 ;S3=rand % #spawns -BNE T0,R0,7F0793B4 ;branch if division okay -NOP -BREAK 00001C00 -//7F0793B4: return -LW RA,0044 (SP) -OR V0,S3,R0 ;V0=spawn# -LW S3,002C (SP) -LDC1 F20,0018 (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -LW S4,0030 (SP) -LW S5,0034 (SP) -LW S6,0038 (SP) -LW S7,003C (SP) -LW S8,0040 (SP) -JR RA -ADDIU SP,SP,0060 diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/solo animations.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/solo animations.txt deleted file mode 100644 index 5463453..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/solo animations.txt +++ /dev/null @@ -1,34 +0,0 @@ -80036514 selected solo animation -80036518 15788-15818 animations for intro block type 4 0x10 each - -reset just prior to parsing the intro block commands: -//7F005A10: SW R0,6514 (AT) - -7F005C28: writes value set in intro block command to 80036514 register - - -//7F07ABBC: 0x use, to load the animation! -LUI T0,8003 -LW T0,6514 (T0) T0=80036514: animation register -LUI T2,8003 -LUI S0,8008 -ADDIU T2,T2,6518 T2=80036518: base address for animations -SLL T1,T0,0x4 -ADDIU S0,S0,A0B0 S0=8007A0B0 -ADDU V0,T1,T2 V0=address for chosen ani data -LW T5,0000 (S0) T5=cur. playerdata -LWC1 F0,0004 (V0) F0=val1 -LUI T4,8007 -LW T4,9538 (T4) T4=80069538: pointer to animation binaries -LW T3,0000 (V0) T3=offset to ani -LWC1 F12,0008 (V0) F12=val2 -LWC1 F2,000C (V0) F2=val3 -MTC1 R0,F10 -LW A0,00D4 (T5) A0=player's obj.instance -MFC1 A3,F0 A3=val1 -OR A2,R0,R0 A2=0 -ADDU A1,T3,T4 A1=pointer to selected ani binary -SWC1 F12,0078 (SP) save val2 -SWC1 F2,0010 (SP) save val3 -JAL 7F06FCA8 -SWC1 F10,0014 (SP) 0->SP+14 diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/use stage intro animation.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/use stage intro animation.txt deleted file mode 100644 index ce0f17a..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Intro Block/use stage intro animation.txt +++ /dev/null @@ -1,49 +0,0 @@ -//7F 0xAF6EC use of the saved solo intro animation -LUI T0,8003 -LW T0,6514 (T0) T0=selected ani. -LUI T2,8003 -LUI S0,8008 -ADDIU T2,T2,6518 T2=table of solo ani. -SLL T1,T0,0x4 T1=offset to sel. -ADDIU S0,S0,A0B0 S0=P->cur. playerdata -ADDU V0,T1,T2 V0=pointer to sel. ani. -LW T5,0000 (S0) T5=cur. playerdata -LWC1 F0,0004 (V0) -LUI T4,8007 -LW T4,9538 (T4) T4=80069538: ??? -LW T3,0000 (V0) T3=ani. -LWC1 F12,0008 (V0) -LWC1 F2,000C (V0) -MTC1 R0,F10 -LW A0,00D4 (T5) A0=player's obj.instance -MFC1 A3,F0 -OR A2,R0,R0 -ADDU A1,T3,T4 -SWC1 F12,0078 (SP) -SWC1 F2,0010 (SP) -JAL 7F06FCA8 -SWC1 F10,0014 (SP) -//0xAF74C: -LWC1 F12,0078 (SP) -MTC1 R0,F16 -NOP -C.LT.S F16,F12 -NOP -BC1FL 0xAF77C -LW T7,0000 (S0) -LW T6,0000 (S0) -MFC1 A1,F12 -JAL 7F06FDE8 -LW A0,00D4 (T6) -LW T7,0000 (S0) -//0xAF77C: -ADDIU T9,R0,0017 -LW T8,00A8 (T7) -LW V0,0004 (T8) -SB T9,0007 (V0) -SB R0,0008 (V0) -LW T0,0000 (S0) -BEQ R0,R0,0xAFCC0 -SW R0,0034 (T0) - -//0xAF79C: diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Paths/amendment to fully read path data.doc b/notes/GE Documentation/Setup File Microcodes and Paths/Paths/amendment to fully read path data.doc deleted file mode 100644 index f01ced1..0000000 Binary files a/notes/GE Documentation/Setup File Microcodes and Paths/Paths/amendment to fully read path data.doc and /dev/null differ diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Paths/path dissection.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Paths/path dissection.txt deleted file mode 100644 index 836523f..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Paths/path dissection.txt +++ /dev/null @@ -1,163 +0,0 @@ -(best viewed without wordwrap) -This is long, but it's mostly because its rather hard to explain this stuff. - ---------------------------- -provided examples: -Butchered.bin is an example of a simplified path system for Runway. -It removes both PAD offsets and all their pointers -There is only one PathLink set containing all the PathPreset values, - the PathPreset table only contains presets that are used for paths, - and the PathPreset.Offset arrays are as simple as possible. -The paths themselves are indistinguishable. - -worse.bin is an example of creating new paths. -Two new paths were created, and guards assigned to them. - The guards pace in long circuits along the length of the runway. - To make it easier to spot them, they are all female moonrakers. -One is rather close to the start, so you may want to go invisible. - -Both patches can only be used on a byteswapped ROM. -(seriously, non-byteswapped is much easier to work with...) - ---------------------------- -Path Data Explaination - -There are three tables of path data. -These are the offsets to each block of data -0x0 path preset table -0x4 path preset linkage table -0x10 path table - -these two are not used by the game and should be omitted -set these offsets to zero to avoid expansion problems -0x20 path preset table: offsets to PAD values -0x24 path preset linkage table: offsets to PAD values - -Path Preset Table -------------------------- -path preset table struct: -struct PathPreset -{long Preset; /*0xxx preset #*/ -long Offset; /*points to a series of values connecting each table entry*/ -long Link; /*entry in the linkage table that contains this path entry*/ -long Filler; /*used in game. set to 0*/ -} - -the table ends with a preset = -1 -Only 0xxx presets may be used as .Preset values. -The link value is the number of a path linkage set including this path preset(see below) -The points may be in any order and unused ones do not need to be included -(see butchered.bin or worse.bin [0x68E8] for an example) - - -The PathPresets.Offset points to an array of long values used to jump to other path presets. -They can not refer to the current PathPreset, and any presets linked together must refer to each other. -There must be a value present! Do not just set to -1 -Each list ends with an entry = -1. -for example, these three entries could be used to link three different path presets: -Table1: 00000001 00000002 FFFFFFFF -Table2: 00000000 00000002 FFFFFFFF -Table3: 00000000 00000001 FFFFFFFF - -every preset should be linked, but the links may be as simple as: -Table 1 : 00000001 FFFFFFFF -Table 2 : 00000000 00000002 FFFFFFFF -Table 3 : 00000001 00000003 FFFFFFFF -etc... -Table x-1: 00000x-2 0000000x FFFFFFFF -Table x : 00000x-1 FFFFFFFF -(see butchered.bin [0x6464] for an example) - -PathPreset.Link value is the same as the PathLinkage that includes this PathPreset -See below for more details. - - -Path Linkage Table ---------------------------- -path preset linkage struct: -struct PathLinkage -{long SetNumberOffset; /*offset to an array linking each path linkage*/ -long PresetOffset; /*offset to an array of the path presets in this set*/ -long Terminator; /*set to zero*/ -} -table ends with an entry with NULL offsets - -SetNumberOffset points to an array of long values, each corresponding to a PathLinkage -Only one set is necessary. -If there is only one set, this will point to FFFFFFFF -otherwise, it will be a table similar to this: -Table1: 00000001 FFFFFFFF -Table2: 00000000 FFFFFFFF -each array ends with -1 -(see butchered.bin [0x5C98 & 0x5DE4] for an example of only one set) - -PresetOffset points to another array of long values, indicating a PathPreset. -The corresponding PathPreset.Link value will be the same as the PathLinkage that contains it -The list ends with -1. -for instance: -PathLinkage[1] Preset offset table: -00000000 00000001 FFFFFFFF - -links to PathPreset[0] and PathPreset[1] -PathPreset[0].Link == 1 -PathPreset[1].Link == 1 - - -Path Table ---------------------- -Path tables are directly accessed by action block type 20. -The maximum number of paths is assumed to be 255. -the path struct is: -struct PathTable -{long Offset; /*address of array of path presets*/ -unsigned char ID; /*PathTable instance number*/ -unsigned char NULL1; /*unused*/ -unsigned char NULL2; /*unused*/ -unsigned char NULL3; /*unused*/ -} - -PathTable[#].ID matches #. Obviously each path must be assigned a different number and they must be sequential. - -PathTable[].Offset is the address of a long array that specifies a series of PathPresets. -Each value retrieves the PathPresets[].Preset given. -The object will move from the first given PathPresets[].Preset to the next sequentially, - so unlike the other tables PathPresets[].Preset values may be reused. -The path ends with a PathPresets[] value of -1 - -for example: -PathPreset table: (offset.. is unimportant in this example) -PathPresets[0] = 00000120 offset.. 00000000 00000000 -PathPresets[1] = 00000050 offset.. 00000000 00000000 -PathPresets[2] = 00000084 offset.. 00000000 00000000 -PathPresets[3] = FFFFFFFF 00000000 00000000 00000000 - -PathTable table: -PathTable[0] = address0 00000000 -PathTable[1] = address1 01000000 - -address0: (path0) -00000000 00000001 00000002 FFFFFFFF - -address1: (path1) -00000002 00000001 00000002 00000000 00000001 FFFFFFFF - -in this example, path0 will move an object from preset 0120, to 0050, and end at 0084 -path1 moves it from preset 0084 to 0050, back to 0084, then 0120, and finishes at 0050 -(see butchered.bin [0x6A90] for an example) - -The only really important concern is that if two paths follow the same points, - objects that spawn on those paths may not load in order to keep them from hitting one another. -Still, that's the problem of whoever wrote the path. - --------------------------- -PADs. -The PAD pointers, the offsets they link to, and the PAD values found in certain stages, are all completely useless. -The offsets are expanded during offset expansion, but they are never used. -Originally there was a failsafe planned when the above path data or an action block met invalid data. -However, the failsafe was either removed or never implemented. -In the case of invalid data a flag is set indicating an error, and if the PAD pointer is preset it is retrieved. - Even if it is not preset, the current routine breaks and jumps to the "error handling" routine. - The "error handling" routine does not handle errors but creates a vastly worse one - an infinite loop. - --------------------------- -Hope that helps read them in and spit them out. diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/Paths/path load routine.txt b/notes/GE Documentation/Setup File Microcodes and Paths/Paths/path load routine.txt deleted file mode 100644 index 54c3225..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/Paths/path load routine.txt +++ /dev/null @@ -1,645 +0,0 @@ -0x0 path preset table -0x4 path preset linkage table -0x10 paths -0x20 path preset table: offsets to PAD values (deprecated) -0x24 path preset linkage table: offsets to PAD values (deprecated) - -first hit ---------- -7F003E24: -Expand Path Preset Block- -LW A1,0000 (A3) -BEQL A1,R0,7F003E6C - LW A1,0004 (A3) -LW T2,0000 (A1) //first preset in path preset block -OR V1,R0,R0 //V1=0 -OR V0,A1,R0 //V0=path preset offset -BLTZL T2,7F003E6C //preset better be a valid one - LW A1,0004 (A3) -LW T3,0004 (V0) //T3=offset following preset (to linkage) -//7F003E48: read each preset -ADDIU V1,V1,0010 //V1+=10 -ADDU T4,T3,S1 //T4=T3(offset)+Start of Setup -SW T4,0004 (V0) //Replace offset with pointer -LW T5,0000(A3) //T5=path preset pointer -ADDU V0,T5,V1 //V0=Next Preset -LW T6,0000(V0) //T6=Preset -BGEZL T6,7F003E48 //repeat for each point until end - LW T3,0004(V0) -LW A1,0004(A3) - -//A1=80075D04 - -7F003E6C: -Expand Path Linkage Table- -BEQL A1,R0,7F003EC4 - LW A2,0014(A3) //A2=Block data pointer -LW T7,0000(A1) //T7=first linkage offset -OR V1,R0,R0 //V1=0 -OR V0,A1,R0 //V0=80075D04 -BEQL T7,R0,7F003EC4 //Keep reading until a NULL Link - LW A2,0014(A3) -LW A0,0000(A1) //A0=first linkage offset -ADDU T8,A0,S1 //T8=offset + start of setup -//7F003E90: read each link -SW T8,0000(V0) //first offset changed to pointer -LW T0,0004(A3) //T0=Path linkage pointer -ADDU V0,T0,V1 //V0=Next link -LW T1,0004(V0) //T1=second offset in linky thing -ADDIU V1,V1,000C //V1+=C (next linkage) -ADDU T9,T1,S1 //T9=offset + start of setup -SW T9,0004(V0) //second offset changed to pointer -LW T2,0004(A3) //T2=80075D04 -ADDU V0,T2,V1 //V0=next linkage -LW A0,0000(V0) //A0=next linkage offset -BNEL A0,R0,7F003E90 //Keep goingig until a NULL link - ADDU T8,A0,S1 -LW A2,0014(A3) // - -//A2=80075D14 - -7F003EC4: -Block Data Expansion- -BEQL A2,R0,7F003F08 - LW V0,0010(A3) -LW T3,0000(A2) //T3=offset to action -OR A1,R0,R0 //A1=counter -OR V0,A2,R0 //V0=Block pointer -BEQL T3,R0,7F003F08 //Kill if NULL offset - LW V0,0010(A3) -LW V1,0000(A2) //V1=offset -ADDU T4,V1,S1 //T4=offset + start of setup -SW T4,0000(V0) //replace offset with pointer -LW T5,0014(A3) //T5=80075D14 -ADDIU A1,A1,0008 //A1+=8 (next entry) -ADDU V0,T5,A1 //V0=P. Next entry -LW V1,0000(V0) //V1=offset -BNEL V1,R0,7F003EE8 //Repeat till NULL - ADDU T4,V1,S1 -LW V0,0010(A3) - -//V0=80075D10 - -7F003F08: -Path Expansion- -BEQL V0,R0,7F003F8C - LW T2,0018(A3) -LW T6,0000(V0) //T6=path offset -OR A1,R0,R0 //A1=counter -OR A2,V0,R0 //A2=V0=offset to path data -BEQL T6,R0,7F003F8C //Kill if NULL offset - LW T2,0018(A3) -LW A0,0000(V0) //A0=path offset -ADDU T7,A0,S1 //T7=offset + start of setup -//7F003F2C: repeat -SW T7,0000(A2) //replace offset with pointer -LW T8,0010(A3) //T8=80075D10 -OR V1,R0,R0 //V1=steps in path counter -ADDU A2,T8,A1 //A2=path pointer + counter -LW A0,0000(A2) //A0=pointer created from offset -LW T0,0000(A0) //T0=preset value in path -OR V0,A0,R0 //V0=A0=pointer to path -BLTZL T0,7F003F70 //if preset is bad, jump over count - SH V1,0006(A2) -LW T1,0004(V0) //T1=next preset -//7F003F54: -count presets -ADDIU V1,V1,0001 //V1++ -ADDIU V0,V0,0004 //V0=address of next preset -BGEZL T1,7F003F54 //Keep going until no more presets (FFFFFFFF) - LW T1,0004(V0) -LUI A3,8007 -ADDIU A3,A3,5D00 //A3=80075D00 (silly, since it already is...) -SH V1,0006(A2) //count of path steps stored after pointer -//7F003F70: -when preset is bad -LW T9,0010(A3) //T9=Pointer to Path data -ADDIU A1,A1,0008 //A1+=8 (next path pointer) -ADDIU A2,T9,A1 //A2=P. next path offset -LW A0,0000(A2) //A0=next path offset -BNEL A0,R0,7F003F2C //repeat until none left - T7,A0,S1 -LW T2,0018(A3) - -7F003F8C: -0xxx Preset Expansion- - -7F004004: -2xxx Preset Expansion- - -7F0040E0: -Path Preset PADs (deprecated)- -BEQL A1,R0,7F004124 //If no P.P.PADs, skip - LW A1,0024(A3) -LW T6,0000(A1) //T6=PAD offset -OR V0,R0,R0 //V0=counter -OR V1,A1,R0 //V1=A1=pointer -BEQL T6,R0,7F004124 //If NULL, skip - LW A1,0024(A3) -LW A0,0000(A1) //A0=PAD offset -ADDU T7,A0,S1 //T7=offset + start of setup -//7F004104: repeat -SW T7,0000(V1) //replace offset with pointer -LW T8,0020(A3) //T8=80075D20 -ADDIU V0,V0,0004 //V0+=4 (next offset) -ADDU V1,T8,V0 //V1=P. next offset -LW A0,0000(V1) //A0=next offset -BNEL A0,R0,7F004104 //keep doing them until NULL offset - ADDU T7,A0,S1 -LW A1,0024(A3) - -//A1=80075D24 - -7F004124: -Path Linkage PADs (deprecated)- -BEQL A1,R0,7F004164 - LW T2,0278(SP) -LW T0,0000(A1) //T0=offset -OR V0,R0,R0 //V0=counter -OR V1,A1,R0 //V1=A1=80075D24 -BEQ T0,R0,7F004160 //skip if no PADs -OR A0,T0,R0 //A0=offset -ADDU T1,A0,S1 //T1=offset + start of setup -//7F004144: repeat -SW T1,0000(V1) //replace offset with pointer -LW T9,0024(A3) //T9=80075D24 -ADDIU V0,V0,0004 //V0+=4 (next offset) -ADDU V1,T9,V0 //V1=P. next offset -LW A0,0000(V1) //A0=next offset -BNEL A0,R0,7F004144 //repeat until NULL offset - ADDU T1,A0,S1 - -//7F004160: -- -LW T2,0278(SP) -BEQ T2,R0,7F0041B0 -NOP - ------------------------ ------------------------ -second hit - - -7F0068A4: -LW S0,0000(S4) //S0=80075D00 -LW T6,0004(S4) //T6=80075D04 -SW S6,0030(SP) //803B3640=80029134 -SW RA,003C(SP) //803B364C=7F0BDE3C -SW S8,0038(SP) //803B3648=0 -SW S7,0034(SP) //803B3644=803B3780 -SW S5,002C(SP) //803B363C=8007A0B0 -SW S3,0024(SP) //803B3634=00000004 -SW S2,0020(SP) //803B3630=8007A0B0 -SW S1,001C(SP) //803B362C=800696A1 -OR S6,R0,R0 //S6=0 - -7F0068D0: -Path Preset Table ???- -BEQ S0,R0,7F0069AC -SW T6,00D8(SP) //803B36E8=Path Linkage Pointer -LW T7,0000(S0) //T7=preset in table (S0=Path Preset Pointer) -OR A3,R0,R0 //A3=0 (counter) -OR T5,S0,R0 //T5=S0=Path Preset Pointer(PPP) -BLTZL T7,7F0069B0 //Kill if at end of list - LW T6,00D8(SP) -LW V0,0004(T5) //V0=pointer following preset -//7F0068F0: -next preset entry -LW A2,0000(V0) //A2=value at pointer -OR T0,V0,R0 //T0=V0=pointer following preset -BLTZL A2,7F006998 //if nothing listed, continue - ADDIU A3,A3,0001 //A3++ -//7F006900: -next value in preset group- -BNE A2,A3,7F006920 //if not redundant with table entry, branch -SLL T9,A2,0x4 //T9=A2*0x10 (offset within table) -//else! (PADs AREN'T defunct after all!) -LW T8,0020(S4) //T8=80075D20 -ADDIU S6,R0,0001 //S6=1 -BEQL T8,R0,7F006988 //if no PADs, jump - LW A2,0004(T0) //load next value at pointer -BEQ R0,R0,7F006988 -LW A2,0004(T0) //otherwise do the EXACT SAME THING... -//7F006920: -good value -ADDU V1,T9,S0 //V1=table start + offset to ref'd entry -LW A1,0004(V1) //A1=pointer in that preset entry -OR A0,R0,R0 //A0=0 (counter for ref"d entry) -LW T6,0000(A1) //first value at ref'd pointer -BLTZL T6,7F006970 //If end of values, Branch - SLL T9,A0,0x2 //T9=A0*4 -BEQ A3,T6,7F00696C //Go if search value found -SLL V0,R0,0x2 //V0=0 (stupid command, really) -ADDIU V0,V0,0004 //V0+=4 (next entry in ref'd table) -//7F006944: -inc through ref'd table until hit found -ADDU T8,A1,V0 //T8=P. next ref"d value -LW T9,0000(T8) //T9=next ref"d value -ADDIU A0,A0,0001 //A0++ (entry #+1) -BLTZL T9,7F006970 //branch on table end - SLL T9,A0,0x2 -LW T6,0004(V1) //T6=ref'd preset's pointer entry -ADDU T7,T6,V0 //T7=P. value at ref"d pointer + offset -LW T8,0000(T7) //T8=value at ref"d pointer -BNEL A3,T8,7F006944 //if not a match, repeat - ADDIU V0,V0,0004 //V0+=4 (next ref'd value) -//7F00696C: -search value found- -SLL T9,A0,0x2 //T9=#things to hit * 4 -//7F006970: -entry not found in ref'd preset- -ADDU T6,A1,T9 //T6=P. corresponding value in ref'd -LW T7,0000(T6) //T7=corresponding value in ref'd -BEQL A3,T7,7F006988 //if both correspond, branch - LW A2,0004(T0) //A2=next value in org -ADDIU S6,R0,0001 //S6=1 -LW A2,0004(T0) //A2=next value in org -//7F006988: -skips here if tried PADs- -ADDIU T0,T0,0004 //T0+=4 (P. next value) -BGEZ A2,7F006900 //next value in group -NOP -ADDIU A3,A3,0001 //A3++ (next preset) -//7F006998: -finshed reading values at pointer in table- -SLL T8,A3,0x4 //T8=#entries *0x10 (to offset) -ADDU T5,T8,S0 //T5=P. next preset -LW T9,0000(T5) //T9=next preset -BGEZL T9,7F0068F0 //if good, repeat -LW V0,0004(T5) //V0=P. next pointer in table - - - -7F0069AC: -Path Linkage ???- -LW T6,00D8(SP) -BEQ T6,R0,7F006B04 //T6=Pointer to path linkage -NOP -LW T7,0000(T6) //T7=first path link pointer -OR S1,R0,R0 //S1=0 (counter) -OR S5,T6,R0 //S5=Pointer to path linkage -BEQ T7,R0,7F006B04 //if first path link NULL, skip -ADDIU S8,SP,00A0 //S8=SP+00A0=803B36B0 -SW T6,0048(SP) //803B3658=Pointer to path linkage -ADDIU S7,R0,000C //S7=000C -LW T8,0000(S5) //T8=first path link -//7F0869D8: -new path link -OR S3,R0,R0 //S3=0 (counter for link values) -LW V0,0000(T8) //V0=value at first path link -BLTZL V0,7F006AEC //if no values, branch - LW T6,0048(SP) //T6=Pointer to path linkage -//7F0069E8: - -BNE V0,S1,F006A08 //branch if not redundant value -NOP -//else, use the PAD values -LW T9,0024(S4) //T9=80075D24=P.L.PADs -ADDIU S6,R0,0001 //S6=1 -BEQL T9,R0,7F006AD4 //if no P.L.PAD pointer, branch - LW T9,0000(S5) -BEQ R0,R0,7F006AD4 //otherwise, do the EXACT SAME THING... -LW T9,0000(S5) //T9=first path link -//7F006A08: -when value is not redundant -MULTU V0,S7 //link# * C to get increment to next link set(reads MultLO) -LW T6,00D8(SP) //T6=803B36E8=start of path links -OR A1,R0,R0 //A1=0 -MFLO T7 //T7=result of 7F006A08 (offset to ref'd link) -ADDU S2,T7,T6 //S2=&ref'd link -LW A2,0000(S2) //A2=ref'd link's first pointer -OR A0,S2,R0 //A0=S2=ref'd link -LW T8,0000(A2) //T8=value at ref'd link"s first pointer -BLTZL T8,7F006A70 //continue if there"s something there - SLL T7,A1,0x2 -//7F006A30 -LW T9,0000(A2) //T9=value at ref'd link -SLL V0,R0,0x2 //V0=0 (weird way to do it...) -ADDU V1,A2,V0 //V1=A2=ref'd link -BEQL S1,T9,7F006A70 //branch if link found - SLL T7,A1,0x2 //T7=offset to it (counter *4) -LW T7,0004(V1) //T7=ref'd link +4 (next value) -//7F006A48: -match value and ref'd value -ADDIU A1,A1,0001 //A1++ (counter to next value) -ADDIU V0,V0,0004 //V0+=4 (inc offset) -BLTZ T7,7F006A6C //if no more values, branch -ADDIU V1,V1,0004 //V1+=4 (next value at ref'd link) -LW T6,0000(A0) //T6=ref'd link -ADDU T8,T6,V0 //T8=P. next value at ref'd link -LW T9,0000(T8) //T9=next value at ref'd link -BNEL S1,T9,7F006A48 //repeat until match found - LW T7,0004(V1) - -SLL T7,A1,0x2 //value# * 4 -//7F006A70: -ref'd link stuff done -ADDU T6,A2,T7 //T6=P. to matching ref'd value -LW T8,0000(T6) //T8=value -BEQL S1,T8,7F006A9C //branch if current link# = ref'd value - LW T7,0000(S4) -LW T9,0024(S4) //T9=P.L.PADs -ADDIU S6,R0,0001 //S6=1 -BEQL T9,R0,7F006AD4 //if no PADs, branch - LW T9,0000(S5) -BEQ R0,R0,7F006AD4 //else, do the EXACT SAME THING... -LW T9,0000(S5) //T9=Path Link - -LW T7,0000(S4) //T7=Path Preset table offset -//7F006A9C: -link value matches -OR A0,S5,R0 //A0=S5=Path Link -OR A1,S2,R0 //A1=S2=ref'd link -BEQ T7,R0,7F006AD0 //if no path presets, branch -OR A2,S8,R0 //A2=S8=SP+A0=803B36B0 -JAL 7F08F438 -ADDIU A3,SP,009C //A3=803B36AC -//7F006AB4: -LW T6,00A0(SP) //T6=path preset address -LW T8,009C(SP) //T8=path preset address -BEQL T6,R0,7F006AD0 //if NULL pointer, branch - ADDIU S6,R0,0001 -BNEL T8,R0,7F006AD4 //if not a NULL pointer, branch - LW T9,0000(S5) -ADDIU S6,R0,0001 //S6=1 -LW T9,0000(S5) //T9=S5=Path linkage -//7F006AD4: -value is dealt with or something bad happened -ADDIU S3,S3,0004 //S3+=4 (next path set) -ADDU T7,T9,S3 //T7=P. next value in first path linkage set -LW V0,0000(T7) //V0=said value -BGEZ V0,7F0069E8 //if done with set, branch -NOP -LW T6,0048(SP) //T6=current path link -//7F006AEC: -all values at link read -ADDIU S1,S1,0001 //S1++ (next path linkage) -ADDIU S5,T6,000C //S5=&next path link -SW S5,0048(SP) //803B3658=&next path link -LW T9,0000(S5) //T9=first pointer at new path link -BNEL T9,R0,7F0069D8 //if not NULL, branch - LW T8,0000(S5) //T8=first pointer at new path link - -//7F006B04: -- -BEQ S0,R0,7F006D4C //S0=Path Preset Table -LW T7,00D8(SP) //T7=Path Link Table -BEQ T7,R0,7F006D4C -NOP -LW V1,0000(T7) //V1=PLT:set1pointer1 -OR T1,R0,R0 //T1=0 (counter) -OR T3,T7,R0 //T3=T7=PLT -BEQ V1,R0,7F006BA0 //if there isn"t any set data left, jump -OR S7,S0,R0 //S7=S0=PPT(path preset table addy) -OR T5,T7,R0 //T5=T7=PLT - -//7F006B2C: -grab setpointer2 for each set -LW A0,0004(T3) //A0=set1pointer2 -OR A3,R0,R0 //A3=0 (counter) -LW V1,0000(A0) //V1=set1pointer2 value1 -BLTZ V1,7F006B80 //jump out if no more setpointer2 values -SLL T6,V1,0x4 //T6=value converted to offset in PPT - -//7F006B40 -Pull, set, and test valuepresetset# -ADDU A1,T6,S0 //A1=set1pointer2 value1preset -LW A2,0008(A1) //A2=set1pointer2 value1presetset# -BGEZ A2,7F006B60 //branch if valid -NOP -SW T1,0008(A1) //otherwise, store set number to value1presetset# -LW A0,0004(T3) //A0=set1pointer2 -BEQ R0,R0,7F006B6C -ADDU V0,A0,A3 //V0=address of current set (start + 4*set#) - -//7F006B60: if valuepresetset# valid (x >= 0) -BEQ T1,A2,7F006B6C //branch if set#==value1presetset# -ADDU V0,A0,A3 //V0=address of current set -ADDIU S6,R0,0001 //S6=1 -//7F006B6C: when you had to set valuepresetset#... -LW V1,0004(V0) //V1=set1pointer2 value++ -ADDIU A3,A3,0004 //A3+=4 (4*set#) -ADDIU V0,V0,0004 //V0+=4 (set1pointer2 value++) -BGEZL V1,7F006B40 //continue until no more values in setpointer2 - SLL T6,V1,0x4 //T6=value converted to offset in PPT -//7F006B80: -no more setpointer2 values -LW T8,000C(T5) //T8=set++pointer1 -ADDIU T5,T5,000C //T5=address set++ -OR T3,T5,R0 //T3=T5=setpointer1 -BNEZ T8,7F006B2C //continue until no more sets -ADDIU T1,T1,0001 //T1++ (set#++) -LW T3,00D8(SP) //T3=PLT -OR T1,R0,R0 //T1=0 (reset set#) -LW V1,0000(T3) //V1=set1pointer1 -//7F006BA0: -no more set data (setpointer1=0) -LW T7,0000(S7) //T7=preset1 -OR A2,S7,R0 //A2=S7=PPT -LW T5,00D8(SP) //T5=PLT -BLTZ T7,7F006BD8 //branch if no presets -ADDIU A3,R0,0001 //A3=1 -LW T6,0008(A2) //T6=presetset# -//7F006BB8: -check preset set# -ADDIU T1,T1,0001 //T1++ (preset#++) -SLL T8,T1,0x4 //T8=offset created from preset# -BGEZ T6,7F006BCC //if valid set# number, branch -ADDU A2,T8,S0 //A2=next address preset# -ADDIU S6,R0,0001 //S6=1 -//7F006BCC: -LW T9,0000(A2) //T9=next preset -BGEZL T9,7F006BB8 //continue until no more presets - LW T6,0008(A2) //T6=presetset# - -//7F006BD8 -no more presets -BEQ V1,R0,7F006D4C //exit routine if no more sets -NOP -LW A0,0004(T3) //A0=setpointer2 -OR V1,R0,R0 //V1=0 (counter) -OR T0,R0,R0 //T0=0 (counter) -LW A1,0000(A0) //A1=setpointer2 value -OR T4,R0,R0 //T4=0 (counter) -OR T1,R0,R0 //T1=0 (counter) -BLTZ A1,7F006C44 //branch if no move values in setpointer2 -OR V0,A1,R0 //V0=A1=setpointer2 value -//7F006C00: -BNEZ T1,7F006C18 //skip after first iteration -SLL T8,V0,0x4 //T8=setpointer2 value -> offset in PPT -SLL T7,V0,0x4 //T7=setpointer2 value -> offset in PPT -ADDU T6,T7,S0 //T6=address of setpointer2 valuepreset -BEQ R0,R0,7F006C20 -SW A3,000C(T6) //valuepresettag=1 (A3 always=1? starts at that...) -//7F006C18: -ADDU T9,T8,S0 //T9=&setpointer valuepreset -SW R0,000C(T9) //valuepresettag=0 -//7F006C20: -next value at setpointer2 -LW A0,0004(T3) //A0=setpointer2 value -ADDIU T1,T1,0004 //T1+=4 (4*value#++) -ADDU T7,A0,T1 //T7=&setpointer2 value++ -LW V0,0000(T7) //V0=setpointer2 value++ -BGEZ V0,7F006C00 //continue until out of values -NOP -LW A1,0000(A0) //A1=setpointer2 value -OR V1,R0,R0 //V1=0 -OR V0,A1,R0 //V0=A1=setpointer2 value -//7F006C44: -no more values -BLTZ V0,7F006CC8 //branch if there are no values in set -OR T1,R0,R0 //T1=0 -SLL T6,V0,0x4 //T6=offset in PPT -//7F006C50: -pull setpointer2value -ADDU A2,T6,S0 //A2=&setpointer2 valuepreset -LW T8,000C(A2) //T8=setpointer2value presettag -ADDIU T1,T1,0004 //T1+=4 (4*count++) -BNEL A3,T8,7F006CB0 //branch if the valuepresettag!=1 - ADDU T8,A0,T1 //T8=&next setpointer2 value -LW A1,0004(A2) //A1=setpointer2value presetpointer -OR V1,R0,R0 //V1=0 -LW V0,0000(A1) //V0=setpointer2value presetpointervalue -BLTZ V0,7F006CAC //branch if there are no values -SLL T9,V0,0x4 //T9=presetpointervalue -> offset -//7F006C78: -loop for each presetpointervalue -ADDU A0,T9,S0 //A0=&presetpointervalue preset -LW T7,000C(A0) //T7=presetpointervalue presettag -ADDIU V1,V1,0004 //V1+=4 (4*presetpointervalue#++) -BEQL A3,T7,7F006C9C //branch if tag==1 - ADDU T6,A1,V1 //T6=&next presetpointervalue -SW A3,000C(A0) //presetpointervalue presettag == 1 -LW A1,0004(A2) //A1=setpointer2value presetpointer -OR T0,A3,R0 //T0=A3=1 -ADDU T6,A1,V1 //T6=&next presetpointervalue -//7F006C9C: -presetpointervalue presettag == 1 -LW V0,0000(T6) //V0=next presetpointervalue -BGEZL V0,7F006C78 //continue until no more presetpointervalue - SLL T9,V0,0x4 //T9=presetpointervalue -> offset -LW A0,0004(T3) //A0=setpointer2 -//7F006CAC: -no presetpointervalues -ADDU T8,A0,T1 //T8=&next setpointer2value -//7F006CB0: -valuepresettag = 0 -LW V0,0000(T8) //V0=next setpointer2value -BGEZL V0,7F006C50 //continue until no more setpointer2value - SLL T6,V0,0x4 //T6=value -> offset -LW A1,0000(A0) //A1=setpointer2value -OR V1,R0,R0 //V1=0 (counter) -OR V0,A1,R0 //V0=A1=setpointer2value -//7F006CC8: -no values at setpointer2 -BLTZ V0,7F006CFC //branch if no more setpointer2value -SLL T9,V0,0x4 //T9=value -> offset - -//7F006CD0: -setpointer2value checks each ref'd preset for tag being set -ADDU T7,T9,S0 //T7=&setpointer2value preset -LW T6,000C(T7) //T6=setpointer2value presettag -ADDIU V1,V1,0001 //count++ -SLL T8,V1,0x2 //T8=4*count++ -BEQ A3,T6,7F006CF0 //if tag==1, branch -ADDU T9,A0,T8 //T9=&next setpointer2value -BEQ R0,R0,7F006CFC -OR T4,A3,R0 //T4=A3=1 -//7F006CF0: -tag==1 -LW V0,0000(T9) //V0=setpointer2 value -BGEZL V0,7F006CD0 //continue for each setpointer2 value - SLL T9,V0,0x4 //T9=value -> offset -//7F006CFC: -no more setpointer2value -BEQ T0,R0,7F006D0C //branch if T0 not set in above loop -OR V1,R0,R0 //V1=0 -BNEZ T4,7F006D2C //if T4 set to A3(1) above, then branch -OR V0,A1,R0 //V0=A1 -//7F006D0C - -BEQL T4,R0,7F006D3C //if T4=0 - LW T6,000C(T5) //T6=&next set -//7F006D14 -try and use PLT TBL pointers -LW T7,0024(S4) //T7=80075D24=PLT TBL pointers -ADDIU S6,R0,0001 //S6=1 -BEQL T7,R0,7F006D3C //if no PLT TBL, branch - LW T6,000C(T5) //T6=&next set -BEQ R0,R0,7F006D3C //otherwise, do the EXACT same thing -LW T6,000C(T5) - -//7F006D2C: -OR T0,R0,R0 //T0=0 -BEQ R0,R0,7F006C44 -OR T4,R0,R0 //T4=0 - -//7F006D38: -LW T6,000C(T5) //T6=&next set -//7F006D3C: -next set -ADDIU T5,T5,000C //T5=&next set -OR T3,T5,R0 //T3=T5=&next set -BNEL T6,R0,7F006BE4 //continue if no more sets - LW A0,0004(T3) //A0=setpointer2 - - -//-My favorite routine of all! -//7F006D4C: -check for any errors that may have been flagged- -BEQ S6,R0,7F006D5C //S6=1 if error occured somewhere -LW S0,0018(SP) -BEQ R0,R0,7F006D54 //WTF?!? an infinite loop? -and they do this in case an error occured? -NOP - -//7F006D5C -reset to original values- -LW RA,003C(SP) -LW S1,001C(SP) -LW S2,0020(SP) -LW S3,0024(SP) -LW S4,0028(SP) -LW S5,002C(SP) -LW S6,0030(SP) -LW S7,0034(SP) -LW S8,0038(SP) -JR RA -ADDIU SP,SP,00E0 - ----------------- -7F08F438: -Path link+Path preset routine -ADDIU SP,SP,FFF8 //SP-8=803B3608 -SW S0,0004(SP) //803B360C=Path preset table -SW A2,0010(SP) //803B3618=803B36B0 -SW A3,0014(SP) //803B361C=803B36AC -LW T0,0004(A0) //T0=second path link -LUI T2,8007 -ADDIU T2,T2,5D00 //T2=80075D00 -LW T1,0000(T0) //T1=value at second path link -OR S0,A1,R0 //S0=A1=ref'd link -LW V0,0000(T2) //V0=path table -BLTZ T1,7F08F4D4 //if at end of table, skip -LW V1,0004(T2) //V1=path linkage -ADDIU T2,R0,000C //T2=000C -SLL T6,T1,0x4 //T6=T1*0x10 (to offset) -//7F08F470: -next value in second path link table -ADDU A0,T6,V0 //A0=path preset ref'd -LW A1,0004(A0) //pointer at ref'd preset -LW A2,0000(A1) //A2=value at ref'd preset pointer -BLTZ A2,7F08F4C4 //if there isn"t one, skip -SLL T7,A2,0x4 //T7=value*0x10 (to offset) -//7F08F484: -next path link value -ADDU A3,T7,V0 //A3=pointer of preset ref'd by value at first one -LW T8,0008(A3) //T8=ref'd preset value +8 (set number) -MULTU T8,T2 //set number*C -MFLO T9 //T9=result -ADDU T3,T9,V1 //T3=set in path linkage ref'd -BNEL S0,T3,7F08F4B8 //if not same set, branch - LW A2,0004(A1) -LW T4,0010(SP) //T4=803B36B0 -SW A0,0000(T4) //803B36B0=Path preset -LW T5,0014(SP) //T5=803B36B4 -BEQ R0,R0,7F08F4E4 //quit this mess -SW A3,0000(T5) //803B36B4=path preset ref'd by first path preset - -LW A2,0004(A1) //A2=next value in path preset list -//7F08F4B8: -set is different -ADDIU A1,A1,0004 //A1+=4 (next value in path preset value list) -BGEZL A2,7F08F484 //branch if no more values in path preset list - SLL T7,A2,0x4 -//7F08F4C4: -no value @ preset pointer -LW T1,0004(T0) //T1=next value in second path link pointer -ADDIU T0,T0,0004 //T0+=4 (next value) -BGEZL T1,7F08F470 //if more, branch - SLL T6,T1,0x4 -//7F08F4D4: -done with second pointer's table -LW T6,0014(SP) // -SW R0,0000(T6) // -LW T7,0010(SP) // -SW R0,0000(T7) // -//7F08F4E4: - -LW S0,0004(SP) //S0=path presets -JR RA -ADDIU SP,SP,0008 //SP=803B3608 - - ----------------------------- -3RD reference: call and do something with &path @ 80075D10 (PATHS) -PATHS: -pointer ## 00 step - - - -//7F035434: -parse paths- -LUI A1,8007 -LW A1,5D10(A1) //A1=PATHS -OR V1,R0,R0 //V1=0 (pathcount) -LW T6,0000(A1) //T6=pathpointer -OR V0,A1,R0 //V0=PATHS -BEQL T6,R0,7F03547C //return if a NULL pathpointer - OR V0,R0,R0 //V0=0 -LBU T7,0004(V0) //T7=path# -//7F035454 - -BNE A0,T7,7F035464 //branch if path# !=called number -SLL T8,V1,0x3 //T8=8*pathcount -JR RA //7F0362C0 -ADDU V0,T8,A1 //V0=&target pathpointer -//7F035464 -load next path -LW T9,0008(V0) //T9=next pathpointer -ADDIU V1,V1,0001 //V1++ -ADDIU V0,V0,0008 //V0+=8 -BNEL T9,R0,7F035454 //branch if this pathpointer not NULL - LBU T7,0004(V0) //T7=path# -LBU T7,0004(V0) //T7=path# -OR V0,R0,R0 //V0=0 -//7F03547C -return -JR RA -NOP diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/generate guards.txt b/notes/GE Documentation/Setup File Microcodes and Paths/generate guards.txt deleted file mode 100644 index de3c782..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/generate guards.txt +++ /dev/null @@ -1,193 +0,0 @@ -7F01FFC0 -LUI A0,8003 -LW A0,CC68 (A0) 8002CC68: total guards in table -OR V1,R0,R0 -OR V0,R0,R0 -BLEZ A0,7F020010 -LUI A1,8003 -SLL A2,A0,0x4 -SUBU A2,A2,A0 -SLL A2,A2,0x3 -SUBU A2,A2,A0 -SLL A2,A2,0x2 A2=total * 0x1DC -LW A1,CC64 (A1) 8002CC64: GUARD POINTER -//7F01FFF0: -LW T6,001C (A1) T6=model data pointer -ADDIU V0,V0,01DC V0=offset within guard data table -SLT AT,V0,A2 -BNEZ T6,7F020008 -NOP -ADDIU V1,V1,0001 -//7F020008: -BNEZ AT,7F01FFF0 -ADDIU A1,A1,01DC -//7F020010: -JR RA -OR V0,V1,R0 - --------------- -7F032F94 evaluate 2328 preset and return stored preset -ADDIU AT,R0,2328 -BNE A1,AT,7F032FA4 branch if preset not 2328 -NOP -LH A1,0114 (A0) A1=cur 2328 preset [A0=GUARDDATA pointer] -//7F032FA4: -JR RA -OR V0,A1,R0 V0=preset - -7F032FA0 evaluate guard # preset types - -------------- -7F03415C save guard data into table entry -ADDIU SP,SP,FFC0 -SW RA,001C (SP) -SW A0,0040 (SP) BODY -SW A1,0044 (SP) HEAD -SW A2,0048 (SP) PRESET POINTER -JAL 7F01FFC0 -SW A3,004C (SP) TILE POINTER -SLTI AT,V0,0003 -BNEZ AT,7F034244 -LW V1,0048 (SP) V1=PRESET POINTER -LW T6,0044 (SP) T6=HEAD -BGEZL T6,7F0341A4 -LWC1 F4,0000 (V1) -JAL 7F0235AC returns V0=random head -LW A0,0040 (SP) A0=BODY -LW V1,0048 (SP) V1=PRESET POINTER -SW V0,0044 (SP) save new head -LWC1 F4,0000 (V1) F4=x pos -//7F0341A4: -LW A3,0058 (SP) -LW T7,004C (SP) -SWC1 F4,0030 (SP) -LWC1 F6,0004 (V1) F6=y pos -ANDI T8,A3,0010 -SLTU A3,R0,T8 -SWC1 F6,0034 (SP) -LWC1 F8,0008 (V1) F8=z pos -ADDIU A0,SP,0030 -ADDIU A1,SP,0028 -LW A2,0050 (SP) -SW T7,0028 (SP) -JAL 7F033F48 -SWC1 F8,0038 (SP) -BEQ V0,R0,7F034244 -LW A0,0040 (SP) -LW A1,0044 (SP) -JAL 7F0234D0 -LW A2,0058 (SP) -BEQ V0,R0,7F034244 -OR A0,V0,R0 -LW T0,0054 (SP) -ADDIU A1,SP,0030 -LW A2,0050 (SP) -LW A3,0028 (SP) -JAL 7F0203B8 -SW T0,0010 (SP) -BEQ V0,R0,7F034244 -OR A0,V0,R0 -JAL 7F03A4F0 -SW V0,003C (SP) -JAL 7F03A404 -LW A0,003C (SP) -//7F034228: -LW V0,003C (SP) -LW T1,0044 (SP) -LW V1,0004 (V0) -SB T1,0006 (V1) -LW T2,0040 (SP) -BEQ R0,R0,7F034248 -SB T2,000F (V1) -//7F034244: RETURN -OR V0,R0,R0 -LW RA,001C (SP) -ADDIU SP,SP,0040 -JR RA -NOP - - -------------- -7F034258 nitty gritty of the BD command - creates guard from data -ADDIU SP,SP,FFD0 -SW RA,0024 (SP) -SW A1,0034 (SP) BODY -SW A2,0038 (SP) HEAD -JAL 7F032F94 returns V0=final preset -OR A1,A3,R0 PRESET -SLTI AT,V0,2710 -BEQ AT,R0,7F0342A0 branch if 2710 preset -SLL T8,V0,0x4 T8=preset * 0x10 -SLL T6,V0,0x2 -SUBU T6,T6,V0 -SLL T6,T6,0x2 -LUI T7,8007 -LW T7,5D18 (T7) 0xxx preset table address -SUBU T6,T6,V0 -SLL T6,T6,0x2 T6=preset * 0x2C -BEQ R0,R0,7F0342C0 -ADDU A2,T6,T7 A2=pointer to preset -//7F0342A0: 2710 presets! -LUI T9,8007 -LW T9,5D1C (T9) 2xxx preset table address -ADDU T8,T8,V0 -SLL T8,T8,0x2 T8=preset * 0x44 -LUI AT,FFF5 -ORI AT,AT,9FC0 AT=FFF59FC0 (-2710*44) -ADDU A2,T8,T9 A2=pointer to preset -ADDU A2,A2,AT A2=pointer converted for offset value -//7F0342C0: -LWC1 F12,0018 (A2) x rotation -LWC1 F14,0020 (A2) z rotation -JAL 7F05AA30 7F05AA30-7F05AB64 ehh... does stuff with preset -SW A2,002C (SP) -LW A2,002C (SP) A2=pointer to preset -LW T0,0040 (SP) T0=pointer to {action block?} -LW T1,0044 (SP) -LW A3,0028 (SP) A3=tile pointer -SWC1 F0,0010 (SP) -LW A0,0034 (SP) A0=BODY -LW A1,0038 (SP) A1=HEAD -SW T0,0014 (SP) -JAL 7F03415C -SW T1,0018 (SP) -LW RA,0024 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - -++++++++++++++ -7F034308 nitty gritty of BE - creates guard -ADDIU SP,SP,FFD0 -SW RA,0024 (SP) -SW A1,0034 (SP) -SW A2,0038 (SP) -JAL 7F033040 -OR A1,A3,R0 -LW T6,0014 (V0) -ANDI T7,T6,0008 -BNEL T7,R0,7F034378 -OR V0,R0,R0 -LW A0,001C (V0) -JAL 7F06CC80 -SW V0,002C (SP) -LW V1,002C (SP) -LW T8,0040 (SP) -LW T9,0044 (SP) -LW V0,0018 (V1) -LW A0,0034 (SP) -LW A1,0038 (SP) -LW A3,0014 (V0) -SWC1 F0,0010 (SP) -SW T8,0014 (SP) -SW T9,0018 (SP) -JAL 7F03415C -ADDIU A2,V0,0008 -BEQ R0,R0,7F03437C -LW RA,0024 (SP) -OR V0,R0,R0 -LW RA,0024 (SP) -//7F03437C: -ADDIU SP,SP,0030 -JR RA -NOP diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/7F057104 - return watch text for briefing A0.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/7F057104 - return watch text for briefing A0.txt deleted file mode 100644 index 3e9ee1a..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/7F057104 - return watch text for briefing A0.txt +++ /dev/null @@ -1,69 +0,0 @@ -Uses watch briefing entry pointer at 80075D84. -This points to the type 23 entry in the setup file. -Reads text from first matching entry. - -23 watch menu objective text -00000023 0000000x 0000tttt rrrrrrrr -x menu option to fill -t text to display -r RESERVED for pointer to next entry at runtime - -menu options: -0 title of stage -1 Overview -2 M briefing -3 Q briefing -4 Moneypenny - -+_+ - -7F057104 8BC34 V0=p->text for watch briefing page A0 - accepts: A0=page# -LUI V0,8007 -LW V0,5D84 (V0) ;V0=80075D84: p->briefing data -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -OR A1,A0,R0 ;A1=A0: page# -BEQ V0,R0,7F057160 ;quit if a NULL pointer -OR V1,R0,R0 ;V1=0 -//7F057120: pull text on matching entry -LW T6,0004 (V0) ;T6=V0+4: entry page# -BNEL A1,T6,7F057148 ;read next entry if doesn't match -LW V0,000C (V0) -LHU A0,000A (V0) ;A0=V0+A: text ID -JAL 7F0C1DD8 ;V0=p->text A0 -SW A1,0018 (SP) -LW A1,0018 (SP) -BEQ R0,R0,7F057160 -OR V1,V0,R0 ;V1=V0: p->text -//7F057144: loop through entries -LW V0,000C (V0) ;V0=V0+C: p->next entry -BNEL V0,R0,7F057124 ;loop until end of list -LW T6,0004 (V0) -//7F057160: catch bad objective returns: default title line -BNEL V1,R0,7F0571A8 ;return if a valid text string -LW RA,0014 (SP) -BNEZ A1,7F057180 ;branch if not 0 -ADDIU AT,R0,0001 -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,B029 ;A0=B029: "E R R O R\n" -BEQ R0,R0,7F0571A4 -OR V1,V0,R0 ;V1=V0: p->text -//7F057180: default overview text -BNE A1,AT,7F057198 ;branch if not 1 -NOP -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,B02A ;A0=B02A: "no briefing for this mission\n" -BEQ R0,R0,7F0571A4 -OR V1,V0,R0 ;V1=V0: p->text -//7F057198: default display is a newline -JAL 7F0C1DD8 ;V0=p->text A0 -ORI A0,R0,B02B ;A0=B02B: "\n" -OR V1,V0,R0 ;V1=V0: p->text -//7F0571A4 return -LW RA,0014 (SP) -ADDIU SP,SP,0018 -OR V0,V1,R0 ;V0=V1: p->text to display or NULL -JR RA -NOP - diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/7F057238 - return objective status.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/7F057238 - return objective status.txt deleted file mode 100644 index 701ed67..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/7F057238 - return objective status.txt +++ /dev/null @@ -1,182 +0,0 @@ -7F057238 8BD68 V0= status of objective A0 - accepts: A0=objective# -ADDIU SP,SP,FFD0 -SW S3,0024 (SP) -SLTI AT,A0,000A ;TRUE if objective# < 10 -SW RA,002C (SP) -SW S4,0028 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -BEQ AT,R0,7F057484 ;return if unacceptable objective# -ADDIU S3,R0,0001 ;S3=1 complete by default -SLL V0,A0,0x2 ;V0=objective * 4 -LUI A0,8007 -ADDU A0,A0,V0 -LW A0,5D30 (A0) ;A0=80075D30+offset: objective pointers -BNEL A0,R0,7F05728C ;branch if not a NULL pointer -LBU V1,0003 (A0) -//7F057278: handle an unloaded stage... -LUI S3,8007 -ADDU S3,S3,V0 -BEQ R0,R0,7F057484 -LW S3,5D58 (S3) ;S3=80075D58+offset: completion status saved from solo -//7F057288: parse objective microcode -LBU V1,0003 (A0) ;V1=objective type -ADDIU AT,R0,0018 -OR S2,A0,R0 ;S2=A0: p->objective command -BEQ V1,AT,7F057484 ;return if type 18: end -ADDIU S4,R0,0001 ;S4=1 default status: complete -ADDIU T6,V1,FFE9 ;T6=type-17: occlude obj.types 0-16 -//7F0572A0: loop through objective commands to determine status -SLTIU AT,T6,000C ;TRUE if 17-22 -BEQ AT,R0,7F057438 ;return if not an objective type -OR S1,S4,R0 ;S1=S4: status -SLL T6,T6,0x2 ;T6=type->offset -LUI AT,8005 -ADDU AT,AT,T6 -LW T6,3654 (AT) ;T6=80053654+offset: p->objective type handler -JR T6 -NOP -//7F0572C4: type19 destroy object -JAL 7F0570C0 ;V0=p->tagged obj.A0's data -LW A0,0004 (S2) ;A0=objective+4: tagged obj.# -BEQ V0,R0,7F057438 ;ignore if NULL pointer -OR A0,V0,R0 ;A0=V0: p->obj.data -LW T7,0010 (V0) ;T7=obj.data+10: p->obj.pos.data -BEQ T7,R0,7F057438 ;ignore if NULL pointer -NOP -JAL 7F04EF34 ;V0= TRUE if object not destroyed -NOP -BEQ V0,R0,7F057438 ;don't change status if object destroyed -NOP -BEQ R0,R0,7F057438 -OR S1,R0,R0 ;S1=0 status: incomplete -//7F0572F8: type1A complete if TRUE -OR A0,R0,R0 ;A0=0 -JAL 7F033338 ;V0=TRUE if any of objective flags A1 set -LW A1,0004 (S2) ;A1=objective+4: flags -BNEZ V0,7F057438 ;don't change status if something set -NOP -BEQ R0,R0,7F057438 -OR S1,R0,R0 ;S1=0 status: incomplete -//7F057314: type1B failed if TRUE -OR A0,R0,R0 ;A0=0 -JAL 7F033338 ;V0=TRUE if any of objective flags A1 set -LW A1,0004 (S2) ;A1=objective+4: flags -BEQ V0,R0,7F057438 ;don't change status if -NOP -BEQ R0,R0,7F057438 -ADDIU S1,R0,0002 ;S1=2 status: failed -//7F057330: type1C collect object -JAL 7F0570C0 ;V0=p->tagged obj.A0's data -LW A0,0004 (S2) ;A0=objective+4: tagged obj.# -BEQ V0,R0,7F05735C ;ignore if NULL pointer -OR S0,V0,R0 ;S0=V0: p->obj.data -LW T8,0010 (V0) ;T8=obj.data+10: p->obj.pos.data -BEQ T8,R0,7F05735C ;ignore if NULL pointer -NOP -JAL 7F04EF34 ;V0= TRUE if object not destroyed -OR A0,V0,R0 ;A0=V0: p->obj.data -BNEZ V0,7F057364 ;branch if not destroyed -NOP -BEQ R0,R0,7F057438 ;fail if destroyed -ADDIU S1,R0,0002 ;S1=2: mission failed -//7F057364: -JAL 7F08CFE0 ;V0= TRUE if item A0 in cur.player inventory -LW A0,0010 (S0) ;A0=obj.data+10: p->obj.pos.data -BNEZ V0,7F057438 ;don't change status if collected -NOP -BEQ R0,R0,7F057438 -OR S1,R0,R0 ;S1=0 status: incomplete -//7F05737C: type1D deposit object -JAL 7F0570C0 ;V0=p->tagged obj.A0's data -LW A0,0004 (S2) ;A0=objective+4: tagged obj.# -BEQ V0,R0,7F057438 ;ignore if NULL pointer -NOP -LW T9,0010 (V0) ;T9=obj.data+10: p->obj.pos.data -BEQ T9,R0,7F057438 ;ignore if NULL pointer -NOP -JAL 7F08CFE0 ;V0= TRUE if item A0 in cur.player inventory -OR A0,T9,R0 ;A0=T9: p->obj.pos.data -BEQ V0,R0,7F057438 ;don't change status if deposited -NOP -BEQ R0,R0,7F057438 -OR S1,R0,R0 ;S1=0 status: incomplete -//7F0573B0: type1E photograph object -JAL 7F0570C0 ;V0=p->tagged obj.A0's data -LW A0,0004 (S2) ;A0=objective+4: tagged obj.# -LW T0,0008 (S2) ;T0=objective+8: nonzero when photographed -OR A0,V0,R0 ;A0=V0: p->obj.data -BNEZ T0,7F057438 ;ignore if NULL pointer -NOP -BEQ V0,R0,7F0573EC ;fail if NULL obj.data pointer -NOP -LW T1,0010 (V0) ;T1=obj.data+10: p->obj.pos.data -BEQ T1,R0,7F0573EC ;fail if NULL obj.pos.data pointer -NOP -JAL 7F04EF34 ;V0= TRUE if object not destroyed -NOP -BNEZ V0,7F0573F4 ;incomplete if object not destroyed -NOP -//7F0573EC: fail when object doesn't exist to photograph -BEQ R0,R0,7F057438 -ADDIU S1,R0,0002 ;S1=2 status: failed -//7F0573F4: return incomplete -BEQ R0,R0,7F057438 -OR S1,R0,R0 ;S1=0 status: incomplete -//7F0573FC: type20 enter room -LW T2,0008 (S2) ;T0=objective+8: nonzero when entered -BNEZ T2,7F057438 ;don't change status when entered -NOP -BEQ R0,R0,7F057438 -OR S1,R0,R0 ;S1=0 status: incomplete -//7F057410: type21 deposit object in room -LW T3,000C (S2) ;T0=objective+C: nonzero when completed -BNEZ T3,7F057438 ;don't change status when complete -NOP -BEQ R0,R0,7F057438 -OR S1,R0,R0 ;S1=0 status: incomplete -//7F057424: type22 use key analyzer on object -JAL 7F066EF8 ;V0= cur.player's key analyzer flag -NOP -BNEZ V0,7F057438 ;don't change status if flag set -NOP -OR S1,R0,R0 ;S1=0 status: incomplete -//7F057438: default: set status if not complete -BNE S3,S4,7F057450 ;branch if saved status not complete -NOP -BEQ S1,S4,7F057464 ;branch if cur.status: complete -NOP -BEQ R0,R0,7F057464 -OR S3,S1,R0 ;S3=S1: save status if failed or incomplete -//7F057450: set incomplete over failed -BNEZ S3,7F057464 ;branch if saved status not incomplete -ADDIU AT,R0,0002 -BNE S1,AT,7F057464 ;branch if cur.status not failed -NOP -OR S3,S1,R0 ;S3=S1: replace failed with incomplete -//7F057464: advance to next objective and loop -JAL 7F0568F4 ;V0= size in words of setup object types -OR A0,S2,R0 ;A0=S2: p->objective -SLL T4,V0,0x2 :T4=#words*4: offset -ADDU S2,T4,S2 ;S2+=offset: p->next objective -LBU V1,0003 (S2) ;V1=objective type -ADDIU AT,R0,0018 -BNEL V1,AT,7F0572A0 ;loop if not type 18: end -ADDIU T6,V1,FFE9 -//7F057484: test if forcing all objectives complete... -JAL 7F091030 ;V0= objectives debugger flag -NOP -BEQ V0,R0,7F057498 ;branch if not set -LW S0,0018 (SP) -ADDIU S3,R0,0001 ;S3=completed if debug flag set -//7F057498: return -LW RA,002C (SP) -OR V0,S3,R0 ;V0=S3: objective status -LW S3,0024 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/Initialize objective types.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/Initialize objective types.txt deleted file mode 100644 index af9dd91..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/Initialize objective types.txt +++ /dev/null @@ -1,43 +0,0 @@ -7F004FA0 set setup briefing text entry A0's parent (A0+C) and store as final entry [80075D84]; fries V0,T6 - accepts: A0=p->setup briefing entry (setup type 23) -LUI V0,8007 -ADDIU V0,V0,5D84 -LW T6,0000 (V0) -SW T6,0008 (A0) -JR RA -SW A0,0000 (V0) - -7F004FB8 add pointer to objective A0 in 80075D30 table -LW T6,0004 (A0) -LUI AT,8007 -LUI V1,8003 -SLL T7,T6,0x2 -ADDU AT,AT,T7 -SW A0,5D30 (AT) -ADDIU V1,V1,22F0 -LW T8,0000 (V1) -LW V0,0004 (A0) -SLT AT,T8,V0 -BEQ AT,R0,7F004FEC -NOP -SW V0,0000 (V1) -JR RA -NOP - -7F004FF4 set A0's parent (A0+C) and set as current "enter room" subobjective entry [80075D88]; fries: V0,T6 - accepts: A0=p->setup type 20 entry -LUI V0,8007 -ADDIU V0,V0,5D88 -LW T6,0000 (V0) -SW T6,000C (A0) -JR RA -SW A0,0000 (V0) - -7F00500C set A0's parent (A0+10) and set as current "object depositted in room" subobjective [80075D8C]; fries: V0,T6 - accepts: A0=p->setup type 21 entry -LUI V0,8007 -ADDIU V0,V0,5D8C -LW T6,0000 (V0) -SW T6,0010 (A0) -JR RA -SW A0,0000 (V0) diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/objective types.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/objective types.txt deleted file mode 100644 index 2c00f23..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objectives and briefings/objective types.txt +++ /dev/null @@ -1,73 +0,0 @@ -general objective format -______________ -create mission objective -00000017 000000ii 0000TTTT 0000000* - -00000017 start objective -000000.. objective number. just an ordered list, probably doesn't even use it -0000TTTT text to display. usually from stage text, but could be any loaded text bank -0000000* minimum difficulty: 0=agent, 1=secret agent, 2=00 agent, 3-007 -______________ -end objective -...00000018 - -end objective -______________ -destroy object -00000019 xxxxxxxx - -xxxx value of corresponding tagged object to be destroyed (tagged with 16 object type) -______________ -complete if return true -0000001A xxxxxxxx - -objective is completed if value given is equal to return from block data type 9A -______________ -failed if return true -0000001B xxxxxxxx - -objective is failed if value given is equal to return from block data type 9A - -______________ -collect object -0000001C xxxxxxxx - -xxxx value of corresponding tagged object to be collected (tagged with 16 object type) -______________ -deposit object (no target) -0000001D xxxxxxxx - -xxxx value of corresponding tagged object to be deposited (tagged with 16 object type) -______________ -photograph object -0000001E xxxxxxxx 00000000 00000000 - -xxxx value of corresponding tagged object to be photographed (tagged with 16 object type) - second value must be set to zero; used at runtime to determine if completed - third value used at runtime - -______________ -invalid type -0000001F - - -______________ -enter room -00000020 0000xxxx 00000000 00000000 - -xxxx preset within target room - second value must be set to zero; used at runtime to determine if completed - third value used at runtime -______________ -deposit object in room -00000021 000000xx 000000yy 00000000 00000000 - -xx weapon index number of object to be thrown -yy preset within target room - third value must be set to zero; used at runtime to determine if completed - fourth value used at runtime -______________ -copy item -00000022 - -use key analyzer on following objective \ No newline at end of file diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objects/2710 presets.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objects/2710 presets.txt deleted file mode 100644 index 847a6e8..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objects/2710 presets.txt +++ /dev/null @@ -1,32 +0,0 @@ -Dimensions - only 27 type (door) presets! -These are broken up in the format -X min, X max -Y min, Ymax -Z min, Z max -Functionally though it's more complex than that. Because doors use a different rotation -than everything else, the actual dimensions you change are more on the line of: -Doors -minimum thickness maximum thickness -minimum width maximum width -minimum height maximum height -Glass, boxes, crates, etc -minimum width maximum width -minimum thickness maximum thickness -minimum height maximum height - -Not only that, but this relates to the space the object fills, not the size of the actual -object. If you change the scale of the object, for example, the door will look smaller, but -the space the door moves in will be the same size. - -So, how you read these is kinda weird. It's all based off an invisible center point - the -preset location - and these values are added and subtracted from the xyz values! That's -why if almost every single one has a positive and identical negative value, though they don't -really *have* to be... - -Also, because this is added to the preset value, you can have an object *hover* in midair or -seem as thin as a plate! What you can do is resize a bookshelf so instead of being -crate-sized it stretches wide and tall. Tables, bookshelves, alarms, and even the -Moonraker shuttle all use these for distorts. - -What you can't do is twist an object or bend angles in it. These are very simple xyz -additions, nothing more. diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objects/7F04054C - initialize standard object.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objects/7F04054C - initialize standard object.txt deleted file mode 100644 index 35c15e1..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objects/7F04054C - initialize standard object.txt +++ /dev/null @@ -1,120 +0,0 @@ -7F04054C 7507C initialize standard object - accepts: A0=p->object, A1=p->obj header, A2=p->obj.position data or NULL, A3=p->obj.instance controller or NULL -ADDIU SP,SP,FFE0 -SW S1,0018 (SP) -SW S0,0014 (SP) -OR S0,A0,R0 ;S0=A0: p->obj -OR S1,A2,R0 ;S1=A2: p->obj.posdata -BNE A2,R0,7F040580 ;branch if you already have posdata -SW RA,001C (SP) -//7F040568: generate posdata for object -SW A1,0024 (SP) -JAL 7F03A430 ;remove last obj.pos.data entry -SW A3,002C (SP) -LW A1,0024 (SP) -LW A3,002C (SP) -OR S1,V0,R0 ;S1=V0: p->final entry -//7F040580: -BNE A3,R0,7F0405B4 ;skip if you already have an instance controller -NOP -LBU T6,0003 (S0) ;T6=obj.type -ADDIU AT,R0,0028 -BNE T6,AT,7F0405A8 ;branch if not aircraft, handled specially -NOP -JAL 7F06C23C ;V0=obj.instance controller for aircraft A0 -OR A0,A1,R0 ;A0=A1: p->obj.header -BEQ R0,R0,7F0405B4 -OR A3,V0,R0 -//7F0405A8: generates all other object instance controller types -JAL 7F06C094 ;V0=obj.instance controller for nonaircraft A0 -OR A0,A1,R0 ;A0=A1: p->obj.header -OR A3,V0,R0 -//7F0405B4: initialize the object -BEQ S1,R0,7F04069C ;skip if NULL obj.posdata -NOP -BEQ A3,R0,7F04069C ;skip if NULL obj instance controller -NOP -LW T7,0008 (S0) ;T7=obj.flags.u -SW A3,0014 (S0) ;A3->obj+14: obj.objinst -SW R0,0068 (S0) ;NULL->obj.coldata -ANDI T8,T7,0100 -BEQ T8,R0,7F0405F8 ;skip if collisions not set (obj.flags.u & 100) -//7F0405D8: allocate collision data -ADDIU A0,R0,0050 ;A0= 50 bytes -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -LBU T9,0002 (S0) -SW V0,0068 (S0) ;V0->obj+68: save p->obj.coldata -ORI T0,T9,0008 -BEQ R0,R0,7F040604 -SB T0,0002 (S0) ;obj.state|=8 -//7F0405F8: otherwise, remove the collision present flag -LBU T1,0002 (S0) -ANDI T2,T1,FFF7 -SB T2,0002 (S0) ;obj.state &= (~8) -//7F040604: -MTC1 R0,F0 -LW T4,0014 (S0) ;T4 =obj.inst -SW S1,0010 (S0) ;S1->obj.posdata -SW R0,006C (S0) ;0 ->obj+6C: -SB R0,0078 (S0) -SB R0,0079 (S0) -SB R0,007A (S0) -SB R0,007B (S0) -SB R0,007C (S0) -SB R0,007D (S0) -SB R0,007E (S0) -SB R0,007F (S0) ;0->obj+78 through 7F -ADDIU T3,R0,FFFF -SWC1 F0,0070 (S0) ;0.0->obj+70 -SH T3,0000 (T4) ;-1 -> obj.inst+0 -LW T5,0014 (S0) -LUI A1,8004 -SW R0,0004 (T5) ;0->obj.inst+4 -LH T6,0004 (S0) ;T6=S0+4: objID -LW A0,0014 (S0) ;A0=obj.inst -SLL T7,T6,0x2 -SUBU T7,T7,T6 -SLL T7,T7,0x2 -ADDU A1,A1,T7 -JAL 7F06CE78 ;set scale A1 to obj.inst(A0)+14 -LW A1,A230 (A1) ;A1=8003A228+8+offset: (float) scale -MTC1 R0,F0 -ADDIU T8,R0,0001 -SB T8,0000 (S1) ;1->obj.posdata+0: posdata.type = normal -SW S0,0004 (S1) ;posdata+4 = p->obj -SWC1 F0,0008 (S1) ;0.0->posdata.xpos -SWC1 F0,0058 (S0) ;0.0->obj.xpos -SWC1 F0,000C (S1) ;0.0->posdata.ypos -SWC1 F0,005C (S0) ;0.0->obj.ypos -SWC1 F0,0010 (S1) ;0.0->posdata.zpos -SWC1 F0,0060 (S0) ;0.0->obj.zpos -BEQ R0,R0,7F0406E0 ;return -SW R0,0014 (S1) ;NULL->posdata.tile -//7F04069C: -BEQ A3,R0,7F0406CC ;skip if NULL obj.inst -NOP -LBU T9,0003 (S0) ;T9=obj.type -ADDIU AT,R0,0028 -BNE T9,AT,7F0406C4 ;branch if not an aircraft -NOP -JAL 7F06C3F8 ;set aircraft obj.inst scale to 0.0 -OR A0,A3,R0 -BEQ R0,R0,7F0406CC -NOP -//7F0406C4: -JAL 7F06C234 ;set obj.inst scale to 0.0 -OR A0,A3,R0 -//7F0406CC: -BEQL S1,R0,7F0406E4 ;return if NULL obj.posdata -LW RA,001C (SP) -JAL 7F03A484 ;set A0 as p->last obj.posdata -OR A0,S1,R0 ;A0=S1: obj.posdata -OR S1,R0,R0 ;S1=NULL -//7F0406E0: return -LW RA,001C (SP) -OR V0,S1,R0 ;V0=S1: p->obj.posdata -LW S1,0018 (SP) -LW S0,0014 (SP) -JR RA -ADDIU SP,SP,0020 diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objects/doors.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objects/doors.txt deleted file mode 100644 index d296db9..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objects/doors.txt +++ /dev/null @@ -1,86 +0,0 @@ -01 doors - -features differ from std type 03 - -00: 01 00 00 01 00 9E 00 3F 10 00 00 00 08 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 00 00 00 F3 33 00 00 F0 C4 00 00 00 51 -90: 00 00 00 51 00 00 02 22 00 04 00 00 00 00 00 01 -A0: 00 00 02 58 00 00 00 04 00 00 00 00 00 00 00 00 -B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - -00: scale (2 bytes) -02: state -03: type (01 door) -04: object value (2 bytes) -06: preset value (2 bytes) -08: 1000xxxx open by default - 0100xxxx area behind door is always visible (no blackouts for gates, lab doors, etc) - 0010xxxx open backwards - 0001xxxx same as 0 as far as I can tell - xxxx1000 always open away from the player regardless what side you're on - xxxx0100 - xxxx0010 player can't activate door (spawn block or 16 type activation) - xxxx0001 - -78: runtime - -79: runtime - -7A: runtime - -7B: runtime - -7C: runtime - -7D: runtime - -7E: runtime - -7F: runtime - -80: linked with other doors (4 bytes) - if used, uses # objects up/down to other door. - when this object activates, targetted object also activates - you usually want both doors to point at each other, obviously -84: distance door travels when opening/closing (total%) -88: distance before door loses collisions (total%) -00150000 -> 41a80000 -8C: open/close accelleration rate -90: rate used when someone activates a door as it opens/closes -0100 -> 3B800000 -94: open/close max speed -1999 -> 3DCCC800 - -note: *speed sets the speed the door opens at. - the two rate features affect how long it takes to reach this max speed. - -98: open technique (2+2 bytes) - 0000 0000 slider (left/right) clears the door away as it slides, stopping visual problems when opening into a wall - 0004 0000 slider (left/right) - 0000 0004 shutter (up/down) clears the door as it slides - 0004 0004 shutter (up/down) - 0000 0005 special (swinging) defined here - 0000 0006 special (eye) defined here in block - 0000 0007 special (iris) defined here - -9F: nonzero to lock -A0: amount of ms door remains open -A7: opening sound effect -A8: runtime - (float) -AC: runtime - (float) -B0: runtime - (float) -B4: runtime - (float) current distance travelled -B8: runtime - (float) -BC: runtime - -BD: runtime - - -C8: runtime - -CC: runtime - p->vertex buffer when door does not clear - -F0: runtime - -F4: runtime - -F8: runtime - - diff --git a/notes/GE Documentation/Setup File Microcodes and Paths/objects/object block types.txt b/notes/GE Documentation/Setup File Microcodes and Paths/objects/object block types.txt deleted file mode 100644 index 41ebc8d..0000000 --- a/notes/GE Documentation/Setup File Microcodes and Paths/objects/object block types.txt +++ /dev/null @@ -1,1167 +0,0 @@ -01 doors - -see seperate list ----------------- -02 global door scale modifier - -format: -00000002 xxxxxxxx - -x converted to float and divided by 65536 (0x10000) -value is stored to 8002A3C0. -The value is used for door calculations. Changing it will shrink/enlarge doors. -Why they ever made it is beyond me. - ----------------- -03 standard object -almost all objects can be set to this type - -example: -00: 01 00 00 03 00 60 27 33 00 00 01 E1 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 - -SSSS 0003 oooo pxxx mm ii *f rr 00 00 ii 00 -00: two bytes. scale as a hex percent. ie: 03.80 is 3 1/2 -02: current state. RESERVED for runtime. kinda stupid setting it, but here's some settings - 8x destroyed - 4x datathief/defuser/decoder used on obj (activated?) - 2x - 1x - x8 external allocated collision block present - x4 respawn enabled - x2 - x1 damaged -03: type -04: object ID -06: preset ID. 0000+ or 2710+ to use standard presets. - FFFF, FFFE...FFxx to set this object inside the previous object. (solo only) - if control nibble 4x is set at 0xB, then this number matches the ID of a guard -08: binary flags: - 8x indicates right-handed gun assignment - 4x 08 weapon does not provide ammunition when collected - 2x indicates object in motion or special function is activated - 1x indicates left-handed normal pickup or opposite alignment - 0x indicates no control features set - x8 - x4 (unknown) Jungle bushes - x2 (unknown) pete grenade - x1 indicates embedded crate or other object, creating a chain of boxes, for example - x0 indicates normal preset, or beginning/end of chain - -09: flags: - 8x - 4x immobile - 2x (unknown) Silo DAT tape - 1x uncollectable - x8 - x4 allows object pickup (chr_name objects only) - x2 invincibility - x1 -0A: binary flags: - 8x indicates contained within another object (forward or back # objects = preset value) - 4x indicates object does not use normal presets but is assigned to guard #preset - 2x (unknown) part of forced collectable objects - 1x think this sets object to absolute position. (similar to 2xxx type) - x8 something to do with free-standing glass (glass walls) - x4 (unknown) streets buildings/roadblocks - x2 seems to align image to preset values for glass - x1 force collisions (2xxx presets, mostly) - -0B: binary flags: -0xxx presets: - 00 default, on ground - x1 forced to ground - x2 room upper limit, rotated y 90 degrees. top faces direction, front faces up - x4 room upper limit, upside-down - x8 room upper limit, right side up -2xxx presets: - x1 normal placement - x2 rotated y 90 degrees. top faces direction, front faces up. (use on obj 68-6B) - x4 upside-down - x8 in-air - 1x scale object to fit completely within preset bounds - 2x x set to preset bounds - 4x y set to preset bounds - 8x z set to preset bounds - -0C: 8x force maximum explosion radius/disable detecting player - 4x autoturrets: reset to default, not preset position - 2x no AI interaction - 1x 1-way lock (back) - x8 1-way lock (front) - x4 - x2 Objects (rockets, mines, etc) do not collide with object - x1 don't load 4 player -0D: 8x don't load 3 player - 4x don't load 2 player - 2x immune to explosions (only gunfire damages object) - 1x bulletproof - x8 invisible! can't shoot, but can hit with rockets, bugs, etc. not counted as a hit - x4 - x2 (unknown) streets buildings - x1 -0E: 8x Can fire through object - 4x immune to gunfire (Only explosives damage object) - 2x Remove from game when destroyed (anything on top doesn't fall off! Just Poof! gone) - 1x - x8 only activate at close range - x4 - x2 explode on contact with tank? - x1 (unknown) jungle bush -0F: 8x don't load on 007 - 4x don't load on 00 agent - 2x don't load on secret agent - 1x don't load on agent - x8 don't load multiplayer (difficulty = -1) - x4 disable activation text - x2 lightweight (previous: 2xxx drops to ground when destroyed) - x1 used on stuff in egyptian, sevx - -10: runtime - p->object position data (8006) -14: runtime - p->object instance controller -18: runtime - matrix - -58: (float) runtime x position -5C: (float) runtime y position -60: (float) runtime z position -64: runtime bitflags; during gameplay, filled with bitflags when activated, etc. - 10000000 - 00060000 owner (0-3); used to attribute kills to players - 00004000 activated - 00000200 only set with disabled or destroyed doors - 00000080 depositted (thrown) - 00000004 removes object when set -68: p->allocated collision data block or NULL -6C: -70: (float) -74: 2 bytes. amount of health. multiple of 00E4 (approx 1 gunshot). glassware is 000A -78: -79: -7A: -7B: -7C: -7D: -7E: -7F: - -examples of usage: -invincible crate: -00: 01 00 00 03 00 57 00 10 00 02 01 E1 00 00 00 00 ... -crate resistant to all but explosives: -00: 01 00 00 03 00 57 00 10 00 00 01 E1 00 00 40 00 ... - -dropped by a guard when killed -00: 01 00 00 03 00 57 00 10 00 00 40 00 00 00 00 00 ... -inside previous object -00: 01 00 00 03 00 57 FF FF 00 00 80 00 00 00 00 00 ... - -several objects dropped by parent object (only first 0x10 are given) -#1 01 00 00 03 00 52 00 2C 00 00 01 01 00 00 00 00 ... parent -#2 00 99 00 03 00 57 FF FF 00 00 80 01 00 00 00 00 ... object 1 dropped by parent -#3 00 99 00 03 00 57 FF FE 00 00 80 01 00 00 00 00 ... object 2 dropped by parent -#4 00 99 00 03 00 57 FF FD 00 00 80 01 00 00 00 00 ... object 3 dropped by parent - - -embedded chain of objects, f/ caverns (only first 0x10 are given): -all are linked forward, not backward -#1 01 00 00 08 00 BC 00 02 10 00 80 00 00 00 00 00 ... within monitor 1 (#3) -#2 01 00 00 08 00 BC 00 02 00 00 80 00 00 00 00 00 ... within monitor 2 (#4) -#3 01 00 00 0A 00 4B 00 02 11 00 80 01 00 00 00 00 ... monitor 1, within box 1 (#5) -#4 01 00 00 0A 00 4B 00 01 11 00 80 01 00 00 00 00 ... monitor 2, within box 1 (#5) -#5 00 66 00 03 00 52 00 01 01 00 80 01 00 00 00 00 ... box 1, within box 2 (#6) -#6 00 99 00 03 00 52 00 01 01 00 80 01 00 00 00 00 ... box 2, within box 3 (#7) -#7 00 CC 00 03 00 52 00 01 01 00 80 01 00 00 00 00 ... box 3, within box 4 (#8) -#8 01 00 00 03 00 52 00 9B 00 00 01 01 00 00 00 00 ... box 4 - -padlocking a door: -lock 01 00 00 03 00 3F 27 5B 01 00 00 08 00 00 00 02 ... -handle1 00 00 00 26 FF FF FF FE FF FF FF FF 00 00 00 00 -handle2 00 00 00 26 FF FF FF FC FF FF FF FE 00 00 00 00 -then doors... - -DAT pickup -02 00 00 03 01 10 00 3C 01 24 40 00 00 00 00 00 ... -+ pickup type rename -00000025 FFFFFFFF 00000049 ... - -key holder (bunker2) -00: 01 00 00 03 01 26 27 5B 00 00 10 E8 00 00 01 00 - - -note: first 0x80 is standard for most types - any object can be assigned to be dropped by a guard. ----------------- -04 key -keys, floppy disks, etc. - -0x80 std, + key - -example -00: 01 00 00 04 00 56 00 39 00 00 40 00 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 06 - -80: lock bit values. Door locks are masked with these values in order to open them. - -note: always followed traditionally by a type 25-rename block. - ----------------- -05 alarm -00-01, most other objects will also work -sounds an alarm when activated - -0x80 std - -01 00 00 05 00 01 27 56 00 00 00 02 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 - ----------------- -06 surveillance camera -0018 only -(autoguns can be exchanged for these, but they probably won't look right) - -0x80 std + some funny stuff - -00: 01 00 00 06 00 18 27 38 00 00 00 02 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 57 00 00 00 00 00 00 00 00 00 00 00 00 -90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 15 55 -D0: FF FF EA AB 00 00 00 00 00 00 00 00 00 00 00 F2 -E0: 00 00 00 00 00 00 00 00 FF FF FF 9C - -0x82 2byte preset used to *center* camera. This is the default middle position. all rotation data is applied to this angle. - *note: below seem like typical rotation values. user might have ot fiddle with it a bit... -0xCC 2byte how far camera can rotate upward. positive value (N/A) -0xCE 2byte how far camera can rotate left from preset. positive value. -0xD0 2byte how far camera can rotate downward. negative value. (N/A) -0xD2 2byte how far right it can rotate. negative value. - -0xDE 2byte speed. how fast the camera turns - -0xE8 2byte detection arc up/down from current position -0xEA 2byte detection arc left/right from current position -This sets up the line of sight. When bond is in the detection arc for five seconds, it triggers the alarm. Set this high enough and the camera can look in teh opposite direction but still see you. -FFFF,FF9C are the default values - -note: for free rotation left/right, set both to 0000 -note: vertical rotation should be set to default. Camera can't move this way. - defaults should be 0000xxxxFFFFxxxx - - ----------------- -07 ammo clip -0079-0086 specifically, though most objects will work - -0x80 std -then 000000## which is type of ammo on pickup -adds default amount of ammo of given type number -can add ammo of any type, not just the first 13 - -example: -00: 01 00 00 07 00 7E FF FF 00 00 80 00 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 01 - -80: type of ammo on pickup. Adds default pickup ammount for that type - (same as amount of ammo on gun pickup) -note: this type is almost exclusively found inside other objects - ----------------- -08 weapon pickup -weapon objects specifically, or really most objects - -all 08 types are invincible - -0x80 contains some added tags -then ??FFFFFF 00000000 -?? is replaced with inventory pickup value, or F# for multiplayer value. -next byte is also replaced if a linked weapon - -normal example: -00: 02 00 00 08 01 4D 00 2A 00 00 00 01 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 58 FF FF FF 00 00 00 00 - - -80: item type -81: linked item type -82: timer -84: p->linked item or NULL - -inventory addition on pickup: -80: 58 FF FF FF 00 00 00 00 -multi example: -80: ...F0 FF FF FF 00 00 00 00 -weapons are F0 - F7, for the 8 weaopns in each weapon set - -linked guard weapons: (xenia in jungle) -note: 0x8 settings 80+90 are used to designate right (80) and left (90) handed weapons that are EQUIPPED -right -00: 01 00 00 08 00 C5 00 00 80 00 40 00 00 00 00 00 ... -80: ...0E FF FF FF 00 00 00 00 -left -00: 01 00 00 08 00 B9 00 00 90 00 40 00 00 00 00 00 ... -80: ...18 FF FF FF 00 00 00 00 - -linked pickups within a crate -note: 0x8 settings 00+10 are used to designate right (00) and left (10) handed weapon PICKUPS only -left -00: 01 00 00 08 00 BC 00 02 10 00 80 00 00 00 00 00 ... -80: ...0D FF FF FF 00 00 00 00 -right -00: 01 00 00 08 00 BC 00 02 00 00 80 00 00 00 00 00 ... -80: ...0D FF FF FF 00 00 00 00 - -82: 2 bytes timer for thrown explosives - ---------------- -09 guards -use head/body values - -example: -00000009 0000 0000 0004 0002 FFFFFFFF 03E8 0064 0000 FFFF 00000000 -path example: -00000009 0017 006E 0025 0401 FFFFFFFF 02EE 0032 0000 FFFF 00000000 - -format: -00000009 iiii 0xxx bbbb aaaa pppp ???? llll rrrr ???? hhhh -------- -i ID number -0xxx 0xxx preset to be spawned at -b body -a action/path assignment -p preset of an object to trigger or other preset value (default FFFF) set to 0x114. !!Functions that use the preset 2328 are loading this value!! -? unknown (default FFFF) -l life (health). 1 bullet ~E4 -r reaction time -? unknown (default FFFF) -h head. random=FFFF -- reserved; replaced with pointer to guard data at runtime - ---------------- -0A single monitor display -use the value of a object with a viewing pane (consoles, etc) -4D is specifically dedicated as a stand-alone viewscreen - -0x80 std -then, fill to 0xF0 -00000000 FFFFFFFF FFFFFFFF 000000## -## is animation sequence. - -00: 01 00 00 0A 00 4B 00 02 11 00 80 01 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -F0: 00 00 00 00 FF FF FF FF FF FF FF FF 00 00 00 10 - -0x80 4 [runtime] p->animation routine -0x84 2 [runtime] cur. #commands from start of routine -0x86 2 [runtime] loop counter -0x88 4 [runtime] monitor image# or p->image header -0x8C 4 [runtime] [float] rotation -0x90 4 [runtime] [float] cur. horizontal zoom -0x94 4 [runtime] [float] cur. h.zoom time -0x98 4 [runtime] [float] final h.zoom time -0x9C 4 [runtime] [float] initial h.zoom -0xA0 4 [runtime] [float] final h.zoom -0xA4 4 [runtime] [float] cur. vertical zoom -0xA8 4 [runtime] [float] cur. v.zoom time -0xAC 4 [runtime] [float] final v.zoom time -0xB0 4 [runtime] [float] initial v.zoom -0xB4 4 [runtime] [float] final v.zoom -0xB8 4 [runtime] [float] cur. horizontal position -0xBC 4 [runtime] [float] cur. h.scroll time -0xC0 4 [runtime] [float] final h.scroll time -0xC4 4 [runtime] [float] initial h.pos. -0xC8 4 [runtime] [float] final h.pos. -0xCC 4 [runtime] [float] cur. vertical position -0xD0 4 [runtime] [float] cur. v.scroll time -0xD4 4 [runtime] [float] final v.scroll time -0xD8 4 [runtime] [float] initial v.pos. -0xDC 4 [runtime] [float] final v.pos. -0xE0 1 [runtime] cur. Red -0xE1 1 [runtime] initial R -0xE2 1 [runtime] final R -0xE3 1 [runtime] cur. Green -0xE4 1 [runtime] initial G -0xE5 1 [runtime] final G -0xE6 1 [runtime] cur. Blue -0xE7 1 [runtime] initial B -0xE8 1 [runtime] final B -0xE9 1 [runtime] cur. Alpha -0xEA 1 [runtime] initial A -0xEB 1 [runtime] final A -0xEC 4 [runtime] [float] cur. colour transition time -0xF0 4 [runtime] [float] final colour transition time -0xF4 4 backward monitor link -0xF8 4 forward monitor link -0xFC 4 animation# - - -if set to hanging rack: -preset remains at FFFF for all attached monitors -0xF4 is decremented 1 for each subsequent monitor (like you would normally to preset) -F8 is changed from FFFFFFFF to long value for that monitor. ie. 00000000, 00000001, etc. -***see type 0C for example of proper notation - ---------------- -0B multiple-screen displays -use an object with multiple viewing panes (ie. double consoles) -4E is dedicated as a stand-alone multi-viewscreen - -0x80 std -last line... 10141414 -four values, each one a different possible screen -can display up to four unique screens -first is primary, others are overlayed - -00: 01 00 00 0B 00 4E 27 3C 60 00 00 62 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -1A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -1B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -1C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -1D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -1E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -1F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -250: 10 14 14 14 - ---------------- -0C hanging monitor rack -4C !only! -must be followed by set number of 0A types, per example - -0x80 std except 0x0B sets number of monitors to hang on rack - -example: -01 00 00 0C 00 4C 00 33 00 00 00 04 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 - -must be followed by number of 0A-type presets set at 0xB -example of 0A subobjects, first and last lines only given -00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ... -F0: 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 xx - -00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ... -F0: 00 00 00 00 FF FF FF FE 00 00 00 01 00 00 00 xx - -00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ... -F0: 00 00 00 00 FF FF FF FD 00 00 00 02 00 00 00 xx - -00: 01 33 00 0A 00 4B FF FF 10 00 00 00 00 00 00 00 ... -F0: 00 00 00 00 FF FF FF FC 00 00 00 03 00 00 00 xx - ---------------- -0D autoguns -autogun models only -(0062,0124,012B only) - -0x80 std + extra info - -00: 01 00 00 0D 00 62 00 27 00 00 00 04 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 71 00 00 00 00 00 02 00 00 FF FE 00 00 -90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -A0: 00 00 00 00 00 00 00 DA 00 0A 00 00 00 00 00 00 -B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -D0: 00 00 00 00 00 00 00 00 - -bitflags: -0x8 20 detect and rotate toward player; typically set automatically -0xC 80 disables detecting player - 40 ??? - -0x82 2byte preset used to *center* gun. aims at this when it doesn't aim at you. - *note: below seem like typical rotation values. user might have to fiddle with it a bit... -0x88 2byte how far gun can rotate upward. positive value -0x8A 2byte how far the gun can rotate left from preset. positive value. -0x8C 2byte how far the gun can rotate downward. negative value. -0x8E 2byte how far right it can rotate. negative value. - -0xA6 2byte speed. how fast the turret turns -0xA8 2byte distance before deactivating. same as clipping/model distances - -note: for free rotation left/right, set both to 0000 -note: vertical rotation must be set or any non-ground autogun can't find Bond - defaults should be 0000xxxxFFFFxxxx or 0002xxxxFFFExxxx. it doesn't really matter much - -last note: this data is also shared by cameras. They expand on this basic stuff. - ---------------- -0E Link Pickups -any chr_name pickup - -format: -0000000E xxxxxxxx yyyyyyyy -x # objects to weapon pickup 1 -y # objects to weapon pickup 2 - -example: -00 00 00 0E FF FF FF FE FF FF FF FC - -might be possible to double weapons with this... -just to remove weird glitchiness of pickups in hard-to-reach areas - ---------------- -0F ??? - -unknown - -format: -0000000F - ---------------- -10 ??? - -unknown - -format: -00000010 - ---------------- -11 hat -D4-DF specific, possibly other objects as well - -0x80 std. always assigned to a guard! - -example: -00: 01 00 00 11 00 D8 00 0B 00 00 40 00 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 - -note: 0x6 is always the id of the guard wearing the hat. - 0xA is always 40, indicating the hat is equipped. - ---------------- -12 Set Guard Attribute -Allows you to set special attributes to guards, such as "civilian" or capable of shooting guards - -00000012 xxxxxxxx 000000yy -x guard ID# -y attribute to set - -known attributes: -07 -3F civilian (scientist) - ---------------- -13 switch -links player interaction between objects -interact with controlling object to open/close controlled door, for example - -00000013 xxxxxxxx yyyyyyyy 00000000 -x # objects to controlling object -y # objects to controlled object - -examples: - 01 00 00 0B 01 50 27 66 00 02 01 02 00 00 08 00 -00 00 00 13 FF FF FF FF FF FF FF FD 00 00 00 00 - 01 00 00 0B 01 50 27 67 00 02 01 02 00 00 08 00 -00 00 00 13 FF FF FF FF FF FF FF FB 00 00 00 00 - 01 00 00 0B 01 50 27 68 00 02 01 02 00 00 08 00 -00 00 00 13 FF FF FF FF FF FF FF FA 00 00 00 00 - 01 00 00 0B 01 50 27 69 00 02 01 02 00 00 08 00 -00 00 00 13 FF FF FF FF FF FF FF F8 00 00 00 00 - -used to link to these two doors: -01 00 00 01 00 B2 00 13 40 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 F3 33 00 01 00 00 00 00 00 10 -00 00 00 10 00 00 00 CC 00 0C 00 00 00 00 00 80 -00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - -01 00 00 01 00 B3 00 15 40 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 C0 00 00 00 C0 00 00 00 00 51 -00 00 00 51 00 00 02 22 00 00 00 04 00 00 00 00 -00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ---------------- -14 ammo box -0003-0007 specifically, although other objects will work - -normal 0x80 -then 13 sets of FFFF ####, where # specifies amount of ammo - -example: -00: 00 99 00 14 00 05 00 31 00 00 00 01 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: FF FF 00 01 FF FF 00 02 FF FF 00 03 FF FF 00 04 -90: FF FF 00 05 FF FF 00 06 FF FF 00 07 FF FF 00 08 -A0: FF FF 00 09 FF FF 00 0A FF FF 00 0B FF FF 00 0C -B0: FF FF 00 0D - -ammo types are: -1 9mm Ammo -2 (beta) also 9mm Ammo -3 Rifle Ammo -4 Shotgun Cartridges -5 Hand Grenades -6 Rockets -7 Remote Mines -8 Proximity Mines -9 Timed Mines -A Throwing Knives -B Grenade Launcher Rounds -C Magnum Rounds -D Golden Bullets - -note: in multiplayer, ammo amounts and types are set based on last defined weapon. -set all amounts to zero on multiplayer (unless doing something really crazy...) - ---------------- -15 body armour -0072 & 0073 specifically, although most objects will work - -normal 0x80, -then AAAA.aaaa 00000000 -A.a is a hex percent, like 00028000, which is 2 1/2 times normal BA - -example: -00: 01 80 00 15 00 73 00 00 00 00 00 01 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 01 00 00 00 00 00 00 - ---------------- -16 tag object -target object can be manipulated or read via this tag. - -00000016 xxxx#### 00000000 00000000 - -xxxx ID number used for this block. -#### number of objects forward (0001, 0002, etc) or backward (FFFF, FFFE, etc) to target block - -______________ -17 create mission objective -00000017 000000ii 0000TTTT 0000000* - -00000017 start objective -000000.. objective number. just an ordered list, probably doesn't even use it -0000TTTT text to display. usually from stage text, but could be any loaded text bank -0000000* minimum difficulty: 0=agent, 1=secret agent, 2=007 agent -______________ -18 end objective -...00000018 - -end objective -______________ -19 destroy object -00000019 0000xxxx - -xxxx value of corresponding 000000016 preset preceeding object to be destroyed -______________ -1A complete if return true -0000001A xxxxxxxx - -objective is completed if value given is equal to return from block data type 9A -______________ -1B failed if return true -0000001B xxxxxxxx - -objective is failed if value given is equal to return from block data type 9A - -______________ -1C collect object -0000001C 0000xxxx - -xxxx value of corresponding 000000016 preset preceeding object to be collected -______________ -1D deposit object (no target) -0000001D 0000xxxx - -xxxx value of corresponding 00000016 preset preceeding object to be deposited -______________ -1E photograph object -0000001E 0000xxxx 00000000 00000000 - -xxxx value of corresponding 00000016 preset preceeding object to photograph -______________ -1F NULL -0000001F -______________ -20 enter room -00000020 0000xxxx 00000000 00000000 - -xxxx preset within target room -______________ -21 deposit object in room -00000021 000000xx 000000yy 00000000 00000000 - -xx weapon index number of object to be thrown -yy preset within target room -______________ -22 copy item (modifier) -00000022 ... - -use key analyzer on following objective -______________ -23 watch menu objective text -00000023 0000000x 0000tttt 00000000 -x menu option to fill -t text to display - -menu options: -0 title of stage -1 overview -2 M briefing -3 Q briefing -4 Moneypenny - ---------------- -24 gas-releasing object -when destroyed, the stage fills with toxic gas - -same as std 03 type. - ---------------- -25 rename function -renames inventory object - -example: -00: 00 00 00 25 FF FF FF FF 00 00 00 51 00 00 0C 3A -10: 00 00 0C 3B 00 00 0C 3C 00 00 0C 3D 00 00 0C 3E -20: 00 00 00 00 00 00 00 00 - -04: target objects forward/back. if zero, affects all instances of that one object in inventory -08: inventory value to alter -0C: watch main top -10: watch main bottom -14: inventory select name -18: on default pickup -1C: interaction text (pick up, activate, open, etc.) - -notes: fields not entered will use defaults for that object - can rename any item pickup (keys, weapons, etc) - can also be used with doors or other objects, such as when you try to open a locked door - ---------------- -26 lock door -used to target padlock and open doors. doors remain locked until first argument is destroyed - -format: -00000026 yyyyyyyy xxxxxxxx 00000000 -x object # before/after to locking object -y locked object # before/after - - -example: -00 00 00 26 FF FF FF FE FF FF FF FF 00 00 00 00 - -linking this lock: -01 00 00 03 00 3F 27 5B 01 00 00 08 00 00 00 02 ... - - -to these two linked doors: -01 00 00 01 00 B4 00 0A 40 00 00 00 00 00 80 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -00 00 00 01 00 00 F3 33 00 01 00 00 00 00 00 51 -00 00 00 51 00 00 02 22 00 08 00 00 00 00 00 00 -00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - -01 00 00 01 00 B4 00 0B 40 00 00 00 00 00 80 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -FF FF FF FF 00 00 F3 33 00 01 00 00 00 00 00 51 -00 00 00 51 00 00 02 22 00 08 00 00 00 00 00 00 -00 00 05 DC 00 00 00 03 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ---------------- -27 wheeled vehicles -117-119, 121, 12D-131 - -0x80 std. be sure to set flag - -truck f/ dam: -00: 01 19 00 27 01 17 01 3D 20 02 01 01 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 04 0A 00 00 00 00 00 00 00 00 00 00 00 00 -90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - - -for movement... -06: preset must be part of a path -08: set to 0010xxxx -80: jal to action block ---------------- -28 aircraft -011A-011D, 0123 (cars will work, just not properly...) - -example: -00: 00 40 00 28 01 1C 00 1F 30 22 01 01 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 -80: 00 00 04 2A 00 00 00 00 00 00 00 00 00 00 00 00 -90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -B0: 00 00 00 00 - -for prop motion: -08: set to 0010xxxx -80: rate of motion. -(it may also be possible to move them along a path...) - -helicopter in cradle... -02 4C 00 28 01 1A 00 93 10 02 00 08 00 08 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -00 00 04 21 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 - - ---------------- -29 ??? -unknown - -format: -00000029 - ---------------- -2A normal glass -0068 - 006B specifically, as well some other objects. Defines the glass shatter effect - -normal 0x80, although the 2xxx presets may require specific rotation... - -example: -01 00 00 2A 00 68 27 10 04 00 0B 62 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -beaker -01 00 00 2A 01 36 00 C9 00 00 00 09 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 - ---------------- -2B Safe -00FE only, + 0125 for safe door - -std 0x80 - -example: -00: 01 00 00 2B 00 FE 27 59 00 02 01 E8 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 - --safe door f/ bunker 2 -01 00 00 01 01 25 00 4A 00 00 00 00 20 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 5A 00 00 03 E8 00 00 00 00 0F 5C -00 00 0F 5C 00 01 00 00 00 08 00 05 00 00 00 30 -0F FF FF FF 00 00 00 10 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - -alert that safe is locked (basic "door is locked" text override: -00 00 00 25 FF FF FF FF 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 65 -00 00 00 00 00 00 00 00 - -1st item in safe (first 0x10): -01 00 00 08 00 CC 00 2B 00 00 00 08 00 00 00 00 ... - -link object into safe -00 00 00 2C FF FF FF FF FF FF FF FC FF FF FF FD 00 00 00 00 - -2nd item in safe (first 0x10): -01 00 00 08 00 CC 00 2D 00 00 00 08 00 00 00 00 ... - -link object into safe -00 00 00 2C FF FF FF FF FF FF FF FA FF FF FF FB 00 00 00 00 - -probably not safe specific, but when one silencer is picked up, both are -00 00 00 0E FF FF FF FE FF FF FF FC - -3rd item in safe (first 0x10): -02 00 00 03 01 0E 00 2C 00 04 00 08 00 00 00 00 ... - -link item into safe: -00 00 00 2C FF FF FF FF FF FF FF F7 FF FF FF F8 00 00 00 00 -+ rename -00 00 00 25 FF FF FF FE 00 00 00 42 ... - - - ---------------- -2C Safe items -used to place items within a safe - -format: -0000002C oooooooo xxxxxxxx yyyyyyyy 00000000 -o objects forward/back to object placed within safe -x objects forward/back to safe object (00FE) -y objects forward/back to safe door (0125) - -example, f/ bunker 2 safe: -00 00 00 2C FF FF FF FF FF FF FF FC FF FF FF FD 00 00 00 00 - - ---------------- -2D tank -0120 only! - -0x80 std. -0xD8 assigns amount of tank ammo to recieve - -tank on runway -00: 01 14 00 2D 01 20 00 2C 00 02 01 01 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -D0: 00 00 00 00 00 00 00 00 00 00 00 1E 00 00 00 00 - -C6: 2 bytes. set >0 for firing effect -D8: tank ammo, max=50 (0x32) - -note: can not be used effectively multiplayer. - Will not assign clipping change and correct player assignment. - ---------------- -2E Cut-Scene Coordinates -sets coordinates and rotation for in/outro camera sequences -uses the same format as those 06 intro camera shots following object data - -format: -00: 00 00 00 2E 00 0E 20 1F 00 01 0C F9 FF D5 75 25 -10: 00 03 25 07 00 06 2D B0 00 00 27 14 - -04: x coordinate offset -08: y coordinate offset -0C: z coordinate offset -10: lateral rotation -14: vertical rotation -18: preset. used to illuminate the correct room. - -note - any vertical rotation around 0006xxxx will be near the horizon. - ---------------- -2F Tinted Glass -sets opacity and visibility distance for tinted glass panels - -format: -00: 01 00 00 2F 00 68 27 8A 10 00 02 62 00 00 00 00 -10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -70: 00 00 00 00 03 E8 00 00 00 00 00 00 00 00 00 00 -80: 00 00 01 90 00 00 02 58 00 00 00 00 FF FF FF FF -90: 00 00 00 00 - -80: +/- 4byte distance to full illumination -84: +/- 4byte distance before you can see through window -both distances use general model/clipping values. - -The difference between the distances sets the fade for the glass. -setting a low first value and high second value makes a pane that gradually gets more visible. -setting the first value the same as the second will mean that once you reach the given distance the pane immediately becomes clear. -setting the first value negative can be used to make glass that never becomes visible. or only partially so. - ---------------- -30+ End Setup Object List -all invalid types indicate the end of the setup file -no arguments - -format: -00000030 \ No newline at end of file diff --git a/notes/GE Documentation/TLB index NGEE.txt b/notes/GE Documentation/TLB index NGEE.txt deleted file mode 100644 index 15af1e8..0000000 --- a/notes/GE Documentation/TLB index NGEE.txt +++ /dev/null @@ -1,6196 +0,0 @@ -At Boot: -70005D30 initialize stuff in 21990 at boot, before title screen -70005FF4 - SW 1->800241B4; fries AT,T6 - -TBL index--------- - -base conversion for runtime addresses - note: 70- is pure rdram; shown below are copied from rom to region - 1000 70000400 memset (blanks) 8005D2E0 - 8008E360, sets SP->803AB410, JR to 80000450 - technically, this is used in bootcode and used prior to TLB registration - 1050 70000450 registers 70000000-70400000 in TLB, JR to 70000510 - technically, this is used in bootcode and used prior to TLB registration - 10BC 700004BC V0=80020D90: target address for 21990 (USA) - 10C8 700004C8 V0=21990: ROM address of main compressed block (USA) - 10D4 700004D4 V0=33590: ROM address of 70200000 RareZip ASM [33590-34B30 ROM] (USA) - 10E0 700004E0 V0=33590: ROM address of 70200000 RareZip ASM [33590-34B30 ROM] (USA) - 10EC 700004EC V0=34B30: ROM address of 7F- TLB routines (USA) - 10F8 700004F8 redirect to 7020141C: decompression routine - accepts: A0=p->source, A1=p->target, A2=p->buffer - sets A3=7020141C, then jumps to address - 1110 70000510 ??? initializes TLB index... - copies compressed 21990 to virtual address 701EE400, using 70200000 to decompress - 12F0 700006F0 V0= new stack pointer; A0+A1-8 - accepts: A0=base address, A1=size - 12FC 700006FC 1->80023044, 10000000->80023048 - 1318 70000718 A0->SP+0, infinite loop - 1338 70000738 Null thread; executes 70000718 - 1390 70000790 Indi board detection thread; now forcably returns INDI_NOT_DETECTED (1) - 13EC 700007EC - 149C 7000089C start main game setup and loop - calls command line parser, debug console setup, etc. - called by 70000510, using 7000D430: A0=8005D640, A1=3, A2=7000089C, A3=0, SP+10=[803B3948], SP+14=0xA - never returns; 7000601C is an infinite loop - 1508 70000908 V0= p->last entry in copy of debug handler code/name table; fries AT,V1,T0,T1,T6,T9 - copies table from 8002304C-80023084 to stack - 1570 70000970 A0-> stderr.activated [80023098]; fry AT - 157C 7000097C A0-> stderr.enable [80023094]; fry AT - 1588 70000988 A0-> stderr.permitted [8002309C]; fry AT - 1594 70000994 A0-> user.Compare [800230A0]; fry AT - 15A0 700009A0 test to display stderr and update Count - 15F8 700009F8 test to display stderr every 16th frame - 1688 70000A88 store current Count to 800230A4 - 16AC 70000AAC (thread management) - 1814 70000C14 - 1870 70000C70 - 18F8 70000CF8 V0= A0+78 - 1900 70000D00 - 1AB4 70000EB4 - 1C14 70001014 - 1D1C 7000111C V0= 8005DB30: target for DP Cmd clock, buffer counter, pipe counter, and tmem counter - 1D28 70001128 - 1DE0 700011E0 - 1E30 70001230 - 1FD8 700013D8 - 2040 70001440 (DPC fill) - 2160 70001560 - 219C 7000159C ??? - uses TLB pointers at 80028400 - 7000167C 3 - 70001704 2,6,7 - 70001758 default; 1,4,5 - 2380 70001780 sets TLB indexed entry 0 to mirror 1KB of rdram from 80000000 to C0000000 - uncached, dirty, valid, global - 23E0 700017E0 establishes 7F- TLB buffer and management table - 2498 70001898 ???; pointless conditional tests, will reset 800230D0 - 24C0 700018C0 searches TLB index for an entry matching A0 - V0=index of match or 80000000 if not found - accepts: A0=TLB pointer - 2520 70001920 find and remove TLB entry A0 - accepts: A0=TLB pointer - redirects to 700018C0, 7000D3D0 - 2554 70001954 remove index A0 TLB entry from table at 8005E3F0 - table format: - 0x0 1 if dirty - 0x1 chunk # (7F000000 | chunk<TLB memory, or alternately end of free memory [8005E4A8] - 2710 70001B10 V0= random value for TLB random entries [800230E0] - 2760 70001B60 loads/resolves TLB address, writting random entry - 29B0 70001BB0 sets #hardwired TLB entries to 2 - 29D0 70001BD0 -# audio manager - 2B58 70001F58 insert sound manager thread - redirect to 7000D580: A0=8005E530 - 2B7C 70001F7C - 2E44 70002244 - accepts: A0=, A1=p->audio packet - 2FE4 700023E4 - 3024 70002424 - 31D8 700025D8 - 3210 70002610 - 3330 70002730 (DL generator) - 33A4 700027A4 - 3410 70002810 - 3454 70002854 - 3558 70002958 draw "display speed" display - accepts: A0=p->display list - 38D8 70002CD8 - 3C60 70003060 - 3D24 70003124 initialize both video buffers - 3D90 70003190 ???; 2->800232BC - 3DA0 700031A0 - 3E98 70003298 - 4704 70003B04 ???; 800232B4=(word)F12, 800232B8=0xA - accepts: F12= - 4764 70003B64 - 47B0 70003BB0 - 4800 70003C00 sets colour output mode to 16bit [800232AC=1] - 4810 70003C10 sets colour output mode to 32bit [800232AC=0] - 481C 70003C1C V0= p->video2's buffer [p@800232A8+28]; fry T6 - 482C 70003C2C V0= p->video1's buffer [p@800232A4+28]; fry T6 - 483C 70003C3C A0->video2's buffer [p@800232A8+28]; fry T6 - 484C 70003C4C V0= halfword [80060824] - 4858 70003C58 - 4AB4 70003EB4 - 4AF8 70003EF8 generate a generic fillrect; fries: AT,A1,A2,A3,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - V0=new display list address - accepts: A0=p->display list - 4B64 70003F64 - accepts: A0=p->display list - 4F84 70004384 A0->[800232A0] - 4F90 70004390 V0= [800232A0] - 4F9C 7000439C A0->[8002329C] - 4FA8 700043A8 V0= [8002329C] - 4FB4 700043B4 - A0->[p@800232A8+18], SP+0; fry V0,T0,T1 - A1->[p@800232A8+1A], SP+4 - 4FD8 700043D8 V0= [p@800232A8+18]; fry T6 - 4FE8 700043E8 V0= [p@800232A8+1A]; fry T6 - 4FF8 700043F8 set video2 text clip width (A0) and height (A1); fries V0,T0,T1 - A0->[p@800232A8+4], SP+0 - A1->[p@800232A8+6], SP+4 - 501C 7000441C V0= video2 text clip width [p@800232A8+4]; fry T6 - 502C 7000442C V0= video2 text clip height [p@800232A8+6]; fry T6 - 503C 7000443C set video2 width (A0) and height (A1) - 509C 7000449C V0= video2 lrx [p@800232A8+1C]; fry T6 - 50AC 700044AC V0= video2 lry [p@800232A8+1E]; fry T6 - 50BC 700044BC set video2 ulx (A0) and uly (A1) - 5114 70004514 V0= video2 ulx [p@800232A8+20]; fry T6 - 5124 70004524 V0= video2 uly [p@800232A8+22]; fry T6 - 5134 70004534 A0->[p@800232A8+24]; fry T6 - 5144 70004544 - 5190 70004590 F12->video2 page width [p@800232A8+C] and something else... - 51DC 700045DC F0= [p@800232A8+8]; fry T6 - 51EC 700045EC - 5250 70004650 - 52AC 700046AC copies [p@800232A8+10-14] to A0; fries V0,T6,T7,F4,F6 - 52D0 700046D0 setfillcolour(&A0,A1,A2,A3); generates a setfillcolour op - mode determined by flag at 800232AC: 0=32bit, 1=16bit - accepts: A0=p->display list target, A1=red, A2=green, A3=blue - returns: V0=updated display list target (A0 also updated) - fries: V1,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - 5358 70004758 image capture routine, jpeg 16bit colour - 54D4 700048D4 image capture routine, jpeg 32bit colour - 5660 70004A60 image capture routine, rgb 16bit colour - 57B4 70004BB4 image capture routine, rgb 32bit colour -# debug notice list manager - 5920 70004D20 V0=p->match in debug.notice.list [800232E8] or NULL if not found - accepts: A0=p->name, A1=p->data - 5980 70004D80 V0=p->entry of size A0 allocated in debug.notice.list; entry allocated in block 6 on failure - accepts: A0=size - 59E0 70004DE0 V0=p->new entry added in debug.notice.list - accepts: A0=p->name, A1=p->data - 5A2C 70004E2C V0= p->debug.notice.list entry for boss_c_debug using data at 800241A0 - 5A60 70004E60 V0=p->debug.notice.list entry for name A1 and data A0; generates if not found - accepts: A0=p->data, A1=p->name - 5A98 70004E98 V0=0; scan debug.notice.list until a NULL pointer - likely this would have executed some function for each entry... - 5ABC 70004EBC unconditional return - 5AC4 70004EC4 A0->SP+0, A1->SP+4, A2->SP+8 -# - 5AE0 70004EE0 - 5B54 70004F54 - 5CAC 700050AC V0= SP, A3=SP usage within function range (A1,A0) with initial SP A2 - accepts: A0=p->opcode.cur, A1=p->opcode.start, A2=SP w/i function, A3=p->register buffer - 5DE0 700051E0 V0=TRUE if opcode that set RA A0 was a JAL or JALR type within bounds (70000450,70020D90) - accepts: A0=p->70-mapped TLB function, presumably from RA - 5E58 70005258 V0= strlen(A0); used exclusively for scanning ind.rea.buf - accepts: A0=p->string - 5E94 70005294 V0= total size of one word, two strings at hardware A0 - accepts: A0=hardware address - 5F40 70005340 scan for and load resourceID A0 from indy.read.buf - accepts: A0=resourceID - 5FC8 700053C8 V0= TRUE if valid indy.read.buf.resourceID [matches 826475BE] - 5FFC 700053FC unconditional return - 6004 70005404 unconditional return - 600C 7000540C unconditional return - 6014 70005414 V0= indy.read.buf.resourceID [80063664] - 6020 70005420 V0=hardcoded SP for debug thread A1, corrected for address range A0 - accepts: A0=p->address space, A1=entry# - 60E4 700054E4 V0=hardcoded SP for debug thread A1, corrected for address range A0 - accepts: A0=p->address space, A1=entry# - 6160 70005560 V0= TRUE if F12 a normal single precision float - accepts: F12= single-precision float - 61A4 700055A4 V0= TRUE if A1 a normal single precision float; would have set result as short at A0 - accepts: A0=(unused) p->target, A1=single-precision float - 61C8 700055C8 removed: set normality of single-precision floats A1, A2, A3, SP+10 in table at A0 - 6228 70005628 unconditional return -# stderr manager - 6230 70005630 write char A2 to (A0,A1) in stderr - accepts: A0=xpos, A1=ypos, A2=char - 62BC 700056BC write char A0 to stderr - accepts: A0=char - 63CC 700057CC scroll stderr down one line - accepts: A0=ypos - 645C 7000585C print char A2 to stderr screen position (A0,A1) in video buffer 1 - accepts: A0=xpos, A1=ypos, A2=char - 6584 70005984 set pointers to video buffers 1 & 2 to A0 and A1, respectively - sets values to uncached addresses - A0 | A0000000 -> 8002417C - A1 | A0000000 -> 80024180 - 65A4 700059A4 set pointers to video buffers 1 & 2 - calls 70005984: A0=803B5000, A1=803DA800 - 65D0 700059D0 write stderr to video buffer A0 - accepts: A0=p->video buffer -# - 6710 70005B10 V0=value of RA previously saved to the stack or -1 if impossible to retrieve - Searches backward from caller for last instance of RA saved to stack. - 6760 70005B60 ???; calls 7000D6D0: A0=800636F0, A1=800636E8 - 6790 70005B90 read A2 bytes from hardware A1 to rdram A0 - accepts: A0=p->target, A1=hardware address, A2=size - 67F0 70005BF0 ???; calls 7000DDD0: A0=800636F0, A1=0, A2=1 - 681C 70005C1C loads A2 bytes from hardware A1 to rdram A0 - accepts: A0=p->rdram, A1=p->hardware, A2=size - calls: 70005B90, 70005BF0 - 6844 70005C44 V0=p->data at target A0 from hardware A1 of size A2; calls 70005C1C - accepts: A0=p->rdram, A1=p->hardware, A2=size - 68A8 70005CA8 write A2 bytes from rdram A0 to hardware A1 - accepts: A0=p->rdram, A1=p->hardware, A2=size - 6908 70005D08 loads A2 bytes from rdram A0 to hardware A1 - accepts: A0=p->rdram, A1=p->hardware, A2=size - calls: 70005CA8, 70005BF0 - 6930 70005D30 ??? - uses "-level_", "-m" strings - 6BF4 70005FF4 1 ->"show mem use" debug memory display [800241B4]; fry AT,T6 - 6C04 70006004 toggle "show mem bars" [800241B8]; fries V0,T6,T7 - 6C1C 7000601C loads primary resources and starts main program loop - this is infinite. Loops unconditionally: JAL 70006060 - 6C60 70006060 main program loop - 70006090 tests memstring for "-level_##" - 700060DC if not title, tests memstring for "-hard#" - 70006160 follows... - 700061FC test if debug console unconnected [800241A4] - 700062EC follows... - 700062FC tests memstring for "-ma" - 7000633C allocates "-ma" bytes to mem bank 4 - 7000635C reset player data pointers - 70006364 offsets stage number based on number of players unless main menu - 700063A0 parses and sets memory allocation, loads stage, etc. - ... - 70006708 displays memory usage when active - 70006724 displays in-game debugger when active - 7000674C writes a full sync, end display list combo - 7000676C display mem use when active [800241B4] - 700067A8 display mem bars when active [800241B8] - 700067C0 follows... - 700067D8 tests if "u64.taskgrab.#.core" activated and dumps memory - 70006854 follows... (700068BC - stop demos) - 7530 70006930 run title [0x5A->loaded stage#]; fry AT - redirect to 70006950: A0=0x5A - 7550 70006950 A0->loaded stage# [800242FC]; fry AT - 0x5A jumps to folder select - 0x5B - 0x63 - 755C 7000695C V0= stage# [800241A8] - 7568 70006968 return to title screen from stage - 75B4 700069B4 V0=state of debug menu (1:on; 0:off) [80024300] - 75C0 700069C0 V0= p->debug.notice.list entry for boss_c_debug using data at 800241A0 - 75F0 700069F0 - 7630 70006A30 loads sound and music banks into memory segment 6 - 7A7C 70006E7C play first music track A0 - 7BD0 70006FD0 stop playing first music track - 7C30 70007030 V0= [80024338] - 7C3C 7000703C ??? - sets something for currently running music track... - accepts: A0=value - 7CA0 700070A0 - 7CF8 700070F8 - 7D68 70007168 - 7E04 70007204 - 7F58 70007358 - 7FB8 700073B8 V0= [80024340] - 7FC4 700073C4 - 8028 70007428 - 8080 70007480 - 80F0 700074F0 - 818C 7000758C - 82E0 700076E0 - 8340 70007740 V0= 7FFF [80024348] - 834C 7000774C - 83B0 700077B0 - 8408 70007808 - 8478 70007878 - 8514 70007914 - 8720 70007B20 - 89DC 70007DDC - 8A80 70007E80 ??? - accepts: A0=???, A1=??? - uses TLB pointer table at 80029160 - 70007FBC entry 0 - 70008388 entry 1 - 7000847C entry 3 - 700084F0 entry F - 700085C8 entry 7 - 700088D4 default: entries 2,4,5,6,8,9,A,B,C,D,E - 9548 70008948 - 95C4 700089C4 - 9630 70008A30 - 96F0 70008AF0 - 9770 70008B70 - accepts: A0=sound data offset?, A1=sample address? - 9904 70008D04 - 99D8 70008DD8 A1->A0+0x36. value is set in sound effect buffer? - accepts: A0=p->SE buffer?, A1=value truncated to byte - 99F0 70008DF0 V0= TRUE if SE playing flag set [A0+0x3F] - value is set only when sound defaults have been set - accepts: A0=p->SE buffer - 9A08 70008E08 sets sound effect; used by sound effect routines - accepts: A0=p->SE buffer, A1=SE #, A2=p->data - data: 0x0 4 p->SE entry - 0x4 4 target volume - 0x8 4 audible range (timer) - 0xC 4 initial volume - 0x10 4 p->preset emitting sound - 0x14 4 p->object emitting sound - 9C20 70009020 decativates sound effect - accepts: A0=p->SE buffer - 9C6C 7000906C - 9D24 70009124 redirect to 7000906C: A0=1 - 9D44 70009144 redirect to 7000906C: A0=11 - 9D64 70009164 redirect to 7000906C: A0=3 - 9D84 70009184 - 9DC8 700091C8 redirect to 70009264: A0=0 - 9DE8 700091E8 - 9E38 70009238 - 9E64 70009264 V0= halfword A0 in table at [80063BA8]; fries T6,T7,T8,T9 - 9E84 70009284 - 9F80 70009380 V0=p->debug.notice.list entry for memp_c_debug - 9FAC 700093AC initialize memory allocation table and set font and text bank sizes - accepts: A0=p->buffer, A1=size - uses "-mf", "-ml", "-me" strings - A114 70009514 initialize allocations using table A0 - accepts: A0=p->allocation sizes - A320 70009720 V0=p->A0 bytes of memory allocated in bank A1; fries: AT,V0,V1,A0,A1,A2,A3,T0,T2,T5,T6,T7,T8,T9 - accepts: A0=size, A1=bank - A404 70009804 ???; updates bank A2 size registry in light of entry at A0 of size A1 - accepts: A0=p->allocated data, A1=size of data, A2=bank# - A4F0 700098F0 V0=8 -- loop eight times, needlessly; fries AT,T6 - used by "show mem use", step 1; probably originally listed all eight memory allocations - A510 70009910 V0= total allocated size of bank A0 - accepts: A0=bank# - A570 70009970 allocate A0 coded #bytes in bank - accepts: A0=size/bank# entry (ssssssss ssssssss sssssssss sssssbbb) - A59C 7000999C reset memory bank A0 [0-6] - copies base address for memory bank A0 to +4, fry +C - A5C4 700099C4 - accepts: A0=bank# - A610 70009A10 swap allocation entries A0 and A1; fries V0,V1,T6,T7 - accepts: A0=p->DW1, A1=p->DW2 - A634 70009A34 merge allocation entry A1 with A0, removing A1; fries T6,T7,T8 - A650 70009A50 check memory allocation table, merging and sorting entries. V0=TRUE if table A0 altered; fries AT,A0,A1,V1,T6,T7,T8 - accepts: A0=p->allocation table, usually at 80063C28 - A718 70009B18 merge and sort default memory allocation table until at its most efficient - calls 70009A50 until table 80063C28 no longer changes - A760 70009B60 - A874 70009C74 - A96C 70009D6C V0=p->debug.notice.list entry for mema_c_debug - A998 70009D98 resets entire memory table and starts over with mem[0]=A0, size A1 - accepts: A0=p->allocated memory, A1=size - AA10 70009E10 merge and sort entries in default memory allocation table; - calls 70009A50: A0=80063C28 - AA34 70009E34 - ABA8 70009FA8 - ABFC 70009FFC - AC20 7000A020 redirect to 70009C74 - AC40 7000A040 V0=80064C08, V1=80063C28. loop and add +0x20 to V1 until it matches V0 - this one really makes you wonder... - AC64 7000A064 - AD00 7000A100 generate ordered list of 200 largest allocated blocks of memory - note: this string is not output and invalid on return - AE9C 7000A29C debug memory table sort and merge function: generate memory block table, sort and merge table, then generate a new list - used by "show mem use", step 2 - AEF8 7000A2F8 - AF70 7000A370 - AFDC 7000A3DC - B050 7000A450 V0= random number [80024460]; fries AT,A0,A1,A2 - B098 7000A498 set random random number to A0+1 ret. A0=0; fries AT,A0 - B0AC 7000A4AC V0= rand num, using double at A0 as base; fries A1,A2,A3,V0 - B0F0 7000A4F0 V0= strtok(A0,' ') - breaks up string A0, replacing spaces with NULLs - up to 0x28 entries allowed (more will cause issues) - 80024470 #strings - 80024474 p->current substring# - 80024478 list of pointers to the start of each string - note this routine has a glitch: - it tests only for ' ' at 7000A518, but at 7000A55C tests for all values < 0x21 - B18C 7000A58C strtok(strcpy(80064C30, string),' '); used to handle memory allocation string - redirect: 7000A770: A0=80064C30, A1=p->string; 7000A4F0: A0=80064C30 - accepts: A0=p->string - B1C0 7000A5C0 parse command line options - tests if debug console present [redirect to 7000CEA8] - if not, 0->80064C30. Else, copies FFB000-FFB280 -> 80064C30, treated as a pointer to a string - if "-d" set, returns V0=1; "-s" set, disable sound=1 [800243F8]; "-j" set, language=1 [800484D0] - if returns 1, set debug with 7000D740: A0=NULL - uses "-d", "-s", "-j" flags - B2A0 7000A6A0 V0= p->A0th instance of token A1 - used to return numerical part following memory allocation values, for example - implies you've already used a strtok() command on a string. - typical usage would be A0=1 for first match, A0=2=second match, etc. - B370 7000A770 V0= strcpy(A0,A1) - copy string A1 to A0; fries V1,A1 - B3A0 7000A7A0 V0= strncpy(A0,A1,A2) - copy A2 bytes from string A1 to A0; fries V1,A0,A1,A2 - B3FC 7000A7FC V0= strcat(A0,A1) - append string A1 on A0; fries V1,A1,T6,T7 - B44C 7000A84C V0= strcmp(A0,A1) - test if strings A0 and A1 identical; fries AT,V1,A0,A1 - returns V0= 0 if true, 1 if A0A1; A0 and A1 will be p->first differing character - B490 7000A890 unused return - B498 7000A898 V0= strncmp(A0,A1,A2) - test if the next A2 bytes in strings A0 and A1 identical; fries AT,V1,A0,A1,A2 - returns V0= 0 if true, 1 if A0A1; A0 and A1 will be p->first differing character - B4F8 7000A8F8 V0=toupper(A0) - if 60string, A1=@last character read or NULL, A2=base (hex by default) - Operates rougly like normal strtol() C-function. A1, if defined, is an address to store a pointer to the last character read. Used primarily when parsing pad values. - if A2 is zero, decimal implied unless the value uses operators. Otherwise, state what base the value is in (0xA for base 10, 0x10 for hex, etc.). - B870 7000AC70 V0= mempcpy(A0,A1,A2) - copies A2 bytes from A1 to A0, returning p->next byte; fries V1,A2,T6 - redirect to 70013850. V0= result+A2 - B894 7000AC94 sprintf(A0,A1,A2,A3,...) - calls c-parser; NULL terminates strings it outputs - accepts: A0=p->final string, A1=p->string to parse, A2=argument1, A3=argument2, SP+10=argument3, etc... - calls: 70013F60; A2 and A3 are set as arguments. This routine would access SP+10 as though it were the next entry in the list, magically - argument format: - long value for all integer types - double value for float types; use two sequential arguments for upper and lower half of value - pointer for string type - character (as int) for char type - B8F0 7000ACF0 -# video manager - B930 7000AD30 unconditional return - B938 7000AD38 vi_c_debug: - B980 7000AD80 A0->SP+0, A1->SP+4, V0=0 - B990 7000AD90 A0->SP+0, A1->SP+4, V0=0 - B9A0 7000ADA0 unconditional return - B9A8 7000ADA8 unconditional return - B9B0 7000ADB0 reset stdout display; redirects to 7000AF00 - B9D0 7000ADD0 write char A2 to stdout at position (A0,A1) - accepts: A0=xpos, A1=ypos, A2=char - BADC 7000AEDC reset stdout x and y positions to upper left margin - copies 80024FA0/4 -> 80024FA8/C - BB00 7000AF00 reset stdout display - BB84 7000AF84 removed: copy stdout char from position (A0,A1) to (A2,A3) - accepts: A0=source x, A1=source y, A2=target x, A3=target y - now only copies A0->SP+0, A1->SP+4, A2->SP+8, A3->SP+C - BB98 7000AF98 scroll stdout A0 lines; A0 should be a negative offset (-2 scrolls up two lines) - accepts: A0=number of lines to push up - BC40 7000B040 translates and saves stdout text position (A0,A1); fries AT,A0,A1,T6,T7 - accepts: A0=xpos, A1=ypos - BC6C 7000B06C set stdout text (foreground) color, alpha inverted [800268AC]; fries T0,T1,T2,T3,T6,T7,T8,T9 - accepts: A0=red, A1=green, A2=blue, A3=alpha (inverted) - BC98 7000B098 set stdout background color, alpha inverted [800268B4]; fries T0,T1,T2,T3,T6,T7,T8,T9 - accepts: A0=red, A1=green, A2=blue, A3=alpha (inverted) - BCC4 7000B0C4 write char A0 to stdout (debug menu) - accepts: A0=char - BDC0 7000B1C0 write char A2 to (A0,A1) in stdout, translating position (debug menu) - accepts: A0=xpos, A1=ypos, A2=char - calls: 7000B040, 7000B0C4 - BDE8 7000B1E8 write string A0 to stdout (debug menu) - accepts: A0=p->string - BE30 7000B230 write string A2 to (A0,A1) in stdout - accepts: A0=xpos, A1=ypos, A2=p->string - BE7C 7000B27C 7000B27C BE7C write stdout to screen - accepts: A0=p->display list -# joystick manager - C160 7000B560 joy_c_debug: - C2AC 7000B6AC - C328 7000B728 removed: V0=3 (output enabled | slot filled); V0=3, A0->SP+0 - accepts: A0=p->controller packet - V0 is forced to return "output enabled" | "slot filled" - org. V0= state of mempak dictated by controller packet A0 - C334 7000B734 tests controller A0's for a rumble pak, generating rumble on/off commands if found - C410 7000B810 tests for disconnected controllers - C5F8 7000B9F8 V0= #controllers plugged in; fries V1,T0,T1,T6,T7,T8,T9 - C670 7000BA70 V0= flags indicating which controllers are plugged in [800268D0] - C67C 7000BA7C ??? - oscillates rumble pak when required - C7A8 7000BBA8 A0-> ramrom replay TLB handler [80026924], A1-> #controllers (command size) [80065324]; fries AT - A0 is a pointer to a TLB address, probably to handle the ramrom file loaded - A1 is the #controllers, which also is the size of the commands - C7BC 7000BBBC A0->ramrom record TLB handler [80026928]; fries AT - must be a pointer [7F0BFE5C] or NULL - C7C8 7000BBC8 ??? - accepts: A0=p->controller input index - C90C 7000BD0C redirect to ramrom replay and record handlers if set - C988 7000BD88 - CCEC 7000C0EC V0= current position left<->right of controller A0's control stick - fries: V1,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - CD74 7000C174 V0= previous position left<->right of controller A0's control stick - fries: V1,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - CDFC 7000C1FC V0= current position up<->down of controller A0's control stick - fries: V1,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - CE84 7000C284 V0= previous position up<->down of controller A0's control stick - fries: V1,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - CF0C 7000C30C test player A0's controller for button mask A1 held; fries V1,A0,A1,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - looks to 80064F30 for buffered sets of 6 bytes per player - CFAC 7000C3AC test player A0's controller for button mask A1 pressed; fries V1,A0,A1,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - used on main menus, so probably doesn't use control type mask - 8000 A button - 4000 B button - 2000 Z button - 1000 Start button - 0800 up-Dpad - 0400 down-Dpad - 0200 left-Dpad - 0100 right-Dpad - 0020 L button - 0010 R button - 0008 up-C button - 0004 down-C button - 0002 left-C button - 0001 right-C button - D030 7000C430 print controller button state: print 16 bits in A1 as ' ' or '1' to A0, top to bottom - accepts: A0=p->address, A1=value - Reads from 0x8000 to 0x1. If set prints '1', else ' '. - D070 7000C470 V0=#controllers connected; loops and redetects once for each controller - D0B4 7000C4B4 V0=state of player A0's control stick; -2 left : 1 right; fries AT,V1,A0,A1,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - accepts: A0=player#, A1=mask?, A2=1? - these values probably indicate the deadzone or something - D128 7000C528 V0=state of player A0's control stick; -2 down : 1 up; fries AT,V1,A0,A1,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - accepts: A0=player#, A1=low range (-2)?, A2=high range (1)? - D19C 7000C59C ??? - tests control stick left/right - D20C 7000C60C ??? - tests control stick up/down - D27C 7000C67C - D2BC 7000C6BC - D2FC 7000C6FC - D334 7000C734 - D378 7000C778 - D3BC 7000C7BC - D408 7000C808 - D454 7000C854 triggers A1 seconds of rumble on controller A0; fries: AT,V0,V1,A0,T0,T1,T2,T6,T7,T8,F4,F6,F8,F12 - accepts: A0=player#, A1=(float) time; multiplied by 60.0 in function - D4DC 7000C8DC reset controller and rumble pak detection - D530 7000C930 set controller input index to set A0 [800268C4]; fries: AT,T6,T7,T8 - D554 7000C954 V0=current controller input index (80064F30 + V0*0x1FC) - fries: AT,T6,T7 - D580 7000C980 send rumble off packet to PIFram [800655A0+offset] - accepts: A0=p->controller packet for player - D6AC 7000CAAC send rumble on packet to PIFram [800656A0+offset] - accepts: A0=p->controller packet for player - D7DC 7000CBDC generate PIF command: A3=request write data at A2 to block A1 of channel A0; exclusively used for rumble pak - accepts: A0=channel#, A1=block#, A2=p->start.buffer, A3=@target (0x40) - D938 7000CD38 rumble pak output handler; tests for valid paks and generates rumble on/off PIF commands - accepts: A0=p-> [80065350], A1=p->controller packet [800653F8+pl.*0x68], A2=controller# - DAA0 7000CEA0 unconditional return; - DAA8 7000CEA8 V0= 1; would have returned 0 if debug console present - if it were zero, would attempt to copy a memory range from FFB000 to 80064C30-80064EB0, 0x280 large - DAB0 7000CEB0 V0= -1 - DAB8 7000CEB8 unconditional return; called by 7F0D01D0 - DAC0 7000CEC0 unconditional return; - DAC8 7000CEC8 unconditional return; - DAD0 7000CED0 unconditional return; - DAD8 7000CED8 unconditional return; - DAE0 7000CEE0 unconditional return; - DAE8 7000CEE8 write A2 chars in string A1 to stderr - accepts: A0=p->target(unused), A1=p->source, A2=length - DB44 7000CF44 c-style expansion of string A0 to stderr - accepts: A0=p->string, A1=arg.1, A2=arg.2, A3=arg.3, SP+10,n=arg.n - calls 70013F60: A0=7000CEE8, A1=0, A2=[A0], A3=SP+24 - SP+24=[A1], SP+28=[A2], SP+2C=[A3], SP+30,n=[SP+10,n] - DB90 7000CF90 sets PI request - accepts: A0=mode (0-write;1-read), A1=p->source, A2=p->target, A3=size - DC70 7000D070 V0= PI status [A4600010]; fries T6 - DC80 7000D080 initialize PIF, interrupt handlers, C0- and 7F- TLB segments, init NMIbuffer if cold run, init 64DD if present - DF20 7000D320 CACHE 80000000 - 80002000; fries AT,T0,T1,T2 - DF50 7000D350 invalidate Cache for A1 bytes at A0 - accepts: A0=p->address, A1=size - DFD0 7000D3D0 removes TLB index A0 without damaging previously set EntryHi - E010 7000D410 V0= control register from COP1 (F31) - E020 7000D420 V0= COP1 control, then sets COP1 control to A0 - E030 7000D430 initialize thread entry at A0 - accepts: A0=p->target, A1=set to thread+18, A2=p->function executing thread, A3= value passed to A2 as A0, SP+10=p->stack, SP+14=p->parent list - thread entry: - 0x0 4 p->entry - 0x4 4 priority - 0x8 4 p->parent - 0xC 4 p->previous - 0x10 2 index 1-8 - 0x12 2 - 0x14 4 - 0x18 4 True sets FPU regs - all values 20-100 are doublewords set to AT-RA - 0x108 8 Mult LO - 0x110 8 Mult HI - 0x118 4 COP0 Status mask - 0x11C 4 function to execute 'game' when table erets - 0x120 4 - 0x124 4 - 0x128 4 MI Interrupt mask - 0x12C 4 COP1 Status - all values 0x130 - 0x1B0 are double float values set to F0-F30 - E120 7000D580 insert thread A0 and execute if no thread running - accepts: A0=p->thread - E2D0 7000D6D0 ???; thread management - 80027720->A0+0, 80027720->A0+4, 0->A0+8, 0->A0+C, A2->A0+10, A1->A0+14 - accepts: A0=@target, A1=p->???, A2=value - E340 7000D740 ??? - looks like this sets the debug console interface - accepts: A0=p->value or NULL - 7000D7A4 4 or A0=NULL - 1->@80027730, redirect to 700107AC: A0=0 - 7000D7C4 2 or 8 - 7000D7E0 default - E400 7000D800 change priority to A1 for thread A0 or current thread if NULL - accepts: A0=p->thread or NULL, A1=priority - E4E0 7000D8E0 V0= COP0 Count - E4F0 7000D8F0 - E678 7000DA78 - E850 7000DC50 set interrupt table entry #A0 with p->data A1 and value A2 - accepts: A0=entry#, A1=p->data, A2=value - - 7000DD30 - 7000DDD0 ??? - something with thread management - accepts: A0=p->thread list, A1=p->buffer or NULL, A2=permit errors (True/False) - 7000DF10 ??? - accepts: A0=p->???, A1=??, A2=??? - 7000E060 - 7000E0D0 - 7000E200 - 7000E260 - EED0 7000E2D0 set or unset (A0=1,0) 0x20 flag in short at @80028044+0; fries AT,V0,A0,T0,T1,T2,T6,T7,T8,T9 - 7000E340 - EFC0 7000E3C0 sets DPC counters to A0; clock, buffer, pipe, and tmem respectively - accepts: A0=p->target - 7000E410 - 7000E450 - 7000E490 - F0E0 7000E4E0 A0-> DPC Status - 7000E4F0 - 7000E60C - 7000E76C - F3B0 7000E7B0 sets A3 bytes of commands at A0 to DP Cmd Start/End - accepts: A0=p->commands, A1=(unused), A2=(no application), A3=size - F460 7000E860 set signal 0 in RSP Status register; fry A0 - redirects to 70018EE0: A0=00000400 - F480 7000E880 V0= TLB address assigned to index A0; moves A0->index, V0 from EntryHi - F4B0 7000E8B0 V0=rdram offset derived from pointer A0; fries: AT,V0,A0,T0,T1,T2,T3,T4,T5,T6,T7 - used to produce microcode memory addresses for ops - A0 should be a valid pointer, but may be to rdram, uncached memory, or a TLB address - 7000E930 - - F71C 7000EB1C - F750 7000EB50 V0= p->A3 blocks of data of SP+10 bytes each allocated in sound buffer entry A2 - accepts: A0=(unused), A1=(unused), A2=p->sound buffer entry, A3=#blocks, SP+10=block size - F7B0 7000EBB0 - F840 7000EC40 (V0,V1) = (A0,A1) >> (A2,A3) [logical], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - F86C 7000EC6C (V0,V1) = (A0,A1) % (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - F8A8 7000ECA8 (V0,V1) = (A0,A1) / (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - F8E4 7000ECE4 (V0,V1) = (A0,A1) << (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - F910 7000ED10 (V0,V1) = (A0,A1) % (A2,A3), treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - F94C 7000ED4C (V0,V1) = (A0,A1) / (A2,A3) [signed], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - F9A8 7000EDA8 (V0,V1) = (A0,A1) * (A2,A3), treating each as a DW pair - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - V0=upper word of product, V1 lower word of product - F9D8 7000EDD8 divide DW (A2,A3) by short at SP+12, placing quotient in A0 and modulo in A1 - accepts: A0=p->quotient, A1=p->modulo, A2=DW upper, A3=DW lower, SP+12=[short] divisor - FA38 7000EE38 (V0,V1) = (A0,A1) % (A2,A3) [signed], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - FAD4 7000EED4 (V0,V1) = (A0,A1) >> (A2,A3) [arithmetic], treating each pair as a doubleword - accepts: A0=DW1 upper, A1=DW1 lower, A2=DW2 upper, A3=DW2 lower - FB00 7000EF00 set p->audio A0 of length A1 in AI Register; V0=0 okay or -1 on error - accepts: A0=p->audio, A1=length - FBB0 7000EFB0 V0=AI Length - FBC0 7000EFC0 unconditional return - 7000EFC8 - 7000F020 - 7000F058 - 7000F0B8 - 7000F0D0 - FD00 7000F100 unconditional return - 7000F108 - 7000F3A0 - 102A0 7000F6A0 send PI transfer request; 80027790 must be set! - V0=0 normally, -1 if not available - accepts: A0=p->???, A1=???, A2=mode (0-read;1-write), A3=p->hardware, SP+10=p->rdram, SP+14=size, SP+18=p->??? - 7000F7B0 - 10570 7000F970 V0=p->A2 bytes copied from A0 to A1 - accepts: A0=p->source, A1=p->target, A2=size - 7000FC80 - 7000FEB0 - 7000FF10 - 70010010 - 70010098 - 700100C8 - 10D80 70010180 V0=80027734: - 10D90 70010190 jump for interrupt handler, copied serially - K0=700101A0, JR K0 - 10DA0 700101A0 interrupt handler - ??? uses TLB pointers at 80029460, selecting with offsets at 80029440 - 700103C8 2,3 - 700103D4 4,5,6,7 - 700103E0 8,9,A,B,C,D,E,F - 70010400 18,19,1A,1B,1C,1D,1E,1F - 70010454 14,15,16,17 - 70010594 1 - 700105F0 12,13 - 70010610 11 reset? - 70010648 0,10 - 113AC 700107AC update current thread's registers, then insert in queue and execute - accepts: A0=p->thread queue or NULL - 114AC 700108AC insert thread A1 into thread queue A0 - accepts: A0=p->thread queue, A1=thread entry - 114F4 700108F4 V0= popped thread - accepts: A0=p->tbl - 11504 70010904 switch and execute threads - 11680 70010A80 default return address for all threads; JAL 7001BB60: A0=0 - 11690 70010A90 remove thread A1 from thread queue A0 - accepts: A0=p->thread queue, A1=p->thread entry - 116D0 70010AD0 set priority of current thread to 2, then update, insert, and execute - 11720 70010B20 cache A1 bytes at A0 prior to hardware read request - 117D0 70010BD0 cache A1 bytes at A0 prior to hardware write request - 70010C50 - 11930 70010D30 initialize sound buffer entry A0 with buffer A1 and size A2 - accepts: A0=p->entry, A1=p->buffer, A2=buffer size - 11970 70010D70 unconditional return - 11978 70010D78 unconditional return - 70010D80 - - 11A6C 70010E6C unconditional return - 11A74 70010E74 expand all offsets in soundtable A0, wavebank A1 - accepts: A0=p->"B1" soundtable, A1=hardware address - 11B78 70010F78 - accepts: A0=p->list of entries, A1=base for conversion - 70010FC0 - 70011030 - 11C64 70011064 unconditional return - 7001106C - 7001123C - 12664 70011A64 unconditional return - 70011A6C - 70012080 - 700121F0 - 12E30 70012230 V0= TRUE if music playing [V0=A0+2C] - accepts: A0=p->music controller - 70012240 - 700122E0 - 70012380 - 70012444 - 1309C 7001249C unconditional return - 700124A4 - 7001279C - 700128B0 - 70012A1C - 70012A24 - 70012B20 - 70012B8C - 13900 70012D00 ??? - do something to music at controller A0 - redirects to 70012EFC: A0+=48, A1=@{000D0000, A1<<10}, A2=0 - accepts: A0=p->music controller, A1=value - 13940 70012D40 ??? - do something to music at controller A0 - redirects to 70012EFC: A0+=48, A1=@{000F0000}, A2=0 - accepts: A0=p->music controller - 13970 70012D70 ??? - do something to music at controller A0 - redirects to 70012EFC: A0+=48, A1=@{00110000}, A2=0 - accepts: A0=p->music controller - 139A0 70012DA0 ??? - do something to music at controller A0 - redirects to 70012EFC: A0+=48, A1=@{000A0000, A1<<10}, A2=0 - accepts: A0=p->music controller, A1=value - 70012DE0 - 70012E8C - 70012EFC - accepts: A0=p->???, A1=p->values (4 shorts?), A2=??? - 70013020 - 700130AC - 70013120 - 70013170 - 70013258 - 700133A0 - 70013440 - 700134D0 - 70013560 - 700135F0 - 70013690 - 70013710 - 700137C0 - 14410 70013810 copies word from p->hardware A0 to p->rdram A1 - V0=0 (70017BE0 always=0) - redirect to 7001D760; return V0=70017BE0: A0, A1; 7001D7A4 - accepts: A0=p->hardware address, A1=rdram address - 14450 70013850 V0= memcpy(A0,A1,A2) - copy A2 bytes from A1 to A0; fries V1,A2,T6 - 1447C 7001387C V0= strlen(A0); fries V1,T6,T7 - 144A4 700138A4 V0= strchr(A0,A1) - V0=TRUE if value A1 occurs in string A0; fries V1,A0,T6 - 700138F0 - 14B60 70013F60 parses c-style variables, replacing them with values - accepts: A0=copy function [7000AC70], A1=p->final string, A2=string to parse, A3=p->arguments, each in sequence - returns: V0=strlen, p->final string @ A1 - known allowed commands: - %#0d (long) value - %#0o (long) value - %#0x (long) value - %#0X (long) value - %+-.#0f (double) value; use two sequential arguments for upper and lower half of value - %s p->string - %c (long) char value - 700145B0 - - 15340 70014740 returns device plugged into controller port A2 - V0=flags - 1 output enabled - 2 controller slot filled - 8 rumble pak in slot - accepts: A0=p->[80065350], A1=p->controller packet, A2=channel#, A3=p->[800268D8+pl.offset] - 153F4 700147F4 V0=state of controller slot A1 - retrieve current controller status from PIF, storing to 80067D70 - returns V0=error state 0-OK, 1-slot empty, 2-no slot response, 4-bad address CRC, 8-not present - accepts: A0=???, A1=channel# - 15500 70014900 ???; sets A1=presence flags and A2=status list for channels 0-4 - accepts: A0=???, A1=p->presence flags target, A2=p->status list target - 156F8 70014AF8 return device presence flags in A0, status list in A1 for current PIF status in buffer - 157C8 70014BC8 generate PIFram command: request status for #channels at 80067CE1 - places command at 80067CA0 - accepts: A0=??? - 158C0 70014CC0 retrieve current controller status from PIF, storing at 80067CA0 - 15944 70014D44 return status list in A0 for current PIF status in buffer - calls 70014AF8: A0=SP+1F, A1=A0 f/caller - 15970 70014D70 retrieve controller input from PIF, storing at 80067CA0 - 15A34 70014E34 copy data or errors for controllers - used during runtime - 15ADC 70014EDC generate PIFram command: read controller input to 80067CA0 - 70014FD0 - 15C40 70015040 - 15E30 70015230 - 15F40 70015340 - 160F0 700154F0 - 161FC 700155FC - 16420 70015820 - 70015960 - 166A0 70015AA0 set flags for each present device in A1; V0=-1 if SI error occurred - accepts: A0=, A1=p->buffer for presence flags - 16840 70015C40 generate PIFram command: request status for #channels at 80067CE1 - places command at 80067D70 - accepts: A0=??? - 1693C 70015D3C generates status list from ram PIFram output at A1 - accepts: A0=???, A1=p->target - status list format: - 0x0 2 controller type (byteswapped from PIFram) - 0x2 1 controller slot state - 0x3 1 error byte: 8-not present, 4-I/O error - 16A10 70015E10 - 16A60 70015E60 - 16AA4 70015EA4 calls 7000DF10: A0=80067DB8, A1=0, A2=0 - 16AD0 70015ED0 read or write data from PIFram: SI I/O operations - V0=0 on success, -1 otherwise - accepts: A0=mode (0-read; 1-write), A1=p->RDRAM target or source - 16B80 70015F80 V0= PIFram address.CRC for address A0; fries: AT,A0,A1,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - 16C30 70016030 V0= PIFram data.CRC for data at A0; fries: AT,A0,A1,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - accepts: A0=p->data - 16D00 70016100 sends data A3 to controller slot A1 at address A2, returning status - will not operate on blocks 1-6 - accepts: A0=p->???, A1=channel#, A2=block#, A3=p->data, SP+10= - 16F30 70016330 generate PIFram command: request write data at A2 to block A1 of controller A0's slot - places command at 80067D70 - accepts: A0=channel#, A1=block#, A2=p->data - 170B0 700164B0 reads block A2 from controller A1 to @A3 - accepts: A0=, A1=channel#, A2=block#, A3=p->data - 172F4 700166F4 generate PIFram command: request read of block A1 from controller A0's slot - places command at 80067D70 - accepts: A0=channel#, A1=block# - 17460 70016860 - 17720 70016A20 - 17770 70016A70 - 177C4 70016BC4 - 17830 70016C30 redirects to 70016C60: A0 |= 0x4000 (forces second table) - 17860 70016C60 V0= next eye intro drift - accepts: A0=previous drift value - draws from 80027FCE table if 0x4000 set - draws from 800277D0 table if 0x4000 not set - 178D0 70016CD0 - 70016D18 - 70016D70 - 70016E90 - 70016EE4 - 70016F30 - 70017370 - 700173F0 - 700176A8 - 70017720 - 700178B4 - 70017910 - 7001792C - 70017948 - 18684 70017A84 F0= double (A1<<32 | A0); fries T6,F4,SP+0,SP+4 - 1869C 70017A9C F0= float (A1<<32 | A0); fries T6,F4,SP+0,SP+4 - 70017AB4 - 70017AE8 - 18720 70017B20 A0-> COP0 status register - 18730 70017B30 V0= COP0 status register - 18740 70017B40 SI direct read: copy value from uncached address A0 to A1; V0=0 if okay or -1 if SI error - accepts: A0=SI/PIF address, A1=p->target - 18790 70017B90 SI direct write: write value A1 to uncached address A0; V0=0 if okay or -1 if SI error - accepts: A0=SI/PIF address, A1=value - 187E0 70017BE0 PI direct read: copies word from uncached hardware address A0 to A1; V0=0 if successful; fries AT,A2,T0,T1,T2,T3,T6,T7,T8,T9 - accepts: A0=hardware address, A1=p->target - A1= @(A0000000 | @80000308 [B0000000] | A0) - 18840 70017C40 initialize A1 bytes at A0 to zero - accepts: A0=p->target, A1=value - 70017CE0 - 70017D30 - 70018414 - 700184FC - 191F0 700185F0 V0= COP0 status interrupt enabled flag; fries AT,T0,T1 - unsets flag in COP0 status - 19210 70018610 Set flags A0 in COP0 status; fries T0 - 70018630 - 700186BC - 19434 70018834 increment COP0 Count by A1 - accepts: A0=???, A1=increment - 700188A8 - 19630 70018A30 V0=priority of thread A0 or cur.thread if NULL - accepts: A0=p->thread - 70018A50 - 19760 70018B60 V0=80028040: - 70018B70 - 19AD0 70018ED0 V0= RSP status register; fries T6 - 19AE0 70018EE0 A0->RSP status register; fries T6 - 70018EF0 - 19B30 70018F30 read or write (A0) A3 bytes between RSP address A1 and rdram A2; fries AT,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - returns V0=0 if set, or nonzero if not ready - sets A1->RSP_MEM_ADDR, A2->RSP_DRAM_ADDR, A3->RSP_RD or RSP_WR depending on mode - accepts: A0=mode (0-write; 1-read), A1=RSP address, A2=rdram address, A3=length - 19BC0 70018FC0 V0= TRUE if RSP Status flags 0x1C set; fries A0,T6,T7 - 19BF0 70018FF0 V0= TRUE if DPC Status DMA busy flag (0x100) set; fries A0,T6,T7 - 19C20 70019020 V0= rdram offset corresponding to TLB address A0, or -1 if invalid; fries: AT,T0,T1,T2,T3,T4,T5 - note this returns an offset, not true address starting 80/A0 - 19CE0 700190E0 0->A0+0 - 700190F0 - 70019120 - 70019164 - 700191B8 - 7001920C - 70019294 - 7001933C - 700193E0 - 1A080 70019480 ??? - uses TLB pointers at 80029830 - 70019528 1: S3=80028050 - 70019534 2: S3=800280B8 - 7001954C 3: S3=80028168 - 70019558 4: S3=80028190 - 70019540 5: S3=80028140 - 70019564 6: S3=V0+20: - 7001956C default: S3=800281B8 - 1A4C0 700198C0 - 70019960 - 70019990 - 70019AB0 - 70019C84 - 7001A030 - 7001A15C - 1B200 7001A600 ??? - uses TLB pointers at 80029850 - 7001A630 1 - 7001A6C0 2,3,5,6,default - 7001A638 4 - 7001A6A4 7 - 7001A6B4 8 - 7001A674 9 - 1B2EC 7001A6EC - 7001A900 - 7001A928 - 7001A950 - 7001AA14 - 7001AAF4 - 1B7B4 7001ABB4 displays debug messages if S2 nonzero - if S1=0 generates "\n--- ASSERTION FAULT - source - env.c, line 373\n\n" - 1BA54 7001AE54 unconditional return - 1BA5C 7001AE5C ??? uses TLB pointers at 80029968 - 7001AF74 D - 7001B0B4 B,C,10 - 7001B304 E - 7001B358 F - 7001B398 0 - 7001B3B8 default - 1C0E0 7001B4E0 - 7001B510 - 7001B5F0 - 7001B624 - 7001B6B0 - 1C400 7001B800 if 80027790 !0, V0=80027798, else V0=0; fries T6 - 7001B830 - 7001B970 - 7001B9A0 - 7001BB60 - 7001BC60 - 7001BCB4 - 7001BD34 - 1C9E8 7001BDE8 unconditional return - 7001BDF0 - 7001BE14 - 7001BE9C - 7001BFC8 - 7001C070 - 7001C0E0 - 7001C1BC - 7001C234 - 7001C27C - 7001C2F0 - 7001C360 - 1D05C 7001C45C ??? uses TLB pointers at 80029A50 - 7001C4A0 90 - 7001C7F4 80 - 7001C84C A0 - 7001C8B4 D0 - 7001C92C B0 - uses TLB pointers at 80029BD4 - 7001C994 V0=A - 7001C9F0 V0=7 - 7001CA84 V0=10 - 7001CA9C V0=40 - 7001CB48 V0=5B - 7001CC64 default - 7001CB98 C0 - 7001CBCC E0 - 7001CC64 default - 1D874 7001CC74 unconditional return - 1D87C 7001CC7C ??? uses TLB pointers at 80029C28 - 7001CCE0 0 - 7001CD8C 9 - 7001CDAC 5 - 7001CDF8 6 - 7001CE5C 16 - 7001CF6C 17 - 7001CFF4 2 - 7001D014 7 - 7001D028 F - 7001D04C 10 - 7001D0BC 11 - 7001D14C A - 7001D1B4 B - 7001D1D0 C - 7001D1EC D - 7001D23C E - 7001D24C default - 1DEA0 7001D2A0 - 7001D3A4 - 7001D414 - 7001D5A0 - 7001D690 - 1E310 7001D710 ??? - 1->800282E0, redirect to 7000D6D0: A0=80068FE8, A1=80068FE0, A2=1; 7000DF10: A0=80068FE8, A1=0, A2=0 - 1E360 7001D760 if [800282E0] not set, redirect to 7001D710 - redirect to 7000DDD0: A0=80068FE8, A1=SP+1C, A2=1 - 1E3A4 7001D7A4 redirect to 7000DF10: A0=80068FE8, A1=0, A2=0 - 7001D7D0 - 7001DA70 - 7001DFD8 unconditional return - 7001DFE0 - 1F130 7001E530 request I/O with hardware A0; read/write (A1) SP+10 bytes between hardware offset A2 and rdram A3 - accepts: A0=BSD hardware entry, A1=read/write (0,1), A2=hardware offset, A3=p->rdram, SP+10=length - 1F210 7001E610 ??? uses TLB pointers at 80029CF0 - 7001E814 A - 7001E854 B - 7001E890 E - 7001E8D8 F - 7001E920 9 - 7001E940 default - 1F5C0 7001E9C0 - 1F61C 7001EA1C generate CRC16s for 0x1C bytes of mempak data - accepts: A0=p->source, A1=@(short) CRC, A2=@(short) invert CRC - 1F684 7001EA84 ??? - called when mempak blocks 1-7 + 0x18 isn't 0001 or file corrupt - accepts: A0=p->controller packet, A1=p->data from mempak block, A2=p->buffer for new mempak block - 1FA9C 7001EE9C tests mempak blocks 1,3,4,6 for a valid entry, copying it to blocks 1,3,4,6 - returns V0=0 if OK, 4 if SI I/O error, 8 if not present, A if all CRCs invalid (corrupt mempak) - accepts: A0=p->controller packet, A1=p->data from mempak block - 1FC34 7001F034 tests validity of mempak file; if present, pulls mempak blocks 1 and 7 - 7001F290 - 7001F38C - 202AC 7001F6AC sends a block set to packet+65 to controller slot block 0x400; presumably resets device - accepts: A0=p->controller packet - 20320 7001F720 V0= TRUE if SI not ready, FALSE otherwise - 20350 7001F750 ??? - concerns distance...; fries: F0,F2,F4,F6,F8,F10,F12,F14,F16,F18 - accepts: A0=p->xyz position set1, A1=p->xyz position set2, A2=p->xyz position set3 - 203E0 7001F7E0 F0= square root of F12 [sqrt(F0)] - 7001F7F0 sets PI Domain 2 hardware entry for 64DD; V0=p->entry (80069000) - 7001F8E0 A0->COP1 Compare register - 204F0 7001F8F0 ??? - initialize ?; A1->A0+4, A2->A0+8, A3->A0+10 - accepts: A0=p->???, A1=???, A2=???, A3=??? - 7001F910 - 7001F9B8 - 7001FA70 - 7001FBF8 - 7001FD84 - 20BA8 7001FFA8 ??? - uses TLB pointers at 80029D10 - accepts: A0=???, A1=routine, A2=??? - 7001FFD4 A1=2 - 70020004 A1=3 - 70020034 A1=5 - 70020064 A1=4 - 70020094 A1=0,6 - 700200C4 A1=7 - 70020108 A1=8 - 70020184 A1=1,9 - 700201C0 - 700201D8 ??? - utilizes JAL to previously-registered routine - 70020520 - 7002053C - 21158 70020558 V0=A0+C; - 21160 70020560 unconditional return - 70020568 - 70020738 - 70020858 - 7002093C - 70020990 - 700209E8 - 70020A38 - 70020A68 - 21740 70020B40 ??? - saves A0->SP+0, A2->SP+8, A2->A1+16 - accepts: A0=???, A1=p->???, A2=(short) ??? - 70020B50 - 70020C50 - 70020CE0 - 21940 70020D40 store word A2 to offset A1 using BSD hardware entry A0 - accepts: A0=BSD hardware entry, A1=hardware offset, A2=value - 21990 70020D90 ENDPOINT - -+-+ - -RareZip decompression library -Secondary bank, assigned to rdram range -conversion factor +701CCA70 - 33590 70200000 decompress.buildtable - 33BE4 70200654 decompress.inflate - 33FD8 70200A48 decompress.type0: store - 3412C 70200B9C decompress.type1: fixed-table - 34294 70200D04 decompress.type2: dynamic-table - 347B8 70201228 decompress.table: figures out table type if present or end of file, pushing to decompressor for type - 348D8 70201348 decompress.start: presumes the first five registers filled - 349AC 7020141C V0=size of data A0 decompressed to A1 using buffer A2: sets state of decompression object and decompresses - accepts: A0=p->source, A1=p->target, A2=p->buffer - 70201474 - -data segment and registers - 34A10 70201480 RESERVED p->source - 34A14 70201484 RESERVED p->target - 34A18 70201488 RESERVED cur. offset in source - 34A1C 7020148C RESERVED decompressed data count - 34A20 70201490 RESERVED p->buffer (alias table, I think...) - 34A24 70201494 order (19 bytes) - 34A38 702014A8 length codes base (31 short values) - 34A74 702014E4 RESERVED - 34A78 702014E8 length codes extra bits (bytes) - 34A98 70201508 distance codes base (32 short values) - 34AD4 70201544 distance code extra bits (32 bytes) - 34AF4 70201564 RESERVED sample - 34AF8 70201568 RESERVED bits in sample - 34AFC 7020156C masks (12 short values) - 34B20 70201590 - 34B24 70201594 - 34B28 70201598 RESERVED - 34B2C 7020159C RESERVED - -+-+ - -conversion factor +7EFCB4D0 - 34B30: 7F000000 - 34B30 7F000000 initialize menus and data at power-on; fries AT,V0,V1,F0,F4 - 34C10 7F0000E0 - calls 7F06C460: A0=7F01F53C; 7F000518 - 34C40 7F000110 reset counters for random bodies and heads - 34D20 7F0001F0 - 34DC0 7F000290 - 34E5C 7F00032C - 34F9C 7F00046C - 35000 7F0004D0 - 35048 7F000518 - 354B0 7F000980 redirect to 7F0009A0 - 354D0 7F0009A0 - 35500 7F0009D0 unconditional return - 35510 7F0009E0 A0-> [80036414], A1-> [80036418], A2-> [8003641C]; fries AT - 35530 7F000A00 expand animation table entries; fries: V0,V1,A1,A2,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - animation source at ROM 0x124AC0 - accepts: A0=p->list of animation table entries - 355DC 7F000AAC allocate, load, and expand animation tables - 35690 7F000B60 ???; 8003C580 -> 8003C650 - 356B0 7F000B80 - 356F0 7F000BC0 unconditional return - 35700 7F000BD0 - ??? - searches image index... - 357A0 7F000C70 allocate introduction matrices - 35850 7F000D20 initialize menus or reset - 35970 7F000E40 - 359E8 7F000EB8 allocate and intialize A0 + 10 GUARDdata entries - accepts: A0= #guards; actual allocation is A0 + 0xA - 35A80 7F000F50 set new random heads and bodies - 35B50 7F001020 initialize objective register and difficulty multipliers - 0->80030978, 1.0->8002CE40, 1.0->8002CE44, 1.0->8002CE4C, 0->8002CE50 - 35B8C 7F00105C allocate false actor GUARDdata to execute global actions in setup file (1xxx type) - 35D88 7F001258 debug object load feature: loads all models mentioned in action block table - detects commands 04,1B,BD,BE,BF,C0 - 35F3C 7F00140C debug weapon load feature: load each model in table at 8002A23C - 35FE0 7F0014B0 initialize sound effects registers [80069B70]; fries V0,V1 - 36010 7F0014E0 - 36100 7F0015D0 allocate lookup buffers - 36280 7F001750 reinitializes stuff when switching menus - 7F001910 - 7F001928 - 7F001940 - 36488 7F001958 write monitor animation control blocks to 80075B98 - 36638 7F001B08 initialize 80071E00-80071E78 - 36680 7F001B50 - 36704 7F001BD4 - 368CC 7F001D9C prepares and loads object - 36958 7F001E28 inhibit respawn flag: "The Living Daylights" - 36984 7F001E54 inhibit respawn flag: "Man with the Golden Gun" - 36B30: 7F002000 - 37268 7F002738 expand type 08 object; sets guard and MP weapons - 373A0 7F002870 expansion routine for all 8 MP weapons - 374D8 7F0029A8 - 3754C 7F002A1C redirect to 7F001D9C; used by 04 key object expansion - REMOVED IN REVISED ROMS - 3756C 7F002A3C - - 37788 7F002C58 expand type 0D object - autoturret - accepts: A0=, A1=, A2= - 3794C 7F002E1C redirect to 7F001D9C - 3796C 7F002E3C - - 38720 7F003BF0 stage loading code; contains setup, object parsing, and when finished playing cleans up memory - tests memory string for -nochr, -noprop, -noobj - 38B30: 7F004000 Object data expansion routines: - uses TLB pointer table at 8004EF68 - 38EB8 7F004388 12 actor attribute - 38F10 7F0043E0 01 door - 38EEC 7F0043BC 09 actor - 38F40 7F004410 02 door scale - 38F64 7F004434 08 item; calls 7F002738 - 38F98 7F004468 04 key - 38FCC 7F00449C 11 hat - 39000 7F0044D0 06 surveillance camera - 39030 7F004500 0D autogun - 39060 7F004530 0C rack - 39090 7F004560 0A single-screen display - 390C0 7F004590 0B multi-screen display - 390F0 7F0045C0 15 body armour - 39144 7F004614 2F tinted glass - 39260 7F004730 03, 05, 07, 24, 29, 2A, 2B - 39290 7F004760 14 ammo box - 39344 7F004814 2D tank - 393D4 7F0048A4 27 wheeled vehicle - 39484 7F004954 28 aircraft - 394FC 7F0049CC 16 tag - 39530 7F004A00 25 rename - 39564 7F004A34 23 solo briefing text entry; calls 7F004FA0 - 39574 7F004A44 2E viewport position - 395F4 7F004AC4 17 create objective; calls 7F004FB8 - 39604 7F004AD4 20 subobjective: enter room; calls 7F004FF4 - 39614 7F004AE4 21 subobjective: deposit in room; calls 7F00500C - 39624 7F004AF4 1E subobjective: photograph target - 3962C 7F004AFC 0E, 0F, 10, 13, 18-1D, 1F, 22, 26, 2C - uses TLB pointer table at 8004F02C - 39940 [7F004E10] reset 80075D00 pointers when unloading stage - 399B0 [7F004E80] quit stage loader - 399F0 7F004EC0 - - 39AB8 7F004F88 set A0's parent (A0+8) and set as current tag entry [80075D80]; fries: V0,T6 - accepts: A0=p->setup type 16 entry - 39AD0 7F004FA0 set setup briefing text entry A0's parent (A0+C) and store as final entry [80075D84]; fries V0,T6 - accepts: A0=p->setup briefing entry (setup type 23) - 39AE8 7F004FB8 add pointer to objective A0 in 80075D30 table - also sets objective# to 800322F0 if highest - accepts: A0=p->setup objective entry (setup type 17) - 39B24 7F004FF4 set A0's parent (A0+C) and set as current "enter room" subobjective entry [80075D88]; fries: V0,T6 - accepts: A0=p->setup type 20 entry - 39B3C 7F00500C set A0's parent (A0+10) and set as current "object depositted in room" subobjective entry [80075D8C]; fries: V0,T6 - accepts: A0=p->setup type 21 entry - 39B54 7F005024 set A0's parent (A0+C) and set as current "photograph object" subobjective entry [80075D90]; fries: V0,T6 - accepts: A0=p->setup type 1E entry - 39B70 7F005040 - 39C00 7F0050D0 initialize current player's BONDdata and statistics - 39F80 7F005450 - 3A050 7F005520 - 3A064 7F005534 - 3A070 7F005540 - 3A154 7F005624 - 3A240 7F005710 sets weapon models for thrown/generated objects: calls next 13 entries - 3A270 7F005740 03 A1=00BA throwing knife - 3A278 7F005748 18 A1=00CB grenade launcher round - 3A280 7F005750 19 A1=00CA rocket - 3A288 7F005758 1A A1=00C4 grenade - 3A290 7F005760 1B A1=00C9 timed mine - 3A298 7F005768 1C A1=00C8 proximity mine - 3A2A0 7F005770 1D A1=00C7 remote mine - 3A2A8 7F005778 20 A1=00CA rocket - 3A2B0 7F005780 21 A1=00E2 bombcase - 3A2B8 7F005788 22 A1=0111 plastique - 3A2C0 7F005790 2F A1=00F5 bug - 3A2C8 7F005798 30 A1=00F6 microcamera - 3A2CC 7F00579C default - 3A2F4 7F0057C4 load camera/intro type value: calls next 9 entries - 3A5AC 7F005A7C 0 spawn point - 3A620 7F005AF0 1 weapon - 3A6A8 7F005B78 2 ammo - 3A6D0 7F005BA0 3 swirling intro camera - 3A758 7F005C28 4 intro animation - 3A76C 7F005C3C 5 cuff/character - 3A780 7F005C50 6 fixed cameras - 3A844 7F005D14 7 watch time - 3A8BC 7F005D8C 8 credits - 3AB30: 7F006000 - 3AD20 7F0061F0 - 3AD8C 7F00625C allocate and initialize 0x1E + A0 inventory entries for cur. player - accepts: A0=#additional inventory entries - 3ADF0 7F0062C0 - 3AEBC 7F00638C - 3B2F0 7F0067C0 - 3B3C0 7F006890 - 3B8C0 7F006D90 allocate explosion, smoke, casings, scorch, and impact buffers - 3BCB0 7F007180 - 3BDC0 7F007290 - 3BDE0 7F0072B0 - 3BE28 7F0072F8 disable on-screen text(?); sets 0->BONDdata+12B4, 0->BONDdata+12B5 - 3BE50 7F007320 set -mt texture allocation - 3BEE0 7F0073B0 - - 7F007700 - 7F007770 - 7F007800 - 7F007920 - 3C4A0 7F007970 unconditional return - 3C4B0 7F007980 - 3C570 7F007A40 - accepts: A0=p->display list - 3C6C4 7F007B94 insert sight backdrop in Eye intro - accepts: A0=p->display list - 7F007CC8 - 3C8BC 7F007D8C insert sniper sight in Eye intro - accepts: A0=p->display list - 7F007E70 - - 3CB30: 7F008000 - - 3CDF8 7F0082C8 insert Bond in Eye intro - accepts: A0=p->display list - 3CFF0 7F0084C0 load and display Rare logo - 3D688 7F008B58 - - 3D900 7F008DD0 - ??? - loads 0x2A4D50 - 7F008E80 - - 7F009254 - - 7F009744 - 3E290 7F009760 writes text to screen at absolute coordinates - if english, redirects to 7F0ADABC - if japanese, redirects to 7F0AE6EC using background colour at 8002A9B0 - accepts: A0=p->display list target, A1=p->x position, A2=p->y position, A3=p->text, - SP+10=p->2nd font table, SP+14=p->1st font table, SP+18=font colour, - SP+1C=clip width, SP+20=clip height, - SP+24=y offset, SP+28=x offset - 3E378 7F009848 V0= TRUE if cheat A0 is available; jumps to unlock detection routines - 7F009874 default - nonmenu cheats - 7F00987C Invincible - 7F00989C All Guns - 7F0098BC No Radar - 7F0098DC Fast Animation - 7F0098FC Bond Invisible - 7F00991C Infinitie Ammo - 7F00993C DK Mode - 7F00995C Tiny Bond - 7F00997C Slow Animation - 7F00999C Paintball Mode - 7F0099BC Silver PP7 - 7F0099DC Gold PP7 - 7F0099FC Enemy Rockets - 7F009A1C 2x Rocket L. - 7F009A3C 2x Grenade L. - 7F009A5C 2x RC-P90 - 7F009A7C 2x Throwing Knife - 7F009A9C 2x Hunting Knife - 7F009ABC 2x Laser - 7F009ADC Turbo Mode - 7F009AFC (Cradle Completed) - 7F009B10 (Aztec Completed) - 7F009B24 (Egypt Completed) - 7F009B38 DO NOT USE - infinite loop - 7F009B40 return for all types - 3E680 7F009B50 V0= p->name of player A0's favored weapon in hand A1 - calls: 7F0670DC: 800696F0 + player*8 + hand*4 - accepts: A0=player#, A1=hand (0-left : 1-right) - 3E6B4 7F009B84 ??? - handles control stick tracking for menus - 3EA38 7F009F08 loads and draws selected icon for folder select [8002A918] - 0=sight, 1=copy, 2=delete - 3EB30: 7F00A000 - 3EBB0 7F00A080 Add tab 1 ("START")? - 3ED14 7F00A1E4 V0=TRUE if cursor is on tab 1; fries AT,F4,F6,F8,F10 - h.pos>390.0 & v.pos<=130.5 (800519D8) - 3ED68 7F00A238 Add tab 3 ("PREVIOUS") - 3EECC 7F00A39C V0=TRUE if cursor is on tab 3; fries AT,F4,F6,F8,F10 - h.pos>390.0 & v.pos>=223.0 - 3EF20 7F00A3F0 set cursor position to tab 2; fries AT,F4,F6 - h.pos=399.0 (800519DC), v.pos=144.0 - 3EF44 7F00A414 Add tab 2 ("NEXT") - 3F0A8 7F00A578 V0=TRUE if cursor is on tab 2; fries AT,F0,F4,F6,F8,F10 - h.pos>400.0 & 130.5 (800519E0)text, SP+18=p->2nd font table, SP+1C=p->1st font table - uses 7F0ADABC to write text - 3F410 7F00A8E0 menu 00 constructor: legal screen - 3F61C 7F00AAEC 0->menu timer [8002A8CC]; fry AT - 3F628 7F00AAF8 unconditional return to RA - 3F630 7F00AB00 menu 17 interface: switch screens - 3F6D8 7F00ABA8 menu 17 constructor: switch screens - 3F6F8 7F00ABC8 initialize menu 01: Nintendo logo - 7F00ACA4 - 3F7F8 7F00ACC8 menu 01 interface: Nintendo logo - 3F8C8 7F00AD98 menu 01 constructor: Nintendo logo - 3FB94 7F00B064 initialize menu 02: Rare logo - 3FBD4 7F00B0A4 - unconditional return to RA - 3FBDC 7F00B0AC menu 02 interface: Rare logo - 3FC64 7F00B134 menu 02 constructor: Rare logo - 3FC84 7F00B154 initialize menu 03: Eye intro - 7F00B190 - 3FCE0 7F00B1B0 menu 03 interface: Eye intro - 3FD68 7F00B238 menu 03 constructor: Eye intro - 3FD88 7F00B258 initialize menu 04: GoldenEye splash screen - 3FE34 7F00B304 set menus have run [8002A930=0] and ignore title splash on skip [8002A960=0]; fries AT,A0 - calls: 7F06C234 - 3FE60 7F00B330 menu 04 interface: GoldenEye splash screen - 3FFAC 7F00B47C menu 04 constructor: GoldenEye splash screen - 40254 7F00B724 disable all switches in object A0 (hide all) - 402F0 7F00B7C0 sets item A1 in object instance A0 to mode A2 (1=visible:0=invisible) - accepts: A0=p->obj. instance, A1=#offset in header for item, A2=in/visible (0:1) - 40338 7F00B808 selects and loads Bond picture (A1) used on folders - accepts: A0=p->obj. instance, A1=[beta] selected Bond (0-3) - 403DC 7F00B8AC loads walletbond, used to construct main menus - 7F00B990 - 40518 7F00B9E8 initialize menu 05: file select screen (4 folders) - 40610 7F00BAE0 - 4064C 7F00BB1C V0= chapter briefing entry# for briefing A0 - 40698 7F00BB68 ??? - toggle deletion minimenu on folder A0 - accepts A0=folder# - 406FC 7F00BBCC menu 05 interface: file select screen (4 folders) - 40B30: 7F00C000 - 40EB4 7F00C384 V0= p->name of difficulty A0 - 40F38 7F00C408 menu 05 constructor: file select screen (4 folders) - 41D80 7F00D250 initialize menu 06: main folder menu (mode select menu) - 41DC0 7F00D290 unconditional return - 41DC8 7F00D298 menu 06 interface: main folder menu - 42118 7F00D5E8 - 4232C 7F00D7FC main folder menu - set cursor position to mode setting A0; fries: AT,T6,T7,F4,F6,F8 - x=126.0, y=226.0+A0*32.0 - accepts: A0=mode setting (0-solo, 1-multi, 2-cheats) - 42358 7F00D828 menu 06 constructor: main folder menu - 427F0 7F00DCC0 V0=briefing for solo stage A0 or -1; fries V1,T6,T7,T8 - also: T6=stage text ID - 4283C 7F00DD0C detect if solo stage A0 completed on difficulty A1 in current eeprom folder; redirects to 7F01E2C0 - uses briefing data, called on solo stage select - 42890 7F00DD60 V0=highest unlocked difficulty for solo stage A0 - accepts: A0=solo stage# (Dam=0, Facility=1, etc.) - 42980 7F00DE50 initialize menu 07: solo mission select - 429E0 7F00DEB0 unconditional return; used at 7F01A898 - 429E8 7F00DEB8 menu 07 interface: solo mission select - 42B30: 7F00E000 - 42F10 7F00E3E0 set cursor position to stage A0 on solo mission select page; fries AT,V0,T0,T1,T6,T7,T8,T9,F4,F6,F8,F10 - 42F88 7F00E458 menu 07 constructor: solo mission select - 432B0 7F00E780 initialize menu 08: mission objectives - 432E8 7F00E7B8 unconditional return - 432F0 7F00E7C0 menu 08 interface: mission objectives - 435EC 7F00EABC print current solo briefing stage name to screen - accepts: A0=p->display list, A1=string buffer (sprints to this address) - 43894 7F00ED64 set cursor position for difficulty A0 on selection page - 438C8 7F00ED98 menu 08 constructor: mission objectives - 43E30 7F00F300 initialize menu 09: 007 options and tabs, loading folder resources - 43E9C 7F00F36C unconditional return; used at 7F01A8D0 - 43EA4 7F00F374 menu 09 interface: 007 options - 442C8 7F00F798 menu 09 constructor: 007 options - 44B30: 7F010000 - 44BEC 7F0100BC V0= player's control style; A0=player# 0-3, fry T6 - 44C00 7F0100D0 V0= TRUE if MP stage entry A0 is unlocked; fry AT,V0,V1,A0,A1,T6,T7,T8,T9 - 44CA0 7F010170 handles selecting game length under different scenarios - 44D08 7F0101D8 copy aim settings to player data; fries AT,A0,V0,V1,T6,T7,T8 - 44D6C 7F01023C advance aim settings selection; fries AT,A0,V0,V1,T6,T7,T8 - 44DB0 7F010280 set 64 MP characters available; fry AT,T6 - 44DC0 7F010290 V0= selected MP # players or 1; fry AT,T6 (T6=mode) - 44DEC 7F0102BC V0= MPchar head; A0=player# 0-3, fry A0,V0,V1,T6,T7,T8 - 44E3C 7F01030C V0= MPchar gender; A0=player# 0-3, fry A0,V0,V1,T6,T7,T8 - 44E8C 7F01035C V0= MPchar body; A0=player# 0-3, fry A0,V0,V1,T6,T7,T8 - 44EDC 7F0103AC F0= player handicap; A0=player# 0-3, fry AT,A0,T6,T7,T8,F0 - 44F00 7F0103D0 F0= MPchar height; A0=player# 0-3, fry AT,A0,V0,T6,T7,T8,F0 - 44F50 7F010420 V0= time f/ selected MP length; fries T6,T7 (T6=#selected) - 44F74 7F010444 V0= score f/ selected MP length; fry T6,T7 (T6=#selected) - 44F98 7F010468 reset MP options for selected scenario [A0] - 7F0104DC set normal and team scenario specific settings - 7F01051C set you only live twice scenario specific settings - 7F010550 set the living daylights scenario specific settings - 7F010594 set man with the golden gun scenario specific settings - 7F0105C8 set license to kill scenario specific settings - 45138 7F010608 initialize MP menu for current scenario and player count - accepts: A0=#players selected - 4526C 7F01073C initialize menu 0E: multiplayer options - 45370 7F010840 unconditional return - 45378 7F010848 menu 0E interface: multiplayer options - [7F010DD8] press A: start stage - [7F010DF4] press A: 'Players' selected - [7F010E34] press A: 'Scenario' selected - [7F010E50] press A: 'Level' selected - [7F010E6C] press A: 'Game Length' selected - [7F010E84] press A: 'Select Character' selected - [7F010EA0] press A: 'Weapons' selected - [7F010EB8] press A: 'Health' selected - [7F010ED4] press A: 'Control Style' selected - [7F010EF0] press A: 'Aim' selected - [7F010F04] return - 45A40 7F010F10 menu 0E constructor: multiplayer options - 46708 7F011BD8 V0= #players who have selected MP character entry A0; fries AT,V1,A0,A1,A2,A3,T0,T6,T7,T8,T9 - 467EC 7F011C3C initialize menu 0F: MP character selection window - 469FC 7F011ECC unconditional return - used at 7F01A978 - 46A04 7F011ED4 menu 0F interface: character select - 46B30: 7F012000 - 7F0122A8 - 7F01231C - 472C4 7F012794 menu 0F constructor: character select - 47960 7F012E30 initialize menu 10: handicap select - 479EC 7F012EBC unconditional return - used at 7F01A9B0 - 479F4 7F012EC4 menu 10 interface: handicap select - 47CAC 7F01317C menu 10 constructor: handicap select - 480A4 7F013574 initialize menu 11: control style - 48130 7F013600 unconditional return - used at 7F01A9CC - 48138 7F013608 menu 11 interface: control style - 484B0 7F013980 menu 11 constructor: control style - 488A8 7F013D78 initialize menu 12: multiplayer stage select menu and load folder resources - calls: 7F00B8AC - 488FC 7F013DCC unconditional return - used at 7F01A9E8 - 48904 7F013DD4 menu 12 interface: multiplayer stage select - 48B30: 7F014000 - 48B80 7F014050 menu 12 constructor: multiplayer stage select - 49288 7F014758 V0= MP scenario - 49294 7F014764 initialize menu 13: scenario select folder tabs and load folder resources - calls: 7F00B8AC - 492E0 7F0147B0 unconditional return - used at 7F01A95C - 492E8 7F0147B8 menu 13 interface: scenario select - 49578 7F014A48 menu 13 constructor: scenario select - 497B8 7F014C88 V0= player A0's team/scenario item flag (stats+69); fries T6 - 497D4 7F014CA4 A1->player A0's team/scenario item flag (stats+69); fries AT,T6 - 497F0 7F014CC0 initialize menu 14: team setup - resets folder tab selection and highlight - 3->80069788 if scenario 2vs1; else 2->80069788 - 0->8002B560 - jumps to 7F00B8AC - 49870 7F014D40 unconditional return - used at 7F01A994 - 49878 7F014D48 menu 14 interface: team setup - 49C68 7F015138 menu 14 constructor: team setup - 4A040 7F015510 A0->current menu 0A briefing page [8002A914] - 4A050 7F015520 load briefing and text for selected stage - returns V0= #entries in briefing - 4A124 7F0155F4 initialize menu 0A: mission briefings - 7F015640 - 4A1CC 7F01569C menu 0A interface: mission briefings - 4A538 7F015A08 print objectives and their status to main menus - accepts: A0=p->display list, A1=y position, A2=p->string buffer, A3=1-print status - 4A8A4 7F015D74 menu 0A constructor: mission briefings - 4AB30: 7F016000 - 4AB94 7F016064 initialize menu 0B: stage active - calls: 70006950: A0=stage# [8002A8F4]; 7F0BFC1C: A0=difficulty [8002A8FC] - 4ABC4 7F016094 initialize menu 0C: mission failed - 4AC38 7F016108 unconditional return - 4AC40 7F016110 menu 0C interface: mission failed - 4AE4C 7F01631C - - 4AF1C 7F0163EC menu 0C constructor: mission failed - 4B1AC 7F01667C initialize menu 0D: mission complete - 4B200 7F0166D0 unconditional return - 4B208 7F0166D8 menu 0D interface: mission complete - 4B538 7F016A08 menu 0D constructor: mission complete - 4C680 7F017B50 initialize menu 15: cheat menu - builds 800697F0 cheat menu table using available cheats - 4C724 7F017BF4 - ??? - involves selected cheat options - 4C7B8 7F017C88 - - 4C7B8 7F017C88 menu 15 interface: cheat menu - 4CA8C 7F017F5C menu 15 constructor: cheat menu - 4CB30: 7F018000 - 4CF68 7F018438 initialize menu 16: no controller warning - unconditional return - used at 7F01AC80 - 4CF70 7F018440 unconditional return - used at 7F01AA20 - 4CF78 7F018448 menu 16 interface: no controller - unconditional return - 4CF80 7F018450 menu 16 constructor: no controller warning - 4D1A0 7F018670 if A0 TRUE, play extended actor intro [8002B5FC] and do not play intro movie [8002B5E8] - 4D1CC 7F01869C initialize menu 18: actor intro - 4D34C 7F01881C use blue suit (17) w/ solo head (4B) for Bond - 4D360 7F018830 use camo (18) w/ solo head (4B) for Bond - 4D374 7F018844 use snowsuit (19) w/ solo head (4B) for Bond - 4D388 7F018858 use tux (05) w/ multi head (4E) for Bond - 4D3F0 7F0188C0 construct character for cast intro - calls true random head - 4DA48 7F018F18 - 4DA90 7F018F60 menu 18 interface: actor intro - 4DE58 7F019328 menu 18 constructor: actor intro - 4EB30: 7F01A000 - 4EECC 7F01A39C initialize menu 19: beta - Spectrum emulator - 4EFB0 7F01A480 unconditional return - used at 7F01AA58 - 4EFB8 7F01A488 menu 19 interface: beta - Spectrum emulator - 4F010 7F01A4E0 menu 19 constructor: beta - Spectrum emulator - 4F104 7F01A5D4 set to menu A0 in mode A1 (0-current,1-return); fry AT,T6,T7 - 4F140 7F01A610 V0= current menu - 4F14C 7F01A61C menu update, initialization, and interface handler - 7F01AAC8 menu 00 initialization - redirect to 7F00A5E8 - 7F01AADC menu 01 initialization - redirect to 7F00ABC8 - 7F01AAF0 menu 02 initialization - redirect to 7F00B064 - 7F01AB04 menu 03 initialization - redirect to 7F00B154 - 7F01AB18 menu 04 initialization - redirect to 7F00B258 - 7F01AB2C menu 05 initialization - redirect to 7F00B9E8 - 7F01AB40 menu 06 initialization - redirect to 7F00D250 - 7F01AB54 menu 07 initialization - redirect to 7F00DE50 - 7F01AB68 menu 08 initialization - redirect to 7F00E780 - 7F01AB7C menu 09 initialization - redirect to 7F00F300 - 7F01AB90 menu 0A initialization - redirect to 7F0155F4 - 7F01ABA4 menu 0B initialization - copies stage and difficulty settings; redirect to 7F016064 - 7F01ABB8 menu 0C initialization - redirect to 7F016094 - 7F01ABCC menu 0D initialization - redirect to 7F01667C - 7F01ABE0 menu 0E initialization - redirect to 7F01073C - 7F01ABF4 menu 13 initialization - redirect to 7F014764 - 7F01AC08 menu 0F initialization - redirect to 7F011C3C - 7F01AC1C menu 14 initialization - redirect to 7F014CC0 - 7F01AC30 menu 10 initialization - redirect to 7F012E30 - 7F01AC44 menu 11 initialization - redirect to 7F013574 - 7F01AC58 menu 12 initialization - redirect to 7F013D78 - 7F01AC6C menu 15 initialization - redirect to 7F017B50 - 7F01AC80 menu 16 initialization - redirect to 7F018438 - 7F01AC94 menu 18 initialization - redirect to 7F01869C - 7F01ACA8 menu 19 initialization - redirect to 7F01A39C - 7F01ACB8 menu 17 initialization - uses TLB table at 80051C1C for interface reroute - 7F01ACDC menu 00 interface reroute - 7F01ACEC menu 17 interface reroute - 7F01ACFC menu 01 interface reroute - 7F01AD0C menu 02 interface reroute - 7F01AD1C menu 03 interface reroute - 7F01AD2C menu 04 interface reroute - 7F01AD3C menu 05 interface reroute - 7F01AD4C menu 06 interface reroute - 7F01AD5C menu 07 interface reroute - 7F01AD6C menu 08 interface reroute - 7F01AD7C menu 09 interface reroute - 7F01AD8C menu 0A interface reroute - 7F01AD9C menu 0C interface reroute - 7F01ADAC menu 0D interface reroute - 7F01ADBC menu 0E interface reroute - 7F01ADCC menu 13 interface reroute - 7F01ADDC menu 0F interface reroute - 7F01ADEC menu 14 interface reroute - 7F01ADFC menu 10 interface reroute - 7F01AE0C menu 11 interface reroute - 7F01AE1C menu 12 interface reroute - 7F01AE2C menu 15 interface reroute - 7F01AE3C menu 16 interface reroute - 7F01AE4C menu 18 interface reroute - 7F01AE5C menu 19 interface reroute - 7F01AE6C menu 0B interface - [7F01AEF0] return - 4FA2C 7F01AEFC menu construction - 7F01AF34 menu 00 constructor reroute - 7F01AF44 menu 17 constructor reroute - 7F01AF54 menu 01 constructor reroute - 7F01AF64 menu 02 constructor reroute - 7F01AF74 menu 03 constructor reroute - 7F01AF84 menu 04 constructor reroute - 7F01AF94 menu 05 constructor reroute - 7F01AFA4 menu 06 constructor reroute - 7F01AFB4 menu 07 constructor reroute - 7F01AFC4 menu 08 constructor reroute - 7F01AFD4 menu 09 constructor reroute - 7F01AFE4 menu 0A constructor reroute - 7F01AFF4 menu 0C constructor reroute - 7F01B004 menu 0D constructor reroute - 7F01B014 menu 0E constructor reroute - 7F01B024 menu 13 constructor reroute - 7F01B034 menu 0F constructor reroute - 7F01B044 menu 14 constructor reroute - 7F01B054 menu 10 constructor reroute - 7F01B064 menu 11 constructor reroute - 7F01B074 menu 12 constructor reroute - 7F01B084 menu 15 constructor reroute - 7F01B094 menu 16 constructor reroute - 7F01B0A4 menu 18 constructor reroute - 7F01B0B4 menu 19 constructor reroute - 7F01B0C0 menu 0B - no reroute - 4FC04 7F01B0D4 - fill - 7F01B0E0 - 7F01B134 - 7F01B1C8 - 7F01B240 - 7F01B6E0 - 50608 7F01BAD8 - fill - 7F01BAE0 - 7F01BFF8 - 50B30: 7F01C000 - 50C00 7F01C0D0 insert image DL, stats at 800232A8 - 7F01C1A4 - 7F01C284 V0=state of bleeding animation, ???, probably sets red screen animation uses data at 8002BB30 - accepts: A0=start(0) or stop(1) animation - 7F01C400 - accepts: A0=p->display list - 7F01C670 - 7F01CA18 - 51610 7F01CAE0 decrypts red bleeding animation binaries - accepts: A0=p->source, A1=width, A2=height, A3=p->target, SP+10=p->address for base offset value - 7F01CC94 - 7F01CCEC - 7F01CEEC - 7F01D02C - 7F01D16C - 7F01D1C0 - 7F01D2B0 F0= reaction speed 007 modifier - 7F01D2E8 F0= health 007 modifier - 7F01D324 F0= damage 007 modifier - 7F01D360 F0= accuracy 007 modifier - 7F01D39C - ??? - probably saves current completion time to eeprom - 52030 7F01D500 uses current eeprom folder to set options at start of game; redirects to 7F01F030, A0=folder# - 52054 7F01D524 redirects to 7F01F184, A0=folder# - 52078 7F01D548 redirects to 7F01F29C, A0=folder#; possibly copies working copy to permanent - 5209C 7F01D56C [beta] would have ret. V0=bond for cur. folder; now A0=folder# - redirects to 7F01EBC0, A0=folder# - 520C0 7F01D590 A0-> folder# (8002A8E8); fries AT - 520CC 7F01D59C A0-> difficulty (8002A8FC); fries AT,V0(difficulty) - note: invalid difficulties are forced to 0 (agent) - 5211C 7F01D5EC set stage A0, mode solo, p->briefing data (8002A8F8); fries AT,V0,V1,T6,T7,T8 - 5214C 7F01D61C V0= p->eeprom file redirects to 7F01F394, A0=folder# - 52174 7F01D644 - ??? copies folder# to 8002A8EC, sets current to 64, redirects to 7F01F45C - loads eeprom file to temporary buffer, for demos especially - 521B0 7F01D680 sets favored items for cur.player; fries V0,V1,T6,T7,T8,T9 - writes values to appropriate 800696F0 register - accepts: A0=right item, A1=left item - 521F0 7F01D6C0 redirect to 7000C6FC - 7F01D6E0 - 7F01D758 - 7F01D7A0 - 7F01D840 - - 523F8 7F01D8C8 V0= eeprom A0's folder# [eeprom+8's & 0x7]; fries T6 - accepts: A0=p->eeprom folder - 52408 7F01D8D8 set eeprom A0's folder# to A1 [eeprom+8's & 0x07]; fries T0,T6,T8,T9 - accepts: A0=p->eeprom folder, A1=value (0-7) - 52424 7F01D8F4 V0= eeprom+8's & 0x18 value (0-3); fries T6 - accepts: A0=p->eeprom folder - 52434 7F01D904 reset eeprom+8's & 0x18 value to A1; fries T0,T1,T6,T8,T9 - accepts: A0=p->eeprom folder, A1=value (0-3) - 52454 7F01D924 V0= selected Bond [eeprom+8's & 0x60]; fries T6 - accepts: A0=p->eeprom folder - 52464 7F01D934 set selected Bond to A1 [eeprom+8's & 0x60]; fries T0,T1,T6,T8,T9 - accepts: A0=p->eeprom folder, A1=value (0-3) - 52484 7F01D954 V0= TRUE if eeprom+8's & 0x80 flag set (0<[A0+8]&0x80); fries T6 - accepts: A0=p->eeprom folder - 52494 7F01D964 A1 sets (1) or unsets (0) & 0x80 flag in eeprom+8; fries T6,T7,T8,T9 - accepts: A0=p->eeprom folder, A1=mode (0-unset:1-set) - 524C0 7F01D990 V0= completion time for stage A1 on difficulty A2 - accepts: A0=p->eeprom folder, A1=stage#(0-13), A2=difficulty(0-3) - fries: AT,V0,V1,A0,A3,T0 - 52614 7F01DAE4 - ??? - accepts: A0=, A1=solo stage#, A2=difficulty, A3=time - 7F01DC20 - 52790 7F01DC60 V0= TRUE if stage A1 completed on difficulty A2 - accepts: A0=p->eeprom folder, A1=stage#(0-13), A2=difficulty(0-3) - 527E0 7F01DCB0 - ??? - accepts: A0=, A1=solo stage#, A2=difficulty, A3=max completion time - 52850 7F01DD20 V0= TRUE if cheat A1 in eeprom folder A0 is unlocked - 7F01DD74 - - 528F4 7F01DDC4 V0= p->eeprom folder A0; fries AT,V0,A0,T6 - 7F01DE50 - 7F01DEB4 - 7F01DF90 - 52B30: 7F01E000 - 52DBC 7F01E28C V0= TRUE if A0 is a valid folder number (0-3 or 64) - 52DF0 7F01E2C0 V0= TRUE if stage A1 complete on difficulty A2 in eeprom folder A0 - returns 1 if this was the highest difficulty unlocked - returns 3 if this was the highest difficulty completed - 53034 7F01E504 - 53128 7F01E5F8 - ??? - unlock stage A1 in folder A0 on difficulty A2 - accepts: A0=folder#, A1=solo stage#, A2=difficulty(?), A3=??? - 7F01E760 - ??? - probably sets current completion time for stage A1 in folder A0 - accepts: A0=folder#, A1=solo stage# - 533A4 7F01E874 returns the highest stage and difficulty completed for eeprom folder A0 - accepts: A0=eeprom folder#, A1=p->ret. stage#, A2=p->ret. difficulty - 53444 7F01E914 V0= TRUE if Egypt completed in eeprom folder A0 on any difficulty - 534C8 7F01E998 V0= TRUE if Egypt completed on any difficulty in any folder - 53524 7F01E9F4 V0= TRUE if Cradle completed in eeprom folder A0 on any difficulty - 5358C 7F01EA5C V0= TRUE if Aztec completed in eeprom folder A0 on secret or 00 agent - 535D8 7F01EAA8 V0= TRUE if Egypt completed in eeprom folder A0 on 00 agent - 53600 7F01EAD0 V0= TRUE if Cradle completed on any difficulty in any folder - 53650 7F01EB20 V0= TRUE if Aztec completed on secret or 00 agent in any folder - 536A0 7F01EB70 V0= TRUE if Egypt completed on 00 agent in any folder - 536F0 7F01EBC0 [beta] V0=selected Bond for folder A0 - A0->SP+0, V0=0 - 536FC 7F01EBCC set selected bond for folder A0 to 0 (Brosnan); fries AT,T6 - [beta] set selected Bond to A1 for folder A0 (table at 8002C510) - 0->entry A0 (0-3) in table at 8002C510, A1->SP+4 - 53724 7F01EBF4 - ??? A0->SP+0 - 5372C 7F01EBFC - ??? A0->SP+0 - 53734 7F01EC04 delete eeprom folder# A0 - 7F01ED10 - - 53A40 7F01EF10 updates eeprom controller config & options flags with current solo watch settings - accepts: A0=p->eeprom file - 53B60 7F01F030 - ??? copies volume, screen+ratio settings at start of MP game from eeprom folder A0... - 53CB4 7F01F184 - ??? either deletes or updates eeprom file A0 - 53DCC 7F01F29C update eeprom: copy eeprom file A0 or eeprom @ 8002C840 to stack, sets folder number - [beta] - selected Bond doesn't match the 0x60 value, set it to the selected Bond - 53EC4 7F01F394 copy eeprom file A0's data to A1, or if invalid file# copy a blank file - A0=folder#, A1=p->target eeprom data - 53F8C 7F01F45C copy eeprom file A0's data from A1 to buffer (80069B00) - A0=folder#, A1=p->target eeprom data - 53FD0 7F01F4A0 V0=TRUE if 007 mode unlocked: 007 flag set in eeprom folder A0 or all 00 stages complete - 54060 7F01F530 V0= # guards [8002CC68] - 5406C 7F01F53C V0=p->allocated block for A0 vertices; fries V0,A2,T6,T7,T8 - redirect to 7F0BD714: A0<<4 - 5408C 7F01F55C A0->show patrols debug flag [8002CC5C]; fry AT - 54098 7F01F568 V0=show patrols debug flag [8002CC5C] - 540A4 7F01F574 - 54118 7F01F5E8 - set or unset GUARDdata+12 0100 flag; fries: T6,T7,T8,T9 - accepts: A0=p->GUARDdata, A1=mode (0=set,1=unset) - 7F01F614 - - 7F01FC10 - - 54AF0 7F01FFC0 returns V0=next available guard ID#; fries AT,A0,A1,A2,V0,V1,T6 - 54B30: 7F020000 - 54B48 7F020018 - 54BEC 7F0200BC initializes GUARDdata using set values - accepts: A0=p->pos.data (8006), A1=p->GUARDdata, A2=p->(float)xyz position, A3=(float) rotation(?), SP+10=p->tile, SP+14=p->action block or NULL - 54EE8 7F0203B8 append (and replace) newly-initialized GUARDdata entry using set values - accepts: A0=p->GUARDdata, A1=p->(float)xyz position, A2=(float) rotation, A3=p->tile, SP+10=p->action block or NULL - calls 7F0200BC if 7F03A430 successfully generates an entry - 54F44 7F020414 ???; disables sounds attached to player, then something else - accepts: A0=p->BONDdata.pos.data - 55070 7F020540 F12->animation speed. sets to loaded guards as well - 55114 7F0205E4 F0= animation speed [8002C900]; fry AT - 7F0205F0 - - 56650 7F021B20 - ??? - A0=p->GUARDdata - 7F021BB4 - - 56B30: 7F022000 - - - 7F022E1C - 7F022E24 - - 57AF8 7F022FC8 V0= p->GUARDdata if guard# A0 is loaded; fries AT,V1,A0,A1,A2,A3,T6,T7 - 57B5C 7F02302C V0= p->position data of item in hand A1 (0-R,1-L) listed at p->GUARDdata A0; fries T6,T7 - 57B6C 7F02303C V0= TRUE if a weapon is in hand A1 (0-R,1-L) of p->GUARDdata A0; fries V1,A0,A1,T6,T7 - if item's 'gadget' attribute set, will return FALSE - 7F02308C - - 57DC0 7F023290 load body/head entry A0 if not already loaded - 57E18 7F0232E8 - loads models for guards? returns V0= pointer to model stuff - if SP+14 not set, calls 7F06C23C - accepts: A0=body, A1=head, A2=p->body header, A3=p->head header, SP+10=TRUE if sunglasses set, SP+14=p->??? - 57FD8 7F0234A8 - redirect to 7F0232E8: SP+14=0 - accepts: A0=body, A1=head, A2=p->body header, A3=p->head header, SP+10=TRUE if sunglasses set - 58000 7F0234D0 retrieves header info for body and head; calls 7F0234A8 - accepts: A0=body, A1=head, A2=bitflags - 580C0 7F023590 returns V0=current random body; fries T6,T7 - 580DC 7F0235AC solo select pseudorandom heads (4 male, 1 female); fries - 58190 7F023660 V0=random head - 5823C 7F02370C expand 09 characters; A1=pointer to 09 command - - 58440 7F023910 V0= TRUE if item is held like a pistol - A0=p->item's position data (8006) - 7F023948 - 7F023A94 - 7F023B5C - 7F023BC0 - 7F023C54 - 7F023CB8 - 7F023E14 - 58978 7F023E48 - ??? - redirects to 7F023CB8, sets A0+40 = 1 - 7F023E74 - 58B14 7F023FE4 actor at A0 performs animation A1 - accepts: A0=p->GUARDdata, A1=animation, A2=run length?, A3=start point?, SP+10=action type, SP+14=[data+8] - 58B30: 7F024000 - 58C80 7F024150 - 58D68 7F024238 Throw weapon in guard's hand - accepts: A0=p->GUARDdata, A1=p->weapon's pos.data (8006), A2=hand (R-0:L-1), A3=1 if using a temp object - - 58F48 7F024418 actor (A0=p->GUARDdata) shuffles feet - - 59078 7F024548 actor (A0=p->GUARDdata) looks around flustered - - 59178 7F024648 actor (A0=p->GUARDdata) throws away weapons and surrenders - 592E8 7F0247B8 actor (A0=p->GUARDdata) fades away - 7F024800 - - 59828 7F024CF8 - ??? - accepts: A0=p->GUARDdata, A1=p->??? - - 59ABC 7F024F8C - ???; accepts: A0=p->GUARDdata - 7F02516C - - 5A090 7F025560 - ??? - accepts: A0=p->GUARDdata, A1=, A2= - - 5A220 7F0256F0 - ??? - accepts: A0=p->GUARDdata, A1=???, A2=target actor ID - - 5A3AC 7F02587C - accepts: A0=p->GUARDdata, A1=[0-walk, 1-run] - - 5AB30: 7F026000 - - 5B038 7F026508 - ??? - triggered when shot/hit somebody - accepts: A0=p->Player's GUARDdata, A1=???, A2=???, A3=???, SP+10=??? - 7F026F30 - - 5BB90 7F027060 play sound for shot actor - accepts: A0=p->GUARDdata - 5BDAC 7F02727C handles shot actors - increases player shot record, handling hat hits - set guard shot and action registers in response - accepts: A0=p->GUARDdata, A1=body part shot, A2=???, A3=???, SP+10 - 7F027804 - 5C6F4 7F027BF4 V0= p->preset in path preset table matching p->tile [A0]; fries V0,V1,A0,A1,A2,A3,T6,T7,T8 - used in search routines. Preset's tile pointer should match tile pointer A0 - 5C760 7F027C60 V0= TRUE if any path preset lies on tile A0; fries V1,A0,A1,A2,A3,T6,T7,T8 - accepts: A0=p->tile - 7F027C84 - - 7F027CD4 - - 7F027E70 - - 7F027E90 - - 5CB30: 7F028000 - - 7F028474 - - 7F028494 - - 5D58C 7F028A5C - ???, sound effect related - accepts: A0=p->GUARDdata, A1=distance, A2=gender - 5D8D0 7F028DA0 play SE for hit actor at appropriate volume - accepts: A0=p->GUARDdata - calls 7F028A5C: A0=p->GUARDdata, A1=distance (GUARDdata+59), A2=gender - 5D90C 7F028DDC plot course for actor @ A0 to position A1 in room A2 at speed A3 - accepts: A0=p->GUARDdata, A1=p->[float]xyz positions, A2=p->tile, A3=speed (0-walk, 1-jog, 2-run) - 7F028FAC - - 5DC28 7F0290F8 set actor on path - accepts: A0=p->GUARDdata, A1=p->path - 5DDC8 7F029298 GUARDdata cur.timer= cur.timer [A0+0xE8= 8004837C]; fries T6 - 7F0292A8 - 7F0294BC - - 5E100 7F0295D0 V0= TRUE if actor in same room as position - accepts: A0=p->GUARDdata, A1=p->(float) xyz position, A2=p->tile - - 5E78C 7F029C5C V0= TRUE if actor A0 not moving - accepts: A0=p->GUARDdata - 7F029D70 - - 5EB30: 7F02A000 - - 5EC1C 7F02A0EC - ??? - accepts: A0=p->GUARDdata, A1=???, A2=[float] ??? - - 5ED88 7F02A258 V0= TRUE if actor is dying, fading, limping, or shot - accepts: A0=p->GUARDdata - 5EDD4 7F02A2A4 V0= TRUE if actor dying or fading away; fries V1 - accepts: A0=p->GUARDdata - 5EDF8 7F02A2C8 actor steps sideways - accepts: A0=p->GUARDdata - 5EF58 7F02A428 actor hop sideways - accepts: A0=p->GUARDdata - 5F0B8 7F02A588 actor runs sideways - accepts: A0=p->GUARDdata - 5F234 7F02A704 actor walks while firing - accepts: A0=p->GUARDdata - 5F328 7F02A7F8 actor runs while firing - accepts: A0=p->GUARDdata - 5F41C 7F02A8EC actor rolls, fires crouched - accepts: A0=p->GUARDdata - 5F54C 7F02AA1C if actor is not dead or injured and has a weapon, aim at actor ID A2 - accepts: A0=p->GUARDdata, A1=???, A2=target actor ID - 5F5B8 7F02AA88 if actor is not dead or injured and has a weapon, kneel and aim at actor ID A2 - accepts: A0=p->GUARDdata, A1=???, A2=target actor ID - 5F624 7F02AAF4 - ??? - skips if anim!=firing standing still (8) - A1->GUARDdata+0x4C, A2->GUARDdata+0x50 - 5F674 7F02AB44 TRUE if actor set to stand still, sets if possible - if standing still, returns TRUE - accepts: A0=p->GUARDdata, A1=???, A2=target actor ID - 5F6E4 7F02ABB4 actor moves to preset A1 at speed A2 - accepts: A0=p->GUARDdata, A1=preset, A2=speed (0-walk, 1-jog, 2-run) - - 5F884 7F02AD54 V0= TRUE on success; if actor is not dead or injured and has a weapon, set actor on path - accepts: A0=p->GUARDdata, A1=p->path - 7F02AD98 - - 602A4 7F02B774 manage guard fade on death; time=1.5 sec/5A ticks - - 60B30: 7F02C000 - - 61CB4 7F02D184 - ???; accepts: A0=p->GUARDdata, A1=[float] ??? - - 7F02D244 - - - 62B30: 7F02E000 - 64B30: 7F030000 - 66B30: 7F032000 - - 67698 7F032B68 - ???; fries AT,T6,T7 - V0=TRUE if (counter at +0xD4 vs [8004837C]) < 600 - accepts: A0=p->GUARDdata - 676D0 7F032BA0 - ???; fries AT,T6,T7 - V0=TRUE if (counter at +0xF0 vs [8004837C]) < 600 - accepts: A0=p->GUARDdata - 67708 7F032BD8 F0= distance between actor and position; - accepts: A0=p->GUARDdata, A1=p->xyz positions - 6777C 7F032C4C F0= distance between actor and cur. player's position; - accepts: A0=p->GUARDdata - 677A8 7F032C78 - - 678A0 7F032D70 F0= angle between actor and cur.player; fries AT,V1,T6,F4,F6,F8,F10,F12,F14,F16 - accepts: A0=p->GUARDdata - 7F032DE4 - - 67A2C 7F032EFC V0=TRUE if room containing preset A1 loaded - accepts: A0=p->GUARDdata, A1=preset - 67AC4 7F032F94 V0 & A1= preset, retrieving guard 2328 preset if necessary; fries AT - accepts: A0=p->GUARDdata, A1=preset - 67ADC 7F032FAC V0=converted actor ID value; fries AT - accepts A0=p->GUARDdata, A1=ID # - 67B70 7F033040 V0= handle to guard ID# A1 - 67BF4 7F0330C4 F0= distance between current actor and actor ID# A1 - puts into account y as well as lateral distance - accepts: A0=p->GUARDdata, A1=actor ID# - - 67C84 7F033154 F0= distance b/w current player and preset - accepts: A0=p->GUARDdata, A1=preset - - 7F033260 - 7F033290 - 7F0332C0 - 67E2C 7F0332FC toggles bitflags A1 in objective flag register [80030978]; fries V0,T6,T7 - accepts: A0=[unused], A1=flags - 67E48 7F033318 untoggles bitflags A1 in objective flag register [80030978]; fries V0,T6,T7,T8 - accepts: A0=[unused], A1=flags - 67E68 7F033338 V0= TRUE if any of objective flags A1 set; fries T6,T7 - tests against word at 80030978 - accepts: A0=[unused], A1=flags - 67E84 7F033354 V0= TRUE if actor's 02 bitflag set [A0+0x12 & 2]; fries T6 - 67E94 7F033364 V0= TRUE if animation triggered; if actor is not dead or injured, surrender - accepts: A0=GUARDdata - 67ED0 7F0333A0 V0= TRUE; redirect to 7F0247B8 - accepts: A0=GUARDdata - 67EF4 7F0333C4 reset and start loop counter; fries T6,T7 - sets +0x110 = 0, 0x40 bitflag at +0x12 - accepts: A0=p->GUARDdata - 67F08 7F0333D8 F0=loop counter time in seconds; fries AT,T6,F4,F6,F8 - divides +0x110 by 60.0 - 7F0333F8 - 67FC0 7F033490 V0= TRUE if actor (A0=p->GUARDdata) is invisible (+0x14 & 4); fries T6 - 67FD0 7F0334A0 actor moves to cur.player at speed A1 - accepts: A0=p->GUARDdata, A1=speed (0-walk, 1-jog, 2-run) - 6803C 7F03350C actor moves to actor ID A1's position at speed A2 - accepts: A0=p->GUARDdata, A1=actor ID#, A2=speed (0-walk, 1-jog, 2-run) - 680D4 7F0335A4 V0= #times actor shot [A0+0xB] - 680DC 7F0335AC V0= #shots near actor [A0+0xA] - 680E4 7F0335B4 V0= TRUE if actor's (A0=p->GUARDdata) FA target set; fries T6 - 680F4 7F0335C4 V0= TRUE if actor's (A0=p->GUARDdata) FB target set; fries T6 - 7F0335D4 - 68140 7F033610 - TRUE if animation triggered; if actor is not dead or injured, shuffle feet - accepts: A0=GUARDdata - - 6817C 7F03364C TRUE if animation triggered; if actor is not dead or injured, fawn on shoulder - accepts: A0=GUARDdata - 681B8 7F033688 TRUE if animation triggered; if actor is not dead or injured, look around flustered - accepts: A0=GUARDdata - 681F4 7F0336C4 TRUE if animation triggered; if actor is not dead or injured, kneel - accepts: A0=GUARDdata - 68230 7F033700 TRUE if animation triggered; if actor is not dead or injured, perform animation A1 - redirects to 7F023FE4 - accepts: A0=GUARDdata, A1=animation, A2=[0A:3|4], A3=[0A:5|6], SP+10=action type, SP+14=[data+8] - 68290 7F033760 redirects to 7F055E50 - 7F033780 - - 684C8 7F033998 V0= TRUE if 2328 preset set using method A1 - accepts: A0=p->GUARDdata, A1=method - 20 next step in path - 10 go to cur.player's position - 08 go to cur.player if within long range - 04 go to cur.player if within range - 02 go to cur.player if within mid range - 01 go to cur.player if within short range - 685DC 7F033AAC - - - 688F4 7F033DC4 - ??? - accepts: A0=p->GUARDdata - - 68A78 7F033F48 V0=unknown; linked in guard spawn; possibly accepts pad pointer - accepts: A0=p->[SP+30], A1=p->[SP+28], A2=, A3=[TRUE if flag 0x10 set] - 68B30: 7F034000 - 68C8C 7F03415C the action block guard constructor used by BD/BE - accepts: A0=body, A1=head, A2=p->preset, A3=p->pad, SP+10=(float)???, SP+14=p->action, SP+18=bitflags - returns: V0=p->guard or NULL - 68D88 7F034258 guard constructor called immediately by BD action type - accepts: A0=p->GUARDdata, A1=body, A2=head, A3=preset, SP+10=p->action, SP+14=bitflags - 68E38 7F034308 guard constructor called immediately by BE action type - accepts: A0=p->GUARDdata, A1=body, A2=head, A3=preset, SP+10=p->action, SP+14=bitflags - 68EB8 7F034388 V0= TRUE if actor ID# A1 is at preset A2 - accepts: A0=p->GUARDdata, A1=actor ID, A2=preset - 68F7C 7F03444C V0= TRUE if actor is at preset A1 - accepts: A0=p->GUARDdata, A1=preset - 6902C 7F0344FC V0= FALSE; removed actor animation routine [action 27] - 69038 7F034508 V0= FALSE; removed actor animation routine [action 2B] - 69044 7F034514 - - - 690AC 7F03457C actor (A0=p->GUARDdata) draws and throws a grenade at cur.player if possible - 6922C 7F0346FC actor (A0=p->GUARDdata) drops item type A2 on ground, setting timer to A1 - - 692D0 7F0347A0 sets sound effect source to location - accepts: A0=slot# (0-8); - expects 80069B60 slot to contain sound information: - 0x0 4 p->SE data - 0x4 4 volume (default 7FFF) - 0x8 4 audibile range - 0xC 4 maximum volume (default 7FFF) - 0x10 4 p->preset or NULL - 0x14 4 p->object or NULL - 69414 7F0348E4 loops 7F0347A0 for slots 0-8 - 69454 7F034924 set sound effect A1 to slot A0; calls 70008E08 - 7F0349BC - 6952C 7F0349FC V0= length of action block command at offset A1 in block A0 - accepts: A0=p->start of block, A1=current position offset - 7F034A24 action 00 length - 7F034A2C action 01 length - 7F034A34 action 02 length - 7F034A3C action 03 length - 7F034A44 action 04 length - 7F034A4C action 05 length - 7F034A54 action 06 length - 7F034A5C action 07 length - 7F034A64 action 08 length - 7F034A6C action 09 length - 7F034A74 action 0A length - 7F034A7C action 0B length - 7F034A84 action 0C length - 7F034A8C action 0D length - 7F034A94 action 0E length - 7F034A9C action 0F length - 7F034AA4 action 10 length - 7F034AAC action 11 length - 7F034AB4 action 12 length - 7F034ABC action 13 length - 7F034AC4 action 14 length - 7F034ACC action 15 length - 7F034AD4 action E8 length - 7F034ADC action E7 length - 7F034AE4 action 16 length - 7F034AEC action 17 length - 7F034AF4 action 18 length - 7F034AFC action 19 length - 7F034B04 action 1A length - 7F034B0C action 1B length - 7F034B14 action 1C length - 7F034B1C action 1D length - 7F034B24 action 1E length - 7F034B2C action 1F length - 7F034B34 action 20 length - 7F034B3C action 21 length - 7F034B44 action 22 length - 7F034B4C action 23 length - 7F034B54 action 24 length - 7F034B5C action 25 length - 7F034B64 action 26 length - 7F034B6C action 27 length - 7F034B74 action 28 length - 7F034B7C action 29 length - 7F034B84 action 2A length - 7F034B8C action 2B length - 7F034B94 action 2C length - 7F034B9C action 2D length - 7F034BA4 action 2E length - 7F034BAC action 2F length - 7F034BB4 action 30 length - 7F034BBC action 31 length - 7F034BC4 action 32 length - 7F034BCC action 33 length - 7F034BD4 action 34 length - 7F034BDC action 35 length - 7F034BE4 action 36 length - 7F034BEC action 37 length - 7F034BF4 action 38 length - 7F034BFC action 39 length - 7F034C04 action 3A length - 7F034C0C action 3B length - 7F034C14 action 3C length - 7F034C1C action 3D length - 7F034C24 action 3E length - 7F034C2C action 3F length - 7F034C34 action 40 length - 7F034C3C action 41 length - 7F034C44 action 42 length - 7F034C4C action 43 length - 7F034C54 action 44 length - 7F034C5C action 45 length - 7F034C64 action 46 length - 7F034C6C action 47 length - 7F034C74 action 48 length - 7F034C7C action 49 length - 7F034C84 action 4A length - 7F034C8C action 4B length - 7F034C94 action 4C length - 7F034C9C action 4D length - 7F034CA4 action 4E length - 7F034CAC action 4F length - 7F034CB4 action 50 length - 7F034CBC action 51 length - 7F034CC4 action 52 length - 7F034CCC action 53 length - 7F034CD4 action 54 length - 7F034CDC action 55 length - 7F034CE4 action 56 length - 7F034CEC action 57 length - 7F034CF4 action 58 length - 7F034CFC action 59 length - 7F034D04 action 5A length - 7F034D0C action 5B length - 7F034D14 action 5C length - 7F034D1C action 5D length - 7F034D24 action 5E length - 7F034D2C action 5F length - 7F034D34 action 60 length - 7F034D3C action 61 length - 7F034D44 action 62 length - 7F034D4C action 63 length - 7F034D54 action 64 length - 7F034D5C action 65 length - 7F034D64 action 66 length - 7F034D6C action 67 length - 7F034D74 action 68 length - 7F034D7C action 69 length - 7F034D84 action 6A length - 7F034D8C action 6B length - 7F034D94 action 6C length - 7F034D9C action 6D length - 7F034DA4 action 6E length - 7F034DAC action 6F length - 7F034DB4 action 70 length - 7F034DBC action 71 length - 7F034DC4 action 72 length - 7F034DCC action 73 length - 7F034DD4 action 74 length - 7F034DDC action 75 length - 7F034DE4 action 76 length - 7F034DEC action 77 length - 7F034DF4 action 78 length - 7F034DFC action 79 length - 7F034E04 action 7A length - 7F034E0C action 7B length - 7F034E14 action 7C length - 7F034E1C action 7D length - 7F034E24 action 7E length - 7F034E2C action 7F length - 7F034E34 action 80 length - 7F034E3C action 81 length - 7F034E44 action 82 length - 7F034E4C action 83 length - 7F034E54 action 84 length - 7F034E5C action 85 length - 7F034E64 action 86 length - 7F034E6C action 87 length - 7F034E74 action 88 length - 7F034E7C action 89 length - 7F034E84 action 8A length - 7F034E8C action 8B length - 7F034E94 action 8C length - 7F034E9C action 8D length - 7F034EA4 action 8E length - 7F034EAC action 8F length - 7F034EB4 action 90 length - 7F034EBC action 91 length - 7F034EC4 action 92 length - 7F034ECC action 93 length - 7F034ED4 action 94 length - 7F034EDC action 95 length - 7F034EE4 action 96 length - 7F034EEC action 97 length - 7F034EF4 action 98 length - 7F034EFC action 99 length - 7F034F04 action 9A length - 7F034F0C action 9B length - 7F034F14 action 9C length - 7F034F1C action 9D length - 7F034F24 action 9E length - 7F034F2C action 9F length - 7F034F34 action A0 length - 7F034F3C action A1 length - 7F034F44 action A2 length - 7F034F4C action A3 length - 7F034F54 action A4 length - 7F034F5C action A5 length - 7F034F64 action A6 length - 7F034F6C action A7 length - 7F034F74 action A8 length - 7F034F7C action A9 length - 7F034F84 action AA length - 7F034F8C action AB length - 7F034F94 action AC length - 7F034F9C action AE length - 7F034FA4 action AF length - 7F034FAC action B0 length - 7F034FB4 action B1 length - 7F034FBC action B2 length - 7F034FC4 action B3 length - 7F034FCC action B4 length - 7F034FD4 action B5 length - 7F034FDC action B6 length - 7F034FE4 action B7 length - 7F034FEC action B8 length - 7F034FF4 action B9 length - 7F034FFC action BA length - 7F035004 action BB length - 7F03500C action BC length - 7F035014 action BD length - 7F03501C action BE length - 7F035024 action BF length - 7F03502C action C0 length - 7F035034 action C1 length - 7F03503C action C2 length - 7F035044 action C3 length - 7F03504C action C4 length - 7F035054 action C5 length - 7F03505C action C6 length - 7F035064 action C7 length - 7F03506C action C8 length - 7F035074 action C9 length - 7F03507C action CA length - 7F035084 action CB length - 7F03508C action CC length - 7F035094 action CD length - 7F03509C action CE length - 7F0350A4 action CF length - 7F0350AC action D0 length - 7F0350B4 action D1 length - 7F0350BC action D2 length - 7F0350C4 action D3 length - 7F0350CC action D4 length - 7F0350D4 action D5 length - 7F0350DC action D6 length - 7F0350E4 action D7 length - 7F0350EC action D8 length - 7F0350F4 action D9 length - 7F0350FC action DA length - 7F035104 action DB length - 7F03510C action DC length - 7F035114 action DD length - 7F03511C action DE length - 7F035124 action DF length - 7F03512C action E0 length - 7F035134 action E1 length - 7F03513C action E2 length - 7F035144 action E3 length - 7F03514C action E4 length - 7F035154 action E5 length - 7F03515C action E6 length - 7F035164 action E9 length - 7F03516C action EA length - 7F035174 action EB length - 7F03517C action EC length - 7F035184 action ED length - 7F03518C action EE length - 7F035194 action EF length - 7F03519C action F0 length - 7F0351A4 action F1 length - 7F0351AC action F2 length - 7F0351B4 action F3 length - 7F0351BC action F4 length - 7F0351C4 action F5 length - 7F0351CC action F6 length - 7F0351D4 action F7 length - 7F0351DC action F8 length - 7F0351E4 action F9 length - 7F0351EC action FA length - 7F0351F4 action FB length - 7F0351FC action FC length - 7F035204 action AD length - 7F035238 invalid types (type>FD) - 69D74 7F035244 - ??? - 69E20 7F0352F0 V0= TRUE if successfully performing action [?] - accepts: A0=???, A1=???, A2=??? - 7F035398 - - 69F64 7F035434 V0= p->path #A0; fries V1,A1,T6,T7,T8,T9 - 69FB4 7F035484 parses and handles action blocks, command by command - 7F0355B4 action 00 Return Value Loop [2] - 7F0355D0 action 01 Go To Beginning, Then Return Value Loop [2] - 7F0355EC action 02 Resume If Return Value Loop Met [2] - 7F0355F8 action 03 Sleep For One Tick [1] - 7F03563C action 05 Jump To Function [4] - 7F0356B0 action 06 Set Return Subroutine (for 0007 Command) [3] - 7F03570C action 07 Jump to Return Subroutine [1] - 7F035768 action 08 Reset Animation [1] - 7F03577C action 09 Guard Kneels [1] - 7F035790 action 0A Play Animation [9] - 7F03589C action 0B If Guard Wasting Time (Swatting Flies), Return Value Loop [2] - 7F0358D0 action 0C Guard Points [1] - 7F0358E4 action 0D Guard Looks Around When Shot At [1] - 7F0358F8 action 2F If Guard Stopped Moving, Return Value Loop [2] - 7F03592C action 30 If Guard Killed, Return Value Loop [3] - 7F035974 action 31 If Guard ID Finished Death Animation, Return Value Loop [3] - 7F0359B4 action 32 If Guard Has Spotted Bond, Return Value Loop [2] - 7F0359E8 action 0E Guard Steps Sideways, Return Value Loop [2] - 7F035A1C action 0F Guard Hops Sideways, Return Value Loop [2] - 7F035A50 action 10 Guard Runs Sideways, Return Value Loop [2] - 7F035A84 action 11 Guard Walks Firing, Return Value Loop [2] - 7F035AB8 action 12 Guard Runs Firing, Return Value Loop [2] - 7F035AEC action 13 Guard Rolls On Ground Then Fires Crouched, Return Value Loop [2] - 7F035B20 action 14 Guard Aims, Shoots at Bond/Guard/Pad, Return Value Loop [6] - 7F035B74 action 15 Guard Kneels/Aims, Shoots at Bond/Guard/Pad, Return Value Loop [6] - 7F035BC8 action E7 If Guard Moving And Shooting, Return Value Loop [2] - 7F035C1C action E8 If Guard Is Shooting, Return Value Loop [2] - 7F035C50 action 16 Guard Shoots Guards (Without Animation Change), Return Value Loop [6] - 7F035CA4 action 17 Guard Constantly Angles To Face, Return Value Loop [6] - 7F035CF8 action 18 Shoot Guard ID In Style With Weapon Type # [4] - 7F035D5C action 19 Guard ID1 Shoots Guard ID2 In Style [4] - 6A9A8 7F035E78 action 1A Guard Throws Grenade, Return Value Loop [2] - 7F035EAC action 1B Drop Weapon Inventory #, Return Value Loop [5] - 7F035EF8 action 21 Guard Surrenders, Drops All Attached Objects [1] - 7F035F0C action 22 Guard Set To Move Fades And Disappear [1] - 7F035F20 action 23 Remove Guard ID [2] - 7F035F54 action 24 Activate Object At Preset, Return Value Loop If Successful [4] - 7F035F9C action 25 Activate Alarm [1] - 7F035FB0 action 26 Deactivate Alarm [1] - 7F035FC4 action 27 Invalid Type (Return False) [2] - 7F035FF8 action 28 Jog To Bond, Return Value Loop When Reached Bond [2] - 6AB30: 7F036000 - 7F036030 action 29 Walk To Bond, Return Value Loop When Reached Bond [2] - 7F036068 action 2A Run To Bond, Return Value Loop When Reached Bond [2] - 7F0360A0 action 2B Invalid Type (Return False) [2] - 7F0360D4 action 2C Jog To Character Position, Return Value Loop On Arrival [3] - 7F036110 action 2D Walk To Character Position, Return Value Loop On Arrival [3] - 7F03614C action 2E Run To Character Position, Return Value Loop On Arrival [3] - 7F036188 action 33 Seed Random Byte [1] - 7F0361A0 action 34 If Random Byte < Value, Return Value Loop [3] - 7F0361DC action 35 If Random Byte > Value, Return Value Loop [3] - 7F036218 action 1C Guard Jogs To Preset [3] - 7F036244 action 1D Guard Jogs To Predefined Preset (2328) [1] - 7F036260 action 1E Guard Walks To Preset [3] - 7F03628C action 1F Guard Runs To Preset [3] - 7F0362B8 action 20 Activate Patrol Path [2] - 7F0362D8 action 36 If Alarm Activated, Return Value Loop (Plus Stack) [2] - 7F03630C action 37 If Alarm Activated, Return Value Loop [2] - 7F036340 action 38 If Toxic Gas Released, Return Value Loop [2] - 7F036374 action 39 If Guard Heard Gunfire, Return Value Loop [2] - 7F0363A8 action 3A If Another Guard Shot Within Sight Of Guard, Return Value Loop [2] - 7F0363DC action 3B If Another Guard Killed Within Sight Of Guard, Return Value Loop [2] - 7F036410 action 3C If Guard And Bond Are Within Line Of Sight, Return Value Loop [2] - 7F036444 action 3D If Guard And Bond Are Within Partial Line Of Sight, Return Value Loop [2] - 7F036478 action 3E If Guard Has Been Shot Recently, Return Value Loop [2] - 7F0364AC action 3F If Guard Heard Bond, Return Value Loop [2] - 7F0364E0 action 40 If Guard In Same Room As Guard ID, Return Value Loop [3] - 7F036540 action 41 If Guard Has Not Been On Screen Yet, Return Value Loop [2] - 7F036578 action 42 If Guard On Screen, Return Value Loop [2] - 7F0365B4 action 43 If Room Containing Guard On Screen, Return Value Loop [2] - 7F0365F4 action 44 If Room Containing Preset On Screen, Return Value Loop [4] - 7F03663C action 45 If Bond Is Aiming At Guard, Return Value Loop [2] - 7F036670 action 46 If Bond Fired A Shot Near Guard, Return Value Loop [2] - 7F0366A4 action 47 If Guard's Counter-Clockwise Direction To Bond < X Degrees, Return Value Loop [3] - 7F036718 action 48 If Guard's Counter-Clockwise Direction To Bond > X Degrees, Return Value Loop [3] - 7F03678C action 49 If Bond's Counter-Clockwise Direction To Guard < X Degrees, Return Value Loop [3] - 7F036800 action 4A If Bond's Counter-Clockwise Direction To Guard > X Degrees, Return Value Loop [3] - 7F036874 action 4B If Guard's Distance To Bond < X, Return Value Loop [4] - 7F0368DC action 4C If Guard's Distance To Bond > X, Return Value Loop [4] - 7F036944 action 4D If Guard ID's Distance To Preset < X, Return Value Loop [7] - 7F0369D4 action 4E If Guard ID's Distance To Preset > X, Return Value Loop [7] - 7F036A64 action 4F If Guard's Distance To Guard ID < X, Return Value Loop [5] - 7F036AD0 action 50 If Guard's Distance To Guard ID > X, Return Value Loop [5] - 7F036B3C action 51 If Guard's Distance To Another Guard < X, Set Guard's ID To FC And Return Value Loop [4] - 7F036B98 action 52 If Bond's Distance To Preset < X, Return Value Loop [6] - 7F036C10 action 53 If Bond's Distance To Preset > X, Return Value Loop [6] - 7F036C88 action 54 If Guard Is At Preset, Return Value Loop [5] - 7F036CD4 action 55 If Bond Entered Room with Preset, Return Value Loop [4] - 7F036D1C action 56 If 16 Object # Collected, Return Value Loop [3] - 7F036D6C action 57 If Weapon/Item Was Thrown, Return Value Loop [3] - 7F036DA0 action 58 If Weapon/Item Was Thrown Onto 16-Object, Return Value Loop [4] - 7F036E2C action 59 If Bond Has Weapon/Item Equipped, Return Value Loop [3] - 7F036E78 action 5A If 16 Object # Loaded, Return Value Loop [3] - 7F036EBC action 5B If 16 Object # Not Destroyed, Return Value Loop [3] - 7F036F0C action 5C If 16 Object # Activated, Return Value Loop [3] - 7F036F70 action 5D If Gadget Used On 16 Object #, Return Value Loop [3] - 7F036FD0 action 5E Activate 16 Object [2] - 7F037038 action 5F Explode/Destroy 16 Object [2] - 7F0370B4 action 60 Guard Drops 16 Object # [2] - 7F037118 action 61 Kill Guard # [2] - 7F03714C action 62 Guard # Drops Held Weapon/Item [2] - 7F0371BC action 63 Guard Gives Bond 16 Object # [2] - 7F0371FC action 64 Guard # Equips 16 Object [3] - 7F0372A0 action 65 Move 16 Object To Preset [4] - 7F0373BC action 66 Open Door [2] - 7F037400 action 67 Close Door [2] - 7F037444 action 68 Check Door Status, Return Value Loop If Met [4] - 7F037518 action 69 If Door Has Been Opened Before, Return Value Loop [3] - 7F03757C action 6A Set Door's Lock Bits [3] - 7F0375C0 action 6B Unset Door's Lock Bits [3] - 7F037608 action 6C If Door's Lock Bits Are Set, Return Value Loop [4] - 7F037678 action 6D If Objective # Complete, Return Value Loop [3] - 7F0376C8 action 6E If Guard 2328 Preset, Return Value Loop [3] - 7F037700 action 6F If Guard 2328 Preset Set, Return Value Loop [3] - 7F037738 action 78 If Guard Shot < Amount, Return Value Loop [3] - 7F037778 action 79 If Guard Shot > Amount, Return Value Loop [3] - 7F0377B8 action 7A If Number Near-Miss Gunshots < Value, Return Value Loop [3] - 7F0377F8 action 7B If Number Near-Miss Gunshots > Value, Return Value Loop [3] - 7F037838 action 7C If Guard Health < Value, Return Value Loop [4] - 7F0378C4 action 7D If Guard Health > Value, Return Value Loop [4] - 7F037950 action 7E If Guard #'s Bitflag 01000000 Set, Return Value Loop [3] - 7F0379AC action 7F If Bond's Health < Value, Return Value Loop [3] - 7F037A20 action 80 If Bond's Health > Value, Return Value Loop [3] - 7F037A94 action 70 If Difficulty < Value, Return Value Loop [3] - 7F037AD4 action 71 If Difficulty > Value, Return Value Loop [3] - 7F037B14 action 72 If Time < Value, Return Value Loop [4] - 7F037B74 action 73 If Time > Value, Return Value Loop [4] - 7F037BD4 action 74 If Power On Time < Value, Return Value Loop [4] - 7F037C38 action 75 If Power On Time > Value, Return Value Loop [4] - 7F037C9C action 76 If Stage Number < Value, Return Value Loop [3] - 7F037CDC action 77 If Stage Number > Value, Return Value Loop [3] - 7F037D1C action 81 Set User Byte #1 [2] - 7F037D30 action 82 Add Value To User Byte #1 (Max To FF) [2] - 7F037D70 action 83 Subtract Value To User Byte #1 (Min To 0) [2] - 7F037DA4 action 84 If User Byte #1 < Value, Return Value Loop [3] - 7F037DE0 action 85 If User Byte #1 < Random Value, Return Value Loop [2] - 7F037E1C action 86 Set User Byte #2 [2] - 7F037E30 action 87 Add Value To User Byte #2 (Max To FF) [2] - 7F037E70 action 88 Subtract Value To User Byte #2 (Min To 0) [2] - 7F037EA4 action 89 If User Byte #2 < Value, Return Value Loop [3] - 7F037EE0 action 8A If User Byte #2 < Random Value, Return Value Loop [2] - 7F037F1C action 8B Set Guard's Hearing Distance [3] - 7F037F50 action 8C Set Guard's Bond Reaction Time [2] - 7F037F80 action 8D Set Guard's Grenade Probability [2] - 7F037F94 action 8E Set Guard's ID [2] - 7F037FA8 action 8F Set Guard's Health [3] - 7F037FE8 action 90 Set Guard's Armor Amount [3] - 6CB30: 7F038000 - 7F038028 action 91 Set Character Reaction Speed [2] - 7F03803C action 92 Set Character Injury Recovery Speed [2] - 7F038050 action 93 Set Character Accuracy [2] - 7F038064 action 94 Mask Guard Type With Value [2] - 7F03807C action 95 Unmask Guard Type With Value [2] - 7F038094 action 96 If Guard Type Value Is Set, Return Value Loop [3] - 7F0380CC action 97 Mask Guard Type Flags With Value [3] - 7F0380E8 action 98 Unmask Guard Type Flags With Value [3] - 7F038104 action 99 If Guard Type Flags Set, Return Value Loop [4] - 7F038140 action 9A Set Objective Bits [5] - 7F03817C action 9B Unset Objective Bits [5] - 7F0381B8 action 9C Check If Objective Bits Are Set, Return Loop If So [6] - 7F038214 action 9D Set Guard's Bits [5] - 7F038254 action 9E Unset Guard's Bits [5] - 7F038298 action 9F Check Guard's Bits, If Same Return Value Loop [6] - 7F0382F4 action A0 Set Guard ID's Bits [6] - 7F038344 action A1 Unset Guard ID's Bits [6] - 7F038398 action A2 Check Guard ID's Bits, If Same Return Value Loop [7] - 7F03840C action A3 Set 16 Object's Bits [6] - 7F038464 action A4 Unset 16 Object's Bits [6] - 7F0384C0 action A5 If 16 Object's Bits Set, Return Value Loop [7] - 7F03853C action A6 Set 16 Object's Bits More [6] - 7F038594 action A7 Unset 16 Object's Bits More [6] - 7F0385F0 action A8 If 16 Object's Bits More Set, Return Value Loop [7] - 7F03866C action A9 Set Guard's FC To Guard ID [2] - 7F038684 action AA Set Guard ID's FC To Guard ID [3] - 7F0386A0 action AB Set Guard's 2328 Value To Preset [3] - 7F0386EC action AC Set Guard ID #'S 2328 Value To Preset [4] - 7F038718 action AD Debug Comment [20] - 7F038730 action AE Reset And Start Cycle Counter [1] - 7F038744 action AF Reset Cycle Counter [1] - 7F038754 action B0 Stop Cycle Counter [1] - 6D29C 7F03876C action B1 Start Cycle Counter [1] - 6D2B4 7F038784 action B2 If Cycle Counter Stopped, Return Value Loop [2] - 6D2EC 7F0387BC action B3 If Cycle Counter < Value, Return Value Loop [5] - 7F038840 action B4 If Cycle Counter > Value, Return Value Loop [5] - 7F0388C4 action B5 Show Timer [1] - 7F0388DC action B6 Hide Timer [1] - 7F0388F4 action B7 Set Timer X Seconds [3] - 7F038928 action B8 Stop Timer [1] - 7F03893C action B9 Start Timer [1] - 7F038950 action BA If Timer Stopped, Return Value Loop [2] - 7F038984 action BB If Timer < Value, Return Value Loop [4] - 7F0389E8 action BC If Timer > Value, Return Value Loop [4] - 6D57C 7F038A4C action BD Spawn Guard [C] - 6D624 7F038AF4 action BE Respawn Guard with ID [B] - 6D6AC 7F038B7C action BF Spawn Weapon [9] - 6D7B0 7F038C80 action C0 Spawn Hat [8] - 7F038D10 action C1 Guard ID Does Action Value If Heard A Lot Of Gunfire, Return Value Loop When Complete [5] - 7F038EC8 action C2 Display Text Preset Bottom Screen [3] - 7F038EF0 action C3 Display Text Preset Top Screen [3] - 7F038F18 action C4 Play Sound Effect # In Slot # (0-7) [4] - 7F038F44 action C9 Shut Off Sound In Slot Number [2] - 7F038F58 action C7 Sound In Slot # Crescendos To Volume Over Milliseconds [6] - 7F039008 action C8 Sound In Slot # Fades To Volume Over Milliseconds [6] - 7F0390C4 action C5 Emanate Sound In Slot # From 16 Object, With Audible Range Value [5] - 7F039160 action C6 Emanate Sound In Slot # From Preset, With Audible Range Value [6] - 6DD90 7F039260 action CA If Value > Volume (7FFF Max), Return Value Loop [5] - 7F0392D4 action CB Set Object Path (27 Type Object) [2] - 7F0392FC action CC Set Speed Moving Vehicle (27 Type Object) [5] - 7F039360 action CD Set Speed Aircraft Rotor [5] - 7F0393BC action CE If Currently In Intro Camera, Return Value Loop [2] - 7F039408 action CF If Currently In Intro Swirl, Return Value Loop [2] - 7F039440 action D0 Change Animation Type Of Tagged 16 Monitor [4] - 6DFFC 7F0394CC action D1 If Bond Driving Tank, Return Value Loop [2] - 6E034 7F039504 action D2 Exit Level [1] - 6E080 7F039550 action D3 Return From Camera Scene [1] - 6E094 7F039564 action D4 Camera Looks At Bond From Preset [3] - 6E120 7F0395F0 action D5 Go To Camera Position [6] - 7F039670 action D6 If Bond Elevation < Value, Return Value Loop [4] - 6E20C 7F0396DC action D7 Toggles Text and Controls (Variable) [2] - 7F039750 action D8 Enable All On-Screen Displays [1] - 6E2CC 7F03979C action D9 Move Guard ID To Preset, Return Value Loop If Successful [5] - 7F039964 action DA Fade Out To Black [1] - 7F0399A4 action DB Fade In From Black (Reset DA) [1] - 7F0399E0 action DC When Fade Completes, Return Value Loop [2] - 7F039A24 action DD Hide All Guards [1] - 7F039A80 action DE Restore Hidden Guards [1] - 7F039AD4 action DF Open Door Instantly (Used Cut-Scenes) [2] - 7F039B30 action E0 Guard ID Draws Weapon # [3] - 7F039B58 action E1 If Number Of Players < Value, Return Value Loop [3] - 7F039B98 action E2 If Ammo Value In Type < Value, Return Value Loop [4] - 6E708 7F039BD8 action E3 Force Bond To Draw Weapon/Item (1st person) [2] - 6E72C 7F039BFC action E4 Force Bond To Draw Weapon/Item (3rd person) [2] - 6E750 7F039C20 action E5 Set Bond's Speed [3] - 6E78C 7F039C5C action E6 If 16-Object And Preset Are In Same Room, Return Value Loop [5] - 6E85C 7F039D2C action E9 Instantly Switch Sky To Sky 2 [1] - 6E878 7F039D48 action EA Stop Game Time [1] - 6E89C 7F039D6C action EB If Bond Has Been Killed, Return Value Loop [2] - 6E8D8 7F039DA8 action EC Disable Bond Damage/Pickups [1] - 6E8F0 7F039DC0 action ED Hide First Person Display [1] - 6E90C 7F039DDC action EE Cuba Circular Camera Aim [D] - 6EA18 7F039EE8 action EF Trigger Credits [1] - 6EA30 7F039F00 action F0 If Credits Completed, Return Value Loop [2] - 6EA68 7F039F38 action F1 If All Objectives Complete, Return Value Loop [2] - 6EA9C 7F039F6C action F2 Check Current Folder Bond, Return Value Loop [3] - 6EAD8 7F039FA8 action F3 If Bond Damage/Pickups Disabled, Return Value Loop [2] - 6EB10 7F039FE0 action F4 Plays Value #1-Theme Slot (0-3) For Value #2 Seconds [4] - 6EB30: 7F03A000 - 6EB34 7F03A004 action F5 Turn Off Music In Slot # (0-3) [2] - 6EB50 7F03A020 action F6 Trigger Explosions Around Bond [1] - 6EB64 7F03A034 action F7 If Number Of Hostages/Scientists Killed > Value, Return Value Loop [3] - 6EBA4 7F03A074 action F8 If Guard ID 00200000 Flag Set, Unset And Return [3] - 6EC04 7F03A0D4 action F9 Set Killed In Action, Automatic Mission Failure [1] - 6EC1C 7F03A0EC action FA Guard Raises Arms For Half A Second [1] - 6EC30 7F03A100 action FB Switch To Sky Value # And Activate Gas Containers If Exist [1] - 6EC64 7F03A134 action FC Launch Shuttle [2] - 6ED30 7F03A200 action 04 Terminate Block [1] - 6ED70 7F03A240 - ??? - 6EF34 7F03A404 set 0x4 state flag for position data at A0 [A0+1|=4]; fries T6,T7 - 6EF44 7F03A414 untoggle 0x4 state flag for position data at A0 [A0+1|=4]; fries T6,T7 - 6EF54 7F03A424 V0= current entry in obj.pos.data (8006 table) [80030AA0] - 6EF60 7F03A430 remove last obj.pos.data entry; fries V1,A1,T6,T7 - V0=p->new last entry (previous entry in table) or NULL - 6EFB4 7F03A484 set A0 as p->last obj.pos.data (8006 table); fries V0,T6 - 6EFD4 7F03A4A4 A0->current obj.pos.data+0x28 (8006 table); fries V0,V1,T6 - 6F020 7F03A4F0 A0->last obj.pos.data entry--first obj.pos.data+0x24; fries AT,V0,V1,T6 - 7F03A538 - - 702E8 7F03B7B8 image hit call - second nibble - 704F0 7F03B9C0 - 7091C 7F03BDEC - 70B30: 7F03C000 - 70C20 7F03C0F0 - - 70DEC 7F03C2BC - ??? - accepts: A0=p->obj.position data (8006), A1=??? - 70F2C 7F03C3FC - - 71178 7F03C648 - ??? handles respawn, as well as other things - 71560 7F03CA30 - ??? - determines type of object, then determines target or player detection? - 7F03CA6C 3: guard - 7F03CA94 1,2,4: normal object, door, collectable - 7F03CAB0 7: - 7F03CACC 8: - 7F03CAE8 6: player - ??? - 7F03CB00 5: - 7F03CB10 3: - 7F03CB30 default - 716BC 7F03CB8C - - 7F03DA50 - 7F03DB70 - 7F03DBCC - 7F03DD9C - 7F03DE94 - accepts: A0=p->BONDdata.pos.data, A1=BONDdata+2A04 - 72B30: 7F03E000 - 7F03E134 ??? - accepts: A0=p->obj.posdata - 7F03E18C ??? - accepts: A0=p->obj.posdata - 7F03E210 - 7F03E27C - 7F03E3FC - 7F03E4F0 - 731C8 7F03E698 unconditional return debug "room blocks" feature - 731D0 7F03E6A0 - - 74574 7F03FA44 V0=p->object at preset A1 or NULL - scans position data table for a normal object (01) at given preset - accepts: A0=p->GUARDdata, A1=preset - 7F03FAB0 - - 747B0 7F03FC80 - - 748D8 7F03FDA8 - - 74AF0 7F03FFC0 - V0= (obj.data+0x70)/4+1 if the object is destroyed. accepts A0=p->obj.data - 7F03FFF8 - 74B30: 7F040000 - 7F040074 - calls: 7F03FFF8: A0=(@(@A0+14)+8) - 7F0400C4 - 7F0402B4 - accepts: A0=p->obj. position entry, A1=[p->obj+7C] - 7F040310 - 7F040384 - 7F040484 - 7507C 7F04054C initialize standard object A0 - accepts: A0=p->object, A1=p->object header, A2=p->positiona data or NULL, A3=p->instance controller or NULL - If A2 or A3 are not present the data is generated. - 75228 7F0406F8 redirect to 7F04054C: A2=0, A3=0 - 7F04071C ???; V0=p->new position entry - 7F040754 - 7F0407F4 - 7F04088C - 7F040BA0 - 7F040CF0 - 7F040D98 - 7F041024 redirect to 7F040D98: A2=0 - 7F041044 - if (A0+3)=4, F0=10.0 [41200000]; else, F0=20.0 [41A00000]; fries AT,T6 - 7F041074 - 7F041160 - 7F041400 - 7F0417DC - 7F0419E4 - 7F041BB8 - 7F041E0C - 76B30: 7F042000 - - 7F04224C - ??? - handles projectile motion - 7F042A0C - - 786AC 7F043B7C generates explosion of type A1 at object A0's position - accepts: A0=p->std.obj pos.data, A1=type of explosion - 788A0 7F043D70 handles thrown explosive detonation - 78B30: 7F044000 - 7F044200 - - 79E04 7F0452D4 - ??? - object activation, or player interaction... - 7AB30: 7F046000 - 7F04665C obj 01: Doors - 7F0467A8 obj 06: Camera - 7F046C6C obj 0D: Autoguns - 7F04756C obj 27: Wheeled Vehicles - 7F047EC8 obj 28: Aircraft - 7CB30: 7F048000 - 7F048244 obj 2F: Tinted Glass - 7F0482C8 obj 01: Doors - 7F0483B4 obj 2D: Tank - 7F049B58 - ??? - - 7E7BC 7F049C8C save pointer to monitor ani code to obj ani slot; A1->A0, 0000->A0+4 - 7E7C8 7F049C98 set pointer for A1 monitor img to obj ani slot at A0 - followed by subroutines that set pointers - 7EA70 7F049F40 save img index to obj animation slot; A1->A0+8 - 7EA78 7F049F48 Process monitor animation microcode - 7EB30: 7F04A000 - 7EB54 7F04A024 command 00: reset scroll/shift - 7EB68 7F04A038 command 01: horizontal scroll - 7EBC4 7F04A094 command 02: vertical scroll - 7EC20 7F04A0F0 command 03: set horizontal pos - 7EC78 7F04A148 command 04: set vertical pos - 7ECD0 7F04A1A0 command 05: Zoom X - 7ED28 7F04A1F8 command 06: Zoom Y - 7ED80 7F04A250 command 07: use img from global monitor image table - 7EDA4 7F04A274 command 08: halt processing for time - 7EDF4 7F04A2C4 command 09: jump - 7EE10 7F04A2E0 command 0A: jump conditional - 7EE68 7F04A338 command 0B: restart - 7EE70 7F04A340 command 0C: break - 7EE78 7F04A348 command 0D: colour transition - 7EEFC 7F04A3CC command 0E: set rotation - 7EF24 7F04A3F4 command 0F: rotate - 7F750 7F04AC20 - - 80B00 7F04BFD0 - 80B30: 7F04C000 - 7F04C044 - - 8193C 7F04CE0C - ??? - object explosion related - 81C9C 7F04D16C - - 82B00 7F04DFD0 V0= TRUE if A0 a destroyable object type (non-collectable standard object type); fries AT,T6,T7 - uses TLB pointers at 80052DF0 - accepts: A0=p->obj.data - 82B30: 7F04E000 - 82B3C 7F04E00C V0= TRUE if A0 a collectable object; fries AT,T6,T7 - uses TLB pointers at 80052EAC - accepts: A0=p->obj.data - 7F04E048 V0=TRUE if A0 a destroyable object and not invincible - accepts: A0=p->obj.data - 7F04E0CC - - 82C38 7F04E108 - detonate object A0? - removes ownership - accepts: A0=p->obj.data, A1=(float) ???, A2=p->xyz positions, A3=item type (as base for explosive) - 7F04E720 - 7F04E9BC - 7F04EA68 - 83A64 7F04EF34 V0= TRUE if object has not been destroyed; fries T6 - accepts: A0=p->std.object - calls: 7F03FFC0 - 7F04EF58 - - 83CA0 7F04F170 - 7F04F218 - - 83DE4 7F04F2B4 append text A400: "Picked up " - 83E1C 7F04F2EC append article "some", "a", "an", or "the" on ammo collection - accepts A0= p->text buffer, A1= ammo type, A2= amount - uses TLB pointers at 80052F10 - 7F04F31C display "some" - 7F04F338 display "a" or "some" if plural - 7F04F37C display "an" or "some" if plural - 7F04F3C0 display "the" or "some" if plural - 7F04F3FC display nothing; return - 83F3C 7F04F40C append name of ammo type A1 upon collection - accepts A0= p->text buffer, A1- ammo type, A2= amount - 7F04F43C display "ammo" (types 1-3) - 7F04F464 display "throwing" + "knife":"knives" - 7F04F4CC display "stick":"sticks" + "of dynamite" - [7F045F24] jump to handler for non-special case types - 7F04F544 display "shotgun cartridge" - 7F04F560 display "magnum bullet" - 7F04F57C display "golden bullet" - 7F04F598 display "hand grenade" - 7F04F5B4 display "grenade round" - 7F04F5D0 display "rocket" - 7F04F5EC display "remote mine" - 7F04F608 display "proximity mine" - 7F04F624 display "timed mine" - 7F04F640 display "dart" - 7F04F65C display "explosive pen" - 7F04F678 display "explosive case" - 7F04F694 display "flare" - 7F04F6B0 display "piton" - 7F04F6CC display "bug" - 7F04F6E8 display "micro camera" - 7F04F704 display "GoldenEye key" - 7F04F720 display "token" - 7F04F73C display "plastique" - 7F04F750 pluralize if multiples - [7F04F774] return - 842B8 7F04F788 sets sound effects on ammo type A0 collection - 7F04F7B4 SE 0EA: firearm - 7F04F7D0 SE 0EB: mine - 7F04F7EC SE 0E9: knife - 7F04F800 no sound; return - 84340 7F04F810 sets sound effects on weapon type A0 collection - 84450 7F04F920 Display ammo type collection text. Region-specific ordering - accepts: A0=p->final text, A1=ammo type, A2=quantity - [7F04F950] japanese text - [7F04F990] english text - 84528 7F04F9F8 Display text when ammo collected; reroutes to 7F04F920 and 7F08A3C8 - accepts ammo type A0, amount A1 - 84598 7F04FA68 adds A1 ammo of type A0 to inventory; also unlocks weapons linked to ammo - A2=play sound (0-n:1-y) - A3=display text (0-n:1-y) - [7F04FB04] 05 ammo unlocks grenades - [7F04FB14] 07 ammo unlocks remote mines and detonator - [7F04FB38] 08 ammo unlocks proximity mines - [7F04FB54] 09 ammo unlocks timed mines - [7F04FB70] 0A ammo unlocks throwing knives - [7F04FB8C] 10 ammo unlocks explosive case - [7F04FBA8] 14 ammo unlocks bug - [7F04FBC4] 15 ammo unlocks micro camera - [7F04FBE0] 16 ammo unlocks goldeneye key - [7F04FBFC] 1D ammo unlocks token - [7F04FC18] 17 ammo unlocks plastique - [7F04FC2C] return - 8476C 7F04FC3C V0= ammo collected from 07 ammo clip; first 0xE ammo types only - accepts: A0= p->obj.data - 7F04FC70 10 type 1 - 7F04FC78 10 type 2 - 7F04FC80 10 type 3 - 7F04FC88 5 type 4 - 7F04FC90 5 type C - 7F04FC98 3 type D - 7F04FCA0 4 type E - 7F04FCA4 1 types 5, 6, 7, 8, 9, A, B - 84828 7F04FCF8 V0= ammo collected from 08 weapon; first 0xE ammo types only - accepts: A0= p->obj.data - 7F04FD50 10 type 1 - 7F04FD58 10 type 2 - 7F04FD60 10 type 3 - 7F04FD68 5 type 4 - 7F04FD70 5 type C - 7F04FD78 3 type D - 7F04FD80 4 type E - 7F04FD88 3 type B - 7F04FD8C 1 types 5, 6, 7, 8, 9, A - 84910 7F04FDE0 Generates language-specific text upon collecting weapon A1: "Picked up " + "article" + "weapon name" - accepts: A0=p->final string, A1=item type - [7F04FE04] japanese - [7F04FE2C] english - 84B30: 7F050000 - 84D54 7F050224 display text for collecting weapon A0 in lower-left corner - 84D80 7F050250 collect or interact with object - 7F0502C4 4 04 key object collection; play SE 0E5 - 7F050310 7 07 ammo clip object collection - 7F050338 14 14 ammo box object collection - 7F0503DC 8 08 weapon object collection - [7F050410] test if flag just collected, and if so place in hand - 7F0505B4 15 15 body armor object collection - 7F05062C default object - 8520C 7F0506DC object collectability subroutines - these do not use direct links but branches, but annotating for cataloging purposes - [7F05093C] 07 object collectability: ammo clip - [7F050980] 14 object collectability: ammo box - [7F050A38] 15 object collectability: body armor - [7F050AF0] sets collectability for object - [7F050D20] finish object collectability routine - 7F050D30 - - 7F050DE8 - - 86548 7F051A18 trigger remote mine detonation - 86598 7F051A68 V0= TRUE if an entry A1 is a collectable item of type A0 - scans entire obj.pos.data table from A1 onward - accepts: A0=item type, A1=p->obj.pos.data - 8661C 7F051AEC V0= TRUE if item A0 depositted - 8668C 7F051B5C add A0 to temp proximity mine table - accepts: A0=p->obj.data - 866C4 7F051B94 remove temp proximity mine table entry A0; fries V0,V1,T6 - searches table at 80071E00 for matching obj.data pointer - accepts: A0=p->obj.data - 866FC 7F051BCC detonate any temp proximity mines within range of position A0 - accepts: A0=p->(float) xyz positions - 7F051CC8 - 868A4 7F051D74 link items A0 and A1; fries T6,T7 - accepts: A0=p->obj.data, A1=p->obj.data - 868C0 7F051D90 V0=p->item's established position entry, after completing object data block - calls: 7F04054C, 7F052574 - accepts: A0=p->obj.data, A1=p->model header, A2=p->target pos.data entry, A3=??? - 7F051DD8 - - 86B30: 7F052000 - - 86B9C 7F05206C V0=p->new item A1 instance using model A0 - 86D18 7F0521E8 Sets 0x4 in runtime flags for item held by guard in hand A1; fries V0,V1,T6,T7,T8,T9 - accepts: A0=p->GUARDdata, A1=hand (0-R,1-L) - 86D44 7F052214 V0=obj.position (8006); A1=model#, A2=type - 86F04 7F0523D4 actor @A0 draws weapon A2, model A1 if possible - accepts: A0=p->GUARDdata, A1=model, A2=item type - returns: V0= p->weapon pos.data (8006) - calls 7F052214: SP+10=0, SP+14=0 - 7F0523F8 - 87084 7F052554 redirect to 7F0506DC - 7F052574 - 7F052604 - 871B4 7F052684 returns V0 for specific hat models 0D4-0DF or -1 otherwise - accepts: A0=p->position data for hat.object - uses TLB pointers at 800532F4 - 7F0526B4 V0=4 fur hats: 0D4, 0D5, 0D6 - 7F0526BC V0=1 green caps: 0D7, 0D8 - 7F0526C4 V0=3 helmets: 0D9, 0DA - 7F0526CC V0=5 moonraker: 0DB - 7F0526D4 V0=0 berets: 0DC, 0DD, 0DE - 7F0526DC V0=2 officer cap: 0DF - 7F0526E4 V0=-1 default - 8721C 7F0526EC - 7F052B00 - accepts: A0=p->object - 7F052D8C - accepts: A0=p->object - 880C8 7F053598 - if GUARDdata+F0 not -1, calls 7F0B9DBC: A0=GUARDdata+F0, A1=1 - 880F4 7F0535C4 - if GUARDdata+F0 not -1, calls 7F0B9DBC: A0=GUARDdata+F0, A1=0 - 88120 7F0535F0 initialize door A0 - accepts: A0=p->std.object, A1=p->xyz position (posdata), A2=matrix?, A3=p->tile, SP+10=, SP+14=p->xyz position (obj.runtime) - 882E8 7F0537B8 - 7F053894 - 8849C 7F05396C - ???, sets sound effect source to positions - accepts: A0=p->SE entry, A1=p->(float) xyz positions, A2=(float), A3=(float) - 884E8 7F0539B8 - ??? - calls 7F0537B8: A2=5000.0, F14= [80053348] - 88514 7F0539E4 - ??? - calls 7F053894: A2=5000.0, A3=6000.0 - 88540 7F053A10 set position as source of sound effect - accepts: A0=p->SE entry, A1=p->(float) xyz positions - calls 7F05396C: A2=5000.0, A3=6000.0 - 7F053A3C - - 886A8 7F053B78 plays door opening sound effects; JR using 8005334C - 88A94 7F053F64 plays door opening sound effects; JR using 80053390 - 88B30: 7F054000 - 88DF4 7F0542C4 plays door closing sound effects; JR using 800533D4 - 88FE8 7F0544B8 plays door closing sound effects; JR using 80053418 - 8927C 7F05474C - - 893D4 7F0548A4 - ??? - accepts: A0=p->obj.data, A1=state - 894B8 7F054988 set door A0's state to A1 - accepts: A0=p->obj.data, A1=state (1-open, 2-closed) - - 7F054A64 - - 7F05599C - - 8A8F8 7F055DC8 start alarm [1->80030AC0]; fries V0,T6,T7 - 8A91C 7F055DEC deactivates alarm sound effect [80030AC4]; fries A0 - 8A95C 7F055E2C stop alarm [0->80030AC0]; fries AT, - calls: 7F055DEC - 8A980 7F055E50 V0= TRUE if alarm on - 8A994 7F055E64 initializes and triggers toxic gas effect - if stage 0x20 (egypt) does not trigger gas - accepts: A0=p->3 floating point values - 7F055EF8 - - 8AA68 7F055F38 V0= TRUE if toxic gas has been activated; fries AT,F4,F6 - tests if gas timer [80030AC8] is greater than zero - 8AA94 7F055F64 - - - 8AB30: 7F056000 - - 8AC90 7F056160 set or unset (A1=0,1) clock lock bits A0; fries: V0,T0,T6,T7,T8,T9 - zero as a clock lock value displays it on screen - known lock values by usage: - 01 show timer command - 02 plastique detonating - 10 disable interface command - 8ACCC 7F05619C V0= 1 if clock on screen; fry T6 - 8ACE0 7F0561B0 F12->clock time; fry AT - 8ACEC 7F0561BC F0= clock time; fry AT - 8ACF8 7F0561C8 set clock on[1]/off[0] [A0]; fry AT - 8AD04 7F0561D4 V0= clock on[1]/off[0] - - 8B2AC 7F05677C current player drops inventory - 7F056850 - 8B424 7F0568F4 V0= size in words of setup object types; fries AT,T6,T7 - accepts: A0=p->object - uses 0x2F TLB pointers at 80053490 - 7F05691C V0=7 type 9 - 7F056924 V0=40 type 1 - 7F05692C V0=2 type 2 - 7F056934 V0=20 type 3 - 7F05693C V0=20 type 2A - 7F056944 V0=25 type 2F - 7F05694C V0=20 type 2B - 7F056954 V0=20 type 24 - 7F05695C V0=21 type 4 - 7F056964 V0=20 type 5 - 7F05696C V0=3B type 6 - 7F056974 V0=21 type 7 - 7F05697C V0=22 type 8 - 7F056984 V0=40 type A - 7F05698C V0=95 type B - 7F056994 V0=20 type C - 7F05699C V0=36 type D - 7F0569A4 V0=3 type E - 7F0569AC V0=20 type 11 - 7F0569B4 V0=3 type 12 - 7F0569BC V0=4 type 13 - 7F0569C4 V0=5 type 2C - 7F0569CC V0=2D type 14 - 7F0569D4 V0=22 type 15 - 7F0569DC V0=4 type 16 - 7F0569E4 V0=A type 25 - 7F0569EC V0=4 type 17 - 7F0569F4 V0=1 type 18 - 7F0569FC V0=2 type 19 - 7F056A04 V0=2 type 1A - 7F056A0C V0=2 type 1B - 7F056A14 V0=2 type 1C - 7F056A1C V0=2 type 1D - 7F056A24 V0=4 type 1E - 7F056A2C V0=1 type 1F - 7F056A34 V0=4 type 20 - 7F056A3C V0=5 type 21 - 7F056A44 V0=1 type 22 - 7F056A4C V0=4 type 23 - 7F056A54 V0=4 type 26 - 7F056A5C V0=2C type 27 - 7F056A64 V0=2D type 28 - 7F056A6C V0=38 type 2D - 7F056A74 V0=7 type 2E - 7F056A7C V0=1 default; types F,10,29 - 8B5B8 7F056A88 - 7F056B1C - 7F056BA8 - ??? - accepts: A0=p->obj.posdata - 8B768 7F056C38 loads model A0 - 7F056CA0 - - 8BBF0 7F0570C0 V0= handle to tagged object# A0 - 8BC34 7F057104 V0=p->text for watch briefing page A0 (0-5) - accepts: A0=page# (0-title, 1-Overview, 2-M briefing, 3-Q briefing, 4-Moneypenny) - 8BCD8 7F0571A8 V0=#objectives+1 [800322F0] - 8BCE8 7F0571B8 V0=p->text for objective# A0 - 8BD34 7F057204 V0= difficulty for objective# A0; fries AT,V1,T6 - 8BD68 7F057238 V0= status of objective A0 - returns 2 if failed, 1 if complete, 0 if incomplete - Objectives Microcode Handler - 7F0572C4 type19 destroy object - 7F0572F8 type1A complete if TRUE - 7F057314 type1B failed if TRUE - 7F057330 type1C collect object - 7F05737C type1D deposit object - 7F0573B0 type1E photograph object - 7F0573FC type20 enter room - 7F057410 type21 deposit object in room - 7F057424 type22 use key analyzer on object - 7F057438 default: type17 create mission objective type18 end objective type1F NULL - 8BFE8 7F0574B8 V0= TRUE if objectives completed - 8C070 7F057540 display "objective x: status" in lower-left corner when status of objective changes - 7F057744 - - 8C9D0 7F057EA0 calls 7F057EAC: F12+=Pi/2 - 8C9DC 7F057EAC - ??? - accepts: F12=degree measure - 8CB00 7F057FD0 initialize 0x40 of data at A0; fries: AT,F0,F2 - copies 0 to first 0x38 words, 1.0 to 0x3C - 8CB30: 7F058000 - 7F058020 - 7F058068 - 7F058098 - 7F0580C8 - - 7F058474 - - 8D494 7F058964 initializes A1 and copies position data from A0 to A1+30; fries: AT,F0,F2,F4,F6,F8 - 8D4C8 7F058998 copies first 3 floats at A0 to A1+0x30; fries: F4,F6,F8 - 7F0589B4 - - 8D5AC 7F058A7C multiply matrix A1 by F12?; fries: F4,F6,F8,F10,F12,F16,F18 - 7F058B10 - - 7F058C4C - 7F058C9C - - 7F059424 - 8E1C4 7F059694 - ??? - calls 7F059424 - accepts: A0=p->display list, A1=(float) x pos?, A2=(float) y pos?,A3=(float) z pos?, - SP+10=x pos?, SP+14=y pos?, SP+18=?, SP+1C=?, SP+20=?, SP+24= - 7F059708 - - 7F059908 - - 8EB30: 7F05A000 - 7F05A250 - 7F05A310 - 7F05A774 - 7F05A928 - 7F05A9B8 - 7F05A9E0 - - 8F560 7F05AA30 computes angle using inverse sine or cosine, as necessary - returns F0=angle between vectors F12 and F14 - accepts: F12=vector 1, F14=vector 2 - 7F05AB70 - ??? - uses tables of shorts at 8003241C, 8003239C, and 80032320 - 7F05ABF0 - 7F05AC44 - 7F05ACB0 - 7F05AD5C - 7F05AE00 - 7F05AE50 - 7F05AEFC - 7F05B024 - 7F05B154 - 7F05B1E0 - 7F05B3F4 - 7F05B528 - 7F05B57C - 7F05B5D4 - 7F05B628 - 7F05B798 - 7F05B9B4 - 7F05BA08 - 7F05BC68 - 7F05BE10 - 7F05BE88 - 7F05BF8C - 7F05BFD4 - 90B30: 7F05C000 - - 90E90 7F05C360 F0=truncf(F12); fries AT,T7,T9,F2,F4,F6,F8,F10,F16,F18 - 7F05C3D8 - - 91050 7F05C520 A0->80034C9C; fry AT - 9105C 7F05C52C - V0= [80034C9C] - - 913E4 7F05C8B4 V0= p->item A0's statistics (80032494 table); fries V1,T6,T7,T8 - 91420 7F05C8F0 copies item in hand A0's (0-R,1-L) position to A1 - 91468 7F05C938 copies item in hand A0's (0-R,1-L) position from A1 to main list - 914B0 7F05C980 - accepts: A0=hand (0-right; 1-left) - 919FC 7F05CEBC - accepts: A0=hand (0-right; 1-left) - 91A30 7F05CF00 V0= item type in current player's hand A0 (0-R,1-L); fries T6,T7,T8 - 91A48 7F05CF18 V0=p->obj.header for item in cur. player's hand A0 (0-R,1-L) - 91A8C 7F05CF5C remove item in cur. player's hand A0 (0-R,1-L) - 91AD4 7F05CFA4 places item A1 in hand A0 (0-R,1-L) if allowed; fries V1,A2,T0,T3,T6,T7,T8 - tests update registers and ensures weapon code has changed. Swaps and makes visible - 91B48 7F05D018 V0=p->item A0's text call line - 91B78 7F05D048 V0=p->weapon A0's model header line; fries AT,A0,V0,T6,T7 - 91BA8 7F05D078 - V0=[BONDdata+2A38] - 7F05D088 - ??? - used to load 1st person model on-demand - - 91F64 7F05D434 V0= next weapon in cycle for hand A0 (0-R,1-L); fries AT,V0,V1,T6,T7,T8,T9 - mode A1: - 0 - 1 previously drawn weapon - 7F05D4E0 - - 92200 7F05D6D0 advance through inventory - 92298 7F05D768 advance backward through inventory - 92330 7F05D800 auto-advance inventory when last of ammo for item spent - 92444 7F05D914 Draw item A1 in hand A0 (0-R,1-L); fries V0,V1,T0,T1,T2,T6,T7,T8,T9 - 92494 7F05D964 reload item in hand A0 (0-R,1-L) if more ammo available; fries A0,V0,T0,T6,T7,T8,T9 - 92500 7F05D9D0 V0= hand A0's item (0-R,1-L); fries T6,T7,T8 - 92530 7F05DA00 Draw item A1 in hand A0 (0-R,1-L); fries V0,T0,T6,T7,T8,T9 - 92574 7F05DA44 V0= hand A0's item (0-R,1-L) - prefers 0x874 value if found; fries V1,A1,T6,T7 - 7F05DA8C - 7F05DAE4 - - 92684 7F05DB54 remove hand A0's (0-R,1-L) item. Probably the stock method of doing so when switching weapons - also returns its clip ammo to stock and tests if < 21 - 927B8 7F05DC88 V0= hand A0's firing status (0-R,1-L); fries T6,T7,T8 - 7F05DCE8 - - 92B30: 7F05E000 - 92B8C 7F05E05C V0=TRUE if you have ammo for item A0; calls 7F05E0B4 + 7F06942C + 7F069450 - fries: A0,A1,V1,T6,T7,T8,T9 - 92BE4 7F05E0B4 V0=TRUE if any of mask A1 is present in item A0's special attributes [statistics+0x6C] - 7F05E0E4 - - 93194 7F05E664 if hand A0's (0-R,1-L) item is watch (1E/17), F0=80053C78 - else, F0=80053C7C - 931E4 7F05E6B4 - - 9336C 7F05E83C - - 7F05EC1C - ??? - for thrown objects, after loading them. Sets path? don't know... - - 93E88 7F05F358 - ??? - generate player-thrown model? - select appropriate item model - uses TLB pointers at 80053CB0 0x23 - 7F05F564 1C 0C8: Proximity Mine - 7F05F56C 1B 0C9: Timed Mine - 7F05F574 21 0E2: Bombcase - 7F05F57C 2F 0F5: Bug - 7F05F584 30 0F6: Micro Camera - 7F05F58C 3D 0F8: GoldenEye Key - 7F05F594 22 111: Plastique - 7F05F598 1D,1E,1F,20,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,31,32,33,34,35,36,37,38,39,3A,3B,3C - 0C7: remote mine (default) - generate temporary object for item type and set timer - uses TLB pointers at 80053D3C 0x23 - 7F05F5D0 1D Remote Mine - 7F05F5F8 1C Proximity Mine - 7F05F620 1B Timed Mine - 7F05F648 21 Bombcase - 7F05F670 22,2F,30,3D static thrown items - 7F05F67C 1E,1F,20,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,31,32,33,34,35,36,37,38,39,3A,3B,3C default - 7F05F684 end of switch - 7F05F73C - - 94AF8 7F05FFC8 - ??? - handles firing or throwing weapon in hand A0 or something - accepts: A0=hand (0-right: 1-left) - 94B30: 7F060000 - uses TLB pointer table at 80053E38 0x14 - 7F0617B4 4,5,6,7,8,9,A,B,C,D,E,11,12,13,14,15 - 7F0617CC 16,17 - 7F0617D4 F,10 default - 96450 7F061920 - calls 7F05FFC8 for left and right hand - 7F061948 - - 96948 7F061E18 - ??? - uses allocated turret data - accepts: A0=???, A1=p->allocated turret data, A2=??? - 96B30: 7F062000 - 8C9D0 7F062B00 - ??? - increments autoturret timer + ??? - accepts: A0=p->allocated data for turret - 7F062BE4 - - 7F063004 ???; sets enviroment fog for items in solo watch menu - accepts: A0=p->display list, A1=, A2=p->buffer, A3=, SP+10=RGBA color - 7F0634D8 - - 7F06359C - 98B30: 7F064000 - 7F064364 - 7F0643A0 - 98F4C 7F06441C - ??? recalls joy2 hits edit flag, joy2 detail edit flag - 7F064720 - 992A4 7F064774 - ??? recalls joy2 hits edit flag - 7F064934 - 7F0649AC - 7F0649D8 - 99658 7F064B28 - ??? - handles weapon ID values, possibly 1st person animation - uses TLB pointers at 80053F24 [7F064DAC] - 7F064DD0 11,17 - 7F064DF4 26, - 7F064E54 3-10,12-16,18,1C,1E,21,22,3A - 7F064E68 19,1A,1B,1F,20,2D,2E,3B - 7F064E7C 2 - 7F064EEC 1 - 7F064F1C 3 - 7F064F30 1D - 7F064F7C 23-25,27,28,2A-2C,2F-39,47,55-57 - 7F064F90 default: 29,3C-46,48-54,58-5C - uses TLB pointers at 80054084 [7F064FC8] - 7F064FE8 27,3B - 7F065034 3-5,E-18,1D,1F,22,23 - 7F0650C4 6-D - 7F0651D0 1 - 7F06520C 1E - 7F06528C default: 2,19-1C,20,21,24-26,28-3A - Plays sound when drawing/reloading weapon - uses TLB pointers at 80054194 [7F065E34] - 7F065E54 SE 0F2 16 - 7F065E70 SE 0E9 2,3 - 7F065E8C SE 0EB 1B-1D - 7F065EA8 SE 0E8 default: 4-15,18,19,23-27,29-2E,31-3B - 7F065EBC no SE 0,1,17,1A,1E-22,28,2F,30,3C,3D - 9AB30: 7F066000 - uses TLB pointers at 8005429C [7F06618C] - 7F0661AC default 4-16,19,1A,24-28,2A-2E,31-3B - 7F0661C0 skips jump 0-3,17,18,1B-23,29,2F,30,3C,3D - 9B990 7F066E60 - 9BA28 7F066EF8 V0= key analyzer flag [BONDdata+1060]; fries T6 (p->BONDdata) - 7F066F08 - 9BAD4 7F066FA4 F0= vertical position on solo watch menu main page for item A0 [watch+0x14]; fries AT,T6 - 9BAF0 7F066FC0 F0= lateral position on solo watch menu main page for item A0 [watch+0x18]; fries AT,T6 - 9BB0C 7F066FDC F0= depth on solo watch menu main page for item A0 [watch+0x1C]; fries AT,T6 - 9BB28 7F066FF8 F0= z rotation on solo watch menu for item A0 [watch+0x20]; fries AT,T6 - 9BB44 7F067014 F0= x rotation on solo watch menu for item A0 [watch+0x24]; fries AT,T6 - 9BB60 7F067030 F0= 45.0 [42340000], A0->SP+0; fries AT - 9BB70 7F067040 V0= p->first title line for item A0 [watch+0x10]; fries A0,V1,T0,T6,T7,T8,T9 - 9BBA4 7F067074 V0= p->second title line for item A0 [watch+0x12]; fries A0,V1,T0,T6,T7,T8,T9 - 9BBD8 7F0670A8 V0= p->short watch text for item A0 [watch+0x2A]; fries A0,V1,T0,T6,T7,T8,T9 - 9BC0C 7F0670DC V0= p->long watch text for item A0 [watch+0x28]; fries A0,V1,T0,T6,T7,T8,T9 - 9BC40 7F067110 F0=45.0, A0->SP+0; fries AT - 9BC50 7F067120 F0= horizontal offset on solo watch menu inventory page for item A0 [watch+0x2C]; fries AT,T6 - 9BC6C 7F06713C F0= vertical offset on solo watch menu inventory page for item A0 [watch+0x30]; fries AT,T6 - 9BC88 7F067158 F0= depth offset on solo watch menu inventory page for item A0 [watch+0x34]; fries AT,T6 - 7F067174 - ??? - probably returns float F0 - accepts: A0=hand - - - 9BCD4 7F0671A4 - ??? - looks at left hand and right hand item - - 9BEE4 7F0673B4 - ??? - looks at hand A0 (0-R,1-L) - 9BF50 7F067420 - 9C6C4 7F067B94 calculate crosshair position/gun rotation - - 9CB30: 7F068000 - - 9DC24 7F0690F4 sets (A1=0) or unsets (A1!=0) flags A0 in [BONDdata+1064]; fries V0,T0,T6,T7,T8,T9 - accepts: A0=setting, A1=ammo on-screen setting - 9DC60 7F069130 add ammo type A0, amount A1 to cur. player - 9DD70 7F069240 V0= ammo of type A0 in cur. player's inventory; fries T6,T7,T8 - 9DD88 7F069258 V0= total ammo of type A0, including in weapon clips; fries A0,V0,V1,T6,T7,T8 - 9DE04 7F0692D4 V0= max ammo for type A0; fries T6 - 9DE20 7F0692F0 set max ammo for cur. player; fries V0,V1,A0,A1,T6,T7,T8,T9 - 9DE74 7F069344 V0= hand A0's (0-R,1-L) ammo on clip (+89C); fries T6,T7,T8 - 9DEA4 7F069374 V0= ammo for hand A0's weapon, used to handle shotguns to display shells - 9DF24 7F0693F4 REVISED ROMS ONLY - RESERVED FOR FUTURE USE - 9DF5C 7F06942C V0= ammo type for weapon A0; fries V1,T6,T7,T8 - 9DF80 7F069450 V0= ammo for weapon A0 in cur. player's inventory; fries V1,T6,T7,T8,T9 - 9DFB4 7F069484 add A1 of ammo for weapon A0 to cur. player; calls 7F05C8B4 + 7F069130 - 9DFE0 7F0694B0 V0= max ammo for weapon A0; fries V1,T6,T7,T8,T9 - 9E018 7F0694E8 microcode generation for image display - accepts: A0=p->microcode buffer, A1=p->image declaration, - A2=(float)horizontal position, A3=(float)-1?, - SP+10=(float)vertical position, SP+14=?, - SP+18=(float)vertical offset, SP+1C=? - SP+20=red, SP+24=green, SP+28=blue, SP+2C=alpha - 9E514 7F0699E4 sets RGBA values and redirects to display ammo type image - accepts: A0=p->microcode buffer, A1=p->image declaration, A2=(float), A3=(float), SP+10=(float)hor. offset, SP+14=, SP+18=(float)vert. offset, SP+1C= - calls: 7F0694E8 - 9E580 7F069A50 - ??? - display routine - accepts: A0=p->display list, A1=p->string, A2=???, A3=???, SP+10=???, SP+14=??? - - 9E7BC 7F069C8C displays ammo total A1 - accepts: A0=p->microcode buffer, A1=ammo total, A2=???, A3=???, SP+10=???, SP+14=??? - uses string "%d" from 80053BF4 - 9E824 7F069CF4 - ??? - generates microcode - 9EB30: 7F06A000 - 7F06A334 - 9F0D8 7F06A5A8 set or unset (A1= 0-1) bitflags A0 at BONDdata+0x1128; fries V0,T6,T0,T7,T8,T9 - accepts: A0=bitflags, A1=un/set register - 7F06A5E4 - 9F228 7F06A6F8 Increment hit count A1 for weapon A0 in cur.player's stats - Only count if 00010000 set in item A0's special function bitflags - increments word A1 in stats; refer to player statistics for details - 9F270 7F06A740 V0= cur.player's shot register A0 [stats+0]; fries T6,T7,T8 - technically loads word #A0 from stats. 0-6 valid shot registers. - 9F288 7F06A758 increment cur.civilian casualties [stats+0x6C]; fries: V0,T6,T7 - 9F2A0 7F06A770 V0= cur.player's civilian casualties [stats+0x6C]; fries: T6 - 9F2B0 7F06A780 increment cur.kill count [stats+0x1C], display text if multiplayer - 9F454 7F06A924 V0=cur.player's total kill count (stats+0x1C); fry T6 - 9F464 7F06A934 increment cur.#killed MwtGX special weapon owner (stats+0x20); fry V0,T6,T7 - 9F47C 7F06A94C V0=cur.player's #killed MwtGX special weapon owner (stats+0x20); fry T6 - 9F48C 7F06A95C increment cur.#deaths [BONDdata+29D8], display text if multiplayer - 9F538 7F06AA08 V0= cur.#deaths [BONDdata+29D8]; fries T6 - 9F548 7F06AA18 increment cur.#suicides [BONDdata+29DC], display text if multiplayer - 9F6D0 7F06ABA0 V0= cur.#suicides [BONDdata+29DC]; fries T6 - 7F06ABB0 - 9FB18 7F06AFE8 display image at on-screen coordinates - A0=p->display list, A1=p->(float) x/y positions, A2=(float) image width/height, A3=width, SP+10=height, - SP+14=rotate left 90deg. (1-yes; 0-no), SP+18=flip horizontally (1-yes; 0-no), SP+1C=flip vertically (1-yes; 0-no), - SP+20=red, SP+24=green, SP+28=blue, SP+2C=alpha - SP+30=!format, SP+34=??? - 9FC50 7F06B120 - ??? - uses TLB pointers at 80054490, per obj.table types - 7F06B174 types 1,2,3,B,C,D,E,F,10,15 - 7F06B188 default - 9FD78 7F06B248 - 9FDCC 7F06B29C - ??? - uses TLB pointers at 800544E4, per obj.table types - 7F06B2FC type 01 - 7F06B360 type 02 - 7F06B3C4 type 03 - 7F06B428 type 15 - 7F06B448 type 0E - 7F06B49C type 0F - 7F06B530 type 10 - 7F06B588 type 0B - 7F06B5DC type 0C - 7F06B630 type 0D - 7F06B6A4 default - A0658 7F06BB28 - A073C 7F06BC0C - ??? - uses TLB pointers at 80054538, per obj.table types - 7F06BD44 types 1,2,3,B,C,D,E,F,10,15 - 7F06BD68 default - A0930 7F06BE00 - ??? - uses TLB pointers at 80054598, per obj.table types - probably has to do with damage detail or 'blood' effect - 7F06BEF4 types 01,02,03,15 - 7F06BEFC types 0B,0C,0D,0E,0F,10 (identical routine) - 7F06BF04 type 0A [+JAL 7F074C68] - 7F06BF4C type 11 [+JAL 7F074CAC] - 7F06BF94 type 08 [-JAL 7F06E970] - 7F06BFA8 type 12 [-JAL 7F06E9BC] - 7F06BFBC type 17 [-JAL 7F06EA08] - 7F06BFC8 default - A0B30: 7F06C000 - 7F06C010 - 7F06C060 - A0BC4 7F06C094 V0=obj.instance controller generated from nonaircraft object header A0 - accepts: A0=p->obj.header - A0D64 7F06C234 set scale to 0.0 in nonaircraft object instance A0 - 0->A0+8: - A0D6C 7F06C23C V0=obj.instance controller generated from aircraft object header A0 - A0EE4 7F06C3B4 - A0F28 7F06C3F8 set scale to 0.0 in aircraft object instance A0 - 0->A0+8: - A0F30 7F06C400 - A0-> [80036084]; fry AT - A0F3C 7F06C40C - F12-> [80036088]; fry AT - A0F48 7F06C418 - A0F90 7F06C460 A0-> [8003608C] - accepts: A0=p->function - A0F9C 7F06C46C unconditional return - A0FA4 7F06C474 - A1080 7F06C550 redirect to 7F06C474 - A10A0 7F06C570 - accepts: A0=, A1= - A1190 7F06C660 - accepts: A0=, A1=, A2= - 7F06C6A0 - 7F06C710 - 7F06C768 - A12CC 7F06C79C extracts ID values from object structure microcode - 7F06C7D8 xx01 A2= halfword @ 0xC - 7F06C7E4 xx18 A2= halfword @ 0x1A - 7F06C7F0 xx07 A2= halfword @ 0x1AA - 7F06C7FC xx08 A2= halfword @ 0xC - 7F06C808 xx12 A2= halfword @ 0x4 - 7F06C814 xx09 A2= halfword @ 0x22 - 7F06C820 xx0B A2= halfword @ 0x44 - 7F06C82C xx0C A2= halfword @ 0x20 - 7F06C838 xx17 A2= halfword @ 0x0 - 7F06C840 default - A13C8 7F06C898 - 7F06C9D0 - 7F06CB98 - 7F06CC0C - A17B0 7F06CC80 - 7F06CD3C - A19A8 7F06CE78 set scale A1 to object instance controller A0 + 14 - [float] A1->A0+14; fries F12 - A19B4 7F06CE84 - [float] A1->A0+B8; fries F12 - A19C4 7F06CE90 getjointsize - uses TLB pointers at 80054B60, per obj.table types - used for character impact animations - 7F06CEF8 type 01 float @ +0x8 - 7F06CF10 type 02 float @ +0x18 - 7F06CF28 type 03 float @ +0x18 - 7F06CF40 type 15 float @ +0x10 - 7F06CF58 type 0B float @ +0x40 - 7F06CF70 type 0C float @ +0x1C - 7F06CF88 type 0D float @ +0x18 - 7F06CFA0 type 0E float @ +0xC - 7F06CFB8 type 0F float @ +0x18 - 7F06CFD0 type 10 float @ +0x14 - 7F06CFE8 default - A1B3C 7F06D00C - 7F06D07C - 7F06D0CC - 7F06D160 - - 7F06D6B0 - - A2B30: 7F06E000 - 7F06E0A0 - 7F06E2B8 - 7F06E540 - 7F06E64C - 7F06E7A8 - A3388 7F06E858 ???; called by 7F06EEA4 for type 08 distance triggers - accepts: A0=, A1=p->obj.table entry - 7F06E970 - 7F06E9BC - A3538 7F06EA08 ???; called by 7F06EEA4 for type 17 pointer to head - accepts: A0=, A1=p->obj.table entry - 7F06EA54 - 7F06EB10 - A366C 7F06EB3C ???; called by 7F06EEA4 for type 09 head/hat placement interlink - accepts: A0=, A1=p->obj.table entry - A3828 7F06ECF8 ???; called by 7F06EEA4 for type 07 - accepts: A0=, A1=p->obj.table entry - A39D4 7F06EEA4 - accepts: A0=, A1=p->obj.header - ??? - uses object table entries and TLB entries at 80054C20 - 7F06EEFC types 01,02,03,0B,0C,0D,0E,0F,10,15 - 7F06EF04 type 08 distance trigger - 7F06EF18 type 09 head/hat placement interlink - 7F06EF2C type 07 unknown - 7F06EF40 type 17 pointer to head - 7F06EF4C default - A3AF4 7F06EFC4 - ??? - uses object table entries and TLB entries at 80054C80 - accepts: A0=p->object instance - 7F06F014 type 08 distance trigger - 7F06F028 type 09 head/hat placement interlink - 7F06F03C type 07 unknown - 7F06F050 type 12 handle/switch - 7F06F064 type 17 pointer to head - 7F06F078 default - A3C00 7F06F0D0 - ??? - uses object table entries and TLB entries at 80054CE0 - 7F06F128 type 01 group heading - 7F06F140 type 02 position - 7F06F158 type 03 unknown - 7F06F170 type 15 subposition - 7F06F188 type 08 distance trigger - 7F06F19C type 09 head/hat placement interlink - 7F06F1B0 type 07 unknown - 7F06F1C4 type 12 handle/switch - 7F06F1D8 type 17 pointer to head - 7F06F1EC default - A3D78 7F06F248 - 7F06F2F8 - A40DC 7F06F5AC - V0= word at A0+20: - A40E4 7F06F5B4 - V0= byte at A0+24: - A40EC 7F06F5BC - F0= float at A0+28: - 7F06F5C4 - - A4B30: 7F070000 - - A4D04 7F0701D4 - A0-> [80036250]; fry AT - A4D10 7F0701E0 - V0= [80036250] - 7F0701EC - - 7F070AEC - - - A6B30: 7F072000 - - 7F072644 - 7F0726F8 - 7F072784 - 7F072984 - A7740 7F072C10 - A0->SP+0, A1->SP+4, A2->SP+8 - 7F072C20 - 7F073038 - A7B9C 7F07306C - A0->SP+0, A1->SP+4, A2->SP+8 - 7F07307C - A831C 7F0737EC - A0->SP+0, A1->SP+4, A2->SP+8 - A832C 7F0737FC - A0->SP+0, A1->SP+4, A2->SP+8 - 7F07380C - A8AF8 7F073FC8 - A0-> [800363F0]; fry AT - 7F073FD4 - A8B30: 7F074000 - A9044 7F074514 - A0->SP+0, A1->SP+4, A2->SP+8 - A9054 7F074524 - A0->SP+0, A1->SP+4, A2->SP+8 - A9064 7F074534 - ??? - uses object table entries and TLB entries at 80054D54 - 7F07456C type 08 JAL 7F06E970, A0=A3, A1=A2 - 7F074580 type 12 JAL 7F06E9BC, A0=A3, A1=A2 - 7F074594 type 17 JAL 7F06EA08, A0=A3, A1=A2 - 7F0745A8 type 09 JAL 7F06EB10, A0=A3, A1=A2 - 7F0745BC type 0B JAL 7F0737FC, A1=A3 - 7F0745CC type 0C JAL 7F07380C, A1=A3 - 7F0745DC type 0D JAL 7F073FD4, A1=A3 - 7F0745EC type 0A JAL 7F074514, A1=A3 - 7F0745FC type 11 JAL 7F074524, A1=A3 - 7F07460C type 04 JAL 7F072784, A1=A2 - 7F07461C type 18 JAL 7F072984, A1=A3 - 7F07462C type 14 JAL 7F072C10, A1=A3 - 7F07463C type 16 JAL 7F072C20, A1=A2 - 7F07464C type 05 JAL 7F07306C, A1=A3 - 7F07465C type 07 JAL 7F07307C, A1=A3 - 7F07466C type 06 JAL 7F0737EC, A1=A3 - 7F074674 default - A91B4 7F074684 - 7F074790 - - A9E2C 7F0752FC - ??? - uses object table entries and TLB entries at 80054D54 - 7F0753CC type 0A - 7F075404 type 11 - 7F07543C type 08 - 7F075450 type 12 - 7F075464 type 17 - 7F075470 default - A9FCC 7F07549C - - AA10C 7F0755DC Converts object microcode offsets into rdram addresses - 7F075678 xx01 - 7F075698 xx02 - 7F0756B8 xx03 - 7F0756D8 xx04 - 7F0756FC xx18 - 7F07578C xx14 - 7F0757AC xx05 - 7F07583C xx07 - 7F0758F4 xx06 - 7F075904 xx08 - 7F07592C xx12 - 7F07594C xx09 - 7F075980 xx11 - 7F0759A0 xx0B - 7F0759C4 xx0C - 7F0759E8 xx0D - 7F075A20 xx16 - 7F075A44 default: 0A, 0E, 0F, 10, 13, 15, 17 - AA5C0 7F075A90 - AA638 7F075B08 - A0->SP+0, A1->SP+4, A2->SP+8, A3->SP+C - AA64C 7F075B1C Set object microcode entry numbers; A0=p->obj.table, A1=p->obj.header - 7F075B68 xx01 - 7F075B84 xx07 - 7F075BA0 xx08 - 7F075BC0 xx12 - 7F075BE0 xx17 - 7F075C00 xx09 - 7F075C30 xx0B - 7F075C4C xx0C - 7F075C68 xx18 - 7F075C84 default: 02, 03, 04, 05, 06, 0A, 0D, 0E, 0F, 10, 11, 13, 14, 15, 16 - 7F075CDC kill routine - AA824 7F075CF4 set obj. use flag, compute group #s, set obj loaded byte; A0=p->obj.header - redirect to 7F075B1C, setting A0=p->obj.table, A1=p->obj.header - returns V0=TRUE if object loaded byte is set - AA85C 7F075D2C object microcode handler (use unknown) - 7F075D88 xx01 - 7F075E00 xx07 - 7F075E18 xx08 - 7F075E78 xx09 - 7F075E9C xx0B - 7F075EB4 xx0C - 7F075E38 xx12 - 7F075E5C xx17 - 7F075ECC xx18 - 7F075EF4 default: 02, 03, 04, 05, 06, 0A, 0D, 0E, 0F, 10, 11, 13, 14, 15, 16 - AAA98 7F075F68 - accepts: A0=p->obj instance controller, A1=p->object header, A2=p->object table index - - AAB30: 7F076000 - AAFD4 7F0764A4 loads obj and fills header - accepts: A0=p->header, A1=p->recall string, A2=target loc, A3=size left, SP+10= ? - AB07C 7F07654C loads object into memory - accepts: A0=p->header, A1=p->recall string - redirects to 7F0764A4, setting A2, A3, & SP+10 = 0 - AB0A4 7F076574 loads object into memory - accepts: A0=p->header, A1=p->recall string, A2=target loc, A3=size left - redirects to 7F0764A4, setting SP+10 = 0 - AB0C4 7F076594 - next three words blank - AB0D0 7F0765A0 determines if A0 is less than a certain power of 2; fries AT - A0<2 V0=0 - A0=2 V0=1 - A0=3-4 V0=2 - A0=5-8 V0=3 - A0=9-10 V0=4 - A0=11-20 V0=5 - A0=21-40 V0=6 - A0=41-80 V0=7 - A0>80 V0=8 - AB178 7F076648 V0=ceil(0x8000 /width A0); fries: AT,V1,T1,T6,T7,T8,F0,F4,F6,F8,F10,F16,F18 - AB1DC 7F0766AC V0=ceil(0x4000 /width A0); fries: AT,V1,T1,T6,T7,T8,F0,F4,F6,F8,F10,F16,F18 - AB240 7F076710 V0=ceil(0x2000 /width A0); fries: AT,V1,T1,T6,T7,T8,F0,F4,F6,F8,F10,F16,F18 - AB2A4 7F076774 V0=ceil(0x1000 /width A0); fries: AT,V1,T1,T6,T7,T8,F0,F4,F6,F8,F10,F16,F18 - 7F0767D8 - accepts: A0=width, A1=height, A2=???, - 7F076848 - 7F0768B8 - 7F076928 - 7F076998 - ??? - generates microcode - othermode settings - accepts: A0=p->DL, A1=???, A2=???, A3=bowtie - AB898 7F076D68 - ??? image processor of some type; likely generates DL for image declaration - accepts: A0=p->display list target, A1=p->imgcall, A2=?, A3=?, SP+10=? - AC6E8 7F077BB8 - ??? copies A0->SP+0, A1->SP+4, A2->SP+8, A3->SP+C - AC6FC 7F077BCC unconditional return - AC708 7F077BD8 - ??? F12->BONDdata+1090, F14->BONDdata+1094, F12/2->BONDdata+10AC, F14/2->BONDdata+10B0 - accepts: F12=?, F14=? - fries: AT,V0,T6,T7,T8,T9,F0,F4,F6 - AC744 7F077C14 - ??? F12->BONDdata+1098 & F14->BONDdata+109C; fries V0,T6,T7 - AC760 7F077C30 - ??? F12->BONDdata+10A0, F14->BONDdata+10A4, A2[float]->BONDdata+10A8; fries V0,T6,T7,T8,F4,SP+8 - AC78C 7F077C5C - ??? - ACA1C - - ACB30: 7F078000 - - ACE54 7F078324 - A0->BONDdata+10C4; fries T6 - ACE64 7F078334 - V0= BONDdata+10C4; fries T6 - ACE74 7F078344 - A0->BONDdata+10C8; fries T6 - ACE84 7F078354 - V0= BONDdata+10C8; fries T6 - ACE94 7F078364 - A0->BONDdata+10D8; fries T6 - ACEA4 7F078374 - V0= BONDdata+10D8; fries T6 - ACEB4 7F078384 - A0->BONDdata+10E0; fries T6 - ACEC4 7F078394 - V0= BONDdata+10E0; fries T6 - ACED4 7F0783A4 - A0->BONDdata+10CC; copies original value to BONDdata+10CC; fries V0,V1,T6,T7 - ACEF4 7F0783C4 - V0= BONDdata+10CC; fries T6 - ACF04 7F0783D4 - A0->BONDdata+10DC; fries T6 - ACF14 7F0783E4 - V0= BONDdata+10DC; fries T6 - ACF24 7F0783F4 - V0= BONDdata+10E8; fries T6 - ACF34 7F078404 - A0->BONDdata+10D0; fries T6 - ACF44 7F078414 - V0= BONDdata+10D0; fries T6 - ACF54 7F078424 - A0->BONDdata+10D4; copies original value to BONDdata+10EC; fries V0,V1,T6,T7 - ACF74 7F078444 - V0= BONDdata+10D4; fries T6 - ACF84 7F078454 - V0= BONDdata+10EC; fries T6 - ACF94 7F078464 - A0->BONDdata+10E4; fries T6 - ACFA4 7F078474 - V0= BONDdata+10E4; fries T6 - ACFB4 7F078484 - F0= BONDdata+10F8; fries T6 - ACFC4 7F078494 - V0= BONDdata+10FC; fries T6 - ACFD4 7F0784A4 - F0= BONDdata+1090; fries T6 - ACFE4 7F0784B4 - F0= BONDdata+1094; fries T6 - ACFF4 7F0784C4 - F0= BONDdata+1098; fries T6 - AD004 7F0784D4 - F0= BONDdata+109C; fries T6 - AD014 7F0784E4 - F0= BONDdata+10A4; fries T6 - AD024 7F0784F4 - F0= BONDdata+10A8; fries T6 - 7F078504 - - ADC20 7F0790F0 V0=selected spawn# - ADF1C 7F0793EC - ??? initialize player data? - 7F0798B8 - 7F079988 - 7F0799AC change crouch position (used for aiming) - 7F0799F0 - 7F079A1C - AE580 7F079A50 - A0->BONDdata+0; fry T6 - 7F079A60 - AE820 7F079CF0 load player and set up their character's obj.instance - 7F079E00 body=16: cuff 3 - Boiler - 7F079E0C body=18: cuff 2 - Jungle - 7F079E18 body=19: cuff 4 - Snowsuit - 7F079E24 body=05: cuff 1 - Brosnan Tux - 7F079E30 body=05: cuff 5 - Connery - 7F079E3C body=05: cuff 6 - Moore - 7F079E48 body=05: cuff 7 - Dalton - 7F079E54 body=##: cuff 8 - Selected Bond Body - 7F079EF4 head=4A: cuff 3 - Boiler - 7F079F00 head=4C: cuff 2 - Jungle - 7F079F0C head=4E: cuff 1 - Brosnan Tux - 7F079F18 head=4E: cuff 5 - Connery - 7F079F24 head=4E: cuff 6 - Moore - 7F079F30 head=4E: cuff 7 - Dalton - 7F079F3C head=##: cuff 8 - Selected Bond Head - 7F079F60 multiplayer bodies and heads - AEB30: 7F07A000 - AEFD0 7F07A4A0 ???; solo intro camera handler? - AF058 7F07A528 V0= current camera mode [80036494] - 7F07A534 - AF4E8 7F07A9B8 use intro camera mode A0 (0-9) - [7F07A9E8] 1-solo static intro camera - [7F07AA88] 2-fade to swirl - [7F07AAC4] 9-MP rotating intro camera - [7F07AB1C] 3-solo rotating intro camera - [7F07AC88] 4-1st person mode - [7F07AD74] 5-(used during death+respawn) - [7F07B0AC] 6- - [7F07B0E8] 7- - [7F07B110] 8-return to 1st person mode from camera - [7F07B130] A- - [7F07B194] default - return - AFCD4 7F07B1A4 - AFDD0 7F07B2A0 - AFEF4 7F07B3C4 V0= current camera state - B0B30: 7F07C000 - - B1070 7F07C540 - A0->[BONDdata+42C]; fries T6 - B1080 7F07C550 A0->cur.player's look-ahead setting [BONDdata+118]; fries T6 - B1090 7F07C560 V0= cur.player's look-ahead setting [BONDdata+118]; fries T6 - B10A0 7F07C570 A0->cur.player's auto-aim [BONDdata+128]; fries T6 - B10B0 7F07C580 V0= cur.player's auto-aim setting; fries AT,V0,V1,T6,T7,T8,T9 - solo draws from BONDdata+128, multi from stats+6A - B10F0 7F07C5C0 redirect to 7F07C580 - B1110 7F07C5E0 V0= cur.player's auto-aim y setting [BONDdata+128]; fries T6 - 7F07C5F0 - B1188 7F07C658 A0->cur.player's auto-aim x setting [BONDdata+138]; fries T6 - B1198 7F07C668 V0= cur.player's auto-aim x setting; fries AT,V0,V1,T6,T7,T8,T9 - solo draws from BONDdata+138, multi from stats+6A - B11D8 7F07C6A8 - redirect to 7F07C668 - 7F07C6C8 - 7F07C730 change player position using given source - accepts: A0=p->target pos.block, A1=p->source pos, A2=p->tile - A0=BONDdata position block pointer - A1=x,y,z position - 7F07C7B4 - 7F07C888 - 7F07CA2C - 7F07CAC8 - B18D8 7F07CDA8 - calls: 7F07CAC8: A3=0 - 7F07CDD4 - B19A8 7F07CE78 V0= 1 if player in tank [80036448] - B19B4 7F07CE84 V0= p->8006 for object if player in tank; fry AT,T6 - 7F07CEB0 - 7F07CF80 F0= [8003646C] - 7F07CF8C calculate player collision? - 7F07D234 - 7F07D2B4 - 7F07D4C0 - 7F07D61C - 7F07D960 - 7F07DE64 - accepts: A0=p->BONDdata - calls 7F03DE94: A0=p->BONDdata.pos.data, A1=BONDdata+2A04 - 7F07DE9C - accepts: A0=p->BONDdata - 7F07DEFC - 7F07DF28 - B2B30: 7F07E000 - B2B40 7F07E010 - B2B6C 7F07E03C - B2B98 7F07E068 - B2BC0 7F07E090 - 7F07E388 - B2F30 7F07E400 trigger watch zoom: F12=final, F14=time; fries: V0,V1,T6,T7,T8,F4,F6 - B2F50 7F07E420 copy watch zoom final size to zoom factor register [8005507C] - 7F07E438 - - B305C 7F07E52C zoom to watch menu on open - B30C4 7F07E594 zoom from watch menu on exit - B312C 7F07E5FC V0= TRUE if watch page transition running; fries V1,F4,F6 - 7F07E62C - - B3600 7F07EAD0 A0-> show minute ticks around watch menu [cur.BONDdata+1CC]; fries T6 - B3610 7F07EAE0 V0= TRUE if minute ticks displayed around watch menu [cur.BONDdata+1CC]; fries T6 - B3620 7F07EAF0 - - 7F07F860 - B43A4 7F07F874 1->trigger solo watch menu [BONDdata+1D0]; fries T6,T7 - B4B30: 7F080000 - - B52E0 7F0807B0 - ??? fries: V0,T6,T7,T8,T9,F12 - A0->BONDdata+3D0, A1->BONDdata+3D4, A2->BONDdata+3D8, (float) A3->BONDdata+3DC - B5310 7F0807E0 - fries: V0,V1,T0,T1,T2,T3,T4,T6,T7,T8,T9,F4,F6,F8,F12 - B5388 7F080858 fade to F14 over F12 seconds - redirect to 7F0807E0; fries: V0,V1,A1,A2,A3,T0,T1,T2,T3,T4,T6,T7,T8,T9,F4,F6,F8,F12 - sets V0=BONDdata, A1=BONDdata+3D0, A2=BONDdata+3D4, A3=BONDdata+3D8,SP+10=F14 - B53BC 7F08088C V0= TRUE if fade to black complete [BONDdata+3E4 < 0]; fries T6,F4,F6 - 7F0808BC - - B5540 7F080A10 set cur. player fade; F12=timer (ms), F14=final level (1.00=100%) - 7F080A80 update cur. player fade until invisible; F16=player invisible (120.00=100%) - - B64A4 7F081974 player motion and view interface - B6B30: 7F082000 - B8AF8 7F083FC8 - B8B30: 7F084000 - B8E90 7F084360 - B9178 7F084648 - ??? - player related - BAB30: 7F086000 - 7F086990 - - 7F086BF8 - 7F086C1C - BB770 7F086C40 V0= viewport width for current player - BB7F4 7F086CC4 V0= viewport ulx for current player - BB854 7F086D24 V0= viewport height for current player - BB968 7F086E38 V0= viewport uly for current player - BBACC 7F086F9C - ??? - resets player's options, I think... - BC114 7F0875E4 - - BCB30: 7F088000 - - BD418 7F0888E8 multiplayer respawn handler - uses TLB pointer table at 80055290 - 7F088BE8 intro type 0: spawn - 7F088BF0 intro type 1: weapon - 7F088C30 intro type 2: ammo - 7F088C58 intro type 3: intro swirly - 7F088C60 intro type 4: intro animation - 7F088C68 intro type 5: hand/cuff - 7F088C70 intro type 6: intro camera - BD808 7F088CD8 - BDD38 7F089208 - ??? - multiplayer interface? - 7F0892B0-7F089328 handles darkening the viewport - die and respawn in multiplayer, at least in part (the later part) - BE1F0 7F0896C0 writes stan tiles from 80079DA0/A4 in yellow to A0 - uses 7F0B3024 for output - BE248 7F089718 - BE29C 7F08976C - F12->??? [800364CC]; fries: AT - BE2A8 7F089778 - F0=A0+74: ??? - BE2B0 7F089780 - F0=???; fries F4,F6,F8,F10 - accepts: A0=p->BONDdata - BE2C8 7F089798 V0= p->cur. player's 8006 position data; fries T6 (T6=p->BONDdata) - BE2D8 7F0897A8 kills current player [debug: bond die] - 7F0898E8 - BE44C 7F08991C - ??? - used in allocating damage and kill ownership (co-op patch) - 7F089E4C - BE9D4 7F089EA4 - V0= TRUE if [BONDdata+F4]>=0; fries T6,T7 - BE9EC 7F089EBC - V0= TRUE if [BONDdata+F8]>0; fries T6,T7 - BEA04 7F089ED4 - F0= [BONDdata+19C]; fries T6 - BEA14 7F089EE4 F0= cur.player's horizontal rotation in degrees; fries AT,T6,F4,F6,F8,F10 - uses 800552B4: 2Pi [40C90FDB] - BEA40 7F089F10 F0= cur. player's vertical rotation in degrees; fries AT,T6,F4,F6,F8,F10 - uses 800552B8: 2Pi [40C90FDB] - BEA68 7F089F38 - V0= [BONDdata + 0xD0]; fry T6 (cur. player data) - BEA78 7F089F48 A0->invincibility flag [BONDdata + 0x12B6]; fry T6 - BEA88 7F089F58 V0= invincibility flag [BONDdata + 0x12B6]; fry T6 - BEA98 7F089F68 A0->invisible to guards flag [800364C4] - BEAA4 7F089F74 V0= invisible to guards flag [800364C4] - BEAB0 7F089F80 A0->player object collisions (Bond Phase) [800364C8] - BEABC 7F089F8C V0= player object collisions [800364C8] - BEAC8 7F089F98 V0= cur. player's room; fry AT,A0,V1,T6,T7 (cur. tile) - BEB04 7F089FD4 V0= p->cur.player's position; fries V1,T6 - uses value at BONDdata+4 if BONDdata+0 is 1 - otherwise, uses BONDdata+0x4B4 - BEB30: 7F08A000 - BEB30 7F08A000 - BEB5C 7F08A02C - - BEE1C 7F08A2EC F0= cur.player's displayable health total [BONDdata+EC] - BEE2C 7F08A2FC F0= cur.player's displayable body armour total [BONDdata+E0] - BEE3C 7F08A30C add F12 amount of body armour to cur.player - accepts: F12= total BA - BEE60 7F08A330 resets intro camera and message dialogs for cur.player - BEEB0 7F08A380 unset flags A0 in BONDdata+11D8 - accepts: A0=flags - BEECC 7F08A39C set flags A0 in BONDdata+11D8 - accepts: A0=flags - BEEE4 7F08A3B4 - A0->800368A4, A1->800368A0; fries AT - BEEF8 7F08A3C8 display string A0 in lower-left corner; A0=p->text - 7F08A4E4 - 7F08A5FC - 7F08A900 - 7F08A928 - 7F08A944 - BF48C 7F08A95C display string A0 at top of screen; A0=p->text - 7F08A9F8 - 7F08AAE8 - 7F08B0F0 - - C0AE8 7F08BFB8 - V0= 80079A20 - C0AF4 7F08BFC4 trigger explosions around players; A0=delay (sec) - fry AT,A0,T6,T7,T8 - C0B20 7F08BFF0 reinitialize player inventory - C0B30: 7F08C000 - 7F08C054 - C0CC4 7F08C194 add an additional weapon slot to player inventory? guessing, honestly - C0D2C 7F08C1FC re-order inventory pointers based on ID code? - C0D74 7F08C244 V0=p->next available weapon? - C0DCC 7F08C29C A0->all guns flag [cur. player data + 0x11EC]; fry T6 - C0DDC 7F08C2AC V0= all guns flag [cur. player data + 0x11EC]; fry T6 - C0DEC 7F08C2BC V0=p->inventory item A0 or NULL if not found; fries V1,A0,A1,T6,T7,T8 - C0E44 7F08C314 V0=TRUE if item A0 is in inventory; fries V1,A0,A1,T6,T7,T8 - C0E68 7F08C338 V0=p->inventory item A0 for hand A1 or NULL if not found - C0ECC 7F08C39C V0=TRUE if item A0 for hand A1 is in inventory - C0EF0 7F08C3C0 V0=TRUE if item A0 (1-20) is available; fries AT,V1,A0,A1,T6,T7,T8 - returns TRUE when all guns in effect - C0F3C 7F08C40C V0=TRUE if item A0 for hand A1 is available - solo: V0=TRUE if if weapon A0's 00100000 flag set at stats+0x6C - multi: V0=TRUE if item A0 for hand A1 is in inventory - C0FB8 7F08C488 add item A0 to inventory - I think this returns V0=1 if added item is selectable (<21) - C113C 7F08C50C Add doubles A0 (right) and A1 (left) to inventory - C10A0 7F08C570 - ??? tests doubles, I think... remove a right-handed weapon? - C114C 7F08C61C - ??? remove item A0 from inventory? - 7F08C724 - 7F08C764 - C139C 7F08C86C load next weapon(s) from inventory - C1640 7F08CB10 load previous weapon(s) from inventory - 7F08CE70 - - C1AB0 7F08CF80 V0=TRUE if possess Flag (item 58) - C1AF0 7F08CFC0 V0=TRUE if Golden Gun (item 13) is in inventory - C1B10 7F08CFE0 V0= TRUE if specific item in cur.player inventory; fries V1,A1,T6,T7,T8 - searches cur.player inventory for a pointer entry matching the obj.pos.data given - accepts: A0=p->obj.pos.data - C1B68 7F08D038 - C1C38 7F08D108 V0=p->inventory slot #A0 (not item #, but physical slot #) - C1D4C 7F08D21C V0=p->right or left weapon data if A0 matches either's item type; fries V1,T6,T7 - C1D8C 7F08D25C p->special text for item A0 or NULL - C1DD8 7F08D2A8 V0=item# for inventory slot #A0 (?) - C1E70 7F08D340 V0=p->short watch text for inventory slot A0, handling special text overrides - 7F08D434 - - 7F08D5C8 - - 7F08D6BC - - 7F08D7B0 - 7F08D7D8 - 7F08D800 - 7F08D828 - 7F08D850 - 7F08D878 - - 7F08D8C0 - 7F08D8D0 - 7F08D8E0 - - C248C 7F08D95C - 7F08D9A4 - - C2638 7F08DB08 retrieves item codes of most used item for current player; fries: AT,V0,V1,A2,A3,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - accepts: A0=@right item, A1=@left item - 7F08DBB0 - - C2B30: 7F08E000 - - C46C0 7F08FB90 V0= pointer to path preset following path preset A0 - accepts: A0=p->path preset - 7F08FD1C - - C4930 7F08FE00 unconditional return - C4938 7F08FE08 - A0-> [80036B88]; fries AT - C4944 7F08FE14 initialize debug menu values - accepts: A0=p->text, A1=p->positions, A2=p->groupings - C49A4 7F08FE74 print debug menu to stdout; returns V0=A0 - accepts: A0=(unused) - C4B30: 7F090000 - C4B3C 7F09000C - C4CE0 7F0901B0 V0= debug menu: control mode [80036B70] - C4CEC 7F0901BC A0->debug menu: control mode [80036B70]; fry AT - C4CF8 7F0901C8 up on debug menu - C4D78 7F090248 down on debug menu - C4DF0 7F0902C0 right on debug menu - C4ECC 7F09039C left on debug menu - 7F090414 - - C4FC0 7F090490 display debug menu text on screen - redirects to 7F08FE14: A0=80036E30 [p->text], A1=80036BC8 [p->pos], A2=80036BA4 [p->grouping] - C4FF4 7F0904C4 debug "move view" option: triggers external camera - C5038 7F090508 debug "stan view" option: - C507C 7F09054C debug "bond view" option: triggers 1st person camera - C50C0 7F090590 unconditional return called when profile switched on - C50C8 7F090598 unconditional return called when profile switched off - C50D0 7F0905A0 processor for debug menu; executables for debug menu follow - accepts: A0=???, A1=???, A2=controller1 input, A3=??? - also handles image capture catches. - uses TLB pointer table at 800556FC - C52A8 7F090778 Debug Menu: move view - redirects to 7F0904C4 - C52B8 7F090788 Debug Menu: stan view - redirects to 7F090508 - C52C8 7F090798 Debug Menu: bond view - redirects to 7F09054C - C52D8 7F0907A8 Debug Menu: level generic copy 80036B70->80036F70 - C52EC 7F0907BC Debug Menu: region generic copy 80036B70->80036F70 - C5300 7F0907D0 Debug Menu: scale generic copy 80036B70->80036F70 - C5314 7F0907E4 Debug Menu: select anim generic copy 80036B70->80036F70 - C5328 7F0907F8 Debug Menu: gun pos generic copy 80036B70->80036F70 - C533C 7F09080C Debug Menu: flash colour generic copy 80036B70->80036F70 - C5350 7F090820 Debug Menu: hit colour generic copy 80036B70->80036F70 - C5364 7F090834 Debug Menu: screen size generic copy 80036B70->80036F70 - C5378 7F090848 Debug Menu: screen position generic copy 80036B70->80036F70 - C538C 7F09085C Debug Menu: music generic copy 80036B70->80036F70 - C53A0 7F090870 Debug Menu: port close, port inf, port approx - toggle 80036FD4 - C53B8 7F090888 Debug Menu: sfx generic copy 80036B70->80036F70 - C53CC 7F09089C Debug Menu: invincible - calls 7F089F48: A0=(!7F089F58) - C53E4 7F0908B4 Debug Menu: visible (to guards) - calls 7F089F68: A0=(!7F089F74) - C53FC 7F0908CC Debug Menu: collisions - calls 7F089F80: A0=(!7F089F8C) - C5414 7F0908E4 Debug Menu: all guns - C5464 7F090934 Debug Menu: max ammo - C54C0 7F090990 Debug Menu: display speed - toggle 80036F74, call 7000AF00 if not set - C54E8 7F0909B8 Debug Menu: background - toggle 80036F78 - C5500 7F0909D0 Debug Menu: props - toggle 80036F7C - C5518 7F0909E8 Debug Menu: stan hit - toggle 80036F84 - C5530 7F090A00 Debug Menu: stan region - toggle 80036F88 - C5548 7F090A18 Debug Menu: stan problems - toggle 80036F8C - C5560 7F090A30 Debug Menu: print man pos - toggle 80036F90 - C5578 7F090A48 Debug Menu: test man pos - toggle 80036FC8 - C5590 7F090A60 Debug Menu: play title - calls 70006950: A0=stage 0x5A - C55A0 7F090A70 Debug Menu: bond die - redirects to 7F0897A8 - C55B0 7F090A80 Debug Menu: pr room loads - toggle 80036F94 - C55C8 7F090A98 Debug Menu: show mem use - redirect to 70005FF4 - C55D8 7F090AA8 Debug Menu: show mem bars - redirect to 70006004 - C55E8 7F090AB8 Debug Menu: grab rgb - sets a rgb image grab in 32bit mode - 1->80036FFC; calls 7000E2D0: A0=1; 70003C10 - C560C 7F090ADC Debug Menu: grab jpeg - sets a jpeg image grab in 32bit mode - 1->80037000; calls 7000E2D0: A0=1; 70003C10 - C5630 7F090B00 Debug Menu: grab task - toggle 80036FC4 - C5648 7F090B18 Debug Menu: record ramrom - redirects to 7F0C07BC: A0=0 - C5658 7F090B28 Debug Menu: record 1 - redirects to 7F0C07BC: A0=1 - C5668 7F090B38 Debug Menu: record 2 - redirects to 7F0C07BC: A0=2 - C5678 7F090B48 Debug Menu: record 3 - redirects to 7F0C07BC: A0=3 - C5688 7F090B58 Debug Menu: replay ramrom - redirects to 7F0C08A8 - C5698 7F090B68 Debug Menu: save ramrom - redirects to 7F0BFD60 - C56A8 7F090B78 Debug Menu: load ramrom - redirects to 7F0BFE00 - C56B8 7F090B88 Debug Menu: auto y aim - calls 7F07C570: A0=(!7F07C580) - C56D0 7F090BA0 Debug Menu: auto x aim - calls 7F07C658: A0=(!7F07C668) - C56E8 7F090BB8 Debug Menu: 007 - toggle 80036FAC - C5700 7F090BD0 Debug Menu: agent - toggle 80036FB0 - C5718 7F090BE8 Debug Menu: all - toggle 80036FB4 - C5730 7F090C00 Debug Menu: fast - toggle 80036FCC - C5748 7F090C18 Debug Menu: objectives - toggle 80036FD0 - C5760 7F090C30 Debug Menu: show patrols - calls 7F01F55C: A0=(!7F01F568) - C5778 7F090C48 Debug Menu: intro - redirects to 7F07A9B8: A0=3 (use intro camera mode 3 - solo rotating intro) - C5788 7F090C58 Debug Menu: intro pos - if 80036F64 not set, call 7F091618 - C57A8 7F090C78 Debug Menu: world pos - if 80036F64 not set, call 7F09166C; else, if 7F089798 TRUE, uses pos at 80037004 - C5848 7F090D18 Debug Menu: gun key pos generic copy 80036B70->80036F70 - C585C 7F090D2C Debug Menu: chr num - toggle 80036FB8 - C5874 7F090D44 Debug Menu: vis cvg (line mode) - toggle 80036FA8 - C588C 7F090D5C Debug Menu: joy2 sky edit - toggle 80036F98 - C58A4 7F090D74 Debug Menu: joy2 hits edit - toggle 80036F9C - C58BC 7F090D8C Debug Menu: joy2 detail edit - toggle 80036FA0 - C58D4 7F090DA4 Debug Menu: explosion info - toggle 80036FA4 - C58EC 7F090DBC Debug Menu: magic fog generic copy 80036B70->80036F70 - C5900 7F090DD0 Debug Menu: fog generic copy 80036B70->80036F70 - C5914 7F090DE4 Debug Menu: gun watch pos - toggle 80036FBC - C592C 7F090DFC Debug Menu: room blocks - redirects to 7F03E698 - C593C 7F090E0C Debug Menu: profile - toggle 80036FC0 - C5974 7F090E44 Debug Menu: obj load - redirects to 7F001258 - C5984 7F090E54 Debug Menu: weapon load - redirects to 7F00140C - C5994 7F090E64 Debug Menu: intro edit generic copy 80036B70->80036F70 - C59A4 7F090E74 Debug Menu: return; used for NULL options - uses TLB pointer table at 80055830; all point to 7F090EB0 - C5A2C 7F090EFC V0= render flag (0=raster only) [80036F64] - C5A38 7F090F08 V0= control mode type [80036F68] - C5A44 7F090F14 V0= control mode [80036F6C]; subcatagory for control mode type - C5A50 7F090F20 copy [80036F70] -> 80036F6C; fry AT,T6 ([80036F70]) - C5A64 7F090F34 V0= display speed flag [80036F74] - C5A70 7F090F40 V0= draw background flag [80036F78] - C5A7C 7F090F4C V0= draw objects flag [80036F7C] - C5A88 7F090F58 V0= stan hit debugger flag [80036F84] - C5A94 7F090F64 V0= stan region debugger flag [80036F88] - C5AA0 7F090F70 V0= stan problems debugger flag [80036F8C] - C5AAC 7F090F7C V0= print man pos debugger flag [80036F90] - C5AB8 7F090F88 V0= test man pos debugger flag [80036FC8] - C5AC4 7F090F94 A0->test man pos debugger flag [80036FC8]; fry AT - C5AD0 7F090FA0 V0= joy2 sky edit flag [80036F98] - C5ADC 7F090FAC V0= joy2 hits edit flag [80036F9C] - C5AE8 7F090FB8 V0= joy2 detail edit flag [80036FA0] - C5AF4 7F090FC4 V0= explosion info flag [80036FA4] - C5B00 7F090FD0 V0= print room loads flag [80036F94] - C5B0C 7F090FDC V0= line mode flag [80036FA8] - C5B18 7F090FE8 A0->line mode flag [80036FA8]; fry AT - C5B24 7F090FF4 V0= 007 debugger flag [80036FAC] - C5B30 7F091000 V0= agent debugger flag [80036FB0] - C5B3C 7F09100C V0= all debugger flag [80036FB4] - C5B48 7F091018 V0= turbo mode flag [80036FCC] - C5B54 7F091024 A0->turbo mode flag [80036FCC]; fry AT - C5B60 7F091030 V0= objectives debugger flag [80036FD0] - forces all objectives complete - C5B6C 7F09103C V0= port close, inf, approx debugger flag [80036FD4] - C5B78 7F091048 V0= character number debugger flag [80036FB8] - C5B84 7F091054 V0= gun watch pos flag (movable models in watch) [80036FBC] - C5B90 7F091060 V0= profile debugger flag [80036FC0] - C5B9C 7F09106C V0= grab task debugger flag [80036FC4] - 7F091080 - - 7F0915BC - - C6148 7F091618 debug "intro pos" handler; appears to do nothing... - calls 7F089FD4, 7F089EE4 for x pos and rot., converts measure - C619C 7F09166C - C6224 7F0916F4 initialize floating camera position (80037014) to cur.player's location - C6270 7F091740 - C62AC 7F09177C tests if button code entered and activates cheat - 7F09193C - - C658C 7F091A5C V0=1 if A0=0x1C - last applicable gameplay cheat#; fry AT - C65A8 7F091A78 V0=1 if cheat# A0 usable MP; fry AT,T6,T7,T8 - C65DC 7F091AAC tests and reroutes cheat# A0 to activation routine - C6694 7F091B64 activated cheat processor; all below are linked - C6740 7F091C10 activate cheat1: all characters MP - C6750 7F091C20 activate cheat2: Invincibility - C6780 7F091C50 activate cheat3: All Guns - C67B0 7F091C80 activate cheat4: Max Ammo - C67D0 7F091CA0 activate cheat6: Deactivate Invincibility (Multi) - C6858 7F091D28 activate cheat7: Line Mode - C6868 7F091D38 activate cheat8: Super 2x Health - C68E8 7F091DB8 activate cheat9: Super 2x Body Armor - C695C 7F091E2C activate cheat10: Invisibility - C698C 7F091E5C activate cheat11: Infinite Ammo - C69A4 7F091E74 activate cheat12: DK Mode - C69C4 7F091E94 activate cheat13: Extra Weapons - C6A8C 7F091F5C activate cheat14: Tiny Bond - C6B0C 7F091FDC activate cheat15: Paintball Mode - C6B24 7F091FF4 activate cheat16: Super x10 Health - C6B30: 7F092000 - C6B98 7F092068 activate cheat17: Magnum - C6BC8 7F092098 activate cheat18: Laser - C6BE4 7F0920B4 activate cheat19: Golden Gun - C6C14 7F0920E4 activate cheat20: Silver PP7 - C6C44 7F092114 activate cheat21: Gold PP7 - C6C74 7F092144 activate cheat22: Invisibility (Multi) - C6C90 7F092160 activate cheat24: Turbo Mode - C6CC0 7F092190 activate cheat25: ManPos position debugger - C6CE0 7F0921B0 activate cheat26: Fast Animation - C6D2C 7F0921FC activate cheat27: Slow Animation - C6D78 7F092248 activate cheat29: x2 R. Launcher - C6DA8 7F092278 activate cheat30: x2 G. Launcher - C6DD8 7F0922A8 activate cheat31: x2 RC-P90 - C6E08 7F0922D8 activate cheat32: x2 Throwing Knives - C6E38 7F092308 activate cheat33: x2 Hunting Knives - C6E54 7F092324 activate cheat34: x2 Laser - C6E70 7F092340 activate cheat35-54: Unlock Cheat # - C6EB0 7F092380 activate cheat55-74: Unlock Stage # - 7F092428 default - C6F68 7F092438 Handles cheat deactivation - C7008 7F0924D8 deactivate cheat2: Invincibility - C7038 7F092508 deactivate cheat3: All Guns - C7068 7F092538 deactivate cheat6: Line Mode - C7078 7F092548 deactivate cheat9: Invisibility - C70A8 7F092578 deactivate cheat10: Infinite Ammo - C70C0 7F092590 deactivate cheat11: DK Mode - C70E0 7F0925B0 deactivate cheat13: Tiny Bond - C7160 7F092630 deactivate cheat14: Paintball Mode - C7178 7F092648 deactivate cheat21: Invisibility (Multi) - C7198 7F092668 deactivate cheat22: Turbo Mode - C71C8 7F092698 deactivate cheat23: ManPos position debugger - 7F0926B0 quit for deactivation routines and target for untogglable ones - C71F0 7F0926C0 deactivate all active cheats - C72A4 7F092774 V0= p->text for cheat A0 or "NO NAME" otherwise; fries A0,V1,T0,T6,T7,T8,T9 - redirects to 7F0C1DD8 - C72EC 7F0927BC V0= TRUE if cheat A0 activated for current player - C7324 7F0927F4 set DK mode; A0=[0]off, [1]on - 7F092890 - - C7F6C 7F09343C called if texture 5E4 is applied to a surface: if mode 1, add DL branch (06) to 8003FCC0 to A0; else write equivalent to A0 - accepts: A0=p->DL, A1=mode (0-copy; 1-DL branch) - C818C 7F09365C called if texture 5E7 is applied to a surface: if mode 1, add DL branch (06) to 8003FD28 to A0; else write equivalent to A0 - accepts: A0=p->DL, A1=mode (0-copy; 1-DL branch) - 7F093880 - - C8B30: 7F094000 - - 7F094298 - ??? - accepts: F12=??? - 7F094390 - - CAB30: 7F096000 - - 7F0977B4 V0= TRUE if distance between [A0+28,2C] and [A1+28,2C] < 1.0 - accepts: A0=p->???, A1=p->??? - 7F097818 - - CCB30: 7F098000 - - CD55C 7F098A2C generates RDP display list for sky and water - CEB30: 7F09A000 - CEE10 7F09A2E0 resets all player handicaps and perspectives to default (1.0); fries: AT,F0 - 1.0->80079F4C, 1.0->80079F54, 1.0->80079FBC, 1.0->80079FC4, 1.0->8007A02C, 1.0->8007A034, 1.0->8007A09C, 1.0->8007A0A4 - CEE5C 7F09A32C reset player data pointers; fries: AT,V0,V1,T6,T7,T8 - 0->80079EE0-C, 0->8007A0B0-C, 0-3->8007A0C0-C - CEEBC 7F09A38C initializes player data pointers and constructs viewports - accepts: A0=#players - CEF94 7F09A464 V0= # players; fries V0,V1,T6,T7,T8,T9 - CEFEC 7F09A4BC initialize player A0's BONDdata - accepts: A0=player # - CFC3C 7F09B10C sets current player to player A0=0-3; sets data at 8007A0B0-B8 - accepts: A0=player # - CFC80 7F09B150 V0= cur player # - CFC8C 7F09B15C V0= cur.player# - CFD0C 7F09B1DC set current player screen width (A0) and height (A1) [BONDdata+7F0/2]; fries V0,T6,T7 - accepts: A0=screen width, A1=screen height - CFD28 7F09B1F8 set current player viewport width A0 & height A1 [BONDdata+7F4/6]; fries V0,T6,T7 - CFD44 7F09B214 F12-> watch menu current size [BONDdata+11D0]; fries T6 - CFD54 7F09B224 F12-> [BONDdata+11D4]; fries T6 - CFD64 7F09B234 F0= watch menu current size [BONDdata+11D0]; fries T6 - CFD74 7F09B244 V0= object model corresponding to item A0 (0-20); fries AT,V1,T6 - Tests if flag (0x58) used, and manually sets model - Otherwise, redirects into 7F09B264 - CFD94 7F09B264 V0= object model corresponding to item A0 (0-20); fries AT,V1,T6 - uses TLB pointer table at 8005762C - 7F09B284 02: 0BA - 7F09B28C 04: 0BF - 7F09B294 07: 0C1 - 7F09B29C 08: 0B8 - 7F09B2A4 09: 0C3 - 7F09B2AC 0A: 0BD - 7F09B2B4 0C: 0C2 - 7F09B2BC 0D: 0BC - 7F09B2C4 0E: 0C5 - 7F09B2CC 0F: 0C0 - 7F09B2D4 18: 0B9 - 7F09B2DC 1A: 0C4 - 7F09B2E4 1D: 0C7 - 7F09B2EC 1C: 0C8 - 7F09B2F4 1B: 0C9 - 7F09B2FC 12: 0BE - 7F09B304 16: 0BB - 7F09B30C 11: 0D2 - 7F09B314 0B: 0CE - 7F09B31C 06: 0CD - 7F09B324 05: 0CC - 7F09B32C 03: 0D1 - 7F09B334 10: 0CF - 7F09B33C 19: 0D3 - 7F09B344 13: 0D0 - 7F09B34C 14: 0BF - 7F09B354 15: 0BF - 7F09B35C unused: 14D - 7F09B360 default: V0=V1 - CFE98 7F09B368 - ??? - accepts hand A0 (0-R:1-L); redirects to 7F0521E8 w/ A0=p->player's GUARDdata, A1=hand - 7F09B398 - - D0130 7F09B600 - [7F09B6C4] loop to calculate the file checksums - D0270 7F09B740 - D02B8 7F09B788 - D02D0 7F09B7A0 unconditional return - D02D8 7F09B7A8 - D0314 7F09B7E4 - D0350 7F09B820 - D05F4 7F09BAC4 - - D0B30: 7F09C000 - - D0D80 7F09C250 generates explosions and smoke at location - accepts: A0=p->source object or NULL, A1=p->positions, A2=p->tile, A3=explosion type, SP+10=force to ground, SP+14=owner's player#, SP+18=p->room# list, SP+1C=(sets object loaded flag) - D12DC 7F09C7AC - 6->80040170, 6->80040174; fries AT,V0 - 7F09C7C4 - - 7F09C9D8 - ??? - sets up subsequent explosion - 7F09CEE8 - - 7F09D5A0 - ??? - display explosion animation A0 - 7F09D82C - 7F09DDA4 - ??? - displays or propagates smoke - D2B30: 7F09E000 - D3230 7F09E700 generates smoke of type A2 in room A3, tile A1 at given cartegian point A0 - accepts: A0=p->xyz floats, A1=p->tile, A2=smoke type, A3=room# - 7F09E8AC - 7F09EF9C - 7F09F03C - D3D84 7F09F254 generate bit of shrapnel - accepts: A0=p->(float)xyz pos., A1=(float) distance, A2=(float) horz.velocity, A3=(float) vert.velocity, SP+10=(float) size - D486C 7F09FD3C - D4B30: 7F0A0000 - D4B64 7F0A0034 display shrapnel - D4DAC 7F0A027C generate scorch marks - D55E4 7F0A0AB4 display scorch marks - 7F0A0C74 - 7F0A0CCC - 7F0A0D90 - 7F0A0E98 - D5BBC 7F0A108C generate bullet impact - D65C4 7F0A1A94 display bullet impacts - 7F0A1D78 - - D6B30: 7F0A2000 - - 7F0A2C44 - - D7A60 7F0A2F30 - accepts: A0=, A1=, A2=placement (-1:health,0,1:armour), A3=(float) armour - 7F0A3330 - - D7F28 7F0A33F8 generates A1 vertices in buffer A0 with gradient A2 - accepts: A0=p->vertex buffer, A1=#vertices, A2=(float) gradation, A3=mode - mode nonzero initializes vertices to 0001.0000.0000.0000.0000.0000.00.2C.00.B0 - D84A8 7F0A3978 extends quad or pent (A3) w/ vertices at A1 into display list A0; V0=new DL - accepts: A0=p->display list, A1=p->vertices, A2=(unused), A3=mode (0:quad, 1:pentagon) - D85E8 7F0A3AB8 set vertices in A0 for quad (SP+14 + A1,SP+18 + A2),(SP+14 + A1 + A3,SP+18 + A2 + SP+10), RGBA 207020F0 - accepts: A0=p->vertex buffer, A1=xoff, A2=yoff, A3=dx, SP+10=dy, SP+14=ulx, SP+18=uly - D8670 7F0A3B40 extends quad w/ vertices at A1 into display list A0; V0=new DL - accepts: A0=p->display list, A1=p->vertices - vertices should follow the pattern (0,1,2), (1,2,3) - 7F0A3B70 - - D8B30: 7F0A4000 - - 7F0A4824 - D9398 [7F0A4868] initialize watch menu at start of stage; part of larger routine - [7F0A4918] initialize difficulty multipliers - 7F0A4A98 - 7F0A4B40 - 7F0A4D74 - D98F0 7F0A4DC0 V0= cur.player's control type [BONDdata+2A58]; fries T6 - D9900 7F0A4DD0 set cur.player's control style to A0 [BONDdata+2A58]; fries V0,V1,T0,T1,T2,T3,T4,T6,T7,T8,T9,F4,F6 - D9968 7F0A4E38 V0= cur.player's look up/down setting [80040A84] - D9974 7F0A4E44 A0->cur.player's look up/down setting; fry AT - D9980 7F0A4E50 V0= cur.player's auto-aim control setting [80040A90] - D998C 7F0A4E5C A0->cur.player's auto-aim control setting; fry AT - D9998 7F0A4E68 V0= cur.player's look-ahead setting [80040AB4] - D99A4 7F0A4E74 A0->cur.player's look-ahead setting; fry AT - D99B0 7F0A4E80 V0= cur.player's aim control setting [80040A9C] - D99BC 7F0A4E8C A0->cur.player's aim control setting; fry AT - D99C8 7F0A4E98 V0= cur.player's sight on-screen setting [80040AA8] - D99D4 7F0A4EA4 A0->cur.player's sight on-screen setting; fry AT - D99E0 7F0A4EB0 V0= cur.player's ammo on-screen setting [80040AC0] - D99EC 7F0A4EBC A0->cur.player's ammo on-screen setting; fry AT - D99F8 7F0A4EC8 V0= cur.player's screen setting [80040ACC] - D9A04 7F0A4ED4 A0->cur.player's screen setting; fry AT - D9A10 7F0A4EE0 V0=screen ratio [80040AD8] - D9A1C 7F0A4EEC A0->screen ratio; fry AT - 7F0A4EF8 - D9A74 7F0A4F44 0->highlighted setting selected register [800409A8]; fry AT - D9A80 7F0A4F50 V0= TRUE if holding at least 0x2E left on control stick - calls 7000C0EC - D9AA4 7F0A4F74 V0= TRUE if holding at least 0x2E right on control stick - calls 7000C0EC - D9AC8 7F0A4F98 V0= TRUE if left/right on control stick enabled [80040ADC] - D9AD4 7F0A4FA4 disable control stick input [0->80040ADC]; fry AT - D9AE0 7F0A4FB0 V0= TRUE if pressed left on control stick (0x2E) - uses 80040ADC to detect if stick pressed - D9B1C 7F0A4FEC V0= TRUE if pressed right on control stick (0x2E) - uses 80040ADC to detect if stick pressed - D9B58 7F0A5028 V0= TRUE if holding at least 0x2E up on control stick - fries: V1,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - D9B7C 7F0A504C V0= TRUE if holding at least 0x2E down on control stick - fries: V1,A0,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - D9BA0 7F0A5070 V0= TRUE if up/down on control stick enabled [80040AE0] - D9BAC 7F0A507C disable control stick input [0->80040AE0] - D9BB8 7F0A5088 V0= TRUE if pressed up on control stick (0x2E) - uses 80040AE0 to detect if stick pressed - D9BF4 7F0A50C4 V0= TRUE if pressed down on control stick (0x2E) - uses 80040AE0 to detect if stick pressed - D9C30 7F0A5100 V0= TRUE if holding at least 0x10 up on control stick - D9C54 7F0A5124 V0= TRUE if holding at least 0x10 down on control stick - D9C78 7F0A5148 V0= TRUE if control stick input enabled [80040AE4] - D9C84 7F0A5154 disable control stick input [0->80040AE4]; fry AT - D9C90 7F0A5160 V0= TRUE if pressed up on control stick (0x10) - D9CCC 7F0A519C V0= TRUE if pressed down on control stick (0x10) - D9D08 7F0A51D8 sets watch static effect - activates line draw effect [0x80->80040B04] - play sound effect 0EC: watch static - D9D40 7F0A5210 switch solo watch page - D9D9C 7F0A526C page advance f/ main page of watch menu - D9F08 7F0A53D8 page advance f/ inventory page of watch menu - DA034 7F0A5504 page advance f/ beta objectives page of watch menu (removed) - DA0F4 7F0A55C4 page advance f/ control page of watch menu - DA1D4 7F0A56A4 page advance f/ options page of watch menu - DA2B4 7F0A5784 page advance f/ objectives/briefing page of watch menu - DA390 7F0A5860 advance up/down on "controls::control style" submenu of watch menu - tests +/c-up, then +/c-down - DA430 7F0A5900 advance up/down on "controls::controller" submenu of watch menu - tests +/c-up, then +/c-down - DA4C8 7F0A5998 advance up/down on selected "options" submenu of watch menu - tests +/c-up, then +/c-down - DA594 7F0A5A64 advance up/down on "options::music" submenu of watch menu - tests +/c-up, then +/c-down - DA624 7F0A5AF4 advance up/down on "options::effects" submenu of watch menu - tests +/c-up, then +/c-down - DA6B0 7F0A5B80 advance up/down on "inventory" submenu of watch menu - tests +/c-up, then +/c-down - DAB30: 7F0A6000 - DAC4C 7F0A611C advance up/down through "control style" submenu entries of watch menu - tests +/c-up, then +/c-down - DB148 7F0A6618 advance up/down from "background" submenu of watch menu - tests +/c-up, then +/c-down - DB1D0 7F0A66A0 advance up/down from "M briefing" submenu of watch menu - tests +/c-up, then +/c-down - DB25C 7F0A672C advance up/down from "Q branch" submenu of watch menu - tests +/c-up, then +/c-down - DB2EC 7F0A67BC advance up/down from "Moneypenny" submenu of watch menu - tests +/c-up, then +/c-down - DB37C 7F0A684C advance up/down from "objectives" submenu of watch menu - tests +/c-up, then +/c-down - DB408 7F0A68D8 moves bars drawn during solo watch static effect - DB4D8 7F0A69A8 initialize watch menu when entering menu from play - DB55C 7F0A6A2C used in motion and position of controller in watch menu - F0= value-2Pi if Pi < value - F0= value+2Pi if value < -Pi - F0= F12 otherwise - accepts: F12=value - DB5B0 7F0A6A80 solo watch menu interface and behaviour - [7F0A6DE4] - uses TLB pointer table at 800584CC - 7F0A6E04 page advance f/ main page of watch menu; redirects to 7F0A526C - 7F0A6E14 page advance f/ controls page of watch menu; redirects to 7F0A55C4 - calls 7F0A5860 if control style selected - calls 7F0A5900 if controller selected - 7F0A6E60 page advance f/ options page of watch menu; - selects options page selection routines using TLB table at 800584E0 - 7F0A6E88 option 0: 7F0A5A64 music bar - 7F0A6E98 option 1: 7F0A5AF4 effects bar - 7F0A6EA8 options 2,3,4,5,6,7,8,9: 7F0A5998 - 7F0A6EB0 default - 7F0A6EC0 page advance f/ objectives/briefing page of watch menu; redirects to 7F0A5784 - 7F0A6ED0 page advance f/ inventory page of watch menu; redirects to 7F0A53D8 - 7F0A6ED8 default: return - DBA18 7F0A6EE8 sets scissor for 1pl viewport (ie: solo watch menu) - accepts: A0=p->display list - B7000000 00002000 - BA001402 00000000 - BA001701 00800000 - ED000000 ~video2.txtClipH | ~video2.txtClipW - BA001001 00000000 - BA000E02 00000000 - BA001102 00000000 - BA001301 00080000 - BA000C02 00002000 - BA000903 00000C00 - FCFFFFFF FFFE793C - BA000801 00000000 - B9000002 00000000 - B900031D 0F0A4000 - BA000602 00000000 - DBBDC 7F0A70AC sets box colors for solo watch page A0 in vertex buffer A1 - accepts: A0=selected page, A1=p->vertices [BONDdata+1878] - DBC7C 7F0A714C displays watch and HUD on solo watch menu - accepts: A0=p->display list, A1=p->matrix, A2=cur.player source (TRUE/FALSE) - DC2D8 7F0A77A8 redirects to 7F0A714C: A2=1 - accepts: A0=p->display list, A1=p->matrix - DC2F8 7F0A77C8 sets abort: confirm/cancel to DL A0 for solo watch menu page 0 - accepts: A0=p->display list - DC748 7F0A7C18 sets mission status to DL A0 for solo watch menu page 0 - accepts: A0=p->display list - DC8EC 7F0A7DBC V0=A0; removed solo watch page 0 print routine - accepts: A0=p->display list - DC8F4 7F0A7DC4 set watch name text to DL A0 for solo watch menu page 0 - accepts: A0=p->display list - DC9D8 7F0A7EA8 solo watch page 0 constructor - accepts: A0=p->display list - DCB30: 7F0A8000 - DCE3C 7F0A830C display solo watch page 0: Main Page; V0=p->new DL - accepts: A0=p->display list, A1=p->matrix - calls: 7F0A714C: A0, A1, A2=0; if transition not running, 7F0A7DC4: A0=p->DL; 7F0A7C18: A0=p->DL; 7F0A7DBC: A0=p->DL; 7F0A7EA8: A0=p->DL - DCEA8 7F0A8378 interface for solo watch page 1: Inventory - DCF54 7F0A8424 display solo watch page 1: Inventory - accepts: A0=p->display list, A1=p->matrix - 7F0A8B10 - 7F0A8D40 - 7F0A8ED0 - 7F0A8FEC - DDCB0 7F0A9180 - redirect to 700091C8 - 7F0A91A0 - 7F0A91C8 - DDE88 7F0A9358 V0= [80040B58] - 7F0A9364 - DDEC8 7F0A9398 display text on solo watch menus - accepts: A0=p->display list, A1=x position, A2=y position, A3=p->text, - SP+10=text colour, SP+14=[0], SP+18=[-1], SP+1C=[1], SP+20=[0], - SP+24=background colour, SP+28=[0] - 7F0A95C4 - 7F0A95E8 - 7F0A9610 - 7F0A9684 - 7F0A97D0 - DE5E8 7F0A9AB8 displays controller layout for selected setting - DEB30: 7F0AA000 - 7F0AA7C8 - 7F0AADC0 - DFFBC 7F0AB48C 0-> solo watch controls page selection [80040998]; fry AT - DFFC8 7F0AB498 0-> solo watch options page selection [8004099C]; fry AT - DFFD4 7F0AB4A4 0-> solo watch main page selection [800409A4]; fry AT - DFFE0 7F0AB4B0 V0=A0 - DFFE8 7F0AB4B8 display text for solo watch page 2: Controls - E02D4 7F0AB7A4 change setting to A1 for option A0 on solo watch menu options page - E0308 7F0AB7D8 switch left/right option A0 (0-7) on solo watch options page - E0438 7F0AB908 solo watch menu options page - options list and interface - accepts: A0=p->display list target, A1=ypos, A2=setting#, A3=highlight mode (0-2) - E074C 7F0ABC1C solo watch menu options page - option list constructor and interface - calls 7F0AB908, 7F0ACD98 - E092C 7F0ABDFC display text for solo watch page 3: Options - slidebar constructor and interface - E0B30: 7F0AC000 - E0C18 7F0AC0E8 V0= #newlines in string A0; fries V1,A0,A1 - E0C50 7F0AC120 V0= p->string following last newline; fries V1,A0,A1,T6 - E0C98 7F0AC168 display text for solo watch page 4: Briefing - uses TLB pointer table at 80058570 - 7F0AC3B8 solo watch briefing page 0: Background - 7F0AC400 solo watch briefing page 1: M Briefing - 7F0AC448 solo watch briefing page 2: Q Briefing - 7F0AC490 solo watch briefing page 3: Monneypenny - 7F0AC4D8 solo watch briefing page 4: objectives - 7F0AC9F4 default: return - E1558 7F0ACA28 display current solo watch page text - accepts: A0=p->DL, A1=???, A2=interface mode (0-off; 1-on) - E16A0 7F0ACB70 unconditional return - E16A8 7F0ACB78 -A0-> text spacing [80040E84]; fries AT,T6 - E16B8 7F0ACB88 A0-> orientation (nonzero=vertical) [80040E88]; fry AT - E16C4 7F0ACB94 A0-> #spaces following wordwrap [80040E8C]; fry AT - E16D0 7F0ACBA0 A0-> overlap correction [80040E90]; fry AT - E16DC 7F0ACBAC allocate and initialize font tables - E18C8 7F0ACD98 - ??? - microcode constructor used in watch menu; fries V1,A0,A1,A2,A3,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - accepts: A0=p->display list target - returns: V0=p->final DL position - E1A20 7F0ACEF0 set combiner: bayer, lod, perspective; fries A1,A2,A3,T0,T1,T6,T7,T8,T9 - accepts: A0=p->display list target - returns: V0=p->final DL position - E1A7C 7F0ACF4C inserts black box DL to A0; draws to physical screen coordinates - accepts: A0=p->display list, A1=ul x, A2=ul y, A3=lr x, SP+10=lr y - E1B44 7F0AD014 inserts coloured box DL to A0; draws to physical screen coordinates - accepts: A0=p->display list, A1=ul x, A2=ul y, A3=lr x, SP+10=lr y, SP+14=RGBA value for square - E1C28 7F0AD0F8 - ??? - microcode constructor used with fonts - E25EC 7F0ADABC display text; used by MP watch menu - accepts: A0=p->display list target, A1=p->x position, A2=p->y position, A3=p->text, - SP+10=p->2nd font table, SP+14=p->1st font table, - SP+18=font colour, - SP+1C=clip width, SP+20=clip height, - SP+24=y offset, SP+28=x offset - 7F0ADDAC - - E2B30: 7F0AE000 - - E321C 7F0AE6EC display 2-tone text; used by MP watch menu - accepts: A0=p->display list target, A1=p->x position, A2=p->y position, A3=p->text, - SP+10=p->2nd font table, SP+14=p->1st font table, - SP+18=font foreground colour, SP+1C=font background colour, - SP+20=clip height, SP+24=clip width, - SP+28=y offset, SP+2C=x offset - E34BC 7F0AE98C computes width and height of string A2 for cur. font set - returns A0=height, A1=width of string - accepts: A0=p->ret.height, A1=p->ret.width, A2=p->text, A3=p->2nd font table, SP+10=p->1st font table, SP+14=x offset? - E3694 7F0AEB64 A2=text A1 fit to width A0 - accepts: A0=max width, A1=p->text, A2=@final text, A3=p->2nd font table, SP+10=p->1st font table - 7F0AEF0C - 7F0AEF20 -# - 7F0AEF30 - 7F0AEF3C - E3B10 7F0AEFE0 - E3B30 7F0AF000 V0= FALSE; removed actor animation routine - E3B3C 7F0AF00C generate debug.notice.list entry for stan_c_debug using data at 80040F40 - E3B68 7F0AF038 - - E40E8 7F0AF5B8 - ??? - A0->8007B120, 1->80040FB0 - if "-stanlinelog", 1->80040FB4 - E4160 7F0AF630 - A0->SP+0 deleted routine - E4168 7F0AF638 - - E4B30: 7F0B0000 - - E5444 7F0B0914 - ??? - accepts: A0=p->???, A1=(float) xpos1, A2=(float) zpos1, A3=(float) xpos2, SP+10=(float) zpos2, SP+14=p->[function], SP+18=p->buffer - - E5714 7F0B0BE4 - ??? - accepts: A0=p->???, A1=xpos1, A2=zpos1, A3=xpos2, SP+10=zpos2 - redirects to 7F0B0914: SP+10=[SP+10], SP+14=0, SP+18=0 (no jump or buffer) - E5754 7F0B0C24 - ??? - redirects to 7F0B0914: SP+10=[SP+10], SP+14=7F0B0C98, SP+18=SP+30 - buffer: B+0=[SP+14], B+4=0, B+8=[SP+1C], B+C=-1 - 7F0B0C98 - E581C 7F0B0CEC - redirect to 7F0B0C98 - 7F0B0D0C - 7F0B0E24 - 7F0B1410 - 7F0B16C4 - 7F0B1794 - 7F0B17E4 - 7F0B18B8 - E67F4 7F0B1CC4 - reset ???; fries AT - 0-> [8007B9E4], 0-> [8007B9E8], 0-> [800413BC] - E6810 7F0B1CE0 - V0= [8007B9E4] - E681C 7F0B1CEC - V0= [8007B9E8] - E6828 7F0B1CF8 - E690C 7F0B1DDC - ??? - accepts: A0=???,A1=(float) ???,A2=(float) ???,A3=???,SP+10=???,SP+14=???,SP+18=???,SP+1C=??? - E6B30: 7F0B2000 - E6C00 7F0B20D0 - ??? - redirect to 7F0B1DDC: SP+10=0, SP+14=0, SP+18=0, SP+1C=0 - 7F0B2110 - 7F0B2194 - - 7F0B2718 - E73E0 7F0B28B0 - ??? - E7480 7F0B2950 - F12-> [80040F44], 1/F12-> [80040F48]; fries: AT,F4,F6 - 7F0B2970 - F0=???, y elevation of position (A1,A2) on tile A0? - accepts: A0=p->tile, A1=(float)xpos, A2=(float)zpos - E775C 7F0B2C2C copy tile A0's color as 24bit RGB to A3; fries V0,V1,A1,T3,T4,T5,T6,T7,T8,T9 - accepts: A0=p->tile, A1=xpos (unused), A2=zpos (unused), A3=p->target - used by "print man pos"; likely nerfed - 7F0B2C78 - E7844 7F0B2D14 - F0=[SP+18] - redirect to 7F0B2C78: A1=SP+18 - E7868 7F0B2D38 A0->SP+0, A1->SP+4, A2->SP+8 - E7878 7F0B2D48 V0=A0 - E7880 7F0B2D50 converts stan tile name string to integer values - accepts: A0=p->tile name string, A1=@short integer value target, A2=@letter code target - returns: V0=short integer part, values to targets; note A1 and A2 are overwritten, so ensure you can recover their values! - E7988 7F0B2E58 V0= match for stan tile name at pointer A0 - accepts: A0=p->tile name string, SP+22=name numeral, SP+21=name letter code - E7A30 7F0B2F00 redirect to 7F0B2E58: sends A0=A0, returns A0=p->hit - E7A5C 7F0B2F2C determines end of clipping file A0 - accepts: A0=p->stan tile list - E7B08 7F0B2FD8 V0=room# at p->tile A0 - E7B10 7F0B2FE0 redirects to 7F0B4F9C: A0=room# from tile A0 - accepts: A0=p->tile - E7B34 7F0B3004 redirect to 7F0B2D14 - E7B54 7F0B3024 removed: V0=A0, SP+4=A1, SP+8=A2 - accepts: A0=p->display list, A1=p->tile, A2=RGBA colour - E7B64 7F0B3034 removed: V0=A0 - accepts: A0=p->display list - E7B6C 7F0B303C removed: V0=A0 - accepts: A0=p->display list - 7F0B3044 - - E7C5C 7F0B312C removed: V0=A0, A1->SP+4 - accepts: A0=p->display list, A1=??? (colour?) - E7C68 7F0B3138 - -# - E82F0 7F0B37C0 generate debug.notice.list entry for bg_c_debug using data at 800413F0 - E831C 7F0B37EC - E83E4 7F0B38B4 - E84EC 7F0B39BC - accepts: A0=room#, A1=, A2=p->???, A3= - E8634 7F0B3B04 0->room A0 + 3 - accepts: A0=room# - E8650 7F0B3B20 - accepts: A0=room# - E86F4 7F0B3BC4 - E873C 7F0B3C0C - E87BC 7F0B3C8C - E8B30: 7F0B4000 - E8B64 7F0B4034 - E8BB4 7F0B4084 - E8C04 7F0B40D4 - E8C54 7F0B4124 - E9310 7F0B47E0 - E9340 7F0B4810 - E9360 7F0B4830 - E936C 7F0B483C F0= [800413F4] - E9378 7F0B4848 - E93A8 7F0B4878 F0= [800413FC] - E93B4 7F0B4884 camera modes 1-9 timers, among other things - uses TLB at 80058C58 - 7F0B4914 1,2,3,7,9 - 7F0B491C 4,5,6,8,default - E9580 7F0B4A50 - - E9AE4 7F0B4FB4 write setscissor microcode command for current player viewport ;fries AT,V0,V1,A0,A1,A2,A3,T0,T2,T3,T4,T5,T6,T7,T8,T9,F0,F4,F6,F8,F10,F16,F18 - V0=p->display list - redirects to 7F0B5058, using current player's viewport settings - accepts: A0=p->display list target - 7F0B4FF4 - - E9B88 7F0B5058 write setscissor microcode command for player viewport; fries AT,V0,V1,A0,A1,A2,A3,T0,T2,T3,T4,T5,T6,T7,T8,T9,F0,F4,F6,F8,F10,F16,F18 - V0=p->display list - accepts: A0=p->display list, A1=viewport ulx, A2=viewport uly, A3=viewport lrx, SP+10=viewport lry - E9C98 7F0B5168 - - E9D38 7F0B5208 - accepts: A0=room#, A1=p->??? - E9FB8 7F0B5488 - EA058 7F0B5528 - accepts: A0=portal#, A1=(float)???, A2=p->buffer - EA394 7F0B5864 - accepts: A0=portal#, A1=p->buffer - EA644 7F0B5B14 - EA690 7F0B5B60 - EA70C 7F0B5BDC V0=TRUE if A0 in line-of-sight with A1 - accepts: A0=p->floats, A1=p->floats - EA7F0 7F0B5CC0 - accepts: A0=p->floats, A1=p->floats - EA888 7F0B5D58 copies four floats from A1 to A0 - accepts: A0=p->target, A1=p->source - EA8AC 7F0B5D7C - EA910 7F0B5DE0 - EA974 7F0B5E44 V0=max #rooms [800442F4] - EA980 7F0B5E50 V0=TRUE if room A0 loaded; fries T6 - uses 80041414 table + 0 - EA99C 7F0B5E6C - V0=??? for room A0; fries T6 - uses 80041414 table + 1 - 7F0B5E88 - EAA08 7F0B5ED8 generate loaded room string when set - EAABC 7F0B5F8C - redirect to 7F0CE7F0: A2=SP+18 - 7F0B5FAC - EAB30: 7F0B6000 - 7F0B609C - - EAE44 7F0B6314 - accepts: A0=room# - EAE98 7F0B6368 - ??? uses joy2 detail edit flag - EB0F4 7F0B65C4 - - ECB30: 7F0B8000 - - ECEA4 7F0B8374 ???; push A0 onto 800448A8 table; V0=value written - accepts: A0=value - ECEE0 7F0B83B0 ???; V0= value pulled from 800448A8 table - ECF14 7F0B83E4 ???; V0= value pulled from entry A0 in 800448A8 table - accepts: A0=entry index - ECF44 7F0B8414 global visibility parsing routine - accepts: A0=p->command, A1=mode (0:ignore, 1:process) - ED000 7F0B84D0 type 00 normal termination - ED008 7F0B84D8 type 01 ??? - ED028 7F0B84F8 type 02 ??? - ED048 7F0B8518 type 03 ??? - ED078 7F0B8548 type 04 ??? - ED0A8 7F0B8578 type 05 ??? - ED0D0 7F0B85A0 type 06 ??? - ED100 7F0B85D0 type 14 add range of rooms capable of sight - ED144 7F0B8614 type 1E force globally visible - ED184 7F0B8654 type 1F add portal that views room - ED1D8 7F0B86A8 type 22 append portal that views room - ED2B8 7F0B8788 type 20 add visible room - ED444 7F0B8914 type 21 begin new block - ED244 7F0B8714 type 23 - ED324 7F0B87F4 type 24 - ED358 7F0B8828 type 25 - ED3B4 7F0B8884 type 26 - ED3E8 7F0B88B8 type 27 - ED460 7F0B8930 type 50 - ED49C 7F0B896C type 51 - ED484 7F0B8954 type 52 return and reset flag - ED4C0 7F0B8990 type 5A - ED4F8 7F0B89C8 type 5B change mode - ED510 7F0B89E0 type 5C return p->next command - ED520 7F0B89F0 default terminate (invalid types) - ED554 7F0B8A24 - accepts: A0=, A1= - ED59C 7F0B8A6C - ED8A8 7F0B8D78 - ED924 7F0B8DF4 - accepts: A0=room#, A1=, A2= - ED9C8 7F0B8E98 - accepts: A0=, A1= - EDA2C 7F0B8EFC - accepts: A0=room#, A1=, A2= - EDB00 7F0B8FD0 V0= TRUE if room A1 is directly visible from room A0; fries V1,A0,A2,T6,T7 - accepts: A0=room#, A1=room# - EDB70 7F0B9040 - accepts: A0=room# - EDBBC 7F0B908C - EDDE4 7F0B92B4 - accepts: A0=room# - EDE68 7F0B9338 - accepts: A0=room# - EE108 7F0B95D8 ???; searches for room A0 in portal list, then does soemthing with matching room entry - accepts: A0=room# - EE1FC 7F0B96CC - accepts: A0=portal index, A1=@buffer - EE46C 7F0B993C - accepts: A0=portal index - EE4C0 7F0B9990 F0= portal A0's 7th byte converted to some wonky scale value - accepts: A0=portal index - EE544 7F0B9A14 V0= portal A0's 7th byte - accepts: A0=portal index - EE55C 7F0B9A2C increment counter in portal A0's 7th byte - accepts: A0=portal index - EE5AC 7F0B9A7C decrement counter in portal A0's 7th byte - accepts: A0=portal index - EE614 7F0B9AE4 V0= 0x1 flag in portal A0's 6th byte - accepts: A0=portal index - EE634 7F0B9B04 V0= 0x2 flag in portal A0's 6th byte - accepts: A0=portal index - EE654 7F0B9B24 set 0x2 flag in portal A0's 6th byte - accepts: A0=portal index - EE674 7F0B9B44 V0= ~0x2 flag in portal A0's 6th byte - accepts: A0=portal index - EE694 7F0B9B64 switch parent/child room numbers for portal A0 - accepts: A0=portal index - EE6C4 7F0B9B94 - - EE8EC 7F0B9DBC set or unset (A1=0,1) 0x1 flag in portal A0's 6th byte; fries V0,T0,T1,T6,T7,T8,T9 - accepts: A0=portal index - EE914 7F0B9DE4 removed: print current state of debug port; V0=A0, A1->SP+4, A2->SP+8 - accepts: A0=p->display list, A1=port#, A2=??? - EE924 7F0B9DF4 removed: tied to debug port; A0->SP+0 - accepts: A0=port# [800483CC] - EE92C 7F0B9DFC removed; A0->SP+0 - EE934 7F0B9E04 - accepts: A0=, A1= - EEA44 7F0B9F14 - accepts: A0=, A1=, A2= - EEB30: 7F0BA000 - EED9C 7F0BA26C - accepts: A0=, A1=, A2=, A3= - EEE04 7F0BA2D4 - EF0F0 7F0BA5C0 - EF170 7F0BA640 - EF250 7F0BA720 removed; A0->SP+0, A1->SP+4 - EF25C 7F0BA72C V0= [80044DCC] - EF268 7F0BA738 F0= [80044DC4] - EF274 7F0BA744 F0= square of [80044DC4] - EF288 7F0BA758 sets long enviroment data (A0) as current - accepts: A0=p->enviroment data - EF500 7F0BA9D0 sets short enviroment data (A0) as current - accepts: A0=p->enviroment data - EF58C 7F0BAA5C A0->SP+0; deleted function, used at 7F0B479C - accepts: A0=p->start of portal list - EF594 7F0BAA64 locates and copies matching enviroment values for stage - EF7D8 7F0BACA8 switch to secondary sky for stage using F12 for blend multiplier - sets long enviroment entry before return - accepts: F12=multplier for blend value - EFBA0 7F0BB070 sets sky color and material in display list A0; returns V0=p->DL - accepts: A0=p->DL - EFDC8 7F0BB298 clears geometry fog flag if clouds enabled; returns V0=p->DL - accepts: A0=p->DL - EFDF8 7F0BB2C8 - EFEC8 7F0BB398 V0= p->near fog enviroment values [800825C4] - 7F0BB3A4 if sky present converts fog values; returns V0=0-2 for whatever reason - accepts: A0=p->???(+18=float), A1=p->fog color target -# light fixtures - F0000 7F0BB4D0 initialize light fixture tables - F0054 7F0BB524 V0=index of current entry in light fixture table [80082660] - F00CC 7F0BB59C adds an entry in light fixture table [80082660] - accepts: A0=p->DL - F0130 7F0BB600 save DL endpoint pointer A0 to cur. entry in light fixture table [80082660] - accepts: A0=p->DL - F0160 7F0BB630 V0=TRUE if light fixture; V0=1 if image ID A0 matches 0C9, 0CB, 0CD, 0FC, 0FE, 0FF, 100, 1AC, 3D6, or 567 - accepts: A0=image ID# - F01C4 7F0BB694 V0=p->vertex in room A1 denoted by entry A0 - accepts: A0=p->???, A1=room# - F0224 7F0BB6F4 - ??? - A1 is index in pointer table (0-4) - uses TLB pointer table at 80058D80 - - F0B30: 7F0BC000 - - 7F0BC530 - - 7F0BCA14 V0= p->entry A0 in table @8007FF8C + C - 7F0BCA34 -# resource table management - F15D0 7F0BCAA0 load resource table/data entry (A2,A3) to buffer A0 of size A1 - accepts: A0=p->rdram target, A1=size, A2=p->resource table entry, p->resource data entry - uses 70005C1C to load from ROM; pipes through 7F0CE7F0 to decompress. - F1664 7F0BCB34 load resource table/data entry (A2,A3) from Indy into allocated buffer A0 of size A1 - accepts: A0=p->allocated data, A1=remaining size of mem bank, A2=p->resource table entry, A3=p->resource data entry - F1758 7F0BCC28 ob_c_debug: generate resource data filesize entries - F17EC 7F0BCCBC load resource index A0 into memory bank A3; redirect to 7F0BCE0C: A3&0xFF - accepts: A0=index#, A1=mode, A2=do not update bank index (FALSE,TRUE), A3=bank - F1814 7F0BCCE4 redirect to 7F0BCFE0 - accepts: A0=index#, A1=mode, A2=p->target, A3=size of buffer - F1834 7F0BCD04 load resource named A0 to bank A3; redirects to 7F0BCE0C - accepts: A0=p->string, A1=mode, A2=do not update bank index (FALSE,TRUE), A3=bank - F1870 7F0BCD40 load resource named A0 to buffer A2 of size A3; redirects to 7F0BCFE0 - accepts: A0=p->string, A1=mode, A2=p->target, A3=size of buffer - F18AC 7F0BCD7C loads A3 bytes of BG file named A0 starting at A2 to rdram A1 - accepts: A0=p->string, A1=p->target, A2=offset, A3=size - F193C 7F0BCE0C load resource index A0 into memory bank A3 - accepts: A0=index#, A1=mode, A2=do not update bank index (FALSE,TRUE), A3=bank - F1B10 7F0BCFE0 load resource index A0 to buffer A2 of size A3 - accepts: A0=index#, A1=mode, A2=p->target, A3=size of buffer - F1C30 7F0BD100 V0= temp. remaining buffer for resource index A0 - accepts: A0=index - F1C4C 7F0BD11C V0= remaining buffer for resource index A0 - accepts: A0=index - F1C68 7F0BD138 set remaining buffer size for resource entry A0, and if A3 TRUE update bank 4 for buffer A1 of size A2 - accepts: A0=index, A1=p->buffer, A2=remaining buffer size, A3=update TRUE/FALSE - F1CB8 7F0BD188 V0=temporary buffer remaining value for resource named A0; same as res.data[index]+4 - accepts: A0=p->string - F1CEC 7F0BD1BC remove resource bank values matching or above bank A0; also eliminates bank 4 temp remaining values - accepts: A0=bank - F1D64 7F0BD234 remove resource bank values for banks 5 and 6; redirect to 7F0BD1BC: A0=5 - F1D84 7F0BD254 V0=index# in ROM table for string A0 - accepts: A0=p->name - Iterates names in resource table for a match. On a miss, searches Indy for file and appends a resource entry if found. - F1DB4 7F0BD384 removed: A0->SP+0 - accepts: A0=resource index - F1DBC 7F0BD38C removed: calls 7F0BD384 for each resource entry index - F1E14 7F0BD3E4 V0=# resource entries; possibly gutted routine - F1E40 7F0BD410 V0= p->res.data.final; possibly gutted routine -# geometry memory management - F1E90 7F0BD460 generate debug.notice.list entry for dyn_c_debug using current mgfx allocations - F1FBC 7F0BD48C set mgfx and mvtx allocations - uses strings starting at 8005B68C - F21A4 7F0BD674 ??? - 1->8008C254, V0=8008C230 + (@8008C250 -> offset) - F21CC 7F0BD69C V0=#microcode ops left in geometry buffer, starting at A0; fries T6,T7,T8,T9 - looks at bank @8008C250 in table 8008C234, subtracts p->DL A0, divides by 8 - F21F4 7F0BD6C4 allocates +A0 vertices in geometry memory [@8008C24C]; fries V0,A2,T6,T7 - geometry memory += (A0*0x10) - F2210 7F0BD6E0 geometry memory += 0x40 [@8008C24C]; fries V0,A1,T6 - F2228 7F0BD6F8 allocates +A0 vertices in geometry memory [@8008C24C]; fries V0,A2,T6,T7 - geometry memory += (A0*0x10) - F2244 7F0BD714 p->allocated space; fries V0,A2,T6,T7,T8 - allocates A0 space in geometry memory [8008C24C] - 7F0BD738 - F22A4 7F0BD774 removed "show mem use" debug routine: A0->SP+0 - F22AC 7F0BD77C V0= #microcode commands that can span from A0 to end of chunk - accepts: A0=p->display list target - 7F0BD7A4 - F22FC 7F0BD7CC V0=strlen of A0, F12=ratio of remaining/used DL ops; fries V1,T6,T7,F0,F4 - note: probably incomplete. Debug should have displayed F12 percentage of ASCII strings as bars... - accepts: A0=p->string, A1=(float)#remaining DLops, A2=(float)#previous DL ops - F2340 7F0BD810 "show mem bars": F12=percentage of used geometry memory - accepts: A0=p->display list, acting as cur.pos. within geometry memory -# - F2420 7F0BD8F0 V0= pause [800483C0] - F242C 7F0BD8FC A0->pause [800483C0]; fries AT - F2438 7F0BD908 lv_c_debug: load japanese font DLs to bank 6 - F24B4 7F0BD984 play random music track 2-3E - F24F4 7F0BD9C4 play music track A0 - accepts: A0=track - F251C 7F0BD9EC play next music track (1-3E) - F2568 7F0BDA38 play previous music track (3E-1) - F25B4 7F0BDA84 play primary music track for stage A0 - accepts: A0=stage# - F25E0 7F0BDAB0 - ??? - involves selected cheat options - calls necessary stuff for stage loading! - F2A34 7F0BDF04 V0=cur.stage# [80048364] - F2A40 7F0BDF10 ???, V0=p->DL; used when port close, inf, approx flag set - accepts: A0=p->display list - F2B30: 7F0BE000 - F2E3C 7F0BE30C ???; generates display lists; tests stan hit flag - F3400 7F0BE8D0 set settings based on difficulty - called constantly - F36B8 7F0BEB88 run MP game, its scoring and time - involves selected cheat options - recalls joy2 detail edit flag - F4330 7F0BF800 - F4650 7F0BFB20 unload stage text and data - F4728 7F0BFBF8 A0->player control lock [80048370]; fry AT - F4734 7F0BFC04 V0=player control lock [80048370] - F4740 7F0BFC10 V0= difficulty [80048384] - F474C 7F0BFC1C A0->difficulty; fry AT - F4758 7F0BFC28 A0->MP time setting; fry AT - F4764 7F0BFC34 A0->MP point setting; fry AT - F4770 7F0BFC40 F0= current MP time (sec); fry AT - F477C 7F0BFC4C F0= current MP time (min); fry AT - F4788 7F0BFC58 F0= stage time (sec); fry AT - F4794 7F0BFC64 F0= power-on time (sec); fry AT - F47A0 7F0BFC70 clear ramrom block, buffer, and heading addy; fry AT - F47BC 7F0BFC8C V0= TRUE if ramrom starting or loaded [80048474] - F47C8 7F0BFC98 V0= currently recording ramrom [80048480] - F47D4 7F0BFCA4 menu 0B interface: -active gameplay- - V0= [8004847C] - F47E0 7F0BFCB0 finalize ramrom on hardware - F4890 7F0BFD60 save ramrom to devtool - F4930 7F0BFE00 load ramrom from devtool - F498C 7F0BFE5C record player input as packet - accepts: A0=p->controller input index, A1=index+1E4, A2=index+1E0 - F4B30: 7F0C0000 - F4BB0 7F0C0080 ramrom replay handler - F4D98 7F0C0268 iterate ramrom entry, handling camera at end - F4ED8 7F0C03A8 copy current in-game registers before playing ramrom - F5024 7F0C04F4 copy recorded ramrom values to appropriate in-game registers - accepts: A0=p->ramrom data - F5170 7F0C0640 detects if recording currently loading stage - if 80048488 set, records input as a demo movie - accepts: A0=stage#, A1=difficulty - F52EC 7F0C07BC record next movie to slot A0 (0-3); fries AT,T6 - slot corresponds to set#-1 - 1->80048488, A0->8008C5F0 - F5304 7F0C07D4 stop recording ramrom - F534C 7F0C081C replay recorded ramrom demo at hardware address A0; called by intros and debug features - accepts: A0=hardware address - F53D8 7F0C08A8 replay ramrom loaded from devtool; redirect to 7F0C081C: A0=0xF00000 - inoperable: 0xF00000 is the development tool root address - F53F8 7F0C08C8 set to camera mode A if not already set - F542C 7F0C08FC stop demos - F54A0 7F0C0970 selects demo ramrom to replay; redirects to 7F0C081C - F5550 7F0C0A20 V0=set # - F55A0 7F0C0A70 set COP0 Count to 800484AC, 800484B0 - F55D0 7F0C0AA0 - F567C 7F0C0B4C - F5714 7F0C0BE4 - A0-> [800484B4]; fries AT - F5720 7F0C0BF0 redirect to 7F0A9358 - F5740 7F0C0C10 redirect to 7F0A9180 - F5760 7F0C0C30 - V0= [800484C0] - F576C 7F0C0C3C - ???, A0->800484C0, uses original for first jump - loads TLB pointer#(0-6) [800484C0] from table at 8005B790 - 7F0C0C74 ???, loads TLB pointer A0(0-6) from 8005B7AC - 7F0C11EC 0 - 7F0C0C94 1 - 7F0C0CC8 4 - 7F0C0D28 default - 7F0C0D28 ???, loads TLB pointer A0(0-6) from 8005B7C8 - 7F0C0D48 0 - 7F0C0D68 2 - 7F0C0DAC 3 - 7F0C0DE4 6 - 7F0C0E18 default - 7F0C0E18 ???, loads TLB pointer A0(0-6) from 8005B7E8 - 7F0C0E38 0 - 7F0C0E58 1 - 7F0C11EC 2 - 7F0C0E88 3 - 7F0C0EB0 default - 7F0C0EB0 ???, loads TLB pointer A0(0-6) from 8005B804 - 7F0C0ED0 0 - 7F0C0EF0 1 - 7F0C0F20 2 - 7F0C0F54 4 - 7F0C0F9C 5 - 7F0C0FE8 default - 7F0C0FE8 ???, loads TLB pointer A0(0-6) from 8005B820 - 7F0C1008 0 - 7F0C1028 3 - 7F0C1070 5 - 7F0C10B4 default - 7F0C10B4 ???, loads TLB pointer A0(0-6) from 8005B83C - 7F0C10D4 0 - 7F0C10F4 3 - 7F0C112C 4 - 7F0C115C default - 7F0C115C ???, loads TLB pointer A0(0-6) from 8005B83C - 7F0C117C 0 - 7F0C119C 1 - 7F0C11CC 6 - 7F0C11E4 default - 7F0C11E4 default - F5D2C 7F0C11FC - 7F0C1268 - 7F0C1288 - 7F0C12CC - 7F0C1310 - 7F0C1340 - 7F0C1364 - F5EF8 7F0C13C8 reset all music slots; fries AT - F602C 7F0C14FC set time (A1:A2) for music slot A0; fries AT,A0,V0,V1,T0,T6,T7,T8,T9 - accepts: A0=slot# (0-3), A1=minutes, A2=seconds - F6088 7F0C1558 reset music in slot A0, or all if -1; fries AT,T6 - F6110 7F0C15E0 return text bank # for stage# A0 - F621C 7F0C16EC initialize text bank and load the global text - F6470 7F0C1940 - ??? - japanese-specific - F6560 7F0C1A30 - F6838 7F0C1D08 load mission text bank A0 - F6894 7F0C1D64 load briefing text from bank A0 - F68F4 7F0C1DC4 blank text bank A0; fries AT,T6 - F6908 7F0C1DD8 text ID (A0) -> text pointer (V0); fries V1,T0,T6,T7,T8,T9 - F6950 7F0C1E20 V0=1 if you can advance right on MP menu page; fries AT,V1,T6,T7,T8 - uses p->TLB table at 8005BC40 - 7F0C1E50 V0=1 pages 0,1,2,4 - 7F0C1E58 V0=0 pages 5,6,7 - 7F0C1E60 V0=1 or 0 if game over page 3 - F69BC 7F0C1E8C V0=1 if you can advance left on MP menu page; fries AT,V1,T6,T7,T8 - uses p->TLB table at 8005BC60 - 7F0C1EBC V0=1 pages 2,3,4,5 - 7F0C1EC4 V0=0 pages 0,6,7 - 7F0C1ECC V0=0 or 1 if game over page 1 - F6A28 7F0C1EF8 if player A0 pressing stick-right, c right, + right, return TRUE - uses press register at BONDdata+29D0 - F6A98 7F0C1F68 if player A0 pressing stick-left, c left, + left, return TRUE - uses press register at BONDdata+29D0 - F6B0C 7F0C1FDC redirect to 70008E08: play sound effect 09F--watch beep - F6B30: 7F0C2000 - F6B38 7F0C2008 unpause (0->8008C718), set active play (0->8008C700), deactivate game over (0->8008C704); fries AT - 7F0C2024 - - F6FEC 7F0C24BC V0= TRUE if 1 player or play not stopped and player not in MP menu - FALSE if screen should be darkened in a multiplayer stage - F7050 7F0C2520 stop play 1->8008C700; fries: AT,T6 - F7060 7F0C2530 - ??? - determines MP awards? - F79B0 7F0C2E80 - F80D0 7F0C35A0 displays text for player data on MP menu - accepts: A0=p->DL, A1=x pos., A2=y pos., A3=p->data arguments, SP+10=display type - uses TLB pointers at 8005BC88 - 7F0C3634 ??? - green text normal [00FF00B0] - 7F0C369C ??? - green text highlighted [70FF70F0 007000A0] - 7F0C3710 ??? - red text normal [FF4040B0] - 7F0C3778 ??? - red text highlighted [FFA0A0F0 700000A0] - 7F0C37EC ??? - blue text normal [4040FFB0] - 7F0C3854 ??? - blue text highlighted [A0A0FFF0 000070A0] - 7F0C38C0 return - F8408 7F0C38D8 V0=# points for player A0 in MP stage; fries AT,V1,A0,A1,A2,A3,T0,T1,T2,T3,T4,T6,T7,T8,T9 - 7F0C3954 # player kills (Normal, MwtGX, LtK) - 7F0C3B14 # deaths (YOLT) - 7F0C3B24 Time w/ Flag (TLD) - 7F0C3B2C Team # player kills (Teams) - F87C4 7F0C3C94 determines rank of player A1 in multiplayer watch menu display and writes string to buffer A0 - accepts: A0=@text buffer, A1=player# - F8A8C 7F0C3F5C V0= TRUE if displaying rank in MP menu - uses scenario TLB pointers at 8005BCC0 - accepts: A0=TRUE if playing (false if stopped) - 7F0C3F8C 1 - all scenarios except YOLT - 7F0C3F94 0 - YOLT - F8AFC 7F0C3FCC V0= TRUE if displaying score in MP menu - uses scenario TLB pointers at 8005BCE0 - accepts: A0=TRUE if playing (false if stopped) - 7F0C3FFC 1 - all scenarios except YOLT + TLD - F8B30: 7F0C4000 - 7F0C4004 0 - YOLT, TLD - F8B54 7F0C4024 multiplayer watch menu display - uses scenario TLB pointers at 8005BD00 to set window text - 7F0C40C8 0,1,2,3 - play - 7F0C4118 7 - blank - 7F0C4128 4 - pause/unpause - 7F0C4170 5,6 - exit - FAB30: 7F0C6000 - FAB78 7F0C6048 - ??? - pulls 8008C704. if invalid, pulls BONDdata+29C4; fries V1,T6,T7,T8,T9 - FABB0 7F0C6080 - V0= [8008C718] - FABC0 7F0C6090 Display red/blue positions on radar; uses scenario flags for TLD, MwtGX, and all the teams - FB100 7F0C65D0 advance MP weapon set menu one option & save updated value; fries AT,V0,T6,T7,T8 - FB128 7F0C65F8 V0= p->current weapon set's text code; fries T6,T7,T8 - FB144 7F0C6614 returns V0=pointer to MP weapon set data; fries T6,T7 - FB160 7F0C6630 A0-> selected MP weapon set; fries AT - FB16C 7F0C663C V0= selected MP weapon set - FB180 7F0C6650 unconditional return - FB188 7F0C6658 - - FC82C 7F0C7DFC process huffman compressed images - FCB30: 7F0C8000 - 7F0C805C huffman decompression types 0 - 1: store - 7F0C8084 huffman decompression type 2 - 7F0C8120 huffman decompression type 3 - 7F0C81D8 huffman decompression type 4 - 7F0C8268 huffman decompression type 5 - 7F0C82B8 huffman decompression type 6 - 7F0C8324 huffman decompression type 7 - 7F0C838C huffman decompression type 8 - 7F0C8464 huffman decompression type 9 - 7F0C8534 invalid format handler - FD284 7F0C8754 ??? - - FEB30: 7F0CA000 - - 100624 7F0CBAF4 set start and end of block to A0; fries V0 - start (A1)->A0+0 & A0+8, end (A1+A2)->A0+4 & A0+C - accepts: A0=p->[8004C720], A1=p->allocated memory, A2=size - 10063C 7F0CBB0C V0=offset to matching image list slot, or NULL if no match found - accepts: A0=image ID, A1=p->image list. If NULL, defaults to 8008C720 - 100694 7F0CBB64 - ??? - V0=[A0+C]-[A0+8]; fries T6,T7 - 1006A4 7F0CBB74 detects and handles rdp_settextureimage ABCD codes in display list A0 - accepts: A0=p->DL, A1=p->buffer for image or NULL - calls: 7F0CBC18 if code ABCD in place of segment - 100748 7F0CBC18 load image to buffer A1 using declaration at A0 - accepts: A0=p->image declaration, A1=p->buffer for image. If NULL, uses 8008C720 - 7F0CBE50 - ??? - model header parsing - 100A18 7F0CBEE8 load image A0; redirects to 7F0CBC18, setting a pointer to A0 in stack - 7F0CBF0C - - 100AE0 7F0CBFB0 loads and sets up global image bank -100B30: 7F0CC000 - 100FEC 7F0CC4BC unconditional return - 100FF8 7F0CC4C8 - ??? - reset table of saved setothermode.h settings(?) - 10104C 7F0CC51C V0=#bytes copied: copy A1 bytes from A0 to A2; fries: V1,A1,T6 - 101078 7F0CC548 V0=TRUE if current setothermode.h attributes [8008D140] do not match A0; fries: V1,T6 - accepts: A0=setothermode.h attributes needed - 1010A4 7F0CC574 - ??? - unknown, used in C0- DL expansion... - return TRUE if set to new values - accepts: A0=???, A1=format, A2=bitdepth, A3=???, SP+10=???, SP+14=???, SP+18=???, SP+1C=???, SP+20=???, SP+24=???, SP+28=??? - 7F0CC690 - 101244 7F0CC714 if A1=0, returns V0=width (A0+8); else, V0=corresponding entry in 8008C731 - accepts: A0='facemapper' image entry, A1=??? - 10132C 7F0CC7FC if A1=0, return V0=height (A0+9); else, V0=corresponding entry in 8008C738 - accepts: A0='facemapper' image entry, A1=??? - fries V0,V1,A2,A3,T0,T1,T2,T6,T8,T9 - 7F0CC87C - - 7F0CC9D4 - 7F0CCA9C - - 101780 7F0CCC50 - accepts: A0=, A1=, A2=ST settilesize offset, A3=S shift, SP+10=T shift, SP+14=primary diffuse level (for FA op) - - 101AEC 7F0CCFBC - accepts: A0=p->C0- op, A1=p->texture(BB) op, A2=p->image, A3=??? - 101BA8 7F0CD078 ??? - expands C0- display list pseudocommands - accepts: A0=p->DL, A1=p->'facemapper' image entry, A2=??? - 101F60 7F0CD430 - ??? - used in C0- pseudocommand display list expansion - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror(2)|clamp(1), A3=T mirror(2)|clamp(1), SP+10=ST settilesize offset, SP+14=???, SP+18=??? - 1022DC 7F0CD7AC - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror/clamp, A3=T mirror/clamp - 102694 7F0CDB64 - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror/clamp, A3=T mirror/clamp, SP+10=ST settilesize offset, SP+14=??? - 102948 7F0CDE18 C0- expansion: apply type 2 basic image C0.FC00.02 00000.iii - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror/clamp, A3=T mirror/clamp, SP+10=ST settilesize offset - 1029D8 7F0CDEA8 C0- expansion: apply type 1 overlay images C0.FFFF.01 LL.ooo.iii - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror/clamp, A3=T mirror/clamp, SP+10=ST settilesize offset, SP+14=p->overlay image, SP+18=S shift, SP+1C=T shift, SP+20=primary diffuse level (for FA op) - 102AD8 7F0CDFA8 C0- expansion: apply image with LOD setting C0.FFFF.0n LL.000.iii - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror/clamp, A3=T mirror/clamp, SP+10=ST settilesize offset, SP+14=S shift, SP+18=T shift, SP+1C=primary diffuse level (for FA op) -102B30: 7F0CE000 - 102B94 7F0CE064 C0- expansion: apply type 4 image; calls 7F0CD7AC, 7F0CDB64: SP+14=0 - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror/clamp, A3=T mirror/clamp, SP+10=ST settilesize offset - 102BDC 7F0CE0AC C0- expansion: apply type 3 image; calls 7F0CD7AC, 7F0CDB64: SP+14=0, 7F0CDB64: SP+14=1 - accepts: A0=p->DL, A1=p->'facemapper' entry, A2=S mirror/clamp, A3=T mirror/clamp, SP+10=ST settilesize offset - 102C48 7F0CE118 used to parse display list microcode sorting display modes and expanding image calls as required - uses TLB pointer table at 8005BF20 - 7F0CE1D8 C0 command: expand into image ops - uses TLB pointer table at 8005BF60 - 7F0CE2BC type 0 - C0.FFFF.00 LL.000.iii if collecting detail data use cur.image for new entry; or load image with LOD level 7F0CDFA8 - 7F0CE428 type 1 - C0.FFFF.01 LL.ooo.iii LOD style image shifting 7F0CDEA8 - 7F0CE4B8 type 2 - C0.FC00.02 00000.iii use detail data for LOD level + shift if present; or load basic image 7F0CDFA8 / 7F0CDE18 - 7F0CE584 type 3 - C0.FC00.03 00000.iii basic image 7F0CE0AC - 7F0CE5BC type 4 - C0.FC00.04 00000.iii basic image 7F0CE064 - 7F0CE5F0 default tests if texture 5E4 or 5E7 - 7F0CE64C copy command from buffer back to source - 7F0CE66C B1, BF commands: triangle commands - 7F0CE694 BB command: texture, activating and applying loaded textures to triangles - 7F0CE6B8 BA command: setothermode.h - 7F0CE720 default -# RareZip decompressor - 103320 7F0CE7F0 decompress data A0 to A1, advancing past header - accepts: A0=p->zlib compressed data, A1=p->target, A2=p->buffer for decompression object - actually tests header against 8005BF80+84, and on fail against 8005BF88/98 - all of which are the same! - calls 7F0CFCD4 - 1033C4 7F0CE894 - returns V0=8008D350(T6) + 8008D358(T7) - 7F0CE8B0 - 7F0CEEF0 - 103EBC 7F0CF38C type 0 zlib decompressor - 104058 7F0CF528 type 1 zlib decompressor - 1041C0 7F0CF690 type 2 zlib decompressor - 1046E4 7F0CFBB4 select zlib decompression routine from type - 104804 7F0CFCD4 loops to decompress entire zlib file; calls 7F0CFBB4 - uses a zlib struct at 8008D350 (ish) -# RSP management - 1048E0 7F0CFDB0 generate debug.notice.list entry for rsp_c_debug using data at 8004E9E0 - 10490C 7F0CFDDC allocate and initialize RSP buffers - 104948 7F0CFE18 ???; in part loads RSP microcode from 80020D90 - 80020E60 -# Indy management - 104A60 7F0CFF30 initializes Indy if not ready; calls 7F0CFF6C - 104A94 7F0CFF64 unconditional return - 104A9C 7F0CFF6C initializes Indy if ready; calls 7F0D0A3C - 104ACC 7F0CFF9C load resource named A0 from Indy to A1 - accepts: A0=p->string, A1=p->target - 104B10 7F0CFFE0 send capture data A1 of size A2 named A0 - accepts: A0=p->text, A1=p->data, A2=size -104B30: 7F0D0000 - 104B4C 7F0D001C load ramrom file named A0 from Indy to buffer A1, size A2 - accepts: A0=p->string, A1=p->target, A2=@filesize - 104B8C 7F0D005C V0=TRUE if file A0 at hardware A1 of size A2 successfully exported - accepts: A0=p->string, A1=hardware address, A2=size - 104BC8 7F0D0098 V0=TRUE if resource named A0 found on Indy and filesize set to A1 - accepts: A0=p->string, A1=@filesize - 104C10 7F0D00E0 V0= response from command string A0 sent to host PC via Indy - accepts: A0=p->text - 104C54 7F0D0124 removed: V0= -1 - if 8004EAC8 set, call 7000CEB0 - 104C84 7F0D0154 send close port command to PC - calls 7F0D00E0: A0=p->"sleep 5; /etc/killall ghost gload" [8005BFC0] -# Indy: resource entry management - 104CB0 7F0D0180 removed: read A1 bytes f/indy.res to A0 - accepts: A0=p->data, A1=size of data - redirects to 7000CEC0 - 104D00 7F0D01D0 removed: write A1 bytes to indy.res from A0 - accepts: A0=p->data, A1=size of data - redirects to 7000CEB8 - 104D50 7F0D0220 post Indy resource command A0 of size A1 - accepts: A0=p->data, A1=length - 104D88 7F0D0358 post two Indy resource commands A0 and A2 of sizes A1 and A3, respectively - accepts: A0=p->indy.res 1, A1=size of indy.res 1, A2=indy.res 2, A3=size of indy.res 2 - 104DBC 7F0D038C post type 1 indy.res.cmd: PI access request - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size - calls 7F0D0220: A0=[9ABF1623,1,0x14,A0,A1] - 104E04 7F0D03D4 post type 2 indy.res.cmd: command ready - accepts: A0=next indy.res.cmd size [0], A1=next indy.res.cmd size [0] - calls 7F0D0220: A0=[9ABF1623,2,0x14,A0,A1] - 104E4C 7F0D041C post type 0 indy.res.cmd: initialize - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size - calls 7F0D0220: A0=[9ABF1623,0,0x14,A0,A1] - 104E90 7F0D0460 post type 3 indy.res.cmd: data send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string (100 bytes max) - calls 7F0D0220: A0=[9ABF1623,3,0x114,A0,A1,string at A2(0x100 bytes)], A1=size (0x114) - 104EF4 7F0D04C4 post type 4 indy.res.cmd: data recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= - calls 7F0D0220: A0=[9ABF1623,4,0x18,A0,A1,A2] - 105044 7F0D0514 post type 5 indy.res.cmd: printf send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string - calls 7F0D0220: A0=[9ABF1623,5,0x114,A0,A1,string at A2(0x100 bytes)], A1=size (0x114) - 1050A8 7F0D0578 post type 6 indy.res.cmd: printf recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=, A3= - calls 7F0D0220: A0=[9ABF1623,6,0x1C,A0,A1,A2] - 105100 7F0D05D0 post type 7 indy.res.cmd: log send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3= - calls 7F0D0220: A0=[9ABF1623,7,0x118,A0,A1,string at A2(0x100 bytes),A3], A1=size (0x118) - 105174 7F0D0644 post type 8 indy.res.cmd: log recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=, A3=, SP+10=size of struct 2, SP+14=p->struct 2 - calls 7F0D0358: A0=[9ABF1623,8,A3+20 to nearest word,A0,A1,A2,A3,SP+10], A1=size (0x20) - 1051F0 7F0D06C0 post type 9 indy.res.cmd: app. command ready - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3=size of struct 2, SP+10=p->struct 2 - calls 7F0D0358: A0=[9ABF1623,9,0x114,string at A2(0x100 bytes),A0,A1], A1=size (0x114), A2=SP+10, A3=A3 - 105270 7F0D0740 post type A indy.res.cmd: app. command received - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= - calls 7F0D0220: A0=[9ABF1623,A,0x18,A0,A1,A2], A1=size (0x18) - 1052C0 7F0D0790 post type F indy.res.cmd: request ramrom file named A2 sent to buffer A3 of SP+10 bytes - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3=p->target, SP+10=@filesize - calls 7F0D0220: A0=[9ABF1623,F,0x11C,A0,A1,string at A2(0x100 bytes),A3,SP+10], A1=size (0x11C) - 10533C 7F0D080C post type 10 indy.res.cmd: ramrom request recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=success (TRUE/FALSE), A3=p->buffer, SP+10=@size - calls 7F0D0220: A0=[9ABF1623,10,0x20,A0,A1,A2,A3,SP+10], A1=size (0x20) - 10539C 7F0D086C post type D indy.res.cmd: prof send - filename A0 of size A1 at hardware address A2 - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string, A3=size, SP+10=hardware address - calls 7F0D0220: A0=[9ABF1623,D,0x11C,A0,A1,string at A2(0x100 bytes),A3,SP+10], A1=size (0x11C) - 105418 7F0D08E8 post type E indy.res.cmd: prof recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= - calls 7F0D0220: A0=[9ABF1623,E,0x18,A0,A1,A2], A1=size (0x18) - 105468 7F0D0938 post type B indy.res.cmd: host prof send - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=p->string - calls 7F0D0220: A0=[9ABF1623,B,0x414,A0,A1,string at A2(0x400 bytes)], A1=size (0x414) - 1054CC 7F0D099C post type C indy.res.cmd: host prof recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= - calls 7F0D0220: A0=[9ABF1623,C,0x18,A0,A1,A2], A1=size (0x18) - 10551C 7F0D09EC post type A indy.res.cmd: app. data recieved - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2= - calls 7F0D0220: A0=[9ABF1623,A,0x18,A0,A1,A2], A1=size (0x18) - 10556C 7F0D0A3C post indy.res.cmd structure 1:0:2: initialize - 1055AC 7F0D0A7C post indy.res.cmd structure 1:3:2: (game) data send - accepts: A0=p->string - 1055F4 7F0D0AC4 post indy.res.cmd structure 1:4:2: (debug) data rec. - accepts: A0= - 10563C 7F0D0B0C post indy.res.cmd structure 1:5:2: (game) printf send - accepts: A0=p->string - 105684 7F0D0B54 post indy.res.cmd structure 1:6:2: (debug) printf rec. - accepts: A0=, A1= - 1056D4 7F0D0BA4 post indy.res.cmd structure 1:7:2: (game) request file named A0, size A1 - accepts: A0=p->string, A1=size [400000] - 105724 7F0D0BF4 post indy.res.cmd structure 1:8:2: (host) recieve file A3, size A2 - accepts: A0=, A1=, A2=data size, A3=p->data - 105798 7F0D0C68 post indy.res.cmd structure 1:9:2: send capture data A1, size A2 named A0 - accepts: A0=p->string, A1=data size, A2=p->data - 105800 7F0D0CD0 post indy.res.cmd structure 1:A:2: recieve capture data success - accepts: A0=@success - 105848 7F0D0D18 post indy.res.cmd structure 1:F:2: - accepts: A0=p->string, A1=, A2= - 1058A4 7F0D0D74 post indy.res.cmd structure 1:10:2: - accepts: A0=, A1=, A2= - 105900 7F0D0DD0 post indy.res.cmd structure 1:D:2: (game) prof send - filename A0 of size A1 at hardware address A2 - accepts: A0=p->string, A1=size, A2=hardware address - 10595C 7F0D0E2C post indy.res.cmd structure 1:E:2: (host) prof rec. - accepts: A0= - 1059A4 7F0D0E74 post indy.res.cmd structure 1:B:2: - accepts: A0=p->string - 1059EC 7F0D0EBC post indy.res.cmd structure 1:C:2: - accepts: A0= - 105A34 7F0D0F04 post indy.res.cmd structure 1:A:2: - accepts: A0= - 105A7C 7F0D0F4C read Indy resource command of size A1 to A0 - accepts: A0=p->buffer, A1=size of buffer - 105BD8 7F0D10A8 read two Indy resource commands A0 and A2 of sizes A1 and A3, respectively - accepts: A0=p->buffer 1, A1=size of buffer 1, A2=buffer 2, A3=size of buffer 2 - 105C30 7F0D1100 V0= TRUE if current indy.res.cmd type 1 with expected sizes (A0,A1) - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size - 105CDC 7F0D11AC V0= TRUE if current indy.res.cmd type 2 with expected sizes (A0,A1) - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size - 105D78 7F0D1248 V0= TRUE if current indy.res.cmd type 4 with expected sizes (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response - 105E24 7F0D12F4 V0= TRUE if current indy.res.cmd type 6 with expected sizes (A0,A1); A2,A3= responses (struct+14,+18) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response1, A3=@response2 - 105EE0 7F0D13B0 V0= TRUE if current indy.res.cmd type 8 with expected sizes (A0,A1); A2,A3= responses (struct+14,+18) if TRUE, SP+14= child indy.res.cmd of size A3 - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response1, A3=@response2, SP+10=@size of child indy.res.cmd, SP+14=@target for child indy.res.cmd - 105FC8 7F0D1498 V0= TRUE if current indy.res.cmd type A with expected sizes (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response - 106074 7F0D1544 V0= TRUE if current indy.res.cmd type 10 with expected sizes (A0,A1); A2,A3,SP+10= responses (struct+14,+18,+1C) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response1, A3=@response2, SP+10=@response3 - 10613C 7F0D160C V0= TRUE if current indy.res.cmd type E with expected sizes (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response - 1061E8 7F0D16B8 V0= TRUE if current indy.res.cmd type C with expected sizes (A0,A1); A2= response (struct+14) if TRUE - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size, A2=@response - 106294 7F0D1764 A0= response from indy.res.cmd structure 1:4:2 - accepts: A0=@response - 1062DC 7F0D17AC (A0,A1)= printf.recieved: response from indy.res.cmd structure 1:6:2; A0=TRUE and A1=filesize if file requested by 1:5:2 indy.res.cmd found - accepts: A0=@discovered (TRUE/FALSE), A1=@filesize - 10632C 7F0D17FC (A0,A1)= response, A3= p->data of size A2 from indy.res.cmd structure 1:8:2: recieve file A3, size A2 - accepts: A0=@response1, A1=@response2, A2=@data size, A3=@data - 106394 7F0D1864 A0= response from indy.res.cmd structure 1:A:2 - accepts: A0=@response - 1063DC 7F0D18AC (A0,A1,A2)= response from indy.res.cmd structure 1:10:2 - accepts: A0=@response1, A1=@response2, A2=@response3 - 106438 7F0D1908 A0= response from indy.res.cmd structure 1:E:2; V0=TRUE if file generated via 1:D:2 indy.res.cmd - accepts: A0=@response - 106480 7F0D1950 A0= response from indy.res.cmd structure 1:C:2 - accepts: A0=@response - 1064C8 7F0D1998 V0= TRUE if next indy.res.cmd matches expected sizes (A0,A1) - accepts: A0=next indy.res.cmd size, A1=next indy.res.cmd size -# memory management - 106550 7F0D1A20 generate debug.notice.list entry for game_c_debug using data at 8004EAE0 - redirect to 70004E60: A0=8004EAE0, A1=8005BFF0 - 10657C 7F0D1A4C - ??? - ?, reset memory bank 5, ??? bank 5 - calls: 7F0BD234; 7000999C: A0=5; 7F0BD1BC: A0=5 - 1065AC 7F0D1A7C - ??? - calls: 700099C4: A0=5; 7F0BD1BC: A0=5 - 1065E0 7F0D1AB0 - V0=8005C000 (address, not value) - 1065F0 7F0D1AC0 ???; generates DL - accepts: A0=p->DL - 1066C8 7F0D1B98 - accepts: A0=p->DL, A1=(float), A2=red, A3=green, SP+10=blue - calls 7F0D1BD0: A0, A1, A2, A3, SP+10, SP+14=2, SP+18=1 - 106700 7F0D1BD0 - accepts: A0=p->DL, A1=(float), A2=red, A3=green, SP+10=blue, SP+14=, SP+18= - 7F0D1DCC - - 7F0D1E98 - -106B30: 7F0D2000 - - 106E50 7F0D2320 - 106EB0 7F0D2380 NULL-> [8004EB00] - 106EBC 7F0D238C - 106F78 7F0D2448 - 106F94 7F0D2464 ???; display list generator - 107048 7F0D2518 ???; display list generator - 107250 7F0D2720 V0= primary music track for stage A0 - accepts: A0=stage# - 107378 7F0D2848 V0= secondary music track for stage A0 - accepts: A0=stage# - 1073C0 7F0D2890 V0= x music track for stage A0 - accepts: A0=stage# -# Spectrum emulation - 107410 7F0D28E0 ???; Spectrum-related - 1075B4 7F0D2A84 ???; Spectrum-related, tied to game execution - accepts: A0=p->spectrum.ROMs.game, A1=p->buffer[6000] - 1077B4 7F0D2C84 Spectrum: read player1's controller input as Kempston joystick - 107AF4 7F0D2FC4 initialize Spectrum and load game index #A0 - accepts: A0=game# (only permits 0-4, not 0-9) - 107EA4 7F0D3374 run loaded Spectrum game - calls: 7F0D2C84; 7F0D382C; 7F0D2A84: A0=p->spectrum.ROMs.game, A1=p->spectrum.rdram - 107EE4 7F0D33B4 Spectrum: draw screen - accepts: A0=p->display list - 108208 7F0D36D8 Spectrum: V0=input from port A2 using register A1 - accepts: A0=SP (unused), A1=key register, A2=port (1F=controller, FE=keyboard) - 108304 7F0D37D4 unconditional return - 10830C 7F0D37DC Spectrum: V0= A3 written to port A2 or 0 if not required; A2 must be port 254 - accepts: A0=#cycles (unused), A1=spec.A (unused), A2=port# (must be FE), A3=value (nibble) - 10835C 7F0D382C Spectrum: processor emulation - uses TLB pointers at 8005C12C - 7F0D3A3C 00: NOP - 7F0D3A4C 01: LD BC,nn - 7F0D3A8C 02: LD (BC),A - 7F0D3B6C 03: INC BC - 7F0D3B98 04: INC B - 7F0D3BFC 05: DEC B - 7F0D3C64 06: LD B,n - 7F0D3C90 07: RLCA ;rotate left through carry accumulator - 7F0D3CC8 08: EX AF,AF' ;exchange register pair AF to shadow AF - 7F0D3CF8 09: ADD HL,BC - 7F0D3E18 0A: LD A,(BC) - 7F0D3E40 0B: DEC BC - 7F0D3E74 0C: INC C - 7F0D3ED8 0D: DEC C - 7F0D3F40 0E: LD C,n - 7F0D3F6C 0F: RRCA ;rotate right circular accumulator - 7F0D3FAC 10: DJNZ d ;decrement jump nonzero -108B30: 7F0D4000 - 7F0D400C 11: LD DE,nn - 7F0D404C 12: LD (DE),A - 7F0D412C 13: INC DE - 7F0D4158 14: INC D - 7F0D41BC 15: DEC D - 7F0D4224 16: LD D,n - 7F0D4250 17: RLA ;rotate left accumulator - 7F0D4294 18: JR n - 7F0D42D0 19: ADD HL,DE - 7F0D43F0 1A: LD A,(DE) - 7F0D4418 1B: DEC DE - 7F0D444C 1C: INC E - 7F0D44B0 1D: DEC E - 7F0D4518 1E: LD E,n - 7F0D4544 1F: RRA ;rotate right accumulator - 7F0D4588 20: JR NZ,n - 7F0D45E0 21: LD HL,nn - 7F0D4698 22: LD (nn),HL - 7F0D4B18 23: INC HL - 7F0D4B78 24: INC H - 7F0D4CAC 25: DEC H - 7F0D4DEC 26: LD H,n - 7F0D4E88 27: DAA ;decimal adjust accumulator - 7F0D5014 28: JR Z,n - 7F0D5068 29: ADD HL,HL - 7F0D53E0 2A: LD HL,(nn) - 7F0D549C 2B: DEC HL - 7F0D5504 2C: INC L - 7F0D5628 2D: DEC L - 7F0D5758 2E: LD L,n - 7F0D57EC 2F: CPL ;complement accumulator - 7F0D581C 30: JR NC,n - 7F0D5874 31: LD SP,nn - 7F0D58B4 32: LD (nn),A - 7F0D5994 33: INC SP - 7F0D59B0 34: INC (HL) - 7F0D5B44 35: DEC (HL) - 7F0D5CE4 36: LD (HL),n - 7F0D5E2C 37: SCF ;set carry flag - 7F0D5E54 38: JR C,n - 7F0D5EA8 39: ADD HL,SP - 7F0D5FD8 3A: LD A,(nn) -10AB30: 7F0D6000 - 7F0D6024 3B: DEC SP - 7F0D6040 3C: INC A - 7F0D60A4 3D: DEC A - 7F0D610C 3E: LD A,n - 7F0D6138 3F: CCF ;complement carry flag - 7F0D6174 40: LD B,B - 7F0D6184 41: LD B,C - 7F0D6198 42: LD B,D - 7F0D61AC 43: LD B,E - 7F0D61C0 44: LD B,H - 7F0D620C 45: LD B,L - 7F0D6258 46: LD B,(HL) - 7F0D62E8 47: LD B,A - 7F0D62FC 48: LD C,B - 7F0D6310 49: LD C,C - 7F0D6320 4A: LD C,D - 7F0D6334 4B: LD C,E - 7F0D6348 4C: LD C,H - 7F0D6394 4D: LD C,L - 7F0D63E0 4E: LD C,(HL) - 7F0D6470 4F: LD C,A - 7F0D6484 50: LD D,B - 7F0D6498 51: LD D,C - 7F0D64AC 52: LD D,D - 7F0D64BC 53: LD D,E - 7F0D64D0 54: LD D,H - 7F0D651C 55: LD D,L - 7F0D6568 56: LD D,(HL) - 7F0D65F8 57: LD D,A - 7F0D660C 58: LD E,B - 7F0D6620 59: LD E,C - 7F0D6634 5A: LD E,D - 7F0D6648 5B: LD E,E - 7F0D6658 5C: LD E,H - 7F0D66A4 5D: LD E,L - 7F0D66F0 5E: LD E,(HL) - 7F0D6780 5F: LD E,A - 7F0D6794 60: LD H,B - 7F0D67EC 61: LD H,C - 7F0D6844 62: LD H,D - 7F0D689C 63: LD H,E - 7F0D68F4 64: LD H,H - 7F0D6904 65: LD H,L - 7F0D6A18 66: LD H,(HL) - 7F0D6AA8 67: LD H,A - 7F0D6B00 68: LD L,B - 7F0D6B50 69: LD L,C - 7F0D6BA0 6A: LD L,D - 7F0D6BF0 6B: LD L,E - 7F0D6C40 6C: LD L,H - 7F0D6D4C 6D: LD L,L - 7F0D6D5C 6E: LD L,(HL) - 7F0D6DEC 6F: LD L,A - 7F0D6E3C 70: LD (HL),B - 7F0D6F58 71: LD (HL),C - 7F0D7074 72: LD (HL),D - 7F0D7190 73: LD (HL),E - 7F0D72AC 74: LD (HL),H - 7F0D73C8 75: LD (HL),L - 7F0D74E4 76: HALT ;halt (wait for interrupt - 7F0D7524 77: LD (HL),A - 7F0D7640 78: LD A,B - 7F0D7654 79: LD A,C - 7F0D7668 7A: LD A,D - 7F0D767C 7B: LD A,E - 7F0D7690 7C: LD A,H - 7F0D76DC 7D: LD A,L - 7F0D7728 7E: LD A,(HL) - 7F0D77B8 7F: LD A,A - 7F0D77C8 80: ADD A,B - 7F0D7848 81: ADD A,C - 7F0D78C8 82: ADD A,D - 7F0D7948 83: ADD A,E - 7F0D79C8 84: ADD A,H - 7F0D7A84 85: ADD A,L - 7F0D7B40 86: ADD A,(HL) - 7F0D7C3C 87: ADD A,A - 7F0D7CBC 88: ADC A,B - 7F0D7D50 89: ADC A,C - 7F0D7DE4 8A: ADC A,D - 7F0D7E78 8B: ADC A,E - 7F0D7F0C 8C: ADC A,H - 7F0D7FDC 8D: ADC A,L -10CB30: 7F0D8000 - 7F0D80AC 8E: ADC A,(HL) - 7F0D81BC 8F: ADC A,A - 7F0D8250 90: SUB B - 7F0D82CC 91: SUB C - 7F0D8348 92: SUB D - 7F0D83C4 93: SUB E - 7F0D8440 94: SUB H - 7F0D84F8 95: SUB L - 7F0D85B0 96: SUB (HL) - 7F0D86A8 97: SUB A - 7F0D8724 98: SBC A,B - 7F0D87AC 99: SBC A,C - 7F0D8834 9A: SBC A,D - 7F0D88BC 9B: SBC A,E - 7F0D8944 9C: SBC A,H - 7F0D8A08 9D: SBC A,L - 7F0D8ACC 9E: SBC A,(HL) - 7F0D8BD0 9F: SBC A,A - 7F0D8C58 A0: AND B - 7F0D8CA8 A1: AND C - 7F0D8CF8 A2: AND D - 7F0D8D48 A3: AND E - 7F0D8D98 A4: AND H - 7F0D8E2C A5: AND L - 7F0D8EC0 A6: AND (HL) - 7F0D8F90 A7: AND A - 7F0D8FE0 A8: XOR B - 7F0D902C A9: XOR C - 7F0D9078 AA: XOR D - 7F0D90C4 AB: XOR E - 7F0D9110 AC: XOR H - 7F0D91A0 AD: XOR L - 7F0D9230 AE: XOR (HL) - 7F0D92FC AF: XOR A - 7F0D9348 B0: OR B - 7F0D9394 B1: OR C - 7F0D93E0 B2: OR D - 7F0D942C B3: OR E - 7F0D9478 B4: OR H - 7F0D9508 B5: OR L - 7F0D9598 B6: OR (HL) - 7F0D9664 B7: OR A - 7F0D96B0 B8: CP B - 7F0D9730 B9: CP C - 7F0D97B0 BA: CP D - 7F0D9830 BB: CP E - 7F0D98B0 BC: CP H - 7F0D996C BD: CP L - 7F0D9A28 BE: CP (HL) - 7F0D9B24 BF: CP A - 7F0D9BA4 C0: RET NZ - 7F0D9BF4 C1: POP BC - 7F0D9C24 C2: JP NZ,nn - 7F0D9C74 C3: JP nn - 7F0D9CAC C4: CALL NZ,nn - 7F0D9E94 C5: PUSH BC - 7F0D9FFC C6: ADD A,n -10EB30: 7F0DA000 - 7F0DA098 C7: RST 00 ;restart 0: normal start - 7F0DA228 C8: RET Z - 7F0DA278 C9: RET - 7F0DA2C0 CA: JP Z,nn - 7F0DA310 CB - uses TLB pointer table at 8005C52C - 7F0DA414 CB.00: RLC B ;rotate left through carry - 7F0DA464 CB.01: RLC C - 7F0DA4B4 CB.02: RLC D - 7F0DA504 CB.03: RLC E - 7F0DA554 CB.04: RLC H - 7F0DA5A4 CB.05: RLC L - 7F0DA5F4 CB.06: RLC (HL) - 7F0DA718 CB.07: RLC A - 7F0DA768 CB.08: RRC B ;rotate right circular - 7F0DA7BC CB.09: RRC C - 7F0DA810 CB.0A: RRC D - 7F0DA864 CB.0B: RRC E - 7F0DA8B8 CB.0C: RRC H - 7F0DA90C CB.0D: RRC L - 7F0DA960 CB.0E: RRC (HL) - 7F0DAA8C CB.0F: RRC A - 7F0DAAE0 CB.10: RL B ;rotate left - 7F0DAB34 CB.11: RL C - 7F0DAB88 CB.12: RL D - 7F0DABDC CB.13: RL E - 7F0DAC30 CB.14: RL H - 7F0DAC84 CB.15: RL L - 7F0DACD8 CB.16: RL (HL) - 7F0DAE00 CB.17: RL A - 7F0DAE54 CB.18: RR B ;rotate right - 7F0DAEA8 CB.19: RR C - 7F0DAEFC CB.1A: RR D - 7F0DAF50 CB.1B: RR E - 7F0DAFA4 CB.1C: RR H - 7F0DAFF8 CB.1D: RR L - 7F0DB04C CB.1E: RR (HL) - 7F0DB174 CB.1F: RR A - 7F0DB1C8 CB.20: SLA B ;shift left arithmetic - 7F0DB210 CB.21: SLA C - 7F0DB258 CB.22: SLA D - 7F0DB2A0 CB.23: SLA E - 7F0DB2E8 CB.24: SLA H - 7F0DB330 CB.25: SLA L - 7F0DB378 CB.26: SLA (HL) - 7F0DB498 CB.27: SLA A - 7F0DB4E0 CB.28: SRA B ;shift right arithmetic - 7F0DB530 CB.29: SRA C - 7F0DB580 CB.2A: SRA D - 7F0DB5D0 CB.2B: SRA E - 7F0DB620 CB.2C: SRA H - 7F0DB670 CB.2D: SRA L - 7F0DB6C0 CB.2E: SRA (HL) - 7F0DB7E0 CB.2F: SRA A - 7F0DB830 CB.30: SLS B - 7F0DB87C CB.31: SLS C - 7F0DB8C8 CB.32: SLS D - 7F0DB914 CB.33: SLS E - 7F0DB960 CB.34: SLS H - 7F0DB9AC CB.35: SLS L - 7F0DB9F8 CB.36: SLS (HL) - 7F0DBB1C CB.37: SLS A - 7F0DBB68 CB.38: SRL B ;shift right logical - 7F0DBBB0 CB.39: SRL C - 7F0DBBF8 CB.3A: SRL D - 7F0DBC40 CB.3B: SRL E - 7F0DBC88 CB.3C: SRL H - 7F0DBCD0 CB.3D: SRL L - 7F0DBD18 CB.3E: SRL (HL) - 7F0DBE38 CB.3F: SRL A - 7F0DBE80 CB.40-FF - CB.40-7F BIT cmds use TLB pointer table at 8005C66C - 7F0DBF18 BIT x,B - 7F0DBF60 BIT x,C - 7F0DBFA8 BIT x,D - 7F0DBFF0 BIT x,E -110B30: 7F0DC000 - 7F0DC038 BIT x,H - 7F0DC080 BIT x,L - 7F0DC0C8 BIT x,(HL) - 7F0DC1E4 BIT x,A - CB.80-BF RES cmds use TLB pointer table at 8005C64C - 7F0DC22C RES x,B - 7F0DC24C RES x,C - 7F0DC26C RES x,D - 7F0DC28C RES x,E - 7F0DC2AC RES x,H - 7F0DC2CC RES x,L - 7F0DC2EC RES x,(HL) - 7F0DC3D4 RES x,A - CB.C0-FF SET cmds use TLB pointer table at 8005C62C - 7F0DC3F4 SET x,B - 7F0DC410 SET x,C - 7F0DC42C SET x,D - 7F0DC448 SET x,E - 7F0DC464 SET x,H - 7F0DC480 SET x,L - 7F0DC49C SET x,(HL) - 7F0DC580 SET x,A - 7F0DC5FC CC: CALL Z,nn - 7F0DC7E4 CD: CALL nn - 7F0DC9B4 CE: ADC A,n - 7F0DCA64 CF: RST 08 ;retsart 8: error restart - 7F0DCBF8 D0: RET NC - 7F0DCC48 D1: POP DE - 7F0DCC78 D2: JP NC,nn - 7F0DCCC8 D3: OUT (n),A - 7F0DCD14 D4: CALL NC,nn - 7F0DCEFC D5: PUSH DE - 7F0DD064 D6: SUB n - 7F0DD0FC D7: RST 10 ;restart 10: print a char restart - 7F0DD290 D8: RET C - 7F0DD2E0 D9: EXX ;exchange alternate registers - 7F0DD350 DA: JP C,nn - 7F0DD3A0 DB: IN A,(n) - 7F0DD3F4 DC: CALL C,nn - 7F0DD5DC DD ;next HL opcode sets IX - 7F0DD5F8 DE: SBC A,n - 7F0DD69C DF: RST 18 ;restart 18: collect char restart - 7F0DD830 E0: RET PO - 7F0DD880 E1: POP HL - 7F0DD92C E2: JP PO,nn - 7F0DD97C E3: EX (SP),HL - 7F0DDE6C E4: CALL PO,nn -112B30: 7F0DE000 - 7F0DE054 E5: PUSH HL - 7F0DE4D0 E6: AND n - 7F0DE540 E7: RST 20 ;restart 20: collect next char restart - 7F0DE6D4 E8: RET PE - 7F0DE724 E9: JP (HL) - 7F0DE774 EA: JP PE,nn - 7F0DE7C4 EB: EX DE,HL - 7F0DE7EC EC: CALL PE,nn - 7F0DE9D4 ED - ED.40-7E cmds use TLB pointer table at 8005C71C - 7F0DEA68 ED.40: IN B,(C) - 7F0DEAD8 ED.41: OUT (C),B - 7F0DEB08 ED.42: SBC HL,BC - 7F0DEBDC ED.43: LD (NN),BC - 7F0DED68 ED.44: NEG - 7F0DEDCC ED.45: RETN ;return from NMI - 7F0DEE1C ED.46: IM 0 - 7F0DEE30 ED.47: LD I,A - 7F0DEE44 ED.48: IN C,(C) - 7F0DEEB4 ED.49: OUT (C),C - 7F0DEEE4 ED.4A: ADC HL,BC - 7F0DEFB0 ED.4B: LD BC,(NN) - 7F0DF000 ED.4C: [NEG] - 7F0DF064 ED.4D: RETI ;return from interrupt - 7F0DF0AC ED.4E: [IM 0] - 7F0DF0C4 ED.4F: LD R,A - 7F0DF0E0 ED.50: IN D,(C) - 7F0DF150 ED.51: OUT (C),D - 7F0DF180 ED.52: SBC HL,DE - 7F0DF254 ED.53: LD (NN),DE - 7F0DF3E0 ED.54: [NEG] - 7F0DF444 ED.55: [RETN] - 7F0DF48C ED.56: IM 1 - 7F0DF4A4 ED.57: LD A,I - 7F0DF4E8 ED.58: IN E,(C) - 7F0DF558 ED.59: OUT (C),E - 7F0DF588 ED.5A: ADC HL,DE - 7F0DF654 ED.5B: LD DE,(nn) - 7F0DF6A4 ED.5C: [NEG] - 7F0DF708 ED.5D: [RETI] - 7F0DF750 ED.5E: IM 2 - 7F0DF768 ED.5F: LD A,R - 7F0DF7C8 ED.60: IN H,(C) - 7F0DF838 ED.61: OUT (C),H - 7F0DF868 ED.62: SBC HL,HL - 7F0DF93C ED.63: [LD (nn),HL] - 7F0DFAC8 ED.64: [NEG] - 7F0DFB2C ED.65: [RETN] - 7F0DFB74 ED.66: [IM 0] - 7F0DFB88 ED.67: RRD ;rotate-right-digit - 7F0DFCE8 ED.68: IN L,(C) - 7F0DFD58 ED.69: OUT (C),L - 7F0DFD88 ED.6A: ADC HL,HL - 7F0DFE54 ED.6B: [LD HL,(nn)] - 7F0DFEA4 ED.6C: [NEG] - 7F0DFF08 ED.6D: [RETI] - 7F0DFF50 ED.6E: [IM 0] - 7F0DFF68 ED.6F: RLD -114B30: 7F0E0000 - 7F0E00C8 ED.70: IN (C) - 7F0E013C ED.71: OUT (C),0 - 7F0E016C ED.72: SBC HL,SP - 7F0E022C ED.73: LD (nn),SP - 7F0E03DC ED.74: [NEG] - 7F0E0440 ED.75: [RETN] - 7F0E0488 ED.76: [IM 1] - 7F0E04A0 ED.78: IN A,(C) - 7F0E0510 ED.79: OUT (C),A - 7F0E0540 ED.7A: ADC HL,SP - 7F0E05F8 ED.7B: LD SP,(nn) - 7F0E0658 ED.7C: [NEG] - 7F0E06BC ED.7D: [RETI] - 7F0E0704 ED.7E: [IM 2] - ED.A0-BB cmds use TLB pointer table at 8005C6AC - 7F0E071C ED.A0: LDI ;load-increment (BC=counter, DE=target, HL=source) - 7F0E08A0 ED.A1: CPI ;compare-increment (BC=counter, DE=target, HL=source) - 7F0E09A0 ED.A2: INI ;input-increment (BC=counter, HL=target) - 7F0E0B08 ED.A3: OUTI ;output-increment (BC=counter, HL=target) - 7F0E0B9C ED.A8: LDD ;load-decrement (BC=counter, DE=target, HL=source) - 7F0E0D30 ED.A9: CPD ;compare-decrement (BC=counter, DE=target, HL=source) - 7F0E0E38 ED.AA: IND ;input-decrement (BC=counter, HL=target) - 7F0E0FAC ED.AB: OUTD ;output-decrement (BC=counter, HL=target) - 7F0E1048 ED.B0: LDIR ;load-increment-repeat>0 (BC=counter, DE=target, HL=source) - 7F0E11EC ED.B1: CPIR ;compare-increment-repeat>0 (BC=counter, DE=target, HL=source) - 7F0E1310 ED.B2: INIR ;input-increment-repeat>0 (BC=counter, HL=target) - 7F0E1494 ED.B3: OTIR ;output-increment-repeat>0 (BC=counter, HL=target) - 7F0E1544 ED.B8: LDDR ;load-decrement-repeat>0 (BC=counter, DE=target, HL=source) - 7F0E16F8 ED.B9: CPDR ;compare-decrement-repeat>0 (BC=counter, DE=target, HL=source) - 7F0E1824 ED.BA: INDR ;input-decrement-repeat>0 (BC=counter, HL=target) - 7F0E19B4 ED.BB: OTDR ;output-decrement-repeat>0 (BC=counter, HL=target) - 7F0E1A7C EE: XOR n - 7F0E1AE8 EF: RST 28 ;restart 28: calculator restart - 7F0E1C7C F0: RET P - 7F0E1CCC F1: POP AF - 7F0E1CFC F2: JP P,nn - 7F0E1D4C F3: DI ;disable interrupts - 7F0E1D68 F4: CALL P,nn - 7F0E1F50 F5: PUSH AF -116B30: 7F0E2000 - 7F0E20B8 F6: OR n - 7F0E2124 F7: RST 30 ;restart 30: mak BC spaces restart - 7F0E22B8 F8: RET M - 7F0E2308 F9: LD SP,HL - 7F0E2358 FA: JP M,nn - 7F0E23A8 FB: EI ;enable interrupts - 7F0E23CC FC: CALL M,nn - 7F0E25B4 FD ;next HL opcode sets IY - 7F0E25D0 FE: CP n - 7F0E266C FF: RST 38 ;restart 38: maskable interrupt restart - 117878 7F0E2D48 - :possibly actual end of TLB range: - 117880-1178A0 DL snippet: vertex colours + shade - 1178A0-1178C0 DL snippet: vertex colours + shade + depth buffer - 1178C0-117938 DL snippet: blender options for font - 117938-123040 8xxx japanese font - 123040-124AC0 Cxxx japanese font - 124AC0- animations - 17BD48 unknown. 0x3C entries @ 0x44 each - 17CD38 - -234B30: 7F200000 - :end possible indexed TLB entry format: -24EB30: 7F21A000 - :end registered in TLB: diff --git a/notes/GE Documentation/Tools/GE-text-tools.zip b/notes/GE Documentation/Tools/GE-text-tools.zip deleted file mode 100644 index 8269a04..0000000 Binary files a/notes/GE Documentation/Tools/GE-text-tools.zip and /dev/null differ diff --git a/notes/GE Documentation/Tools/GEdemo.zip b/notes/GE Documentation/Tools/GEdemo.zip deleted file mode 100644 index b13bce6..0000000 Binary files a/notes/GE Documentation/Tools/GEdemo.zip and /dev/null differ diff --git a/notes/GE Documentation/Tools/GEfonts.zip b/notes/GE Documentation/Tools/GEfonts.zip deleted file mode 100644 index 0298265..0000000 Binary files a/notes/GE Documentation/Tools/GEfonts.zip and /dev/null differ diff --git a/notes/GE Documentation/Tools/Goggles.zip b/notes/GE Documentation/Tools/Goggles.zip deleted file mode 100644 index f85b738..0000000 Binary files a/notes/GE Documentation/Tools/Goggles.zip and /dev/null differ diff --git a/notes/GE Documentation/Tools/MoniText.zip b/notes/GE Documentation/Tools/MoniText.zip deleted file mode 100644 index cba71f9..0000000 Binary files a/notes/GE Documentation/Tools/MoniText.zip and /dev/null differ diff --git a/notes/GE Documentation/address ranges.txt b/notes/GE Documentation/address ranges.txt deleted file mode 100644 index 8b46e1d..0000000 --- a/notes/GE Documentation/address ranges.txt +++ /dev/null @@ -1,1917 +0,0 @@ -Listed are fixed areas of memory and registers for functions. -------------------------------------------------------------- -80000300 display type 0:PAL, 1:NTSC, 2:MPAL - -80010030 split screen mode 0=hor; 1=vert - -# Start 21990 -80020D90 RSP instructions -80020E60 - -800214AD partial screen modes 0=1/2; 1=1/4 - -80023044 -80023048 hardware address for cart (?) -8002304C debug handler code/name table -8002307C - -80023094 stderr: enabled -80023098 stderr: activated -8002309C stderr: permitted -800230A0 - -80023224 -80023228 -8002322C -80023230 counter for frames - -80023244 buffer for temp image data; ie. on legal screen -8002329C -800232A0 -800232A4 video1.settings -800232A8 video2.settings -800232AC colour output mode. used by RGBA conversion routines - -800232B4 -800232B8 -800232BC - -800232C4 jpeg 16bit grab # [70004758] -800232C8 jpeg 32bit grab # [700048D4] -800232CC rgb 16bit grab # [70004A60] -800232D0 rgb 32bit grab # [70004BB4] - -80023304 debugger: processor error table -800236DC debugger: hardcoded pointers to thread SP allocations -800236F0 debugger: hardcoded pointers to thread SP allocations -80023704 debugger: hardcoded pointers to thread SP allocations -80023718 stderr: display buffer -80024000 stderr: printable font bitcode -8002417C p->video buffer 1 -80024180 p->video buffer 2 - - -800241A4 debug flag (FALSE/TRUE); can trigger stage update -800241A8 stage# - offset for #players, used by fog, mem allocations, etc. -800241AC temp copy of -m value amount of generally allocatable memory, forced -800241B0 temp copy of -ma value amount of memory dedicated to room models, offset to BONDdata -800241B4 debug: "show mem use" flag -800241B8 debug: "show mem bars" flag -800241BC stage memory allocation table -800242EC - -800242FC loaded stage# -80024300 1- activate debug feature parsing (interface for debug menu and certain linked debug options) -80024304 -80024308 -8002430C -80024310 -80024314 -80024318 -8002431C - -80024324 "taskgrab" ram dump #, used at 700067E0 - -80024334 music: track# -80024338 music: -80024340 music: -80024358 music: -800243D8 - -80024404 [tied to memory management] - -80024460 seed for random value -80024464 current random value -80024470 strstr: #strings -80024474 strstr: p->current string# -80024478-4518 strstr: p->each substring; 0x28 substrings maximum -80024518 start resource - -80024FA0 debug: menu x position offset -80024FA4 debug: menu y position offset -80024FA8 debug: menu x text position -80024FAC debug: menu y text position -80024FB0 stdout: display list -80025030 stdout: debug menu screen display buffer -80026610 stdout: primary color table -80026710 stdout: enviroment color table -80026810 stdout: colors in color tables -80026814 pointers to {1B}[m values (pos. part of vi_debug) -80026898 dlend display list command -800268A0 blank C0- image expansion command -800268A8 stdout: text primary colour -800268B0 stdout: text enviroment colour -800268B4 -800268B8 stdout: % display list commands remaining in draw buffer -800268BC - -800268C4 p->current point in controller input index - Each index 0x18 each, 0x6 per controller. - +1E0: index for previous button state - +1F0: index for current button state -800268C8 -800268CC -800268D0 flags indicating controllers plugged in -800268D4 -800268D8 pl1: 1 if rumble pak ready or detected -800268DC pl2: 1 if rumble pak ready or detected -800268E0 pl3: 1 if rumble pak ready or detected -800268E4 pl4: 1 if rumble pak ready or detected -800268E8 pl1: rumble/unrumble state (alternate on/off) -800268EC pl2: rumble/unrumble state (alternate on/off) -800268F0 pl3: rumble/unrumble state (alternate on/off) -800268F4 pl4: rumble/unrumble state (alternate on/off) -800268F8 pl1: rumble time (ms) -800268FC pl2: rumble time (ms) -80026900 pl3: rumble time (ms) -80026904 pl4: rumble time (ms) -80026908 pl1: shot fired or rumble on... -8002690C pl2: shot fired or rumble on... -80026910 pl3: shot fired or rumble on... -80026914 pl4: shot fired or rumble on... - -80026924 TRUE disables rumble -80026928 p->TLB function to handle ramrom record - -80026930 pl1: incremented on controller presence failure (left/right) -80026934 pl2: incremented on controller presence failure (left/right) -80026938 pl3: incremented on controller presence failure (left/right) -8002693C pl4: incremented on controller presence failure (left/right) -80026940 pl1: incremented on controller presence failure (up/down) -80026944 pl2: incremented on controller presence failure (up/down) -80026948 pl3: incremented on controller presence failure (up/down) -8002694C pl4: incremented on controller presence failure (up/down) -80026950 pl1: incremented on controller presence failure (held) -80026954 pl2: incremented on controller presence failure (held) -80026958 pl3: incremented on controller presence failure (held) -8002695C pl4: incremented on controller presence failure (held) -80026960 pl1: incremented on controller presence failure (pressed) -80026964 pl2: incremented on controller presence failure (pressed) -80026968 pl3: incremented on controller presence failure (pressed) -8002696C pl4: incremented on controller presence failure (pressed) -80026970 - -800269C0 VI settings for display modes 0-29 -800276E0 - -80027730 -80027734 - -80027740 stdout: background alpha -80027760 -80027764 stdout: background alpha -80027788 - -800277C0 - -800277D0 eye intro drift regulator -80027FD0 - -80027FE0 buffer -80028040 p->buffer 1 -80028044 p->buffer 2 -80028048 - -80028050 ???; table of entries related to sound, 0x28 each -800281E0 - -800282F0 lower-case hex characters -80028304 upper-case hex characters -80028318 - -80028320 -80028370 -800283C0 - -800283D0 debug handler names -80028400 TLB pointers at 7000159C -80028420 speed display strings -80028480 -80028490 debug: image grab console commands -800287B0 debug: deb_c_debug error messages -80028A70 allocation size strings for stages -800290C0 "-level_" command line option, activates debug parsing on hit -800290C8 default memory allocation string -800290FC "-m" memory allocation keyword: search -80029100 "-m" memory allocation keyword: parse -80029104 "-level_" string keyword: search -8002910C "-level_" string keyword: parse -80029114 "-hard" string keyword: search -8002911C "-hard" string keyword: parse -80029124 "-hard" string keyword: parse -8002912C "-ma" memory allocation keyword: search -80029130 "-ma" memory allocation keyword: parse -80029134 memory dump: resource template "u64.taskgrab.%d.core" -8002914C boss_c_debug -80029160 TLB pointers at 70007E80 -800291A0 memp_c_debug -800291B0 "-mf" memory allocation keyword: search -800291B4 "-mf" memory allocation keyword: parse -800291B8 "-ml" memory allocation keyword: search -800291BC "-ml" memory allocation keyword: parse -800291C0 "-me" memory allocation keyword: search -800291C4 "-me" memory allocation keyword: parse -800291C8 -800291D0 mema_c_debug -800291E0 debug memory display: "%d" allocation amount template -800291E4 debug memory display: "..." unable to display allocation amount -800291E8 "[%d]" default strtok string -800291F0 -800291F4 command line: "-d" debug support keyword -800291F8 command line: "-s" disable sound keyword -800291FC command line: "-j" japanese language support keyword -80029200 vi_c_debug -80029210 -80029390 joy_c_debug -800293A0 MI Interrupt Reg values -80029420 (double) -80029428 (double) -80029430 (double) -80029438 -80029440 offsets for selecting TLB handler for particular interrupts -80029460 TLB pointers to interrupt handlers -80029484 -80029490 TLB pointers used by 7001123C -80029614 TLB pointers used by 70011A6C -800296C4 - -800296F0 h (short), l (long), L (long long) c-string modifiers -800296F4 space, +, -, #, 0 c-string modifiers -800296FC 1<<0 through 1<<4 -80029714 TLB pointers used by 700138F0 -800297E4 - -80029830 TLB pointers used by 70019480 -80029878 - -80029890 debug: assertion fault string templates -80029964 -80029968 TLB pointers used by 7001AE5C -800299AC -800299FC -80029A50 TLB pointers used by 7001C45C -80029BD4 TLB pointers used by 7001C45C -80029C28 TLB pointers used by 7001CC7C -80029C88 - -80029CD8 float debug: "NaN" -80029CDC float debug: "Inf" -80029CE0 float debug: "0" -80029CE4 - -80029CF0 TLB pointers used by 7001E610 -80029D10 TLB pointers used by 7001FFA8 -80029D30 - -80029D6C animation table pointers (1) -8002A04C animation table pointers (2) -8002A05C -8002A060 ???; 0xC each used as a temp buffer for copying global action block types -8002A234 -8002A238 -8002A23C debug weapon load: list of weapon models loaded on execute -8002A25C -8002A260 Monitor image animation controller -8002A3BC - -8002A3D0 initialization values for item control blocks in BONDdata -8002A778 - -8002A7D0 - -8002A860 RGBA table -8002A870 - -8002A8A0 intro: eye timer/counter -8002A8A4 intro: state of red bleeding animation -8002A8A8 - -8002A8C0 current menu -8002A8C4 update to given menu -8002A8C8 -8002A8CC timer on folder select screen (resets at 30sec.) -8002A8D0 1- folder tab 1 selected (usually 'next' or 'start') -8002A8D4 1- folder tab 2 selected -8002A8D8 1- folder tab 3 selected (usually 'back') -8002A8DC 1- highlight folder tab 1 -8002A8E0 1- highlight folder tab 2 -8002A8E4 1- highlight folder tab 3 -8002A8E8 folder # (save slot selected) -8002A8EC copy of folder # (save slot previously selected) -8002A8F0 Mode: -1 intros, 0-solo, 1-multi, 2-cheats. 7F00D558 sets return after stage -8002A8F4 stage selected -8002A8F8 selected mission briefing page (solo stage menu numbering, inc. groups) -8002A8FC difficulty (-1-multi, 0-agent, 1-secret, 2-00, 3-007) -8002A900 1- display cheat select mission -8002A904 1- display cheat multi -8002A908 (float) horizontal screen position on menus -8002A90C (float) vertical screen position on menus -8002A910 last menu briefing page (menu 0A) -8002A914 current menu briefing page (menu 0A) -8002A918 icon on folder select screen (0-sight, 1-copy, 2-delete) -8002A91C folder selected for deletion or -1 -8002A920 delete folder minimenu selected option (0-confirm : 1-cancel) -8002A924 0-failed; 1-aborted -8002A928 0-aborted/failed; 1-killed in action -8002A92C TRUE if first time on legal screen (FALSE enables quick advance) -8002A930 TRUE if first time through menus -8002A934 keypress.prev -8002A938 -8002A93C -8002A940 screen size; 0:320x240, 1:440x330 -8002A944 -8002A948 True if emulating Spectrum -8002A94C True if cheat menu available -8002A950 p->DL target for nintendologo, goldeneyelogo, and walletbond object data -8002A954 p->video buffer for menus (stderr?) -8002A958 -8002A95C p->folder object instance -8002A960 -8002A964 -8002A968 -8002A96C -8002A970 RGBA values -8002A990 - -8002A9A0 (float) 007: "Enemy reaction speed" setting -8002A9A4 (float) 007: "Enemy health" setting -8002A9A8 (float) 007: "Enemy accuracy" setting -8002A9AC (float) 007: "Enemy damage" setting -8002A9B0 font: brown palette for japanese font -8002A9C0 - -8002A9CC legal screen text entries -8002AABC -8002AB94 - -8002ABC4 (float) folder select: copy left bound -8002ABC8 (float) folder select: copy upper bound -8002ABCC (float) folder select: copy right bound -8002ABD0 (float) folder select: copy lower bound -8002ABD4 (float) folder select: erase left bound -8002ABD8 (float) folder select: erase upper bound -8002ABDC (float) folder select: erase right bound -8002ABE0 (float) folder select: erase lower bound -8002ABE4 solo missions and briefings -8002AF2C ???; used by folder select constructor -8002AF38 ???; used by folder select constructor -8002AF44 ???; used by folder select -8002AF84 - -8002AFB4-D0 ???; used by MP character select -8002AFD0-E4 cursor xpos table for mission select slots -8002AFE4-F4 cursor ypos table for mission select slots -8002AFF4 MP game length settings -8002B054 MP scenario select and player restrictions -8002B074 MP stage select menu -8002B194 MP #selectable characters -8002B198 MP character select menu options -8002B498 MP handicap menu options -8002B4F0 MP controller configuration menu options -8002B510 MP sight & aim settings -8002B520 # players selected on MP menu -8002B524 player1 MP character -8002B528 player2 MP character -8002B52C player3 MP character -8002B530 player4 MP character -8002B534 MP stage selected (0-B: Random <-> Egypt) -8002B538 game length -8002B53C aim settings -8002B540 scenario -8002B544 unlock stage select (1-edit; 0-locked) -8002B548 unlock game length -8002B54C unlock characters -8002B550 unlock weapon select -8002B554 unlock health -8002B558 unlock control style -8002B55C unlock aim adjustment -8002B560 -8002B564 solo mission target times -8002B5DC -8002B5E0 -8002B5E4 current option hovered on MP menu -8002B5E8 do not play intro movie after actors -8002B5EC randomly-selected intro animation -8002B5F0 intro animation count -8002B5F4 -8002B5F8 -8002B5FC if TRUE, actor intros play full character list -8002B600 intro character table -8002B8BC intro animation table -8002BA2C -8002BA30 -8002BA34 -8002BA38 intro rifle table -8002BA50 intro pistol table -8002BA78 -8002BA7C -8002BA84 -8002BA90 -8002BA9C -8002BADC - -8002BAF0 50% primary colors -8002BB00 - -8002BB30 red screen animations -8002C50C -8002C510 eeprom 1 selected Bond actor -8002C514 eeprom 2 selected Bond actor -8002C518 eeprom 3 selected Bond actor -8002C51C eeprom 4 selected Bond actor -8002C520 various eeprom reset/init samples -8002C900 animation rate -8002C904 - -8002C940 ???; tied to animations -8002CC5C debug: "show patrols" flag -8002CC60 player 1 guard ID -8002CC64 guard data pointer -8002CC68 #guard - -8002CD00 # random bodies -8002CD04 # male heads -8002CD08 # female heads -8002CD0C random body table -8002CDB8 random male head table -8002CE20 random female head table -8002CE34 current random body -8002CE38 current random male head -8002CE3C current random female head -8002CE40 difficulty: (float) AI accuracy modifier -8002CE44 difficulty: (float) AI damage multiplier (value * AI's weapon damage) -8002CE48 difficulty: (float) AI "health" multiplier - damage done by player per shot -8002CE4C difficulty: (float) ??? -8002CE50 difficulty: (float) ??? -8002CE54 struck character animation table -8002E648 explosion death animations -8002E93C group offsets to jump to explosion animations -8002E960 pointer to index of grouped random explosion animations -8002E9A0 basic rifle firing animations -8002ED28 pointers rediecting to rifle animation groups -8002EDA8 basic pistol firing animations -8002F408 pointers rediecting to pistol animation groups -8002F488 basic doubles firing animations -8002F6E0 pointers rediecting to doubles animation groups -8002F760 crouched rifle firing animations -8002F970 pointers rediecting to crouched rifle animation groups -8002F9F0 crouched pistol firing animations -8002FCD8 pointers rediecting to crouched pistol animation groups -8002FD58 crouched doubles firing animations -8002FFF8 pointers rediecting to crouched doubles animation groups -80030078 special firing animations (ie. rolling) for all types -80030660 walk/run for rifle, pistol, doubles, Xdoubles, then strafing -80030978 objective registers -8003097C p->global action buffer -80030980 #global actions (1xxx type) -80030984 - -800309F8 male guard SE when shot -80030A2C female guard SE when shot -80030A34 male guard SE counter -80030A38 female guard SE counter -80030A3C METAL ricochet SE for helmets -80030A44 - -80030AA0 p->object position data for current object -80030AA4 p->object position list first entry (8006 table) -80030AA8 p->object position list final entry -80030AAC difficulty: (float) ??? - -80030AC0 alarm -timer -80030AC4 p->alarm sound effect or NULL -80030AC8 (float) toxic gas sound timer -80030ACC 1- activate gas sound timer -80030AD0 ??? - (float) toxic gas -80030AD4 ??? - (float) toxic gas -80030AD8 ??? - (float) toxic gas - -80030AE0 gas counter -80030AE8 show/hide[1] clock -80030AEC clock on/off[0] -80030AF0 clock -timer -80030AF4 remote mine trigger 1,2,4,8 flags for each player - -80030B14 difficulty: (float) ??? -80030B18 difficulty: (float) ??? -80030B1C difficulty: (float) ??? -80030B20 difficulty: (float) ??? -80030B24 difficulty: (float) ??? -80030B28 difficulty: (float) ammo multiplier -80030B2C throwing knife SE -80030B34 - -80030B74 microcode for monitor animations -80031FD0 - -80032094 blank 07 object -80032114 blank 11 object -80032194 blank 08 explosive object -8003221C blank 08 object -800322A4 - -800322F0 highest valid objective number - -80032440 RGBA values -80032450 - -8003245C - -8003246C ejected cartridge headers and text lookup pointers -80032494 weapon statistics -80033924 watch and equipment menu -80034C9C - -80035EEC ammo totals and HUD positions -80036054 - -80036074 -80036078 - -8003608C ???; p->function - -800360CC ammo on item collection -80036328 - -80036414 -80036418 -8003641C - -80036424 -80036428 resolution(?) (0:140xF0 (78 MP); 1:1B8x14A) -8003642C hires flag (0:off; 1:on - used for cuba) -80036430 -80036434 -80036438 -8003643C state of credits (1=start, 2=finished) -80036440 pointer to credits text to display -80036444 plastique explosions -80036448 1 if in tank -8003644C p->first object being parsed? -80036450 p->current object being parsed - -80036464 (float) tied to tank? SP+DC, used in math -80036468 -8003646C (float) tied to tank? SP+C8 -80036470 -80036474 (float) tied to tank? SP+CC - -80036494 current camera mode. - 0 1st person mode - mp - 1 intro camera - 2 fade-out to swirl - 3 swirl - 4 1st person mode - 5 ??? - used between fadeout and respawn - 6 - 7 camera position (ie. at end) - 8 1st person (no control - possibly end of stage) - 9 mp camera! Don't get your hopes up, can't trigger. -set to 3 for fade-in, 2 to restart the swirl animation, 1 to do the cameras -80036498 1- move around after cinema scene -8003649C -800364A0 -800364A4 (float) -800364A8 -800364AC p->first command in intro rotating camera (03) -800364B0 -800364B4 -800364B8 p->last 06 intro camera entry -800364BC # 06 intro camera entries -800364C0 p->randomly selected 06 intro camera entry -800364C4 1=visible to guards (solo invisibility=0) -800364C8 1=object collisions (Bond Phase=0) -800364CC - -800364D8 player death animation list -8003650C total player death animations -80036510 -80036514 selected stage intro animation -80036518 stage intro animation table -800365A8 watch transition time -800365AC PP7 08 object copied to stack during player creation -80036634 - -80036898 status bar text buffer index -8003689C display status bar - queued number of items to display (max=5, disabled=0) - display timer is 11DC offset of BONDData (unlike upper text window's timer) -800368A0 copy of 1st font table -800368A4 copy of second font table -800368A8 upper text buffer index -800368AC display upper text window - queued number of items to display (max=2, disabled=0) -800368B0 timer for upper text window -800368B4 -800368B8 debug manpos: cardinal directions and tolerance -800368D8 ???; animation table -80036ACC - -80036B70 debug menu: control mode, copied to control mode buffer at 80036F70 -80036B74 debug menu: p->last group -80036B78 debug menu: p->text pointers -80036B7C debug menu: p->positions -80036B80 debug menu: # groups -80036B84 debug menu: p->groups -80036B88 - -80036BA4 debug menu: column groupings -80036BC8 debug menu: on-screen positions -80036E30 debug menu: text pointers -80036F64 FALSE does not render anything (raster only, I think) default=2 -80036F68 FALSE freezes processing default=2 -80036F6C FALSE limits control to 3D stick only default=2 -80036F70 control mode (default=2) -80036F74 debug: display speed flag -80036F78 debug: draw background flag -80036F7C debug: draw objects flag -80036F80 -80036F84 debug: stan hit flag -80036F88 debug: stan region flag -80036F8C debug: stan problems flag -80036F90 debug: print man pos flag -80036F94 debug: print room loads flag -80036F98 debug: joy2 sky edit flag -80036F9C debug: joy2 hits edit flag -80036FA0 debug: joy2 detail edit flag -80036FA4 debug: explosion info flag -80036FA8 debug: line mode flag -80036FAC debug: 007 flag -80036FB0 debug: agent flag -80036FB4 debug: all flag -80036FB8 debug: character number flag -80036FBC debug: gun watch pos flag -80036FC0 debug: profile flag -80036FC4 debug: grab task flag -80036FC8 debug: show manpos flag -80036FCC debug: turbo mode flag -80036FD0 debug: objectives flag -80036FD4 - -80036FF8 return state of debug menu. 1 sets menu visible, copied to 80024300 -80036FFC debug: grab rgb screenshot flag -80037000 debug: grab jpeg screenshot flag -80037004 - -80037070 default action blocks & table -800374DC - -800374E8 stage setup pointer table -800375D0 object (p...z) headers -8003A050 object archetypes -8003A224 -8003A228 object pointers to header, text string, scale -8003B224 object explosion details -8003C4D0 object archetypes -8003C580 player gait -8003C644 -8003C674 object archetypes -8003C7C0 object (g...z) headers -8003D340 object archetypes -8003D410 object (c...z) headers -8003DE10 character/head table -8003E464 -8003F430 button sequences for button cheat codes -8003F80C button cheat codes -8003FCBC -8003FCC0 linked by 7F09343C when texture 5E4 detected i, 64x64 -8003FD28 linked by 7F09365C when texture 5E7 detected ci, 20x20 -8003FD90 - -8003FDA0 -80040148 - -80040170 explosions: ??? -80040174 -80040178 difficulty: (float) ??? -8004017C smoke data table -80040284 explosion data table -800407C4 explosion: frame display list offsets -80040800 -80040804 current scorch entry# -80040808 current impact entry# -8004080C list of impact image sizes and types - 0x0 4 (float) width - 0x4 4 (float) height - 0x8 1 application type - 0 random dark grey: 00 - 27 - 1 random light grey: FF - D8 - 2 random primary color - 0x9 1 - 0xA 1 -800408FC - -80040920 default vertex data for scorches -80040930 default vertex data for bullet impacts -80040940 - -# solo watch settings page -80040994 selected page -80040998 highlighted controls page selection -8004099C highlighted options page selection -800409A0 briefing page selection -800409A4 abort display selection -800409A8 1-selected highlighted setting -800409AC -800409B0 current scroll position -800409B4 final scroll position -800409B8 highlighted inventory selection -800409BC (float) position of entry in scrolling list -800409C0 0- scroll to entry -800409C4 1- display watch inventory item name -800409C8 (float) -800409CC (float) -800409D0 -800409D4 (float) -800409D8 #control styles available: 8 if 1 controller, 4 otherwise -800409DC control style labels -80040A7C solo watch setting labels -80040A84 look up/down setting -80040A88 auto-aim setting text -80040A90 auto-aim setting -80040A94 aim control setting text -80040A9C aim control setting -80040AA0 sight on-screen setting text -80040AA8 sight on-screen setting -80040AAC look ahead setting text -80040AB4 look ahead setting -80040AB8 ammo on-screen setting text -80040AC0 ammo on-screen setting -80040AC4 screen setting text -80040ACC screen setting -80040AD0 ratio setting text -80040AD8 ratio setting -80040ADC TRUE enables control stick input - -80040AF4 solo watch mission status colour -80040AF8 solo watch mission status colour timer -80040AFC solo watch objective colour -80040B00 solo watch objective colour timer -80040B04 watch static line register; set bitflag to zero to trigger effect -80040B08 - -80040DFC ???; table -80040E38 ???; table -80040E40 ???; table -80040E7C -80040E80 -80040E84 font: text spacing negative increases gap, positive decreases -80040E88 font: orientation nonzero flips vertical (90deg. clockwise) -80040E8C font: #spaces following wordwrap -80040E90 font: negative value does overlap correction? -80040E94 font: texture filter mode: 0-bi-level, 1-average -80040E98 font: x -80040E9C font: y -80040EA0 font: s -80040EA4 font: t -80040EA8 font: 1-allow japanese character lookup -80040EAC font: p->1st font table(S) [@2E63F0 in ROM] -80040EB0 font: p->2nd font table(S) [@2E6694 in ROM] -80040EB4 font: p->1st font table(L) [@2E88A0 in ROM] -80040EB8 font: p->2nd font table(L) [@2E8B44 in ROM] -80040EBC ia16 'palette' for japanese text and window overlay iiaa format -80040EDC ia16 'palette' for japanese text and window overlay iiaa format -80040EFC - -80040F44 (float) ???, multiplier from explosions (tied to stage scale?) -80040F48 -# clipping data: -80040F4C increments for tiles in clipping files -80040F58 calculated address for tile "0000" -80040F5C start of file -80040F60 end of file - -80040FB4 debug: stanlinelog activated flag -80040FB8 - -# room data: -800413F4 (float) -800413F8 (float) -800413FC (float) -80041400 # rooms in stage -80041404 -80041414 room information block -800442F4 max #rooms -800442F8 -800442FC ???; bg-related table -800443C4 - -8004448C stage: bg/clipping/scale table -8004481C - -# global visibility -80044838 ???; cur. room? - -800448A8 ???; global vis. table of 0x14 entries -800448F8 total entries in 800448A8 table -800448FC FALSE if cur.room unconditionally globally visible - -80044940 DL components -80044D88 pointers to DL components -# current sky/enviroment values: -80044DB0 stage ID multiple -80044DB4 -80044DB8 -80044DBC -80044DC0 -80044DC4 (float) -80044DC8 (float) -80044DCC near intensity -80044DD0 far intensity -80044DD4 sky color & cloud tag -80044DD8 (float) cloud repeat -80044DDC sky image table offset -80044DDE RESERVED -80044DE0 (float) clouds: red -80044DE4 (float) clouds: green -80044DE8 (float) clouds: blue -80044DEC -80044DF0 -80044DF4 -80044DF8 -80044DFC -80044E00 -80044E04 -80044E08 -80044E0C -80044E10 stage skies/enviroment table -80045F50 reduced stage skies enviroment table -80046030 # light fixtures -80046034 - -# ROM resources -80046054 ROM resource table -800482D4 # resource entries/final entry - -800482E0 -mgfx allocations for 0-4 players -800482F0 -mvtx allocations for 0-4 players -80048304 display backdrops -80048358 -8004835C -80048360 ???; sent as data for "lv_c_debug" debug.notice -80048364 stage#, used to grab music track -80048368 -8004836C current music track -80048370 -80048374 part of a monitor image timer (used in a scewy FPS control code) -80048378 (float) multiplier used in a monitor image rotation routine as well as player motion calculations... -8004837C ms current of some sort. -80048380 music??? -80048384 difficulty -80048390 -80048394 MP current time, from 0. long value in seconds. -80048398 MP time setting copy -8004839C MP kill setting copy -800483A0 -800483A4 float: MP current time in seconds -800483A8 larger counter -800483AC float: 800483A4 / 60 (MP current in minutes?) -800483B0 milliseconds in current stage -800483B4 float: 800483B0 / 60 (seconds in stage) -800483B8 ms in game (from power on) -800483BC float: 800483B8 / 60 (seconds since you turned on the game) -800483C0 1 if clock on. 0 if paused -800483C4 most recent texture shot. changes depending on surface you shoot. - guards = FFFFFFFF -800483C8 joy2 detail edit: pointer to table of custom LOD values or NULL -800483CC debug port cmds: portal index -800483D0 debug port cmds: previous state (4) of A button on ctrls 1,2 -800483D4 debug port cmds: previous state (3) of A button on ctrls 1,2 -800483D8 debug port cmds: previous state (2) of A button on ctrls 1,2 -800483DC debug port cmds: previous state (1) of A button on ctrls 1,2 -800483E0 debug port cmds: current state of A button on ctrls 1,2 - -800483F0 table of ramrom ROM addresses -800483F4 - -# ramrom runtime values -80048468 address for demo block -8004846C demo code block buffer address -80048470 0x20 worth of code from headings -80048474 1 if demo loaded or running or something -80048478 -8004847C 1- run demo at next stage load -80048480 1- if a ramrom tool running? -80048484 1 if replaying recorded stage from devtool? -80048488 1- record next stage loaded -80048490 previous sum of bytes -80048494 current sum of bytes -80048498 first value in command (difference b/w values) also, TRUE runs game clock when player alive -8004849C previous ??? -800484A0 current ??? -800484A8 difference b/w above -# -800484AC previous COP0 Count -800484B0 current COP0 Count -800484B4 - -800484D0 language -800484D4 text call values for each text bank -80048640 MP award text list -80048664 -80048668 -8004866C -80048670 MP weapon set data -800490F0 MP weapon set menu text and pointers to data -80049160 selected MP weapon set -80049164 - -# images and image compression -80049178 Huffman table sizes -800491AC Huffman table sizes -800491E0 Huffman table sizes -80049214 Huffman table sizes -80049248 Huffman table sizes -8004927C Huffman table sizes -800492B0 Huffman table sizes -800492E4 - -80049300 image offset list -8004E760 impact sounds & images -8004E86C pointers to image impact/SE entries -8004E8A0 pointers to text handles for each impact type -8004E8D4 -8004E8D8 -8004E8DC -8004E8E0 RareZip (zlib) tables and registers -# RSP manager -8004E9E4 upper bound of RSP workspace allocation (+A000) -8004E9E8 lower bound of RSP workspace allocation -8004E9EC - -8004EAB0 - -8004EAC4 Indy Status -8004EAC8 1- allows saving resources to Indy devtool - -8004EB00 p->viewport buffer or NULL - -8004EB10 solo music selection table -8004EBD0 MP music selection table -8004EC30 -# Spectrum manager -8004EC34 Spectrum keyboard buffer; reset to FF on reads - unset bits count as pressed! - FF.FF.FF.F7.FF.FF.FF.FF '4' key - FF.FF.FF.FD.FF.FF.FF.FF '2' key - FF.FF.FF.FE.FF.FF.FF.FF '1' key - FF.FF.FF.FF.FE.FF.FF.FF '0' key (sabre: A,B button) - (10 left, 08 right, 04 down, 02 up, 01 action) -8004EC3D -8004EC40 Spectrum Kempston joystick reg (ACTION | UP | DOWN | LEFT | RIGHT) -8004EC41 RESERVED -8004EC44 - -8004ED04 Spectrum: -8004ED08 Spectrum: -8004ED0C Spectrum palette -8004ED2C p->Spectrum game names; only first 5 are accessible -8004ED54 set to 'value' by OUT port,value opcodes - -8004ED80 - -8004ED90 "-nochr" string keyword disabling characters -8004ED98 "-noprop" string keyword disabling all props -8004EDA0 "-noobj" string keyword disabling objects -8004EDA8 "-noprop" string keyword disabling all props -8004EDB0 NULL field copied as base for setup name lookup -8004EEB0 "_mp" used to rectify mp stage names -8004EEB4 (float) 0.000001 used as a floor value at 7F002604 -8004EEB8 TLB pointers assigning default models for held weapons -8004EF30 TLB pointers for MP ammo crate expansion -8004EF50 -8004EF54 ???; used during autoturret expansion -8004EF58 -8004EF5C y rotation factor for all doors - -8004EF68 TLB pointers for object expansion -8004F024 (float) -8004F028 (float) -8004F02C TLB pointers for weapon expansion -8004F0E0 (float) 0.9 -8004F0E4 (float) -Pi -8004F0E8 -8004F0EC -8004F0F0 TLB pointers for models assigned to thrown objects -8004F1A8 -8004F1AC TLB pointers to execute intro block commands -8004F1D0 - -8004F210 TLB pointers -8004F2CC - -# Eye intro -8004F2E0 TLB pointers for eye intro steps -8004F2FC (float) 1390.0 length of step 2 in Eye intro -8004F300 (float) 1276.0 initial value for step 3 in Eye intro -8004F304 (float) 5.8 iteration length of step 3 in Eye intro -8004F308 -8004F30C -# briefings -8004F310 briefing: text values for screens -8004F488 briefing: "/n" -8004F48C briefing: "." -8004F490 briefing: "/n" -8004F494 briefing: "1./n" -8004F498 briefing: "2./n" -8004F49C briefing: "3./n" -8004F4A0 briefing: "/n" -8004F4A4 briefing: ": " colon following "Mission #" in title -8004F4A8 briefing: "/n" newline following chapter name in title -8004F4AC briefing: ": " colon following "Part #" in title -8004F4B0 briefing: "/n" newline following 1st stage name in title -8004F4B4 briefing: initialization field for briefing text buffer -8005006C briefing: "%d./r" numerals next to difficulty -80050074 briefing: "/r" initialization field for 007 SETTINGS text -80050C2C briefing: 007 percentage display "%d%%" "%d%%" "%d%%" "%d%%" -80050C4C "%d" #players on MP options menu -80050C50 briefing: "a." a., b., etc sample for PRIMARY OBJECTIVES list -80050C54 briefing: "/r" initialization field for MISSION BRIEFING text -8005180C stage statistic string display templates -800518A0 TLB pointers for determining cheat availability -800519C8 (float) 0.075 ??? -800519CC (float) 0.075 ??? -800519D0 (float) 0.075 ??? -800519D4 (float) 0.075 ??? -800519D8 (float) 130.5 lower bounds for upper tab on menus -800519DC (float) 399.0 default horizontal cursor position -800519E0 (float) 130.5 ??? -800519E4 (float) 1.3- ???, used by legal screen -800519E8 (float) 10000.0 ???, used by legal screen -800519EC (float) 1.3- ???, used by menu 17 -800519F0 (float) 10000.0 ???, used by menu 17 - -800519FC (float) ???, used by Nintendo logo -80051A00 (float) ???, used by Nintendo logo - -80051A10 (float) ???, used by GE splash screen -80051A14 (float) ???, used by GE splash screen -80051A18 -80051A1C (float) 4-folder layer x/z dimentions -80051A24 (float) 4-folder menu: folder scale -80051A28 (float) 4-folder menu: COPY icon y (vertical) position -80051A2C (float) 4-folder menu: ERASE icon x pos -80051A30 (float) 4-folder menu: ERASE icon y pos -80051A34 (float) 4-folder menu: SELECT FILE y pos -80051A38 (float) main menu folder x/z dimentions -80051A40 (float) main menu folder option selection spacing values (vert. bounds for Cheat) -80051A44 (float) solo stage select folder x/z dimentions -80051A4C (float) DIFFICULTY folder x/z dimentions -80051A54 (float) DIFFICULTY folder option selection spacing values -80051A58 (float) 007 options folder x/z dimentions -80051A60 TLB pointers to set scenario-specific settings on MP menus -80051A80 (float) MP settings folder x/z dimentions -80051A88 (float) MP character select folder x/z dimentions -80051A90 (float) MP handicap folder x/z dimentions -80051A98 (float) MP control style folder x/z dimentions -80051AA0 (float) MP stage select folder x/z dimentions -80051AA8 (float) MP scenario folder x/z dimentions -80051AB0 (float) MP team select folder x/z dimentions -80051AB8 (float) BRIEFING folder x/z dimentions -80051AC0 TLB pointers to display proper name on each briefing page; ie. "Q Branch" -80051AD4 (float) DEBRIEFING folder x/z dimentions -80051ADC (float) STATISTICS folder x/z dimentions -80051AE4 (float) CHEAT folder x/z dimentions -80051AEC TLB pointers to select random Bond in intro movies -80051B00 -80051B04 -80051B08 (float) cast intro screen width - -80051B44 (float) smaller menu sizing -80051B48 (float) larger menu sizing -80051B4C TLB pointers for menu updates -80051BB4 TLB pointers for menu initializations -80051C1C TLB pointers for menu interfaces -80051C84 TLB pointers for menu constructors -80051CEC - -80051D90 (float) global character scale modifier 0.1 -80051D94 (float) further global character scale value for special case 0.8 - -80051F7C TLB pointers -80051FC8 - -80052070 TLB pointers -800520D0 - -80052100 TLB pointers for length of each action block command -800524F4 (float) -800524F8 TLB pointers for action block executables -800528EC (float) (default 3DCCCCCD) -800528F0 (float) (default 3DCCCCCD) -800528F4 (float) (default 3DCCCCCD) -800528F8 (float) (default 3DCCCCCD) -800528FC TLB pointers -80052974 - -80052980 TLB pointers -800529C0 - -800529D0 "\r" appended to japanese " picked up." ammo collection text -800529D4 ".\r" appended to english ammo collection text -800529D8 NULL initialization field for ammo collection string -80052A3C japanese: NULL starting weapon collection text -80052A40 "\r" appended to japanese " picked up." weapon collection text -80052A44 ":\r" used in ??? text - -80052A58 ??? tied to projectile deflection off walls (non-clipping impact) - -80052A94 proximity mine activation distance (characters), squared - -80052AA4 projectile gravity modifier - -80052B98 TLB pointers to set addresses for monitor animation command lists -80052C68 (float) -80052C6C TLB pointers to process monitor animation commands -80052CA8 - -80052D9C TLB pointers -80052DF0 TLB pointers test TRUE if a non-collectable standard object type -80052EAC TLB pointers test TRUE if a collectable object type -80052EF4 - -80052F10 TLB pointers to append "some", "a", "an", or "the" when ammo is collected -80052F84 TLB pointers to append name of ammo type collected -80052FEC TLB pointers to set sound effects on ammo collection -80053060 TLB pointers to set amount of ammo received from ammo clips; first 0xE ammo types only -80053098 TLB pointers to set amount of ammo received from weapons; first 0xE ammo types only -800530D0 TLB pointers to appends weapon name for weapon collection text -8005322C TLB pointers to ammo collection -800532E0 - -800532EC proximity mine activation distance (objects), squared - -800532F4 TLB pointers -80053324 - -8005334C TLB pointers -8005345C - -80053490 TLB pointers for size in words of each setup object type -8005354C TLB pointers return p->setup object or NULL if OBJECTIVE -80053608 -8005360C -80053610 NULL initialization field for "objective x: status" message buffer (0x32 large) -80053644 "%s [0x80]%c " japanese "objective x: status" template -8005364C "%s %c: " english "objective x: status" template -80053654 - -80053BF4 ammo display template %d %s: %d -80053C00 died x times template %s %d %s -80053C0C suicide count template %s: %d -80053C14 - -80053CB0 TLB pointers to expand group values in object model data -80053D3C TLB pointers for item type-specific data - -80053E04 global scale modifier for 1st person weapons - -80053E38 TLB pointers -80053E88 - -80053F24 TLB pointers for ??? - 1st person weapon attribute -80054084 TLB pointers for ??? - 1st person weapon attribute -80054170 -80054174 (float) weapon recoil multiplier: initial volley -80054178 (float) weapon recoil multiplier: recoil backward -8005417C (float) weapon recoil multiplier: reset to stationary - -80054194 TLB pointers for sound when drawing/reloading item -8005428C (float) 0.698132 1st person weapon draw speed -80054290 (float) 0.698132 1st person weapon reload speed -80054294 TLB pointers to inhibit reload sound for items -8005438C - -80054404 expended shell gravity modifier -80054408 expended shell scale multiplier -8005440C far clipping for expended shells -80054410 near clipping for expended shells - -80054420 debug: drawjointlist error text -80054490 - -80054490 TLB pointers, per obj.table command types -800544E4 TLB pointers, per obj.table command types -80054538 TLB pointers -80054598 TLB pointers -800545F8 -800545FC -80054600 debug: object parsing error text -80054AF8 TLB pointers used to compute and tally obj.table group numbers -80054B58 (float) -80054B5C (float) -80054B60 TLB pointers -80054BB4 - -80054C20 TLB pointers, per obj.table command types -80054C80 TLB pointers, per obj.table command types -80054CE0 TLB pointers, per obj.table command types -80054D40 - -80054D54 TLB pointers, per obj.table command types -80054DB4 TLB pointers, per obj.table command types -80054E14 TLB pointers to expand offsets in model data types -80054F88 - -80054F90 (float) 0.999999 -80054F94 (float) 0.999999 used in a ceil() routine at 7F0766AC -80054F98 (float) 0.999999 -80054F9C (float) 0.999999 - -80054FC0 debug: manpos display template %8s x %4.0f y %4.0f z %4.0f %s %3d -80054FE4 TLB pointers to solo bodies (assigned by cuff) -80055008 TLB pointers to solo heads (assigned by cuff) -8005502C - -8005507C (float) 5.9 zoom factor for main watch page, used on entry -80055080 (float) -80055084 (float) -80055088 (float) 0.1 multiplied by scale value for watch to make final (0.01) -8005508C (float) 1.7 maximum watch transition speed -80055090 (float) 1.1 watch transition multiplier - -800550D4 (float) 1st person weapon vertical movement restrictor -800550D8 (float) 1st person weapon horizontal movement restrictor - -80055168 (float) movement rate in aiming mode; setting to 1.125 or above forces sight to edge of screen - -80055290 TLB pointers -800552AC - -800552B0 (float) Pi -800552B4 (float) Pi*2 -800552B8 (float) Pi*2 [used by 7F089F10] -800552BC (float) Pi - -800552D0 (float) Pi*2 - -800552FC modifier for player perspective - -80055340 debug: menu text -800556FC TLB pointers to execute debug menu options -80055830 TLB pointers to completely unnecessary jumps after debug option handling -80055844 - -80055860 (float) Pi*2 used by "intro pos" for rotation correction - -80055870 stage setup text lookup pointers -800572B0 - -800572B0 TLB pointers to activate in-game cheats and text -800573D8 [float] 0.05 multiplayer invisibility factor (%5 visible) -800573DC TLB pointers to deactivate in-game cheats and text -80057504 - -80057538 (float) ??? used by 7F094298 -8005753C (float) ??? used by 7F094298 - -80057544 TLB pointers -80057584 - -80057590 TLB pointers -800575D0 - -8005762C TLB pointers to model loaded when a weapon drops, etc. -800576AC -800576B0 (float) -800576B4 (float) 2Pi - -80057760 debug: controller display template "%d, %d\n" -80057768 debug: solo inventory template "%d, %d\n%d %f\n" -80057778 controller setting labels (A) (B) (Z) (L) (R) (C) (+) (S) (3D) -800577C0 "\n" initialization field (used at 7F0AC260) -80057DB0 NULL initialization field used in 70015E10 -80057DB8 NULL initialization field used in 70015E60, 70015EA4 -80058378 NULL initialization field used in 7F0AC4EC -80058438 -8005843C -# solo watch menus -80058440 " \n" watch objectives: -80058444 " \n\n" watch objectives: -80058448 "%c: " watch objectives: display letter next to objective -80058450 " \n" watch objectives: -80058454 " \n\n" watch objectives: -80058458 (float) zoom for main->objective/briefing watch menu [40933333] -8005845C (float) zoom for main->inventory watch menu [40933333] -80058460 (float) zoom for inventory->main watch menu [40BCCCCD] -80058464 (float) zoom for inventory->control watch menu [407CCCCD] -80058468 (float) unused zoom for control->options watch menu [407CCCCD] -8005846C (float) zoom for control->inventory watch menu [40933333] -80058470 (float) zoom for options->objective/briefing watch menu [40933333] -80058474 (float) zoom for objective/briefing->options watch menu [407CCCCD] -80058478 (float) zoom for objective/briefing->main watch menu [40BCCCCD] -8005847C (float) -80058480 (float) -80058484 (float) low bound for advancement through watch menu items; -=auto backward -80058488 (float) bound for quick advancement through watch menu items -8005848C (float) advance rate though inventory -80058490 (float) quick advance rate through inventory - -800584CC TLB pointers to retrieve selected watch menu option for each page -80058508 - -80058570 TLB pointers to briefing page names in watch menu (txtID->7F0C1DD8) -80058584 TLB pointers to set up each of the 5 watch menu pages -80058598 - -800585A0 debug: clipping pad name template "%c%d%c%c" triggered by -stanlinelog -800585CC - -80058648 debug: portal templates "PORT%d ROOM%d" -80058658 - -80058C58 TLB pointers to execute camera modes 0-8 -80058C7C (float) -80058C80 TLB pointers to global visibility command processing types 50-5C -80058CB4 TLB pointers to global visibility command processing types 0-27 -80058D54 - -80058D5C (float) - -80058D80 TLB pointers -80058D94 - -80058DA4 ROM main lookup handles -8005B66C 1172 RareZip compression header check, byte 1 (11) -8005B670 1172 RareZip compression header check, byte 2 (72) -8005B674 "ob_c_debug" -8005B680 "dyn_c_debug" -8005B68C "-mgfx" memory allocation keyword: search -8005B694 "-mgfx" memory allocation keyword: parse -8005B69C "-mvtx" memory allocation keyword: search -8005B6A4 "-mvtx" memory allocation keyword: parse -8005B6B0 "lv_c_debug" -8005B6BC "-stanshow_" string keyword: search -8005B6C8 "-stanshow_" string keyword: parse -8005B6D4 "-stanshow_" string keyword: search -8005B6E0 "-stanshow_" string keyword: parse -8005B6EC "-stanshow_" string keyword: search -8005B6F8 "-stanshow_" string keyword: parse -8005B704 One Minute Left -8005B714 debug: setdetail template "setdetail %d %d %d %d %d %d %d %d %d" -8005B73C - -8005B750 "replay/demo.%d" -8005B760 "replay/demo.%d" -8005B770 "replay/demo.load" -8005B784 -8005B788 -8005B78C -8005B790 TLB pointers -8005B7AC TLB pointers -8005B7E4 (float) -8005B7E8 TLB pointers -8005B874 - -8005BB60 TLB pointers for stage-specific text bank assignment -8005BC18 -8005BC1C -8005BC20 "%d" MP watch menu (used at 7F0C35A0) -8005BC24 NULL MP watch menu window text for blank window (used at 7F0C4118) -8005BC28 "<" MP watch menu left of window text -8005BC2C ">" MP watch menu right of window text -8005BC30 "%s%d %s" P# KILLS -8005BC38 "%s%d %s" P# LOSSES -8005BC40 TLB pointers to advance right on MP menu pages -8005BC60 TLB pointers to advance left on MP menu pages -8005BC80 (float) -8005BC84 (float) -8005BC88 TLB pointers for MP overlays, scoring, scenario -8005BCA0 TLB pointers for MP scoring (watch menu & duration) -8005BCC0 TLB pointers for MP overlays, scoring, scenario -8005BCE0 TLB pointers for MP overlays, scoring, scenario -8005BD00 TLB pointers for set MP menu window text -8005BD20 (float) Pi used in radar display -8005BD24 (float) -8005BD28 -8005BD2C -8005BD30 TLB pointers for huffman decompression routines (9 types) -8005BD58 TLB pointers -8005BE80 Impact type handles -8005BF20 TLB pointers used @ 7F0CE1D0; corresponds to DL types B1-C0 -8005BF60 TLB pointers used @ 7F0CE2B4; used in converting C0- image ID recall types (&7 with upper command) -8005BF74 -8005BF78 -8005BF7C -8005BF80 1172 compression header detection for RareZip -8005BFA8 -8005BFAC -8005BFB0 "rsp_c_debug" -8005BFC0 debug: close port PC command "sleep 5; /etc/killall ghost gload" -8005BFF0 "game_c_debug" -8005C000 debug: build date "Jun 29 1997 20:46:05" -8005C020 Spectrum: game file names -8005C114 Spectrum: 16k program manager filename -8005C12C Spectrum: TLB pointers for opcodes 00-FF -8005C52C Spectrum: TLB pointers for opcode CB extensions -8005C62C Spectrum: TLB pointers for SET opcode types -8005C64C Spectrum: TLB pointers for RES opcode types -8005C66C Spectrum: TLB pointers for BIT opcode types -8005C68C Spectrum: TLB pointers for BIT opcode targets -8005C6AC Spectrum: TLB pointers for opcode ED extensions A0-BB -8005C71C Spectrum: TLB pointers for opcode ED extensions 40-7E -8005C818 - -8005CA90 RSP signature string -8005CAF0 -8005CB00 - -8005D0DE -# end of 21990 region -8005D2E0 thread: Indy board detection -8005D490 thread: NULL -8005D640 thread: main game loop -8005D7F0 - -8005DA40 -8005DAB8 - -8005DB30 target for DP Cmd clock, buffer counter, pipe counter, and tmem counter -8005DBF0 TLB manager table, 0x10 each - 0x0 4 Context value - 0x4 4 page# - 0x8 8 RESERVED? -8005E3F0 TLB manager, shorts indicating pages mapped to random slots in buffer -8005E4A4 - -8005E530 thread: sound manager -8005E6E0 - -8005F400 display list 0 -8005FC50 display list 1 -800604A0 display list bank (0,1) -800604A4 -800604A8 -800604AC -800607B0 -800607BC -800607C0 -800607CC -800607D0 -800607DC - -80060C90 thread: video manager -80060E40 thread SP: video manager -80061340 - -80063640 buffer for interrupt entry C - -# indy.read.buf entries follow format: long resourceID, two strings -80063664 current indy.read.buf.resourceID -80063668 p->string1 in indy.read.buf -8006366C p->string2 in indy.read.buf -80063670 60 byte indy.read.buffer (data copied from 00E00000 hardware range) -800636D0 -800636D4 -800636D8 -800636DC ???; 14 byte buffer -800636F0 ???; 14 byte buffer -80063704 ???; 14 byte buffer -80063718 -8006371C -80063720 p->sound effect buffer -80063724 -80063728 p->1st.music controller block -8006372C p->2nd.music controller block -80063730 p->3rd.music controller block -80063734 p->music data table - 0x0 2 #entries - 0x2 2 fill? - 0x4 var. entries - entry format: 0x8 each - 0x0 4 ROM address - 0x4 2 decompressed size - 0x6 2 compressed size - -80063BB0 memory bank pointers 0x8 each entry - 0 - 1 - 2 - 3 - 4 -ma volatile (memory allocation string) - 5 - 6 permanent memory (primary text banks, tables, etc) - -80063BF0 p->model room buffer - -80063C20 secondary p->model room buffer -80063C24 size of model room buffer -80063C28 -80063C2C -80063C30 index of address/count for loaded rooms - -80064F30 controller input index (0x1FC) -8006512C - -80065350 interrupt entry 5 buffer (thread list) -800653E8 pl1: controller status from pif? -800653EC pl2: controller status from pif? -800653F0 pl3: controller status from pif? -800653F4 pl4: controller status from pif? -800653F8 player controller packets 0x68 each - 0x0 4 - 0x4 4 p->[80065350] - 0x8 4 controller# - 0xC 20 data from block 1 of mempak! - 0x2C 20 data from block 7 of mempak! - 0x4C 4 [block1+0x1B] - 0x50 4 0x10 - 0x54 4 0x8 - 0x58 4 8 + 8*[packet+0x64] - 0x5C 4 [packet+0x58] + 8*[packet+0x64] - 0x60 4 3 + 2*[packet+0x64] - 0x64 1 [block1+0x1A] - 0x65 1 device type: 80-rumble pak, 84-transfer pak - 0x66 2 - -80065598 -8006559C -800655A0+ rumble-off packet buffer 0x40 each player -800656A0+ rumble-on packet buffer 0x40 each player -800657A0 rumble-on buffer 0x20 -800657C0 rumble-off buffer 0x20 -800657E0 - -800657F0 thread: ??? -800659A0 thread SP: ??? -800669A0 interrupt entry buffer - - -80066A10 interrupt entry table - entries: 0x8 each - 0x0 4 p->data - 0x4 4 ID value - types: - entry 5: SI interrupt - entry 6: AI interrupt - entry 7: VI interrupt - entry 8: PI interrupt - entry 9: MI interrupt - -80066AD0 thread: ??? -80066C80 thread SP: ??? -80067C80 - -80067CA0 0x40 buffer for PIFram command writes -80067CE0 tied to SI requests... - -80067D70 0x40 buffer for PIFram command writes - -80069538 p->animation table -8006953C -80069540 -1, or last MP weapon set # - -80069558 matrix buffer; 2 0x40 byte entries, used by Rare logo -8006955C matrix buffer; 1 0x40 byte entry, used by Eye -80069560 matrix buffer; 2 0x40 byte entries, used by Rare logo -80069564 matrix buffer; 2 0x40 byte entries, used by Rare logo -80069568 matrix buffer; 2 0x40 byte entries, used by Eye -8006956C matrix buffer; 2 0x40 byte entries, used by Bond backdrop in intro -80069570 matrix buffer; 2 0x40 byte entries, used by Bond in intro - -800695A0 (float) -800695A4 (float) -800695A8 (float) -800695AC (float) -800695B0 (float) -800695B4 (float) -800695B8 (float) -800695BC (float) -800695C0 (float) - -800695E4 -800695E8 three float values -800695F4 - -80069650-A0 TRUE if cheat available; one byte per cheat -800696A0-F0 TRUE if cheat activated; one byte per cheat -800696F0 player 1 favored right weapon -800696F4 player 1 favored left weapon -800696F8 player 2 favored right weapon -800696FC player 2 favored left weapon -80069700 player 3 favored right weapon -80069704 player 3 favored left weapon -80069708 player 4 favored right weapon -8006970C player 4 favored left weapon -80069710-20 MP char menu selection (1 word per player) -80069720-30 MP char menu previous selection (1 word per player) -80069730-40 -80069740-50 1 if player's MP char selected (1 word per player) -80069750-60 size of a selected MP select image (1 word per player) - Usually 0-B. Max around 18 - -8006977C current MP stage highlighted, used for jump-to -80069780 -80069784 mission difficulty option highlighted -80069788 -8006978C -80069790 -80069794 highlight "Enemy reaction speed" -80069798 highlight "Enemy health" -8006979C highlight "Enemy accuracy" -800697A0 highlight "Enemy damage" -800697A4 -800697A8 player1 handicap 0-A (5 default) -800697AC player2 handicap -800697B0 player3 handicap -800697B4 player4 handicap -800697B8 player1 control style (0-7: Honey <->Goodhead) -800697BC player2 control style -800697C0 player3 control style -800697C4 player4 control style -800697C8 1- highlight players -800697CC 1- highlight scenario -800697D0 1- highlight stage select -800697D4 1- highlight game length -800697D8 1- highlight character -800697DC 1- highlight weapon select -800697E0 1- highlight health -800697E4 1- highlight control style -800697E8 1- highlight aim adjustment - -80069920 various save slot positions -80069980 -800699E0 -80069A40 -80069AA0 -80069B00+ current mem save. changes are applied and saved to proper addresses before -80069B70+ sound effect slots 0-7. 0x18 each - -80069C30 p->list of object lookup indices -80069C34 # object position data entries -80069C38+ pos.data entries - -80071618 p->room lookup buffer (?) -8007161C - -80071E00+ table of pointers to temp proximity mines? -80071E78 when !0 damages player periodically - gas damage flag -80071E7C (float) toxic gas cutoff time -80071E80+ autogenerated weapons - -80075D00 setup file: p->path.tbl -80075D04 setup file: p->path.link -80075D08 setup file: p->intro -80075D0C setup file: p->objects -80075D10 setup file: p->path.sets -80075D14 setup file: p->actions -80075D18 setup file: p->0xxx presets -80075D1C setup file: p->2xxx presets - -80075D30 objective pointers (10 total) -80075D58 -80075D80 p->last tag entry (type 16) -80075D84 p->last briefing setup entry (type 23) -80075D88 p->last "enter room" subobjective entry (type 20) -80075D8C p->last "depositted in room" subobjective entry (type 21) -80075D90 p->last "photograph object" subobjective entry (type 1E) - -80079930 ???; p->allocation -80079934 ???; p->allocation - -800799E0 starting right-hand weapon -800799E4 starting left-hand weapon (when applicable) - -80079A00 cuba camera - lateral rotation (float - radians) -80079A04 cuba camera - lateral rotation speed (float - radians per tick) -80079A08 cuba camera - lateral distance from target (float) -80079A0C cuba camera - vertical distance from target (float) -80079A10 cuba camera - vertical offset from target (float) -80079A14 cuba camera - target preset - -80079A18 camera - focus on bond flag (1 - target bond) - set by D5 sub-action (first 2 argument bytes) -80079A1C camera - unused last 2 bytes for D5 sub-action argument (probably was lat/vert target flags then combined into 1 flag) - -80079A20 SP current time, from 0. long value in seconds. -80079A24 watch time - -80079A28 status bar text buffer 1 [length 101] -80079A8D status bar text buffer 2 [length 101] -80079AF2 status bar text buffer 3 [length 101] -80079B57 status bar text buffer 4 [length 101] -80079BBC status bar text buffer 5 [length 101] -80079C70 upper text window buffer 1 [length 150] -80079D07 upper text window buffer 2 [length 150] - -80079E04 (float) -80079E08 (float) -80079E0C (float) -80079E10 (float) - -80079EE0 player data pointers -80079EF0 player 1 statistics -80079F60 player 2 statistics -80079FD0 player 3 statistics -8007A040 player 4 statistics -8007A0B0 current player data pointer (0x2A80 in size) -8007A0B4 current player stat pointer -8007A0B8 player# -8007A0BC ??? - random byte - -8007A0D0 -8007A0D4 -8007A0D8 -8007A0DC - -8007A0E0 ???; p->allocation, 10 * @8007A0D0 -8007A0E4 ???; p->allocation, 10 * @8007A0D8 -8007A0E8 ???; p->allocation, 14 * @8007A0D4 -8007A0EC ???; p->allocation, 14 * @8007A0DC -8007A0F0 ???; same as 8007A0D0 - -8007A100 - -8007A140 p->smoke buffer 0x198 per entry, 20 entries total (0x14) -8007A144 p->explosion buffer 0x3E0 per entry, 6 entries total -8007A148 maximum casings -8007A14C p->ejected casings buffer -8007A150 p->scorching buffer - entries: 0x58 each - 0x0 2 room# (-1 if invalid) - 0x2 2 image index (unused) - 0x4 4 (float) min x - 0x8 4 (float) min y - 0xC 4 (float) max x - 0x10 4 (float) max y - 0x14 40 four vertices to map image -8007A154 p->bullet impacts buffer - entries: 0x50 each - 0x0 2 room# (-1 if invalid) - 0x2 2 image index - 0x4 4 RESERVED - 0x8 40 four vertices to map image - 0x48 8 00000000 FF000000 - -8007BF90 p->background data -8007BF94 p->clipping (read only) - -8007BFA0 list of visible rooms in cur. global.vis packet -8007C038 #visible rooms in cur. global.vis packet - -8007FF80 p->bgdata: portals -8007FF84 p->bgdata: offsets -8007FF88 -8007FF8C p->bgdata: room file/position list - -8007FFA0 - entries: 0x1C each; 0xD total - 0x0 4 index - 0x4 4 int - 0x8 4 (float) - 0xC 4 (float) - 0x10 4 (float) - 0x14 4 (float) - 0x18 4 int - -80081600 -80081618 table for portals; 0x14 each, 0xC8 total -800825B8 - -800825C0 TRUE if sky enabled -800825C4 p->near fog enviroment values - -# light fixtures -80082660-80082B10 0xC each, 0x64 total; light fixture table - 0x0 2 index - 0x2 2 RESERVED - 0x4 4 p->start of pertinent display list - 0x8 4 p->end of pertinent display list -80082B10 cur. entry in light fixture table [80082660] -80082B12 index of cur. entry in light fixture table [80082660] - -80082B18 ???; table used by light fixtures -80083318 - -8008C5F4 gets the address for the demo loaded - -80086CF4 p->???, used in intro and loaded prior to global text banks -80086CF8 p->image?, used in intro and loaded prior to global text banks - -800888B0 table of resource lookup data - format: 0x14 each entry - 0x0 4 ROM filesize - 0x4 4 (temp copy of remaining) - 0x8 4 temp filesize for PC files - 0xC 4 remaining size of buffer - 0x10 1 mem bank loaded into - 0x11 1 - 0x12 2 RESERVED -8008C230 p->mgfx[0] allocation start -8008C234 p->mgfx[1] allocation start -8008C238 p->mgfx allocation end -8008C23C -8008C240 p->mvtx[0] allocation start -8008C244 p->mvtx[1] allocation start -8008C248 p->mvtx allocation end (p->images [800C31E0]) -8008C24C p->mvtx current pos -8008C250 (byte) bank#: index in 8008C230 allocation table -8008C254 - -8008C260 p->jfont.DL - -8008C270-C358 target for loaded ramrom data - -8008C5F0 record slot # -8008C5F4 hardware address ramrom is saved to. Masked with 0x00FFFFFF and extended with 0x01000000 - -8008C640 -8008C644 table of text pointers -8008C6F4 p->japanese char data buffer [0x2E80] -8008C6F8 p->japanese char registry [0x100] -8008C6FC -8008C700 nonzero stops play. players still control menus -8008C704 TRUE when game over -8008C710 time-triggered flag to alternate GAME OVER / PRESS... messages -8008C714 -8008C718 TRUE if paused -8008C71C player# who paused game -8008C720 p->start of texture allocation -8008C724 p->end of texture allocation -8008C728 p->next available space -8008C72C p->last entry in 'facemapper' image list (list spans backward from end of region) - -8008D0B0 value added to global bank (02000000) to get rdram address it was loaded to -8008D0B4 p->start of bank (explosion ucode) -8008D0B8-8008D140 subsection pointers to each group in global bank -8008D140 cur. BA- setothermode_h settings -8008D144 -8008D148-8008D348 tied to setothermode_h settings - -8008E310 viewport.buf.width -8008E314 viewport.buf.height - -8008E320 p->temp buffer for spectrum monitor data -8008E324 p->temp buffer for spectrum game data -8008E328 p->spectrum buffer (10000); first 4000 is 16K monitor program of the Spectrum (file="em/data/spec_rom.seg.rz"), remaining spectrum game binary -8008E32C ???; p->allocation (300) -8008E330 ???; p->allocation (6000) -8008E334 p->PC keyboard table allocation (100) -8008E338 spectrum.header[16:15]: AF -8008E33A spectrum.header[E:D]: BC -8008E33C spectrum.header[C:B]: DE -8008E33E spectrum.header[A:9]: HL -8008E340 spectrum.header[8:7]: AF' -8008E342 spectrum.header[6:5]: BC' -8008E344 spectrum.header[4:3]: DE' -8008E346 spectrum.header[2:1]: HL' -8008E348 spectrum.header[0]: I -8008E349 spectrum.header[14]: R -8008E34A True if spectrum.header[13]&4: IFF2, interrupt enabled if set -8008E34B True if spectrum.header[13]&4: IFF2, interrupt enabled if set -8008E34C spectrum.header[19] or spectrum.header[19]+1 if > 0: IM interrupt mode IM0 or IM2 -8008E34D cur.spectrum game# -8008E34E spectrum.header[12:11]: IX -8008E350 spectrum.header[10: F]: IY -8008E352 spectrum.header[18:17]: SP stack pointer -8008E354 spectrum.PC (cur.pos, init. to emu+spectrum.header[18:17]) -8008E356 - -8008E360 room model buffer - ---------------------- -Room Information: 0x50 each -0x0 4 bitflags probably - xxxx01xx set when the model binaries have been loaded (prior to collisions) -0x4 4 pointer to point index in model buffer or NULL -0x8 4 pointer to expanded mapping information in model buffer or NULL -0xC 4 pointer to secondary expanded mapping information in model buffer or NULL -0x10 4 compressed size of point index binary or 0 -0x14 4 compressed size of primary display list or 0 -0x18 4 compressed size of secondary display list or 0 -0x1C 4 uncompressed size of point index binary or 0 -0x20 4 uncompressed and expanded size of primary display list or 0 -0x24 4 uncompressed and expanded size of secondary display list or 0 -0x28 4 total size dedicated to current room - (above binaries are increased +0x4-0x10 bits to align to 128bit bounds) -0x2C 4 pointer to index of unique points used in room for collision purposes - (xxx1yyy1zzz1,xxx2yyy2zzz2,etc.) -0x30 4 bitflags probably -0x34 4 0000FFFF when room is not loaded -0x38 4 float: minimum x bounds -0x3C 4 float: minimum y bounds -0x40 4 float: minimum z bounds -0x44 4 float: maximum x bounds -0x48 4 float: maximum y bounds -0x4C 4 float: maximum z bounds ---------------------- -[800D2060] BONDdata1 0x2A80 -[800D4AE0] BONDdata2 0x2A80 -[800D7560] display list buffer -[800F0560] -[80109560] -[80115D60] -[80122560] start of image buffer - runs to at least 80173C10 -[80176DE0] ASCII font, loaded from 0x2E63F0 - 0x2EBDE0 -[8017C7D0] nintendologo, goldeneyelogo, and walletbond object data; p->data at 8002A950 -[801867D0] images for above files? ; p->data @ 8006958C -... -[801C40E0] possible start of image buffer (aka facemapper buffer) -[801C4D60] ??? -[801C5000] main image bank 0x29D160 - 0x29E560 -[801C6400] 0x2AE280 - 0x2AE840 -[801C6BD0] 0x2A4D50 - 0x2BF2D0 -[801CCB50] BG file -[801CE0E0] clipping -[801D4000] -[801E1150] ---------------------- diff --git a/notes/GE Documentation/expando guard.txt b/notes/GE Documentation/expando guard.txt deleted file mode 100644 index fddfb6c..0000000 --- a/notes/GE Documentation/expando guard.txt +++ /dev/null @@ -1,659 +0,0 @@ -8006 position data: 0x34 each -0x0 type - 1 normal obj - 2 door - 3 guard - 4 weapon (pickup) - 5 - 6 player - 7 explosion - -0x1 state 0 if not loaded - 1 activated? usually set for monitors - 2 actually on screen - 4 possibly "use position data given here"... - 8 has been loaded (or on-screen?) - -0x2 blank -0x4 p->object data -0x8 xpos -0xC ypos -0x10 zpos -0x14 p->clipping tile room pointer -0x18 rotation -0x1C -0x20 -0x24 p->previous entry -0x28 p->next entry -0x2C-0x30 list of room numbers (8 max) - FF indicates end of list - ------------ -80073DC0 0xEC slave object during movement routine (00000080 tag) -max of 20 (0x14) - -0xCC room# -0xCD FFFF - -0xE4 OBJdata - ------------ -80075030 0x48 object position offset data (00000040 tag) -primarily only used to offset from another preset point -(only known use is by 0C hanging monitor type, but could be fiddled with) - -0x0 -0x4 -0x8 -0xC -0x10 -0x14 -0x18 -0x1C -0x20 -0x24 -0x28 -0x2C -0x30 -0x34 -0x38 -0x3C -0x40 -0x44 pointer to assigned 73dc0 slot (when applicable) - ------------ ------------ ------------ -Guard data 0x1DC P->8002CC64 - -offsets: -0x0 set by type 8E; Technically first byte of ID; 1388=player 1 -0x1 guard ID - -0x2 accuracy? reaction time? ??? -0x3 accuracy? reaction time? ??? - -0x4 rounds fired from right gun? -0x5 rounds fired from left gun? -0x6 head -0x7 current action type - 1 standing - 2 freeze guard animation... - 3 wasting time (ie. swatting flies) - 4 dying - 5 fade-away (removed) - 6 getting shot - 7 limping sort of animation - 8 firing (standstill) - 9 firing (walking) - A firing (running or rolling) - B step to side - C hop to side - D run to side - E walk along path - F moving (any speed) - 10 surrendering - 11 freeze guard animation... - 12 look around self - 13 trigger alarm (activate object) - 14 throw grenade - -0x8 ? set=0 when fading actor -0x9 ? set=0 when init. players (7F0201F0) -0xA number of shots near guard (ie. over head) -0xB # times shot - -0xC ??? recalled by invis.multi, converted to float, added to 256... -0xD accuracy? reaction time? ??? -0xE ??? set to 0A by type 08 -0xF body - -0x10 beligerancy set by type 8D higher=cooler animations (ie. grenade) -0x11 -0x12 bitflags - x2xx enable path - x1xx set when xyz pointer invalid - xx4x enable loop counter - xx2x eliminate guard - xxx2 ??? - tested by action 39 - xxx1 kicks hat off head. This shouldn't be set when helmets or moonraker hats in use. - -0x14 guard bitflags - 80000000 - 40000000 - 20000000 - 10000000 - 08000000 - 04000000 - 02000000 - 01000000 - 00800000 - 00400000 - 00200000 shot/shot at F8 unsets this - 00100000 scientist (civilian) flag - 00080000 - 00040000 - 00020000 - 00010000 - 00008000 - 00004000 - 00002000 - 00001000 - 00000800 - 00000400 - 00000200 - 00000100 - 00000080 - 00000040 - 00000020 - 00000010 ??? Doak-facility - 00000008 loaded - has been on screen? - 00000004 invisible. used by DD to blank all guards - 00000002 currently doing action? - 00000001 use sunglasses (when applicable) -0x18 handle to position data -0x1C handle to model data handle -0x20 ??? CALLED BY ACTION61 -0x24 ??? -0x28 ??? -0x2C ??? set to FFFFFFFF when fading guard, 0 when standing still -0x30 ??? type 08 sets to 0; 0x14 of struck animation copied here -0x34 ??? type 08 sets to 0 -0x36 ??? -0x37 ??? -0x38 ??? type 08 sets to 0 -0x3C ??? type 08 sets to 2 -0x40 ??? type 08 sets this to 0, then 1. sometimes=pathpreset addy -0x44 timer? base value + random value/120 -0x48 -0x4C flags - 60 ??? - 01 0 when moving toward point; 1 when still -0x50 -0x54 -0x58 type of motion ??? -0x59 dec distance counter ??? -0x5A distance from target - -0xA4 [float] ? -0xA8 [float] ? -0xAC [float] ? -0xB0 [float] ? -0xB4 [float] ? -0xB8 [float] ? -0xBC (float) x position -0xC0 (float) y position -0xC4 (float) z position -0xC8 ? set=0 when init. players (7F0201EC) -0xCC ? =val @ 8004837C during player init. -0xD0 (float) "reaction" time (ability to react to Bond and fire) -0xD4 ? set=0 when init. players -0xD8 [float] ? -0xDC [float] ? -0xE0 [float] ? -0xE4 ? set=0 when init. players -0xE8 ? set=0 when init. players -0xEC (float) guard's hearing (reaction time?) - whenever you fire a gun, multiplies this vs "sound" and alarms if too high -0xF0 ? set=0 when init. players -0xF4 ? LOADED DURING PLAYER INIT, COPIED TO 0xF4+ -0xF5 "" -0xF6 "" -0xF7 "" -0xF8 ? LOADED DURING PLAYER INIT, COPIED TO 0xF4+ -0xF9 "" -0xFA "" -0xFB "" -0xFC (float) damage recieved. BA subtracts from this number, like AC-10 -0x100 (float) health -0x104 pointer to action block controlling character -0x108 offset within action block -0x10A action block return -0x10C user byte #1 -0x10D user byte #2 -0x10E bitflags guard type (80 sets scientist at least) -0x10F set as random value -0x110 loop counter -0x114 preset of object to interact with (2328 preset) -0x116 FC target -0x118 FA target -0x11A FB target - -0x13C [float] ? - -0x140 [float] ? -0x144 [float] ? -0x148 [float] ? -0x14C [float] ? -0x150 ??? blanked in type 08 -0x154 ??? blanked in type 08 -0x158 ??? blanked in type 08 -0x15C ??? blanked in type 08 -0x160 handle to position data of right gun -0x164 handle to position data of left gun used by type 62 -0x168 p->SE buffer NULL when init. players -0x16C p->SE buffer NULL when init. players -0x170 p->SE buffer NULL when init. players -0x174 p->SE buffer NULL when init. players -0x178 ? set=0 when init. players -0x17C ? set=0 when init. players -0x180 ? set=0 when init. players 1BYTE - -0x1AC ? set=0 when init. players 1BYTE - -0x1D8 handle to position data of hat ---------- ---------- -model data handle attached to guard (GUARD+1C) 0xBC -0x0 -0x2 -0x4 GUARDdata -0x8 body model load line -0xC -0x10 actual model -0x14 (float) scale -0x20 - - - ---------- ---------- -modifiers: -800528EC multiplied by health check value - -800528F4 multiplied by health set value -800528F8 multiplied by BA set value ---------- ---------- -BONDdata 0x2A80 p->8007A0B0 -E: 80079EE0, 80079EE4, 80079EE8, 80079EEC for players 1-4 -J: 80079F50, 80079F54, 80079F58, 80079F5C -P: 800689F0, 800689F4, 800689F8, 800689FC - -0x0 ??? -0x4 xpos -0x8 ypos -0xC zpos -0x10 another xpos -0x14 another xpos -0x18 another xpos -0x1C xoffset? -0x20 yoffset? -0x24 zoffset? -0x28 another another xpos -0x2C another another ypos -0x30 another another zpos -0x34 room pointer -0x38 current model x pos? -0x3C current model y pos? -0x40 current model z pos? -0x44 prev. model x pos, copied from 0x38 [7F087664] -0x48 prev. model y pos, copied from 0x3C [7F087664] -0x4C prev. model z pos, copied from 0x40 [7F087664] -0x50 X current room position -0x54 Y current room position -0x58 Z current room position - -0x9C - -0xA8 8006 position data +4 in this leads to player's guarddata - -0xB4 z position -0xB8 x position -0xC4 z position -0xC8 x position - -0xD0 -0xD4 pointer to character's object instance -0xD8 player button control -0xDC health in watch display? (255-0 / 437F0000-00000000) - [call 7F08A2EC to return F0 = health; breaks T6] -0xE0 body armour in watch display? - [call 7F08A2FC to return F0 = health; breaks T6] - -0xEC display watch health total (copied f/ 0xDC), used in MP menus -0xF0 display watch armour total (copied f/ 0xE0), used in MP menus -0xF4 -0xF8 - -0x118 look-ahead setting - -0x124 TRUE when aiming -0x128 solo auto-aim y setting -0x12C [float] - -0x138 solo auto-aim x setting -0x13C [float] - -0x148 [float] lateral rotation 1st -0x14C [float] lateral rot. correction degree drains to +-0 at rest (-left:+right) movement only - not sight/turret! - -0x158 [float] vertical rotation 1st -0x15C -0x160 [float] - -0x16C [float] 1.0 if strafing (-left:+right) -0x170 [float] copy of +0x16C? -0x174 [float] speed current rate of motion forward or back - -0x18C viewport alpha; these four words act as a timer to fade in/out character -0x190 degree of change (?) -0x194 TIMER; smaller = faster. usually set to 1 -0x198 final alpha level -0x19C - -0x1C0 -0x1C4 -0x1C8 -0x1CC TRUE when minute ticks appear around border of solo watch menu -0x1D0 open/close solo watch menu - -0x204 ???; vertical rot. copied here -0x208 -0x20C -0x210 - -0x218 -0x21C -0x220 step in watch menu entry/exit animation - 0 start - 1 set while head going down and arm coming out - 2 starts the arm moving back to left; if not set, disappears - 3 set once zoom starts -0x224 x watch pos? starts zoom when equal to 41A00000 - -0x230 ??? used as base for a watch scale storage value; watch obj. instance? -0x244 ??? watch scale destination - -0x3D0 ??? set by 7F0807B0 (A0) -0x3D4 ??? set by 7F0807B0 (A1) -0x3D8 ??? set by 7F0807B0 (A2) -0x3DC [float] ??? set by 7F0807B0 (A3) - -0x3E4 [float] timer for fade; finished when time < 0 - -0x408 x position (from 8006) -0x40C y position -0x410 z position -0x41C cuff selected - -0x424 1: dying (allow respawn) -0x428 1: fading to black -0x42C -0x430 control style - -0x488 current tile address -0x48C x position (from 8006) used by the debug position feature -0x490 y position -0x494 z position -0x498 used by pos. debug -0x4A0 used by pos. debug -0x4A4 x position (on-screen character?) -0x4A8 y position (on-screen, for sure) -0x4AC z position (on-screen character?) -0x4B0 rotation laterally? -0x4B4 x position (from 8006) -0x4B8 y position (from 8006) -0x4BC z position (from 8006) - 0x1E5D5C (2pl) in G5 also retains on-screen character position - -0x4D8 current tile address - -0x7F0 viewport width -0x7F2 viewport height -0x7F4 viewport ulx -0x7F6 viewport uly -0x7F8 !0 right gun visible -0x7FC !0 left gun visible -0x800 right gun number -0x804 left gun number -0x808 p->right item buffer -0x80C p->left item buffer (solo) -0x810 0x20 copy of body's obj.header -0x830 0x20 copy of right weapon's obj.header - -//0x864 - 0xC0C: right item info buffer -0x864 -0x870 right weapon -0x874 right gun attack (f/ wep#) -0x878 previous right weapon -0x87C right gun firing status -0x894 ??? - 0 when detonating mines -0x898 right gun's current animation - 0 standby - 1 fire pistol step 1 trigger - 2 fire pistol step 2 gunfire - 3 fire pistol step 3 recoil - 4 fire pistol step 4 return to standby - 5 draw pistol step 1 drop off-screen - 6 draw pistol step 2 switch - 7 draw pistol step 3 rise on-screen - 8 draw pistol step 4 - 9 draw pistol step 5 return to standby - A draw rifle step 1 drop off-screen - B draw rifle step 2 switch - C draw rifle step 3 rise on-screen - D fire rifle step 1 - E reload weapon step 1 drop off-screen - F reload weapon step 2 restore clip ammo - 10 reload weapon step 3 rise on-screen - 11 slap (attack) step 1 SE - 12 slap (attack) step 2 damage - 13 slap (attack) step 3 swing up+right, then slap down+left - 14 slap (attack) step 1 SE - 15 slap (attack) step 2 damage - 16 slap (attack) step 3 swing up+left, then slap down+right - 17 chop (attack) step 1 swing back - 18 chop (attack) step 2 damage - 19 chop (attack) step 3 follow through to standby - 1A lift and fire step 1 weapon to upper left + fire - 1B lift and fire step 2 drop back to standby - 1C throw knife step 1 swing back + release - 1D throw knife step 2 follow through to standby - 1E slap (attack) step 1 damage - 1F slap (attack) step 2 swing up+right, then slap down+left - 20 slap (attack) step 1 damage - 21 slap (attack) step 2 swing up+left, then slap down+right - 22 default to standby -0x89C right gun clip ammo -0x8AC right gun next weapon to draw -0x8B4 0 - trigger right gun animation - -//0xC0C - 0xFB4: left item info buffer -0xC0C -0xC18 left weapon -0xC1C left gun attack (f/ wep#) -0xC20 previous left weapon -0xC24 left gun firing status -0xC40 left gun animation -0xC44 left gun clip ammo -0xC54 left gun next weapon to draw -0xC5C 0 - trigger left gun animation - -0xFB4 - -0xFC0 [float] -0xFC4 [float] -0xFC8 -0xFCC -0xFD0 -0xFD4 -0xFD8 -0xFDC -0xFDD -0xFDE -0xFDF -0xFE0 -0xFE4 -0xFE8 [float] -0xFEC [float] -0xFF0 [float] -0xFF4 [float] -0xFF8 [float] -0xFFC [float] -0x1000 [float] -0x1004 [float] -0x1008 [float] -0x100C [float] -0x1010 [float] -0x1014 [float] -Pi... -0x1018 [float] - - -0x1060 !0 if key analyzer used on GEkey. -0x1064 flags (?) - 00000001 ammo on-screen - -0x106C [float] -0x1070 [float] -0x1074 [float] -0x1078 -0x107C [float] -0x1080 [float] -0x1084 [float] set to sniper rifle zoom factor -0x1088 [float] set to camera zoom factor -0x108C -0x1090 [float] screen width? -0x1094 [float] screen height? -0x1098 [float] ??? -0x109C [float] ??? -0x10A0 [float] ??? -0x10A4 [float] ??? -0x10A8 [float] ??? -0x10AC [float] 1/2 screen width? -0x10B0 [float] 1/2 screen height? -0x10B4 -0x10B8 -0x10BC -0x10C0 -0x10C4 -0x10C8 -0x10CC -0x10D0 -0x10D4 -0x10D8 -0x10DC -0x10E0 -0x10E4 -0x10E8 -0x10EC -0x10F0 -0x10F4 -0x10F8 -0x10FC - -0x1118 [float] these four floats are copied when setting global visibility: no portals required -0x111C [float] -0x1120 [float] -0x1124 [float] -0x1128 ??? bitflags of some sort - 00000001 hide sight - 00000002 tied to gunfire? - -0x1130 0x11A8 ammo totals - 1 long per value -0x11A8 p->red screen animation block - -0x11BC [float] watch menu screen swap - current timer -0x11C0 [float] end time; while running, only watch, not menu overlay, visible -0x11C4 [float] watch menu current size -0x11C8 [float] watch menu initial size -0x11CC [float] watch menu final size; must change this value to affect cur size -0x11D0 [float] watch menu current size; unsure this one's use -0x11D4 [float] ??? -0x11D8 ??? set=0 by stationary intro camera -0x11DC ??? set=-1 by stationary intro camera -0x11E0 p->inventory (first in cycle) -0x11E4 p->inventory (right weapon? last in set?) -0x11E8 max inventory entries (used to search inventory) - inventory format: - 0x0 4 availability - -1 end of list - 0 not available - 1 right hand available - 2 pointer to item - 3 double weapon set - 0x4 4 right weapon code or p->obj.pos (8006) - 0x8 4 left weapon code (when applicable) - 0xC 4 p->next item in cycle - 0x10 4 p->previous item in cycle - -0x11EC 1=all guns - -0x11F4 p->??? - 0x20 ??? - 0x24 ??? -0x11F8 index of time spent using items 0x78 - 10 (0xA) entries - 0x0 right item type - 0x4 left item type - 0x8 time (ms) item was in use -0x1270 - -0x1284 player's current animation - -0x12B4 (byte) used in displaying text, after 12B5 test -0x12B5 (byte) used when testing if you can display a cheat text... screen? -0x12B6 (byte) 1= invincible -0x12B7 -0x12B8 ???; related to armour display (equiv. of 1598) - -0x1598 ???; related to health display (equiv. of 12B8) - -0x1878 buffer for vertices, used to generate green backdrop in solo watch HUD - -0x2858 buffer for display lists, used to generate green backdrop in solo watch HUD - -0x29C4 TRUE when MP in-game menu activated -0x29C8 selected page in MP in-game menu? 0-7 - 0 awards - 1 player losses - 2 player kills - 3 scores - 4 pause - 5 exit - 6 exit: cancel / confirm - 7 waiting for players to exit -0x29CC selection on MP page 6 (0-cancel,1-confirm) -0x29D0 press stick register--TRUE allows input used by 7F0C1EF8, 7F0C1F68 -0x29D4 -0x29D8 #deaths -0x29DC #suicides - -0x29E0 - -0x29F8 - -0x2A00 show health display timer nonzero displays health -0x2A04 -0x2A06 - -0x2A10 p->text for 1st multiplayer award -0x2A14 p->text for 2nd mulitplayer award - -0x2A38 -0x2A3C Health register. Probably actual. 0xDC is likely for watch display -0x2A40 BA register. Probably actual. 0xE0 is likely for watch display -0x2A44 -1 -0x2A48 -1 - -0x2A50 !0 lock right gun model -0x2A54 !0 lock left gun model -0x2A58 control type (0 - honey, etc) -0x2A5C control type (0 - honey, etc) -0x2A60 (float) control type (0 - honey, etc) -0x2A64 negative vertical spacing for control type entry, language-specific -0x2A68 1 set after assigning control type data - -+-+-+-+-+-+ -OBJECT INSTANCE ENTRIES -more specificaly, those for player characters: -pointer to entry @ playerdata+0xD4 -size is variable; 0x40 minimum. Add group# * 4 for each - -0x2 2 group#, which amounts to # entries -0x4 4 pointer to guarddata(?) - -0x8 4 pointer to body's header - -0x14 4 [float] scale - -0xB8 4 [float] y offset, so midpoint isn't in the ground \ No newline at end of file diff --git a/notes/GE Documentation/images text and font/7F06AFE8 - display image at position on screen.txt b/notes/GE Documentation/images text and font/7F06AFE8 - display image at position on screen.txt deleted file mode 100644 index 55553f8..0000000 --- a/notes/GE Documentation/images text and font/7F06AFE8 - display image at position on screen.txt +++ /dev/null @@ -1,87 +0,0 @@ -7F06AFE8 display image at position on screen - accepts: A0=p->display list, A1=p->(float) x/y positions, A2=(float) image width/height, A3=width, SP+10=height, - SP+14=???, SP+18=flip horizontally (1-yes; 0-no), SP+1C=flip vertically (1-yes; 0-no), - SP+20=red, SP+24=green, SP+28=blue, SP+2C=alpha - SP+30=!format, SP+34=??? -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -MTC1 R0,F0 ;F0=0.0 -LWC1 F4,0000 (A2) ;F4=A2+0: (float) width -C.LT.S F0,F4 -NOP -BC1FL 7F06B108 ;branch if negative width -LW RA,0024 (SP) -//7F06B008: -LWC1 F6,0004 (A2) ;F6=A2+4: (float) height -C.LT.S F0,F6 -NOP -BC1FL 7F06B108 ;branch if negative height -LW RA,0024 (SP) -//7F06B01C: -LW V0,0000 (A0) ;V0=DL -LUI T6,FB00 ;T6=FB000000 -OR V1,V0,R0 -SW T6,0000 (V1) ;T6->DL+0: rdp_setenvcolour (U) -LW T8,0048 (SP) -LW T0,004C (SP) -LW T4,0050 (SP) -SLL T9,T8,0x18 -LW T8,0054 (SP) -ANDI T1,T0,00FF -SLL T2,T1,0x10 -ANDI T5,T4,00FF -SLL T6,T5,0x8 -OR T3,T9,T2 -OR T7,T3,T6 -ANDI T0,T8,00FF -OR T1,T7,T0 -SW T1,0004 (V1) -LW T9,0058 (SP) -ADDIU V0,V0,0008 -OR V1,V0,R0 -BEQ T9,R0,7F06B098 -LW T5,005C (SP) -//7F06B078: -LUI T2,FC26 -LUI T4,1F14 -ORI T4,T4,93FF -ORI T2,T2,A005 -SW T2,0000 (V1) -SW T4,0004 (V1) -BEQ R0,R0,7F06B0DC -ADDIU V0,V0,0008 -//7F06B098: -BEQ T5,R0,7F06B0C0 -OR V1,V0,R0 -OR V1,V0,R0 -LUI T3,FC12 -ORI T3,T3,9BFF -ADDIU T6,R0,FE38 -SW T6,0004 (V1) -SW T3,0000 (V1) -BEQ R0,R0,7F06B0DC -ADDIU V0,V0,0008 -//7F06B0C0: -LUI T8,FC12 -LUI T7,FF37 -ORI T7,T7,FFFF -ORI T8,T8,9A25 -SW T8,0000 (V1) -SW T7,0004 (V1) -ADDIU V0,V0,0008 -//7F06B0DC: -SW V0,0000 (A0) -LW T2,0044 (SP) -LW T9,0040 (SP) -LW T1,003C (SP) -LW T0,0038 (SP) -SW T2,001C (SP) -SW T9,0018 (SP) -SW T1,0014 (SP) -JAL 7F06ABB0 -SW T0,0010 (SP) -//7F06B104: -LW RA,0024 (SP) -ADDIU SP,SP,0028 -JR RA -NOP diff --git a/notes/GE Documentation/images text and font/7F076998 - image microcode constructor.txt b/notes/GE Documentation/images text and font/7F076998 - image microcode constructor.txt deleted file mode 100644 index 7128f8b..0000000 --- a/notes/GE Documentation/images text and font/7F076998 - image microcode constructor.txt +++ /dev/null @@ -1,273 +0,0 @@ -7F076998 - accepts: A0=@display list pointer, A1=, A2=, A3= -SW A1,0004 (SP) ;SP+4= A1: -ADDIU T0,R0,0001 -BNE A2,T0,7F076B84 ;branch if A2=1: -LW V0,0000 (A0) ;V0=p->DL -OR V1,V0,R0 ;V1=V0: p->DL -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F0769B0: pipesync -LUI T6,E700 -SW T6,0000 (V1) ;DL+0= pipesync.u -SW R0,0004 (V1) ;DL+4= setothermode_l.l: ;DL+4= pipesync.l -//7F0769BC: setothermode_h -OR A1,V0,R0 ;A1=V0: p->DL -LUI T7,BA00 -ORI T7,T7,1402 ;T7= setothermode_h | offset=14 | bits=2 -SW T7,0000 (A1) ;DL+0= setothermode_h.u: cycle type -SW R0,0004 (A1) ;DL+4= setothermode_h.l: 1 cycle -//7F0769D0: -LW T8,0004 (SP) ;T8= A1 from caller -ADDIU V0,V0,0008 ;V0+=8: next DL op -ADDIU AT,R0,0002 -BEQ T8,T0,7F0769FC ;branch if 1: -NOP -BEQ T8,AT,7F076A74 ;branch if 2: -ADDIU AT,R0,0003 -BEQ T8,AT,7F076AEC ;branch if 3: -ADDIU AT,R0,0004 -BEQ T8,AT,7F076B38 ;branch if 4: -NOP -//7F0769FC: setothermode_l -BEQ A3,R0,7F076A54 -OR V1,V0,R0 ;V1=V0: p->DL -SLTI AT,A3,0002 -BNEZ AT,7F076A34 -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T9,B900 -LUI T1,0055 -ORI T1,T1,2D58 -ORI T9,T9,031D ;T9= setothermode_l | offset=3 | bits=1D -SW T9,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T1,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, depth compare, image read | converge delta ST wrap | depthmode: depth decrement, alpha converge | blender= blend 1 machine, blend 1, blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076A34: setothermode_l -LUI T2,B900 -LUI T3,0055 -ORI T3,T3,2078 -ORI T2,T2,031D ;T2= setothermode_l | offset=3 | bits=1D -SW T2,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T3,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, depth compare, depth update, image read | converge delta-ST clamp | depthmode: alpha converge selection | blender= blend 1 machine, blend 1, blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076A54: setothermode_l -LUI T4,B900 -LUI T5,0055 -ORI T5,T5,2048 -ORI T4,T4,031D ;T4= setothermode_l | offset=3 | bits=1D -SW T4,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T5,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, image read | converge delta-ST clamp | depthmode: alpha converge selection | blender= blend 1 machine, blend 1, blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076A74: setothermode_l -BEQ A3,R0,7F076ACC -OR V1,V0,R0 ;V1=V0: p->DL -SLTI AT,A3,0002 -BNEZ AT,7F076AAC -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T6,B900 -LUI T7,0050 -ORI T7,T7,4DD8 -ORI T6,T6,031D ;T6= setothermode_l | offset=3 | bits=1D -SW T6,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T7,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, depth compare, image read, clear on converge | converge delta-ST wrap | depthmode: depth decrement, force blender | blender: blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076AAC: setothermode_l -LUI T8,B900 -LUI T9,0050 -ORI T9,T9,49D8 -ORI T8,T8,031D ;T8= setothermode_l | offset=3 | bits=1D -SW T8,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T9,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, depth compare, image read, clear on converge | converge delta-ST wrap | depthmode: depth exclusive, force blender | blender: blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076ACC: setothermode_l -LUI T1,B900 -LUI T2,0050 -ORI T2,T2,41C8 -ORI T1,T1,031D ;T1= setothermode_l | offset=3 | bits=1D -SW T1,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T2,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, image read, clear on converge | converge delta-ST wrap | depth mode: force blender | blender: blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076AEC: setothermode_l -BEQ A3,R0,7F076B18 -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T3,B900 -LUI T4,0055 -ORI T4,T4,3078 -ORI T3,T3,031D ;T3= setothermode_l | offset=3 | bits=1D -SW T3,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T4,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, depth update, image read | converge delta-ST clamp | depthmode: converge x alpha, alpha converge selection | blender= blend 1 machine, blend 1, blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076B18: setothermode_l -LUI T5,B900 -LUI T6,0055 -ORI T6,T6,3048 -ORI T5,T5,031D ;T5= setothermode_l | offset=3 | bits=1D -SW T5,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T6,0004 (V1) ;DL+4= setothermode_l.l: render mode: antialias enabled, image read | converge delta-ST clamp | depthmode: converge x alpha, alpha converge selection | blender= blend 1 machine, blend 1, blend colour in, blend colour blender -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076B38: setothermode_l -BEQ A3,R0,7F076B64 -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T7,B900 -LUI T8,0050 -ORI T8,T8,4B50 -ORI T7,T7,031D ;T7= setothermode_l | offset=3 | bits=1D -SW T7,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T8,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076B64: setothermode_l -LUI T9,B900 -LUI T1,0050 -ORI T1,T1,4340 -ORI T9,T9,031D ;T9= setothermode_l | offset=3 | bits=1D -SW T9,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T1,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076B84: A2=1... pipesync -OR V1,V0,R0 ;V1=V0: p->DL -ADDIU V0,V0,0008 ;V0+=8: next DL op -LUI T2,E700 -SW T2,0000 (V1) ;DL+0= pipesync.u -SW R0,0004 (V1) ;DL+4= setothermode_l.l: ;DL+4= pipesync.l -//7F076B98: setothermode_h -OR A1,V0,R0 ;A1=V0: p->DL -LUI T3,BA00 -ORI T3,T3,1402 ;T3= setothermode_h | offset=14 | bits=2 -LUI T4,0010 -SW T4,0004 (A1) ;DL+0= setothermode_h.u: cycle type -SW T3,0000 (A1) ;DL+4= setothermode_h.l: 2 cycle -//7F076BB0: -LW T5,0004 (SP) ;T5= A1 from caller -ADDIU V0,V0,0008 ;V0+=8: next DL op -ADDIU AT,R0,0002 -BEQ T5,T0,7F076BDC ;branch if 1: -NOP -BEQ T5,AT,7F076C54 ;branch if 2: -ADDIU AT,R0,0003 -BEQ T5,AT,7F076CCC ;branch if 3 -ADDIU AT,R0,0004 -BEQ T5,AT,7F076D18 ;branch if 4 -NOP -//7F076BDC: setothermode_l -BEQ A3,R0,7F076C34 -OR V1,V0,R0 ;V1=V0: p->DL -SLTI AT,A3,0002 -BNEZ AT,7F076C14 -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T6,B900 -LUI T7,0C19 -ORI T7,T7,2D58 -ORI T6,T6,031D ;T6= setothermode_l | offset=3 | bits=1D -SW T6,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T7,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076C14: setothermode_l -LUI T8,B900 -LUI T9,0C19 -ORI T9,T9,2078 -ORI T8,T8,031D ;T8= setothermode_l | offset=3 | bits=1D -SW T8,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T9,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076C34: setothermode_l -LUI T1,B900 -LUI T2,0C19 -ORI T2,T2,2048 -ORI T1,T1,031D ;T1= setothermode_l | offset=3 | bits=1D -SW T1,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T2,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076C54: setothermode_l -BEQ A3,R0,7F076CAC -OR V1,V0,R0 ;V1=V0: p->DL -SLTI AT,A3,0002 -BNEZ AT,7F076C8C -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T3,B900 -LUI T4,0C18 -ORI T4,T4,4DD8 -ORI T3,T3,031D ;T3= setothermode_l | offset=3 | bits=1D -SW T3,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T4,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076C8C: setothermode_l -LUI T5,B900 -LUI T6,0C18 -ORI T6,T6,49D8 -ORI T5,T5,031D ;T5= setothermode_l | offset=3 | bits=1D -SW T5,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T6,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076CAC: setothermode_l -LUI T7,B900 -LUI T8,0C18 -ORI T8,T8,41C8 -ORI T7,T7,031D ;T7= setothermode_l | offset=3 | bits=1D -SW T7,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T8,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076CCC: setothermode_l -BEQ A3,R0,7F076CF8 -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T9,B900 -LUI T1,0C19 -ORI T1,T1,3078 -ORI T9,T9,031D ;T9= setothermode_l | offset=3 | bits=1D -SW T9,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T1,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076CF8: setothermode_l -LUI T2,B900 -LUI T3,0C19 -ORI T3,T3,3048 -ORI T2,T2,031D ;T2= setothermode_l | offset=3 | bits=1D -SW T2,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T3,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076D18: setothermode_l -BEQ A3,R0,7F076D44 -OR V1,V0,R0 ;V1=V0: p->DL -OR V1,V0,R0 ;V1=V0: p->DL -LUI T4,B900 -LUI T5,0C18 -ORI T5,T5,4B50 -ORI T4,T4,031D ;T4= setothermode_l | offset=3 | bits=1D -SW T4,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T5,0004 (V1) ;DL+4= setothermode_l.l: -BEQ R0,R0,7F076D60 -ADDIU V0,V0,0008 ;V0+=8: next DL op -//7F076D44: setothermode_l -LUI T6,B900 -LUI T7,0C18 -ORI T7,T7,4340 -ORI T6,T6,031D ;T6= setothermode_l | offset=3 | bits=1D -SW T6,0000 (V1) ;DL+0= setothermode_l.u: render mode + blender -SW T7,0004 (V1) ;DL+4= setothermode_l.l: -ADDIU V0,V0,0008 ;V0+=8: next DL op ;V0+=8: next DL op -//7F076D60: return -JR RA -SW V0,0000 (A0) ;A0=final p->DL diff --git a/notes/GE Documentation/images text and font/7F076D68 - generate DL for ImgDecl.txt b/notes/GE Documentation/images text and font/7F076D68 - generate DL for ImgDecl.txt deleted file mode 100644 index 2bc4e8e..0000000 --- a/notes/GE Documentation/images text and font/7F076D68 - generate DL for ImgDecl.txt +++ /dev/null @@ -1,1072 +0,0 @@ -7F076D68 append image to display list A0 using image declaration A1 - accepts: A0=@display list, A1=p->image declaration, A2=???, A3=bowtie, SP+10=uls & ult -ADDIU SP,SP,FE90 -SW RA,0034 (SP) -SW S7,0030 (SP) -SW S6,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A0,0170 (SP) -SW A2,0178 (SP) -//7F076D98: -LW T7,0000 (A0) ;T7=DL -OR S0,A3,R0 ;S0=A3: ??? -OR S7,A1,R0 ;S7=A1: p->img.decl. -BNEZ A1,7F076E3C ;branch if valid pointer -SW T7,016C (SP) ;SP+16C= DL -OR A1,A2,R0 ;A1=A2: ??? -ADDIU A2,R0,0001 ;A2=1 -JAL 7F076998 -ADDIU A0,SP,016C ;A0=p->DL -SLTI AT,S0,0002 ;TRUE if [A3] < 2 -BNEZ AT,7F076DF8 ;branch if TRUE -LW T7,016C (SP) -//7F076DC8: set texture w/ bowtie -LW V0,016C (SP) ;V0=DL -ANDI T6,S0,00FF ;T6=(byte) S0 -SLL T7,T6,0x10 ;T7=S0 * 0x10000 bowtie value -LUI AT,BB00 ;AT=BB000000: rsp_uc05_texture (U) -ADDIU T9,V0,0008 -SW T9,016C (SP) ;SP+16C: p->DL -OR T8,T7,AT -ORI T9,T8,0001 ;T9=BBxx0001 on -ADDIU T6,R0,FFFF ;T6=FFFFFFFF s=-1, t=-1 (ignore) -SW T6,0004 (V0) ;T6->DL: rsp_uc05_texture (L) -BEQ R0,R0,7F076E14 -SW T9,0000 (V0) ;T9->DL: rsp_uc05_texture (U) -//7F076DF8: set texture w/o bowtie -ADDIU T8,T7,0008 -SW T8,016C (SP) ;SP+16C: p->DL -LUI T9,BB00 -ORI T9,T9,0001 ;T9=BB000001 on -ADDIU T6,R0,FFFF ;T6=FFFFFFFF s=-1, t=-1 (ignore) -SW T6,0004 (T7) ;T6->DL: rsp_uc05_texture (L) -SW T9,0000 (T7) ;T9->DL: rsp_uc05_texture (U) -//7F076E14: set combiner and finish up -LW T7,016C (SP) ;T7=p->DL -LUI T9,FCFF -LUI T6,FFFE -ADDIU T8,T7,0008 -SW T8,016C (SP) ;SP+16C: p->DL -ORI T6,T6,793C ;T6=FFFE793C: b0=K5, b1=K5, Aa1=0, Ac1=0, d0=shade, Ab0=0, Ad0=shade, d1=shade, Ab1=0, Ad1=shade -ORI T9,T9,FFFF ;T9=FCFFFFFF: a0=K5, c0=0, Aa0=0, Ac0=0, a1=combined alpha, c1=0 -SW T9,0000 (T7) ;T9->DL: rdp_setcombine (U) -BEQ R0,R0,7F077B80 -SW T6,0004 (T7) ;T6->DL: rdp_setcombine (L) -//7F076E3C: valid pointer -LW V0,0000 (S7) ;V0=p->image or ID -LBU S5,0004 (S7) ;S5=width -LBU S4,0005 (S7) ;S4=height -SLTIU AT,V0,0FFF ;TRUE if img ID -BEQ AT,R0,7F076E60 ;branch if not an image ID -OR A0,S7,R0 ;A0=p->img.decl. -JAL 7F0CBC18 ;handles ID image declarations -OR A1,R0,R0 ;A1=0: buffer=8008C720 -LW V0,0000 (S7) ;V0=p->image or ID -//7F076E60: get p->facemapper entry or table it -LUI AT,8000 -OR V1,V0,AT ;V1=offset | 80000000: p->image -LHU A0,FFF8 (V1) ;A0=image ID -JAL 7F0CBB0C ;V0=offset to matching image list slot, or NULL if no match found -OR A1,R0,R0 ;A1=0: NULL (table at 8008C720) -LBU V1,0006 (S7) ;V1=tile/level # -OR S6,V0,R0 ;S6=V0: p->facemapper entry -BNEL V1,R0,7F07741C ;branch if not level 0 -SW R0,00D0 (SP) -BEQL V0,R0,7F076EBC ;branch if no entry found -LBU S1,0007 (S7) -LW S2,0008 (V0) ;S2=3rd word -LW T6,000C (V0) ;T6=4th word -SLL S1,S2,0x1B -SRL T7,S1,0x1D -ANDI S1,T7,00FF ;S1=3rd word 0x1C flags: format -SRL T7,T6,0x1E ;T7=4th word 0xFC000000 flags: indexed colour sample type -SLL T8,T7,0xE ;T8=flags * 4000: at most, FC000 -ANDI T9,S2,0003 ;T9=3rd word 0x3 flags: size -OR S2,T9,R0 ;S2= size -BEQ R0,R0,7F076EC0 -SW T8,0144 (SP) ;SP+144= 4th word FC- * 4000: indexed table type -//7F076EB8: no facemapper means draw from declaration -LBU S1,0007 (S7) ;S1=img.format (rgba, yuv, ci, ia, i) -LBU S2,0008 (S7) ;S2=S7+8: size (#bits per pixel) -//7F076EC0: branch for each specific bitdepth -BEQ S2,R0,7F076F90 ;branch if =0: 4bit -OR V0,S2,R0 ;V0=S2: size -ADDIU AT,R0,0001 -BEQ V0,AT,7F076F5C ;branch if =1: 8bit -ADDIU T7,R0,0002 -ADDIU AT,R0,0002 -BEQ V0,AT,7F076F28 ;branch if =2: 16bit -ADDIU T8,R0,0002 -ADDIU AT,R0,0003 -BEQ V0,AT,7F076EF4 ;branch if =3: 32bit -ADDIU T9,R0,0003 -BEQ R0,R0,7F076FC4 ;branch if =0 or invalid: 4bit -LW S3,013C (SP) -//7F076EF4: size 3: 32bit -SW T9,0140 (SP) ;SP+140=3: bitdepth=32bit -OR A0,S5,R0 ;A0=S5: width -OR A1,S4,R0 ;A1=S4: height -JAL 7F076928 -ADDIU A2,R0,0001 ;A2=1: -ADDIU S3,V0,FFFF -JAL 7F076774 -OR A0,S5,R0 ;A0=S5: width -ADDIU T6,S5,0003 -SRA T7,T6,0x2 -SW V0,0138 (SP) -BEQ R0,R0,7F076FC4 -SW T7,0134 (SP) ;SP+134= width to nearest word -//7F076F28: size 2: 16bit -SW T8,0140 (SP) ;SP+140=2: bitdepth=16bit -OR A0,S5,R0 ;A0=S5: width -OR A1,S4,R0 ;A1=S4: height -JAL 7F0768B8 -ADDIU A2,R0,0001 ;A2=1: -ADDIU S3,V0,FFFF -JAL 7F076710 -OR A0,S5,R0 ;A0=S5: width -ADDIU T9,S5,0003 -SRA T6,T9,0x2 -SW V0,0138 (SP) -BEQ R0,R0,7F076FC4 -SW T6,0134 (SP) ;SP+134= width to nearest word -//7F076F5C: size 1: 8bit -SW T7,0140 (SP) ;SP+140=2 -OR A0,S5,R0 ;A0=S5: width -OR A1,S4,R0 ;A1=S4: height -JAL 7F076848 ;V0=(ll) width/2 * height -ADDIU A2,R0,0001 ;A2=1: -ADDIU S3,V0,FFFF ;S3=V0-1: -JAL 7F0766AC ;V0=ceil(0x4000 /width) -OR A0,S5,R0 ;A0=S5: width -ADDIU T8,S5,0007 -SRA T9,T8,0x3 ;T9=width+7 / 8 -SW V0,0138 (SP) ;SP+138= ceil(0x4000/width) -BEQ R0,R0,7F076FC4 -SW T9,0134 (SP) ;SP+134= width to nearest doubleword -//7F076F90: size 0: 4bit -ADDIU T6,R0,0002 -SW T6,0140 (SP) ;SP+140=2: bitdepth=16bit -OR A0,S5,R0 ;A0=S5: width -OR A1,S4,R0 ;A1=S4: height -JAL 7F0767D8 -ADDIU A2,R0,0001 ;A2=1: -ADDIU S3,V0,FFFF -JAL 7F076648 ;V0=ceil(0x8000 /width A0) -OR A0,S5,R0 ;A0=S5: width -ADDIU T7,S5,000F -SRA T8,T7,0x4 -SW V0,0138 (SP) -SW T8,0134 (SP) ;SP+134= width to nearest quadword -//7F076FC4: -ADDIU A0,SP,016C ;A0=SP+16C: DL -LW A1,0178 (SP) ;A1=[A2] -ADDIU A2,R0,0001 ;A2=1 -JAL 7F076998 -OR A3,S0,R0 ;A3=S0: bowtie? -SLTI AT,S0,0002 ;TRUE if [A3] < 2 -BNEZ AT,7F077014 ;branch if true -OR T1,S1,R0 ;T1=S1: image format -//7F076FE4: set texture w/ bowtie -LW V0,016C (SP) -ANDI T7,S0,00FF -SLL T8,T7,0x10 ;T8=S0 * 0x10000 bowtie value -LUI AT,BB00 -ADDIU T6,V0,0008 -SW T6,016C (SP) -OR T9,T8,AT -ORI T6,T9,0001 ;T6=BB000001 on -ADDIU T7,R0,FFFF ;T7=FFFFFFFF s=-1, t=-1 (ignore) -SW T7,0004 (V0) ;T7->DL: rsp_uc05_texture (L) -BEQ R0,R0,7F077034 -SW T6,0000 (V0) ;T6->DL: rsp_uc05_texture (U) -//7F077014: set texture w/o bowtie -LW T8,016C (SP) -LUI T6,BB00 -ORI T6,T6,0001 ;T6=BB000001 on -ADDIU T9,T8,0008 -SW T9,016C (SP) -ADDIU T7,R0,FFFF ;T7=FFFFFFFF s=-1, t=-1 (ignore) -SW T7,0004 (T8) ;T7->DL: rsp_uc05_texture (L) -SW T6,0000 (T8) ;T6->DL: rsp_uc05_texture (U) -//7F077034: -LW T8,016C (SP) ;T8=p->DL -LUI T6,BA00 -ORI T6,T6,1001 ;T6=BA001001: shift 16 bits, 1 bit data -ADDIU T9,T8,0008 -SW T9,016C (SP) ;SP+16C: p->DL -SW R0,0004 (T8) ;R0->DL: rsp_uc05_setothermode_h (L) texture lod=tile -BEQ S1,R0,7F077080 ;branch if img.format = 0 [rgba] -SW T6,0000 (T8) ;T6->DL: rsp_uc05_setothermode_h (U) -ADDIU AT,R0,0002 -BEQ T1,AT,7F0770EC ;branch if img.format = 2 [ci] -LW T7,0144 (SP) ;T7=first 6 bits of 4th word * 4000 -ADDIU AT,R0,0003 -BEQ T1,AT,7F0770A8 ;branch if img.format = 3 [ia] -LW T7,016C (SP) -ADDIU AT,R0,0004 -BEQ T1,AT,7F0770CC ;branch if img.format = 4 [i] -LW T7,016C (SP) -BEQ R0,R0,7F077154 ;img.format is 1 or invalid [yuv] -LW V0,016C (SP) -//7F077080: img.format = 0 [rgba] -LW T7,016C (SP) -LUI T9,FC12 -LUI T6,FF33 -ADDIU T8,T7,0008 -SW T8,016C (SP) -ORI T6,T6,FFFF ;T6=FF33FFFF: b0=K5, b1=K5, Aa1=texel1, Ac1=shade, d0=combined alpha, Ab0=0, Ad0=0, d1=combined alpha, Ab1=0, Ad1=0 -ORI T9,T9,1824 ;T9=FC121824: a0=texel0, c0=enviroment, Aa0=texel0, Ac0=shade, a1=texel0, c1=shade -SW T9,0000 (T7) ;T9->DL: rdp_setcombine (U) -BEQ R0,R0,7F077150 -SW T6,0004 (T7) ;T6->DL: rdp_setcombine (L) -//7F0770A8: img.format = 3 [i]ntensity-[a]lpha -ADDIU T8,T7,0008 -LUI T9,FC12 -LUI T6,FF33 -ORI T6,T6,FFFF ;T6=FF33FFFF: b0=K5, b1=K5, Aa1=texel1, Ac1=shade, d0=combined alpha, Ab0=0, Ad0=0, d1=combined alpha, Ab1=0, Ad1=0 -ORI T9,T9,1824 ;T9=FC121824: a0=texel0, c0=enviroment, Aa0=texel0, Ac0=shade, a1=texel0, c1=shade -SW T8,016C (SP) -SW T6,0004 (T7) ;T6->DL: rdp_setcombine (L) -BEQ R0,R0,7F077150 -SW T9,0000 (T7) ;T9->DL: rdp_setcombine (U) -//7F0770CC: img.format = 4 [i]ntensity -ADDIU T8,T7,0008 -LUI T9,FC12 -ORI T9,T9,7E24 ;T9=FC127E24: a0=texel0, c0=enviroment, Aa0=0, Ac0=0, a1=texel0, c1=shade -SW T8,016C (SP) -ADDIU T6,R0,F9FC ;T6=FFFFF9FC: b0=K5, b1=K5, Aa1=0, Ac1=0, d0=combined alpha, Ab0=0, Ad0=shade, d1=combined alpha, Ab1=0, Ad1=shade -SW T6,0004 (T7) ;T6->DL: rdp_setcombine (L) -BEQ R0,R0,7F077150 -SW T9,0000 (T7) ;T9->DL: rdp_setcombine (U) -//7F0770EC: img.format = 2 [c]olour [i]ndex -ORI AT,R0,8000 -BEQ T7,AT,7F07710C ;branch if T7=0x8000 -LW T8,016C (SP) -ORI AT,R0,C000 -BEQ T7,AT,7F077130 ;branch if T7=0xC000 -LW T8,016C (SP) -BEQ R0,R0,7F077154 ;branch otherwise, skipping the combiner -LW V0,016C (SP) -//7F07710C: smaller index... -ADDIU T9,T8,0008 -LUI T6,FC12 -LUI T7,FF33 -ORI T7,T7,FFFF ;T7=FF33FFFF: b0=K5, b1=K5, Aa1=texel1, Ac1=shade, d0=combined alpha, Ab0=0, Ad0=0, d1=combined alpha, Ab1=0, Ad1=0 -ORI T6,T6,1824 ;T6=FC121824: a0=texel0, c0=enviroment, Aa0=texel0, Ac0=shade, a1=texel0, c1=shade -SW T9,016C (SP) -SW T7,0004 (T8) ;T7->DL: rdp_setcombine (L) -BEQ R0,R0,7F077150 -SW T6,0000 (T8) ;T6->DL: rdp_setcombine (U) -//7F077130: larger index... -ADDIU T9,T8,0008 -SW T9,016C (SP) -LUI T6,FC12 -LUI T7,FF33 -ORI T7,T7,FFFF ;T7=FF33FFFF: b0=K5, b1=K5, Aa1=texel1, Ac1=shade, d0=combined alpha, Ab0=0, Ad0=0, d1=combined alpha, Ab1=0, Ad1=0 -ORI T6,T6,1824 ;T6=FC121824: a0=texel0, c0=enviroment, Aa0=texel0, Ac0=shade, a1=texel0, c1=shade -SW T6,0000 (T8) ;T6->DL: rdp_setcombine (U) -SW T7,0004 (T8) ;T7->DL: rdp_setcombine (L) -//7F077150: all formats settextureimage -LW V0,016C (SP) ;V0=p->SP -LW A0,0140 (SP) ;A0=SP+140: bitdepth saved from before, 3 for rgba, 2 for all else -ANDI V1,S1,0007 ;V1= img.format & 7 -SLL T6,V1,0x15 ;T6= V1*0x200000: format -ADDIU T9,V0,0008 -SW T9,016C (SP) ;SP+16C: p->DL -LUI AT,FD00 -ANDI T7,A0,0003 ;T7= bitdepth & 3 -SLL A0,T7,0x13 ;A0= T7 * 0x80000: bitdepth -OR T9,T6,AT -OR V1,T6,R0 ;V1=format<<15 -OR T6,T9,A0 -SW T6,0000 (V0) ;T6->DL: rdp_settextureimage (U) -LW T7,0000 (S7) ;T7=S7+0: offset to image -LUI AT,F500 -OR T3,V1,AT ;T3=settile | format -SW T7,0004 (V0) ;T7->DL: rdp_settextureimage (L): p->image -//7F077194: settile -LW A1,016C (SP) ;A1=p->DL -OR T6,T3,A0 ;T6=settile | format | bitdepth -LUI T2,0700 -ADDIU T9,A1,0008 -SW T9,016C (SP) ;SP+16C= p->DL -SW T6,0000 (A1) ;T6->DL: rdp_settile (U) -LBU T7,000A (S7) ;T7=S7+A: clamp/mirror t -LUI T5,E600 -SLTI AT,S3,07FF -ANDI T8,T7,0003 -LBU T7,0009 (S7) ;T7=S7+9: clamp/mirror s -SLL T9,T8,0x12 ;T9= mirror t * 0x40000 -OR T6,T9,T2 ;T6=tile=7 | clmap/mirror t -ANDI T8,T7,0003 -SLL T9,T8,0x8 ;T9= mirror s * 0x100 -OR T7,T6,T9 ;T7=tile=7 | clmap/mirror t | clamp/mirror s -SW T7,0004 (A1) ;T7->DL: rdp_settile (L) -//7F0771D8: loadblock -LW T8,016C (SP) ;T8= p->DLs -ADDIU A3,R0,07FF -ADDIU T6,T8,0008 -SW T6,016C (SP) -SW R0,0004 (T8) ;DL+4= loadsync.l -SW T5,0000 (T8) ;DL+0= loadsync.u -LW T0,016C (SP) ;SP+16C= p->DL -LUI T8,F300 -ADDIU T7,T0,0008 -SW T7,016C (SP) ;SP+16C= p->DL -BEQ AT,R0,7F077210 ;branch if need to go with default value -SW T8,0000 (T0) ;T8->DL: rdp_loadblock.u: uls=0, ult=0 -BEQ R0,R0,7F077210 -OR A3,S3,R0 ;A3=S3 -//7F077210: -LW T8,0138 (SP) ;T8= -ANDI T6,A3,0FFF -SLL T9,T6,0xC ;T9=width<DL -LUI T4,E700 -ADDIU AT,R0,0002 ;AT=2: ci -ADDIU T7,T8,0008 -SW T7,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T8) ;DL+4= pipesync.l -BNE T1,AT,7F077328 ;branch if no index for image -SW T4,0000 (T8) ;DL+0= pipesync.u -//7F07724C: handle indexed images -LBU T6,000A (S6) ;T6=facemapper+A: #colours in palette -ADDIU T9,R0,03FF -ADDIU A3,S3,0001 ;A3=S3+1: -SUBU V0,T9,T6 ;V0=3FF-#colours: -SLTU AT,V0,A3 ;TRUE if 3FF-? < ceil(4000 / width) -BEQ AT,R0,7F077270 -LW T8,016C (SP) ;T8=p->DL -BEQ R0,R0,7F077274 -OR T0,V0,R0 ;T0=V0: go with size -//7F077270: settile (index) -OR T0,R0,R0 ;default is 0 -ADDIU T7,T8,0008 -SW T7,016C (SP) ;SP+16C= p->DL -LUI T9,F500 -ORI T9,T9,0100 ;T9=F5000100: settile | rgba | 4 bit | tmem=100 -SW T9,0000 (T8) ;DL+0= settile.u: rgba, 4bit, tmem=100 -SW T2,0004 (T8) ;DL+4= settile.l: tile=7 -//7F07728C: loadsync -LW T6,016C (SP) ;T6=p->DL -SUBU A2,A3,T0 ;A2=sizey thing - tabley-thing -ANDI A1,T0,03FF -ADDIU T8,T6,0008 -SW T8,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T6) ;DL+4= loadsync.l -SW T5,0000 (T6) ;DL+0= loadsync.u -//7F0772A8: loadtexturelookuptable -LW A0,016C (SP) ;A0=p->DL -ANDI T8,A2,03FF -SLL T7,T8,0xE ;T7= memorychunk? * 4 <DL -SLL T6,A1,0x2 ;T6= 0 or 3FF-#entries *4: y0 -LUI AT,F000 -OR T9,T7,AT ;T9= loadtlut | x0 -OR A1,T6,R0 ;A1=T6: y0->y1, since no palettes are offset -OR T6,T9,T6 ;T6= loadtlut | x0 | y0 -SW T6,0000 (A0) ;DL+0= loadtlut.u: -LBU T8,000A (S6) ;T8=facemapper+A: #colours in palette -ADDU T7,T8,A2 ;T7=#colours+x0 -ANDI T9,T7,03FF -SLL T6,T9,0xE ;T6=#colours+x0 * 4<DL -ADDIU T6,T9,0008 -SW T6,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T9) ;DL+4= pipesync.l -SW T4,0000 (T9) ;DL+0= pipesync.u -//7F077304: indexed images setothermode_h -LW T8,016C (SP) ;T8=p->DL -LUI T9,BA00 -ORI T9,T9,0E02 ;T9= setothermode_h | shift=E | bits=2 -ADDIU T7,T8,0008 -SW T7,016C (SP) ;SP+16C= p->DL -SW T9,0000 (T8) ;DL+0= setothermode_h.u: texture look-up table -LW T6,0144 (SP) ;T6=SP+144: index table type -BEQ R0,R0,7F077344 -SW T6,0004 (T8) ;DL+4= setothermode_h.l: tlut type -//7F077328: non-indexed images setothermode_h -LW T8,016C (SP) ;T8=p->DL -LUI T9,BA00 -ORI T9,T9,0E02 ;T9= setothermode_h | shift=E | bits=2 -ADDIU T7,T8,0008 -SW T7,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T8) ;DL+4= setothermode_h.l: tlut: none -SW T9,0000 (T8) ;DL+0= setothermode_h.u: texture look-up table -//7F077344: settile -LW S0,016C (SP) ;S0=p->DL -ANDI T7,S2,0003 ;T7=size -SLL T9,T7,0x13 ;T9=size * 80000: -ADDIU T8,S0,0008 -SW T8,016C (SP) ;SP+16C= p->DL -LW T8,0134 (SP) ;T8=width ext. -OR T6,T3,T9 ;T6=settile | format | size -OR A0,S4,R0 ;A0=S4: height -ANDI T7,T8,01FF -SLL T9,T7,0x9 ;T9=width * 200: line -OR T8,T6,T9 ;T8=settile | format | size | line -JAL 7F0765A0 ;V0= A0 to the 2nd root of 2 -SW T8,0000 (S0) ;DL+0= settile.u: format, size, line -OR A0,S5,R0 ;A0=width -JAL 7F0765A0 ;V0= A0 to the 2nd root of 2 -SW V0,0058 (SP) ;SP+58= width to nearest power of 2 -LBU T9,000A (S7) ;T9=S7+A: clamp/mirror t -ANDI T7,V0,000F ;T7= height to the 2nd root of 2 -LW A3,0058 (SP) ;A3=SP+58: width to the 2nd root of 2 -SLL T6,T7,0x4 ;T6=height->mask s -ANDI T8,T9,0003 -SLL T7,T8,0x12 ;T7=clamp/mirror t <<12 -OR T9,T6,T7 ;T9=clamp/mirror t | mask s -ANDI T8,A3,000F -SLL T6,T8,0xE ;T6=width->mask t -LBU T8,0009 (S7) ;T8=S7+9: clamp/mirror s -OR T7,T9,T6 ;T7=clamp/mirror t | mask t | mask s -LW A1,0180 (SP) ;A1=caller(SP+10): -ANDI T9,T8,0003 -SLL T6,T9,0x8 ;T6= clamp/mirror s << 8 -OR T8,T7,T6 ;T8=clamp/mirror t | mask t | clamp/mirror s | mask s -SW T8,0004 (S0) ;DL+4= settile.l: tile=0, clamp/mirror t, mask t, clamp/mirror s, mask s -//7F0773C4: settilesize -LW V1,016C (SP) ;V1=p->DL -ANDI A0,A1,0FFF ;A0=uls and ult -SLL T6,A0,0xC ;T6=uls<DL -OR T8,T6,AT ;T8= settilesize | uls -OR T9,T8,A0 ;T9= settilesize | uls | ult -ADDIU T7,S5,FFFF ;T7=S5-1: width-1 -SLL T6,T7,0x2 ;T6=4(width-1): width.off -ADDU T8,T6,A1 ;T8= s + width.off: lrs and lrt -SW T9,0000 (V1) ;DL+0= settilesize.u: -ANDI T9,T8,0FFF ;T9=lrs -ADDIU T6,S4,FFFF ;T6=height-1 -SLL T8,T6,0x2 ;T8=4(height-1): height.off -SLL T7,T9,0xC ;T7=lrs<DL -ANDI T8,S0,00FF -SLL T9,T8,0x10 ;T9= bowtie * 10000: bowtie -ADDIU T6,V0,0008 -SW T6,016C (SP) ;SP+16C= p->DL -LW T6,00CC (SP) ;T6=SP+CC: thingy that triggered this path -LUI AT,BB00 -OR T7,T9,AT ;T7= texture | bowtie -ADDIU T8,T6,FFFF ;T8=level-1 -ANDI T9,T8,0007 -SLL T6,T9,0xB ;T6= T9 * 800: level -OR T8,T7,T6 ;T8= texture | bowtie | level -ORI T9,T8,0001 ;T9= texture | bowtie | level | on -ADDIU T7,R0,FFFF -SW T7,0004 (V0) ;DL+4= texture.l: s=-1, t=-1 -BEQ R0,R0,7F0775CC -SW T9,0000 (V0) ;DL+0= texture.u: bowtie, level, on -//7F077598: texture: no bowtie -LW V0,016C (SP) ;V0=p->DL -LW T9,00CC (SP) ;T9=SP+CC: thingy that triggered this path -LUI AT,BB00 -ADDIU T8,V0,0008 -ADDIU T7,T9,FFFF ;T7=level-1 -ANDI T6,T7,0007 -SW T8,016C (SP) ;SP+16C= p->DL -SLL T8,T6,0xB ;T8= T6 * 800: level -OR T9,T8,AT ;T9= texture | level -ORI T7,T9,0001 ;T7= texture | level | on -ADDIU T6,R0,FFFF -SW T6,0004 (V0) ;DL+4= texture.l: s=-1, t=-1 -SW T7,0000 (V0) ;DL+0= texture.u: level, on -//7F0775CC: -LW T8,016C (SP) -LUI T7,BA00 -ORI T7,T7,1001 -ADDIU T9,T8,0008 -SW T9,016C (SP) -LUI T6,0001 -SW T6,0004 (T8) -BEQ S1,R0,7F077618 -SW T7,0000 (T8) -ADDIU AT,R0,0002 -BEQ T0,AT,7F077688 -ADDIU AT,R0,0003 -BEQ T0,AT,7F077640 -LW T8,016C (SP) -ADDIU AT,R0,0004 -BEQ T0,AT,7F077664 -LW T8,016C (SP) -BEQ R0,R0,7F0776F0 -LW V0,016C (SP) -//7F077618: -LW T8,016C (SP) -LUI T7,FC26 -LUI T6,1F10 -ADDIU T9,T8,0008 -SW T9,016C (SP) -ORI T6,T6,93FF -ORI T7,T7,A004 -SW T7,0000 (T8) -BEQ R0,R0,7F0776EC -SW T6,0004 (T8) -//7F077640: -ADDIU T9,T8,0008 -LUI T7,FC26 -LUI T6,1F10 -ORI T6,T6,93FF -ORI T7,T7,A004 -SW T9,016C (SP) -SW T6,0004 (T8) -BEQ R0,R0,7F0776EC -SW T7,0000 (T8) -//7F077664: -ADDIU T9,T8,0008 -LUI T7,FC26 -LUI T6,1FFC -ORI T6,T6,93FC -ORI T7,T7,A004 -SW T9,016C (SP) -SW T6,0004 (T8) -BEQ R0,R0,7F0776EC -SW T7,0000 (T8) -//7F077688: -ORI AT,R0,8000 -BEQ S2,AT,7F0776A8 ;branch if not rgba16 index -LW T8,016C (SP) -ORI AT,R0,C000 -BEQ S2,AT,7F0776CC ;branch if not ia16 index -LW T8,016C (SP) -BEQ R0,R0,7F0776F0 -LW V0,016C (SP) -//7F0776A8: -ADDIU T9,T8,0008 -LUI T7,FC12 -LUI T6,FF33 -ORI T6,T6,FFFF -ORI T7,T7,1824 -SW T9,016C (SP) -SW T6,0004 (T8) -BEQ R0,R0,7F0776EC -SW T7,0000 (T8) -//7F0776CC: -ADDIU T9,T8,0008 -SW T9,016C (SP) -LUI T7,FC12 -LUI T6,FF33 -ORI T6,T6,FFFF -ORI T7,T7,1824 -SW T7,0000 (T8) -SW T6,0004 (T8) -//7F0776EC: -LW V0,016C (SP) -LW T8,00C0 (SP) -ANDI V1,S1,0007 -SLL T7,V1,0x15 -ADDIU T9,V0,0008 -SW T9,016C (SP) -LUI AT,FD00 -OR T6,T7,AT -OR V1,T7,R0 ;V1=T7: format<<15 -ANDI T9,T8,0003 -SLL T7,T9,0x13 -OR T8,T6,T7 -SW T8,0000 (V0) -LW T9,0000 (S7) -LUI AT,F500 -OR T1,V1,AT ;T1= settile | format -SW T9,0004 (V0) -//7F077730: settile -LW A0,016C (SP) ;A0=p->DL -LW T8,00C0 (SP) ;T8= SP+C0: bitdepth.setting -LUI T2,0700 -ADDIU T7,A0,0008 -SW T7,016C (SP) ;SP+16C= p->DL -ANDI T9,T8,0003 -SLL T6,T9,0x13 -OR T7,T1,T6 ;T7= settile | format | bitdepth -SW T7,0000 (A0) ;DL+0= settile.u: format, bitdepth -SW T2,0004 (A0) ;DL+4= settile.l: tile=7 -//7F077758: loadsync -LW T8,016C (SP) ;T8=p->DL -LUI T5,E600 -ADDIU A3,R0,07FF ;A3=7FF: default #pixels -ADDIU T9,T8,0008 -SW T9,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T8) ;DL+4= loadsync.l -SW T5,0000 (T8) ;DL+0= loadsync.u -//7F077774: loadblock -LW A2,016C (SP) ;A2=p->DL -LUI T8,F300 -ADDIU T7,A2,0008 -SW T7,016C (SP) ;SP+16C= p->DL -SW T8,0000 (A2) ;DL+0= loadblock.u: uls=0, ult=0 -LW T9,00BC (SP) ;T9=#pixels -SLTI AT,T9,07FF -BEQ AT,R0,7F0777A0 ;keep default if lrs too large -NOP -BEQ R0,R0,7F0777A0 -OR A3,T9,R0 ;A3=T9: #pixels -//7F0777A0: -ANDI T6,A3,0FFF ;T6=#pixels & FFF: lrs -SLL T7,T6,0xC ;T7=lrs * 1000 -OR T8,T7,T2 ;T8= tile=7 | lrs -SW T8,0004 (A2) ;DL+4= loadblock.l: tile=7, lrs, lrt=0 -//7F0777B0: pipesync -LW T9,016C (SP) ;T9=p->DL -LUI T4,E700 -ADDIU AT,R0,0002 -ADDIU T6,T9,0008 -SW T6,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T9) ;DL+4= pipesync.l -BNE T0,AT,7F0778AC ;branch if format isn't 2: ci -SW T4,0000 (T9) ;DL+0= pipesync.u -//7F0777D0: colour index only... -LW V1,00BC (SP) ;V1=#pixels -LBU T7,000A (S6) ;T7=facemapper+A: #colours in palette -ADDIU T8,R0,03FF ;T8=3FF -ADDIU A2,V1,0001 ;A2=#pixels+1 -SUBU V0,T8,T7 ;V0=3FF-#colours -SLTU AT,V0,A2 ;TRUE if value < size -BEQ AT,R0,7F0777F8 -LW T9,016C (SP) ;T9=p->DL -BEQ R0,R0,7F0777FC -OR A3,V0,R0 ;A3=smaller value -//7F0777F8: -OR A3,R0,R0 ;A3=0 if colours > size -//7F0777FC: settile -ADDIU T6,T9,0008 -SW T6,016C (SP) ;SP+16C= p->DL -LUI T8,F500 -ORI T8,T8,0100 ;T8=settile | tmem=100 -SW T8,0000 (T9) ;DL+0= settile.u: rgba, 4bit, tmem=100 -SW T2,0004 (T9) ;DL+4= settile.l: tile=7 -//7F077814: loadsync -LW T7,016C (SP) ;T7=p->DL -SUBU A2,A2,A3 ;#pixels-=entry -ANDI A1,A3,03FF ;A1=A3&3FF: y0 -ADDIU T9,T7,0008 -SW T9,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T7) ;DL+4= loadsync.l -SW T5,0000 (T7) ;DL+0= loadsync.u -//7F077830: loadtlut -LW A0,016C (SP) ;A0=p->DL -ANDI T9,A2,03FF -SLL T6,T9,0xE ;T6= (x0 * 4) <DL -SLL T7,A1,0x2 ;T7=y0*4 -LUI AT,F000 -OR T8,T6,AT ;T8= loadtlut | x0 -OR A1,T7,R0 ;A1=T7: y0 -OR T7,T8,T7 ;T7= loadtlut | x0 | y0 -SW T7,0000 (A0) ;DL+0= loadtlut.u: x0, y0 -LBU T9,000A (S6) ;T9=facemapper+A: #colours in palette -ADDU T6,T9,A2 ;T6=pixel offset+#colours -ANDI T8,T6,03FF -SLL T7,T8,0xE ;T7=(colours * 4) <DL -ADDIU T7,T8,0008 -SW T7,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T8) ;DL+4= pipesync.l -SW T4,0000 (T8) ;DL+0= pipesync.u -//7F07788C: paletted images: setothermode_h -LW T9,016C (SP) ;T9=p->DL -LUI T8,BA00 -ORI T8,T8,0E02 ;T8= setothermode_h | shift=E | bits=2 -ADDIU T6,T9,0008 -SW T6,016C (SP) ;SP+16C= p->DL -SW S2,0004 (T9) ;DL+4= setothermode_h.l: tlut type -BEQ R0,R0,7F0778C8 -SW T8,0000 (T9) ;DL+0= setothermode_h.u: texture look-up table -//7F0778AC: non-paletted images: setothermode_h -LW T7,016C (SP) ;T7=p->DL -LUI T6,BA00 -ORI T6,T6,0E02 ;T6= setothermode_h | shift=E | bits=2 -ADDIU T9,T7,0008 -SW T9,016C (SP) ;SP+16C= p->DL -SW R0,0004 (T7) ;DL+4= setothermode_h.l: tlut: none -SW T6,0000 (T7) ;DL+0= setothermode_h.u: texture look-up table -//7F0778C8: settilesize -LW T8,00CC (SP) ;T8=SP+CC: value that triggered this path -LW A3,0180 (SP) ;A3=caller(SP+10): uls and ult -OR S1,R0,R0 ;S1=0 count=0 -BLEZ T8,7F077B80 ;return if negative (can't be zero, actually) -ANDI A0,A3,0FFF -LBU S3,00CA (SP) ;S3=SP+CA: bitdepth -SLL T7,A0,0xC ;T7= A0 * 1000: uls -LUI AT,F200 -OR T9,T7,AT ;T9= settilesize | uls -OR T6,T9,A0 ;T6= settilesize | uls | ult -ANDI T7,S3,0003 -SLL T9,T7,0x13 ;T9= bitdepth * 80000 -OR S2,T1,T9 ;S2= (settile | format) | bitdepth -SW T6,0050 (SP) ;SP+50= settilesize | uls | ult -LW S0,0064 (SP) -//7F077904: -BLEZ S1,7F077968 ;branch if first time or invalid -LW A3,0180 (SP) ;A3=caller(SP+10): uls and ult -BEQ S6,R0,7F07794C ;branch if NULL facemapper entry -SLTI AT,S5,0002 ;TRUE if width < 2 -LW T6,000C (S6) ;T6=facemapper+C: 4th word -OR A0,S6,R0 ;A0=facemapper entry -SLL T7,T6,0x2 ;T7=flag 40000000 in word: if set, use width/height for level -BGEZ T7,7F07794C ;branch if not set -NOP -//7F077928: -JAL 7F0CC714 ;corresponding width for level A1 -OR A1,S1,R0 ;A1=S1: count -OR S5,V0,R0 ;S5=V0: new width -OR A0,S6,R0 ;A0=S6: facemapper entry -JAL 7F0CC7FC ;corresponding height for level A1 -OR A1,S1,R0 ;A1=S1: count -OR S4,V0,R0 ;S4=V0: new height -BEQ R0,R0,7F077968 -LW A3,0180 (SP) ;A3=caller(SP+10): uls and ult -//7F07794C: use half height -BNEZ AT,7F077958 ;if width < 2, don't divide by 2 -SRA T9,S5,0x1 -OR S5,T9,R0 ;width/=2 -SLTI AT,S4,0002 ;TRUE if height < 2 -BNEZ AT,7F077968 ;if height < 2, don't divide by 2 -SRA T6,S4,0x1 -OR S4,T6,R0 ;height/=2 -//7F077968: compute lrs and lrt -ADDIU T8,S5,FFFF ;T8=width-1 -SLL T7,T8,0x2 ;T7=(width-1)*4 -ADDU T9,T7,A3 ;T9=uls + (width-1)*4: lrs -ANDI T6,T9,0FFF -SLL T8,T6,0xC ;T8=lrs << C -ADDIU T7,S4,FFFF ;T7=height-1 -SLL T9,T7,0x2 ;T9=(height-1)*4 -ADDU T6,T9,A3 ;T6=ult + (height-1)*4: lrt -SW T8,0054 (SP) ;SP+54= lrs -ANDI T8,T6,0FFF -//7F077990: branch for each varying bitdepth -BEQ S3,R0,7F077A6C ;branch if bitdepth=0: 4bit -SW T8,004C (SP) ;SP+4C= lrt -ADDIU AT,R0,0001 -BEQ S3,AT,7F077A38 ;branch if bitdepth=1: 8bit -ADDIU AT,R0,0002 -BEQ S3,AT,7F077A04 ;branch if bitdepth=2: 16bit -ADDIU AT,R0,0003 -BEQL S3,AT,7F0779D4 ;branch if bitdepth=3: 32bit -ADDIU S0,S5,0003 -MULTU S0,S4 -ANDI T7,S0,01FF ;T7=S0 &1FF: line mask -SLL T9,T7,0x9 ;T9=T7<<9: line -OR V0,S2,T9 ;V0=settile | format | bitdepth | line -MFLO A2 ;A2=bowtie(?)*width -BEQ R0,R0,7F077AA4 -LW V1,016C (SP) ;V1=p->DL -//7F0779D0: 32bit -ADDIU S0,S5,0003 ;S0=width+3 -BGEZ S0,7F0779E4 ;branch while isn't negative -SRA T6,S0,0x2 ;T6=width to nearest word -ADDIU AT,S0,0003 -SRA T6,AT,0x2 ;T6=width to nearest word -//7F0779E4: -MULTU T6,S4 -ANDI T8,T6,01FF -SLL T7,T8,0x9 ;T7=rnd(width)<<9: line -OR S0,T6,R0 ;S0= width to nearest word -OR V0,S2,T7 ;V0=settile | format | bitdepth | line -MFLO A2 ;A2=height * width: tilesize -BEQ R0,R0,7F077AA4 -LW V1,016C (SP) ;V1=p->DL -//7F077A04: 16bit -ADDIU S0,S5,0003 -BGEZ S0,7F077A18 -SRA T9,S0,0x2 ;T9=width to nearest word -ADDIU AT,S0,0003 -SRA T9,AT,0x2 ;T9=width to nearest word -//7F077A18: -MULTU T9,S4 -ANDI T6,T9,01FF -SLL T8,T6,0x9 -OR S0,T9,R0 ;S0= width to nearest word -OR V0,S2,T8 ;V0=settile | format | bitdepth | line -MFLO A2 ;A2=height * width: tilesize -BEQ R0,R0,7F077AA4 -LW V1,016C (SP) ;V1=p->DL -//7F077A38: 8bit -ADDIU S0,S5,0007 -BGEZ S0,7F077A4C -SRA T7,S0,0x3 ;T7=width to nearest doubleword -ADDIU AT,S0,0007 -SRA T7,AT,0x3 ;T7=width to nearest doubleword -//7F077A4C: -MULTU T7,S4 -ANDI T9,T7,01FF -SLL T6,T9,0x9 -OR S0,T7,R0 ;S0= width to nearest doubleword -OR V0,S2,T6 ;V0=settile | format | bitdepth | line -MFLO A2 ;A2=height * width: tilesize -BEQ R0,R0,7F077AA4 -LW V1,016C (SP) ;V1=p->DL -//7F077A6C: 4bit -ADDIU S0,S5,000F -BGEZ S0,7F077A80 -SRA T8,S0,0x4 ;T7=width to nearest quadword -ADDIU AT,S0,000F -SRA T8,AT,0x4 ;T7=width to nearest quadword -//7F077A80: -MULTU T8,S4 -ANDI T7,T8,01FF -SLL T9,T7,0x9 -OR S0,T8,R0 ;S0= width to nearest quadword -OR V0,S2,T9 ;V0=settile | format | bitdepth | line -MFLO A2 ;A2=height * width: tilesize -NOP -NOP -//7F077AA0: settile -LW V1,016C (SP) ;V1=p->DL -LW T7,00D0 (SP) ;T7=SP+D0: tmem -OR A0,S4,R0 ;A0=height -ADDIU T8,V1,0008 -ANDI T9,T7,01FF ;T9=tmem & 1FF -OR T6,V0,T9 ;T6=settile | format | bitdepth | line | tmem -SW T8,016C (SP) ;SP+16C= p->DL -SW T6,0000 (V1) ;DL+0= settile.u: format, bitdepth, line, tmem -SW A2,003C (SP) ;SP+3C= real tilesize -JAL 7F0765A0 ;V0= A0 to the 2nd root of 2 -SW V1,0060 (SP) ;SP+60= p->DL -OR A0,S5,R0 ;A0=width -JAL 7F0765A0 ;V0= A0 to the 2nd root of 2 -SW V0,0058 (SP) ;SP+58= nearest placeholder to height -ANDI V1,S1,0007 ;V1=S1&7: count -SLL T8,V1,0x18 ;T8= count * 1000000: tile -ANDI T7,V0,000F -SLL T9,T7,0x4 ;T9=nearest root to width * 10: mask s -OR T6,T9,T8 ;T6= tile | mask s -OR V1,T8,R0 ;V1=T8: tile -LBU T8,000A (S7) ;T8=S7+A: clamp/mirror t -LW A3,0058 (SP) ;A3=SP+58: nearest placeholder to height -ANDI A0,S1,000F ;A0=count&F: shift s -ANDI T7,T8,0003 -SLL T9,T7,0x12 ;T9=clamp/mirror t * 40000 -OR T8,T6,T9 ;T8= tile | clamp/mirror t | mask s -ANDI T7,A3,000F -SLL T6,T7,0xE ;T6=nearest root to height * 4000: mask t -OR T9,T8,T6 ;T9= tile | clamp/mirror t | mask t | mask s -LBU T6,0009 (S7) ;T6=S7+9: clamp/mirror s -SLL T7,A0,0xA ;T7= count * 400: shift t -OR T8,T9,T7 ;T8= tile | clamp/mirror t | mask t | shift t | mask s -ANDI T9,T6,0003 -SLL T7,T9,0x8 ;T7=clamp/mirror s * 100 -OR T6,T8,T7 ;T6= tile | clamp/mirror t | mask t | shift t | clamp/mirror s | mask s -LW T8,0060 (SP) ;T8=p->DL -LW A2,003C (SP) ;A2=tilesize (real.width * height) -OR T9,T6,A0 ;T9= tile | clamp/mirror t | mask t | shift t | clamp/mirror s | mask s | shift s -SW T9,0004 (T8) ;DL+4= settile.l: tile, clamp/mirror t, mask t, shift t, clamp/mirror s, mask s, shift s -//7F077B3C: settilesize -LW A1,016C (SP) ;A1=p->DL -LW T9,0050 (SP) ;T9=settilesize | uls | ult -ADDIU S1,S1,0001 ;S1++ count++ -ADDIU T6,A1,0008 -SW T6,016C (SP) ;SP+16C= p->DL -SW T9,0000 (A1) ;DL+0= settilesize.u: uls, ult -LW T8,0054 (SP) ;T8= lrs -LW T6,004C (SP) ;T6= lrt -OR T7,V1,T8 ;T7= tile | lrs -OR T9,T7,T6 ;T9= tile | lrt | lrs -SW T9,0004 (A1) ;DL+4= settilesize.l: tile, lrt, lrs -//7F077B68: increment tile mem. and loop -LW T8,00D0 (SP) ;T8=SP+D0: tmem -LW T6,00CC (SP) ;T6=SP+CC: value that triggered this path -ADDU T7,T8,A2 ;T7=tmem + tilesize -BNE S1,T6,7F077904 ;loop until matches level -SW T7,00D0 (SP) ;tmem+=tilesize -//7F077B7C: return -SW S0,0064 (SP) ;SP+64= width.real -LW T9,016C (SP) ;T9=p->DL -LW T8,0170 (SP) ;T8=@DL pointer -SW T9,0000 (T8) ;update address of pointer to display list -LW RA,0034 (SP) -LW S7,0030 (SP) -LW S6,002C (SP) -LW S5,0028 (SP) -LW S4,0024 (SP) -LW S3,0020 (SP) -LW S2,001C (SP) -LW S1,0018 (SP) -LW S0,0014 (SP) -JR RA -ADDIU SP,SP,0170 - -+_+ - -7F076848 - accepts: A0=width, A1=height, A2=bitdepth (#times to loop) -BGTZ A2,7F076854 ;if <=0, default to 1 -OR V1,R0,R0 ;V1=0 -ADDIU A2,R0,0001 ;A2=1: default -BLEZ A2,7F0768B0 ;return if still strange -//7F076858: correct if negative or something -ADDIU T6,A0,0007 ;T6=width+7 -BGEZ T6,7F07686C ;branch if no correction needed -SRA T7,T6,0x3 ;T7=(width+7)/8 -ADDIU AT,T6,0007 -SRA T7,AT,0x3 ;T7=(width+7)/8: nearest dw -//7F07686C: -SLL T8,T7,0x2 ;T8=(width+7)/8 * 4: width->doubleword/2 -MULTU T8,A1 -SLTI AT,A0,0002 ;TRUE if width 1 or less -ADDIU A2,A2,FFFF ;A2-- -SRA T0,A0,0x1 ;T0=width/2 -SRA T1,A1,0x1 ;T1=height/2 -MFLO T9 ;T9=width/2 * height -ADDU V1,V1,T9 ;V1= -BNEL AT,R0,7F07689C ;branch if stupid width -SLTI AT,A1,0002 -OR A0,T0,R0 ;width/=2 -//7F076898: -SLTI AT,A1,0002 ;TRUE if height 1 or less -BNEZ AT,7F0768A8 ;branch if stupid height -NOP -OR A1,T1,R0 ;height/=2 -//7F0768A8: loop for each bitdepth level -BGTZL A2,7F07685C ;loop for each A2 -ADDIU T6,A0,0007 -//7F0768B0: return -JR RA -OR V0,V1,R0 ;V0=V1: #pixels - - -7F0766AC AB1DC V0=ceil(0x4000 /width) - accepts: A0=width - fries: AT,V1,T1,T6,T7,T8,F0,F4,F6,F8,F10,F16,F18 -LUI AT,4680 -MTC1 AT,F4 ;F4=16384.0 (0x4000) [46800000] -ADDIU T6,A0,0007 -BGEZ T6,7F0766C8 ;branch if positive (no correction required) -SRA T7,T6,0x3 ;T7=(width+7)/8 -ADDIU AT,T6,0007 -SRA T7,AT,0x3 -//7F0766C8: -SLL T8,T7,0x3 ;T8=(long long) width -MTC1 T8,F6 -LUI AT,8005 -CVT.S.W F8,F6 ;F8=(float) width -DIV.S F0,F4,F8 ;F0= 0x4000 / width -LWC1 F4,4F94 (AT) ;F4=80054F94: 0.999999 [3F7FFFEF] -TRUNC.W.S F10,F0 -MFC1 V1,F10 ;V1= 0x4000 / width -NOP -MTC1 V1,F16 -NOP -CVT.S.W F18,F16 ;F18= 0x4000 / width to nearest whole number -SUB.S F6,F0,F18 ;F6= 0x4000 / width - 0x4000 / width: decimal part -ADD.S F8,F6,F4 ;F8= 0.99999999 + fract.: ceil(0x4000 / width) -TRUNC.W.S F10,F8 -MFC1 T1,F10 ;T1=(int) ceil(fractional part) -JR RA -ADDU V0,V1,T1 ;V0=V1+T1: ceil(0x4000 /width) diff --git a/notes/GE Documentation/images text and font/7F0CD078 - expand C0 pseudocommand.txt b/notes/GE Documentation/images text and font/7F0CD078 - expand C0 pseudocommand.txt deleted file mode 100644 index 5371f97..0000000 --- a/notes/GE Documentation/images text and font/7F0CD078 - expand C0 pseudocommand.txt +++ /dev/null @@ -1,347 +0,0 @@ -7F0CD078 101BA8 expand C0 display list pseudocommands - accepts: A0=p->command, A1=p->'facemapper' image entry, A2=?? -ADDIU SP,SP,FF70 -SW S0,0034 (SP) -OR S0,A0,R0 ;S0=A0: command -SW S1,0038 (SP) -OR S1,A1,R0 ;S1=A1: entry -SW RA,003C (SP) -SW A2,0098 (SP) ;SP+98=A2: ??? -OR A0,A1,R0 ;A0=A1: entry -ADDIU A1,SP,008C ;A1=SP+8C: p->bitdepth -JAL 7F0CC9D4 ;grabs bitdepth and #pixels from entry at A0 -ADDIU A2,SP,0088 ;A2=SP+88: p->#pixels? -//7F0CD0A4: -LW T6,000C (S1) ;T6=entry+C: -ADDIU A0,R0,0007 ;A0=7 -OR V0,S0,R0 ;V0=S0: p->command -SRL T7,T6,0x1E ;T7= data & C0000000 -BNEZ T7,7F0CD1F0 ;branch if set -LUI AT,FD00 -//7F0CD0BC: -//replace C0 with rdp_settextureimage -LW T8,0008 (S1) ;T8=entry+8: -LW T7,008C (SP) ;T7=bitdepth -LUI AT,FD00 -SLL T9,T8,0x1B -SRL T3,T9,0x1D ;T3=T8 & 38000000: format -ANDI T4,T3,0007 ;T4= format & 7 -SLL T5,T4,0x15 ;T5= format * 0x200000 -ANDI T8,T7,0003 ;T8=bitdepth & 3 -SLL T9,T8,0x13 ;T9=bitdepth * 0x80000 -OR T6,T5,AT ;T6=rdp_settextureimage | format -OR T3,T6,T9 ;T3=rdp_settextureimage | format | depth -OR V0,S0,R0 ;V0=S0: DL -SW T3,0000 (V0) ;DL+0= rdp_settextureimage.U -LW T4,0004 (S1) ;T4=entry+4: p->image -ADDIU S0,S0,0008 ;S0+=8: next DL op -OR A3,R0,R0 ;A3=0 -SW T4,0004 (V0) ;DL+4= rdp_settextureimage.L: address -//7F0CD100: -LW A1,0008 (S1) ;A1=entry+8: -LW T8,0098 (SP) ;T8=SP+98: ??? -SW R0,0028 (SP) ;SP+28= 0 -SLL T5,A1,0x1B -SRL A1,T5,0x1D ;A1=format -SW R0,0024 (SP) ;SP+24= 0 -SW R0,0020 (SP) ;SP+20= 0 -SW R0,001C (SP) ;SP+1C= 0 -SW R0,0018 (SP) ;SP+18= 0 -SW R0,0014 (SP) ;SP+14= 0 -LW A2,008C (SP) ;A2=depth -JAL 7F0CC574 -SW T8,0010 (SP) ;SP+10= ??? -BEQ V0,R0,7F0CD184 ;branch if copying didn't take place -LUI T2,0700 -//7F0CD13C: add settile command if necessary -LW T6,0008 (S1) ;A1=entry+8: -LW T8,008C (SP) ;T8=depth -LUI AT,F500 -SLL T9,T6,0x1B -SRL T3,T9,0x1D -ANDI T4,T3,0007 ;T4=format -SLL T5,T4,0x15 ;T5=format * 0x200000 -LW T4,0098 (SP) ;T4= ??? -OR T7,T5,AT ;T7=rdp_settile | format -ANDI T6,T8,0003 -SLL T9,T6,0x13 ;T9=depth * 0x80000 -OR V0,S0,R0 -OR T3,T7,T9 ;T3=rdp_settile | format | depth -ANDI T5,T4,01FF ;T5= ??? & 1FF: texturememory -OR T8,T3,T5 ;T8=rdp_settile | format | depth | texturememory -SW T8,0000 (V0) ;DL+0= rdp_settile.U -SW T2,0004 (V0) ;DL+4= rdp_settile.L: tile=7 -ADDIU S0,S0,0008 ;S0+=8: next DL op -//7F0CD184: loadsync -OR V0,S0,R0 ;V0=S0: DL -ADDIU S0,S0,0008 ;S0+=8: next DL op -LUI T6,E600 -SW T6,0000 (V0) ;DL+0= rdp_loadsync.U -SW R0,0004 (V0) ;DL+4= rdp_loadsync.L -//7F0CD198: loadblock -OR A1,S0,R0 ;A1=S0: DL -LUI T7,F300 -SW T7,0000 (A1) ;DL+0= rdp_loadblock.U: uls=0, ult=0 -LW V1,0088 (SP) ;V1=#pixels? -ADDIU S0,S0,0008 ;S0+=8: next DL op -LUI T2,0700 -ADDIU V1,V1,FFFF ;V1-- -SLTI AT,V1,07FF -BEQ AT,R0,7F0CD1C8 -OR V0,S0,R0 ;V0=S0: DL -BEQ R0,R0,7F0CD1CC -OR A0,V1,R0 ;A0=V1: lrs -//7F0CD1C8: -ADDIU A0,R0,07FF ;A0=7FF if invalid -//7F0CD1CC: -ANDI T9,A0,0FFF -SLL T4,T9,0xC ;T4= lrs * 1000 -OR T3,T4,T2 ;T3=07000000 | lrs -SW T3,0004 (A1) ;DL+4= rdp_loadblock.L: tile=7, lrs -//7F0CD1DC: pipesync -LUI T5,E700 -SW T5,0000 (V0) ;DL+0= rdp_pipesync.U -SW R0,0004 (V0) ;DL+4= rdp_pipesync.L -BEQ R0,R0,7F0CD418 -ADDIU S0,S0,0008 ;S0+=8: next DL op -//7F0CD1F0: -//replace C0 with rdp_settextureimage -LW T8,0008 (S1) ;T8=entry+8: -LW T5,008C (SP) ;T5=depth -ADDIU S0,S0,0008 ;S0+=8: next DL op -SLL T6,T8,0x1B -SRL T7,T6,0x1D -ANDI T9,T7,0007 ;T9=format -SLL T4,T9,0x15 ;T4=format * 0x200000 -ANDI T8,T5,0003 -SLL T6,T8,0x13 ;T6=depth * 0x80000 -OR T3,T4,AT -OR T7,T3,T6 ;T7=rdp_settextureimage | format | depth | texturememory -SW T7,0000 (V0) ;DL+0= rdp_settextureimage.U -LW T9,0004 (S1) ;T9=entry+4: p->image -ADDIU A0,R0,0007 ;A0=7 -OR A3,R0,R0 ;A3=0 -SW T9,0004 (V0) ;DL+4= rdp_settextureimage.L: address -//7F0CD230: -LW A1,0008 (S1) ;A1=entry+8: -LW T8,0098 (SP) ;T8=??? -SW R0,0028 (SP) ;SP+28=0 -SLL T4,A1,0x1B -SRL A1,T4,0x1D ;A1=format -SW R0,0024 (SP) ;SP+24=0 -SW R0,0020 (SP) ;SP+20=0 -SW R0,001C (SP) ;SP+1C=0 -SW R0,0018 (SP) ;SP+18=0 -SW R0,0014 (SP) ;SP+14=0 -LW A2,008C (SP) ;A2=SP+8C: depth -JAL 7F0CC574 -SW T8,0010 (SP) ;SP+10=[A2 from caller] -BEQ V0,R0,7F0CD2B8 ;branch if values weren't set -OR A2,R0,R0 ;A2=0 -//7F0CD26C: -LW T3,0008 (S1) ;T3=entry+8 -LW T8,008C (SP) ;T8=depth -LUI AT,F500 -SLL T6,T3,0x1B -SRL T7,T6,0x1D -ANDI T9,T7,0007 ;T9=format -SLL T4,T9,0x15 ;T4=format * 0x200000 -LW T9,0098 (SP) ;T9= -OR T5,T4,AT ;T5=settile | format -ANDI T3,T8,0003 -SLL T6,T3,0x13 ;T6=depth * 0x80000 -OR V0,S0,R0 ;V0=S0: DL -OR T7,T5,T6 ;T7=settile | format | depth -ANDI T4,T9,01FF ;T4=tile memory -LUI T2,0700 -OR T8,T7,T4 ;T8=settile | format | depth |tmem -SW T8,0000 (V0) ;T8=rdp_settile.U -SW T2,0004 (V0) ;T2=rdp_settile.L: tile=7 -ADDIU S0,S0,0008 ;S0+=8: next DL op -//7F0CD2B8: loadsync -OR V0,S0,R0 ;V0=S0: DL -ADDIU S0,S0,0008 ;S0+=8: next DL op -LUI T3,E600 -SW T3,0000 (V0) ;DL+0= rdp_loadsync.U -SW R0,0004 (V0) ;DL+4= rdp_loadsync.L -//7F0CD2CC: loadblock -OR A1,S0,R0 ;A1=S0: DL -LUI T5,F300 -SW T5,0000 (A1) ;DL+0= rdp_loadblock.U: ul=(0,0) -LW V1,0088 (SP) ;V1=#pixels? -ADDIU S0,S0,0008 ;S0+=8: next DL op -LUI T2,0700 -ADDIU V1,V1,FFFF -SLTI AT,V1,07FF -BEQ AT,R0,7F0CD2FC ;if #pixels > 7FF, set to 7FF -OR V0,S0,R0 ;V0=S0: DL -BEQ R0,R0,7F0CD300 ;else, use #pixels -OR A0,V1,R0 -//7F0CD2FC: -ADDIU A0,R0,07FF -//7F0CD300: -ANDI T6,A0,0FFF -SLL T9,T6,0xC ;T9=lrs -OR T7,T9,T2 ;T7= tile | lrs -SW T7,0004 (A1) ;DL+4= rdp_loadblock.L: tile=7 -//7F0CD310: pipesync -LUI T4,E700 -SW T4,0000 (V0) ;DL+0= rdp_pipesync.U -SW R0,0004 (V0) ;DL+4= rdp_pipesync.L -//7F0CD31C: -LBU T8,000A (S1) ;T8=entry+A: -LW T0,0088 (SP) ;T0=#pixels -ADDIU T3,R0,03FF -SUBU V1,T3,T8 ;V1=0x3FF-entry -SLTU AT,V1,T0 ;TRUE if (0x3FF-entry) < #pixels -BEQ AT,R0,7F0CD340 ;if invalid, set to 0 -ADDIU S0,S0,0008 ;S0+=8: next DL op -BEQ R0,R0,7F0CD344 ;use value if TRUE -OR T1,V1,R0 -//7F0CD340: -OR T1,R0,R0 -//7F0CD344: -SUBU T0,T0,T1 ;T0=entry-(0x3FF-entry) -ADDIU T6,R0,0100 -SW T6,0010 (SP) ;SP+10=0x100 -SW T0,0070 (SP) ;SP+70= entry-(0x3FF-entry) -ADDIU A0,R0,0007 ;A0=7 -OR A1,R0,R0 ;A1=0 -ADDIU A3,R0,0001 ;A3=1 -SW R0,0014 (SP) ;SP+14=0 -SW R0,0018 (SP) ;SP+18=0 -SW R0,001C (SP) ;SP+1C=0 -SW R0,0020 (SP) ;SP+20=0 -SW R0,0024 (SP) ;SP+24=0 -SW R0,0028 (SP) ;SP+28=0 -JAL 7F0CC574 -SW T1,006C (SP) ;SP+6C=(0x3FF-entry) -LW T0,0070 (SP) ;T0= entry-(0x3FF-entry) -LW T1,006C (SP) ;T1= 0x3FF-entry -BEQ V0,R0,7F0CD3A8 ;branch if didn't copy data -//7F0CD38C: settile -LUI T2,0700 -OR V0,S0,R0 ;V0=S0: DL -LUI T9,F500 -ORI T9,T9,0300 ;T9= settile | line | tmem -SW T9,0000 (V0) ;DL+0= rdp_settile.U: line=1, tmem=0x100 -SW T2,0004 (V0) ;DL+4= rdp_settile.L: tile=7 -ADDIU S0,S0,0008 ;S0+=8: next DL op -//7F0CD3A8: loadsync + loadtlut -OR V0,S0,R0 ;V0=S0: DL -ANDI T3,T0,03FF ;T3= entry-(0x3FF-entry) -SLL T8,T3,0xE ;T8=T3 * 0x4000: x0 -ANDI A0,T1,03FF ;A0= 0x3FF-entry -LUI AT,F000 -ADDIU S0,S0,0008 ;S0+=8: next DL op -LUI T7,E600 -OR T5,T8,AT ;T5=loadtlut | x0 -SLL T4,A0,0x2 ;T4= (0x3FF-entry) * 4 -SW T7,0000 (V0) ;DL+0= rdp_loadsync.U -SW R0,0004 (V0) ;DL+4= rdp_loadsync.L -OR T6,T5,T4 ;T6=loadtlut | x0 | y0 -OR V1,S0,R0 ;V1=S0: DL -SW T6,0000 (V1) ;DL+0= rdp_loadtlut.U -LBU T9,000A (S1) ;T9= entry + A -OR A0,T4,R0 ;A0=(0x3FF-entry) * 4 -ADDIU S0,S0,0008 ;S0+=8: next DL op -ADDU T7,T9,T0 -ANDI T4,T7,03FF -SLL T3,T4,0xE ;T3=(entry-(0x3FF-entry)) * 0x4000 -OR T8,T3,T2 ;T8=tile | x1 -OR T5,T8,A0 ;T5=tile | x1 | y1 -OR A1,S0,R0 ;A1=S0: DL -SW T5,0004 (V1) ;DL+4= rdp_loadtlut.L -//7F0CD408: pipesync -LUI T6,E700 -SW T6,0000 (A1) ;DL+0= rdp_pipesync.U -SW R0,0004 (A1) ;DL+4= rdp_pipesync.L -ADDIU S0,S0,0008 ;S0+=8: next DL op -//7F0CD418: -LW RA,003C (SP) -OR V0,S0,R0 ;V0=S0: DL -LW S0,0034 (SP) -LW S1,0038 (SP) -JR RA -ADDIU SP,SP,0090 - -+_+ - -7F0CC9D4 returns bitdepth and #pixels in image entry at A0 - accepts: A0=p->'facemapper' entry, A1=p->bitdepth, A2=p->#pixels? -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LW V1,0008 (A0) ;V1=entry+8: -LBU V0,000B (A0) ;V0=entry+B: ??? -OR S1,A2,R0 ;S1=p->#pixels? -ANDI T6,V1,0003 ;T6=(entry+8)&3 -SRL T7,V0,0x5 ;T7=(entry+B)&E0 -OR S3,A0,R0 ;S3=p->entry -BEQ T7,R0,7F0CCA14 ;S2=1 if (entry+B)&E0 = 0 -OR V1,T6,R0 ;V1=(entry+8)&3 -BEQ R0,R0,7F0CCA18 -OR S2,T7,R0 ;S2=(entry+B)&E0 -//7F0CCA14: -ADDIU S2,R0,0001 -//7F0CCA18: -ADDIU V0,R0,0003 -BNE V1,V0,7F0CCA2C ;branch if (entry+B)&3 = !3 -SW R0,0000 (S1) ;#pixels=0 -BEQ R0,R0,7F0CCA54 ;(entry+B)&3 = 3 -SW V0,0000 (A1) ;bitdepth = 3 -//7F0CCA2C: -ADDIU V0,R0,0002 -BNE V1,V0,7F0CCA40 ;branch if (entry+B)&3 = !2 -ADDIU AT,R0,0001 -BEQ R0,R0,7F0CCA54 -SW V0,0000 (A1) ;bitdepth = 2 -//7F0CCA40: -BNEL V1,AT,7F0CCA54 ;branch if (entry+B)&3 = !1 -SW V0,0000 (A1) ;bitdepth = 2 -BEQ R0,R0,7F0CCA54 -SW V0,0000 (A1) ;bitdepth = 2 -//7F0CCA50: -SW V0,0000 (A1) -BLEZ S2,7F0CCA80 ;branch if 0,or 0x80 flag set -OR S0,R0,R0 -//7F0CCA5C: -OR A0,S3,R0 ;A0=p->entry -JAL 7F0CC994 ;V0=(width/type)*height: #pixels -OR A1,S0,R0 ;A1=0 -LW T8,0000 (S1) ;T8=saved #pixels -SLL T9,V0,0x2 ;T9=#pixels * 4 -ADDIU S0,S0,0001 ;S0++ -ADDU T0,T8,T9 ;T0=saved + #pixels -BNE S0,S2,7F0CCA5C ;loop for each thingy -SW T0,0000 (S1) ;save updated #pixels -//7F0CCA80: -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -7F0CC994 returns V0=(width/type)*height, roughly number of pixels - accepts: A0=p->entry, A1=??? -ADDIU SP,SP,FFE0 -SW RA,0014 (SP) -SW A0,0020 (SP) ;SP+20=p->entry -JAL 7F0CC7FC ;V0=img height? -SW A1,0024 (SP) ;SP+24=??? -SW V0,001C (SP) ;SP+1C=height? -LW A0,0020 (SP) ;A0=p->entry -JAL 7F0CC8E4 ;V0=width/bitdepth -LW A1,0024 (SP) ;A1=??? -LW T6,001C (SP) ;T6=height -LW RA,0014 (SP) -ADDIU SP,SP,0020 -MULTU V0,T6 -MFLO V0 ;V0=(width/bitdepth)*height -JR RA -NOP diff --git a/notes/GE Documentation/images text and font/7F0CDE18 - part of C0 expansion.txt b/notes/GE Documentation/images text and font/7F0CDE18 - part of C0 expansion.txt deleted file mode 100644 index 1b91f44..0000000 --- a/notes/GE Documentation/images text and font/7F0CDE18 - part of C0 expansion.txt +++ /dev/null @@ -1,42 +0,0 @@ -7F0CDE18 ???; A2 through SP+10 derived from C0 command @A0 - accepts: A0=p->command, A1=p->'facemapper' entry, A2=S mirror(2)|clamp(1), A3=T mirror(2)|clamp(1), SP+10=ST settilesize offset -ADDIU SP,SP,FFD8 -SW RA,0024 (SP) -SW A2,0030 (SP) ;SP+30=A2: S mirror/clamp -SW A1,002C (SP) ;SP+2C=A1: p->facemapper entry -SW A3,0034 (SP) ;SP+34=A3: T mirror/clamp -JAL 7F0CD078 -OR A2,R0,R0 ;A2=0 -//7F0CDE34: -LW T6,0038 (SP) ;T6=ST settilesize offset -OR A0,V0,R0 ;A0=V0: DL -LW A1,002C (SP) ;A1=entry -LW A2,0030 (SP) ;A2=S mirror/clamp -LW A3,0034 (SP) ;A3=T mirror/clamp -SW R0,0014 (SP) ;SP+14=0 -SW R0,0018 (SP) ;SP+18=0 -JAL 7F0CD430 -SW T6,0010 (SP) ;SP+10=ST settilesize offset -//7F0CDE58: -LW A1,002C (SP) ;A1=entry -ADDIU AT,R0,0001 -OR A0,V0,R0 ;A0=V0: DL -LBU T7,000B (A1) ;T7=entry+B -LW A2,0030 (SP) ;A2=S mirror/clamp -LW A3,0034 (SP) ;A3=T mirror/clamp -SRL T8,T7,0x5 ;T8=&E0 -BNE T8,AT,7F0CDE94 ;branch if =2x -LW T9,0038 (SP) ;T9=ST settilesize offset -//7F0CDE7C: -ADDIU T0,R0,0001 -SW T0,0014 (SP) ;SP+14=1 -SW T9,0010 (SP) ;SP+10=ST settilesize offset -JAL 7F0CD430 -SW R0,0018 (SP) ;SP+18=0 -OR A0,V0,R0 ;A0=V0: DL -//7F0CDE94: return -LW RA,0024 (SP) -ADDIU SP,SP,0028 -OR V0,A0,R0 ;V0=A0: DL -JR RA -NOP diff --git a/notes/GE Documentation/images text and font/About huffman compressed image types.txt b/notes/GE Documentation/images text and font/About huffman compressed image types.txt deleted file mode 100644 index 0354cf4..0000000 --- a/notes/GE Documentation/images text and font/About huffman compressed image types.txt +++ /dev/null @@ -1,3 +0,0 @@ - Huffman compressed images use a horrible implementation. Instead of the rational thing, namely compressing data then processing it, these types process the data as it is being decompressed. That means for every compression type there are seperate implementations for decompressing certain image formats. - - In total, there are nine huffman compression formats (1-9) and nine possible image formats: 32bit, 16bit, 24bit, 15bit, ai16, ai8, ai4, i8, and i4. Yep, that means there's a total of 81 different subroutines all dedicated to outputting huffman compressed images. diff --git a/notes/GE Documentation/images text and font/Fonts/7F0ACBAC - allocate and initialize font tables.txt b/notes/GE Documentation/images text and font/Fonts/7F0ACBAC - allocate and initialize font tables.txt deleted file mode 100644 index 0208f52..0000000 --- a/notes/GE Documentation/images text and font/Fonts/7F0ACBAC - allocate and initialize font tables.txt +++ /dev/null @@ -1,132 +0,0 @@ -7F0ACBAC E16DC allocate and initialize font tables -LUI AT,8004 -SW R0,0E84 (AT) ;0->80040E84: reset text spacing -LUI AT,8004 -SW R0,0E88 (AT) ;0->80040E88: normal orientation -LUI AT,8004 -SW R0,0E8C (AT) ;0->80040E8C: zero spaces following wordwrap -LUI AT,8004 -ADDIU T6,R0,FFFF -SW T6,0E90 (AT) ;-1->80040E90: overlap correction -LUI AT,8004 -SW R0,0E94 (AT) ;0->80040E94: bi-level texture filter mode -LUI AT,8004 -SW R0,0E98 (AT) ;0->80040E98: x -LUI AT,8004 -SW R0,0E9C (AT) ;0->80040E9C: y -LUI AT,8004 -LUI T7,0000 -LUI T8,0000 -ADDIU SP,SP,FFD8 -SW R0,0EA0 (AT) ;0->80040EA0: s -ADDIU T8,T8,0000 -ADDIU T7,T7,24B0 -SW RA,0014 (SP) -LUI AT,8004 -SUBU A2,T7,T8 ;A2= 24B0 - 0 -SW R0,0EA4 (AT) ;0->80040EA4: t -OR A0,A2,R0 ;A0= 24B0 bytes -SW A2,001C (SP) -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F0ACC24: load small tables to allocated memory -LUI A3,8004 -LUI T0,8004 -ADDIU T0,T0,0EB0 -ADDIU A3,A3,0EAC -ADDIU T9,V0,02A4 -LUI A1,002E -SW V0,0000 (A3) ;V0 -> 80040EAC: font.small1 -LW A2,001C (SP) ;A2= size -SW T9,0000 (T0) ;V0+2A4 -> 80040EB0: font.small2 -OR A0,V0,R0 ;A0=V0: p->target -JAL 70005C1C ;read A2 bytes from hardware A1 to rdram A0 -ADDIU A1,A1,63F0 ;A1=2E63F0: font.small -//7F0ACC54: expand offsets -LUI A3,8004 -LUI T0,8004 -ADDIU T0,T0,0EB0 -ADDIU A3,A3,0EAC -OR V1,R0,R0 ;V1=0 init. offset -//7F0ACC68: loop to expand 5E entries -LW T1,0000 (T0) ;T1=font.small2 -LW T3,0000 (A3) ;T3=font.small1 -ADDU V0,T1,V1 -LW T2,0014 (V0) ;T2=offset -ADDIU V1,V1,0018 ;V1+=18 next entry -SLTI AT,V1,08D0 -ADDU T4,T2,T3 -BNE AT,R0,7F0ACC68 -SW T4,0014 (V0) ;offset += base -//7F0ACC8C: allocate memory for large table -LUI T5,0000 -LUI T6,0000 -ADDIU T6,T6,0000 -ADDIU T5,T5,3540 -SUBU A2,T5,T6 ;A2= 3540 - 0 -OR A0,A2,R0 ;A0= 3540 bytes -SW A2,001C (SP) -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F0ACCB0: -LUI A3,8004 -LUI T0,8004 -ADDIU T0,T0,0EB8 -ADDIU A3,A3,0EB4 -ADDIU T7,V0,02A4 -LUI A1,002F -SW V0,0000 (A3) ;V0 -> 80040EB4: font.large1 -LW A2,001C (SP) ;A2= size: 3540 -SW T7,0000 (T0) ;V0+2A4 -> 80040EB8: font.large2 -OR A0,V0,R0 ;A0=V0: p->target -JAL 70005C1C ;read A2 bytes from hardware A1 to rdram A0 -ADDIU A1,A1,88A0 ;A1=2E88A0: font.large -//7F0ACCE0: expand offsets in each entry -LUI T0,8004 -ADDIU T0,T0,0EB8 -LW V0,0000 (T0) -LUI A3,8004 -ADDIU A3,A3,0EB4 -LW T9,0000 (A3) -LW T8,0014 (V0) ;T8=entry+14: offset -ADDIU V1,R0,0030 -ADDIU A0,R0,08D0 -ADDU T1,T8,T9 -SW T1,0014 (V0) ;offset+=base -LW V0,0000 (T0) -LW T3,0000 (A3) -LW T2,002C (V0) ;T2=entry+18+14: next offset -ADDU T4,T2,T3 -SW T4,002C (V0) ;offset+=base -//7F0ACD20: loop for remaining -LW T5,0000 (T0) -LW T7,0000 (A3) -ADDU V0,T5,V1 -LW T6,0014 (V0) -ADDU T8,T6,T7 -SW T8,0014 (V0) ;offset+=base -LW T9,0000 (T0) -LW T2,0000 (A3) -ADDU V0,T9,V1 -LW T1,002C (V0) -ADDU T3,T1,T2 -SW T3,002C (V0) ;offset+=base -LW T4,0000 (T0) -LW T6,0000 (A3) -ADDU V0,T4,V1 -LW T5,0044 (V0) -ADDU T7,T5,T6 -SW T7,0044 (V0) ;offset+=base -LW T8,0000 (T0) -LW T1,0000 (A3) -ADDU V0,T8,V1 -LW T9,005C (V0) -ADDIU V1,V1,0060 -ADDU T2,T9,T1 -BNE V1,A0,7F0ACD20 -SW T2,005C (V0) ;offset+=base -//7F0ACD88: return -LW RA,0014 (SP) -ADDIU SP,SP,0028 -JR RA -NOP diff --git a/notes/GE Documentation/images text and font/Fonts/7F0AD0F8 - font microcode generator.txt b/notes/GE Documentation/images text and font/Fonts/7F0AD0F8 - font microcode generator.txt deleted file mode 100644 index 2ab166f..0000000 --- a/notes/GE Documentation/images text and font/Fonts/7F0AD0F8 - font microcode generator.txt +++ /dev/null @@ -1,784 +0,0 @@ -7F0AD0F8 construct microcode for font character - returns A1=new xpos, A2=new ypos - accepts: A0=p->display list, A1=@xpos, A2=@ypos, A3=p->table2 entry, SP+10=p->, SP+14=p->table1, SP+18=ulx, SP+1C=uly, SP+20=lrx, SP+24=lry, SP+28= -ADDIU SP,SP,FF10 -LW T9,0100 (SP) ;T9=SP+100: -SW RA,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A1,00F4 (SP) ;SP+F4=A1: @xpos -LW T4,0010 (T9) ;T4=T9+10: -LW T6,0000 (A2) ;T6=A2+0: cur.ypos -LW T7,0118 (SP) ;T7=SP+118: -SLL T5,T4,0x2 -SUBU T5,T5,T4 -LW T8,0104 (SP) ;T8=SP+104: p->1st font table -SLL T5,T5,0x2 -LW T9,0010 (A3) ;T9=charentry+10: -ADDU T5,T5,T4 -ADDU T1,T6,T7 ;T1=T6+T7: cur.ypos+??? -SLL T6,T5,0x2 ;T6=T4 * 0x34: -ADDU T7,T8,T6 ;T7=1st table + offset: -SLL T4,T9,0x2 ;T4=T9*4: charentry+10 -> offset -ADDU T5,T7,T4 ;T5=1st table + offset + word#: -LUI T6,8004 -LW T6,0E84 (T6) ;T6=80040E84: -LW T8,0000 (T5) ;T8=1st table value -LW T7,0000 (A1) ;T7=cur.xpos -OR S0,A0,R0 ;S0=A0: p->DL -ADDU V0,T8,T6 ;V0=1st table value + 80040E84 value -SUBU T4,T7,V0 ;T4=T7-V0: cur.xpos - value -ADDIU T5,T4,0001 ;T5=difference+1 -SW T5,0000 (A1) ;update cur.xpos -//7F0AD16C: -LUI T8,8004 -LW T8,0E88 (T8) ;T8=80040E88: -OR S1,A3,R0 ;S1=A3: p->charentry -BNEL T8,R0,7F0AD1CC ;branch if isn't zero -LW A0,0108 (SP) -BLEZL T5,7F0ADA94 ;return if negative xpos -LW T4,00F4 (SP) -JAL 7000441C ;V0= text clip width -SW T1,00E0 (SP) ;SP+E0=T1: cur.ypos -LW T6,00F4 (SP) ;T6=SP+F4: @width -LW T1,00E0 (SP) ;T1=cur.ypos -LW T7,0000 (T6) ;T7=cur.xpos -SLT AT,V0,T7 ;TRUE if clip width < cur.xpos -BNEL AT,R0,7F0ADA94 ;return if text clipped! -LW T4,00F4 (SP) -JAL 7000442C ;V0= text clip height -SW T1,00E0 (SP) ;SP+E0= cur.ypos -LW T1,00E0 (SP) ;T1=cur.ypos -LW T4,0004 (S1) ;T4=charentry+4: vertical offset -ADDU T9,T1,T4 ;T9=cur.ypos+y.off -SLT AT,V0,T9 ;TRUE if clip height < cur.ypos -BNEL AT,R0,7F0ADA94 ;return if text clipped! -LW T4,00F4 (SP) -//7F0AD1C8: calculate disp.xpos -LW A0,0108 (SP) ;A0=SP+108: ulx -LW T8,0110 (SP) ;T8=SP+110: max x -LW T6,00F4 (SP) ;T6=SP+F4: @width -LW T2,010C (SP) ;T2=SP+10C: uly -ADDU T5,A0,T8 ;T5=ulx+max.x -SW T5,0024 (SP) ;SP+24=T5: ulx+max.x -//7F0AD1E0: catch invalid character writes -LW V0,0000 (T6) ;V0=cur.width -LW T4,0114 (SP) ;T4=SP+114: max y -SLT AT,T5,V0 ;TRUE if max+pos < cur.width, which is crazy -BNEL AT,R0,7F0ADA94 ;return if crazy -LW T4,00F4 (SP) -LW T9,0004 (S1) ;T9=charentry+4: y.off -ADDU T3,T2,T4 ;T3=uly+max.y -ADDU V1,T9,T1 ;V1=y.off+cur.ypos -SLT AT,T3,V1 ;TRUE if max+pos < textpos, which is also crazy -BNEZ AT,7F0ADA90 ;return if crazy -SLT AT,V0,A0 ;TRUE if cur.width+pos < ulx -BNEL AT,R0,7F0ADA94 ;return if negative width, basically -LW T4,00F4 (SP) -LW T8,0008 (S1) ;T8=charentry+8: height -ADDU T5,V1,T8 ;T5=V1+T8: cur.ypos+y.off+height: final y -SLT AT,T5,T2 ;TRUE if ypos < uly -BNEL AT,R0,7F0ADA94 ;return if negative height, basically -LW T4,00F4 (SP) -//7F0AD228: sort out japanese -LW T6,0000 (S1) ;T6=charentry+0: # -LUI A1,8004 -ADDIU A1,A1,0EA8 ;A1=80040EA8 -SLTI AT,T6,0080 ;TRUE if entry < 0x80: ASCII character -BEQ AT,R0,7F0AD3F8 ;branch if codetype -OR V0,S0,R0 ;V0=S0: p->DL -//7F0AD240: [ASCII] setothermode_h -OR V0,S0,R0 ;V0=S0: p->DL -LUI T7,BA00 -ORI T7,T7,0E02 ;T7=BA000E02 -ADDIU S0,S0,0008 ;S0+=8 next DL -SW T7,0000 (V0) ;V0+0= setothermode_h.u: texture lut: none -SW R0,0004 (V0) ;V0+4= setothermode_h.l: -OR V1,S0,R0 ;V1=S0: p->DL -//7F0AD25C: [ASCII] settextureimage -LUI T4,FD90 -SW T4,0000 (V1) ;V1+0= settextureimage.u: i 16bit -LW T9,0014 (S1) ;T9=charentry+14: p->image -ADDIU S0,S0,0008 ;S0+=8 next DL -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SW T9,0004 (V1) ;V1+4= settextureimage.l -OR A1,S0,R0 ;A1=S0: p->DL -//7F0AD27C: [ASCII] settile -LUI T8,F590 -LUI T5,0700 -SW T5,0004 (A0) ;A0+4= settile.l: i 16bit -SW T8,0000 (A0) ;A0+0= settile.u: tile=7 -ADDIU S0,S0,0008 ;S0+=8 next DL -//7F0AD290: [ASCII] loadsync -LUI T6,E600 -SW T6,0000 (A1) ;A1+0= loadsync.u -OR T0,S0,R0 ;T0=S0: p->DL -SW R0,0004 (A1) ;A1+4= loadsync.l -//7F0AD2A0: [ASCII] loadblock -LUI T7,F300 -SW T7,0000 (T0) ;T0+0: loadblock.u: uls=0, ult=0 -LW V1,000C (S1) ;V1=charentry+C: width -LW T9,0008 (S1) ;T9=charentry+8: height -ADDIU S0,S0,0008 ;S0+=8 next DL -ADDIU V1,V1,0007 -ANDI T4,V1,00F8 -MULTU T4,T9 -OR V1,T4,R0 ;V1=width to nearest 0x8 boundry -ADDIU A2,R0,07FF ;A2=0x7FF default #pixels -MFLO V0 ;V0=width*height -ADDIU V0,V0,0001 -SRA T8,V0,0x1 ;T8=width*height/2: #pixels to nearest pixel -ADDIU V0,T8,FFFF ;V0=#pixels-1: value 0-x, instead of 1-x -SLTI AT,V0,07FF ;TRUE if image < 0x800 pixels -BEQ AT,R0,7F0AD2EC ;branch if false -NOP -BEQ R0,R0,7F0AD2EC -OR A2,V0,R0 ;A2=V0: #pixels -//7F0AD2EC: -BGEZ V1,7F0AD2FC ;branch if width not negative, which it can't be due to the AND -SRA V0,V1,0x3 ;V0=width/8 -ADDIU AT,V1,0007 -SRA V0,AT,0x3 ;V0=width to nearest 0x8 bounds, /8 -//7F0AD2FC: -BGTZ V0,7F0AD30C ;branch if not zero or negative -ANDI T9,A2,0FFF ;T9=#pixels & FFF -BEQ R0,R0,7F0AD310 ;default width to 1 -ADDIU A3,R0,0001 -//7F0AD30C: -OR A3,V0,R0 ;A3=width -BGTZ V0,7F0AD320 ;branch if width <=0 -ADDIU T5,A3,07FF ;T5=width+7FF -BEQ R0,R0,7F0AD324 ;default width to 1 -ADDIU A1,R0,0001 ;A1=1 -//7F0AD320: -OR A1,V0,R0 ;A1=width -DIV T5,A1 -BNEZ A1,7F0AD334 ;branch if width not zero, which at tis point it couldn't be -NOP -BREAK -//7F0AD334: -ADDIU AT,R0,FFFF -BNE A1,AT,7F0AD34C ;branch if width not -1 -LUI AT,8000 -BNE T5,AT,7F0AD34C ;branch if width+7FF not 80000000 -NOP -BREAK -//7F0AD34C: -MFLO T6 ;T5/A1: width+7FF / width -ANDI T7,T6,0FFF ;T7=lrt -LUI AT,0700 ;AT=07000000: tile=7 -OR T4,T7,AT ;T4=tile | lrt -SLL T8,T9,0xC ;T8=#pixels*0x1000: lrs -OR T5,T4,T8 ;T5=tile | lrs | lrt -SW T5,0004 (T0) ;T0+4= loadblock.l: tile=7, lrs, lrt -//7F0AD368: [ASCII] pipesync -OR V0,S0,R0 ;V0=S0: p->DL -LUI T6,E700 -SW T6,0000 (V0) ;V0+0: pipesync.u -SW R0,0004 (V0) ;V0+4: pipesync.l -//7F0AD378: [ASCII] settile -LW T7,000C (S1) ;T7=charentry+C: width -ADDIU S0,S0,0008 ;S0+=8 next DL -OR V1,S0,R0 ;V1=S0: p->DL -ADDIU T9,T7,0007 -ANDI T4,T9,00F8 ;T4=width to nearest 0x8 bound -ADDIU T8,T4,0007 -SRA T5,T8,0x3 ;T5=ceil(width)/8: line -ANDI T6,T5,01FF ;T6= line & 0x1FF -SLL T7,T6,0x9 ;T7=line -LUI AT,F588 -OR T9,T7,AT ;T9=i | 8bit | line -ADDIU S0,S0,0008 ;S0+=8 next DL -OR A0,S0,R0 ;A0=S0: p->DL -SW T9,0000 (V1) ;V1+0= settile.u: i 8bit -LUI T4,F200 -SW R0,0004 (V1) ;V1+4= settile.l: tile=0 -//7F0AD3B8: [ASCII] settilesize -SW T4,0000 (A0) ;A0+0= settilesize.u: uls=0, ult=0 -LW T8,000C (S1) ;T8=charentry+C: width -ADDIU S0,S0,0008 ;S0+=8 next DL -ADDIU T5,T8,0007 -ANDI T6,T5,00F8 ;T6=width to nearest 0x8 bound -LW T5,0008 (S1) ;T5=charentry+8: height -ADDIU T7,T6,FFFF ;T7=width-1: 0-x, not 1-x -SLL T9,T7,0x2 ;T9=width*4: #words -ANDI T4,T9,0FFF ;T4=width&FFF -ADDIU T6,T5,FFFF ;T6=height-1: 0-x, not 1-x -SLL T7,T6,0x2 ;T7=height*4: #words -ANDI T9,T7,0FFF ;T9=height&FFF -SLL T8,T4,0xC ;T8=width*0x1000:lrs -OR T4,T8,T9 ;T4=lrs|lrt -BEQ R0,R0,7F0AD6A4 -SW T4,0004 (A0) ;A0+4= settilesize.l: tile=0, lrs, lrt -//7F0AD3F8: [JSHFT] pipesync -ADDIU S0,S0,0008 ;S0+=8 next DL -LUI T5,E700 -SW T5,0000 (V0) ;V0+0= pipesync.u -SW R0,0004 (V0) ;V0+4= pipesync.l -//7F0AD408: [JSHFT] setothermode_h -OR V1,S0,R0 ;V1=S0: p->DL -LUI T6,BA00 -ORI T6,T6,0E02 ;T6= texture lut -ORI T7,R0,C000 -SW T7,0004 (V1) ;V1+4= setothermode_h.l: ia16 -SW T6,0000 (V1) ;V1+0= setothermode_h.u: texture look-up table -//7F0AD420: [JSHFT] check if you can look up the characters -LW T8,0000 (A1) ;T8=80040EA8: 1 allows j-character lookup... -ADDIU S0,S0,0008 ;S0+=8 next DL -OR A3,S0,R0 ;A3=S0: p->DL -BEQ T8,R0,7F0AD588 ;branch if zero -//7F0AD410: [JSHFT] settextureimage -LUI T9,FD10 -SW R0,0000 (A1) ;0->80040EA8: disallow more j-char lookup until reinitialized -SW T9,0000 (A3) ;A3+0= settextureimage.u: rgba 16bit -LUI A0,8004 -ADDIU A0,A0,0EBC ;A0=80040EBC: p->japanese font palette -SW T3,0020 (SP) ;SP+20=T3: max.y+y.off -SW T1,00E0 (SP) ;SP+E0=T1: cur.ypos -SW A3,00B4 (SP) ;SP+B4=A3: p->DL -JAL 7000E8B0 ;V0= offset corresponding to address A0 -ADDIU S0,S0,0008 ;S0+=8 next DL -LW A3,00B4 (SP) ;A3=SP+B4: p->DL -LW T1,00E0 (SP) -LW T3,0020 (SP) -OR V1,S0,R0 ;V1=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SW V0,0004 (A3) ;A3+4= settextureimage.l: o->palette -//7F0AD470: [JSHFT] tilesync -OR A0,S0,R0 ;A0=S0: p->DL -LUI T4,E800 -LUI T5,F500 -ORI T5,T5,0100 -SW T4,0000 (V1) ;V1+0= tilesync.u -SW R0,0004 (V1) ;V1+4= tilesync.l -//7F0AD488: [JSHFT] settile -SW T5,0000 (A0) ;A0+0= settile.u: ci 16bit -ADDIU S0,S0,0008 ;S0+=8 next DL -LUI T6,0700 -SW T6,0004 (A0) ;A0+4= settile.l: tile=7, pal=0, no clamp/mirror/mask/shift -//7F0AD498: [JSHFT] loadsync -OR A1,S0,R0 ;A1=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -OR A2,S0,R0 ;A2=S0: p->DL -LUI T7,E600 -SW T7,0000 (A1) ;A!+0= loadsync.u -ADDIU S0,S0,0008 ;S0+=8 next DL -SW R0,0004 (A1) ;A1+4= loadsync.l -//7F0AD4B4: [JSHFT] loadtlut -LUI T9,0703 -ORI T9,T9,C000 ;T9=tile=7, size=F (0x3C/4), start=0 -OR T0,S0,R0 ;T0=S0: p->DL -LUI T8,F000 -SW T8,0000 (A2) ;A2+0= loadtlut.u: x0=0, y0=0 -SW T9,0004 (A2) ;A2+4= loadtlut.l: tile=7, size=F (0x3C/4), start=0 -//7F0AD4CC: [JSHFT] pipesync -ADDIU S0,S0,0008 ;S0+=8 next DL -LUI T4,E700 -SW T4,0000 (T0) ;T0+0= pipesync.u -SW R0,0004 (T0) ;T0+4= pipesync.l -//7F0AD4DC: [JSHFT] settextureimage -OR A3,S0,R0 ;A3=S0: p->DL -LUI T5,FD10 -SW T5,0000 (A3) ;A3+0= settextureimage.u: rgba 16bit -LUI A0,8004 -ADDIU A0,A0,0EDC ;A0=80040EDC: other japanese greyscale palette -SW A3,009C (SP) ;SP+9C=A3: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SW T1,00E0 (SP) -JAL 7000E8B0 ;V0= offset corresponding to address A0 -SW T3,0020 (SP) -LW A3,009C (SP) ;A3=SP+9C: p->DL -LW T1,00E0 (SP) -LW T3,0020 (SP) -OR V1,S0,R0 ;V1=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -LUI T6,E800 -SW V0,0004 (A3) ;A3+4= settextureimage.l: o->palette -//7F0AD520: [JSHFT] tilesync -SW T6,0000 (V1) ;V1+0= tilesync.u -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SW R0,0004 (V1) ;V1+4= tilesync.l -//7F0AD530: [JSHFT] settile -LUI T7,F500 -ORI T7,T7,0110 -OR A1,S0,R0 ;A1=S0: p->DL -LUI T8,0700 -SW T8,0004 (A0) ;A0+4= settile.l: tile=7, pal=0, no clamp/mirror/mask/shift -ADDIU S0,S0,0008 ;S0+=8 next DL -SW T7,0000 (A0) ;A0+0= settile.u: 16bit ci, tmem=110 -//7F0AD54C: [JSHFT] loadsync -OR A2,S0,R0 ;A2=S0: p->DL -LUI T9,E600 -SW T9,0000 (A1) ;A1+0= loadsync.u -ADDIU S0,S0,0008 ;S0+=8 next DL -SW R0,0004 (A1) ;A1+4= loadsync.l -//7F0AD560: [JSHFT] loadtlut -LUI T5,0703 -ORI T5,T5,C000 ;T5=tile=7, size=F (0x3C/4), start=0 -OR T0,S0,R0 ;T0=S0: p->DL -LUI T4,F000 -SW T4,0000 (A2) ;A2+0= loadtlut.u: x0=0, y0=0 -SW T5,0004 (A2) ;A2+4= loadtlut.l: tile=7, size=F (0x3C/4), start=0 -//7F0AD578: [JSHFT] pipesync -LUI T6,E700 -SW T6,0000 (T0) ;T0+0= pipesync.u -SW R0,0004 (T0) ;T0+4= pipesync.l -ADDIU S0,S0,0008 ;S0+=8 next DL -//7F0AD588: [JSHFT] settextureimage -OR A1,S0,R0 ;A1=S0: p->DL -LUI T7,FD50 -SW T7,0000 (A1) ;A1+0= settextureimage.u: ci 16bit -LW A0,0014 (S1) ;A0=charentry+14: p->image -SW T3,0020 (SP) -SW T1,00E0 (SP) -SW A1,0084 (SP) -JAL 7000E8B0 ;V0= offset corresponding to address A0 -ADDIU S0,S0,0008 ;S0+=8 next DL -LW A1,0084 (SP) -LW T1,00E0 (SP) -LW T2,010C (SP) ;T2=SP+10C: uly -LW T3,0020 (SP) -OR V1,S0,R0 ;V1=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SW V0,0004 (A1) ;A1+4= settextureimage.l: -//7F0AD5C8: [JSHFT] settile -LUI T0,0700 -LUI T8,F550 -OR A0,S0,R0 ;A0=S0: p->DL -SW T8,0000 (V1) ;V1+0= settile.u: ci 16bit -SW T0,0004 (V1) ;V1+4= settile.l: tile=7, pal=0, no clamp/mirror/mask/shift -//7F0AD5DC: [JSHFT] loadsync -ADDIU S0,S0,0008 ;S0+=8 next DL -LUI T9,E600 -SW T9,0000 (A0) ;A0+0= loadsync.u -SW R0,0004 (A0) ;A0+4= loadsync.l -//7F0AD5EC: [JSHFT] loadblock -OR A2,S0,R0 ;A2=S0: p->DL -LUI T4,F300 -SW T4,0000 (A2) ;A2+0= loadblock.u: uls=0, ult=0 -LW A3,0008 (S1) ;A3=charentry+8: height -ADDIU S0,S0,0008 ;S0+=8 next DL -OR V0,S0,R0 ;V0=S0: p->DL -SLL T5,A3,0x2 ;T5=height*4 -ADDIU A3,T5,FFFF ;A3=height*4-1: 0-x, not 1-x -SLTI AT,A3,07FF ;TRUE if valid size -BEQ AT,R0,7F0AD620 ;set to default if too large -ADDIU S0,S0,0008 ;S0+=8 next DL -BEQ R0,R0,7F0AD624 -OR A1,A3,R0 ;A1=A3: height -//7F0AD620: -ADDIU A1,R0,07FF ;A1=7FF: default height -//7F0AD624: -ANDI T6,A1,0FFF ;T6=height & FFF -SLL T7,T6,0xC ;T7=height*0x1000: lrs -OR T8,T7,T0 ;T8= tile=7 | lrs -ORI T9,T8,0800 ;T9= tile=7 | lrs | lrt=800 -SW T9,0004 (A2) ;A2+4= loadblock.l -//7F0AD638: [JSHFT] pipesync -LUI T4,E700 -LUI T5,F540 -SW T4,0000 (V0) ;V0+0= pipesync.u -SW R0,0004 (V0) ;V0+4= pipesync.l -//7F0AD648: [JSHFT] settile -ORI T5,T5,0200 -OR V1,S0,R0 ;V1=S0: p->DL -SW T5,0000 (V1) ;V1+0= settile.u: ci 4bit, line=1 -LW T7,0000 (S1) ;T7=charentry+0: char# -LUI AT,0008 -ADDIU S0,S0,0008 ;S0+=8 next DL -ANDI T8,T7,0001 ;T8=TRUE if second in nehe set -SLL T9,T8,0x14 ;palette=1 if nehe second image -OR T4,T9,AT ;T4= pal | clampt -ORI T5,T4,0200 ;T5= pal | clampt | clamps -SW T5,0004 (V1) ;V1+4= settile.l: pal | clampt | clamps -//7F0AD674: [JSHFT] settilesize -OR A0,S0,R0 ;A0=S0: p->DL -LUI T6,F200 -SW T6,0000 (A0) ;A0+0= settilesize.u: -LW T7,0008 (S1) ;T7=charentry+8: height -LUI AT,0003 -ORI AT,AT,C000 ;AT=0003C000 -ADDIU T8,T7,FFFF ;T8=height-1 -SLL T9,T8,0x2 ;T9=2(height-1) -ANDI T4,T9,0FFF ;T4=lrt -OR T5,T4,AT ;T5= lrs=3C | lrt -SW T5,0004 (A0) ;A0+4= settilesize.l: -ADDIU S0,S0,0008 ;S0+=8 next DL -//7F0AD6A4: [jointly] work out how to display character -LW T6,00F4 (SP) ;T6=@xpos -LW T8,000C (S1) ;T8=S1+C: width -LW T9,0024 (SP) ;T9=SP+24: cutoff.xpos -LW T7,0000 (T6) ;T7=cur.xpos -ADDU T0,T7,T8 ;T0=cur.xpos+width -SLT AT,T9,T0 ;TRUE if cutoff.xpos < cur.xpos+width -BNEL AT,R0,7F0ADA94 ;return if cur.position exceeds maximum display cutoff -LW T4,00F4 (SP) ;T4=@xpos -LW A0,0004 (S1) ;A0=charentry+4: y.off -ADDU V1,A0,T1 ;V1=y.off + cur.ypos: disp.uly -SLT AT,V1,T2 ;TRUE if disp.uly < uly -BNEL AT,R0,7F0AD9A4 ;branch if disp.min < min image display position -LW T6,0008 (S1) -LW T4,0008 (S1) ;T4=charentry+8: height -LUI T5,8004 -ADDU V0,V1,T4 ;V0=y.off + cur.ypos + height: lry -SLT AT,T3,V0 ;TRUE if lry < disp.lry -BNEL AT,R0,7F0AD8C8 ;branch if given lry < disp.lry -SLT AT,T3,V1 -LW T5,0E88 (T5) ;T5=80040EB8: p->2nd font table -LUI A2,8004 -ADDIU A2,A2,0E98 ;A2=80040E98 -BEQ T5,R0,7F0AD7F8 ;use normal texrect if NULL pointer to table2 -LUI A3,8004 -//7F0AD704: [jointly] texrectflip -LUI A2,8004 -ADDIU A2,A2,0E98 ;A2=80040E98 -LW T7,0000 (A2) ;T7=80040E98: -LUI A3,8004 -SLL T6,T0,0x2 ;T6=(cur.xpos+width)*4: lrx -ADDIU A3,A3,0E9C ;A3=80040E9C -ADDU T8,T6,T7 ;T8= lrx+offset? -LW T7,0000 (A3) ;T7=80040E9C: -ANDI T9,T8,0FFF ;T9= lrx & FFF -SUBU T5,T1,A0 ;T5=cur.ypos-y.off -SLL T6,T5,0x2 ;T6=(cur.ypos-y.off)*4: lry -LUI AT,E500 -OR T4,T9,AT ;T4= texrectflip | lrx -ADDU T8,T6,T7 ;T8= lry+offset? -ANDI T9,T8,0FFF ;T9= lry & FFF -SLL T5,T9,0xC ;T5= lry * 0x1000 -OR T6,T4,T5 ;T6= texrectflip | lry | lrx -OR V0,S0,R0 ;V0=S0: p->DL -SW T6,0000 (V0) ;V0+0= texrectflip.u.u: lry, lrx -//7F0AD750: [jointly] texrectflip.u.l -LW T7,00F4 (SP) ;T7=@xpos -LW T4,0000 (A2) ;T4=80040E98: -ADDIU S0,S0,0008 ;S0+=8 next DL -LW T8,0000 (T7) ;T8=cur.xpos -LW T7,0004 (S1) ;T7=charentry+4: y.off -OR V1,S0,R0 ;V1=S0: p->DL -SLL T9,T8,0x2 ;T9=cur.xpos*4 -ADDU T5,T9,T4 ;T5=cur.xpos+offset?: ulx -LW T9,0008 (S1) ;T9=charentry+8: height -SUBU T8,T1,T7 ;T8=cur.ypos-y.off -LW T7,0000 (A3) ;T7=80040E9C: -ANDI T6,T5,0FFF ;T6=ulx & FFF -SUBU T4,T8,T9 ;T4=cur.ypos+y.off-height -SLL T5,T4,0x2 ;T5=(cur.ypos+y.off-height)*4 -ADDU T8,T5,T7 ;T8=cur.ypos+offset?: uly -ANDI T9,T8,0FFF ;T9=uly & FFF -SLL T4,T9,0xC ;T4=uly*0x1000 -OR T5,T6,T4 ;T5= uly | ulx -SW T5,0004 (V0) ;V0+4= texrectflip.u.l: tile=0, uly, ulx -//7F0AD79C: [jointly] rdphalf_1 - texrectflip.l.u -LUI T7,B400 -SW T7,0000 (V1) ;V1+0= rdphalf_1 -LW T8,0008 (S1) ;T8=charentry+8: height -LUI T4,8004 -LW T4,0EA0 (T4) ;T4=80040EA0: base t -ADDIU T9,T8,FFFF ;T9=height-1 -SLL T6,T9,0x5 ;T6=(height-1) * 0x20 -LUI T8,8004 -LW T9,0EA4 (T8) ;T9=80040EA4: s -ADDU T5,T6,T4 ;T5=t+offset?: t -ANDI T7,T5,FFFF ;T7= t & FFFF -ADDIU S0,S0,0008 ;S0+=8 next DL -SLL T6,T9,0x10 ;T6= offset * 0x10000: s -OR T4,T6,T7 ;T4= s | t -OR A1,S0,R0 ;A1=S0: p->DL -LUI T8,0400 -ORI T8,T8,FC00 ;T8=0400FC00 -SW T4,0004 (V1) ;V1+4= texrectflip.l.u: s, t -//7F0AD7E4: [jointly] rdphalf_2 - texrectflip.l.l -LUI T5,B300 -SW T5,0000 (A1) ;A1+0= rdphalf_2 -SW T8,0004 (A1) ;A1+4= texrectflip.l.l: dsdx=0400, dtdy=-400 -BEQ R0,R0,7F0ADA90 -ADDIU S0,S0,0008 ;S0+=8 next DL -//7F0AD7F8: [jointly] texrect: -LW T6,0000 (A2) ;T6=80040E98: -SLL T9,T0,0x2 ;T9=(cur.xpos+width)*4: lrx -ADDIU A3,A3,0E9C ;A3=80040E9C -ADDU T7,T9,T6 ;T7= lrx+offset -LW T6,0000 (A3) ;T6=80040E9C: -ANDI T4,T7,0FFF ;T4= lrx & FFF -SLL T5,T4,0xC ;T5= lrx * 0x1000 -SLL T9,V0,0x2 ;T9=(y.off + cur.ypos + height)*4: lry -LUI AT,E400 -ADDU T7,T9,T6 ;T7= lry+offset -ANDI T4,T7,0FFF ;T4= lry & FFF -OR T8,T5,AT ;T8= texrect.u,u | lrx -OR T5,T8,T4 ;T5= texrect.u.u | lrx | lry -OR V1,S0,R0 ;V1=S0: p->DL -SW T5,0000 (V1) ;V1+0= texrect.u.u: lrx, lry -//7F0AD834: [jointly] texrect.u.l -LW T9,00F4 (SP) ;T9=@xpos -LW T8,0000 (A2) ;T8=80040E98: -ADDIU S0,S0,0008 ;S0+=8 next DL -LW T6,0000 (T9) ;T6=cur.xpos -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SLL T7,T6,0x2 ;T7= cur.xpos * 4: ulx -LW T6,0004 (S1) ;T6=charentry+4: y.off -ADDU T4,T7,T8 ;T4= ulx + offset -ANDI T5,T4,0FFF ;T5= ulx & FFF -LW T4,0000 (A3) ;T4=80040E9C: -ADDU T7,T1,T6 ;T7=cur.ypos + y.off -SLL T8,T7,0x2 ;T8=(cur.ypos + y.off)*4: uly -SLL T9,T5,0xC ;T9=ulx * 0x1000 -ADDU T5,T8,T4 ;T5=uly + offset -ANDI T6,T5,0FFF ;T6= uly & FFF -OR T7,T9,T6 ;T7= ulx | uly -SW T7,0004 (V1) ;V1+4= texrect.u.l: tile=0, ulx, uly -//7F0AD87C: [jointly] rdphalf_1 - texrect.l.u -LUI T8,B400 -SW T8,0000 (A0) ;A0+0= rdphalf_1 -LUI T4,8004 -LW T5,0EA0 (T4) ;T5=80040EA0: base s -LUI T6,8004 -LW T6,0EA4 (T6) ;T6=80040EA4: base t -SLL T9,T5,0x10 ;T9=s * 0x10000 -LUI T5,0400 -ANDI T7,T6,FFFF ;T7= t & FFFF -OR T8,T9,T7 ;T8= uls | ult -OR A1,S0,R0 ;A1=S0: p->DL -SW T8,0004 (A0) ;A0+4= texrect.l.u: uls, ult -//7F0AD8AC: [jointly] rdphalf_2 - texrect.l.l -ORI T5,T5,0400 -LUI T4,B300 -SW T4,0000 (A1) ;A1+0= rdphalf_2 -SW T5,0004 (A1) ;A1+4= texrect.l.l: dsdx=0400, dtdy=400 -BEQ R0,R0,7F0ADA90 -ADDIU S0,S0,0008 ;S0+=8 next DL -//7F0AD8C4: [jointly] texrect: given.lry < disp.lry -SLT AT,T3,V1 ;TRUE if max.ypos < (cur.ypos+y.off) -BNEZ AT,7F0ADA90 ;return if out of bounds -//7F0AD8CC: [jointly] texrect.u.u -LUI A2,8004 -ADDIU A2,A2,0E98 ;A2=80040E98 -LW T9,0000 (A2) ;T9=80040E98: -LUI A3,8004 -SLL T6,T0,0x2 ;T6=(cur.xpos+width)*4: lrx -ADDIU A3,A3,0E9C ;A3=80040E9C -ADDU T7,T6,T9 ;T7=lrx + offset -LW T6,0000 (A3) ;T6=80040E9C: -ANDI T8,T7,0FFF ;T8= lrx & FFF -SLL T4,T8,0xC ;T4= lrx * 0x1000 -LUI AT,E400 -ADDU T9,T3,T6 ;T9=max.ypos + offset -ANDI T7,T9,0FFF ;T7= lry & FFF -OR T5,T4,AT ;T5= texrect.u,u | ulx -OR T8,T5,T7 ;T8= texrect.u,u | ulx | uly -OR V0,S0,R0 ;V0=S0: p->DL -SW T8,0000 (V0) ;V0+0= texrect.u,u: ulx, uly -//7F0AD910: [jointly] texrect.u.l -LW T4,00F4 (SP) ;T4=@xpos -LW T5,0000 (A2) ;T5=80040E98: -ADDIU S0,S0,0008 ;S0+=8 next DL -LW T6,0000 (T4) ;T6=cur.xpos -OR V1,S0,R0 ;V1=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SLL T9,T6,0x2 ;T9=cur.xpos * 4: ulx -LW T6,0004 (S1) ;T6=charentry+4: y.off -ADDU T7,T9,T5 ;T7= ulx + offset -ANDI T8,T7,0FFF ;T8= ulx & FFF -LW T7,0000 (A3) ;T7=80040E9C: -ADDU T9,T1,T6 ;T9=cur.ypos+y.off -SLL T5,T9,0x2 ;T5=(cur.ypos+y.off) * 4: uly -SLL T4,T8,0xC ;T4=ulx * 0x1000 -ADDU T8,T5,T7 ;T8=uly + offest -ANDI T6,T8,0FFF ;T6=uly & FFF -OR T9,T4,T6 ;T9= ulx | uly -SW T9,0004 (V0) ;V0+4= texrect.u.l: tile=0, ulx, uly -// [jointly] rdphalf_1 - texrect.l.u -LUI T5,B400 -SW T5,0000 (V1) ;V1+0= rdphalf_1 -LUI T7,8004 -LW T8,0EA0 (T7) ;T8=80040EA0: base s -LUI T6,8004 -LW T6,0EA4 (T6) ;T6=80040EA4: base t -SLL T4,T8,0x10 ;T4= s * 0x10000 -LUI T8,0400 -ANDI T9,T6,FFFF ;T9= t & FFFF -OR T5,T4,T9 ;T5= s | t -OR A0,S0,R0 ;A0=S0: p->DL -SW T5,0004 (V1) ;V1+4= texrect.l.u: uls, ult -//7F0AD988: [jointly] rdphalf_2 - texrect.l.l -ORI T8,T8,0400 -LUI T7,B300 -SW T7,0000 (A0) ;A0+0= rdphalf_2 -SW T8,0004 (A0) ;A0+4= texrect.l.l: dsdx=0400, dtdy=400 -BEQ R0,R0,7F0ADA90 -ADDIU S0,S0,0008 ;S0+=8 next DL -//7F0AD9A0: [jointly] texrect: disp.uly < given.uly -LW T6,0008 (S1) ;T6=charentry+8: height -LUI A2,8004 -ADDIU A2,A2,0E98 ;A2=80040E98 -ADDU V0,V1,T6 ;V0=(cur.ypos+y.off)+height -SLT AT,V0,T2 ;TRUE if disp.ypos < uly -BNEZ AT,7F0ADA90 ;return if not within bounds -LUI A3,8004 -//7F0AD9BC: [jointly] texrect.u,u -LW T9,0000 (A2) ;T9=80040E98: -SLL T4,T0,0x2 ;T0=(cur.xpos+width)*4 -ADDIU A3,A3,0E9C ;A3=80040E9C -ADDU T5,T4,T9 ;T5=lrx + offset -LW T9,0000 (A3) ;T9=80040E9C: -ANDI T7,T5,0FFF ;T7=lrx & FFF -SLL T8,T7,0xC ;T8=lrx * 0x1000 -SLL T4,V0,0x2 ;T4=(y.off + cur.ypos + height)*4: lry -LUI AT,E400 -ADDU T5,T4,T9 ;T5=lry+offset -ANDI T7,T5,0FFF ;T7=lry & FFF -OR T6,T8,AT ;T6= texrect.u,u | lrx -OR T8,T6,T7 ;T8= texrect.u,u | lrx | lry -OR V1,S0,R0 ;V1=S0: p->DL -SW T8,0000 (V1) ;V1+0= texrect.u,u: lrx, lry -//7F0AD9F8: [jointly] texrect.u,l -LW T4,00F4 (SP) ;T4=@xpos -LW T6,0000 (A2) ;T6=80040E98: -ADDIU S0,S0,0008 ;S0+=8 next DL -LW T9,0000 (T4) ;T9=cur.xpos -OR A0,S0,R0 ;A0=S0: p->DL -ADDIU S0,S0,0008 ;S0+=8 next DL -SLL T5,T9,0x2 ;T5=cur.xpos*4: ulx -ADDU T7,T5,T6 ;T7=ulx + offset -LW T5,0000 (A3) ;T5=80040E9C: -ANDI T8,T7,0FFF ;T8= ulx & FFF -SLL T9,T2,0x2 ;T9=uly * 4 (from calling function): uly -ADDU T6,T9,T5 ;T6=uly + offset -ANDI T7,T6,0FFF ;T7=uly & FFF -SLL T4,T8,0xC ;T4=ulx * 0x1000 -OR T8,T4,T7 ;T8= ulx | uly -SW T8,0004 (V1) ;V1+4= texrect.u.l: tile=0, ulx, uly -// [jointly] rdphalf_1 - texrect.l.u -LUI T9,B400 -SW T9,0000 (A0) ;V1+0= rdphalf_1 -LW T6,0004 (S1) ;T6=charentry+4: y.off -SUBU T5,T2,T1 ;T5=uly - cur.ypos -LUI T8,8004 -SUBU T4,T5,T6 ;T4=uly - cur.ypos - y.off -LW T8,0EA4 (T8) ;T8=80040EA4: base t -SLL T7,T4,0x5 ;T7=(uly - cur.ypos - y.off) * 20 -LUI T6,8004 -LW T4,0EA0 (T6) ;T4=80040EA0: base s -ADDU T9,T7,T8 ;T9=(uly - cur.ypos - y.off) * 20 + t: correction for negative y? -ANDI T5,T9,FFFF -SLL T7,T4,0x10 ;T7= s * 0x10000 -OR T8,T7,T5 ;T8=s | t -OR A1,S0,R0 ;A1=S0: p->DL -SW T8,0004 (A0) ;A0+4= texrect.l.u: uls, ult -//7F0ADA78: [jointly] rdphalf_2 - texrect.l.l -LUI T6,0400 -ORI T6,T6,0400 ;T6=04000400: change in s/t to change in x/y -LUI T9,B300 -SW T9,0000 (A1) ;A1+0= rdphalf_2 -SW T6,0004 (A1) ;A1+4= texrect.l.l: dsdx=0400, dtdy=400 -ADDIU S0,S0,0008 ;S0+=8 next DL -//7F0ADA90: [return] set new x position -LW T4,00F4 (SP) ;T4=SP+F4: @width -LW T5,000C (S1) ;T5=charentry+C: width -OR V0,S0,R0 ;V0=S0: p->DL -LW T7,0000 (T4) ;T7=cur.width -ADDU T8,T7,T5 ;T8=cur.width+width -SW T8,0000 (T4) ;update cur.width -//7F0ADAA8: return -LW RA,001C (SP) -LW S1,0018 (SP) -LW S0,0014 (SP) -JR RA -ADDIU SP,SP,00F0 - -+_+ - -7000E8B0 V0=rdram offset derived from pointer A0; used to produce microcode memory addresses for ops - Must be a valid pointer, but may be to rdram, uncached memory, or a TLB address - accepts: A0=pointer -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) ;SP+18=A0: pointer -LW T6,0018 (SP) ;T6=pointer -LUI AT,8000 -SW RA,0014 (SP) -SLTU AT,T6,AT ;AT=TRUE if isn't rdram address (offset) -BNEZ AT,7000E8E8 ;branch if 80000000 or above -LUI AT,A000 -SLTU AT,T6,AT ;AT=TRUE if between rdram and mirror (normal address) -BEQ AT,R0,7000E8E8 ;branch if isn't a ram address -LUI AT,1FFF -ORI AT,AT,FFFF ;AT=1FFFFFFF -BEQ R0,R0,7000E91C -AND V0,T6,AT ;V0=pointer & mask -//7000E8E8: check if in uncached memory -LW T7,0018 (SP) ;T7=p->palette -LUI AT,A000 -SLTU AT,T7,AT ;TRUE if rdram or ROM address -BNEZ AT,7000E914 ;branch if someplace there -LUI AT,C000 -SLTU AT,T7,AT ;TRUE if in rdram mirror (A0-C0) -BEQ AT,R0,7000E914 ;branch if isn't in mirror -LUI AT,1FFF -ORI AT,AT,FFFF ;AT=1FFFFFFF -BEQ R0,R0,7000E91C -AND V0,T7,AT ;V0=pointer & mask -//7000E914: see if it's a TLB address -JAL 70019020 ;V0=offset corresponding to TLB address -LW A0,0018 (SP) ;A0=pointer -//7000E91C: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP - -70019020 19C20 V0=rdram offset corresponding to TLB address A0, or -1 if invalid - fries: AT,T0,T1,T2,T3,T4,T5 -MFC0 T0,EntryHi ;T0=TLB address corresponding to Index -ANDI T1,T0,00FF ;T1=TLB address offset, which should always be 0 -ADDIU AT,R0,E000 ;AT=FFFFE000: mask for 0x2000 partitions -AND T2,A0,AT ;T2=address & mask: TLB entry start -OR T1,T1,T2 ;T1+=offset likely always 0 -MTC0 T1,EntryHi ;EntryHi=TLB address to probe -NOP -NOP -NOP -TLBP ;probe TLB for EntryHi -NOP -NOP -MFC0 T3,Index ;T3=index for matching entry if found -LUI AT,8000 -AND T3,T3,AT ;T3=TRUE if invalid -BNEZ T3,700190C8 ;reurn invalid if can't be read -NOP -TLBR ;read TLB Index's entry -NOP -NOP -NOP -MFC0 T3,PageMask ;T3=pagemask -ADDI T3,T3,2000 ;T3+=2000: next page -SRL T3,T3,0x1 ;T3/=2 -AND T4,T3,A0 ;T4=p->TLB & pagemask -BNEZ T4,70019098 ;use EntryLo1 if mask found -ADDI T3,T3,FFFF ;T3-- convert to mask -MFC0 V0,EntryLo0 -BEQ R0,R0,7001909C ;use EntryLo0 otherwise -NOP -//70019098: -MFC0 V0,EntryLo1 -//7001909C: -ANDI T5,V0,0002 -BEQ T5,R0,700190C8 ;return invalid if 0x2 detected -NOP -LUI AT,3FFF -ORI AT,AT,FFC0 ;AT=3FFFFFC0 -AND V0,V0,AT ;V0=Entry & mask: offset & mask to get beginning of TLB segment -SLL V0,V0,0x6 ;V0*=0x40: offset in rdram to start of TLB segment -AND T5,A0,T3 ;T5=address & pagemask: offset from start of segment -ADD V0,V0,T5 ;V0=rdram offset to segment + offset from start of segment: rdram offset -BEQ R0,R0,700190CC -NOP -//700190C8: return invalid (-1) -ADDIU V0,R0,FFFF -//700190CC: return -MTC0 T0,EntryHi ;stuff original EntryHi back onto COP0 -JR RA -NOP diff --git a/notes/GE Documentation/images text and font/Fonts/ASCII Font table entries.txt b/notes/GE Documentation/images text and font/Fonts/ASCII Font table entries.txt deleted file mode 100644 index 16da373..0000000 --- a/notes/GE Documentation/images text and font/Fonts/ASCII Font table entries.txt +++ /dev/null @@ -1,14 +0,0 @@ -2E63F0 first font table controller - small watch text -2E6694 second font table controller - small watch text -2E88A0 first font table controller - large -2E8B44 second font table controller - large - - - -second controller format 0x18 each entry -0x0 -0x4 vertical offset -0x8 height -0xC width -0x10 -0x14 offset to image (converted to pointer at runtime) diff --git a/notes/GE Documentation/images text and font/Fonts/Font.rar b/notes/GE Documentation/images text and font/Fonts/Font.rar deleted file mode 100644 index d3cc27d..0000000 Binary files a/notes/GE Documentation/images text and font/Fonts/Font.rar and /dev/null differ diff --git a/notes/GE Documentation/images text and font/Fonts/japanese/JS font.png b/notes/GE Documentation/images text and font/Fonts/japanese/JS font.png deleted file mode 100644 index 06e0d8e..0000000 Binary files a/notes/GE Documentation/images text and font/Fonts/japanese/JS font.png and /dev/null differ diff --git a/notes/GE Documentation/images text and font/Fonts/japanese/how to read the JS font png in this folder.txt b/notes/GE Documentation/images text and font/Fonts/japanese/how to read the JS font png in this folder.txt deleted file mode 100644 index 239e5a6..0000000 --- a/notes/GE Documentation/images text and font/Fonts/japanese/how to read the JS font png in this folder.txt +++ /dev/null @@ -1,39 +0,0 @@ - In this folder is a file called "JS font.png". It was output in a very particular way to aid in matching kanji to their binary values. - - First, the binary format uses two bytes, like this: -809F - The first value (80) is the group code. There are eight groups total with 0x80 entries each: -80xx -81xx -82xx -83xx -84xx -85xx -86xx -87xx - The second byte (9F) is the entry number. These range from 80-FF. - -In the image: - Blue lines denote group codes. There are eight columns with 80xx starting on the left. - In each group there are two columns of characters. This has to do with the way the characters are stored. They should be counted left to right, down the page like so: -0 1 -2 3 -4 5 -6 7 -8 9 -A B -C D -E F - Red horizontal lines break up each clump of 0x10 entries. The top row is 80, the next 90, and so forth. - -+_+ - -Example: - Lets find the binary code for "@". In the image, it appears in the first column and fifth row. The first column is 80xx, and the fifth row is xxC0. Starting from the upper left corner of the clump, count left to right starting at 0. @ is 1. - Combined altogether, you get 80xx + xxC0 + xxx1, or 80C1. - -+_+ - - Please note that this picture does not include the large-sized font images. - --Zoinkity diff --git a/notes/GE Documentation/images text and font/Fonts/japanese/japanese.txt b/notes/GE Documentation/images text and font/Fonts/japanese/japanese.txt deleted file mode 100644 index 8579aeb..0000000 --- a/notes/GE Documentation/images text and font/Fonts/japanese/japanese.txt +++ /dev/null @@ -1,977 +0,0 @@ -  -〠-$ -( -) -・ -ï¼… -「 -〠-′ -″ -〈 -〉 -ï¿¥ -~ -  -ï¼ -1 -ï¼’ -3 -ï¼” -5 -ï¼– -ï¼— -8 -ï¼™ -A -ï¼¢ -ï¼£ -D -ï¼¥ -F -ï¼§ -H -I -J -K -L -ï¼­ -ï¼® -O -ï¼° -ï¼± -ï¼² -ï¼³ -ï¼´ -ï¼µ -ï¼¶ -ï¼· -X -ï¼¹ -Z -ï¼ -†-# -’ -* -+ -, -ー -. -ï¼ -: -ï¼ -? -ï¼  -。 -゙ -゚ -ã‚¡ -ã‚£ -ã‚¥ -ã‚§ -ã‚© -ッ -ャ -ュ -ョ -ヲ -ン -ã‚¢ -イ -ウ -エ -オ -ã‚« -ã‚­ -ク -ケ -コ -サ -ã‚· -ス -ã‚» -ソ -ã‚¿ -ム-ツ -テ -ト -ナ -ニ -ヌ -ム-ノ -ム-ヒ -フ -ヘ -ホ -マ -ミ -ム -メ -モ -ヤ -ユ -ヨ -ラ -リ -ル -レ -ロ -ワ -ガ -ã‚® -ã‚° -ゲ -ã‚´ -ã‚¶ -ジ -ズ -ゼ -ゾ -ダ -ヂ -ヅ -デ -ド -ム-ビ -ブ -ベ -ボ -パ -ピ -プ -ペ -ム-ï½ -b -c -d -ï½… -f -g -h -i -j -k -l -ï½ -n -ï½ -ï½ -q -ï½’ -s -ï½” -u -ï½– -ï½— -x -ï½™ -z -ã -ム-ã… -㇠-㉠-㣠-ゃ -ã‚… -ょ -ã‚’ -ã‚“ -ã‚ -ã„ -ㆠ-㈠-㊠-ã‹ -ã -ã -ã‘ -ã“ -ã• -ã— -ã™ -ã› -ã -㟠-ã¡ -㤠-㦠-㨠-㪠-ã« -㬠-ã­ -ã® -㯠-ã² -ãµ -㸠-ã» -ã¾ -ã¿ -ã‚€ -ã‚ -ã‚‚ -ã‚„ -ゆ -よ -ら -り -ã‚‹ -れ -ã‚ -ã‚ -㌠-㎠-ã -ã’ -ã” -ã– -㘠-ãš -㜠-ãž -ã  -㢠-㥠-ã§ -ã© -ã° -ã³ -ã¶ -ã¹ -ã¼ -ã± -ã´ -ã· -㺠-ã½ -ヴ -\h8280 -\h8281 -\h8282 -\h8283 -\h8284 -\h8285 -\h8286 -\h8287 -å·¥ -\h8289 -\h828A -\h828B -\h828C -\h828D -\h828E -\h828F -\h8290 -\h8291 -\h8292 -\h8293 -\h8294 -\h8295 -\h8296 -\h8297 -\h8298 -\h8299 -\h829A -\h829B -\h829C -\h829D -\h829E -\h829F -\h82A0 -手 -\h82A2 -\h82A3 -\h82A4 -\h82A5 -\h82A6 -\h82A7 -\h82A8 -\h82A9 -\h82AA -\h82AB -\h82AC -\h82AD -\h82AE -\h82AF -\h82B0 -\h82B1 -\h82B2 -\h82B3 -\h82B4 -\h82B5 -\h82B6 -\h82B7 -\h82B8 -\h82B9 -å…¥ -\h82BB -\h82BC -\h82BD -\h82BE -\h82BF -\h82C0 -\h82C1 -\h82C2 -\h82C3 -\h82C4 -\h82C5 -\h82C6 -\h82C7 -\h82C8 -\h82C9 -\h82CA -\h82CB -\h82CC -\h82CD -\h82CE -\h82CF -\h82D0 -\h82D1 -\h82D2 -\h82D3 -\h82D4 -\h82D5 -\h82D6 -\h82D7 -\h82D8 -\h82D9 -\h82DA -\h82DB -\h82DC -\h82DD -\h82DE -\h82DF -\h82E0 -\h82E1 -\h82E2 -\h82E3 -\h82E4 -\h82E5 -\h82E6 -\h82E7 -\h82E8 -\h82E9 -\h82EA -\h82EB -\h82EC -\h82ED -\h82EE -\h82EF -\h82F0 -\h82F1 -\h82F2 -\h82F3 -\h82F4 -\h82F5 -\h82F6 -\h82F7 -\h82F8 -\h82F9 -\h82FA -\h82FB -\h82FC -\h82FD -\h82FE -\h82FF -\h8380 -\h8381 -\h8382 -\h8383 -\h8384 -\h8385 -\h8386 -åƒ -\h8388 -\h8389 -\h838A -\h838B -\h838C -\h838D -\h838E -\h838F -\h8390 -\h8391 -\h8392 -\h8393 -\h8394 -\h8395 -\h8396 -\h8397 -\h8398 -\h8399 -\h839A -\h839B -\h839C -\h839D -\h839E -\h839F -\h83A0 -\h83A1 -\h83A2 -\h83A3 -\h83A4 -\h83A5 -\h83A6 -\h83A7 -\h83A8 -\h83A9 -\h83AA -\h83AB -\h83AC -\h83AD -\h83AE -\h83AF -\h83B0 -\h83B1 -\h83B2 -\h83B3 -\h83B4 -\h83B5 -\h83B6 -\h83B7 -\h83B8 -\h83B9 -\h83BA -\h83BB -\h83BC -\h83BD -\h83BE -\h83BF -\h83C0 -\h83C1 -\h83C2 -\h83C3 -\h83C4 -\h83C5 -\h83C6 -\h83C7 -\h83C8 -\h83C9 -\h83CA -\h83CB -\h83CC -\h83CD -\h83CE -\h83CF -\h83D0 -\h83D1 -\h83D2 -\h83D3 -\h83D4 -\h83D5 -\h83D6 -\h83D7 -\h83D8 -\h83D9 -\h83DA -\h83DB -\h83DC -\h83DD -\h83DE -\h83DF -\h83E0 -\h83E1 -\h83E2 -\h83E3 -\h83E4 -\h83E5 -\h83E6 -\h83E7 -\h83E8 -\h83E9 -\h83EA -\h83EB -\h83EC -\h83ED -\h83EE -\h83EF -\h83F0 -\h83F1 -\h83F2 -\h83F3 -\h83F4 -\h83F5 -\h83F6 -\h83F7 -\h83F8 -\h83F9 -\h83FA -\h83FB -\h83FC -\h83FD -\h83FE -\h83FF -\h8480 -\h8481 -\h8482 -\h8483 -\h8484 -\h8485 -\h8486 -\h8487 -\h8488 -\h8489 -\h848A -\h848B -\h848C -\h848D -\h848E -\h848F -\h8490 -\h8491 -\h8492 -\h8493 -\h8494 -\h8495 -\h8496 -\h8497 -\h8498 -é›» -\h849A -\h849B -\h849C -\h849D -\h849E -\h849F -\h84A0 -\h84A1 -\h84A2 -\h84A3 -\h84A4 -\h84A5 -\h84A6 -\h84A7 -\h84A8 -\h84A9 -\h84AA -\h84AB -\h84AC -\h84AD -\h84AE -\h84AF -\h84B0 -\h84B1 -\h84B2 -\h84B3 -\h84B4 -\h84B5 -\h84B6 -\h84B7 -\h84B8 -\h84B9 -\h84BA -\h84BB -\h84BC -\h84BD -\h84BE -\h84BF -\h84C0 -\h84C1 -\h84C2 -\h84C3 -\h84C4 -\h84C5 -\h84C6 -\h84C7 -\h84C8 -\h84C9 -\h84CA -\h84CB -\h84CC -\h84CD -\h84CE -\h84CF -\h84D0 -\h84D1 -\h84D2 -\h84D3 -\h84D4 -\h84D5 -\h84D6 -\h84D7 -\h84D8 -\h84D9 -\h84DA -\h84DB -\h84DC -\h84DD -\h84DE -\h84DF -\h84E0 -\h84E1 -\h84E2 -\h84E3 -\h84E4 -\h84E5 -\h84E6 -\h84E7 -\h84E8 -\h84E9 -\h84EA -\h84EB -\h84EC -\h84ED -\h84EE -\h84EF -\h84F0 -\h84F1 -\h84F2 -\h84F3 -\h84F4 -\h84F5 -\h84F6 -\h84F7 -\h84F8 -\h84F9 -\h84FA -\h84FB -\h84FC -\h84FD -\h84FE -\h84FF -\h8580 -\h8581 -\h8582 -\h8583 -\h8584 -\h8585 -\h8586 -\h8587 -\h8588 -\h8589 -\h858A -\h858B -\h858C -\h858D -\h858E -\h858F -\h8590 -\h8591 -\h8592 -\h8593 -\h8594 -\h8595 -\h8596 -\h8597 -\h8598 -\h8599 -\h859A -\h859B -\h859C -\h859D -\h859E -\h859F -\h85A0 -\h85A1 -\h85A2 -\h85A3 -\h85A4 -\h85A5 -\h85A6 -\h85A7 -\h85A8 -\h85A9 -\h85AA -\h85AB -\h85AC -\h85AD -\h85AE -\h85AF -\h85B0 -\h85B1 -\h85B2 -\h85B3 -\h85B4 -\h85B5 -\h85B6 -\h85B7 -\h85B8 -\h85B9 -\h85BA -\h85BB -\h85BC -\h85BD -\h85BE -\h85BF -\h85C0 -\h85C1 -\h85C2 -\h85C3 -\h85C4 -\h85C5 -\h85C6 -\h85C7 -\h85C8 -\h85C9 -\h85CA -\h85CB -\h85CC -\h85CD -\h85CE -\h85CF -\h85D0 -\h85D1 -\h85D2 -\h85D3 -\h85D4 -\h85D5 -\h85D6 -\h85D7 -\h85D8 -\h85D9 -\h85DA -\h85DB -\h85DC -\h85DD -\h85DE -\h85DF -\h85E0 -\h85E1 -\h85E2 -\h85E3 -\h85E4 -\h85E5 -\h85E6 -\h85E7 -\h85E8 -\h85E9 -\h85EA -\h85EB -\h85EC -\h85ED -\h85EE -\h85EF -\h85F0 -\h85F1 -\h85F2 -\h85F3 -\h85F4 -\h85F5 -\h85F6 -\h85F7 -\h85F8 -\h85F9 -\h85FA -\h85FB -\h85FC -\h85FD -\h85FE -\h85FF -\h8680 -\h8681 -\h8682 -\h8683 -\h8684 -\h8685 -\h8686 -\h8687 -\h8688 -\h8689 -\h868A -\h868B -æ°‘ -\h868D -\h868E -\h868F -\h8690 -\h8691 -市 -\h8693 -\h8694 -\h8695 -\h8696 -\h8697 -\h8698 -\h8699 -\h869A -\h869B -\h869C -\h869D -\h869E -\h869F -\h86A0 -\h86A1 -\h86A2 -\h86A3 -\h86A4 -\h86A5 -\h86A6 -\h86A7 -\h86A8 -\h86A9 -\h86AA -\h86AB -\h86AC -\h86AD -\h86AE -\h86AF -\h86B0 -\h86B1 -\h86B2 -æ¿ -\h86B4 -\h86B5 -\h86B6 -\h86B7 -\h86B8 -倒 -\h86BA -\h86BB -\h86BC -\h86BD -\h86BE -\h86BF -\h86C0 -\h86C1 -\h86C2 -\h86C3 -\h86C4 -\h86C5 -\h86C6 -\h86C7 -\h86C8 -é ˆ -\h86CA -\h86CB -\h86CC -\h86CD -\h86CE -\h86CF -\h86D0 -\h86D1 -\h86D2 -\h86D3 -\h86D4 -\h86D5 -\h86D6 -\h86D7 -\h86D8 -\h86D9 -\h86DA -\h86DB -\h86DC -\h86DD -\h86DE -\h86DF -\h86E0 -\h86E1 -\h86E2 -\h86E3 -\h86E4 -\h86E5 -\h86E6 -\h86E7 -\h86E8 -\h86E9 -\h86EA -\h86EB -\h86EC -\h86ED -\h86EE -\h86EF -\h86F0 -\h86F1 -\h86F2 -\h86F3 -\h86F4 -\h86F5 -\h86F6 -\h86F7 -\h86F8 -\h86F9 -\h86FA -\h86FB -\h86FC -\h86FD -\h86FE -\h86FF -\h8780 -\h8781 -\h8782 -\h8783 -\h8784 -\h8785 -\h8786 -\h8787 -\h8788 -\h8789 -\h878A -\h878B -\h878C -\h878D -\h878E -\h878F -\h8790 -\h8791 -\h8792 -\h8793 -\h8794 -\h8795 -\h8796 -\h8797 -\h8798 -\h8799 -\h879A -\h879B -\h879C -\h879D -\h879E -\h879F -\h87A0 -\h87A1 -\h87A2 -\h87A3 -\h87A4 -\h87A5 -\h87A6 -\h87A7 -\h87A8 -\h87A9 -\h87AA -\h87AB -\h87AC -\h87AD -\h87AE -\h87AF -\h87B0 -\h87B1 -\h87B2 -\h87B3 -\h87B4 -\h87B5 -\h87B6 -\h87B7 -\h87B8 -\h87B9 -\h87BA -\h87BB -\h87BC -\h87BD -\h87BE -\h87BF -\h87C0 -\h87C1 -\h87C2 -\h87C3 -\h87C4 -\h87C5 -\h87C6 -\h87C7 -\h87C8 -\h87C9 -\h87CA -\h87CB -\h87CC -\h87CD -\h87CE -\h87CF -\h87D0 \ No newline at end of file diff --git a/notes/GE Documentation/images text and font/Fonts/japanese/japaneselarge.txt b/notes/GE Documentation/images text and font/Fonts/japanese/japaneselarge.txt deleted file mode 100644 index 68d409b..0000000 --- a/notes/GE Documentation/images text and font/Fonts/japanese/japaneselarge.txt +++ /dev/null @@ -1,106 +0,0 @@ -¥ -ã‚­ -ャ -ス -ト -メ -イ -ン -ã -ã® -\hC08A -\hC08B -\hC08C -\hC08D -\hC08E -  -ï¼ -ï¼— -ï¼– -ジ -エ -ー -ム -ボ -ド -ナ -ã‚¿ -リ -ã‚¢ -ã‚· -ョ -ミ -ノ -ヴ -ã‚¡ -レ -ツ -ク -ル -ヤ -犯 -罪 -\hC0AA -\hC0AB -ヌ -ゼ -ニ -オ -プ -\hC0B1 -\hC0B2 -ã‚« -デ -ã‚£ -ウ -モ -フ -ã‚° -コ -\hC0BB -K -ï¼§ -ï¼¢ -\hC0BF -\hC0C0 -\hC0C1 -テ -ズ -\hC0C4 -\hC0C5 -\hC0C6 -\hC0C7 -ュ -プ -サ -\hC0CB -\hC0CC -\hC0CD -\hC0CE -\hC0CF -\hC0D0 -・ -ペ -\hC0D3 -\hC0D4 -\hC0D5 -ロ -\hC0D7 -\hC0D8 -\hC0D9 -\hC0DA -\hC0DB -ベ -\hC0DD -\hC0DE -\hC0DF -\hC0E0 -ヘ -\hC0E2 -\hC0E3 -\hC0E4 -\hC0E5 -\hC0E6 -\hC0E7 -市 -æ°‘ \ No newline at end of file diff --git a/notes/GE Documentation/images text and font/Fonts/text readme.txt b/notes/GE Documentation/images text and font/Fonts/text readme.txt deleted file mode 100644 index f62b82c..0000000 Binary files a/notes/GE Documentation/images text and font/Fonts/text readme.txt and /dev/null differ diff --git a/notes/GE Documentation/images text and font/Huffman/7F0C91D0-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0C91D0-subroutine.txt deleted file mode 100644 index 4f9c3de..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0C91D0-subroutine.txt +++ /dev/null @@ -1,396 +0,0 @@ -7F0C91D0 genrate a sample table - accepts: A0: target, A1:total sample table size?, A2=table#3 entry (table entries?) - - SP+0x60 count of smallest Sbuf 1st sample (prev2) - SP+0x64 count of smallest Sbuf 2nd sample (prev1) - SP+0x70 - SP+0x78 0x2000 buffer of short values - SP+0x2078 0x1000 buffer of short values - SP+0x3078 target address / table#3 entry (#entries?) - SP+0x307C total size of samples? -ADDIU SP,SP,CF88 ;SP-=0x3078 -SW RA,002C (SP) -SW S4,0028 (SP) -SW S1,001C (SP) -OR S4,A2,R0 ;S4=A2: table#3 entry [10] -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S0,0018 (SP) -SW A0,3078 (SP) ;SP+3078=target -SW A1,307C (SP) ;SP+307C=table#1 entry * S6*S7 (total size of samp1 and samp2?) -OR RA,R0,R0 ;RA=0!? -BLEZ A2,7F0C9228 ;branch if A2 is stupid (zero), which it shouldn't be at start! -OR S1,R0,R0 ;S1=0 counter -ADDIU S0,SP,2078 ;S0=SP+2078: 0x1000 buffer on stack - 0x800 buffer for shorts -//7F0C9208: flood up to 0x100 entries starting at SP+2078 -SW RA,005C (SP) ;0->SP+5C -JAL 7F0CBF2C ;grab next 8 bits from datatable -ADDIU A0,R0,0008 ;A0=8 -ADDIU S1,S1,0001 ;S1++ counter++ -LW RA,005C (SP) ;recover return address -ADDIU S0,S0,0002 ;S0+=2 next short in Sbuffer -BNE S1,S4,7F0C9208 ;loop to fill table#3 number of entries -SH V0,FFFE (S0) ;save return value to buffer -//7F0C9228: blank (-1) Lbuffer at 0x78 -ADDIU V0,SP,0078 ;V0=SP+78 -ADDIU A0,SP,2078 ;A0=p->data just placed in buffer -ADDIU V1,R0,FFFF ;V1=-1 -//7F0C9234: set default values in large buffer -ADDIU V0,V0,0004 ;next two entries -SLTU AT,V0,A0 ;loop for 0x2000 buffer -SH V1,FFFC (V0) ;-1 ->Lbuffer entry 1 -BNEZ AT,7F0C9234 -SH V1,FFFE (V0) ;-1 ->Lbuffer entry 2 -//7F0C9248: -ADDIU T0,R0,270F ;T0=270F 'previous' Sbuffer value -ADDIU A2,R0,270F ;A2=270F 'prev2'-two entries ago -BLEZ S4,7F0C9378 ;branch if no entries? -OR S1,R0,R0 ;S1=0 -ANDI V0,S4,0001 ;V0=test for final bit in sample size? -BEQ V0,R0,7F0C92AC ;branch if not to final bit -ADDIU T7,SP,2078 ;T7=Sbuffer -LHU V0,2078 (SP) -SLTI AT,V0,270F -BEQL AT,R0,7F0C9284 -+SLTI AT,V0,270F -ANDI A2,V0,FFFF -BEQ R0,R0,7F0C9294 -SW R0,0060 (SP) -SLTI AT,V0,270F -//7F0C9284: -BEQL AT,R0,7F0C9298 -+LW A3,0060 (SP) -LHU A2,2078 (SP) -SW R0,0060 (SP) -//7F0C9294: -LW A3,0060 (SP) -LW T1,0064 (SP) -ADDIU S1,R0,0001 -SW A3,0060 (SP) -BEQ S1,S4,7F0C936C -SW T1,0064 (SP) -//7F0C92AC: -SLL T6,S1,0x1 ;T6=count->offset -ADDU S0,T6,T7 ;S0=offset + Sbuffer -LW A3,0060 (SP) ;recall c@prev2 from previously saved values (init. 0) -LW T1,0064 (SP) ;recall c@prev1 from previously saved values (init. 0) -//7F0C92BC: Loopus Sbuffer!! -//entries go in pairs. prev1 will be upper short, prev2 lower short -//determine the smallest prevs and the count they occur at -// -//determine smallest prev2 -LHU V1,0000 (S0) ;V1=value from Sbuffer -OR A1,T0,R0 ;A1=T0: 'previous' Sbuf val -OR A0,A2,R0 ;A0=A2: 'prev2' Sbuf val -SLT AT,V1,T0 ;TRUE if Sbuffer val < previous Sbuf val -BEQ AT,R0,7F0C9300 ;branch if cur > previous -OR V0,V1,R0 ;V0=V1: Sbuffer val -SLT AT,A0,A1 ;TRUE if prev2 < prev1 -BEQL AT,R0,7F0C92F4 ;at first will always throw false! -+ANDI A2,V1,FFFF ;A2=(unsigned short) Sbuffer value -ANDI T0,V1,FFFF -OR A1,T0,R0 -BEQ R0,R0,7F0C9318 -OR T1,S1,R0 -- ANDI A2,V1,FFFF -//7F0C92F4: -OR A0,A2,R0 ;A0=A2: 'prev2' = Sbufval -BEQ R0,R0,7F0C9318 -OR A3,S1,R0 ;A3=S1: count for prev2 -//7F0C9300: current Sbuf val < previous -SLT AT,V0,A0 ;TRUE if Sbuf val < 'prev2' -BEQL AT,R0,7F0C931C ;if it isn't, don't set A2=Sbuf -+LHU V1,0002 (S0) ;V1=next Sbuf val -ANDI A2,V1,FFFF ;A2=(unsigned char) Sbuf -OR A0,A2,R0 ;A0=A2: 'prev2' -OR A3,S1,R0 ;A3=S1: count -//7F0C9318: -LHU V1,0002 (S0) ;V1=next value in Sbuffer -//7F0C931C: determine smallest prev1 -SLT AT,V1,A1 ;TRUE if Sbufnext < 'prev1' -BEQ AT,R0,7F0C934C ;branch if not so much -OR V0,V1,R0 ;V0=V1: Sbufnext -SLT AT,A0,A1 ;TRUE if Sbufval < 'prev2' -BEQL AT,R0,7F0C9344 ;branch if not so much -+ANDI A2,V1,FFFF ;A2=(unsigned short) next Sbuf val -ANDI T0,V1,FFFF ;T0=(unsigned short) next Sbuf val -BEQ R0,R0,7F0C9360 -ADDIU T1,S1,0001 ;T1=count+1 count for smallest Sbufnext -- ANDI A2,V1,FFFF -//7F0C9344: -BEQ R0,R0,7F0C9360 -ADDIU A3,S1,0001 -//7F0C934C: -SLT AT,V0,A0 -BEQL AT,R0,7F0C9364 -ADDIU S1,S1,0002 -ANDI A2,V1,FFFF -ADDIU A3,S1,0001 -//7F0C9360: -ADDIU S1,S1,0002 ;S1+=2 count+=2 -//7F0C9364: -BNE S1,S4,7F0C92BC ;loop if more entries left in table -ADDIU S0,S0,0004 ;S0+=4 Sbuffer+=4 -//7F0C936C: do something with extracted smallest pair -OR S1,R0,R0 ;S1=0 -SW A3,0060 (SP) ;store count of 1st instance of smallest prev2 [6] -SW T1,0064 (SP) ;store count of 1st instance of smallest prev1 [5] -LW A3,0060 (SP) ;A3=count of prev2 -LW T1,0064 (SP) ;T1=count of prev1 -ADDIU S3,SP,0078 ;S3=SP+78: Lbuffer -ADDIU T5,R0,270F ;T5=270F -ADDIU T4,R0,270F ;T4=270F -ADDIU T3,SP,2078 ;T3=SP+2078: Sbuffer -SLL T8,A3,0x1 ;T8=c@prev2->offset (short) -//7F0C9394: +table loop target -// -//use set of entries to fill in table -SLL T9,T1,0x1 ;T9=c@prev1->offset (short) -ADDU V0,T3,T9 ;V0=Sbuffer+shorty -ADDU A1,T3,T8 ;A1=Sbuffer+shorty -LHU T6,0000 (A1) ;T6=entry prev2 -LHU T7,0000 (V0) ;T7=entry prev1 -SLL T8,T1,0x2 ;T8=c@prev1->offset (long) -SLL T9,A3,0x2 ;T9=c@prev2->offset (long) -ADDU T2,T6,T7 ;T2=prev1 + prev2 [1+1=2] -ADDU A0,S3,T9 ;A0=Lbuffer+longy -ADDU V1,S3,T8 ;V1=Lbuffer+longy -ADDIU T0,R0,270F ;T0=270F -BNEZ T2,7F0C93CC ;if T2=0, T2 is set to 1 -ADDIU A2,R0,270F ;A2=270F -ADDIU T2,R0,0001 ;T2=1 -//7F0C93CC: deal with Lbuf c@prev1 and Lbuf c@prev1+1 - unset -// -// -LH T6,0000 (V1) ;T6=Lbuf entry c@prev1 lower short -SH T4,0000 (V0) ;store 270F to Sbuf c@prev1 -SH T4,0000 (A1) ;store 270F to Sbuf c@prev2 -BGEZL T6,7F0C942C ;branch if it doesn't equal -1 -+LH T8,0000 (A0) ;T8=Lbuf entry c@prev2 -LH T7,0002 (V1) ;T7=Lbuf c@prev1+1 upper short -ADDIU T8,T1,2710 ;T8=c@prev1+2710 -BGEZL T7,7F0C942C ;branch if entry c@prev1+1 doesn't equal -1 -+LH T8,0000 (A0) ;T8=entry c@prev2 -SH T8,0000 (V1) ;save 2710+c@prev1 to Lbuf c@prev1 -//7F0C93F4: deal with Lbuf c@prev2 & Lbuf A3+1 - unset -LH T9,0000 (A0) ;T9=Lbuf c@prev2 -OR S2,T1,R0 ;S2=T1: c@prev1 -SH T2,0000 (V0) ;(Sbuf c@prev2 + Sbuf c@prev1) -> Sbuf c@prev1 -BGEZ T9,7F0C9420 ;branch if not -1 -NOP -//7F0C9408: Lbuf c@prev2 is -1... -LH T6,0002 (A0) ;T6=Lbuf c@prev2+1 -ADDIU T7,A3,2710 ;T7=c@prev2+2710 -BGEZ T6,7F0C9420 ;branch if Lbuf c@prev2+1 isn't -1 -NOP -BEQ R0,R0,7F0C94F8 -SH T7,0002 (V1) ;save 2710+c@prev2 -> Lbuf c@prev1+1 -//7F0C9420: if either upper or lower entry in Lbuf[c@prev2] set, -// save c@prev2 to upper entry in Lbuf[Lbuf c@prev1] -BEQ R0,R0,7F0C94F8 -SH A3,0002 (V1) ;save c@prev2 -> Lbuf c@prev1+1 -- LH T8,0000 (A0) ;T8=Lbuf[c@prev2]low -//7F0C942C: if either upper or lower entry in Lbuf[c@prev1] set, -// save -LH T6,0078 (SP) ;T6=first entry in Lbuf -BGEZ T8,7F0C9480 ;branch if not -1 -NOP -LH T9,0002 (A0) ;T9=Lbuf[c@prev2]hi -BGEZ T9,7F0C9480 ;branch if not -1 -NOP -ADDIU T6,A3,2710 ;T6=c@prev2 + 2710 -SH T6,0000 (A0) ;save (c@prev2+2710) -> Lbuf[c@prev2]low -LH T7,0000 (V1) ;T7=Lbuf[c@prev1] lower value -OR S2,A3,R0 ;S2=c@prev2 -SH T2,0000 (A1) ;(Sbuf c@prev2 + Sbuf c@prev1) -> Sbuf[c@prev2] -BGEZ T7,7F0C9478 ;branch if Lbuf[c@prev1]low != -1 -NOP -LH T8,0002 (V1) ;T8=Lbuf[c@prev1] upper value -ADDIU T9,T1,2710 ;T9=c@prev1+2710 -BGEZ T8,7F0C9478 ;branch if Lbuf[c@prev1]hi != -1 -NOP -BEQ R0,R0,7F0C94F8 -SH T9,0002 (A0) ;save c@prev1+2710 -> Lbuf[c@prev2]hi -//7F0C9478: if either Lbuf[c@prev1] values set, -// store c@prev1 -> Lbuf[c@prev2]hi -BEQ R0,R0,7F0C94F8 -SH T1,0002 (A0) ;save c@prev1 -> Lbuf[c@prev2]hi -//7F0C9480: if either Lbuf[c@prev2] values set, -// -// -BGEZ T6,7F0C94A8 ;branch if Lbuf[0] != -1 -OR S2,R0,R0 ;S2=0 -SLL T7,R0,0x2 ;T7=0 -ADDU V0,S3,T7 ;V0=Lbuf+0 -LH T8,0002 (V0) ;T8=Lbuf[1] -LHU T9,2078 (SP) ;T9=Sbuf[0] -BGEZ T8,7F0C94A8 -SLTI AT,T9,270F -BEQL AT,R0,7F0C94E8 ;skip all this if Sbuf=9999 or above -SLL T8,S2,0x1 -//7F0C94A8: -ADDIU S2,S2,0001 -//7F0C94AC: -SLL T6,S2,0x2 -ADDU V0,S3,T6 -LH T7,0000 (V0) -BGEZL T7,7F0C94AC -ADDIU S2,S2,0001 -LH T8,0002 (V0) -BGEZL T8,7F0C94AC -ADDIU S2,S2,0001 -SLL T9,S2,0x1 -ADDU T6,T3,T9 -LHU T7,0000 (T6) -SLTI AT,T7,270F -BNEL AT,R0,7F0C94AC -ADDIU S2,S2,0001 -SLL T8,S2,0x1 -//7F0C94E8: -ADDU T9,T3,T8 -SH T2,0000 (T9) -SH T1,0000 (V0) -SH A3,0002 (V0) -//7F0C94F8: stupid tests really, since neither branch condition can occur -BLEZ S4,7F0C95FC ;kill if there are no more bits in sample register thingy -ANDI V0,S4,0001 ;V0=bit test -//7F0C9500: -BEQL V0,R0,7F0C9544 ;branch while bits remain -+SLL T6,S1,0x1 ;T6=count->offset count*2 -LHU V0,2078 (SP) -ADDIU S1,R0,0001 -SLTI AT,V0,270F -BEQL AT,R0,7F0C952C -SLTI AT,V0,270F -ANDI A2,V0,FFFF -BEQ R0,R0,7F0C953C -OR A3,R0,R0 -- SLTI AT,V0,270F -//7F0C952C: -BEQ AT,R0,7F0C953C -NOP -LHU A2,2078 (SP) -OR A3,R0,R0 -//7F0C953C: -BEQ S1,S4,7F0C95F8 -SLL T6,S1,0x1 -//7F0C9544: -ADDU S0,T3,T6 ;S0=Sbuffer[count] -//7F0C9548: determine new smallest values from remaining -// -//determine smallest prev2 value -LHU V1,0000 (S0) ;V1=Sbuf[count]low val -OR A1,T0,R0 ;A1=T0: prev1 -OR A0,A2,R0 ;A0=A2: prev2 -SLT AT,V1,T0 ;TRUE if Sbufval < prev1 -BEQ AT,R0,7F0C958C ;branch if not smaller than test sample -OR V0,V1,R0 ;V0=Sbufval -SLT AT,A0,A1 ;TRUE if prev2 < prev1 -BEQL AT,R0,7F0C9580 ;branch if values equal or prev1next set of entries in Sbuffer -//7F0C95F8: -// -//RA=1 if prev1 or prev2 == loop value (270F) -OR S1,R0,R0 ;S1=0 -BEQL T5,T0,7F0C9610 ;branch if 270F == prev1 -+ADDIU RA,R0,0001 ;RA=1 -BNE T5,A2,7F0C9610 ;branch if 270F != prev2 just determined -NOP -ADDIU RA,R0,0001 ;RA=1 -//7F0C9610: loop until entire table is filled by entries, using pairs of smallest values -BEQL RA,R0,7F0C9394 ;determine next smallest pair until out of entries -+SLL T8,A3,0x1 -//7F0C9618: set up for final sample table -LW T7,307C (SP) ;total sample size thingy? -SW S2,0070 (SP) ;save ? to SP+70 probably actual start of table -ADDIU S3,SP,0078 ;S3=Lbuffer -BLEZ T7,7F0C969C ;quit if total size invalid -LW V0,3078 (SP) ;V0=p->target [803B06A0] -SLTI AT,S2,2710 ;TRUE if start < 2710 (in other words, if there are entries) -//7F0C9630: build final sample table, saving to target -// -// -BEQ AT,R0,7F0C9664 ;branch if pos is a 2710 type -OR S0,S2,R0 ;S0=S2: pos -//7F0C9638: -JAL 7F0CBF2C ;returns V0=A0#bits from datatable -ADDIU A0,R0,0001 ;grab next bit from datatable -SLL T8,S0,0x2 ;T8=pos->offset SO*4 entry in table -ADDU T9,S3,T8 ;T9=Lbuffer + longoffset -SLL T6,V0,0x1 ;T6=bit*2 upper or lower table entry -ADDU T7,T9,T6 ;T7=Lbuffer + longoffset + shortoffset -LH S0,0000 (T7) ;S0=Lbufval (new pos) -SLTI AT,S0,2710 -BNEZ AT,7F0C9638 ;loop if Lbufval < 2710; use Lbufval as next index in Lbuf -NOP -LW V0,3078 (SP) ;V0=p->target -//7F0C9664: handle 2710+ entries -SLTI AT,S4,0101 ;TRUE if #entries < 101 -BEQ AT,R0,7F0C9680 ;branch if #entries exceeds 0x100, which it can't(?) -ADDIU T6,S0,D8F0 ;T6=Lbufval-0x2710 -ADDIU T8,S0,D8F0 ;T8=Lbufval-0x2710 -ADDU T9,V0,S1 ;T9=target+count -BEQ R0,R0,7F0C968C -SB T8,0000 (T9) ;Lbufval-2710 -> target+count -//7F0C9680: if #entries > 100, target is a short, not a byte -SLL T7,S1,0x1 ;T7=count->shortoffset -ADDU T8,V0,T7 ;T8=target+count*2 -SH T6,0000 (T8) ;Lbufval-2710 -> target+count*2 -//7F0C968C: loop for total size of samples -LW T9,307C (SP) ;T9=total size of samples -ADDIU S1,S1,0001 ;S1++ count++ -BNEL S1,T9,7F0C9630 ;loop for all -+SLTI AT,S2,2710 ;TRUE if pos < 2710 -//7F0C969C: tidy up and return -LW RA,002C (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,3078 - diff --git a/notes/GE Documentation/images text and font/Huffman/7F0C96BC-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0C96BC-subroutine.txt deleted file mode 100644 index 610acfa..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0C96BC-subroutine.txt +++ /dev/null @@ -1,173 +0,0 @@ -7F0C96BC - accepts: A0=p->samples,A1=t#1val * width * height -ADDIU SP,SP,FFC8 -SW S2,001C (SP) -OR S2,A0,R0 ;S2=A0: p->samples -SW RA,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -SW A1,003C (SP) ;SP+3C=t#1val * width * height -JAL 7F0CBF2C ;get next 3 bits from data -ADDIU A0,R0,0003 -SW V0,0034 (SP) ;SP+34=chunk1 -JAL 7F0CBF2C ;get next 3 bits -ADDIU A0,R0,0003 -SW V0,0030 (SP) ;SP+30=chunk2 -JAL 7F0CBF2C ;get next 4 bits -ADDIU A0,R0,0004 -LW T6,0034 (SP) ;T6=chunk1 -LW T7,0030 (SP) ;T7=chunk2 -OR S4,V0,R0 ;S4=chunk3 -OR S5,R0,R0 ;S5=0 -ADDU T8,T6,T7 ;T8=chunk1+chunk2 -ADDU A0,T8,V0 ;A0=chunk1+chunk2+chunk3 -ADDIU V1,A0,0001 ;V1=chunk1+chunk2+chunk3+1 -BLEZ V1,7F0C9738 ;don't bother if value is silly -LW T9,003C (SP) ;T9=t#1val * width * height -//7F0C9728: loop to increment S5 -SUBU V1,V1,V0 ;V1=chunk1+chunk2+chunk3+1 - chunk3 -ADDIU V1,V1,FFFF ;V1-- -BGTZ V1,7F0C9728 ;loop if V1>0 -ADDIU S5,S5,0001 ;S5++ -//7F0C9738: -BLEZ T9,7F0C98FC ;don't bother if image size is stupid -OR S1,R0,R0 ;S1=0 count -//7F0C9740: -JAL 7F0CBF2C ;get next bit -ADDIU A0,R0,0001 -BNEZ V0,7F0C9788 ;branch if bit set -SLTI AT,S4,0009 -BEQ AT,R0,7F0C9770 ;branch if chunk3 >8 -OR A0,S4,R0 ;A0=S4: chunk3 -//7F0C9758: chunk3 <9 -OR A0,S4,R0 ;A0=S4: chunk3 -JAL 7F0CBF2C ;grab chunk3 bytes from data -ADDU S0,S2,S1 ;S0=p->samples + offset -SB V0,0000 (S0) ;save value->samples -BEQ R0,R0,7F0C98EC -ADDIU S1,S1,0001 ;count++ -//7F0C9770: chunk3 >8 -SLL T0,S1,0x1 ;T0=count*2 -JAL 7F0CBF2C ;grab next chunk3 bits -ADDU S0,S2,T0 ;S0=p->samples + count*2 -SH V0,0000 (S0) ;save value->samples -BEQ R0,R0,7F0C98EC -ADDIU S1,S1,0001 ;count++ -//7F0C9788: bit is set -JAL 7F0CBF2C ;grab next chunk1 bits -LW A0,0034 (SP) ;A0=chunk1 -SUBU S3,S1,V0 -ADDIU S3,S3,FFFF ;S3=count-value-1 -JAL 7F0CBF2C ;grab next chunk2 bits -LW A0,0030 (SP) ;A0=chunk2 -ADDU A0,V0,S5 ;A0=value+funnyS5frombefore -SLTI AT,S4,0009 -BEQ AT,R0,7F0C9848 ;branch if chunk3 > 8 -OR A3,A0,R0 ;A3=A0: value+funnyS5frombefore -//7F0C97B0: chunk3<9 -ADDU A2,S3,A0 ;A2=START HERE AGAIN!!! -SLT AT,S3,A2 -OR V1,S3,R0 -BEQ AT,R0,7F0C9834 -ADDU S0,S2,S1 -SUBU A1,A2,S3 -ANDI T1,A1,0003 -BEQ T1,R0,7F0C97F8 -ADDU A0,T1,S3 -ADDU V0,S2,V1 -//7F0C97D8: -LBU T2,0000 (V0) -ADDIU V1,V1,0001 -ADDIU S1,S1,0001 -ADDIU S0,S0,0001 -ADDIU V0,V0,0001 -BNE A0,V1,7F0C97D8 -SB T2,FFFF (S0) -BEQ V1,A2,7F0C9834 -//7F0C97F8: -ADDU A0,S3,A3 -ADDU V0,S2,V1 -//7F0C9800: -LBU T3,0000 (V0) -ADDIU V1,V1,0004 -ADDIU S1,S1,0004 -SB T3,0000 (S0) -LBU T4,0001 (V0) -ADDIU S0,S0,0004 -ADDIU V0,V0,0004 -SB T4,FFFD (S0) -LBU T5,FFFE (V0) -SB T5,FFFE (S0) -LBU T6,FFFF (V0) -BNE V1,A0,7F0C9800 -SB T6,FFFF (S0) -//7F0C9834: -JAL 7F0CBF2C -OR A0,S4,R0 -SB V0,0000 (S0) -BEQ R0,R0,7F0C98EC -ADDIU S1,S1,0001 -//7F0C9848: bit set, chunk3>8 -ADDU A2,S3,A0 -SLT AT,S3,A2 -SLL T7,S1,0x1 -ADDU S0,S2,T7 -BEQ AT,R0,7F0C98DC -OR V1,S3,R0 -SUBU A1,A2,S3 -ANDI T8,A1,0003 -BEQ T8,R0,7F0C9898 -ADDU A0,T8,S3 -SLL T9,V1,0x1 -ADDU V0,S2,T9 -//7F0C9878: -LHU T0,0000 (V0) -ADDIU V1,V1,0001 -ADDIU S1,S1,0001 -ADDIU S0,S0,0002 -ADDIU V0,V0,0002 -BNE A0,V1,7F0C9878 -SH T0,FFFE (S0) -BEQ V1,A2,7F0C98DC -//7F0C9898: -ADDU A0,S3,A3 -SLL T1,A0,0x1 -SLL T2,V1,0x1 -ADDU V0,S2,T2 -ADDU A1,T1,S2 -//7F0C98AC: -LHU T3,0000 (V0) -ADDIU V0,V0,0008 -ADDIU S1,S1,0004 -SH T3,0000 (S0) -LHU T4,FFFA (V0) -ADDIU S0,S0,0008 -SH T4,FFFA (S0) -LHU T5,FFFC (V0) -SH T5,FFFC (S0) -LHU T6,FFFE (V0) -BNE V0,A1,7F0C98AC -SH T6,FFFE (S0) -//7F0C98DC: -JAL 7F0CBF2C -OR A0,S4,R0 -SH V0,0000 (S0) -ADDIU S1,S1,0001 -//7F0C98EC: -LW T7,003C (SP) -SLT AT,S1,T7 -BNEZ AT,7F0C9740 -NOP -//7F0C98FC: -LW RA,002C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0038 diff --git a/notes/GE Documentation/images text and font/Huffman/7F0C9920-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0C9920-subroutine.txt deleted file mode 100644 index 5dcb42f..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0C9920-subroutine.txt +++ /dev/null @@ -1,65 +0,0 @@ -ADDIU SP, SP, 0xFFD0 -SW S3, 0x0020 (SP) -OR S3, A0, R0 -SW RA, 0x002C (SP) -SW S2, 0x001C (SP) -OR S2, A1, R0 -SW S5, 0x0028 (SP) -SW S4, 0x0024 (SP) -SW S1, 0x0018 (SP) -SW S0, 0x0014 (SP) -JAL 0x7F0CBF2C -ADDIU A0, R0, 0x000B -SLTI AT, S2, 0x0011 -BEQ AT, R0, 0x7F0C9988 -OR S5, V0, R0 -BLEZ V0, 0x7F0C99FC -OR S0, R0, R0 -OR S1, S3, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -ADDIU S0, S0, 0x0001 -ADDIU S1, S1, 0x0002 -BNE S0, S5, 0x7F0C9968 -SH V0, 0xFFFE (S1) -BEQ R0, R0, 0x7F0C9A00 -LW RA, 0x002C (SP) -SLTI AT, S2, 0x0019 -BEQ AT, R0, 0x7F0C99C0 -NOP -BLEZ V0, 0x7F0C99FC -OR S0, R0, R0 -OR S1, S3, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -ADDIU S0, S0, 0x0001 -ADDIU S1, S1, 0x0004 -BNE S0, S5, 0x7F0C99A0 -SW V0, 0xFFFC (S1) -BEQ R0, R0, 0x7F0C9A00 -LW RA, 0x002C (SP) -BLEZ V0, 0x7F0C99FC -OR S0, R0, R0 -ADDIU S4, S2, 0xFFE8 -OR S1, S3, R0 -JAL 0x7F0CBF2C -ADDIU A0, R0, 0x0018 -OR S2, V0, R0 -JAL 0x7F0CBF2C -OR A0, S4, R0 -SLL T6, S2, 0x8 -ADDIU S0, S0, 0x0001 -OR T7, V0, T6 -ADDIU S1, S1, 0x0004 -BNE S0, S5, 0x7F0C99D0 -SW T7, 0xFFFC (S1) -LW RA, 0x002C (SP) -OR V0, S5, R0 -LW S5, 0x0028 (SP) -LW S0, 0x0014 (SP) -LW S1, 0x0018 (SP) -LW S2, 0x001C (SP) -LW S3, 0x0020 (SP) -LW S4, 0x0024 (SP) -JR RA -ADDIU SP, SP, 0x0030 diff --git a/notes/GE Documentation/images text and font/Huffman/7F0C9A9C-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0C9A9C-subroutine.txt deleted file mode 100644 index 2898997..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0C9A9C-subroutine.txt +++ /dev/null @@ -1,215 +0,0 @@ -7F0C9A9C compression0 generate final image - accepts: A0=p->final,A1=width,A2=height,A3=nibble3(image type) -ADDIU SP,SP,FFC8 -SW S5,0028 (SP) -ADDIU S5,A0,000F -ADDIU AT,R0,FFF0 -AND T6,S5,AT ;T6=p->final to nearest 0x10 -SW S3,0020 (SP) -ADDIU AT,R0,FFF8 -ADDIU V0,A0,0007 -AND S3,V0,AT ;S3=width to nearest 0x8 -SW S7,0030 (SP) -SW S6,002C (SP) -SW S2,001C (SP) -SLTIU AT,A3,0009 ;TRUE if image type<9 -OR S2,A1,R0 ;S2=width -OR S7,A2,R0 ;S7=height -SW RA,0034 (SP) -SW S4,0024 (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -OR S5,T6,R0 ;S5=p->final to nearest 0x10 -BEQ AT,R0,7F0C9D74 ;fail on stupid types -OR S6,S3,R0 ;S6=width to nearest 0x8 -SLL T8,A3,0x2 ;T8=imgtype*4 (to offset) -LUI AT,8006 -ADDU AT,AT,T8 -LW T8,BDA0 (AT) ;T8=8005BDA0+offset: -JR T8 -NOP - -7F0C9B0C type 0 32bit colour -BLEZ S7,7F0C9B68 ;branch if height is stupid -OR S4,R0,R0 ;S4=0 linenum -ADDIU S3,S2,0003 -ANDI T9,S3,0FFC ;T9=WIDth -SLL S3,T9,0x2 ;S3=WIDth*4 -//7F0C9B20: -BLEZ S2,7F0C9B5C ;branch if width is dumb -OR S0,R0,R0 ;S0=0 count -OR S1,S5,R0 ;S1=S5: p->final to nearest 0x10 -//7F0C9B2C: write 32bit values -JAL 7F0CBF2C ;grab next 0x10 bits red+green -ADDIU A0,R0,0010 -SLL T1,V0,0x10 ;T1=data*0x10000 -SW T1,0000 (S1) ;save green to final -JAL 7F0CBF2C ;grab next 0x10 bits blue+alpha -ADDIU A0,R0,0010 -LW T2,0000 (S1) ;save red+green -ADDIU S0,S0,0001 ;S0++ count++ -ADDIU S1,S1,0004 ;p->final+=4 -OR T3,T2,V0 ;T3=red+green + blue+alpha -BNE S0,S2,7F0C9B2C ;loop for row -SW T3,FFFC (S1) -//7F0C9B5C: loop for each line -ADDIU S4,S4,0001 ;linenum++ -BNE S4,S7,7F0C9B20 -ADDU S5,S5,S3 ;S5= -//7F0C9B68: return final size -ADDIU T4,S2,0003 -ANDI T5,T4,0FFC -MULTU T5,S7 -MFLO V0 -SLL T6,V0,0x2 -BEQ R0,R0,7F0C9D78 -OR V0,T6,R0 - -7F0C9B84 type 2 -BLEZ S7,7F0C9BD0 -OR S4,R0,R0 -ADDIU S3,S2,0003 -ANDI T7,S3,0FFC -SLL S3,T7,0x2 -BLEZ S2,7F0C9BC4 -OR S0,R0,R0 -OR S1,S5,R0 -JAL 7F0CBF2C -ADDIU A0,R0,0018 -SLL T9,V0,0x8 -ADDIU S0,S0,0001 -ORI T0,T9,00FF -ADDIU S1,S1,0004 -BNE S0,S2,7F0C9BA4 -SW T0,FFFC (S1) -ADDIU S4,S4,0001 -BNE S4,S7,7F0C9B98 -ADDU S5,S5,S3 -ADDIU T1,S2,0003 -ANDI T2,T1,0FFC -MULTU T2,S7 -MFLO V0 -SLL T3,V0,0x2 -BEQ R0,R0,7F0C9D78 -OR V0,T3,R0 - -7F0C9BEC types 1 & 4 16bit colour & 16bit IA -BLEZ S7,7F0C9C30 -OR S4,R0,R0 -ADDIU S3,S2,0003 -ANDI T4,S3,0FFC -SLL S3,T4,0x1 -BLEZ S2,7F0C9C24 -OR S0,R0,R0 -OR S1,S6,R0 -JAL 7F0CBF2C -ADDIU A0,R0,0010 -ADDIU S0,S0,0001 -ADDIU S1,S1,0002 -BNE S0,S2,7F0C9C0C -SH V0,FFFE (S1) -ADDIU S4,S4,0001 -BNE S4,S7,7F0C9C00 -ADDU S6,S6,S3 -ADDIU T6,S2,0003 -ANDI T7,T6,0FFC -MULTU T7,S7 -MFLO V0 -SLL T8,V0,0x1 -BEQ R0,R0,7F0C9D78 -OR V0,T8,R0 - -7F0C9C4C type 3 15bit colour -BLEZ S7,7F0C9C98 -OR S4,R0,R0 -ADDIU S3,S2,0003 -ANDI T9,S3,0FFC -SLL S3,T9,0x1 -BLEZ S2,7F0C9C8C -OR S0,R0,R0 -OR S1,S6,R0 -JAL 7F0CBF2C -ADDIU A0,R0,000F -SLL T1,V0,0x1 -ADDIU S0,S0,0001 -ORI T2,T1,0001 -ADDIU S1,S1,0002 -BNE S0,S2,7F0C9C6C -SH T2,FFFE (S1) -ADDIU S4,S4,0001 -BNE S4,S7,7F0C9C60 -ADDU S6,S6,S3 -ADDIU T3,S2,0003 -ANDI T4,T3,0FFC -MULTU T4,S7 -MFLO V0 -SLL T5,V0,0x1 -BEQ R0,R0,7F0C9D78 -OR V0,T5,R0 - -7F0C9CB4 types 5 & 7 8bit IA and 8bit I -BLEZ S7,7F0C9CF8 -OR S4,R0,R0 -ADDIU S5,S2,0007 -ANDI T6,S5,0FF8 -OR S5,T6,R0 -BLEZ S2,7F0C9CEC -OR S0,R0,R0 -OR S1,S3,R0 -JAL 7F0CBF2C -ADDIU A0,R0,0008 -ADDIU S0,S0,0001 -ADDIU S1,S1,0001 -BNE S0,S2,7F0C9CD4 -SB V0,FFFF (S1) -ADDIU S4,S4,0001 -BNE S4,S7,7F0C9CC8 -ADDU S3,S3,S5 -ADDIU T7,S2,0007 -ANDI T8,T7,0FF8 -MULTU T8,S7 -MFLO V0 -BEQ R0,R0,7F0C9D7C -LW RA,0034 (SP) - -7F0C9D10 types 6 & 8 4bit IA and 4bit I -BLEZ S7,7F0C9D58 -OR S4,R0,R0 -ADDIU S1,S2,000F -ANDI T9,S1,0FF0 -SRA S1,T9,0x1 -BLEZ S2,7F0C9D4C -OR S0,R0,R0 -JAL 7F0CBF2C -ADDIU A0,R0,0008 -SRA T1,S0,0x1 -ADDIU S0,S0,0002 -SLT AT,S0,S2 -ADDU T2,S3,T1 -BNEZ AT,7F0C9D2C -SB V0,0000 (T2) -ADDIU S4,S4,0001 -BNE S4,S7,7F0C9D24 -ADDU S3,S3,S1 -ADDIU T3,S2,000F -ANDI T4,T3,0FF0 -SRA T5,T4,0x1 -MULTU T5,S7 -MFLO V0 -BEQ R0,R0,7F0C9D7C -LW RA,0034 (SP) - -//7F0C9D74: fail on stupid types -OR V0,R0,R0 -LW RA,0034 (SP) -LW S0,0014 (SP) -//7F0C9D7C: quit -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -LW S6,002C (SP) -LW S7,0030 (SP) -JR RA -ADDIU SP,SP,0038 diff --git a/notes/GE Documentation/images text and font/Huffman/7F0C9DA4-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0C9DA4-subroutine.txt deleted file mode 100644 index 1445f04..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0C9DA4-subroutine.txt +++ /dev/null @@ -1,755 +0,0 @@ -7F0C9DA4 - accepts: A0=p->sample,A1=width,A2=height,A3=p->final,SP+10=nibble3 -ADDIU SP,SP,FF98 -LW T6,0078 (SP) ;T6=nibble3 - type -SW S2,0010 (SP) -SW S1,000C (SP) -SW S0,0008 (SP) -SLTIU AT,T6,0009 ;type should be 0-8 -OR S0,A1,R0 ;S0=width -OR S1,A0,R0 ;S1=p->sample -OR S2,A2,R0 ;S2=height -SW S3,0014 (SP) -OR T2,A3,R0 ;T2=p->final -OR T1,A3,R0 ;T1=p->final -OR V1,A3,R0 ;V1=p->final -BEQ AT,R0,7F0CA874 ;do nothing if it is a stupid type -OR T0,R0,R0 ;T0=0 -SLL T6,T6,0x2 -LUI AT,8006 -ADDU AT,AT,T6 -LW T6,BDC4 (AT) ;T6=8005BDC4+type offset: routine to generate final image -JR T6 -NOP - -7F0C9DF8: type 0 32bit colour -BLEZ S2,7F0C9F90 -OR A3,R0,R0 -ADDIU T7,S0,0003 -ANDI T8,T7,0FFC -SLL T9,T8,0x2 -SW T9,001C (SP) -BLEZ S0,7F0C9F80 -OR A1,R0,R0 -MULTU S0,S2 -ADDU T4,S1,T0 -ANDI A2,S0,0003 -SLL T9,R0,0x2 -ADDU T1,T2,T9 -OR T5,A2,R0 -ADDU V0,S1,T0 -MFLO T3 -SLL T6,T3,0x2 -SUBU T6,T6,T3 -ADDU T7,T6,T0 -SLL T8,T3,0x1 -ADDU S3,T4,T8 -ADDU A0,T7,S1 -BEQ A2,R0,7F0C9EA8 -ADDU V1,T4,T3 -LBU T7,0000 (V0) -LBU T6,0000 (A0) -ADDIU A1,A1,0001 -SLL T8,T7,0x18 -LBU T7,0000 (V1) -OR T9,T6,T8 -ADDIU T0,T0,0001 -SLL T6,T7,0x10 -LBU T7,0000 (S3) -OR T8,T9,T6 -ADDIU V0,V0,0001 -SLL T9,T7,0x8 -OR T6,T8,T9 -SW T6,0000 (T1) -ADDIU A0,A0,0001 -ADDIU V1,V1,0001 -ADDIU S3,S3,0001 -BNE T5,A1,7F0C9E58 -ADDIU T1,T1,0004 -BEQ A1,S0,7F0C9F80 -SLL T7,A1,0x2 -ADDU T1,T2,T7 -LBU T9,0000 (V0) -LBU T8,0000 (A0) -ADDIU A1,A1,0004 -SLL T6,T9,0x18 -LBU T9,0000 (V1) -OR T7,T8,T6 -ADDIU T0,T0,0004 -SLL T8,T9,0x10 -LBU T9,0000 (S3) -OR T6,T7,T8 -ADDIU V0,V0,0004 -SLL T7,T9,0x8 -OR T8,T6,T7 -SW T8,0000 (T1) -LBU T6,FFFD (V0) -LBU T9,0001 (A0) -ADDIU A0,A0,0004 -SLL T7,T6,0x18 -LBU T6,0001 (V1) -OR T8,T9,T7 -ADDIU V1,V1,0004 -SLL T9,T6,0x10 -LBU T6,0001 (S3) -OR T7,T8,T9 -ADDIU S3,S3,0004 -SLL T8,T6,0x8 -OR T9,T7,T8 -SW T9,0004 (T1) -LBU T7,FFFE (V0) -LBU T6,FFFE (A0) -ADDIU T1,T1,0010 -SLL T8,T7,0x18 -LBU T7,FFFE (V1) -OR T9,T6,T8 -SLL T6,T7,0x10 -LBU T7,FFFE (S3) -OR T8,T9,T6 -SLL T9,T7,0x8 -OR T6,T8,T9 -SW T6,FFF8 (T1) -LBU T8,FFFF (V0) -LBU T7,FFFF (A0) -SLL T9,T8,0x18 -LBU T8,FFFF (V1) -OR T6,T7,T9 -SLL T7,T8,0x10 -LBU T8,FFFF (S3) -OR T9,T6,T7 -SLL T6,T8,0x8 -OR T7,T9,T6 -BNE A1,S0,7F0C9EB0 -SW T7,FFFC (T1) -LW T8,001C (SP) -ADDIU A3,A3,0001 -BNE A3,S2,7F0C9E10 -ADDU T2,T2,T8 -ADDIU T9,S0,0003 -ANDI T6,T9,0FFC -MULTU T6,S2 -MFLO V0 -SLL T7,V0,0x2 -BEQ R0,R0,7F0CA878 -OR V0,T7,R0 - -7F0C9FAC: type 2 32bit colour (alpha set to 0xFF, so technically 24bit->32bit fixed alpha) -BLEZ S2,7F0CA11C -OR A3,R0,R0 -ADDIU T8,S0,0003 -ANDI T9,T8,0FFC ;WIDth=width to nearest word -SLL T6,T9,0x2 -SW T6,001C (SP) ;save WIDth -BLEZ S0,7F0CA10C -OR A1,R0,R0 -MULTU S0,S2 -ADDU T7,S1,T0 ;T7=p->samples + sampoff -ANDI A2,S0,0003 -SLL T6,R0,0x2 -ADDU T1,T2,T6 ;T1=p->final -OR A0,A2,R0 -ADDU V0,S1,T0 ;V0=p->samples + sampoff -MFLO T3 ;T3=width*height -SLL T8,T3,0x1 ;T8=width*height*2 -ADDU T9,T8,T0 ;T9=width*height*2 + sampoff -ADDU T4,T9,S1 ;T4=width*height*2 + sampoff + p->samples -BEQ A2,R0,7F0CA048 -ADDU V1,T7,T3 ;V1=p->samples + sampoff + width*height -LBU T9,0000 (V0) -LBU T7,0000 (T4) -ADDIU A1,A1,0001 -SLL T6,T9,0x18 -LBU T9,0000 (V1) -SLL T8,T7,0x8 -OR T7,T8,T6 -SLL T8,T9,0x10 -OR T6,T7,T8 -ORI T9,T6,00FF -SW T9,0000 (T1) -ADDIU T0,T0,0001 -ADDIU V0,V0,0001 -ADDIU V1,V1,0001 -ADDIU T4,T4,0001 -BNE A0,A1,7F0CA000 -ADDIU T1,T1,0004 -BEQ A1,S0,7F0CA10C -SLL T7,A1,0x2 -ADDU T1,T2,T7 -LBU T9,0000 (V0) -LBU T8,0000 (T4) -ADDIU A1,A1,0004 -SLL T7,T9,0x18 -LBU T9,0000 (V1) -SLL T6,T8,0x8 -OR T8,T6,T7 -SLL T6,T9,0x10 -OR T7,T8,T6 -ORI T9,T7,00FF -SW T9,0000 (T1) -LBU T7,0001 (V0) -LBU T8,0001 (T4) -ADDIU T0,T0,0004 -SLL T9,T7,0x18 -LBU T7,0001 (V1) -SLL T6,T8,0x8 -OR T8,T6,T9 -SLL T6,T7,0x10 -OR T9,T8,T6 -ORI T7,T9,00FF -SW T7,0004 (T1) -LBU T9,0002 (V0) -LBU T8,0002 (T4) -ADDIU V0,V0,0004 -SLL T7,T9,0x18 -LBU T9,0002 (V1) -SLL T6,T8,0x8 -OR T8,T6,T7 -SLL T6,T9,0x10 -OR T7,T8,T6 -ORI T9,T7,00FF -SW T9,0008 (T1) -LBU T7,FFFF (V0) -LBU T8,0003 (T4) -ADDIU V1,V1,0004 -SLL T9,T7,0x18 -LBU T7,FFFF (V1) -SLL T6,T8,0x8 -OR T8,T6,T9 -SLL T6,T7,0x10 -OR T9,T8,T6 -ORI T7,T9,00FF -SW T7,000C (T1) -ADDIU T4,T4,0004 -BNE A1,S0,7F0CA050 -ADDIU T1,T1,0010 -LW T8,001C (SP) -ADDIU A3,A3,0001 -BNE A3,S2,7F0C9FC4 -ADDU T2,T2,T8 -ADDIU T6,S0,0003 -ANDI T9,T6,0FFC -MULTU T9,S2 -MFLO V0 -SLL T7,V0,0x2 -BEQ R0,R0,7F0CA878 -OR V0,T7,R0 - -7F0CA138: type 1 16bit colour -BLEZ S2,7F0CA2D0 -OR A3,R0,R0 -ADDIU T8,S0,0003 -ANDI T6,T8,0FFC -SLL T9,T6,0x1 -SW T9,001C (SP) -BLEZ S0,7F0CA2C0 -OR A1,R0,R0 -MULTU S0,S2 -ADDU T4,S1,T0 -ANDI A2,S0,0003 -SLL T9,R0,0x1 -ADDU T2,T1,T9 -OR T5,A2,R0 -ADDU V0,S1,T0 -MFLO T3 ;T3=width*height -SLL T7,T3,0x2 -SUBU T7,T7,T3 ;T7=width*height*3 -ADDU T8,T7,T0 ;T8=width*height*3 + sampoff -SLL T6,T3,0x1 ;T6=width*height*2 -ADDU S3,T4,T6 -ADDU A0,T8,S1 ;A0=p->sampA p->sample + width*height*3 + sampoff -BEQ A2,R0,7F0CA1E8 -ADDU V1,T4,T3 -LBU T8,0000 (V0) ;T8=sampR -LBU T7,0000 (A0) ;T7=sampA -ADDIU A1,A1,0001 -SLL T6,T8,0xB ;T6=red*0x800 -LBU T8,0000 (V1) ;T8=sampG -OR T9,T7,T6 ;T9=red*0x800 | alpha -ADDIU T0,T0,0001 -SLL T7,T8,0x6 ;T7=green*0x40 -LBU T8,0000 (S3) ;T8=sampB -OR T6,T9,T7 ;T6=red*0x800 | green*0x40 | alpha -ADDIU V0,V0,0001 -SLL T9,T8,0x1 ;T9=blue*2 -OR T7,T6,T9 ;T7=red*0x800 | green*0x40 | blue*2 | alpha -SH T7,0000 (T2) -ADDIU A0,A0,0001 -ADDIU V1,V1,0001 -ADDIU S3,S3,0001 -BNE T5,A1,7F0CA198 -ADDIU T2,T2,0002 -BEQ A1,S0,7F0CA2C0 -SLL T8,A1,0x1 -ADDU T2,T1,T8 -LBU T9,0000 (V0) -LBU T6,0000 (A0) -ADDIU A1,A1,0004 -SLL T7,T9,0xB -LBU T9,0000 (V1) -OR T8,T6,T7 -ADDIU T0,T0,0004 -SLL T6,T9,0x6 -LBU T9,0000 (S3) -OR T7,T8,T6 -ADDIU V0,V0,0004 -SLL T8,T9,0x1 -OR T6,T7,T8 -SH T6,0000 (T2) -LBU T7,FFFD (V0) -LBU T9,0001 (A0) -ADDIU A0,A0,0004 -SLL T8,T7,0xB -LBU T7,0001 (V1) -OR T6,T9,T8 -ADDIU V1,V1,0004 -SLL T9,T7,0x6 -LBU T7,0001 (S3) -OR T8,T6,T9 -ADDIU S3,S3,0004 -SLL T6,T7,0x1 -OR T9,T8,T6 -SH T9,0002 (T2) -LBU T8,FFFE (V0) -LBU T7,FFFE (A0) -ADDIU T2,T2,0008 -SLL T6,T8,0xB -LBU T8,FFFE (V1) -OR T9,T7,T6 -SLL T7,T8,0x6 -LBU T8,FFFE (S3) -OR T6,T9,T7 -SLL T9,T8,0x1 -OR T7,T6,T9 -SH T7,FFFC (T2) -LBU T6,FFFF (V0) -LBU T8,FFFF (A0) -SLL T9,T6,0xB -LBU T6,FFFF (V1) -OR T7,T8,T9 -SLL T8,T6,0x6 -LBU T6,FFFF (S3) -OR T9,T7,T8 -SLL T7,T6,0x1 -OR T8,T9,T7 -BNE A1,S0,7F0CA1F0 -SH T8,FFFE (T2) -LW T6,001C (SP) -ADDIU A3,A3,0001 -BNE A3,S2,7F0CA150 -ADDU T1,T1,T6 -ADDIU T9,S0,0003 -ANDI T7,T9,0FFC -MULTU T7,S2 -MFLO V0 -SLL T8,V0,0x1 -BEQ R0,R0,7F0CA878 -OR V0,T8,R0 - -7F0CA2EC: type 4 IA-16bit -BLEZ S2,7F0CA3E4 ;branch if height is nonexistant -OR A3,R0,R0 ;A3=0 linecount -ADDIU T6,S0,0003 -ANDI T9,T6,0FFC ;T9=WIDth width to nearest word boundry -SLL T7,T9,0x1 ;T7=WIDth*2 linewidth -SW T7,001C (SP) ;save linewidth -//7F0CA304: copy each line to final -BLEZ S0,7F0CA3D4 ;branch if width is stupid -OR A1,R0,R0 ;A1=0 count -MULTU S0,S2 -ANDI A2,S0,0003 ;A2=extra 'non-aligned' bytes -SLL T9,R0,0x1 ;T9=0 -ADDU T2,T1,T9 ;T2=p->final -OR V1,A2,R0 ;V1=A2: extra 'non-aligned' bytes -ADDU V0,S1,T0 ;V0=p->sample + sampoff p->sampI -MFLO T8 ;T8=width*height -ADDU T6,T0,T8 ;T6=sampoff + width*height -BEQ A2,R0,7F0CA364 -ADDU T3,T6,S1 ;T3=sampoff + width*height + p->sample p->sampA -//7F0CA334: copy hangers-on -LBU T8,0000 (V0) ;T8=sampI -LBU T7,0000 (T3) ;T7=sampA -ADDIU A1,A1,0001 ;count++ -SLL T6,T8,0x8 ;T6=sampI*0x100 -OR T9,T7,T6 ;T9=sampI*0x100 | sampA -SH T9,0000 (T2) ;save IA->final -ADDIU T0,T0,0001 ;sampoff++ -ADDIU V0,V0,0001 ;p->sampI++ -ADDIU T3,T3,0001 ;p->sampA++ -BNE V1,A1,7F0CA334 ;branch for more unaligned bytes -ADDIU T2,T2,0002 ;p->final+=2 -BEQ A1,S0,7F0CA3D4 ;branch if at EOL -//7F0CA364: -SLL T8,A1,0x1 ;T8=count*2 -ADDU T2,T1,T8 ;T2=p->final + count*2 -//7F0CA36C: copy entries four at a time -LBU T6,0000 (V0) -LBU T7,0000 (T3) -ADDIU A1,A1,0004 -SLL T9,T6,0x8 -OR T8,T7,T9 -SH T8,0000 (T2) -LBU T7,0001 (V0) -LBU T6,0001 (T3) -ADDIU T0,T0,0004 -SLL T9,T7,0x8 -OR T8,T6,T9 -SH T8,0002 (T2) -LBU T6,0002 (V0) -LBU T7,0002 (T3) -ADDIU V0,V0,0004 -SLL T9,T6,0x8 -OR T8,T7,T9 -SH T8,0004 (T2) -LBU T7,FFFF (V0) -LBU T6,0003 (T3) -ADDIU T3,T3,0004 -SLL T9,T7,0x8 -OR T8,T6,T9 -SH T8,0006 (T2) -BNE A1,S0,7F0CA36C -ADDIU T2,T2,0008 -//7F0CA3D4 loop for each line -LW T7,001C (SP) -ADDIU A3,A3,0001 -BNE A3,S2,7F0CA304 -ADDU T1,T1,T7 -//7F0CA3E4: return final size -ADDIU T6,S0,0003 -ANDI T9,T6,0FFC -MULTU T9,S2 -MFLO V0 -SLL T8,V0,0x1 -BEQ R0,R0,7F0CA878 -OR V0,T8,R0 ;V0=WIDth*height*2 final size - -7F0CA400: type 3 15bit colour (alpha set to 1) -BLEZ S2,7F0CA570 ;branch if height is nonexistant -OR A3,R0,R0 ;A3=0 linecount -ADDIU T7,S0,0003 -ANDI T6,T7,0FFC ;T6=WIDth width to nearest word -SLL T9,T6,0x1 ;T9=linewidth WIDth*2 -SW T9,001C (SP) ;save linewidth -//7F0CA418: -BLEZ S0,7F0CA560 ;branch if width is stupid -OR A1,R0,R0 ;A1=0 count -MULTU S0,S2 -ADDU T8,S1,T0 ;T8=p->sample + sampoff -ANDI A2,S0,0003 ;'non word-aligned' bytes -SLL T9,R0,0x1 ;T9=0 -ADDU T2,T1,T9 ;T2=p->final -OR A0,A2,R0 ;A0=A2: extra bytes -ADDU V0,S1,T0 ;V0=p->sample + sampoff p->sampR -MFLO T3 ;T3=width*height size of original -SLL T7,T3,0x1 ;T7=width*height*2 -ADDU T6,T7,T0 ;T6=width*height*2 + sampoff -ADDU T4,T6,S1 ;T4=width*height*2 + sampoff + p->sample p->sampB -BEQ A2,R0,7F0CA49C ;branch if there are no extra bytes to deal with -ADDU V1,T8,T3 ;V1=p->sample + sampoff + width*height p->sampG -//7F0CA454: save non-aligned 16bit colours -LBU T6,0000 (V0) ;T6=sampR -LBU T8,0000 (T4) ;T8=sampB -ADDIU A1,A1,0001 ;count++ -SLL T9,T6,0xB ;T9=red*0x800 -LBU T6,0000 (V1) ;T6=sampG -SLL T7,T8,0x1 ;T7=blue*2 -OR T8,T7,T9 ;T8=red+blue -SLL T7,T6,0x6 ;T7=green*0x40 -OR T9,T8,T7 ;T9=red+green+blue -ORI T6,T9,0001 ;T6=red+green+blue+alpha -SH T6,0000 (T2) ;save 16bit colour to final -ADDIU T0,T0,0001 ;sampoff++ -ADDIU V0,V0,0001 ;p->sampR++ -ADDIU V1,V1,0001 ;p->sampG++ -ADDIU T4,T4,0001 ;p->sampB++ -BNE A0,A1,7F0CA454 ;branch for any additional hangers-on -ADDIU T2,T2,0002 ;p->final+=2 -BEQ A1,S0,7F0CA560 ;skip if line is complete -//7F0CA49C: -SLL T8,A1,0x1 ;T8=count*2 -ADDU T2,T1,T8 ;T2=p->final + count*2 -//7F0CA4A4: write sets of 4 until line complete -LBU T6,0000 (V0) -LBU T7,0000 (T4) -ADDIU A1,A1,0004 -SLL T8,T6,0xB -LBU T6,0000 (V1) -SLL T9,T7,0x1 -OR T7,T9,T8 -SLL T9,T6,0x6 -OR T8,T7,T9 -ORI T6,T8,0001 -SH T6,0000 (T2) -LBU T8,0001 (V0) -LBU T7,0001 (T4) -ADDIU T0,T0,0004 -SLL T6,T8,0xB -LBU T8,0001 (V1) -SLL T9,T7,0x1 -OR T7,T9,T6 -SLL T9,T8,0x6 -OR T6,T7,T9 -ORI T8,T6,0001 -SH T8,0002 (T2) -LBU T6,0002 (V0) -LBU T7,0002 (T4) -ADDIU V0,V0,0004 -SLL T8,T6,0xB -LBU T6,0002 (V1) -SLL T9,T7,0x1 -OR T7,T9,T8 -SLL T9,T6,0x6 -OR T8,T7,T9 -ORI T6,T8,0001 -SH T6,0004 (T2) -LBU T8,FFFF (V0) -LBU T7,0003 (T4) -ADDIU V1,V1,0004 -SLL T6,T8,0xB -LBU T8,FFFF (V1) -SLL T9,T7,0x1 -OR T7,T9,T6 -SLL T9,T8,0x6 -OR T6,T7,T9 -ORI T8,T6,0001 -SH T8,0006 (T2) -ADDIU T4,T4,0004 -BNE A1,S0,7F0CA4A4 ;loop until line complete -ADDIU T2,T2,0008 -//7F0CA560: loop for each line -LW T7,001C (SP) -ADDIU A3,A3,0001 -BNE A3,S2,7F0CA418 -ADDU T1,T1,T7 -//7F0CA570: return final size -ADDIU T9,S0,0003 -ANDI T6,T9,0FFC -MULTU T6,S2 -MFLO V0 ;V0=WIDth*height -SLL T8,V0,0x1 -BEQ R0,R0,7F0CA878 -OR V0,T8,R0 ;V0=WIDth*height*2 - -7F0CA58C: type 5 IA-8bit -BLEZ S2,7F0CA674 ;branch if height is nonexistant -OR A3,R0,R0 ;A3=0 linecount -ADDIU A0,S0,0007 ;A0=width+7 -ANDI T7,A0,0FF8 -OR A0,T7,R0 ;A0=width pushed to nearest doubleword (WIDth) -//7F0CA5A0: -BLEZ S0,7F0CA668 ;branch if width is stupid -OR A1,R0,R0 ;A1=0 count -MULTU S0,S2 -ANDI A2,S0,0003 ;A2=two trailing bits of width -OR T2,A2,R0 ;T2=two trailing bits of width -ADDU V0,S1,T0 ;V0=p->sample + sampoff -ADDU T1,V1,R0 ;T1=V1: p->final -MFLO T9 ;T9=width*height -ADDU T6,T0,T9 ;T6=offset to sampalpha sampoff+width*height -BEQ A2,R0,7F0CA5FC -ADDU T3,T6,S1 ;T3=p->sample + sampoff + width*height (alpha? - from 7F0C9A48 probably) -//7F0CA5CC: copy excess non-word bytes (0-3) -LBU T7,0000 (V0) ;T7=value from sample -LBU T8,0000 (T3) ;T8=alpha? value -ADDIU A1,A1,0001 ;A1++ count++ -SLL T9,T7,0x4 ;T9=val*0x10 -OR T6,T8,T9 ;T6=val*0x10 + 'alpha' bit -SB T6,0000 (T1) ;converted val->final -ADDIU T0,T0,0001 ;sampoffset++ -ADDIU V0,V0,0001 ;p->sample++ -ADDIU T3,T3,0001 ;p->sampalpha++ -BNE T2,A1,7F0CA5CC ;loop until remaining bytes are copied -ADDIU T1,T1,0001 ;p->final++ -BEQ A1,S0,7F0CA668 ;skip if count=width -//7F0CA5FC: -ADDU T1,V1,A1 ;T1=p->final+count -//7F0CA600: copy a 'word' from samp->final -LBU T8,0000 (V0) ;T8=value from sample -LBU T7,0000 (T3) ;T7=alpha? value -ADDIU A1,A1,0004 ;count+=4 -SLL T9,T8,0x4 ;T9=val*0x10 -OR T6,T7,T9 ;T6=val*0x10 + 'alpha' bit -SB T6,0000 (T1) ;converted val->final -LBU T7,0001 (V0) ;T7=next value from sample -LBU T8,0001 (T3) ;T8=next alpha? value -ADDIU T0,T0,0004 ;sampoffset+=4 -SLL T9,T7,0x4 ;T9=val*0x10 -OR T6,T8,T9 ;T6=val*0x10 + 'alpha' bit -SB T6,0001 (T1) ;converted val->final -LBU T8,0002 (V0) ;T8=next value from sample -LBU T7,0002 (T3) ;T7=next alpha? value -ADDIU V0,V0,0004 ;p->sample+=4 -SLL T9,T8,0x4 ;T9=val*0x10 -OR T6,T7,T9 ;T6=val*0x10 + 'alpha' bit -SB T6,0002 (T1) ;converted val->final -LBU T7,FFFF (V0) ;T7=next value from sample -LBU T8,0003 (T3) ;T8=next alpha? value -ADDIU T3,T3,0004 ;p->sampalpha+=4 -SLL T9,T7,0x4 ;T9=val*0x10 -OR T6,T8,T9 ;T6=val*0x10 + 'alpha' bit -SB T6,0003 (T1) ;converted val->final -BNE A1,S0,7F0CA600 ;loop for each element in line -ADDIU T1,T1,0004 ;p->final+=4 -//7F0CA668: loop for each line -ADDIU A3,A3,0001 ;A3++ linecount++ -BNE A3,S2,7F0CA5A0 ;loop while linecountsample + sampoff -OR T2,A2,R0 ;T2=A2: total bytes to copy -ADDU T1,V1,R0 ;T1=V1: p->final -//7F0CA6BC: copy bytes to 'word boundry' -LBU T6,0000 (V0) ;T6=value from sample -ADDIU A1,A1,0001 ;A1++ count++ -ADDIU T0,T0,0001 ;sampoff++ -ADDIU V0,V0,0001 ;p->sample++ -ADDIU T1,T1,0001 ;p->final++ -BNE T2,A1,7F0CA6BC ;loop for each remaining byte -SB T6,FFFF (T1) ;save val to final -BEQ A1,S0,7F0CA714 ;skip if count=bytes in a line -//7F0CA6DC: -ADDU T1,V1,A1 ;T1=p->final+count -//7F0CA6E0: copy a 'word' to final -LBU T7,0000 (V0) -ADDIU A1,A1,0004 -ADDIU T0,T0,0004 -SB T7,0000 (T1) -LBU T8,0001 (V0) -ADDIU V0,V0,0004 -ADDIU T1,T1,0004 -SB T8,FFFD (T1) -LBU T9,FFFE (V0) -SB T9,FFFE (T1) -LBU T6,FFFF (V0) -BNE A1,S0,7F0CA6E0 -SB T6,FFFF (T1) -//7F0CA714: repeat for each line -ADDIU A3,A3,0001 -BNE A3,S2,7F0CA6A0 -ADDU V1,V1,A0 -//7F0CA720: -ADDIU T7,S0,0007 -ANDI T8,T7,0FF8 ;T8=WIDth -MULTU T8,S2 -MFLO V0 ;V0=size of final image -BEQ R0,R0,7F0CA87C -LW S0,0008 (SP) - -7F0CA738: type 6 IA-4bit -BLEZ S2,7F0CA7D4 ;branch if height is nonexistant -OR A3,R0,R0 ;A3=linecount -ADDIU A2,S0,000F -ANDI T9,A2,0FF0 ;T2=WIDth width to the nearest 0x10 boundry -OR A2,T9,R0 ;A2=T9: WIDth -ANDI T1,S0,0001 ;T1=TRUE if width is odd -//7F0CA750: loop for each line -BLEZ S0,7F0CA7C0 ;skip if width is stupid -OR A1,R0,R0 ;A1=0 count -MULTU S0,S2 -ADDU V0,S1,T0 ;V0=p->sample + sampoff -MFLO T6 ;T6=width*height -SLL T7,T6,0x2 -SUBU T7,T7,T6 ;T7=width*height*3 -ADDU T8,T7,T0 ;T8=width*height*3 + sampoff -ADDU A0,T8,S1 ;A0=width*height*3 + sampoff + p->sample -//7F0CA774: copy bytes in line to final -LBU T6,0000 (V0) ;T6=sample[0] -LBU T9,0001 (A0) ;T9=sampalpha[1] -ADDIU T0,T0,0002 ;sampoff+=2 -SLL T7,T6,0x5 ;T7=val * 0x20 -LBU T6,0000 (A0) ;T6=sampalpha[0] -OR T8,T9,T7 ;T8=sampalpha[1] | val*0x20 -ADDIU V0,V0,0002 ;p->sample+2 -SLL T9,T6,0x4 ;T9=sampalpha[0]*0x10 -LBU T6,FFFF (V0) ;T6=sample[1] -OR T7,T8,T9 ;T7=val*0x20 | sampalpha[0]*0x10 | sampalpha[1] -ADDIU A0,A0,0002 ;p->sampalpha+2 -SLL T8,T6,0x1 ;T8=sample[1]*0x2 -SRA T6,A1,0x1 ;T6=count/2 -ADDIU A1,A1,0002 ;count+=2 -OR T9,T7,T8 ;T9=val*0x20 | sampalpha[0]*0x10 | sample[1]*0x2 | sampalpha[1] -SLT AT,A1,S0 -ADDU T7,V1,T6 ;T7=p->final + count/2 -BNEZ AT,7F0CA774 ;branch if more more elements in this line -SB T9,0000 (T7) ;save value to final -//7F0CA7C0: -BEQ T1,R0,7F0CA7CC ;branch if width is odd... -ADDIU A3,A3,0001 ;linecount++ -ADDIU T0,T0,FFFF ;sampoff-- -//7F0CA7CC: -BNE A3,S2,7F0CA750 ;loop for each line -ADDU V1,V1,A2 ;p->final+=WIDth -//7F0CA7D4: -ADDIU T8,S0,000F -ANDI T6,T8,0FF0 ;T6=WIDth -SRA T9,T6,0x1 ;T9=WIDth/2 -MULTU T9,S2 -MFLO V0 ;V0=WIDth/2 * height -BEQ R0,R0,7F0CA87C -LW S0,0008 (SP) - -7F0CA7F0: type 8 I-4bit -BLEZ S2,7F0CA858 ;branch if height is nonexistant -OR A3,R0,R0 ;A3=linecount -ADDIU A0,S0,000F -ANDI T7,A0,0FF0 -SRA A0,T7,0x1 ;A0=WIDth/2 width->nearest 0x10, divided by 2 -ANDI T1,S0,0001 ;T1 TRUE if width odd -BLEZ S0,7F0CA844 ;branch if width is stupid -OR A1,R0,R0 ;A1=0 count -ADDU V0,S1,T0 ;V0=p->sample + sampoff -//7F0CA814: -LBU T9,0000 (V0) ;T9=sample[0] -LBU T6,0001 (V0) ;T6=sample[1] -ADDIU T0,T0,0002 ;sampoff+=2 -SLL T7,T9,0x4 ;T7=sample[0]*0x10 -SRA T9,A1,0x1 ;T9=count/2 -ADDIU A1,A1,0002 ;count+=2 -OR T8,T6,T7 ;T8=sample[0]*0x10 | sample[1] -SLT AT,A1,S0 -ADDU T6,V1,T9 ;T6=p->final+count/2 -SB T8,0000 (T6) ;save value to final -BNEZ AT,7F0CA814 ;branch if more elements in line -ADDIU V0,V0,0002 ;p->sample+2 -//7F0CA844: loop for each line -BEQ T1,R0,7F0CA850 ;don't subtract 1 if odd -ADDIU A3,A3,0001 ;linenum++ -ADDIU T0,T0,FFFF ;sampoff-- -//7F0CA850: -BNE A3,S2,7F0CA808 ;loop for each line -ADDU V1,V1,A0 ;V1=p->final+WIDth -//7F0CA858: -ADDIU T7,S0,000F -ANDI T9,T7,0FF0 -SRA T8,T9,0x1 -MULTU T8,S2 -MFLO V0 ;V0=WIDth/2 * height -BEQ R0,R0,7F0CA87C -LW S0,0008 (SP) - -//7F0CA874: tried and died... -OR V0,R0,R0 ;V0=return NULL size -LW S0,0008 (SP) -//7F0CA87C: -LW S1,000C (SP) -LW S2,0010 (SP) -LW S3,0014 (SP) -JR RA -ADDIU SP,SP,0068 diff --git a/notes/GE Documentation/images text and font/Huffman/7F0CA890-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0CA890-subroutine.txt deleted file mode 100644 index defca75..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0CA890-subroutine.txt +++ /dev/null @@ -1,242 +0,0 @@ -ADDIU SP, SP, 0xFFC0 -SW S4, 0x0028 (SP) -OR S4, A0, R0 -SW RA, 0x003C (SP) -SW S8, 0x0038 (SP) -SW S7, 0x0034 (SP) -SW S5, 0x002C (SP) -SW S3, 0x0024 (SP) -OR S3, A3, R0 -SW S6, 0x0030 (SP) -SW S2, 0x0020 (SP) -SW S1, 0x001C (SP) -SW S0, 0x0018 (SP) -SW A1, 0x0044 (SP) -OR S7, A2, R0 -OR S8, A2, R0 -OR S5, A2, R0 -JAL 0x7F0C9A24 -LW A0, 0x0050 (SP) -LW T6, 0x0054 (SP) -OR S2, V0, R0 -OR V0, R0, R0 -SLTIU AT, T6, 0x0009 -BEQ AT, R0, 0x7F0CAC28 -SLL T6, T6, 0x2 -LUI AT, 0x8006 -ADDU AT, AT, T6 -LW T6, 0xBDE8 (AT) -JR T6 -NOP -LW V1, 0x0044 (SP) -ADDIU S5, S4, 0x0003 -ANDI T7, S5, 0x0FFC -BLEZ V1, 0x7F0CA960 -OR S6, R0, R0 -SLL S5, T7, 0x2 -BLEZ S4, 0x7F0CA954 -OR S0, R0, R0 -OR S1, S7, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -SLL T9, V0, 0x2 -ADDU T0, S3, T9 -LW T1, 0x0000 (T0) -ADDIU S0, S0, 0x0001 -ADDIU S1, S1, 0x0004 -BNE S0, S4, 0x7F0CA92C -SW T1, 0xFFFC (S1) -LW V1, 0x0044 (SP) -ADDIU S6, S6, 0x0001 -BNE S6, V1, 0x7F0CA920 -ADDU S7, S7, S5 -ADDIU T2, S4, 0x0003 -ANDI T3, T2, 0x0FFC -MULTU T3, V1 -MFLO V0 -SLL T4, V0, 0x2 -BEQ R0, R0, 0x7F0CAC28 -OR V0, T4, R0 -LW T5, 0x0044 (SP) -ADDIU S5, S4, 0x0003 -ANDI T6, S5, 0x0FFC -BLEZ T5, 0x7F0CA9DC -OR S6, R0, R0 -SLL S5, T6, 0x2 -BLEZ S4, 0x7F0CA9C8 -OR S0, R0, R0 -OR S1, S7, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -SLL T8, V0, 0x2 -ADDU T9, S3, T8 -LW T0, 0x0000 (T9) -ADDIU S0, S0, 0x0001 -ADDIU S1, S1, 0x0004 -SLL T1, T0, 0x8 -BNE S0, S4, 0x7F0CA9A0 -SW T1, 0xFFFC (S1) -LW T2, 0x0044 (SP) -ADDIU S6, S6, 0x0001 -ADDU S7, S7, S5 -BNE S6, T2, 0x7F0CA994 -NOP -LW T5, 0x0044 (SP) -ADDIU T3, S4, 0x0003 -ANDI T4, T3, 0x0FFC -MULTU T4, T5 -MFLO V0 -SLL T6, V0, 0x2 -BEQ R0, R0, 0x7F0CAC28 -OR V0, T6, R0 -LW T7, 0x0044 (SP) -ADDIU S5, S4, 0x0003 -ANDI T8, S5, 0x0FFC -BLEZ T7, 0x7F0CAA58 -OR S6, R0, R0 -SLL S5, T8, 0x1 -BLEZ S4, 0x7F0CAA44 -OR S0, R0, R0 -OR S1, S8, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -SLL T0, V0, 0x1 -ADDU T1, S3, T0 -LHU T2, 0x0000 (T1) -ADDIU S0, S0, 0x0001 -ADDIU S1, S1, 0x0002 -BNE S0, S4, 0x7F0CAA20 -SH T2, 0xFFFE (S1) -LW T3, 0x0044 (SP) -ADDIU S6, S6, 0x0001 -ADDU S8, S8, S5 -BNE S6, T3, 0x7F0CAA14 -NOP -LW T6, 0x0044 (SP) -ADDIU T4, S4, 0x0003 -ANDI T5, T4, 0x0FFC -MULTU T5, T6 -MFLO V0 -SLL T7, V0, 0x1 -BEQ R0, R0, 0x7F0CAC28 -OR V0, T7, R0 -LW T8, 0x0044 (SP) -ADDIU S5, S4, 0x0003 -ANDI T9, S5, 0x0FFC -BLEZ T8, 0x7F0CAADC -OR S6, R0, R0 -SLL S5, T9, 0x1 -BLEZ S4, 0x7F0CAAC8 -OR S0, R0, R0 -OR S1, S8, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -SLL T1, V0, 0x1 -ADDU T2, S3, T1 -LHU T3, 0x0000 (T2) -ADDIU S0, S0, 0x0001 -ADDIU S1, S1, 0x0002 -SLL T4, T3, 0x1 -ORI T5, T4, 0x0001 -BNE S0, S4, 0x7F0CAA9C -SH T5, 0xFFFE (S1) -LW T6, 0x0044 (SP) -ADDIU S6, S6, 0x0001 -ADDU S8, S8, S5 -BNE S6, T6, 0x7F0CAA90 -NOP -LW T9, 0x0044 (SP) -ADDIU T7, S4, 0x0003 -ANDI T8, T7, 0x0FFC -MULTU T8, T9 -MFLO V0 -SLL T0, V0, 0x1 -BEQ R0, R0, 0x7F0CAC28 -OR V0, T0, R0 -LW T1, 0x0044 (SP) -ADDIU S7, S4, 0x0007 -ANDI T2, S7, 0x0FF8 -BLEZ T1, 0x7F0CAB58 -OR S6, R0, R0 -OR S7, T2, R0 -BLEZ S4, 0x7F0CAB44 -OR S0, R0, R0 -OR S1, S5, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -SLL T3, V0, 0x1 -ADDU T4, S3, T3 -LHU T5, 0x0000 (T4) -ADDIU S0, S0, 0x0001 -ADDIU S1, S1, 0x0001 -BNE S0, S4, 0x7F0CAB20 -SB T5, 0xFFFF (S1) -LW T6, 0x0044 (SP) -ADDIU S6, S6, 0x0001 -ADDU S5, S5, S7 -BNE S6, T6, 0x7F0CAB14 -NOP -LW T9, 0x0044 (SP) -ADDIU T7, S4, 0x0007 -ANDI T8, T7, 0x0FF8 -MULTU T8, T9 -MFLO V0 -BEQ R0, R0, 0x7F0CAC2C -LW RA, 0x003C (SP) -LW T0, 0x0044 (SP) -ADDIU S7, S4, 0x000F -ANDI T1, S7, 0x0FF0 -BLEZ T0, 0x7F0CAC08 -OR S6, R0, R0 -SRA S7, T1, 0x1 -BLEZ S4, 0x7F0CABF4 -OR S0, R0, R0 -JAL 0x7F0CBF2C -OR A0, S2, R0 -SLL T4, V0, 0x1 -ADDU T5, S3, T4 -LHU T6, 0x0000 (T5) -SRA T3, S0, 0x1 -ADDIU T8, S0, 0x0001 -ADDU S1, S5, T3 -SLT AT, T8, S4 -SLL T7, T6, 0x4 -BEQ AT, R0, 0x7F0CABE4 -SB T7, 0x0000 (S1) -JAL 0x7F0CBF2C -OR A0, S2, R0 -SLL T0, V0, 0x1 -ADDU T1, S3, T0 -LBU T2, 0x0001 (T1) -LBU T9, 0x0000 (S1) -OR T3, T9, T2 -SB T3, 0x0000 (S1) -ADDIU S0, S0, 0x0002 -SLT AT, S0, S4 -BNEZ AT, 0x7F0CAB94 -NOP -LW T4, 0x0044 (SP) -ADDIU S6, S6, 0x0001 -ADDU S5, S5, S7 -BNE S6, T4, 0x7F0CAB8C -NOP -LW T8, 0x0044 (SP) -ADDIU T5, S4, 0x000F -ANDI T6, T5, 0x0FF0 -SRA T7, T6, 0x1 -MULTU T7, T8 -MFLO V0 -BEQ R0, R0, 0x7F0CAC2C -LW RA, 0x003C (SP) -LW RA, 0x003C (SP) -LW S0, 0x0018 (SP) -LW S1, 0x001C (SP) -LW S2, 0x0020 (SP) -LW S3, 0x0024 (SP) -LW S4, 0x0028 (SP) -LW S5, 0x002C (SP) -LW S6, 0x0030 (SP) -LW S7, 0x0034 (SP) -LW S8, 0x0038 (SP) -JR RA -ADDIU SP, SP, 0x0040 diff --git a/notes/GE Documentation/images text and font/Huffman/7F0CAC58-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0CAC58-subroutine.txt deleted file mode 100644 index b19898e..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0CAC58-subroutine.txt +++ /dev/null @@ -1,649 +0,0 @@ -ADDIU SP, SP, 0xFFD8 -SW S0, 0x0004 (SP) -LW S0, 0x003C (SP) -SW S2, 0x000C (SP) -SW S1, 0x0008 (SP) -SLTI AT, S0, 0x0101 -OR S1, A1, R0 -OR S2, A2, R0 -SW A0, 0x0028 (SP) -OR T1, A3, R0 -OR T2, A3, R0 -BEQ AT, R0, 0x7F0CAC94 -OR T3, A3, R0 -BEQ R0, R0, 0x7F0CAC9C -LW A1, 0x0010 (SP) -LW A1, 0x0028 (SP) -LW A0, 0x0014 (SP) -LW T6, 0x0040 (SP) -OR V0, R0, R0 -SLTIU AT, T6, 0x0009 -BEQ AT, R0, 0x7F0CB668 -SLL T6, T6, 0x2 -LUI AT, 0x8006 -ADDU AT, AT, T6 -LW T6, 0xBE0C (AT) -JR T6 -NOP -BLEZ S2, 0x7F0CAE74 -OR A3, R0, R0 -ADDIU T4, S1, 0x0003 -ANDI T7, T4, 0x0FFC -SLL T4, T7, 0x2 -SLL T0, S1, 0x1 -LW V1, 0x0038 (SP) -BLEZ S1, 0x7F0CAE60 -OR V0, R0, R0 -ANDI A2, S1, 0x0003 -BEQ A2, R0, 0x7F0CAD4C -OR T3, A2, R0 -SLL T9, R0, 0x2 -ADDU T2, T1, T9 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CAD24 -SLL T7, V0, 0x1 -ADDU T6, A0, V0 -LBU T7, 0x0000 (T6) -SLL T8, T7, 0x2 -ADDU T9, V1, T8 -LW T6, 0x0000 (T9) -BEQ R0, R0, 0x7F0CAD3C -SW T6, 0x0000 (T2) -ADDU T8, A1, T7 -LHU T9, 0x0000 (T8) -SLL T6, T9, 0x2 -ADDU T7, V1, T6 -LW T8, 0x0000 (T7) -SW T8, 0x0000 (T2) -ADDIU V0, V0, 0x0001 -BNE T3, V0, 0x7F0CACFC -ADDIU T2, T2, 0x0004 -BEQ V0, S1, 0x7F0CAE60 -SLL T9, V0, 0x2 -ADDU T2, T1, T9 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CAD7C -SLL T7, V0, 0x1 -ADDU T6, A0, V0 -LBU T7, 0x0000 (T6) -SLL T8, T7, 0x2 -ADDU T9, V1, T8 -LW T6, 0x0000 (T9) -BEQ R0, R0, 0x7F0CAD94 -SW T6, 0x0000 (T2) -ADDU T8, A1, T7 -LHU T9, 0x0000 (T8) -SLL T6, T9, 0x2 -ADDU T7, V1, T6 -LW T8, 0x0000 (T7) -SW T8, 0x0000 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CADBC -SLL T6, V0, 0x1 -ADDU T9, A0, V0 -LBU T6, 0x0001 (T9) -SLL T7, T6, 0x2 -ADDU T8, V1, T7 -LW T9, 0x0000 (T8) -BEQ R0, R0, 0x7F0CADD4 -SW T9, 0x0004 (T2) -ADDU T7, A1, T6 -LHU T8, 0x0002 (T7) -SLL T9, T8, 0x2 -ADDU T6, V1, T9 -LW T7, 0x0000 (T6) -SW T7, 0x0004 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CADFC -SLL T9, V0, 0x1 -ADDU T8, A0, V0 -LBU T9, 0x0002 (T8) -SLL T6, T9, 0x2 -ADDU T7, V1, T6 -LW T8, 0x0000 (T7) -BEQ R0, R0, 0x7F0CAE14 -SW T8, 0x0008 (T2) -ADDU T6, A1, T9 -LHU T7, 0x0004 (T6) -SLL T8, T7, 0x2 -ADDU T9, V1, T8 -LW T6, 0x0000 (T9) -SW T6, 0x0008 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CAE3C -SLL T8, V0, 0x1 -ADDU T7, A0, V0 -LBU T8, 0x0003 (T7) -SLL T9, T8, 0x2 -ADDU T6, V1, T9 -LW T7, 0x0000 (T6) -BEQ R0, R0, 0x7F0CAE54 -SW T7, 0x000C (T2) -ADDU T9, A1, T8 -LHU T6, 0x0006 (T9) -SLL T7, T6, 0x2 -ADDU T8, V1, T7 -LW T9, 0x0000 (T8) -SW T9, 0x000C (T2) -ADDIU V0, V0, 0x0004 -BNE V0, S1, 0x7F0CAD54 -ADDIU T2, T2, 0x0010 -ADDIU A3, A3, 0x0001 -ADDU T1, T1, T4 -ADDU A0, A0, S1 -BNE A3, S2, 0x7F0CACE0 -ADDU A1, A1, T0 -ADDIU T6, S1, 0x0003 -ANDI T7, T6, 0x0FFC -MULTU T7, S2 -MFLO V0 -SLL T8, V0, 0x2 -BEQ R0, R0, 0x7F0CB668 -OR V0, T8, R0 -BLEZ S2, 0x7F0CB090 -OR A3, R0, R0 -ADDIU T4, S1, 0x0003 -ANDI T9, T4, 0x0FFC -SLL T4, T9, 0x2 -SLL T0, S1, 0x1 -LW V1, 0x0038 (SP) -BLEZ S1, 0x7F0CB07C -OR V0, R0, R0 -ANDI A2, S1, 0x0003 -BEQ A2, R0, 0x7F0CAF28 -OR T3, A2, R0 -SLL T7, R0, 0x2 -ADDU T2, T1, T7 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CAEF8 -SLL T7, V0, 0x1 -ADDU T8, A0, V0 -LBU T9, 0x0000 (T8) -SLL T6, T9, 0x2 -ADDU T7, V1, T6 -LW T8, 0x0000 (T7) -SLL T9, T8, 0x8 -ORI T6, T9, 0x00FF -BEQ R0, R0, 0x7F0CAF18 -SW T6, 0x0000 (T2) -ADDU T8, A1, T7 -LHU T9, 0x0000 (T8) -SLL T6, T9, 0x2 -ADDU T7, V1, T6 -LW T8, 0x0000 (T7) -SLL T9, T8, 0x8 -ORI T6, T9, 0x00FF -SW T6, 0x0000 (T2) -ADDIU V0, V0, 0x0001 -BNE T3, V0, 0x7F0CAEC8 -ADDIU T2, T2, 0x0004 -BEQ V0, S1, 0x7F0CB07C -SLL T7, V0, 0x2 -ADDU T2, T1, T7 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CAF60 -SLL T7, V0, 0x1 -ADDU T8, A0, V0 -LBU T9, 0x0000 (T8) -SLL T6, T9, 0x2 -ADDU T7, V1, T6 -LW T8, 0x0000 (T7) -SLL T9, T8, 0x8 -ORI T6, T9, 0x00FF -BEQ R0, R0, 0x7F0CAF80 -SW T6, 0x0000 (T2) -ADDU T8, A1, T7 -LHU T9, 0x0000 (T8) -SLL T6, T9, 0x2 -ADDU T7, V1, T6 -LW T8, 0x0000 (T7) -SLL T9, T8, 0x8 -ORI T6, T9, 0x00FF -SW T6, 0x0000 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CAFB0 -SLL T6, V0, 0x1 -ADDU T7, A0, V0 -LBU T8, 0x0001 (T7) -SLL T9, T8, 0x2 -ADDU T6, V1, T9 -LW T7, 0x0000 (T6) -SLL T8, T7, 0x8 -ORI T9, T8, 0x00FF -BEQ R0, R0, 0x7F0CAFD0 -SW T9, 0x0004 (T2) -ADDU T7, A1, T6 -LHU T8, 0x0002 (T7) -SLL T9, T8, 0x2 -ADDU T6, V1, T9 -LW T7, 0x0000 (T6) -SLL T8, T7, 0x8 -ORI T9, T8, 0x00FF -SW T9, 0x0004 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB000 -SLL T9, V0, 0x1 -ADDU T6, A0, V0 -LBU T7, 0x0002 (T6) -SLL T8, T7, 0x2 -ADDU T9, V1, T8 -LW T6, 0x0000 (T9) -SLL T7, T6, 0x8 -ORI T8, T7, 0x00FF -BEQ R0, R0, 0x7F0CB020 -SW T8, 0x0008 (T2) -ADDU T6, A1, T9 -LHU T7, 0x0004 (T6) -SLL T8, T7, 0x2 -ADDU T9, V1, T8 -LW T6, 0x0000 (T9) -SLL T7, T6, 0x8 -ORI T8, T7, 0x00FF -SW T8, 0x0008 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB050 -SLL T8, V0, 0x1 -ADDU T9, A0, V0 -LBU T6, 0x0003 (T9) -SLL T7, T6, 0x2 -ADDU T8, V1, T7 -LW T9, 0x0000 (T8) -SLL T6, T9, 0x8 -ORI T7, T6, 0x00FF -BEQ R0, R0, 0x7F0CB070 -SW T7, 0x000C (T2) -ADDU T9, A1, T8 -LHU T6, 0x0006 (T9) -SLL T7, T6, 0x2 -ADDU T8, V1, T7 -LW T9, 0x0000 (T8) -SLL T6, T9, 0x8 -ORI T7, T6, 0x00FF -SW T7, 0x000C (T2) -ADDIU V0, V0, 0x0004 -BNE V0, S1, 0x7F0CAF30 -ADDIU T2, T2, 0x0010 -ADDIU A3, A3, 0x0001 -ADDU T1, T1, T4 -ADDU A0, A0, S1 -BNE A3, S2, 0x7F0CAEAC -ADDU A1, A1, T0 -ADDIU T8, S1, 0x0003 -ANDI T9, T8, 0x0FFC -MULTU T9, S2 -MFLO V0 -SLL T6, V0, 0x2 -BEQ R0, R0, 0x7F0CB668 -OR V0, T6, R0 -BLEZ S2, 0x7F0CB250 -OR A3, R0, R0 -ADDIU T5, S1, 0x0003 -ANDI T7, T5, 0x0FFC -SLL T5, T7, 0x1 -SLL T0, S1, 0x1 -LW V1, 0x0038 (SP) -BLEZ S1, 0x7F0CB23C -OR V0, R0, R0 -ANDI A2, S1, 0x0003 -BEQ A2, R0, 0x7F0CB134 -OR T4, A2, R0 -SLL T1, R0, 0x1 -ADDU T3, T2, T1 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB10C -ADDU T6, A1, T1 -ADDU T9, A0, V0 -LBU T6, 0x0000 (T9) -SLL T7, T6, 0x1 -ADDU T8, V1, T7 -LHU T9, 0x0000 (T8) -BEQ R0, R0, 0x7F0CB120 -SH T9, 0x0000 (T3) -LHU T7, 0x0000 (T6) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -SH T6, 0x0000 (T3) -ADDIU V0, V0, 0x0001 -ADDIU T1, T1, 0x0002 -BNE T4, V0, 0x7F0CB0E4 -ADDIU T3, T3, 0x0002 -BEQ V0, S1, 0x7F0CB23C -SLL T1, V0, 0x1 -ADDU T3, T2, T1 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB164 -ADDU T8, A1, T1 -ADDU T7, A0, V0 -LBU T8, 0x0000 (T7) -SLL T9, T8, 0x1 -ADDU T6, V1, T9 -LHU T7, 0x0000 (T6) -BEQ R0, R0, 0x7F0CB178 -SH T7, 0x0000 (T3) -LHU T9, 0x0000 (T8) -SLL T6, T9, 0x1 -ADDU T7, V1, T6 -LHU T8, 0x0000 (T7) -SH T8, 0x0000 (T3) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB1A0 -ADDU T6, A1, T1 -ADDU T9, A0, V0 -LBU T6, 0x0001 (T9) -SLL T7, T6, 0x1 -ADDU T8, V1, T7 -LHU T9, 0x0000 (T8) -BEQ R0, R0, 0x7F0CB1B4 -SH T9, 0x0002 (T3) -LHU T7, 0x0002 (T6) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -SH T6, 0x0002 (T3) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB1DC -ADDU T8, A1, T1 -ADDU T7, A0, V0 -LBU T8, 0x0002 (T7) -SLL T9, T8, 0x1 -ADDU T6, V1, T9 -LHU T7, 0x0000 (T6) -BEQ R0, R0, 0x7F0CB1F0 -SH T7, 0x0004 (T3) -LHU T9, 0x0004 (T8) -SLL T6, T9, 0x1 -ADDU T7, V1, T6 -LHU T8, 0x0000 (T7) -SH T8, 0x0004 (T3) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB218 -ADDU T6, A1, T1 -ADDU T9, A0, V0 -LBU T6, 0x0003 (T9) -SLL T7, T6, 0x1 -ADDU T8, V1, T7 -LHU T9, 0x0000 (T8) -BEQ R0, R0, 0x7F0CB22C -SH T9, 0x0006 (T3) -LHU T7, 0x0006 (T6) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -SH T6, 0x0006 (T3) -ADDIU V0, V0, 0x0004 -ADDIU T1, T1, 0x0008 -BNE V0, S1, 0x7F0CB13C -ADDIU T3, T3, 0x0008 -ADDIU A3, A3, 0x0001 -ADDU T2, T2, T5 -ADDU A0, A0, S1 -BNE A3, S2, 0x7F0CB0C8 -ADDU A1, A1, T0 -ADDIU T7, S1, 0x0003 -ANDI T8, T7, 0x0FFC -MULTU T8, S2 -MFLO V0 -SLL T9, V0, 0x1 -BEQ R0, R0, 0x7F0CB668 -OR V0, T9, R0 -BLEZ S2, 0x7F0CB3A8 -OR A3, R0, R0 -ADDIU T5, S1, 0x0003 -ANDI T6, T5, 0x0FFC -SLL T5, T6, 0x1 -SLL T0, S1, 0x1 -LW V1, 0x0038 (SP) -BLEZ S1, 0x7F0CB394 -OR V0, R0, R0 -ANDI A2, S1, 0x0001 -BEQ A2, R0, 0x7F0CB2E4 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB2C4 -ADDIU V0, R0, 0x0001 -LBU T8, 0x0000 (A0) -SLL T9, T8, 0x1 -ADDU T6, V1, T9 -LHU T7, 0x0000 (T6) -SLL T8, T7, 0x1 -ORI T9, T8, 0x0001 -BEQ R0, R0, 0x7F0CB2E0 -SH T9, 0x0000 (T2) -LHU T6, 0x0000 (A1) -SLL T7, T6, 0x1 -ADDU T8, V1, T7 -LHU T9, 0x0000 (T8) -SLL T6, T9, 0x1 -ORI T7, T6, 0x0001 -SH T7, 0x0000 (T2) -BEQ V0, S1, 0x7F0CB394 -SLL T1, V0, 0x1 -ADDU T3, T2, T1 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB31C -ADDU T7, A1, T1 -ADDU T8, A0, V0 -LBU T9, 0x0000 (T8) -SLL T6, T9, 0x1 -ADDU T7, V1, T6 -LHU T8, 0x0000 (T7) -SLL T9, T8, 0x1 -ORI T6, T9, 0x0001 -BEQ R0, R0, 0x7F0CB338 -SH T6, 0x0000 (T3) -LHU T8, 0x0000 (T7) -SLL T9, T8, 0x1 -ADDU T6, V1, T9 -LHU T7, 0x0000 (T6) -SLL T8, T7, 0x1 -ORI T9, T8, 0x0001 -SH T9, 0x0000 (T3) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB368 -ADDU T9, A1, T1 -ADDU T6, A0, V0 -LBU T7, 0x0001 (T6) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -SLL T7, T6, 0x1 -ORI T8, T7, 0x0001 -BEQ R0, R0, 0x7F0CB384 -SH T8, 0x0002 (T3) -LHU T6, 0x0002 (T9) -SLL T7, T6, 0x1 -ADDU T8, V1, T7 -LHU T9, 0x0000 (T8) -SLL T6, T9, 0x1 -ORI T7, T6, 0x0001 -SH T7, 0x0002 (T3) -ADDIU V0, V0, 0x0002 -ADDIU T1, T1, 0x0004 -BNE V0, S1, 0x7F0CB2EC -ADDIU T3, T3, 0x0004 -ADDIU A3, A3, 0x0001 -ADDU T2, T2, T5 -ADDU A0, A0, S1 -BNE A3, S2, 0x7F0CB288 -ADDU A1, A1, T0 -ADDIU T8, S1, 0x0003 -ANDI T9, T8, 0x0FFC -MULTU T9, S2 -MFLO V0 -SLL T6, V0, 0x1 -BEQ R0, R0, 0x7F0CB668 -OR V0, T6, R0 -BLEZ S2, 0x7F0CB56C -OR A3, R0, R0 -ADDIU T1, S1, 0x0007 -ANDI T7, T1, 0x0FF8 -OR T1, T7, R0 -SLL T0, S1, 0x1 -LW V1, 0x0038 (SP) -BLEZ S1, 0x7F0CB558 -OR V0, R0, R0 -ANDI A2, S1, 0x0003 -BEQ A2, R0, 0x7F0CB448 -OR T4, A2, R0 -ADDU T2, T3, R0 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB420 -SLL T9, V0, 0x1 -ADDU T8, A0, V0 -LBU T9, 0x0000 (T8) -SLL T6, T9, 0x1 -ADDU T7, V1, T6 -LHU T8, 0x0000 (T7) -BEQ R0, R0, 0x7F0CB438 -SB T8, 0x0000 (T2) -ADDU T6, A1, T9 -LHU T7, 0x0000 (T6) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -SB T6, 0x0000 (T2) -ADDIU V0, V0, 0x0001 -BNE T4, V0, 0x7F0CB3F8 -ADDIU T2, T2, 0x0001 -BEQ V0, S1, 0x7F0CB558 -ADDU T2, T3, V0 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB474 -SLL T8, V0, 0x1 -ADDU T7, A0, V0 -LBU T8, 0x0000 (T7) -SLL T9, T8, 0x1 -ADDU T6, V1, T9 -LHU T7, 0x0000 (T6) -BEQ R0, R0, 0x7F0CB48C -SB T7, 0x0000 (T2) -ADDU T9, A1, T8 -LHU T6, 0x0000 (T9) -SLL T7, T6, 0x1 -ADDU T8, V1, T7 -LHU T9, 0x0000 (T8) -SB T9, 0x0000 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB4B4 -SLL T7, V0, 0x1 -ADDU T6, A0, V0 -LBU T7, 0x0001 (T6) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -BEQ R0, R0, 0x7F0CB4CC -SB T6, 0x0001 (T2) -ADDU T8, A1, T7 -LHU T9, 0x0002 (T8) -SLL T6, T9, 0x1 -ADDU T7, V1, T6 -LHU T8, 0x0000 (T7) -SB T8, 0x0001 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB4F4 -SLL T6, V0, 0x1 -ADDU T9, A0, V0 -LBU T6, 0x0002 (T9) -SLL T7, T6, 0x1 -ADDU T8, V1, T7 -LHU T9, 0x0000 (T8) -BEQ R0, R0, 0x7F0CB50C -SB T9, 0x0002 (T2) -ADDU T7, A1, T6 -LHU T8, 0x0004 (T7) -SLL T9, T8, 0x1 -ADDU T6, V1, T9 -LHU T7, 0x0000 (T6) -SB T7, 0x0002 (T2) -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB534 -SLL T9, V0, 0x1 -ADDU T8, A0, V0 -LBU T9, 0x0003 (T8) -SLL T6, T9, 0x1 -ADDU T7, V1, T6 -LHU T8, 0x0000 (T7) -BEQ R0, R0, 0x7F0CB54C -SB T8, 0x0003 (T2) -ADDU T6, A1, T9 -LHU T7, 0x0006 (T6) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -SB T6, 0x0003 (T2) -ADDIU V0, V0, 0x0004 -BNE V0, S1, 0x7F0CB44C -ADDIU T2, T2, 0x0004 -ADDIU A3, A3, 0x0001 -ADDU T3, T3, T1 -ADDU A0, A0, S1 -BNE A3, S2, 0x7F0CB3E0 -ADDU A1, A1, T0 -ADDIU T7, S1, 0x0007 -ANDI T8, T7, 0x0FF8 -MULTU T8, S2 -MFLO V0 -BEQ R0, R0, 0x7F0CB66C -LW S0, 0x0004 (SP) -BLEZ S2, 0x7F0CB64C -OR A3, R0, R0 -ADDIU T1, S1, 0x000F -ANDI T9, T1, 0x0FF0 -SRA T1, T9, 0x1 -SLL T0, S1, 0x1 -LW V1, 0x0038 (SP) -BLEZ S1, 0x7F0CB638 -OR V0, R0, R0 -SLTI AT, S0, 0x0101 -BEQ AT, R0, 0x7F0CB5F0 -SLL T8, V0, 0x1 -ADDU A2, V0, A0 -LBU T7, 0x0001 (A2) -SLL T8, T7, 0x1 -LBU T7, 0x0000 (A2) -ADDU T9, V1, T8 -LHU T6, 0x0000 (T9) -SLL T8, T7, 0x1 -ADDU T9, V1, T8 -LHU T7, 0x0000 (T9) -SLL T8, T7, 0x4 -SRA T7, V0, 0x1 -OR T9, T6, T8 -ADDU T6, T3, T7 -BEQ R0, R0, 0x7F0CB628 -SB T9, 0x0000 (T6) -ADDU A2, A1, T8 -LHU T7, 0x0002 (A2) -SLL T9, T7, 0x1 -LHU T7, 0x0000 (A2) -ADDU T6, V1, T9 -LHU T8, 0x0000 (T6) -SLL T9, T7, 0x1 -ADDU T6, V1, T9 -LHU T7, 0x0000 (T6) -SLL T9, T7, 0x4 -SRA T7, V0, 0x1 -OR T6, T8, T9 -ADDU T8, T3, T7 -SB T6, 0x0000 (T8) -ADDIU V0, V0, 0x0002 -SLT AT, V0, S1 -BNEL AT, R0, 0x7F0CB5AC -SLTI AT, S0, 0x0101 -ADDIU A3, A3, 0x0001 -ADDU T3, T3, T1 -ADDU A0, A0, S1 -BNE A3, S2, 0x7F0CB5A0 -ADDU A1, A1, T0 -ADDIU T9, S1, 0x000F -ANDI T7, T9, 0x0FF0 -SRA T6, T7, 0x1 -MULTU T6, S2 -MFLO V0 -BEQ R0, R0, 0x7F0CB66C -LW S0, 0x0004 (SP) -LW S0, 0x0004 (SP) -LW S1, 0x0008 (SP) -LW S2, 0x000C (SP) -JR RA -ADDIU SP, SP, 0x0028 diff --git a/notes/GE Documentation/images text and font/Huffman/7F0CB7E0-subroutine.txt b/notes/GE Documentation/images text and font/Huffman/7F0CB7E0-subroutine.txt deleted file mode 100644 index 884cb17..0000000 --- a/notes/GE Documentation/images text and font/Huffman/7F0CB7E0-subroutine.txt +++ /dev/null @@ -1,232 +0,0 @@ -7F0CB7E0 ;image-specific doohick - accepts: A0:p->samples, A1:sizeval1, A2:t#1val * sizeval2, A3:first 3 bits of compressed data, SP+10: bitsample size (t#3val) -ADDIU SP,SP,FFF0 -SW S1,0008 (SP) -SW S0,0004 (SP) -OR S0,A0,R0 ;S0=A0: p->samples -OR S1,A3,R0 ;S1=A3: first three bits of compressed data: 0-7 -SW S2,000C (SP) -BLEZ A2,7F0CBAE0 ;quit if the fieldsize is silly -OR V0,R0,R0 ;V0=0 fieldcount -LW T1,0020 (SP) ;T1=bitsample size -//7F0CB804: loop for fieldsize -// -// -//retrieve sample and previous sample -BLEZ A1,7F0CBAD4 ;branch if sizeval1 is stupid -OR V1,R0,R0 ;V1=0 -MULTU V0,A1 -SLL T2,T1,0x1 ;T2=bitsamplesize*2 -OR S2,S1,R0 ;S2=S1: 3bits -MFLO A3 ;A3=fieldcount * sizeval1 -ADDU T0,A3,S0 ;T0=&samples[fieldcount * sizeval1] -NOP -//7F0CB824: loop for all samples in segment -LBU T6,0000 (T0) ;T6=samples[fieldcount * sizeval1] -SLTIU AT,S2,0007 ;TRUE if 3bit value is, in fact, 3bits -BLEZ V1,7F0CB83C ;if firest value, then you can't have a previous value, now can you? -ADDU A0,T6,T2 ;A0=cur + bitsamplesize*2 -BEQ R0,R0,7F0CB840 -LBU T3,FFFF (T0) ;T3=previous sample -//7F0CB83C: -OR T3,R0,R0 ;T3=0 default previous sample ;*) -//7F0CB840: determine backtrack sample if applicable -BLEZ V0,7F0CB864 ;branch if fieldcount <=0 -OR T4,R0,R0 ;T4=0 -ADDIU T7,V0,FFFF ;T7=fieldcount-1 -MULTU T7,A1 -MFLO T8 ;T8=(fieldcount-1)*sizeval1 -ADDU T9,T8,V1 ;T9=(fieldcount-1)*sizeval1 + sampcount -ADDU T6,T9,S0 ;T6=&samples[(fieldcount-1)*sizeval1 + sampcount] -BEQ R0,R0,7F0CB864 -LBU T4,0000 (T6) ;T4=backtrack sample -//7F0CB864: determine previous backtrack sample if applicable -BLEZ V1,7F0CB88C ;branch if sampcount <=0 -OR T5,R0,R0 ;T5=0 -BLEZ V0,7F0CB88C ;branch if fieldcount <=0 -ADDIU T7,V0,FFFF ;T7=fieldcount-1 -MULTU T7,A1 -MFLO T8 ;T8=(fieldcount-1)*sizeval1 -ADDU T9,T8,V1 ;T9=(fieldcount-1)*sizeval1 + sampcount -ADDU T6,T9,S0 ;T6=&samples[(fieldcount-1)*sizeval1 + sampcount] -BEQ R0,R0,7F0CB88C -LBU T5,FFFF (T6) ;T5=previous backtrack sample -//7F0CB88C: -BEQ AT,R0,7F0CBAC8 ;skip processing if command is invalid -SLL T7,S2,0x2 ;T7=3bit value to command offset -LUI AT,8006 -ADDU AT,AT,T7 -LW T7,BE64 (AT) ;T7=8005BE64+offset: TLB pointer -JR T7 -NOP - -7F0CB8A8 img0 -ADDU T8,A0,T3 ;T8=cur + bitsamplesize*2 + pre -DIV T8,T1 -ADDU T6,S0,A3 ;T6=&sample[fieldcount*width] -ADDU T7,T6,V1 ;T7=&sample[fieldcount*width+sampcount(c)] -MFHI T9 ;T9=(cur + bitsamplesize*2 + pre)%bitsamplesize -SB T9,0000 (T7) ;store converted to final -BNEZ T1,7F0CB8CC -NOP -BREAK -//7F0CB8CC: -ADDIU AT,R0,FFFF -BNE T1,AT,7F0CB8E4 -LUI AT,8000 -BNE T8,AT,7F0CB8E4 -NOP -BREAK -//7F0CB8E4: -BEQ R0,R0,7F0CBACC -ADDIU V1,V1,0001 - -7F0CB8EC img1 -ADDU T8,A0,T4 ;T8=cur + bitsamplesize*2 + bcur -DIV T8,T1 -ADDU T9,S0,A3 -ADDU T7,T9,V1 ;T7=&sample[fieldcount*width + sampcount] -MFHI T6 ;T6=(cur + bitsamplesize*2 + bcur)%bitsamplesize -SB T6,0000 (T7) ;save val to cur -BNEZ T1,7F0CB910 -NOP -BREAK -ADDIU AT,R0,FFFF -BNE T1,AT,7F0CB928 -LUI AT,8000 -BNE T8,AT,7F0CB928 -NOP -BREAK -BEQ R0,R0,7F0CBACC -ADDIU V1,V1,0001 - -7F0CB930 img2 -ADDU T8,A0,T5 ;T8=cur + bitsamplesize*2 + bpre -DIV T8,T1 -ADDU T6,S0,A3 -ADDU T7,T6,V1 ;T7=&sample[fieldcount*width + sampcount] -MFHI T9 ;T9=(cur + bitsamplesize*2 + bpre)%bitsamplesize -SB T9,0000 (T7) -BNEZ T1,7F0CB954 -NOP -BREAK -ADDIU AT,R0,FFFF -BNE T1,AT,7F0CB96C -LUI AT,8000 -BNE T8,AT,7F0CB96C -NOP -BREAK -BEQ R0,R0,7F0CBACC -ADDIU V1,V1,0001 - -7F0CB974 img3 -ADDU T8,T3,T4 ;T8=pre+bcur -SUBU T6,T8,T5 ;T6=pre+bcur-bpre -ADDU T9,T6,A0 ;T9=pre + bcur - bpre + cur+bitsamplesize*2 -DIV T9,T1 -ADDU T8,S0,A3 -ADDU T6,T8,V1 ;T6=&sample[fieldcount*width + sampcount] -MFHI T7 ;(pre + bcur - bpre + cur+bitsamplesize*2)%bitsamplesize -SB T7,0000 (T6) -BNEZ T1,7F0CB9A0 -NOP -BREAK -ADDIU AT,R0,FFFF -BNE T1,AT,7F0CB9B8 -LUI AT,8000 -BNE T9,AT,7F0CB9B8 -NOP -BREAK -BEQ R0,R0,7F0CBACC -ADDIU V1,V1,0001 - -7F0CB9C0 img4 -SUBU T9,T4,T5 ;T9=bcur-bpre -BGEZ T9,7F0CB9D4 -SRA T8,T9,0x1 ;T8=(bcur-bpre)/2 -ADDIU AT,T9,0001 -SRA T8,AT,0x1 ;T8=(bcur-bpre+1)/2 -//7F0CB9D4: -ADDU T7,T8,T3 ;T7=T8+pre -ADDU T6,T7,A0 ;T6=T8+pre+cur+bitsamplesize*2 -DIV T6,T1 -ADDU T8,S0,A3 -ADDU T7,T8,V1 ;T7=&sample[fieldcount*width + sampcount] -MFHI T9 ;T9=(T8+pre+cur+bitsamplesize*2)%bitcount -SB T9,0000 (T7) -BNEZ T1,7F0CB9FC -NOP -BREAK -ADDIU AT,R0,FFFF -BNE T1,AT,7F0CBA14 -LUI AT,8000 -BNE T6,AT,7F0CBA14 -NOP -BREAK -BEQ R0,R0,7F0CBACC -ADDIU V1,V1,0001 - -7F0CBA1C img5 -SUBU T6,T3,T5 ;T6= pre - bpre -BGEZ T6,7F0CBA30 ;skip if positive -SRA T8,T6,0x1 ;T8= (pre - bpre) / 2 -ADDIU AT,T6,0001 ;AT= (prevsamp - prevback)+1 -SRA T8,AT,0x1 ;T8= (prevsamp - prevback+1) /2 -//7F0CBA30: positive values = difference/2 -ADDU T9,T8,T4 ;T9=(difference/2) + backtrack sample -ADDU T7,T9,A0 ;T7=(difference/2) + backtrack sample + sample + samplesize*2 -DIV T7,T1 ;T1=samplesize -ADDU T8,S0,A3 ;T8=p->sample + fieldcount * sizeval1 -ADDU T9,T8,V1 ;T9=&sample[fieldcount * sizeval1+sampcount] -MFHI T6 ;T6=((difference/2) + backtrack sample + sample + samplesize*2) % samplesize -SB T6,0000 (T9) ;store value -> sample[fieldcount * sizeval1+sampcount] -BNEZ T1,7F0CBA58 ;break if division by zero occured -NOP -BREAK -//7F0CBA58: test posthumously for division by -1 -ADDIU AT,R0,FFFF ;AT=-1 -BNE T1,AT,7F0CBA70 ;break if either value = -1 -LUI AT,8000 -BNE T7,AT,7F0CBA70 -NOP -BREAK -//7F0CBA70: go forth patsy! -BEQ R0,R0,7F0CBACC -ADDIU V1,V1,0001 ;V1++ sampcount++ - -7F0CBA78: img6 -ADDU T7,T3,T4 ;T7=pre+bcur -BGEZ T7,7F0CBA8C ;if pre+bcur<0, add 1 -SRA T8,T7,0x1 -ADDIU AT,T7,0001 -SRA T8,AT,0x1 ;T8=val/2 -//7F0CBA8C: -ADDU T6,T8,A0 ;T6=cur + bitsamplesize*2 + val/2 -DIV T6,T1 -MFHI T9 -ADDU T7,S0,A3 -ADDU T8,T7,V1 -SB T9,0000 (T8) -BNEZ T1,7F0CBAB0 -NOP -BREAK -ADDIU AT,R0,FFFF -BNE T1,AT,7F0CBAC8 -LUI AT,8000 -BNE T6,AT,7F0CBAC8 -NOP -BREAK -ADDIU V1,V1,0001 -//7F0CBACC: loop for samples in segment -BNE V1,A1,7F0CB824 ;loop while there are more samples in segment -ADDIU T0,T0,0001 ;T0++ samples[cur+1] -//7F0CBAD4: loop for fieldsize -ADDIU V0,V0,0001 ;V0++ fieldcount++ -BNE V0,A2,7F0CB804 ;loop if there are more elements in the field -NOP -//7F0CBAE0: !quit! -LW S0,0004 (SP) -LW S1,0008 (SP) -LW S2,000C (SP) -JR RA -ADDIU SP,SP,0010 diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCB8C.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCB8C.txt deleted file mode 100644 index 344c4b3..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCB8C.txt +++ /dev/null @@ -1,11 +0,0 @@ -7F0C805C 0xFCB8C 'store' compression types 0 & 1 -LW T6,30AC (SP) ;T6=final target -LW T3,0088 (SP) ;T3=? -OR A1,S6,R0 ;A1=S6: width -OR A2,S7,R0 ;A2=S7: height -ADDU S0,T6,T3 -OR A0,S0,R0 ;A0=final target -JAL 7F0C9A9C ;copy and link final image -LW A3,0080 (SP) ;A3=table# (data nibble 3) -BEQ R0,R0,0xFD08C -OR S1,V0,R0 ;S1=V0: (return from 7F0C9A9C) diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCBB4.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCBB4.txt deleted file mode 100644 index beb9c1c..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCBB4.txt +++ /dev/null @@ -1,43 +0,0 @@ -7F0C8084 0xFCBB4 compression type 2 -LW S4,0080 (SP) ;S4= -LUI T4,8005 -LUI A2,8005 -SLL T7,S4,0x2 ;T7=S4->offset S4*4 -ADDU T4,T4,T7 -LW T4,9178 (T4) ;T4=80049178+offset: t#1val -ADDU A2,A2,T7 -LW A2,91E0 (A2) ;A2=800491E0+offset: t#3val -MULTU T4,S6 -OR S4,T7,R0 ;S4=offset -OR A0,S8,R0 ;A0=S8: p->sample -MFLO T9 ;T9=t#1val * width -NOP -NOP -MULTU T9,S7 -MFLO A1 ;A1=t#1val * width * height -JAL 7F0C91D0 ;generate a sample table -NOP -//7F0C80CC 0xFCBFC -LUI T8,8005 -ADDU T8,T8,S4 -LW T8,91AC (T8) ;T8=800491AC+offset: t#2val -SLL T5,S5,0x2 -SUBU T5,T5,S5 ;T5=width*height*3 -BEQ T8,R0,0xFCC20 ;branch if no alpha needed -ADDU A0,S8,T5 ;A0=p->sample + width*height*3 -JAL 7F0C9A48 ;grab alpha bit values -OR A1,S5,R0 ;A1=width*height -//7F0C80F0 0xFCC20 -LW T6,30AC (SP) -LW T3,0088 (SP) -LW T7,0080 (SP) -OR A0,S8,R0 -ADDU S0,T6,T3 -OR A3,S0,R0 -OR A1,S6,R0 -OR A2,S7,R0 -JAL 7F0C9DA4 ;generate and link final image -SW T7,0010 (SP) ;SP+10= -//7F0C8118 0xFCC48 -BEQ R0,R0,0xFD08C -OR S1,V0,R0 diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCC50.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCC50.txt deleted file mode 100644 index 6438801..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCC50.txt +++ /dev/null @@ -1,52 +0,0 @@ -7F0C8120 0xFCC50 compression type 3 -LW S4,0080 (SP) -LUI T9,8005 -ADDIU T9,T9,9178 ;T9=80049178 -SLL T4,S4,0x2 ;T4=S4->offset (S4*4) -ADDU S3,T4,T9 -LW T8,0000 (S3) ;T8=t#1val -OR S4,T4,R0 ;S4=T4: table offset -OR S1,R0,R0 ;S1=0 -BLEZ T8,0xFCCB4 ;technically should never take this branch -LUI T5,8005 -ADDIU T5,T5,91E0 ;T5=800591E0 -ADDU S2,T4,T5 -OR S0,S8,R0 ;S0=S8: p->samples -OR A0,S0,R0 ;A0=S0=S8 -//7F0C8158 0xFCC88: loop to generate a sample table for each byte of pixel data -OR A1,S5,R0 ;A1=S5: width*height -JAL 7F0C91D0 ;generate sample table -LW A2,0000 (S2) ;A2=t#3val -//7F0C8164 0xFCC94: -MULTU S6,S7 -LW T3,0000 (S3) ;T3=t#1val -ADDIU S1,S1,0001 ;S1++ -SLT AT,S1,T3 -MFLO T6 ;T6=width*height -ADDU S0,S0,T6 ;p->samples+=width*height -BNEL AT,R0,0xFCC88 ;branch if pixeldata count < actual -OR A0,S0,R0 ;A0=p->samples for next chunk of data -//7F0C8184 0xFCCB4: -LUI T7,8005 -ADDU T7,T7,S4 -LW T7,91AC (T7) ;T7=800591AC+offset: t#2val -SLL T4,S5,0x2 -SUBU T4,T4,S5 ;T4=width*height*3 -BEQ T7,R0,0xFCCD8 ;branch if no alpha needed -ADDU A0,S8,T4 ;A0=p->samples + width*height*3 -JAL 7F0C9A48 ;fetch alpha bits -OR A1,S5,R0 ;A1=width*height -//7F0C81A8 0xFCCD8: -LW T9,30AC (SP) -LW T8,0088 (SP) -LW T5,0080 (SP) -OR A0,S8,R0 -ADDU S0,T9,T8 -OR A3,S0,R0 -OR A1,S6,R0 -OR A2,S7,R0 -JAL 7F0C9DA4 ;generate and link final image -SW T5,0010 (SP) -//7F0C81D0 0xFCD00: -BEQ R0,R0,0xFD08C -OR S1,V0,R0 diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCD08.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCD08.txt deleted file mode 100644 index e7121eb..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCD08.txt +++ /dev/null @@ -1,39 +0,0 @@ -7F0C81D8 0xFCD08 compression type 4 -LW S4,0080 (SP) ;S4=nibble3 (imgtype) -LUI T3,8005 -OR A0,S8,R0 ;A0=p->samples -SLL T6,S4,0x2 -ADDU T3,T3,T6 -LW T3,9178 (T3) ;T3=80049178+offset: t#1val -OR S4,T6,R0 ;S4=table offset -MULTU T3,S6 -MFLO T7 -NOP -NOP -MULTU T7,S7 -MFLO A1 ;A1=t#1val * width * height -JAL 7F0C96BC ;funny get samples -NOP -//7F0C8214 0xFCD44 -LUI T4,8005 -ADDU T4,T4,S4 -LW T4,91AC (T4) ;T4=800491AC+offset: t#2val -SLL T9,S5,0x2 -SUBU T9,T9,S5 ;T9=width*height*3 -BEQ T4,R0,0xFCD68 ;branch if alpha not needed -ADDU A0,S8,T9 ;A0=p->samples + width*height*3 -JAL 7F0C9A48 ;grab alpha bit values -OR A1,S5,R0 ;A1=width*height -//7F0C8238 0xFCD68 spit out an image -LW T8,30AC (SP) -LW T5,0088 (SP) -LW T6,0080 (SP) -OR A0,S8,R0 -ADDU S0,T8,T5 -OR A3,S0,R0 -OR A1,S6,R0 -OR A2,S7,R0 -JAL 7F0C9DA4 ;generate and link final image -SW T6,0010 (SP) -BEQ R0,R0,0xFD08C -OR S1,V0,R0 diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCD90.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCD90.txt deleted file mode 100644 index 4312dd9..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCD90.txt +++ /dev/null @@ -1,23 +0,0 @@ -7F0C8268 0xFCD90 compression type 5 -LW T3,0080 (SP) ;T3=imgtype -LUI A1,8005 -ADDIU A0,SP,00A8 ;A0=SP+A8: p->samples -SLL T7,T3,0x2 -ADDU A1,A1,T7 -JAL 7F0C9920 -LW A1,9214 (A1) ;A1=80049214+offset: t#4val bitcount for samples -//7F0C827C 0xFCDAC -LW T4,30AC (SP) ;T4=p->final -LW T9,0088 (SP) -LW T8,0080 (SP) ;T8=imgtype -OR A0,S6,R0 ;A0=width -ADDU S0,T4,T9 -OR A2,S0,R0 ;A2=p->final + ? -OR A1,S7,R0 ;A1=height -ADDIU A3,SP,00A8 ;A3=SP+A8: p->samples -SW V0,0010 (SP) ;SP+10=? -JAL 7F0CA890 ;different final image generator -SW T8,0014 (SP) ;SP+14=imgtype -//7F0C82A8 0xFCDD8 -BEQ R0,R0,0xFD08C -OR S1,V0,R0 diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCDE8.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCDE8.txt deleted file mode 100644 index ef8dfe9..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCDE8.txt +++ /dev/null @@ -1,31 +0,0 @@ -7F0C82B8 0xFCDE8 compression type 6 -LW T5,0080 (SP) -LUI A1,8005 -ADDIU A0,SP,00A8 -SLL T6,T5,0x2 -ADDU A1,A1,T6 -JAL 7F0C9920 -LW A1,9214 (A1) -//7F0C82D4 0xFCE04 -OR S1,V0,R0 -OR A0,S8,R0 -OR A1,S5,R0 -JAL 7F0C91D0 ;generate a sample table -OR A2,V0,R0 -//7F0C82E8 0xFCE18 -LW T3,30AC (SP) -LW T7,0088 (SP) -LW T9,0080 (SP) -ADDIU T4,SP,00A8 -ADDU S0,T3,T7 -OR A3,S0,R0 -SW T4,0010 (SP) -OR A0,S8,R0 -OR A1,S6,R0 -OR A2,S7,R0 -SW S1,0014 (SP) -JAL 7F0CAC58 ;another completely different image outputer -SW T9,0018 (SP) -//7F0C831C 0xFCE4C -BEQ R0,R0,0xFD08C -OR S1,V0,R0 diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCE54.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCE54.txt deleted file mode 100644 index 7c87b5e..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCE54.txt +++ /dev/null @@ -1,28 +0,0 @@ -7F0C8324 0xFCE54 compression type 7 -LW T8,0080 (SP) -LUI A1,8005 -ADDIU A0,SP,00A8 -SLL T5,T8,0x2 -ADDU A1,A1,T5 -JAL 7F0C9920 -LW A1,9214 (A1) -OR S1,V0,R0 -OR A0,S8,R0 -JAL 7F0C96BC -OR A1,S5,R0 -LW T6,30AC (SP) -LW T3,0088 (SP) -LW T4,0080 (SP) -ADDIU T7,SP,00A8 -ADDU S0,T6,T3 -OR A3,S0,R0 -SW T7,0010 (SP) -OR A0,S8,R0 -OR A1,S6,R0 -OR A2,S7,R0 -SW S1,0014 (SP) -JAL 7F0CAC58 -SW T4,0018 (SP) -BEQ R0,R0,0xFD08C -OR S1,V0,R0 -LW S4,0080 (SP) diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCEBC.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCEBC.txt deleted file mode 100644 index dde26bf..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCEBC.txt +++ /dev/null @@ -1,129 +0,0 @@ -7F0C838C 0xFCEBC compression type 8 -LW S4,0080 (SP) ;S4=[5] {imgtype} -ADDIU A0,R0,0003 ;A0=3 -SLL T9,S4,0x2 ;T9=S4->offset (S4*4)[14] -JAL 7F0CBF2C ;returns next A0=3 bits from data [5] -OR S4,T9,R0 ;S4*=4: -//7F0C83A0 0xFCED0 -LUI T8,8005 -ADDIU T8,T8,9178 ;T8=80049178: table#1 -ADDU S3,S4,T8 ;S3=p->sample S4 in table#1 -LW T5,0000 (S3) ;T5=sample in table#1 [2] -LUI T3,8005 -ADDIU T3,T3,91E0 ;T3=800491E0: table#3 -MULTU T5,S6 ;sample#1 * [38] {S6=data nibbles 4+5?} -ADDU S2,S4,T3 ;S2=p->sample S4 in table#3 -OR S0,V0,R0 ;S0=next 3 bits from data -LW A2,0000 (S2) ;A2=sample in table#3 [10] -OR A0,S8,R0 ;A0=S8: target for samples [803B06A0] -MFLO T6 ;T6=sample#1 * [38] -NOP -NOP -MULTU T6,S7 ;sample#1 * [38] *[38] {S7=data nibbles 6+7} -MFLO A1 ;A1=sample#1 * [38] *[38]= [1880] -JAL 7F0C91D0 ;generate a sample table! -NOP -//7F0C83E8: 0xFCF18 -LW T7,0000 (S3) ;T7=value in table#1 [2] -LW T4,0000 (S2) ;T4=value in table#3 [10] -OR A0,S8,R0 ;A0=S8: samples -MULTU T7,S7 ;table#1 * second size value -OR A1,S6,R0 ;A1=S6: first size value -OR A3,S0,R0 ;A3=S0: 3 bits extracted from data [5] -SW T4,0010 (SP) ;save table#3 -> SP+10 -MFLO A2 ;A2=table#1 * second size value [2*38=70] -JAL 7F0CB7E0 ;image-specific doohick -NOP -//7F0C8410: 0xFCF40 -LUI T9,8005 -ADDU T9,T9,S4 -LW T9,91AC (T9) ;T9=entry in table#2 -SLL T8,S5,0x2 -SUBU T8,T8,S5 ;T8=width*height*3 [C40*3=24C0] -BEQ T9,R0,0xFCF64 ;branch if t#2val=0 -ADDU A0,S8,T8 ;A0=samples[width*height*3] -JAL 7F0C9A48 -OR A1,S5,R0 ;A1=S5: width*height -//7F0C8434: 0xFCF64 -LW T5,30AC (SP) ;T5=final target? [800C31E8] -LW T6,0088 (SP) ;T6=??? [0] -LW T3,0080 (SP) ;nibble3 -OR A0,S8,R0 ;A0=samples -ADDU S0,T5,T6 -OR A3,S0,R0 ;A3=final target+offset? -OR A1,S6,R0 ;A1=width -OR A2,S7,R0 ;A2=height -JAL 7F0C9DA4 ;generate and link final image -SW T3,0010 (SP) ;SP+10=nibble3 -BEQ R0,R0,0xFD08C -OR S1,V0,R0 ;S1=V0: -//7F0CA88C - - -7F0CBF2C: - accepts A0=#bits to grab - retrieves bits using an odd bitorder, left to right: 012345678 - for a byte C0, retrieving 2 bits returns 3 -LUI A1,8009 -ADDIU A1,A1,D0A8 -LW V1,0000 (A1) ;V1=8008D0A8: bitcount [0] -LUI A3,8009 -ADDIU A3,A3,D0A0 ;A3=8008D0A0: p->curpos -SLT AT,V1,A0 -BEQ AT,R0,7F0CBF84 ;branch if bitcount > needed -LUI A2,8009 -ADDIU A2,A2,D0A4 ;A2=8008D0A4: p->cur datatable -//7F0CBF50: grab more data from compressed file -LW V0,0000 (A3) ;V0=8008D0A0: p->curpos [803B2704] -LW T7,0000 (A2) ;T7=8008D0A4: datatable [00538388] -ADDIU T1,V1,0008 ;T1=bitcount+one byte -LBU T6,0000 (V0) ;T6=byte from data -SLL T8,T7,0x8 ;T8=datatable pushed one byte -SLT AT,T1,A0 ;TRUE if enough bits now in datatable -ADDIU T0,V0,0001 ;T0=p->next byte in data -OR T9,T6,T8 ;T9=datatable | next byte -SW T9,0000 (A2) ;save new datatable -SW T0,0000 (A3) ;save new curpos -SW T1,0000 (A1) ;save new bitcount -BNEZ AT,7F0CBF50 ;loop until enough is present -OR V1,T1,R0 ;V1=bitcount -//7F0CBF84: -LUI A2,8009 -ADDIU A2,A2,D0A4 -LW T3,0000 (A2) ;T3=8008D0A4: datatable [538388BF] -ADDIU T7,R0,0001 ;T7=1 -SUBU T2,V1,A0 ;T2=bitcount-#bits [5] -SLLV T6,T7,A0 ;T6=1<<#bits [8] -ADDIU T8,T6,FFFF ;T8=bitmask [7] -SRLV T5,T3,T2 ;roll datatable to grab #bits from upper nibble [029C1C45] -SW T2,0000 (A1) ;save new bitcount -JR RA -AND V0,T5,T8 ;V0=next #bits from datatable -//7F0CBFB0 - - -7F0C9A48 fetch alpha bit registers - accepts: A0=samples[width*height*3], A1=width*height -ADDIU SP,SP,FFD8 -SW S2,0020 (SP) -SW S0,0018 (SP) -OR S2,A1,R0 ;S2=width*height -SW RA,0024 (SP) -SW S1,001C (SP) -BLEZ A1,7F0C9A84 ;do nothing if the image uses stupid proportions -OR S0,R0,R0 ;S0=0 count -OR S1,A0,R0 ;S1=samples[width*height*3] -//7F0C9A6C: -JAL 7F0CBF2C ;grab 1 bit from data -ADDIU A0,R0,0001 -ADDIU S0,S0,0001 ;S0++ count++ -ADDIU S1,S1,0001 ;S1++ cur++ -BNE S0,S2,7F0C9A6C ;loop while count < width*height -SB V0,FFFF (S1) ;bit->samples[width*height*3 + cur] -//7F0C9A84: -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 diff --git a/notes/GE Documentation/images text and font/Huffman/Huffman-FCF94.txt b/notes/GE Documentation/images text and font/Huffman/Huffman-FCF94.txt deleted file mode 100644 index a243fd7..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Huffman-FCF94.txt +++ /dev/null @@ -1,57 +0,0 @@ -7F0C8464 0xFCF94 compression type 9 -LW S4,0080 (SP) ;S4=table (nibble#3) -ADDIU A0,R0,0003 -SLL T7,S4,0x2 -JAL 7F0CBF2C ;grab next 3 bits from data -OR S4,T7,R0 ;S4=table offset -//7F0C8478 0xFCFA8 -LUI T4,8005 -ADDIU T4,T4,9178 ;T4=80049178: t#1 -ADDU S3,S4,T4 -LW T9,0000 (S3) ;T9=t#1val -OR S0,V0,R0 ;S0=V0: 3bits -OR A0,S8,R0 ;A0=S8: p->samples -MULTU T9,S6 -MFLO T8 ;T8=t#1val * width -NOP -NOP -MULTU T8,S7 -MFLO A1 ;A1=t#1val * width * height -JAL 7F0C96BC ;get samples -NOP -//7F0C84B0 0xFCFE0 -LW T5,0000 (S3) ;T5=t#1val -LUI T6,8005 -ADDU T6,T6,S4 -MULTU T5,S7 -LW T6,91E0 (T6) ;T6=800491E0+offset: t#3val -OR A0,S8,R0 ;A0=S8: p->samples -OR A1,S6,R0 ;A1=width -OR A3,S0,R0 ;A3=3bits -SW T6,0010 (SP) ;SP+10=t#3val -MFLO A2 ;A2=T3#val*height -JAL 7F0CB7E0 ;image-specific doohick -NOP -//7F0C84E0 0xFD010 -LUI T3,8005 -ADDU T3,T3,S4 -LW T3,91AC (T3) ;T3=800491AC+offset: t#2val -SLL T7,S5,0x2 -SUBU T7,T7,S5 ;T7=width*height*3 -BEQ T3,R0,0xFD034 ;if not an alpha-bit type, branch -ADDU A0,S8,T7 ;A0=p->samples + width*height*3 -JAL 7F0C9A48 ;fetch alpha yo -OR A1,S5,R0 ;A1=width*height -//7F0C8504 0xFD034 -LW T4,30AC (SP) ;T4=final target -LW T9,0088 (SP) -LW T8,0080 (SP) ;nibble3 -OR A0,S8,R0 ;A0=p->samples -ADDU S0,T4,T9 ;S0=final target + ? -OR A3,S0,R0 ;A3=S0 -OR A1,S6,R0 ;A1=width -OR A2,S7,R0 ;A2=height -JAL 7F0C9DA4 ;generate and link final image -SW T8,0010 (SP) ;SP+10=nibble3 -BEQ R0,R0,0xFD08C -OR S1,V0,R0 ;S1=V0: final size diff --git a/notes/GE Documentation/images text and font/Huffman/Lead in.txt b/notes/GE Documentation/images text and font/Huffman/Lead in.txt deleted file mode 100644 index f760640..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Lead in.txt +++ /dev/null @@ -1,21 +0,0 @@ -7F0C7DFC 0x decompress Huffman compression types - accepts: A0=source, A1=target, A2=?, A3=? - -//7F0C8020: -MULTU S6,S7 -SLL T5,V0,0x2 ;T5=compression type->offset (V0*4) {V0=data nibble 8?} -MFLO S5 ;S6*S7: width * height -SLTI AT,S5,2001 -BNEL AT,R0,7F0C8044 -SLTIU AT,V0,000A ;AT=TRUE if a valid compression format -BEQ R0,R0,7F0C8724 -OR V0,R0,R0 -- SLTIU AT,V0,000A -//7F0C8044: jump to handler routine -BEQ AT,R0,7F0C8534 ;branch if not a valid format -LUI AT,8006 -ADDU AT,AT,T5 -LW T5,BD30 (AT) ;T5=8005BD30+offset: TLB pointer to decompression routine -JR T5 -NOP - diff --git a/notes/GE Documentation/images text and font/Huffman/Trail Out.txt b/notes/GE Documentation/images text and font/Huffman/Trail Out.txt deleted file mode 100644 index 5bbfc6b..0000000 --- a/notes/GE Documentation/images text and font/Huffman/Trail Out.txt +++ /dev/null @@ -1,151 +0,0 @@ -7F0C8534 0xFD064 invalid formats go here -LUI T5,8009 -LW T5,D090 (T5) ;T5=8008D090: -LUI T7,8009 -ADDIU T7,T7,C730 ;T7=8008C730: -SLL T6,T5,0x4 -ADDU V1,T6,T7 ;V1=8008C730+offset: -SB S6,0001 (V1) ;save width -> -SB S7,0008 (V1) ;save height -> -//7F0C8554 0xFD084 -BEQ R0,R0,0xFD084 -NOP - -7F0C855C 0xFD08C branch target for all routines!! -LW T4,30B0 (SP) -ADDIU AT,R0,0001 -LW T9,30B4 (SP) -BNE T4,AT,0xFD0B8 -NOP -BLEZ T9,0xFD0B8 -OR A0,S0,R0 -OR A1,S6,R0 -OR A2,S7,R0 -JAL 7F0CB67C -LW A3,0080 (SP) -//7F0C8588 0xFD0B8 -LUI V0,8009 -LW T5,0088 (SP) -ADDIU V0,V0,D0A8 -LW T3,0000 (V0) -ADDIU S1,S1,0007 -ADDIU AT,R0,FFF8 -AND T8,S1,AT -ADDU T6,T5,T8 -BNEZ T3,0xFD0F8 -SW T6,0088 (SP) -LUI T7,8009 -LW T7,D0A0 (T7) -LUI AT,8009 -ADDIU T4,T7,0001 -BEQ R0,R0,0xFD0FC -SW T4,D0A0 (AT) -//7F0C85C8 0xFD0F8 -SW R0,0000 (V0) -//7F0C85CC 0xFD0FC -LW T9,00A0 (SP) -LW T5,009C (SP) -ADDIU T8,T9,0001 -BNE T8,T5,0xFCA54 -SW T8,00A0 (SP) -LUI T0,8009 -ADDIU T0,T0,D090 -SW S6,0098 (SP) -SW S7,0094 (SP) -LW T2,30B4 (SP) -LW T1,30B0 (SP) -LW A3,30B8 (SP) -LW A2,0070 (SP) -LW S6,0098 (SP) -BEQ A2,R0,0xFD170 -LW S7,0094 (SP) -//7F0C860C 0xFD13C -LW T6,000C (A3) -LW A1,0000 (T0) -LUI AT,8009 -LW T3,0000 (T6) -SLL T4,A1,0x4 -ADDU AT,AT,T4 -SRL T7,T3,0x14 -SH T7,C730 (AT) -ADDIU T9,A1,0001 -SLTI AT,T9,0096 -BNEZ AT,0xFD170 -SW T9,0000 (T0) -SW R0,0000 (T0) -//7F0C8640 0xFD170 -BNEZ T1,0xFD250 -SLTI AT,T2,0002 -BNEZ AT,0xFD234 -LW S4,30AC (SP) -LW T3,30B4 (SP) -LW T5,0088 (SP) -ADDIU T6,R0,0001 -SLTI AT,T3,0002 -OR S2,S6,R0 -OR S3,S7,R0 -SW T6,00A0 (SP) -BNEZ AT,0xFD218 -ADDU S0,S4,T5 -//7F0C8674 0xFD1A4 -LW T7,0080 (SP) -OR A0,S4,R0 -OR A1,S0,R0 -OR A2,S2,R0 -OR A3,S3,R0 -JAL 7F0C8754 -SW T7,0010 (SP) -//7F0C8690 0xFD1C0 -OR S1,V0,R0 -OR A0,S4,R0 -OR A1,S2,R0 -OR A2,S3,R0 -JAL 7F0CB67C -LW A3,0080 (SP) -//7F0C86A8 0xFD1D8 -LW T6,00A0 (SP) -LW T4,0088 (SP) -LW T7,30B4 (SP) -ADDIU S2,S2,0001 -ADDIU S3,S3,0001 -SRA T8,S2,0x1 -SRA T5,S3,0x1 -OR S4,S0,R0 -ADDIU T3,T6,0001 -ADDU T9,T4,S1 -SW T3,00A0 (SP) -SW T9,0088 (SP) -OR S2,T8,R0 -OR S3,T5,R0 -BNE T3,T7,0xFD1A4 -ADDU S0,S0,S1 -OR A0,S4,R0 -OR A1,S2,R0 -OR A2,S3,R0 -JAL 7F0CB67C -LW A3,0080 (SP) -BEQ R0,R0,0xFD254 -LW V0,0088 (SP) -//7F0C8704 0xFD234 -ADDIU AT,R0,0001 -BNE T2,AT,0xFD250 -LW A0,30AC (SP) -OR A1,S6,R0 -OR A2,S7,R0 -JAL 7F0CB67C -LW A3,0080 (SP) -//7F0C8720 0xFD250 -LW V0,0088 (SP) -LW RA,004C (SP) -LW S0,0028 (SP) -LW S1,002C (SP) -LW S2,0030 (SP) -LW S3,0034 (SP) -LW S4,0038 (SP) -LW S5,003C (SP) -LW S6,0040 (SP) -LW S7,0044 (SP) -LW S8,0048 (SP) -JR RA -ADDIU SP,SP,30A8 -//7F0C8754 0xFD284 diff --git a/notes/GE Documentation/images text and font/Huffman/first sample notes.txt b/notes/GE Documentation/images text and font/Huffman/first sample notes.txt deleted file mode 100644 index 1621206..0000000 --- a/notes/GE Documentation/images text and font/Huffman/first sample notes.txt +++ /dev/null @@ -1,222 +0,0 @@ -ROM B30970 -005 samples to utilize -38 segment size -38 number of segments -8 decompression routine - -7F0C91D0 called by FCEBC -10: initial - 00FF 0023 000E 0006 0002 0001 0001 0001 - 0001 0001 0001 0001 0002 0006 000E 001E - -7F0C9618 tables -@ 0x78: -2710 0009 2711 271F 000E 0007 2713 000C -2714 0008 2715 2716 000B 0004 0003 000D -2718 2717 0001 0002 271A 2719 271B 0005 -271C 000A 271D 0006 271E 2712 - -@ 0x2078 -0173 270F 270F 270F 270F 270F 270F 270F -270F 270F 270F 270F 270F 270F 270F 270F - - -+-+ -order: -1) get first 3 bits: subroutine used for sample extracto -2) A0=target - T5=t1val -> A1=t1val * seg * segnum - A2=t3val size of buf2078 - send all three to 7F0C91D0 - -7F0C91D0: -1) buffer2078[0x800] buffer78[0x1000] -2) fill buffer2078 with bytes from data -3) init buffer78 to -1 -4) c@prevL & c@prevH maybe start at 0? unsure... -5) prevL & prevH =270F - -determine smallest pair -6) save count and value of 1st smallest of each -for(x=0;x= *preH) /*7F0C958C*/ - {if(table[x] < *preL) - {*preL=table[x]; - *CpreL=x; - } - } - else if(*preL >= preH) /*7F0C9580*/ - {*preL=table[x]; - *CpreL=x; - } - else - {*preH=table[x]; - *CpreH=x; - } - if(table[x+1] >= *preH) /*7F0C95D8*/ - {if(table[x+1] < *preL) - {*preL=table[x+1]; - *CpreL=x+1; - } - } - else if(*preL >= *preH) /*7F0C95D0*/ - {*preL=table[x+1]; - *CpreL=x+1; - } - else - {*preH=table[x+1]; - *CpreH=x+1; - } - } - -use -7) T2=preH+preL (if 0, set to 1) -8) small[Cpre1]=9999, small[Cpre2]=9999 -9) large[Cpre1] - if(large[CpreH]!=-1 || large[CpreH+1]!=-1) /*7F0C942C*/ - {if(Lbuf[CpreL]!=-1 || Lbuf[CpreL+1]!=-1) /*7F0C9480*/ - {for(S2=0; ;S2++) /*7F0C94A8*/ - {if(Lbuf[S2*2]!=-1) continue - if(Lbuf[S2*2+1]!=-1) continue - if(Sbuf[S2]<0x270F) continue - } - /*7F0C94E8*/ - Sbuf[S2] =T2 - Lbuf[S2*2] =CpreH - Lbuf[S2*2+1]=CpreL - } - else /*7F0C9444*/ - {Lbuf[CpreL]=CpreL+2710 - Sbuf[CpreL] =T2 - - if(Lbuf[CpreH]!=-1 || Lbuf[CpreH+1]!=-1) /*7F0C9478*/ - {Lbuf[CpreL+1]=CpreH} - else - {Lbuf[CpreL+1]=CpreH+0x2710} - } - } - else /*7F0C93F4*/ - {Lbuf[CpreH]= 2710+CpreH - Sbuf[CpreH]= T2 - if(Lbuf[CpreL]!=-1 || Lbuf[CpreL+1]!=-1) /*7F0C9420*/ - {Lbuf[CpreH+1]= CpreL} - else /*7F0C9408*/ - {Lbuf[CpreH+1]= 0x2710+CpreL} - } - /*7F0C94F8*/ - loopus! get smallest again - -10) if tsize==0, bail -11) x=0 /*position in target*/ -12) for(tpos=0;tpos0x100) /*granted, GE doesn't actually use these...*/ - {fseek(target,tpos,SEEK_SET); - fwrite(&x,2,1,target); - tpos++; /*effectively the same as tpos*2*/ - } - else /*normal write*/ - {fseek(target,tpos,SEEK_SET); - fputc(x,target); - } - } - -+-+-+ samples now generated correctly -Huffman8 -after generating sample table: - -A0= p->samples (target from before) -A1= width -A2= t#1val * height; fieldsize -A3= 3bit treatment value -SP+10= t#3val (bitsample num) - - - -if(fieldsize<=0) return 0; -for(fieldcount=0;fieldcountTLB 7EFCB4D0 - -7F0C805C 0xFCB8C 0 -7F0C805C 0xFCB8C 1 -7F0C8084 0xFCBB4 2 -7F0C8120 0xFCC50 3 -7F0C81D8 0xFCD08 4 -7F0C8268 0xFCD90 5 -7F0C82B8 0xFCDE8 6 -7F0C8324 0xFCE54 7 -7F0C838C 0xFCEBC 8 -7F0C8464 0xFCF94 9 - - The seven value tables, as far as I can tell, are as such: -283E8 80049178 #1 #bytes in pixel data for image -04 03 03 03 02 02 01 01 01 01 01 01 01 - -2841C 800491AC #2 1=alphagrab. Grabs 1 bit of alpha data for each pixel -00 01 00 00 00 00 01 00 00 00 00 00 00 - -28450 800491E0 #3 #bits in 'samples', *2 -1=bitmask -0100 0020 0100 0020 0100 0010 0008 0100 0010 0100 0010 0100 0010 - -28484 80049214 #4 bitcount for pixel data -20 10 18 0F 10 08 04 08 04 10 10 10 10 - -284B8 80049248 #5 N64 image types (0=color, 1=YUV, 2=indexed, 3=IA, 4=I) -00 00 00 00 03 03 03 04 04 02 02 02 02 - -284EC 8004927C #6 N64 pixel sizes (0=4bit, 1=8bit, 2=16bit, 3=32bit) -03 02 03 02 02 01 00 01 00 01 00 01 00 - -28520 800492B0 #7 imageflip values for indexed types -0000 0000 0000 0000 0000 0000 0000 0000 0000 8000 8000 C000 C000 - - - Image types are as such: -0 32bit color image -1 16bit color image -2 24bit color image, forced to 32bit fixed alpha -3 15bit color image, with forced alpha -4 16bit IA -5 8bit IA -6 4bit IA -7 8bit I -8 4bit I -9 256 color indexed - inverted -A 16 color indexed - inverted -B 256 color indexed - inverted pervert -C 16 color indexed - inverted pervert - -SP+80 nibble#3 (table, actually image type) -SP+88 [0] -SP+30AC A1=final target [800C31E8] -SP+30B0 A2= [0] -SP+30B4 A3= [0] - -8008D090 if A2!=0, loads value, multiplies by 0x10, adds to 8008C730, does stuff - note: 7F0CBF10 sets 8008D0A0->A0 and initializes D0A4+D0A8 -8008D0A0 curpos -8008D0A4 cur datatable -8008D0A8 bitcount -8008D0AC -8008D0B0 - -JUMPS: -7F0C91D0 generates a sample table and dumps data into image - ??? - 7F0C8084 0xFCBB4 - 7F0C8120 0xFCC50 - -7F0C9A48 - A0, A1 - 7F0C8084 0xFCBB4 - 7F0C8120 0xFCC50 - -7F0C9A9C ;copy and link final image - A0:, A1, A2, A3 - 7F0C805C 0xFCB8C - -7F0C9DA4 ;generate and link final image - A0,A1,A2,A3, SP+10 - 7F0C8084 0xFCBB4 - 7F0C8120 0xFCC50 - diff --git a/notes/GE Documentation/images text and font/Text/7F0AEB64 - fit text to region.txt b/notes/GE Documentation/images text and font/Text/7F0AEB64 - fit text to region.txt deleted file mode 100644 index 9f2a14d..0000000 --- a/notes/GE Documentation/images text and font/Text/7F0AEB64 - fit text to region.txt +++ /dev/null @@ -1,263 +0,0 @@ -7F0AEB64: E3694 find width of word in string, probably for wordwrap - accepts: A0=max width, A1=p->text, A2=@text buffer, A3=p->2nd font table, SP+10=p->1st font table -ADDIU SP,SP,FF70 -SW S4,0030 (SP) -SW S3,002C (SP) -SW S2,0028 (SP) -SW S0,0020 (SP) -OR S0,A2,R0 ;S0=A2: @buffer -OR S2,A1,R0 ;S2=A1: p->text -OR S3,A3,R0 ;S3=A3: p->2nd font table -SW RA,0034 (SP) -SW S1,0024 (SP) -SW A0,0090 (SP) ;SP+90=A0: -OR T3,R0,R0 ;T3=0 total width -SW R0,007C (SP) ;SP+7C=0 height -ADDIU T5,R0,0001 ;T5=1 -ADDIU S4,SP,004C ;S4=SP+4C: copy buffer -ADDIU T2,R0,0018 ;T2=18 -SW R0,0080 (SP) ;SP+80=0 -LBU A0,0000 (S2) ;A0=char from string -OR S1,R0,R0 ;S1=0 -OR V1,R0,R0 ;V1=0 total width -SLTI AT,A0,0021 ;TRUE if whitespace (0-20) -BNEZ AT,7F0AEC34 ;branch if whitespace -ADDIU A1,SP,0080 ;A1=SP+80: @width -ADDIU V0,SP,004C ;V0=SP+4C: copy buffer -//7F0AEBC4: retrieve and calculate width of non-whitespace characters -SB A0,0000 (V0) ;A0->V0: save copy -LBU T6,0000 (S2) ;T6=char from string -ADDIU S2,S2,0001 ;S2++ next byte -ADDIU S1,S1,0001 ;S1++ count++ -MULTU T6,T2 -LBU T6,0000 (V0) ;T6=copied byte -ADDIU V0,V0,0001 ;V0++ buffer++ -SLTI AT,T6,0080 ;TRUE if not a wide char -MFLO T7 ;T7=char * 0x18 -ADDU T8,S3,T7 ;T8=S3+T7: 2nd font table + offset -LW T9,FCF4 (T8) ;T9=2nd font table + offset - 0x30C: width -BNEZ AT,7F0AEC24 ;branch if ASCII -ADDU V1,V1,T9 ;V1+=width -//7F0AEBE8: japanese... -LBU T7,0000 (S2) ;T7=char from string -ADDIU S2,S2,0001 ;S2++ next byte -ADDIU S1,S1,0001 ;S1++ count++ -SB T7,0000 (V0) ;copy to buffer -LBU T8,FFFF (S2) ;T8=previous char from string -ADDIU V0,V0,0001 ;V0++ buffer++ -MULTU T8,T2 -MFLO T9 ;T9=char*0x18 -ADDU T6,S3,T9 ;T6=S3+T9: 2nd font table + offset -LW T7,FCF4 (T6) ;T7=width -ADDU V1,V1,T7 ;V1+=width -//7F0AEC24: loop for remaining characters -LBU A0,0000 (S2) ;A0=char from string -SLTI AT,A0,0021 ;TRUE if whitespace -BEQL AT,R0,7F0AEBC8 ;loop until whitespace character -SB A0,0000 (V0) -//7F0AEC34: -ADDU T8,S4,S1 ;T8=S4+S1: buffer+count -SB R0,0000 (T8) ;0->end of buffer: NULL terminate -LW T9,00A0 (SP) ;T9=SP+A0: p->1st font table -SW T5,0078 (SP) ;SP+78=T5: -SW T3,008C (SP) ;SP+8C=T3: total width -SW R0,0014 (SP) ;SP+14=NULL -ADDIU A0,SP,007C ;A0=SP+7C: @height -OR A2,S4,R0 ;A2=S4: buffer -OR A3,S3,R0 ;A3=S3: p->2nd font table -JAL 7F0AE98C ;proportions of string A2 -SW T9,0010 (SP) ;SP+10= p->1st font table -LW T3,008C (SP) ;T3=SP+8C: total width -LW T6,0080 (SP) ;T6=SP+80: str.width -LW T7,0090 (SP) ;T7=SP+90: max width? -LUI T0,8004 -ADDU T3,T3,T6 ;T3+=str.width total width -SLT AT,T7,T3 ;TRUE if maxfinal buffer -LW T8,0000 (T0) ;T8=80040E8C: spacefill -ADDIU S0,S0,0001 ;S0++ final++ -BLEZ T8,7F0AECE8 ;branch if >0 -NOP -SB T1,0000 (S0) ;20->final push space to buffer -//7F0AECCC: fill with # spaces -LW T9,0000 (T0) ;T9=80040E8C: spacefill -ADDIU V1,V1,0001 ;V1++ count++ -ADDIU S0,S0,0001 ;S0++ final++ -SLT AT,V1,T9 ;TRUE if count < ??? -BNEL AT,R0,7F0AECCC ;branch if count too high -SB T1,0000 (S0) ;20->final push space to buffer -OR V1,R0,R0 ;V1=0 reset count -//7F0AECE8: check if word-aligned -BLEZ S1,7F0AED54 ;branch if no count -OR T3,R0,R0 ;T3=0 total width=0 -ANDI A1,S1,0003 ;A1=count & 3: test for word alignment -BEQ A1,R0,7F0AED1C ;branch if word-aligned -OR A0,A1,R0 ;A0=A1: stray bytes -ADDU V0,S4,V1 ;V0=S4+V1: buffer+count -//7F0AED00: copy stray bytes to final -LBU T6,0000 (V0) ;T6=byte from buffer -ADDIU V1,V1,0001 ;V1++ count++ -ADDIU S0,S0,0001 ;S0++ final++ -ADDIU V0,V0,0001 ;V0++ next byte -BNE A0,V1,7F0AED00 ;loop for remaining stray bytes -SB T6,FFFF (S0) ;save to final -BEQ V1,S1,7F0AED54 -//7F0AED1C: -ADDIU T7,SP,004C ;T7=SP+4C: copy buffer -ADDU A0,S1,T7 ;A0=S1+T7: copy buffer+count -ADDU V0,S4,V1 ;V0=S4+V1: buffer+count -//7F0AED28: copy word to buffer -LBU T8,0000 (V0) ;T8=byte from buffer -ADDIU V0,V0,0004 ;V0+=4 next word in buffer -ADDIU S0,S0,0004 ;S0+=4 next word in final -SB T8,FFFC (S0) -LBU T9,FFFD (V0) -SB T9,FFFD (S0) -LBU T6,FFFE (V0) -SB T6,FFFE (S0) -LBU T7,FFFF (V0) -BNE V0,A0,7F0AED28 ;loop until copied entrirely -SB T7,FFFF (S0) -//7F0AED54: -SB T4,0000 (S0) -BEQ R0,R0,7F0AEEE0 -ADDIU S0,S0,0001 ;S0++ final++ -//7F0AED60: -ADDIU AT,R0,0020 -BNE V0,AT,7F0AEE30 ;branch if not space -NOP -BNEZ A0,7F0AEDB8 ;branch if not NULL -OR V1,R0,R0 ;V1=0 buffer count=0 -SB T4,0000 (S0) -LW V0,0000 (T0) -ADDIU S0,S0,0001 -BLEZL V0,7F0AEDAC -LW T9,0080 (SP) -//7F0AED88: -SB T1,0000 (S0) -LW V0,0000 (T0) -ADDIU V1,V1,0001 -ADDIU S0,S0,0001 -SLT AT,V1,V0 -BNEL AT,R0,7F0AED8C -SB T1,0000 (S0) -OR V1,R0,R0 -//7F0AEDA8: -LW T9,0080 (SP) -SLL T8,V0,0x2 -ADDU T8,T8,V0 -ADDU T3,T8,T9 -//7F0AEDB8: -BLEZ S1,7F0AEE24 -ADDIU T3,T3,0005 -ANDI A1,S1,0003 -BEQ A1,R0,7F0AEDEC -OR A0,A1,R0 -ADDU V0,S4,V1 -//7F0AEDD0: -LBU T6,0000 (V0) -ADDIU V1,V1,0001 -ADDIU S0,S0,0001 -ADDIU V0,V0,0001 -BNE A0,V1,7F0AEDD0 -SB T6,FFFF (S0) -BEQ V1,S1,7F0AEE24 -//7F0AEDEC: -ADDIU T7,SP,004C -ADDU A0,S1,T7 -ADDU V0,S4,V1 -//7F0AEDF8: copy word to final -LBU T8,0000 (V0) -ADDIU V0,V0,0004 -ADDIU S0,S0,0004 -SB T8,FFFC (S0) -LBU T9,FFFD (V0) -SB T9,FFFD (S0) -LBU T6,FFFE (V0) -SB T6,FFFE (S0) -LBU T7,FFFF (V0) -BNE V0,A0,7F0AEDF8 -SB T7,FFFF (S0) -//7F0AEE24: -SB T1,0000 (S0) -BEQ R0,R0,7F0AEEE0 -ADDIU S0,S0,0001 -BNEZ V0,7F0AEEE0 -OR V1,R0,R0 -BNEZ A0,7F0AEE74 -OR T5,R0,R0 -SB T4,0000 (S0) -LW T8,0000 (T0) -ADDIU S0,S0,0001 -BLEZ T8,7F0AEE74 -NOP -//7F0AEE54: -SB T1,0000 (S0) -LW T9,0000 (T0) -ADDIU V1,V1,0001 -ADDIU S0,S0,0001 -SLT AT,V1,T9 -BNEL AT,R0,7F0AEE58 -SB T1,0000 (S0) -OR V1,R0,R0 -//7F0AEE74: -BLEZ S1,7F0AEEDC -ANDI A1,S1,0003 -BEQ A1,R0,7F0AEEA4 -OR A0,A1,R0 -ADDU V0,S4,V1 -//7F0AEE88: -LBU T6,0000 (V0) -ADDIU V1,V1,0001 -ADDIU S0,S0,0001 -ADDIU V0,V0,0001 -BNE A0,V1,7F0AEE88 -SB T6,FFFF (S0) -BEQ V1,S1,7F0AEEDC -//7F0AEEA4: -ADDIU T7,SP,004C -ADDU A0,S1,T7 -ADDU V0,S4,V1 -//7F0AEEB0: copy word to final -LBU T8,0000 (V0) -ADDIU V0,V0,0004 -ADDIU S0,S0,0004 -SB T8,FFFC (S0) -LBU T9,FFFD (V0) -SB T9,FFFD (S0) -LBU T6,FFFE (V0) -SB T6,FFFE (S0) -LBU T7,FFFF (V0) -BNE V0,A0,7F0AEEB0 -SB T7,FFFF (S0) -SB R0,0000 (S0) -//7F0AEEE0: -ADDIU AT,R0,0001 -BEQ T5,AT,7F0AEBA4 -ADDIU S2,S2,0001 -//7F0AEEEC: return -LW RA,0034 (SP) -LW S0,0020 (SP) -LW S1,0024 (SP) -LW S2,0028 (SP) -LW S3,002C (SP) -LW S4,0030 (SP) -JR RA -ADDIU SP,SP,0090 diff --git a/notes/GE Documentation/images text and font/Text/load text banks.txt b/notes/GE Documentation/images text and font/Text/load text banks.txt deleted file mode 100644 index c961a70..0000000 --- a/notes/GE Documentation/images text and font/Text/load text banks.txt +++ /dev/null @@ -1,55 +0,0 @@ -Note: This reflects hacked binaries; namely, 1-byte language flag and single-region revision. - This revision reflects broken japanese support for NGEE. - -7F0C1D08: F6838 load mission text bank A0 - accepts: A0=p->string -LUI T8,8005 -LB T8,84D0 (T8) ;T8=800484D0: language -ADDIU SP,SP,FFE8 -SLL T7,A0,0x2 ;T7=A0*4: A0->offset in text index -SW A0,0018 (SP) ;SP+18=A0: text bank -SLL T9,T8,0x2 ;T9=language->offset -ADDU T0,T7,R0 ;T0=T7 -LUI A0,8005 -SW RA,0014 (SP) -ADDU A0,A0,T0 -LW A0,84D0 (A0) ;A0=800484D0+offset: p->text bank name string -ADDIU A1,R0,0001 ;A1=1 -ADDIU A2,R0,0100 ;A2=0x100 -JAL 7F0BCD04 ;load resource using string A0 -ADDIU A3,R0,0004 ;A3=4 -LW T1,0018 (SP) ;T1=text bank -LW RA,0014 (SP) -LUI AT,8009 -SLL T2,T1,0x2 ;T2=T1*4: text bank->offset -ADDU AT,AT,T2 -SW V0,C63C (AT) ;V0->8008C63C+offset: p->offset to text table -JR RA -ADDIU SP,SP,0018 - -7F0C1D64: F6894 load briefing text bank A0 - accepts: A0=p->string, A1=p->target, A2=size of target buffer -LUI T8,8005 -LB T8,84D0 (T8) ;T8=800484D0: language -ADDIU SP,SP,FFE8 -SLL T7,A0,0x2 ;T7=A0*4: A0->offset in text index -SW A0,0018 (SP) ;SP+18=A0: text bank -SLL T9,T8,0x2 ;T9=language->offset -OR A3,A2,R0 ;A3=A2: size of target buffer -ADDU T0,T7,R0 ;T0=T7 -LUI A0,8005 -OR A2,A1,R0 ;A2=A1: p->target -SW RA,0014 (SP) -SW A1,001C (SP) ;SP+1C=A1: p->target -ADDU A0,A0,T0 -LW A0,84D0 (A0) ;A0=800484D0+offset: p->text bank name string -JAL 7F0BCD40 ;load resource using string A0 into buffer A2 of size A3 -ADDIU A1,R0,0001 ;A1=1 -LW T1,0018 (SP) ;T1=text bank -LW RA,0014 (SP) -LUI AT,8009 -SLL T2,T1,0x2 ;T2=T1*4: text bank->offset -ADDU AT,AT,T2 -SW V0,C63C (AT) ;V0->8008C63C+offset: p->offset to text table -JR RA -ADDIU SP,SP,0018 diff --git a/notes/GE Documentation/images text and font/constant imglist.txt b/notes/GE Documentation/images text and font/constant imglist.txt deleted file mode 100644 index 6e075e9..0000000 --- a/notes/GE Documentation/images text and font/constant imglist.txt +++ /dev/null @@ -1,493 +0,0 @@ -00000858 3636030301020200 impact (explosion point?) //generic impact -00000878 3030060301020200 glass bullet impact //impact images -00000879 4020070301020200 bullet impact (wide) -0000087A 4040000301020200 impact (explosion point?) -000000CE 4020070301020200 numerous spread shot impact -00000878 3030060301020200 glass bullet impact -00000878 3030060301020200 glass bullet impact -00000878 3030060301020200 glass bullet impact -0000087B 2020000301020200 metal bullet impact -0000087C 2020000002020200 spread shot impact -000005C3 2020060002020200 brick behind chipped paint (circular) -0000087D 2020060002020200 brick behind chipped paint -000005C4 2020060002020200 brick behind chipped paint (W) -0000087E 2020060002020200 greenish stone behind chipped paint (1) -0000087F 2020060002020200 greenish stone behind chipped paint (2) -000005C6 2020060002020200 dark old brick behind chipped paint -000005C7 2020060002020200 dark old brick behind chipped paint (more) -0000087A 4040000301020200 impact (explosion point?) -00000878 3030060301020200 glass bullet impact -00000878 3030060301020200 glass bullet impact -00000878 3030060301020200 glass bullet impact -00000880 4040000301000000 C48 point of smoke or explosion //explosions and smoke -00000881 4040000301000000 C48 dissipated smoke or explosion -00000882 4040000301000000 C48 small point of smoke or explosion -00000883 4040000301000000 C48 medium point of smoke or explosion -00000884 4040000301000000 C48 large point of smoke or explosion, spread a bit -00000885 4040000301000000 C48 spread of smoke or explosion -00000886 4040000301000000 C48 blorb of explosion -00000887 4040000301000000 C48 blorb of explosion -00000888 4040000301000000 C48 blorb of explosion -00000889 4040000301000000 C48 blorb of explosion -0000088A 4040000301000000 C48 blorb of explosion -000008B5 4040000301000000 almost like the flare from the assault rifle... //flare? -000008B6 4040000301000000 block of white; could be anything //unknown -00000850 1020060003000000 little red flare //flare? -00000857 1020060003000000 horizontal flare //flare? -00000856 2020000003000000 round flare //flare? -000008B7 050C000003020200 9mm ammo counter -000008B8 051C000003020200 rifle ammo counter -00000877 0614000003020200 shotgun shell ammo counter -00000876 0618000003020200 knife ammo counter -00000875 0815000003000200 grenade launcher ammo counter -00000871 0716000003020200 rocket ammo counter -00000872 0E0E000003020200 mine ammo counter (generic) -00000873 0E12000003020200 grenade ammo counter -00000874 050F000003020200 magnum ammo counter -000008B9 050C000003020200 golden gun ammo counter -000008BA 0E0E000003020200 remote mine ammo counter -000008BE 0E0E000003020200 timed mine ammo counter -000008BB 0E0E000003020200 proximity mine ammo counter -000009A0 0716000301020200 tank ammo counter -000008BC 2020000003000000 crosshair (aimer) -000008BD 2020000003000000 beta crosshair -00000292 2001060301000000 streaks? //glass reflective overlay -0000028E 3636030301020200 dark glass reflection overlay -0000088B 2020000401000000 Bond monitor image //monitor images -0000088C 8010000401000000 ROKAYOH -0000088D 8010000401000000 BETOHAPMEH -0000088E 8010000401000000 TARGET -0000088F 8010000401000000 CEBERHAEA -00000890 8010000401000000 ROGATY TARGET -00000891 8010000401000000 Severnaya targetting image -00000892 2020060002000000 sattelite view of target -00000893 2020060002000000 monitor data -00000894 2020060002000000 heat map of region? -00000895 2020060002000000 vector grid -000004A1 2020060002000000 blue windows (text doc in UR) -00000896 2020060002000000 various gauges (more like colour wheels) -00000897 2020060002000000 eclipse of earth -000004A2 2020060002000000 blue windows (space in center) -000004A3 2020060002000000 blue windows (cascaded) -00000898 1010050401000000 wireframe cube front -00000246 2020060002000000 shuttle flight -00000247 2020060002000000 shuttle at launch -00000248 2020060002000000 Earth (North America) -00000899 2020060002000000 Earth (Pacific and Australia) -0000089A 2020060002000000 milky way -0000089B 2020060002000000 redish sun w/ dust cloud -0000089C 2020060002000000 bright blue gas giant -00000245 2020060002000000 satellite exploding -0000089D 2020060002000000 target selected from sattelite view -0000089E 2020060002000000 information on redish sun -000008B3 4040000401000000 bumpmap or static -000008AF 2020000401000000 sine wave -000008B0 2020000401000000 text -000008B1 2020000401000000 bar graph -000008B2 2020000401000000 series of boxes -000008AB 2020000401000000 commandant frame 1 -000008AC 2020000401000000 commandant frame 2 -000008AD 2020000401000000 commandant frame 3 -000008AE 2020000401000000 commandant frame 4 -000008AA 2020000401000000 skateboard frame 1 (leg raised) -0000089F 2020000401000000 skateboard frame 2 (going to push) -000008A0 2020000401000000 skateboard frame 3 (foot to ground) -000008A1 2020000401000000 skateboard frame 4 (leg back) -000008A2 2020060401000000 Karl yelling 1 (mouth closed) -000008A3 2020060401000000 Karl yelling 2 (opening mouth) -000008A4 2020060401000000 Karl yelling 3 (open wide) -000008A5 2020060401000000 Karl yelling 4 (grimace) -000008A6 8030000401000200 Mercator projection -000008A7 1010050401000000 wireframe cube 2 (left) -000008A8 1010050401000000 wireframe cube 3 (halfway) -000008A9 1010050401000000 wireframe cube 4 (right) -000008D7 3636000301020200 radar -00000345 2020060002000000 white square button -000008B4 4040000301000000 cloudy sky //sky and water -000005E4 4040000401000000 blotchy sort of image, probably for water overlay -000005E5 2020060002000000 blue water -00000000 201C000003000200 copy icon //main folder -00000002 201C000003000200 delete icon -00000003 7A12000301020200 SELECT FILE -00000001 0F0F000301020200 X -00000004 1414000301020200 checkmark -00000A47 1010000401000000 bullet (as in a dot or tick) -000000C8 2020060002000000 multiplayer radar //MP radar -00000A2A 4141070400020200 Brosnan UL //MP character select screen 0-F -00000A2B 4141070400020200 Brosnan UR -00000A2C 4141070400020200 Brosnan LL -00000A2D 4141070400020200 Brosnan LR -00000A32 4141070400020200 Moore UL -00000A33 4141070400020200 Moore UR -00000A34 4141070400020200 Moore LL -00000A35 4141070400020200 Moore LR -00000A36 4141070400020200 Dalton UL -00000A37 4141070400020200 Dalton UR -00000A38 4141070400020200 Dalton LL -00000A39 4141070400020200 Dalton LR -00000A2E 4141070400020200 Connery UL -00000A2F 4141070400020200 Connery UR -00000A30 4141070400020200 Connery LL -00000A31 4141070400020200 Connery LR -00000A48 4141070400020200 Boris UL -00000A49 4141070400020200 Boris UR -00000A4A 4141070400020200 Boris LL -00000A4B 4141070400020200 Boris LR -00000A4C 4141070400020200 Ouromov UL -00000A4D 4141070400020200 Ouromov UR -00000A4E 4141070400020200 Ouromov LL -00000A4F 4141070400020200 Ouromov LR -00000A50 4141070400020200 Trevelan UL -00000A51 4141070400020200 Trevelan UR -00000A52 4141070400020200 Trevelan LL -00000A53 4141070400020200 Trevelan LR -00000A54 4141070400020200 Valentin UL -00000A55 4141070400020200 Valentin UR -00000A56 4141070400020200 Valentin LL -00000A57 4141070400020200 Valentin LR -00000A58 4141070400020200 Xenia UL -00000A59 4141070400020200 Xenia UR -00000A5A 4141070400020200 Xenia LL -00000A5B 4141070400020200 Xenia LR -00000A5C 4141070400020200 Natalia UL -00000A5D 4141070400020200 Natalia UR -00000A5E 4141070400020200 Natalia LL -00000A5F 4141070400020200 Natalia LR -00000A60 4141070400020200 Baron Samedi UL -00000A61 4141070400020200 Baron Samedi UR -00000A62 4141070400020200 Baron Samedi LL -00000A63 4141070400020200 Baron Samedi LR -00000A64 4141070400020200 Jaws UL -00000A65 4141070400020200 Jaws UR -00000A66 4141070400020200 Jaws LL -00000A67 4141070400020200 Jaws LR -00000A68 4141070400020200 Mayday UL -00000A69 4141070400020200 Mayday UR -00000A6A 4141070400020200 Mayday LL -00000A6B 4141070400020200 Mayday LR -00000A6C 4141070400020200 Oddjob UL -00000A6D 4141070400020200 Oddjob UR -00000A6E 4141070400020200 Oddjob LL -00000A6F 4141070400020200 Oddjob LR -00000A7A 4143070400020200 Other Character UL -00000A7B 4143070400020200 Other Character UR -00000A7C 4143070400020200 Other Character LL -00000A7D 4143070400020200 Other Character LR -00000A86 4141070400020200 Mishkin UL -00000A85 4141070400020200 Mishkin UR -00000A83 4141070400020200 Mishkin LL -00000A84 4141070400020200 Mishkin LR -00000A20 442C000401020200 Bunker II //MP stage select images 0-10 -00000A16 442C000401020200 Water Caverns -00000A12 442C000401020200 Archives -00000A19 442C000401020200 Dam -00000A14 442C000401020200 Facility -00000A1E 442C000401020200 Runway -00000A1B 442C000401020200 Frigate -00000A24 442C000401020200 Statue -00000A17 442C000401020200 Cradle -00000A15 442C000401020200 Aztec -00000A18 442C000401020200 Egyptian -00000A1A 442C000401020200 Depot -00000A7E 442C000401020200 Temple -00000A7F 442C000401020200 Library/Basement/Stack -00000A80 442C000401020200 Complex -00000A81 442C000401020200 Caves -00000A87 442C000401020200 Random - -29D160 930 main menu image bank (solo, multi select + menus and overlays) -first loads to 80165AC8 196 images - -8008D0B0 base address for block in RDRAM, -02000000 -8008D0B4 +0 explosion DLs (uses unique ID calling method not used elsewhere) -8008D0B8 +AC8 [1] generic impact -8008D0BC +AD4 [14] impact images -8008D0C0 +BC4 [6] explosions and smoke 1 -8008D0C4 +C0C [5] scattered explosions -8008D0C8 +C48 [1] flare 1 -8008D0CC +C54 [1] flare 2 -8008D0D0 +C60 [1] flare 3 -8008D0D4 +C6C [1] flare 4 -8008D0D8 +C78 [1] flare 5 -8008D0DC +C84 [1] 9mm ammo counter -8008D0E0 +C90 [1] rifle ammo counter -8008D0E4 +C9C [1] shotgun shell ammo counter -8008D0E8 +CA8 [1] knife ammo counter -8008D0EC +CB4 [1] grenade launcher ammo counter -8008D0F0 +CC0 [1] rocket ammo counter -8008D0F4 +CCC [1] generic mine ammo counter -8008D0F8 +CD8 [1] grenade ammo counter -8008D0FC +CE4 [1] magnum ammo counter -8008D100 +CF0 [1] golden gun ammo counter -8008D104 +CFC [1] remote mine ammo counter -8008D108 +D08 [1] timed mine ammo counter -8008D10C +D14 [1] proximity mine ammo counter -8008D110 +D20 [1] tank ammo counter -8008D114 +D2C [1] crosshair -8008D118 +D38 [1] beta crosshair -8008D11C +D44 [2] glass overlay -8008D120 +D5C [32] monitor images -8008D124 +FB4 [3] sky and water -8008D128 +FD8 [6] main folder icons -8008D12C +1020 [1] MP radar -8008D130 +102C [40] MP character select (4 each char) -8008D134 +132C [11] MP stage select - -0x19768 for normal explosion etc. pulls - -7F011C3C-7F011ED0: PULLS MULTI CHARACTER IMAGES -LUI AT,8003 -SW R0,A8D0(AT) //8002A8D0=0 -LUI AT,8003 -SW R0,A8D4(AT) //8002A8D4=0 -LUI AT,8003 -ADDIU SP,SP,FFD0 -SW R0,A8D8(AT) //8002A8D8=0 -LUI AT,8003 -SW R0,A8E4(AT) //8002A8E4=0 -LUI AT,8003 -SW S4,0028(SP) -SW S2,0020(SP) -SW S1,001C(SP) -SW R0,A8E0(AT) //8002A8E0=0 -SW S3,0024(SP) -LUI AT,8003 -LUI S1,8003 -LUI S2,8009 -LUI S4,8003 -SW RA,002C(SP) -SW S0,0018(SP) -SW R0,A8DC(AT) -ADDIU S4,S4,B498 //S4=8002B498 MP health menu; follows the MP char list, so endpoint! -ADDIU S2,S2,D130 //S2=8008D130 pointer to MP char pics -ADDIU S1,S1,B198 //S1=8002B198 MP character list -ADDIU S3,R0,000C //S3=C -LBU V1,0003(S1) //V1=character pic to display -LW T7,0000(S2) //T7=start of mp char pic list -SLL T6,V1,2 //T6=pic# * 4 (accounting for four char images) -MULTU T6,S3 -MFLO S0 //S0=pic# * C, which is size of entry -ADDU V0,T7,S0 //V0=pic entry address -LW A2,0000(V0) //pull UL image from table -SLTIU AT,A2,0BB8 //7F011CC0 AEGH! arbitrary pic limit! -BEQ AT,R0,7F011CDC -OR A0,A2,R0 //A0=pic ID# -JAL 7F0CBEE8 -OR A1,R0,R0 //A1=0 -LW T8,0000(S2) -ADDU V0,T8,S0 -LW V1,000C(V0) //pull UR image from table -SLTIU AT,V1,0BB8 //7F011CE0 AEGH! arbitrary pic limit! -BEQ AT,R0,7F011CFC -OR A0,V1,R0 -JAL 7F0CBEE8 -OR A1,R0,R0 -LW T9,0000(S2) -ADDU V0,T9,S0 -LW V1,0018(V0) //pull LL image from table -SLTIU AT,V1,0BB8 //7F011D00 AEGH! arbitrary pic limit! -BEQ AT,R0,7F011D1C -OR A0,V1,R0 -JAL 7F0CBEE8 -OR A1,R0,R0 -LW T0,0000(S2) -ADDU V0,T0,S0 -LW V1,0024(V0) //pull LR image from table -SLTIU AT,V1,0BB8 //7F011D20 AEGH! arbitrary pic limit! -BEQ AT,R0,7F011D34 -OR A0,V1,R0 -JAL 7F0CBEE8 -OR A1,R0,R0 -ADDIU S1,S1,000C //S1+=C next character in list! -SLTU AT,S1,S4 //true if you haven't rolled over into the health list -BNEL AT,R0,7F011CA8 -LBU V1,0003(S1) V1=selected char -//7F011D44: -LUI S1,8003 -ADDIU S1,S1,B194 -LW T1,0000(S1) //T1=8002B194 # characters unlocked -ADDIU AT,R0,0040 //AT=40 maximum number of characters - usually! -LUI A0,8003 -BEQ T1,AT,7F011DE8 //don't bother if all chars unlocked... -ADDIU A1,R0,0011 //A1=11 -//7F011D60: bunch of nonsense you do if all characters not unlocked -LW A0,A8E8(A0) //A0=8002A8E8 -JAL 7F01E2C0 -OR A2,R0,R0 -ADDIU AT,R0,0003 -BNE V0,AT,7F011D84 -ADDIU T3,R0,0008 -ADDIU T2,R0,0021 -BEQ R0,R0,7F011DE8 -SW T2,0000(S1) -LUI S2,8003 -LUI S3,8003 -SW T3,0000(S1) -ADDIU S3,S3,B534 -ADDIU S2,S2,B524 -LW V0,0000(S1) -LW T4,0000(S2) -SLT AT,T4,V0 -BNEL AT,R0,7F011DE0 -ADDIU S2,S2,0004 -BLEZ V0,7F011DD8 -OR S0,R0,R0 -JAL 7F011BD8 -OR A0,S0,R0 -BEQL V0,R0,7F011DDC -SW S0,0000(S2) -LW T5,0000(S1) -ADDIU S0,S0,0001 -SLT AT,S0,T5 -BNEZ AT,7F011DB4 -NOP -SW S0,0000(S2) -ADDIU S2,S2,0004 -BNEL S2,S3,7F011D9C -LW V0,0000(S1) -//7F011DE8: initialize UI -LUI V0,8003 -LW V0,B524(V0) //V0=player 1 selected character -LUI AT,8007 -LUI V1,8003 -SW V0,9710(AT) //selected->80029710 -LUI AT,8007 -SW V0,9720(AT) //selected->80029720 -LUI AT,8007 -SW R0,9730(AT) //0->80069730 -LUI AT,8007 -SW R0,9740(AT) //0->80069740 -LW V1,B528(V1) //V1=player 2 selected character (etc...) -LUI AT,8007 -SW R0,9750(AT) //0->80069750 -LUI AT,8007 -SW V1,9714(AT) -LUI AT,8007 -SW V1,9724(AT) -LUI AT,8007 -SW R0,9734(AT) -LUI AT,8007 -SW R0,9744(AT) -LUI A0,8003 -LW A0,B52C(A0) //A0=player 3 selected character (etc...) -LUI AT,8007 -SW R0,9754(AT) -LUI AT,8007 -SW A0,9718(AT) -LUI AT,8007 -SW A0,9728(AT) -LUI AT,8007 -SW R0,9738(AT) -LUI AT,8007 -SW R0,9748(AT) -LUI A1,8003 -LW A1,B530(A1) //A1=player 4 selected character (etc...) -LUI AT,8007 -SW R0,9758(AT) -LUI AT,8007 -SW A1,971C(AT) -LUI AT,8007 -SW A1,972C(AT) -LUI AT,8007 -SW R0,973C(AT) -LUI AT,8007 -SW R0,974C(AT) -LUI AT,8007 -JAL 7F00B8AC -SW R0,975C(AT) -LW RA,002C(SP) -LW S0,0018(SP) -LW S1,001C(SP) -LW S2,0020(SP) -LW S3,0024(SP) -LW S4,0028(SP) -JR RA -ADDIU SP,SP,0030 -JR RA -NOP - - -Stunning! it actually uses the width/height and image again! -This is an ENTIRELY DIFFERENT img handler implementation!! WTF?!? -7F076E3C: -LW V0,0000 (S7) //pic ID# -LBU S5,0004 (S7) //width -LBU S4,0005 (S7) //height -SLTIU AT,V0,0BB9 //7F076E48 AEGH! arbitrary pic limit again!! -BEQ AT,R0,7F076E60 -OR A0,S7,R0 //A0=address of image entry -JAL 7F0CBC18 -OR A1,R0,R0 -LW V0,0000 (S7) -LUI AT,8000 -OR V1,V0,AT -LHU A0,FFF8 (V1) -JAL 7F0CBB0C -OR A1,R0,R0 -//7F076E74: -LBU V1,0006 (S7) //img type -OR S6,V0,R0 -BNEL V1,R0,7F07741C -SW R0,00D0 (SP) -... -//7F07741C: -BEQ V0,R0,7F07744C -SW V1,00CC (SP) -LW V1,0008 (V0) //HALF of the img entry details -ANDI T6,V1,0003 -SB T6,00CA (SP) -LW S2,000C (V0) -SLL S1,V1,0x1B -SRL T9,S1,0x1D -SRL T8,S2,0x1E -ANDI S1,T9,00FF -BEQ R0,R0,7F07745C -SLL S2,T8,0xE - -+_+ - -basic images loaded: from stack, 2pl -83A 11F868 -824 1204B0 -825 1210F8 -828 1212C0 -829 121F08 -832 1220D0 -833 122D18 -834 122EE0 -835 123B28 -836 123CF0 -837 124938 -838 124B00 -839 125748 -83B 125910 -83C 125AD8 -83D 126720 -83E 1268E8 -83F 127530 -840 1276F8 -841 128340 -826 128508 -827 129150 -82A 129318 -82B 129F60 -82C 12A128 -82D 12AD70 -82E 12AF38 -82F 12BB80 -830 12BD48 -831 12C990 -3F7 12CB58 -858 12CF60 -880 12DF78 -881 12EF80 -882 12FF88 -883 130F90 -884 131F98 -885 132FA0 -886 133FA8 -887 134FB0 -888 135FB8 -889 136FC0 -88A 137FC8 -5BD 138FD0 diff --git a/notes/GE Documentation/images text and font/email.txt b/notes/GE Documentation/images text and font/email.txt deleted file mode 100644 index 84eb15c..0000000 --- a/notes/GE Documentation/images text and font/email.txt +++ /dev/null @@ -1,115 +0,0 @@ - Much simplified doc on different image applications. - I'm assuming you use type 02 C0 commands - C0080002 00000### - - Besides those, there are only four others that need setting B9, BA, BB, and FC. You only need to use a pipesync (E7) if B9, BA, or FC change. - - Following are generic settings for each based on image type and format. - - B9 is different in rooms than in objects. Stuff carries over. -Room files -B900031D 00502078 no image, no BG color -B900031D 0C182048 greyscale - alpha, BG alpha -B900031D 0C104DD8 intensity+alpha, no BG color -B900031D 0C182078 color image - alpha, BG alpha -B900031D 0C184978 color image + alpha, BG alpha - -Object files -B900031D 00552078 no image, no BG color -B900031D C4182048 greyscale - alpha, BG alpha -B900031D C4104DD8 intensity+alpha, no BG color -B900031D C4182078 color image - alpha, BG alpha -B900031D C4184978 color image + alpha, BG alpha - - FC commands. If the image doesn't use alpha, it doesn't matter if it is greyscale or color. I suggest the BG Alpha ones. They allow you to set translucency with FB commands (enviroment color). -FC26A004 1F1093FC image-alpha -FC26A004 1F1093FF image-alpha, BG alpha -FC26A004 1F1493FC color image+alpha -FC26A004 1F1493FF color image+alpha, BG alpha -FC26A004 1FFC93FC greyscale+alpha (ia) -FC26A004 1FFC93FF greyscale+alpha (ia), BG alpha -FCFFFFFF FFFE793C no image - - BB requires a quick computation. Do width height size of colorgrey key to find total size. That gives you the level value set to bits 00003800. If the image is indexed, use the size of the color, not the index value. If you fall between levels, round up to the next highest. -command level image binary total size -BB003801 7 8192 0x2000 -BB003001 6 4096 0x1000 -BB002801 5 2048 0x800 -BB002001 4 1024 0x400 -BB001801 3 512 0x200 -BB001001 2 256 0x100 -BB000801 1 128 0x80 -BB000001 0 0 0x0 (more likely no image) - Leave the lower word FFFFFFFF unless you're doing luster or something like that. - Examples - 32x32 ci image, 16bit color 32x32x2 = 2048 BB002801 FFFFFFFF - 64x64 greyscale, 8bit color 64x64x1 = 4096 BB003001 FFFFFFFF - - I think it corrects for this though. - -+_+ - - General formulas - - Rooms - E7000000 00000000 ;B9, BA, andor FC are changing -if(image) - BA001402 00100000 ;2 cycle when textured - B900031D 0C184978 ;color image - use image alpha - FC26A004 1F1493FF ;color img A + BG A, no vtx A - BA001001 00010000 ;images use lod - BB002801 FFFFFFFF ;on level 5, tile 0, default ST - C0080002 00000iii ;type 2 image #iii, presumed 32x32 ci -else(color) - BA001402 00000000 ;1 cycle when color - B900031D 00502078 ;use vertex color only - FCFFFFFF FFFE793C ;apply vertex and bg color only - BB000001 FFFFFFFF ;on level 0, tile 0, default ST -if(not yet set) - BA001102 00000000 ;clamp - BA000C02 00002000 ;bi-level interpretation - B7000000 00002000 ;cull back - FB000000 000000FF ;background color -;insert geometry here - - To switch images, just give it the values that changed. If a B9, BA, of FC value changes, remember to also set a E7 pipe command before it. The else(color) lines are in case you have untextured geometry. That does only vertex color. It's rigged up so if you change the alpha in the background color line it will make all the following tiles translucent. - - Objects - E7000000 00000000 ;B9, BA, andor FC are changing -if(image) - BA001001 00010000 ;images use LOD - BB002801 FFFFFFFF ;on level 5, tile 0, default ST - C0080002 00000iii ;type 2 image, presumed 32x32 ci - if(not yet set) - BA001102 00000000 ;clamp - BA000C02 00002000 ;bi-level interpretation -else(color) - BA001402 00000000 ;1 cycle when color - B900031D 00552078 ;use vertex color only - FCFFFFFF FFFE793C ;apply vertex and bg color only -if(not yet set) - B7000000 00002000 ;cull back - 01020040 03000000 ;basic matrix - - Same deal, slightly different requirements. You need the matrix command and don't need a few others. FC and B9 are preset to do color. - - +_+ - - Cheap Tricks - - To add luster, alter the BB lines from above and tack in an additional command. The ST offsets act as the repeat value for the reflection. -BB002801 08000800 ;on tile 0, set level as needed; set the ST values for repeat -C0080002 00000iii ;image as usual -B7000000 00060000 ;lighting + texture gen - - When done, use B6000000 00060000 to reset to normal. Otherwise the effect will leak onto any geometry following it. - - - To treat the black in a greyscale image as alpha (manhole covers from Dam) use these settings -Rooms -B900031D 0C1849D8 ;intensity, BG alpha -FC26A004 1F1093FF ;image-alpha, BG alpha -BB003001 FFFFFFFF ;on level 6, tile 0 -C0080002 00000iii ;image, expected to be greyscale -FB000000 00000000 ;0% visible or whatever other level you want - diff --git a/notes/GE Documentation/images text and font/image declarations.txt b/notes/GE Documentation/images text and font/image declarations.txt deleted file mode 100644 index 79105f9..0000000 --- a/notes/GE Documentation/images text and font/image declarations.txt +++ /dev/null @@ -1,104 +0,0 @@ -image declarations: 0xC each entry -0x0 4 image ID, or offset to image if already loaded to rdram -0x4 1 width -0x5 1 height -0x6 1 corresponds to "level"-1 in rdp texture commands -0x7 1 image format - 0 rgba - 1 yuv - 2 ci - 3 ia - 4 i -0x8 1 type of image - 0 4bit - 1 8bit - 2 16bit - 3 32bit -0x9 1 clamp/mirror 2 flags - 1 clamp s - 2 mirror s -0xA 1 clamp/mirror t flags - 1 clamp t - 2 mirror t -0xB 1 - -+_+ - -Wow, I really screwed this up badly... -Will go back through docs to correct this... - -'facemapper' image entry -entry + 0x0 - FFF00000 image ID - -entry + 0x4 - FFFFFFFF p->image in rdram - -entry + 0x8 - FF000000 width - 00FF0000 height - 0000FF00 #colours in palette - 000000E0 ??? - 0000001C format - 0 rgba - 1 yuv - 2 ci - 3 ia - 4 i - 00000003 bitdepth - 0 4bit - 1 8bit - 2 16bit - 3 32bit - -entry + 0xC - C0000000 reserved - 40000000 1-use width/height for level - 20000000 reserved - 0C000000 texture look-up table type - 0 ??? - 1 ??? - 2 rgba16 - 3 ia16 - -+_+ - -C0 commands -upper command -00C00000 S mirror(2), clamp(1) -00300000 T mirror(2), clamp(1) -000C0000 ST settilesize offset, which may only be 2 or 0. Avoids pixelization on edges. -0003C000 S shift -00003C00 T shift -000003F0 RESERVED -00000007 type 0-4 - -lower command -FF000000 Primcolor diffuse level, used to determine visible distance of overlay images (LOD effect) -00FFF000 Overlay image ID. Appears when close to the object. -00000FFF Base image ID. When overlay present, used at a distance and replaced at close range. - - When special LOD image swapping used, the level byte indicates at what distance from the camera the swap will occur. It is easier to think of the value as negative: how distant from the camera the swap will occur. - -type 0 C0.FFFF.00 LL.000.iii - Loads image [i] using LOD level [L]. All flags are acceptable. - Functionally similiar to type 2, except it always sets the LOD. - In addition, if "joy2 detail edit" is activated, the first instance of an image [i] sets the LOD and shift for all subsequent instances. See below for more details. - -type 1 C0.FFFF.01 LL.ooo.iii - Level of detail image shifting. Replaces base image [i] with overlay image [o] when within LOD range. All flags apply. - Command requires two image IDs to function or is otherwise ignored. - Note: technically the "base" and "overlay" are actually the other way around, but this describes the actual behaviour. - -type 2 C0.FC00.02 00000.iii - Loads image [i]. Only mirror, clamp, and offset flags are read. - Most common image loading type. Sets up to 7 tiles of diminishing size depending on proportions. - Additionally, if "joy2 detail edit" is activated and LOD data has been saved for this image, the image will be applied at the specified level similiar to a type 0 command. See below for more details. - -type 3 C0.FC00.03 00000.iii - Loads image [i]. Only mirror, clamp, and offset flags are read. - Used predominantly for 32x32 indexed images within objects. Sets the tile twice. - -type 4 C0.FC00.04 00000.iii - Loads image [i]. Only mirror, clamp, and offset flags are read. - Used especially for large greyscale images within objects. Only sets the tile once in memory. diff --git a/notes/GE Documentation/images text and font/imageTypes.txt b/notes/GE Documentation/images text and font/imageTypes.txt deleted file mode 100644 index fdf84b1..0000000 --- a/notes/GE Documentation/images text and font/imageTypes.txt +++ /dev/null @@ -1,2698 +0,0 @@ -0000 (8F7DF0) Greyscale TableOffsetter 0 [W20 H1C] 32-bit RAW RGBA Transparent? -0001 (8F8544) Type 400B Paletted with 61 colours [W0F H0F] 8-Bit coloured Paletted Transparent -0002 (8F86AE) Greyscale TableOffsetter 0 [W20 H1C] 32-bit RAW RGBA Transparent? -0003 (8F9022) Greyscale TableOffsetter 5 [W7A H12] 8-bit Greyscale Transparent -0004 (8F93AD) Type 400B Paletted with 57 colours [W14 H14] 8-Bit coloured Paletted Transparent -0005 (8F9500) Type 4609 Paletted with 18 colours [W20 H20] 8-Bit coloured Paletted -0006 (8F975E) Type 4609 Paletted with A2 colours [W20 H20] 8-Bit coloured Paletted -0007 (8F9B1C) Type 460A Paletted with 02 colours [W20 H20] 4-Bit coloured Paletted -0008 (8F9B36) Type 460A Paletted with 02 colours [W20 H20] 4-Bit coloured Paletted -0009 (8F9B50) Type 4609 Paletted with 5E colours [W20 H20] 8-Bit coloured Paletted -000A (8F9ECF) Type 4609 Paletted with 5F colours [W20 H20] 8-Bit coloured Paletted -000B (8FA260) Type C509 Paletted with 21 colours [W11 H11] 8-Bit coloured Paletted -000C (8FA340) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -000D (8FA6E4) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -000E (8FAB87) Greyscale TableOffsetter 7 [W20 H41] 8-bit Greyscale -000F (8FAFFE) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0010 (8FB46F) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0011 (8FB91B) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -0012 (8FBCF5) Type 460A Paletted with 02 colours [W20 H20] 4-Bit coloured Paletted -0013 (8FBD0F) Type 460A Paletted with 02 colours [W20 H20] 4-Bit coloured Paletted -0014 (8FBD29) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0015 (8FC342) Type 400B Paletted with 34 colours [W10 H10] 8-Bit coloured Paletted Transparent -0016 (8FC477) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0017 (8FCA6C) Greyscale TableOffsetter 5 [W41 H20] 8-bit Greyscale Transparent -0018 (8FCDCB) Greyscale TableOffsetter 5 [W41 H20] 8-bit Greyscale Transparent -0019 (8FD11B) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -001A (8FD727) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -001B (8FD7EC) Type 460A Paletted with 0D colours [W20 H20] 4-Bit coloured Paletted -001C (8FD892) Type 460A Paletted with 0B colours [W20 H20] 4-Bit coloured Paletted -001D (8FD947) Type 4609 Paletted with 6C colours [W20 H20] 8-Bit coloured Paletted -001E (8FDD24) Type 4609 Paletted with B0 colours [W20 H30] 8-Bit coloured Paletted -001F (8FE120) Type 4609 Paletted with 65 colours [W20 H20] 8-Bit coloured Paletted -0020 (8FE428) Type 4609 Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted -0021 (8FE72E) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0022 (8FED78) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0023 (8FF344) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0024 (8FF9E4) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0025 (9000AA) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0026 (900495) Type 4609 Paletted with 63 colours [W10 H20] 8-Bit coloured Paletted -0027 (9005A8) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -0028 (9007CF) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -0029 (9009E8) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -002A (900C13) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -002B (900E35) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -002C (901372) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -002D (9018CE) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -002E (901CBD) Greyscale TableOffsetter 5 [W10 H80] 8-bit Greyscale Transparent -002F (901E57) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0030 (9022AB) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0031 (902969) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0032 (902BE5) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0033 (9031CB) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0034 (903503) Type 4609 Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted -0035 (9039D3) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0036 (903F73) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0037 (904405) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0038 (90471D) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0039 (90482B) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -003A (90491C) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -003B (904A35) Type 4609 Paletted with 71 colours [W20 H20] 8-Bit coloured Paletted -003C (904CDB) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -003D (904E7B) Type 460A Paletted with 07 colours [W20 H20] 4-Bit coloured Paletted -003E (904E9D) Type 4609 Paletted with 41 colours [W20 H20] 8-Bit coloured Paletted -003F (904FB1) Type 4609 Paletted with 2A colours [W20 H20] 8-Bit coloured Paletted -0040 (90504D) Type 4609 Paletted with 5B colours [W20 H20] 8-Bit coloured Paletted -0041 (9053F2) Type 4609 Paletted with 69 colours [W20 H20] 8-Bit coloured Paletted -0042 (90576A) Type 4609 Paletted with 51 colours [W20 H20] 8-Bit coloured Paletted -0043 (905AAE) Type 4609 Paletted with 37 colours [W20 H20] 8-Bit coloured Paletted -0044 (905BA5) Type 4609 Paletted with 8B colours [W20 H20] 8-Bit coloured Paletted -0045 (905F40) Type 4609 Paletted with 20 colours [W20 H20] 8-Bit coloured Paletted -0046 (9060ED) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -0047 (9062D1) Type 4609 Paletted with 3B colours [W20 H20] 8-Bit coloured Paletted -0048 (9065A6) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -0049 (90666C) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -004A (906733) Type 4609 Paletted with 49 colours [W20 H20] 8-Bit coloured Paletted -004B (9069E6) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -004C (906B88) Type 4609 Paletted with 18 colours [W20 H20] 8-Bit coloured Paletted -004D (906D18) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -004E (9072F9) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -004F (9075A8) Type 460A Paletted with 0D colours [W20 H20] 4-Bit coloured Paletted -0050 (907686) Type 4609 Paletted with 27 colours [W20 H20] 8-Bit coloured Paletted -0051 (90787A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0052 (907E5E) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -0053 (908017) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0054 (90860A) Type 4609 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -0055 (908831) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0056 (908B08) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0057 (908EB6) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0058 (9091AF) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0059 (909DD9) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -005A (90A9D6) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -005B (90B607) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -005C (90C11F) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -005D (90CCE5) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -005E (90D94D) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -005F (90E5F2) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0060 (90F1C6) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0061 (90FD43) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0062 (91091B) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0063 (91155C) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0064 (9120FB) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0065 (912CE1) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0066 (9139CF) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0067 (9146D5) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0068 (915276) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0069 (915D9D) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -006A (916AB5) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -006B (91777F) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -006C (9181D9) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -006D (918A4F) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -006E (9192F9) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -006F (919BC8) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0070 (91A35C) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0071 (91ADD6) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0072 (91BA68) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0073 (91C5F2) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0074 (91D045) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0075 (91DC35) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0076 (91E941) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0077 (91F60D) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0078 (920005) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0079 (920CC6) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -007A (921A01) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -007B (92276E) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -007C (92335E) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -007D (923CDE) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -007E (92486F) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -007F (925510) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0080 (925F92) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0081 (926C0C) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0082 (927957) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0083 (9286DC) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0084 (929352) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0085 (929EFB) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0086 (92AC55) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0087 (92B9A5) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0088 (92C5DA) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0089 (92D067) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -008A (92DD8D) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -008B (92E8B2) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -008C (92F14B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -008D (92F5C2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -008E (92FA47) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -008F (92FE9D) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0090 (9306DD) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0091 (930F27) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0092 (931792) Greyscale TableOffsetter 8 [W80 H2F] 4-bit Greyscale -0093 (931F54) Type 4609 Paletted with 77 colours [W20 H20] 8-Bit coloured Paletted -0094 (932166) Type 4609 Paletted with 73 colours [W20 H20] 8-Bit coloured Paletted -0095 (9323B1) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0096 (9324FA) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0097 (93261F) Type 4609 Paletted with A8 colours [W20 H20] 8-Bit coloured Paletted -0098 (93292F) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0099 (932A66) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -009A (932B8D) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -009B (932CC8) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -009C (932F89) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -009D (933345) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -009E (9338D3) Type 4609 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -009F (933A19) Type 4609 Paletted with 25 colours [W20 H20] 8-Bit coloured Paletted -00A0 (933B54) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -00A1 (933D87) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00A2 (934068) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00A3 (934384) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00A4 (93468F) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00A5 (9349CE) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00A6 (934CC3) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00A7 (935001) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00A8 (93530F) Type 4609 Paletted with 9C colours [W20 H20] 8-Bit coloured Paletted -00A9 (935662) Type 4709 Paletted with A4 colours [W10 H40] 8-Bit coloured Paletted -00AA (935AD9) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00AB (935DD2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00AC (93602D) Type 450B Paletted with 16 colours [W10 H10] 8-Bit coloured Paletted Transparent -00AD (9360E7) Type 4609 Paletted with 2F colours [W20 H20] 8-Bit coloured Paletted -00AE (93638D) Type 460B Paletted with 5D colours [W20 H20] 8-Bit coloured Paletted Transparent -00AF (936737) Type 4609 Paletted with 1E colours [W20 H20] 8-Bit coloured Paletted -00B0 (936973) Type 4009 Paletted with FF colours [W40 H20] 8-Bit coloured Paletted -00B1 (937151) Type 4609 Paletted with 73 colours [W20 H20] 8-Bit coloured Paletted -00B2 (9373C2) Type 460B Paletted with 2C colours [W20 H20] 8-Bit coloured Paletted Transparent -00B3 (9376B5) Type 4609 Paletted with 3C colours [W20 H20] 8-Bit coloured Paletted -00B4 (9379C9) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -00B5 (937AF1) Type 4609 Paletted with 2D colours [W20 H20] 8-Bit coloured Paletted -00B6 (937CEA) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -00B7 (937F9D) Type 4609 Paletted with 10 colours [W20 H20] 8-Bit coloured Paletted -00B8 (9381A4) Type 4009 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -00B9 (9383FF) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -00BA (938948) Type 4609 Paletted with 81 colours [W20 H20] 8-Bit coloured Paletted -00BB (938D93) Type 4609 Paletted with 52 colours [W20 H20] 8-Bit coloured Paletted -00BC (939112) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -00BD (939732) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -00BE (939B85) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -00BF (93A0F1) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -00C0 (93A688) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -00C1 (93AB9E) Greyscale TableOffsetter 6 [W4C H4C] 4-bit Greyscale Transparent -00C2 (93AE26) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -00C3 (93B0EE) Type 4609 Paletted with EA colours [W20 H20] 8-Bit coloured Paletted -00C4 (93B685) Type 4609 Paletted with 88 colours [W20 H20] 8-Bit coloured Paletted -00C5 (93BB02) Type 4609 Paletted with 29 colours [W20 H20] 8-Bit coloured Paletted -00C6 (93BDA1) Type 4609 Paletted with 30 colours [W20 H20] 8-Bit coloured Paletted -00C7 (93C044) Type 460A Paletted with 08 colours [W20 H20] 4-Bit coloured Paletted -00C8 (93C18E) Type 4609 Paletted with C4 colours [W20 H20] 8-Bit coloured Paletted -00C9 (93C648) Type 4609 Paletted with BE colours [W20 H20] 8-Bit coloured Paletted -00CA (93CA42) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -00CB (93CF71) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -00CC (93D3D1) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -00CD (93D932) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -00CE (93DE29) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -00CF (93E232) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -00D0 (93E875) Greyscale TableOffsetter 7 [W40 H40] 8-bit Greyscale -00D1 (93F3A0) Greyscale TableOffsetter 7 [W40 H40] 8-bit Greyscale -00D2 (93FFDE) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -00D3 (940556) Type 4609 Paletted with 2F colours [W20 H20] 8-Bit coloured Paletted -00D4 (940625) Type 4709 Paletted with 7C colours [W10 H40] 8-Bit coloured Paletted -00D5 (9408B5) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -00D6 (940D8B) Type 4609 Paletted with 39 colours [W20 H20] 8-Bit coloured Paletted -00D7 (940E6B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00D8 (9410D9) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -00D9 (941227) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -00DA (941407) Type 460A Paletted with 0A colours [W20 H20] 4-Bit coloured Paletted -00DB (941520) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00DC (9418F8) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00DD (941D01) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00DE (9420F3) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00DF (9424FC) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00E0 (94293E) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00E1 (942D7B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00E2 (943171) Type 4609 Paletted with 4B colours [W20 H20] 8-Bit coloured Paletted -00E3 (943424) Type 4609 Paletted with 59 colours [W20 H20] 8-Bit coloured Paletted -00E4 (9437A3) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -00E5 (943A0C) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -00E6 (943C35) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -00E7 (943FB8) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -00E8 (944592) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -00E9 (9448D3) Type 4609 Paletted with 49 colours [W20 H20] 8-Bit coloured Paletted -00EA (944A01) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -00EB (944F55) Type 4609 Paletted with 6E colours [W20 H20] 8-Bit coloured Paletted -00EC (9452F2) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -00ED (945788) Type 4609 Paletted with CC colours [W20 H20] 8-Bit coloured Paletted -00EE (945C71) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -00EF (946038) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -00F0 (946417) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -00F1 (946817) Type 4609 Paletted with 5A colours [W20 H20] 8-Bit coloured Paletted -00F2 (946A5C) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -00F3 (946C52) Type 460A Paletted with 0B colours [W20 H20] 4-Bit coloured Paletted -00F4 (946DB1) Type 4609 Paletted with 91 colours [W20 H20] 8-Bit coloured Paletted -00F5 (947229) Greyscale TableOffsetter 6 [W20 H80] 4-bit Greyscale Transparent -00F6 (947436) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -00F7 (947718) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -00F8 (9477DF) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -00F9 (947893) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -00FA (94792B) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -00FB (9479F2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -00FC (947D1B) Type 4609 Paletted with 4D colours [W20 H20] 8-Bit coloured Paletted -00FD (947FBC) Type 4609 Paletted with 8F colours [W20 H20] 8-Bit coloured Paletted -00FE (948289) Type 4609 Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted -00FF (948691) Type 4609 Paletted with FE colours [W20 H20] 8-Bit coloured Paletted -0100 (948A7C) Type 4609 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -0101 (948C4B) Type 4609 Paletted with 56 colours [W20 H20] 8-Bit coloured Paletted -0102 (948F88) Type 4609 Paletted with 42 colours [W20 H20] 8-Bit coloured Paletted -0103 (94920F) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -0104 (949535) Type 460B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0105 (9498B5) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0106 (949B66) Type 4609 Paletted with 8C colours [W10 H20] 8-Bit coloured Paletted -0107 (949E2A) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0108 (94A058) Type 4609 Paletted with F0 colours [W20 H20] 8-Bit coloured Paletted -0109 (94A5DC) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -010A (94A784) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -010B (94A7D3) Type 460B Paletted with E4 colours [W20 H20] 8-Bit coloured Paletted Transparent -010C (94AD2B) Type 4609 Paletted with 52 colours [W20 H20] 8-Bit coloured Paletted -010D (94B002) Type 460B Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted Transparent -010E (94B584) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -010F (94B83A) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0110 (94BD50) Type 4609 Paletted with FA colours [W20 H20] 8-Bit coloured Paletted -0111 (94C230) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0112 (94C9C9) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0113 (94D149) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0114 (94D955) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0115 (94E0FC) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0116 (94E880) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0117 (94EF33) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -0118 (94F1CD) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0119 (94F556) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -011A (94F844) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -011B (94FB63) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -011C (94FE85) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -011D (9503FD) Type 4609 Paletted with 4B colours [W20 H20] 8-Bit coloured Paletted -011E (95071B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -011F (950B43) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0120 (951004) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0121 (95147D) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0122 (951976) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0123 (951E01) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0124 (9521E0) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0125 (952726) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0126 (952C56) Type 4609 Paletted with C5 colours [W20 H20] 8-Bit coloured Paletted -0127 (953181) Type 4609 Paletted with 77 colours [W20 H20] 8-Bit coloured Paletted -0128 (953570) Type 4609 Paletted with 9A colours [W20 H20] 8-Bit coloured Paletted -0129 (9539B0) Type 4609 Paletted with 88 colours [W20 H20] 8-Bit coloured Paletted -012A (953D52) Type 4609 Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted -012B (954061) Type 4609 Paletted with 4F colours [W20 H20] 8-Bit coloured Paletted -012C (954364) Type 4609 Paletted with 4F colours [W20 H20] 8-Bit coloured Paletted -012D (954667) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -012E (9549DB) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -012F (954F10) Type 4609 Paletted with 55 colours [W20 H20] 8-Bit coloured Paletted -0130 (95518F) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -0131 (955257) Type 4609 Paletted with 33 colours [W20 H20] 8-Bit coloured Paletted -0132 (955494) Type 4609 Paletted with 42 colours [W20 H20] 8-Bit coloured Paletted -0133 (955743) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0134 (955CA3) Type 4609 Paletted with 57 colours [W20 H20] 8-Bit coloured Paletted -0135 (956028) Type 4609 Paletted with 60 colours [W20 H20] 8-Bit coloured Paletted -0136 (9563DD) Type 4609 Paletted with C0 colours [W20 H20] 8-Bit coloured Paletted -0137 (956924) Type 4609 Paletted with 45 colours [W20 H20] 8-Bit coloured Paletted -0138 (956C53) Type 4609 Paletted with 8B colours [W20 H20] 8-Bit coloured Paletted -0139 (956FDB) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -013A (957257) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -013B (9574D3) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -013C (957718) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -013D (95795D) Type 4709 Paletted with 44 colours [W10 H40] 8-Bit coloured Paletted -013E (957BA3) Type 4609 Paletted with 4F colours [W20 H20] 8-Bit coloured Paletted -013F (957E49) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -0140 (957F8A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0141 (9581A2) Type C709 Paletted with 58 colours [W80 H09] 8-Bit coloured Paletted -0142 (9585FD) Type C709 Paletted with 70 colours [W80 H09] 8-Bit coloured Paletted -0143 (958BE8) Type C709 Paletted with 6F colours [W80 H09] 8-Bit coloured Paletted -0144 (959203) Type C709 Paletted with 76 colours [W80 H09] 8-Bit coloured Paletted -0145 (959830) Type C709 Paletted with 77 colours [W80 H09] 8-Bit coloured Paletted -0146 (959E4F) Type C709 Paletted with 75 colours [W80 H09] 8-Bit coloured Paletted -0147 (95A490) Type C709 Paletted with 7D colours [W80 H09] 8-Bit coloured Paletted -0148 (95AAE3) Type C709 Paletted with 7F colours [W80 H09] 8-Bit coloured Paletted -0149 (95B0D8) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -014A (95B41C) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -014B (95B7A2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -014C (95BB3B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -014D (95BE9B) Type 4609 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -014E (95BFFC) Type 4609 Paletted with 10 colours [W20 H20] 8-Bit coloured Paletted -014F (95C116) Type 4609 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -0150 (95C249) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -0151 (95C373) Greyscale TableOffsetter 5 [W36 H36] 8-bit Greyscale Transparent -0152 (95C6BB) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0153 (95CBE2) Type 4609 Paletted with A6 colours [W20 H20] 8-Bit coloured Paletted -0154 (95CF7C) Type 4609 Paletted with B8 colours [W20 H20] 8-Bit coloured Paletted -0155 (95D36A) Type 4609 Paletted with A4 colours [W20 H20] 8-Bit coloured Paletted -0156 (95D742) Type 4609 Paletted with E4 colours [W20 H20] 8-Bit coloured Paletted -0157 (95DB9D) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -0158 (95DC85) Type 4609 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -0159 (95DDA7) Type 4609 Paletted with AC colours [W20 H20] 8-Bit coloured Paletted -015A (95E1B4) Type 4609 Paletted with AA colours [W20 H20] 8-Bit coloured Paletted -015B (95E595) Type 4609 Paletted with 10 colours [W20 H20] 8-Bit coloured Paletted -015C (95E656) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -015D (95E765) Type 4609 Paletted with 6E colours [W20 H20] 8-Bit coloured Paletted -015E (95EA67) Type 4609 Paletted with 33 colours [W20 H20] 8-Bit coloured Paletted -015F (95EC7C) Type 4609 Paletted with 11 colours [W20 H20] 8-Bit coloured Paletted -0160 (95ED51) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -0161 (95F083) Type 4609 Paletted with 18 colours [W20 H20] 8-Bit coloured Paletted -0162 (95F24B) Type 460A Paletted with 0C colours [W20 H20] 4-Bit coloured Paletted -0163 (95F2F3) Type 4609 Paletted with AC colours [W20 H20] 8-Bit coloured Paletted -0164 (95F67D) Type 4609 Paletted with 76 colours [W20 H20] 8-Bit coloured Paletted -0165 (95F93D) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0166 (95FD87) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0167 (960162) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0168 (9604BF) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0169 (96080C) Type C609 Paletted with BE colours [W21 H21] 8-Bit coloured Paletted -016A (960D42) Type C609 Paletted with 82 colours [W21 H21] 8-Bit coloured Paletted -016B (961102) Type C609 Paletted with AD colours [W21 H21] 8-Bit coloured Paletted -016C (9615CA) Type C609 Paletted with 76 colours [W21 H21] 8-Bit coloured Paletted -016D (961997) Type C609 Paletted with 18 colours [W21 H21] 8-Bit coloured Paletted -016E (961BAB) Type C609 Paletted with 4D colours [W21 H21] 8-Bit coloured Paletted -016F (961E9F) Type C609 Paletted with 62 colours [W21 H21] 8-Bit coloured Paletted -0170 (962255) Type C609 Paletted with 74 colours [W21 H21] 8-Bit coloured Paletted -0171 (962633) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -0172 (9628A1) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -0173 (962B0F) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0174 (96306E) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0175 (9635F8) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -0176 (96392F) Type 4609 Paletted with 75 colours [W20 H20] 8-Bit coloured Paletted -0177 (963D2E) Type 4609 Paletted with 6B colours [W20 H20] 8-Bit coloured Paletted -0178 (9640E3) Type 4609 Paletted with 6B colours [W20 H20] 8-Bit coloured Paletted -0179 (964498) Type 4609 Paletted with 58 colours [W20 H20] 8-Bit coloured Paletted -017A (9647CA) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -017B (964BC6) Type 4609 Paletted with 79 colours [W20 H20] 8-Bit coloured Paletted -017C (964F8A) Type 4609 Paletted with 91 colours [W20 H20] 8-Bit coloured Paletted -017D (9653D0) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -017E (9657CA) Type 4609 Paletted with 21 colours [W20 H20] 8-Bit coloured Paletted -017F (965A2B) Type 4609 Paletted with C6 colours [W20 H20] 8-Bit coloured Paletted -0180 (965F60) Type 4609 Paletted with D6 colours [W20 H20] 8-Bit coloured Paletted -0181 (9664CD) Type 4609 Paletted with 96 colours [W20 H20] 8-Bit coloured Paletted -0182 (96691C) Type C609 Paletted with FF colours [W25 H25] 8-Bit coloured Paletted -0183 (967299) Type C609 Paletted with FF colours [W24 H25] 8-Bit coloured Paletted -0184 (967B9B) Type C609 Paletted with FF colours [W25 H25] 8-Bit coloured Paletted -0185 (9684C8) Type C609 Paletted with FF colours [W24 H25] 8-Bit coloured Paletted -0186 (968DDC) Type C609 Paletted with FF colours [W25 H25] 8-Bit coloured Paletted -0187 (96975D) Type C609 Paletted with FF colours [W24 H25] 8-Bit coloured Paletted -0188 (96A05B) Type C609 Paletted with FF colours [W25 H24] 8-Bit coloured Paletted -0189 (96A950) Type C609 Paletted with FF colours [W24 H24] 8-Bit coloured Paletted -018A (96B1C8) Type 4609 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -018B (96B3E9) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -018C (96B859) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -018D (96BD7F) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -018E (96C265) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -018F (96C68A) Type 4609 Paletted with 54 colours [W20 H20] 8-Bit coloured Paletted -0190 (96C9E5) Type 4609 Paletted with 83 colours [W20 H20] 8-Bit coloured Paletted -0191 (96CE1A) Type 4609 Paletted with 84 colours [W20 H20] 8-Bit coloured Paletted -0192 (96D253) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -0193 (96D58F) Type 4709 Paletted with 42 colours [W10 H40] 8-Bit coloured Paletted -0194 (96D89B) Type 4709 Paletted with 33 colours [W10 H40] 8-Bit coloured Paletted -0195 (96DB9A) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -0196 (96DE4D) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0197 (96E376) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0198 (96E6C3) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0199 (96E8D0) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -019A (96EC6D) Type 4609 Paletted with 2F colours [W20 H20] 8-Bit coloured Paletted -019B (96EF5E) Type 4709 Paletted with 1C colours [W40 H10] 8-Bit coloured Paletted -019C (96F111) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -019D (96F31F) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -019E (96F48A) Type 4709 Paletted with 1C colours [W40 H10] 8-Bit coloured Paletted -019F (96F691) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -01A0 (96F820) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -01A1 (96F9EF) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -01A2 (96FBAE) Type 400B Paletted with FF colours [W80 H10] 8-Bit coloured Paletted Transparent -01A3 (970284) Type 4709 Paletted with 6D colours [W40 H10] 8-Bit coloured Paletted -01A4 (970660) Type 400B Paletted with FF colours [W80 H10] 8-Bit coloured Paletted Transparent -01A5 (970D40) Type 4709 Paletted with 1D colours [W40 H10] 8-Bit coloured Paletted -01A6 (970F63) Type 4709 Paletted with 1C colours [W40 H10] 8-Bit coloured Paletted -01A7 (971146) Type 4709 Paletted with 1C colours [W40 H10] 8-Bit coloured Paletted -01A8 (97129E) Greyscale TableOffsetter 6 [W80 H10] 4-bit Greyscale Transparent -01A9 (97141F) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01AA (971872) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01AB (971DD0) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01AC (97238B) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01AD (9728B0) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01AE (972FDD) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01AF (97349B) Type 4709 Paletted with 9C colours [W80 H08] 8-Bit coloured Paletted -01B0 (97378E) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01B1 (973BCA) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01B2 (973FB0) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01B3 (9745DB) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01B4 (9748F8) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01B5 (974BF8) Greyscale TableOffsetter 0 [W20 H10] 32-bit RAW RGBA Transparent? -01B6 (975247) Type 470B Paletted with FF colours [W40 H10] 8-Bit coloured Paletted Transparent -01B7 (97583E) Greyscale TableOffsetter 0 [W20 H10] 32-bit RAW RGBA Transparent? -01B8 (975EA3) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -01B9 (97626B) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -01BA (976636) Type 4609 Paletted with 61 colours [W20 H20] 8-Bit coloured Paletted -01BB (97699C) Greyscale TableOffsetter 8 [W3F H5C] 4-bit Greyscale -01BC (977052) Greyscale TableOffsetter 8 [W3F H5C] 4-bit Greyscale -01BD (977774) Greyscale TableOffsetter 8 [W3F H5C] 4-bit Greyscale -01BE (97801B) Greyscale TableOffsetter 8 [W3F H5C] 4-bit Greyscale -01BF (9788E7) Greyscale TableOffsetter 6 [W40 H41] 4-bit Greyscale Transparent -01C0 (978CD7) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01C1 (979012) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -01C2 (979256) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -01C3 (979456) Type 4709 Paletted with 1B colours [W40 H10] 8-Bit coloured Paletted -01C4 (97964D) Type 4609 Paletted with 8A colours [W20 H20] 8-Bit coloured Paletted -01C5 (979AC0) Type 4609 Paletted with 6C colours [W20 H20] 8-Bit coloured Paletted -01C6 (979E84) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -01C7 (97A25F) Type 4609 Paletted with 44 colours [W20 H20] 8-Bit coloured Paletted -01C8 (97A43F) Type 4609 Paletted with 45 colours [W20 H20] 8-Bit coloured Paletted -01C9 (97A62C) Type 4609 Paletted with C1 colours [W20 H20] 8-Bit coloured Paletted -01CA (97AB59) Type 4609 Paletted with 9A colours [W20 H20] 8-Bit coloured Paletted -01CB (97AFD8) Type 4609 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -01CC (97B228) Greyscale TableOffsetter 6 [W80 H20] 4-bit Greyscale Transparent -01CD (97B4AE) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -01CE (97B562) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -01CF (97B605) Type 4709 Paletted with 28 colours [W40 H10] 8-Bit coloured Paletted -01D0 (97B7EB) Type 4709 Paletted with 1A colours [W40 H10] 8-Bit coloured Paletted -01D1 (97B999) Type 4709 Paletted with 62 colours [W40 H10] 8-Bit coloured Paletted -01D2 (97BC1E) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01D3 (97BE41) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01D4 (97C03B) Greyscale TableOffsetter 7 [W40 H30] 8-bit Greyscale -01D5 (97C7DD) Greyscale TableOffsetter 7 [W40 H30] 8-bit Greyscale -01D6 (97CF7B) Greyscale TableOffsetter 6 [W40 H20] 4-bit Greyscale Transparent -01D7 (97D0BB) Type 4609 Paletted with A1 colours [W20 H20] 8-Bit coloured Paletted -01D8 (97D331) Type 4609 Paletted with BC colours [W20 H20] 8-Bit coloured Paletted -01D9 (97D5C1) Greyscale TableOffsetter 6 [W40 H20] 4-bit Greyscale Transparent -01DA (97D825) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01DB (97DCA9) Type 4609 Paletted with 69 colours [W20 H20] 8-Bit coloured Paletted -01DC (97E06F) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01DD (97E3B2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01DE (97E6ED) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01DF (97EA16) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -01E0 (97EDE3) Greyscale TableOffsetter 6 [W40 H20] 4-bit Greyscale Transparent -01E1 (97EF24) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01E2 (97F444) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01E3 (97F8B7) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01E4 (97FD77) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01E5 (9800F8) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01E6 (9804A8) Type 460B Paletted with B8 colours [W20 H20] 8-Bit coloured Paletted Transparent -01E7 (98089A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01E8 (980CF8) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01E9 (981188) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01EA (981531) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -01EB (9818CC) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01EC (981C2E) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -01ED (981ED6) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -01EE (98248F) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01EF (98254A) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -01F0 (982604) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01F1 (9826BB) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01F2 (9827C4) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01F3 (9828A5) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -01F4 (982D43) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -01F5 (9831B6) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01F6 (983512) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01F7 (983849) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01F8 (983AC7) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01F9 (983D0F) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01FA (983F4A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -01FB (98409C) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -01FC (98434F) Greyscale TableOffsetter 8 [W80 H20] 4-bit Greyscale -01FD (9844D7) Greyscale TableOffsetter 8 [W80 H20] 4-bit Greyscale -01FE (98474E) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -01FF (984953) Greyscale TableOffsetter 8 [W80 H20] 4-bit Greyscale -0200 (984AF7) Type 4609 Paletted with 24 colours [W20 H20] 8-Bit coloured Paletted -0201 (984B95) Type 4609 Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted -0202 (984EC1) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0203 (985370) Greyscale TableOffsetter 6 [W20 H80] 4-bit Greyscale Transparent -0204 (98547A) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0205 (9855B2) Type 4709 Paletted with 45 colours [W08 H80] 8-Bit coloured Paletted -0206 (9856F1) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0207 (985BC5) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0208 (985D0C) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0209 (985F93) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -020A (986030) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -020B (98631D) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -020C (98657C) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -020D (986686) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -020E (986966) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -020F (986CD9) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0210 (986E83) Greyscale TableOffsetter 6 [W80 H20] 4-bit Greyscale Transparent -0211 (987170) Greyscale TableOffsetter 6 [W40 H20] 4-bit Greyscale Transparent -0212 (9872BB) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0213 (98773F) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0214 (987A29) Type 460B Paletted with 17 colours [W20 H01] 8-Bit coloured Paletted Transparent -0215 (987A6E) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0216 (987C52) Type 4609 Paletted with 79 colours [W20 H20] 8-Bit coloured Paletted -0217 (988016) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0218 (988446) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0219 (98876B) Type 4609 Paletted with 22 colours [W20 H20] 8-Bit coloured Paletted -021A (988A01) Type 460B Paletted with A7 colours [W20 H20] 8-Bit coloured Paletted Transparent -021B (988E98) Type 4609 Paletted with 9A colours [W20 H20] 8-Bit coloured Paletted -021C (9891D4) Type 4609 Paletted with 76 colours [W20 H20] 8-Bit coloured Paletted -021D (989483) Type 4609 Paletted with 35 colours [W20 H20] 8-Bit coloured Paletted -021E (98957C) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -021F (989992) Type C609 Paletted with 53 colours [W21 H20] 8-Bit coloured Paletted -0220 (989CD5) Type C609 Paletted with FF colours [W21 H20] 8-Bit coloured Paletted -0221 (98A2C1) Greyscale TableOffsetter 7 [W80 H16] 8-bit Greyscale -0222 (98AA25) Greyscale TableOffsetter 7 [W80 H16] 8-bit Greyscale -0223 (98B193) Greyscale TableOffsetter 7 [W80 H16] 8-bit Greyscale -0224 (98B8BE) Greyscale TableOffsetter 7 [W80 H16] 8-bit Greyscale -0225 (98BCEA) Greyscale TableOffsetter 7 [W80 H16] 8-bit Greyscale -0226 (98C0B2) Greyscale TableOffsetter 7 [W80 H16] 8-bit Greyscale -0227 (98C4BD) Type C609 Paletted with C2 colours [W21 H21] 8-Bit coloured Paletted -0228 (98CBA4) Type C609 Paletted with A7 colours [W21 H21] 8-Bit coloured Paletted -0229 (98D233) Type C609 Paletted with 9B colours [W21 H21] 8-Bit coloured Paletted -022A (98D835) Type C609 Paletted with 9D colours [W21 H21] 8-Bit coloured Paletted -022B (98DE37) Type C609 Paletted with 92 colours [W21 H21] 8-Bit coloured Paletted -022C (98E42C) Type C609 Paletted with B9 colours [W21 H21] 8-Bit coloured Paletted -022D (98EAF2) Type C609 Paletted with 94 colours [W21 H21] 8-Bit coloured Paletted -022E (98F0EB) Type C609 Paletted with AF colours [W21 H21] 8-Bit coloured Paletted -022F (98F796) Type C709 Paletted with CF colours [W41 H11] 8-Bit coloured Paletted -0230 (98FEFE) Type C709 Paletted with A3 colours [W41 H11] 8-Bit coloured Paletted -0231 (99056A) Type C709 Paletted with 93 colours [W41 H11] 8-Bit coloured Paletted -0232 (990B97) Type C709 Paletted with A7 colours [W41 H11] 8-Bit coloured Paletted -0233 (9911CD) Type C709 Paletted with 8F colours [W41 H11] 8-Bit coloured Paletted -0234 (9917CE) Type C709 Paletted with AC colours [W41 H11] 8-Bit coloured Paletted -0235 (991E76) Type C709 Paletted with A8 colours [W41 H11] 8-Bit coloured Paletted -0236 (992515) Type C709 Paletted with 96 colours [W41 H11] 8-Bit coloured Paletted -0237 (992B5B) Type C009 Paletted with 2F colours [W20 H21] 8-Bit coloured Paletted -0238 (992CD5) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0239 (9934C2) Type C609 Paletted with D4 colours [W21 H21] 8-Bit coloured Paletted -023A (993BF8) Type C609 Paletted with DE colours [W21 H21] 8-Bit coloured Paletted -023B (994367) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -023C (994B69) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -023D (995355) Type C609 Paletted with E0 colours [W21 H21] 8-Bit coloured Paletted -023E (995AC5) Type C609 Paletted with C4 colours [W21 H21] 8-Bit coloured Paletted -023F (9961C6) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0240 (9969B4) Type 4609 Paletted with 58 colours [W20 H20] 8-Bit coloured Paletted -0241 (996D17) Type C609 Paletted with 79 colours [W20 H21] 8-Bit coloured Paletted -0242 (9971D5) Type C609 Paletted with 68 colours [W20 H21] 8-Bit coloured Paletted -0243 (997666) Type 4609 Paletted with 27 colours [W20 H20] 8-Bit coloured Paletted -0244 (99785A) Type 4609 Paletted with 1E colours [W20 H20] 8-Bit coloured Paletted -0245 (997923) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0246 (997F21) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0247 (998518) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0248 (998B24) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0249 (999129) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -024A (999538) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -024B (999938) Type 4609 Paletted with A6 colours [W20 H20] 8-Bit coloured Paletted -024C (999D9A) Type 4609 Paletted with B7 colours [W20 H20] 8-Bit coloured Paletted -024D (99A2B6) Type 4609 Paletted with E6 colours [W20 H20] 8-Bit coloured Paletted -024E (99A793) Type 4609 Paletted with D9 colours [W20 H20] 8-Bit coloured Paletted -024F (99ACC4) Type 4609 Paletted with FA colours [W20 H20] 8-Bit coloured Paletted -0250 (99B170) Type 4609 Paletted with F4 colours [W20 H20] 8-Bit coloured Paletted -0251 (99B5DA) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0252 (99BB6D) Type 4609 Paletted with 54 colours [W20 H20] 8-Bit coloured Paletted -0253 (99BEE8) Type 4609 Paletted with A7 colours [W20 H20] 8-Bit coloured Paletted -0254 (99C3A2) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0255 (99C930) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -0256 (99CAE1) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0257 (99D042) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0258 (99D695) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0259 (99DE15) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -025A (99E466) Type C609 Paletted with 6D colours [W21 H21] 8-Bit coloured Paletted -025B (99E647) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -025C (99EBC1) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -025D (99F0E6) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -025E (99F69B) Type 4609 Paletted with 28 colours [W20 H20] 8-Bit coloured Paletted -025F (99F801) Type 4609 Paletted with 32 colours [W20 H20] 8-Bit coloured Paletted -0260 (99F946) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0261 (99FFE4) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0262 (9A081D) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0263 (9A0D99) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0264 (9A1573) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0265 (9A1831) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0266 (9A1A99) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0267 (9A1D34) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0268 (9A1FBA) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0269 (9A2228) Type 4609 Paletted with 82 colours [W20 H20] 8-Bit coloured Paletted -026A (9A2479) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -026B (9A2817) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -026C (9A292B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -026D (9A2B8E) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -026E (9A3126) Type 4609 Paletted with A8 colours [W20 H20] 8-Bit coloured Paletted -026F (9A358E) Type 4609 Paletted with 94 colours [W20 H20] 8-Bit coloured Paletted -0270 (9A3A08) Type 460A Paletted with 0C colours [W20 H20] 4-Bit coloured Paletted -0271 (9A3B2D) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -0272 (9A3CEB) Type 4609 Paletted with 1D colours [W20 H20] 8-Bit coloured Paletted -0273 (9A3DF6) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -0274 (9A3F3E) Type 4609 Paletted with 10 colours [W20 H20] 8-Bit coloured Paletted -0275 (9A407E) Type 4609 Paletted with 11 colours [W20 H20] 8-Bit coloured Paletted -0276 (9A41C6) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0277 (9A4778) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0278 (9A4B60) Type 4609 Paletted with 33 colours [W20 H20] 8-Bit coloured Paletted -0279 (9A4DCD) Greyscale TableOffsetter 6 [W4C H4C] 4-bit Greyscale Transparent -027A (9A518E) Greyscale TableOffsetter 6 [W4C H4C] 4-bit Greyscale Transparent -027B (9A555B) Type 400C Paletted with 02 colours [W18 H18] 4-Bit coloured Paletted Transparent -027C (9A55B0) Type 4609 Paletted with 2F colours [W20 H20] 8-Bit coloured Paletted -027D (9A5814) Type 4609 Paletted with 71 colours [W20 H20] 8-Bit coloured Paletted -027E (9A5B7A) Type 4609 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -027F (9A5D39) Type 400B Paletted with 6C colours [W20 H40] 8-Bit coloured Paletted Transparent -0280 (9A6471) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -0281 (9A679D) Greyscale TableOffsetter 8 [W80 H20] 4-bit Greyscale -0282 (9A6CF0) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0283 (9A707C) Type C009 Paletted with 21 colours [W20 H20] 8-Bit coloured Paletted -0284 (9A71A9) Type 4609 Paletted with 5E colours [W20 H20] 8-Bit coloured Paletted -0285 (9A747F) Type 460B Paletted with 34 colours [W10 H20] 8-Bit coloured Paletted Transparent -0286 (9A763C) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0287 (9A7ADF) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -0288 (9A7C78) Type 4609 Paletted with 47 colours [W20 H20] 8-Bit coloured Paletted -0289 (9A7F35) Type 4609 Paletted with 25 colours [W20 H20] 8-Bit coloured Paletted -028A (9A8199) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -028B (9A8397) Type 4609 Paletted with C3 colours [W20 H20] 8-Bit coloured Paletted -028C (9A8883) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -028D (9A8AEF) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -028E (9A8D3A) Greyscale TableOffsetter 5 [W36 H36] 8-bit Greyscale Transparent -028F (9A907F) Greyscale TableOffsetter 5 [W36 H36] 8-bit Greyscale Transparent -0290 (9A93F8) Type 4609 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -0291 (9A949C) Type 4609 Paletted with 1D colours [W20 H20] 8-Bit coloured Paletted -0292 (9A9547) Type 460B Paletted with 1A colours [W20 H01] 8-Bit coloured Paletted Transparent -0293 (9A959C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0294 (9A999D) Type 4609 Paletted with E9 colours [W20 H20] 8-Bit coloured Paletted -0295 (9A9CDF) Type 4609 Paletted with C6 colours [W20 H20] 8-Bit coloured Paletted -0296 (9AA1B8) Type 4609 Paletted with E9 colours [W20 H20] 8-Bit coloured Paletted -0297 (9AA66D) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -0298 (9AA731) Type 4609 Paletted with 16 colours [W20 H20] 8-Bit coloured Paletted -0299 (9AA813) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -029A (9AADFA) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -029B (9AB1F0) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -029C (9AB5D5) Type 4609 Paletted with 85 colours [W20 H20] 8-Bit coloured Paletted -029D (9AB992) Type 4609 Paletted with A1 colours [W20 H20] 8-Bit coloured Paletted -029E (9ABDCE) Type 4609 Paletted with 3F colours [W20 H20] 8-Bit coloured Paletted -029F (9AC117) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02A0 (9AC550) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02A1 (9AC8C9) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02A2 (9ACC2B) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -02A3 (9ACF96) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -02A4 (9AD2AE) Type 4609 Paletted with 4F colours [W20 H20] 8-Bit coloured Paletted -02A5 (9AD551) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -02A6 (9AD5D2) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -02A7 (9AD84C) Type C609 Paletted with 72 colours [W21 H21] 8-Bit coloured Paletted -02A8 (9ADD36) Type C609 Paletted with 9A colours [W21 H21] 8-Bit coloured Paletted -02A9 (9AE2D9) Type C609 Paletted with 97 colours [W21 H21] 8-Bit coloured Paletted -02AA (9AE859) Type C609 Paletted with 72 colours [W21 H21] 8-Bit coloured Paletted -02AB (9AED57) Type 460A Paletted with 08 colours [W20 H20] 4-Bit coloured Paletted -02AC (9AEE91) Type 4609 Paletted with 34 colours [W20 H20] 8-Bit coloured Paletted -02AD (9AF06F) Type C609 Paletted with 42 colours [W20 H21] 8-Bit coloured Paletted -02AE (9AF355) Type C609 Paletted with 3A colours [W20 H21] 8-Bit coloured Paletted -02AF (9AF5F7) Type C609 Paletted with 48 colours [W20 H21] 8-Bit coloured Paletted -02B0 (9AF90A) Type C609 Paletted with 50 colours [W20 H21] 8-Bit coloured Paletted -02B1 (9AFC49) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -02B2 (9AFE68) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -02B3 (9AFF7E) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -02B4 (9B0020) Type 4609 Paletted with 2F colours [W20 H20] 8-Bit coloured Paletted -02B5 (9B016D) Type 4609 Paletted with D6 colours [W20 H20] 8-Bit coloured Paletted -02B6 (9B05BA) Type 4609 Paletted with 56 colours [W20 H20] 8-Bit coloured Paletted -02B7 (9B080B) Type 4609 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -02B8 (9B0A07) Type 4609 Paletted with 16 colours [W20 H20] 8-Bit coloured Paletted -02B9 (9B0C18) Type 460A Paletted with 0F colours [W20 H20] 4-Bit coloured Paletted -02BA (9B0DDC) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -02BB (9B0F60) Type 4609 Paletted with 20 colours [W20 H20] 8-Bit coloured Paletted -02BC (9B117F) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -02BD (9B12D6) Type 470C Paletted with 0D colours [W40 H20] 4-Bit coloured Paletted Transparent -02BE (9B1612) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -02BF (9B169C) Type 460A Paletted with 0E colours [W20 H20] 4-Bit coloured Paletted -02C0 (9B18A9) Type 460A Paletted with 0E colours [W20 H20] 4-Bit coloured Paletted -02C1 (9B1AB1) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02C2 (9B1E25) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02C3 (9B20BB) Type 4609 Paletted with 10 colours [W20 H20] 8-Bit coloured Paletted -02C4 (9B22AD) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -02C5 (9B240C) Type 4609 Paletted with B5 colours [W20 H20] 8-Bit coloured Paletted -02C6 (9B28CA) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02C7 (9B2BDF) Type 4609 Paletted with C7 colours [W20 H20] 8-Bit coloured Paletted -02C8 (9B30B9) Type 4709 Paletted with 45 colours [W40 H10] 8-Bit coloured Paletted -02C9 (9B3306) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02CA (9B3912) Type 460A Paletted with 07 colours [W20 H20] 4-Bit coloured Paletted -02CB (9B39D2) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -02CC (9B3B40) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -02CD (9B3E92) Greyscale TableOffsetter 8 [W40 H20] 4-bit Greyscale -02CE (9B3F8F) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02CF (9B4182) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02D0 (9B43D3) Type 4609 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -02D1 (9B45EE) Type 460A Paletted with 04 colours [W20 H20] 4-Bit coloured Paletted -02D2 (9B469F) Type 4609 Paletted with 23 colours [W20 H20] 8-Bit coloured Paletted -02D3 (9B48C7) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -02D4 (9B4ADF) Type 460B Paletted with 61 colours [W20 H20] 8-Bit coloured Paletted Transparent -02D5 (9B4E32) Type 460B Paletted with 82 colours [W20 H20] 8-Bit coloured Paletted Transparent -02D6 (9B5258) Type 4609 Paletted with 1E colours [W20 H20] 8-Bit coloured Paletted -02D7 (9B541D) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -02D8 (9B57B6) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -02D9 (9B5BA7) Type 4609 Paletted with 47 colours [W20 H20] 8-Bit coloured Paletted -02DA (9B5D70) Type 4609 Paletted with 37 colours [W20 H20] 8-Bit coloured Paletted -02DB (9B5F08) Type 4609 Paletted with 46 colours [W20 H20] 8-Bit coloured Paletted -02DC (9B60CF) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02DD (9B6606) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02DE (9B6B21) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02DF (9B6FC4) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E0 (9B75B2) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E1 (9B7B8A) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E2 (9B810F) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E3 (9B8651) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E4 (9B8BD3) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E5 (9B901C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E6 (9B94B7) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E7 (9B9A24) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E8 (9B9FE2) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02E9 (9BA5BD) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02EA (9BA9C1) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02EB (9BAEBF) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02EC (9BB44B) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02ED (9BB9AE) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02EE (9BBF60) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02EF (9BC4DB) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02F0 (9BC966) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02F1 (9BCE14) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02F2 (9BD328) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02F3 (9BD8C4) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02F4 (9BDE2C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02F5 (9BE3E6) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -02F6 (9BE977) Type 4609 Paletted with 1D colours [W20 H20] 8-Bit coloured Paletted -02F7 (9BEB7F) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -02F8 (9BED7D) Type 4609 Paletted with AE colours [W20 H20] 8-Bit coloured Paletted -02F9 (9BF282) Type 4609 Paletted with 56 colours [W20 H20] 8-Bit coloured Paletted -02FA (9BF621) Type 4609 Paletted with 32 colours [W20 H20] 8-Bit coloured Paletted -02FB (9BF6D3) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -02FC (9BF77A) Type 4509 Paletted with 13 colours [W10 H10] 8-Bit coloured Paletted -02FD (9BF7E1) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -02FE (9BFD40) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -02FF (9BFF3E) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0300 (9C025F) Type 4609 Paletted with 14 colours [W20 H20] 8-Bit coloured Paletted -0301 (9C0390) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -0302 (9C04E3) Type 460B Paletted with 99 colours [W20 H20] 8-Bit coloured Paletted Transparent -0303 (9C0965) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0304 (9C0F71) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -0305 (9C11CA) Type 4609 Paletted with 78 colours [W20 H20] 8-Bit coloured Paletted -0306 (9C154D) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -0307 (9C15C5) Type 4609 Paletted with 9A colours [W20 H20] 8-Bit coloured Paletted -0308 (9C1A91) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0309 (9C1FD4) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -030A (9C2590) Type 4609 Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted -030B (9C2901) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -030C (9C2EC3) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -030D (9C33A5) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -030E (9C39EA) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -030F (9C3F25) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0310 (9C436D) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -0311 (9C4565) Type 4609 Paletted with 30 colours [W20 H20] 8-Bit coloured Paletted -0312 (9C468D) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -0313 (9C47F9) Type 4609 Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted -0314 (9C4BC0) Type 4609 Paletted with 60 colours [W20 H20] 8-Bit coloured Paletted -0315 (9C4DFD) Type C609 Paletted with 8F colours [W40 H11] 8-Bit coloured Paletted -0316 (9C5429) Type C609 Paletted with 87 colours [W40 H11] 8-Bit coloured Paletted -0317 (9C5A2B) Type C609 Paletted with 92 colours [W40 H11] 8-Bit coloured Paletted -0318 (9C600A) Type C609 Paletted with A0 colours [W40 H11] 8-Bit coloured Paletted -0319 (9C6672) Type C609 Paletted with A1 colours [W40 H11] 8-Bit coloured Paletted -031A (9C6CEA) Type C609 Paletted with 87 colours [W40 H11] 8-Bit coloured Paletted -031B (9C72D7) Type C609 Paletted with A1 colours [W40 H11] 8-Bit coloured Paletted -031C (9C7917) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -031D (9C7B87) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -031E (9C7DD3) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -031F (9C8037) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0320 (9C8118) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0321 (9C81B0) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0322 (9C8373) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0323 (9C8612) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0324 (9C87B1) Type 4609 Paletted with 47 colours [W20 H20] 8-Bit coloured Paletted -0325 (9C8981) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0326 (9C8C90) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0327 (9C906B) Type 4609 Paletted with 42 colours [W20 H20] 8-Bit coloured Paletted -0328 (9C91B0) Type 4609 Paletted with 77 colours [W20 H20] 8-Bit coloured Paletted -0329 (9C9449) Type 460B Paletted with C3 colours [W20 H20] 8-Bit coloured Paletted Transparent -032A (9C9869) Type 4609 Paletted with 7A colours [W20 H20] 8-Bit coloured Paletted -032B (9C9AC1) Type 4609 Paletted with 47 colours [W20 H20] 8-Bit coloured Paletted -032C (9C9D5F) Type 4609 Paletted with 88 colours [W20 H20] 8-Bit coloured Paletted -032D (9CA094) Type 4609 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -032E (9CA25D) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -032F (9CA6D6) Type 4609 Paletted with 20 colours [W20 H20] 8-Bit coloured Paletted -0330 (9CA8B5) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0331 (9CAB8E) Type 4609 Paletted with 8A colours [W20 H20] 8-Bit coloured Paletted -0332 (9CAFC4) Type 4609 Paletted with A0 colours [W20 H20] 8-Bit coloured Paletted -0333 (9CB227) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0334 (9CB82A) Type 460B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0335 (9CBD99) Type 450C Paletted with 03 colours [W10 H10] 4-Bit coloured Paletted Transparent -0336 (9CBDDD) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0337 (9CC02E) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0338 (9CC1B2) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -0339 (9CC45D) Type 4609 Paletted with 75 colours [W20 H20] 8-Bit coloured Paletted -033A (9CC7D3) Type 4609 Paletted with 9D colours [W20 H20] 8-Bit coloured Paletted -033B (9CCC28) Type 4609 Paletted with C5 colours [W20 H20] 8-Bit coloured Paletted -033C (9CD15E) Type 4609 Paletted with A8 colours [W20 H20] 8-Bit coloured Paletted -033D (9CD646) Type 4609 Paletted with D8 colours [W20 H20] 8-Bit coloured Paletted -033E (9CDB9F) Type 4609 Paletted with D6 colours [W20 H20] 8-Bit coloured Paletted -033F (9CE118) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0340 (9CE7B6) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0341 (9CEF10) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0342 (9CF5BB) Type 4709 Paletted with A2 colours [W40 H10] 8-Bit coloured Paletted -0343 (9CF978) Greyscale TableOffsetter 5 [W4C H28] 8-bit Greyscale Transparent -0344 (9CFC8E) Greyscale TableOffsetter 8 [W60 H30] 4-bit Greyscale -0345 (9D0162) Type 4609 Paletted with 69 colours [W20 H20] 8-Bit coloured Paletted -0346 (9D03B0) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0347 (9D0B25) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0348 (9D12CF) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0349 (9D195A) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -034A (9D1FE7) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -034B (9D2561) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -034C (9D2AD2) Type 4609 Paletted with B3 colours [W20 H20] 8-Bit coloured Paletted -034D (9D2DCC) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -034E (9D323A) Type 4609 Paletted with A6 colours [W20 H20] 8-Bit coloured Paletted -034F (9D35C8) Type 4609 Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted -0350 (9D3A6B) Type 460A Paletted with 06 colours [W20 H20] 4-Bit coloured Paletted -0351 (9D3B22) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0352 (9D411E) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0353 (9D442D) Type C609 Paletted with 34 colours [W21 H21] 8-Bit coloured Paletted -0354 (9D47F2) Type C509 Paletted with 23 colours [W20 H21] 8-Bit coloured Paletted -0355 (9D49BE) Type C509 Paletted with 2A colours [W21 H20] 8-Bit coloured Paletted -0356 (9D4BB7) Type C509 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -0357 (9D4D3C) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0358 (9D501A) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0359 (9D52A9) Type 4609 Paletted with AF colours [W20 H20] 8-Bit coloured Paletted -035A (9D56FB) Type 4609 Paletted with 3E colours [W20 H20] 8-Bit coloured Paletted -035B (9D5A16) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -035C (9D6112) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -035D (9D681C) Type 4609 Paletted with 33 colours [W20 H20] 8-Bit coloured Paletted -035E (9D6A2D) Type 4609 Paletted with 72 colours [W20 H20] 8-Bit coloured Paletted -035F (9D6D05) Type 4609 Paletted with 89 colours [W20 H20] 8-Bit coloured Paletted -0360 (9D6EC4) Type 4609 Paletted with 44 colours [W20 H20] 8-Bit coloured Paletted -0361 (9D70F1) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -0362 (9D7284) Type 4609 Paletted with A5 colours [W20 H20] 8-Bit coloured Paletted -0363 (9D776C) Type 4609 Paletted with 23 colours [W20 H20] 8-Bit coloured Paletted -0364 (9D7892) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -0365 (9D7991) Type 4609 Paletted with 98 colours [W20 H20] 8-Bit coloured Paletted -0366 (9D7CAD) Type 450B Paletted with 6C colours [W10 H10] 8-Bit coloured Paletted Transparent -0367 (9D7E28) Type 450B Paletted with 5D colours [W10 H10] 8-Bit coloured Paletted Transparent -0368 (9D7F88) Type 450B Paletted with 12 colours [W10 H10] 8-Bit coloured Paletted Transparent -0369 (9D7FCB) Type 450B Paletted with 5B colours [W10 H10] 8-Bit coloured Paletted Transparent -036A (9D815B) Type 450C Paletted with 0C colours [W04 H10] 4-Bit coloured Paletted Transparent -036B (9D818A) Type 450B Paletted with 51 colours [W10 H10] 8-Bit coloured Paletted Transparent -036C (9D82D8) Type 460B Paletted with 32 colours [W10 H20] 8-Bit coloured Paletted Transparent -036D (9D8412) Type 450C Paletted with 0E colours [W10 H01] 4-Bit coloured Paletted Transparent -036E (9D8441) Type 450B Paletted with 10 colours [W10 H01] 8-Bit coloured Paletted Transparent -036F (9D847A) Type 450B Paletted with 1B colours [W01 H10] 8-Bit coloured Paletted Transparent -0370 (9D84CB) Type 450A Paletted with 0B colours [W10 H01] 4-Bit coloured Paletted -0371 (9D84F4) Type 450B Paletted with 18 colours [W01 H10] 8-Bit coloured Paletted Transparent -0372 (9D853F) Type 450C Paletted with 0C colours [W10 H01] 4-Bit coloured Paletted Transparent -0373 (9D856A) Type 450B Paletted with 3F colours [W10 H10] 8-Bit coloured Paletted Transparent -0374 (9D8647) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0375 (9D8D47) Type 460B Paletted with AD colours [W20 H10] 8-Bit coloured Paletted Transparent -0376 (9D8F8F) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0377 (9D90DE) Type 460B Paletted with 63 colours [W20 H10] 8-Bit coloured Paletted Transparent -0378 (9D924A) Type 4609 Paletted with 74 colours [W20 H20] 8-Bit coloured Paletted -0379 (9D9642) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -037A (9D98F2) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -037B (9D9AB1) Type C609 Paletted with 57 colours [W21 H20] 8-Bit coloured Paletted -037C (9D9E61) Type C609 Paletted with 58 colours [W21 H20] 8-Bit coloured Paletted -037D (9DA24A) Type C609 Paletted with 68 colours [W20 H21] 8-Bit coloured Paletted -037E (9DA61A) Type C609 Paletted with 69 colours [W20 H21] 8-Bit coloured Paletted -037F (9DA98C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0380 (9DAF5E) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0381 (9DB66F) Type 4609 Paletted with DB colours [W20 H30] 8-Bit coloured Paletted -0382 (9DBCE1) Type 4609 Paletted with D1 colours [W20 H20] 8-Bit coloured Paletted -0383 (9DC1AB) Type 4609 Paletted with 90 colours [W20 H20] 8-Bit coloured Paletted -0384 (9DC595) Type 4709 Paletted with 34 colours [W10 H40] 8-Bit coloured Paletted -0385 (9DC7BC) Type 4609 Paletted with 78 colours [W20 H20] 8-Bit coloured Paletted -0386 (9DCB7A) Type 4609 Paletted with 51 colours [W20 H20] 8-Bit coloured Paletted -0387 (9DCECE) Type 4609 Paletted with 52 colours [W20 H20] 8-Bit coloured Paletted -0388 (9DD224) Type 4609 Paletted with 8F colours [W20 H20] 8-Bit coloured Paletted -0389 (9DD5D9) Type 4609 Paletted with 99 colours [W20 H20] 8-Bit coloured Paletted -038A (9DD9F6) Type 4609 Paletted with 3D colours [W20 H20] 8-Bit coloured Paletted -038B (9DDCAF) Type 4609 Paletted with 14 colours [W20 H20] 8-Bit coloured Paletted -038C (9DDE5C) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -038D (9DE36F) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -038E (9DE833) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -038F (9DECA2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0390 (9DF17F) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0391 (9DF7DA) Type 4609 Paletted with 6C colours [W20 H20] 8-Bit coloured Paletted -0392 (9DFB71) Type 4609 Paletted with 5B colours [W20 H20] 8-Bit coloured Paletted -0393 (9DFE60) Type 4609 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -0394 (9E0176) Type 4609 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -0395 (9E048C) Greyscale TableOffsetter 6 [W20 H40] 4-bit Greyscale Transparent -0396 (9E0524) Greyscale TableOffsetter 8 [W10 H80] 4-bit Greyscale -0397 (9E06CC) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0398 (9E0942) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0399 (9E10DB) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -039A (9E1377) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -039B (9E1707) Type 4609 Paletted with 6E colours [W20 H20] 8-Bit coloured Paletted -039C (9E1AC1) Greyscale TableOffsetter 7 [W4C H28] 8-bit Greyscale -039D (9E2367) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -039E (9E26A5) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -039F (9E2CB1) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03A0 (9E3301) Type 4609 Paletted with 3B colours [W20 H20] 8-Bit coloured Paletted -03A1 (9E3538) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -03A2 (9E3894) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -03A3 (9E3BA7) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03A4 (9E3D85) Type 4609 Paletted with 11 colours [W20 H20] 8-Bit coloured Paletted -03A5 (9E3F42) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -03A6 (9E41AB) Type 460B Paletted with 65 colours [W20 H20] 8-Bit coloured Paletted Transparent -03A7 (9E42FB) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -03A8 (9E4731) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -03A9 (9E4897) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -03AA (9E4A24) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -03AB (9E4C25) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03AC (9E5045) Type 4009 Paletted with 57 colours [W20 H20] 8-Bit coloured Paletted -03AD (9E531B) Type 4009 Paletted with 5B colours [W20 H20] 8-Bit coloured Paletted -03AE (9E55F5) Type 4009 Paletted with 73 colours [W20 H20] 8-Bit coloured Paletted -03AF (9E5924) Type 4609 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -03B0 (9E5BDD) Type 4609 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -03B1 (9E5E7A) Type 4009 Paletted with 20 colours [W20 H20] 8-Bit coloured Paletted -03B2 (9E6074) Type 4609 Paletted with 4B colours [W20 H20] 8-Bit coloured Paletted -03B3 (9E62F3) Type 4609 Paletted with 3C colours [W20 H20] 8-Bit coloured Paletted -03B4 (9E63E4) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -03B5 (9E69CB) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -03B6 (9E703C) Type 4609 Paletted with C2 colours [W20 H20] 8-Bit coloured Paletted -03B7 (9E7567) Type C009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -03B8 (9E7DDF) Type C009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -03B9 (9E8578) Type C009 Paletted with D4 colours [W20 H40] 8-Bit coloured Paletted -03BA (9E8B5C) Type C009 Paletted with B7 colours [W20 H40] 8-Bit coloured Paletted -03BB (9E9164) Type C009 Paletted with 88 colours [W20 H40] 8-Bit coloured Paletted -03BC (9E96CC) Type C009 Paletted with 98 colours [W20 H40] 8-Bit coloured Paletted -03BD (9E9C8D) Type C009 Paletted with CE colours [W20 H40] 8-Bit coloured Paletted -03BE (9EA272) Type C009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -03BF (9EA9E6) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -03C0 (9EAC6D) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -03C1 (9EAEF4) Type C709 Paletted with F8 colours [W80 H09] 8-Bit coloured Paletted -03C2 (9EB654) Type C709 Paletted with FF colours [W80 H09] 8-Bit coloured Paletted -03C3 (9EBE9E) Type C709 Paletted with FF colours [W80 H09] 8-Bit coloured Paletted -03C4 (9EC70B) Type C709 Paletted with FF colours [W80 H09] 8-Bit coloured Paletted -03C5 (9ECF74) Type C709 Paletted with FF colours [W80 H09] 8-Bit coloured Paletted -03C6 (9ED7B2) Type C709 Paletted with F7 colours [W80 H09] 8-Bit coloured Paletted -03C7 (9EDFE3) Type C709 Paletted with FA colours [W80 H09] 8-Bit coloured Paletted -03C8 (9EE831) Type C709 Paletted with F7 colours [W80 H09] 8-Bit coloured Paletted -03C9 (9EF051) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03CA (9EF2D6) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03CB (9EF5C7) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03CC (9EFA92) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03CD (9F0311) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03CE (9F0BBE) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03CF (9F143D) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03D0 (9F1CBC) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03D1 (9F255E) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03D2 (9F2DDD) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03D3 (9F36F7) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -03D4 (9F3950) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03D5 (9F3FC6) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03D6 (9F463C) Type 460A Paletted with 08 colours [W20 H20] 4-Bit coloured Paletted -03D7 (9F4686) Type 4609 Paletted with 98 colours [W20 H20] 8-Bit coloured Paletted -03D8 (9F49F6) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -03D9 (9F4CFD) Type 4609 Paletted with 81 colours [W20 H20] 8-Bit coloured Paletted -03DA (9F500E) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -03DB (9F5528) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03DC (9F56C2) Greyscale TableOffsetter 0 [W10 H40] 32-bit RAW RGBA Transparent? -03DD (9F56D3) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03DE (9F57FC) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03DF (9F593E) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03E0 (9F5ACF) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03E1 (9F5C4F) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03E2 (9F5D8B) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03E3 (9F5EED) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03E4 (9F6013) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -03E5 (9F6188) Type 4009 Paletted with 41 colours [W40 H20] 8-Bit coloured Paletted -03E6 (9F64E6) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -03E7 (9F6718) Type 4709 Paletted with F8 colours [W10 H40] 8-Bit coloured Paletted -03E8 (9F6C22) Type 4709 Paletted with CE colours [W10 H40] 8-Bit coloured Paletted -03E9 (9F702E) Type 4709 Paletted with BA colours [W10 H40] 8-Bit coloured Paletted -03EA (9F73F7) Type 4709 Paletted with D2 colours [W10 H40] 8-Bit coloured Paletted -03EB (9F78C7) Type 4709 Paletted with BE colours [W10 H40] 8-Bit coloured Paletted -03EC (9F7DB4) Type 4609 Paletted with 55 colours [W20 H20] 8-Bit coloured Paletted -03ED (9F801B) Type 4609 Paletted with 47 colours [W20 H20] 8-Bit coloured Paletted -03EE (9F8355) Type 4609 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -03EF (9F8445) Type 4609 Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted -03F0 (9F88D6) Type 4609 Paletted with 44 colours [W20 H20] 8-Bit coloured Paletted -03F1 (9F8B63) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -03F2 (9F8D15) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03F3 (9F9327) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03F4 (9F9A45) Type 460A Paletted with 0B colours [W20 H20] 4-Bit coloured Paletted -03F5 (9F9BDE) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -03F6 (9FA28B) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -03F7 (9FA47E) Greyscale TableOffsetter 5 [W20 H20] 8-bit Greyscale Transparent -03F8 (9FA807) Type 4609 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -03F9 (9FAB6E) Type 4609 Paletted with 5A colours [W20 H20] 8-Bit coloured Paletted -03FA (9FAE6D) Type 4609 Paletted with 70 colours [W20 H20] 8-Bit coloured Paletted -03FB (9FB1E6) Type 4609 Paletted with 8C colours [W20 H20] 8-Bit coloured Paletted -03FC (9FB674) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -03FD (9FBB93) Type 4609 Paletted with D6 colours [W20 H20] 8-Bit coloured Paletted -03FE (9FC0D8) Type 4609 Paletted with 4B colours [W20 H20] 8-Bit coloured Paletted -03FF (9FC3E2) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -0400 (9FC795) Type 4609 Paletted with 8C colours [W20 H20] 8-Bit coloured Paletted -0401 (9FCC0B) Type 4609 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -0402 (9FCE35) Type 4609 Paletted with 2D colours [W20 H20] 8-Bit coloured Paletted -0403 (9FCECB) Type 4609 Paletted with 9F colours [W20 H20] 8-Bit coloured Paletted -0404 (9FD1FC) Type 460B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0405 (9FD64B) Type 4609 Paletted with 9F colours [W20 H20] 8-Bit coloured Paletted -0406 (9FD97C) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0407 (9FDCBF) Type 4609 Paletted with 38 colours [W20 H20] 8-Bit coloured Paletted -0408 (9FDD6C) Type C609 Paletted with 97 colours [W21 H21] 8-Bit coloured Paletted -0409 (9FE33E) Type C609 Paletted with 64 colours [W21 H21] 8-Bit coloured Paletted -040A (9FE7C6) Type C609 Paletted with 5E colours [W21 H21] 8-Bit coloured Paletted -040B (9FEC3D) Type C609 Paletted with 60 colours [W21 H21] 8-Bit coloured Paletted -040C (9FF110) Type C609 Paletted with A8 colours [W21 H21] 8-Bit coloured Paletted -040D (9FF72A) Type C609 Paletted with 60 colours [W21 H21] 8-Bit coloured Paletted -040E (9FFBB9) Type C609 Paletted with 6F colours [W21 H21] 8-Bit coloured Paletted -040F (A000B4) Type C609 Paletted with 8C colours [W21 H21] 8-Bit coloured Paletted -0410 (A005EF) Greyscale TableOffsetter 7 [W80 H10] 8-bit Greyscale -0411 (A00C8F) Type 4609 Paletted with 3C colours [W20 H20] 8-Bit coloured Paletted -0412 (A00EA1) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0413 (A01188) Type 4609 Paletted with 3F colours [W20 H20] 8-Bit coloured Paletted -0414 (A0142D) Type 4609 Paletted with 45 colours [W20 H20] 8-Bit coloured Paletted -0415 (A01671) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0416 (A017A1) Type 4609 Paletted with 27 colours [W10 H20] 8-Bit coloured Paletted -0417 (A018FD) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0418 (A01C59) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0419 (A022CF) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -041A (A0259C) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -041B (A02D0A) Type 4609 Paletted with FE colours [W30 H20] 8-Bit coloured Paletted -041C (A0342D) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -041D (A03BDF) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -041E (A041F2) Type 460A Paletted with 0C colours [W30 H20] 4-Bit coloured Paletted -041F (A0441A) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0420 (A049EC) Type 4609 Paletted with 13 colours [W20 H30] 8-Bit coloured Paletted -0421 (A04BF3) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0422 (A05191) Type 460A Paletted with 0B colours [W20 H30] 4-Bit coloured Paletted -0423 (A05329) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0424 (A05875) Type 4609 Paletted with F3 colours [W20 H20] 8-Bit coloured Paletted -0425 (A05D83) Type 4609 Paletted with 67 colours [W20 H20] 8-Bit coloured Paletted -0426 (A05F66) Type 4609 Paletted with BE colours [W20 H20] 8-Bit coloured Paletted -0427 (A0648A) Type 4609 Paletted with 59 colours [W20 H20] 8-Bit coloured Paletted -0428 (A06860) Type 4609 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -0429 (A06AF2) Type 460A Paletted with 07 colours [W20 H20] 4-Bit coloured Paletted -042A (A06C5F) Type 4609 Paletted with 5C colours [W20 H20] 8-Bit coloured Paletted -042B (A07024) Type 4009 Paletted with 3C colours [W20 H40] 8-Bit coloured Paletted -042C (A075DF) Greyscale TableOffsetter 7 [W40 H30] 8-bit Greyscale -042D (A07B19) Greyscale TableOffsetter 7 [W30 H40] 8-bit Greyscale -042E (A080BC) Greyscale TableOffsetter 7 [W30 H40] 8-bit Greyscale -042F (A087D6) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0430 (A08BE0) Greyscale TableOffsetter 7 [W30 H40] 8-bit Greyscale -0431 (A092C1) Greyscale TableOffsetter 7 [W30 H40] 8-bit Greyscale -0432 (A099E4) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0433 (A09E62) Type 4609 Paletted with 3C colours [W20 H20] 8-Bit coloured Paletted -0434 (A0A0E2) Type 4609 Paletted with 4D colours [W20 H20] 8-Bit coloured Paletted -0435 (A0A465) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0436 (A0A749) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0437 (A0A889) Type 4609 Paletted with 2D colours [W20 H20] 8-Bit coloured Paletted -0438 (A0A96F) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0439 (A0AF59) Type 4709 Paletted with D7 colours [W40 H10] 8-Bit coloured Paletted -043A (A0B421) Type 4709 Paletted with E2 colours [W40 H10] 8-Bit coloured Paletted -043B (A0B930) Type 460A Paletted with 03 colours [W20 H20] 4-Bit coloured Paletted -043C (A0BA14) Type 460A Paletted with 0D colours [W20 H20] 4-Bit coloured Paletted -043D (A0BA5C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -043E (A0C008) Type 4609 Paletted with 7B colours [W20 H20] 8-Bit coloured Paletted -043F (A0C223) Type 460B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0440 (A0C582) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0441 (A0C788) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0442 (A0C8F3) Type 4609 Paletted with E4 colours [W20 H20] 8-Bit coloured Paletted -0443 (A0CD5E) Type 4609 Paletted with C3 colours [W20 H20] 8-Bit coloured Paletted -0444 (A0D29D) Type 4609 Paletted with 83 colours [W20 H20] 8-Bit coloured Paletted -0445 (A0D687) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -0446 (A0DA72) Type 4609 Paletted with AE colours [W20 H20] 8-Bit coloured Paletted -0447 (A0DF8D) Type 4609 Paletted with 91 colours [W20 H20] 8-Bit coloured Paletted -0448 (A0E417) Type 4609 Paletted with 9D colours [W20 H20] 8-Bit coloured Paletted -0449 (A0E8DF) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -044A (A0ED35) Type 4609 Paletted with 5C colours [W20 H20] 8-Bit coloured Paletted -044B (A0F0BB) Type 4609 Paletted with BB colours [W20 H20] 8-Bit coloured Paletted -044C (A0F5AB) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -044D (A0FB01) Type 4609 Paletted with F6 colours [W20 H20] 8-Bit coloured Paletted -044E (A10034) Type 4609 Paletted with CC colours [W20 H20] 8-Bit coloured Paletted -044F (A1041E) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0450 (A10906) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0451 (A10E54) Type 4609 Paletted with E2 colours [W20 H20] 8-Bit coloured Paletted -0452 (A1136C) Type 4609 Paletted with E7 colours [W20 H20] 8-Bit coloured Paletted -0453 (A1180B) Type 4609 Paletted with FD colours [W20 H20] 8-Bit coloured Paletted -0454 (A11D55) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0455 (A1228C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0456 (A127C1) Type 4609 Paletted with D2 colours [W20 H20] 8-Bit coloured Paletted -0457 (A12BA7) Type 4609 Paletted with F0 colours [W20 H20] 8-Bit coloured Paletted -0458 (A13057) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0459 (A13584) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -045A (A13AB9) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -045B (A13F25) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -045C (A143FF) Type 4609 Paletted with 7C colours [W20 H20] 8-Bit coloured Paletted -045D (A14804) Type 4609 Paletted with BC colours [W20 H20] 8-Bit coloured Paletted -045E (A14D05) Greyscale TableOffsetter 5 [W80 H10] 8-bit Greyscale Transparent -045F (A1528A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0460 (A15544) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0461 (A157E4) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0462 (A15B00) Type 470C Paletted with 09 colours [W40 H20] 4-Bit coloured Paletted Transparent -0463 (A15C9C) Type 470C Paletted with 03 colours [W40 H20] 4-Bit coloured Paletted Transparent -0464 (A15D74) Greyscale TableOffsetter 7 [W40 H40] 8-bit Greyscale -0465 (A1649C) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0466 (A16949) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0467 (A16C6E) Type 4609 Paletted with BB colours [W20 H20] 8-Bit coloured Paletted -0468 (A1715A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0469 (A1795B) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -046A (A1813E) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -046B (A18795) Type 4609 Paletted with CA colours [W20 H20] 8-Bit coloured Paletted -046C (A18BC7) Type 4009 Paletted with FF colours [W40 H20] 8-Bit coloured Paletted -046D (A19571) Type 4609 Paletted with 52 colours [W20 H20] 8-Bit coloured Paletted -046E (A198F0) Type 4609 Paletted with A1 colours [W20 H20] 8-Bit coloured Paletted -046F (A19DCE) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0470 (A1A379) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0471 (A1A985) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -0472 (A1AC1F) Type 4609 Paletted with 14 colours [W20 H20] 8-Bit coloured Paletted -0473 (A1AD5D) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -0474 (A1AF46) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0475 (A1B301) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0476 (A1B73F) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0477 (A1BB64) Type 4609 Paletted with 38 colours [W20 H20] 8-Bit coloured Paletted -0478 (A1BE14) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0479 (A1BEE9) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -047A (A1C038) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -047B (A1C161) Greyscale TableOffsetter 5 [W10 H80] 8-bit Greyscale Transparent -047C (A1C4B1) Greyscale TableOffsetter 5 [W10 H80] 8-bit Greyscale Transparent -047D (A1C7ED) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -047E (A1CB41) Type 4609 Paletted with 2A colours [W20 H20] 8-Bit coloured Paletted -047F (A1CCD2) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0480 (A1D19C) Type 4609 Paletted with 79 colours [W20 H20] 8-Bit coloured Paletted -0481 (A1D4BF) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0482 (A1D846) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0483 (A1DFE2) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0484 (A1E6E8) Type 4609 Paletted with 9C colours [W20 H20] 8-Bit coloured Paletted -0485 (A1E9B8) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0486 (A1ECB2) Type 4609 Paletted with 9D colours [W20 H20] 8-Bit coloured Paletted -0487 (A1F14A) Type 4609 Paletted with 9F colours [W20 H20] 8-Bit coloured Paletted -0488 (A1F5E9) Type 4609 Paletted with 3C colours [W20 H20] 8-Bit coloured Paletted -0489 (A1F8F0) Type 4609 Paletted with CB colours [W20 H20] 8-Bit coloured Paletted -048A (A1FE39) Type 4609 Paletted with B1 colours [W20 H20] 8-Bit coloured Paletted -048B (A2031E) Type 4609 Paletted with 85 colours [W20 H20] 8-Bit coloured Paletted -048C (A2070C) Type 4609 Paletted with 7D colours [W20 H20] 8-Bit coloured Paletted -048D (A20B13) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -048E (A210F6) Type 4609 Paletted with D5 colours [W20 H20] 8-Bit coloured Paletted -048F (A21637) Type 4609 Paletted with D0 colours [W20 H20] 8-Bit coloured Paletted -0490 (A21B6A) Type 4609 Paletted with 80 colours [W20 H20] 8-Bit coloured Paletted -0491 (A21FA3) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0492 (A22593) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0493 (A22B44) Type 4609 Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted -0494 (A22EB8) Type 450C Paletted with 07 colours [W10 H10] 4-Bit coloured Paletted Transparent -0495 (A22EDD) Type 4609 Paletted with 40 colours [W20 H20] 8-Bit coloured Paletted -0496 (A23181) Type 4609 Paletted with 27 colours [W20 H20] 8-Bit coloured Paletted -0497 (A233C1) Type 4609 Paletted with 26 colours [W20 H20] 8-Bit coloured Paletted -0498 (A235D0) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0499 (A23939) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -049A (A23B60) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -049B (A23C81) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -049C (A23EEA) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -049D (A240C3) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -049E (A2430D) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -049F (A24528) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -04A0 (A2499E) Type 4609 Paletted with FF colours [W2C H22] 8-Bit coloured Paletted -04A1 (A2504F) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04A2 (A255B5) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04A3 (A25B5D) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04A4 (A2609C) Type 4509 Paletted with 14 colours [W10 H10] 8-Bit coloured Paletted -04A5 (A260FA) Type C609 Paletted with 46 colours [W21 H21] 8-Bit coloured Paletted -04A6 (A263E4) Type C609 Paletted with 72 colours [W21 H21] 8-Bit coloured Paletted -04A7 (A267A2) Type 4709 Paletted with 1F colours [W10 H40] 8-Bit coloured Paletted -04A8 (A268F7) Type 400A Paletted with 0B colours [W20 H20] 4-Bit coloured Paletted -04A9 (A269BD) Type 4609 Paletted with A8 colours [W20 H20] 8-Bit coloured Paletted -04AA (A26CFF) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -04AB (A270D5) Type 4609 Paletted with 74 colours [W20 H20] 8-Bit coloured Paletted -04AC (A273FE) Greyscale TableOffsetter 7 [W36 H36] 8-bit Greyscale -04AD (A27BCC) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -04AE (A281A0) Greyscale TableOffsetter 1 [W40 H11] 16-bit ARGB (1555) Transparent? -04AF (A287C1) Greyscale TableOffsetter 1 [W40 H11] 16-bit ARGB (1555) Transparent? -04B0 (A28FB4) Greyscale TableOffsetter 1 [W40 H11] 16-bit ARGB (1555) Transparent? -04B1 (A29722) Greyscale TableOffsetter 1 [W40 H11] 16-bit ARGB (1555) Transparent? -04B2 (A29ECE) Type 4609 Paletted with 37 colours [W20 H20] 8-Bit coloured Paletted -04B3 (A2A0B1) Type 4609 Paletted with 29 colours [W20 H20] 8-Bit coloured Paletted -04B4 (A2A33D) Type 4609 Paletted with 3A colours [W20 H20] 8-Bit coloured Paletted -04B5 (A2A60F) Type 4709 Paletted with B2 colours [W10 H40] 8-Bit coloured Paletted -04B6 (A2A9C7) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04B7 (A2AF0B) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04B8 (A2B3D5) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04B9 (A2B8FB) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04BA (A2BE70) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04BB (A2C32B) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04BC (A2C8A0) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04BD (A2CE72) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04BE (A2D411) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -04BF (A2D54E) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -04C0 (A2DC32) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -04C1 (A2E2AF) Type 4609 Paletted with 71 colours [W20 H20] 8-Bit coloured Paletted -04C2 (A2E598) Type 460B Paletted with BC colours [W20 H20] 8-Bit coloured Paletted Transparent -04C3 (A2E90B) Type 4609 Paletted with 27 colours [W20 H20] 8-Bit coloured Paletted -04C4 (A2EA6D) Type 4609 Paletted with 16 colours [W20 H20] 8-Bit coloured Paletted -04C5 (A2EB7E) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04C6 (A2EC41) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -04C7 (A2EE5F) Type 4609 Paletted with 80 colours [W20 H20] 8-Bit coloured Paletted -04C8 (A2F299) Type 4609 Paletted with 92 colours [W30 H20] 8-Bit coloured Paletted -04C9 (A2F7E6) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -04CA (A2FA73) Type 4609 Paletted with A6 colours [W20 H20] 8-Bit coloured Paletted -04CB (A2FE36) Type 4609 Paletted with A3 colours [W20 H20] 8-Bit coloured Paletted -04CC (A301F7) Type 4609 Paletted with 9D colours [W20 H20] 8-Bit coloured Paletted -04CD (A305A3) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -04CE (A30B41) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04CF (A30E8A) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D0 (A31262) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D1 (A316B5) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D2 (A31AD4) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -04D3 (A32183) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D4 (A32520) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D5 (A32820) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D6 (A32C02) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D7 (A32F8D) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D8 (A332B7) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04D9 (A336C5) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04DA (A339F8) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -04DB (A33CBD) Type 4609 Paletted with 52 colours [W20 H20] 8-Bit coloured Paletted -04DC (A33F22) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -04DD (A3428E) Greyscale TableOffsetter 5 [W41 H21] 8-bit Greyscale Transparent -04DE (A347CC) Greyscale TableOffsetter 5 [W41 H21] 8-bit Greyscale Transparent -04DF (A34C7C) Greyscale TableOffsetter 6 [W40 H20] 4-bit Greyscale Transparent -04E0 (A34E14) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -04E1 (A352FD) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -04E2 (A35599) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -04E3 (A3587C) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -04E4 (A35B55) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -04E5 (A35DCB) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -04E6 (A360AE) Type 460B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -04E7 (A36459) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -04E8 (A366A2) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -04E9 (A3677C) Type 4609 Paletted with 72 colours [W20 H20] 8-Bit coloured Paletted -04EA (A36AF3) Type 4609 Paletted with DE colours [W20 H20] 8-Bit coloured Paletted -04EB (A3703A) Type 4609 Paletted with A8 colours [W20 H20] 8-Bit coloured Paletted -04EC (A37421) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -04ED (A37724) Type 4609 Paletted with 3A colours [W20 H20] 8-Bit coloured Paletted -04EE (A37916) Type 460A Paletted with 0C colours [W20 H20] 4-Bit coloured Paletted -04EF (A37A3E) Type 4609 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -04F0 (A37BF0) Type 460A Paletted with 02 colours [W20 H20] 4-Bit coloured Paletted -04F1 (A37CF4) Type 460B Paletted with 8D colours [W20 H20] 8-Bit coloured Paletted Transparent -04F2 (A38198) Type 460B Paletted with 81 colours [W20 H20] 8-Bit coloured Paletted Transparent -04F3 (A384D6) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -04F4 (A38A22) Type 4609 Paletted with 7F colours [W20 H20] 8-Bit coloured Paletted -04F5 (A38E83) Type 4609 Paletted with 72 colours [W20 H20] 8-Bit coloured Paletted -04F6 (A3917C) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -04F7 (A396C9) Type 4609 Paletted with 47 colours [W20 H20] 8-Bit coloured Paletted -04F8 (A398AA) Type 4609 Paletted with 41 colours [W20 H20] 8-Bit coloured Paletted -04F9 (A39AD1) Type 4609 Paletted with 25 colours [W20 H20] 8-Bit coloured Paletted -04FA (A39CC6) Type 4609 Paletted with 5F colours [W20 H20] 8-Bit coloured Paletted -04FB (A3A004) Type 4609 Paletted with 46 colours [W20 H20] 8-Bit coloured Paletted -04FC (A3A2DA) Type 4609 Paletted with 56 colours [W20 H20] 8-Bit coloured Paletted -04FD (A3A47B) Type 460B Paletted with 3E colours [W20 H20] 8-Bit coloured Paletted Transparent -04FE (A3A546) Type 4609 Paletted with B6 colours [W20 H20] 8-Bit coloured Paletted -04FF (A3AA36) Type 460A Paletted with 0D colours [W20 H20] 4-Bit coloured Paletted -0500 (A3ABC9) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0501 (A3AF39) Type 4609 Paletted with 8E colours [W20 H20] 8-Bit coloured Paletted -0502 (A3B2E7) Type 4609 Paletted with 97 colours [W20 H20] 8-Bit coloured Paletted -0503 (A3B6FF) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -0504 (A3B8B6) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0505 (A3BB4E) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0506 (A3C362) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0507 (A3CB6C) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0508 (A3D380) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0509 (A3DB8A) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -050A (A3E196) Type 4609 Paletted with 95 colours [W20 H20] 8-Bit coloured Paletted -050B (A3E5D3) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -050C (A3EBD4) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -050D (A3F1E0) Type 4609 Paletted with DB colours [W20 H20] 8-Bit coloured Paletted -050E (A3F77C) Type 4609 Paletted with FD colours [W20 H20] 8-Bit coloured Paletted -050F (A3FD6B) Type 4609 Paletted with F0 colours [W20 H20] 8-Bit coloured Paletted -0510 (A40359) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0511 (A40965) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0512 (A40F71) Type 4609 Paletted with 9F colours [W20 H20] 8-Bit coloured Paletted -0513 (A41412) Type 4609 Paletted with BA colours [W20 H20] 8-Bit coloured Paletted -0514 (A41900) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0515 (A41EE0) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0516 (A424EC) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0517 (A42AF8) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0518 (A43104) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0519 (A43918) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -051A (A44122) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -051B (A4492C) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -051C (A45136) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -051D (A4572F) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -051E (A45D3B) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -051F (A46521) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0520 (A46D0D) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0521 (A47508) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0522 (A47D12) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0523 (A4851E) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0524 (A48D28) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0525 (A49532) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0526 (A49D37) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0527 (A4A320) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0528 (A4A8F5) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0529 (A4AEDE) Type 4609 Paletted with 85 colours [W20 H20] 8-Bit coloured Paletted -052A (A4B330) Type 4709 Paletted with FF colours [W10 H40] 8-Bit coloured Paletted -052B (A4B93C) Type 4709 Paletted with FF colours [W10 H40] 8-Bit coloured Paletted -052C (A4BF48) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -052D (A4C75C) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -052E (A4CF70) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -052F (A4D77A) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0530 (A4DF82) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0531 (A4E78C) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0532 (A4EF96) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0533 (A4F7A0) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0534 (A4FFAA) Type 4609 Paletted with 91 colours [W20 H20] 8-Bit coloured Paletted -0535 (A50444) Type 4609 Paletted with F7 colours [W20 H20] 8-Bit coloured Paletted -0536 (A50A2F) Type 4609 Paletted with E8 colours [W20 H20] 8-Bit coloured Paletted -0537 (A50F66) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0538 (A5156F) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0539 (A51B5C) Type 4609 Paletted with BE colours [W20 H20] 8-Bit coloured Paletted -053A (A52062) Type 4609 Paletted with 7F colours [W20 H20] 8-Bit coloured Paletted -053B (A523E5) Type 4609 Paletted with C0 colours [W20 H20] 8-Bit coloured Paletted -053C (A528DA) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -053D (A530EE) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -053E (A53902) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -053F (A5410C) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0540 (A54916) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0541 (A55120) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0542 (A5592A) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0543 (A56134) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0544 (A5693E) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0545 (A57152) Type C709 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0546 (A57966) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0547 (A58170) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0548 (A5897A) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0549 (A59184) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -054A (A5998E) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -054B (A5A198) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -054C (A5A9A2) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -054D (A5ACB7) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -054E (A5AF3A) Type 4609 Paletted with 35 colours [W20 H20] 8-Bit coloured Paletted -054F (A5B1C0) Type 4609 Paletted with 8C colours [W20 H20] 8-Bit coloured Paletted -0550 (A5B646) Type 4609 Paletted with F9 colours [W20 H20] 8-Bit coloured Paletted -0551 (A5BC3C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0552 (A5C248) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0553 (A5C851) Type 4609 Paletted with AA colours [W20 H20] 8-Bit coloured Paletted -0554 (A5CD18) Type 4609 Paletted with 54 colours [W20 H20] 8-Bit coloured Paletted -0555 (A5D056) Greyscale TableOffsetter 8 [W20 H80] 4-bit Greyscale -0556 (A5D47D) Greyscale TableOffsetter 8 [W10 H80] 4-bit Greyscale -0557 (A5D657) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0558 (A5DC6A) Type 4609 Paletted with B6 colours [W20 H20] 8-Bit coloured Paletted -0559 (A5E12C) Type 4709 Paletted with B1 colours [W10 H40] 8-Bit coloured Paletted -055A (A5E60F) Type C609 Paletted with 4A colours [W40 H11] 8-Bit coloured Paletted -055B (A5EA62) Type C609 Paletted with 4B colours [W40 H11] 8-Bit coloured Paletted -055C (A5EEDD) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -055D (A5F159) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -055E (A5F480) Type 4609 Paletted with 6D colours [W20 H20] 8-Bit coloured Paletted -055F (A5F761) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0560 (A5FA98) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0561 (A5FCE6) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0562 (A5FED6) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0563 (A60209) Greyscale TableOffsetter 8 [W80 H20] 4-bit Greyscale -0564 (A602DB) Type 4609 Paletted with A4 colours [W20 H20] 8-Bit coloured Paletted -0565 (A60796) Type 460A Paletted with 08 colours [W20 H20] 4-Bit coloured Paletted -0566 (A607BE) Type 460A Paletted with 07 colours [W20 H20] 4-Bit coloured Paletted -0567 (A607E4) Type 4609 Paletted with A2 colours [W20 H20] 8-Bit coloured Paletted -0568 (A60B1E) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -0569 (A60D97) Greyscale TableOffsetter 5 [W40 H30] 8-bit Greyscale Transparent -056A (A61399) Type 4609 Paletted with 4B colours [W20 H20] 8-Bit coloured Paletted -056B (A616AC) Type 4609 Paletted with 4B colours [W20 H20] 8-Bit coloured Paletted -056C (A619BF) Type 4609 Paletted with E1 colours [W20 H20] 8-Bit coloured Paletted -056D (A61F04) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -056E (A62303) Type 4609 Paletted with A1 colours [W20 H20] 8-Bit coloured Paletted -056F (A62765) Type 4609 Paletted with 6F colours [W20 H20] 8-Bit coloured Paletted -0570 (A62B62) Type 460A Paletted with 09 colours [W20 H20] 4-Bit coloured Paletted -0571 (A62CF1) Type 4609 Paletted with 41 colours [W20 H20] 8-Bit coloured Paletted -0572 (A62F3F) Type 4009 Paletted with 9D colours [W20 H20] 8-Bit coloured Paletted -0573 (A632EB) Type 4609 Paletted with EB colours [W20 H20] 8-Bit coloured Paletted -0574 (A6387A) Type 4609 Paletted with E2 colours [W20 H20] 8-Bit coloured Paletted -0575 (A63DD8) Type 4609 Paletted with 88 colours [W20 H20] 8-Bit coloured Paletted -0576 (A641EF) Type 4609 Paletted with A6 colours [W20 H20] 8-Bit coloured Paletted -0577 (A646B5) Type 4609 Paletted with E5 colours [W20 H20] 8-Bit coloured Paletted -0578 (A64C3A) Type 4609 Paletted with 97 colours [W20 H20] 8-Bit coloured Paletted -0579 (A650A0) Type C609 Paletted with FF colours [W25 H25] 8-Bit coloured Paletted -057A (A659EF) Type C609 Paletted with FF colours [W25 H25] 8-Bit coloured Paletted -057B (A662DF) Type C609 Paletted with FF colours [W25 H25] 8-Bit coloured Paletted -057C (A66BE0) Type C609 Paletted with FF colours [W24 H25] 8-Bit coloured Paletted -057D (A6750D) Type C609 Paletted with FF colours [W25 H24] 8-Bit coloured Paletted -057E (A67E4D) Type C609 Paletted with FF colours [W25 H24] 8-Bit coloured Paletted -057F (A68756) Type C609 Paletted with FF colours [W25 H24] 8-Bit coloured Paletted -0580 (A69096) Type C609 Paletted with FF colours [W24 H24] 8-Bit coloured Paletted -0581 (A69987) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0582 (A69B4B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0583 (A69CBE) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0584 (A69E13) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0585 (A6A124) Type 4609 Paletted with 5D colours [W20 H20] 8-Bit coloured Paletted -0586 (A6A3B6) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0587 (A6A5E1) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0588 (A6A7DE) Type 400B Paletted with 2C colours [W17 H18] 8-Bit coloured Paletted Transparent -0589 (A6A9AB) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -058A (A6ABAE) Type 4609 Paletted with 29 colours [W20 H20] 8-Bit coloured Paletted -058B (A6AE30) Type 4609 Paletted with 18 colours [W20 H20] 8-Bit coloured Paletted -058C (A6B07E) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -058D (A6B25D) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -058E (A6B471) Type 4609 Paletted with EF colours [W20 H20] 8-Bit coloured Paletted -058F (A6B888) Type 4609 Paletted with 7C colours [W20 H20] 8-Bit coloured Paletted -0590 (A6BA7C) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0591 (A6C05D) Type 4609 Paletted with 14 colours [W20 H20] 8-Bit coloured Paletted -0592 (A6C0BA) Type 4609 Paletted with CE colours [W20 H20] 8-Bit coloured Paletted -0593 (A6C610) Type 460A Paletted with 07 colours [W20 H20] 4-Bit coloured Paletted -0594 (A6C771) Type 460A Paletted with 06 colours [W20 H20] 4-Bit coloured Paletted -0595 (A6C8CA) Type 460B Paletted with 8A colours [W20 H20] 8-Bit coloured Paletted Transparent -0596 (A6CD89) Type 4609 Paletted with 34 colours [W20 H20] 8-Bit coloured Paletted -0597 (A6D00C) Type 4609 Paletted with 4D colours [W20 H20] 8-Bit coloured Paletted -0598 (A6D33A) Type 4609 Paletted with 26 colours [W20 H20] 8-Bit coloured Paletted -0599 (A6D46E) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -059A (A6D6BC) Type 4609 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -059B (A6D7D2) Type 4609 Paletted with 34 colours [W20 H20] 8-Bit coloured Paletted -059C (A6D8C2) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -059D (A6D9D4) Type 4609 Paletted with A6 colours [W20 H20] 8-Bit coloured Paletted -059E (A6DDA7) Type 4609 Paletted with A6 colours [W20 H20] 8-Bit coloured Paletted -059F (A6E17A) Greyscale TableOffsetter 7 [W20 H20] 8-bit Greyscale -05A0 (A6E561) Greyscale TableOffsetter 6 [W4C H4C] 4-bit Greyscale Transparent -05A1 (A6E9AB) Type 4609 Paletted with 23 colours [W20 H20] 8-Bit coloured Paletted -05A2 (A6EAC6) Type 4609 Paletted with 16 colours [W20 H20] 8-Bit coloured Paletted -05A3 (A6EBF2) Type 460A Paletted with 0F colours [W20 H20] 4-Bit coloured Paletted -05A4 (A6ED67) Type 4609 Paletted with 29 colours [W20 H20] 8-Bit coloured Paletted -05A5 (A6EFE5) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -05A6 (A6F1AD) Type 4609 Paletted with 7E colours [W20 H20] 8-Bit coloured Paletted -05A7 (A6F48E) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -05A8 (A6F68D) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05A9 (A6F985) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05AA (A6FC20) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05AB (A6FE98) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05AC (A70137) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05AD (A70388) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05AE (A70616) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05AF (A70884) Type 470B Paletted with 58 colours [W40 H10] 8-Bit coloured Paletted Transparent -05B0 (A70B56) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -05B1 (A70EE7) Type 4609 Paletted with EA colours [W20 H20] 8-Bit coloured Paletted -05B2 (A71319) Type 4609 Paletted with 44 colours [W20 H20] 8-Bit coloured Paletted -05B3 (A71454) Type 4609 Paletted with 4A colours [W20 H20] 8-Bit coloured Paletted -05B4 (A716CE) Type 4609 Paletted with 25 colours [W20 H20] 8-Bit coloured Paletted -05B5 (A7193D) Type 4609 Paletted with BF colours [W20 H20] 8-Bit coloured Paletted -05B6 (A71E42) Type 4609 Paletted with DF colours [W20 H20] 8-Bit coloured Paletted -05B7 (A72320) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05B8 (A727D2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05B9 (A72B0D) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -05BA (A72DE4) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -05BB (A72F9A) Type 4609 Paletted with 22 colours [W20 H20] 8-Bit coloured Paletted -05BC (A7318C) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05BD (A7382F) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05BE (A73ED2) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -05BF (A74151) Type 4709 Paletted with 6E colours [W08 H80] 8-Bit coloured Paletted -05C0 (A743AC) Type 4709 Paletted with 5B colours [W10 H40] 8-Bit coloured Paletted -05C1 (A74550) Type 4609 Paletted with D7 colours [W20 H20] 8-Bit coloured Paletted -05C2 (A74AD2) Type 4609 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -05C3 (A74CEF) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -05C4 (A7520C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -05C5 (A75704) Type 4609 Paletted with CF colours [W20 H20] 8-Bit coloured Paletted -05C6 (A75B8B) Type 4609 Paletted with 9F colours [W20 H20] 8-Bit coloured Paletted -05C7 (A75EF3) Type 4609 Paletted with A7 colours [W20 H20] 8-Bit coloured Paletted -05C8 (A7626F) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05C9 (A769F9) Type 470B Paletted with 14 colours [W40 H01] 8-Bit coloured Paletted Transparent -05CA (A76A42) Type 470B Paletted with 15 colours [W40 H01] 8-Bit coloured Paletted Transparent -05CB (A76A8D) Type 470A Paletted with 0B colours [W40 H01] 4-Bit coloured Paletted -05CC (A76AC0) Type 4609 Paletted with 59 colours [W20 H20] 8-Bit coloured Paletted -05CD (A76E7E) Type 460A Paletted with 05 colours [W20 H20] 4-Bit coloured Paletted -05CE (A76F3C) Type 4609 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -05CF (A770E4) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D0 (A777B2) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D1 (A77E26) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D2 (A7852C) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D3 (A78BF0) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D4 (A792CE) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D5 (A799CE) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D6 (A7A08A) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D7 (A7A76F) Type 4009 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D8 (A7ADDA) Type 4609 Paletted with FF colours [W26 H26] 8-Bit coloured Paletted -05D9 (A7B515) Type 4609 Paletted with C1 colours [W26 H26] 8-Bit coloured Paletted -05DA (A7B8FB) Type 4609 Paletted with B7 colours [W20 H20] 8-Bit coloured Paletted -05DB (A7BCFF) Type 4609 Paletted with 5F colours [W20 H20] 8-Bit coloured Paletted -05DC (A7C09C) Type 4609 Paletted with 33 colours [W20 H20] 8-Bit coloured Paletted -05DD (A7C386) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05DE (A7C8FA) Type 4609 Paletted with 41 colours [W20 H20] 8-Bit coloured Paletted -05DF (A7CA08) Type 4609 Paletted with 55 colours [W20 H20] 8-Bit coloured Paletted -05E0 (A7CC18) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05E1 (A7CD77) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -05E2 (A7D088) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05E3 (A7D437) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05E4 (A7D92E) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -05E5 (A7DBB8) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -05E6 (A7DDEC) Type 4609 Paletted with 21 colours [W20 H20] 8-Bit coloured Paletted -05E7 (A7E07E) Type 4009 Paletted with 24 colours [W20 H20] 8-Bit coloured Paletted -05E8 (A7E303) Type 4609 Paletted with BE colours [W20 H20] 8-Bit coloured Paletted -05E9 (A7E84C) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -05EA (A7EA42) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -05EB (A7EA4E) Type 4609 Paletted with 4A colours [W20 H20] 8-Bit coloured Paletted -05EC (A7EBB6) Type 4609 Paletted with 54 colours [W20 H30] 8-Bit coloured Paletted -05ED (A7ED46) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -05EE (A7EF96) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -05EF (A7F510) Type 4609 Paletted with 92 colours [W20 H30] 8-Bit coloured Paletted -05F0 (A7F93C) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -05F1 (A7FE3B) Type 4609 Paletted with 86 colours [W20 H20] 8-Bit coloured Paletted -05F2 (A8015E) Type 4709 Paletted with 51 colours [W10 H40] 8-Bit coloured Paletted -05F3 (A8033D) Type 4609 Paletted with C3 colours [W20 H20] 8-Bit coloured Paletted -05F4 (A80840) Type 4609 Paletted with 18 colours [W20 H20] 8-Bit coloured Paletted -05F5 (A809E5) Type 4609 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -05F6 (A80CD1) Type 4609 Paletted with 8E colours [W20 H20] 8-Bit coloured Paletted -05F7 (A81156) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -05F8 (A8187E) Type 4609 Paletted with 27 colours [W20 H20] 8-Bit coloured Paletted -05F9 (A81AA1) Type 4609 Paletted with 6B colours [W20 H20] 8-Bit coloured Paletted -05FA (A81E6C) Type 460A Paletted with 0D colours [W20 H20] 4-Bit coloured Paletted -05FB (A81FC6) Type 460A Paletted with 0D colours [W10 H20] 4-Bit coloured Paletted -05FC (A820AD) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -05FD (A82223) Type 4609 Paletted with 29 colours [W20 H20] 8-Bit coloured Paletted -05FE (A823D7) Type 4609 Paletted with 33 colours [W20 H20] 8-Bit coloured Paletted -05FF (A8269A) Type 4609 Paletted with 33 colours [W20 H20] 8-Bit coloured Paletted -0600 (A82942) Type 4609 Paletted with 2F colours [W20 H20] 8-Bit coloured Paletted -0601 (A82B7C) Type 4609 Paletted with 2D colours [W20 H20] 8-Bit coloured Paletted -0602 (A82DC2) Type 4609 Paletted with 24 colours [W20 H20] 8-Bit coloured Paletted -0603 (A83002) Type 4609 Paletted with 30 colours [W20 H20] 8-Bit coloured Paletted -0604 (A8327E) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -0605 (A83568) Greyscale TableOffsetter 5 [W80 H18] 8-bit Greyscale Transparent -0606 (A83A19) Greyscale TableOffsetter 6 [W81 H20] 4-bit Greyscale Transparent -0607 (A83E8D) Greyscale TableOffsetter 6 [W81 H20] 4-bit Greyscale Transparent -0608 (A84312) Greyscale TableOffsetter 5 [W7D H17] 8-bit Greyscale Transparent -0609 (A84AE8) Greyscale TableOffsetter 5 [W7D H17] 8-bit Greyscale Transparent -060A (A85369) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -060B (A85793) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -060C (A85D4F) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -060D (A8647B) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -060E (A86D0C) Type 4009 Paletted with CE colours [W20 H40] 8-Bit coloured Paletted -060F (A87468) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0610 (A87D44) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0611 (A8868E) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0612 (A88FB2) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0613 (A89922) Type 4609 Paletted with 5F colours [W20 H20] 8-Bit coloured Paletted -0614 (A89B70) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0615 (A8A514) Type 4009 Paletted with 4E colours [W20 H20] 8-Bit coloured Paletted -0616 (A8A84B) Type 4009 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0617 (A8AE53) Type 4009 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0618 (A8B45F) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0619 (A8BE46) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -061A (A8C822) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -061B (A8D1E4) Type 4609 Paletted with 12 colours [W30 H20] 8-Bit coloured Paletted -061C (A8D3DC) Type 4609 Paletted with 12 colours [W30 H20] 8-Bit coloured Paletted -061D (A8D62D) Type 4609 Paletted with 16 colours [W20 H30] 8-Bit coloured Paletted -061E (A8D85F) Type 4609 Paletted with 25 colours [W20 H20] 8-Bit coloured Paletted -061F (A8DA5A) Type 4009 Paletted with 90 colours [W20 H40] 8-Bit coloured Paletted -0620 (A8E01A) Type 4009 Paletted with 28 colours [W20 H40] 8-Bit coloured Paletted -0621 (A8E421) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0622 (A8EE0A) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0623 (A8F6B0) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0624 (A90018) Type 4609 Paletted with D2 colours [W20 H30] 8-Bit coloured Paletted -0625 (A905DD) Type 4609 Paletted with B9 colours [W20 H20] 8-Bit coloured Paletted -0626 (A909F7) Type 4609 Paletted with 64 colours [W30 H20] 8-Bit coloured Paletted -0627 (A90D7D) Type 4609 Paletted with 67 colours [W30 H20] 8-Bit coloured Paletted -0628 (A9115B) Type 4609 Paletted with 3F colours [W20 H20] 8-Bit coloured Paletted -0629 (A913CD) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -062A (A91762) Type 4609 Paletted with 5C colours [W20 H20] 8-Bit coloured Paletted -062B (A91AB2) Type 4609 Paletted with 50 colours [W20 H20] 8-Bit coloured Paletted -062C (A91D9E) Type 4609 Paletted with 55 colours [W20 H20] 8-Bit coloured Paletted -062D (A920C2) Type 4609 Paletted with 50 colours [W20 H20] 8-Bit coloured Paletted -062E (A92388) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -062F (A92AA6) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0630 (A931B5) Type 4609 Paletted with 42 colours [W20 H30] 8-Bit coloured Paletted -0631 (A9350E) Type 4609 Paletted with 4E colours [W20 H30] 8-Bit coloured Paletted -0632 (A938D7) Type 4609 Paletted with 4A colours [W20 H30] 8-Bit coloured Paletted -0633 (A93C77) Type 4609 Paletted with 47 colours [W20 H30] 8-Bit coloured Paletted -0634 (A93FE2) Type 460A Paletted with 0E colours [W20 H20] 4-Bit coloured Paletted -0635 (A94099) Type 4609 Paletted with 6B colours [W20 H30] 8-Bit coloured Paletted -0636 (A94594) Type 4609 Paletted with 67 colours [W20 H30] 8-Bit coloured Paletted -0637 (A94AD3) Type 4609 Paletted with 54 colours [W20 H30] 8-Bit coloured Paletted -0638 (A94FA4) Type 4609 Paletted with EC colours [W20 H30] 8-Bit coloured Paletted -0639 (A956B1) Type 4609 Paletted with 24 colours [W20 H30] 8-Bit coloured Paletted -063A (A9598D) Type 4609 Paletted with 44 colours [W20 H30] 8-Bit coloured Paletted -063B (A95D33) Type 4609 Paletted with 13 colours [W20 H30] 8-Bit coloured Paletted -063C (A95ECE) Type 4609 Paletted with 99 colours [W30 H20] 8-Bit coloured Paletted -063D (A9629A) Type 440A Paletted with 02 colours [W08 H08] 4-Bit coloured Paletted -063E (A962C2) Type 440A Paletted with 05 colours [W08 H08] 4-Bit coloured Paletted -063F (A962F7) Type 4609 Paletted with 1C colours [W20 H30] 8-Bit coloured Paletted -0640 (A9652E) Type 4609 Paletted with 49 colours [W20 H30] 8-Bit coloured Paletted -0641 (A968D3) Type 4609 Paletted with 3A colours [W20 H30] 8-Bit coloured Paletted -0642 (A96C61) Type 4609 Paletted with 20 colours [W20 H30] 8-Bit coloured Paletted -0643 (A96F06) Type 4609 Paletted with 2E colours [W30 H20] 8-Bit coloured Paletted -0644 (A97195) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -0645 (A971A1) Type 4609 Paletted with 35 colours [W20 H20] 8-Bit coloured Paletted -0646 (A9737C) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0647 (A97AD7) Type 4009 Paletted with 4E colours [W40 H20] 8-Bit coloured Paletted -0648 (A97D4F) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -0649 (A97D5B) Type 4609 Paletted with 87 colours [W20 H20] 8-Bit coloured Paletted -064A (A98132) Type 4009 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -064B (A98287) Type 4609 Paletted with 71 colours [W20 H20] 8-Bit coloured Paletted -064C (A98682) Type 4609 Paletted with 60 colours [W20 H20] 8-Bit coloured Paletted -064D (A98A2F) Type 4609 Paletted with EE colours [W20 H20] 8-Bit coloured Paletted -064E (A98FCB) Type 400A Paletted with 0E colours [W20 H20] 4-Bit coloured Paletted -064F (A990FC) Type 4609 Paletted with 65 colours [W20 H20] 8-Bit coloured Paletted -0650 (A994B5) Type 4609 Paletted with CA colours [W20 H20] 8-Bit coloured Paletted -0651 (A999A9) Type 4009 Paletted with 15 colours [W20 H20] 8-Bit coloured Paletted -0652 (A99AF8) Type 4609 Paletted with 67 colours [W20 H20] 8-Bit coloured Paletted -0653 (A99EAD) Type 4609 Paletted with B2 colours [W20 H20] 8-Bit coloured Paletted -0654 (A9A343) Type 4009 Paletted with 1E colours [W20 H20] 8-Bit coloured Paletted -0655 (A9A4B1) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -0656 (A9A87C) Type 4609 Paletted with BF colours [W20 H20] 8-Bit coloured Paletted -0657 (A9AD63) Type 4009 Paletted with 29 colours [W20 H20] 8-Bit coloured Paletted -0658 (A9AF15) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0659 (A9B775) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -065A (A9BFEF) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -065B (A9C6EB) Type 460A Paletted with 03 colours [W20 H30] 4-Bit coloured Paletted -065C (A9C83A) Type 4609 Paletted with 91 colours [W20 H20] 8-Bit coloured Paletted -065D (A9CB34) Type 4609 Paletted with 6F colours [W20 H20] 8-Bit coloured Paletted -065E (A9CE33) Type 4609 Paletted with 3C colours [W20 H20] 8-Bit coloured Paletted -065F (A9CF67) Type 4609 Paletted with 35 colours [W30 H20] 8-Bit coloured Paletted -0660 (A9D23B) Type 4609 Paletted with 66 colours [W20 H30] 8-Bit coloured Paletted -0661 (A9D739) Type 4609 Paletted with 64 colours [W20 H30] 8-Bit coloured Paletted -0662 (A9DC6D) Type 4609 Paletted with 65 colours [W20 H20] 8-Bit coloured Paletted -0663 (A9DFF0) Type 4609 Paletted with 47 colours [W20 H20] 8-Bit coloured Paletted -0664 (A9E35A) Type 4609 Paletted with 42 colours [W20 H20] 8-Bit coloured Paletted -0665 (A9E64B) Type 4609 Paletted with 42 colours [W20 H20] 8-Bit coloured Paletted -0666 (A9E9B7) Type 460A Paletted with 08 colours [W20 H20] 4-Bit coloured Paletted -0667 (A9EAF1) Type 440A Paletted with 06 colours [W08 H08] 4-Bit coloured Paletted -0668 (A9EB28) Type 4609 Paletted with 52 colours [W20 H30] 8-Bit coloured Paletted -0669 (A9EEC1) Type 4609 Paletted with 19 colours [W20 H30] 8-Bit coloured Paletted -066A (A9F1AA) Type 4609 Paletted with 62 colours [W20 H30] 8-Bit coloured Paletted -066B (A9F5C9) Type 4609 Paletted with 24 colours [W20 H30] 8-Bit coloured Paletted -066C (A9F8F5) Type 4609 Paletted with BC colours [W20 H30] 8-Bit coloured Paletted -066D (A9FEB3) Type 4609 Paletted with 61 colours [W20 H20] 8-Bit coloured Paletted -066E (AA0180) Type 4609 Paletted with 6E colours [W20 H20] 8-Bit coloured Paletted -066F (AA048D) Type 4609 Paletted with 9B colours [W20 H30] 8-Bit coloured Paletted -0670 (AA0A5B) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0671 (AA1183) Type 4609 Paletted with 86 colours [W20 H30] 8-Bit coloured Paletted -0672 (AA15FF) Type 4609 Paletted with A6 colours [W30 H20] 8-Bit coloured Paletted -0673 (AA1BF1) Type 400A Paletted with 0C colours [W08 H08] 4-Bit coloured Paletted -0674 (AA1C31) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0675 (AA22ED) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0676 (AA2C97) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -0677 (AA3491) Type 4009 Paletted with 78 colours [W20 H20] 8-Bit coloured Paletted -0678 (AA388F) Type 4609 Paletted with C6 colours [W20 H30] 8-Bit coloured Paletted -0679 (AA3D5D) Type 4609 Paletted with 4A colours [W30 H20] 8-Bit coloured Paletted -067A (AA4019) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -067B (AA45E9) Type 4609 Paletted with 9E colours [W20 H30] 8-Bit coloured Paletted -067C (AA4B56) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -067D (AA52E7) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -067E (AA5C38) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -067F (AA63C5) Type 4609 Paletted with 1B colours [W20 H30] 8-Bit coloured Paletted -0680 (AA6613) Type 4609 Paletted with 2F colours [W20 H30] 8-Bit coloured Paletted -0681 (AA6920) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0682 (AA7256) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0683 (AA7727) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0684 (AA7C75) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0685 (AA7DEB) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0686 (AA838C) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0687 (AA8912) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -0688 (AA891E) Type 4609 Paletted with 34 colours [W20 H30] 8-Bit coloured Paletted -0689 (AA8D80) Type 4609 Paletted with 90 colours [W20 H30] 8-Bit coloured Paletted -068A (AA9377) Type 4609 Paletted with E9 colours [W20 H30] 8-Bit coloured Paletted -068B (AA9AAB) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -068C (AAA1E5) Type 4609 Paletted with E5 colours [W20 H30] 8-Bit coloured Paletted -068D (AAA8AC) Type 4609 Paletted with FD colours [W20 H30] 8-Bit coloured Paletted -068E (AAB045) Type 4609 Paletted with 3B colours [W20 H30] 8-Bit coloured Paletted -068F (AAB4AA) Type 4609 Paletted with A3 colours [W20 H30] 8-Bit coloured Paletted -0690 (AABB08) Type 4609 Paletted with 42 colours [W20 H30] 8-Bit coloured Paletted -0691 (AABFA3) Type 4609 Paletted with AF colours [W20 H30] 8-Bit coloured Paletted -0692 (AAC623) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0693 (AACFAF) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0694 (AAD8CF) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0695 (AAE1EC) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0696 (AAEBAA) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0697 (AAF219) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0698 (AAF82A) Type 4609 Paletted with A6 colours [W20 H30] 8-Bit coloured Paletted -0699 (AAFDDD) Type 460A Paletted with 09 colours [W20 H30] 4-Bit coloured Paletted -069A (AAFF24) Type 4609 Paletted with F5 colours [W20 H30] 8-Bit coloured Paletted -069B (AB05BE) Type 4609 Paletted with F1 colours [W20 H20] 8-Bit coloured Paletted -069C (AB0AF3) Type 4609 Paletted with 4E colours [W20 H30] 8-Bit coloured Paletted -069D (AB0EFD) Type 4609 Paletted with 8F colours [W20 H30] 8-Bit coloured Paletted -069E (AB1219) Type 4609 Paletted with 85 colours [W20 H30] 8-Bit coloured Paletted -069F (AB14E9) Type 4609 Paletted with 3A colours [W20 H30] 8-Bit coloured Paletted -06A0 (AB17A8) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06A1 (AB2140) Type 460A Paletted with 0D colours [W20 H30] 4-Bit coloured Paletted -06A2 (AB2301) Type 4009 Paletted with 60 colours [W20 H20] 8-Bit coloured Paletted -06A3 (AB25B5) Type 4609 Paletted with 23 colours [W20 H30] 8-Bit coloured Paletted -06A4 (AB28D1) Type 4609 Paletted with 3B colours [W20 H30] 8-Bit coloured Paletted -06A5 (AB2C59) Type 4009 Paletted with 5B colours [W20 H40] 8-Bit coloured Paletted -06A6 (AB3047) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06A7 (AB3922) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06A8 (AB417B) Type 4609 Paletted with 60 colours [W30 H20] 8-Bit coloured Paletted -06A9 (AB44E5) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06AA (AB4E3C) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06AB (AB57DB) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06AC (AB61AB) Type 4009 Paletted with 89 colours [W20 H40] 8-Bit coloured Paletted -06AD (AB6841) Type 4609 Paletted with 40 colours [W20 H20] 8-Bit coloured Paletted -06AE (AB69FF) Type 4609 Paletted with 30 colours [W20 H30] 8-Bit coloured Paletted -06AF (AB6CA0) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -06B0 (AB71F8) Type 460A Paletted with 08 colours [W20 H30] 4-Bit coloured Paletted -06B1 (AB73B3) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -06B2 (AB766A) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -06B3 (AB78ED) Type 4609 Paletted with 28 colours [W20 H20] 8-Bit coloured Paletted -06B4 (AB7B3D) Type 460B Paletted with 2D colours [W20 H20] 8-Bit coloured Paletted Transparent -06B5 (AB7DFE) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -06B6 (AB82DF) Type 4609 Paletted with 29 colours [W20 H30] 8-Bit coloured Paletted -06B7 (AB864B) Type 460B Paletted with 35 colours [W20 H20] 8-Bit coloured Paletted Transparent -06B8 (AB8952) Type 460B Paletted with 34 colours [W20 H20] 8-Bit coloured Paletted Transparent -06B9 (AB8C3C) Type 460B Paletted with 2D colours [W20 H20] 8-Bit coloured Paletted Transparent -06BA (AB8EFD) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06BB (AB9840) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06BC (ABA103) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06BD (ABAA0A) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -06BE (ABAA16) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06BF (ABB3E8) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06C0 (ABBD9B) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06C1 (ABC72B) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -06C2 (ABCB29) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -06C3 (ABCF33) Type 4609 Paletted with AB colours [W20 H20] 8-Bit coloured Paletted -06C4 (ABD37A) Type 4609 Paletted with A2 colours [W20 H20] 8-Bit coloured Paletted -06C5 (ABD792) Type 4009 Paletted with F8 colours [W20 H40] 8-Bit coloured Paletted -06C6 (ABDFC5) Type 4009 Paletted with FC colours [W20 H40] 8-Bit coloured Paletted -06C7 (ABE7AE) Type 4609 Paletted with 21 colours [W20 H30] 8-Bit coloured Paletted -06C8 (ABEAEF) Type 4609 Paletted with 29 colours [W20 H30] 8-Bit coloured Paletted -06C9 (ABEC60) Type 4609 Paletted with AD colours [W20 H30] 8-Bit coloured Paletted -06CA (ABF267) Type 4609 Paletted with A5 colours [W20 H30] 8-Bit coloured Paletted -06CB (ABF7F4) Type 4609 Paletted with 54 colours [W20 H30] 8-Bit coloured Paletted -06CC (ABFBAB) Type 4609 Paletted with 53 colours [W20 H30] 8-Bit coloured Paletted -06CD (ABFFAB) Type 4609 Paletted with 61 colours [W20 H30] 8-Bit coloured Paletted -06CE (AC0405) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -06CF (AC0B17) Type 4609 Paletted with 1E colours [W20 H30] 8-Bit coloured Paletted -06D0 (AC0D3D) Type 4609 Paletted with 38 colours [W20 H30] 8-Bit coloured Paletted -06D1 (AC1152) Type 4609 Paletted with 89 colours [W20 H30] 8-Bit coloured Paletted -06D2 (AC1687) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -06D3 (AC1DFB) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -06D4 (AC25A3) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -06D5 (AC2D10) Type 4609 Paletted with 2B colours [W20 H30] 8-Bit coloured Paletted -06D6 (AC2F8C) Type 4609 Paletted with 2B colours [W20 H30] 8-Bit coloured Paletted -06D7 (AC3235) Type 4609 Paletted with 14 colours [W20 H20] 8-Bit coloured Paletted -06D8 (AC3340) Type 4609 Paletted with 46 colours [W20 H30] 8-Bit coloured Paletted -06D9 (AC3682) Type 460A Paletted with 0B colours [W30 H20] 4-Bit coloured Paletted -06DA (AC3867) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -06DB (AC3A62) Type 4609 Paletted with 83 colours [W30 H20] 8-Bit coloured Paletted -06DC (AC402A) Type 4609 Paletted with 39 colours [W30 H20] 8-Bit coloured Paletted -06DD (AC43C5) Type 4609 Paletted with 44 colours [W30 H20] 8-Bit coloured Paletted -06DE (AC47DB) Type 4609 Paletted with 8E colours [W20 H20] 8-Bit coloured Paletted -06DF (AC4C2D) Type 4609 Paletted with 44 colours [W20 H30] 8-Bit coloured Paletted -06E0 (AC5055) Type 4609 Paletted with 15 colours [W20 H30] 8-Bit coloured Paletted -06E1 (AC52F0) Type 460A Paletted with 08 colours [W20 H30] 4-Bit coloured Paletted -06E2 (AC54C2) Type 4009 Paletted with 99 colours [W20 H40] 8-Bit coloured Paletted -06E3 (AC5B1C) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06E4 (AC6480) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06E5 (AC6D3C) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06E6 (AC7624) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06E7 (AC800E) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06E8 (AC89B9) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -06E9 (AC936E) Type 4609 Paletted with 2C colours [W30 H20] 8-Bit coloured Paletted -06EA (AC96FA) Type 4609 Paletted with 90 colours [W20 H30] 8-Bit coloured Paletted -06EB (AC9C53) Type 4609 Paletted with E9 colours [W20 H30] 8-Bit coloured Paletted -06EC (ACA2BA) Type 4609 Paletted with 77 colours [W20 H30] 8-Bit coloured Paletted -06ED (ACA834) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -06EE (ACACB4) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -06EF (ACAE54) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -06F0 (ACAF4A) Type 4609 Paletted with 3B colours [W20 H30] 8-Bit coloured Paletted -06F1 (ACB261) Type 4609 Paletted with 46 colours [W20 H30] 8-Bit coloured Paletted -06F2 (ACB5DF) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -06F3 (ACBBF9) Type 4609 Paletted with A4 colours [W20 H30] 8-Bit coloured Paletted -06F4 (ACC0AE) Type 4609 Paletted with 2B colours [W20 H20] 8-Bit coloured Paletted -06F5 (ACC1E7) Type 4609 Paletted with 2A colours [W20 H20] 8-Bit coloured Paletted -06F6 (ACC329) Type 4609 Paletted with 3C colours [W20 H30] 8-Bit coloured Paletted -06F7 (ACC4BA) Type 4609 Paletted with 73 colours [W20 H30] 8-Bit coloured Paletted -06F8 (ACC7BB) Type 4609 Paletted with 30 colours [W20 H30] 8-Bit coloured Paletted -06F9 (ACC97D) Type 4609 Paletted with 5D colours [W30 H20] 8-Bit coloured Paletted -06FA (ACCCE4) Type 4609 Paletted with 51 colours [W20 H30] 8-Bit coloured Paletted -06FB (ACD0C1) Type 4609 Paletted with 64 colours [W20 H20] 8-Bit coloured Paletted -06FC (ACD447) Type 4609 Paletted with 48 colours [W20 H20] 8-Bit coloured Paletted -06FD (ACD785) Type 4609 Paletted with 53 colours [W20 H20] 8-Bit coloured Paletted -06FE (ACDA8F) Type 4609 Paletted with 46 colours [W20 H20] 8-Bit coloured Paletted -06FF (ACDD77) Type 4609 Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted -0700 (ACE0B7) Type 4609 Paletted with 73 colours [W20 H20] 8-Bit coloured Paletted -0701 (ACE41F) Type 4609 Paletted with 7A colours [W20 H20] 8-Bit coloured Paletted -0702 (ACE7F4) Type 4609 Paletted with 7C colours [W20 H20] 8-Bit coloured Paletted -0703 (ACEBCF) Type 4609 Paletted with C0 colours [W20 H20] 8-Bit coloured Paletted -0704 (ACF0A6) Type 4609 Paletted with AB colours [W20 H20] 8-Bit coloured Paletted -0705 (ACF53E) Type 4609 Paletted with AB colours [W20 H20] 8-Bit coloured Paletted -0706 (ACF9DB) Type 4609 Paletted with 66 colours [W20 H20] 8-Bit coloured Paletted -0707 (ACFCC5) Type 4609 Paletted with 5F colours [W30 H20] 8-Bit coloured Paletted -0708 (AD0039) Type 4609 Paletted with CB colours [W30 H20] 8-Bit coloured Paletted -0709 (AD06C5) Type 4609 Paletted with EF colours [W30 H20] 8-Bit coloured Paletted -070A (AD0DF3) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -070B (AD16D5) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -070C (AD1EF5) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -070D (AD2796) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -070E (AD2FD0) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -070F (AD31C6) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -0710 (AD339A) Type 4609 Paletted with 28 colours [W20 H30] 8-Bit coloured Paletted -0711 (AD368E) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -0712 (AD37CC) Type 4609 Paletted with 38 colours [W20 H20] 8-Bit coloured Paletted -0713 (AD393F) Type 4609 Paletted with F2 colours [W20 H30] 8-Bit coloured Paletted -0714 (AD3FB7) Type 4609 Paletted with 14 colours [W20 H30] 8-Bit coloured Paletted -0715 (AD4250) Type 4609 Paletted with AF colours [W20 H30] 8-Bit coloured Paletted -0716 (AD47F3) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0717 (AD51FF) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0718 (AD5BE2) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0719 (AD65CB) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -071A (AD6F0B) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -071B (AD78BD) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -071C (AD8223) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -071D (AD8C04) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -071E (AD952D) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -071F (AD9E75) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0720 (ADA85D) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0721 (ADB22A) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0722 (ADBBCE) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0723 (ADC52F) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0724 (ADCE94) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0725 (ADD79D) Type 4009 Paletted with 40 colours [W40 H20] 8-Bit coloured Paletted -0726 (ADDB30) Type 460A Paletted with 08 colours [W20 H30] 4-Bit coloured Paletted -0727 (ADDC87) Type 4609 Paletted with 10 colours [W20 H30] 8-Bit coloured Paletted -0728 (ADDF12) Type 4609 Paletted with 26 colours [W20 H30] 8-Bit coloured Paletted -0729 (ADE224) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -072A (ADEBFD) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -072B (ADF502) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -072C (ADFE2A) Type 4609 Paletted with 3C colours [W20 H30] 8-Bit coloured Paletted -072D (AE00A1) Type 4609 Paletted with 46 colours [W20 H30] 8-Bit coloured Paletted -072E (AE031D) Type 4609 Paletted with 26 colours [W20 H30] 8-Bit coloured Paletted -072F (AE0433) Type 4609 Paletted with 3C colours [W20 H30] 8-Bit coloured Paletted -0730 (AE05FA) Type 4609 Paletted with 2F colours [W20 H30] 8-Bit coloured Paletted -0731 (AE06FE) Type 4609 Paletted with 23 colours [W30 H20] 8-Bit coloured Paletted -0732 (AE0986) Type 4609 Paletted with 92 colours [W20 H30] 8-Bit coloured Paletted -0733 (AE0FA3) Type 4609 Paletted with 3E colours [W20 H30] 8-Bit coloured Paletted -0734 (AE1128) Type 4009 Paletted with E9 colours [W20 H40] 8-Bit coloured Paletted -0735 (AE1981) Type 4009 Paletted with F2 colours [W20 H40] 8-Bit coloured Paletted -0736 (AE2220) Type 4009 Paletted with C7 colours [W20 H40] 8-Bit coloured Paletted -0737 (AE2A08) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0738 (AE33AE) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0739 (AE3C5B) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -073A (AE451A) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -073B (AE4E43) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -073C (AE579C) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -073D (AE60D7) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -073E (AE69C7) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -073F (AE727F) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0740 (AE7BB2) Type 4609 Paletted with 7D colours [W20 H30] 8-Bit coloured Paletted -0741 (AE808D) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0742 (AE89CE) Type 4009 Paletted with CE colours [W20 H40] 8-Bit coloured Paletted -0743 (AE9091) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0744 (AE98D5) Type 4009 Paletted with 63 colours [W10 H40] 8-Bit coloured Paletted -0745 (AE9BFF) Type 4009 Paletted with 93 colours [W20 H40] 8-Bit coloured Paletted -0746 (AEA209) Type 4009 Paletted with 6C colours [W10 H40] 8-Bit coloured Paletted -0747 (AEA5AF) Type 400A Paletted with 0C colours [W20 H20] 4-Bit coloured Paletted -0748 (AEA6BF) Type 4609 Paletted with 40 colours [W30 H20] 8-Bit coloured Paletted -0749 (AEA975) Type 4009 Paletted with AB colours [W20 H40] 8-Bit coloured Paletted -074A (AEB09A) Type 4609 Paletted with C4 colours [W20 H20] 8-Bit coloured Paletted -074B (AEB598) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -074C (AEB5A4) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -074D (AEBE73) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -074E (AEC7BD) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -074F (AED165) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -0750 (AED8F1) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0751 (AEE2CF) Type 400A Paletted with 0B colours [W20 H40] 4-Bit coloured Paletted -0752 (AEE3E3) Type 4609 Paletted with DD colours [W20 H20] 8-Bit coloured Paletted -0753 (AEE962) Type 4609 Paletted with 32 colours [W20 H20] 8-Bit coloured Paletted -0754 (AEEB24) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0755 (AEF2F8) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0756 (AEFADD) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0757 (AF04C0) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0758 (AF0C7D) Type 4609 Paletted with 7C colours [W20 H30] 8-Bit coloured Paletted -0759 (AF1125) Type 4609 Paletted with 16 colours [W20 H30] 8-Bit coloured Paletted -075A (AF11DF) Type 4609 Paletted with E9 colours [W30 H20] 8-Bit coloured Paletted -075B (AF17B0) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -075C (AF211C) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -075D (AF2996) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -075E (AF3196) Type 4009 Paletted with 63 colours [W20 H40] 8-Bit coloured Paletted -075F (AF3606) Type 4009 Paletted with 44 colours [W20 H20] 8-Bit coloured Paletted -0760 (AF3817) Type 460A Paletted with 0D colours [W20 H30] 4-Bit coloured Paletted -0761 (AF3A21) Type 4609 Paletted with 48 colours [W20 H30] 8-Bit coloured Paletted -0762 (AF3D4B) Type 4609 Paletted with BA colours [W30 H20] 8-Bit coloured Paletted -0763 (AF4132) Type 4609 Paletted with 43 colours [W20 H20] 8-Bit coloured Paletted -0764 (AF4395) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0765 (AF4DA1) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0766 (AF53AD) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0767 (AF599D) Type 4609 Paletted with C6 colours [W20 H30] 8-Bit coloured Paletted -0768 (AF6007) Type 4609 Paletted with 41 colours [W30 H20] 8-Bit coloured Paletted -0769 (AF6329) Type 4609 Paletted with 5D colours [W20 H20] 8-Bit coloured Paletted -076A (AF66A8) Type 4609 Paletted with 5D colours [W20 H20] 8-Bit coloured Paletted -076B (AF6A27) Type 4609 Paletted with 5D colours [W20 H20] 8-Bit coloured Paletted -076C (AF6D3B) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -076D (AF706E) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -076E (AF720A) Type 4609 Paletted with 4C colours [W20 H20] 8-Bit coloured Paletted -076F (AF743C) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -0770 (AF758D) Type 460A Paletted with 0D colours [W20 H20] 4-Bit coloured Paletted -0771 (AF7703) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0772 (AF7EAC) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0773 (AF8646) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0774 (AF8F78) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0775 (AF9845) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0776 (AFA113) Type 460A Paletted with 06 colours [W20 H20] 4-Bit coloured Paletted -0777 (AFA217) Type 4609 Paletted with 5A colours [W20 H20] 8-Bit coloured Paletted -0778 (AFA50A) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0779 (AFAABE) Type 4609 Paletted with 87 colours [W20 H20] 8-Bit coloured Paletted -077A (AFADFC) Type 4609 Paletted with 71 colours [W20 H30] 8-Bit coloured Paletted -077B (AFB30A) Type 4609 Paletted with B1 colours [W20 H30] 8-Bit coloured Paletted -077C (AFB904) Type 4609 Paletted with 4B colours [W20 H30] 8-Bit coloured Paletted -077D (AFBD68) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -077E (AFBD74) Type 4009 Paletted with E0 colours [W20 H20] 8-Bit coloured Paletted -077F (AFC2EB) Type 4009 Paletted with E3 colours [W20 H20] 8-Bit coloured Paletted -0780 (AFC86E) Type 4009 Paletted with FB colours [W20 H40] 8-Bit coloured Paletted -0781 (AFD112) Type 4609 Paletted with 30 colours [W20 H30] 8-Bit coloured Paletted -0782 (AFD464) Type 4009 Paletted with 44 colours [W20 H20] 8-Bit coloured Paletted -0783 (AFD73B) Type 4609 Paletted with 2E colours [W20 H30] 8-Bit coloured Paletted -0784 (AFDA96) Type 4609 Paletted with 3D colours [W20 H30] 8-Bit coloured Paletted -0785 (AFDE59) Type 4609 Paletted with 43 colours [W20 H30] 8-Bit coloured Paletted -0786 (AFE2D0) Type 4609 Paletted with 44 colours [W20 H30] 8-Bit coloured Paletted -0787 (AFE74F) Type 4609 Paletted with 5A colours [W20 H20] 8-Bit coloured Paletted -0788 (AFE9E0) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0789 (AFF2D5) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -078A (AFFBDD) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -078B (B005B0) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -078C (B00E79) Type 4009 Paletted with 2B colours [W20 H20] 8-Bit coloured Paletted -078D (B01119) Type 4009 Paletted with EB colours [W20 H40] 8-Bit coloured Paletted -078E (B01951) Type 4009 Paletted with E5 colours [W20 H40] 8-Bit coloured Paletted -078F (B02146) Type 4609 Paletted with 4F colours [W20 H30] 8-Bit coloured Paletted -0790 (B0245B) Type 4609 Paletted with 9E colours [W20 H30] 8-Bit coloured Paletted -0791 (B02971) Type 4609 Paletted with 58 colours [W20 H30] 8-Bit coloured Paletted -0792 (B02DDC) Type 4609 Paletted with 39 colours [W20 H30] 8-Bit coloured Paletted -0793 (B030E1) Type 4609 Paletted with 99 colours [W20 H30] 8-Bit coloured Paletted -0794 (B035BF) Type 4609 Paletted with A1 colours [W20 H20] 8-Bit coloured Paletted -0795 (B03A2A) Type 4609 Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted -0796 (B03D4A) Type 4609 Paletted with FF colours [W30 H20] 8-Bit coloured Paletted -0797 (B043DF) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0798 (B04D4D) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0799 (B056EA) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -079A (B06080) Type 4609 Paletted with 49 colours [W30 H20] 8-Bit coloured Paletted -079B (B0640E) Type 4609 Paletted with 23 colours [W30 H20] 8-Bit coloured Paletted -079C (B06656) Type 4609 Paletted with 65 colours [W20 H30] 8-Bit coloured Paletted -079D (B06922) Type 4609 Paletted with 22 colours [W20 H30] 8-Bit coloured Paletted -079E (B0699B) Type 4609 Paletted with D9 colours [W30 H20] 8-Bit coloured Paletted -079F (B06FB7) Type 4609 Paletted with 54 colours [W30 H20] 8-Bit coloured Paletted -07A0 (B07445) Type 4609 Paletted with 68 colours [W20 H30] 8-Bit coloured Paletted -07A1 (B0799F) Type 4609 Paletted with 5B colours [W20 H30] 8-Bit coloured Paletted -07A2 (B07EC2) Type 4609 Paletted with AB colours [W20 H30] 8-Bit coloured Paletted -07A3 (B08514) Type 4609 Paletted with 64 colours [W20 H30] 8-Bit coloured Paletted -07A4 (B08A57) Type 4609 Paletted with 52 colours [W20 H30] 8-Bit coloured Paletted -07A5 (B08F2E) Type 4609 Paletted with 74 colours [W20 H30] 8-Bit coloured Paletted -07A6 (B09491) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -07A7 (B09857) Type 4609 Paletted with 49 colours [W20 H30] 8-Bit coloured Paletted -07A8 (B09C9D) Type 4609 Paletted with 1F colours [W20 H20] 8-Bit coloured Paletted -07A9 (B09F07) Type 4609 Paletted with 9B colours [W20 H30] 8-Bit coloured Paletted -07AA (B0A468) Type 4609 Paletted with 1D colours [W20 H20] 8-Bit coloured Paletted -07AB (B0A6C1) Type 4609 Paletted with FA colours [W20 H30] 8-Bit coloured Paletted -07AC (B0AE18) Type 4609 Paletted with DC colours [W20 H30] 8-Bit coloured Paletted -07AD (B0B52A) Type 4609 Paletted with 45 colours [W20 H30] 8-Bit coloured Paletted -07AE (B0B955) Type 4609 Paletted with 2E colours [W20 H30] 8-Bit coloured Paletted -07AF (B0BAC7) Type 4609 Paletted with 7B colours [W20 H30] 8-Bit coloured Paletted -07B0 (B0BE23) Type 4609 Paletted with B7 colours [W30 H20] 8-Bit coloured Paletted -07B1 (B0C21C) Type 4609 Paletted with E5 colours [W20 H30] 8-Bit coloured Paletted -07B2 (B0C7B0) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07B3 (B0D13A) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07B4 (B0DA45) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07B5 (B0E40A) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07B6 (B0ECED) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07B7 (B0F636) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07B8 (B0FF45) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07B9 (B10951) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07BA (B112B1) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07BB (B11C0D) Type 4609 Paletted with 2E colours [W20 H20] 8-Bit coloured Paletted -07BC (B11DC0) Type 460B Paletted with BD colours [W20 H20] 8-Bit coloured Paletted Transparent -07BD (B121E5) Type 4609 Paletted with E5 colours [W20 H30] 8-Bit coloured Paletted -07BE (B12951) Type 4609 Paletted with E4 colours [W20 H30] 8-Bit coloured Paletted -07BF (B130C6) Type 4609 Paletted with 2D colours [W20 H20] 8-Bit coloured Paletted -07C0 (B13275) Type 4609 Paletted with 18 colours [W20 H20] 8-Bit coloured Paletted -07C1 (B133EB) Type 4609 Paletted with 28 colours [W20 H30] 8-Bit coloured Paletted -07C2 (B136AB) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -07C3 (B13A3F) Type 4609 Paletted with 46 colours [W20 H20] 8-Bit coloured Paletted -07C4 (B13D45) Type 4609 Paletted with 60 colours [W20 H30] 8-Bit coloured Paletted -07C5 (B142A2) Type 4609 Paletted with 5F colours [W20 H30] 8-Bit coloured Paletted -07C6 (B147E0) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -07C7 (B14959) Type 460A Paletted with 0D colours [W20 H20] 4-Bit coloured Paletted -07C8 (B14AD6) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -07C9 (B14C8D) Type 460A Paletted with 0E colours [W20 H20] 4-Bit coloured Paletted -07CA (B14E59) Type 4609 Paletted with 11 colours [W20 H20] 8-Bit coloured Paletted -07CB (B14FDA) Type 4609 Paletted with 15 colours [W10 H20] 8-Bit coloured Paletted -07CC (B150CA) Type 4609 Paletted with 3D colours [W20 H20] 8-Bit coloured Paletted -07CD (B152EA) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07CE (B15C82) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07CF (B16639) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07D0 (B16FA6) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07D1 (B17862) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07D2 (B1811C) Type 4009 Paletted with F7 colours [W20 H40] 8-Bit coloured Paletted -07D3 (B189A0) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07D4 (B192C4) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07D5 (B19AD6) Type 4609 Paletted with 37 colours [W20 H20] 8-Bit coloured Paletted -07D6 (B19D4C) Type 4609 Paletted with 3C colours [W20 H20] 8-Bit coloured Paletted -07D7 (B19EE8) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -07D8 (B19FE6) Type 4609 Paletted with 4D colours [W20 H20] 8-Bit coloured Paletted -07D9 (B1A297) Type 4609 Paletted with 39 colours [W20 H20] 8-Bit coloured Paletted -07DA (B1A500) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07DB (B1AC68) Type 460A Paletted with 06 colours [W20 H30] 4-Bit coloured Paletted -07DC (B1AD21) Type 460A Paletted with 07 colours [W20 H30] 4-Bit coloured Paletted -07DD (B1AE05) Type 460A Paletted with 0D colours [W20 H30] 4-Bit coloured Paletted -07DE (B1AF46) Type 4609 Paletted with 73 colours [W20 H30] 8-Bit coloured Paletted -07DF (B1B255) Type 4609 Paletted with 26 colours [W20 H30] 8-Bit coloured Paletted -07E0 (B1B395) Type 4609 Paletted with 71 colours [W20 H30] 8-Bit coloured Paletted -07E1 (B1B72D) Type 460A Paletted with 0D colours [W20 H30] 4-Bit coloured Paletted -07E2 (B1B8B0) Type 460A Paletted with 0B colours [W20 H30] 4-Bit coloured Paletted -07E3 (B1B9DF) Type 4609 Paletted with 2A colours [W20 H30] 8-Bit coloured Paletted -07E4 (B1BB37) Type 4609 Paletted with 21 colours [W20 H30] 8-Bit coloured Paletted -07E5 (B1BCE5) Type 4609 Paletted with 24 colours [W20 H30] 8-Bit coloured Paletted -07E6 (B1BEBA) Type 460A Paletted with 09 colours [W20 H30] 4-Bit coloured Paletted -07E7 (B1BF7E) Type 4609 Paletted with 43 colours [W20 H30] 8-Bit coloured Paletted -07E8 (B1C316) Type 4609 Paletted with 23 colours [W20 H30] 8-Bit coloured Paletted -07E9 (B1C5D5) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -07EA (B1CD36) Type 4609 Paletted with 31 colours [W20 H30] 8-Bit coloured Paletted -07EB (B1CE54) Type 4609 Paletted with 27 colours [W20 H30] 8-Bit coloured Paletted -07EC (B1D20F) Type 4609 Paletted with E5 colours [W20 H30] 8-Bit coloured Paletted -07ED (B1D863) Type 4609 Paletted with 9B colours [W20 H30] 8-Bit coloured Paletted -07EE (B1DE1A) Type 4609 Paletted with BA colours [W20 H30] 8-Bit coloured Paletted -07EF (B1E489) Type 4609 Paletted with BA colours [W20 H30] 8-Bit coloured Paletted -07F0 (B1EB4C) Type 4609 Paletted with 70 colours [W20 H20] 8-Bit coloured Paletted -07F1 (B1EF4C) Type 4609 Paletted with 36 colours [W30 H20] 8-Bit coloured Paletted -07F2 (B1F254) Type 4609 Paletted with A0 colours [W20 H30] 8-Bit coloured Paletted -07F3 (B1F5D6) Type 4609 Paletted with BF colours [W20 H30] 8-Bit coloured Paletted -07F4 (B1FB7A) Type 4009 Paletted with 39 colours [W20 H20] 8-Bit coloured Paletted -07F5 (B1FE2B) Type 4609 Paletted with A4 colours [W20 H20] 8-Bit coloured Paletted -07F6 (B2026C) Type 4609 Paletted with 45 colours [W20 H20] 8-Bit coloured Paletted -07F7 (B20460) Type 460A Paletted with 09 colours [W20 H30] 4-Bit coloured Paletted -07F8 (B20607) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -07F9 (B20F07) Type 4009 Paletted with C7 colours [W20 H40] 8-Bit coloured Paletted -07FA (B216FB) Type 460A Paletted with 06 colours [W20 H30] 4-Bit coloured Paletted -07FB (B21820) Type 4609 Paletted with 19 colours [W20 H30] 8-Bit coloured Paletted -07FC (B219BA) Type 4009 Paletted with D6 colours [W20 H20] 8-Bit coloured Paletted -07FD (B21F14) Type 4609 Paletted with 3A colours [W20 H30] 8-Bit coloured Paletted -07FE (B22144) Type 4609 Paletted with 65 colours [W20 H30] 8-Bit coloured Paletted -07FF (B22452) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0800 (B22D96) Type 4609 Paletted with 2D colours [W20 H30] 8-Bit coloured Paletted -0801 (B23017) Type 4609 Paletted with 47 colours [W30 H20] 8-Bit coloured Paletted -0802 (B2326C) Type 4009 Paletted with 25 colours [W20 H40] 8-Bit coloured Paletted -0803 (B236BD) Type 4609 Paletted with 82 colours [W20 H30] 8-Bit coloured Paletted -0804 (B23A7B) Type 4609 Paletted with 18 colours [W20 H30] 8-Bit coloured Paletted -0805 (B23C36) Type 4009 Paletted with A6 colours [W20 H40] 8-Bit coloured Paletted -0806 (B24300) Type 4009 Paletted with CD colours [W20 H40] 8-Bit coloured Paletted -0807 (B24AAB) Type 4609 Paletted with B5 colours [W20 H20] 8-Bit coloured Paletted -0808 (B24E72) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0809 (B257E4) Greyscale TableOffsetter 0 [W01 H01] 32-bit RAW RGBA Transparent? -080A (B257F0) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -080B (B25986) Type 4609 Paletted with 13 colours [W20 H30] 8-Bit coloured Paletted -080C (B25C01) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -080D (B25DAB) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -080E (B2672C) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -080F (B27097) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0810 (B2799A) Type 4609 Paletted with 22 colours [W20 H30] 8-Bit coloured Paletted -0811 (B27BDF) Type 460A Paletted with 0E colours [W20 H20] 4-Bit coloured Paletted -0812 (B27D0E) Type 4609 Paletted with 7D colours [W20 H30] 8-Bit coloured Paletted -0813 (B28199) Type 4609 Paletted with 30 colours [W20 H30] 8-Bit coloured Paletted -0814 (B28493) Type 4609 Paletted with 5D colours [W20 H30] 8-Bit coloured Paletted -0815 (B288B9) Type 4609 Paletted with E0 colours [W30 H20] 8-Bit coloured Paletted -0816 (B28EC4) Type 4609 Paletted with C7 colours [W30 H20] 8-Bit coloured Paletted -0817 (B2937F) Type 4609 Paletted with B0 colours [W30 H20] 8-Bit coloured Paletted -0818 (B29709) Type 4609 Paletted with 71 colours [W30 H20] 8-Bit coloured Paletted -0819 (B29B68) Type 4609 Paletted with CC colours [W20 H30] 8-Bit coloured Paletted -081A (B29FFA) Type 4609 Paletted with 5A colours [W20 H20] 8-Bit coloured Paletted -081B (B2A309) Type 4609 Paletted with 60 colours [W20 H30] 8-Bit coloured Paletted -081C (B2A712) Type 4609 Paletted with 8B colours [W20 H30] 8-Bit coloured Paletted -081D (B2AAA8) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -081E (B2B456) Type 4009 Paletted with D1 colours [W20 H40] 8-Bit coloured Paletted -081F (B2BBFE) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0820 (B2C4B0) Type 4609 Paletted with 28 colours [W30 H20] 8-Bit coloured Paletted -0821 (B2C78E) Type 4609 Paletted with 49 colours [W30 H20] 8-Bit coloured Paletted -0822 (B2CB36) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0823 (B2D1EB) Type 4609 Paletted with DB colours [W20 H30] 8-Bit coloured Paletted -0824 (B2D815) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0825 (B2D81C) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0826 (B2D824) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0827 (B2DD01) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0828 (B2DE24) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0829 (B2E1D3) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -082A (B2E2A4) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -082B (B2E729) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -082C (B2E827) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -082D (B2EC4C) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -082E (B2ED26) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -082F (B2F039) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0830 (B2F0B1) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0831 (B2F15B) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0832 (B2F18D) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0833 (B2F558) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0834 (B2F658) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0835 (B2FB04) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0836 (B2FC16) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0837 (B3016B) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0838 (B3028B) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0839 (B3083E) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -083A (B30970) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -083B (B30F5D) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -083C (B3109F) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -083D (B3164A) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -083E (B31781) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -083F (B31D01) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0840 (B31E36) Greyscale TableOffsetter 5 [W38 H38] 8-bit Greyscale Transparent -0841 (B3235C) Greyscale TableOffsetter 1 [W0E H0E] 16-bit ARGB (1555) Transparent? -0842 (B32489) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0843 (B32D82) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0844 (B33648) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0845 (B33E76) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0846 (B3473B) Type 400B Paletted with 1B colours [W20 H40] 8-Bit coloured Paletted Transparent -0847 (B348D7) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0848 (B351D2) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0849 (B35933) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -084A (B35FFE) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -084B (B366F0) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -084C (B36DC3) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -084D (B3754E) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -084E (B37C8A) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -084F (B3841C) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0850 (B38B91) Greyscale TableOffsetter 0 [W10 H20] 32-bit RAW RGBA Transparent? -0851 (B3900E) Greyscale TableOffsetter 5 [W3F H3F] 8-bit Greyscale Transparent -0852 (B39632) Type C00B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0853 (B39C3E) Type C00B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0854 (B3A24A) Type C00B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0855 (B3A856) Type C00B Paletted with FF colours [W20 H20] 8-Bit coloured Paletted Transparent -0856 (B3AE60) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0857 (B3BA27) Greyscale TableOffsetter 0 [W10 H20] 32-bit RAW RGBA Transparent? -0858 (B3BF3B) Greyscale TableOffsetter 5 [W36 H36] 8-bit Greyscale Transparent -0859 (B3C3C2) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -085A (B3CDBF) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -085B (B3D71E) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -085C (B3DEE3) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -085D (B3E78A) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -085E (B3EEE3) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -085F (B3F573) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0860 (B3FBD7) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0861 (B4028A) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0862 (B40A98) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0863 (B41237) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0864 (B419AC) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0865 (B4212B) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0866 (B427E4) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0867 (B42E2A) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0868 (B43473) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0869 (B43AC7) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -086A (B44047) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -086B (B44552) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -086C (B44A57) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -086D (B44F82) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -086E (B457B4) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -086F (B45F9B) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0870 (B4676E) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -0871 (B46EF5) Greyscale TableOffsetter 0 [W07 H16] 32-bit RAW RGBA Transparent? -0872 (B4710F) Greyscale TableOffsetter 0 [W0E H0E] 32-bit RAW RGBA Transparent? -0873 (B473F7) Greyscale TableOffsetter 0 [W0E H12] 32-bit RAW RGBA Transparent? -0874 (B47785) Greyscale TableOffsetter 0 [W05 H0F] 32-bit RAW RGBA Transparent? -0875 (B4781A) Greyscale TableOffsetter 0 [W08 H15] 32-bit RAW RGBA Transparent? -0876 (B47A9D) Greyscale TableOffsetter 0 [W06 H18] 32-bit RAW RGBA Transparent? -0877 (B47C9E) Greyscale TableOffsetter 0 [W06 H14] 32-bit RAW RGBA Transparent? -0878 (B47D2C) Greyscale TableOffsetter 5 [W30 H30] 8-bit Greyscale Transparent -0879 (B48125) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -087A (B48474) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -087B (B48ACC) Type 400B Paletted with DA colours [W20 H20] 8-Bit coloured Paletted Transparent -087C (B48F40) Type 4009 Paletted with 44 colours [W20 H20] 8-Bit coloured Paletted -087D (B4915C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -087E (B49685) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -087F (B49AD5) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0880 (B49F2C) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0881 (B4A113) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0882 (B4A5F4) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0883 (B4A792) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0884 (B4AA16) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0885 (B4ADB1) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0886 (B4B116) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0887 (B4B67B) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0888 (B4BC7C) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -0889 (B4C2C8) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -088A (B4C902) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -088B (B4CF47) Type 400B Paletted with A9 colours [W20 H20] 8-Bit coloured Paletted Transparent -088C (B4D2D4) Type 400B Paletted with 75 colours [W80 H10] 8-Bit coloured Paletted Transparent -088D (B4D66D) Type 400B Paletted with 8D colours [W80 H10] 8-Bit coloured Paletted Transparent -088E (B4DAC9) Type 400B Paletted with 71 colours [W80 H10] 8-Bit coloured Paletted Transparent -088F (B4DE17) Type 400B Paletted with 84 colours [W80 H10] 8-Bit coloured Paletted Transparent -0890 (B4E226) Type 400B Paletted with 94 colours [W80 H10] 8-Bit coloured Paletted Transparent -0891 (B4E651) Type 400B Paletted with 27 colours [W80 H10] 8-Bit coloured Paletted Transparent -0892 (B4E773) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0893 (B4ED58) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0894 (B4F32B) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0895 (B4F8C8) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0896 (B4FE33) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0897 (B503BA) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0898 (B50944) Type 450B Paletted with 62 colours [W10 H10] 8-Bit coloured Paletted Transparent -0899 (B50ABE) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -089A (B510B5) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -089B (B516AB) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -089C (B51C38) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -089D (B5220E) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -089E (B527F8) Type 4609 Paletted with E3 colours [W20 H20] 8-Bit coloured Paletted -089F (B52D1E) Type 400B Paletted with 51 colours [W20 H20] 8-Bit coloured Paletted Transparent -08A0 (B52F09) Type 400B Paletted with 49 colours [W20 H20] 8-Bit coloured Paletted Transparent -08A1 (B530D4) Type 400B Paletted with 56 colours [W20 H20] 8-Bit coloured Paletted Transparent -08A2 (B532C0) Type 460B Paletted with 8D colours [W20 H20] 8-Bit coloured Paletted Transparent -08A3 (B536FC) Type 460B Paletted with 8D colours [W20 H20] 8-Bit coloured Paletted Transparent -08A4 (B53B3E) Type 460B Paletted with 8D colours [W20 H20] 8-Bit coloured Paletted Transparent -08A5 (B53F79) Type 460B Paletted with 8B colours [W20 H20] 8-Bit coloured Paletted Transparent -08A6 (B543B4) Greyscale TableOffsetter 8 [W80 H30] 4-bit Greyscale -08A7 (B54A6A) Type 450B Paletted with 74 colours [W10 H10] 8-Bit coloured Paletted Transparent -08A8 (B54C1A) Type 450B Paletted with 70 colours [W10 H10] 8-Bit coloured Paletted Transparent -08A9 (B54DC9) Type 450B Paletted with 73 colours [W10 H10] 8-Bit coloured Paletted Transparent -08AA (B54F7A) Type 400B Paletted with 4D colours [W20 H20] 8-Bit coloured Paletted Transparent -08AB (B5513C) Type 400B Paletted with 84 colours [W20 H20] 8-Bit coloured Paletted Transparent -08AC (B55457) Type 400B Paletted with 8A colours [W20 H20] 8-Bit coloured Paletted Transparent -08AD (B5578B) Type 400B Paletted with 8F colours [W20 H20] 8-Bit coloured Paletted Transparent -08AE (B55ABB) Type 400B Paletted with 85 colours [W20 H20] 8-Bit coloured Paletted Transparent -08AF (B55E00) Type 400B Paletted with 50 colours [W20 H20] 8-Bit coloured Paletted Transparent -08B0 (B55FC7) Type 400C Paletted with 03 colours [W20 H20] 4-Bit coloured Paletted Transparent -08B1 (B5604F) Type 400C Paletted with 03 colours [W20 H20] 4-Bit coloured Paletted Transparent -08B2 (B56081) Type 400C Paletted with 01 colours [W20 H20] 4-Bit coloured Paletted Transparent -08B3 (B560D5) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -08B4 (B5671E) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -08B5 (B56DCF) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -08B6 (B57484) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -08B7 (B578EC) Greyscale TableOffsetter 0 [W05 H0C] 32-bit RAW RGBA Transparent? -08B8 (B579A6) Greyscale TableOffsetter 0 [W05 H1C] 32-bit RAW RGBA Transparent? -08B9 (B57B31) Greyscale TableOffsetter 0 [W05 H0C] 32-bit RAW RGBA Transparent? -08BA (B57BC0) Greyscale TableOffsetter 0 [W0E H0E] 32-bit RAW RGBA Transparent? -08BB (B57E9F) Greyscale TableOffsetter 0 [W0E H0E] 32-bit RAW RGBA Transparent? -08BC (B58180) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -08BD (B58583) Greyscale TableOffsetter 0 [W20 H20] 32-bit RAW RGBA Transparent? -08BE (B58731) Greyscale TableOffsetter 0 [W0E H0E] 32-bit RAW RGBA Transparent? -08BF (B58A11) Type C009 Paletted with FF colours [W40 H20] 8-Bit coloured Paletted -08C0 (B593F2) Type C009 Paletted with FF colours [W40 H20] 8-Bit coloured Paletted -08C1 (B59DE5) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -08C2 (B5A39A) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -08C3 (B5A85E) Type 4609 Paletted with E4 colours [W20 H20] 8-Bit coloured Paletted -08C4 (B5ACB6) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08C5 (B5B433) Greyscale TableOffsetter 7 [W40 H40] 8-bit Greyscale -08C6 (B5C005) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08C7 (B5C9D4) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08C8 (B5D057) Type 4609 Paletted with 7D colours [W20 H20] 8-Bit coloured Paletted -08C9 (B5D3C7) Greyscale TableOffsetter 7 [W40 H40] 8-bit Greyscale -08CA (B5E052) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -08CB (B5E62D) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -08CC (B5EC11) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -08CD (B5F1A5) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -08CE (B5F740) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08CF (B5FB52) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -08D0 (B5FD30) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -08D1 (B6000B) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -08D2 (B60336) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -08D3 (B60692) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -08D4 (B60945) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08D5 (B6117F) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -08D6 (B6171D) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08D7 (B61E07) Greyscale TableOffsetter 5 [W36 H36] 8-bit Greyscale Transparent -08D8 (B61FB1) Type 4609 Paletted with 45 colours [W20 H20] 8-Bit coloured Paletted -08D9 (B62301) Type 4609 Paletted with 98 colours [W20 H20] 8-Bit coloured Paletted -08DA (B6279C) Type C609 Paletted with C1 colours [W40 H11] 8-Bit coloured Paletted -08DB (B62E9C) Type C609 Paletted with EC colours [W40 H11] 8-Bit coloured Paletted -08DC (B6366B) Type C609 Paletted with FF colours [W40 H11] 8-Bit coloured Paletted -08DD (B63E36) Type C609 Paletted with BF colours [W40 H11] 8-Bit coloured Paletted -08DE (B6450B) Type C609 Paletted with 6A colours [W40 H11] 8-Bit coloured Paletted -08DF (B649FF) Type C609 Paletted with 57 colours [W40 H11] 8-Bit coloured Paletted -08E0 (B64EAC) Type 4609 Paletted with 37 colours [W20 H20] 8-Bit coloured Paletted -08E1 (B650BC) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -08E2 (B653FE) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -08E3 (B654A5) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -08E4 (B65665) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08E5 (B659B8) Type 4609 Paletted with 69 colours [W20 H20] 8-Bit coloured Paletted -08E6 (B65DC4) Type 4609 Paletted with AE colours [W20 H20] 8-Bit coloured Paletted -08E7 (B6617E) Type 4009 Paletted with 66 colours [W20 H20] 8-Bit coloured Paletted -08E8 (B6657E) Greyscale TableOffsetter 7 [W40 H40] 8-bit Greyscale -08E9 (B673BC) Type 4009 Paletted with 47 colours [W40 H20] 8-Bit coloured Paletted -08EA (B677DE) Type 4009 Paletted with 66 colours [W20 H20] 8-Bit coloured Paletted -08EB (B67BDE) Type 4009 Paletted with 29 colours [W20 H20] 8-Bit coloured Paletted -08EC (B67E73) Greyscale TableOffsetter 5 [W40 H40] 8-bit Greyscale Transparent -08ED (B68448) Type 4609 Paletted with 18 colours [W20 H20] 8-Bit coloured Paletted -08EE (B6866B) Type C009 Paletted with 1A colours [W20 H20] 8-Bit coloured Paletted -08EF (B688C3) Type C009 Paletted with 19 colours [W20 H20] 8-Bit coloured Paletted -08F0 (B68B05) Type C009 Paletted with 14 colours [W20 H20] 8-Bit coloured Paletted -08F1 (B68CBF) Type C009 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -08F2 (B68E92) Type 450B Paletted with 39 colours [W10 H10] 8-Bit coloured Paletted Transparent -08F3 (B68F8E) Type 450B Paletted with 80 colours [W10 H10] 8-Bit coloured Paletted Transparent -08F4 (B6917C) Type 450B Paletted with 67 colours [W10 H10] 8-Bit coloured Paletted Transparent -08F5 (B69336) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08F6 (B69521) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -08F7 (B6975F) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08F8 (B69CC2) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -08F9 (B69E7D) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -08FA (B6A00A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -08FB (B6A28A) Type 4609 Paletted with 12 colours [W20 H20] 8-Bit coloured Paletted -08FC (B6A327) Type 4609 Paletted with 4D colours [W20 H20] 8-Bit coloured Paletted -08FD (B6A63B) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -08FE (B6AA02) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -08FF (B6AF63) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0900 (B6B346) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0901 (B6B825) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0902 (B6BC51) Type 4609 Paletted with FB colours [W20 H20] 8-Bit coloured Paletted -0903 (B6C255) Type 4609 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -0904 (B6C346) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0905 (B6C67D) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0906 (B6CAC7) Type 4609 Paletted with C2 colours [W20 H20] 8-Bit coloured Paletted -0907 (B6CFC6) Type 460A Paletted with 0C colours [W20 H20] 4-Bit coloured Paletted -0908 (B6D15D) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0909 (B6D45C) Type 4609 Paletted with 1B colours [W20 H20] 8-Bit coloured Paletted -090A (B6D708) Type 4609 Paletted with 32 colours [W20 H20] 8-Bit coloured Paletted -090B (B6DA0E) Type 4609 Paletted with 6F colours [W20 H20] 8-Bit coloured Paletted -090C (B6DDF2) Type 4609 Paletted with 75 colours [W20 H20] 8-Bit coloured Paletted -090D (B6E07B) Type 4609 Paletted with 1C colours [W20 H20] 8-Bit coloured Paletted -090E (B6E315) Type 4609 Paletted with 9D colours [W20 H20] 8-Bit coloured Paletted -090F (B6E7C4) Type 4609 Paletted with 79 colours [W20 H20] 8-Bit coloured Paletted -0910 (B6EC03) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -0911 (B6EFF3) Type 4609 Paletted with AF colours [W20 H20] 8-Bit coloured Paletted -0912 (B6F3E7) Type 4609 Paletted with 8D colours [W20 H20] 8-Bit coloured Paletted -0913 (B6F806) Type 4609 Paletted with 71 colours [W20 H20] 8-Bit coloured Paletted -0914 (B6FBCC) Type 4609 Paletted with AE colours [W20 H20] 8-Bit coloured Paletted -0915 (B6FFE9) Type 4609 Paletted with 7A colours [W20 H20] 8-Bit coloured Paletted -0916 (B702B9) Type 4609 Paletted with 75 colours [W20 H20] 8-Bit coloured Paletted -0917 (B7054C) Type 4609 Paletted with A7 colours [W20 H20] 8-Bit coloured Paletted -0918 (B70932) Type 4609 Paletted with 49 colours [W20 H20] 8-Bit coloured Paletted -0919 (B70B40) Type 4609 Paletted with BC colours [W20 H20] 8-Bit coloured Paletted -091A (B70EB7) Type 4609 Paletted with BC colours [W20 H20] 8-Bit coloured Paletted -091B (B71252) Type 4609 Paletted with FC colours [W20 H20] 8-Bit coloured Paletted -091C (B7176E) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -091D (B71A20) Type 4609 Paletted with A5 colours [W20 H20] 8-Bit coloured Paletted -091E (B71F24) Type 4609 Paletted with DA colours [W20 H20] 8-Bit coloured Paletted -091F (B724D1) Type 4609 Paletted with 95 colours [W20 H20] 8-Bit coloured Paletted -0920 (B727B4) Type 4609 Paletted with BA colours [W20 H20] 8-Bit coloured Paletted -0921 (B72BB3) Type 4609 Paletted with 5B colours [W20 H20] 8-Bit coloured Paletted -0922 (B72D5A) Type 4609 Paletted with AE colours [W20 H20] 8-Bit coloured Paletted -0923 (B7301C) Type 4609 Paletted with 16 colours [W20 H20] 8-Bit coloured Paletted -0924 (B73109) Type 4609 Paletted with 55 colours [W20 H20] 8-Bit coloured Paletted -0925 (B733DB) Type 4609 Paletted with D6 colours [W20 H20] 8-Bit coloured Paletted -0926 (B738DF) Type 4009 Paletted with 73 colours [W20 H20] 8-Bit coloured Paletted -0927 (B73D1C) Type 4609 Paletted with 69 colours [W20 H20] 8-Bit coloured Paletted -0928 (B74135) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0929 (B743EA) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -092A (B749F6) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -092B (B74C93) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -092C (B75181) Type 4609 Paletted with D4 colours [W20 H20] 8-Bit coloured Paletted -092D (B75672) Type 4609 Paletted with 5E colours [W20 H20] 8-Bit coloured Paletted -092E (B758A8) Type 4609 Paletted with 5A colours [W20 H20] 8-Bit coloured Paletted -092F (B75BFC) Type 4609 Paletted with 5D colours [W20 H20] 8-Bit coloured Paletted -0930 (B75E8A) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0931 (B76284) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0932 (B76756) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -0933 (B76CDA) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0934 (B770D8) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0935 (B77583) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0936 (B779F7) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0937 (B77E67) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0938 (B782A7) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -0939 (B78773) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -093A (B78C42) Type 4609 Paletted with 98 colours [W20 H20] 8-Bit coloured Paletted -093B (B790E9) Type 4609 Paletted with 24 colours [W20 H20] 8-Bit coloured Paletted -093C (B79273) Type 4609 Paletted with 28 colours [W20 H20] 8-Bit coloured Paletted -093D (B79419) Type 4609 Paletted with 23 colours [W20 H20] 8-Bit coloured Paletted -093E (B79563) Type 4609 Paletted with 71 colours [W20 H20] 8-Bit coloured Paletted -093F (B798E6) Type 4609 Paletted with 2C colours [W20 H20] 8-Bit coloured Paletted -0940 (B79AE2) Type 4609 Paletted with 25 colours [W20 H20] 8-Bit coloured Paletted -0941 (B79C67) Type 4609 Paletted with 69 colours [W20 H20] 8-Bit coloured Paletted -0942 (B7A038) Type 4609 Paletted with 99 colours [W20 H20] 8-Bit coloured Paletted -0943 (B7A4EC) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0944 (B7AA61) Type 4609 Paletted with 8C colours [W20 H30] 8-Bit coloured Paletted -0945 (B7AE6E) Type 4609 Paletted with FF colours [W20 H30] 8-Bit coloured Paletted -0946 (B7B661) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0947 (B7BC8E) Type 4609 Paletted with 58 colours [W20 H20] 8-Bit coloured Paletted -0948 (B7BF9A) Type 4609 Paletted with 70 colours [W20 H20] 8-Bit coloured Paletted -0949 (B7C3B0) Type 4609 Paletted with 84 colours [W20 H20] 8-Bit coloured Paletted -094A (B7C7F4) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -094B (B7C99E) Type 4609 Paletted with 66 colours [W20 H20] 8-Bit coloured Paletted -094C (B7CBBF) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -094D (B7D207) Type 4609 Paletted with C8 colours [W20 H20] 8-Bit coloured Paletted -094E (B7D627) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -094F (B7DA24) Type 4609 Paletted with 67 colours [W20 H20] 8-Bit coloured Paletted -0950 (B7DE27) Type 4609 Paletted with 76 colours [W20 H20] 8-Bit coloured Paletted -0951 (B7E22F) Type 4609 Paletted with 83 colours [W20 H20] 8-Bit coloured Paletted -0952 (B7E684) Type 4609 Paletted with 73 colours [W20 H20] 8-Bit coloured Paletted -0953 (B7EA80) Type 4609 Paletted with A9 colours [W20 H20] 8-Bit coloured Paletted -0954 (B7EE88) Type 4609 Paletted with 70 colours [W20 H20] 8-Bit coloured Paletted -0955 (B7F19B) Type 4609 Paletted with 50 colours [W20 H20] 8-Bit coloured Paletted -0956 (B7F4C8) Type 4609 Paletted with 7D colours [W20 H20] 8-Bit coloured Paletted -0957 (B7F743) Type 4609 Paletted with 76 colours [W20 H20] 8-Bit coloured Paletted -0958 (B7F9F8) Type 4609 Paletted with F7 colours [W20 H20] 8-Bit coloured Paletted -0959 (B7FF12) Type 4609 Paletted with 9C colours [W20 H20] 8-Bit coloured Paletted -095A (B802F6) Type 4609 Paletted with 68 colours [W20 H20] 8-Bit coloured Paletted -095B (B80589) Type 4609 Paletted with 58 colours [W20 H20] 8-Bit coloured Paletted -095C (B80915) Type 4609 Paletted with B8 colours [W20 H20] 8-Bit coloured Paletted -095D (B80DA8) Type 4609 Paletted with 51 colours [W20 H20] 8-Bit coloured Paletted -095E (B810BE) Type 4609 Paletted with 54 colours [W20 H20] 8-Bit coloured Paletted -095F (B81398) Type 4609 Paletted with 75 colours [W20 H20] 8-Bit coloured Paletted -0960 (B8164E) Type 4609 Paletted with 81 colours [W20 H20] 8-Bit coloured Paletted -0961 (B81952) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0962 (B81BE0) Type 4609 Paletted with 5B colours [W20 H20] 8-Bit coloured Paletted -0963 (B81F5F) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0964 (B8256B) Type 4709 Paletted with FF colours [W10 H40] 8-Bit coloured Paletted -0965 (B82B77) Type 4609 Paletted with 6A colours [W20 H20] 8-Bit coloured Paletted -0966 (B82F35) Type 4709 Paletted with FF colours [W10 H40] 8-Bit coloured Paletted -0967 (B83541) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0968 (B83795) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0969 (B83C5E) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -096A (B8426A) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -096B (B848A9) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -096C (B84E9A) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -096D (B85599) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -096E (B85BD3) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -096F (B85EBD) Type 4609 Paletted with 84 colours [W20 H20] 8-Bit coloured Paletted -0970 (B862DC) Type 4609 Paletted with B7 colours [W20 H20] 8-Bit coloured Paletted -0971 (B86619) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0972 (B869BE) Type 4609 Paletted with 52 colours [W20 H20] 8-Bit coloured Paletted -0973 (B86CEC) Type 4609 Paletted with B3 colours [W20 H20] 8-Bit coloured Paletted -0974 (B870E6) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0975 (B87447) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0976 (B87B61) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0977 (B882F5) Type C609 Paletted with FF colours [W21 H21] 8-Bit coloured Paletted -0978 (B88997) Type 4609 Paletted with 58 colours [W20 H30] 8-Bit coloured Paletted -0979 (B88BB8) Type 4609 Paletted with 7F colours [W20 H20] 8-Bit coloured Paletted -097A (B88FB0) Type 4609 Paletted with 36 colours [W20 H20] 8-Bit coloured Paletted -097B (B892CC) Type 4009 Paletted with 13 colours [W20 H20] 8-Bit coloured Paletted -097C (B894BD) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -097D (B8957F) Greyscale TableOffsetter 5 [W10 H80] 8-bit Greyscale Transparent -097E (B89789) Greyscale TableOffsetter 4 [W40 H20] 16-bit Greyscale -097F (B89D52) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0980 (B89DFD) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0981 (B89F33) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0982 (B8A289) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0983 (B8A59A) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0984 (B8AB67) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0985 (B8AD48) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0986 (B8B09B) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0987 (B8B3A2) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -0988 (B8B51C) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0989 (B8BAD5) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -098A (B8BE11) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -098B (B8C185) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -098C (B8C57A) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -098D (B8C9E6) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -098E (B8CCE8) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -098F (B8D18E) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0990 (B8D53F) Type 4609 Paletted with AE colours [W20 H20] 8-Bit coloured Paletted -0991 (B8D7E8) Type 4609 Paletted with 9E colours [W20 H20] 8-Bit coloured Paletted -0992 (B8DA0B) Type 4609 Paletted with 24 colours [W20 H20] 8-Bit coloured Paletted -0993 (B8DAB0) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -0994 (B8DF42) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -0995 (B8E006) Type 4609 Paletted with 27 colours [W20 H20] 8-Bit coloured Paletted -0996 (B8E1C2) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0997 (B8E5FB) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0998 (B8E8F7) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -0999 (B8EBFF) Type 4609 Paletted with 10 colours [W20 H20] 8-Bit coloured Paletted -099A (B8EC54) Type 4609 Paletted with 58 colours [W20 H20] 8-Bit coloured Paletted -099B (B8EE63) Type 460A Paletted with 0F colours [W20 H20] 4-Bit coloured Paletted -099C (B8EF6F) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -099D (B8F0E0) Type 4609 Paletted with BC colours [W20 H20] 8-Bit coloured Paletted -099E (B8F48E) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -099F (B8FBA2) Greyscale TableOffsetter 8 [W80 H10] 4-bit Greyscale -09A0 (B8FC58) Type 400B Paletted with 42 colours [W07 H16] 8-Bit coloured Paletted Transparent -09A1 (B8FD39) Greyscale TableOffsetter 5 [W20 H20] 8-bit Greyscale Transparent -09A2 (B8FF4C) Type 4609 Paletted with 30 colours [W20 H20] 8-Bit coloured Paletted -09A3 (B901BC) Greyscale TableOffsetter 7 [W20 H40] 8-bit Greyscale -09A4 (B90723) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -09A5 (B90C16) Type 460A Paletted with 0C colours [W20 H20] 4-Bit coloured Paletted -09A6 (B90D70) Type 4609 Paletted with 17 colours [W20 H20] 8-Bit coloured Paletted -09A7 (B90F12) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -09A8 (B91164) Type 4609 Paletted with 41 colours [W20 H20] 8-Bit coloured Paletted -09A9 (B913EC) Type 4609 Paletted with 54 colours [W20 H20] 8-Bit coloured Paletted -09AA (B91747) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -09AB (B91C5B) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -09AC (B91E91) Type 400B Paletted with FF colours [W20 H40] 8-Bit coloured Paletted Transparent -09AD (B926C9) Type 460B Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted Transparent -09AE (B92A75) Type 4609 Paletted with 82 colours [W20 H20] 8-Bit coloured Paletted -09AF (B92DCD) Type 4609 Paletted with 76 colours [W20 H20] 8-Bit coloured Paletted -09B0 (B930C1) Type 4609 Paletted with 5D colours [W20 H20] 8-Bit coloured Paletted -09B1 (B9327F) Type 4609 Paletted with 16 colours [W20 H20] 8-Bit coloured Paletted -09B2 (B933F1) Type 4609 Paletted with 4F colours [W20 H20] 8-Bit coloured Paletted -09B3 (B9373E) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -09B4 (B93C98) Type 4609 Paletted with E5 colours [W20 H20] 8-Bit coloured Paletted -09B5 (B9422B) Type 4609 Paletted with 57 colours [W20 H20] 8-Bit coloured Paletted -09B6 (B9450D) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -09B7 (B9475C) Type 4609 Paletted with 31 colours [W20 H20] 8-Bit coloured Paletted -09B8 (B94A37) Type 4609 Paletted with CD colours [W20 H20] 8-Bit coloured Paletted -09B9 (B94F26) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -09BA (B953F6) Type 4609 Paletted with 49 colours [W20 H20] 8-Bit coloured Paletted -09BB (B95753) Type 4009 Paletted with 93 colours [W20 H20] 8-Bit coloured Paletted -09BC (B95AE4) Greyscale TableOffsetter 0 [W16 H16] 32-bit RAW RGBA Transparent? -09BD (B95AF3) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -09BE (B96045) Type 4609 Paletted with 54 colours [W20 H20] 8-Bit coloured Paletted -09BF (B9621D) Type 4609 Paletted with FF colours [W20 H20] 8-Bit coloured Paletted -09C0 (B9672A) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -09C1 (B96CD2) Greyscale TableOffsetter 6 [W40 H40] 4-bit Greyscale Transparent -09C2 (B971A9) Type 4609 Paletted with 63 colours [W20 H20] 8-Bit coloured Paletted -09C3 (B97533) Type 4609 Paletted with 35 colours [W20 H20] 8-Bit coloured Paletted -09C4 (B97816) Type 4609 Paletted with 9F colours [W20 H20] 8-Bit coloured Paletted -09C5 (B97C80) Type 4609 Paletted with A2 colours [W20 H20] 8-Bit coloured Paletted -09C6 (B980AF) Type 4609 Paletted with 6F colours [W20 H20] 8-Bit coloured Paletted -09C7 (B98440) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -09C8 (B98D58) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -09C9 (B99604) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -09CA (B99F28) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -09CB (B9A8B3) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -09CC (B9B26E) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -09CD (B9BC09) Type 4609 Paletted with E7 colours [W20 H20] 8-Bit coloured Paletted -09CE (B9C1C6) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09CF (B9C5CC) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D0 (B9C9F5) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D1 (B9CE5E) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D2 (B9D2B5) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D3 (B9D631) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D4 (B9DB66) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D5 (B9E2CF) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D6 (B9EA7F) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D7 (B9F216) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D8 (B9F90A) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09D9 (B9FEE9) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09DA (BA0630) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09DB (BA0E5F) Greyscale TableOffsetter 3 [W80 H0C] 16-bit ARGB (1555) -09DC (BA17E9) Type C309 Paletted with FF colours [W80 H0C] 8-Bit coloured Paletted -09DD (BA2103) Type C009 Paletted with E3 colours [W80 H0C] 8-Bit coloured Paletted -09DE (BA27F8) Type C709 Paletted with 1B colours [W80 H0B] 8-Bit coloured Paletted -09DF (BA2BCC) Type C709 Paletted with 27 colours [W80 H0B] 8-Bit coloured Paletted -09E0 (BA301E) Type C709 Paletted with 50 colours [W80 H0B] 8-Bit coloured Paletted -09E1 (BA3505) Type C709 Paletted with B0 colours [W80 H0B] 8-Bit coloured Paletted -09E2 (BA3D0C) Type C709 Paletted with A6 colours [W80 H0B] 8-Bit coloured Paletted -09E3 (BA44B5) Type C309 Paletted with 88 colours [W80 H0B] 8-Bit coloured Paletted -09E4 (BA4B54) Type C309 Paletted with FF colours [W80 H0B] 8-Bit coloured Paletted -09E5 (BA5421) Type C009 Paletted with FF colours [W80 H0B] 8-Bit coloured Paletted -09E6 (BA5B1B) Greyscale TableOffsetter 5 [W40 H20] 8-bit Greyscale Transparent -09E7 (BA5E21) Type 4609 Paletted with 81 colours [W20 H20] 8-Bit coloured Paletted -09E8 (BA626C) Greyscale TableOffsetter 7 [W40 H20] 8-bit Greyscale -09E9 (BA667E) Greyscale TableOffsetter 5 [WBD H20] 8-bit Greyscale Transparent -09EA (BA6E69) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09EB (BA778E) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09EC (BA80E7) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09ED (BA8A88) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09EE (BA93D8) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09EF (BA9B56) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F0 (BAA584) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F1 (BAAE4F) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F2 (BAB76D) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F3 (BAC07C) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F4 (BAC964) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F5 (BAD10D) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F6 (BADAED) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F7 (BAE3A8) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F8 (BAECBB) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09F9 (BAF370) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09FA (BAFBAD) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09FB (BB040A) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09FC (BB0C4A) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09FD (BB1274) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09FE (BB18EB) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -09FF (BB1CF2) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A00 (BB25A9) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A01 (BB2E96) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A02 (BB37CA) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A03 (BB3EFA) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A04 (BB45FB) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A05 (BB4D80) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A06 (BB55E2) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A07 (BB5D7B) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A08 (BB65E9) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A09 (BB6D04) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A0A (BB72F7) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A0B (BB7A2A) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A0C (BB8182) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A0D (BB8BA9) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A0E (BB964D) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A0F (BB9DAE) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A10 (BBA4A2) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A11 (BBAAD4) Greyscale TableOffsetter 8 [W80 H40] 4-bit Greyscale -0A12 (BBB15F) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A13 (BBBADC) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A14 (BBC50A) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A15 (BBCEA2) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A16 (BBD850) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A17 (BBE1F5) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A18 (BBEAA2) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A19 (BBF43A) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A1A (BBFC56) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A1B (BC0544) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A1C (BC0D21) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A1D (BC15A5) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A1E (BC1F1E) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A1F (BC2782) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A20 (BC30A1) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A21 (BC3957) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A22 (BC40AF) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A23 (BC48E2) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A24 (BC5350) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A25 (BC5B87) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A26 (BC646D) Greyscale TableOffsetter 6 [W41 H41] 4-bit Greyscale Transparent -0A27 (BC6996) Greyscale TableOffsetter 6 [W41 H41] 4-bit Greyscale Transparent -0A28 (BC6EB4) Greyscale TableOffsetter 6 [W41 H41] 4-bit Greyscale Transparent -0A29 (BC7438) Greyscale TableOffsetter 6 [W41 H41] 4-bit Greyscale Transparent -0A2A (BC79DE) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A2B (BC7F5D) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A2C (BC855A) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A2D (BC8A24) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A2E (BC902F) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A2F (BC9595) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A30 (BC9B41) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A31 (BC9FC6) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A32 (BCA6AA) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A33 (BCABB4) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A34 (BCB11C) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A35 (BCB732) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A36 (BCBCD1) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A37 (BCC265) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A38 (BCC723) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A39 (BCCC6F) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A3A (BCD182) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A3B (BCD8BF) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A3C (BCDFA1) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A3D (BCE695) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A3E (BCED73) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A3F (BCF3E2) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A40 (BCFAA6) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A41 (BD0041) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A42 (BD079B) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0A43 (BD0B3E) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A44 (BD11B8) Greyscale TableOffsetter 5 [W5F H20] 8-bit Greyscale Transparent -0A45 (BD18AA) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0A46 (BD1B34) Greyscale TableOffsetter 8 [W40 H40] 4-bit Greyscale -0A47 (BD2076) Type 400C Paletted with 03 colours [W10 H10] 4-Bit coloured Paletted Transparent -0A48 (BD20AB) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A49 (BD2563) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A4A (BD2A86) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A4B (BD2FAD) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A4C (BD35A7) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A4D (BD3BBB) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A4E (BD40C4) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A4F (BD465C) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A50 (BD4C17) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A51 (BD50FE) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A52 (BD55EB) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A53 (BD59FE) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A54 (BD5E30) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A55 (BD630A) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A56 (BD681E) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A57 (BD6CC9) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A58 (BD7198) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A59 (BD76EA) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A5A (BD7BA6) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A5B (BD80DC) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A5C (BD86EB) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A5D (BD8C2E) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A5E (BD917C) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A5F (BD9639) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A60 (BD9AFC) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A61 (BD9FCF) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A62 (BDA458) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A63 (BDAAEF) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A64 (BDB131) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A65 (BDB698) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A66 (BDBBB4) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A67 (BDC0F1) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A68 (BDC65E) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A69 (BDCBBC) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A6A (BDD017) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A6B (BDD5BC) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A6C (BDDB67) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A6D (BDE0BB) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A6E (BDE5D1) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A6F (BDEB50) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A70 (BDF00C) Type 470B Paletted with 30 colours [W40 H01] 8-Bit coloured Paletted Transparent -0A71 (BDF0AC) Type 450B Paletted with 3E colours [W10 H10] 8-Bit coloured Paletted Transparent -0A72 (BDF1A4) Type 4609 Paletted with 78 colours [W20 H20] 8-Bit coloured Paletted -0A73 (BDF53B) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0A74 (BDF5F7) Type 4609 Paletted with 84 colours [W20 H20] 8-Bit coloured Paletted -0A75 (BDFA2C) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0A76 (BE0438) Type 4009 Paletted with FF colours [W40 H20] 8-Bit coloured Paletted -0A77 (BE0B6D) Greyscale TableOffsetter 5 [W20 H40] 8-bit Greyscale Transparent -0A78 (BE0E43) Type 4009 Paletted with FF colours [W20 H40] 8-Bit coloured Paletted -0A79 (BE1721) Type 4609 Paletted with 6B colours [W10 H20] 8-Bit coloured Paletted -0A7A (BE1998) Greyscale TableOffsetter 8 [W41 H43] 4-bit Greyscale -0A7B (BE1D4B) Greyscale TableOffsetter 8 [W41 H43] 4-bit Greyscale -0A7C (BE20FF) Greyscale TableOffsetter 8 [W41 H43] 4-bit Greyscale -0A7D (BE23C0) Greyscale TableOffsetter 8 [W41 H43] 4-bit Greyscale -0A7E (BE2684) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A7F (BE2FFA) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A80 (BE39C2) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A81 (BE43FB) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A82 (BE4C6A) Type 4609 Paletted with 87 colours [W20 H20] 8-Bit coloured Paletted -0A83 (BE4FEA) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A84 (BE552E) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A85 (BE5A41) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A86 (BE5F43) Greyscale TableOffsetter 8 [W41 H41] 4-bit Greyscale -0A87 (BE6427) Greyscale TableOffsetter 7 [W44 H2C] 8-bit Greyscale -0A88 (BE65CA) Type 4609 Paletted with 11 colours [W20 H20] 8-Bit coloured Paletted -0A89 (BE67CB) Type 4609 Paletted with C5 colours [W20 H20] 8-Bit coloured Paletted diff --git a/notes/GE Documentation/images text and font/inline image errors.txt b/notes/GE Documentation/images text and font/inline image errors.txt deleted file mode 100644 index b795b87..0000000 --- a/notes/GE Documentation/images text and font/inline image errors.txt +++ /dev/null @@ -1,23 +0,0 @@ -Inline images break the game when shot because no code exists to accept them when determining bullet impact images. -It presumes that the data is already expanded, but in this case it isn't. Otherwise, any normal call would have worked. -Instead, need to test if data is expanded, and if not handle. This is probably going to be really annoying. - - - -BEQ S5,T2,7F04D8A4 -NOP -BNEL AT,R0,7F04D88C -LBU T2,FFF8 (V0) -//7F04D8A4: -MUL.S F6,F14,F14 -BNEL V0,S3,7F04D8BC -LW V1,0004 (V0) //V1=image ID or offset to image -BEQ R0,R0,7F04D8CC -ADDIU A0,R0,FFFF -//7F04D8B8: the culprit himself! -LW V1,0004 (V0) //V1=image ID or offset to image -LUI AT,8000 -ADDIU V1,V1,FFF8 //ID-8 (accounts for the image header?) -OR T1,V1,AT -LHU A0,0000 (T1) //A0= -//7F04D8CC: \ No newline at end of file diff --git a/notes/GE Documentation/images text and font/load global image bank.txt b/notes/GE Documentation/images text and font/load global image bank.txt deleted file mode 100644 index 5eba274..0000000 --- a/notes/GE Documentation/images text and font/load global image bank.txt +++ /dev/null @@ -1,379 +0,0 @@ -7F0CBFB0 100AE0 load and prepare global image bank -ADDIU SP,SP,FFD8 -LUI T6,0200 -LUI T7,0200 -SW S0,0014 (SP) -ADDIU T7,T7,0000 ;T7=02000000: base v.address -ADDIU T6,T6,1400 ;T6=02001400: final v.address -SW RA,0024 (SP) -SUBU S0,T6,T7 ;S0=1400: size of block -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -ADDIU A0,S0,1000 ;A0=2400: size of block + 0x1000 command doohick -JAL 70009720 ;V0=p->A0 bytes allocated in bank A1 -ADDIU A1,R0,0004 ;A1= bank 4 -//7F0CBFE8: load data and set pointers -LUI S1,8009 -ADDIU S1,S1,D0B4 ;S1=8008D0B4: -ADDIU T9,V0,0FFF ;T9=801649E0-FFF: 801659DF - actual end of block? -ADDIU AT,R0,F000 -SW V0,0000 (S1) ;801649E0 -> 8008D0B4 -AND A0,T9,AT ;A0=801659DF & FFFFF000: 80165000 -LUI A1,002A -SW A0,0000 (S1) ;8008D0B4= p->explosion DLs -ADDIU A1,A1,D160 ;A1=0x29D160: ROM address of global image table -JAL 70005C1C ;loads A2 bytes from ROM address A1 to A0 -OR A2,S0,R0 ;A2=S0: size -LW T1,0000 (S1) -LUI AT,FE00 -LUI S0,8009 -ADDU V0,T1,AT -LUI T3,0200 -ADDIU S0,S0,D0B0 ;S0=8008D0B0 -ADDIU T3,T3,0AC8 -SW V0,0000 (S0) ;V0->8008D0B0: conversion value for global bank -> rdram address -ADDU T4,V0,T3 -LUI AT,8009 -LUI T5,0200 -SW T4,D0B8 (AT) ;8008D0B8= conversion+02000AC8: default impact image -ADDIU T5,T5,0AD4 -ADDU T6,V0,T5 -LUI AT,8009 -SW T6,D0BC (AT) ;8008D0BC= conversion+02000AD4: impact images -LUI T7,0200 -LUI T9,0200 -LUI S2,8009 -LUI S3,8009 -ADDIU T7,T7,0BC4 -ADDIU T9,T9,0C0C -LUI T1,0200 -ADDIU S3,S3,D0C4 -ADDIU S2,S2,D0C0 -ADDU T8,V0,T7 -ADDU T0,V0,T9 -ADDIU T1,T1,0C48 -SW T8,0000 (S2) ;8008D0C0= conversion+02000BC4: explosions and smoke -SW T0,0000 (S3) ;8008D0C4= conversion+02000C0C: scattered explosions -ADDU T2,V0,T1 -LUI AT,8009 -LUI T3,0200 -SW T2,D0C8 (AT) ;8008D0C8= conversion+02000C48: flare 1 -ADDIU T3,T3,0C54 -ADDU T4,V0,T3 -LUI AT,8009 -LUI T5,0200 -SW T4,D0CC (AT) ;8008D0CC= conversion+02000C54: flare 2 -ADDIU T5,T5,0C60 -ADDU T6,V0,T5 -LUI AT,8009 -LUI T7,0200 -SW T6,D0D0 (AT) ;8008D0D0= conversion+02000C60: flare 3 -ADDIU T7,T7,0C6C -ADDU T8,V0,T7 -LUI AT,8009 -LUI T9,0200 -SW T8,D0D4 (AT) ;8008D0D4= conversion+02000C6C: flare 4 -ADDIU T9,T9,0C78 -ADDU T0,V0,T9 -LUI AT,8009 -LUI T1,0200 -SW T0,D0D8 (AT) ;8008D0D8= conversion+02000C78: flare 5 -ADDIU T1,T1,0C84 -ADDU T2,V0,T1 -LUI AT,8009 -LUI T3,0200 -SW T2,D0DC (AT) ;8008D0DC= conversion+02000C84: 9mm ammo counter -ADDIU T3,T3,0C90 -ADDU T4,V0,T3 -LUI AT,8009 -LUI T5,0200 -SW T4,D0E0 (AT) ;8008D0E0= conversion+02000C90: rifle ammo counter -ADDIU T5,T5,0C9C -ADDU T6,V0,T5 -LUI AT,8009 -LUI T7,0200 -SW T6,D0E4 (AT) ;8008D0E4= conversion+02000C9C: shotgun shell ammo counter -ADDIU T7,T7,0CA8 -ADDU T8,V0,T7 -LUI AT,8009 -LUI T9,0200 -SW T8,D0E8 (AT) ;8008D0E8= conversion+02000CA8: knife ammo counter -ADDIU T9,T9,0CB4 -ADDU T0,V0,T9 -LUI AT,8009 -LUI T1,0200 -SW T0,D0EC (AT) ;8008D0EC= conversion+02000CB4: grenade launcher ammo counter -ADDIU T1,T1,0CC0 -ADDU T2,V0,T1 -LUI AT,8009 -LUI T3,0200 -SW T2,D0F0 (AT) ;8008D0F0= conversion+02000CC0: rocket ammo counter -ADDIU T3,T3,0CCC -ADDU T4,V0,T3 -LUI AT,8009 -LUI T5,0200 -SW T4,D0F4 (AT) ;8008D0F4= conversion+02000CCC: generic mine ammo counter -ADDIU T5,T5,0CD8 -ADDU T6,V0,T5 -LUI AT,8009 -LUI T7,0200 -SW T6,D0F8 (AT) ;8008D0F8= conversion+02000CD8: grenade ammo counter -ADDIU T7,T7,0CE4 -ADDU T8,V0,T7 -LUI AT,8009 -LUI T9,0200 -SW T8,D0FC (AT) ;8008D0FC= conversion+02000CE4: magnum ammo counter -ADDIU T9,T9,0CF0 -ADDU T0,V0,T9 -LUI AT,8009 -LUI T1,0200 -SW T0,D100 (AT) ;8008D100= conversion+02000CF0: golden gun ammo counter -ADDIU T1,T1,0CFC -ADDU T2,V0,T1 -LUI AT,8009 -LUI T3,0200 -SW T2,D104 (AT) ;8008D104= conversion+02000CFC: remote mine ammo counter -ADDIU T3,T3,0D08 -ADDU T4,V0,T3 -LUI AT,8009 -LUI T5,0200 -SW T4,D108 (AT) ;8008D108= conversion+02000D08: timed mine ammo counter -ADDIU T5,T5,0D14 -ADDU T6,V0,T5 -LUI AT,8009 -LUI T7,0200 -SW T6,D10C (AT) ;8008D10C= conversion+02000D14: proximity mine ammo counter -ADDIU T7,T7,0D20 -ADDU T8,V0,T7 -LUI AT,8009 -LUI T9,0200 -SW T8,D110 (AT) ;8008D110= conversion+02000D20: tank ammo counter -ADDIU T9,T9,0D2C -ADDU T0,V0,T9 -LUI AT,8009 -LUI T1,0200 -SW T0,D114 (AT) ;8008D114= conversion+02000D2C: crosshair -ADDIU T1,T1,0D38 -ADDU T2,V0,T1 -LUI AT,8009 -LUI T3,0200 -SW T2,D118 (AT) ;8008D118= conversion+02000D38: beta precision crosshair -ADDIU T3,T3,0D44 -ADDU T4,V0,T3 -LUI AT,8009 -LUI T5,0200 -SW T4,D11C (AT) ;8008D11C= conversion+02000D44: glass overlay -ADDIU T5,T5,0D5C -ADDU T6,V0,T5 -LUI AT,8009 -LUI T7,0200 -SW T6,D120 (AT) ;8008D120= conversion+02000D5C: monitor images -ADDIU T7,T7,0FB4 -ADDU T8,V0,T7 -LUI AT,8009 -LUI T9,0200 -SW T8,D124 (AT) ;8008D124= conversion+02000FB4: sky and water -ADDIU T9,T9,0FD8 -ADDU T0,V0,T9 -LUI AT,8009 -LUI T1,0200 -SW T0,D128 (AT) ;8008D128= conversion+02000FD8: main folder icons -ADDIU T1,T1,1020 -ADDU T2,V0,T1 -LUI AT,8009 -LUI T3,0200 -SW T2,D12C (AT) ;8008D12C= conversion+02001020: MP radar -ADDIU T3,T3,102C -ADDU T4,V0,T3 -LUI AT,8009 -LUI T5,0200 -SW T4,D130 (AT) ;8008D130= conversion+0200102C: MP character select (4 each char) -ADDIU T5,T5,132C -LUI T7,0200 -ADDU T6,V0,T5 -LUI AT,8009 -ADDIU T7,T7,0000 -SW T6,D134 (AT) ;8008D134= conversion+0200132C: MP stage select images -//7F0CC2BC: convert texture offsets in display lists to pointers -ADDU A0,V0,T7 ;A0=conversion+02000000: p->DL -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -LW T8,0000 (S0) ;T8=8008D0B0: conversion value -LUI T9,0200 -ADDIU T9,T9,0078 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T8,T9 ;A0= conversion+02000078: -LW T0,0000 (S0) ;T0=8008D0B0: conversion value -LUI T1,0200 -ADDIU T1,T1,0120 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T0,T1 ;A0= conversion+02000120: -LW T2,0000 (S0) ;T2=8008D0B0: conversion value -LUI T3,0200 -ADDIU T3,T3,01C8 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T2,T3 ;A0= conversion+020001C8: -LW T4,0000 (S0) ;T4=8008D0B0: conversion value -LUI T5,0200 -ADDIU T5,T5,0270 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T4,T5 ;A0= conversion+02000270: -LW T6,0000 (S0) ;T6=8008D0B0: conversion value -LUI T7,0200 -ADDIU T7,T7,0318 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T6,T7 ;A0= conversion+02000318: -LW T8,0000 (S0) ;T8=8008D0B0: conversion value -LUI T9,0200 -ADDIU T9,T9,03C0 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T8,T9 ;A0= conversion+020003C0: -LW T0,0000 (S0) ;T0=8008D0B0: conversion value -LUI T1,0200 -ADDIU T1,T1,0468 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T0,T1 ;A0= conversion+02000468: -LW T2,0000 (S0) ;T2=8008D0B0: conversion value -LUI T3,0200 -ADDIU T3,T3,0510 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T2,T3 ;A0= conversion+02000510: -LW T4,0000 (S0) ;T4=8008D0B0: conversion value -LUI T5,0200 -ADDIU T5,T5,05B8 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T4,T5 ;A0= conversion+020005B8: -LW T6,0000 (S0) ;T6=8008D0B0: conversion value -LUI T7,0200 -ADDIU T7,T7,0660 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T6,T7 ;A0= conversion+02000660: -LW T8,0000 (S0) ;T8=8008D0B0: conversion value -LUI T9,0200 -ADDIU T9,T9,0708 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T8,T9 ;A0= conversion+02000708: -LW T0,0000 (S0) ;T0=8008D0B0: conversion value -LUI T1,0200 -ADDIU T1,T1,07B0 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T0,T1 ;A0= conversion+020007B0: -LW T2,0000 (S0) ;T2=8008D0B0: conversion value -LUI T3,0200 -ADDIU T3,T3,0858 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T2,T3 ;A0= conversion+02000858: -LW T4,0000 (S0) ;T4=8008D0B0: conversion value -LUI T5,0200 -ADDIU T5,T5,0900 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T4,T5 ;A0= conversion+02000900: -LW T6,0000 (S0) ;T6=8008D0B0: conversion value -LUI T7,0200 -ADDIU T7,T7,09A8 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T6,T7 ;A0= conversion+020009A8: -LW T8,0000 (S0) ;T8=8008D0B0: conversion value -LUI T9,0200 -ADDIU T9,T9,0A50 -OR A1,R0,R0 ;A1=NULL (default buffer 8008C720) -JAL 7F0CBB74 ;detects and handles rdp_settextureimage ABCD codes in microcode -ADDU A0,T8,T9 ;A0= conversion+02000A50: -//7F0CC448: load generic impact image -LUI A0,8009 -LW A0,D0B8 (A0) ;A0=8008D0B8: p->generic impact image -JAL 7F0CBC18 ;load image to buffer A1 using declaration at A0 -OR A1,R0,R0 ;A1=NULL (buffer=8008C720) -OR S0,R0,R0 -//7F0CC45C: load explosions & smoke images -LW T0,0000 (S2) ;T0=conversion+02000BC4: explosions and smoke -OR A1,R0,R0 ;A1=NULL (buffer=8008C720) -JAL 7F0CBC18 ;load image to buffer A1 using declaration at A0 -ADDU A0,S0,T0 ;A0= block+offset: p->image declaration -ADDIU S0,S0,000C ;S0+=C offset to next entry -SLTI AT,S0,0048 -BNEL AT,R0,7F0CC460 ;loop for six entries -LW T0,0000 (S2) -OR S0,R0,R0 -ADDIU S1,R0,003C -//7F0CC484: load scattered explosion images -LW T1,0000 (S3) -OR A1,R0,R0 ;A1=NULL (buffer=8008C720) -JAL 7F0CBC18 ;load image to buffer A1 using declaration at A0 -ADDU A0,S0,T1 ;A0= block+offset: p->image declaration -ADDIU S0,S0,000C ;S0+=C offset to next entry -BNEL S0,S1,7F0CC488 ;loop for five entries -LW T1,0000 (S3) -//7F0CC4A0: return -LW RA,0024 (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - -+_+ - -7F0CBB74 1006A4 detects and handles rdp_settextureimage ABCD codes in microcode - accepts: A0=p->display list, A1=p->buffer for image (NULL defaults to 8008C720) -ADDIU SP,SP,FFD0 -SW RA,002C (SP) -SW S5,0028 (SP) -SW S4,0024 (SP) -SW S3,0020 (SP) -SW S2,001C (SP) -SW S1,0018 (SP) -SW S0,0014 (SP) -LBU T6,0000 (A0) ;type of microcode command -ADDIU S2,R0,00B8 -OR S1,A1,R0 ;S1=A1: p->buffer -BEQ S2,T6,7F0CBBF4 ;branch if rsp_enddl command -OR S0,A0,R0 ;S0=A0: p->microcode commands -LBU V0,0000 (A0) ;V0=command type -ADDIU S5,R0,00CD -ADDIU S4,R0,00AB -ADDIU S3,R0,00FD -//7F0CBBB8: -BNEL S3,V0,7F0CBBE8 ;branch if not rdp_settextureimage command -LBU V0,0008 (S0) -LBU T7,0004 (S0) ;T7=segment -BNEL S4,T7,7F0CBBE8 ;branch if not segment AB -LBU V0,0008 (S0) -LBU T8,0005 (S0) ;T8=code after segment... -ADDIU A0,S0,0004 ;A0=S0+4: image offset/address -BNEL S5,T8,7F0CBBE8 ;branch if not code ABCD -LBU V0,0008 (S0) -JAL 7F0CBC18 ;load image to buffer A1 using declaration at A0 -OR A1,S1,R0 ;A1=S1: p->buffer -//7F0CBBE4: -LBU V0,0008 (S0) ;V0=next command type -ADDIU S0,S0,0008 -BNE S2,V0,7F0CBBB8 ;loop until rsp_enddl command -NOP -//7F0CBBF4: -LW RA,002C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S2,001C (SP) -LW S3,0020 (SP) -LW S4,0024 (SP) -LW S5,0028 (SP) -JR RA -ADDIU SP,SP,0030 diff --git a/notes/GE Documentation/note on compression.txt b/notes/GE Documentation/note on compression.txt deleted file mode 100644 index 2d53e5d..0000000 --- a/notes/GE Documentation/note on compression.txt +++ /dev/null @@ -1,37 +0,0 @@ - Rare used gzip/z compression in all their N64 titles. There are various header formats used across their games. GE is the simplest of these, containing nothing but the compressed data. 1172 is used as an indicator for this type. The decompression algorithm is found at 0x33590 in ROM, set to virtual address 70200000 at runtime. - - GE also uses a huffman compression scheme specificly for certain image types. Each image is processed as it is decompressed. More information on this can be found in the "images text and font\Huffman" folder. - -+_+ - -GZIP/Z compression headers across Rare's N64 titles: -Blast Corps - complete GZIP header - -GoldenEye, Killer Instinct Gold - 1172 - -Banjo Kazooie - 1172.ssssssss - [s] 4-byte compressed filesize - -Banjo Tooie - 0015 - -Perfect Dark - 1173.ssssss - [s] 3-byte compressed filesize - -Donkey Kong 64 - 1F8B.080000000000.02.03 - This would be a "blank" gzip header, as output by the --no-name flag or compress2 for instance. - -Donkey Kong 64 Kiosk - 1F8B.08080345753700.03746D702E62696E00 - This gzip header corresponds to a output file "tmp.bin". - -Conker's Bad Fur Day - ssssssss - [s] 4-byte compressed filesize - - All Rarezip compression types can be decompressed easily by feeding the compressed binary into zlib's decompress() function. diff --git a/notes/GE Documentation/rom-address-table.txt b/notes/GE Documentation/rom-address-table.txt deleted file mode 100644 index 32d7649..0000000 --- a/notes/GE Documentation/rom-address-table.txt +++ /dev/null @@ -1,3605 +0,0 @@ -NTSC ROM DIRECTORY - - 40- 1000 A4000040 (boot) - note that 0x2C0+ is remapped to 80000000... - 0x4C0 is mapped to 80000000-2B4, linked at end of bootstrap. This is replaced by final interrupt handler after the fact. - 1000-21990 ASM, mapped to 70000400 (-C00) -21990-331E0 80020D90(main address bank, all best stuff!) -331e0-33590 ??? -33590-34B30 RareZip ASM, mapped to 70200000-70201474 - 34A10 70201480 Z decompression register - 34A14 70201484 Z decompression register - 34A18 70201488 Z decompression register - 34A1C 7020148C Z decompression register - 34A20-34B30 decompression tables, mapped to 70201490-702015A0 -34B30-117880 0x2000 byte clumps: TLB ASM segment -117880 DL snippet: vertex colours + shade -1178A0 DL snippet: vertex colours + shade + depth buffer -1178C0 DL snippet: blender options for font -117938 8xxx japanese font -123040 Cxxx japanese font -124AC0 animations? -... -17BD48 unknown. 0x3C entries @ 0x44 each -17CD38 - -28E41C image -28E68C image -28E980 E7E0 character animations -29D160 AC8 explosion frame display lists - first part of global image bank (1400) -29DC28 930 global image bank image calls - second part of global image bank (1400) -29E560 18 RGBA values - first part of image bank (1000) -29E578 AC0 image - 16bit - start of Rare logo -29F038 AC0 image - 16bit -29FAF8 AC0 image - 16bit -2A05B8 AC0 image - 16bit -2A1078 18D0 point table -2A2948 C8 display list blue part of logo -2A2A10 2A8 display list Rare script below the R -2A2CB8 888 display list gold part of logo -2A3540 1000 image - 16bit -2A4548 800 image - 16bit -2A4D50 ??? ???, probably images -2BF2D0 ramrom Dam -2C44D0 ramrom Dam -2C64A0 ramrom Facility -2C7F50 ramrom Facility -2CA330 ramrom Facility -2CBFA0 ramrom Runway -2CE6F0 ramrom Runway -2D1000 ramrom Bunker I -2D4390 ramrom Bunker I -2D9610 ramrom Silo -2DB7A0 ramrom Silo -2DD770 ramrom Frigate -2DF120 ramrom Frigate -2E2600 ramrom Train - -ASCII font: -2E63F0 first font table controller - small -2E6694 second font table controller - small -2E88A0 first font table controller - large -2E8B44 second font table controller - large - -2EBDE0 sfx.ptr -2F19A0 sfx.bnk -3B4450 sounds.ptr -3B87F0 sounds.bnk - -index# rom other value ref in ram -419790 number of music samples -419794 table of music data - 0x0 offset to compressed music data (from 419790) - 0x4 size of decompressed data - 0x6 size of compressed data - -00 41998c 0061 002a 802d1c14 no music! -01 4199b6 02db 01d6 802d1c1c solo death abrev. --only above two can directly replace) -02 419b8c 0ef2 08ae 802d1c24 intro (during eye) - -03 41a43a 149e 0bea 802d1c2c train -04 41b024 1784 0da0 802d1c34 depot -05 41bdc4 17dd 0d98 802d1c3c Multiplayer Theme -06 41cb5c 171f 0dc0 802d1c44 citadel -07 41d91c 0fee 0ace 802d1c4c facility -08 41e3ea 1220 0b5e 802d1c54 control -09 41ef48 16c3 0e04 802d1c5c dam -0a 41fd4c 1457 0de0 802d1c64 frigate -0b 420b2c 0db8 0954 802d1c6c archives -0c 421480 17bb 0e70 802d1c74 silo -0d 4222f0 172b 0f6c 802d1c7c -0e 42325c 155d 0d02 802d1c84 streets -0f 423f5e 0aad 0672 802d1c8c bunker 1 -10 4245d0 095f 0680 802d1c94 bunker 2 -11 424c50 0e37 0998 802d1c9c statue -12 4255e8 0dc9 09da 802d1ca4 elevator (control) -13 425fc2 1692 0d60 802d1cac cradle -14 426d22 0060 002a 802d1cb4 -15 426d4c 09d8 0646 802d1cbc elevator (w.c.) -16 427392 15ea 0d9a 802d1cc4 egyptian -17 42812c 05d8 03e2 802d1ccc folders -18 42850E 02fe 01f2 802d1cd4 watch music -19 428700 1484 0c72 802d1cdc aztec -1a 429372 1748 0e2c 802d1ce4 water caverns -1b 42a19e 0560 0366 802d1cec death solo - -1c 42a504 1782 0db6 802d1cf4 surface2 -1d 42b2ba 0e79 08a0 802d1cfc train x -1e 42bb5a 0060 002a 802d1d04 -1f 42bb84 0e8a 0958 802d1d0c facility x -20 42c4dc 0d1d 07bc 802d1d14 depot x -21 42cc98 0933 0548 802d1d1c control x -22 42d1e0 0cc0 0754 802d1d24 water caverns x -23 42d934 094b 0520 802d1d2c dam x -24 42de54 09ce 05c2 802d1d34 frigate x -25 42e416 0c8a 0724 802d1d3c archives x -26 42eb3a 0e82 08f4 802d1d44 silo x -27 42f42e 0060 002a 802d1d4c egyptian x -28 42f458 0ac2 066c 802d1d54 streets x -29 42fac4 0d30 07a6 802d1d5c bunker1 x -2a 43026a 0ac6 064e 802d1d64 bunker2 x -2b 4308b8 0e60 0816 802d1d6c -2c 4310ce 05da 0432 802d1d74 intro swoosh + drone -2d 431500 0be5 06b8 802d1d7c statue x -2e 431bb8 0ec5 08d6 802d1d84 aztec x -2f 43248e 0f14 08b0 802d1d8c -30 432d3e 0c36 06ca 802d1d94 cradle x -31 433408 0e0d 084a 802d1d9c cuba -32 433c52 1616 0d1e 802d1da4 runway -33 434970 04f3 02da 802d1dac runway plane -34 434c40 0ca1 0728 802d1db4 -35 435372 06bb 0522 802d1dbc wind blowing (surface 2) -36 435894 02ed 020c 802d1dc4 guitar gliss in multi death -37 435aa0 0997 0788 802d1dcc jungle -38 436228 0b07 0622 802d1dd4 runway x -39 43684a 170c 0d68 802d1ddc surface 1 -3a 4375b2 0446 02c8 802d1de4 multiplayer death -3b 43787a 0ca1 0728 802d1dec surface2 x -3c 437fa2 037b 029c 802d1df4 surface 2 ending - -3d 43823e 01db 0166 802d1dfc part of statue theme -3e 4383a4 035b 02b6 802d1e04 end of ? theme - - -background data -8004*number *word *ROM addy *word value @ pointer -6054:00000000|80058da0|00000000 00000000 -6060:00000001|80058da4|00438660 bg/bg_sev_all_p.seg bunker1 -606c:00000002|80058db8|00449450 bg/bg_silo_all_p.seg silo -6078:00000003|80058dd0|0049a390 bg/bg_stat_all_p.seg statue -6084:00000004|80058de8|004bc460 bg/bg_arec_all_p.seg control -6090:00000005|80058e00|004ea7e0 bg/bg_arch_all_p.seg archives -609c:00000006|80058e18|005102d0 bg/bg_tra_all_p.seg train -60a8:00000007|80058e2c|00530840 bg/bg_dest_all_p.seg frigate -60b4:00000008|80058e44|0055e200 bg/bg_sevb_all_p.seg bunker2 -60c0:00000009|80058e5c|00578fa0 bg/bg_azt_all_p.seg aztec -60cc:0000000a|80058e70|0059a9f0 bg/bg_pete_all_p.seg streets -60d8:0000000b|80058e88|005b4620 bg/bg_depo_all_p.seg depot -60e4:0000000c|80058ea0|005e0f90 bg/bg_ref_all_p.seg complex -60f0:0000000d|80058eb4|005ea5a0 bg/bg_cryp_all_p.seg egypt -60fc:0000000e|80058ecc|005ffc50 bg/bg_dam_all_p.seg dam -6108:0000000f|80058ee0|0062fdf0 bg/bg_ark_all_p.seg facility -6114:00000010|80058ef4|00660d70 bg/bg_run_all_p.seg runway -6120:00000011|80058f08|0066b140 bg/bg_sevx_all_p.seg surfaces -612c:00000012|80058f20|00687710 bg/bg_jun_all_p.seg jungle -6138:00000013|80058f34|0069c860 bg/bg_dish_all_p.seg temple -6144:00000014|80058f4c|006a10d0 bg/bg_cave_all_p.seg caverns -6150:00000015|80058f64|006c55c0 bg/bg_cat_all_p.seg citadel -615c:00000016|80058f78|006caaf0 bg/bg_crad_all_p.seg cradle -6168:00000017|80058f90|006dae40 bg/bg_sho_all_p.seg (stack background) -6174:00000018|80058fa4|006dae40 bg/bg_eld_all_p.seg (stack background) -6180:00000019|80058fb8|006dae40 bg/bg_imp_all_p.seg basement -618c:0000001a|80058fcc|006dae40 bg/bg_ash_all_p.seg stack -6198:0000001b|80058fe0|006dae40 bg/bg_lue_all_p.seg (stack background) -61a4:0000001c|80058ff4|006dae40 bg/bg_ame_all_p.seg library -61b0:0000001d|80059008|006e4da0 bg/bg_rit_all_p.seg (caves background) -61bc:0000001e|8005901c|006e4da0 bg/bg_oat_all_p.seg caves -61c8:0000001f|80059030|006ebbf0 bg/bg_ear_all_p.seg (cuba background) -61d4:00000020|80059044|006ebbf0 bg/bg_lee_all_p.seg (cuba background) -61e0:00000021|80059058|006ebbf0 bg/bg_lip_all_p.seg (cuba background) -61ec:00000022|8005906c|006ebbf0 bg/bg_len_all_p.seg cuba -61f8:00000023|80059080|006ecb90 bg/bg_wax_all_p.seg (armourguard call) -6204:00000024|80059094|006ecb90 bg/bg_pam_all_p.seg (armourguard call) - -Character Bodies/Heads -8004*number *word *ROM addy *word value @ pointer -6210:00000025|800590a8|006ecb90 CarmourguardZ -621c:00000026|800590b8|006ef010 CbaronsamediZ -6228:00000027|800590c8|006f2700 CbluecamguardZ -6234:00000028|800590d8|006f4df0 CbluemanZ -6240:00000029|800590e4|006f6c00 CbluewomanZ -624c:0000002a|800590f0|006f8ac0 CboilerbondZ -6258:0000002b|80059100|006fb6d0 CboilertrevZ -6264:0000002c|80059110|006fed50 CborisZ -6270:0000002d|80059118|00701e70 CcamguardZ -627c:0000002e|80059124|00704550 CcardimanZ -6288:0000002f|80059130|00706350 CcheckmanZ -6294:00000030|8005913c|007081d0 CcommguardZ -62a0:00000031|80059148|0070a7d0 CdjbondZ -62ac:00000032|80059154|0070d660 CfattechwomanZ -62b8:00000033|80059164|0070f580 Cgreatguard2Z -62c4:00000034|80059174|00711ca0 CgreatguardZ -62d0:00000035|80059184|00714320 CgreyguardZ -62dc:00000036|80059190|007169f0 CgreymanZ -62e8:00000037|8005919c|007187b0 CheadalanZ -62f4:00000038|800591a8|00718d80 CheadbZ -6300:00000039|800591b0|007192f0 CheadbalaclaZ -630c:0000003a|800591c0|007196c0 CheadbikeZ -6318:0000003b|800591cc|00719d60 CheadbrosnanZ -6324:0000003c|800591dc|0071aab0 CheadbrosnanboilerZ -6330:0000003d|800591f0|0071b650 CheadbrosnansnowZ -633c:0000003e|80059204|0071c4d0 CheadbrosnansuitZ -6348:0000003f|80059218|0071d250 CheadbrosnantimberZ -6354:00000040|8005922c|0071de10 CheadchrisZ -6360:00000041|80059238|0071e350 CheaddaveZ -636c:00000042|80059244|0071e8d0 CheaddesZ -6378:00000043|80059250|0071ee00 CheadduncanZ -6384:00000044|80059260|0071f320 CheaddwayneZ -6390:00000045|80059270|0071f8a0 CheadgrahamZ -639c:00000046|80059280|0071fe10 CheadgrantZ -63a8:00000047|8005928c|00720340 CheadjimZ -63b4:00000048|80059298|00720870 Cheadjoe2Z -63c0:00000049|800592a4|00720c90 CheadjoeZ -63cc:0000004a|800592b0|00721200 CheadjoelZ -63d8:0000004b|800592bc|00721710 CheadkarlZ -63e4:0000004c|800592c8|00721c70 CheadkenZ -63f0:0000004d|800592d4|007221c0 CheadleeZ -63fc:0000004e|800592e0|00722740 CheadmandyZ -6408:0000004f|800592ec|00722b30 CheadmarionZ -6414:00000050|800592fc|00722f40 CheadmarkZ -6420:00000051|80059308|00723470 CheadmartinZ -642c:00000052|80059318|007239d0 CheadmishkinZ -6438:00000053|80059328|00723f30 CheadneilZ -6444:00000054|80059334|00724450 CheadpeteZ -6450:00000055|80059340|007249e0 CheadrobinZ -645c:00000056|8005934c|00724ef0 CheadsallyZ -6468:00000057|80059358|007252f0 CheadscottZ -6474:00000058|80059364|00725870 CheadshaunZ -6480:00000059|80059370|00725e50 CheadsteveeZ -648c:0000005a|80059380|007263a0 CheadstevehZ -6498:0000005b|80059390|007268f0 CheadvivienZ -64a4:0000005c|800593a0|00726d80 CjawsZ -64b0:0000005d|800593a8|007299c0 CjeanwomanZ -64bc:0000005e|800593b4|0072b9d0 CmaydayZ -64c8:0000005f|800593c0|0072e570 CmoonfemaleZ -64d4:00000060|800593d0|007306c0 CmoonguardZ -64e0:00000061|800593dc|00732cb0 CnatalayaZ -64ec:00000062|800593e8|00736570 CnavyguardZ -64f8:00000063|800593f4|00738c50 CoddjobZ -6504:00000064|80059400|0073bd80 ColiveguardZ -6510:00000065|80059410|0073e3d0 CorumovZ -651c:00000066|8005941c|00741800 CpilotZ -6528:00000067|80059424|00744880 CredmanZ -6534:00000068|80059430|00746fb0 CrusguardZ -6540:00000069|8005943c|00748be0 CsnowbondZ -654c:0000006a|80059448|0074bf10 CsnowguardZ -6558:0000006b|80059454|0074eb90 CspicebondZ -6564:0000006c|80059460|007524b0 Csuit_lf_handZ -6570:0000006d|80059470|007556d0 CsuitbondZ -657c:0000006e|8005947c|00758460 CtechmanZ -6588:0000006f|80059488|0075ab10 CtechwomanZ -6594:00000070|80059494|0075cb00 CtimberbondZ -65a0:00000071|800594a4|0075f830 CtreveleanZ -65ac:00000072|800594b0|00763000 CtrevguardZ -65b8:00000073|800594bc|00765610 CvalentinZ -65c4:00000074|800594c8|00768580 CxeniaZ - -watch and in-hand models -8004*number *word *ROM addy *word value @ pointer -65d0:00000075|800594d0|0076bf70 Gak47Z -65dc:00000076|800594d8|0076c980 GaudiotapeZ -65e8:00000077|800594e4|0076cd10 GautoshotZ -65f4:00000078|800594f0|0076e520 GblackboxZ -6600:00000079|800594fc|0076eb20 GblueprintsZ -660c:0000007a|8005950c|0076ec20 GbombcaseZ -6618:0000007b|80059518|0076f3b0 GbombdefuserZ -6624:0000007c|80059528|0076f9a0 GbriefcaseZ -6630:0000007d|80059534|00770130 GbugZ -663c:0000007e|8005953c|00770aa0 GbugdetectorZ -6648:0000007f|8005954c|00770df0 GbungeeZ -6654:00000080|80059558|00771140 GcameraZ -6660:00000081|80059564|007715c0 GcartblueZ -666c:00000082|80059570|00771820 GcartridgeZ -6678:00000083|8005957c|00771950 GcartrifleZ -6684:00000084|80059588|00771b60 GcartshellZ -6690:00000085|80059594|00771d60 GcircuitboardZ -669c:00000086|800595a4|00771ea0 GclipboardZ -66a8:00000087|800595b0|00772090 GcreditcardZ -66b4:00000088|800595c0|007723e0 GdarglassesZ -66c0:00000089|800595d0|00772730 GdatathiefZ -66cc:0000008a|800595dc|00772870 GdattapeZ -66d8:0000008b|800595e8|007729e0 GdoordecoderZ -66e4:0000008c|800595f8|00772f60 GdoorexploderZ -66f0:0000008d|80059608|007732b0 GdossierredZ -66fc:0000008e|80059618|00773610 GdynamiteZ -6708:0000008f|80059624|00773960 GexpelosivefloppyZ -6714:00000090|80059638|00773bb0 GexplosivepenZ -6720:00000091|80059648|00773f00 GextinguisherZ -672c:00000092|80059658|007746f0 GfingergunZ -6738:00000093|80059664|00774a40 GfistZ -6744:00000094|8005966c|00776140 GflarepistolZ -6750:00000095|8005967c|00776490 Gfnp90Z -675c:00000096|80059684|00777130 GgaskeyringZ -6768:00000097|80059694|00777b60 GgoldbarZ -6774:00000098|800596a0|00777eb0 GgoldeneyekeyZ -6780:00000099|800596b0|00778860 PgoldengunZ -678c:0000009a|800596bc|0077a040 GgoldwppkZ -6798:0000009b|800596c8|0077b9a0 GgrenadeZ -67a4:0000009c|800596d4|0077c3d0 GgrenadelaunchZ -67b0:0000009d|800596e4|0077d450 GheroinZ -67bc:0000009e|800596f0|0077d7a0 GjoypadZ -67c8:0000009f|800596fc|0077f650 GkeyanalysercaseZ -67d4:000000a0|80059710|0077fde0 GkeyboltZ -67e0:000000a1|8005971c|007807d0 GkeycardZ -67ec:000000a2|80059728|00780900 GkeyyaleZ -67f8:000000a3|80059734|00781650 GknifeZ -6804:000000a4|8005973c|00783120 GlaserZ -6810:000000a5|80059744|00783f10 GlectreZ -681c:000000a6|80059750|00784260 GlockexploderZ -6828:000000a7|80059760|007845b0 Gm16Z -6834:000000a8|80059768|00784fd0 GmapZ -6840:000000a9|80059770|007850c0 GmicrocameraZ -684c:000000aa|80059780|00785700 GmicrocodeZ -6858:000000ab|8005978c|00785a50 GmicrofilmZ -6864:000000ac|80059798|00785da0 GmoneyZ -6870:000000ad|800597a0|007860f0 Gmp5kZ -687c:000000ae|800597a8|00786cd0 Gmp5ksilZ -6888:000000af|800597b4|007879d0 GpitongunZ -6894:000000b0|800597c0|00787d20 GplansZ -68a0:000000b1|800597c8|00787ef0 GplastiqueZ -68ac:000000b2|800597d4|00788240 GpolarizedglassesZ -68b8:000000b3|800597e8|007887a0 GproximitymineZ -68c4:000000b4|800597f8|00788f90 GremotemineZ -68d0:000000b5|80059808|00789950 GrocketlaunchZ -68dc:000000b6|80059818|0078ab70 GrugerZ -68e8:000000b7|80059820|0078c900 GsafecrackercaseZ -68f4:000000b8|80059834|0078d090 GshotgunZ -6900:000000b9|80059840|0078df70 GsilverwppkZ -690c:000000ba|80059850|0078f8d0 GskorpionZ -6918:000000bb|8005985c|00790ad0 GsniperrifleZ -6924:000000bc|8005986c|00791b40 GspecterZ -6930:000000bd|80059878|007927c0 GspooltapeZ -693c:000000be|80059884|00792b10 GspyfileZ -6948:000000bf|80059890|00792e60 GstafflistZ -6954:000000c0|8005989c|00793000 GtaserZ -6960:000000c1|800598a4|00794e60 GthrowknifeZ -696c:000000c2|800598b4|00796950 GtimedmineZ -6978:000000c3|800598c0|00797410 GtriggerZ -6984:000000c4|800598cc|0079a810 Gtt33Z -6990:000000c5|800598d4|0079c330 GuziZ -699c:000000c6|800598dc|0079cc40 GvideotapeZ -69a8:000000c7|800598e8|0079ce50 GwatchcommunicatorZ -69b4:000000c8|800598fc|0079e2b0 GwatchgeigercounterZ -69c0:000000c9|80059914|0079f710 GwatchidentifierZ -69cc:000000ca|80059928|007a0b70 GwatchlaserZ -69d8:000000cb|80059938|007a3f70 GwatchmagnetattractZ -69e4:000000cc|80059950|007a53c0 GwatchmagnetrepelZ -69f0:000000cd|80059964|007a6820 GweaponcaseZ -69fc:000000ce|80059974|007a6fb0 GwppkZ -6a08:000000cf|8005997c|007a8c40 GwppksilZ -6a14:000000d0|80059988|007aa980 GwristdartZ - - -object models -8004*number *word *ROM addy *word value @ pointer -6a20:000000d1|80059994|007aacd0 PICBMZ -6a2c:000000d2|8005999c|007ad250 PICBM_noseZ -6a38:000000d3|800599a8|007ada00 Pak47magZ -6a44:000000d4|800599b4|007adbe0 Palarm1Z -6a50:000000d5|800599c0|007add40 Palarm2Z -6a5c:000000d6|800599cc|007adee0 Pammo_crate1Z -6a68:000000d7|800599dc|007ae120 Pammo_crate2Z -6a74:000000d8|800599ec|007ae360 Pammo_crate3Z -6a80:000000d9|800599fc|007ae5b0 Pammo_crate4Z -6a8c:000000da|80059a0c|007ae820 Pammo_crate5Z -6a98:000000db|80059a1c|007aeae0 PapcZ -6aa4:000000dc|80059a24|007b0740 Parchsecdoor1Z -6ab0:000000dd|80059a34|007b0920 Parchsecdoor2Z -6abc:000000de|80059a44|007b0af0 ParticZ -6ac8:000000df|80059a4c|007b18f0 ParctictrailerZ -6ad4:000000e0|80059a5c|007b2200 PbarricadeZ -6ae0:000000e1|80059a68|007b2440 Pbin1Z -6aec:000000e2|8005a970|007b2790 Pblotter1Z -6af8:000000e3|80059a7c|007b2870 PbodyarmourZ -6b04:000000e4|80059a8c|007b2d10 PbodyarmourvestZ -6b10:000000e5|80059aa0|007b3130 PbollardZ -6b1c:000000e6|80059aac|007b3330 PbombZ -6b28:000000e7|80059ab4|007b34a0 Pbook1Z -6b34:000000e8|80059abc|007b3630 Pbookshelf1Z -6b40:000000e9|80059acc|007b3d20 Pborg_crateZ -6b4c:000000ea|80059adc|007b3e90 PboxcartridgesZ -6b58:000000eb|80059aec|007b4090 Pboxes2x4Z -6b64:000000ec|80059af8|007b44c0 Pboxes3x4Z -6b70:000000ed|80059b04|007b4900 Pboxes4x4Z -6b7c:000000ee|80059b10|007b4f60 PbrakeunitZ -6b88:000000ef|80059b1c|007b52d0 Pbridge_console1aZ -6b94:000000f0|80059b30|007b5850 Pbridge_console1bZ -6ba0:000000f1|80059b44|007b5db0 Pbridge_console2aZ -6bac:000000f2|80059b58|007b6330 Pbridge_console2bZ -6bb8:000000f3|80059b6c|007b6820 Pbridge_console3aZ -6bc4:000000f4|80059b80|007b6d70 Pbridge_console3bZ -6bd0:000000f5|80059b94|007b7300 PcarbmwZ -6bdc:000000f6|80059ba0|007b7fe0 Pcard_box1Z -6be8:000000f7|80059bac|007b81e0 Pcard_box2Z -6bf4:000000f8|80059bb8|007b8420 Pcard_box3Z -6c00:000000f9|80059bc4|007b8610 Pcard_box4Z -6c0c:000000fa|80059bd4|007b87c0 Pcard_box5Z -6c18:000000fb|80059be4|007b89c0 Pcard_box6Z -6c24:000000fc|80059bf4|007b8bb0 PcarescortZ -6c30:000000fd|80059c00|007b97b0 PcargolfZ -6c3c:000000fe|80059c0c|007ba3e0 PcarweirdZ -6c48:000000ff|80059c18|007bb520 PcarzilZ -6c54:00000100|80059c24|007bcb20 PcctvZ -6c60:00000101|80059c2c|007bcea0 PchraudiotapeZ -6c6c:00000102|80059c3c|007bd400 PchrautoshotZ -6c78:00000103|80059c4c|007bd760 PchrblackboxZ -6c84:00000104|80059c5c|007bdfe0 PchrblueprintsZ -6c90:00000105|80059c6c|007be130 PchrbombcaseZ -6c9c:00000106|80059c7c|007be320 PchrbombdefuserZ -6ca8:00000107|80059c90|007bec00 PchrbriefcaseZ -6cb4:00000108|80059ca0|007bed90 PchrbugZ -6cc0:00000109|80059cac|007bfb40 PchrbugdetectorZ -6ccc:0000010a|80059cc0|007bfcb0 PbungeeZ -6cd8:0000010b|80059ccc|007bfe20 PchrcameraZ -6ce4:0000010c|80059cd8|007c04b0 PchrcircuitboardZ -6cf0:0000010d|80059cec|007c0650 PchrclipboardZ -6cfc:0000010e|80059cfc|007c08d0 PchrcreditcardZ -6d08:0000010f|80059d0c|007c0a40 PchrdarkglassesZ -6d14:00000110|80059d20|007c0bb0 PchrdatathiefZ -6d20:00000111|80059d30|007c0d50 PchrdattapeZ -6d2c:00000112|80059d40|007c0f40 PchrdoordecoderZ -6d38:00000113|80059d54|007c17a0 PchrdoorexploderZ -6d44:00000114|80059d68|007c1910 PchrdossierredZ -6d50:00000115|80059d78|007c1de0 PchrdynamiteZ -6d5c:00000116|80059d88|007c1f50 PchrexplosivepenZ -6d68:00000117|80059d9c|007c20c0 PchrextinguisherZ -6d74:00000118|80059db0|007c25c0 PchrfingergunZ -6d80:00000119|80059dc0|007c2730 PchrflarepistolZ -6d8c:0000011a|80059dd4|007c28a0 Pchrfnp90Z -6d98:0000011b|80059de0|007c2d00 PchrgaskeyringZ -6da4:0000011c|80059df0|007c3c10 PchrgoldbarZ -6db0:0000011d|80059e00|007c3d80 PchrgoldenZ -6dbc:0000011e|80059e0c|007c3ff0 PchrgoldeneyekeyZ -6dc8:0000011f|80059e20|007c4e90 PchrgoldwppkZ -6dd4:00000120|80059e30|007c5000 PchrgrenadeZ -6de0:00000121|80059e40|007c5370 PchrgrenadelaunchZ -6dec:00000122|80059e54|007c5700 PchrgrenaderoundZ -6df8:00000123|80059e68|007c5970 PchrheroinZ -6e04:00000124|80059e74|007c5ae0 PchrkalashZ -6e10:00000125|80059e80|007c5ed0 PchrkeyanalysercaseZ -6e1c:00000126|80059e98|007c60c0 PchrkeyboltZ -6e28:00000127|80059ea8|007c6f60 PchrkeyyaleZ -6e34:00000128|80059eb8|007c83c0 PchrknifeZ -6e40:00000129|80059ec4|007c85c0 PchrlaserZ -6e4c:0000012a|80059ed0|007c8980 PchrlectreZ -6e58:0000012b|80059edc|007c8af0 PchrlockexploderZ -6e64:0000012c|80059ef0|007c8c60 Pchrm16Z -6e70:0000012d|80059efc|007c9030 PchrmapZ -6e7c:0000012e|80059f08|007c9180 PchrmicrocameraZ -6e88:0000012f|80059f1c|007c9a70 PchrmicrocodeZ -6e94:00000130|80059f2c|007c9be0 PchrmicrofilmZ -6ea0:00000131|80059f3c|007c9d50 PchrmoneyZ -6eac:00000132|80059f48|007c9ec0 Pchrmp5kZ -6eb8:00000133|80059f54|007ca240 Pchrmp5ksilZ -6ec4:00000134|80059f64|007ca650 PchrpitongunZ -6ed0:00000135|80059f74|007ca7c0 PchrplansZ -6edc:00000136|80059f80|007caa50 PchrplastiqueZ -6ee8:00000137|80059f90|007caeb0 PchrpolarizedglassesZ -6ef4:00000138|80059fa8|007cb770 PchrproximitymineZ -6f00:00000139|80059fbc|007cbbd0 PchrremotemineZ -6f0c:0000013a|80059fcc|007cc030 PchrrocketZ -6f18:0000013b|80059fd8|007cc5e0 PchrrocketlaunchZ -6f24:0000013c|80059fec|007cc9c0 PchrrugerZ -6f30:0000013d|80059ff8|007ccda0 PchrsafecrackercaseZ -6f3c:0000013e|8005a010|007ccf90 PchrshotgunZ -6f48:0000013f|8005a020|007cd2e0 PchrsilverwppkZ -6f54:00000140|8005a030|007cd450 PchrskorpionZ -6f60:00000141|8005a040|007cd7d0 PchrsniperrifleZ -6f6c:00000142|8005a054|007cdb60 PchrspectreZ -6f78:00000143|8005a064|007cded0 PchrspooltapeZ -6f84:00000144|8005a074|007ce040 PchrspyfileZ -6f90:00000145|8005a084|007ce1b0 PchrstafflistZ -6f9c:00000146|8005a094|007ce3d0 PchrtesttubeZ -6fa8:00000147|8005a0a4|007ce590 PchrthrowknifeZ -6fb4:00000148|8005a0b4|007ce7b0 PchrtimedmineZ -6fc0:00000149|8005a0c4|007cece0 Pchrtt33Z -6fcc:0000014a|8005a0d0|007cef70 PchruziZ -6fd8:0000014b|8005a0dc|007cf240 PchrvideotapeZ -6fe4:0000014c|8005a0ec|007cf510 PchrweaponcaseZ -6ff0:0000014d|8005a0fc|007cf710 PchrwppkZ -6ffc:0000014e|8005a108|007cf950 PchrwppksilZ -7008:0000014f|8005a118|007cfc30 PchrwristdartZ -7014:00000150|8005a128|007cfda0 Pconsole1Z -7020:00000151|8005a134|007d0420 Pconsole2Z -702c:00000152|8005a140|007d0aa0 Pconsole3Z -7038:00000153|8005a14c|007d1130 Pconsole_sev2aZ -7044:00000154|8005a15c|007d1550 Pconsole_sev2bZ -7050:00000155|8005a16c|007d1a10 Pconsole_sev2cZ -705c:00000156|8005a17c|007d1e50 Pconsole_sev2dZ -7068:00000157|8005a18c|007d2280 Pconsole_sev_GEZ -7074:00000158|8005a1a0|007d26b0 Pconsole_sevGEbZ -7080:00000159|8005a1b4|007d2ae0 Pconsole_sevaZ -708c:0000015a|8005a1c4|007d2f60 Pconsole_sevbZ -7098:0000015b|8005a1d4|007d33d0 Pconsole_sevcZ -70a4:0000015c|8005a1e4|007d3800 Pconsole_sevdZ -70b0:0000015d|8005a1f4|007d3c30 Pcryptdoor1aZ -70bc:0000015e|8005a204|007d3dc0 Pcryptdoor1bZ -70c8:0000015f|8005a214|007d3f50 Pcryptdoor2aZ -70d4:00000160|8005a224|007d40e0 Pcryptdoor2bZ -70e0:00000161|8005a234|007d4270 Pcryptdoor3Z -70ec:00000162|8005a244|007d44e0 Pcryptdoor4Z -70f8:00000163|8005a254|007d4660 PdamchaindoorZ -7104:00000164|8005a264|007d48e0 PdamgatedoorZ -7110:00000165|8005a274|007d4b00 PdamtundoorZ -711c:00000166|8005a284|007d4e70 Pdepot_door_steelZ -7128:00000167|8005a298|007d5010 Pdepot_gate_entryZ -7134:00000168|8005a2ac|007d5250 Pdesk1Z -7140:00000169|8005a2b4|007d53d0 Pdesk2Z -714c:0000016a|8005a2bc|007d5550 Pdesk_arecibo1Z - -7158:0000016b|8005a2cc|007d5790 Pdesk_lamp2Z -7164:0000016c|8005a2dc|007d5a90 Pdest_engineZ -7170:0000016d|8005a2ec|007d7380 Pdest_exocetZ -717c:0000016e|8005a2fc|007d79e0 Pdest_gunZ -7188:0000016f|8005a308|007d8050 Pdest_harpoonZ -7194:00000170|8005a318|007d88f0 Pdest_seawolfZ -71a0:00000171|8005a328|007d98a0 Pdisc_readerZ -71ac:00000172|8005a338|007d9a60 Pdisk_drive1Z -71b8:00000173|8005a348|007d9bf0 Pdoor_azt_chairZ -71c4:00000174|8005a35c|007d9d70 Pdoor_azt_deskZ -71d0:00000175|8005a36c|007da1b0 Pdoor_azt_desk_topZ -71dc:00000176|8005a380|007da540 Pdoor_aztecZ -71e8:00000177|8005a390|007da770 Pdoor_dest1Z -71f4:00000178|8005a3a0|007daa70 Pdoor_dest2Z -7200:00000179|8005a3b0|007dae30 Pdoor_eyelidZ -720c:0000017a|8005a3c0|007db390 Pdoor_irisZ -7218:0000017b|8005a3cc|007dbde0 Pdoor_mfZ -7224:0000017c|8005a3d8|007dc0d0 Pdoor_roller1Z -7230:0000017d|8005a3e8|007dc440 Pdoor_roller2Z -723c:0000017e|8005a3f8|007dc680 Pdoor_roller3Z -7248:0000017f|8005a408|007dc8c0 Pdoor_roller4Z -7254:00000180|8005a418|007dcb20 Pdoor_rollertrainZ -7260:00000181|8005a42c|007dcc50 Pdoor_st_arec1Z -726c:00000182|8005a43c|007dceb0 Pdoor_st_arec2Z -7278:00000183|8005a44c|007dd190 PwinZ -7284:00000184|8005a458|007dd330 PdoorconsoleZ -7290:00000185|8005a468|007dd7a0 PdoorpanelZ -729c:00000186|8005a474|007ddb10 Pdoorprison1Z -72a8:00000187|8005a484|007ddc60 PdoorstatgateZ -72b4:00000188|8005a494|007dde60 PexplosionbitZ -72c0:00000189|8005a4a4|007ddf80 Pfiling_cabinet1Z -72cc:0000018a|8005a4b8|007de100 PflagZ -72d8:0000018b|8005a4c0|007de230 PfloppyZ -72e4:0000018c|8005a4cc|007de550 Pfnp90magZ -72f0:0000018d|8005a4d8|007de6f0 Pgas_plant_met1_do1Z -72fc:0000018e|8005a4f0|007dea70 Pgas_plant_sw2_do1Z -7308:0000018f|8005a504|007dec50 Pgas_plant_sw3_do1Z -7314:00000190|8005a518|007dee50 Pgas_plant_sw4_do1Z -7320:00000191|8005a52c|007defb0 Pgas_plant_sw_do1Z -732c:00000192|8005a540|007df240 Pgas_plant_wc_cub1Z -7338:00000193|8005a554|007df450 PgasbarrelZ -7344:00000194|8005a560|007df660 PgasbarrelsZ -7350:00000195|8005a570|007dfba0 Pgas_plant_clear_doorZ -735c:00000196|8005a588|007e0100 PgastankZ -7368:00000197|8005a594|007e06b0 Pglassware1Z -7374:00000198|8005a5a4|007e0810 Pglassware2Z -7380:00000199|8005a5b4|007e0aa0 Pglassware3Z -738c:0000019a|8005a5c4|007e0cb0 Pglassware4Z -7398:0000019b|8005a5d4|007e1230 PgoldeneyelogoZ -73a4:0000019c|8005a5e4|007e20e0 PgoldenshellsZ -73b0:0000019d|8005a5f4|007e22e0 PgroundgunZ -73bc:0000019e|8005A600|007e2ab0 Pgun_runway1Z -73c8:0000019f|8005A610|007e31f0 PhatberetZ -73d4:000001a0|8005A61c|007e3490 PhatberetblueZ -73e0:000001a1|8005A62c|007e3760 PhatberetredZ -73ec:000001a2|8005A63c|007e3a40 PhatchboltZ -73f8:000001a3|8005A648|007e3b10 PhatchdoorZ -7404:000001a4|8005A654|007e3d30 PhatchsevxZ -7410:000001a5|8005A660|007e3ea0 PhatfurryZ -741c:000001a6|8005A66c|007e40d0 PhatfurryblackZ -7428:000001a7|8005A67c|007e42f0 PhatfurrybrownZ -7434:000001a8|8005A68c|007e4500 PhathelmetZ -7440:000001a9|8005A698|007e4730 PhathelmetgreyZ -744c:000001aa|8005A6a8|007e4960 PhatmoonZ -7458:000001ab|8005A6b4|007e4d40 PhatpeakedZ -7464:000001ac|8005A6c0|007e5050 PhattbirdZ -7470:000001ad|8005A6cc|007e52a0 PhattbirdbrownZ -747c:000001ae|8005A6dc|007e5510 PhelicopterZ -7488:000001af|8005A6ec|007e9730 PhindZ -7494:000001b0|8005A6f4|007eaea0 PjeepZ -74a0:000001b1|8005A7fc|007ec000 Pjerry_can1Z -74ac:000001b2|8005A70c|007ec260 Pjungle3_treeZ -74b8:000001b3|8005A71c|007ec9e0 Pjungle5_treeZ -74c4:000001b4|8005A72c|007ecf10 Pkey_holderZ -74d0:000001b5|8005A73c|007ed260 Pkeyboard1Z -74dc:000001b6|8005A748|007ed3d0 Pkit_units1Z -74e8:000001b7|8005A758|007ed670 PlabbenchZ -74f4:000001b8|8005A764|007eda40 PlandmineZ -7500:000001b9|8005A770|007edcb0 PlegalpageZ -750c:000001ba|8005A77c|007eec70 Pletter_tray1Z -7518:000001bb|8005A78c|007eedd0 Plocker3Z -7524:000001bc|8005A798|007eef60 Plocker4Z -7530:000001bd|8005A7a4|007ef0f0 PPm16magZ -753c:000001be|8005A7b0|007ef230 PmagnumshellsZ -7548:000001bf|8005A7c0|007ef430 Pmainframe1Z -7554:000001c0|8005A7d0|007ef730 Pmainframe2Z -7560:000001c1|8005A7e0|007efa00 Pmetal_chair1Z -756c:000001c2|8005A7f0|007efd40 Pmetal_crate1Z -7578:000001c3|8005A800|007eff00 Pmetal_crate2Z -7584:000001c4|8005A810|007f00c0 Pmetal_crate3Z -7590:000001c5|8005A820|007f0280 Pmetal_crate4Z -759c:000001c6|8005A830|007f0440 PmilcopterZ -75a8:000001c7|8005A83c|007f1d20 PmiltruckZ -75b4:000001c8|8005A848|007f4020 Pmissile_rack2Z -75c0:000001c9|8005A858|007f4a30 Pmissile_rackZ -75cc:000001ca|8005A868|007f4e10 PmodemboxZ -75d8:000001cb|8005A874|007f5150 PmotorbikeZ -75e4:000001cc|8005A880|007f6010 Pmp5kmagZ -75f0:000001cd|8005A88c|007f6160 PnintendologoZ -75fc:000001ce|8005A89c|007f8c40 Poil_drum1Z -7608:000001cf|8005A8a8|007f8eb0 Poil_drum2Z -7614:000001d0|8005A8b4|007f91a0 Poil_drum3Z -7620:000001d1|8005A8c0|007f9490 Poil_drum5Z -762c:000001d2|8005A8cc|007f9780 Poil_drum6Z -7638:000001d3|8005A8d8|007f9a90 Poil_drum7Z -7644:000001d4|8005A8e4|007f9d90 PpadlockZ -7650:000001d5|8005A8f0|007fa7e0 PpalmZ -765c:000001d6|8005A8f8|007fac30 PpalmtreeZ -7668:000001d7|8005A904|007fb100 Pphone1Z -7674:000001d8|8005A910|007fb240 PplaneZ -7680:000001d9|8005A918|007fd820 Pplant11Z -768c:000001da|8005A924|007fdbe0 Pplant1Z -7698:000001db|8005A930|007fdf70 Pplant2Z -76a4:000001dc|8005A93c|007fe2d0 Pplant2bZ -76b0:000001dd|8005A948|007fe6e0 Pplant3Z -76bc:000001de|8005A954|007feb30 Pradio_unit1Z -76c8:000001df|8005A964|007fece0 Pradio_unit2Z -76d4:000001e0|8005A974|007feea0 Pradio_unit3Z -76e0:000001e1|8005A984|007ff060 Pradio_unit4Z -76ec:000001e2|8005A994|007ff220 ProofgunZ -76f8:000001e3|8005A9a0|007ff880 PsafeZ -7704:000001e4|8005A9a8|007ffbd0 PsafedoorZ -7710:000001e5|8005A9b4|008000c0 Psat1_reflectZ -771c:000001e6|8005A9c4|00801630 PsatboxZ -7728:000001e7|8005A9d0|00801750 PsatdishZ -7734:000001e8|8005A9dc|00801bb0 Psec_panelZ -7740:000001e9|8005A9e8|00801d50 Psev_door3Z -774c:000001ea|8005A9f4|00801fe0 Psev_door3_windZ -7758:000001e0|8005Aa08|00802370 Psev_door4_windZ -7764:000001ec|8005Aa1c|00802750 Psev_doorZ -7770:000001ed|8005Aa28|00802aa0 Psev_door_v1Z -777c:000001ee|8005Aa38|00802dd0 Psev_trislideZ -7788:000001ef|8005Aa48|00803180 PsevdishZ -7794:000001f0|8005Aa54|008040a0 PsevdoormetslideZ -77a0:000001f1|8005Aa68|00804380 PsevdoornowindZ -77ac:000001f2|8005Aa78|008044f0 PsevdoorwindZ -77b8:000001f3|8005Aa88|00804920 PsevdoorwoodZ -77c4:000001f4|8005Aa98|00804cd0 PshuttleZ -77d0:000001f5|8005Aaa4|008076d0 Pshuttle_door_1Z -77dc:000001f6|8005Aab8|00808300 Pshuttle_door_rZ -77e8:000001f7|8005Aacc|00809000 PsilencerZ -77f4:000001f8|8005Aad8|008091a0 Psilo_lit_doorZ -7800:000001f9|8005Aaec|008093e0 PsilotopdoorZ -780c:000001fa|8005Aafc|008096d0 PskorpionmagZ -7818:000001fb|8005Ab0c|00809830 PspectremagZ -7824:000001fc|8005Ab1c|008099a0 PspeedboatZ -7830:000001fd|8005Ab28|0080a6e0 Pst_pete_room_1Z -783c:000001fe|8005Ab3c|0080d820 Pst_pete_room_2Z -7848:000001ff|8005Ab50|00810a00 Pst_pete_room_3Z -7854:00000200|8005Ab64|00813940 Pst_pete_room_5Z -7860:00000201|8005Ab78|00816ed0 Pst_pete_room_6Z -786c:00000202|8005Ab8c|0081a2e0 Psteel_door1Z -7878:00000203|8005Ab9c|0081a550 Psteel_door2Z -7884:00000204|8005Abac|0081a800 Psteel_door2bZ -7890:00000205|8005Abbc|0081aad0 Psteel_door3Z -789c:00000206|8005Abcc|0081ada0 Pstool1Z -78a8:00000207|8005Abd8|0081b060 Pswipe_card2Z -78b4:00000208|8005Abe8|0081b1f0 Pswivel_chair1Z -78c0:00000209|8005Abf8|0081b480 PtankZ -78cc:0000020a|8005Ac00|0081cf20 PtigerZ -78d8:0000020b|8005Ac08|0081edb0 Ptorpedo_rackZ -78e4:0000020c|8005Ac18|0081f630 Ptrain_door2Z -78f0:0000020d|8005Ac28|0081fa00 Ptrain_door3Z -78fc:0000020e|8005Ac38|0081fe20 Ptrain_doorZ -7908:0000020f|8005Ac48|00820090 PtrainextdoorZ -7914:00000210|8005Ac58|008203d0 Ptt33magZ -7920:00000211|8005Ac64|00820510 Ptuning_console1Z -792c:00000212|8005Ac78|00820a30 Ptv1Z -7938:00000213|8005Ac80|00820c00 Ptv4screenZ -7944:00000214|8005Ac8c|00820da0 Ptv_holderZ -7950:00000215|8005Ac98|00821470 PtvscreenZ -795c:00000216|8005Aca4|00821540 PuzimagZ -7968:00000217|8005Acb0|00821680 PvertdoorZ -7974:00000218|8005Acbc|00821c90 PwalletbondZ -7980:00000219|8005Accc|00823240 PwindowZ -798c:0000021a|8005Acd8|00823330 Pwindow_cor11Z -7998:0000021b|8005Ace8|00823410 Pwindow_lib_lg1Z -79a4:0000021c|8005Acfc|008234f0 Pwindow_lib_sm1Z -79b0:0000021d|8005Ad10|008235e0 Pwood_lg_crate1Z -79bc:0000021e|8005Ad24|00823860 Pwood_lg_crate2Z -79c8:0000021f|8005Ad38|00823a80 Pwood_md_crate3Z -79d4:00000220|8005Ad4c|00823ca0 Pwood_sm_crate4Z -79e0:00000221|8005Ad60|00823f00 Pwood_sm_crate5Z -79ec:00000222|8005Ad74|00824160 Pwood_sm_crate6Z -79f8:00000223|8005Ad88|00824380 Pwooden_table1Z -7a04:00000224|8005Ad98|008246f0 PwppkmagZ - -clipping -8004*number *word *ROM addy *word value @ pointer -7a10:00000225|8005ada4|00824830 Tbg_ame_all_p_stanZ library -7a1c:00000226|8005adb8|00826160 Tbg_arch_all_p_stanZ archives -7a28:00000227|8005add0|0083be50 Tbg_arec_all_p_stanZ control -7a34:00000228|8005ade8|008341a0 Tbg_ark_all_p_stanZ facility -7a40:00000229|8005adfc|0083d160 Tbg_ash_all_p_stanZ stack -7a4c:0000022a|8005ae10|0083ea90 Tbg_azt_all_p_stanZ aztec -7a58:0000022b|8005ae24|00844010 Tbg_cat_all_p_stanZ citadel -7a64:0000022c|8005ae38|00846740 Tbg_cave_all_p_stanZ caverns -7a70:0000022d|8005ae50|0084b630 Tbg_crad_all_p_stanZ cradle -7a7c:0000022e|8005ae68|0084df40 Tbg_cryp_all_p_stanZ egypt -7a88:0000022f|8005ae80|00850fb0 Tbg_dam_all_p_stanZ dam -7a94:00000230|8005ae94|0085b390 Tbg_depo_all_p_stanZ depot -7aa0:00000231|8005aeac|008622d0 Tbg_dest_all_p_stanZ frigate -7aac:00000232|8005aec4|00868bc0 Tbg_dish_all_p_stanZ temple -7ab8:00000233|8005aedc|008696d0 Tbg_ear_all_p_stanZ (basement clipping) -7ac4:00000234|8005aef0|008696d0 Tbg_eld_all_p_stanZ (basement clipping) -7ad0:00000235|8005af04|008696d0 Tbg_imp_all_p_stanZ basement -7adc:00000236|8005af18|0086b000 Tbg_jun_all_p_stanZ jungle -7ae8:00000237|8005af2c|00872150 Tbg_lee_all_p_stanZ (cuba clipping) -7af4:00000238|8005af40|00872150 Tbg_len_all_p_stanZ cuba -7b00:00000239|8005af54|00872c10 Tbg_lip_all_p_stanZ (caves clipping) -7b0c:0000023a|8005af68|00872c10 Tbg_lue_all_p_stanZ (caves clipping) -7b18:0000023b|8005af70|00872c10 Tbg_oat_all_p_stanZ caves -7b24:0000023c|8005af90|00874510 Tbg_pam_all_p_stanZ (streets clipping) -7b30:0000023d|8005afa4|00874510 Tbg_pete_all_p_stanZ streets -7b3c:0000023e|8005afbc|00878ba0 Tbg_ref_all_p_stanZ complex -7b48:0000023f|8005afd0|0087a970 Tbg_rit_all_p_stanZ (runway clipping) -7b54:00000240|8005afe4|0087a970 Tbg_run_all_p_stanZ runway -7b60:00000241|8005aff8|0087c3f0 Tbg_sev_all_p_stanZ bunker 1 -7b6c:00000242|8005b00c|008801c0 Tbg_sevb_all_p_stanZ bunker 2 -7b78:00000243|8005b024|00885100 Tbg_sevx_all_p_stanZ surfaces -7b84:00000244|8005b03c|0088e430 Tbg_silo_all_p_stanZ silo -7b90:00000245|8005b054|008974d0 Tbg_stat_all_p_stanZ statue -7b9c:00000246|8005b06c|0089c390 Tbg_tra_all_p_stanZ train -7ba8:00000247|8005b080|0089e760 Tbg_wax_all_p_stanZ (UbriefarchZ load) - -mission briefings -8004*number *word *ROM addy *word value @ pointer -7bb4:00000248|8005b094|0089e760 UbriefarchZ -7bc0:00000249|8005b0a0|0089e780 UbriefarkZ -7bcc:0000024a|8005b0ac|0089e7a0 UbriefaztZ -7bd8:0000024b|8005b0b8|0089e7c0 UbriefcaveZ -7be4:0000024c|8005b0c4|0089e7e0 UbriefcontrolZ -7bf0:0000024d|8005b0d4|0089e800 UbriefcradZ -7bfc:0000024e|8005b0e0|0089e820 UbriefcrypZ -7c08:0000024f|8005b0ec|0089e840 UbriefdamZ -7c14:00000250|8005b0f8|0089e860 UbriefdepoZ -7c20:00000251|8005b104|0089e880 UbriefdestZ -7c2c:00000252|8005b110|0089e8a0 UbriefjunZ -7c38:00000253|8005b11c|0089e8c0 UbriefpeteZ -7c44:00000254|8005b128|0089e8e0 UbriefrunZ -7c50:00000255|8005b134|0089e900 UbriefsevbZ -7c5c:00000256|8005b140|0089e920 UbriefsevbunkerZ -7c68:00000257|8005b154|0089e940 UbriefsevxZ -7c74:00000258|8005b160|0089e960 UbriefsevxbZ -7c80:00000259|8005b170|0089e980 UbriefsiloZ -7c8c:0000025a|8005b17c|0089e9a0 UbriefstatueZ -7c98:0000025b|8005b18c|0089e9c0 UbrieftraZ - -multi props -8004*number *word *ROM addy *word value @ pointer -7ca4:0000025c|8005b198|0089e9e0 Ump_setupameZ library -7cb0:0000025d|8005b1a8|0089f100 Ump_setuparchZ archives -7cbc:0000025e|8005b1b8|008a1ea0 Ump_setuparkZ facility -7cc8:0000025f|8005b1c8|008a3be0 Ump_setupashZ stack -7cd4:00000260|8005b1d8|008a42d0 Ump_setupcaveZ caverns -7ce0:00000261|8005b1e8|008a6830 Ump_setupcradZ cradle -7cec:00000262|8005b1f8|008a7190 Ump_setupcrypZ egyptian -7cf8:00000263|8005b208|008a7ef0 Ump_setupdishZ temple -7d04:00000264|8005b218|008a82e0 Ump_setupimpZ basement -7d10:00000265|8005b228|008a8920 Ump_setupoatZ caves -7d1c:00000266|8005b238|008a8c70 Ump_setuprefZ complex -7d28:00000267|8005b248|008a9080 Ump_setupsevbZ bunker2 -7d34:00000268|8005b258|008aa390 Ump_setupstatueZ - -solo setup -8004*number *word *ROM addy *word value @ pointer -7d40:00000269|8005b26c|008ab210 UsetuparchZ -7d4c:0000026a|8005b278|008af820 UsetuparkZ -7d58:0000026b|8005b284|008b33b0 UsetupaztZ -7d64:0000026c|8005b290|008b5cb0 UsetupcaveZ -7d70:0000026d|8005b29c|008b9b10 UsetupcontrolZ -7d7c:0000026e|8005b2ac|008bd610 UsetupcradZ -7d88:0000026f|8005b2b8|008bf240 UsetupcrypZ -7d94:00000270|8005b2c4|008c10d0 UsetupdamZ -7da0:00000271|8005b2d0|008c53a0 UsetupdepoZ -7dac:00000272|8005b2dc|008c8330 UsetupdestZ -7db8:00000273|8005b2e8|008ca680 UsetupjunZ -7dc4:00000274|8005b2f4|008cdd80 UsetuplenZ -7dd0:00000275|8005b300|008ce350 UsetuppeteZ -7ddc:00000276|8005b30c|008d12d0 UsetuprunZ -7de8:00000277|8005b318|008d2b30 UsetupsevbZ -7df4:00000278|8005b324|008d5190 UsetupsevbunkerZ -7e00:00000279|8005b338|008d6bc0 UsetupsevxZ -7e0c:0000027a|8005b344|008daed0 UsetupsevxbZ -7e18:0000027b|8005b354|008defc0 UsetupsiloZ -7e24:0000027c|8005b360|008e1a10 UsetupstatueZ -7e30:0000027d|8005b370|008e41e0 UsetuptraZ - -in stage text -J - japanese (NTSC), E - english (NTSC), P - english (PAL) -8004*number *word *ROM addy *word value @ pointer -7e3c:0000027e|8005b37c|008e7410 LameE | -7e48:0000027f|8005b384|008e7420 LameJ | -7e54:00000280|8005b38c|008e7430 LarchE | -7e60:00000281|8005b394|008e7a60 LarchJ | -7e6c:00000282|8005b39c|008e80c0 LarecE | -7e78:00000283|8005b3a4|008e8690 LarecJ | -7e84:00000284|8005b3ac|008e8c20 LarkE | -7e90:00000285|8005b3b4|008e92c0 LarkJ | -7e9c:00000286|8005b3bc|008e9970 LashE | -7ea8:00000287|8005b3c4|008e9980 LashJ | -7eb4:00000288|8005b3cc|008e9990 LaztE | -7ec0:00000289|8005b3d4|008e9dd0 LaztJ | -7ecc:0000028a|8005b3dc|008ea280 LcatE | -7ed8:0000028b|8005b3e4|008ea290 LcatJ | -7ee4:0000028c|8005b3ec|008ea2a0 LcaveE | -7ef0:0000028d|8005b3f4|008ea6a0 LcaveJ | -7efc:0000028e|8005b3fc|008eab00 LcradE | -7f08:0000028f|8005b404|008eafd0 LcradJ | -7f14:00000290|8005b40c|008eb480 LcrypE | -7f20:00000291|8005b414|008eb6d0 LcrypJ | -7f2c:00000292|8005b41c|008eb990 LdamE | -7f38:00000293|8005b424|008ebde0 LdamJ | -7f44:00000294|8005b42c|008ec250 LdepoE | -7f50:00000295|8005b434|008ec5c0 LdepoJ | -7f5c:00000296|8005b43c|008ec900 LdestE | -7f68:00000297|8005b444|008ecd90 LdestJ | -7f74:00000298|8005b44c|008ed1f0 LdishE | -7f80:00000299|8005b454|008ed200 LdishJ | -7f8c:0000029a|8005b45c|008ed210 LearE | -7f98:0000029b|8005b464|008ed220 LearJ | -7fa4:0000029c|8005b46c|008ed230 LeldE | -7fb0:0000029d|8005b474|008ed240 LeldJ | -7fbc:0000029e|8005b47c|008ed250 LgunE | -7fc8:0000029f|8005b484|008ed970 LgunJ | -7fd4:000002a0|8005b48c|008ee0c0 LimpE | -7fe0:000002a1|8005b494|008ee0d0 LimpJ | -7fec:000002a2|8005b49c|008ee0e0 LjunE | -7ff8:000002a3|8005b4a4|008ee600 LjunJ | -8004:000002a4|8005b4ac|008eeb40 LleeE | -8010:000002a5|8005b4b4|008eeb50 LleeJ | -801c:000002a6|8005b4bc|008eeb60 LlenE | -8028:000002a7|8005b4c4|008ef1a0 LlenJ | -8034:000002a8|8005b4cc|008ef450 LlipE | -8040:000002a9|8005b4d4|008ef460 LlipJ | -804c:000002aa|8005b4dc|008ef470 LlueE | -8058:000002ab|8005b4e4|008ef480 LlueJ | -8064:000002ac|8005b4ec|008ef490 LmiscE | -8070:000002ad|8005b4f4|008ef730 LmiscJ | -807c:000002ae|8005b4fc|008efa10 LmpmenuE | -8088:000002af|8005b508|008efbb0 LmpmenuJ | -8094:000002b0|8005b514|008efd40 LmpweaponsE | -80a0:000002b1|8005b520|008efe00 LmpweaponsJ | -80ac:000002b2|8005b52c|008efee0 LoatE | -80b8:000002b3|8005b534|008efef0 LoatJ | -80c4:000002b4|8005b53c|008e0080 LoptionsE | -80d0:000002b5|8005b548|008f0130 LoptionsJ | -80dc:000002b6|8005b554|008f0380 LpamE | -80e8:000002b7|8005b55c|008f0390 LpamJ | -80f4:000002b8|8005b564|008f03a0 LpeteE | -8100:000002b9|8005b56c|008f0820 LpeteJ | -810c:000002ba|8005b574|008f0c90 LpropobjE | -8118:000002bb|8005b580|008f0f30 LpropobjJ | -8124:000002bc|8005b58c|008f11f0 LrefE | -810c:000002bd|8005b594|008f1200 LrefJ | -813c:000002be|8005b59c|008f1210 LritE | -8148:000002bf|8005b5a4|008f1220 LritJ | -8154:000002c0|8005b5ac|008f1230 LrunE | -8160:000002c1|8005b5b4|008f14a0 LrunJ | -816c:000002c2|8005b5bc|008f1730 LsevE | -8178:000002c3|8005b5c4|008f1c90 LsevJ | -8184:000002c4|8005b5cc|008f21a0 LsevbE | -8190:000002c5|8005b5d4|008f28f0 LsevbJ | -819c:000002c6|8005b5dc|008f30e0 LsevxE | -81a8:000002c7|8005b5e4|008f3540 LsevxJ | -81b4:000002c8|8005b5ec|008f3900 LsevxbE | -81c0:000002c9|8005b5f4|008f3d90 LsevxbJ | -81cc:000002ca|8005b5fc|008f41e0 LshoE | -81d8:000002cb|8005b604|008f41f0 LshoJ | -81e4:000002cc|8005b60c|008f4200 LsiloE | - -81f0:000002cd|8005b614|008f47b0 LsiloJ | -81fc:000002ce|8005b61c|008f4d90 LstatE | -8208:000002cf|8005b624|008f56b0 LstatJ | -8214:000002d0|8005b62c|008f5f20 LtitleE | -8220:000002d1|8005b634|008f69e0 LtitleJ | -822c:000002d2|8005b63c|008f7570 LtraE | -8238:000002d3|8005b644|008f79a0 LtraJ | -8244:000002d4|8005b64c|008f7dc0 LwaxE | -8250:000002d5|8005b654|008f7dd0 LwaxJ | -825c:000002d6|8005b65c|008f7de0 ob/ob_end.seg | - -Images: -(note: not all the descriptions are given here) -(note note: not all are in the ROM Image swapper either) -(note note note: compressed binaries follow image type/palette/etc) -000 8F7DF0 (00) 40 1C Size 0754 OTHER Greyscale Type 00 -001 8F8544 (40) 0F 0F Size 016A cType 3 Type 0B colours 61 -002 8F86AE (00) 20 1C Size 0974 OTHER Greyscale Type 00 -003 8F9022 (00) 80 12 Size 038B OTHER Greyscale Type 00 -004 8F93AD (40) 14 14 Size 0153 cType 5 Type 0B colours 57 -005 8F9500 (46) 20 20 Size 025E cType 5 Type 09 colours 18 [Side of Train Engine-Train] -006 8F975E (46) 20 20 Size 03BE cType 5 Type 09 colours A2 [Side of Train Engine-Train] -007 8F9B1C (46) 20 20 Size 001A cType 3 Type 0A colours 2 [0063,0088-008A,008C,008D,0090,0098,0099 Caution Strips- Bunker1,Silo,Control,Surface,Jungle -008 8F9B36 (46) 20 20 Size 001A cType 3 Type 0A colours 2 [0092-0094,00B0,00B5,0112,0126,012B,0132,0133 Warning Stripes- Bunker1,Silo,Control,Facility -009 8F9B50 (46) 20 20 Size 037F cType 5 Type 09 colours 5E -00A 8F9ECF (46) 20 20 Size 0391 cType 5 Type 09 colours 5F -00B 8FA260 (C5) 11 11 Size 00E0 cType 3 Type 09 colours 21 [00C5 RC-P90 Nozzle] -00C 8FA340 (07) 20 40 Size 03A4 OTHER Greyscale Type 07 -00D 8FA6E4 (07) 20 40 Size 04A3 OTHER Greyscale Type 07 -00E 8FAB87 (00) 20 41 Size 0477 OTHER Greyscale Type 00 -00F 8FAFFE (07) 20 40 Size 0471 OTHER Greyscale Type 07 -010 8FB46F (07) 20 40 Size 04AC OTHER Greyscale Type 07 -011 8FB91B (46) 20 20 Size 03DA cType 5 Type 09 colours 86 -012 8FBCF5 (46) 20 20 Size 001A cType 3 Type 0A colours 2 [00B3 Warning Stripes - Dam] -013 8FBD0F (46) 20 20 Size 001A cType 3 Type 0A colours 2 [0095-0097 Caution Strips] -014 8FBD29 (07) 40 20 Size 0619 OTHER Greyscale Type 07 -015 8FC342 (40) 10 10 Size 0135 cType 5 Type 0B colours 34 -016 8FC477 (07) 40 20 Size 05F5 OTHER Greyscale Type 07 -017 8FCA6C (87) 48 20 Size 035F OTHER Greyscale Type 87 -018 8FCDCB (87) 48 20 Size 0350 OTHER Greyscale Type 87 -019 8FD11B (46) 20 20 Size 060C cType 1 Type 09 colours FF -01A 8FD727 (46) 20 20 Size 00C5 cType 5 Type 09 colours 1B [Shiny Black (pp7s,DD44,kf7,ZMG,D5Ks,RC-P90,Grenade Launcher)] -01B 8FD7EC (46) 20 20 Size 00A6 cType 3 Type 0A colours D [(KF7)] -01C 8FD892 (46) 20 20 Size 00B5 cType 3 Type 0A colours B [Gun Detail (kf7,ZMG,D5Ks,AR33,RC-P90)] -01D 8FD947 (46) 20 20 Size 03DD cType 5 Type 09 colours 6C [0000 Alarm, 0001 Back of Alarm] -01E 8FDD24 (46) 20 30 Size 03FC cType 5 Type 09 colours B0 [0001 Alarm Front] -01F 8FE120 (46) 20 20 Size 0308 cType 5 Type 09 colours 65 [0000 Alarm Bell, Mine Center Button(Timed, Remote Mine)] -020 8FE428 (46) 20 20 Size 0306 cType 5 Type 09 colours 63 [Center Button(Proximity Mine)] -021 8FE72E (07) 40 20 Size 064A OTHER Greyscale Type 07 -022 8FED78 (07) 40 20 Size 05CC OTHER Greyscale Type 07 -023 8FF344 (07) 40 20 Size 06A0 OTHER Greyscale Type 07 -024 8FF9E4 (07) 40 20 Size 06C6 OTHER Greyscale Type 07 -025 9000AA (46) 20 20 Size 03EB cType 3 Type 09 colours FF [0003-0007 Ammo Box Handle] -026 900495 (46) 10 20 Size 0113 cType 3 Type 09 colours 63 -027 9005A8 (07) 80 10 Size 0227 OTHER Greyscale Type 07 -028 9007CF (07) 80 10 Size 0219 OTHER Greyscale Type 07 -029 9009E8 (07) 80 10 Size 022B OTHER Greyscale Type 07 -02A 900C13 (07) 80 10 Size 0222 OTHER Greyscale Type 07 -02B 900E35 (07) 40 20 Size 053D OTHER Greyscale Type 07 -02C 901372 (07) 40 20 Size 055C OTHER Greyscale Type 07 -02D 9018CE (07) 40 20 Size 03EF OTHER Greyscale Type 07 -02E 901CBD (07) 10 80 Size 019A OTHER Greyscale Type 07 -02F 901E57 (07) 40 20 Size 0454 OTHER Greyscale Type 07 -030 9022AB (07) 20 40 Size 06BE OTHER Greyscale Type 07 -031 902969 (07) 40 20 Size 027C OTHER Greyscale Type 07 -032 902BE5 (07) 40 20 Size 05E6 OTHER Greyscale Type 07 -033 9031CB (07) 40 20 Size 0338 OTHER Greyscale Type 07 -034 903503 (46) 20 20 Size 04D0 cType 5 Type 09 colours C8 [0121,012E Headlight] -035 9039D3 (07) 40 20 Size 05A0 OTHER Greyscale Type 07 -036 903F73 (00) 40 40 Size 0492 OTHER Greyscale Type 00 -037 904405 (07) 40 20 Size 0318 OTHER Greyscale Type 07 -038 90471D (07) 40 40 Size 010E OTHER Greyscale Type 07 -039 90482B (46) 20 20 Size 00F1 cType 5 Type 09 colours 15 [Elevator Down Arrow - Caverns,Silo,Control] -03A 90491C (46) 20 20 Size 0119 cType 5 Type 09 colours 1F [0054 This End Up Arrow, Elevator Up Arrow, Unlit] -03B 904A35 (46) 20 20 Size 02A6 cType 5 Type 09 colours 71 [Lit Elevtaor Up Arrow - Caverns,Silo,Control] -03C 904CDB (46) 20 20 Size 01A0 cType 5 Type 09 colours 17 -03D 904E7B (46) 20 20 Size 0022 cType 3 Type 0A colours 7 [0119 Red Prime Mover Back] -03E 904E9D (46) 20 20 Size 0114 cType 5 Type 09 colours 41 [0119 Red Prime Mover Door] -03F 904FB1 (46) 20 20 Size 009C cType 3 Type 09 colours 2A [0119 Red Prime Mover Lower Part] -040 90504D (46) 20 20 Size 03A5 cType 5 Type 09 colours 5B [011E Trailer Connecter - Depot] -041 9053F2 (46) 20 20 Size 0378 cType 5 Type 09 colours 69 [011E Trailer Connecter - Depot] -042 90576A (46) 20 20 Size 0344 cType 5 Type 09 colours 51 [0119 Red Prime Mover Lights] -043 905AAE (46) 20 20 Size 00F7 cType 5 Type 09 colours 37 [0119 Red Prime Mover Headlight] -044 905BA5 (46) 20 20 Size 039B cType 5 Type 09 colours 8B [0119,011E Red Prime Mover Lower 4 Wheels/Depot Trailer Wheels] -045 905F40 (46) 20 20 Size 01AD cType 5 Type 09 colours 20 [0119,011E Red Prime Mover Middle Wheel] -046 9060ED (46) 20 20 Size 01E4 cType 5 Type 09 colours 15 [0119 Red Prime Mover Top Panel] -047 9062D1 (46) 20 20 Size 02D5 cType 5 Type 09 colours 3B [011E Trailer Sides - Depot] -048 9065A6 (46) 20 20 Size 00C6 cType 3 Type 09 colours 2E [0119 Red Prime Mover Cab Side Window Frame] -049 90666C (46) 20 20 Size 00C7 cType 3 Type 09 colours 31 [0119 Red Prime Mover Cab Front Window Frame] -04A 906733 (46) 20 20 Size 02B3 cType 5 Type 09 colours 49 [(AutoShotgun)] -04B 9069E6 (46) 20 20 Size 01A2 cType 5 Type 09 colours 31 [(AutoShotgun)] -04C 906B88 (46) 20 20 Size 0190 cType 5 Type 09 colours 18 [(AutoShotgun)] -04D 906D18 (07) 40 20 Size 05E1 OTHER Greyscale Type 07 -04E 9072F9 (46) 20 20 Size 02AF cType 5 Type 09 colours 43 [(AutoShotgun)] -04F 9075A8 (46) 20 20 Size 00DE cType 5 Type 0A colours D [(AutoShotgun)] -050 907686 (46) 20 20 Size 01F4 cType 5 Type 09 colours 27 [(AutoShotgun)] -051 90787A (07) 40 20 Size 05E4 OTHER Greyscale Type 07 -052 907E5E (46) 20 20 Size 01B9 cType 5 Type 09 colours 15 [0136,0138 Blue-Rimmed Glassware,Test Tube Rack(AutoShotgun)] -053 908017 (07) 40 20 Size 05F3 OTHER Greyscale Type 07 -054 90860A (46) 20 20 Size 0227 cType 5 Type 09 colours 19 [(AutoShotgun)] -055 908831 (07) 40 40 Size 02D7 OTHER Greyscale Type 07 -056 908B08 (07) 40 40 Size 03AE OTHER Greyscale Type 07 -057 908EB6 (07) 40 20 Size 02F9 OTHER Greyscale Type 07 -058 9091AF (86) 80 2F Size 0C2A OTHER Greyscale Type 86 -059 909DD9 (86) 80 2F Size 0BFD OTHER Greyscale Type 86 -05A 90A9D6 (86) 80 2F Size 0C31 OTHER Greyscale Type 86 -05B 90B607 (85) 80 2F Size 0B18 OTHER Greyscale Type 85 -05C 90C11F (86) 80 2F Size 0BC6 OTHER Greyscale Type 86 -05D 90CCE5 (86) 80 2F Size 0C68 OTHER Greyscale Type 86 -05E 90D94D (86) 80 2F Size 0CA5 OTHER Greyscale Type 86 -05F 90E5F2 (85) 80 2F Size 0BD4 OTHER Greyscale Type 85 -060 90F1C6 (86) 80 2F Size 0B7D OTHER Greyscale Type 86 -061 90FD43 (86) 80 2F Size 0BD8 OTHER Greyscale Type 86 -062 91091B (86) 80 2F Size 0C41 OTHER Greyscale Type 86 -063 91155C (85) 80 2F Size 0B9F OTHER Greyscale Type 85 -064 9120FB (86) 80 2F Size 0BE6 OTHER Greyscale Type 86 -065 912CE1 (86) 80 2F Size 0CEE OTHER Greyscale Type 86 -066 9139CF (86) 80 2F Size 0D06 OTHER Greyscale Type 86 -067 9146D5 (85) 80 2F Size 0BA1 OTHER Greyscale Type 85 -068 915276 (86) 80 2F Size 0B27 OTHER Greyscale Type 86 -069 915D9D (86) 80 2F Size 0D18 OTHER Greyscale Type 86 -06A 916AB5 (86) 80 2F Size 0CCA OTHER Greyscale Type 86 -06B 91777F (85) 80 2F Size 0A5A OTHER Greyscale Type 85 -06C 9181D9 (86) 80 2F Size 0876 OTHER Greyscale Type 86 -06D 918A4F (86) 80 2F Size 08AA OTHER Greyscale Type 86 -06E 9192F9 (86) 80 2F Size 08CF OTHER Greyscale Type 86 -06F 919BC8 (85) 80 2F Size 0794 OTHER Greyscale Type 85 -070 91A35C (86) 80 2F Size 0A7A OTHER Greyscale Type 86 -071 91ADD6 (86) 80 2F Size 0C92 OTHER Greyscale Type 86 -072 91BA68 (86) 80 2F Size 0B8A OTHER Greyscale Type 86 -073 91C5F2 (85) 80 2F Size 0A53 OTHER Greyscale Type 85 -074 91D045 (86) 80 2F Size 0BF0 OTHER Greyscale Type 86 -075 91DC35 (86) 80 2F Size 0D0C OTHER Greyscale Type 86 -076 91E941 (86) 80 2F Size 0CCC OTHER Greyscale Type 86 -077 91F60D (85) 80 2F Size 09F8 OTHER Greyscale Type 85 -078 920005 (86) 80 2F Size 0CC1 OTHER Greyscale Type 86 -079 920CC6 (86) 80 2F Size 0D3B OTHER Greyscale Type 86 -07A 921A01 (86) 80 2F Size 0D6D OTHER Greyscale Type 86 -07B 92276E (85) 80 2F Size 0BF0 OTHER Greyscale Type 85 -07C 92335E (86) 80 2F Size 0980 OTHER Greyscale Type 86 -07D 923CDE (86) 80 2F Size 0B91 OTHER Greyscale Type 86 -07E 92486F (86) 80 2F Size 0CA1 OTHER Greyscale Type 86 -07F 925510 (85) 80 2F Size 0A82 OTHER Greyscale Type 85 -080 925F92 (86) 80 2F Size 0C7A OTHER Greyscale Type 86 -081 926C0C (86) 80 2F Size 0D4B OTHER Greyscale Type 86 -082 927957 (86) 80 2F Size 0D85 OTHER Greyscale Type 86 -083 9286DC (85) 80 2F Size 0C76 OTHER Greyscale Type 85 -084 929352 (86) 80 2F Size 0BA9 OTHER Greyscale Type 86 -085 929EFB (86) 80 2F Size 0D5A OTHER Greyscale Type 86 -086 92AC55 (86) 80 2F Size 0D50 OTHER Greyscale Type 86 -087 92B9A5 (85) 80 2F Size 0C35 OTHER Greyscale Type 85 -088 92C5DA (86) 80 2F Size 0A8D OTHER Greyscale Type 86 -089 92D067 (86) 80 2F Size 0D26 OTHER Greyscale Type 86 -08A 92DD8D (86) 80 2F Size 0B25 OTHER Greyscale Type 86 -08B 92E8B2 (85) 80 2F Size 0899 OTHER Greyscale Type 85 -08C 92F14B (07) 40 40 Size 0477 OTHER Greyscale Type 07 -08D 92F5C2 (07) 40 40 Size 0485 OTHER Greyscale Type 07 -08E 92FA47 (07) 40 40 Size 0456 OTHER Greyscale Type 07 -08F 92FE9D (86) 80 2F Size 0840 OTHER Greyscale Type 86 -090 9306DD (86) 80 2F Size 084A OTHER Greyscale Type 86 -091 930F27 (86) 80 2F Size 086B OTHER Greyscale Type 86 -092 931792 (85) 80 2F Size 07C2 OTHER Greyscale Type 85 -093 931F54 (46) 20 20 Size 0212 cType 3 Type 09 colours 77 -094 932166 (46) 20 20 Size 024B cType 5 Type 09 colours 73 -095 9323B1 (07) 20 40 Size 0149 OTHER Greyscale Type 07 -096 9324FA (07) 20 40 Size 0125 OTHER Greyscale Type 07 -097 93261F (46) 20 20 Size 0310 cType 3 Type 09 colours A8 [- Bunker1,Surfaces] -098 93292F (07) 20 40 Size 0137 OTHER Greyscale Type 07 -099 932A66 (07) 20 40 Size 0127 OTHER Greyscale Type 07 -09A 932B8D (07) 20 40 Size 013B OTHER Greyscale Type 07 -09B 932CC8 (07) 20 40 Size 02C1 OTHER Greyscale Type 07 -09C 932F89 (07) 20 40 Size 03BC OTHER Greyscale Type 07 -09D 933345 (46) 20 20 Size 058E cType 5 Type 09 colours FF [Prisoner Tiedown Posts - Archives] -09E 9338D3 (46) 20 20 Size 0146 cType 5 Type 09 colours 1A -09F 933A19 (46) 20 20 Size 013B cType 5 Type 09 colours 25 [0070 Lab Bench Sink Walls] -0A0 933B54 (46) 20 20 Size 0233 cType 5 Type 09 colours 1C -0A1 933D87 (07) 40 40 Size 02E1 OTHER Greyscale Type 07 -0A2 934068 (07) 40 40 Size 031C OTHER Greyscale Type 07 -0A3 934384 (07) 40 40 Size 030B OTHER Greyscale Type 07 -0A4 93468F (07) 40 40 Size 033F OTHER Greyscale Type 07 -0A5 9349CE (07) 40 40 Size 02F5 OTHER Greyscale Type 07 -0A6 934CC3 (07) 40 40 Size 033E OTHER Greyscale Type 07 -0A7 935001 (07) 40 40 Size 030E OTHER Greyscale Type 07 -0A8 93530F (46) 20 20 Size 0353 cType 5 Type 09 colours 9C [00A4,00A5,00EE Caverns Door Frames] -0A9 935662 (47) 10 40 Size 0477 cType 5 Type 09 colours A4 [0008 Trash Bin] -0AA 935AD9 (07) 40 40 Size 02F9 OTHER Greyscale Type 07 -0AB 935DD2 (07) 40 40 Size 025B OTHER Greyscale Type 07 -0AC 93602D (45) 10 10 Size 00BA cType 5 Type 0B colours 16 [00EA,00EE Keys, Part of Film Advance] -0AD 9360E7 (46) 20 20 Size 02A6 cType 5 Type 09 colours 2F [0032,0048,014B Chair Seat] -0AE 93638D (46) 20 20 Size 03AA cType 5 Type 0B colours 5D -0AF 936737 (46) 20 20 Size 023C cType 5 Type 09 colours 1E -0B0 936973 (40) 40 20 Size 07DE cType 5 Type 09 colours FF [Saw blade - Statue] -0B1 937151 (46) 20 20 Size 0271 cType 5 Type 09 colours 73 -0B2 9373C2 (46) 20 20 Size 02F3 cType 5 Type 0B colours 2C -0B3 9376B5 (46) 20 20 Size 0314 cType 5 Type 09 colours 3C [0128,0140-0144 Satellite Dish Interior,St.Pete Building Wall- Archives] -0B4 9379C9 (46) 20 20 Size 0128 cType 5 Type 09 colours 1B -0B5 937AF1 (46) 20 20 Size 01F9 cType 5 Type 09 colours 2D -0B6 937CEA (07) 40 20 Size 02B3 OTHER Greyscale Type 07 -0B7 937F9D (46) 20 20 Size 0207 cType 5 Type 09 colours 10 -0B8 9381A4 (40) 20 20 Size 025B cType 5 Type 09 colours 19 [010E Dossier] -0B9 9383FF (46) 20 20 Size 0549 cType 5 Type 09 colours FF [000A,010E Book Spine] -0BA 938948 (46) 20 20 Size 044B cType 3 Type 09 colours 81 -0BB 938D93 (46) 20 20 Size 037F cType 5 Type 09 colours 52 [Wall Texture - Jungle,Caverns] -0BC 939112 (07) 40 20 Size 0620 OTHER Greyscale Type 07 -0BD 939732 (87) 50 41 Size 0453 OTHER Greyscale Type 87 -0BE 939B85 (87) 50 41 Size 056C OTHER Greyscale Type 87 -0BF 93A0F1 (87) 50 41 Size 0597 OTHER Greyscale Type 87 -0C0 93A688 (87) 50 41 Size 0516 OTHER Greyscale Type 87 -0C1 93AB9E (00) 4C 4C Size 0288 OTHER Greyscale Type 00 -0C2 93AE26 (46) 20 20 Size 02C8 cType 5 Type 09 colours 86 -0C3 93B0EE (46) 20 20 Size 0597 cType 1 Type 09 colours EA [Brick Behind Archives Windows] -0C4 93B685 (46) 20 20 Size 047D cType 5 Type 09 colours 88 -0C5 93BB02 (46) 20 20 Size 029F cType 5 Type 09 colours 29 [005F,00C4,00A4 Control Desk Top,Grenade Cap, Caverns Eye Door Passage- Facility] -0C6 93BDA1 (46) 20 20 Size 02A3 cType 5 Type 09 colours 30 [00EE,0123 Camera Push Advance,Plane Control Stick] -0C7 93C044 (46) 20 20 Size 014A cType 5 Type 0A colours 8 [00B5 Door and Edges] -0C8 93C18E (46) 20 20 Size 04BA cType 5 Type 09 colours C4 [Radar] -0C9 93C648 (46) 20 20 Size 03FA cType 5 Type 09 colours BE [Hanging Light Fixtures - Caverns] -0CA 93CA42 (46) 20 20 Size 052F cType 7 Type 09 colours FF [- Bunker1,Silo] -0CB 93CF71 (46) 20 20 Size 0460 cType 3 Type 09 colours FF [- Bunker1,Surfaces] -0CC 93D3D1 (46) 20 20 Size 0561 cType 5 Type 09 colours FF -0CD 93D932 (46) 20 20 Size 04F7 cType 3 Type 09 colours FF [- Bunker1,Silo,Surfaces] -0CE 93DE29 (07) 40 20 Size 0409 OTHER Greyscale Type 07 -0CF 93E232 (07) 40 20 Size 0643 OTHER Greyscale Type 07 -0D0 93E875 (00) 40 40 Size 0B2B OTHER Greyscale Type 00 -0D1 93F3A0 (00) 40 40 Size 0C3E OTHER Greyscale Type 00 -0D2 93FFDE (07) 40 20 Size 0578 OTHER Greyscale Type 07 -0D3 940556 (46) 20 20 Size 00CF cType 3 Type 09 colours 2F -0D4 940625 (47) 10 40 Size 0290 cType 5 Type 09 colours 7C -0D5 9408B5 (07) 20 40 Size 04D6 OTHER Greyscale Type 07 -0D6 940D8B (46) 20 20 Size 00E0 cType 3 Type 09 colours 39 -0D7 940E6B (07) 40 40 Size 026E OTHER Greyscale Type 07 -0D8 9410D9 (46) 20 20 Size 014E cType 5 Type 09 colours 36 [00EE Camera Shutter Button] -0D9 941227 (46) 20 20 Size 01E0 cType 5 Type 09 colours 15 [011A Nat. Helicopter Body] -0DA 941407 (46) 20 20 Size 0119 cType 5 Type 0A colours A [0117 Military Truck Canopy and Wheelwells] -0DB 941520 (07) 40 40 Size 03D8 OTHER Greyscale Type 07 -0DC 9418F8 (07) 40 40 Size 0409 OTHER Greyscale Type 07 -0DD 941D01 (07) 40 40 Size 03F2 OTHER Greyscale Type 07 -0DE 9420F3 (07) 40 40 Size 0409 OTHER Greyscale Type 07 -0DF 9424FC (07) 40 40 Size 0442 OTHER Greyscale Type 07 -0E0 94293E (07) 40 40 Size 043D OTHER Greyscale Type 07 -0E1 942D7B (07) 40 40 Size 03F6 OTHER Greyscale Type 07 -0E2 943171 (46) 20 20 Size 02B3 cType 5 Type 09 colours 4B [012B Door Latch] -0E3 943424 (46) 20 20 Size 037F cType 5 Type 09 colours 59 [0123 Cessna Padded Interior(Grenade Launcher)] -0E4 9437A3 (46) 20 20 Size 0269 cType 5 Type 09 colours 1C [00D3 Rocket Launcher Handle(Rocket Launcher)] -0E5 943A0C (46) 20 20 Size 0229 cType 5 Type 09 colours 2E [0124,012B Drone Gun Shell,Door Lock] -0E6 943C35 (07) 40 20 Size 0383 OTHER Greyscale Type 07 -0E7 943FB8 (46) 20 20 Size 05DA cType 3 Type 09 colours FF [Discharged Rifle Rounds] -0E8 944592 (07) 40 20 Size 0341 OTHER Greyscale Type 07 -0E9 9448D3 (46) 20 20 Size 012E cType 5 Type 09 colours 49 [Discharged 9mm Shells(Shotgun)] -0EA 944A01 (07) 40 20 Size 0554 OTHER Greyscale Type 07 -0EB 944F55 (46) 20 20 Size 039D cType 5 Type 09 colours 6E [0119 Prime Mover Bed] -0EC 9452F2 (07) 40 20 Size 0496 OTHER Greyscale Type 07 -0ED 945788 (46) 20 20 Size 04E9 cType 5 Type 09 colours CC [Floor Grating] -0EE 945C71 (07) 40 20 Size 03C7 OTHER Greyscale Type 07 -0EF 946038 (07) 40 20 Size 03DF OTHER Greyscale Type 07 -0F0 946417 (46) 20 20 Size 0400 cType 5 Type 09 colours 86 [Floor Grating - Library,Caverns,Facility] -0F1 946817 (46) 20 20 Size 0245 cType 5 Type 09 colours 5A [0128 Satellite Dish Sides of Support- Surfaces] -0F2 946A5C (46) 20 20 Size 01F6 cType 5 Type 09 colours 1F [Turf on Spiral - Caverns] -0F3 946C52 (46) 20 20 Size 015F cType 5 Type 0A colours B [Turf - Caverns] -0F4 946DB1 (46) 20 20 Size 0478 cType 5 Type 09 colours 91 [Rusty Steel in Blue Tube - Caverns] -0F5 947229 (07) 20 80 Size 020D OTHER Greyscale Type 07 -0F6 947436 (07) 40 20 Size 02E2 OTHER Greyscale Type 07 -0F7 947718 (07) 20 40 Size 00C7 OTHER Greyscale Type 07 -0F8 9477DF (07) 20 40 Size 00B4 OTHER Greyscale Type 07 -0F9 947893 (07) 20 40 Size 0098 OTHER Greyscale Type 07 -0FA 94792B (07) 20 40 Size 00C7 OTHER Greyscale Type 07 -0FB 9479F2 (07) 40 40 Size 0329 OTHER Greyscale Type 07 -0FC 947D1B (46) 20 20 Size 02A1 cType 5 Type 09 colours 4D [Light Fixture Light] -0FD 947FBC (46) 20 20 Size 02CD cType 5 Type 09 colours 8F [Light Fixture Light- Facility] -0FE 948289 (46) 20 20 Size 0408 cType 5 Type 09 colours C8 [0028 Desk Lamp Light- Bunker1,Silo,Surfaces] -0FF 948691 (46) 20 20 Size 03EB cType 5 Type 09 colours FE [Light Fixture] -100 948A7C (46) 20 20 Size 01CF cType 5 Type 09 colours 19 [Light Fixture Light] -101 948C4B (46) 20 20 Size 033D cType 5 Type 09 colours 56 [- Bunker1,Surfaces] -102 948F88 (46) 20 20 Size 0287 cType 5 Type 09 colours 42 [-Silo,Facility] -103 94920F (46) 20 20 Size 0326 cType 5 Type 09 colours 68 [Vent Cover - Bunkers] -104 949535 (46) 20 20 Size 0380 cType 3 Type 0B colours FF -105 9498B5 (07) 40 20 Size 02B1 OTHER Greyscale Type 07 -106 949B66 (46) 10 20 Size 02C4 cType 5 Type 09 colours 8C -107 949E2A (07) 40 20 Size 022E OTHER Greyscale Type 07 [0049 Swivel Chair Legs] -108 94A058 (46) 20 20 Size 0584 cType 5 Type 09 colours F0 [0049 Swivel Chair Seats] -109 94A5DC (07) 40 20 Size 01A8 OTHER Greyscale Type 07 -10A 94A784 (46) 20 20 Size 004F cType 3 Type 09 colours 15 -10B 94A7D3 (46) 20 20 Size 0558 cType 3 Type 0B colours E4 -10C 94AD2B (46) 20 20 Size 02D7 cType 5 Type 09 colours 52 -10D 94B002 (46) 20 20 Size 0582 cType 5 Type 0B colours C8 -10E 94B584 (07) 40 20 Size 02B6 OTHER Greyscale Type 07 -10F 94B83A (46) 20 20 Size 0516 cType 5 Type 09 colours FF -110 94BD50 (46) 20 20 Size 04E0 cType 5 Type 09 colours FA -111 94C230 (46) 20 30 Size 0799 cType 5 Type 09 colours FF [Propaganda - Archives] -112 94C9C9 (46) 20 30 Size 0780 cType 5 Type 09 colours FF [Propaganda - Archives] -113 94D149 (46) 20 30 Size 080C cType 1 Type 09 colours FF [Propaganda - Archives] -114 94D955 (46) 20 30 Size 07A7 cType 5 Type 09 colours FF [Propaganda - Archives] -115 94E0FC (46) 20 30 Size 0784 cType 5 Type 09 colours FF [Propaganda - Archives] -116 94E880 (07) 20 40 Size 06B3 OTHER Greyscale Type 07 -117 94EF33 (46) 20 20 Size 029A cType 5 Type 09 colours 2E [Ceiling- Control,Library] -118 94F1CD (07) 40 40 Size 0389 OTHER Greyscale Type 07 -119 94F556 (00) 40 40 Size 02EE OTHER Greyscale Type 00 -11A 94F844 (07) 40 40 Size 031F OTHER Greyscale Type 07 -11B 94FB63 (07) 40 40 Size 0322 OTHER Greyscale Type 07 -11C 94FE85 (07) 40 20 Size 0578 OTHER Greyscale Type 07 -11D 9503FD (46) 20 20 Size 031E cType 5 Type 09 colours 4B [Walls- Control,Library(Basement)] -11E 95071B (07) 40 40 Size 0428 OTHER Greyscale Type 07 -11F 950B43 (07) 40 40 Size 04C1 OTHER Greyscale Type 07 -120 951004 (07) 40 40 Size 0479 OTHER Greyscale Type 07 -121 95147D (07) 40 40 Size 04F9 OTHER Greyscale Type 07 -122 951976 (07) 40 40 Size 048B OTHER Greyscale Type 07 -123 951E01 (07) 40 40 Size 03DF OTHER Greyscale Type 07 -124 9521E0 (07) 40 40 Size 0546 OTHER Greyscale Type 07 -125 952726 (07) 40 40 Size 0530 OTHER Greyscale Type 07 -126 952C56 (46) 20 20 Size 052B cType 5 Type 09 colours C5 [0132,0133,0149,014A,014B Door Edge Before Seal,Table surface- Bunker1,Surfaces] -127 953181 (46) 20 20 Size 03EF cType 5 Type 09 colours 77 [0132,0133 Shuttle Door Lower Rails- Bunker1,Surfaces] -128 953570 (46) 20 20 Size 0440 cType 5 Type 09 colours 9A [0132,0133 Shuttle Door Inner Side- Bunker1,Silo,Surfaces] -129 9539B0 (46) 20 20 Size 03A2 cType 5 Type 09 colours 88 -12A 953D52 (46) 20 20 Size 030F cType 5 Type 09 colours 63 -12B 954061 (46) 20 20 Size 0303 cType 5 Type 09 colours 4F [0117,0118,0119 Bumper,Jeep Dash/Doorframe - Bunker1,Archives,Surfaces] -12C 954364 (46) 20 20 Size 0303 cType 5 Type 09 colours 4F [00B0 Shutter Guiderails,Lower Doorframe - Archives,Silo] -12D 954667 (07) 40 40 Size 0374 OTHER Greyscale Type 07 -12E 9549DB (07) 40 20 Size 0535 OTHER Greyscale Type 07 -12F 954F10 (46) 20 20 Size 027F cType 5 Type 09 colours 55 -130 95518F (07) 40 20 Size 00C8 OTHER Greyscale Type 07 -131 955257 (46) 20 20 Size 023D cType 5 Type 09 colours 33 -132 955494 (46) 20 20 Size 02AF cType 5 Type 09 colours 42 [- Control] -133 955743 (07) 40 20 Size 0560 OTHER Greyscale Type 07 -134 955CA3 (46) 20 20 Size 0385 cType 5 Type 09 colours 57 [- Facility] -135 956028 (46) 20 20 Size 03B5 cType 5 Type 09 colours 60 [0140-0144 St.Pete Building Wall] -136 9563DD (46) 20 20 Size 0547 cType 5 Type 09 colours C0 -137 956924 (46) 20 20 Size 032F cType 5 Type 09 colours 45 [- Facility] -138 956C53 (46) 20 20 Size 0388 cType 5 Type 09 colours 8B -139 956FDB (46) 20 20 Size 027C cType 5 Type 09 colours 2E -13A 957257 (46) 20 20 Size 027C cType 5 Type 09 colours 2E [- Control] -13B 9574D3 (46) 20 20 Size 0245 cType 5 Type 09 colours 36 [- Bunker1,Surfaces] -13C 957718 (46) 20 20 Size 0245 cType 5 Type 09 colours 36 [- Control] -13D 95795D (47) 10 40 Size 0246 cType 5 Type 09 colours 44 [- Control] -13E 957BA3 (46) 20 20 Size 02A6 cType 5 Type 09 colours 4F -13F 957E49 (07) 40 20 Size 0141 OTHER Greyscale Type 07 -140 957F8A (07) 40 20 Size 0218 OTHER Greyscale Type 07 -141 9581A2 (C7) 80 09 Size 045B cType 5 Type 09 colours 58 [Statue] -142 9585FD (C7) 80 09 Size 05EB cType 5 Type 09 colours 70 [Statue] -143 958BE8 (C7) 80 09 Size 061B cType 5 Type 09 colours 6F [Statue] -144 959203 (C7) 80 09 Size 062D cType 5 Type 09 colours 76 [Statue] -145 959830 (C7) 80 09 Size 061F cType 5 Type 09 colours 77 [Statue] -146 959E4F (C7) 80 09 Size 0641 cType 5 Type 09 colours 75 [Statue] -147 95A490 (C7) 80 09 Size 0653 cType 5 Type 09 colours 7D [Statue] -148 95AAE3 (C7) 80 09 Size 05F5 cType 5 Type 09 colours 7F [Statue -149 95B0D8 (07) 40 40 Size 0344 OTHER Greyscale Type 07 -14A 95B41C (07) 40 40 Size 0386 OTHER Greyscale Type 07 -14B 95B7A2 (07) 40 40 Size 0399 OTHER Greyscale Type 07 -14C 95BB3B (07) 40 40 Size 0360 OTHER Greyscale Type 07 -14D 95BE9B (46) 20 20 Size 0161 cType 5 Type 09 colours 19 [000C-000E,0010,0011 Bridge Console Upper Left Control Section] -14E 95BFFC (46) 20 20 Size 011A cType 5 Type 09 colours 10 [000C-000E,0010,0011 Bridge Console Upper Right Control Section] -14F 95C116 (46) 20 20 Size 0133 cType 5 Type 09 colours 13 [000C-000E,0010,0011 Bridge Console Lower Left Control Section] -150 95C249 (46) 20 20 Size 012A cType 5 Type 09 colours 15 [000C-000E,0010,0011 Bridge Console Lower Right Control Section] -151 95C373 (03) 38 36 Size 0348 OTHER Greyscale Type 03 -152 95C6BB (46) 20 20 Size 0527 cType 5 Type 09 colours FF [000C-0010,001C,001E,0020,0021,0023-0025,0151 Console Control - Upper Left] -153 95CBE2 (46) 20 20 Size 039A cType 5 Type 09 colours A6 [000E,0010,001E,0020,0151 Console Control - Upper Right] -154 95CF7C (46) 20 20 Size 03EE cType 5 Type 09 colours B8 [000D,0011,001F,0021,0023-0025 Console Control - Upper Right] -155 95D36A (46) 20 20 Size 03D8 cType 5 Type 09 colours A4 [000C,000E,0010,001E,0022 Console Control - Lower Left] -156 95D742 (46) 20 20 Size 045B cType 5 Type 09 colours E4 [000C-000D,000F,0010,001F,0022 Console Control - Lower Right] -157 95DB9D (46) 20 20 Size 00E8 cType 5 Type 09 colours 12 [001C-0025,0151 Console Left Side Top] -158 95DC85 (46) 20 20 Size 0122 cType 5 Type 09 colours 13 [001E,0022 Console Louver Left] -159 95DDA7 (46) 20 20 Size 040D cType 5 Type 09 colours AC [000D,000F,0011,001F,0022 Console Control - Upper Left] -15A 95E1B4 (46) 20 20 Size 03E1 cType 5 Type 09 colours AA [000E Console Control - Upper Left] -15B 95E595 (46) 20 20 Size 00C1 cType 5 Type 09 colours 10 [001C-0025,0151 Console Right Side Top] -15C 95E656 (46) 20 20 Size 010F cType 5 Type 09 colours 17 [0022 Console Louver Right] -15D 95E765 (46) 20 20 Size 0302 cType 5 Type 09 colours 6E [000D,000F,001C,001E,0022 Console Control - Upper Left] -15E 95EA67 (46) 20 20 Size 0215 cType 5 Type 09 colours 33 [000C,000F,0011 Console Control - Upper Right] -15F 95EC7C (46) 20 20 Size 00D5 cType 5 Type 09 colours 11 [001C-0025,0151 Console Left Side Middle] -160 95ED51 (46) 20 20 Size 0332 cType 5 Type 09 colours 86 [000D,000F,001C,001F,0023 Console Control - Lower Left] -161 95F083 (46) 20 20 Size 01C8 cType 5 Type 09 colours 18 [000F,0011,0020,0025,0151 Console Control - Lower Left] -162 95F24B (46) 20 20 Size 00A8 cType 5 Type 0A colours C [001C-0025,0151 Console Right Side Middle] -163 95F2F3 (46) 20 20 Size 038A cType 5 Type 09 colours AC [000E,0011,001E,0020,0151 Console Control - Lower Right] -164 95F67D (46) 20 20 Size 02C0 cType 5 Type 09 colours 76 [000D,000F,001C,0023,0025 Console Control - Lower Right] -165 95F93D (07) 40 20 Size 044A OTHER Greyscale Type 07 -166 95FD87 (07) 40 20 Size 03DB OTHER Greyscale Type 07 -167 960162 (07) 40 20 Size 035D OTHER Greyscale Type 07 -168 9604BF (07) 40 20 Size 034D OTHER Greyscale Type 07 -169 96080C (C6) 21 21 Size 0536 cType 5 Type 09 colours BE -16A 960D42 (C6) 21 21 Size 03C0 cType 5 Type 09 colours 82 -16B 961102 (C6) 21 21 Size 04C8 cType 5 Type 09 colours AD -16C 9615CA (C6) 21 21 Size 03CD cType 5 Type 09 colours 76 -16D 961997 (C6) 21 21 Size 0214 cType 5 Type 09 colours 18 -16E 961BAB (C6) 21 21 Size 02F4 cType 5 Type 09 colours 4D -16F 961E9F (C6) 21 21 Size 03B6 cType 5 Type 09 colours 62 -170 962255 (C6) 21 21 Size 03DE cType 5 Type 09 colours 74 -171 962633 (07) 80 10 Size 026E OTHER Greyscale Type 07 -172 9628A1 (07) 80 10 Size 026E OTHER Greyscale Type 07 -173 962B0F (46) 20 20 Size 055F cType 5 Type 09 colours FF -174 96306E (46) 20 20 Size 058A cType 5 Type 09 colours FF [00B0 Keypad Lock on Shutter] -175 9635F8 (46) 20 20 Size 0337 cType 5 Type 09 colours 68 [- Archives] -176 96392F (46) 20 20 Size 03FF cType 5 Type 09 colours 75 [0140-0144 St.Pete Building Stuccowork- Archives] -177 963D2E (46) 20 20 Size 03B5 cType 5 Type 09 colours 6B [0140-0144 St.Pete Building Stuccowork- Archives] -178 9640E3 (46) 20 20 Size 03B5 cType 5 Type 09 colours 6B [0140-0144 St.Pete Building Stuccowork] -179 964498 (46) 20 20 Size 0332 cType 5 Type 09 colours 58 [0140-0144 St.Pete Building Stuccowork] -17A 9647CA (46) 20 20 Size 03FC cType 5 Type 09 colours 6A [0140-0144 St.Pete Building Stuccowork- Archives] -17B 964BC6 (46) 20 20 Size 03C4 cType 5 Type 09 colours 79 [0140-0144 St.Pete Building Stuccowork] -17C 964F8A (46) 20 20 Size 0446 cType 5 Type 09 colours 91 [0140-0144 St.Pete Building Stuccowork] -17D 9653D0 (46) 20 20 Size 03FA cType 5 Type 09 colours 86 [0140-0144 St.Pete Building Awnings] -17E 9657CA (46) 20 20 Size 0261 cType 5 Type 09 colours 21 [014D Flag's Fabric] -17F 965A2B (46) 20 20 Size 0535 cType 5 Type 09 colours C6 -180 965F60 (46) 20 20 Size 056D cType 5 Type 09 colours D6 [- Jungle] -181 9664CD (46) 20 20 Size 044F cType 5 Type 09 colours 96 [0134 Depot Gate] -182 96691C (C6) 25 25 Size 097D cType 5 Type 09 colours FF [0113 Video Tape - Upper Left] -183 967299 (C6) 24 25 Size 0902 cType 7 Type 09 colours FF -184 967B9B (C6) 25 25 Size 092D cType 5 Type 09 colours FF [0113 Video Tape - Mid Upper Left] -185 9684C8 (C6) 24 25 Size 0914 cType 5 Type 09 colours FF [0113 Video Tape - Mid Upper Right] -186 968DDC (C6) 25 25 Size 0981 cType 1 Type 09 colours FF [0113 Video Tape - Mid Lower Left] -187 96975D (C6) 24 25 Size 08FE cType 5 Type 09 colours FF [0113 Video Tape - Mid Lower Right] -188 96A05B (C6) 25 24 Size 08F5 cType 5 Type 09 colours FF [0113 Video Tape - Lower Left] -189 96A950 (C6) 24 24 Size 0878 cType 5 Type 09 colours FF [0113 Video Tape - Lower Right] -18A 96B1C8 (46) 20 20 Size 0221 cType 5 Type 09 colours 19 -18B 96B3E9 (07) 40 40 Size 0470 OTHER Greyscale Type 07 -18C 96B859 (07) 40 40 Size 0526 OTHER Greyscale Type 07 -18D 96BD7F (07) 40 40 Size 04E6 OTHER Greyscale Type 07 -18E 96C265 (07) 40 40 Size 0425 OTHER Greyscale Type 07 -18F 96C68A (46) 20 20 Size 035B cType 5 Type 09 colours 54 [000B Bookcase Side Paneling] -190 96C9E5 (46) 20 20 Size 0435 cType 5 Type 09 colours 83 [Airduct - Archives] -191 96CE1A (46) 20 20 Size 0439 cType 5 Type 09 colours 84 [- Control] -192 96D253 (46) 20 20 Size 033C cType 5 Type 09 colours 43 [- Egypt] -193 96D58F (47) 10 40 Size 030C cType 5 Type 09 colours 42 -194 96D89B (47) 10 40 Size 02FF cType 5 Type 09 colours 33 [- Egypt] -195 96DB9A (46) 20 20 Size 02B3 cType 5 Type 09 colours 36 [- Egypt,Temple] -196 96DE4D (07) 40 40 Size 0529 OTHER Greyscale Type 07 -197 96E376 (07) 40 40 Size 034D OTHER Greyscale Type 07 -198 96E6C3 (07) 40 20 Size 020D OTHER Greyscale Type 07 -199 96E8D0 (07) 40 40 Size 039D OTHER Greyscale Type 07 -19A 96EC6D (46) 20 20 Size 02F1 cType 5 Type 09 colours 2F [00AB-00AF Door Edges, Walls - Egypt] -19B 96EF5E (47) 40 10 Size 01B3 cType 5 Type 09 colours 1C [0014,0016,004F,0053,0100 Text on Box,Classified Folder] -19C 96F111 (07) 80 10 Size 020E OTHER Greyscale Type 07 -19D 96F31F (07) 80 10 Size 016B OTHER Greyscale Type 07 -19E 96F48A (47) 40 10 Size 0207 cType 5 Type 09 colours 1C -19F 96F691 (07) 80 10 Size 018F OTHER Greyscale Type 07 -1A0 96F820 (07) 80 10 Size 01CF OTHER Greyscale Type 07 -1A1 96F9EF (07) 80 10 Size 01BF OTHER Greyscale Type 07 -1A2 96FBAE (40) 80 10 Size 06D6 cType 5 Type 0B colours FF [(Rocket Launcher)] -1A3 970284 (47) 40 10 Size 03DC cType 5 Type 09 colours 6D [-Statue] -1A4 970660 (40) 80 10 Size 06E0 cType 5 Type 0B colours FF [(Rocket Launcher)] -1A5 970D40 (47) 40 10 Size 0223 cType 5 Type 09 colours 1D [0012,0050,0054 Cardboard Box Text] -1A6 970F63 (47) 40 10 Size 01E3 cType 5 Type 09 colours 1C -1A7 971146 (47) 40 10 Size 0158 cType 5 Type 09 colours 1C [-Silo] -1A8 97129E (07) 80 10 Size 0181 OTHER Greyscale Type 07 -1A9 97141F (07) 40 20 Size 0453 OTHER Greyscale Type 07 -1AA 971872 (07) 40 20 Size 055E OTHER Greyscale Type 07 -1AB 971DD0 (07) 40 20 Size 05BB OTHER Greyscale Type 07 -1AC 97238B (07) 40 20 Size 0525 OTHER Greyscale Type 07 -1AD 9728B0 (07) 40 20 Size 072D OTHER Greyscale Type 07 -1AE 972FDD (07) 40 20 Size 04BE OTHER Greyscale Type 07 -1AF 97349B (47) 80 08 Size 02F3 cType 3 Type 09 colours 9C [- Archives,Streets -1B0 97378E (07) 40 20 Size 043C OTHER Greyscale Type 07 -1B1 973BCA (07) 40 20 Size 03E6 OTHER Greyscale Type 07 -1B2 973FB0 (07) 40 20 Size 062B OTHER Greyscale Type 07 -1B3 9745DB (07) 40 40 Size 031D OTHER Greyscale Type 07 -1B4 9748F8 (07) 40 40 Size 0300 OTHER Greyscale Type 07 -1B5 974BF8 (06) 20 10 Size 064F OTHER Greyscale Type 06 -1B6 975247 (47) 40 10 Size 05F7 OTHER Greyscale Type 47 -1B7 97583E (06) 20 10 Size 0665 OTHER Greyscale Type 06 -1B8 975EA3 (07) 20 40 Size 03C8 OTHER Greyscale Type 07 -1B9 97626B (07) 20 40 Size 03CB OTHER Greyscale Type 07 -1BA 976636 (46) 20 20 Size 0366 cType 5 Type 09 colours 61 -1BB 97699C (83) 40 50 Size 06B6 OTHER Greyscale Type 83 -1BC 977052 (86) 40 5C Size 0722 OTHER Greyscale Type 86 -1BD 977774 (83) 40 5C Size 08A7 OTHER Greyscale Type 83 -1BE 97801B (86) 40 5C Size 08CC OTHER Greyscale Type 86 -1BF 9788E7 (87) 40 41 Size 03F0 OTHER Greyscale Type 87 -1C0 978CD7 (86) 40 40 Size 033B OTHER Greyscale Type 86 -1C1 979012 (46) 20 20 Size 0244 cType 5 Type 09 colours 1F -1C2 979256 (46) 20 20 Size 0200 cType 5 Type 09 colours 15 [008B Doorframe] -1C3 979456 (47) 40 10 Size 01F7 cType 5 Type 09 colours 1B -1C4 97964D (46) 20 20 Size 0473 cType 5 Type 09 colours 8A [0095,00A3 Corrugated Blue Shutter,Window Frame] -1C5 979AC0 (46) 20 20 Size 03C4 cType 5 Type 09 colours 6C [0093,0094 Rolling Blue Shutter] -1C6 979E84 (46) 20 20 Size 03DB cType 3 Type 09 colours FF -1C7 97A25F (46) 20 20 Size 01E0 cType 5 Type 09 colours 44 -1C8 97A43F (46) 20 20 Size 01ED cType 5 Type 09 colours 45 [-Silo] -1C9 97A62C (46) 20 20 Size 052D cType 5 Type 09 colours C1 -1CA 97AB59 (46) 20 20 Size 047F cType 5 Type 09 colours 9A [- Streets] -1CB 97AFD8 (46) 20 20 Size 0250 cType 5 Type 09 colours 1A -1CC 97B228 (07) 80 20 Size 0286 OTHER Greyscale Type 07 -1CD 97B4AE (07) 40 20 Size 00B4 OTHER Greyscale Type 07 -1CE 97B562 (07) 40 20 Size 00A3 OTHER Greyscale Type 07 -1CF 97B605 (47) 40 10 Size 01E6 cType 5 Type 09 colours 28 [0028 Desk Lamp Fixture Housing Front] -1D0 97B7EB (47) 40 10 Size 01AE cType 5 Type 09 colours 1A [0028 Desk Lamp Fixture Housing Back & Base] -1D1 97B999 (47) 40 10 Size 0285 cType 5 Type 09 colours 62 -1D2 97BC1E (07) 40 40 Size 0223 OTHER Greyscale Type 07 -1D3 97BE41 (07) 40 40 Size 01FA OTHER Greyscale Type 07 -1D4 97C03B (04) 40 30 Size 07A2 OTHER Greyscale Type 04 -1D5 97C7DD (04) 40 30 Size 079E OTHER Greyscale Type 04 -1D6 97CF7B (07) 40 20 Size 0140 OTHER Greyscale Type 07 -1D7 97D0BB (46) 20 20 Size 0276 cType 3 Type 09 colours A1 -1D8 97D331 (46) 20 20 Size 0290 cType 3 Type 09 colours BC -1D9 97D5C1 (07) 40 20 Size 0264 OTHER Greyscale Type 07 -1DA 97D825 (07) 40 40 Size 0484 OTHER Greyscale Type 07 -1DB 97DCA9 (46) 20 20 Size 03C6 cType 5 Type 09 colours 69 -1DC 97E06F (07) 40 40 Size 0343 OTHER Greyscale Type 07 -1DD 97E3B2 (07) 40 40 Size 033B OTHER Greyscale Type 07 -1DE 97E6ED (07) 40 40 Size 0329 OTHER Greyscale Type 07 -1DF 97EA16 (07) 20 40 Size 03CD OTHER Greyscale Type 07 -1E0 97EDE3 (07) 40 20 Size 0141 OTHER Greyscale Type 07 -1E1 97EF24 (07) 40 40 Size 0520 OTHER Greyscale Type 07 -1E2 97F444 (07) 40 40 Size 0473 OTHER Greyscale Type 07 -1E3 97F8B7 (07) 40 40 Size 04C0 OTHER Greyscale Type 07 -1E4 97FD77 (07) 40 40 Size 0381 OTHER Greyscale Type 07 -1E5 9800F8 (07) 40 40 Size 03B0 OTHER Greyscale Type 07 -1E6 9804A8 (46) 20 20 Size 03F2 cType 5 Type 0B colours B8 -1E7 98089A (07) 40 20 Size 045E OTHER Greyscale Type 07 -1E8 980CF8 (07) 40 20 Size 0490 OTHER Greyscale Type 07 -1E9 981188 (07) 40 40 Size 03A9 OTHER Greyscale Type 07 -1EA 981531 (07) 40 20 Size 039B OTHER Greyscale Type 07 -1EB 9818CC (07) 40 40 Size 0362 OTHER Greyscale Type 07 -1EC 981C2E (07) 40 20 Size 02A8 OTHER Greyscale Type 07 -1ED 981ED6 (07) 20 40 Size 05B9 OTHER Greyscale Type 07 -1EE 98248F (07) 40 40 Size 00BB OTHER Greyscale Type 07 -1EF 98254A (07) 80 10 Size 00BA OTHER Greyscale Type 07 -1F0 982604 (07) 40 40 Size 00B7 OTHER Greyscale Type 07 -1F1 9826BB (07) 40 40 Size 0109 OTHER Greyscale Type 07 -1F2 9827C4 (07) 40 40 Size 00E1 OTHER Greyscale Type 07 -1F3 9828A5 (07) 20 40 Size 049E OTHER Greyscale Type 07 -1F4 982D43 (07) 20 40 Size 0473 OTHER Greyscale Type 07 -1F5 9831B6 (07) 40 40 Size 035C OTHER Greyscale Type 07 -1F6 983512 (07) 40 20 Size 0337 OTHER Greyscale Type 07 -1F7 983849 (07) 40 40 Size 027E OTHER Greyscale Type 07 -1F8 983AC7 (07) 40 40 Size 0248 OTHER Greyscale Type 07 -1F9 983D0F (07) 40 20 Size 023B OTHER Greyscale Type 07 -1FA 983F4A (07) 40 20 Size 0152 OTHER Greyscale Type 07 -1FB 98409C (07) 40 40 Size 02B3 OTHER Greyscale Type 07 -1FC 98434F (07) 80 20 Size 0188 OTHER Greyscale Type 07 -1FD 9844D7 (07) 80 20 Size 0277 OTHER Greyscale Type 07 -1FE 98474E (07) 40 40 Size 0205 OTHER Greyscale Type 07 -1FF 984953 (07) 80 20 Size 01A4 OTHER Greyscale Type 07 -200 984AF7 (46) 20 20 Size 009E cType 5 Type 09 colours 24 [0037,0038 Rocket Fins] -201 984B95 (46) 20 20 Size 032C cType 5 Type 09 colours 63 -202 984EC1 (07) 40 20 Size 04AF OTHER Greyscale Type 07 -203 985370 (07) 20 80 Size 010A OTHER Greyscale Type 07 -204 98547A (07) 20 40 Size 0138 OTHER Greyscale Type 07 -205 9855B2 (47) 08 80 Size 013F cType 5 Type 09 colours 45 -206 9856F1 (07) 40 40 Size 04D4 OTHER Greyscale Type 07 -207 985BC5 (07) 40 20 Size 0147 OTHER Greyscale Type 07 -208 985D0C (07) 40 20 Size 0287 OTHER Greyscale Type 07 -209 985F93 (07) 20 40 Size 009D OTHER Greyscale Type 07 -20A 986030 (07) 40 20 Size 02ED OTHER Greyscale Type 07 -20B 98631D (07) 40 20 Size 025F OTHER Greyscale Type 07 -20C 98657C (07) 40 20 Size 010A OTHER Greyscale Type 07 -20D 986686 (07) 40 20 Size 02E0 OTHER Greyscale Type 07 -20E 986966 (07) 40 20 Size 0373 OTHER Greyscale Type 07 -20F 986CD9 (07) 20 40 Size 01AA OTHER Greyscale Type 07 -210 986E83 (07) 80 20 Size 02ED OTHER Greyscale Type 07 -211 987170 (07) 40 20 Size 014B OTHER Greyscale Type 07 -212 9872BB (07) 20 40 Size 0484 OTHER Greyscale Type 07 -213 98773F (07) 20 40 Size 02EA OTHER Greyscale Type 07 -214 987A29 (46) 20 01 Size 0045 cType 3 Type 0B colours 17 [(Rocket Launcher) -215 987A6E (07) 40 40 Size 01E4 OTHER Greyscale Type 07 -216 987C52 (46) 20 20 Size 03C4 cType 5 Type 09 colours 79 -217 988016 (07) 40 40 Size 0430 OTHER Greyscale Type 07 -218 988446 (07) 40 40 Size 0325 OTHER Greyscale Type 07 -219 98876B (46) 20 20 Size 0296 cType 5 Type 09 colours 22 [Monitor Image- Control,Streets] -21A 988A01 (46) 20 20 Size 0497 cType 5 Type 0B colours A7 -21B 988E98 (46) 20 20 Size 033C cType 5 Type 09 colours 9A [00FD,0103 Datathief Bottom,Top of Circuit Board] -21C 9891D4 (46) 20 20 Size 02AF cType 5 Type 09 colours 76 [0103 Circuit Board Bottom] -21D 989483 (46) 20 20 Size 00F9 cType 5 Type 09 colours 35 -21E 98957C (07) 40 20 Size 0416 OTHER Greyscale Type 07 -21F 989992 (C6) 21 20 Size 0343 cType 5 Type 09 colours 53 [0029 DAT Reader Front - Left Panel] -220 989CD5 (C6) 21 20 Size 05EC cType 3 Type 09 colours FF [0029 DAT Reader Front - Right Panel] -221 98A2C1 (87) 80 16 Size 0764 OTHER Greyscale Type 87 -222 98AA25 (87) 80 16 Size 076E OTHER Greyscale Type 87 -223 98B193 (87) 80 16 Size 072B OTHER Greyscale Type 87 -224 98B8BE (07) 80 16 Size 042C OTHER Greyscale Type 07 -225 98BCEA (07) 80 16 Size 03C8 OTHER Greyscale Type 07 -226 98C0B2 (07) 80 16 Size 040B OTHER Greyscale Type 07 -227 98C4BD (C6) 21 21 Size 06E7 cType 5 Type 09 colours C2 [008E Door Upper Left] -228 98CBA4 (C6) 21 21 Size 068F cType 5 Type 09 colours A7 [008E Door Upper Right] -229 98D233 (C6) 21 21 Size 0602 cType 5 Type 09 colours 9B [008E Door Upper Mid Left] -22A 98D835 (C6) 21 21 Size 0602 cType 5 Type 09 colours 9D [008E Door Upper Mid Right] -22B 98DE37 (C6) 21 21 Size 05F5 cType 5 Type 09 colours 92 [008E Door Lower Mid Left] -22C 98E42C (C6) 21 21 Size 06C6 cType 5 Type 09 colours B9 [008E Door Lower Mid Right] -22D 98EAF2 (C6) 21 21 Size 05F9 cType 5 Type 09 colours 94 [008E Door Lower Left] -22E 98F0EB (C6) 21 21 Size 06AB cType 5 Type 09 colours AF [008E Door Lower Right] -22F 98F796 (C7) 41 11 Size 0768 cType 5 Type 09 colours CF -230 98FEFE (C7) 41 11 Size 066C cType 5 Type 09 colours A3 -231 99056A (C7) 41 11 Size 062D cType 5 Type 09 colours 93 -232 990B97 (C7) 41 11 Size 0636 cType 5 Type 09 colours A7 -233 9911CD (C7) 41 11 Size 0601 cType 5 Type 09 colours 8F -234 9917CE (C7) 41 11 Size 06A8 cType 5 Type 09 colours AC -235 991E76 (C7) 41 11 Size 069F cType 5 Type 09 colours A8 -236 992515 (C7) 41 11 Size 0646 cType 5 Type 09 colours 96 -237 992B5B (C0) 20 21 Size 017A cType 5 Type 09 colours 2F -238 992CD5 (C6) 21 21 Size 07ED cType 5 Type 09 colours FF [008F Door Upper Left] -239 9934C2 (C6) 21 21 Size 0736 cType 5 Type 09 colours D4 [008F Door Upper Right] -23A 993BF8 (C6) 21 21 Size 076F cType 5 Type 09 colours DE [008F Door Upper Mid Left] -23B 994367 (C6) 21 21 Size 0802 cType 5 Type 09 colours FF [008F Door Upper Mid Right] -23C 994B69 (C6) 21 21 Size 07EC cType 5 Type 09 colours FF [008F Door Lower Mid Left] -23D 995355 (C6) 21 21 Size 0770 cType 5 Type 09 colours E0 [008F Door Lower Mid Right] -23E 995AC5 (C6) 21 21 Size 0701 cType 5 Type 09 colours C4 [008F Door Lower Left] -23F 9961C6 (C6) 21 21 Size 07EE cType 5 Type 09 colours FF [008F Door Lower Right] -240 9969B4 (46) 20 20 Size 0363 cType 5 Type 09 colours 58 -241 996D17 (C6) 20 21 Size 04BE cType 5 Type 09 colours 79 -242 9971D5 (C6) 20 21 Size 0491 cType 5 Type 09 colours 68 -243 997666 (46) 20 20 Size 01F4 cType 5 Type 09 colours 27 [00A7,00A8,012B Door Spine,Depot Train Door Interior] -244 99785A (46) 20 20 Size 00C9 cType 5 Type 09 colours 1E [00A1-00A3 Train Compartment Door Handles] -245 997923 (46) 20 20 Size 05FE cType 5 Type 09 colours FF [Monitor Image] -246 997F21 (46) 20 20 Size 05F7 cType 5 Type 09 colours FF [Monitor Image] -247 998518 (46) 20 20 Size 060C cType 1 Type 09 colours FF [Monitor Image] -248 998B24 (46) 20 20 Size 0605 cType 5 Type 09 colours FF [Monitor Image] -249 999129 (07) 40 40 Size 040F OTHER Greyscale Type 07 -24A 999538 (07) 40 40 Size 0400 OTHER Greyscale Type 07 -24B 999938 (46) 20 20 Size 0462 cType 5 Type 09 colours A6 [0039-003E Oil Drum Lid] -24C 999D9A (46) 20 20 Size 051C cType 1 Type 09 colours B7 [Statue] -24D 99A2B6 (46) 20 20 Size 04DD cType 1 Type 09 colours E6 [0093 (A1) Mark on Shutter] -24E 99A793 (46) 20 20 Size 0531 cType 1 Type 09 colours D9 [0094 (C5) Mark on Shutter - Statue] -24F 99ACC4 (46) 20 20 Size 04AC cType 5 Type 09 colours FA [Statue] -250 99B170 (46) 20 20 Size 046A cType 3 Type 09 colours F4 -251 99B5DA (46) 20 20 Size 0593 cType 3 Type 09 colours FF [Statue] -252 99BB6D (46) 20 20 Size 037B cType 5 Type 09 colours 54 -253 99BEE8 (46) 20 20 Size 04BA cType 5 Type 09 colours A7 -254 99C3A2 (07) 40 20 Size 058E OTHER Greyscale Type 07 -255 99C930 (07) 40 20 Size 01B1 OTHER Greyscale Type 07 -256 99CAE1 (C6) 21 21 Size 0561 cType 3 Type 09 colours FF -257 99D042 (C6) 21 21 Size 0653 cType 5 Type 09 colours FF -258 99D695 (C6) 21 21 Size 0780 cType 5 Type 09 colours FF -259 99DE15 (C6) 21 21 Size 0651 cType 3 Type 09 colours FF -25A 99E466 (C6) 21 21 Size 01E1 cType 3 Type 09 colours 6D -25B 99E647 (C6) 21 21 Size 057A cType 3 Type 09 colours FF -25C 99EBC1 (C6) 21 21 Size 0525 cType 3 Type 09 colours FF -25D 99F0E6 (C6) 21 21 Size 05B5 cType 3 Type 09 colours FF -25E 99F69B (46) 20 20 Size 0166 cType 5 Type 09 colours 28 -25F 99F801 (46) 20 20 Size 0145 cType 5 Type 09 colours 32 -260 99F946 (07) 40 40 Size 069E OTHER Greyscale Type 07 -261 99FFE4 (07) 40 20 Size 0839 OTHER Greyscale Type 07 -262 9A081D (07) 40 40 Size 057C OTHER Greyscale Type 07 -263 9A0D99 (07) 40 20 Size 07DA OTHER Greyscale Type 07 -264 9A1573 (07) 40 40 Size 02BE OTHER Greyscale Type 07 -265 9A1831 (07) 40 40 Size 0268 OTHER Greyscale Type 07 -266 9A1A99 (07) 40 40 Size 029B OTHER Greyscale Type 07 -267 9A1D34 (07) 40 40 Size 0286 OTHER Greyscale Type 07 -268 9A1FBA (07) 40 40 Size 026E OTHER Greyscale Type 07 -269 9A2228 (46) 20 20 Size 0251 cType 5 Type 09 colours 82 -26A 9A2479 (07) 40 40 Size 039E OTHER Greyscale Type 07 -26B 9A2817 (07) 40 40 Size 0114 OTHER Greyscale Type 07 -26C 9A292B (07) 40 40 Size 0263 OTHER Greyscale Type 07 -26D 9A2B8E (07) 40 20 Size 0598 OTHER Greyscale Type 07 -26E 9A3126 (46) 20 20 Size 0468 cType 5 Type 09 colours A8 -26F 9A358E (46) 20 20 Size 047A cType 5 Type 09 colours 94 -270 9A3A08 (46) 20 20 Size 0125 cType 5 Type 0A colours C -271 9A3B2D (46) 20 20 Size 01BE cType 5 Type 09 colours 2E -272 9A3CEB (46) 20 20 Size 010B cType 5 Type 09 colours 1D -273 9A3DF6 (46) 20 20 Size 0148 cType 5 Type 09 colours 17 -274 9A3F3E (46) 20 20 Size 0140 cType 5 Type 09 colours 10 -275 9A407E (46) 20 20 Size 0148 cType 5 Type 09 colours 11 -276 9A41C6 (07) 40 40 Size 05B2 OTHER Greyscale Type 07 -277 9A4778 (07) 40 40 Size 03E8 OTHER Greyscale Type 07 -278 9A4B60 (46) 20 20 Size 026D cType 5 Type 09 colours 33 [- Archives,Library] -279 9A4DCD (00) 4C 4C Size 03C1 OTHER Greyscale Type 00 -27A 9A518E (00) 4C 4C Size 03CD OTHER Greyscale Type 00 -27B 9A555B (40) 18 18 Size 0055 cType 5 Type 0C colours 2 [00F7 Floppy Disk Copy Protect -27C 9A55B0 (46) 20 20 Size 0264 cType 5 Type 09 colours 2F [00F7 Floppy Disk Cover Sleeve] -27D 9A5814 (46) 20 20 Size 0366 cType 5 Type 09 colours 71 [00F7 Floppy Disk Drive Head] -27E 9A5B7A (46) 20 20 Size 01BF cType 5 Type 09 colours 1A [0082 RC-P90 Magazine(RC-P90)] -27F 9A5D39 (40) 20 40 Size 0738 cType 5 Type 0B colours 6C -280 9A6471 (46) 20 20 Size 032C cType 5 Type 09 colours 68 -281 9A679D (07) 80 20 Size 0553 OTHER Greyscale Type 07 -282 9A6CF0 (07) 40 40 Size 038C OTHER Greyscale Type 07 -283 9A707C (C0) 20 20 Size 012D cType 5 Type 09 colours 21 [0071,0072 Gas Barrel Side] -284 9A71A9 (46) 20 20 Size 02D6 cType 5 Type 09 colours 5E [0071,0072 Gas Barrel Lid] -285 9A747F (46) 10 20 Size 01BD cType 5 Type 0B colours 34 [Train - Strip] -286 9A763C (07) 40 40 Size 04A3 OTHER Greyscale Type 07 -287 9A7ADF (46) 20 20 Size 0199 cType 5 Type 09 colours 15 [00A5,011E Caverns Iris Edges, Trailer Canister] -288 9A7C78 (46) 20 20 Size 02BD cType 5 Type 09 colours 47 [00A5 Caverns Iris Center] -289 9A7F35 (46) 20 20 Size 0264 cType 5 Type 09 colours 25 [00A5 Caverns Irises] -28A 9A8199 (46) 20 20 Size 01FE cType 5 Type 09 colours 12 [00A5 Caverns Iris, Face Gold Projects From] -28B 9A8397 (46) 20 20 Size 04EC cType 5 Type 09 colours C3 [Support Braces - Archives] -28C 9A8883 (07) 40 40 Size 026C OTHER Greyscale Type 07 -28D 9A8AEF (07) 40 20 Size 024B OTHER Greyscale Type 07 -28E 9A8D3A (03) 38 36 Size 0345 OTHER Greyscale Type 03 -28F 9A907F (03) 38 36 Size 0379 OTHER Greyscale Type 03 -290 9A93F8 (46) 20 20 Size 00A4 cType 5 Type 09 colours 1A [0089 Glass in Door] -291 9A949C (46) 20 20 Size 00AB cType 5 Type 09 colours 1D [0087 Glass in Door-Silo] -292 9A9547 (46) 20 01 Size 0055 cType 3 Type 0B colours 1A [00D0 Golden Gun] -293 9A959C (46) 20 20 Size 0401 cType 3 Type 09 colours FF [00EE Camera, 0 in 007] -294 9A999D (46) 20 20 Size 0342 cType 3 Type 09 colours E9 [00EE Camera, 7 in 007] -295 9A9CDF (46) 20 20 Size 04D9 cType 5 Type 09 colours C6 [00F3,00F4,010E Keys,Dossier Insignia(Knives,Golden Gun,Gold PP7)] -296 9AA1B8 (46) 20 20 Size 04B5 cType 3 Type 09 colours E9 -297 9AA66D (46) 20 20 Size 00C4 cType 5 Type 09 colours 17 [(Klobb,ZMG,Phantom,Shotgun,Laser)] -298 9AA731 (46) 20 20 Size 00E2 cType 5 Type 09 colours 16 [(Klobb,ZMG,Phantom,Shotgun,Laser)] -299 9AA813 (07) 40 20 Size 05E7 OTHER Greyscale Type 07 -29A 9AADFA (07) 40 40 Size 03F6 OTHER Greyscale Type 07 -29B 9AB1F0 (07) 40 40 Size 03E5 OTHER Greyscale Type 07 -29C 9AB5D5 (46) 20 20 Size 03BD cType 5 Type 09 colours 85 [0117,0118,012D,012F,0130 Headlight] -29D 9AB992 (46) 20 20 Size 043C cType 5 Type 09 colours A1 [0121,012F Taillights] -29E 9ABDCE (46) 20 20 Size 0349 cType 5 Type 09 colours 3F [Clouds in the Sky] -29F 9AC117 (07) 40 40 Size 0439 OTHER Greyscale Type 07 -2A0 9AC550 (07) 40 40 Size 0379 OTHER Greyscale Type 07 -2A1 9AC8C9 (07) 40 40 Size 0362 OTHER Greyscale Type 07 -2A2 9ACC2B (00) 40 40 Size 036B OTHER Greyscale Type 00 -2A3 9ACF96 (46) 20 20 Size 0318 cType 5 Type 09 colours 6A [1029,012A Top of Shutter] -2A4 9AD2AE (46) 20 20 Size 02A3 cType 5 Type 09 colours 4F -2A5 9AD551 (07) 40 20 Size 0081 OTHER Greyscale Type 07 -2A6 9AD5D2 (46) 20 20 Size 027A cType 5 Type 09 colours 1F [- Facility] -2A7 9AD84C (C6) 21 21 Size 04EA cType 5 Type 09 colours 72 -2A8 9ADD36 (C6) 21 21 Size 05A3 cType 5 Type 09 colours 9A -2A9 9AE2D9 (C6) 21 21 Size 0580 cType 5 Type 09 colours 97 -2AA 9AE859 (C6) 21 21 Size 04FE cType 5 Type 09 colours 72 -2AB 9AED57 (46) 20 20 Size 013A cType 5 Type 0A colours 8 -2AC 9AEE91 (46) 20 20 Size 01DE cType 5 Type 09 colours 34 [Door Electronic Key Panel - Facility] -2AD 9AF06F (C6) 20 21 Size 02E6 cType 5 Type 09 colours 42 -2AE 9AF355 (C6) 20 21 Size 02A2 cType 5 Type 09 colours 3A -2AF 9AF5F7 (C6) 20 21 Size 0313 cType 5 Type 09 colours 48 -2B0 9AF90A (C6) 20 21 Size 033F cType 5 Type 09 colours 50 -2B1 9AFC49 (07) 40 40 Size 021F OTHER Greyscale Type 07 -2B2 9AFE68 (07) 80 10 Size 0116 OTHER Greyscale Type 07 -2B3 9AFF7E (46) 20 20 Size 00A2 cType 5 Type 09 colours 1F [0047 Modem - Facility Bottling Room] -2B4 9B0020 (46) 20 20 Size 014D cType 5 Type 09 colours 2F -2B5 9B016D (46) 20 20 Size 044D cType 5 Type 09 colours D6 [Monitor Image] -2B6 9B05BA (46) 20 20 Size 0251 cType 5 Type 09 colours 56 -2B7 9B080B (46) 20 20 Size 01FC cType 5 Type 09 colours 13 [- Facility] -2B8 9B0A07 (46) 20 20 Size 0211 cType 5 Type 09 colours 16 -2B9 9B0C18 (46) 20 20 Size 01C4 cType 5 Type 0A colours F [- Facility] -2BA 9B0DDC (46) 20 20 Size 0184 cType 5 Type 09 colours 17 [Floor - Facility,Library(Basement)] -2BB 9B0F60 (46) 20 20 Size 021F cType 5 Type 09 colours 20 [- Facility] -2BC 9B117F (07) 40 20 Size 0157 OTHER Greyscale Type 07 -2BD 9B12D6 (47) 40 20 Size 033C cType 5 Type 0C colours D [- Facility] -2BE 9B1612 (07) 20 40 Size 008A OTHER Greyscale Type 07 -2BF 9B169C (46) 20 20 Size 020D cType 5 Type 0A colours E -2C0 9B18A9 (46) 20 20 Size 0208 cType 5 Type 0A colours E [009A Door Kickplate] -2C1 9B1AB1 (07) 40 40 Size 0374 OTHER Greyscale Type 07 -2C2 9B1E25 (07) 40 40 Size 0296 OTHER Greyscale Type 07 -2C3 9B20BB (46) 20 20 Size 01F2 cType 5 Type 09 colours 10 [014D Flag's Pole] -2C4 9B22AD (07) 40 20 Size 015F OTHER Greyscale Type 07 -2C5 9B240C (46) 20 20 Size 04BE cType 5 Type 09 colours B5 -2C6 9B28CA (07) 40 40 Size 0315 OTHER Greyscale Type 07 -2C7 9B2BDF (46) 20 20 Size 04DA cType 5 Type 09 colours C7 -2C8 9B30B9 (47) 40 10 Size 024D cType 5 Type 09 colours 45 -2C9 9B3306 (46) 20 20 Size 060C cType 1 Type 09 colours FF -2CA 9B3912 (46) 20 20 Size 00C0 cType 5 Type 0A colours 7 [009A Blue Stripe on Door] -2CB 9B39D2 (07) 40 20 Size 016E OTHER Greyscale Type 07 -2CC 9B3B40 (07) 40 20 Size 0352 OTHER Greyscale Type 07 -2CD 9B3E92 (07) 40 20 Size 00FD OTHER Greyscale Type 07 -2CE 9B3F8F (07) 40 40 Size 01F3 OTHER Greyscale Type 07 -2CF 9B4182 (07) 40 40 Size 0251 OTHER Greyscale Type 07 -2D0 9B43D3 (46) 20 20 Size 021B cType 5 Type 09 colours 13 [009D Door Woodgrain] -2D1 9B45EE (46) 20 20 Size 00B1 cType 5 Type 0A colours 4 [- Facility] -2D2 9B469F (46) 20 20 Size 0228 cType 5 Type 09 colours 23 -2D3 9B48C7 (07) 40 40 Size 0218 OTHER Greyscale Type 07 -2D4 9B4ADF (46) 20 20 Size 0353 cType 5 Type 0B colours 61 -2D5 9B4E32 (46) 20 20 Size 0426 cType 5 Type 0B colours 82 -2D6 9B5258 (46) 20 20 Size 01C5 cType 5 Type 09 colours 1E -2D7 9B541D (07) 20 40 Size 0399 OTHER Greyscale Type 07 -2D8 9B57B6 (07) 20 40 Size 03F1 OTHER Greyscale Type 07 -2D9 9B5BA7 (46) 20 20 Size 01C9 cType 5 Type 09 colours 47 -2DA 9B5D70 (46) 20 20 Size 0198 cType 5 Type 09 colours 37 -2DB 9B5F08 (46) 20 20 Size 01C7 cType 5 Type 09 colours 46 -2DC 9B60CF (46) 20 20 Size 0537 cType 3 Type 09 colours FF [Graffiti - Depot] -2DD 9B6606 (46) 20 20 Size 051B cType 3 Type 09 colours FF [Graffiti - Depot] -2DE 9B6B21 (46) 20 20 Size 04A3 cType 3 Type 09 colours FF [Graffiti - Depot] -2DF 9B6FC4 (46) 20 20 Size 05EE cType 5 Type 09 colours FF [Graffiti - Depot] -2E0 9B75B2 (46) 20 20 Size 05D8 cType 5 Type 09 colours FF [Graffiti - Depot Part 1] -2E1 9B7B8A (46) 20 20 Size 0585 cType 5 Type 09 colours FF [Graffiti - Depot Part 2] -2E2 9B810F (46) 20 20 Size 0542 cType 5 Type 09 colours FF [SA of SAM - Depot] -2E3 9B8651 (46) 20 20 Size 0582 cType 5 Type 09 colours FF [M of SAM - Depot] -2E4 9B8BD3 (46) 20 20 Size 0449 cType 5 Type 09 colours FF [Graffiti - Depot Part 1] -2E5 9B901C (46) 20 20 Size 049B cType 3 Type 09 colours FF [Graffiti - Depot Part 2] -2E6 9B94B7 (46) 20 20 Size 056D cType 3 Type 09 colours FF [Graffiti - Depot Part 1] -2E7 9B9A24 (46) 20 20 Size 05BE cType 5 Type 09 colours FF -2E8 9B9FE2 (46) 20 20 Size 05DB cType 5 Type 09 colours FF [Graffiti - Depot Part 2] -2E9 9BA5BD (46) 20 20 Size 0404 cType 3 Type 09 colours FF [Graffiti - Depot Part 1] -2EA 9BA9C1 (46) 20 20 Size 04FE cType 5 Type 09 colours FF [Graffiti - Depot Part 2] -2EB 9BAEBF (46) 20 20 Size 058C cType 5 Type 09 colours FF [Graffiti - Depot] -2EC 9BB44B (46) 20 20 Size 0563 cType 3 Type 09 colours FF [PS of Psycho - Depot] -2ED 9BB9AE (46) 20 20 Size 05B2 cType 5 Type 09 colours FF [SYC of Psycho - Depot] -2EE 9BBF60 (46) 20 20 Size 057B cType 5 Type 09 colours FF [HO of Psycho - Depot] -2EF 9BC4DB (46) 20 20 Size 048B cType 3 Type 09 colours FF [Graffiti Part 1 - Depot] -2F0 9BC966 (46) 20 20 Size 04AE cType 3 Type 09 colours FF [Graffiti Part 2 - Depot] -2F1 9BCE14 (46) 20 20 Size 0514 cType 3 Type 09 colours FF [Graffiti Part 1 - Depot,Streets] -2F2 9BD328 (46) 20 20 Size 059C cType 5 Type 09 colours FF [Graffiti Part 2 - Depot,Streets] -2F3 9BD8C4 (46) 20 20 Size 0568 cType 3 Type 09 colours FF [Graffiti Part 3 - Depot,Streets] -2F4 9BDE2C (46) 20 20 Size 05BA cType 5 Type 09 colours FF [R of ROB - Depot] -2F5 9BE3E6 (46) 20 20 Size 0591 cType 5 Type 09 colours FF [OB of ROB - Depot] -2F6 9BE977 (46) 20 20 Size 0208 cType 5 Type 09 colours 1D [VR - Depot] -2F7 9BEB7F (46) 20 20 Size 01FE cType 5 Type 09 colours 1C [Smilie - Depot] -2F8 9BED7D (46) 20 20 Size 0505 cType 5 Type 09 colours AE -2F9 9BF282 (46) 20 20 Size 039F cType 5 Type 09 colours 56 -2FA 9BF621 (46) 20 20 Size 00B2 cType 3 Type 09 colours 32 [00B4,0130,0131 Fencepost, Weird Car Bumpers,Trim] -2FB 9BF6D3 (46) 20 20 Size 00A7 cType 5 Type 09 colours 1B [Steel (DD44,Klobb,ZMG,Phantom,Shotgun,Sniper,Laser)] -2FC 9BF77A (45) 10 10 Size 0067 cType 5 Type 09 colours 13 [00CD,00D2 DD44 & Sniper Rifle Casting] -2FD 9BF7E1 (07) 40 20 Size 055F OTHER Greyscale Type 07 -2FE 9BFD40 (46) 20 20 Size 01FE cType 5 Type 09 colours 1F [0073,0074,00D2,010E Straps on Body Armour,Grips(Knives,DD44,Shotgun,Sniper,Laser)] -2FF 9BFF3E (07) 40 20 Size 0321 OTHER Greyscale Type 07 -300 9C025F (46) 20 20 Size 0131 cType 5 Type 09 colours 14 [000B Bookcase Interior Shelf Panels] -301 9C0390 (46) 20 20 Size 0153 cType 5 Type 09 colours 15 -302 9C04E3 (46) 20 20 Size 0482 cType 5 Type 0B colours 99 -303 9C0965 (07) 40 20 Size 060C OTHER Greyscale Type 07 -304 9C0F71 (46) 20 20 Size 0259 cType 5 Type 09 colours 36 [0121 APC Rear,Side Vents- Archives] -305 9C11CA (46) 20 20 Size 0383 cType 5 Type 09 colours 78 [- Control] -306 9C154D (46) 20 20 Size 0078 cType 5 Type 09 colours 12 [0117 Military Truck Spine of Doors - hidden(D5Ks,AR33)] -307 9C15C5 (46) 20 20 Size 04CC cType 5 Type 09 colours 9A -308 9C1A91 (07) 40 40 Size 0543 OTHER Greyscale Type 07 -309 9C1FD4 (07) 40 20 Size 05BC OTHER Greyscale Type 07 -30A 9C2590 (46) 20 20 Size 0371 cType 5 Type 09 colours C8 [Timed Mine Face(Timed Mine)] -30B 9C2901 (87) 50 41 Size 05C2 OTHER Greyscale Type 87 -30C 9C2EC3 (87) 50 41 Size 04E2 OTHER Greyscale Type 87 -30D 9C33A5 (87) 50 41 Size 0645 OTHER Greyscale Type 87 -30E 9C39EA (87) 50 41 Size 053B OTHER Greyscale Type 87 -30F 9C3F25 (07) 40 20 Size 0448 OTHER Greyscale Type 07 -310 9C436D (46) 20 20 Size 01F8 cType 5 Type 09 colours 1B -311 9C4565 (46) 20 20 Size 0128 cType 5 Type 09 colours 30 [011D Hind Camo Scheme Mid and Tail] -312 9C468D (46) 20 20 Size 016C cType 5 Type 09 colours 31 [011D Hind Camo Scheme Nose and Mid] -313 9C47F9 (46) 20 20 Size 03C7 cType 3 Type 09 colours C8 [0121 APC Front Hooks] -314 9C4BC0 (46) 20 20 Size 023D cType 5 Type 09 colours 60 -315 9C4DFD (C6) 40 11 Size 062C cType 5 Type 09 colours 8F -316 9C5429 (C6) 40 11 Size 0602 cType 5 Type 09 colours 87 -317 9C5A2B (C6) 40 11 Size 05DF cType 5 Type 09 colours 92 -318 9C600A (C6) 40 11 Size 0668 cType 5 Type 09 colours A0 -319 9C6672 (C6) 40 11 Size 0678 cType 5 Type 09 colours A1 -31A 9C6CEA (C6) 40 11 Size 05ED cType 5 Type 09 colours 87 -31B 9C72D7 (C6) 40 11 Size 0640 cType 5 Type 09 colours A1 -31C 9C7917 (07) 40 40 Size 0270 OTHER Greyscale Type 07 -31D 9C7B87 (07) 40 40 Size 024C OTHER Greyscale Type 07 -31E 9C7DD3 (07) 40 40 Size 0264 OTHER Greyscale Type 07 -31F 9C8037 (07) 40 40 Size 00E1 OTHER Greyscale Type 07 -320 9C8118 (07) 40 40 Size 0098 OTHER Greyscale Type 07 -321 9C81B0 (07) 40 40 Size 01C3 OTHER Greyscale Type 07 -322 9C8373 (07) 40 40 Size 029F OTHER Greyscale Type 07 -323 9C8612 (07) 40 40 Size 019F OTHER Greyscale Type 07 -324 9C87B1 (46) 20 20 Size 01D0 cType 5 Type 09 colours 47 [005D,0148 Rocket Engine] -325 9C8981 (07) 40 40 Size 030F OTHER Greyscale Type 07 -326 9C8C90 (07) 40 20 Size 03DB OTHER Greyscale Type 07 -327 9C906B (46) 20 20 Size 0145 cType 5 Type 09 colours 42 [00F8,00F9 Inside of Goldeneye Key,Polarized Glasses] -328 9C91B0 (46) 20 20 Size 0299 cType 5 Type 09 colours 77 -329 9C9449 (46) 20 20 Size 0420 cType 5 Type 0B colours C3 [0069-006B Laticed Windows- Archives] -32A 9C9869 (46) 20 20 Size 0258 cType 5 Type 09 colours 7A -32B 9C9AC1 (46) 20 20 Size 029E cType 5 Type 09 colours 47 [0118 Jeep Tailgate] -32C 9C9D5F (46) 20 20 Size 0335 cType 5 Type 09 colours 88 [0118 Jeep Taillights] -32D 9CA094 (46) 20 20 Size 01C9 cType 5 Type 09 colours 1A [0118 Jeep Front Grill] -32E 9CA25D (07) 40 20 Size 0479 OTHER Greyscale Type 07 -32F 9CA6D6 (46) 20 20 Size 01DF cType 5 Type 09 colours 20 [0118 Jeep Body] -330 9CA8B5 (07) 40 40 Size 02D9 OTHER Greyscale Type 07 -331 9CAB8E (46) 20 20 Size 0436 cType 5 Type 09 colours 8A [002C Jerry Can Sides] -332 9CAFC4 (46) 20 20 Size 0263 cType 3 Type 09 colours A0 [002C Jerry Can Handle] -333 9CB227 (46) 20 20 Size 0603 cType 5 Type 09 colours FF [002C Jerry Can Edge] -334 9CB82A (46) 20 20 Size 056F cType 5 Type 0B colours FF -335 9CBD99 (45) 10 10 Size 0044 cType 3 Type 0C colours 3 -336 9CBDDD (07) 40 20 Size 0251 OTHER Greyscale Type 07 -337 9CC02E (07) 40 20 Size 0184 OTHER Greyscale Type 07 -338 9CC1B2 (46) 20 20 Size 02AB cType 5 Type 09 colours 31 [0118,0131 Jeep Kickplate & Steering column,Car Bumper] -339 9CC45D (46) 20 20 Size 0376 cType 5 Type 09 colours 75 [- Jungle] -33A 9CC7D3 (46) 20 20 Size 0455 cType 5 Type 09 colours 9D [- Jungle] -33B 9CCC28 (46) 20 20 Size 0536 cType 5 Type 09 colours C5 [- Jungle] -33C 9CD15E (46) 20 20 Size 04E8 cType 5 Type 09 colours A8 [- Jungle] -33D 9CD646 (46) 20 20 Size 0559 cType 5 Type 09 colours D8 [- Jungle] -33E 9CDB9F (46) 20 20 Size 0579 cType 5 Type 09 colours D6 [- Jungle] -33F 9CE118 (C6) 21 21 Size 069E cType 5 Type 09 colours FF -340 9CE7B6 (C6) 21 21 Size 075A cType 5 Type 09 colours FF -341 9CEF10 (C6) 21 21 Size 06AB cType 5 Type 09 colours FF -342 9CF5BB (47) 40 10 Size 03BD cType 5 Type 09 colours A2 -343 9CF978 (02) 80 40 Size 0316 OTHER Greyscale Type 02 -344 9CFC8E (07) 60 30 Size 04D4 OTHER Greyscale Type 07 -345 9D0162 (46) 20 20 Size 024E cType 5 Type 09 colours 69 [00EA,00EB Buttons on Keypad] -346 9D03B0 (C6) 21 21 Size 0775 cType 5 Type 09 colours FF [Graffitti- Streets] -347 9D0B25 (C6) 21 21 Size 07AA cType 5 Type 09 colours FF [Graffitti- Streets] -348 9D12CF (C6) 21 21 Size 068B cType 5 Type 09 colours FF -349 9D195A (C6) 21 21 Size 068D cType 5 Type 09 colours FF -34A 9D1FE7 (07) 40 20 Size 057A OTHER Greyscale Type 07 -34B 9D2561 (07) 40 20 Size 0571 OTHER Greyscale Type 07 -34C 9D2AD2 (46) 20 20 Size 02FA cType 3 Type 09 colours B3 [-Silo,Surfaces] -34D 9D2DCC (46) 20 20 Size 046E cType 3 Type 09 colours FF -34E 9D323A (46) 20 20 Size 038E cType 5 Type 09 colours A6 [Depot Light Fixture] -34F 9D35C8 (46) 20 20 Size 04A3 cType 5 Type 09 colours C8 -350 9D3A6B (46) 20 20 Size 00B7 cType 5 Type 0A colours 6 -351 9D3B22 (07) 40 20 Size 05FC OTHER Greyscale Type 07 -352 9D411E (07) 40 20 Size 030F OTHER Greyscale Type 07 -353 9D442D (C6) 21 21 Size 03C5 cType 5 Type 09 colours 34 -354 9D47F2 (C5) 20 21 Size 01CC cType 5 Type 09 colours 23 -355 9D49BE (C5) 21 20 Size 01F9 cType 5 Type 09 colours 2A -356 9D4BB7 (C5) 20 20 Size 0185 cType 5 Type 09 colours 1F -357 9D4D3C (07) 40 40 Size 02DE OTHER Greyscale Type 07 -358 9D501A (07) 40 40 Size 028F OTHER Greyscale Type 07 -359 9D52A9 (46) 20 20 Size 0452 cType 5 Type 09 colours AF [Door/Elevator Button - Bunkers,Caverns,Silo,Control] -35A 9D56FB (46) 20 20 Size 031B cType 5 Type 09 colours 3E [-Silo] -35B 9D5A16 (07) 20 40 Size 06FC OTHER Greyscale Type 07 -35C 9D6112 (07) 20 40 Size 070A OTHER Greyscale Type 07 -35D 9D681C (46) 20 20 Size 0211 cType 5 Type 09 colours 33 -35E 9D6A2D (46) 20 20 Size 02D8 cType 5 Type 09 colours 72 -35F 9D6D05 (46) 20 20 Size 01BF cType 3 Type 09 colours 89 -360 9D6EC4 (46) 20 20 Size 022D cType 5 Type 09 colours 44 -361 9D70F1 (46) 20 20 Size 0193 cType 5 Type 09 colours 43 -362 9D7284 (46) 20 20 Size 04E8 cType 5 Type 09 colours A5 -363 9D776C (46) 20 20 Size 0126 cType 5 Type 09 colours 23 -364 9D7892 (46) 20 20 Size 00FF cType 5 Type 09 colours 15 -365 9D7991 (46) 20 20 Size 031C cType 5 Type 09 colours 98 -366 9D7CAD (45) 10 10 Size 017B cType 5 Type 0B colours 6C [00BD,00CE D5K Sight(KF7)] -367 9D7E28 (45) 10 10 Size 0160 cType 3 Type 0B colours 5D [00BB Stamped Metal for Laser Sight] -368 9D7F88 (45) 10 10 Size 0043 cType 3 Type 0B colours 12 [00BB Laser Range Indicator] -369 9D7FCB (45) 10 10 Size 0190 cType 5 Type 0B colours 5B [00BE-00C0,00CF Gun Nozzle] -36A 9D815B (45) 04 10 Size 002F cType 3 Type 0C colours C [00BB,00C5,00CD,00CF Steel Handle -36B 9D818A (45) 10 10 Size 014E cType 5 Type 0B colours 51 [0079-007E,0085-0086,00B8,00BC-00BD,00C1-00C3,00CE Ammo Clip] -36C 9D82D8 (46) 10 20 Size 013A cType 5 Type 0B colours 32 [00B8-00B9,00BC-00BD,00C0-00C3,00CE Gun Latch -36D 9D8412 (45) 10 01 Size 002F cType 3 Type 0C colours E [00BC-00BD,00CE Weapon Grip] -36E 9D8441 (45) 10 01 Size 0039 cType 3 Type 0B colours 10 [00BD,00BF Shiny Gunmetal] -36F 9D847A (45) 01 10 Size 0051 cType 3 Type 0B colours 1B [007F-0080,00B8-00B9,00BB,00BD,00C0-00C1,00C3,00C5,00CC,00CE-00CF Gun Barrel] -370 9D84CB (45) 10 01 Size 0029 cType 3 Type 0A colours B [00BA,00C0,00D1 Knife Handle,Shotgun Pump(Grenade Launcher) -371 9D84F4 (45) 01 10 Size 004B cType 3 Type 0B colours 18 [00BB,00BE,00CB,00CF Bright Steel,Grenade Round(Grenade Launcher)] -372 9D853F (45) 10 01 Size 002B cType 3 Type 0C colours C [00B9 Grenade Launcher Pump -373 9D856A (45) 10 10 Size 00DD cType 3 Type 0B colours 3F [00C2,00CF Heat Sink] -374 9D8647 (00) 20 20 Size 0700 OTHER Greyscale Type 00 -375 9D8D47 (46) 20 10 Size 0248 cType 3 Type 0B colours AD [00BC AR33 Handle] -376 9D8F8F (00) 40 40 Size 014F OTHER Greyscale Type 00 -377 9D90DE (46) 20 10 Size 016C cType 5 Type 0B colours 63 [00B8-00B9,00BD-00C3,00CA,00CC-00CF,00D3 Trigger Guard, Rocket Antenae(KF7,Grenade Launcher) -378 9D924A (46) 20 20 Size 03F8 cType 5 Type 09 colours 74 -379 9D9642 (07) 20 40 Size 02B0 OTHER Greyscale Type 07 -37A 9D98F2 (07) 20 40 Size 01BF OTHER Greyscale Type 07 -37B 9D9AB1 (C6) 21 20 Size 03B0 cType 5 Type 09 colours 57 [0030-0031 Mainframe Cooling Unit Back] -37C 9D9E61 (C6) 21 20 Size 03E9 cType 5 Type 09 colours 58 [0030-0031 Mainframe Cooling Unit Top -37D 9DA24A (C6) 20 21 Size 03D0 cType 5 Type 09 colours 68 [0030-0031 Mainframe Drive Left] -37E 9DA61A (C6) 20 21 Size 0372 cType 5 Type 09 colours 69 [0030-0031 Mainframe Drive Right -37F 9DA98C (46) 20 20 Size 05D2 cType 7 Type 09 colours FF [Pin-Up Chart - Archives] -380 9DAF5E (46) 20 30 Size 0711 cType 5 Type 09 colours FF [Map - Archives] -381 9DB66F (46) 20 30 Size 0672 cType 5 Type 09 colours DB [Map - Archives] -382 9DBCE1 (46) 20 20 Size 04CA cType 5 Type 09 colours D1 [Pin-Up Chart - Archives] -383 9DC1AB (46) 20 20 Size 03EA cType 5 Type 09 colours 90 [Pin-Up Chart - Archives] -384 9DC595 (47) 10 40 Size 0227 cType 5 Type 09 colours 34 [- Control] -385 9DC7BC (46) 20 20 Size 03BE cType 5 Type 09 colours 78 [Floor Tile - Bunker1,Control,Surfaces,Citadel] -386 9DCB7A (46) 20 20 Size 0354 cType 5 Type 09 colours 51 [-Silo] -387 9DCECE (46) 20 20 Size 0356 cType 5 Type 09 colours 52 [002E Kitchen Countertop] -388 9DD224 (46) 20 20 Size 03B5 cType 5 Type 09 colours 8F [011F Motorcycle Front] -389 9DD5D9 (46) 20 20 Size 041D cType 5 Type 09 colours 99 [011F Motorcycle Engine] -38A 9DD9F6 (46) 20 20 Size 02B9 cType 5 Type 09 colours 3D [011F Motorcycle Covering] -38B 9DDCAF (46) 20 20 Size 01AD cType 5 Type 09 colours 14 [011F Motorcycle Wheels/Axles] -38C 9DDE5C (07) 40 20 Size 0513 OTHER Greyscale Type 07 -38D 9DE36F (07) 40 40 Size 04C4 OTHER Greyscale Type 07 -38E 9DE833 (07) 40 40 Size 046F OTHER Greyscale Type 07 -38F 9DECA2 (07) 40 40 Size 04DD OTHER Greyscale Type 07 -390 9DF17F (07) 40 20 Size 065B OTHER Greyscale Type 07 -391 9DF7DA (46) 20 20 Size 0397 cType 5 Type 09 colours 6C [005F Control Desk Edge] -392 9DFB71 (46) 20 20 Size 02EF cType 5 Type 09 colours 5B -393 9DFE60 (46) 20 20 Size 0316 cType 5 Type 09 colours 4E [-Silo] -394 9E0176 (46) 20 20 Size 0316 cType 5 Type 09 colours 4E [(Tazer)] -395 9E048C (07) 20 40 Size 0098 OTHER Greyscale Type 07 -396 9E0524 (07) 10 80 Size 01A8 OTHER Greyscale Type 07 -397 9E06CC (07) 40 40 Size 0276 OTHER Greyscale Type 07 -398 9E0942 (07) 40 20 Size 0799 OTHER Greyscale Type 07 -399 9E10DB (46) 20 20 Size 029C cType 5 Type 09 colours 2E [Grating Above Labs - Caverns] -39A 9E1377 (07) 40 40 Size 0390 OTHER Greyscale Type 07 -39B 9E1707 (46) 20 20 Size 03BA cType 5 Type 09 colours 6E -39C 9E1AC1 (02) 50 28 Size 08A6 OTHER Greyscale Type 02 -39D 9E2367 (07) 40 40 Size 033E OTHER Greyscale Type 07 -39E 9E26A5 (46) 20 20 Size 060C cType 1 Type 09 colours FF -39F 9E2CB1 (07) 40 20 Size 0650 OTHER Greyscale Type 07 -3A0 9E3301 (46) 20 20 Size 0237 cType 5 Type 09 colours 3B [011C Hound Helicopter Body] -3A1 9E3538 (07) 40 20 Size 035C OTHER Greyscale Type 07 -3A2 9E3894 (07) 40 20 Size 0313 OTHER Greyscale Type 07 -3A3 9E3BA7 (07) 40 40 Size 01DE OTHER Greyscale Type 07 -3A4 9E3D85 (46) 20 20 Size 01BD cType 5 Type 09 colours 11 [011C Hound Helicopter Air Vents] -3A5 9E3F42 (07) 40 20 Size 0269 OTHER Greyscale Type 07 -3A6 9E41AB (46) 20 20 Size 0150 cType 3 Type 0B colours 65 -3A7 9E42FB (07) 40 20 Size 0436 OTHER Greyscale Type 07 -3A8 9E4731 (07) 40 20 Size 0166 OTHER Greyscale Type 07 -3A9 9E4897 (46) 20 20 Size 018D cType 5 Type 09 colours 43 [011C Hound Helicopter Rear Wheel Assembly] -3AA 9E4A24 (07) 40 20 Size 0201 OTHER Greyscale Type 07 -3AB 9E4C25 (07) 40 20 Size 0420 OTHER Greyscale Type 07 -3AC 9E5045 (40) 20 20 Size 02D6 cType 5 Type 09 colours 57 [Timed Mine top - All Levels] -3AD 9E531B (40) 20 20 Size 02DA cType 5 Type 09 colours 5B [Remote Mine top - All Levels] -3AE 9E55F5 (40) 20 20 Size 032F cType 5 Type 09 colours 73 [Proximity Mine top - All Levels] -3AF 9E5924 (46) 20 20 Size 02B9 cType 5 Type 09 colours 4E [(Timed Mine)] -3B0 9E5BDD (46) 20 20 Size 029D cType 5 Type 09 colours 4E [(Proximity Mine)] -3B1 9E5E7A (40) 20 20 Size 01FA cType 5 Type 09 colours 20 [Back of Mines - All Levels(Proximity, Remote, Timed Mines)] -3B2 9E6074 (46) 20 20 Size 027F cType 5 Type 09 colours 4B [(Remote Mine)] -3B3 9E62F3 (46) 20 20 Size 00F1 cType 5 Type 09 colours 3C [0037,0038 Rocket Rack Frame] -3B4 9E63E4 (07) 40 40 Size 05E7 OTHER Greyscale Type 07 -3B5 9E69CB (07) 40 40 Size 0671 OTHER Greyscale Type 07 -3B6 9E703C (46) 20 20 Size 052B cType 5 Type 09 colours C2 -3B7 9E7567 (C0) 20 40 Size 0878 cType 5 Type 09 colours FF [Landscape - UNUSED] -3B8 9E7DDF (C0) 20 40 Size 0799 cType 5 Type 09 colours FF [Landscape - UNUSED] -3B9 9E8578 (C0) 20 40 Size 05E4 cType 5 Type 09 colours D4 [Landscape - UNUSED] -3BA 9E8B5C (C0) 20 40 Size 0608 cType 5 Type 09 colours B7 [Landscape - UNUSED] -3BB 9E9164 (C0) 20 40 Size 0568 cType 5 Type 09 colours 88 [Landscape - UNUSED] -3BC 9E96CC (C0) 20 40 Size 05C1 cType 5 Type 09 colours 98 [Landscape - UNUSED] -3BD 9E9C8D (C0) 20 40 Size 05E5 cType 5 Type 09 colours CE [Landscape - UNUSED] -3BE 9EA272 (C0) 20 40 Size 0774 cType 5 Type 09 colours FF -3BF 9EA9E6 (07) 40 40 Size 0287 OTHER Greyscale Type 07 -3C0 9EAC6D (07) 40 40 Size 0287 OTHER Greyscale Type 07 -3C1 9EAEF4 (C7) 80 09 Size 0760 cType 3 Type 09 colours F8 -3C2 9EB654 (C7) 80 09 Size 084A cType 5 Type 09 colours FF -3C3 9EBE9E (C7) 80 09 Size 086D cType 5 Type 09 colours FF -3C4 9EC70B (C7) 80 09 Size 0869 cType 5 Type 09 colours FF -3C5 9ECF74 (C7) 80 09 Size 083E cType 5 Type 09 colours FF -3C6 9ED7B2 (C7) 80 09 Size 0831 cType 5 Type 09 colours F7 -3C7 9EDFE3 (C7) 80 09 Size 084E cType 5 Type 09 colours FA -3C8 9EE831 (C7) 80 09 Size 0820 cType 5 Type 09 colours F7 -3C9 9EF051 (07) 40 20 Size 0285 OTHER Greyscale Type 07 -3CA 9EF2D6 (07) 40 20 Size 02F1 OTHER Greyscale Type 07 -3CB 9EF5C7 (07) 40 20 Size 04CB OTHER Greyscale Type 07 -3CC 9EFA92 (86) 40 20 Size 087F OTHER Greyscale Type 86 -3CD 9F0311 (85) 40 20 Size 08AD OTHER Greyscale Type 85 -3CE 9F0BBE (86) 40 20 Size 087F OTHER Greyscale Type 86 -3CF 9F143D (86) 40 20 Size 087F OTHER Greyscale Type 86 -3D0 9F1CBC (85) 40 20 Size 08A2 OTHER Greyscale Type 85 -3D1 9F255E (86) 40 20 Size 087F OTHER Greyscale Type 86 -3D2 9F2DDD (85) 40 20 Size 091A OTHER Greyscale Type 85 -3D3 9F36F7 (07) 40 40 Size 0259 OTHER Greyscale Type 07 -3D4 9F3950 (07) 40 20 Size 0676 OTHER Greyscale Type 07 -3D5 9F3FC6 (07) 40 20 Size 0676 OTHER Greyscale Type 07 -3D6 9F463C (46) 20 20 Size 004A cType 3 Type 0A colours 8 [-Silo] -3D7 9F4686 (46) 20 20 Size 0370 cType 5 Type 09 colours 98 -3D8 9F49F6 (07) 40 20 Size 0307 OTHER Greyscale Type 07 -3D9 9F4CFD (46) 20 20 Size 0311 cType 5 Type 09 colours 81 -3DA 9F500E (07) 80 10 Size 051A OTHER Greyscale Type 07 -3DB 9F5528 (07) 40 40 Size 019A OTHER Greyscale Type 07 -3DC 9F56C2 (47) 10 40 Size 0011 cType 3 Type 0C colours 0 [00EA Door Decoder -3DD 9F56D3 (07) 40 40 Size 0129 OTHER Greyscale Type 07 -3DE 9F57FC (07) 40 40 Size 0142 OTHER Greyscale Type 07 -3DF 9F593E (07) 40 40 Size 0191 OTHER Greyscale Type 07 -3E0 9F5ACF (07) 40 40 Size 0180 OTHER Greyscale Type 07 -3E1 9F5C4F (07) 40 40 Size 013C OTHER Greyscale Type 07 -3E2 9F5D8B (07) 40 40 Size 0162 OTHER Greyscale Type 07 -3E3 9F5EED (07) 40 40 Size 0126 OTHER Greyscale Type 07 -3E4 9F6013 (07) 40 40 Size 0175 OTHER Greyscale Type 07 -3E5 9F6188 (40) 40 20 Size 035E cType 5 Type 09 colours 41 [- Control,Depot] -3E6 9F64E6 (46) 20 20 Size 0232 cType 5 Type 09 colours 1F [- Control] -3E7 9F6718 (47) 10 40 Size 050A cType 5 Type 09 colours F8 [0039 Oil Drum Sides] -3E8 9F6C22 (47) 10 40 Size 040C cType 5 Type 09 colours CE [003A-003B Oil Drum Side w/ Caution Stripe] -3E9 9F702E (47) 10 40 Size 03C9 cType 5 Type 09 colours BA [003A-003B Oil Drum Side w/o Caution Stripe] -3EA 9F73F7 (47) 10 40 Size 04D0 cType 5 Type 09 colours D2 [0036,003C,003E Banded Rusty Steel w/ Caution Stripes] -3EB 9F78C7 (47) 10 40 Size 04ED cType 5 Type 09 colours BE [0036,003D-003E Banded Rusty Steel w/o Caution Stripes] -3EC 9F7DB4 (46) 20 20 Size 0267 cType 5 Type 09 colours 55 [003F Padlock Bolt Hinge] -3ED 9F801B (46) 20 20 Size 033A cType 5 Type 09 colours 47 [003F,00A0 Padlock Edges and Latch, Lab Door Frame] -3EE 9F8355 (46) 20 20 Size 00F0 cType 5 Type 09 colours 15 [003F Padlock Bolt] -3EF 9F8445 (46) 20 20 Size 0491 cType 5 Type 09 colours C8 [003F Padlock Lock] -3F0 9F88D6 (46) 20 20 Size 028D cType 5 Type 09 colours 44 [000A,010F Book Edge] -3F1 9F8B63 (46) 20 20 Size 01B2 cType 5 Type 09 colours 17 -3F2 9F8D15 (07) 40 20 Size 0612 OTHER Greyscale Type 07 -3F3 9F9327 (07) 40 20 Size 071E OTHER Greyscale Type 07 -3F4 9F9A45 (46) 20 20 Size 0199 cType 5 Type 0A colours B -3F5 9F9BDE (07) 40 20 Size 06AD OTHER Greyscale Type 07 -3F6 9FA28B (07) 20 40 Size 01F3 OTHER Greyscale Type 07 -3F7 9FA47E (00) 20 20 Size 0389 OTHER Greyscale Type 00 -3F8 9FA807 (46) 20 20 Size 0367 cType 5 Type 09 colours 4E -3F9 9FAB6E (46) 20 20 Size 02FF cType 5 Type 09 colours 5A [Blood Splotches - Archives] -3FA 9FAE6D (46) 20 20 Size 0379 cType 5 Type 09 colours 70 -3FB 9FB1E6 (46) 20 20 Size 048E cType 5 Type 09 colours 8C [0140-0144 St.Pete Building Curb] -3FC 9FB674 (07) 80 10 Size 051F OTHER Greyscale Type 07 -3FD 9FBB93 (46) 20 20 Size 0545 cType 5 Type 09 colours D6 [0040 Phone] -3FE 9FC0D8 (46) 20 20 Size 030A cType 5 Type 09 colours 4B -3FF 9FC3E2 (46) 20 20 Size 03B3 cType 5 Type 09 colours 6A [(Klobb,ZMG,Shotgun,Sniper)] -400 9FC795 (46) 20 20 Size 0476 cType 5 Type 09 colours 8C -401 9FCC0B (46) 20 20 Size 022A cType 5 Type 09 colours 4E [00C4 Grenade] -402 9FCE35 (46) 20 20 Size 0096 cType 3 Type 09 colours 2D -403 9FCECB (46) 20 20 Size 0331 cType 3 Type 09 colours 9F -404 9FD1FC (46) 20 20 Size 044F cType 3 Type 0B colours FF -405 9FD64B (46) 20 20 Size 0331 cType 3 Type 09 colours 9F -406 9FD97C (07) 40 20 Size 0343 OTHER Greyscale Type 07 -407 9FDCBF (46) 20 20 Size 00AD cType 3 Type 09 colours 38 [014A Desk Top Bar] -408 9FDD6C (C6) 21 21 Size 05D2 cType 5 Type 09 colours 97 -409 9FE33E (C6) 21 21 Size 0488 cType 5 Type 09 colours 64 -40A 9FE7C6 (C6) 21 21 Size 0477 cType 5 Type 09 colours 5E -40B 9FEC3D (C6) 21 21 Size 04D3 cType 5 Type 09 colours 60 -40C 9FF110 (C6) 21 21 Size 061A cType 5 Type 09 colours A8 -40D 9FF72A (C6) 21 21 Size 048F cType 5 Type 09 colours 60 -40E 9FFBB9 (C6) 21 21 Size 04FB cType 5 Type 09 colours 6F -40F A000B4 (C6) 21 21 Size 053B cType 5 Type 09 colours 8C -410 A005EF (07) 80 10 Size 06A0 OTHER Greyscale Type 07 -411 A00C8F (46) 20 20 Size 0212 cType 5 Type 09 colours 3C [0123 Cessna Door Handles] -412 A00EA1 (07) 40 20 Size 02E7 OTHER Greyscale Type 07 -413 A01188 (46) 20 20 Size 02A5 cType 5 Type 09 colours 3F [0123 Cessna Interior Panels] -414 A0142D (46) 20 20 Size 0244 cType 5 Type 09 colours 45 [0123 Cessna Beneath Instrument Console] -415 A01671 (07) 40 40 Size 0130 OTHER Greyscale Type 07 -416 A017A1 (46) 10 20 Size 015C cType 5 Type 09 colours 27 -417 A018FD (07) 40 20 Size 035C OTHER Greyscale Type 07 -418 A01C59 (07) 40 20 Size 0676 OTHER Greyscale Type 07 -419 A022CF (46) 20 20 Size 02CD cType 5 Type 09 colours 43 -41A A0259C (46) 30 20 Size 076E cType 5 Type 09 colours FF [Pin-Up - Archives] -41B A02D0A (46) 30 20 Size 0723 cType 5 Type 09 colours FE [Pin-Up - Archives, Facility] -41C A0342D (46) 30 20 Size 07B2 cType 3 Type 09 colours FF [Pin-Up - Archives] -41D A03BDF (07) 40 20 Size 0613 OTHER Greyscale Type 07 -41E A041F2 (46) 30 20 Size 0228 cType 5 Type 0A colours C [Document - Facility] -41F A0441A (07) 20 40 Size 05D2 OTHER Greyscale Type 07 -420 A049EC (46) 20 30 Size 0207 cType 5 Type 09 colours 13 [Bulletin - Facility,Archives] -421 A04BF3 (07) 20 40 Size 059E OTHER Greyscale Type 07 -422 A05191 (46) 20 30 Size 0198 cType 5 Type 0A colours B [Bulletin - Facility,Archives] -423 A05329 (07) 20 40 Size 054C OTHER Greyscale Type 07 -424 A05875 (46) 20 20 Size 050E cType 5 Type 09 colours F3 -425 A05D83 (46) 20 20 Size 01E3 cType 3 Type 09 colours 67 -426 A05F66 (46) 20 20 Size 0524 cType 5 Type 09 colours BE -427 A0648A (46) 20 20 Size 03D6 cType 5 Type 09 colours 59 -428 A06860 (46) 20 20 Size 0292 cType 5 Type 09 colours 1A -429 A06AF2 (46) 20 20 Size 016D cType 5 Type 0A colours 7 -42A A06C5F (46) 20 20 Size 03C5 cType 5 Type 09 colours 5C [Bed Covers - Train] -42B A07024 (40) 20 40 Size 05BB cType 5 Type 09 colours 3C [Compartment Wallpaper - Train] -42C A075DF (04) 40 30 Size 053A OTHER Greyscale Type 04 -42D A07B19 (03) 30 40 Size 05A3 OTHER Greyscale Type 03 -42E A080BC (03) 30 40 Size 071A OTHER Greyscale Type 03 -42F A087D6 (07) 40 20 Size 040A OTHER Greyscale Type 07 -430 A08BE0 (03) 30 40 Size 06E1 OTHER Greyscale Type 03 -431 A092C1 (03) 30 40 Size 0723 OTHER Greyscale Type 03 -432 A099E4 (07) 40 20 Size 047E OTHER Greyscale Type 07 -433 A09E62 (46) 20 20 Size 0280 cType 5 Type 09 colours 3C -434 A0A0E2 (46) 20 20 Size 0383 cType 5 Type 09 colours 4D -435 A0A465 (07) 20 40 Size 02E4 OTHER Greyscale Type 07 -436 A0A749 (07) 40 20 Size 0140 OTHER Greyscale Type 07 -437 A0A889 (46) 20 20 Size 00E6 cType 3 Type 09 colours 2D -438 A0A96F (46) 20 20 Size 05EA cType 5 Type 09 colours FF -439 A0AF59 (47) 40 10 Size 04C8 cType 5 Type 09 colours D7 -43A A0B421 (47) 40 10 Size 050F cType 3 Type 09 colours E2 [Railroad Tracks - Depot, Train] -43B A0B930 (46) 20 20 Size 00E4 cType 5 Type 0A colours 3 [011A Nat. Helicopter Interior] -43C A0BA14 (46) 20 20 Size 0048 cType 3 Type 0A colours D [011A Nat. Helicopter Turbine] -43D A0BA5C (46) 20 20 Size 05AC cType 5 Type 09 colours FF [Rare Logo - Depot] -43E A0C008 (46) 20 20 Size 021B cType 3 Type 09 colours 7B -43F A0C223 (46) 20 20 Size 035F cType 3 Type 0B colours FF [- Archives] -440 A0C582 (07) 40 20 Size 0206 OTHER Greyscale Type 07 -441 A0C788 (07) 40 20 Size 016B OTHER Greyscale Type 07 -442 A0C8F3 (46) 20 20 Size 046B cType 5 Type 09 colours E4 -443 A0CD5E (46) 20 20 Size 053F cType 5 Type 09 colours C3 -444 A0D29D (46) 20 20 Size 03EA cType 5 Type 09 colours 83 -445 A0D687 (46) 20 20 Size 03EB cType 5 Type 09 colours 68 -446 A0DA72 (46) 20 20 Size 051B cType 5 Type 09 colours AE -447 A0DF8D (46) 20 20 Size 048A cType 5 Type 09 colours 91 -448 A0E417 (46) 20 20 Size 04C8 cType 5 Type 09 colours 9D -449 A0E8DF (46) 20 20 Size 0456 cType 5 Type 09 colours 86 -44A A0ED35 (46) 20 20 Size 0386 cType 5 Type 09 colours 5C -44B A0F0BB (46) 20 20 Size 04F0 cType 5 Type 09 colours BB -44C A0F5AB (46) 20 20 Size 0556 cType 5 Type 09 colours FF -44D A0FB01 (46) 20 20 Size 0533 cType 5 Type 09 colours F6 -44E A10034 (46) 20 20 Size 03EA cType 5 Type 09 colours CC -44F A1041E (46) 20 20 Size 04E8 cType 5 Type 09 colours FF -450 A10906 (46) 20 20 Size 054E cType 5 Type 09 colours FF -451 A10E54 (46) 20 20 Size 0518 cType 5 Type 09 colours E2 -452 A1136C (46) 20 20 Size 049F cType 5 Type 09 colours E7 -453 A1180B (46) 20 20 Size 054A cType 5 Type 09 colours FD -454 A11D55 (46) 20 20 Size 0537 cType 5 Type 09 colours FF -455 A1228C (46) 20 20 Size 0535 cType 5 Type 09 colours FF -456 A127C1 (46) 20 20 Size 03E6 cType 5 Type 09 colours D2 -457 A12BA7 (46) 20 20 Size 04B0 cType 5 Type 09 colours F0 -458 A13057 (46) 20 20 Size 052D cType 5 Type 09 colours FF -459 A13584 (46) 20 20 Size 0535 cType 5 Type 09 colours FF -45A A13AB9 (46) 20 20 Size 046C cType 3 Type 09 colours FF -45B A13F25 (46) 20 20 Size 04DA cType 5 Type 09 colours FF -45C A143FF (46) 20 20 Size 0405 cType 5 Type 09 colours 7C -45D A14804 (46) 20 20 Size 0501 cType 5 Type 09 colours BC -45E A14D05 (07) 80 10 Size 0585 OTHER Greyscale Type 07 -45F A1528A (07) 40 20 Size 02BA OTHER Greyscale Type 07 -460 A15544 (07) 40 20 Size 02A0 OTHER Greyscale Type 07 -461 A157E4 (07) 40 20 Size 031C OTHER Greyscale Type 07 -462 A15B00 (47) 40 20 Size 019C cType 5 Type 0C colours 9 -463 A15C9C (47) 40 20 Size 00D8 cType 5 Type 0C colours 3 -464 A15D74 (00) 40 40 Size 0728 OTHER Greyscale Type 00 -465 A1649C (07) 40 40 Size 04AD OTHER Greyscale Type 07 -466 A16949 (07) 40 40 Size 0325 OTHER Greyscale Type 07 -467 A16C6E (46) 20 20 Size 04EC cType 5 Type 09 colours BB [0142,014E Barrier Warning Stripes] -468 A1715A (07) 40 20 Size 0801 OTHER Greyscale Type 07 -469 A1795B (07) 40 20 Size 07E3 OTHER Greyscale Type 07 -46A A1813E (80) 40 40 Size 0657 OTHER Greyscale Type 80 -46B A18795 (46) 20 20 Size 0432 cType 5 Type 09 colours CA -46C A18BC7 (40) 40 20 Size 09AA cType 5 Type 09 colours FF -46D A19571 (46) 20 20 Size 037F cType 5 Type 09 colours 52 -46E A198F0 (46) 20 20 Size 04DE cType 5 Type 09 colours A1 -46F A19DCE (46) 20 20 Size 05AB cType 5 Type 09 colours FF [Ceiling - Archives, Library] -470 A1A379 (46) 20 20 Size 060C cType 1 Type 09 colours FF -471 A1A985 (46) 20 20 Size 029A cType 5 Type 09 colours 2E [- Control,Archives,Facility] -472 A1AC1F (46) 20 20 Size 013E cType 5 Type 09 colours 14 [-Silo] -473 A1AD5D (46) 20 20 Size 01E9 cType 5 Type 09 colours 43 -474 A1AF46 (00) 40 40 Size 03BB OTHER Greyscale Type 00 -475 A1B301 (07) 40 20 Size 043E OTHER Greyscale Type 07 -476 A1B73F (07) 40 20 Size 0425 OTHER Greyscale Type 07 -477 A1BB64 (46) 20 20 Size 02B0 cType 5 Type 09 colours 38 [Gun Handle (Magnum)] -478 A1BE14 (07) 40 20 Size 00D5 OTHER Greyscale Type 07 -479 A1BEE9 (07) 40 20 Size 014F OTHER Greyscale Type 07 -47A A1C038 (46) 20 20 Size 0129 cType 5 Type 09 colours 1B [- Facility] -47B A1C161 (07) 10 80 Size 0350 OTHER Greyscale Type 07 -47C A1C4B1 (07) 10 80 Size 033C OTHER Greyscale Type 07 -47D A1C7ED (07) 40 20 Size 0354 OTHER Greyscale Type 07 -47E A1CB41 (46) 20 20 Size 0191 cType 5 Type 09 colours 2A -47F A1CCD2 (07) 40 20 Size 04CA OTHER Greyscale Type 07 -480 A1D19C (46) 20 20 Size 0323 cType 5 Type 09 colours 79 -481 A1D4BF (07) 40 20 Size 0387 OTHER Greyscale Type 07 -482 A1D846 (07) 40 20 Size 079C OTHER Greyscale Type 07 -483 A1DFE2 (07) 40 20 Size 0706 OTHER Greyscale Type 07 -484 A1E6E8 (46) 20 20 Size 02D0 cType 5 Type 09 colours 9C -485 A1E9B8 (07) 40 20 Size 02FA OTHER Greyscale Type 07 -486 A1ECB2 (46) 20 20 Size 0498 cType 5 Type 09 colours 9D [0128,0134 Satellite Dish Base,Star on Door- Archives] -487 A1F14A (46) 20 20 Size 049F cType 5 Type 09 colours 9F [0032 Metal Chair Legs- Facility] -488 A1F5E9 (46) 20 20 Size 0307 cType 5 Type 09 colours 3C [00B0,0119 Shutter, Red Prime Mover Frame Section- Control] -489 A1F8F0 (46) 20 20 Size 0549 cType 5 Type 09 colours CB [00A4 Caverns Eye Door] -48A A1FE39 (46) 20 20 Size 04E5 cType 5 Type 09 colours B1 -48B A2031E (46) 20 20 Size 03EE cType 5 Type 09 colours 85 [00B0,011E Shutter Edge, Trailer - Unknown] -48C A2070C (46) 20 20 Size 0407 cType 5 Type 09 colours 7D -48D A20B13 (07) 40 20 Size 05E3 OTHER Greyscale Type 07 -48E A210F6 (46) 20 20 Size 0541 cType 5 Type 09 colours D5 [0135 Depot Shutter Edge] -48F A21637 (46) 20 20 Size 0533 cType 5 Type 09 colours D0 [0008,008E,008F,0091,00B2 Trash Bin Bottom, Door Spine] -490 A21B6A (46) 20 20 Size 0439 cType 5 Type 09 colours 80 -491 A21FA3 (07) 40 20 Size 05F0 OTHER Greyscale Type 07 -492 A22593 (07) 40 20 Size 05B1 OTHER Greyscale Type 07 -493 A22B44 (46) 20 20 Size 0374 cType 5 Type 09 colours 63 -494 A22EB8 (45) 10 10 Size 0025 cType 3 Type 0C colours 7 -495 A22EDD (46) 20 20 Size 02A4 cType 5 Type 09 colours 40 [- Egypt] -496 A23181 (46) 20 20 Size 0240 cType 5 Type 09 colours 27 [00AB,00AD Stone Moving Wall- Egypt] -497 A233C1 (46) 20 20 Size 020F cType 5 Type 09 colours 26 [- Egypt] -498 A235D0 (07) 40 40 Size 0369 OTHER Greyscale Type 07 -499 A23939 (07) 40 40 Size 0227 OTHER Greyscale Type 07 -49A A23B60 (07) 40 40 Size 0121 OTHER Greyscale Type 07 -49B A23C81 (07) 40 40 Size 0269 OTHER Greyscale Type 07 -49C A23EEA (07) 40 40 Size 01D9 OTHER Greyscale Type 07 -49D A240C3 (07) 40 40 Size 024A OTHER Greyscale Type 07 -49E A2430D (07) 40 40 Size 021B OTHER Greyscale Type 07 -49F A24528 (07) 40 20 Size 0476 OTHER Greyscale Type 07 -4A0 A2499E (46) 2C 22 Size 06B1 cType 5 Type 09 colours FF [0045 Sattelite Blue Solar Paneling -4A1 A2504F (46) 20 20 Size 0566 cType 5 Type 09 colours FF -4A2 A255B5 (46) 20 20 Size 05A8 cType 5 Type 09 colours FF -4A3 A25B5D (46) 20 20 Size 053F cType 5 Type 09 colours FF -4A4 A2609C (45) 10 10 Size 005E cType 3 Type 09 colours 14 -4A5 A260FA (C6) 21 21 Size 02EA cType 5 Type 09 colours 46 [Card Reader Top- Silo] -4A6 A263E4 (C6) 21 21 Size 03BE cType 5 Type 09 colours 72 [Card Reader Bottom- Silo] -4A7 A267A2 (47) 10 40 Size 0155 cType 5 Type 09 colours 1F -4A8 A268F7 (40) 20 20 Size 00C6 cType 5 Type 0A colours B -4A9 A269BD (46) 20 20 Size 0342 cType 3 Type 09 colours A8 [0046,0128 Satellite Dish Upper Array Frame- Facility] -4AA A26CFF (46) 20 20 Size 03D6 cType 5 Type 09 colours 68 [0128 Satellite Dish Base upper Arms] -4AB A270D5 (46) 20 20 Size 0329 cType 5 Type 09 colours 74 [0128 Satellite Dish Bottom Support Girderwork] -4AC A273FE (03) 38 36 Size 07CE OTHER Greyscale Type 03 -4AD A27BCC (07) 40 20 Size 05D4 OTHER Greyscale Type 07 -4AE A281A0 (86) 40 11 Size 0621 OTHER Greyscale Type 86 -4AF A287C1 (86) 40 11 Size 07F3 OTHER Greyscale Type 86 -4B0 A28FB4 (86) 40 11 Size 076E OTHER Greyscale Type 86 -4B1 A29722 (86) 40 11 Size 07AC OTHER Greyscale Type 86 -4B2 A29ECE (46) 20 20 Size 01E3 cType 5 Type 09 colours 37 -4B3 A2A0B1 (46) 20 20 Size 028C cType 5 Type 09 colours 29 [- Surfaces] -4B4 A2A33D (46) 20 20 Size 02D2 cType 5 Type 09 colours 3A [- Surfaces] -4B5 A2A60F (47) 10 40 Size 03B8 cType 5 Type 09 colours B2 -4B6 A2A9C7 (46) 20 20 Size 0544 cType 5 Type 09 colours FF [000B Bookcase; Back 3rd Shelf] -4B7 A2AF0B (46) 20 20 Size 04CA cType 5 Type 09 colours FF [000B Bookcase; Front 2nd Shelf] -4B8 A2B3D5 (46) 20 20 Size 0526 cType 5 Type 09 colours FF [000B Bookcase; Back 2nd Shelf] -4B9 A2B8FB (46) 20 20 Size 0575 cType 3 Type 09 colours FF [000B Bookcase; Back 4th Shelf] -4BA A2BE70 (46) 20 20 Size 04BB cType 5 Type 09 colours FF [000B Bookcase; Front 4th Shelf] -4BB A2C32B (46) 20 20 Size 0575 cType 3 Type 09 colours FF [000B Bookcase; Front 1st Shelf] -4BC A2C8A0 (46) 20 20 Size 05D2 cType 5 Type 09 colours FF [000B Bookcase; Back 1st Shelf] -4BD A2CE72 (46) 20 20 Size 059F cType 5 Type 09 colours FF [000B Bookcase; Front 3rd Shelf] -4BE A2D411 (46) 20 20 Size 013D cType 5 Type 09 colours 12 [000B Bookcase Edge of Shelves] -4BF A2D54E (46) 30 20 Size 06E4 cType 5 Type 09 colours FF [000B Bookcase Low-Res Front] -4C0 A2DC32 (46) 30 20 Size 067D cType 5 Type 09 colours FF [000B Bookcase Low-Res Back] -4C1 A2E2AF (46) 20 20 Size 02E9 cType 5 Type 09 colours 71 [Shotgun Shells (AutoShotgun)] -4C2 A2E598 (46) 20 20 Size 0373 cType 3 Type 0B colours BC [- Bunker1] -4C3 A2E90B (46) 20 20 Size 0162 cType 5 Type 09 colours 27 -4C4 A2EA6D (46) 20 20 Size 0111 cType 5 Type 09 colours 16 -4C5 A2EB7E (07) 40 40 Size 00C3 OTHER Greyscale Type 07 -4C6 A2EC41 (07) 40 20 Size 021E OTHER Greyscale Type 07 -4C7 A2EE5F (46) 20 20 Size 043A cType 5 Type 09 colours 80 -4C8 A2F299 (46) 30 20 Size 054D cType 5 Type 09 colours 92 [Bulletin - Archives] -4C9 A2F7E6 (46) 20 20 Size 028D cType 5 Type 09 colours 36 -4CA A2FA73 (46) 20 20 Size 03C3 cType 5 Type 09 colours A6 [0033,0034 Hazardous Chemical Type 6] -4CB A2FE36 (46) 20 20 Size 03C1 cType 5 Type 09 colours A3 [004F,0053 Hazardous Chemical Type 4] -4CC A301F7 (46) 20 20 Size 03AC cType 5 Type 09 colours 9D [0052 Hazardous Chemical Type 2] -4CD A305A3 (46) 20 20 Size 059E cType 3 Type 09 colours FF -4CE A30B41 (07) 40 40 Size 0349 OTHER Greyscale Type 07 -4CF A30E8A (07) 40 40 Size 03D8 OTHER Greyscale Type 07 -4D0 A31262 (07) 40 40 Size 0453 OTHER Greyscale Type 07 -4D1 A316B5 (07) 40 40 Size 041F OTHER Greyscale Type 07 -4D2 A31AD4 (07) 40 20 Size 06AF OTHER Greyscale Type 07 -4D3 A32183 (07) 40 40 Size 039D OTHER Greyscale Type 07 -4D4 A32520 (07) 40 40 Size 0300 OTHER Greyscale Type 07 -4D5 A32820 (07) 40 40 Size 03E2 OTHER Greyscale Type 07 -4D6 A32C02 (07) 40 40 Size 038B OTHER Greyscale Type 07 -4D7 A32F8D (07) 40 40 Size 032A OTHER Greyscale Type 07 -4D8 A332B7 (07) 40 40 Size 040E OTHER Greyscale Type 07 -4D9 A336C5 (07) 40 40 Size 0333 OTHER Greyscale Type 07 -4DA A339F8 (07) 40 20 Size 02C5 OTHER Greyscale Type 07 -4DB A33CBD (46) 20 20 Size 0265 cType 5 Type 09 colours 52 [-Silo] -4DC A33F22 (07) 40 40 Size 036C OTHER Greyscale Type 07 -4DD A3428E (87) 48 21 Size 053E OTHER Greyscale Type 87 -4DE A347CC (87) 48 21 Size 04B0 OTHER Greyscale Type 87 -4DF A34C7C (07) 40 20 Size 0198 OTHER Greyscale Type 07 -4E0 A34E14 (07) 40 40 Size 04E9 OTHER Greyscale Type 07 -4E1 A352FD (07) 40 20 Size 029C OTHER Greyscale Type 07 -4E2 A35599 (07) 40 20 Size 02E3 OTHER Greyscale Type 07 -4E3 A3587C (07) 40 20 Size 02D9 OTHER Greyscale Type 07 -4E4 A35B55 (07) 40 20 Size 0276 OTHER Greyscale Type 07 -4E5 A35DCB (07) 40 20 Size 02E3 OTHER Greyscale Type 07 -4E6 A360AE (46) 20 20 Size 03AB cType 5 Type 0B colours FF [-Silo] -4E7 A36459 (07) 40 20 Size 0249 OTHER Greyscale Type 07 -4E8 A366A2 (46) 20 20 Size 00DA cType 5 Type 09 colours 1C [- Archives] -4E9 A3677C (46) 20 20 Size 0377 cType 5 Type 09 colours 72 [(Klobb,ZMG)] -4EA A36AF3 (46) 20 20 Size 0547 cType 5 Type 09 colours DE [0035,003B-003D Hazard Sign] -4EB A3703A (46) 20 20 Size 03E7 cType 5 Type 09 colours A8 [0036,003A,003E Hazard Sign] -4EC A37421 (07) 40 40 Size 0303 OTHER Greyscale Type 07 -4ED A37724 (46) 20 20 Size 01F2 cType 5 Type 09 colours 3A -4EE A37916 (46) 20 20 Size 0128 cType 5 Type 0A colours C [0117,0119 Truck Front Grill] -4EF A37A3E (46) 20 20 Size 01B2 cType 5 Type 09 colours 19 [- Surfaces] -4F0 A37BF0 (46) 20 20 Size 0104 cType 5 Type 0A colours 2 [- Surfaces] -4F1 A37CF4 (46) 20 20 Size 04A4 cType 5 Type 0B colours 8D [- Surfaces] -4F2 A38198 (46) 20 20 Size 033E cType 5 Type 0B colours 81 [- Facility,Surfaces] -4F3 A384D6 (07) 40 20 Size 054C OTHER Greyscale Type 07 -4F4 A38A22 (46) 20 20 Size 0461 cType 5 Type 09 colours 7F -4F5 A38E83 (46) 20 20 Size 02F9 cType 5 Type 09 colours 72 [-Silo] -4F6 A3917C (07) 40 20 Size 054D OTHER Greyscale Type 07 -4F7 A396C9 (46) 20 20 Size 01E1 cType 5 Type 09 colours 47 [0122 Speedboat Interior Panels] -4F8 A398AA (46) 20 20 Size 0227 cType 5 Type 09 colours 41 [0122 Speedboat Sides] -4F9 A39AD1 (46) 20 20 Size 01F5 cType 5 Type 09 colours 25 [0122 Speedboat Front,Back Panel] -4FA A39CC6 (46) 20 20 Size 033E cType 5 Type 09 colours 5F [0122 Speedboat Steering Wheel] -4FB A3A004 (46) 20 20 Size 02D6 cType 5 Type 09 colours 46 [0117,0122 Truck Door Latches,Boat Steering Wheel Post] -4FC A3A2DA (46) 20 20 Size 01A1 cType 5 Type 09 colours 56 [0134 Depot Entry Gate Spikes] -4FD A3A47B (46) 20 20 Size 00CB cType 5 Type 0B colours 3E [- Archives] -4FE A3A546 (46) 20 20 Size 04F0 cType 5 Type 09 colours B6 -4FF A3AA36 (46) 20 20 Size 0193 cType 5 Type 0A colours D -500 A3ABC9 (07) 40 40 Size 0370 OTHER Greyscale Type 07 -501 A3AF39 (46) 20 20 Size 03AE cType 5 Type 09 colours 8E -502 A3B2E7 (46) 20 20 Size 0418 cType 5 Type 09 colours 97 -503 A3B6FF (46) 20 20 Size 01B7 cType 5 Type 09 colours 43 [0134 Emblem on Train and Door - Depot] -504 A3B8B6 (07) 40 40 Size 0298 OTHER Greyscale Type 07 [Silo Goldeneye Satellite Star] -505 A3BB4E (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -506 A3C362 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -507 A3CB6C (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -508 A3D380 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -509 A3DB8A (46) 20 20 Size 060C cType 1 Type 09 colours FF -50A A3E196 (46) 20 20 Size 043D cType 5 Type 09 colours 95 -50B A3E5D3 (46) 20 20 Size 0601 cType 5 Type 09 colours FF -50C A3EBD4 (46) 20 20 Size 060C cType 1 Type 09 colours FF -50D A3F1E0 (46) 20 20 Size 059C cType 5 Type 09 colours DB -50E A3F77C (46) 20 20 Size 05EF cType 3 Type 09 colours FD -50F A3FD6B (46) 20 20 Size 05EE cType 1 Type 09 colours F0 -510 A40359 (46) 20 20 Size 060C cType 1 Type 09 colours FF -511 A40965 (46) 20 20 Size 060C cType 1 Type 09 colours FF -512 A40F71 (46) 20 20 Size 04A1 cType 5 Type 09 colours 9F -513 A41412 (46) 20 20 Size 04EE cType 5 Type 09 colours BA -514 A41900 (46) 20 20 Size 05E0 cType 5 Type 09 colours FF -515 A41EE0 (46) 20 20 Size 060C cType 1 Type 09 colours FF -516 A424EC (46) 20 20 Size 060C cType 1 Type 09 colours FF -517 A42AF8 (46) 20 20 Size 060C cType 1 Type 09 colours FF -518 A43104 (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -519 A43918 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -51A A44122 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -51B A4492C (C6) 21 21 Size 080A cType 1 Type 09 colours FF -51C A45136 (46) 20 20 Size 05F9 cType 5 Type 09 colours FF -51D A4572F (46) 20 20 Size 060C cType 1 Type 09 colours FF -51E A45D3B (C7) 21 21 Size 07E6 cType 5 Type 09 colours FF -51F A46521 (C6) 21 21 Size 07EC cType 5 Type 09 colours FF -520 A46D0D (C7) 21 21 Size 07FB cType 5 Type 09 colours FF -521 A47508 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -522 A47D12 (C6) 21 21 Size 080C cType 1 Type 09 colours FF -523 A4851E (C6) 21 21 Size 080A cType 1 Type 09 colours FF -524 A48D28 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -525 A49532 (C6) 21 21 Size 0805 cType 5 Type 09 colours FF -526 A49D37 (46) 20 20 Size 05E9 cType 5 Type 09 colours FF -527 A4A320 (46) 20 20 Size 05D5 cType 3 Type 09 colours FF -528 A4A8F5 (46) 20 20 Size 05E9 cType 5 Type 09 colours FF -529 A4AEDE (46) 20 20 Size 0452 cType 5 Type 09 colours 85 -52A A4B330 (47) 10 40 Size 060C cType 1 Type 09 colours FF -52B A4B93C (47) 10 40 Size 060C cType 5 Type 09 colours FF -52C A4BF48 (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -52D A4C75C (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -52E A4CF70 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -52F A4D77A (C6) 21 21 Size 0808 cType 1 Type 09 colours FF -530 A4DF82 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -531 A4E78C (C6) 21 21 Size 080A cType 1 Type 09 colours FF -532 A4EF96 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -533 A4F7A0 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -534 A4FFAA (46) 20 20 Size 049A cType 5 Type 09 colours 91 [Statue] -535 A50444 (46) 20 20 Size 05EB cType 5 Type 09 colours F7 -536 A50A2F (46) 20 20 Size 0537 cType 5 Type 09 colours E8 -537 A50F66 (46) 20 20 Size 0609 cType 5 Type 09 colours FF -538 A5156F (46) 20 20 Size 05ED cType 5 Type 09 colours FF -539 A51B5C (46) 20 20 Size 0506 cType 5 Type 09 colours BE -53A A52062 (46) 20 20 Size 0383 cType 5 Type 09 colours 7F -53B A523E5 (46) 20 20 Size 04F5 cType 5 Type 09 colours C0 -53C A528DA (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -53D A530EE (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -53E A53902 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -53F A5410C (C6) 21 21 Size 080A cType 1 Type 09 colours FF -540 A54916 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -541 A55120 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -542 A5592A (C6) 21 21 Size 080A cType 1 Type 09 colours FF -543 A56134 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -544 A5693E (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -545 A57152 (C7) 21 21 Size 0814 cType 1 Type 09 colours FF -546 A57966 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -547 A58170 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -548 A5897A (C6) 21 21 Size 080A cType 1 Type 09 colours FF -549 A59184 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -54A A5998E (C6) 21 21 Size 080A cType 1 Type 09 colours FF -54B A5A198 (C6) 21 21 Size 080A cType 1 Type 09 colours FF -54C A5A9A2 (07) 40 20 Size 0315 OTHER Greyscale Type 07 -54D A5ACB7 (07) 20 40 Size 0283 OTHER Greyscale Type 07 -54E A5AF3A (46) 20 20 Size 0286 cType 5 Type 09 colours 35 [Statue] -54F A5B1C0 (46) 20 20 Size 0486 cType 5 Type 09 colours 8C -550 A5B646 (46) 20 20 Size 05F6 cType 5 Type 09 colours F9 -551 A5BC3C (46) 20 20 Size 060C cType 1 Type 09 colours FF [Statue] -552 A5C248 (46) 20 20 Size 0609 cType 5 Type 09 colours FF [Statue] -553 A5C851 (46) 20 20 Size 04C7 cType 5 Type 09 colours AA -554 A5CD18 (46) 20 20 Size 033E cType 5 Type 09 colours 54 [Statue] -555 A5D056 (07) 20 80 Size 0427 OTHER Greyscale Type 07 -556 A5D47D (07) 10 80 Size 01DA OTHER Greyscale Type 07 -557 A5D657 (07) 40 20 Size 0613 OTHER Greyscale Type 07 -558 A5DC6A (46) 20 20 Size 04C2 cType 5 Type 09 colours B6 [0117,011E Military Truck and Trailer Frame] -559 A5E12C (47) 10 40 Size 04E3 cType 5 Type 09 colours B1 -55A A5E60F (C6) 40 11 Size 0453 cType 5 Type 09 colours 4A [- Control] -55B A5EA62 (C6) 40 11 Size 047B cType 5 Type 09 colours 4B [- Control] -55C A5EEDD (07) 40 20 Size 027C OTHER Greyscale Type 07 -55D A5F159 (07) 40 20 Size 0327 OTHER Greyscale Type 07 -55E A5F480 (46) 20 20 Size 02E1 cType 5 Type 09 colours 6D -55F A5F761 (07) 40 40 Size 0337 OTHER Greyscale Type 07 -560 A5FA98 (07) 40 40 Size 024E OTHER Greyscale Type 07 -561 A5FCE6 (07) 20 40 Size 01F0 OTHER Greyscale Type 07 -562 A5FED6 (07) 40 20 Size 0333 OTHER Greyscale Type 07 -563 A60209 (07) 80 20 Size 00D2 OTHER Greyscale Type 07 -564 A602DB (46) 20 20 Size 04BB cType 5 Type 09 colours A4 -565 A60796 (46) 20 20 Size 0028 cType 3 Type 0A colours 8 [0036 Crate Warning Stripes- Control] -566 A607BE (46) 20 20 Size 0026 cType 3 Type 0A colours 7 [-Silo] -567 A607E4 (46) 20 20 Size 033A cType 5 Type 09 colours A2 [- Bunker1,Surfaces] -568 A60B1E (46) 20 20 Size 0279 cType 5 Type 09 colours 1C [0117,0118,0119,0130,0131 Bottom Axle] -569 A60D97 (04) 40 30 Size 0602 OTHER Greyscale Type 04 -56A A61399 (46) 20 20 Size 0313 cType 5 Type 09 colours 4B [0090 Yellow-Bordered Elevator Door] -56B A616AC (46) 20 20 Size 0313 cType 5 Type 09 colours 4B [0092,0096,0097 Blue Steel Door] -56C A619BF (46) 20 20 Size 0545 cType 5 Type 09 colours E1 [002C Jerry Can Cap] -56D A61F04 (46) 20 20 Size 03FF cType 5 Type 09 colours 86 -56E A62303 (46) 20 20 Size 0462 cType 5 Type 09 colours A1 [0120 Tank Middle of Drive] -56F A62765 (46) 20 20 Size 03FD cType 5 Type 09 colours 6F -570 A62B62 (46) 20 20 Size 018F cType 5 Type 0A colours 9 -571 A62CF1 (46) 20 20 Size 024E cType 5 Type 09 colours 41 [0120 Tank Turret] -572 A62F3F (40) 20 20 Size 03AC cType 5 Type 09 colours 9D -573 A632EB (46) 20 20 Size 058F cType 5 Type 09 colours EB -574 A6387A (46) 20 20 Size 055E cType 5 Type 09 colours E2 -575 A63DD8 (46) 20 20 Size 0417 cType 5 Type 09 colours 88 -576 A641EF (46) 20 20 Size 04C6 cType 5 Type 09 colours A6 -577 A646B5 (46) 20 20 Size 0585 cType 5 Type 09 colours E5 -578 A64C3A (46) 20 20 Size 0466 cType 5 Type 09 colours 97 [0120 Tank Treds] -579 A650A0 (C6) 25 25 Size 094F cType 5 Type 09 colours FF [0106 Audio Tape - Upper Left Corner] -57A A659EF (C6) 25 25 Size 08F0 cType 5 Type 09 colours FF [0106 Audio Tape - Upper Mid-Left] -57B A662DF (C6) 25 25 Size 0901 cType 5 Type 09 colours FF [0106 Audio Tape - Upper Mid-Right -57C A66BE0 (C6) 24 25 Size 092D cType 1 Type 09 colours FF [0106 Audio Tape - Upper Right Corner -57D A6750D (C6) 25 24 Size 0940 cType 1 Type 09 colours FF [0106 Audio Tape - Lower Left Corner] -57E A67E4D (C6) 25 24 Size 0909 cType 5 Type 09 colours FF [0106 Audio Tape - Lower Mid-Left] -57F A68756 (C6) 25 24 Size 0940 cType 1 Type 09 colours FF [0106 Audio Tape - Lower Mid-Right -580 A69096 (C6) 24 24 Size 08F1 cType 1 Type 09 colours FF [0106 Audio Tape - Lower Right Corner -581 A69987 (07) 40 40 Size 01C4 OTHER Greyscale Type 07 -582 A69B4B (07) 40 40 Size 0173 OTHER Greyscale Type 07 -583 A69CBE (07) 40 40 Size 0155 OTHER Greyscale Type 07 -584 A69E13 (07) 40 40 Size 0311 OTHER Greyscale Type 07 -585 A6A124 (46) 20 20 Size 0292 cType 5 Type 09 colours 5D [(Tazer)] -586 A6A3B6 (07) 40 40 Size 022B OTHER Greyscale Type 07 -587 A6A5E1 (07) 40 40 Size 01FD OTHER Greyscale Type 07 -588 A6A7DE (40) 17 18 Size 01CD cType 5 Type 0B colours 2C [00EB Bomb Defuser -589 A6A9AB (07) 40 40 Size 0203 OTHER Greyscale Type 07 -58A A6ABAE (46) 20 20 Size 0282 cType 5 Type 09 colours 29 [0132,0133,0149,014A,014B Door Outer Face,Desk Shadows] -58B A6AE30 (46) 20 20 Size 024E cType 5 Type 09 colours 18 -58C A6B07E (07) 40 40 Size 01DF OTHER Greyscale Type 07 -58D A6B25D (07) 40 20 Size 0214 OTHER Greyscale Type 07 -58E A6B471 (46) 20 20 Size 0417 cType 5 Type 09 colours EF [004A Torpedo Rack Hooks] -58F A6B888 (46) 20 20 Size 01F4 cType 5 Type 09 colours 7C [004A Torpedos] -590 A6BA7C (07) 40 20 Size 05E1 OTHER Greyscale Type 07 -591 A6C05D (46) 20 20 Size 005D cType 3 Type 09 colours 14 [00B5 Top & Bottom Rails] -592 A6C0BA (46) 20 20 Size 0556 cType 5 Type 09 colours CE [00A7,00A8,012B Green Door] -593 A6C610 (46) 20 20 Size 0161 cType 5 Type 0A colours 7 -594 A6C771 (46) 20 20 Size 0159 cType 5 Type 0A colours 6 -595 A6C8CA (46) 20 20 Size 04BF cType 5 Type 0B colours 8A -596 A6CD89 (46) 20 20 Size 0283 cType 5 Type 09 colours 34 -597 A6D00C (46) 20 20 Size 032E cType 5 Type 09 colours 4D -598 A6D33A (46) 20 20 Size 0134 cType 5 Type 09 colours 26 -599 A6D46E (46) 20 20 Size 024E cType 5 Type 09 colours 17 -59A A6D6BC (46) 20 20 Size 0116 cType 5 Type 09 colours 1A -59B A6D7D2 (46) 20 20 Size 00F0 cType 5 Type 09 colours 34 -59C A6D8C2 (46) 20 20 Size 0112 cType 5 Type 09 colours 36 -59D A6D9D4 (46) 20 20 Size 03D3 cType 5 Type 09 colours A6 -59E A6DDA7 (46) 20 20 Size 03D3 cType 5 Type 09 colours A6 -59F A6E17A (06) 20 20 Size 03E7 OTHER Greyscale Type 06 -5A0 A6E561 (02) 50 4C Size 044A OTHER Greyscale Type 02 -5A1 A6E9AB (46) 20 20 Size 011B cType 5 Type 09 colours 23 [0117 Military Truck Mid Frame] -5A2 A6EAC6 (46) 20 20 Size 012C cType 5 Type 09 colours 16 [0117 Military Truck Canopy Awning] -5A3 A6EBF2 (46) 20 20 Size 0175 cType 5 Type 0A colours F [0117 Military Truck Undercarriage] -5A4 A6ED67 (46) 20 20 Size 027E cType 5 Type 09 colours 29 [0117,0119 Military Truck Armrests(hidden),Arctic Mudflap] -5A5 A6EFE5 (46) 20 20 Size 01C8 cType 5 Type 09 colours 2E [0117 Military Truck Bed] -5A6 A6F1AD (46) 20 20 Size 02E1 cType 5 Type 09 colours 7E [0117 Military Truck Fuel Tanks] -5A7 A6F48E (46) 20 20 Size 01FF cType 5 Type 09 colours 17 [0117,0118,0119,011E,0121,0131 Tire Tred] -5A8 A6F68D (07) 40 40 Size 02F8 OTHER Greyscale Type 07 -5A9 A6F985 (07) 40 40 Size 029B OTHER Greyscale Type 07 -5AA A6FC20 (07) 40 40 Size 0278 OTHER Greyscale Type 07 -5AB A6FE98 (07) 40 40 Size 029F OTHER Greyscale Type 07 -5AC A70137 (07) 40 40 Size 0251 OTHER Greyscale Type 07 -5AD A70388 (07) 40 40 Size 028E OTHER Greyscale Type 07 -5AE A70616 (07) 40 40 Size 026E OTHER Greyscale Type 07 -5AF A70884 (47) 40 10 Size 02D2 cType 5 Type 0B colours 58 [0114 Nintendo Logo -5B0 A70B56 (07) 20 40 Size 0391 OTHER Greyscale Type 07 -5B1 A70EE7 (46) 20 20 Size 0432 cType 3 Type 09 colours EA [011A Nat. Helicopter Lights] -5B2 A71319 (46) 20 20 Size 013B cType 5 Type 09 colours 44 [011A Nat. Helicopter Rotar] -5B3 A71454 (46) 20 20 Size 027A cType 5 Type 09 colours 4A [011A Nat. Helicopter Front Glass] -5B4 A716CE (46) 20 20 Size 026F cType 5 Type 09 colours 25 -5B5 A7193D (46) 20 20 Size 0505 cType 5 Type 09 colours BF [Vent Cover - Bunkers] -5B6 A71E42 (46) 20 20 Size 04DE cType 5 Type 09 colours DF -5B7 A72320 (07) 40 40 Size 04B2 OTHER Greyscale Type 07 -5B8 A727D2 (07) 40 40 Size 033B OTHER Greyscale Type 07 -5B9 A72B0D (07) 40 40 Size 02D7 OTHER Greyscale Type 07 -5BA A72DE4 (46) 20 20 Size 01B6 cType 5 Type 09 colours 36 -5BB A72F9A (46) 20 20 Size 01F2 cType 5 Type 09 colours 22 -5BC A7318C (07) 40 20 Size 06A3 OTHER Greyscale Type 07 -5BD A7382F (07) 40 20 Size 06A3 OTHER Greyscale Type 07 -5BE A73ED2 (46) 20 20 Size 027F cType 5 Type 09 colours 36 -5BF A74151 (47) 08 80 Size 025B cType 5 Type 09 colours 6E [- Archives -5C0 A743AC (47) 10 40 Size 01A4 cType 5 Type 09 colours 5B [- Archives] -5C1 A74550 (46) 20 20 Size 0582 cType 5 Type 09 colours D7 [0140-0144 St.Pete Building Dark Foundation- Archives] -5C2 A74AD2 (46) 20 20 Size 021D cType 5 Type 09 colours 19 [0129,012A Bottom of Shutter- Archives] -5C3 A74CEF (46) 20 20 Size 051D cType 5 Type 09 colours FF [Flecked Paint - Archives,Streets] -5C4 A7520C (46) 20 20 Size 04F8 cType 1 Type 09 colours FF [Flecked Paint - Archives,Streets] -5C5 A75704 (46) 20 20 Size 0487 cType 5 Type 09 colours CF [Flecked Paint - Archives,Streets] -5C6 A75B8B (46) 20 20 Size 0368 cType 5 Type 09 colours 9F [Flecked Paint - Archives] -5C7 A75EF3 (46) 20 20 Size 037C cType 5 Type 09 colours A7 [Flecked Paint - Archives] -5C8 A7626F (07) 40 20 Size 078A OTHER Greyscale Type 07 -5C9 A769F9 (47) 40 01 Size 0049 cType 3 Type 0B colours 14 -5CA A76A42 (47) 40 01 Size 004B cType 3 Type 0B colours 15 [- Bunker1,Surfaces -5CB A76A8D (47) 40 01 Size 0033 cType 3 Type 0A colours B -5CC A76AC0 (46) 20 20 Size 03BE cType 5 Type 09 colours 59 [0140-0144 St.Pete Building Foundation] -5CD A76E7E (46) 20 20 Size 00BE cType 5 Type 0A colours 5 -5CE A76F3C (46) 20 20 Size 01A8 cType 5 Type 09 colours 13 -5CF A770E4 (46) 26 26 Size 06CE cType 5 Type 09 colours FF [WARNING! Electical Hazard] -5D0 A777B2 (46) 26 26 Size 0674 cType 5 Type 09 colours FF [No Smoking- Facility] -5D1 A77E26 (46) 26 26 Size 0706 cType 5 Type 09 colours FF [No Matches] -5D2 A7852C (46) 26 26 Size 06C4 cType 5 Type 09 colours FF [No Walking] -5D3 A78BF0 (46) 26 26 Size 06DE cType 5 Type 09 colours FF [Gas Masks Available Here] -5D4 A792CE (46) 26 26 Size 0700 cType 5 Type 09 colours FF [Wash Station Here] -5D5 A799CE (46) 26 26 Size 06BC cType 5 Type 09 colours FF [WARNING! Caustic- Facility] -5D6 A7A08A (46) 26 26 Size 06E5 cType 5 Type 09 colours FF [WARNING! Biohazard] -5D7 A7A76F (40) 26 26 Size 066B cType 5 Type 09 colours FF [WARNING! Inflammable] -5D8 A7ADDA (46) 26 26 Size 073B cType 5 Type 09 colours FF [Hallway Fire Escape Directions- Facility] -5D9 A7B515 (46) 26 26 Size 03E6 cType 5 Type 09 colours C1 [NO BONDS ALLOWED! - Facility -5DA A7B8FB (46) 20 20 Size 0404 cType 5 Type 09 colours B7 [-Silo] -5DB A7BCFF (46) 20 20 Size 039D cType 1 Type 09 colours 5F -5DC A7C09C (46) 20 20 Size 02EA cType 5 Type 09 colours 33 [- Surfaces] -5DD A7C386 (07) 40 20 Size 0574 OTHER Greyscale Type 07 -5DE A7C8FA (46) 20 20 Size 010E cType 3 Type 09 colours 41 [29 Watch Display Cardinals(Watch Laser/Detonator)] -5DF A7CA08 (46) 20 20 Size 0210 cType 5 Type 09 colours 55 [29 Watch Display Hourmarks(Watch Laser/Detonator)] -5E0 A7CC18 (07) 40 20 Size 015F OTHER Greyscale Type 07 -5E1 A7CD77 (07) 40 20 Size 0311 OTHER Greyscale Type 07 -5E2 A7D088 (07) 40 20 Size 03AF OTHER Greyscale Type 07 -5E3 A7D437 (07) 40 20 Size 04F7 OTHER Greyscale Type 07 -5E4 A7D92E (00) 40 40 Size 028A OTHER Greyscale Type 00 [water!] -5E5 A7DBB8 (46) 20 20 Size 0234 cType 5 Type 09 colours 17 [- Bunker1,Egypt,Surfaces] -5E6 A7DDEC (46) 20 20 Size 0292 cType 5 Type 09 colours 21 [- Bunker1] -5E7 A7E07E (40) 20 20 Size 0285 cType 5 Type 09 colours 24 [Complex] -5E8 A7E303 (46) 20 20 Size 0549 cType 5 Type 09 colours BE [water!] -5E9 A7E84C (07) 40 40 Size 01F6 OTHER Greyscale Type 07 -5EA A7EA42 (41) 01 01 Size 000C cType 3 Type 0A colours 0 [000C-000E,0010,0011,0018-0025,0037-0038,0041-0045,004B,0079-0086,00B8-00B9,00BB-00BD,00BF-0 -5EB A7EA4E (46) 20 20 Size 0168 cType 5 Type 09 colours 4A [Window Frame - Archives] -5EC A7EBB6 (46) 20 30 Size 0190 cType 5 Type 09 colours 54 [0140-0144 Window Frame - Archives,Streets] -5ED A7ED46 (07) 20 40 Size 0250 OTHER Greyscale Type 07 -5EE A7EF96 (46) 20 30 Size 057A cType 5 Type 09 colours FF [0140-0144 Background Window - Archives,Streets] -5EF A7F510 (46) 20 30 Size 042C cType 5 Type 09 colours 92 [0140-0144 Background Window - Archives,Streets] -5F0 A7F93C (07) 20 40 Size 04FF OTHER Greyscale Type 07 -5F1 A7FE3B (46) 20 20 Size 0323 cType 5 Type 09 colours 86 -5F2 A8015E (47) 10 40 Size 01DF cType 5 Type 09 colours 51 [- Bunker1] -5F3 A8033D (46) 20 20 Size 0503 cType 5 Type 09 colours C3 -5F4 A80840 (46) 20 20 Size 01A5 cType 5 Type 09 colours 18 [- Archives] -5F5 A809E5 (46) 20 20 Size 02EC cType 5 Type 09 colours 4E -5F6 A80CD1 (46) 20 20 Size 0485 cType 5 Type 09 colours 8E -5F7 A81156 (07) 40 20 Size 0728 OTHER Greyscale Type 07 -5F8 A8187E (46) 20 20 Size 0223 cType 5 Type 09 colours 27 [0048,0055 Stool & Table Legs] -5F9 A81AA1 (46) 20 20 Size 03CB cType 5 Type 09 colours 6B [- Streets] -5FA A81E6C (46) 20 20 Size 015A cType 5 Type 0A colours D [0055,0077,00A1-00A3 Table Top,Door Frame] -5FB A81FC6 (46) 10 20 Size 00E7 cType 5 Type 0A colours D -5FC A820AD (46) 20 20 Size 0176 cType 5 Type 09 colours 1B [00A1,0141,0142,0143 Door Front Panel] -5FD A82223 (46) 20 20 Size 01B4 cType 5 Type 09 colours 29 [0141,0142,0143 St.Pete Building Door] -5FE A823D7 (46) 20 20 Size 02C3 cType 5 Type 09 colours 33 [002F Letter Tray- Surfaces] -5FF A8269A (46) 20 20 Size 02A8 cType 5 Type 09 colours 33 [00A6,00A7 Window Frame- Surfaces] -600 A82942 (46) 20 20 Size 023A cType 5 Type 09 colours 2F [00A6,0122,0123 Door,Speedboat & Plane Floor,Dash- Surfaces] -601 A82B7C (46) 20 20 Size 0246 cType 5 Type 09 colours 2D -602 A82DC2 (46) 20 20 Size 0240 cType 5 Type 09 colours 24 -603 A83002 (46) 20 20 Size 027C cType 5 Type 09 colours 30 -604 A8327E (46) 20 20 Size 02EA cType 5 Type 09 colours 6A -605 A83568 (06) 80 18 Size 04B1 OTHER Greyscale Type 06 -606 A83A19 (87) 90 20 Size 0474 OTHER Greyscale Type 87 -607 A83E8D (87) 90 20 Size 0485 OTHER Greyscale Type 87 -608 A84312 (87) 80 17 Size 07D6 OTHER Greyscale Type 87 -609 A84AE8 (87) 80 17 Size 0881 OTHER Greyscale Type 87 -60A A85369 (07) 40 20 Size 042A OTHER Greyscale Type 07 -60B A85793 (46) 20 20 Size 05BC cType 3 Type 09 colours FF -60C A85D4F (07) 40 20 Size 072C OTHER Greyscale Type 07 -60D A8647B (40) 20 40 Size 0891 cType 5 Type 09 colours FF [32,24 B,Helicopter Pilot Head - Front] -60E A86D0C (40) 20 40 Size 075C cType 5 Type 09 colours CE [32,24 B,Helicopter Pilot Head - Back] -60F A87468 (40) 20 40 Size 08DC cType 5 Type 09 colours FF [32,24 B,Helicopter Pilot Head - Side] -610 A87D44 (40) 20 40 Size 094A cType 5 Type 09 colours FF [2F Duncan - Left] -611 A8868E (40) 20 40 Size 0924 cType 5 Type 09 colours FF [2F Duncan - Right] -612 A88FB2 (40) 20 40 Size 0970 cType 5 Type 09 colours FF [2F Duncan - Front] -613 A89922 (46) 20 20 Size 024E cType 5 Type 09 colours 5F [17 Blue Suit Collar] -614 A89B70 (40) 20 40 Size 09A4 cType 5 Type 09 colours FF -615 A8A514 (40) 20 20 Size 0337 cType 5 Type 09 colours 4E -616 A8A84B (40) 20 20 Size 0608 cType 5 Type 09 colours FF -617 A8AE53 (40) 20 20 Size 060C cType 5 Type 09 colours FF -618 A8B45F (40) 20 40 Size 09E7 cType 5 Type 09 colours FF [2B Alan - Front] -619 A8BE46 (40) 20 40 Size 09DC cType 5 Type 09 colours FF [2B Alan - Right] -61A A8C822 (40) 20 40 Size 09C2 cType 5 Type 09 colours FF [2B Alan - Left] -61B A8D1E4 (46) 30 20 Size 01F8 cType 5 Type 09 colours 12 [11 Janus Marine Left Arm] -61C A8D3DC (46) 30 20 Size 0251 cType 5 Type 09 colours 12 [11 Janus Marine Right Arm] -61D A8D62D (46) 20 30 Size 0232 cType 5 Type 09 colours 16 [11 Janus Marine Legs] -61E A8D85F (46) 20 20 Size 01FB cType 5 Type 09 colours 25 [11 Janus Marine Waist] -61F A8DA5A (40) 20 40 Size 05C0 cType 5 Type 09 colours 90 [3C Terrorist - Front] -620 A8E01A (40) 20 40 Size 0407 cType 5 Type 09 colours 28 [3C Terrorist - Back] -621 A8E421 (40) 20 40 Size 09E9 cType 5 Type 09 colours FF [0C Baron Samedi Head - Front] -622 A8EE0A (40) 20 40 Size 08A6 cType 5 Type 09 colours FF [0C Baron Samedi Head - Right] -623 A8F6B0 (40) 20 40 Size 0968 cType 5 Type 09 colours FF [0C Baron Samedi Head - Left] -624 A90018 (46) 20 30 Size 05C5 cType 5 Type 09 colours D2 [0C Baron Samedi Toes] -625 A905DD (46) 20 20 Size 041A cType 5 Type 09 colours B9 [0C Baron Samedi Top of Feet] -626 A909F7 (46) 30 20 Size 0386 cType 5 Type 09 colours 64 [0C Baron Samedi Feet Outer Soles] -627 A90D7D (46) 30 20 Size 03DE cType 5 Type 09 colours 67 [0C Baron Samedi Feet Inner Soles] -628 A9115B (46) 20 20 Size 0272 cType 5 Type 09 colours 3F [0C Baron Samedi Hands] -629 A913CD (46) 20 20 Size 0395 cType 5 Type 09 colours 6A [0C Baron Samedi Hands] -62A A91762 (46) 20 20 Size 0350 cType 5 Type 09 colours 5C [0C Baron Samedi Hands] -62B A91AB2 (46) 20 20 Size 02EC cType 5 Type 09 colours 50 [0C Baron Samedi Hands] -62C A91D9E (46) 20 20 Size 0324 cType 5 Type 09 colours 55 [0C Baron Samedi Hands] -62D A920C2 (46) 20 20 Size 02C6 cType 5 Type 09 colours 50 [0C Baron Samedi Back of Feet] -62E A92388 (46) 20 30 Size 071E cType 5 Type 09 colours FF [0C Baron Samedi Butt] -62F A92AA6 (46) 20 30 Size 070F cType 5 Type 09 colours FF [0C Baron Samedi Crotch] -630 A931B5 (46) 20 30 Size 0359 cType 5 Type 09 colours 42 [0C Baron Samedi Right Knee] -631 A9350E (46) 20 30 Size 03C9 cType 5 Type 09 colours 4E [0C Baron Samedi Back of Right Leg] -632 A938D7 (46) 20 30 Size 03A0 cType 5 Type 09 colours 4A [0C Baron Samedi Back of Left Leg] -633 A93C77 (46) 20 30 Size 036B cType 5 Type 09 colours 47 [0C Baron Samedi Left Knee] -634 A93FE2 (46) 20 20 Size 00B7 cType 5 Type 0A colours E [0C Baron Samedi Neck] -635 A94099 (46) 20 30 Size 04FB cType 5 Type 09 colours 6B [0C Baron Samedi Bottom of Foot] -636 A94594 (46) 20 30 Size 053F cType 5 Type 09 colours 67 [0C Baron Samedi Tails] -637 A94AD3 (46) 20 30 Size 04D1 cType 5 Type 09 colours 54 [0C Baron Samedi Back, Sleeves, Hat] -638 A94FA4 (46) 20 30 Size 070D cType 5 Type 09 colours EC [0C Baron Samedi Torso] -639 A956B1 (46) 20 30 Size 02DC cType 5 Type 09 colours 24 [11,0073,0074 Janus Marine Back,BA Collar,Body Vest] -63A A9598D (46) 20 30 Size 03A6 cType 5 Type 09 colours 44 [11 Janus Marine Front] -63B A95D33 (46) 20 30 Size 019B cType 5 Type 09 colours 13 [05 Black Tux Forearm] -63C A95ECE (46) 30 20 Size 03CC cType 5 Type 09 colours 99 [18 Jungle Bond Left Arm] -63D A9629A (44) 08 08 Size 0028 cType 3 Type 0A colours 2 [29 Tux Sleeve(Watch Laser/Detonator)] -63E A962C2 (44) 08 08 Size 0035 cType 3 Type 0A colours 5 [29 Boiler Suit Sleeve(Watch Laser/Detonator)] -63F A962F7 (46) 20 30 Size 0237 cType 5 Type 09 colours 1C [09,16 Boilersuit Sleeves] -640 A9652E (46) 20 30 Size 03A5 cType 5 Type 09 colours 49 [09,16 Boilersuit Back] -641 A968D3 (46) 20 30 Size 038E cType 5 Type 09 colours 3A [09,16 Boilersuit Front] -642 A96C61 (46) 20 30 Size 02A5 cType 5 Type 09 colours 20 [09,16 Boilersuit Pants] -643 A96F06 (46) 30 20 Size 028F cType 5 Type 09 colours 2E [09,16 Boilersuit Boot] -644 A97195 (41) 01 01 Size 000C cType 3 Type 0A colours 0 -645 A971A1 (46) 20 20 Size 01DB cType 5 Type 09 colours 35 [29 Left Hand Cuff(Watch Laser/Detonator)] -646 A9737C (07) 40 20 Size 075B OTHER Greyscale Type 07 -647 A97AD7 (40) 40 20 Size 0278 cType 5 Type 09 colours 4E [4E Bond's Hair] -648 A97D4F (41) 01 01 Size 000C cType 3 Type 0A colours 0 [00C5 RC-P90(PP7s,Phantom,Watch Laser/Detonator)] -649 A97D5B (46) 20 20 Size 03D7 cType 5 Type 09 colours 87 [Male Hand - Knuckles] -64A A98132 (40) 20 20 Size 0155 cType 5 Type 09 colours 12 [0E Mayday Hand - Knuckles] -64B A98287 (46) 20 20 Size 03FB cType 5 Type 09 colours 71 [Hand - Knuckles] -64C A98682 (46) 20 20 Size 03AD cType 5 Type 09 colours 60 [Hand - Top] -64D A98A2F (46) 20 20 Size 059C cType 5 Type 09 colours EE [Male Hand - Top] -64E A98FCB (40) 20 20 Size 0131 cType 5 Type 0A colours E [0E Mayday Hand - Top] -64F A990FC (46) 20 20 Size 03B9 cType 5 Type 09 colours 65 [Hand - Bottom] -650 A994B5 (46) 20 20 Size 04F4 cType 5 Type 09 colours CA [Male Hand - Bottom] -651 A999A9 (40) 20 20 Size 014F cType 5 Type 09 colours 15 [0E Mayday Hand - Bottom] -652 A99AF8 (46) 20 20 Size 03B5 cType 5 Type 09 colours 67 [Hand - Thumb] -653 A99EAD (46) 20 20 Size 0496 cType 5 Type 09 colours B2 [Male Hand - Thumb] -654 A9A343 (40) 20 20 Size 016E cType 3 Type 09 colours 1E [0E Mayday Hand - Thumb] -655 A9A4B1 (46) 20 20 Size 03CB cType 5 Type 09 colours 6A [Hand - Palm] -656 A9A87C (46) 20 20 Size 04E7 cType 5 Type 09 colours BF [Male Hand - Palm] -657 A9AD63 (40) 20 20 Size 01B2 cType 5 Type 09 colours 29 [0E Mayday Hand - Palm] -658 A9AF15 (40) 20 40 Size 0860 cType 5 Type 09 colours FF [4E Brosnan Tuxedo Head - Front] -659 A9B775 (40) 20 40 Size 087A cType 5 Type 09 colours FF [4E Brosnan Tuxedo Head - Right] -65A A9BFEF (40) 20 40 Size 06FC cType 5 Type 09 colours FF [4E Brosnan Tuxedo Head - Left] -65B A9C6EB (46) 20 30 Size 014F cType 5 Type 0A colours 3 [05 Black Tux Back and Upper Arms] -65C A9C83A (46) 20 20 Size 02FA cType 5 Type 09 colours 91 [05 Brosnan Tuxedo Collar] -65D A9CB34 (46) 20 20 Size 02FF cType 5 Type 09 colours 6F -65E A9CE33 (46) 20 20 Size 0134 cType 5 Type 09 colours 3C -65F A9CF67 (46) 30 20 Size 02D4 cType 5 Type 09 colours 35 [08,0D,10,13,25 Evildoer Boot] -660 A9D23B (46) 20 30 Size 04FE cType 5 Type 09 colours 66 [15,19,29 Snowsuit Sleeves(Watch Laser/Detonator)] -661 A9D739 (46) 20 30 Size 0534 cType 5 Type 09 colours 64 [15,19 Snowsuit Pants] -662 A9DC6D (46) 20 20 Size 0383 cType 5 Type 09 colours 65 [19 Snowsuit Bond Boots] -663 A9DFF0 (46) 20 20 Size 036A cType 5 Type 09 colours 47 [19 Snowsuit Bond Back] -664 A9E35A (46) 20 20 Size 02F1 cType 5 Type 09 colours 42 [4D Snowsuit Bond Head - Cap] -665 A9E64B (46) 20 20 Size 036C cType 5 Type 09 colours 42 [19 Snowsuit Bond Front] -666 A9E9B7 (46) 20 20 Size 013A cType 5 Type 0A colours 8 [29 Left Hand - Part of Sleeve] -667 A9EAF1 (44) 08 08 Size 0037 cType 3 Type 0A colours 6 [29 Blue Suit Sleeve(Watch Laser/Detonator)] -668 A9EB28 (46) 20 30 Size 0399 cType 5 Type 09 colours 52 [17 Blue Suit Sleeve] -669 A9EEC1 (46) 20 30 Size 02E9 cType 5 Type 09 colours 19 [17 Blue Suit Back] -66A A9F1AA (46) 20 30 Size 041F cType 5 Type 09 colours 62 [17 Blue Suit Torso] -66B A9F5C9 (46) 20 30 Size 032C cType 5 Type 09 colours 24 [17 Blue Suit Slacks] -66C A9F8F5 (46) 20 30 Size 05BE cType 5 Type 09 colours BC [18,29 Jungle Bond Sleeve(Watch Laser/Detonator)] -66D A9FEB3 (46) 20 20 Size 02CD cType 5 Type 09 colours 61 [18 Jungle Bond Butt] -66E AA0180 (46) 20 20 Size 030D cType 5 Type 09 colours 6E [18 Jungle Bond Crotch] -66F AA048D (46) 20 30 Size 05CE cType 5 Type 09 colours 9B [18 Jungle Bond Back] -670 AA0A5B (46) 20 30 Size 0728 cType 5 Type 09 colours FF [18 Jungle Bond Front] -671 AA1183 (46) 20 30 Size 047C cType 5 Type 09 colours 86 [18 Jungle Bond Pants] -672 AA15FF (46) 30 20 Size 05F2 cType 5 Type 09 colours A6 [18 Jungle Bond Shoes] -673 AA1BF1 (40) 08 08 Size 0040 cType 3 Type 0A colours C [29 Boiler Suit Sleeve Cuff] -674 AA1C31 (07) 40 40 Size 06BC OTHER Greyscale Type 07 -675 AA22ED (40) 20 40 Size 09AA cType 3 Type 09 colours FF [06 Boris Head - Front] -676 AA2C97 (46) 30 20 Size 07FA cType 5 Type 09 colours FF [06 Boris Sleeve] -677 AA3491 (40) 20 20 Size 03FE cType 5 Type 09 colours 78 [06 Boris - Hair] -678 AA388F (46) 20 30 Size 04CE cType 5 Type 09 colours C6 [06 Boris Forearm] -679 AA3D5D (46) 30 20 Size 02BC cType 5 Type 09 colours 4A [06 Boris Collar] -67A AA4019 (46) 30 20 Size 05D0 cType 5 Type 09 colours FF [06 Boris Back Collar] -67B AA45E9 (46) 20 30 Size 056D cType 5 Type 09 colours 9E [06 Boris Shin] -67C AA4B56 (46) 20 30 Size 0791 cType 5 Type 09 colours FF [06 Boris Torso] -67D AA52E7 (40) 20 40 Size 0951 cType 5 Type 09 colours FF [06 Boris Head - Right] -67E AA5C38 (46) 20 30 Size 078D cType 5 Type 09 colours FF [06 Boris Back] -67F AA63C5 (46) 20 30 Size 024E cType 5 Type 09 colours 1B [06 Boris Back of Shorts] -680 AA6613 (46) 20 30 Size 030D cType 5 Type 09 colours 2F [06 Boris Front of Shorts] -681 AA6920 (40) 20 40 Size 0936 cType 5 Type 09 colours FF [06 Boris Head - Left] -682 AA7256 (07) 40 20 Size 04D1 OTHER Greyscale Type 07 -683 AA7727 (07) 20 40 Size 054E OTHER Greyscale Type 07 -684 AA7C75 (07) 40 20 Size 0176 OTHER Greyscale Type 07 -685 AA7DEB (07) 20 40 Size 05A1 OTHER Greyscale Type 07 -686 AA838C (07) 20 40 Size 0586 OTHER Greyscale Type 07 -687 AA8912 (41) 01 01 Size 000C cType 3 Type 0A colours 0 [(RC-P90] -688 AA891E (46) 20 30 Size 0462 cType 5 Type 09 colours 34 [26 Arctic Guard Sleeves] -689 AA8D80 (46) 20 30 Size 05F7 cType 5 Type 09 colours 90 [00 Jungle Guard Sleeves] -68A AA9377 (46) 20 30 Size 0734 cType 5 Type 09 colours E9 [00 Jungle Guard Back] -68B AA9AAB (46) 20 30 Size 073A cType 5 Type 09 colours FF [26 Arctic Guard Front] -68C AAA1E5 (46) 20 30 Size 06C7 cType 5 Type 09 colours E5 [26 Arctic Guard Back] -68D AAA8AC (46) 20 30 Size 0799 cType 5 Type 09 colours FD [00 Jungle Guard Front] -68E AAB045 (46) 20 30 Size 0465 cType 5 Type 09 colours 3B [26 Arctic Guard Right Pantleg] -68F AAB4AA (46) 20 30 Size 065E cType 5 Type 09 colours A3 [00,4F Jungle Camoflauge Pants] -690 AABB08 (46) 20 30 Size 049B cType 5 Type 09 colours 42 [26 Arctic Guard Left Pantleg and Fringe] -691 AABFA3 (46) 20 30 Size 0680 cType 5 Type 09 colours AF [00 Jungle Guard Left Pantleg] -692 AAC623 (40) 20 40 Size 098C cType 5 Type 09 colours FF [30 Shawn - Front] -693 AACFAF (40) 20 40 Size 0920 cType 5 Type 09 colours FF [30 Shawn - Right] -694 AAD8CF (40) 20 40 Size 091D cType 5 Type 09 colours FF [30 Shawn - Left] -695 AAE1EC (40) 20 40 Size 09BE cType 3 Type 09 colours FF [36 Chris - Front] -696 AAEBAA (40) 20 40 Size 066F cType 5 Type 09 colours FF [36 Chris - Right] -697 AAF219 (40) 20 40 Size 0611 cType 5 Type 09 colours FF [36 Chris - Left] -698 AAF82A (46) 20 30 Size 05B3 cType 5 Type 09 colours A6 [12 Russian Commandant Back] -699 AAFDDD (46) 20 30 Size 0147 cType 5 Type 0A colours 9 [12 Russian Commandant Underarm, Above Boots] -69A AAFF24 (46) 20 30 Size 069A cType 5 Type 09 colours F5 [12 Russian Commandant Front] -69B AB05BE (46) 20 20 Size 0535 cType 5 Type 09 colours F1 [12 Russian Commandant Sleeve Insignia] -69C AB0AF3 (46) 20 30 Size 040A cType 5 Type 09 colours 4E [12 Russian Commandant Slacks and Arms] -69D AB0EFD (46) 20 30 Size 031C cType 5 Type 09 colours 8F [12 Russian Commandant Collar] -69E AB1219 (46) 20 30 Size 02D0 cType 5 Type 09 colours 85 [12 Russian Commandant Back Collar] -69F AB14E9 (46) 20 30 Size 02BF cType 5 Type 09 colours 3A [29 Connery White Tux Cuff(Watch Laser/Detonator)] -6A0 AB17A8 (40) 20 40 Size 0998 cType 5 Type 09 colours FF [Connery Face Front - UNUSED] -6A1 AB2140 (46) 20 30 Size 01C1 cType 5 Type 0A colours D [Connery Tux Pants - UNUSED] -6A2 AB2301 (40) 20 20 Size 02B4 cType 5 Type 09 colours 60 [Connery Necktie - UNUSED] -6A3 AB25B5 (46) 20 30 Size 031C cType 5 Type 09 colours 23 [Connery Tux Back - UNUSED] -6A4 AB28D1 (46) 20 30 Size 0388 cType 5 Type 09 colours 3B [Connery Tux Front - UNUSED] -6A5 AB2C59 (40) 20 40 Size 03EE cType 5 Type 09 colours 5B [Connery Back Hair - UNUSED] -6A6 AB3047 (40) 20 40 Size 08DB cType 5 Type 09 colours FF [Connery Left - UNUSED] -6A7 AB3922 (40) 20 40 Size 0859 cType 5 Type 09 colours FF [Connery Right - UNUSED] -6A8 AB417B (46) 30 20 Size 036A cType 5 Type 09 colours 60 [1A,1B,1C Female Shoe] -6A9 AB44E5 (40) 20 40 Size 0957 cType 5 Type 09 colours FF [Dalton Front - UNUSED] -6AA AB4E3C (40) 20 40 Size 099F cType 5 Type 09 colours FF [Dalton Left - UNUSED] -6AB AB57DB (40) 20 40 Size 09D0 cType 5 Type 09 colours FF [Dalton Right - UNUSED] -6AC AB61AB (40) 20 40 Size 0696 cType 5 Type 09 colours 89 [Dalton Back Hair - UNUSED] -6AD AB6841 (46) 20 20 Size 01BE cType 5 Type 09 colours 40 -6AE AB69FF (46) 20 30 Size 02A1 cType 5 Type 09 colours 30 [Dalton Tux Front - UNUSED] -6AF AB6CA0 (07) 20 40 Size 0558 OTHER Greyscale Type 07 -6B0 AB71F8 (46) 20 30 Size 01BB cType 5 Type 0A colours 8 [23 Scientist Slacks] -6B1 AB73B3 (46) 20 20 Size 02B7 cType 5 Type 09 colours 36 [1D,1E,22 Jeans Front Pockets] -6B2 AB766A (46) 20 20 Size 0283 cType 5 Type 09 colours 2E [1D,1E,22 Jeans Back Pockets] -6B3 AB78ED (46) 20 20 Size 0250 cType 5 Type 09 colours 28 [1D,1E,22 Jeans Left and Right Seams] -6B4 AB7B3D (46) 20 20 Size 02C1 cType 5 Type 0B colours 2D -6B5 AB7DFE (07) 20 40 Size 04E1 OTHER Greyscale Type 07 -6B6 AB82DF (46) 20 30 Size 036C cType 5 Type 09 colours 29 [1D,1E,22 Jeans Pantlegs] -6B7 AB864B (46) 20 20 Size 0307 cType 5 Type 0B colours 35 -6B8 AB8952 (46) 20 20 Size 02EA cType 5 Type 0B colours 34 -6B9 AB8C3C (46) 20 20 Size 02C1 cType 5 Type 0B colours 2D -6BA AB8EFD (40) 20 40 Size 0943 cType 5 Type 09 colours FF [35 Des - Front] -6BB AB9840 (40) 20 40 Size 08C3 cType 5 Type 09 colours FF [35 Des - Left] -6BC ABA103 (40) 20 40 Size 0907 cType 5 Type 09 colours FF [35 Des - Right] -6BD ABAA0A (41) 01 01 Size 000C cType 3 Type 0A colours 0 [(DD44,Klobb,ZMG,D5Ks,Phantom,AR33)] -6BE ABAA16 (40) 20 40 Size 09D2 cType 5 Type 09 colours FF [2E Mark - Front] -6BF ABB3E8 (40) 20 40 Size 09B3 cType 5 Type 09 colours FF [2E Mark - Right] -6C0 ABBD9B (40) 20 40 Size 0990 cType 5 Type 09 colours FF [2E Mark - Left] -6C1 ABC72B (07) 40 20 Size 03FE OTHER Greyscale Type 07 -6C2 ABCB29 (07) 40 20 Size 040A OTHER Greyscale Type 07 -6C3 ABCF33 (46) 20 20 Size 0447 cType 5 Type 09 colours AB [009F Bathroom Door Inside Lock] -6C4 ABD37A (46) 20 20 Size 0418 cType 5 Type 09 colours A2 [009F Bathroom Door Outside Handle] -6C5 ABD792 (40) 20 40 Size 0833 cType 5 Type 09 colours F8 [31 Dwayne - Front] -6C6 ABDFC5 (40) 20 40 Size 07E9 cType 5 Type 09 colours FC [31 Dwayne - Side] -6C7 ABE7AE (46) 20 30 Size 0341 cType 5 Type 09 colours 21 [14 Naval Guard Slacks] -6C8 ABEAEF (46) 20 30 Size 0171 cType 5 Type 09 colours 29 [14 Naval Guard Rankbar] -6C9 ABEC60 (46) 20 30 Size 0607 cType 5 Type 09 colours AD [14 Naval Guard Back and Left Arm] -6CA ABF267 (46) 20 30 Size 058D cType 5 Type 09 colours A5 [14 Naval Guard Front] -6CB ABF7F4 (46) 20 30 Size 03B7 cType 5 Type 09 colours 54 [14 Naval Guard Sleeves] -6CC ABFBAB (46) 20 30 Size 0400 cType 5 Type 09 colours 53 [1D Female Civilian Sleeve] -6CD ABFFAB (46) 20 30 Size 045A cType 5 Type 09 colours 61 [1D Female Civilian Back] -6CE AC0405 (46) 20 30 Size 0712 cType 5 Type 09 colours FF [1D Female Civilian Front] -6CF AC0B17 (46) 20 30 Size 0226 cType 5 Type 09 colours 1E [1B,1C Female Staff Sleeve] -6D0 AC0D3D (46) 20 30 Size 0415 cType 5 Type 09 colours 38 [1B,1C Female Staff Back] -6D1 AC1152 (46) 20 30 Size 0535 cType 5 Type 09 colours 89 [1B,1C Female Staff Front] -6D2 AC1687 (46) 30 20 Size 0774 cType 5 Type 09 colours FF [1A Female Civilian Sleeve] -6D3 AC1DFB (46) 20 30 Size 07A8 cType 5 Type 09 colours FF [1A Female Civilian Back] -6D4 AC25A3 (46) 20 30 Size 076D cType 5 Type 09 colours FF [1A Female Civilian Front] -6D5 AC2D10 (46) 20 30 Size 027C cType 5 Type 09 colours 2B [1D Female Civilian Lower Sleeve] -6D6 AC2F8C (46) 20 30 Size 02A9 cType 5 Type 09 colours 2B [1A,1B Female Civilian Legs] -6D7 AC3235 (46) 20 20 Size 010B cType 5 Type 09 colours 14 [10,1A,1B,1C,1D Female Neck] -6D8 AC3340 (46) 20 30 Size 0342 cType 5 Type 09 colours 46 [13 Siberian Guard Front] -6D9 AC3682 (46) 30 20 Size 01E5 cType 5 Type 0A colours B [00D6 Black Furry Hat Sides,Top] -6DA AC3867 (46) 20 20 Size 01FB cType 5 Type 09 colours 17 [00D6 Black Furry Hat Back] -6DB AC3A62 (46) 30 20 Size 05C8 cType 5 Type 09 colours 83 [00D5 Brown Furry Hat Back] -6DC AC402A (46) 30 20 Size 039B cType 5 Type 09 colours 39 [00D5 Brown Furry Hat Sides,Top] -6DD AC43C5 (46) 30 20 Size 0416 cType 5 Type 09 colours 44 [00D4 Blue Furry Hat Sides,Top] -6DE AC47DB (46) 20 20 Size 0452 cType 5 Type 09 colours 8E [00D4 Blue Furry Hat Back] -6DF AC4C2D (46) 20 30 Size 0428 cType 5 Type 09 colours 44 [13 Siberian Guard Legs] -6E0 AC5055 (46) 20 30 Size 029B cType 5 Type 09 colours 15 [13 Siberian Guard Back] -6E1 AC52F0 (46) 20 30 Size 01D2 cType 5 Type 0A colours 8 [13,25 Siberian Guard Arms and Waistcoat + Fringe] -6E2 AC54C2 (40) 20 40 Size 065A cType 1 Type 09 colours 99 [3E Graeme - Back] -6E3 AC5B1C (40) 20 40 Size 0964 cType 5 Type 09 colours FF [3E Graeme - Front] -6E4 AC6480 (40) 20 40 Size 08BC cType 5 Type 09 colours FF [3E Graeme - Right] -6E5 AC6D3C (40) 20 40 Size 08E8 cType 5 Type 09 colours FF [3E Graeme - Left] -6E6 AC7624 (40) 20 40 Size 09EA cType 5 Type 09 colours FF [34 Grant - Front] -6E7 AC800E (40) 20 40 Size 09AB cType 5 Type 09 colours FF [34 Grant - Left] -6E8 AC89B9 (40) 20 40 Size 09B5 cType 5 Type 09 colours FF [34 Grant - Right] -6E9 AC936E (46) 30 20 Size 038C cType 5 Type 09 colours 2C [01 St. Petersburg Guard Arms] -6EA AC96FA (46) 20 30 Size 0559 cType 5 Type 09 colours 90 [01 St. Petersburg Guard Back] -6EB AC9C53 (46) 20 30 Size 0667 cType 5 Type 09 colours E9 [01 St. Petersburg Guard Torso] -6EC ACA2BA (46) 20 30 Size 057A cType 5 Type 09 colours 77 [01 St. Petersburg Guard Slacks] -6ED ACA834 (46) 20 20 Size 0480 cType 3 Type 09 colours FF [01 St. Petersburg Guard Collar] -6EE ACACB4 (46) 20 20 Size 01A0 cType 5 Type 09 colours 31 [01 St. Petersburg Guard Back Collar] -6EF ACAE54 (46) 20 20 Size 00F6 cType 5 Type 09 colours 12 [00DC Black Beret] -6F0 ACAF4A (46) 20 30 Size 0317 cType 5 Type 09 colours 3B [00DE Red Beret Sides,Top] -6F1 ACB261 (46) 20 30 Size 037E cType 5 Type 09 colours 46 [00DD Blue Beret Sides,Top] -6F2 ACB5DF (46) 20 30 Size 061A cType 5 Type 09 colours FF [00DD Blue Beret Front] -6F3 ACBBF9 (46) 20 30 Size 04B5 cType 5 Type 09 colours A4 [00DE Red Beret Front] -6F4 ACC0AE (46) 20 20 Size 0139 cType 5 Type 09 colours 2B -6F5 ACC1E7 (46) 20 20 Size 0142 cType 5 Type 09 colours 2A [26 Arctic Guard Collar] -6F6 ACC329 (46) 20 30 Size 0191 cType 5 Type 09 colours 3C [00,14 Jungle,Naval Guard Collar] -6F7 ACC4BA (46) 20 30 Size 0301 cType 5 Type 09 colours 73 [25 Siberian Collar] -6F8 ACC7BB (46) 20 30 Size 01C2 cType 5 Type 09 colours 30 [25 Siberian Back Collar] -6F9 ACC97D (46) 30 20 Size 0367 cType 5 Type 09 colours 5D [Boot 1, Various(00,07,0F,12,14,26)] -6FA ACCCE4 (46) 20 30 Size 03DD cType 5 Type 09 colours 51 [Boot 1, Various(00,07,12,14,26)] -6FB ACD0C1 (46) 20 20 Size 0386 cType 5 Type 09 colours 64 [15 Siberian Special Forces Boots] -6FC ACD447 (46) 20 20 Size 033E cType 5 Type 09 colours 48 [29 Left Hand - Pinky Finger] -6FD ACD785 (46) 20 20 Size 030A cType 5 Type 09 colours 53 [29 Left Hand - Ring Finger] -6FE ACDA8F (46) 20 20 Size 02E8 cType 5 Type 09 colours 46 [29 Left Hand - Middle Finger] -6FF ACDD77 (46) 20 20 Size 0340 cType 5 Type 09 colours 63 [29 Left Hand - Index Finger] -700 ACE0B7 (46) 20 20 Size 0368 cType 5 Type 09 colours 73 [29 Left Hand - Upper Palm] -701 ACE41F (46) 20 20 Size 03D5 cType 1 Type 09 colours 7A [29 Left Hand - Wrist + Watch] -702 ACE7F4 (46) 20 20 Size 03DB cType 1 Type 09 colours 7C [29 Left Hand - Back of Hand] -703 ACEBCF (46) 20 20 Size 04D7 cType 5 Type 09 colours C0 [29 Left Hand - Tip of Thumb, Back of Fingers] -704 ACF0A6 (46) 20 20 Size 0498 cType 5 Type 09 colours AB [29 Left Hand - Tips of Fingers] -705 ACF53E (46) 20 20 Size 049D cType 5 Type 09 colours AB [29 Left Hand - Lower Palm] -706 ACF9DB (46) 20 20 Size 02EA cType 5 Type 09 colours 66 [29 Left Hand - Thumb] -707 ACFCC5 (46) 30 20 Size 0374 cType 5 Type 09 colours 5F [00D6 Black Furry Hat Front] -708 AD0039 (46) 30 20 Size 068C cType 5 Type 09 colours CB [00D5 Brown Furry Hat Front] -709 AD06C5 (46) 30 20 Size 072E cType 5 Type 09 colours EF [00D4 Blue Furry Hat Front] -70A AD0DF3 (40) 20 40 Size 08E2 cType 5 Type 09 colours FF [Jaws Head - Front] -70B AD16D5 (40) 20 40 Size 0820 cType 5 Type 09 colours FF [Jaws Head - Funny Hair Thing] -70C AD1EF5 (40) 20 40 Size 08A1 cType 5 Type 09 colours FF [Jaws Head - Right] -70D AD2796 (40) 20 40 Size 083A cType 5 Type 09 colours FF [Jaws Head - Left] -70E AD2FD0 (46) 20 20 Size 01F6 cType 5 Type 09 colours 1C [0D Jaws Crotch] -70F AD31C6 (46) 20 20 Size 01D4 cType 5 Type 09 colours 17 [0D Jaws Butt] -710 AD339A (46) 20 30 Size 02F4 cType 5 Type 09 colours 28 [0D Jaws Pants] -711 AD368E (46) 20 20 Size 013E cType 5 Type 09 colours 12 [0D Jaws Neck] -712 AD37CC (46) 20 20 Size 0173 cType 5 Type 09 colours 38 [0D Jaws Collar] -713 AD393F (46) 20 30 Size 0678 cType 5 Type 09 colours F2 [0D Jaws Torso] -714 AD3FB7 (46) 20 30 Size 0299 cType 5 Type 09 colours 14 [0D Jaws Sleeve] -715 AD4250 (46) 20 30 Size 05A3 cType 5 Type 09 colours AF [0D Jaws Back] -716 AD47F3 (40) 20 40 Size 0A0C cType 1 Type 09 colours FF [39 Jim - Front] -717 AD51FF (40) 20 40 Size 09E3 cType 5 Type 09 colours FF [39 Jim - Right] -718 AD5BE2 (40) 20 40 Size 09E9 cType 5 Type 09 colours FF [39 Jim - Left] -719 AD65CB (40) 20 40 Size 0940 cType 5 Type 09 colours FF -71A AD6F0B (40) 20 40 Size 09B2 cType 5 Type 09 colours FF -71B AD78BD (40) 20 40 Size 0966 cType 5 Type 09 colours FF -71C AD8223 (40) 20 40 Size 09E1 cType 5 Type 09 colours FF [42 Joe - Front] -71D AD8C04 (40) 20 40 Size 0929 cType 5 Type 09 colours FF [42 Joe - Left] -71E AD952D (40) 20 40 Size 0948 cType 5 Type 09 colours FF [42 Joe - Right] -71F AD9E75 (40) 20 40 Size 09E8 cType 5 Type 09 colours FF [40 Joel - Front] -720 ADA85D (40) 20 40 Size 09CD cType 5 Type 09 colours FF [40 Joel - Right] -721 ADB22A (40) 20 40 Size 09A4 cType 7 Type 09 colours FF [40 Joel - Left] -722 ADBBCE (40) 20 40 Size 0961 cType 5 Type 09 colours FF [2A,3D Karl & Biker - Left] -723 ADC52F (40) 20 40 Size 0965 cType 5 Type 09 colours FF [2A,3D Karl & Biker - Right] -724 ADCE94 (40) 20 40 Size 0909 cType 5 Type 09 colours FF [2A,3D Karl & Biker - Front] -725 ADD79D (40) 40 20 Size 0393 cType 5 Type 09 colours 40 [2A,3D Biker & Karl's Crazy Head Thing] -726 ADDB30 (46) 20 30 Size 0157 cType 5 Type 0A colours 8 [23 Scientist Sleeve] -727 ADDC87 (46) 20 30 Size 028B cType 5 Type 09 colours 10 [23 Scientist Back] -728 ADDF12 (46) 20 30 Size 0312 cType 5 Type 09 colours 26 [23 Scientist Front] -729 ADE224 (40) 20 40 Size 09D9 cType 5 Type 09 colours FF [37 Lee - Front] -72A ADEBFD (40) 20 40 Size 0905 cType 1 Type 09 colours FF [37 Lee - Right] -72B ADF502 (40) 20 40 Size 0928 cType 1 Type 09 colours FF [37 Lee - Left] -72C ADFE2A (46) 20 30 Size 0277 cType 5 Type 09 colours 3C [22 Purple Civilian Back Collar] -72D AE00A1 (46) 20 30 Size 027C cType 5 Type 09 colours 46 [22 Purple Civilian Collar] -72E AE031D (46) 20 30 Size 0116 cType 5 Type 09 colours 26 [20 Red Civilian Back Collar] -72F AE0433 (46) 20 30 Size 01C7 cType 3 Type 09 colours 3C [20 Red Civilian Collar] -730 AE05FA (46) 20 30 Size 0104 cType 5 Type 09 colours 2F [21 Blue Civilian Collar] -731 AE06FE (46) 30 20 Size 0288 cType 5 Type 09 colours 23 [1F Male Civilian Arm] -732 AE0986 (46) 20 30 Size 061D cType 5 Type 09 colours 92 [1E Civilian Sleeve] -733 AE0FA3 (46) 20 30 Size 0185 cType 5 Type 09 colours 3E [1E Civilian Collar] -734 AE1128 (40) 20 40 Size 0859 cType 7 Type 09 colours E9 [48 Mandy - Front] -735 AE1981 (40) 20 40 Size 089F cType 5 Type 09 colours F2 [48 Mandy - Right] -736 AE2220 (40) 20 40 Size 07E8 cType 5 Type 09 colours C7 [48 Mandy - Left] -737 AE2A08 (40) 20 40 Size 09A6 cType 7 Type 09 colours FF [47 Marion - Front] -738 AE33AE (40) 20 40 Size 08AD cType 5 Type 09 colours FF [47 Marion - Left] -739 AE3C5B (40) 20 40 Size 08BF cType 7 Type 09 colours FF [47 Marion - Right] -73A AE451A (40) 20 40 Size 0929 cType 5 Type 09 colours FF [2E Mark - Front] -73B AE4E43 (40) 20 40 Size 0959 cType 5 Type 09 colours FF [2E Mark - Left] -73C AE579C (40) 20 40 Size 093B cType 5 Type 09 colours FF [2E Mark - Right] -73D AE60D7 (40) 20 40 Size 08F0 cType 5 Type 09 colours FF [2D Martin - Left] -73E AE69C7 (40) 20 40 Size 08B8 cType 5 Type 09 colours FF [2D Martin - Right] -73F AE727F (40) 20 40 Size 0933 cType 5 Type 09 colours FF [2D Martin - Front] -740 AE7BB2 (46) 20 30 Size 04DB cType 5 Type 09 colours 7D [2D Martin Crazy Hair Thing] -741 AE808D (40) 20 40 Size 0941 cType 5 Type 09 colours FF [0E Mayday Head - Front] -742 AE89CE (40) 20 40 Size 06C3 cType 7 Type 09 colours CE [0E Mayday Head - Right] -743 AE9091 (40) 20 40 Size 0844 cType 5 Type 09 colours FF [0E Mayday Head - Left] -744 AE98D5 (40) 10 40 Size 032A cType 3 Type 09 colours 63 -745 AE9BFF (40) 20 40 Size 060A cType 3 Type 09 colours 93 [0E Mayday Legs] -746 AEA209 (40) 10 40 Size 03A6 cType 5 Type 09 colours 6C -747 AEA5AF (40) 20 20 Size 0110 cType 5 Type 0A colours C [0E Mayday Neck] -748 AEA6BF (46) 30 20 Size 02B6 cType 5 Type 09 colours 40 [0E Mayday Boot] -749 AEA975 (40) 20 40 Size 0725 cType 5 Type 09 colours AB [0E Mayday Torso] -74A AEB09A (46) 20 20 Size 04FE cType 5 Type 09 colours C4 [0E Mayday Back] -74B AEB598 (40) 01 01 Size 000C cType 3 Type 0A colours 0 [(Klobb,ZMG)] -74C AEB5A4 (40) 20 40 Size 08CF cType 5 Type 09 colours FF [45 Mishkin Head - Right] -74D AEBE73 (40) 20 40 Size 094A cType 5 Type 09 colours FF [45 Mishkin Head - Left] -74E AEC7BD (40) 20 40 Size 09A8 cType 5 Type 09 colours FF [45 Mishkin Head - Front] -74F AED165 (46) 30 20 Size 078C cType 5 Type 09 colours FF [27,28 Moonraker Sleeve] -750 AED8F1 (40) 20 40 Size 09DE cType 5 Type 09 colours FF [28 Female Moonraker - Back] -751 AEE2CF (40) 20 40 Size 0114 cType 5 Type 0A colours B [28 Moonraker Female Collar] -752 AEE3E3 (46) 20 20 Size 057F cType 5 Type 09 colours DD [00DB Moonraker Helmet] -753 AEE962 (46) 20 20 Size 01C2 cType 5 Type 09 colours 32 [24,00DB Helicopter Pilot,Moonraker Earmuffs] -754 AEEB24 (46) 20 30 Size 07D4 cType 5 Type 09 colours FF [27 Moonraker Back] -755 AEF2F8 (46) 20 30 Size 07E5 cType 5 Type 09 colours FF [27 Moonraker Front] -756 AEFADD (40) 20 40 Size 09E3 cType 5 Type 09 colours FF [28 Female Moonraker - Front] -757 AF04C0 (46) 20 30 Size 07BD cType 5 Type 09 colours FF [27,28 Moonraker Slacks] -758 AF0C7D (46) 20 30 Size 04A8 cType 5 Type 09 colours 7C [27,28 Moonraker Socks] -759 AF1125 (46) 20 30 Size 00BA cType 5 Type 09 colours 16 [27,28 Moonraker Collar] -75A AF11DF (46) 30 20 Size 05D1 cType 5 Type 09 colours E9 [27,28 Moonraker Shoe] -75B AF17B0 (40) 20 40 Size 096C cType 5 Type 09 colours FF [Moore Front Face - UNUSED] -75C AF211C (40) 20 40 Size 087A cType 5 Type 09 colours FF [Moore Left Face - UNUSED] -75D AF2996 (40) 20 40 Size 0800 cType 5 Type 09 colours FF [Moore Right Face - UNUSED] -75E AF3196 (40) 20 40 Size 0470 cType 5 Type 09 colours 63 [Moore Back Hair - UNUSED] -75F AF3606 (40) 20 20 Size 0211 cType 5 Type 09 colours 44 [Moore Sleeve Cuff or Back Collar - UNUSED] -760 AF3817 (46) 20 30 Size 020A cType 5 Type 0A colours D [Moore Tux Back - UNUSED] -761 AF3A21 (46) 20 30 Size 032A cType 5 Type 09 colours 48 [Moore Tux Front - UNUSED] -762 AF3D4B (46) 30 20 Size 03E7 cType 5 Type 09 colours BA [3D Biker Goggles] -763 AF4132 (46) 20 20 Size 0263 cType 5 Type 09 colours 43 [3D,00D9,00DA Steel Helmet,Biker's Crazy Hat] -764 AF4395 (40) 20 40 Size 0A0C cType 1 Type 09 colours FF [10,4F Natalya - Front] -765 AF4DA1 (46) 20 20 Size 060C cType 1 Type 09 colours FF [10,4F Natalya Head - Left and Back] -766 AF53AD (46) 20 20 Size 05F0 cType 5 Type 09 colours FF [10,4F Natalya Head - Right] -767 AF599D (46) 20 30 Size 066A cType 5 Type 09 colours C6 [10 Natalya Sleeve] -768 AF6007 (46) 30 20 Size 0322 cType 5 Type 09 colours 41 [10,1A,1B Female Arm] -769 AF6329 (46) 20 20 Size 037F cType 5 Type 09 colours 5D [Female Hand - Palm] -76A AF66A8 (46) 20 20 Size 037F cType 5 Type 09 colours 5D [Female Hand - Top, Knuckles] -76B AF6A27 (46) 20 20 Size 0314 cType 5 Type 09 colours 5D [Female Hand - Bottom] -76C AF6D3B (46) 20 20 Size 0333 cType 5 Type 09 colours 6A [Female Hand - Thumb] -76D AF706E (46) 20 20 Size 019C cType 5 Type 09 colours 17 [10 Natalya Legs] -76E AF720A (46) 20 20 Size 0232 cType 5 Type 09 colours 4C [0F Oddjob Collar] -76F AF743C (46) 20 20 Size 0151 cType 5 Type 09 colours 1C -770 AF758D (46) 20 20 Size 0176 cType 5 Type 0A colours D [10 Natalya Skirt] -771 AF7703 (46) 20 30 Size 07A9 cType 5 Type 09 colours FF [10 Natalya Front] -772 AF7EAC (46) 20 30 Size 079A cType 5 Type 09 colours FF [10 Natalya Back] -773 AF8646 (40) 20 40 Size 0932 cType 5 Type 09 colours FF [38 Neil - Front] -774 AF8F78 (40) 20 40 Size 08CD cType 5 Type 09 colours FF [38 Neil - Right] -775 AF9845 (40) 20 40 Size 08CE cType 5 Type 09 colours FF [38 Neil - Left] -776 AFA113 (46) 20 20 Size 0104 cType 5 Type 0A colours 6 [010D Back of Clipboard] -777 AFA217 (46) 20 20 Size 02F3 cType 5 Type 09 colours 5A [010D Front of Clipboard] -778 AFA50A (46) 20 20 Size 05B4 cType 5 Type 09 colours FF [02 Russian Soldier Shoulder Patch] -779 AFAABE (46) 20 20 Size 033E cType 5 Type 09 colours 87 [00D7 Russian Infantry Hat] -77A AFADFC (46) 20 30 Size 050E cType 5 Type 09 colours 71 [02 Russian Soldier Back] -77B AFB30A (46) 20 30 Size 05FA cType 5 Type 09 colours B1 [02 Russian Soldier Front] -77C AFB904 (46) 20 30 Size 0464 cType 5 Type 09 colours 4B [02 Russian Soldier Sleeves and Slacks] -77D AFBD68 (41) 01 01 Size 000C cType 3 Type 0A colours 0 -77E AFBD74 (40) 20 20 Size 0577 cType 5 Type 09 colours E0 [0F Oddjob Head - Right] -77F AFC2EB (40) 20 20 Size 0583 cType 5 Type 09 colours E3 [0F Oddjob Head - Left] -780 AFC86E (40) 20 40 Size 08A4 cType 5 Type 09 colours FB [0F Oddjob - Front] -781 AFD112 (46) 20 30 Size 0352 cType 5 Type 09 colours 30 [0F Oddjob Sleeve] -782 AFD464 (40) 20 20 Size 02D7 cType 5 Type 09 colours 44 [0F Oddjob Head - Back] -783 AFD73B (46) 20 30 Size 035B cType 5 Type 09 colours 2E [0F Oddjob Back] -784 AFDA96 (46) 20 30 Size 03C3 cType 5 Type 09 colours 3D [0F Oddjob Front & Hat] -785 AFDE59 (46) 20 30 Size 0477 cType 5 Type 09 colours 43 [0F Oddjob Right Pant] -786 AFE2D0 (46) 20 30 Size 047F cType 5 Type 09 colours 44 [0F Oddjob Left Pant and Low-Res Pants] -787 AFE74F (46) 20 20 Size 0291 cType 5 Type 09 colours 5A [00D8 Russian Infantry Hat] -788 AFE9E0 (40) 20 40 Size 08F5 cType 5 Type 09 colours FF -789 AFF2D5 (40) 20 40 Size 0908 cType 5 Type 09 colours FF -78A AFFBDD (40) 20 40 Size 09D3 cType 5 Type 09 colours FF -78B B005B0 (40) 20 40 Size 08C9 cType 5 Type 09 colours FF [07 Ourumov Head - Front] -78C B00E79 (40) 20 20 Size 02A0 cType 5 Type 09 colours 2B [07 Ourumov - Hair] -78D B01119 (40) 20 40 Size 0838 cType 5 Type 09 colours EB [07 Ourumov Head - Left] -78E B01951 (40) 20 40 Size 07F5 cType 5 Type 09 colours E5 [07 Ourumov Head - Right] -78F B02146 (46) 20 30 Size 0315 cType 5 Type 09 colours 4F [07 Ourumov - Sleeve] -790 B0245B (46) 20 30 Size 0516 cType 5 Type 09 colours 9E [07 Ourumov - Front] -791 B02971 (46) 20 30 Size 046B cType 5 Type 09 colours 58 [07 Ourumov - Back] -792 B02DDC (46) 20 30 Size 0305 cType 5 Type 09 colours 39 [07 Ourumov - Back of Slacks] -793 B030E1 (46) 20 30 Size 04DE cType 5 Type 09 colours 99 [07 Ourumov - Slacks] -794 B035BF (46) 20 20 Size 046B cType 1 Type 09 colours A1 [07 Ourumov - Collar] -795 B03A2A (46) 20 20 Size 0320 cType 5 Type 09 colours 63 [07 Ourumov - Back Collar] -796 B03D4A (46) 30 20 Size 0695 cType 5 Type 09 colours FF [07,00DF Ourumov,Officer's Hat] -797 B043DF (40) 20 40 Size 096E cType 5 Type 09 colours FF [2C Pete - Left] -798 B04D4D (40) 20 40 Size 099D cType 5 Type 09 colours FF [2C Pete - Right] -799 B056EA (40) 20 40 Size 0996 cType 5 Type 09 colours FF [2C Pete - Front] -79A B06080 (46) 30 20 Size 038E cType 5 Type 09 colours 49 [24 Helicopter Pilot Top of Helmet] -79B B0640E (46) 30 20 Size 0248 cType 5 Type 09 colours 23 [24 Helicopter Pilot Back of Helmet] -79C B06656 (46) 20 30 Size 02CC cType 5 Type 09 colours 65 [24 Helicopter Pilot Right Sleeve] -79D B06922 (46) 20 30 Size 0079 cType 3 Type 09 colours 22 [24 Helicopter Pilot Rankbar] -79E B0699B (46) 30 20 Size 061C cType 5 Type 09 colours D9 [24 Helicopter Pilot Goggles] -79F B06FB7 (46) 30 20 Size 048E cType 5 Type 09 colours 54 [24 Helicopter Pilot Left Sleeve] -7A0 B07445 (46) 20 30 Size 055A cType 5 Type 09 colours 68 [24 Helicopter Pilot Back] -7A1 B0799F (46) 20 30 Size 0523 cType 5 Type 09 colours 5B [24 Helicopter Pilot Slacks] -7A2 B07EC2 (46) 20 30 Size 0652 cType 5 Type 09 colours AB [24 Helicopter Pilot Front] -7A3 B08514 (46) 20 30 Size 0543 cType 5 Type 09 colours 64 [20 Red Civilian Sleeves] -7A4 B08A57 (46) 20 30 Size 04D7 cType 5 Type 09 colours 52 [20 Red Civilian Back] -7A5 B08F2E (46) 20 30 Size 0563 cType 5 Type 09 colours 74 [20 Red Civilian Front] -7A6 B09491 (07) 20 40 Size 03C6 OTHER Greyscale Type 07 -7A7 B09857 (46) 20 30 Size 0446 cType 5 Type 09 colours 49 [25 Siberian Back] -7A8 B09C9D (46) 20 20 Size 026A cType 5 Type 09 colours 1F [25 Siberan Back of Waistcoat, Right Arm] -7A9 B09F07 (46) 20 30 Size 0561 cType 5 Type 09 colours 9B [25 Siberian Front] -7AA B0A468 (46) 20 20 Size 0259 cType 5 Type 09 colours 1D [25 Siberian Front of Waistcoat] -7AB B0A6C1 (46) 20 30 Size 0757 cType 1 Type 09 colours FA [03 Russian Infantry Front] -7AC B0AE18 (46) 20 30 Size 0712 cType 5 Type 09 colours DC [03 Russian Infantry Back] -7AD B0B52A (46) 20 30 Size 042B cType 5 Type 09 colours 45 [03,25 Siberian Slacks, Russian Infantry Sleeve and Slacks] -7AE B0B955 (46) 20 30 Size 0172 cType 1 Type 09 colours 2E [02 Russian Soldier Back Collar] -7AF B0BAC7 (46) 20 30 Size 035C cType 5 Type 09 colours 7B [02 Russian Soldier Collar] -7B0 B0BE23 (46) 30 20 Size 03F9 cType 5 Type 09 colours B7 [02 Russian Soldier Boot] -7B1 B0C21C (46) 20 30 Size 0594 cType 5 Type 09 colours E5 [02 Russian Soldier Boot-Silo] -7B2 B0C7B0 (40) 20 40 Size 098A cType 5 Type 09 colours FF [3A Robin - Front] -7B3 B0D13A (40) 20 40 Size 090B cType 5 Type 09 colours FF [3A Robin - Right] -7B4 B0DA45 (40) 20 40 Size 09C5 cType 5 Type 09 colours FF [3A Robin - Left] -7B5 B0E40A (40) 20 40 Size 08E3 cType 1 Type 09 colours FF [46 Sally - Front] -7B6 B0ECED (40) 20 40 Size 0949 cType 5 Type 09 colours FF [46 Sally - Left] -7B7 B0F636 (40) 20 40 Size 090F cType 5 Type 09 colours FF [46 Sally - Right] -7B8 B0FF45 (40) 20 40 Size 0A0C cType 1 Type 09 colours FF [41 Scott - Front] -7B9 B10951 (40) 20 40 Size 0960 cType 5 Type 09 colours FF [41 Scott - Left] -7BA B112B1 (40) 20 40 Size 095C cType 5 Type 09 colours FF [41 Scott - Right] -7BB B11C0D (46) 20 20 Size 01B3 cType 5 Type 09 colours 2E [08,09 Trevelyan Collar] -7BC B11DC0 (46) 20 20 Size 0425 cType 3 Type 0B colours BD -7BD B121E5 (46) 20 30 Size 076C cType 5 Type 09 colours E5 [1E Civilian Back] -7BE B12951 (46) 20 30 Size 0775 cType 5 Type 09 colours E4 [1E Civilian Front] -7BF B130C6 (46) 20 20 Size 01AF cType 5 Type 09 colours 2D [1A Female civilian Pleated Skirt] -7C0 B13275 (46) 20 20 Size 0176 cType 5 Type 09 colours 18 [15 Siberian Special Forces Back of Boots] -7C1 B133EB (46) 20 30 Size 02C0 cType 5 Type 09 colours 28 [15 Siberian Special Forces Bootbuckles] -7C2 B136AB (46) 20 20 Size 0394 cType 5 Type 09 colours 6A [15 Siberian Special Forces Cuffs] -7C3 B13A3F (46) 20 20 Size 0306 cType 5 Type 09 colours 46 [15 Siberian Special Forces Hat] -7C4 B13D45 (46) 20 30 Size 055D cType 5 Type 09 colours 60 [15 Siberian Special Forces Front] -7C5 B142A2 (46) 20 30 Size 053E cType 5 Type 09 colours 5F [15 Siberian Special Forces Back] -7C6 B147E0 (46) 20 20 Size 0179 cType 5 Type 09 colours 17 [15 Siberian Special Forces Hand - Knuckles] -7C7 B14959 (46) 20 20 Size 017D cType 5 Type 0A colours D [15 Siberian Special Forces Hand - Top] -7C8 B14AD6 (46) 20 20 Size 01B7 cType 5 Type 09 colours 12 [15 Siberian Special Forces Hand - Bottom] -7C9 B14C8D (46) 20 20 Size 01CC cType 5 Type 0A colours E [15 Siberian Special Forces Hand - Palm] -7CA B14E59 (46) 20 20 Size 0181 cType 5 Type 09 colours 11 [15 Siberian Special Forces Hand - Thumb] -7CB B14FDA (46) 10 20 Size 00F0 cType 5 Type 09 colours 15 -7CC B150CA (46) 20 20 Size 0220 cType 5 Type 09 colours 3D [Enemy Glasses - Male Heads] -7CD B152EA (40) 20 40 Size 0998 cType 5 Type 09 colours FF [3F Steve E. - Front] -7CE B15C82 (40) 20 40 Size 09B7 cType 5 Type 09 colours FF [3F Steve E. - Left] -7CF B16639 (40) 20 40 Size 096D cType 5 Type 09 colours FF [3F Steve E. - Right] -7D0 B16FA6 (40) 20 40 Size 08BC cType 5 Type 09 colours FF [3B Steve H. - Front] -7D1 B17862 (40) 20 40 Size 08BA cType 5 Type 09 colours FF [3B Steve H. - Side] -7D2 B1811C (40) 20 40 Size 0884 cType 5 Type 09 colours F7 [3B Steve H. - Back] -7D3 B189A0 (40) 20 40 Size 0924 cType 5 Type 09 colours FF [4A-4D Bond - Front] -7D4 B192C4 (40) 20 40 Size 0812 cType 5 Type 09 colours FF [4A-4D Bond - Right] -7D5 B19AD6 (46) 20 20 Size 0276 cType 5 Type 09 colours 37 [16,18 Bond Collar] -7D6 B19D4C (46) 20 20 Size 019C cType 5 Type 09 colours 3C [18 Jungle Bond Back Collar] -7D7 B19EE8 (46) 20 20 Size 00FE cType 5 Type 09 colours 1B [17 Blue Suit Back Collar] -7D8 B19FE6 (46) 20 20 Size 02B1 cType 5 Type 09 colours 4D [16 Bond Back Collar] -7D9 B1A297 (46) 20 20 Size 0269 cType 5 Type 09 colours 39 [19 Snowsuit Bond Collar] -7DA B1A500 (40) 20 40 Size 0768 cType 5 Type 09 colours FF [4A-4D Bond - Left] -7DB B1AC68 (46) 20 30 Size 00B9 cType 5 Type 0A colours 6 [04,11,24 Janus Pants] -7DC B1AD21 (46) 20 30 Size 00E4 cType 5 Type 0A colours 7 [04 Janus Special Forces Arms and Low-Res Legs] -7DD B1AE05 (46) 20 30 Size 0141 cType 5 Type 0A colours D [04 Janus Special Forces Forearms] -7DE B1AF46 (46) 20 30 Size 030F cType 5 Type 09 colours 73 [24 Helicopter Pilot Collar] -7DF B1B255 (46) 20 30 Size 0140 cType 5 Type 09 colours 26 [11 Janus Marine Collar] -7E0 B1B395 (46) 20 30 Size 0398 cType 5 Type 09 colours 71 [04 Janus Special Forces Collar] -7E1 B1B72D (46) 20 30 Size 0183 cType 5 Type 0A colours D [04 Janus Special Forces Pant Pockets] -7E2 B1B8B0 (46) 20 30 Size 012F cType 5 Type 0A colours B [04 Janus Special Forces Right Back Pant Pocket] -7E3 B1B9DF (46) 20 30 Size 0158 cType 5 Type 09 colours 2A [04 Janus Special Forces Right Shoulder Patch] -7E4 B1BB37 (46) 20 30 Size 01AE cType 5 Type 09 colours 21 [04,0A,11,23,24 Shiny Boots] -7E5 B1BCE5 (46) 20 30 Size 01D5 cType 5 Type 09 colours 24 [04,11,24 Shiny Boot Laces] -7E6 B1BEBA (46) 20 30 Size 00C4 cType 5 Type 0A colours 9 [04,11,24 Back of Shiny Boot Laces] -7E7 B1BF7E (46) 20 30 Size 0398 cType 5 Type 09 colours 43 [04 Janus Special Forces Front] -7E8 B1C316 (46) 20 30 Size 02BF cType 5 Type 09 colours 23 [04 Janus Special Forces Back] -7E9 B1C5D5 (46) 20 30 Size 0761 cType 5 Type 09 colours FF [1F Civilian Sleeve] -7EA B1CD36 (46) 20 30 Size 011E cType 5 Type 09 colours 31 [1F Civilian Back Collar] -7EB B1CE54 (46) 20 30 Size 03BB cType 5 Type 09 colours 27 [1F Civilian Vest] -7EC B1D20F (46) 20 30 Size 0654 cType 5 Type 09 colours E5 [21 Blue Civilian Sleeve] -7ED B1D863 (46) 20 30 Size 05B7 cType 5 Type 09 colours 9B [21 Blue Civilian Back] -7EE B1DE1A (46) 20 30 Size 066F cType 5 Type 09 colours BA [21 Blue Civilian Front] -7EF B1E489 (46) 20 30 Size 06C3 cType 5 Type 09 colours BA [22 Purple Civilian Back and Sleeves] -7F0 B1EB4C (46) 20 20 Size 0400 cType 5 Type 09 colours 70 -7F1 B1EF4C (46) 30 20 Size 0308 cType 5 Type 09 colours 36 [Boot 2, Various(01,1E,20,21,22)] -7F2 B1F254 (46) 20 30 Size 0382 cType 5 Type 09 colours A0 [23 Scientist Collar] -7F3 B1F5D6 (46) 20 30 Size 05A4 cType 5 Type 09 colours BF [1C,1D,1F Nike Swoosh Shoes] -7F4 B1FB7A (40) 20 20 Size 02B1 cType 5 Type 09 colours 39 [08,09 Trevelyan Hair] -7F5 B1FE2B (46) 20 20 Size 0441 cType 5 Type 09 colours A4 [08,09 Trevelyan Ring Hand - Knuckles] -7F6 B2026C (46) 20 20 Size 01F4 cType 5 Type 09 colours 45 [08 Trevelyan Waist] -7F7 B20460 (46) 20 30 Size 01A7 cType 5 Type 0A colours 9 [08 Trevelyan Pants] -7F8 B20607 (40) 20 40 Size 0900 cType 5 Type 09 colours FF [08 Trevelyan Head - Front] -7F9 B20F07 (40) 20 40 Size 07F4 cType 5 Type 09 colours C7 [08 Trevelyan Head - Left] -7FA B216FB (46) 20 30 Size 0125 cType 5 Type 0A colours 6 [08 Trevelyan Back and Sleeves] -7FB B21820 (46) 20 30 Size 019A cType 5 Type 09 colours 19 [08 Trevelyan Front] -7FC B219BA (40) 20 20 Size 055A cType 5 Type 09 colours D6 [08,09 Trevelyan Head - Right] -7FD B21F14 (46) 20 30 Size 0230 cType 1 Type 09 colours 3A [03 Russian Infantry Back Collar] -7FE B22144 (46) 20 30 Size 030E cType 5 Type 09 colours 65 [03 Russian Infantry Collar] -7FF B22452 (40) 20 40 Size 0944 cType 5 Type 09 colours FF [0A Valentine Head - Front] -800 B22D96 (46) 20 30 Size 0281 cType 5 Type 09 colours 2D [0A Valentin Back] -801 B23017 (46) 30 20 Size 0255 cType 5 Type 09 colours 47 [0A Valentin Sleeve] -802 B2326C (40) 20 40 Size 0451 cType 5 Type 09 colours 25 [0A Valentine Head - Back] -803 B236BD (46) 20 30 Size 03BE cType 5 Type 09 colours 82 [0A Valentin Torso] -804 B23A7B (46) 20 30 Size 01BB cType 5 Type 09 colours 18 [0A Valentin Pants] -805 B23C36 (40) 20 40 Size 06CA cType 5 Type 09 colours A6 [0A Valentine Head - Left] -806 B24300 (40) 20 40 Size 07AB cType 5 Type 09 colours CD [0A Valentine Head - Right] -807 B24AAB (46) 20 20 Size 03C7 cType 5 Type 09 colours B5 [0A Valentin Collar] -808 B24E72 (40) 20 40 Size 0972 cType 5 Type 09 colours FF [49 Vivien] -809 B257E4 (41) 01 01 Size 000C cType 3 Type 0A colours 0 [(Laser,Watch Laser/Detonator,Tazer) -80A B257F0 (46) 20 20 Size 0196 cType 5 Type 09 colours 12 [20,21 Dark Cordoroy Waist] -80B B25986 (46) 20 30 Size 027B cType 5 Type 09 colours 13 [20,21 Dark Cordoroy Pantlegs] -80C B25C01 (46) 20 20 Size 01AA cType 5 Type 09 colours 12 [20,21 Dark Cordoroy Outer Pant Seam] -80D B25DAB (40) 20 40 Size 0981 cType 5 Type 09 colours FF -80E B2672C (40) 20 40 Size 096B cType 5 Type 09 colours FF -80F B27097 (40) 20 40 Size 0903 cType 5 Type 09 colours FF -810 B2799A (46) 20 30 Size 0245 cType 5 Type 09 colours 22 [4E Brosnan Tux] -811 B27BDF (46) 20 20 Size 012F cType 5 Type 0A colours E [0B Xenia Neck] -812 B27D0E (46) 20 30 Size 048B cType 5 Type 09 colours 7D [0B Xenia Upper Arm] -813 B28199 (46) 20 30 Size 02FA cType 5 Type 09 colours 30 [0B Xenia Back of Bootlaces] -814 B28493 (46) 20 30 Size 0426 cType 5 Type 09 colours 5D [0B Xenia Bootlaces] -815 B288B9 (46) 30 20 Size 060B cType 5 Type 09 colours E0 [0B Xenia Hand] -816 B28EC4 (46) 30 20 Size 04BB cType 5 Type 09 colours C7 [0B Xenia Hand] -817 B2937F (46) 30 20 Size 038A cType 5 Type 09 colours B0 [0B Xenia Hand] -818 B29709 (46) 30 20 Size 045F cType 5 Type 09 colours 71 [0B Xenia Hand] -819 B29B68 (46) 20 30 Size 0492 cType 5 Type 09 colours CC [0B Xenia Fist] -81A B29FFA (46) 20 20 Size 030F cType 5 Type 09 colours 5A [0B Xenia Upper Pants] -81B B2A309 (46) 20 30 Size 0409 cType 5 Type 09 colours 60 [0B Xenia Pants] -81C B2A712 (46) 20 30 Size 0396 cType 5 Type 09 colours 8B [0B Xenia Forearms] -81D B2AAA8 (40) 20 40 Size 09AE cType 5 Type 09 colours FF [0B Xenia Head - Front] -81E B2B456 (40) 20 40 Size 07A8 cType 5 Type 09 colours D1 [0B Xenia Head - Right] -81F B2BBFE (40) 20 40 Size 08B2 cType 5 Type 09 colours FF [0B Xenia Head - Left] -820 B2C4B0 (46) 30 20 Size 02DE cType 5 Type 09 colours 28 -821 B2C78E (46) 30 20 Size 03A8 cType 5 Type 09 colours 49 [06 Boris Shoe] -822 B2CB36 (46) 20 30 Size 06B5 cType 5 Type 09 colours FF [0B Xenia Front Torso] -823 B2D1EB (46) 20 30 Size 062A cType 5 Type 09 colours DB [0B Xenia Back] -824 B2D815 (00) 38 38 Size 0007 OTHER Greyscale Type 00 -825 B2D81C (00) 10 0E Size 0008 OTHER Greyscale Type 00 -826 B2D824 (00) 38 38 Size 04DD OTHER Greyscale Type 00 -827 B2DD01 (00) 10 0E Size 0123 OTHER Greyscale Type 00 -828 B2DE24 (00) 38 38 Size 03AF OTHER Greyscale Type 00 -829 B2E1D3 (00) 10 0E Size 00D1 OTHER Greyscale Type 00 -82A B2E2A4 (00) 38 38 Size 0485 OTHER Greyscale Type 00 -82B B2E729 (00) 10 0E Size 00FE OTHER Greyscale Type 00 -82C B2E827 (00) 38 38 Size 0425 OTHER Greyscale Type 00 -82D B2EC4C (00) 10 0E Size 00DA OTHER Greyscale Type 00 -82E B2ED26 (00) 38 38 Size 0313 OTHER Greyscale Type 00 -82F B2F039 (00) 10 0E Size 0078 OTHER Greyscale Type 00 -830 B2F0B1 (00) 38 38 Size 00AA OTHER Greyscale Type 00 -831 B2F15B (00) 10 0E Size 0032 OTHER Greyscale Type 00 -832 B2F18D (00) 38 38 Size 03CB OTHER Greyscale Type 00 -833 B2F558 (00) 10 0E Size 0100 OTHER Greyscale Type 00 -834 B2F658 (00) 38 38 Size 04AC OTHER Greyscale Type 00 -835 B2FB04 (00) 10 0E Size 0112 OTHER Greyscale Type 00 -836 B2FC16 (00) 38 38 Size 0555 OTHER Greyscale Type 00 -837 B3016B (00) 10 0E Size 0120 OTHER Greyscale Type 00 -838 B3028B (00) 38 38 Size 05B3 OTHER Greyscale Type 00 -839 B3083E (00) 10 0E Size 0132 OTHER Greyscale Type 00 -83A B30970 (00) 38 38 Size 05ED OTHER Greyscale Type 00 -83B B30F5D (00) 10 0E Size 0142 OTHER Greyscale Type 00 -83C B3109F (00) 38 38 Size 05AB OTHER Greyscale Type 00 -83D B3164A (00) 10 0E Size 0137 OTHER Greyscale Type 00 -83E B31781 (00) 38 38 Size 0580 OTHER Greyscale Type 00 -83F B31D01 (00) 10 0E Size 0135 OTHER Greyscale Type 00 -840 B31E36 (00) 38 38 Size 0526 OTHER Greyscale Type 00 -841 B3235C (00) 10 0E Size 012D OTHER Greyscale Type 00 -842 B32489 (80) 20 20 Size 08F9 OTHER Greyscale Type 80 -843 B32D82 (80) 20 20 Size 08C6 OTHER Greyscale Type 80 -844 B33648 (80) 20 20 Size 082E OTHER Greyscale Type 80 -845 B33E76 (80) 20 20 Size 08C5 OTHER Greyscale Type 80 -846 B3473B (40) 20 40 Size 019C cType 5 Type 0B colours 1B [010F Bunker Staff List - Right Column] -847 B348D7 (00) 20 20 Size 08FB OTHER Greyscale Type 00 -848 B351D2 (80) 20 20 Size 0761 OTHER Greyscale Type 80 -849 B35933 (80) 20 20 Size 06CB OTHER Greyscale Type 80 -84A B35FFE (80) 20 20 Size 06F2 OTHER Greyscale Type 80 -84B B366F0 (80) 20 20 Size 06D3 OTHER Greyscale Type 80 -84C B36DC3 (80) 20 20 Size 078B OTHER Greyscale Type 80 -84D B3754E (80) 20 20 Size 073C OTHER Greyscale Type 80 -84E B37C8A (80) 20 20 Size 0792 OTHER Greyscale Type 80 -84F B3841C (80) 20 20 Size 0775 OTHER Greyscale Type 80 -850 B38B91 (06) 10 20 Size 047D OTHER Greyscale Type 06 -851 B3900E (00) 40 3F Size 0624 OTHER Greyscale Type 00 -852 B39632 (C0) 20 20 Size 060C cType 1 Type 0B colours FF [(Laser)] -853 B39C3E (C0) 20 20 Size 060C cType 1 Type 0B colours FF [(Laser)] -854 B3A24A (C0) 20 20 Size 060C cType 1 Type 0B colours FF [(Laser)] -855 B3A856 (C0) 20 20 Size 060A cType 3 Type 0B colours FF [(Laser)] -856 B3AE60 (00) 20 20 Size 0BC7 OTHER Greyscale Type 00 -857 B3BA27 (06) 10 20 Size 0514 OTHER Greyscale Type 06 -858 B3BF3B (03) 38 36 Size 0487 OTHER Greyscale Type 03 -859 B3C3C2 (80) 20 20 Size 09FD OTHER Greyscale Type 80 -85A B3CDBF (80) 20 20 Size 095F OTHER Greyscale Type 80 -85B B3D71E (80) 20 20 Size 07C5 OTHER Greyscale Type 80 -85C B3DEE3 (80) 20 20 Size 08A7 OTHER Greyscale Type 80 -85D B3E78A (80) 20 20 Size 0759 OTHER Greyscale Type 80 -85E B3EEE3 (80) 20 20 Size 0690 OTHER Greyscale Type 80 -85F B3F573 (80) 20 20 Size 0664 OTHER Greyscale Type 80 -860 B3FBD7 (80) 20 20 Size 06B3 OTHER Greyscale Type 80 -861 B4028A (80) 20 20 Size 080E OTHER Greyscale Type 80 -862 B40A98 (80) 20 20 Size 079F OTHER Greyscale Type 80 -863 B41237 (80) 20 20 Size 0775 OTHER Greyscale Type 80 -864 B419AC (80) 20 20 Size 077F OTHER Greyscale Type 80 -865 B4212B (80) 20 20 Size 06B9 OTHER Greyscale Type 80 -866 B427E4 (80) 20 20 Size 0646 OTHER Greyscale Type 80 -867 B42E2A (80) 20 20 Size 0649 OTHER Greyscale Type 80 -868 B43473 (80) 20 20 Size 0654 OTHER Greyscale Type 80 -869 B43AC7 (80) 20 20 Size 0580 OTHER Greyscale Type 80 -86A B44047 (80) 20 20 Size 050B OTHER Greyscale Type 80 -86B B44552 (80) 20 20 Size 0505 OTHER Greyscale Type 80 -86C B44A57 (80) 20 20 Size 052B OTHER Greyscale Type 80 -86D B44F82 (80) 20 20 Size 0832 OTHER Greyscale Type 80 -86E B457B4 (80) 20 20 Size 07E7 OTHER Greyscale Type 80 -86F B45F9B (80) 20 20 Size 07D3 OTHER Greyscale Type 80 -870 B4676E (80) 20 20 Size 0787 OTHER Greyscale Type 80 -871 B46EF5 (00) 08 16 Size 021A OTHER Greyscale Type 00 -872 B4710F (00) 10 0E Size 02E8 OTHER Greyscale Type 00 -873 B473F7 (00) 10 12 Size 038E OTHER Greyscale Type 00 -874 B47785 (00) 08 0F Size 0095 OTHER Greyscale Type 00 -875 B4781A (00) 08 15 Size 0283 OTHER Greyscale Type 00 -876 B47A9D (00) 08 18 Size 0201 OTHER Greyscale Type 00 -877 B47C9E (00) 08 14 Size 008E OTHER Greyscale Type 00 -878 B47D2C (06) 30 30 Size 03F9 OTHER Greyscale Type 06 -879 B48125 (07) 40 20 Size 034F OTHER Greyscale Type 07 -87A B48474 (00) 40 40 Size 0658 OTHER Greyscale Type 00 -87B B48ACC (40) 20 20 Size 0474 cType 5 Type 0B colours DA [Gunshot] -87C B48F40 (40) 20 20 Size 021C cType 5 Type 09 colours 44 -87D B4915C (46) 20 20 Size 0529 cType 5 Type 09 colours FF [- Streets] -87E B49685 (46) 20 20 Size 0450 cType 3 Type 09 colours FF -87F B49AD5 (46) 20 20 Size 0457 cType 3 Type 09 colours FF -880 B49F2C (00) 40 40 Size 01E7 OTHER Greyscale Type 00 -881 B4A113 (00) 40 40 Size 04E1 OTHER Greyscale Type 00 -882 B4A5F4 (00) 40 40 Size 019E OTHER Greyscale Type 00 -883 B4A792 (00) 40 40 Size 0284 OTHER Greyscale Type 00 -884 B4AA16 (00) 40 40 Size 039B OTHER Greyscale Type 00 -885 B4ADB1 (00) 40 40 Size 0365 OTHER Greyscale Type 00 -886 B4B116 (00) 40 40 Size 0565 OTHER Greyscale Type 00 -887 B4B67B (00) 40 40 Size 0601 OTHER Greyscale Type 00 -888 B4BC7C (00) 40 40 Size 064C OTHER Greyscale Type 00 -889 B4C2C8 (00) 40 40 Size 063A OTHER Greyscale Type 00 -88A B4C902 (00) 40 40 Size 0645 OTHER Greyscale Type 00 -88B B4CF47 (40) 20 20 Size 038D cType 5 Type 0B colours A9 [Monitor Image - Bond] -88C B4D2D4 (40) 80 10 Size 0399 cType 5 Type 0B colours 75 [Bunker Monitor Text] -88D B4D66D (40) 80 10 Size 045C cType 5 Type 0B colours 8D [Bunker Monitor Text] -88E B4DAC9 (40) 80 10 Size 034E cType 5 Type 0B colours 71 [Bunker Monitor Text] -88F B4DE17 (40) 80 10 Size 040F cType 5 Type 0B colours 84 [Bunker Monitor Text] -890 B4E226 (40) 80 10 Size 042B cType 5 Type 0B colours 94 [Bunker Monitor Text] -891 B4E651 (40) 80 10 Size 0122 cType 5 Type 0B colours 27 [Bunker Monitor, Dead Center Bottom] -892 B4E773 (46) 20 20 Size 05E5 cType 3 Type 09 colours FF [Monitor Image] -893 B4ED58 (46) 20 20 Size 05D3 cType 5 Type 09 colours FF [Monitor Image] -894 B4F32B (46) 20 20 Size 059D cType 5 Type 09 colours FF [Monitor Image] -895 B4F8C8 (46) 20 20 Size 056B cType 5 Type 09 colours FF [Monitor Image] -896 B4FE33 (46) 20 20 Size 0587 cType 5 Type 09 colours FF [Monitor Image] -897 B503BA (46) 20 20 Size 058A cType 5 Type 09 colours FF [Monitor Image] -898 B50944 (45) 10 10 Size 017A cType 3 Type 0B colours 62 -899 B50ABE (46) 20 20 Size 05F7 cType 5 Type 09 colours FF -89A B510B5 (46) 20 20 Size 05F6 cType 5 Type 09 colours FF [Monitor Image] -89B B516AB (46) 20 20 Size 058D cType 5 Type 09 colours FF [Monitor Image] -89C B51C38 (46) 20 20 Size 05D6 cType 5 Type 09 colours FF [Monitor Image] -89D B5220E (46) 20 20 Size 05EA cType 5 Type 09 colours FF -89E B527F8 (46) 20 20 Size 0526 cType 5 Type 09 colours E3 [Monitor Image] -89F B52D1E (40) 20 20 Size 01EB cType 5 Type 0B colours 51 [Monitor Image - Skateboarder 2] -8A0 B52F09 (40) 20 20 Size 01CB cType 5 Type 0B colours 49 [Monitor Image - Skateboarder 3] -8A1 B530D4 (40) 20 20 Size 01EC cType 5 Type 0B colours 56 [Monitor Image - Skateboarder 4] -8A2 B532C0 (46) 20 20 Size 043C cType 5 Type 0B colours 8D [Monitor Image - Karl 1] -8A3 B536FC (46) 20 20 Size 0442 cType 5 Type 0B colours 8D [Monitor Image - Karl 2] -8A4 B53B3E (46) 20 20 Size 043B cType 5 Type 0B colours 8D [Monitor Image - Karl 3] -8A5 B53F79 (46) 20 20 Size 043B cType 5 Type 0B colours 8B [Monitor Image - Karl 4] -8A6 B543B4 (00) 80 30 Size 06B6 OTHER Greyscale Type 00 -8A7 B54A6A (45) 10 10 Size 01B0 cType 3 Type 0B colours 74 -8A8 B54C1A (45) 10 10 Size 01AF cType 3 Type 0B colours 70 -8A9 B54DC9 (45) 10 10 Size 01B1 cType 3 Type 0B colours 73 -8AA B54F7A (40) 20 20 Size 01C2 cType 5 Type 0B colours 4D [Monitor Image - Skateboarder 1] -8AB B5513C (40) 20 20 Size 031B cType 5 Type 0B colours 84 [Monitor Image - Gestapo 1] -8AC B55457 (40) 20 20 Size 0334 cType 5 Type 0B colours 8A [Monitor Image - Gestapo 2] -8AD B5578B (40) 20 20 Size 0330 cType 5 Type 0B colours 8F [Monitor Image - Gestapo 3] -8AE B55ABB (40) 20 20 Size 0345 cType 5 Type 0B colours 85 [Monitor Image - Gestapo 4] -8AF B55E00 (40) 20 20 Size 01C7 cType 5 Type 0B colours 50 [Monitor Image - Sine Wave] -8B0 B55FC7 (40) 20 20 Size 0088 cType 5 Type 0C colours 3 [Monitor Image - Scrolling Text] -8B1 B5604F (40) 20 20 Size 0032 cType 3 Type 0C colours 3 [Monitor Image - Bar Graph] -8B2 B56081 (40) 20 20 Size 0054 cType 5 Type 0C colours 1 -8B3 B560D5 (00) 40 40 Size 0649 OTHER Greyscale Type 00 -8B4 B5671E (00) 40 40 Size 06B1 OTHER Greyscale Type 00 -8B5 B56DCF (00) 40 40 Size 06B5 OTHER Greyscale Type 00 -8B6 B57484 (00) 40 40 Size 0468 OTHER Greyscale Type 00 -8B7 B578EC (00) 08 0C Size 00BA OTHER Greyscale Type 00 -8B8 B579A6 (00) 08 1C Size 018B OTHER Greyscale Type 00 -8B9 B57B31 (00) 08 0C Size 008F OTHER Greyscale Type 00 -8BA B57BC0 (00) 10 0E Size 02DF OTHER Greyscale Type 00 -8BB B57E9F (00) 10 0E Size 02E1 OTHER Greyscale Type 00 -8BC B58180 (00) 20 20 Size 0403 OTHER Greyscale Type 00 -8BD B58583 (00) 20 20 Size 01AE OTHER Greyscale Type 00 -8BE B58731 (00) 10 0E Size 02E0 OTHER Greyscale Type 00 -8BF B58A11 (C0) 40 20 Size 09E1 cType 5 Type 09 colours FF [- Control] -8C0 B593F2 (C0) 40 20 Size 09F3 cType 5 Type 09 colours FF [- Control] -8C1 B59DE5 (07) 40 40 Size 05B5 OTHER Greyscale Type 07 -8C2 B5A39A (07) 40 40 Size 04C4 OTHER Greyscale Type 07 -8C3 B5A85E (46) 20 20 Size 0458 cType 3 Type 09 colours E4 -8C4 B5ACB6 (07) 40 20 Size 077D OTHER Greyscale Type 07 -8C5 B5B433 (00) 40 40 Size 0BD2 OTHER Greyscale Type 00 -8C6 B5C005 (07) 40 20 Size 09CF OTHER Greyscale Type 07 -8C7 B5C9D4 (07) 40 20 Size 0683 OTHER Greyscale Type 07 -8C8 B5D057 (46) 20 20 Size 0370 cType 5 Type 09 colours 7D -8C9 B5D3C7 (00) 80 2F Size 0C8B OTHER Greyscale Type 00 -8CA B5E052 (46) 20 20 Size 05DB cType 5 Type 09 colours FF [Monitor Image - Brosnan] -8CB B5E62D (46) 20 20 Size 05E4 cType 5 Type 09 colours FF [Monitor Image - Connery] -8CC B5EC11 (46) 20 20 Size 0594 cType 5 Type 09 colours FF [Monitor Image - Dalton] -8CD B5F1A5 (46) 20 20 Size 059B cType 5 Type 09 colours FF [Monitor Image - Moore] -8CE B5F740 (07) 40 20 Size 0412 OTHER Greyscale Type 07 -8CF B5FB52 (46) 20 20 Size 01DE cType 5 Type 09 colours 31 -8D0 B5FD30 (07) 40 20 Size 02DB OTHER Greyscale Type 07 -8D1 B6000B (07) 40 20 Size 032B OTHER Greyscale Type 07 -8D2 B60336 (07) 40 20 Size 035C OTHER Greyscale Type 07 -8D3 B60692 (07) 40 40 Size 02B3 OTHER Greyscale Type 07 -8D4 B60945 (07) 40 20 Size 083A OTHER Greyscale Type 07 -8D5 B6117F (00) 40 40 Size 059E OTHER Greyscale Type 00 -8D6 B6171D (07) 40 20 Size 06EA OTHER Greyscale Type 07 -8D7 B61E07 (00) 38 36 Size 01AA OTHER Greyscale Type 00 -8D8 B61FB1 (46) 20 20 Size 0350 cType 5 Type 09 colours 45 [- Control] -8D9 B62301 (46) 20 20 Size 049B cType 5 Type 09 colours 98 [- Control] -8DA B6279C (C6) 40 11 Size 0700 cType 5 Type 09 colours C1 [- Control] -8DB B62E9C (C6) 40 11 Size 07CF cType 5 Type 09 colours EC [- Control] -8DC B6366B (C6) 40 11 Size 07CB cType 5 Type 09 colours FF [- Control] -8DD B63E36 (C6) 40 11 Size 06D5 cType 5 Type 09 colours BF [- Control] -8DE B6450B (C6) 40 11 Size 04F4 cType 5 Type 09 colours 6A [- Control] -8DF B649FF (C6) 40 11 Size 04AD cType 5 Type 09 colours 57 [- Control] -8E0 B64EAC (46) 20 20 Size 0210 cType 5 Type 09 colours 37 [(Grenade)] -8E1 B650BC (07) 40 20 Size 0342 OTHER Greyscale Type 07 -8E2 B653FE (46) 20 20 Size 00A7 cType 5 Type 09 colours 1B [Top of Grenade(Grenade)] -8E3 B654A5 (07) 20 40 Size 01C0 OTHER Greyscale Type 07 -8E4 B65665 (07) 40 20 Size 0353 OTHER Greyscale Type 07 -8E5 B659B8 (46) 20 20 Size 040C cType 5 Type 09 colours 69 [006C,006D,013E Jungle Tree Bark] -8E6 B65DC4 (46) 20 20 Size 03BA cType 5 Type 09 colours AE -8E7 B6617E (40) 20 20 Size 0400 cType 5 Type 09 colours 66 -8E8 B6657E (00) 40 40 Size 0E3E OTHER Greyscale Type 00 -8E9 B673BC (40) 40 20 Size 0422 cType 5 Type 09 colours 47 -8EA B677DE (40) 20 20 Size 0400 cType 5 Type 09 colours 66 -8EB B67BDE (40) 20 20 Size 0295 cType 5 Type 09 colours 29 -8EC B67E73 (00) 40 40 Size 05D5 OTHER Greyscale Type 00 -8ED B68448 (46) 20 20 Size 0223 cType 5 Type 09 colours 18 [0073 Back of Body Armour] -8EE B6866B (C0) 20 20 Size 0258 cType 5 Type 09 colours 1A [0073 Body Armour] -8EF B688C3 (C0) 20 20 Size 0242 cType 5 Type 09 colours 19 [0073 Body Armour] -8F0 B68B05 (C0) 20 20 Size 01BA cType 5 Type 09 colours 14 [0073 Body Armour] -8F1 B68CBF (C0) 20 20 Size 01D3 cType 5 Type 09 colours 13 [0073 Body Armour] -8F2 B68E92 (45) 10 10 Size 00FC cType 5 Type 0B colours 39 [00D2 Lens on Sniper Sight] -8F3 B68F8E (45) 10 10 Size 01EE cType 3 Type 0B colours 80 [00D2 Sniper Nozzle] -8F4 B6917C (45) 10 10 Size 01BA cType 5 Type 0B colours 67 [00D2 Section of Sniper Sight Mount] -8F5 B69336 (07) 40 20 Size 01EB OTHER Greyscale Type 07 -8F6 B69521 (46) 20 20 Size 023E cType 5 Type 09 colours 1B -8F7 B6975F (07) 40 20 Size 0563 OTHER Greyscale Type 07 -8F8 B69CC2 (07) 40 20 Size 01BB OTHER Greyscale Type 07 -8F9 B69E7D (07) 40 20 Size 018D OTHER Greyscale Type 07 -8FA B6A00A (07) 40 20 Size 0280 OTHER Greyscale Type 07 -8FB B6A28A (46) 20 20 Size 009D cType 5 Type 09 colours 12 -8FC B6A327 (46) 20 20 Size 0314 cType 5 Type 09 colours 4D -8FD B6A63B (07) 40 20 Size 03C7 OTHER Greyscale Type 07 -8FE B6AA02 (46) 20 20 Size 0561 cType 3 Type 09 colours FF -8FF B6AF63 (07) 40 20 Size 03E3 OTHER Greyscale Type 07 -900 B6B346 (46) 20 20 Size 04DF cType 3 Type 09 colours FF -901 B6B825 (07) 20 40 Size 042C OTHER Greyscale Type 07 -902 B6BC51 (46) 20 20 Size 0604 cType 1 Type 09 colours FB -903 B6C255 (46) 20 20 Size 00F1 cType 5 Type 09 colours 13 -904 B6C346 (07) 20 40 Size 0337 OTHER Greyscale Type 07 -905 B6C67D (07) 40 20 Size 044A OTHER Greyscale Type 07 -906 B6CAC7 (46) 20 20 Size 04FF cType 5 Type 09 colours C2 -907 B6CFC6 (46) 20 20 Size 0197 cType 5 Type 0A colours C -908 B6D15D (07) 40 20 Size 02FF OTHER Greyscale Type 07 -909 B6D45C (46) 20 20 Size 02AC cType 5 Type 09 colours 1B -90A B6D708 (46) 20 20 Size 0306 cType 5 Type 09 colours 32 -90B B6DA0E (46) 20 20 Size 03E4 cType 5 Type 09 colours 6F -90C B6DDF2 (46) 20 20 Size 0289 cType 5 Type 09 colours 75 -90D B6E07B (46) 20 20 Size 029A cType 5 Type 09 colours 1C -90E B6E315 (46) 20 20 Size 04AF cType 5 Type 09 colours 9D -90F B6E7C4 (46) 20 20 Size 043F cType 5 Type 09 colours 79 -910 B6EC03 (46) 20 20 Size 03F0 cType 5 Type 09 colours 68 -911 B6EFF3 (46) 20 20 Size 03F4 cType 5 Type 09 colours AF -912 B6F3E7 (46) 20 20 Size 041F cType 5 Type 09 colours 8D -913 B6F806 (46) 20 20 Size 03C6 cType 5 Type 09 colours 71 -914 B6FBCC (46) 20 20 Size 041D cType 5 Type 09 colours AE -915 B6FFE9 (46) 20 20 Size 02D0 cType 5 Type 09 colours 7A -916 B702B9 (46) 20 20 Size 0293 cType 5 Type 09 colours 75 -917 B7054C (46) 20 20 Size 03E6 cType 5 Type 09 colours A7 -918 B70932 (46) 20 20 Size 020E cType 5 Type 09 colours 49 -919 B70B40 (46) 20 20 Size 0377 cType 3 Type 09 colours BC -91A B70EB7 (46) 20 20 Size 039B cType 3 Type 09 colours BC -91B B71252 (46) 20 20 Size 051C cType 3 Type 09 colours FC -91C B7176E (07) 40 20 Size 02B2 OTHER Greyscale Type 07 -91D B71A20 (46) 20 20 Size 0504 cType 5 Type 09 colours A5 -91E B71F24 (46) 20 20 Size 05AD cType 5 Type 09 colours DA -91F B724D1 (46) 20 20 Size 02E3 cType 5 Type 09 colours 95 -920 B727B4 (46) 20 20 Size 03FF cType 5 Type 09 colours BA -921 B72BB3 (46) 20 20 Size 01A7 cType 5 Type 09 colours 5B -922 B72D5A (46) 20 20 Size 02C2 cType 3 Type 09 colours AE -923 B7301C (46) 20 20 Size 00ED cType 5 Type 09 colours 16 [0128 Satellite Dish Tip of Array] -924 B73109 (46) 20 20 Size 02D2 cType 5 Type 09 colours 55 [15 Siberian Special Forces Mouthguard] -925 B733DB (46) 20 20 Size 0504 cType 5 Type 09 colours D6 [15 Siberian Special Forces Eye] -926 B738DF (40) 20 20 Size 043D cType 5 Type 09 colours 73 -927 B73D1C (46) 20 20 Size 0419 cType 5 Type 09 colours 69 -928 B74135 (07) 40 40 Size 02B5 OTHER Greyscale Type 07 -929 B743EA (46) 20 20 Size 060C cType 1 Type 09 colours FF -92A B749F6 (07) 40 20 Size 029D OTHER Greyscale Type 07 -92B B74C93 (07) 40 20 Size 04EE OTHER Greyscale Type 07 -92C B75181 (46) 20 20 Size 04F1 cType 5 Type 09 colours D4 [0120 Tank Back Panel] -92D B75672 (46) 20 20 Size 0236 cType 5 Type 09 colours 5E [0120 Tank Ends of Drive] -92E B758A8 (46) 20 20 Size 0354 cType 5 Type 09 colours 5A [0120 Tank Top Rear Panel] -92F B75BFC (46) 20 20 Size 028E cType 5 Type 09 colours 5D [0120 Tank Upper Ridge] -930 B75E8A (07) 40 40 Size 03FA OTHER Greyscale Type 07 -931 B76284 (07) 40 40 Size 04D2 OTHER Greyscale Type 07 -932 B76756 (07) 20 40 Size 0584 OTHER Greyscale Type 07 -933 B76CDA (07) 40 40 Size 03FE OTHER Greyscale Type 07 -934 B770D8 (07) 40 40 Size 04AB OTHER Greyscale Type 07 -935 B77583 (07) 40 40 Size 0474 OTHER Greyscale Type 07 -936 B779F7 (07) 40 40 Size 0470 OTHER Greyscale Type 07 -937 B77E67 (07) 40 40 Size 0440 OTHER Greyscale Type 07 -938 B782A7 (07) 40 40 Size 04CC OTHER Greyscale Type 07 -939 B78773 (07) 40 40 Size 04CF OTHER Greyscale Type 07 -93A B78C42 (46) 20 20 Size 04A7 cType 5 Type 09 colours 98 -93B B790E9 (46) 20 20 Size 018A cType 5 Type 09 colours 24 -93C B79273 (46) 20 20 Size 01A6 cType 5 Type 09 colours 28 -93D B79419 (46) 20 20 Size 014A cType 5 Type 09 colours 23 -93E B79563 (46) 20 20 Size 0383 cType 5 Type 09 colours 71 -93F B798E6 (46) 20 20 Size 01FC cType 5 Type 09 colours 2C -940 B79AE2 (46) 20 20 Size 0185 cType 5 Type 09 colours 25 -941 B79C67 (46) 20 20 Size 03D1 cType 5 Type 09 colours 69 [0140-0144 St.Pete Building Ground Level] -942 B7A038 (46) 20 20 Size 04B4 cType 5 Type 09 colours 99 -943 B7A4EC (46) 20 30 Size 0575 cType 5 Type 09 colours FF [Background Window - Archives,Streets] -944 B7AA61 (46) 20 30 Size 040D cType 5 Type 09 colours 8C [Background Window - Archives,Streets] -945 B7AE6E (46) 20 30 Size 07F3 cType 5 Type 09 colours FF [Propaganda - Archives] -946 B7B661 (07) 40 20 Size 062D OTHER Greyscale Type 07 -947 B7BC8E (46) 20 20 Size 030C cType 5 Type 09 colours 58 -948 B7BF9A (46) 20 20 Size 0416 cType 5 Type 09 colours 70 -949 B7C3B0 (46) 20 20 Size 0444 cType 5 Type 09 colours 84 -94A B7C7F4 (07) 40 20 Size 01AA OTHER Greyscale Type 07 -94B B7C99E (46) 20 20 Size 0221 cType 5 Type 09 colours 66 -94C B7CBBF (07) 20 40 Size 0648 OTHER Greyscale Type 07 -94D B7D207 (46) 20 20 Size 0420 cType 5 Type 09 colours C8 [0140-0144 St.Pete Building Arch- Archives,Streets] -94E B7D627 (46) 20 20 Size 03FD cType 5 Type 09 colours 68 [- Streets] -94F B7DA24 (46) 20 20 Size 0403 cType 5 Type 09 colours 67 [- Streets] -950 B7DE27 (46) 20 20 Size 0408 cType 5 Type 09 colours 76 [- Streets] -951 B7E22F (46) 20 20 Size 0455 cType 5 Type 09 colours 83 -952 B7E684 (46) 20 20 Size 03FC cType 5 Type 09 colours 73 [- Streets] -953 B7EA80 (46) 20 20 Size 0408 cType 5 Type 09 colours A9 -954 B7EE88 (46) 20 20 Size 0313 cType 5 Type 09 colours 70 -955 B7F19B (46) 20 20 Size 032D cType 5 Type 09 colours 50 -956 B7F4C8 (46) 20 20 Size 027B cType 5 Type 09 colours 7D -957 B7F743 (46) 20 20 Size 02B5 cType 5 Type 09 colours 76 -958 B7F9F8 (46) 20 20 Size 051A cType 5 Type 09 colours F7 -959 B7FF12 (46) 20 20 Size 03E4 cType 5 Type 09 colours 9C -95A B802F6 (46) 20 20 Size 0293 cType 5 Type 09 colours 68 -95B B80589 (46) 20 20 Size 038C cType 5 Type 09 colours 58 -95C B80915 (46) 20 20 Size 0493 cType 5 Type 09 colours B8 -95D B80DA8 (46) 20 20 Size 0316 cType 5 Type 09 colours 51 -95E B810BE (46) 20 20 Size 02DA cType 5 Type 09 colours 54 -95F B81398 (46) 20 20 Size 02B6 cType 5 Type 09 colours 75 -960 B8164E (46) 20 20 Size 0304 cType 5 Type 09 colours 81 -961 B81952 (07) 40 20 Size 028E OTHER Greyscale Type 07 -962 B81BE0 (46) 20 20 Size 037F cType 5 Type 09 colours 5B -963 B81F5F (46) 20 20 Size 060C cType 1 Type 09 colours FF -964 B8256B (47) 10 40 Size 060C cType 1 Type 09 colours FF -965 B82B77 (46) 20 20 Size 03BE cType 5 Type 09 colours 6A -966 B82F35 (47) 10 40 Size 060C cType 1 Type 09 colours FF -967 B83541 (07) 20 40 Size 0254 OTHER Greyscale Type 07 -968 B83795 (46) 20 20 Size 04C9 cType 5 Type 09 colours FF [- Streets] -969 B83C5E (46) 20 20 Size 060C cType 7 Type 09 colours FF -96A B8426A (C6) 21 21 Size 063F cType 3 Type 09 colours FF [Flecked Paint- Streets] -96B B848A9 (C6) 21 21 Size 05F1 cType 3 Type 09 colours FF -96C B84E9A (C6) 21 21 Size 06FF cType 5 Type 09 colours FF -96D B85599 (C6) 21 21 Size 063A cType 3 Type 09 colours FF [Flecked Paint- Streets] -96E B85BD3 (07) 20 40 Size 02EA OTHER Greyscale Type 07 -96F B85EBD (46) 20 20 Size 041F cType 5 Type 09 colours 84 [014E Barrier Legs] -970 B862DC (46) 20 20 Size 033D cType 3 Type 09 colours B7 -971 B86619 (07) 40 20 Size 03A5 OTHER Greyscale Type 07 -972 B869BE (46) 20 20 Size 032E cType 5 Type 09 colours 52 -973 B86CEC (46) 20 20 Size 03FA cType 5 Type 09 colours B3 -974 B870E6 (07) 40 20 Size 0361 OTHER Greyscale Type 07 -975 B87447 (C6) 21 21 Size 071A cType 3 Type 09 colours FF [Graffitti Part 1- Streets] -976 B87B61 (C6) 21 21 Size 0794 cType 5 Type 09 colours FF [Graffitti Part 2- Streets] -977 B882F5 (C6) 21 21 Size 06A2 cType 3 Type 09 colours FF [Graffitti Part 3- Streets -978 B88997 (46) 20 30 Size 0221 cType 5 Type 09 colours 58 [0140-144 Broken Window - Streets] -979 B88BB8 (46) 20 20 Size 03F8 cType 5 Type 09 colours 7F -97A B88FB0 (46) 20 20 Size 031C cType 5 Type 09 colours 36 -97B B892CC (40) 20 20 Size 01F1 cType 5 Type 09 colours 13 [012B Ground Autogun Shell] -97C B894BD (07) 20 40 Size 00C2 OTHER Greyscale Type 07 -97D B8957F (07) 10 80 Size 020A OTHER Greyscale Type 07 -97E B89789 (01) 40 20 Size 05C9 OTHER Greyscale Type 01 -97F B89D52 (07) 40 20 Size 00AB OTHER Greyscale Type 07 -980 B89DFD (07) 40 20 Size 0136 OTHER Greyscale Type 07 -981 B89F33 (07) 40 20 Size 0356 OTHER Greyscale Type 07 -982 B8A289 (07) 40 20 Size 0311 OTHER Greyscale Type 07 -983 B8A59A (46) 20 40 Size 05CD cType 3 Type 09 colours FF -984 B8AB67 (07) 40 20 Size 01E1 OTHER Greyscale Type 07 -985 B8AD48 (07) 40 20 Size 0353 OTHER Greyscale Type 07 -986 B8B09B (07) 40 20 Size 0307 OTHER Greyscale Type 07 -987 B8B3A2 (07) 40 20 Size 017A OTHER Greyscale Type 07 -988 B8B51C (46) 20 20 Size 05B9 cType 5 Type 09 colours FF [012E Escort Taillights] -989 B8BAD5 (07) 40 20 Size 033C OTHER Greyscale Type 07 -98A B8BE11 (07) 40 20 Size 0374 OTHER Greyscale Type 07 -98B B8C185 (07) 40 20 Size 03F5 OTHER Greyscale Type 07 -98C B8C57A (07) 40 20 Size 046C OTHER Greyscale Type 07 -98D B8C9E6 (07) 40 20 Size 0302 OTHER Greyscale Type 07 -98E B8CCE8 (07) 40 20 Size 04A6 OTHER Greyscale Type 07 -98F B8D18E (07) 40 20 Size 03B1 OTHER Greyscale Type 07 -990 B8D53F (46) 20 20 Size 02A9 cType 5 Type 09 colours AE [0130 Weird Car Grill] -991 B8D7E8 (46) 20 20 Size 0223 cType 3 Type 09 colours 9E [0130 Weird Car Turn Signals] -992 B8DA0B (46) 20 20 Size 00A5 cType 5 Type 09 colours 24 [0130 Weird Car Back End] -993 B8DAB0 (46) 20 20 Size 0492 cType 3 Type 09 colours FF [0130 Weird Car Taillights] -994 B8DF42 (46) 20 20 Size 00C4 cType 5 Type 09 colours 31 [0130 Weird Car Pinstriping] -995 B8E006 (46) 20 20 Size 01BC cType 5 Type 09 colours 27 [0130 Weird Car Hood,Cab] -996 B8E1C2 (07) 40 40 Size 0439 OTHER Greyscale Type 07 -997 B8E5FB (07) 40 20 Size 02FC OTHER Greyscale Type 07 -998 B8E8F7 (07) 40 20 Size 0308 OTHER Greyscale Type 07 -999 B8EBFF (46) 20 20 Size 0055 cType 3 Type 09 colours 10 [0131 Ouromov's Car Wheelwells] -99A B8EC54 (46) 20 20 Size 020F cType 5 Type 09 colours 58 [0131 Ouromov's Car Taillights] -99B B8EE63 (46) 20 20 Size 010C cType 5 Type 0A colours F [0131 Ouromov's Car Car Body] -99C B8EF6F (07) 40 20 Size 0171 OTHER Greyscale Type 07 -99D B8F0E0 (46) 20 20 Size 03AE cType 5 Type 09 colours BC [0131 Ouromov's Car Headlights] -99E B8F48E (07) 40 20 Size 0714 OTHER Greyscale Type 07 -99F B8FBA2 (07) 80 10 Size 00B6 OTHER Greyscale Type 07 -9A0 B8FC58 (40) 07 16 Size 00E1 cType 3 Type 0B colours 42 [Tank - Ammo Type Indicator -9A1 B8FD39 (00) 20 20 Size 0213 OTHER Greyscale Type 00 -9A2 B8FF4C (46) 20 20 Size 0270 cType 5 Type 09 colours 30 [Ceiling - Temple] -9A3 B901BC (07) 20 40 Size 0567 OTHER Greyscale Type 07 -9A4 B90723 (07) 40 40 Size 04F3 OTHER Greyscale Type 07 -9A5 B90C16 (46) 20 20 Size 015A cType 5 Type 0A colours C [0139 Land Mine Top] -9A6 B90D70 (46) 20 20 Size 01A2 cType 5 Type 09 colours 17 [0139 Land Mine Sides] -9A7 B90F12 (07) 20 40 Size 0252 OTHER Greyscale Type 07 -9A8 B91164 (46) 20 20 Size 0288 cType 5 Type 09 colours 41 [Ceiling Tile - Complex] -9A9 B913EC (46) 20 20 Size 035B cType 5 Type 09 colours 54 [Vents - Complex] -9AA B91747 (07) 40 40 Size 0514 OTHER Greyscale Type 07 -9AB B91C5B (07) 40 20 Size 0236 OTHER Greyscale Type 07 -9AC B91E91 (40) 20 40 Size 0838 cType 5 Type 0B colours FF -9AD B926C9 (46) 20 20 Size 03AC cType 5 Type 0B colours 63 -9AE B92A75 (46) 20 20 Size 0358 cType 5 Type 09 colours 82 -9AF B92DCD (46) 20 20 Size 02F4 cType 5 Type 09 colours 76 -9B0 B930C1 (46) 20 20 Size 01BE cType 5 Type 09 colours 5D -9B1 B9327F (46) 20 20 Size 0172 cType 5 Type 09 colours 16 -9B2 B933F1 (46) 20 20 Size 034D cType 5 Type 09 colours 4F -9B3 B9373E (07) 40 40 Size 055A OTHER Greyscale Type 07 -9B4 B93C98 (46) 20 20 Size 0593 cType 5 Type 09 colours E5 [006C Jungle Broad-Leaved Tree Leaves] -9B5 B9422B (46) 20 20 Size 02E2 cType 5 Type 09 colours 57 [006C Jungle Broad-Leaved Tree Central Leaf Fill] -9B6 B9450D (07) 40 40 Size 024F OTHER Greyscale Type 07 -9B7 B9475C (46) 20 20 Size 02DB cType 5 Type 09 colours 31 [006C Jungle Broad-Leaved Tree Roots] -9B8 B94A37 (46) 20 20 Size 04EF cType 5 Type 09 colours CD [006D,013C Broad Palm Fronds] -9B9 B94F26 (46) 20 20 Size 04D0 cType 5 Type 09 colours FF [006E Palm Frond] -9BA B953F6 (46) 20 20 Size 035D cType 5 Type 09 colours 49 [006E Palm Stalk] -9BB B95753 (40) 20 20 Size 0391 cType 5 Type 09 colours 93 -9BC B95AE4 (40) 16 16 Size 000F cType 3 Type 0C colours 0 -9BD B95AF3 (46) 20 20 Size 0552 cType 3 Type 09 colours FF [013A,013B Jungle Bush 1 & 1.1] -9BE B96045 (46) 20 20 Size 01D8 cType 5 Type 09 colours 54 [013C Single-Leaved Plants Stalk] -9BF B9621D (46) 20 20 Size 050D cType 3 Type 09 colours FF [013D Jungle Bush 3 Leaves] -9C0 B9672A (07) 40 40 Size 05A8 OTHER Greyscale Type 07 -9C1 B96CD2 (07) 40 40 Size 04D7 OTHER Greyscale Type 07 -9C2 B971A9 (46) 20 20 Size 038A cType 5 Type 09 colours 63 [4F Natalya Front] -9C3 B97533 (46) 20 20 Size 02E3 cType 5 Type 09 colours 35 [4F Natalya Sleeve] -9C4 B97816 (46) 20 20 Size 046A cType 5 Type 09 colours 9F [4F Natalya Crotch] -9C5 B97C80 (46) 20 20 Size 042F cType 5 Type 09 colours A2 [4F Natalya Butt] -9C6 B980AF (46) 20 20 Size 0391 cType 5 Type 09 colours 6F [4F Natalya Back] -9C7 B98440 (40) 20 40 Size 0918 cType 5 Type 09 colours FF [Ken - UNUSED] -9C8 B98D58 (40) 20 40 Size 08AC cType 1 Type 09 colours FF [43 Ken - Right] -9C9 B99604 (40) 20 40 Size 0924 cType 5 Type 09 colours FF [43 Ken - Left] -9CA B99F28 (40) 20 40 Size 098B cType 5 Type 09 colours FF [44 Joe2 - Left] -9CB B9A8B3 (40) 20 40 Size 09BB cType 5 Type 09 colours FF [44 Joe2 - Front] -9CC B9B26E (40) 20 40 Size 099B cType 5 Type 09 colours FF [44 Joe2 - Right] -9CD B9BC09 (46) 20 20 Size 05BD cType 5 Type 09 colours E7 [- Jungle] -9CE B9C1C6 (82) 80 0C Size 0406 OTHER Greyscale Type 82 -9CF B9C5CC (82) 80 0C Size 0429 OTHER Greyscale Type 82 -9D0 B9C9F5 (82) 80 0C Size 0469 OTHER Greyscale Type 82 -9D1 B9CE5E (82) 80 0C Size 0457 OTHER Greyscale Type 82 -9D2 B9D2B5 (82) 80 0C Size 037C OTHER Greyscale Type 82 -9D3 B9D631 (82) 80 0C Size 0535 OTHER Greyscale Type 82 -9D4 B9DB66 (82) 80 0C Size 0769 OTHER Greyscale Type 82 -9D5 B9E2CF (82) 80 0C Size 07B0 OTHER Greyscale Type 82 -9D6 B9EA7F (82) 80 0C Size 0797 OTHER Greyscale Type 82 -9D7 B9F216 (82) 80 0C Size 06F4 OTHER Greyscale Type 82 -9D8 B9F90A (82) 80 0C Size 05DF OTHER Greyscale Type 82 -9D9 B9FEE9 (83) 80 0C Size 0747 OTHER Greyscale Type 83 -9DA BA0630 (83) 80 0C Size 082F OTHER Greyscale Type 83 -9DB BA0E5F (83) 80 0C Size 098A OTHER Greyscale Type 83 -9DC BA17E9 (C3) 80 0C Size 091A cType 5 Type 09 colours FF -9DD BA2103 (C0) 80 0C Size 06F5 cType 5 Type 09 colours E3 -9DE BA27F8 (C7) 80 0B Size 03D4 cType 5 Type 09 colours 1B -9DF BA2BCC (C7) 80 0B Size 0452 cType 5 Type 09 colours 27 -9E0 BA301E (C7) 80 0B Size 04E7 cType 5 Type 09 colours 50 -9E1 BA3505 (C7) 80 0B Size 0807 cType 5 Type 09 colours B0 -9E2 BA3D0C (C7) 80 0B Size 07A9 cType 5 Type 09 colours A6 -9E3 BA44B5 (C3) 80 0B Size 069F cType 5 Type 09 colours 88 -9E4 BA4B54 (C3) 80 0B Size 08CD cType 5 Type 09 colours FF -9E5 BA5421 (C0) 80 0B Size 06FA cType 5 Type 09 colours FF -9E6 BA5B1B (07) 40 20 Size 0306 OTHER Greyscale Type 07 -9E7 BA5E21 (46) 20 20 Size 044B cType 3 Type 09 colours 81 [- Jungle] -9E8 BA626C (07) 40 20 Size 0412 OTHER Greyscale Type 07 -9E9 BA667E (00) C0 20 Size 07EB OTHER Greyscale Type 00 -9EA BA6E69 (00) 80 40 Size 0925 OTHER Greyscale Type 00 -9EB BA778E (00) 80 40 Size 0959 OTHER Greyscale Type 00 -9EC BA80E7 (00) 80 40 Size 09A1 OTHER Greyscale Type 00 -9ED BA8A88 (00) 80 40 Size 0950 OTHER Greyscale Type 00 -9EE BA93D8 (00) 80 40 Size 077E OTHER Greyscale Type 00 -9EF BA9B56 (00) 80 40 Size 0A2E OTHER Greyscale Type 00 -9F0 BAA584 (00) 80 40 Size 08CB OTHER Greyscale Type 00 -9F1 BAAE4F (00) 80 40 Size 091E OTHER Greyscale Type 00 -9F2 BAB76D (00) 80 40 Size 090F OTHER Greyscale Type 00 -9F3 BAC07C (00) 80 40 Size 08E8 OTHER Greyscale Type 00 -9F4 BAC964 (00) 80 40 Size 07A9 OTHER Greyscale Type 00 -9F5 BAD10D (00) 80 40 Size 09E0 OTHER Greyscale Type 00 -9F6 BADAED (00) 80 40 Size 08BB OTHER Greyscale Type 00 -9F7 BAE3A8 (00) 80 40 Size 0913 OTHER Greyscale Type 00 -9F8 BAECBB (00) 80 40 Size 06B5 OTHER Greyscale Type 00 -9F9 BAF370 (00) 80 40 Size 083D OTHER Greyscale Type 00 -9FA BAFBAD (00) 80 40 Size 085D OTHER Greyscale Type 00 -9FB BB040A (00) 80 40 Size 0840 OTHER Greyscale Type 00 -9FC BB0C4A (00) 80 40 Size 062A OTHER Greyscale Type 00 -9FD BB1274 (00) 80 40 Size 0677 OTHER Greyscale Type 00 -9FE BB18EB (00) 80 40 Size 0407 OTHER Greyscale Type 00 -9FF BB1CF2 (00) 80 40 Size 08B7 OTHER Greyscale Type 00 -A00 BB25A9 (00) 80 40 Size 08ED OTHER Greyscale Type 00 -A01 BB2E96 (00) 80 40 Size 0934 OTHER Greyscale Type 00 -A02 BB37CA (00) 80 40 Size 0730 OTHER Greyscale Type 00 -A03 BB3EFA (00) 80 40 Size 0701 OTHER Greyscale Type 00 -A04 BB45FB (00) 80 40 Size 0785 OTHER Greyscale Type 00 -A05 BB4D80 (00) 80 40 Size 0862 OTHER Greyscale Type 00 -A06 BB55E2 (00) 80 40 Size 0799 OTHER Greyscale Type 00 -A07 BB5D7B (00) 80 40 Size 086E OTHER Greyscale Type 00 -A08 BB65E9 (00) 80 40 Size 071B OTHER Greyscale Type 00 -A09 BB6D04 (00) 80 40 Size 05F3 OTHER Greyscale Type 00 -A0A BB72F7 (00) 80 40 Size 0733 OTHER Greyscale Type 00 -A0B BB7A2A (00) 80 40 Size 0758 OTHER Greyscale Type 00 -A0C BB8182 (00) 80 40 Size 0A27 OTHER Greyscale Type 00 -A0D BB8BA9 (00) 80 40 Size 0AA4 OTHER Greyscale Type 00 -A0E BB964D (00) 80 40 Size 0761 OTHER Greyscale Type 00 -A0F BB9DAE (00) 80 40 Size 06F4 OTHER Greyscale Type 00 -A10 BBA4A2 (00) 80 40 Size 0632 OTHER Greyscale Type 00 -A11 BBAAD4 (00) 80 40 Size 068B OTHER Greyscale Type 00 -A12 BBB15F (00) 48 2C Size 097D OTHER Greyscale Type 00 [Archives Stage Select Picture] -A13 BBBADC (00) 48 2C Size 0A2E OTHER Greyscale Type 00 [Control Stage Select Picture] -A14 BBC50A (00) 48 2C Size 0998 OTHER Greyscale Type 00 [Facility Stage Select Picture] -A15 BBCEA2 (00) 48 2C Size 09AE OTHER Greyscale Type 00 [Aztec Stage Select Picture] -A16 BBD850 (00) 48 2C Size 09A5 OTHER Greyscale Type 00 [Water Caverns Stage Select Picture] -A17 BBE1F5 (00) 48 2C Size 08AD OTHER Greyscale Type 00 [Cradle Stage Select Picture] -A18 BBEAA2 (00) 48 2C Size 0998 OTHER Greyscale Type 00 [Egypt Stage Select Picture] -A19 BBF43A (00) 48 2C Size 081C OTHER Greyscale Type 00 [Dam Stage Select Picture] -A1A BBFC56 (00) 48 2C Size 08EE OTHER Greyscale Type 00 [Depot Stage Select Picture] -A1B BC0544 (00) 48 2C Size 07DD OTHER Greyscale Type 00 [Frigate Stage Select Picture] -A1C BC0D21 (00) 48 2C Size 0884 OTHER Greyscale Type 00 [Jungle Stage Select Picture] -A1D BC15A5 (00) 48 2C Size 0979 OTHER Greyscale Type 00 [Streets Stage Select Picture] -A1E BC1F1E (00) 48 2C Size 0864 OTHER Greyscale Type 00 [Runway Stage Select Picture] -A1F BC2782 (00) 48 2C Size 091F OTHER Greyscale Type 00 [Bunker 1 Stage Select Picture] -A20 BC30A1 (00) 48 2C Size 08B6 OTHER Greyscale Type 00 [Bunker 2 Stage Select Picture] -A21 BC3957 (00) 48 2C Size 0758 OTHER Greyscale Type 00 [Surface 1 Stage Select Picture] -A22 BC40AF (00) 48 2C Size 0833 OTHER Greyscale Type 00 [Surface 2 Stage Select Picture] -A23 BC48E2 (00) 48 2C Size 0A6E OTHER Greyscale Type 00 [Silo Stage Select Picture] -A24 BC5350 (00) 48 2C Size 0837 OTHER Greyscale Type 00 [Statue Stage Select Picture] -A25 BC5B87 (00) 48 2C Size 08E6 OTHER Greyscale Type 00 [Train Stage Select Picture] -A26 BC646D (87) 50 41 Size 0529 OTHER Greyscale Type 87 -A27 BC6996 (87) 50 41 Size 051E OTHER Greyscale Type 87 -A28 BC6EB4 (87) 50 41 Size 0584 OTHER Greyscale Type 87 -A29 BC7438 (87) 50 41 Size 05A6 OTHER Greyscale Type 87 -A2A BC79DE (87) 50 41 Size 057F OTHER Greyscale Type 87 [Brosnan Select Pic - NW] -A2B BC7F5D (87) 50 41 Size 05FD OTHER Greyscale Type 87 [Brosnan Select Pic - NE] -A2C BC855A (87) 50 41 Size 04CA OTHER Greyscale Type 87 [Brosnan Select Pic - SW] -A2D BC8A24 (87) 50 41 Size 060B OTHER Greyscale Type 87 [Brosnan Select Pic - SE] -A2E BC902F (87) 50 41 Size 0566 OTHER Greyscale Type 87 -A2F BC9595 (87) 50 41 Size 05AC OTHER Greyscale Type 87 -A30 BC9B41 (87) 50 41 Size 0485 OTHER Greyscale Type 87 -A31 BC9FC6 (87) 50 41 Size 06E4 OTHER Greyscale Type 87 -A32 BCA6AA (87) 50 41 Size 050A OTHER Greyscale Type 87 -A33 BCABB4 (87) 50 41 Size 0568 OTHER Greyscale Type 87 -A34 BCB11C (87) 50 41 Size 0616 OTHER Greyscale Type 87 -A35 BCB732 (87) 50 41 Size 059F OTHER Greyscale Type 87 -A36 BCBCD1 (87) 50 41 Size 0594 OTHER Greyscale Type 87 -A37 BCC265 (87) 50 41 Size 04BE OTHER Greyscale Type 87 -A38 BCC723 (87) 50 41 Size 054C OTHER Greyscale Type 87 -A39 BCCC6F (87) 50 41 Size 0513 OTHER Greyscale Type 87 -A3A BCD182 (83) 60 20 Size 073D OTHER Greyscale Type 83 -A3B BCD8BF (84) 60 20 Size 06E2 OTHER Greyscale Type 84 -A3C BCDFA1 (83) 60 20 Size 06F4 OTHER Greyscale Type 83 -A3D BCE695 (84) 60 20 Size 06DE OTHER Greyscale Type 84 -A3E BCED73 (83) 60 20 Size 066F OTHER Greyscale Type 83 -A3F BCF3E2 (84) 60 20 Size 06C4 OTHER Greyscale Type 84 -A40 BCFAA6 (83) 60 20 Size 059B OTHER Greyscale Type 83 -A41 BD0041 (84) 60 20 Size 075A OTHER Greyscale Type 84 -A42 BD079B (07) 40 40 Size 03A3 OTHER Greyscale Type 07 -A43 BD0B3E (83) 60 20 Size 067A OTHER Greyscale Type 83 -A44 BD11B8 (84) 60 20 Size 06F2 OTHER Greyscale Type 84 -A45 BD18AA (07) 40 40 Size 028A OTHER Greyscale Type 07 -A46 BD1B34 (07) 40 40 Size 0542 OTHER Greyscale Type 07 -A47 BD2076 (40) 10 10 Size 0035 cType 3 Type 0C colours 3 -A48 BD20AB (87) 50 41 Size 04B8 OTHER Greyscale Type 87 -A49 BD2563 (87) 50 41 Size 0523 OTHER Greyscale Type 87 -A4A BD2A86 (87) 50 41 Size 0527 OTHER Greyscale Type 87 -A4B BD2FAD (87) 50 41 Size 05FA OTHER Greyscale Type 87 -A4C BD35A7 (87) 50 41 Size 0614 OTHER Greyscale Type 87 -A4D BD3BBB (87) 50 41 Size 0509 OTHER Greyscale Type 87 -A4E BD40C4 (87) 50 41 Size 0598 OTHER Greyscale Type 87 -A4F BD465C (87) 50 41 Size 05BB OTHER Greyscale Type 87 -A50 BD4C17 (87) 50 41 Size 04E7 OTHER Greyscale Type 87 -A51 BD50FE (87) 50 41 Size 04ED OTHER Greyscale Type 87 -A52 BD55EB (87) 50 41 Size 0413 OTHER Greyscale Type 87 -A53 BD59FE (87) 50 41 Size 0432 OTHER Greyscale Type 87 -A54 BD5E30 (87) 50 41 Size 04DA OTHER Greyscale Type 87 -A55 BD630A (87) 50 41 Size 0514 OTHER Greyscale Type 87 -A56 BD681E (87) 50 41 Size 04AB OTHER Greyscale Type 87 -A57 BD6CC9 (87) 50 41 Size 04CF OTHER Greyscale Type 87 -A58 BD7198 (87) 50 41 Size 0552 OTHER Greyscale Type 87 -A59 BD76EA (87) 50 41 Size 04BC OTHER Greyscale Type 87 -A5A BD7BA6 (87) 50 41 Size 0536 OTHER Greyscale Type 87 -A5B BD80DC (87) 50 41 Size 060F OTHER Greyscale Type 87 -A5C BD86EB (87) 50 41 Size 0543 OTHER Greyscale Type 87 -A5D BD8C2E (87) 50 41 Size 054E OTHER Greyscale Type 87 -A5E BD917C (87) 50 41 Size 04BD OTHER Greyscale Type 87 -A5F BD9639 (87) 50 41 Size 04C3 OTHER Greyscale Type 87 -A60 BD9AFC (87) 50 41 Size 04D3 OTHER Greyscale Type 87 -A61 BD9FCF (87) 50 41 Size 0489 OTHER Greyscale Type 87 -A62 BDA458 (87) 50 41 Size 0697 OTHER Greyscale Type 87 -A63 BDAAEF (87) 50 41 Size 0642 OTHER Greyscale Type 87 -A64 BDB131 (87) 50 41 Size 0567 OTHER Greyscale Type 87 -A65 BDB698 (87) 50 41 Size 051C OTHER Greyscale Type 87 -A66 BDBBB4 (87) 50 41 Size 053D OTHER Greyscale Type 87 -A67 BDC0F1 (87) 50 41 Size 056D OTHER Greyscale Type 87 -A68 BDC65E (87) 50 41 Size 055E OTHER Greyscale Type 87 -A69 BDCBBC (87) 50 41 Size 045B OTHER Greyscale Type 87 -A6A BDD017 (87) 50 41 Size 05A5 OTHER Greyscale Type 87 -A6B BDD5BC (87) 50 41 Size 05AB OTHER Greyscale Type 87 -A6C BDDB67 (87) 50 41 Size 0554 OTHER Greyscale Type 87 -A6D BDE0BB (87) 50 41 Size 0516 OTHER Greyscale Type 87 -A6E BDE5D1 (87) 50 41 Size 057F OTHER Greyscale Type 87 -A6F BDEB50 (87) 50 41 Size 04BC OTHER Greyscale Type 87 -A70 BDF00C (47) 40 01 Size 00A0 cType 3 Type 0B colours 30 -A71 BDF0AC (45) 10 10 Size 00F8 cType 5 Type 0B colours 3E [(KF7)] -A72 BDF1A4 (46) 20 20 Size 0397 cType 5 Type 09 colours 78 [(KF7)] -A73 BDF53B (07) 20 40 Size 00BC OTHER Greyscale Type 07 -A74 BDF5F7 (46) 20 20 Size 0435 cType 5 Type 09 colours 84 [0145 Rolling Steel Shutter] -A75 BDFA2C (40) 20 40 Size 0A0C cType 1 Type 09 colours FF -A76 BE0438 (40) 40 20 Size 0735 cType 5 Type 09 colours FF -A77 BE0B6D (07) 20 40 Size 02D6 OTHER Greyscale Type 07 -A78 BE0E43 (40) 20 40 Size 08DE cType 5 Type 09 colours FF [43 Ken - Front] -A79 BE1721 (46) 10 20 Size 0277 cType 5 Type 09 colours 6B -A7A BE1998 (87) 50 41 Size 03B3 OTHER Greyscale Type 87 -A7B BE1D4B (87) 50 41 Size 03B4 OTHER Greyscale Type 87 -A7C BE20FF (87) 50 41 Size 02C1 OTHER Greyscale Type 87 -A7D BE23C0 (87) 50 41 Size 02C4 OTHER Greyscale Type 87 -A7E BE2684 (00) 48 2C Size 0976 OTHER Greyscale Type 00 [Temple Stage Select Picture] -A7F BE2FFA (00) 48 2C Size 09C8 OTHER Greyscale Type 00 [Library/Basement/Stack Stage Select Picture] -A80 BE39C2 (00) 48 2C Size 0A39 OTHER Greyscale Type 00 [Complex Stage Select Picture] -A81 BE43FB (00) 48 2C Size 086F OTHER Greyscale Type 00 [Caves Stage Select Picture] -A82 BE4C6A (46) 20 20 Size 0380 cType 5 Type 09 colours 87 [06 Boris Top of Head] -A83 BE4FEA (87) 50 41 Size 0544 OTHER Greyscale Type 87 -A84 BE552E (87) 50 41 Size 0513 OTHER Greyscale Type 87 -A85 BE5A41 (87) 50 41 Size 0502 OTHER Greyscale Type 87 -A86 BE5F43 (87) 50 41 Size 04E4 OTHER Greyscale Type 87 -A87 BE6427 (00) 48 2C Size 01A3 OTHER Greyscale Type 00 [Random Stage Select Picture] -A88 BE65CA (46) 20 20 Size 0201 cType 5 Type 09 colours 11 [Statue] -A89 BE67CB (46) 20 20 Size 053D cType 5 Type 09 colours C5 [Statue] -A8A BE6D08 Size 0008 00000000 diff --git a/notes/PD Documentation/MP menus/MP custom weapon slots.txt b/notes/PD Documentation/MP menus/MP custom weapon slots.txt deleted file mode 100644 index 6ae7e68..0000000 --- a/notes/PD Documentation/MP menus/MP custom weapon slots.txt +++ /dev/null @@ -1,230 +0,0 @@ -Displays name of weapon in slot, both predef and custom sets - -7F188C3C: display name of weapon in set -ADDIU SP,SP,FFD8 -SW S2,0020 (SP) -SW S0,0018 (SP) -SW S1,001C (SP) -LUI S0,8008 -LUI S2,8008 -OR S1,A0,R0 ;S1=A0: -SW RA,0024 (SP) -ADDIU S2,S2,73EE ;S2=800873EE: end of block -ADDIU S0,S0,7268 ;S0=80087268: start of block -LHU A0,0004 (S0) ;A0=S0+4: halfword containing lock -ANDI T6,A0,007F ;T6=lock byte -JAL 7F19C910 ;V0=TRUE if unlocked -OR A0,T6,R0 ;A0=lock byte -BEQL V0,R0,7F188CF0 ;branch if locked -ADDIU S0,S0,000A -BNEL S1,R0,7F188CEC ;branch if S1 set -ADDIU S1,S1,FFFF ;S1-- -//7F188C84: -LBU A0,0000 (S0) ;A0=item# -ADDIU AT,R0,005B ;AT=0x5B -BNEZ A0,7F188CA4 ;branch if not 0 (nothing) -NOP -JAL 7F16E7C4 -ADDIU A0,R0,543A ;A0=text ID 543A: -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CA4: -BNEL A0,AT,7F188CC0 ;branch if item not 5B: sheild -ADDIU AT,R0,005C -JAL 7F16E7C4 -ADDIU A0,R0,543B ;A0=text ID 543B: -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CBC: -ADDIU AT,R0,005C ;AT=0x5C -BNE A0,AT,7F188CD8 ;branch if item not 5C: disabled (MP) -NOP -JAL 7F16E7C4 -ADDIU A0,R0,543C ;A0=text ID 543C: -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CD8: -JAL 7F0A215C ;display name of item A0 -NOP -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CE8: -ADDIU S1,S1,FFFF ;S1-- -ADDIU S0,S0,000A ;S0+=A: next weapon -//7F188CF0: loop per each slot until a hit is found -BNEL S0,S2,7F188C68 -LHU A0,0004 (S0) -LUI V0,7F1C -ADDIU V0,V0,8A58 ;V0=7F1C8A58: -//7F188D00: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - - -7F188D94: - accepts: A0=weapon# in set -ADDIU SP,SP,FFD8 -LUI T6,800B -SW S3,0020 (SP) -ADDIU T6,T6,CB88 ;T6=800ACB88: MP setup data. +18 is current weapon config -ADDU S3,A0,T6 ;S3=800ACB88+offset: entry in table -LBU T7,0018 (S3) ;T7=800ACBA0+offset: item# in current weapon config -SW S2,001C (SP) -SW S1,0018 (SP) -SW RA,0024 (SP) -SW S0,0014 (SP) -OR S2,R0,R0 ;S2=0 -BLEZ T7,7F188E04 ;branch if invalid -OR S1,R0,R0 ;S1=0 -LUI S0,8008 -ADDIU S0,S0,7268 ;S0=80087268: start of MP item block -//7F188DD0: -LHU A0,0004 (S0) ;A0=halfword containing lock byte for weapon -ANDI T8,A0,007F -JAL 7F19C910 -OR A0,T8,R0 ;A0=lock -BEQL V0,R0,7F188DF0 ;branch if not available -LBU T9,0018 (S3) -ADDIU S2,S2,0001 ;S2++: valid weapon count++ -//7F188DEC -LBU T9,0018 (S3) ;T9=item# in current weapon config -ADDIU S1,S1,0001 ;S1++ weapon count++ -ADDIU S0,S0,000A ;S0+=A: next MP weapon -SLT AT,S1,T9 ;TRUE if count < item# -BNEL AT,R0,7F188DD4 ;branch if true -LHU A0,0004 (S0) -//7F188E04: return -LW RA,0024 (SP) -OR V0,S2,R0 -LW S2,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - - -pull weapon from set -7F188E24: V0=p->entry for MP item A0 - accepts: A0=MP set item # -ADDIU A2,A0,0001 ;A2=A0+1: item count -ADDIU SP,SP,FFF0 -OR V0,A2,R0 ;V0=A2: count of valid items -BLEZ A2,7F188EAC ;return if invalid -OR A1,R0,R0 ;A1=0: count in set -LUI T0,8008 -LUI A0,800B -ADDIU A0,A0,CB88 ;A0=800ABC88: MP settings; +18 to weapon set -ADDIU T0,T0,7268 ;T0=80087268: start of mp item list -ADDIU T1,R0,000A ;T1=A: offset between each item entry -ADDIU A3,R0,005C ;A3=5C: MP disabled -//7F188E50: -ADDU T6,A0,A1 ;T6=weapon set+offset -LBU V1,0018 (T6) ;V1=MP item # -MULTU V1,T1 -MFLO T7 -ADDU T8,T0,T7 ;T8=start of item list + offset to entry -LBU T9,0000 (T8) ;T9=item# -BEQ A3,T9,7F188E74 ;branch if item# is MP disabled -NOP -ADDIU V0,V0,FFFF ;V0-- count-- -//7F188E74: -BLEZ V0,7F188EA0 ;branch if invalid count -NOP -ADDIU A1,A1,0001 ;A1++ count in set -SLTI AT,A1,0006 ;TRUE if count < 6 (max # in set) -BNEZ AT,7F188EA0 ;branch if overrun -NOP -BNE A2,V0,7F188E9C ;branch if count in set != count -OR A1,R0,R0 ;count=0 -OR V1,R0,R0 ;V1=0 MP item# -OR V0,R0,R0 ;V0=0 count -OR A2,V0,R0 ;A2=count -//7F188EA0: -BGTZL V0,7F188E54 ;loop if count invalid -ADDU T6,A0,A1 -SB V1,0003 (SP) ;SP+3= item# -//7F188EAC: return -LBU V1,0003 (SP) ;V1= item# -ADDIU T1,R0,000A ;T1=A: size of entries -LUI T0,8008 -MULTU V1,T1 -ADDIU T0,T0,7268 ;T0=80087268: start of mp item list -ADDIU SP,SP,0010 -MFLO T2 -ADDU V0,V0,T2 ;V0=p->entry for item V1 -JR RA -NOP - - -called by subroutine 7F00D820: -7F00D820: ??? - part of MP weapon expansion -ADDIU A0,A1,FF10 -SW A0,0018 (SP) -JAL 7F188E24 ;V0=p->item entry -SW A2,0030 (SP) ;SP+30=A2: p->object -LW A0,0018 (SP) -LUI AT,800A -LW A2,0030 (SP) -SW A0,CC30 (AT) ;A0=8009CC30: -LBU T7,0000 (V0) ;T7=item type -ADDIU AT,R0,005B ;AT=0x5B -ADDIU T2,R0,00F4 ;T2=00F4: model for shield -SB T7,005C (A2) ;object+5C= item type -LH T8,0006 (V0) ;T8=model# -ADDIU T3,R0,0015 ;T3=0x15 -OR A0,A2,R0 ;A0=A2: p->object -SH T8,0004 (A2) ;object+4= model# -LH T9,0008 (V0) ;T9=scale modifier -SH T9,0000 (A2) ;object+0= scale -LBU V1,0005 (V0) ;V1=flags -LBU T1,0000 (V0) ;T1=item type -SRL T0,V1,0x7 ;T0=1 if weapon present -BNE T1,AT,7F00D8CC ;branch if not body armor -OR V1,T0,R0 ;V1=T0: 1 if weapon present -//7F00D87C: body armor -LW T4,0008 (A2) ;T4=bitflag field 1 -LUI AT,3F80 -MTC1 AT,F0 -LUI AT,0102 -LW T6,000C (A2) ;T6=bitflag field 2 -OR T5,T4,AT ;T5=01020000 | bitflags1 -LUI AT,0020 -ORI AT,AT,4000 -OR T7,T6,AT ;T7=00204000 | bitflags2 -SH T2,0004 (A2) ;object+4= model for shield -SB T3,0003 (A2) ;object type= 15: body armor -SW T5,0008 (A2) ;object+8= bitflags1 -SW T7,000C (A2) ;object+C= bitflags2 -SWC1 F0,005C (A2) ;object+5C= 1.0: max shield quality -SWC1 F0,0060 (A2) ;object+60= 1.0: cur shield quality -SW A2,0030 (SP) ;SP+30= p->object -JAL 7F00CEE4 -LW A1,0034 (SP) -//7F000D8C4: -LW A2,0030 (SP) ;A2=p->object -OR V1,R0,R0 ;V1=0 -//7F00D8CC: normal items... -LBU A1,005C (A2) ;A1= item type -BEQL A1,R0,7F00D8F8 ;quit if zero -LW RA,0014 (SP) -BEQ V1,R0,7F00D8F4 ;branch if shield found -OR A0,A1,R0 ;A0=A1: item type -JAL 7F011560 -SW A2,0030 (SP) ;SP+30=p->object -LW A0,0030 (SP) ;A0=p->object -JAL 7F00CEE4 -LW A1,0034 (SP) ;A1= -//7F00D8F4: -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - - -pulls ammo types: -//7F00FCE8: diff --git a/notes/PD Documentation/MP menus/MP random stage select.txt b/notes/PD Documentation/MP menus/MP random stage select.txt deleted file mode 100644 index 841a4aa..0000000 --- a/notes/PD Documentation/MP menus/MP random stage select.txt +++ /dev/null @@ -1,55 +0,0 @@ -7F179104: MP random stage -ADDIU SP,SP,FFD8 -SW S1,001C (SP) -SW S0,0018 (SP) -SW S2,0020 (SP) -LUI S0,8008 -LUI S1,8008 -SW RA,0024 (SP) -OR S2,R0,R0 -ADDIU S1,S1,4BF8 -ADDIU S0,S0,4B98 -//7F17912C: -JAL 7F19C910 -LBU A0,0002 (S0) -BEQ V0,R0,7F179140 -ADDIU S0,S0,0006 -ADDIU S2,S2,0001 -//7F179140: -SLTU AT,S0,S1 -BNEZ AT,7F17912C -NOP -JAL 70012DC0 -NOP -DIVU V0,S2 -BNEZ S2,7F179164 -NOP -BREAK -//7F179164: -MFHI S1 -LUI S2,8008 -LUI S0,8008 -ADDIU S0,S0,4B98 -ADDIU S2,S2,4BF8 -OR V1,R0,R0 -JAL 7F19C910 -LBU A0,0002 (S0) -BEQL V0,R0,7F1791A4 -ADDIU S0,S0,0006 -BNEL S1,R0,7F1791A0 -ADDIU S1,S1,FFFF -BEQ R0,R0,7F1791B0 -LH V0,0000 (S0) -//7F17919C: -ADDIU S1,S1,FFFF -ADDIU S0,S0,0006 -BNE S0,S2,7F17917C -NOP -ADDIU V0,R0,0032 -//7F1791B0: -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 diff --git a/notes/PD Documentation/MP menus/MP stage select subwindow.txt b/notes/PD Documentation/MP menus/MP stage select subwindow.txt deleted file mode 100644 index 2a2324d..0000000 --- a/notes/PD Documentation/MP menus/MP stage select subwindow.txt +++ /dev/null @@ -1,249 +0,0 @@ -7F1791C8: determine if MP stage is accessible -ADDIU SP,SP,FFA8 -LUI T7,8008 -SW RA,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -SW A1,005C (SP) -ADDIU T7,T7,4C00 ;T7=80084C00: MP stage subsection table -LW AT,0000 (T7) ;AT=subsection insertion point -ADDIU T6,SP,0040 ;T6+SP+40 -LW T0,0004 (T7) ;T0=subsection text <<16 -SW AT,0000 (T6) ;copy MP stage subsection section table to SP+40 -LW AT,0008 (T7) -SW T0,0004 (T6) -LW T0,000C (T7) -SW AT,0008 (T6) -LW AT,0010 (T7) -SW T0,000C (T6) -LW T0,0014 (T7) -ADDIU T1,A0,FFFF -SW AT,0010 (T6) -SLTIU AT,T1,0007 -OR S2,A2,R0 -OR S1,R0,R0 ;S1=0: stage count=0 -BEQ AT,R0,7F179498 -SW T0,0014 (T6) -SLL T1,T1,0x2 -LUI AT,7F1C -ADDU AT,AT,T1 -LW T1,805C (AT) ;T1=7F1B805C: TLB jump table -JR T1 -NOP - -7F179248: -LUI S0,8008 -ADDIU S0,S0,4B98 ;S0=80084B98: base address for MP stage select -//7F179250: -JAL 7F19C910 ;V0=TRUE if lock byte #A0 unlocked; fries T6 -LBU A0,0002 (S0) ;lock flags -BEQ V0,R0,7F179264 -ADDIU S0,S0,0006 ;S0+=6: next stage# -ADDIU S1,S1,0001 ;S1++ -LUI T2,8008 -ADDIU T2,T2,4BFE ;T2=80084BFE: table cutoff -BNE S0,T2,7F179250 ;loop for each entry -NOP -BEQ R0,R0,7F179498 -SW S1,0000 (S2) - -7F17927C: -LUI S0,8008 -ADDIU S0,S0,4B98 ;S0=80084B98: base address for MP stage select -//7F179284: -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,0002 (S0) ;A0=lock flag -BEQ V0,R0,7F1792B4 ;check next entry if locked -LUI T4,8008 -LW T3,0000 (S2) -BNEL S1,T3,7F1792B4 -ADDIU S1,S1,0001 ;S1++ -JAL 7F16E7C4 -LHU A0,0004 (S0) ;A0=text ID -BEQ R0,R0,7F1794A0 -LW RA,0024 (SP) -//7F1792B0: -ADDIU S1,S1,0001 -ADDIU S0,S0,0006 ;S0+=6: next entry -ADDIU T4,T4,4BFE ;T4=80084BFE: end of list -BNE S0,T4,7F179284 ;branch for each entry -NOP -BEQ R0,R0,7F17949C -OR V0,R0,R0 - -7F1792CC: -LUI S0,8008 -ADDIU S0,S0,4B98 ;S0=80084B98: MP stage list -//7F1792D4: -JAL 7F19C910 -LBU A0,0002 (S0) ;A0=lock flag -BEQ V0,R0,7F1792F0 -LUI T9,8008 -LW T5,0000 (S2) -BEQ S1,T5,7F179300 -ADDIU S1,S1,0001 ;S1++ -//7F1792F0: -ADDIU S0,S0,0006 -ADDIU T9,T9,4BFE ;T9=80074BFE: end of list -BNE S0,T9,7F1792D4 -NOP -//7F179300: -LH T8,0000 (S0) ;T8=stage# -LUI AT,800B -BEQ R0,R0,7F179498 -SB T8,CB99 (AT) ;stage#->800ACB99 - -7F179310: -LUI S0,8008 -ADDIU S0,S0,4B98 ;S0=80084B98: MP stage list -//7F179318: -LUI T6,800B -LBU T6,CB99 (T6) -LH T7,0000 (S0) ;T7=stage# -BNE T6,T7,7F179330 -NOP -SW S1,0000 (S2) -//7F179330: -JAL 7F19C910 -LBU A0,0002 (S0) ;A0=lock flag -BEQ V0,R0,7F179344 -ADDIU S0,S0,0006 ;S0+=6: next entry -ADDIU S1,S1,0001 ;S1++ -//7F179344: -LUI T0,8008 -ADDIU T0,T0,4BFE ;80084BFE: end of list -BNE S0,T0,7F179318 ;lather rinse repeat -NOP -BEQ R0,R0,7F17949C -OR V0,R0,R0 - -7F17935C: determine if "Classic" should appear -ADDIU T1,R0,0003 -SW T1,0000 (S2) ;3->S2: # stage subsections in table -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,0024 ;A0=lock 24: complex -BNEL V0,R0,7F17949C ;quit if Complex unlocked -OR V0,R0,R0 ;V0=0 -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,0027 ;A0=lock 27: Temple -BNEL V0,R0,7F17949C ;quit if Temple unlocked -OR V0,R0,R0 ;V0=0 -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,002A ;A0=lock 2A: Felicity -BNEL V0,R0,7F17949C ;quit if Felicity unlocked -OR V0,R0,R0 ;V0=0 -LW T2,0000 (S2) ;T2=# subsections -ADDIU T3,T2,FFFF ;T3=# - 1 -BEQ R0,R0,7F179498 -SW T3,0000 (S2) ;save 2 subsections ("Classic" missing) - -7F1793A4: display subsection text when applicable -LW S1,0000 (S2) ;S1=# subsections -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,0024 ;A0=lock 24: complex -BNEL V0,R0,7F1793E8 ;branch if Complex unlocked -SLL T4,S1,0x3 -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,0027 ;A0=lock 27: Temple -BNEL V0,R0,7F1793E8 ;branch if Temple unlocked -SLL T4,S1,0x3 -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,002A ;A0=lock 2A: Felicity -BNEL V0,R0,7F1793E8 ;branch if Felicity unlocked -SLL T4,S1,0x3 -BLEZL S1,7F1793E8 ;branch if no subsections -SLL T4,S1,0x3 -ADDIU S1,S1,0001 ;S1++ -//7F1793E4: -SLL T4,S1,0x3 ;T4=S1*8: subsection # -> offset -ADDU A0,SP,T4 ;A0=SP+offset to entry -JAL 7F16E7C4 -LHU A0,0044 (A0) ;A0=subsection text ID -BEQ R0,R0,7F1794A0 -LW RA,0024 (SP) - -7F1793FC: -LW S0,0000 (S2) ;S0=# subsections -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,0024 ;A0=lock 24: complex -BNEL V0,R0,7F179440 ;branch if Complex unlocked -SLL T5,S0,0x3 -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,0027 ;A0=lock 27: Temple -BNEL V0,R0,7F179440 ;branch if Temple unlocked -SLL T5,S0,0x3 -JAL 7F19C910 ;V0=TRUE if unlocked -ADDIU A0,R0,002A ;A0=lock 2A: Felicity -BNEZ V0,7F17943C ;branch if Felicity unlocked -ADDIU AT,R0,0001 -BNEL S0,AT,7F179440 ;branch if more than 1 subsection -SLL T5,S0,0x3 -ADDIU S0,S0,0001 ;S0=2 -//7F17943C: -SLL T5,S0,0x3 ;T5=S0*8: subsection# -> offset -ADDIU T9,SP,0040 ;T9=SP+40: p->copied MP stage subsection table -ADDU A1,T5,T9 ;A1=p->subsection entry -LW T8,0000 (A1) ;T8=subsection insertion point -LUI S0,8008 -ADDIU S0,S0,4B98 ;S0=80084B98: MP stage list -BLEZ T8,7F179494 -OR V1,R0,R0 -//7F17945C: -LBU A0,0002 (S0) ;A0=lock flag -SW V1,003C (SP) -JAL 7F19C910 ;V0=TRUE if unlocked -SW A1,002C (SP) ;SP+2C=A1: save p->copy of subsection -LW V1,003C (SP) -BEQ V0,R0,7F17947C -LW A1,002C (SP) ;A1=p->copy of subsection -ADDIU S1,S1,0001 -//7F17947C: -LW T6,0000 (A1) ;T6=subsection insertion point -ADDIU V1,V1,0001 -ADDIU S0,S0,0006 ;S0+=6: next entry -SLT AT,V1,T6 -BNEL AT,R0,7F179460 -LBU A0,0002 (S0) -SW S1,0008 (S2) -//7F179498: -OR V0,R0,R0 -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0058 - -+_+ - -7F17F024: pull text ID for given stage # -ADDIU SP,SP,FFE8 -SW A0,0018 (SP) -LUI A0,8008 -LUI V1,800B -LUI V0,8008 -SW RA,0014 (SP) -ADDIU V0,V0,4B98 ;V0=80084B98: -LBU V1,CB99 (V1) ;V1=800ACB99: -ADDIU A0,A0,4BFE ;A0=80084BFE -//7F17F048: pull stage# -LH T6,0000 (V0) ;T6=stage# -BNEL V1,T6,7F17F068 -ADDIU V0,V0,0006 -//7F17F054: -JAL 7F16E7C4 -LHU A0,0004 (V0) ;A0=V0+4: text ID -BEQ R0,R0,7F17F07C ;return -LW RA,0014 (SP) -//7F17F064: -ADDIU V0,V0,0006 ;V0+=6: next entry -BNEL V0,A0,7F17F04C -LH T6,0000 (V0) -LUI V0,7F1C -ADDIU V0,V0,8050 ;V0=7F1C8050: -//7F17F078: -LW RA,0014 (SP) -ADDIU SP,SP,0018 -JR RA -NOP diff --git a/notes/PD Documentation/MP menus/MP weapon sets.txt b/notes/PD Documentation/MP menus/MP weapon sets.txt deleted file mode 100644 index 0c3c370..0000000 --- a/notes/PD Documentation/MP menus/MP weapon sets.txt +++ /dev/null @@ -1,358 +0,0 @@ -Sets use an alternate weapon setting when certain weapons aren't unlocked. - -7F188ED4: -ADDIU SP,SP,FFD0 -SW S3,0024 (SP) -SW S2,0020 (SP) -SLTI AT,A0,000C ;AT=TRUE if set# 0-B -OR S3,A0,R0 ;S3=A0: set# -SW RA,002C (SP) -SW S4,0028 (SP) -SW S1,001C (SP) -SW S0,0018 (SP) -BNEZ AT,7F188F08 ;branch if valid set# -OR S2,R0,R0 ;S2=0 -ADDIU S2,A0,FFF4 ;S2=set#-C -ADDIU S3,R0,000C ;S3=C -//7F188F08: -BLEZ S3,7F188F78 ;skip if set# not valid -OR S1,R0,R0 ;S1=0 -LUI S0,8008 -ADDIU S0,S0,73F0 ;S0=800873F0: p->MP weapon sets -ADDIU S4,R0,005C ;S4=0x5C: MP disabled -//7F188F1C: -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,0008 (S0) ;A0=lock 1 -BEQL V0,R0,7F188F60 ;branch if locked -LBU T6,000C (S0) -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,0009 (S0) ;A0=lock 2 -BEQL V0,R0,7F188F60 ;branch if locked -LBU T6,000C (S0) -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,000A (S0) ;A0=lock 3 -BEQL V0,R0,7F188F60 ;branch if locked -LBU T6,000C (S0) -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,000B (S0) ;A0=lock 4 -BNEL V0,R0,7F188F6C ;branch if unlocked -ADDIU S2,S2,0001 -//7F188F5C: test if alternate set available -LBU T6,000C (S0) ;T6=alt set 1 -BEQL S4,T6,7F188F70 ;branch if disabled -ADDIU S1,S1,0001 -ADDIU S2,S2,0001 ;S2++ -//7F188F6C: -ADDIU S1,S1,0001 ;S1++ -BNE S1,S3,7F188F1C ;loop if -ADDIU S0,S0,0012 ;S0+=12: next weapon set -//7F188F78: -LW RA,002C (SP) -OR V0,S2,R0 ;V0=S2 -LW S2,0020 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 - - -7F188F9C: -ADDIU SP,SP,FFD0 -SW S0,0018 (SP) -SW S4,0028 (SP) -SW S3,0024 (SP) -SW S2,0020 (SP) -SW S1,001C (SP) -LUI S0,8008 -OR S2,A0,R0 ;S2=A0: -SW RA,002C (SP) -ADDIU S0,S0,73F0 ;S0=800873F0: p->MP weapon sets -OR S1,R0,R0 ;S1=set count -ADDIU S3,R0,005C ;S3=0x5C: MP nothing slot, used to indicate end -ADDIU S4,R0,000C ;S4=0xC: #sets -//7F188FD0: -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,0008 (S0) ;A0=SO+8: lock 1 -BEQL V0,R0,7F189014 ;branch if locked -LBU T6,000C (S0) -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,0009 (S0) ;A0=SO+9: lock 2 -BEQL V0,R0,7F189014 -LBU T6,000C (S0) -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,000A (S0) ;A0=SO+A: lock 3 -BEQL V0,R0,7F189014 -LBU T6,000C (S0) -JAL 7F19C910 ;V0=TRUE if unlocked -LBU A0,000B (S0) ;A0=SO+B: lock 4 -BNEZ V0,7F18901C ;branch if unlocked -NOP -//7F189010: when lock encountered, test if alternate set -LBU T6,000C (S0) ;T6=alternate set 1 -BEQL S3,T6,7F18902C ;branch if no alternate set -ADDIU S1,S1,0001 -//7F18901C: quit if no more sets to be tested -BEQL S2,R0,7F189038 ;branch if number of sets to test = 0 -LW RA,002C (SP) -ADDIU S2,S2,FFFF ;S2-- sets num-- -//7F189028: loop for all sets in block -ADDIU S1,S1,0001 ;S1++ set count++ -BNE S1,S4,7F188FD0 ;branch if more to test -ADDIU S0,S0,0012 ;S0+=12: next set -//7F189034: -LW RA,002C (SP) -ADDU V0,S1,S2 ;V0=set count + invalid alt sets -LW S2,0020 (SP) -LW S1,001C (SP) -LW S0,0018 (SP) -LW S3,0024 (SP) -LW S4,0028 (SP) -JR RA -ADDIU SP,SP,0030 - - -7F1890A8: -ADDIU SP,SP,FFE8 -SW RA,0014 (SP) -JAL 7F188F9C ;V0=next available slot # -NOP -BLTZ V0,7F1890CC ;branch if V0<0 -OR A1,V0,R0 ;A1=V0: available slot # -SLTI AT,V0,000E -BNEL AT,R0,7F1890E0 ;branch if slot# 0-D -ADDIU AT,R0,000D -//7F1890CC: custom slot (slot E) -JAL 7F16E7C4 ;V0=p->text ID A0 -ADDIU A0,R0,5429 ;A0=text ID 5429: "Custom" -BEQ R0,R0,7F189130 -LW RA,0014 (SP) -//7F1890E0: random slot (slot D) -BNEL V0,AT,7F1890FC ;branch if slot# != D -ADDIU AT,R0,000C -JAL 7F16E7C4 ;V0=p->text ID A0 -ADDIU A0,R0,542A ;A0=text ID 542A: "Random" -BEQ R0,R0,7F189130 -LW RA,0014 (SP) -//7F1890F8: random 5 slot -ADDIU AT,R0,000C -BNE V0,AT,7F189114 ;branch if slot # != C -SLL T6,A1,0x3 ;T6=slot# * 8 -JAL 7F16E7C4 ;V0=p->text ID A0 -ADDIU A0,R0,542B ;A0=text ID 542B: "Random Five" -BEQ R0,R0,7F189130 -LW RA,0014 (SP) -//7F189114: -ADDU T6,T6,A1 -SLL T6,T6,0x1 ;T6=slot# * 0x12 -LUI A0,8008 -ADDU A0,A0,T6 ;A0=p->MP weapon sets + offset to specific set -JAL 7F16E7C4 ;V0=p->text ID A0 -LHU A0,73F0 (A0) ;A0=800873F0+offset: text for entry -LW RA,0014 (SP) -//7F189130: return -ADDIU SP,SP,0018 -JR RA -NOP - - -7F1892DC: copies selected weapon set -ADDIU SP,SP,FFB0 -SW S0,0018 (SP) -LUI S0,8008 -ADDIU S0,S0,74C8 ;S0=800874C8: selected set -LW V0,0000 (S0) -SW RA,001C (SP) -BLTZ V0,7F1894D4 -SLTI AT,V0,000C -BEQ AT,R0,7F1894D4 -SLL T6,V0,0x3 -ADDU T6,T6,V0 -SLL T6,T6,0x1 -ADDU A0,8008 -ADDU A0,A0,T6 -JAL 7F19C910 -LBU A0,73F8 (A0) ;A0=lock 1 -BEQL V0,R0,7F1893C4 -LW T5,0000 (S0) -//7F189324: -LW T7,0000 (S0) -LUI A0,8008 -SLL T8,T7,0x3 -ADDU T8,T8,T7 -SLL T8,T8,0x1 -ADDU A0,A0,T8 -JAL 7F19C910 -LBU A0,73F9 (A0) ;A0=lock 2 -BEQL V0,R0,7F1893C4 -LW T5,0000 (S0) -//7F18934C: -LW T9,0000 (S0) -LUI A0,8008 -SLL T4,T9,0x3 -ADDU T4,T4,T9 -SLL T4,T4,0x1 -ADDU A0,A0,T4 -JAL 7F19C910 -LBU A0,73FA (A0) ;A0=lock 3 -BEQL V0,R0,7F1893C4 -LW T5,0000 (S0) -//7F189374: -LW T5,0000 (S0) -LUI A0,8008 -SLL T6,T5,0x3 -ADDU T6,T6,T5 -SLL T6,T6,0x1 -ADDU A0,A0,T6 -JAL 7F19C910 -LBU A0,73FB (A0) ;A0=lock 4 -BEQL V0,R0,7F1893C4 -LW T5,0000 (S0) -//7F18939C: -LW T7,0000 (S0) ;T7=selected MP set -LUI T4,8008 -ADDIU T4,T4,73F0 ;T4=800873F0: MP weapon sets -SLL T8,T7,0x3 -ADDU T8,T8,T7 -SLL T8,T8,0x1 ;T8=set# * 0x12 -ADDIU T9,T8,0002 ;T9=offset to first set of weapons -BEQ R0,R0,7F1893F8 -ADDU V0,T9,T4 ;V0=p->weapon set data -//7F1893C0: -LW T5,0000 (S0) ;T5=selected MP set -LUI T7,8008 -ADDIU T7,T7,73F0 ;T7=800873F0: MP weapon sets -SLL T6,T5,0x3 -ADDIU T6,T6,T5 -SLL T6,T6,0x1 ;T6=set# * 0x12 -ADDU V1,T6,T7 ;V1=p->selected weapon set -LBU T8,000C (V1) ;T8=alt set 1 -ADDIU AT,R0,005C -BEQL T8,AT,7F1893F8 ;branch if no alternate set -OR V0,R0,R0 -BEQ R0,R0,7F1893F8 -ADDIU V0,V1,000C ;V0=p->alt weapon set data -//7F1893F4: -OR V0,R0,R0 -BEQ V0,R0,7F1895A8 ;branch if no set data -OR T3,V0,R0 ;T3=V0: set data -LUI T2,800B -LUI T0,8008 -ADDIU T0,T0,7268 ;T0=80087268: p->weapon data -ADDIU T2,T2,CB88 ;T2=800ACB88: current weapons in set -ADDIU S0,R0,005B ;S0=0x5B: shield -ADDIU T1,R0,000A ;T1=A -LBU A2,0000 (T3) ;A2=item 1 -OR A1,R0,R0 -OR A3,R0,R0 -BNE A2,S0,7F189478 ;branch if not shield -OR V1,R0,R0 ;V1=0 -ADDIU A0,R0,0016 ;A0=0x16: -SW R0,0044 (SP) -SW R0,0040 (SP) -SW A2,0038 (SP) -SW R0,003C (SP) -SW T2,0024 (S0) -JAL 7F19C910 -SW T3,0028 (SP) ;SP+28=T3: p->set data -LUI T0,8008 -ADDIU T0,T0,7268 ;T0=80087268: p->weapon data -LW V1,0044 (SP) -LW A1,0040 (SP) -LW A2,0038 (SP) -LW A3,003C (SP) -ADDIU T1,R0,000A ;T1=A -LW T2,0024 (SP) -BNEZ V0,7F189478 -LW T3,0028 (SP) -OR A2,R0,R0 -//7F189478: test if entry is valid for weapon data table -SLTIU AT,V1,0027 ;AT=TRUE if item slot 0-26 -BNEZ AT,7F18948C ;branch if valid slot# -NOP -BEQ R0,R0,7F1894AC -ADDIU A1,R0,0001 ;A1=1 -//7F18948C: -MULTU V1,T1 -MFLO T9 ;T9=item# * A: offset to entry in weapon data table -ADDU T4,T0,T9 ;T4=p->weapon data for item# -LBU T5,0000 (T4) ;T5=item -BNE A2,T5,7F1894AC -NOP -OR A3,V1,R0 ;A3=V1: item slot# -ADDIU A1,R0,0001 ;A1=1 -//7F1894AC: -BEQ A1,R0,7F189478 -ADDIU V1,V1,0001 -LUI T6,800B -ADDIU T6,T6,CB8E -ADDIU T2,T2,0001 -ADDIU T3,T3,0001 -BNE T2,T6,7F189418 -SB A3,0017 (T2) -BEQ R0,R0,7F1895AC -LW RA,001C (SP) -//7F1894D4: -ADDIU AT,R0,000D -BNEL V0,AT,7F189538 -ADDIU AT,R0,000C -JAL 7F188BD4 -NOP -SW V0,0034 (SP) -OR S0,R0,R0 -JAL 70012DC0 -NOP -LW T7,0034 (SP) -OR A0,S0,R0 -DIVU V0,T7 -MFHI A1 -BNEZ T7,7F189514 -NOP -BREAK -//7F189514: -JAL 7F188D18 -NOP -ADDIU S0,S0,0001 -ADDIU AT,R0,0006 -BNE S0,AT,7F1894F0 -NOP -BEQ R0,R0,7F1895AC -LW RA,001C (SP) -//7F189534: -ADDIU AT,R0,000C -BNEL V0,AT,7F1895AC -LW RA,001C (SP) -JAL 7F188BD4 -NOP -ADDIU T8,V0,FFFE -SW T8,0030 (SP) -OR S0,R0,R0 -JAL 70012DC0 -NOP -LW T9,0030 (SP) -OR A0,S0,R0 -DIVU V0,T9 -MFHI A1 -ADDIU A1,A1,0001 -BNEZ T9,7F18957C -NOP -BREAK -//7F18957C: -JAL 7F188D18 -NOP -ADDIU S0,S0,0001 -ADDIU AT,R0,0005 -BNE S0,AT,7F189554 -NOP -JAL 7F188BD4 -NOP -OR A0,S0,R0 -JAL 7F188D18 -ADDIU A1,V0,FFFF -//7F1895A8: return -LW RA,001C (SP) -LW S0,0018 (SP) -ADDIU SP,SP,0050 -JR RA -NOP diff --git a/notes/PD Documentation/MP menus/PD weapon sets.txt b/notes/PD Documentation/MP menus/PD weapon sets.txt deleted file mode 100644 index 618f5ab..0000000 --- a/notes/PD Documentation/MP menus/PD weapon sets.txt +++ /dev/null @@ -1,182 +0,0 @@ -Weapon Sets and Weapon Data in NPDE v1.1 - - This takes a lot of the stupidity out of modifying MP weapon sets. All this stuff is present dual-res, so you can even set up your stuff lo-res using memory editor. - - These addresses are specific to v1.1, but you can look for the data in the other ROMs to find their addresses. Keep in mind PAL uses different text values. - -80087268: MP item data - format: 0xA each entry; 0x27 entries - 0x0 1 weapon type - 0x1 1 ammo type 1 - 0x2 1 ammo amount 1 - 0x3 1 ammo type 2 - 0x4 1 ammo amount 2 - 0x5 1 flags - 80 weapon present - 7F lock byte - 0x6 2 weapon model # - 0x8 2 scale - - -800873F0: weapon sets - format: 0x12 each entry; 0xC entries - 0x0 2 text ID - 0x2 1 weapon 0 - 0x3 1 weapon 1 - 0x4 1 weapon 2 - 0x5 1 weapon 3 - 0x6 1 weapon 4 - 0x7 1 weapon 5 - 0x8 1 weapon lock test 1 - 0x9 1 weapon lock test 2 - 0xA 1 weapon lock test 3 - 0xB 1 weapon lock test 4 - 0xC 1 alternate weapon 0 - 0xD 1 alternate weapon 1 - 0xE 1 alternate weapon 2 - 0xF 1 alternate weapon 3 - 0x10 1 alternate weapon 4 - 0x11 1 alternate weapon 5 - -@_@ - - First, lets cover MP item data. These are the guys that determine what weapon each slot corresponds to, the amount of ammo on box collection, the model for the weapon, and if a pickup is present. It also contains a lock value that is tested to ensure you unlocked the thing. - - The items in this table are used by the weapon sets to retrieve the weapons used in play. If, for instance, you alter the shield to some other item, any weapon set that used the shield will use that item instead. However, this change does not affect solo stages. - - These are the default MP items. Note that the default weapon from GE (DD44) just happens to be set as the default model for "nothing". Just interesting. - -[code]00 0000 0000 80 0118 0100 nothing -02 0150 0000 80 00F5 0100 Falcon 2 -03 0150 0000 85 00FB 0100 Falcon 2 (silenced) -04 0150 0000 86 00FC 0100 Falcon 2 (scope) -05 0150 0000 80 00F6 0100 Magsec 4 -06 015C 0000 87 00F7 0100 Mauler -07 0140 0000 88 00FA 0100 Phoenix -08 0A32 0000 80 00F8 0100 DY357 Magnum -09 0A32 0000 89 00F9 0100 DY357-LX -0A 0264 0000 80 00FD 0100 CMP150 -0B 0296 0000 80 0102 0100 Cyclone -0C 0296 0000 8A 0103 0100 Callisto NTG -0D 0296 0000 8D 0104 0100 RC-P120 -0E 0296 0000 8B 0105 0100 Laptop Gun -0F 0496 0000 80 00FF 0100 Dragon -10 0496 0000 8C 0101 0100 K7 Avenger -11 0464 0000 80 00FE 0100 AR34 -12 0496 0B10 83 0100 0100 SuperDragon -13 0510 0000 8E 0106 0100 Shotgun -14 0FC8 0000 8F 0107 0100 Reaper -15 0432 0000 80 010C 0100 Sniper Rifle -16 060A 0000 81 010B 0100 Farsight XR-20 -17 0B10 0000 90 0109 0100 Devastator -18 0803 0000 80 0108 0100 Rocket Launcher -19 0803 0000 84 010A 0100 Slayer -1A 0905 0000 80 010F 0100 Combat Knife -1B 030A 0000 91 010D 0100 Crossbow -1C 1332 0000 82 010E 0100 Tranquilizer -1E 0705 0000 00 0112 0100 Grenade -1F 1203 0000 12 0110 0100 N-Bomb -20 0E05 0000 00 0113 0180 Timed Mine -21 0D05 0000 13 0114 0180 Proximity Mine -22 0C05 0000 14 0115 0180 Remote Mine -1D 0000 0000 CF 0195 0200 Laser -2F 0000 0000 95 00F3 0100 X-ray Scanner -31 0000 0000 97 012E 0100 Cloaking Device -23 0000 0000 98 012F 0100 Combat Boost -5B 0000 0000 96 00F4 0100 Shield -5C 0000 0000 00 0000 0000 Disabled[/code] - - The GE weapons are not in this list, but they would be the following, in case you want to replace something from above ;*) Please note that as-is, simulants can not use these items. -[code]24 0150 0000 80 0117 0100 PP9i -25 0150 0000 80 0118 0100 CC13 -26 0264 0000 80 0119 0100 KLO1313 -27 0464 0000 80 011A 0100 KF7 Special -28 0264 0000 80 011B 0100 ZZT -29 0296 0000 80 011C 0100 DMC -2A 0496 0000 80 011D 0100 AR33 -2B 0296 0000 80 011E 0100 RC-P45[/code] - - Locks will be covered below. - - -@_@ - - Now weapon sets. Each weapon set is actually two sets. The first is the set most of you are likely familiar with, and the second is an alternate set when all the weapons within the set haven't been unlocked. It should be noted that if the first value of an alternate set is 0x5C (disabled), the entire alternate set is ignored. - -These are the original weapon sets: -[code]5437 02 05 07 06 5B 5C 08 07 00 00 02 05 02 08 5B 5C Pistols -5436 02 0A 0E 11 5B 5C 0B 00 00 00 02 0A 0F 11 5B 5C Automatics -5435 05 08 13 0D 5B 5C 0E 0D 00 00 05 08 0F 11 5B 5C Power -5434 07 0B 0C 16 5B 5C 01 0A 00 00 5C 5C 5C 5C 5C 5C Farsight -5433 02 0A 0F 1C 5B 5C 02 00 00 00 5C 5C 5C 5C 5C 5C Tranquilliser -5432 06 10 14 12 5B 5C 03 07 0C 0F 5C 5C 5C 5C 5C 5C Heavy -5431 03 1E 0A 09 5B 5C 05 09 00 00 5C 5C 5C 5C 5C 5C Golden Magnum -5430 17 17 12 12 5B 5C 03 10 00 00 5C 5C 5C 5C 5C 5C Explosive -542F 05 0A 11 17 5B 5C 10 00 00 00 5C 5C 5C 5C 5C 5C Grenade Launcher -542E 06 0B 0F 18 5B 5C 07 00 00 00 02 0B 0F 18 5B 5C Rocket Launcher -542D 05 0E 10 21 5B 5C 0B 0C 13 00 5C 5C 5C 5C 5C 5C Proximity mine -542C 1A 1A 20 1B 5B 5C 11 00 00 00 1A 1A 20 20 5B 5C Close Combat[/code] - - It isn't difficult to write your own sets. The weapon values correspond to the MP item data in the section above. You could write up your own GE sets as well. 5075 (NTSC) is "Classic". - - -@_@ - - Locks look up a value in a table to determine if MP settings have been unlocked. A more complete copy is found in the documentation, but this should be enough for your own purposes. You can find this table at 800ACCC8. -[code]00 always returns 1 (unlocked) -01 Farsight XR-20 -02 Tranquilizer -03 SuperDragon -04 Slayer -05 Falcon 2 (Silencer) -06 Falcon 2 (Scope) -07 Mauler -08 Phoenix -09 DY357-LX -0A Callisto NTG -0B Laptop Gun -0C K7 Avenger 1 from start of game -0D RC-P120 -0E Shotgun -0F Laser, Reaper -10 Devastator -11 Crossbow -12 N-Bomb -13 Proximity Mine -14 Remote Mine -15 X-Ray Scanner -16 Body Armour 1 from start of game -17 Cloaking Device -18 Combat Boost -19 HardSim -1A PerfectSim -1C DarkSim -1F King Of The Hill 1 from start of game -20 Hold The Briefcase -21 Capture The Case -23 Car Park -24 Complex -25 Warehouse -26 Ravine -27 Temple -28 G5 Building (MP) -29 Grid -2A Felicity -2B Villa (MP) -2C Sewers -2D Ruins -2E Base -2F -30 Fortress[/code] - - -[url="http://two.xthost.info/zoinkity/PerfectDark/MPext.rar"]+_+[/url] - - As for extending the table via ROM hacking, it is stupidly convoluted. Not impossible or even impractical, but just requiring a lot of work--unless we move the MP weapons to a different memory location. - Ideally the weapon set data would be reduced by removing the test values. Instead, it would teast each weapon in series and have replacement values for each. Since each set also uses only five slots, fifth set to shield, we could just get away with a four-slot format. That would amount to 10 bytes each entry, so every GE weapon could be fit into the custom select menu with space for an additional weapon or set entry. - The only trouble is that it would require rewritting the weapon set copier, both set lookup routines, as well as minor edits to both weapon lookup routines. - -+_+ - - Documentation of some newer stuff: -http://two.xthost.info/zoinkity/PerfectDark/PD%20Documentation.7z diff --git a/notes/PD Documentation/MP menus/Revisions/GE custom weapon slots.txt b/notes/PD Documentation/MP menus/Revisions/GE custom weapon slots.txt deleted file mode 100644 index 6ae7e68..0000000 --- a/notes/PD Documentation/MP menus/Revisions/GE custom weapon slots.txt +++ /dev/null @@ -1,230 +0,0 @@ -Displays name of weapon in slot, both predef and custom sets - -7F188C3C: display name of weapon in set -ADDIU SP,SP,FFD8 -SW S2,0020 (SP) -SW S0,0018 (SP) -SW S1,001C (SP) -LUI S0,8008 -LUI S2,8008 -OR S1,A0,R0 ;S1=A0: -SW RA,0024 (SP) -ADDIU S2,S2,73EE ;S2=800873EE: end of block -ADDIU S0,S0,7268 ;S0=80087268: start of block -LHU A0,0004 (S0) ;A0=S0+4: halfword containing lock -ANDI T6,A0,007F ;T6=lock byte -JAL 7F19C910 ;V0=TRUE if unlocked -OR A0,T6,R0 ;A0=lock byte -BEQL V0,R0,7F188CF0 ;branch if locked -ADDIU S0,S0,000A -BNEL S1,R0,7F188CEC ;branch if S1 set -ADDIU S1,S1,FFFF ;S1-- -//7F188C84: -LBU A0,0000 (S0) ;A0=item# -ADDIU AT,R0,005B ;AT=0x5B -BNEZ A0,7F188CA4 ;branch if not 0 (nothing) -NOP -JAL 7F16E7C4 -ADDIU A0,R0,543A ;A0=text ID 543A: -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CA4: -BNEL A0,AT,7F188CC0 ;branch if item not 5B: sheild -ADDIU AT,R0,005C -JAL 7F16E7C4 -ADDIU A0,R0,543B ;A0=text ID 543B: -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CBC: -ADDIU AT,R0,005C ;AT=0x5C -BNE A0,AT,7F188CD8 ;branch if item not 5C: disabled (MP) -NOP -JAL 7F16E7C4 -ADDIU A0,R0,543C ;A0=text ID 543C: -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CD8: -JAL 7F0A215C ;display name of item A0 -NOP -BEQ R0,R0,7F188D04 -LW RA,0024 (SP) -//7F188CE8: -ADDIU S1,S1,FFFF ;S1-- -ADDIU S0,S0,000A ;S0+=A: next weapon -//7F188CF0: loop per each slot until a hit is found -BNEL S0,S2,7F188C68 -LHU A0,0004 (S0) -LUI V0,7F1C -ADDIU V0,V0,8A58 ;V0=7F1C8A58: -//7F188D00: return -LW RA,0024 (SP) -LW S0,0018 (SP) -LW S1,001C (SP) -LW S2,0020 (SP) -JR RA -ADDIU SP,SP,0028 - - -7F188D94: - accepts: A0=weapon# in set -ADDIU SP,SP,FFD8 -LUI T6,800B -SW S3,0020 (SP) -ADDIU T6,T6,CB88 ;T6=800ACB88: MP setup data. +18 is current weapon config -ADDU S3,A0,T6 ;S3=800ACB88+offset: entry in table -LBU T7,0018 (S3) ;T7=800ACBA0+offset: item# in current weapon config -SW S2,001C (SP) -SW S1,0018 (SP) -SW RA,0024 (SP) -SW S0,0014 (SP) -OR S2,R0,R0 ;S2=0 -BLEZ T7,7F188E04 ;branch if invalid -OR S1,R0,R0 ;S1=0 -LUI S0,8008 -ADDIU S0,S0,7268 ;S0=80087268: start of MP item block -//7F188DD0: -LHU A0,0004 (S0) ;A0=halfword containing lock byte for weapon -ANDI T8,A0,007F -JAL 7F19C910 -OR A0,T8,R0 ;A0=lock -BEQL V0,R0,7F188DF0 ;branch if not available -LBU T9,0018 (S3) -ADDIU S2,S2,0001 ;S2++: valid weapon count++ -//7F188DEC -LBU T9,0018 (S3) ;T9=item# in current weapon config -ADDIU S1,S1,0001 ;S1++ weapon count++ -ADDIU S0,S0,000A ;S0+=A: next MP weapon -SLT AT,S1,T9 ;TRUE if count < item# -BNEL AT,R0,7F188DD4 ;branch if true -LHU A0,0004 (S0) -//7F188E04: return -LW RA,0024 (SP) -OR V0,S2,R0 -LW S2,001C (SP) -LW S0,0014 (SP) -LW S1,0018 (SP) -LW S3,0020 (SP) -JR RA -ADDIU SP,SP,0028 - - -pull weapon from set -7F188E24: V0=p->entry for MP item A0 - accepts: A0=MP set item # -ADDIU A2,A0,0001 ;A2=A0+1: item count -ADDIU SP,SP,FFF0 -OR V0,A2,R0 ;V0=A2: count of valid items -BLEZ A2,7F188EAC ;return if invalid -OR A1,R0,R0 ;A1=0: count in set -LUI T0,8008 -LUI A0,800B -ADDIU A0,A0,CB88 ;A0=800ABC88: MP settings; +18 to weapon set -ADDIU T0,T0,7268 ;T0=80087268: start of mp item list -ADDIU T1,R0,000A ;T1=A: offset between each item entry -ADDIU A3,R0,005C ;A3=5C: MP disabled -//7F188E50: -ADDU T6,A0,A1 ;T6=weapon set+offset -LBU V1,0018 (T6) ;V1=MP item # -MULTU V1,T1 -MFLO T7 -ADDU T8,T0,T7 ;T8=start of item list + offset to entry -LBU T9,0000 (T8) ;T9=item# -BEQ A3,T9,7F188E74 ;branch if item# is MP disabled -NOP -ADDIU V0,V0,FFFF ;V0-- count-- -//7F188E74: -BLEZ V0,7F188EA0 ;branch if invalid count -NOP -ADDIU A1,A1,0001 ;A1++ count in set -SLTI AT,A1,0006 ;TRUE if count < 6 (max # in set) -BNEZ AT,7F188EA0 ;branch if overrun -NOP -BNE A2,V0,7F188E9C ;branch if count in set != count -OR A1,R0,R0 ;count=0 -OR V1,R0,R0 ;V1=0 MP item# -OR V0,R0,R0 ;V0=0 count -OR A2,V0,R0 ;A2=count -//7F188EA0: -BGTZL V0,7F188E54 ;loop if count invalid -ADDU T6,A0,A1 -SB V1,0003 (SP) ;SP+3= item# -//7F188EAC: return -LBU V1,0003 (SP) ;V1= item# -ADDIU T1,R0,000A ;T1=A: size of entries -LUI T0,8008 -MULTU V1,T1 -ADDIU T0,T0,7268 ;T0=80087268: start of mp item list -ADDIU SP,SP,0010 -MFLO T2 -ADDU V0,V0,T2 ;V0=p->entry for item V1 -JR RA -NOP - - -called by subroutine 7F00D820: -7F00D820: ??? - part of MP weapon expansion -ADDIU A0,A1,FF10 -SW A0,0018 (SP) -JAL 7F188E24 ;V0=p->item entry -SW A2,0030 (SP) ;SP+30=A2: p->object -LW A0,0018 (SP) -LUI AT,800A -LW A2,0030 (SP) -SW A0,CC30 (AT) ;A0=8009CC30: -LBU T7,0000 (V0) ;T7=item type -ADDIU AT,R0,005B ;AT=0x5B -ADDIU T2,R0,00F4 ;T2=00F4: model for shield -SB T7,005C (A2) ;object+5C= item type -LH T8,0006 (V0) ;T8=model# -ADDIU T3,R0,0015 ;T3=0x15 -OR A0,A2,R0 ;A0=A2: p->object -SH T8,0004 (A2) ;object+4= model# -LH T9,0008 (V0) ;T9=scale modifier -SH T9,0000 (A2) ;object+0= scale -LBU V1,0005 (V0) ;V1=flags -LBU T1,0000 (V0) ;T1=item type -SRL T0,V1,0x7 ;T0=1 if weapon present -BNE T1,AT,7F00D8CC ;branch if not body armor -OR V1,T0,R0 ;V1=T0: 1 if weapon present -//7F00D87C: body armor -LW T4,0008 (A2) ;T4=bitflag field 1 -LUI AT,3F80 -MTC1 AT,F0 -LUI AT,0102 -LW T6,000C (A2) ;T6=bitflag field 2 -OR T5,T4,AT ;T5=01020000 | bitflags1 -LUI AT,0020 -ORI AT,AT,4000 -OR T7,T6,AT ;T7=00204000 | bitflags2 -SH T2,0004 (A2) ;object+4= model for shield -SB T3,0003 (A2) ;object type= 15: body armor -SW T5,0008 (A2) ;object+8= bitflags1 -SW T7,000C (A2) ;object+C= bitflags2 -SWC1 F0,005C (A2) ;object+5C= 1.0: max shield quality -SWC1 F0,0060 (A2) ;object+60= 1.0: cur shield quality -SW A2,0030 (SP) ;SP+30= p->object -JAL 7F00CEE4 -LW A1,0034 (SP) -//7F000D8C4: -LW A2,0030 (SP) ;A2=p->object -OR V1,R0,R0 ;V1=0 -//7F00D8CC: normal items... -LBU A1,005C (A2) ;A1= item type -BEQL A1,R0,7F00D8F8 ;quit if zero -LW RA,0014 (SP) -BEQ V1,R0,7F00D8F4 ;branch if shield found -OR A0,A1,R0 ;A0=A1: item type -JAL 7F011560 -SW A2,0030 (SP) ;SP+30=p->object -LW A0,0030 (SP) ;A0=p->object -JAL 7F00CEE4 -LW A1,0034 (SP) ;A1= -//7F00D8F4: -LW RA,0014 (SP) -ADDIU SP,SP,0030 -JR RA -NOP - - -pulls ammo types: -//7F00FCE8: diff --git a/notes/PD Documentation/MP menus/Revisions/forcing new MP setups.txt b/notes/PD Documentation/MP menus/Revisions/forcing new MP setups.txt deleted file mode 100644 index 7bcaf84..0000000 --- a/notes/PD Documentation/MP menus/Revisions/forcing new MP setups.txt +++ /dev/null @@ -1,343 +0,0 @@ -30 ame Lucrene Tower -001C bgdata/bg_ame.seg stage bgdata -0102 Ump_setupameZ default MP setup name -0126 UsetupameZ default solo setup name -014B bgdata/bg_ame_padsZ pads -014C bgdata/bg_ame_tilesZ tiles - -v1.1 -8007FFD8 25FF8 001C 014C 0151 0129 0105 ~ 3 - dD: EXTRACTION -800802E8 26308 001C 014C 014B 0126 0102 ~ 1 - dD: DEFECTION -80080470 26490 001C 014C 014B 014A 0125 ~ Mr. Blondes Revenge - -push ame's mp_setup to setup_dam (dam's old text file) -80082490 013A4BD0 -804F0780 setup file -must set PROPER end of each compressed setup file! - -+_+ - -hacking the MP menu to add more options - -2ABB8 80084B98 new MP stage select format - format: - 0x0 1 stage# - 0x1 1 lock - 0x2 2 text ID - -2AC28 80084C08 new start of MP subsection block - format: - 0x0 1 RESERVED - 0x1 1 insertion point - 0x2 2 text ID -potentially add entry Hacker before random: 0010 50FF - at current, 'Classic' is force-activated, so would need a major workaround (aka rewrite) - - -7F17F024: pull text ID for given stage # -27BDFFE8 ADDIU SP,SP,FFE8 -AFA40018 SW A0,0018 (SP) -3C048008 LUI A0,8008 -3C03800B LUI V1,800B -24824B9A *ADDIU V0,A0,4B9A ;V0=80084B9A: start of MP stage list -AFBF0014 SW RA,0014 (SP) -804EFFFF *LBU T6,FFFF (V0) ;T6=80084B99: size of MP stage list in bytes -9063CB99 LBU V1,CB99 (V1) ;V1=800ACB99: -004E2021 *ADDU A0,V0,T6 ;A0=80084B9A+offset: end of MP stage list -//7F17F048: pull stage# -804E0000 *LB T6,0000 (V0) ;T6=stage# -146E0005 *BNE V1,T6,7F17F064 ;branch if numbers aren't equal -00000000 *NOP -//7F17F054: -0FC5B9F1 JAL 7F16E7C4 -94440002 *LHU A0,0002 (V0) ;A0=V0+4: text ID -10000006 BEQ R0,R0,7F17F078 ;return -00000000 *NOP -//7F17F064: -24420004 *ADDIU V0,V0,0004 ;V0+=6: next entry -1444FFF7 *BNE V0,A0,7F17F04C ;branch if you aren't at end of list -00000000 *NOP -3C027F1C LUI V0,7F1C -24428050 ADDIU V0,V0,8050 ;V0=7F1B8050: -//7F17F078: -8FBF0014 LW RA,0014 (SP) -27BD0018 +ADDIU SP,SP,0018 -03E00008 JR RA -00000000 -NOP - - -7F1791C8: determine if MP stage is accessible - ADDIU SP,SP,FFA8 - LUI T7,8008 - SW RA,0024 (SP) - SW S2,0020 (SP) - SW S1,001C (SP) - SW S0,0018 (SP) - SW A1,005C (SP) -00000000 *NOP -8DE14C08 *LW AT,4C08 (T7) ;AT=subsection insertion point - ADDIU T6,SP,0040 ;T6+SP+40 -8DE84C0C *LW T0,4C0C (T7) ;T0=subsection text <<16 - SW AT,0000 (T6) ;copy MP stage subsection section table to SP+40 -8DE14C10 *LW AT,4C10 (T7) - SW T0,0004 (T6) -8DE84C14 *LW T0,4C14 (T7) - SW AT,0008 (T6) -00000000 *NOP - SW T0,000C (T6) -00000000 *NOP - ADDIU T1,A0,FFFF -00000000 *NOP - SLTIU AT,T1,0007 - OR S2,A2,R0 -00008825 OR S1,R0,R0 ;S1=0: stage count=0 - BEQ AT,R0,7F179498 -00000000 *NOP - SLL T1,T1,0x2 - LUI AT,7F1C - ADDU AT,AT,T1 - LW T1,805C (AT) ;T1=7F1B805C: TLB jump table - JR T1 - NOP - -7F179248: -3C108008 LUI S0,8008 -26104B9A *ADDIU S0,S0,4B9A ;S0=80084B98: base address for MP stage select -920AFFFF *LBU T2,FFFF (S0) ;T2=size of MP stage block -01505021 *ADDU T2,T2,S0 ;T2=80084BFE: table cutoff -//7F179258: -0FC67244 JAL 7F19C910 ;V0=TRUE if lock byte #A0 unlocked; fries T6 -92040001 *LBU A0,0001 (S0) ;lock flags -10400002 BEQ V0,R0,7F17926C -26100004 *ADDIU S0,S0,0004 ;S0+=6: next stage# -26310001 ADDIU S1,S1,0001 ;S1++ -160AFFFA *BNE S0,T2,7F179258 ;loop for each entry -00000000 NOP -10000088 BEQ R0,R0,7F179498 -AE510000 SW S1,0000 (S2) - -7F17927C: -3C108008 LUI S0,8008 -26104B9A *ADDIU S0,S0,4B9A -920CFFFF *LBU T4,FFFF (S0) -01906021 *ADDU T4,T4,S0 ;T4=80084BFE: end of list -//7F179284: -0FC67244 JAL 7F19C910 ;V0=TRUE if lock byte #A0 unlocked; fries T6 -92040001 *LBU A0,0001 (S0) ;A0=lock flag -10400008 *BEQ V0,R0,7F1792B4 -8E4B0000 LW T3,0000 (S2) -562B0006 BNEL S1,T3,7F1792B4 -26310001 ADDIU S1,S1,0001 ;S1++ -0FC5B9F1 JAL 7F16E7C4 ;convert text ID A0 into p->text; fries: V1,A1,T0,T6,T7,T8,T9 -96040002 *LHU A0,0002 (S0) ;A0=text ID -1000007C *BEQ R0,R0,7F1794A0 -8FBF0024 LW RA,0024 (SP) -//7F1792B0: -26310001 ADDIU S1,S1,0001 -26100004 *ADDIU S0,S0,0004 ;S0+=6: next entry -160CFFF3 *BNE S0,T4,7F179284 ;branch for each entry -00000000 NOP -10000075 BEQ R0,R0,7F17949C -00001025 OR V0,R0,R0 - -7F1792CC: -3C108008 LUI S0,8008 -26104B9A *ADDIU S0,S0,4B9A ;S0=80084B98: MP stage list -9219FFFF *LBU T9,FFFF (S0) -0330C821 *ADDU T9,T9,S0 ;T9=80074BFE: end of list -//7F1792D4: -0FC67244 JAL 7F19C910 ;V0=TRUE if lock byte #A0 unlocked; fries T6 -92040001 *LBU A0,0001 (S0) ;A0=lock flag -10400003 BEQ V0,R0,7F1792F0 -8E4D0000 LW T5,0000 (S2) -122D0004 *BEQ S1,T5,7F179300 -26310001 ADDIU S1,S1,0001 ;S1++ -//7F1792F0: -26100004 *ADDIU S0,S0,0004 -1619FFF8 *BNE S0,T9,7F1792D4 -00000000 NOP -//7F179300: -82180000 *LB T8,0000 (S0) ;T8=stage# -3C01800B LUI AT,800B -10000063 BEQ R0,R0,7F179498 -A038CB99 SB T8,CB99 (AT) ;stage#->800ACB99 - -7F179310: -3C108008 LUI S0,8008 -26104B9A *ADDIU S0,S0,4B9A ;S0=80084B98: MP stage list -9208FFFF *LBU T0,FFFF (S0) -01104021 *ADDU T0,T0,S0 ;80084BFE: end of list -//7F179318: -3C0E800B LUI T6,800B -91CECB99 LBU T6,CB99 (T6) -820F0000 *LB T7,0000 (S0) ;T7=stage# -15CF0002 BNE T6,T7,7F179330 -00000000 NOP -AE510000 SW S1,0000 (S2) -//7F179330: -0FC67244 JAL 7F19C910 ;V0=TRUE if lock byte #A0 unlocked; fries T6 -92040001 *LBU A0,0001 (S0) ;A0=lock flag -10400002 BEQ V0,R0,7F179344 -26100004 *ADDIU S0,S0,0004 ;S0+=6: next entry -26310001 ADDIU S1,S1,0001 ;S1++ -//7F179344: -1608FFF4 BNE S0,T0,7F179318 ;lather rinse repeat -00000000 NOP -10000051 BEQ R0,R0,7F17949C -00001025 OR V0,R0,R0 - -7F17935C: determine if "Classic" should appear - ADDIU T1,R0,0003 - SW T1,0000 (S2) ;3->S2: # stage subsections in table - JAL 7F19C910 - ADDIU A0,R0,0024 - BNEL V0,R0,7F17949C ;quit if Complex unlocked - OR V0,R0,R0 ;V0=0 - JAL 7F19C910 - ADDIU A0,R0,0027 - BNEL V0,R0,7F17949C ;quit if Temple unlocked - OR V0,R0,R0 ;V0=0 - JAL 7F19C910 - ADDIU A0,R0,002A - BNEL V0,R0,7F17949C ;quit if Felicity unlocked - OR V0,R0,R0 ;V0=0 - LW T2,0000 (S2) - ADDIU T3,T2,FFFF - BEQ R0,R0,7F179498 - SW T3,0000 (S2) ;T3=count-- - -7F1793A4: display subsection text when applicable -8E510000 LW S1,0000 (S2) ;S1=#stage subsections in table -0FC67244 JAL 7F19C910 -24040024 ADDIU A0,R0,0024 -5440000C *BNEL V0,R0,7F1793E4 ;branch if Complex unlocked -00000000 *NOP -0FC67244 JAL 7F19C910 -24040027 ADDIU A0,R0,0027 -54400008 *BNEL V0,R0,7F1793E4 ;branch if Temple unlocked -00000000 *NOP -0FC67244 JAL 7F19C910 -2404002A ADDIU A0,R0,002A -54400004 *BNEL V0,R0,7F1793E4 ;branch if Felicity unlocked -00000000 *NOP -5A200002 *BLEZL S1,7F1793E4 ;branch if not greater than zero -00000000 *NOP -26310001 ADDIU S1,S1,0001 ;S1++ -//7F1793E4: -00116080 *SLL T4,S1,0x2 ;T4=S1*4: subsection # -> offset -03AC2021 ADDU A0,SP,T4 ;A0=SP+offset to entry -0FC5B9F1 JAL 7F16E7C4 -94840042 *LHU A0,0042 (A0) ;A0=subsection text ID -1000002A BEQ R0,R0,7F1794A0 -8FBF0024 LW RA,0024 (SP) - -7F1793FC: -8E500000 LW S0,0000 (S2) ; -0FC67244 JAL 7F19C910 -24040024 ADDIU A0,R0,0024 -5440000C *BNEL V0,R0,7F17943C ;branch if Complex unlocked -00000000 *NOP -0FC67244 JAL 7F19C910 -24040027 ADDIU A0,R0,0027 -54400008 *BNEL V0,R0,7F17943C ;branch if Felicity unlocked -00000000 *NOP -0FC67244 JAL 7F19C910 -2404002A ADDIU A0,R0,002A -14400004 BNEZ V0,7F17943C ;branch if Felicity unlocked -24010001 ADDIU AT,R0,0001 -52010001 *BEQL S0,AT,7F17943C ;if S0=1, S0++ -26100001 -ADDIU S0,S0,0001 -00000000 *NOP -//7F17943C: -00106880 *SLL T5,S0,0x2 ;T5=S0*8: subsection# -> offset -00000000 *NOP -03AD2821 *ADDU A1,SP,T5 ;A1=p->subsection entry -80AE0041 *LB T6,0041 (A1) ;T8=subsection insertion point -3C108008 LUI S0,8008 -26104B9A *ADDIU S0,S0,4B9A ;S0=80084B98: MP stage list -19C0000F *BLEZ T6,7F179494 -00001825 OR V1,R0,R0 -//7F17945C: -92040001 *LBU A0,0001 (S0) ;A0=lock flag -AFA3003C SW V1,003C (SP) -0FC67244 JAL 7F19C910 -AFA5002C SW A1,002C (SP) ;SP+2C=A1: save p->copy of subsection -8FA3003C LW V1,003C (SP) -10400002 BEQ V0,R0,7F17947C -8FA5002C LW A1,002C (SP) ;A1=p->copy of subsection -26310001 ADDIU S1,S1,0001 -//7F17947C: -80AE0041 *LB T6,0041 (A1) ;T6=subsection insertion point -24630001 ADDIU V1,V1,0001 -26100004 *ADDIU S0,S0,0004 ;S0+=6: next entry -006E082A SLT AT,V1,T6 -5420FFF4 BNEL AT,R0,7F179460 -92040001 *LBU A0,0001 (S0) -AE510008 SW S1,0008 (S2) -//7F179498: - OR V0,R0,R0 - LW RA,0024 (SP) - LW S0,0018 (SP) - LW S1,001C (SP) - LW S2,0020 (SP) - JR RA - ADDIU SP,SP,0058 - -CORRECTION FOR RANDOM SELECT -7F179104: MP random stage - ADDIU SP,SP,FFD8 - SW S1,001C (SP) - SW S0,0018 (SP) - SW S2,0020 (SP) - LUI S0,8008 -26104B9A *ADDIU S0,S0,4B9A - SW RA,0024 (SP) - OR S2,R0,R0 -9211FFFF *LBU S1,FFFF (S0) -2631FFFC *ADDIU S1,S1,FFFC -02118821 *ADDU S1,S0,S1 -//7F17912C: - JAL 7F19C910 -92040001 *LBU A0,0001 (S0) - BEQ V0,R0,7F179140 -26100004 *ADDIU S0,S0,0004 - ADDIU S2,S2,0001 -//7F179140: - SLTU AT,S0,S1 - BNEZ AT,7F17912C - NOP - JAL 70012DC0 - NOP - DIVU V0,S2 - BNEZ S2,7F179164 - NOP - BREAK -//7F179164: - MFHI S1 -3C108008 *LUI S0,8008 -26104B9A *ADDIU S0,S0,4B9A -9212FFFF *LBU S2,FFFF (S0) -02129021 *ADDU S2,S0,S2 - OR V1,R0,R0 -//7F17917C: - JAL 7F19C910 -92040001 *LBU A0,0001 (S0) - BEQL V0,R0,7F1791A4 -26100004 *ADDIU S0,S0,0004 - BNEL S1,R0,7F1791A0 - ADDIU S1,S1,FFFF - BEQ R0,R0,7F1791B0 -82020000 *LB V0,0000 (S0) -//7F17919C: - ADDIU S1,S1,FFFF -26100004 *ADDIU S0,S0,0004 - BNE S0,S2,7F17917C - ADDIU V0,R0,0032 -//7F1791B0: - LW RA,0024 (SP) - LW S0,0018 (SP) - LW S1,001C (SP) - LW S2,0020 (SP) - JR RA - ADDIU SP,SP,0028 - \ No newline at end of file diff --git a/notes/PD Documentation/MP menus/Revisions/revised weapon set format.txt b/notes/PD Documentation/MP menus/Revisions/revised weapon set format.txt deleted file mode 100644 index 55bca3e..0000000 --- a/notes/PD Documentation/MP menus/Revisions/revised weapon set format.txt +++ /dev/null @@ -1,78 +0,0 @@ -Need 0x50 8 * A -4 bytes fill availabe at end of table --4 0x30 TTTT.11223344.L1L2L3L4.11223344 - TTTT.112233445566.112233445566 --6 0x48 TTTT.1122334455.1122334455 - TTTT.112233445566.L1L2L3L4 --8 0x60 TTTT.11223344.11223344 - TTTT.11223344.L1L2L3L4 - -+_+ - -weapons to add: -24 0150 0000 80 0117 0100 PP9i -25 0150 0000 80 0118 0100 CC13 -26 0264 0000 80 0119 0100 KLO1313 -27 0464 0000 80 011A 0100 KF7 Special -28 0264 0000 80 011B 0100 ZZT -29 0296 0000 80 011C 0100 DMC -2A 0496 0000 80 011D 0100 AR33 -2B 0296 0000 80 011E 0100 RC-P45 - -cheap solution, for now: - Kill a bunch of debug text, then copy the MP item list to a new location. - Yes, it is very, very cheap. -800526E0-800528B6 0x2F entries - -//7F188BE4: -3C108005 LUI S0,8008 -3C128005 LUI S2,8008 -... -... -265228B6 ADDIU S2,S2,73EE ;S2=800873EE: end of block -261026E0 ADDIU S0,S0,7268 ;S0=80087268: start of block - - -//7F188C4C: -3C108005 LUI S0,8005 -3C128005 LUI S2,8005 -... -... -265228B6 ADDIU S2,S2,73EE ;S2=800873EE: end of block -261026E0 ADDIU S0,S0,7268 ;S0=80087268: start of block - -//7F188D3C: -3C108005 LUI S0,8005 -261026E0 ADDIU S0,S0,26E0 - -//7F188DC8: -3C108005 LUI S0,8008 -261026E0 ADDIU S0,S0,7268 ;S0=80087268: start of MP item block - -//7F188E38: -3C088005 LUI T0,8008 -... -... -250826E0 ADDIU T0,T0,7268 ;T0=80087268: start of mp item list - -//7F188EB4: -3C088005 LUI T0,8008 -... -250826E0 ADDIU T0,T0,7268 - -//7F18915C: -3C158005 LUI ,8008 -... -//7F189188: -26B526E0 ADDIU ,,7268 - -//7F189404: -3C088005 LUI T0,8008 -250826E0 ADDIU T0,T0,7268 ;T0=80087268: p->weapon data - -//7F18944C: -3C088005 LUI T0,8008 -250826E0 ADDIU T0,T0,7268 ;T0=80087268: p->weapon data - -//7F189478: test if entry is valid for weapon data table -2C61002F SLTIU AT,V1,0027 ;AT=TRUE if item slot 0-26 diff --git a/notes/PD Documentation/PD TLB correspondance.txt b/notes/PD Documentation/PD TLB correspondance.txt deleted file mode 100644 index 1423463..0000000 --- a/notes/PD Documentation/PD TLB correspondance.txt +++ /dev/null @@ -1,590 +0,0 @@ -PD TLB Correspondance: - - Perfect Dark compresses the ASM loaded to TLB addresses. Unlike GoldenEye, these are 0x1000 byte clumps instead of 0x2000. - To find the start of the block regardless region and version, search for "1173001000". This is the compression header plus the decompressed file size, which in this case is always 0x1000. - -TLB address E 1.0 E 1.1 NPDJ NPDP -table index 4FC40 4FC40 4FC40 4FC40 all offsets relative to this base address -7F000000 5032E 5032E 50332 50336 -7F001000 50BCA -7F002000 516A0 -7F003000 521A4 -7F004000 52BD2 -7F005000 536AE -7F006000 540D8 -7F007000 54AB2 -7F008000 55352 -7F009000 55A98 -7F00A000 56560 -7F00B000 56FE0 -7F00C000 579AC -7F00D000 582FA -7F00E000 58D62 -7F00F000 597F6 -7F010000 5A0E0 -7F011000 5AB44 -7F012000 5B438 -7F013000 5BFC6 -7F014000 5C986 -7F015000 5D480 -7F016000 5DE76 -7F017000 5E864 -7F018000 5F29E -7F019000 5FC42 -7F01A000 60654 -7F01B000 60EC6 -7F01C000 61928 -7F01D000 62370 -7F01E000 62E08 -7F01F000 63816 -7F020000 6429C -7F021000 64DE2 -7F022000 657EC -7F023000 6628C -7F024000 66C58 -7F025000 67734 -7F026000 6824C -7F027000 68AFA -7F028000 69562 -7F029000 6A096 -7F02A000 6AAA4 -7F02B000 6B470 -7F02C000 6BD9E -7F02D000 6C868 -7F02E000 6D376 -7F02F000 6DC62 -7F030000 6E2DC -7F031000 6EB66 -7F032000 6F63C -7F033000 6FFDE -7F034000 70A9A -7F035000 7140E -7F036000 71E5A -7F037000 72856 -7F038000 73240 -7F039000 73C80 -7F03A000 74560 -7F03B000 74C12 -7F03C000 75686 -7F03D000 76062 -7F03E000 769E4 -7F03F000 772B0 -7F040000 77CDC -7F041000 787FC -7F042000 792D4 -7F043000 79CF2 -7F044000 7A64C -7F045000 7AFE6 -7F046000 7B950 -7F047000 7C2EE -7F048000 7CDB0 -7F049000 7D7A2 -7F04A000 7DF86 -7F04B000 7E942 -7F04C000 7F43A -7F04D000 7FF1A -7F04E000 808BA -7F04F000 80F28 -7F050000 8135A -7F051000 81906 -7F052000 82144 -7F053000 82734 -7F054000 82CDE -7F055000 8315A -7F056000 8396E -7F057000 84208 -7F058000 84A34 -7F059000 8524A -7F05A000 85B4A -7F05B000 8653C -7F05C000 86E0C -7F05D000 876E0 -7F05E000 87E48 -7F05F000 88794 -7F060000 89024 -7F061000 89A14 -7F062000 8A49A -7F063000 8AF2E -7F064000 8B88E -7F065000 8C2DA -7F066000 8CD38 -7F067000 8D60C -7F068000 8DEDA -7F069000 8E84A -7F06A000 8F302 -7F06B000 8FD62 -7F06C000 9083C -7F06D000 91378 -7F06E000 91D1A -7F06F000 926E8 -7F070000 9306C -7F071000 93AA0 -7F072000 944C0 -7F073000 94F64 -7F074000 95A24 -7F075000 963DA -7F076000 96E30 -7F077000 97844 -7F078000 98302 -7F079000 98CA2 -7F07A000 99642 -7F07B000 9A0FC -7F07C000 9AB1A -7F07D000 9B5A6 -7F07E000 9BFE6 -7F07F000 9CAD4 -7F080000 9D482 -7F081000 9DEB8 -7F082000 9E9BA -7F083000 9F418 -7F084000 9FD94 -7F085000 A08BC -7F086000 A1366 -7F087000 A1E18 -7F088000 A273E -7F089000 A306A -7F08A000 A39F4 -7F08B000 A4300 -7F08C000 A4D04 -7F08D000 A5682 -7F08E000 A5DB8 -7F08F000 A6778 -7F090000 A71E4 -7F091000 A7B8A -7F092000 A8564 -7F093000 A8F40 -7F094000 A9960 -7F095000 AA3AE -7F096000 AAD8A -7F097000 AB67A -7F098000 ABFBE -7F099000 ACA86 -7F09A000 AD48E -7F09B000 ADF3A -7F09C000 AE8E6 -7F09D000 AF254 -7F09E000 AFCC4 -7F09F000 B0832 -7F0A0000 B1394 -7F0A1000 B1E76 -7F0A2000 B2904 - 7F0A215C display name of item A0; calls 7F16E7C4 to display text at item+46 - accepts: A0=item# - fries: V0,V1,A0,A1,T0,T6,T7,T8,T9 - 7F0A21A4 V0= name of item A0 [item+46] - accepts: A0=item# - fries: V1,T6 - 7F0A21D0 display name of item A0; calls 7F16E7C4 to display text at item+44 - accepts: A0=item# - fries: V0,V1,A0,A1,T0,T6,T7,T8,T9 - 7F0A2218 - -7F0A3000 B32C4 -7F0A4000 B3D20 -7F0A5000 B46E4 -7F0A6000 B518E -7F0A7000 B5CA6 -7F0A8000 B67EE -7F0A9000 B725E -7F0AA000 B7CC2 -7F0AB000 B86E0 -7F0AC000 B915A -7F0AD000 B9C0E -7F0AE000 BA632 -7F0AF000 BAF40 -7F0B0000 BB940 -7F0B1000 BC2E8 -7F0B2000 BCA9A -7F0B3000 BD3F4 -7F0B4000 BDCD0 -7F0B5000 BE70A -7F0B6000 BEE1E -7F0B7000 BF858 -7F0B8000 C0330 -7F0B9000 C0DB2 -7F0BA000 C17D4 -7F0BB000 C2284 -7F0BC000 C2C46 -7F0BD000 C3538 -7F0BE000 C3EC4 -7F0BF000 C48E8 -7F0C0000 C5294 -7F0C1000 C5CDE -7F0C2000 C670A -7F0C3000 C7186 -7F0C4000 C7BCE -7F0C5000 C85B2 -7F0C6000 C8F9E -7F0C7000 C992A -7F0C8000 CA1BC -7F0C9000 CAAF6 -7F0CA000 CB4E0 -7F0CB000 CBED2 -7F0CC000 CC890 -7F0CD000 CD332 -7F0CE000 CDDAA -7F0CF000 CE78C -7F0D0000 CF170 -7F0D1000 CFBC0 -7F0D2000 D04F4 -7F0D3000 D0FD6 -7F0D4000 D1A2E -7F0D5000 D2468 -7F0D6000 D2DD6 -7F0D7000 D37B6 -7F0D8000 D4134 -7F0D9000 D494A -7F0DA000 D532E -7F0DB000 D5B8C -7F0DC000 D6018 -7F0DD000 D6986 -7F0DE000 D7354 -7F0DF000 D7D9E -7F0E0000 D88AE -7F0E1000 D9360 -7F0E2000 D9D70 -7F0E3000 DA6DE -7F0E4000 DB064 -7F0E5000 DB7D6 -7F0E6000 DC178 -7F0E7000 DCBF0 -7F0E8000 DD60E -7F0E9000 DE0B8 -7F0EA000 DEAF8 -7F0EB000 DF528 -7F0EC000 DFEA8 -7F0ED000 E08D4 -7F0EE000 E13BC -7F0EF000 E1DF0 -7F0F0000 E2882 -7F0F1000 E3276 -7F0F2000 E3C18 -7F0F3000 E469E -7F0F4000 E51DA -7F0F5000 E5C96 -7F0F6000 E6712 -7F0F7000 E71E8 -7F0F8000 E7B50 -7F0F9000 E85EC -7F0FA000 E9078 -7F0FB000 E9AE4 -7F0FC000 EA4EE -7F0FD000 EAEEE -7F0FE000 EB9AA -7F0FF000 EC3D2 -7F100000 ECC9C -7F101000 ED5F0 -7F102000 EDF80 -7F103000 EE688 -7F104000 EEEB4 -7F105000 EF878 -7F106000 F022C -7F107000 F0B9A -7F108000 F1420 -7F109000 F1B2C -7F10A000 F24B2 -7F10B000 F2E2A -7F10C000 F36EA -7F10D000 F3FD0 -7F10E000 F4782 -7F10F000 F507A -7F110000 F5718 -7F111000 F6002 -7F112000 F69E0 -7F113000 F724A -7F114000 F7C5A -7F115000 F86D4 -7F116000 F90DA -7F117000 F98A6 -7F118000 FA0DE -7F119000 FAA92 -7F11A000 FB4D0 -7F11B000 FBE92 -7F11C000 FC906 -7F11D000 FD28A -7F11E000 FDB90 -7F11F000 FE3A6 -7F120000 FEBFC -7F121000 FF34E -7F122000 FFAB4 -7F123000 1004B4 -7F124000 100E16 -7F125000 10168C -7F126000 1020B0 -7F127000 102B60 -7F128000 10360C -7F129000 103FA4 -7F12A000 104A84 -7F12B000 1055D2 -7F12C000 1060A6 -7F12D000 106B9C -7F12E000 107514 -7F12F000 107F5E -7F130000 108A34 -7F131000 10940C -7F132000 109E48 -7F133000 10A728 -7F134000 10B14E -7F135000 10BBD6 -7F136000 10C60C -7F137000 10CF4E -7F138000 10D8AA -7F139000 10E2B4 -7F13A000 10ED66 -7F13B000 10F86C -7F13C000 1102F4 -7F13D000 110D64 -7F13E000 1118D0 -7F13F000 112372 -7F140000 112E46 -7F141000 1137EE -7F142000 11426C -7F143000 114B6E -7F144000 115582 -7F145000 115C0C -7F146000 116460 -7F147000 116B90 -7F148000 11762C -7F149000 1180E0 -7F14A000 118BE0 -7F14B000 11932A -7F14C000 119D36 -7F14D000 11A752 -7F14E000 11B0AE -7F14F000 11BAC4 -7F150000 11C506 -7F151000 11D032 -7F152000 11DA7A -7F153000 11E1C2 -7F154000 11EA7C -7F155000 11F2B2 -7F156000 11FD26 -7F157000 120790 -7F158000 121268 -7F159000 121CF2 -7F15A000 1225AA -7F15B000 122FD4 -7F15C000 123B3E -7F15D000 1245D6 -7F15E000 124F94 -7F15F000 125A3A -7F160000 126368 -7F161000 126CE0 -7F162000 1277DC -7F163000 1281F6 -7F164000 128D3E -7F165000 1297FE -7F166000 12A24A -7F167000 12AC44 -7F168000 12B586 -7F169000 12C01C -7F16A000 12C9F2 -7F16B000 12D44A -7F16C000 12DC3E -7F16D000 12E4F4 -7F16E000 12EC60 - 7F16E7C4 V0=p->text for text ID A0 - accepts: A0=text ID - fries: V1,A1,T0,T6,T7,T8,T9 - 7F16E808 A0->SP+0; deleted routine, most likely - 7F16E818 - -7F16F000 12F63A -7F170000 13004E -7F171000 1309D6 -7F172000 13133C -7F173000 131BFE -7F174000 1325F2 -7F175000 132ECE -7F176000 13384A -7F177000 1341B8 -7F178000 134AFE -7F179000 135414 - 7F1791C8 determine if MP stage is accessible - 7F1794B4 - -7F17A000 135C3C -7F17B000 136398 -7F17C000 136E30 -7F17D000 1376C0 -7F17E000 137F78 -7F17F000 13888A - 7F17F024 display text for selected MP weapon set - 7F17F088 - -7F180000 1391D0 -7F181000 139C74 -7F182000 13A74A -7F183000 13B1D2 -7F184000 13BCA0 -7F185000 13C6DC -7F186000 13D010 -7F187000 13DA2A -7F188000 13E4F2 -7F189000 13EF3E - 7F1892DC copies selected MP weapon set as current - 7F1895BC - -7F18A000 13F856 -7F18B000 14017C -7F18C000 140B68 -7F18D000 1414B2 -7F18E000 141D2E -7F18F000 1426FE -7F190000 1430E0 -7F191000 143B86 -7F192000 14460A -7F193000 145038 -7F194000 145AC2 -7F195000 146524 -7F196000 146DAC -7F197000 1477CC -7F198000 148214 -7F199000 148CA2 -7F19A000 1496FC -7F19B000 14A22C -7F19C000 14AB42 - 7F19C910 V0=1 if lock byte A0 unlocked; unlock flags with 0x1 set - accepts: A0=lock byte # - fries: T6 - 7F19C938 V0=1 if bit A0 in lock byte A1 set - accepts: A0=bit# 0-7, A1=lock byte # - fries: T6,T7,T8,T9 - 7F19C96C V0=TRUE if A0=0; V0=FALSE if A0!=0 - 7F19C990 - -7F19D000 14B2FE -7F19E000 14BCA6 -7F19F000 14C766 -7F1A0000 14D22E -7F1A1000 14DD86 -7F1A2000 14E41E -7F1A3000 14ECF8 -7F1A4000 14F640 -7F1A5000 14FE72 -7F1A6000 1504E2 -7F1A7000 150CDC -7F1A8000 15162E -7F1A9000 151CAC -7F1AA000 15239E -7F1AB000 1529B0 -7F1AC000 153000 -7F1AD000 153502 -7F1AE000 153C1C -7F1AF000 153C38 -7F1B0000 153C54 -7F1B1000 153C70 -7F1B2000 153D64 -7F1B3000 1543E8 -7F1B4000 154AB6 -7F1B5000 1550EC -7F1B6000 155902 -7F1B7000 155F8A -7F1B8000 1566BE -7F1B9000 157810 -7F1BA000 1580AC -7F1BB000 158B82 -7F1BC000 159686 -7F1BD000 15A0B4 -7F1BE000 15AB90 -7F1BF000 15B5BA -7F1C0000 15BF94 -7F1C1000 15C834 -7F1C2000 15CF7A -7F1C3000 15DA42 -7F1C4000 15E4C2 -7F1C5000 15EE8E -7F1C6000 15F7DC -7F1C7000 160244 -7F1C8000 160CD8 -7F1C9000 1615C2 -7F1CA000 162026 -7F1CB000 16291A -7F1CC000 1634A8 -7F1CD000 163E68 -7F1CE000 164962 -7F1CF000 165358 -7F1D0000 165D46 -7F1D1000 166780 -7F1D2000 167124 -7F1D3000 167B36 -7F1D4000 1683A8 -7F1D5000 168E0A -7F1D6000 169852 -7F1D7000 16A2EA -7F1D8000 16ACF8 -7F1D9000 16B77E -7F1DA000 16C2C4 -7F1DB000 16CCCE -7F1DC000 16D76E -7F1DD000 16E13A -7F1DE000 16EC16 -7F1DF000 16F72E -7F1E0000 16FFDC -7F1E1000 170A44 -7F1E2000 171578 -7F1E3000 171F86 -7F1E4000 172952 -7F1E5000 173280 -7F1E6000 173D4A -7F1E7000 174858 -7F1E8000 175144 -7F1E9000 1757BE -7F1EA000 176048 -7F1EB000 176B1E -7F1EC000 1774C0 -7F1ED000 177F7C -7F1EE000 1788F0 -7F1EF000 17933C -7F1F0000 179D38 -7F1F1000 17A722 -7F1F2000 17B162 -7F1F3000 17BA42 -7F1F4000 17C0F4 -7F1F5000 17CB68 -7F1F6000 17D544 -7F1F7000 17DEC6 -7F1F8000 17E792 -7F1F9000 17F1BE -7F1FA000 17FCDE -7F1FB000 1807B6 -7F1FC000 1811D4 -7F1FD000 181B2E -7F1FE000 1824C8 -7F1FF000 182E32 -7F200000 1837D0 -7F201000 184292 -7F202000 184C84 -7F203000 185468 -7F204000 185E24 -7F205000 18691C -7F206000 1873FC -7F207000 187D9C -7F208000 18840A -7F209000 18883C -7F20A000 188DE8 -7F20B000 189626 -7F20C000 189C16 -7F20D000 18A1C0 -7F20E000 18A63C -7F20F000 18AE50 -7F210000 18B6EA -7F211000 18BF16 -7F212000 18C72C -7F213000 18D02C -7F214000 18DA1E -7F215000 18E2EE -7F216000 18EBC2 -7F217000 18F32A -7F218000 18FC76 -7F219000 190506 -7F21A000 190EF6 -7F21B000 19197C -7F21C000 192410 -7F21D000 192D70 -7F21E000 1937BC -7F21F000 19421A -7F220000 194AEE -End of Table 194B30 -(table followed by font) - \ No newline at end of file diff --git a/notes/PD Documentation/PD memory map.txt b/notes/PD Documentation/PD memory map.txt deleted file mode 100644 index d8d0461..0000000 --- a/notes/PD Documentation/PD memory map.txt +++ /dev/null @@ -1,390 +0,0 @@ - -NPDE-1.1 -ROM size RDRAM - 1000 2050 80001000-80003050 - 3050 2BA1C 80003050-80059FE0 - 2EA6C 2000 repeat of 1050-2050 - 30A6C 8DE4 incomplete file - copy of 0x3050 compressed binary - 39850 10F40 80059FE0-8008AE20 - 4A790 40C0 zeroes - 4E850 13F0 RareZip (1173) decompression routine - 4FC40 1074E4 TLB index and binaries -157124 6EA zeroes -15780E TLB binaries 7F1B9000 - 7F220000 -194B30 - - E82000 Music Table (Number of Entries, Offset, Uncompressed Size, Compressed Size) - E823BC Music Files, 0x77 - ED83A0 Assorted Files, 0x7DE (Backgrounds, Tiles, Setups, Texts, Objects, etc) -1D5CA00 Internal Names Offset Table -1D5E980 Internal Name Strings -1D65740 Null (0x800) -1D65F40 Textures -1FF7CA0 Texture Offset Table (Offsets Down from 01D65F40) -1FFEA20 1173 Compressed File (unknown, 0xB30 compressed, 0xBE20 uncompressed) -1FFF550 1173 Compressed File (unknown, 0x8B0 compressed, 0xBE20 uncompressed) -1FFFE00 Fill -2000000 ROM End - -+_+ - -3050.1173 primary compressed boot binary -+-+-+-+-+ - -0-4F3E0 ASM Segment - -4F3E0-56F90 Data Segment - -4F4C8 float display string: NaN -4F4CC float display string: Inf -4F4D0 float display string: 0 - -4F5CC-4F680 rarezip debug strings - -4F690-4FC50 assertation fault / MIPS error debug strings -4FC50-50A84 memory allocation strings -50A84-50A8C -hard -50A8C-50A94 -hard -50A94-50A98 -ma -50A98-50A9C -ma -50A9C-50AA4 -play -50AA4-50AAC -play -50AAC-50AB4 -coop -50AB4-50ABC -anti -50ABC-50AC4 -mpbots -50AC4-50ACC -play -50AD0-50C34 MP3 debug strings -50C34 [float] ??? -50C38 [float] ??? -50C3C [float] ??? -50C40 [float] ??? -50C44 [float] ??? -50C48 [float] ??? - -50C58-50F74 sound and music debug strings -50F74-50FA0 TLB ??? 11 entries -50FA4-50FA8 -d -50FA8-50FAC -s -50FAC-50FB0 -j -50FB0-50FB8 -level -50FC0-50FC4 s1 -50FC4-50FCC str.c -50FCC-50FD0 s2 -50FD0-50FD8 str.c -50FE0-51008 lower-case ASCII set 0-9,a-z -51008-51030 upper-case ASCII set 0-9,A-Z -51030-51194 joypad debug strings -51194-511AC TLB ??? 6 entries - -favorite debug line: -"#@! Another Perfect Crash (tm)" - -=_= - - -39850.1173 secondary compressed boot binary -+-+-+-+-+ - -111B4-15F38 item data - format: variable - typically 0x50 each entry - 0x0 2 - 0x2 2 - 0x4 4 p->primary mode ??? - 0x8 4 p->secondary mode ??? - 0xC 4 - 0x10 2 - 0x12 1 effect bitflags - 80 - 40 explosion on impact - 20 - 10 - 08 - 04 disarm on impact - 02 woozy on impact - 01 - 0x13 1 - 0x14 4 p->primary mode stats - 0x18 4 p->secondary mode stats - 0x1C 4 p-> - 0x20 4 - 0x24 4 p-> - 0x28 4 [float] - 0x2C 4 [float] - 0x30 4 [float] - 0x34 4 [float] - 0x38 4 [float] - 0x3C 4 p-> - 0x40 4 p-> - 0x44 2 text ID: short name - 0x46 2 text ID: long name - 0x48 2 text ID: manufacturer name - 0x4A 2 text ID: description - 0x4C 2 8 normal, 2 scope - 0x4E 2 -15F38-160B0 item data pointer table; 0x5E entries -160B0 - -19AB0-19C00 built-in cheat menu - format: 0x8 each entry; 0x2A entries - 0x0 2 text ID - 0x2 2 - 0x4 1 - 0x5 1 - 0x6 1 - 0x7 1 -19C00 - -22F24-23B04 body/head index - format: 0x14 each entry; 0x98 entries - 0x0 2 flags - 8000 1=male : 0=female - 4000 - 2000 - 1000 - 0800 - 0400 - 0200 - 0100 - 0080 - 0040 - 0020 - 0010 - 0008 - 0004 - 0002 - 0001 - 0x2 2 ROM index - 0x4 4 [float] width - 0x8 4 [float] height - 0xC 4 RESERVED - rdram address at runtime - 0x10 2 arm index - 0x12 2 RESERVED -23B04 - -28080-2A000 ROM index; each entry a literal ROM address in sequence, 0x4 each -2A000 - -2ABB8-2AC20 MP stage select - format: 0x6 each entry; final entry is stage=0 - 0x0 2 stage# - 0x2 1 lock type - 0x3 1 RESERVED - 0x4 2 text ID -2AC20-2AC38 MP stage select subsections - format: 0x8 each entry; 3 entries - 0x0 4 appears before this entry in MP list - 0x4 2 text ID - 0x6 2 RESERVED -2AC38 - -2D168-2D18C MP scenario select - format: 0x6 each entry; 6 entries - 0x0 2 text ID: scenario menu - 0x2 2 text ID: MP menu - 0x4 1 lock - 0x5 1 team requirement flag -2D18C-2D19C MP scenario subdivisions - format: 0x8 each entry; 2 entries - 0x0 4 position in entry list - 0x4 2 text ID - 0x6 2 RESERVED -2D19C - -2D288-2D40E MP weapons - format: 0xA each entry; 0x27 entries - 0x0 1 weapon type - 0x1 1 ammo type 1 - 0x2 1 ammo amount 1 - 0x3 1 ammo type 2 - 0x4 1 ammo amount 2 - 0x5 1 flags - 80 weapon present - 7F lock byte - 0x6 2 weapon model # - 0x8 2 scale -2D410-2D4E8 MP weapon sets - format: 0x12 each entry; 0xC entries - 0x0 2 text ID - 0x2 1 weapon 0 - 0x3 1 weapon 1 - 0x4 1 weapon 2 - 0x5 1 weapon 3 - 0x6 1 weapon 4 - 0x7 1 weapon 5 - 0x8 1 weapon lock test 1 - 0x9 1 weapon lock test 2 - 0xA 1 weapon lock test 3 - 0xB 1 weapon lock test 4 - 0xC 1 alternate weapon 0 - 0xD 1 alternate weapon 1 - 0xE 1 alternate weapon 2 - 0xF 1 alternate weapon 3 - 0x10 1 alternate weapon 4 - 0x11 1 alternate weapon 5 -2D4E8 RESERVED selected MP weapon set -2D4EC-2D50E MP "awards" - format: 0x2 each entry; 0x11 entries - 0x0 2 text ID -2D510 - -2D74C-2D7DC simulant types - format: 0x8 each entry; 0x12 entries - 0x0 1 type - 0x1 1 difficulty - 0x2 2 text ID - 0x4 1 RESERVED - 0x5 1 MP character - 0x6 1 lock - 0x7 1 RESERVED -2D7DC-2D9C4 MP character list - format: 0x8 each entry; 0x3D entries - 0x0 1 RESERVED - 0x1 1 body - 0x2 2 text ID - 0x4 2 head; 0x3E8 if no associated head - 0x6 1 lock byte - 0x7 1 RESERVED -2D9C4 - -2DA90-2DB8C music - format: 0x6 each entry; 0x2A entries - 0x0 1 - 0x1 1 - 0x2 2 text ID - 0x4 2 unlock when level complete -2DB8C-2DCDC MP default scenarios - format: 0x18 each entry; 0xE entries - 0x0 2 text ID - 0x2 2 - 0x4 4 - 0x8 4 - 0xC 4 - 0x10 4 - 0x14 4 -2DCDC - -2DE14-2DE4C simulant orders - format: 0x4 each entry; 0xE entries - 0x0 2 RESERVED - 0x2 2 text ID -2DE4C - -2E4B4-2E7D4 Challenges - format: 0x18 each entry; 0x entries - 0x0 4 - 0x4 4 - 0x8 4 - 0xC 2 text ID - 0xE 2 challenge description data entry; value * 0x140 creates offset to description and simulant names - 0x10 4 - 0x14 4 -2E7D4 - -2E7E4-2E7EC ROM 7D1C20: challenge descriptions and simulant names - format: 0x8 each entry; 1 entry - 0x0 4 start ROM address - 0x4 4 end ROM address -2E7EC-2E7F4 ROM 7D5320: challenge descriptions - format: 0x8 each entry; 1 entry - 0x0 4 start ROM address - 0x4 4 end ROM address -2E7F4-2E7FC ROM 7D8A20: challenge descriptions and simulant names - format: 0x8 each entry; 1 entry - 0x0 4 start ROM address - 0x4 4 end ROM address -2E7FC-2E804 ROM 7DC120: challenge descriptions and simulant names - format: 0x8 each entry; 1 entry - 0x0 4 start ROM address - 0x4 4 end ROM address -2E804-2E80C ROM 7DF820: challenge descriptions and simulant names - format: 0x8 each entry; 1 entry - 0x0 4 start ROM address - 0x4 4 end ROM address -2E80C-2E814 ROM 7E2F20: challenge descriptions and simulant names - format: 0x8 each entry; 1 entry - 0x0 4 start ROM address - 0x4 4 end ROM address -2E814-2E81C ROM 7E6620: challenge descriptions and simulant names - format: 0x8 each entry; 1 entry - 0x0 4 start ROM address - 0x4 4 end ROM address -2E81C - -2E8C4-2E984 Character bios - format: 0x10 each entry; 0xC entries - 0x0 2 RESERVED - 0x2 2 text ID: name - 0x4 2 RESERVED - 0x6 2 text ID: race/gender - 0x8 2 RESERVED - 0xA 2 text ID: age - 0xC 2 RESERVED - 0xE 2 text ID: biographical notes -2E984-2EA64 location descriptions - format: 0x10 each entry; 0xE entries - 0x0 2 RESERVED - 0x2 2 RESERVED - 0x4 2 RESERVED - 0x6 2 text ID: location - 0x8 2 RESERVED - 0xA 2 text ID: description - 0xC 2 RESERVED - 0xE 2 RESERVED -2EA64-2EAF4 object descriptions - format: 0x10 each entry; 0x9 entries - 0x0 2 RESERVED - 0x2 2 RESERVED - 0x4 2 RESERVED - 0x6 2 text ID: name - 0x8 2 RESERVED - 0xA 2 text ID: description - 0xC 2 RESERVED - 0xE 2 RESERVED - -2EB5C-2EB84 Gadget training descriptions - format: 0x4 each entry; 0xA entries - 0x0 2 RESERVED - 0x2 2 text ID -2EB84-2EB84 Gadget training hints - format: 0x4 each entry; 0xA entries - 0x0 2 RESERVED - 0x2 2 text ID -2EB84-2EBD4 Gadget training completion hints - format: 0x4 each entry; 0xA entries - 0x0 2 RESERVED - 0x2 2 text ID -2EBD4 - -2EBE8-2EC04 Holo training menu - format: 0x4 each entry; 0x7 entries - 0x0 2 RESERVED - 0x2 2 text ID -2EC04 - -2EC24-2EC40 Holo training descriptions - format: 0x4 each entry; 0x7 entries - 0x0 2 RESERVED - 0x2 2 text ID -2EC40-2EC5C Holo training hint - format: 0x4 each entry; 0x7 entries - 0x0 2 RESERVED - 0x2 2 text ID -2EC5C-2EC78 Holo training completion hint - format: 0x4 each entry; 0x7 entries - 0x0 2 RESERVED - 0x2 2 text ID -2EC78-2EC8C firing range target stats (zones, state) - format: 0x4 each entry; 0x5 entries - 0x0 2 RESERVED - 0x2 2 text ID -2EC8C -2EC90-2EC98 medals - format: 0x2 each entry; 0x3 entries - 0x0 2 text ID -2EC98-2ECA4 firing range completion messages - format: 0x2 each entry; 0x5 entries - 0x0 2 text ID -2ECA4-2ECAC medals - format: 0x2 each entry; 0x3 entries - 0x0 2 text ID -2ECAC \ No newline at end of file diff --git a/notes/PD Documentation/Perfect_Dark_Level_Modding_FAQ_by_Krijy.txt b/notes/PD Documentation/Perfect_Dark_Level_Modding_FAQ_by_Krijy.txt deleted file mode 100644 index a517dca..0000000 --- a/notes/PD Documentation/Perfect_Dark_Level_Modding_FAQ_by_Krijy.txt +++ /dev/null @@ -1,21224 +0,0 @@ - -______ ____ _____ ____ ____ ____ _____ -\ _ \ \ _\ \ _ \ \ _\ \ _\ \ _\ \_ _\ -\ __/ \ \__ \ _/ \ \__ \ \__ \ \ \ \ - \ \ \ _\ \ \_ \ _\ \ _\ \ \ \ \ ___ ______ ___ __ __ - \ \ \ \__ \ _\_ \ \ \ \__ \ \__ \ \ / _ \ / _ / / _ \ / //_/ - \_\ \___\ \_\\_\ \_\ \___\ \___\ \_\ / // / / /_/ / / __/ / _/ - __________________________________________ / // / / _ / / /_ / /_ - __ ____ __ __ ____ __ / // / / / / / / _ / / _ / - \ \ \ _\ \ \ \ \ \ _\ \ \ /____/ /_/ /_/ /_/ /_/ /_/ /_/ - \ \ \ \__ \ \ \ \ \ \__ \ \ ______________________________ - \ \ \ _\ \_\\_\ \ _\ \ \ - \ \___ \ \__ \ \ \ \__ \ \___ - \____\ \___\ \_\ \___\ \____\ - __________________________________ - _ _ ______ ___ ___ _____ __ __ _____ - / \_/ \ / __ / / _ \ / _ \ /_ _/ / / / / / ___/ - / / / / / / / // / / // / / / / \/ / / / - / ___ / / / / / / // / / // / / / / /\ / / / __ - / / / / / /_/ / / // / / // / _/ /_ / / / / / /_/ / - /_/ /_/ /_____/ /____/ /____/ /____//_/ /_/ /_____/ - ____________________________________________________ - - - A hacking guide for Perfect Dark - Written by Krijy, Copyright 2005 - - Version 1.2 - 24.08.05 - -Perfect Dark, released in 2000, sported beautiful graphics and tons of replay -value. It was the evolution of GoldenEye, a game that revolutionised the first- -person-shooter genre, and built upon the same addictive and challenging -game play. At the time of writing this FAQ, it's been about five years since -Perfect Dark came out. The game has been played to death, and the sequel has -been forever in the making. In order to create more replay, and to bide the -time until Perfect Dark Zero is released, I have devised methods of modifying -and creating new level setups. - -Have you ever wanted to play multiplayer games in solo arenas? What about -making new solo levels based on the already existing ones? - -This FAQ will teach you how to mix and match parts of the levels in the game, -and in doing so create totally new levels! - - Perfect Dark is forever - -_______________________________________________________________________________ - - < Perfect Menu > -________________________________________________________________________________________ - -< Intro > -_________ - - > Perfect Dark level modding in general - - > Formats and codes used in this FAQ - - > Perfect Dark Hacking - - > Hacking with a version 3.0 cheating device - - > Hacking with a version 3.3 cheating device and PC link cable - ~ Official N64 Gameshark Utilities - ~ Perfect Trainer - ~ Game Software Code Creator - - > Hacking with emulators on a PC - ~ Viewing the N64 RAM memory on a PC - ~ Hacking by comparing savestates - ~ Hacking during game play - - > Support - -___________ - -< Special > -___________ - -Part One - The Level Modifier -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - > The Level List - - > The Global object list - - > The files that build up a level - - > Changing level files - ~ Level list files chart - ~ Level list codes chart - - > Loading a level via the Combat Simulator menu - ~ Example of mix matching original multiplayer levels - ~ Example of a multiplayer game in a solo only arena - ~ Example of a solo mission loaded in multiplayer - ~ Tri-operative and Quad-operative modes - - > Loading a level via the Solo Mission menu's - ~ Example of a solo mission in an arena it's not supposed to be in - ~ Moonjump codes - ~ The amount of pads in a level - ~ Loading solo levels via the Cinema menu - ~ Skipping the intro logo's and menu's - - > Other level attributes - ~ Level skies - ~ Background Music - -Part Two - Modifying the objects in a level -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - > Modifying objects - ~ NTSC Object modifier codes - ~ PAL Object modifier codes - - > Modifying weapons - ~ NTSC Weapon modifier codes - ~ PAL Weapon modifier codes - ~ Multiplayer ammo codes - - > Modifying costumes - ~ Body image modifier codes - ~ Head image modifier codes - ~ Arm image modifier codes - ~ Gender modifying - ~ Random enemy head modifying - - > Moving players into levels - ~ The real time coordinates list - ~ Finding your current coordinates - ~ Moving a player with activators - ~ The CI Training Ground Disabler - -Part Three - Advanced level modding -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - > Multiplayer level modding - ~ Making the level modifier code - ~ Creating the enablers - ~ Plotting the pads in the level - ~ Creating the code - ~ Testing the code - -_________ - -< Outro > -_________ - - > Codes - - ~ Fully working multiplayer levels - - Crash Site Caves / Crash Site Racing Ground - - Carrington Villa Residence / Carrington Villa Rooftop - - Skedar Ruins - ~ Fully working solo missions - - Crash Site in Carrington Villa - - WAR! in Deep Sea - - Pelagic II in Carrington Villa - ~ Extra Codes - - > Resources - - ~ Global object list (values and names) - ~ Global object list (addresses in ROM) - ~ In-game object list (sorted by number) - ~ In-game object list (sorted by level) - ~ Costume list - ~ Weapon type list - ~ Ammo type list - ~ Object type list - ~ Text lists - ~ BETA Text compilation - - > End credits - - -_______________________________________________________________________________ - - <<< Intro >>> -_______________________________________________________________________________ - -This FAQ is divided up into three parts. An intro part, special part and outro -part. In the intro part I'll tell you about everything you need to know before -you start hacking any level modding codes. I'll describe Perfect Dark hacking -and tell you exactly how it's done. - - - > Perfect Dark level modding in general - - > Formats and codes used in this FAQ - - > Perfect Dark Hacking - - > Hacking with a version 3.0 cheating device - - > Hacking with a version 3.3 cheating device and PC link cable - ~ Official N64 Gameshark Utilities - ~ Perfect Trainer - ~ Game Software Code Creator - - > Hacking with emulators on a PC - ~ Viewing the N64 RAM memory on a PC - ~ Hacking by comparing savestates - ~ Hacking during game play - - > Support - - -_____________________________________ - -Perfect Dark level modding in general -_____________________________________ - -Perfect Dark level modding shouldn't be confused with PC game modding. Unlike -in PC first person shooters like Half-life, you can't totally create an -entirely new level from scratch. In Perfect Dark you are stuck to using the -same arenas that are already there (like Complex or the dataDyne Building). You -can however load stuff that is supposed to be in one level, in a different -level. Perfect Dark level modding consists of mix-matching objects and arenas -from all the levels in the game. The best way to describe this to you is for me -to give you an example. A great example that gives a totally new experience is -found by loading Pelagic II's solo mission in Villa's solo arena: - -Pelagic II in Villa (Solo): -NTSC PAL -8105D9B7 0021 8105D656 0021 -8009DFE9 0021 8009E589 0021 -81075582 0000 81075A52 0000 -81074602 0000 81074AAA 0000 -8107459A 0000 81074A42 0000 -8107FFA0 0018 810804E0 0018 -8107FFA2 016A 810804E2 016A -8107FFA4 0169 810804E4 0169 -8108456A 003E 81084ABA 003E -8107B178 0100 8107B648 0100 -8107B17A 0001 8107B64A 0001 -8106FF42 EB40 810702D2 EED0 -8107B858 036E 8107BD28 036E -8107D904 0DA8 8107DDD4 0DA8 -8107D906 0266 8107DDD6 0266 -8107D90C 3F12 8107DDDC 3F12 -8107D90E A10D 8107DDDE A10D -81062C5A 0029 8106293A 0029 -81062C5E 0029 8106293E 0029 -81062C62 0029 81062942 0029 -81062C66 0029 81062946 0029 -80084023 000X 80084563 000X - -This code will work a few seconds after the small Rareware logo at the bottom -of the screen turns up. The aim of the mission is to kill as many Maians as -possible! If you die simply press A a few times to restart. Don't press B at -the objectives menu. The only value that you can change is the one for the last -code on the list. This is the difficulty mod, so set this to 0 for Agent, 1 for -Special Agent and 2 for Perfect Agent (which is extremely hard). - -As you can see, this code isn't exactly flawless. All the objects and guards -from Pelagic II have been placed in Villa (Solo). The cut-scenes haven't been -changed, and the objectives are a bit hard to do. On the upside the level is -functional, and poses a challenge. - -Examples of more level modifiying codes can be found in the codes summary -section, including Crash Site in multiplayer, WAR! in Deep Sea and many others. - - -__________________________________ - -Formats and codes used in this FAQ -__________________________________ - -The way we are going to change Perfect Dark is through cheating device codes -that manipulate the temporary memory of the N64. The N64's temporary memory, or -RAM as it's commonly called, is where Perfect Dark stores all the data it's -currently using to keep the game running. Gameshark and Action Replay's change -the values seen in the RAM, thus changing certain things in the game. Cheating -devices are mainly used for trivial things like unlimited ammo, or -invincibility (codes for which Perfect Dark already has inbuilt). We're going -to be using cheating devices to do something much more cooler. - -This FAQ is written with American Gamesharks (NTSC), European Action Replays / -Equalizers (PAL) and PC emulators in mind. Two PC emulators that support -cheating device codes are Nemu and Project64, but there may be others I'm -unaware of. When I show a code example I'll give both the NTSC version and PAL -version. That means that whether you live in America or in Europe, you won't -have any problems. I won't give examples for the Japanese version of Perfect -Dark, but all the methods of hacking I show in this FAQ can be applied for that -version too. If the NTSC and PAL version of the example I give work in both a -cheating device and emulator, then I won't give any PC version of the example. -If however the code is different between the two formats, I'll give both -cheating device versions and both emulator versions. Remember that an emulator -is only emulating Perfect Dark. This means that it might be emulating some -parts of the game wrong, or emulating some parts over precisely. Cheating -devices on the other hand might be doing stuff behind your back without you -realising it. My point is that both formats commute with Perfect Dark -differently, sometimes ending in slightly different codes. You won't have to -worry about this too much, because you won't be making very many codes that -differ between PC emulator and cheating device. - -If you have the NTSC version of Perfect Dark you should be aware that there are -two versions! Version 1.0 and version 1.1. It's easy to tell which version you -have if it's a rom, just load it into Project 64 and the name it gives the rom -should have either 1.0 or 1.1 in it. If you have the game cartridge it's harder -to tell which version you have. The fully working multiplayer level codes -differ between version 1.0 and 1.1. On such code is Carrington Villa in -multiplayer (which can be found in the Codes section). You will find six -different versions of the enabler that gets Carrington Villa in multi working. -The easiest way to find out which version of Perfect Dark you have is to test -either one of the NTSC Gameshark enablers together with either Carrington Villa -Residence or Rooftop. - -Before I go any further I must point out that I've never had any problems with -Perfect Dark level modding, when it comes to wear and tear on my cheating -device. The codes I provide in this FAQ should not blow your Gameshark up, -break it, or cause it to burn a hole right through to the centre of the earth. -The cheating devices for the Nintendo 64 are flimsy things, and break easily. -The best way to avoid damaging your cheating device is to treat it like you -would a fragile invaluable treasure. Turning the N64 off before removing the -cartridge is also recommended. Don't put any strong magnets near it, or mobile -phones that might cause disturbances. If your cheating device does happen to -die (which it won't), don't come whining to me. - -Note to cheating device users: ------------------------------- -Some of the codes in this FAQ can get quite long. While activating and -deactiving these codes in the codes menu of your cheating device, you may -sometimes confuse it. When your cheating device gets confused it will still -think the last code you activated is on. Any new codes that you may have -activated won't be on. This problem can be solved by unselecting all the codes -in the Perfect Dark codelist, and starting the game with no codes on. Once the -game starts you can turn it off and restart it. Any codes that you activate -next will work. - -There are different types of cheating device codes. The mains ones that are at -your disposal are: - -80XXXXXX 00VV - Normal 8bit code that changes a set of double digits. - -81XXXXXX VVVV - 16bit code that changes two sets of double digits. The address - has to end in an even number. - -D0XXXXXX 00VV - 8bit activator. When the value at the address of the first line -8XXXXXXX VVVV is the same as the value specified in the code, the second line - is activated. This type of code is usually used together with - buttons. When you press a button, the second line will be - activated. - -D1XXXXXX VVVV - 16bit version of activator. -8XXXXXXX VVVV - -89XXXXXX VVVV - Cheating device button activator. When the button is pressed - the code is activated. - -Some codes in this FAQ require a one player push-button activator. This -activator is: -NTSC PAL -D109C7E4 XXXX D1099FB0 XXXX - -XX can be: -0000 - No Buttons -0100 - D-Pad Right -0200 - D-Pad Lefft -0400 - D-Pad Down -0800 - D-Pad Up -1000 - Start -2000 - Z -4000 - B -8000 - A -0001 - C-Right -0002 - C-Lefft -0004 - C-Down -0008 - C-Up -0010 - R -0020 - L -0030 - L+R - -You can combine the values to create different button sequences, like 0030 for -L + R, or 8422 for A + D-down + L + C-left. - -The memory editor might look a bit alien if you don't know what you're looking -for. To make things a bit easier to understand I'll explain some of the types -of numbers that are easily recognisable. In the table below you can see the -address (both NTSC and PAL), and the values at those addresses. - _____________________________________________________________ - | NTSC PAL | - |8007FEB0 - 2300 0000 345E 0000 756C 6567 0000 0000 - 800803F0| - |8007FEC0 - 3E19 999A 0000 0000 3F80 0000 8007 FEB0 - 80080400| - |_____________________________________________________________| - -On the first line, the very first value "23" is an 8bit value. The next value -along is "345E". This is a 16bit value. The actual value line is split up into -16bit value sections. 16bit values always start on even numbered addresses. The -next value is "756C6567". This is a 32bit value. 32bit values always start on -either 0, 4, 8 or C. On the second line you'll see a 32bit floating point -value. These can either be positive or negative depending on the first value. -If the value is 3 or 4 it's positive, and if it's B or C it's negative. The -next value is also a floating point value. "3F800000" is the floating point -value of 1. Likewise, "BF800000" is -1. The last value "8007FEB0" is a pointer. -It points towards an address in the memory, and in this example is pointing -towards the start of the first line. You might already know all this and take -it for granted, but if you're a beginner it's invaluable information. - - -____________________ - -Perfect Dark Hacking -____________________ - -For those that may have tried before, Perfect Dark can be somewhat difficult to -hack. The problem with Perfect Dark is that it uses the N64 RAM Expansion Pak. -Perfect Dark can be loaded in two different settings, either without an -Expansion Pak (Lo-resolution or lorez for short), or with an Expansion Pak -(Hi-resolution or hirez for short). In lorez you can only play in multiplayer, -and with a maximum of two players (played in tiny screens). In hirez you get -access to the entire game. The Expansion Pak adds an additional 4MB of RAM onto -the already existing 4MB, making it 8MB in total. All N64 cheating devices use -part of the additional RAM in order to get their code generators working. What -this means for Perfect Dark is that you can hack the game easily in lorez, but -you can't hack the game in hirez! - -I've spent a considerable amount of time investigating how to get around the -problem of hacking Perfect Dark in hirez. At first it was a seemingly -impossible task, but using various methods, I (and other hackers) have -conceived ways of getting around this problem. To hack Perfect Dark in hirez -you are either going to need just a PC, or a Gameshark or Action Replay -Professional version 3.3 with a PC link cable. You DON'T necessarily have to -have a good PC. If you have neither of these then DON'T PANIC! It's entirely -possible to hack level modifying codes with just a normal Gameshark or Action -Replay / Equalizer version 3.0 cheating device. - -Being able to "hack" in hirez won't be a necessity in hacking Perfect Dark -level mods. When I mention "hack" I mean being able to do search's, comparing -and other kinds of stuff. As an example, to "hack" could mean doing a less than -last / greater than last search in order to find an ammo modifier. I've done -most of the "hacking" already, so you shouldn't have to do any hirez hacking. -At most all you'll need to do is look at the memory editor (RAM). That's all. -There won't be any long searching for this code, or comparing for that code. -All of the codes will be made by looking at the memory and making codes that -correspond to different addresses. - -For one or two codes in this FAQ you will have to be able to hack in hirez. You -can use the memory editor provided by the in-built code generator to hack most -of the codes seen in this FAQ, but you probably won't even have to use that. -I've already hacked most of the codes so all you need to do is write them down -and run them, without ever having to do much hacking yourself. - -I'm going to explain how to hack Perfect Dark using three different methods. -The first is with just a version 3.0 cheating device. The second is with a -version 3.3 cheating device and with a PC link cable. The third is with just a -PC, using emulators and other programs. - - -__________________________________________ - -Hacking with a version 3.0 cheating device -__________________________________________ - -The only way to hack Perfect Dark with a version 3.0 cheating device is by -using the in-built code generator. You'll only be able to run the game in lorez -mode while hacking, so you're pretty limited. I won't go into detail about how -to use the code generator. The most important part is the memory editor, which -will allow you to change values that are in the memory. - -To get Perfect Dark working with a version 3.0 cheating device you need to -first load the cheating device up with a game that uses the factory default -keycode (this could be Super Mario 64 or GoldenEye). At the menu select -keycodes and choose the Zelda keycode. Choose a keycode you don't have the game -for and you're screwed, so be careful and don't rush your way through this menu -and make a fatal mistake (like I once did). Once the Zelda keycode is -activated, turn off your N64 and put Perfect Dark in. - -To play in hirez you need a 50 line long enable code. The following code must -be on at all times in hirez: -NTSC AND PAL -F1000204 27BD -F1000206 FFE4 -F1000208 AFA8 -F100020A 0014 -F100020C AFA9 -F100020E 0018 -F1000210 3C1A -F1000212 A075 -F1000214 375A -F1000216 C000 -F1000218 3C08 -F100021A A07C -F100021C 3508 -F100021E 5C00 -F1000220 241B -F1000222 0180 -F1000224 8D09 -F1000226 0000 -F1000228 237B -F100022A FFFF -F100022C AF49 -F100022E 0000 -F1000230 2108 -F1000232 0004 -F1000234 1F60 -F1000236 FFFB -F1000238 235A -F100023A 0004 -F100023C 8FA9 -F100023E 0018 -F1000240 8FA8 -F1000242 0014 -F1000244 27BD -F1000246 001C -F1000248 3C1A -F100024A A075 -F100024C 375A -F100024E C000 -F1000250 0340 -F1000252 0008 -F1000254 0000 -F1000256 0000 -81000204 3C1A -81000206 A075 -81000208 375A -8100020A C000 -8100020C 0340 -8100020E 0008 -81000210 0000 -81000212 0000 - -With this code on you'll be able to access most of the solo levels. Some levels -won't work because they come into conflict with the enabler. The levels that -won't work are the solo mission that takes place in Carrington Villa, and Area -51 Infiltration. Additionally, the multiplayer level Skedar will freeze -sometimes depending on where you start. - -The total amount of codes that you can active with a version 3.0 cheating -device is about 128. Subtract the 50 line long enabler from that and you're -left with 78. If you try to activate more than 78 lines of code in hirez the -game will freeze. You don't need to have the enable code on in lorez. - -Even though you can only hack the game in lorez, you can gain access to the -Perfect Menu with the cheat shown below. From the Perfect Menu you should be -able to load any multiplayer level or solo level with the help of level mods. -Solo levels are best loaded from the Cinema menu. - -Change the Small but Perfect Menu into the Perfect Menu: -NTSC PAL -8107529A 5674 8107575E 5674 -8107529E 39D0 81075762 3DB4 -810752A2 69C0 81075766 72B8 - -When you want to make multiplayer level mods, all of the normal multiplayer -levels can be mixed and matched, but only a few of the solo arenas will work in -lorez. The solo arenas that will work in lorez are: - -Crash Site -Chicago -G5 Building (Solo) -Carrington Institute -Air Base -Skedar Ruins -Investigation - -Any other solo arenas that aren't listed here won't work in lorez due to them -being too large. - - -____________________________________________________________ - -Hacking with a version 3.3 cheating device and PC link cable -____________________________________________________________ - -Hacking with a version 3.3 cheating device is quite similar to hacking with a -version 3.0, the difference is that you can connect the version 3.3 up to a -computer via a PC link cable. If you don't have a PC link cable then you can -only hack in lorez with the in-built code generator. Other than that, the -version 3.3 Gameshark / Action Replay is a lot better and easier to use than -the version 3.0. Getting Perfect Dark to work with a version 3.3 cheating -device works exactly the same way as getting PD to work with a version 3.0, so -look in the section above to find out how to get the game up and running. - -There are some Gamesharks Pros / Action Replay Pros version 3.3 that the PC -link cable won't work with. Datel released a bunch of dud cheating devices with -parts missing from them. It's easy to tell if you've got a dud cheating device. -If the LED is missing (little white box in the front on the inside) and you see -no numbers when you turn your cheating device on it's a dud (we hate you for -this Datel). If you're buying a new cheating device make sure it has an LED. -Your best bet is to buy a Gameshark Pro version 3.2. There aren't any duds of -this version and it can be upgraded to a 3.3 (providing you don't have Windows -XP Service Pack 2). A Gameshark Pro version 3.2 will also work in a PAL N64, so -if you're a PAL user get one of these if you can't find anything else. - -Two differences between the 3.0 and 3.3 version when it comes to Perfect Dark -is first the hirez enabler code, and secondly the amount of codes you can -activate. Instead of having to use a 50 line long hirez enable code you simply -need just one code. This code always starts with the value FF, which means it -defines were in the memory the cheating device is going to store the data for -the codes you've activated. You want to put this data in a part of the memory -that Perfect Dark doesn't use. Finding a place to put this data is as easy as -finding somewhere with lots of zeros. The next problem is finding out which -levels put their data where. You need a spot of zeros which none of the levels -put their data at. This can sometimes be rather tricky. The 50 line long -enabler puts the codes you've activated in the same spot where Villa (Solo) and -Infiltration puts level data (which is why the game crashes when you try to -load one of these levels). I'm telling you all this because the official hirez -enablers from Datel don't always get the job done. You may have to make your -own enabler code that will work for a specific level. - -There are three enablers that can be found on the internet, but I'll only list -two of them here and tell you their faults. You can only have one hirez enabler -on at a time. The following investigations have been made by me with a PAL -cheating device. - -Hirez Enabler 1: -NTSC AND PAL -FF000220 0000 - -This enabler will allow you to play every single level in the game. It's fully -compatible with all the levels but has a fatal flaw. You can only activate 10 -lines of code with this enabler on. Some level modifying codes require you to -activate more than just 10 lines of code. - -Hirez Enabler 2: -NTSC AND PAL -FF75C000 0000 - -This enabler will allow you to activate up to the maximum number of lines of -code possible (+-250 lines). Unfortunately, it has the same compatibility as -the 50 line long version 3.0 hirez enabler. You can't play in Villa (Solo) or -Infiltration with this enabler on. - -Since these two enablers don't allow you to play in some levels, I made my own -enabler. The following enabler should allow you to play in all levels, and -activate up to +-250 lines of code. - -Krijy's Hirez Enabler: -NTSC PAL -FF72C5A0 0000 FF730000 0000 - -If for some reason you find a level that doesn't work with an enabler, and want -to make your own Perfect Dark hirez enabler, than a place to look for zeroes is -80700000 to 80750000. The zeroes in this area of the memory seldom get written to. - -If you have problems with loading Perfect Dark in lorez then the following code -should help: - -Lorez Enabler: -NTSC AND PAL -EE000000 0000 - -If you have a PC link cable, you can hack Perfect Dark with the help of some -useful programs on your PC. One thing you may want to note about a PC link -before you use it is that it sometimes plays around with the cheating device. -If you use the PC link, and then turn off you N64 and try to start it again, -the cheating device might not start. This can be solved by plugging in the PC -link again. Another annoying thing when using a PC link is that you may have to -pull the cheating device out of the N64, and wait for a few seconds before it -works again. - -Once you've got a PC link connected up you have to download a few helpful -programs from the internet: - -Official N64 Gameshark Utilities: -Homepage: http://www.gscentral.com/ -Download link: http://www.gscentral.com/lib/downloads/n64gameshark_pro_v3_3.zip - -N64 Gameshark Utilities patch: -Homepage: http://www.gscentral.com/ -Download link: http://www.gscentral.com/lib/downloads/Patch_N64_Utils.exe - -Perfect Trainer: -Homepage: http://homepage.ntlworld.com/icemariouk/ -Download link: http://homepage.ntlworld.com/icemariouk/files/ - Perfect.Trainer.v1.0b.rar - -Game Software Code Creator: -Homepage: http://www.cmgsccc.com/ -Download link: http://www.gscentral.com/lib/downloads/gscc2k2.zip - - -Official N64 Gameshark Utilities (and patch): -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This is the official Gameshark hacking utility that's meant to be used together -with the PC link cable. It has several functions, like being able to hack -games, upload and download codelists, take screenshots and upgrade your -cheating device. Unfortunately, you can't hack Perfect Dark in hirez with it -(but you can when you use Perfect Trainer, which I'll get back to shortly). If -you have a cheating device with the normal Gameshark rom in it, the program -won't be able to detect Perfect Dark in hirez mode. You can hack in lorez, but -then again you might as well be using the in-built code generator. Other than -that, the hacking part of the official utils allows you to do searches for -values in a specific range. Using the hacking tools takes a painstakingly long -time, even more so than just using the code generator. - -Where the official utils come in handy is the codelist abilities and the -ability to upgrade. You can download the current codelist (which is all the -codes on your cheating device), into a text file. This text file can be easily -modified. It won't have a file extension so you'll have to open it in notepad. -Once you've modified it and added all the codes you want, you have to use the -compile function to compile the codes. Once the codes have been compiled, press -upload to upload them to your cheating device. You don't have to go through the -strenuous job of adding codes the normal way. Some of the codes in this FAQ are -quite long, and using the update codelist method is the easiest way to add them -to your codelist. - -The upgrade utility primarily allows you to upgrade your version 3.2 cheating -device to a version 3.3. The official utils only accept the official upgrade -rom, but by using the patch you can patch the program to accept other roms. The -rom the utils use in the upgrade is the file called "ar3.enc". - -Note to PAL users: ------------------- -The Official N64 Gameshark utils will work with Action Replays, but as the name -states, they are "Gameshark" utils and meant to be used together with the NTSC -format. You shouldn't have any problems at all using the utils, that is until -you upgrade the cheating device rom. When you upgrade it you will end up with a -Gameshark, and not an Action Replay. There really isn't much difference, but if -you choose to upgrade your codelist you'll end up with codes for the NTSC -version of N64 games. ALWAYS download a version of your PAL codelist before -upgrading, and don't choose to upgrade your codelist in any way when you -upgrade. That was only the minor difference. The greater difference is that -once you've upgraded to a Gameshark, your cheating device will run in 60hz mode -instead of 50hz! Most TV's support 60hz mode, but if yours doesn't you won't be -able to see much in the menus. Once you've entered a game it'll switch back to -50hz mode, so no worries there. - -Note to Windows NT / 2000 or XP users: --------------------------------------- -The Official tools won't work by themselves. For security reasons the parallel -port used by the link cable will be disabled! You need to use another program -to get it working with the utils: - -Porttalk: -http://www.beyondlogic.org/porttalk/porttalk22.zip - -Userport: -http://www.embeddedtronics.com/public/Electronics/minidaq/userport/UserPort.zip - -GiveIO: -http://www.bottledlight.com/tools/giveio.zip - - -Perfect Trainer: -~~~~~~~~~~~~~~~~ -Perfect Trainer has been made by Icemario. It isn't a program, it's a cheating -device rom. Once you've got the Official N64 Gameshark utils, and used the -patch, you should be able to upgrade your cheating device with Perfect Trainer -(it uses the Zelda keycode as default, so you won't have to keep swapping -games). It allows the computer to be able to detect Perfect Dark while it runs -in hirez. This means that when you've got Perfect Trainer installed, you will -be able to hack Perfect Dark in hirez by using the hacking part of the Official -Utilities. Perfect Trainer allows you to run Perfect Dark in hirez, but you -can't really do more than that, and you can't activate any codes. Any codes you -make have to be activated through a program on your PC. When you want to play -with the codes you've created you need to upgrade your cheating device back to -a Gameshark. To upgrade your cheating device to Perfect Trainer, first make a -copy of the original "ar3.enc" file. Then take the "ar3.enc" file you get with -Perfect Trainer and swap it with the original in the Official N64 Utils folder. -Use the upgrade utility in the N64 Utils program to upgrade to Perfect Trainer. -When it comes to level modding, Perfect Trainer is best used together with the -Game Software Code Creator program. - - -Game Software Code Creator: -~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This program allows you to hack games much in the same way the Official N64 -utils do. The most important part is that you can use the RAM editor, which -will allow you to change values in the memory. Once you've installed Perfect -Trainer you can access all 8MB of the memory. Codes can be a bit hard to -activate, so you usually have to do them manually. - -Game Software Code Creator has a few extra options, none of which are really -much useful other than one. The dump rom image button dumps a rom image of -whichever N64 game you've loaded into your N64. The process can take a while -depending on how big the rom is, and the format dumped in is "bin". - -Note to Windows NT / 2000 or XP users: --------------------------------------- -GSCC won't work by ifself. For security reasons the parallel port used by the -link cable will be disabled! You need to use a driver called TotalIO to get it -working: - -TotalIO: -http://home.online.no/~jensts/Satellite/dvb2000/how_to_install_totalio.htm - -I have tested TotalIO with GSCC and it definately works with Windows XP -Service Pack 2. - - -______________________________ - -Hacking with emulators on a PC -______________________________ - -Hacking Perfect Dark with a PC is the best way to hack in hirez. To get Perfect -Dark running on a PC you need an emulator, and a rom image of Perfect Dark. -Perfect Dark runs smoothly on most high end computers, if you mean to actually -play the game on your PC. The game doesn't need to run smoothly in order for -you to hack level modifier codes. As long as you can navigate through the -menu's and move around levels, you can get away with having a pretty crap -computer. You'll be doing most of the playing by using your cheating device. - -There are quite a few different emulators out there that run Perfect Dark, but -I'm going to focus mainly on Project 64 and Nemu. I've found Project 64 to be -the best emulator for Perfect Dark because it runs the game most accurately, -and has an easy to use cheat code system. Nemu has some advanced hacking tools, -and also allows you to use cheating device codes. The problem with Nemu is that -it's hard to get PD running on it, and the way you enter cheating device codes -is a complete bitch when it comes to codes longer than one line. Generally -speaking, you want to use Project 64 to hack and test cheats, and Nemu to help -you look at values in the memory. - -The fabled N64 ROM's could be found by searching the internet, or they might be -found by using a P2P program. Neither of which is certain to give good results. - -I don't know the law in the country you're in, but in most countries as long as -you own the original N64 game you're allowed to keep a copy of it. You'll be -using the codes you make here to use with a cheating device, and your copy of -the original Perfect Dark, in your N64. As mentioned in above, you can dump -roms with Game Software Code Creator. Dumping PD with GSCC is beyond doubt the -best rom copy that you can get, because it's a true copy of your Perfect Dark -cartridge. One problem with making your own copies is that the bin files don't -seem to run in Nemu. They will work fine in Project 64. - -If you have any problems getting Perfect Dark to run in Project 64 on your PC, -you probably need to use a different plugin than the one provided. Plugins can -be found at zophar.net - -Project 64 Homepage: -http://www.pj64.net - -Nemu Homepage: -http://www.nemu.com - -Zophar.net: -http://www.zophar.net - - -Viewing the N64 RAM memory on a PC: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In Nemu it's simple to view the memory. Go to the plugins menu and select -Debugger: Memory. A memory editor will pop up. You can navigate around by -putting an address in the top left corner. Press Search to search for values. -If you simply want to look at the memory editor any time during the game, Nemu -is the fastest way to find what you're looking for. - -In Project 64 it's a bit harder to view the memory because there is no built in -function to do this. To view the memory you have to look at savestates. -Savestates are essentially snapshots of the memory taken at any time during -game play. When you load a savestate you start off exactly from where you saved -the savestate. Since savestates are snapshots of the memory they are 8Mb in -size, the same size as the RAM. In order to view these savestates you need a -hex editor program. The hex editor program shows you the hex values in the -memory, just like when using the memory editor. - -Project 64 saves savestates in its own ".pj" format. Before you can do anything -you need to change the pj savestate. The pj format adds code to the start of -the memory file, and it also byte flips the savestate. Byte flipping means that -every byte is swapped around and jumbled up. When Project 64 runs a game it -byte flips the rom image before processing it. When you make a savestate the -memory remains byte flipped. To make the Project 64 savestate readable you need -to delete the part at the beginning of the file that has been added and byte -flip the file. - -The best hex editor to use is Hex Workshop version 3 or better: -http://www.hexworkshop.com -http://www.bpsoft.com/downloads/index.html - -To convert a Project 64 savestate to a more understandable form, open it in a -hex editor. Once you've done that you need to delete the first 75C (in hex) -8bit values. Highlight the beginning of the file and drag all the way down to -address 0000075C. Do not delete the value 00701A3C. Next you need to byte flip -the file. This can be done in Hex Workshop by going to the Tools menu, and then -the Operations menu. Select byte flip and set the settings at 32bit unsigned -and little endian type. Byte flip the entire file. You should now have a -correct savestate in the normal byte order and with the correct addresses. To -navigate the memory in Hex Workshop use the find and goto functions (ctrl+F) -and (ctrl+G). - - -Hacking by comparing savestates: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -One way to hack Perfect Dark with a PC is by comparing savestates. Before you -can start comparing them they need to be correctly converted. Once you've byte -flipped and corrected the savestates you can use them in several different -hacking programs. In order to do a search for anything, you're going to need -lots of different savestates to compare. Some of the programs that you can use are: - -Cheater64 v2.0 - for Project 64 savestates: -http://www.gscentral.com/lib/downloads/cheater64.zip - -Savestate Cracker - for converted savestates: -http://www.geocities.com/hopperw2000/SSC/SSC.html -http://www.geocities.com/hopperw2000/SSC/SSC131.zip - -VTR Compare 0.99 Beta - for Nemu savestates: -http://www.gscentral.com/lib/downloads/VTRCompare.zip - -Comparing savestates from a game works much the same was as using hacking tools -and a PC link cable. The problem with both methods of hacking is that they take -absolutely ages. Doing one search usually takes an hour, if you're lucky, and -if you know more or less what you're looking for. While hacking by comparing -savestates can give you precise results, it takes too long and is a bit tedious. - - -Hacking during gameplay: -~~~~~~~~~~~~~~~~~~~~~~~~ -Hacking during game play works in the same way as using the in-built code -generator in cheating devices. You don't have to worry about savestates, you -hack what you want while playing the game. This is done on a PC by using a game -hacking program on the emulator you're currently running the game in. The -specific program I want to mention is called ArtMoney. - -ArtMoney: -http://www.artmoney.ru -http://www.artmoney.ru/artmoney708eng.exe - -ArtMoney takes a little bit of work to get working, but once you've got it -working it's the best way of hacking Perfect Dark there is. - -To get ArtMoney working, run it at the same time as the emulator is running, -and select the emulator from the select process menu. By default, ArtMoney will -search the entire memory of your computer. The exact amount depends on how much -RAM you have. When you run an emulator it uses 8Mb of your computers RAM. The -emulator always uses the same 8Mb of RAM, so you have to set ArtMoney to search -in just the 8Mb of RAM somewhere in your total RAM. Where the N64 RAM is put -varies between different computers. - -In order to find where in your total RAM the emulator puts the N64 RAM, you -need to do a search for a simple code. Go to multiplayer and start a single -player game. Pick up a Falcon 2 because you're going to make an ammo mod. You -start with 8 bullets so do an exact search for the value 8. You'll want to set -the search type to integer 1 byte (whole numbers). Go back to the game, fire a -bullet and do a sieve for 7. Repeat the process until you have 2 results left. -Move them over to the list on the right and freeze the first one of them. Your -Falcon 2 should have infinite ammo (no reloads). On my PC the address this code -was at was 3D2477D8. - -The next thing you want to do is find out the cheating device version of this -code. The address 3D2477D8 is within the 8Mb of RAM (from you total RAM) used -for Perfect Dark via the emulator. With ArtMoney still running, pause the game -and make a savestate. This savestate will have exactly the same values that -ArtMoney is looking at. Open the savestate and delete the pj intro part (up to -75C). DO NOT byte flip the file. The emulator you are using is running the game -with the RAM byte flipped. When you use ArtMoneys in-built memory editor, -you're looking at the byte flipped version of the memory! In ArtMoney, -right-click the infinite ammo Falcon 2 code and choose memory editor. You want -to find the exact same spot in the hex editor as the spot you are viewing with -ArtMoneys memory editor. In ArtMoneys memory editor find a long string of -values and do a search for them in the hex editor. In my case I did a search -for CA60823C and ended up around 001B77EC. The infinite ammo code was at -address 001B77D8, which is the byte flipped cheating device version. - -You should now have two addresses, the ArtMoney address and the byte flipped -cheating device address. I had 3D2477D8 and 001B77D8. By chopping these two -codes in two you'll see that the last four digits are the same. 3D24 is equal -to 001B. By taking 3D24 and subtracting 001B you get 3D09. 3D09 equals 0000 and -is the start of the N64's RAM. 3D09 + 80 = 3D89, giving you the end of the -N64's RAM. Go to the options menu, and then the general menu. Select "Search in -address range" and input the address that equals the start of the N64 RAM, and -the end of it. For me it was 3D090000 to 3D890000. Once you've done this -ArtMoney will only look for codes in the N64 RAM, and not any other programs -you may be running on your PC. - -Changing a byte flipped cheating device address into a correct cheating device -code is as easy as changing the last digit in the address. Based on converting -a byte flipped address to a correct address, use the following table to change -the last digit: - ___________________________________________ - | | - | 0 to 3 4 to 7 8 to B C to F | - | 1 to 2 5 to 6 9 to A D to E | - | 2 to 1 6 to 5 A to 9 E to D | - | 3 to 0 7 to 4 B to 8 F to C | - |_________________________________________| - -The byte flipped code 001B77D8 is converted to 001B77DB, and finally -801B77DB 00XX. - -To give an example of how easy it can be to change an ArtMoney address into a -cheating device code, I'll change the second code that I got while searching -for Falcon 2 infinite ammo. - - > The address I got was 3D247D4B. - > First divide the address in two, 3D24 and 7D4B. - > 3D24 - 3D09 (start of RAM) = 001B ==> 801B - > 7D4B converted ==> 7D48 - > Final code is 801B7D48. - -ArtMoney has one or two minor problems. First is the rate at which the values -of the codes are written to the RAM. When you freeze a value, you don't -actually freeze it. The value gets continually written to the RAM. To give an -example, activate just the second code obtained by searching for infinite ammo, -and set it to 2. This code tries to freeze the ammo bar on the right-hand side -of the screen into a 2 bullets left position. Reload and you will see the ammo -bar blinking, it's trying to become 8, but keeps getting told its supposed to -be 2 instead. Turn the code off in ArtMoney, convert it, and enter it into the -code section of the emulator you are using. When you activate it you'll notice -that the ammo bar is flashing a lot more rapidly. 2 is getting written to the -address a lot more often. This problem can be solved by setting the freeze time -to 1 in the additional options menu. - -The second problem is the amount of results that you get while doing searches -for values you don't know. You're going to get a lot more than normal. Most of -these extra results are constantly changing values that like to be both equal -to last and different to last at the same time. Search a few more times than -normal and you should get rid of them. Another problem with doing equal and -different to searches is that sometimes you will end up with a long section of -code that you can't get rid of. This code is usually the addresses of the -textures on a character onscreen. - -ArtMoney can be hard to get working, and it does have some problems with -getting codes working. On the upside you can easily port an ArtMoney address to -a cheating device address, and hacking codes with ArtMoney is the fastest way -there is to hack Perfect Dark in hirez. - - -_______ - -Support -_______ - -If you have any problems that you can't solve then the best place for support -is the forums at gscentral.com. I visit the forums frequently. gscentral.com is -also the best place for Perfect Dark codes. - -http://www.gscentral.com - -If you can't get through to me at gscentral.com you can email me at: - -krijy@hotmail.com - - - -_______________________________________________________________________________ - - <<< Special >>> -_______________________________________________________________________________ - -The special part of this FAQ describes all about the hacking process. It's -divided into three main parts. The level modifier part teaches you how to make -the first part of a level modding code. The modifying the objects in a level -part explains how to change the objects, weapons and guards in a level. It also -explains how to move players into a level, when they start outside of it. -Advanced level modding describes how to make a fully working multiplayer level. - -Two important keywords you may want to note the difference between are: - -"Level" which describes the entire level, the arena, the players and the - objects. The two types of level are a multiplayer level and a solo - level (solo mission). -"Arena" which describes the actual place the level takes place in. An example - is the Carrington Institute arena which is used in both the CI Training - Ground and Defense. An arena consists of background (walls and floors), - and collision detection (so that a player knows where the walls are). - - -_______________________________________________________________________________ - - < Part One - The Level Modifier > -_______________________________________________________________________________ - - - > The Level List - - > The Global object list - - > The files that build up a level - - > Changing level files - ~ Level list files chart - ~ Level list codes chart - - > Loading a level via the Combat Simulator menu - ~ Example of mix matching original multiplayer levels - ~ Example of a multiplayer game in a solo only arena - ~ Example of a solo mission loaded in multiplayer - ~ Tri-operative and Quad-operative modes - - > Loading a level via the Solo Mission menu's - ~ Example of a solo mission in an arena it's not supposed to be in - ~ Moonjump codes - ~ The amount of pads in a level - ~ Loading solo levels via the Cinema menu - ~ Skipping the intro logo's and menu's - - > Other level attributes - ~ Level skies - ~ Background Music - - -An integral part of making new level setups is the level modifier. When I -mention level modifier, I don't just mean a code that changes which level has -been loaded. The level modifier codes that I am going to teach you to make, -allow you to change the files that build up the levels themselves. Before I go -into depth about this, I want you to try two examples. One is a multiplayer -level, whilst the other is a solo level. - -Complex is Chicago: -NTSC PAL -8107FF30 000A 81080470 000A -8107FF32 017C 81080472 017C -8107FF34 017B 81080474 017B - -As you may have guessed from the name, this three lined code turns Complex into -Chicago. Simply start any type of multiplayer game in Complex to get it -working. You'll notice that most items are in undesirable places, but other -than that everything is working fine. - -Air Force One is in Crash Site: -NTSC PAL -81080320 0009 81080860 0009 -81080322 0156 81080862 0156 -81080324 0155 81080864 0155 - -This code loads Air Force One: Anti-terrorism in Crash Site. To get it working -simply choose the Air Force One level from the solo missions menu. One thing -you'll notice with this code is that the intro cut-scene takes place in the sky -above where the escape pod in Crash Site usually stands. - -These two codes should give you an idea of what you can do with the level -modifier codes. - - -______________ - -The Level List -______________ - -All the levels in the game are on one list of values. The level list seen below -has both multiplayer levels, solo levels, and some other values that aren't -levels. These are the values used in what you would consider a normal level -modifier, a code that modifies which level is loaded. The two level modifiers -that we'll sometimes be using are the solo level mod and the multiplayer level mod. - -Standard Solo Level Modifier: -NTSC PAL -8009DFE9 00XX 8009E589 00XX - -Standard Multiplayer Level Modifier: -NTSC PAL -800ACB99 00XX 800AD139 00XX - -Below you can see the level value, level type, level code and level name. There -are several different level types. Most are either solo levels or multiplayer -levels. Nothing means that there isn't any level there at all. Empty means that -there is a level there, but it's a BETA level that was never made. The level -codenames are the same ones as used in GoldenEye, hence the GoldenEye keywords -like azt or crad. Regardless of their codenames, Maian SOS (sev) has nothing to -do with Severnaya. - -Level Value - Level Type - Level Code - Level Name - - 00 - Random - 01 - Nothing - 02 - Nothing - 03 - Nothing - 04 - Nothing - 05 - Nothing - 06 - Nothing - 07 - Nothing - 08 - Nothing - 09 - Solo - sev - Maian SOS - 0A - Nothing - 0B - Nothing - 0C - Nothing - 0D - Nothing - 0E - Nothing - 0F - Nothing - 10 - Nothing - 11 - Nothing - 12 - Nothing - 13 - Nothing - 14 - Unknown - silo - 15 - Nothing - 16 - Solo - stat - WAR! - 17 - Mp - arec - Ravine - 18 - Empty - arch - 19 - Solo - tra - Escape - 1A - Empty - dest - 1B - BETA - sevb - Retaking the Institute - 1C - Solo - azt - Crash Site - 1D - Solo - pete - Chicago - 1E - Solo - depo - G5 Building (Solo) - 1F - Mp - ref - Complex - 20 - Mp - cryp - G5 Building (Mp) - 21 - Solo - dam - Pelagic II - 22 - Solo - ark - Extraction - 23 - Empty - run - 24 - Empty - sevx - 25 - Mp - jun - Temple - 26 - Solo - dish - CI Training Ground - 27 - Solo - cave - Air Base - 28 - Empty - cat - 29 - Mp - crad - Pipes - 2A - Solo - sho - Skedar Ruins - 2B - Empty - sevx - 2C - Solo - eld - Villa (Solo) - 2D - Solo - imp - Defense - 2E - Empty - ash - 2F - Solo - lue - Infiltration - 30 - Solo - ame - Defection - 31 - Solo - rit - Air Force One - 32 - Solo & Mp - oat - Skedar - 33 - Solo - ear - Investigation - 34 - Solo - lee - Attack Ship - 35 - Solo - lip - Rescue - 36 - Empty - len - 37 - Solo - wax - Mr. Blondes Revenge - 38 - Solo - pam - Deep Sea - 39 - Mp - mp1 - Base - 3A - Empty - mp2 - 3B - Mp - mp3 - Area 52 - 3C - Mp - mp4 - Warehouse - 3D - Mp - mp5 - Car Park - 3E - Empty - mp6 - 3F - Empty - mp7 - 40 - Empty - mp8 - 41 - Mp - mp9 - Ruins - 42 - Mp - mp10 - Sewers - 43 - Mp - mp11 - Felicity - 44 - Mp - mp12 - Fortress - 45 - Mp - mp13 - Villa (Mp) - 46 - Empty - mp14 - 47 - Mp - mp15 - Grid - 48 - Empty - mp16 - 49 - Empty - mp17 - 4A - Empty - mp18 - 4B - Empty - mp19 - 4C - Empty - mp20 - 4D - Empty - uff - 4E - Empty - old - 4F - Solo - ate - Duel - 50 - Empty - lam - 51 - Nothing - 52 - Nothing - 53 - Nothing - 54 - Nothing - 55 - Nothing - 56 - Nothing - 57 - Nothing - 58 - Nothing - 59 - Nothing - 5A - High resolution game intro (CI Training Ground) - 5B - Controller Pak Menu - 5C - End Credits - 5D - Low resolution game intro (Small but Perfect Menu) - -There are four known BETA levels. The first is Retaking the Institute. This was -supposed to take place in the Carrington Institute, and involved clearing the -building of enemy agents. It was never finished in time for the release of the -game. The second is a solo level set in the multiplayer arena called Skedar. -It's empty, and all it has is player one with some weapons and ammo. The third -also takes place in Skedar, but its setups have been deleted. At the E3 show in -1999, a brief four second video of a solo level taking place in Skedar was -shown. It involved running around shooting dataDyne shocktroopers and -Mr. Blonde's, with some Maian friends helping you. This level could be either -of the BETA solo levels that took place in Skedar (most likely the first one). -The fourth BETA level is the multiplayer level Rooftop. Since it doesn't have -any level text it's impossible to tell which value on the level list Rooftop -was originally meant to be at. There are 21 empty levels, including what was -originally Citadel in GoldenEye. There are also some remnants of GoldenEye -levels left in the game. These can't be used in any way, but you can see part -of certain briefings from GoldenEye in the memory editor. - -All the levels on the level list are pre-built levels consisting of several -files. The level list is represented in the memory at: - -NTSC 8007FCB0 to 80080A10 - PAL 800801F0 to 80080F50 - -It's the values on this list in the memory that you will be changing in order -to create new levels. Before I explain the different files that build up a -level, it's important to know where they come from. The files that build up a -level, and their values, can be found on the global object list. - - -______________________ - -The Global Object List -______________________ - -The Global Object List is not actually found in the memory during game play. By -using a hex editor on a ROM of Perfect Dark, you can find the actual names of -all the values on the list. In the memory you can find a list of pointers that -point to addresses in the ROM at NTSC 80082060 and PAL 800825A0. The global -object list contains every object asset used in the game. It has level files -used in levels, object files, costume files and weapon files. It also has some -unidentified files that are rumoured to be animation files and dialog files. -The entire list is 07DE in hex long, so I won't list the whole thing below. The -entire list can be found in the resources section at the bottom of this FAQ. -Some examples of the values on the global object list can be seen below: - -000C - bgdata/bg_ref.seg - Complexes background file -003D - ob/ob_mid.seg - Unknown? -004E - CmrblondeZ - Mr. Blonde costume -0070 - Pa51boardZ - Area 51 Bulletin board with Maian pictures -0083 - Pborg_crateZ - BETA Cube with a circuit-like texture -00D3 - PgoldeneyelogoZ - BETA GoldenEye Logo -010C - Ump_setupdamZ - BETA GoldenEye Dam solo setup something -011B - Ump_setuprefZ - Complexes multiplayer setup file -0136 - UsetupimpZ - Defenses solo mission setup file -017D - bgdata/bg_ref_padsZ - Complexes pads (preset positions) -017E - bgdata/bg_ref_tilesZ - Complexes collision detection -0199 - CconneryZ - White Tuxedo -01A0 - CheadmrblondeZ - Mr. Blonde Head -026C - Pmatrix_liftZ - Grid lift -0293 - AvilgrimM - Dialogue from Villa? -0358 - PchrpcgunZ - Laptop Gun item -0385 - GpcgunZ - Laptop Gun player -03A0 - Am1_l1_aM - Animation of some sort? -04C7 - GpcgunlodZ - Laptop Gun reloader -0532 - Ghand_mrblondeZ - Mr. Blonde arms -05EE - LimpE - Defenses solo text -05EF - LimpJ - Something to do with Defense -05F0 - LimpP - Something to do with Defense -05F1 - Limp_str_gZ - Something to do with Defense -05F2 - Limp_str_fZ - Something to do with Defense -05F3 - Limp_str_sZ - Something to do with Defense -05F4 - Limp_str_iZ - Something to do with Defense -0756 - Pttb_boxZ - BETA Touch That Box, Box -07DD - Asaucerexp1M - Your guess is as good as mine - -These values are used in certain places in the memory, either directly or as -part of a list like the level list. The values that we will be using in level -modifier codes can be seen below: - -0001 - bgdata/bg_sev.seg -0002 - bgdata/bg_silo.seg -0003 - bgdata/bg_stat.seg -0004 - bgdata/bg_arec.seg - Ravine -0005 - bgdata/bg_arch.seg -0006 - bgdata/bg_tra.seg -0007 - bgdata/bg_dest.seg -0008 - bgdata/bg_sevb.seg -0009 - bgdata/bg_azt.seg - Crash Site -000A - bgdata/bg_pete.seg - Chicago -000B - bgdata/bg_depo.seg - G5 Building (Solo) -000C - bgdata/bg_ref.seg - Complex -000D - bgdata/bg_cryp.seg - G5 Building (MP) -000E - bgdata/bg_dam.seg - Pelagic II -000F - bgdata/bg_ark.seg -0010 - bgdata/bg_run.seg -0011 - bgdata/bg_sevx.seg -0012 - bgdata/bg_jun.seg - Temple -0013 - bgdata/bg_dish.seg - CI Training -0014 - bgdata/bg_cave.seg - Air Base -0015 - bgdata/bg_cat.seg -0016 - bgdata/bg_crad.seg - Pipes -0017 - bgdata/bg_sho.seg - Skedar Ruins -0018 - bgdata/bg_eld.seg - Villa -0019 - bgdata/bg_imp.seg -001A - bgdata/bg_ash.seg -001B - bgdata/bg_lue.seg - Area 51 -001C - bgdata/bg_ame.seg - dataDyne Building -001D - bgdata/bg_rit.seg - Air Force One -001E - bgdata/bg_oat.seg - Skedar -001F - bgdata/bg_ear.seg - Investigation -0020 - bgdata/bg_lee.seg - Attack Ship -0021 - bgdata/bg_lip.seg -0022 - bgdata/bg_len.seg -0023 - bgdata/bg_wax.seg -0024 - bgdata/bg_pam.seg - Deep Sea -0025 - bgdata/bg_uff.seg -0026 - bgdata/bg_old.seg -0027 - bgdata/bg_ate.seg -0028 - bgdata/bg_lam.seg -0029 - bgdata/bg_mp1.seg - Base -002A - bgdata/bg_mp2.seg -002B - bgdata/bg_mp3.seg - Area 52 -002C - bgdata/bg_mp4.seg - Warehouse -002D - bgdata/bg_mp5.seg - Car Park -002E - bgdata/bg_mp6.seg -002F - bgdata/bg_mp7.seg -0030 - bgdata/bg_mp8.seg -0031 - bgdata/bg_mp9.seg - Ruins -0032 - bgdata/bg_mp10.seg - Sewers -0033 - bgdata/bg_mp11.seg - Felicity -0034 - bgdata/bg_mp12.seg - Fortress -0035 - bgdata/bg_mp13.seg - Villa -0036 - bgdata/bg_mp14.seg -0037 - bgdata/bg_mp15.seg - Grid -0038 - bgdata/bg_mp16.seg -0039 - bgdata/bg_mp17.seg -003A - bgdata/bg_mp18.seg -003B - bgdata/bg_mp19.seg -003C - bgdata/bg_mp20.seg -0102 - Ump_setupameZ -0103 - Ump_setuparchZ -0104 - Ump_setuparecZ - Ravine -0105 - Ump_setuparkZ -0106 - Ump_setupashZ -0107 - Ump_setupaztZ -0108 - Ump_setupcatZ -0109 - Ump_setupcaveZ -010A - Ump_setupcradZ - Pipes -010B - Ump_setupcrypZ - G5 Building (MP) -010C - Ump_setupdamZ - BETA GoldenEye Dam solo setup something -010D - Ump_setupdepoZ -010E - Ump_setupdestZ -010F - Ump_setupdishZ -0110 - Ump_setupearZ -0111 - Ump_setupeldZ -0112 - Ump_setupimpZ -0113 - Ump_setupjunZ - Temple -0114 - Ump_setupleeZ -0115 - Ump_setuplenZ -0116 - Ump_setuplipZ -0117 - Ump_setuplueZ -0118 - Ump_setupoatZ - Skedar -0119 - Ump_setuppamZ -011A - Ump_setuppeteZ - BETA GoldenEye Streets solo setup something -011B - Ump_setuprefZ - Complex -011C - Ump_setupritZ -011D - Ump_setuprunZ -011E - Ump_setupsevZ -011F - Ump_setupsevbZ - Retaking the Institute -0120 - Ump_setupsevxZ -0121 - Ump_setupshoZ -0122 - Ump_setupsiloZ -0123 - Ump_setupstatZ -0124 - Ump_setuptraZ -0125 - Ump_setupwaxZ -0126 - UsetupameZ - Defection -0127 - UsetuparchZ -0128 - UsetuparecZ -0129 - UsetuparkZ - Extraction -012A - UsetupashZ -012B - UsetupaztZ - Crash Site -012C - UsetupcatZ -012D - UsetupcaveZ - Air Base -012E - UsetupcradZ -012F - UsetupcrypZ -0130 - UsetupdamZ - Pelagic II -0131 - UsetupdepoZ - G5 Building (Solo) -0132 - UsetupdestZ -0133 - UsetupdishZ - CI Training -0134 - UsetupearZ - Investigation -0135 - UsetupeldZ - Villa (Solo) -0136 - UsetupimpZ - Defense -0137 - UsetupjunZ -0138 - UsetupleeZ - Attack Ship -0139 - UsetuplenZ -013A - UsetuplipZ - Rescue -013B - UsetuplueZ - Infiltration -013C - UsetupoatZ - Skedar -013D - UsetuppamZ - Deep Sea -013E - UsetuppeteZ - Chicago -013F - UsetuprefZ -0140 - UsetupritZ - Air Force One -0141 - UsetuprunZ -0142 - UsetupsevZ - Maian SOS -0143 - UsetupsevbZ - Retaking the Institute -0144 - UsetupsevxZ -0145 - UsetupsevxbZ -0146 - UsetupshoZ - Skedar Ruins -0147 - UsetupsiloZ - Unknown -0148 - UsetupstatZ - WAR! -0149 - UsetuptraZ - Escape -014A - UsetupwaxZ - Mr. Blondes Revenge -014B - bgdata/bg_ame_padsZ - Defection -014C - bgdata/bg_ame_tilesZ - dataDyne Building -014D - bgdata/bg_arch_padsZ -014E - bgdata/bg_arch_tilesZ -014F - bgdata/bg_arec_padsZ - Ravine -0150 - bgdata/bg_arec_tilesZ - Ravine -0151 - bgdata/bg_ark_padsZ - Extraction -0152 - bgdata/bg_ark_tilesZ -0153 - bgdata/bg_ash_padsZ -0154 - bgdata/bg_ash_tilesZ -0155 - bgdata/bg_azt_padsZ - Crash Site -0156 - bgdata/bg_azt_tilesZ - Crash Site -0157 - bgdata/bg_cat_padsZ -0158 - bgdata/bg_cat_tilesZ -0159 - bgdata/bg_cave_padsZ - Air Base -015A - bgdata/bg_cave_tilesZ - Air Base -015B - bgdata/bg_crad_padsZ - Pipes -015C - bgdata/bg_crad_tilesZ - Pipes -015D - bgdata/bg_cryp_padsZ - G5 Building (MP) -015E - bgdata/bg_cryp_tilesZ - G5 Building (MP) -015F - bgdata/bg_dam_padsZ - Pelagic II -0160 - bgdata/bg_dam_tilesZ - Pelagic II -0161 - bgdata/bg_depo_padsZ - G5 Building (Solo) -0162 - bgdata/bg_depo_tilesZ - G5 Building (Solo) -0163 - bgdata/bg_dest_padsZ -0164 - bgdata/bg_dest_tilesZ -0165 - bgdata/bg_dish_padsZ - CI Training -0166 - bgdata/bg_dish_tilesZ - Carrington Institute -0167 - bgdata/bg_ear_padsZ - Investigation -0168 - bgdata/bg_ear_tilesZ - Investigation -0169 - bgdata/bg_eld_padsZ - Villa (Solo) -016A - bgdata/bg_eld_tilesZ - Villa (Solo) -016B - bgdata/bg_imp_padsZ - Defense -016C - bgdata/bg_imp_tilesZ -016D - bgdata/bg_jun_padsZ - Temple -016E - bgdata/bg_jun_tilesZ - Temple -016F - bgdata/bg_lee_padsZ - Attack Ship -0170 - bgdata/bg_lee_tilesZ - Attack Ship -0171 - bgdata/bg_len_padsZ -0172 - bgdata/bg_len_tilesZ -0173 - bgdata/bg_lip_padsZ - Rescue -0174 - bgdata/bg_lip_tilesZ -0175 - bgdata/bg_lue_padsZ - Infiltration -0176 - bgdata/bg_lue_tilesZ - Area 51 -0177 - bgdata/bg_oat_padsZ - Skedar -0178 - bgdata/bg_oat_tilesZ - Skedar -0179 - bgdata/bg_pam_padsZ - Deep Sea -017A - bgdata/bg_pam_tilesZ - Deep Sea -017B - bgdata/bg_pete_padsZ - Chicago -017C - bgdata/bg_pete_tilesZ - Chicago -017D - bgdata/bg_ref_padsZ - Complex -017E - bgdata/bg_ref_tilesZ - Complex -017F - bgdata/bg_rit_padsZ - Air Force One -0180 - bgdata/bg_rit_tilesZ - Air Force One -0181 - bgdata/bg_run_padsZ -0182 - bgdata/bg_run_tilesZ -0183 - bgdata/bg_sev_padsZ - Maian SOS -0184 - bgdata/bg_sev_tilesZ -0185 - bgdata/bg_sevb_padsZ - Retaking the Institute -0186 - bgdata/bg_sevb_tilesZ -0187 - bgdata/bg_sevx_padsZ -0188 - bgdata/bg_sevx_tilesZ -0189 - bgdata/bg_sho_padsZ - Skedar Ruins -018A - bgdata/bg_sho_tilesZ - Skedar Ruins -018B - bgdata/bg_silo_padsZ - Unknown -018C - bgdata/bg_silo_tilesZ - Unknown -018D - bgdata/bg_stat_padsZ - WAR! -018E - bgdata/bg_stat_tilesZ -018F - bgdata/bg_tra_padsZ - Escape -0190 - bgdata/bg_tra_tilesZ -0191 - bgdata/bg_wax_padsZ - Mr. Blonde's Revenge -0192 - bgdata/bg_wax_tilesZ -01D1 - UsetupuffZ -01D2 - Ump_setupuffZ -01D3 - bgdata/bg_uff_padsZ -01D4 - bgdata/bg_uff_tilesZ -01D5 - UsetupoldZ -01D6 - Ump_setupoldZ -01D7 - bgdata/bg_old_padsZ -01D8 - bgdata/bg_old_tilesZ -01D9 - UsetupateZ - Duel -01DA - Ump_setupateZ -01DB - bgdata/bg_ate_padsZ - Duel -01DC - bgdata/bg_ate_tilesZ -01DD - UsetuplamZ -01DE - Ump_setuplamZ -01DF - bgdata/bg_lam_padsZ -01E0 - bgdata/bg_lam_tilesZ -01E1 - Usetupmp1Z -01E2 - Ump_setupmp1Z - Base -01E3 - bgdata/bg_mp1_padsZ - Base -01E4 - bgdata/bg_mp1_tilesZ - Base -01E5 - Usetupmp2Z -01E6 - Ump_setupmp2Z -01E7 - bgdata/bg_mp2_padsZ -01E8 - bgdata/bg_mp2_tilesZ -01E9 - Usetupmp3Z -01EA - Ump_setupmp3Z - Area 52 -01EB - bgdata/bg_mp3_padsZ - Area 52 -01EC - bgdata/bg_mp3_tilesZ - Area 52 -01ED - Usetupmp4Z -01EE - Ump_setupmp4Z - Warehouse -01EF - bgdata/bg_mp4_padsZ - Warehouse -01F0 - bgdata/bg_mp4_tilesZ - Warehouse -01F1 - Usetupmp5Z -01F2 - Ump_setupmp5Z - Car Park -01F3 - bgdata/bg_mp5_padsZ - Car Park -01F4 - bgdata/bg_mp5_tilesZ - Car Park -01F5 - Usetupmp6Z -01F6 - Ump_setupmp6Z -01F7 - bgdata/bg_mp6_padsZ -01F8 - bgdata/bg_mp6_tilesZ -01F9 - Usetupmp7Z -01FA - Ump_setupmp7Z -01FB - bgdata/bg_mp7_padsZ -01FC - bgdata/bg_mp7_tilesZ -01FD - Usetupmp8Z -01FE - Ump_setupmp8Z -01FF - bgdata/bg_mp8_padsZ -0200 - bgdata/bg_mp8_tilesZ -0201 - Usetupmp9Z -0202 - Ump_setupmp9Z - Ruins -0203 - bgdata/bg_mp9_padsZ - Ruins -0204 - bgdata/bg_mp9_tilesZ - Ruins -0205 - Usetupmp10Z -0206 - Ump_setupmp10Z - Sewers -0207 - bgdata/bg_mp10_padsZ - Sewers -0208 - bgdata/bg_mp10_tilesZ - Sewers -0209 - Usetupmp11Z -020A - Ump_setupmp11Z - Felicity -020B - bgdata/bg_mp11_padsZ - Felicity -020C - bgdata/bg_mp11_tilesZ - Felicity -020D - Usetupmp12Z -020E - Ump_setupmp12Z - Fortress -020F - bgdata/bg_mp12_padsZ - Fortress -0210 - bgdata/bg_mp12_tilesZ - Fortress -0211 - Usetupmp13Z -0212 - Ump_setupmp13Z - Villa -0213 - bgdata/bg_mp13_padsZ - Villa -0214 - bgdata/bg_mp13_tilesZ - Villa -0215 - Usetupmp14Z -0216 - Ump_setupmp14Z -0217 - bgdata/bg_mp14_padsZ -0218 - bgdata/bg_mp14_tilesZ -0219 - Usetupmp15Z -021A - Ump_setupmp15Z - Grid -021B - bgdata/bg_mp15_padsZ - Grid -021C - bgdata/bg_mp15_tilesZ - Grid -021D - Usetupmp16Z -021E - Ump_setupmp16Z -021F - bgdata/bg_mp16_padsZ -0220 - bgdata/bg_mp16_tilesZ -0221 - Usetupmp17Z -0222 - Ump_setupmp17Z -0223 - bgdata/bg_mp17_padsZ -0224 - bgdata/bg_mp17_tilesZ -0225 - Usetupmp18Z -0226 - Ump_setupmp18Z -0227 - bgdata/bg_mp18_padsZ -0228 - bgdata/bg_mp18_tilesZ -0229 - Usetupmp19Z -022A - Ump_setupmp19Z -022B - bgdata/bg_mp19_padsZ -022C - bgdata/bg_mp19_tilesZ -022D - Usetupmp20Z -022E - Ump_setupmp20Z -022F - bgdata/bg_mp20_padsZ -0230 - bgdata/bg_mp20_tilesZ - -You'll notice that a lot of these files don't have levels connected to them. -The reason is that the files are empty! There isn't any information in them. -Most of these empty values are used in the "empty" levels I mentioned earlier -on in the level list. - - -_______________________________ - -The files that build up a level -_______________________________ - -There are 5 main files that build up a level, 1 known file that has minimal -use, and 6 files that don't have any use. I'll take Chicago as an example. The -codename for Chicago is pete: - -000A - bgdata/bg_pete.seg - Background data (Wall and floor images) -017C - bgdata/bg_pete_tilesZ - Collision detection (Contact with the bgdata) -017B - bgdata/bg_pete_padsZ - Pads (preset positions) -013E - UsetuppeteZ - Solo mission setup -011A - Ump_setuppeteZ - Multiplayer setup (BETA GoldenEye Streets?) -06DC - LpeteE - Solo mission text -06DD - LpeteJ - Unknown / unused -06DE - LpeteP - Unknown / unused -06DF - Lpete_str_gZ - Unknown / unused -06E0 - Lpete_str_fZ - Unknown / unused -06E1 - Lpete_str_sZ - Unknown / unused -06E2 - Lpete_str_iZ - Unknown / unused - -We are only going to be changing the first five of these values, the background -data, collision detection, setups and pads. - -Bgdata: -------- -The background data is the file that contains information about the walls and -floors that you can see in a level. This file is closely related to the -collision detection file. - -Tiles: ------- -The tiles file is also known as the collision detection file. It contains -information that tells the player when they have walked into a wall, or are -standing on a floor. In addition it defines where there are ladders that you -can climb up. It has to be used at the same time as its corresponding -background data file. A background data and collision detection file used -together are known as an arena. - -There are 31 different arenas. The 31st is the Default arena, which is used in -all the "empty" levels that have no distinctive walls or floors. The Default -arena is simply a big square floor, and was no doubt used as a testing area at -some point during the making of Perfect Dark. Some arenas are so big that they -are used in several different levels. Most notable are Area 51 and the dataDyne -Building. - -Pads: ------ -The pads are positions defined in relation to the arena they are supposed to be -in. Think of a pad as a beer mat lying somewhere in an arena. On the beer mat -you put a pint of beer (an object). There are many different kinds of pads. -Some simply have coordinates that define a position, others define both -position and which direction the object put there is pointing in. Some door -pads reshape an object to fit a door, other pads might be hanging is midair. -The amount of pads vary from arena to arena, with Complex having only E2 pads, -and Area 51 having 568 (that's 1384 in decimal!). Pads should be loaded in the -arenas they are meant to be in, but that doesn't mean they're bound to that -arena. You could load the pads from Area 51 in Complex, but most of the pads -would be outside the arena or hanging in midair. - -Solo setup and Mp_setup: ------------------------- -The setup files put objects in the pads of the arenas they are meant to be -played in. The solo setup puts doors, enemies and objects in the pads of a solo -level. It also defines objectives and player one's status. Mp_setup files, -better known as multiplayer setup files, put ammocrates and weapons in pads. -They also put respawn points, bases and hills in pads. A base or hill will -highlight the room a pad is in (and put the case on that pad). - -A lot of the "empty" setups have something in them. These can't be loaded or -used in any way, so I haven't found out much about them. To give an example, in -multiplayer levels like Sewers, its solo setup contains three lifts. Some of -the mp_setup files contain "remnants" of GoldenEye in them. If you try to load -them the game will freeze, but you will be able to see parts of their briefings. - -L"codename"E: -------------- -This is solo mission text. You won't be changing this, but it's nice to know -it's there. - - -____________________ - -Changing level files -____________________ - -In order to change the levels, you simply need to swap their level files -around. Below you can see an example of what Chicago looks like represented in -the memory: - _____________________________________________________________ - | NTSC PAL | - |8007FEB0 - 0000 0000 3F80 0000 001D 02FF 6464 0000 - 800803F0| - |8007FEC0 - 000A 017C 017B 013E 011A 0000 3F80 0000 - 80080400| - |8007FED0 - 3F80 0000 42C8 0000 0000 00FF 0000 00FF - 80080410| - |8007FEE0 - 3E19 999A FFFF 0190 0000 0000 3F80 0000 - 80080420| - |_____________________________________________________________| - -001D is the level value from the level list. The fist 16bit value on the second -line is the background data (000A). After that comes the collision detection -(017C), the pads (017B), the solo setup (013E) and the mp_setup (011A). In this -instance, since Chicago doesn't have a multiplayer setup, the value 011A is an -empty file. - -To modify Chicago you simply need to change a few values (NTSC code example): -8107FEC0 00XX - Background data mod -8107FEC2 0XXX - Collision Detection mod -8107FEC4 0XXX - Pads mod -8107FEC6 0XXX - Solo setup mod -8107FEC8 0XXX - Multiplayer setup mod - -I'll take another example, this one shows which files Extraction uses: - _____________________________________________________________ - | NTSC PAL | - |8007FFC0 - 3E19 999A FFFF 0190 0000 0000 3F80 0000 - 80080500| - |8007FFD0 - 0022 02FF 6464 0000 001C 014C 0151 0129 - 80080510| - |8007FFE0 - 0105 0000 3F80 0000 3F80 0000 42C8 0000 - 80080520| - |8007FFF0 - 0000 00FF 0000 00FF 3E19 999A FFFF 0190 - 80080530| - |_____________________________________________________________| - -8107FFD8 00XX - Background data mod -8107FFDA 0XXX - Collision Detection mod -8107FFDC 0XXX - Pads mod -8107FFDE 0XXX - Solo setup mod -8107FFE0 0XXX - Multiplayer setup mod - -Notice which background data and collision detection files are used here: -001C - bgdata/bg_ame.seg - dataDyne Building -014C - bgdata/bg_ame_tilesZ - dataDyne Building -0151 - bgdata/bg_ark_padsZ - Extraction -0129 - UsetuparkZ - Extraction -0105 - Ump_setuparkZ - -"ame" is also the codename for Defection, but the bgdata and tiles are used in -Defection, Extraction and Mr.Blonde's Revenge. The bgdata and tile files with -codename "ark" (000F, 0152) are unused and empty files. Ump_setuparkZ is also -empty. - - -Level list files chart: -~~~~~~~~~~~~~~~~~~~~~~~ -To make things easier to understand, I've made a list which shows the values -from all the levels on the level list, in the order that they are shown in the -memory (at NTSC 8007FCB0 to 80080A10 or PAL 800801F0 to 80080F50). The ones -with blank level names are levels that are empty and consist only of empty -files. The codename doesn't always apply for all bgdata and tiles, like Maian -SOS which uses Area 51's bgdata and tiles. The unknown BETA level 14 uses -Skedar's bgdata, tiles and pads, but the setup files are empty. The pads and -setups in Retaking the Institute are empty too, so there's nothing BETA to be -found there either. - -Level Bgdata Tiles Pads Setup Mp_setup Codename Level Name - - 09 001B 0176 0183 0142 011E sev Maian SOS - 14 001E 0178 0177 0147 0122 silo Unknown - 16 0017 018E 018D 0148 0123 stat WAR! - 17 0004 0150 014F 0128 0104 arec Ravine - 18 0005 014E 014D 0127 0103 arch - 19 001B 0176 018F 0149 0124 tra Escape - 1A 0007 0164 0163 0132 010E dest - 1B 0013 0166 0185 0143 011F sevb Retaking the Institute - 1C 0009 0156 0155 012B 0107 azt Crash Site - 1D 000A 017C 017B 013E 011A pete Chicago - 1E 000B 0162 0161 0131 010D depo G5 Building (Solo) - 1F 000C 017E 017D 013F 011B ref Complex - 20 000D 015E 015D 012F 010B cryp G5 Building (Mp) - 21 000E 0160 015F 0130 010C dam Pelagic II - 22 001C 014C 0151 0129 0105 ark Extraction - 23 0010 0182 0181 0141 011D run - 24 0011 0188 0187 0144 0120 sevx - 25 0012 016E 016D 0137 0113 jun Temple - 26 0013 0166 0165 0133 010F dish CI Training - 27 0014 015A 0159 012D 0109 cave Air Base - 28 0015 0158 0157 012C 0108 cat - 29 0016 015C 015B 012E 010A crad Pipes - 2A 0017 018A 0189 0146 0121 sho Skedar Ruins - 2B 0011 0188 0187 0144 0120 sevx - 2C 0018 016A 0169 0135 0111 eld Villa (Solo) - 2D 0013 0166 016B 0136 0112 imp Defense - 2E 001A 0154 0153 012A 0106 ash - 2F 001B 0176 0175 013B 0117 lue Infiltration - 30 001C 014C 014B 0126 0102 ame Defection - 31 001D 0180 017F 0140 011C rit Air Force One - 32 001E 0178 0177 013C 0118 oat Skedar - 33 001F 0168 0167 0134 0110 ear Investigation - 34 0020 0170 016F 0138 0114 lee Attack Ship - 35 001B 0176 0173 013A 0116 lip Rescue - 36 0022 0172 0171 0139 0115 len - 37 001C 014C 014B 014A 0125 wax Mr.Blondes Revenge - 38 0024 017A 0179 013D 0119 pam Deep Sea - 4D 0025 01D4 01D3 01D1 01D2 uff - 4E 0026 01D8 01D7 01D5 01D6 old - 4F 0013 0166 01DB 01D9 01DA ate Duel - 50 0028 01E0 01DF 01DD 01DE lam - 39 0029 01E4 01E3 01E1 01E2 mp1 Base - 3A 002A 01E8 01E7 01E5 01E6 mp2 - 3B 002B 01EC 01EB 01E9 01EA mp3 Area 52 - 3C 002C 01F0 01EF 01ED 01EE mp4 Warehouse - 3D 002D 01F4 01F3 01F1 01F2 mp5 Car Park - 3E 002E 01F8 01F7 01F5 01F6 mp6 - 3F 002F 01FC 01FB 01F9 01FA mp7 - 40 0030 0200 01FF 01FD 01FE mp8 - 41 0031 0204 0203 0201 0202 mp9 Ruins - 42 0032 0208 0207 0205 0206 mp10 Sewers - 43 0033 020C 020B 0209 020A mp11 Felicity - 44 0034 0210 020F 020D 020E mp12 Fortress - 45 0035 0214 0213 0211 0212 mp13 Villa (Mp) - 46 0036 0218 0217 0215 0216 mp14 - 47 0037 021C 021B 0219 021A mp15 Grid - 48 0038 0220 021F 021D 021E mp16 - 49 0039 0224 0223 0221 0222 mp17 - 4A 003A 0228 0227 0225 0226 mp18 - 4B 003B 022C 022B 0229 022A mp19 - 4C 003C 0230 022F 022D 022E mp20 - - -Level list code charts: -~~~~~~~~~~~~~~~~~~~~~~~ -Normally, to find the level modifier code you want, you would have to track -down the level you want to change on the level list, represented in the memory -(at NTSC 8007FCB0 to 80080A10 or PAL 800801F0 to 80080F50). To make things a -lot easier I've compiled the following code lists in both NTSC and PAL. Use the -codes together with the values in the tables seen above. - -NTSC Level List Codes: ----------------------- -Value - Bgdata - Tiles - Pads - Setup - Mp_setup - Name - - 09 8107FCC8 8107FCCA 8107FCCC 8107FCCE 8107FCD0 Maian SOS - 14 8107FD00 8107FD02 8107FD04 8107FD06 8107FD08 Unknown - 16 8107FD38 8107FD3A 8107FD3C 8107FD3E 8107FD40 WAR! - 17 8107FD70 8107FD72 8107FD74 8107FD76 8107FD78 Ravine - 18 8107FDA8 8107FDAA 8107FDAC 8107FDAE 8107FDB0 - 19 8107FDE0 8107FDE2 8107FDE4 8107FDE6 8107FDE8 Escape - 1A 8107FE18 8107FE1A 8107FE1C 8107FE1E 8107FE20 - 1B 8107FE50 8107FE52 8107FE54 8107FE56 8107FE58 Retaking the CI - 1C 8107FE88 8107FE8A 8107FE8C 8107FE8E 8107FE90 Crash Site - 1D 8107FEC0 8107FEC2 8107FEC4 8107FEC6 8107FEC8 Chicago - 1E 8107FEF8 8107FEFA 8107FEFC 8107FEFE 8107FF00 G5 Build. (Solo) - 1F 8107FF30 8107FF32 8107FF34 8107FF36 8107FF38 Complex - 20 8107FF68 8107FF6A 8107FF6C 8107FF6E 8107FF70 G5 Building (Mp) - 21 8107FFA0 8107FFA2 8107FFA4 8107FFA6 8107FFA8 Pelagic II - 22 8107FFD8 8107FFDA 8107FFDC 8107FFDE 8107FFE0 Extraction - 23 81080010 81080012 81080014 81080016 81080018 - 24 81080048 8108004A 8108004C 8108004E 81080050 - 25 81080080 81080082 81080084 81080086 81080088 Temple - 26 810800B8 810800BA 810800BC 810800BE 810800C0 CI Training - 27 810800F0 810800F2 810800F4 810800F6 810800F8 Air Base - 28 81080128 8108012A 8108012C 8108012E 81080130 - 29 81080160 81080162 81080164 81080166 81080168 Pipes - 2A 81080198 8108019A 8108019C 8108019E 810801A0 Skedar Ruins - 2B 810801D0 810801D2 810801D4 810801D6 810801D8 - 2C 81080208 8108020A 8108020C 8108020E 81080210 Villa (Solo) - 2D 81080240 81080242 81080244 81080246 81080248 Defense - 2E 81080278 8108027A 8108027C 8108027E 81080280 - 2F 810802B0 810802B2 810802B4 810802B6 810802B8 Infiltration - 30 810802E8 810802EA 810802EC 810802EE 810802F0 Defection - 31 81080320 81080322 81080324 81080326 81080328 Air Force One - 32 81080358 8108035A 8108035C 8108035E 81080360 Skedar - 33 81080390 81080392 81080394 81080396 81080398 Investigation - 34 810803C8 810803CA 810803CC 810803CE 810803D0 Attack Ship - 35 81080400 81080402 81080404 81080406 81080408 Rescue - 36 81080438 8108043A 8108043C 8108043E 81080440 - 37 81080470 81080472 81080474 81080476 81080478 Mr.Blondes Rev. - 38 810804A8 810804AA 810804AC 810804AE 810804B0 Deep Sea - 4D 810804E0 810804E2 810804E4 810804E6 810804E8 - 4E 81080518 8108051A 8108051C 8108051E 81080520 - 4F 81080550 81080552 81080554 81080556 81080558 Duel - 50 81080588 8108058A 8108058C 8108058E 81080590 - 39 810805C0 810805C2 810805C4 810805C6 810805C8 Base - 3A 810805F8 810805FA 810805FC 810805FE 81080600 - 3B 81080630 81080632 81080634 81080636 81080638 Area 52 - 3C 81080668 8108066A 8108066C 8108066E 81080670 Warehouse - 3D 810806A0 810806A2 810806A4 810806A6 810806A8 Car Park - 3E 810806D8 810806DA 810806DC 810806DE 810806E0 - 3F 81080710 81080712 81080714 81080716 81080718 - 40 81080748 8108074A 8108074C 8108074E 81080750 - 41 81080780 81080782 81080784 81080786 81080788 Ruins - 42 810807B8 810807BA 810807BC 810807BE 810807C0 Sewers - 43 810807F0 810807F2 810807F4 810807F6 810807F8 Felicity - 44 81080828 8108082A 8108082C 8108082E 81080830 Fortress - 45 81080860 81080862 81080864 81080866 81080868 Villa (Mp) - 46 81080898 8108089A 8108089C 8108089E 810808A0 - 47 810808D0 810808D2 810808D4 810808D6 810808D8 Grid - 48 81080908 8108090A 8108090C 8108090E 81080910 - 49 81080940 81080942 81080944 81080946 81080948 - 4A 81080978 8108097A 8108097C 8108097E 81080980 - 4B 810809B0 810809B2 810809B4 810809B6 810809B8 - 4C 810809E8 810809EA 810809EC 810809EE 810809F0 - -PAL Level List Codes: ---------------------- -Value - Bgdata - Tiles - Pads - Setup - Mp_setup - Name - - 09 81080208 8108020A 8108020C 8108020E 81080210 Maian SOS - 14 81080240 81080242 81080244 81080246 81080248 Unknown - 16 81080278 8108027A 8108027C 8108027E 81080280 WAR! - 17 810802B0 810802B2 810802B4 810802B6 810802B8 Ravine - 18 810802E8 810802EA 810802EC 810802EE 810802F0 - 19 81080320 81080322 81080324 81080326 81080328 Escape - 1A 81080358 8108035A 8108035C 8108035E 81080360 - 1B 81080390 81080392 81080394 81080396 81080398 Retaking the CI - 1C 810803C8 810803CA 810803CC 810803CE 810803D0 Crash Site - 1D 81080400 81080402 81080404 81080406 81080408 Chicago - 1E 81080438 8108043A 8108043C 8108043E 81080440 G5 Build. (Solo) - 1F 81080470 81080472 81080474 81080476 81080478 Complex - 20 810804A8 810804AA 810804AC 810804AE 810804B0 G5 Building (Mp) - 21 810804E0 810804E2 810804E4 810804E6 810804E8 Pelagic II - 22 81080518 8108051A 8108051C 8108051E 81080520 Extraction - 23 81080550 81080552 81080554 81080556 81080558 - 24 81080588 8108058A 8108058C 8108058E 81080590 - 25 810805C0 810805C2 810805C4 810805C6 810805C8 Temple - 26 810805F8 810805FA 810805FC 810805FE 81080600 CI Training - 27 81080630 81080632 81080634 81080636 81080638 Air Base - 28 81080668 8108066A 8108066C 8108066E 81080670 - 29 810806A0 810806A2 810806A4 810806A6 810806A8 Pipes - 2A 810806D8 810806DA 810806DC 810806DE 810806E0 Skedar Ruins - 2B 81080710 81080712 81080714 81080716 81080718 - 2C 81080748 8108074A 8108074C 8108074E 81080750 Villa (Solo) - 2D 81080780 81080782 81080784 81080786 81080788 Defense - 2E 810807B8 810807BA 810807BC 810807BE 810807C0 - 2F 810807F0 810807F2 810807F4 810807F6 810807F8 Infiltration - 30 81080828 8108082A 8108082C 8108082E 81080830 Defection - 31 81080860 81080862 81080864 81080866 81080868 Air Force One - 32 81080898 8108089A 8108089C 8108089E 810808A0 Skedar - 33 810808D0 810808D2 810808D4 810808D6 810808D8 Investigation - 34 81080908 8108090A 8108090C 8108090E 81080910 Attack Ship - 35 81080940 81080942 81080944 81080946 81080948 Rescue - 36 81080978 8108097A 8108097C 8108097E 81080980 - 37 810809B0 810809B2 810809B4 810809B6 810809B8 Mr.Blondes Rev. - 38 810809E8 810809EA 810809EC 810809EE 810809F0 Deep Sea - 4D 81080A20 81080A22 81080A24 81080A26 81080A28 - 4E 81080A58 81080A5A 81080A5C 81080A5E 81080A60 - 4F 81080A90 81080A92 81080A94 81080A96 81080A98 Duel - 50 81080AC8 81080ACA 81080ACC 81080ACE 81080AD0 - 39 81080B00 81080B02 81080B04 81080B06 81080B08 Base - 3A 81080B38 81080B3A 81080B3C 81080B3E 81080B40 - 3B 81080B70 81080B72 81080B74 81080B76 81080B78 Area 52 - 3C 81080BA8 81080BAA 81080BAC 81080BAE 81080BB0 Warehouse - 3D 81080BE0 81080BE2 81080BE4 81080BE6 81080BE8 Car Park - 3E 81080C18 81080C1A 81080C1C 81080C1E 81080C20 - 3F 81080C50 81080C52 81080C54 81080C56 81080C58 - 40 81080C88 81080C8A 81080C8C 81080C8E 81080C90 - 41 81080CC0 81080CC2 81080CC4 81080CC6 81080CC8 Ruins - 42 81080CF8 81080CFA 81080CFC 81080CFE 81080D00 Sewers - 43 81080D30 81080D32 81080D34 81080D36 81080D38 Felicity - 44 81080D68 81080D6A 81080D6C 81080D6E 81080D70 Fortress - 45 81080DA0 81080DA2 81080DA4 81080DA6 81080DA8 Villa (Mp) - 46 81080DD8 81080DDA 81080DDC 81080DDE 81080DE0 - 47 81080E10 81080E12 81080E14 81080E16 81080E18 Grid - 48 81080E48 81080E4A 81080E4C 81080E4E 81080E50 - 49 81080E80 81080E82 81080E84 81080E86 81080E88 - 4A 81080EB8 81080EBA 81080EBC 81080EBE 81080EC0 - 4B 81080EF0 81080EF2 81080EF4 81080EF6 81080EF8 - 4C 81080F28 81080F2A 81080F2C 81080F2E 81080F30 - - -_____________________________________________ - -Loading a level via the Combat Simulator menu -_____________________________________________ - -When loading a level via the combat simulator menu, you'll be loading levels in -multiplayer mode. Multiplayer mode more or less means that any players will be -the players chosen from the player menu's, the pause menu system will be like -that from multiplayer, and you can set lots of different things (like one-hit -kills, or fast motion). You probably know all this from before, but the reason -I'm telling you is because you can load a solo level via the Combat Simulator -menu. - -Remember those two different setups mentioned earlier? When you load a level -via the Combat Simulator menu, the file set at the mp_setup slot will be -loaded. Multiplayer mode uses only four files, the bgdata, tiles, pads and -mp_setup. You can mix and match files from the original multiplayer levels -easily. To load solo levels, and levels that can't be selected from the level -menu, you have to use the standard multiplayer level mod: - -NTSC PAL -800ACB99 00XX 800AD139 00XX - -To select the modified level from the arena list, instead of always forcing the -game to play in the same level, use the following code. This code changes which -level is loaded when you choose Random from the arena menu: - -NTSC PAL -80084BF9 00XX 80085149 00XX - - -Example of mix matching original multiplayer levels (PAL example): -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Villa Bgdata mod: 81080DA0 002C - Warehouse bgdata -Villa Tiles mod: 81080DA2 01F0 - Warehouse tiles -Villa Pads mod: 81080DA4 01EF - Warehouse pads -Villa Mp_setup mod: 81080DA8 01E2 - Base mp_setup - -The codes change Villa, so to play in this level simply select Villa. You'll -notice that the actual level is Warehouse, with Warehouse's positions, but the -sky is Villa's. The mp_setup is Base's, so it has lots of metal crates, five -doors and two lifts. All of these objects are put in positions that correspond -to Base's pads. As a result, most of the objects are out of place. - -Villa is Warehouse with Base's mp_setup: -NTSC PAL -81080860 002C 81080DA0 002C -81080862 01F0 81080DA2 01F0 -81080864 01EF 81080DA4 01EF -81080868 01E2 81080DA8 01E2 - - -Example of a multiplayer game in a solo only arena: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This is probably what you'll be doing most, making previously solo only arenas -playable in multiplayer. The problem with solo only levels is that they don't -have mp_setup files (or rather, they do have mp_setup files, but they're either -empty or GoldenEye leftovers). The solution is rather simple. Simply use an -mp_setup file from a multiplayer level that has a working mp_setup file. -Remember the "Complex is Chicago" code I showed you earlier? - -NTSC PAL -8107FF30 000A 81080470 000A - Complex bgdata mod -8107FF32 017C 81080472 017C - Complex tiles mod -8107FF34 017B 81080474 017B - Complex pads mod - -All this code does is change the look and positions of Complex into Chicago. -Complexes mp_setup remains unchanged, so you play in Chicago with Complexes -mp_setup. - -Base is the Carrington Institute with Skedar's mp_setup: -NTSC PAL -810805C0 0013 81080B00 0013 -810805C2 0166 81080B02 0166 -810805C4 0165 81080B04 0165 -810805C8 0118 81080B08 0118 - -This is a version of the Carrington Institute in multiplayer. It's a Base mod -so choose Base from the menu. It uses Skedar's mp_setup. The weapons can be -found in the hangar, and the ammo can be found in the firing range. If you use -other mp_setups the weapons and ammo will appear elsewhere. The following -mp_setups are the best ones to use: - -011B - Complex -0118 - Skedar -010B - G5 Building (Mp) -0212 - Villa - -If you remove the last code in the example above, Base's mp_setup will be -loaded. This mp_setup is great for the Carrington Institute because it has two -lifts in it. - -In the example above you may have noticed that the level looks kind of flushed -out. That's because the shadowing is missing. This is most obvious in the -firing range, by looking at the walls along the left and right (they're usually -blacked out). If you look around you will actually see that some walls are -darker than others. These patches are actually Base's shadowing. The files that -build up a level aren't the only things connected to a level. There's also -shadowing, fog, backdrop and sky. The problem can easily be solved by loading -the Carrington Institute in a level it's meant to be loaded in: - -The Carrington Institute (Defense version) in multiplayer with Base's setup: -NTSC PAL -800ACB99 002D 800AD139 002D -81080210 0212 81080788 0212 - -The shadowing will work with this version of the code. The sky should also be -blue and sunny, and it takes less lines of code to achieve the same results. -The floor reflection in the main hall also works. - - -Example of a solo mission loaded in multiplayer: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Loading a solo mission via the Combat Simulator gives you a wealth of options -you can't choose from normally via the Solo Mission menu. The easiest way to -make this type of level mod is to simply swap the solo and mp_setup files -around, and don't change the background data or collision detection. You want -to have the shadowing loaded in the right level, or the game tends to freeze. - -WAR! loaded via the Combat Simulator: -NTSC PAL -800ACB99 0016 800AD139 0016 -8107FD40 0148 81080280 0148 - -To get this seriously cool code working, simply press start at the Combat -Simulator Advanced menu. Don't be too hasty, there are a few things you have to -set before entering the level. First and foremost you'll want to turn on teams -and select Cyan. If you don't, the Maians at the start of the level will mince -you with their Callistoes (the Skedar's team colour is yellow). Secondly, you -won't be playing as a Maian soldier. You'll be playing as player one, so load -your own multiplayer player from the menu. Lastly you can set certain stuff -like slow-motion or fast movement. - -Once the game starts, you'll take control of your player and probably feel -large because you usually play this level with a short Maian. The objectives -interface isn't activated, so you won't be getting any "Objective 1 Completed" -messages. If you die you'll respawn at the start of the level. By default the -game loads the level in Agent mode. Last but not least, the game will freeze -when it tries to load the level complete menu. - -Level Difficulty Mod: -NTSC PAL -80084023 000X 80084563 000X - -Use this code to set the level difficulty. The values are: -00 - Agent (It's set at this by default) -01 - Special Agent -02 - Perfect Agent - -Level Complete Fix: -NTSC PAL -8009D08B 0001 8009D5EB 0001 - Agent -8009D08F 0001 8009D5EF 0001 - Special Agent -8009D013 0001 8009D5F3 0001 - Perfect Agent - -Use this code to stop the game from freezing when the level is completed. If -you're playing in Agent mode then use the first code. If you're playing in -Special Agent mode then use the first and second code. For Perfect Agent mode -use all three codes. If the above code doesn't work, use this code instead: - -Alternate Level Complete Fix: -NTSC PAL -D1067E56 XX00 D1067B36 XX00 -800AC7F6 0190 800ACD96 0190 - -This code contains the objectives complete modifier and the Briefcase score -modifier. To get it working you need to have Hold the Briefcase on as a -scenario, and Team Score must not be set to unlimited. The game ends the moment -you complete all the objectives, so you can't watch the outro cut-scene. The -objective values for WAR! are: - -02 - Objective one complete (Agent) -06 - Objective one and two complete (Special Agent) -0E - Objective one, two and three complete (Perfect Agent) - -Some solo missions have objectives that simply won't work when you load the -mission via the Combat Simulator menu. A good example is in Defense. The -buttons that activate the droneguns don't work. You simply can't press them, so -you can't activate them. When it comes to these kind of objectives, the best -thing to do is to hack individual codes that fix the problems. Since that can -be a hard and lengthy procedure, the second best thing to do is use the -objectives completed mod, and simply skip the objective. - -Objectives completed (or failed) modifier: -NTSC PAL -81067E56 XX00 81067B36 XX00 - -The values for the objectives completed mod vary depending on which level is -loaded, and how many objectives there are. If completing objective 1 had the -value 02, and completing objective 1 and 2 had the value 04, you could make -the following code: - -D1067E56 0200 -81067E56 0400 - -This code uses an activator. When objective 1 is complete, objective 1 and 2 -will become complete. - -Note of importance: -Depending on the compatibility of your cheating device, only certain levels -will work. It's well known that with a version 3.0 Gameshark or Action Replay, -you can't play in Villa (Solo) or Infiltration. The version 3.3 Professional -cheating devices have better compatibility. For the best compatibility use an -emulator on a PC. Not all levels can be loaded via the Combat Simulator menu -when using a version 3.0 cheating device. Of those levels that can be loaded -and work with version 3.0, stick to playing with only one player. WAR! is a -relatively easy level to load, and the example I've given above works in all -versions. If you try and add a second player (Co-operative mode) and have a -version 3.0, the game will freeze. If you have anything better than 3.0 then -two players should work fine. On a PC you can activate up to four players, for -Tri-operative and Quad-operative modes. - - -Tri-operative and Quad-operative modes: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Sounds exciting doesn't it? The ability to play solo levels with up to four -people. There are two problems with this. The first is that most levels won't -work, and the second is that the game lags. In normal co-operative mode the -game lags quite a bit, but add two more players and the enemies will be running -around you in circles before you even see them. To get Tri-operative or -Quad-operative modes working, simply follow the same procedure as loading a -solo mission via the Combat Simulator menu. - -WAR! loaded via the Combat Simulator (Complete, Perfect Agent version): -NTSC PAL -800ACB99 0016 800AD139 0016 -8107FD40 0148 81080280 0148 -80084023 0002 80084563 0002 -8009D08B 0001 8009D5EB 0001 -8009D08F 0001 8009D5EF 0001 -8009D013 0001 8009D5F3 0001 - -The amount of players depends on how many have pressed start. Unfortunately, -player three and four are stuck inside each other, so you'll have to either -kill one of them, or move them (see Part 2). - - -___________________________________________ - -Loading a level via the solo mission menu's -___________________________________________ - -Loading levels via the solo menu's really only allows you to play solo -missions. You can't load multiplayer setups or multiplayer games via the solo -mission menu's. The solo mission menu's are the one player Solo Mission menu, -Co-operative menu, Counter-operative menu and the Cinema menu. Loading a level -from the Cinema menu allows you to skip the solo mission briefing. - -When you load a level via the solo mission menu's, the game uses 11 different -files. Four of these are the files that build up a level: bgdata, tiles, pads -and solo setup. The game loads the file set at the solo setup value. The -remaining 7 files are the level text and 6 other files that are connected to a -missions solo setup. You can't change these files (with the exception of the -text), so you can only load solo setups in the levels they are meant to be in. -You can't swap levels around so that, to give an example, you change Chicago -into Pelagic II. You can't do this because you can't change Chicago's other -solo mission files. This means that when using the solo mission menu's, you'll -only be able to change the bgdata, tiles and pads. Try and change anything else -and you risk the game freezing. - -000A - bgdata/bg_pete.seg - Background data (Wall and floor images) -017C - bgdata/bg_pete_tilesZ - Collision detection (Contact with the bgdata) -017B - bgdata/bg_pete_padsZ - Pads (preset positions) -013E - UsetuppeteZ - Solo mission setup -06DC - LpeteE - Solo mission text -06DD - LpeteJ - Unknown / unused -06DE - LpeteP - Unknown / unused -06DF - Lpete_str_gZ - Unknown / unused -06E0 - Lpete_str_fZ - Unknown / unused -06E1 - Lpete_str_sZ - Unknown / unused -06E2 - Lpete_str_iZ - Unknown / unused - -Standard Solo Level Modifier: -NTSC PAL -8009DFE9 00XX 8009E589 00XX - - -Example of a solo mission in an arena it's not supposed to be in: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Putting a solo mission in an arena it's not supposed to be in can produce some -really cool solo levels. The process involves putting all the objects and -guards from a solo setup, into a different arena than normal. Not all -combinations work, and not all combinations are easy to get to work. Choosing -which setup to put in which arena defines what kind of level it will be like. -You can load WAR!s setup in almost any arena, giving you a solo mission that -involves respawning enemies and targets you have to kill. Alternatively, you -can load Crash Site's setup into most arenas, giving you a level with lots of -guards walking around. The following example loads Area 51's arena in Crash -Site. Select Crash Site from the solo mission menu to get it working. - -Crash Site in Area 51: -NTSC PAL -8107FE88 001B 810803C8 001B -8107FE8A 0176 810803CA 0176 -8107FE8C 0175 810803CC 0175 - -The first thing you'll notice is the cut-scene. It takes place above the arena. -It does this because the cut-scene is taking place in the exact same place as -the cut-scene normally would in Crash Site's arena. Unfortunately you can't -change this, and you will start at exactly the same coordinates as normal. This -is usually outside the level, meaning that when the game starts, player one -falls to the ground and dies (in the example you fall down and land in the -level). This can be solved by either changing player ones coordinates -temporarily, or by moonjumping. - -Other things you may notice is the sheer amount of objects in odd places, and -that some of the objectives have become unachievable. You will also see that -some of the attributes of the level have been transferred over. What I'm -talking about is like in the example, it's snowing everywhere, and some of the -rooms are shrouded in darkness like the caves from Crash Site. This can either -be for the better or worst. - - -Moonjump codes: -~~~~~~~~~~~~~~~ -In order to get around a level there are two ways. Both involve using -activators, which means having to press a button. The first way is by moving -player ones coordinates. I'll describe how to do this in Part 2. The second way -to get around, or to move player one into a level, is by moonjumping. -Moonjumping is perfect for when you want to test arena and setup combinations, -because you usually start outside the level. Simply press B to move upwards, -while you are falling. You have to find something to fall off, but you can -usually find a "hotspot" that allows you to moonjump from a flat floor. -Switching to controller style 1.1 makes things a lot easier to control. There -are four different moonjump codes. Which one you use is decided by the arena -you are in (with one or two exceptions). Most solo arenas use the first -moonjump code provided, Villa (Solo) and Infiltration differ (Maian SOS differs -too, but I can't remember which moonjump it uses). All multiplayer arenas use -the multiplayer moonjump. You can activate all four moonjump codes at the same -time without any side effects, so the easiest thing to do is just activate them -all. - -Solo only arena Moonjump: -NTSC PAL -D009C7E4 0040 D1099FB0 4000 -81206720 40F2 81202000 40F2 -D009C7E4 0040 D1099FB0 4000 -802066D3 0000 80201FB3 0000 - -Multiplayer arena Moonjump: -NTSC PAL -D009C7E4 0040 D1099FB0 4000 -811BB720 40F2 811B7000 40F2 -D009C7E4 0040 D1099FB0 4000 -801BB6D3 0000 801B6FB3 0000 - -Villa (Solo) Moonjump: -NTSC PAL -D009C7E4 0040 D1099FB0 4000 -811ED720 40F2 811E9000 40F2 -D009C7E4 0040 D1099FB0 4000 -801ED6D3 0000 801E8FB3 0000 - -Infiltration Moonjump: -NTSC PAL -D009C7E4 0040 D1099FB0 4000 -811D4720 40F2 811D0000 40F2 -D009C7E4 0040 D1099FB0 4000 -801D46D3 0000 801CFFB3 0000 - - -The amount of pads in a level: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The amount of pads there is in a level has a lot to do with whether a setup can -be loaded in a different level or not. If the setup is trying to place an -object on a pad that doesn't exist, the game is likely to freeze. To give an -example, Complex has E2 pads and Area 51 has 568. The solo setup for Maian SOS -has lots of objects and guards it puts in 568 different places. Let's say that -the UFO is put at pad number 52E. When you load Maian SOS's setup in Complex -with Complexes pads, the UFO is still put at pad number 52E. Complex only has -E2 pads, pad number 52E doesn't exist! There's about an 80% chance that the -game will freeze. The more objects and guards that are put in pads that don't -exist, the higher this percentage becomes. - -Does this mean that you can't load Maian SOS's setup in Complex? The answer -would be no. The setup for Maian SOS is incompatible with the pads from -Complex, but not with the pads from Area 51. You can load Complex with Area -51's pads, and Maian SOS's setup and it won't freeze. Consequently, none of the -pads from Area 51 are put in the same position as the arena Complex, so the -arena will be empty. - -To make things easier to work out I've compiled the following list: - -Number: Level used in: Total number of pads (in hex): - - 0183 Maian SOS 568 - 018D WAR! 152 - 014F Ravine EF - 018F Escape 568 - 0185 Retaking the Institute 0 - 0155 Crash Site 1DF - 017B Chicago 126 - 0161 G5 Building (Solo) 103 - 017D Complex E2 - 015D G5 Building (MP) D1 - 015F Pelagic II 225 - 0151 Extraction 25F - 016D Temple C0 - 0165 Carrington Institute 28A - 0159 Air Base 1FA - 015B Pipes 105 - 0189 Skedar Ruins 152 - 0169 Villa (Solo) 23A - 016B Defense 28A - 0175 Infiltration 568 - 014B Defection 260 - 017F Air Force One 172 - 0177 Skedar 106 - 0167 Investigation 280 - 016F Attack Ship 1F6 - 0173 Rescue 568 - 0191 Mr. Blonde's Revenge 0 - 0179 Deep Sea 29C - 01DB Duel 28A - 01E3 Base F7 - 01EB Area 52 11D - 01EF Warehouse 190 - 01F3 Car Park 134 - 0203 Ruins BA - 0207 Sewers BA - 020B Felicity F3 - 020F Fortress 202 - 0213 Villa DB - 021B Grid DA - -Some pad files are identical to one another. Infiltration, Rescue, Escape and -Maian SOS all share Area 51's pads. Swapping the pads from Rescue with the ones -from Maian SOS won't change anything. The same goes for Defense, Duel and the -CI Training Ground. Retaking the Institute doesn't have any pads. Most of -Defections pads are different than Extractions pads. Mr. Blondes Revenge uses -Defections pads. - - -Loading solo levels via the Cinema menu: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Some solo levels freeze at the objectives and briefing menu when you try to -load them. Other levels you may want to start after a mid-level cut-scene. This -can be done by loading the level via the Cinema menu. No briefings will be -shown, so the game won't freeze. In order to stop the game from ending the -level the moment you start you need the following code: - -"Happening" Modifier: -NTSC PAL -8009A493 000X 8009A9E3 000X - -The "happening" modifier shows the value 0000 when the game wants something to -happen, and 0001 when it doesn't want anything to happen. Set it at 0000 and -the level won't end when the cut-scene finishes. Set it at 0001 and you can't -activate any of the cut-scenes. - - -Skipping the intro logo's and menu's: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you really can't get past the logo's without the game freezing, or you want -to test levels quickly, there is a way to skip the intro logo's. In truth, you -don't just skip the logo's and menu's, you skip everything else as well! -Loading levels like this is the best way to see if a combination of level files -will work or not, and it's also a lot easier than having to watch all the -logo's, and go through all the menu's before finally getting the chance to test -a level. - -Go straight to a solo mission upon starting the game: -NTSC PAL -8105D9B6 00XX 8105D656 00XX -8009DFE9 00XX 8009E589 00XX -81075582 0000 81075A52 0000 -81074602 0000 81074AAA 0000 -8107459A 0000 81074A42 0000 - -XX stands for a value from the level list. The other codes are menu modifiers -that stop you from selecting anything from the menu's that pop up. The only way -to freeze the game is by pressing B at the objectives menu when you restart. -You should be able to play the level over and over. - - -______________________ - -Other level attributes -______________________ - -The files that build up a level are not the only things that are connected to a -level. A level also has a sky, shadowing, fog, and if it's a solo level, -background music (lights are part of the background data, when loaded in solo). -You can't change these very easily, so if you want to make a level with a -specific sky or fog type, you have to modify that level. If you want to play -solo arenas in multiplayer, you need the shadowing for those levels as well. To -get this you have to modify the levels the solo arenas are originally used in. -Some levels allow you to see farther, and some levels reduce how far you can -see by blacking out walls in the distance. Levels with fog in like Crash Site -allow you to see far into the distance. One thing to note is that when you load -a level in solo mode, any backdrops will appear. What I mean as in backdrop is -the sun from the Carrington Institute, the planet from Attack Ship and the moon -from the dataDyne Building. These backdrops will disappear when you load the -level in multiplayer mode. When you make level mods for lorez you've got to -make sure you modify an already working level, and hope that that levels -shadowing doesn't mess things up. - - -Level Skies: -~~~~~~~~~~~~ -There are different types of level skies. Multiplayer usually has a black sky -with coloured clouds, while solo usually has a nicer looking sky with a -backdrop. Some levels that are large have fog, but it isn't used as much as in -GoldenEye. One level to take note of is BETA level 2B, which has really heavy -fogging and you can’t see farther than a few meters ahead of you. - -Level Codename Level Name Sky Description - -09 sev Maian SOS Area 51 backdrop -14 silo Skedar Red dark cloudy sky -16 stat WAR! Multicoloured sky with three suns -17 arec Ravine Orange dark cloudy sky -18 arch BETA Black sky -19 tra Escape Area 51 backdrop -1A dest BETA Blue sky with white clouds, waterline -1B sevb Retaking the Inst. Blue sky with sun -1C azt Crash Site Red sky with orange clouds and some fog -1D pete Chicago Orange dark cloudy sky -1E depo G5 Building (Solo) Black sky -1F ref Complex Grey dark cloudy sky -20 cryp G5 Building (Mp) Cyan dark cloudy sky -21 dam Pelagic II Blue sky with white clouds and some fog -22 ark Extraction Starlight sky, moon backdrop -23 run BETA Black sky -24 sevx BETA Grey dark cloudy sky -25 jun Temple Blue sky with white clouds -26 dish CI Training Blue sky with sun -27 cave Air Base Dark blue sky with white clouds -28 cat BETA Blue sky -29 crad Pipes Cyan dark cloudy sky -2A sho Skedar Ruins Multicoloured sky with three suns -2B sevx BETA Red dark cloudy sky, heavy fogging -2C eld Villa Blue sky with sun -2D imp Defense Blue sky with sun -2E ash BETA Black sky -2F lue Infiltration Area 51 backdrop -30 ame Defection Starlight sky, moon backdrop -31 rit Air Force One Dark blue sky with white clouds, waterline -32 oat Skedar Red dark cloudy sky -33 ear Investigation Black sky -34 lee Attack Ship Starlight sky, Skedar homeworld planet -35 lip Rescue Area 51 backdrop -36 len BETA Green sky -37 wax Mr.Blondes Revenge Starlight sky, moon backdrop -38 pam Deep Sea Black sky -4D uff BETA Black sky -4E old BETA Starlight sky (Messed up visualisation) -4F ate Duel Blue sky with sun -50 lam BETA Black sky -39 mp1 Base Green dark cloudy sky -3A mp2 BETA Grey dark cloudy sky -3B mp3 Area 52 Cyan dark cloudy sky -3C mp4 Warehouse Grey dark cloudy sky -3D mp5 Car Park Green dark cloudy sky -3E mp6 BETA Black sky -3F mp7 BETA Black sky -40 mp8 BETA Black sky -41 mp9 Ruins Green dark cloudy sky -42 mp10 Sewers Grey dark cloudy sky -43 mp11 Felicity Green dark cloudy sky -44 mp12 Fortress Cyan dark cloudy sky -45 mp13 Villa Blue sky with white clouds -46 mp14 BETA Black sky -47 mp15 Grid Black sky -48 mp16 BETA Black sky -49 mp17 BETA Green dark cloudy sky -4A mp18 BETA Black sky -4B mp19 BETA Black sky -4C mp20 BETA Blue sky with white clouds - -What can the level skies tell us about the BETA levels? Most BETA levels have -black sky, but some have coloured skies, and even a little bit of shadowing and -fog. Some of the level skies look like they've been left over from GoldenEye. -Most notably is level 1A which has a cloudy sky and a waterline. In GoldenEye, -1A is Frigates level. The level 2B is the level that Surface 2 is in, and that -has heavy fog like the one in Perfect Dark has too. It's still hard to tell -which level was meant to be Rooftop, but it can't have been any of the BETA -levels with a black sky. Rooftop must have had a sky to look up at, because -like the name states, it takes place on a rooftop. - - -Background Music: -~~~~~~~~~~~~~~~~~ -Multiplayer allows you to select soundtracks from the soundtrack menu. You can -either select the soundtrack you want from the menu, or use a music modifier to -listen to any of the soundtracks from the entire game: - -Multiplayer Music Modifier: -NTSC PAL -800AA5FB 00XX 800AAB9B 00XX - -Soundtracks: -00 - Random -3A - Dark Combat -3B - Skedar Mystery -3C - The BETA Soundtrack (starts like Deep sea but changes) -3D - CI Operative -3E - dataDyne Action -3F - Maian Tears -40 - Alien Conflict -0D - Carrington Institute -09 - Defection -10 - Defection X -12 - Investigation -13 - Investigation X -02 - Extraction -11 - Extraction X -0C - Villa -27 - Villa X -0E - Chicago -28 - Chicago X -0F - G5 Building -29 - G5 Building X -14 - Infiltration -2A - Infiltration X -16 - Rescue -32 - Rescue X -06 - Escape -33 - Escape X -17 - Air Base -34 - Air Base X -18 - Air Force One -35 - Air Force One X -1D - Crash Site -1E - Crash Site X -1C - Pelagic II -36 - Pelagic II X -07 - Deep Sea -37 - Deep Sea X -04 - Defense -24 - Defense X -1F - Attack Ship (Doesn't work in lorez) -20 - Attack Ship X -21 - Skedar Ruins -38 - Skedar Ruins X -58 - End Credits -03 - Pause Menu -0A - Death music from Solo -1B - Mission Status Unknown -47 - Mission Failed -48 - Combat Simulator Menu -49 - Mission Success -59 - Perfect Menu -64 - The Last Boss music (Doesn't work in lorez) -65 - Training -67 - Combat Simulator Game Complete - -Cut-Scene Music: -0B - Sound effects from Defection intro -22 - Defection intro without sound effects -23 - Defection outro -25 - Investigatin intro -26 - Investigation outro -2D - Extraction intro -2C - Extraction outro -30 - Villa intro version one -43 - Villa intro version two -44 - Villa intro version three -1A - Jumpship sounds from Villa intro -63 - Villa outro -2F - Chicago intro -2B - Chicago outro -2E - G5 Building intro -46 - G5 Building Special -45 - G5 Building outro -31 - Infiltration intro -53 - Infiltration outro -51 - Rescue intro -42 - Rescue outro -41 - Escape intro -50 - Escape Special -55 - Escape outro -76 - Escape outro (Short version) -72 - UFO from Escape outro -4B - Air Base intro -39 - Air Base intro (Last part only) -60 - Air Base outro -4E - Air Force One intro -5B - Air Force One Special -5D - Air Force One outro -4A - Confrontation intro -57 - Confrontation outro -54 - Pelagic II intro -5C - Pelagic II outro -52 - Deep Sea intro -4D - Deep Sea Special -5A - Deep Sea outro -56 - Defense intro -61 - Defense outro -4C - Attack Ship intro -4F - Attack Ship outro -5E - Skedar Ruins intro -62 - Skedar Ruins outro -6C - Joanna using PC cut-scene - -Background Sound Effects from Solo missions: -05 - Experiments from Investigation -08 - Traffic from the dataDyne Building -66 - Wind with strange beats from Crash Site -68 - The sound of the sea from Pelagic II and Villa -69 - Wind from Air Base -6A - Traffic from Chicago and the G5 Building -6D - Frogs and Grasshoppers from Infiltration -6E - Ceten Screams from Deep Sea -6F - Hum from Air Force One -70 - Hum from Attack Ship -71 - Wind from Skedar Ruins and WAR! -73 - Area 51 employee commandments from Rescue -74 - Area 51 employee commandments from Escape and Maian SOS - -Short Sound Effects: -01 - Rareware logo -15 - BETA Combat Simulator death soundtrack -19 - Combat Simulator death -5F - A simple tone (Bloop) -6B - Perfect Dark Logo music -75 - BETA A few plongs which sound like the Mario theme - - -A simple music modifier for solo levels (like the one for multiplayer seen -above) does exist, but it doesn't work as expected. Solo levels have two -soundtracks, a foreground and background soundtrack (in addition to an X -soundtrack). The solo music modifier randomly selects which of the foreground -and background soundtracks to choose from. The result is that you sometimes end -up with two soundtracks playing at the same time. Instead of a code that -modifies the soundtrack played in all solo levels, you need to make codes that -work in single levels. - -The solo level soundtrack list is located at NTSC 80084500 and PAL 80084A50. To -make things easier I've made a table which can be seen below: - - ____________________________________________________________________________ - | NTSC: LV: FG: BG: Xs: PAL: Level name: | - | | - | 80084500 - 0026 000D FFFF 0024 - 80084A50 -> CI Training Ground | - | 80084508 - 0030 0009 0008 0010 - 80084A58 -> Defection | - | 80084510 - 0033 0012 0005 0013 - 80084A60 -> Investigation | - | 80084518 - 0022 0002 0008 0011 - 80084A68 -> Extraction | - | 80084520 - 002C 000C 0068 0027 - 80084A70 -> Carrington Villa | - | 80084528 - 001D 000E 006A 0028 - 80084A78 -> Chicago | - | 80084530 - 001E 000F 006A 0029 - 80084A80 -> G5 Building | - | 80084538 - 002F 0014 006D 002A - 80084A88 -> Infiltration | - | 80084540 - 0035 0016 0073 0032 - 80084A90 -> Rescue | - | 80084548 - 0019 0006 0074 0033 - 80084A98 -> Escape | - | 80084550 - 0027 0017 0069 0034 - 80084AA0 -> Air Base | - | 80084558 - 0031 0018 006F 0035 - 80084AA8 -> Air Force One | - | 80084560 - 001C 001D 0066 001E - 80084AB0 -> Crash Site | - | 80084568 - 0021 001C 0068 0036 - 80084AB8 -> Pelagic II | - | 80084570 - 0038 0007 006E 0037 - 80084AC0 -> Deep Sea | - | 80084578 - 002D 0004 FFFF 0024 - 80084AC8 -> Defense | - | 80084580 - 0034 001F 0070 0020 - 80084AD0 -> Attack Ship | - | 80084588 - 002A 0021 0071 0038 - 80084AD8 -> Skedar Ruins | - | 80084590 - 0037 003A 0008 003A - 80084AE0 -> Mr. Blondes Revenge | - | 80084598 - 0009 003F 0074 003F - 80084AE8 -> Maian SOS | - | 800845A0 - 001B 003D FFFF 003D - 80084AF0 -> Retaking the Institute | - | 800845A8 - 0016 0040 0071 0040 - 80084AF8 -> WAR! | - | 800845B0 - 004F 0058 FFFF 0058 - 80084B00 -> Duel | - | 800845B8 - 005C 0040 FFFF 0040 - 80084B08 -> Scrolling PD Logo | - |__________________________________________________________________________| - -In the first column of values you can see the level number. These numbers are -the same as the ones on the level list and don't need to be changed. The second -row holds the foreground soundtrack modifier (FG), and the third holds the -background soundtrack modifier (BG). The last row is the X soundtrack modifier. - -The foreground soundtrack is the normal soundtrack you listen to. The -background soundtrack is the background effects that you can hear in most -levels. To give an example, it could be wind from levels like Skedar Ruins, or -traffic buzz from levels like Defection and Extraction. The X soundtrack is the -upbeat version of the normal foreground music. It's normally activated some -time during the level (it isn't activated in Investigation, Pelagic II or Crash -Site). - -To make the code of your choice, simply use the table above to assign the -correct values to the correct address. To give an example, if you wanted to -make a code that changes Crash Sites foreground music into Alien Conflict, it -would be: - -NTSC PAL -81084562 0040 81084AB2 0040 - -Changing the soundtrack in a solo level goes a long way to changing the overall -feel of the level, and makes it feel more different than if you just let the -original soundtrack play. - - -_______________________________________________________________________________ - - < Part Two - Modifying the objects in a level > -_______________________________________________________________________________ - - > Modifying objects - ~ NTSC Object modifier codes - ~ PAL Object modifier codes - - > Modifying weapons - ~ NTSC Weapon modifier codes - ~ PAL Weapon modifier codes - ~ Multiplayer ammo codes - - > Modifying costumes - ~ Body image modifier codes - ~ Head image modifier codes - ~ Arm image modifier codes - ~ Gender modifying - ~ Random enemy head modifying - - > Moving players into levels - ~ The real time coordinates list - ~ Finding your current coordinates - ~ Moving a player with activators - ~ The CI Training Ground Disabler - -_________________ - -Modifying objects -_________________ - -When you modify an object using the following codes, you modify all instances -of that object in the game. Wherever it appears in the game it will have been -changed. To give an example, if you were to change the metal crate image into a -UFO, you would get UFO's in Complex and Ravine (which both have metal crates). -These codes only allow you to change an objects image and size. The object -image is modified using the object image values on the global object list. - -Below you will see two lists of codes, one for PAL and one for NTSC. This list -is taken from NTSC 8007B070 and PAL 8007B540, and builds up the in-game object -list (see the resources section). You will find codes that modify an objects -image next to that object, and it's image value from the global object list. To -make an object modification simply find the object you want to change, and the -object you want to change it to. Use the code from the object you want to -change, and the image value of the object you want to change it to (try not to -mix the PAL and NTSC lists up, they look identical). Here's an example: - -Change Shield into BETA Body Armour: -NTSC PAL -8107B810 0564 8107BCE0 0564 - -To modify an objects size, simply add 2 to the image modifier address. Most -objects have either 0199 or 1000 as their object size. - -Make Shield (or the object it has been turned into) Bigger: -NTSC PAL -8107B812 1000 8107BCE2 1000 - -It is also possible to "delete" an object. To delete an object you set it's -image to one that has no collision detection (0100 - Tv Screen), and set it's -size to 0001. You can't see it or touch it, but it's still there. Here's an -example: - -"Delete" Metal Crates (Blue Tint): -NTSC PAL -8107B178 0100 8107B648 0100 -8107B17A 0001 8107B64A 0001 - -This code was used in the Pelagic II in Villa code. It "deletes" most instances -of the metal crates, but where they are put on pads that resize the object you -will see white rectangles. - -Not all objects can be changed. Some object modifications simply freeze the -game for no apparent reason. Most codes work though, it's only the odd ones out -that don't like to work. Also, some codes like to work on a PC but not in a -cheating device, or vice-versa. - -A few object image values can't be found in the object image lists below. These -are BETA ones like the GoldenEye logo: -00D3 - BETA GoldenEye Logo -0761 - BETA GoldenEye Research Tape -0773 - BETA Briefcase - - -NTSC Object modifier codes: -~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Object Object Object -Number Modifier Value Object Name - -0000 - 8107B070 01C6 - Investigation Ceiling dronegun -0001 - 8107B078 01CA - Crash Site Green Drone Gun -0002 - 8107B080 0100 - Tv Screen -0003 - 8107B088 0083 - BETA Borg Crate -0004 - 8107B090 0101 - Pane of glass -0005 - 8107B098 005D - Metal Crate -0006 - 8107B0A0 005D - Metal Crate -0007 - 8107B0A8 005D - Metal Crate -0008 - 8107B0B0 005D - Metal Crate -0009 - 8107B0B8 005D - Metal Crate -000A - 8107B0C0 005D - Metal Crate -000B - 8107B0C8 005D - Metal Crate -000C - 8107B0D0 005D - Metal Crate -000D - 8107B0D8 005D - Metal Crate -000E - 8107B0E0 005D - Metal Crate -000F - 8107B0E8 005D - Metal Crate -0010 - 8107B0F0 0089 - BETA Door -0011 - 8107B0F8 0086 - Briefcase -0012 - 8107B100 0087 - Chicago Tracer bug -0013 - 8107B108 0088 - Data Uplink -0014 - 8107B110 00DD - Nintendo Logo -0015 - 8107B118 00BE - Metal Panel -0016 - 8107B120 00CB - BETA Flag from GoldenEye -0017 - 8107B128 00DC - Area 51 Control Panel / Button -0018 - 8107B130 00BF - BETA GoldenEye Terminal -0019 - 8107B138 0065 - Area 51 Square Door (Top part) -001A - 8107B140 0062 - Area 51 Square Door (Bottom part) -001B - 8107B148 006D - Area 51 Door (Left) -001C - 8107B150 006E - Area 51 Door (Right) -001D - 8107B158 006F - Area 51 Door -001E - 8107B160 0063 - Area 51 Door with glass window -001F - 8107B168 0064 - Area 51 Brown door -0020 - 8107B170 005D - Metal Crate -0021 - 8107B178 005E - Metal Crate (Blue tint) -0022 - 8107B180 005F - Metal Crate (Brown tint) -0023 - 8107B188 0060 - Area 51 Hole-in-wall frame -0024 - 8107B190 006A - Area 51 Wall you blow up (With X on) -0025 - 8107B198 0061 - Area 51 Hole-in-wall frame -0026 - 8107B1A0 006B - Area 51 Wall you blow up (Laboratory side) -0027 - 8107B1A8 006C - Area 51 Hole-in-wall frame (Before blown up) -0028 - 8107B1B0 007B - BETA Villa Door -0029 - 8107B1B8 007C - Villa Wooden door -002A - 8107B1C0 007D - BETA Villa Wooden slide door -002B - 8107B1C8 0067 - Area 51 Hanger lift -002C - 8107B1D0 0066 - Area 51 Small lift from hanger -002D - 8107B1D8 0068 - Area 51 Storage lift 1 -002E - 8107B1E0 0069 - Area 51 Storgae lift 2 -002F - 8107B1E8 0078 - Villa Wine Bottle (Green) -0030 - 8107B1F0 0079 - Villa Wine Bottle (Red) -0031 - 8107B1F8 007A - Villa Wine Bottle (Red, not JUNG brand) -0032 - 8107B200 007E - Villa Windmill propellar -0033 - 8107B208 00D6 - Area 51 Elvis on hoverbed -0034 - 8107B210 00D9 - BETA Multicoloured box -0035 - 8107B218 0082 - Deep Sea Door (Right) -0036 - 8107B220 0081 - Deep Sea Door (Left) -0037 - 8107B228 00A8 - dataDyne Building Lift -0038 - 8107B230 0092 - dataDyne Building Roof fan -0039 - 8107B238 0093 - dataDyne Building Wall fan -003A - 8107B240 00D5 - Hoverbike -003B - 8107B248 00A9 - dataDyne Building Office door -003C - 8107B250 00AA - Pot plant (Rubber plant) -003D - 8107B258 00AC - Pot plant (Spider plant) -003E - 8107B260 00AB - Pot plant (Spike plant) -003F - 8107B268 00B5 - dataDyne Building Window glass -0040 - 8107B270 00AE - dataDyne Building Sofa -0041 - 8107B278 00AD - dataDyne Building Armchair -0042 - 8107B280 00B1 - dataDyne Building Service door -0043 - 8107B288 00B4 - dataDyne Building Grating door -0044 - 8107B290 00A7 - dataDyne Building Lift door -0045 - 8107B298 00B3 - dataDyne Building Vertical blind -0046 - 8107B2A0 0091 - dataDyne Building Desk -0047 - 8107B2A8 008F - dataDyne Building Desk chair -0048 - 8107B2B0 00E0 - Changing N logo -0049 - 8107B2B8 00DE - Changing N logo 2 -004A - 8107B2C0 00DF - Changing N logo 3 -004B - 8107B2C8 00E6 - Perfect Dark Logo -004C - 8107B2D0 00E3 - Perfect Dark Logo 1 -004D - 8107B2D8 00E5 - Perfect Dark Logo 2 -004E - 8107B2E0 00E4 - Perfect Dark Logo 3 -004F - 8107B2E8 00E2 - Perfect Dark Logo 4 -0050 - 8107B2F0 0096 - Hovercop -0051 - 8107B2F8 0098 - Hovermoto -0052 - 8107B300 0099 - Hovertruck -0053 - 8107B308 0095 - Hovercar -0054 - 8107B310 0094 - Hovercab -0055 - 8107B318 008B - dataDyne Building Hole-in-tube unexploded -0056 - 8107B320 008A - dataDyne Building Hole-in-tube frame -0057 - 8107B328 008D - dataDyne Building Hole-in-wall unexploded -0058 - 8107B330 008C - dataDyne Building Hole-in-wall frame -0059 - 8107B338 00E1 - Blue computer -005A - 8107B340 00D7 - Hovercrate -005B - 8107B348 00C8 - Carrington Institute Drop ship (Villa, Defense) -005C - 8107B350 007F - Deep Sea Door from beginning of level -005D - 8107B358 0080 - Deep Sea Lift -005E - 8107B360 0084 - Case -005F - 8107B368 00B2 - dataDyne Building Cassandra's desk -0060 - 8107B370 00DA - Area 51 Pane of glass with yellow/black caution stripes -0061 - 8107B378 00DB - Area 51 Pane of glass with yellow/black caution stripes -0062 - 8107B380 0075 - Area 51 Table -0063 - 8107B388 0071 - BETA Area 51 Chair -0064 - 8107B390 0074 - BETA Area 51 Screen -0065 - 8107B398 0077 - Area 51 Trashcan -0066 - 8107B3A0 0072 - Area 51 Entrance hall desk -0067 - 8107B3A8 0076 - Area 51 Empty hoverbed -0068 - 8107B3B0 0073 - Area 51 Office divider (Peachy coloured) -0069 - 8107B3B8 0070 - Area 51 Bulletin board with Maian pictures -006A - 8107B3C0 00F9 - Skedar Ruins Canyon wall after blowing up rock -006B - 8107B3C8 00FA - Skedar Ruins Canyon rock -006C - 8107B3D0 00FB - Skedar Ruins Hole-in-wall frame -006D - 8107B3D8 00FC - Skedar Ruins Hole-in-wall unexploded -006E - 8107B3E0 00EC - Skedar Ruins Door -006F - 8107B3E8 00F0 - Attack Ship Yellow slide door -0070 - 8107B3F0 00F1 - Attack Ship Holographic star map -0071 - 8107B3F8 00F2 - Attack Ship Holographic star map -0072 - 8107B400 00F3 - Attack Ship Hanger hull door part 1 -0073 - 8107B408 00F4 - Attack Ship Hanger hull door part 2 -0074 - 8107B410 00F5 - Attack Ship Hanger hull door part 3 -0075 - 8107B418 00F6 - Attack Ship Hanger hull door part 4 -0076 - 8107B420 00ED - BETA Skedar fighter ship -0077 - 8107B428 00EB - Secret Skedar Army pod door (Top half) -0078 - 8107B430 00EA - Secret Skedar Army pod door (Bottom half) -0079 - 8107B438 00F7 - Skedar Ruins Spinning power generator pillar -007A - 8107B440 00F8 - Skedar Ruins Rolling round pillar -007B - 8107B448 00EF - Attack Ship Hanger door (Top half) -007C - 8107B450 00EE - Attack Ship Hanger door (Bottom half) -007D - 8107B458 00BA - G5 Building Slide open door with window -007E - 8107B460 00B7 - G5 Building Part of fire door -007F - 8107B468 00B9 - G5 Building Part of fire door -0080 - 8107B470 00B8 - G5 Building Part of fire door (Middle piece) -0081 - 8107B478 00BB - G5 Building Slide open door without window -0082 - 8107B480 0090 - dataDyne Building Slide door -0083 - 8107B488 00AF - dataDyne Building Secret Door 1 -0084 - 8107B490 00B0 - dataDyne Building Secret door 2 -0085 - 8107B498 00B6 - dataDyne Building CI Jumpship -0086 - 8107B4A0 00FD - Chicago Hovertaxi -0087 - 8107B4A8 00E7 - Chicago Intro Police hovercar -0088 - 8107B4B0 00E8 - Ravine Lift -0089 - 8107B4B8 009C - BETA Investigation Door -008A - 8107B4C0 009D - Investigation Secret door -008B - 8107B4C8 009E - Investigation Sector One Door -008C - 8107B4D0 00D4 - Hoverbot (Orange) -008D - 8107B4D8 00FE - Hoverbot (White/blue) -008E - 8107B4E0 00A1 - Investigation Sector Two Slide-down door (Bottom half) -008F - 8107B4E8 00A2 - Investigation Sector Two Slide-up door (Top half) -0090 - 8107B4F0 009B - Investigation Slide-up door with caution sign (Top half) -0091 - 8107B4F8 009F - Investigation Slide-up door with hazardous sign (Top) -0092 - 8107B500 009A - Investigation Door with caution sign and window -0093 - 8107B508 00C0 - Investigation Dr.Caroll Door -0094 - 8107B510 00A4 - Investigation Sector Three Slide-up door (Top half) -0095 - 8107B518 00A3 - Investigation Sector Three Door -0096 - 8107B520 00A5 - Investigation Sector Three Door with window -0097 - 8107B528 0097 - dataDyne Building Extraction Hovercopter -0098 - 8107B530 00A6 - Investigation Sector Four Slide-up door (Top half) -0099 - 8107B538 00A0 - Investigation Slide-up door with restricted sign (Top) -009A - 8107B540 00BC - G5 Building Slide door with dataDyne logo -009B - 8107B548 00BD - G5 Building Slide door with dataDyne logo -009C - 8107B550 00D8 - Laser Beam door / block -009D - 8107B558 00D1 - G5 Building Vault door -009E - 8107B560 00E9 - dataDyne Building Defection Intro Rope -009F - 8107B568 00D0 - G5 Building Mainframe -00A0 - 8107B570 00C1 - Investigation Dr.Caroll Door (Base) -00A1 - 8107B578 00C6 - Investigation Dr.Caroll Door (Main) -00A2 - 8107B580 00C5 - Investigation Dr.Caroll Door (Left) -00A3 - 8107B588 00C7 - Investigation Dr.Caroll Door (Right) -00A4 - 8107B590 00C3 - Investigation Dr.Caroll Door (Base Main) -00A5 - 8107B598 00C2 - Investigation Dr.Caroll Door (Base Left) -00A6 - 8107B5A0 00C4 - Investigation Dr.Caroll Door (Base Right) -00A7 - 8107B5A8 008E - dataDyne Building Rooftop banner -00A8 - 8107B5B0 00CE - G5 Building Upper hole-in-wall unexploded -00A9 - 8107B5B8 00CF - G5 Building Upper hole-in-wall frame -00AA - 8107B5C0 00CC - G5 Building Lower hole-in-wall unexploded -00AB - 8107B5C8 00CD - G5 Building Lower hole-in-wall frame -00AC - 8107B5D0 00C9 - Chicago Dumpster -00AD - 8107B5D8 00D2 - Chicago Unopened fire door -00AE - 8107B5E0 0085 - Chicago Metal shutter -00AF - 8107B5E8 0195 - Security Camera -00B0 - 8107B5F0 0196 - Communications Hub -00B1 - 8107B5F8 0197 - dataDyne Building Rocket Launcher stand -00B2 - 8107B600 0198 - Blue computer terminal -00B3 - 8107B608 01AB - Red grate/panel -00B4 - 8107B610 01AA - Investigation Lift -00B5 - 8107B618 01AC - Light switch -00B6 - 8107B620 01AD - dataDyne Building Extraction Blue blast shield -00B7 - 8107B628 01AE - dataDyne Building Light switch -00B8 - 8107B630 01AF - Investigation Sector Four Door (Top half) -00B9 - 8107B638 01B0 - Investigation Sector Four Door (Bottom half) -00BA - 8107B640 01B4 - Area 51 Explodable container -00BB - 8107B648 01B5 - Investigation Metal chair -00BC - 8107B650 01B6 - Investigation Table -00BD - 8107B658 01B7 - BETA Investigation Microscope -00BE - 8107B660 01B8 - BETA Investigation Mainframe -00BF - 8107B668 01B9 - Investigation Laboratory door -00C0 - 8107B670 01BA - Investigation Slide-up door from laboratory (Top half) -00C1 - 8107B678 01BB - Ammocrate -00C2 - 8107B680 01C3 - Cassandra De Vries Necklace -00C3 - 8107B688 01C7 - Temple Door -00C4 - 8107B690 0233 - Carrington Institute Blue Sofa (With mirror image) -00C5 - 8107B698 0234 - Carrington Institute Lift -00C6 - 8107B6A0 0235 - Carrington Institute Glass door (Lift, Firing Range) -00C7 - 8107B6A8 023E - Laser beam -00C8 - 8107B6B0 023F - Skedar shuttle -00C9 - 8107B6B8 0241 - BETA Villa Pane of glass with wooden frame -00CA - 8107B6C0 0248 - Skedar Ruins Ceiling pillar/stone block -00CB - 8107B6C8 0249 - Skedar Ruins Ceiling pillar/stone block -00CC - 8107B6D0 024A - Skedar Ruins Statue relic from last boss -00CD - 8107B6D8 024B - Skedar Ruins Statue relic from last boss -00CE - 8107B6E0 024C - Skedar Ruins Statue relic from last boss -00CF - 8107B6E8 024D - Skedar Ruins Statue relic from last boss -00D0 - 8107B6F0 024E - Skedar Ruins Statue relic from last boss -00D1 - 8107B6F8 024F - Skedar Ruins Shaded floor piece (Centre part) -00D2 - 8107B700 0250 - Skedar Ruins Shaded floor piece (Middle left part) -00D3 - 8107B708 0251 - Skedar Ruins Shaded floor piece (Middle right part) -00D4 - 8107B710 0252 - Skedar Ruins Shaded floor piece (Base left part) -00D5 - 8107B718 0253 - Skedar Ruins Shaded floor piece (Base right part) -00D6 - 8107B720 0254 - Skedar Ruins Unshaded floor piece (Centre part) -00D7 - 8107B728 0255 - Skedar Ruins Unshaded floor piece (Middle left part) -00D8 - 8107B730 0256 - Skedar Ruins Unshaded floor piece (Middle right part) -00D9 - 8107B738 0257 - Skedar Ruins Unshaded floor piece (Base left part) -00DA - 8107B740 0258 - Skedar Ruins Unshaded floor piece (Base right part) -00DB - 8107B748 025A - Skedar Ruins Pillar 1 -00DC - 8107B750 025B - Skedar Ruins Pillar 2 -00DD - 8107B758 025C - Skedar Ruins Pillar 3 -00DE - 8107B760 025D - Skedar Ruins Shaded floor piece -00DF - 8107B768 025E - Skedar Ruins Shaded wall piece -00E0 - 8107B770 025F - Skedar Ruins Unshaded floor piece -00E1 - 8107B778 0260 - Skedar Ruins Unshaded wall piece -00E2 - 8107B780 0269 - Metal barrel -00E3 - 8107B788 026A - Grid Glass floor -00E4 - 8107B790 026B - Air Base Escalator step -00E5 - 8107B798 026C - Grid Lift -00E6 - 8107B7A0 026D - Skedar Ruins Rubble 1 (Wall) -00E7 - 8107B7A8 026E - Skedar Ruins Rubble 2 (Pillar) -00E8 - 8107B7B0 026F - Skedar Ruins Rubble 3 (Stone) -00E9 - 8107B7B8 0270 - Skedar Ruins Rubble 4 (Small pillar) -00EA - 8107B7C0 033D - Air Base Intro Cable car -00EB - 8107B7C8 033E - Maian UFO -00EC - 8107B7D0 033F - Air Base Stewardesses Bag -00ED - 8107B7D8 0340 - Air Base Small lift leading to hanger -00EE - 8107B7E0 0341 - Air Base Diagonal lift -00EF - 8107B7E8 0342 - Air Base Safe door -00F0 - 8107B7F0 0343 - Air Force One Pilots seat -00F1 - 8107B7F8 0344 - Air Force One Passenger seat -00F2 - 8107B800 00FF - BETA Chicago Limo -00F3 - 8107B808 0346 - Nightvision Goggles -00F4 - 8107B810 0347 - Shield -00F5 - 8107B818 0348 - Falcon 2 -00F6 - 8107B820 0349 - Magsec 4 -00F7 - 8107B828 034A - Mauler -00F8 - 8107B830 034B - DY357 Magnum -00F9 - 8107B838 034C - DY357-LX -00FA - 8107B840 034D - Phoenix -00FB - 8107B848 034E - Falcon 2 Silencer -00FC - 8107B850 034F - Falcon 2 Scope -00FD - 8107B858 0350 - CMP150 -00FE - 8107B860 0351 - AR34 -00FF - 8107B868 0352 - Dragon -0100 - 8107B870 0353 - SuperDragon -0101 - 8107B878 0354 - K7 Avenger -0102 - 8107B880 0355 - Cyclone -0103 - 8107B888 0356 - Callisto NTG -0104 - 8107B890 0357 - RC-P120 -0105 - 8107B898 0358 - Laptop Gun -0106 - 8107B8A0 0359 - Shotgun -0107 - 8107B8A8 035A - Reaper -0108 - 8107B8B0 035B - Rocket Launcher -0109 - 8107B8B8 035C - Devastator -010A - 8107B8C0 035D - Slayer -010B - 8107B8C8 035E - Farsight XR-20 -010C - 8107B8D0 035F - Sniper Rifle -010D - 8107B8D8 0360 - Crossbow -010E - 8107B8E0 0361 - Tranquilizer / Psychosis Gun -010F - 8107B8E8 0362 - Combat Knife -0110 - 8107B8F0 0363 - N-Bomb -0111 - 8107B8F8 0364 - BETA Flashbang (Grenade from GoldenEye) -0112 - 8107B900 0365 - Grenade -0113 - 8107B908 0366 - Timed Mine -0114 - 8107B910 0367 - Proximity Mine -0115 - 8107B918 0368 - Remote Mine -0116 - 8107B920 0369 - ECM Mine -0117 - 8107B928 036A - PP9i (PP7) -0118 - 8107B930 036B - CC13 (DD44) Dostovei. -0119 - 8107B938 036C - KLO1313 (Klobb) -011A - 8107B940 036D - KF7 Special (KF7 Soviet) -011B - 8107B948 036E - ZZT (9mm) (ZMG (9mm)) -011C - 8107B950 036F - DMC (D5K) Deutsche -011D - 8107B958 0370 - AR53 (AR33) Assualt Rifle -011E - 8107B960 0371 - RC-P45 (RC-P90) -011F - 8107B968 0372 - Rocket -0120 - 8107B970 0373 - Slayer Rocket -0121 - 8107B978 0374 - Bolt -0122 - 8107B980 0375 - Devastator Grenade -0123 - 8107B988 0376 - SuperDragon Grenade -0124 - 8107B990 039E - Area 51 Infiltration Brown dronegun -0125 - 8107B998 039F - Pelagic II Door with window -0126 - 8107B9A0 049D - Area 51 AutoSurgeon -0127 - 8107B9A8 04AF - Chicago dataDyne limo -0128 - 8107B9B0 04B1 - Area 51 Interceptor -0129 - 8107B9B8 04B2 - Area 51 Parabola dish -012A - 8107B9C0 04B3 - BETA Area 51 Radar console -012B - 8107B9C8 04B4 - Area 51 Locker door -012C - 8107B9D0 04B5 - BETA G5 Building Dampening field generator -012D - 8107B9D8 04B6 - BETA G5 Building Dumpster -012E - 8107B9E0 04CF - Cloaking device -012F - 8107B9E8 04D0 - Combat boost pills -0130 - 8107B9F0 04E0 - Pelagic II Moon pool hanger door -0131 - 8107B9F8 04E1 - Skedar Ruins piece of pillar rubble -0132 - 8107BA00 04E2 - Skedar Ruins piece of pillar rubble -0133 - 8107BA08 04E3 - Skedar Ruins piece of pillar rubble -0134 - 8107BA10 04E4 - Skedar Ruins piece of pillar rubble -0135 - 8107BA18 04D1 - Air Base Baggage carrier -0136 - 8107BA20 04D2 - BETA Area 51 Mine sign (With skull and crossbones on it) -0137 - 8107BA28 04D3 - Area 51 Maian coffin from cyrolabs -0138 - 8107BA30 04D4 - Investigation Radioactive isotope -0139 - 8107BA38 04D5 - Investigation Radioactive isotope parts -013A - 8107BA40 04D6 - BETA Reactor Door -013B - 8107BA48 04D7 - Crash Site Interior of Maian UFO -013C - 8107BA50 04D8 - Villa Stool that Carrington sits on -013D - 8107BA58 04D9 - Deep Sea Glass 1 -013E - 8107BA60 04DA - Deep Sea Glass 2 (Add-on) -013F - 8107BA68 04DB - Deep Sea Glass 3 (Add-on opposite) -0140 - 8107BA70 04E6 - HorizonScanner -0141 - 8107BA78 04E7 - Pelagic II Outro Moon pool submarine -0142 - 8107BA80 04E8 - Air Force One (The actual plane) -0143 - 8107BA88 04E9 - Attack Ship Engine part -0144 - 8107BA90 04F1 - Deep Sea Ceiling dronegun -0145 - 8107BA98 04F2 - BETA Deep Sea Small door -0146 - 8107BAA0 04F3 - Deep Sea Switch node (Shoot it to open doors) -0147 - 8107BAA8 04F4 - BETA Deep Sea Door (Left) -0148 - 8107BAB0 04F5 - BETA Deep Sea Door (Right) -0149 - 8107BAB8 04F6 - Attack Ship Computer terminal from the bridge -014A - 8107BAC0 04F7 - Attack Ship Computer terminal panel from the bridge -014B - 8107BAC8 04FF - Blue grating panel -014C - 8107BAD0 0500 - Carrington Institute Firing Range Target board -014D - 8107BAD8 0501 - Carrington Institute Device lab secret door -014E - 8107BAE0 0502 - Carrington Institute Carrington's office secret door -014F - 8107BAE8 0503 - Investigation dataDyne PC -0150 - 8107BAF0 0504 - Area 51 Records terminal (dataDyne PC on stand) -0151 - 8107BAF8 0505 - BETA Keypad lock -0152 - 8107BB00 0506 - BETA Fingerprint scanner -0153 - 8107BB08 0507 - BETA Retina lock -0154 - 8107BB10 0508 - BETA Card lock -0155 - 8107BB18 0509 - Air Force One Button on stand -0156 - 8107BB20 050A - Carrington Institute / Villa PC -0157 - 8107BB28 0512 - Laptop Sentry dronegun -0158 - 8107BB30 0513 - G5 Building Special Big chair -0159 - 8107BB38 0514 - G5 Building Special Small chair -015A - 8107BB40 0515 - Skedar Kings holy sceptre (Big King Rocket image) -015B - 8107BB48 0516 - Area 51 Lab cloths -015C - 8107BB50 0525 - BETA Carrington Institute Door -015D - 8107BB58 0526 - G5 Building Special Chair -015E - 8107BB60 0527 - G5 Building Special Small chair with top missing -015F - 8107BB68 0528 - dataDyne Building Foyer pane of glass -0160 - 8107BB70 053C - BETA Carrington Institute Cabinet -0161 - 8107BB78 053D - BETA Carrington Institute Desk -0162 - 8107BB80 053E - BETA Carrington Institute Desk 2 -0163 - 8107BB88 053F - BETA Carrington Institute Leather Armchair -0164 - 8107BB90 0540 - BETA Carrington Institute Leather Bed -0165 - 8107BB98 0541 - BETA Carrington Institute Leather Sofa -0166 - 8107BBA0 0542 - BETA Carrington Institute Table -0167 - 8107BBA8 0543 - Villa Coffee table -0168 - 8107BBB0 0544 - Villa Chair -0169 - 8107BBB8 0545 - BETA Villa Armchair -016A - 8107BBC0 0546 - Villa Sofa -016B - 8107BBC8 0547 - Villa Chair 2 -016C - 8107BBD0 0548 - BETA Villa Cabinet with lamp -016D - 8107BBD8 0549 - Villa Side cabinet -016E - 8107BBE0 054A - Villa Double bed -016F - 8107BBE8 054B - BETA Pelagic II Chair -0170 - 8107BBF0 054C - Attack Ship Computer console -0171 - 8107BBF8 054D - BETA Investigation Table -0172 - 8107BC00 054E - BETA Investigation Chair -0173 - 8107BC08 054F - Air Base Table -0174 - 8107BC10 0550 - BETA Air Base Chair -0175 - 8107BC18 0551 - BETA White Box -0176 - 8107BC20 005D - Metal Crate -0177 - 8107BC28 0552 - IR scanner googles -0178 - 8107BC30 0555 - Area 51 Wall Dronegun -0179 - 8107BC38 0556 - BETA Skedar Dronegun -017A - 8107BC40 0557 - Carrington Institute Dronegun -017B - 8107BC48 0558 - Villa Wooden table -017C - 8107BC50 055C - dataDyne Building Door -017D - 8107BC58 055D - BETA Air Base Door -017E - 8107BC60 055E - BETA Air Base Door 2 -017F - 8107BC68 055F - Chicago Wire fence -0180 - 8107BC70 0560 - Rareware logo -0181 - 8107BC78 0563 - Keycard -0182 - 8107BC80 0564 - BETA Body armour (Looks like the one from GoldenEye) -0183 - 8107BC88 0565 - Area 51 Infiltration Inner area big slide door (Right) -0184 - 8107BC90 0566 - Area 51 Infiltration Inner area big slide door (Left) -0185 - 8107BC98 0567 - Air Force One Lamp -0186 - 8107BCA0 0568 - Air Force One Toilet -0187 - 8107BCA8 0569 - Air Force One Big door -0188 - 8107BCB0 056A - Air Force One Phone -0189 - 8107BCB8 056B - BETA Air Force One Cargo door -018A - 8107BCC0 056C - G5 Building Alarm -018B - 8107BCC8 056D - G5 Building Laser switch -018C - 8107BCD0 056E - Skedar Ruins Pillar 4 -018D - 8107BCD8 056F - Pelagic II Power core hatch -018E - 8107BCE0 074C - Area 51 Grate / Pane of glass with white stripes -018F - 8107BCE8 0750 - Air Force One Escape door -0190 - 8107BCF0 0751 - Presidential Escape Pod -0191 - 8107BCF8 0752 - Skedar Ruins Bridge -0192 - 8107BD00 0753 - Pelagic II Door with no window -0193 - 8107BD08 0756 - BETA Touch That Box, Box -0194 - 8107BD10 0757 - Carrington Institute Front door -0195 - 8107BD18 075B - Laser -0196 - 8107BD20 075C - G5 Building BAFTA Award -0197 - 8107BD28 075D - Area 51 Rescue Outro Surgeons dissection laser -0198 - 8107BD30 075E - Crash Site Outro Elvis's hammer (Small size) -0199 - 8107BD38 0760 - Area 51 Infiltration Explosives -019A - 8107BD40 075F - dataDyne Building Mr. Blonde's Revenge Skedar bomb -019B - 8107BD48 0762 - Dr. Caroll's Backup disk -019C - 8107BD50 0763 - Air Base Flight plans -019D - 8107BD58 076F - R-Tracker -019E - 8107BD60 0770 - X-ray Scanner -019F - 8107BD68 075E - Crash Site Outro Elvis's hammer (Big size) -01A0 - 8107BD70 0771 - Camspy, Drugspy, Bombspy -01A1 - 8107BD78 0772 - Door Decoder -01A2 - 8107BD80 0765 - Air Force One Table -01A3 - 8107BD88 0775 - Air Base Air Force Ones private loader door -01A4 - 8107BD90 0776 - Skedar Ruins Backdrop -01A5 - 8107BD98 0777 - Carrington Institute Secret Device training door -01A6 - 8107BDA0 076E - Carrington Institute Defense Sensitive information -01A7 - 8107BDA8 0774 - BETA Suitcase -01A8 - 8107BDB0 0778 - Skedar Ruins Push-block to activate bridge -01A9 - 8107BDB8 0779 - Area 51 Lift bars/door -01AA - 8107BDC0 0797 - Carrington Institute Switch -01AB - 8107BDC8 0798 - Attack Ship Blue door -01AC - 8107BDD0 0799 - Attack Ship Window -01AD - 8107BDD8 079A - Attack Ship Hanger door (Top half) -01AE - 8107BDE0 079B - Attack Ship Hanger door (Bottom half) -01AF - 8107BDE8 079C - Air Force One Inner door -01B0 - 8107BDF0 079D - BETA Laser post -01B1 - 8107BDF8 07B2 - Skedar Ruins Target Amplifier -01B2 - 8107BE00 07B3 - Attack Ship Lift -01B3 - 8107BE08 07B4 - Carrington Institute Defense Smashed front door -01B4 - 8107BE10 07B5 - Deep Sea Slide-up door -01B5 - 8107BE18 07BB - Air Force One Drop vent rubble -01B6 - 8107BE20 07BC - dataDyne Building Small door / Felicity Door -01B7 - 8107BE28 07C7 - Deep Sea Slide door -01B8 - 8107BE30 07CC - Skedar Ruins Buddy Bridge - - -PAL Object modifier codes: -~~~~~~~~~~~~~~~~~~~~~~~~~~ -Object Object Object -Number Modifier Value Object Name - -0000 - 8107B540 01C6 - Investigation Ceiling dronegun -0001 - 8107B548 01CA - Crash Site Green Drone Gun -0002 - 8107B550 0100 - Tv Screen -0003 - 8107B558 0083 - BETA Borg Crate -0004 - 8107B560 0101 - Pane of glass -0005 - 8107B568 005D - Metal Crate -0006 - 8107B570 005D - Metal Crate -0007 - 8107B578 005D - Metal Crate -0008 - 8107B580 005D - Metal Crate -0009 - 8107B588 005D - Metal Crate -000A - 8107B590 005D - Metal Crate -000B - 8107B598 005D - Metal Crate -000C - 8107B5A0 005D - Metal Crate -000D - 8107B5A8 005D - Metal Crate -000E - 8107B5B0 005D - Metal Crate -000F - 8107B5B8 005D - Metal Crate -0010 - 8107B5C0 0089 - BETA Door -0011 - 8107B5C8 0086 - Briefcase -0012 - 8107B5D0 0087 - Chicago Tracer bug -0013 - 8107B5D8 0088 - Data Uplink -0014 - 8107B5E0 00DD - Nintendo Logo -0015 - 8107B5E8 00BE - Metal Panel -0016 - 8107B5F0 00CB - BETA Flag from GoldenEye -0017 - 8107B5F8 00DC - Area 51 Control Panel / Button -0018 - 8107B600 00BF - BETA GoldenEye Terminal -0019 - 8107B608 0065 - Area 51 Square Door (Top part) -001A - 8107B610 0062 - Area 51 Square Door (Bottom part) -001B - 8107B618 006D - Area 51 Door (Left) -001C - 8107B620 006E - Area 51 Door (Right) -001D - 8107B628 006F - Area 51 Door -001E - 8107B630 0063 - Area 51 Door with glass window -001F - 8107B638 0064 - Area 51 Brown door -0020 - 8107B640 005D - Metal Crate -0021 - 8107B648 005E - Metal Crate (Blue tint) -0022 - 8107B650 005F - Metal Crate (Brown tint) -0023 - 8107B658 0060 - Area 51 Hole-in-wall frame -0024 - 8107B660 006A - Area 51 Wall you blow up (With X on) -0025 - 8107B668 0061 - Area 51 Hole-in-wall frame -0026 - 8107B670 006B - Area 51 Wall you blow up (Laboratory side) -0027 - 8107B678 006C - Area 51 Hole-in-wall frame (Before blown up) -0028 - 8107B680 007B - BETA Villa Door -0029 - 8107B688 007C - Villa Wooden door -002A - 8107B690 007D - BETA Villa Wooden slide door -002B - 8107B698 0067 - Area 51 Hanger lift -002C - 8107B6A0 0066 - Area 51 Small lift from hanger -002D - 8107B6A8 0068 - Area 51 Storage lift 1 -002E - 8107B6B0 0069 - Area 51 Storgae lift 2 -002F - 8107B6B8 0078 - Villa Wine Bottle (Green) -0030 - 8107B6C0 0079 - Villa Wine Bottle (Red) -0031 - 8107B6C8 007A - Villa Wine Bottle (Red, not JUNG brand) -0032 - 8107B6D0 007E - Villa Windmill propellar -0033 - 8107B6D8 00D6 - Area 51 Elvis on hoverbed -0034 - 8107B6E0 00D9 - BETA Multicoloured box -0035 - 8107B6E8 0082 - Deep Sea Door (Right) -0036 - 8107B6F0 0081 - Deep Sea Door (Left) -0037 - 8107B6F8 00A8 - dataDyne Building Lift -0038 - 8107B700 0092 - dataDyne Building Roof fan -0039 - 8107B708 0093 - dataDyne Building Wall fan -003A - 8107B710 00D5 - Hoverbike -003B - 8107B718 00A9 - dataDyne Building Office door -003C - 8107B720 00AA - Pot plant (Rubber plant) -003D - 8107B728 00AC - Pot plant (Spider plant) -003E - 8107B730 00AB - Pot plant (Spike plant) -003F - 8107B738 00B5 - dataDyne Building Window glass -0040 - 8107B740 00AE - dataDyne Building Sofa -0041 - 8107B748 00AD - dataDyne Building Armchair -0042 - 8107B750 00B1 - dataDyne Building Service door -0043 - 8107B758 00B4 - dataDyne Building Grating door -0044 - 8107B760 00A7 - dataDyne Building Lift door -0045 - 8107B768 00B3 - dataDyne Building Vertical blind -0046 - 8107B770 0091 - dataDyne Building Desk -0047 - 8107B778 008F - dataDyne Building Desk chair -0048 - 8107B780 00E0 - Changing N logo -0049 - 8107B788 00DE - Changing N logo 2 -004A - 8107B790 00DF - Changing N logo 3 -004B - 8107B798 00E6 - Perfect Dark Logo -004C - 8107B7A0 00E3 - Perfect Dark Logo 1 -004D - 8107B7A8 00E5 - Perfect Dark Logo 2 -004E - 8107B7B0 00E4 - Perfect Dark Logo 3 -004F - 8107B7B8 00E2 - Perfect Dark Logo 4 -0050 - 8107B7C0 0096 - Hovercop -0051 - 8107B7C8 0098 - Hovermoto -0052 - 8107B7D0 0099 - Hovertruck -0053 - 8107B7D8 0095 - Hovercar -0054 - 8107B7E0 0094 - Hovercab -0055 - 8107B7E8 008B - dataDyne Building Hole-in-tube unexploded -0056 - 8107B7F0 008A - dataDyne Building Hole-in-tube frame -0057 - 8107B7F8 008D - dataDyne Building Hole-in-wall unexploded -0058 - 8107B800 008C - dataDyne Building Hole-in-wall frame -0059 - 8107B808 00E1 - Blue computer -005A - 8107B810 00D7 - Hovercrate -005B - 8107B818 00C8 - Carrington Institute Drop ship (Villa, Defense) -005C - 8107B820 007F - Deep Sea Door from beginning of level -005D - 8107B828 0080 - Deep Sea Lift -005E - 8107B830 0084 - Case -005F - 8107B838 00B2 - dataDyne Building Cassandra's desk -0060 - 8107B840 00DA - Area 51 Pane of glass with yellow/black caution stripes -0061 - 8107B848 00DB - Area 51 Pane of glass with yellow/black caution stripes -0062 - 8107B850 0075 - Area 51 Table -0063 - 8107B858 0071 - BETA Area 51 Chair -0064 - 8107B860 0074 - BETA Area 51 Screen -0065 - 8107B868 0077 - Area 51 Trashcan -0066 - 8107B870 0072 - Area 51 Entrance hall desk -0067 - 8107B878 0076 - Area 51 Empty hoverbed -0068 - 8107B880 0073 - Area 51 Office divider (Peachy coloured) -0069 - 8107B888 0070 - Area 51 Bulletin board with Maian pictures -006A - 8107B890 00F9 - Skedar Ruins Canyon wall after blowing up rock -006B - 8107B898 00FA - Skedar Ruins Canyon rock -006C - 8107B8A0 00FB - Skedar Ruins Hole-in-wall frame -006D - 8107B8A8 00FC - Skedar Ruins Hole-in-wall unexploded -006E - 8107B8B0 00EC - Skedar Ruins Door -006F - 8107B8B8 00F0 - Attack Ship Yellow slide door -0070 - 8107B8C0 00F1 - Attack Ship Holographic star map -0071 - 8107B8C8 00F2 - Attack Ship Holographic star map -0072 - 8107B8D0 00F3 - Attack Ship Hanger hull door part 1 -0073 - 8107B8D8 00F4 - Attack Ship Hanger hull door part 2 -0074 - 8107B8E0 00F5 - Attack Ship Hanger hull door part 3 -0075 - 8107B8E8 00F6 - Attack Ship Hanger hull door part 4 -0076 - 8107B8F0 00ED - BETA Skedar fighter ship -0077 - 8107B8F8 00EB - Secret Skedar Army pod door (Top half) -0078 - 8107B900 00EA - Secret Skedar Army pod door (Bottom half) -0079 - 8107B908 00F7 - Skedar Ruins Spinning power generator pillar -007A - 8107B910 00F8 - Skedar Ruins Rolling round pillar -007B - 8107B918 00EF - Attack Ship Hanger door (Top half) -007C - 8107B920 00EE - Attack Ship Hanger door (Bottom half) -007D - 8107B928 00BA - G5 Building Slide open door with window -007E - 8107B930 00B7 - G5 Building Part of fire door -007F - 8107B938 00B9 - G5 Building Part of fire door -0080 - 8107B940 00B8 - G5 Building Part of fire door (Middle piece) -0081 - 8107B948 00BB - G5 Building Slide open door without window -0082 - 8107B950 0090 - dataDyne Building Slide door -0083 - 8107B958 00AF - dataDyne Building Secret Door 1 -0084 - 8107B960 00B0 - dataDyne Building Secret door 2 -0085 - 8107B968 00B6 - dataDyne Building CI Jumpship -0086 - 8107B970 00FD - Chicago Hovertaxi -0087 - 8107B978 00E7 - Chicago Intro Police hovercar -0088 - 8107B980 00E8 - Ravine Lift -0089 - 8107B988 009C - BETA Investigation Door -008A - 8107B990 009D - Investigation Secret door -008B - 8107B998 009E - Investigation Sector One Door -008C - 8107B9A0 00D4 - Hoverbot (Orange) -008D - 8107B9A8 00FE - Hoverbot (White/blue) -008E - 8107B9B0 00A1 - Investigation Sector Two Slide-down door (Bottom half) -008F - 8107B9B8 00A2 - Investigation Sector Two Slide-up door (Top half) -0090 - 8107B9C0 009B - Investigation Slide-up door with caution sign (Top half) -0091 - 8107B9C8 009F - Investigation Slide-up door with hazardous sign (Top) -0092 - 8107B9D0 009A - Investigation Door with caution sign and window -0093 - 8107B9D8 00C0 - Investigation Dr.Caroll Door -0094 - 8107B9E0 00A4 - Investigation Sector Three Slide-up door (Top half) -0095 - 8107B9E8 00A3 - Investigation Sector Three Door -0096 - 8107B9F0 00A5 - Investigation Sector Three Door with window -0097 - 8107B9F8 0097 - dataDyne Building Extraction Hovercopter -0098 - 8107BA00 00A6 - Investigation Sector Four Slide-up door (Top half) -0099 - 8107BA08 00A0 - Investigation Slide-up door with restricted sign (Top) -009A - 8107BA10 00BC - G5 Building Slide door with dataDyne logo -009B - 8107BA18 00BD - G5 Building Slide door with dataDyne logo -009C - 8107BA20 00D8 - Laser Beam door / block -009D - 8107BA28 00D1 - G5 Building Vault door -009E - 8107BA30 00E9 - dataDyne Building Defection Intro Rope -009F - 8107BA38 00D0 - G5 Building Mainframe -00A0 - 8107BA40 00C1 - Investigation Dr.Caroll Door (Base) -00A1 - 8107BA48 00C6 - Investigation Dr.Caroll Door (Main) -00A2 - 8107BA50 00C5 - Investigation Dr.Caroll Door (Left) -00A3 - 8107BA58 00C7 - Investigation Dr.Caroll Door (Right) -00A4 - 8107BA60 00C3 - Investigation Dr.Caroll Door (Base Main) -00A5 - 8107BA68 00C2 - Investigation Dr.Caroll Door (Base Left) -00A6 - 8107BA70 00C4 - Investigation Dr.Caroll Door (Base Right) -00A7 - 8107BA78 008E - dataDyne Building Rooftop banner -00A8 - 8107BA80 00CE - G5 Building Upper hole-in-wall unexploded -00A9 - 8107BA88 00CF - G5 Building Upper hole-in-wall frame -00AA - 8107BA90 00CC - G5 Building Lower hole-in-wall unexploded -00AB - 8107BA98 00CD - G5 Building Lower hole-in-wall frame -00AC - 8107BAA0 00C9 - Chicago Dumpster -00AD - 8107BAA8 00D2 - Chicago Unopened fire door -00AE - 8107BAB0 0085 - Chicago Metal shutter -00AF - 8107BAB8 0195 - Security Camera -00B0 - 8107BAC0 0196 - Communications Hub -00B1 - 8107BAC8 0197 - dataDyne Building Rocket Launcher stand -00B2 - 8107BAD0 0198 - Blue computer terminal -00B3 - 8107BAD8 01AB - Red grate/panel -00B4 - 8107BAE0 01AA - Investigation Lift -00B5 - 8107BAE8 01AC - Light switch -00B6 - 8107BAF0 01AD - dataDyne Building Extraction Blue blast shield -00B7 - 8107BAF8 01AE - dataDyne Building Light switch -00B8 - 8107BB00 01AF - Investigation Sector Four Door (Top half) -00B9 - 8107BB08 01B0 - Investigation Sector Four Door (Bottom half) -00BA - 8107BB10 01B4 - Area 51 Explodable container -00BB - 8107BB18 01B5 - Investigation Metal chair -00BC - 8107BB20 01B6 - Investigation Table -00BD - 8107BB28 01B7 - BETA Investigation Microscope -00BE - 8107BB30 01B8 - BETA Investigation Mainframe -00BF - 8107BB38 01B9 - Investigation Laboratory door -00C0 - 8107BB40 01BA - Investigation Slide-up door from laboratory (Top half) -00C1 - 8107BB48 01BB - Ammocrate -00C2 - 8107BB50 01C3 - Cassandra De Vries Necklace -00C3 - 8107BB58 01C7 - Temple Door -00C4 - 8107BB60 0233 - Carrington Institute Blue Sofa (With mirror image) -00C5 - 8107BB68 0234 - Carrington Institute Lift -00C6 - 8107BB70 0235 - Carrington Institute Glass door (Lift, Firing Range) -00C7 - 8107BB78 023E - Laser beam -00C8 - 8107BB80 023F - Skedar shuttle -00C9 - 8107BB88 0241 - BETA Villa Pane of glass with wooden frame -00CA - 8107BB90 0248 - Skedar Ruins Ceiling pillar/stone block -00CB - 8107BB98 0249 - Skedar Ruins Ceiling pillar/stone block -00CC - 8107BBA0 024A - Skedar Ruins Statue relic from last boss -00CD - 8107BBA8 024B - Skedar Ruins Statue relic from last boss -00CE - 8107BBB0 024C - Skedar Ruins Statue relic from last boss -00CF - 8107BBB8 024D - Skedar Ruins Statue relic from last boss -00D0 - 8107BBC0 024E - Skedar Ruins Statue relic from last boss -00D1 - 8107BBC8 024F - Skedar Ruins Shaded floor piece (Centre part) -00D2 - 8107BBD0 0250 - Skedar Ruins Shaded floor piece (Middle left part) -00D3 - 8107BBD8 0251 - Skedar Ruins Shaded floor piece (Middle right part) -00D4 - 8107BBE0 0252 - Skedar Ruins Shaded floor piece (Base left part) -00D5 - 8107BBE8 0253 - Skedar Ruins Shaded floor piece (Base right part) -00D6 - 8107BBF0 0254 - Skedar Ruins Unshaded floor piece (Centre part) -00D7 - 8107BBF8 0255 - Skedar Ruins Unshaded floor piece (Middle left part) -00D8 - 8107BC00 0256 - Skedar Ruins Unshaded floor piece (Middle right part) -00D9 - 8107BC08 0257 - Skedar Ruins Unshaded floor piece (Base left part) -00DA - 8107BC10 0258 - Skedar Ruins Unshaded floor piece (Base right part) -00DB - 8107BC18 025A - Skedar Ruins Pillar 1 -00DC - 8107BC20 025B - Skedar Ruins Pillar 2 -00DD - 8107BC28 025C - Skedar Ruins Pillar 3 -00DE - 8107BC30 025D - Skedar Ruins Shaded floor piece -00DF - 8107BC38 025E - Skedar Ruins Shaded wall piece -00E0 - 8107BC40 025F - Skedar Ruins Unshaded floor piece -00E1 - 8107BC48 0260 - Skedar Ruins Unshaded wall piece -00E2 - 8107BC50 0269 - Metal barrel -00E3 - 8107BC58 026A - Grid Glass floor -00E4 - 8107BC60 026B - Air Base Escalator step -00E5 - 8107BC68 026C - Grid Lift -00E6 - 8107BC70 026D - Skedar Ruins Rubble 1 (Wall) -00E7 - 8107BC78 026E - Skedar Ruins Rubble 2 (Pillar) -00E8 - 8107BC80 026F - Skedar Ruins Rubble 3 (Stone) -00E9 - 8107BC88 0270 - Skedar Ruins Rubble 4 (Small pillar) -00EA - 8107BC90 033D - Air Base Intro Cable car -00EB - 8107BC98 033E - Maian UFO -00EC - 8107BCA0 033F - Air Base Stewardesses Bag -00ED - 8107BCA8 0340 - Air Base Small lift leading to hanger -00EE - 8107BCB0 0341 - Air Base Diagonal lift -00EF - 8107BCB8 0342 - Air Base Safe door -00F0 - 8107BCC0 0343 - Air Force One Pilots seat -00F1 - 8107BCC8 0344 - Air Force One Passenger seat -00F2 - 8107BCD0 00FF - BETA Chicago Limo -00F3 - 8107BCD8 0346 - Nightvision Goggles -00F4 - 8107BCE0 0347 - Shield -00F5 - 8107BCE8 0348 - Falcon 2 -00F6 - 8107BCF0 0349 - Magsec 4 -00F7 - 8107BCF8 034A - Mauler -00F8 - 8107BD00 034B - DY357 Magnum -00F9 - 8107BD08 034C - DY357-LX -00FA - 8107BD10 034D - Phoenix -00FB - 8107BD18 034E - Falcon 2 Silencer -00FC - 8107BD20 034F - Falcon 2 Scope -00FD - 8107BD28 0350 - CMP150 -00FE - 8107BD30 0351 - AR34 -00FF - 8107BD38 0352 - Dragon -0100 - 8107BD40 0353 - SuperDragon -0101 - 8107BD48 0354 - K7 Avenger -0102 - 8107BD50 0355 - Cyclone -0103 - 8107BD58 0356 - Callisto NTG -0104 - 8107BD60 0357 - RC-P120 -0105 - 8107BD68 0358 - Laptop Gun -0106 - 8107BD70 0359 - Shotgun -0107 - 8107BD78 035A - Reaper -0108 - 8107BD80 035B - Rocket Launcher -0109 - 8107BD88 035C - Devastator -010A - 8107BD90 035D - Slayer -010B - 8107BD98 035E - Farsight XR-20 -010C - 8107BDA0 035F - Sniper Rifle -010D - 8107BDA8 0360 - Crossbow -010E - 8107BDB0 0361 - Tranquilizer / Psychosis Gun -010F - 8107BDB8 0362 - Combat Knife -0110 - 8107BDC0 0363 - N-Bomb -0111 - 8107BDC8 0364 - BETA Flashbang (Grenade from GoldenEye) -0112 - 8107BDD0 0365 - Grenade -0113 - 8107BDD8 0366 - Timed Mine -0114 - 8107BDE0 0367 - Proximity Mine -0115 - 8107BDE8 0368 - Remote Mine -0116 - 8107BDF0 0369 - ECM Mine -0117 - 8107BDF8 036A - PP9i (PP7) -0118 - 8107BE00 036B - CC13 (DD44) Dostovei. -0119 - 8107BE08 036C - KLO1313 (Klobb) -011A - 8107BE10 036D - KF7 Special (KF7 Soviet) -011B - 8107BE18 036E - ZZT (9mm) (ZMG (9mm)) -011C - 8107BE20 036F - DMC (D5K) Deutsche -011D - 8107BE28 0370 - AR53 (AR33) Assualt Rifle -011E - 8107BE30 0371 - RC-P45 (RC-P90) -011F - 8107BE38 0372 - Rocket -0120 - 8107BE40 0373 - Slayer Rocket -0121 - 8107BE48 0374 - Bolt -0122 - 8107BE50 0375 - Devastator Grenade -0123 - 8107BE58 0376 - SuperDragon Grenade -0124 - 8107BE60 039E - Area 51 Infiltration Brown dronegun -0125 - 8107BE68 039F - Pelagic II Door with window -0126 - 8107BE70 049D - Area 51 AutoSurgeon -0127 - 8107BE78 04AF - Chicago dataDyne limo -0128 - 8107BE80 04B1 - Area 51 Interceptor -0129 - 8107BE88 04B2 - Area 51 Parabola dish -012A - 8107BE90 04B3 - BETA Area 51 Radar console -012B - 8107BE98 04B4 - Area 51 Locker door -012C - 8107BEA0 04B5 - BETA G5 Building Dampening field generator -012D - 8107BEA8 04B6 - BETA G5 Building Dumpster -012E - 8107BEB0 04CF - Cloaking device -012F - 8107BEB8 04D0 - Combat boost pills -0130 - 8107BEC0 04E0 - Pelagic II Moon pool hanger door -0131 - 8107BEC8 04E1 - Skedar Ruins piece of pillar rubble -0132 - 8107BED0 04E2 - Skedar Ruins piece of pillar rubble -0133 - 8107BED8 04E3 - Skedar Ruins piece of pillar rubble -0134 - 8107BEE0 04E4 - Skedar Ruins piece of pillar rubble -0135 - 8107BEE8 04D1 - Air Base Baggage carrier -0136 - 8107BEF0 04D2 - BETA Area 51 Mine sign (With skull and crossbones on it) -0137 - 8107BEF8 04D3 - Area 51 Maian coffin from cyrolabs -0138 - 8107BF00 04D4 - Investigation Radioactive isotope -0139 - 8107BF08 04D5 - Investigation Radioactive isotope parts -013A - 8107BF10 04D6 - BETA Reactor Door -013B - 8107BF18 04D7 - Crash Site Interior of Maian UFO -013C - 8107BF20 04D8 - Villa Stool that Carrington sits on -013D - 8107BF28 04D9 - Deep Sea Glass 1 -013E - 8107BF30 04DA - Deep Sea Glass 2 (Add-on) -013F - 8107BF38 04DB - Deep Sea Glass 3 (Add-on opposite) -0140 - 8107BF40 04E6 - HorizonScanner -0141 - 8107BF48 04E7 - Pelagic II Outro Moon pool submarine -0142 - 8107BF50 04E8 - Air Force One (The actual plane) -0143 - 8107BF58 04E9 - Attack Ship Engine part -0144 - 8107BF60 04F1 - Deep Sea Ceiling dronegun -0145 - 8107BF68 04F2 - BETA Deep Sea Small door -0146 - 8107BF70 04F3 - Deep Sea Switch node (Shoot it to open doors) -0147 - 8107BF78 04F4 - BETA Deep Sea Door (Left) -0148 - 8107BF80 04F5 - BETA Deep Sea Door (Right) -0149 - 8107BF88 04F6 - Attack Ship Computer terminal from the bridge -014A - 8107BF90 04F7 - Attack Ship Computer terminal panel from the bridge -014B - 8107BF98 04FF - Blue grating panel -014C - 8107BFA0 0500 - Carrington Institute Firing Range Target board -014D - 8107BFA8 0501 - Carrington Institute Device lab secret door -014E - 8107BFB0 0502 - Carrington Institute Carrington's office secret door -014F - 8107BFB8 0503 - Investigation dataDyne PC -0150 - 8107BFC0 0504 - Area 51 Records terminal (dataDyne PC on stand) -0151 - 8107BFC8 0505 - BETA Keypad lock -0152 - 8107BFD0 0506 - BETA Fingerprint scanner -0153 - 8107BFD8 0507 - BETA Retina lock -0154 - 8107BFE0 0508 - BETA Card lock -0155 - 8107BFE8 0509 - Air Force One Button on stand -0156 - 8107BFF0 050A - Carrington Institute / Villa PC -0157 - 8107BFF8 0512 - Laptop Sentry dronegun -0158 - 8107C000 0513 - G5 Building Special Big chair -0159 - 8107C008 0514 - G5 Building Special Small chair -015A - 8107C010 0515 - Skedar Kings holy sceptre (Big King Rocket image) -015B - 8107C018 0516 - Area 51 Lab cloths -015C - 8107C020 0525 - BETA Carrington Institute Door -015D - 8107C028 0526 - G5 Building Special Chair -015E - 8107C030 0527 - G5 Building Special Small chair with top missing -015F - 8107C038 0528 - dataDyne Building Foyer pane of glass -0160 - 8107C040 053C - BETA Carrington Institute Cabinet -0161 - 8107C048 053D - BETA Carrington Institute Desk -0162 - 8107C050 053E - BETA Carrington Institute Desk 2 -0163 - 8107C058 053F - BETA Carrington Institute Leather Armchair -0164 - 8107C060 0540 - BETA Carrington Institute Leather Bed -0165 - 8107C068 0541 - BETA Carrington Institute Leather Sofa -0166 - 8107C070 0542 - BETA Carrington Institute Table -0167 - 8107C078 0543 - Villa Coffee table -0168 - 8107C080 0544 - Villa Chair -0169 - 8107C088 0545 - BETA Villa Armchair -016A - 8107C090 0546 - Villa Sofa -016B - 8107C098 0547 - Villa Chair 2 -016C - 8107C0A0 0548 - BETA Villa Cabinet with lamp -016D - 8107C0A8 0549 - Villa Side cabinet -016E - 8107C0B0 054A - Villa Double bed -016F - 8107C0B8 054B - BETA Pelagic II Chair -0170 - 8107C0C0 054C - Attack Ship Computer console -0171 - 8107C0C8 054D - BETA Investigation Table -0172 - 8107C0D0 054E - BETA Investigation Chair -0173 - 8107C0D8 054F - Air Base Table -0174 - 8107C0E0 0550 - BETA Air Base Chair -0175 - 8107C0E8 0551 - BETA White Box -0176 - 8107C0F0 005D - Metal Crate -0177 - 8107C0F8 0552 - IR scanner googles -0178 - 8107C100 0555 - Area 51 Wall Dronegun -0179 - 8107C108 0556 - BETA Skedar Dronegun -017A - 8107C110 0557 - Carrington Institute Dronegun -017B - 8107C118 0558 - Villa Wooden table -017C - 8107C120 055C - dataDyne Building Door -017D - 8107C128 055D - BETA Air Base Door -017E - 8107C130 055E - BETA Air Base Door 2 -017F - 8107C138 055F - Chicago Wire fence -0180 - 8107C140 0560 - Rareware logo -0181 - 8107C148 0563 - Keycard -0182 - 8107C150 0564 - BETA Body armour (Looks like the one from GoldenEye) -0183 - 8107C158 0565 - Area 51 Infiltration Inner area big slide door (Right) -0184 - 8107C160 0566 - Area 51 Infiltration Inner area big slide door (Left) -0185 - 8107C168 0567 - Air Force One Lamp -0186 - 8107C170 0568 - Air Force One Toilet -0187 - 8107C178 0569 - Air Force One Big door -0188 - 8107C180 056A - Air Force One Phone -0189 - 8107C188 056B - BETA Air Force One Cargo door -018A - 8107C190 056C - G5 Building Alarm -018B - 8107C198 056D - G5 Building Laser switch -018C - 8107C1A0 056E - Skedar Ruins Pillar 4 -018D - 8107C1A8 056F - Pelagic II Power core hatch -018E - 8107C1B0 074C - Area 51 Grate / Pane of glass with white stripes -018F - 8107C1B8 0750 - Air Force One Escape door -0190 - 8107C1C0 0751 - Presidential Escape Pod -0191 - 8107C1C8 0752 - Skedar Ruins Bridge -0192 - 8107C1D0 0753 - Pelagic II Door with no window -0193 - 8107C1D8 0756 - BETA Touch That Box, Box -0194 - 8107C1E0 0757 - Carrington Institute Front door -0195 - 8107C1E8 075B - Laser -0196 - 8107C1F0 075C - G5 Building BAFTA Award -0197 - 8107C1F8 075D - Area 51 Rescue Outro Surgeons dissection laser -0198 - 8107C200 075E - Crash Site Outro Elvis's hammer (Small size) -0199 - 8107C208 0760 - Area 51 Infiltration Explosives -019A - 8107C210 075F - dataDyne Building Mr. Blonde's Revenge Skedar bomb -019B - 8107C218 0762 - Dr. Caroll's Backup disk -019C - 8107C220 0763 - Air Base Flight plans -019D - 8107C228 076F - R-Tracker -019E - 8107C230 0770 - X-ray Scanner -019F - 8107C238 075E - Crash Site Outro Elvis's hammer (Big size) -01A0 - 8107C240 0771 - Camspy, Drugspy, Bombspy -01A1 - 8107C248 0772 - Door Decoder -01A2 - 8107C250 0765 - Air Force One Table -01A3 - 8107C258 0775 - Air Base Air Force Ones private loader door -01A4 - 8107C260 0776 - Skedar Ruins Backdrop -01A5 - 8107C268 0777 - Carrington Institute Secret Device training door -01A6 - 8107C270 076E - Carrington Institute Defense Sensitive information -01A7 - 8107C278 0774 - BETA Suitcase -01A8 - 8107C280 0778 - Skedar Ruins Push-block to activate bridge -01A9 - 8107C288 0779 - Area 51 Lift bars/door -01AA - 8107C290 0797 - Carrington Institute Switch -01AB - 8107C298 0798 - Attack Ship Blue door -01AC - 8107C2A0 0799 - Attack Ship Window -01AD - 8107C2A8 079A - Attack Ship Hanger door (Top half) -01AE - 8107C2B0 079B - Attack Ship Hanger door (Bottom half) -01AF - 8107C2B8 079C - Air Force One Inner door -01B0 - 8107C2C0 079D - BETA Laser post -01B1 - 8107C2C8 07B2 - Skedar Ruins Target Amplifier -01B2 - 8107C2D0 07B3 - Attack Ship Lift -01B3 - 8107C2D8 07B4 - Carrington Institute Defense Smashed front door -01B4 - 8107C2E0 07B5 - Deep Sea Slide-up door -01B5 - 8107C2E8 07BB - Air Force One Drop vent rubble -01B6 - 8107C2F0 07BC - dataDyne Building Small door / Felicity Door -01B7 - 8107C2F8 07C7 - Deep Sea Slide door -01B8 - 8107C300 07CC - Skedar Ruins Buddy Bridge - - -_________________ - -Modifying weapons -_________________ - -Just like with objects, it's possible to modify all instances of a weapon. This -is done by changing a weapons type and image. The image modification is done -using the object image modifiers above. The weapons remains modified in all -areas of the game, so if you had a code that replaced the Falcon 2 Silencer -with a PP9i (PP7), you would start Defection with a PP9i (PP7). You would also -get a PP9i (PP7) instead of a Falcon 2 Silencer in multiplayer. Here's an -example: - -Change CMP150 into ZZT (9mm) (ZMG (9mm)): -NTSC PAL -8106FF42 EB40 810702D2 EED0 -8107B858 036E 8107BD28 036E - -This code is used in Pelagic II in Villa. All the guards in the level use -ZZT (9mm) (ZMG (9mm)) instead of CMP150. One thing to note is that when you aim -you won't see the GoldenEye cursor, but Perfect Darks one instead. - -These codes don't fully change a weapon. What's not changed is the zoom, method -of aiming, bullet power, accuracy and sometimes the sound. The PAL version of -the code doesn't change the text (in the above example, when you pick up a -ZZT (9mm) (ZMG (9mm)) for the first time the game say's "Picked up a CMP150"). - -To give an example of the kind of errors you might get I'll refer to when you -change the Farsight into an AR53. The AR53 will act just like it should do, but -when you aim you will have x-ray vision! The bullets will also shoot through -the walls, which makes this particular AR53 very lethal indeed. Unfortunately -you can't zoom in or "follow lock on" to enemies. An example of a sound error -can be found when you change the Reaper into a KLO1313 (Klobb). When you fire -you'll hear the familiar Reaper spinning, but you will also hear the KLO1313 -(Klobb) shooting. The KLO1313 (Klobb) will be as inaccurate as the Reaper. - -These errors can be easily avoided be changing weapons that have the same -attributes, like AR34 and AR53, or RCP-120 and RC-P45 (RC-P90). These errors -won't effect how enemies use a gun, but the weapon bullet power will remain the -same as the old gun they used to wield. It won't give the codes to fix the -errors mentioned here because there's already an FAQ on gamefaqs.com which -deals with weapon modifying. - -There are four BETA weapons in the game. The first two are the Tester, which -looks like a grenade and fires like a pistol, and the Big King Rocket, which -looks like a rocket launcher and fires strange useless rockets. The other two -are the AR27-BETA and the SMG27-BETA. These weapons have no image and can only -be used once you've picked up a double pair. The easiest place to do this is in -multiplayer, by putting them in weapon slots 1 to 4. Once you have a double -pair of the weapon you can press A to bring it up. Both weapons have a 27 -bullet capasity, and use the image of the last held weapon (in the case of none -it uses hands). The AR27-BETA is an assault rifle that sounds like the AR34. -The SMG27-BETA is a sub-machine gun that makes this wierd machine-like sound -when you fire it. - -A code for GoldenEye weapons in multiplayer can be found in the Extra Codes -section in the Outro part of this FAQ. - -The NTSC and PAL version of these codes vary slightly, so they each have their -own description of how to get the codes working. The weapon number is the -number that's used in-game to refer to a weapon. It's the same for both NTSC -and PAL - - -NTSC Weapon modifier codes: -~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Find the weapon you want to change on the list below, and find the weapon you -want to change it to. Use the codes from the weapon you want to change, and -the values from the weapon you want to change it into. - - Weapon Weapon -Weapon Type Type Image Image -Number Modifier Value Modifier Value Weapon Name - - 00 - 8106FF1A B1E4 - Body dependant - Unarmed - 01 - 8106FF1E B35C - No Image - Nothing - 02 - 8106FF22 B728 - 8107B818 0348 - Falcon 2 - 03 - 8106FF26 B7C8 - 8107B848 034E - Falcon 2 (Silencer) - 04 - 8106FF2A B778 - 8107B850 034F - Falcon 2 (Scope) - 05 - 8106FF2E BA04 - 8107B820 0349 - Magsec 4 - 06 - 8106FF32 C160 - 8107B828 034A - Mauler - 07 - 8106FF36 BF34 - 8107B840 034D - Phoenix - 08 - 8106FF3A BD3C - 8107B830 034B - DY357 Magnum - 09 - 8106FF3E BD8C - 8107B838 034C - DY357-LX - 0A - 8106FF42 C3C4 - 8107B858 0350 - CMP150 - 0B - 8106FF46 C570 - 8107B880 0355 - Cyclone - 0C - 8106FF4A C848 - 8107B888 0356 - Callisto NTG - 0D - 8106FF4E C6D4 - 8107B890 0357 - RC-P120 - 0E - 8106FF52 D16C - 8107B898 0358 - Laptop Gun - 0F - 8106FF56 C998 - 8107B868 0352 - Dragon - 10 - 8106FF5A CF58 - 8107B878 0354 - K7 Avenger - 11 - 8106FF5E CD80 - 8107B860 0351 - AR34 - 12 - 8106FF62 CBD0 - 8107B870 0353 - SuperDragon - 13 - 8106FF66 D2EC - 8107B8A0 0359 - Shotgun - 14 - 8106FF6A D4F0 - 8107B8A8 035A - Reaper - 15 - 8106FF6E E684 - 8107B8D0 035F - Sniper Rifle - 16 - 8106FF72 E090 - 8107B8C8 035E - Farsight XR-20 - 17 - 8106FF76 D9F4 - 8107B8B8 035C - Devastator - 18 - 8106FF7A D6CC - 8107B8B0 035B - Rocket Launcher - 19 - 8106FF7E D840 - 8107B8C0 035D - Slayer - 1A - 8106FF82 F110 - 8107B8E8 0362 - Combat Knife - 1B - 8106FF86 E2A4 - 8107B8D8 0360 - Crossbow - 1C - 8106FF8A E47C - 8107B8E0 0361 - Tranquilizer - 1D - 8106FF8E E788 - 8107BD18 075B - Laser - 1E - 8106FF92 DE88 - 8107B900 0365 - Grenade - 1F - 8106FF96 DF34 - 8107B8F0 0363 - N-Bomb - 20 - 8106FF9A DAD0 - 8107B908 0366 - Timed Mine - 21 - 8106FF9E DC78 - 8107B910 0367 - Proximity Mine - 22 - 8106FFA2 DBF0 - 8107B918 0368 - Remote Mine - 23 - 8106FFA6 F468 - 8107B9E8 04D0 - Combat Boost - 24 - 8106FFAA E85C - 8107B928 036A - PP9i (PP7) - 25 - 8106FFAE E918 - 8107B930 036B - CC13 (DD44) Dostovei. - 26 - 8106FFB2 E9D0 - 8107B938 036C - KLO1313 (Klobb) - 27 - 8106FFB6 EA88 - 8107B940 036D - KF7 Special (KF7 Soviet) - 28 - 8106FFBA EB40 - 8107B948 036E - ZZT (9mm) (ZMG (9mm)) - 29 - 8106FFBE EBF8 - 8107B950 036F - DMC (D5K) Deutsche - 2A - 8106FFC2 ECB0 - 8107B958 0370 - AR53 (AR33) Assualt Rifle - 2B - 8106FFC6 ED68 - 8107B960 0371 - RC-P45 (RC-P90) - 2C - 8106FFCA E520 - 8107B8E0 0361 - Pyschosis Gun - 2D - 8106FFCE F2C4 - 8107B808 0346 - Nightvision Goggles - 2E - 8106FFD2 F654 - 8107BD70 0771 - Camspy - 2F - 8106FFD6 F724 - 8107BD60 0770 - X-ray Scanner - 30 - 8106FFDA F538 - 8107BC28 0552 - IR-Scanner - 31 - 8106FFDE F3C4 - 8107B9E0 04CF - Cloaking Device - 32 - 8106FFE2 F348 - 8107BA70 04E6 - Horizon Scanner - 33 - 8106FFE6 FEC8 - 8107B900 0365 - Tester - 34 - 8106FFEA FE14 - 8107BB40 0515 - Big King Rocket - 35 - 8106FFEE DD38 - 8107B920 0369 - ECM Mine - 36 - 8106FFF2 F7C4 - 8107B108 0088 - Data Uplink - 37 - 8106FFF6 F6BC - 8107BD58 076F - R-Tracker - 38 - 8106FFFA FA7C - 8107BD58 076F - President Scanner - 39 - 8106FFFE F814 - 8107BD78 0772 - Door Decoder - 3A - 81070002 FACC - 8107B9A0 049D - AutoSurgeon - 3B - 81070006 FA14 - 8107BD38 0760 - Explosives - 3C - 8107000A F9C4 - 8107BD40 075F - Skedar Bomb - 3D - 8107000E F1BC - 8107B100 0087 - Comms Rider - 3E - 81070012 F20C - 8107B100 0087 - Tracer Bug - 3F - 81070016 F25C - 8107BB48 0516 - Disguise - 40 - 8107001A F59C - 8107BDF8 07B2 - Target Amplifier - 41 - 8107001E F5EC - 8107B7D0 033F - Disguise - 42 - 81070022 FB1C - 8107BD50 0763 - Flight Plans - 43 - 81070026 FB6C - 8107BD48 0762 - Research Tape - 44 - 8107002A FBBC - 8107BD48 0762 - Backup Disk - 45 - 8107002E FD4C - 8107BC78 0563 - Key Card - 46 - 81070032 FD4C - 8107BC78 0563 - Key Card - 47 - 81070036 FD4C - 8107BC78 0563 - Key Card - 48 - 8107003A FD4C - 8107BC78 0563 - Key Card - 49 - 8107003E FD4C - 8107BC78 0563 - Key Card - 4A - 81070042 FD4C - 8107BC78 0563 - Key Card - 4B - 81070046 FD4C - 8107BC78 0563 - Key Card - 4C - 8107004A FD4C - 8107BC78 0563 - Key Card - 4D - 8107004E FC5C - 8107B360 0084 - Suitcase - 4E - 81070052 FC0C - 8107B0F8 0086 - Briefcase - 4F - 81070056 FCFC - 8107B810 0347 - Solo Shield - 50 - 8107005A FCAC - 8107B680 01C3 - Necklace - 51 - 8107005E B194 - No Image - Nothing - 52 - 81070062 B194 - No Image - Nothing - 53 - 81070066 F864 - 8107B968 0372 - Rocket - 54 - 8107006A F8B4 - 8107B968 0372 - Homing Rocket - 55 - 8107006E F904 - 8107B980 0375 - Grenade Round - 56 - 81070072 F954 - 8107B978 0374 - Bolt - 57 - 81070076 EDE0 - 8107B0F8 0086 - The Breifcase (From Multiplayer) - 58 - 8107007A F864 - 8107B970 0373 - Slayer Rocket - 59 - 8107007E EE98 - No Image - AR27-BETA - 5A - 81070082 EF50 - No Image - SMG27-BETA - 5B - 81070086 B194 - 8107B810 0347 - Multiplayer Shield - 5C - 8107008A B194 - No Image - Multiplayer Disabled - 5D - 8107008E F4D0 - 8107B9E8 04D0 - Suicide pill - - -PAL Weapon modifier codes: -~~~~~~~~~~~~~~~~~~~~~~~~~~ -The PAL versions are slightly more complicated in the fact that you sometimes -need to add an extra code to change the value 8006 or 8007. To change the -weapon type, find the weapon you want to change and the weapon you want to -change it to. Use the codes from the weapon you want to change and the values -from the weapon you want to change it to. If the type value A is the same for -both weapons you don't need to use part A of the code. If type value A is -different (I.E one is 8006 and one is 8007) then you need to use part A and B. - -You also need to modify the weapon image, which can be done using the second -list. Use the code from the weapon image you want to change, and the value for -the weapon image you want to change it to. - -PAL Weapon type modifiers: --------------------------- - Weapon -Weapon Type Modifier Type Values -Number Part A Part B A B Weapon Name - - 00 - 810702A8 810702AA 8006-B574 - Unarmed - 01 - 810702AC 810702AE 8006-B6EC - Nothing - 02 - 810702B0 810702B2 8006-BAB8 - Falcon 2 - 03 - 810702B4 810702B6 8006-BB58 - Falcon 2 (Silencer) - 04 - 810702B8 810702BA 8006-BB08 - Falcon 2 (Scope) - 05 - 810702BC 810702BE 8006-BD94 - Magsec 4 - 06 - 810702C0 810702C2 8006-C4F0 - Mauler - 07 - 810702C4 810702C6 8006-C2C4 - Phoenix - 08 - 810702C8 810702CA 8006-C0CC - DY357 Magnum - 09 - 810702CC 810702CE 8006-C11C - DY357-LX - 0A - 810702D0 810702D2 8006-C754 - CMP150 - 0B - 810702D4 810702D6 8006-C900 - Cyclone - 0C - 810702D8 810702DA 8006-CBD8 - Callisto NTG - 0D - 810702DC 810702DE 8006-CA64 - RC-P120 - 0E - 810702E0 810702E2 8006-D4FC - Laptop Gun - 0F - 810702E4 810702E6 8006-CD28 - Dragon - 10 - 810702E8 810702EA 8006-D2E8 - K7 Avenger - 11 - 810702EC 810702EE 8006-D110 - AR34 - 12 - 810702F0 810702F2 8006-CF60 - SuperDragon - 13 - 810702F4 810702F6 8006-D67C - Shotgun - 14 - 810702F8 810702FA 8006-D880 - Reaper - 15 - 810702FC 810702FE 8006-EA14 - Sniper Rifle - 16 - 81070300 81070302 8006-E420 - Farsight XR-20 - 17 - 81070304 81070306 8006-DD84 - Devestator - 18 - 81070308 8107030A 8006-DA5C - Rocket Launcher - 19 - 8107030C 8107030E 8006-DBD0 - Slayer - 1A - 81070310 81070312 8006-F4A0 - Combat Knife - 1B - 81070314 81070316 8006-E634 - Crossbow - 1C - 81070318 8107031A 8006-E80C - Tranquilizer - 1D - 8107031C 8107031E 8006-EB18 - Laser - 1E - 81070320 81070322 8006-E218 - Grenade - 1F - 81070324 81070326 8006-E2C4 - N-Bomb - 20 - 81070328 8107032A 8006-DE60 - Timed Mine - 21 - 8107032C 8107032E 8006-E008 - Proximity Mine - 22 - 81070330 81070332 8006-DF80 - Remote Mine - 23 - 81070334 81070336 8006-F7F8 - Combat Boost - 24 - 81070338 8107033A 8006-EBEC - PP9i (PP7) - 25 - 8107033C 8107033E 8006-ECA8 - CC13 (DD44) Dostovei. - 26 - 81070340 81070342 8006-ED60 - KLO1313 (Klobb) - 27 - 81070344 81070346 8006-EE18 - KF7 Special (KF7 Soviet) - 28 - 81070348 8107034A 8006-EED0 - ZZT (9mm) (ZMG (9mm)) - 29 - 8107034C 8107034E 8006-EF88 - DMC (D5K) Deutsche - 2A - 81070350 81070352 8006-F040 - AR53 (AR33) Assualt Rifle - 2B - 81070354 81070356 8006-F0F8 - RC-P45 (RC-P90) - 2C - 81070358 8107035A 8006-E8B0 - Pyschosis Gun - 2D - 8107035C 8107035E 8006-F654 - Nightvision Goggles - 2E - 81070360 81070362 8006-F9E4 - Camspy - 2F - 81070364 81070366 8006-FAB4 - X-ray Scanner - 30 - 81070368 8107036A 8006-F8C8 - IR-Scanner - 31 - 8107036C 8107036E 8006-F754 - Cloaking Device - 32 - 81070370 81070372 8006-F6D8 - Horizon Scanner - 33 - 81070374 81070376 8007-0258 - Tester - 34 - 81070378 8107037A 8007-01A4 - Big King Rocket - 35 - 8107037C 8107037E 8006-E0C8 - ECM Mine - 36 - 81070380 81070382 8006-FB54 - Data Uplink - 37 - 81070384 81070386 8006-FA4C - R-Tracker - 38 - 81070388 8107038A 8006-FE0C - President Scanner - 39 - 8107038C 8107038E 8006-FBA4 - Door Decoder - 3A - 81070390 81070392 8006-FE5C - AutoSurgeon - 3B - 81070394 81070396 8006-FDA4 - Explosives - 3C - 81070398 8107039A 8006-FD54 - Skedar Bomb - 3D - 8107039C 8107039E 8006-F54C - Comms Rider - 3E - 810703A0 810703A2 8006-F59C - Tracer Bug - 3F - 810703A4 810703A6 8006-F5EC - Disguise - 40 - 810703A8 810703AA 8006-F92C - Target Amplifier - 41 - 810703AC 810703AE 8006-F97C - Disguise - 42 - 810703B0 810703B2 8006-FEAC - Flight Plans - 43 - 810703B4 810703B6 8006-FEFC - Research Tape - 44 - 810703B8 810703BA 8006-FF4C - Backup Disk - 45 - 810703BC 810703BE 8007-00DC - Key Card - 46 - 810703C0 810703C2 8007-00DC - Key Card - 47 - 810703C4 810703C6 8007-00DC - Key Card - 48 - 810703C8 810703CA 8007-00DC - Key Card - 49 - 810703CC 810703CE 8007-00DC - Key Card - 4A - 810703D0 810703D2 8007-00DC - Key Card - 4B - 810703D4 810703D6 8007-00DC - Key Card - 4C - 810703D8 810703DA 8007-00DC - Key Card - 4D - 810703DC 810703DE 8006-FFEC - Suitcase - 4E - 810703E0 810703E2 8006-FF9C - Briefcase - 4F - 810703E4 810703E6 8007-008C - Solo Shield - 50 - 810703E8 810703EA 8007-003C - Necklace - 51 - 810703EC 810703EE 8006-B524 - Nothing - 52 - 810703F0 810703F2 8006-B524 - Nothing - 53 - 810703F4 810703F6 8006-FBF4 - Rocket - 54 - 810703F8 810703FA 8006-FC44 - Homing Rocket - 55 - 810703FC 810703FE 8006-FC94 - Grenade Round - 56 - 81070400 81070402 8006-FCE4 - Bolt - 57 - 81070404 81070406 8006-F170 - The Breifcase (From Multiplayer) - 58 - 81070408 8107040A 8006-FBF4 - Slayer Rocket - 59 - 8107040C 8107040E 8006-F228 - AR27-BETA - 5A - 81070410 81070412 8006-F2E0 - SMG27-BETA - 5B - 81070414 81070416 8006-B524 - Multiplayer Shield - 5C - 81070418 8107041A 8006-B524 - Multiplayer Disabled - 5D - 8107041C 8107041E 8006-F860 - Suicide pill - -PAL Weapon image modifiers: ---------------------------- - Weapon -Weapon Image Image -Number Modifier Values Weapon Name - - 00 - Body dependant - Unarmed - 01 - No Image - Nothing - 02 - 8107BCE8 0348 - Falcon 2 - 03 - 8107BD18 034E - Falcon 2 (Silencer) - 04 - 8107BD20 034F - Falcon 2 (Scope) - 05 - 8107BCF0 0349 - Magsec 4 - 06 - 8107BCF8 034A - Mauler - 07 - 8107BD10 034D - Phoenix - 08 - 8107BD00 034B - DY357 Magnum - 09 - 8107BD08 034C - DY357-LX - 0A - 8107BD28 0350 - CMP150 - 0B - 8107BD50 0355 - Cyclone - 0C - 8107BD58 0356 - Callisto NTG - 0D - 8107BD60 0357 - RC-P120 - 0E - 8107BD68 0358 - Laptop Gun - 0F - 8107BD38 0352 - Dragon - 10 - 8107BD48 0354 - K7 Avenger - 11 - 8107BD30 0351 - AR34 - 12 - 8107BD40 0353 - SuperDragon - 13 - 8107BD70 0359 - Shotgun - 14 - 8107BD78 035A - Reaper - 15 - 8107BDA0 035F - Sniper Rifle - 16 - 8107BD98 035E - Farsight XR-20 - 17 - 8107BD88 035C - Devestator - 18 - 8107BD80 035B - Rocket Launcher - 19 - 8107BD90 035D - Slayer - 1A - 8107BDB8 0362 - Combat Knife - 1B - 8107BDA8 0360 - Crossbow - 1C - 8107BDB0 0361 - Tranquilizer - 1D - 8107C1E8 075B - Laser - 1E - 8107BDD0 0365 - Grenade - 1F - 8107BDC0 0363 - N-Bomb - 20 - 8107BDD8 0366 - Timed Mine - 21 - 8107BDE0 0367 - Proximity Mine - 22 - 8107BDE8 0368 - Remote Mine - 23 - 8107BEB8 04D0 - Combat Boost - 24 - 8107BDF8 036A - PP9i (PP7) - 25 - 8107BE00 036B - CC13 (DD44) Dostovei. - 26 - 8107BE08 036C - KLO1313 (Klobb) - 27 - 8107BE10 036D - KF7 Special (KF7 Soviet) - 28 - 8107BE18 036E - ZZT (9mm) (ZMG (9mm)) - 29 - 8107BE20 036F - DMC (D5K) Deutsche - 2A - 8107BE28 0370 - AR53 (AR33) Assualt Rifle - 2B - 8107BE30 0371 - RC-P45 (RC-P90) - 2C - 8107BDB0 0361 - Pyschosis Gun - 2D - 8107BCD8 0346 - Night Vision Goggles - 2E - 8107C240 0771 - Camspy - 2F - 8107C230 0770 - X-ray Scanner - 30 - 8107C0F8 0552 - IR-Scanner - 31 - 8107BEB0 04CF - Cloaking Device - 32 - 8107BF40 04E6 - Horizon Scanner - 33 - 8107BDD0 0365 - Tester - 34 - 8107C010 0515 - Big King Rocket - 35 - 8107BDF0 0369 - ECM Mine - 36 - 8107B5D8 0088 - Data Uplink - 37 - 8107C228 076F - R-Tracker - 38 - 8107C228 076F - President Scanner - 39 - 8107C248 0772 - Door Decoder - 3A - 8107BE70 049D - AutoSurgeon - 3B - 8107C208 0760 - Explosives - 3C - 8107C210 075F - Skedar Bomb - 3D - 8107B5D0 0087 - Comms Rider - 3E - 8107B5D0 0087 - Tracer Bug - 3F - 8107C018 0516 - Disguise - 40 - 8107C2C8 07B2 - Target Amplifier - 41 - 8107BCA0 033F - Disguise - 42 - 8107C220 0763 - Flight Plans - 43 - 8107C218 0762 - Research Tape - 44 - 8107C218 0762 - Backup Disk - 45 - 8107C148 0563 - Key Card - 46 - 8107C148 0563 - Key Card - 47 - 8107C148 0563 - Key Card - 48 - 8107C148 0563 - Key Card - 49 - 8107C148 0563 - Key Card - 4A - 8107C148 0563 - Key Card - 4B - 8107C148 0563 - Key Card - 4C - 8107C148 0563 - Key Card - 4D - 8107B830 0084 - Suitcase - 4E - 8107B5C8 0086 - Briefcase - 4F - 8107BCE0 0347 - Solo Shield - 50 - 8107BB50 01C3 - Necklace - 51 - No Image - Nothing - 52 - No Image - Nothing - 53 - 8107BE38 0372 - Rocket - 54 - 8107BE38 0372 - Homing Rocket - 55 - 8107BE50 0375 - Grenade Round - 56 - 8107BE48 0374 - Bolt - 57 - 8107B5C8 0086 - The Breifcase (From Multiplayer) - 58 - 8107BE40 0373 - Slayer Rocket - 59 - No Image - AR27-BETA - 5A - No Image - SMG27-BETA - 5B - 8107BCE0 0347 - Multiplayer Shield - 5C - No Image - Multiplayer Disabled - 5D - 8107BEB8 04D0 - Suicide pill - - -Multiplayer ammo codes: -~~~~~~~~~~~~~~~~~~~~~~~ -In order to get your modified weapons working properly in multiplayer you may -have to change the ammo that they use. If you were to change the Falcon 2 into -an AR53 (AR33), you would end up with the AR53 (AR33) as the weapon to pick up, -and two ammo crates full of pistol ammo! The ammo type needs to be changed, and -the amount of ammo needs to be raised so that you get more ammo for the AR53 -(AR33). Here's an example: - -Change ammo type and amount for the Falcon 2: -NTSC PAL -80087273 0004 800877C3 0004 -80087274 0096 800877C4 0096 - -This code changes the ammo type to 0004 (assualt rifle ammo), and the ammo -amount to 0096 (150 bullets). - -NTSC / PAL Multiplayer Ammo type modifiers: -------------------------------------------- -NTSC Ammo PAL Ammo Ammo -Modifier Modifier Type Weapon / Item name - -80087273 800877C3 0001 Falcon 2 -8008727D 800877CD 0001 Falcon 2 (Silencer) -80087287 800877D7 0001 Falcon 2 (Scope) -80087291 800877E1 0001 Magsec 4 -8008729B 800877EB 0001 Mauler -800872A5 800877F5 0001 Phoenix -800872AF 800877FF 000A DY357 Magnum -800872B9 80087809 000A DY357-LX -800872C3 80087813 0002 CMP150 -800872CD 8008781D 0002 Cyclone -800872D7 80087827 0002 Callisto NTG -800872E1 80087831 0002 RC-P120 -800872EB 8008783B 0002 Laptop Gun -800872F5 80087845 0004 Dragon -800872FF 8008784F 0004 K7 Avenger -80087309 80087859 0004 AR34 -80087313 80087863 0004 SuperDragon -8008731D 8008786D 0005 Shotgun -80087327 80087877 000F Reaper -80087331 80087881 0004 Sniper Rifle -8008733B 8008788B 0006 Farsight XR-20 -80087345 80087895 000B Devestator -8008734F 8008789F 0008 Rocket Launcher -80087359 800878A9 0008 Slayer -80087363 800878B3 0009 Combat Knife -8008736D 800878BD 0003 Crossbow -80087377 800878C7 0013 Tranquilizer -80087381 800878D1 0007 Grenade -8008738B 800878DB 0012 N-Bomb -80087395 800878E5 000E Timed Mine -8008739F 800878EF 000D Proximity Mine -800873A9 800878F9 000C Remote Mine -800873B3 80087903 none Laser -800873BD 8008790D none X-Ray Scanner -800873C7 80087917 none Cloaking Device -800873D1 80087921 none Combat Boost -800873DB 8008792B none Shield - -NTSC / PAL Multiplayer Ammo amount modifiers: ---------------------------------------------- -NTSC Amount PAL Amount Ammo -Modifier Modifier Amount Weapon / Item name - -80087274 800877C4 0050 Falcon 2 -8008727E 800877CE 0050 Falcon 2 (Silencer) -80087288 800877D8 0050 Falcon 2 (Scope) -80087292 800877E2 0050 Magsec 4 -8008729C 800877EC 005C Mauler -800872A6 800877F6 0040 Phoenix -800872B0 80087800 0032 DY357 Magnum -800872BA 8008780A 0032 DY357-LX -800872C4 80087814 0064 CMP150 -800872CE 8008781E 0096 Cyclone -800872D8 80087828 0096 Callisto NTG -800872E2 80087832 0096 RC-P120 -800872EC 8008783C 0096 Laptop Gun -800872F6 80087846 0096 Dragon -80087300 80087850 0096 K7 Avenger -8008730A 8008785A 0064 AR34 -80087314 80087864 0096 SuperDragon -8008731E 8008786E 0010 Shotgun -80087328 80087878 00C8 Reaper -80087332 80087882 0032 Sniper Rifle -8008733C 8008788C 000A Farsight XR-20 -80087346 80087896 0010 Devestator -80087350 800878A0 0003 Rocket Launcher -8008735A 800878AA 0003 Slayer -80087364 800878B4 0005 Combat Knife -8008736E 800878BE 000A Crossbow -80087378 800878C8 0032 Tranquilizer -80087382 800878D2 0005 Grenade -8008738C 800878DC 0003 N-Bomb -80087396 800878E6 0005 Timed Mine -800873A0 800878F0 0005 Proximity Mine -800873AA 800878FA 0005 Remote Mine -800873B4 80087904 none Laser -800873BE 8008790E none X-Ray Scanner -800873C8 80087918 none Cloaking Device -800873D2 80087922 none Combat Boost -800873DC 8008792C none Shield - -Other values: -Ammo Ammo -Type Amount Weapon name - -0001 0050 PP9i (PP7) -0001 0050 CC13 (DD44) Dostovei. -0002 0032 KLO1313 (Klobb) -0004 0096 KF7 Special (KF7 Soviet) -0002 0064 ZZT (9mm) (ZMG (9mm)) -0002 0064 DMC (D5K) Deutsche -0004 0096 AR53 (AR33) Assualt Rifle -0002 0096 RC-P45 (RC-P90) -0001 0050 Tester -0008 0003 Big King Rocket -0004 0064 AR27-BETA (Need to pick up double in order to use) -0002 0064 SMG27-BETA (Need to pick up double in order to use) - - -__________________ - -Modifying costumes -__________________ - -All instances of a costume can be modified in the same way that objects and -weapons can be changed. Unfortunately you can't turn Humans into Skedar or -vice-versa, but you can change Humans into Maians (I did the Skedar to Humans -code in WAR! in Deep Sea by advanced methods that I won't teach you here). You -can swap heads, bodies and arms around. You can also set the gender of the body -(if the body belongs to a male or female), and you can make it so that all the -guards have the same head. - -The following codes modify a list located at NTSC 8007CF06 and PAL 8007D3D6. -The costume number is the number on this list. It can either be a head or a -body. It's important to realise that this list only changes the image of a head -or body. You won't change blood colour or if the head says anything special -(like Cassandra De Vries has loads of Cassandra lines she says). The values -used for the body, head and arm images are taken from the global object list. - - -Body image modifier codes: -~~~~~~~~~~~~~~~~~~~~~~~~~~ -The first thing you want to do is modify the image of the body a character -uses. Use the three lists below to change body, head and arm images. To make a -code find the body you want to change, and the body you want to change it into. -Use the code from the body you want to change and the value for the body you -want to turn it into. Here's an example: - -Pelagic II Guard Body modifier: -NTSC PAL -8107D906 0266 8107DDD6 0266 - -This code will turn the Pelagic II guard into a Maian. For most bodies this is -all you have to do, but in this case the body is too short and you get a gap -between the head and the body. This can be solved by modifying the height of -the body. To modify body height make two codes and add 6 and 8 to the body -image modifier address. - -Pelagic II Guard Body height is Maian height: -NTSC PAL -8107D90C 3F12 8107DDDC 3F12 -8107D90E A10D 8107DDDE A10D - -Wherever the Pelagic II Guard body appears in the game it will be changed into -a Maian, and will be the correct height. The body will not however bleed green -blood or make any Maian sounds when shot. - -Common body height values: -3F8D-387D - Mr. Blonde (tallest) -3F80-0000 - Normal height -3F73-FB31 - Joanna Dark (short) -3F12-A10D - Maian (shortest) - -NTSC / PAL Body image modifier code list: ------------------------------------------ -Costume NTSC Body PAL Body Body Gender -Number Modifier Modifier Value Value Body Name - - 00 - 8107CF06 8107D3D6 0047 829C - Dinner Jacket Half open (Djbond) - 01 - 8107CF1A 8107D3EA 0199 829C - Dinner Jacket White tuxedo (Connery) - 02 - 8107CF2E 8107D3FE 019B 8294 - Dinner Jacket Suit done open (Dalton) - 03 - 8107CF42 8107D412 019A 829C - Dinner Jacket Suit undone (Moore) - 56 - 8107D5BE 8107DA8E 0042 067C - Joanna Combat - 57 - 8107D5D2 8107DAA2 004A 8DA8 - Maian - 58 - 8107D5E6 8107DAB6 003F A274 - Area 51 Guard - 59 - 8107D5FA 8107DACA 0051 827C - Overalls - 5A - 8107D60E 8107DADE 0040 8268 - Daniel Carrington - 5B - 8107D622 8107DAF2 004E 96A4 - Mr. Blonde - 5C - 8107D636 8107DB06 0053 A27C - Skedar (Don't use as player) - 5D - 8107D64A 8107DB1A 0057 8284 - Trent Easton - 5E - 8107D65E 8107DB2E 0045 A274 - dataDyne Shock Trooper - 5F - 8107D672 8107DB42 004D A274 - Male Lab Technician - 60 - 8107D686 8107DB56 0054 A278 - NSA Bodyguard - 61 - 8107D69A 8107DB6A 0043 067C - Joanna Party Frock - 62 - 8107D6AE 8107DB7E 0044 067C - Joanna Trench coat - 63 - 8107D6C2 8107DB92 004F 8274 - Office Casual - 64 - 8107D6D6 8107DBA6 0050 8274 - Office Suit - 65 - 8107D6EA 8107DBBA 0052 0630 - Secretary - 66 - 8107D6FE 8107DBCE 0041 129C - Cassandra De Vries - 67 - 8107D712 8107DBE2 0056 8DA8 - Elvis - 68 - 8107D726 8107DBF6 004C 2A80 - dataDyne Female Guard - 69 - 8107D73A 8107DC0A 0194 A274 - dataDyne Lab Technician - 6A - 8107D74E 8107DC1E 0046 A280 - dataDyne Security - 6B - 8107D762 8107DC32 0048 C27C - Dr. Caroll (Don't use as player) - 6C - 8107D776 8107DC46 004B 827C - CamSpy (Don't use as player) - 6D - 8107D78A 8107DC5A 01B1 067C - Joanna Frock (Ripped) - 6E - 8107D79E 8107DC6E 01BF A280 - dataDyne Infantry - 6F - 8107D7B2 8107DC82 01C4 A274 - dataDyne Trooper - 70 - 8107D7C6 8107DC96 0055 C27C - Test body (Don't use as player) - 71 - 8107D7DA 8107DCAA 01C8 A26C - Biotechnician - 72 - 8107D7EE 8107DCBE 01C9 A27C - FBI Agent - 73 - 8107D802 8107DCD2 01CB A27C - CIA Agent - 74 - 8107D816 8107DCE6 01CC A27C - Area 51 Trooper - 75 - 8107D82A 8107DCFA 0231 8274 - Pilot - 76 - 8107D83E 8107DD0E 0236 827C - G5 Sentry Bot (Don't use as player) - 77 - 8107D852 8107DD22 0237 8264 - Steward - 78 - 8107D866 8107DD36 0239 063C - Stewardess - 79 - 8107D87A 8107DD4A 023B 827C - The President - 7A - 8107D88E 8107DD5E 023C 063C - Head Stewardess - 7B - 8107D8A2 8107DD72 0240 827C - Mini Skedar (Don't use as player) - 7C - 8107D8B6 8107DD86 0242 827C - NSA Lackey - 7D - 8107D8CA 8107DD9A 0244 827C - Presidential Security - 7E - 8107D8DE 8107DDAE 0246 0638 - Negotiator - 7F - 8107D8F2 8107DDC2 0261 827C - G5 Guard - 80 - 8107D906 8107DDD6 0263 A27C - Pelagic II Guard - 81 - 8107D91A 8107DDEA 0264 A278 - G5 SWAT Guard - 82 - 8107D92E 8107DDFE 0265 A278 - Alaskan Guard - 83 - 8107D942 8107DE12 0266 ADA8 - Maian - 84 - 8107D956 8107DE26 0339 827C - Presidents Clone - 85 - 8107D96A 8107DE3A 0339 827C - Presidents Clone - 86 - 8107D97E 8107DE4E 033C 067C - Joanna Stewardess - 87 - 8107D992 8107DE62 049E 067C - Joanna Wet Suit - 88 - 8107D9A6 8107DE76 049F 067C - Joanna Aqualung - 89 - 8107D9BA 8107DE8A 04A0 067C - Joanna Arctic - 8A - 8107D9CE 8107DE9E 04A1 067C - Female Lab Technician - 8B - 8107D9E2 8107DEB2 04A2 267C - Joanna Lab Tech - 8C - 8107D9F6 8107DEC6 04A3 A27C - dataDyne Sniper - 8D - 8107DA0A 8107DEDA 04A4 827C - Air Force One Pilot - 8E - 8107DA1E 8107DEEE 04A5 A27C - CI Male Lab Technician - 8F - 8107DA32 8107DF02 04A6 267C - CI Female Lab Technician - 90 - 8107DA46 8107DF16 04A9 827C - Carrington Evening Wear - 91 - 8107DA5A 8107DF2A 04AA 827C - Area 51 Guard - 92 - 8107DA6E 8107DF3E 04AB A27C - CI Soldier - 93 - 8107DA82 8107DF52 050B 827C - Skedar King (Don't use as player) - 94 - 8107DA96 8107DF66 050C 8DA8 - Elvis with America T-shirt - 95 - 8107DAAA 8107DF7A 0559 067C - Joanna Leather - 96 - 8107DABE 8107DF8E 0796 067C - Joanna Negotiator - - -Head image modifier codes: -~~~~~~~~~~~~~~~~~~~~~~~~~~ -Once you've changed the body you can change the head. To change a head find the -code from the head you want to change, and use the value for the head you want -to change it into. Here's an example: - -Turn Daniel Carringtons head into Cassandra De Vries head: -NTSC PAL -8107CF92 01A6 8107D462 - -Daniel Carrington will still speak like a man, even though he has Cassandras -head. - -NTSC / PAL Head image modifier code list: ------------------------------------------ -Costume NTSC Head PAL Head Head Gender -Number Modifier Modifier Value Value Head Name - - 04 - 8107CF56 8107D426 019C 4434 - Joanna Combat head - 05 - 8107CF6A 8107D43A 019D CC6C - Elvis head - 06 - 8107CF7E 8107D44E 019E C034 - Enemy head (Ross) - 07 - 8107CF92 8107D462 019F C034 - Daniel Carrington head - 08 - 8107CFA6 8107D476 01A0 D434 - Mr. Blonde head - 09 - 8107CFBA 8107D48A 01A1 C034 - Trent Easton head - 0A - 8107CFCE 8107D49E 01A2 C034 - Shock Trooper mask - 0B - 8107CFE2 8107D4B2 01A3 C034 - Enemy head (Graham) - 0C - 8107CFF6 8107D4C6 01A4 4434 - Joanna Frock head - 0D - 8107D00A 8107D4DA 01A5 4434 - dataDyne Secretary head - 0E - 8107D01E 8107D4EE 01A6 5034 - Cassandra De Vries head - 0F - 8107D032 8107D502 01A7 CC6C - Maian head - 10 - 8107D046 8107D516 01A8 4034 - Female Enemy head - 11 - 8107D05A 8107D52A 01A9 C034 - Enemy head (Jon) - 12 - 8107D06E 8107D53E 01B2 C034 - Grimshaw head (Mark2) - 13 - 8107D082 8107D552 01B3 C034 - Foster head (Christ) - 14 - 8107D096 8107D566 01BC C034 - Enemy head (Russ) - 15 - 8107D0AA 8107D57A 01BD CC34 - BETA head (Grey) - 16 - 8107D0BE 8107D58E 01BE C034 - Enemy head (Darling) - 17 - 8107D0D2 8107D5A2 01C0 C034 - Enemy head (Robert) - 18 - 8107D0E6 8107D5B6 01C2 C034 - Enemy head (Beau) - 19 - 8107D0FA 8107D5CA 01C5 4034 - Female Enemy head - 1A - 8107D10E 8107D5DE 01CD C034 - Enemy head (Brian) - 1B - 8107D122 8107D5F2 01CE C034 - Enemy head (Jamie) - 1C - 8107D136 8107D606 01CF C034 - Enemy head (Duncan) - 1D - 8107D14A 8107D61A 01D0 C034 - Biotechnician mask - 1E - 8107D15E 8107D62E 0232 C034 - Enemy head (Neil) - 1F - 8107D172 8107D642 0238 C034 - Enemy head (Edmcg) - 20 - 8107D186 8107D656 023A 4434 - Female Enemy head (Anka) - 21 - 8107D19A 8107D66A 023D 4434 - Female Enemy head (Leslie) - 22 - 8107D1AE 8107D67E 0243 C034 - Enemy head (Matt) - 23 - 8107D1C2 8107D692 0245 C034 - Enemy head (Peer) - 24 - 8107D1D6 8107D6A6 0247 4434 - Female Enemy head (Eileen) - 25 - 8107D1EA 8107D6BA 0262 C034 - Enemy head (Andy) - 26 - 8107D1FE 8107D6CE 0267 C034 - Enemy head (Ben) - 27 - 8107D212 8107D6E2 0268 C034 - Enemy head (Steve) - 28 - 8107D226 8107D6F6 033A C034 - Jonathan head - 29 - 8107D23A 8107D70A 033B CC6C - Maian Soldier head - 2A - 8107D24E 8107D71E 0345 C034 - Enemy head (Shaun) - 2B - 8107D262 8107D732 01C2 C034 - Enemy head (Beau) - 2C - 8107D276 8107D746 04A7 4434 - Female Enemy head (Eileen) - 2D - 8107D28A 8107D75A 04A8 C034 - Enemy head (Scott) - 2E - 8107D29E 8107D76E 04AC C034 - Enemy head (Sanchez) - 2F - 8107D2B2 8107D782 04AD 4434 - Joanna Scuba head - 30 - 8107D2C6 8107D796 04AE C034 - Sniper mask - 31 - 8107D2DA 8107D7AA 01C2 C034 - Enemy head (Beau) - 32 - 8107D2EE 8107D7BE 01C2 C034 - Enemy head (Beau) - 33 - 8107D302 8107D7D2 01C2 C034 - Enemy head (Beau) - 34 - 8107D316 8107D7E6 01C2 C034 - Enemy head (Beau) - 35 - 8107D32A 8107D7FA 050D C034 - Enemy head (Griffey) - 36 - 8107D33E 8107D80E 050E C034 - Shigeru Miyamoto head - 37 - 8107D352 8107D822 050F C034 - Enemy head (Keith) - 38 - 8107D366 8107D836 0510 4434 - Enemy head (Winner) - 39 - 8107D37A 8107D84A 0511 C034 - Area 51 gas mask - 3A - 8107D38E 8107D85E 0553 CC6C - Elvis Scuba mask - 3B - 8107D3A2 8107D872 0554 C034 - Enemy head (Stevem) - 3C - 8107D3B6 8107D886 055A 4434 - Joanna Artic head - 3D - 8107D3CA 8107D89A 055B C034 - The President's head - 3E - 8107D3DE 8107D8AE 0561 4434 - Velvet Dark head - 3F - 8107D3F2 8107D8C2 07C5 C034 - Enemy head (Ken) - 40 - 8107D406 8107D8D6 07C6 C034 - Enemy head (Joel) - 41 - 8107D41A 8107D8EA 07BD C034 - Enemy head (Tim) - 42 - 8107D42E 8107D8FE 07BE C034 - Enemy head (Grant) - 43 - 8107D442 8107D912 07BF C034 - Enemy head (Penny) - 44 - 8107D456 8107D926 07C0 C034 - Enemy head (Robin) - 45 - 8107D46A 8107D93A 07C1 4834 - Female Enemy head (Alex) - 46 - 8107D47E 8107D94E 07C2 4834 - Female Enemy head (Julianne) - 47 - 8107D492 8107D962 07C3 4834 - Female Enemy head (Laura) - 48 - 8107D4A6 8107D976 07C4 C034 - Enemy head (Davec) - 49 - 8107D4BA 8107D98A 07CD C034 - Enemy head (Cook) - 4A - 8107D4CE 8107D99E 07CE C034 - Enemy head (Pryce) - 4B - 8107D4E2 8107D9B2 07CF C034 - Enemy head (Silke) - 4C - 8107D4F6 8107D9C6 07D0 C034 - Enemy head (Smith) - 4D - 8107D50A 8107D9DA 07D1 C034 - Enemy head (Gareth) - 4E - 8107D51E 8107D9EE 07D2 C034 - Enemy head (Murchie) - 4F - 8107D532 8107DA02 07D3 C034 - Enemy head (Wong) - 50 - 8107D546 8107DA16 07D4 C034 - Enemy head (Carter) - 51 - 8107D55A 8107DA2A 07D5 C034 - Enemy head (Tintin) - 52 - 8107D56E 8107DA3E 07D6 C034 - Enemy head (Munton) - 53 - 8107D582 8107DA52 07D7 C034 - Enemy head (Stamper) - 54 - 8107D596 8107DA66 07D8 C034 - Enemy head (Jones) - 55 - 8107D5AA 8107DA7A 07D9 C034 - Enemy head (Phelps) - - -Arm image modifier codes: -~~~~~~~~~~~~~~~~~~~~~~~~~ -If you intend to play as a character body you've changed, you'll notice that -the arms are not changed. To change a set of arms find the body the arms belong -to, and the body which has the arms you want to give the body you've changed. -Use the code from the body you want to change, and the arms value for the arms -you want to give the body. Here's an example: - -Change Joanna combat arms into Cassandras arms: -NTSC PAL -8107D5CC 0537 8107DA9C 0537 - -NTSC / PAL Arm image modifier code list: ----------------------------------------- -Costume NTSC Arm PAL Arm Arm -Number Modifier Modifier Value Body the arms belongs to - - 00 - 8107CF14 8107D3E4 0538 - Dinner Jacket Half open (Djbond) - 01 - 8107CF28 8107D3F8 0532 - Dinner Jacket White tuxedo (Connery) - 02 - 8107CF3C 8107D40C 0538 - Dinner Jacket Suit done open (Dalton) - 03 - 8107CF50 8107D420 0538 - Dinner Jacket Suit undone (Moore) - 56 - 8107D5CC 8107DA9C 04E5 - Joanna Combat - 57 - 8107D5E0 8107DAB0 0764 - Maian - 58 - 8107D5F4 8107DAC4 0766 - Area 51 Guard - 59 - 8107D608 8107DAD8 0766 - Overalls - 5A - 8107D61C 8107DAEC 0531 - Daniel Carrington - 5B - 8107D630 8107DB00 0532 - Mr. Blonde - 5C - 8107D644 8107DB14 0000 - Skedar (Don't use as player) - 5D - 8107D658 8107DB28 052A - Trent Easton - 5E - 8107D66C 8107DB3C 0769 - dataDyne Shock Trooper - 5F - 8107D680 8107DB50 0532 - Male Lab Technician - 60 - 8107D694 8107DB64 0768 - NSA Bodyguard - 61 - 8107D6A8 8107DB78 052B - Joanna Party Frock - 62 - 8107D6BC 8107DB8C 052C - Joanna Trench coat - 63 - 8107D6D0 8107DBA0 052B - Office Casual - 64 - 8107D6E4 8107DBB4 052B - Office Suit - 65 - 8107D6F8 8107DBC8 052B - Secretary - 66 - 8107D70C 8107DBDC 0537 - Cassandra De Vries - 67 - 8107D720 8107DBF0 0764 - Elvis - 68 - 8107D734 8107DC04 052C - dataDyne Female Guard - 69 - 8107D748 8107DC18 053B - dataDyne Lab Technician - 6A - 8107D75C 8107DC2C 0538 - dataDyne Security - 6B - 8107D770 8107DC40 0000 - Dr. Caroll (Don't use as player) - 6C - 8107D784 8107DC54 0000 - Camspy (Don't use as player) - 6D - 8107D798 8107DC68 052B - Joanna Frock (Ripped) - 6E - 8107D7AC 8107DC7C 0538 - dataDyne Infantry - 6F - 8107D7C0 8107DC90 0767 - dataDyne Trooper - 70 - 8107D7D4 8107DCA4 0000 - Test body (Don't use as player) - 71 - 8107D7E8 8107DCB8 076A - Biotechnician - 72 - 8107D7FC 8107DCCC 0535 - FBI Agent - 73 - 8107D810 8107DCE0 0533 - CIA Agent - 74 - 8107D824 8107DCF4 052B - Area 51 Trooper - 75 - 8107D838 8107DD08 076B - Pilot - 76 - 8107D84C 8107DD1C 0000 - G5 Sentry Bot (Don't use as player) - 77 - 8107D860 8107DD30 052B - Steward - 78 - 8107D874 8107DD44 052B - Stewardess - 79 - 8107D888 8107DD58 052E - The President - 7A - 8107D89C 8107DD6C 053A - Head Stewardess - 7B - 8107D8B0 8107DD80 0000 - Mini Skedar (Don't use as player) - 7C - 8107D8C4 8107DD94 0531 - NSA Lackey - 7D - 8107D8D8 8107DDA8 0531 - Presidential Security - 7E - 8107D8EC 8107DDBC 052B - Negotiator - 7F - 8107D900 8107DDD0 076C - G5 Guard - 80 - 8107D914 8107DDE4 0539 - Pelagic II Guard - 81 - 8107D928 8107DDF8 076C - G5 SWAT Guard - 82 - 8107D93C 8107DE0C 0536 - Alaskan Guard - 83 - 8107D950 8107DE20 0764 - Maian - 84 - 8107D964 8107DE34 04E5 - Presidents Clone - 85 - 8107D978 8107DE48 052E - Presidents Clone - 86 - 8107D98C 8107DE5C 0530 - Joanna Stewardess - 87 - 8107D9A0 8107DE70 0529 - Joanna Wet Suit - 88 - 8107D9B4 8107DE84 0529 - Joanna Aqualung - 89 - 8107D9C8 8107DE98 0536 - Joanna Arctic - 8A - 8107D9DC 8107DEAC 0532 - Female Lab Technician - 8B - 8107D9F0 8107DEC0 0532 - Joanna Lab Tech - 8C - 8107DA04 8107DED4 052D - dataDyne Sniper - 8D - 8107DA18 8107DEE8 0530 - Air Force One Pilot - 8E - 8107DA2C 8107DEFC 0534 - CI Male Lab Technician - 8F - 8107DA40 8107DF10 0534 - CI Female Lab Technician - 90 - 8107DA54 8107DF24 0532 - Carrington Evening Wear - 91 - 8107DA68 8107DF38 0766 - Area 51 Guard - 92 - 8107DA7C 8107DF4C 076D - CI Soldier - 93 - 8107DA90 8107DF60 0000 - Skedar King (Don't use as player) - 94 - 8107DAA4 8107DF74 0764 - Elvis with America T-shirt - 95 - 8107DAB8 8107DF88 052B - Joanna Leather - 96 - 8107DACC 8107DF9C 052F - Joanna Negotiator - - -Gender modifying: -~~~~~~~~~~~~~~~~~ -Modifying the gender modifies the kind of head a body gets when it's assigned a -head. If the gender is male the body will act and sound like a male. If the -gender is female the body will act and sound like a female. By modifying the -gender of a body you determine what kind of head that body gets when it's -assigned a random head. It's possible to modify the gender of the head, but -that only changes what kind of pain sounds the head makes. You can only have -females or males. You can't use just a gender modifier and the gender value for -Maians to turn the humans into Maians. - -To modify a bodies gender subtract 2 from the address of the body (or head) -image modifier. The values to use are either 2A80 for female, or 827C for male. -You can use others that are shown in the lists above, but what they actually -change makes very little difference as to which head is given to the body. -Here's an example that's used together with the Pelagic II Guard body image -modifier above: - -Pelagic II Guard is a Female dataDyne Bodyguard: -NTSC PAL -8107D904 2A80 8107DDD4 2A80 -8107D906 004C 8107DDD6 004C - -The guards in Pelagic II will act and sound like women. They will have female -heads and say female things. - - -Random enemy head modifying: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -When a body is assigned a random head it picks out heads from a set of -predetermined heads. This means that is chooses between a set of heads that are -either male or female. The gender value 0DA8 specifies that the body will get -one of only four random female heads. It's possible to change which heads are -chosen when you set the gender to female with the value 0DA8. - -Female (0DA8) enemy heads modifier: -NTSC PAL -81062C5A 00XX 8106293A 00XX -81062C5E 00XX 8106293E 00XX -81062C62 00XX 81062942 00XX -81062C66 00XX 81062946 00XX - -The values that these codes use are the costume number values. The codes that -change the body image, head image, arm image and gender modify a list that has -data related to a costume number. There is more data related to a head or body -than what is on this list. This means that elsewhere in the memory there is -another list that specifies what language a head / body says, and what kind of -pain sounds the head / body makes (I haven't been able to locate this list -yet). What all this means is that when you use a costume head value in the code -above you will change which head is assigned to a female gendered body. If that -head is a male head it will speak like a male and have the same pain sounds as -a male. More specifically, if the value is set to that of a Maian head, any -body that the female gender 0DA8 is applied to will become a Maian. If the -values are all set to the same coustume head value then all enemies will have -the same head. Here is an example of how to turn a Human into a Maian: - -Turn Pelagic II Guard into Maian Soldier: -NTSC PAL -8107D904 0DA8 8107DDD4 0DA8 -8107D906 0266 8107DDD6 0266 -8107D90C 3F12 8107DDDC 3F12 -8107D90E A10D 8107DDDE A10D -81062C5A 0029 8106293A 0029 -81062C5E 0029 8106293E 0029 -81062C62 0029 81062942 0029 -81062C66 0029 81062946 0029 - -The only drawback that this code has is that the Maians will bleed red blood. -Otherwise they will run around and say Maian stuff, just like the two Maian -soldiers in Attack Ship. You can only turn characters that are assign a random -head into Maians. You can't turn Cassandra De Vries into a Maian because she is -always given the same head. - -Unfortunately, Skedar language and pain sounds are associated with the Skedar -body (5C). The Skedar body has no head, so you can't use swap Humans with -Skedar using this method. - - -__________________________ - -Moving players into levels -__________________________ - -When you modify a solo mission so that you put it in a different arena, you -will most likely start the level outside the arena above an empty void. Even -though the objects in the level are put at pads that correspond to the new -arena, anything that takes part in the cut-scene is put exactly where it would -be put if the level hadn't been changed at all. To give an example, at the end -of Crash Site Intro you are put at the coordinates where Joanna starts in Crash -Site. If you were to change the arena Crash Site takes place in to Pelagic II -you will still be put at the coordinates where Joanna starts Crash Site. This -may not nessesarily be in any rooms or corridors in Pelagic II. The result is -that you start the level in an empty void and need to be moved to a place with -a solid floor. If you just stay put you will fall down and die in the void. - -This problem can be solved by changing a players coordinates so that you move -her into the level. In order to do this you need to be able to hack Perfect -Dark in hirez. The easiest way to move a player into a level is by using Nemu, -but you can also do this using Project 64 or Perfect Trainer together with -GSCC. - - -The real time coordinates list: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The real time coordinates list is a list in the memory containing the current -coordinates of all the objects in a level. By changing the coordinates of any -of these objects you can move them wherever you want in an arena. Player -coordinates are located at the end of the real time coordinates list. If you -make a code that moves a player and then remove an object, the code that moved -your player will no longer work because the real time coordinates list will -have one less object in it. Therefore, making a code that moves a player should -be the last thing you do when making a new level. The beginning of the real -time coordinates list can be found by following the pointer at: - -NTSC 8009A2F8 and PAL 8009A848 - -This pointer points to a part of the memory in the in-game level data. It will -point to an address above 80400000. The in-game level data isn't always put in -the memory in the same place, which means that any code you make to alter the -in-game level data won't always work! Whether or not a code works depends on -the last level you loaded, before loading the level the codes activated are -meant to work in. Also, the codes that you have activated may affect the level -that is loaded before the one you want to modify, often causing it to freeze. -To get around these problems while modifying the in-game level data for a solo -mission you need to load the level in a specific way. - -Lets say you want to make a code that changes a players coordinates in a -modified level. You want this code to work the first time you load a level, and -when you reload the level (if you die). When Perfect Dark starts, the game will -load the Carrington Institute Training Ground first. From there you can select -your modified level from the Solo Mission menu. When you load your modified -level you will have loaded it after loading the CI Training Ground. At this -point in time you make a code to move the player along the X-axis which will be -814C5670 (example only). Next, you die and reload the level. Your modified -level will now be loaded after loading your modified level (loaded twice). In -this example lets say that the in-game level data is put in a different place. -The code to modify the players X-axis coord is now 814C5680 and not 814C5670. -You have activated a code that freezes a value at 814C5670, but it won't work -because the X-axis coord has moved to 814C5680! The code 814C5670 may freeze -the game because it's changing something it shouldn't be messing with. This -situation can be solved in one of two ways: - -1 - You can activate a code so that it works the second time you load the level - (simply kill yourself the first time the level loads), but this might - freeze it the first time you load the level. -2 - You can activate a code so that it works the first time you load the - modified level, and go back to the CI Training Ground and reload it. To - reload the CI Training Ground you need to kill yourself in it. This can - easily be done by using the CI Training Ground disabler code (mentioned a - bit further down in this FAQ). - -Sometimes the codes you have activated may prevent the CI Training Ground from -loading, and freeze the game at the Perfect Dark logo. This can also be fixed -with the CI Training Ground disabler. After you've reloaded a level for the -third time the game will be used to loading it. The in-game level data will be -put in the same spot as the second time you loaded it. - -When you want to move a player you won't have the code activated all the time. -If you did that the player would be stuck on the same spot and unable to move -anywhere. You will use an activator to move the player into the level when you -press a button. You won't have to worry about your codes freezing anything -because they're not constantly on. However, if you decide to move an object -like a chair that stays in the same spot for the duration of the level, you -won't need an activator. It's when you're not using an activator to modify -in-game data that you have to worry about the order in which you load levels. -In the outro part of this FAQ there are two fully working solo missions, Crash -Site in Villa and WAR! in Deep Sea. Both codes modify the in-game level data -without using activators. WAR! in Deep Sea loads it's in-game data in the same -spot after loading itself, so there aren't any problems with getting it working -again if you die. Crash Site in Villa puts it's in-game data in a different -place after you have loaded it. If you die you have to go back to the disabled -CI Training Ground, kill yourself, and then load the level again. If you plan -to move anything without activators it's best not to use the skip intros code, -because you have no level to go back to after loading your modified level for -the first time. - - -Finding your current coordinates: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -I'm going to describe how to find your current coordinates, and codes to change -them, in three different ways. Using Nemu, using Project 64 and ArtMoney, and -using Perfect Trainer together with GSCC. The example I'm going to use is Crash -Site in Pelagic II. When you load this level you appear outside the level. - -Crash Site in Pelagic II: -NTSC PAL -8107FE88 000E 810803C8 000E -8107FE8A 0160 810803CA 0160 -8107FE8C 015F 810803CC 015F - -Turn on the above code and select Crash Site from the Solo Mission menu. The -in-game level data will be put in a different spot depending on which -difficulty you choose. The best thing to do is select Perfect Agent. You'll be -able to modify enemy difficulty in Perfect Dark Agent mode. Start the level and -watch the cut-scene if you like. You will begin outside the level, so to get -into it you need to moonjump there. Use the moonjump codes provided in Part One -and moonjump into the level. Once inside navigate to the exact spot where you -want to start the level and pause the game. - -In Nemu go to Plugins - Debugger: Memory... In the address box enter the -address NTSC 8009A2F8 or PAL 8009A848. Copy the pointer you find there into the -address box to navigate to the real time coordinates list. Move down the list -by changing the address until you get to the end of the real time coordinates -list and find the value 060C0000 (or 068C0000). Alternatively you can do a -search for 060C0000 (or 068C0000) and the correct address will be the one -closest to where the real time coordinates list is in the memory. After -060C0000 you will find a pointer and three 32bit values. Write down the values -and addresses these values are at to make the move player code. Move the Memory -window and the game screen window in such a way that you can see them both on -the same screen. Right click on the three 32bit values to highlight them green -and make them easier to see. Unpause the game and go to where you want to move -something else. In the Memory window press Refresh to get the new coordinates -of where you moved to. - -In Project 64 create a savestate and open it in a hex editor. Delete the first -75C addresses and byte flip the file. Go to NTSC 8009A2F8 or PAL 8009A848 and -follow the pointer found there to find the real time coordinates list. Do a -search for 060C0000 (or 068C0000) and the correct address will be the one -closest to the real time coordinates list (or just scroll down to the end of -the real time coordinates list to find the value 060C). After 060C0000 you will -find a pointer and three 32bit values. Write down the values and addresses -these values are at to make the move player code. Turn on ArtMoney and connect -it to Project 64 (which should still be paused using F2). Do three different -searches for the 32bit values found with the hex editor, and move the three -codes over to the active code section. Place the Project 64 window in such a -fashion so that you can see both the game screen and the values at the same -time. When you unpause the game you should be able to see the coordinates -changing as you move about the level. Move about to find coordinates for where -you want to put other stuff you wish to move. - -For Perfect Trainer and GSCC you need to activate the level modifier by -changing values in the ram manually. This is done by using the ram edit menu. -Once the code is active load the level and pause the game. Use the same method -described above to find your current coordinates. Pressing Refresh will update -your computer with your latest coordinates. - - -Moving a player with activators: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Whatever method you used you should now know where your coordinates are and -which addresses they are at. Remember that they may be at a different address -the second time you load the level, so quit and load the level again to make -sure they're correct. What you have should look like this (NTSC PC version): - -005443E0 - 060C0000 80561860 45A4BE67 C3B0CAC8 -005443F0 - C4F46CCE C4CE3E34 00000000 00000000 - -The first 32bit value after the pointer 80561860 is the X coord, the next is Y -and the third is Z. You only need to change the first 16bits, these give you -more than enough coordinate precision. A code to move your player would be: - -815443E8 XXXX -815443EC YYYY -815443F0 ZZZZ - -In total there may be six different versions of this code, NTSC PC version 1.0 -and 1.1, PAL PC, NTSC Gameshark version 1.0 and 1.1, and PAL Action Replay. -Consequently it turns out that both NTSC version 1.0 and 1.1 put their in-game -level data in the same place for this particular level modification, so there's -actually only four. To find NTSC Gameshark and PAL Action Replay versions you -need to use Perfect Trainer, but you can also guess you way to them based on -their PC counterparts. The cheating device version will be in the 10's away -from the PC version. This means that it could be +50, +20, +10 to name but a -few. The cheating device version of a PC coordinate code can therefore usually -be found by trial and error. - -8107FE88 000E -8107FE8A 0160 -8107FE8C 015F -D109C7E4 0030 -815443E8 449A -D109C7E4 0030 -815443EC C488 -D109C7E4 0030 -815443F0 4237 - -NTSC PAL NTSC PC PAL PC -81544408 XXXX 81541B08 XXXX 815443E8 XXXX 81541AE8 XXXX -8154440C YYYY 81541B0C YYYY 815443EC YYYY 81541AEC YYYY -81544410 ZZZZ 81541B10 ZZZZ 815443F0 ZZZZ 81541AF0 ZZZZ - -As you can see, the difference between cheating device and PC in this case is -+20. It's usually the same for both NTSC and PAL. - -The next thing you need is a set of coordinates from where you want to start -the level: - -449AFFA8 C4886009 42374903 - -Using these coords and the one player button activator you can make the codes -that move your player. The button combination L+R (0030) is used because it's -unlikely the player will press this combination while playing. - -NTSC PAL NTSC PC PAL PC -D109C7E4 0030 D1099FB0 0030 D109C7E4 0030 D1099FB0 0030 -81544408 449A 81541B08 449A 815443E8 449A 81541AE8 449A -D109C7E4 0030 D1099FB0 0030 D109C7E4 0030 D1099FB0 0030 -8154440C C488 81541B0C C488 815443EC C488 81541AEC C488 -D109C7E4 0030 D1099FB0 0030 D109C7E4 0030 D1099FB0 0030 -81544410 4237 81541B10 4237 815443F0 4237 81541AF0 4237 - -The final code should be: - -Crash Site in Pelagic II: -NTSC PAL NTSC PC PAL PC -8107FE88 000E 810803C8 000E 8107FE88 000E 810803C8 000E -8107FE8A 0160 810803CA 0160 8107FE8A 0160 810803CA 0160 -8107FE8C 015F 810803CC 015F 8107FE8C 015F 810803CC 015F -D109C7E4 0030 D1099FB0 0030 D109C7E4 0030 D1099FB0 0030 -81544408 449A 81541B08 449A 815443E8 449A 81541AE8 449A -D109C7E4 0030 D1099FB0 0030 D109C7E4 0030 D1099FB0 0030 -8154440C C488 81541B0C C488 815443EC C488 81541AEC C488 -D109C7E4 0030 D1099FB0 0030 D109C7E4 0030 D1099FB0 0030 -81544410 4237 81541B10 4237 815443F0 4237 81541AF0 4237 - -This code works by pressing L+R when the level starts. You will be magically -teleported to the start of the level. It works the second time you load the -level in the cheating device versions. The aim of the level is to kill as many -guards as possible while avoiding being flanked and walking into booby traps! - -Last but not least you should test any codes you make to make sure that they -work as they should do. - - -The CI Training Ground Disabler: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Some time during making a level setup you might experience the game freezing at -the Perfect Dark logo. This happens because the codes you've made are either -put in the same place as the objects used in the Carrington Institute Training -Ground, or interfere with the intro cut-scene. The way to get around this and -to make things work again is to disable the CI Training Ground. Hard as it may -sound, disabling the CI Training Ground is done quite simply by modifying the -level it's in. The Training Ground is at level number 26 on the level list. - -Carrington Institute Training Ground Disabler: -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C - -The last line changes the CI Traing Grounds setup into Skedar's solo setup -(013C). It's a BETA setup, it has no cut-scenes and no objects in it, only the -player. Usually the last line is enough to get things working again, but if it -doesn't, use the rest of the code. The rest of the code changes the arena into -the Default arena. If all else fails, try 0147 as a setup instead of 013C. In -the Default arena you can easily walk off the edge of the level and kill -yourself. This resets the way levels work and is useful for levels like Crash -Site in Villa (Solo). - -Something else you may want to note about the CI Training Ground is that player -one is always invincible! Don't use level 26 for anything other than the -Training Ground, if you do you will end up with an invincible player. Use -Defense instead, it works just as well. - - -_______________________________________________________________________________ - - < Part Three - Advanced level modding > -_______________________________________________________________________________ - -Everything that I have taught you up till now has been a simplified version of -Perfect Dark level modding. It is in fact possible to take things one step -further than just changing a levels setup files. It's possible to move stuff -around in levels, and to change objects at a much deeper level. However, -advanced level modding is hard to do, extremely time consuming and requires a -lot of foreground work before you can even start changing stuff. When I started -writing this FAQ I originally had in mind to explain how advanced level modding -is done. Due to time constraints and a general lack of actual Perfect Dark -hackers (lets face it, we're few and far between), I decided to axe most of the -stuff about advanced level modding. I will however explain how I made the -multiplayer levels. - -Examples of advanced level modding can be seen in the codes in the "Codes" -section. They are fully working levels, with everything as you would expect it -to be, not with ammo crates stuck in windows, or gigantic lifts flying in the -air. - - - > Multiplayer level modding - ~ Making the level modifier code - ~ Creating the enablers - ~ Plotting the pads in the level - ~ Creating the code - ~ Testing the code - - -_________________________ - -Multiplayer level modding -_________________________ - -It is my wish that one day we will be able to play in all of Perfect Darks solo -arenas in multiplayer. Sadly I don't have the time to do them all myself, but I -will however provide you with a quick guide that will help you understand how I -made the ones that I did and how to make your own. - -In this FAQ you will find the multiplayer levels that I have created. These are -done using the method that I found to be most effective and low on lines of -code. The multiplayer codes that you make will be much like the ones that I -have made. They consist of several different parts, and require an enabler to -get them working. A quick breakdown of the steps of making a multiplayer level -are: - -1 -> Making the level modifier code -2 -> Creating the enablers -3 -> Plotting the pads in the level -4 -> Creating the code -5 -> Testing the code - -To make the level modifier code you need to decide on which arena you want to -play in multiplayer, and which multiplayer setup file to use. The setup file is -important because it will determine which extra objects you want to add beyond -all the usual stuff. You can't add any more objects than there are in the setup -file to begin with. This means that if there are only five metal crates in -Complexes setup your level will also only have five metal crates. You can -however modify them into different objects (like I did in Crash Site Caves). -Bases setup is good if you want lots of objects, and Felicity's or Area 52's is -good if you want lots of doors. You won't be making a level that has every -single bit of furniture in place like it's solo version. Carrington Villa -Residence and Rooftop demonstrate the extent to which you can have objects in a -multiplayer level. Residence has lots of doors and Rooftop has lots of objects. - -Once you've made a level modifier code you need to find where the in-game level -data for this level is put in each mode of the level. Modes are the level -loaded in different formats (NTSC Gameshark version 1.0, NTSC Gameshark -version 1.1, PAL Action Replay, NTSC PC version 1.0, NTSC PC version 1.1, and -PAL PC), and the level loaded with different player amounts. There are 24 -different modes in total. For PC's the in-game level data is found using Nemu -or Project 64 with ArtMoney, for cheating devices you need to use Perfect -Trainer. I realise that this part can be a lot of hassle so I have found out -where the in-game level data is put for you! I have compiled a list over where -the data is put in each of Perfect Darks solo arenas when loaded in -multiplayer. This list will save you a lot of time and ensure that your codes -will work. Once you know where the in-game level data is put you can make -enablers for each format. The enablers will work in the same way as the ones -that I have made for my levels. You need to choose one of the modes which the -final code will be put at. This has to be the highest in the memory (which is -usually NTSC Gameshark one player). Once you know where the final code will be -you can make enablers for the other modes which move the in-game level data up -the memory to line up with where the final code is. In essence the enablers -move the in-game level data to the same place as in NTSC Gameshark one player -mode. This is why you end up with codes that work in both NTSC and PAL. - -Once you know where the final code is going to be put, and that it will work -with every mode no matter which side of the Atlantic you are on, you can start -making codes to move the objects. You can at this point make the final code, -but you will realise that you won't know where to move the objects. The objects -are placed on the pads, and the codes you make will move the objects to a -different pad. In order to know where to move stuff you need to make a map -of the level and draw where each pad is in the arena. For some of the larger -levels you only need to know where the first hundred or so pads are, you don't -need to know where every single pad is, there's more than enough of them to -create your level. Pads are found by using object moving codes to move objects -to the pads you want to find. Each object is given it's own image so you can -tell the difference between them. With all objects put at different pads and -with different object images you can find the pads in no time by running around -the arena looking for them. - -Once you know where the pads are and know where the final code will be put in -the memory you can create the codes that move and modify stuff. You will need -codes to move weapons and ammo crates, codes to move the respawns and codes -that move and modify objects. King of the Hill and Capture the Case codes are -the same for all levels and aren't part of the in-game level data. Creating the -code that moves stuff about and changes it is done by modifying several -different object setup files, and the pads file. The files are pointed to from -NTSC 8009D030 and PAL 8009D590. These pointers point to in-game level data: - -NTSC Pointer - PAL Pointer - File description - - 8009D040 - 8009D5A0 - Object setup list - 8009D04C - 8009D5AC - The pads file - 8009D03C - 8009D59C - Multiplayer respawns, hills and bases - 8009D03C - 8009D59C - Solo mission player info - 8009D044 - 8009D5A4 - Solo mission AI - 8009A2F8 - 8009A848 - Real time object coordinates list - -The object setup list is the most important, it contains information about the -weapons, ammo crates, doors and objects. The weapons and ammo come first and -are in the same order in almost every setup (except Ravine). This means that no -matter wether you use Complexes, Bases or Felicity's setup the weapons and ammo -codes will always be the same. Take note that the weapons and ammo code is the -same in both Crash Site Caves and Crash Site Racing Ground. It's also the same -in Carrington Villa Residence and Carrington Villa Rooftop. Any objects that -come with the setup will come next and you can modify them as you want. After -the objects comes the respawn point data that you will also need to change. The -pads file will be put in a different place depending on wether you use NTSC or -PAL. Codes that modify the pads file are therefore put in part one of the code -together with the level modifier. Changing a pad means moving it's coordinates -to put it exactly where you want it. You should only need to move pads in -extreme circumstances, like if you want a lift somewhere but there aren't any -pads for it to move between. - -I'll mention the solo specific files breifly since I'm sure you're curious as -to what they contain. The solo mission player info file has information about -the weapons and ammo you start the level with. The solo mission AI has enemy / -allie routine data, like respawning guards, guard behavior and guard -destinations. Unlike the other files this one is compact with no reguard to the -fact that certain values should start with an even address (you'll understand -what I mean when you see it). - -Once you've made the code it needs to be tested. This has to be done to make -sure that the final code works with the enablers. - - -Making the level modifier code: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Lets take a look at the level modifier code used in Crash Site Racing Ground: - -Crash Site in multi using Bases Mp_Setup: -NTSC PAL -810800B8 0001 810805F8 0001 CI Training Ground Disabler -810800BA 0184 810805FA 0184 V -810800BC 0183 810805FC 0183 V -810800BE 013C 810805FE 013C V -8107FE90 01E2 810803D0 01E2 Crash Site Mp_Setup modifier (using Base) -80084BF9 001C 80085149 001C Random level modifier (using Crash Site) -81084BFC 569B 8108514C 569B Changes Random (arena) into Crash Site -81084C14 50FF 81085164 50FF Changes Random (arena type) into Hacker - -The CI Training Ground Disabler is needed to stop the game from freezing once -you've made the final code. The level is loaded by choosing what was originally -meant to be at Random. Instead of loading a random level we use a random level -modifier to always make it load the level we want. The two last codes change -the words Random that you find in the arena menu. The Mp_Setup modifier changes -Crash Sites Mp_Setup. Since Crash Site doesn't have an Mp_Setup, if we don't -change this the level will freeze. The code to change the Mp_Setup and the -values for the level and Mp_Setup can be found in Part One - The level -modifier. Some common Mp_Setup values are: - -01E2 - Base - 24 metal crates, 5 slide up doors and 2 lifts -020A - Felicity - 12 swing doors of which there are 4 double doors, 7 slide - across doors, 8 unbreakable panes of glass -011B - Complex - 5 metal crates -0104 - Ravine - 20 metal crates with 16 moveable and 4 unmoveable, 1 lift -0202 - Ruins - 10 faulty slide across doors with 5 double doors -01EA - Area 52 - 8 slide up doors, 12 move up/down doors which open - automatically of which there are 6 double doors, 8 breakable - panes of glass - -Choose a setup file depending on what kind of objects you want in your -multiplayer level. You don't need to have lots of objects or doors, most of the -original levels in Perfect Dark have no objects in them. Which setup file you -use has no affect on where the in-game level data is put. If you want more -objects or want to do another different level within the same arena simply -change the Mp_Setup file you're using. You won't be able to modify how doors -open, so think carefully wether you use Felicity or Area 52. - -Values for the level name are: -5687 – dataDyne Research -5689 – dataDyne Central -568B – Carrington Villa -568D – Chicago -568F – G5 Building -5691 – Area 51 -5697 – Air Base -5699 – Air Force One -569B – Crash Site -569D – Pelagic II -569F – Deep Sea -56A1 – Carrington Institute -56A3 – Attack Ship -56A5 – Skedar Ruins - -An example of a level modifier for Skedar Ruins in multiplayer would be: - -Skedar Ruins in multi using Bases Mp_Setup: -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -810801A0 01E2 810806E0 01E2 -80084BF9 002A 80085149 002A -81084BFC 56A5 8108514C 56A5 -81084C14 50FF 81085164 50FF - -Before going any further it's a good idea to test your level modifier to see if -it works. Certain combinations won't work, but most levels load with the setup -files mentioned above. - - -Creating the enablers: -~~~~~~~~~~~~~~~~~~~~~~ -Now that you have a level modifier code for your multiplayer level it's time to -make the enablers. Most of the codes in the level will be modifying the in-game -level data which is put rather randomly all over the place. The enablers allow -you to choose where the codes should be in each player amount mode and format. -This allows you to use just one set of codes instead of 24 different codes. -Lets have a look at some enablers from Carrington Villa in multi. Carrington -Villa in multiplayerputs it's in-game level data in different places between -NTSC version 1.0 and 1.1. We therefore need two different enablers for NTSC -Gameshark users. - -Carrington Villa in Multiplayer Enablers: ------------------------------------------ -NTSC v1.0 PAL NTSC PC v1.0 PAL PC -D109C7E4 0030 81099958 8042 8109940A 0060 81099958 8042 -8109940A 0040 8109995A 1750 D00714DB 0002 8109995A 17B0 -D109C7E4 0020 D00717BB 0002 8109940A 7830 D00717BB 0002 -8109940A 0000 81099958 8042 D00714DB 0003 81099958 8042 -D00714DB 0002 D00717BB 0002 8109940A 7900 D00717BB 0002 -8109940A 77D0 8109995A 8FA0 D00714DB 0004 8109995A 9000 -D00714DB 0003 D00717BB 0003 8109940A 7830 D00717BB 0003 -8109940A 78A0 81099958 8040 81099958 8040 -D00714DB 0004 D00717BB 0003 NTSC PC v1.1 D00717BB 0003 -8109940A 77D0 8109995A F070 8109940A 76F0 8109995A F0D0 - D00717BB 0004 D00714DB 0002 D00717BB 0004 -NTSC v1.1 81099958 8040 8109940A EF90 81099958 8040 -D109C7E4 0030 D00717BB 0004 D00714DB 0003 D00717BB 0004 -8109940A 76D0 8109995A EF30 8109940A F0D0 8109995A EF90 -D109C7E4 0020 D00714DB 0004 -8109940A 7690 8109940A F0D0 -D00714DB 0002 -8109940A EF30 -D00714DB 0003 -8109940A F070 -D00714DB 0004 -8109940A F070 - -Once the game has started you have to go straight to the multiplayer menu, -select your level from the arena menu without changing anything else and load -the level with one player only. You always have to do this because the in-game -level data will be put somewhere randomly. I'll refur to this as the unstable -one player mode. I use the object setup list pointer as a measure of where the -in-game level data is put. For NTSC Gameshark (version 1.1) the pointer will at -this stage be 804F06A0. Quit the level and load it again with one player. The -in-game level data will now be put slightly higher up in the memory. I'll refur -to this as the stable one player mode. Stable means that even though you load -it a third time, the level data will still be put in the same place as when it -was stable. The pointer will now be 804F06E0. For the PC versions there is no -stable or unstable placing of the level data. After the stable one player mode -you can then find where the other player amount modes will be put because the -level has stabilised in the memory and won't be put randomly somewhere else. -These are 804E8E40 for two players and 804E8D00 for three and four players -(these usually differ, but in this case it's the same for both three and four -player). - -Once you know where the in-game level data is put you then have to choose where -the final code will be. For Carrington Villa I chose 804F7D70 (which was where -the one player stable mode for NTSC Gameshark version 1.0 is). The final code -must be put higher in the memory than any of the other modes. No matter which -mode is being used the object setup list pointer has to always be 804F7D70 for -the code to work. We make sure it is by using the following code: - -In-game level data placement modifier: -NTSC PAL -81099408 XXXX 81099958 XXXX -8109940A XXXX 8109995A XXXX - -This code modifies a pointer which usually has the value 80400000 I.E the start -of the extra 4MB given by the Expansion Pak. The in-game level data will be put -at 80400000 onwards. By increasing this pointer (and only increasing it) the -level data will be put further up in the memory, and the object setup list will -line up with the codes you have activated. You can't put the level data further -down in the memory because it will overwrite what comes before 80400000. For -the unstable NTSC Gameshark one player mode (version 1.1) you need to subtract -804F06A0 from 804F7D70 (use Windows Calculator in Scientific Mode). This gives -you the value 76D0, which is what we use as a value in the code above. When the -unstable one player mode is loaded the pointer has to be 804076D0 (using the -code 8109940A 76D0). For higher values you need to use both lines of code. The -code for the stable one player mode would be 8109940A 7690, two player is -8109940A EF30 and three and four player are 8109940A F070. To make sure the -value of the in-game level data pointer is correct at the right times we use a -combination of button activators and player menu amount activators. A breakdown -of the NTSC Gameshark enabler is: - -NTSC Gameshark Version 1.1 Enabler: -D109C7E4 0030 - Activate next code when L+R is pressed -8109940A 76D0 - Move level data +76D0 -D109C7E4 0020 - Activate next code when L is pressed -8109940A 7690 - Move level data +7690 -D00714DB 0002 - Activate next code when two player menus are active -8109940A EF30 - Move level data +EF30 -D00714DB 0003 - Activate next code when three player menus are active -8109940A F070 - Move level data +F070 -D00714DB 0004 - Activate next code when four player menus are active -8109940A F070 - Move level data +F070 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Select Crash Site with one -player but before entering the level press and hold L+R for a few seconds. When -letting go make sure you pull your finger off L before R. Load the level and -quit as soon as possible. Back at the Advanced Menu press and hold L for a few -seconds. Load Crash Site with one player again and quit. The code should work -from then on. You can turn on the amount of players you want to play with. You -can also switch between different player amounts. When switching back to one -player mode you have to press L before loading the level. Allow time for each -players independent multiplayer menu to appear before loading the level. Don't -quickly add/remove another player and start the game before his menu has time -to appear/disappear. Don't use the drop out function. - -All you need to create enablers is to know where the in-game level data is put -during each mode and where you want the final code to be. As I mentioned -earlier on, finding where the level data is put can be a pain in the arse, -especially if you don't have access to one of the formats (like NTSC Gameshark -or PAL Action Replay). I have therefore compiled a list of where the level data -is put in all modes for all 14 solo only arenas! - - -The following list shows where the start of the object setup list is during -each mode. I found the values using the level modifier provided. It's the arena -files and not the setup file which decides where the in-game level data is put. -You can therefore use a different Mp_Setup than the one I used and the enablers -you make will still work. Where there are two pointers provided the first will -be version 1.0 and the second will be 1.1. - - -dataDyne Central using Bases Mp_Setup: --------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -810802F0 01E2 81080830 01E2 -80084BF9 0030 80085149 0030 - -Using Defections pads. - -Difference between cheating device and PC is -50. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -804F07A0 / 804F07A0 -Loading again (stable) -804F07D0 / 804F07D0 -Loading 2 players after stable 1 player -804EB220 / 804EBAE0 -Loading 3 players after stable 1 player -804ED4A0 / 804EDD60 -Loading 4 players after stable 1 player -804EF270 / 804EFB30 - -NTSC PC: -Loading modified level with 1 player first (unstable) -804F0780 / 804F0780 -Loading again (stable) -804F0780 / 804F0780 -Loading 2 players after stable 1 player -804EB1D0 / 804EBA90 -Loading 3 players after stable 1 player -804ED450 / 804EDD10 -Loading 4 players after stable 1 player -804EF220 / 804EFAE0 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804EE260 -Loading again (stable) -804EE290 -Loading 2 players after stable 1 player -804E6A40 -Loading 3 players after stable 1 player -804E6A40 -Loading 4 players after stable 1 player -804E8F80 - -PAL PC: -Loading modified level with 1 player first (unstable) -804EE240 -Loading again (stable) -804EE240 -Loading 2 players after stable 1 player -804E69F0 -Loading 3 players after stable 1 player -804E69F0 -Loading 4 players after stable 1 player -804E8F30 - - -dataDyne Research using Felicitys Mp_Setup: -------------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -81080398 020A 810808D8 020A -80084BF9 0033 80085149 0033 - -Using Investigations pads. - -Difference between cheating device and PC is -10. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -804FAC50 / 804FAC50 -Loading again (stable) -804FAC60 / 804FAC60 -Loading 2 players after stable 1 player -804F5720 / 804F5F70 -Loading 3 players after stable 1 player -804F79A0 / 804F8180 -Loading 4 players after stable 1 player -804F9770 / 804F9FC0 - -NTSC PC: -Loading modified level with 1 player first (unstable) -804FAC50 / 804FAC50 -Loading again (stable) -804FAC50 / 804FAC50 -Loading 2 players after stable 1 player -804F5710 / 804F5F60 -Loading 3 players after stable 1 player -804F7990 / 804F8170 -Loading 4 players after stable 1 player -804F9760 / 804F9FB0 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804F86A0 -Loading again (stable) -804F86B0 -Loading 2 players after stable 1 player -804F0ED0 -Loading 3 players after stable 1 player -804F0ED0 -Loading 4 players after stable 1 player -804F3410 - -PAL PC: -Loading modified level with 1 player first (unstable) -804F86A0 -Loading again (stable) -804F86A0 -Loading 2 players after stable 1 player -804F0EC0 -Loading 3 players after stable 1 player -804F0EC0 -Loading 4 players after stable 1 player -804F3400 - - -Carrington Villa using Felicitys Mp_Setup: ------------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -81080210 020A 81080750 020A -80084BF9 002C 80085149 002C - -Using Villa (Solo)'s pads. - -Difference between cheating device and PC is -60. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -804F7D30 / 804F06A0 -Loading again (stable) -804F7D70 / 804F06E0 -Loading 2 players after stable 1 player -804F05A0 / 804E8E40 -Loading 3 players after stable 1 player -804F04D0 / 804E8D00 -Loading 4 players after stable 1 player -804F05A0 / 804E8D00 - -NTSC PC: -Loading modified level with 1 player first (unstable) -804F7D10 / 804F0680 -Loading again (stable) -804F7D10 / 804F0680 -Loading 2 players after stable 1 player -804F0540 / 804E8DE0 -Loading 3 players after stable 1 player -804F0470 / 804E8CA0 -Loading 4 players after stable 1 player -804F0540 / 804E8CA0 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804D6620 -Loading again (stable) -804D6620 -Loading 2 players after stable 1 player -804CEDD0 -Loading 3 players after stable 1 player -804E8CC0 -Loading 4 players after stable 1 player -804E8E40 - -PAL PC: -Loading modified level with 1 player first (unstable) -804D65C0 -Loading again (stable) -804D65C0 (804D6600 coming back from 3 or 4 player) -Loading 2 players after stable 1 player -804CED70 -Loading 3 players after stable 1 player -804E8CA0 -Loading 4 players after stable 1 player -804E8DE0 -Can switch between 1 and 2 players! -Don't switch back from 3 or 4 player! - - -Chicago using Complexes Mp_Setup: ---------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -8107FEC8 011B 81080408 011B -80084BF9 001D 80085149 001D - -Using Chicago's pads. - -Difference between cheating device and PC is -50. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -804E3B50 / 804E3B50 -Loading again (stable) -804E3B70 / 804E3B70 -Loading 2 players after stable 1 player -804DE580 / 804DEE10 -Loading 3 players after stable 1 player -804E0800 / 804E1100 -Loading 4 players after stable 1 player -804E2610 / 804E2ED0 - -NTSC PC: -Loading modified level with 1 player first (unstable) -804E3B20 / 804E3B20 -Loading again (stable) -804E3B20 / 804E3B20 -Loading 2 players after stable 1 player -804DE530 / 804DEDC0 -Loading 3 players after stable 1 player -804E07B0 / 804E10B0 -Loading 4 players after stable 1 player -804E25C0 / 804E2E80 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804E15A0 -Loading again (stable) -804E15C0 -Loading 2 players after stable 1 player -804D9DE0 -Loading 3 players after stable 1 player -804D9DE0 -Loading 4 players after stable 1 player -804DC320 - -PAL PC: -Loading modified level with 1 player first (unstable) -804E1570 -Loading again (stable) -804E1570 -Loading 2 players after stable 1 player -804D9D90 -Loading 3 players after stable 1 player -804D9D90 -Loading 4 players after stable 1 player -804DC2D0 - - -G5 Building (Solo) using Felicitys Mp_Setup: --------------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -8107FF00 020A 81080440 020A -80084BF9 001E 80085149 001E - -Using G5 Building (Solo)'s pads. - -Difference between cheating device and PC is -30. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -804E6EB0 / 804E6EB0 -Loading again (stable) -804E6EC0 / 804E6EC0 -Loading 2 players after stable 1 player -804E1940 / 804E21D0 -Loading 3 players after stable 1 player -804E3BC0 / 804E4450 -Loading 4 players after stable 1 player -804E5990 / 804E6220 - -NTSC PC: -Loading modified level with 1 player first (unstable) -804E6E90 / 804E6E90 -Loading again (stable) -804E6E90 / 804E6E90 -Loading 2 players after stable 1 player -804E1910 / 804E21A0 -Loading 3 players after stable 1 player -804E3B90 / 804E4420 -Loading 4 players after stable 1 player -804E5960 / 804E61F0 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804E4900 -Loading again (stable) -804E4910 -Loading 2 players after stable 1 player -804DD130 -Loading 3 players after stable 1 player -804DD0C0 -Loading 4 players after stable 1 player -804DF600 - -PAL PC: -Loading modified level with 1 player first (unstable) -804E48E0 -Loading again (stable) -804E48E0 -Loading 2 players after stable 1 player -804DD100 -Loading 3 players after stable 1 player -804DD090 -Loading 4 players after stable 1 player -804DF5D0 - - -Area 51 using Bases Mp_Setup: ------------------------------ -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -81080408 01E2 81080948 01E2 -80084BF9 0035 80085149 0035 - -Using Rescue's pads. - -Difference between cheating device and PC is -B0. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -8052A120 / 8052A120 -Loading again (stable) -8052A120 / 8052A120 -Loading 2 players after stable 1 player -805246A0 / 805246A0 -Loading 3 players after stable 1 player -805262F0 / 80526B70 -Loading 4 players after stable 1 player -80526B70 / 80526B70 - -NTSC PC: -Loading modified level with 1 player first (unstable) -8052A070 / 8052A070 -Loading again (stable) -8052A070 / 8052A070 -Loading 2 players after stable 1 player -805245F0 / 805245F0 -Loading 3 players after stable 1 player -80526240 / 80526AC0 -Loading 4 players after stable 1 player -80526AC0 / 80526AC0 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -80525360 -Loading again (stable) -80525360 -Loading 2 players after stable 1 player -8051DA40 -Loading 3 players after stable 1 player -80520D90 -Loading 4 players after stable 1 player -80523330 - -PAL PC: -Loading modified level with 1 player first (unstable) -805252B0 -Loading again (stable) -805252B0 -Loading 2 players after stable 1 player -8051D990 -Loading 3 players after stable 1 player -80520CE0 -Loading 4 players after stable 1 player -80523280 - - -Air Base using Bases Mp_Setup: ------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -810800F8 01E2 81080638 01E2 -80084BF9 0027 80085149 0027 - -Using Air Bases pads. - -Difference between cheating device and PC is -50. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -80501310 / 80501310 -Loading again (stable) -80501330 / 80501330 -Loading 2 players after stable 1 player -804FBDD0 / 804FC640 -Loading 3 players after stable 1 player -804FE050 / 804FE8C0 -Loading 4 players after stable 1 player -804FFE20 / 80500690 - -NTSC PC: -Loading modified level with 1 player first (unstable) -805012E0 / 805012E0 -Loading again (stable) -805012E0 / 805012E0 -Loading 2 players after stable 1 player -804FBD80 / 804FC5F0 -Loading 3 players after stable 1 player -804FE000 / 804FE870 -Loading 4 players after stable 1 player -804FFDD0 / 80500640 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804FEDD0 -Loading again (stable) -804FEDF0 -Loading 2 players after stable 1 player -804F75A0 -Loading 3 players after stable 1 player -804F75A0 -Loading 4 players after stable 1 player -804F9AE0 - -PAL PC: -Loading modified level with 1 player first (unstable) -804FEDA0 -Loading again (stable) -804FEDA0 -Loading 2 players after stable 1 player -804F7550 -Loading 3 players after stable 1 player -804F7550 -Loading 4 players after stable 1 player -804F9A90 - - -Air Force One using Felicitys Mp_Setup: ---------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -81080328 020A 81080868 020A -80084BF9 0031 80085149 0031 - -Using Air Force Ones pads. - -Difference between cheating device and PC is -40. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -805170D0 / 805170D0 -Loading again (stable) -80517110 / 80517110 -Loading 2 players after stable 1 player -80511C40 / 80512420 -Loading 3 players after stable 1 player -80513DC0 / 805146A0 -Loading 4 players after stable 1 player -80515C90 / 80516470 - -NTSC PC: -Loading modified level with 1 player first (unstable) -805170D0 / 805170D0 -Loading again (stable) -805170D0 / 805170D0 -Loading 2 players after stable 1 player -80511C00 / 805123E0 -Loading 3 players after stable 1 player -80513D80 / 80514660 -Loading 4 players after stable 1 player -80515C50 / 80516430 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -80514B20 -Loading again (stable) -80514B60 -Loading 2 players after stable 1 player -8050D310 -Loading 3 players after stable 1 player -8050D380 -Loading 4 players after stable 1 player -8050F8C0 - -PAL PC: -Loading modified level with 1 player first (unstable) -80514B20 -Loading again (stable) -80514B20 -Loading 2 players after stable 1 player -8050D2D0 -Loading 3 players after stable 1 player -8050D340 -Loading 4 players after stable 1 player -8050F880 - - -Crash Site using Complexes Mp_Setup: ------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -8107FE90 011B 810803D0 011B -80084BF9 001C 80085149 001C - -Using Crash Sites pads. - -Difference between cheating device and PC is -50. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -80502A00 / 80502A00 -Loading again (stable) -80502A50 / 80502A50 -Loading 2 players after stable 1 player -804FD4D0 / 804FDD40 -Loading 3 players after stable 1 player -804FF750 / 804FFF50 -Loading 4 players after stable 1 player -805014B0 / 80501D90 - -NTSC PC: -Loading modified level with 1 player first (unstable) -80502A00 / 80502A00 -Loading again (stable) -80502A00 / 80502A00 -Loading 2 players after stable 1 player -804FD480 / 804FDCF0 -Loading 3 players after stable 1 player -804FF700 / 804FFF00 -Loading 4 players after stable 1 player -80501460 / 80501D40 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -805004E0 -Loading again (stable) -80500510 -Loading 2 players after stable 1 player -804F8C30 -Loading 3 players after stable 1 player -804F8CC0 -Loading 4 players after stable 1 player -804FB200 - -PAL PC: -Loading modified level with 1 player first (unstable) -805004C0 -Loading again (stable) -805004C0 -Loading 2 players after stable 1 player -804F8BE0 -Loading 3 players after stable 1 player -804F8C70 -Loading 4 players after stable 1 player -804FB1B0 - - -Pelagic II using Felicitys Mp_Setup: ------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -8107FFA8 020A 810804E8 020A -80084BF9 0021 80085149 0021 - -Using Pelagic II's pads. - -Difference between cheating device and PC is -20. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -80530130 / 80530130 -Loading again (stable) -80530140 / 80530140 -Loading 2 players after stable 1 player -8052AB90 / 8052B450 -Loading 3 players after stable 1 player -8052CE10 / 8052D6D0 -Loading 4 players after stable 1 player -8052EB50 / 8052F4A0 - -NTSC PC: -Loading modified level with 1 player first (unstable) -80530120 / 80530120 -Loading again (stable) -80530120 / 80530120 -Loading 2 players after stable 1 player -8052AB70 / 8052B430 -Loading 3 players after stable 1 player -8052CDF0 / 8052D6B0 -Loading 4 players after stable 1 player -8052EB30 / 8052F480 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -8052DBF0 -Loading again (stable) -8052DC00 -Loading 2 players after stable 1 player -805263B0 -Loading 3 players after stable 1 player -805263B0 -Loading 4 players after stable 1 player -805288F0 - -PAL PC: -Loading modified level with 1 player first (unstable) -8052DBE0 -Loading again (stable) -8052DBE0 -Loading 2 players after stable 1 player -80526390 -Loading 3 players after stable 1 player -80526390 -Loading 4 players after stable 1 player -805288D0 - - -Deep Sea using Ravines Mp_Setup: --------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -810804B0 0104 810809F0 0104 -80084BF9 0038 80085149 0038 - -Using Deep Sea's pads. - -Difference between cheating device and PC is -40. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -80534E10 / 80534E10 -Loading again (stable) -80534E30 / 80534E30 -Loading 2 players after stable 1 player -8052F880 / 80530140 -Loading 3 players after stable 1 player -80531A30 / 805323C0 -Loading 4 players after stable 1 player -805338D0 / 80534190 - -NTSC PC: -Loading modified level with 1 player first (unstable) -80534DF0 / 80534DF0 -Loading again (stable) -80534DF0 / 80534DF0 -Loading 2 players after stable 1 player -8052F840 / 80530100 -Loading 3 players after stable 1 player -805319F0 / 80532380 -Loading 4 players after stable 1 player -80533890 / 80534150 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -805328D0 -Loading again (stable) -805328F0 -Loading 2 players after stable 1 player -8052B0A0 -Loading 3 players after stable 1 player -8052B0A0 -Loading 4 players after stable 1 player -8052D5E0 - -PAL PC: -Loading modified level with 1 player first (unstable) -805328B0 -Loading again (stable) -805328B0 -Loading 2 players after stable 1 player -8052B060 -Loading 3 players after stable 1 player -8052B060 -Loading 4 players after stable 1 player -8052D5A0 - - -Carrington Institute using Bases Mp_Setup: ------------------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -81080248 01E2 81080788 01E2 -80084BF9 002D 80085149 002D - -Using Defense's pads. - -Difference between cheating device and PC is -60. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -804F34C0 / 804F34C0 -Loading again (stable) -804F3500 / 804F3500 -Loading 2 players after stable 1 player -804EDF70 / 804EE810 -Loading 3 players after stable 1 player -804F01F0 / 804F0A90 -Loading 4 players after stable 1 player -804F1FC0 / 804F2860 - -NTSC PC: -Loading modified level with 1 player first (unstable) -804F34A0 / 804F34A0 -Loading again (stable) -804F34A0 / 804F34A0 -Loading 2 players after stable 1 player -804EDF10 / 804EE7B0 -Loading 3 players after stable 1 player -804F0190 / 804F0A30 -Loading 4 players after stable 1 player -804F1F60 / 804F2800 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804F0F80 -Loading again (stable) -804F0FC0 -Loading 2 players after stable 1 player -804E9770 -Loading 3 players after stable 1 player -804E9770 -Loading 4 players after stable 1 player -804EBCB0 - -PAL PC: -Loading modified level with 1 player first (unstable) -804F0F60 -Loading again (stable) -804F0F60 -Loading 2 players after stable 1 player -804E9710 -Loading 3 players after stable 1 player -804E9710 -Loading 4 players after stable 1 player -804EBC50 - - -Attack Ship using Bases Mp_Setup: ---------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -810803D0 01E2 81080910 01E2 -80084BF9 0034 80085149 0034 - -Using Attack Ships pads. - -Difference between cheating device and PC is -70. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -8053A090 / 8053A090 -Loading again (stable) -8053A0D0 / 8053A0D0 -Loading 2 players after stable 1 player -80534BB0 / 80535360 -Loading 3 players after stable 1 player -80536E30 / 80537660 -Loading 4 players after stable 1 player -80538C00 / 805393B0 - -NTSC PC: -Loading modified level with 1 player first (unstable) -8053A060 / 8053A060 -Loading again (stable) -8053A060 / 8053A060 -Loading 2 players after stable 1 player -80534B40 / 805352F0 -Loading 3 players after stable 1 player -80536DC0 / 805375F0 -Loading 4 players after stable 1 player -80538B90 / 80539340 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -80537B50 -Loading again (stable) -80537B90 -Loading 2 players after stable 1 player -805302C0 -Loading 3 players after stable 1 player -80530340 -Loading 4 players after stable 1 player -80532800 - -PAL PC: -Loading modified level with 1 player first (unstable) -80537B20 -Loading again (stable) -80537B20 -Loading 2 players after stable 1 player -80530250 -Loading 3 players after stable 1 player -805302D0 -Loading 4 players after stable 1 player -80532790 - - -Skedar Ruins using Bases Mp_Setup: ----------------------------------- -NTSC PAL -810800B8 0001 810805F8 0001 -810800BA 0184 810805FA 0184 -810800BC 0183 810805FC 0183 -810800BE 013C 810805FE 013C -810801A0 01E2 810806E0 01E2 -80084BF9 002A 80085149 002A - -Using Skedar Ruins pads. - -Difference between cheating device and PC is -70. - -NTSC Gameshark: -Loading modified level with 1 player first (unstable) -804FFD20 / 804FFD20 -Loading again (stable) -804FFD50 / 804FFD50 -Loading 2 players after stable 1 player -804FA860 / 804FB060 -Loading 3 players after stable 1 player -804FCAE0 / 804FD2E0 -Loading 4 players after stable 1 player -804FE8B0 / 804FF020 - -NTSC PC: -Loading modified level with 1 player first (unstable) -804FFCE0 / 804FFCE0 -Loading again (stable) -804FFCE0 / 804FFCE0 -Loading 2 players after stable 1 player -804FA7F0 / 804FAFF0 -Loading 3 players after stable 1 player -804FCA70 / 804FD270 -Loading 4 players after stable 1 player -804FE840 / 804FEFB0 - -PAL Action Replay: -Loading modified level with 1 player first (unstable) -804FD7E0 -Loading again (stable) -804FD810 -Loading 2 players after stable 1 player -804F5FC0 -Loading 3 players after stable 1 player -804F5F30 -Loading 4 players after stable 1 player -804F8470 - -PAL PC: -Loading modified level with 1 player first (unstable) -804FD7A0 -Loading again (stable) -804FD7A0 -Loading 2 players after stable 1 player -804F5F50 -Loading 3 players after stable 1 player -804F5EC0 -Loading 4 players after stable 1 player -804F8400 - - -I'm now going to show you how to create a totally new set of enablers for that -Skedar Ruins in multi level modifier I made earlier. The object setup list -locations for all modes are: - -Loading modified level with 1 player first (unstable) -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FFD20 804FFCE0 804FD7E0 804FD7A0 -NTSC v1.1 NTSC PC v1.1 -804FFD20 804FFCE0 - -Loading again (stable) -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FFD50 804FFCE0 804FD810 804FD7A0 -NTSC v1.1 NTSC PC v1.1 -804FFD50 804FFCE0 - -Loading 2 players after stable 1 player -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FA860 804FA7F0 804F5FC0 804F5F50 -NTSC v1.1 NTSC PC v1.1 -804FB060 804FAFF0 - -Loading 3 players after stable 1 player -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FCAE0 804FCA70 804F5F30 804F5EC0 -NTSC v1.1 NTSC PC v1.1 -804FD2E0 804FD270 - -Loading 4 players after stable 1 player -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FE8B0 804FE840 804F8470 804F8400 -NTSC v1.1 NTSC PC v1.1 -804FF020 804FEFB0 - -The next thing we need to do is to decide on where the final code is going to -be put. The highest of all the addresses is the NTSC Gameshark mode (804FFD50). -Before we choose this however lets look at what else should be considered. It's -entirely possible to make in-game level data modifying codes that work in -several different arenas. Below you will find a list of the highest addresses -from all arenas. You will notice that some of them put their level data near by -one another. - -dataDyne Central - 804F07D0 -dataDyne Research - 804FAC60 -Carrington Villa - 804F7D70 (Put at 804F7D70) -Chicago - 804E3B70 -G5 Building - 804E6EC0 -Area 51 - 8052A120 -Air Base - 80501330 -Air Force One - 80517110 -Crash Site - 80502A50 (Put at 80502A50) -Pelagic II - 80530140 -Deep Sea - 80534E30 -Carrington Institute - 804F3500 -Attack Ship - 8053A0D0 -Skedar Ruins - 804FFD50 - -Skedar Ruins and dataDyne Research put their level data at 804FFD50 and -804FAC60. You could put the final code at 804FFD50 and make enablers for both -levels that put the object setup list at 804FFD50. This would save you having -to make two different codes for the two levels. The only thing you would have -to change is the pads values in the object moving codes. If the same setup file -is being used in both levels things get easier, but if the setup is different -we need to make two different sets of object codes. If you can choose where in -the memory the object setup list is put, why not just have every level put it -at 80540000? If you did then most of the levels wouldn't work properly. You -shouldn't put the final code further than 6000 away from where it's originally -meant to be. - -Back to the Skedar Ruins in multiplayer code, for sake of clarity lets put the -final code at 80500000. We next have to find the difference between 80500000 -and all the other addresses: - -Loading modified level with 1 player first (unstable) -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FFD20 +2E0 804FFCE0 +320 804FD7E0 +2820 804FD7A0 +2860 -NTSC v1.1 NTSC PC v1.1 -804FFD20 +2E0 804FFCE0 +320 - -Loading again (stable) -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FFD50 +2B0 804FFCE0 +320 804FD810 +27F0 804FD7A0 +2860 -NTSC v1.1 NTSC PC v1.1 -804FFD50 +2B0 804FFCE0 +320 - -Loading 2 players after stable 1 player -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FA860 +57A0 804FA7F0 +5810 804F5FC0 +A040 804F5F50 +A0B0 -NTSC v1.1 NTSC PC v1.1 -804FB060 +4FA0 804FAFF0 +5010 - -Loading 3 players after stable 1 player -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FCAE0 +3520 804FCA70 +3590 804F5F30 +A0D0 804F5EC0 +A140 -NTSC v1.1 NTSC PC v1.1 -804FD2E0 +2D20 804FD270 +2D90 - -Loading 4 players after stable 1 player -NTSC v1.0 NTSC PC v1.0 PAL PAL PC -804FE8B0 +1750 804FE840 +17C0 804F8470 +7B90 804F8400 +7C00 -NTSC v1.1 NTSC PC v1.1 -804FF020 +FE0 804FEFB0 +1050 - -We can now make the enablers for all modes: -NTSC v1.0 PAL NTSC PC v1.0 PAL PC -D109C7E4 0030 D1099FB0 0030 8109940A 0320 8109995A 2860 -8109940A 02E0 8109995A 2820 D00714DB 0002 D00717BB 0002 -D109C7E4 0020 D1099FB0 0020 8109940A 5810 8109995A A0B0 -8109940A 02B0 8109995A 27F0 D00714DB 0003 D00717BB 0003 -D00714DB 0002 D00717BB 0002 8109940A 3590 8109995A A140 -8109940A 57A0 8109995A A040 D00714DB 0004 D00717BB 0004 -D00714DB 0003 D00717BB 0003 8109940A 17C0 8109995A 7C00 -8109940A 3520 8109995A A0D0 -D00714DB 0004 D00717BB 0004 NTSC v1.1 -8109940A 1750 8109995A 7B90 8109940A 0320 - D00714DB 0002 -NTSC v1.1 8109940A 5010 -D109C7E4 0030 D00714DB 0003 -8109940A 02E0 8109940A 2D90 -D109C7E4 0020 D00714DB 0004 -8109940A 02B0 8109940A 1050 -D00714DB 0002 -8109940A 4FA0 -D00714DB 0003 -8109940A 2D20 -D00714DB 0004 -8109940A 0FE0 - -The level must be loaded first with one player, and then with one player again. -For the cheating device version you need to press L+R before the first time and -L before the second time. Once you've loaded the level twice you can select -other player amount modes. You should be able to switch between player amount -modes without the game freezing. - -These enablers will work for the most part, but some of the modes may not work -properly as you might expect. They need to be tested as well to see if they -work. The final complete code may change the method of which the enablers work, -so there's no point in testing them until we've finished the code. For now -these will do. If you experience any problems at this stage jump to "Testing -the code" to solve them. - -Now would be a good time to make a savestate using the enabler while the object -setup list is at 80500000. You'll be able to use such a savestate to create the -codes without having to turn the game on all the time. - - -Plotting the pads in the level: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Now that you know where the codes that modify the in-game level data will be -put, you can begin making codes that modify it. We need to know where the pads -are so the first thing we want to do is create a code that helps us to find the -pads. It's a good idea to make a rough but accurate sketch of the arena from a -top down view. As you find the pads you can draw their numbers on this sketch. -You're going to be finding the pads by using the objects in Bases Mp_Setup, so -change your level modifier code so that it uses Base. By giving the objects (59 -in total) each their own object image and placing them at pads around the arena -you can run around identifying where each pad is, finding 59 at a time. - -In the example I'm going to show you here I'll be finding the pads in Skedar -Ruins. From Part One we can see that Skedar Ruins has 152 (in hex) pads. Thats -338 in decimal. The final code is put at 80500000 onwards and I need codes that -modify the weapons, ammo crates and objects. All these codes will be modifying -the object setup list. In the object setup list each object has initial data -about it which is used when the level is loaded. The list isn't used (much) -when the level is running, so for the codes to take effect you need to re-load -the level. Bases setup has two lifts, five doors and 24 metal crates. We won't -be using the lifts. - -All objects use the same method when being represented on the object setup -list, but they use different values. Certain objects take up more memory than -others because they have more information. In the following code extraction you -will see the code that represents the first weapon from Base, starting at the -beginning of the object setup list which is 80500000: - -80500000 - 0100 0408 00F5 002C 0000 0001 0000 0000 -80500010 - 0000 0000 8050 BDA0 8050 8850 BDCC 8000 -80500020 - 0000 0000 0000 0000 0000 0000 3DCC 8000 -80500030 - 0000 0000 0000 0000 0000 0000 BDCC 8000 -80500040 - 0000 0000 0000 0000 0000 0000 0000 03E8 -80500050 - 0806 00A7 0806 00A7 0543 0000 0200 0000 -80500060 - 00FF FFFF 0000 0000 - -First comes the value 0100. This is almost always 0100 but can sometimes be -0099 for ammo crates. You don't need to change this. The next value is 0408. 04 -is the local size modifier which will modify the size of just this particular -weapon. 08 is the object type, which in this case is 08 for weapon. Next up -comes the in-game object image value. You'll find a list of the in-game image -values in the Resources section. This particular weapon turns out to be a -Falcon 2 (00F5). Take note that this modifies just the weapons image and not -the weapon itself. The next value is the most important one because it's the -pad the Falcon 2 is put at (002C). Changing this will put the Falcon 2 -somewhere else in the arena. Right down at the bottom you will find the value -0200. This is the weapon type value, so changing this will change the weapon -type (but not the weapons image). You'll also find a list of weapon types in -the Resources section. All the other values are relativly useless for now. The -pointer 8050BDA0 points to where the Falcon 2 is on the real time object -coordinates list. - -All objects have the same first 16bit digits (but with different values). This -makes it easy to find an object on the object setup list. If you know it's -image value you can do a search for that. If you know which pad it's put at you -can find it by searching for its pad number. For now all we're going to be -modifying is the object image and object pad position. In Bases Mp_Setup the -objects come in the following order, and are put at the pads shown next to -them: - -Pad - Object - Object in-game image value: -2C - Weapon 1.1 -36 - Ammo Crate - C1 -37 - Ammo Crate -2D - Weapon 2.1 -38 - Ammo Crate -39 - Ammo Crate -2E - Weapon 3.1 -3A - Ammo Crate -3B - Ammo Crate -2F - Weapon 4.1 -3C - Ammo Crate -3D - Ammo Crate -30 - Weapon 5 -3E - Ammo Crate -3F - Ammo Crate -31 - Weapon 6 -40 - Ammo Crate -41 - Ammo Crate -32 - Weapon 1.2 -42 - Ammo Crate -43 - Ammo Crate -33 - Weapon 2.2 -44 - Ammo Crate -45 - Ammo Crate -34 - Weapon 3.2 -46 - Ammo Crate -47 - Ammo Crate -35 - Weapon 4.2 -48 - Ammo Crate -49 - Ammo Crate -4C - Lift - 2E (Lift moves between 4C and 4D) -4B - Lift (Lift moves between 4B and 4A) -4E - Door (slide up) - BF -4F - Door (slide up) -51 - Door (slide up) -50 - Door (slide up) -52 - Door (slide up) -53 - Metal Crate - 21 -54 - Metal Crate -55 - Metal Crate -56 - Metal Crate -57 - Metal Crate -58 - Metal Crate -59 - Metal Crate -5A - Metal Crate -5B - Metal Crate -5C - Metal Crate -5D - Metal Crate -5E - Metal Crate -5F - Metal Crate -60 - Metal Crate -61 - Metal Crate -62 - Metal Crate -63 - Metal Crate -64 - Metal Crate -65 - Metal Crate -66 - Metal Crate -67 - Metal Crate -68 - Metal Crate -69 - Metal Crate -6A - Metal Crate - - -We'll start by making codes that modify the weapons. There are 6 different -weapons put at 10 different places. That means that there are going to be 6 -different weapon object images. We have to change the 4 weapons that are -doubles, so that we don't end up with two objects that look the same. To -change them we need to change both the object image and the weapon type. We -need to load the level with the following weapon settings: - -1: Falcon 2 (Silencer) - 00FB -2: Falcon 2 (Scope) - 00FC -3: Magsec 4 - 00F6 -4: Mauler - 00F7 -5: Phoenix - 00FA -6: DY357 Magnum - 00F8 - -The first thing we want to do is make codes that move all of the 10 different -weapons. To do this, search for their weapon image, followed by the pad they -are put at (like 00FB002C for weapon 1.1, or 00FC002D for weapon 2.1) within -the object setup list. Between each weapon is 1B8 8bit values, so an alternate -way to find the codes is add 1B8 to the weapon code to find the next weapon. - -Move weapons into pads: -81500006 0XXX - Weapon 1.1 - Falcon 2 (Silencer) -815001BE 0XXX - Weapon 2.1 - Falcon 2 (Scope) -81500376 0XXX - Weapon 3.1 - Magsec 4 -8150052E 0XXX - Weapon 4.1 - Mauler -815006E6 0XXX - Weapon 5 - Phoenix -8150089E 0XXX - Weapon 6 - DY357 Magnum -81500A56 0XXX - Weapon 1.2 - Farsight XR-20 -81500C0E 0XXX - Weapon 2.2 - X-ray Scanner -81500DC6 0XXX - Weapon 3.2 - Horizon Scanner -81500F7E 0XXX - Weapon 4.2 - CamSpy - -To change the doubles we need to change both the weapon image and weapon type. -If we change just the weapon type, the weapon image will automatically become -0000 (Ceiling dronegun), and will block everything in sight with a gray haze. -While we're at it we might as well turn the four weapons into something useful. -To change the weapon image, just change the 16bit value before the pad number -(subtract 2 from the address of the pad modifier). To change the weapon type, -add 56 to the pad modifier. - -Weapon / Item: Weapon type: Object image: -Farsight XR-20 0016 010B -X-ray Scanner 002F 019E -Horizon Scanner 0032 0140 -CamSpy 002E 01A0 - -Change double weapons into something useful: -81500A54 010B -81500AAC 1600 -81500C0C 019E -81500C64 2F00 -81500DC4 01A0 -81500E1C 2E00 -81500F7C 0140 -81500FD4 3200 - - -Moving ammo crates and metal crates is pretty easy. Just find the object image -number and pad. Ammo crates are object image number 00C1, and metal crates are -0021. We have to change both the object image and pad. - -Ammo crates come is sets of two. Between the first two is A8 8bit values, and -between the second and third is 110. Between the third and fourth is A8, and -the fourth and fith have 110 between them, and so on and so on... Add the -values A8 or 110 onto the last ammo crate code to easily find codes for all 20 -ammo crates. To find the first one, do a search for 00C10036. Check the last -code (00C10049) to see if the calculations were correct. - -Move ammo crates: -8150006E 0XXX -81500116 0XXX -81500226 0XXX -815002CE 0XXX -815003DE 0XXX -81500486 0XXX -81500596 0XXX -8150063E 0XXX -8150074E 0XXX -815007F6 0XXX -81500906 0XXX -815009AE 0XXX -81500ABE 0XXX -81500B66 0XXX -81500C76 0XXX -81500D1E 0XXX -81500E2E 0XXX -81500ED6 0XXX -81500FE6 0XXX -8150108E 0XXX - -To make the object image mods, simply subtract 2 from the pad mod of the -given ammo crate. - -Change ammo crate object images: -8150006C 0XXX -81500114 0XXX -81500224 0XXX -815002CC 0XXX -815003DC 0XXX -81500484 0XXX -81500594 0XXX -8150063C 0XXX -8150074C 0XXX -815007F4 0XXX -81500904 0XXX -815009AC 0XXX -81500ABC 0XXX -81500B64 0XXX -81500C74 0XXX -81500D1C 0XXX -81500E2C 0XXX -81500ED4 0XXX -81500FE4 0XXX -8150108C 0XXX - -To find the first metal crate, do a search for 00210053. Between metal crates -there are 5C 8bit values, so add 5C onto each code to get the next metal crate -pad mod. The last metal crate can be found by searching for 0021006A. - -Move metal crates: -815016CA 0XXX -81501726 0XXX -81501782 0XXX -815017DE 0XXX -8150183A 0XXX -81501896 0XXX -815018F2 0XXX -8150194E 0XXX -815019AA 0XXX -81501A06 0XXX -81501A62 0XXX -81501ABE 0XXX -81501B1A 0XXX -81501B76 0XXX -81501BD2 0XXX -81501C2E 0XXX -81501C8A 0XXX -81501CE6 0XXX -81501D42 0XXX -81501D9E 0XXX -81501DFA 0XXX -81501E56 0XXX -81501EB2 0XXX -81501F0E 0XXX - -To make the object image mods, simply subtract 2 from the pad mod of the -given metal crate. - -Change metal crate images: -815016C8 0XXX -81501724 0XXX -81501780 0XXX -815017DC 0XXX -81501838 0XXX -81501894 0XXX -815018F0 0XXX -8150194C 0XXX -815019A8 0XXX -81501A04 0XXX -81501A60 0XXX -81501ABC 0XXX -81501B18 0XXX -81501B74 0XXX -81501BD0 0XXX -81501C2C 0XXX -81501C88 0XXX -81501CE4 0XXX -81501D40 0XXX -81501D9C 0XXX -81501DF8 0XXX -81501E54 0XXX -81501EB0 0XXX -81501F0C 0XXX - - -The lifts will be put at pads 4C and 4B, and will be object image number 2E. To -find them easily on the object setup list simply do a search for 002E004C or -002E004B. We don't want to use the lifts so we remove them by making their -local size 00 and object type 08: - -Remove lifts: -81501142 0008 -815011E6 0008 - -We can use the five doors as well, but they need to be turned into objects -first. We do this by making their size 0C and their object type 15. Once we've -done this we can change their image and move them. To find the first door, do a -search for 00BF004E. - -Change doors into objects: -8150127A 0C15 -81501356 0C15 -81501432 0C15 -8150150E 0C15 -815015EA 0C15 - -Move doors: -8150127E 0XXX -8150135A 0XXX -81501436 0XXX -81501512 0XXX -815015EE 0XXX - -Change door object images: -8150127C 0XXX -81501358 0XXX -81501434 0XXX -81501510 0XXX -815015EC 0XXX - - -We now have all the codes we need to get started. The next thing that needs to -be done is to assign an object image to all the 59 objects. The best object -images to use are the weapon item images. These are neither to small, nor to -big to be in the way. You can only use about 30 weapon images, the rest has to -be other small sized items. Most of the object images that fit are: - -01A0 - CamSpy -00F5 - Falcon 2 -00F4 - Shield -00F6 - Magsec 4 -00F7 - Mauler -00F8 - DY357 Magnum -00FA - Phoenix -00FB - Falcon 2 Silencer -00FC - Falcon 2 Scope -00FD - CMP150 -010D - Crossbow -010E - Tranquilizer / Psychosis Gun -0117 - PP9i (PP7) -0118 - CC13 (Dostovei) -012F - Combat boost pills -019E - X-ray Scanner -0140 - HorizonScanner -00FE - AR34 -00FF - Dragon -0101 - K7 Avenger -0102 - Cyclone -0103 - Callisto NTG -0104 - RCP-120 -0105 - Laptop Gun -0106 - Shotgun -0107 - Reaper -0108 - Rocket Launcher -0109 - Devastator -010A - Slayer -010B - Farsight XR-20 -010C - Sniper Rifle -0119 - KLO1313 (Klobb) -011A - KF7 Special (KF7 Soviet) -011B - ZZT (9mm) -011C - DMC (Deutch) -011D - AR33 -011E - RC-P45 (RC-P90) -0011 - Briefcase -0017 - Area 51 Control Panel / Button -0065 - Area 51 Trashcan -0157 - Laptop Sentry dronegun -015B - Area 51 Lab cloths -0182 - BETA Body armour (Looks like the one from GoldenEye) -008C - Hoverbot (Orange) -00EC - Air Base Stewardesses Bag -0016 - BETA Flag from GoldenEye -003E - Plant, white base -00AF - Security Camera -0193 - BETA Touch That Box, Box -003C - Plant, tall round leaves -003D - Plant, short brown base -0144 - Deep Sea Ceiling dronegun -00BA - Area 51 Explodable container -00C1 - Ammo crate -00E2 - Metal barrel -015A - Skedar Kings holy sceptre (Big King Rocket image) -01A2 - Air Force One Table -0185 - Air Force One Lamp -0186 - Air Force One Toilet - -This list is ordered with the smallest object image at the top, and gradually -bigger images the further down you go. Use the big objects for ammo crates, and -the smaller objects for metal crates (remember that you can't walk through the -objects that were originally metal crates). Also take note that the weapons and -ammo crates won't get resized if the pad tries to reshape them. Metal crates -will get resized and reshaped, so try to give them images you can easily tell -the difference between, or recognise easily. - -Weapons images: -Weapon 1.1 - Falcon 2 (Silencer) -Weapon 2.1 - Falcon 2 (Scope) -Weapon 3.1 - Magsec 4 -Weapon 4.1 - Mauler -Weapon 5 - Phoenix -Weapon 6 - DY357 Magnum -Weapon 1.2 - Farsight XR-20 -Weapon 2.2 - X-ray Scanner -Weapon 3.2 - Horizon Scanner -Weapon 4.2 - CamSpy -Ammo crate images: -8150006C 0065 - Area 51 Trashcan -81500114 0157 - Laptop Sentry dronegun -81500224 015B - Area 51 Lab cloths -815002CC 0182 - BETA Body armour (Looks like the one from GoldenEye) -815003DC 008C - Hoverbot (Orange) -81500484 00EC - Air Base Stewardesses Bag -81500594 0016 - BETA Flag from GoldenEye -8150063C 003E - Plant, white base -8150074C 00AF - Security Camera -815007F4 0193 - BETA Touch That Box, Box -81500904 003C - Plant, tall round leaves -815009AC 003D - Plant, short brown base -81500ABC 0144 - Deep Sea Ceiling dronegun -81500B64 00BA - Area 51 Explodable container -81500C74 00C1 - Ammo crate -81500D1C 00E2 - Metal barrel -81500E2C 015A - Skedar Kings holy sceptre (Big King Rocket image) -81500ED4 01A2 - Air Force One Table -81500FE4 0185 - Air Force One Lamp -8150108C 0186 - Air Force One Toilet -Metal crate images: -815016C8 00F5 - Falcon 2 -81501724 00F4 - Shield -81501780 00FD - CMP150 -815017DC 010D - Crossbow -81501838 010E - Tranquilizer / Psychosis Gun -81501894 0117 - PP9i (PP7) -815018F0 0118 - CC13 (Dostovei) -8150194C 012F - Combat boost pills -815019A8 00FE - AR34 -81501A04 00FF - Dragon -81501A60 0101 - K7 Avenger -81501ABC 0102 - Cyclone -81501B18 0103 - Callisto NTG -81501B74 0104 - RCP-120 -81501BD0 0105 - Laptop Gun -81501C2C 0106 - Shotgun -81501C88 0107 - Reaper -81501CE4 0108 - Rocket Launcher -81501D40 0109 - Devastator -81501D9C 010A - Slayer -81501DF8 010C - Sniper Rifle -81501E54 0119 - KLO1313 (Klobb) -81501EB0 011A - KF7 Special (KF7 Soviet) -81501F0C 011B - ZZT (9mm) -Door images: -8150127C 011C - DMC (Deutch) -81501358 011D - AR33 -81501434 011E - RC-P45 (RC-P90) -81501510 0011 - Briefcase -815015EC 0017 - Area 51 Control Panel / Button - - -The final code should be compiled with the pad modifiers in one part and the -rest of the codes in another. Each part shouldn't be more than 60 lines long -because that's about how many lines you can input for each code in a cheating -device. - -Skedar Ruins Pad Finder: ------------------------- -Part One: -NTSC -Level modifier code: -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -810801A0 01E2 -80084BF9 002A -81084BFC 56A5 -81084C14 50FF -PAL -Level modifier code: -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -810806E0 01E2 -80085149 002A -8108514C 56A5 -81085164 50FF -NTSC AND PAL -Double weapon changer: -81500A54 010B -81500AAC 1600 -81500C0C 019E -81500C64 2F00 -81500DC4 01A0 -81500E1C 2E00 -81500F7C 0140 -81500FD4 3200 -Remove lifts: -81501142 0008 -815011E6 0008 -Change doors into objects: -8150127A 0C15 -81501356 0C15 -81501432 0C15 -8150150E 0C15 -815015EA 0C15 -Door images: -8150127C 011C -81501358 011D -81501434 011E -81501510 0011 -815015EC 0017 - -Part Two: -NTSC AND PAL -Ammo crate images: -8150006C 0065 -81500114 0157 -81500224 015B -815002CC 0182 -815003DC 008C -81500484 00EC -81500594 0016 -8150063C 003E -8150074C 00AF -815007F4 0193 -81500904 003C -815009AC 003D -81500ABC 0144 -81500B64 00BA -81500C74 00C1 -81500D1C 00E2 -81500E2C 015A -81500ED4 01A2 -81500FE4 0185 -8150108C 0186 -Metal crate images: -815016C8 00F5 -81501724 00F4 -81501780 00FD -815017DC 010D -81501838 010E -81501894 0117 -815018F0 0118 -8150194C 012F -815019A8 00FE -81501A04 00FF -81501A60 0101 -81501ABC 0102 -81501B18 0103 -81501B74 0104 -81501BD0 0105 -81501C2C 0106 -81501C88 0107 -81501CE4 0108 -81501D40 0109 -81501D9C 010A -81501DF8 010C -81501E54 0119 -81501EB0 011A -81501F0C 011B - -Part Three: -NTSC AND PAL Object to look for -Move weapons: -81500006 0XXX - Falcon 2 (Silencer) -815001BE 0XXX - Falcon 2 (Scope) -81500376 0XXX - Magsec 4 -8150052E 0XXX - Mauler -815006E6 0XXX - Phoenix -8150089E 0XXX - DY357 Magnum -81500A56 0XXX - Farsight XR-20 -81500C0E 0XXX - X-ray Scanner -81500DC6 0XXX - Horizon Scanner -81500F7E 0XXX - CamSpy -Move ammo crates: -8150006E 0XXX - Area 51 Trashcan -81500116 0XXX - Laptop Sentry dronegun -81500226 0XXX - Area 51 Lab cloths -815002CE 0XXX - BETA Body armour (Looks like the one from GoldenEye) -815003DE 0XXX - Hoverbot (Orange) -81500486 0XXX - Air Base Stewardesses Bag -81500596 0XXX - BETA Flag from GoldenEye -8150063E 0XXX - Plant, white base -8150074E 0XXX - Security Camera -815007F6 0XXX - BETA Touch That Box, Box -81500906 0XXX - Plant, tall round leaves -815009AE 0XXX - Plant, short brown base -81500ABE 0XXX - Deep Sea Ceiling dronegun -81500B66 0XXX - Area 51 Explodable container -81500C76 0XXX - Ammo crate -81500D1E 0XXX - Metal barrel -81500E2E 0XXX - Skedar Kings holy sceptre (Big King Rocket image) -81500ED6 0XXX - Air Force One Table -81500FE6 0XXX - Air Force One Lamp -8150108E 0XXX - Air Force One Toilet -Move metal crates: -815016CA 0XXX - Falcon 2 -81501726 0XXX - Shield -81501782 0XXX - CMP150 -815017DE 0XXX - Crossbow -8150183A 0XXX - Tranquilizer / Psychosis Gun -81501896 0XXX - PP9i (PP7) -815018F2 0XXX - CC13 (Dostovei) -8150194E 0XXX - Combat boost pills -815019AA 0XXX - AR34 -81501A06 0XXX - Dragon -81501A62 0XXX - K7 Avenger -81501ABE 0XXX - Cyclone -81501B1A 0XXX - Callisto NTG -81501B76 0XXX - RCP-120 -81501BD2 0XXX - Laptop Gun -81501C2E 0XXX - Shotgun -81501C8A 0XXX - Reaper -81501CE6 0XXX - Rocket Launcher -81501D42 0XXX - Devastator -81501D9E 0XXX - Slayer -81501DFA 0XXX - Sniper Rifle -81501E56 0XXX - KLO1313 (Klobb) -81501EB2 0XXX - KF7 Special (KF7 Soviet) -81501F0E 0XXX - ZZT (9mm) -Move doors: -8150127E 0XXX - DMC (Deutch) -8150135A 0XXX - AR33 -81501436 0XXX - RC-P45 (RC-P90) -81501512 0XXX - Briefcase -815015EE 0XXX - Area 51 Control Panel / Button -End - -Don't forget to use an enabler: -NTSC v1.0 PAL NTSC PC v1.0 PAL PC -D109C7E4 0030 D1099FB0 0030 8109940A 0320 8109995A 2860 -8109940A 02E0 8109995A 2820 D00714DB 0002 D00717BB 0002 -D109C7E4 0020 D1099FB0 0020 8109940A 5810 8109995A A0B0 -8109940A 02B0 8109995A 27F0 D00714DB 0003 D00717BB 0003 -D00714DB 0002 D00717BB 0002 8109940A 3590 8109995A A140 -8109940A 57A0 8109995A A040 D00714DB 0004 D00717BB 0004 -D00714DB 0003 D00717BB 0003 8109940A 17C0 8109995A 7C00 -8109940A 3520 8109995A A0D0 -D00714DB 0004 D00717BB 0004 NTSC v1.1 -8109940A 1750 8109995A 7B90 8109940A 0320 - D00714DB 0002 -NTSC v1.1 8109940A 5010 -D109C7E4 0030 D00714DB 0003 -8109940A 02E0 8109940A 2D90 -D109C7E4 0020 D00714DB 0004 -8109940A 02B0 8109940A 1050 -D00714DB 0002 -8109940A 4FA0 -D00714DB 0003 -8109940A 2D20 -D00714DB 0004 -8109940A 0FE0 - -To use this code put the number of the pad you want to find in one of the pad -modifiers and search the arena for its corresponding object image. To give an -example, if pad number 003C is put at the code that modifies the position of -the first door, search the level for a DMC (Deutch) and the spot you find it -will be where pad 003C is located. Then draw the number 3C on the map of the -arena that you've drawn before hand. - -As you start finding out where the pads are you will start to see patterns in -how they are placed. The are several different types of pads to be found. The -first kind of pads that you will find, and the most useful when it comes to -placing weapons and ammo crates, are navigational pads. These are used by the -AI (sims and guards) as path finders, telling them where to walk and how to -navigate around a level. There should be loads of navigational pads depending -on how big the level is. All navigational pads have are coordinates, they don't -have any other information. These pads are great for putting weapons or ammo -crates at because they are usually found in a line, and will all be alligned -correctly. The next kind of pads you come across will be the enemy positions. -These have a direction defined which makes them excellent respawn pads. After -the navigational and enemy pads come the object pads where the furniture and -doors from the arenas solo mission are put. These pads will reshape and resize -what's put at them because they're meant to be used with a specific object -image only (weapons and ammo crates won't get resized though). Door pads can -be tested by putting a door there, and turning off the object image and object -type code for that door. - -You don't have to find every single pad in the arena. If all you want is a -simple multiplayer level then all you need to know is where the navigational -and enemy pads are. If however you want to recreate an object from the arenas -solo mission, like a door, the easiest way to find it is to search the arenas -solo mission object setup list. Simply do a search for the objects image value. -In the Resources section you will find a list of object images that are sorted -by level. To give an example, if I wanted to find the spinning power generator -pillar from Skedar Ruins I'd do a search for 007A. Once I've located the -correct object, all I need to do is write down the value of the next 16bit -digit after 007A. In this case it turns out to be 0126, which is where the -spinning pillar is put. - - -At this point in time it's probably a good idea I told you that you don't need -to remake the pads finder above. If you want to find the pads in a different -arena (except dataDyne Research, for which the code can be reused), you can -simply port the code. Say you want to find the pads in Attack Ship. After -you've made the enablers you end up with the final code starting at 80540000. -The final code for Skedar Ruins starts at 80500000. To port the pads finder -code you need to first find the difference between the two pointers, 80540000 - -80500000 = 40000. Simply add 40000 to the address of every code that modifies -the in-game level data. Remember to make sure that the level modifier uses -Bases Mp_Setup. Likewise you could port one of the multiplayer levels that I -have made so that they work in Skedar Ruins. You would need to change the -values of the codes to correspond with the new set of pads. - -If you've made a pads map, either on a PC or scanned in like I did, please -share it with other people so that they can use it too. I've found the pads in -Crash Site, Villa (Solo), Skedar Ruins and Deep Sea, so you don't need to do -any of them. - - -Creating the code: -~~~~~~~~~~~~~~~~~~ -Now that you know where the pads are and where the final code will be put you -can begin creating the code to move stuff about. Your aim will be to create a -multiplayer level in which there are no objects out of place. You'll also want -to place enough objects in the level that it looks like it's original solo -mission, although that isn't neccesary. Many of PD's original multiplayer -levels don't have objects in them at all. You don't want to clutter the level -up so much that it becomes hard to move around. - -The final complete code will consist of codes that: --> Modify a level (Part One) --> Move the weapons and ammo crates (Part Two) --> Modify and move the objects (Part Three) --> Move the respawn points (Part Four) --> Move the Hills (also Part Four) --> Move the Bases and their respawn points (Part Five) --> Multiplayer level enablers for all formats - - -Moving the weapons and ammo crates requires a pad modifier for each object. You -already have the pad modifiers for these from the pads finder code, but if -you're starting from scratch there is an easy way to find them. For all -Mp_Setups except Ravine the weapons and ammo crates will come first on the -object setup list, and in the same order. This means that you could simply port -the codes from one of my multiplayer levels. If you don't want to port the -codes another way of doing it is to find the first weapon pad modifier code. -Add 68 to find the first ammo crate, then add A8 to find the next. Add A8 again -to find the next weapon and 68 to find it's first ammo crate, and so on and so -on, until you've made codes for all 10 weapon points. A quick way of finding -the first weapon pad modifier (for all setups except Ravines) is to add 6 to -the object setup list pointer. You can also subtract 6 from the first weapon -pad modifier to find where the final code is put in my multiplayer level codes. -The codes that move the weapons and ammo crates for Skedar Ruins are: - -Move weapons and ammo crates: -81500006 0XXX - Weapon 1.1 -8150006E 0XXX - Ammo crate 1.1.1 -81500116 0XXX - Ammo crate 1.1.2 -815001BE 0XXX - Weapon 2.1 -81500226 0XXX - Ammo crate 2.1.1 -815002CE 0XXX - Ammo crate 2.1.2 -81500376 0XXX - Weapon 3.1 -815003DE 0XXX - Ammo crate 3.1.1 -81500486 0XXX - Ammo crate 3.1.2 -8150052E 0XXX - Weapon 4.1 -81500596 0XXX - Ammo crate 4.1.1 -8150063E 0XXX - Ammo crate 4.1.2 -815006E6 0XXX - Weapon 5 -8150074E 0XXX - Ammo crate 5.1 -815007F6 0XXX - Ammo crate 5.2 -8150089E 0XXX - Weapon 6 -81500906 0XXX - Ammo crate 6.1 -815009AE 0XXX - Ammo crate 6.2 -81500A56 0XXX - Weapon 1.2 -81500ABE 0XXX - Ammo crate 1.2.1 -81500B66 0XXX - Ammo crate 1.2.2 -81500C0E 0XXX - Weapon 2.2 -81500C76 0XXX - Ammo crate 2.2.1 -81500D1E 0XXX - Ammo crate 2.2.2 -81500DC6 0XXX - Weapon 3.2 -81500E2E 0XXX - Ammo crate 3.2.1 -81500ED6 0XXX - Ammo crate 3.2.2 -81500F7E 0XXX - Weapon 4.2 -81500FE6 0XXX - Ammo crate 4.2.1 -8150108E 0XXX - Ammo crate 4.2.2 - -When you place the weapon points at pads around the arena you need to make sure -you put them in accessible places. If you don't the sims won't be able to get -them. Where the weapon points are put will determine where the sims go, and the -power of the weapon will determine which weapon all the sims are trying to get -at. Sims won't go into parts of the level where there aren't any weapons, so -the weapon placements will determine the flow of the level. Put the double -weapons at opposite sides of the level and not next to each other. Put weapons -5 and 6 in places you want the sims to go. Since there are only one of these -you can place a powerful weapon or shield at these weapon points. Quite -annoyingly the sims know when there is a weapon there or if it's just been -taken. Put a weapon too far away from where the main action takes place and you -will see lots of sims running there to get it. You will also see them turn -around half way there because they know that another sim has got it before -them! Remember to check the weapon points to make sure that you can pick up all -the objects that you've moved. I placed the weapon points in Skedar Ruins at -the following places: - -Weapon 1.1 - Rectangular pillar room (without Skedar relic) -81500006 002D -8150006E 002E -81500116 002F -Weapon 2.1 - Half circle room with pillar -815001BE 001F -81500226 0020 -815002CE 0021 -Weapon 3.1 - WAR! starting point area -81500376 0053 -815003DE 0051 -81500486 0052 -Weapon 4.1 - Canyon -8150052E 0034 -81500596 0035 -8150063E 0037 -Weapon 5 - Royal Chamber (Skedar Kings room) -815006E6 0094 -8150074E 00CE -815007F6 00CF -Weapon 6 - Solo starting point area -8150089E 000B -81500906 000C -815009AE 000D -Weapon 1.2 - Bridge activation room -81500A56 0060 -81500ABE 005F -81500B66 0061 -Weapon 2.2 - 2 rolling pillars corridoor -81500C0E 006C -81500C76 006B -81500D1E 006D -Weapon 3.2 - Underneath power generator room bridge -81500DC6 00D6 -81500E2E 007B -81500ED6 007C -Weapon 4.2 - Inner shrine corridoor -81500F7E 008B -81500FE6 0088 -8150108E 0082 - - -We'll jump over the objects for now and do the respawns first. The respawns can -be found by following the pointer at NTSC 8009D03C or PAL 8009D59C. You'll find -a list of numbers which are the pads the respawns are put at. You simply need -to change these values. Base has 16 respawns ranging from 1C to 2B. Once you've -found the code that moves the first respawn, simply add C to the address to -find the next respawn placement modifier. The code to move respawn points in -Skedar Ruins is: - -Move respawn points: -81501F6E 0XXX -81501F7A 0XXX -81501F86 0XXX -81501F92 0XXX -81501F9E 0XXX -81501FAA 0XXX -81501FB6 0XXX -81501FC2 0XXX -81501FCE 0XXX -81501FDA 0XXX -81501FE6 0XXX -81501FF2 0XXX -81501FFE 0XXX -8150200A 0XXX -81502016 0XXX -81502022 0XXX - -Respawn points can be placed wherever you want, but for best results place them -on enemy pads. Some pads won't accept a respawn being placed on them. Instead -you will appear in nothingness and die. To avoid this you need to test all the -pads you intend to put your respawn points at. The following code allows you to -test one pad at a time. If you're using an N64 emulator then you can change -this code without having to reload the level. Put lots of Rocket Launchers in -the level so that you can kill yourself easily. - -Respawn Tester: -NTSC PAL -8109DE6A 0001 8109E3DA 0001 -8109DE38 0XXX 8109E3A8 0XXX - -I put the respawns for Skedar Ruins at the following pads: -81501F6E 0000 -81501F7A 00A2 -81501F86 00A7 -81501F92 00AA -81501F9E 00AE -81501FAA 00B3 -81501FB6 00B8 -81501FC2 00BA -81501FCE 00BE -81501FDA 00E2 -81501FE6 00C1 -81501FF2 00C3 -81501FFE 00C5 -8150200A 008D -81502016 008F -81502022 00D2 - - -The Hills from King of the Hill are easy to modify providing you know where the -pads are. Hills are placed at pads and the room the pad is in gets highlighted. -The codes that modify the Hills work in all levels because they don't modify -the in-game level data. You do however need to know where the pads are in order -to get any use out of them. You can make codes that simply change the existing -Hills, or you can increase the amount of Hills giving you a total of nine -different Hills. - -King of the Hill Modifier: -NTSC PAL -800AC11D 000X 800AC6BD 000X - Number of Hills (1 to 9) -810AC122 0XXX 810AC6C2 0XXX - Hill 1 pad -810AC124 0XXX 810AC6C4 0XXX - Hill 2 pad -810AC126 0XXX 810AC6C6 0XXX - Hill 3 pad -810AC128 0XXX 810AC6C8 0XXX - Hill 4 pad -810AC12A 0XXX 810AC6CA 0XXX - Hill 5 pad -810AC12C 0XXX 810AC6CC 0XXX - Hill 6 pad -810AC12E 0XXX 810AC6CE 0XXX - Hill 7 pad -810AC130 0XXX 810AC6D0 0XXX - Hill 8 pad -810AC132 0XXX 810AC6D2 0XXX - Hill 9 pad - -Like respawn points, Hills need to be tested. Use the same pad as the value of -both codes below. Like the respawn tester, this can be changed during gameplay -so you don't need to reload the level to try a different value. - -Hill Tester: -NTSC PAL -800AC11D 0002 800AC6BD 0002 -810AC122 0XXX 810AC6C2 0XXX -810AC124 0XXX 810AC6C4 0XXX - -I put the Hills for Skedar Ruins at the following pads: -NTSC -800AC11D 0009 -810AC122 0000 -810AC124 00A9 -810AC126 0030 -810AC128 003E -810AC12A 004F -810AC12C 00BE -810AC12E 007F -810AC130 008C -810AC132 0094 -PAL -800AC6BD 0009 -810AC6C2 0000 -810AC6C4 00A9 -810AC6C6 0030 -810AC6C8 003E -810AC6CA 004F -810AC6CC 00BE -810AC6CE 007F -810AC6D0 008C -810AC6D2 0094 - - -Capture the Case, like King of the Hill, is modified using codes that work in -all levels. Just use the same codes for each level. Capture the Case bases -consist of a case position and 6 respawn points. The respawn points should be -placed as close to the case as possible, but not so close next to one another -that players start appearing in one another. Respawns need to be tested and an -easy way to do this is put all players and 8 sims on the same team. If anyone -dies when the level starts then one of the pads is faulty. - -Capture the Case Modifier: -NTSC PAL -Base 1: -810AC128 0XXX 810AC6C8 0XXX - Case 1 and highlingt zone -810AC12C 0XXX 810AC6CC 0XXX - Respawn 1 -810AC12E 0XXX 810AC6CE 0XXX - Respawn 2 -810AC130 0XXX 810AC6D0 0XXX - Respawn 3 -810AC132 0XXX 810AC6D2 0XXX - Respawn 4 -810AC134 0XXX 810AC6D4 0XXX - Respawn 5 -810AC136 0XXX 810AC6D6 0XXX - Respawn 6 -Base 2: -810AC138 0XXX 810AC6D8 0XXX - Case 2 and highlingt zone -810AC13C 0XXX 810AC6DC 0XXX - Respawn 1 -810AC13E 0XXX 810AC6DE 0XXX - Respawn 2 -810AC140 0XXX 810AC6E0 0XXX - Respawn 3 -810AC142 0XXX 810AC6E2 0XXX - Respawn 4 -810AC144 0XXX 810AC6E4 0XXX - Respawn 5 -810AC146 0XXX 810AC6E6 0XXX - Respawn 6 -Base 3: -810AC148 0XXX 810AC6E8 0XXX - Case 3 and highlingt zone -810AC14C 0XXX 810AC6EC 0XXX - Respawn 1 -810AC14E 0XXX 810AC6EE 0XXX - Respawn 2 -810AC150 0XXX 810AC6F0 0XXX - Respawn 3 -810AC152 0XXX 810AC6F2 0XXX - Respawn 4 -810AC154 0XXX 810AC6F4 0XXX - Respawn 5 -810AC156 0XXX 810AC6F6 0XXX - Respawn 6 -Base 4: -810AC158 0XXX 810AC6F8 0XXX - Case 4 and highlingt zone -810AC15C 0XXX 810AC6FC 0XXX - Respawn 1 -810AC15E 0XXX 810AC6FE 0XXX - Respawn 2 -810AC160 0XXX 810AC700 0XXX - Respawn 3 -810AC162 0XXX 810AC702 0XXX - Respawn 4 -810AC164 0XXX 810AC704 0XXX - Respawn 5 -810AC166 0XXX 810AC706 0XXX - Respawn 6 - -I put the bases at the following pads in Skedar Ruins: -NTSC -Base 1: - Royal Chamber -810AC128 00D2 -810AC12C 00D0 -810AC12E 00D1 -810AC130 00D3 -810AC132 0130 -810AC134 012D -810AC136 0095 -Base 2: - Solo starting area -810AC138 0000 -810AC13C 0001 -810AC13E 00A0 -810AC140 00A1 -810AC142 00A2 -810AC144 00A3 -810AC146 0006 -Base 3: - WAR! starting area -810AC148 004F -810AC14C 00BA -810AC14E 004D -810AC150 00D7 -810AC152 0046 -810AC154 004C -810AC156 0055 -Base 4: - Slanting chamber with pillar -810AC158 0030 -810AC15C 00B3 -810AC15E 00B4 -810AC160 00B1 -810AC162 00B2 -810AC164 002B -810AC166 00DE -PAL -Base 1: - Royal Chamber -810AC6C8 00D2 -810AC6CC 00D0 -810AC6CE 00D1 -810AC6D0 00D3 -810AC6D2 0130 -810AC6D4 012D -810AC6D6 0095 -Base 2: - Solo starting area -810AC6D8 0000 -810AC6DC 0001 -810AC6DE 00A0 -810AC6E0 00A1 -810AC6E2 00A2 -810AC6E4 00A3 -810AC6E6 0006 -Base 3: - WAR! starting area -810AC6E8 004F -810AC6EC 00BA -810AC6EE 004D -810AC6F0 00D7 -810AC6F2 0046 -810AC6F4 004C -810AC6F6 0055 -Base 4: - Rectangular pillar room (without Skedar relic) -810AC6F8 0030 -810AC6FC 00B3 -810AC6FE 00B4 -810AC700 00B1 -810AC702 00B2 -810AC704 002B -810AC706 00DE - - -Objects are the hardest to modify. You usually need to change several values in -order to make them the way you want. The type and amount of objects at your -disposal depends on the Mp_Setup thats used. You can either have a level with -lots of doors (using Area 52 or Felicity), or a level with lots of objects -(using Base or Ravine). You want to make the objects in your multiplayer level -as much like they are in the solo mission. To do this you need to reference -what values they have on the solo mission setup for the arena you're doing. - -Modifying the object type must be done with great care. When you change the -type you usually end up with an object that doesn't quite work as you expected. -More than just the object type must be modified to get the object you want. -Doors should be left as doors, glass left as glass and lifts left as lifts. -Normal objects like metal crates are the most flexible. Metal crates can be -turned into Hoverbikes or Hovercrates. Turning a metal crate into a Hoverbike -requires four metal crates in a row. I haven't worked out how to modify the -way in which doors open, so you have to take into account that doors might -swing or slide open in the wrong direction. - -I won't go into detail about how you modify objects. I've barely scratched the -surface myself in the codes that I've made. Below you will find the object -modifiers from my multiplayer levels, telling you what each code does. You -should be able to figure out how I did certain stuff from the codes below. To -give an example: if you find something you want to do yourself like making an -object moveable, find the difference between the code that makes the object -moveable and the code that modifies the objects pad. Then simply add that -difference to the pad modifier of the object you want to make moveable. -Values vary depending on what you want to do to the object. - - -Skedar Ruins Objects: (using Bases Mp_Setup) -Lifts -81501144 0191 - Turn lift image into Skedar bridge -8150119C 0136 - Move lift destination 1 to bridge pad 136 -8150119E 0136 - Move lift destination 2 to bridge pad 136 -815011E6 0003 - Turn lift into object -815011E8 01B8 - Turn lift image into Buddy bridge -815011EA 00EA - Move lift to bridge pad EA -81501240 00E9 - Move lift destination 1 to bridge pad E9 -81501242 00E9 - Move lift destination 2 to bridge pad E9 -Doors -8150127C 006E - Turn door image into Skedar door -8150127E 00F7 - Move Skedar door to door pad F7 -81501334 8050 - Connect first door to second door -81501336 1354 - Connect first door to second door -8150133E 0400 - Modify Skedar door sound -81501358 006E - Turn door image into Skedar door -8150135A 00F8 - Move Skedar door to door pad F8 -81501410 8050 - Connect second door to first door -81501412 1278 - Connect second door to first door -8150141A 0400 - Modify Skedar door sound -81501434 006E - Turn door image into Skedar door -81501436 00F5 - Move Skedar door to door pad F5 -815014EC 8050 - Connect third door to fourth door -815014EE 150C - Connect third door to fourth door -815014F6 0400 - Modify Skedar door sound -81501510 006E - Turn door image into Skedar door -81501512 00F6 - Move Skedar door to door pad F6 -815015C8 8050 - Connect fourth door to third door -815015CA 1430 - Connect fourth door to third door -815015D2 0400 - Modify Skedar door sound -815015EA 000A - Turn door into object -815015EC 0079 - Turn door image into power generator pillar -815015EE 0126 - Move door to power generator pillar pad 126 -815015F0 0002 - Make power generator pillar indestructable -Metal crates -815016C8 00DC - Turn metal crate image into pillar -815016CA 010C - Move pillar to pillar pad 10C -81501724 00DC - Turn metal crate image into pillar -81501726 010A - Move pillar to pillar pad 10A -81501780 00DD - Turn metal crate image into pillar -81501782 010D - Move pillar to pillar pad 10D -815017DC 018C - Turn metal crate image into pillar -815017DE 0111 - Move pillar to pillar pad 111 -81501838 00DD - Turn metal crate image into pillar -8150183A 010B - Move pillar to pillar pad 10B -81501894 00DE - Turn metal crate image into pillar shadow on floor -81501896 014F - Move floor piece to floor pad 14F -815018F0 00DF - Turn metal crate image into pillar shadow on wall -815018F2 0150 - Move wall piece to wall pad 150 -8150194C 006A - Turn metal crate image into canyon wall -8150194E 00E6 - Move canyon wall to wall pad E6 -81501952 04E8 - Fit canyon wall piece properly into place -815019A8 006C - Turn metal crate image into hole-in-wall frame -815019AA 00E8 - Move hole-in-wall frame to wall pad E8 -815019AE 04E8 - Fit hole-in-wall frame properly into place -81501A04 00D1 - Turn metal crate image into floor piece -81501A06 014A - Move floor piece to floor pad 14A -81501A60 00D2 - Turn metal crate image into floor piece -81501A62 014B - Move floor piece to floor pad 14B -81501ABC 00D3 - Turn metal crate image into floor piece -81501ABE 014C - Move floor piece to floor pad 14C -81501B18 00D4 - Turn metal crate image into floor piece -81501B1A 014D - Move floor piece to floor pad 14D -81501B74 00D5 - Turn metal crate image into floor piece -81501B76 014E - Move floor piece to floor pad 14E -81501BD0 00CC - Turn metal crate image into Skedar relic piece -81501BD2 0145 - Move Skedar relic piece to relic pad 145 -81501C2C 00CD - Turn metal crate image into Skedar relic piece -81501C2E 0146 - Move Skedar relic piece to relic pad 146 -81501C88 00CE - Turn metal crate image into Skedar relic piece -81501C8A 0147 - Move Skedar relic piece to relic pad 147 -81501CE4 00D0 - Turn metal crate image into Skedar relic piece -81501CE6 0148 - Move Skedar relic piece to relic pad 148 -81501CEA 05E8 - Fit Skedar relic piece properly into place -81501D40 00CF - Turn metal crate image into Skedar relic piece -81501D42 0149 - Move Skedar relic piece to relic pad 149 -81501D46 05E8 - Fit Skedar relic piece properly into place -81501D9C 00E2 - Turn metal crate image into metal barrel -81501D9E 00C4 - Move metal barrel to pad C4 -81501DAA 0001 - Make metal barrel moveable -81501DA0 0000 - Make metal barrel explodable -81501DF8 00E2 - Turn metal crate image into metal barrel -81501DFA 0089 - Move metal barrel to pad 89 -81501E06 0001 - Make metal barrel moveable -81501DFC 0000 - Make metal barrel explodable -81501E54 00E2 - Turn metal crate image into metal barrel -81501E56 00B0 - Move metal barrel to pad B0 -81501E62 0001 - Make metal barrel moveable -81501E58 0000 - Make metal barrel explodable -81501EB0 00E2 - Turn metal crate image into metal barrel -81501EB2 003E - Move metal barrel to pad 3E -81501EBE 0001 - Make metal barrel moveable -81501EB4 0000 - Make metal barrel explodable -81501F0C 00E2 - Turn metal crate image into metal barrel -81501F0E 000E - Move metal barrel to pad E -81501F1A 0001 - Make metal barrel moveable -81501F10 0000 - Make metal barrel explodable - - -Crash Site Caves Objects: (using Complexes Mp_Setup) -Metal crates -81503B84 00EB - Turn metal crate image into UFO -81503B86 0095 - Move UFO to pad 95 -81503BE0 00EB - Turn metal crate image into UFO -81503BE2 0054 - Move UFO to pad 54 -81503C3C 0190 - Turn metal crate image into escape pod -81503C3E 0057 - Move escape pod to pad 57 -81503C98 0190 - Turn metal crate image into escape pod -81503C9A 018A - Move escape pod to pad 18A -81503CF4 0190 - Turn metal crate image into escape pod -81503CF6 0158 - Move escape pod to pad 158 - - -Crash Site Racing Ground Objects: (using Bases Mp_Setup) -Metal crates -81504116 0833 - Turn object into Hoverbike -81504118 003A - Turn metal crate image into Hoverbike -8150411A 00D1 - Move Hoverbike to pad D1 -8150411C 0000 - Make Hoverbike destructable -81504126 0003 - Make Hoverbike weightless and moveable -81504286 0833 - Turn object into Hoverbike -81504288 003A - Turn metal crate image into Hoverbike -8150428A 00CA - Move Hoverbike to pad CA -8150428C 0000 - Make Hoverbike destructable -81504296 0003 - Make Hoverbike weightless and moveable -815043F6 0833 - Turn object into Hoverbike -815043F8 003A - Turn metal crate image into Hoverbike -815043FA 009C - Move Hoverbike to pad 9C -815043FC 0000 - Make Hoverbike destructable -81504406 0003 - Make Hoverbike weightless and moveable -81504566 0833 - Turn object into Hoverbike -81504568 003A - Turn metal crate image into Hoverbike -8150456A 000C - Move Hoverbike to pad C -8150456C 0000 - Make Hoverbike destructable -81504576 0003 - Make Hoverbike weightless and moveable -815046D8 00EB - Turn metal crate image into UFO -815046DA 0095 - Move UFO to pad 95 -81504736 0103 - Move metal crate to pad 103 -81504790 0190 - Turn metal crate image into escape pod -81504792 01D8 - Move escape pod to escape pod pad 1D8 - - -Felicity's Mp_Setup has objects in the following order: - -Pad - Object - Object in-game image value: -46 - Door (Slide across) - 01B6 -47 - Door (Slide across) -48 - Door (Slide across) -49 - Door (Slide across) -4A - Door (Slide across) -4B - Door (Slide across) -4C - Door (Slide across) -62 - Glass (unbreakable) - 003F -63 - Glass (unbreakable) -64 - Glass (unbreakable) -65 - Glass (unbreakable) -66 - Glass (unbreakable) -67 - Glass (unbreakable) -68 - Glass (unbreakable) -69 - Glass (unbreakable) -4D - Door (Swing) - 01B6 -4E - Door (Swing) -4F - Door (Swing) - Connected to door at 50 -50 - Door (Swing) - Connected to door at 4F -51 - Door (Swing) - Connected to door at 52 -52 - Door (Swing) - Connected to door at 51 -53 - Door (Swing) - Connected to door at 54 -54 - Door (Swing) - Connected to door at 53 -55 - Door (Swing) - Connected to door at 56 -56 - Door (Swing) - Connected to door at 55 -58 - Door (Swing) -57 - Door (Swing) - -Carrington Villa Residence Objects: (using Felicity's Mp_Setup) -Slide doors -814F8EA4 0029 - Turn door image into Villa door -814F8EA6 0174 - Move Villa door to door pad 174 -814F8F5C 804F - Connect first door to second door -814F8F5E 8F7C - Connect first door to second door -814F8F80 0029 - Turn door image into Villa door -814F8F82 0175 - Move Villa door to door pad 175 -814F9038 804F - Connect second door to first door -814F903A 8EA0 - Connect second door to first door -814F905C 0029 - Turn door image into Villa door -814F905E 0172 - Move Villa door to door pad 172 -814F90CE 0020 - Lock third Villa door -814F9114 804F - Connect third door to fourth door -814F9116 9134 - Connect third door to fourth door -814F9138 0029 - Turn door image into Villa door -814F913A 0173 - Move Villa door to door pad 173 -814F91AA 0020 - Lock fourth Villa door -814F91F0 804F - Connect fourth door to third door -814F91F2 9058 - Connect fourth door to third door -814F9214 0029 - Turn door image into Villa door -814F9216 0170 - Move Villa door to door pad 170 -814F9286 0020 - Lock fifth Villa door -814F92CC 804F - Connect fifth door to sixth door -814F92CE 92EC - Connect fifth door to sixth door -814F92F0 0029 - Turn door image into Villa door -814F92F2 0171 - Move Villa door to door pad 171 -814F9362 0020 - Lock sixth Villa door -814F93A8 804F - Connect sixth door to fifth door -814F93AA 9210 - Connect sixth door to fifth door -814F93CC 0029 - Turn door image into Villa door -814F93CE 0176 - Move Villa door to door pad 176 -Glass -814F94AA 016F - Move glass to glass pad 16F -814F9512 015D - Move glass to glass pad 15D -814F957A 016E - Move glass to glass pad 16E -814F95E2 0165 - Move glass to glass pad 165 -814F964A 0164 - Move glass to glass pad 164 -814F96B2 015E - Move glass to glass pad 15E -814F971A 016D - Move glass to glass pad 16D -814F9782 016C - Move glass to glass pad 16C -Swing doors -814F97E8 0029 - Turn door image into Villa door -814F97EA 0177 - Move Villa door to door pad 177 -814F98C4 0029 - Turn door image into Villa door -814F98C6 017B - Move Villa door to door pad 17B -814F99A0 0029 - Turn door image into Villa door -814F99A2 0190 - Move Villa door to door pad 190 -814F9A7C 0029 - Turn door image into Villa door -814F9A7E 018F - Move Villa door to door pad 18F -814F9B58 0029 - Turn door image into Villa door -814F9B5A 0178 - Move Villa door to door pad 178 -814F9C34 0029 - Turn door image into Villa door -814F9C36 0179 - Move Villa door to door pad 179 -814F9D10 0029 - Turn door image into Villa door -814F9D12 018C - Move Villa door to door pad 18C -814F9DEC 0029 - Turn door image into Villa door -814F9DEE 018B - Move Villa door to door pad 18B -814F9EC8 0029 - Turn door image into Villa door -814F9ECA 017C - Move Villa door to door pad 17C -814F9FA4 0029 - Turn door image into Villa door -814F9FA6 017D - Move Villa door to door pad 17D -814FA080 002A - Turn door image into BETA Villa door -814FA082 017E - Move BETA Villa door to BETA pad 17E -814FA0D8 42B0 - Modify BETA Villa door swing radius -814FA0F2 0020 - Lock BETA Villa door -814FA15A 080D - Turn door into dronegun -814FA15C 0032 - Turn door image into Windmill propellar -814FA15E 0191 - Move Windmill propellar to dronegun pad 191 - - -Carrington Villa Rooftop Objects: (using Bases Mp_Setup) -Lifts -NTSC PAL -814FCB70 F441 814FAD30 F441 - Move pad A1 X coordinate to F441 -814FCB74 ECC2 814FAD34 ECC2 - Move pad A1 Y coordinate to ECC2 -8107B69A 0150 8107BB6A 0150 - Modify CI lift size -NTSC AND PAL -814F8EB4 00C5 - Turn lift image into CI lift -814F8EB6 009B - Move CI lift to pad 9B -814F8F0C 009B - Move lift destination 1 to pad 9B -814F8F0E 009C - Move lift destination 2 to pad 9C -NTSC PAL -814FCAF8 F4DB 814FACB8 F4DB - Move pad 9B X coordinate to F4DB -814FCAFA 0120 814FACBA 0120 - Move pad 9B Y coordinate to 0120 -814FCAFC 02FE 814FACBC 02FE - Move pad 9B Z coordinate to 02FE -814FCB12 FDBA 814FACD2 FDBA - Move pad 9C Y coordinate to FDBA -NTSC AND PAL -814F8F58 00C5 - Turn lift image into CI lift -814F8F5A 004E - Move CI lift to pad 4E -814F8FB0 004E - Move lift destination 1 to pad 4E -814F8FB2 004F - Move lift destination 2 to pad 4F -NTSC PAL -814FC5DC E7E8 814FA79C E7E8 - Move pad 4E X coordinate to E7E8 -814FC5DE FEB0 814FA79E FEB0 - Move pad 4E Y coordinate to FEB0 -814FC5E0 078A 814FA7A0 078A - Move pad 4E Z coordinate to 078A -814FC5EA FDB0 814FA7AA FDB0 - Move pad 4F Y coordinate to FDB0 -Doors -814F8FEC 002A - Turn door into BETA Villa door -814F8FEE 017F - Move BETA Villa door to door pad 17F -814F90A4 804F - Connect first door to second door -814F90A6 90C4 - Connect first door to second door -814F90AE 1000 - Modify BETA Villa door sound -814F90C8 002A - Turn door into BETA Villa door -814F90CA 0180 - Move BETA Villa door to door pad 180 -814F9180 804F - Connect second door to first door -814F9182 8FE8 - Connect second door to first door -814F918A 1000 - Modify BETA Villa door sound -814F91A2 080D - Turn door into dronegun -814F91A4 0032 - Turn door image into Windmill propellar -814F91A6 0191 - Move Windmill propellar to dronegun pad 191 -814F9280 002A - Turn door into BETA Villa door -814F9282 017E - Move BETA Villa door to door pad 17E -814F9342 1000 - Modify BETA Villa door sound -814F935C 002A - Turn door into BETA Villa door -814F935E 0182 - Move BETA Villa door to door pad 182 -814F941E 1000 - Modify BETA Villa door sound -Metal crates -814F9438 016A - Turn metal crate image into Villa sofa -814F943A 019C - Move Villa sofa to sofa pad 19C -814F9446 0001 - Make Villa sofa moveable -814F9494 016A - Turn metal crate image into Villa sofa -814F9496 019D - Move Villa sofa to sofa pad 19D -814F94A2 0001 - Make Villa sofa moveable -814F94F0 016A - Turn metal crate image into Villa sofa -814F94F2 019E - Move Villa sofa to sofa pad 19E -814F94FE 0001 - Make Villa sofa moveable -814F954C 016A - Turn metal crate image into Villa sofa -814F954E 019F - Move Villa sofa to sofa pad 19F -814F955A 0001 - Make Villa sofa moveable -814F95A8 016A - Turn metal crate image into Villa sofa -814F95AA 01A1 - Move Villa sofa to sofa pad 1A1 -814F95B6 0001 - Make Villa sofa moveable -814F9604 016A - Turn metal crate image into Villa sofa -814F9606 01A2 - Move Villa sofa to sofa pad 1A2 -814F9612 0001 - Make Villa sofa moveable -814F9660 016A - Turn metal crate image into Villa sofa -814F9662 01A3 - Move Villa sofa to sofa pad 1A3 -814F966E 0001 - Make Villa sofa moveable -814F96BC 016A - Turn metal crate image into Villa sofa -814F96BE 01A4 - Move Villa sofa to sofa pad 1A4 -814F96CA 0001 - Make Villa sofa moveable -814F9718 016A - Turn metal crate image into Villa sofa -814F971A 01A5 - Move Villa sofa to sofa pad 1A5 -814F9726 0001 - Make Villa sofa moveable -814F9774 016A - Turn metal crate image into Villa sofa -814F9776 01A6 - Move Villa sofa to sofa pad 1A6 -814F9782 0001 - Make Villa sofa moveable -814F97D0 016A - Turn metal crate image into Villa sofa -814F97D2 01A0 - Move Villa sofa to sofa pad 1A0 -814F97DE 0001 - Make Villa sofa moveable -814F982C 017B - Turn metal crate image into Villa wooden table -814F982E 01A7 - Move Villa wooden table to table pad 1A7 -814F983A 0001 - Make Villa wooden table moveable -814F9888 017B - Turn metal crate image into Villa wooden table -814F988A 01A8 - Move Villa wooden table to table pad 1A8 -814F9896 0001 - Make Villa wooden table moveable -814F98E4 017B - Turn metal crate image into Villa wooden table -814F98E6 01B0 - Move Villa wooden table to table pad 1B0 -814F98F2 0001 - Make Villa wooden table moveable -814F9940 0167 - Turn metal crate image into Villa coffee table -814F9942 01AD - Move Villa coffee table to table pad 1AD -814F994E 0001 - Make Villa coffee table moveable -814F999C 0167 - Turn metal crate image into Villa coffee table -814F999E 01AE - Move Villa coffee table to table pad 1AE -814F99AA 0001 - Make Villa coffee table moveable -814F99F8 0167 - Turn metal crate image into Villa coffee table -814F99FA 01AC - Move Villa coffee table to table pad 1AC -814F9A06 0001 - Make Villa coffee table moveable -814F9A54 0167 - Turn metal crate image into Villa coffee table -814F9A56 01AB - Move Villa coffee table to table pad 1AB -814F9A62 0001 - Make Villa coffee table moveable -814F9AB0 0167 - Turn metal crate image into Villa coffee table -814F9AB2 01AF - Move Villa coffee table to table pad 1AF -814F9ABE 0001 - Make Villa coffee table moveable -814F9B0C 016E - Turn metal crate image into Villa double bed -814F9B0E 0226 - Move Villa double bed to bed pad 226 -814F9B68 003C - Turn metal crate image into rubber pot plant -814F9B6A 0200 - Move rubber plant to pot plant pad 200 -814F9BC4 003E - Turn metal crate image into spike pot plant -814F9BC6 0212 - Move spike plant to pot plant pad 212 -814F9C20 003E - Turn metal crate image into spike pot plant -814F9C22 020A - Move spike plant to pot plant pad 20A -814F9C7C 005B - Turn metal crate image into Carrington Institute drop ship -814F9C7E 00A1 - Move Carrington Institute drop ship to pad A1 - - -The pads file (pointed to from NTSC 8009D04C or PAL 8009D5AC) is located in -different places in the memory of NTSC and PAL. You therefore need to make two -sets of code for NTSC and PAL and put them in part one of the code together -with the level modifier. You shouldn't have to move any pads unless you really -need to. In the object code above from Carrington Villa Rooftop I moved three -pads. The first moves the pad A1 to the centre of the hoverpad, and the CI drop -ship is placed on it. The second moves the pad 4E above 4F and the third moves -the pad 9B above 9C. I also moved pads 4F and 9C up a little bit, and changed -the size of the CI lift. Pads use a format of coordinates that differs from -that used in the real time coordinates list. It is however possible to convert -between the two coordinate systems. - -The very first 32bit value you'll come across in the pads file shows the amount -of pads there are in it. Next there will be four other 32bit values that do -nothing we need to know about. After the five 32bit values you'll see a set of -16bit values that are gradually increasing. These are internal pointers within -the pads file to where pad coordinates are located. They start at pad 0. To use -them simply add the 16bit pad pointer to the address from the beginning of the -pads file. To give an example: if the pads file starts at 804F9F50 and the -first 16bit pad pointer is 0488, 804F9F50 + 0488 = 804FA3D8. 804FA3D8 is the -address where information and coordinates about pad 0 is located. - -804FA3D8 - 0009 4010 FCF9 0064 02E4 0000 - -Pad 0 is a navigational pad and has nothing but coordinates defined. The first -two 16bit values define which room the pad can be in. It also does lots of -other stuff that I haven't worked out yet. If you want to move a pad from one -room to another room you need to change this. If you're moving a pad within the -same room (like I did in Carrington Villa Rooftop) this doesn't need to be -changed. If you're using an N64 emulator and make a code that moves a pad -elsewhere in the level without changing this value, don't be fooled. The code -won't work in a Gameshark or Action Replay. FCF9 is the X coordinate, 0064 is -the Y coordinate (up or down) and 02E4 is the Z coordinate. 0000 does something -too (but what indeed?). - -To convert the pad coordinates (FCF9 0064 02E4) into real time coordinates you -need a little program called Float Convert: - -http://www.gscentral.com/lib/downloads/FloatConvert.zip - -This program converts 32bit real time coordinates into decimal numbers and -vice-versa. It doesn't convert them into hexadecimal numbers. Positive -coordinates like 3F800000 and up will become positive decimal numbers, negative -coordinates like BF800000 and up will become negative decimal numbers. The -decimal coordinates then need to be converted to hexadecimal (using Windows -Calculator). Positive pad coordinates are positive hexadecimal values. -Negative pad coordinates are FFFF and down. 0000 is the middle, 0001 is -positive and FFFF is negative. This can all get very confusing so I'll give you -some examples of converting coordinates. - -Lets convert the Y coordinate 0064 into a real time coordinate. 64 in decimal -is 100. Putting 100 in Float Convert we get 42C80000. 0064 = 42C80000. - -Next lets convert the X coordinate FCF9 into a real time coordinate. First we -need to turn FCF9 into a negative hex number, 10000 - FCF9 = 307 = -307. -307 -in decimal is -755. -755 in Float Convert gives C43CC000. FCF9 = C43CC000. - -Converting a negative real time coordinate can get confusing. Lets convert -C5675EE4 into a pad coordinate. C5675EE4 in decimal is -3701.93. Discard the -fraction and you get -3701. -3701 in hex is -E74. 10000 - +E74 = F18C. -F18C is roughly equal to C5675EE4. - -Real time coordinates are found by using the methods described at the end of -Part Two. The pad modifications that I have made modify navigational pads. This -should be avoided because it messes up the sim navigational routines. Move too -many navigational pads away from an area and the sims will stand on the spot -doing the CanCan. Try and move navigational pads from places sims are unlikely -to go. - - -Once you've created all the codes you need to put them all together in an -understandable way so that other people can use them. Cheating devices won't -accept more than about 60 lines of code per cheat code, so you need to divide -the final complete code up into parts. Project 64 won't accept more than 100 -lines of code per cheat code either. You can't have the Hill codes and Base -codes on at the same time. Likewise, the respawns don't need to be on when the -Bases are turned on because they have their own respawns. We put the respawn -and Hill codes in one part and the Base codes in another. You can then select -between the two before loading the game up. The level modifier and any other -codes that modify just NTSC or PAL are put in part one. Weapons and ammo are -put in part two, objects are put in part three (and four if they're too long), -the respawns and Hills are put in part four and the Bases in part five. - -Skedar Ruins in Multi: ----------------------- -Enablers: -NTSC v1.0 PAL NTSC PC v1.0 PAL PC -D109C7E4 0030 D1099FB0 0030 8109940A 0320 8109995A 2860 -8109940A 02E0 8109995A 2820 D00714DB 0002 D00717BB 0002 -D109C7E4 0020 D1099FB0 0020 8109940A 5810 8109995A A0B0 -8109940A 02B0 8109995A 27F0 D00714DB 0003 D00717BB 0003 -D00714DB 0002 D00717BB 0002 8109940A 3590 8109995A A140 -8109940A 57A0 8109995A A040 D00714DB 0004 D00717BB 0004 -D00714DB 0003 D00717BB 0003 8109940A 17C0 8109995A 7C00 -8109940A 3520 8109995A A0D0 -D00714DB 0004 D00717BB 0004 NTSC v1.1 -8109940A 1750 8109995A 7B90 8109940A 0320 - D00714DB 0002 -NTSC v1.1 8109940A 5010 -D109C7E4 0030 D00714DB 0003 -8109940A 02E0 8109940A 2D90 -D109C7E4 0020 D00714DB 0004 -8109940A 02B0 8109940A 1050 -D00714DB 0002 -8109940A 4FA0 -D00714DB 0003 -8109940A 2D20 -D00714DB 0004 -8109940A 0FE0 - -Part One: (Level modifier code) -NTSC -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -810801A0 01E2 -80084BF9 002A -81084BFC 56A5 -81084C14 50FF -PAL -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -810806E0 01E2 -80085149 002A -8108514C 56A5 -81085164 50FF - -Part Two: (Weapons and ammo) -NTSC AND PAL -81500006 002D -8150006E 002E -81500116 002F -815001BE 001F -81500226 0020 -815002CE 0021 -81500376 0053 -815003DE 0051 -81500486 0052 -8150052E 0034 -81500596 0035 -8150063E 0037 -815006E6 0094 -8150074E 00CE -815007F6 00CF -8150089E 000B -81500906 000C -815009AE 000D -81500A56 0060 -81500ABE 005F -81500B66 0061 -81500C0E 006C -81500C76 006B -81500D1E 006D -81500DC6 00D6 -81500E2E 007B -81500ED6 007C -81500F7E 008B -81500FE6 0088 -8150108E 0082 - -Part Three: (Objects) -NTSC AND PAL -81501144 0191 -8150119C 0136 -8150119E 0136 -815011E6 0003 -815011E8 01B8 -815011EA 00EA -81501240 00E9 -81501242 00E9 -8150127C 006E -8150127E 00F7 -81501334 8050 -81501336 1354 -8150133E 0400 -81501358 006E -8150135A 00F8 -81501410 8050 -81501412 1278 -8150141A 0400 -81501434 006E -81501436 00F5 -815014EC 8050 -815014EE 150C -815014F6 0400 -81501510 006E -81501512 00F6 -815015C8 8050 -815015CA 1430 -815015D2 0400 -815015EA 000A -815015EC 0079 -815015EE 0126 -815015F0 0002 -815016C8 00DC -815016CA 010C -81501724 00DC -81501726 010A -81501780 00DD -81501782 010D -815017DC 018C -815017DE 0111 -81501838 00DD -8150183A 010B -81501894 00DE -81501896 014F -815018F0 00DF -815018F2 0150 - -Part Four: (More objects) -NTSC AND PAL -8150194C 006A -8150194E 00E6 -81501952 04E8 -815019A8 006C -815019AA 00E8 -815019AE 04E8 -81501A04 00D1 -81501A06 014A -81501A60 00D2 -81501A62 014B -81501ABC 00D3 -81501ABE 014C -81501B18 00D4 -81501B1A 014D -81501B74 00D5 -81501B76 014E -81501BD0 00CC -81501BD2 0145 -81501C2C 00CD -81501C2E 0146 -81501C88 00CE -81501C8A 0147 -81501CE4 00D0 -81501CE6 0148 -81501CEA 05E8 -81501D40 00CF -81501D42 0149 -81501D46 05E8 -81501D9C 00E2 -81501D9E 00C4 -81501DAA 0001 -81501DA0 0000 -81501DF8 00E2 -81501DFA 0089 -81501E06 0001 -81501DFC 0000 -81501E54 00E2 -81501E56 00B0 -81501E62 0001 -81501E58 0000 -81501EB0 00E2 -81501EB2 003E -81501EBE 0001 -81501EB4 0000 -81501F0C 00E2 -81501F0E 000E -81501F1A 0001 -81501F10 0000 - -Part Five: (Hills and Respawns) -NTSC AND PAL (Respawns) -81501F6E 0000 -81501F7A 00A2 -81501F86 00A7 -81501F92 00AA -81501F9E 00AE -81501FAA 00B3 -81501FB6 00B8 -81501FC2 00BA -81501FCE 00BE -81501FDA 00E2 -81501FE6 00C1 -81501FF2 00C3 -81501FFE 00C5 -8150200A 008D -81502016 008F -81502022 00D2 -NTSC (Hills) -800AC11D 0009 -810AC122 0000 -810AC124 00A9 -810AC126 0030 -810AC128 003E -810AC12A 004F -810AC12C 00BE -810AC12E 007F -810AC130 008C -810AC132 0094 -PAL (Hills) -800AC6BD 0009 -810AC6C2 0000 -810AC6C4 00A9 -810AC6C6 0030 -810AC6C8 003E -810AC6CA 004F -810AC6CC 00BE -810AC6CE 007F -810AC6D0 008C -810AC6D2 0094 - -Part Six: (Capture the Case Bases) -NTSC -810AC128 00D2 -810AC12C 00D0 -810AC12E 00D1 -810AC130 00D3 -810AC132 0130 -810AC134 012D -810AC136 0095 -810AC138 0000 -810AC13C 0001 -810AC13E 00A0 -810AC140 00A1 -810AC142 00A2 -810AC144 00A3 -810AC146 0006 -810AC148 004F -810AC14C 00BA -810AC14E 004D -810AC150 00D7 -810AC152 0046 -810AC154 004C -810AC156 0055 -810AC158 0030 -810AC15C 00B3 -810AC15E 00B4 -810AC160 00B1 -810AC162 00B2 -810AC164 002B -810AC166 00DE -PAL -810AC6C8 00D2 -810AC6CC 00D0 -810AC6CE 00D1 -810AC6D0 00D3 -810AC6D2 0130 -810AC6D4 012D -810AC6D6 0095 -810AC6D8 0000 -810AC6DC 0001 -810AC6DE 00A0 -810AC6E0 00A1 -810AC6E2 00A2 -810AC6E4 00A3 -810AC6E6 0006 -810AC6E8 004F -810AC6EC 00BA -810AC6EE 004D -810AC6F0 00D7 -810AC6F2 0046 -810AC6F4 004C -810AC6F6 0055 -810AC6F8 0030 -810AC6FC 00B3 -810AC6FE 00B4 -810AC700 00B1 -810AC702 00B2 -810AC704 002B -810AC706 00DE -End - - -Testing the code: -~~~~~~~~~~~~~~~~~ -Before releasing your multiplayer level to the public it's a good idea to test -it first. The enablers need to be tested with the final complete code, and the -level needs to be tested on both PC and cheating device to see if all the codes -work as they should. There are some methods of modifying objects that only work -on a PC, and some that only work on a cheating device. - -You'll need to test the code in all four formats. If you don't have access to -one or more of them you need to ask someone else who has to do the testing for -you. You don't need four controllers to test up to four players. You can pull -controllers in and out of their sockets to control each player independently. - -Perfect Dark puts the in-game level data rather randomly in the memory, and it -takes very little to knock it out of place so that the enablers no longer work. -To test the enablers activate the enabler for the format you're testing, part -one (level modifier) and part two (weapons and ammo). These parts are bound to -work in all formats. Don't activate the objects, respawns, Hills or Bases just -yet. Once the enabler, part one and part two are activated run Perfect Dark and -go straight to the Advanced Menu in the Combat Simulator. Select your level -from the arena menu. Press L+R if the enabler requires it. Load the level with -one player and quit. Back at the menu press L if the enabler requires it. Load -the level again with one player and quit. If everything worked up until now, -and you found the weapons and ammo in the places you put them, then one player -works and you should be able to keep loading it without the game freezing. If -you're using an N64 emulator create a savestate at this stage. Two player, -three player and four player are meant to work after one player has been -loaded. Load two player (waiting for the two menus to appear for a second or -two) and quit. Two player works as well if you found the weapons and ammo. At -this stage do not activate a third player and test three players. Three player -is meant to work after one player, not two player. Either load that savestate -you created earlier, or deactivate the second player and load one player once -(remembering to press L before entering the level if the enabler requires it). -After one player load three player to see if it works. Repeat the process for -four player. If all player amount modes have worked so far you can start -switching between different amounts and testing the level after two, three and -four player. If you can switch between player amount modes without the game -freezing the enabler works perfectly. - -If you encounter the game freezing while trying a player amount mode after the -stable one player mode, the enabler needs to be modified. The game is putting -the in-game level data elsewhere than it should. It shouldn't be far off -though. It can be something like +10 off. It will always be in the 10's off. -If you're using an N64 emulator you can make a savestate to find out how much -the memory deviates from where it should be. If you're using a cheating device -you need to test the enabler by trial and error. To give an example: say the -value that modifies the in-game level data placement is 2780 for two player -mode. If two player mode doesn't work try 2790 or 2770 instead. Keep -increasing or decreasing the value until two player works. You shouldn't have -to go further than +-100. If the player amount mode still isn't working, and -if the soundtrack is playing but the level isn't loading, you've made a -mistake in the weapons and ammo moving codes (part two). - -Once you've got the enablers working in both a PC and cheating device -(whatever format) you can test the entire multiplayer code. Activate all parts -except five or six (depending on the scenario you want to play). If the game -freezes then there is most likely a mistake in the object codes. This usually -happens if you have changed the object type of any objects. Turning a door into -an object tends to make the game freeze a lot. Stick to using the value 000A -(which should work in both PC and cheating device). - -Instructions on how to use the enabler must be made for each format. Add any -information about not being able to switch between various player amount modes -here. As long as all modes work after the stable one player mode you don't -need to fiddle with the enabler. Switching between player amounts isn't that -important. - - -When I tested Skedar Ruins in multiplayer all the enablers worked. I did -however come across a problem in the PAL PC version. I couldn't switch from -three players to two players. I also made a mistake in the code that changes -the fifth door into a pillar. I originally used object type 36 to turn the -door into an object. While this worked in an emulator it didn't work in a -cheating device and needed to be changed to 0A. - -Skedar Ruins in Multi Enablers: -------------------------------- -NTSC Gameshark Enabler: -Version 1.0 Version 1.1 -D109C7E4 0030 D109C7E4 0030 -8109940A 02E0 8109940A 02E0 -D109C7E4 0020 D109C7E4 0020 -8109940A 02B0 8109940A 02B0 -D00714DB 0002 D00714DB 0002 -8109940A 57A0 8109940A 4FA0 -D00714DB 0003 D00714DB 0003 -8109940A 3520 8109940A 2D20 -D00714DB 0004 D00714DB 0004 -8109940A 1750 8109940A 0FE0 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Select Crash Site with one -player but before entering the level press and hold L+R for a few seconds. When -letting go make sure you pull your finger off L before R. Load the level and -quit as soon as possible. Back at the Advanced Menu press and hold L for a few -seconds. Load Crash Site with one player again and quit. The code should work -from then on. You can turn on the amount of players you want to play with. You -can also switch between different player amounts. When switching back to one -player mode you have to press L before loading the level. Allow time for each -players independent multiplayer menu to appear before loading the level. Don't -quickly add/remove another player and start the game before his menu has time -to appear/disappear. Don't use the drop out function. - -PAL Action Replay Enabler: -D1099FB0 0030 -8109995A 2820 -D1099FB0 0020 -8109995A 27F0 -D00717BB 0002 -8109995A A040 -D00717BB 0003 -8109995A A0D0 -D00717BB 0004 -8109995A 7B90 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Select Crash Site with one -player but before entering the level press and hold L+R for a few seconds. When -letting go make sure you pull your finger off L before R. Load the level and -quit as soon as possible. Back at the Advanced Menu press and hold L for a few -seconds. Load Crash Site with one player again and quit. The code should work -from then on. You can turn on the amount of players you want to play with. You -can also switch between different player amounts, but don't switch back to two -players after playing with three players. When switching back to one player -mode you have to press L before loading the level. Allow time for each players -independent multiplayer menu to appear before loading the level. Don't quickly -add/remove another player and start the game before his menu has time to -appear/disappear. Don't use the drop out function. - -NTSC PC Enabler: -Version 1.0 Version 1.1 -8109940A 0320 8109940A 0320 -D00714DB 0002 D00714DB 0002 -8109940A 5810 8109940A 5010 -D00714DB 0003 D00714DB 0003 -8109940A 3590 8109940A 2D90 -D00714DB 0004 D00714DB 0004 -8109940A 17C0 8109940A 1050 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can turn on the amount of players -you want to play with. You can also switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - -PAL PC Enabler: -8109995A 2860 -D00717BB 0002 -8109995A A0B0 -D00717BB 0003 -8109995A A140 -D00717BB 0004 -8109995A 7C00 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can turn on the amount of players -you want to play with. You can also switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - -The full Skedar Ruins in multiplayer code can be found in the "Codes" section -below. - - - -_______________________________________________________________________________ - - <<< Outro >>> -_______________________________________________________________________________ - -The outro part contains codes and resources. You will find some awesome codes -in the codes part, and the resources come in handy for when you want to hack a -specific thing in Perfect Dark. - - - > Codes - - ~ Fully working multiplayer levels - - Crash Site Caves / Crash Site Racing Ground - - Carrington Villa Residence / Carrington Villa Rooftop - - Skedar Ruins - ~ Fully working solo missions - - Crash Site in Carrington Villa - - WAR! in Deep Sea - - Pelagic II in Carrington Villa - ~ Extra Codes - - > Resources - - ~ Global object list (values and names) - ~ Global object list (addresses in ROM) - ~ In-game object list (sorted by number) - ~ In-game object list (sorted by level) - ~ Costume list - ~ Weapon type list - ~ Ammo type list - ~ Object type list - ~ Text lists - ~ BETA Text compilation - - > End credits - - -_____ - -Codes -_____ - -The following section contains codes for fully working modified levels, and -some cool extra codes as well. - - -Fully working multiplayer levels: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Crash Site Caves / Crash Site Racing Ground: --------------------------------------------- -Since Crash Site is such a big arena I managed to place two fundamentally -different multiplayer levels into it. Crash Site Caves takes place in the -middle area of the arena, in the big and small caves. It resembles the original -multiplayer levels in that you have multiple routes of going from one place to -another. The areas that you're not supposed to go to are blocked off by UFO's -and Presidential escape capsules. Crash Site Racing Ground takes place in the -area where you start the solo mission, and the area around the front end of the -crashed Air Force One. This version of Crash Site has four hoverbikes in it -(hence the name Racing Ground), and is also an excellent level for sniping -(something that none of the other original levels offer much of). - -Both Crash Site in multiplayer levels have been optimalised so that they are -accessed in the same way, using the same player amount enablers. They can also -both be played by people that only have a version 3.0 cheating device (the -codes are under 79 lines of code). The only exception is that Crash Site Racing -Ground has a few extra codes that can only be activated by version 3.3 users or -PC users (this doesn't make the game play experience any better, it just adds -more weapon points). The PC versions have been tested and work in Project 64. -There are two versions of the NTSC enablers. If you don't know which version -you have you just have to try by trial and error the two enablers. - -How to use both codes: ----------------------- -Input the code in four different parts. Part one and two should always be on. -If you want to play in any scenario other than Capture the Case activate part -three (but not part four). If you want to play only Capture the Case, activate -part four (but not part three). Both Crash Site Caves and Crash Site Racing -Ground work in the same way. To get the codes working with different player -amounts you have to use an enabler. In total you should have activated four -different codes: part one and two, Part three or four, and an enabler. Only -activate either the Caves version or the Racing Ground version, you can't -activate them both at the same time. If your cheating device version is below -3.3, don't activate any other codes (except the must be on enabler). - -Once all the correct codes have been input, start the game and go straight to -the Combat Simulator Advanced menu. From here follow the instructions that go -with the enabler. Don't try and play in any arenas other than Crash Site. Once -the code is working you can exit and enter the level as many times as you wish. - - -Crash Site in Multiplayer Enablers: ------------------------------------ -NTSC Gameshark Enabler: -Version 1.0 Version 1.1 -8109940A 0000 8109940A 0000 -D00714DB 0002 D00714DB 0002 -8109940A 5580 8109940A 4D10 -D00714DB 0003 D00714DB 0003 -8109940A 3300 8109940A 2B00 -D00714DB 0004 D00714DB 0004 -8109940A 15A0 8109940A 0CC0 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can turn on the amount of players -you want to play with. You can also switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - -PAL Action Replay Enabler: -D1099FB0 0030 -8109995A 2570 -D1099FB0 0020 -8109995A 2540 -D00717BB 0002 -8109995A 9E20 -D00717BB 0003 -8109995A 9D90 -D00717BB 0004 -8109995A 7850 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Select Crash Site with one -player but before entering the level press and hold L+R for a few seconds. When -letting go make sure you pull your finger off L before R. Load the level and -quit as soon as possible. Back at the Advanced Menu press and hold L for a few -seconds. Load Crash Site with one player again and quit. The code should work -from then on. You can turn on the amount of players you want to play with. You -can also switch between different player amounts. When switching back to one -player mode you have to press L before loading the level. Allow time for each -players independent multiplayer menu to appear before loading the level. Don't -quickly add/remove another player and start the game before his menu has time -to appear/disappear. Don't use the drop out function. - -NTSC PC Enabler: -Version 1.0 Version 1.1 -8109940A 0050 8109940A 0050 -D00714DB 0002 D00714DB 0002 -8109940A 55D0 8109940A 4D60 -D00714DB 0003 D00714DB 0003 -8109940A 3350 8109940A 2B50 -D00714DB 0004 D00714DB 0004 -8109940A 15F0 8109940A 0D10 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. Next turn on the amount of players -you want to play with. You can switch between different player amounts. Allow -time for each players independent multiplayer menu to appear before loading -the level. Don't quickly add/remove another player and start the game before -his menu has time to appear/disappear. Don't use the drop out function. - -PAL PC Enabler: -8109995A 2590 -D00717BB 0002 -8109995A 9E70 -D00717BB 0003 -8109995A 9DE0 -D00717BB 0004 -8109995A 78A0 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can turn on the amount of players -you want to play with. You can also switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - - -Crash Site Caves: ------------------ -Part One: (Level modifier code) -NTSC -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -8107FE90 011B -80084BF9 001C -81084BFC 569B -81084C14 50FF -PAL -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -810803D0 011B -80085149 001C -8108514C 569B -81085164 50FF - -Part Two: (Weapons, ammo and objects) -NTSC AND PAL -81502A56 0058 -81502ABE 0059 -81502B66 005A -81502C0E 0071 -81502C76 006C -81502D1E 006D -81502DC6 0061 -81502E2E 0078 -81502ED6 0062 -81502F7E 014C -81502FE6 0150 -8150308E 01BD -81503136 0086 -8150319E 0085 -81503246 0088 -815032EE 0080 -81503356 0081 -815033FE 007F -815034A6 01A2 -8150350E 01A1 -815035B6 01AB -8150365E 0146 -815036C6 0145 -8150376E 0147 -81503816 019A -8150387E 019B -81503926 0196 -815039CE 0191 -81503A36 018D -81503ADE 0190 -81503B84 00EB -81503B86 0095 -81503BE0 00EB -81503BE2 0054 -81503C3C 0190 -81503C3E 0057 -81503C98 0190 -81503C9A 018A -81503CF4 0190 -81503CF6 0158 - -Part Three: (Hills and respawns) -NTSC AND PAL (Respawns) -81503D56 0192 -81503D62 005B -81503D6E 006E -81503D7A 0084 -81503D86 006B -81503D92 014A -81503D9E 014B -81503DAA 0195 -81503DB6 0093 -81503DC2 01AA -81503DCE 01A5 -81503DDA 018F -81503DE6 005E -81503DF2 01B3 -81503DFE 0062 -81503E0A 0074 -81503E16 0079 -81503E22 0154 -81503E2E 0090 -NTSC (Hills) -800AC11D 0009 -810AC122 0059 -810AC126 01BD -810AC128 0065 -810AC12C 0056 -810AC12E 019A -810AC130 015D -810AC132 018F -PAL (Hills) -800AC6BD 0009 -810AC6C2 0059 -810AC6C6 01BD -810AC6C8 0065 -810AC6CC 0056 -810AC6CE 019A -810AC6D0 015D -810AC6D2 018F - -Part Four: (Capture the Case Bases) -NTSC -810AC128 0090 -810AC12C 0091 -810AC12E 0088 -810AC130 008F -810AC132 0086 -810AC134 0085 -810AC136 0087 -810AC138 0079 -810AC13C 007E -810AC13E 007A -810AC140 007B -810AC142 0081 -810AC144 007C -810AC146 0082 -810AC148 014B -810AC14C 014C -810AC14E 01BD -810AC150 01B6 -810AC152 01B5 -810AC154 0155 -810AC156 014F -810AC158 0096 -810AC15C 0059 -810AC15E 0058 -810AC160 005A -810AC162 005B -810AC164 01B1 -810AC166 01B0 -PAL -810AC6C8 0090 -810AC6CC 0091 -810AC6CE 0088 -810AC6D0 008F -810AC6D2 0086 -810AC6D4 0085 -810AC6D6 0087 -810AC6D8 0079 -810AC6DC 007E -810AC6DE 007A -810AC6E0 007B -810AC6E2 0081 -810AC6E4 007C -810AC6E6 0082 -810AC6E8 014B -810AC6EC 014C -810AC6EE 01BD -810AC6F0 01B6 -810AC6F2 01B5 -810AC6F4 0155 -810AC6F6 014F -810AC6F8 0096 -810AC6FC 0059 -810AC6FE 0058 -810AC700 005A -810AC702 005B -810AC704 01B1 -810AC706 01B0 -End - - -Crash Site Racing Ground: -------------------------- -Part One: (Level modifier code) -NTSC -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -8107FE90 01E2 -80084BF9 001C -81084BFC 569B -81084C14 50FF -PAL -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -810803D0 01E2 -80085149 001C -8108514C 569B -81085164 50FF - -Part Two: (Weapons, ammo and objects) -NTSC AND PAL -81502A56 0008 -81502B66 0007 -81502C0E 0015 -81502C76 0016 -81502D1E 0019 -81502DC6 0024 -81502E2E 0025 -81502ED6 0023 -81502F7E 00A1 -81502FE6 00A2 -8150308E 00A3 -81503136 00C5 -8150319E 00C4 -81503246 00C6 -815032EE 00B7 -81503356 00B6 -815033FE 00B8 -815034A6 00D5 -8150350E 00D6 -815035B6 00D4 -8150365E 00C9 -815036C6 00C8 -81504116 0833 -81504118 003A -8150411A 00D1 -8150411C 0000 -81504126 0003 -81504286 0833 -81504288 003A -8150428A 00CA -8150428C 0000 -81504296 0003 -815043F6 0833 -815043F8 003A -815043FA 009C -815043FC 0000 -81504406 0003 -81504566 0833 -81504568 003A -8150456A 000C -8150456C 0000 -81504576 0003 -815046D8 00EB -815046DA 0095 -81504736 0103 -Version 3.3 / PC Objects (Don't activate these if you're using a version 3.0) -81502ABE 0009 -8150376E 00BF -81503816 00AE -8150387E 00A9 -81503926 00AF -815039CE 001C -81503A36 001D -81503ADE 0002 -81504790 0190 -81504792 01D8 - -Part Three: (Hills and Respawns) -NTSC AND PAL (Respawns) -815049BE 00BD -815049CA 00C7 -815049E2 0000 -815049EE 0141 -815049FA 00C2 -81504A06 0097 -81504A12 009F -81504A1E 000D -81504A2A 0005 -81504A36 0013 -81504A42 00C1 -81504A4E 00BA -81504A5A 00D3 -81504A66 0017 -81504A72 009B -NTSC (Hills) -800AC11D 0009 -810AC122 0094 -810AC124 00C9 -810AC12A 00A1 -810AC12C 0142 -810AC12E 0024 -810AC130 0009 -810AC132 0012 -PAL (Hills) -800AC6BD 0009 -810AC6C2 0094 -810AC6C4 00C9 -810AC6CA 00A1 -810AC6CC 0142 -810AC6CE 0024 -810AC6D0 0009 -810AC6D2 0012 - -Part Four: (Capture the Case Bases) -NTSC -810AC12C 0007 -810AC12E 000A -810AC138 00BE -810AC13C 00BD -810AC13E 0094 -810AC140 00BC -810AC142 00CB -810AC144 00C8 -810AC146 00BF -810AC148 00CC -810AC14C 00A6 -810AC14E 00CD -810AC150 0000 -810AC152 00AB -810AC154 00CE -810AC156 00B0 -810AC158 0101 -810AC15C 00FF -810AC15E 013F -810AC160 00D4 -810AC162 0142 -810AC164 00D6 -810AC166 00D5 -PAL -810AC6CC 0007 -810AC6CE 000A -810AC6D8 00BE -810AC6DC 00BD -810AC6DE 0094 -810AC6E0 00BC -810AC6E2 00CB -810AC6E4 00C8 -810AC6E6 00BF -810AC6E8 00CC -810AC6EC 00A6 -810AC6EE 00CD -810AC6F0 0000 -810AC6F2 00AB -810AC6F4 00CE -810AC6F6 00B0 -810AC6F8 0101 -810AC6FC 00FF -810AC6FE 013F -810AC700 00D4 -810AC702 0142 -810AC704 00D6 -810AC706 00D5 -End - - -Carrington Villa Residence / Carrington Villa Rooftop: ------------------------------------------------------- -Carrington Villa is one of the best solo levels in the game, and it also -doubles as a great multiplayer level as well. Like with Crash Site, I have -chosen to make two different multiplayer levels for Carrington Villa. The first -level is called Carrington Villa Residence and takes place inside the actual -building. This version just has doors and windows and is made to run at the -best framerate possible. The second level is called Carrington Villa Rooftop, -and allows you to walk around on the roof and some of the outside areas. It -also has lots of objects inside the building, like sofas and tables to hide -behind. Since you have such a good view of the entire level from the rooftop, -this version can lag quite a bit sometimes. If you intend to play with three or -four players and lots of sims, the best level to play in is Carrington Villa -Residence. You can also lock the doors leading out into the empty parts of both -levels. - -Both Carrington Villa Residence and Carrington Villa Rooftop work in the same -way. To get the codes working with different player amounts you have to use an -enabler. Both codes are longer than 78 lines of code, so you can only play in -the levels if you have a version 3.3 Professional cheating device. You will -need to activate the following hirez enabler if you run these codes in a -cheating device: - -NTSC -FF72C5A0 0000 -PAL -FF730000 0000 - -Make sure any other enablers are off. The PC version enablers have been tested -and work in Project 64. There are two versions of the NTSC enablers. If you -don't know which version you have you just have to try by trial and error the -two enablers. - -How to get both codes working: ------------------------------- -Enter the code into your cheating device in six different parts. Parts one, two -and three should always be on when you run the code. In Villa Residence part -four is optional, if you want to lock the doors leading to the empty parts of -the level turn it on. The sims shouldn't try to go to the empty parts even if -the doors are unlocked (unless you give them a good reason, like if you're -holding the briefcase). Part four of Villa Rooftop should always be on. If you -want to play in any scenario BUT Capture the Case, turn part five on, and leave -part six off. If you want to play in just Capture the Case, turn part six on, -and leave part five off. - -You also need to activate an enabler which gets the level working. Make sure -you follow the enabler instuctions correctly or the game will freeze. Once the -code is working you can exit and enter the level as many times as you wish. - - -Carrington Villa in Multiplayer Enablers: ------------------------------------------ -NTSC Gameshark Enabler: -Version 1.0 Version 1.1 -D109C7E4 0030 D109C7E4 0030 -8109940A 0040 8109940A 76D0 -D109C7E4 0020 D109C7E4 0020 -8109940A 0000 8109940A 7690 -D00714DB 0002 D00714DB 0002 -8109940A 77D0 8109940A EF30 -D00714DB 0003 D00714DB 0003 -8109940A 78A0 8109940A F070 -D00714DB 0004 D00714DB 0004 -8109940A 77D0 8109940A F070 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Select Crash Site with one -player but before entering the level press and hold L+R for a few seconds. When -letting go make sure you pull your finger off L before R. Load the level and -quit as soon as possible. Back at the Advanced Menu press and hold L for a few -seconds. Load Crash Site with one player again and quit. The code should work -from then on. You can turn on the amount of players you want to play with. You -can also switch between different player amounts. When switching back to one -player mode you have to press L before loading the level. Allow time for each -players independent multiplayer menu to appear before loading the level. Don't -quickly add/remove another player and start the game before his menu has time -to appear/disappear. Don't use the drop out function. - -PAL Action Replay Enabler: -81099958 8042 -8109995A 1750 -D00717BB 0002 -81099958 8042 -D00717BB 0002 -8109995A 8FA0 -D00717BB 0003 -81099958 8040 -D00717BB 0003 -8109995A F070 -D00717BB 0004 -81099958 8040 -D00717BB 0004 -8109995A EF30 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can turn on the amount of players -you want to play with. You can also switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - -NTSC PC Enabler: -Version 1.0 Version 1.1 -8109940A 0060 8109940A 76F0 -D00714DB 0002 D00714DB 0002 -8109940A 7830 8109940A EF90 -D00714DB 0003 D00714DB 0003 -8109940A 7900 8109940A F0D0 -D00714DB 0004 D00714DB 0004 -8109940A 7830 8109940A F0D0 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can then turn on the amount of -players you want to play with. Don't switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - -PAL PC Enabler: -81099958 8042 -8109995A 17B0 -D00717BB 0002 -81099958 8042 -D00717BB 0002 -8109995A 9000 -D00717BB 0003 -81099958 8040 -D00717BB 0003 -8109995A F0D0 -D00717BB 0004 -81099958 8040 -D00717BB 0004 -8109995A EF90 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can then turn on the amount of -players you want to play with. Don't switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - - -Carrington Villa Residence: ---------------------------- -Part One: (Level modifier code) -NTSC -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -80084BF9 002C -81080210 020A -81084BFC 568B -81084C14 50FF -PAL -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -80085149 002C -81080750 020A -8108514C 568B -81085164 50FF - -Part Two: (Weapons and ammo) -NTSC AND PAL -814F7D76 006D -814F7DDE 006C -814F7E86 006E -814F7F2E 01CE -814F7F96 005D -814F803E 01CC -814F80E6 0210 -814F814E 0064 -814F81F6 0062 -814F829E 022B -814F8456 004B -814F84BE 004C -814F8566 0049 -814F860E 01B0 -814F8676 0224 -814F871E 0225 -814F87C6 01AC -814F882E 01A1 -814F88D6 01A2 -814F897E 01B7 -814F89E6 022C -814F8A8E 01B8 -814F8B36 0008 -814F8B9E 0009 -814F8C46 0007 -814F8CEE 01AE -814F8D56 019C -814F8DFE 019D - -Part Three: (All Objects) -NTSC AND PAL -814F8EA4 0029 -814F8EA6 0174 -814F8F5C 804F -814F8F5E 8F7C -814F9038 804F -814F903A 8EA0 -814F8F80 0029 -814F8F82 0175 -814F905C 0029 -814F905E 0172 -814F9114 804F -814F9116 9134 -814F91F0 804F -814F91F2 9058 -814F9138 0029 -814F913A 0173 -814F9214 0029 -814F9216 0170 -814F92CC 804F -814F92CE 92EC -814F93A8 804F -814F93AA 9210 -814F92F0 0029 -814F92F2 0171 -814F93CC 0029 -814F93CE 0176 -814F94AA 016F -814F9512 015D -814F957A 016E -814F95E2 0165 -814F964A 0164 -814F96B2 015E -814F971A 016D -814F9782 016C -814F97E8 0029 -814F97EA 0177 -814F98C4 0029 -814F98C6 017B -814F99A0 0029 -814F99A2 0190 -814F9A7C 0029 -814F9A7E 018F -814F9B58 0029 -814F9B5A 0178 -814F9C34 0029 -814F9C36 0179 -814F9D10 0029 -814F9D12 018C -814F9DEC 0029 -814F9DEE 018B -814F9EC8 0029 -814F9ECA 017C -814F9FA4 0029 -814F9FA6 017D -814FA080 002A -814FA082 017E -814FA0D8 42B0 -814FA15A 080D -814FA15C 0032 -814FA15E 0191 - -Part Four: (Lock Doors) -NTSC AND PAL -814F90CE 0020 -814F91AA 0020 -814F9286 0020 -814F9362 0020 -814FA0F2 0020 - -Part Five: (Hills and Respawns) -NTSC AND PAL (Respawns) -814FA23E 01CD -814FA24A 01C9 -814FA256 0060 -814FA262 004D -814FA26E 01A3 -814FA27A 01BF -814FA286 0014 -814FA292 01B5 -814FA29E 01BB -814FA2AA 01B2 -814FA2B6 01B3 -814FA2C2 0226 -NTSC (Hills) -800AC11D 0009 -810AC122 01CD -810AC124 01C9 -810AC126 0065 -810AC128 0052 -810AC12A 01B6 -810AC12C 001B -810AC12E 01BB -810AC130 01A7 -810AC132 0028 -PAL (Hills) -800AC6BD 0009 -810AC6C2 01CD -810AC6C4 01C9 -810AC6C6 0065 -810AC6C8 0052 -810AC6CA 01B6 -810AC6CC 001B -810AC6CE 01BB -810AC6D0 01A7 -810AC6D2 0028 - -Part Six: (Capture the Case Bases) -NTSC -810AC128 01CD -810AC12C 01CC -810AC12E 01CE -810AC130 005B -810AC132 005F -810AC134 005D -810AC136 005E -810AC138 0019 -810AC13C 001A -810AC13E 001B -810AC140 001C -810AC142 0009 -810AC144 0008 -810AC146 0007 -810AC148 0035 -810AC14C 0036 -810AC14E 01A3 -810AC150 01A4 -810AC152 01BD -810AC154 01BE -810AC156 0037 -810AC158 0226 -810AC15C 000F -810AC15E 000E -810AC160 0234 -810AC162 000B -810AC164 000A -810AC166 000D -PAL -810AC6C8 01CD -810AC6CC 01CC -810AC6CE 01CE -810AC6D0 005B -810AC6D2 005D -810AC6D4 005E -810AC6D6 005F -810AC6D8 0019 -810AC6DC 001A -810AC6DE 001B -810AC6E0 001C -810AC6E2 0007 -810AC6E4 0008 -810AC6E6 0009 -810AC6E8 0035 -810AC6EC 0036 -810AC6EE 0037 -810AC6F0 01A3 -810AC6F2 01A4 -810AC6F4 01BD -810AC6F6 01BE -810AC6F8 0226 -810AC6FC 000A -810AC6FE 000B -810AC700 000D -810AC702 000E -810AC704 000F -810AC706 0234 -End - - -Carrington Villa Rooftop: -------------------------- -Part One: (Level modifier code and lifts code) -NTSC -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -80084BF9 002C -81080210 01E2 -81084BFC 568B -81084C14 50FF -814FCB70 F441 -814FCB74 ECC2 -8107B69A 0150 -814F8EB4 00C5 -814F8EB6 009B -814F8F0C 009B -814F8F0E 009C -814FCAF8 F4DB -814FCAFA 0120 -814FCAFC 02FE -814FCB12 FDBA -814F8F58 00C5 -814F8F5A 004E -814F8FB0 004E -814F8FB2 004F -814FC5DC E7E8 -814FC5DE FEB0 -814FC5E0 078A -814FC5EA FDB0 -PAL -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -80085149 002C -81080750 01E2 -8108514C 568B -81085164 50FF -814FAD30 F441 -814FAD34 ECC2 -8107BB6A 0150 -814F8EB4 00C5 -814F8EB6 009B -814F8F0C 009B -814F8F0E 009C -814FACB8 F4DB -814FACBA 0120 -814FACBC 02FE -814FACD2 FDBA -814F8F58 00C5 -814F8F5A 004E -814F8FB0 004E -814F8FB2 004F -814FA79C E7E8 -814FA79E FEB0 -814FA7A0 078A -814FA7AA FDB0 - -Part Two: (Weapons and ammo) -NTSC AND PAL -814F7D76 01ED -814F7DDE 01EC -814F7E86 01EE -814F7F2E 009A -814F7F96 0099 -814F803E 0094 -814F80E6 022B -814F814E 003B -814F81F6 003A -814F829E 0089 -814F8306 0088 -814F83AE 0083 -814F8456 0008 -814F84BE 0007 -814F8566 0009 -814F860E 0033 -814F8676 0031 -814F871E 0032 -814F87C6 0005 -814F882E 0004 -814F88D6 0006 -814F897E 0015 -814F89E6 01B9 -814F8A8E 0016 -814F8B36 01B5 -814F8B9E 01B6 -814F8C46 0011 -814F8CEE 0023 -814F8D56 0022 -814F8DFE 01BC - -Part Three: (Objects) -NTSC AND PAL -814F8FEC 002A -814F8FEE 017F -814F90AE 1000 -814F90A4 804F -814F90A6 90C4 -814F9180 804F -814F9182 8FE8 -814F90C8 002A -814F90CA 0180 -814F918A 1000 -814F91A2 080D -814F91A4 0032 -814F91A6 0191 -814F9280 002A -814F9282 017E -814F9342 1000 -814F935C 002A -814F935E 0182 -814F941E 1000 -814F9438 016A -814F943A 019C -814F9446 0001 -814F9494 016A -814F9496 019D -814F94A2 0001 -814F94F0 016A -814F94F2 019E -814F94FE 0001 -814F954C 016A -814F954E 019F -814F955A 0001 -814F95A8 016A -814F95AA 01A1 -814F95B6 0001 -814F9604 016A -814F9606 01A2 -814F9612 0001 -814F9660 016A -814F9662 01A3 -814F966E 0001 -814F96BC 016A -814F96BE 01A4 -814F96CA 0001 -814F9718 016A -814F971A 01A5 -814F9726 0001 -814F9774 016A -814F9776 01A6 -814F9782 0001 -814F97D0 016A -814F97D2 01A0 -814F97DE 0001 -814F982C 017B -814F982E 01A7 -814F983A 0001 -814F9888 017B -814F988A 01A8 -814F9896 0001 -814F98E4 017B -814F98E6 01B0 - -Part Four: (More objects) -NTSC AND PAL -814F98F2 0001 -814F9940 0167 -814F9942 01AD -814F994E 0001 -814F999C 0167 -814F999E 01AE -814F99AA 0001 -814F99F8 0167 -814F99FA 01AC -814F9A06 0001 -814F9A54 0167 -814F9A56 01AB -814F9A62 0001 -814F9AB0 0167 -814F9AB2 01AF -814F9ABE 0001 -814F9B0C 016E -814F9B0E 0226 -814F9B68 003C -814F9B6A 0200 -814F9BC4 003E -814F9BC6 0212 -814F9C20 003E -814F9C22 020A -814F9C7C 005B -814F9C7E 00A1 - -Part Five: (Hills and Respawns) -NTSC AND PAL (Respawns) -814F9CDE 01B4 -814F9CEA 003D -814F9CF6 009F -814F9D02 000F -814F9D0E 001E -814F9D1A 01B8 -814F9D26 001D -814F9D32 0013 -814F9D3E 0015 -814F9D4A 01EC -814F9D56 0198 -814F9D62 0001 -814F9D6E 0194 -814F9D7A 0196 -814F9D86 0021 -814F9D92 002E -NTSC (Hills) -800AC11D 0009 -810AC122 01EC -810AC124 003D -810AC126 01B3 -810AC128 0039 -810AC12A 0211 -810AC12C 000F -810AC12E 0205 -810AC130 0050 -810AC132 002C -PAL (Hills) -800AC6BD 0009 -810AC6C2 01EC -810AC6C4 003D -810AC6C6 01B3 -810AC6C8 0039 -810AC6CA 0211 -810AC6CC 000F -810AC6CE 0205 -810AC6D0 0050 -810AC6D2 002C - -Part Six: (Capture the Case Bases) -NTSC -810AC128 0238 -810AC12C 01EC -810AC12E 0095 -810AC130 019A -810AC132 00A0 -810AC134 0198 -810AC136 0094 -810AC138 0039 -810AC13C 003B -810AC13E 0038 -810AC140 003C -810AC142 003E -810AC144 003F -810AC146 0040 -810AC148 0219 -810AC14C 01B3 -810AC14E 0000 -810AC150 01FE -810AC152 000C -810AC154 0002 -810AC156 01FF -810AC158 0053 -810AC15C 0054 -810AC15E 0056 -810AC160 0057 -810AC162 0058 -810AC164 005A -810AC166 0213 -PAL -810AC6C8 0238 -810AC6CC 01EC -810AC6CE 0095 -810AC6D0 019A -810AC6D2 00A0 -810AC6D4 0198 -810AC6D6 0094 -810AC6D8 0039 -810AC6DC 003B -810AC6DE 0038 -810AC6E0 003C -810AC6E2 003E -810AC6E4 003F -810AC6E6 0040 -810AC6E8 0219 -810AC6EC 01B3 -810AC6EE 0000 -810AC6F0 01FE -810AC6F2 000C -810AC6F4 0002 -810AC6F6 01FF -810AC6F8 0053 -810AC6FC 0054 -810AC6FE 0056 -810AC700 0057 -810AC702 0058 -810AC704 005A -810AC706 0213 -End - - -Skedar Ruins: -------------- -I created Skedar Ruins at the same time as writing about multiplayer level -modding. I chose to make a level full of objects rather than doors. You'll see -almost all the objects seen in the solo mission, but you'll only find two sets -of doors. I placed the Buddy bridge over the canyon (as seen in Co-Operative -mode) and the sims have no problems in passing over it. Two of the Bases are -where the Maian leader and third Skedar King are in WAR!, so you can relive -WAR! by playing Capture the Case. The PC versions have been tested and work in -Project 64. This is a version 3.3 cheating device only code. There are two -versions of the NTSC enablers. If you don't know which version you have you -just have to try by trial and error the two enablers. - -How to use the code: --------------------- -Input the code in six different parts. Part one, two, three and four should -always be on. If you want to play in any scenario other than Capture the Case -activate part five (but not part six). If you want to play only Capture the -Case, activate part six (but not part five). To get the codes working with -different player amounts you have to use an enabler. In total you should have -activated six different codes: part one, two, three and four, part five or six, -and an enabler. - -Once all the correct codes have been input, start the game and go straight to -the Combat Simulator Advanced menu. From here follow the instructions that go -with the enabler. Don't try and play in any arenas other than Skedar Ruins. -Once the code is working you can exit and enter the level as many times as you -wish. - - -Skedar Ruins in Multi Enablers: -------------------------------- -NTSC Gameshark Enabler: -Version 1.0 Version 1.1 -D109C7E4 0030 D109C7E4 0030 -8109940A 02E0 8109940A 02E0 -D109C7E4 0020 D109C7E4 0020 -8109940A 02B0 8109940A 02B0 -D00714DB 0002 D00714DB 0002 -8109940A 57A0 8109940A 4FA0 -D00714DB 0003 D00714DB 0003 -8109940A 3520 8109940A 2D20 -D00714DB 0004 D00714DB 0004 -8109940A 1750 8109940A 0FE0 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Select Crash Site with one -player but before entering the level press and hold L+R for a few seconds. When -letting go make sure you pull your finger off L before R. Load the level and -quit as soon as possible. Back at the Advanced Menu press and hold L for a few -seconds. Load Crash Site with one player again and quit. The code should work -from then on. You can turn on the amount of players you want to play with. You -can also switch between different player amounts. When switching back to one -player mode you have to press L before loading the level. Allow time for each -players independent multiplayer menu to appear before loading the level. Don't -quickly add/remove another player and start the game before his menu has time -to appear/disappear. Don't use the drop out function. - -PAL Action Replay Enabler: -D1099FB0 0030 -8109995A 2820 -D1099FB0 0020 -8109995A 27F0 -D00717BB 0002 -8109995A A040 -D00717BB 0003 -8109995A A0D0 -D00717BB 0004 -8109995A 7B90 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Select Crash Site with one -player but before entering the level press and hold L+R for a few seconds. When -letting go make sure you pull your finger off L before R. Load the level and -quit as soon as possible. Back at the Advanced Menu press and hold L for a few -seconds. Load Crash Site with one player again and quit. The code should work -from then on. You can turn on the amount of players you want to play with. You -can also switch between different player amounts, but don't switch back to two -players after playing with three players. When switching back to one player -mode you have to press L before loading the level. Allow time for each players -independent multiplayer menu to appear before loading the level. Don't quickly -add/remove another player and start the game before his menu has time to -appear/disappear. Don't use the drop out function. - -NTSC PC Enabler: -Version 1.0 Version 1.1 -8109940A 0320 8109940A 0320 -D00714DB 0002 D00714DB 0002 -8109940A 5810 8109940A 5010 -D00714DB 0003 D00714DB 0003 -8109940A 3590 8109940A 2D90 -D00714DB 0004 D00714DB 0004 -8109940A 17C0 8109940A 1050 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can turn on the amount of players -you want to play with. You can also switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - -PAL PC Enabler: -8109995A 2860 -D00717BB 0002 -8109995A A0B0 -D00717BB 0003 -8109995A A140 -D00717BB 0004 -8109995A 7C00 - -Instructions: -Go straight to the Advanced Combat Simulator menu. Load Crash Site with one -player and quit as soon as possible. Load Crash Site with one player again and -quit. The code should work from then on. You can turn on the amount of players -you want to play with. You can also switch between different player amounts. -Allow time for each players independent multiplayer menu to appear before -loading the level. Don't quickly add/remove another player and start the game -before his menu has time to appear/disappear. Don't use the drop out function. - - -Skedar Ruins: -------------- -Part One: (Level modifier code) -NTSC -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -810801A0 01E2 -80084BF9 002A -81084BFC 56A5 -81084C14 50FF -PAL -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -810806E0 01E2 -80085149 002A -8108514C 56A5 -81085164 50FF - -Part Two: (Weapons and ammo) -NTSC AND PAL -81500006 002D -8150006E 002E -81500116 002F -815001BE 001F -81500226 0020 -815002CE 0021 -81500376 0053 -815003DE 0051 -81500486 0052 -8150052E 0034 -81500596 0035 -8150063E 0037 -815006E6 0094 -8150074E 00CE -815007F6 00CF -8150089E 000B -81500906 000C -815009AE 000D -81500A56 0060 -81500ABE 005F -81500B66 0061 -81500C0E 006C -81500C76 006B -81500D1E 006D -81500DC6 00D6 -81500E2E 007B -81500ED6 007C -81500F7E 008B -81500FE6 0088 -8150108E 0082 - -Part Three: (Objects) -NTSC AND PAL -81501144 0191 -8150119C 0136 -8150119E 0136 -815011E6 0003 -815011E8 01B8 -815011EA 00EA -81501240 00E9 -81501242 00E9 -8150127C 006E -8150127E 00F7 -81501334 8050 -81501336 1354 -8150133E 0400 -81501358 006E -8150135A 00F8 -81501410 8050 -81501412 1278 -8150141A 0400 -81501434 006E -81501436 00F5 -815014EC 8050 -815014EE 150C -815014F6 0400 -81501510 006E -81501512 00F6 -815015C8 8050 -815015CA 1430 -815015D2 0400 -815015EA 000A -815015EC 0079 -815015EE 0126 -815015F0 0002 -815016C8 00DC -815016CA 010C -81501724 00DC -81501726 010A -81501780 00DD -81501782 010D -815017DC 018C -815017DE 0111 -81501838 00DD -8150183A 010B -81501894 00DE -81501896 014F -815018F0 00DF -815018F2 0150 - -Part Four: (More objects) -NTSC AND PAL -8150194C 006A -8150194E 00E6 -81501952 04E8 -815019A8 006C -815019AA 00E8 -815019AE 04E8 -81501A04 00D1 -81501A06 014A -81501A60 00D2 -81501A62 014B -81501ABC 00D3 -81501ABE 014C -81501B18 00D4 -81501B1A 014D -81501B74 00D5 -81501B76 014E -81501BD0 00CC -81501BD2 0145 -81501C2C 00CD -81501C2E 0146 -81501C88 00CE -81501C8A 0147 -81501CE4 00D0 -81501CE6 0148 -81501CEA 05E8 -81501D40 00CF -81501D42 0149 -81501D46 05E8 -81501D9C 00E2 -81501D9E 00C4 -81501DAA 0001 -81501DA0 0000 -81501DF8 00E2 -81501DFA 0089 -81501E06 0001 -81501DFC 0000 -81501E54 00E2 -81501E56 00B0 -81501E62 0001 -81501E58 0000 -81501EB0 00E2 -81501EB2 003E -81501EBE 0001 -81501EB4 0000 -81501F0C 00E2 -81501F0E 000E -81501F1A 0001 -81501F10 0000 - -Part Five: (Hills and Respawns) -NTSC AND PAL (Respawns) -81501F6E 0000 -81501F7A 00A2 -81501F86 00A7 -81501F92 00AA -81501F9E 00AE -81501FAA 00B3 -81501FB6 00B8 -81501FC2 00BA -81501FCE 00BE -81501FDA 00E2 -81501FE6 00C1 -81501FF2 00C3 -81501FFE 00C5 -8150200A 008D -81502016 008F -81502022 00D2 -NTSC (Hills) -800AC11D 0009 -810AC122 0000 -810AC124 00A9 -810AC126 0030 -810AC128 003E -810AC12A 004F -810AC12C 00BE -810AC12E 007F -810AC130 008C -810AC132 0094 -PAL (Hills) -800AC6BD 0009 -810AC6C2 0000 -810AC6C4 00A9 -810AC6C6 0030 -810AC6C8 003E -810AC6CA 004F -810AC6CC 00BE -810AC6CE 007F -810AC6D0 008C -810AC6D2 0094 - -Part Six: (Capture the Case Bases) -NTSC -810AC128 00D2 -810AC12C 00D0 -810AC12E 00D1 -810AC130 00D3 -810AC132 0130 -810AC134 012D -810AC136 0095 -810AC138 0000 -810AC13C 0001 -810AC13E 00A0 -810AC140 00A1 -810AC142 00A2 -810AC144 00A3 -810AC146 0006 -810AC148 004F -810AC14C 00BA -810AC14E 004D -810AC150 00D7 -810AC152 0046 -810AC154 004C -810AC156 0055 -810AC158 0030 -810AC15C 00B3 -810AC15E 00B4 -810AC160 00B1 -810AC162 00B2 -810AC164 002B -810AC166 00DE -PAL -810AC6C8 00D2 -810AC6CC 00D0 -810AC6CE 00D1 -810AC6D0 00D3 -810AC6D2 0130 -810AC6D4 012D -810AC6D6 0095 -810AC6D8 0000 -810AC6DC 0001 -810AC6DE 00A0 -810AC6E0 00A1 -810AC6E2 00A2 -810AC6E4 00A3 -810AC6E6 0006 -810AC6E8 004F -810AC6EC 00BA -810AC6EE 004D -810AC6F0 00D7 -810AC6F2 0046 -810AC6F4 004C -810AC6F6 0055 -810AC6F8 0030 -810AC6FC 00B3 -810AC6FE 00B4 -810AC700 00B1 -810AC702 00B2 -810AC704 002B -810AC706 00DE -End - - -Fully working solo missions: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Crash Site in Carrington Villa: -------------------------------- -To get this code working, go to the Solo Mission menu and select Crash Site in -either Perfect Agent or Perfect Dark Agent mode. Once the cut-scene starts, -press L and R at the same time. If you want to restart the level, go back to -the empty level and walk off the edge, then repeat the process. This code will -work in all versions of cheating devices. The PC versions work in Project 64. -It should be possible to complete this level, the Skedar shuttle has been -moved into the level and changed into a different object. - -NTSC: (Gameshark Version) -8107FE88 0018 -8107FE8A 016A -8107FE8C 0169 -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -80084563 003D -800A221B 00FF -D109C7E4 0030 -81516248 C5E0 -D109C7E4 0030 -8151624C 4492 -D109C7E4 0030 -81516250 C582 -815004F2 00BF -81501E3C 0032 -81501E3E 0191 -815160E0 C5AE -815160E4 449D -815160E8 4528 -End - -NTSC PC: -8107FE88 0018 -8107FE8A 016A -8107FE8C 0169 -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -80084563 003D -800A221B 00FF -D109C7E4 0030 -81516228 C5E0 -D109C7E4 0030 -8151622C 4492 -D109C7E4 0030 -81516230 C582 -815004D2 00BF -81501E1C 0032 -81501E1E 0191 -815160C0 C5AE -815160C4 449D -815160C8 4528 -End - -PAL: (Action Replay Version) -810803C8 0018 -810803CA 016A -810803CC 0169 -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -80084AB3 003D -800A27BB 00FF -D1099FB0 0030 -81513948 C5E0 -D1099FB0 0030 -8151394C 4492 -D1099FB0 0030 -81513950 C582 -814FF5F2 00BF -81500F3C 0032 -81500F3E 0191 -815137E0 C5AE -815137E4 449D -815137E8 4528 -End - -PAL PC: -810803C8 0018 -810803CA 016A -810803CC 0169 -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -80084AB3 003D -800A27BB 00FF -D1099FB0 0030 -81513928 C5E0 -D1099FB0 0030 -8151392C 4492 -D1099FB0 0030 -81513930 C582 -814FF5D2 00BF -81500F1C 0032 -81500F1E 0191 -815137C0 C5AE -815137C4 449D -815137C8 4528 -End - - -WAR! in Deep Sea: ------------------ -Breifing: - -The true conspiracy has finally been revealed! Using a modified version of the -Ceten teleports, a Carrington Institute S.W.A.T team has infiltrated the Ceten -battleship. It would seem that part of the ship survived the explosion, and -that the CI are there to retrieve data on the Ceten Megaweapon. Join a team of -Maian soldiers and put a stop to their evil plans. - -Objective One: Complete objective two before objective three - -Objective Two: Eliminate Elvis - -This human-loving traitor has allied himself with the humans. He is in control -of the Carrington Institute troops that are swarming the Ceten ship. It is -therefore imperative that you eliminate him as fast as possible. - -Objective Three: Assassinate Daniel Carrington - -Daniel Carrington is currently retrieving the data on the Ceten Megaweapon. He -knows too much and must be silenced. Unfortunately, Carrington has got hold of -one of those mass-spawning-clone machines of the Skedar. He's currently using -it to spawn an army of Perfect Dark's, the Carrington Institute's best agent. -Expect heavy resistance. - -END - -To get this code working, simply choose WAR! on either the Perfect Agent, or -Perfect Dark Agent difficulty, from the Solo Missions menu. Once the cutscene -starts, press L and R. If you've got a Gameshark version 3.0, then don't -activate any other codes while using this one. This level might be a bit -difficult, so you'll want to adjust the settings in Perfect Dark Agent Mode. -You can change the costumes, weapons and soundtrack. If you remove the costumes -and weapons you end up with Skedar, like in WAR!. Costumes can be changed by -using the values on the costume list, weapons can be changes by using the -weapon type list and the in-game object list (see resources section). The PC -versions have been tested and work in Project 64. - -NTSC: (Gameshark Version) - 77 lines of code -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -8107FD38 0024 -8107FD3A 017A -8107FD3C 0179 -D1067E56 0400 -81067E56 0600 -D109C7E4 0030 -8150BA78 450A -D109C7E4 0030 -8150BA7C 4352 -D109C7E4 0030 -8150BA80 463D -814F5B8A 0000 -814F5D2A 0003 -814F5DAA 0004 -814F7936 0005 -814F7A12 0006 -814F7AEE 0007 -814F7BCA 0008 -814F7CA6 0009 -814F6176 0013 -814F6252 0014 -814F632E 0015 -814F640A 0016 -814F6506 0017 -814F65E2 0018 -814F66DE 0019 -814F67BA 001A -814F68B6 001B -814F6992 001C -814F6A6E 001D -814F6B4A 001E -814F6C46 001F -814F6D22 0020 -814F6E1E 0021 -814F6EFA 0022 -814F7152 0023 -814F71BE 0024 -814F7262 0025 -814F5736 0026 -814F5792 0027 -814F5802 0028 -814F58DE 0029 -814F5036 00D2 -814F8880 00D7 -814F888E DD04 -814F889A 00D8 -814F88A8 E004 -814F88B4 00D2 -814F88C2 D904 -814F51F2 00EE -814F8A8A 00F0 -814F8A98 E904 -814F8AA4 00EF -814F8AB2 EB04 -814F5286 010E -814F8C8E 1204 -814F515E 029B -814F528A 0404 -814F52AC 0108 -Second Skedar Kings costume -814F51F4 9405 -Second Skedar respawns costumes -814F8A88 92FF -814F8A94 C692 -814F8AA2 92FF -814F8AAE C692 -Third Skedar Kings costume -814F5288 5A07 -Third Skedar respawns costume -814F8C8A C695 -814F8C8C 0C01 -Second Skedar respawns weapon -814F8D22 00FE -814F8D24 1100 -Third Skedar respawns weapon -814F8DBA 011D -814F8DBC 2A00 -Player One's weapon -814F86A6 000C -Soundtrack -810845AA 003C -End - -NTSC PC: -810800B8 0001 -810800BA 0184 -810800BC 0183 -810800BE 013C -8107FD38 0024 -8107FD3A 017A -8107FD3C 0179 -D1067E56 0400 -81067E56 0600 -D109C7E4 0030 -8150BA38 450A -D109C7E4 0030 -8150BA3C 4352 -D109C7E4 0030 -8150BA40 463D -814F5B4A 0000 -814F5CEA 0003 -814F5D6A 0004 -814F78F6 0005 -814F79D2 0006 -814F7AAE 0007 -814F7B8A 0008 -814F7C66 0009 -814F6136 0013 -814F6212 0014 -814F62EE 0015 -814F63CA 0016 -814F64C6 0017 -814F65A2 0018 -814F669E 0019 -814F677A 001A -814F6876 001B -814F6952 001C -814F6A2E 001D -814F6B0A 001E -814F6C06 001F -814F6CE2 0020 -814F6DDE 0021 -814F6EBA 0022 -814F7112 0023 -814F717E 0024 -814F7222 0025 -814F56F6 0026 -814F5752 0027 -814F57C2 0028 -814F589E 0029 -814F4FF6 00D2 -814F8840 00D7 -814F884E DD04 -814F885A 00D8 -814F8868 E004 -814F8874 00D2 -814F8882 D904 -814F51B2 00EE -814F8A4A 00F0 -814F8A58 E904 -814F8A64 00EF -814F8A72 EB04 -814F5246 010E -814F8C4E 1204 -814F511E 029B -814F524A 0404 -814F526C 0108 -Second Skedar Kings costume -814F51B4 9405 -Second Skedar respawns costumes -814F8A48 92FF -814F8A54 C692 -814F8A62 92FF -814F8A6E C692 -Third Skedar Kings costume -814F5248 5A07 -Third Skedar respawns costume -814F8C4A C695 -814F8C4C 0C01 -Second Skedar respawns weapon -814F8CE2 00FE -814F8CE4 1100 -Third Skedar respawns weapon -814F8D7A 011D -814F8D7C 2A00 -Player One's weapon -814F8666 000C -Soundtrack -810845AA 003C -End - -PAL: (Action Replay Version) - 78 lines of code -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -81080278 0024 -8108027A 017A -8108027C 0179 -D1067B36 0400 -81067B36 0600 -D1099FB0 0030 -815037D8 450A -D1099FB0 0030 -815037DC 4352 -D1099FB0 0030 -815037E0 463D -814EE36A 0000 -814EE50A 0003 -814EE58A 0004 -814F0116 0005 -814F01F2 0006 -814F02CE 0007 -814F03AA 0008 -814F0486 0009 -814EE956 0013 -814EEA32 0014 -814EEB0E 0015 -814EEBEA 0016 -814EECE6 0017 -814EEDC2 0018 -814EEEBE 0019 -814EEF9A 001A -814EF096 001B -814EF172 001C -814EF24E 001D -814EF32A 001E -814EF426 001F -814EF502 0020 -814EF5FE 0021 -814EF6DA 0022 -814EF932 0023 -814EF99E 0024 -814EFA42 0025 -814EDF16 0026 -814EDF72 0027 -814EDFE2 0028 -814EE0BE 0029 -814ED816 00D2 -814F1060 00D7 -814F106E DD04 -814F107A 00D8 -814F1088 E004 -814F1094 00D2 -814F10A2 D904 -814ED9D2 00EE -814F126A 00F0 -814F1278 E904 -814F1284 00EF -814F1292 EB04 -814EDA66 010E -814F146E 1204 -814ED93E 029B -Second Skedar King's costume -814ED9D4 9405 -Second Skedar respawn costumes -814F1268 92FF -814F1274 C692 -814F1282 92FF -814F128E C692 -Third Skedar King's costume -814EDA68 5A07 -Third Skedar respawns costume -814F146A C695 -814F146C 0C01 -Second Skedar respawns weapon -814F1502 00FE -814F1504 1100 -Third Skedar respawns weapon -814F159A 011D -814F159C 2A00 -Third Skedar King's weapon -814EDA8C 00F9 -814EDAE4 0900 -Player One's weapon -814F0E86 000C -Third Skedar King's behaviour -814EDA6A 0404 -Soundtrack -81084AFA 003C -End - -PAL PC: -810805F8 0001 -810805FA 0184 -810805FC 0183 -810805FE 013C -81080278 0024 -8108027A 017A -8108027C 0179 -D1099FB0 0030 -81503798 450A -D1099FB0 0030 -8150379C 4352 -D1099FB0 0030 -815037A0 463D -D1067B36 0400 -81067B36 0600 -814EE32A 0000 -814EE4CA 0003 -814EE54A 0004 -814F00D6 0005 -814F01B2 0006 -814F028E 0007 -814F036A 0008 -814F0446 0009 -814EE916 0013 -814EE9F2 0014 -814EEACE 0015 -814EEBAA 0016 -814EECA6 0017 -814EED82 0018 -814EEE7E 0019 -814EEF5A 001A -814EF056 001B -814EF132 001C -814EF20E 001D -814EF2EA 001E -814EF3E6 001F -814EF4C2 0020 -814EF5BE 0021 -814EF69A 0022 -814EF8F2 0023 -814EF95E 0024 -814EFA02 0025 -814EDED6 0026 -814EDF32 0027 -814EDFA2 0028 -814EE07E 0029 -814ED7D6 00D2 -814F1020 00D7 -814F102E DD04 -814F103A 00D8 -814F1048 E004 -814F1054 00D2 -814F1062 D904 -814ED992 00EE -814F122A 00F0 -814F1238 E904 -814F1244 00EF -814F1252 EB04 -814EDA26 010E -814F142E 1204 -814ED8FE 029B -814EDA2A 0404 -Second Skedar Kings costume -814ED994 9405 -Second Skedar respawns costumes -814F1228 92FF -814F1234 C692 -814F1242 92FF -814F124E C692 -Third Skedar Kings costume -814EDA28 5A07 -Third Skedar respawns costume -814F142A C695 -814F142C 0C01 -Second Skedar respawns weapon -814F14C2 00FE -814F14C4 1100 -Third Skedar respawns weapon -814F155A 011D -814F155C 2A00 -Third Skedar Kings weapon -814EDA4C 00F9 -814EDAA4 0900 -Player One's weapon -814F0E46 000C -Soundtrack -81084AFA 003C -End - - -Pelagic II in Carrington Villa: -------------------------------- -Maian terrorists have invaded Carrington's Villa! In order to stop this alien -invasion you need to eliminate all of them. Reconnesiance reveals that the -Maians have made a stonghold in the lower basement where they are testing a new -kind of time manipulative device, resulting in what can only be described as -real time lag. Avoid meeting too many Maians at once. Time could slow so much -down that they overwhelm you! - -This code will work a few seconds after the small Rareware logo at the bottom -of the screen turns up. The aim of the mission is to kill as many Maians as -possible! If you die simply press A a few times to restart. Don't press B at -the objectives menu. The only value that you can change is the one for the last -code on the list. This is the difficulty mod, so set this to 0 for Agent, 1 for -Special Agent and 2 for Perfect Agent (which is extremely hard). - -NTSC: -8105D9B7 0021 -8009DFE9 0021 -81075582 0000 -81074602 0000 -8107459A 0000 -8107FFA0 0018 -8107FFA2 016A -8107FFA4 0169 -8108456A 003E -8107B178 0100 -8107B17A 0001 -8106FF42 EB40 -8107B858 036E -8107D904 0DA8 -8107D906 0266 -8107D90C 3F12 -8107D90E A10D -81062C5A 0029 -81062C5E 0029 -81062C62 0029 -81062C66 0029 -80084023 000X -End - -PAL -8105D656 0021 -8009E589 0021 -81075A52 0000 -81074AAA 0000 -81074A42 0000 -810804E0 0018 -810804E2 016A -810804E4 0169 -81084ABA 003E -8107B648 0100 -8107B64A 0001 -810702D2 EED0 -8107BD28 036E -8107DDD4 0DA8 -8107DDD6 0266 -8107DDDC 3F12 -8107DDDE A10D -8106293A 0029 -8106293E 0029 -81062942 0029 -81062946 0029 -80084563 000X -End - - -___________ - -Extra Codes -___________ - -Perfect Bloodness: (Increases blood amount) ------------------- -NTSC -8107F8A8 4180 -8107F8B0 4534 -8107F8B8 4358 -8007F8A0 0042 -8007F8A4 0043 -8007F8B4 0043 -PAL -8107FE08 4180 -8107FE10 4534 -8107FE18 4358 -8007FE00 0042 -8007FE04 0043 -8007FE14 0043 - -This code can be really...satisfying...sometimes. - - -Real Skedar in multiplayer: ---------------------------- -They run like Skedar, they roar like Skedar and they die like Skedar! - -The following codes change the ShockTrooper character into Skedar, and change -the human animations seen in multiplayer into Skedar animations. To get this -code working set all the sim characters to ShockTrooper, with ShockTrooper -helmets. Exit the character select menu and hold down L for a few seconds. -Unfortunately, you can't play as a Skedar, so make sure none of the human -players are using the ShockTrooper costume. Once you've pressed L, don't enter -the character costume menu again. - -Replace the XX on line four with: -5C - Skedar -7B - Mini Skedar -93 - Skedar King - -NTSC Gameshark: -D009C7E5 0020 -80087561 00FF -D009C7E5 0020 -80087875 00XX -81070768 0337 -8107076A 0338 -8107076C 0339 -8107076E 033A -81070770 033B -81070772 033C -81070774 033D -81070776 0336 -81065BE0 00C0 -81067AA0 0392 -81067AE8 0394 -810709F4 032A -81070A3C 032A -810656C0 00C0 -81067A10 0392 -81067A58 0394 -81070A84 032A -81070ACC 032A -81070CF8 032F -81070D10 0392 -81070D28 0394 -81070D40 032A -81070D58 032A -81070D70 032A -81070D88 032A -810663D8 00C0 -81067B30 0392 -81067B78 0394 -81070B14 032A -81070B5C 032A - -PAL Action Replay / Equalizer: -D0099FB1 0020 -80087AB1 00FF -D0099FB1 0020 -80087DC5 00XX -81070A48 0337 -81070A4A 0338 -81070A4C 0339 -81070A4E 033A -81070A50 033B -81070A52 033C -81070A54 033D -81070A56 0336 -810658C0 00C0 -81067780 0392 -810677C8 0394 -81070CD4 032A -81070D1C 032A -810653A0 00C0 -810676F0 0392 -81067738 0394 -81070D64 032A -81070DAC 032A -81070FD8 032F -81070FF0 0392 -81071008 0394 -81071020 032A -81071038 032A -81071050 032A -81071068 032A -810660B8 00C0 -81067810 0392 -81067858 0394 -81070DF4 032A -81070E3C 032A - -If you want to play with a selection of different Skedar types, use these -additional codes. These codes use the same values as above. To give an example, -if you want to play with Skedar and Skedar Kings at the same time, set the main -code as Skedar (5C), and the dataDyne Sniper code as Skedar King (93). When you -select character costumes for the sims, set all Skedar to the ShockTrooper -costume, and all Skedar Kings to the dataDyne Sniper costume (with the correct -masks): - -dataDyne Sniper costume and mask mod: -NTSC -D009C7E5 0020 -80087569 00FF -D009C7E5 0020 -800878BD 00XX -PAL -D0099FB1 0020 -80087AB9 00FF -D0099FB1 0020 -80087E0D 00XX - -Biotechnician costume and mask mod: -NTSC -D009C7E5 0020 -80087565 00FF -D009C7E5 0020 -80087925 00XX -PAL -D0099FB1 0020 -80087AB5 00FF -D0099FB1 0020 -80087E75 00XX - -This code has one major flaw. The human player animations have been changed -into Skedar animations, which means that all the human players that are using -human bodies will look weird. They will be flying in the air with their legs -and arms sticking out! This code works best with just one player (because you -can't see yourself). Several minor flaws result from the fact that the Skedar -animations were never meant to be used in multiplayer. When the Skedar run -their guns will point downward, but they will still shoot in the right -direction. Another flaw is the fact that there is no Skedar bent down -animation. I used a BETA halting Skedar animation that has the Skedar look like -it's bent down, but they jump up and down. Don't play with the sims in -Warehouse because the Skedar sims jump out of the level in the small air ducts. - -I changed the "sim standing still with no guns" animation into the BETA Skedar -Scratching His Left Ear animation, because it's cute to watch. - - -GoldenEye Weapons in Multiplayer: ---------------------------------- -These codes change Perfect Darks weapons into GoldenEye's weapons, and allow -you to use them in multiplayer. The codes are a mixture of codes that I have -hacked myself, and codes that I got from SquareGuru's PD weapons FAQ on -gamefaqs.com. There's a code for each weapon, so you can choose which GE -weapons to activate. There are also different versions of some of the codes. If -you want to play with a specific Perfect Dark weapon at the same time as a -GoldenEye weapon, you can choose between several weapons to change into that -GoldenEye weapon. To get the best results use the first eight codes, these give -you all eight GE weapons. They will be in the correct order, and the sims will -use them correctly according to how powerful each weapon is. The PAL versions -are slightly longer because they change the name of the weapon to it's PAL name -(like PP9i to PP7). Some of the guns have an extra code that only lets players -pick up one gun (by default you will be able to get double). These codes aren't -just limited to multiplayer, they work perfectly in the solo mission. To give -an example, Falcon 2 to PP91 (PP7) gives you a PP91 (PP7) at the start of -Investigation. - - -Falcon 2 to PP9i (PP7) -NTSC -8106B658 0408 -8106FF22 E85C -8107B818 036A -PAL -8106B9E8 0408 -810702B2 EBEC -8107BCE8 036A -8106AA98 4C32 -811A6C56 3720 - - -Falcon 2 to CC13 (DD44) Dostovei. -NTSC -8106B654 40C0 -8106FF2A E918 -8107B850 036B -PAL -8106B9E4 40C0 -810702BA ECA8 -8107BD20 036B -8106AAB8 4C33 -811A6C5C 4444 -811A6C5E 3434 - - -Magsec 4 to KLO1313 (Klobb) -NTSC -8106B98C 3F19 -8106B990 4170 -8106B994 0000 -80087291 0002 -80087292 0032 -8106FF2E E9D0 -8107B820 036C -PAL -8106BD1C 3F19 -8106BD20 4170 -8106BD24 0000 -800877E1 0002 -800877E2 0032 -810702BE ED60 -8107BCF0 036C -8106AAC8 4C34 -801A6C65 006C -811A6C66 6F62 -811A6C68 620A -811A6C6A 0000 - - -Laptop Gun to KF7 Special (KF7 Soviet) -NTSC -8106D0FC 3F80 -8106D100 4120 -8106D104 040C -800872EB 0004 -8106FF52 EA88 -8107B898 036D -8006EAD7 0050 -Can only hold one: -8006EAD6 0026 -PAL -8106D48C 3F80 -8106D490 4120 -8106D494 040C -8008783B 0004 -810702E2 EE18 -8107BD68 036D -8006EE67 0050 -8106AB58 4C35 -801A6C75 006F -811A6C76 7669 -811A6C78 6574 -801A6C7A 0020 -Can only hold one: -8006EE66 0026 - - -CMP150 to ZZT (9mm) (ZMG (9mm)) -NTSC -8106C328 4110 -8106FF42 EB40 -8107B858 036E -PAL -8106C6B8 4110 -810702D2 EED0 -8107BD28 036E -8106AB18 4C36 -801A6C81 004D -801A6C82 0047 - - -Dragon to DMC (D5K) Deutsche -NTSC -8106C928 3F80 -8106C92C 40E0 -800872F5 0002 -800872F6 0064 -8106FF56 EBF8 -8107B868 036F -8006EC47 0050 -Can only hold one: -8006EC46 0026 -PAL -8106CCB8 3F80 -8106CCBC 40E0 -80087845 0002 -80087846 0064 -810702E6 EF88 -8107BD38 036F -8006EFD7 0050 -8106AB68 4C37 -801A6C8D 0035 -801A6C8E 004B -Can only hold one: -8006EFD6 0026 - - -K7 Avenger to AR53 (AR33) Assault Rifle -NTSC -8106CEB8 3FB3 -8006EC84 0005 -8106FF5A ECB0 -8107B878 0370 -8006ECFF 0050 -Change AR53 to AR33: -801A52C6 0033 -Can only hold one: -8006ECFE 0026 -PAL -8106D248 3FB3 -8006F014 0005 -810702EA F040 -8107BD48 0370 -8006F08F 0050 -8106AB78 4C38 -801A6C96 0033 -Can only hold one: -8006F08E 0026 - - -AR34 to RC-P45 (RC-P90) -NTSC -8106CCE0 3FE6 -8106CCE4 40C0 -8106CCE8 0408 -8006ED3C 0005 -80087309 0002 -8106FF5E ED68 -8107B860 0371 -8006EDB7 0050 -Can only hold one: -8006EDB6 0026 -PAL -8106D070 3FE6 -8106D074 40C0 -8106D078 0408 -8006F0CC 0005 -80087859 0002 -810702EE F0F8 -8107BD30 0371 -8006F147 0050 -8106AB88 4C39 -811A6CA0 3930 -Can only hold one: -8006F146 0026 - ------------------------------------------ - -Cyclone to KLO1313 (Klobb) (Blue bullets) -NTSC -8106C4D0 3F19 -8106C4D4 4170 -8106C4D8 0000 -8106FF46 E9D0 -8107B880 036C -800872CE 0032 -PAL -8106C860 3F19 -8106C864 4170 -8106C868 0000 -810702D6 ED60 -8107BD50 036C -8008781E 0032 -8106AB28 4C34 -801A6C65 006C -811A6C66 6F62 -811A6C68 620A -811A6C6A 0000 - - -Phoenix to KLO1313 (Klobb) (Green bullets) -NTSC -8106BEBC 3F19 -8106BEC0 4170 -8106BEC4 0000 -800872A5 0002 -800872A6 0032 -8106FF36 E9D0 -8107B840 036C -PAL -8106C24C 3F19 -8106C250 4170 -8106C254 0000 -800877F5 0002 -800877F6 0032 -810702C6 ED60 -8107BD10 036C -8106AAE8 4C34 -801A6C65 006C -811A6C66 6F62 -811A6C68 620A -811A6C6A 0000 - - -K7 Avenger to KF7 Special (KF7 Soviet) -NTSC -8106CEB8 3F80 -8106CEBC 4120 -8106CEC0 040C -8106FF5A EA88 -8107B878 036D -8006EAD7 0050 -Can only hold one: -8006EAD6 0026 -PAL -8106D248 3F80 -8106D24C 4120 -8106D250 040C -810702EA EE18 -8107BD48 036D -8006EE67 0050 -8106AB78 4C35 -801A6C75 006F -811A6C76 7669 -811A6C78 6574 -801A6C7A 0020 -Can only hold one: -8006EE66 0026 - - -Callisto NTG to ZZT (9mm) (ZMG (9mm)) (Green bullets) -NTSC -8106C7A8 3F80 -800872D8 0064 -8106FF4A EB40 -8107B888 036E -PAL -8106CB38 3F80 -80087828 0064 -810702DA EED0 -8107BD58 036E -8106AB38 4C36 -801A6C81 004D -801A6C82 0047 - - -Phoenix to DMC (D5K) Deutsche (Green bullets) -NTSC -8106BEBC 3F80 -8106BEC0 40E0 -8106BEC4 0612 -800872A5 0002 -800872A6 0064 -8106FF36 EBF8 -8107B840 036F -8006EC47 0050 -Can only hold one: -8006EC46 0026 -PAL -8106C24C 3F80 -8106C250 40E0 -8106C254 0612 -800877F5 0002 -800877F6 0064 -810702C6 EF88 -8107BD10 036F -8006EFD7 0050 -8106AAE8 4C37 -801A6C8D 0035 -801A6C8E 004B -Can only hold one: -8006EFD6 0026 - - -Cyclone to DMC (D5K) Deutsche (Blue bullets) -NTSC -8106C4D0 3F80 -8106C4D4 40E0 -8106C4D8 0612 -8106FF46 EBF8 -8107B880 036F -800872CE 0032 -8006EC47 0050 -Can only hold one: -8006EC46 0026 -PAL -8106C860 3F80 -8106C864 40E0 -8106C868 0612 -810702D6 EF88 -8107BD50 036F -8008781E 0032 -8006EFD7 0050 -8106AB28 4C37 -801A6C8D 0035 -801A6C8E 004B -Can only hold one: -8006EFD6 0026 - - -AR34 to AR53 (AR33) Assault Rifle -NTSC -8106CCE4 40C0 -8006EC84 0005 -8106FF5E ECB0 -8107B860 0370 -8006ECFF 0050 -Change AR53 to AR33: -801A52C6 0033 -Can only hold one: -8006ECFE 0026 -PAL -8106D074 40C0 -8006F014 0005 -810702EE F040 -8107BD30 0370 -8006F08F 0050 -8106AB88 4C38 -801A6C96 0033 -Can only hold one: -8006F08E 0026 - - -Laptop Gun to RC-P45 (RC-P90) -NTSC -8106D0FC 3FE6 -8106D104 0408 -8006ED3C 0005 -8106FF52 ED68 -8107B898 0371 -8006EDB7 0050 -Can only hold one: -8006EDB6 0026 -PAL -8106D48C 3FE6 -8106D494 0408 -8006F0CC 0005 -810702E2 F0F8 -8107BD68 0371 -8006F147 0050 -8106AB58 4C39 -811A6CA0 3930 -Can only hold one: -8006F146 0026 - - -_______________________________________________________________________________ - - < Resources > -_______________________________________________________________________________ - -The Resources section contains the following lists: - -Global object list (values and names) -Global object list (addresses in ROM) -In-game object list (sorted by number) -In-game object list (sorted by level) -Costume list -Weapon type list -Ammo type list -Text lists -BETA Text compilation - - -Perfect Dark Global object list: (showing values and names) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The values on this list are used as a first reference to any object in the -game. To find an object in the memory, do a search for its value. These values -are best used to locate the level list (for level modding), weapon list (for -weapon modding), costumes list (for costume modding) and local (in-game) object -list (for object modding). The file names are found in the ROM. - -Value: File name: What it is (if known): -| | | -v v v -0000 - Nothing -0001 - bgdata/bg_sev.seg -0002 - bgdata/bg_silo.seg -0003 - bgdata/bg_stat.seg -0004 - bgdata/bg_arec.seg - Ravine bgdata -0005 - bgdata/bg_arch.seg -0006 - bgdata/bg_tra.seg -0007 - bgdata/bg_dest.seg -0008 - bgdata/bg_sevb.seg -0009 - bgdata/bg_azt.seg - Crash Site bgdata -000A - bgdata/bg_pete.seg - Chicago bgdata -000B - bgdata/bg_depo.seg - G5 Building (Solo) bgdata -000C - bgdata/bg_ref.seg - Complex bgdata -000D - bgdata/bg_cryp.seg - G5 Building (MP) bgdata -000E - bgdata/bg_dam.seg - Pelagic II bgdata -000F - bgdata/bg_ark.seg -0010 - bgdata/bg_run.seg -0011 - bgdata/bg_sevx.seg -0012 - bgdata/bg_jun.seg - Temple bgdata -0013 - bgdata/bg_dish.seg - CI Training bgdata -0014 - bgdata/bg_cave.seg - Air Base bgdata -0015 - bgdata/bg_cat.seg -0016 - bgdata/bg_crad.seg - Pipes bgdata -0017 - bgdata/bg_sho.seg - Skedar Ruins bgdata -0018 - bgdata/bg_eld.seg - Villa bgdata -0019 - bgdata/bg_imp.seg -001A - bgdata/bg_ash.seg -001B - bgdata/bg_lue.seg - Area 51 bgdata -001C - bgdata/bg_ame.seg - dataDyne Building bgdata -001D - bgdata/bg_rit.seg - Air Force One bgdata -001E - bgdata/bg_oat.seg - Skedar bgdata -001F - bgdata/bg_ear.seg - Investigation bgdata -0020 - bgdata/bg_lee.seg - Attack Ship bgdata -0021 - bgdata/bg_lip.seg -0022 - bgdata/bg_len.seg -0023 - bgdata/bg_wax.seg -0024 - bgdata/bg_pam.seg - Deep Sea bgdata -0025 - bgdata/bg_uff.seg -0026 - bgdata/bg_old.seg -0027 - bgdata/bg_ate.seg -0028 - bgdata/bg_lam.seg -0029 - bgdata/bg_mp1.seg - Base bgdata -002A - bgdata/bg_mp2.seg -002B - bgdata/bg_mp3.seg - Area 52 bgdata -002C - bgdata/bg_mp4.seg - Warehouse bgdata -002D - bgdata/bg_mp5.seg - Car Park bgdata -002E - bgdata/bg_mp6.seg -002F - bgdata/bg_mp7.seg -0030 - bgdata/bg_mp8.seg -0031 - bgdata/bg_mp9.seg - Ruins bgdata -0032 - bgdata/bg_mp10.seg - Sewers bgdata -0033 - bgdata/bg_mp11.seg - Felicity bgdata -0034 - bgdata/bg_mp12.seg - Fortress bgdata -0035 - bgdata/bg_mp13.seg - Villa bgdata -0036 - bgdata/bg_mp14.seg -0037 - bgdata/bg_mp15.seg - Grid bgdata -0038 - bgdata/bg_mp16.seg -0039 - bgdata/bg_mp17.seg -003A - bgdata/bg_mp18.seg -003B - bgdata/bg_mp19.seg -003C - bgdata/bg_mp20.seg -003D - ob/ob_mid.seg -003E - Ca51guardZ - BETA Area 51 Guard -003F - Carea51guardZ - Area 51 Guard -0040 - CcarringtonZ - Carrington -0041 - CcassandraZ - Cassandra de Vries -0042 - Cdark_combatZ - Joanna Dark Combat Suit -0043 - Cdark_frockZ - Joanna Dark Party Frock -0044 - Cdark_trenchZ - Joanna Dark Trench Coat -0045 - CddshockZ - dataDyne Shock Trooper -0046 - Cdd_secguardZ - dataDyne Security Guard -0047 - CdjbondZ - Black Tuxedo -0048 - CdrcarrollZ - Dr. Caroll -0049 - CelvisZ - Elvis -004A - Celvis1Z - Elvis1 -004B - CeyespyZ - Camspy, Drugspy, Bombspy -004C - Cfem_guardZ - Cassandra’s Bodyguard -004D - ClabtechZ - CI Lab Technician -004E - CmrblondeZ - Mr. Blonde -004F - CofficeworkerZ - dataDyne Programmer -0050 - Cofficeworker2Z - dataDyne Programmer -0051 - CoverallZ - Area 51 Overall -0052 - CsecretaryZ - dataDyne Secretary -0053 - CskedarZ - Skedar -0054 - CstripesZ - Trent Easton’s Bodyguard -0055 - CtestchrZ - Trent Easton Standing upright -0056 - CthekingZ - Maian with Blue Shoes -0057 - CtrentZ - Trent Easton -0058 - GcartblueZ - Bullet long version -0059 - GcartridgeZ - Bullet short version -005A - GcartrifleZ - Slayer Rocket -005B - GcartshellZ - Shotgun shell -005C - GjoypadZ - Nintendo 64 Controller -005D - Pa51_crate1Z - Crate -005E - Pa51_crate2Z - Blue Tinted Crate -005F - Pa51_crate3Z - Brown Tinted Crate -0060 - Pa51_exp1Z - Area 51 Hole-in-wall frame -0061 - Pa51_exp2Z - Area 51 Hole-in-wall frame -0062 - Pa51_horiz_door_botZ - Area 51 Square Door (Bottom part) -0063 - Pa51_horiz_door_glZ - Area 51 Door with glass window -0064 - Pa51_horiz_door_secretZ - Area 51 Door -0065 - Pa51_horiz_door_topZ - Area 51 Square Door (Top part) -0066 - Pa51_lift_controlZ - Area 51 Small lift from hanger -0067 - Pa51_lift_hangarZ - Area 51 Hanger lift -0068 - Pa51_lift_storeZ - Area 51 Storage lift 1 -0069 - Pa51_lift_thinwallZ - Area 51 Storage lift 2 -006A - Pa51_unexp1Z - Area 51 Wall you blow up -006B - Pa51_unexp2Z - Area 51 Wall you blow up -006C - Pa51_unexp3Z - Area 51 Wall you blow up -006D - Pa51_vert_door_leftZ - Area 51 Door (Left) -006E - Pa51_vert_door_rightZ - Area 51 Door (Right) -006F - Pa51_vert_door_stZ - Area 51 Door -0070 - Pa51boardZ - Area 51 Bulletin board with Maian pictures -0071 - Pa51chairZ - BETA Area 51 Chair -0072 - Pa51deskentZ - Area 51 Entrance hall desk -0073 - Pa51divideZ - Area 51 Office divider (Peachy coloured) -0074 - Pa51screenZ - BETA Area 51 Screen -0075 - Pa51tableZ - Area 51 Table -0076 - Pa51trolleyZ - Area 51 Empty Hoverbed -0077 - Pa51wastebinZ - Area51 Trashcan -0078 - Paivillabot1Z - Villa Wine Bottle (Green) -0079 - Paivillabot2Z - Villa Wine Bottle (Red) -007A - Paivillabot3Z - Villa Wine Bottle (Red, not JUNG brand) -007B - Paivilladoor1Z - BETA Villa door -007C - Paivilladoor2aZ - Villa Wooden door -007D - Paivilladoor4Z - BETA Villa Wooden slide door -007E - PaivillawindmillZ - Villa Windmill propellar -007F - Pal_airlockZ - Deep Sea Door from beginning of level -0080 - Pal_dockliftZ - Deep Sea Lift -0081 - Paldoor_lZ - Deep Sea Door (Left) -0082 - Paldoor_rZ - Deep Sea Door (Right) -0083 - Pborg_crateZ - BETA Cube with a circuit-like texture -0084 - PcaseZ - Case -0085 - Pch_shutter1Z - Chicago Metal shutter -0086 - PchrbriefcaseZ - Briefcase -0087 - PchrbugZ - Tracer Bug -0088 - PchrdatathiefZ - Data Uplink -0089 - Pcryptdoor1bZ - BETA Door -008A - Pdd_ac_expZ - dataDyne Building Hole-in-tube frame -008B - Pdd_ac_unexpZ - dataDyne Building Hole-in-tube unexploded -008C - Pdd_acbot_expZ - dataDyne Building Hole-in-wall frame -008D - Pdd_acbot_unexpZ - dataDyne Building Hole-in-wall unexploded -008E - Pdd_bannerZ - dataDyne Building Rooftop banner -008F - Pdd_chairZ - dataDyne Building Desk chair -0090 - Pdd_decodoorZ - dataDyne Building Slide door -0091 - Pdd_deskZ - dataDyne Building Desk -0092 - Pdd_fanroofZ - dataDyne Building Roof fan -0093 - Pdd_fanwallZ - dataDyne Building Wall fan -0094 - Pdd_hovcabZ - Hovercab -0095 - Pdd_hovcarZ - Hovercar -0096 - Pdd_hovcopZ - Hovercop -0097 - Pdd_hovercopterZ - dataDyne Hovercopter -0098 - Pdd_hovmotoZ - Hovermoto -0099 - Pdd_hovtruckZ - Hovertruck -009A - Pdd_lab_cautionZ - Investigation Caution door with window -009B - Pdd_lab_cautiontopZ - Investigation Slide-up door caution (Top) -009C - Pdd_lab_door_bsZ - BETA Investigation Door -009D - Pdd_lab_door_secZ - Investigation Secret door -009E - Pdd_lab_door_windZ - Investigation Sector One Door -009F - Pdd_lab_hazardZ - Investigation Slide-up door hazardous (Top) -00A0 - Pdd_lab_restrictedZ - Investigation Slide-up door restricted (Top) -00A1 - Pdd_lab_sector2botZ - Investigation Slide-down door (Bottom) -00A2 - Pdd_lab_sector2topZ - Investigation Sector Two Slide-up door (Top) -00A3 - Pdd_lab_sector3Z - Investigation Sector Three Door -00A4 - Pdd_lab_sector3topZ - Investigation Sector Three Slide-up door (Top) -00A5 - Pdd_lab_sector3windZ - Investigation Sector Three Door with window -00A6 - Pdd_lab_sector4topZ - Investigation Sector Four Slide-up door (Top) -00A7 - Pdd_liftdoorZ - dataDyne Building Lift door -00A8 - Pdd_liftrZ - dataDyne Building Lift -00A9 - Pdd_officedoorZ - dataDyne Building Office door -00AA - Pdd_plantrubberZ - Pot plant (Rubber plant) -00AB - Pdd_plantspiderZ - Pot plant (Spider plant) -00AC - Pdd_plantspikeZ - Pot plant (Spike plant) -00AD - Pdd_redarmZ - dataDyne Building Armchair -00AE - Pdd_redsofaZ - dataDyne Building Sofa -00AF - Pdd_secretdoorZ - dataDyne Building Secret Door 1 -00B0 - Pdd_secretdoor2Z - dataDyne Building Secret door 2 -00B1 - Pdd_servicedoorZ - dataDyne Building Service door -00B2 - Pdd_stonedeskZ - dataDyne Building Cassandra's desk -00B3 - Pdd_vertblindZ - dataDyne Building Vertical blind -00B4 - Pdd_winddoorZ - dataDyne Building Grating door -00B5 - Pdd_windowZ - dataDyne Building Pane of glass -00B6 - PddjumpshipZ - CI Jumpship from Defection Intro -00B7 - Pdoor1a_G5Z - G5 Building Part of fire door -00B8 - Pdoor1atri_G5Z - G5 Building Part of fire door -00B9 - Pdoor1b_G5Z - G5 Building Part of fire door -00BA - Pdoor2_G5Z - G5 Building Slide open door with window -00BB - Pdoor2a_G5Z - G5 Building Slide open door without window -00BC - Pdoor4a_G5Z - G5 Building Slide door with dataDyne logo -00BD - Pdoor4b_G5Z - G5 Building Slide door with dataDyne logo -00BE - Pdoor_rollertrainZ - Metal panel -00BF - PdoorconsoleZ - BETA Computer Terminal from GoldenEye -00C0 - Pdr_caroll_doorZ - A part of Dr. Caroll’s hiding place -00C1 - Pdr_caroll_door_baseZ - A part of Dr. Caroll’s hiding place -00C2 - Pdr_caroll_door_bleftZ - A part of Dr. Caroll’s hiding place -00C3 - Pdr_caroll_door_bmainZ - A part of Dr. Caroll’s hiding place -00C4 - Pdr_caroll_door_brightZ - A part of Dr. Caroll’s hiding place -00C5 - Pdr_caroll_door_leftZ - A part of Dr. Caroll’s hiding place -00C6 - Pdr_caroll_door_mainZ - A part of Dr. Caroll’s hiding place -00C7 - Pdr_caroll_door_rightZ - A part of Dr. Caroll’s hiding place -00C8 - PdropshipZ - CI Jumpship from Villa, Defense -00C9 - PdumpsterZ - Chicago Dumpster -00CA - PexplosionbitZ - Explosion bit (Freezes game) -00CB - PflagZ - BETA Flag from GoldenEye -00CC - Pg5_escdoordownZ - G5 Building Lower hole-in-wall unexploded -00CD - Pg5_escdoordownboomZ - G5 Building Lower hole-in-wall frame -00CE - Pg5_escdoorupZ - G5 Building Upper hole-in-wall unexploded -00CF - Pg5_escdoorupboomZ - G5 Building Upper hole-in-wall frame -00D0 - Pg5_mainframeZ - G5 Building Mainframe -00D1 - Pg5safedoorZ - G5 Building Vault door -00D2 - Pg5carliftdoorZ - Chicago Unopened fire door -00D3 - PgoldeneyelogoZ - BETA GoldenEye Logo -00D4 - PhooverbotZ - Hoverbot (Orange) -00D5 - PhovbikeZ - Hoverbike -00D6 - PhoverbedZ - Area 51 Hoverbed with Elvis -00D7 - Phovercrate1Z - Hovercrate -00D8 - PlasdoorZ - Laser beam Door / Block -00D9 - PmarkerZ - BETA Muilticoloured crate -00DA - Pmedlabwin1Z - Area 51 Caution glass 1 -00DB - Pmedlabwin2Z - Area 51 Caution glass 2 -00DC - PmodemboxZ - Area51 Button / Control panel -00DD - PnintendologoZ - Nintendo Logo -00DE - Pnlogo2Z - Changing N logo 2 -00DF - Pnlogo3Z - Changing N logo 3 -00E0 - PnlogoZ - Changing N logo -00E1 - Ppc1Z - Blue Computer -00E2 - PpdfourZ - Perfect Dark Logo 4 -00E3 - PpdoneZ - Perfect Dark Logo 1 -00E4 - PpdthreeZ - Perfect Dark Logo 3 -00E5 - PpdtwoZ - Perfect Dark Logo 2 -00E6 - PperfectdarkZ - Perfect Dark Logo -00E7 - PpolicecarZ - Chicago Police hovercar -00E8 - PravineliftZ - Ravine Lift -00E9 - PropeZ - dataDyne Building Defection Intro Rope -00EA - Psk_cryopod1_botZ - Secret Skedar Army hatch door (Bottom) -00EB - Psk_cryopod1_topZ - Secret Skedar Army hatch door (Top) -00EC - Psk_door1Z - Skedar Ruins Door -00ED - Psk_fighter1Z - BETA Skedar Fighter ship -00EE - Psk_hangardoor_botZ - Attack Ship Hanger door (Bottom half) -00EF - Psk_hangardoor_topZ - Attack Ship Hanger door (Top half) -00F0 - Psk_ship_door1Z - Attack Ship yYellow slide door -00F1 - Psk_ship_holo1Z - Attack Ship Holographic star map -00F2 - Psk_ship_holo2Z - Attack Ship Holographic star map -00F3 - Psk_ship_hulldoor1Z - Attack Ship Hanger hull door part 1 -00F4 - Psk_ship_hulldoor2Z - Attack Ship Hanger hull door part 2 -00F5 - Psk_ship_hulldoor3Z - Attack Ship Hanger hull door part 3 -00F6 - Psk_ship_hulldoor4Z - Attack Ship Hanger hull door part 4 -00F7 - Psk_under_generatorZ - Skedar Ruins Spinning power generator pillar -00F8 - Psk_under_transZ - Skedar Ruins Rolling round pillar -00F9 - Pskcrev_exp1Z - Skedar Ruins Canyon wall after blowing up rock -00FA - Pskcrev_unexp1Z - Skedar Ruins Canyon rock -00FB - Psktnl_exp1Z - Skedar Ruins Hole-in-wall frame -00FC - Psktnl_unexp1Z - Skedar Ruins Hole-in-wall unexploded -00FD - PtaxicabZ - Chicago Hovertaxi -00FE - PtesterbotZ - Hoverbot (White/blue) -00FF - PtestobjZ - BETA Chicago Limo -0100 - PtvscreenZ - Tv screen -0101 - PwindowZ - Pane of glass -0102 - Ump_setupameZ -0103 - Ump_setuparchZ -0104 - Ump_setuparecZ - Ravine mp_setup -0105 - Ump_setuparkZ -0106 - Ump_setupashZ -0107 - Ump_setupaztZ -0108 - Ump_setupcatZ -0109 - Ump_setupcaveZ -010A - Ump_setupcradZ - Pipes mp_setup -010B - Ump_setupcrypZ - G5 Building (MP) mp_setup -010C - Ump_setupdamZ - BETA GoldenEye Dam solo setup something -010D - Ump_setupdepoZ -010E - Ump_setupdestZ -010F - Ump_setupdishZ -0110 - Ump_setupearZ -0111 - Ump_setupeldZ -0112 - Ump_setupimpZ -0113 - Ump_setupjunZ - Temple mp_setup -0114 - Ump_setupleeZ -0115 - Ump_setuplenZ -0116 - Ump_setuplipZ -0117 - Ump_setuplueZ -0118 - Ump_setupoatZ - Skedar mp_setup -0119 - Ump_setuppamZ -011A - Ump_setuppeteZ - BETA GoldenEye Streets solo setup something -011B - Ump_setuprefZ - Complex mp_setup -011C - Ump_setupritZ -011D - Ump_setuprunZ -011E - Ump_setupsevZ -011F - Ump_setupsevbZ - Retaking the Institute mp_setup -0120 - Ump_setupsevxZ -0121 - Ump_setupshoZ -0122 - Ump_setupsiloZ -0123 - Ump_setupstatZ -0124 - Ump_setuptraZ -0125 - Ump_setupwaxZ -0126 - UsetupameZ - Defection solo setup -0127 - UsetuparchZ -0128 - UsetuparecZ -0129 - UsetuparkZ - Extraction solo setup -012A - UsetupashZ -012B - UsetupaztZ - Crash Site solo setup -012C - UsetupcatZ -012D - UsetupcaveZ - Air Base solo setup -012E - UsetupcradZ -012F - UsetupcrypZ -0130 - UsetupdamZ - Pelagic II solo setup -0131 - UsetupdepoZ - G5 Building (Solo) solo setup -0132 - UsetupdestZ -0133 - UsetupdishZ - CI Training solo setup -0134 - UsetupearZ - Investigation solo setup -0135 - UsetupeldZ - Villa (Solo) solo setup -0136 - UsetupimpZ - Defense solo setup -0137 - UsetupjunZ -0138 - UsetupleeZ - Attack Ship solo setup -0139 - UsetuplenZ -013A - UsetuplipZ - Rescue solo setup -013B - UsetuplueZ - Infiltration solo setup -013C - UsetupoatZ - Skedar solo setup -013D - UsetuppamZ - Deep Sea solo setup -013E - UsetuppeteZ - Chicago solo setup -013F - UsetuprefZ -0140 - UsetupritZ - Air Force One solo setup -0141 - UsetuprunZ -0142 - UsetupsevZ - Maian SOS solo setup -0143 - UsetupsevbZ - Retaking the Institute solo setup -0144 - UsetupsevxZ -0145 - UsetupsevxbZ -0146 - UsetupshoZ - Skedar Ruins solo setup -0147 - UsetupsiloZ - Unknown solo setup -0148 - UsetupstatZ - WAR! solo setup -0149 - UsetuptraZ - Escape solo setup -014A - UsetupwaxZ - Mr. Blondes Revenge solo setup -014B - bgdata/bg_ame_padsZ - Defection pads -014C - bgdata/bg_ame_tilesZ - dataDyne Building tiles -014D - bgdata/bg_arch_padsZ -014E - bgdata/bg_arch_tilesZ -014F - bgdata/bg_arec_padsZ - Ravine pads -0150 - bgdata/bg_arec_tilesZ - Ravine tiles -0151 - bgdata/bg_ark_padsZ - Extraction pads -0152 - bgdata/bg_ark_tilesZ -0153 - bgdata/bg_ash_padsZ -0154 - bgdata/bg_ash_tilesZ -0155 - bgdata/bg_azt_padsZ - Crash Site pads -0156 - bgdata/bg_azt_tilesZ - Crash Site tiles -0157 - bgdata/bg_cat_padsZ -0158 - bgdata/bg_cat_tilesZ -0159 - bgdata/bg_cave_padsZ - Air Base pads -015A - bgdata/bg_cave_tilesZ - Air Base tiles -015B - bgdata/bg_crad_padsZ - Pipes pads -015C - bgdata/bg_crad_tilesZ - Pipes tiles -015D - bgdata/bg_cryp_padsZ - G5 Building (MP) pads -015E - bgdata/bg_cryp_tilesZ - G5 Building (MP) tiles -015F - bgdata/bg_dam_padsZ - Pelagic II pads -0160 - bgdata/bg_dam_tilesZ - Pelagic II tiles -0161 - bgdata/bg_depo_padsZ - G5 Building (Solo) pads -0162 - bgdata/bg_depo_tilesZ - G5 Building (Solo) tiles -0163 - bgdata/bg_dest_padsZ -0164 - bgdata/bg_dest_tilesZ -0165 - bgdata/bg_dish_padsZ - CI Training pads -0166 - bgdata/bg_dish_tilesZ - Carrington Institute tiles -0167 - bgdata/bg_ear_padsZ - Investigation pads -0168 - bgdata/bg_ear_tilesZ - Investigation tiles -0169 - bgdata/bg_eld_padsZ - Villa (Solo) pads -016A - bgdata/bg_eld_tilesZ - Villa (Solo) tiles -016B - bgdata/bg_imp_padsZ - Defense pads -016C - bgdata/bg_imp_tilesZ -016D - bgdata/bg_jun_padsZ - Temple pads -016E - bgdata/bg_jun_tilesZ - Temple tiles -016F - bgdata/bg_lee_padsZ - Attack Ship pads -0170 - bgdata/bg_lee_tilesZ - Attack Ship tiles -0171 - bgdata/bg_len_padsZ -0172 - bgdata/bg_len_tilesZ -0173 - bgdata/bg_lip_padsZ - Rescue pads -0174 - bgdata/bg_lip_tilesZ -0175 - bgdata/bg_lue_padsZ - Infiltration pads -0176 - bgdata/bg_lue_tilesZ - Area 51 tiles -0177 - bgdata/bg_oat_padsZ - Skedar pads -0178 - bgdata/bg_oat_tilesZ - Skedar tiles -0179 - bgdata/bg_pam_padsZ - Deep Sea pads -017A - bgdata/bg_pam_tilesZ - Deep Sea tiles -017B - bgdata/bg_pete_padsZ - Chicago pads -017C - bgdata/bg_pete_tilesZ - Chicago tiles -017D - bgdata/bg_ref_padsZ - Complex pads -017E - bgdata/bg_ref_tilesZ - Complex tiles -017F - bgdata/bg_rit_padsZ - Air Force One pads -0180 - bgdata/bg_rit_tilesZ - Air Force One tiles -0181 - bgdata/bg_run_padsZ -0182 - bgdata/bg_run_tilesZ -0183 - bgdata/bg_sev_padsZ - Maian SOS pads -0184 - bgdata/bg_sev_tilesZ -0185 - bgdata/bg_sevb_padsZ - Retaking the Institute pads -0186 - bgdata/bg_sevb_tilesZ -0187 - bgdata/bg_sevx_padsZ -0188 - bgdata/bg_sevx_tilesZ -0189 - bgdata/bg_sho_padsZ - Skedar Ruins pads -018A - bgdata/bg_sho_tilesZ - Skedar Ruins tiles -018B - bgdata/bg_silo_padsZ - Unknown pads -018C - bgdata/bg_silo_tilesZ - Unknown tiles -018D - bgdata/bg_stat_padsZ - WAR! pads -018E - bgdata/bg_stat_tilesZ -018F - bgdata/bg_tra_padsZ - Escape pads -0190 - bgdata/bg_tra_tilesZ -0191 - bgdata/bg_wax_padsZ - Mr. Blonde's Revenge pads -0192 - bgdata/bg_wax_tilesZ -0193 - GtestgunZ - Testgun (Looks like grenade) player -0194 - Cdd_labtechZ - dataDyne Lab Technician -0195 - Pcctv_pdZ - Security Camera -0196 - PcomhubZ - Communications hub -0197 - PquadpodZ - dataDyne Building Rocket Launcher stand -0198 - Ppd_consoleZ - Blue computer terminal -0199 - CconneryZ - White Tuxedo -019A - CmooreZ - Black Tuxedo -019B - CdaltonZ - Black Tuxedo with open jacket -019C - Cheaddark_combatZ - Joanna Head -019D - CheadelvisZ - Elvis Head -019E - CheadrossZ - Enemy Head (Ross) -019F - CheadcarringtonZ - Carrington’s Head -01A0 - CheadmrblondeZ - Mr. Blonde Head -01A1 - CheadtrentZ - Trent Easton Head -01A2 - CheadddshockZ - Shock Trooper Head -01A3 - CheadgrahamZ - Enemy Head (Graham) -01A4 - Cheaddark_frockZ - Joanna Frock Head -01A5 - CheadsecretaryZ - dataDyne Secretary Head -01A6 - CheadcassandraZ - Cassandra’s Head -01A7 - CheadthekingZ - Maian head with closes eyes -01A8 - Cheadfem_guardZ - Female Enemy Head -01A9 - CheadjonZ - Enemy Head (Jon) -01AA - Plift_platformZ - Investigation Lift -01AB - Pdd_grateZ - Red grate panel -01AC - PlightswitchZ - Light switch -01AD - PblastshieldZ - dataDyne Building Extraction Blue blast shield -01AE - Plightswitch2Z - dataDyne Building Light switch -01AF - Pdd_accessdoorupZ - Investigation Sector Four Door (Top half) -01B0 - Pdd_accessdoordnZ - Investigation Sector Four Door (Bottom half) -01B1 - Cdark_rippedZ - Joanna Frock (ripped) -01B2 - Cheadmark2Z - Enemy Head (Mark2) -01B3 - CheadchristZ - Enemy Head (Christ) -01B4 - Plab_containerZ - Area 51 Oil container -01B5 - Plab_chairZ - Investigation Metal chair -01B6 - Plab_tableZ - Investigation Table -01B7 - Plab_microscopeZ - BETA Investigation Microscope -01B8 - Plab_mainframeZ - BETA Investigation Mainframe -01B9 - Pdd_labdoorZ - Investigation Laboratory door -01BA - Pdd_lab_doortopZ - Investigation Slide-up door laboratory (Top) -01BB - Pmulti_ammo_crateZ - Ammo Crate -01BC - CheadrussZ - Enemy Head (Russ) -01BD - CheadgreyZ - BETA Head -01BE - CheaddarlingZ - Enemy Head (Darling) -01BF - Cdd_guardZ - dataDyne Guard -01C0 - CheadrobertZ - Enemy Head (Robert) -01C1 - Cdd_shockZ - Shock Trooper -01C2 - CheadbeauZ - Enemy Head (Beau) -01C3 - PchrchainZ - Cassandra De Vries Necklace -01C4 - Cdd_shock_infZ - dataDyne Guard from Investigation -01C5 - Cheadfem_guard2Z - Female Enemy Head -01C6 - ProofgunZ - Investigation Ceiling dronegun -01C7 - PtdoorZ - Temple Door -01C8 - CbiotechZ - Area 51 Bio Technician -01C9 - CfbiguyZ - FBI Agent -01CA - PgroundgunZ - Crash Site Dronegun -01CB - CciaguyZ - CIA Agent -01CC - Ca51trooperZ - Area 51 Trooper -01CD - CheadbrianZ - Enemy Head (Brian) -01CE - CheadjamieZ - Enemy Head (Jamie) -01CF - Cheadduncan2Z - Enemy Head (Duncan) -01D0 - CheadbiotechZ - Bio Technician Head -01D1 - UsetupuffZ -01D2 - Ump_setupuffZ -01D3 - bgdata/bg_uff_padsZ -01D4 - bgdata/bg_uff_tilesZ -01D5 - UsetupoldZ -01D6 - Ump_setupoldZ -01D7 - bgdata/bg_old_padsZ -01D8 - bgdata/bg_old_tilesZ -01D9 - UsetupateZ - Duel solo setup -01DA - Ump_setupateZ -01DB - bgdata/bg_ate_padsZ - Duel pads -01DC - bgdata/bg_ate_tilesZ -01DD - UsetuplamZ -01DE - Ump_setuplamZ -01DF - bgdata/bg_lam_padsZ -01E0 - bgdata/bg_lam_tilesZ -01E1 - Usetupmp1Z -01E2 - Ump_setupmp1Z - Base mp_setup -01E3 - bgdata/bg_mp1_padsZ - Base pads -01E4 - bgdata/bg_mp1_tilesZ - Base tiles -01E5 - Usetupmp2Z -01E6 - Ump_setupmp2Z -01E7 - bgdata/bg_mp2_padsZ -01E8 - bgdata/bg_mp2_tilesZ -01E9 - Usetupmp3Z -01EA - Ump_setupmp3Z - Area 52 mp_setup -01EB - bgdata/bg_mp3_padsZ - Area 52 pads -01EC - bgdata/bg_mp3_tilesZ - Area 52 tiles -01ED - Usetupmp4Z -01EE - Ump_setupmp4Z - Warehouse mp_setup -01EF - bgdata/bg_mp4_padsZ - Warehouse pads -01F0 - bgdata/bg_mp4_tilesZ - Warehouse tiles -01F1 - Usetupmp5Z -01F2 - Ump_setupmp5Z - Car Park mp_setup -01F3 - bgdata/bg_mp5_padsZ - Car Park pads -01F4 - bgdata/bg_mp5_tilesZ - Car Park tiles -01F5 - Usetupmp6Z -01F6 - Ump_setupmp6Z -01F7 - bgdata/bg_mp6_padsZ -01F8 - bgdata/bg_mp6_tilesZ -01F9 - Usetupmp7Z -01FA - Ump_setupmp7Z -01FB - bgdata/bg_mp7_padsZ -01FC - bgdata/bg_mp7_tilesZ -01FD - Usetupmp8Z -01FE - Ump_setupmp8Z -01FF - bgdata/bg_mp8_padsZ -0200 - bgdata/bg_mp8_tilesZ -0201 - Usetupmp9Z -0202 - Ump_setupmp9Z - Ruins mp_setup -0203 - bgdata/bg_mp9_padsZ - Ruins pads -0204 - bgdata/bg_mp9_tilesZ - Ruins tiles -0205 - Usetupmp10Z -0206 - Ump_setupmp10Z - Sewers mp_setup -0207 - bgdata/bg_mp10_padsZ - Sewers pads -0208 - bgdata/bg_mp10_tilesZ - Sewers tiles -0209 - Usetupmp11Z -020A - Ump_setupmp11Z - Felicity mp_setup -020B - bgdata/bg_mp11_padsZ - Felicity pads -020C - bgdata/bg_mp11_tilesZ - Felicity tiles -020D - Usetupmp12Z -020E - Ump_setupmp12Z - Fortress mp_setup -020F - bgdata/bg_mp12_padsZ - Fortress pads -0210 - bgdata/bg_mp12_tilesZ - Fortress tiles -0211 - Usetupmp13Z -0212 - Ump_setupmp13Z - Villa mp_setup -0213 - bgdata/bg_mp13_padsZ - Villa pads -0214 - bgdata/bg_mp13_tilesZ - Villa tiles -0215 - Usetupmp14Z -0216 - Ump_setupmp14Z -0217 - bgdata/bg_mp14_padsZ -0218 - bgdata/bg_mp14_tilesZ -0219 - Usetupmp15Z -021A - Ump_setupmp15Z - Grid mp_setup -021B - bgdata/bg_mp15_padsZ - Grid pads -021C - bgdata/bg_mp15_tilesZ - Grid tiles -021D - Usetupmp16Z -021E - Ump_setupmp16Z -021F - bgdata/bg_mp16_padsZ -0220 - bgdata/bg_mp16_tilesZ -0221 - Usetupmp17Z -0222 - Ump_setupmp17Z -0223 - bgdata/bg_mp17_padsZ -0224 - bgdata/bg_mp17_tilesZ -0225 - Usetupmp18Z -0226 - Ump_setupmp18Z -0227 - bgdata/bg_mp18_padsZ -0228 - bgdata/bg_mp18_tilesZ -0229 - Usetupmp19Z -022A - Ump_setupmp19Z -022B - bgdata/bg_mp19_padsZ -022C - bgdata/bg_mp19_tilesZ -022D - Usetupmp20Z -022E - Ump_setupmp20Z -022F - bgdata/bg_mp20_padsZ -0230 - bgdata/bg_mp20_tilesZ -0231 - Ca51airmanZ - Area 51 Pilot -0232 - Cheadneil2Z - Enemy Head (Neil) -0233 - Pci_sofaZ - Carrington Institute Sofa (with mirror image) -0234 - Pci_liftZ - Carrington Institute Lift -0235 - Pci_liftdoorZ - Carrington Institute Glass door -0236 - CchicrobZ - Sentry Robot -0237 - CstewardZ - Steward -0238 - CheadedmcgZ - Enemy Head (Edmcg) -0239 - CstewardessZ - Stewardess -023A - CheadankaZ - Enemy Head (Anka) -023B - CpresidentZ - US President -023C - Cstewardess_coatZ - Stewardess with scarf on -023D - Cheadleslie_sZ - Enemy Head (Leslie) -023E - PlasercutZ - Laser beam -023F - Psk_shuttleZ - Skedar Shuttle -0240 - CminiskedarZ - Mini Skedar -0241 - PnewvilladoorZ - Villa Door with wooden frame -0242 - Cnsa_lackeyZ - NSA Lackey -0243 - Cheadmatt_cZ - Enemy Head (Matt) -0244 - Cpres_securityZ - Presidential Bodyguard -0245 - Cheadpeer_sZ - Enemy Head (Peer) -0246 - CnegotiatorZ - Negotiator -0247 - Cheadeileen_tZ - Enemy Head (Eileen) -0248 - Psk_pillarleftZ - Skedar Ruins Royal Chamber Stone block -0249 - Psk_pillarrightZ - Skedar Ruins Royal Chamber Stone block -024A - Psk_plinth_tZ - Skedar statue relic piece -024B - Psk_plinth_mlZ - Skedar statue relic piece -024C - Psk_plinth_mrZ - Skedar statue relic piece -024D - Psk_plinth_blZ - Skedar statue relic piece -024E - Psk_plinth_brZ - Skedar statue relic piece -024F - Psk_fl_shad_tZ - Skedar Ruins Floor piece -0250 - Psk_fl_shad_mlZ - Skedar Ruins Floor piece -0251 - Psk_fl_shad_mrZ - Skedar Ruins Floor piece -0252 - Psk_fl_shad_blZ - Skedar Ruins Floor piece -0253 - Psk_fl_shad_brZ - Skedar Ruins Floor piece -0254 - Psk_fl_noshad_tZ - Skedar Ruins Floor piece -0255 - Psk_fl_noshad_mlZ - Skedar Ruins Floor piece -0256 - Psk_fl_noshad_mrZ - Skedar Ruins Floor piece -0257 - Psk_fl_noshad_blZ - Skedar Ruins Floor piece -0258 - Psk_fl_noshad_brZ - Skedar Ruins Floor piece -0259 - GhudpieceZ - Menu Image Projector -025A - Psk_templecolumn1Z - Skedar Ruins Pillar 1 -025B - Psk_templecolumn2Z - Skedar Ruins Pillar 2 -025C - Psk_templecolumn3Z - Skedar Ruins Pillar 3 -025D - Psk_sunshad1Z - Skedar Ruins Floor piece -025E - Psk_sunshad2Z - Skedar Ruins Wall piece -025F - Psk_sunnoshad1Z - Skedar Ruins Floor piece -0260 - Psk_sunnoshad2Z - Skedar Ruins Wall piece -0261 - Cg5_guardZ - G5 Building Guard -0262 - Cheadandy_rZ - Enemy Head (Andy) -0263 - Cpelagic_guardZ - Pelagic II Guard -0264 - Cg5_swat_guardZ - G5 Building Swat Guard -0265 - Calaskan_guardZ - Air Base White Guard -0266 - Cmaian_soldierZ - Maian -0267 - Cheadben_rZ - Enemy Head (Ben) -0268 - Cheadsteve_kZ - Enemy Head (Steve) -0269 - PbarrelZ - Area 51 Metal barrel -026A - Pglass_floorZ - Grid Pane of glass used as floor -026B - Pesca_stepZ - Air Base Escalator step -026C - Pmatrix_liftZ - Grid lift -026D - Prubble1Z - Skedar Ruins Rubble (Wall) -026E - Prubble2Z - Skedar Ruins Rubble (Pillar) -026F - Prubble3Z - Skedar Ruins Rubble (Block) -0270 - Prubble4Z - Skedar Ruins Rubble (Small pillar) -0271 - Arecep01M -0272 - Arecep02M -0273 - Arecep03M -0274 - Arecep04M -0275 - Arecep05M -0276 - Arecep06M -0277 - Arlguard1M -0278 - Arltech01M -0279 - Arltech02M -027A - Arltech03M -027B - Arltech04M -027C - Arltech05M -027D - Arltech06M -027E - Ascie2aM -027F - Ascie2bM -0280 - Ascie2cM -0281 - Ascie2dM -0282 - Ascie2eM -0283 - Ascie2fM -0284 - Ascie2gM -0285 - Ascie3aM -0286 - Ascie3bM -0287 - Ascie3cM -0288 - Ascie3dM -0289 - Ascie3eM -028A - Ascie3gM -028B - Ascien10aM -028C - Ascien2_aM -028D - Ascien3_aM -028E - Ascien4_aM -028F - Ascien5_aM -0290 - Ascien6_aM -0291 - Ascien7_aM -0292 - Ascien9_aM -0293 - AvilgrimM -0294 - Awepgd01M -0295 - Awepgd02M -0296 - Awepgd03M -0297 - Awepsc01M -0298 - Awepsc02M -0299 - Awepsc03M -029A - Aa51elv01M -029B - Aa51elv02M -029C - Aa51elv03M -029D - Aa51grd01M -029E - Aa51grd02M -029F - Aa51grd03M -02A0 - Aa51grd04M -02A1 - Aa51grd05M -02A2 - Aa51grd06M -02A3 - Aa51grd07M -02A4 - Aa51grd08M -02A5 - Aa51grd09M -02A6 - Aa51grd10M -02A7 - Aa51jo1M -02A8 - Aa51jo2M -02A9 - Aa51jo3M -02AA - Aa51jo4M -02AB - Aa51jo5M -02AC - Aa51jo6M -02AD - Aa51jon01M -02AE - Aa51jon02M -02AF - Aa51jon03M -02B0 - Aa51jon04M -02B1 - Aa51jon05M -02B2 - Aa51jon06M -02B3 - Aa51jon07M -02B4 - Aa51jon08M -02B5 - Aa51jon09M -02B6 - Aa51jon10M -02B7 - Aa51jon11M -02B8 - Aa51jon12M -02B9 - Aa51jon14M -02BA - Aa51jon15M -02BB - Aa51sci1M -02BC - Aaf1jo01M -02BD - Aaf1jo02M -02BE - Aaf1jo03M -02BF - Aaf1pr01M -02C0 - Aaf1pr02M -02C1 - Aaf1pr03M -02C2 - Aaf1pr04M -02C3 - Aaf1pr05M -02C4 - Aaf1pr06M -02C5 - Aaf1pr07M -02C6 - Aaf1pr08M -02C7 - Aaf1pr09M -02C8 - Aaf1pr10M -02C9 - Aaf1tr01M -02CA - Aaf1tr02M -02CB - Aaf1tr03M -02CC - Aairbgd01M -02CD - Aairbgd02M -02CE - Aairbgd03M -02CF - Aairbgd04M -02D0 - Aairbgd05M -02D1 - Aairbgd06M -02D2 - Aairbgd07M -02D3 - Aairbgd08M -02D4 - Aairbgd09M -02D5 - Aairbgd10M -02D6 - Aairbgd11M -02D7 - Aairbgd12M -02D8 - Aairbgd13M -02D9 - Aairbgd14M -02DA - Aairbgd15M -02DB - Aairbgd16M -02DC - Aairstw01M -02DD - Aairstw02M -02DE - Aairstw03M -02DF - Aassael01M -02E0 - Aassael02M -02E1 - Aassael03M -02E2 - Aassael04M -02E3 - Aassael05M -02E4 - Aassael06M -02E5 - Absewrk01M -02E6 - Absewrk02M -02E7 - Absewrk03M -02E8 - Absewrk04M -02E9 - Absewrk05M -02EA - Acetael01M -02EB - Achdroid1M -02EC - Achdroid2M -02ED - Acsec01M -02EE - Acsec02M -02EF - Acsec03M -02F0 - Acstan1M -02F1 - Acstan2M -02F2 - Adevr01M -02F3 - Adevr02M -02F4 - Adevr03M -02F5 - Adevr04M -02F6 - Adevr05M -02F7 - Adevr06M -02F8 - Adevr07M -02F9 - Adevr08M -02FA - Adevr09M -02FB - Adevr10M -02FC - Adevr11M -02FD - Adevr12M -02FE - Aexec01M -02FF - Aexec02M -0300 - Aexec04M -0301 - Aexec05M -0302 - Aexec06M -0303 - Aexec07M -0304 - Aexec08M -0305 - Aexec09M -0306 - Aexec10M -0307 - Aexec11M -0308 - Aexec12M -0309 - Aexec13M -030A - Aexec14M -030B - Ahelic01M -030C - Ahelic02M -030D - Ahelic03M -030E - Ahologd01M -030F - AholohopkM -0310 - Ainvcar01M -0311 - Ainvcar02M -0312 - Ainvcar03M -0313 - Ainvcar04M -0314 - Ainvcar05M -0315 - Ainvcar06M -0316 - Ainvcar07M -0317 - Ainvcar08M -0318 - Ainvcar09M -0319 - Ainvcar10M -031A - Ainvcar11M -031B - Ainvcar12M -031C - AinvfarrM -031D - AinvfemaM -031E - AinvfostM -031F - AinvgrimM -0320 - AinvhopkM -0321 - AinvmaleM -0322 - Ajoexec01M -0323 - Ajoexec02M -0324 - Ajosci01M -0325 - Ajosci02M -0326 - Ajosci03M -0327 - Alabacc1M -0328 - Alabacc2M -0329 - Alabacc3M -032A - Alabacc4M -032B - Alabacc5M -032C - Alabacc6M -032D - Alabtech1M -032E - Alabtech2M -032F - Alabtech3M -0330 - Alabtech5M -0331 - Alabtech6M -0332 - Alabtech7M -0333 - Alabtech8M -0334 - Alabtech9M -0335 - Aoffwrk01M -0336 - Aoffwrk02M -0337 - Aoffwrk03M -0338 - Aoffwrk04M -0339 - Cpresident_cloneZ - President Clone -033A - CheadjonathanZ - Enemy Head (Jonathan) -033B - Cheadmaian_sZ - Maian head with maian hat -033C - Cdark_af1Z - Joanna Stewardess Suit -033D - Pcable_carZ - Air Base Intro Cable Car -033E - Pelvis_saucerZ - Maian Saucer -033F - Pstewardess_trolleyZ - Air Base Stewardesses Bag -0340 - Pairbase_lift_enclosedZ - Air Base Small hanger lift -0341 - Pairbase_lift_angleZ - Air Base Diagonal lift -0342 - Pairbase_safedoorZ - Air Base Safe Door -0343 - Paf1_pilotchairZ - Air Force One Pilots seat -0344 - Paf1_passchairZ - Air Force One Passenger seat -0345 - CheadshaunZ - Enemy Head (Shaun) -0346 - PchrnightsightZ - NightVision Goggles -0347 - PchrshieldZ - Shield -0348 - Pchrfalcon2Z - Falcon 2 item -0349 - Pchrleegun1Z - Magsec 4 item -034A - PchrmaulerZ - Mauler item -034B - Pchrdy357Z - DY357 Magnum item -034C - Pchrdy357trentZ - DY357-LX item -034D - PchrmaianpistolZ - Phoenix item -034E - Pchrfalcon2silZ - Falcon 2 Silencer item -034F - Pchrfalcon2scopeZ - Falcon 2 Scope item -0350 - Pchrcmp150Z - CMP150 item -0351 - Pchrar34Z - AR34 item -0352 - PchrdragonZ - Dragon item -0353 - PchrsuperdragonZ - SuperDragon item -0354 - PchravengerZ - K7 Avenger item -0355 - PchrcycloneZ - Cyclone item -0356 - PchrmaiansmgZ - Callisto NTG item -0357 - Pchrrcp120Z - RC-P120 item -0358 - PchrpcgunZ - Laptop Gun item -0359 - PchrshotgunZ - Shotgun item -035A - PchrskminigunZ - Reaper item -035B - PchrdyrocketZ - Rocket Launcher item -035C - PchrdevastatorZ - Devastator item -035D - PchrskrocketZ - Slayer item -035E - Pchrz2020Z - Farsight XR-20 item -035F - PchrsniperrifleZ - Sniper Rifle item -0360 - PchrcrossbowZ - Crossbow item -0361 - PchrdruggunZ - Psychosis / Tranquilizer item -0362 - PchrknifeZ - Combat Knife item -0363 - PchrnbombZ - N-Bomb item -0364 - PchrflashbangZ - BETA Flashbang (Grenade from GoldenEye) -0365 - PchrgrenadeZ - Grenade item -0366 - PchrtimedmineZ - Timed Mine -0367 - PchrproximitymineZ - Proximity Mine -0368 - PchrremotemineZ - Remote Mine -0369 - PchrecmmineZ - ECM Mine item -036A - PchrwppkZ - PP9i (PP7) item -036B - Pchrtt33Z - CC13 (DD44) Dostovei. item -036C - PchrskorpionZ - KLO1313 (Klobb) item -036D - PchrkalashZ - KF7 Special (KF7 Soviet) item -036E - PchruziZ - ZZT (9mm) (ZMG (9mm)) item -036F - Pchrmp5kZ - DMC (D5K) Deutsche item -0370 - Pchrm16Z - AR53 (AR33) Assualt Rifle item -0371 - Pchrfnp90Z - RC-P45 (RC-P90) item -0372 - PchrdyrocketmisZ - Rocket Launcher Rocket -0373 - PchrskrocketmisZ - Slayer Rocket -0374 - PchrcrossboltZ - Bolt -0375 - PchrdevgrenadeZ - Devastator Grenade -0376 - PchrdraggrenadeZ - Dragon Grenade -0377 - Gfalcon2Z - Falcon 2 Silencer Scope player -0378 - Gleegun1Z - Magsec 4 player -0379 - GskpistolZ - Mauler player -037A - Gdy357Z - DY357 Magnum player -037B - Gdy357trentZ - DY357-LX player -037C - GmaianpistolZ - Phoenix player -037D - Gcmp150Z - CMP150 player -037E - Gar34Z - AR34 player -037F - GdydragonZ - Dragon player -0380 - GdysuperdragonZ - SuperDragon player -0381 - Gk7avengerZ - K7 Avenger player -0382 - GcycloneZ - Cyclone player -0383 - GmaiansmgZ - Callisto NTG player -0384 - Grcp120Z - RC-P120 player -0385 - GpcgunZ - Laptop Gun player -0386 - GshotgunZ - Shotgun player -0387 - GskminigunZ - Reaper player -0388 - GdyrocketZ - Rocket Launcher player -0389 - GdydevastatorZ - Devastator player -038A - GskrocketZ - Slayer player -038B - Gz2020Z - Farsight XR-20 player -038C - GsniperrifleZ - Sniper Rifle player -038D - GcrossbowZ - Crossbow player -038E - GdruggunZ - Psychosis / Tranquilizer player -038F - GknifeZ - Combat Knife player -0390 - GgrenadeZ - Grenade player -0391 - GtimedmineZ - Timed Mine player -0392 - GproximitymineZ - Proximity Mine player -0393 - GremotemineZ - Remote Mine and Detonator player -0394 - GwppkZ - PP9i (PP7) player -0395 - Gtt33Z - CC13 (DD44) Dostovei. player -0396 - GskorpionZ - KLO1313 (Klobb) player -0397 - Gak47Z - KF7 Special (KF7 Soviet) player -0398 - GuziZ - ZZT (9mm) (ZMG (9mm)) player -0399 - Gmp5kZ - DMC (D5K) Deutsche player -039A - Gm16Z - AR53 (AR33) Assualt Rifle player -039B - Gfnp90Z - RC-P45 (RC-P90) player -039C - Gfalcon2lodZ - Falcon 2 Silencer Scope reloader -039D - GskminigunlodZ - Reaper reloader -039E - Pa51_turretZ - Area 51 Infiltration Brown dronegun -039F - PpelagicdoorZ - Pelagic II Door with window -03A0 - Am1_l1_aM -03A1 - Am1_l1_bM -03A2 - Am1_l1_cM -03A3 - Am1_l1_dM -03A4 - Am1_l2_aM -03A5 - Am1_l2_bM -03A6 - Am1_l2_cM -03A7 - Am1_l2_dM -03A8 - Am1_l3_aM -03A9 - Am1_l3_bM -03AA - Am1_l3_cM -03AB - Am1_l3_dM -03AC - Am2_l1_aM -03AD - Am2_l1_bM -03AE - Am2_l1_cM -03AF - Am2_l1_dM -03B0 - Am3_l1_aM -03B1 - Am3_l1_bM -03B2 - Am3_l1_cM -03B3 - Am3_l1_dM -03B4 - Am3_l2_aM -03B5 - Am3_l2_bM -03B6 - Am3_l2_cM -03B7 - Am3_l2_dM -03B8 - Am4_l1_aM -03B9 - Am4_l1_bM -03BA - Am4_l1_cM -03BB - Am4_l1_dM -03BC - Am4_l2_aM -03BD - Am4_l2_bM -03BE - Am4_l2_cM -03BF - Am4_l2_dM -03C0 - Am4_l3_aM -03C1 - Am4_l3_bM -03C2 - Am4_l3_cM -03C3 - Am4_l3_dM -03C4 - Am5_l1_aM -03C5 - Am5_l1_bM -03C6 - Am5_l1_cM -03C7 - Am5_l1_dM -03C8 - Am5_l2_aM -03C9 - Am5_l2_bM -03CA - Am5_l2_cM -03CB - Am5_l2_dM -03CC - Am5_l3_aM -03CD - Am5_l3_bM -03CE - Am5_l3_cM -03CF - Am5_l3_dM -03D0 - Am6_l1_aM -03D1 - Am6_l1_bM -03D2 - Am6_l1_cM -03D3 - Am6_l1_dM -03D4 - Am6_l2_aM -03D5 - Am6_l2_bM -03D6 - Am6_l2_cM -03D7 - Am6_l2_dM -03D8 - Am7_l1_aM -03D9 - Am7_l1_bM -03DA - Am7_l1_cM -03DB - Am7_l1_dM -03DC - Am8_l1_aM -03DD - Am8_l1_bM -03DE - Am8_l1_cM -03DF - Am8_l1_dM -03E0 - Am9_l1_aM -03E1 - Am9_l1_bM -03E2 - Am9_l1_cM -03E3 - Am9_l1_dM -03E4 - Ap1_01_joM -03E5 - Ap1_02_caM -03E6 - Ap1_03_joM -03E7 - Ap1_04_caM -03E8 - Ap1_05_joM -03E9 - Ap1_06_caM -03EA - Ap1_07_joM -03EB - Ap1_08_caM -03EC - Ap2_01_joM -03ED - Ap2_02_joM -03EE - Ap2_03_drM -03EF - Ap2_04_joM -03F0 - Ap2_05_joM -03F1 - Ap2_06_drM -03F2 - Ap2_07_drM -03F3 - Ap3_01_gdM -03F4 - Ap3_02_joM -03F5 - Ap3_03_joM -03F6 - Ap4_01_dvM -03F7 - Ap4_02_joM -03F8 - Ap4_03_dvM -03F9 - Ap4_04_joM -03FA - Ap4_05_dvM -03FB - Ap4_06_joM -03FC - Ap4_07_blM -03FD - Ap4_08_dvM -03FE - Ap4_09_dvM -03FF - Ap5_01_joM -0400 - Ap5_02_joM -0401 - Ap5_03_joM -0402 - Ap6_01_joM -0403 - Ap6_02_caM -0404 - Ap6_03_joM -0405 - Ap6_04_caM -0406 - Ap6_05_joM -0407 - Ap6_06_caM -0408 - Ap7_01_caM -0409 - Ap7_02_joM -040A - Ap7_03_caM -040B - Ap7_04_joM -040C - Ap8_01_dvM -040D - Ap8_02_blM -040E - Ap8_03_dvM -040F - Ap8_04_blM -0410 - Ap8_06_blM -0411 - Ap8_07_trM -0412 - Ap8_08_dvM -0413 - Ap8_09_trM -0414 - Ap8_10_blM -0415 - Ap9_01_joM -0416 - Ap9_02_caM -0417 - Ap9_03_joM -0418 - Ap10_01_caM -0419 - Ap10_02_caM -041A - Ap10_03_caM -041B - Ap10_04_caM -041C - Ap10_05_joM -041D - Ap10_06_caM -041E - Ap10_07_joM -041F - Ap10_08_caM -0420 - Ap10_09_joM -0421 - Ap11_01_jnM -0422 - Ap11_02_joM -0423 - Ap11_03_jnM -0424 - Ap11_04_joM -0425 - Ap11_05_jnM -0426 - Ap11_06_joM -0427 - Ap11_07_jnM -0428 - Ap11_08_joM -0429 - Ap12_01_jnM -042A - Ap12_02_joM -042B - Ap12_03_jnM -042C - Ap12_04_joM -042D - Ap12_05_jnM -042E - Ap12_06_joM -042F - Ap12_07_jnM -0430 - Ap12_08_joM -0431 - Ap12_09_jnM -0432 - Ap12_10_joM -0433 - Ap13_01_joM -0434 - Ap13_02_suM -0435 - Ap13_03_joM -0436 - Ap13_04_suM -0437 - Ap13_06_suM -0438 - Ap14_03_suM -0439 - Ap14_04_joM -043A - Ap14_05_suM -043B - Ap14_07_joM -043C - Ap15_01_elM -043D - Ap15_02_elM -043E - Ap15_03_joM -043F - Ap15_04_jnM -0440 - Ap15_05_elM -0441 - Ap15_06_joM -0442 - Ap15_07_elM -0443 - Ap15_08_joM -0444 - Ap15_09_elM -0445 - Ap15_10_joM -0446 - Ap15_11_elM -0447 - Ap16_01_joM -0448 - Ap16_02_caM -0449 - Ap16_04_caM -044A - Ap16_05_joM -044B - Ap16_06_caM -044C - Ap17_01_trM -044D - Ap17_02_prM -044E - Ap17_03_trM -044F - Ap17_04_prM -0450 - Ap17_05_trM -0451 - Ap17_06_trM -0452 - Ap18_01_joM -0453 - Ap18_02_elM -0454 - Ap18_03_elM -0455 - Ap18_04_joM -0456 - Ap18_05_elM -0457 - Ap19_01_caM -0458 - Ap19_02_caM -0459 - Ap19_03_joM -045A - Ap19_04_caM -045B - Ap19_05_joM -045C - Ap19_06_joM -045D - Ap20_01_joM -045E - Ap20_02_prM -045F - Ap20_03_joM -0460 - Ap20_04_prM -0461 - Ap20_05_joM -0462 - Ap20_06_blM -0463 - Ap20_07_trM -0464 - Ap20_08_trM -0465 - Ap21_01_elM -0466 - Ap21_02_joM -0467 - Ap21_03_elM -0468 - Ap21_04_joM -0469 - Ap22_01_elM -046A - Ap22_02_joM -046B - Ap22_03_elM -046C - Ap22_04_joM -046D - Ap23_01_joM -046E - Ap23_02_drM -046F - Ap23_03_joM -0470 - Ap23_04_drM -0471 - Ap23_05_joM -0472 - Ap23_06_drM -0473 - Ap23_07_joM -0474 - Ap23_08_drM -0475 - Ap24_01_caM -0476 - Ap24_02_joM -0477 - Ap24_03_caM -0478 - Ap24_04_joM -0479 - Ap24_05_caM -047A - Ap24_06_caM -047B - Ap24_07_joM -047C - Ap24_08_joM -047D - Ap25_01_joM -047E - Ap25_02_joM -047F - Ap26_01_joM -0480 - Ap26_02_dvM -0481 - Ap26_03_joM -0482 - Ap26_04_dvM -0483 - Ap26_05_dvM -0484 - Ap26_06_joM -0485 - Ap26_07_dvM -0486 - Ap26_08_dvM -0487 - Ap27_01_joM -0488 - Ap27_02_elM -0489 - Ap27_03_elM -048A - Ap27_04_joM -048B - Ap27_05_joM -048C - Ap27_06_elM -048D - Ap28_01_elM -048E - Ap28_02_joM -048F - Ap28_03_elM -0490 - Ap28_04_joM -0491 - Ap28_05_elM -0492 - Ap28_06_joM -0493 - Ap29_01_elM -0494 - Ap29_02_joM -0495 - Ap29_03_elM -0496 - Ap29_04_joM -0497 - Ap29_05_joM -0498 - Ap29_06_elM -0499 - Ap29_07_joM -049A - Ap29_08_elM -049B - Ap29_09_joM -049C - Ap29_10_elM -049D - PautosurgeonZ - Area 51 Alien Medpak -049E - CdarkwetZ - Joanna Dive Suit -049F - CdarkaqualungZ - Joanna Dive Suit 2 -04A0 - CdarksnowZ - Joanna Arctic Suit -04A1 - CdarklabZ - Area 51 Lab Technician (Man) -04A2 - CfemlabtechZ - Area 51 Lab Technician (Woman) -04A3 - CddsniperZ - dataDyne Sniper -04A4 - Cpilotaf1Z - Air Force One Pilot -04A5 - CcilabtechZ - Carrington Institute Lab Technician (Man) -04A6 - CcifemtechZ - Carrington Institute Lab Technician (Woman) -04A7 - Cheadeileen_hZ - Enemy Head (Eileen) -04A8 - Cheadscott_hZ - Enemy Head (Scott) -04A9 - CcarreveningsuitZ - Daniel Carrington White Tuxedo -04AA - CjonathonZ - Jonathon -04AB - CcisoldierZ - Carrington Institute Agent -04AC - CheadsanchezZ - Enemy Head (Sanchez) -04AD - CheaddarkaquaZ - Joanna Scuba Head -04AE - CheadddsniperZ - Sniper Head -04AF - PlimoZ - Chicago Limo -04B0 - PpdmenuZ - Part of Perfect Dark logo -04B1 - Pa51interceptorZ - Area 51 Interceptor -04B2 - Pa51dishZ - Area 51 Parabola Dish -04B3 - Pa51radarconsoleZ - BETA Area51 Radar Console -04B4 - Pa51lockerdoorZ - Area51 Locker door -04B5 - Pg5generatorZ - BETA G5 Generator -04B6 - Pg5dumpsterZ - BETA G5 Dumpster -04B7 - Gar34lodZ - AR34 reloader -04B8 - GavengerlodZ - K7 Avenger reloader -04B9 - Gcmp150lodZ - CMP150 reloader -04BA - GcrossbowlodZ - Crossbow reloader -04BB - GcyclonelodZ - Cyclone reloader -04BC - GdruggunlodZ - Phychosis / Tranquilizer reloader -04BD - Gdy357lodZ - DY357 Magnum reloader -04BE - Gdy357trentlodZ - DY357-LX reloader -04BF - GdevastatorlodZ - Devastator reloader -04C0 - GdydragonlodZ - Dragon reloader -04C1 - GdysuperdragonlodZ - SuperDragon reloader -04C2 - GknifelodZ - Combat Knife reloader -04C3 - GlaserlodZ - Laser reloader -04C4 - GmagseclodZ - Magsec 4 reloader -04C5 - GmayanpistollodZ - Phoenix reloader -04C6 - GmayansmglodZ - Callisto NTG reloader -04C7 - GpcgunlodZ - Laptop Gun reloader -04C8 - Grcp120lodZ - RC-P120 reloader -04C9 - GrocketlodZ - Rocket Launcher reloader -04CA - GshotgunlodZ - Shotgun reloader -04CB - GskpistollodZ - Mauler reloader -04CC - GskrocketlodZ - Slayer reloader -04CD - GsniperlodZ - Sniper Rifle reloader -04CE - Gz2020lodZ - Farsight XR-20 reloader -04CF - PchrcloakerZ - Cloaking Device -04D0 - PchrspeedpillZ - Combat Boost Pills -04D1 - PbaggagecarrierZ - Air Base Baggage carrier -04D2 - PminesignZ - BETA Area 51 Mine sign -04D3 - PchamberZ - Area 51 Maian Containment Coffins -04D4 - PisotopeexperimentZ - Investigation Radioactive isotope -04D5 - PisotopeZ - Investigation Part of the radioactive isotope -04D6 - PreactordoorZ - BETA Big round flat thing -04D7 - PsaucerinsideZ - Crash Site Interior of Maian UFO -04D8 - PvillastoolZ - Villa Stool that Carrington sits on -04D9 - Pcetanwindow1Z - Deep Sea Glass 1 -04DA - Pcetanwindow2Z - Deep Sea Glass 2 (Add-on) -04DB - Pcetanwindow3Z - Deep Sea Glass 3 (Add-on opposite) -04DC - Apelelv01M - "You go on ahead Jo, I'll secure the -04DD - Apelgrd01M perimeter. We'll meet up later." -04DE - Ap29_11_joM -04DF - GlaserZ - Laser -04E0 - PbigpelagicdoorZ - Pelagic II Moon pool hanger door -04E1 - Psk_jonrubble3Z - Piece of pillar from Skedar Ruins -04E2 - Psk_jonrubble4Z - Piece of Pillar from Skedar Ruins -04E3 - Psk_jonrubble5Z - Piece of pillar from Skedar Ruins -04E4 - Psk_jonrubble6Z - Piece of pillar from Skedar Ruins -04E5 - GcombathandslodZ - Combat hands -04E6 - PbinocularsZ - Horizon Scanner -04E7 - PsubmarineZ - Pelagic II Outro Submarine -04E8 - Pairforce1Z - Air Force One (The actual plane) -04E9 - PenginepartZ - Attack Ship Engine part -04EA - Am3l2carrM -04EB - Aelvcet01M -04EC - Aelvcet02M -04ED - Ajorep01M -04EE - Ajorep02M -04EF - Ajorep03M -04F0 - Ajorep04M -04F1 - PcetroofgunZ - Deep Sea Green dronegun -04F2 - PcetansmalldoorZ - BETA Deep Sea Small door -04F3 - PpowernodeZ - Deep Sea Switch node -04F4 - PcetanbluegreenlZ - BETA Deep Sea Door (Left) -04F5 - PcetanbluegreenrZ - BETA Deep Sea Door (Right) -04F6 - PskedarconsoleZ - Attack Ship Computer from bridge -04F7 - PskedarconsolepanelZ - Attack Ship Computer panel from bridge -04F8 - Ajorpld01M -04F9 - Ajorpld02M -04FA - Ajorpld03M -04FB - Ajorpld04M -04FC - GnbombZ - N-Bomb -04FD - GnbomblodZ - N-Bomb reloader -04FE - GgrenadelodZ - Grenade reloader -04FF - PweaponcdoorZ - Blue panel -0500 - PtargetZ - CI Target from Firing Range -0501 - PdevicesecretdoorZ - CI Secret door (Device Lab) -0502 - PcarringtonsecretdoorZ - CI Secret door (Carrington's Office) -0503 - PsinisterpcZ - dataDyne PC -0504 - PsinisterstationZ - dataDyne PC on stand -0505 - PkeypadlockZ - BETA Keypad Lock -0506 - PthumbprintscannerZ - BETA Fingerprint Skanner -0507 - PretinalockZ - BETA Retina Lock -0508 - PcardlockZ - BETA Card Lock -0509 - PgoodstationZ - Air Force One Button on stand -050A - PgoodpcZ - PC from Villa or Carrington Institute -050B - CskedarkingZ - Skedar King -050C - CelviswaistcoatZ - Elvis with America vest -050D - CheadgriffeyZ - Enemy Head (Griffey) -050E - CheadmotoZ - Enemy Head (Shigeru Miyamoto) -050F - CheadkeithZ - Enemy Head (Keith) -0510 - CheadwinnerZ - Enemy Head (Winner) -0511 - Ca51faceplateZ - Area 51 Guard Mask -0512 - PchrautogunZ - Laptop Sentry dronegun -0513 - Pg5bigchairZ - G5 Building Special Big chair -0514 - Pg5smallchairZ - G5 Building Special Small chair -0515 - PkingsceptreZ - Skedar Kings holy sceptre -0516 - PlabcoatZ - Area 51 Lab Cloths -0517 - Atrjo01M -0518 - Atrgrim01M -0519 - Atrgrim02M -051A - Atrcarr06M -051B - Atrcarr07M -051C - Atrcarr08M -051D - Atrcarr01M -051E - Atrcarr02M -051F - Atrcarr03M -0520 - Atrcarr04M -0521 - Atrcarr05M -0522 - Atrcarr12M -0523 - Abnblde01M -0524 - Abncass01M -0525 - Pcidoor1Z - BETA Carrington Institute Door -0526 - Pg5_chairZ - G5 Building Special Chair -0527 - Pg5_chair2Z - G5 Building Special Small chair -0528 - Pdd_window_foyerZ - dataDyne Building Foyer glass -0529 - Ghand_jowetsuitZ - Joanna Wet Suit arms -052A - Ghand_trentZ - Trent Easton arms -052B - Ghand_jofrockZ - Bare arms -052C - Ghand_jotrenchZ - Joanna Trench Suit arms -052D - Ghand_ddsniperZ - dataDyne Sniper arms -052E - Ghand_presidentZ - President arms -052F - Ghand_joaf1Z - Red arms -0530 - Ghand_jopilotZ - Stewardess arms -0531 - Ghand_carringtonZ - Carrington arms -0532 - Ghand_mrblondeZ - Mr. Blonde arms -0533 - Ghand_ciaZ - CIA arms -0534 - Ghand_cifemtechZ - Carrington Institute Lab Technician arms -0535 - Ghand_fbiarmZ - FBI arms -0536 - Ghand_josnowZ - Joanna Arctic Suit arms -0537 - Ghand_vriesZ - Cassandra arms -0538 - Ghand_ddsecurityZ - dataDyne Security arms -0539 - Ghand_tragic_pelagicZ - Pelagic II Guard arms -053A - Ghand_stewardess_coatZ - Stewardess Coat arms -053B - Ghand_ddlabtechZ - dataDyne Lab Technician arms -053C - Pci_cabinetZ - BETA CI Cabinet -053D - Pci_deskZ - BETA CI Desk -053E - Pci_carr_deskZ - BETA CI Desk 2 -053F - Pci_f_chairZ - BETA CI Leather Armchair -0540 - Pci_loungerZ - BETA CI Leather Bed -0541 - Pci_f_sofaZ - BETA CI Leather Sofa -0542 - Pci_tableZ - BETA CI Table -0543 - Pcv_coffee_tableZ - Villa Wooden table -0544 - Pcv_chair1Z - Villa Chair -0545 - Pcv_chair2Z - Villa Armchair -0546 - Pcv_sofaZ - Villa Sofa -0547 - Pcv_chair4Z - Villa Chair -0548 - Pcv_lampZ - BETA Villa Cabinet with lamp -0549 - Pcv_cabinetZ - Villa Side Cabinet -054A - Pcv_f_bedZ - Villa Carrington’s Bed -054B - Ppel_chair1Z - BETA Pelagic II Chair -054C - Psk_console2Z - Attack Ship Skedar Console -054D - Pdd_ear_tableZ - BETA Investigation Table -054E - Pdd_ear_chairZ - BETA Investigation Chair -054F - Pairbase_table2Z - Air Base Table -0550 - Pairbase_chair2Z - BETA Air Base Chair -0551 - Pmisc_crateZ - BETA White Box -0552 - Pmisc_irspecsZ - IR Scanner -0553 - Cheadelvis_gogsZ - Elvis head with scuba mask -0554 - CheadstevemZ - Enemy Head (Stevem) -0555 - Pa51_roofgunZ - Area 51 Dronegun -0556 - Psk_drone_gunZ - BETA Skedar Dronegun -0557 - Pci_roofgunZ - Carrington Institute dronegun -0558 - Pcv_tableZ - Villa Wooden table -0559 - Cdark_leatherZ - Joanna Leather -055A - Cheaddark_snowZ - Joanna with Arctic Hat Head -055B - CheadpresidentZ - President head -055C - Pcidoor1_refZ - Carrington Institute door -055D - Palaskadoor_outZ - BETA Air Base Door -055E - Palaskadoor_inZ - BETA Air Base Door 2 -055F - PwirefenceZ - Chicago Wire fence -0560 - PrarelogoZ - Rareware Logo -0561 - Chead_vdZ - Velvet Dark Head -0562 - Apelelv02M -0563 - PkeycardZ - Keycard -0564 - PbodyarmourZ - BETA Body armour -0565 - Pa51gate_rZ - Area 51 Infiltration Big door(Right) -0566 - Pa51gate_lZ - Area 51 Infiltration Big door (Left) -0567 - Paf1_lampZ - Air Force One Lamp -0568 - Paf1_toiletZ - Air Force One Toilet -0569 - Paf1_doorbig2Z - Air Force One Big door -056A - Paf1_phoneZ - Air Force One Phone -056B - Paf1_cargodoorZ - BETA Air Force One Cargo door -056C - Pg5_alarmZ - G5 Building Alarm -056D - Pg5_laser_switchZ - G5 Building Laser switch -056E - Psk_templecolumn4Z - Skedar Ruins Pillar 4 -056F - PcorehatchZ - Core Hatch from Pelagic II power generator -0570 - LameE -0571 - LameJ -0572 - LameP -0573 - Lame_str_gZ -0574 - Lame_str_fZ -0575 - Lame_str_sZ -0576 - Lame_str_iZ -0577 - LarchE -0578 - LarchJ -0579 - LarchP -057A - Larch_str_gZ -057B - Larch_str_fZ -057C - Larch_str_sZ -057D - Larch_str_iZ -057E - LarecE -057F - LarecJ -0580 - LarecP -0581 - Larec_str_gZ -0582 - Larec_str_fZ -0583 - Larec_str_sZ -0584 - Larec_str_iZ -0585 - LarkE -0586 - LarkJ -0587 - LarkP -0588 - Lark_str_gZ -0589 - Lark_str_fZ -058A - Lark_str_sZ -058B - Lark_str_iZ -058C - LashE -058D - LashJ -058E - LashP -058F - Lash_str_gZ -0590 - Lash_str_fZ -0591 - Lash_str_sZ -0592 - Lash_str_iZ -0593 - LateE -0594 - LateJ -0595 - LateP -0596 - Late_str_gZ -0597 - Late_str_fZ -0598 - Late_str_sZ -0599 - Late_str_iZ -059A - LaztE -059B - LaztJ -059C - LaztP -059D - Lazt_str_gZ -059E - Lazt_str_fZ -059F - Lazt_str_sZ -05A0 - Lazt_str_iZ -05A1 - LcatE -05A2 - LcatJ -05A3 - LcatP -05A4 - Lcat_str_gZ -05A5 - Lcat_str_fZ -05A6 - Lcat_str_sZ -05A7 - Lcat_str_iZ -05A8 - LcaveE -05A9 - LcaveJ -05AA - LcaveP -05AB - Lcave_str_gZ -05AC - Lcave_str_fZ -05AD - Lcave_str_sZ -05AE - Lcave_str_iZ -05AF - LcradE -05B0 - LcradJ -05B1 - LcradP -05B2 - Lcrad_str_gZ -05B3 - Lcrad_str_fZ -05B4 - Lcrad_str_sZ -05B5 - Lcrad_str_iZ -05B6 - LcrypE -05B7 - LcrypJ -05B8 - LcrypP -05B9 - Lcryp_str_gZ -05BA - Lcryp_str_fZ -05BB - Lcryp_str_sZ -05BC - Lcryp_str_iZ -05BD - LdamE -05BE - LdamJ -05BF - LdamP -05C0 - Ldam_str_gZ -05C1 - Ldam_str_fZ -05C2 - Ldam_str_sZ -05C3 - Ldam_str_iZ -05C4 - LdepoE -05C5 - LdepoJ -05C6 - LdepoP -05C7 - Ldepo_str_gZ -05C8 - Ldepo_str_fZ -05C9 - Ldepo_str_sZ -05CA - Ldepo_str_iZ -05CB - LdestE -05CC - LdestJ -05CD - LdestP -05CE - Ldest_str_gZ -05CF - Ldest_str_fZ -05D0 - Ldest_str_sZ -05D1 - Ldest_str_iZ -05D2 - LdishE -05D3 - LdishJ -05D4 - LdishP -05D5 - Ldish_str_gZ -05D6 - Ldish_str_fZ -05D7 - Ldish_str_sZ -05D8 - Ldish_str_iZ -05D9 - LearE -05DA - LearJ -05DB - LearP -05DC - Lear_str_gZ -05DD - Lear_str_fZ -05DE - Lear_str_sZ -05DF - Lear_str_iZ -05E0 - LeldE -05E1 - LeldJ -05E2 - LeldP -05E3 - Leld_str_gZ -05E4 - Leld_str_fZ -05E5 - Leld_str_sZ -05E6 - Leld_str_iZ -05E7 - LgunE -05E8 - LgunJ -05E9 - LgunP -05EA - Lgun_str_gZ -05EB - Lgun_str_fZ -05EC - Lgun_str_sZ -05ED - Lgun_str_iZ -05EE - LimpE -05EF - LimpJ -05F0 - LimpP -05F1 - Limp_str_gZ -05F2 - Limp_str_fZ -05F3 - Limp_str_sZ -05F4 - Limp_str_iZ -05F5 - LjunE -05F6 - LjunJ -05F7 - LjunP -05F8 - Ljun_str_gZ -05F9 - Ljun_str_fZ -05FA - Ljun_str_sZ -05FB - Ljun_str_iZ -05FC - LlamE -05FD - LlamJ -05FE - LlamP -05FF - Llam_str_gZ -0600 - Llam_str_fZ -0601 - Llam_str_sZ -0602 - Llam_str_iZ -0603 - LleeE -0604 - LleeJ -0605 - LleeP -0606 - Llee_str_gZ -0607 - Llee_str_fZ -0608 - Llee_str_sZ -0609 - Llee_str_iZ -060A - LlenE -060B - LlenJ -060C - LlenP -060D - Llen_str_gZ -060E - Llen_str_fZ -060F - Llen_str_sZ -0610 - Llen_str_iZ -0611 - LlipE -0612 - LlipJ -0613 - LlipP -0614 - Llip_str_gZ -0615 - Llip_str_fZ -0616 - Llip_str_sZ -0617 - Llip_str_iZ -0618 - LlueE -0619 - LlueJ -061A - LlueP -061B - Llue_str_gZ -061C - Llue_str_fZ -061D - Llue_str_sZ -061E - Llue_str_iZ -061F - LmiscE -0620 - LmiscJ -0621 - LmiscP -0622 - Lmisc_str_gZ -0623 - Lmisc_str_fZ -0624 - Lmisc_str_sZ -0625 - Lmisc_str_iZ -0626 - Lmp10E -0627 - Lmp10J -0628 - Lmp10P -0629 - Lmp10_str_gZ -062A - Lmp10_str_fZ -062B - Lmp10_str_sZ -062C - Lmp10_str_iZ -062D - Lmp11E -062E - Lmp11J -062F - Lmp11P -0630 - Lmp11_str_gZ -0631 - Lmp11_str_fZ -0632 - Lmp11_str_sZ -0633 - Lmp11_str_iZ -0634 - Lmp12E -0635 - Lmp12J -0636 - Lmp12P -0637 - Lmp12_str_gZ -0638 - Lmp12_str_fZ -0639 - Lmp12_str_sZ -063A - Lmp12_str_iZ -063B - Lmp13E -063C - Lmp13J -063D - Lmp13P -063E - Lmp13_str_gZ -063F - Lmp13_str_fZ -0640 - Lmp13_str_sZ -0641 - Lmp13_str_iZ -0642 - Lmp14E -0643 - Lmp14J -0644 - Lmp14P -0645 - Lmp14_str_gZ -0646 - Lmp14_str_fZ -0647 - Lmp14_str_sZ -0648 - Lmp14_str_iZ -0649 - Lmp15E -064A - Lmp15J -064B - Lmp15P -064C - Lmp15_str_gZ -064D - Lmp15_str_fZ -064E - Lmp15_str_sZ -064F - Lmp15_str_iZ -0650 - Lmp16E -0651 - Lmp16J -0652 - Lmp16P -0653 - Lmp16_str_gZ -0654 - Lmp16_str_fZ -0655 - Lmp16_str_sZ -0656 - Lmp16_str_iZ -0657 - Lmp17E -0658 - Lmp17J -0659 - Lmp17P -065A - Lmp17_str_gZ -065B - Lmp17_str_fZ -065C - Lmp17_str_sZ -065D - Lmp17_str_iZ -065E - Lmp18E -065F - Lmp18J -0660 - Lmp18P -0661 - Lmp18_str_gZ -0662 - Lmp18_str_fZ -0663 - Lmp18_str_sZ -0664 - Lmp18_str_iZ -0665 - Lmp19E -0666 - Lmp19J -0667 - Lmp19P -0668 - Lmp19_str_gZ -0669 - Lmp19_str_fZ -066A - Lmp19_str_sZ -066B - Lmp19_str_iZ -066C - Lmp1E -066D - Lmp1J -066E - Lmp1P -066F - Lmp1_str_gZ -0670 - Lmp1_str_fZ -0671 - Lmp1_str_sZ -0672 - Lmp1_str_iZ -0673 - Lmp20E -0674 - Lmp20J -0675 - Lmp20P -0676 - Lmp20_str_gZ -0677 - Lmp20_str_fZ -0678 - Lmp20_str_sZ -0679 - Lmp20_str_iZ -067A - Lmp2E -067B - Lmp2J -067C - Lmp2P -067D - Lmp2_str_gZ -067E - Lmp2_str_fZ -067F - Lmp2_str_sZ -0680 - Lmp2_str_iZ -0681 - Lmp3E -0682 - Lmp3J -0683 - Lmp3P -0684 - Lmp3_str_gZ -0685 - Lmp3_str_fZ -0686 - Lmp3_str_sZ -0687 - Lmp3_str_iZ -0688 - Lmp4E -0689 - Lmp4J -068A - Lmp4P -068B - Lmp4_str_gZ -068C - Lmp4_str_fZ -068D - Lmp4_str_sZ -068E - Lmp4_str_iZ -068F - Lmp5E -0690 - Lmp5J -0691 - Lmp5P -0692 - Lmp5_str_gZ -0693 - Lmp5_str_fZ -0694 - Lmp5_str_sZ -0695 - Lmp5_str_iZ -0696 - Lmp6E -0697 - Lmp6J -0698 - Lmp6P -0699 - Lmp6_str_gZ -069A - Lmp6_str_fZ -069B - Lmp6_str_sZ -069C - Lmp6_str_iZ -069D - Lmp7E -069E - Lmp7J -069F - Lmp7P -06A0 - Lmp7_str_gZ -06A1 - Lmp7_str_fZ -06A2 - Lmp7_str_sZ -06A3 - Lmp7_str_iZ -06A4 - Lmp8E -06A5 - Lmp8J -06A6 - Lmp8P -06A7 - Lmp8_str_gZ -06A8 - Lmp8_str_fZ -06A9 - Lmp8_str_sZ -06AA - Lmp8_str_iZ -06AB - Lmp9E -06AC - Lmp9J -06AD - Lmp9P -06AE - Lmp9_str_gZ -06AF - Lmp9_str_fZ -06B0 - Lmp9_str_sZ -06B1 - Lmp9_str_iZ -06B2 - LmpmenuE -06B3 - LmpmenuJ -06B4 - LmpmenuP -06B5 - Lmpmenu_str_gZ -06B6 - Lmpmenu_str_fZ -06B7 - Lmpmenu_str_sZ -06B8 - Lmpmenu_str_iZ -06B9 - LmpweaponsE -06BA - LmpweaponsJ -06BB - LmpweaponsP -06BC - Lmpweapons_str_gZ -06BD - Lmpweapons_str_fZ -06BE - Lmpweapons_str_sZ -06BF - Lmpweapons_str_iZ -06C0 - LoatE -06C1 - LoatJ -06C2 - LoatP -06C3 - Loat_str_gZ -06C4 - Loat_str_fZ -06C5 - Loat_str_sZ -06C6 - Loat_str_iZ -06C7 - LoldE -06C8 - LoldJ -06C9 - LoldP -06CA - Lold_str_gZ -06CB - Lold_str_fZ -06CC - Lold_str_sZ -06CD - Lold_str_iZ -06CE - LoptionsE -06CF - LoptionsJ -06D0 - LoptionsP -06D1 - Loptions_str_gZ -06D2 - Loptions_str_fZ -06D3 - Loptions_str_sZ -06D4 - Loptions_str_iZ -06D5 - LpamE -06D6 - LpamJ -06D7 - LpamP -06D8 - Lpam_str_gZ -06D9 - Lpam_str_fZ -06DA - Lpam_str_sZ -06DB - Lpam_str_iZ -06DC - LpeteE -06DD - LpeteJ -06DE - LpeteP -06DF - Lpete_str_gZ -06E0 - Lpete_str_fZ -06E1 - Lpete_str_sZ -06E2 - Lpete_str_iZ -06E3 - LpropobjE -06E4 - LpropobjJ -06E5 - LpropobjP -06E6 - Lpropobj_str_gZ -06E7 - Lpropobj_str_fZ -06E8 - Lpropobj_str_sZ -06E9 - Lpropobj_str_iZ -06EA - LrefE -06EB - LrefJ -06EC - LrefP -06ED - Lref_str_gZ -06EE - Lref_str_fZ -06EF - Lref_str_sZ -06F0 - Lref_str_iZ -06F1 - LritE -06F2 - LritJ -06F3 - LritP -06F4 - Lrit_str_gZ -06F5 - Lrit_str_fZ -06F6 - Lrit_str_sZ -06F7 - Lrit_str_iZ -06F8 - LrunE -06F9 - LrunJ -06FA - LrunP -06FB - Lrun_str_gZ -06FC - Lrun_str_fZ -06FD - Lrun_str_sZ -06FE - Lrun_str_iZ -06FF - LsevE -0700 - LsevJ -0701 - LsevP -0702 - Lsev_str_gZ -0703 - Lsev_str_fZ -0704 - Lsev_str_sZ -0705 - Lsev_str_iZ -0706 - LsevbE -0707 - LsevbJ -0708 - LsevbP -0709 - Lsevb_str_gZ -070A - Lsevb_str_fZ -070B - Lsevb_str_sZ -070C - Lsevb_str_iZ -070D - LsevxE -070E - LsevxJ -070F - LsevxP -0710 - Lsevx_str_gZ -0711 - Lsevx_str_fZ -0712 - Lsevx_str_sZ -0713 - Lsevx_str_iZ -0714 - LsevxbE -0715 - LsevxbJ -0716 - LsevxbP -0717 - Lsevxb_str_gZ -0718 - Lsevxb_str_fZ -0719 - Lsevxb_str_sZ -071A - Lsevxb_str_iZ -071B - LshoE -071C - LshoJ -071D - LshoP -071E - Lsho_str_gZ -071F - Lsho_str_fZ -0720 - Lsho_str_sZ -0721 - Lsho_str_iZ -0722 - LsiloE -0723 - LsiloJ -0724 - LsiloP -0725 - Lsilo_str_gZ -0726 - Lsilo_str_fZ -0727 - Lsilo_str_sZ -0728 - Lsilo_str_iZ -0729 - LstatE -072A - LstatJ -072B - LstatP -072C - Lstat_str_gZ -072D - Lstat_str_fZ -072E - Lstat_str_sZ -072F - Lstat_str_iZ -0730 - LtitleE -0731 - LtitleJ -0732 - LtitleP -0733 - Ltitle_str_gZ -0734 - Ltitle_str_fZ -0735 - Ltitle_str_sZ -0736 - Ltitle_str_iZ -0737 - LtraE -0738 - LtraJ -0739 - LtraP -073A - Ltra_str_gZ -073B - Ltra_str_fZ -073C - Ltra_str_sZ -073D - Ltra_str_iZ -073E - LuffE -073F - LuffJ -0740 - LuffP -0741 - Luff_str_gZ -0742 - Luff_str_fZ -0743 - Luff_str_sZ -0744 - Luff_str_iZ -0745 - LwaxE -0746 - LwaxJ -0747 - LwaxP -0748 - Lwax_str_gZ -0749 - Lwax_str_fZ -074A - Lwax_str_sZ -074B - Lwax_str_iZ -074C - Pa51grateZ - Area 51 Grate -074D - GecmmineZ - ECM Mine -074E - GcommsuplinkZ - Data Uplink -074F - GirscannerZ - IR Scanner -0750 - Paf1escapedoorZ - Air Force One Escape door -0751 - PprescapsuleZ - Presidential Escape Pod -0752 - PskedarbridgeZ - Skedar Ruins Bridge -0753 - Ppelagicdoor2Z - Pelagic II Windowless door -0754 - Avault2M -0755 - Ap29_12_elM -0756 - Pttb_boxZ - BETA Touch That Box, Box -0757 - PinstfrontdoorZ - Carrington Institute Front Door -0758 - Ap14_09_joM -0759 - Ap19_07_joM -075A - Ap19_08_joM -075B - PchrlaserZ - Laser (Item) -075C - PbaftaZ - G5 Building BAFTA Award -075D - PchrsonicscrewerZ - Area 51 Surgeons Dissection Laser -075E - PchrlumphammerZ - Crash Site Outro Elvis’s hammer -075F - PskedarbombZ - Skedar Bomb from Mr. Blonde’s Revenge -0760 - PexplosivebrickZ - Infiltration Explosives -0761 - PresearchtapeZ - BETA GoldenEye video Cassette -0762 - PziggycardZ - Dr Caroll’s Backup disk -0763 - PsafeitemZ - Air Base Flight plans -0764 - Ghand_elvisZ - Elvis Arms -0765 - Paf1_tableZ - Air Force One Table -0766 - Ghand_a51guardZ - Area 51 Guard arms -0767 - Ghand_ddshockZ - dataDyne Green Guard arms -0768 - Ghand_blackguardZ - Black Guard arms -0769 - Ghand_ddfodderZ - Grey arms -076A - Ghand_ddbioZ - Bio Technician arms -076B - Ghand_a51airmanZ - Area 51 Pilot arms -076C - Ghand_g5guardZ - G5 Building Guard arms -076D - Ghand_cisoldierZ - Carrington Institute Agent arms -076E - PsensitiveinfoZ - CI Sensitive information -076F - PrussdarZ - R-Tracker -0770 - PxrayspecsZ - Xray Scanner -0771 - PchreyespyZ - Camspy, Drugspy, Bombspy -0772 - PchrdoordecoderZ - Door Decoder -0773 - PbriefcaseZ - BETA Briefcase -0774 - PsuitcaseZ - BETA Suitcase -0775 - PshuttledoorZ - Air Base Air Force Ones private loader door -0776 - PruinbridgeZ - Skedar Ruins Backdrop -0777 - PsecretindoorZ - CI Secret door (Device training) -0778 - PskpuzzleobjectZ - Skedar Ruins Push-block to activate bridge -0779 - Pa51liftdoorZ - Area 51 Lift bars/door -077A - Acicarr06M -077B - Acicarr11M -077C - Acifarr08M -077D - Acifarr12M -077E - Acifema01M -077F - Acifema04M -0780 - Acifema07M -0781 - Acifema08M -0782 - Acifema09M -0783 - Acifema14M -0784 - Acifost08M -0785 - Acifost12M -0786 - Acigrim05M -0787 - Acigrim06M -0788 - Acigrim07M -0789 - Acigrim08M -078A - Acigrim09M -078B - Acigrim10M -078C - Acihopk09M -078D - Acihopk11M -078E - Acimale02M -078F - Acimale03M -0790 - Acimale07M -0791 - Acimale09M -0792 - Acimale11M -0793 - Acimale13M -0794 - Aciroge08M -0795 - Aciroge12M -0796 - Cdark_negotiatorZ - Joanna Negotiator -0797 - PcihubZ - Carrington Institute Switch -0798 - Psk_ship_door2Z - Attack Ship Blue door -0799 - Psk_window1Z - Attack Ship Window -079A - Psk_hangardoorb_topZ - Attack Ship Hanger door (Top half) -079B - Psk_hangardoorb_botZ - Attack Ship Hanger door (Bottom half) -079C - Paf1_innerdoorZ - Air Force One Inner door -079D - Plaser_postZ - BETA Laser post -079E - Atrfost01M -079F - Atrfost02M -07A0 - Atrfost03M -07A1 - Atrcarr09M -07A2 - Atrcarr10M -07A3 - Atrcarr11M -07A4 - Acifarr01M -07A5 - Acifarr02M -07A6 - Acifarr03M -07A7 - Acigrim01M -07A8 - Acigrim03M -07A9 - Acigrim04M -07AA - Acihopk01M -07AB - Acihopk04M -07AC - Acihopk06M -07AD - Aciroge01M -07AE - Aciroge02M -07AF - Atrroge01M -07B0 - Acicarr07M -07B1 - Acicarr08M -07B2 - PtargetampZ - Target Amplifier -07B3 - Psk_liftZ - Attack Ship Lift -07B4 - PknockknockZ - CI Defense Smashed front door -07B5 - PcetandoorZ - Deep Sea Slide-up door -07B6 - Ajoinst01M -07B7 - Ajoinst02M -07B8 - Ajoinst03M -07B9 - Ajoinst04M -07BA - Ap25_03_joM -07BB - Paf1rubbleZ - Air Force One Rubble -07BC - Pdd_dr_nonrefZ - dataDyne Building Door -07BD - CheadtimZ - Enemy Head (Tim) -07BE - CheadgrantZ - Enemy Head (Grant) -07BF - CheadpennyZ - Enemy Head (Penny) -07C0 - CheadrobinZ - Enemy Head (Robin) -07C1 - CheadalexZ - Female Enemy Head (Alex) -07C2 - CheadjulianneZ - Female Enemy Head (Julianne) -07C3 - CheadlauraZ - Female Enemy Head (Laura) -07C4 - CheaddavecZ - Enemy Head (Davec) -07C5 - CheadkenZ - Enemy Head (Ken) -07C6 - CheadjoelZ - Enemy Head (Joel) -07C7 - PcetandoorsideZ - Deep Sea Slide door -07C8 - Ap29_13_joM -07C9 - Ap29_14_joM -07CA - Acicarr09M -07CB - Acicarr10M -07CC - PbuddybridgeZ - Skedar Ruins Buddy Bridge -07CD - CheadcookZ - Enemy Head (Cook) -07CE - CheadpryceZ - Enemy Head (Pryce) -07CF - CheadsilkeZ - Enemy Head (Silke) -07D0 - CheadsmithZ - Enemy Head (Smith) -07D1 - CheadgarethZ - Enemy Head (Gareth) -07D2 - CheadmurchieZ - Enemy Head (Murchie) -07D3 - CheadwongZ - Enemy Head (Wong) -07D4 - CheadcarterZ - Enemy Head (Carter) -07D5 - CheadtintinZ - Enemy Head (Tintin) -07D6 - CheadmuntonZ - Enemy Head (Munton) -07D7 - CheadstamperZ - Enemy Head (Stamper) -07D8 - CheadjonesZ - Enemy Head (Jones) -07D9 - CheadphelpsZ - Enemy Head (Phelps) -07DA - Ap29_15_joM -07DB - Ap16_03_joM -07DC - Acarrbye02M -07DD - Asaucerexp1M -07DE - ??? -End - - -Perfect Dark Global object list: (Showing ROM addresses) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This is the same list as above, except this one shows the addresses at which -the files are stored in the ROM. These values are found at NTSC 80082060 and -PAL 800825A0. By changing the address pointers on the list you can change -anything on the global object list. - -Value: NTSC: PAL: File name: -| | | | -v v v v -0000 - 00000000 - 00000000 - Nothing -0001 - 00ED83A0 - 00EC6930 - bgdata/bg_sev.seg -0002 - 00ED85A0 - 00EC6B30 - bgdata/bg_silo.seg -0003 - 00ED87A0 - 00EC6D30 - bgdata/bg_stat.seg -0004 - 00ED89A0 - 00EC6F30 - Ravine bgdata -0005 - 00EDDA50 - 00ECBFE0 - bgdata/bg_arch.seg -0006 - 00EDDC50 - 00ECC1E0 - bgdata/bg_tra.seg -0007 - 00EDDE50 - 00ECC3E0 - bgdata/bg_dest.seg -0008 - 00EDE050 - 00ECC5E0 - bgdata/bg_sevb.seg -0009 - 00EDE250 - 00ECC7E0 - Crash Site bgdata -000A - 00F08EF0 - 00EF7480 - Chicago bgdata -000B - 00F27070 - 00F15600 - G5 building (Solo) bgdata -000C - 00F40BD0 - 00F2F160 - Complex bgdata -000D - 00F4A040 - 00F385D0 - G5 Building (MP) bgdata -000E - 00F52420 - 00F409B0 - Pelagic II bgdata -000F - 00F9F4E0 - 00F8DA70 - bgdata/bg_ark.seg -0010 - 00F9F6E0 - 00F8DC70 - bgdata/bg_run.seg -0011 - 00F9F8E0 - 00F8DE70 - bgdata/bg_sevx.seg -0012 - 00F9FAE0 - 00F8E070 - Temple bgdata -0013 - 00FA42F0 - 00F92880 - Carrington Institute bgdata -0014 - 00FCCEF0 - 00FBB480 - Air Base bgdata -0015 - 00FFB5C0 - 00FE9B50 - bgdata/bg_cat.seg -0016 - 00FFB7C0 - 00FE9D50 - Pipes bgdata -0017 - 01005CF0 - 00FF4280 - Skedar Ruins bgdata -0018 - 0103CBF0 - 0102B180 - Villa (Solo) bgdata -0019 - 01075B20 - 010640B0 - bgdata/bg_imp.seg -001A - 01075D20 - 010642B0 - bgdata/bg_ash.seg -001B - 01076380 - 01064910 - Area 51 bgdata -001C - 010E8250 - 010D67E0 - dataDyne Building bgdata -001D - 011277B0 - 01115D40 - Air Force One bgdata -001E - 01169790 - 01157D20 - Skedar bgdata -001F - 01173600 - 01161B90 - Investigation bgdata -0020 - 011A37F0 - 01191D80 - Attack Ship bgdata -0021 - 011EF5B0 - 011DDB40 - bgdata/bg_lip.seg -0022 - 011EF7B0 - 011DDD40 - bgdata/bg_len.seg -0023 - 011EF9B0 - 011DDF40 - bgdata/bg_wax.seg -0024 - 011EFBB0 - 011DE140 - Deep Sea bgdata -0025 - 01246820 - 01234DB0 - bgdata/bg_uff.seg -0026 - 01246A20 - 01234FB0 - bgdata/bg_old.seg -0027 - 01246C20 - 012351B0 - bgdata/bg_ate.seg -0028 - 01246E20 - 012353B0 - bgdata/bg_lam.seg -0029 - 01247020 - 012355B0 - Base bgdata -002A - 012507F0 - 0123ED80 - bgdata/bg_mp2.seg -002B - 012509F0 - 0123EF80 - Area 52 bgdata -002C - 01259940 - 01247ED0 - Warehouse bgdata -002D - 01263890 - 01251E20 - Car Park bgdata -002E - 0126BA60 - 01259FF0 - bgdata/bg_mp6.seg -002F - 0126BC60 - 0125A1F0 - bgdata/bg_mp7.seg -0030 - 0126BE60 - 0125A3F0 - bgdata/bg_mp8.seg -0031 - 0126C060 - 0125A5F0 - Ruins bgdata -0032 - 01278420 - 012669B0 - Sewers bgdata -0033 - 01283F50 - 012724E0 - Felicity bgdata -0034 - 012928D0 - 01280E60 - Fortress bgdata -0035 - 012A8670 - 01296C00 - Villa bgdata -0036 - 012B4540 - 012A2AD0 - bgdata/bg_mp14.seg -0037 - 012B4740 - 012A2CD0 - Grid bgdata -0038 - 012BA2E0 - 012A8870 - bgdata/bg_mp16.seg -0039 - 012BA4E0 - 012A8A70 - bgdata/bg_mp17.seg -003A - 012BA6E0 - 012A8C70 - bgdata/bg_mp18.seg -003B - 012BA8E0 - 012A8E70 - bgdata/bg_mp19.seg -003C - 012BAAE0 - 012A9070 - bgdata/bg_mp20.seg -003D - 012BACE0 - 012A9270 - ob/ob_mid.seg -003E - 012BACE0 - 012A9270 - BETA Area 51 Guard -003F - 012C96D0 - 012B7C60 - Area 51 Guard -0040 - 012CD670 - 012BBC00 - Carrington -0041 - 012D1D20 - 012C02B0 - Cassandra de Vries -0042 - 012D6D90 - 012C5320 - Joanna Dark Combat Suit -0043 - 012DA460 - 012C89F0 - Joanna Dark Party Frock -0044 - 012DDDF0 - 012CC380 - Joanna Dark Trench Coat -0045 - 012E32B0 - 012D1840 - dataDyne Shock Trooper -0046 - 012E7220 - 012D57B0 - dataDyne Security Guard -0047 - 012EABD0 - 012D9160 - Black Tuxedo -0048 - 012EE3B0 - 012DC940 - Dr. Caroll -0049 - 012EF5E0 - 012DDB70 - Elvis -004A - 012FBC20 - 012EA1B0 - Elvis1 -004B - 012FFC00 - 012EE190 - Camspy, Drugspy, Bombspy -004C - 01300AD0 - 012EF060 - Cassandra’s Bodyguard -004D - 01304600 - 012F2B90 - CI Lab Technician -004E - 01308370 - 012F6900 - Mr. Blonde -004F - 0130DB30 - 012FC0C0 - dataDyne Programmer -0050 - 013112C0 - 012FF850 - dataDyne Programmer -0051 - 01314A50 - 01302FE0 - Area 51 Overall -0052 - 013185E0 - 01306B70 - dataDyne Secretary -0053 - 0131BFC0 - 0130A550 - Skedar -0054 - 01320FD0 - 0130F560 - Trent Easton’s Bodyguard -0055 - 01324DE0 - 01313370 - Trent Easton Standing upright -0056 - 01334D10 - 013232A0 - Maian with Blue Shoes -0057 - 01338CE0 - 01327270 - Trent Easton -0058 - 0133DB10 - 0132C0A0 - Bullet long version -0059 - 0133E9F0 - 0132CF80 - Bullet short version -005A - 0133F1E0 - 0132D770 - Slayer Rocket -005B - 013410D0 - 0132F660 - Shotgun shell -005C - 013419A0 - 0132FF30 - Nintendo 64 Controller -005D - 01344130 - 013326C0 - Crate -005E - 01344270 - 01332800 - Blue Tinted Crate -005F - 013443C0 - 01332950 - Brown Tinted Crate -0060 - 013444F0 - 01332A80 - Area 51 Hole-in-wall frame -0061 - 01344830 - 01332DC0 - Area 51 Hole-in-wall frame -0062 - 01344DB0 - 01333340 - Area 51 Square Door (Bottom part) -0063 - 01345070 - 01333600 - Area 51 Door with glass window -0064 - 013453C0 - 01333950 - Area 51 Door -0065 - 01345570 - 01333B00 - Area 51 Square Door (Top part) -0066 - 01345830 - 01333DC0 - Area 51 Small lift from hanger -0067 - 01345B60 - 013340F0 - Area 51 Hanger lift -0068 - 013466E0 - 01334C70 - Area 51 Storage lift 1 -0069 - 013468D0 - 01334E60 - Area 51 Storage lift 2 -006A - 01346AE0 - 01335070 - Area 51 Wall you blow up -006B - 01347A60 - 01335FF0 - Area 51 Wall you blow up -006C - 01347CD0 - 01336260 - Area 51 Wall you blow up -006D - 01347ED0 - 01336460 - Area 51 Door (Left) -006E - 013481D0 - 01336760 - Area 51 Door (Right) -006F - 013484E0 - 01336A70 - Area 51 Door -0070 - 013487F0 - 01336D80 - Area 51 Bulletin board with Maian pictures -0071 - 01348B50 - 013370E0 - BETA Area 51 Chair -0072 - 01348E60 - 013373F0 - Area 51 Entrance hall desk -0073 - 013490B0 - 01337640 - Area 51 Office divider (Peachy coloured) -0074 - 013492B0 - 01337840 - BETA Area 51 Screen -0075 - 013494E0 - 01337A70 - Area 51 Table -0076 - 013497A0 - 01337D30 - Area 51 Empty Hoverbed -0077 - 01349BF0 - 01338180 - Area51 Trashcan -0078 - 01349E10 - 013383A0 - Villa Wine Bottle (Green) -0079 - 0134A050 - 013385E0 - Villa Wine Bottle (Red) -007A - 0134A2B0 - 01338840 - Villa Wine Bottle (Red, not JUNG brand) -007B - 0134A4D0 - 01338A60 - BETA Villa door -007C - 0134B640 - 01339BD0 - Villa Wooden door -007D - 0134C4B0 - 0133AA40 - BETA Villa Wooden slide door -007E - 0134CE90 - 0133B420 - Villa Windmill propellar -007F - 0134D950 - 0133BEE0 - Deep Sea Door from beginning of level -0080 - 0134F310 - 0133D8A0 - Deep Sea Lift -0081 - 0134F5A0 - 0133DB30 - Deep Sea Door (Left) -0082 - 013505E0 - 0133EB70 - Deep Sea Door (Right) -0083 - 013515F0 - 0133FB80 - BETA Cube with a circuit-like texture -0084 - 01351730 - 0133FCC0 - Case -0085 - 01353110 - 013416A0 - Chicago Metal shutter -0086 - 01353250 - 013417E0 - Briefcase -0087 - 01354C20 - 013431B0 - Tracer Bug -0088 - 01355540 - 01343AD0 - Data Uplink -0089 - 01355AB0 - 01344040 - BETA Door -008A - 01355C00 - 01344190 - dataDyne Building Hole-in-tube frame -008B - 01355DC0 - 01344350 - dataDyne Building Hole-in-tube unexploded -008C - 01356690 - 01344C20 - dataDyne Building Hole-in-wall frame -008D - 013569E0 - 01344F70 - dataDyne Building Hole-in-wall unexploded -008E - 01356B20 - 013450B0 - dataDyne Building Rooftop banner -008F - 01356DD0 - 01345360 - dataDyne Building Desk chair -0090 - 01357090 - 01345620 - dataDyne Building Slide door -0091 - 013572C0 - 01345850 - dataDyne Building Desk -0092 - 013574C0 - 01345A50 - dataDyne Building Roof fan -0093 - 013576B0 - 01345C40 - dataDyne Building Wall fan -0094 - 01357910 - 01345EA0 - Hovercab -0095 - 01357CF0 - 01346280 - Hovercar -0096 - 01358090 - 01346620 - Hovercop -0097 - 013584E0 - 01346A70 - dataDyne Hovercopter -0098 - 01359D80 - 01348310 - Hovermoto -0099 - 0135A140 - 013486D0 - Hovertruck -009A - 0135A540 - 01348AD0 - Investigation Caution door with window -009B - 0135AA40 - 01348FD0 - Investigation Slide-up door caution (Top) -009C - 0135ADA0 - 01349330 - BETA Investigation Door -009D - 0135AFF0 - 01349580 - Investigation Secret door -009E - 0135B130 - 013496C0 - Investigation Sector One Door -009F - 0135B640 - 01349BD0 - Investigation Slide-up door hazardous (Top) -00A0 - 0135BAD0 - 0134A060 - Investigation Slide-up door restricted (Top) -00A1 - 0135BE40 - 0134A3D0 - Investigation Slide-down door (Bottom) -00A2 - 0135C1C0 - 0134A750 - Investigation Sector Two Slide-up door (Top) -00A3 - 0135C520 - 0134AAB0 - Investigation Sector Three Door -00A4 - 0135C8F0 - 0134AE80 - Investigation Sector Three Slide-up door (Top) -00A5 - 0135CC50 - 0134B1E0 - Investigation Sector Three Door with window -00A6 - 0135D150 - 0134B6E0 - Investigation Sector Four Slide-up door (Top) -00A7 - 0135D4B0 - 0134BA40 - dataDyne Building Lift door -00A8 - 0135D670 - 0134BC00 - dataDyne Building Lift -00A9 - 0135DA60 - 0134BFF0 - dataDyne Building Office door -00AA - 0135DDA0 - 0134C330 - Pot plant (Rubber plant) -00AB - 0135E200 - 0134C790 - Pot plant (Spider plant) -00AC - 0135E460 - 0134C9F0 - Pot plant (Spike plant) -00AD - 0135E720 - 0134CCB0 - dataDyne Building Armchair -00AE - 0135E9C0 - 0134CF50 - dataDyne Building Sofa -00AF - 0135ECC0 - 0134D250 - dataDyne Building Secret Door 1 -00B0 - 0135EE70 - 0134D400 - dataDyne Building Secret door 2 -00B1 - 0135EFD0 - 0134D560 - dataDyne Building Service door -00B2 - 0135F200 - 0134D790 - dataDyne Building Cassandra's desk -00B3 - 0135F570 - 0134DB00 - dataDyne Building Vertical blind -00B4 - 0135F680 - 0134DC10 - dataDyne Building Grating door -00B5 - 0135F920 - 0134DEB0 - dataDyne Building Pane of glass -00B6 - 0135FA10 - 0134DFA0 - CI Jumpship from Defection Intro -00B7 - 01361600 - 0134FB90 - G5 Building Part of fire door -00B8 - 01361980 - 0134FF10 - G5 Building Part of fire door -00B9 - 01361AE0 - 01350070 - G5 Building Part of fire door -00BA - 01361E00 - 01350390 - G5 Building Slide open door with window -00BB - 01362060 - 013505F0 - G5 Building Slide open door without window -00BC - 013621B0 - 01350740 - G5 Building Slide door with dataDyne logo -00BD - 01362490 - 01350A20 - G5 Building Slide door with dataDyne logo -00BE - 01362700 - 01350C90 - Metal panel -00BF - 01362820 - 01350DB0 - BETA Computer Terminal from GoldenEye -00C0 - 01362B60 - 013510F0 - A part of Dr. Caroll’s hiding place -00C1 - 013630E0 - 01351670 - A part of Dr. Caroll’s hiding place -00C2 - 01363970 - 01351F00 - A part of Dr. Caroll’s hiding place -00C3 - 01363D30 - 013522C0 - A part of Dr. Caroll’s hiding place -00C4 - 01364110 - 013526A0 - A part of Dr. Caroll’s hiding place -00C5 - 013644E0 - 01352A70 - A part of Dr. Caroll’s hiding place -00C6 - 013647B0 - 01352D40 - A part of Dr. Caroll’s hiding place -00C7 - 01364A80 - 01353010 - A part of Dr. Caroll’s hiding place -00C8 - 01364D60 - 013532F0 - CI Jumpship from Villa, Defense -00C9 - 01367EA0 - 01356430 - Chicago Dumpster -00CA - 013680E0 - 01356670 - Explosion bit (Freezes game) -00CB - 013680E0 - 01356670 - BETA Flag from GoldenEye -00CC - 01368220 - 013567B0 - G5 Building Lower hole-in-wall unexploded -00CD - 01368350 - 013568E0 - G5 Building Lower hole-in-wall frame -00CE - 01368880 - 01356E10 - G5 Building Upper hole-in-wall unexploded -00CF - 013689B0 - 01356F40 - G5 Building Upper hole-in-wall frame -00D0 - 01368ED0 - 01357460 - G5 Building Mainframe -00D1 - 01369050 - 013575E0 - G5 Building Vault door -00D2 - 01369450 - 013579E0 - Chicago Unopened fire door -00D3 - 01369A10 - 01357FA0 - BETA GoldenEye Logo -00D4 - 0136AB10 - 013590A0 - Hoverbot (Orange) -00D5 - 0136AD40 - 013592D0 - Hoverbike -00D6 - 0136BDE0 - 0135A370 - Area 51 Hoverbed with Elvis -00D7 - 0136DC80 - 0135C210 - Hovercrate -00D8 - 0136E0D0 - 0135C660 - Laser beam Door / Block -00D9 - 0136E1B0 - 0135C740 - BETA Muilticoloured crate -00DA - 0136E900 - 0135CE90 - Area 51 Caution glass 1 -00DB - 0136EA70 - 0135D000 - Area 51 Caution glass 2 -00DC - 0136EBE0 - 0135D170 - Area51 Button / Control panel -00DD - 0136EE90 - 0135D420 - Nintendo Logo -00DE - 01372400 - 01360990 - Changing N logo 2 -00DF - 01373EF0 - 01362480 - Changing N logo 3 -00E0 - 01375A00 - 01363F90 - Changing N logo -00E1 - 013796C0 - 01367C50 - Blue Computer -00E2 - 01379A20 - 01367FB0 - Perfect Dark Logo 4 -00E3 - 0137E190 - 0136C720 - Perfect Dark Logo 1 -00E4 - 01380A70 - 0136F000 - Perfect Dark Logo 3 -00E5 - 01384ED0 - 01373460 - Perfect Dark Logo 2 -00E6 - 01388930 - 01376EC0 - Perfect Dark Logo -00E7 - 0138C390 - 0137A920 - Chicago Police hovercar -00E8 - 0138D360 - 0137B8F0 - Ravine Lift -00E9 - 0138D530 - 0137BAC0 - dataDyne Building Defection Intro Rope -00EA - 0138DDE0 - 0137C370 - Secret Skedar Army hatch door (Bottom) -00EB - 0138F130 - 0137D6C0 - Secret Skedar Army hatch door (Top) -00EC - 01390180 - 0137E710 - Skedar Ruins Door -00ED - 013903C0 - 0137E950 - BETA Skedar Fighter ship -00EE - 01394550 - 01382AE0 - Attack Ship Hanger door (Bottom half) -00EF - 01395A00 - 01383F90 - Attack Ship Hanger door (Top half) -00F0 - 013977A0 - 01385D30 - Attack Ship yYellow slide door -00F1 - 01397BD0 - 01386160 - Attack Ship Holographic star map -00F2 - 01397DA0 - 01386330 - Attack Ship Holographic star map -00F3 - 01397EF0 - 01386480 - Attack Ship Hanger hull door part 1 -00F4 - 013981B0 - 01386740 - Attack Ship Hanger hull door part 2 -00F5 - 01398480 - 01386A10 - Attack Ship Hanger hull door part 3 -00F6 - 01398690 - 01386C20 - Attack Ship Hanger hull door part 4 -00F7 - 013988B0 - 01386E40 - Skedar Ruins Spinning power generator pillar -00F8 - 01399A70 - 01388000 - Skedar Ruins Rolling round pillar -00F9 - 0139A420 - 013889B0 - Skedar Ruins Canyon wall after blowing up rock -00FA - 0139A620 - 01388BB0 - Skedar Ruins Canyon rock -00FB - 0139AF60 - 013894F0 - Skedar Ruins Hole-in-wall frame -00FC - 0139B1C0 - 01389750 - Skedar Ruins Hole-in-wall unexploded -00FD - 0139B400 - 01389990 - Chicago Hovertaxi -00FE - 0139C3C0 - 0138A950 - Hoverbot (White/blue) -00FF - 0139C790 - 0138AD20 - BETA Chicago Limo -0100 - 013A43D0 - 01392960 - Tv screen -0101 - 013A44A0 - 01392A30 - Pane of glass -0102 - 013A4590 - 01392B20 - Ump_setupameZ -0103 - 013A45B0 - 01392B40 - Ump_setuparchZ -0104 - 013A45D0 - 01392B60 - Ravine mp_setup -0105 - 013A47E0 - 01392D70 - Ump_setuparkZ -0106 - 013A4800 - 01392D90 - Ump_setupashZ -0107 - 013A4820 - 01392DB0 - Ump_setupaztZ -0108 - 013A4840 - 01392DD0 - Ump_setupcatZ -0109 - 013A4860 - 01392DF0 - Ump_setupcaveZ -010A - 013A4880 - 01392E10 - Pipes mp_setup -010B - 013A4A40 - 01392FD0 - G5 Building (MP) mp_setup -010C - 013A4BD0 - 01393160 - BETA GoldenEye Dam language file -010D - 013A4ED0 - 01393460 - Ump_setupdepoZ -010E - 013A4EF0 - 01393480 - Ump_setupdestZ -010F - 013A4F10 - 013934A0 - Ump_setupdishZ -0110 - 013A4F30 - 013934C0 - Ump_setupearZ -0111 - 013A4F60 - 013934F0 - Ump_setupeldZ -0112 - 013A4F90 - 01393520 - Ump_setupimpZ -0113 - 013A4FB0 - 01393540 - Temple mp_setup -0114 - 013A5160 - 013936F0 - Ump_setupleeZ -0115 - 013A5190 - 01393720 - Ump_setuplenZ -0116 - 013A51C0 - 01393750 - Ump_setuplipZ -0117 - 013A51E0 - 01393770 - Ump_setuplueZ -0118 - 013A5200 - 01393790 - Skedar mp_setup -0119 - 013A53C0 - 01393950 - Ump_setuppamZ -011A - 013A53F0 - 01393980 - BETA GoldenEye Streets solo setup something -011B - 013A54E0 - 01393A70 - Complex mp_setup -011C - 013A5680 - 01393C10 - Ump_setupritZ -011D - 013A56B0 - 01393C40 - Ump_setuprunZ -011E - 013A56E0 - 01393C70 - Ump_setupsevZ -011F - 013A5700 - 01393C90 - Retaking the Institute mp_setup -0120 - 013A5720 - 01393CB0 - Ump_setupsevxZ -0121 - 013A5740 - 01393CD0 - Ump_setupshoZ -0122 - 013A5760 - 01393CF0 - Ump_setupsiloZ -0123 - 013A5780 - 01393D10 - Ump_setupstatZ -0124 - 013A57A0 - 01393D30 - Ump_setuptraZ -0125 - 013A57C0 - 01393D50 - Ump_setupwaxZ -0126 - 013A57E0 - 01393D70 - Defection solo setup -0127 - 013A7950 - 01395EE0 - UsetuparchZ -0128 - 013A7970 - 01395F00 - UsetuparecZ -0129 - 013A79C0 - 01395F50 - Extraction solo setup -012A - 013A9790 - 01397D20 - UsetupashZ -012B - 013A97B0 - 01397D40 - Crash Site solo setup -012C - 013AAA30 - 01398FC0 - UsetupcatZ -012D - 013AAA50 - 01398FE0 - Air Base solo setup -012E - 013ACFD0 - 0139B560 - UsetupcradZ -012F - 013AD000 - 0139B590 - UsetupcrypZ -0130 - 013AD030 - 0139B5C0 - Pelagic II solo setup -0131 - 013AEB40 - 0139D0D0 - G5 Building (Solo) solo setup -0132 - 013B0510 - 0139EAA0 - UsetupdestZ -0133 - 013B0530 - 0139EAC0 - CI Training solo setup -0134 - 013B29D0 - 013A0F80 - Investigation solo setup -0135 - 013B4860 - 013A2E10 - Villa (Solo) solo setup -0136 - 013B6760 - 013A4D10 - Defense solo setup -0137 - 013B87E0 - 013A6D90 - UsetupjunZ -0138 - 013B8810 - 013A6DC0 - Attack Ship solo setup -0139 - 013BA680 - 013A8C30 - UsetuplenZ -013A - 013BA6B0 - 013A8C60 - Rescue solo setup -013B - 013BCE20 - 013AB3D0 - Infiltration solo setup -013C - 013BEB80 - 013AD140 - Skedar solo setup -013D - 013BED30 - 013AD2F0 - Deep Sea solo setup -013E - 013C1470 - 013AFA30 - Chicago solo setup -013F - 013C2DF0 - 013B13B0 - UsetuprefZ -0140 - 013C2E20 - 013B13E0 - Air Force One solo setup -0141 - 013C4D80 - 013B3340 - UsetuprunZ -0142 - 013C4DA0 - 013B3360 - Maian SOS solo setup -0143 - 013C62E0 - 013B48A0 - Retaking the Institute solo setup -0144 - 013C6300 - 013B48C0 - UsetupsevxZ -0145 - 013C6320 - 013B48E0 - UsetupsevxbZ -0146 - 013C6340 - 013B4900 - Skedar Ruins solo setup -0147 - 013C8350 - 013B6920 - Unknown solo setup -0148 - 013C8370 - 013B6940 - WAR! solo setup -0149 - 013C8E80 - 013B7450 - Escape solo setup -014A - 013CB040 - 013B9610 - Mr. Blondes Revenge solo setup -014B - 013CC5C0 - 013BAB90 - Defection pads -014C - 013CF8F0 - 013BDEC0 - dataDyne Building tiles -014D - 013D78F0 - 013C5EC0 - bgdata/bg_arch_padsZ -014E - 013D7910 - 013C5EE0 - bgdata/bg_arch_tilesZ -014F - 013D79C0 - 013C5F90 - Ravine pads -0150 - 013D9220 - 013C77F0 - Ravine tiles -0151 - 013DA5F0 - 013C8BC0 - Extraction pads -0152 - 013DD960 - 013CBF30 - bgdata/bg_ark_tilesZ -0153 - 013DDA10 - 013CBFE0 - bgdata/bg_ash_padsZ -0154 - 013DDA30 - 013CC000 - bgdata/bg_ash_tilesZ -0155 - 013DDAE0 - 013CC0B0 - Crash Site pads -0156 - 013E14D0 - 013CFAA0 - Crash Site tiles -0157 - 013F6450 - 013E4A20 - bgdata/bg_cat_padsZ -0158 - 013F6470 - 013E4A40 - bgdata/bg_cat_tilesZ -0159 - 013F6520 - 013E4AF0 - Air Base pads -015A - 013F97C0 - 013E7D90 - Air Base tiles -015B - 01409AA0 - 013F8070 - Pipes pads -015C - 0140B320 - 013F98F0 - Pipes tiles -015D - 0140E2D0 - 013FC8A0 - G5 Building (MP) pads -015E - 0140F700 - 013FDCD0 - G5 Building (MP) tiles -015F - 014121E0 - 014007B0 - Pelagic II pads -0160 - 01415910 - 01403EE0 - Pelagic II tiles -0161 - 01433B00 - 014220D0 - G5 Building (Solo) pads -0162 - 01435200 - 014237D0 - G5 Building (Solo) tiles -0163 - 0143D680 - 0142BC50 - bgdata/bg_dest_padsZ -0164 - 0143D6A0 - 0142BC70 - bgdata/bg_dest_tilesZ -0165 - 0143D750 - 0142BD20 - CI Training pads -0166 - 01441920 - 0142FEF0 - Carrington Institute tiles -0167 - 0144D730 - 0143BD00 - Investigation pads -0168 - 014521C0 - 01440790 - Investigation tiles -0169 - 014626E0 - 01450CB0 - Villa (Solo) pads -016A - 014663C0 - 01454990 - Villa (Solo) tiles -016B - 01476010 - 014645E0 - Defense pads -016C - 0147A1D0 - 014687A0 - bgdata/bg_imp_tilesZ -016D - 0147A280 - 01468850 - Temple pads -016E - 0147B650 - 01469C20 - Temple tiles -016F - 0147C7F0 - 0146ADC0 - Attack Ship pads -0170 - 0147FAC0 - 0146E090 - Attack Ship tiles -0171 - 014A1CA0 - 01490270 - bgdata/bg_len_padsZ -0172 - 014A1CC0 - 01490290 - bgdata/bg_len_tilesZ -0173 - 014A1D70 - 01490340 - Rescue pads -0174 - 014A9760 - 01497D30 - bgdata/bg_lip_tilesZ -0175 - 014A9810 - 01497DE0 - Infiltration pads -0176 - 014B1200 - 0149F7D0 - Area 51 tiles -0177 - 014D7E40 - 014C6410 - Skedar pads -0178 - 014D9B20 - 014C80F0 - Skedar tiles -0179 - 014DC900 - 014CAED0 - Deep Sea pads -017A - 014E2850 - 014D0E20 - Deep Sea tiles -017B - 015063F0 - 014F49C0 - Chicago pads -017C - 01507BC0 - 014F6190 - Chicago tiles -017D - 0150F810 - 014FDDE0 - Complex pads -017E - 01510C00 - 014FF1D0 - Complex tiles -017F - 01513FB0 - 01502580 - Air Force One pads -0180 - 01516440 - 01504A10 - Air Force One tiles -0181 - 0152F3A0 - 0151D970 - bgdata/bg_run_padsZ -0182 - 0152F3C0 - 0151D990 - bgdata/bg_run_tilesZ -0183 - 0152F470 - 0151DA40 - Maian SOS pads -0184 - 01536E60 - 01525430 - bgdata/bg_sev_tilesZ -0185 - 01536F10 - 015254E0 - Retaking the Institute -0186 - 01536F30 - 01525500 - bgdata/bg_sevb_tilesZ -0187 - 01536FE0 - 015255B0 - bgdata/bg_sevx_padsZ -0188 - 01537000 - 015255D0 - bgdata/bg_sevx_tilesZ -0189 - 015370B0 - 01525680 - Skedar Ruins pads -018A - 01539630 - 01527C00 - Skedar Ruins tiles -018B - 01549860 - 01537E30 - Unknown pads -018C - 01549880 - 01537E50 - Unknown tiles -018D - 01549930 - 01537F00 - WAR! pads -018E - 0154BEB0 - 0153A480 - bgdata/bg_stat_tilesZ -018F - 0154BF60 - 0153A530 - Escape pads -0190 - 01553950 - 01541F20 - bgdata/bg_tra_tilesZ -0191 - 01553A00 - 01541FD0 - Mr. Blonde's Revenge pads -0192 - 01556D30 - 01545300 - bgdata/bg_wax_tilesZ -0193 - 01556DE0 - 015453B0 - Testgun (Looks like grenade) player -0194 - 01557D80 - 01546350 - dataDyne Lab Technician -0195 - 0155B830 - 01549E00 - Security Camera -0196 - 0155BC70 - 0154A240 - Communications hub -0197 - 0155C410 - 0154A9E0 - dataDyne Building Rocket Launcher stand -0198 - 0155C760 - 0154AD30 - Blue computer terminal -0199 - 0155CBF0 - 0154B1C0 - White Tuxedo -019A - 015603E0 - 0154E9B0 - Black Tuxedo -019B - 01563B10 - 015520E0 - Black Tuxedo with open jacket -019C - 015672E0 - 015558B0 - Joanna Head -019D - 01568CC0 - 01557290 - Elvis Head -019E - 0156A1E0 - 015587B0 - Enemy Head (Ross) -019F - 0156B010 - 015595E0 - Carrington’s Head -01A0 - 0156C280 - 0155A850 - Mr. Blonde Head -01A1 - 0156D4D0 - 0155BAA0 - Trent Easton Head -01A2 - 0156E6F0 - 0155CCC0 - Shock Trooper Head -01A3 - 0156F680 - 0155DC50 - Enemy Head (Graham) -01A4 - 01570420 - 0155E9F0 - Joanna Frock Head -01A5 - 01572040 - 01560610 - dataDyne Secretary Head -01A6 - 01573250 - 01561820 - Cassandra’s Head -01A7 - 01574EF0 - 015634C0 - Maian head with closes eyes -01A8 - 01576420 - 015649F0 - Female Enemy Head -01A9 - 01577820 - 01565DF0 - Enemy Head (Jon) -01AA - 01578660 - 01566C30 - Investigation Lift -01AB - 01578990 - 01566F60 - Red grate panel -01AC - 01578B00 - 015670D0 - Light switch -01AD - 01578C30 - 01567200 - dataDyne Building Extraction Blue blast shield -01AE - 01579010 - 015675E0 - dataDyne Building Light switch -01AF - 015792C0 - 01567890 - Investigation Sector Four Door (Top half) -01B0 - 01579800 - 01567DD0 - Investigation Sector Four Door (Bottom half) -01B1 - 01579A20 - 01567FF0 - Joanna Frock (ripped) -01B2 - 0157E7D0 - 0156CDA0 - Enemy Head (Mark2) -01B3 - 0157F920 - 0156DEF0 - Enemy Head (Christ) -01B4 - 01580A20 - 0156EFF0 - Area 51 Oil container -01B5 - 01580CD0 - 0156F2A0 - Investigation Metal chair -01B6 - 01580F30 - 0156F500 - Investigation Table -01B7 - 01581190 - 0156F760 - BETA Investigation Microscope -01B8 - 015816C0 - 0156FC90 - BETA Investigation Mainframe -01B9 - 01581980 - 0156FF50 - Investigation Laboratory door -01BA - 01581E00 - 015703D0 - Investigation Slide-up door laboratory (Top) -01BB - 01582130 - 01570700 - Ammo Crate -01BC - 015822E0 - 015708B0 - Enemy Head (Russ) -01BD - 01583370 - 01571940 - BETA Head -01BE - 01584200 - 015727D0 - Enemy Head (Darling) -01BF - 015852B0 - 01573880 - dataDyne Guard -01C0 - 01588DA0 - 01577370 - Enemy Head (Robert) -01C1 - 01589C30 - 01578200 - Shock Trooper -01C2 - 01594AF0 - 015830C0 - Enemy Head (Beau) -01C3 - 01595D90 - 01584360 - Cassandra De Vries Necklace -01C4 - 01596050 - 01584620 - dataDyne Guard from Investigation -01C5 - 01599F00 - 015884D0 - Female Enemy Head -01C6 - 0159B1F0 - 015897C0 - Investigation Ceiling dronegun -01C7 - 0159E7A0 - 0158CD70 - Temple Door -01C8 - 0159E8E0 - 0158CEB0 - Area 51 Bio Technician -01C9 - 015A23F0 - 015909C0 - FBI Agent -01CA - 015A5FD0 - 015945A0 - Crash Site Dronegun -01CB - 015A8150 - 01596720 - CIA Agent -01CC - 015ABE70 - 0159A440 - Area 51 Trooper -01CD - 015AF8A0 - 0159DE70 - Enemy Head (Brian) -01CE - 015B09B0 - 0159EF80 - Enemy Head (Jamie) -01CF - 015B1940 - 0159FF10 - Enemy Head (Duncan) -01D0 - 015B2880 - 015A0E50 - Bio Technician Head -01D1 - 015B3780 - 015A1D50 - UsetupuffZ -01D2 - 015B37A0 - 015A1D70 - Ump_setupuffZ -01D3 - 015B37C0 - 015A1D90 - bgdata/bg_uff_padsZ -01D4 - 015B37E0 - 015A1DB0 - bgdata/bg_uff_tilesZ -01D5 - 015B3890 - 015A1E60 - UsetupoldZ -01D6 - 015B39A0 - 015A1F70 - Ump_setupoldZ -01D7 - 015B39C0 - 015A1F90 - bgdata/bg_old_padsZ -01D8 - 015B39E0 - 015A1FB0 - bgdata/bg_old_tilesZ -01D9 - 015B3A90 - 015A2060 - Duel solo setup -01DA - 015B3E00 - 015A23D0 - Ump_setupateZ -01DB - 015B3E20 - 015A23F0 - Duel pads -01DC - 015B7FE0 - 015A65B0 - bgdata/bg_ate_tilesZ -01DD - 015B8090 - 015A6660 - UsetuplamZ -01DE - 015B80B0 - 015A6680 - Ump_setuplamZ -01DF - 015B80D0 - 015A66A0 - bgdata/bg_lam_padsZ -01E0 - 015B80F0 - 015A66C0 - bgdata/bg_lam_tilesZ -01E1 - 015B81A0 - 015A6770 - Usetupmp1Z -01E2 - 015B81C0 - 015A6790 - Base mp_setup -01E3 - 015B8410 - 015A69E0 - Base pads -01E4 - 015B9E90 - 015A8460 - Base tiles -01E5 - 015BD9D0 - 015ABFA0 - Usetupmp2Z -01E6 - 015BD9F0 - 015ABFC0 - Ump_setupmp2Z -01E7 - 015BDA20 - 015ABFF0 - bgdata/bg_mp2_padsZ -01E8 - 015BDA40 - 015AC010 - bgdata/bg_mp2_tilesZ -01E9 - 015BDAF0 - 015AC0C0 - Usetupmp3Z -01EA - 015BDB20 - 015AC0F0 - Area 52 mp_setup -01EB - 015BDD90 - 015AC360 - Area 52 pads -01EC - 015BFB10 - 015AE0E0 - Area 52 tiles -01ED - 015C31D0 - 015B17A0 - Usetupmp4Z -01EE - 015C31F0 - 015B17C0 - Warehouse mp_setup -01EF - 015C33A0 - 015B1970 - Warehouse pads -01F0 - 015C5CB0 - 015B4280 - Warehouse tiles -01F1 - 015C9BD0 - 015B81A0 - Usetupmp5Z -01F2 - 015C9BF0 - 015B81C0 - Car Park mp_setup -01F3 - 015C9DB0 - 015B8380 - Car Park pads -01F4 - 015CBB00 - 015BA0D0 - Car Park tiles -01F5 - 015CE610 - 015BCBE0 - Usetupmp6Z -01F6 - 015CE630 - 015BCC00 - Ump_setupmp6Z -01F7 - 015CE660 - 015BCC30 - bgdata/bg_mp6_padsZ -01F8 - 015CE680 - 015BCC50 - bgdata/bg_mp6_tilesZ -01F9 - 015CE730 - 015BCD00 - Usetupmp7Z -01FA - 015CE750 - 015BCD20 - Ump_setupmp7Z -01FB - 015CE790 - 015BCD60 - bgdata/bg_mp7_padsZ -01FC - 015CE7B0 - 015BCD80 - bgdata/bg_mp7_tilesZ -01FD - 015CE860 - 015BCE30 - Usetupmp8Z -01FE - 015CE880 - 015BCE50 - Ump_setupmp8Z -01FF - 015CE8C0 - 015BCE90 - bgdata/bg_mp8_padsZ -0200 - 015CE8E0 - 015BCEB0 - bgdata/bg_mp8_tilesZ -0201 - 015CE990 - 015BCF60 - Usetupmp9Z -0202 - 015CE9B0 - 015BCF80 - Ruins mp_setup -0203 - 015CEB80 - 015BD150 - Ruins pads -0204 - 015CFE10 - 015BE3E0 - Ruins tiles -0205 - 015D2DD0 - 015C1420 - Usetupmp10Z -0206 - 015D2E30 - 015C1480 - Sewers mp_setup -0207 - 015D3020 - 015C1670 - Sewers pads -0208 - 015D4230 - 015C2880 - Sewers tiles -0209 - 015D7830 - 015C5E80 - Usetupmp11Z -020A - 015D7850 - 015C5EA0 - Felicity mp_setup -020B - 015D7AA0 - 015C60F0 - Felicity pads -020C - 015D9160 - 015C77B0 - Felicity tiles -020D - 015DF670 - 015CDCC0 - Usetupmp12Z -020E - 015DF690 - 015CDCE0 - Fortress mp_setup -020F - 015DF9B0 - 015CE000 - Fortress pads -0210 - 015E2740 - 015D0D90 - Fortress tiles -0211 - 015E83E0 - 015D6A30 - Usetupmp13Z -0212 - 015E8400 - 015D6A50 - Villa mp_setup -0213 - 015E8570 - 015D6BC0 - Villa pads -0214 - 015E9CE0 - 015D8330 - Villa tiles -0215 - 015EE200 - 015DC850 - Usetupmp14Z -0216 - 015EE220 - 015DC870 - Ump_setupmp14Z -0217 - 015EE250 - 015DC8A0 - bgdata/bg_mp14_padsZ -0218 - 015EE270 - 015DC8C0 - bgdata/bg_mp14_tilesZ -0219 - 015EE320 - 015DC970 - Usetupmp15Z -021A - 015EE340 - 015DC990 - Grid mp_setup -021B - 015EE5C0 - 015DCC10 - Grid pads -021C - 015EF990 - 015DDFE0 - Grid tiles -021D - 015F17F0 - 015DFE40 - Usetupmp16Z -021E - 015F1810 - 015DFE60 - Ump_setupmp16Z -021F - 015F1840 - 015DFE90 - bgdata/bg_mp16_padsZ -0220 - 015F1860 - 015DFEB0 - bgdata/bg_mp16_tilesZ -0221 - 015F1910 - 015DFF60 - Usetupmp17Z -0222 - 015F1930 - 015DFF80 - Ump_setupmp17Z -0223 - 015F1970 - 015DFFC0 - bgdata/bg_mp17_padsZ -0224 - 015F1990 - 015DFFE0 - bgdata/bg_mp17_tilesZ -0225 - 015F1A40 - 015E0090 - Usetupmp18Z -0226 - 015F1A60 - 015E00B0 - Ump_setupmp18Z -0227 - 015F1AA0 - 015E00F0 - bgdata/bg_mp18_padsZ -0228 - 015F1AC0 - 015E0110 - bgdata/bg_mp18_tilesZ -0229 - 015F1B70 - 015E01C0 - Usetupmp19Z -022A - 015F1B90 - 015E01E0 - Ump_setupmp19Z -022B - 015F1BD0 - 015E0220 - bgdata/bg_mp19_padsZ -022C - 015F1BF0 - 015E0240 - bgdata/bg_mp19_tilesZ -022D - 015F1CA0 - 015E02F0 - Usetupmp20Z -022E - 015F1CC0 - 015E0310 - Ump_setupmp20Z -022F - 015F1D00 - 015E0350 - bgdata/bg_mp20_padsZ -0230 - 015F1D20 - 015E0370 - bgdata/bg_mp20_tilesZ -0231 - 015F1DD0 - 015E0420 - Area 51 Pilot -0232 - 015F5720 - 015E3D70 - Enemy Head (Neil) -0233 - 015F66D0 - 015E4D20 - Carrington Institute Sofa (with mirror image) -0234 - 015F6E60 - 015E54B0 - Carrington Institute Lift -0235 - 015F6FE0 - 015E5630 - Carrington Institute Glass door -0236 - 015F71E0 - 015E5830 - Sentry Robot -0237 - 015F8680 - 015E6CD0 - Steward -0238 - 015FBFB0 - 015EA600 - Enemy Head (Edmcg) -0239 - 015FCF70 - 015EB5C0 - Stewardess -023A - 016007E0 - 015EEE30 - Enemy Head (Anka) -023B - 016017A0 - 015EFDF0 - US President -023C - 01606240 - 015F4890 - Stewardess with scarf on -023D - 01609D00 - 015F8350 - Enemy Head (Leslie) -023E - 0160AD30 - 015F9380 - Laser beam -023F - 0160ADF0 - 015F9440 - Skedar Shuttle -0240 - 0160E380 - 015FC9D0 - Mini Skedar -0241 - 01612BE0 - 01601230 - Villa Door with wooden frame -0242 - 016142D0 - 01602920 - NSA Lackey -0243 - 01617EA0 - 016064F0 - Enemy Head (Matt) -0244 - 01618E30 - 01607480 - Presidential Bodyguard -0245 - 0161CA50 - 0160B0A0 - Enemy Head (Peer) -0246 - 0161D6E0 - 0160BD30 - Negotiator -0247 - 01621260 - 0160F8B0 - Enemy Head (Eileen) -0248 - 016222E0 - 01610930 - Skedar Ruins Royal Chamber Stone block -0249 - 01622B50 - 016111A0 - Skedar Ruins Royal Chamber Stone block -024A - 016233D0 - 01611A20 - Skedar statue relic piece -024B - 01623590 - 01611BE0 - Skedar statue relic piece -024C - 01623740 - 01611D90 - Skedar statue relic piece -024D - 01623900 - 01611F50 - Skedar statue relic piece -024E - 01623B10 - 01612160 - Skedar statue relic piece -024F - 01623D20 - 01612370 - Skedar Ruins Floor piece -0250 - 01623E00 - 01612450 - Skedar Ruins Floor piece -0251 - 01623EE0 - 01612530 - Skedar Ruins Floor piece -0252 - 01623FC0 - 01612610 - Skedar Ruins Floor piece -0253 - 016240B0 - 01612700 - Skedar Ruins Floor piece -0254 - 016241A0 - 016127F0 - Skedar Ruins Floor piece -0255 - 01624280 - 016128D0 - Skedar Ruins Floor piece -0256 - 01624360 - 016129B0 - Skedar Ruins Floor piece -0257 - 01624440 - 01612A90 - Skedar Ruins Floor piece -0258 - 01624530 - 01612B80 - Skedar Ruins Floor piece -0259 - 01624620 - 01612C70 - Menu Image Projector -025A - 01625130 - 01613780 - Skedar Ruins Pillar 1 -025B - 01625A00 - 01614050 - Skedar Ruins Pillar 2 -025C - 016262F0 - 01614940 - Skedar Ruins Pillar 3 -025D - 01626C30 - 01615280 - Skedar Ruins Floor piece -025E - 01626DB0 - 01615400 - Skedar Ruins Wall piece -025F - 01626F20 - 01615570 - Skedar Ruins Floor piece -0260 - 01627080 - 016156D0 - Skedar Ruins Wall piece -0261 - 01627200 - 01615850 - G5 Building Guard -0262 - 0162B230 - 01619880 - Enemy Head (Andy) -0263 - 0162C170 - 0161A7C0 - Pelagic II Guard -0264 - 0162FFD0 - 0161E620 - G5 Building Swat Guard -0265 - 01634230 - 01622880 - Air Base White Guard -0266 - 01637ED0 - 01626520 - Maian -0267 - 0163ADE0 - 01629430 - Enemy Head (Ben) -0268 - 0163BD40 - 0162A390 - Enemy Head (Steve) -0269 - 0163CCA0 - 0162B2F0 - Area 51 Metal barrel -026A - 0163CEB0 - 0162B500 - Grid Pane of glass used as floor -026B - 0163CFD0 - 0162B620 - Air Base Escalator step -026C - 0163D100 - 0162B750 - Grid lift -026D - 0163D450 - 0162BAA0 - Skedar Ruins Rubble (Wall) -026E - 0163D7F0 - 0162BE40 - Skedar Ruins Rubble (Pillar) -026F - 0163D990 - 0162BFE0 - Skedar Ruins Rubble (Block) -0270 - 0163DB20 - 0162C170 - Skedar Ruins Rubble (Small pillar) -0271 - 0163DCC0 - 0162C310 - Arecep01M -0272 - 0163E6D0 - 0162CD20 - Arecep02M -0273 - 0163F9C0 - 0162E010 - Arecep03M -0274 - 01640D00 - 0162F350 - Arecep04M -0275 - 01642390 - 016309E0 - Arecep05M -0276 - 01642F30 - 01631580 - Arecep06M -0277 - 01644750 - 01632DA0 - Arlguard1M -0278 - 016458B0 - 01633F00 - Arltech01M -0279 - 01646DC0 - 01635410 - Arltech02M -027A - 01648450 - 01636AA0 - Arltech03M -027B - 016495B0 - 01637C00 - Arltech04M -027C - 0164A150 - 016387A0 - Arltech05M -027D - 0164AFF0 - 01639640 - Arltech06M -027E - 0164BB90 - 0163A1E0 - Ascie2aM -027F - 0164D440 - 0163BA90 - Ascie2bM -0280 - 0164E510 - 0163CB60 - Ascie2cM -0281 - 0164F980 - 0163DFD0 - Ascie2dM -0282 - 01651010 - 0163F660 - Ascie2eM -0283 - 01652520 - 01640B70 - Ascie2fM -0284 - 01653F60 - 016425B0 - Ascie2gM -0285 - 01655250 - 016438A0 - Ascie3aM -0286 - 01656280 - 016448D0 - Ascie3bM -0287 - 01657790 - 01645DE0 - Ascie3cM -0288 - 01658D80 - 016473D0 - Ascie3dM -0289 - 0165A850 - 01648EA0 - Ascie3eM -028A - 0165C410 - 0164AA60 - Ascie3gM -028B - 0165E1F0 - 0164C840 - Ascien10aM -028C - 0165F8D0 - 0164DF20 - Ascien2_aM -028D - 01660770 - 0164EDC0 - Ascien3_aM -028E - 016616B0 - 0164FD00 - Ascien4_aM -028F - 01662810 - 01650E60 - Ascien5_aM -0290 - 016645F0 - 01652C40 - Ascien6_aM -0291 - 01665F90 - 016545E0 - Ascien7_aM -0292 - 01667400 - 01655A50 - Ascien9_aM -0293 - 016682A0 - 016568F0 - AvilgrimM -0294 - 0166D890 - 0165BEE0 - Awepgd01M -0295 - 0166EAE0 - 0165D130 - Awepgd02M -0296 - 0166F8A0 - 0165DEF0 - Awepgd03M -0297 - 01670740 - 0165ED90 - Awepsc01M -0298 - 016710C0 - 0165F710 - Awepsc02M -0299 - 01671BC0 - 01660210 - Awepsc03M -029A - 016725D0 - 01660C20 - Aa51elv01M -029B - 01675030 - 01663680 - Aa51elv02M -029C - 01676D70 - 016653C0 - Aa51elv03M -029D - 01679340 - 01667990 - Aa51grd01M -029E - 01679CC0 - 01668310 - Aa51grd02M -029F - 0167A4B0 - 01668B00 - Aa51grd03M -02A0 - 0167B4E0 - 01669B30 - Aa51grd04M -02A1 - 0167C420 - 0166AA70 - Aa51grd05M -02A2 - 0167D2C0 - 0166B910 - Aa51grd06M -02A3 - 0167E600 - 0166CC50 - Aa51grd07M -02A4 - 0167F630 - 0166DC80 - Aa51grd08M -02A5 - 01680570 - 0166EBC0 - Aa51grd09M -02A6 - 01681110 - 0166F760 - Aa51grd10M -02A7 - 01681E30 - 01670480 - Aa51jo1M -02A8 - 01683080 - 016716D0 - Aa51jo2M -02A9 - 01684E60 - 016734B0 - Aa51jo3M -02AA - 016862D0 - 01674920 - Aa51jo4M -02AB - 01687740 - 01675D90 - Aa51jo5M -02AC - 016885E0 - 01676C30 - Aa51jo6M -02AD - 0168A990 - 01678FE0 - Aa51jon01M -02AE - 0168CEC0 - 0167B510 - Aa51jon02M -02AF - 0168E770 - 0167CDC0 - Aa51jon03M -02B0 - 01690860 - 0167EEB0 - Aa51jon04M -02B1 - 016924C0 - 01680B10 - Aa51jon05M -02B2 - 01695710 - 01683D60 - Aa51jon06M -02B3 - 01698260 - 016868B0 - Aa51jon07M -02B4 - 016994B0 - 01687B00 - Aa51jon08M -02B5 - 0169A580 - 01688BD0 - Aa51jon09M -02B6 - 0169BC60 - 0168A2B0 - Aa51jon10M -02B7 - 0169CA20 - 0168B070 - Aa51jon11M -02B8 - 0169DD10 - 0168C360 - Aa51jon12M -02B9 - 0169EF60 - 0168D5B0 - Aa51jon14M -02BA - 016A0ED0 - 0168F520 - Aa51jon15M -02BB - 016A39D0 - 01692020 - Aa51sci1M -02BC - 016A5410 - 01693A60 - Aaf1jo01M -02BD - 016A7B60 - 016961B0 - Aaf1jo02M -02BE - 016AA5C0 - 01698C10 - Aaf1jo03M -02BF - 016AC6B0 - 0169AD00 - Aaf1pr01M -02C0 - 016AE530 - 0169CB80 - Aaf1pr02M -02C1 - 016AF470 - 0169DAC0 - Aaf1pr03M -02C2 - 016B1030 - 0169F680 - Aaf1pr04M -02C3 - 016B1DF0 - 016A0440 - Aaf1pr05M -02C4 - 016B3260 - 016A18B0 - Aaf1pr06M -02C5 - 016B46D0 - 016A2D20 - Aaf1pr07M -02C6 - 016B57A0 - 016A3DF0 - Aaf1pr08M -02C7 - 016B9B50 - 016A81A0 - Aaf1pr09M -02C8 - 016BDA20 - 016AC070 - Aaf1pr10M -02C9 - 016BEF30 - 016AD580 - Aaf1tr01M -02CA - 016C1020 - 016AF670 - Aaf1tr02M -02CB - 016C28D0 - 016B0F20 - Aaf1tr03M -02CC - 016C46B0 - 016B2D00 - Aairbgd01M -02CD - 016C4F90 - 016B35E0 - Aairbgd02M -02CE - 016C5C10 - 016B4260 - Aairbgd03M -02CF - 016C72F0 - 016B5940 - Aairbgd04M -02D0 - 016C8C90 - 016B72E0 - Aairbgd05M -02D1 - 016C9D60 - 016B83B0 - Aairbgd06M -02D2 - 016CAC00 - 016B9250 - Aairbgd07M -02D3 - 016CBAA0 - 016BA0F0 - Aairbgd08M -02D4 - 016CCAD0 - 016BB120 - Aairbgd09M -02D5 - 016CD2C0 - 016BB910 - Aairbgd10M -02D6 - 016CDF40 - 016BC590 - Aairbgd11M -02D7 - 016CEF70 - 016BD5C0 - Aairbgd12M -02D8 - 016D0260 - 016BE8B0 - Aairbgd13M -02D9 - 016D16D0 - 016BFD20 - Aairbgd14M -02DA - 016D2F80 - 016C15D0 - Aairbgd15M -02DB - 016D42C0 - 016C2910 - Aairbgd16M -02DC - 016D5200 - 016C3850 - Aairstw01M -02DD - 016D6A20 - 016C5070 - Aairstw02M -02DE - 016D76A0 - 016C5CF0 - Aairstw03M -02DF - 016D8540 - 016C6B90 - Aassael01M -02E0 - 016DB830 - 016C9E80 - Aassael02M -02E1 - 016DDFD0 - 016CC620 - Aassael03M -02E2 - 016DF130 - 016CD780 - Aassael04M -02E3 - 016E1130 - 016CF780 - Aassael05M -02E4 - 016E3B90 - 016D21E0 - Aassael06M -02E5 - 016E6F60 - 016D55B0 - Absewrk01M -02E6 - 016E93F0 - 016D7A40 - Absewrk02M -02E7 - 016EA420 - 016D8A70 - Absewrk03M -02E8 - 016EBAB0 - 016DA100 - Absewrk04M -02E9 - 016ED0A0 - 016DB6F0 - Absewrk05M -02EA - 016EEB70 - 016DD1C0 - Acetael01M -02EB - 016F1DC0 - 016E0410 - Achdroid1M -02EC - 016F32D0 - 016E1920 - Achdroid2M -02ED - 016F4610 - 016E2C60 - Acsec01M -02EE - 016F5A80 - 016E40D0 - Acsec02M -02EF - 016F67A0 - 016E4DF0 - Acsec03M -02F0 - 016F7560 - 016E5BB0 - Acstan1M -02F1 - 016F9780 - 016E7DD0 - Acstan2M -02F2 - 016FBC10 - 016EA260 - Adevr01M -02F3 - 016FCF00 - 016EB550 - Adevr02M -02F4 - 016FE8A0 - 016ECEF0 - Adevr03M -02F5 - 016FFDB0 - 016EE400 - Adevr04M -02F6 - 01701AF0 - 016F0140 - Adevr05M -02F7 - 01703000 - 016F1650 - Adevr06M -02F8 - 01704BC0 - 016F3210 - Adevr07M -02F9 - 01706560 - 016F4BB0 - Adevr08M -02FA - 01708030 - 016F6680 - Adevr09M -02FB - 01709710 - 016F7D60 - Adevr10M -02FC - 0170A960 - 016F8FB0 - Adevr11M -02FD - 0170B460 - 016F9AB0 - Adevr12M -02FE - 0170D680 - 016FBCD0 - Aexec01M -02FF - 0170E7E0 - 016FCE30 - Aexec02M -0300 - 0170F8B0 - 016FDF00 - Aexec04M -0301 - 01710B00 - 016FF150 - Aexec05M -0302 - 017119A0 - 016FFFF0 - Aexec06M -0303 - 01712B00 - 01701150 - Aexec07M -0304 - 01714840 - 01702E90 - Aexec08M -0305 - 01715B30 - 01704180 - Aexec09M -0306 - 01716E20 - 01705470 - Aexec10M -0307 - 0171B4D0 - 01709B20 - Aexec11M -0308 - 017200B0 - 0170E700 - Aexec12M -0309 - 017218D0 - 0170FF20 - Aexec13M -030A - 01722D40 - 01711390 - Aexec14M -030B - 01724080 - 017126D0 - Ahelic01M -030C - 01725B50 - 017141A0 - Ahelic02M -030D - 01727890 - 01715EE0 - Ahelic03M -030E - 01728E80 - 017174D0 - Ahologd01M -030F - 0172A170 - 017187C0 - AholohopkM -0310 - 0172B4B0 - 01719B00 - Ainvcar01M -0311 - 0172CE50 - 0171B4A0 - Ainvcar02M -0312 - 0172E920 - 0171CF70 - Ainvcar03M -0313 - 017301D0 - 0171E820 - Ainvcar04M -0314 - 01731CA0 - 017202F0 - Ainvcar05M -0315 - 01733D90 - 017223E0 - Ainvcar06M -0316 - 01735F20 - 01724570 - Ainvcar07M -0317 - 01738C40 - 01727290 - Ainvcar08M -0318 - 0173A800 - 01728E50 - Ainvcar09M -0319 - 0173CB10 - 0172B160 - Ainvcar10M -031A - 0173E6D0 - 0172CD20 - Ainvcar11M -031B - 01740550 - 0172EBA0 - Ainvcar12M -031C - 01742550 - 01730BA0 - AinvfarrM -031D - 01743840 - 01731E90 - AinvfemaM -031E - 01744030 - 01732680 - AinvfostM -031F - 017458E0 - 01733F30 - AinvgrimM -0320 - 01749060 - 017376B0 - AinvhopkM -0321 - 0174ADA0 - 017393F0 - AinvmaleM -0322 - 0174B8A0 - 01739EF0 - Ajoexec01M -0323 - 0174DDD0 - 0173C420 - Ajoexec02M -0324 - 0174E8D0 - 0173CF20 - Ajosci01M -0325 - 0174FC10 - 0173E260 - Ajosci02M -0326 - 01750F00 - 0173F550 - Ajosci03M -0327 - 01751FD0 - 01740620 - Alabacc1M -0328 - 01753F40 - 01742590 - Alabacc2M -0329 - 01756820 - 01744E70 - Alabacc3M -032A - 01758CB0 - 01747300 - Alabacc4M -032B - 0175AC20 - 01749270 - Alabacc5M -032C - 0175C880 - 0174AED0 - Alabacc6M -032D - 0175E4E0 - 0174CB30 - Alabtech1M -032E - 0175F080 - 0174D6D0 - Alabtech2M -032F - 01760AC0 - 0174F110 - Alabtech3M -0330 - 017621A0 - 017507F0 - Alabtech5M -0331 - 01763BE0 - 01752230 - Alabtech6M -0332 - 01765400 - 01753A50 - Alabtech7M -0333 - 017671E0 - 01755830 - Alabtech8M -0334 - 01768B80 - 017571D0 - Alabtech9M -0335 - 01769DD0 - 01758420 - Aoffwrk01M -0336 - 0176B4B0 - 01759B00 - Aoffwrk02M -0337 - 0176CAA0 - 0175B0F0 - Aoffwrk03M -0338 - 0176F070 - 0175D6C0 - Aoffwrk04M -0339 - 01771160 - 0175F7B0 - President Clone -033A - 017743F0 - 01762A40 - Enemy Head (Jonathan) -033B - 01775A10 - 01764060 - Maian head with maian hat -033C - 01776F80 - 017655D0 - Joanna Stewardess Suit -033D - 0177B970 - 01769FC0 - Air Base Intro Cable Car -033E - 0177CE90 - 0176B4E0 - Maian Saucer -033F - 0177DFE0 - 0176C630 - Air Base Stewardesses Bag -0340 - 0177FB20 - 0176E170 - Air Base Small hanger lift -0341 - 01780260 - 0176E8B0 - Air Base Diagonal lift -0342 - 01780690 - 0176ECE0 - Air Base Safe Door -0343 - 017808A0 - 0176EEF0 - Air Force One Pilots seat -0344 - 01780B00 - 0176F150 - Air Force One Passenger seat -0345 - 01780F10 - 0176F560 - Enemy Head (Shaun) -0346 - 01781E20 - 01770470 - NightVision Goggles -0347 - 01781FF0 - 01770640 - Shield -0348 - 01782400 - 01770A50 - Falcon 2 item -0349 - 01782820 - 01770E70 - Magsec 4 item -034A - 01782B80 - 017711D0 - Mauler item -034B - 01783010 - 01771660 - DY357 Magnum item -034C - 017833A0 - 017719F0 - DY357-LX item -034D - 017836E0 - 01771D30 - Phoenix item -034E - 01783A00 - 01772050 - Falcon 2 Silencer item -034F - 01783E70 - 017724C0 - Falcon 2 Scope item -0350 - 01784370 - 017729C0 - CMP150 item -0351 - 017847F0 - 01772E40 - AR34 item -0352 - 01784F30 - 01773580 - Dragon item -0353 - 01785390 - 017739E0 - SuperDragon item -0354 - 017858C0 - 01773F10 - K7 Avenger item -0355 - 01785DA0 - 017743F0 - Cyclone item -0356 - 017862D0 - 01774920 - Callisto NTG item -0357 - 01786570 - 01774BC0 - RCP-120 item -0358 - 01786980 - 01774FD0 - Laptop Gun item -0359 - 01786DA0 - 017753F0 - Shotgun item -035A - 017870B0 - 01775700 - Reaper item -035B - 01787690 - 01775CE0 - Rocket Launcher item -035C - 01787A30 - 01776080 - Devastator item -035D - 01787E40 - 01776490 - Slayer item -035E - 017882B0 - 01776900 - Farsight XR-20 item -035F - 017886E0 - 01776D30 - Sniper Rifle item -0360 - 01788B20 - 01777170 - Crossbow item -0361 - 01788F80 - 017775D0 - Psychosis / Tranquilizer item -0362 - 017893A0 - 017779F0 - Combat Knife item -0363 - 01789B30 - 01778180 - N-Bomb item -0364 - 01789DC0 - 01778410 - BETA Flashbang (Grenade from GoldenEye) -0365 - 0178A130 - 01778780 - Grenade item -0366 - 0178A3D0 - 01778A20 - Timed Mine -0367 - 0178A770 - 01778DC0 - Proximity Mine -0368 - 0178AB00 - 01779150 - Remote Mine -0369 - 0178AE80 - 017794D0 - ECM Mine item -036A - 0178BDB0 - 0177A400 - PP9i (PP7) item -036B - 0178C000 - 0177A650 - CC13 (DD44) Dostovei. item -036C - 0178C290 - 0177A8E0 - KLO1313 (Klobb) item -036D - 0178C630 - 0177AC80 - KF7 Special (KF7 Soviet) item -036E - 0178CA20 - 0177B070 - ZZT (9mm) (ZMG (9mm)) item -036F - 0178CD00 - 0177B350 - DMC (D5K) Deutsche item -0370 - 0178D0A0 - 0177B6F0 - AR53 (AR33) Assualt Rifle item -0371 - 0178D480 - 0177BAD0 - RC-P45 (RC-P90) item -0372 - 0178D8F0 - 0177BF40 - Rocket Launcher Rocket -0373 - 0178DE60 - 0177C4B0 - Slayer Rocket -0374 - 0178E010 - 0177C660 - Bolt -0375 - 0178E280 - 0177C8D0 - Devastator Grenade -0376 - 0178E510 - 0177CB60 - Dragon Grenade -0377 - 0178E7A0 - 0177CDF0 - Falcon 2 Silencer Scope player -0378 - 01790300 - 0177E950 - Magsec 4 player -0379 - 017915C0 - 0177FC10 - Mauler player -037A - 01792950 - 01780FA0 - DY357 Magnum player -037B - 01794330 - 01782980 - DY357-LX player -037C - 01795D00 - 01784350 - Phoenix player -037D - 01796CA0 - 017852F0 - CMP150 player -037E - 01797D70 - 017863C0 - AR34 player -037F - 01799070 - 017876C0 - Dragon player -0380 - 0179A610 - 01788C60 - SuperDragon player -0381 - 0179BEE0 - 0178A530 - K7 Avenger player -0382 - 0179D750 - 0178BDA0 - Cyclone player -0383 - 0179EC90 - 0178D2E0 - Callisto NTG player -0384 - 0179FC70 - 0178E2C0 - RC-P120 player -0385 - 017A12C0 - 0178F910 - Laptop Gun player -0386 - 017A2B20 - 01791170 - Shotgun player -0387 - 017A4380 - 017929D0 - Reaper player -0388 - 017A6250 - 017948A0 - Rocket Launcher player -0389 - 017A8480 - 01796AD0 - Devastator player -038A - 017A9C70 - 017982C0 - Slayer player -038B - 017AB120 - 01799770 - Farsight XR-20 player -038C - 017ACCB0 - 0179B300 - Sniper Rifle player -038D - 017AE4D0 - 0179CB20 - Crossbow player -038E - 017AF960 - 0179DFB0 - Phychosis / Tranquilizer player -038F - 017B0CC0 - 0179F310 - Combat Knife player -0390 - 017B1870 - 0179FEC0 - Grenade player -0391 - 017B27F0 - 017A0E40 - Timed Mine player -0392 - 017B2E90 - 017A14E0 - Proximity Mine player -0393 - 017B3530 - 017A1B80 - Remote Mine and Detonator player -0394 - 017B3EF0 - 017A2540 - PP9i (PP7) player -0395 - 017B4AD0 - 017A3120 - CC13 (DD44) Dostovei. player -0396 - 017B57C0 - 017A3E10 - KLO1313 (Klobb) player -0397 - 017B66D0 - 017A4D20 - KF7 Special (KF7 Soviet) player -0398 - 017B6FF0 - 017A5640 - ZZT (9mm) (ZMG (9mm)) player -0399 - 017B7910 - 017A5F60 - DMC (D5K) Deutsche player -039A - 017B84D0 - 017A6B20 - AR53 (AR33) Assualt Rifle player -039B - 017B8E20 - 017A7470 - RC-P45 (RC-P90) player -039C - 017B9990 - 017A7FE0 - Falcon 2 Silencer Scope reloader -039D - 017BA890 - 017A8EE0 - Reaper reloader -039E - 017BBBE0 - 017AA230 - Area 51 Infiltration Brown dronegun -039F - 017BC170 - 017AA7C0 - Pelagic II Door with window -03A0 - 017BC9B0 - 017AB000 - Am1_l1_aM -03A1 - 017BF8F0 - 017ADF40 - Am1_l1_bM -03A2 - 017C1C00 - 017B0250 - Am1_l1_cM -03A3 - 017C35A0 - 017B1BF0 - Am1_l1_dM -03A4 - 017C5B70 - 017B41C0 - Am1_l2_aM -03A5 - 017C92F0 - 017B7940 - Am1_l2_bM -03A6 - 017CB0D0 - 017B9720 - Am1_l2_cM -03A7 - 017CDEE0 - 017BC530 - Am1_l2_dM -03A8 - 017D1130 - 017BF780 - Am1_l3_aM -03A9 - 017D38D0 - 017C1F20 - Am1_l3_bM -03AA - 017D6420 - 017C4A70 - Am1_l3_cM -03AB - 017D8390 - 017C69E0 - Am1_l3_dM -03AC - 017DB010 - 017C9660 - Am2_l1_aM -03AD - 017DE0D0 - 017CC720 - Am2_l1_bM -03AE - 017DFEB0 - 017CE500 - Am2_l1_cM -03AF - 017E14A0 - 017CFAF0 - Am2_l1_dM -03B0 - 017E36C0 - 017D1D10 - Am3_l1_aM -03B1 - 017E61C0 - 017D4810 - Am3_l1_bM -03B2 - 017E82B0 - 017D6900 - Am3_l1_cM -03B3 - 017EBAC0 - 017DA110 - Am3_l1_dM -03B4 - 017EE180 - 017DC7D0 - Am3_l2_aM -03B5 - 017F00F0 - 017DE740 - Am3_l2_bM -03B6 - 017F2D70 - 017E13C0 - Am3_l2_cM -03B7 - 017F6400 - 017E4A50 - Am3_l2_dM -03B8 - 017F87B0 - 017E6E00 - Am4_l1_aM -03B9 - 017FB210 - 017E9860 - Am4_l1_bM -03BA - 017FE150 - 017EC7A0 - Am4_l1_cM -03BB - 01800680 - 017EECD0 - Am4_l1_dM -03BC - 01803AF0 - 017F2140 - Am4_l2_aM -03BD - 018078D0 - 017F5F20 - Am4_l2_bM -03BE - 0180A5F0 - 017F8C40 - Am4_l2_cM -03BF - 0180DC80 - 017FC2D0 - Am4_l2_dM -03C0 - 01810250 - 017FE8A0 - Am4_l3_aM -03C1 - 01811EB0 - 01800500 - Am4_l3_bM -03C2 - 018151A0 - 018037F0 - Am4_l3_cM -03C3 - 01818790 - 01806DE0 - Am4_l3_dM -03C4 - 0181A880 - 01808ED0 - Am5_l1_aM -03C5 - 0181DC50 - 0180C2A0 - Am5_l1_bM -03C6 - 0181FE70 - 0180E4C0 - Am5_l1_cM -03C7 - 01822180 - 018107D0 - Am5_l1_dM -03C8 - 01825810 - 01813E60 - Am5_l2_aM -03C9 - 018275F0 - 01815C40 - Am5_l2_bM -03CA - 01829780 - 01817DD0 - Am5_l2_cM -03CB - 0182BB30 - 0181A180 - Am5_l2_dM -03CC - 0182D570 - 0181BBC0 - Am5_l3_aM -03CD - 0182E4B0 - 0181CB00 - Am5_l3_bM -03CE - 0182F7F0 - 0181DE40 - Am5_l3_cM -03CF - 01830ED0 - 0181F520 - Am5_l3_dM -03D0 - 018331E0 - 01821830 - Am6_l1_aM -03D1 - 01835FF0 - 01824640 - Am6_l1_bM -03D2 - 018378A0 - 01825EF0 - Am6_l1_cM -03D3 - 0183C260 - 0182A8B0 - Am6_l1_dM -03D4 - 0183E830 - 0182CE80 - Am6_l2_aM -03D5 - 01840490 - 0182EAE0 - Am6_l2_bM -03D6 - 018432A0 - 018318F0 - Am6_l2_cM -03D7 - 01846710 - 01834D60 - Am6_l2_dM -03D8 - 01847B80 - 018361D0 - Am7_l1_aM -03D9 - 01849960 - 01837FB0 - Am7_l1_bM -03DA - 0184B960 - 01839FB0 - Am7_l1_cM -03DB - 0184E0B0 - 0183C700 - Am7_l1_dM -03DC - 01850020 - 0183E670 - Am8_l1_aM -03DD - 018536B0 - 01841D00 - Am8_l1_bM -03DE - 01854ED0 - 01843520 - Am8_l1_cM -03DF - 01856D50 - 018453A0 - Am8_l1_dM -03E0 - 01859320 - 01847970 - Am9_l1_aM -03E1 - 0185AEE0 - 01849530 - Am9_l1_bM -03E2 - 0185EA00 - 0184D050 - Am9_l1_cM -03E3 - 01861680 - 0184FCD0 - Am9_l1_dM -03E4 - 01864740 - 01852D90 - Ap1_01_joM -03E5 - 01865A80 - 018540D0 - Ap1_02_caM -03E6 - 0186BF60 - 0185A5B0 - Ap1_03_joM -03E7 - 0186D780 - 0185BDD0 - Ap1_04_caM -03E8 - 01875730 - 01863D80 - Ap1_05_joM -03E9 - 01876DC0 - 01865410 - Ap1_06_caM -03EA - 0187BBC0 - 0186A210 - Ap1_07_joM -03EB - 0187D250 - 0186B8A0 - Ap1_08_caM -03EC - 018829D0 - 01871020 - Ap2_01_joM -03ED - 018833E0 - 01871A30 - Ap2_02_joM -03EE - 01884280 - 018728D0 - Ap2_03_drM -03EF - 01886100 - 01874750 - Ap2_04_joM -03F0 - 01886FA0 - 018755F0 - Ap2_05_joM -03F1 - 01888CE0 - 01877330 - Ap2_06_drM -03F2 - 0188DD50 - 0187C3A0 - Ap2_07_drM -03F3 - 018916F0 - 0187FD40 - Ap3_01_gdM -03F4 - 01892C00 - 01881250 - Ap3_02_joM -03F5 - 01893880 - 01881ED0 - Ap3_03_joM -03F6 - 01894380 - 018829D0 - Ap4_01_dvM -03F7 - 018955D0 - 01883C20 - Ap4_02_joM -03F8 - 018970A0 - 018856F0 - Ap4_03_dvM -03F9 - 01899B00 - 01888150 - Ap4_04_joM -03FA - 0189BA70 - 0188A0C0 - Ap4_05_dvM -03FB - 0189EEE0 - 0188D530 - Ap4_06_joM -03FC - 0189FFB0 - 0188E600 - Ap4_07_blM -03FD - 018A2C30 - 01891280 - Ap4_08_dvM -03FE - 018A38B0 - 01891F00 - Ap4_09_dvM -03FF - 018A6B00 - 01895150 - Ap5_01_joM -0400 - 018B0AB0 - 0189F100 - Ap5_02_joM -0401 - 018B98B0 - 018A7F00 - Ap5_03_joM -0402 - 018BFED0 - 018AE520 - Ap6_01_joM -0403 - 018C0FA0 - 018AF5F0 - Ap6_02_caM -0404 - 018C7430 - 018B5A80 - Ap6_03_joM -0405 - 018C9520 - 018B7B70 - Ap6_04_caM -0406 - 018D8DC0 - 018C7410 - Ap6_05_joM -0407 - 018DCBA0 - 018CB1F0 - Ap6_06_caM -0408 - 018E9FB0 - 018D8600 - Ap7_01_caM -0409 - 018F5550 - 018E3BA0 - Ap7_02_joM -040A - 018F7860 - 018E5EB0 - Ap7_03_caM -040B - 018F9B70 - 018E81C0 - Ap7_04_joM -040C - 018FAC40 - 018E9290 - Ap8_01_dvM -040D - 018FFC70 - 018EE2C0 - Ap8_02_blM -040E - 01908D80 - 018F73D0 - Ap8_03_dvM -040F - 0190C590 - 018FABE0 - Ap8_04_blM -0410 - 0190F210 - 018FD860 - Ap8_06_blM -0411 - 019128A0 - 01900EF0 - Ap8_07_trM -0412 - 0191DA90 - 0190C0E0 - Ap8_08_dvM -0413 - 019224F0 - 01910B40 - Ap8_09_trM -0414 - 0192A8E0 - 01918F30 - Ap8_10_blM -0415 - 01933FC0 - 01922610 - Ap9_01_joM -0416 - 0193A230 - 01928880 - Ap9_02_caM -0417 - 019497D0 - 01937E20 - Ap9_03_joM -0418 - 0194B5B0 - 01939C00 - Ap10_01_caM -0419 - 0194FAE0 - 0193E130 - Ap10_02_caM -041A - 019528F0 - 01940F40 - Ap10_03_caM -041B - 01956B60 - 019451B0 - Ap10_04_caM -041C - 0195CFF0 - 0194B640 - Ap10_05_joM -041D - 0195E990 - 0194CFE0 - Ap10_06_caM -041E - 019661F0 - 01954840 - Ap10_07_joM -041F - 01966E70 - 019554C0 - Ap10_08_caM -0420 - 01969DB0 - 01958400 - Ap10_09_joM -0421 - 0196F8D0 - 0195DF20 - Ap11_01_jnM -0422 - 01970C10 - 0195F260 - Ap11_02_joM -0423 - 019727D0 - 01960E20 - Ap11_03_jnM -0424 - 019730B0 - 01961700 - Ap11_04_joM -0425 - 019780E0 - 01966730 - Ap11_05_jnM -0426 - 01979CA0 - 019682F0 - Ap11_06_joM -0427 - 0197AE00 - 01969450 - Ap11_07_jnM -0428 - 0197ED60 - 0196D3B0 - Ap11_08_joM -0429 - 01982AA0 - 019710F0 - Ap12_01_jnM -042A - 0198A8D0 - 01978F20 - Ap12_02_joM -042B - 0198D330 - 0197B980 - Ap12_03_jnM -042C - 0198DFB0 - 0197C600 - Ap12_04_joM -042D - 0198FCF0 - 0197E340 - Ap12_05_jnM -042E - 01994B90 - 019831E0 - Ap12_06_joM -042F - 01997250 - 019858A0 - Ap12_07_jnM -0430 - 01997BD0 - 01986220 - Ap12_08_joM -0431 - 01998550 - 01986BA0 - Ap12_09_jnM -0432 - 01999D70 - 019883C0 - Ap12_10_joM -0433 - 0199D360 - 0198B9B0 - Ap13_01_joM -0434 - 0199EDA0 - 0198D3F0 - Ap13_02_suM -0435 - 019A4520 - 01992B70 - Ap13_03_joM -0436 - 019A7070 - 019956C0 - Ap13_04_suM -0437 - 019A8EF0 - 01997540 - Ap13_06_suM -0438 - 019AD640 - 0199BC90 - Ap14_03_suM -0439 - 019B2970 - 019A0FC0 - Ap14_04_joM -043A - 019B5030 - 019A3680 - Ap14_05_suM -043B - 019B6EB0 - 019A5500 - Ap14_07_joM -043C - 019B8D30 - 019A7380 - Ap15_01_elM -043D - 019BBD60 - 019AA3B0 - Ap15_02_elM -043E - 019C3970 - 019B1FC0 - Ap15_03_joM -043F - 019C5000 - 019B3650 - Ap15_04_jnM -0440 - 019C6160 - 019B47B0 - Ap15_05_elM -0441 - 019C7840 - 019B5E90 - Ap15_06_joM -0442 - 019C8030 - 019B6680 - Ap15_07_elM -0443 - 019CA9A0 - 019B8FF0 - Ap15_08_joM -0444 - 019CD4A0 - 019BBAF0 - Ap15_09_elM -0445 - 019CF100 - 019BD750 - Ap15_10_joM -0446 - 019D19E0 - 019C0030 - Ap15_11_elM -0447 - 019D5070 - 019C36C0 - Ap16_01_joM -0448 - 019DA880 - 019C8ED0 - Ap16_02_caM -0449 - 019E3460 - 019D1AB0 - Ap16_04_caM -044A - 019ECD60 - 019DB3B0 - Ap16_05_joM -044B - 019F2FD0 - 019E1620 - Ap16_06_caM -044C - 019F7160 - 019E57B0 - Ap17_01_trM -044D - 019F9690 - 019E7CE0 - Ap17_02_prM -044E - 019FF900 - 019EDF50 - Ap17_03_trM -044F - 01A03F20 - 019F2570 - Ap17_04_prM -0450 - 01A0F3D0 - 019FDA20 - Ap17_05_trM -0451 - 01A10EA0 - 019FF4F0 - Ap17_06_trM -0452 - 01A14F90 - 01A035E0 - Ap18_01_joM -0453 - 01A19420 - 01A07A70 - Ap18_02_elM -0454 - 01A1B640 - 01A09C90 - Ap18_03_elM -0455 - 01A1C050 - 01A0A6A0 - Ap18_04_joM -0456 - 01A1E930 - 01A0CF80 - Ap18_05_elM -0457 - 01A21D00 - 01A10350 - Ap19_01_caM -0458 - 01A236A0 - 01A11CF0 - Ap19_02_caM -0459 - 01A249E0 - 01A13030 - Ap19_03_joM -045A - 01A26950 - 01A14FA0 - Ap19_04_caM -045B - 01A28510 - 01A16B60 - Ap19_05_joM -045C - 01A2C820 - 01A1AE70 - Ap19_06_joM -045D - 01A31100 - 01A1F750 - Ap20_01_joM -045E - 01A323F0 - 01A20A40 - Ap20_02_prM -045F - 01A3B2E0 - 01A29930 - Ap20_03_joM -0460 - 01A3F550 - 01A2DBA0 - Ap20_04_prM -0461 - 01A48C70 - 01A372C0 - Ap20_05_joM -0462 - 01A4BF60 - 01A3A5B0 - Ap20_06_blM -0463 - 01A50920 - 01A3EF70 - Ap20_07_trM -0464 - 01A524E0 - 01A40B30 - Ap20_08_trM -0465 - 01A53D90 - 01A423E0 - Ap21_01_elM -0466 - 01A58140 - 01A46790 - Ap21_02_joM -0467 - 01A5AC90 - 01A492E0 - Ap21_03_elM -0468 - 01A5CD80 - 01A4B3D0 - Ap21_04_joM -0469 - 01A5DAA0 - 01A4C0F0 - Ap22_01_elM -046A - 01A5FFD0 - 01A4E620 - Ap22_02_joM -046B - 01A62E70 - 01A514C0 - Ap22_03_elM -046C - 01A660C0 - 01A54710 - Ap22_04_joM -046D - 01A68860 - 01A56EB0 - Ap23_01_joM -046E - 01A6BEF0 - 01A5A540 - Ap23_02_drM -046F - 01A6D1E0 - 01A5B830 - Ap23_03_joM -0470 - 01A6E7D0 - 01A5CE20 - Ap23_04_drM -0471 - 01A77EF0 - 01A66540 - Ap23_05_joM -0472 - 01A7B700 - 01A69D50 - Ap23_06_drM -0473 - 01A81AF0 - 01A70140 - Ap23_07_joM -0474 - 01A82500 - 01A70B50 - Ap23_08_drM -0475 - 01A97960 - 01A85FB0 - Ap24_01_caM -0476 - 01A9C320 - 01A8A970 - Ap24_02_joM -0477 - 01AA0280 - 01A8E8D0 - Ap24_03_caM -0478 - 01AA4150 - 01A927A0 - Ap24_04_joM -0479 - 01AA6FF0 - 01A95640 - Ap24_05_caM -047A - 01AB16F0 - 01A9FD40 - Ap24_06_caM -047B - 01AB24B0 - 01AA0B00 - Ap24_07_joM -047C - 01AB33F0 - 01AA1A40 - Ap24_08_joM -047D - 01AB6420 - 01AA4A70 - Ap25_01_joM -047E - 01AB9670 - 01AA7CC0 - Ap25_02_joM -047F - 01ABAD50 - 01AA93A0 - Ap26_01_joM -0480 - 01ABD280 - 01AAB8D0 - Ap26_02_dvM -0481 - 01AC0570 - 01AAEBC0 - Ap26_03_joM -0482 - 01AC4F30 - 01AB3580 - Ap26_04_dvM -0483 - 01AC9BB0 - 01AB8200 - Ap26_05_dvM -0484 - 01ACFA80 - 01ABE0D0 - Ap26_06_joM -0485 - 01AD0F90 - 01ABF5E0 - Ap26_07_dvM -0486 - 01AD4BA0 - 01AC31F0 - Ap26_08_dvM -0487 - 01AD6670 - 01AC4CC0 - Ap27_01_joM -0488 - 01ADAEB0 - 01AC9500 - Ap27_02_elM -0489 - 01ADB830 - 01AC9E80 - Ap27_03_elM -048A - 01ADD1D0 - 01ACB820 - Ap27_04_joM -048B - 01ADED90 - 01ACD3E0 - Ap27_05_joM -048C - 01ADFFE0 - 01ACE630 - Ap27_06_elM -048D - 01AE20D0 - 01AD0720 - Ap28_01_elM -048E - 01AE9620 - 01AD7C70 - Ap28_02_joM -048F - 01AED9D0 - 01ADC020 - Ap28_03_elM -0490 - 01AFC1B0 - 01AEA800 - Ap28_04_joM -0491 - 01B02860 - 01AF0EB0 - Ap28_05_elM -0492 - 01B05580 - 01AF3BD0 - Ap28_06_joM -0493 - 01B071E0 - 01AF5830 - Ap29_01_elM -0494 - 01B088C0 - 01AF6F10 - Ap29_02_joM -0495 - 01B0B1A0 - 01AF97F0 - Ap29_03_elM -0496 - 01B0D770 - 01AFBDC0 - Ap29_04_joM -0497 - 01B0F6E0 - 01AFDD30 - Ap29_05_joM -0498 - 01B11340 - 01AFF990 - Ap29_06_elM -0499 - 01B14F00 - 01B03550 - Ap29_07_joM -049A - 01B17390 - 01B059E0 - Ap29_08_elM -049B - 01B18BB0 - 01B07200 - Ap29_09_joM -049C - 01B19D10 - 01B08360 - Ap29_10_elM -049D - 01B1A990 - 01B08FE0 - Area 51 Alien Medpak -049E - 01B1B210 - 01B09860 - Joanna Dive Suit -049F - 01B1E570 - 01B0CBC0 - Joanna Dive Suit 2 -04A0 - 01B226C0 - 01B10D10 - Joanna Arctic Suit -04A1 - 01B25C30 - 01B14280 - Area 51 Lab Technician (Man) -04A2 - 01B291B0 - 01B17800 - Area 51 Lab Technician (Woman) -04A3 - 01B2DAB0 - 01B1C100 - dataDyne Sniper -04A4 - 01B325D0 - 01B20C20 - Air Force One Pilot -04A5 - 01B351E0 - 01B23830 - Carrington Institute Lab Technician (Man) -04A6 - 01B392A0 - 01B278F0 - Carrington Institute Lab Technician (Woman) -04A7 - 01B3DA10 - 01B2C060 - Enemy Head (Eileen) -04A8 - 01B3EF70 - 01B2D5C0 - Enemy Head (Scott) -04A9 - 01B3FE70 - 01B2E4C0 - Daniel Carrington White Tuxedo -04AA - 01B43090 - 01B316E0 - Jonathon -04AB - 01B45BE0 - 01B34230 - Carrington Institute Agent -04AC - 01B48910 - 01B36F60 - Enemy Head (Sanchez) -04AD - 01B49630 - 01B37C80 - Joanna Scuba Head -04AE - 01B4B1F0 - 01B39840 - Sniper Head -04AF - 01B4C7D0 - 01B3AE20 - Chicago Limo -04B0 - 01B4D510 - 01B3BB60 - Part of Perfect Dark logo -04B1 - 01B50970 - 01B3EFC0 - Area 51 Interceptor -04B2 - 01B517E0 - 01B3FE30 - Area 51 Parabola Dish -04B3 - 01B51B80 - 01B401D0 - BETA Area51 Radar Console -04B4 - 01B521C0 - 01B40810 - Area51 Locker door -04B5 - 01B52320 - 01B40970 - BETA G5 Generator -04B6 - 01B528A0 - 01B40EF0 - BETA G5 Dumpster -04B7 - 01B52B70 - 01B411C0 - AR34 reloader -04B8 - 01B53930 - 01B41F80 - K7 Avenger reloader -04B9 - 01B549A0 - 01B42FF0 - CMP150 reloader -04BA - 01B556B0 - 01B43D00 - Crossbow reloader -04BB - 01B56730 - 01B44D80 - Cyclone reloader -04BC - 01B576B0 - 01B45D00 - Phychosis / Tranquilizer reloader -04BD - 01B58320 - 01B46970 - DY357 Magnum reloader -04BE - 01B593F0 - 01B47A40 - DY357-LX reloader -04BF - 01B5A430 - 01B48A80 - Devastator reloader -04C0 - 01B5B7B0 - 01B49E00 - Dragon reloader -04C1 - 01B5C4B0 - 01B4AB00 - SuperDragon reloader -04C2 - 01B5D360 - 01B4B9B0 - Combat Knife reloader -04C3 - 01B5DD10 - 01B4C360 - Laser reloader -04C4 - 01B5E810 - 01B4CE60 - Magsec 4 reloader -04C5 - 01B5F7C0 - 01B4DE10 - Phoenix reloader -04C6 - 01B603E0 - 01B4EA30 - Callisto NTG reloader -04C7 - 01B61030 - 01B4F680 - Laptop Gun reloader -04C8 - 01B620C0 - 01B50710 - RC-P120 reloader -04C9 - 01B63070 - 01B516C0 - Rocket Launcher reloader -04CA - 01B644A0 - 01B52AF0 - Shotgun reloader -04CB - 01B65460 - 01B53AB0 - Mauler reloader -04CC - 01B66650 - 01B54CA0 - Slayer reloader -04CD - 01B673C0 - 01B55A10 - Sniper Rifle reloader -04CE - 01B683C0 - 01B56A10 - Farsight XR-20 reloader -04CF - 01B69390 - 01B579E0 - Cloaking Device -04D0 - 01B69B90 - 01B581E0 - Combat Boost Pills -04D1 - 01B6A800 - 01B58E50 - Air Base Baggage carrier -04D2 - 01B6A990 - 01B58FE0 - BETA Area 51 Mine sign -04D3 - 01B6ABB0 - 01B59200 - Area 51 Maian Containment Coffins -04D4 - 01B6AE90 - 01B594E0 - Investigation Radioactive isotope -04D5 - 01B6BF70 - 01B5A5C0 - Investigation Part of the radioactive isotope -04D6 - 01B6C230 - 01B5A880 - BETA Big round flat thing -04D7 - 01B6C3E0 - 01B5AA30 - Crash Site Interior of Maian UFO -04D8 - 01B6CFB0 - 01B5B600 - Villa Stool that Carrington sits on -04D9 - 01B6D410 - 01B5BA60 - Deep Sea Glass 1 -04DA - 01B6DE80 - 01B5C4D0 - Deep Sea Glass 2 (Add-on) -04DB - 01B6E8F0 - 01B5CF40 - Deep Sea Glass 3 (Add-on opposite) -04DC - 01B6F360 - 01B5D9B0 - "You go on ahead Jo, I'll secure the perimeter..." -04DD - 01B72F20 - 01B61570 - Apelgrd01M -04DE - 01B74080 - 01B626D0 - Ap29_11_joM -04DF - 01B74A90 - 01B630E0 - Laser -04E0 - 01B75CB0 - 01B64300 - Pelagic II Moon pool hanger door -04E1 - 01B75F20 - 01B64570 - Piece of pillar from Skedar Ruins -04E2 - 01B76100 - 01B64750 - Piece of Pillar from Skedar Ruins -04E3 - 01B76260 - 01B648B0 - Piece of pillar from Skedar Ruins -04E4 - 01B763E0 - 01B64A30 - Piece of pillar from Skedar Ruins -04E5 - 01B76580 - 01B64BD0 - Combat hands -04E6 - 01B77A90 - 01B660E0 - Horizon Scanner -04E7 - 01B78060 - 01B666B0 - Pelagic II Outro Submarine -04E8 - 01B79290 - 01B678E0 - Air Force One (The actual plane) -04E9 - 01B7C530 - 01B6AB80 - Attack Ship Engine part -04EA - 01B7C710 - 01B6AD60 - Am3l2carrM -04EB - 01B7EC40 - 01B6D290 - Aelvcet01M -04EC - 01B808A0 - 01B6EEF0 - Aelvcet02M -04ED - 01B83740 - 01B71D90 - Ajorep01M -04EE - 01B840C0 - 01B72710 - Ajorep02M -04EF - 01B849A0 - 01B72FF0 - Ajorep03M -04F0 - 01B85320 - 01B73970 - Ajorep04M -04F1 - 01B85E20 - 01B74470 - Deep Sea Green dronegun -04F2 - 01B86320 - 01B74970 - BETA Deep Sea Small door -04F3 - 01B875C0 - 01B75C10 - Deep Sea Switch node -04F4 - 01B89260 - 01B778B0 - BETA Deep Sea Door (Left) -04F5 - 01B8A500 - 01B78B50 - BETA Deep Sea Door (Right) -04F6 - 01B8B7A0 - 01B79DF0 - Attack Ship Computer from bridge -04F7 - 01B8E1D0 - 01B7C820 - Attack Ship Computer panel from bridge -04F8 - 01B8EDA0 - 01B7D3F0 - Ajorpld01M -04F9 - 01B8F680 - 01B7DCD0 - Ajorpld02M -04FA - 01B8FF60 - 01B7E5B0 - Ajorpld03M -04FB - 01B90840 - 01B7EE90 - Ajorpld04M -04FC - 01B91120 - 01B7F770 - N-Bomb -04FD - 01B92090 - 01B806E0 - N-Bomb reloader -04FE - 01B92900 - 01B80F50 - Grenade reloader -04FF - 01B93170 - 01B817C0 - Blue panel -0500 - 01B93970 - 01B81FC0 - CI Target from Firing Range -0501 - 01B93B70 - 01B821C0 - CI Secret door (Device Lab) -0502 - 01B93D20 - 01B82370 - CI Secret door (Carrington's Office) -0503 - 01B93EC0 - 01B82510 - dataDyne PC -0504 - 01B942A0 - 01B828F0 - dataDyne PC on stand -0505 - 01B947A0 - 01B82DF0 - BETA Keypad Lock -0506 - 01B97770 - 01B85DC0 - BETA Fingerprint Skanner -0507 - 01B9A4F0 - 01B88B40 - BETA Retina Lock -0508 - 01B9C020 - 01B8A670 - BETA Card Lock -0509 - 01B9D480 - 01B8BAD0 - Air Force One Button on stand -050A - 01B9D9C0 - 01B8C010 - PC from Villa or Carrington Institute -050B - 01B9DD30 - 01B8C380 - Skedar King -050C - 01BA3750 - 01B91DA0 - Elvis with America vest -050D - 01BA7A00 - 01B96050 - Enemy Head (Griffey) -050E - 01BA8A60 - 01B970B0 - Enemy Head (Shigeru Miyamoto) -050F - 01BA9C60 - 01B982B0 - Enemy Head (Keith) -0510 - 01BAAC80 - 01B992D0 - Enemy Head (Winner) -0511 - 01BAC010 - 01B9A660 - Area 51 Guard Mask -0512 - 01BACC00 - 01B9B250 - Laptop Sentry dronegun -0513 - 01BAD120 - 01B9B770 - G5 Building Special Big chair -0514 - 01BADB10 - 01B9C160 - G5 Building Special Small chair -0515 - 01BAE350 - 01B9C9A0 - Skedar Kings holy sceptre -0516 - 01BAEAE0 - 01B9D130 - Area 51 Lab Cloths -0517 - 01BAEEC0 - 01B9D510 - Atrjo01M -0518 - 01BB0020 - 01B9E670 - Atrgrim01M -0519 - 01BB2CA0 - 01BA12F0 - Atrgrim02M -051A - 01BB4FB0 - 01BA3600 - Atrcarr06M -051B - 01BB6860 - 01BA4EB0 - Atrcarr07M -051C - 01BB8420 - 01BA6A70 - Atrcarr08M -051D - 01BBA950 - 01BA8FA0 - Atrcarr01M -051E - 01BBCC60 - 01BAB2B0 - Atrcarr02M -051F - 01BBE340 - 01BAC990 - Atrcarr03M -0520 - 01BBFA20 - 01BAE070 - Atrcarr04M -0521 - 01BC1760 - 01BAFDB0 - Atrcarr05M -0522 - 01BC3320 - 01BB1970 - Atrcarr12M -0523 - 01BC4BD0 - 01BB3220 - Abnblde01M -0524 - 01BC6BD0 - 01BB5220 - Abncass01M -0525 - 01BC7EC0 - 01BB6510 - BETA Carrington Institute Door -0526 - 01BC8490 - 01BB6AE0 - G5 Building Special Chair -0527 - 01BC8ED0 - 01BB7520 - G5 Building Special Small chair -0528 - 01BC9780 - 01BB7DD0 - dataDyne Building Foyer glass -0529 - 01BC9870 - 01BB7EC0 - Joanna Wet Suit arms -052A - 01BCAB70 - 01BB91C0 - Trent Easton arms -052B - 01BCBEB0 - 01BBA500 - Bare arms -052C - 01BCD2B0 - 01BBB900 - Joanna Trench Suit arms -052D - 01BCE660 - 01BBCCB0 - dataDyne Sniper arms -052E - 01BCFA00 - 01BBE050 - President arms -052F - 01BD1120 - 01BBF770 - Red arms -0530 - 01BD2460 - 01BC0AB0 - Stewardess arms -0531 - 01BD3790 - 01BC1DE0 - Carrington arms -0532 - 01BD4AD0 - 01BC3120 - Mr. Blonde arms -0533 - 01BD5E30 - 01BC4480 - CIA arms -0534 - 01BD7170 - 01BC57C0 - Carrington Institute Lab Technician arms -0535 - 01BD84C0 - 01BC6B10 - FBI arms -0536 - 01BD9800 - 01BC7E50 - Joanna Arctic Suit arms -0537 - 01BDABF0 - 01BC9240 - Cassandra arms -0538 - 01BDBE20 - 01BCA470 - dataDyne Security arms -0539 - 01BDD160 - 01BCB7B0 - Pelagic II Guard arms -053A - 01BDE4F0 - 01BCCB40 - Stewardess Coat arms -053B - 01BDF830 - 01BCDE80 - dataDyne Lab Technician arms -053C - 01BE0B10 - 01BCF160 - BETA CI Cabinet -053D - 01BE2C40 - 01BD1290 - BETA CI Desk -053E - 01BE3B30 - 01BD2180 - BETA CI Desk 2 -053F - 01BE4F20 - 01BD3570 - BETA CI Leather Armchair -0540 - 01BE6070 - 01BD46C0 - BETA CI Leather Bed -0541 - 01BE6E10 - 01BD5460 - BETA CI Leather Sofa -0542 - 01BE7FB0 - 01BD6600 - BETA CI Table -0543 - 01BE8A30 - 01BD7080 - Villa Wooden table -0544 - 01BE8CF0 - 01BD7340 - Villa Chair -0545 - 01BE9000 - 01BD7650 - Villa Armchair -0546 - 01BEA820 - 01BD8E70 - Villa Sofa -0547 - 01BEAD20 - 01BD9370 - Villa Chair -0548 - 01BEB040 - 01BD9690 - BETA Villa Cabinet with lamp -0549 - 01BEC940 - 01BDAF90 - Villa Side Cabinet -054A - 01BECBC0 - 01BDB210 - Villa Carrington’s Bed -054B - 01BECFD0 - 01BDB620 - BETA Pelagic II Chair -054C - 01BEDDF0 - 01BDC440 - Attack Ship Skedar Console -054D - 01BF1690 - 01BDFCE0 - BETA Investigation Table -054E - 01BF2610 - 01BE0C60 - BETA Investigation Chair -054F - 01BF3B30 - 01BE2180 - Air Base Table -0550 - 01BF4CC0 - 01BE3310 - BETA Air Base Chair -0551 - 01BF5F10 - 01BE4560 - BETA White Box -0552 - 01BF7050 - 01BE56A0 - IR Scanner -0553 - 01BF8190 - 01BE67E0 - Elvis head with scuba mask -0554 - 01BF9CF0 - 01BE8340 - Enemy Head (Stevem) -0555 - 01BFADD0 - 01BE9420 - Area 51 Dronegun -0556 - 01BFB3F0 - 01BE9A40 - BETA Skedar Dronegun -0557 - 01BFB830 - 01BE9E80 - Carrington Institute dronegun -0558 - 01BFBFD0 - 01BEA620 - Villa Wooden table -0559 - 01BFCCA0 - 01BEB2F0 - Joanna Leather -055A - 01C001F0 - 01BEE840 - Joanna with Arctic Hat Head -055B - 01C017F0 - 01BEFE40 - President head -055C - 01C02A30 - 01BF1080 - Carrington Institute door -055D - 01C04940 - 01BF2F90 - BETA Air Base Door -055E - 01C07830 - 01BF5E80 - BETA Air Base Door 2 -055F - 01C097A0 - 01BF7DF0 - Chicago Wire fence -0560 - 01C09B80 - 01BF81D0 - Rareware Logo -0561 - 01C0CBB0 - 01BFB200 - Velvet Dark Head -0562 - 01C0E760 - 01BFCDB0 - Apelelv02M -0563 - 01C12280 - 01C008D0 - Keycard -0564 - 01C124E0 - 01C00B30 - BETA Body armour -0565 - 01C13970 - 01C01FC0 - Area 51 Infiltration Big door(Right) -0566 - 01C140A0 - 01C026F0 - Area 51 Infiltration Big door (Left) -0567 - 01C14530 - 01C02B80 - Air Force One Lamp -0568 - 01C15130 - 01C03780 - Air Force One Toilet -0569 - 01C161F0 - 01C04840 - Air Force One Big door -056A - 01C18630 - 01C06C80 - Air Force One Phone -056B - 01C190F0 - 01C07740 - BETA Air Force One Cargo door -056C - 01C1AF50 - 01C095A0 - G5 Building Alarm -056D - 01C1B300 - 01C09950 - G5 Building Laser switch -056E - 01C1B730 - 01C09D80 - Skedar Ruins Pillar 4 -056F - 01C1C020 - 01C0A670 - Core Hatch from Pelagic II power generator -0570 - 01C1C2B0 - 01C0A900 - LameE -0571 - 01C1CEC0 - 01C0B510 - LameJ -0572 - 01C1DAB0 - 01C0C100 - LameP -0573 - 01C1E6C0 - 01C0CD10 - Lame_str_gZ -0574 - 01C1F2D0 - 01C0DB50 - Lame_str_fZ -0575 - 01C1FEE0 - 01C0E6F0 - Lame_str_sZ -0576 - 01C20AF0 - 01C0F3D0 - Lame_str_iZ -0577 - 01C21700 - 01C0FF50 - LarchE -0578 - 01C21710 - 01C0FF60 - LarchJ -0579 - 01C21720 - 01C0FF70 - LarchP -057A - 01C21730 - 01C0FF80 - Larch_str_gZ -057B - 01C21740 - 01C0FF90 - Larch_str_fZ -057C - 01C21750 - 01C0FFA0 - Larch_str_sZ -057D - 01C21760 - 01C0FFB0 - Larch_str_iZ -057E - 01C21770 - 01C0FFC0 - LarecE -057F - 01C21780 - 01C0FFD0 - LarecJ -0580 - 01C21790 - 01C0FFE0 - LarecP -0581 - 01C217A0 - 01C0FFF0 - Larec_str_gZ -0582 - 01C217B0 - 01C10000 - Larec_str_fZ -0583 - 01C217C0 - 01C10010 - Larec_str_sZ -0584 - 01C217D0 - 01C10020 - Larec_str_iZ -0585 - 01C217E0 - 01C10030 - LarkE -0586 - 01C21F60 - 01C107B0 - LarkJ -0587 - 01C226C0 - 01C10F10 - LarkP -0588 - 01C22E30 - 01C11690 - Lark_str_gZ -0589 - 01C235A0 - 01C11EC0 - Lark_str_fZ -058A - 01C23D10 - 01C12620 - Lark_str_sZ -058B - 01C24480 - 01C12E00 - Lark_str_iZ -058C - 01C24BF0 - 01C13550 - LashE -058D - 01C24C00 - 01C13560 - LashJ -058E - 01C24C10 - 01C13570 - LashP -058F - 01C24C20 - 01C13580 - Lash_str_gZ -0590 - 01C24C30 - 01C13590 - Lash_str_fZ -0591 - 01C24C40 - 01C135A0 - Lash_str_sZ -0592 - 01C24C50 - 01C135B0 - Lash_str_iZ -0593 - 01C24C60 - 01C135C0 - LateE -0594 - 01C24EF0 - 01C13850 - LateJ -0595 - 01C24FD0 - 01C13930 - LateP -0596 - 01C25260 - 01C13BC0 - Late_str_gZ -0597 - 01C254F0 - 01C13E90 - Late_str_fZ -0598 - 01C25780 - 01C14120 - Late_str_sZ -0599 - 01C25A10 - 01C143D0 - Late_str_iZ -059A - 01C25CA0 - 01C14690 - LaztE -059B - 01C26440 - 01C14E30 - LaztJ -059C - 01C26BC0 - 01C155B0 - LaztP -059D - 01C27360 - 01C15D50 - Lazt_str_gZ -059E - 01C27B00 - 01C165E0 - Lazt_str_fZ -059F - 01C282A0 - 01C16D20 - Lazt_str_sZ -05A0 - 01C28A40 - 01C17510 - Lazt_str_iZ -05A1 - 01C291E0 - 01C17D40 - LcatE -05A2 - 01C291F0 - 01C17D50 - LcatJ -05A3 - 01C29200 - 01C17D60 - LcatP -05A4 - 01C29210 - 01C17D70 - Lcat_str_gZ -05A5 - 01C29220 - 01C17D80 - Lcat_str_fZ -05A6 - 01C29230 - 01C17D90 - Lcat_str_sZ -05A7 - 01C29240 - 01C17DA0 - Lcat_str_iZ -05A8 - 01C29250 - 01C17DB0 - LcaveE -05A9 - 01C29BD0 - 01C18730 - LcaveJ -05AA - 01C2A4C0 - 01C19020 - LcaveP -05AB - 01C2AE50 - 01C199A0 - Lcave_str_gZ -05AC - 01C2B7E0 - 01C1A480 - Lcave_str_fZ -05AD - 01C2C170 - 01C1ADD0 - Lcave_str_sZ -05AE - 01C2CB00 - 01C1B7D0 - Lcave_str_iZ -05AF - 01C2D490 - 01C1C200 - LcradE -05B0 - 01C2D4A0 - 01C1C210 - LcradJ -05B1 - 01C2D4B0 - 01C1C220 - LcradP -05B2 - 01C2D4C0 - 01C1C230 - Lcrad_str_gZ -05B3 - 01C2D4D0 - 01C1C240 - Lcrad_str_fZ -05B4 - 01C2D4E0 - 01C1C250 - Lcrad_str_sZ -05B5 - 01C2D4F0 - 01C1C260 - Lcrad_str_iZ -05B6 - 01C2D500 - 01C1C270 - LcrypE -05B7 - 01C2D510 - 01C1C280 - LcrypJ -05B8 - 01C2D520 - 01C1C290 - LcrypP -05B9 - 01C2D530 - 01C1C2A0 - Lcryp_str_gZ -05BA - 01C2D540 - 01C1C2B0 - Lcryp_str_fZ -05BB - 01C2D550 - 01C1C2C0 - Lcryp_str_sZ -05BC - 01C2D560 - 01C1C2D0 - Lcryp_str_iZ -05BD - 01C2D570 - 01C1C2E0 - LdamE -05BE - 01C2DC50 - 01C1C9C0 - LdamJ -05BF - 01C2E2B0 - 01C1D020 - LdamP -05C0 - 01C2E970 - 01C1D700 - Ldam_str_gZ -05C1 - 01C2F030 - 01C1DEB0 - Ldam_str_fZ -05C2 - 01C2F6F0 - 01C1E550 - Ldam_str_sZ -05C3 - 01C2FDB0 - 01C1ECA0 - Ldam_str_iZ -05C4 - 01C30470 - 01C1F3C0 - LdepoE -05C5 - 01C30F10 - 01C1FE60 - LdepoJ -05C6 - 01C31960 - 01C208B0 - LdepoP -05C7 - 01C32400 - 01C21350 - Ldepo_str_gZ -05C8 - 01C32EA0 - 01C21F40 - Ldepo_str_fZ -05C9 - 01C33940 - 01C229A0 - Ldepo_str_sZ -05CA - 01C343E0 - 01C234C0 - Ldepo_str_iZ -05CB - 01C34E80 - 01C23FA0 - LdestE -05CC - 01C34E90 - 01C23FB0 - LdestJ -05CD - 01C34EA0 - 01C23FC0 - LdestP -05CE - 01C34EB0 - 01C23FD0 - Ldest_str_gZ -05CF - 01C34EC0 - 01C23FE0 - Ldest_str_fZ -05D0 - 01C34ED0 - 01C23FF0 - Ldest_str_sZ -05D1 - 01C34EE0 - 01C24000 - Ldest_str_iZ -05D2 - 01C34EF0 - 01C24010 - LdishE -05D3 - 01C357A0 - 01C28680 - LdishJ -05D4 - 01C35FF0 - 01C2CCF0 - LdishP -05D5 - 01C36880 - 01C31360 - Ldish_str_gZ -05D6 - 01C37110 - 01C35A50 - Ldish_str_fZ -05D7 - 01C379A0 - 01C3A0B0 - Ldish_str_sZ -05D8 - 01C38230 - 01C3E710 - Ldish_str_iZ -05D9 - 01C38AC0 - 01C42AF0 - LearE -05DA - 01C39570 - 01C435A0 - LearJ -05DB - 01C3A020 - 01C44050 - LearP -05DC - 01C3AAD0 - 01C44B00 - Lear_str_gZ -05DD - 01C3B580 - 01C45730 - Lear_str_fZ -05DE - 01C3C030 - 01C461F0 - Lear_str_sZ -05DF - 01C3CAE0 - 01C46CF0 - Lear_str_iZ -05E0 - 01C3D590 - 01C47770 - LeldE -05E1 - 01C3DFA0 - 01C48180 - LeldJ -05E2 - 01C3E980 - 01C48B60 - LeldP -05E3 - 01C3F390 - 01C49570 - Leld_str_gZ -05E4 - 01C3FDA0 - 01C4A0E0 - Leld_str_fZ -05E5 - 01C407B0 - 01C4AAC0 - Leld_str_sZ -05E6 - 01C411C0 - 01C4B540 - Leld_str_iZ -05E7 - 01C41BD0 - 01C4BFD0 - LgunE -05E8 - 01C437B0 - 01C4DC10 - LgunJ -05E9 - 01C45210 - 01C4F810 - LgunP -05EA - 01C46C70 - 01C51450 - Lgun_str_gZ -05EB - 01C486D0 - 01C532D0 - Lgun_str_fZ -05EC - 01C4A130 - 01C54D90 - Lgun_str_sZ -05ED - 01C4BB90 - 01C56B00 - Lgun_str_iZ -05EE - 01C4D5F0 - 01C58730 - LimpE -05EF - 01C4DEE0 - 01C59020 - LimpJ -05F0 - 01C4E720 - 01C59860 - LimpP -05F1 - 01C4F010 - 01C5A150 - Limp_str_gZ -05F2 - 01C4F900 - 01C5AB80 - Limp_str_fZ -05F3 - 01C501F0 - 01C5B420 - Limp_str_sZ -05F4 - 01C50AE0 - 01C5BD50 - Limp_str_iZ -05F5 - 01C513D0 - 01C5C670 - LjunE -05F6 - 01C513E0 - 01C5C680 - LjunJ -05F7 - 01C513F0 - 01C5C690 - LjunP -05F8 - 01C51400 - 01C5C6A0 - Ljun_str_gZ -05F9 - 01C51410 - 01C5C6B0 - Ljun_str_fZ -05FA - 01C51420 - 01C5C6C0 - Ljun_str_sZ -05FB - 01C51430 - 01C5C6D0 - Ljun_str_iZ -05FC - 01C51440 - 01C5C6E0 - LlamE -05FD - 01C51450 - 01C5C6F0 - LlamJ -05FE - 01C51460 - 01C5C700 - LlamP -05FF - 01C51470 - 01C5C710 - Llam_str_gZ -0600 - 01C51480 - 01C5C720 - Llam_str_fZ -0601 - 01C51490 - 01C5C730 - Llam_str_sZ -0602 - 01C514A0 - 01C5C740 - Llam_str_iZ -0603 - 01C514B0 - 01C5C750 - LleeE -0604 - 01C51C50 - 01C5CEF0 - LleeJ -0605 - 01C52360 - 01C5D600 - LleeP -0606 - 01C52AC0 - 01C5DDA0 - Llee_str_gZ -0607 - 01C53220 - 01C5E600 - Llee_str_fZ -0608 - 01C53980 - 01C5ED90 - Llee_str_sZ -0609 - 01C540E0 - 01C5F590 - Llee_str_iZ -060A - 01C54840 - 01C5FD60 - LlenE -060B - 01C54850 - 01C5FD70 - LlenJ -060C - 01C54860 - 01C5FD80 - LlenP -060D - 01C54870 - 01C5FD90 - Llen_str_gZ -060E - 01C54880 - 01C5FDA0 - Llen_str_fZ -060F - 01C54890 - 01C5FDB0 - Llen_str_sZ -0610 - 01C548A0 - 01C5FDC0 - Llen_str_iZ -0611 - 01C548B0 - 01C5FDD0 - LlipE -0612 - 01C554B0 - 01C609D0 - LlipJ -0613 - 01C56050 - 01C61570 - LlipP -0614 - 01C56C30 - 01C62170 - Llip_str_gZ -0615 - 01C57810 - 01C62EB0 - Llip_str_fZ -0616 - 01C583F0 - 01C63A70 - Llip_str_sZ -0617 - 01C58FD0 - 01C646F0 - Llip_str_iZ -0618 - 01C59BB0 - 01C65380 - LlueE -0619 - 01C5A5C0 - 01C65D90 - LlueJ -061A - 01C5AFA0 - 01C66770 - LlueP -061B - 01C5B9A0 - 01C67180 - Llue_str_gZ -061C - 01C5C3A0 - 01C67C70 - Llue_str_fZ -061D - 01C5CDA0 - 01C685E0 - Llue_str_sZ -061E - 01C5D7A0 - 01C69080 - Llue_str_iZ -061F - 01C5E1A0 - 01C69AB0 - LmiscE -0620 - 01C62F10 - 01C6A810 - LmiscJ -0621 - 01C664D0 - 01C6B570 - LmiscP -0622 - 01C6AFA0 - 01C6C2D0 - Lmisc_str_gZ -0623 - 01C6FA70 - 01C6D110 - Lmisc_str_fZ -0624 - 01C74540 - 01C6DE50 - Lmisc_str_sZ -0625 - 01C79010 - 01C6EC20 - Lmisc_str_iZ -0626 - 01C7DAE0 - 01C6F950 - Lmp10E -0627 - 01C7DAF0 - 01C6F960 - Lmp10J -0628 - 01C7DB00 - 01C6F970 - Lmp10P -0629 - 01C7DB10 - 01C6F980 - Lmp10_str_gZ -062A - 01C7DB20 - 01C6F990 - Lmp10_str_fZ -062B - 01C7DB30 - 01C6F9A0 - Lmp10_str_sZ -062C - 01C7DB40 - 01C6F9B0 - Lmp10_str_iZ -062D - 01C7DB50 - 01C6F9C0 - Lmp11E -062E - 01C7DB60 - 01C6F9D0 - Lmp11J -062F - 01C7DB70 - 01C6F9E0 - Lmp11P -0630 - 01C7DB80 - 01C6F9F0 - Lmp11_str_gZ -0631 - 01C7DB90 - 01C6FA00 - Lmp11_str_fZ -0632 - 01C7DBA0 - 01C6FA10 - Lmp11_str_sZ -0633 - 01C7DBB0 - 01C6FA20 - Lmp11_str_iZ -0634 - 01C7DBC0 - 01C6FA30 - Lmp12E -0635 - 01C7DBD0 - 01C6FA40 - Lmp12J -0636 - 01C7DBE0 - 01C6FA50 - Lmp12P -0637 - 01C7DBF0 - 01C6FA60 - Lmp12_str_gZ -0638 - 01C7DC00 - 01C6FA70 - Lmp12_str_fZ -0639 - 01C7DC10 - 01C6FA80 - Lmp12_str_sZ -063A - 01C7DC20 - 01C6FA90 - Lmp12_str_iZ -063B - 01C7DC30 - 01C6FAA0 - Lmp13E -063C - 01C7DC40 - 01C6FAB0 - Lmp13J -063D - 01C7DC50 - 01C6FAC0 - Lmp13P -063E - 01C7DC60 - 01C6FAD0 - Lmp13_str_gZ -063F - 01C7DC70 - 01C6FAE0 - Lmp13_str_fZ -0640 - 01C7DC80 - 01C6FAF0 - Lmp13_str_sZ -0641 - 01C7DC90 - 01C6FB00 - Lmp13_str_iZ -0642 - 01C7DCA0 - 01C6FB10 - Lmp14E -0643 - 01C7DCB0 - 01C6FB20 - Lmp14J -0644 - 01C7DCC0 - 01C6FB30 - Lmp14P -0645 - 01C7DCD0 - 01C6FB40 - Lmp14_str_gZ -0646 - 01C7DCE0 - 01C6FB50 - Lmp14_str_fZ -0647 - 01C7DCF0 - 01C6FB60 - Lmp14_str_sZ -0648 - 01C7DD00 - 01C6FB70 - Lmp14_str_iZ -0649 - 01C7DD10 - 01C6FB80 - Lmp15E -064A - 01C7DD20 - 01C6FB90 - Lmp15J -064B - 01C7DD30 - 01C6FBA0 - Lmp15P -064C - 01C7DD40 - 01C6FBB0 - Lmp15_str_gZ -064D - 01C7DD50 - 01C6FBC0 - Lmp15_str_fZ -064E - 01C7DD60 - 01C6FBD0 - Lmp15_str_sZ -064F - 01C7DD70 - 01C6FBE0 - Lmp15_str_iZ -0650 - 01C7DD80 - 01C6FBF0 - Lmp16E -0651 - 01C7DD90 - 01C6FC00 - Lmp16J -0652 - 01C7DDA0 - 01C6FC10 - Lmp16P -0653 - 01C7DDB0 - 01C6FC20 - Lmp16_str_gZ -0654 - 01C7DDC0 - 01C6FC30 - Lmp16_str_fZ -0655 - 01C7DDD0 - 01C6FC40 - Lmp16_str_sZ -0656 - 01C7DDE0 - 01C6FC50 - Lmp16_str_iZ -0657 - 01C7DDF0 - 01C6FC60 - Lmp17E -0658 - 01C7DE00 - 01C6FC70 - Lmp17J -0659 - 01C7DE10 - 01C6FC80 - Lmp17P -065A - 01C7DE20 - 01C6FC90 - Lmp17_str_gZ -065B - 01C7DE30 - 01C6FCA0 - Lmp17_str_fZ -065C - 01C7DE40 - 01C6FCB0 - Lmp17_str_sZ -065D - 01C7DE50 - 01C6FCC0 - Lmp17_str_iZ -065E - 01C7DE60 - 01C6FCD0 - Lmp18E -065F - 01C7DE70 - 01C6FCE0 - Lmp18J -0660 - 01C7DE80 - 01C6FCF0 - Lmp18P -0661 - 01C7DE90 - 01C6FD00 - Lmp18_str_gZ -0662 - 01C7DEA0 - 01C6FD10 - Lmp18_str_fZ -0663 - 01C7DEB0 - 01C6FD20 - Lmp18_str_sZ -0664 - 01C7DEC0 - 01C6FD30 - Lmp18_str_iZ -0665 - 01C7DED0 - 01C6FD40 - Lmp19E -0666 - 01C7DEE0 - 01C6FD50 - Lmp19J -0667 - 01C7DEF0 - 01C6FD60 - Lmp19P -0668 - 01C7DF00 - 01C6FD70 - Lmp19_str_gZ -0669 - 01C7DF10 - 01C6FD80 - Lmp19_str_fZ -066A - 01C7DF20 - 01C6FD90 - Lmp19_str_sZ -066B - 01C7DF30 - 01C6FDA0 - Lmp19_str_iZ -066C - 01C7DF40 - 01C6FDB0 - Lmp1E -066D - 01C7DF50 - 01C6FDC0 - Lmp1J -066E - 01C7DF60 - 01C6FDD0 - Lmp1P -066F - 01C7DF70 - 01C6FDE0 - Lmp1_str_gZ -0670 - 01C7DF80 - 01C6FDF0 - Lmp1_str_fZ -0671 - 01C7DF90 - 01C6FE00 - Lmp1_str_sZ -0672 - 01C7DFA0 - 01C6FE10 - Lmp1_str_iZ -0673 - 01C7DFB0 - 01C6FE20 - Lmp20E -0674 - 01C7DFC0 - 01C6FE30 - Lmp20J -0675 - 01C7DFD0 - 01C6FE40 - Lmp20P -0676 - 01C7DFE0 - 01C6FE50 - Lmp20_str_gZ -0677 - 01C7DFF0 - 01C6FE60 - Lmp20_str_fZ -0678 - 01C7E000 - 01C6FE70 - Lmp20_str_sZ -0679 - 01C7E010 - 01C6FE80 - Lmp20_str_iZ -067A - 01C7E020 - 01C6FE90 - Lmp2E -067B - 01C7E030 - 01C6FEA0 - Lmp2J -067C - 01C7E040 - 01C6FEB0 - Lmp2P -067D - 01C7E050 - 01C6FEC0 - Lmp2_str_gZ -067E - 01C7E060 - 01C6FED0 - Lmp2_str_fZ -067F - 01C7E070 - 01C6FEE0 - Lmp2_str_sZ -0680 - 01C7E080 - 01C6FEF0 - Lmp2_str_iZ -0681 - 01C7E090 - 01C6FF00 - Lmp3E -0682 - 01C7E0A0 - 01C6FF10 - Lmp3J -0683 - 01C7E0B0 - 01C6FF20 - Lmp3P -0684 - 01C7E0C0 - 01C6FF30 - Lmp3_str_gZ -0685 - 01C7E0D0 - 01C6FF40 - Lmp3_str_fZ -0686 - 01C7E0E0 - 01C6FF50 - Lmp3_str_sZ -0687 - 01C7E0F0 - 01C6FF60 - Lmp3_str_iZ -0688 - 01C7E100 - 01C6FF70 - Lmp4E -0689 - 01C7E110 - 01C6FF80 - Lmp4J -068A - 01C7E120 - 01C6FF90 - Lmp4P -068B - 01C7E130 - 01C6FFA0 - Lmp4_str_gZ -068C - 01C7E140 - 01C6FFB0 - Lmp4_str_fZ -068D - 01C7E150 - 01C6FFC0 - Lmp4_str_sZ -068E - 01C7E160 - 01C6FFD0 - Lmp4_str_iZ -068F - 01C7E170 - 01C6FFE0 - Lmp5E -0690 - 01C7E180 - 01C6FFF0 - Lmp5J -0691 - 01C7E190 - 01C70000 - Lmp5P -0692 - 01C7E1A0 - 01C70010 - Lmp5_str_gZ -0693 - 01C7E1B0 - 01C70020 - Lmp5_str_fZ -0694 - 01C7E1C0 - 01C70030 - Lmp5_str_sZ -0695 - 01C7E1D0 - 01C70040 - Lmp5_str_iZ -0696 - 01C7E1E0 - 01C70050 - Lmp6E -0697 - 01C7E1F0 - 01C70060 - Lmp6J -0698 - 01C7E200 - 01C70070 - Lmp6P -0699 - 01C7E210 - 01C70080 - Lmp6_str_gZ -069A - 01C7E220 - 01C70090 - Lmp6_str_fZ -069B - 01C7E230 - 01C700A0 - Lmp6_str_sZ -069C - 01C7E240 - 01C700B0 - Lmp6_str_iZ -069D - 01C7E250 - 01C700C0 - Lmp7E -069E - 01C7E260 - 01C700D0 - Lmp7J -069F - 01C7E270 - 01C700E0 - Lmp7P -06A0 - 01C7E280 - 01C700F0 - Lmp7_str_gZ -06A1 - 01C7E290 - 01C70100 - Lmp7_str_fZ -06A2 - 01C7E2A0 - 01C70110 - Lmp7_str_sZ -06A3 - 01C7E2B0 - 01C70120 - Lmp7_str_iZ -06A4 - 01C7E2C0 - 01C70130 - Lmp8E -06A5 - 01C7E2D0 - 01C70140 - Lmp8J -06A6 - 01C7E2E0 - 01C70150 - Lmp8P -06A7 - 01C7E2F0 - 01C70160 - Lmp8_str_gZ -06A8 - 01C7E300 - 01C70170 - Lmp8_str_fZ -06A9 - 01C7E310 - 01C70180 - Lmp8_str_sZ -06AA - 01C7E320 - 01C70190 - Lmp8_str_iZ -06AB - 01C7E330 - 01C701A0 - Lmp9E -06AC - 01C7E340 - 01C701B0 - Lmp9J -06AD - 01C7E350 - 01C701C0 - Lmp9P -06AE - 01C7E360 - 01C701D0 - Lmp9_str_gZ -06AF - 01C7E370 - 01C701E0 - Lmp9_str_fZ -06B0 - 01C7E380 - 01C701F0 - Lmp9_str_sZ -06B1 - 01C7E390 - 01C70200 - Lmp9_str_iZ -06B2 - 01C7E3A0 - 01C70210 - LmpmenuE -06B3 - 01C7F460 - 01C712D0 - LmpmenuJ -06B4 - 01C80530 - 01C723A0 - LmpmenuP -06B5 - 01C81600 - 01C73460 - Lmpmenu_str_gZ -06B6 - 01C826D0 - 01C74570 - Lmpmenu_str_fZ -06B7 - 01C837A0 - 01C756A0 - Lmpmenu_str_sZ -06B8 - 01C84870 - 01C767F0 - Lmpmenu_str_iZ -06B9 - 01C85940 - 01C77880 - LmpweaponsE -06BA - 01C86560 - 01C78550 - LmpweaponsJ -06BB - 01C86EB0 - 01C78EB0 - LmpweaponsP -06BC - 01C87A90 - 01C79B80 - Lmpweapons_str_gZ -06BD - 01C883F0 - 01C7A920 - Lmpweapons_str_fZ -06BE - 01C88D50 - 01C7B600 - Lmpweapons_str_sZ -06BF - 01C896B0 - 01C7C3C0 - Lmpweapons_str_iZ -06C0 - 01C8A010 - 01C7D090 - LoatE -06C1 - 01C8A020 - 01C7D0A0 - LoatJ -06C2 - 01C8A030 - 01C7D0B0 - LoatP -06C3 - 01C8A040 - 01C7D0C0 - Loat_str_gZ -06C4 - 01C8A050 - 01C7D0D0 - Loat_str_fZ -06C5 - 01C8A060 - 01C7D0E0 - Loat_str_sZ -06C6 - 01C8A070 - 01C7D0F0 - Loat_str_iZ -06C7 - 01C8A080 - 01C7D100 - LoldE -06C8 - 01C8A090 - 01C7D110 - LoldJ -06C9 - 01C8A0A0 - 01C7D120 - LoldP -06CA - 01C8A0B0 - 01C7D130 - Lold_str_gZ -06CB - 01C8A0C0 - 01C7D140 - Lold_str_fZ -06CC - 01C8A0D0 - 01C7D150 - Lold_str_sZ -06CD - 01C8A0E0 - 01C7D160 - Lold_str_iZ -06CE - 01C8A0F0 - 01C7D170 - LoptionsE -06CF - 01C8B430 - 01C7E4B0 - LoptionsJ -06D0 - 01C8C580 - 01C7F600 - LoptionsP -06D1 - 01C8D710 - 01C80940 - Loptions_str_gZ -06D2 - 01C8E8A0 - 01C81DE0 - Loptions_str_fZ -06D3 - 01C8FA30 - 01C83180 - Loptions_str_sZ -06D4 - 01C90BC0 - 01C84590 - Loptions_str_iZ -06D5 - 01C91D50 - 01C858E0 - LpamE -06D6 - 01C92670 - 01C86200 - LpamJ -06D7 - 01C92F30 - 01C86AC0 - LpamP -06D8 - 01C93800 - 01C873E0 - Lpam_str_gZ -06D9 - 01C940D0 - 01C87E40 - Lpam_str_fZ -06DA - 01C949A0 - 01C88750 - Lpam_str_sZ -06DB - 01C95270 - 01C890F0 - Lpam_str_iZ -06DC - 01C95B40 - 01C89AA0 - LpeteE -06DD - 01C96400 - 01C8A360 - LpeteJ -06DE - 01C96C90 - 01C8AC00 - LpeteP -06DF - 01C97550 - 01C8B4C0 - Lpete_str_gZ -06E0 - 01C97E10 - 01C8BEB0 - Lpete_str_fZ -06E1 - 01C986D0 - 01C8C780 - Lpete_str_sZ -06E2 - 01C98F90 - 01C8D0A0 - Lpete_str_iZ -06E3 - 01C99850 - 01C8D9B0 - LpropobjE -06E4 - 01C99A20 - 01C8DC20 - LpropobjJ -06E5 - 01C99BF0 - 01C8DE00 - LpropobjP -06E6 - 01C99DC0 - 01C8E070 - Lpropobj_str_gZ -06E7 - 01C99F90 - 01C8E2F0 - Lpropobj_str_fZ -06E8 - 01C9A160 - 01C8E580 - Lpropobj_str_sZ -06E9 - 01C9A330 - 01C8E830 - Lpropobj_str_iZ -06EA - 01C9A500 - 01C8EAC0 - LrefE -06EB - 01C9A510 - 01C8EAD0 - LrefJ -06EC - 01C9A520 - 01C8EAE0 - LrefP -06ED - 01C9A530 - 01C8EAF0 - Lref_str_gZ -06EE - 01C9A540 - 01C8EB00 - Lref_str_fZ -06EF - 01C9A550 - 01C8EB10 - Lref_str_sZ -06F0 - 01C9A560 - 01C8EB20 - Lref_str_iZ -06F1 - 01C9A570 - 01C8EB30 - LritE -06F2 - 01C9AE60 - 01C8F420 - LritJ -06F3 - 01C9B740 - 01C8FD00 - LritP -06F4 - 01C9C030 - 01C905F0 - Lrit_str_gZ -06F5 - 01C9C920 - 01C90FF0 - Lrit_str_fZ -06F6 - 01C9D210 - 01C91960 - Lrit_str_sZ -06F7 - 01C9DB00 - 01C92290 - Lrit_str_iZ -06F8 - 01C9E3F0 - 01C92C00 - LrunE -06F9 - 01C9E400 - 01C92C10 - LrunJ -06FA - 01C9E410 - 01C92C20 - LrunP -06FB - 01C9E420 - 01C92C30 - Lrun_str_gZ -06FC - 01C9E430 - 01C92C40 - Lrun_str_fZ -06FD - 01C9E440 - 01C92C50 - Lrun_str_sZ -06FE - 01C9E450 - 01C92C60 - Lrun_str_iZ -06FF - 01C9E460 - 01C92C70 - LsevE -0700 - 01C9E7D0 - 01C92FE0 - LsevJ -0701 - 01C9E8B0 - 01C930C0 - LsevP -0702 - 01C9EC20 - 01C93430 - Lsev_str_gZ -0703 - 01C9EF90 - 01C93860 - Lsev_str_fZ -0704 - 01C9F300 - 01C93BC0 - Lsev_str_sZ -0705 - 01C9F670 - 01C93F70 - Lsev_str_iZ -0706 - 01C9F9E0 - 01C94350 - LsevbE -0707 - 01C9FA70 - 01C943E0 - LsevbJ -0708 - 01C9FB00 - 01C94470 - LsevbP -0709 - 01C9FB90 - 01C94500 - Lsevb_str_gZ -070A - 01C9FC20 - 01C94590 - Lsevb_str_fZ -070B - 01C9FCB0 - 01C94620 - Lsevb_str_sZ -070C - 01C9FD40 - 01C946B0 - Lsevb_str_iZ -070D - 01C9FDD0 - 01C94740 - LsevxE -070E - 01C9FDE0 - 01C94750 - LsevxJ -070F - 01C9FDF0 - 01C94760 - LsevxP -0710 - 01C9FE00 - 01C94770 - Lsevx_str_gZ -0711 - 01C9FE10 - 01C94780 - Lsevx_str_fZ -0712 - 01C9FE20 - 01C94790 - Lsevx_str_sZ -0713 - 01C9FE30 - 01C947A0 - Lsevx_str_iZ -0714 - 01C9FE40 - 01C947B0 - LsevxbE -0715 - 01C9FE50 - 01C947C0 - LsevxbJ -0716 - 01C9FE60 - 01C947D0 - LsevxbP -0717 - 01C9FE70 - 01C947E0 - Lsevxb_str_gZ -0718 - 01C9FE80 - 01C947F0 - Lsevxb_str_fZ -0719 - 01C9FE90 - 01C94800 - Lsevxb_str_sZ -071A - 01C9FEA0 - 01C94810 - Lsevxb_str_iZ -071B - 01C9FEB0 - 01C94820 - LshoE -071C - 01CA07C0 - 01C95130 - LshoJ -071D - 01CA0FC0 - 01C95930 - LshoP -071E - 01CA1830 - 01C96240 - Lsho_str_gZ -071F - 01CA20A0 - 01C96CA0 - Lsho_str_fZ -0720 - 01CA2910 - 01C97590 - Lsho_str_sZ -0721 - 01CA3180 - 01C97F50 - Lsho_str_iZ -0722 - 01CA39F0 - 01C98960 - LsiloE -0723 - 01CA3A00 - 01C98970 - LsiloJ -0724 - 01CA3A10 - 01C98980 - LsiloP -0725 - 01CA3A20 - 01C98990 - Lsilo_str_gZ -0726 - 01CA3A30 - 01C989A0 - Lsilo_str_fZ -0727 - 01CA3A40 - 01C989B0 - Lsilo_str_sZ -0728 - 01CA3A50 - 01C989C0 - Lsilo_str_iZ -0729 - 01CA3A60 - 01C989D0 - LstatE -072A - 01CA3D30 - 01C98CA0 - LstatJ -072B - 01CA3DC0 - 01C98D30 - LstatP -072C - 01CA4090 - 01C99000 - Lstat_str_gZ -072D - 01CA4360 - 01C99370 - Lstat_str_fZ -072E - 01CA4630 - 01C996A0 - Lstat_str_sZ -072F - 01CA4900 - 01C999A0 - Lstat_str_iZ -0730 - 01CA4BD0 - 01C99D00 - LtitleE -0731 - 01CA5290 - 01C9A590 - LtitleJ -0732 - 01CA5780 - 01C9AC50 - LtitleP -0733 - 01CA5CB0 - 01C9B4E0 - Ltitle_str_gZ -0734 - 01CA61E0 - 01C9BD90 - Ltitle_str_fZ -0735 - 01CA6710 - 01C9C620 - Ltitle_str_sZ -0736 - 01CA6C40 - 01C9CF00 - Ltitle_str_iZ -0737 - 01CA7170 - 01C9D7B0 - LtraE -0738 - 01CA7C80 - 01C9E2C0 - LtraJ -0739 - 01CA8700 - 01C9ED40 - LtraP -073A - 01CA9210 - 01C9F850 - Ltra_str_gZ -073B - 01CA9D20 - 01CA04E0 - Ltra_str_fZ -073C - 01CAA830 - 01CA1050 - Ltra_str_sZ -073D - 01CAB340 - 01CA1BD0 - Ltra_str_iZ -073E - 01CABE50 - 01CA2760 - LuffE -073F - 01CABE60 - 01CA2770 - LuffJ -0740 - 01CABE70 - 01CA2780 - LuffP -0741 - 01CABE80 - 01CA2790 - Luff_str_gZ -0742 - 01CABE90 - 01CA27A0 - Luff_str_fZ -0743 - 01CABEA0 - 01CA27B0 - Luff_str_sZ -0744 - 01CABEB0 - 01CA27C0 - Luff_str_iZ -0745 - 01CABEC0 - 01CA27D0 - LwaxE -0746 - 01CAC2B0 - 01CA2BC0 - LwaxJ -0747 - 01CAC4C0 - 01CA2DE0 - LwaxP -0748 - 01CAC8A0 - 01CA31D0 - Lwax_str_gZ -0749 - 01CACC80 - 01CA3630 - Lwax_str_fZ -074A - 01CAD060 - 01CA3AB0 - Lwax_str_sZ -074B - 01CAD440 - 01CA3F00 - Lwax_str_iZ -074C - 01CAD820 - 01CA4300 - Area 51 Grate -074D - 01CADE10 - 01CA48F0 - ECM Mine -074E - 01CAF0F0 - 01CA5BD0 - Data Uplink -074F - 01CAF960 - 01CA6440 - IR Scanner -0750 - 01CB0A90 - 01CA7570 - Air Force One Escape door -0751 - 01CB19C0 - 01CA84A0 - Presidential Escape Pod -0752 - 01CB2070 - 01CA8B50 - Skedar Ruins Bridge -0753 - 01CB2AD0 - 01CA95B0 - Pelagic II Windowless door -0754 - 01CB3330 - 01CA9E10 - Avault2M -0755 - 01CB7110 - 01CADBF0 - Ap29_12_elM -0756 - 01CB8700 - 01CAF1E0 - BETA Touch That Box, Box -0757 - 01CB8830 - 01CAF310 - Carrington Institute Front Door -0758 - 01CB9440 - 01CAFF20 - Ap14_09_joM -0759 - 01CBB180 - 01CB1C60 - Ap19_07_joM -075A - 01CBD3A0 - 01CB3E80 - Ap19_08_joM -075B - 01CBEBC0 - 01CB56A0 - Laser (Item) -075C - 01CBF000 - 01CB5AE0 - G5 Building BAFTA Award -075D - 01CBF230 - 01CB5D10 - Area 51 Surgeons Dissection Laser -075E - 01CBF720 - 01CB6200 - Crash Site Outro Elvis’s hammer -075F - 01CBF9F0 - 01CB64D0 - Skedar Bomb from Mr. Blonde’s Revenge -0760 - 01CBFFD0 - 01CB6AB0 - Infiltration Explosives -0761 - 01CC0230 - 01CB6D10 - BETA GoldenEye video Cassette -0762 - 01CC03F0 - 01CB6ED0 - Dr Caroll’s Backup disk -0763 - 01CC0700 - 01CB71E0 - Air Base Flight plans -0764 - 01CC0FF0 - 01CB7AD0 - Elvis Arms -0765 - 01CC1E80 - 01CB8960 - Air Force One Table -0766 - 01CC2200 - 01CB8CE0 - Area 51 Guard arms -0767 - 01CC36A0 - 01CBA180 - dataDyne Green Guard arms -0768 - 01CC4A50 - 01CBB530 - Black Guard arms -0769 - 01CC5F00 - 01CBC9E0 - Grey arms -076A - 01CC72B0 - 01CBDD90 - Bio Technician arms -076B - 01CC8680 - 01CBF160 - Area 51 Pilot arms -076C - 01CC9B20 - 01CC0600 - G5 Building Guard arms -076D - 01CCAED0 - 01CC19B0 - Carrington Institute Agent arms -076E - 01CCC1F0 - 01CC2CD0 - CI Sensitive information -076F - 01CCCC40 - 01CC3720 - R-Tracker -0770 - 01CCD180 - 01CC3C60 - Xray Scanner -0771 - 01CCD350 - 01CC3E30 - Camspy, Drugspy, Bombspy -0772 - 01CD2DF0 - 01CC98D0 - Door Decoder -0773 - 01CD31E0 - 01CC9CC0 - BETA Briefcase -0774 - 01CD3990 - 01CCA470 - BETA Suitcase -0775 - 01CD3AF0 - 01CCA5D0 - Air Base Air Force Ones private loader door -0776 - 01CD46E0 - 01CCB1C0 - Skedar Ruins Backdrop -0777 - 01CD4BD0 - 01CCB6B0 - CI Secret door (Device training) -0778 - 01CD56E0 - 01CCC1C0 - Skedar Ruins Push-block to activate bridge -0779 - 01CD6C60 - 01CCD740 - Area 51 Lift bars/door -077A - 01CD7190 - 01CCDC70 - Acicarr06M -077B - 01CD7E10 - 01CCE8F0 - Acicarr11M -077C - 01CDA3E0 - 01CD0EC0 - Acifarr08M -077D - 01CDAB30 - 01CD1610 - Acifarr12M -077E - 01CDC600 - 01CD30E0 - Acifema01M -077F - 01CDCD50 - 01CD3830 - Acifema04M -0780 - 01CDD850 - 01CD4330 - Acifema07M -0781 - 01CDE350 - 01CD4E30 - Acifema08M -0782 - 01CDF690 - 01CD6170 - Acifema09M -0783 - 01CE0B00 - 01CD75E0 - Acifema14M -0784 - 01CE1C60 - 01CD8740 - Acifost08M -0785 - 01CE2EB0 - 01CD9990 - Acifost12M -0786 - 01CE4540 - 01CDB020 - Acigrim05M -0787 - 01CE6320 - 01CDCE00 - Acigrim06M -0788 - 01CE70E0 - 01CDDBC0 - Acigrim07M -0789 - 01CE8990 - 01CDF470 - Acigrim08M -078A - 01CEAE20 - 01CE1900 - Acigrim09M -078B - 01CED040 - 01CE3B20 - Acigrim10M -078C - 01CEDD60 - 01CE4840 - Acihopk09M -078D - 01CEF270 - 01CE5D50 - Acihopk11M -078E - 01CF10F0 - 01CE7BD0 - Acimale02M -078F - 01CF1840 - 01CE8320 - Acimale03M -0790 - 01CF1E10 - 01CE88F0 - Acimale07M -0791 - 01CF2790 - 01CE9270 - Acimale09M -0792 - 01CF3860 - 01CEA340 - Acimale11M -0793 - 01CF4580 - 01CEB060 - Acimale13M -0794 - 01CF5C60 - 01CEC740 - Aciroge08M -0795 - 01CF6760 - 01CED240 - Aciroge12M -0796 - 01CF7C70 - 01CEE750 - Joanna Negotiator -0797 - 01CFC900 - 01CF33E0 - Carrington Institute Switch -0798 - 01CFCD40 - 01CF3820 - Attack Ship Blue door -0799 - 01CFF5B0 - 01CF6090 - Attack Ship Window -079A - 01CFF6A0 - 01CF6180 - Attack Ship Hanger door (Top half) -079B - 01D01580 - 01CF8060 - Attack Ship Hanger door (Bottom half) -079C - 01D033C0 - 01CF9EA0 - Air Force One Inner door -079D - 01D03610 - 01CFA0F0 - BETA Laser post -079E - 01D03740 - 01CFA220 - Atrfost01M -079F - 01D05520 - 01CFC000 - Atrfost02M -07A0 - 01D07740 - 01CFE220 - Atrfost03M -07A1 - 01D09EE0 - 01D009C0 - Atrcarr09M -07A2 - 01D0B220 - 01D01D00 - Atrcarr10M -07A3 - 01D0D220 - 01D03D00 - Atrcarr11M -07A4 - 01D0ECF0 - 01D057D0 - Acifarr01M -07A5 - 01D10DE0 - 01D078C0 - Acifarr02M -07A6 - 01D11E10 - 01D088F0 - Acifarr03M -07A7 - 01D12CB0 - 01D09790 - Acigrim01M -07A8 - 01D15370 - 01D0BE50 - Acigrim03M -07A9 - 01D18430 - 01D0EF10 - Acigrim04M -07AA - 01D1B4F0 - 01D11FD0 - Acihopk01M -07AB - 01D1C7E0 - 01D132C0 - Acihopk04M -07AC - 01D1DA30 - 01D14510 - Acihopk06M -07AD - 01D1FEC0 - 01D169A0 - Aciroge01M -07AE - 01D21330 - 01D17E10 - Aciroge02M -07AF - 01D22D70 - 01D19850 - Atrroge01M -07B0 - 01D24590 - 01D1B070 - Acicarr07M -07B1 - 01D25FD0 - 01D1CAB0 - Acicarr08M -07B2 - 01D26D90 - 01D1D870 - Target Amplifier -07B3 - 01D27570 - 01D1E050 - Attack Ship Lift -07B4 - 01D27770 - 01D1E250 - CI Defense Smashed front door -07B5 - 01D28460 - 01D1EF40 - Deep Sea Slide-up door -07B6 - 01D2A250 - 01D20D30 - Ajoinst01M -07B7 - 01D2A780 - 01D21260 - Ajoinst02M -07B8 - 01D2ACB0 - 01D21790 - Ajoinst03M -07B9 - 01D2B1E0 - 01D21CC0 - Ajoinst04M -07BA - 01D2B710 - 01D221F0 - Ap25_03_joM -07BB - 01D2C120 - 01D22C00 - Air Force One Rubble -07BC - 01D2C9D0 - 01D234B0 - dataDyne Building Door -07BD - 01D2CC80 - 01D23760 - Enemy Head (Tim) -07BE - 01D2DBE0 - 01D246C0 - Enemy Head (Grant) -07BF - 01D2ECE0 - 01D257C0 - Enemy Head (Penny) -07C0 - 01D2FE70 - 01D26950 - Enemy Head (Robin) -07C1 - 01D30DA0 - 01D27880 - Female Enemy Head (Alex) -07C2 - 01D31DF0 - 01D288D0 - Female Enemy Head (Julianne) -07C3 - 01D32F60 - 01D29A40 - Female Enemy Head (Laura) -07C4 - 01D34130 - 01D2AC10 - Enemy Head (Davec) -07C5 - 01D35450 - 01D2BF30 - Enemy Head (Ken) -07C6 - 01D36150 - 01D2CC30 - Enemy Head (Joel) -07C7 - 01D370F0 - 01D2DBD0 - Deep Sea Slide door -07C8 - 01D38EF0 - 01D2F9D0 - Ap29_13_joM -07C9 - 01D39C10 - 01D306F0 - Ap29_14_joM -07CA - 01D3AC40 - 01D31720 - Acicarr09M -07CB - 01D3CD30 - 01D33810 - Acicarr10M -07CC - 01D3E320 - 01D34E00 - Skedar Ruins Buddy Bridge -07CD - 01D3E570 - 01D35050 - Enemy Head (Cook) -07CE - 01D3F820 - 01D36300 - Enemy Head (Pryce) -07CF - 01D407F0 - 01D372D0 - Enemy Head (Silke) -07D0 - 01D418C0 - 01D383A0 - Enemy Head (Smith) -07D1 - 01D42830 - 01D39310 - Enemy Head (Gareth) -07D2 - 01D43870 - 01D3A350 - Enemy Head (Murchie) -07D3 - 01D447B0 - 01D3B290 - Enemy Head (Wong) -07D4 - 01D457C0 - 01D3C2A0 - Enemy Head (Carter) -07D5 - 01D46B70 - 01D3D650 - Enemy Head (Tintin) -07D6 - 01D47CE0 - 01D3E7C0 - Enemy Head (Munton) -07D7 - 01D48EA0 - 01D3F980 - Enemy Head (Stamper) -07D8 - 01D49E70 - 01D40950 - Enemy Head (Jones) -07D9 - 01D4ADF0 - 01D418D0 - Enemy Head (Phelps) -07DA - 01D4BDC0 - 01D428A0 - Ap29_15_joM -07DB - 01D4CD00 - 01D437E0 - Ap16_03_joM -07DC - 01D533B0 - 01D49E90 - Acarrbye02M -07DD - 01D55540 - 01D4C020 - Asaucerexp1M -07DE - 01D5CA00 - 01D534E0 - ??? -End - - -In-game object list: (Sorted by number) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The values on this list are used during game play. This list is represented at -NTSC 8007B070 and PAL 8007B540. It uses the values from the global object list -and defines the size of the objects. The two sizes mostly used are 0199 and -1000. There is also a pointer that appears if the object is currently in use. -This pointer points to the objects model and attributes. - -00 - Investigation Ceiling dronegun -01 - Crash Site Green Drone Gun -02 - Tv Screen -03 - BETA Borg Crate -04 - Pane of glass -05 - Metal Crate -06 - Metal Crate -07 - Metal Crate -08 - Metal Crate -09 - Metal Crate -0A - Metal Crate -0B - Metal Crate -0C - Metal Crate -0D - Metal Crate -0E - Metal Crate -0F - Metal Crate -10 - BETA Door -11 - Briefcase -12 - Chicago Tracer bug -13 - Data Uplink -14 - Nintendo Logo -15 - Metal Panel -16 - BETA Flag from GoldenEye -17 - Area 51 Control Panel / Button -18 - BETA GoldenEye Terminal -19 - Area 51 Square Door (Top part) -1A - Area 51 Square Door (Bottom part) -1B - Area 51 Door (Left) -1C - Area 51 Door (Right) -1D - Area 51 Door -1E - Area 51 Door with glass window -1F - Area 51 Brown door -20 - Metal Crate -21 - Metal Crate (Blue tint) -22 - Metal Crate (Brown tint) -23 - Area 51 Hole-in-wall frame -24 - Area 51 Wall you blow up (With X on) -25 - Area 51 Hole-in-wall frame -26 - Area 51 Wall you blow up (Laboratory side) -27 - Area 51 Hole-in-wall frame (Before blown up) -28 - BETA Villa Door -29 - Villa Wooden door -2A - BETA Villa Wooden slide door -2B - Area 51 Hanger lift -2C - Area 51 Small lift from hanger -2D - Area 51 Storage lift 1 -2E - Area 51 Storgae lift 2 -2F - Villa Wine Bottle (Green) -30 - Villa Wine Bottle (Red) -31 - Villa Wine Bottle (Red, not JUNG brand) -32 - Villa Windmill propellar -33 - Area 51 Elvis on hoverbed -34 - BETA Multicoloured box -35 - Deep Sea Door (Right) -36 - Deep Sea Door (Left) -37 - dataDyne Building Lift -38 - dataDyne Building Roof fan -39 - dataDyne Building Wall fan -3A - Hoverbike -3B - dataDyne Building Office door -3C - Pot plant (Rubber plant) -3D - Pot plant (Spider plant) -3E - Pot plant (Spike plant) -3F - dataDyne Building Window glass -40 - dataDyne Building Sofa -41 - dataDyne Building Armchair -42 - dataDyne Building Service door -43 - dataDyne Building Grating door -44 - dataDyne Building Lift door -45 - dataDyne Building Vertical blind -46 - dataDyne Building Desk -47 - dataDyne Building Desk chair -48 - Changing N logo -49 - Changing N logo 2 -4A - Changing N logo 3 -4B - Perfect Dark Logo -4C - Perfect Dark Logo 1 -4D - Perfect Dark Logo 2 -4E - Perfect Dark Logo 3 -4F - Perfect Dark Logo 4 -50 - Hovercop -51 - Hovermoto -52 - Hovertruck -53 - Hovercar -54 - Hovercab -55 - dataDyne Building Hole-in-tube unexploded -56 - dataDyne Building Hole-in-tube frame -57 - dataDyne Building Hole-in-wall unexploded -58 - dataDyne Building Hole-in-wall frame -59 - Blue computer -5A - Hovercrate -5B - Carrington Institute Drop ship (Villa, Defense) -5C - Deep Sea Door from beginning of level -5D - Deep Sea Lift -5E - Case -5F - dataDyne Building Cassandra's desk -60 - Area 51 Pane of glass with yellow/black caution stripes 1 -61 - Area 51 Pane of glass with yellow/black caution stripes 2 -62 - Area 51 Table -63 - BETA Area 51 Chair -64 - BETA Area 51 Screen -65 - Area 51 Trashcan -66 - Area 51 Entrance hall desk -67 - Area 51 Empty hoverbed -68 - Area 51 Office divider (Peachy coloured) -69 - Area 51 Bulletin board with Maian pictures -6A - Skedar Ruins Canyon wall after blowing up rock -6B - Skedar Ruins Canyon rock -6C - Skedar Ruins Hole-in-wall frame -6D - Skedar Ruins Hole-in-wall unexploded -6E - Skedar Ruins Door -6F - Attack Ship Yellow slide door -70 - Attack Ship Holographic star map -71 - Attack Ship Holographic star map -72 - Attack Ship Hanger hull door part 1 -73 - Attack Ship Hanger hull door part 2 -74 - Attack Ship Hanger hull door part 3 -75 - Attack Ship Hanger hull door part 4 -76 - BETA Skedar fighter ship -77 - Secret Skedar Army pod door (Top half) -78 - Secret Skedar Army pod door (Bottom half) -79 - Skedar Ruins Spinning power generator pillar -7A - Skedar Ruins Rolling round pillar -7B - Attack Ship Hanger door (Top half) -7C - Attack Ship Hanger door (Bottom half) -7D - G5 Building Slide open door with window -7E - G5 Building Part of fire door -7F - G5 Building Part of fire door -80 - G5 Building Part of fire door (Middle piece) -81 - G5 Building Slide open door without window -82 - dataDyne Building Slide door -83 - dataDyne Building Secret Door 1 -84 - dataDyne Building Secret door 2 -85 - dataDyne Building CI Jumpship from Defection Intro and Extraction Outro -86 - Chicago Hovertaxi -87 - Chicago Intro Police hovercar -88 - Ravine Lift -89 - BETA Investigation Door -8A - Investigation Secret door that only the Hoverbot can open -8B - Investigation Sector One Door -8C - Hoverbot (Orange) -8D - Hoverbot (White/blue) -8E - Investigation Sector Two Slide-down door (Bottom half) -8F - Investigation Sector Two Slide-up door (Top half) -90 - Investigation Slide-up door with caution sign (Top half) -91 - Investigation Slide-up door with hazardous sign (Top half) -92 - Investigation Door with caution sign and window -93 - Investigation Dr.Caroll Door -94 - Investigation Sector Three Slide-up door (Top half) -95 - Investigation Sector Three Door -96 - Investigation Sector Three Door with window -97 - dataDyne Building Extraction Hovercopter -98 - Investigation Sector Four Slide-up door (Top half) -99 - Investigation Slide-up door with restricted sign (Top half) -9A - G5 Building Slide door with dataDyne logo -9B - G5 Building Slide door with dataDyne logo -9C - Laser Beam door / block -9D - G5 Building Vault door -9E - dataDyne Building Defection Intro Rope -9F - G5 Building Mainframe -A0 - Investigation Dr.Caroll Door (Base) -A1 - Investigation Dr.Caroll Door (Main) -A2 - Investigation Dr.Caroll Door (Left) -A3 - Investigation Dr.Caroll Door (Right) -A4 - Investigation Dr.Caroll Door (Base Main) -A5 - Investigation Dr.Caroll Door (Base Left) -A6 - Investigation Dr.Caroll Door (Base Right) -A7 - dataDyne Building Rooftop banner -A8 - G5 Building Upper hole-in-wall unexploded -A9 - G5 Building Upper hole-in-wall frame -AA - G5 Building Lower hole-in-wall unexploded -AB - G5 Building Lower hole-in-wall frame -AC - Chicago Dumpster -AD - Chicago Unopened fire door -AE - Chicago Metal shutter -AF - Security Camera -B0 - Communications Hub -B1 - dataDyne Building Rocket Launcher stand -B2 - Blue computer terminal -B3 - Red grate/panel -B4 - Investigation Lift -B5 - Light switch -B6 - dataDyne Building Extraction Blue blast shield -B7 - dataDyne Building Light switch -B8 - Investigation Sector Four Door (Top half) -B9 - Investigation Sector Four Door (Bottom half) -BA - Area 51 Explodable container -BB - Investigation Metal chair -BC - Investigation Table -BD - BETA Investigation Microscope -BE - BETA Investigation Mainframe -BF - Investigation Laboratory door -C0 - Investigation Slide-up door from laboratory (Top half) -C1 - Ammocrate -C2 - Cassandra De Vries Necklace -C3 - Temple Door -C4 - Carrington Institute Blue Sofa (With mirror image) -C5 - Carrington Institute Lift -C6 - Carrington Institute Glass door (Lift, Firing Range) -C7 - Laser beam -C8 - Skedar shuttle -C9 - BETA Villa Pane of glass with wooden frame -CA - Skedar Ruins Royal Chamber Left side ceiling pillar/stone block -CB - Skedar Ruins Royal Chamber Right side ceiling pillar/stone block -CC - Skedar Ruins Statue relic from last boss (Centre part) -CD - Skedar Ruins Statue relic from last boss (Middle left part) -CE - Skedar Ruins Statue relic from last boss (Middle right part) -CF - Skedar Ruins Statue relic from last boss (Base left part) -D0 - Skedar Ruins Statue relic from last boss (Base right part) -D1 - Skedar Ruins Shaded floor piece (Centre part) -D2 - Skedar Ruins Shaded floor piece (Middle left part) -D3 - Skedar Ruins Shaded floor piece (Middle right part) -D4 - Skedar Ruins Shaded floor piece (Base left part) -D5 - Skedar Ruins Shaded floor piece (Base right part) -D6 - Skedar Ruins Unshaded floor piece (Centre part) -D7 - Skedar Ruins Unshaded floor piece (Middle left part) -D8 - Skedar Ruins Unshaded floor piece (Middle right part) -D9 - Skedar Ruins Unshaded floor piece (Base left part) -DA - Skedar Ruins Unshaded floor piece (Base right part) -DB - Skedar Ruins Pillar 1 -DC - Skedar Ruins Pillar 2 -DD - Skedar Ruins Pillar 3 -DE - Skedar Ruins Shaded floor piece near pillar at begining of level -DF - Skedar Ruins Shaded wall piece near pillar at begining of level -E0 - Skedar Ruins Unshaded floor piece near pillar at begining of level -E1 - Skedar Ruins Unshaded wall piece near pillar at begining of level -E2 - Metal barrel -E3 - Grid Glass floor -E4 - Air Base Escalator step -E5 - Grid Lift -E6 - Skedar Ruins Rubble 1 (Wall) -E7 - Skedar Ruins Rubble 2 (Pillar) -E8 - Skedar Ruins Rubble 3 (Stone) -E9 - Skedar Ruins Rubble 4 (Small pillar) -EA - Air Base Intro Cable car -EB - Maian UFO -EC - Air Base Stewardesses Bag -ED - Air Base Small lift leading to hanger -EE - Air Base Diagonal lift -EF - Air Base Safe door -F0 - Air Force One Pilots seat -F1 - Air Force One Passenger seat -F2 - BETA Chicago Limo -F3 - Nightvision Goggles -F4 - Shield -F5 - Falcon 2 -F6 - Magsec 4 -F7 - Mauler -F8 - DY357 Magnum -F9 - DY357-LX -FA - Phoenix -FB - Falcon 2 Silencer -FC - Falcon 2 Scope -FD - CMP150 -FE - AR34 -FF - Dragon -100 - SuperDragon -101 - K7 Avenger -102 - Cyclone -103 - Callisto NTG -104 - RCP-120 -105 - Laptop Gun -106 - Shotgun -107 - Reaper -108 - Rocket Launcher -109 - Devastator -10A - Slayer -10B - Farsight XR-20 -10C - Sniper Rifle -10D - Crossbow -10E - Tranquilizer / Psychosis Gun -10F - Combat Knife -110 - N-Bomb -111 - BETA Flashbang (Grenade from GoldenEye) -112 - Grenade -113 - Timed Mine -114 - Proximity Mine -115 - Remote Mine -116 - ECM Mine -117 - PP9i (PP7) -118 - CC13 (DD44) Dostovei. -119 - KLO1313 (Klobb) -11A - KF7 Special (KF7 Soviet) -11B - ZZT (9mm) (ZMG (9mm)) -11C - DMC (D5K) Deutsche -11D - AR53 (AR33) Assualt Rifle -11E - RC-P45 (RC-P90) -11F - Rocket -120 - Slayer Rocket -121 - Bolt -122 - Devastator Grenade -123 - SuperDragon Grenade -124 - Area 51 Infiltration Brown dronegun -125 - Pelagic II Door with window -126 - Area 51 AutoSurgeon -127 - Chicago dataDyne limo -128 - Area 51 Interceptor -129 - Area 51 Parabola dish -12A - BETA Area 51 Radar console -12B - Area 51 Locker door -12C - BETA G5 Building Dampening field generator -12D - BETA G5 Building Dumpster -12E - Cloaking device -12F - Combat boost pills -130 - Pelagic II Moon pool hanger door -131 - Skedar Ruins piece of pillar rubble -132 - Skedar Ruins piece of pillar rubble -133 - Skedar Ruins piece of pillar rubble -134 - Skedar Ruins piece of pillar rubble -135 - Air Base Baggage carrier -136 - BETA Area 51 Mine sign (With skull and crossbones on it) -137 - Area 51 Maian coffin from cyrolabs -138 - Investigation Radioactive isotope -139 - Investigation Radioactive isotope parts -13A - BETA Reactor Door (Round blue thing, like core hatch from Pelagic II) -13B - Crash Site Interior of Maian UFO -13C - Villa Stool that Carrington sits on -13D - Deep Sea Glass 1 -13E - Deep Sea Glass 2 (Add-on) -13F - Deep Sea Glass 3 (Add-on opposite) -140 - HorizonScanner -141 - Pelagic II Outro Moon pool submarine -142 - Air Force One (The actual plane) -143 - Attack Ship Engine part -144 - Deep Sea Ceiling dronegun -145 - BETA Deep Sea Small door -146 - Deep Sea Switch node (Shoot it to open doors) -147 - BETA Deep Sea Door (Left) -148 - BETA Deep Sea Door (Right) -149 - Attack Ship Computer terminal from the bridge -14A - Attack Ship Computer terminal panel from the bridge -14B - Blue grating panel -14C - Carrington Institute Firing Range Target board -14D - Carrington Institute Device lab secret door -14E - Carrington Institute Carrington's office secret door -14F - Investigation dataDyne PC -150 - Area 51 Records terminal (dataDyne PC on stand) -151 - BETA Keypad lock -152 - BETA Fingerprint scanner -153 - BETA Retina lock -154 - BETA Card lock -155 - Air Force One Button on stand -156 - Carrington Institute / Villa PC -157 - Laptop Sentry dronegun -158 - G5 Building Special Big chair -159 - G5 Building Special Small chair -15A - Skedar Kings holy sceptre (Big King Rocket image) -15B - Area 51 Lab cloths -15C - BETA Carrington Institute Door -15D - G5 Building Special Chair -15E - G5 Building Special Small chair with top missing -15F - dataDyne Building Foyer pane of glass -160 - BETA Carrington Institute Cabinet -161 - BETA Carrington Institute Desk -162 - BETA Carrington Institute Desk 2 -163 - BETA Carrington Institute Leather Armchair -164 - BETA Carrington Institute Leather Bed -165 - BETA Carrington Institute Leather Sofa -166 - BETA Carrington Institute Table -167 - Villa Coffee table -168 - Villa Chair -169 - BETA Villa Armchair -16A - Villa Sofa -16B - Villa Chair 2 -16C - BETA Villa Cabinet with lamp -16D - Villa Side cabinet -16E - Villa Double bed -16F - BETA Pelagic II Chair -170 - Attack Ship Computer console -171 - BETA Investigation Table -172 - BETA Investigation Chair -173 - Air Base Table -174 - BETA Air Base Chair -175 - BETA White Box -176 - Metal Crate -177 - IR scanner googles -178 - Area 51 Wall Dronegun -179 - BETA Skedar Dronegun -17A - Carrington Institute Dronegun -17B - Villa Wooden table -17C - dataDyne Building Door -17D - BETA Air Base Door -17E - BETA Air Base Door 2 -17F - Chicago Wire fence -180 - Rareware logo -181 - Keycard -182 - BETA Body armour (Looks like the one from GoldenEye) -183 - Area 51 Infiltration Inner area big slide door (Right) -184 - Area 51 Infiltration Inner area big slide door (Left) -185 - Air Force One Lamp -186 - Air Force One Toilet -187 - Air Force One Big door -188 - Air Force One Phone -189 - BETA Air Force One Cargo door -18A - G5 Building Alarm -18B - G5 Building Laser switch -18C - Skedar Ruins Pillar 4 -18D - Pelagic II Power core hatch -18E - Area 51 Grate / Pane of glass with white stripes -18F - Air Force One Escape door -190 - Presidential Escape Pod -191 - Skedar Ruins Bridge -192 - Pelagic II Door with no window -193 - BETA Touch That Box, Box -194 - Carrington Institute Front door -195 - Laser -196 - G5 Building BAFTA Award -197 - Area 51 Rescue Outro Surgeons dissection laser -198 - Crash Site Outro Elvis's hammer (Small size) -199 - Area 51 Infiltration Explosives -19A - dataDyne Building Mr. Blonde's Revenge Skedar bomb -19B - Dr. Caroll's Backup disk -19C - Air Base Flight plans -19D - R-Tracker -19E - X-ray Scanner -19F - Crash Site Outro Elvis's hammer (Big size) -1A0 - Camspy, Drugspy, Bombspy -1A1 - Door Decoder -1A2 - Air Force One Table -1A3 - Air Base Air Force Ones private loader door -1A4 - Skedar Ruins Backdrop -1A5 - Carrington Institute Secret Device training door -1A6 - Carrington Institute Defense Sensitive information -1A7 - BETA Suitcase -1A8 - Skedar Ruins Push-block to activate bridge -1A9 - Area 51 Lift bars/door -1AA - Carrington Institute Switch -1AB - Attack Ship Blue door -1AC - Attack Ship Window -1AD - Attack Ship Hanger door (Top half) -1AE - Attack Ship Hanger door (Bottom half) -1AF - Air Force One Inner door -1B0 - BETA Laser post -1B1 - Skedar Ruins Target Amplifier -1B2 - Attack Ship Lift -1B3 - Carrington Institute Defense Smashed front door -1B4 - Deep Sea Slide-up door -1B5 - Air Force One Drop vent rubble (looks like Skedar Ruins pillar) -1B6 - dataDyne Building Small door / Felicity Door -1B7 - Deep Sea Slide door -1B8 - Skedar Ruins Buddy Bridge -End - - -In-game object list: (sorted by level) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The values on this list are sorted by level. If any object only appears in ONE -level, you'll find it there. - -Misc Items: -02 - Tv Screen -03 - BETA Borg Crate -04 - Pane of glass -05 - Metal Crate -06 - Metal Crate -07 - Metal Crate -08 - Metal Crate -09 - Metal Crate -0A - Metal Crate -0B - Metal Crate -0C - Metal Crate -0D - Metal Crate -0E - Metal Crate -0F - Metal Crate -10 - BETA Door -14 - Nintendo Logo -15 - Metal Panel -18 - BETA GoldenEye Terminal -20 - Metal Crate -21 - Metal Crate (Blue tint) -22 - Metal Crate (Brown tint) -34 - BETA Multicoloured box -3A - Hoverbike -3C - Pot plant (Rubber plant) -3D - Pot plant (Spider plant) -3E - Pot plant (Spike plant) -48 - Changing N logo -49 - Changing N logo 2 -4A - Changing N logo 3 -4B - Perfect Dark Logo -4C - Perfect Dark Logo 1 -4D - Perfect Dark Logo 2 -4E - Perfect Dark Logo 3 -4F - Perfect Dark Logo 4 -50 - Hovercop -51 - Hovermoto -52 - Hovertruck -53 - Hovercar -54 - Hovercab -59 - Blue computer -5A - Hovercrate -5B - Carrington Institute Drop ship (Villa, Defense) -5E - Case -76 - BETA Skedar fighter ship -77 - Secret Skedar Army pod door (Top half) -78 - Secret Skedar Army pod door (Bottom half) -8C - Hoverbot (Orange) -8D - Hoverbot (White/blue) -9C - Laser Beam door / block -AF - Security Camera -B0 - Communications Hub -B2 - Blue computer terminal -B3 - Red grate/panel -B5 - Light switch -C7 - Laser beam -C8 - Skedar shuttle -E2 - Metal barrel -EB - Maian UFO -14B - Blue grating panel -151 - BETA Keypad lock -152 - BETA Fingerprint scanner -153 - BETA Retina lock -154 - BETA Card lock -156 - Carrington Institute / Villa PC -175 - BETA White Box -176 - Metal Crate -179 - BETA Skedar Dronegun -180 - Rareware logo -190 - Presidential Escape Pod -193 - BETA Touch That Box, Box -1A7 - BETA Unknown Object -1B0 - BETA Laser post -13A - BETA Reactor Door (Round blue thing, like core hatch from Pelagic II) - -Weapon Images: -F5 - Falcon 2 -F6 - Magsec 4 -F7 - Mauler -F8 - DY357 Magnum -F9 - DY357-LX -FA - Phoenix -FB - Falcon 2 Silencer -FC - Falcon 2 Scope -FD - CMP150 -FE - AR34 -FF - Dragon -100 - SuperDragon -101 - K7 Avenger -102 - Cyclone -103 - Callisto NTG -104 - RCP-120 -105 - Laptop Gun -106 - Shotgun -107 - Reaper -108 - Rocket Launcher -109 - Devastator -10A - Slayer -10B - Farsight XR-20 -10C - Sniper Rifle -10D - Crossbow -10E - Tranquilizer / Psychosis Gun -10F - Combat Knife -110 - N-Bomb -111 - BETA Flashbang (Grenade from GoldenEye) -112 - Grenade -113 - Timed Mine -114 - Proximity Mine -115 - Remote Mine -116 - ECM Mine -117 - PP9i (PP7) -118 - CC13 (DD44) Dostovei. -119 - KLO1313 (Klobb) -11A - KF7 Special (KF7 Soviet) -11B - ZZT (9mm) (ZMG (9mm)) -11C - DMC (D5K) Deutsche -11D - AR53 (AR33) Assualt Rifle -11E - RC-P45 (RC-P90) -11F - Rocket -120 - Slayer Rocket -121 - Bolt -122 - Devastator Grenade -123 - SuperDragon Grenade -15A - Skedar Kings holy sceptre (Big King Rocket image) -195 - Laser - -Pick-up Items: -11 - Briefcase -13 - Data Uplink -16 - BETA Flag from GoldenEye -C1 - Ammocrate -C2 - Cassandra De Vries Necklace -F3 - Nightvision Goggles -F4 - Shield -12E - Cloaking device -12F - Combat boost pills -140 - HorizonScanner -157 - Laptop Sentry dronegun -177 - IR scanner googles -181 - Keycard -182 - BETA Body armour (Looks like the one from GoldenEye) -19B - Dr. Caroll's Backup disk -19D - R-Tracker -19E - X-ray Scanner -1A0 - Camspy, Drugspy, Bombspy -1A1 - Door Decoder - -Multiplayer Items: -88 - Ravine Lift -C3 - Temple Door -E3 - Grid Glass floor -E5 - Grid Lift - -dataDyne Building Items: -37 - dataDyne Building Lift -38 - dataDyne Building Roof fan -39 - dataDyne Building Wall fan -3B - dataDyne Building Office door -3F - dataDyne Building Window glass -40 - dataDyne Building Sofa -41 - dataDyne Building Armchair -42 - dataDyne Building Service door -43 - dataDyne Building Grating door -44 - dataDyne Building Lift door -45 - dataDyne Building Vertical blind -46 - dataDyne Building Desk -47 - dataDyne Building Desk chair -55 - dataDyne Building Hole-in-tube unexploded -56 - dataDyne Building Hole-in-tube frame -57 - dataDyne Building Hole-in-wall unexploded -58 - dataDyne Building Hole-in-wall frame -5F - dataDyne Building Cassandra's desk -82 - dataDyne Building Slide door -83 - dataDyne Building Secret Door 1 -84 - dataDyne Building Secret door 2 -85 - dataDyne Building CI Jumpship from Defection Intro and Extraction Outro -97 - dataDyne Building Extraction Hovercopter -9E - dataDyne Building Defection Intro Rope -A7 - dataDyne Building Rooftop banner -B1 - dataDyne Building Rocket Launcher stand -B6 - dataDyne Building Extraction Blue blast shield -B7 - dataDyne Building Light switch -15F - dataDyne Building Foyer pane of glass -17C - dataDyne Building Door -19A - dataDyne Building Mr. Blonde's Revenge Skedar bomb -1B6 - dataDyne Building Small door / Felicity Door - -Investigation Items: -00 - Investigation Ceiling dronegun -89 - BETA Investigation Door -8A - Investigation Secret door that only the Hoverbot can open -8B - Investigation Sector One Door -8E - Investigation Sector Two Slide-down door (Bottom half) -8F - Investigation Sector Two Slide-up door (Top half) -90 - Investigation Slide-up door with caution sign (Top half) -91 - Investigation Slide-up door with hazardous sign (Top half) -92 - Investigation Door with caution sign and window -93 - Investigation Dr.Caroll Door -94 - Investigation Sector Three Slide-up door (Top half) -95 - Investigation Sector Three Door -96 - Investigation Sector Three Door with window -98 - Investigation Sector Four Slide-up door (Top half) -99 - Investigation Slide-up door with restricted sign (Top half) -A0 - Investigation Dr.Caroll Door (Base) -A1 - Investigation Dr.Caroll Door (Main) -A2 - Investigation Dr.Caroll Door (Left) -A3 - Investigation Dr.Caroll Door (Right) -A4 - Investigation Dr.Caroll Door (Base Main) -A5 - Investigation Dr.Caroll Door (Base Left) -A6 - Investigation Dr.Caroll Door (Base Right) -B4 - Investigation Lift -B8 - Investigation Sector Four Door (Top half) -B9 - Investigation Sector Four Door (Bottom half) -BB - Investigation Metal chair -BC - Investigation Table -BD - BETA Investigation Microscope -BE - BETA Investigation Mainframe -BF - Investigation Laboratory door -C0 - Investigation Slide-up door from laboratory (Top half) -138 - Investigation Radioactive isotope -139 - Investigation Radioactive isotope parts -14F - Investigation dataDyne PC -171 - BETA Investigation Table -172 - BETA Investigation Chair - -Villa Items: -28 - BETA Villa Door -29 - Villa Wooden door -2A - BETA Villa Wooden slide door -2F - Villa Wine Bottle (Green) -30 - Villa Wine Bottle (Red) -31 - Villa Wine Bottle (Red, not JUNG brand) -32 - Villa Windmill propellar -C9 - BETA Villa Pane of glass with wooden frame -13C - Villa Stool that Carrington sits on -167 - Villa Coffee table -168 - Villa Chair -169 - BETA Villa Armchair -16A - Villa Sofa -16B - Villa Chair 2 -16C - BETA Villa Cabinet with lamp -16D - Villa Side cabinet -16E - Villa Double bed -17B - Villa Wooden table - -Chicago Items: -12 - Chicago Tracer bug -86 - Chicago Hovertaxi -87 - Chicago Intro Police hovercar -AC - Chicago Dumpster -AD - Chicago Unopened fire door -AE - Chicago Metal shutter -F2 - BETA Chicago Limo -127 - Chicago dataDyne limo -17F - Chicago Wire fence - -G5 Building Items: -7D - G5 Building Slide open door with window -7E - G5 Building Part of fire door -7F - G5 Building Part of fire door -80 - G5 Building Part of fire door (Middle piece) -81 - G5 Building Slide open door without window -9A - G5 Building Slide door with dataDyne logo -9B - G5 Building Slide door with dataDyne logo -9D - G5 Building Vault door -9F - G5 Building Mainframe -A8 - G5 Building Upper hole-in-wall unexploded -A9 - G5 Building Upper hole-in-wall frame -AA - G5 Building Lower hole-in-wall unexploded -AB - G5 Building Lower hole-in-wall frame -12C - BETA G5 Building Dampening field generator -12D - BETA G5 Building Dumpster -158 - G5 Building Special Big chair -159 - G5 Building Special Small chair -15D - G5 Building Special Chair -15E - G5 Building Special Small chair with top missing -18A - G5 Building Alarm -18B - G5 Building Laser switch -196 - G5 Building BAFTA Award - -Area 51 Items: -17 - Area 51 Control Panel / Button -19 - Area 51 Square Door (Top part) -1A - Area 51 Square Door (Bottom part) -1B - Area 51 Door (Left) -1C - Area 51 Door (Right) -1D - Area 51 Door -1E - Area 51 Door with glass window -1F - Area 51 Brown door -23 - Area 51 Hole-in-wall frame -24 - Area 51 Wall you blow up (With X on) -25 - Area 51 Hole-in-wall frame -26 - Area 51 Wall you blow up (Laboratory side) -27 - Area 51 Hole-in-wall frame (Before blown up) -2B - Area 51 Hanger lift -2C - Area 51 Small lift from hanger -2D - Area 51 Storage lift 1 -2E - Area 51 Storage lift 2 -33 - Area 51 Elvis on hoverbed -60 - Area 51 Pane of glass with yellow/black caution stripes 1 -61 - Area 51 Pane of glass with yellow/black caution stripes 2 -62 - Area 51 Table -63 - BETA Area 51 Chair -64 - BETA Area 51 Screen -65 - Area 51 Trashcan -66 - Area 51 Entrance hall desk -67 - Area 51 Empty hoverbed -68 - Area 51 Office divider (Peachy coloured) -69 - Area 51 Bulletin board with Maian pictures -BA - Area 51 Explodable container -124 - Area 51 Infiltration Brown dronegun -126 - Area 51 AutoSurgeon -128 - Area 51 Interceptor -129 - Area 51 Parabola dish -12A - BETA Area 51 Radar console -12B - Area 51 Locker door -136 - BETA Area 51 Mine sign (With skull and crossbones on it) -137 - Area 51 Maian coffin from cyrolabs -150 - Area 51 Records terminal (dataDyne PC on stand) -15B - Area 51 Lab cloths -178 - Area 51 Wall Dronegun -183 - Area 51 Infiltration Inner area big slide door (Right) -184 - Area 51 Infiltration Inner area big slide door (Left) -18E - Area 51 Grate / Pane of glass with white stripes -197 - Area 51 Rescue Outro Surgeons dissection laser -199 - Area 51 Infiltration Explosives -1A9 - Area 51 Lift bars/door - -Air Base Items: -E4 - Air Base Escalator step -EA - Air Base Intro Cable car -EC - Air Base Stewardesses Bag -ED - Air Base Small lift leading to hanger -EE - Air Base Diagonal lift -EF - Air Base Safe door -135 - Air Base Baggage carrier -173 - Air Base Table -174 - BETA Air Base Chair -17D - BETA Air Base Door -17E - BETA Air Base Door 2 -19C - Air Base Flight plans -1A3 - Air Base Air Force Ones private loader door - -Air Force One Items: -F0 - Air Force One Pilots seat -F1 - Air Force One Passenger seat -142 - Air Force One (The actual plane) -155 - Air Force One Button on stand -185 - Air Force One Lamp -186 - Air Force One Toilet -187 - Air Force One Big door -188 - Air Force One Phone -189 - BETA Air Force One Cargo door -18F - Air Force One Escape door -1A2 - Air Force One Table -1AF - Air Force One Inner door -1B5 - Air Force One Drop vent rubble (looks like Skedar Ruins pillar) - -Crash Site Items: -01 - Crash Site Green Drone Gun -13B - Crash Site Interior of Maian UFO -19F - Crash Site Outro Elvis's hammer (Big size) -198 - Crash Site Outro Elvis's hammer (Small size) - -Pelagic II Items: -125 - Pelagic II Door with window -130 - Pelagic II Moon pool hanger door -141 - Pelagic II Outro Moon pool submarine -16F - BETA Pelagic II Chair -18D - Pelagic II Power core hatch -192 - Pelagic II Door with no window - -Deep Sea Items: -35 - Deep Sea Door (Right) -36 - Deep Sea Door (Left) -5C - Deep Sea Door from beginning of level -5D - Deep Sea Lift -13D - Deep Sea Glass 1 -13E - Deep Sea Glass 2 (Add-on) -13F - Deep Sea Glass 3 (Add-on opposite) -144 - Deep Sea Ceiling dronegun -145 - BETA Deep Sea Small door -146 - Deep Sea Switch node (Shoot it to open doors) -147 - BETA Deep Sea Door (Left) -148 - BETA Deep Sea Door (Right) -1B4 - Deep Sea Slide-up door -1B7 - Deep Sea Slide door - -Carrington Institute Items: -C4 - Carrington Institute Blue Sofa (With mirror image) -C5 - Carrington Institute Lift -C6 - Carrington Institute Glass door (Lift, Firing Range) -14C - Carrington Institute Firing Range Target board -14D - Carrington Institute Device lab secret door -14E - Carrington Institute Carrington's office secret door -15C - BETA Carrington Institute Door -160 - BETA Carrington Institute Cabinet -161 - BETA Carrington Institute Desk -162 - BETA Carrington Institute Desk 2 -163 - BETA Carrington Institute Leather Armchair -164 - BETA Carrington Institute Leather Bed -165 - BETA Carrington Institute Leather Sofa -166 - BETA Carrington Institute Table -17A - Carrington Institute Dronegun -194 - Carrington Institute Front door -1A5 - Carrington Institute Secret Device training door -1A6 - Carrington Institute Defense Sensitive information -1AA - Carrington Institute Switch -1B3 - Carrington Institute Defense Smashed front door - -Attack Ship Items: -6F - Attack Ship Yellow slide door -70 - Attack Ship Holographic star map -71 - Attack Ship Holographic star map -72 - Attack Ship Hanger hull door part 1 -73 - Attack Ship Hanger hull door part 2 -74 - Attack Ship Hanger hull door part 3 -75 - Attack Ship Hanger hull door part 4 -7B - Attack Ship Hanger door (Top half) -7C - Attack Ship Hanger door (Bottom half) -143 - Attack Ship Engine part -149 - Attack Ship Computer terminal from the bridge -14A - Attack Ship Computer terminal panel from the bridge -170 - Attack Ship Computer console -1AB - Attack Ship Blue door -1AC - Attack Ship Window -1AD - Attack Ship Hanger door (Top half) -1AE - Attack Ship Hanger door (Bottom half) -1B2 - Attack Ship Lift - -Skedar Ruins Items: -6A - Skedar Ruins Canyon wall after blowing up rock -6B - Skedar Ruins Canyon rock -6C - Skedar Ruins Hole-in-wall frame -6D - Skedar Ruins Hole-in-wall unexploded -6E - Skedar Ruins Door -79 - Skedar Ruins Spinning power generator pillar -7A - Skedar Ruins Rolling round pillar -CA - Skedar Ruins Royal Chamber Left side ceiling pillar/stone block -CB - Skedar Ruins Royal Chamber Right side ceiling pillar/stone block -CC - Skedar Ruins Statue relic from last boss (Centre part) -CD - Skedar Ruins Statue relic from last boss (Middle left part) -CE - Skedar Ruins Statue relic from last boss (Middle right part) -CF - Skedar Ruins Statue relic from last boss (Base left part) -D0 - Skedar Ruins Statue relic from last boss (Base right part) -D1 - Skedar Ruins Shaded floor piece (Centre part) -D2 - Skedar Ruins Shaded floor piece (Middle left part) -D3 - Skedar Ruins Shaded floor piece (Middle right part) -D4 - Skedar Ruins Shaded floor piece (Base left part) -D5 - Skedar Ruins Shaded floor piece (Base right part) -D6 - Skedar Ruins Unshaded floor piece (Centre part) -D7 - Skedar Ruins Unshaded floor piece (Middle left part) -D8 - Skedar Ruins Unshaded floor piece (Middle right part) -D9 - Skedar Ruins Unshaded floor piece (Base left part) -DA - Skedar Ruins Unshaded floor piece (Base right part) -DB - Skedar Ruins Pillar 1 -DC - Skedar Ruins Pillar 2 -DD - Skedar Ruins Pillar 3 -DE - Skedar Ruins Shaded floor piece near pillar at begining of level -DF - Skedar Ruins Shaded wall piece near pillar at begining of level -E0 - Skedar Ruins Unshaded floor piece near pillar at begining of level -E1 - Skedar Ruins Unshaded wall piece near pillar at begining of level -E6 - Skedar Ruins Rubble 1 (Wall) -E7 - Skedar Ruins Rubble 2 (Pillar) -E8 - Skedar Ruins Rubble 3 (Stone) -E9 - Skedar Ruins Rubble 4 (Small pillar) -131 - Skedar Ruins piece of pillar rubble -132 - Skedar Ruins piece of pillar rubble -133 - Skedar Ruins piece of pillar rubble -134 - Skedar Ruins piece of pillar rubble -18C - Skedar Ruins Pillar 4 -191 - Skedar Ruins Bridge -1A4 - Skedar Ruins Backdrop -1A8 - Skedar Ruins Push-block to activate bridge -1B1 - Skedar Ruins Target Amplifier -1B8 - Skedar Ruins Buddy Bridge -End - - -Costume list: -~~~~~~~~~~~~~ -The costume list contains the heads and bodies used for enemies and players. -These values are used in-game in a body+head 16bit format. To give an example, -Cassandra's head is 0E, and her body is 66. To locate Cassandra de Vries -in-game do a search for 660E. Some bodies can't have heads put on them, and -can't be used as player bodies (but can be used as sim bodies). These bodies -are Skedar, Dr. Caroll, Camspy, Test body, G5 Sentry Robot, Mini Skedar and -Skedar King. The head value of these bodies is FF, so the Skedar King would be -93FF. FF is also random heads. Part of the costume list is located at NTSC -8007CF06 and PAL 8007D3D6. The list at this address uses the costume values -from the global object list. By modifying the values here you change a costume -image throughout the game (with the exception of during cut-scenes). - -Heads: -04 - Joanna Combat head -05 - Elvis head -06 - Enemy head (Ross) -07 - Daniel Carrington head -08 - Mr. Blonde head -09 - Trent Easton head -0A - Shock Trooper mask -0B - Enemy head (Graham) -0C - Joanna Frock head -0D - dataDyne Secretary head -0E - Cassandra De Vries head -0F - Maian head -10 - Female Enemy head -11 - Enemy head (Jon) -12 - Grimshaw head (Mark2) -13 - Foster head (Christ) -14 - Enemy head (Russ) -15 - BETA head (Grey) -16 - Enemy head (Darling) -17 - Enemy head (Robert) -18 - Enemy head (Beau) -19 - Female Enemy head -1A - Enemy head (Brian) -1B - Enemy head (Jamie) -1C - Enemy head (Duncan) -1D - Biotechnician mask -1E - Enemy head (Neil) -1F - Enemy head (Edmcg) -20 - Female Enemy head (Anka) -21 - Female Enemy head (Leslie) -22 - Enemy head (Matt) -23 - Enemy head (Peer) -24 - Female Enemy head (Eileen) -25 - Enemy head (Andy) -26 - Enemy head (Ben) -27 - Enemy head (Steve) -28 - Jonathan head -29 - Maian Soldier head -2A - Enemy head (Shaun) -2B - Enemy head (Beau) -2C - Female Enemy head (Eileen) -2D - Enemy head (Scott) -2E - Enemy head (Sanchez) -2F - Joanna Scuba head -30 - Sniper mask -31 - Enemy head (Beau) -32 - Enemy head (Beau) -33 - Enemy head (Beau) -34 - Enemy head (Beau) -35 - Enemy head (Griffey) -36 - Shigeru Miyamoto head -37 - Enemy head (Keith) -38 - Enemy head (Winner) -39 - Area 51 gas mask -3A - Elvis Scuba mask -3B - Enemy head (Stevem) -3C - Joanna Artic head -3D - The President's head -3E - Velvet Dark head -3F - Enemy head (Ken) -40 - Enemy head (Joel) -41 - Enemy head (Tim) -42 - Enemy head (Grant) -43 - Enemy head (Penny) -44 - Enemy head (Robin) -45 - Female Enemy head (Alex) -46 - Female Enemy head (Julianne) -47 - Female Enemy head (Laura) -48 - Enemy head (Davec) -49 - Enemy head (Cook) -4A - Enemy head (Pryce) -4B - Enemy head (Silke) -4C - Enemy head (Smith) -4D - Enemy head (Gareth) -4E - Enemy head (Murchie) -4F - Enemy head (Wong) -50 - Enemy head (Carter) -51 - Enemy head (Tintin) -52 - Enemy head (Munton) -53 - Enemy head (Stamper) -54 - Enemy head (Jones) -55 - Enemy head (Phelps) -FF - Default \ Random - -Bodies: -00 - Dinner Jacket Half open (Djbond) -01 - Dinner Jacket White tuxedo (Connery) -02 - Dinner Jacket Suit done open (Dalton) -03 - Dinner Jacket Suit undone (Moore) -56 - Joanna Combat -57 - Maian -58 - Area 51 Guard -59 - Overalls -5A - Daniel Carrington -5B - Mr. Blonde -5C - Skedar (Don't use as player) -5D - Trent Easton -5E - dataDyne Shock Trooper -5F - Male Lab Technician -60 - NSA Bodyguard -61 - Joanna Party Frock -62 - Joanna Trench coat -63 - Office Casual -64 - Office Suit -65 - Secretary -66 - Cassandra De Vries -67 - Elvis -68 - dataDyne Female Guard -69 - dataDyne Lab Technician -6A - dataDyne Security -6B - Dr. Caroll (Don't use as player) -6C - Camspy, Drugspy, Bombspy (Don't use as player) -6D - Joanna Frock (Ripped) -6E - dataDyne Infantry -6F - dataDyne Trooper -70 - Test body (small and distorted Trent Easton Body) (Don't use as player) -71 - Biotechnician -72 - FBI Agent -73 - CIA Agent -74 - Area 51 Trooper -75 - Pilot -76 - G5 Sentry Bot (Don't use as player) -77 - Steward -78 - Stewardess -79 - The President -7A - Head Stewardess -7B - Mini Skedar (Don't use as player) -7C - NSA Lackey -7D - Presidential Security -7E - Negotiator -7F - G5 Guard -80 - Pelagic II Guard -81 - G5 SWAT Guard -82 - Alaskan Guard -83 - Maian -84 - Presidents Clone -85 - Presidents Clone -86 - Joanna Stewardess -87 - Joanna Wet Suit -88 - Joanna Aqualung -89 - Joanna Arctic -8A - Female Lab Technician -8B - Joanna Lab Tech -8C - dataDyne Sniper -8D - Air Force One Pilot -8E - CI Male Lab Technician -8F - CI Female Lab Technician -90 - Carrington Evening Wear -91 - Area 51 Guard -92 - CI Soldier -93 - Skedar King (Don't use as player) -94 - Elvis with America T-shirt -95 - Joanna Leather -96 - Joanna Negotiator -End - - -Perfect Dark Weapon type list: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The weapon type list contains weapon attributes. Weapons have an image and an -attribute value. The attribute value is stored in a XX00 16bit format, where XX -is a value from the list. The list can be found somewhere around 8006XXXX, and -can be found by searching for the weapon player file and reloader file from the -global object list. By manipulating the values on the list you find, you can -change one weapon into a different weapon. - -00 - Unarmed -01 - Nothing -02 - Falcon 2 -03 - Falcon 2 (Silencer) -04 - Falcon 2 (Scope) -05 - Magsec 4 -06 - Mauler -07 - Phoenix -08 - DY357 Magnum -09 - DY357-LX -0A - CMP150 -0B - Cyclone -0C - Callisto NTG -0D - RC-P120 -0E - Laptop Gun -0F - Dragon -10 - K7 Avenger -11 - AR34 -12 - SuperDragon -13 - Shotgun -14 - Reaper -15 - Sniper Rifle -16 - Farsight XR-20 -17 - Devestator -18 - Rocket Launcher -19 - Slayer -1A - Combat Knife -1B - Crossbow -1C - Tranquilizer -1D - Laser -1E - Grenade -1F - N-Bomb -20 - Timed Mine -21 - Proximity Mine -22 - Remote Mine -23 - Combat Boost -24 - PP9i (PP7) -25 - CC13 (DD44) Dostovei. -26 - KLO1313 (Klobb) -27 - KF7 Special (KF7 Soviet) -28 - ZZT (9mm) (ZMG (9mm)) -29 - DMC (D5K) Deutsche -2A - AR53 (AR33) Assualt Rifle -2B - RC-P45 (RC-P90) -2C - Pyschosis Gun -2D - Nightvision Goggles -2E - Camspy -2F - X-ray Scanner -30 - IR-Scanner -31 - Cloaking Device -32 - Horizon Scanner -33 - Tester -34 - Big King Rocket -35 - ECM Mine -36 - Data Uplink -37 - R-Tracker -38 - President Scanner -39 - Door Decoder -3A - AutoSurgeon -3B - Explosives -3C - Skedar Bomb -3D - Comms Rider -3E - Tracer Bug -3F - Disguise -40 - Target Amplifier -41 - Disguise -42 - Flight Plans -43 - Research Tape -44 - Backup Disk -45 - Key Card -46 - Key Card -47 - Key Card -48 - Key Card -49 - Key Card -4A - Key Card -4B - Key Card -4C - Key Card -4D - Suitcase -4E - Briefcase -4F - Solo Shield -50 - Necklace -51 - Nothing -52 - Nothing -53 - Rocket -54 - Homing Rocket -55 - Grenade Round -56 - Bolt -57 - The Breifcase (From Multiplayer) -58 - Slayer Rocket -59 - AR27-BETA (Need to pick up double in order to use) -5A - SMG27-BETA (Need to pick up double in order to use) -5B - Multiplayer Shield -5C - Multiplayer Disabled -5D - Suicide pill -End - - -Ammo type list: -~~~~~~~~~~~~~~~ -00 - Nothing -01 - Pistol ammo -02 - Sub-machine gun ammo -03 - Crossbow bolts -04 - Assult rifle ammo -05 - Shotgun cartridges -06 - Farsight orbs -07 - Grenades -08 - Rockets -09 - Combat knives -0A - Magnum / LX bullets -0B - Devestator grenade rounds -0C - Remote mines -0D - Proximity mines -0E - Timed mines -0F - Reaper ammo -10 - BETA Homing rockets -11 - BETA Darts -12 - N-Bombs -13 - Sedatives -End - - -Object type list: -~~~~~~~~~~~~~~~~~ -Albeight somewhat imcomplete, these are the object types I have identified so -far. - -00 - ? -01 - Door -02 - ? -03 - Object -04 - ? -05 - ? -06 - ? -07 - ? -08 - Weapon -09 - Solo enemy? -0A - Turn door into object (works in cheating devices, doesn't eat up the next - object) -0B - Solo enemy? (Turn door into this to get a solo enemy) -0C - ? -0D - Dronegun -0E - ? -0F - Skedar Ruins pillar -10 - ? -11 - ? -12 - ? -13 - ? -14 - Ammo crate -15 - ? -16 - ? -17 - ? -18 - ? -19 - ? -1A - ? -1B - ? -1C - ? -1D - ? -1E - ? -1F - ? -20 - ? -21 - ? -22 - ? -23 - ? -24 - ? -25 - ? -26 - ? -27 - ? -28 - ? -29 - ? -2A - ? -2B - ? -2C - ? -2D - ? -2E - ? -2F - ? -30 - Lift -31 - ? -32 - ? -33 - Hoverbike -34 - ? (Deletes everything that comes after it) -35 - Hovercrate -36 - Rotating object (Used on the spinning pillars in Skedar Ruins) -37 - ? -38 - ? -39 - Freeze -More? - - -Text lists: -~~~~~~~~~~~ -Almost all the text in the game is stored in the text files with the format -LxxxE, found on the global object list. These text files contains sets of text -strings that are used either in solo missions, or in the menus. Not all text -files have text. The text files can be arranged in a list in such a way that -you can easily see what their text string values will begin with. - -Values - File name - Text Value - Text Type - -0570 LameE 02XX Defection -0577 LarchE 04XX -0585 LarkE 06XX Extraction -058C LashE 08XX -059A LaztE 0AXX Crash Site -05A1 LcatE 0CXX -05A8 LcaveE 0EXX Air Base -057E LarecE 10XX -05AF LcradE 12XX -05B6 LcrypE 14XX -05BD LdamE 16XX Pelagic II -05C4 LdepoE 18XX G5 Building (Solo) -05CB LdestE 1AXX -05D2 LdishE 1CXX CI Training -05D9 LearE 1EXX Investigation -05E0 LeldE 20XX Villa -05EE LimpE 22XX Defense -05F5 LjunE 24XX -0603 LleeE 26XX Attack Ship -060A LlenE 28XX -0611 LlipE 2AXX Rescue -0618 LlueE 2CXX Infiltration -06C0 LoatE 2EXX -06D5 LpamE 30XX Deep Sea -06DC LpeteE 32XX Chicago -06EA LrefE 34XX -06F1 LritE 36XX Air Force One -06F8 LrunE 38XX -0706 LsevbE 3AXX Retaking the Institute -06FF LsevE 3CXX Maian SOS -070D LsevxE 3EXX -0714 LsevxbE 40XX -071B LshoE 42XX Skedar Ruins -0722 LsiloE 44XX -0729 LstatE 46XX WAR! -0737 LtraE 48XX Escape -0745 LwaxE 4AXX Mr. Blondes Revenge -05E7 LgunE 4CXX Guns and items -0730 LtitleE 4EXX End Credits -06B2 LmpmenuE 50XX Multiplayer menu -06E3 LpropobjE 52XX Object names -06B9 LmpweaponsE 54XX Cheats and misc -06CE LoptionsE 56XX Misc -061F LmiscE 58XX Push Button Codes and misc -073E LuffE 5AXX -06C7 LoldE 5CXX -0593 LateE 5EXX Duel - -The text from a specific text file can only be used when it has been loaded -into the memory. The menu's text files are always loaded into the memory, so -their text strings always work. Solo mission text files are loaded into the -memory when a solo level is loaded. The following code can be used to view any -text string, providing you select the correct solo mission from the Solo -Mission menu. - -Text string viewer: (Viewed in any briefing) -NTSC PAL -8109DFC8 XXXX 8109E568 XXXX - -The text string values are mainly used to locate menu codes and view BETA text. -They can also be used to locate certain menu lists, like the multiplayer arena -list, or soundtrack list. These lists can be modified so that you can change -what's loaded, and the name of what's loaded. A compilation of all BETA text -can be found at the end of the text string lists. An example of a modified -arena from the arena list is: - -Random Arena Modifier: -NTSC PAL -80084BF9 00LL 80085149 00LL -81084BFC XXXX 8108514C XXXX - -LL is a value from the level list, and changes which level is loaded. XXXX -changes the name "Random" into something else. Several names you may want to -choose from are: - -5687 – dataDyne Research -5689 – dataDyne Central -568B – Carrington Villa -568D – Chicago -568F – G5 Building -5691 – Area 51 -5697 – Air Base -5699 – Air Force One -569B – Crash Site -569D – Pelagic II -569F – Deep Sea -56A1 – Carrington Institute -56A3 – Attack Ship -56A5 – Skedar Ruins - -The PAL and the NTSC version are almost the same, but have some different text -string values. Where they have different values you will see two values next to -each other. The first one is NTSC and the second one is PAL. - -Defection – 02XX ----------------- -0200 – Perfect Agent Briefing -0201 – LUCERNE TOWER -0202 – Special Agent Briefing -0203 – Agent Briefing -0204 – NULL3 -0205 – NULL4 -0206 – NULL5 -0207 – NULL6 -0208 – NULL7 -0209 – dataDyne.Central Divisional HQ Chicago IL USA -020A – 0230 Hours 15 AUG 2023 -020B – Obtain De Vries' necklace -020C – Cassandra De Vries' -020D – Necklace -020E – De Vries' necklace -020F – Picked up De Vries' necklace -0210 – Disable internal security hub -0211 – Obtain keycode necklace -0212 – Download project files -0213 – Disable external comms hub -0214 – Gain entrance to laboratory -0215 – Who are you and what are you doing here? -0216 – Look out! She's got a gun -0217 – You won't shoot me, foolish child! -0218 – Don't you know who I am? -0219 – Let's see how you deal with security -021A – PLEASE!!!! Don't kill me! -021B – If I were you, I'd leave... NOW! -021C – Badly placed ECM Mine -021D – ECM Mine placed correctly -021E – MISSION FAILED - objectives incomplete -021F – MISSION SUCCESSFUL -0220 – CANNOT complete all objectives -0221 – Time to erase those files -0222 – Computer executive erased -0223 – I'll do what you want! -0224 – HELP - Intruder! -0225 – You talk too much -0226 – HELP, HELP! -0227 – I'll do what you want -0228 – Logging on now -0229 – Okay, I'm in... -022A – Goodbye, Dr. Caroll -022B – You've written your last bug, traitor! -022C – File download initiated -022D – File download completed -022E – ACCESS DENIED - password needed -022F – Door unlocked -0230 – DOH! -0231 – Unable to download - Data Uplink needed -0232 – LIGHTS NOW ON -0233 – LIGHTS NOW OFF -0234 – Erase Dr. Caroll conversation -0235 – Don't shoot, don't shoot! -0236 – Critical mission object destroyed -0237 – Unacceptable civilian casualties -0238 – MISSION FAILED . - objectives cannot be completed -0239 – Critical mission personnel killed. -023A – Obtain ECM Mines -023B – Dr. Caroll's -023C – ECM Mine -023D – An ECM Mine -023E – Picked up an ECM Mine -023F – Obtain Data Uplink -0240 – Nothing -0241 – Data Uplink -0242 – A Data Uplink -0243 – Picked up a Data Uplink -0244 – Yes, yes, I agree. Personality is expendable. in this case -0245 – No, I can start the process from my office. terminal and delete the - necessary files. at the same time -0246 – I'll begin at once. Goodbye -0247 – Move it! -0248 – I’ve got a password problem, and you're .the man to help me with it -0249 – Don't shoot, don't shoot! -024A – Datalink broken - connection terminated -024B – Datalink error - incomplete file download -024C – Internal security system temporarily disabled -024D – External communications hub disabled -024E – Laboratory lift located -024F – Security Help me! -0250 – ECM Mine needed to disable security hub -0251 – ECM Mine needed to disable comms hub -0252 – Dummy -0253 – How dare you disturb me! -0254 – You will regret this intrusion, girl! -0255 – If I were you, I'd leave...NOW! -0256 – Please don't kill me! -0257 – Don't shoot! -0258 – Obtain CamSpy -0259 – Dr. Caroll's -025A – CamSpy -025B – A CamSpy -025C – Picked up a CamSpy -025D – We're getting a positive reading - .the internal comms hub is nearby -025E – You're on the same floor as .Cassandra's office -025F – The other hub has got to be in the .Security Room -0260 – The basement elevator must be around .there somewhere -0261 – Security system is now back online -0262 – You vandal, you've broken it! -0263 – 2023 AD, 2214 Hours Lucerne Tower - dataDyne HQ -0264 – Why the big hurry? -0265 – If Dr. Caroll is not extracted tonight, .dataDyne will put him through - mind .conditioning, and we'll lose our best .chance of finding out what - dataDyne .are up to -0266 – Are they all expendable? -0267 – Don't joke! You have to be careful, Joanna. .Code keys will only operate - while the owner .is alive. If you kill them, the key is .useless. Armed - guards are a different matter, .of course -0268 – What's the target location? -0269 – Work your way down the building to the ground .level. Dr. Caroll will be - in a research lab .somewhere in the underground facility -026A – How will I recognize him? -026B – We don't have an image record, and we can't .find any official files. - All we have is the .name. Good luck, Perfect Dark -026C – Right, I'm in -026D – I...I'm logging on now - -Extraction – 06XX ------------------ -0600 – Perfect Agent Briefing -0601 – LUCERNE TOWER -0602 – Special Agent Briefing -0603 – Agent Briefing -0604 – Nothing -0605 – Nothing -0606 – Nothing -0607 – Nothing -0608 – Nothing -0609 – Access foyer elevator -060A – Reactivate office elevator -060B – Destroy dataDyne hovercopter -060C – Defeat Cassandra's bodyguards -060D – Rendezvous at helipad -060E – Accessing elevator controls -060F – LIGHTS ARE NOW ON! -0610 – Dr. Caroll has been killed! -0611 – Dr. Caroll is under attack! -0612 – Dr. Caroll has been damaged! -0613 – Too late! She's here -0614 – You've become quite an annoyance -0615 – Good night, Ms. Dark -0616 – LIGHTS NOW ON -0617 – LIGHTS NOW OFF -0618 – MISSION FAILED -0619 – MISSION SUCCESSFUL -061A – Helichopper warning goes here -061B – Obtain Night Vision -061C – Cassandra De Vries' -061D – Night Vision -061E – Night Vision -061F – Picked up Night Vision -0620 – We meet again, girl! -0621 – Foyer elevator accessed -0622 – Office elevator door has been unlocked -0623 – DataDyne Hovercopter eliminated -0624 – Cassandra's bodyguards have been defeated -0625 – That's not how it goes -0626 – Yes, it is -0627 – Give it to me - you're doing it wrong -0628 – Stop annoying me -0629 – Will you just hurry up! -062A – Oh, no...too late -062B – She's here -062C – Get her! -062D – Critical mission object destroyed -062E – Obtain CamSpy -062F – Dr. Caroll's -0630 – CamSpy -0631 – A CamSpy -0632 – Picked up a CamSpy -0633 – They've locked down the ground floor - .get to the elevator! -0634 – That copter needs to be taken out, or .the jumpship'll get shot down! -0635 – I can't leave any bodyguards standing -0636 – Don't keep the jumpship waiting - .get back to the landing pad -0637 – Obtain alpha key card -0638 – Guard's -0639 – Office key card -063A – Office key card -063B – Picked up Cassandra's office key card -063C – Sound the alarm - she's here! -063D – Lights out! -063E – What the...? -063F – Going somewhere? -0640 – Something I can do for you, old woman? -0641 – Return our sapient immediately! You don't .know what you're doing -0642 – Yes I do. I'm leaving. -0643 – One more chance! Give it back, and you .could come and work for me -0644 – Sorry! Gotta shoot -0645 – You must get the sapient back. We cannot .proceed without it -0646 – I know that! -0647 – I also know who to talk to... .Mr. Carrington -0648 – Elevator door is inactive on this floor - -Crash Site – 0AXX ------------------ -0A00 – Perfect Agent Briefing -0A01 – CRASH SITE -0A02 – Special Agent Briefing -0A03 – Agent Briefing -0A04 – Nothing -0A05 – Retrieve Presidential medical scanner -0A06 – Activate distress beacon -0A07 – Shut down enemy jamming device -0A08 – Retire Presidential clone -0A09 – Locate and rescue President -0A0A – There's the escape pod -0A0B – Maybe there's a beacon in there -0A0C – The jamming... It's coming from that ship -0A0D – Elvis... He'll be able to protect the President -0A0E – Distress beacon has been activated -0A0F – Critical mission object has been destroyed -0A10 – Obtain Presidential Scanner -0A11 – Nothing -0A12 – Nothing -0A13 – A Presidential Scanner -0A14 – Picked up a Presidential Scanner -0A15 – Jamming device has been shut down -0A16 – President has been killed -0A17 – Presidential clone has been eliminated -0A18 – You'll never save him now! -0A19 – President has been rescued -0A1A – Obtain Night Vision -0A1B – Cassandra De Vries' -0A1C – Night Vision -0A1D – Night Vision -0A1E – Picked up Night Vision -0A1F – Take this; you should find it useful! -0A20 – Ahhh... uuhhhh... -0A21 – Ahhh... uhh... owww... -0A22 – Agent Dark! Please report! -0A23 – Perfect Dark, come in! -0A24 – A-agent Dark reporting in -0A25 – Agent Dark! Please reply! -0A26 – Something's jamming my transmissions. It's coming from that other craft -0A27 – I'd better find the jamming device and check that Elvis is okay. Not - forgetting the President, of course -0A28 – How are you feeling, Mr. President? -0A29 – Better now, young lady. Today, I think, will take a while for me to get - over. I can't believe Easton would do such a thing. I knew he was - ambitious, yes, but this -0A2A – Just one thing, sir? What is the Pelagic II that Trent wanted so badly? -0A2B – It's a U.S. government deep sea research vessel, one of a kind. The only - ship that can conduct a full-scale diving operation at extreme depth. - Trent wanted me to loan it to the dataDyne Corporation, but I refused -0A2C – Trent has a lot to answer for, but I don't think we'll find him now -0A2D – You have failed, Easton. You are a flawed device, and we need you no - longer -0A2E – Just try it, you Scandinavian freak! -0A2F – Noooooooo!!! - -Air Base – 0EXX ---------------- -0E00 – Perfect Agent Briefing -0E01 – PRESIDENTIAL TERMINAL .US AIRBASE, ALASKA -0E02 – Special Agent Briefing -0E03 – Agent Briefing -0E04 – Nothing -0E05 – Obtain disguise and enter base -0E06 – Check in equipment -0E07 – Subvert security monitoring system -0E08 – Obtain flight plans from safe -0E09 – Board Air Force One -0E0A – Obtain suitcase -0E0B – Suitcase -0E0C – Suitcase -0E0D – Picked up a suitcase -0E0E – Obtain air stewardess uniform -0E0F – Disguise -0E10 – Nothing -0E11 – Disguise -0E12 – Disguise -0E13 – Picked up a stewardess uniform -0E14 – Obtain flight plans from safe -0E15 – Nothing -0E16 – Flight Plans -0E17 – Flight Plans -0E18 – Picked up the flight plans -0E19 – Look out - it's an intruder -0E1A – Innocent civilians have been killed -0E1B – Is he OK? -0E1C – I'll go and get some help -0E1D – Good afternoon -0E1E – OK, you know the way from here -0E1F – You'll have to check that weapon in here -0E20 – Oh, my God! -0E21 – Weapons are not allowed in the base -0E22 – Right, I'm calling security -0E23 – System shutdown initiated -0E24 – Security systems have been shut down -0E25 – Weapons have been detected -0E26 – Suitcase has been deposited -0E27 – Suitcase has been scanned -0E28 – Hey, you - this is a restricted area -0E29 – Are you new around here? -0E2A – Hey - give me back my case -0E2B – You get security - I'll deal with her... -0E2C – Upstairs...there's an intruder -0E2D – Laser grid access denied -0E2E – Laser grid system has been overloaded -0E2F – Too many neutral casualties inflicted -0E30 – Stop them from getting the safe -0E31 – Disguise worn -0E32 – Now's your chance! Grab the stewardess's .bag and get her uniform -0E33 – Use that case to conceal your equipment -0E34 – The case will get stopped unless you do something -0E35 – So that's Air Force One? Huh, smaller .than I thought -0E36 – Stop them - they're breaking into the safe -0E37 – Agent Dark in position. I can see the main entrance to the base, and I - can just make out the cable car arrival point -0E38 – Excellent, Joanna. That cable car is your way in... Our observer at the - lower terminus has spotted a member of the flight crew boarding a minute - ago. She is being escorted by air base troops. I don't have to remind - you that... -0E39 – That they're probably innocent of any involvement in Trent's little - scheme. And I can't shoot them even if they shoot at me. What about the - NSA Agents? -0E3A – I don't know how far the conspiracy has spread through the NSA, but I'm - willing to bet that the men Trent has around him here are loyal to him - and his plan. You have to get the evidence of Trent's betrayal onto Air - Force One and show it to the President -0E3B – Yes, and protect him from his abductors. Do you have any idea what - Trent's plan might be yet, and what about those blonde guys? -0E3C – Only vague suspicions, and I won't distract you with those. Good luck. - Carrington out -0E3D – Lift inoperative - security system is active -0E3E – Critical mission personnel disabled -0E3F – Critical mission object destroyed -0E40 – Entrance to base secured -0E41 – We're taking over!! -0E42 – Hover trolley has been shut down -0E43 – Equipment cannot be checked in - -Pelagic II – 16XX ------------------ -1600 – Perfect Agent Briefing -1601 – Cetan Ship -1602 – Special Agent Briefing -1603 – Agent Briefing -1604 – Nothing -1605 – Deactivate GPS and autopilot -1606 – Disable primary power source -1607 – Secure laboratories and research data -1608 – Activate Moon Pool lift -1609 – Rendezvous and escape with Elvis -160A – Cripple the engines and the ship will .drift Perfect! -160B – This must be where the sub's controlled from -160C – Without the autopilot and the GPS, the ship .will wander off station -160D – They'll be unable to conduct any operations .without any power -160E – Autopilot system has been deactivated -160F – GPS system has been deactivated -1610 – Critical mission object has been destroyed -1612 – Reactor shutdown control hatch opened -1613 – Reactor has been shut down -1614 – Diving control center has been located -1615 – Critical mission personnel killed -1616 – Research data has been secured -1617 – Nothing -1618 – Research data disk -1619 – A research data disk -161A – Picked up a research data disk -161B – Critical mission personnel have been killed -161C – Lift door has been unlocked -161D – Lift has been activated -161E – Operation denied - hangar doors still closed -161F – Unlocking sequence has been reset -1620 – You go on ahead, Jo. I'll secure the perimeter. .We'll meet up later -1621 – Elvis has been killed -1622 – Joanna... What took you so long? Follow me - .let's get out of this old - tub -1623 – Civilians have been killed -1624 – Critical mission object has been destroyed -1625 – Alarm has been activated -1626 – Alarm has been deactivated -1627 – Right. The diving operation has been disrupted on the surface. .Time for - a swim -1628 – I hope the government don't want to use this ship anytime soon -1629 – Do you think we were a little heavy-handed? -162A – Naaahhhh -162B – Pull the plug on that now -162C – Switch this thing off -162D – I'll shut it down -162E – Please don't hurt me -162F – Die, you traitors - -G5 Building – 18XX ------------------- -1800 – Perfect Agent Briefing -1801 – G5 BUILDING -1802 – Special Agent Briefing -1803 – Agent Briefing -1804 – Nothing -1805 – Nothing -1806 – Nothing -1807 – Nothing -1808 – Nothing -1809 – Disable damping field generator -180A – Deactivate laser grid systems -180B – Holograph meeting conspirators -180C – Retrieve Dr. Caroll backup from safe -180D – Exit building -180E – Obtain alpha key card -180F – Guard's -1810 – Level 1 key card -1811 – Guard's key card -1812 – Picked up guard's key card -1813 – Obtain alpha key card -1814 – Guard's -1815 – Level 2 key card -1816 – Guard's key card -1817 – Picked up guard's key card -1818 – Mission critical object destroyed -1819 – Damping field generator shut down -181A – Generator cannot be restarted -181B – Laser grid unit shut down -181C – Laser grid unit activated -181D – All laser grid systems shut down -181E – Obtain DAT tape -181F – Dr. Caroll's. -1820 – Backup disk -1821 – Backup disk -1822 – Picked up backup disk -1823 – Door Decoder attached to access pad -1824 – Initiating cracking routines -1825 – Door Decoder finished - door unlocked -1826 – INTRUDER ALERT - all security to the vault -1827 – Door Decoder placed correctly -1828 – Door Decoder incorrectly positioned -1829 – Conspirators have been alerted -182A – Alarm activated -182B – Alarm deactivated -182C – Safe door is locked -182D – Door Decoder attached -182E – Obtain Door Exploder -182F – Dr. Caroll's -1830 – Door Exploder -1831 – Door Exploder -1832 – Picked up Door Exploder -1833 – Objectives incomplete - MISSION FAILED -1834 – MISSION SUCCESSFUL -1835 – Communications bug placed correctly -1836 – Communications bug placed incorrectly -1837 – Obtain CamSpy -1838 – Dr. Caroll's -1839 – CamSpy -183A – A CamSpy -183B – Picked up a CamSpy -183C – There's no way through while those .lasers are active -183D – That must be the meeting room up ahead. .Time to use the CamSpy -183E – The safe's heavily encrypted. .The decoder's gonna take a little longer -183F – Time to leave! Let's get to the door I set .up earlier -1840 – Mission critical object destroyed -1841 – Stand back, Joanna. We'll create your escape .route -1842 – Nothing -1843 – Nothing -1844 – Detonator -1845 – Detonator -1846 – Picked up Detonator -1847 – CamSpy has been destroyed - abort mission -1848 – We've recovered the sapient from Carrington .and altered its - programming. It no longer .has a personality, so there will be no - .further incidents -1849 – This will reduce its efficiency. My team will .have to take it to the - core themselves. This .will endanger them. You should have .anticipated - that the sapient might develop .a troublesome moral code -184A – No one could have predicted that! And I .resent being singled out for - blame! .What about him? -184B – The President turned down your request for .the loan of the Pelagic - II?.....Could it be you overestimated your .influence over him? -184C – No! Perhaps I underestimated his resolve. .We have a contingency plan - ready to go, .and we will move as soon as the Presidential .entourage - arrives at the air base. All I .need from the President is a tissue - sample -184D – Ha! Assuming you don't get any interference. .If Carrington has pieced - together enough of .this, he will have called for reinforcements -184E – There will be no outside help for .Mr. Carrington. The technology you - gave us .is installed in Nevada and fully operational. .We can intercept - any craft they use -184F – Then the devices we gave you are working .correctly? Good. Because we - believe .anything which does not work correctly .should be destroyed. - Consider that as you .follow your 'backup plans.' -1850 – Agent Dark reporting in! Prepare to .receive a download of the meeting - data. .Priority request for an Institute Support .Team to protect the - President before he .goes to Alaska. -1851 – No time for that now, Agent Dark. There's .been a development during - radio silence. .The craft carrying those 'friends' I was .talking about - was shot down over Nevada. .The weapon responsible was fired from .Area - 51... that's where the survivors and .debris will have been taken. - You're to .prep for immediate dispatch when you .return here. Carrington - out -1852 – Area 51? But what about the President? - -Carrington Institute Training Ground - 1CXX -------------------------------------------- -1C08 – Collect Night Vision from table to begin -1C09 – Activate the Night Vision, Locate the light switch, Turn the lights back - on -1C0A – Collect Data Uplink from table to begin -1C0B – Stand next to the terminal and use the Uplink -1C0C – You need to be holding the Data Uplink -1C0D – Connection established -1C0E – Terminal has been successfully hacked -1C0F – Connection broken - too far from PC -1C10 – Collect ECM Mine from table to begin -1C11 – Locate Hub and throw ECM Mine onto Hub -1C12 – ECM Mine has been placed incorrectly -1C13 – ECM Mine has been placed correctly -1C14 – Collect CamSpy from table to begin -1C15 – Locate Info Room PC and holograph it -1C16 – Info Room PC successfully holographed -1C17 – Lights have been reactivated -1C18 – Collect Door Decoder from table to begin -1C19 – Use Decoder on door pad to unlock it -1C1A – You need to be holding the Door Decoder -1C1B – Decoder attached. Initiating cracking routines -1C1C – Decoding complete. Door has been unlocked -1C1D – Collect Tracker from table to begin -1C1E – Locate IR Scanner using Tracker -1C1F – IR Scanner has been successfully located -1C20 – Collect IR Scanner from table to begin -1C21 – Locate secret door using IR Scanner -1C22 – Secret door has been successfully located -1C23 – Collect X-Ray Scanner from table to begin -1C24 – Find hidden switches to shut down laser grid -1C25 – All laser grids have been deactivated -1C26 – Collect Disguise from table to begin -1C27 – Fool someone into giving you Cloaking Device -1C28 – Cloaking Device successfully retrieved -1C29 – Laser Grid 1 has been deactivated -1C2A – Laser Grid 2 has been deactivated -1C2B – I'm here to pick up the equipment -1C2C – Go away, Joanna. You're not fooling anybody! -1C2D – Here you go. Don't drop it now -1C2E – Cloaking Device has been secured successfully -1C2F – You're meant to use the Disguise, remember? -1C30 – You'll have to do better than that, Joanna -1C31 – Joanna, where did you spring from? -1C32 – You have been detected by the camera -1C33 – Collect Cloaking Device from table to begin -1C34 – Use Cloaking Device and locate Carrington -1C35 – I think we can safely say your training.is now complete! -1C36 – Mission complete - Device Training passed! -1C37 – Mission failed - you have been detected -1C38 – Data Uplink Device Training Instructions -1C39 – CamSpy Device Training Instructions -1C3A – Night Vision Device Training Instructions -1C3B – Door Decoder Device Training Instructions -1C3C – X-Ray Scanner Device Training Instructions -1C3D – Disguise Device Training Instructions -1C3E – IR Scanner Device Training Instructions -1C3F – Select the Tracker Device Training Instructions -1C40 – Select the Cloaking Device Device Training Instructions -1C41 – Select the ECM Mine Device Training Instructions -1C42 – Joanna, it's good to see you -1C43 – Come with me, I'll walk you round the training rooms -1C44 – The information center is through this door -1C45 – In here we have the device lab -1C46 – This leads to the simulant training room -1C47 – This is the firing range, Jo -1C48 – This corridor leads down to the hangar -1C49 – HOVERCRATE.Press B Button next to Hovcrate to grab it -1C4A – Press B Button when crate grabbed to release it -1C4B – HOVERBIKE.Double tap B Button next to Hovbike to ride it -1C4C – Double tap B Button when on Hovbike to dismount -1C4D – OPENING DOORS.Press B Button next to door to open it -1C4E – B Button will also activate any object nearby -1C4F – ELEVATORS.Press B Button next to door to call elevator -1C50 – Cannot exit while training is in progress -1C51 – Switch Code 1 has been obtained -1C52 – Switch Code 2 has been obtained -1C53 – Switch Code 3 has been obtained -1C54 – Switch Code 4 has been obtained -1C55 – LOOK UP.- Press Down C Button to look up at the target -1C56 – LOOK DOWN.- Press Up C Button to look down at the target -1C57 – Holoprogram 2 has been completed successfully -1C58 – Holoprogram 4 has been completed successfully -1C59 – Holoprogram 5 has been completed successfully -1C5A – Guard has been successfully disarmed -1C5B – Guard has been successfully knocked out -1C5C – Disarm this live target if you can -1C5D – Knock out this target - stealth is the key -1C5E – And the final guard -1C5F – DUCK.- Hold R Button, then press Down C Button to duck -1C60 – CROUCH.- When ducking, hold R Button, then press Down C Button to duck -1C61 – Holoprogram 3 has been completed successfully -1C62 – Activate all the switches -1C63 – Activate all of the wall switches..- Be quick, as they will quickly - reset -1C64 – Get the access codes by examining terminals..- Use the codes on the wall - terminals -1C65 – Code 1 has been obtained -1C66 – Code 2 has been obtained -1C67 – Code 3 has been obtained -1C68 – Code 4 has been obtained -1C69 – Training failed - you must face forward -1C6A – Holoprogram 1 has been completed successfully -1C6B – Unarmed combat - knock out the target..- Press Z Button repeatedly to - punch -1C6C – Now try against a moving target -1C6D – And finally against a target that fights back -1C6E – Defeat all enemies without getting hit -1C6F – Training failed - you have been hit -1C70 – Holoprogram 6 has been completed successfully -1C71 – Holoprogram 7 has been completed successfully -1C72 – TERMINALS.- Press B Button next to terminal to use it -1C73 – Now activate the red terminals on the wall -1C74 – PP7 -1C75 – TT33 -1C76 – Skorpion -1C77 – AK47 -1C78 – Uzi 9mm -1C79 – MP5K -1C7A – M-16 -1C7B – FNP90 -1C7C – Okay, Jo, I'll leave you to prepare for the mission - -NTSC – PAL – VALUES - -58DB – 1C7D – Joanna Dark -58DC – 1C7E – Human (Female) -58DD – 1C7F – 23 years 2 months -58DE – 1C80 – Joanna Description from Info menu -58DF – 1C81 – Jonathan -58E0 – 1C82 – Human (Male) -58E1 – 1C83 – 28 years 5 months -58E2 – 1C84 – Jonathan Description from Info menu -58E3 – 1C85 – Daniel Carrington -58E4 – 1C86 – Human (Male) -58E5 – 1C87 – 62 years 8 months -58E6 – 1C88 – Daniel Carrington Description from Info menu -58E7 – 1C89 – Cassandra De Vries -58E8 – 1C8A – Human (Female) -58E9 – 1C8B – 39 years ? months -58EA – 1C8C – Cassandra De Vries Description from Info menu -58EB – 1C8D – Trent Easton -58EC – 1C8E – Human (Male) -58ED – 1C8F – 46 years ? months -58EE – 1C90 – Trent Easton Description from Info Menu -58EF – 1C91 – Dr. Caroll -58F0 – 1C92 – The Caroll Sapient (AI) -58F1 – 1C93 – 6 months -58F2 – 1C94 – Dr. Caroll Description from Info menu -58F3 – 1C95 – Elvis -58F4 – 1C96 – Maian (Male) -58F5 – 1C97 – 320 years -58F6 – 1C98 – Elvis Description from Info menu -58F7 – 1C99 – Mr. Blonde -58F8 – 1C9A – Human (Male) -58F9 – 1C9B – Late 20's -58FA – 1C9C – Mr. Blonde Human Description from Info menu -58FB – 1C9D – Mr. Blonde -58FC – 1C9E – Skedar (disguised) -58FD – 1C9F – Unknown -58FE – 1CA0 – Mr. Blonde Skedar Description from Info menu -58FF – 1CA1 – The U.S. President -5900 – 1CA2 – Human (Male) -5901 – 1CA3 – 50 years -5902 – 1CA4 – President Description from Info menu -5903 – 1CA5 – Maians -5904 – 1CA6 – Maians Description from Info menu -5905 – 1CA7 – Skedar Warrior -5906 – 1CA8 – Skedar Descriptions from the Info menu -5907 – 1CA9 – Background -5908 – 1CAA – Background text from Info menu -5909 – 1CAB – The Story -590A – 1CAC – The Story text from Info menu -590B – 1CAD – dataDyne Corporation -590C – 1CAE – The monolithic corporation that dataDyne has become started off - as an AI systems programming business. When it became apparent - that much of their income came from their work as a defense - contractor for the U.S. military, a young and forward-looking - manager called Cassandra De Vries started pushing for deals with - weapons manufacturers, while ignoring offers from Daniel - Carrington and the Institute for collaboration on quantum - computing and AI research. After the third armament company was - bought by dataDyne, profits became astronomical. Within a month - of the receipt of a government contract for weapons development, - Cassandra De Vries was CEO. A significant portion of - corporation profits were redirected into AI research, with - excellent results -590D – 1CAF – Carrington Institute -590E – 1CB0 – Briefly dismissed as a crackpot inventor, Daniel Carrington was - the first to release anti-gravity technology to the world. - Revenues from this and related development helped set up the - Carrington Institute, ostensibly a technology think tank situated - in a remote part of the continental U.S. In actual fact, the - Institute is also a training ground for agents who are sent - out into the world to keep track of technological development - around the globe, for reasons best known to Daniel Carrington - himself -590F – 1CB1 – Camspy Training Description -5910 – 1CB2 – Night Vision Training Description -5911 – 1CB3 – Door Decoder Training Description -5912 – 1CB4 – X-ray Scanner Training Description -5913 – 1CB5 – Disguise Training Description -5914 – 1CB6 – IR Scanner Training Description -5915 – 1CB7 – Tracker (Radar) Training Description -5916 – 1CB8 – Cloaking Device Training Description -5917 – 1CB9 – ECM Mine Training Description -5918 – 1CBA – Data Uplink Training Description -5919 – 1CBB – FIRING. Press Z Button to fire gun -591A – 1CBC – AUTO RELOAD. Release Z Button when out of ammo -591B – 1CBD – MANUAL RELOAD. Press B Button to reload early if magazine not - full -591C – 1CBE – Aiming: Hold down R Button to enter Aim mode -591D – 1CBF – Use Control Stick to move aiming sight -591E – 1CC0 – AUTO FIRE. Hold Z Button to repeatedly fire automatically -591F – 1CC1 – ALTER AIM. Press Up C Button or Down C Button to move sight - up/down -5920 – 1CC2 – ZOOM. Hold R Button to enter Zoom mode -5921 – 1CC3 – FAST FIRE. Press Z Button quickly to fire faster -5922 – 1CC4 – Carrington Institute.|Base of operations -5923 – 1CC5 – Lucerne Tower.|Global headquarters -5924 – 1CC6 – Laboratory Basement.|Underground research labs -5925 – 1CC7 – Carrington Villa.|Private coastal retreat -5926 – 1CC8 – Chicago.|Backstreets of the city -5927 – 1CC9 – G5 Building.|dataDyne front corporation -5928 – 1CCA – Area 51.|Near Groom Dry Lake, Nevada -5929 – 1CCB – Alaskan Air Base.|Brooks Range, Alaska -592A – 1CCC – Air Force One.|The President's airplane -592B – 1CCD – Crash Site.|Victoria Island 71N 118W -592C – 1CCE – Pelagic II.|Specialized deep-sea research ship -592D – 1CCF – Cetan Ship.|The most alien environment on Earth -592E – 1CD0 – Skedar Assault Ship.|Troop carrying spacecraft -592F – 1CD1 – Skedar Homeworld.|The planet of the Battle Shrine -5930 – 1CD2 – Jumpship.|Agile troop craft -5931 – 1CD3 – HoverCrate.|Gravity-negation device -5932 – 1CD4 – HoverBike.|Low altitude vehicle -5933 – 1CD5 – Cleaning Hovbot.|Your helpful buddy -5934 – 1CD6 – Hovercopter.|Urban AG gunship -5935 – 1CD7 – G5 Robot.|Urban combat droid -5936 – 1CD8 – A51 Interceptor.|Robotic air interceptor -5937 – 1CD9 – Maian Vessel.|Scout and patrol vessel -5938 – 1CDA – Skedar Shuttle.|Alien troop dropship -5939 – 1CDB – Carrington Institute Description -593A – 1CDC – Lucerne Tower (dataDyne Building) Description -593B – 1CDD – dataDyne Underground Research Labs Description -593C – 1CDE – Villa Description -593D – 1CDF – Chicago Streets Description -593E – 1CE0 – G5 Building Description -593F – 1CE1 – Area 51 Description -5940 – 1CE2 – Air Base Description -5941 – 1CE3 – Air Force One Description -5942 – 1CE4 – Crash Site Description -5943 – 1CE5 – Pelagic II Description -5944 – 1CE6 – Cetan Battle Cruiser Description -5945 – 1CE7 – Skedar Assault Ship Description -5946 – 1CE8 – Skedar Homeworld Description -5947 – 1CE9 – Jumpship Description -5948 – 1CEA – Hovercrate Description -5949 – 1CEB – Hoverbike Description -594A – 1CEC – Hoverbot Description -594B – 1CED – Hovercopter Description -594C – 1CEE – G5 Sentry Robot Description -594D – 1CEF – Area 51 Interceptor Description -594E – 1CF0 – Maian Shuttle Description -594F – 1CF1 – Skedar Shuttle Description -5950 – 1CF2 – Holo Training 1 Description -5951 – 1CF3 – Holo Training 2 Description -5952 – 1CF4 – Holo Training 3 Description -5953 – 1CF5 – Holo Training 4 Description -5954 – 1CF6 – Holo Training 5 Description -5955 – 1CF7 – Holo Training 6 Description -5956 – 1CF8 – Holo Training 7 Description -5957 – 1CF9 – Holo Training 1 Hint -5958 – 1CFA – Holo Training 2 Hint -5959 – 1CFB – Holo Training 3 Hint -595A – 1CFC – Holo Training 4 Hint -595B – 1CFD – Holo Training 5 Hint -595C – 1CFE – Holo Training 6 Hint -595D – 1CFF – Holo Training 7 Hint -595E – 1D00 – Holo Training 1 Complete Hint -595F – 1D01 – Holo Training 2 Complete Hint -5960 – 1D02 – Holo Training 3 Complete Hint -5961 – 1D03 – Holo Training 4 Complete Hint -5962 – 1D04 – Holo Training 5 Complete Hint -5963 – 1D05 – Holo Training 6 Complete Hint -5964 – 1D06 – Holo Training 7 Complete Hint -5965 – 1D07 – Data Uplink Device Training Hint -5966 – 1D08 – ECM Mine Device Training Hint -5967 – 1D09 – CamSpy Device Training Hint -5968 – 1D0A – Night Vision Device Training Hint -5969 – 1D0B – Door Decoder Device Training Hint -596A – 1D0C – Tracker Device Training Hint -596B – 1D0D – IR Scanner Device Training Hint -596C – 1D0E – X-Ray Scanner Device Training Hint -596D – 1D0F – Disguise Device Training Hint -596E – 1D10 – Cloaking Device Device Training Hint -596F – 1D11 – Data Uplink Device Training Complete Hint -5970 – 1D12 – ECM Mine Device Training Complete Hint -5971 – 1D13 – CamSpy Device Training Complete Hint -5972 – 1D14 – Night Vision Device Training Complete Hint -5973 – 1D15 – Door Decoder Device Training Complete Hint -5974 – 1D16 – Tracker Device Training Complete Hint -5975 – 1D17 – IR Scanner Device Training Complete Hint -5976 – 1D18 – X-Ray Scanner Device Training Complete Hint -5977 – 1D19 – Disguise Device Training Complete Hint -5978 – 1D1A – Cloaking Device Device Training Complete Hint -5979 – 1D1B – Falcon 2 Firing Range Description -597A – 1D1C – Falcon 2 Scope Firing Range Description -597B – 1D1D – Falcon 2 Silencer Firing Range Description -597C – 1D1E – MagSec 4 Firing Range Description -597D – 1D1F – Mauler Firing Range Description -597E – 1D20 – Phoenix Firing Range Description -597F – 1D21 – DY357 Magnum Firing Range Description -5980 – 1D22 – DY357 Golden Magnum Firing Range Description -5981 – 1D23 – CMP150 Firing Range Description -5982 – 1D24 – Cyclone Firing Range Description -5983 – 1D25 – Callisto Firing Range Description -5984 – 1D26 – RC-P120 Firing Range Description -5985 – 1D27 – Laptop Gun Firing Range Description -5986 – 1D28 – Dragon Firing Range Description -5987 – 1D29 – K7 Avenger Firing Range Description -5988 – 1D2A – AR34 Firing Range Description -5989 – 1D2B – SuperDragon Firing Range Description -598A – 1D2C – Shotgun Firing Range Description -598B – 1D2D – Sniper Rifle Firing Range Description -598C – 1D2E – Farsight XR-20 Firing Range Description -598D – 1D2F – Crossbow Firing Range Description -598E – 1D30 – Tranquilizer Firing Range Description -598F – 1D31 – Reaper Firing Range Description -5990 – 1D32 – Devastator Firing Range Description -5991 – 1D33 – Rocket Launcher Firing Range Description -5992 – 1D34 – Slayer Firing Range Description -5993 – 1D35 – Combat Knife Firing Range Description -5994 – 1D36 – Laser Firing Range Description -5995 – 1D37 – Grenade Firing Range Description -5996 – 1D38 – This Maian grenade plays havoc with the neurons in sentient - creatures. If you wander into the blast radius, your vision will - blur and you will lose your grip on whatever you're holding. The - grenade can be set to go off on impact or by proximity trigger. - Make sure you throw it far enough away -5997 – 1D39 – Timed Mine Firing Range Description -5998 – 1D3A – Proximity Mine Firing Range Description -5999 – 1D3B – Remote Mine Firing Range Description -599A – 1D3C – Holo 1 - Looking Around -599B – 1D3D – Holo 2 - Movement 1 -599C – 1D3E – Holo 3 - Movement 2 -599D – 1D3F – Holo 4 - Unarmed Combat 1 -599E – 1D40 – Holo 5 - Unarmed Combat 2 -599F – 1D41 – Holo 6 - Live Combat 1 -59A0 – 1D42 – Holo 7 - Live Combat 2 - -Investigation – 1EXX ---------------------- -1E00 – Perfect Agent Briefing -1E01 – BASEMENT LABORATORY -1E02 – Special Agent Briefing -1E03 – Agent Briefing -1E04 – Nothing -1E05 – Nothing -1E06 – Nothing -1E07 – Nothing -1E08 – Nothing -1E09 – Locate Dr. Caroll -1E0A – Shut down experiments -1E0B – Start security maintenance cycle -1E0C – Obtain experimental technologies -1E0D – Holograph radioactive isotope -1E0E – Machinery scream sound Fx -1E0F – Maintenance robots activated -1E10 – Maintenance robots reprogrammed -1E01 – Security doors unlocked -1E02 – Maintenance cycle activated -1E03 – Routine cleaning cycle activated -1E14 – Operation not allowed - robots busy -1E15 – Maintenance robots deactivated -1E16 – Critical mission object destroyed -1E17 – Maintenance robot system offline -1E18 – MISSION FAILED . - objectives cannot be completed -1E19 – Who are you? -1E1A – Unacceptable scientist casualties -1E1B – Terminal is not active -1E1C – Powering down active systems -1E1D – Experiment has been shut down -1E1E – Alarm activated -1E1F – Alarm deactivated -1E20 – Don't shoot me - I'll help you -1E21 – What the hell are you doing in my lab? -1E22 – Let me help you -1E23 – Accidents will happen -1E24 – ACCESS DENIED - security code required -1E25 – Searching for password -1E26 – Nothing -1E27 – Password located - bypassing lock -1E28 – Contact broken - reestablish link -1E29 – Security door already unlocked -1E2A – Experiment already powered down -1E2B – Strange - the experiment's already off! -1E2C – It appears someone has broken my PC -1E2D – Obtain Night Vision -1E2E – Cassandra De Vries' -1E2F – Night Vision -1E30 – De Vries' briefcase -1E31 – Picked up Night Vision -1E32 – Obtain shield tech item -1E33 – Cassandra De Vries' -1E34 – Shield tech item -1E35 – De Vries' briefcase -1E36 – Picked up shield tech item -1E37 – Obtain Data Uplink -1E38 – Nothing -1E39 – Data Uplink -1E3A – A Data Uplink -1E3B – Picked up a Data Uplink -1E3C – Connection established -1E3D – Maintenance hatch is now open -1E3E – Maintenance hatch is already open -1E3F – WARNING - radioactive matter detected -1E40 – What are you doing in my lab? -1E41 – I haven't seen you before -1E42 – Who the hell are you? -1E43 – Shut down the experiment -1E44 – Pull the plug on that, NOW -1E45 – Switch this thing off -1E46 – I'll shut it down -1E47 – Please don't hurt me -1E48 – Allow me to assist you -1E49 – My experiments! -1E4A – There, the experiment is down -1E4B – Leave this area NOW! -1E4C – Security! -1E4D – I'm calling security -1E4E – Accidents will happen -1E4F – How did that happen? -1E50 – Looks like it's off already -1E51 – Have you been tampering with this? -1E52 – Someone's broken my equipment -1E53 – What's happened to the terminal? -1E54 – You vandal - you've broken it -1E55 – Connection broken - experiments still active -1E56 – Experimental item 1 acquired -1E57 – Experimental item 2 acquired -1E58 – Experimental item 3 acquired -1E59 – Obtain CamSpy -1E5A – Dr. Caroll's -1E5B – CamSpy -1E5C – A CamSpy -1E5D – Picked up a CamSpy -1E5E – That's the highest security sector - Dr. Caroll .has got to be nearby -1E5F – Something around here's using a lot of power -1E60 – Reprogram that cleaning bot - .it'll give you a way in -1E61 – Get out, Jo! The levels are too high. .Use the CamSpy -1E62 – Secret weapons compartment opened -1E63 – Enemy detected - weapon cache locked. -1E64 – Dr. Caroll? -1E65 – Dr. Caroll, are you here? -1E66 – Well, is it safe to come out? -1E67 – Yes, all clear -1E68 – Wh..what... you're -1E69 – Very professionally done, my dear, but there's .no time to waste! We - must leave immediately! -1E6A – Come on. I have vital information, and you .must protect me - -Villa – 20XX ------------- -2000 – Perfect Agent Briefing -2001 – CARRINGTON VILLA -2002 – Special Agent Briefing -2003 – Agent Briefing -2004 – Nothing -2005 – Save the negotiator -2006 – Eliminate rooftop snipers -2007 – Activate wind generator -2008 – Locate and eliminate dataDyne hackers -2009 – Rescue Carrington -200A – Capture dataDyne guard -200B – Negotiator has been killed -200C – Snipers have been eliminated -200D – Negotiator has escaped to safety -200E – Cooling systems have been activated -200F – Cooling systems have been deactivated -2010 – Power systems have been activated -2011 – Power systems have been deactivated -2012 – Windmill has been reactivated -2013 – Windmill has been deactivated -2014 – Electricity has been restored to the villa -2015 – Critical mission object has been destroyed -2016 – Joanna! It's Grimshaw. We've got hackers at .the villa! You've got to - stop them. before they get to our files -2017 – Hackers have uploaded vital data -2018 – Hackers have been eliminated -2019 – Carrington has been rescued -201A – All objectives not completed - mission failed -201B – PC gun -201C – Sniper rifle -201D – Enemy guard has been subdued -201E – Obtain door key -201F – Guard's -2020 – Door Key -2021 – Door Key -2022 – Picked up a door key -2023 – If I get the wind generator back online, .I'll get power to the lower - basement -2024 – I've got to be quick, or they'll kill .the negotiator! -2025 – Here's where they must be holding Daniel -2026 – Those hackers have to be stopped before .I rescue Daniel -2027 – Agent Dark Mission Log, 1846 hours. Last .night we got a call from - Cassandra de Vries. .A dataDyne team have taken Daniel Carrington - .hostage at his private villa on the coast, .and they say they will - spare his life in .exchange for the AI. -2028 – Unfortunately, we don't have it. Daniel and .Dr. Caroll were at the - villa to discuss .'matters of mutual interest.' It looks .like Daniel - found a way to hide Dr. Caroll .inside the villa when the dataDyne hit - .squad arrived -2029 – Hopefully our phoney negotiator ploy will .give me a chance to surprise - the dataDyne .squad. This time it's not just my life .on the line -202A – Sir? Are you injured? -202B – No, Joanna, I'm okay, but those dataDyne .thugs made me tell them where - I'd hidden .Dr. Caroll. If only I'd held out for a .few minutes more -202C – It's not your fault, sir. I should have .been quicker -202D – Don't blame yourself, Joanna. Dr. Caroll .told me that he expected this - to happen. .Actually, when they recaptured him, the .dataDyne team got - overconfident and let .slip a few facts when they thought I was - .unconscious. They mentioned a meeting in .the G5 Building in Chicago, - Illinois, .tonight. I want you to be there, but that .doesn't leave you - a lot of time to get .ready -202E – That won't be a problem, sir. So, did .Dr. Caroll have any useful - information .for you? -202F – Oh, yes, indeed. He certainly did, and .I'll brief you when you're en - route to .Chicago. We might still be able to help .him, even after those - butchers remove his .personality. He thinks they'll keep a .copy of it - in a safe place. It's about .time I called in some friends to deal .with - dataDyne -2030 – Operation denied - windmill is active -2031 – Mission unsuccessful - enemy guard not captured - -Defense – 22XX --------------- -2200 – Perfect Agent Briefing -2201 – CARRINGTON INSTITUTE -2202 – Special Agent Briefing -2203 – Agent Briefing -2204 – Nothing -2205 – Reactivate automatic defenses -2206 – Release hostages -2207 – Retrieve experimental weapon -2208 – Destroy sensitive information -2209 – Deactivate bomb -220A – Obtain sensitive info -220B – Guard's -220C – Sensitive info -220D – Sensitive info -220E – Picked up sensitive info -220F – Automatic gun activated -2210 – Too many hostages killed -2211 – Hostages have been saved -2212 – Sensitive information has been destroyed -2213 – Carrington has been killed -2214 – Joanna - we're under attack -2215 – Get the guns back on line – hurry -2216 – The Skedar have taken hostages -2217 – Get up to the offices and save them -2218 – They're using a new form of shield technology -2219 – Foster was working on a new weapon which may .be useful -221A – Damn it. My office. If they get access -221B – Get there first, Jo, and destroy the files -221C – Things are desperate. They've planted a bomb -221D – Find it and get it out of the building -221E – Access denied - authorization failure -221F – Emergency overrides have been engaged -2220 – Well done, Joanna. We're nearly clear -2221 – The last dropship is waiting for you. Hurry -2222 – Critical mission object has been destroyed -2223 – The autodefenses will really help me out -2224 – So this is what Foster was working on -2225 – I'll have to go carefully. The hostages are .counting on me -2226 – Well, at least I won't know if I'm doing .anything wrong -2227 – The bomb has been detonated -2228 – You have been given a Devastator -2229 – All ready, Joanna? We can't keep the Maian delegation waiting. Or the - President, of course. -222A – Am I ready? What do you mean? I was ready half an hour ago. It was you - holding us up! -222B – But you know how it is, Joanna... I had to make sure my hair was just - right, and then there was the suit. -222C – They should keep you away from mirrors. Nervous? -222D – Very. I've waited for this moment for so many years. Contact, friendly - contact, between Humans and Maians is what the Institute was founded - for. And in a few minutes we'll be at the White House, and it will - finally happen. -222E – Where did that come from? -222F – It was up on ground level -2230 – Looks like someone doesn't know when to quit. We've got to get everyone - out! -2231 – Get clear! I'll hold them off -2232 – You can come back and get me later! -2233 – At least, I hope you can -2234 – You need the Data Uplink -2235 – Connection has been made -2236 – Bypassing security systems -2237 – Virus has been downloaded successfully -2238 – Ship's engines have been activated -2239 – Connection to ship has been broken -223A – Obtain Data Uplink -223B – Data Uplink -223C – A Data Uplink -223D – Picked up a Data Uplink - -Attack Ship – 26XX ------------------- -2600 – Perfect Agent Briefing -2601 – SKEDAR ASSAULT SHIP -2602 – Special Agent Briefing -2603 – Agent Briefing -2604 – Nothing -2605 – Disable shield system -2606 – Open hangar doors -2607 – Access navigational systems -2608 – Sabotage engine systems -2609 – Gain control of bridge -260A – Ship's shields have been lowered -260B – Hangar doors have been opened -260C – Elvis has been killed -260D – Navigational information has been retrieved -260E – Lift has been activated -260F – All hangar Skedar have been killed -2610 – Outside, Joanna. Get the shields down and .we can help you -2611 – You've got to open the hangar doors so we can dock -2612 – Okay, we're in. I'll meet you in the hangar -2613 – Good to see you, Joanna -2614 – Take this - you should find it useful -2615 – Received AR34 assault rifle -2616 – Time to head upwards. I'll take this lift; .you take the other one -2617 – Engines have been disabled -2618 – Look out, Joanna! I think we've made them angry -2619 – Bridge has been captured -261A – You go on ahead, Jo. I'll secure the perimeter. .We'll meet up later -261B – I've got to get those shields down to let Elvis .in. I need all the help - I can get -261C – Now only the hangar bay doors are in the way -261D – This machine contains the Skedar star maps -261E – If we control the bridge, then the ship is ours -261F – Time to head upwards -2620 – Oohhh. I'd better not be where I think I am -2621 – And it's worse than that, my dear. Just look who you've got for company -2622 – You! I thought you'd managed to escape. We found no trace of you at all -2623 – You couldn't find me. But there was no hiding from the Skedar, as you - and Mr. Carrington just discovered -2624 – This is it. Wait there! I'll make a distraction; it will give you a - chance to get out. Use it or we'll both die -2625 – Why are you doing this, Cassandra? -2626 – The Skedar used me, Joanna. You are my best chance for revenge -2627 – Eeeeaaarrrrggghhh!!! -2628 – Wow. That's the first time I've seen another planet from space. It's - beautiful -2629 – Hmmmm? -262A – I don't. I don't believe it! -262B – Elvis? What is it? -262C – Where are you going? -262D – We have to get down to the surface! Follow me! -262E – We have to get out of here! -262F – Hangar doors locked - shields still active -2630 – Critical mission object destroyed -2631 – Ammo depleted - consoles can't be destroyed -2632 – Obtain De Vries' necklace -2633 – Cassandra De Vries' -2634 – Necklace -2635 – De Vries' necklace -2636 – Picked up De Vries' necklace - -Rescue – 2AXX -------------- -2A00 – Perfect Agent Briefing -2A01 – AREA 51 – MEDLABS -2A02 – Special Agent Briefing -2A03 – Agent Briefing -2A04 – Nothing -2A05 – Nothing -2A06 – Nothing -2A07 – Nothing -2A08 – Nothing -2A09 – Obtain and use lab technician disguise -2A0A – Destroy computer records -2A0B – Locate conspiracy evidence -2A0C – Gain access to autopsy lab -2A0D – Rescue the crash Survivor -2A0E – Research records destroyed -2A0F – Obtain lab clothes -2A10 – Lab Tech's -2A11 – Lab clothes -2A12 – Lab clothes -2A13 – Picked up lab clothes -2A14 – Access to door control systems denied -2A15 – Access to light control systems denied -2A16 – Access to security control systems denied -2A17 – Virus downloaded to console -2A18 – Obtain Data Uplink -2A19 – Lab Tech's -2A1A – Data Uplink -2A1B – Data Uplink -2A1C – Picked up Data Uplink -2A1D – Laboratory accessed successfully -2A1E – Data Uplink connected -2A1F – Data Uplink connection broken -2A20 – Obtain medlab 2 key card -2A21 – Guard's -2A22 – Medlab 2 key card -2A23 – Medlab 2 key card -2A24 – Picked up medlab 2 key card -2A25 – Who are you? -2A26 – Hey - you've got my clothes -2A27 – Help - help! -2A28 – Don't shoot me! -2A29 – Oh, my God - a gun! -2A2A – There's an intruder in the complex -2A2B – Give me back my clothes - or else! -2A2C – Right - you've asked for it! -2A2D – Give me my clothes -2A2E – I don't have much time!!! -2A2F – The enemy has discovered the disguise -2A30 – Virus has already been downloaded -2A31 – Initiating virus download -2A32 – So, you got here at last -2A33 – Hey, you're not SECURITY ALERT! -2A34 – No guns allowed in here - put your weapon away -2A35 – I won't tell you again - lose the weapon -2A36 – Right - I'm calling security -2A37 – Everyone's been waiting for you -2A38 – Critical mission personnel killed -2A39 – Cannot gain access to autopsy lab -2A3A – Hey, that's not Harry. It's an intruder -2A3B – Obtain op room key card -2A3C – Guard's -2A3D – Op room key card -2A3E – Op room key card -2A3F – Picked up operation room key card -2A40 – Elvis has been killed. -2A41 – Get the hell out of here! -2A42 – Containment unit raised up -2A43 – Containment unit lowered down -2A44 – Mission critical equipment destroyed. -2A45 – Obtain X-Ray Scanner -2A46 – X-Ray Scanner -2A47 – X-Ray Scanner -2A48 – Picked up X-Ray Scanner -2A49 – Scanner target acquired -2A4A – Target ID confirmed - XT origin -2A4B – Scanner lock lost -2A4C – Disguise has been worn -2A4D – The showers -2A4E – Now, if I can convince someone .to part with their uniform -2A4F – The temperature's dropping. You must be .close to the cryo room -2A50 – The air's heavily recycled around here - must. be near the autopsy lab -2A51 – There he is, Jo! Hurry or you'll be too late! -2A52 – Leave this area now -2A53 – Should you be in here? -2A54 – Holy -2A55 – It's a spy! -2A56 – Warn the others -2A57 – Imposter! -2A58 – Lighting systems overloaded -2A59 – Alternative entrance to medlabs created -2A5A – The problem you have is that there is no .way to sneak into the research - section. .The only way in available to you is a .weak section of wall - I've marked in the .room beyond the stores. It can be destroyed .with - explosives -2A5B – Doesn't sound like a problem to me. Where .are these explosives? -2A5C – In that crate -2A5D – Cute. Very cute -2A5E – By the way, the stores are crawling with .guards. It may go against your - nature, but .try sneaking through rather than blasting .everything -2A5F – Certainly. Any other pearls of wisdom? -2A60 – That crate -2A61 – Yes? -2A62 – It really doesn't like being shot -2A63 – Great. Now, if I can just fight the urge .to report him to Base Security -2A64 – Put your hands up and step away from the .alien -2A65 – What the hell do you think you're doing? .This is supposed to be a - sealed room! .Don't you know anything about autopsy .procedures? -2A66 – Don't make me tell you again, Doctor. And .turn that laser off -2A67 – Director Easton will hear about this, .young lady -2A68 – Of course he's going to hear of it, you .moron. I've just got into his - top secret .base, and now I'm stealing his alien. -2A69 – Automatic Defenses Disabled - -Infiltration – 2CXX -------------------- -2C00 – Perfect Agent Briefing -2C01 – AREA 51 – EXTERIOR -2C02 – Special Agent Briefing -2C03 – Agent Briefing -2C04 – Nothing -2C05 – Nothing -2C06 – Nothing -2C07 – Nothing -2C08 – Nothing -2C09 – Shut down air intercept radar -2C0A – Plant comms device on antenna -2C0B – Disable all robot interceptors -2C0C – Gain access to hangar lift -2C0D – Make contact with CI spy -2C0E – Obtain grenades -2C0F – Dr. Caroll's -2C10 – Grenade -2C11 – A grenade -2C12 – Picked up a grenade -2C13 – Robot interceptor disabled -2C14 – All robot interceptors disabled -2C15 – Obtain comms rider -2C16 – Dr. Caroll's -2C17 – Comms rider -2C18 – Comms rider -2C19 – Picked up comms rider -2C1A – Communications bug placed correctly -2C1B – Communications bug placed incorrectly -2C1C – Antenna has been destroyed -2C1D – Antenna raised -2C1E – Antenna lowered -2C1F – Obtain lift key card -2C20 – Dr. Caroll's -2C21 – Lift key card -2C22 – Lift key card -2C23 – Picked up lift key card -2C24 – Lift access denied - key card needed -2C25 – Key card accepted - lift operational -2C26 – Lift is fully operational -2C27 – Hangar has been accessed -2C28 – Met up with CI agent -2C29 – Air intercept radar shut down -2C2A – Critical mission object destroyed -2C2B – Main gate has been opened -2C2C – Main gate has been closed -2C2D – Access denied -2C2E – Explosive has been placed -2C2F – Intruder detected - security system online -2C30 – Obtain explosive -2C31 – Dr. Caroll's -2C32 – Explosives -2C33 – Explosives -2C34 – Picked up explosives -2C35 – The air intercept radar is controlled from that .bunker -2C36 – There's the antenna, but... I can't throw a bug .that high! -2C37 – The hangar lift is on the other side .of that huge door -2C38 – Careful with that trigger finger, Agent Dark - .you're closing in on my - position -2C39 – Lift access terminals destroyed -2C3A – Okay, Joanna, take a look at this. Our .operative inside Area 51 was - able to get .this out to us. -2C3B – This is your entry point. A deserted helipad .on the edge of the base -2C3C – The lift down to the hangars and the .rendezvous point is beyond that - wall... .Watch out for these guards -2C3D – Here is the communications antenna. .Attach a comms rider bug so we can - talk to .you when you're inside the base. Again, .watch out for hostiles -2C3E – Oh, my God! -2C3F – Here is our friend. He appears to be .physically unhurt, though he - hasn't .regained consciousness yet. By the look .of it, the surgeons are - almost done with .their preliminary tests and will begin .dissection - soon -2C40 – But who was...? -2C41 – Any questions? No. Good. Away you go to .the hangar -2C42 – Agent Dark Mission Log, 1028 hours. Against .my better judgement, I'm - about to enter .Area 51 -2C43 – Agent Dark! Over here! -2C44 – There you are! I was beginning to wonder .if -2C45 – If what? -2C46 – If you'd been discovered yet. And frankly, .if this is how you work, I'm - amazed that .you lasted longer than five minutes -2C47 – I was tidying up one of your loose ends -2C48 – My loose ends? -2C49 – I'm sorry, I didn't realize you wanted him .to shoot you. I can call in - some more guards .if you like -2C4A – Okay, okay, forget about it. I'm going to let .the Institute know we've - made contact -2C4B – Foreign object detected - security alerted - -Deep Sea – 30XX ---------------- -3000 – Perfect Agent Briefing -3001 – CETAN SHIP -3002 – Special Agent Briefing -3003 – Agent Briefing -3004 – Nothing -3005 – Reactivate teleportals -3006 – Disable Cetan megaweapon -3007 – Secure control room -3008 – Restore Dr. Caroll's personality -3009 – Escape from Cetan ship -300A – This will help us to get round the .ship quicker -300B – This antibody masking will protect us from .the automatic defenses -300C – There's Dr. Caroll. Let's see if we can .reverse what was done to him -300D – We have to get out of here! -300E – Elvis has been killed -300F – Dr. Caroll has been killed -3010 – Cetan ship evacuation successful -3011 – Elvis has unlocked the door -3012 – Here, take this gun and keep those Skedar .off my back while I'm working -3013 – Antibody masking has been obtained -3014 – Cetan megaweapon has been disabled -3015 – Control Room has been secured -3016 – Dr. Caroll's personality has been restored -3017 – Nothing -3018 – Nothing -3019 – Backup disk -301A – A backup disk -301B – Nothing -301C – It looks like this could benefit from .a little bit of sabotage -301D – Time to reactivate those teleportals -301E – Teleportals have been reactivated -301F – This doesn't seem normal. No one's around -3020 – No signs of conflict. No spent ammo cases or bullet holes -3021 – But there ought to be a rear guard at least. It makes no sense -3022 – There has to be someone farther inside. Cover me -3023 – Here goes. I just hope dataDyne haven't done anything to prevent this -3024 – Virus detected -3025 – Me and my big mouth -3026 – Commencing countermeasures. Commenc..... *** ooOOoh!! *** eeEEe!! *** - aaAhh!! *** oOOoh!! *** aAArRrgghh!! *** YEEeeooOOOOOOowWWwlll!! *** -3027 – Dr. Caroll? Are you in control again? Can you stop the program? -3028 – Yes, I'm back again, my dear. But the program has run far too long for - me to prevent it from completing. There is only one way out now -3029 – What do you mean? -302A – When the program has run, I will have control of a vastly powerful - weapon. It cannot be allowed to exist. So I must destroy the Cetan and, - unfortunately, myself along with it. I'm sorry, Joanna... There is no - other way and no time to discuss this. Go now - avoid the Skedar and you - will have time to escape. It has been an honor to work with you. - Goodbye, Joanna Dark -302B – Cetan megaweapon has been disabled -302C – Ammo wasted - unable to disable megaweapon - -Chicago – 32XX --------------- -3200 – Perfect Agent Briefing -3201 – CHICAGO STREETS -3202 – Special Agent Briefing -3203 – Agent Briefing -3204 – Nothing -3205 – Nothing -3206 – Nothing -3207 – Nothing -3208 – Nothing -3209 – Retrieve drop point equipment -320A – Attach tracer to limousine -320B – Prepare escape route -320C – Acquire diversion target -320D – Create vehicular diversion -320E – Gain entry to G5 building -320F – Mine placed correctly -3210 – Mine placed incorrectly -3211 – Virus already downloaded into NavComp -3212 – Hovcab is unresponsive - need Reprogrammer -3213 – Accessing hovercab navigation systems -3214 – Virus downloaded successfully -3215 – Hovercab navigation systems reprogrammed -3216 – Connection to hovercab broken -3217 – Tracer Bug placed correctly -3218 – Tracer Bug placed incorrectly -3219 – Mission critical vehicle destroyed -321A – MISSION FAILED -321B – MISSION SUCCESSFUL -321C – DataDyne limo has escaped -321D – Mission failed - unacceptable civilian casualties -321E – Look out - she's got a gun! -321F – There's a maniac on the loose! -3220 – Intruder alert - send reinforcements -3221 – Elevator access sealed -3222 – Hey - what are you doing? -3223 – You don't scare me -3224 – Tracer Bug has been noticed -3225 – Greetings, citizen -3226 – Obtain Remote Mine -3227 – Dr. Caroll's -3228 – Remote Mine -3229 – A Remote Mine -322A – Picked up a Remote Mine -322B – Obtain Tracer Bug -322C – Dr. Caroll's -322D – Tracer Bug -322E – A Tracer Bug -322F – Picked up a Tracer Bug -3230 – Elevator door cannot be reopened -3231 – Obtain Reprogrammer -3232 – Dr. Caroll's -3233 – Reprogrammer -3234 – A Reprogrammer -3235 – Picked up a Reprogrammer -3236 – Diversion has been created -3237 – Obtain Remote Mine -3238 – Dr. Caroll's -3239 – Falcon 2 -323A – A Remote Mine -323B – Picked up a Remote Mine -323C – The only place we could secure the .equipment was a storm drain -323D – Either of those blocked-up doors will .do as an escape route -323E – Reprogram that taxi - it's a Mark 2 .and should be compatible -323F – That car park lift is your only .point of ingress -3240 – EEPROM flag has been set -3241 – EEPROM flag has been cleared -3242 – An alternative diversion has been created! -3243 – Tracer Bug has been spotted -3244 – We suspect the G5 Corporation is just a .front for dataDyne and whoever - else is .involved in this plot. I know Cassandra .de Vries is going to - be here, but I need .to know who else is attending and what .they - discuss. By the time you get out, .the help I requested should have - arrived -3245 – Just who is this help you keep .referring to? -3246 – Not now, Joanna. Time for radio silence. .Good luck! -3247 – Thanks a lot -3248 – Remote Mine has been wasted - -Air Force One – 36XX --------------------- -3600 – Perfect Agent Briefing -3601 – AIR FORCE ONE -3602 – Special Agent Briefing -3603 – Agent Briefing -3604 – Nothing -3605 – Locate and retrieve equipment -3606 – Locate President -3607 – Get President to escape capsule -3608 – Secure Air Force One flight path -3609 – Detach UFO from Air Force One -360A – Obtain Suitcase -360B – Nothing -360C – Suitcase -360D – Suitcase -360E – Picked up a Suitcase -360F – Obtain Crossbow -3610 – Nothing -3611 – Crossbow -3612 – Crossbow -3613 – Picked up a Crossbow -3614 – Too many neutral casualties inflicted -3615 – UFO attachment damaged -3616 – Unable to detach UFO -3617 – Autopilot has been activated -3618 – Air Force One has been stabilized -3619 – Autopilot systems have been destroyed -361A – The President has been incapacitated -361B – Pilots have been killed -361C – Pilots have been saved -361D – Air Force One is about to crash -361E – Obtain remote mine -361F – Nothing -3620 – Remote mine -3621 – Remote mine -3622 – Picked up a remote mine -3623 – Who are you, young lady? -3624 – Security, SECURITY!! -3625 – Mr. President, you're in danger. Trent is trying to .kidnap you -3626 – What the hell was that! -3627 – We have to get you to the escape pod. .Follow me -3628 – You can't make accusations like that without evidence.. I assume that - you have some? -3629 – This is a recording of a meeting between .Trent and the other - conspirators -362A – Seems overwhelming... I'm in your hands. .What do we do now? -362B – Hey, that's not -362C – It's an intruder -362D – How the hell did you get on board? -362E – Now, let's retrieve the evidence -362F – The President's room is on this .level, Joanna -3630 – Something's wrong... You have to get to the cockpit! -3631 – Maybe a mine will detach the UFO -3632 – Nothing -3633 – Nothing -3634 – Adrenaline pill -3635 – Adrenaline pill -3636 – Picked up an adrenaline pill -3637 – Nothing -3638 – Nothing -3639 – Key card -363A – Key card -363B – Picked up a key card -363C – Cargo bay has been lowered -363D – Cargo bay has been raised -363E – Mission critical object has been destroyed -363F – Access denied - lift key card required -3640 – Nothing -3641 – Nothing -3642 – Lift key card -3643 – Lift key card -3644 – Picked up a lift key card -3645 – Timed mine has been wasted -3646 – Ha, Ha, Ha, Ha, Ha -3647 – You'll never save him now -3648 – The President is under attack -3649 – Have you thought any more about that proposal I gave you, sir? -364A – My answer remains the same... I'm sorry Trent, but no. I won't loan the - Pelagic II to dataDyne. Now please, can we move on to other matters? -364B – But this is a golden opportunity to show that America has faith in its - industries and will back them -364C – Damn it, man! I say no and I mean no! I'm not gonna change my mind on - this! I need my advisors to be unbiased, and recently you've not been - giving me the impartiality I require. Let it go, and we'll say no more. - This is your last chance -364D – As you wish, sir -364E – My last chance? Ha! You fool. That was yours -364F – Elvis! Elvis! I can't detach that tube from the fuselage! Can you take - it out? -3650 – Piece of cake, Joanna. Watch this! -3651 – Uh-oh -3652 – Watch what? Will you stop playing around and shoot! -3653 – Out of options... Joanna, brace yourself for impact! -3653 – The pilots have stabilized Air Force One - -Retaking the Institute - 3AXX ------------------------------ -3A03 - Retaking the Institute -3A04 - Lead the team and clean out the building -3A05 - Lead the team and clean out the building -3A06 - Lead the team and clean out the building -3A07 - Kill All Enemy Agents -3A08 - Do Something Else -3A09 - And Something Else - -Maian SOS – 3CXX ----------------- -3C00 – Perfect Agent Briefing -3C01 – AREA 51, NEVADA, EARTH -3C02 – Special Agent Briefing -3C03 – Agent Briefing -3C04 – Sabotage enemy medical experiment -3C05 – Destroy captured Maian saucer -3C06 – Activate distress signal -3C07 – Medical experiment has been sabotaged -3C08 – Captured Maian saucer has been destroyed -3C09 – Distress signal has been sent -3C0A – Critical mission object has been destroyed -3C0B – Mission failed - cannot escape from medlab -3C0C – Alternative escape route found - -Skedar Ruins – 42XX -------------------- -4200 – Perfect Agent Briefing -4201 – SKEDAR BATTLE SHRINE -4202 – Special Agent Briefing -4203 – Agent Briefing -4204 – Nothing -4205 – Identify temple targets -4206 – Activate bridge -4207 – Gain access to Inner Sanctum -4208 – Destroy secret Skedar army -4209 – Assassinate Skedar leader -420A – Obtain Night Vision -420B – Nothing -420C – Night Vision -420D – Night Vision -420E – Picked up Night Vision -420F – Obtain Scanner -4210 – Nothing -4211 – Scanner -4212 – Scanner -4213 – Picked up Scanner -4214 – Obtain Target Amplifier -4215 – Nothing -4216 – Target Amplifier -4217 – Target Amplifier -4218 – Picked up Target Amplifier -4219 – Target Amplifier placed correctly -421A – Target Amplifier placed incorrectly -421B – Generator has been reactivated -421C – Skedar Inner Sanctum has been reached -421D – Skedar secret army has been defeated -421E – This seems to be one of the special pillars -421F – The power's more constant in this area. .The Inner Sanctum can't be far - away -4220 – OH, NO!!! A Skedar army in suspended animation! -4221 – Okay, this is it... Cut off the head and the .body will perish -4222 – This is the Skedar fanatics' most holy place. They believe this planet - is sacred ground. The Battle Shrine is located at the most holy part of - this holy planet -4223 – So let me get this straight - it's holy. But there's more to it than - that, isn't there? -4224 – Yes. In all of the time that we Maians fought the Skedar, we never found - this place. We knew that until it was destroyed, the war would never be - over. We fought the Skedar to a standstill, we earned a ceasefire - but - we always had to be on our guard. The destruction of this place would - mean a chance at true peace -4225 – Then we have to be certain that no fanatics survive. I'll go in and take - out the leader. You'll have to summon the Maian fleet to level the - Shrine -4226 – If you're caught on the ground when the fleet gets here, you won't stand - a chance -4227 – That's a mistake I don't intend to make -4228 – Yesss -4229 – Joanna! Joanna! -422A – Elvis! Elvis! Over here -422B – No problem. Grab my arms - we'll get you out in no time -422C – No, quick! Give me your gun! -422D – Will! You! Just! Let! Go! -422E – I managed to get the fleet to stop the bombardment while I looked for - you. They'll start as soon as we're clear -422F – I’d have got out in time if that one hadn't grabbed my foot -4230 – Of course, Joanna, of course -4231 – No, I would have -4232 – I believe you -4233 – Make your sacrifice to the God of War -4234 – Grenade ammo used up - can't enter Shrine -4235 – Alternative entrance to Shrine created -4236 – Where are you? Are you hurt? - -WAR! – 46XX ------------ -4600 – Perfect Agent Briefing -4601 – BATTLE SHRINE -4602 – Special Agent Briefing -4603 – Agent Briefing -4604 – Kill Skedar King -4605 – Kill Skedar King 2 -4606 – Kill Skedar King 3 -4607 – Maian leader has been killed -4608 – Skedar King has been killed - -Escape – 48XX -------------- -4800 – Perfect Agent Breifing -4800 – AREA 51 – ESCAPE -4800 – Special Agent Breifing -4800 – Agent Breifing -4800 – Nothing -4800 – Nothing -4800 – Nothing -4800 – Nothing -4808 – Nothing -4809 – Locate alien tech medpack -480A – Rendezvous with CI spy -480B – Revive Maian Bodyguard -480C – Locate secret hangar -480D – Escape from Area 51 -480E – Joanna - this is Jonathan. You're in grave danger -480F – They've flooded the area with nerve gas -4810 – Get our friend to the containment lab. .There's a hiding place there -4811 – I'll contact you when you get there - good luck! -4812 – Good work, Jo. We need to meet up. They're .getting suspicious of me -4813 – Use the maintenance hatch I've opened .in one of the containment labs. - Hurry -4814 – Obtain alien medpack -4815 – Cassandra De Vries' -4816 – Alien medpack -4817 – Nothing -4818 – Picked up an alien medpack -4819 – Joanna - over here -481A – We need to get back to our friend -481B – Right, we're near. Cover me, Jo -481C – Okay - stand back -481D – Jonathan has been killed -481E – Elvis has been killed -481F – The secret hangar has been located -4820 – Okay, Jo - let's go -4821 – Alien medpack activated -4822 – Alien medpack operation aborted -4823 – Alien medpack has been administered -4824 – Mission critical object destroyed -4825 – Outer hangar door is opening -4826 – Outer hangar door is closing -4827 – Inner hangar door is opening -4828 – Inner hangar door is closing -4829 – It's the only way out of here -482A – You're the only one who can fly it, Elvis, so get in -482B – But we can't leave you behind -482C – There must be a way out of here -482D – One of us will have to stay behind and open the .hangar doors -482E – I'll get out on that hoverbike. Cover me while I .open the doors -482F – Jonathan, go with Elvis. I'll see to the consoles -4830 – It's dangerous, Jo -4831 – I can handle it... Trust me -4832 – Okay -4833 – Damn it, Joanna... cover me! -4834 – I'll cover the stairs - you take the ramp -4835 – The hangar doors are now open -4836 – Medical containment doors unlocked -4837 – The medpack's got to be somewhere around here -4838 – Time to hook up with Jonathan, before he gets .into any more trouble -4839 – That smell... oil... I smelt that in the other .hangars -483A – The jetbike should get me out before they lock .the base down -483B – Oh, no! We have a problem. It's a single seater! -483C – Two can get in but no more -483D – Plus, it's got no style, you know what I'm saying? -483E – I'm not having this. That specimen is government property and should not - leave the base. -483F – Let's see how that overconfident thief deals with our gas defense - system. She'll think twice before messing with me again! -4840 – What's that noise? Can't be... Gas! -4841 – Noooo, that wasn't meant to happen! -4842 – Please stop! I'm not supposed to die. She Arggghhh! -4843 – You idiot! We'd better get out of here -4844 – Gasps, chokes, and wheezes -4845 – ***aahh...! aahaa...! aaaaahhh! aha. ahh.*** -4846 – I'm alive. I thought I'd be chopped up like the others by now. You're - from the Institute, aren't you? I recognize you from before. You helped - me. Thank you -4847 – You... You speak our language? -4848 – Watch her... she's sharp -4849 – Earrggghh...eerggh -484A – What's wrong? -484B – I have a headache. And with a head this big, that's no joke -484C – Can you walk? We must leave before they get organized and hunt us down -484D – I think so. What's your name? -484E – I'm Agent Dark. Or Joanna, if you prefer -484F – Well, Joanna, I'm Protector One. But you can call me... Elvis! -4850 – Console is not active -4851 – What the hell do you think you're doing? .This is supposed to be a - sealed room! .Don't -4852 – you know anything about autopsy .procedures? -4853 – Director Easton will hear about this, .young lady You can't take that! - It's government property! .This is intolerable! It's... it's... - .unprofessional!! -4854 – I don't care much for procedures! - -Mr. Blondes Revenge – 4AXX --------------------------- -4A00 – Perfect Agent Briefing -4A01 – LUCERNE TOWER -4A02 – Special Agent Briefing -4A03 – Agent Briefing -4A04 – Locate and escort Cassandra to helipad -4A05 – Plant explosive device in lab lift -4A06 – Eliminate dataDyne Captain -4A07 – Get the hell out of my office -4A08 – Go to the helipad if you want to live -4A09 – You won't shoot me! -4A0A – How dare you disturb me! -4A0B – You will regret this intrusion, girl -4A0C – If I were you, I'd leave... NOW! -4A0D – You won't shoot me! -4A0E – Cassandra has been immobilized -4A0F – Cassandra has been captured successfully -4A10 – Security chief has been eliminated -4A11 – Nothing -4A12 – Nothing -4A13 – Skedar bomb -4A14 – Skedar bomb -4A15 – Picked up Skedar bomb -4A16 – Skedar bomb has been placed successfully -4A17 – Skedar bomb has detonated -4A18 – Lift doors locked - bomb cannot be placed -4A19 – Lift has been disabled - -Guns and items - 4CXX ---------------------- -4C01 - Kill Count -4C02 - Died Once -4C03 - Died -4C04 - Times -4C05 - Suicide Count -4C06 - Unarmed -4C07 - Falcon 2 -4C08 - Falcon 2 (Silencer) -4C09 - Falcon 2 (Scope) -4C0A - MagSec 4 -4C0B - Mauler -4C0C - DY357 Magnum -4C0D - DY357-LX -4C0E - Phoenix -4C0F - CMP150 -4C10 - AR34 -4C11 - Dragon -4C12 - SuperDragon -4C13 - K7 Avenger -4C14 - Cyclone -4C15 - MagSec SMG -4C16 - RC-P120 -4C17 - Callisto NTG -4C18 - Laptop Gun -4C19 - Shotgun -4C1A - Reaper -4C1B - Rocket Launcher -4C1C - Devestator -4C1D - Slayer -4C1E - MaianGrenade -4C1F - Farsight XR-20 -4C20 - Sniper Rifle -4C21 - Crossbow -4C22 - Tranquillizer -4C23 - Combat Knife -4C24 - Grenade -4C25 - N-Bomb -4C26 - Timed Mine -4C27 - Proximity Mine -4C28 - Remote Mine -4C29 - ECM Mine -4C2A - FlashBang -4C2B - Disguise -4C2C - Rocket -4C2D - Homing Rocket -4C2E - Grenade Round -4C2F - Laser -4C30 - Bolt -4C31 - Psychosis Gun -4C32 - PP9i -4C33 - CC13 -4C34 - KLO1313 -4C35 - KF7 Special -4C36 - ZZT (9mm) -4C37 - DMC -4C38 - AR53 -4C39 - RC-P45 -4C3A - Tester -4C3B - Night Vision -4C3C - Camspy -4C3D - Drugspy -4C3E - Bombspy -4C3F - Door Decoder -4C40 - Explosives -4C41 - X-Ray Scanner -4C42 - Alien Medpack -4C43 - Suitcase -4C44 - Disguise -4C45 - IR Scanner -4C46 - R-Tracker -4C47 - Breifcase -4C48 - Suicide Pill -4C49 - Cloaking Device -4C4A - Combat Boost -4C4B - Data Uplink -4C4C - Horizon Scanner -4C4D - Falcon 2 (s) -4C4E - Falcon 2 (+) -4C4F - Farsight -4C50 - R-Launcher -4C51 - Proxy Mines -4C52 - Psychosis -4C53 - Knife -4C54 - DY357 -4C55 - Single Shot -4C56 - Rapid Fire -4C57 - Burst Fire -4C58 - Reapage -4C59 - Shotgun Fire -4C5A - Rail-Gun Effect -4C5B - Rocket Launcher -4C5C - Targeted Rocket -4C5D - Fly-by-wire Rocket -4C5E - Pistol Whip -4C5F - Explosive Shells -4C60 - Guided Shots -4C61 - Magazine Discharge -4C62 - Grenade Launcher -4C63 - Wall Hugger -4C64 - Punch -4C65 - Disarm -4C66 - Follow Lock-on -4C67 - Use Scope -4C68 - Half Magazine Discharge -4C69 – Double Blast -4C6A - Grinder -4C6B - Sedate -4C6C - Lethal Injection -4C6D - Knife Slash -4C6E - Throw Poison Knife -4C6F - Target Locator -4C70 - Instant Kill -4C71 - Boost -4C72 - Revert -4C73 - High Impact Shells -4C74 - Cloak -4C75 - Deploy as Sentry Gun -4C76 - Proximity Self Destruct -4C77 - Threat Detector -4C78 - Timed Explosive -4C79 - Proximity Explosive -4C7A - Remote Explosive -4C7B - Detonate -4C7C - 4-Second Fuse -4C7D - Proximity Pinball -4C7E - Timed Detonation -4C7F - Proximity Detonation -4C80 - 3-Round Burst -4C81 - Charge-up Shot -4C82 - Crouch -4C83 - Infect -4C84 - Pulse Fire -4C85 - Short Range Stream -4C86 - Impact Detonation -4C87 - Light Amplifier -4C88 - Mobile Camera -4C89 - X-Ray Vision -4C8A - Thermal Imager -4C8B - Zoom -4C8C - Jamming Device -4C8D - Connect -4C8E - Identify Targets -4C8F - Wear Disguise -4C90 - Place Explosives -4C91 - Telescopic Sight -4C92 - Silencer -4C93 - Magazine Extension -4C94 - Laser Sight -4C95 - dataDyne -4C96 - Carrington -4C97 - Chesluk Industries -4C98 - Skedar -4C99 - Maian -4C9A - JonesCorp -4C9B – Unarmed Description -4C9C – Falcon 2 Description -4C9D – Falcon 2 Silencer Description -4C9E – Falcon 2 Scope Description -4C9F – Magsec 4 Description -4CA0 – Mauler Description -4CA1 – DY357 Description -4CA2 – DY357-LX Description -4CA3 – Phoenix Description -4CA4 – CMP150 Description -4CA5 – AR34 Description -4CA6 – Dragon Description -4CA7 – SuperDragon Description -4CA8 – K7 Avenger Description -4CA9 – Cyclone Description -4CAA – RC-P120 Description -4CAB – Callisto NTG Description -4CAC – Laptop Gun Description -4CAD – Shotgun Description -4CAE – Reaper Description -4CAF – Rocket Launcher Description -4CB0 – Devastator Description -4CB1 – Slayer Description -4CB2 – FarSight XR-20 Description -4CB3 – Sniper Rifle Description -4CB4 – Crossbow Description -4CB5 – Tranquilizer Description -4CB6 – Combat Knife Description -4CB7 – Grenade Description -4CB8 – N-Bomb Description -4CB9 – Timed Mine Description -4CBA – Proximity Mine Description -4CBB – Remote Mine Description -4CBC – ECM Mine Description -4CBD – Laser Description -4CBE – Combat Boost Description -4CBF – Night Vision Description -4CC0 – CamSpy Description -4CC1 – X-Ray Scanner Description -4CC2 – IR Scanner Description -4CC3 – Cloaking Device Description -4CC4 – Horizon Scanner Description -4CC5 – Data Uplink Description -4CC6 – R-Tracker Description -4CC7 – Presidential Scanner Description -4CC8 – Door Decoder Description -4CC9 – Alien Medpak Description -4CCA – Explosives Description -4CCB – Skedar Bomb Description -4CCC – Comms. Rider Description -4CCD – Tracer Bug Description -4CCE – Target Amplifier Description -4CCF – Flight Plans Description -4CD0 – Information Discs from Pelagic II Description -4CD1 – Dr. Caroll’s Backup Disc Description -4CD2 – Psychosis Gun Description -4CD3 – Disguise Description -4CD4 – PROXY -4CD5 – TIMED -4CD6 – REMOTE -4CD7 – AUTOGUN -4CD8 – IMPACT -4CD9 – Big King Rocket -4CDA – Data Uplink -4CDB – President Scanner -4CDC – AutoSurgeon -4CDD – Skedar Bomb -4CDE – Comms Rider -4CDF – Tracer Bug -4CE0 – Target Amplifier -4CE1 – Flight Plans -4CE2 – Research Tape -4CE3 – Backup Disk -4CE4 – Key Card -4CE5 – Briefcase -4CE6 – Necklace -4CE7 – PresidentScan -4CE8 – Boost -4CE9 – XRayScan -4CEA – HorizonScan -4CEB – Target Amp -4CEC – BombSpy Description -4CED – DrugSpy Description -4CEE – Cassandra De Vries necklace Description -4CEF – Cassandra De Vries replacement necklace. Username: %s Password: %s -4CF0 – Shield -4CF1 – Shield Description -4CF2 – Combat Boosts -4CF3 – Data Uplink -4CF4 – Night Vision -4CF5 – Door Decoder -4CF6 – Suicide Pill -4CF7 – Tranquilizer -4CF8 – AutoSurgeon -4CF9 – Backup Disk -4CFA – Disguise -4CFB – Laptop Gun -4CFC – Remote Mine -4CFD – Shotgun -4CFE – Sniper Rifle -4CFF – Timed Mine - -End Credits – 4EXX ------------------- -4E00 - perfect dark -4E01 - beau ner Chesluk -4E02 - guns and visual orgasms -4E03 - jonathan nasty mummery -4E04 - mover and shaker -4E05 - darkmark -4E06 - reality engineer -4E07 - chris tilston -4E08 - designs on the future -4E09 - chris darling -4E0A - weapons specialist -4E0B - duncan botwood -4E0C - grey area -4E0D - b jones -4E0E - bodybuilder -4E0F - steve malpass -4E10 - perfect locations and vox -4E11 - brian marshall -4E12 - -aqham- -4E13 - russell Irwin -4E14 - well packed man -4E15 - jamie 'evo' Williams -4E16 - manic welsh designer -4E17 - ross bury -4E18 - bionic backgrounds -4E19 - martin penny -4E1A - sound geezer -4E1B - grant kirkhope -4E1C - play that music maestro -4E1D - david clynick -4E1E - bangin hardkore choonz -4E1F - keith 'bunny' rabbette -4E20 - dinomic backgrounds -4E21 - dd snipers -4E22 - kevin bayliss -4E23 - dean smith -4E24 - graham smith -4E25 - mike 'curry' currington -4E26 - tony wong -4E27 - simon farmer -4E28 - leigh loveday -4E29 - rob harrison -4E2A - steven hurst -4E2B - fearsome foursome -4E2C - phil dunne -4E2D - ricky berwick -4E2E - gareth glover -4E2F - jonathon ambrose -4E30 - trent's henchmen -4E31 - lee Musgrave -4E32 - johnni Christensen -4E33 - mark betteridge -4E34 - chris marlow -4E35 - robin beanland -4E36 - neil Gallagher -4E37 - feargal plant -4E38 - voices in the dark -4E39 - eveline fischer -4E3A - chris Sutherland -4E3B - chris seavor -4E3C - john silke -4E3D - ben cullum -4E3E - louise tilston -4E3F - alistair Lindsay -4E40 - duncan botwood -4E41 - b jones -4E42 - beau Chesluk -4E43 - steve malpass -4E44 - ci techs -4E45 - richard 'force 9' gale -4E46 - mark green -4E47 - alex zoro -4E48 - mark Wilson -4E49 - hard and wary support -4E4A - pete 'hardrom' cox -4E4B - paul 'max' mikell -4E4C - doug crouch -4E4D - dk crew -4E4E - mark Stevenson -4E4F - carl tilley -4E50 - chris woods -4E51 - motion capture -4E52 - alan tippertronic -4E53 - des easen -4E54 - jim 'love' ballard -4E55 - going through the motions -4E56 - duncan 'bot' botwood -4E57 - michelle tipper -4E58 - sue 'falling' fell -4E59 - doug 'crouch' crouch -4E5A - ross bury -4E5B - rare exterminators -4E5C - huw ward -4E5D - adam munton -4E5E - david wong -4E5F - luke munton -4E60 - gary phelps -4E61 - john silke -4E62 - matthew carter -4E63 - gavin price -4E64 - gareth Stevenson -4E65 - bushbaby -4E66 - stephen stamper -4E67 - ross bullimore -4E68 - justin cook -4E69 - dale murchie -4E6A - roger smith -4E6B - andrew Wilson -4E6C - dark commanders -4E6D - bis -4E6E - wombat -4E6F - rare in the sun -4E70 - joel Hochberg -4E71 - eileen Hochberg -4E72 - scott Hochberg -4E73 - jerry rogowski -4E74 - testing (rare miami) -4E75 - keith coll -4E76 - testing (noa) -4E77 - michael kelbaugh -4E78 - tim Bechtel -4E79 - tom hertzog -4E7A - melvin 'sherwood' forrest -4E7B - dougall Campbell -4E7C - roger Harrison -4E7D - jeff kalles -4E7E - the perfect core -4E7F - -darker than you -4E80 - treehouse -4E81 - armond williams junior -4E82 - henry sterchi -4E83 - ed ridgeway -4E84 - perfect spelling -4E85 - teresa lillygren -4E86 - nintendo -4E87 - mr arakawa -4E88 - mike fukuda -4E89 - don james -4E8A - michael kelbaugh -4E8B - howard Lincoln -4E8C - ken lobb -4E8D - jacqualee story -4E8E - gail tilden -4E8F - copyright rare 2000 -4E90 - perfect dark and the pd device -4E91 - are trademarks -4E92 - rare -4E93 - designs on the future -4E94 - perfect dark is forever -4E95 - testing (noe) -4E96 - supervisor -4E97 - kai 'jellybean' Neumann -4E98 - deputy supervisor -4E99 - maurice 'pathfinder' tisdale -4E9A - coordinators -4E9B - patrick 'capricorn' thieret -4E9C - andreas 'brennero' dietz -4E9D - editor -4E9E - assistant editor -4E9F - assistant editors -4EA0 - localization (french) -4EA1 - julien 'sexy boy' bardakoff -4EA2 - jean-baptiste 'ours noir' fleury -4EA3 - nicolas 'darth lapinou' gourio -4EA4 - nicolas 'el betal' Robert -4EA5 - localization (german) -4EA6 - micky 'scorpio's movement' auer -4EA7 - jan 'ian' peitzmeier -4EA8 - localization (italian) -4EA9 - elenor isbitish -4EAA - calimero tiiiun -4EAB - localization (spanish) -4EAC - antonio 'toro' greppi -4EAD - carlos 'yoshio' mantilla -4EAE - susa & natalia -4EAF - localization -4EB0 - product coordinator -4EB1 - andy 'fiedl' fey -4EB2 - product supervisor -4EB3 - tanja 'personalized sarcasm' baar -4EB4 - product localization manager -4EB5 - kai '0 to 100' zeh - -Multiplayer menu - 50XX ------------------------ -5000 - Most Suicidal -5001 - Who Needs Ammo? -5002 - Least Shielded -5003 - Best Protected -5004 - Marksmanship -5005 - Most Professional -5006 - Most Deadly -5007 - Most Harmless -5008 - Most Cowardly -5009 - Most Frantic -500A - Most Honorable -500B - Most Dishonorable -500C - Shortest Life -500D - Longest Life -500E - Double Kill -500F - Triple Kill -5010 - Quad Kill -5011 - Game Setup -5012 - Load Settings -5013 - Scenario -5014 - Arena -5015 - Options -5016 - Teams -5017 - Weapons -5018 - Limits -5019 - Simulants -501A - Save settings -501B - Abort Game -501C - Player Setup -501D - Load Player -501E - Name -501F - Character -5020 - Handicap -5021 - Control -5022 - Player Options -5023 - Statistics -5024 - Start Game -5025 - Drop out -5026 - Save Player -5027 - Save Copy of Player -5028 - Stuff -5029 - Soundtrack -502A - Team Names -502B - Ratio -502C - Lock -502D - None -502E - Last Winner -502F - Last Loser -5030 - Random -5031 - Challenge -5032 - Combat Challenges -5033 - Abort Challenge -5034 - Abort -5035 - Are you sure you want to abort the game? -5036 - Abort -5037 - Cancel -5038 - %s -5039 - Accept -503A - Cancel -503B - Team Names -503C - Back -503D - Change Team Names -503E - Soundtrack -503F - Current: -5040 - Multiple Tunes -5041 - Back -5042 - Multiple Tunes -5043 - Random -5044 - Select Tunes -5045 - Select Tunes -5046 - Team Control -5047 - Teams enabled -5048 - Teams -5049 - Auto Team... -504A - Back -504B - Auto Team -504C - Two teams -504D - Three teams -504E - Four Teams -504F - Maximum teams -5050 - Humans vs. Simulants -5051 - Human-Simulant Pairs -5052 - Cancel -5053 - Simulants -5054 - Add Simulant -5055 - 1: -5056 - 2: -5057 - 3: -5058 - 4: -5059 - 5: -505A - 6: -505B - 7: -505C - 8: -505D - Clear All -505E - Back -505F - Difficulty: -5060 - Change Type -5061 - Character... -5062 – Delete Simulant -5063 – Back -5064 – Simulant Character -5065 – Add Simulant -5066 – Change Simulant -5067 – Normal Simulants -5068 – Special Simulants -5069 – Ready! -506A - …And Waiting -506B – Limits -506C – Time -506D – Score -506E – Restore Defaults -506F – Back -5070 – No Limit -5071 - %d -5072 - %d Min -5073 – Arena -5074 – Dark -5075 – Classic -5076 – Random -5077 – Skedar -5078 – Pipes -5079 – Ravine -507A – G5 Building -507B – Sewers -507C – Warehouse -507D – Grid -507E – Ruins -507F – Area 52 -5080 – Base -5081 – Rooftop -5082 – Fortress -5083 – Villa -5084 – Car Park -5085 – Temple -5086 – Complex -5087 – Felicity -5088 – Random -5089 – Load Player -508A – B Button to cancel -508B – Load Game Settings -508C - Scenario: %s Arena: %s Simulants: %d -508D – Presets -508E – Player Name -508F – Character -5090 – Load Head… -5091 – Stats for %s -5092 – Kills: -5093 – Deaths: -5094 – Accuracy: -5095 – Headshots: -5096 – Ammo used: -5097 – Damage Dealt: -5098 – Pain Received: -5099 – Games Played: -509A – Games Won: -509B – Games Lost: -509C – Time: -509D – Distance: -509E – Medals Won: -509F – Accuracy: -50A0 – Head Shot: -50A1 – Killmaster: -50A2 – Survivor: -50A3 – Your Title: -50A4 – Back -50A5 – Completed Challenges -50A6 – Back -50A7 – Options -50A8 – Highlight Pickups -50A9 – Highlight Players -50AA – Highlight Teams -50AB – Radar -50AC – Back -50AD – Weapons -50AE – Set: -50AF – Current Weapons Setup: -50B0 – 1: -50B1 – 2: -50B2 – 3: -50B3 – 4: -50B4 – 5: -50B5 – 6: -50B6 – Back -50B7 – Save Game Setup -50B8 – Do you want to save over your original game? -50B9 – Save over original -50BA – Save Copy -50BB – Do not save -50BC – Game file name -50BD – Enter a name for your game setup file: -50BE – Confirm -50BF – Your player file is always saved -50C0 – Save a copy now? -50C1 – No -50C2 – Yes -50C3 – Drop out -50C4 – Are you sure you want to drop out? -50C5 – Drop out -50C6 – Cancel -50C7 – Control -50C8 – Control Style -50C9 – Reverse Pitch -50CA – Look Ahead -50CB – Head Roll -50CC – Auto-aim -50CD – Aim Control -50CE – Sight on Screen -50CF – Show Target -50D0 – Zoom Range -50D1 – Ammo on Screen -50D2 – Gun Function -50D3 – Paintball -50D4 – Back -50D5 – Hold -50D6 – Toggle -50D7 – Combat Options -50D8 – Breifcase Options -50D9 – Hacker Options -50DA – Pop a Cap Options -50DB – Hill Options -50DC – Capture Options -50DD – Boxes Options -50DE – One-Hit Kills -50DF – Slow Motion -50E0 – Fast Movement -50E1 – Display Team -50E2 – No Radar -50E3 – No Auto-Aim -50E4 – No Player Highlight -50E5 – No Pickup Highlight -50E6 – Highlight Target -50E7 – Highlight Terminal -50E8 – Boxes on Radar -50E9 – Hill on Radar -50EA – Mobile Hill -50EB – Time -50EC – Show on Radar -50ED – Highlight Briefcase -50EE – Show on Radar -50EF – Back -50F0 – Off -50F1 – On -50F2 – Smart -50F3 – Scenario -50F4 – Free for All -50F5 – – Teamwork – -50F6 – Combat -50F7 – Hold the Briefcase -50F8 – Hacker Central -50F9 – Pop a Cap -50FA – King of the Hill -50FB – Capture the Case -50BC – Touch that Box -50FD – Combat -50FE – Briefcase -50FF – Hacker -5100 – Pop -5101 – Hill -5102 – Capture -5103 – Boxes -5104 – Game Over -5105 – Title: -5106 – Weapon of Choice: -5107 – Awards -5108 – 1st -5109 – 2nd -510A – 3rd -510B – 4th -510C – 5th -510D – 6th -510E – 7th -510F – 8th -5110 – 9th -5111 – 10th -5112 – 11th -5113 – 12th -5114 – Player Ranking -5115 – Deaths -5116 – Score -5117 – Team Ranking -5118 – Stats for %s -5119 – Suicides -511A – Deaths -511B – Kills -511C – Inventory -511D – Control -511E – Game Time: -511F – End Game -5120 – Pause -5121 – Unpause -5122 – End Game -5123 – Are you sure? -5124 – Cancel -5125 – End Game -5126 – PerfectHead -5127 – Load a saved Head -5128 – Make a new Head -5129 – Edit a loaded Head -512A – Edit a PerfectHead -512B – Choose a slot to edit: -512C – Cancel -512D – Make a new Head -512E – Load a saved Head -512F – Where do you want to be able -5130 – to use this Head? -5131 – Combat Simulator -5132 – All Missions -5133 – Both -5134 – Cancel -5135 – Camera Setup -5136 – Inset you camera into your -5137 – game boy pak. -5138 – Then, inset your game boy pak -5139 – into any controller. -513A – OK -513B – Cancel -513C – Error -513D – Game boy camera not detected! -513E – Please check all connections -513F – and try again -5140 – Cancel -5141 – Choose camera -5142 – More than one camera detected. -5143 – Please select which camera you want to use -5144 – OK -5145 – Cancel -5146 – PerfectHead -5147 – Take a picture now -5148 – Load picture from camera -5149 – Cancel -514A – Load from camera -514B – Choose picture to read from camera -514C – Cancel -514D – Take picture -514E – Shoot! -514F – Cancel -5150 – Keep picture -5151 – Try again -5152 – Load PerfectHead -5153 – Inset the controller pak -5154 – containing the Head you -5155 – wish to load into any -5156 – controller. -5157 – Controller pak: -5158 – Cancel -5159 – Source: -515A – Pak 1 -515B – Pak 2 -515C – Pak 3 -515D – Pak 4 -515E - -515F – PerfectHead Editor -5160 – Take another picture -5161 – Change Head -5162 – Position picture -5163 – Color face & hair -5164 – Shape Head -5165 – Remove Head -5166 – Cancel changes -5167 – Keep changes -5168 – Shape Head -5169 – Depth -516A – OK -516B – Cancel -516C – Position image -516D – Brightness -516E – OK -516F – Cancel -5170 – Choose Head -5171 – OK -5172 – Cancel -5173 – Remove PerfectHead -5174 – Are you sure you want to -5175 – remove this Head from memory? -5176 – Delete -5177 – Cancel -5178 – Cancel changes -5179 – Are you sure you want to -517A – throw away your changes? -517B – Throw away -517C – Go back to editor -517D – Save PerfectHead -517E – You have edited this Head. -517F – Do you want to keep your changes? -5180 – Keep -5181 – Revert -5182 – Save PerfectHead -5183 – Your changes will be kept in memory -5184 – Would you like to save your changes -5185 – to the controller pak? -5186 – Save -5187 – Don’t save -5188 – Save PerfectHead -5189 – You can now save your Head on -518A – a controller pak if you wish. -518B – If you want to do this please -518C – ensure a controller pak is inserted -518D – and choose ‘Save’. -518E – Save -518F – Don’t save -5190 – Head complete! -5191 – To use your Head in the Combat Simulator -5192 – select the Head from the character -5193 – of the player/simulant settings menu -5194 – Your mission Heads will now appear -5195 – in any level you play. -5196 – You can now edit your Head further. -5197 – Finish -5198 – Edit Head -5199 – Head colour -519A - Face: -519B – Hairstyle: -519C – OK -519D – Cancel -519E – Press the B button to go back -519F – Hanger information -51A0 – Holotraining -51A1 – Device list -51A2 – Information -51A3 – Locations -51A4 – Vehicles -51A5 – Character profiles -51A6 – Other information -51A7 – Training Stats -51A8 – Time taken: -51A9 – Completed! -51AA – Failed -51AB – Ok -51AC – Resume -51AD – Cancel -51AE – Abort -51AF – Character Profiles -51B0 – Name: -51B1 – Age: -51B2 – Race: -51B3 – Press B button to go back. -51B4 – Cheats -51B5 – It is now safe to turn off your console. -51B6 – Cancel -51B7 – Bronze -51B8 – Silver -51B9 – Gold -51BA – Difficulty -51BB – Difficulty: -51BC – Select Difficulty: -51BD – Nothing -51BE – Weapon -51BF – Training info -51C0 – Training Stats -51C1 – Completed! -51C2 – Score: -51C3 – Targets Destroyed: -51C4 – Difficulty: -51C5 – Time Taken: -51C6 – Weapon: -51C7 – Accuracy: -51C8 – Not Failed -51C9 – Out of Ammo -51CA – Time over -51CB – Score Unattainable -51CC – Too Inaccurate -51CD – Bull’s-Eye -51CE – Zone 1 -51CF – Zone 2 -51D0 – Zone 3 -51D1 – Hit Total -51D2 – Scoring -51D3 – 10 -51D4 – 5 -51D5 – 2 -51D6 – 1 -51D7 – Ammo Limit: -51D8 – Time Limit: -51D9 – Min Accuracy: -51DA – Goal Targets: -51DB – Goal Score: -51DC – Cheats -51DD – Done -51DE – Warning -51DF – If you activate any cheats you will be unable to progress any further in - the game, while those cheats are active -51E0 – OK -51E1 – Cancel -51E2 – Player %d -51E3 – Press START -51E4 – Searching for Camera! -51E5 – Calibrating Camera -51E6 – Downloading Image -51E7 – Loading Image -51E8 – Saving Image -51E9 – Transferring Image -51EA – Uploading Segment -51EB – Checking Controller Pak -51EC – Getting PerfectHead -51ED – Saving PerfectHead -51EE – Auto Camera Adjustment -51EF – please wait… - -Object names - 52XX -------------------- -PAL VALUES - -5200 – Picked up %s. -5201 – Picked up %s. -5202 – Picked up %s. -5203 – Picked up %s. -5204 – Picked up %s. -5205 – Picked up %s. -5206 – Picked up %s. -5207 – Picked up %s. -5208 – double -5214 – combat knife -5215 – combat knives -5231 – some -5232 – Some -5233 – some -5234 – Some -5235 – some -5236 – Some -5237 – Nothing -5238 – Nothing -523F – Nothing -5240 – Nothing -5241 – bolt -5242 – orbs -5243 – reaper ammo -5244 – cloaking devices -5245 – boost pills -5246 – ammo -5247 – cartridges -5248 – magnum bullets -5249 – golden bullets -524A – grenades -524B – grenade rounds -524C – rockets -524D – homing rockets -524E – remote mines -524F – proximity mines -5250 – timed mines -5251 – darts -5252 – N-Bombs -5253 – sedatives -5254 – tokens - -NTSC VALUES - -5200 – Picked up -5201 – Double -5202 – some -5203 – Some -5215 – combat -5216 – knife -5217 – knives -5218 – s - -NTSC – PAL – VALUES - -5204 – 5239 – a -5205 – 523A – A -5206 – 523B – an -5207 – 523C – An -5208 – 523D – the -5209 – 523E – The -520A – 5209 – ammo -520B – 520A – cartridge -520C – 520B – magnum bullet -520D – 520C – golden bullet -520E – 520D – grenade -520F – 520E – grenade round -5210 – 520F – rocket -5211 – 5210 – homing rocket -5212 – 5211 – remote mine -5213 – 5212 – proximity mine -5214 – 5213 – timed mine -5219 – 5216 – dart -521A – 5217 – N-Bomb -521B – 5218 – sedatives -521C – 5219 – explosive pen -521D – 521A – explosive case -521E – 521B – flare -521F – 521C – piton -5220 – 521D – of dynamite -5221 – 521E – stick -5222 – 521F – sticks -5223 – 5220 – bug -5224 – 5221 – micro camera -5225 – 5222 – GoldenEye key -5226 – 5223 – token -5227 – 5224 – plastique -5228 – 5225 – Picked up a key. -5229 – 5226 – Picked up a shield. -522A – 5227 – A shield. -522B – 5228 – Picked up something. -522C – 5229 – This door is locked. -522D – 522A – bolt -522E – 522B – orb -522F – 522C – reaper ammo -5230 – 522D – cloaking device -5231 – 522E – boost pill -5232 – 522F – your -5233 – 5230 – Your - -Cheats and misc - 54XX ----------------------- -PAL VALUES - -5400 - %s has the Data Uplink -5401 - %s has the Briefcase -5402 - %s has the %s Briefcase -5403 - %s has our Briefcase -5404 – Got the %s Briefcase -5405 – You captured the %s Briefcase -5406 - %s captured our Briefcase -5407 - %s captured the %s Briefcase - -NTSC VALUES - -5400 – %shas the.%s -5401 – %shas the %s%s -5402 – %shas our.%s -5403 – Got the %s%s -5404 – You captured.the %s%s -5405 – %scaptured our.%s -5406 – %scaptured.the %s%s. - -NTSC – PAL – VALUES - -5407 – 5408 – Have a point for living! -5408 – 5409 – You’re supposed to look -5409 – 540A – after your friends! -540A – 540B – Well done! -540B – 540C – You popped a cap! -540C – 540D – Have 2 points… -540D – 540E – You are the victim! -540E – 540F – Protect %s! -540F – 5410 – Get %s! -5410 – 5411 – Download successful. -5411 – 5412 – Connection broken. -5412 – 5413 – Starting download. -5413 – 5414 – You need to use the Data Uplink. -5414 – 5415 – King of the Hill! -5415 – 5416 – We have the Hill! -5416 – 5417 – %s has captured the Hill! -5417 – 5418 – %ds/Point -5418 – 5419 – 1 Point! -5419 – 541A – No Shield -541A – 541B – Automatics -541B – 541C – Rocket Launcher -541C – 541D – Simulants -541D – 541E – King of the Hill -541E – 541F – Complex Farsight -541F – 5420 – Hold the Briefcase -5420 – 5421 – Pistol one-hit kills -5421 – 5422 – Capture the Case -5422 – 5423 – Cloaking -5423 – 5424 – Temple Explosives -5424 – 5425 – Slayer -5425 – 5426 – Tranquilliser -5426 – 5427 – Slow Motion -5427 – 5428 – Press START -5428 – 5429 – Paused -5429 – 542A – Custom -542A – 542B – Random -542B – 542C – Random Five -542C – 542D – Close Combat -542D – 542E – Proximity mine -542E – 542F – Rocket Launcher -542F – 5430 – Grenade Launcher -5430 – 5431 – Explosive -5431 – 5432 – Golden Magnum -5432 – 5433 – Heavy -5433 – 5434 – Tranquilliser -5434 – 5435 – Farsight -5435 – 5436 – Power -5436 – 5437 – Automatics -5437 – 5438 – Pistols -5438 – 5439 – Test -5439 – 543A – 4mb Test -543A – 543B – Nothing (It actually says Nothing) -543B – 543C – Shield -543C – 543D – Disabled -543D – 543E – Objectives Completed -543E – 543F – Unknown -543F – 5440 – Missing -5440 – 5441 – Damaged Controller Pak -5441 – 5442 – is damaged or -5442 – 5443 – inserted incorrectly. -5443 – 5444 – Attempt Repair -5444 – 5445 – Retry -5445 – 5446 – Continue without using the Controller Pak -5446 – 5447 – Full Controller Pak -5447 – 5448 – is to full to save note – 1 note and 28 pages are required to - save -5448 – 5449 – Enter the Controller Pak menu to free some space -5449 – 544A – OK -544A – 544B – -------- -544B – 544C – Hurricane Fists -544C – 544D – Cloaking Device -544D – 544E – Invincible -544E – 544F – All guns in Solo -544F – 5450 – Unlimited Ammo -5450 – 5451 – Unlimited Ammo, No Reloads -5451 – 5452 – Slo-mo Single Player -5452 – 5453 – DK mode -5453 – 5454 – Trent’s Magnum -5454 – 5455 – Farsight -5455 – 5456 – Small Jo -5456 – 5457 – Small Characters -5457 – 5458 – Enemy Shields -5458 – 5459 – Jo Shield -5459 – 545A – Super Shield -545A – 545B – Classic Sight -545B – 545C – Team heads only -545C – 545D – Play as Elvis -545D – 545E – Enemy Rockets -545E – 545F – Unlimited Ammo – Laptop Sentry Gun -545F – 5460 – Marquis of Queensbury -5460 – 5461 – Perfect Darkness -5461 – 5462 – Pugilist -5462 – 5463 – Hotshot -5463 – 5464 – Hit and Run -5464 – 5465 – Alien -5465 – 5466 – R-Tracker/Weapons Cache Locations -5466 – 5467 – Rocket Launcher -5467 – 5468 – Sniper Rifle -5468 – 5469 – X-ray Scanner -5469 – 546A – Super Dragon -546A – 546B – Laptop Gun -546B – 546C – Phoenix -546C – 546D – Psychosis Gun -546D – 546E – PP9i -546E – 546F – CC13 -546F – 5470 – KL01313 -5470 – 5471 – KF7 Special -5471 – 5472 – ZZT (9mm) -5472 – 5473 – DMC -5473 – 5474 – AR53 -5474 – 5475 – RC-P45 -5475 – 5476 – Velvet Dark -5476 – 5477 – Fun -5477 – 5478 – Gameplay -5478 – 5479 – Weapons -5479 – 547A – Buddies -547A – 547B – Weapons for Jo in Solo -547B – 547C – Classic Weapons in Solo -547C – 547D – dataDyne Defection -547D – 547E – dataDyne Extraction -547E – 547F – A51 Infiltration -547F – 5480 – A51 Rescue -5480 – 5481 – A51 Escape -5481 – 5482 – Difficulty: -5482 – 5483 – Cheat Solo Missions -5483 – 5485 – Cheat Combat Simulator -5485 – 5486 – Cheat Counter-Operative -5486 – 5487 – Dishonoured -5487 – 5488 – Cheated -5488 – 5489 – Cheat Available -5489 – 548A – Complete -548A – 548B – for cheat: -548B – 548C – on -548C – 548D – in under -548D – 548E – or insert Game Boy ® Perfect Dark -548E – 548F – Select Cheat for info -548F – 5490 – Buddy Available -5490 – 5491 – Win Golds in firing range to enable classic guns -5491 – 5492 – Sight on Screen -5492 – 5493 – Target -5493 – 5494 – Zoom Range -5494 – 5495 – Show Ammo -5495 – 5496 – Gun Function -5496 – 5497 – Paintball -5497 – 5498 – Subtitles -5498 – 5499 – Mission time -5499 – 549A – Mode -549A – 549B – Split -549B – 549C – Do you want to abort the mission? -549C – 549D – Joanna Leather -549D – 549E – Joanna Negotiator -549E – 549F – Elvis (Waistcoat) -549F – 54A0 – Error -54A0 – 54A1 – Cannot delete file as it is being used -54A1 – 54A2 – Cancel -54A2 – 54A3 – Time Limit: -54A3 – 54A4 – Score Limit: -54A4 – 54A5 – Team Score Limit: -54A5 – 54A6 – Challenge Completed! -54A6 – 54A7 – Challenge Failed! -54A7 – 54A8 – Challenge Cheated! -54A8 – 54A9 – Cutscene Subtitles -54A9 – 54AA – In-game Subtitles -54AA – 54AB – Alternate Title Screen -54AB – 54AC – Start Challenge -54AC – 54AD – dataDyne Investigation -54AD – 54AE – Error -54AE – 54AF – The Controller Pak has been removed. -54AF – 54B0 – Attempt Repair -54B0 – 54B1 – Are you sure you want to attempt repair of -54B1 – 54B2 – Data may be lost! -54B2 – 54B3 – Cancel -54B3 – 54B4 – Repair -54B4 – 54B5 – Repair successful -54B5 – 54B6 – The Controller Pak has been repaired. -54B6 – 54B7 – Repair failed -54B7 – 54B8 – The Controller Pak cannot be repaired. -54B8 – 54B9 – Player Handicaps -54B9 – 54BA – L/R BUTTONS: -54BA – 54BB – UP C BUTTONS: -54BB – 54BC – LEFT/RIGHT C BUTTONS: -54BC – 54BD – DOWN C BUTTONS: -54BD – 54BE – A BUTTON: -54BE – 54BF – B BUTTON: -54BF – 54C0 – CONTROL STICK: -54C0 – 54C1 – Z BUTTON: -54C1 – 54C2 – + CONTROL PAD: -54C2 – 54C3 – AIM -54C3 – 54C4 – AIM TOGGLE -54C4 – 54C5 – LOOK UP -54C5 – 54C6 – LOOK DOWN -54C6 – 54C7 – LOOK DOWN -54C7 – 54C8 – LOOK UP -54C8 – 54C9 – FORWARDS -54C9 – 54CA – BACKWARDS -54CA – 54CB – STRAFE -54CB – 54CC – WEAPON -54CC – 54CD – ACTION/RELOAD -54CD – 54CE – FIRE -54CE – 54CF – WALK/TURN -54CF – 54D0 – LOOK -54D0 – 54D1 – WALK/STRAFE -54D1 – 54D2 – LOOK/STRAFE -54D2 – 54D3 – AS C BUTTONS -54D3 – 54D4 – Controller 1: -54D4 – 54D5 – Controller 2: -54D5 – 54D6 – Control Style %s %s -54D6 – 54D7 – (One – Handed) -54D7 – 54D8 – (Two – Handed) -54D8 – 54D9 – Hold weapon button for quick menu, Hold action button to toggle - function -54D9 – 54DA – Turn off all cheats -54DA – 54DB – Language filter -54DB – 54DC – USERNAME: -54DC – 54DD – PASSWORD: -54DD – 54DE – Perfect Dark -54DE – 54DF – Choose settings: -54DF – 54E0 – Enemy Reaction Speed: -54E0 – 54E1 – Enemy Health: -54E1 – 54E2 – Enemy Damage: -54E2 – 54E3 – Enemy Accuracy: -54E3 – 54E4 – OK -54E4 – 54E5 – Cancel -54E5 – 54E6 – Controller Pak not found -54E6 – 54E7 – Name: -54E7 – 54E8 – Location: -54E8 – 54E9 – Duplicate File Name -54E9 – 54EA – Already contains -54EA – 54EB – a file named -54EB – 54EC – Rename file -54EC – 54ED – Change location -54ED – 54EE – Cancel -54EE – 54EF – Change file name -54EF – 54F0 – Enter new file name: -54F0 – 54F1 – The file you are copying cannot be deleted. -54F1 – 54F2 – Shocksim: %d -54F2 – 54F3 – Target Time: -54F3 – 54F4 – New Cheat Available!: -54F4 – 54F5 – Continue -54F5 – 54F6 – Replay last level -54F6 – 54F7 – Save player -54F7 – 54F8 – Save new player and statistics? -54F8 – 54F9 – Save now -54F9 – 54FA – No Thanks! -54FA – 54FB – Confirm player name: -54FB – 54FC – The file has been erased due -54FC – 54FD – Continue -54FD – 54FE – Error -54FE – 54FF – Cannot read game boy game pak. Check connections and make sure - the game is inserted correctly. -54FF – 5500 – Cancel -5500 – 5501 – Error -5501 – 5502 – The saved data has -5502 – 5503 – been erased due to -5503 – 5504 – corruption or damage. -5504 – 5505 – Cancel - -PAL VALUES - -5506 – Choose your language: -5507 – English -5508 – Francais -5509 – Deutsch -550A – Italiano -550B – Espanol -550C – American -550D – Language: -550E – Language -550F – Control Style -5510 – Reverse Pitch -5511 – Look Ahead -5512 – Head Roll -5513 – Auto-Aim -5514 – Aim Control -5515 – Hold -5516 – Toggle -5517 – Cutscene Subtitles -5518 – In-game Subtitles - -Misc - 56XX ------------ -5600 – Complete -5601 – Incomplete -5602 – Failed -5603 – nothing -5604 – nothing -5605 – earth: -5606 – prehistory -5607 – Rare Presents -5608 – Red -5609 – Yellow -560A – Blue -560B – Magenta -560C – Cyan -560D – Orange -560E – Pink -560F – Brown -5610 – Joanna Combat -5611 – Joanna Trench coat -5612 – Joanna Party Frock -5613 – Joanna Frock (Ripped) -5614 – Joanna Stewardess -5615 – Joanna Wet Suit -5616 – Joanna Aqualung -5617 – Joanna Arctic -5618 – Joanna Lab Tech. -5619 – Elvis -561A – Maian -561B – Daniel Carrington -561C – Carrington Evening Wear -561D – Mr. Blonde -561E – Cassandra De Vries -561F – Trent Easton -5620 – Jonathan -5621 – CI Male Lab Technician -5622 – CI Female Lab Technician -5623 – CI Soldier -5624 – dataDyne Shock Trooper -5625 – dataDyne Female Guard -5626 – dataDyne Security -5627 – dataDyne Infantry -5628 – dataDyne Trooper -5629 – Secretary -562A – Office Suit -562B – Office Casual -562C – Negotiator -562D – dataDyne Sniper -562E – G5 Guard -562F – G5 SWAT Guard -5630 – CIA Agent -5631 – FBI Agent -5632 – Area 51 Guard -5633 – Area 51 Trooper -5634 – Pilot -5635 – Overalls -5636 – NSA Bodyguard -5637 – Male Lab Technician -5638 – Female Lab Technician -5639 – dataDyne Lab Technician -563A – Biotechnician -563B – Alaskan Guard -563C – Air Force One Pilot -563D – Steward -563E – Stewardess -563F – Head Stewardess -5640 – The President -5641 – NSA Lackey -5642 – Presidential Security -5643 – Presidents Clone -5644 – Pelagic II Guard -5645 – Maian Soldier -5646 – Dinner Jacket -5647 - - No controller in controller sockets – -5648 – Please power off and attach a controller -5649 – DETECTED -564A – NOT DETECTED -564B – tm -564C – N64 EXPANSION PAK -564D – Nintendo 64 product identification -564E – Product ID: -564F – Product Code: -5650 – Variant: -5651 – Developer: -5652 – Perfect Dark -5653 – NUS – NPDE – USA -5654 – PAL Version 8.7 Final -5655 – Rare LTD. (Twycross) -5656 – Copyright Rare LTD. 2000 -5657 – (Part of the text belonging to the same screen as words from above) -5658 – Same as above -5659 – Same as above -565A – nothing -565B – nothing -565C – nothing -565D – Rare designs on the future<<< -565E – Published by Rareware -565F – Perfect Dark -5660 – Choose your reality -5661 – New… -5662 – New Agent… -5663 – Game Files -5664 – Copy: -5665 – Delete: -5666 – Delete game notes… -5667 – Single Player Agent File -5668 – Combat Simulator Settings File -5669 – Combat Simulator Player File -566A – PerfectHead Files -566B – Controller Pak Menu -566C – Use this menu to delete notes from your Controller Paks. -566D – Choose Controller Pak to edit: -566E – Exit -566F – Gamepak -5670 – Controller Pak 1 -5671 – Controller Pak 2 -5672 – Controller Pak 3 -5673 – Controller Pak 4 -5674 – Perfect Menu -5675 – Solo Missions -5676 – Combat Simulator -5677 – Co-Operative -5678 – Counter-Operative -5679 – Cinema -567A – Mission Select -567B – Mission 1 -567C – Mission 2 -567D – Mission 3 -567E – Mission 4 -567F – Mission 5 -5680 – Mission 6 -5681 – Mission 7 -5682 – Mission 8 -5683 – Mission 9 -5684 – Special Assignments -5685 – dataDyne Central -5686 - - Defection -5687 – dataDyne Research -5688 - - Investigation -5689 – dataDyne Central -568A - - Extraction -568B – Carrington Villa -568C - - Hostage One -568D – Chicago -568E - - Stealth -568F – G5 Building -5690 - - Reconnaissance -5691 – Area 51 -5692 - - Infiltration -5693 – Area 51 -5694 - - Rescue -5695 – Area 51 -5696 - - Escape -5697 – Air Base -5698 - - Espionage -5699 – Air Force One -569A - - Antiterrorism -569B – Crash Site -569C - - Confrontation -569D – Pelagic II -569E - - Exploration -569F – Deep Sea -56A0 - - Nullify Threat -56A1 – Carrington Institute -56A2 - - Defence -56A3 – Attack Ship -56A4 - - Covert Assault -56A5 – Skedar Ruins -56A6 - - Battle Shrine -56A7 – Mr. Blondes Revenge -56A8 – Maian SOS -56A9 – Retaking The Institute -56AA – WAR! -56AB – Duel -56AC – Status -56AD – Abort! -56AE – Warning -56AF – Do you want to abort the mission? -56B0 – Cancel -56B1 – Abort -56B2 – Inventory -56B3 – Weapons Available -56B4 – Options -56B5 – Audio -56B6 – Video -56B7 – Control -56B8 – Display -56B9 – Cheats -56BA – Save Game -56BB – Change Agent… -56BC – Warning -56BD – Do you want to load another Agent? -56BE – Yes -56BF – No -56C0 – Control Options -56C1 – Control Player 2 -56C2 – Control Style -56C3 – Reverse Pitch -56C4 – Look Ahead -56C5 – Head Roll -56C6 – Auto-Aim -56C7 – Aim Control -56C8 – Back -56C9 – Hold -56CA – Toggle -56CB – Display Options -56CC – Display Player 2 -56CD – Sight on Screen -56CE – Always show target -56CF – Show Zoom range -56D0 – Ammo on Screen -56D1 – Show gun function -56D2 – Paintball -56D3 – Subtitles -56D4 – Show mission time -56D5 – Back -56D6 – Video Options -56D7 – Screen Size -56D8 – Ratio -56D9 – Hi-res -56DA – 2-Player split screen -56DB – Back -56DC – Full -56DD – Wide -56DE – Cinema -56DF – Normal -56E0 – 16:9 -56E1 – Horizontal -56E2 – Vertical -56E3 – Audio Options -56E4 – Sound -56E5 – Music -56E6 – Sound Mode -56E7 – Back -56E8 – Mono -56E9 – Stereo -56EA – Headphone -56EB – Surround -56EC – Control -56ED – Single -56EE – Double -56EF – 1.1 -56F0 – 1.2 -56F1 – 1.3 -56F2 – 1.4 -56F3 – 2.1 -56F4 – 2.2 -56F5 – 2.3 -56F6 – 2.4 -56F7 – Briefing -56F8 – Select Difficulty -56F9 – Difficulty -56FA – Best Time -56FB – Agent -56FC – Special Agent -56FD – Perfect Agent -56FE – Cancel -56FF – Co-Operative Options -5700 – Radar on -5701 – Friendly fire -5702 – Perfect Buddy -5703 – Continue -5704 – Cancel -5705 – Human -5706 – 1 Simulant -5707 – 2 Simulants -5708 – 3 Simulants -5709 – 4 Simulants -570A – Counter-Op Options -570B – Radar on -570C – Counter-Operative -570D – Continue -570E – Cancel -570F – Player 1 -5710 – Player 2 -5711 – Overview -5712 – Accept -5713 – Decline -5714 – Completed -5715 – Failed -5716 – Mission Status: -5717 – Agent Status: -5718 – Mission Time: -5719 – Weapon of Choice: -571A – Kills: -571B – Accuracy: -571C – Shot Total: -571D - Head shots: -571E - Body shots: -571F - Limb shots: -5720 - Others: -5721 – Press START -5722 – Deceased -5723 – Active -5724 – Disfavoured -5725 – Failed -5726 – Completed -5727 – Aborted -5728 – Retry -5729 – Next Mission -572A – Accept -572B – Decline -572C – Objectives -572D – Press START -572E – Small but Perfect Menu -572F – Combat Simulator -5730 – Training -5731 – Audio/Video -5732 – Change Agent -5733 – Audio/Visual -5734 – Sound -5735 – Music -5736 – Sound Mode -5737 – Ratio -5738 – Back -5739 - < Empty > -573A – DEL -573B – CAPS -573C – CANCEL -573D – OK -573E – Combat Simulator Heads -573F – Mission Heads -5740 – Error -5741 – Cancel -5742 – The Controller Pak was not found -5743 – File was not saved -5744 – File would not load -5745 – Could not delete the file -5746 – Out of memory -5747 – This player is already loaded for this game -5748 – has been removed. -5749 – Controller Pak is damaged or incorrupt -574A – Game note delete failed -574B – Error loading game -574C – Error saving game -574D – Error loading player -574E – Error saving player -574F – Error loading PerfectHead -5750 – Error saving PerfectHead -5751 – Error reading file -5752 – Error writing file -5753 – Error -5754 – Delete failed -5755 – Could not delete the file. -5756 - - Check that the Controller Pak is inserted correctly -5757 – Cancel -5758 – There is no space -5759 – Cool! -575A – File saved. -575B – OK -575C – An error occurred while trying to save. -575D – Try again -575E – Save elsewhere -575F – Cancel -5760 – An error occurred while trying to load. -5761 – Try again -5762 – Cancel -5763 – No space for Head -5764 – Choose a Head to load over: -5765 – OK -5766 – Cancel -5767 – Save -5768 – Would you like to save your file elsewhere? -5769 – Yes -576A – No -576B – Please insert your Controller Pak containing your saved files. -576C – Please insert the Controller Pak -576D – OK -576E – Cancel -576F – Select Location -5770 – Where -5771 – Spaces -5772 – Delete files… -5773 – Cancel -5774 – Full -5775 – Copy file -5776 – Select a file to copy: -5777 – Press B to exit. -5778 – Delete file -5779 – Select a file to delete: -577A – Press B to exit. -577B – Warning -577C – Are you sure you want to delete this file? -577D – Cancel -577E – OK -577F – Delete game note -5780 – Are you sure you want to delete -5781 – No -5782 – Yes -5783 – Game notes -5784 – Delete game notes: -5785 – Note -5786 – Pages -5787 – Press the B button to exit -5788 – Empty -5789 - -- -578A – Pages free: -578B – Pages free: %d -578C – Pages used: -578D – Pages used: %d -578E – Perfect Dark note already exists on this Controller Pak. -578F – There is not enough space for Perfect Dark note. -5790 – Controller Pak is too full to save and 28 pages required to save to - Controller Pak. -5791 – Enter Agent Name -5792 – New… -5793 – New Agent… -5794 – New Recruit -5795 – Mission Time: -5796 – Challenge 1 -5797 – Challenge 2 -5798 – Challenge 3 -5799 – Challenge 4 -579A – Challenge 5 -579B – Challenge 6 -579C – Challenge 7 -579D – Challenge 8 -579E – Challenge 9 -579F – Challenge 10 -57A0 – Challenge 11 -57A1 – Challenge 12 -57A2 – Challenge 13 -57A3 – Challenge 14 -57A4 – Challenge 15 -57A5 – Challenge 16 -57A6 – Challenge 17 -57A7 – Challenge 18 -57A8 – Challenge 19 -57A9 – Challenge 20 -57AA – Challenge 21 -57AB – Challenge 22 -57AC – Challenge 23 -57AD – Challenge 24 -57AE – Challenge 25 -57AF – Challenge 26 -57B0 – Challenge 27 -57B1 – Challenge 28 -57B2 – Challenge 29 -57B3 – Challenge 30 -57B4 – Special -57B5 – Intro -57B6 – Mission 1 – dataDyne Central -57B7 – Mission 2 – Carrington Villa -57B8 – Mission 3 – G5 Building -57B9 – Mission 4 – Area 51 -57BA – Mission 5 – Air Force One -57BB – Mission 6 – Pelagic II -57BC – Mission 7 – Defence -57BD – Mission 8 – Attack Ship -57BE – Mission 9 – Skedar Ruins -57BF – Finale -57C0 – Play All -57C1 – Intro -57C2 – 1:1 Intro – Enter the Dark -57C3 – 1:1 Outro – Descent into the Depths -57C4 – 1:2 Intro - Going Down -57C5 – 1:2 Outro - Meet The Doctor -57C6 – 1:3 Intro - Lights Out -57C7 – 1:3 Outro - Going Somewhere? -57C8 – 2:1 Intro - Negotiate This! -57C9 – 2:1 Intro 2 - Life On The Line -57CA – 2:1 Outro - Carrington Rescued -57CB – 3:1 Intro - Dark Alley -57CC – 3:1 Outro - G5 Penetrated -57CD – 3:2 Intro - Guns 'n' Poses -57CE – 3:2 Special – Conspiracy -57CF – 3:2 Outro - Fire Escape -57D0 – 4:1 Intro - Video Nasty -57D1 – 4:1 Outro - Loose Ends -57D2 – 4:2 Intro - Pearls Of Wisdom -57D3 – 4:2 Outro - Under The Knife -57D4 – 4:3 Intro - Gas! -57D5 – 4:3 Special - Elvis Wakes Up -57D6 – 4:3 Outro – Escape -57D7 – 5:1 Intro - High Altitude -57D8 – 5:1 Outro – Takeoff -57D9 – 5:2 Intro - Last Chance -57DA – 5:2 Special – Docking -57DB – 5:2 Outro - Out Of Options -57DC – 5:3 Intro - Red Horizons -57DD – 5:3 Outro - Blonde Freak -57DE – 6:1 Intro - Sneak On Board -57DF – 6:1 Outro - Descent Into The Depths -57E0 – 6:2 Intro - Deeper Inside -57E1 – 6:2 Special - Virus! -57E2 – 6:2 Outro - Pulling Out -57E3 – 7:1 Intro - Victory Salute -57E4 – 7:1 Outro - Dash For Freedom -57E5 – 8:1 Intro - Snatched! -57E6 – 8:1 Outro - Heading For Trouble -57E7 – 9:1 Intro - Air Of Calm -57E8 – 9:1 Outro – Gotcha! -57E9 – End Sequence -57EA – Cinema -57EB – Cloak %d -57EC – Pick Target -57ED – Kills Score - -Push Button Codes and misc - 58XX ---------------------------------- -NTSC VALUES - -5800 – Invincible -5801 – All Guns -5802 – Super x2 Health -5803 – Super x2 Armor -5804 – Invisible -5805 – Phase -5806 – Infinite Ammo -5807 – DK Mode -5808 – Tiny -5809 – Super x10 Health -580A – Magnum -580B – Laser -580C – Gun -580D – Silver PP7 -580E – Gold PP7 -580F – Invincibility On -5810 – All Guns On -5811 – Maximum Ammo -5812 – Super x2 Health -5813 – Super x2 Armor -5814 – Invisibility On -5815 – Phase On -5816 – Infinite Ammo On -5817 – DK Mode On -5818 – Extra Weapons -5819 – Tiny On -581A – Paintball Mode On -581B – Super x10 Health -581C – Happy? -581D – Fast Mode On -581E – Invincibility Off -581F – All Guns Off -5820 – Invisibility Off -5821 – Phase Off -5822 – Infinite Ammo Off -5823 – DK Mode Off -5824 – Tiny Off -5825 – Paintball Mode Off -5826 – Radar On -5827 – Fast Mode Off -5828 – NO NAME -5830 – Slowest Motion -5831 – Very Slow Motion -5832 – Slow Motion -5833 – Normal Motion -5834 – Fast Motion -5835 – Very Fast Motion -5836 – Fastest Motion -5837 – Line Mode -5838 – Paintball Mode -5839 – Enemy Rockets -583A – 2x Rocket L -583B – 2x Grenade L -583C – 2x RC-P90 -583D – 2x Throwing Knife -583E – 2x Hunting Knife -583F – 2x Laser -5840 – Turbo Mode -5841 – Fast Animation -5842 – Slow Animation -5843 – No Radar [Multi] - -NTSC – PAL – VALUES - -5829 – 5800 – E R R O R -582A – 5801 – No briefing for this mission -582B – 5802 – Nothing -582C – 5803 – Objective -582D – 5804 – Completed -582E – 5805 – Incomplete -582F – 5806 – Failed -5844 – 5807 – One minute left. -5845 – 5808 – OBJECTIVES FAILED – Abort Mission -5846 – 5809 – Guard Greeting -5847 – 580A – What’s that gun? -5848 – 580B – Don’t point that gun at me. -5849 – 580C – S/MPS -584A – 580D – H/M -584B – 580E – Y/D -584C – 580F – P/D -584D – 5810 – CI 2023 -584E – 5811 – YKK: 95935 -584F – 5812 – CAMSPY -5850 – 5813 – MODEL 1.2 -5851 – 5814 – GYROSTAT -5852 – 5815 – Meat -5853 – 5816 – Easy -5854 – 5817 – Normal -5855 – 5818 – Hard -5856 – 5819 – Perfect -5857 – 581A – Dark -5858 – 581B – Meatsim -5859 – 581C – Easysim -585A – 581D – Normalsim -585B – 581E – Hardsim -585C – 581F – Perfectsim -585D – 5820 – Darksim -585E – 5821 – Peacesim -585F – 5822 – Shieldsim -5860 – 5823 – Rocketsim -5861 – 5824 – Kazesim -5862 – 5825 – Fistsim -5863 – 5826 – Preysim -5864 – 5827 – Cowardsim -5865 – 5828 – Judgesim -5866 – 5829 – Feudsim -5867 – 582A – Speedsim -5868 – 582B – Turtlesim -5869 – 582C – Vengesim -586A – 582D – MeatSim Description -586B – 582E – EasySim Description -586C – 582F – NormalSim Description -586D – 5830 – HardSim Description -586E – 5831 – PerfectSim Description -586F – 5832 – DarkSim Description -5870 – 5833 – PeaceSim Description -5871 – 5834 – ShieldSim Description -5872 – 5835 – RocketSim Description -5873 – 5836 – KazeSim Description -5874 – 5837 – FistSim Description -5875 – 5838 – PreySim Description -5876 – 5839 – CowardSim Description -5877 – 583A – JudgeSim Description -5878 – 583B – FeudSim Description -5879 – 583C – SpeedSim Description -587A – 583D – TurtleSim Description -587B – 583E – VengeSim Description -587C – 583F – Dark Combat -587D – 5840 – Skedar Mystery -587E – 5841 – CI Operative -587F – 5842 – dataDyne Action -5880 – 5843 – Maian Tears -5881 – 5844 – Alien Conflict -5882 – 5845 – Carrington Institute -5883 – 5846 – dD Central -5884 – 5847 – dD Central X -5885 – 5848 – dD Research -5886 – 5849 – dD Research X -5887 – 584A – dD Extraction -5888 – 584B – dD Extraction X -5889 – 584C – Carrington Villa -588A – 584D – Carrington Villa X -588B – 584E – Chicago -588C – 584F – Chicago X -588D – 5850 – G5 Building -588E – 5851 – G5 Building X -588F – 5852 – A51 Infiltration -5890 – 5853 – A51 Infiltration X -5891 – 5854 – A51 Rescue -5892 – 5855 – A51 Rescue X -5893 – 5856 – A51 Escape -5894 – 5857 – A51 Escape X -5895 – 5858 – Air Base -5896 – 5859 – Air Base X -5897 – 585A – Air Force One -5898 – 585B – Air Force One X -5899 – 585C – Crash Site -589A – 585D – Crash Site X -589B – 585E – Pelagic II -589C – 585F – Pelagic II X -589D – 5860 – Deep Sea -589E – 5861 – Deep Sea X -589F – 5862 – Institute Defense -58A0 – 5863 – Institute Defense X -58A1 – 5864 – Attack Ship -58A2 – 5865 – Attack Ship X -58A3 – 5866 – Skedar Ruins -58A4 – 5867 – Skedar Ruins X -58A5 – 5868 – End Credits -58A6 – 5869 – Random -58A7 – 586A – Select All -58A8 – 586B – Select None -58A9 – 586C – Randomise -58AA – 586D – Weapon -58AB – 586E – Function -58AC – 586F – Orders -58AD – 5870 – No Weapon -58AE – 5871 – Pick Target -58AF – 5872 – Follow -58B0 – 5873 – Attack -58B1 – 5874 – Defend -58B2 – 5875 – Hold -58B3 – 5876 – Normal -58B4 – 5877 – Download -58B5 – 5878 – Get Case -58B6 – 5879 – Tag Box -58B7 – 587A – Killed by -58B8 – 587B – Killed -58B9 – 587C – Beginner:21 -58BA – 587D – Trainee:20 -58BB – 587E – Amateur:19 -58BC – 587F – Rookie:18 -58BD – 5880 – Novice:17 -58BE – 5881 – Trooper:16 -58BF – 5882 – Agent:15 -58C0 – 5883 – Star Agent:14 -58C1 – 5884 – SpecialAgent:13 -58C2 – 5885 – Expert:12 -58C3 – 5886 – Veteran:11 -58C4 – 5887 – Professional:10 -58C5 – 5888 – Dangerous:9 -58C6 – 5889 – Deadly:8 -58C7 – 588A – Killer:7 -58C8 – 588B – Assassin:6 -58C9 – 588C – Lethal:5 -58CA – 588D – Elite:4 -58CB – 588E – Invincible:3 -58CC – 588F – Near Perfect:2 -58CD – 5890 – Perfect:1 -58CE – 5891 – DARTAMMO -58CF – 5892 – MODEL 1.4 -58D0 – 5893 – JM: 201172 -58D1 – 5894 – Save Case -58D2 – 5895 – Def Hill -58D3 – 5896 – Hold Hill -58D4 – 5897 – Get Case -58D5 – 5898 – Pop Cap -58D6 – 5899 – Protect -58D7 – 589A – All Simulants -58D8 – 589B – MODEL 1.3 -58D9 – 589C – BNC: 15877 -58DA – 589D – Not enough room to launch - -NTSC - PAL - VALUES - -59A1 – 589E – GOAL TARGETS: -59A2 – 589F – GOAL SCORE: -59A3 – 58A0 – MIN ACCURACY: -59A4 – 58A1 – FIRE TO START -59A5 – 58A2 – GET READY! -59A6 – 58A3 – LIMIT: -59A7 – 58A4 – ZONE 3 -59A8 – 58A5 – ZONE 2 -59A9 – 58A6 – ZONE 1 -59AA – 58A7 – BULL’S-EYE -59AB – 58A8 – EXPLODED -59AC – 58A9 – Elvis is dead. -59AD – 58AA – Style 1 -59AE – 58AB – Style 2 -59AF – 58AC – Style 3 -59B0 – 58AD – Style 4 -59B1 – 58AE – Blonde -59B2 – 58AF – Black -59B3 – 58B0 – Auburn -59B4 – 58B1 – Blue Rinse -59B5 – 58B2 – Player -59B6 – 58B3 – nothing -59B7 – 58B4 – Identify -59B8 – 58B5 – Unused -59B9 – 58B6 – Challenges -59BA – 58B7 – Load/Preset Games -59BB – 58B8 – Quick Start -59BC – 58B9 – Advanced Setup -59BD – 58BA – Combat Simulator -59BE – 58BB – Carrington Institute -59BF – 58BC – Team Score -59C0 – 58BD – Finnish Setup -59C1 – 58BE – Player 1 Team -59C2 – 58BF – Player 2 Team -59C3 – 58C0 – Player 3 Team -59C4 – 58C1 – Player 4 Team -59C5 – 58C2 – Number of Simulants -59C6 – 58C3 – Simulant per team -59C7 – 58C4 – Simulant Difficulty -59C8 – 58C5 – Start Game -59C9 – 58C6 – Drop out -59CA – 58C7 – Player Settings -59CB – 58C8 – Game Settings -59CC – 58C9 – Quick go -59CD – 58CA – Ready! -59CE – 58CB – Quick Team -59CF – 58CC – Players only -59D0 – 58CD – Players and Simulants -59D1 – 58CE – Player Teams -59D2 – 58CF – Players vs. Simulants -59D3 – 58D0 – Player-Simulant Teams -59D4 – 58D1 – DRUGSPY -59D5 – 58D2 – BOMBSPY -59D6 – 58D3 – Replay Previous Mission -59D7 – 58D4 – Holograph -59D8 – 58D5 – Aggressive -59D9 – 58D6 – Passive -59DA – 58D7 – Perfect Buddies -59DB – 58D8 – Stealth - -Duel – 5EXX ------------ -5E00 – Perfect Agent Briefing -5E01 – LUCERNE TOWER -5E02 – Special Agent Briefing -5E03 – Perfect Agent Briefing -5E04 – Defeat dataDyne guard -5E05 – Defeat Jonathan Dark -5E06 – Defeat Trent Easton -5E07 – THE DUEL -5E08 – Defeat your opponent -5E09 – Well done! You were too quick for him! -5E0A – Well done! You were too quick for him! -5E0B – Well done! You were too quick for him! -5E0C – Opponent skill level: AGENT -5E0D – Opponent skill level: SPECIAL AGENT -5E0E – Opponent skill level: PERFECT AGENT - - -BETA Text compilation: -~~~~~~~~~~~~~~~~~~~~~~ - -Defection: ----------- -0204 – NULL3 -0205 – NULL4 -0206 – NULL5 -0207 – NULL6 -0208 – NULL7 - -Your guess is as good as mine. - -0209 – dataDyne.Central Divisional HQ Chicago IL USA -020A – 0230 Hours 15 AUG 2023 - -BETA messages. In the final version the game takes place at 2214 and not 0230. - -0221 – Time to erase those files -0222 – Computer executive erased -0223 – I'll do what you want! -0225 – You talk too much -0227 – I'll do what you want -0228 – Logging on now -0229 – Okay, I'm in... -022B – You've written your last bug, traitor! -0234 – Erase Dr. Caroll conversation -0252 – Dummy - -Some BETA stuff that has to do with the dataDyne programmer. - -0258 – Obtain CamSpy -0259 – Dr. Caroll's -025A – CamSpy -025B – A CamSpy -025C – Picked up a CamSpy - -You don’t have the CamSpy in the final version. Maybe you were supposed to -record the programmers conversation? - - -Investigation: --------------- -1E30 – De Vries' briefcase -1E35 – De Vries' briefcase - -These are supposed to be the Night Vision goggles and the Shield Tech item. - - -Extraction: ------------ -061A – Helichopper warning goes here - -Helichopper? - -062E – Obtain CamSpy -062F – Dr. Caroll's -0630 – CamSpy -0631 – A CamSpy -0632 – Picked up a CamSpy - -You don’t get a CamSpy in this level. - -0637 – Obtain alpha key card - -Alpha key card. A fancy name for office key card. - - -Villa: ------- -201B – PC gun - -The BETA name for Laptop Gun. - - -Chicago: --------- -320C – Acquire diversion target -3240 – EEPROM flag has been set -3241 – EEPROM flag has been cleared - -A BETA Objective! Supposedly you were to mark the G5 robot somehow. EEPROM flag -is when you set a diversion target. - - -G5 Building: ------------- -1835 – Communications bug placed correctly -1836 – Communications bug placed incorrectly - -You don’t set a communications bug in the G5 Building. - -182E – Obtain Door Exploder -182F – Dr. Caroll's -1830 – Door Exploder -1831 – Door Exploder -1832 – Picked up Door Exploder - -Door Exploder? What does this do, explode doors? - -181E – Obtain DAT tape - -A fancy name for Dr. Caroll’s backup disc. - -1813 – Obtain alpha key card -180E – Obtain alpha key card - -Fancy names for key cards. - - -Infiltration: -------------- -2C4B – Foreign object detected - security alerted - -There is no detection place in Infiltration. - -2C0E – Obtain grenades -2C0F – Dr. Caroll's -2C10 – Grenade -2C11 – A grenade -2C12 – Picked up a grenade - -Apparently, a grenade is an item that you have to collect. It’s also -Dr. Caroll’s. - - -Rescue: -------- -Bio Technician says: "Director Easton will hear about this young lady!" - -2A68 – Of course he's going to hear of it, you moron. I've just got into his - top secret base, and now I'm stealing his alien. - - -Escape: -------- -4830 – It's dangerous, Jo -4831 – I can handle it... Trust me -4832 – Okay - -A last minute conversation where Jonathan tries to talk you out of the most fun -part of the level. Escaping on the hoverbike! (Or “jetbike” as Joanna likes to -call it in 483A) - -4834 – I'll cover the stairs - you take the ramp - -There are no stairs in Area 51. - -483E – I'm not having this. That specimen is government property and should not - leave the base. -4842 – Please stop! I'm not supposed to die. She Arggghhh! -4843 – You idiot! We'd better get out of here - -The bio technicians obviously had more to say, before they gas themselves that -is… - - -Air Force One: --------------- -360F – Obtain Crossbow -3610 – Nothing -3611 – Crossbow -3612 – Crossbow -3613 – Picked up a Crossbow - -You don’t get a Crossbow in this level (Although theoretically speaking it -should be in the suitcase you pick up in the cargo bay). - -361E – Obtain remote mine -361F – Nothing -3620 – Remote mine -3621 – Remote mine -3622 – Picked up a remote mine - -It’s not a remote mine, it’s a timed mine that you have to use on the fuselage. - -3634 – Adrenaline pill -3635 – Adrenaline pill -3636 – Picked up an adrenaline pill - -Another name for Combat Boost. - - -Crash Site: ------------ -0A0B – Maybe there's a beacon in there (In the Presidential escape pod) - -Silly Joanna. There WILL be a distress beacon because it’s one of your -objectives. - - -Pelagic II: ------------ -1601 – Cetan Ship - -The level place name is wrong (and it’s not in capitals either) - -1614 – Diving control center has been located - -A BETA message? - - -Deep Sea: ---------- -300B – This antibody masking will protect us from .the automatic defenses -3013 – Antibody masking has been obtained - -A BETA object. Either Joanna or Elvis says the sentence. I wonder what it does. -Make you green so that the drone guns can’t see you? - -3014 – Cetan megaweapon has been disabled -3016 – Dr. Caroll's personality has been restored - -Two messages that don’t appear. - - -Defense: --------- -220A – Obtain sensitive info -220B – Guard's -220C – Sensitive info -220D – Sensitive info -220E – Picked up sensitive info - -You’re supposed to destroy the info, not pick it up, and why is it a guard’s -item? The sensitive info is looked upon as an item. Maybe you were supposed to -collect it at one time? - -2226 – Well, at least I won't know if I'm doing anything wrong - -I wonder where Joanna was supposed to say this. - - -Attack Ship: ------------- -260F – All hangar Skedar have been killed -2612 – Okay, we're in. I'll meet you in the hangar (Elvis and Maians) - -Two messages that don’t appear in the final version. - - -Duel: ------ -5E01 – LUCERNE TOWER - -The level place name is Lucerne Tower instead of Carrington Institute. - - -End Credits: ------------- -dk crew -mark Stevenson -carl tilley -chris woods - -These people don’t show up during the End Credits. Our hearts go out to the -poor people that got their names removed from the credits… - - -Retaking the Institute: ------------------------ -3A03 - Retaking the Institute -3A04 - Lead the team and clean out the building -3A05 - Lead the team and clean out the building -3A06 - Lead the team and clean out the building -3A07 - Kill All Enemy Agents -3A08 - Do Something Else -3A09 - And Something Else - -Retaking the Institute was never finished. The unfinished level text proves it. -You do get an idea of what you where supposed to do. - - -Weapons: --------- -4C15 - MagSec SMG -4C2A - FlashBang -4C3A – Tester -4CD9 – Big King Rocket - -Three BETA weapons. The first might be the name of the BETA SMG that was left -in the game but has no image. The second looks like a grenade from GoldenEye -but can’t be used. The third is a grenade that fires bullets, and the fourth -is like the rocket launcher, and is the weapon that the last boss uses. - -4C60 - Guided Shots -4C68 - Half Magazine Discharge -4C87 - Light Amplifier -4C88 - Mobile Camera - -BETA functions. Either primary or secondary. The Light Amplifier may have been -a function from the FlashBang. - -4C91 - Telescopic Sight -4C92 - Silencer -4C93 - Magazine Extension -4C94 - Laser Sight - -Add-ons for the Falcon 2 or some other weapon. You could upgrade the Falcon 2 -in the BETA version of PD. - - -Multiplayer: ------------- -5081 – Rooftop - -The name of a BETA multiplayer level. - -50BC – Touch that Box -50DD – Boxes Options -50E8 – Boxes on Radar -5103 – Boxes -58B6 – 5879 – Tag Box - -Touch That Box, a BETA scenario that involved touching boxes. All Challenges -that have the Hacker Central scenario in the final version were originally -supposed to have this scenario. - -5438 – 5439 – Test -5439 – 543A – 4mb Test -543A – 543B – Nothing (It actually says Nothing) - -Test values from either weapon slots or pre-saves. - - -BETA Objects: -------------- -521C – 5219 – explosive pen -521D – 521A – explosive case -521E – 521B – flare -521F – 521C – piton -5220 – 521D – of dynamite -5221 – 521E – stick -5222 – 521F – sticks -5223 – 5220 – bug -5224 – 5221 – micro camera -5225 – 5222 – GoldenEye key -5226 – 5223 – token -5227 – 5224 – plastique - -These BETA objects are mostly from GoldenEye. - - -Solo and Cinema: ----------------- -56A9 – Retaking The Institute - -The BETA solo level. - -57BF – Finale -57B4 – Special -57C9 – 2:1 Intro 2 - Life On The Line - -BETA cut-scenes from the Cinema menu. 2:1 Intro 2 - Life On The Line is the -name of the Perfect Agent version of Villa Intro (the where Joanna is the -negotiator). It was removed from the final version, leaving only the -Agent/Special Agent version to be watched. - - -Others: -------- -550C – American (Pal Value) - -A BETA Language. - -5846 – 5809 – Guard Greeting -5847 – 580A – What’s that gun? -5848 – 580B – Don’t point that gun at me. - -Guard speech. Everything the guards say may have at one point been showed in -text as they say it. Rare probably didn’t have time to finish all the text so -they scrapped it. - -59B7 – 58B4 – Identify -59B8 – 58B5 – Unused - -Text from a BETA item that identified what it was pointed at? - - -PerfectHead: ------------- -A BETA option that allowed you to take a picture of yourself and put your face -on a head that could then be used in-game. It was removed when Nintendo -discovered the possibility of using other things than a face as a head image -(other things being erotic pictures). - -5090 – Load Head… -5126 – PerfectHead -5127 – Load a saved Head -5128 – Make a new Head -5129 – Edit a loaded Head -512A – Edit a PerfectHead -512B – Choose a slot to edit: -512C – Cancel -512D – Make a new Head -512E – Load a saved Head -512F – Where do you want to be able -5130 – to use this Head? -5131 – Combat Simulator -5132 – All Missions -5133 – Both -5134 – Cancel -5135 – Camera Setup -5136 – Insert you camera into your -5137 – game boy pak. -5138 – Then, inset your game boy pak -5139 – into any controller. -513A – OK -513B – Cancel -513C – Error -513D – Game boy camera not detected! -513E – Please check all connections -513F – and try again -5140 – Cancel -5141 – Choose camera -5142 – More than one camera detected. -5143 – Please select which camera you want to use -5144 – OK -5145 – Cancel -5146 – PerfectHead -5147 – Take a picture now -5148 – Load picture from camera -5149 – Cancel -514A – Load from camera -514B – Choose picture to read from camera -514C – Cancel -514D – Take picture -514E – Shoot! -514F – Cancel -5150 – Keep picture -5151 – Try again -5152 – Load PerfectHead -5153 – Inset the controller pak -5154 – containing the Head you -5155 – wish to load into any -5156 – controller. -5157 – Controller pak: -5158 – Cancel -5159 – Source: -515A – Pak 1 -515B – Pak 2 -515C – Pak 3 -515D – Pak 4 -515E - -515F – PerfectHead Editor -5160 – Take another picture -5161 – Change Head -5162 – Position picture -5163 – Color face & hair -5164 – Shape Head -5165 – Remove Head -5166 – Cancel changes -5167 – Keep changes -5168 – Shape Head -5169 – Depth -516A – OK -516B – Cancel -516C – Position image -516D – Brightness -516E – OK -516F – Cancel -5170 – Choose Head -5171 – OK -5172 – Cancel -5173 – Remove PerfectHead -5174 – Are you sure you want to -5175 – remove this Head from memory? -5176 – Delete -5177 – Cancel -5178 – Cancel changes -5179 – Are you sure you want to -517A – throw away your changes? -517B – Throw away -517C – Go back to editor -517D – Save PerfectHead -517E – You have edited this Head. -517F – Do you want to keep your changes? -5180 – Keep -5181 – Revert -5182 – Save PerfectHead -5183 – Your changes will be kept in memory -5184 – Would you like to save your changes -5185 – to the controller pak? -5186 – Save -5187 – Don’t save -5188 – Save PerfectHead -5189 – You can now save your Head on -518A – a controller pak if you wish. -518B – If you want to do this please -518C – ensure a controller pak is inserted -518D – and choose ‘Save’. -518E – Save -518F – Don’t save -5190 – Head complete! -5191 – To use your Head in the Combat Simulator -5192 – select the Head from the character -5193 – of the player/simulant settings menu -5194 – Your mission Heads will now appear -5195 – in any level you play. -5196 – You can now edit your Head further. -5197 – Finish -5198 – Edit Head -5199 – Head colour -519A - Face: -519B – Hairstyle: -519C – OK -519D – Cancel -51B5 – It is now safe to turn off your console. -51DF – If you activate any cheats you will be unable to progress any further in - the game, while those cheats are active -51E4 – Searching for Camera! -51E5 – Calibrating Camera -51E6 – Downloading Image -51E7 – Loading Image -51E8 – Saving Image -51E9 – Transferring Image -51EA – Uploading Segment -51EB – Checking Controller Pak -51EC – Getting PerfectHead -51ED – Saving PerfectHead -51EE – Auto Camera Adjustment -51EF – please wait… -566A – PerfectHead Files -573E – Combat Simulator Heads -573F – Mission Heads -574F – Error loading PerfectHead -5750 – Error saving PerfectHead -5763 – No space for Head -5764 – Choose a Head to load over: -59AD – 58AA – Style 1 -59AE – 58AB – Style 2 -59AF – 58AC – Style 3 -59B0 – 58AD – Style 4 -59B1 – 58AE – Blonde -59B2 – 58AF – Black -59B3 – 58B0 – Auburn -59B4 – 58B1 – Blue Rinse - - -Push-Button Code text: ----------------------- -These can only be seen in the American version of the game (NTSC Values). -Essentially they’re the same as the PBC text from GoldenEye, but there are a -few minor differences. 581C in PD is Happy? The same name in GoldenEye is Happy -now Karl? - -5800 – Invincible -5801 – All Guns -5802 – Super x2 Health -5803 – Super x2 Armor -5804 – Invisible -5805 – Phase -5806 – Infinite Ammo -5807 – DK Mode -5808 – Tiny -5809 – Super x10 Health -580A – Magnum -580B – Laser -580C – Gun -580D – Silver PP7 -580E – Gold PP7 -580F – Invincibility On -5810 – All Guns On -5811 – Maximum Ammo -5812 – Super x2 Health -5813 – Super x2 Armor -5814 – Invisibility On -5815 – Phase On -5816 – Infinite Ammo On -5817 – DK Mode On -5818 – Extra Weapons -5819 – Tiny On -581A – Paintball Mode On -581B – Super x10 Health -581C – Happy? -581D – Fast Mode On -581E – Invincibility Off -581F – All Guns Off -5820 – Invisibility Off -5821 – Phase Off -5822 – Infinite Ammo Off -5823 – DK Mode Off -5824 – Tiny Off -5825 – Paintball Mode Off -5826 – Radar On -5827 – Fast Mode Off -5828 – NO NAME -5830 – Slowest Motion -5831 – Very Slow Motion -5832 – Slow Motion -5833 – Normal Motion -5834 – Fast Motion -5835 – Very Fast Motion -5836 – Fastest Motion -5837 – Line Mode -5838 – Paintball Mode -5839 – Enemy Rockets -583A – 2x Rocket L -583B – 2x Grenade L -583C – 2x RC-P90 -583D – 2x Throwing Knife -583E – 2x Hunting Knife -583F – 2x Laser -5840 – Turbo Mode -5841 – Fast Animation -5842 – Slow Animation -5843 – No Radar [Multi] - - -Carrington Institute: ---------------------- -590B – 1CAD – dataDyne Corporation -590C – 1CAE – The monolithic corporation that dataDyne has become started off - as an AI systems programming business. When it became apparent - that much of their income came from their work as a defense - contractor for the U.S. military, a young and forward-looking - manager called Cassandra De Vries started pushing for deals with - weapons manufacturers, while ignoring offers from Daniel - Carrington and the Institute for collaboration on quantum - computing and AI research. After the third armament company was - bought by dataDyne, profits became astronomical. Within a month - of the receipt of a government contract for weapons development, - Cassandra De Vries was CEO. A significant portion of - corporation profits were redirected into AI research, with - excellent results -590D – 1CAF – Carrington Institute -590E – 1CB0 – Briefly dismissed as a crackpot inventor, Daniel Carrington was - the first to release anti-gravity technology to the world. - Revenues from this and related development helped set up the - Carrington Institute, ostensibly a technology think tank situated - in a remote part of the continental U.S. In actual fact, the - Institute is also a training ground for agents who are sent - out into the world to keep track of technological development - around the globe, for reasons best known to Daniel Carrington - himself - -BETA text from the Info menu in the Information lab. - -5996 – 1D38 – This Maian grenade plays havoc with the neurons in sentient - creatures. If you wander into the blast radius, your vision will - blur and you will lose your grip on whatever you're holding. The - grenade can be set to go off on impact or by proximity trigger. - Make sure you throw it far enough away - -A BETA description of the N-Bomb from the firing range. - -1C74 – PP7 -1C75 – TT33 -1C76 – Skorpion -1C77 – AK47 -1C78 – Uzi 9mm -1C79 – MP5K -1C7A – M-16 -1C7B – FNP90 - -The BETA names of weapons from GoldenEye. - -1C2F – You're meant to use the Disguise, remember? -1C2C – Go away, Joanna. You're not fooling anybody! - -Two BETA messages you don’t hear. - - -Challenge Descriptions: ------------------------ -Challenge 8 – Capture the flag in the Skedar arena with the SuperDragon -Challenge 10 – Touch that box in the complex. Fight against a team of simulants - for control of the boxes. Touch a box to claim it for your own - team. -Challenge 11 – King of the hill in the temple with drug guns -Challenge 13 – 1 hit kills, touch that box, g5, with drug guns -Challenge 14 – Capture the flag in area 52 with cloaking -Challenge 15 – Capture the briefcase in the Matrix with devastators -Challenge 21 – Touch the boxes to claim them for your side. The Cloaking Device - is available -Challenge 27 – A touch the box game featuring rocket launchers and expert - opponents -Challenge 28 – A capture the flag game with no shields and expert opponents - -The Challenge Descriptions are not shown in the RAM. They are in the actual ROM -image of the game. There are both BETA descriptions and the final descriptions. -These are the most notable BETA descriptions. Capture the Flag is actually -Capture the Case. Matrix is a BETA level. The level was designed to look like -the area from the Matrix movie where Neo & Co infiltrate a building. The levels -walls were at one point the same colour as the walls in the area from the -Matrix. In the final version they changed the wall textures and the name of the -level to Grid. - - -Usernames / Passwords: ----------------------- -Although the username and password you get when you have a Perfect Player is -Entropicdecay / Zero-tau, on closer inspection it is actually: - -EnTROpIcDeCAy / ZeRo-Tau - -Notice the different capital and small letters. Could this shed any more light -on what the username / password is actually used for? - -Cassandra's Necklace username / password is: - -CDV780322 / I8MOZYM8NDI85 - - -_______________________________________________________________________________ - - ¤ End Credits ¤ -_______________________________________________________________________________ - -Credits go to: -~~~~~~~~~~~~~~ - -Datel for creating Gamesharks and Action Replays, and for creating the -Official N64 Gameshark Utilities - -Code Master for creating the Game Software Code Creator 2002 - -iCEMaRiO for creating the Perfect Trainer - -The creators of Porttalk, Userport, GiveIO and TotalIO - -The creators of Project 64 - -The creators of Nemu - -The creators of Hex Workshop - -Viper187 for creating Cheater 64 and VTR Compare - -Wesley Hopper for creating SaveState Cracker - -ArtMoney Team for creating ArtMoney - -PD Hacker, Dark1, Goldenheart, Wreck, MultiplayerX and Giro_Rob for testing -codes for me - -SquareGuru for his PD weapons FAQ that helped me hack the codes to put -GoldenEyes weapons in multiplayer - -Hackmaster for hacking the code that changes the blood amount in PD - - -Special thanks: -~~~~~~~~~~~~~~~ - -SubDrag and Zoinkity for helping me understand how many of the codes in this -FAQ work, and for many other things - -GE Master for constantly helping me test codes - -SkedarLeader for doing the placements in Villa Rooftop - -gscentral.com for lots of Perfect Dark codes and game hacking forums :) - - -_______________________________________________________________________________ - - - < Perfect Dark is forever... > - -_______________________________________________________________________________ diff --git a/notes/PD Documentation/matching images.txt b/notes/PD Documentation/matching images.txt deleted file mode 100644 index 49fa2b8..0000000 --- a/notes/PD Documentation/matching images.txt +++ /dev/null @@ -1,220 +0,0 @@ -PD ID GE ID notes -000 -001 5EA backfill/placeholder image; for screens, etc. -002 3F7 -003 878 glass impact -004 87B default impact -005 858 -006 850 typical gunfire (can't remember...) -007 -008 -009 857 blue gunfire (laser) -00A 856 blue flare (laser) -00B 8BC GE sight -00D -00E 28E glass overlay (1) -00F 88B monitor img. -010 895 monitor img. -011 8B0 monitor img. -012 8B1 monitor img -013 8B4 sky -014 - -020 828 explosion -021 -022 831 explosion -023 -024 834 -025 -026 836 -027 -028 838 -029 -02A 83A -02B -02C 83C -02D -02E 83E -02F -030 840 -031 -032 826 -033 -034 82A -035 -036 8C2 - -041 308 - -0E3 9AB - -105 A74 - -17D 0C3 PD16,GE256 - -39B 859 weapon flash -39C 85A -39D 85B -39E 85C - -3AB 859 weapon flash -3AC 85A -3AD 85B -3AE 85C - -3E1 86B weapon flash -3E2 869 -3E3 86C -3E4 86A -3E5 867 weapon flash -3E6 865 -3E7 868 -3E8 866 - -3EC 374 weapon flare - -3FE 374 gunfire (a51_turret) - -567 692 ACTOR HEAD - TEST THIS -568 694 -569 694 - -70F 2CF -712 2C2 -713 58C -714 58B PD16,GE256 (19) -715 2A1 -716 2A2 -717 11B -718 493 PD16,GE256 (64) -719 2C1 -71B 11A -729 9AB - -73B 9A8 PD16,GE256 (42) -73C 0A3 -73D 0A6 -73E -745 5B9 -747 9A9 PD16,GE256 (55) - -7C7 28F - -841 649 PD16, GE256 -842 64D PD16, GE256 -843 650 PD16, GE256 -844 653 PD16, GE256 -845 656 PD16, GE256 - -862 0E7 PD16,GE256 -863 -864 -865 0E9 PD16,GE256 - -96A 847 gun flare - -(MORE IMGS HERE AND ABOVE, THROUGH BB4) -BD5 167 -BD6 168 -BD9 107 foucet - -C00 1BE -C01 1BD -C02 1BC -C27 -C28 87A -C29 0CE -C2A 87C -C2B 5C3 -C2C 5C4 -C2D 87E -C2E 87F -C2F 5C6 -C30 5C7 -C31 8BD beta sight -C32 292 -C33 88C -C34 88D -C35 88E -C36 88F -C37 890 -C38 891 -C39 892 -C3A 893 -C3B 894 -C3C 4A1 -C3D 896 -C3E 897 -C3F 4A2 -C40 4A3 -C41 -C42 246 PD16,GE256 -C43 247 PD16,GE256 -C44 87D -C45 248 PD16,GE256 -C46 89A PD16,GE256 -C47 89B PD16,GE256 -C48 89C PD16,GE256 -C49 89D PD16,GE256 -C4A 245 PD16,GE256 -C4B 89E PD16,GE256 -C4C 89F PD16,GE256 -C4D 8B3 -C4E 8AF -C4F 8B2 -C50 8AB -C51 8AC -C52 8AD -C53 8AE -C54 8AA -C55 89F -C56 8A0 -C57 8A1 -C58 8A2 -C59 8A3 -C5A 8A4 -C5B 8A5 -C5C 8A6 -C5D 8A7 -C5E 8A8 -C5F 8A9 -C60 8D7 -C61 345 PD16,GE255 (6A) -C62 8B0 - -CC7 -CC8 -CC9 -CCA 5EA -CCB 308 -CCC -CCD -CCE -CCF 861 -CD0 862 -CD1 863 -CD2 864 -CD3 3FF -CD4 5EA -CD5 01C -CD6 01B -CD7 A71 -CD8 A72 -CD9 A73 kf7 butt -CDA 848 weapon flash -CDB 849 -CDC 84A -CDD 84B -CDE 84C weapon flash -CDF 84D -CE0 84E -CE1 84F -CE4 842 weapon flash -CE5 843 -CE6 844 -CE7 845 -CE8 5EA - -D28 greyharied guy from GE? test... -D29 -D2A \ No newline at end of file diff --git a/notes/PD Documentation/microcode and object generation/PD object format.txt b/notes/PD Documentation/microcode and object generation/PD object format.txt deleted file mode 100644 index 820b718..0000000 --- a/notes/PD Documentation/microcode and object generation/PD object format.txt +++ /dev/null @@ -1,120 +0,0 @@ -Gleaned from notes: - -PD Objects -------------------- -OBJ header: 0x1C - nearly identical to GE header -0x0 4 offset to OBJ table -0x4 2 0 -0x6 2 possibly type of object. 9 for bodies, D for heads -0x8 4 offset to OBJ offsets -0xC 2 # OBJ offsets -0xE 2 # object subsections - position types and 01 flags -0x10 4 float value - whatever it did in GE it likely does same here -0x14 2 0 -0x16 2 # image declarations -0x18 4 offset to image declarations - ------------------- -OBJ offsets: 0x4 each -offsets to OBJ table entries used to access parts of a model at runtime. -ie: placement of monitor images, limbs, etc. - -OBJ ints: 0x2 each; final entry padded to word -one int for each header. sequential -ie: 0000 0001 0002 ... - ------------------- -Image Declarations: 0xC each -you know these. -0x0 4 image ID # or offset within file to image -0x4 1 width -0x5 1 height -0x6 1 type -0x7 1 can't remember -0x8 4 bitflags if I remember correctly, used to assign image attributes when expanded - ------------------- -OBJ Table: 0x18 - for the record, almost identical to GE! -0x0 1 0 normally. 1 subset tag -0x1 1 type (these should look familiar) - 01 - 02 position - 08 distance triggers - 0A dimentions - 12 handle - 17 placeholder for head - 18 display list -0x2 2 0000 reserved -0x4 4 offset to data -0x8 4 offset to parent -0xC 4 offset to next entry in parent group -0x10 4 offset to previous entry in parent group -0x14 4 offset to child -------------------- -Type data: - -01 0xC main object heading -0x0 4 group order number -0x4 4 (float) can't remember use -0x8 4 0 - --- -02 0x18 position -0x0 4 (float) x position -0x4 4 (float) y position -0x8 4 (float) z position -0xC 2 -0xE 2 -0x10 2 -0x12 2 -0x14 4 (float) ??? - --- -04 0x14 display list -0x0 4 offset to primary display list -0x4 4 offset to secondary display list -0x8 4 0 -0xC 4 offset to point table -0x10 2 number of points -0x12 2 ??? - 3 - -05 00 19 B0 -05 00 1B 10 00 00 00 00 05 00 15 F8 00 4B 00 03 - - --- -08 0x10 distance trigger -0x0 4 (float) nearest distance visible -0x4 4 (float) furthest distance visible -0x8 4 offset to OBJ table entry of target display list -0xC 4 - --- -0A 0x1C dimentions -0x0 4 group order number -0x4 4 (float) x minimum -0x8 4 (float) x maximum -0xC 4 (float) y minimum -0x10 4 (float) y maximum -0x14 4 (float) z minimum -0x18 4 (float) z maximum - --- -12 0x8 handle -0x0 4 offset to OBJ table entry of command to trigger (ie: activate display list) -0x4 4 00000000 reserved - --- -17 0x4 placeholder for head -0x0 4 00000000 reserved for pointer to head - --- -18 0x18 display list -0x0 4 offset to primary display list -0x4 4 offset to secondary display list -0x8 4 -0xC 4 offset to point table -0x10 2 number of points -0x12 2 ??? - sometimes 3, sometimes 4. -0x14 2 0 -0x16 2 number of colors (RGBA samples) diff --git a/notes/PD Documentation/microcode and object generation/PDtypes.h b/notes/PD Documentation/microcode and object generation/PDtypes.h deleted file mode 100644 index 491ffb0..0000000 --- a/notes/PD Documentation/microcode and object generation/PDtypes.h +++ /dev/null @@ -1,197 +0,0 @@ -#ifndef _PD_OBJ_TYPES_ -#define _PD_OBJ_TYPES_ - -#include "Rare.h" - -/*defines structures for each known PD OBJ type - maybe some other object-related things too*/ -#ifdef __cplusplus /*my compiler fries without this*/ -extern "C" { -#endif - -#ifndef _GE_OBJ_TYPES_ -/*this attaches pnemonics to all the object archetypes - being tricky here; if GEtypes.h is linked first, then ignore PD - yes, I'm already aware the mess this makes...*/ - -/*PD archetype list; note that all loading animations (lod) use same ID as weapon!*/ -/*enum{ - STD_OBJ=2, - CHR_OBJ=3, - CTRL=4, - UZI_GUN=5, //NOTE: GE uzi only - STD_GUN=7, //NOTE: used by most GE weapons - ACTOR=9, - HEAD=0xD, - CAM=0xF, - TV1=0x14, - AUTOGUN=0x16, - ACTOR_SKEDAR=0x1C, - GUN_PC=0x23, - GUN_K7=0x24, - GUN_FALCON=0x25, - GUN_KNIFE=0x26, - ACTOR_DRCARROL=0x28, - ACTOR_EYESPY=0x2A, - GUN_CMP150=0x46, - GUN_DRAGON=0x47, - GUN_SDRAGON=0x48, - GUN_RLAUNCH=0x49, - GUN_SHOTGUN=0x4B, - GUN_FARSIGHT=0x4C, - GUN_REAPER=0x4E, - GUN_MAULER=0x64, - GUN_GLAUNCH=0x65, - GUN_LEE=0x66, //NOTE: also includes GE handguns - GUN_AR34=0x67, - GUN_MAGNUM=0x68, - GUN_SRLAUNCH=0x69, - GUN_CYCLONE=0x6A, - GUN_SNIPE=0x6B, - GUN_DRUG=0x6C, - GUN_CROSSBOW=0x6D, - GUN_PTMINE=0x6E, - GUN_PHOENIX=0x6F, - GUN_CALLISTO=0x70, - GUN_RCP120=0x71, - GUN_GRENADE=0x73 - GUN_RMINE=0x76; - ARM=0xFA, - - - TV4=0x8003A084, - RACK=0x8003A0B0, - EYE_DOOR=0x8003A100, - IRIS_DOOR=0x8003A15C, - MENU=0x8003A170, - CAR=0x8003A19C, - AIR=0x8003A1C8, - WIN_DOOR=0x8003A1DC, - TANK=0x8003A208, - HAT=0x8003A21C, - RARE=0x8003C570, - NULL_OBJ=0x8003C728, - BARREL_GUN=0x8003C76C, - };*/ -#endif - -/*Specific type data follows*/ -/*type 01 0xC main object heading*/ -typedef struct{ - long group; - float unknown1; - unsigned long RESERVED; - } PD01; - -/*type 02 0x18 position*/ -typedef struct{ - float xpos; - float ypos; - float zpos; - unsigned short grp1; - unsigned short grp2; - unsigned short grp3; - unsigned short grp4; - float unknown; - } PD02; - -/*type 04 0x14 display list*/ -typedef struct{ - unsigned long DL1; - unsigned long DL2; - unsigned short grp1; - unsigned short grp2; - unsigned long PIN; - unsigned short pinnum; - unsigned short rgbOPnum; /*number of RGB(07) ops in DLs*/ - } PD04; - -/*type 08 0x10 distance trigger*/ -typedef struct{ - float min; - float max; - unsigned long target; - } PD08; - -/*type 0A 0x1C dimentions*/ -typedef struct{ - long group; - float xmin; - float xmax; - float ymin; - float ymax; - float zmin; - float zmax; - } PD0A; - -/*type 0C 0x28 gunfire*/ -typedef struct{ - float xpos; - float ypos; - float zpos; - float xdim; - float ydim; - float zdim; - unsigned long imgdecl; - float unknown; - unsigned long unknown1; - unsigned long unknown2; - } PD0C; - -/*type 11 0x20 unknown*/ -typedef struct{ - unsigned long unknown1; - unsigned long unknown2; - unsigned long unknown3; - unsigned long unknown4; - unsigned long unknown5; - unsigned short unknown6; - unsigned short value; - unsigned long unknown7; - unsigned long unknown8; - } PD11; - -/*type 12 0x8 handle*/ -typedef struct{ - unsigned long target; - unsigned long RESERVED; - } PD12; - -/*type 15 0x14 position - held items, especially*/ -typedef struct{ - float xpos; - float ypos; - float zpos; - unsigned short grp1; - unsigned short grp2; - float unknown; - } PD15; - -/*type 16 0x10 display list - simple*/ -typedef struct{ - unsigned short unknown; - unsigned short ID; - unsigned long PIN; - unsigned long DL; - unsigned long RESERVED; - } PD16; - -/*type 17 0x4 placeholder for pointer to head*/ -typedef unsigned long PD17; - -/*type 18 0x18 display list*/ -typedef struct{ - unsigned long DL1; - unsigned long DL2; - unsigned long unknown1; - unsigned long PIN; - unsigned short PINnum; - unsigned short TAG; - unsigned short unknown2; - unsigned short RGBnum; - } PD18; - -#ifdef __cplusplus -} -#endif -#endif /*_PD_OBJ_TYPES_*/ diff --git a/notes/PD Documentation/microcode and object generation/ucode05.txt b/notes/PD Documentation/microcode and object generation/ucode05.txt deleted file mode 100644 index a9045b2..0000000 --- a/notes/PD Documentation/microcode and object generation/ucode05.txt +++ /dev/null @@ -1,998 +0,0 @@ -Microcode05 - RSP SW 2.0G - GE/PD -superficially similiar to mario's, but tri4 and combiner differences -00 rsp noop -01 rsp_uc05_matrix -02 rsp_reserved0 -03 rsp_uc05_movemem -04 rsp_uc05_vertex -05 rsp_reserved1 -06 rsp_uc05_displaylist -07 rsp_reserved2 -08 rsp_reserved3 -09 rsp_uc05_sprite2d - -AF rsp_uc05_load_ucode -B0 rsp_uc05_branch_z -B1 rsp_uc05_tri4 -B2 rsp_uc05_rdphalf_cont -B3 rsp_uc05_rdphalf_2 -B4 rsp_uc05_rdphalf_1 -B5 rsp_uc05_line3d -B6 rsp_uc05_cleargeometrymode -B7 rsp_uc05_setgeometrymode -B8 rsp_uc05_enddl -B9 rsp_uc05_setothermode_l -BA rsp_uc05_setothermode_h -BB rsp_uc05_texture / rdp_texture -BC rsp_uc05_moveword -BD rsp_uc05_popmatrix -BE rsp_uc05_culldl -BF rsp_uc05_tri1 - -C0 rdp_noop -C8 rdp_trifill -C9 rdp_trifillz -CA rdp_tritxtr -CB rdp_tritxtrz -CC rdp_trishade -CD rdp_trishadez -CE rdp_trishadetxtr -CF rdp_trishadetxtrz -E4 rdp_texrect -E5 rdp_texrectflip -E6 rdp_loadsync -E7 rdp_pipesync -E8 rdp_tilesync -E9 rdp_fullsync -EA rdp_setkeygb -EB rdp_setkeyr -EC rdp_setconvert -ED rdp_setscissor -EE rdp_setprimdepth -EF rdp_setothermode -F0 rdp_loadtlut -F2 rdp_settilesize -F3 rdp_loadblock -F4 rdp_loadtile -F5 rdp_settile -F6 rdp_fillrect -F7 rdp_setfillcolor -F8 rdp_setfogcolor -F9 rdp_setblendcolor -FA rdp_setprimcolor -FB rdp_setenvcolor -FC rdp_setcombine -FD rdp_settextureimage -FE rdp_setdepthimage -FF rdp_setcolorimage - --------------- - -01 rsp_uc05_matrix -a 4x4 veiwing matrix. It can be multiplied and pushed to the stack. - -upper word -xxx0xxxx modelview mul nopush -xxx1xxxx projection mul nopush -xxx2xxxx modelview load nopush -xxx3xxxx projection load nopush -xxx4xxxx modelview mul push -xxx5xxxx projection mul push -xxx6xxxx modelview load push -xxx7xxxx projection load push - -lower word -address or offset in file - -- - -03 rsp_uc05_movemem - -upper word -xx80xxxx move viewport -xx82xxxx look at y -xx84xxxx look at x -xx86xxxx light [0] -xx88xxxx light [1] -xx8Axxxx light [2] -xx8Cxxxx light [3] -xx8Exxxx light [4] -xx90xxxx light [5] -xx92xxxx light [6] -xx94xxxx light [7] -xx96xxxx texture at T -xx98xxxx matrix [0] -xx9Axxxx matrix [1] -xx9Cxxxx matrix [2] -xx9Exxxx matrix [3] - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - -- - -04 rsp_uc05_vertex - -upper word -00F00000 number of points -000FFFFF number of bytes to grab - -lower word -0f000000 segment -00ffffff offset in point table - -- - -06 rsp_uc05_displaylist - -upper word -xx00xxxx push display list -xx01xxxx branch to display list - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - --------------------------- -07 rsp_color -This PD-specific command declares offset to RGBA data - -upper word -00FF0000 number of bytes to grab, -4 -0000FFFF number of bytes to grab - -lower word -0f000000 segment -00ffffff address or offset in file - --------------------------- -AF rsp_load_ucode -Loads ucode -Preceeded by rdp_half_1 - -upper word -0000FFFF size of data section, -1 - -lower word -FFFFFFFF start text section - - --------------------------- -B0 rsp_branch_z -Branch if the z position of model is <= screen -Preceeded by rdp_half_1 - -upper word -00FFF000 vertex*5, specificly the z value -00000FFE vertex, specificly the z value - -lower word -in perspective mode: -(1-(near plane)/(screen depth)) / (1-(near plane)/(far plane)) * (zmax - zmin) - -in orthographic mode: -((screen depth)-(near plane))/((far plane)-(near plane)) * (zmax - zmin) - --or you can use the raw screen depth value - --------------------------- -B1 rsp_tri4 -Draws up to four triangles at a time. -Expects values from 0-F, corresponding with # points declared by vertex command. -Triangles with all points set to 0 are not drawn. - -upper word -0000F000 fourth triangle point 3 -00000F00 third triangle point 3 -000000F0 second triangle point 3 -0000000F first triangle point 3 - -lower word -f0000000 fourth triangle point 2 -0f000000 fourth triangle point 1 -00f00000 third triangle point 2 -000f0000 third triangle point 1 -0000f000 second triangle point 2 -00000f00 second triangle point 1 -000000f0 first triangle point 2 -0000000f first triangle point 1 - --------------------------- -B2 rsp_uc05_rdphalf_continued -Usage unknown. Used by sky and water generators in GE -Follows B4 rdphalf_1 command. - -B4000000 CE80 01DB -B2000000 01DB 0028 -B4000000 013F C000 -B2000000 F8AA 0000 - In this context, each represents a position value, converted from float to short. - Most likely this constructs the field for the sky and water. - --------------------------- -B3 rsp_uc05_rdphalf_2 -Usage unknown. Used at end of B4+B2 lists by sky and water generators in GE - -B4000000 0FDB 9B21 -B3000000 4F6E 0274 - --------------------------- -B4 rsp_uc05_rdphalf_1 -Preceeds "branch on z", "load ucode", and rdphalf_continued commands - -upper word -00000000 -lower word -FFFFFFFF display list to branch to for "branch on z" -FFFFFFFF start of data section for "load ucode" - --------------------------- -B5 rsp_line3d -draws a 3d line using two vectors (essentially points). Kinda like 3d functions. -Possibly used for gunfire, but highly unlikely. -width works in half-pixels, and the base value is 1.5 - -lower word -00FE0000 vector 0 -0000FE00 vector 1 -000000FF width (.5width + 1.5) - --------------------------- -B6 rsp_uc05_cleargeometrymode - -lower word -0x00000001 z buffer -0x00000002 texture -0x00000004 shade -0x00000200 shade smooth -0x00001000 cull front -0x00002000 cull back -0x00010000 fog -0x00020000 lighting -0x00040000 texture gen -0x00080000 texture gen linear -0x00100000 lod -0x00800000 clipping (Perfect Dark only) - -- - -B7 rsp_uc05_setgeometrymode -when following bitflags set, attributes applied to surfaces - -lower word -0x00000000 clipping -0x00000001 depth buffer -0x00000002 texture enable -0x00000004 shade (enable Gourand interpretation - if not set, use setprim/envcolor to make triangles visible) -0x000000F8 +only used in setup seemingly -0x00000200 shade smooth (uses vertex colors - if not set, first vertex defines the surface's color) -0x00001000 cull front -0x00002000 cull back -0x00010000 fog -0x00020000 lighting -0x00040000 texture gen -0x00080000 texture gen linear -0x00100000 lod (doesn't seem like many games implement this...) -0x00800000 clipping (Perfect Dark only) - ---------------------------- -B8 rsp_enddl -Marks the end of a display list. -If the current list was called by an 06 command, returns from branch. -Otherwise, processing returns to the calling function. - -No options - ---------------------------- - -B9 rsp_uc05_setothermode_l -upper word -0000FF00 shift (PD only: 32-shift-length) - here are shift values for each of the various segments (hex): - 0 alpha compare - 2 depth source select - 3 render mode - 10 blender -000000FF length (PD only: length-1) - here are lengths for each of the various segments (hex): - 1 depth source - 2 alpha compare - 1D render mode (encompases render mode, converge ST, depth mode, and blender from below) - 10 blender - -lower word -alpha compare 0x00000000 none - 0x00000001 threshold - 0x00000003 dither -depth source 0x00000000 pixel - 0x00000004 primitive -render mode 0x00000008 antialias enable - 0x00000010 depth compare - 0x00000020 depth update - 0x00000040 image read - 0x00000080 clear on converge --converge ST 0x00000000 converge delta-ST clamp - 0x00000100 converge delta-ST wrap - 0x00000200 converge delta-ST full - 0x00000300 converge delta-ST save --depthmode 0x00000000 depth opa - 0x00000400 depth interpolate - 0x00000800 depth exclusive - 0x00000C00 depth decrement - 0x00001000 converge x alpha - 0x00002000 alpha converge selection - 0x00004000 force blender - 0x00008000 texture edge (0 in Perfect Dark) --blender 0x00010000 blend 1 machine - 0x00020000 blend alpha memory - 0x00040000 blend 1 - 0x00080000 blend 0 - 0x00100000 blend color in - 0x00200000 blend color memory - 0x00400000 blend color blender - 0x00800000 blend color fog - 0x01000000 blend alpha in - 0x02000000 blend alpha fog - 0x04000000 blend alpha shade - 0x08000000 blend 0 - 0x10000000 blend 1 machine - 0x20000000 blend alpha memory - 0x40000000 blend 1 - 0x80000000 blend 0 - -- - -BA rsp_uc05_setothermode_h -upper word: -0000FF00 shift (PD only: 32-shift-length) - These are the bit-shift values for each of the various segments: - 0 blend mask - 4 alpha dither - 6 RGB dither - 8 combine key - 9 texture convertion - 12 texture filter - 14 texture LUT - 16 texture LOD - 17 texture detail - 19 texture perspective - 20 cycle type - 22 color dither - 23 pipeline -000000FF length (PD only: length-1) - here are lengths for each of the various segments: - 4 blend mask - 2 alpha dither - 2 RGB dither - 1 combine key - 3 texture convertion - 2 texture filter - 2 texture LUT - 1 texture LOD - 2 texture detail - 1 texture persepective - 2 cycle type - 1 color dither - 1 pipeline mode - - can also signify type of image data - 0 4bit - 1 8bit - 2 16bit - 3 32bit - -lower word: -blendmask 0x0000000F -alpha dither 0x00000000 pattern - 0x00000010 no pattern - 0x00000020 noise - 0x00000030 disable -rgb dither 0x00000000 magic square - 0x00000040 bayer - 0x00000080 noise (enable in Perfect Dark) - 0x000000C0 disable (Perfect Dark Only!) -combine key 0x00000000 none - 0x00000100 key -texture convert 0x00000000 convert - 0x00000A00 filter convert - 0x00000C00 filter -texture filter 0x00000000 point - 0x00002000 bi-level interpretation - 0x00003000 average -texture lut 0x00000000 none - 0x00008000 rgba16 - 0x0000C000 ia16 -texture lod 0x00000000 tile - 0x00010000 lod -texture detail 0x00000000 clamp - 0x00020000 sharpen - 0x00040000 detail -texture persp 0x00000000 none - 0x00080000 perspective -cycle type 0x00000000 1cycle - 0x00100000 2cycle - 0x00200000 copy - 0x00300000 fill -color dither 0x00000000 disable (note: Perfect Dark does not use this flag!) - 0x00400000 enable -pipeline mode 0x00000000 n primitive - 0x00800000 1 primitive - -- - -BB rsp_uc05_texture -Needs to be set on to texture following triangles, ie: BB002801 FFFFFFFF -Can also map one of 6 pre-loaded imagemaps to triangles. -s and t refer to the two mapping pins included with each point struct. -Ordinarily don't set these masks, unless using preloaded image or surfaces do not declare ST. - -upper word -00FF0000 bowtie of some kind. +4 chops one scanline from surface -00003800 level? seems like format, most of the time -00000700 tile t0 -000000FF on(1) or off(0) - -lower word -FFFF0000 s -0000FFFF t - -- - -BC rsp_uc05_moveword -by default moves entire matrix. Otherwise, this dictates what stuff is being fiddled with - -upper word -types 00000000 matrix - 00020000 #lights - 00040000 clip - 00060000 segment - 00080000 fog - 000A0000 light color - 000C0000 point - 000E0000 perspective normal -offsets: - 00000000 integer matrix -(per 00000080 floating-point matrix -type) 00000000 matrix XX XY - 00000010 matrix XZ XW - 00000020 matrix YX YY - 00000030 matrix YZ YW - 00000040 matrix ZX ZY - 00000050 matrix ZZ ZW - 00000060 matrix WX WY - 00000070 matrix WZ WW - 00000000 light vectors or fog - 00000010 clip -x - 00000030 clip -y - 00000050 clip +x - 00000070 clip +y - 0000003C segment 0-F - 00000000 light a - 00000010 light b - 00000380 light 0-8 - 00000040 point RGBA - 00000050 point ST - 00000060 point XY screen - 00000070 point Z screen - -lower word -if fog/light not selected, set address - 0x0f000000 segment - 0x00ffffff address or offset in file -if fog, fog depth values (2 16bit integers) -if light color, rgb+fog (ie. FF000001 for red fog, active cloud layer) - ---------------------------- -BD rsp_popmatrix adrs,len,idx,ofs -upper word -00FF0000 Perfect Dark: offset, typically 0 -0000FF00 Perfect Dark: size of block, -1 (0x3F) -000000FF Perfect Dark: 2 - -lower word -FFFFFFFF matrix number to pop or address of matrix (num*64) - ---------------------------- -BE rsp_culldl -upper word -0000FFFE start - -lower word -0000FFFE end - ---------------------------- -BF rsp_tri1 -Create one triangle. -Divide each value by 10 (0xA) to return the point number in current list. Note the point order is opposite that for the tri4 command. -Requires a vertex list offset is set by rsp_vertex command. -ie. 00 point 0 - 0A point 1 - ... - 8C point 14 - 96 point 15 - -lower word -00ff0000 point 1 -0000ff00 point 2 -000000ff point 3 - ------------ -E4 rdp_texrect -Draws text in rectangles, especially fonts. -Virtually all 2D objects are mapped with this type unless sprite microcode in use. -64bit command. First 32 bits set size of tile, second 32 bits image alignment - -upper word -00FFF000 upper left x -00000FFF upper left y - -lower word -07000000 tile -00FFF000 lower right x -00000FFF lower right y - -command 2 -upper word -FFFF0000 upper left s -0000FFFF upper left t - -lower word -FFFF0000 change in s per change in x (dsdx, as in delta-s delta-x) -0000FFFF dtdy ------------ -E5 rdp_texrectflip -Suspiciously similiar to E4: rdp_texrect - -upper word -00FFF000 upper left x -00000FFF upper left y - -lower word -07000000 tile -00FFF000 lower right x -00000FFF lower right y - -command 2 -upper word -FFFF0000 upper left s -0000FFFF upper left t - -lower word -FFFF0000 change in s per change in x (dsdx, as in delta-s delta-x) -0000FFFF dtdy - --------------------------- -E6 rdp_loadsync -Called after any data request to allow processor time to load data. - -No options - --------------------------- -E7 rdp_pipesync -The pipe is used as a generic term for peripheral interface or co-processor activity. -Waits for data to be loaded from ROM or RAM, or waits for co-processor to clear. -Display lists will almost always start with this command to ensure all previous display lists are completely executed. - -No options - --------------------------- -E8 rdp_tilesync -Called after requesting tile data load. Waits for processor activity to end. - -No options - --------------------------- -E9 rdp_fullsync -Combined effect of all syncs. Not common, actually. - -No options - --------------------------- -EA rdp_setkeygb -Sets green + blue key components; typically used with EB: rdp_setkeyr below - -upper word -00FFF000 Water: Green -00000FFF Water: Blue - -lower word -FF000000 Cloud: Green -00FF0000 Sky: Green -0000FF00 Cloud: Blue -000000FF Sky: Blue - --------------------------- -EB rdp_setkeyr -Sets red key component; typically used with EA: rdp_setkeygb above - -upper word - -lower word -0FFF0000 Water: Red -0000FF00 Cloud: Red -000000FF Sky: Red - --------------------------- -EC rdp_setconvert -All values are 9 bits; note that K2 spans both upper and lower word - -upper word -003FE000 k0 -00001FF0 k1 -0000000F k2 (upper) - -lower word -F8000000 k2 (lower) -07FC0000 k3 -0003FE00 k4 -000001FF k5 - --------------------------- -ED rdp_setscissor - -upper word -00FFF000 upper left x -00000FFF upper left y - -lower word -02000000 interlace -01000000 odd when interlaced -00FFF000 lower right x -00000FFF lower right y - --------------------------- -EE rdp_setprimdepth - -lower word -FFFF0000 depth -0000FFFF change in depth - --------------------------- -EF rdp_setothermode -This is a crazy command. It seems like it can take a whole slew of different arguments! - -upper word -00FFFFFF uses options from lower word of setothermode_h - Pipeline Mode - Cycle Type - Texture Perspective - Texture Detail - Texture LOD - Texture LUT - Texture Filter - Texture Convert - Combine Key - Color Dither - Alpha Dither - -lower word -FFFFFFFF uses these options from lower word of setothermode_l - alpha compare - depth source - render mode - --------------------------- -F0 rdp_loadtlut -used to load palettes methinks; technically same format as the other load types -upper word -00FFF000 x0 (# entries) -00000FFF y0 - -lower word -07000000 tile -00FFF000 count/x1 (size in bytes of palette) -00000FFF palette start/y1 - -- - -F2 rdp_settilesize -Sets size of image to be mapped. Best if it actually matches the image's proportions... -Screwing up the mapping aspect can seriously damage the tile's appearance. -width=(lrs-uls)/4 + 1 -height=(lrt-ult)/4 + 1 - -upper word -00FFF000 upper left s -00000FFF upper left t - -lower word -07000000 tile -00FFF000 lower right s -00000FFF lower right t - -- - -F3 rdp_loadblock -used to load palette, but the code doesn't make much sense to me. - -upper word -00FFF000 upper left s -00000FFF upper left t - -lower word -07000000 tile -00FFF000 lower right s -00000FFF lower right t - -- - -F4 rdp_loadtile -width= (lrs-uls)/4 + 1 -height= (lrt-ult)/4 + 1 - -upper word -00FFF000 upper-left S -00000FFF upper-left T - -lower word -07000000 tile -00FFF000 lower-right S -00000FFF lower-right T - -- - -F5 rdp_settile -Applies image assuming given attibutes. -ie. F5600600 00FD8360 would load a 48x48 intensity+alpha image with 4bit pixel data and clamping the corners to the s/t given in the point data. -If palettes are loaded, you can set the palette bits to swap palettes at runtime. - -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x0003FE00 line - 0x000001FF tmem - -lower word -07000000 tile -00F00000 palette -00080000 clamp t -00040000 mirror t -0003C000 mask t -00003C00 shift t -00000200 clamp s -00000100 mirror s -000000F0 mask s -0000000F shift s - -- - -F6 rdp_fillrect -This is predominantly used when mapping text or "2D" objects -Color is set either by rdp_setblendcolor or rdp_setfillcolor -upper word -00FFC000 lower right x -00003000 lr x fraction -00000FFC lower right y -00000003 lr y fraction - -lower word -00FFC000 upper left x -00003000 ul x fraction -00000FFC upper left y -00000003 ul y fraction - -- - -F7 rdp_setfillcolor -Sets the fill color. Uses 16bit color - -lower word -0000F800 red -000007C0 green -0000003E blue -00000001 alpha - -- - -F8 rdp_setfogcolor -Sets fog color. Uses 32bit color - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa red, green, blue, alpha components - -- - -F9 rdp_setblendcolor -Sets blend color. Similar to rdp_setfillcolor, except 32bit color -Used by the hardware blended when option selected. - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa red, green, blue, alpha components - -- - -FA rdp_setprimcolor -Sets the foreground color applied to generated triads. -Blends into background (enviroment) color. -Many fonts, for instance, use I images blended color(prim)->alpha(env) - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa red, green, blue, alpha components - -- - -FB rdp_setenvcolor -Sets background color applied to generated triads. -If a IA image is used, the black is the enviroment color, the white the primary color. - -upper word -0000FF00 minimum level -000000FF level - -lower word -rrggbbaa - -- - -FC rdp_setcombine -upper word -00F00000 a0 -000F8000 c0 -00007000 Aa0 -00000E00 Ac0 -000001E0 a1 -0000001F c1 - -lower word -F0000000 b0 -0F000000 b1 -00E00000 Aa1 -001C0000 Ac1 -00038000 d0 -00007000 Ab0 -00000E00 Ad0 -000001C0 d1 -00000038 Ab1 -00000007 Ad1 - -0 combined -1 texel0 -2 texel1 -3 primitive -4 shade -5 enviroment -6 center - scale - 1 -7 combined alpha -8 texel0 alpha -9 texel1 alpha -A primitive alpha -B shade alpha -C enviroment alpha -D LOD fraction -E primitive LOD fraction -F K5 -1F 0 - -alpha combiner: -0 combined - LOD fraction -1 texel0 -2 texel1 -3 primitive -4 shade -5 enviroment -6 primitive LOD fraction - 1 -7 0 - -These are some common pattern names. They're probably from source, since they were gleaned from the internal names you see in some roms. At the very least, the patterns are very consistant from game to game. -Note that there are two sets of these for each command: x0 and x1 - -internal names a c Alphaa0 Alphac b d Alphab Alphad -PRIMITIVE 0 0 0 prim. 0 0 0 prim. -SHADE 0 0 0 shade 0 0 0 shade -SHADEDECALA 0 0 0 shade 0 0 0 texel0 -DECALRGB 0 0 0 texel0 0 0 0 shade -DECALRGBA 0 0 0 texel0 0 0 0 texel0 -ADDRGB 1 0 texel0 shade 0 0 0 shade -ADDRGBDECALA 1 0 texel0 shade 0 0 0 texel0 -MODULATERGB -MODULATEI texel0 0 shade 0 0 0 0 shade -MODULATERGBA -MODULATEIA texel0 0 shade 0 texel0 0 shade 0 -MODULATERGBDECALA -MODULATEIDECALA texel0 0 shade 0 0 0 0 texel0 -MODULATERGB_PRIM -MODULATEI_PRIM texel0 0 prim. 0 0 0 0 prim. -MODULATERGBA_PRIM -MODULATEIA_PRIM texel0 0 prim. 0 texel0 0 prim. 0 -MODULATERGBDECALA_PRIM -MODULATEIDECALA_PRIM texel0 0 prim. 0 0 0 0 texel0 -REFLECTRGB enviro. 0 texel0 shade 0 0 0 shade -REFLECTRGBDECALA enviro. 0 texel0 shade 0 0 0 texel0 -BLENDI enviro. shade texel0 shade 0 0 0 shade -BLENDIA enviro. shade texel0 shade texel0 0 shade 0 -BLENDIDECALA enviro. shade texel0 shade 0 0 0 texel0 -BLENDRGBA texel0 shade texel0A shade 0 0 0 shade -BLENDRGBDECALA texel0 shade texel0A shade 0 0 0 texel0 -BLENDPE prim. enviro. texel0 enviro. texel0 0 shade 0 -BLENDPEDECALA prim. enviro. texel0 enviro. 0 0 0 texel0 -BLENDPE_ALT enviro. prim. texel0 prim. texel0 0 shade 0 -BLENDPEDECALA_ALT enviro. prim. texel0 prim. 0 0 0 texel0 -HILITERGB prim. shade texel0 shade 0 0 0 shade -HILITERGBA prim. shade texel0 shade prim. shade texel0 shade -HILITERGBDECALA prim. shade texel0 shade 0 0 0 texel0 -TWOCOLORTEX prim. shade texel0 shade 0 0 0 shade - -- - -FD rdp_settextureimage -also used for camspy effect in PD, but that's just crazy and not included here -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width-1 - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - -- - -FE rdp_setdepthimage -Not certain, but seems like the format and size always equal 0, and width always equals 1 -Most likely only accepts a 1bit alpha table or something silly like that - -upper word -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width-1 - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - -- - -FF rdp_setcolorimage -format 0x00000000 rgba - 0x00200000 yuv - 0x00400000 ci - 0x00600000 ia - 0x00800000 i -size 0x00000000 4bit - 0x00080000 8bit - 0x00100000 16bit - 0x00180000 32bit - 0x00000FFF width - -lower word -0f000000 segment (like 05 used for offsets) -00ffffff address or offset in file - diff --git a/notes/PD Documentation/saved data and unlockable options/locks.txt b/notes/PD Documentation/saved data and unlockable options/locks.txt deleted file mode 100644 index 01426e1..0000000 --- a/notes/PD Documentation/saved data and unlockable options/locks.txt +++ /dev/null @@ -1,119 +0,0 @@ -Uncertain the true number, so just dumped a bunch of entries in here - -Buffer lies at: -NPDE 1.0 NPDE 1.1 NPDJ NPDP - 800ACCC8 - -00 always returns 1 (unlocked) -01 Farsight XR-20 -02 Tranquilizer -03 SuperDragon -04 Slayer -05 Falcon 2 (Silencer) -06 Falcon 2 (Scope) -07 Mauler -08 Phoenix -09 DY357-LX -0A Callisto NTG -0B Laptop Gun -0C K7 Avenger 1 from start of game -0D RC-P120 -0E Shotgun -0F Laser, Reaper -10 Devastator -11 Crossbow -12 N-Bomb -13 Proximity Mine -14 Remote Mine -15 X-Ray Scanner -16 Body Armour 1 from start of game -17 Cloaking Device -18 Combat Boost -19 HardSim -1A PerfectSim -1B -1C DarkSim -1D -1E -1F King Of The Hill 1 from start of game -20 Hold The Briefcase -21 Capture The Case -22 -23 Car Park -24 Complex -25 Warehouse -26 Ravine -27 Temple -28 G5 Building (MP) -29 Grid -2A Felicity -2B Villa (MP) -2C Sewers -2D Ruins -2E Base -2F -30 Fortress -31 -32 dataDyne Female Guard -33 Office Suit, Office Casual -34 Carrington Villa Set: Joanna Negotiator, Negotiator, dataDyne Sniper -35 Trent Easton -36 NSA Lackey -37 G5 Set: Joanna Leather, G5 Guard, G5 SWAT Guard -38 Mr. Blonde -39 CIA Agent, FBI Agent -3A Rescue Set: Joanna Lab Tech., Area 51 Guard, Area 51 Trooper, Pilot, Overalls -3B Investigation Set: Male Lab Technician, Female Lab Technician, dataDyne Lab Technician -3C Biotechnician -3D Attack Ship Set: Elvis, Maian, Elvis (Waistcoat), Maian Soldier -3E Alaskan Guard -3F Air Force 1 Set: Joanna Stewardess, Air Force One Pilot, Steward, Stewardess, Head Stewardess -40 Dinner Jacket Set: Connery, Dalton, Moore, Bronsnan -41 Carrington Institute Set: Joanna Frocks, Carrington Evening Wear, The President -42 Crash Site Set: President's Clone -43 Presidential Security -44 NSA Bodyguard -45 Pelagic II Set: Joanna Wet Suit, Joanna Aqualung, Pelagic II Guard -46 Joanna Trenchcoat -47 -48 -49 -4A Joanna Arctic -4B -4C Jonathan -4D Pop a Cap -4E Hacker Central -4F -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -5A -5B -5C -5D -5E -5F -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -6A -6B -6C -6D -6E -6F -70 diff --git a/notes/PD Documentation/stages/background data/PD clipping.txt b/notes/PD Documentation/stages/background data/PD clipping.txt deleted file mode 100644 index d934c88..0000000 --- a/notes/PD Documentation/stages/background data/PD clipping.txt +++ /dev/null @@ -1,133 +0,0 @@ -PD clipping: -stored in bg_*_tilesZ - -Header: -0x0 4 number of room header offsets. -0x4 4 offset to start of tile data - -0x8 4 list of room header offsets. (each is 32bits long) - For each room an offset exists to the start of tiles positioned within that room. - Rooms without tiles bear NULL pointers. - Number of rooms is declared at the beginning of the file. - -tile format: -0x0 1 usually 0(7002972C). Test if 1(70029778) and 2(7002Cf04). others seem invalid -0x1 1 # points declared -0x2 2 4000 test(70029740) + execute(70029750) - 2000 test(700297EC) + execute(7002989C) - 0800 kneel? no- more like force 2-sided or force ceiling - 0100 test(70029750)(S1=1) - 0001 solid floor? - 0002 solid floor? - 0004 used on impassible walls, but only causes a small dip in viewport - 0080 unknown. test at 700278E8 (T6= &80) - when present can fall off of tile -common values: 001B normal tile - 001C impassible tile (walls, usually) - 0018 open-faced tile you can fall from - -0x4 2 0 if no connections. Otherwise, # connected sides? -0x6 1 1st point w/ minimum x -0x7 1 1st point w/ minimum y -0x8 1 1st point w/ minimum z -0x9 1 1st point w/ maximum x -0xA 1 1st point w/ maximum y -0xB 1 1st point w/ maximum z -0xC 2 0rgb spectral fog color - - - -room 1- -1: -0004 001B 0004 0200 0100 0000 0666 [1A10 180E 1012] -F61B 0000 FDE6 F61B 0000 FD70 F52F 0000 FD70 F52F 0000 FDE6 --2533 0 -538 -2533 0 -656 -2769 0 -656 -2769 0 -538 -7, 5, *, 3 - -2: -0004 001C 0000 0002 0001 0000 0FFF [0E1C 1214 1012] -F52F 00EC FDE6 F61B 00EC FDE6 F61B 0076 FDE6 F52F 0076 FDE6 --2769 236 -538 -2533 236 -538 -2533 118 -538 -2769 118 -538 -*, 6, 3, * - -3: -0004 001C 0000 0201 0000 0000 0FFF [1A16 120E 1012] -F61B 0076 FDE6 F61B 0000 FDE6 F52F 0000 FDE6 F52F 0076 FDE6 --2533 118 -538 -2533 0 -538 -2769 0 -538 -2769 118 -538 -7, 1, *, 2 - -4: -0004 001C 0000 0000 0001 0200 0FFF [0E10 1214 1C12] -F52F 0076 FD70 F61B 0076 FD70 F61B 00EC FD70 F52F 00EC FD70 --2769 118 -656 -2533 118 -656 -2533 236 -656 -2769 236 -656 -5, 6, *, * - -5: -0004 001C 0000 0001 0002 0000 0FFF [0E16 121A 1012] -F52F 0076 FD70 F52F 0000 FD70 F61B 0000 FD70 F61B 0076 FD70 --2769 118 -656 -2769 0 -656 -2533 0 -656 -2533 118 -656 -*, 1, 7, 4 - -6: -0004 001C 0000 0002 0100 0000 0FFF [0E1C 180E 1012] -F61B 00EC FDE6 F61B 00EC FD70 F61B 0076 FD70 F61B 0076 FDE6 --2533 236 -538 -2533 236 -656 -2533 118 -656 -2533 118 -538 -*, 4, 7, * - -7: -0004 001C 0000 0001 0000 0002 0FFF [0E16 120E 101E] -F61B 0076 FD70 F61B 0000 FD70 F61B 0000 FDE6 F61B 0076 FDE6 --2533 118 -656 -2533 0 -656 -2533 0 -538 -2533 118 -538 -5, 1, 3, 6 - - -room 2- -1: -0004 001B 0004 0100 0000 0003 0777 [1410 120E 1024] -F52F 0114 FC35 F4BB 0114 FC35 F4BB 0114 FC84 F52F 0114 FD48 - -2: -0004 001B 0004 0200 0100 0000 0888 [1A10 180E 1012] -F52F 0114 FD48 F4BB 0114 FC84 F423 0114 FC84 F442 0114 FCAC - -3: -0003 001B 0004 0000 0201 0000 0666 -F41B 0114 FD48 F52F 0114 FD48 F442 0114 FCAC - -4: -0003 001B 0004 0100 0002 0001 0999 -F423 0114 FC84 F3A5 0114 FCAC F442 0114 FCAC - -5: -0004 001B 0004 0200 0201 0003 0999 -F3A5 0114 FCAC F423 0114 FC84 F243 0114 FC5C F243 0114 FCD2 - -6: -0003 001B 0004 0000 0002 0001 0444 -F243 0114 FCD2 F243 0114 FD48 F3CC 0114 FD48 - -7: -0003 001B 0004 0000 0201 0001 0777 -F243 0114 FCD2 F3CC 0114 FD48 F3A5 0114 FCAC - -8: -0004 001B 0004 0200 0101 0000 0CCC -F41B 0114 FD48 F442 0114 FCAC F3A5 0114 FCAC F3CC 0114 FD48 - -9: -0003 001B 0004 0000 0201 0001 0999 -F243 0114 FC5C F423 0114 FC84 F423 0114 FC35 - -10: -0003 001B 0004 0000 0101 0000 0666 -F243 0114 FC5C F423 0114 FC35 F243 0114 FC35 - -11: -0004 001C 0000 0000 0200 0100 0444 -F52F 018A FD48 F52F 0200 FD48 F52F 0200 FC35 F52F 018A FC35 - -12: -0004 001C 0000 0000 0200 0100 0444 -F52F 0114 FD48 F52F 018A FD48 F52F 018A FC35 F52F 0114 FC35 - -13: diff --git a/notes/StyleGuide.txt b/notes/StyleGuide.txt deleted file mode 100644 index 6dffbdf..0000000 --- a/notes/StyleGuide.txt +++ /dev/null @@ -1,267 +0,0 @@ -/* -================================ Style Guide ================================== - -GE/PD mostly uses namespaceFunctionName() - joyTickRetrace(); - aiIfOpportunityFireJumpF(); -with occasional Pascal_Snake_Case - Snd_Play_Universal() -and snake_case - font_makegt -however sometimes its Snake_PrefixPascalCase - Pak_AddOneCameraFile - -GE Constant example - MAX_FUDGE_DATA_SIZE - -SDK also mostly uses namespaceFunctionName() in camelCase - alSndpPlay() - -Basically, Rare had no style guide! - - - -If an original name is known - Use it! - -In all other cases follow this guide. - - - -_______________________________________________________________________________ - Prefix Table -_______________________________________________________________________________ -Prefix Meaning Example Notes --------|---------------|-------------------|----------------------------------- - g global gPrefService Not needed if already prefixed - "Global" --------|---------------|-------------------|----------------------------------- - a argument aCount; - func(aCount); --------|---------------|-------------------|----------------------------------- - s static member sPrefChecked Static Local retains value over App - life, but remains local --------|---------------|-------------------|----------------------------------- - m private member -------file1------- a C file (Not H) - - static mLength; mLength is only accessable to file1 - - GetLength() because mLength was declared - { Static. - return mLength; - } - - -------Header------ Header included anywhere - - extern GetLength(); GetLegnth() is global because it - was declared extern. --------|---------------|-------------------|----------------------------------- - E_ enum constants enum E_FOO - { - E_FOO_BAR, Also prefix with Enum Name. - E_FOO_BAZ - } --------|---------------|-------------------|----------------------------------- - _ Implementation __osThingy Underscore prefix should NOT be - __ (Reserved) used in game code. - However, expect to find them in OS - as Internal Identifiers but no - Accessable Identifier will start - with _ or __. --------|---------------|-------------------|----------------------------------- - - -Sufix Meaning Example Notes --------|---------------|-------------------|----------------------------------- - p Pointer glistp Pointer to glist -_______________________________________________________________________________ - - -TYPES - Use SDK types (u8, s32 etc) rather than C Types (unsigned char, int etc) - Remember to include - -CONSTANTS - ALL_CAPS for constants eg. #define NULL 0 - -INCLUDE UNITS IN NAMES - If a variable represents time, weight, or some other unit then include the unit - in the name so developers can more easily spot problems. - For example: - int timeout_msecs; - int my_weight_lbs; - -VARIABLE NAMES - Should be nouns (as they represent state). The name should be camelCase - (e.g. index, currentEnvironment or bond). - - Prefixes are sometimes usefull, please refer to prefix table above - - Suffixes are sometimes useful eg: - max - to mean the maximum value something can have. - cnt - the current count of a running count variable. - key - key value. - For example: retry_max to mean the maximum number of retries, retry_cnt to mean - the current retry count. - - -FUNCTION NAMES - Should be verb phrases (as they represent actions), and command-like function - should be imperative. - The name should make clear what it does: - check_for_errors() instead of error_check(), - dump_data_to_file() instead of data_file(). - This will also make functions and data objects more distinguishable. - - Prefixes are sometimes useful: - is - to ask a question about something. Whenever someone sees Is they will - know it's a question. - get - get a value. set - set a value. - - For example: isAlive - -STRUCT NAMES - Structs are often nouns and should be PascalCase - - -COMMENTS - Comments should be C style / * * / for block comments and header documentation - C++ style / / for inline comments documenting single items - XML Documentation for Intelisense / / / should precede functions directly - without extra line breaks - - -SCOPE - Variables inside braces have "Block" scope and end when the block ends (unless - declared static where they retain their value till program ends). if(1) - { - int a = 1; - } - else - { - int a = 0; - } - - Variables Outside functions, usually at top of file (or in header) have by - default Global Scope (extern aka Public). - If declaired as static they are demoted to "Translation Unit" Scope, - (the file including any included files) and cannot be addressed by other - files (aka Private). - Both extern and static have Static Duration - they end when the program ends. - - //Initial Declaration - int gi1 = 1; // defnition, external linkage (Public) - static int ii2 = 2; // defnition, internal linkage (Private) - extern int gi3 = 3; // defnition, external linkage (Public) - int gi4; // tentative defnition, external linkage (Public) - static int ii5; // tentative defnition, internal linkage (Private) - - //Attempted Referencing - int gi1; // valid tentative defnition, refers to previous - int ii2; // 6.2.2 renders undefned, linkage disagreement - int gi3; // valid tentative defnition, refers to previous - int gi4; // valid tentative defnition, refers to previous - int ii5; // 6.2.2 renders undefned, linkage disagreement - - //Reference (Brings into Scope) - extern int gi1; // refers to previous, whose linkage is external - extern int ii2; // refers to previous, whose linkage is internal - extern int gi3; // refers to previous, whose linkage is external - extern int gi4; // refers to previous, whose linkage is external - extern int ii5; // refers to previous, whose linkage is internal - - - -=================== EXAMPLE C ====================== -*/ - - -/* -- FILE 1 -- */ - - static f32 mAiTime; // Static, holds value for duration of program, scoped to file 1 - // There should be good reason to keep a limited scope. - - /// Returns the time - extern f32 ai_get_Time() //Explicit extern for clarity (not required) - { - return mAiTime; // Gets time from private mTime - } - - /// sets the time from an integer - void ai_set_Time(u32 time) // though not explicit, this is still extern - { - mAiTime = time / 60; // Sets time to mTime format - } -/*----------------------------------*/ - - - - - -/* -- Global Header (Perhaps included with ultra64.h) -- */ - - extern int ai_get_Time(); // Gets time from private mTime - -/*----------------------------------*/ - - - - - - -/* -- FILE 2 -- */ - - s32 D_80000000; // Unknown label data (extern by default) - u32 gGlobalData = 0; // camelCasedNaming and defined as early as possible - - typedef enum E_ID // prefix with E_ - { - E_ID_AGENT, // prefix with enum name - E_ID_SECRETAGENT, - E_ID_00AGENT - }; - - typedef struct Person // structs themselves should use PascalCase and be Nouns - { - E_ID ID; // struct member Noun and PascalCase - char *Name; - int Age; - } Person; - - Person gTrevor = {E_ID_00AGENT, "Trevor", 30}; // Global Person defined early - - // This can be done, but its pointless since gGlobalData has global scope and nothing special is being done - int get_GlobalData() - { - return gGlobalData; - } - - - /// functions should be snake_cased - /// further xml documentation - /// parameter1 is a s32 and defines the number of xxx - void function_name_sample(int Parameter1) - { // newline for opening braces (ALLMAN) - u32 tempvar; // Use SDK Types - - if (gGlobalData == 1) - { - gGlobalData = 2; - D_80000000 = 10; - } - else - { - tempVar = get_GlobalData(); // wastes cpu instructions - tempVar = gGlobalData(); // This works equally as well - } - - if (gGlobalData == 4) - gGlobalData = 2; // this syntex may be used - } - - void main() - { - int aSomeArg = ai_get_Time(); // Access Global Getter - //aSomeArg = mAiTime; // This fails as mAiTime is not visible in this file (Scope limited to file1) - function_name_sample(aSomeArg); - } - diff --git a/notes/ghidra/ge007.u.old.elf.gzf b/notes/ghidra/ge007.u.old.elf.gzf deleted file mode 100644 index 323da2e..0000000 Binary files a/notes/ghidra/ge007.u.old.elf.gzf and /dev/null differ diff --git a/readme.md b/readme.md index 8f8c513..6bd8b99 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,8 @@ This is a working Goldeneye 007 decompilation! +[![GE-CI](https://github.com/kholdfuzion/goldeneye_src/workflows/GE-CI/badge.svg)](https://kholdfuzion.github.io/goldeneyestatus/) + + ## Setup The only requirements for Ubuntu 16.04 and 18.04 should be ``` diff --git a/src/bondaicommands.h b/src/bondaicommands.h index d23287d..85c98a7 100644 --- a/src/bondaicommands.h +++ b/src/bondaicommands.h @@ -952,8 +952,10 @@ //============================================================================= // note: uses chr->visionrange while checking for bond. once bond has been spotted, // check if bond and guard are within line of sight (ignores facing direction). +// injured guards will also set spotted Bond state (won't work with invincible/armored guards). // if bond breaks line of sight, do not goto label. if bond has broken line of -// sight for more than 10 seconds, reset spotted bond state +// sight for more than 10 seconds, reset spotted bond state. when using with +// command 3E, make sure 32 takes priority over command 3E //===========================================================================*/ #define if_guard_sees_bond_ID 0x32 #define if_guard_sees_bond_LENGTH 0x02 @@ -1112,16 +1114,22 @@ label, /*============================================================================= -// name: if_guard_was_shot_within_last_10_secs +// name: if_guard_was_shot_or_seen_bond_within_last_10_secs // command id: 3E -// info: if guard was shot (from anyone) within the last 10 seconds, goto label +// info: if guard was shot (from anyone) or saw Bond within the last 10 seconds, goto label //============================================================================= -// note: command will not count guard as shot if they are invincible/have armour +// note: command will not count guard as shot if they are invincible/have armour. +// if guard saw Bond (using command 32) in the last 10 seconds, goto label. when +// using with command 32, make sure 32 takes priority over command 3E. if guard +// was injured within the last 10 seconds, goto label when finished injury reaction +// animation (will not work with invincible/armored guards). +// to check if guard was hit/damaged use commands 7E/F8 instead, or check if +// guard flags CHRFLAG_WAS_DAMAGED/CHRFLAG_WAS_HIT are set using command 9F/A2 //===========================================================================*/ -#define if_guard_was_shot_within_last_10_secs_ID 0x3E -#define if_guard_was_shot_within_last_10_secs_LENGTH 0x02 -#define if_guard_was_shot_within_last_10_secs(label) \ - if_guard_was_shot_within_last_10_secs_ID, \ +#define if_guard_was_shot_or_seen_bond_within_last_10_secs_ID 0x3E +#define if_guard_was_shot_or_seen_bond_within_last_10_secs_LENGTH 0x02 +#define if_guard_was_shot_or_seen_bond_within_last_10_secs(label) \ + if_guard_was_shot_or_seen_bond_within_last_10_secs_ID, \ label, /*============================================================================= @@ -2436,7 +2444,7 @@ /*============================================================================= // name: if_guard_bitfield_is_set_on // command id: 96 -// info: if bits is set on in chr->BITFIELD, goto label +// info: if any bits in argument are set on in chr->BITFIELD, goto label //============================================================================= // note: can be used by obj ai lists, obj lists are free to utilize the entire // spectrum of flags @@ -2483,7 +2491,7 @@ /*============================================================================= // name: if_chr_bitfield_is_set_on // command id: 99 -// info: if bits is set on in chr->BITFIELD, goto label +// info: if any bits in argument are set on in chr->BITFIELD, goto label //===========================================================================*/ #define if_chr_bitfield_is_set_on_ID 0x99 #define if_chr_bitfield_is_set_on_LENGTH 0x04 diff --git a/src/bondconstants.h b/src/bondconstants.h index 0adab7a..98aa566 100644 --- a/src/bondconstants.h +++ b/src/bondconstants.h @@ -44,6 +44,17 @@ typedef enum MISSION_BRIEFING { BRIEF_MONEYPENNY } MISSION_BRIEFING; +typedef enum OPTIONS { + PLAYER_OPTION_LOOK = 0, + PLAYER_OPTION_AUTOAIM, + PLAYER_OPTION_AIM, + PLAYER_OPTION_SIGHT, + PLAYER_OPTION_LOOKAHEAD, + PLAYER_OPTION_AMMODISPLAY, + PLAYER_OPTION_SCREEN, + PLAYER_OPTION_RATIO +} OPTIONS; + typedef enum DIFFICULTY { DIFFICULTY_AGENT = 0, DIFFICULTY_SECRET, @@ -1282,7 +1293,7 @@ typedef enum ACT_TYPE { #define CHRFLAG_INIT 0x00000001 // initialize chr #define CHRFLAG_CLONE 0x00000002 // clone on heard gunfire (used by GLIST_DETECT_BOND_SPAWN_CLONE_ON_HEARD_GUNFIRE) -#define CHRFLAG_NEAR_MISS 0x00000004 // chr was just nearly shot (sometimes set on direct hit) +#define CHRFLAG_NEAR_MISS 0x00000004 // chr was just nearly shot (sometimes set on direct hit) - resets every tick #define CHRFLAG_HAS_BEEN_ON_SCREEN 0x00000008 // chr has been on screen before #define CHRFLAG_INVINCIBLE 0x00000010 // invincible #define CHRFLAG_00000020 0x00000020 // unknown @@ -1428,7 +1439,9 @@ typedef enum ACT_TYPE { #define OBJECTTYPE_35 0x35 #define OBJECTTYPE_36 0x36 - +#define CROUCH_SQUAT 0 +#define CROUCH_HALF 1 +#define CROUCH_STAND 2 #endif diff --git a/src/bondgame.h b/src/bondgame.h index f08c3c7..012368b 100644 --- a/src/bondgame.h +++ b/src/bondgame.h @@ -1,9 +1,8 @@ -#ifndef _BOND_H_ -#define _BOND_H_ +#ifndef _BONDGAME_H_ +#define _BONDGAME_H_ #include "ultra64.h" -extern u8 cfb_16_a[]; -extern u8 cfb_16_b[]; +extern u8 cfb_16[2][320*240*2]; extern u32 *_codeSegmentStart; extern u32 *_codeSegmentEnd; diff --git a/src/bondtypes.h b/src/bondtypes.h index bd42b0a..c436fda 100644 --- a/src/bondtypes.h +++ b/src/bondtypes.h @@ -2,6 +2,8 @@ #define _BONDTYPES_H_ #include "ultra64.h" #include "bondconstants.h" +#include "structs.h" + struct rgba_val{ u8 r; u8 g; @@ -46,10 +48,8 @@ typedef struct PropRecord } Entityp; } PropRecord; -typedef struct CHRdata CHRdata, *PCHRdata; - /* unfinished struct, WIP */ -struct CHRdata { +struct chrdata { u16 chrnum; s8 accuracyrating; s8 speedrating; @@ -70,7 +70,7 @@ struct CHRdata { s8 flinchcnt; s16 hidden; s32 chrflags; - void * pad; + struct prop* posdata; void * model; /* 0x0020 */ void * field_20; @@ -154,7 +154,7 @@ struct CHRdata { u8 random; /* 0x0110 */ s32 timer60; - u16 padpreset1; /* ID PAD_PRESET */ + s16 padpreset1; /* ID PAD_PRESET */ u16 chrpreset1; /* ID CHR_PRESET */ u16 chrseeshot; /* ID CHR_SEE_SHOT - ignores invincible/armoured guards */ u16 chrseedie; /* ID CHR_SEE_DIE */ diff --git a/src/boss.c b/src/boss.c index d0f2de9..4c74ddd 100644 --- a/src/boss.c +++ b/src/boss.c @@ -484,7 +484,7 @@ loop_29: if (current_stage_num != 0x5a) { phi_s1_2 = 0; - if (get_num_players() > 0) + if (getPlayerCount() > 0) { loop_44: set_cur_player(sub_GAME_7F09B528(phi_s1_2)); @@ -493,7 +493,7 @@ loop_44: sub_GAME_7F0BF800(); temp_s1 = phi_s1_2 + 1; phi_s1_2 = temp_s1; - if (temp_s1 < get_num_players()) + if (temp_s1 < getPlayerCount()) { goto loop_44; } @@ -1013,7 +1013,7 @@ glabel mainloop /* 0071A8 700065A8 2401005A */ li $at, 90 /* 0071AC 700065AC 13210018 */ beq $t9, $at, .L70006610 /* 0071B0 700065B0 00000000 */ nop -/* 0071B4 700065B4 0FC26919 */ jal get_num_players +/* 0071B4 700065B4 0FC26919 */ jal getPlayerCount /* 0071B8 700065B8 00008825 */ move $s1, $zero /* 0071BC 700065BC 18400014 */ blez $v0, .L70006610 /* 0071C0 700065C0 00000000 */ nop @@ -1032,7 +1032,7 @@ glabel mainloop /* 0071F0 700065F0 860507F6 */ lh $a1, 0x7f6($s0) /* 0071F4 700065F4 0FC2FE00 */ jal sub_GAME_7F0BF800 /* 0071F8 700065F8 00000000 */ nop -/* 0071FC 700065FC 0FC26919 */ jal get_num_players +/* 0071FC 700065FC 0FC26919 */ jal getPlayerCount /* 007200 70006600 26310001 */ addiu $s1, $s1, 1 /* 007204 70006604 0222082A */ slt $at, $s1, $v0 /* 007208 70006608 1420FFEE */ bnez $at, .L700065C4 diff --git a/src/cfb.c b/src/cfb.c index af2fd9e..357d456 100644 --- a/src/cfb.c +++ b/src/cfb.c @@ -1,5 +1,4 @@ #include "ultra64.h" #include "bondgame.h" -u8 cfb_16_a[320*240*2]; -u8 cfb_16_b[320*240*2]; \ No newline at end of file +u8 cfb_16[2][320*240*2]; \ No newline at end of file diff --git a/src/deb_print.c b/src/deb_print.c index a56e586..4a9b493 100644 --- a/src/deb_print.c +++ b/src/deb_print.c @@ -590,7 +590,7 @@ void set_ptr_video_buffers(s32 arg0, s32 arg1) { * calls 70005984: A0=803B5000, A1=803DA800 */ void set_video_buffer_pointers(void) { - set_ptr_video_buffers(&cfb_16_a, &cfb_16_b); + set_ptr_video_buffers(&cfb_16[0], &cfb_16[1]); } diff --git a/src/game/bg.c b/src/game/bg.c index 01f93c4..d089e60 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -1028,7 +1028,7 @@ glabel sub_GAME_7F0B3C8C /* 0E8880 7F0B3D50 56B90049 */ bnel $s5, $t9, .L7F0B3E78 /* 0E8884 7F0B3D54 26730001 */ addiu $s3, $s3, 1 /* 0E8888 7F0B3D58 26100008 */ addiu $s0, $s0, 8 -/* 0E888C 7F0B3D5C 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0E888C 7F0B3D5C 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0E8890 7F0B3D60 AE340000 */ sw $s4, ($s1) /* 0E8894 7F0B3D64 0C003A2C */ jal osVirtualToPhysical /* 0E8898 7F0B3D68 00402025 */ move $a0, $v0 @@ -1081,7 +1081,7 @@ glabel sub_GAME_7F0B3C8C /* 0E8948 7F0B3E18 02008825 */ move $s1, $s0 .L7F0B3E1C: /* 0E894C 7F0B3E1C AE340000 */ sw $s4, ($s1) -/* 0E8950 7F0B3E20 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0E8950 7F0B3E20 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0E8954 7F0B3E24 26100008 */ addiu $s0, $s0, 8 /* 0E8958 7F0B3E28 0C003A2C */ jal osVirtualToPhysical /* 0E895C 7F0B3E2C 00402025 */ move $a0, $v0 @@ -1183,7 +1183,7 @@ glabel sub_GAME_7F0B3C8C /* 0E8ABC 7F0B3F8C 02008825 */ move $s1, $s0 .L7F0B3F90: /* 0E8AC0 7F0B3F90 AE340000 */ sw $s4, ($s1) -/* 0E8AC4 7F0B3F94 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0E8AC4 7F0B3F94 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0E8AC8 7F0B3F98 26100008 */ addiu $s0, $s0, 8 /* 0E8ACC 7F0B3F9C 0C003A2C */ jal osVirtualToPhysical /* 0E8AD0 7F0B3FA0 00402025 */ move $a0, $v0 @@ -1235,32 +1235,25 @@ glabel sub_GAME_7F0B3C8C #ifdef NONMATCHING -s32 sub_GAME_7F0B4034(s32 arg0) { - s32 temp_v1; - void *phi_a0; - s32 phi_v1; - s32 phi_v1_2; +int sub_GAME_7F0B4034(int room) - // Node 0 - phi_v1 = arg0; - if ((ptr_bgdata_room_fileposition_list + (arg0 * 0x18))->unk4 == 0) +{ + bg_room_data *pbVar1; + f32 fVar2; + + if (ptr_bgdata_room_fileposition_list[room].ypos == 0.00000000) + { + fVar2 = (ptr_bgdata_room_fileposition_list[room+1].ypos; + pbVar1 = ptr_bgdata_room_fileposition_list + room; + while( true ) { - // Node 1 - phi_a0 = (ptr_bgdata_room_fileposition_list + (arg0 * 0x18)); - phi_v1_2 = arg0; -loop_2: - // Node 2 - temp_v1 = (phi_v1_2 + 1); - phi_a0 = (phi_a0 + 0x18); - phi_v1 = temp_v1; - phi_v1_2 = temp_v1; - if (phi_a0->unk1C == 0) - { - goto loop_2; - } + room = room + 1; + if (fVar2 != 0.00000000) break; + fVar2 = pbVar1[2].ypos; + pbVar1 = pbVar1 + 1; } - // Node 3 - return phi_v1; + } + return room; } #else GLOBAL_ASM( @@ -1538,7 +1531,7 @@ glabel load_bg_file /* 0E8DFC 7F0B42CC 01F40019 */ multu $t7, $s4 /* 0E8E00 7F0B42D0 0000C012 */ mflo $t8 /* 0E8E04 7F0B42D4 0238C821 */ addu $t9, $s1, $t8 -/* 0E8E08 7F0B42D8 0FC2CA54 */ jal sub_GAME_7F0B2950 +/* 0E8E08 7F0B42D8 0FC2CA54 */ jal setLevelScale /* 0E8E0C 7F0B42DC C72C000C */ lwc1 $f12, 0xc($t9) /* 0E8E10 7F0B42E0 8E480000 */ lw $t0, ($s2) /* 0E8E14 7F0B42E4 01140019 */ multu $t0, $s4 @@ -1562,7 +1555,7 @@ glabel load_bg_file /* 0E8E5C 7F0B432C E6040000 */ swc1 $f4, ($s0) /* 0E8E60 7F0B4330 0FC225DB */ jal sub_GAME_7F08976C /* 0E8E64 7F0B4334 C60C0000 */ lwc1 $f12, ($s0) -/* 0E8E68 7F0B4338 0FC16313 */ jal sub_GAME_7F058C4C +/* 0E8E68 7F0B4338 0FC16313 */ jal matrix_4x4_7F058C4C /* 0E8E6C 7F0B433C C60C0000 */ lwc1 $f12, ($s0) /* 0E8E70 7F0B4340 8EE20000 */ lw $v0, ($s7) /* 0E8E74 7F0B4344 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007BF98) @@ -1900,7 +1893,7 @@ glabel load_bg_file #ifdef NONMATCHING void sub_GAME_7F0B47E0(void) { sub_GAME_7F0B667C(); - sub_GAME_7F058C4C(1.0); + matrix_4x4_7F058C4C(1.0); } #else GLOBAL_ASM( @@ -1912,7 +1905,7 @@ glabel sub_GAME_7F0B47E0 /* 0E931C 7F0B47EC 00000000 */ nop /* 0E9320 7F0B47F0 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0E9324 7F0B47F4 44816000 */ mtc1 $at, $f12 -/* 0E9328 7F0B47F8 0FC16313 */ jal sub_GAME_7F058C4C +/* 0E9328 7F0B47F8 0FC16313 */ jal matrix_4x4_7F058C4C /* 0E932C 7F0B47FC 00000000 */ nop /* 0E9330 7F0B4800 8FBF0014 */ lw $ra, 0x14($sp) /* 0E9334 7F0B4804 27BD0018 */ addiu $sp, $sp, 0x18 @@ -2137,47 +2130,22 @@ def_7F0B490C: +void addToByteSetMaxSize15(u8* set, u8 newElement) { + s32 i = 0; + while (i < 0x10 && set[i] != 0xFF) { + if (newElement == set[i]) { + return; + } + i++; + } -#ifdef NONMATCHING -void sub_GAME_7F0B4A50(void) { - + if (i < 0xF) { + set[i] = newElement; + set[i+1] = -1; + } + return; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B4A50 -/* 0E9580 7F0B4A50 AFA50004 */ sw $a1, 4($sp) -/* 0E9584 7F0B4A54 908E0000 */ lbu $t6, ($a0) -/* 0E9588 7F0B4A58 240800FF */ li $t0, 255 -/* 0E958C 7F0B4A5C 30A600FF */ andi $a2, $a1, 0xff -/* 0E9590 7F0B4A60 110E000C */ beq $t0, $t6, .L7F0B4A94 -/* 0E9594 7F0B4A64 00001025 */ move $v0, $zero -/* 0E9598 7F0B4A68 00801821 */ addu $v1, $a0, $zero -/* 0E959C 7F0B4A6C 90850000 */ lbu $a1, ($a0) -/* 0E95A0 7F0B4A70 00C03825 */ move $a3, $a2 -.L7F0B4A74: -/* 0E95A4 7F0B4A74 10E5000D */ beq $a3, $a1, .L7F0B4AAC -/* 0E95A8 7F0B4A78 24420001 */ addiu $v0, $v0, 1 -/* 0E95AC 7F0B4A7C 28410010 */ slti $at, $v0, 0x10 -/* 0E95B0 7F0B4A80 10200004 */ beqz $at, .L7F0B4A94 -/* 0E95B4 7F0B4A84 24630001 */ addiu $v1, $v1, 1 -/* 0E95B8 7F0B4A88 90650000 */ lbu $a1, ($v1) -/* 0E95BC 7F0B4A8C 1505FFF9 */ bne $t0, $a1, .L7F0B4A74 -/* 0E95C0 7F0B4A90 00000000 */ nop -.L7F0B4A94: -/* 0E95C4 7F0B4A94 2841000F */ slti $at, $v0, 0xf -/* 0E95C8 7F0B4A98 10200004 */ beqz $at, .L7F0B4AAC -/* 0E95CC 7F0B4A9C 00821821 */ addu $v1, $a0, $v0 -/* 0E95D0 7F0B4AA0 240F00FF */ li $t7, 255 -/* 0E95D4 7F0B4AA4 A0660000 */ sb $a2, ($v1) -/* 0E95D8 7F0B4AA8 A06F0001 */ sb $t7, 1($v1) -.L7F0B4AAC: -/* 0E95DC 7F0B4AAC 03E00008 */ jr $ra -/* 0E95E0 7F0B4AB0 00000000 */ nop -) -#endif - @@ -2297,12 +2265,12 @@ glabel sub_GAME_7F0B4AB4 /* 0E975C 7F0B4C2C 02602025 */ move $a0, $s3 /* 0E9760 7F0B4C30 156C000C */ bne $t3, $t4, .L7F0B4C64 /* 0E9764 7F0B4C34 00000000 */ nop -/* 0E9768 7F0B4C38 0FC2D294 */ jal sub_GAME_7F0B4A50 +/* 0E9768 7F0B4C38 0FC2D294 */ jal addToByteSetMaxSize15 /* 0E976C 7F0B4C3C 90650005 */ lbu $a1, 5($v1) /* 0E9770 7F0B4C40 8EAD0000 */ lw $t5, ($s5) /* 0E9774 7F0B4C44 02802025 */ move $a0, $s4 /* 0E9778 7F0B4C48 01B27021 */ addu $t6, $t5, $s2 -/* 0E977C 7F0B4C4C 0FC2D294 */ jal sub_GAME_7F0B4A50 +/* 0E977C 7F0B4C4C 0FC2D294 */ jal addToByteSetMaxSize15 /* 0E9780 7F0B4C50 91C50005 */ lbu $a1, 5($t6) /* 0E9784 7F0B4C54 8EA80000 */ lw $t0, ($s5) /* 0E9788 7F0B4C58 A2200000 */ sb $zero, ($s1) @@ -2316,12 +2284,12 @@ glabel sub_GAME_7F0B4AB4 /* 0E97A4 7F0B4C74 02602025 */ move $a0, $s3 /* 0E97A8 7F0B4C78 55F8000C */ bnel $t7, $t8, .L7F0B4CAC /* 0E97AC 7F0B4C7C 920A0001 */ lbu $t2, 1($s0) -/* 0E97B0 7F0B4C80 0FC2D294 */ jal sub_GAME_7F0B4A50 +/* 0E97B0 7F0B4C80 0FC2D294 */ jal addToByteSetMaxSize15 /* 0E97B4 7F0B4C84 90650004 */ lbu $a1, 4($v1) /* 0E97B8 7F0B4C88 8EB90000 */ lw $t9, ($s5) /* 0E97BC 7F0B4C8C 02802025 */ move $a0, $s4 /* 0E97C0 7F0B4C90 03324821 */ addu $t1, $t9, $s2 -/* 0E97C4 7F0B4C94 0FC2D294 */ jal sub_GAME_7F0B4A50 +/* 0E97C4 7F0B4C94 0FC2D294 */ jal addToByteSetMaxSize15 /* 0E97C8 7F0B4C98 91250004 */ lbu $a1, 4($t1) /* 0E97CC 7F0B4C9C 8EA80000 */ lw $t0, ($s5) /* 0E97D0 7F0B4CA0 A2200000 */ sb $zero, ($s1) @@ -2576,8 +2544,8 @@ glabel sub_GAME_7F0B4E40 /* 0E9A9C 7F0B4F6C 35080040 */ ori $t0, (0x01030040 & 0xFFFF) # ori $t0, $t0, 0x40 /* 0E9AA0 7F0B4F70 00801025 */ move $v0, $a0 /* 0E9AA4 7F0B4F74 AC480000 */ sw $t0, ($v0) -/* 0E9AA8 7F0B4F78 3C098006 */ lui $t1, %hi(m) -/* 0E9AAC 7F0B4F7C 8D290820 */ lw $t1, %lo(m)($t1) +/* 0E9AA8 7F0B4F78 3C098006 */ lui $t1, %hi(projectionMatrix) +/* 0E9AAC 7F0B4F7C 8D290820 */ lw $t1, %lo(projectionMatrix)($t1) /* 0E9AB0 7F0B4F80 24840008 */ addiu $a0, $a0, 8 /* 0E9AB4 7F0B4F84 0FC22F3D */ jal sub_GAME_7F08BCF4 /* 0E9AB8 7F0B4F88 AC490004 */ sw $t1, 4($v0) @@ -2593,7 +2561,7 @@ glabel sub_GAME_7F0B4E40 #ifdef NONMATCHING -void sub_GAME_7F0B4F9C(s32 arg0) { +s32 sub_GAME_7F0B4F9C(u8 arg0) { return (dword_CODE_bss_8007FF94 + (arg0 * 4))->unk4; } #else @@ -3287,7 +3255,7 @@ void sub_GAME_7F0B5488(void *arg0, void *arg1) { *arg1 = (f32) (*arg0 * room_data_float2); arg1->unk4 = (f32) (arg0->unk4 * room_data_float2); arg1->unk8 = (f32) (arg0->unk8 * room_data_float2); - matrix_4x4_transform_vector_in_place(get_BONDdata_field_10CC(), arg1, arg0); + matrix_4x4_transform_vector_in_place(currentPlayerGetMatrix10CC(), arg1, arg0); sub_GAME_7F078060(arg1, arg1); if (0.0f < arg1->unk8) { @@ -3304,7 +3272,7 @@ glabel sub_GAME_7F0B5488 /* 0E9FBC 7F0B548C AFBF001C */ sw $ra, 0x1c($sp) /* 0E9FC0 7F0B5490 AFB00018 */ sw $s0, 0x18($sp) /* 0E9FC4 7F0B5494 00A08025 */ move $s0, $a1 -/* 0E9FC8 7F0B5498 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0E9FC8 7F0B5498 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0E9FCC 7F0B549C AFA40020 */ sw $a0, 0x20($sp) /* 0E9FD0 7F0B54A0 8FA60020 */ lw $a2, 0x20($sp) /* 0E9FD4 7F0B54A4 3C038004 */ lui $v1, %hi(room_data_float2) @@ -3375,7 +3343,7 @@ glabel sub_GAME_7F0B5528 /* 0EA08C 7F0B555C AFB00030 */ sw $s0, 0x30($sp) /* 0EA090 7F0B5560 F7B80028 */ sdc1 $f24, 0x28($sp) /* 0EA094 7F0B5564 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0EA098 7F0B5568 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0EA098 7F0B5568 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0EA09C 7F0B556C AFA400B0 */ sw $a0, 0xb0($sp) /* 0EA0A0 7F0B5570 AFA200AC */ sw $v0, 0xac($sp) /* 0EA0A4 7F0B5574 241E0001 */ li $fp, 1 @@ -9794,7 +9762,7 @@ f32 sub_GAME_7F0B908C(void) { sp24 = (f32) D_80041404.unk4; sp28 = (f32) ((f32) D_8004140C + (f32) get_video2_settings_txtClipW()); sp20 = (f32) ((f32) D_80041410 + (f32) get_video2_settings_txtClipH()); - pPlayer->unk1118 = (f32) get_video2_settings_ulx(); + pPlayer->unk1118 = (f32) viGetViewLeft(); if (pPlayer->unk1118 < sp2C) { // Node 1 @@ -9807,7 +9775,7 @@ f32 sub_GAME_7F0B908C(void) { pPlayer->unk1118 = sp28; } // Node 4 - pPlayer->unk111C = (f32) get_video2_settings_uly(sp28, &pPlayer); + pPlayer->unk111C = (f32) viGetViewTop(sp28, &pPlayer); if (pPlayer->unk111C < sp24) { // Node 5 @@ -9820,8 +9788,8 @@ f32 sub_GAME_7F0B908C(void) { pPlayer->unk111C = sp20; } // Node 8 - sp1E = get_video2_settings_ulx(sp20, &pPlayer); - pPlayer->unk1120 = (f32) (get_video2_settings_width() + sp1E); + sp1E = viGetViewLeft(sp20, &pPlayer); + pPlayer->unk1120 = (f32) (viGetViewWidth() + sp1E); if (pPlayer->unk1120 < sp2C) { // Node 9 @@ -9834,8 +9802,8 @@ f32 sub_GAME_7F0B908C(void) { pPlayer->unk1120 = sp28; } // Node 12 - sp1E = get_video2_settings_uly(&pPlayer); - pPlayer->unk1124 = (f32) (get_video2_settings_height() + sp1E); + sp1E = viGetViewTop(&pPlayer); + pPlayer->unk1124 = (f32) (viGetViewHeight() + sp1E); if (pPlayer->unk1124 < sp24) { // Node 13 @@ -9883,7 +9851,7 @@ glabel sub_GAME_7F0B908C /* 0EDC24 7F0B90F4 468024A0 */ cvt.s.w $f18, $f4 /* 0EDC28 7F0B90F8 46805420 */ cvt.s.w $f16, $f10 /* 0EDC2C 7F0B90FC 46128180 */ add.s $f6, $f16, $f18 -/* 0EDC30 7F0B9100 0C001145 */ jal get_video2_settings_ulx +/* 0EDC30 7F0B9100 0C001145 */ jal viGetViewLeft /* 0EDC34 7F0B9104 E7A60020 */ swc1 $f6, 0x20($sp) /* 0EDC38 7F0B9108 44824000 */ mtc1 $v0, $f8 /* 0EDC3C 7F0B910C 3C048008 */ lui $a0, %hi(pPlayer) @@ -9909,7 +9877,7 @@ glabel sub_GAME_7F0B908C /* 0EDC88 7F0B9158 00000000 */ nop /* 0EDC8C 7F0B915C E46C1118 */ swc1 $f12, 0x1118($v1) .L7F0B9160: -/* 0EDC90 7F0B9160 0C001149 */ jal get_video2_settings_uly +/* 0EDC90 7F0B9160 0C001149 */ jal viGetViewTop /* 0EDC94 7F0B9164 00000000 */ nop /* 0EDC98 7F0B9168 44822000 */ mtc1 $v0, $f4 /* 0EDC9C 7F0B916C 3C048008 */ lui $a0, %hi(pPlayer) @@ -9935,9 +9903,9 @@ glabel sub_GAME_7F0B908C /* 0EDCE8 7F0B91B8 00000000 */ nop /* 0EDCEC 7F0B91BC E46C111C */ swc1 $f12, 0x111c($v1) .L7F0B91C0: -/* 0EDCF0 7F0B91C0 0C001145 */ jal get_video2_settings_ulx +/* 0EDCF0 7F0B91C0 0C001145 */ jal viGetViewLeft /* 0EDCF4 7F0B91C4 00000000 */ nop -/* 0EDCF8 7F0B91C8 0C001127 */ jal get_video2_settings_width +/* 0EDCF8 7F0B91C8 0C001127 */ jal viGetViewWidth /* 0EDCFC 7F0B91CC A7A2001E */ sh $v0, 0x1e($sp) /* 0EDD00 7F0B91D0 87AA001E */ lh $t2, 0x1e($sp) /* 0EDD04 7F0B91D4 3C048008 */ lui $a0, %hi(pPlayer) @@ -9965,9 +9933,9 @@ glabel sub_GAME_7F0B908C /* 0EDD58 7F0B9228 00000000 */ nop /* 0EDD5C 7F0B922C E46A1120 */ swc1 $f10, 0x1120($v1) .L7F0B9230: -/* 0EDD60 7F0B9230 0C001149 */ jal get_video2_settings_uly +/* 0EDD60 7F0B9230 0C001149 */ jal viGetViewTop /* 0EDD64 7F0B9234 00000000 */ nop -/* 0EDD68 7F0B9238 0C00112B */ jal get_video2_settings_height +/* 0EDD68 7F0B9238 0C00112B */ jal viGetViewHeight /* 0EDD6C 7F0B923C A7A2001E */ sh $v0, 0x1e($sp) /* 0EDD70 7F0B9240 87AD001E */ lh $t5, 0x1e($sp) /* 0EDD74 7F0B9244 3C048008 */ lui $a0, %hi(pPlayer) diff --git a/src/game/bg.h b/src/game/bg.h index d2d2bde..9f8f219 100644 --- a/src/game/bg.h +++ b/src/game/bg.h @@ -42,4 +42,7 @@ typedef struct s_room_info { void bgInitDebugNoticeList(void); +s32 sub_GAME_7F0B8FD0(u8 roomA, u8 roomB); +s32 sub_GAME_7F0B4F9C(u8 room); // u8 not s32 for sub_GAME_7F0B2FE0 + #endif diff --git a/src/game/blood_animation.c b/src/game/blood_animation.c index fa85bfa..946d7d6 100644 --- a/src/game/blood_animation.c +++ b/src/game/blood_animation.c @@ -737,15 +737,15 @@ glabel sub_GAME_7F01C670 /* 051384 7F01C854 AC6F0004 */ sw $t7, 4($v1) /* 051388 7F01C858 26100008 */ addiu $s0, $s0, 8 /* 05138C 7F01C85C AFB00040 */ sw $s0, 0x40($sp) -/* 051390 7F01C860 0C001127 */ jal get_video2_settings_width +/* 051390 7F01C860 0C001127 */ jal viGetViewWidth /* 051394 7F01C864 26100008 */ addiu $s0, $s0, 8 -/* 051398 7F01C868 0C001145 */ jal get_video2_settings_ulx +/* 051398 7F01C868 0C001145 */ jal viGetViewLeft /* 05139C 7F01C86C A7A20026 */ sh $v0, 0x26($sp) -/* 0513A0 7F01C870 0C001149 */ jal get_video2_settings_uly +/* 0513A0 7F01C870 0C001149 */ jal viGetViewTop /* 0513A4 7F01C874 A7A20028 */ sh $v0, 0x28($sp) /* 0513A8 7F01C878 00028C00 */ sll $s1, $v0, 0x10 /* 0513AC 7F01C87C 0011C403 */ sra $t8, $s1, 0x10 -/* 0513B0 7F01C880 0C00112B */ jal get_video2_settings_height +/* 0513B0 7F01C880 0C00112B */ jal viGetViewHeight /* 0513B4 7F01C884 03008825 */ move $s1, $t8 /* 0513B8 7F01C888 87B90028 */ lh $t9, 0x28($sp) /* 0513BC 7F01C88C 87A80026 */ lh $t0, 0x26($sp) @@ -762,11 +762,11 @@ glabel sub_GAME_7F01C670 /* 0513E8 7F01C8B8 03214025 */ or $t0, $t9, $at /* 0513EC 7F01C8BC 000C6B00 */ sll $t5, $t4, 0xc /* 0513F0 7F01C8C0 010D4825 */ or $t1, $t0, $t5 -/* 0513F4 7F01C8C4 0C001145 */ jal get_video2_settings_ulx +/* 0513F4 7F01C8C4 0C001145 */ jal viGetViewLeft /* 0513F8 7F01C8C8 AD490000 */ sw $t1, ($t2) /* 0513FC 7F01C8CC 00028C00 */ sll $s1, $v0, 0x10 /* 051400 7F01C8D0 00115C03 */ sra $t3, $s1, 0x10 -/* 051404 7F01C8D4 0C001149 */ jal get_video2_settings_uly +/* 051404 7F01C8D4 0C001149 */ jal viGetViewTop /* 051408 7F01C8D8 01608825 */ move $s1, $t3 /* 05140C 7F01C8DC 00117880 */ sll $t7, $s1, 2 /* 051410 7F01C8E0 8FAD0040 */ lw $t5, 0x40($sp) @@ -785,11 +785,11 @@ glabel sub_GAME_7F01C670 /* 051444 7F01C914 3C0AB300 */ lui $t2, 0xb300 /* 051448 7F01C918 AC8A0000 */ sw $t2, ($a0) /* 05144C 7F01C91C AFA40038 */ sw $a0, 0x38($sp) -/* 051450 7F01C920 0C001127 */ jal get_video2_settings_width +/* 051450 7F01C920 0C001127 */ jal viGetViewWidth /* 051454 7F01C924 26100008 */ addiu $s0, $s0, 8 /* 051458 7F01C928 00028C00 */ sll $s1, $v0, 0x10 /* 05145C 7F01C92C 00115C03 */ sra $t3, $s1, 0x10 -/* 051460 7F01C930 0C00112B */ jal get_video2_settings_height +/* 051460 7F01C930 0C00112B */ jal viGetViewHeight /* 051464 7F01C934 01608825 */ move $s1, $t3 /* 051468 7F01C938 3C0C0001 */ lui $t4, (0x00014000 >> 16) # lui $t4, 1 /* 05146C 7F01C93C 358C4000 */ ori $t4, (0x00014000 & 0xFFFF) # ori $t4, $t4, 0x4000 diff --git a/src/game/bond.c b/src/game/bond.c index f96494f..4f47b04 100644 --- a/src/game/bond.c +++ b/src/game/bond.c @@ -8,37 +8,13 @@ #include "game/bondwalk.h" // bss -//CODE.bss:80079940 -f32 flt_CODE_bss_80079940; -//CODE.bss:80079944 -f32 flt_CODE_bss_80079944; -//CODE.bss:80079948 -f32 flt_CODE_bss_80079948; -//CODE.bss:8007994C +struct coord flt_CODE_bss_80079940; f32 flt_CODE_bss_8007994C; -//CODE.bss:80079950 -f32 flt_CODE_bss_80079950; -//CODE.bss:80079954 -f32 flt_CODE_bss_80079954; -//CODE.bss:80079958 -f32 flt_CODE_bss_80079958; -//CODE.bss:8007995C +struct coord flt_CODE_bss_80079950; f32 flt_CODE_bss_8007995C; -//CODE.bss:80079960 -f32 flt_CODE_bss_80079960; -//CODE.bss:80079964 -f32 flt_CODE_bss_80079964; -//CODE.bss:80079968 -f32 flt_CODE_bss_80079968; -//CODE.bss:8007996C +struct coord flt_CODE_bss_80079960; f32 flt_CODE_bss_8007996C; -//CODE.bss:80079970 -f32 flt_CODE_bss_80079970; -//CODE.bss:80079974 -f32 flt_CODE_bss_80079974; -//CODE.bss:80079978 -f32 flt_CODE_bss_80079978; -//CODE.bss:8007997C +struct coord flt_CODE_bss_80079970; f32 flt_CODE_bss_8007997C; //CODE.bss:80079980 f32 flt_CODE_bss_80079980; @@ -481,693 +457,142 @@ void nullsub_75(void) return; } -void set_BONDdata_screensize(f32 width, f32 height) +void currentPlayerSetScreenSize(f32 width, f32 height) { pPlayer->c_screenwidth = width; pPlayer->c_screenheight = height; - pPlayer->c_halfwidth = (f32) (width * 0.5f); - pPlayer->c_halfheight = (f32) (height * 0.5f); + pPlayer->c_halfwidth = width * 0.5f; + pPlayer->c_halfheight = height * 0.5f; } -void *set_ulx_uly(f32 ulx, f32 uly) +void currentPlayerSetScreenPosition(f32 left, f32 top) { - pPlayer->c_screenleft = ulx; - pPlayer->c_screentop = uly; + pPlayer->c_screenleft = left; + pPlayer->c_screentop = top; } -void sub_GAME_7F077C30(f32 arg0, f32 arg1, f32 arg2) +void currentPlayerSetPerspective(f32 near, f32 fovy, f32 aspect) { - pPlayer->c_perspnear = arg0; - pPlayer->c_perspfovy = arg1; - pPlayer->c_perspaspect = arg2; + pPlayer->c_perspnear = near; + pPlayer->c_perspfovy = fovy; + pPlayer->c_perspaspect = aspect; } - - - - - -#ifdef NONMATCHING -void sub_GAME_7F077C5C(void) +#define DEG2RAD(x) ((x * 3.1415927f) / 360.0f) +float sinf(float); +float cosf(float); +void currentPlayerSetCameraScale(void) { - f32 sp34; - f32 sp30; - f32 sp2C; - f32 temp_f14; - f32 temp_f16; - f32 temp_f2; - f32 temp_f2_2; - f32 temp_f2_3; + f32 fVar4; + f32 tmp; + f32 fVar5; + f32 fVar2; - sp2C = sinf((pPlayer->c_perspfovy * D_80054FA0) / 360.0f); - pPlayer->c_scaley = (f32) (sp2C / (cosf((pPlayer->c_perspfovy * D_80054FA0) / 360.0f) * pPlayer->c_halfheight)); - pPlayer->c_scalex = (f32) (((pPlayer->c_scaley * pPlayer->c_perspaspect) * pPlayer->c_halfheight) / pPlayer->c_halfwidth); - pPlayer->c_recipscalex = (f32) (1.0f / pPlayer->c_scalex); - pPlayer->c_recipscaley = (f32) (1.0f / pPlayer->c_scaley); - pPlayer->c_scalelod = (f32) pPlayer->c_scaley; - sp2C = sinf(D_80054FA4); - pPlayer->c_scalelod60 = (f32) (sp2C / (cosf(D_80054FA8) * 120.0f)); - pPlayer->c_lodscalez = (f32) (pPlayer->c_scalelod / pPlayer->c_scalelod60); - temp_f2 = pPlayer->c_lodscalez * 65536.0f; - if (4294967296.0f < temp_f2) - { - pPlayer->c_lodscalezu32 = -1U; - } - else - { - pPlayer->c_lodscalezu32 = (u32) temp_f2; - } - temp_f14 = pPlayer->c_halfheight * pPlayer->c_scaley; - sp30 = temp_f14; - temp_f2_2 = 1.0f / sqrtf((temp_f14 * temp_f14) + 1.0f, temp_f14); - (pPlayer->c_cameratopnorm).x = 0.0f; - (pPlayer->c_cameratopnorm).y = temp_f2_2; - (pPlayer->c_cameratopnorm).z = (f32) (temp_f14 * temp_f2_2); - temp_f16 = -pPlayer->c_halfwidth * pPlayer->c_scalex; - sp34 = temp_f16; - temp_f2_3 = 1.0f / sqrtf((temp_f16 * temp_f16) + 1.0f, temp_f14); - (pPlayer->c_cameraleftnorm).x = (f32) -temp_f2_3; - (pPlayer->c_cameraleftnorm).y = 0.0f; - (pPlayer->c_cameraleftnorm).z = (f32) (-temp_f16 * temp_f2_3); + pPlayer->c_scaley = sinf(DEG2RAD(pPlayer->c_perspfovy)) / (cosf(DEG2RAD(pPlayer->c_perspfovy)) * pPlayer->c_halfheight); + pPlayer->c_scalex = (pPlayer->c_scaley * pPlayer->c_perspaspect * pPlayer->c_halfheight) / pPlayer->c_halfwidth; + + pPlayer->c_recipscalex = 1.0f / pPlayer->c_scalex; + pPlayer->c_recipscaley = 1.0f / pPlayer->c_scaley; + + pPlayer->c_scalelod = pPlayer->c_scaley; + pPlayer->c_scalelod60 = sinf(0.52359879f/*DEG2RAD(30)*/) / (cosf(0.52359879f/*DEG2RAD(30)*/) * 120.0f); + pPlayer->c_lodscalez = pPlayer->c_scalelod / pPlayer->c_scalelod60; + tmp = (pPlayer->c_lodscalez * 65536.0f); + + if (tmp > 4294967296.0f) { + pPlayer->c_lodscalezu32 = -1; + } else { + pPlayer->c_lodscalezu32 = tmp; + } + + fVar2 = pPlayer->c_halfheight * pPlayer->c_scaley; + fVar4 = 1.0f / sqrtf(fVar2 * fVar2 + 1.0f); + pPlayer->c_cameratopnorm.x = 0; + pPlayer->c_cameratopnorm.y = fVar4; + pPlayer->c_cameratopnorm.z = fVar2 * fVar4; + + fVar5 = -pPlayer->c_halfwidth * pPlayer->c_scalex; + fVar4 = 1.0f / sqrtf(fVar5 * fVar5 + 1.0f); + pPlayer->c_cameraleftnorm.x = -fVar4; + pPlayer->c_cameraleftnorm.y = 0; + pPlayer->c_cameraleftnorm.z = -fVar5 * fVar4; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054FA0 -.word 0x40490fdb /*3.1415927*/ -glabel D_80054FA4 -.word 0x3f060a92 /*0.52359879*/ -glabel D_80054FA8 -.word 0x3f060a92 /*0.52359879*/ -.text -glabel sub_GAME_7F077C5C -/* 0AC78C 7F077C5C 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0AC790 7F077C60 AFB00020 */ sw $s0, 0x20($sp) -/* 0AC794 7F077C64 3C108008 */ lui $s0, %hi(pPlayer) -/* 0AC798 7F077C68 2610A0B0 */ addiu $s0, %lo(pPlayer) # addiu $s0, $s0, -0x5f50 -/* 0AC79C 7F077C6C 8E0E0000 */ lw $t6, ($s0) -/* 0AC7A0 7F077C70 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0AC7A4 7F077C74 AFBF0024 */ sw $ra, 0x24($sp) -/* 0AC7A8 7F077C78 3C018005 */ lui $at, %hi(D_80054FA0) -/* 0AC7AC 7F077C7C C4344FA0 */ lwc1 $f20, %lo(D_80054FA0)($at) -/* 0AC7B0 7F077C80 C5C410A4 */ lwc1 $f4, 0x10a4($t6) -/* 0AC7B4 7F077C84 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0AC7B8 7F077C88 44814000 */ mtc1 $at, $f8 -/* 0AC7BC 7F077C8C 46142182 */ mul.s $f6, $f4, $f20 -/* 0AC7C0 7F077C90 0FC15FAB */ jal sinf -/* 0AC7C4 7F077C94 46083303 */ div.s $f12, $f6, $f8 -/* 0AC7C8 7F077C98 8E0F0000 */ lw $t7, ($s0) -/* 0AC7CC 7F077C9C E7A0002C */ swc1 $f0, 0x2c($sp) -/* 0AC7D0 7F077CA0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0AC7D4 7F077CA4 C5EA10A4 */ lwc1 $f10, 0x10a4($t7) -/* 0AC7D8 7F077CA8 44812000 */ mtc1 $at, $f4 -/* 0AC7DC 7F077CAC 46145482 */ mul.s $f18, $f10, $f20 -/* 0AC7E0 7F077CB0 0FC15FA8 */ jal cosf -/* 0AC7E4 7F077CB4 46049303 */ div.s $f12, $f18, $f4 -/* 0AC7E8 7F077CB8 8E020000 */ lw $v0, ($s0) -/* 0AC7EC 7F077CBC C7A6002C */ lwc1 $f6, 0x2c($sp) -/* 0AC7F0 7F077CC0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AC7F4 7F077CC4 C44810B0 */ lwc1 $f8, 0x10b0($v0) -/* 0AC7F8 7F077CC8 4481A000 */ mtc1 $at, $f20 -/* 0AC7FC 7F077CCC 3C018005 */ lui $at, %hi(D_80054FA4) -/* 0AC800 7F077CD0 46080282 */ mul.s $f10, $f0, $f8 -/* 0AC804 7F077CD4 460A3483 */ div.s $f18, $f6, $f10 -/* 0AC808 7F077CD8 E45210B8 */ swc1 $f18, 0x10b8($v0) -/* 0AC80C 7F077CDC 8E020000 */ lw $v0, ($s0) -/* 0AC810 7F077CE0 C44410B8 */ lwc1 $f4, 0x10b8($v0) -/* 0AC814 7F077CE4 C44810A8 */ lwc1 $f8, 0x10a8($v0) -/* 0AC818 7F077CE8 C44A10B0 */ lwc1 $f10, 0x10b0($v0) -/* 0AC81C 7F077CEC 46082182 */ mul.s $f6, $f4, $f8 -/* 0AC820 7F077CF0 C44410AC */ lwc1 $f4, 0x10ac($v0) -/* 0AC824 7F077CF4 460A3482 */ mul.s $f18, $f6, $f10 -/* 0AC828 7F077CF8 46049203 */ div.s $f8, $f18, $f4 -/* 0AC82C 7F077CFC E44810B4 */ swc1 $f8, 0x10b4($v0) -/* 0AC830 7F077D00 8E020000 */ lw $v0, ($s0) -/* 0AC834 7F077D04 C44610B4 */ lwc1 $f6, 0x10b4($v0) -/* 0AC838 7F077D08 4606A283 */ div.s $f10, $f20, $f6 -/* 0AC83C 7F077D0C E44A10BC */ swc1 $f10, 0x10bc($v0) -/* 0AC840 7F077D10 8E020000 */ lw $v0, ($s0) -/* 0AC844 7F077D14 C45210B8 */ lwc1 $f18, 0x10b8($v0) -/* 0AC848 7F077D18 4612A103 */ div.s $f4, $f20, $f18 -/* 0AC84C 7F077D1C E44410C0 */ swc1 $f4, 0x10c0($v0) -/* 0AC850 7F077D20 8E020000 */ lw $v0, ($s0) -/* 0AC854 7F077D24 C44810B8 */ lwc1 $f8, 0x10b8($v0) -/* 0AC858 7F077D28 E44810F4 */ swc1 $f8, 0x10f4($v0) -/* 0AC85C 7F077D2C 0FC15FAB */ jal sinf -/* 0AC860 7F077D30 C42C4FA4 */ lwc1 $f12, %lo(D_80054FA4)($at) -/* 0AC864 7F077D34 3C018005 */ lui $at, %hi(D_80054FA8) -/* 0AC868 7F077D38 C42C4FA8 */ lwc1 $f12, %lo(D_80054FA8)($at) -/* 0AC86C 7F077D3C 0FC15FA8 */ jal cosf -/* 0AC870 7F077D40 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 0AC874 7F077D44 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 0AC878 7F077D48 44815000 */ mtc1 $at, $f10 -/* 0AC87C 7F077D4C C7A6002C */ lwc1 $f6, 0x2c($sp) -/* 0AC880 7F077D50 8E180000 */ lw $t8, ($s0) -/* 0AC884 7F077D54 460A0482 */ mul.s $f18, $f0, $f10 -/* 0AC888 7F077D58 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0AC88C 7F077D5C 2419FFFF */ li $t9, -1 -/* 0AC890 7F077D60 24090001 */ li $t1, 1 -/* 0AC894 7F077D64 46123103 */ div.s $f4, $f6, $f18 -/* 0AC898 7F077D68 E70410F0 */ swc1 $f4, 0x10f0($t8) -/* 0AC89C 7F077D6C 8E020000 */ lw $v0, ($s0) -/* 0AC8A0 7F077D70 44812000 */ mtc1 $at, $f4 -/* 0AC8A4 7F077D74 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0AC8A8 7F077D78 C44810F4 */ lwc1 $f8, 0x10f4($v0) -/* 0AC8AC 7F077D7C C44A10F0 */ lwc1 $f10, 0x10f0($v0) -/* 0AC8B0 7F077D80 460A4183 */ div.s $f6, $f8, $f10 -/* 0AC8B4 7F077D84 44814000 */ mtc1 $at, $f8 -/* 0AC8B8 7F077D88 E44610F8 */ swc1 $f6, 0x10f8($v0) -/* 0AC8BC 7F077D8C 8E020000 */ lw $v0, ($s0) -/* 0AC8C0 7F077D90 C45210F8 */ lwc1 $f18, 0x10f8($v0) -/* 0AC8C4 7F077D94 46049082 */ mul.s $f2, $f18, $f4 -/* 0AC8C8 7F077D98 4602403C */ c.lt.s $f8, $f2 -/* 0AC8CC 7F077D9C 00000000 */ nop -/* 0AC8D0 7F077DA0 45020004 */ bc1fl .L7F077DB4 -/* 0AC8D4 7F077DA4 4448F800 */ cfc1 $t0, $31 -/* 0AC8D8 7F077DA8 10000022 */ b .L7F077E34 -/* 0AC8DC 7F077DAC AC5910FC */ sw $t9, 0x10fc($v0) -/* 0AC8E0 7F077DB0 4448F800 */ cfc1 $t0, $31 -.L7F077DB4: -/* 0AC8E4 7F077DB4 44C9F800 */ ctc1 $t1, $31 -/* 0AC8E8 7F077DB8 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0AC8EC 7F077DBC 460012A4 */ cvt.w.s $f10, $f2 -/* 0AC8F0 7F077DC0 4449F800 */ cfc1 $t1, $31 -/* 0AC8F4 7F077DC4 00000000 */ nop -/* 0AC8F8 7F077DC8 31290078 */ andi $t1, $t1, 0x78 -/* 0AC8FC 7F077DCC 51200013 */ beql $t1, $zero, .L7F077E1C -/* 0AC900 7F077DD0 44095000 */ mfc1 $t1, $f10 -/* 0AC904 7F077DD4 44815000 */ mtc1 $at, $f10 -/* 0AC908 7F077DD8 24090001 */ li $t1, 1 -/* 0AC90C 7F077DDC 460A1281 */ sub.s $f10, $f2, $f10 -/* 0AC910 7F077DE0 44C9F800 */ ctc1 $t1, $31 -/* 0AC914 7F077DE4 00000000 */ nop -/* 0AC918 7F077DE8 460052A4 */ cvt.w.s $f10, $f10 -/* 0AC91C 7F077DEC 4449F800 */ cfc1 $t1, $31 -/* 0AC920 7F077DF0 00000000 */ nop -/* 0AC924 7F077DF4 31290078 */ andi $t1, $t1, 0x78 -/* 0AC928 7F077DF8 15200005 */ bnez $t1, .L7F077E10 -/* 0AC92C 7F077DFC 00000000 */ nop -/* 0AC930 7F077E00 44095000 */ mfc1 $t1, $f10 -/* 0AC934 7F077E04 3C018000 */ lui $at, 0x8000 -/* 0AC938 7F077E08 10000007 */ b .L7F077E28 -/* 0AC93C 7F077E0C 01214825 */ or $t1, $t1, $at -.L7F077E10: -/* 0AC940 7F077E10 10000005 */ b .L7F077E28 -/* 0AC944 7F077E14 2409FFFF */ li $t1, -1 -/* 0AC948 7F077E18 44095000 */ mfc1 $t1, $f10 -.L7F077E1C: -/* 0AC94C 7F077E1C 00000000 */ nop -/* 0AC950 7F077E20 0520FFFB */ bltz $t1, .L7F077E10 -/* 0AC954 7F077E24 00000000 */ nop -.L7F077E28: -/* 0AC958 7F077E28 44C8F800 */ ctc1 $t0, $31 -/* 0AC95C 7F077E2C AC4910FC */ sw $t1, 0x10fc($v0) -/* 0AC960 7F077E30 00000000 */ nop -.L7F077E34: -/* 0AC964 7F077E34 8E020000 */ lw $v0, ($s0) -/* 0AC968 7F077E38 C44610B0 */ lwc1 $f6, 0x10b0($v0) -/* 0AC96C 7F077E3C C45210B8 */ lwc1 $f18, 0x10b8($v0) -/* 0AC970 7F077E40 46123382 */ mul.s $f14, $f6, $f18 -/* 0AC974 7F077E44 00000000 */ nop -/* 0AC978 7F077E48 460E7102 */ mul.s $f4, $f14, $f14 -/* 0AC97C 7F077E4C E7AE0030 */ swc1 $f14, 0x30($sp) -/* 0AC980 7F077E50 0C007DF8 */ jal sqrtf -/* 0AC984 7F077E54 46142300 */ add.s $f12, $f4, $f20 -/* 0AC988 7F077E58 4600A083 */ div.s $f2, $f20, $f0 -/* 0AC98C 7F077E5C 44804000 */ mtc1 $zero, $f8 -/* 0AC990 7F077E60 8E0A0000 */ lw $t2, ($s0) -/* 0AC994 7F077E64 C7AE0030 */ lwc1 $f14, 0x30($sp) -/* 0AC998 7F077E68 E5481100 */ swc1 $f8, 0x1100($t2) -/* 0AC99C 7F077E6C 8E0B0000 */ lw $t3, ($s0) -/* 0AC9A0 7F077E70 46027282 */ mul.s $f10, $f14, $f2 -/* 0AC9A4 7F077E74 E5621104 */ swc1 $f2, 0x1104($t3) -/* 0AC9A8 7F077E78 8E0C0000 */ lw $t4, ($s0) -/* 0AC9AC 7F077E7C E58A1108 */ swc1 $f10, 0x1108($t4) -/* 0AC9B0 7F077E80 8E020000 */ lw $v0, ($s0) -/* 0AC9B4 7F077E84 C44610AC */ lwc1 $f6, 0x10ac($v0) -/* 0AC9B8 7F077E88 C44410B4 */ lwc1 $f4, 0x10b4($v0) -/* 0AC9BC 7F077E8C 46003487 */ neg.s $f18, $f6 -/* 0AC9C0 7F077E90 46049402 */ mul.s $f16, $f18, $f4 -/* 0AC9C4 7F077E94 00000000 */ nop -/* 0AC9C8 7F077E98 46108202 */ mul.s $f8, $f16, $f16 -/* 0AC9CC 7F077E9C E7B00034 */ swc1 $f16, 0x34($sp) -/* 0AC9D0 7F077EA0 0C007DF8 */ jal sqrtf -/* 0AC9D4 7F077EA4 46144300 */ add.s $f12, $f8, $f20 -/* 0AC9D8 7F077EA8 4600A083 */ div.s $f2, $f20, $f0 -/* 0AC9DC 7F077EAC C7B00034 */ lwc1 $f16, 0x34($sp) -/* 0AC9E0 7F077EB0 8E0D0000 */ lw $t5, ($s0) -/* 0AC9E4 7F077EB4 44803000 */ mtc1 $zero, $f6 -/* 0AC9E8 7F077EB8 46008487 */ neg.s $f18, $f16 -/* 0AC9EC 7F077EBC 46001287 */ neg.s $f10, $f2 -/* 0AC9F0 7F077EC0 46029102 */ mul.s $f4, $f18, $f2 -/* 0AC9F4 7F077EC4 E5AA110C */ swc1 $f10, 0x110c($t5) -/* 0AC9F8 7F077EC8 8E0E0000 */ lw $t6, ($s0) -/* 0AC9FC 7F077ECC E5C61110 */ swc1 $f6, 0x1110($t6) -/* 0ACA00 7F077ED0 8E0F0000 */ lw $t7, ($s0) -/* 0ACA04 7F077ED4 E5E41114 */ swc1 $f4, 0x1114($t7) -/* 0ACA08 7F077ED8 8FBF0024 */ lw $ra, 0x24($sp) -/* 0ACA0C 7F077EDC 8FB00020 */ lw $s0, 0x20($sp) -/* 0ACA10 7F077EE0 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0ACA14 7F077EE4 03E00008 */ jr $ra -/* 0ACA18 7F077EE8 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F077EEC(void *arg0, void *arg1, f32 arg2) { - f32 sp20; - f32 temp_f14; - f32 temp_f16; - ? temp_ret; - f32 temp_f2; - - // Node 0 - temp_f14 = ((pPlayer->c_halfheight - (arg0->unk4 - pPlayer->c_screentop)) * pPlayer->c_scaley); - temp_f16 = (((*arg0 - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * pPlayer->c_scalex); - sp20 = temp_f16; - temp_ret = sqrtf((((temp_f16 * temp_f16) + (temp_f14 * temp_f14)) + (-1.0f * -1.0f)), temp_f14); - temp_f2 = (arg2 / temp_ret); - *arg1 = (f32) (temp_f16 * temp_f2); - arg1->unk4 = (f32) (sp1C * temp_f2); - arg1->unk8 = (f32) (-1.0f * temp_f2); - return temp_ret; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F077EEC -/* 0ACA1C 7F077EEC 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0ACA20 7F077EF0 3C028008 */ lui $v0, %hi(pPlayer) -/* 0ACA24 7F077EF4 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0ACA28 7F077EF8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0ACA2C 7F077EFC AFA60030 */ sw $a2, 0x30($sp) -/* 0ACA30 7F077F00 C4840004 */ lwc1 $f4, 4($a0) -/* 0ACA34 7F077F04 C446109C */ lwc1 $f6, 0x109c($v0) -/* 0ACA38 7F077F08 C44A10B0 */ lwc1 $f10, 0x10b0($v0) -/* 0ACA3C 7F077F0C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0ACA40 7F077F10 46062201 */ sub.s $f8, $f4, $f6 -/* 0ACA44 7F077F14 C4860000 */ lwc1 $f6, ($a0) -/* 0ACA48 7F077F18 C44410B8 */ lwc1 $f4, 0x10b8($v0) -/* 0ACA4C 7F077F1C 44810000 */ mtc1 $at, $f0 -/* 0ACA50 7F077F20 46085481 */ sub.s $f18, $f10, $f8 -/* 0ACA54 7F077F24 C44A1098 */ lwc1 $f10, 0x1098($v0) -/* 0ACA58 7F077F28 46049382 */ mul.s $f14, $f18, $f4 -/* 0ACA5C 7F077F2C 460A3201 */ sub.s $f8, $f6, $f10 -/* 0ACA60 7F077F30 C45210AC */ lwc1 $f18, 0x10ac($v0) -/* 0ACA64 7F077F34 C44610B4 */ lwc1 $f6, 0x10b4($v0) -/* 0ACA68 7F077F38 AFA5002C */ sw $a1, 0x2c($sp) -/* 0ACA6C 7F077F3C 46124101 */ sub.s $f4, $f8, $f18 -/* 0ACA70 7F077F40 E7AE001C */ swc1 $f14, 0x1c($sp) -/* 0ACA74 7F077F44 46062402 */ mul.s $f16, $f4, $f6 -/* 0ACA78 7F077F48 00000000 */ nop -/* 0ACA7C 7F077F4C 46108282 */ mul.s $f10, $f16, $f16 -/* 0ACA80 7F077F50 E7B00020 */ swc1 $f16, 0x20($sp) -/* 0ACA84 7F077F54 460E7202 */ mul.s $f8, $f14, $f14 -/* 0ACA88 7F077F58 46085480 */ add.s $f18, $f10, $f8 -/* 0ACA8C 7F077F5C 46000102 */ mul.s $f4, $f0, $f0 -/* 0ACA90 7F077F60 0C007DF8 */ jal sqrtf -/* 0ACA94 7F077F64 46049300 */ add.s $f12, $f18, $f4 -/* 0ACA98 7F077F68 C7A60030 */ lwc1 $f6, 0x30($sp) -/* 0ACA9C 7F077F6C C7B00020 */ lwc1 $f16, 0x20($sp) -/* 0ACAA0 7F077F70 C7AE001C */ lwc1 $f14, 0x1c($sp) -/* 0ACAA4 7F077F74 46003083 */ div.s $f2, $f6, $f0 -/* 0ACAA8 7F077F78 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0ACAAC 7F077F7C 44819000 */ mtc1 $at, $f18 -/* 0ACAB0 7F077F80 8FA5002C */ lw $a1, 0x2c($sp) -/* 0ACAB4 7F077F84 46028282 */ mul.s $f10, $f16, $f2 -/* 0ACAB8 7F077F88 00000000 */ nop -/* 0ACABC 7F077F8C 46027202 */ mul.s $f8, $f14, $f2 -/* 0ACAC0 7F077F90 00000000 */ nop -/* 0ACAC4 7F077F94 46029102 */ mul.s $f4, $f18, $f2 -/* 0ACAC8 7F077F98 E4AA0000 */ swc1 $f10, ($a1) -/* 0ACACC 7F077F9C E4A80004 */ swc1 $f8, 4($a1) -/* 0ACAD0 7F077FA0 E4A40008 */ swc1 $f4, 8($a1) -/* 0ACAD4 7F077FA4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0ACAD8 7F077FA8 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0ACADC 7F077FAC 03E00008 */ jr $ra -/* 0ACAE0 7F077FB0 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void *sub_GAME_7F077FB4(void *arg0, s32 arg1, void *arg2) { - // Node 0 - arg2->unk4 = (f32) ((arg0->unk4 * arg1) * pPlayer->c_scaley); - *arg2 = (f32) ((*arg0 * arg1) * pPlayer->c_scalex); - return &pPlayer; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F077FB4 -/* 0ACAE4 7F077FB4 44856000 */ mtc1 $a1, $f12 -/* 0ACAE8 7F077FB8 C4840004 */ lwc1 $f4, 4($a0) -/* 0ACAEC 7F077FBC 3C028008 */ lui $v0, %hi(pPlayer) -/* 0ACAF0 7F077FC0 2442A0B0 */ addiu $v0, %lo(pPlayer) # addiu $v0, $v0, -0x5f50 -/* 0ACAF4 7F077FC4 460C2182 */ mul.s $f6, $f4, $f12 -/* 0ACAF8 7F077FC8 8C4E0000 */ lw $t6, ($v0) -/* 0ACAFC 7F077FCC C5C810B8 */ lwc1 $f8, 0x10b8($t6) -/* 0ACB00 7F077FD0 46083282 */ mul.s $f10, $f6, $f8 -/* 0ACB04 7F077FD4 E4CA0004 */ swc1 $f10, 4($a2) -/* 0ACB08 7F077FD8 C4900000 */ lwc1 $f16, ($a0) -/* 0ACB0C 7F077FDC 8C4F0000 */ lw $t7, ($v0) -/* 0ACB10 7F077FE0 460C8482 */ mul.s $f18, $f16, $f12 -/* 0ACB14 7F077FE4 C5E410B4 */ lwc1 $f4, 0x10b4($t7) -/* 0ACB18 7F077FE8 46049182 */ mul.s $f6, $f18, $f4 -/* 0ACB1C 7F077FEC 03E00008 */ jr $ra -/* 0ACB20 7F077FF0 E4C60000 */ swc1 $f6, ($a2) -) -#endif - - - - - -#ifdef NONMATCHING -void *sub_GAME_7F077FF4(void *arg0, void *arg1) { - f32 temp_f0; - - // Node 0 - temp_f0 = (1.0f / arg0->unk8); - arg1->unk4 = (f32) (((arg0->unk4 * temp_f0) * pPlayer->c_recipscaley) + (pPlayer->c_screentop + pPlayer->c_halfheight)); - *arg1 = (f32) ((pPlayer->c_screenleft + pPlayer->c_halfwidth) - ((*arg0 * temp_f0) * pPlayer->c_recipscalex)); - return pPlayer; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F077FF4 -/* 0ACB24 7F077FF4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0ACB28 7F077FF8 44812000 */ mtc1 $at, $f4 -/* 0ACB2C 7F077FFC C4860008 */ lwc1 $f6, 8($a0) -/* 0ACB30 7F078000 C4880004 */ lwc1 $f8, 4($a0) -/* 0ACB34 7F078004 3C038008 */ lui $v1, %hi(pPlayer) -/* 0ACB38 7F078008 46062003 */ div.s $f0, $f4, $f6 -/* 0ACB3C 7F07800C 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0ACB40 7F078010 8C620000 */ lw $v0, ($v1) -/* 0ACB44 7F078014 C45010C0 */ lwc1 $f16, 0x10c0($v0) -/* 0ACB48 7F078018 C444109C */ lwc1 $f4, 0x109c($v0) -/* 0ACB4C 7F07801C C44610B0 */ lwc1 $f6, 0x10b0($v0) -/* 0ACB50 7F078020 46004282 */ mul.s $f10, $f8, $f0 -/* 0ACB54 7F078024 46062200 */ add.s $f8, $f4, $f6 -/* 0ACB58 7F078028 46105482 */ mul.s $f18, $f10, $f16 -/* 0ACB5C 7F07802C 46089280 */ add.s $f10, $f18, $f8 -/* 0ACB60 7F078030 E4AA0004 */ swc1 $f10, 4($a1) -/* 0ACB64 7F078034 C4920000 */ lwc1 $f18, ($a0) -/* 0ACB68 7F078038 8C620000 */ lw $v0, ($v1) -/* 0ACB6C 7F07803C 46009202 */ mul.s $f8, $f18, $f0 -/* 0ACB70 7F078040 C4501098 */ lwc1 $f16, 0x1098($v0) -/* 0ACB74 7F078044 C44410AC */ lwc1 $f4, 0x10ac($v0) -/* 0ACB78 7F078048 C44A10BC */ lwc1 $f10, 0x10bc($v0) -/* 0ACB7C 7F07804C 46048180 */ add.s $f6, $f16, $f4 -/* 0ACB80 7F078050 460A4402 */ mul.s $f16, $f8, $f10 -/* 0ACB84 7F078054 46103101 */ sub.s $f4, $f6, $f16 -/* 0ACB88 7F078058 03E00008 */ jr $ra -/* 0ACB8C 7F07805C E4A40000 */ swc1 $f4, ($a1) -) -#endif - - - - - -#ifdef NONMATCHING -void *sub_GAME_7F078060(void *arg0, void *arg1) { - f32 phi_f2; - - // Node 0 - if (0.0f == arg0->unk8) - { - // Node 1 - phi_f2 = *(void *)0x80050000; - } - else - { - // Node 2 - phi_f2 = (1.0f / arg0->unk8); - } - // Node 3 - arg1->unk4 = (f32) (((arg0->unk4 * phi_f2) * pPlayer->c_recipscaley) + (pPlayer->c_screentop + pPlayer->c_halfheight)); - *arg1 = (f32) ((pPlayer->c_screenleft + pPlayer->c_halfwidth) - ((*arg0 * phi_f2) * pPlayer->c_recipscalex)); - return pPlayer; +void sub_GAME_7F077EEC(struct coord *in, struct coord *out, f32 value) { + f32 norm; + f32 x; + f32 y; + f32 z; + y = (pPlayer->c_halfheight - (in->y - pPlayer->c_screentop)) * pPlayer->c_scaley; + x = ((in->x - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * pPlayer->c_scalex; + z = -1.0f; + norm = value / sqrtf((x * x) + (y * y) + (z * z)); + out->x = (x * norm); + out->y = (y * norm); + out->z = (-1.0f * norm); } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054FAC -.word 0xe0ad78ec /*-1.0e20*/ -.text -glabel sub_GAME_7F078060 -/* 0ACB90 7F078060 C4800008 */ lwc1 $f0, 8($a0) -/* 0ACB94 7F078064 44802000 */ mtc1 $zero, $f4 -/* 0ACB98 7F078068 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0ACB9C 7F07806C 46002032 */ c.eq.s $f4, $f0 -/* 0ACBA0 7F078070 00000000 */ nop -/* 0ACBA4 7F078074 45020005 */ bc1fl .L7F07808C -/* 0ACBA8 7F078078 44813000 */ mtc1 $at, $f6 -/* 0ACBAC 7F07807C 3C018005 */ lui $at, %hi(D_80054FAC) -/* 0ACBB0 7F078080 10000004 */ b .L7F078094 -/* 0ACBB4 7F078084 C4224FAC */ lwc1 $f2, %lo(D_80054FAC)($at) -/* 0ACBB8 7F078088 44813000 */ mtc1 $at, $f6 -.L7F07808C: -/* 0ACBBC 7F07808C 00000000 */ nop -/* 0ACBC0 7F078090 46003083 */ div.s $f2, $f6, $f0 -.L7F078094: -/* 0ACBC4 7F078094 C4880004 */ lwc1 $f8, 4($a0) -/* 0ACBC8 7F078098 3C038008 */ lui $v1, %hi(pPlayer) -/* 0ACBCC 7F07809C 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0ACBD0 7F0780A0 46024282 */ mul.s $f10, $f8, $f2 -/* 0ACBD4 7F0780A4 8C620000 */ lw $v0, ($v1) -/* 0ACBD8 7F0780A8 C45010C0 */ lwc1 $f16, 0x10c0($v0) -/* 0ACBDC 7F0780AC C444109C */ lwc1 $f4, 0x109c($v0) -/* 0ACBE0 7F0780B0 C44610B0 */ lwc1 $f6, 0x10b0($v0) -/* 0ACBE4 7F0780B4 46105482 */ mul.s $f18, $f10, $f16 -/* 0ACBE8 7F0780B8 46062200 */ add.s $f8, $f4, $f6 -/* 0ACBEC 7F0780BC 46089280 */ add.s $f10, $f18, $f8 -/* 0ACBF0 7F0780C0 E4AA0004 */ swc1 $f10, 4($a1) -/* 0ACBF4 7F0780C4 C4920000 */ lwc1 $f18, ($a0) -/* 0ACBF8 7F0780C8 8C620000 */ lw $v0, ($v1) -/* 0ACBFC 7F0780CC 46029202 */ mul.s $f8, $f18, $f2 -/* 0ACC00 7F0780D0 C4501098 */ lwc1 $f16, 0x1098($v0) -/* 0ACC04 7F0780D4 C44410AC */ lwc1 $f4, 0x10ac($v0) -/* 0ACC08 7F0780D8 C44A10BC */ lwc1 $f10, 0x10bc($v0) -/* 0ACC0C 7F0780DC 46048180 */ add.s $f6, $f16, $f4 -/* 0ACC10 7F0780E0 460A4402 */ mul.s $f16, $f8, $f10 -/* 0ACC14 7F0780E4 46103101 */ sub.s $f4, $f6, $f16 -/* 0ACC18 7F0780E8 03E00008 */ jr $ra -/* 0ACC1C 7F0780EC E4A40000 */ swc1 $f4, ($a1) -) -#endif - - - - - -#ifdef NONMATCHING -void *sub_GAME_7F0780F0(void *arg0, s32 arg1, void *arg2) { - f32 temp_f0; - - // Node 0 - temp_f0 = (1.0f / arg1); - arg2->unk4 = (f32) ((arg0->unk4 * temp_f0) * pPlayer->c_recipscaley); - *arg2 = (f32) ((*arg0 * temp_f0) * pPlayer->c_recipscalex); - return &pPlayer; +void sub_GAME_7F077FB4(struct coord *in, f32 value, struct coord *out) { + out->y = ((in->y * value) * pPlayer->c_scaley); + out->x = ((in->x * value) * pPlayer->c_scalex); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0780F0 -/* 0ACC20 7F0780F0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0ACC24 7F0780F4 44856000 */ mtc1 $a1, $f12 -/* 0ACC28 7F0780F8 44812000 */ mtc1 $at, $f4 -/* 0ACC2C 7F0780FC C4860004 */ lwc1 $f6, 4($a0) -/* 0ACC30 7F078100 3C028008 */ lui $v0, %hi(pPlayer) -/* 0ACC34 7F078104 460C2003 */ div.s $f0, $f4, $f12 -/* 0ACC38 7F078108 2442A0B0 */ addiu $v0, %lo(pPlayer) # addiu $v0, $v0, -0x5f50 -/* 0ACC3C 7F07810C 8C4E0000 */ lw $t6, ($v0) -/* 0ACC40 7F078110 C5CA10C0 */ lwc1 $f10, 0x10c0($t6) -/* 0ACC44 7F078114 46003202 */ mul.s $f8, $f6, $f0 -/* 0ACC48 7F078118 00000000 */ nop -/* 0ACC4C 7F07811C 460A4402 */ mul.s $f16, $f8, $f10 -/* 0ACC50 7F078120 E4D00004 */ swc1 $f16, 4($a2) -/* 0ACC54 7F078124 C4920000 */ lwc1 $f18, ($a0) -/* 0ACC58 7F078128 8C4F0000 */ lw $t7, ($v0) -/* 0ACC5C 7F07812C 46009102 */ mul.s $f4, $f18, $f0 -/* 0ACC60 7F078130 C5E610BC */ lwc1 $f6, 0x10bc($t7) -/* 0ACC64 7F078134 46062202 */ mul.s $f8, $f4, $f6 -/* 0ACC68 7F078138 03E00008 */ jr $ra -/* 0ACC6C 7F07813C E4C80000 */ swc1 $f8, ($a2) -) -#endif - - - - -#ifdef NONMATCHING -void *sub_GAME_7F078140(void *arg0, void *arg1, f32 arg2, f32 arg3, f32 arg4) { - f32 sp1C; - f32 sp2C; - f32 sp30; - f32 temp_f14; - f32 temp_f4; - f32 temp_f8; - f32 temp_f2; - - // Node 0 - sp1C = sinf(((arg3 * *(void *)0x80050000) / 360.0f), arg3); - temp_f14 = (sp1C / (cosf(sp18) * pPlayer->c_halfheight)); - temp_f4 = ((pPlayer->c_halfheight - (arg0->unk4 - pPlayer->c_screentop)) * temp_f14); - sp2C = temp_f4; - temp_f8 = (((*arg0 - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * (((temp_f14 * arg4) * pPlayer->c_halfheight) / pPlayer->c_halfwidth)); - sp30 = temp_f8; - temp_f2 = (arg2 / sqrtf((((temp_f8 * temp_f8) + (temp_f4 * temp_f4)) + (-1.0f * -1.0f)), temp_f14)); - *arg1 = (f32) (sp30 * temp_f2); - arg1->unk4 = (f32) (sp2C * temp_f2); - arg1->unk8 = (f32) (-1.0f * temp_f2); - return arg1; +void sub_GAME_7F077FF4(struct coord *in, struct coord *out) { + f32 inv_z = (1.0f / in->z); + out->y = (in->y * inv_z * pPlayer->c_recipscaley) + (pPlayer->c_screentop + pPlayer->c_halfheight); + out->x = (pPlayer->c_screenleft + pPlayer->c_halfwidth) - (in->x * inv_z * pPlayer->c_recipscalex); } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054FB0 -.word 0x40490fdb /*3.1415927*/ -.text -glabel sub_GAME_7F078140 -/* 0ACC70 7F078140 3C018005 */ lui $at, %hi(D_80054FB0) -/* 0ACC74 7F078144 44877000 */ mtc1 $a3, $f14 -/* 0ACC78 7F078148 C4244FB0 */ lwc1 $f4, %lo(D_80054FB0)($at) -/* 0ACC7C 7F07814C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0ACC80 7F078150 44814000 */ mtc1 $at, $f8 -/* 0ACC84 7F078154 46047182 */ mul.s $f6, $f14, $f4 -/* 0ACC88 7F078158 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0ACC8C 7F07815C AFBF0014 */ sw $ra, 0x14($sp) -/* 0ACC90 7F078160 AFA40038 */ sw $a0, 0x38($sp) -/* 0ACC94 7F078164 AFA5003C */ sw $a1, 0x3c($sp) -/* 0ACC98 7F078168 AFA60040 */ sw $a2, 0x40($sp) -/* 0ACC9C 7F07816C 46083303 */ div.s $f12, $f6, $f8 -/* 0ACCA0 7F078170 0FC15FAB */ jal sinf -/* 0ACCA4 7F078174 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0ACCA8 7F078178 C7AC0018 */ lwc1 $f12, 0x18($sp) -/* 0ACCAC 7F07817C 0FC15FA8 */ jal cosf -/* 0ACCB0 7F078180 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 0ACCB4 7F078184 3C028008 */ lui $v0, %hi(pPlayer) -/* 0ACCB8 7F078188 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0ACCBC 7F07818C C7AA001C */ lwc1 $f10, 0x1c($sp) -/* 0ACCC0 7F078190 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 0ACCC4 7F078194 C44210B0 */ lwc1 $f2, 0x10b0($v0) -/* 0ACCC8 7F078198 8FA30038 */ lw $v1, 0x38($sp) -/* 0ACCCC 7F07819C C45010AC */ lwc1 $f16, 0x10ac($v0) -/* 0ACCD0 7F0781A0 46020102 */ mul.s $f4, $f0, $f2 -/* 0ACCD4 7F0781A4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0ACCD8 7F0781A8 46045383 */ div.s $f14, $f10, $f4 -/* 0ACCDC 7F0781AC C4640004 */ lwc1 $f4, 4($v1) -/* 0ACCE0 7F0781B0 46067202 */ mul.s $f8, $f14, $f6 -/* 0ACCE4 7F0781B4 C446109C */ lwc1 $f6, 0x109c($v0) -/* 0ACCE8 7F0781B8 46024282 */ mul.s $f10, $f8, $f2 -/* 0ACCEC 7F0781BC 46062201 */ sub.s $f8, $f4, $f6 -/* 0ACCF0 7F0781C0 46105483 */ div.s $f18, $f10, $f16 -/* 0ACCF4 7F0781C4 46081281 */ sub.s $f10, $f2, $f8 -/* 0ACCF8 7F0781C8 460E5102 */ mul.s $f4, $f10, $f14 -/* 0ACCFC 7F0781CC E7A4002C */ swc1 $f4, 0x2c($sp) -/* 0ACD00 7F0781D0 C4481098 */ lwc1 $f8, 0x1098($v0) -/* 0ACD04 7F0781D4 C4660000 */ lwc1 $f6, ($v1) -/* 0ACD08 7F0781D8 46083281 */ sub.s $f10, $f6, $f8 -/* 0ACD0C 7F0781DC 46105181 */ sub.s $f6, $f10, $f16 -/* 0ACD10 7F0781E0 46123202 */ mul.s $f8, $f6, $f18 -/* 0ACD14 7F0781E4 00000000 */ nop -/* 0ACD18 7F0781E8 46084282 */ mul.s $f10, $f8, $f8 -/* 0ACD1C 7F0781EC E7A80030 */ swc1 $f8, 0x30($sp) -/* 0ACD20 7F0781F0 46042182 */ mul.s $f6, $f4, $f4 -/* 0ACD24 7F0781F4 44812000 */ mtc1 $at, $f4 -/* 0ACD28 7F0781F8 46065200 */ add.s $f8, $f10, $f6 -/* 0ACD2C 7F0781FC 44815000 */ mtc1 $at, $f10 -/* 0ACD30 7F078200 00000000 */ nop -/* 0ACD34 7F078204 460A2182 */ mul.s $f6, $f4, $f10 -/* 0ACD38 7F078208 0C007DF8 */ jal sqrtf -/* 0ACD3C 7F07820C 46064300 */ add.s $f12, $f8, $f6 -/* 0ACD40 7F078210 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0ACD44 7F078214 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 0ACD48 7F078218 8FA2003C */ lw $v0, 0x3c($sp) -/* 0ACD4C 7F07821C 46002083 */ div.s $f2, $f4, $f0 -/* 0ACD50 7F078220 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0ACD54 7F078224 46025202 */ mul.s $f8, $f10, $f2 -/* 0ACD58 7F078228 44815000 */ mtc1 $at, $f10 -/* 0ACD5C 7F07822C E4480000 */ swc1 $f8, ($v0) -/* 0ACD60 7F078230 C7A6002C */ lwc1 $f6, 0x2c($sp) -/* 0ACD64 7F078234 46023102 */ mul.s $f4, $f6, $f2 -/* 0ACD68 7F078238 00000000 */ nop -/* 0ACD6C 7F07823C 46025202 */ mul.s $f8, $f10, $f2 -/* 0ACD70 7F078240 E4440004 */ swc1 $f4, 4($v0) -/* 0ACD74 7F078244 E4480008 */ swc1 $f8, 8($v0) -/* 0ACD78 7F078248 8FBF0014 */ lw $ra, 0x14($sp) -/* 0ACD7C 7F07824C 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0ACD80 7F078250 03E00008 */ jr $ra -/* 0ACD84 7F078254 00000000 */ nop -) -#endif +void sub_GAME_7F078060(struct coord *in, struct coord *out) +{ + f32 inv_z; + if (in->z == 0.0f) { + inv_z = -100000000000000000000.0f; + } else { + inv_z = 1.0f / in->z; + } + out->y = in->y * inv_z * pPlayer->c_recipscaley + (pPlayer->c_screentop + pPlayer->c_halfheight); + out->x = (pPlayer->c_screenleft + pPlayer->c_halfwidth) - in->x * inv_z * pPlayer->c_recipscalex; +} +void sub_GAME_7F0780F0(struct coord *in, f32 divisor, struct coord *out) +{ + out->y = in->y * (1.0f / divisor) * pPlayer->c_recipscaley; + out->x = in->x * (1.0f / divisor) * pPlayer->c_recipscalex; +} + +void sub_GAME_7F078140(struct coord *in, struct coord *out, f32 value1, f32 angle, f32 value2) { + f32 var1; + f32 x; + f32 y; + f32 z; + f32 var2 = sinf(DEG2RAD(angle)) / (cosf(DEG2RAD(angle)) * pPlayer->c_halfheight); + f32 var3 = (var2 * value2 * pPlayer->c_halfheight) / pPlayer->c_halfwidth; + y = (pPlayer->c_halfheight - (in->y - pPlayer->c_screentop)) * var2; + x = ((in->x - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * var3; + z = -1.0f; + var1 = value1 / sqrtf((x * x) + (y * y) + (z * z)); + out->x = (x * var1); + out->y = (y * var1); + out->z = (-1.0f * var1); +} #ifdef NONMATCHING -void *sub_GAME_7F078258(void *arg0, void *arg1, f32 arg2, f32 arg3) { - f32 sp20; - f32 temp_f12; - - // Node 0 - sp20 = cosf(((arg2 * D_80054FB4) / 360.0f), arg2); - temp_f12 = ((sp20 * pPlayer->c_halfheight) / (arg0->unk8 * sinf(sp1C))); - arg1->unk4 = (f32) ((arg0->unk4 * temp_f12) + (pPlayer->c_screentop + pPlayer->c_halfheight)); - *arg1 = (f32) ((pPlayer->c_screenleft + pPlayer->c_halfwidth) - (*arg0 * ((pPlayer->c_halfwidth * temp_f12) / (arg3 * pPlayer->c_halfheight)))); - return pPlayer; +// acdf8: mul.s $f4,$f18,$f0 r acdf8: mul.s $f4,$f0,$f18 +void sub_GAME_7F078258(struct coord *in, struct coord *out, f32 angle, f32 value) { + f32 var0 = DEG2RAD(angle); + f32 var1 = (cosf(var0) * pPlayer->c_halfheight) / (sinf(var0) * in->z); + f32 var2 = (var1 * pPlayer->c_halfwidth) / (value * pPlayer->c_halfheight); + out->y = ((in->y * var1) + (pPlayer->c_screentop + pPlayer->c_halfheight)); + out->x = ((pPlayer->c_screenleft + pPlayer->c_halfwidth) - (in->x * var2)); } #else GLOBAL_ASM( .late_rodata glabel D_80054FB4 .word 0x40490fdb /*3.1415927*/ -glabel D_80054FB8 -.word 0 -glabel D_80054FBC -.word 0 - -/*D:80054FC0*/ -glabel a8s -/*"%8s"*/ -.word 0x25387300 - -glabel aX4_0f -/*"x %4.0f"*/ -.word 0x78202534 -.word 0x2E306600 - -glabel aY4_0f -/*"y %4.0f"*/ -.word 0x79202534 -.word 0x2E306600 - -glabel aZ4_0f -/*"z %4.0f"*/ -.word 0x7A202534 -.word 0x2E306600 - -glabel aS3d -/*"%s %3d"*/ -.word 0x25732025 -.word 0x33640000 - .text glabel sub_GAME_7F078258 /* 0ACD88 7F078258 3C018005 */ lui $at, %hi(D_80054FB4) @@ -1224,32 +649,28 @@ glabel sub_GAME_7F078258 ) #endif - - - - -void set_BONDdata_field_10C4(s32 arg0) { - pPlayer->field_10C4 = arg0; +void currentPlayerSetMatrix10C4(Mtx *matrix) { + pPlayer->field_10C4 = matrix; } -s32 get_BONDdata_field_10C4(void) { +Mtx *currentPlayerGetMatrix10C4(void) { return pPlayer->field_10C4; } -void set_BONDdata_field_10C8(s32 arg0) { - pPlayer->field_10C8 = arg0; +void currentPlayerSetMatrix10C8(Mtx *matrix) { + pPlayer->field_10C8 = matrix; } -s32 get_BONDdata_field_10C8(void) { +Mtx *currentPlayerGetMatrix10C8(void) { return pPlayer->field_10C8; } -void set_BONDdata_field_10D8(s32 arg0) { - pPlayer->field_10D8 = arg0; +void currentPlayerSetProjectionMatrix(Mtx *matrix) { + pPlayer->projmatrix = matrix; } -s32 get_BONDdata_field_10D8(void) { - return pPlayer->field_10D8; +Mtx *currentPlayerGetProjectionMatrix(void) { + return pPlayer->projmatrix; } void set_BONDdata_field_10E0(s32 arg0) { @@ -1257,28 +678,27 @@ void set_BONDdata_field_10E0(s32 arg0) { } s32 get_BONDdata_field_10E0(void) { - // Node 0 return pPlayer->field_10E0; } -void *copy_BONDdata_field_10CC_to_10E8_set_10CC(s32 arg0) { - pPlayer->field_10E8 = (s32) pPlayer->field_10CC; - pPlayer->field_10CC = arg0; +void *currentPlayerSetMatrix10CC(Mtxf *matrix) { + pPlayer->field_10E8 = pPlayer->field_10CC; + pPlayer->field_10CC = matrix; } -s32 get_BONDdata_field_10CC(void) { +Mtxf *currentPlayerGetMatrix10CC(void) { return pPlayer->field_10CC; } -void set_BONDdata_field_10DC(s32 arg0) { - pPlayer->field_10DC = arg0; +void currentPlayerSetProjectionMatrixF(Mtxf *matrix) { + pPlayer->projmatrixf = matrix; } -s32 get_BONDdata_field_10DC(void) { - return pPlayer->field_10DC; +Mtxf *currentPlayerGetProjectionMatrixF(void) { + return pPlayer->projmatrixf; } -s32 sub_GAME_7F0783F4(void) { +Mtxf *currentPlayerGetMatrix10E8(void) { return pPlayer->field_10E8; } @@ -1290,16 +710,16 @@ s32 sub_GAME_7F078414(void) { return pPlayer->field_10D0; } -void sub_GAME_7F078424(s32 arg0) { +void currentPlayerSetMatrix10D4(Mtxf *matrix) { pPlayer->field_10EC = pPlayer->field_10D4; - pPlayer->field_10D4 = arg0; + pPlayer->field_10D4 = matrix; } -s32 sub_GAME_7F078444(void) { +Mtxf *currentPlayerGetMatrix10D4(void) { return pPlayer->field_10D4; } -s32 sub_GAME_7F078454(void) { +Mtxf *currentPlayerGetMatrix10EC(void) { return pPlayer->field_10EC; } @@ -1351,187 +771,73 @@ f32 getPlayer_c_perspaspect(void) return pPlayer->c_perspaspect; } - -#ifdef NONMATCHING -void proc_7F078504(xyzpoint *param_1) +void getPlayer_c_cameratopnorm(struct coord *out) { - param_1->x = (pPlayer->c_cameratopnorm).x; - param_1->y = (pPlayer->c_cameratopnorm).y; - param_1->z = (pPlayer->c_cameratopnorm).z; + out->x = (pPlayer->c_cameratopnorm).x; + out->y = (pPlayer->c_cameratopnorm).y; + out->z = (pPlayer->c_cameratopnorm).z; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F078504 -/* 0AD034 7F078504 3C028008 */ lui $v0, %hi(pPlayer) -/* 0AD038 7F078508 2442A0B0 */ addiu $v0, %lo(pPlayer) # addiu $v0, $v0, -0x5f50 -/* 0AD03C 7F07850C 8C4E0000 */ lw $t6, ($v0) -/* 0AD040 7F078510 C5C41100 */ lwc1 $f4, 0x1100($t6) -/* 0AD044 7F078514 E4840000 */ swc1 $f4, ($a0) -/* 0AD048 7F078518 8C4F0000 */ lw $t7, ($v0) -/* 0AD04C 7F07851C C5E61104 */ lwc1 $f6, 0x1104($t7) -/* 0AD050 7F078520 E4860004 */ swc1 $f6, 4($a0) -/* 0AD054 7F078524 8C580000 */ lw $t8, ($v0) -/* 0AD058 7F078528 C7081108 */ lwc1 $f8, 0x1108($t8) -/* 0AD05C 7F07852C 03E00008 */ jr $ra -/* 0AD060 7F078530 E4880008 */ swc1 $f8, 8($a0) -) -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F078534(xyzpoint *param_1) +void getPlayer_c_cameratopnorm_inverted_y(struct coord *out) { - param_1->x = (pPlayer->c_cameratopnorm).x; - param_1->y = -(pPlayer->c_cameratopnorm).y; - param_1->z = (pPlayer->c_cameratopnorm).z; + out->x = (pPlayer->c_cameratopnorm).x; + out->y = -(pPlayer->c_cameratopnorm).y; + out->z = (pPlayer->c_cameratopnorm).z; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F078534 -/* 0AD064 7F078534 3C028008 */ lui $v0, %hi(pPlayer) -/* 0AD068 7F078538 2442A0B0 */ addiu $v0, %lo(pPlayer) # addiu $v0, $v0, -0x5f50 -/* 0AD06C 7F07853C 8C4E0000 */ lw $t6, ($v0) -/* 0AD070 7F078540 C5C41100 */ lwc1 $f4, 0x1100($t6) -/* 0AD074 7F078544 E4840000 */ swc1 $f4, ($a0) -/* 0AD078 7F078548 8C4F0000 */ lw $t7, ($v0) -/* 0AD07C 7F07854C C5E61104 */ lwc1 $f6, 0x1104($t7) -/* 0AD080 7F078550 46003207 */ neg.s $f8, $f6 -/* 0AD084 7F078554 E4880004 */ swc1 $f8, 4($a0) -/* 0AD088 7F078558 8C580000 */ lw $t8, ($v0) -/* 0AD08C 7F07855C C70A1108 */ lwc1 $f10, 0x1108($t8) -/* 0AD090 7F078560 03E00008 */ jr $ra -/* 0AD094 7F078564 E48A0008 */ swc1 $f10, 8($a0) -) -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F078568(xyzpoint *param_1) +void getPlayer_c_cameraleftnorm(struct coord *out) { - param_1->x = (pPlayer->c_cameraleftnorm).x; - param_1->y = (pPlayer->c_cameraleftnorm).y; - param_1->z = (pPlayer->c_cameraleftnorm).z; + out->x = (pPlayer->c_cameraleftnorm).x; + out->y = (pPlayer->c_cameraleftnorm).y; + out->z = (pPlayer->c_cameraleftnorm).z; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F078568 -/* 0AD098 7F078568 3C028008 */ lui $v0, %hi(pPlayer) -/* 0AD09C 7F07856C 2442A0B0 */ addiu $v0, %lo(pPlayer) # addiu $v0, $v0, -0x5f50 -/* 0AD0A0 7F078570 8C4E0000 */ lw $t6, ($v0) -/* 0AD0A4 7F078574 C5C4110C */ lwc1 $f4, 0x110c($t6) -/* 0AD0A8 7F078578 E4840000 */ swc1 $f4, ($a0) -/* 0AD0AC 7F07857C 8C4F0000 */ lw $t7, ($v0) -/* 0AD0B0 7F078580 C5E61110 */ lwc1 $f6, 0x1110($t7) -/* 0AD0B4 7F078584 E4860004 */ swc1 $f6, 4($a0) -/* 0AD0B8 7F078588 8C580000 */ lw $t8, ($v0) -/* 0AD0BC 7F07858C C7081114 */ lwc1 $f8, 0x1114($t8) -/* 0AD0C0 7F078590 03E00008 */ jr $ra -/* 0AD0C4 7F078594 E4880008 */ swc1 $f8, 8($a0) -) -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F078598(xyzpoint *param_1) +void getPlayer_c_cameraleftnorm_inverted_x(struct coord *out) { - param_1->x = -(pPlayer->c_cameraleftnorm).x; - param_1->y = (pPlayer->c_cameraleftnorm).y; - param_1->z = (pPlayer->c_cameraleftnorm).z; + out->x = -(pPlayer->c_cameraleftnorm).x; + out->y = (pPlayer->c_cameraleftnorm).y; + out->z = (pPlayer->c_cameraleftnorm).z; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F078598 -/* 0AD0C8 7F078598 3C028008 */ lui $v0, %hi(pPlayer) -/* 0AD0CC 7F07859C 2442A0B0 */ addiu $v0, %lo(pPlayer) # addiu $v0, $v0, -0x5f50 -/* 0AD0D0 7F0785A0 8C4E0000 */ lw $t6, ($v0) -/* 0AD0D4 7F0785A4 C5C4110C */ lwc1 $f4, 0x110c($t6) -/* 0AD0D8 7F0785A8 46002187 */ neg.s $f6, $f4 -/* 0AD0DC 7F0785AC E4860000 */ swc1 $f6, ($a0) -/* 0AD0E0 7F0785B0 8C4F0000 */ lw $t7, ($v0) -/* 0AD0E4 7F0785B4 C5E81110 */ lwc1 $f8, 0x1110($t7) -/* 0AD0E8 7F0785B8 E4880004 */ swc1 $f8, 4($a0) -/* 0AD0EC 7F0785BC 8C580000 */ lw $t8, ($v0) -/* 0AD0F0 7F0785C0 C70A1114 */ lwc1 $f10, 0x1114($t8) -/* 0AD0F4 7F0785C4 03E00008 */ jr $ra -/* 0AD0F8 7F0785C8 E48A0008 */ swc1 $f10, 8($a0) -) -#endif - - - - - f32 getPlayer_c_perspnear(void) { return pPlayer->c_perspnear; } - - - - - #ifdef NONMATCHING -void sub_GAME_7F0785DC(void) +// Regalloc mostly +void sub_GAME_7F0785DC() { - f32 sp28; - f32 sp24; f32 temp_f14; - f32 temp_f14_2; - f32 temp_f16; - f32 temp_f16_2; - f32 temp_f18; - f32 temp_f18_2; - f32 temp_f20; f32 temp_f20_2; - f32 temp_f2; - f32 temp_f2_2; - - temp_f2 = pPlayer->c_halfheight * pPlayer->c_scaley; - sp24 = temp_f2; - temp_f20 = 1.0f / sqrtf((temp_f2 * temp_f2) + 1.0f); - temp_f2_2 = temp_f2 * temp_f20; - temp_f16 = -temp_f20; - temp_f18 = -temp_f16; - flt_CODE_bss_80079940.unk0 = (f32) ((pPlayer->unk10D4->unk20 * temp_f2_2) + (temp_f18 * pPlayer->unk10D4->unk10)); - flt_CODE_bss_80079940.unk4 = (f32) ((pPlayer->unk10D4->unk24 * temp_f2_2) + (temp_f18 * pPlayer->unk10D4->unk14)); - flt_CODE_bss_80079940.unk8 = (f32) ((pPlayer->unk10D4->unk28 * temp_f2_2) + (temp_f18 * pPlayer->unk10D4->unk18)); - flt_CODE_bss_8007994C = (f32) ((pPlayer->unk10D4->unk38 * flt_CODE_bss_80079940.unk8) + ((flt_CODE_bss_80079940.unk0 * pPlayer->unk10D4->unk30) + (flt_CODE_bss_80079940.unk4 * pPlayer->unk10D4->unk34))); - flt_CODE_bss_80079950.unk0 = (f32) ((pPlayer->unk10D4->unk20 * temp_f2_2) + (temp_f16 * pPlayer->unk10D4->unk10)); - flt_CODE_bss_80079950.unk4 = (f32) ((pPlayer->unk10D4->unk24 * temp_f2_2) + (temp_f16 * pPlayer->unk10D4->unk14)); - flt_CODE_bss_80079950.unk8 = (f32) ((pPlayer->unk10D4->unk28 * temp_f2_2) + (temp_f16 * pPlayer->unk10D4->unk18)); - flt_CODE_bss_8007995C = (f32) ((pPlayer->unk10D4->unk38 * flt_CODE_bss_80079950.unk8) + ((flt_CODE_bss_80079950.unk0 * pPlayer->unk10D4->unk30) + (flt_CODE_bss_80079950.unk4 * pPlayer->unk10D4->unk34))); - temp_f14 = -pPlayer->unk10AC * pPlayer->unk10B4; - sp28 = temp_f14; - temp_f20_2 = 1.0f / sqrtf((temp_f14 * temp_f14) + 1.0f, temp_f14, &flt_CODE_bss_80079940, &flt_CODE_bss_80079950); + f32 temp_f14_2; + f32 test2; + f32 temp_f2 = pPlayer->c_halfheight * pPlayer->c_scaley; + f32 temp_f20 = 1.0f / sqrtf((temp_f2 * temp_f2) + 1.0f); + f32 temp_f2_2 = temp_f2 * temp_f20; + f32 test = -temp_f20; + flt_CODE_bss_80079940.x = (-test * pPlayer->field_10D4->m[1][0]) + (temp_f2_2 * pPlayer->field_10D4->m[2][0]); + flt_CODE_bss_80079940.y = (-test * pPlayer->field_10D4->m[1][1]) + (temp_f2_2 * pPlayer->field_10D4->m[2][1]); + flt_CODE_bss_80079940.z = (-test * pPlayer->field_10D4->m[1][2]) + (temp_f2_2 * pPlayer->field_10D4->m[2][2]); + flt_CODE_bss_8007994C = (flt_CODE_bss_80079940.x * pPlayer->field_10D4->m[3][0]) + (flt_CODE_bss_80079940.y * pPlayer->field_10D4->m[3][1]) + (flt_CODE_bss_80079940.z * pPlayer->field_10D4->m[3][2]); + flt_CODE_bss_80079950.x = (test * pPlayer->field_10D4->m[1][0]) + (temp_f2_2 * pPlayer->field_10D4->m[2][0]); + flt_CODE_bss_80079950.y = (test * pPlayer->field_10D4->m[1][1]) + (temp_f2_2 * pPlayer->field_10D4->m[2][1]); + flt_CODE_bss_80079950.z = (test * pPlayer->field_10D4->m[1][2]) + (temp_f2_2 * pPlayer->field_10D4->m[2][2]); + flt_CODE_bss_8007995C = (flt_CODE_bss_80079950.x * pPlayer->field_10D4->m[3][0]) + (flt_CODE_bss_80079950.y * pPlayer->field_10D4->m[3][1]) + (flt_CODE_bss_80079950.z * pPlayer->field_10D4->m[3][2]); + temp_f14 = -pPlayer->c_halfwidth * pPlayer->c_scalex; + temp_f20_2 = 1.0f / sqrtf((temp_f14 * temp_f14) + 1.0f); temp_f14_2 = temp_f14 * temp_f20_2; - temp_f16_2 = -temp_f20_2; - temp_f18_2 = -temp_f16_2; - flt_CODE_bss_80079960.unk0 = (f32) ((temp_f16_2 * pPlayer->unk10D4->unk0) - (pPlayer->unk10D4->unk20 * temp_f14_2)); - flt_CODE_bss_80079960.unk4 = (f32) ((temp_f16_2 * pPlayer->unk10D4->unk4) - (pPlayer->unk10D4->unk24 * temp_f14_2)); - flt_CODE_bss_80079960.unk8 = (f32) ((temp_f16_2 * pPlayer->unk10D4->unk8) - (pPlayer->unk10D4->unk28 * temp_f14_2)); - flt_CODE_bss_8007996C = (f32) ((pPlayer->unk10D4->unk38 * flt_CODE_bss_80079960.unk8) + ((flt_CODE_bss_80079960.unk0 * pPlayer->unk10D4->unk30) + (flt_CODE_bss_80079960.unk4 * pPlayer->unk10D4->unk34))); - flt_CODE_bss_80079970.unk0 = (f32) ((temp_f18_2 * pPlayer->unk10D4->unk0) - (pPlayer->unk10D4->unk20 * temp_f14_2)); - flt_CODE_bss_80079970.unk4 = (f32) ((temp_f18_2 * pPlayer->unk10D4->unk4) - (pPlayer->unk10D4->unk24 * temp_f14_2)); - flt_CODE_bss_80079970.unk8 = (f32) ((temp_f18_2 * pPlayer->unk10D4->unk8) - (pPlayer->unk10D4->unk28 * temp_f14_2)); - flt_CODE_bss_8007997C = (f32) ((pPlayer->unk10D4->unk38 * flt_CODE_bss_80079970.unk8) + ((flt_CODE_bss_80079970.unk0 * pPlayer->unk10D4->unk30) + (flt_CODE_bss_80079970.unk4 * pPlayer->unk10D4->unk34))); - flt_CODE_bss_80079980 = (f32) ((pPlayer->unk10D4->unk38 * pPlayer->unk10D4->unk28) + ((pPlayer->unk10D4->unk20 * pPlayer->unk10D4->unk30) + (pPlayer->unk10D4->unk24 * pPlayer->unk10D4->unk34))); + test2 = -temp_f20_2; + flt_CODE_bss_80079960.x = (test2 * pPlayer->field_10D4->m[0][0]) - (temp_f14_2 * pPlayer->field_10D4->m[2][0]); + flt_CODE_bss_80079960.y = (test2 * pPlayer->field_10D4->m[0][1]) - (temp_f14_2 * pPlayer->field_10D4->m[2][1]); + flt_CODE_bss_80079960.z = (test2 * pPlayer->field_10D4->m[0][2]) - (temp_f14_2 * pPlayer->field_10D4->m[2][2]); + flt_CODE_bss_8007996C = (flt_CODE_bss_80079960.x * pPlayer->field_10D4->m[3][0]) + (flt_CODE_bss_80079960.y * pPlayer->field_10D4->m[3][1]) + (flt_CODE_bss_80079960.z * pPlayer->field_10D4->m[3][2]); + flt_CODE_bss_80079970.x = (-test2 * pPlayer->field_10D4->m[0][0]) - (temp_f14_2 * pPlayer->field_10D4->m[2][0]); + flt_CODE_bss_80079970.y = (-test2 * pPlayer->field_10D4->m[0][1]) - (temp_f14_2 * pPlayer->field_10D4->m[2][1]); + flt_CODE_bss_80079970.z = (-test2 * pPlayer->field_10D4->m[0][2]) - (temp_f14_2 * pPlayer->field_10D4->m[2][2]); + flt_CODE_bss_8007997C = (flt_CODE_bss_80079970.x * pPlayer->field_10D4->m[3][0]) + (flt_CODE_bss_80079970.y * pPlayer->field_10D4->m[3][1]) + (flt_CODE_bss_80079970.z * pPlayer->field_10D4->m[3][2]); + flt_CODE_bss_80079980 = (pPlayer->field_10D4->m[2][0] * pPlayer->field_10D4->m[3][0]) + (pPlayer->field_10D4->m[2][1] * pPlayer->field_10D4->m[3][1]) + (pPlayer->field_10D4->m[2][2] * pPlayer->field_10D4->m[3][2]); } - #else GLOBAL_ASM( .text @@ -1760,209 +1066,64 @@ glabel sub_GAME_7F0785DC ) #endif - - - - -#ifdef NONMATCHING -void *sub_GAME_7F078950(void *arg0, void *arg1) { - // Node 0 - *arg0 = (f32) flt_CODE_bss_80079940; - arg0->unk4 = (f32) flt_CODE_bss_80079940.unk4; - arg0->unk8 = (f32) flt_CODE_bss_80079940.unk8; - *arg1 = (f32) flt_CODE_bss_8007994C; - return &flt_CODE_bss_80079940; +void sub_GAME_7F078950(struct coord *arg0, f32 *arg1) { + arg0->x = flt_CODE_bss_80079940.x; + arg0->y = flt_CODE_bss_80079940.y; + arg0->z = flt_CODE_bss_80079940.z; + *arg1 = flt_CODE_bss_8007994C; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F078950 -/* 0AD480 7F078950 3C028008 */ lui $v0, %hi(flt_CODE_bss_80079940) -/* 0AD484 7F078954 24429940 */ addiu $v0, %lo(flt_CODE_bss_80079940) # addiu $v0, $v0, -0x66c0 -/* 0AD488 7F078958 C4440000 */ lwc1 $f4, ($v0) -/* 0AD48C 7F07895C 3C018008 */ lui $at, %hi(flt_CODE_bss_8007994C) -/* 0AD490 7F078960 E4840000 */ swc1 $f4, ($a0) -/* 0AD494 7F078964 C4460004 */ lwc1 $f6, 4($v0) -/* 0AD498 7F078968 E4860004 */ swc1 $f6, 4($a0) -/* 0AD49C 7F07896C C4480008 */ lwc1 $f8, 8($v0) -/* 0AD4A0 7F078970 E4880008 */ swc1 $f8, 8($a0) -/* 0AD4A4 7F078974 C42A994C */ lwc1 $f10, %lo(flt_CODE_bss_8007994C)($at) -/* 0AD4A8 7F078978 03E00008 */ jr $ra -/* 0AD4AC 7F07897C E4AA0000 */ swc1 $f10, ($a1) -) -#endif - - - - -#ifdef NONMATCHING -void *sub_GAME_7F078980(void *arg0, void *arg1) { - // Node 0 - *arg0 = (f32) flt_CODE_bss_80079950; - arg0->unk4 = (f32) flt_CODE_bss_80079950.unk4; - arg0->unk8 = (f32) flt_CODE_bss_80079950.unk8; - *arg1 = (f32) flt_CODE_bss_8007995C; - return &flt_CODE_bss_80079950; +void sub_GAME_7F078980(struct coord *arg0, f32 *arg1) { + arg0->x = flt_CODE_bss_80079950.x; + arg0->y = flt_CODE_bss_80079950.y; + arg0->z = flt_CODE_bss_80079950.z; + *arg1 = flt_CODE_bss_8007995C; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F078980 -/* 0AD4B0 7F078980 3C028008 */ lui $v0, %hi(flt_CODE_bss_80079950) -/* 0AD4B4 7F078984 24429950 */ addiu $v0, %lo(flt_CODE_bss_80079950) # addiu $v0, $v0, -0x66b0 -/* 0AD4B8 7F078988 C4440000 */ lwc1 $f4, ($v0) -/* 0AD4BC 7F07898C 3C018008 */ lui $at, %hi(flt_CODE_bss_8007995C) -/* 0AD4C0 7F078990 E4840000 */ swc1 $f4, ($a0) -/* 0AD4C4 7F078994 C4460004 */ lwc1 $f6, 4($v0) -/* 0AD4C8 7F078998 E4860004 */ swc1 $f6, 4($a0) -/* 0AD4CC 7F07899C C4480008 */ lwc1 $f8, 8($v0) -/* 0AD4D0 7F0789A0 E4880008 */ swc1 $f8, 8($a0) -/* 0AD4D4 7F0789A4 C42A995C */ lwc1 $f10, %lo(flt_CODE_bss_8007995C)($at) -/* 0AD4D8 7F0789A8 03E00008 */ jr $ra -/* 0AD4DC 7F0789AC E4AA0000 */ swc1 $f10, ($a1) -) -#endif - - - - -#ifdef NONMATCHING -void *sub_GAME_7F0789B0(void *arg0, void *arg1) { - // Node 0 - *arg0 = (f32) flt_CODE_bss_80079960; - arg0->unk4 = (f32) flt_CODE_bss_80079960.unk4; - arg0->unk8 = (f32) flt_CODE_bss_80079960.unk8; - *arg1 = (f32) flt_CODE_bss_8007996C; - return &flt_CODE_bss_80079960; +void sub_GAME_7F0789B0(struct coord *arg0, f32 *arg1) { + arg0->x = flt_CODE_bss_80079960.x; + arg0->y = flt_CODE_bss_80079960.y; + arg0->z = flt_CODE_bss_80079960.z; + *arg1 = flt_CODE_bss_8007996C; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0789B0 -/* 0AD4E0 7F0789B0 3C028008 */ lui $v0, %hi(flt_CODE_bss_80079960) -/* 0AD4E4 7F0789B4 24429960 */ addiu $v0, %lo(flt_CODE_bss_80079960) # addiu $v0, $v0, -0x66a0 -/* 0AD4E8 7F0789B8 C4440000 */ lwc1 $f4, ($v0) -/* 0AD4EC 7F0789BC 3C018008 */ lui $at, %hi(flt_CODE_bss_8007996C) -/* 0AD4F0 7F0789C0 E4840000 */ swc1 $f4, ($a0) -/* 0AD4F4 7F0789C4 C4460004 */ lwc1 $f6, 4($v0) -/* 0AD4F8 7F0789C8 E4860004 */ swc1 $f6, 4($a0) -/* 0AD4FC 7F0789CC C4480008 */ lwc1 $f8, 8($v0) -/* 0AD500 7F0789D0 E4880008 */ swc1 $f8, 8($a0) -/* 0AD504 7F0789D4 C42A996C */ lwc1 $f10, %lo(flt_CODE_bss_8007996C)($at) -/* 0AD508 7F0789D8 03E00008 */ jr $ra -/* 0AD50C 7F0789DC E4AA0000 */ swc1 $f10, ($a1) -) -#endif - - - - -#ifdef NONMATCHING -void *sub_GAME_7F0789E0(void *arg0, void *arg1) { - // Node 0 - *arg0 = (f32) flt_CODE_bss_80079970; - arg0->unk4 = (f32) flt_CODE_bss_80079970.unk4; - arg0->unk8 = (f32) flt_CODE_bss_80079970.unk8; - *arg1 = (f32) flt_CODE_bss_8007997C; - return &flt_CODE_bss_80079970; +void sub_GAME_7F0789E0(struct coord *arg0, f32 *arg1) { + arg0->x = flt_CODE_bss_80079970.x; + arg0->y = flt_CODE_bss_80079970.y; + arg0->z = flt_CODE_bss_80079970.z; + *arg1 = flt_CODE_bss_8007997C; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0789E0 -/* 0AD510 7F0789E0 3C028008 */ lui $v0, %hi(flt_CODE_bss_80079970) -/* 0AD514 7F0789E4 24429970 */ addiu $v0, %lo(flt_CODE_bss_80079970) # addiu $v0, $v0, -0x6690 -/* 0AD518 7F0789E8 C4440000 */ lwc1 $f4, ($v0) -/* 0AD51C 7F0789EC 3C018008 */ lui $at, %hi(flt_CODE_bss_8007997C) -/* 0AD520 7F0789F0 E4840000 */ swc1 $f4, ($a0) -/* 0AD524 7F0789F4 C4460004 */ lwc1 $f6, 4($v0) -/* 0AD528 7F0789F8 E4860004 */ swc1 $f6, 4($a0) -/* 0AD52C 7F0789FC C4480008 */ lwc1 $f8, 8($v0) -/* 0AD530 7F078A00 E4880008 */ swc1 $f8, 8($a0) -/* 0AD534 7F078A04 C42A997C */ lwc1 $f10, %lo(flt_CODE_bss_8007997C)($at) -/* 0AD538 7F078A08 03E00008 */ jr $ra -/* 0AD53C 7F078A0C E4AA0000 */ swc1 $f10, ($a1) -) -#endif - - - - -#ifdef NONMATCHING -void *sub_GAME_7F078A10(void *arg0, void *arg1) { - // Node 0 - *arg0 = (f32) pPlayer->field_10D4->unk20; - arg0->unk4 = (f32) pPlayer->field_10D4->unk24; - arg0->unk8 = (f32) pPlayer->field_10D4->unk28; - *arg1 = (f32) flt_CODE_bss_80079980; - return &pPlayer; +void sub_GAME_7F078A10(struct coord *arg0, f32 *arg1) { + arg0->x = pPlayer->field_10D4->m[2][0]; + arg0->y = pPlayer->field_10D4->m[2][1]; + arg0->z = pPlayer->field_10D4->m[2][2]; + *arg1 = flt_CODE_bss_80079980; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F078A10 -/* 0AD540 7F078A10 3C028008 */ lui $v0, %hi(pPlayer) -/* 0AD544 7F078A14 2442A0B0 */ addiu $v0, %lo(pPlayer) # addiu $v0, $v0, -0x5f50 -/* 0AD548 7F078A18 8C4E0000 */ lw $t6, ($v0) -/* 0AD54C 7F078A1C 3C018008 */ lui $at, %hi(flt_CODE_bss_80079980) -/* 0AD550 7F078A20 8DCF10D4 */ lw $t7, 0x10d4($t6) -/* 0AD554 7F078A24 C5E40020 */ lwc1 $f4, 0x20($t7) -/* 0AD558 7F078A28 E4840000 */ swc1 $f4, ($a0) -/* 0AD55C 7F078A2C 8C580000 */ lw $t8, ($v0) -/* 0AD560 7F078A30 8F1910D4 */ lw $t9, 0x10d4($t8) -/* 0AD564 7F078A34 C7260024 */ lwc1 $f6, 0x24($t9) -/* 0AD568 7F078A38 E4860004 */ swc1 $f6, 4($a0) -/* 0AD56C 7F078A3C 8C480000 */ lw $t0, ($v0) -/* 0AD570 7F078A40 8D0910D4 */ lw $t1, 0x10d4($t0) -/* 0AD574 7F078A44 C5280028 */ lwc1 $f8, 0x28($t1) -/* 0AD578 7F078A48 E4880008 */ swc1 $f8, 8($a0) -/* 0AD57C 7F078A4C C42A9980 */ lwc1 $f10, %lo(flt_CODE_bss_80079980)($at) -/* 0AD580 7F078A50 03E00008 */ jr $ra -/* 0AD584 7F078A54 E4AA0000 */ swc1 $f10, ($a1) -) -#endif - - - - #ifdef NONMATCHING -void sub_GAME_7F078A58(void *arg0, s32 arg1) { - // Node 0 - if ((flt_CODE_bss_80079980 + arg1) < ((arg0->unk8 * pPlayer->field_10D4->unk28) + ((pPlayer->field_10D4->unk20 * *arg0) + (pPlayer->field_10D4->unk24 * arg0->unk4)))) +// Regalloc +s32 sub_GAME_7F078A58(struct coord *arg0, f32 arg1) { + if ((flt_CODE_bss_80079980 + arg1) < ((pPlayer->field_10D4->m[2][0] * arg0->x) + (pPlayer->field_10D4->m[2][1] * arg0->y) + (pPlayer->field_10D4->m[2][2] * arg0->z))) { - // Node 1 return 0; } - // Node 2 - if ((flt_CODE_bss_8007996C + arg1) < ((arg0->unk8 * flt_CODE_bss_80079960.unk8) + ((flt_CODE_bss_80079960 * *arg0) + (flt_CODE_bss_80079960.unk4 * arg0->unk4)))) + if ((flt_CODE_bss_8007996C + arg1) < ((flt_CODE_bss_80079960.x * arg0->x) + (flt_CODE_bss_80079960.y * arg0->y) + (flt_CODE_bss_80079960.z * arg0->z))) { - // Node 3 return 0; } - // Node 4 - if ((flt_CODE_bss_8007997C + arg1) < ((arg0->unk8 * flt_CODE_bss_80079970.unk8) + ((flt_CODE_bss_80079970 * *arg0) + (flt_CODE_bss_80079970.unk4 * arg0->unk4)))) + if ((flt_CODE_bss_8007997C + arg1) < ((flt_CODE_bss_80079970.x * arg0->x) + (flt_CODE_bss_80079970.y * arg0->y) + (flt_CODE_bss_80079970.z * arg0->z))) { - // Node 5 return 0; } - // Node 6 - if ((flt_CODE_bss_8007994C + arg1) < ((arg0->unk8 * flt_CODE_bss_80079940.unk8) + ((flt_CODE_bss_80079940 * *arg0) + (flt_CODE_bss_80079940.unk4 * arg0->unk4)))) + if ((flt_CODE_bss_8007994C + arg1) < ((flt_CODE_bss_80079940.x * arg0->x) + (flt_CODE_bss_80079940.y * arg0->y) + (flt_CODE_bss_80079940.z * arg0->z))) { - // Node 7 return 0; } - // Node 8 - if ((flt_CODE_bss_8007995C + arg1) < ((arg0->unk8 * flt_CODE_bss_80079950.unk8) + ((flt_CODE_bss_80079950 * *arg0) + (flt_CODE_bss_80079950.unk4 * arg0->unk4)))) + if ((flt_CODE_bss_8007995C + arg1) < ((flt_CODE_bss_80079950.x * arg0->x) + (flt_CODE_bss_80079950.y * arg0->y) + (flt_CODE_bss_80079950.z * arg0->z))) { - // Node 9 return 0; } - // Node 10 return 1; } #else @@ -2085,27 +1246,9 @@ glabel sub_GAME_7F078A58 ) #endif - - - - #ifdef NONMATCHING -void sub_GAME_7F078BF4(void *arg0, s32 arg1, void *arg2) +s32 sub_GAME_7F078BF4(struct coord *arg0, f32 arg1, f32 *arg2) { - f32 sp7C; - f32 sp78; - f32 sp74; - f32 sp6C; - f32 sp68; - f32 sp64; - f32 sp5C; - f32 sp58; - f32 sp54; - f32 sp4C; - f32 sp48; - f32 sp44; - f32 sp38; - f32 sp34; f32 temp_f2; f32 temp_f12; f32 temp_f2_2; @@ -2116,14 +1259,12 @@ void sub_GAME_7F078BF4(void *arg0, s32 arg1, void *arg2) f32 temp_f2_3; f32 temp_f12_2; f32 temp_f2_4; - f32 temp_f14_2; f32 temp_f6; f32 temp_f8; f32 temp_f4_2; f32 temp_f2_5; f32 temp_f12_3; f32 temp_f2_6; - f32 temp_f14_3; f32 temp_f8_2; f32 temp_f18_2; f32 temp_f4_3; @@ -2134,70 +1275,51 @@ void sub_GAME_7F078BF4(void *arg0, s32 arg1, void *arg2) f32 temp_f6_2; f32 temp_f10_2; f32 temp_f18_3; - - if ((flt_CODE_bss_80079980 + arg1) < ((arg0->unk8 * pPlayer->field_10D4->unk28) + ((pPlayer->field_10D4->unk20 * *arg0) + (pPlayer->field_10D4->unk24 * arg0->unk4)))) + if ((flt_CODE_bss_80079980 + arg1) < ((pPlayer->field_10D4->m[2][0] * arg0->x) + (pPlayer->field_10D4->m[2][1] * arg0->y) + (pPlayer->field_10D4->m[2][2] * arg0->z))) { return 0; } - temp_f2 = (((*arg2 - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * pPlayer->c_scalex); - sp38 = temp_f2; + temp_f2 = (((arg2[0] - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * pPlayer->c_scalex); temp_f12 = (1.0f / sqrtf(((temp_f2 * temp_f2) + 1.0f))); temp_f2_2 = (temp_f2 * temp_f12); temp_f14 = -temp_f12; - temp_f10 = ((temp_f14 * *pPlayer->field_10D4) - (pPlayer->field_10D4->unk20 * temp_f2_2)); - sp54 = temp_f10; - temp_f4 = ((temp_f14 * pPlayer->field_10D4->unk4) - (pPlayer->field_10D4->unk24 * temp_f2_2)); - sp58 = temp_f4; - temp_f18 = ((temp_f14 * pPlayer->field_10D4->unk8) - (pPlayer->field_10D4->unk28 * temp_f2_2)); - sp5C = temp_f18; - if ((((pPlayer->field_10D4->unk38 * temp_f18) + ((temp_f10 * pPlayer->field_10D4->unk30) + (temp_f4 * pPlayer->field_10D4->unk34))) + arg1) < ((arg0->unk8 * temp_f18) + ((temp_f10 * *arg0) + (temp_f4 * arg0->unk4)))) + temp_f10 = ((temp_f14 * pPlayer->field_10D4->m[0][0]) - (pPlayer->field_10D4->m[2][0] * temp_f2_2)); + temp_f4 = ((temp_f14 * pPlayer->field_10D4->m[0][1]) - (pPlayer->field_10D4->m[2][1] * temp_f2_2)); + temp_f18 = ((temp_f14 * pPlayer->field_10D4->m[0][2]) - (pPlayer->field_10D4->m[2][2] * temp_f2_2)); + if ((((temp_f10 * pPlayer->field_10D4->m[3][0]) + (temp_f4 * pPlayer->field_10D4->m[3][1]) + (temp_f18 * pPlayer->field_10D4->m[3][2])) + arg1) < ((temp_f10 * arg0->x) + (temp_f4 * arg0->y) + (temp_f18 * arg0->z))) { return 0; } - temp_f2_3 = (-((arg2->unk8 - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * pPlayer->c_scalex); - sp38 = temp_f2_3; - temp_f12_2 = (1.0f / sqrtf(((temp_f2_3 * temp_f2_3) + 1.0f), temp_f14, arg0)); + temp_f2_3 = (-((arg2[2] - pPlayer->c_screenleft) - pPlayer->c_halfwidth) * pPlayer->c_scalex); + temp_f12_2 = (1.0f / sqrtf(((temp_f2_3 * temp_f2_3) + 1.0f))); temp_f2_4 = (temp_f2_3 * temp_f12_2); - temp_f14_2 = --temp_f12_2; - temp_f6 = ((temp_f14_2 * *pPlayer->field_10D4) - (pPlayer->field_10D4->unk20 * temp_f2_4)); - sp44 = temp_f6; - temp_f8 = ((temp_f14_2 * pPlayer->field_10D4->unk4) - (pPlayer->field_10D4->unk24 * temp_f2_4)); - sp48 = temp_f8; - temp_f4_2 = ((temp_f14_2 * pPlayer->field_10D4->unk8) - (pPlayer->field_10D4->unk28 * temp_f2_4)); - sp4C = temp_f4_2; - if ((((pPlayer->field_10D4->unk38 * temp_f4_2) + ((temp_f6 * pPlayer->field_10D4->unk30) + (temp_f8 * pPlayer->field_10D4->unk34))) + arg1) < ((arg0->unk8 * temp_f4_2) + ((temp_f6 * *arg0) + (temp_f8 * arg0->unk4)))) + temp_f6 = ((temp_f12_2 * pPlayer->field_10D4->m[0][0]) - (pPlayer->field_10D4->m[2][0] * temp_f2_4)); + temp_f8 = ((temp_f12_2 * pPlayer->field_10D4->m[0][1]) - (pPlayer->field_10D4->m[2][1] * temp_f2_4)); + temp_f4_2 = ((temp_f12_2 * pPlayer->field_10D4->m[0][2]) - (pPlayer->field_10D4->m[2][2] * temp_f2_4)); + if ((((temp_f6 * pPlayer->field_10D4->m[3][0]) + (temp_f8 * pPlayer->field_10D4->m[3][1]) + (temp_f4_2 * pPlayer->field_10D4->m[3][2])) + arg1) < ((temp_f6 * arg0->x) + (temp_f8 * arg0->y) + (temp_f4_2 * arg0->z))) { return 0; } - temp_f2_5 = ((pPlayer->c_halfheight - (arg2->unk4 - pPlayer->c_screentop)) * pPlayer->c_scaley); - sp34 = temp_f2_5; - temp_f12_3 = (1.0f / sqrtf(((temp_f2_5 * temp_f2_5) + 1.0f), temp_f14_2, arg0)); + temp_f2_5 = ((pPlayer->c_halfheight - (arg2[1] - pPlayer->c_screentop)) * pPlayer->c_scaley); + temp_f12_3 = (1.0f / sqrtf(((temp_f2_5 * temp_f2_5) + 1.0f))); temp_f2_6 = (temp_f2_5 * temp_f12_3); - temp_f14_3 = --temp_f12_3; - temp_f8_2 = ((pPlayer->field_10D4->unk20 * temp_f2_6) + (temp_f14_3 * pPlayer->field_10D4->unk10)); - sp74 = temp_f8_2; - temp_f18_2 = ((pPlayer->field_10D4->unk24 * temp_f2_6) + (temp_f14_3 * pPlayer->field_10D4->unk14)); - sp78 = temp_f18_2; - temp_f4_3 = ((pPlayer->field_10D4->unk28 * temp_f2_6) + (temp_f14_3 * pPlayer->field_10D4->unk18)); - sp7C = temp_f4_3; - if ((((pPlayer->field_10D4->unk38 * temp_f4_3) + ((temp_f8_2 * pPlayer->field_10D4->unk30) + (temp_f18_2 * pPlayer->field_10D4->unk34))) + arg1) < ((arg0->unk8 * temp_f4_3) + ((temp_f8_2 * *arg0) + (temp_f18_2 * arg0->unk4)))) + temp_f8_2 = ((pPlayer->field_10D4->m[2][0] * temp_f2_6) + (temp_f12_3 * pPlayer->field_10D4->m[1][0])); + temp_f18_2 = ((pPlayer->field_10D4->m[2][1] * temp_f2_6) + (temp_f12_3 * pPlayer->field_10D4->m[1][1])); + temp_f4_3 = ((pPlayer->field_10D4->m[2][2] * temp_f2_6) + (temp_f12_3 * pPlayer->field_10D4->m[1][2])); + if ((((temp_f8_2 * pPlayer->field_10D4->m[3][0]) + (temp_f18_2 * pPlayer->field_10D4->m[3][1]) + (temp_f4_3 * pPlayer->field_10D4->m[3][2])) + arg1) < ((temp_f8_2 * arg0->x) + (temp_f18_2 * arg0->y) + (temp_f4_3 * arg0->z))) { return 0; } - temp_f2_7 = (-(pPlayer->c_halfheight - (arg2->unkC - pPlayer->c_screentop)) * pPlayer->c_scaley); - sp34 = temp_f2_7; - temp_f12_4 = (1.0f / sqrtf(((temp_f2_7 * temp_f2_7) + 1.0f), temp_f14_3, arg0)); + temp_f2_7 = (-(pPlayer->c_halfheight - (arg2[3] - pPlayer->c_screentop)) * pPlayer->c_scaley); + temp_f12_4 = (1.0f / sqrtf(((temp_f2_7 * temp_f2_7) + 1.0f))); temp_f2_8 = (temp_f2_7 * temp_f12_4); temp_f14_4 = -temp_f12_4; - temp_f6_2 = ((pPlayer->field_10D4->unk20 * temp_f2_8) + (temp_f14_4 * pPlayer->field_10D4->unk10)); - sp64 = temp_f6_2; - temp_f10_2 = ((pPlayer->field_10D4->unk24 * temp_f2_8) + (temp_f14_4 * pPlayer->field_10D4->unk14)); - sp68 = temp_f10_2; - temp_f18_3 = ((pPlayer->field_10D4->unk28 * temp_f2_8) + (temp_f14_4 * pPlayer->field_10D4->unk18)); - sp6C = temp_f18_3; - if ((((pPlayer->field_10D4->unk38 * temp_f18_3) + ((temp_f6_2 * pPlayer->field_10D4->unk30) + (temp_f10_2 * pPlayer->field_10D4->unk34))) + arg1) < ((arg0->unk8 * temp_f18_3) + ((temp_f6_2 * *arg0) + (temp_f10_2 * arg0->unk4)))) + temp_f6_2 = ((pPlayer->field_10D4->m[2][0] * temp_f2_8) + (temp_f14_4 * pPlayer->field_10D4->m[1][0])); + temp_f10_2 = ((pPlayer->field_10D4->m[2][1] * temp_f2_8) + (temp_f14_4 * pPlayer->field_10D4->m[1][1])); + temp_f18_3 = ((pPlayer->field_10D4->m[2][2] * temp_f2_8) + (temp_f14_4 * pPlayer->field_10D4->m[1][2])); + if ((((temp_f6_2 * pPlayer->field_10D4->m[3][0]) + (temp_f10_2 * pPlayer->field_10D4->m[3][1]) + (temp_f18_3 * pPlayer->field_10D4->m[3][2])) + arg1) < ((temp_f6_2 * arg0->x) + (temp_f10_2 * arg0->y) + (temp_f18_3 * arg0->z))) { - + return 0; } return 1; } @@ -2570,7 +1692,7 @@ u32 sub_GAME_7F0790F0(void) s32 phi_s1_8; temp_s6 = get_cur_playernum(); - temp_s2 = get_num_players(); + temp_s2 = getPlayerCount(); phi_s1_2 = 1; phi_s7_2 = 0; if (dword_CODE_bss_80079C68 > 0) @@ -2588,7 +1710,7 @@ block_3: phi_s1_5 = phi_s1_7; if (phi_s0 != temp_s6) { - temp_t3 = (&ptr_BONDdata_p1 + (phi_s0 * 4)); + temp_t3 = (&players + (phi_s0 * 4)); phi_s1_5 = phi_s1_7; if ((*temp_t3)->unkA8 != 0) { @@ -2646,7 +1768,7 @@ block_15: phi_s1_6 = phi_s1_8; if (phi_s0_2 != temp_s6) { - temp_t5 = (&ptr_BONDdata_p1 + (phi_s0_2 * 4)); + temp_t5 = (&players + (phi_s0_2 * 4)); phi_s1_6 = phi_s1_8; if ((*temp_t5)->unkA8 != 0) { @@ -2706,7 +1828,7 @@ glabel sub_GAME_7F0790F0 /* 0ADC48 7F079118 AFB00020 */ sw $s0, 0x20($sp) /* 0ADC4C 7F07911C 0FC26C54 */ jal get_cur_playernum /* 0ADC50 7F079120 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0ADC54 7F079124 0FC26919 */ jal get_num_players +/* 0ADC54 7F079124 0FC26919 */ jal getPlayerCount /* 0ADC58 7F079128 0040B025 */ move $s6, $v0 /* 0ADC5C 7F07912C 3C0E8008 */ lui $t6, %hi(dword_CODE_bss_80079C68) /* 0ADC60 7F079130 8DCE9C68 */ lw $t6, %lo(dword_CODE_bss_80079C68)($t6) @@ -2717,9 +1839,9 @@ glabel sub_GAME_7F0790F0 /* 0ADC74 7F079144 3C01447A */ li $at, 0x447A0000 # 1000.000000 /* 0ADC78 7F079148 3C1E8008 */ lui $fp, %hi(pPlayer) /* 0ADC7C 7F07914C 3C158008 */ lui $s5, %hi(dword_CODE_bss_80079C28) -/* 0ADC80 7F079150 3C148008 */ lui $s4, %hi(ptr_BONDdata_p1) +/* 0ADC80 7F079150 3C148008 */ lui $s4, %hi(players) /* 0ADC84 7F079154 4481A000 */ mtc1 $at, $f20 -/* 0ADC88 7F079158 26949EE0 */ addiu $s4, %lo(ptr_BONDdata_p1) # addiu $s4, $s4, -0x6120 +/* 0ADC88 7F079158 26949EE0 */ addiu $s4, %lo(players) # addiu $s4, $s4, -0x6120 /* 0ADC8C 7F07915C 26B59C28 */ addiu $s5, %lo(dword_CODE_bss_80079C28) # addiu $s5, $s5, -0x63d8 /* 0ADC90 7F079160 27DEA0B0 */ addiu $fp, %lo(pPlayer) # addiu $fp, $fp, -0x5f50 /* 0ADC94 7F079164 8FC20000 */ lw $v0, ($fp) @@ -2791,12 +1913,12 @@ glabel sub_GAME_7F0790F0 /* 0ADD84 7F079254 8FC20000 */ lw $v0, ($fp) /* 0ADD88 7F079258 AFB3004C */ sw $s3, 0x4c($sp) .L7F07925C: -/* 0ADD8C 7F07925C 3C148008 */ lui $s4, %hi(ptr_BONDdata_p1) +/* 0ADD8C 7F07925C 3C148008 */ lui $s4, %hi(players) /* 0ADD90 7F079260 3C158008 */ lui $s5, %hi(dword_CODE_bss_80079C28) /* 0ADD94 7F079264 3C1E8008 */ lui $fp, %hi(pPlayer) /* 0ADD98 7F079268 27DEA0B0 */ addiu $fp, %lo(pPlayer) # addiu $fp, $fp, -0x5f50 /* 0ADD9C 7F07926C 26B59C28 */ addiu $s5, %lo(dword_CODE_bss_80079C28) # addiu $s5, $s5, -0x63d8 -/* 0ADDA0 7F079270 26949EE0 */ addiu $s4, %lo(ptr_BONDdata_p1) # addiu $s4, $s4, -0x6120 +/* 0ADDA0 7F079270 26949EE0 */ addiu $s4, %lo(players) # addiu $s4, $s4, -0x6120 /* 0ADDA4 7F079274 12200044 */ beqz $s1, .L7F079388 /* 0ADDA8 7F079278 8FB3004C */ lw $s3, 0x4c($sp) /* 0ADDAC 7F07927C 3C188008 */ lui $t8, %hi(dword_CODE_bss_80079C68) @@ -2903,24 +2025,20 @@ glabel sub_GAME_7F0790F0 ) #endif - - - - -#ifdef NONMATCHING +#ifdef VERSION_US void init_player_BONDdata(void) { - if (get_num_players() >= 2) + if (getPlayerCount() >= 2) { - pPlayer->controlstyle = get_player_control_style(get_cur_playernum()); + pPlayer->field_430 = get_player_control_style(get_cur_playernum()); cur_player_set_control_type(get_player_control_style(get_cur_playernum())); } - pPlayer->current_model_xpos = 0.0f; - pPlayer->current_model_ypos = 0.0f; - pPlayer->current_model_zpos = 0.0f; - pPlayer->previous_model_xpos = 0.0f; - pPlayer->previous_model_ypos = 0.0f; - pPlayer->previous_model_zpos = 0.0f; + pPlayer->current_model_pos[0] = 0.0f; + pPlayer->current_model_pos[1] = 0.0f; + pPlayer->current_model_pos[2] = 0.0f; + pPlayer->previous_model_pos[0] = 0.0f; + pPlayer->previous_model_pos[1] = 0.0f; + pPlayer->previous_model_pos[2] = 0.0f; pPlayer->current_room_xpos = 0.0f; pPlayer->current_room_ypos = 0.0f; pPlayer->current_room_zpos = 0.0f; @@ -2947,11 +2065,11 @@ void init_player_BONDdata(void) pPlayer->field_90 = 0.0f; pPlayer->field_94 = 0; pPlayer->field_98 = 0.0f; - pPlayer->field_1274 = 0.0f; + pPlayer->swaytarget = 0.0f; pPlayer->field_1278 = 0.0f; pPlayer->field_127C = 0.0f; - pPlayer->crouchposition = 2; - pPlayer->field_29FC = 2; + pPlayer->crouchpos = CROUCH_STAND; + pPlayer->autocrouchpos = CROUCH_STAND; pPlayer->ducking_height_offset = 0.0f; pPlayer->field_A4 = 0.0f; pPlayer->field_AC = 1; @@ -2967,11 +2085,11 @@ void init_player_BONDdata(void) pPlayer->healthshowtime = -1; pPlayer->field_1C0 = 0; pPlayer->field_1C4 = 0; - pPlayer->pause_animation_state = 0; + pPlayer->watch_animation_state = 0; pPlayer->paused_flag = 1; pPlayer->open_close_solo_watch_menu = 0; pPlayer->field_1A0 = 0; - pPlayer->bondfadefracnew = 0.0f; + pPlayer->field_19C = 0.0f; pPlayer->speedtheta = 0.0f; pPlayer->vv_costheta = 1.0f; pPlayer->vv_sintheta = 0.0f; @@ -3010,26 +2128,26 @@ void init_player_BONDdata(void) pPlayer->autoaimx = 0.0f; pPlayer->autoxaimtime = 0; pPlayer->autoxaimtime60 = -1; - pPlayer->tint_red = 0xff; - pPlayer->tint_green = 0xff; - pPlayer->tint_blue = 0xff; - pPlayer->tint_alpha = 0.0f; - pPlayer->field_3E0 = -1.0f; - pPlayer->time_for_fade = -1.0f; - pPlayer->field_3E8 = 0xff; - pPlayer->field_3EC = 0xff; - pPlayer->field_3F0 = 0xff; - pPlayer->field_3F4 = 0xff; - pPlayer->field_3F8 = 0xff; - pPlayer->field_3FC = 0xff; - pPlayer->field_400 = 0.0f; - pPlayer->field_404 = 0.0f; - pPlayer->viewport_alpha = -1.0f; + pPlayer->colourscreenred = 0xff; + pPlayer->colourscreengreen = 0xff; + pPlayer->colourscreenblue = 0xff; + pPlayer->colourscreenfrac = 0.0f; + pPlayer->colourfadetime60 = -1.0f; + pPlayer->colourfadetimemax60 = -1.0f; + pPlayer->colourfaderedold = 0xff; + pPlayer->colourfaderednew = 0xff; + pPlayer->colourfadegreenold = 0xff; + pPlayer->colourfadegreennew = 0xff; + pPlayer->colourfadeblueold = 0xff; + pPlayer->colourfadebluenew = 0xff; + pPlayer->colourfadefracold = 0.0f; + pPlayer->colourfadefracnew = 0.0f; pPlayer->bondfadetime60 = -1.0f; - pPlayer->bondfadetimemax = 0.0f; + pPlayer->bondfadetimemax60 = -1.0f; pPlayer->bondfadefracold = 0.0f; + pPlayer->bondfadefracnew = 0.0f; pPlayer->field_42C = 2; - pPlayer->controlstyle = 0; + pPlayer->field_430 = 0; pPlayer->pause_starting_angle = 0.0f; pPlayer->field_208 = 0.0f; pPlayer->pause_target_angle = 0.0f; @@ -3048,322 +2166,6 @@ void init_player_BONDdata(void) pPlayer->field_2A6C = 0; pPlayer->field_2A70 = 0; } -#else - -#ifdef VERSION_US -GLOBAL_ASM( -.text -glabel init_player_BONDdata -/* 0ADF1C 7F0793EC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0ADF20 7F0793F0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0ADF24 7F0793F4 0FC26919 */ jal get_num_players -/* 0ADF28 7F0793F8 00000000 */ nop -/* 0ADF2C 7F0793FC 28410002 */ slti $at, $v0, 2 -/* 0ADF30 7F079400 1420000E */ bnez $at, .L7F07943C -/* 0ADF34 7F079404 00000000 */ nop -/* 0ADF38 7F079408 0FC26C54 */ jal get_cur_playernum -/* 0ADF3C 7F07940C 00000000 */ nop -/* 0ADF40 7F079410 0FC0402F */ jal get_player_control_style -/* 0ADF44 7F079414 00402025 */ move $a0, $v0 -/* 0ADF48 7F079418 3C038008 */ lui $v1, %hi(pPlayer) -/* 0ADF4C 7F07941C 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0ADF50 7F079420 8C6E0000 */ lw $t6, ($v1) -/* 0ADF54 7F079424 0FC26C54 */ jal get_cur_playernum -/* 0ADF58 7F079428 ADC20430 */ sw $v0, 0x430($t6) -/* 0ADF5C 7F07942C 0FC0402F */ jal get_player_control_style -/* 0ADF60 7F079430 00402025 */ move $a0, $v0 -/* 0ADF64 7F079434 0FC29374 */ jal cur_player_set_control_type -/* 0ADF68 7F079438 00402025 */ move $a0, $v0 -.L7F07943C: -/* 0ADF6C 7F07943C 3C038008 */ lui $v1, %hi(pPlayer) -/* 0ADF70 7F079440 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0ADF74 7F079444 44800000 */ mtc1 $zero, $f0 -/* 0ADF78 7F079448 8C6F0000 */ lw $t7, ($v1) -/* 0ADF7C 7F07944C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0ADF80 7F079450 44811000 */ mtc1 $at, $f2 -/* 0ADF84 7F079454 E5E00038 */ swc1 $f0, 0x38($t7) -/* 0ADF88 7F079458 8C780000 */ lw $t8, ($v1) -/* 0ADF8C 7F07945C 24070002 */ li $a3, 2 -/* 0ADF90 7F079460 24050001 */ li $a1, 1 -/* 0ADF94 7F079464 E700003C */ swc1 $f0, 0x3c($t8) -/* 0ADF98 7F079468 8C790000 */ lw $t9, ($v1) -/* 0ADF9C 7F07946C 2406FFFF */ li $a2, -1 -/* 0ADFA0 7F079470 3C01C080 */ li $at, 0xC0800000 # -4.000000 -/* 0ADFA4 7F079474 E7200040 */ swc1 $f0, 0x40($t9) -/* 0ADFA8 7F079478 8C680000 */ lw $t0, ($v1) -/* 0ADFAC 7F07947C 44812000 */ mtc1 $at, $f4 -/* 0ADFB0 7F079480 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0ADFB4 7F079484 E5000044 */ swc1 $f0, 0x44($t0) -/* 0ADFB8 7F079488 8C690000 */ lw $t1, ($v1) -/* 0ADFBC 7F07948C E5200048 */ swc1 $f0, 0x48($t1) -/* 0ADFC0 7F079490 8C6A0000 */ lw $t2, ($v1) -/* 0ADFC4 7F079494 E540004C */ swc1 $f0, 0x4c($t2) -/* 0ADFC8 7F079498 8C6B0000 */ lw $t3, ($v1) -/* 0ADFCC 7F07949C E5600050 */ swc1 $f0, 0x50($t3) -/* 0ADFD0 7F0794A0 8C6C0000 */ lw $t4, ($v1) -/* 0ADFD4 7F0794A4 E5800054 */ swc1 $f0, 0x54($t4) -/* 0ADFD8 7F0794A8 8C6D0000 */ lw $t5, ($v1) -/* 0ADFDC 7F0794AC E5A00058 */ swc1 $f0, 0x58($t5) -/* 0ADFE0 7F0794B0 8C6E0000 */ lw $t6, ($v1) -/* 0ADFE4 7F0794B4 ADC00000 */ sw $zero, ($t6) -/* 0ADFE8 7F0794B8 8C6F0000 */ lw $t7, ($v1) -/* 0ADFEC 7F0794BC E5E00004 */ swc1 $f0, 4($t7) -/* 0ADFF0 7F0794C0 8C780000 */ lw $t8, ($v1) -/* 0ADFF4 7F0794C4 E7000008 */ swc1 $f0, 8($t8) -/* 0ADFF8 7F0794C8 8C790000 */ lw $t9, ($v1) -/* 0ADFFC 7F0794CC E720000C */ swc1 $f0, 0xc($t9) -/* 0AE000 7F0794D0 8C680000 */ lw $t0, ($v1) -/* 0AE004 7F0794D4 E5000010 */ swc1 $f0, 0x10($t0) -/* 0AE008 7F0794D8 8C690000 */ lw $t1, ($v1) -/* 0AE00C 7F0794DC E5200014 */ swc1 $f0, 0x14($t1) -/* 0AE010 7F0794E0 8C6A0000 */ lw $t2, ($v1) -/* 0AE014 7F0794E4 E5420018 */ swc1 $f2, 0x18($t2) -/* 0AE018 7F0794E8 8C6B0000 */ lw $t3, ($v1) -/* 0AE01C 7F0794EC E560001C */ swc1 $f0, 0x1c($t3) -/* 0AE020 7F0794F0 8C6C0000 */ lw $t4, ($v1) -/* 0AE024 7F0794F4 E5820020 */ swc1 $f2, 0x20($t4) -/* 0AE028 7F0794F8 8C6D0000 */ lw $t5, ($v1) -/* 0AE02C 7F0794FC E5A00024 */ swc1 $f0, 0x24($t5) -/* 0AE030 7F079500 8C6E0000 */ lw $t6, ($v1) -/* 0AE034 7F079504 E5C00028 */ swc1 $f0, 0x28($t6) -/* 0AE038 7F079508 8C6F0000 */ lw $t7, ($v1) -/* 0AE03C 7F07950C E5E0002C */ swc1 $f0, 0x2c($t7) -/* 0AE040 7F079510 8C780000 */ lw $t8, ($v1) -/* 0AE044 7F079514 E7000030 */ swc1 $f0, 0x30($t8) -/* 0AE048 7F079518 8C790000 */ lw $t9, ($v1) -/* 0AE04C 7F07951C AF200034 */ sw $zero, 0x34($t9) -/* 0AE050 7F079520 8C680000 */ lw $t0, ($v1) -/* 0AE054 7F079524 E50003C4 */ swc1 $f0, 0x3c4($t0) -/* 0AE058 7F079528 8C690000 */ lw $t1, ($v1) -/* 0AE05C 7F07952C E52003C8 */ swc1 $f0, 0x3c8($t1) -/* 0AE060 7F079530 8C6A0000 */ lw $t2, ($v1) -/* 0AE064 7F079534 E54203CC */ swc1 $f2, 0x3cc($t2) -/* 0AE068 7F079538 8C6B0000 */ lw $t3, ($v1) -/* 0AE06C 7F07953C E5600084 */ swc1 $f0, 0x84($t3) -/* 0AE070 7F079540 8C6C0000 */ lw $t4, ($v1) -/* 0AE074 7F079544 E5800088 */ swc1 $f0, 0x88($t4) -/* 0AE078 7F079548 8C6D0000 */ lw $t5, ($v1) -/* 0AE07C 7F07954C ADA0008C */ sw $zero, 0x8c($t5) -/* 0AE080 7F079550 8C6E0000 */ lw $t6, ($v1) -/* 0AE084 7F079554 E5C00090 */ swc1 $f0, 0x90($t6) -/* 0AE088 7F079558 8C6F0000 */ lw $t7, ($v1) -/* 0AE08C 7F07955C ADE00094 */ sw $zero, 0x94($t7) -/* 0AE090 7F079560 8C780000 */ lw $t8, ($v1) -/* 0AE094 7F079564 E7000098 */ swc1 $f0, 0x98($t8) -/* 0AE098 7F079568 8C790000 */ lw $t9, ($v1) -/* 0AE09C 7F07956C E7201274 */ swc1 $f0, 0x1274($t9) -/* 0AE0A0 7F079570 8C680000 */ lw $t0, ($v1) -/* 0AE0A4 7F079574 E5001278 */ swc1 $f0, 0x1278($t0) -/* 0AE0A8 7F079578 8C690000 */ lw $t1, ($v1) -/* 0AE0AC 7F07957C E520127C */ swc1 $f0, 0x127c($t1) -/* 0AE0B0 7F079580 8C6A0000 */ lw $t2, ($v1) -/* 0AE0B4 7F079584 AD47009C */ sw $a3, 0x9c($t2) -/* 0AE0B8 7F079588 8C6B0000 */ lw $t3, ($v1) -/* 0AE0BC 7F07958C AD6729FC */ sw $a3, 0x29fc($t3) -/* 0AE0C0 7F079590 8C6C0000 */ lw $t4, ($v1) -/* 0AE0C4 7F079594 E58000A0 */ swc1 $f0, 0xa0($t4) -/* 0AE0C8 7F079598 8C6D0000 */ lw $t5, ($v1) -/* 0AE0CC 7F07959C E5A000A4 */ swc1 $f0, 0xa4($t5) -/* 0AE0D0 7F0795A0 8C6E0000 */ lw $t6, ($v1) -/* 0AE0D4 7F0795A4 ADC500AC */ sw $a1, 0xac($t6) -/* 0AE0D8 7F0795A8 8C6F0000 */ lw $t7, ($v1) -/* 0AE0DC 7F0795AC ADE000D0 */ sw $zero, 0xd0($t7) -/* 0AE0E0 7F0795B0 8C780000 */ lw $t8, ($v1) -/* 0AE0E4 7F0795B4 AF0000D8 */ sw $zero, 0xd8($t8) -/* 0AE0E8 7F0795B8 8C790000 */ lw $t9, ($v1) -/* 0AE0EC 7F0795BC E72200DC */ swc1 $f2, 0xdc($t9) -/* 0AE0F0 7F0795C0 8C680000 */ lw $t0, ($v1) -/* 0AE0F4 7F0795C4 E50000E0 */ swc1 $f0, 0xe0($t0) -/* 0AE0F8 7F0795C8 8C690000 */ lw $t1, ($v1) -/* 0AE0FC 7F0795CC E52200E4 */ swc1 $f2, 0xe4($t1) -/* 0AE100 7F0795D0 8C6A0000 */ lw $t2, ($v1) -/* 0AE104 7F0795D4 E54000E8 */ swc1 $f0, 0xe8($t2) -/* 0AE108 7F0795D8 8C6B0000 */ lw $t3, ($v1) -/* 0AE10C 7F0795DC E56200EC */ swc1 $f2, 0xec($t3) -/* 0AE110 7F0795E0 8C6C0000 */ lw $t4, ($v1) -/* 0AE114 7F0795E4 E58000F0 */ swc1 $f0, 0xf0($t4) -/* 0AE118 7F0795E8 8C6D0000 */ lw $t5, ($v1) -/* 0AE11C 7F0795EC ADA600F4 */ sw $a2, 0xf4($t5) -/* 0AE120 7F0795F0 8C6E0000 */ lw $t6, ($v1) -/* 0AE124 7F0795F4 ADC600F8 */ sw $a2, 0xf8($t6) -/* 0AE128 7F0795F8 8C6F0000 */ lw $t7, ($v1) -/* 0AE12C 7F0795FC ADE001C0 */ sw $zero, 0x1c0($t7) -/* 0AE130 7F079600 8C780000 */ lw $t8, ($v1) -/* 0AE134 7F079604 AF0001C4 */ sw $zero, 0x1c4($t8) -/* 0AE138 7F079608 8C790000 */ lw $t9, ($v1) -/* 0AE13C 7F07960C AF2001C8 */ sw $zero, 0x1c8($t9) -/* 0AE140 7F079610 8C680000 */ lw $t0, ($v1) -/* 0AE144 7F079614 AD0501CC */ sw $a1, 0x1cc($t0) -/* 0AE148 7F079618 8C690000 */ lw $t1, ($v1) -/* 0AE14C 7F07961C AD2001D0 */ sw $zero, 0x1d0($t1) -/* 0AE150 7F079620 8C6A0000 */ lw $t2, ($v1) -/* 0AE154 7F079624 AD4001A0 */ sw $zero, 0x1a0($t2) -/* 0AE158 7F079628 8C6B0000 */ lw $t3, ($v1) -/* 0AE15C 7F07962C E560019C */ swc1 $f0, 0x19c($t3) -/* 0AE160 7F079630 8C6C0000 */ lw $t4, ($v1) -/* 0AE164 7F079634 E580014C */ swc1 $f0, 0x14c($t4) -/* 0AE168 7F079638 8C6D0000 */ lw $t5, ($v1) -/* 0AE16C 7F07963C E5A20150 */ swc1 $f2, 0x150($t5) -/* 0AE170 7F079640 8C6E0000 */ lw $t6, ($v1) -/* 0AE174 7F079644 E5C00154 */ swc1 $f0, 0x154($t6) -/* 0AE178 7F079648 8C6F0000 */ lw $t7, ($v1) -/* 0AE17C 7F07964C E5E40158 */ swc1 $f4, 0x158($t7) -/* 0AE180 7F079650 8C640000 */ lw $a0, ($v1) -/* 0AE184 7F079654 C4860158 */ lwc1 $f6, 0x158($a0) -/* 0AE188 7F079658 E486015C */ swc1 $f6, 0x15c($a0) -/* 0AE18C 7F07965C 8C640000 */ lw $a0, ($v1) -/* 0AE190 7F079660 C48C015C */ lwc1 $f12, 0x15c($a0) -/* 0AE194 7F079664 4600603C */ c.lt.s $f12, $f0 -/* 0AE198 7F079668 00000000 */ nop -/* 0AE19C 7F07966C 45020007 */ bc1fl .L7F07968C -/* 0AE1A0 7F079670 E4800160 */ swc1 $f0, 0x160($a0) -/* 0AE1A4 7F079674 44814000 */ mtc1 $at, $f8 -/* 0AE1A8 7F079678 00000000 */ nop -/* 0AE1AC 7F07967C 46086280 */ add.s $f10, $f12, $f8 -/* 0AE1B0 7F079680 E48A015C */ swc1 $f10, 0x15c($a0) -/* 0AE1B4 7F079684 8C640000 */ lw $a0, ($v1) -/* 0AE1B8 7F079688 E4800160 */ swc1 $f0, 0x160($a0) -.L7F07968C: -/* 0AE1BC 7F07968C 8C780000 */ lw $t8, ($v1) -/* 0AE1C0 7F079690 240200FF */ li $v0, 255 -/* 0AE1C4 7F079694 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0AE1C8 7F079698 E7020164 */ swc1 $f2, 0x164($t8) -/* 0AE1CC 7F07969C 8C790000 */ lw $t9, ($v1) -/* 0AE1D0 7F0796A0 44816000 */ mtc1 $at, $f12 -/* 0AE1D4 7F0796A4 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0AE1D8 7F0796A8 E7200168 */ swc1 $f0, 0x168($t9) -/* 0AE1DC 7F0796AC 8C680000 */ lw $t0, ($v1) -/* 0AE1E0 7F0796B0 44818000 */ mtc1 $at, $f16 -/* 0AE1E4 7F0796B4 E500016C */ swc1 $f0, 0x16c($t0) -/* 0AE1E8 7F0796B8 8C690000 */ lw $t1, ($v1) -/* 0AE1EC 7F0796BC E5200170 */ swc1 $f0, 0x170($t1) -/* 0AE1F0 7F0796C0 8C6A0000 */ lw $t2, ($v1) -/* 0AE1F4 7F0796C4 E5400174 */ swc1 $f0, 0x174($t2) -/* 0AE1F8 7F0796C8 8C6B0000 */ lw $t3, ($v1) -/* 0AE1FC 7F0796CC E5602A4C */ swc1 $f0, 0x2a4c($t3) -/* 0AE200 7F0796D0 8C6C0000 */ lw $t4, ($v1) -/* 0AE204 7F0796D4 E5820178 */ swc1 $f2, 0x178($t4) -/* 0AE208 7F0796D8 8C6D0000 */ lw $t5, ($v1) -/* 0AE20C 7F0796DC ADA0017C */ sw $zero, 0x17c($t5) -/* 0AE210 7F0796E0 8C6E0000 */ lw $t6, ($v1) -/* 0AE214 7F0796E4 E5C00180 */ swc1 $f0, 0x180($t6) -/* 0AE218 7F0796E8 8C6F0000 */ lw $t7, ($v1) -/* 0AE21C 7F0796EC E5E00184 */ swc1 $f0, 0x184($t7) -/* 0AE220 7F0796F0 8C780000 */ lw $t8, ($v1) -/* 0AE224 7F0796F4 E7000188 */ swc1 $f0, 0x188($t8) -/* 0AE228 7F0796F8 8C790000 */ lw $t9, ($v1) -/* 0AE22C 7F0796FC AF200104 */ sw $zero, 0x104($t9) -/* 0AE230 7F079700 8C680000 */ lw $t0, ($v1) -/* 0AE234 7F079704 AD000108 */ sw $zero, 0x108($t0) -/* 0AE238 7F079708 8C690000 */ lw $t1, ($v1) -/* 0AE23C 7F07970C AD20010C */ sw $zero, 0x10c($t1) -/* 0AE240 7F079710 8C6A0000 */ lw $t2, ($v1) -/* 0AE244 7F079714 AD400110 */ sw $zero, 0x110($t2) -/* 0AE248 7F079718 8C6B0000 */ lw $t3, ($v1) -/* 0AE24C 7F07971C AD650114 */ sw $a1, 0x114($t3) -/* 0AE250 7F079720 8C6C0000 */ lw $t4, ($v1) -/* 0AE254 7F079724 AD850118 */ sw $a1, 0x118($t4) -/* 0AE258 7F079728 8C6D0000 */ lw $t5, ($v1) -/* 0AE25C 7F07972C ADA0011C */ sw $zero, 0x11c($t5) -/* 0AE260 7F079730 8C6E0000 */ lw $t6, ($v1) -/* 0AE264 7F079734 ADC50120 */ sw $a1, 0x120($t6) -/* 0AE268 7F079738 8C6F0000 */ lw $t7, ($v1) -/* 0AE26C 7F07973C ADE00124 */ sw $zero, 0x124($t7) -/* 0AE270 7F079740 8C780000 */ lw $t8, ($v1) -/* 0AE274 7F079744 AF050128 */ sw $a1, 0x128($t8) -/* 0AE278 7F079748 8C790000 */ lw $t9, ($v1) -/* 0AE27C 7F07974C E720012C */ swc1 $f0, 0x12c($t9) -/* 0AE280 7F079750 8C680000 */ lw $t0, ($v1) -/* 0AE284 7F079754 AD000130 */ sw $zero, 0x130($t0) -/* 0AE288 7F079758 8C690000 */ lw $t1, ($v1) -/* 0AE28C 7F07975C AD260134 */ sw $a2, 0x134($t1) -/* 0AE290 7F079760 8C6A0000 */ lw $t2, ($v1) -/* 0AE294 7F079764 AD450138 */ sw $a1, 0x138($t2) -/* 0AE298 7F079768 8C6B0000 */ lw $t3, ($v1) -/* 0AE29C 7F07976C E560013C */ swc1 $f0, 0x13c($t3) -/* 0AE2A0 7F079770 8C6C0000 */ lw $t4, ($v1) -/* 0AE2A4 7F079774 AD800140 */ sw $zero, 0x140($t4) -/* 0AE2A8 7F079778 8C6D0000 */ lw $t5, ($v1) -/* 0AE2AC 7F07977C ADA60144 */ sw $a2, 0x144($t5) -/* 0AE2B0 7F079780 8C6E0000 */ lw $t6, ($v1) -/* 0AE2B4 7F079784 ADC203D0 */ sw $v0, 0x3d0($t6) -/* 0AE2B8 7F079788 8C6F0000 */ lw $t7, ($v1) -/* 0AE2BC 7F07978C ADE203D4 */ sw $v0, 0x3d4($t7) -/* 0AE2C0 7F079790 8C780000 */ lw $t8, ($v1) -/* 0AE2C4 7F079794 AF0203D8 */ sw $v0, 0x3d8($t8) -/* 0AE2C8 7F079798 8C790000 */ lw $t9, ($v1) -/* 0AE2CC 7F07979C E72003DC */ swc1 $f0, 0x3dc($t9) -/* 0AE2D0 7F0797A0 8C680000 */ lw $t0, ($v1) -/* 0AE2D4 7F0797A4 E50C03E0 */ swc1 $f12, 0x3e0($t0) -/* 0AE2D8 7F0797A8 8C690000 */ lw $t1, ($v1) -/* 0AE2DC 7F0797AC E52C03E4 */ swc1 $f12, 0x3e4($t1) -/* 0AE2E0 7F0797B0 8C6A0000 */ lw $t2, ($v1) -/* 0AE2E4 7F0797B4 AD4203E8 */ sw $v0, 0x3e8($t2) -/* 0AE2E8 7F0797B8 8C6B0000 */ lw $t3, ($v1) -/* 0AE2EC 7F0797BC AD6203EC */ sw $v0, 0x3ec($t3) -/* 0AE2F0 7F0797C0 8C6C0000 */ lw $t4, ($v1) -/* 0AE2F4 7F0797C4 AD8203F0 */ sw $v0, 0x3f0($t4) -/* 0AE2F8 7F0797C8 8C6D0000 */ lw $t5, ($v1) -/* 0AE2FC 7F0797CC ADA203F4 */ sw $v0, 0x3f4($t5) -/* 0AE300 7F0797D0 8C6E0000 */ lw $t6, ($v1) -/* 0AE304 7F0797D4 ADC203F8 */ sw $v0, 0x3f8($t6) -/* 0AE308 7F0797D8 8C6F0000 */ lw $t7, ($v1) -/* 0AE30C 7F0797DC ADE203FC */ sw $v0, 0x3fc($t7) -/* 0AE310 7F0797E0 8C780000 */ lw $t8, ($v1) -/* 0AE314 7F0797E4 E7000400 */ swc1 $f0, 0x400($t8) -/* 0AE318 7F0797E8 8C790000 */ lw $t9, ($v1) -/* 0AE31C 7F0797EC E7200404 */ swc1 $f0, 0x404($t9) -/* 0AE320 7F0797F0 8C680000 */ lw $t0, ($v1) -/* 0AE324 7F0797F4 E50C018C */ swc1 $f12, 0x18c($t0) -/* 0AE328 7F0797F8 8C690000 */ lw $t1, ($v1) -/* 0AE32C 7F0797FC E52C0190 */ swc1 $f12, 0x190($t1) -/* 0AE330 7F079800 8C6A0000 */ lw $t2, ($v1) -/* 0AE334 7F079804 E5400194 */ swc1 $f0, 0x194($t2) -/* 0AE338 7F079808 8C6B0000 */ lw $t3, ($v1) -/* 0AE33C 7F07980C E5600198 */ swc1 $f0, 0x198($t3) -/* 0AE340 7F079810 8C6C0000 */ lw $t4, ($v1) -/* 0AE344 7F079814 AD87042C */ sw $a3, 0x42c($t4) -/* 0AE348 7F079818 8C6D0000 */ lw $t5, ($v1) -/* 0AE34C 7F07981C ADA00430 */ sw $zero, 0x430($t5) -/* 0AE350 7F079820 8C6E0000 */ lw $t6, ($v1) -/* 0AE354 7F079824 E5C00204 */ swc1 $f0, 0x204($t6) -/* 0AE358 7F079828 8C6F0000 */ lw $t7, ($v1) -/* 0AE35C 7F07982C E5E00208 */ swc1 $f0, 0x208($t7) -/* 0AE360 7F079830 8C780000 */ lw $t8, ($v1) -/* 0AE364 7F079834 E700020C */ swc1 $f0, 0x20c($t8) -/* 0AE368 7F079838 8C790000 */ lw $t9, ($v1) -/* 0AE36C 7F07983C E7200210 */ swc1 $f0, 0x210($t9) -/* 0AE370 7F079840 8C680000 */ lw $t0, ($v1) -/* 0AE374 7F079844 E5000214 */ swc1 $f0, 0x214($t0) -/* 0AE378 7F079848 8C690000 */ lw $t1, ($v1) -/* 0AE37C 7F07984C AD200218 */ sw $zero, 0x218($t1) -/* 0AE380 7F079850 8C6A0000 */ lw $t2, ($v1) -/* 0AE384 7F079854 AD400220 */ sw $zero, 0x220($t2) -/* 0AE388 7F079858 8C6B0000 */ lw $t3, ($v1) -/* 0AE38C 7F07985C E5600224 */ swc1 $f0, 0x224($t3) -/* 0AE390 7F079860 8C6C0000 */ lw $t4, ($v1) -/* 0AE394 7F079864 AD800200 */ sw $zero, 0x200($t4) -/* 0AE398 7F079868 8C6D0000 */ lw $t5, ($v1) -/* 0AE39C 7F07986C A5A003B4 */ sh $zero, 0x3b4($t5) -/* 0AE3A0 7F079870 8C6E0000 */ lw $t6, ($v1) -/* 0AE3A4 7F079874 A5C003B6 */ sh $zero, 0x3b6($t6) -/* 0AE3A8 7F079878 8C6F0000 */ lw $t7, ($v1) -/* 0AE3AC 7F07987C E5F029C0 */ swc1 $f16, 0x29c0($t7) -/* 0AE3B0 7F079880 8C780000 */ lw $t8, ($v1) -/* 0AE3B4 7F079884 A7062A04 */ sh $a2, 0x2a04($t8) -/* 0AE3B8 7F079888 8C790000 */ lw $t9, ($v1) -/* 0AE3BC 7F07988C E7202A08 */ swc1 $f0, 0x2a08($t9) -/* 0AE3C0 7F079890 8C680000 */ lw $t0, ($v1) -/* 0AE3C4 7F079894 E5002A0C */ swc1 $f0, 0x2a0c($t0) -/* 0AE3C8 7F079898 8C690000 */ lw $t1, ($v1) -/* 0AE3CC 7F07989C AD202A6C */ sw $zero, 0x2a6c($t1) -/* 0AE3D0 7F0798A0 8C6A0000 */ lw $t2, ($v1) -/* 0AE3D4 7F0798A4 AD402A70 */ sw $zero, 0x2a70($t2) -/* 0AE3D8 7F0798A8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AE3DC 7F0798AC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0AE3E0 7F0798B0 03E00008 */ jr $ra -/* 0AE3E4 7F0798B4 00000000 */ nop -) #endif #ifdef VERSION_JP @@ -3372,7 +2174,7 @@ GLOBAL_ASM( glabel init_player_BONDdata /* 0AE54C 7F0799DC 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0AE550 7F0799E0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0AE554 7F0799E4 0FC26C01 */ jal get_num_players +/* 0AE554 7F0799E4 0FC26C01 */ jal getPlayerCount /* 0AE558 7F0799E8 00000000 */ nop /* 0AE55C 7F0799EC 28410002 */ slti $at, $v0, 2 /* 0AE560 7F0799F0 1420000E */ bnez $at, .L7F079A2C @@ -3682,9 +2484,6 @@ glabel init_player_BONDdata ) #endif -#endif - - #ifdef NONMATCHING void sub_GAME_7F0798B8(void) { ? temp_ret; @@ -3696,7 +2495,7 @@ void sub_GAME_7F0798B8(void) { pPlayer->field_29F4 = get_mission_timer(); pPlayer->field_2A00 = 0; add_item_to_inventory(1); - temp_ret = get_num_players(); + temp_ret = getPlayerCount(); phi_return = temp_ret; if (temp_ret >= 2) { @@ -3714,6 +2513,36 @@ void sub_GAME_7F0798B8(void) { } #else GLOBAL_ASM( +.late_rodata +glabel D_80054FB8 +.word 0 +glabel D_80054FBC +.word 0 + +/*D:80054FC0*/ +glabel a8s +/*"%8s"*/ +.word 0x25387300 + +glabel aX4_0f +/*"x %4.0f"*/ +.word 0x78202534 +.word 0x2E306600 + +glabel aY4_0f +/*"y %4.0f"*/ +.word 0x79202534 +.word 0x2E306600 + +glabel aZ4_0f +/*"z %4.0f"*/ +.word 0x7A202534 +.word 0x2E306600 + +glabel aS3d +/*"%s %3d"*/ +.word 0x25732025 +.word 0x33640000 .text glabel sub_GAME_7F0798B8 /* 0AE3E8 7F0798B8 3C0E8008 */ lui $t6, %hi(pPlayersPerm) @@ -3745,7 +2574,7 @@ glabel sub_GAME_7F0798B8 /* 0AE450 7F079920 8C680000 */ lw $t0, ($v1) /* 0AE454 7F079924 0FC23122 */ jal add_item_to_inventory /* 0AE458 7F079928 AD002A00 */ sw $zero, 0x2a00($t0) -/* 0AE45C 7F07992C 0FC26919 */ jal get_num_players +/* 0AE45C 7F07992C 0FC26919 */ jal getPlayerCount /* 0AE460 7F079930 00000000 */ nop /* 0AE464 7F079934 28410002 */ slti $at, $v0, 2 /* 0AE468 7F079938 1420000F */ bnez $at, .L7F079978 @@ -3773,149 +2602,33 @@ glabel sub_GAME_7F0798B8 ) #endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F079988(s32 arg0) { - // Node 0 - pPlayer->field_1274 = (f32) ((f32) arg0 * 75.0f); - return; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F079988 -/* 0AE4B8 7F079988 44842000 */ mtc1 $a0, $f4 -/* 0AE4BC 7F07998C 3C014296 */ li $at, 0x42960000 # 75.000000 -/* 0AE4C0 7F079990 44814000 */ mtc1 $at, $f8 -/* 0AE4C4 7F079994 468021A0 */ cvt.s.w $f6, $f4 -/* 0AE4C8 7F079998 3C0E8008 */ lui $t6, %hi(pPlayer) -/* 0AE4CC 7F07999C 8DCEA0B0 */ lw $t6, %lo(pPlayer)($t6) -/* 0AE4D0 7F0799A0 46083282 */ mul.s $f10, $f6, $f8 -/* 0AE4D4 7F0799A4 03E00008 */ jr $ra -/* 0AE4D8 7F0799A8 E5CA1274 */ swc1 $f10, 0x1274($t6) -) -#endif - - - - - - -void change_crouch_position(int position) -{ - pPlayer->crouchposition = pPlayer->crouchposition + position; - if (pPlayer->crouchposition < 0) { - pPlayer->crouchposition = 0; - return; - } - if (2 < pPlayer->crouchposition) { - pPlayer->crouchposition = 2; - } - return; +void currentPlayerSetSwayTarget(s32 value) { + pPlayer->swaytarget = (value * 75.0f); } +void currentPlayerAdjustCrouchPos(s32 value) { + pPlayer->crouchpos = pPlayer->crouchpos + value; - - - -#ifdef NONMATCHING -s32 sub_GAME_7F0799F0(void) { - // Node 0 - if (pPlayer->crouchposition < pPlayer->field_29FC) - { - // Node 1 - return pPlayer->crouchposition; + if (pPlayer->crouchpos < CROUCH_SQUAT) { + pPlayer->crouchpos = CROUCH_SQUAT; + } else if (pPlayer->crouchpos > CROUCH_STAND) { + pPlayer->crouchpos = CROUCH_STAND; } - // Node 2 - return pPlayer->field_29FC; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0799F0 -/* 0AE520 7F0799F0 3C028008 */ lui $v0, %hi(pPlayer) -/* 0AE524 7F0799F4 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0AE528 7F0799F8 8C43009C */ lw $v1, 0x9c($v0) -/* 0AE52C 7F0799FC 8C4429FC */ lw $a0, 0x29fc($v0) -/* 0AE530 7F079A00 0064082A */ slt $at, $v1, $a0 -/* 0AE534 7F079A04 10200003 */ beqz $at, .L7F079A14 -/* 0AE538 7F079A08 00802825 */ move $a1, $a0 -/* 0AE53C 7F079A0C 03E00008 */ jr $ra -/* 0AE540 7F079A10 00601025 */ move $v0, $v1 -.L7F079A14: -/* 0AE544 7F079A14 03E00008 */ jr $ra -/* 0AE548 7F079A18 00A01025 */ move $v0, $a1 -) -#endif - - - - - -#ifdef NONMATCHING -s32 sub_GAME_7F079A1C(s32 arg0) { - void *temp_v0; - - // Node 0 - temp_v0 = (&ptr_BONDdata_p1 + (arg0 * 4)); - if (*temp_v0->unk9C < *temp_v0->unk29FC) - { - // Node 1 - return *temp_v0->unk9C; - } - // Node 2 - return *temp_v0->unk29FC; +s32 currentPlayerGetCrouchPos(void) { + return ((pPlayer->crouchpos < pPlayer->autocrouchpos) ? pPlayer->crouchpos : pPlayer->autocrouchpos); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F079A1C -/* 0AE54C 7F079A1C 00047080 */ sll $t6, $a0, 2 -/* 0AE550 7F079A20 3C028008 */ lui $v0, %hi(ptr_BONDdata_p1) -/* 0AE554 7F079A24 004E1021 */ addu $v0, $v0, $t6 -/* 0AE558 7F079A28 8C429EE0 */ lw $v0, %lo(ptr_BONDdata_p1)($v0) -/* 0AE55C 7F079A2C 8C43009C */ lw $v1, 0x9c($v0) -/* 0AE560 7F079A30 8C4529FC */ lw $a1, 0x29fc($v0) -/* 0AE564 7F079A34 0065082A */ slt $at, $v1, $a1 -/* 0AE568 7F079A38 10200003 */ beqz $at, .L7F079A48 -/* 0AE56C 7F079A3C 00A02025 */ move $a0, $a1 -/* 0AE570 7F079A40 03E00008 */ jr $ra -/* 0AE574 7F079A44 00601025 */ move $v0, $v1 -.L7F079A48: -/* 0AE578 7F079A48 03E00008 */ jr $ra -/* 0AE57C 7F079A4C 00801025 */ move $v0, $a0 -) -#endif - - - - - -#ifdef NONMATCHING -void setptrBONDdata(s32 arg0) { - // Node 0 - *pPlayer = arg0; - return; +s32 playerGetCrouchPos(s32 playernum) { + return (players[playernum]->crouchpos < players[playernum]->autocrouchpos) + ? players[playernum]->crouchpos + : players[playernum]->autocrouchpos; } -#else -GLOBAL_ASM( -.text -glabel setptrBONDdata -/* 0AE580 7F079A50 3C0E8008 */ lui $t6, %hi(pPlayer) -/* 0AE584 7F079A54 8DCEA0B0 */ lw $t6, %lo(pPlayer)($t6) -/* 0AE588 7F079A58 03E00008 */ jr $ra -/* 0AE58C 7F079A5C ADC40000 */ sw $a0, ($t6) -) -#endif - - - +void currentPlayerSetField00(s32 value) { + pPlayer->unknown = value; +} #ifdef NONMATCHING void *sub_GAME_7F079A60(void *arg0, void *arg1, void *arg2, s32 arg3, void *arg4) { @@ -4256,7 +2969,7 @@ glabel solo_char_load /* 0AE8DC 7F079DAC AFA00038 */ sw $zero, 0x38($sp) /* 0AE8E0 7F079DB0 0FC1F799 */ jal sub_GAME_7F07DE64 /* 0AE8E4 7F079DB4 8C84A0B0 */ lw $a0, %lo(pPlayer)($a0) -/* 0AE8E8 7F079DB8 0FC26919 */ jal get_num_players +/* 0AE8E8 7F079DB8 0FC26919 */ jal getPlayerCount /* 0AE8EC 7F079DBC 00000000 */ nop /* 0AE8F0 7F079DC0 24010001 */ li $at, 1 /* 0AE8F4 7F079DC4 14410066 */ bne $v0, $at, .L7F079F60 @@ -4405,7 +3118,7 @@ variable_body_head: /* 0AEAC8 7F079F98 8D6B99E0 */ lw $t3, %lo(starting_right_weapon)($t3) /* 0AEACC 7F079F9C AFAB0048 */ sw $t3, 0x48($sp) .L7F079FA0: -/* 0AEAD0 7F079FA0 0FC26919 */ jal get_num_players +/* 0AEAD0 7F079FA0 0FC26919 */ jal getPlayerCount /* 0AEAD4 7F079FA4 00000000 */ nop /* 0AEAD8 7F079FA8 24010001 */ li $at, 1 /* 0AEADC 7F079FAC 14410083 */ bne $v0, $at, .L7F07A1BC @@ -4631,7 +3344,7 @@ variable_body_head: /* 0AEE3C 7F07A30C 8FA40048 */ lw $a0, 0x48($sp) /* 0AEE40 7F07A310 04400045 */ bltz $v0, .L7F07A428 /* 0AEE44 7F07A314 AFA2004C */ sw $v0, 0x4c($sp) -/* 0AEE48 7F07A318 0FC26919 */ jal get_num_players +/* 0AEE48 7F07A318 0FC26919 */ jal getPlayerCount /* 0AEE4C 7F07A31C 00000000 */ nop /* 0AEE50 7F07A320 24010001 */ li $at, 1 /* 0AEE54 7F07A324 14410035 */ bne $v0, $at, .L7F07A3FC @@ -4819,7 +3532,7 @@ glabel solo_char_load /* 0AEF0C 7F07A39C AFA00038 */ sw $zero, 0x38($sp) /* 0AEF10 7F07A3A0 0FC1F922 */ jal sub_GAME_7F07DE64 /* 0AEF14 7F07A3A4 8C84A120 */ lw $a0, %lo(pPlayer)($a0) -/* 0AEF18 7F07A3A8 0FC26C01 */ jal get_num_players +/* 0AEF18 7F07A3A8 0FC26C01 */ jal getPlayerCount /* 0AEF1C 7F07A3AC 00000000 */ nop /* 0AEF20 7F07A3B0 24010001 */ li $at, 1 /* 0AEF24 7F07A3B4 14410066 */ bne $v0, $at, .Ljp7F07A550 @@ -4968,7 +3681,7 @@ variable_body_head: /* 0AF0F8 7F07A588 8D6B9A20 */ lw $t3, %lo(starting_right_weapon)($t3) /* 0AF0FC 7F07A58C AFAB0048 */ sw $t3, 0x48($sp) .Ljp7F07A590: -/* 0AF100 7F07A590 0FC26C01 */ jal get_num_players +/* 0AF100 7F07A590 0FC26C01 */ jal getPlayerCount /* 0AF104 7F07A594 00000000 */ nop /* 0AF108 7F07A598 24010001 */ li $at, 1 /* 0AF10C 7F07A59C 14410082 */ bne $v0, $at, .Ljp7F07A7A8 @@ -5207,7 +3920,7 @@ variable_body_head: /* 0AF49C 7F07A92C 8FA40048 */ lw $a0, 0x48($sp) /* 0AF4A0 7F07A930 04400045 */ bltz $v0, .Ljp7F07AA48 /* 0AF4A4 7F07A934 AFA2004C */ sw $v0, 0x4c($sp) -/* 0AF4A8 7F07A938 0FC26C01 */ jal get_num_players +/* 0AF4A8 7F07A938 0FC26C01 */ jal getPlayerCount /* 0AF4AC 7F07A93C 00000000 */ nop /* 0AF4B0 7F07A940 24010001 */ li $at, 1 /* 0AF4B4 7F07A944 14410035 */ bne $v0, $at, .Ljp7F07AA1C @@ -5322,7 +4035,7 @@ void maybe_solo_intro_camera_handler(void) { if (pPlayer->field_A8->unk4 != 0) { // Node 1 - if (get_num_players() == 1) + if (getPlayerCount() == 1) { // Node 2 disable_sounds_attached_to_player_then_something(pPlayer->field_A8); @@ -5348,7 +4061,7 @@ glabel maybe_solo_intro_camera_handler /* 0AEFE8 7F07A4B8 8DF80004 */ lw $t8, 4($t7) /* 0AEFEC 7F07A4BC 53000017 */ beql $t8, $zero, .L7F07A51C /* 0AEFF0 7F07A4C0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AEFF4 7F07A4C4 0FC26919 */ jal get_num_players +/* 0AEFF4 7F07A4C4 0FC26919 */ jal getPlayerCount /* 0AEFF8 7F07A4C8 00000000 */ nop /* 0AEFFC 7F07A4CC 3C038008 */ lui $v1, %hi(pPlayer) /* 0AF000 7F07A4D0 24010001 */ li $at, 1 @@ -5758,12 +4471,12 @@ glabel set_camera_mode /* 0AF550 7F07AA20 00002825 */ move $a1, $zero /* 0AF554 7F07AA24 00003025 */ move $a2, $zero /* 0AF558 7F07AA28 3C073F80 */ lui $a3, 0x3f80 -/* 0AF55C 7F07AA2C 0FC201EC */ jal set_rgba_tint +/* 0AF55C 7F07AA2C 0FC201EC */ jal currentPlayerSetFadeColour /* 0AF560 7F07AA30 E42464A4 */ swc1 $f4, %lo(D_800364A4)($at) /* 0AF564 7F07AA34 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AF568 7F07AA38 44816000 */ mtc1 $at, $f12 /* 0AF56C 7F07AA3C 44807000 */ mtc1 $zero, $f14 -/* 0AF570 7F07AA40 0FC20216 */ jal fade_to_over_seconds +/* 0AF570 7F07AA40 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AF574 7F07AA44 00000000 */ nop /* 0AF578 7F07AA48 0C001A57 */ jal get_stage_num /* 0AF57C 7F07AA4C 00000000 */ nop @@ -5785,13 +4498,13 @@ glabel set_camera_mode /* 0AF5B4 7F07AA84 00002025 */ move $a0, $zero /* 0AF5B8 7F07AA88 00002825 */ move $a1, $zero /* 0AF5BC 7F07AA8C 00003025 */ move $a2, $zero -/* 0AF5C0 7F07AA90 0FC201EC */ jal set_rgba_tint +/* 0AF5C0 7F07AA90 0FC201EC */ jal currentPlayerSetFadeColour /* 0AF5C4 7F07AA94 24070000 */ li $a3, 0 /* 0AF5C8 7F07AA98 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AF5CC 7F07AA9C 44816000 */ mtc1 $at, $f12 /* 0AF5D0 7F07AAA0 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0AF5D4 7F07AAA4 44817000 */ mtc1 $at, $f14 -/* 0AF5D8 7F07AAA8 0FC20216 */ jal fade_to_over_seconds +/* 0AF5D8 7F07AAA8 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AF5DC 7F07AAAC 00000000 */ nop /* 0AF5E0 7F07AAB0 100001B8 */ b .L7F07B194 /* 0AF5E4 7F07AAB4 8FBF002C */ lw $ra, 0x2c($sp) @@ -5826,12 +4539,12 @@ glabel set_camera_mode /* 0AF650 7F07AB20 AC20649C */ sw $zero, %lo(D_8003649C)($at) /* 0AF654 7F07AB24 00002825 */ move $a1, $zero /* 0AF658 7F07AB28 00003025 */ move $a2, $zero -/* 0AF65C 7F07AB2C 0FC201EC */ jal set_rgba_tint +/* 0AF65C 7F07AB2C 0FC201EC */ jal currentPlayerSetFadeColour /* 0AF660 7F07AB30 3C073F80 */ lui $a3, 0x3f80 /* 0AF664 7F07AB34 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AF668 7F07AB38 44816000 */ mtc1 $at, $f12 /* 0AF66C 7F07AB3C 44807000 */ mtc1 $zero, $f14 -/* 0AF670 7F07AB40 0FC20216 */ jal fade_to_over_seconds +/* 0AF670 7F07AB40 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AF674 7F07AB44 00000000 */ nop /* 0AF678 7F07AB48 0C001A57 */ jal get_stage_num /* 0AF67C 7F07AB4C 00000000 */ nop @@ -5858,7 +4571,7 @@ glabel set_camera_mode /* 0AF6D0 7F07ABA0 AC3964A8 */ sw $t9, %lo(D_800364A8)($at) /* 0AF6D4 7F07ABA4 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0AF6D8 7F07ABA8 44817000 */ mtc1 $at, $f14 -/* 0AF6DC 7F07ABAC 0FC20284 */ jal set_curplayer_fade +/* 0AF6DC 7F07ABAC 0FC20284 */ jal currentPlayerStartChrFade /* 0AF6E0 7F07ABB0 00000000 */ nop /* 0AF6E4 7F07ABB4 0FC1E73C */ jal solo_char_load /* 0AF6E8 7F07ABB8 00000000 */ nop @@ -5924,12 +4637,12 @@ glabel set_camera_mode /* 0AF7CC 7F07AC9C 00002025 */ move $a0, $zero /* 0AF7D0 7F07ACA0 00002825 */ move $a1, $zero /* 0AF7D4 7F07ACA4 00003025 */ move $a2, $zero -/* 0AF7D8 7F07ACA8 0FC201EC */ jal set_rgba_tint +/* 0AF7D8 7F07ACA8 0FC201EC */ jal currentPlayerSetFadeColour /* 0AF7DC 7F07ACAC 3C073F80 */ lui $a3, 0x3f80 /* 0AF7E0 7F07ACB0 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0AF7E4 7F07ACB4 44817000 */ mtc1 $at, $f14 /* 0AF7E8 7F07ACB8 44806000 */ mtc1 $zero, $f12 -/* 0AF7EC 7F07ACBC 0FC20216 */ jal fade_to_over_seconds +/* 0AF7EC 7F07ACBC 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AF7F0 7F07ACC0 00000000 */ nop /* 0AF7F4 7F07ACC4 1000000D */ b .L7F07ACFC /* 0AF7F8 7F07ACC8 00000000 */ nop @@ -5939,15 +4652,15 @@ glabel set_camera_mode /* 0AF804 7F07ACD4 00002825 */ move $a1, $zero /* 0AF808 7F07ACD8 11200008 */ beqz $t1, .L7F07ACFC /* 0AF80C 7F07ACDC 00003025 */ move $a2, $zero -/* 0AF810 7F07ACE0 0FC201EC */ jal set_rgba_tint +/* 0AF810 7F07ACE0 0FC201EC */ jal currentPlayerSetFadeColour /* 0AF814 7F07ACE4 3C073F80 */ lui $a3, 0x3f80 /* 0AF818 7F07ACE8 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AF81C 7F07ACEC 44816000 */ mtc1 $at, $f12 /* 0AF820 7F07ACF0 44807000 */ mtc1 $zero, $f14 -/* 0AF824 7F07ACF4 0FC20216 */ jal fade_to_over_seconds +/* 0AF824 7F07ACF4 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AF828 7F07ACF8 00000000 */ nop .L7F07ACFC: -/* 0AF82C 7F07ACFC 0FC26919 */ jal get_num_players +/* 0AF82C 7F07ACFC 0FC26919 */ jal getPlayerCount /* 0AF830 7F07AD00 00000000 */ nop /* 0AF834 7F07AD04 28410002 */ slti $at, $v0, 2 /* 0AF838 7F07AD08 14200006 */ bnez $at, .L7F07AD24 @@ -5987,12 +4700,12 @@ glabel set_camera_mode /* 0AF8B4 7F07AD84 3C018003 */ lui $at, %hi(D_800364A8) /* 0AF8B8 7F07AD88 AC2364A8 */ sw $v1, %lo(D_800364A8)($at) /* 0AF8BC 7F07AD8C 00003025 */ move $a2, $zero -/* 0AF8C0 7F07AD90 0FC201EC */ jal set_rgba_tint +/* 0AF8C0 7F07AD90 0FC201EC */ jal currentPlayerSetFadeColour /* 0AF8C4 7F07AD94 3C073F80 */ lui $a3, 0x3f80 /* 0AF8C8 7F07AD98 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AF8CC 7F07AD9C 44816000 */ mtc1 $at, $f12 /* 0AF8D0 7F07ADA0 44807000 */ mtc1 $zero, $f14 -/* 0AF8D4 7F07ADA4 0FC20216 */ jal fade_to_over_seconds +/* 0AF8D4 7F07ADA4 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AF8D8 7F07ADA8 00000000 */ nop /* 0AF8DC 7F07ADAC 3C028003 */ lui $v0, %hi(D_8003648C) /* 0AF8E0 7F07ADB0 8C42648C */ lw $v0, %lo(D_8003648C)($v0) @@ -6055,7 +4768,7 @@ glabel set_camera_mode /* 0AF9BC 7F07AE8C 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0AF9C0 7F07AE90 44817000 */ mtc1 $at, $f14 /* 0AF9C4 7F07AE94 44806000 */ mtc1 $zero, $f12 -/* 0AF9C8 7F07AE98 0FC20284 */ jal set_curplayer_fade +/* 0AF9C8 7F07AE98 0FC20284 */ jal currentPlayerStartChrFade /* 0AF9CC 7F07AE9C 00000000 */ nop /* 0AF9D0 7F07AEA0 0FC1E73C */ jal solo_char_load /* 0AF9D4 7F07AEA4 00000000 */ nop @@ -6197,13 +4910,13 @@ glabel set_camera_mode /* 0AFBD8 7F07B0A8 00002025 */ move $a0, $zero /* 0AFBDC 7F07B0AC 00002825 */ move $a1, $zero /* 0AFBE0 7F07B0B0 00003025 */ move $a2, $zero -/* 0AFBE4 7F07B0B4 0FC201EC */ jal set_rgba_tint +/* 0AFBE4 7F07B0B4 0FC201EC */ jal currentPlayerSetFadeColour /* 0AFBE8 7F07B0B8 24070000 */ li $a3, 0 /* 0AFBEC 7F07B0BC 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AFBF0 7F07B0C0 44816000 */ mtc1 $at, $f12 /* 0AFBF4 7F07B0C4 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0AFBF8 7F07B0C8 44817000 */ mtc1 $at, $f14 -/* 0AFBFC 7F07B0CC 0FC20216 */ jal fade_to_over_seconds +/* 0AFBFC 7F07B0CC 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AFC00 7F07B0D0 00000000 */ nop /* 0AFC04 7F07B0D4 1000002F */ b .L7F07B194 /* 0AFC08 7F07B0D8 8FBF002C */ lw $ra, 0x2c($sp) @@ -6231,7 +4944,7 @@ glabel set_camera_mode .L7F07B128: /* 0AFC58 7F07B128 5441001A */ bnel $v0, $at, .L7F07B194 /* 0AFC5C 7F07B12C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0AFC60 7F07B130 0FC26919 */ jal get_num_players +/* 0AFC60 7F07B130 0FC26919 */ jal getPlayerCount /* 0AFC64 7F07B134 00008025 */ move $s0, $zero /* 0AFC68 7F07B138 18400013 */ blez $v0, .L7F07B188 /* 0AFC6C 7F07B13C 00000000 */ nop @@ -6241,15 +4954,15 @@ glabel set_camera_mode /* 0AFC78 7F07B148 00002025 */ move $a0, $zero /* 0AFC7C 7F07B14C 00002825 */ move $a1, $zero /* 0AFC80 7F07B150 00003025 */ move $a2, $zero -/* 0AFC84 7F07B154 0FC201EC */ jal set_rgba_tint +/* 0AFC84 7F07B154 0FC201EC */ jal currentPlayerSetFadeColour /* 0AFC88 7F07B158 24070000 */ li $a3, 0 /* 0AFC8C 7F07B15C 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AFC90 7F07B160 44816000 */ mtc1 $at, $f12 /* 0AFC94 7F07B164 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0AFC98 7F07B168 44817000 */ mtc1 $at, $f14 -/* 0AFC9C 7F07B16C 0FC20216 */ jal fade_to_over_seconds +/* 0AFC9C 7F07B16C 0FC20216 */ jal currentPlayerSetFadeFrac /* 0AFCA0 7F07B170 00000000 */ nop -/* 0AFCA4 7F07B174 0FC26919 */ jal get_num_players +/* 0AFCA4 7F07B174 0FC26919 */ jal getPlayerCount /* 0AFCA8 7F07B178 26100001 */ addiu $s0, $s0, 1 /* 0AFCAC 7F07B17C 0202082A */ slt $at, $s0, $v0 /* 0AFCB0 7F07B180 1420FFEF */ bnez $at, .L7F07B140 @@ -6314,7 +5027,7 @@ glabel sub_GAME_7F07B1A4 /* 0AFD4C 7F07B21C 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0AFD50 7F07B220 44817000 */ mtc1 $at, $f14 /* 0AFD54 7F07B224 44806000 */ mtc1 $zero, $f12 -/* 0AFD58 7F07B228 0FC20284 */ jal set_curplayer_fade +/* 0AFD58 7F07B228 0FC20284 */ jal currentPlayerStartChrFade /* 0AFD5C 7F07B22C 00000000 */ nop /* 0AFD60 7F07B230 0FC1EA6E */ jal set_camera_mode /* 0AFD64 7F07B234 24040004 */ li $a0, 4 @@ -6622,7 +5335,7 @@ glabel sub_GAME_7F07B56C /* 0B0118 7F07B5E8 4500000C */ bc1f .L7F07B61C /* 0B011C 7F07B5EC 00000000 */ nop /* 0B0120 7F07B5F0 8C840EB8 */ lw $a0, %lo(ptrSecondFontTableLarge)($a0) -/* 0B0124 7F07B5F4 0FC228ED */ jal sub_GAME_7F08A3B4 +/* 0B0124 7F07B5F4 0FC228ED */ jal setFontTables /* 0B0128 7F07B5F8 8CA50EB4 */ lw $a1, %lo(ptrFirstFontTableLarge)($a1) /* 0B012C 7F07B5FC 3C0E8003 */ lui $t6, %hi(ptr_random06cam_entry) /* 0B0130 7F07B600 8DCE64C0 */ lw $t6, %lo(ptr_random06cam_entry)($t6) @@ -7052,7 +5765,7 @@ glabel sub_GAME_7F07B56C /* 0B0770 7F07BC40 00000000 */ nop /* 0B0774 7F07BC44 45000008 */ bc1f .L7F07BC68 /* 0B0778 7F07BC48 00000000 */ nop -/* 0B077C 7F07BC4C 0FC20284 */ jal set_curplayer_fade +/* 0B077C 7F07BC4C 0FC20284 */ jal currentPlayerStartChrFade /* 0B0780 7F07BC50 E7B00030 */ swc1 $f16, 0x30($sp) /* 0B0784 7F07BC54 3C088003 */ lui $t0, %hi(D_800364A8) /* 0B0788 7F07BC58 3C0A8003 */ lui $t2, %hi(D_800364A4) @@ -7064,7 +5777,7 @@ glabel sub_GAME_7F07B56C /* 0B079C 7F07BC6C 8DCE649C */ lw $t6, %lo(D_8003649C)($t6) /* 0B07A0 7F07BC70 51C0000D */ beql $t6, $zero, .L7F07BCA8 /* 0B07A4 7F07BC74 3C014270 */ lui $at, 0x4270 -/* 0B07A8 7F07BC78 0FC20223 */ jal check_if_fade_to_black_complete +/* 0B07A8 7F07BC78 0FC20223 */ jal currentPlayerIsFadeComplete /* 0B07AC 7F07BC7C E7B00030 */ swc1 $f16, 0x30($sp) /* 0B07B0 7F07BC80 3C088003 */ lui $t0, %hi(D_800364A8) /* 0B07B4 7F07BC84 3C0A8003 */ lui $t2, %hi(D_800364A4) @@ -7109,9 +5822,9 @@ glabel sub_GAME_7F07B56C /* 0B0848 7F07BD18 00002025 */ move $a0, $zero /* 0B084C 7F07BD1C 00002825 */ move $a1, $zero /* 0B0850 7F07BD20 00003025 */ move $a2, $zero -/* 0B0854 7F07BD24 0FC201EC */ jal set_rgba_tint +/* 0B0854 7F07BD24 0FC201EC */ jal currentPlayerSetFadeColour /* 0B0858 7F07BD28 8DE703DC */ lw $a3, 0x3dc($t7) -/* 0B085C 7F07BD2C 0FC20223 */ jal check_if_fade_to_black_complete +/* 0B085C 7F07BD2C 0FC20223 */ jal currentPlayerIsFadeComplete /* 0B0860 7F07BD30 00000000 */ nop /* 0B0864 7F07BD34 3C098008 */ lui $t1, %hi(pPlayer) /* 0B0868 7F07BD38 1040000C */ beqz $v0, .L7F07BD6C @@ -7120,7 +5833,7 @@ glabel sub_GAME_7F07B56C /* 0B0874 7F07BD44 44816000 */ mtc1 $at, $f12 /* 0B0878 7F07BD48 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0B087C 7F07BD4C 44817000 */ mtc1 $at, $f14 -/* 0B0880 7F07BD50 0FC20216 */ jal fade_to_over_seconds +/* 0B0880 7F07BD50 0FC20216 */ jal currentPlayerSetFadeFrac /* 0B0884 7F07BD54 00000000 */ nop /* 0B0888 7F07BD58 3C088003 */ lui $t0, %hi(D_800364A8) /* 0B088C 7F07BD5C 3C0A8003 */ lui $t2, %hi(D_800364A4) @@ -7131,7 +5844,7 @@ glabel sub_GAME_7F07B56C /* 0B089C 7F07BD6C 8D2C0000 */ lw $t4, ($t1) /* 0B08A0 7F07BD70 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0B08A4 7F07BD74 44817000 */ mtc1 $at, $f14 -/* 0B08A8 7F07BD78 0FC20216 */ jal fade_to_over_seconds +/* 0B08A8 7F07BD78 0FC20216 */ jal currentPlayerSetFadeFrac /* 0B08AC 7F07BD7C C58C03E0 */ lwc1 $f12, 0x3e0($t4) /* 0B08B0 7F07BD80 3C088003 */ lui $t0, %hi(D_800364A8) /* 0B08B4 7F07BD84 3C0A8003 */ lui $t2, %hi(D_800364A4) @@ -8144,7 +6857,7 @@ glabel sub_GAME_7F07B56C /* 0B0DD4 7F07C264 00000000 */ nop /* 0B0DD8 7F07C268 45000008 */ bc1f .Ljp7F07C28C /* 0B0DDC 7F07C26C 00000000 */ nop -/* 0B0DE0 7F07C270 0FC20408 */ jal set_curplayer_fade +/* 0B0DE0 7F07C270 0FC20408 */ jal currentPlayerStartChrFade /* 0B0DE4 7F07C274 E7B00030 */ swc1 $f16, 0x30($sp) /* 0B0DE8 7F07C278 3C088003 */ lui $t0, %hi(D_800364A8) # $t0, 0x8003 /* 0B0DEC 7F07C27C 3C0A8003 */ lui $t2, %hi(D_800364A4) # $t2, 0x8003 @@ -8156,7 +6869,7 @@ glabel sub_GAME_7F07B56C /* 0B0E00 7F07C290 8DCE64DC */ lw $t6, %lo(D_8003649C)($t6) /* 0B0E04 7F07C294 51C0000D */ beql $t6, $zero, .Ljp7F07C2CC /* 0B0E08 7F07C298 3C014270 */ lui $at, 0x4270 -/* 0B0E0C 7F07C29C 0FC203A7 */ jal check_if_fade_to_black_complete +/* 0B0E0C 7F07C29C 0FC203A7 */ jal currentPlayerIsFadeComplete /* 0B0E10 7F07C2A0 E7B00030 */ swc1 $f16, 0x30($sp) /* 0B0E14 7F07C2A4 3C088003 */ lui $t0, %hi(D_800364A8) # $t0, 0x8003 /* 0B0E18 7F07C2A8 3C0A8003 */ lui $t2, %hi(D_800364A4) # $t2, 0x8003 @@ -8201,9 +6914,9 @@ glabel sub_GAME_7F07B56C /* 0B0EAC 7F07C33C 00002025 */ move $a0, $zero /* 0B0EB0 7F07C340 00002825 */ move $a1, $zero /* 0B0EB4 7F07C344 00003025 */ move $a2, $zero -/* 0B0EB8 7F07C348 0FC20370 */ jal set_rgba_tint +/* 0B0EB8 7F07C348 0FC20370 */ jal currentPlayerSetFadeColour /* 0B0EBC 7F07C34C 8DE703DC */ lw $a3, 0x3dc($t7) -/* 0B0EC0 7F07C350 0FC203A7 */ jal check_if_fade_to_black_complete +/* 0B0EC0 7F07C350 0FC203A7 */ jal currentPlayerIsFadeComplete /* 0B0EC4 7F07C354 00000000 */ nop /* 0B0EC8 7F07C358 3C098008 */ lui $t1, %hi(pPlayer) # $t1, 0x8008 /* 0B0ECC 7F07C35C 1040000C */ beqz $v0, .Ljp7F07C390 @@ -8212,7 +6925,7 @@ glabel sub_GAME_7F07B56C /* 0B0ED8 7F07C368 44816000 */ mtc1 $at, $f12 /* 0B0EDC 7F07C36C 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0B0EE0 7F07C370 44817000 */ mtc1 $at, $f14 -/* 0B0EE4 7F07C374 0FC2039A */ jal fade_to_over_seconds +/* 0B0EE4 7F07C374 0FC2039A */ jal currentPlayerSetFadeFrac /* 0B0EE8 7F07C378 00000000 */ nop /* 0B0EEC 7F07C37C 3C088003 */ lui $t0, %hi(D_800364A8) # $t0, 0x8003 /* 0B0EF0 7F07C380 3C0A8003 */ lui $t2, %hi(D_800364A4) # $t2, 0x8003 @@ -8223,7 +6936,7 @@ glabel sub_GAME_7F07B56C /* 0B0F00 7F07C390 8D2C0000 */ lw $t4, ($t1) /* 0B0F04 7F07C394 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0B0F08 7F07C398 44817000 */ mtc1 $at, $f14 -/* 0B0F0C 7F07C39C 0FC2039A */ jal fade_to_over_seconds +/* 0B0F0C 7F07C39C 0FC2039A */ jal currentPlayerSetFadeFrac /* 0B0F10 7F07C3A0 C58C03E0 */ lwc1 $f12, 0x3e0($t4) /* 0B0F14 7F07C3A4 3C088003 */ lui $t0, %hi(D_800364A8) # $t0, 0x8003 /* 0B0F18 7F07C3A8 3C0A8003 */ lui $t2, %hi(D_800364A4) # $t2, 0x8003 @@ -8782,7 +7495,7 @@ void set_BONDdata_autoaim_y(s32 param_1) #ifdef NONMATCHING s32 get_BONDdata_autoaim_y(void) { - if (get_num_players() == 1) { + if (getPlayerCount() == 1) { return pPlayer->autoyaimenabled; } else { @@ -8795,7 +7508,7 @@ GLOBAL_ASM( glabel get_BONDdata_autoaim_y /* 0B10B0 7F07C580 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0B10B4 7F07C584 AFBF0014 */ sw $ra, 0x14($sp) -/* 0B10B8 7F07C588 0FC26919 */ jal get_num_players +/* 0B10B8 7F07C588 0FC26919 */ jal getPlayerCount /* 0B10BC 7F07C58C 00000000 */ nop /* 0B10C0 7F07C590 24010001 */ li $at, 1 /* 0B10C4 7F07C594 14410005 */ bne $v0, $at, .L7F07C5AC @@ -8888,7 +7601,7 @@ void set_BONDdata_autoaim_x(s32 param_1) { #ifdef NONMATCHING void get_BONDdata_autoaim_x(void) { // Node 0 - if (get_num_players() != 1) + if (getPlayerCount() != 1) { // Node 2 // Node 3 @@ -8903,7 +7616,7 @@ GLOBAL_ASM( glabel get_BONDdata_autoaim_x /* 0B1198 7F07C668 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0B119C 7F07C66C AFBF0014 */ sw $ra, 0x14($sp) -/* 0B11A0 7F07C670 0FC26919 */ jal get_num_players +/* 0B11A0 7F07C670 0FC26919 */ jal getPlayerCount /* 0B11A4 7F07C674 00000000 */ nop /* 0B11A8 7F07C678 24010001 */ li $at, 1 /* 0B11AC 7F07C67C 14410005 */ bne $v0, $at, .L7F07C694 @@ -9788,36 +8501,14 @@ s32 get_intank_flag(void) { -#ifdef NONMATCHING -void get_ptr_for_players_tank(void) { - // Node 0 +s32 get_ptr_for_players_tank(void) +{ if (in_tank_flag == 1) { - // Node 1 return ptr_playerstank; } - // Node 2 return 0; } -#else -GLOBAL_ASM( -.text -glabel get_ptr_for_players_tank -/* 0B19B4 7F07CE84 3C0E8003 */ lui $t6, %hi(in_tank_flag) -/* 0B19B8 7F07CE88 8DCE6448 */ lw $t6, %lo(in_tank_flag)($t6) -/* 0B19BC 7F07CE8C 24010001 */ li $at, 1 -/* 0B19C0 7F07CE90 00001025 */ move $v0, $zero -/* 0B19C4 7F07CE94 15C10004 */ bne $t6, $at, .L7F07CEA8 -/* 0B19C8 7F07CE98 00000000 */ nop -/* 0B19CC 7F07CE9C 3C028003 */ lui $v0, %hi(ptr_playerstank) -/* 0B19D0 7F07CEA0 03E00008 */ jr $ra -/* 0B19D4 7F07CEA4 8C426450 */ lw $v0, %lo(ptr_playerstank)($v0) - -.L7F07CEA8: -/* 0B19D8 7F07CEA8 03E00008 */ jr $ra -/* 0B19DC 7F07CEAC 00000000 */ nop -) -#endif @@ -9988,7 +8679,7 @@ s32 cal_player_collision(void *arg0, void *arg1) { if (sub_GAME_7F0B239C(&sp3C) != 0) { // Node 9 - pPlayer->field_29FC = 0; + pPlayer->autocrouchpos = 0; } // Node 10 if ((sub_GAME_7F0B0E24(&sp90, pPlayer->field_48C, pPlayer->field_494, *arg0, (f32) arg0->unk8, sp8C, sp88, sp84, 0.0f, 1.0f) != 0) && (sub_GAME_7F0B18B8(&sp90, *arg0, arg0->unk8, sp80, sp8C, sp88, sp84) < 0)) @@ -10006,18 +8697,18 @@ s32 cal_player_collision(void *arg0, void *arg1) { { // Node 20 phi_v1 = pPlayer; - if (dword_CODE_bss_8007BA04 != 0) + if (stanSavedColl_posData != 0) { // Node 21 phi_v1 = pPlayer; - if (*dword_CODE_bss_8007BA04 == 1) + if (*stanSavedColl_posData == 1) { // Node 22 phi_v1 = pPlayer; - if (dword_CODE_bss_8007BA04->unk4->unk3 == &D_8003644C) + if (stanSavedColl_posData->unk4->unk3 == &D_8003644C) { // Node 23 - D_8003644C = (void *) dword_CODE_bss_8007BA04; + D_8003644C = (void *) stanSavedColl_posData; phi_v1 = pPlayer; } } @@ -10040,18 +8731,18 @@ s32 cal_player_collision(void *arg0, void *arg1) { { // Node 20 phi_v1 = pPlayer; - if (dword_CODE_bss_8007BA04 != 0) + if (stanSavedColl_posData != 0) { // Node 21 phi_v1 = pPlayer; - if (*dword_CODE_bss_8007BA04 == 1) + if (*stanSavedColl_posData == 1) { // Node 22 phi_v1 = pPlayer; - if (dword_CODE_bss_8007BA04->unk4->unk3 == &D_8003644C) + if (stanSavedColl_posData->unk4->unk3 == &D_8003644C) { // Node 23 - D_8003644C = (void *) dword_CODE_bss_8007BA04; + D_8003644C = (void *) stanSavedColl_posData; phi_v1 = pPlayer; } } @@ -10068,18 +8759,18 @@ s32 cal_player_collision(void *arg0, void *arg1) { { // Node 20 phi_v1 = pPlayer; - if (dword_CODE_bss_8007BA04 != 0) + if (stanSavedColl_posData != 0) { // Node 21 phi_v1 = pPlayer; - if (*dword_CODE_bss_8007BA04 == 1) + if (*stanSavedColl_posData == 1) { // Node 22 phi_v1 = pPlayer; - if (dword_CODE_bss_8007BA04->unk4->unk3 == &D_8003644C) + if (stanSavedColl_posData->unk4->unk3 == &D_8003644C) { // Node 23 - D_8003644C = (void *) dword_CODE_bss_8007BA04; + D_8003644C = (void *) stanSavedColl_posData; phi_v1 = pPlayer; } } @@ -10250,10 +8941,10 @@ glabel cal_player_collision .L7F07D1B4: /* 0B1CE4 7F07D1B4 3C0A8003 */ lui $t2, %hi(ptr_playerstank) /* 0B1CE8 7F07D1B8 8D4A6450 */ lw $t2, %lo(ptr_playerstank)($t2) -/* 0B1CEC 7F07D1BC 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007BA04) +/* 0B1CEC 7F07D1BC 3C028008 */ lui $v0, %hi(stanSavedColl_posData) /* 0B1CF0 7F07D1C0 5540000F */ bnezl $t2, .L7F07D200 /* 0B1CF4 7F07D1C4 8C6400A8 */ lw $a0, 0xa8($v1) -/* 0B1CF8 7F07D1C8 8C42BA04 */ lw $v0, %lo(dword_CODE_bss_8007BA04)($v0) +/* 0B1CF8 7F07D1C8 8C42BA04 */ lw $v0, %lo(stanSavedColl_posData)($v0) /* 0B1CFC 7F07D1CC 5040000C */ beql $v0, $zero, .L7F07D200 /* 0B1D00 7F07D1D0 8C6400A8 */ lw $a0, 0xa8($v1) /* 0B1D04 7F07D1D4 904B0000 */ lbu $t3, ($v0) @@ -10300,7 +8991,7 @@ void sub_GAME_7F07D234(void *arg0, s32 arg1, ? arg2) { if (cal_player_collision(arg0, &sp1C) == 0) { // Node 2 - sub_GAME_7F0B28B0(arg1, arg2); + getCollisionEdge_maybe(arg1, arg2); // Node 3 return 0; } @@ -10340,7 +9031,7 @@ glabel sub_GAME_7F07D234 /* 0B1DC0 7F07D290 E7260494 */ swc1 $f6, 0x494($t9) .L7F07D294: /* 0B1DC4 7F07D294 8FA40024 */ lw $a0, 0x24($sp) -/* 0B1DC8 7F07D298 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 0B1DC8 7F07D298 0FC2CA2C */ jal getCollisionEdge_maybe /* 0B1DCC 7F07D29C 8FA50028 */ lw $a1, 0x28($sp) /* 0B1DD0 7F07D2A0 00001025 */ move $v0, $zero .L7F07D2A4: @@ -10447,7 +9138,7 @@ glabel sub_GAME_7F07D2B4 .L7F07D3F8: /* 0B1F28 7F07D3F8 8FB00090 */ lw $s0, 0x90($sp) /* 0B1F2C 7F07D3FC 8FA4008C */ lw $a0, 0x8c($sp) -/* 0B1F30 7F07D400 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 0B1F30 7F07D400 0FC2CA2C */ jal getCollisionEdge_maybe /* 0B1F34 7F07D404 02002825 */ move $a1, $s0 /* 0B1F38 7F07D408 8FA3008C */ lw $v1, 0x8c($sp) /* 0B1F3C 7F07D40C C6300000 */ lwc1 $f16, ($s1) @@ -11211,8 +9902,8 @@ glabel sub_GAME_7F07D960 /* 0B28E8 7F07DDB8 11A00008 */ beqz $t5, .L7F07DDDC /* 0B28EC 7F07DDBC 00000000 */ nop /* 0B28F0 7F07DDC0 14870005 */ bne $a0, $a3, .L7F07DDD8 -/* 0B28F4 7F07DDC4 3C0F8004 */ lui $t7, %hi(base_ptr_connection_vals) -/* 0B28F8 7F07DDC8 8DEF0F58 */ lw $t7, %lo(base_ptr_connection_vals)($t7) +/* 0B28F4 7F07DDC4 3C0F8004 */ lui $t7, %hi(standTileStart) +/* 0B28F8 7F07DDC8 8DEF0F58 */ lw $t7, %lo(standTileStart)($t7) /* 0B28FC 7F07DDCC 000570C0 */ sll $t6, $a1, 3 /* 0B2900 7F07DDD0 10000004 */ b .L7F07DDE4 /* 0B2904 7F07DDD4 01CF8021 */ addu $s0, $t6, $t7 @@ -11261,8 +9952,8 @@ glabel sub_GAME_7F07D960 #endif -void sub_GAME_7F07DE64(struct Player *player) { - sub_GAME_7F03DE94(player->position_data_pointer, player->field_2A04, player); +void sub_GAME_7F07DE64(struct player *player) { + sub_GAME_7F03DE94(player->prop, player->field_2A04, player); player->field_2A04 = -1; } @@ -12490,8 +11181,16 @@ glabel sub_GAME_7F07E964 #ifdef NONMATCHING -void sub_GAME_7F07EA78(void) { - +// Regalloc, v1 and v0 switched +f32 sub_GAME_7F07EA78() { + s32 temp_v1 = pPlayer->step_in_view_watch_animation; + if (temp_v1 == 1 || temp_v1 == 2) { + return pPlayer->pause_animation_counter / 20.0f; + } + else if (temp_v1 == 3) { + return 1.0f; + } + return 0.0f; } #else GLOBAL_ASM( @@ -14657,400 +13356,119 @@ glabel trigger_solo_watch_menu ) #endif - - - - -#ifdef NONMATCHING void sub_GAME_7F07FCC4(s32 arg0) { - // Node 0 - if (arg0 == -1) - { - // Node 1 - pPlayer->speedstrafe = (f32) (pPlayer->speedstrafe - global_timer_delta); - if (pPlayer->speedstrafe < -1.0f) - { - // Node 2 + if (arg0 == -1) { + pPlayer->speedstrafe = (pPlayer->speedstrafe - global_timer_delta); + if (pPlayer->speedstrafe < -1.0f) { pPlayer->speedstrafe = -1.0f; } } - else - { - // Node 3 - if (arg0 == 1) - { - // Node 4 - pPlayer->speedstrafe = (f32) (pPlayer->speedstrafe + global_timer_delta); - if (1.0f < pPlayer->speedstrafe) - { - // Node 5 + else { + if (arg0 == 1) { + pPlayer->speedstrafe = (pPlayer->speedstrafe + global_timer_delta); + if (1.0f < pPlayer->speedstrafe) { pPlayer->speedstrafe = 1.0f; } - } - else - { - // Node 6 - if (0.0f < pPlayer->speedstrafe) - { - // Node 7 - pPlayer->speedstrafe = (f32) (pPlayer->speedstrafe - global_timer_delta); - if (pPlayer->speedstrafe < 0.0f) - { - // Node 8 + } else { + if (0.0f < pPlayer->speedstrafe) { + pPlayer->speedstrafe = (pPlayer->speedstrafe - global_timer_delta); + if (pPlayer->speedstrafe < 0.0f) { pPlayer->speedstrafe = 0.0f; } - } - else - { - // Node 9 - pPlayer->speedstrafe = (f32) (pPlayer->speedstrafe + global_timer_delta); - if (0.0f < pPlayer->speedstrafe) - { - // Node 10 + } else { + pPlayer->speedstrafe = (pPlayer->speedstrafe + global_timer_delta); + if (0.0f < pPlayer->speedstrafe) { pPlayer->speedstrafe = 0.0f; } } } } - // Node 11 - pPlayer->speedsideways = (f32) pPlayer->speedstrafe; - return; + pPlayer->speedsideways = pPlayer->speedstrafe; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F07FCC4 -/* 0B47F4 7F07FCC4 2401FFFF */ li $at, -1 -/* 0B47F8 7F07FCC8 14810015 */ bne $a0, $at, .L7F07FD20 -/* 0B47FC 7F07FCCC 3C038008 */ lui $v1, %hi(pPlayer) -/* 0B4800 7F07FCD0 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0B4804 7F07FCD4 8C620000 */ lw $v0, ($v1) -/* 0B4808 7F07FCD8 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0B480C 7F07FCDC 44811000 */ mtc1 $at, $f2 -/* 0B4810 7F07FCE0 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B4814 7F07FCE4 C4268378 */ lwc1 $f6, %lo(global_timer_delta)($at) -/* 0B4818 7F07FCE8 C4440170 */ lwc1 $f4, 0x170($v0) -/* 0B481C 7F07FCEC 46062201 */ sub.s $f8, $f4, $f6 -/* 0B4820 7F07FCF0 E4480170 */ swc1 $f8, 0x170($v0) -/* 0B4824 7F07FCF4 8C620000 */ lw $v0, ($v1) -/* 0B4828 7F07FCF8 C4400170 */ lwc1 $f0, 0x170($v0) -/* 0B482C 7F07FCFC 4602003C */ c.lt.s $f0, $f2 -/* 0B4830 7F07FD00 00000000 */ nop -/* 0B4834 7F07FD04 45000043 */ bc1f .L7F07FE14 -/* 0B4838 7F07FD08 00000000 */ nop -/* 0B483C 7F07FD0C E4420170 */ swc1 $f2, 0x170($v0) -/* 0B4840 7F07FD10 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B4844 7F07FD14 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B4848 7F07FD18 1000003E */ b .L7F07FE14 -/* 0B484C 7F07FD1C C4400170 */ lwc1 $f0, 0x170($v0) -.L7F07FD20: -/* 0B4850 7F07FD20 24010001 */ li $at, 1 -/* 0B4854 7F07FD24 14810016 */ bne $a0, $at, .L7F07FD80 -/* 0B4858 7F07FD28 3C038008 */ lui $v1, %hi(pPlayer) -/* 0B485C 7F07FD2C 3C038008 */ lui $v1, %hi(pPlayer) -/* 0B4860 7F07FD30 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0B4864 7F07FD34 8C620000 */ lw $v0, ($v1) -/* 0B4868 7F07FD38 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0B486C 7F07FD3C 44811000 */ mtc1 $at, $f2 -/* 0B4870 7F07FD40 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B4874 7F07FD44 C4308378 */ lwc1 $f16, %lo(global_timer_delta)($at) -/* 0B4878 7F07FD48 C44A0170 */ lwc1 $f10, 0x170($v0) -/* 0B487C 7F07FD4C 46105480 */ add.s $f18, $f10, $f16 -/* 0B4880 7F07FD50 E4520170 */ swc1 $f18, 0x170($v0) -/* 0B4884 7F07FD54 8C620000 */ lw $v0, ($v1) -/* 0B4888 7F07FD58 C4400170 */ lwc1 $f0, 0x170($v0) -/* 0B488C 7F07FD5C 4600103C */ c.lt.s $f2, $f0 -/* 0B4890 7F07FD60 00000000 */ nop -/* 0B4894 7F07FD64 4500002B */ bc1f .L7F07FE14 -/* 0B4898 7F07FD68 00000000 */ nop -/* 0B489C 7F07FD6C E4420170 */ swc1 $f2, 0x170($v0) -/* 0B48A0 7F07FD70 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B48A4 7F07FD74 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B48A8 7F07FD78 10000026 */ b .L7F07FE14 -/* 0B48AC 7F07FD7C C4400170 */ lwc1 $f0, 0x170($v0) -.L7F07FD80: -/* 0B48B0 7F07FD80 2463A0B0 */ addiu $v1, $v1, %lo(pPlayer) -/* 0B48B4 7F07FD84 8C620000 */ lw $v0, ($v1) -/* 0B48B8 7F07FD88 44801000 */ mtc1 $zero, $f2 -/* 0B48BC 7F07FD8C 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B48C0 7F07FD90 C4400170 */ lwc1 $f0, 0x170($v0) -/* 0B48C4 7F07FD94 4600103C */ c.lt.s $f2, $f0 -/* 0B48C8 7F07FD98 00000000 */ nop -/* 0B48CC 7F07FD9C 45000010 */ bc1f .L7F07FDE0 -/* 0B48D0 7F07FDA0 00000000 */ nop -/* 0B48D4 7F07FDA4 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B48D8 7F07FDA8 C4248378 */ lwc1 $f4, %lo(global_timer_delta)($at) -/* 0B48DC 7F07FDAC 46040181 */ sub.s $f6, $f0, $f4 -/* 0B48E0 7F07FDB0 E4460170 */ swc1 $f6, 0x170($v0) -/* 0B48E4 7F07FDB4 8C620000 */ lw $v0, ($v1) -/* 0B48E8 7F07FDB8 C4400170 */ lwc1 $f0, 0x170($v0) -/* 0B48EC 7F07FDBC 4602003C */ c.lt.s $f0, $f2 -/* 0B48F0 7F07FDC0 00000000 */ nop -/* 0B48F4 7F07FDC4 45000013 */ bc1f .L7F07FE14 -/* 0B48F8 7F07FDC8 00000000 */ nop -/* 0B48FC 7F07FDCC E4420170 */ swc1 $f2, 0x170($v0) -/* 0B4900 7F07FDD0 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B4904 7F07FDD4 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B4908 7F07FDD8 1000000E */ b .L7F07FE14 -/* 0B490C 7F07FDDC C4400170 */ lwc1 $f0, 0x170($v0) -.L7F07FDE0: -/* 0B4910 7F07FDE0 C4288378 */ lwc1 $f8, %lo(global_timer_delta)($at) -/* 0B4914 7F07FDE4 46080280 */ add.s $f10, $f0, $f8 -/* 0B4918 7F07FDE8 E44A0170 */ swc1 $f10, 0x170($v0) -/* 0B491C 7F07FDEC 8C620000 */ lw $v0, ($v1) -/* 0B4920 7F07FDF0 C4400170 */ lwc1 $f0, 0x170($v0) -/* 0B4924 7F07FDF4 4600103C */ c.lt.s $f2, $f0 -/* 0B4928 7F07FDF8 00000000 */ nop -/* 0B492C 7F07FDFC 45000005 */ bc1f .L7F07FE14 -/* 0B4930 7F07FE00 00000000 */ nop -/* 0B4934 7F07FE04 E4420170 */ swc1 $f2, 0x170($v0) -/* 0B4938 7F07FE08 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B493C 7F07FE0C 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B4940 7F07FE10 C4400170 */ lwc1 $f0, 0x170($v0) -.L7F07FE14: -/* 0B4944 7F07FE14 03E00008 */ jr $ra -/* 0B4948 7F07FE18 E440016C */ swc1 $f0, 0x16c($v0) -) -#endif - - - - -#ifdef NONMATCHING void sub_GAME_7F07FE1C(s32 arg0) { - // Node 0 - if (arg0 == 1) - { - // Node 1 - pPlayer->field_2A4C = (f32) (pPlayer->field_2A4C + global_timer_delta); - if (1.0f < pPlayer->field_2A4C) - { - // Node 2 + if (arg0 == 1) { + pPlayer->field_2A4C = (pPlayer->field_2A4C + global_timer_delta); + if (1.0f < pPlayer->field_2A4C) { pPlayer->field_2A4C = 1.0f; } - } - else - { - // Node 3 - if (arg0 == -1) - { - // Node 4 - pPlayer->field_2A4C = (f32) (pPlayer->field_2A4C - global_timer_delta); - if (pPlayer->field_2A4C < -1.0f) - { - // Node 5 + } else { + if (arg0 == -1) { + pPlayer->field_2A4C = (pPlayer->field_2A4C - global_timer_delta); + if (pPlayer->field_2A4C < -1.0f) { pPlayer->field_2A4C = -1.0f; } - } - else - { - // Node 6 - if (0.0f < pPlayer->field_2A4C) - { - // Node 7 - pPlayer->field_2A4C = (f32) (pPlayer->field_2A4C - global_timer_delta); - if (pPlayer->field_2A4C < 0.0f) - { - // Node 8 + } else { + if (0.0f < pPlayer->field_2A4C) { + pPlayer->field_2A4C = (pPlayer->field_2A4C - global_timer_delta); + if (pPlayer->field_2A4C < 0.0f) { pPlayer->field_2A4C = 0.0f; } - } - else - { - // Node 9 - pPlayer->field_2A4C = (f32) (pPlayer->field_2A4C + global_timer_delta); - if (0.0f < pPlayer->field_2A4C) - { - // Node 10 + } else { + pPlayer->field_2A4C = (pPlayer->field_2A4C + global_timer_delta); + if (0.0f < pPlayer->field_2A4C) { pPlayer->field_2A4C = 0.0f; } } } } - // Node 11 - pPlayer->speedforwards = (f32) pPlayer->field_2A4C; - return; + pPlayer->speedforwards = pPlayer->field_2A4C; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F07FE1C -/* 0B494C 7F07FE1C 24010001 */ li $at, 1 -/* 0B4950 7F07FE20 14810015 */ bne $a0, $at, .L7F07FE78 -/* 0B4954 7F07FE24 3C038008 */ lui $v1, %hi(pPlayer) -/* 0B4958 7F07FE28 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0B495C 7F07FE2C 8C620000 */ lw $v0, ($v1) -/* 0B4960 7F07FE30 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0B4964 7F07FE34 44811000 */ mtc1 $at, $f2 -/* 0B4968 7F07FE38 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B496C 7F07FE3C C4268378 */ lwc1 $f6, %lo(global_timer_delta)($at) -/* 0B4970 7F07FE40 C4442A4C */ lwc1 $f4, 0x2a4c($v0) -/* 0B4974 7F07FE44 46062200 */ add.s $f8, $f4, $f6 -/* 0B4978 7F07FE48 E4482A4C */ swc1 $f8, 0x2a4c($v0) -/* 0B497C 7F07FE4C 8C620000 */ lw $v0, ($v1) -/* 0B4980 7F07FE50 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -/* 0B4984 7F07FE54 4600103C */ c.lt.s $f2, $f0 -/* 0B4988 7F07FE58 00000000 */ nop -/* 0B498C 7F07FE5C 45000043 */ bc1f .L7F07FF6C -/* 0B4990 7F07FE60 00000000 */ nop -/* 0B4994 7F07FE64 E4422A4C */ swc1 $f2, 0x2a4c($v0) -/* 0B4998 7F07FE68 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B499C 7F07FE6C 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B49A0 7F07FE70 1000003E */ b .L7F07FF6C -/* 0B49A4 7F07FE74 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -.L7F07FE78: -/* 0B49A8 7F07FE78 2401FFFF */ li $at, -1 -/* 0B49AC 7F07FE7C 14810016 */ bne $a0, $at, .L7F07FED8 -/* 0B49B0 7F07FE80 3C038008 */ lui $v1, %hi(pPlayer) -/* 0B49B4 7F07FE84 3C038008 */ lui $v1, %hi(pPlayer) -/* 0B49B8 7F07FE88 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0B49BC 7F07FE8C 8C620000 */ lw $v0, ($v1) -/* 0B49C0 7F07FE90 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0B49C4 7F07FE94 44811000 */ mtc1 $at, $f2 -/* 0B49C8 7F07FE98 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B49CC 7F07FE9C C4308378 */ lwc1 $f16, %lo(global_timer_delta)($at) -/* 0B49D0 7F07FEA0 C44A2A4C */ lwc1 $f10, 0x2a4c($v0) -/* 0B49D4 7F07FEA4 46105481 */ sub.s $f18, $f10, $f16 -/* 0B49D8 7F07FEA8 E4522A4C */ swc1 $f18, 0x2a4c($v0) -/* 0B49DC 7F07FEAC 8C620000 */ lw $v0, ($v1) -/* 0B49E0 7F07FEB0 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -/* 0B49E4 7F07FEB4 4602003C */ c.lt.s $f0, $f2 -/* 0B49E8 7F07FEB8 00000000 */ nop -/* 0B49EC 7F07FEBC 4500002B */ bc1f .L7F07FF6C -/* 0B49F0 7F07FEC0 00000000 */ nop -/* 0B49F4 7F07FEC4 E4422A4C */ swc1 $f2, 0x2a4c($v0) -/* 0B49F8 7F07FEC8 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B49FC 7F07FECC 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B4A00 7F07FED0 10000026 */ b .L7F07FF6C -/* 0B4A04 7F07FED4 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -.L7F07FED8: -/* 0B4A08 7F07FED8 2463A0B0 */ addiu $v1, $v1, %lo(pPlayer) -/* 0B4A0C 7F07FEDC 8C620000 */ lw $v0, ($v1) -/* 0B4A10 7F07FEE0 44801000 */ mtc1 $zero, $f2 -/* 0B4A14 7F07FEE4 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B4A18 7F07FEE8 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -/* 0B4A1C 7F07FEEC 4600103C */ c.lt.s $f2, $f0 -/* 0B4A20 7F07FEF0 00000000 */ nop -/* 0B4A24 7F07FEF4 45000010 */ bc1f .L7F07FF38 -/* 0B4A28 7F07FEF8 00000000 */ nop -/* 0B4A2C 7F07FEFC 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B4A30 7F07FF00 C4248378 */ lwc1 $f4, %lo(global_timer_delta)($at) -/* 0B4A34 7F07FF04 46040181 */ sub.s $f6, $f0, $f4 -/* 0B4A38 7F07FF08 E4462A4C */ swc1 $f6, 0x2a4c($v0) -/* 0B4A3C 7F07FF0C 8C620000 */ lw $v0, ($v1) -/* 0B4A40 7F07FF10 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -/* 0B4A44 7F07FF14 4602003C */ c.lt.s $f0, $f2 -/* 0B4A48 7F07FF18 00000000 */ nop -/* 0B4A4C 7F07FF1C 45000013 */ bc1f .L7F07FF6C -/* 0B4A50 7F07FF20 00000000 */ nop -/* 0B4A54 7F07FF24 E4422A4C */ swc1 $f2, 0x2a4c($v0) -/* 0B4A58 7F07FF28 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B4A5C 7F07FF2C 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B4A60 7F07FF30 1000000E */ b .L7F07FF6C -/* 0B4A64 7F07FF34 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -.L7F07FF38: -/* 0B4A68 7F07FF38 C4288378 */ lwc1 $f8, %lo(global_timer_delta)($at) -/* 0B4A6C 7F07FF3C 46080280 */ add.s $f10, $f0, $f8 -/* 0B4A70 7F07FF40 E44A2A4C */ swc1 $f10, 0x2a4c($v0) -/* 0B4A74 7F07FF44 8C620000 */ lw $v0, ($v1) -/* 0B4A78 7F07FF48 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -/* 0B4A7C 7F07FF4C 4600103C */ c.lt.s $f2, $f0 -/* 0B4A80 7F07FF50 00000000 */ nop -/* 0B4A84 7F07FF54 45000005 */ bc1f .L7F07FF6C -/* 0B4A88 7F07FF58 00000000 */ nop -/* 0B4A8C 7F07FF5C E4422A4C */ swc1 $f2, 0x2a4c($v0) -/* 0B4A90 7F07FF60 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B4A94 7F07FF64 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B4A98 7F07FF68 C4402A4C */ lwc1 $f0, 0x2a4c($v0) -.L7F07FF6C: -/* 0B4A9C 7F07FF6C 03E00008 */ jr $ra -/* 0B4AA0 7F07FF70 E4400174 */ swc1 $f0, 0x174($v0) -) -#endif - - +f32 viGetFovY(void); +f32 sub_GAME_7F07FF74(f32 value) { + if (value > 0) { + return (viGetFovY() * value * -0.7f) / 60.0f; + } + + if (value < 0) { + return (viGetFovY() * -value * 0.7f) / 60.0f; + } + + return 0; +} #ifdef NONMATCHING -f32 sub_GAME_7F07FF74(f32 arg0) { - // Node 0 - if (0.0f < arg0) - { - // Node 1 - return 0.0f; +// global_timer_delta should be loaded and multiplied two more times +void currentPlayerUpdateSpeedVerta(f32 value) { + f32 mult = viGetFovY() / 60.0f; + f32 limit = sub_GAME_7F07FF74(value); + if (value > 0) { + if (pPlayer->speedverta > 0) { + pPlayer->speedverta -= (0.05f * global_timer_delta * mult); + } else { + pPlayer->speedverta -= (0.0125f * global_timer_delta * mult); + } + + if (pPlayer->speedverta < limit) { + pPlayer->speedverta = limit; + } + } else if (value < 0) { + if (pPlayer->speedverta < 0) { + pPlayer->speedverta += (0.05f * 0.0125f * mult); + } else { + pPlayer->speedverta += (0.0125f * global_timer_delta * mult); + } + + if (pPlayer->speedverta > limit) { + pPlayer->speedverta = limit; + } + } else { + if (pPlayer->speedverta > limit) { + pPlayer->speedverta -= (0.05f * 0.05f * mult); + + if (pPlayer->speedverta < limit) { + pPlayer->speedverta = limit; + } + } else { + pPlayer->speedverta += (0.05f * global_timer_delta * mult); + + if (pPlayer->speedverta > limit) { + pPlayer->speedverta = limit; + } + } } - // Node 2 - if (arg0 >= 0.0f) - { - // Node 4 - // Node 5 - return 0.0f; - } - // Node 3 - return 0.0f; -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80055094 -.word 0xbf333333 /*-0.69999999*/ -glabel D_80055098 -.word 0x3f333333 /*0.69999999*/ -.text -glabel sub_GAME_7F07FF74 -/* 0B4AA4 7F07FF74 44801000 */ mtc1 $zero, $f2 -/* 0B4AA8 7F07FF78 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0B4AAC 7F07FF7C AFBF0014 */ sw $ra, 0x14($sp) -/* 0B4AB0 7F07FF80 460C103C */ c.lt.s $f2, $f12 -/* 0B4AB4 7F07FF84 00000000 */ nop -/* 0B4AB8 7F07FF88 4502000D */ bc1fl .L7F07FFC0 -/* 0B4ABC 7F07FF8C 4602603C */ c.lt.s $f12, $f2 -/* 0B4AC0 7F07FF90 0C001177 */ jal video_related_23 -/* 0B4AC4 7F07FF94 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0B4AC8 7F07FF98 C7AC0018 */ lwc1 $f12, 0x18($sp) -/* 0B4ACC 7F07FF9C 3C018005 */ lui $at, %hi(D_80055094) -/* 0B4AD0 7F07FFA0 C4265094 */ lwc1 $f6, %lo(D_80055094)($at) -/* 0B4AD4 7F07FFA4 460C0102 */ mul.s $f4, $f0, $f12 -/* 0B4AD8 7F07FFA8 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0B4ADC 7F07FFAC 44815000 */ mtc1 $at, $f10 -/* 0B4AE0 7F07FFB0 46062202 */ mul.s $f8, $f4, $f6 -/* 0B4AE4 7F07FFB4 10000012 */ b .L7F080000 -/* 0B4AE8 7F07FFB8 460A4003 */ div.s $f0, $f8, $f10 -/* 0B4AEC 7F07FFBC 4602603C */ c.lt.s $f12, $f2 -.L7F07FFC0: -/* 0B4AF0 7F07FFC0 00000000 */ nop -/* 0B4AF4 7F07FFC4 4502000E */ bc1fl .L7F080000 -/* 0B4AF8 7F07FFC8 46001006 */ mov.s $f0, $f2 -/* 0B4AFC 7F07FFCC 0C001177 */ jal video_related_23 -/* 0B4B00 7F07FFD0 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0B4B04 7F07FFD4 C7AC0018 */ lwc1 $f12, 0x18($sp) -/* 0B4B08 7F07FFD8 3C018005 */ lui $at, %hi(D_80055098) -/* 0B4B0C 7F07FFDC C4245098 */ lwc1 $f4, %lo(D_80055098)($at) -/* 0B4B10 7F07FFE0 46006407 */ neg.s $f16, $f12 -/* 0B4B14 7F07FFE4 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0B4B18 7F07FFE8 46100482 */ mul.s $f18, $f0, $f16 -/* 0B4B1C 7F07FFEC 44814000 */ mtc1 $at, $f8 -/* 0B4B20 7F07FFF0 46049182 */ mul.s $f6, $f18, $f4 -/* 0B4B24 7F07FFF4 10000002 */ b .L7F080000 -/* 0B4B28 7F07FFF8 46083003 */ div.s $f0, $f6, $f8 -/* 0B4B2C 7F07FFFC 46001006 */ mov.s $f0, $f2 -.L7F080000: -/* 0B4B30 7F080000 8FBF0014 */ lw $ra, 0x14($sp) -/* 0B4B34 7F080004 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0B4B38 7F080008 03E00008 */ jr $ra -/* 0B4B3C 7F08000C 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F080010(void) { - } #else GLOBAL_ASM( @@ -15068,10 +13486,10 @@ glabel D_800550AC glabel D_800550B0 .word 0x3d4ccccd /*0.050000001*/ .text -glabel sub_GAME_7F080010 +glabel currentPlayerUpdateSpeedVerta /* 0B4B40 7F080010 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0B4B44 7F080014 AFBF0014 */ sw $ra, 0x14($sp) -/* 0B4B48 7F080018 0C001177 */ jal video_related_23 +/* 0B4B48 7F080018 0C001177 */ jal viGetFovY /* 0B4B4C 7F08001C E7AC0020 */ swc1 $f12, 0x20($sp) /* 0B4B50 7F080020 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0B4B54 7F080024 44812000 */ mtc1 $at, $f4 @@ -15218,82 +13636,15 @@ glabel sub_GAME_7F080010 - -#ifdef NONMATCHING - f32 sub_GAME_7F080228(f32 arg0) { - // Node 0 - if (0.0f < arg0) - { - // Node 1 + if (0.0f < arg0) { + return (viGetFovY() * arg0 * -0.7f) / 60.0f; + } else if (arg0 < 0.0f) { + return (viGetFovY() * -arg0 * 0.7f) / 60.0f; + } else { return 0.0f; } - // Node 2 - if (arg0 >= 0.0f) - { - // Node 4 - // Node 5 - return 0.0f; - } - // Node 3 - return 0.0f; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800550B4 -.word 0xbf333333 /*-0.69999999*/ -glabel D_800550B8 -.word 0x3f333333 /*0.69999999*/ -.text -glabel sub_GAME_7F080228 -/* 0B4D58 7F080228 44801000 */ mtc1 $zero, $f2 -/* 0B4D5C 7F08022C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0B4D60 7F080230 AFBF0014 */ sw $ra, 0x14($sp) -/* 0B4D64 7F080234 460C103C */ c.lt.s $f2, $f12 -/* 0B4D68 7F080238 00000000 */ nop -/* 0B4D6C 7F08023C 4502000D */ bc1fl .L7F080274 -/* 0B4D70 7F080240 4602603C */ c.lt.s $f12, $f2 -/* 0B4D74 7F080244 0C001177 */ jal video_related_23 -/* 0B4D78 7F080248 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0B4D7C 7F08024C C7AC0018 */ lwc1 $f12, 0x18($sp) -/* 0B4D80 7F080250 3C018005 */ lui $at, %hi(D_800550B4) -/* 0B4D84 7F080254 C42650B4 */ lwc1 $f6, %lo(D_800550B4)($at) -/* 0B4D88 7F080258 460C0102 */ mul.s $f4, $f0, $f12 -/* 0B4D8C 7F08025C 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0B4D90 7F080260 44815000 */ mtc1 $at, $f10 -/* 0B4D94 7F080264 46062202 */ mul.s $f8, $f4, $f6 -/* 0B4D98 7F080268 10000012 */ b .L7F0802B4 -/* 0B4D9C 7F08026C 460A4003 */ div.s $f0, $f8, $f10 -/* 0B4DA0 7F080270 4602603C */ c.lt.s $f12, $f2 -.L7F080274: -/* 0B4DA4 7F080274 00000000 */ nop -/* 0B4DA8 7F080278 4502000E */ bc1fl .L7F0802B4 -/* 0B4DAC 7F08027C 46001006 */ mov.s $f0, $f2 -/* 0B4DB0 7F080280 0C001177 */ jal video_related_23 -/* 0B4DB4 7F080284 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0B4DB8 7F080288 C7AC0018 */ lwc1 $f12, 0x18($sp) -/* 0B4DBC 7F08028C 3C018005 */ lui $at, %hi(D_800550B8) -/* 0B4DC0 7F080290 C42450B8 */ lwc1 $f4, %lo(D_800550B8)($at) -/* 0B4DC4 7F080294 46006407 */ neg.s $f16, $f12 -/* 0B4DC8 7F080298 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0B4DCC 7F08029C 46100482 */ mul.s $f18, $f0, $f16 -/* 0B4DD0 7F0802A0 44814000 */ mtc1 $at, $f8 -/* 0B4DD4 7F0802A4 46049182 */ mul.s $f6, $f18, $f4 -/* 0B4DD8 7F0802A8 10000002 */ b .L7F0802B4 -/* 0B4DDC 7F0802AC 46083003 */ div.s $f0, $f6, $f8 -/* 0B4DE0 7F0802B0 46001006 */ mov.s $f0, $f2 -.L7F0802B4: -/* 0B4DE4 7F0802B4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0B4DE8 7F0802B8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0B4DEC 7F0802BC 03E00008 */ jr $ra -/* 0B4DF0 7F0802C0 00000000 */ nop -) -#endif - - - - #ifdef NONMATCHING void sub_GAME_7F0802C4(void) { @@ -15318,7 +13669,7 @@ glabel D_800550D0 glabel sub_GAME_7F0802C4 /* 0B4DF4 7F0802C4 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0B4DF8 7F0802C8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0B4DFC 7F0802CC 0C001177 */ jal video_related_23 +/* 0B4DFC 7F0802CC 0C001177 */ jal viGetFovY /* 0B4E00 7F0802D0 E7AC0020 */ swc1 $f12, 0x20($sp) /* 0B4E04 7F0802D4 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0B4E08 7F0802D8 44812000 */ mtc1 $at, $f4 @@ -15463,623 +13814,130 @@ glabel sub_GAME_7F0802C4 ) #endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F0804E0(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0804E0 -/* 0B5010 7F0804E0 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B5014 7F0804E4 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B5018 7F0804E8 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0B501C 7F0804EC AFB00018 */ sw $s0, 0x18($sp) -/* 0B5020 7F0804F0 3C0E8003 */ lui $t6, %hi(camera_80036430) -/* 0B5024 7F0804F4 8DCE6430 */ lw $t6, %lo(camera_80036430)($t6) -/* 0B5028 7F0804F8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0B502C 7F0804FC 00808025 */ move $s0, $a0 -/* 0B5030 7F080500 C44003DC */ lwc1 $f0, 0x3dc($v0) -/* 0B5034 7F080504 8C4703D0 */ lw $a3, 0x3d0($v0) -/* 0B5038 7F080508 8C4803D4 */ lw $t0, 0x3d4($v0) -/* 0B503C 7F08050C 15C00004 */ bnez $t6, .L7F080520 -/* 0B5040 7F080510 8C4903D8 */ lw $t1, 0x3d8($v0) -/* 0B5044 7F080514 3C0F8003 */ lui $t7, %hi(camera_80036434) -/* 0B5048 7F080518 8DEF6434 */ lw $t7, %lo(camera_80036434)($t7) -/* 0B504C 7F08051C 11E00005 */ beqz $t7, .L7F080534 -.L7F080520: -/* 0B5050 7F080520 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0B5054 7F080524 44810000 */ mtc1 $at, $f0 -/* 0B5058 7F080528 00004825 */ move $t1, $zero -/* 0B505C 7F08052C 00004025 */ move $t0, $zero -/* 0B5060 7F080530 00003825 */ move $a3, $zero -.L7F080534: -/* 0B5064 7F080534 44802000 */ mtc1 $zero, $f4 -/* 0B5068 7F080538 3C19BA00 */ lui $t9, (0xBA001402 >> 16) # lui $t9, 0xba00 -/* 0B506C 7F08053C 3C0ABA00 */ lui $t2, (0xBA000602 >> 16) # lui $t2, 0xba00 -/* 0B5070 7F080540 4600203C */ c.lt.s $f4, $f0 -/* 0B5074 7F080544 02001025 */ move $v0, $s0 -/* 0B5078 7F080548 3C18E700 */ lui $t8, 0xe700 -/* 0B507C 7F08054C 37391402 */ ori $t9, (0xBA001402 & 0xFFFF) # ori $t9, $t9, 0x1402 -/* 0B5080 7F080550 45000092 */ bc1f .L7F08079C -/* 0B5084 7F080554 354A0602 */ ori $t2, (0xBA000602 & 0xFFFF) # ori $t2, $t2, 0x602 -/* 0B5088 7F080558 26100008 */ addiu $s0, $s0, 8 -/* 0B508C 7F08055C 02001825 */ move $v1, $s0 -/* 0B5090 7F080560 AC580000 */ sw $t8, ($v0) -/* 0B5094 7F080564 AC400004 */ sw $zero, 4($v0) -/* 0B5098 7F080568 26100008 */ addiu $s0, $s0, 8 -/* 0B509C 7F08056C 02002025 */ move $a0, $s0 -/* 0B50A0 7F080570 AC600004 */ sw $zero, 4($v1) -/* 0B50A4 7F080574 AC790000 */ sw $t9, ($v1) -/* 0B50A8 7F080578 26100008 */ addiu $s0, $s0, 8 -/* 0B50AC 7F08057C 240B00C0 */ li $t3, 192 -/* 0B50B0 7F080580 AC8B0004 */ sw $t3, 4($a0) -/* 0B50B4 7F080584 AC8A0000 */ sw $t2, ($a0) -/* 0B50B8 7F080588 02002825 */ move $a1, $s0 -/* 0B50BC 7F08058C 3C0CBA00 */ lui $t4, (0xBA001301 >> 16) # lui $t4, 0xba00 -/* 0B50C0 7F080590 358C1301 */ ori $t4, (0xBA001301 & 0xFFFF) # ori $t4, $t4, 0x1301 -/* 0B50C4 7F080594 26100008 */ addiu $s0, $s0, 8 -/* 0B50C8 7F080598 ACAC0000 */ sw $t4, ($a1) -/* 0B50CC 7F08059C 02003025 */ move $a2, $s0 -/* 0B50D0 7F0805A0 3C0DB900 */ lui $t5, (0xB9000002 >> 16) # lui $t5, 0xb900 -/* 0B50D4 7F0805A4 ACA00004 */ sw $zero, 4($a1) -/* 0B50D8 7F0805A8 35AD0002 */ ori $t5, (0xB9000002 & 0xFFFF) # ori $t5, $t5, 2 -/* 0B50DC 7F0805AC 26100008 */ addiu $s0, $s0, 8 -/* 0B50E0 7F0805B0 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0B50E4 7F0805B4 44813000 */ mtc1 $at, $f6 -/* 0B50E8 7F0805B8 ACCD0000 */ sw $t5, ($a2) -/* 0B50EC 7F0805BC 02001025 */ move $v0, $s0 -/* 0B50F0 7F0805C0 3C0EBA00 */ lui $t6, (0xBA001001 >> 16) # lui $t6, 0xba00 -/* 0B50F4 7F0805C4 ACC00004 */ sw $zero, 4($a2) -/* 0B50F8 7F0805C8 35CE1001 */ ori $t6, (0xBA001001 & 0xFFFF) # ori $t6, $t6, 0x1001 -/* 0B50FC 7F0805CC 26100008 */ addiu $s0, $s0, 8 -/* 0B5100 7F0805D0 AC4E0000 */ sw $t6, ($v0) -/* 0B5104 7F0805D4 02001825 */ move $v1, $s0 -/* 0B5108 7F0805D8 46060202 */ mul.s $f8, $f0, $f6 -/* 0B510C 7F0805DC AC400004 */ sw $zero, 4($v0) -/* 0B5110 7F0805E0 3C0FBA00 */ lui $t7, (0xBA000C02 >> 16) # lui $t7, 0xba00 -/* 0B5114 7F0805E4 35EF0C02 */ ori $t7, (0xBA000C02 & 0xFFFF) # ori $t7, $t7, 0xc02 -/* 0B5118 7F0805E8 26100008 */ addiu $s0, $s0, 8 -/* 0B511C 7F0805EC 24182000 */ li $t8, 8192 -/* 0B5120 7F0805F0 AC780004 */ sw $t8, 4($v1) -/* 0B5124 7F0805F4 AC6F0000 */ sw $t7, ($v1) -/* 0B5128 7F0805F8 02002025 */ move $a0, $s0 -/* 0B512C 7F0805FC 26100008 */ addiu $s0, $s0, 8 -/* 0B5130 7F080600 240A0C00 */ li $t2, 3072 -/* 0B5134 7F080604 3C19BA00 */ lui $t9, (0xBA000903 >> 16) # lui $t9, 0xba00 -/* 0B5138 7F080608 37390903 */ ori $t9, (0xBA000903 & 0xFFFF) # ori $t9, $t9, 0x903 -/* 0B513C 7F08060C AC8A0004 */ sw $t2, 4($a0) -/* 0B5140 7F080610 02002825 */ move $a1, $s0 -/* 0B5144 7F080614 3C0BBA00 */ lui $t3, (0xBA000E02 >> 16) # lui $t3, 0xba00 -/* 0B5148 7F080618 AC990000 */ sw $t9, ($a0) -/* 0B514C 7F08061C 356B0E02 */ ori $t3, (0xBA000E02 & 0xFFFF) # ori $t3, $t3, 0xe02 -/* 0B5150 7F080620 26100008 */ addiu $s0, $s0, 8 -/* 0B5154 7F080624 ACAB0000 */ sw $t3, ($a1) -/* 0B5158 7F080628 02003025 */ move $a2, $s0 -/* 0B515C 7F08062C 3C0CB900 */ lui $t4, (0xB900031D >> 16) # lui $t4, 0xb900 -/* 0B5160 7F080630 4600428D */ trunc.w.s $f10, $f8 -/* 0B5164 7F080634 ACA00004 */ sw $zero, 4($a1) -/* 0B5168 7F080638 358C031D */ ori $t4, (0xB900031D & 0xFFFF) # ori $t4, $t4, 0x31d -/* 0B516C 7F08063C 26100008 */ addiu $s0, $s0, 8 -/* 0B5170 7F080640 3C0D0050 */ lui $t5, (0x00504340 >> 16) # lui $t5, 0x50 -/* 0B5174 7F080644 35AD4340 */ ori $t5, (0x00504340 & 0xFFFF) # ori $t5, $t5, 0x4340 -/* 0B5178 7F080648 ACCC0000 */ sw $t4, ($a2) -/* 0B517C 7F08064C 02001025 */ move $v0, $s0 -/* 0B5180 7F080650 ACCD0004 */ sw $t5, 4($a2) -/* 0B5184 7F080654 3C0FFFFD */ lui $t7, (0xFFFDF6FB >> 16) # lui $t7, 0xfffd -/* 0B5188 7F080658 3C0EFCFF */ lui $t6, (0xFCFFFFFF >> 16) # lui $t6, 0xfcff -/* 0B518C 7F08065C 310B00FF */ andi $t3, $t0, 0xff -/* 0B5190 7F080660 35CEFFFF */ ori $t6, (0xFCFFFFFF & 0xFFFF) # ori $t6, $t6, 0xffff -/* 0B5194 7F080664 35EFF6FB */ ori $t7, (0xFFFDF6FB & 0xFFFF) # ori $t7, $t7, 0xf6fb -/* 0B5198 7F080668 000B6400 */ sll $t4, $t3, 0x10 -/* 0B519C 7F08066C 440B5000 */ mfc1 $t3, $f10 -/* 0B51A0 7F080670 AC4F0004 */ sw $t7, 4($v0) -/* 0B51A4 7F080674 AC4E0000 */ sw $t6, ($v0) -/* 0B51A8 7F080678 26100008 */ addiu $s0, $s0, 8 -/* 0B51AC 7F08067C 00075600 */ sll $t2, $a3, 0x18 -/* 0B51B0 7F080680 014C6825 */ or $t5, $t2, $t4 -/* 0B51B4 7F080684 02001825 */ move $v1, $s0 -/* 0B51B8 7F080688 312E00FF */ andi $t6, $t1, 0xff -/* 0B51BC 7F08068C 3C18FA00 */ lui $t8, 0xfa00 -/* 0B51C0 7F080690 AC780000 */ sw $t8, ($v1) -/* 0B51C4 7F080694 000E7A00 */ sll $t7, $t6, 8 -/* 0B51C8 7F080698 01AFC025 */ or $t8, $t5, $t7 -/* 0B51CC 7F08069C 316A00FF */ andi $t2, $t3, 0xff -/* 0B51D0 7F0806A0 030A6025 */ or $t4, $t8, $t2 -/* 0B51D4 7F0806A4 AC6C0004 */ sw $t4, 4($v1) -/* 0B51D8 7F0806A8 26100008 */ addiu $s0, $s0, 8 -/* 0B51DC 7F0806AC AFB0003C */ sw $s0, 0x3c($sp) -/* 0B51E0 7F0806B0 0C001127 */ jal get_video2_settings_width -/* 0B51E4 7F0806B4 26100008 */ addiu $s0, $s0, 8 -/* 0B51E8 7F0806B8 0C001145 */ jal get_video2_settings_ulx -/* 0B51EC 7F0806BC A7A20026 */ sh $v0, 0x26($sp) -/* 0B51F0 7F0806C0 0C001149 */ jal get_video2_settings_uly -/* 0B51F4 7F0806C4 A7A20028 */ sh $v0, 0x28($sp) -/* 0B51F8 7F0806C8 0C00112B */ jal get_video2_settings_height -/* 0B51FC 7F0806CC A7A2002A */ sh $v0, 0x2a($sp) -/* 0B5200 7F0806D0 87AE0028 */ lh $t6, 0x28($sp) -/* 0B5204 7F0806D4 87AD0026 */ lh $t5, 0x26($sp) -/* 0B5208 7F0806D8 87B8002A */ lh $t8, 0x2a($sp) -/* 0B520C 7F0806DC 3C01F600 */ lui $at, 0xf600 -/* 0B5210 7F0806E0 01CD7821 */ addu $t7, $t6, $t5 -/* 0B5214 7F0806E4 00585021 */ addu $t2, $v0, $t8 -/* 0B5218 7F0806E8 314C03FF */ andi $t4, $t2, 0x3ff -/* 0B521C 7F0806EC 31F903FF */ andi $t9, $t7, 0x3ff -/* 0B5220 7F0806F0 00195B80 */ sll $t3, $t9, 0xe -/* 0B5224 7F0806F4 000C7080 */ sll $t6, $t4, 2 -/* 0B5228 7F0806F8 8FB9003C */ lw $t9, 0x3c($sp) -/* 0B522C 7F0806FC 01C16825 */ or $t5, $t6, $at -/* 0B5230 7F080700 01AB7825 */ or $t7, $t5, $t3 -/* 0B5234 7F080704 0C001145 */ jal get_video2_settings_ulx -/* 0B5238 7F080708 AF2F0000 */ sw $t7, ($t9) -/* 0B523C 7F08070C 0C001149 */ jal get_video2_settings_uly -/* 0B5240 7F080710 A7A2002A */ sh $v0, 0x2a($sp) -/* 0B5244 7F080714 87AC002A */ lh $t4, 0x2a($sp) -/* 0B5248 7F080718 8FAF003C */ lw $t7, 0x3c($sp) -/* 0B524C 7F08071C 305803FF */ andi $t8, $v0, 0x3ff -/* 0B5250 7F080720 318E03FF */ andi $t6, $t4, 0x3ff -/* 0B5254 7F080724 000E6B80 */ sll $t5, $t6, 0xe -/* 0B5258 7F080728 00185080 */ sll $t2, $t8, 2 -/* 0B525C 7F08072C 014D5825 */ or $t3, $t2, $t5 -/* 0B5260 7F080730 02001825 */ move $v1, $s0 -/* 0B5264 7F080734 ADEB0004 */ sw $t3, 4($t7) -/* 0B5268 7F080738 26100008 */ addiu $s0, $s0, 8 -/* 0B526C 7F08073C 3C19E700 */ lui $t9, 0xe700 -/* 0B5270 7F080740 02002025 */ move $a0, $s0 -/* 0B5274 7F080744 AC790000 */ sw $t9, ($v1) -/* 0B5278 7F080748 AC600004 */ sw $zero, 4($v1) -/* 0B527C 7F08074C 26100008 */ addiu $s0, $s0, 8 -/* 0B5280 7F080750 3C18BA00 */ lui $t8, (0xBA000602 >> 16) # lui $t8, 0xba00 -/* 0B5284 7F080754 37180602 */ ori $t8, (0xBA000602 & 0xFFFF) # ori $t8, $t8, 0x602 -/* 0B5288 7F080758 240C0040 */ li $t4, 64 -/* 0B528C 7F08075C 02002825 */ move $a1, $s0 -/* 0B5290 7F080760 AC8C0004 */ sw $t4, 4($a0) -/* 0B5294 7F080764 AC980000 */ sw $t8, ($a0) -/* 0B5298 7F080768 26100008 */ addiu $s0, $s0, 8 -/* 0B529C 7F08076C 3C0EBA00 */ lui $t6, (0xBA001301 >> 16) # lui $t6, 0xba00 -/* 0B52A0 7F080770 35CE1301 */ ori $t6, (0xBA001301 & 0xFFFF) # ori $t6, $t6, 0x1301 -/* 0B52A4 7F080774 3C0A0008 */ lui $t2, 8 -/* 0B52A8 7F080778 02003025 */ move $a2, $s0 -/* 0B52AC 7F08077C ACAA0004 */ sw $t2, 4($a1) -/* 0B52B0 7F080780 ACAE0000 */ sw $t6, ($a1) -/* 0B52B4 7F080784 3C0DBA00 */ lui $t5, (0xBA001001 >> 16) # lui $t5, 0xba00 -/* 0B52B8 7F080788 35AD1001 */ ori $t5, (0xBA001001 & 0xFFFF) # ori $t5, $t5, 0x1001 -/* 0B52BC 7F08078C 3C0B0001 */ lui $t3, 1 -/* 0B52C0 7F080790 ACCB0004 */ sw $t3, 4($a2) -/* 0B52C4 7F080794 ACCD0000 */ sw $t5, ($a2) -/* 0B52C8 7F080798 26100008 */ addiu $s0, $s0, 8 -.L7F08079C: -/* 0B52CC 7F08079C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B52D0 7F0807A0 02001025 */ move $v0, $s0 -/* 0B52D4 7F0807A4 8FB00018 */ lw $s0, 0x18($sp) -/* 0B52D8 7F0807A8 03E00008 */ jr $ra -/* 0B52DC 7F0807AC 27BD0080 */ addiu $sp, $sp, 0x80 -) -#endif - - - - - -void set_rgba_tint(s32 arg0, s32 arg1, s32 arg2, f32 arg3) { - pPlayer->tint_red = arg0; - pPlayer->tint_green = arg1; - pPlayer->tint_blue = arg2; - pPlayer->tint_alpha = arg3; -} - - - - - - -#ifdef NONMATCHING -void *sub_GAME_7F0807E0(f32 arg0, s32 arg1, ?32 arg2, ?32 arg3, f32 arg4) { - // Node 0 - pPlayer->field_3E0 = 0.0f; - pPlayer->time_for_fade = arg0; - pPlayer->field_3E8 = (?32) pPlayer->tint_red; - pPlayer->field_3EC = arg1; - pPlayer->field_3F0 = (?32) pPlayer->tint_green; - pPlayer->field_3F4 = arg2; - pPlayer->field_3F8 = (?32) pPlayer->tint_blue; - pPlayer->field_3FC = arg3; - pPlayer->field_400 = (f32) pPlayer->tint_alpha; - pPlayer->field_404 = arg4; - return pPlayer; -} - -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0807E0 -/* 0B5310 7F0807E0 3C038008 */ lui $v1, %hi(pPlayer) -/* 0B5314 7F0807E4 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0B5318 7F0807E8 8C6E0000 */ lw $t6, ($v1) -/* 0B531C 7F0807EC 44802000 */ mtc1 $zero, $f4 -/* 0B5320 7F0807F0 00000000 */ nop -/* 0B5324 7F0807F4 E5C403E0 */ swc1 $f4, 0x3e0($t6) -/* 0B5328 7F0807F8 8C6F0000 */ lw $t7, ($v1) -/* 0B532C 7F0807FC E5EC03E4 */ swc1 $f12, 0x3e4($t7) -/* 0B5330 7F080800 8C620000 */ lw $v0, ($v1) -/* 0B5334 7F080804 8C5803D0 */ lw $t8, 0x3d0($v0) -/* 0B5338 7F080808 AC5803E8 */ sw $t8, 0x3e8($v0) -/* 0B533C 7F08080C 8C790000 */ lw $t9, ($v1) -/* 0B5340 7F080810 AF2503EC */ sw $a1, 0x3ec($t9) -/* 0B5344 7F080814 8C620000 */ lw $v0, ($v1) -/* 0B5348 7F080818 8C4803D4 */ lw $t0, 0x3d4($v0) -/* 0B534C 7F08081C AC4803F0 */ sw $t0, 0x3f0($v0) -/* 0B5350 7F080820 8C690000 */ lw $t1, ($v1) -/* 0B5354 7F080824 AD2603F4 */ sw $a2, 0x3f4($t1) -/* 0B5358 7F080828 8C620000 */ lw $v0, ($v1) -/* 0B535C 7F08082C 8C4A03D8 */ lw $t2, 0x3d8($v0) -/* 0B5360 7F080830 AC4A03F8 */ sw $t2, 0x3f8($v0) -/* 0B5364 7F080834 8C6B0000 */ lw $t3, ($v1) -/* 0B5368 7F080838 AD6703FC */ sw $a3, 0x3fc($t3) -/* 0B536C 7F08083C 8C620000 */ lw $v0, ($v1) -/* 0B5370 7F080840 C44603DC */ lwc1 $f6, 0x3dc($v0) -/* 0B5374 7F080844 E4460400 */ swc1 $f6, 0x400($v0) -/* 0B5378 7F080848 8C6C0000 */ lw $t4, ($v1) -/* 0B537C 7F08084C C7A80010 */ lwc1 $f8, 0x10($sp) -/* 0B5380 7F080850 03E00008 */ jr $ra -/* 0B5384 7F080854 E5880404 */ swc1 $f8, 0x404($t4) -) -#endif - - - - - -#ifdef NONMATCHING -void fade_to_over_seconds(f32 arg1) { - // Node 0 - return sub_GAME_7F0807E0(pPlayer->tint_red, pPlayer->tint_green, pPlayer->tint_blue); -} - -#else -GLOBAL_ASM( -.text -glabel fade_to_over_seconds -/* 0B5388 7F080858 3C028008 */ lui $v0, %hi(pPlayer) -/* 0B538C 7F08085C 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) -/* 0B5390 7F080860 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0B5394 7F080864 AFBF001C */ sw $ra, 0x1c($sp) -/* 0B5398 7F080868 8C4703D8 */ lw $a3, 0x3d8($v0) -/* 0B539C 7F08086C 8C4603D4 */ lw $a2, 0x3d4($v0) -/* 0B53A0 7F080870 8C4503D0 */ lw $a1, 0x3d0($v0) -/* 0B53A4 7F080874 0FC201F8 */ jal sub_GAME_7F0807E0 -/* 0B53A8 7F080878 E7AE0010 */ swc1 $f14, 0x10($sp) -/* 0B53AC 7F08087C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B53B0 7F080880 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0B53B4 7F080884 03E00008 */ jr $ra -/* 0B53B8 7F080888 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void check_if_fade_to_black_complete(void) { - // Node 0 - if (pPlayer->time_for_fade < 0.0f) - { - // Node 1 +s16 viGetViewLeft(void); +s16 viGetViewTop(void); +s16 viGetViewWidth(void); +s16 viGetViewHeight(void); +Gfx *currentPlayerDrawFade(Gfx *gdl) { + f32 frac = pPlayer->colourscreenfrac; + s32 r = pPlayer->colourscreenred; + s32 g = pPlayer->colourscreengreen; + s32 b = pPlayer->colourscreenblue; + if ((camera_80036430 != 0) || (camera_80036434 != 0)) { + frac = 1.0f; + b = 0; + g = 0; + r = 0; } - // Node 2 - return 0; -} -#else -GLOBAL_ASM( -.text -glabel check_if_fade_to_black_complete -/* 0B53BC 7F08088C 3C0E8008 */ lui $t6, %hi(pPlayer) -/* 0B53C0 7F080890 8DCEA0B0 */ lw $t6, %lo(pPlayer)($t6) -/* 0B53C4 7F080894 44803000 */ mtc1 $zero, $f6 -/* 0B53C8 7F080898 00001025 */ move $v0, $zero -/* 0B53CC 7F08089C C5C403E4 */ lwc1 $f4, 0x3e4($t6) -/* 0B53D0 7F0808A0 4606203C */ c.lt.s $f4, $f6 -/* 0B53D4 7F0808A4 00000000 */ nop -/* 0B53D8 7F0808A8 45000002 */ bc1f .L7F0808B4 -/* 0B53DC 7F0808AC 00000000 */ nop -/* 0B53E0 7F0808B0 24020001 */ li $v0, 1 -.L7F0808B4: -/* 0B53E4 7F0808B4 03E00008 */ jr $ra -/* 0B53E8 7F0808B8 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void *sub_GAME_7F0808BC(void) { - f32 temp_f12; - - // Node 0 - if (0.0f <= pPlayer->time_for_fade) - { - // Node 1 - pPlayer->field_3E0 = (f32) (pPlayer->field_3E0 + global_timer_delta); - if (pPlayer->field_3E0 < pPlayer->time_for_fade) - { - // Node 2 - temp_f12 = (pPlayer->field_3E0 / pPlayer->time_for_fade); - pPlayer->tint_alpha = (f32) (pPlayer->field_400 + ((pPlayer->field_404 - pPlayer->field_400) * temp_f12)); - pPlayer->tint_red = (s32) (pPlayer->field_3E8 + (s32) ((f32) (pPlayer->field_3EC - pPlayer->field_3E8) * temp_f12)); - pPlayer->tint_green = (s32) (pPlayer->field_3F0 + (s32) ((f32) (pPlayer->field_3F4 - pPlayer->field_3F0) * temp_f12)); - pPlayer->tint_blue = (s32) (pPlayer->field_3F8 + (s32) ((f32) (pPlayer->field_3FC - pPlayer->field_3F8) * temp_f12)); - return pPlayer; - } - // Node 3 - pPlayer->tint_alpha = (f32) pPlayer->field_404; - pPlayer->tint_red = (s32) pPlayer->field_3EC; - pPlayer->tint_green = (s32) pPlayer->field_3F4; - pPlayer->tint_blue = (s32) pPlayer->field_3FC; - pPlayer->time_for_fade = -1.0f; + if (frac > 0) { + gDPPipeSync(gdl++); + gDPSetCycleType(gdl++, G_CYC_1CYCLE); + gDPSetColorDither(gdl++, G_CD_DISABLE); + gDPSetTexturePersp(gdl++, G_TP_NONE); + gDPSetAlphaCompare(gdl++, G_AC_NONE); + gDPSetTextureLOD(gdl++, G_TL_TILE); + gDPSetTextureFilter(gdl++, G_TF_BILERP); + gDPSetTextureConvert(gdl++, G_TC_FILT); + gDPSetTextureLUT(gdl++, G_TT_NONE); + gDPSetRenderMode(gdl++, G_RM_CLD_SURF, G_RM_CLD_SURF2); + gDPSetCombineMode(gdl++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(gdl++, 0, 0, r, g, b, (s32)(frac * 255.0f)); + gDPFillRectangle(gdl++, viGetViewLeft(), viGetViewTop(), (viGetViewLeft() + viGetViewWidth()), (viGetViewTop() + viGetViewHeight())); + gDPPipeSync(gdl++); + gDPSetColorDither(gdl++, G_CD_BAYER); + gDPSetTexturePersp(gdl++, G_TP_PERSP); + gDPSetTextureLOD(gdl++, G_TL_LOD); } - // Node 4 - return pPlayer; + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0808BC -/* 0B53EC 7F0808BC 3C068008 */ lui $a2, %hi(pPlayer) -/* 0B53F0 7F0808C0 24C6A0B0 */ addiu $a2, %lo(pPlayer) # addiu $a2, $a2, -0x5f50 -/* 0B53F4 7F0808C4 8CC20000 */ lw $v0, ($a2) -/* 0B53F8 7F0808C8 44803000 */ mtc1 $zero, $f6 -/* 0B53FC 7F0808CC 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B5400 7F0808D0 C44403E4 */ lwc1 $f4, 0x3e4($v0) -/* 0B5404 7F0808D4 4604303E */ c.le.s $f6, $f4 -/* 0B5408 7F0808D8 00000000 */ nop -/* 0B540C 7F0808DC 4500004A */ bc1f .L7F080A08 -/* 0B5410 7F0808E0 00000000 */ nop -/* 0B5414 7F0808E4 C44803E0 */ lwc1 $f8, 0x3e0($v0) -/* 0B5418 7F0808E8 C42A8378 */ lwc1 $f10, %lo(global_timer_delta)($at) -/* 0B541C 7F0808EC 460A4400 */ add.s $f16, $f8, $f10 -/* 0B5420 7F0808F0 E45003E0 */ swc1 $f16, 0x3e0($v0) -/* 0B5424 7F0808F4 8CC20000 */ lw $v0, ($a2) -/* 0B5428 7F0808F8 C44203E0 */ lwc1 $f2, 0x3e0($v0) -/* 0B542C 7F0808FC C44003E4 */ lwc1 $f0, 0x3e4($v0) -/* 0B5430 7F080900 4600103C */ c.lt.s $f2, $f0 -/* 0B5434 7F080904 00000000 */ nop -/* 0B5438 7F080908 45020031 */ bc1fl .L7F0809D0 -/* 0B543C 7F08090C C44A0404 */ lwc1 $f10, 0x404($v0) -/* 0B5440 7F080910 46001303 */ div.s $f12, $f2, $f0 -/* 0B5444 7F080914 C44E0400 */ lwc1 $f14, 0x400($v0) -/* 0B5448 7F080918 C4520404 */ lwc1 $f18, 0x404($v0) -/* 0B544C 7F08091C 460E9101 */ sub.s $f4, $f18, $f14 -/* 0B5450 7F080920 460C2182 */ mul.s $f6, $f4, $f12 -/* 0B5454 7F080924 46067200 */ add.s $f8, $f14, $f6 -/* 0B5458 7F080928 E44803DC */ swc1 $f8, 0x3dc($v0) -/* 0B545C 7F08092C 8CC20000 */ lw $v0, ($a2) -/* 0B5460 7F080930 8C4303E8 */ lw $v1, 0x3e8($v0) -/* 0B5464 7F080934 8C4E03EC */ lw $t6, 0x3ec($v0) -/* 0B5468 7F080938 01C37823 */ subu $t7, $t6, $v1 -/* 0B546C 7F08093C 448F5000 */ mtc1 $t7, $f10 -/* 0B5470 7F080940 00000000 */ nop -/* 0B5474 7F080944 46805420 */ cvt.s.w $f16, $f10 -/* 0B5478 7F080948 460C8482 */ mul.s $f18, $f16, $f12 -/* 0B547C 7F08094C 4600910D */ trunc.w.s $f4, $f18 -/* 0B5480 7F080950 44192000 */ mfc1 $t9, $f4 -/* 0B5484 7F080954 00000000 */ nop -/* 0B5488 7F080958 00794021 */ addu $t0, $v1, $t9 -/* 0B548C 7F08095C AC4803D0 */ sw $t0, 0x3d0($v0) -/* 0B5490 7F080960 8CC20000 */ lw $v0, ($a2) -/* 0B5494 7F080964 8C4403F0 */ lw $a0, 0x3f0($v0) -/* 0B5498 7F080968 8C4903F4 */ lw $t1, 0x3f4($v0) -/* 0B549C 7F08096C 01245023 */ subu $t2, $t1, $a0 -/* 0B54A0 7F080970 448A3000 */ mtc1 $t2, $f6 -/* 0B54A4 7F080974 00000000 */ nop -/* 0B54A8 7F080978 46803220 */ cvt.s.w $f8, $f6 -/* 0B54AC 7F08097C 460C4282 */ mul.s $f10, $f8, $f12 -/* 0B54B0 7F080980 4600540D */ trunc.w.s $f16, $f10 -/* 0B54B4 7F080984 440C8000 */ mfc1 $t4, $f16 -/* 0B54B8 7F080988 00000000 */ nop -/* 0B54BC 7F08098C 008C6821 */ addu $t5, $a0, $t4 -/* 0B54C0 7F080990 AC4D03D4 */ sw $t5, 0x3d4($v0) -/* 0B54C4 7F080994 8CC20000 */ lw $v0, ($a2) -/* 0B54C8 7F080998 8C4503F8 */ lw $a1, 0x3f8($v0) -/* 0B54CC 7F08099C 8C4E03FC */ lw $t6, 0x3fc($v0) -/* 0B54D0 7F0809A0 01C57823 */ subu $t7, $t6, $a1 -/* 0B54D4 7F0809A4 448F9000 */ mtc1 $t7, $f18 -/* 0B54D8 7F0809A8 00000000 */ nop -/* 0B54DC 7F0809AC 46809120 */ cvt.s.w $f4, $f18 -/* 0B54E0 7F0809B0 460C2182 */ mul.s $f6, $f4, $f12 -/* 0B54E4 7F0809B4 4600320D */ trunc.w.s $f8, $f6 -/* 0B54E8 7F0809B8 44194000 */ mfc1 $t9, $f8 -/* 0B54EC 7F0809BC 00000000 */ nop -/* 0B54F0 7F0809C0 00B94021 */ addu $t0, $a1, $t9 -/* 0B54F4 7F0809C4 03E00008 */ jr $ra -/* 0B54F8 7F0809C8 AC4803D8 */ sw $t0, 0x3d8($v0) -/* 0B54FC 7F0809CC C44A0404 */ lwc1 $f10, 0x404($v0) -.L7F0809D0: -/* 0B5500 7F0809D0 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0B5504 7F0809D4 44818000 */ mtc1 $at, $f16 -/* 0B5508 7F0809D8 E44A03DC */ swc1 $f10, 0x3dc($v0) -/* 0B550C 7F0809DC 8CC20000 */ lw $v0, ($a2) -/* 0B5510 7F0809E0 8C4903EC */ lw $t1, 0x3ec($v0) -/* 0B5514 7F0809E4 AC4903D0 */ sw $t1, 0x3d0($v0) -/* 0B5518 7F0809E8 8CC20000 */ lw $v0, ($a2) -/* 0B551C 7F0809EC 8C4A03F4 */ lw $t2, 0x3f4($v0) -/* 0B5520 7F0809F0 AC4A03D4 */ sw $t2, 0x3d4($v0) -/* 0B5524 7F0809F4 8CC20000 */ lw $v0, ($a2) -/* 0B5528 7F0809F8 8C4B03FC */ lw $t3, 0x3fc($v0) -/* 0B552C 7F0809FC AC4B03D8 */ sw $t3, 0x3d8($v0) -/* 0B5530 7F080A00 8CCC0000 */ lw $t4, ($a2) -/* 0B5534 7F080A04 E59003E4 */ swc1 $f16, 0x3e4($t4) -.L7F080A08: -/* 0B5538 7F080A08 03E00008 */ jr $ra -/* 0B553C 7F080A0C 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void *set_curplayer_fade(f32 arg0, f32 arg1) { - f32 temp_f8; - f32 phi_f8; - - // Node 0 - if (pPlayer->field_A8->unk4 != 0) - { - // Node 1 - pPlayer->viewport_alpha = 0.0f; - pPlayer->bondfadetime60 = arg0; - temp_f8 = (f32) pPlayer->field_A8->unk4->unkC; - phi_f8 = temp_f8; - if (pPlayer->field_A8->unk4->unkC < 0) - { - // Node 2 - phi_f8 = (temp_f8 + 4294967296.0f); - } - // Node 3 - pPlayer->bondfadetimemax = (f32) (phi_f8 / 255.0f); - pPlayer->bondfadefracold = arg1; - } - // Node 4 - return pPlayer->field_A8->unk4; +void currentPlayerSetFadeColour(s32 r, s32 g, s32 b, f32 frac) { + pPlayer->colourscreenred = r; + pPlayer->colourscreengreen = g; + pPlayer->colourscreenblue = b; + pPlayer->colourscreenfrac = frac; } -#else -GLOBAL_ASM( -.text -glabel set_curplayer_fade -/* 0B5540 7F080A10 3C048008 */ lui $a0, %hi(pPlayer) -/* 0B5544 7F080A14 2484A0B0 */ addiu $a0, %lo(pPlayer) # addiu $a0, $a0, -0x5f50 -/* 0B5548 7F080A18 8C830000 */ lw $v1, ($a0) -/* 0B554C 7F080A1C 8C6E00A8 */ lw $t6, 0xa8($v1) -/* 0B5550 7F080A20 8DC20004 */ lw $v0, 4($t6) -/* 0B5554 7F080A24 10400014 */ beqz $v0, .L7F080A78 -/* 0B5558 7F080A28 00000000 */ nop -/* 0B555C 7F080A2C 44802000 */ mtc1 $zero, $f4 -/* 0B5560 7F080A30 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0B5564 7F080A34 E464018C */ swc1 $f4, 0x18c($v1) -/* 0B5568 7F080A38 8C8F0000 */ lw $t7, ($a0) -/* 0B556C 7F080A3C E5EC0190 */ swc1 $f12, 0x190($t7) -/* 0B5570 7F080A40 9058000C */ lbu $t8, 0xc($v0) -/* 0B5574 7F080A44 44983000 */ mtc1 $t8, $f6 -/* 0B5578 7F080A48 07010004 */ bgez $t8, .L7F080A5C -/* 0B557C 7F080A4C 46803220 */ cvt.s.w $f8, $f6 -/* 0B5580 7F080A50 44815000 */ mtc1 $at, $f10 -/* 0B5584 7F080A54 00000000 */ nop -/* 0B5588 7F080A58 460A4200 */ add.s $f8, $f8, $f10 -.L7F080A5C: -/* 0B558C 7F080A5C 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0B5590 7F080A60 44818000 */ mtc1 $at, $f16 -/* 0B5594 7F080A64 8C990000 */ lw $t9, ($a0) -/* 0B5598 7F080A68 46104483 */ div.s $f18, $f8, $f16 -/* 0B559C 7F080A6C E7320194 */ swc1 $f18, 0x194($t9) -/* 0B55A0 7F080A70 8C880000 */ lw $t0, ($a0) -/* 0B55A4 7F080A74 E50E0198 */ swc1 $f14, 0x198($t0) -.L7F080A78: -/* 0B55A8 7F080A78 03E00008 */ jr $ra -/* 0B55AC 7F080A7C 00000000 */ nop -) -#endif - - - - -#ifdef NONMATCHING -void *update_curplayer_fade(void) { - f32 phi_f12; - - // Node 0 - if (0.0f <= pPlayer->bondfadetime60) - { - // Node 1 - pPlayer->viewport_alpha = (f32) (pPlayer->viewport_alpha + *(void *)0x80050000); - if (pPlayer->viewport_alpha < pPlayer->bondfadetime60) - { - // Node 2 - phi_f12 = (pPlayer->bondfadetimemax + (((pPlayer->bondfadefracold - pPlayer->bondfadetimemax) * pPlayer->viewport_alpha) / pPlayer->bondfadetime60)); - } - else - { - // Node 3 - pPlayer->bondfadetime60 = -1.0f; - phi_f12 = pPlayer->bondfadefracold; - } - // Node 4 - if (pPlayer->field_A8->unk4 != 0) - { - // Node 5 - pPlayer->field_A8->unk4->unkC = (s32) (phi_f12 * 255.0f); - } - } - // Node 6 - return pPlayer; +void currentPlayerAdjustFade(f32 maxfadetime, s32 r, s32 g, s32 b, f32 frac) { + pPlayer->colourfadetime60 = 0; + pPlayer->colourfadetimemax60 = maxfadetime; + pPlayer->colourfaderedold = pPlayer->colourscreenred; + pPlayer->colourfaderednew = r; + pPlayer->colourfadegreenold = pPlayer->colourscreengreen; + pPlayer->colourfadegreennew = g; + pPlayer->colourfadeblueold = pPlayer->colourscreenblue; + pPlayer->colourfadebluenew = b; + pPlayer->colourfadefracold = pPlayer->colourscreenfrac; + pPlayer->colourfadefracnew = frac; } -#else -GLOBAL_ASM( -.text -glabel update_curplayer_fade -/* 0B55B0 7F080A80 3C048008 */ lui $a0, %hi(pPlayer) -/* 0B55B4 7F080A84 2484A0B0 */ addiu $a0, %lo(pPlayer) # addiu $a0, $a0, -0x5f50 -/* 0B55B8 7F080A88 8C820000 */ lw $v0, ($a0) -/* 0B55BC 7F080A8C 44803000 */ mtc1 $zero, $f6 -/* 0B55C0 7F080A90 3C018005 */ lui $at, %hi(global_timer_delta) -/* 0B55C4 7F080A94 C4440190 */ lwc1 $f4, 0x190($v0) -/* 0B55C8 7F080A98 4604303E */ c.le.s $f6, $f4 -/* 0B55CC 7F080A9C 00000000 */ nop -/* 0B55D0 7F080AA0 45000022 */ bc1f .L7F080B2C -/* 0B55D4 7F080AA4 00000000 */ nop -/* 0B55D8 7F080AA8 C448018C */ lwc1 $f8, 0x18c($v0) -/* 0B55DC 7F080AAC C42A8378 */ lwc1 $f10, %lo(global_timer_delta)($at) -/* 0B55E0 7F080AB0 8C4E00A8 */ lw $t6, 0xa8($v0) -/* 0B55E4 7F080AB4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0B55E8 7F080AB8 460A4400 */ add.s $f16, $f8, $f10 -/* 0B55EC 7F080ABC 8DC30004 */ lw $v1, 4($t6) -/* 0B55F0 7F080AC0 E450018C */ swc1 $f16, 0x18c($v0) -/* 0B55F4 7F080AC4 8C820000 */ lw $v0, ($a0) -/* 0B55F8 7F080AC8 C442018C */ lwc1 $f2, 0x18c($v0) -/* 0B55FC 7F080ACC C4400190 */ lwc1 $f0, 0x190($v0) -/* 0B5600 7F080AD0 4600103C */ c.lt.s $f2, $f0 -/* 0B5604 7F080AD4 00000000 */ nop -/* 0B5608 7F080AD8 45020009 */ bc1fl .L7F080B00 -/* 0B560C 7F080ADC 44815000 */ mtc1 $at, $f10 -/* 0B5610 7F080AE0 C44E0194 */ lwc1 $f14, 0x194($v0) -/* 0B5614 7F080AE4 C4520198 */ lwc1 $f18, 0x198($v0) -/* 0B5618 7F080AE8 460E9101 */ sub.s $f4, $f18, $f14 -/* 0B561C 7F080AEC 46022182 */ mul.s $f6, $f4, $f2 -/* 0B5620 7F080AF0 46003203 */ div.s $f8, $f6, $f0 -/* 0B5624 7F080AF4 10000004 */ b .L7F080B08 -/* 0B5628 7F080AF8 46087300 */ add.s $f12, $f14, $f8 -/* 0B562C 7F080AFC 44815000 */ mtc1 $at, $f10 -.L7F080B00: -/* 0B5630 7F080B00 C44C0198 */ lwc1 $f12, 0x198($v0) -/* 0B5634 7F080B04 E44A0190 */ swc1 $f10, 0x190($v0) -.L7F080B08: -/* 0B5638 7F080B08 10600008 */ beqz $v1, .L7F080B2C -/* 0B563C 7F080B0C 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0B5640 7F080B10 44818000 */ mtc1 $at, $f16 -/* 0B5644 7F080B14 00000000 */ nop -/* 0B5648 7F080B18 46106482 */ mul.s $f18, $f12, $f16 -/* 0B564C 7F080B1C 4600910D */ trunc.w.s $f4, $f18 -/* 0B5650 7F080B20 44182000 */ mfc1 $t8, $f4 -/* 0B5654 7F080B24 00000000 */ nop -/* 0B5658 7F080B28 A078000C */ sb $t8, 0xc($v1) -.L7F080B2C: -/* 0B565C 7F080B2C 03E00008 */ jr $ra -/* 0B5660 7F080B30 00000000 */ nop -) -#endif +void currentPlayerSetFadeFrac(f32 maxfadetime, f32 frac) { + currentPlayerAdjustFade(maxfadetime, pPlayer->colourscreenred, pPlayer->colourscreengreen, pPlayer->colourscreenblue, frac); +} +s32 /*bool*/ currentPlayerIsFadeComplete(void) +{ + return pPlayer->colourfadetimemax60 < 0; +} +void currentPlayerUpdateColourScreenProperties(void) +{ + if (pPlayer->colourfadetimemax60 >= 0) { + pPlayer->colourfadetime60 += global_timer_delta; + if (pPlayer->colourfadetime60 < pPlayer->colourfadetimemax60) { + f32 mult = pPlayer->colourfadetime60 / pPlayer->colourfadetimemax60; + pPlayer->colourscreenfrac = pPlayer->colourfadefracold + (pPlayer->colourfadefracnew - pPlayer->colourfadefracold) * mult; + pPlayer->colourscreenred = pPlayer->colourfaderedold + (s32)((pPlayer->colourfaderednew - pPlayer->colourfaderedold) * mult); + pPlayer->colourscreengreen = pPlayer->colourfadegreenold + (s32)((pPlayer->colourfadegreennew - pPlayer->colourfadegreenold) * mult); + pPlayer->colourscreenblue = pPlayer->colourfadeblueold + (s32)((pPlayer->colourfadebluenew - pPlayer->colourfadeblueold) * mult); + return; + } + + pPlayer->colourscreenfrac = pPlayer->colourfadefracnew; + pPlayer->colourscreenred = pPlayer->colourfaderednew; + pPlayer->colourscreengreen = pPlayer->colourfadegreennew; + pPlayer->colourscreenblue = pPlayer->colourfadebluenew; + pPlayer->colourfadetimemax60 = -1; + } +} + +void currentPlayerStartChrFade(f32 duration60, f32 targetfrac) +{ + struct chrdata* chr = pPlayer->prop->chr; + + if (chr) { + pPlayer->bondfadetime60 = 0; + pPlayer->bondfadetimemax60 = duration60; + pPlayer->bondfadefracold = chr->fadealpha / 255.0f; + pPlayer->bondfadefracnew = targetfrac; + } +} + +void currentPlayerTickChrFade(void) +{ + if (pPlayer->bondfadetimemax60 >= 0) { + struct chrdata *chr = pPlayer->prop->chr; + f32 frac; + + pPlayer->bondfadetime60 += global_timer_delta; + + if (pPlayer->bondfadetime60 < pPlayer->bondfadetimemax60) { + frac = pPlayer->bondfadefracold + + (pPlayer->bondfadefracnew - pPlayer->bondfadefracold) + * pPlayer->bondfadetime60 + / pPlayer->bondfadetimemax60; + } else { + frac = pPlayer->bondfadefracnew; + pPlayer->bondfadetimemax60 = -1; + } + + if (chr) { + chr->fadealpha = (s8)(frac * 255); + } + } +} #ifdef NONMATCHING void sub_GAME_7F080B34(void) { @@ -16197,7 +14055,7 @@ glabel sub_GAME_7F080B34 /* 0B57DC 7F080CAC C4440518 */ lwc1 $f4, 0x518($v0) /* 0B57E0 7F080CB0 E7A40020 */ swc1 $f4, 0x20($sp) /* 0B57E4 7F080CB4 C446051C */ lwc1 $f6, 0x51c($v0) -/* 0B57E8 7F080CB8 0FC16642 */ jal sub_GAME_7F059908 +/* 0B57E8 7F080CB8 0FC16642 */ jal matrix_4x4_7F059908 /* 0B57EC 7F080CBC E7A60024 */ swc1 $f6, 0x24($sp) /* 0B57F0 7F080CC0 27A4004C */ addiu $a0, $sp, 0x4c /* 0B57F4 7F080CC4 0FC1601A */ jal matrix_4x4_multiply_in_place @@ -17506,7 +15364,7 @@ glabel controller_gameplay_interaction /* 0B661C 7F081AEC 53000009 */ beql $t8, $zero, .L7F081B14 /* 0B6620 7F081AF0 8E080000 */ lw $t0, ($s0) .L7F081AF4: -/* 0B6624 7F081AF4 0FC26919 */ jal get_num_players +/* 0B6624 7F081AF4 0FC26919 */ jal getPlayerCount /* 0B6628 7F081AF8 00000000 */ nop /* 0B662C 7F081AFC 24010001 */ li $at, 1 /* 0B6630 7F081B00 54410004 */ bnel $v0, $at, .L7F081B14 @@ -17522,7 +15380,7 @@ glabel controller_gameplay_interaction /* 0B6650 7F081B20 8D0A00D8 */ lw $t2, 0xd8($t0) /* 0B6654 7F081B24 554003A9 */ bnezl $t2, .L7F0829CC /* 0B6658 7F081B28 8E0A0000 */ lw $t2, ($s0) -/* 0B665C 7F081B2C 0FC26919 */ jal get_num_players +/* 0B665C 7F081B2C 0FC26919 */ jal getPlayerCount /* 0B6660 7F081B30 00000000 */ nop /* 0B6664 7F081B34 24010001 */ li $at, 1 /* 0B6668 7F081B38 10410008 */ beq $v0, $at, .L7F081B5C @@ -17563,7 +15421,7 @@ glabel controller_gameplay_interaction /* 0B66EC 7F081BBC 01D8C824 */ and $t9, $t6, $t8 /* 0B66F0 7F081BC0 0FC26C54 */ jal get_cur_playernum /* 0B66F4 7F081BC4 AFB90060 */ sw $t9, 0x60($sp) -/* 0B66F8 7F081BC8 0FC26919 */ jal get_num_players +/* 0B66F8 7F081BC8 0FC26919 */ jal getPlayerCount /* 0B66FC 7F081BCC AFA20064 */ sw $v0, 0x64($sp) /* 0B6700 7F081BD0 8FAA0064 */ lw $t2, 0x64($sp) /* 0B6704 7F081BD4 004A2021 */ addu $a0, $v0, $t2 @@ -17572,7 +15430,7 @@ glabel controller_gameplay_interaction /* 0B6710 7F081BE0 000C2603 */ sra $a0, $t4, 0x18 /* 0B6714 7F081BE4 0FC26C54 */ jal get_cur_playernum /* 0B6718 7F081BE8 A3A2011F */ sb $v0, 0x11f($sp) -/* 0B671C 7F081BEC 0FC26919 */ jal get_num_players +/* 0B671C 7F081BEC 0FC26919 */ jal getPlayerCount /* 0B6720 7F081BF0 AFA20064 */ sw $v0, 0x64($sp) /* 0B6724 7F081BF4 8FAD0064 */ lw $t5, 0x64($sp) /* 0B6728 7F081BF8 004D2021 */ addu $a0, $v0, $t5 @@ -17581,7 +15439,7 @@ glabel controller_gameplay_interaction /* 0B6734 7F081C04 000F2603 */ sra $a0, $t7, 0x18 /* 0B6738 7F081C08 0FC26C54 */ jal get_cur_playernum /* 0B673C 7F081C0C A3A2011E */ sb $v0, 0x11e($sp) -/* 0B6740 7F081C10 0FC26919 */ jal get_num_players +/* 0B6740 7F081C10 0FC26919 */ jal getPlayerCount /* 0B6744 7F081C14 AFA20064 */ sw $v0, 0x64($sp) /* 0B6748 7F081C18 8FB80064 */ lw $t8, 0x64($sp) /* 0B674C 7F081C1C 3405FFFF */ li $a1, 65535 @@ -18734,7 +16592,7 @@ glabel controller_gameplay_interaction /* 0B7794 7F082C64 00000000 */ nop /* 0B7798 7F082C68 10400007 */ beqz $v0, .L7F082C88 /* 0B779C 7F082C6C 00000000 */ nop -/* 0B77A0 7F082C70 0FC26919 */ jal get_num_players +/* 0B77A0 7F082C70 0FC26919 */ jal getPlayerCount /* 0B77A4 7F082C74 00000000 */ nop /* 0B77A8 7F082C78 24010001 */ li $at, 1 /* 0B77AC 7F082C7C 14410002 */ bne $v0, $at, .L7F082C88 @@ -19206,33 +17064,33 @@ glabel controller_gameplay_interaction /* 0B7E54 7F083324 8FAC0150 */ lw $t4, 0x150($sp) /* 0B7E58 7F083328 11A00005 */ beqz $t5, .L7F083340 /* 0B7E5C 7F08332C 00000000 */ nop -/* 0B7E60 7F083330 0FC1E662 */ jal sub_GAME_7F079988 +/* 0B7E60 7F083330 0FC1E662 */ jal currentPlayerSetSwayTarget /* 0B7E64 7F083334 2404FFFF */ li $a0, -1 /* 0B7E68 7F083338 1000000A */ b .L7F083364 /* 0B7E6C 7F08333C 8FB8015C */ lw $t8, 0x15c($sp) .L7F083340: /* 0B7E70 7F083340 11800005 */ beqz $t4, .L7F083358 /* 0B7E74 7F083344 00000000 */ nop -/* 0B7E78 7F083348 0FC1E662 */ jal sub_GAME_7F079988 +/* 0B7E78 7F083348 0FC1E662 */ jal currentPlayerSetSwayTarget /* 0B7E7C 7F08334C 24040001 */ li $a0, 1 /* 0B7E80 7F083350 10000004 */ b .L7F083364 /* 0B7E84 7F083354 8FB8015C */ lw $t8, 0x15c($sp) .L7F083358: -/* 0B7E88 7F083358 0FC1E662 */ jal sub_GAME_7F079988 +/* 0B7E88 7F083358 0FC1E662 */ jal currentPlayerSetSwayTarget /* 0B7E8C 7F08335C 00002025 */ move $a0, $zero /* 0B7E90 7F083360 8FB8015C */ lw $t8, 0x15c($sp) .L7F083364: /* 0B7E94 7F083364 8FAE0158 */ lw $t6, 0x158($sp) /* 0B7E98 7F083368 13000005 */ beqz $t8, .L7F083380 /* 0B7E9C 7F08336C 00000000 */ nop -/* 0B7EA0 7F083370 0FC1E66B */ jal change_crouch_position +/* 0B7EA0 7F083370 0FC1E66B */ jal currentPlayerAdjustCrouchPos /* 0B7EA4 7F083374 2404FFFE */ li $a0, -2 /* 0B7EA8 7F083378 10000006 */ b .L7F083394 /* 0B7EAC 7F08337C 8E080000 */ lw $t0, ($s0) .L7F083380: /* 0B7EB0 7F083380 51C00004 */ beql $t6, $zero, .L7F083394 /* 0B7EB4 7F083384 8E080000 */ lw $t0, ($s0) -/* 0B7EB8 7F083388 0FC1E66B */ jal change_crouch_position +/* 0B7EB8 7F083388 0FC1E66B */ jal currentPlayerAdjustCrouchPos /* 0B7EBC 7F08338C 24040002 */ li $a0, 2 /* 0B7EC0 7F083390 8E080000 */ lw $t0, ($s0) .L7F083394: @@ -19582,7 +17440,7 @@ glabel controller_gameplay_interaction /* 0B83BC 7F08388C 45020007 */ bc1fl .L7F0838AC /* 0B83C0 7F083890 460C7281 */ sub.s $f10, $f14, $f12 /* 0B83C4 7F083894 44816000 */ mtc1 $at, $f12 -/* 0B83C8 7F083898 0FC20004 */ jal sub_GAME_7F080010 +/* 0B83C8 7F083898 0FC20004 */ jal currentPlayerUpdateSpeedVerta /* 0B83CC 7F08389C E7AE00C4 */ swc1 $f14, 0xc4($sp) /* 0B83D0 7F0838A0 10000010 */ b .L7F0838E4 /* 0B83D4 7F0838A4 C7AE00C4 */ lwc1 $f14, 0xc4($sp) @@ -19594,13 +17452,13 @@ glabel controller_gameplay_interaction /* 0B83E8 7F0838B8 45020007 */ bc1fl .L7F0838D8 /* 0B83EC 7F0838BC 4600A306 */ mov.s $f12, $f20 /* 0B83F0 7F0838C0 44816000 */ mtc1 $at, $f12 -/* 0B83F4 7F0838C4 0FC20004 */ jal sub_GAME_7F080010 +/* 0B83F4 7F0838C4 0FC20004 */ jal currentPlayerUpdateSpeedVerta /* 0B83F8 7F0838C8 E7AE00C4 */ swc1 $f14, 0xc4($sp) /* 0B83FC 7F0838CC 10000005 */ b .L7F0838E4 /* 0B8400 7F0838D0 C7AE00C4 */ lwc1 $f14, 0xc4($sp) /* 0B8404 7F0838D4 4600A306 */ mov.s $f12, $f20 .L7F0838D8: -/* 0B8408 7F0838D8 0FC20004 */ jal sub_GAME_7F080010 +/* 0B8408 7F0838D8 0FC20004 */ jal currentPlayerUpdateSpeedVerta /* 0B840C 7F0838DC E7AE00C4 */ swc1 $f14, 0xc4($sp) /* 0B8410 7F0838E0 C7AE00C4 */ lwc1 $f14, 0xc4($sp) .L7F0838E4: @@ -19645,7 +17503,7 @@ glabel controller_gameplay_interaction .L7F083970: /* 0B84A0 7F083970 1140002E */ beqz $t2, .L7F083A2C /* 0B84A4 7F083974 C7B20184 */ lwc1 $f18, 0x184($sp) -/* 0B84A8 7F083978 0C001177 */ jal video_related_23 +/* 0B84A8 7F083978 0C001177 */ jal viGetFovY /* 0B84AC 7F08397C 00000000 */ nop /* 0B84B0 7F083980 8FAB0128 */ lw $t3, 0x128($sp) /* 0B84B4 7F083984 3C014270 */ li $at, 0x42700000 # 60.000000 @@ -19699,7 +17557,7 @@ glabel controller_gameplay_interaction /* 0B8560 7F083A30 C7A40180 */ lwc1 $f4, 0x180($sp) /* 0B8564 7F083A34 45020010 */ bc1fl .L7F083A78 /* 0B8568 7F083A38 4604A03C */ c.lt.s $f20, $f4 -/* 0B856C 7F083A3C 0FC20004 */ jal sub_GAME_7F080010 +/* 0B856C 7F083A3C 0FC20004 */ jal currentPlayerUpdateSpeedVerta /* 0B8570 7F083A40 46009306 */ mov.s $f12, $f18 /* 0B8574 7F083A44 8FAC01AC */ lw $t4, 0x1ac($sp) /* 0B8578 7F083A48 8FB80120 */ lw $t8, 0x120($sp) @@ -19719,7 +17577,7 @@ glabel controller_gameplay_interaction /* 0B85A8 7F083A78 00000000 */ nop /* 0B85AC 7F083A7C 4500000F */ bc1f .L7F083ABC /* 0B85B0 7F083A80 00000000 */ nop -/* 0B85B4 7F083A84 0FC20004 */ jal sub_GAME_7F080010 +/* 0B85B4 7F083A84 0FC20004 */ jal currentPlayerUpdateSpeedVerta /* 0B85B8 7F083A88 46002307 */ neg.s $f12, $f4 /* 0B85BC 7F083A8C 8FB901AC */ lw $t9, 0x1ac($sp) /* 0B85C0 7F083A90 8FAA0120 */ lw $t2, 0x120($sp) @@ -19735,7 +17593,7 @@ glabel controller_gameplay_interaction /* 0B85E4 7F083AB4 10000003 */ b .L7F083AC4 /* 0B85E8 7F083AB8 ADAB0110 */ sw $t3, 0x110($t5) .L7F083ABC: -/* 0B85EC 7F083ABC 0FC20004 */ jal sub_GAME_7F080010 +/* 0B85EC 7F083ABC 0FC20004 */ jal currentPlayerUpdateSpeedVerta /* 0B85F0 7F083AC0 4600A306 */ mov.s $f12, $f20 .L7F083AC4: /* 0B85F4 7F083AC4 8E080000 */ lw $t0, ($s0) @@ -19775,7 +17633,7 @@ glabel controller_gameplay_interaction /* 0B8670 7F083B40 C7A6017C */ lwc1 $f6, 0x17c($sp) /* 0B8674 7F083B44 51C0002A */ beql $t6, $zero, .L7F083BF0 /* 0B8678 7F083B48 4606A03C */ c.lt.s $f20, $f6 -/* 0B867C 7F083B4C 0C001177 */ jal video_related_23 +/* 0B867C 7F083B4C 0C001177 */ jal viGetFovY /* 0B8680 7F083B50 00000000 */ nop /* 0B8684 7F083B54 8FAF012C */ lw $t7, 0x12c($sp) /* 0B8688 7F083B58 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -19947,7 +17805,7 @@ glabel controller_gameplay_interaction /* 0B88D8 7F083DA8 AF200898 */ sw $zero, 0x898($t9) /* 0B88DC 7F083DAC 240A0001 */ li $t2, 1 .L7F083DB0: -/* 0B88E0 7F083DB0 0FC26919 */ jal get_num_players +/* 0B88E0 7F083DB0 0FC26919 */ jal getPlayerCount /* 0B88E4 7F083DB4 AFAA0074 */ sw $t2, 0x74($sp) /* 0B88E8 7F083DB8 28410002 */ slti $at, $v0, 2 /* 0B88EC 7F083DBC 5420000C */ bnezl $at, .L7F083DF0 @@ -20213,7 +18071,7 @@ glabel sub_GAME_7F083FC8 /* 0B8C74 7F084144 44070000 */ mfc1 $a3, $f0 /* 0B8C78 7F084148 8D040020 */ lw $a0, 0x20($t0) /* 0B8C7C 7F08414C 8D050024 */ lw $a1, 0x24($t0) -/* 0B8C80 7F084150 0FC201EC */ jal set_rgba_tint +/* 0B8C80 7F084150 0FC201EC */ jal currentPlayerSetFadeColour /* 0B8C84 7F084154 8D060028 */ lw $a2, 0x28($t0) /* 0B8C88 7F084158 3C028008 */ lui $v0, %hi(pPlayer) /* 0B8C8C 7F08415C 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) @@ -20239,7 +18097,7 @@ glabel sub_GAME_7F083FC8 .L7F0841A0: /* 0B8CD0 7F0841A0 AC4E00F4 */ sw $t6, 0xf4($v0) /* 0B8CD4 7F0841A4 240600FF */ li $a2, 255 -/* 0B8CD8 7F0841A8 0FC201EC */ jal set_rgba_tint +/* 0B8CD8 7F0841A8 0FC201EC */ jal currentPlayerSetFadeColour /* 0B8CDC 7F0841AC 24070000 */ li $a3, 0 /* 0B8CE0 7F0841B0 3C028008 */ lui $v0, %hi(pPlayer) /* 0B8CE4 7F0841B4 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) @@ -20474,7 +18332,7 @@ glabel sub_GAME_7F083FC8 /* 0B92E4 7F084774 44070000 */ mfc1 $a3, $f0 /* 0B92E8 7F084778 8C640020 */ lw $a0, 0x20($v1) /* 0B92EC 7F08477C 8C650024 */ lw $a1, 0x24($v1) -/* 0B92F0 7F084780 0FC20370 */ jal set_rgba_tint +/* 0B92F0 7F084780 0FC20370 */ jal currentPlayerSetFadeColour /* 0B92F4 7F084784 8C660028 */ lw $a2, 0x28($v1) /* 0B92F8 7F084788 3C028008 */ lui $v0, %hi(pPlayer) # $v0, 0x8008 /* 0B92FC 7F08478C 8C42A120 */ lw $v0, %lo(pPlayer)($v0) @@ -20503,7 +18361,7 @@ glabel sub_GAME_7F083FC8 /* 0B9344 7F0847D4 240500FF */ li $a1, 255 /* 0B9348 7F0847D8 240600FF */ li $a2, 255 /* 0B934C 7F0847DC 24070000 */ li $a3, 0 -/* 0B9350 7F0847E0 0FC20370 */ jal set_rgba_tint +/* 0B9350 7F0847E0 0FC20370 */ jal currentPlayerSetFadeColour /* 0B9354 7F0847E4 E44600F4 */ swc1 $f6, 0xf4($v0) /* 0B9358 7F0847E8 3C028008 */ lui $v0, %hi(pPlayer) # $v0, 0x8008 /* 0B935C 7F0847EC 8C42A120 */ lw $v0, %lo(pPlayer)($v0) @@ -21078,7 +18936,7 @@ glabel MoveBond .L7F08474C: /* 0B927C 7F08474C 3C118008 */ lui $s1, %hi(pPlayer) /* 0B9280 7F084750 2631A0B0 */ addiu $s1, %lo(pPlayer) # addiu $s1, $s1, -0x5f50 -/* 0B9284 7F084754 0FC1E694 */ jal setptrBONDdata +/* 0B9284 7F084754 0FC1E694 */ jal currentPlayerSetField00 /* 0B9288 7F084758 00002025 */ move $a0, $zero /* 0B928C 7F08475C 0FC20FF2 */ jal sub_GAME_7F083FC8 /* 0B9290 7F084760 00000000 */ nop @@ -21109,7 +18967,7 @@ glabel MoveBond /* 0B92EC 7F0847BC 8D6B6448 */ lw $t3, %lo(in_tank_flag)($t3) /* 0B92F0 7F0847C0 1560006E */ bnez $t3, .L7F08497C /* 0B92F4 7F0847C4 00000000 */ nop -/* 0B92F8 7F0847C8 0FC1E67C */ jal sub_GAME_7F0799F0 +/* 0B92F8 7F0847C8 0FC1E67C */ jal currentPlayerGetCrouchPos /* 0B92FC 7F0847CC 00000000 */ nop /* 0B9300 7F0847D0 5440000D */ bnezl $v0, .L7F084808 /* 0B9304 7F0847D4 8E280000 */ lw $t0, ($s1) @@ -21282,7 +19140,7 @@ glabel MoveBond /* 0B9578 7F084A48 27A40348 */ addiu $a0, $sp, 0x348 /* 0B957C 7F084A4C 27A5033C */ addiu $a1, $sp, 0x33c /* 0B9580 7F084A50 E7AA031C */ swc1 $f10, 0x31c($sp) -/* 0B9584 7F084A54 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 0B9584 7F084A54 0FC2CA2C */ jal getCollisionEdge_maybe /* 0B9588 7F084A58 E7A60304 */ swc1 $f6, 0x304($sp) /* 0B958C 7F084A5C C7A8033C */ lwc1 $f8, 0x33c($sp) /* 0B9590 7F084A60 C7A40348 */ lwc1 $f4, 0x348($sp) @@ -21834,7 +19692,7 @@ glabel MoveBond .L7F08525C: /* 0B9D8C 7F08525C 0FC205E4 */ jal sub_GAME_7F081790 /* 0B9D90 7F085260 00000000 */ nop -/* 0B9D94 7F085264 0FC1E67C */ jal sub_GAME_7F0799F0 +/* 0B9D94 7F085264 0FC1E67C */ jal currentPlayerGetCrouchPos /* 0B9D98 7F085268 E7B402AC */ swc1 $f20, 0x2ac($sp) /* 0B9D9C 7F08526C 14400004 */ bnez $v0, .L7F085280 /* 0B9DA0 7F085270 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 @@ -21842,7 +19700,7 @@ glabel MoveBond /* 0B9DA8 7F085278 1000000B */ b .L7F0852A8 /* 0B9DAC 7F08527C E7A602AC */ swc1 $f6, 0x2ac($sp) .L7F085280: -/* 0B9DB0 7F085280 0FC1E67C */ jal sub_GAME_7F0799F0 +/* 0B9DB0 7F085280 0FC1E67C */ jal currentPlayerGetCrouchPos /* 0B9DB4 7F085284 00000000 */ nop /* 0B9DB8 7F085288 24010001 */ li $at, 1 /* 0B9DBC 7F08528C 14410004 */ bne $v0, $at, .L7F0852A0 @@ -21851,7 +19709,7 @@ glabel MoveBond /* 0B9DC8 7F085298 10000003 */ b .L7F0852A8 /* 0B9DCC 7F08529C E7A402AC */ swc1 $f4, 0x2ac($sp) .L7F0852A0: -/* 0B9DD0 7F0852A0 0FC1E67C */ jal sub_GAME_7F0799F0 +/* 0B9DD0 7F0852A0 0FC1E67C */ jal currentPlayerGetCrouchPos /* 0B9DD4 7F0852A4 00000000 */ nop .L7F0852A8: /* 0B9DD8 7F0852A8 8E280000 */ lw $t0, ($s1) @@ -23618,7 +21476,7 @@ glabel MoveBond .Ljp7F084DFC: /* 0B996C 7F084DFC 3C118008 */ lui $s1, %hi(pPlayer) # $s1, 0x8008 /* 0B9970 7F084E00 2631A120 */ addiu $s1, %lo(pPlayer) # addiu $s1, $s1, -0x5ee0 -/* 0B9974 7F084E04 0FC1E810 */ jal setptrBONDdata +/* 0B9974 7F084E04 0FC1E810 */ jal currentPlayerSetField00 /* 0B9978 7F084E08 00002025 */ move $a0, $zero /* 0B997C 7F084E0C 0FC21176 */ jal sub_GAME_7F083FC8 /* 0B9980 7F084E10 00000000 */ nop @@ -23649,7 +21507,7 @@ glabel MoveBond /* 0B99DC 7F084E6C 8D6B6488 */ lw $t3, %lo(in_tank_flag)($t3) /* 0B99E0 7F084E70 1560006E */ bnez $t3, .Ljp7F08502C /* 0B99E4 7F084E74 00000000 */ nop -/* 0B99E8 7F084E78 0FC1E7F8 */ jal sub_GAME_7F0799F0 +/* 0B99E8 7F084E78 0FC1E7F8 */ jal currentPlayerGetCrouchPos /* 0B99EC 7F084E7C 00000000 */ nop /* 0B99F0 7F084E80 5440000D */ bnezl $v0, .Ljp7F084EB8 /* 0B99F4 7F084E84 8E280000 */ lw $t0, ($s1) @@ -23822,7 +21680,7 @@ glabel MoveBond /* 0B9C68 7F0850F8 27A40348 */ addiu $a0, $sp, 0x348 /* 0B9C6C 7F0850FC 27A5033C */ addiu $a1, $sp, 0x33c /* 0B9C70 7F085100 E7AA031C */ swc1 $f10, 0x31c($sp) -/* 0B9C74 7F085104 0FC2CD18 */ jal sub_GAME_7F0B28B0 +/* 0B9C74 7F085104 0FC2CD18 */ jal getCollisionEdge_maybe /* 0B9C78 7F085108 E7A60304 */ swc1 $f6, 0x304($sp) /* 0B9C7C 7F08510C C7A8033C */ lwc1 $f8, 0x33c($sp) /* 0B9C80 7F085110 C7A40348 */ lwc1 $f4, 0x348($sp) @@ -24374,7 +22232,7 @@ glabel MoveBond .Ljp7F08590C: /* 0BA47C 7F08590C 0FC20768 */ jal sub_GAME_7F081790 /* 0BA480 7F085910 00000000 */ nop -/* 0BA484 7F085914 0FC1E7F8 */ jal sub_GAME_7F0799F0 +/* 0BA484 7F085914 0FC1E7F8 */ jal currentPlayerGetCrouchPos /* 0BA488 7F085918 E7B402AC */ swc1 $f20, 0x2ac($sp) /* 0BA48C 7F08591C 14400004 */ bnez $v0, .Ljp7F085930 /* 0BA490 7F085920 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 @@ -24382,7 +22240,7 @@ glabel MoveBond /* 0BA498 7F085928 1000000B */ b .Ljp7F085958 /* 0BA49C 7F08592C E7A602AC */ swc1 $f6, 0x2ac($sp) .Ljp7F085930: -/* 0BA4A0 7F085930 0FC1E7F8 */ jal sub_GAME_7F0799F0 +/* 0BA4A0 7F085930 0FC1E7F8 */ jal currentPlayerGetCrouchPos /* 0BA4A4 7F085934 00000000 */ nop /* 0BA4A8 7F085938 24010001 */ li $at, 1 /* 0BA4AC 7F08593C 14410004 */ bne $v0, $at, .Ljp7F085950 @@ -24391,7 +22249,7 @@ glabel MoveBond /* 0BA4B8 7F085948 10000003 */ b .Ljp7F085958 /* 0BA4BC 7F08594C E7A402AC */ swc1 $f4, 0x2ac($sp) .Ljp7F085950: -/* 0BA4C0 7F085950 0FC1E7F8 */ jal sub_GAME_7F0799F0 +/* 0BA4C0 7F085950 0FC1E7F8 */ jal currentPlayerGetCrouchPos /* 0BA4C4 7F085954 00000000 */ nop .Ljp7F085958: /* 0BA4C8 7F085958 8E280000 */ lw $t0, ($s1) @@ -26022,14 +23880,14 @@ void sub_GAME_7F086990(s32 arg0, s32 arg1, ? arg2, ? arg_unalignedA, ? arg3, ? a { // Node 7 sub_GAME_7F07B56C(arg_unalignedA, arg_unalignedE, &sp64, &sp58, &sp4C, &sp3C, &sp30); - setptrBONDdata(1); + currentPlayerSetField00(1); // Node 8 - return setptrBONDdata(0); + return currentPlayerSetField00(0); } } } // Node 6 - return setptrBONDdata(0); + return currentPlayerSetField00(0); } #else GLOBAL_ASM( @@ -26165,7 +24023,7 @@ glabel sub_GAME_7F086990 /* 0BB6B4 7F086B84 14410005 */ bne $v0, $at, .L7F086B9C /* 0BB6B8 7F086B88 97A4007A */ lhu $a0, 0x7a($sp) .L7F086B8C: -/* 0BB6BC 7F086B8C 0FC1E694 */ jal setptrBONDdata +/* 0BB6BC 7F086B8C 0FC1E694 */ jal currentPlayerSetField00 /* 0BB6C0 7F086B90 00002025 */ move $a0, $zero /* 0BB6C4 7F086B94 10000015 */ b .L7F086BEC /* 0BB6C8 7F086B98 8FBF0024 */ lw $ra, 0x24($sp) @@ -26180,7 +24038,7 @@ glabel sub_GAME_7F086990 /* 0BB6E8 7F086BB8 27A60064 */ addiu $a2, $sp, 0x64 /* 0BB6EC 7F086BBC 0FC1ED5B */ jal sub_GAME_7F07B56C /* 0BB6F0 7F086BC0 27A70058 */ addiu $a3, $sp, 0x58 -/* 0BB6F4 7F086BC4 0FC1E694 */ jal setptrBONDdata +/* 0BB6F4 7F086BC4 0FC1E694 */ jal currentPlayerSetField00 /* 0BB6F8 7F086BC8 24040001 */ li $a0, 1 /* 0BB6FC 7F086BCC 27B80030 */ addiu $t8, $sp, 0x30 /* 0BB700 7F086BD0 AFB80010 */ sw $t8, 0x10($sp) @@ -26219,7 +24077,7 @@ int getHeight330or240(void) { s32 get_curplayer_viewport_width(void) { - if (get_num_players() >= 3) + if (getPlayerCount() >= 3) { return 159; } @@ -26241,7 +24099,7 @@ s32 get_curplayer_viewport_width(void) s32 get_curplayer_viewport_ulx(void) { - if (2 < get_num_players()) { + if (2 < getPlayerCount()) { if ((get_cur_playernum() == 1) || (get_cur_playernum() == 3)) { return 0xa1; } @@ -26255,7 +24113,7 @@ s32 get_curplayer_viewport_ulx(void) #ifdef NONMATCHING s32 get_curplayer_viewport_height(void) { - if (get_num_players() >= 2) + if (getPlayerCount() >= 2) { return 0x6d; } @@ -26287,7 +24145,7 @@ GLOBAL_ASM( glabel get_curplayer_viewport_height /* 0BB854 7F086D24 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0BB858 7F086D28 AFBF0014 */ sw $ra, 0x14($sp) -/* 0BB85C 7F086D2C 0FC26919 */ jal get_num_players +/* 0BB85C 7F086D2C 0FC26919 */ jal getPlayerCount /* 0BB860 7F086D30 00000000 */ nop /* 0BB864 7F086D34 28410002 */ slti $at, $v0, 2 /* 0BB868 7F086D38 14200003 */ bnez $at, .L7F086D48 @@ -26377,7 +24235,7 @@ GLOBAL_ASM( glabel get_curplayer_viewport_uly /* 0BB968 7F086E38 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0BB96C 7F086E3C AFBF0014 */ sw $ra, 0x14($sp) -/* 0BB970 7F086E40 0FC26919 */ jal get_num_players +/* 0BB970 7F086E40 0FC26919 */ jal getPlayerCount /* 0BB974 7F086E44 00000000 */ nop /* 0BB978 7F086E48 24010002 */ li $at, 2 /* 0BB97C 7F086E4C 14410009 */ bne $v0, $at, .L7F086E74 @@ -26392,7 +24250,7 @@ glabel get_curplayer_viewport_uly /* 0BB99C 7F086E6C 10000047 */ b .L7F086F8C /* 0BB9A0 7F086E70 24020079 */ li $v0, 121 .L7F086E74: -/* 0BB9A4 7F086E74 0FC26919 */ jal get_num_players +/* 0BB9A4 7F086E74 0FC26919 */ jal getPlayerCount /* 0BB9A8 7F086E78 00000000 */ nop /* 0BB9AC 7F086E7C 28410003 */ slti $at, $v0, 3 /* 0BB9B0 7F086E80 1420000A */ bnez $at, .L7F086EAC @@ -26518,8 +24376,8 @@ glabel possibly_reset_viewport_options_for_player /* 0BBB20 7F086FF0 8C790000 */ lw $t9, ($v1) /* 0BBB24 7F086FF4 0C000F07 */ jal get_video_settings2_frameb /* 0BBB28 7F086FF8 00000000 */ nop -/* 0BBB2C 7F086FFC 3C0F803E */ lui $t7, %hi(cfb_16_b) # $t7, 0x803e -/* 0BBB30 7F087000 25EFA800 */ addiu $t7, %lo(cfb_16_b) # addiu $t7, $t7, -0x5800 +/* 0BBB2C 7F086FFC 3C0F803E */ lui $t7, %hi(cfb_16+0x25800) # $t7, 0x803e +/* 0BBB30 7F087000 25EFA800 */ addiu $t7, %lo(cfb_16+0x25800) # addiu $t7, $t7, -0x5800 /* 0BBB34 7F087004 3C038003 */ lui $v1, %hi(camera_80036430) /* 0BBB38 7F087008 144F0006 */ bne $v0, $t7, .L7F087024 /* 0BBB3C 7F08700C 24636430 */ addiu $v1, %lo(camera_80036430) # addiu $v1, $v1, 0x6430 @@ -26544,8 +24402,8 @@ glabel possibly_reset_viewport_options_for_player /* 0BBB7C 7F08704C 8C6A0000 */ lw $t2, ($v1) /* 0BBB80 7F087050 0C000F07 */ jal get_video_settings2_frameb /* 0BBB84 7F087054 00000000 */ nop -/* 0BBB88 7F087058 3C09803B */ lui $t1, %hi(cfb_16_a) # $t1, 0x803b -/* 0BBB8C 7F08705C 25295000 */ addiu $t1, %lo(cfb_16_a) # addiu $t1, $t1, 0x5000 +/* 0BBB88 7F087058 3C09803B */ lui $t1, %hi(cfb_16) # $t1, 0x803b +/* 0BBB8C 7F08705C 25295000 */ addiu $t1, %lo(cfb_16) # addiu $t1, $t1, 0x5000 /* 0BBB90 7F087060 3C038003 */ lui $v1, %hi(camera_80036434) /* 0BBB94 7F087064 14490005 */ bne $v0, $t1, .L7F08707C /* 0BBB98 7F087068 24636434 */ addiu $v1, %lo(camera_80036434) # addiu $v1, $v1, 0x6434 @@ -26565,8 +24423,8 @@ glabel possibly_reset_viewport_options_for_player /* 0BBBC4 7F087094 00000000 */ nop /* 0BBBC8 7F087098 0C000F07 */ jal get_video_settings2_frameb /* 0BBBCC 7F08709C 00000000 */ nop -/* 0BBBD0 7F0870A0 3C0D803E */ lui $t5, %hi(cfb_16_b) # $t5, 0x803e -/* 0BBBD4 7F0870A4 25ADA800 */ addiu $t5, %lo(cfb_16_b) # addiu $t5, $t5, -0x5800 +/* 0BBBD0 7F0870A0 3C0D803E */ lui $t5, %hi(cfb_16+0x25800) # $t5, 0x803e +/* 0BBBD4 7F0870A4 25ADA800 */ addiu $t5, %lo(cfb_16+0x25800) # addiu $t5, $t5, -0x5800 /* 0BBBD8 7F0870A8 144D0003 */ bne $v0, $t5, .L7F0870B8 /* 0BBBDC 7F0870AC 3C048003 */ lui $a0, %hi(resolution) /* 0BBBE0 7F0870B0 0C000F0F */ jal set_video2buf_frameb @@ -26613,7 +24471,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BBC80 7F087150 46082182 */ mul.s $f6, $f4, $f8 /* 0BBC84 7F087154 00000000 */ nop /* 0BBC88 7F087158 46103302 */ mul.s $f12, $f6, $f16 -/* 0BBC8C 7F08715C 0C001164 */ jal video_related_21 +/* 0BBC8C 7F08715C 0C001164 */ jal set_page_aspect /* 0BBC90 7F087160 00000000 */ nop /* 0BBC94 7F087164 10000017 */ b .L7F0871C4 /* 0BBC98 7F087168 00000000 */ nop @@ -26638,7 +24496,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BBCE0 7F0871B0 44993000 */ mtc1 $t9, $f6 /* 0BBCE4 7F0871B4 46805120 */ cvt.s.w $f4, $f10 /* 0BBCE8 7F0871B8 46803420 */ cvt.s.w $f16, $f6 -/* 0BBCEC 7F0871BC 0C001164 */ jal video_related_21 +/* 0BBCEC 7F0871BC 0C001164 */ jal set_page_aspect /* 0BBCF0 7F0871C0 46048303 */ div.s $f12, $f16, $f4 .L7F0871C4: /* 0BBCF4 7F0871C4 0FC21B10 */ jal get_curplayer_viewport_width @@ -26691,9 +24549,9 @@ glabel possibly_reset_viewport_options_for_player /* 0BBDB0 7F087280 01602825 */ move $a1, $t3 /* 0BBDB4 7F087284 0C00112F */ jal set_video2_ulx_uly /* 0BBDB8 7F087288 87A4001C */ lh $a0, 0x1c($sp) -/* 0BBDBC 7F08728C 0FC2022F */ jal sub_GAME_7F0808BC +/* 0BBDBC 7F08728C 0FC2022F */ jal currentPlayerUpdateColourScreenProperties /* 0BBDC0 7F087290 00000000 */ nop -/* 0BBDC4 7F087294 0FC202A0 */ jal update_curplayer_fade +/* 0BBDC4 7F087294 0FC202A0 */ jal currentPlayerTickChrFade /* 0BBDC8 7F087298 00000000 */ nop /* 0BBDCC 7F08729C 0FC29394 */ jal cur_player_get_autoaim /* 0BBDD0 7F0872A0 00000000 */ nop @@ -26712,7 +24570,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BBE04 7F0872D4 24040001 */ li $a0, 1 /* 0BBE08 7F0872D8 0FC1A43D */ jal set_unset_ammo_on_screen_setting /* 0BBE0C 7F0872DC 00402825 */ move $a1, $v0 -/* 0BBE10 7F0872E0 0FC26919 */ jal get_num_players +/* 0BBE10 7F0872E0 0FC26919 */ jal getPlayerCount /* 0BBE14 7F0872E4 00000000 */ nop /* 0BBE18 7F0872E8 24010001 */ li $at, 1 /* 0BBE1C 7F0872EC 14410006 */ bne $v0, $at, .L7F087308 @@ -26723,7 +24581,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BBE30 7F087300 14A0000B */ bnez $a1, .L7F087330 /* 0BBE34 7F087304 00000000 */ nop .L7F087308: -/* 0BBE38 7F087308 0FC26919 */ jal get_num_players +/* 0BBE38 7F087308 0FC26919 */ jal getPlayerCount /* 0BBE3C 7F08730C 00000000 */ nop /* 0BBE40 7F087310 28430002 */ slti $v1, $v0, 2 /* 0BBE44 7F087314 38650001 */ xori $a1, $v1, 1 @@ -26803,7 +24661,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BBF54 7F087424 3109F030 */ andi $t1, $t0, 0xf030 /* 0BBF58 7F087428 11200025 */ beqz $t1, .L7F0874C0 /* 0BBF5C 7F08742C 00000000 */ nop -/* 0BBF60 7F087430 0FC20223 */ jal check_if_fade_to_black_complete +/* 0BBF60 7F087430 0FC20223 */ jal currentPlayerIsFadeComplete /* 0BBF64 7F087434 AC2A64A0 */ sw $t2, %lo(stop_time_flag)($at) /* 0BBF68 7F087438 10400015 */ beqz $v0, .L7F087490 /* 0BBF6C 7F08743C 3C0B8008 */ lui $t3, %hi(pPlayer) @@ -26817,13 +24675,13 @@ glabel possibly_reset_viewport_options_for_player /* 0BBF8C 7F08745C 45000018 */ bc1f .L7F0874C0 /* 0BBF90 7F087460 00000000 */ nop /* 0BBF94 7F087464 44070000 */ mfc1 $a3, $f0 -/* 0BBF98 7F087468 0FC201EC */ jal set_rgba_tint +/* 0BBF98 7F087468 0FC201EC */ jal currentPlayerSetFadeColour /* 0BBF9C 7F08746C 00003025 */ move $a2, $zero /* 0BBFA0 7F087470 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0BBFA4 7F087474 44816000 */ mtc1 $at, $f12 /* 0BBFA8 7F087478 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0BBFAC 7F08747C 44817000 */ mtc1 $at, $f14 -/* 0BBFB0 7F087480 0FC20216 */ jal fade_to_over_seconds +/* 0BBFB0 7F087480 0FC20216 */ jal currentPlayerSetFadeFrac /* 0BBFB4 7F087484 00000000 */ nop /* 0BBFB8 7F087488 1000000D */ b .L7F0874C0 /* 0BBFBC 7F08748C 00000000 */ nop @@ -26838,7 +24696,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BBFDC 7F0874AC 45000004 */ bc1f .L7F0874C0 /* 0BBFE0 7F0874B0 00000000 */ nop /* 0BBFE4 7F0874B4 44817000 */ mtc1 $at, $f14 -/* 0BBFE8 7F0874B8 0FC20216 */ jal fade_to_over_seconds +/* 0BBFE8 7F0874B8 0FC20216 */ jal currentPlayerSetFadeFrac /* 0BBFEC 7F0874BC C44C03E0 */ lwc1 $f12, 0x3e0($v0) .L7F0874C0: /* 0BBFF0 7F0874C0 3C0C8003 */ lui $t4, %hi(stop_time_flag) @@ -26846,7 +24704,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BBFF8 7F0874C8 24010002 */ li $at, 2 /* 0BBFFC 7F0874CC 1581000F */ bne $t4, $at, .L7F08750C /* 0BC000 7F0874D0 00000000 */ nop -/* 0BC004 7F0874D4 0FC20223 */ jal check_if_fade_to_black_complete +/* 0BC004 7F0874D4 0FC20223 */ jal currentPlayerIsFadeComplete /* 0BC008 7F0874D8 00000000 */ nop /* 0BC00C 7F0874DC 1040000B */ beqz $v0, .L7F08750C /* 0BC010 7F0874E0 3C0D8008 */ lui $t5, %hi(pPlayer) @@ -26904,7 +24762,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC0D0 7F0875A0 2401000A */ li $at, 10 /* 0BC0D4 7F0875A4 15010007 */ bne $t0, $at, .L7F0875C4 /* 0BC0D8 7F0875A8 00000000 */ nop -/* 0BC0DC 7F0875AC 0FC20223 */ jal check_if_fade_to_black_complete +/* 0BC0DC 7F0875AC 0FC20223 */ jal currentPlayerIsFadeComplete /* 0BC0E0 7F0875B0 00000000 */ nop /* 0BC0E4 7F0875B4 10400003 */ beqz $v0, .L7F0875C4 /* 0BC0E8 7F0875B8 00000000 */ nop @@ -26955,8 +24813,8 @@ glabel possibly_reset_viewport_options_for_player /* 0BC22C 7F0876BC 8C790000 */ lw $t9, ($v1) /* 0BC230 7F0876C0 0C000F07 */ jal get_video_settings2_frameb /* 0BC234 7F0876C4 00000000 */ nop -/* 0BC238 7F0876C8 3C0F803E */ lui $t7, %hi(cfb_16_b) # $t7, 0x803e -/* 0BC23C 7F0876CC 25EFA800 */ addiu $t7, %lo(cfb_16_b) # addiu $t7, $t7, -0x5800 +/* 0BC238 7F0876C8 3C0F803E */ lui $t7, %hi(cfb_16+0x25800) # $t7, 0x803e +/* 0BC23C 7F0876CC 25EFA800 */ addiu $t7, %lo(cfb_16+0x25800) # addiu $t7, $t7, -0x5800 /* 0BC240 7F0876D0 3C038003 */ lui $v1, %hi(camera_80036430) # $v1, 0x8003 /* 0BC244 7F0876D4 144F0006 */ bne $v0, $t7, .Ljp7F0876F0 /* 0BC248 7F0876D8 24636470 */ addiu $v1, %lo(camera_80036430) # addiu $v1, $v1, 0x6470 @@ -26981,8 +24839,8 @@ glabel possibly_reset_viewport_options_for_player /* 0BC288 7F087718 8C6A0000 */ lw $t2, ($v1) /* 0BC28C 7F08771C 0C000F07 */ jal get_video_settings2_frameb /* 0BC290 7F087720 00000000 */ nop -/* 0BC294 7F087724 3C09803B */ lui $t1, %hi(cfb_16_a) # $t1, 0x803b -/* 0BC298 7F087728 25295000 */ addiu $t1, %lo(cfb_16_a) # addiu $t1, $t1, 0x5000 +/* 0BC294 7F087724 3C09803B */ lui $t1, %hi(cfb_16) # $t1, 0x803b +/* 0BC298 7F087728 25295000 */ addiu $t1, %lo(cfb_16) # addiu $t1, $t1, 0x5000 /* 0BC29C 7F08772C 3C038003 */ lui $v1, %hi(camera_80036434) # $v1, 0x8003 /* 0BC2A0 7F087730 14490005 */ bne $v0, $t1, .Ljp7F087748 /* 0BC2A4 7F087734 24636474 */ addiu $v1, %lo(camera_80036434) # addiu $v1, $v1, 0x6474 @@ -27002,8 +24860,8 @@ glabel possibly_reset_viewport_options_for_player /* 0BC2D0 7F087760 00000000 */ nop /* 0BC2D4 7F087764 0C000F07 */ jal get_video_settings2_frameb /* 0BC2D8 7F087768 00000000 */ nop -/* 0BC2DC 7F08776C 3C0D803E */ lui $t5, %hi(cfb_16_b) # $t5, 0x803e -/* 0BC2E0 7F087770 25ADA800 */ addiu $t5, %lo(cfb_16_b) # addiu $t5, $t5, -0x5800 +/* 0BC2DC 7F08776C 3C0D803E */ lui $t5, %hi(cfb_16+0x25800) # $t5, 0x803e +/* 0BC2E0 7F087770 25ADA800 */ addiu $t5, %lo(cfb_16+0x25800) # addiu $t5, $t5, -0x5800 /* 0BC2E4 7F087774 144D0003 */ bne $v0, $t5, .Ljp7F087784 /* 0BC2E8 7F087778 3C048003 */ lui $a0, %hi(resolution) # $a0, 0x8003 /* 0BC2EC 7F08777C 0C000F0F */ jal set_video2buf_frameb @@ -27050,7 +24908,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC38C 7F08781C 46082182 */ mul.s $f6, $f4, $f8 /* 0BC390 7F087820 00000000 */ nop /* 0BC394 7F087824 46103302 */ mul.s $f12, $f6, $f16 -/* 0BC398 7F087828 0C001164 */ jal video_related_21 +/* 0BC398 7F087828 0C001164 */ jal set_page_aspect /* 0BC39C 7F08782C 00000000 */ nop /* 0BC3A0 7F087830 10000017 */ b .Ljp7F087890 /* 0BC3A4 7F087834 00000000 */ nop @@ -27075,7 +24933,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC3EC 7F08787C 44993000 */ mtc1 $t9, $f6 /* 0BC3F0 7F087880 46805120 */ cvt.s.w $f4, $f10 /* 0BC3F4 7F087884 46803420 */ cvt.s.w $f16, $f6 -/* 0BC3F8 7F087888 0C001164 */ jal video_related_21 +/* 0BC3F8 7F087888 0C001164 */ jal set_page_aspect /* 0BC3FC 7F08788C 46048303 */ div.s $f12, $f16, $f4 .Ljp7F087890: /* 0BC400 7F087890 0FC21CC3 */ jal get_curplayer_viewport_width @@ -27128,9 +24986,9 @@ glabel possibly_reset_viewport_options_for_player /* 0BC4BC 7F08794C 01602825 */ move $a1, $t3 /* 0BC4C0 7F087950 0C00112F */ jal set_video2_ulx_uly /* 0BC4C4 7F087954 87A4001C */ lh $a0, 0x1c($sp) -/* 0BC4C8 7F087958 0FC203B3 */ jal sub_GAME_7F0808BC +/* 0BC4C8 7F087958 0FC203B3 */ jal currentPlayerUpdateColourScreenProperties /* 0BC4CC 7F08795C 00000000 */ nop -/* 0BC4D0 7F087960 0FC20424 */ jal update_curplayer_fade +/* 0BC4D0 7F087960 0FC20424 */ jal currentPlayerTickChrFade /* 0BC4D4 7F087964 00000000 */ nop /* 0BC4D8 7F087968 0FC2967C */ jal cur_player_get_autoaim /* 0BC4DC 7F08796C 00000000 */ nop @@ -27149,7 +25007,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC510 7F0879A0 24040001 */ li $a0, 1 /* 0BC514 7F0879A4 0FC1A5B8 */ jal set_unset_ammo_on_screen_setting /* 0BC518 7F0879A8 00402825 */ move $a1, $v0 -/* 0BC51C 7F0879AC 0FC26C01 */ jal get_num_players +/* 0BC51C 7F0879AC 0FC26C01 */ jal getPlayerCount /* 0BC520 7F0879B0 00000000 */ nop /* 0BC524 7F0879B4 24010001 */ li $at, 1 /* 0BC528 7F0879B8 14410006 */ bne $v0, $at, .Ljp7F0879D4 @@ -27160,7 +25018,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC53C 7F0879CC 14A0000B */ bnez $a1, .Ljp7F0879FC /* 0BC540 7F0879D0 00000000 */ nop .Ljp7F0879D4: -/* 0BC544 7F0879D4 0FC26C01 */ jal get_num_players +/* 0BC544 7F0879D4 0FC26C01 */ jal getPlayerCount /* 0BC548 7F0879D8 00000000 */ nop /* 0BC54C 7F0879DC 28430002 */ slti $v1, $v0, 2 /* 0BC550 7F0879E0 38650001 */ xori $a1, $v1, 1 @@ -27240,7 +25098,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC660 7F087AF0 31F8F030 */ andi $t8, $t7, 0xf030 /* 0BC664 7F087AF4 13000025 */ beqz $t8, .Ljp7F087B8C /* 0BC668 7F087AF8 00000000 */ nop -/* 0BC66C 7F087AFC 0FC203A7 */ jal check_if_fade_to_black_complete +/* 0BC66C 7F087AFC 0FC203A7 */ jal currentPlayerIsFadeComplete /* 0BC670 7F087B00 AC3964E0 */ sw $t9, %lo(stop_time_flag)($at) /* 0BC674 7F087B04 10400015 */ beqz $v0, .Ljp7F087B5C /* 0BC678 7F087B08 3C088008 */ lui $t0, %hi(pPlayer) # $t0, 0x8008 @@ -27254,13 +25112,13 @@ glabel possibly_reset_viewport_options_for_player /* 0BC698 7F087B28 45000018 */ bc1f .Ljp7F087B8C /* 0BC69C 7F087B2C 00000000 */ nop /* 0BC6A0 7F087B30 44070000 */ mfc1 $a3, $f0 -/* 0BC6A4 7F087B34 0FC20370 */ jal set_rgba_tint +/* 0BC6A4 7F087B34 0FC20370 */ jal currentPlayerSetFadeColour /* 0BC6A8 7F087B38 00003025 */ move $a2, $zero /* 0BC6AC 7F087B3C 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0BC6B0 7F087B40 44816000 */ mtc1 $at, $f12 /* 0BC6B4 7F087B44 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0BC6B8 7F087B48 44817000 */ mtc1 $at, $f14 -/* 0BC6BC 7F087B4C 0FC2039A */ jal fade_to_over_seconds +/* 0BC6BC 7F087B4C 0FC2039A */ jal currentPlayerSetFadeFrac /* 0BC6C0 7F087B50 00000000 */ nop /* 0BC6C4 7F087B54 1000000D */ b .Ljp7F087B8C /* 0BC6C8 7F087B58 00000000 */ nop @@ -27275,7 +25133,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC6E8 7F087B78 45000004 */ bc1f .Ljp7F087B8C /* 0BC6EC 7F087B7C 00000000 */ nop /* 0BC6F0 7F087B80 44817000 */ mtc1 $at, $f14 -/* 0BC6F4 7F087B84 0FC2039A */ jal fade_to_over_seconds +/* 0BC6F4 7F087B84 0FC2039A */ jal currentPlayerSetFadeFrac /* 0BC6F8 7F087B88 C44C03E0 */ lwc1 $f12, 0x3e0($v0) .Ljp7F087B8C: /* 0BC6FC 7F087B8C 3C098003 */ lui $t1, %hi(stop_time_flag) # $t1, 0x8003 @@ -27283,7 +25141,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC704 7F087B94 24010002 */ li $at, 2 /* 0BC708 7F087B98 1521000F */ bne $t1, $at, .Ljp7F087BD8 /* 0BC70C 7F087B9C 00000000 */ nop -/* 0BC710 7F087BA0 0FC203A7 */ jal check_if_fade_to_black_complete +/* 0BC710 7F087BA0 0FC203A7 */ jal currentPlayerIsFadeComplete /* 0BC714 7F087BA4 00000000 */ nop /* 0BC718 7F087BA8 1040000B */ beqz $v0, .Ljp7F087BD8 /* 0BC71C 7F087BAC 3C0A8008 */ lui $t2, %hi(pPlayer) # $t2, 0x8008 @@ -27341,7 +25199,7 @@ glabel possibly_reset_viewport_options_for_player /* 0BC7DC 7F087C6C 2401000A */ li $at, 10 /* 0BC7E0 7F087C70 15E10007 */ bne $t7, $at, .Ljp7F087C90 /* 0BC7E4 7F087C74 00000000 */ nop -/* 0BC7E8 7F087C78 0FC203A7 */ jal check_if_fade_to_black_complete +/* 0BC7E8 7F087C78 0FC203A7 */ jal currentPlayerIsFadeComplete /* 0BC7EC 7F087C7C 00000000 */ nop /* 0BC7F0 7F087C80 10400003 */ beqz $v0, .Ljp7F087C90 /* 0BC7F4 7F087C84 00000000 */ nop @@ -27411,52 +25269,12 @@ glabel sub_GAME_7F0875E4 ) #endif - - - - -#ifdef NONMATCHING void store_BONDdata_curpos_to_previous(void) { - // Node 0 - pPlayer->previous_model_xpos = (f32) pPlayer->current_model_xpos; - pPlayer->previous_model_ypos = (f32) pPlayer->current_model_ypos; - pPlayer->previous_model_zpos = (f32) pPlayer->current_model_zpos; - return matrix_4x4_rotate_vector_in_place(get_BONDdata_field_10CC(), (pPlayer + 0x44)); + pPlayer->previous_model_pos[0] = pPlayer->current_model_pos[0]; + pPlayer->previous_model_pos[1] = pPlayer->current_model_pos[1]; + pPlayer->previous_model_pos[2] = pPlayer->current_model_pos[2]; + matrix_4x4_rotate_vector_in_place(currentPlayerGetMatrix10CC(), pPlayer->previous_model_pos); } -#else -GLOBAL_ASM( -.text -glabel store_BONDdata_curpos_to_previous -/* 0BC194 7F087664 3C038008 */ lui $v1, %hi(pPlayer) -/* 0BC198 7F087668 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0BC19C 7F08766C 8C620000 */ lw $v0, ($v1) -/* 0BC1A0 7F087670 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0BC1A4 7F087674 AFBF0014 */ sw $ra, 0x14($sp) -/* 0BC1A8 7F087678 C4440038 */ lwc1 $f4, 0x38($v0) -/* 0BC1AC 7F08767C E4440044 */ swc1 $f4, 0x44($v0) -/* 0BC1B0 7F087680 8C620000 */ lw $v0, ($v1) -/* 0BC1B4 7F087684 C446003C */ lwc1 $f6, 0x3c($v0) -/* 0BC1B8 7F087688 E4460048 */ swc1 $f6, 0x48($v0) -/* 0BC1BC 7F08768C 8C620000 */ lw $v0, ($v1) -/* 0BC1C0 7F087690 C4480040 */ lwc1 $f8, 0x40($v0) -/* 0BC1C4 7F087694 0FC1E0F1 */ jal get_BONDdata_field_10CC -/* 0BC1C8 7F087698 E448004C */ swc1 $f8, 0x4c($v0) -/* 0BC1CC 7F08769C 3C038008 */ lui $v1, %hi(pPlayer) -/* 0BC1D0 7F0876A0 2463A0B0 */ addiu $v1, %lo(pPlayer) # addiu $v1, $v1, -0x5f50 -/* 0BC1D4 7F0876A4 8C650000 */ lw $a1, ($v1) -/* 0BC1D8 7F0876A8 00402025 */ move $a0, $v0 -/* 0BC1DC 7F0876AC 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place -/* 0BC1E0 7F0876B0 24A50044 */ addiu $a1, $a1, 0x44 -/* 0BC1E4 7F0876B4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC1E8 7F0876B8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0BC1EC 7F0876BC 03E00008 */ jr $ra -/* 0BC1F0 7F0876C0 00000000 */ nop -) -#endif - - - - #ifdef NONMATCHING void sub_GAME_7F0876C4(void *arg0, void *arg1, void *arg2) { @@ -27500,12 +25318,12 @@ void sub_GAME_7F0876C4(void *arg0, void *arg1, void *arg2) { spB8 = temp_f16; spBC = (f32) (arg1->unk4 + temp_f6); spC0 = (f32) (arg1->unk8 + temp_f4); - sub_GAME_7F059424(&spC4, temp_f10, temp_f6, temp_f4, (f32) *arg1, (f32) arg1->unk4, (f32) arg1->unk8, (f32) *arg2, (f32) arg2->unk4, (f32) arg2->unk8); + matrix_4x4_7F059424(&spC4, temp_f10, temp_f6, temp_f4, (f32) *arg1, (f32) arg1->unk4, (f32) arg1->unk8, (f32) *arg2, (f32) arg2->unk4, (f32) arg2->unk8); guLookAtReflect(&sp108, sp104, spAC, spB0, spB4, temp_f16, spBC, spC0, (f32) *arg2, (f32) arg2->unk4, (f32) arg2->unk8); - sub_GAME_7F059424(pPlayer->field_64, *arg0, arg0->unk4, arg0->unk8, (f32) *arg1, (f32) arg1->unk4, (f32) arg1->unk8, (f32) *arg2, (f32) arg2->unk4, (f32) arg2->unk8); - sub_GAME_7F059708(pPlayer->field_68, *arg0, arg0->unk4, arg0->unk8, (f32) *arg1, (f32) arg1->unk4, (f32) arg1->unk8, (f32) *arg2, (f32) arg2->unk4, (f32) arg2->unk8); + matrix_4x4_7F059424(pPlayer->field_64, *arg0, arg0->unk4, arg0->unk8, (f32) *arg1, (f32) arg1->unk4, (f32) arg1->unk8, (f32) *arg2, (f32) arg2->unk4, (f32) arg2->unk8); + matrix_4x4_7F059708(pPlayer->field_68, *arg0, arg0->unk4, arg0->unk8, (f32) *arg1, (f32) arg1->unk4, (f32) arg1->unk8, (f32) *arg2, (f32) arg2->unk4, (f32) arg2->unk8); temp_s0 = sub_GAME_7F0BD6E0(); - matrix_4x4_multiply(get_BONDdata_field_10DC(), &spC4, &sp60); + matrix_4x4_multiply(currentPlayerGetProjectionMatrixF(), &spC4, &sp60); phi_a1 = &sp60; loop_1: // Node 1 @@ -27549,10 +25367,10 @@ loop_2: matrix_scalar_multiply(sub_GAME_7F0B4878(), &spC4); guMtxF2L(&spC4, pPlayer->field_5C); sub_GAME_7F059334(pPlayer->field_5C, pPlayer->field_60); - set_BONDdata_field_10C8(pPlayer->field_5C); - set_BONDdata_field_10C4(pPlayer->field_60); - copy_BONDdata_field_10CC_to_10E8_set_10CC(pPlayer->field_64); - sub_GAME_7F078424(pPlayer->field_68); + currentPlayerSetMatrix10C8(pPlayer->field_5C); + currentPlayerSetMatrix10C4(pPlayer->field_60); + currentPlayerSetMatrix10CC(pPlayer->field_64); + currentPlayerSetMatrix10D4(pPlayer->field_68); sub_GAME_7F078464(sp104); sub_GAME_7F0785DC(); return store_BONDdata_curpos_to_previous(); @@ -27633,7 +25451,7 @@ glabel sub_GAME_7F0876C4 /* 0BC308 7F0877D8 C6260004 */ lwc1 $f6, 4($s1) /* 0BC30C 7F0877DC E7A60020 */ swc1 $f6, 0x20($sp) /* 0BC310 7F0877E0 C6240008 */ lwc1 $f4, 8($s1) -/* 0BC314 7F0877E4 0FC16509 */ jal sub_GAME_7F059424 +/* 0BC314 7F0877E4 0FC16509 */ jal matrix_4x4_7F059424 /* 0BC318 7F0877E8 E7A40024 */ swc1 $f4, 0x24($sp) /* 0BC31C 7F0877EC C7A800B4 */ lwc1 $f8, 0xb4($sp) /* 0BC320 7F0877F0 C7B000B8 */ lwc1 $f16, 0xb8($sp) @@ -27671,7 +25489,7 @@ glabel sub_GAME_7F0876C4 /* 0BC3A0 7F087870 C6240004 */ lwc1 $f4, 4($s1) /* 0BC3A4 7F087874 E7A40020 */ swc1 $f4, 0x20($sp) /* 0BC3A8 7F087878 C6280008 */ lwc1 $f8, 8($s1) -/* 0BC3AC 7F08787C 0FC16509 */ jal sub_GAME_7F059424 +/* 0BC3AC 7F08787C 0FC16509 */ jal matrix_4x4_7F059424 /* 0BC3B0 7F087880 E7A80024 */ swc1 $f8, 0x24($sp) /* 0BC3B4 7F087884 8FAB0148 */ lw $t3, 0x148($sp) /* 0BC3B8 7F087888 8E4A0000 */ lw $t2, ($s2) @@ -27690,11 +25508,11 @@ glabel sub_GAME_7F0876C4 /* 0BC3EC 7F0878BC C6240004 */ lwc1 $f4, 4($s1) /* 0BC3F0 7F0878C0 E7A40020 */ swc1 $f4, 0x20($sp) /* 0BC3F4 7F0878C4 C6280008 */ lwc1 $f8, 8($s1) -/* 0BC3F8 7F0878C8 0FC165C2 */ jal sub_GAME_7F059708 +/* 0BC3F8 7F0878C8 0FC165C2 */ jal matrix_4x4_7F059708 /* 0BC3FC 7F0878CC E7A80024 */ swc1 $f8, 0x24($sp) /* 0BC400 7F0878D0 0FC2F5B8 */ jal sub_GAME_7F0BD6E0 /* 0BC404 7F0878D4 00000000 */ nop -/* 0BC408 7F0878D8 0FC1E0F9 */ jal get_BONDdata_field_10DC +/* 0BC408 7F0878D8 0FC1E0F9 */ jal currentPlayerGetProjectionMatrixF /* 0BC40C 7F0878DC 00408025 */ move $s0, $v0 /* 0BC410 7F0878E0 27B10060 */ addiu $s1, $sp, 0x60 /* 0BC414 7F0878E4 02203025 */ move $a2, $s1 @@ -27751,16 +25569,16 @@ glabel sub_GAME_7F0876C4 /* 0BC4D0 7F0879A0 0FC164CD */ jal sub_GAME_7F059334 /* 0BC4D4 7F0879A4 8C650060 */ lw $a1, 0x60($v1) /* 0BC4D8 7F0879A8 8E4D0000 */ lw $t5, ($s2) -/* 0BC4DC 7F0879AC 0FC1E0D1 */ jal set_BONDdata_field_10C8 +/* 0BC4DC 7F0879AC 0FC1E0D1 */ jal currentPlayerSetMatrix10C8 /* 0BC4E0 7F0879B0 8DA4005C */ lw $a0, 0x5c($t5) /* 0BC4E4 7F0879B4 8E4E0000 */ lw $t6, ($s2) -/* 0BC4E8 7F0879B8 0FC1E0C9 */ jal set_BONDdata_field_10C4 +/* 0BC4E8 7F0879B8 0FC1E0C9 */ jal currentPlayerSetMatrix10C4 /* 0BC4EC 7F0879BC 8DC40060 */ lw $a0, 0x60($t6) /* 0BC4F0 7F0879C0 8E4F0000 */ lw $t7, ($s2) -/* 0BC4F4 7F0879C4 0FC1E0E9 */ jal copy_BONDdata_field_10CC_to_10E8_set_10CC +/* 0BC4F4 7F0879C4 0FC1E0E9 */ jal currentPlayerSetMatrix10CC /* 0BC4F8 7F0879C8 8DE40064 */ lw $a0, 0x64($t7) /* 0BC4FC 7F0879CC 8E580000 */ lw $t8, ($s2) -/* 0BC500 7F0879D0 0FC1E109 */ jal sub_GAME_7F078424 +/* 0BC500 7F0879D0 0FC1E109 */ jal currentPlayerSetMatrix10D4 /* 0BC504 7F0879D4 8F040068 */ lw $a0, 0x68($t8) /* 0BC508 7F0879D8 0FC1E119 */ jal sub_GAME_7F078464 /* 0BC50C 7F0879DC 8FA40104 */ lw $a0, 0x104($sp) @@ -28506,7 +26324,7 @@ glabel sub_GAME_7F087E74 /* 0BCB94 7F088064 44054000 */ mfc1 $a1, $f8 /* 0BCB98 7F088068 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y /* 0BCB9C 7F08806C 00000000 */ nop -/* 0BCBA0 7F088070 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0BCBA0 7F088070 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0BCBA4 7F088074 00000000 */ nop /* 0BCBA8 7F088078 00402025 */ move $a0, $v0 /* 0BCBAC 7F08807C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -28601,7 +26419,7 @@ glabel sub_GAME_7F087E74 /* 0BCD0C 7F0881DC E7AA0020 */ swc1 $f10, 0x20($sp) /* 0BCD10 7F0881E0 C44801F4 */ lwc1 $f8, 0x1f4($v0) /* 0BCD14 7F0881E4 E7AE0168 */ swc1 $f14, 0x168($sp) -/* 0BCD18 7F0881E8 0FC16642 */ jal sub_GAME_7F059908 +/* 0BCD18 7F0881E8 0FC16642 */ jal matrix_4x4_7F059908 /* 0BCD1C 7F0881EC E7A80024 */ swc1 $f8, 0x24($sp) /* 0BCD20 7F0881F0 8FA40164 */ lw $a0, 0x164($sp) /* 0BCD24 7F0881F4 0FC16218 */ jal matrix_4x4_get_rotation_around_xyz @@ -28850,12 +26668,12 @@ glabel sub_GAME_7F087E74 /* 0BD0B4 7F088584 8FA40164 */ lw $a0, 0x164($sp) /* 0BD0B8 7F088588 0FC1601A */ jal matrix_4x4_multiply_in_place /* 0BD0BC 7F08858C 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BD0C0 7F088590 0FC16319 */ jal sub_GAME_7F058C64 +/* 0BD0C0 7F088590 0FC16319 */ jal matrix_4x4_7F058C64 /* 0BD0C4 7F088594 00000000 */ nop /* 0BD0C8 7F088598 27A4004C */ addiu $a0, $sp, 0x4c /* 0BD0CC 7F08859C 0FC16327 */ jal sub_GAME_7F058C9C /* 0BD0D0 7F0885A0 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD0D4 7F0885A4 0FC16322 */ jal sub_GAME_7F058C88 +/* 0BD0D4 7F0885A4 0FC16322 */ jal matrix_4x4_7F058C88 /* 0BD0D8 7F0885A8 00000000 */ nop /* 0BD0DC 7F0885AC 3C0E8008 */ lui $t6, %hi(pPlayer) /* 0BD0E0 7F0885B0 8DCEA0B0 */ lw $t6, %lo(pPlayer)($t6) @@ -28870,7 +26688,7 @@ glabel sub_GAME_7F087E74 .L7F0885D4: /* 0BD104 7F0885D4 0FC2B28A */ jal sub_GAME_7F0ACA28 /* 0BD108 7F0885D8 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD10C 7F0885DC 0FC16319 */ jal sub_GAME_7F058C64 +/* 0BD10C 7F0885DC 0FC16319 */ jal matrix_4x4_7F058C64 /* 0BD110 7F0885E0 AFA201F8 */ sw $v0, 0x1f8($sp) /* 0BD114 7F0885E4 3C0F8008 */ lui $t7, %hi(pPlayer) /* 0BD118 7F0885E8 8DEFA0B0 */ lw $t7, %lo(pPlayer)($t7) @@ -28878,7 +26696,7 @@ glabel sub_GAME_7F087E74 /* 0BD120 7F0885F0 8DE4023C */ lw $a0, 0x23c($t7) /* 0BD124 7F0885F4 0FC22F52 */ jal sub_GAME_7F08BD48 /* 0BD128 7F0885F8 85A5000E */ lh $a1, 0xe($t5) -/* 0BD12C 7F0885FC 0FC16322 */ jal sub_GAME_7F058C88 +/* 0BD12C 7F0885FC 0FC16322 */ jal matrix_4x4_7F058C88 /* 0BD130 7F088600 00000000 */ nop .L7F088604: /* 0BD134 7F088604 8FBF002C */ lw $ra, 0x2c($sp) @@ -29027,7 +26845,7 @@ glabel sub_GAME_7F087E74 /* 0BD2A0 7F088730 44054000 */ mfc1 $a1, $f8 /* 0BD2A4 7F088734 0FC1627C */ jal matrix_4x4_set_position_and_rotation_around_y /* 0BD2A8 7F088738 00000000 */ nop -/* 0BD2AC 7F08873C 0FC1E26D */ jal get_BONDdata_field_10CC +/* 0BD2AC 7F08873C 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 0BD2B0 7F088740 00000000 */ nop /* 0BD2B4 7F088744 00402025 */ move $a0, $v0 /* 0BD2B8 7F088748 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place @@ -29124,7 +26942,7 @@ glabel sub_GAME_7F087E74 /* 0BD420 7F0888B0 E7A60020 */ swc1 $f6, 0x20($sp) /* 0BD424 7F0888B4 C44401F4 */ lwc1 $f4, 0x1f4($v0) /* 0BD428 7F0888B8 E7AE0168 */ swc1 $f14, 0x168($sp) -/* 0BD42C 7F0888BC 0FC1678A */ jal sub_GAME_7F059908 +/* 0BD42C 7F0888BC 0FC1678A */ jal matrix_4x4_7F059908 /* 0BD430 7F0888C0 E7A40024 */ swc1 $f4, 0x24($sp) /* 0BD434 7F0888C4 8FA40164 */ lw $a0, 0x164($sp) /* 0BD438 7F0888C8 0FC16360 */ jal matrix_4x4_get_rotation_around_xyz @@ -29373,12 +27191,12 @@ glabel sub_GAME_7F087E74 /* 0BD7C8 7F088C58 8FA40164 */ lw $a0, 0x164($sp) /* 0BD7CC 7F088C5C 0FC16162 */ jal matrix_4x4_multiply_in_place /* 0BD7D0 7F088C60 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BD7D4 7F088C64 0FC16461 */ jal sub_GAME_7F058C64 +/* 0BD7D4 7F088C64 0FC16461 */ jal matrix_4x4_7F058C64 /* 0BD7D8 7F088C68 00000000 */ nop /* 0BD7DC 7F088C6C 27A4004C */ addiu $a0, $sp, 0x4c /* 0BD7E0 7F088C70 0FC1646F */ jal sub_GAME_7F058C9C /* 0BD7E4 7F088C74 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD7E8 7F088C78 0FC1646A */ jal sub_GAME_7F058C88 +/* 0BD7E8 7F088C78 0FC1646A */ jal matrix_4x4_7F058C88 /* 0BD7EC 7F088C7C 00000000 */ nop /* 0BD7F0 7F088C80 3C0C8008 */ lui $t4, %hi(pPlayer) # $t4, 0x8008 /* 0BD7F4 7F088C84 8D8CA120 */ lw $t4, %lo(pPlayer)($t4) @@ -29393,7 +27211,7 @@ glabel sub_GAME_7F087E74 .Ljp7F088CA8: /* 0BD818 7F088CA8 0FC2B574 */ jal sub_GAME_7F0ACA28 /* 0BD81C 7F088CAC 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD820 7F088CB0 0FC16461 */ jal sub_GAME_7F058C64 +/* 0BD820 7F088CB0 0FC16461 */ jal matrix_4x4_7F058C64 /* 0BD824 7F088CB4 AFA201F8 */ sw $v0, 0x1f8($sp) /* 0BD828 7F088CB8 3C0A8008 */ lui $t2, %hi(pPlayer) # $t2, 0x8008 /* 0BD82C 7F088CBC 8D4AA120 */ lw $t2, %lo(pPlayer)($t2) @@ -29401,7 +27219,7 @@ glabel sub_GAME_7F087E74 /* 0BD834 7F088CC4 8D44023C */ lw $a0, 0x23c($t2) /* 0BD838 7F088CC8 0FC23174 */ jal sub_GAME_7F08BD48 /* 0BD83C 7F088CCC 85E5000E */ lh $a1, 0xe($t7) -/* 0BD840 7F088CD0 0FC1646A */ jal sub_GAME_7F058C88 +/* 0BD840 7F088CD0 0FC1646A */ jal matrix_4x4_7F058C88 /* 0BD844 7F088CD4 00000000 */ nop .Ljp7F088CD8: /* 0BD848 7F088CD8 8FBF002C */ lw $ra, 0x2c($sp) @@ -29446,7 +27264,7 @@ s32 sub_GAME_7F088618(void *arg0) { *arg0 = 0x1030040; temp_s0 = (arg0 + 8); arg0->unk4 = osVirtualToPhysical(spB8); - sub_GAME_7F059694(&sp78, 0.0f, &0x43FA0004, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f); + matrix_4x4_7F059694(&sp78, 0.0f, &0x43FA0004, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f); sub_GAME_7F058C9C(&sp78, spBC); *temp_s0 = 0x1020040; temp_s0_2 = (temp_s0 + 8); @@ -29479,7 +27297,7 @@ s32 sub_GAME_7F088618(void *arg0) { temp_s0_11 = (temp_s0_10 + 8); temp_s0_10->unk4 = (s32) (pPlayer + 0x80002128); *temp_s0_11 = 0x1030040; - temp_s0_11->unk4 = osVirtualToPhysical(get_BONDdata_field_10D8(temp_s0_9, temp_s0_10, 0x6000000, temp_s0_6)); + temp_s0_11->unk4 = osVirtualToPhysical(currentPlayerGetProjectionMatrix(temp_s0_9, temp_s0_10, 0x6000000, temp_s0_6)); return (temp_s0_11 + 8); } #else @@ -29574,7 +27392,7 @@ glabel sub_GAME_7F088618 /* 0BD29C 7F08876C E7A00018 */ swc1 $f0, 0x18($sp) /* 0BD2A0 7F088770 E7A00014 */ swc1 $f0, 0x14($sp) /* 0BD2A4 7F088774 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0BD2A8 7F088778 0FC165A5 */ jal sub_GAME_7F059694 +/* 0BD2A8 7F088778 0FC165A5 */ jal matrix_4x4_7F059694 /* 0BD2AC 7F08877C E7B20024 */ swc1 $f18, 0x24($sp) /* 0BD2B0 7F088780 27A40078 */ addiu $a0, $sp, 0x78 /* 0BD2B4 7F088784 0FC16327 */ jal sub_GAME_7F058C9C @@ -29654,7 +27472,7 @@ glabel sub_GAME_7F088618 /* 0BD3DC 7F0888AC 356B0040 */ ori $t3, (0x01030040 & 0xFFFF) # ori $t3, $t3, 0x40 /* 0BD3E0 7F0888B0 02008825 */ move $s1, $s0 /* 0BD3E4 7F0888B4 AE2B0000 */ sw $t3, ($s1) -/* 0BD3E8 7F0888B8 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0BD3E8 7F0888B8 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0BD3EC 7F0888BC 26100008 */ addiu $s0, $s0, 8 /* 0BD3F0 7F0888C0 0C003A2C */ jal osVirtualToPhysical /* 0BD3F4 7F0888C4 00402025 */ move $a0, $v0 @@ -29744,7 +27562,7 @@ glabel mp_respawn_handler /* 0BD4B8 7F088988 AD0F1128 */ sw $t7, 0x1128($t0) /* 0BD4BC 7F08898C 0FC22A4A */ jal sub_GAME_7F08A928 /* 0BD4C0 7F088990 2404FFFF */ li $a0, -1 -/* 0BD4C4 7F088994 0FC26919 */ jal get_num_players +/* 0BD4C4 7F088994 0FC26919 */ jal getPlayerCount /* 0BD4C8 7F088998 00000000 */ nop /* 0BD4CC 7F08899C 28410002 */ slti $at, $v0, 2 /* 0BD4D0 7F0889A0 14200008 */ bnez $at, .L7F0889C4 @@ -29966,7 +27784,7 @@ mp_spawntype_default: /* 0BD7E0 7F088CB0 8E390000 */ lw $t9, ($s1) /* 0BD7E4 7F088CB4 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0BD7E8 7F088CB8 44817000 */ mtc1 $at, $f14 -/* 0BD7EC 7F088CBC 0FC20284 */ jal set_curplayer_fade +/* 0BD7EC 7F088CBC 0FC20284 */ jal currentPlayerStartChrFade /* 0BD7F0 7F088CC0 E7200080 */ swc1 $f0, 0x80($t9) /* 0BD7F4 7F088CC4 8FBF001C */ lw $ra, 0x1c($sp) /* 0BD7F8 7F088CC8 8FB00014 */ lw $s0, 0x14($sp) @@ -30024,7 +27842,7 @@ glabel sub_GAME_7F088CD8 /* 0BD88C 7F088D5C AFB900B4 */ sw $t9, 0xb4($sp) /* 0BD890 7F088D60 0FC2B366 */ jal microcode_constructor /* 0BD894 7F088D64 02A02025 */ move $a0, $s5 -/* 0BD898 7F088D68 0C00112B */ jal get_video2_settings_height +/* 0BD898 7F088D68 0C00112B */ jal viGetViewHeight /* 0BD89C 7F088D6C 0040A825 */ move $s5, $v0 /* 0BD8A0 7F088D70 8FAA00B4 */ lw $t2, 0xb4($sp) /* 0BD8A4 7F088D74 3C048003 */ lui $a0, %hi(D_80036440) @@ -30133,11 +27951,11 @@ glabel sub_GAME_7F088CD8 /* 0BDA0C 7F088EDC 00000000 */ nop /* 0BDA10 7F088EE0 AFA20084 */ sw $v0, 0x84($sp) .L7F088EE4: -/* 0BDA14 7F088EE4 0C00112B */ jal get_video2_settings_height +/* 0BDA14 7F088EE4 0C00112B */ jal viGetViewHeight /* 0BDA18 7F088EE8 00000000 */ nop /* 0BDA1C 7F088EEC 00028400 */ sll $s0, $v0, 0x10 /* 0BDA20 7F088EF0 00106403 */ sra $t4, $s0, 0x10 -/* 0BDA24 7F088EF4 0C001149 */ jal get_video2_settings_uly +/* 0BDA24 7F088EF4 0C001149 */ jal viGetViewTop /* 0BDA28 7F088EF8 01808025 */ move $s0, $t4 /* 0BDA2C 7F088EFC 8FAE00B4 */ lw $t6, 0xb4($sp) /* 0BDA30 7F088F00 00516821 */ addu $t5, $v0, $s1 @@ -30235,11 +28053,11 @@ glabel sub_GAME_7F088CD8 /* 0BDB8C 7F08905C 00000000 */ nop /* 0BDB90 7F089060 AFA20080 */ sw $v0, 0x80($sp) .L7F089064: -/* 0BDB94 7F089064 0C00112B */ jal get_video2_settings_height +/* 0BDB94 7F089064 0C00112B */ jal viGetViewHeight /* 0BDB98 7F089068 00000000 */ nop /* 0BDB9C 7F08906C 00028400 */ sll $s0, $v0, 0x10 /* 0BDBA0 7F089070 00106403 */ sra $t4, $s0, 0x10 -/* 0BDBA4 7F089074 0C001149 */ jal get_video2_settings_uly +/* 0BDBA4 7F089074 0C001149 */ jal viGetViewTop /* 0BDBA8 7F089078 01808025 */ move $s0, $t4 /* 0BDBAC 7F08907C 8FAE00B4 */ lw $t6, 0xb4($sp) /* 0BDBB0 7F089080 00516821 */ addu $t5, $v0, $s1 @@ -30383,7 +28201,7 @@ glabel maybe_mp_interface /* 0BDD80 7F089250 0FC15884 */ jal sub_GAME_7F056210 /* 0BDD84 7F089254 00402025 */ move $a0, $v0 /* 0BDD88 7F089258 AFA20058 */ sw $v0, 0x58($sp) -/* 0BDD8C 7F08925C 0FC20138 */ jal sub_GAME_7F0804E0 +/* 0BDD8C 7F08925C 0FC20138 */ jal currentPlayerDrawFade /* 0BDD90 7F089260 00402025 */ move $a0, $v0 /* 0BDD94 7F089264 AFA20058 */ sw $v0, 0x58($sp) /* 0BDD98 7F089268 0FC22336 */ jal sub_GAME_7F088CD8 @@ -30405,19 +28223,19 @@ glabel maybe_mp_interface /* 0BDDD4 7F0892A4 8F1929C4 */ lw $t9, 0x29c4($t8) /* 0BDDD8 7F0892A8 1320001F */ beqz $t9, .L7F089328 /* 0BDDDC 7F0892AC 00000000 */ nop -/* 0BDDE0 7F0892B0 0C001145 */ jal get_video2_settings_ulx +/* 0BDDE0 7F0892B0 0C001145 */ jal viGetViewLeft /* 0BDDE4 7F0892B4 00000000 */ nop -/* 0BDDE8 7F0892B8 0C001149 */ jal get_video2_settings_uly +/* 0BDDE8 7F0892B8 0C001149 */ jal viGetViewTop /* 0BDDEC 7F0892BC AFA20054 */ sw $v0, 0x54($sp) -/* 0BDDF0 7F0892C0 0C001145 */ jal get_video2_settings_ulx +/* 0BDDF0 7F0892C0 0C001145 */ jal viGetViewLeft /* 0BDDF4 7F0892C4 AFA20050 */ sw $v0, 0x50($sp) -/* 0BDDF8 7F0892C8 0C001127 */ jal get_video2_settings_width +/* 0BDDF8 7F0892C8 0C001127 */ jal viGetViewWidth /* 0BDDFC 7F0892CC A7A2002E */ sh $v0, 0x2e($sp) /* 0BDE00 7F0892D0 87A8002E */ lh $t0, 0x2e($sp) /* 0BDE04 7F0892D4 00484821 */ addu $t1, $v0, $t0 -/* 0BDE08 7F0892D8 0C001149 */ jal get_video2_settings_uly +/* 0BDE08 7F0892D8 0C001149 */ jal viGetViewTop /* 0BDE0C 7F0892DC AFA9004C */ sw $t1, 0x4c($sp) -/* 0BDE10 7F0892E0 0C00112B */ jal get_video2_settings_height +/* 0BDE10 7F0892E0 0C00112B */ jal viGetViewHeight /* 0BDE14 7F0892E4 A7A2002E */ sh $v0, 0x2e($sp) /* 0BDE18 7F0892E8 87AA002E */ lh $t2, 0x2e($sp) /* 0BDE1C 7F0892EC 8FA40058 */ lw $a0, 0x58($sp) @@ -30473,7 +28291,7 @@ glabel maybe_mp_interface /* 0BDED8 7F0893A8 00000000 */ nop /* 0BDEDC 7F0893AC AC602A00 */ sw $zero, 0x2a00($v1) .L7F0893B0: -/* 0BDEE0 7F0893B0 0FC26919 */ jal get_num_players +/* 0BDEE0 7F0893B0 0FC26919 */ jal getPlayerCount /* 0BDEE4 7F0893B4 00000000 */ nop /* 0BDEE8 7F0893B8 24010001 */ li $at, 1 /* 0BDEEC 7F0893BC 14410003 */ bne $v0, $at, .L7F0893CC @@ -30500,7 +28318,7 @@ glabel maybe_mp_interface /* 0BDF38 7F089408 3C0A8008 */ lui $t2, %hi(pPlayer) /* 0BDF3C 7F08940C 0FC070A1 */ jal die_blood_image_routine /* 0BDF40 7F089410 00002025 */ move $a0, $zero -/* 0BDF44 7F089414 0FC26919 */ jal get_num_players +/* 0BDF44 7F089414 0FC26919 */ jal getPlayerCount /* 0BDF48 7F089418 00000000 */ nop /* 0BDF4C 7F08941C 24010001 */ li $at, 1 /* 0BDF50 7F089420 14410013 */ bne $v0, $at, .L7F089470 @@ -30539,7 +28357,7 @@ glabel maybe_mp_interface /* 0BDFC8 7F089498 3C073F34 */ lui $a3, (0x3F34B4B5 >> 16) # lui $a3, 0x3f34 /* 0BDFCC 7F08949C 11600006 */ beqz $t3, .L7F0894B8 /* 0BDFD0 7F0894A0 3C0C8005 */ lui $t4, %hi(clock_timer) -/* 0BDFD4 7F0894A4 0FC201EC */ jal set_rgba_tint +/* 0BDFD4 7F0894A4 0FC201EC */ jal currentPlayerSetFadeColour /* 0BDFD8 7F0894A8 34E7B4B5 */ ori $a3, (0x3F34B4B5 & 0xFFFF) # ori $a3, $a3, 0xb4b5 /* 0BDFDC 7F0894AC 3C038008 */ lui $v1, %hi(pPlayer) /* 0BDFE0 7F0894B0 10000013 */ b .L7F089500 @@ -30594,19 +28412,19 @@ glabel maybe_mp_interface /* 0BE094 7F089564 AC790428 */ sw $t9, 0x428($v1) /* 0BE098 7F089568 00003025 */ move $a2, $zero /* 0BE09C 7F08956C 00003825 */ move $a3, $zero -/* 0BE0A0 7F089570 0FC201F8 */ jal sub_GAME_7F0807E0 +/* 0BE0A0 7F089570 0FC201F8 */ jal currentPlayerAdjustFade /* 0BE0A4 7F089574 E7A60010 */ swc1 $f6, 0x10($sp) /* 0BE0A8 7F089578 3C0142F0 */ li $at, 0x42F00000 # 120.000000 /* 0BE0AC 7F08957C 44816000 */ mtc1 $at, $f12 /* 0BE0B0 7F089580 44807000 */ mtc1 $zero, $f14 -/* 0BE0B4 7F089584 0FC20284 */ jal set_curplayer_fade +/* 0BE0B4 7F089584 0FC20284 */ jal currentPlayerStartChrFade /* 0BE0B8 7F089588 00000000 */ nop .L7F08958C: -/* 0BE0BC 7F08958C 0FC20223 */ jal check_if_fade_to_black_complete +/* 0BE0BC 7F08958C 0FC20223 */ jal currentPlayerIsFadeComplete /* 0BE0C0 7F089590 00000000 */ nop /* 0BE0C4 7F089594 10400030 */ beqz $v0, .L7F089658 /* 0BE0C8 7F089598 00000000 */ nop -/* 0BE0CC 7F08959C 0FC26919 */ jal get_num_players +/* 0BE0CC 7F08959C 0FC26919 */ jal getPlayerCount /* 0BE0D0 7F0895A0 00000000 */ nop /* 0BE0D4 7F0895A4 24010001 */ li $at, 1 /* 0BE0D8 7F0895A8 14410005 */ bne $v0, $at, .L7F0895C0 @@ -30620,7 +28438,7 @@ glabel maybe_mp_interface /* 0BE0F4 7F0895C4 00000000 */ nop /* 0BE0F8 7F0895C8 0FC26C54 */ jal get_cur_playernum /* 0BE0FC 7F0895CC AFA20040 */ sw $v0, 0x40($sp) -/* 0BE100 7F0895D0 0FC26919 */ jal get_num_players +/* 0BE100 7F0895D0 0FC26919 */ jal getPlayerCount /* 0BE104 7F0895D4 AFA2003C */ sw $v0, 0x3c($sp) /* 0BE108 7F0895D8 00402825 */ move $a1, $v0 /* 0BE10C 7F0895DC 00002025 */ move $a0, $zero @@ -30678,7 +28496,7 @@ glabel maybe_mp_interface /* 0BE1CC 7F08969C 0FC31824 */ jal display_red_blue_on_radar /* 0BE1D0 7F0896A0 00402025 */ move $a0, $v0 /* 0BE1D4 7F0896A4 AFA20058 */ sw $v0, 0x58($sp) -/* 0BE1D8 7F0896A8 0FC20138 */ jal sub_GAME_7F0804E0 +/* 0BE1D8 7F0896A8 0FC20138 */ jal currentPlayerDrawFade /* 0BE1DC 7F0896AC 00402025 */ move $a0, $v0 /* 0BE1E0 7F0896B0 8FBF001C */ lw $ra, 0x1c($sp) .L7F0896B4: @@ -30840,20 +28658,9 @@ glabel sub_GAME_7F089780 -#ifdef NONMATCHING -void get_curplayer_positiondata(void) { - +struct prop* get_curplayer_positiondata(void) { + return pPlayer->prop; } -#else -GLOBAL_ASM( -.text -glabel get_curplayer_positiondata -/* 0BE2C8 7F089798 3C0E8008 */ lui $t6, %hi(pPlayer) -/* 0BE2CC 7F08979C 8DCEA0B0 */ lw $t6, %lo(pPlayer)($t6) -/* 0BE2D0 7F0897A0 03E00008 */ jr $ra -/* 0BE2D4 7F0897A4 8DC200A8 */ lw $v0, 0xa8($t6) -) -#endif @@ -31033,7 +28840,7 @@ glabel record_damage_kills /* 0BE4C8 7F089998 0FC28BCC */ jal sub_GAME_7F0A2F30 /* 0BE4CC 7F08999C 24841598 */ addiu $a0, $a0, 0x1598 .L7F0899A0: -/* 0BE4D0 7F0899A0 0FC26919 */ jal get_num_players +/* 0BE4D0 7F0899A0 0FC26919 */ jal getPlayerCount /* 0BE4D4 7F0899A4 00000000 */ nop /* 0BE4D8 7F0899A8 28410002 */ slti $at, $v0, 2 /* 0BE4DC 7F0899AC 14200007 */ bnez $at, .L7F0899CC @@ -31076,14 +28883,14 @@ glabel record_damage_kills /* 0BE568 7F089A38 00000000 */ nop /* 0BE56C 7F089A3C 0FC26C54 */ jal get_cur_playernum /* 0BE570 7F089A40 00000000 */ nop -/* 0BE574 7F089A44 0FC26919 */ jal get_num_players +/* 0BE574 7F089A44 0FC26919 */ jal getPlayerCount /* 0BE578 7F089A48 AFA2001C */ sw $v0, 0x1c($sp) /* 0BE57C 7F089A4C 8FAC001C */ lw $t4, 0x1c($sp) /* 0BE580 7F089A50 3C053E80 */ lui $a1, 0x3e80 /* 0BE584 7F089A54 0C003215 */ jal controller_7000C854 /* 0BE588 7F089A58 004C2021 */ addu $a0, $v0, $t4 .L7F089A5C: -/* 0BE58C 7F089A5C 0FC26919 */ jal get_num_players +/* 0BE58C 7F089A5C 0FC26919 */ jal getPlayerCount /* 0BE590 7F089A60 00000000 */ nop /* 0BE594 7F089A64 28410002 */ slti $at, $v0, 2 /* 0BE598 7F089A68 14200010 */ bnez $at, .L7F089AAC @@ -31119,7 +28926,7 @@ glabel record_damage_kills /* 0BE60C 7F089ADC 8C5800F4 */ lw $t8, 0xf4($v0) /* 0BE610 7F089AE0 0702000B */ bltzl $t8, .L7F089B10 /* 0BE614 7F089AE4 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BE618 7F089AE8 0FC26919 */ jal get_num_players +/* 0BE618 7F089AE8 0FC26919 */ jal getPlayerCount /* 0BE61C 7F089AEC 00000000 */ nop /* 0BE620 7F089AF0 28410002 */ slti $at, $v0, 2 /* 0BE624 7F089AF4 142000D1 */ bnez $at, .L7F089E3C @@ -31140,7 +28947,7 @@ glabel record_damage_kills /* 0BE65C 7F089B2C 3C028008 */ lui $v0, %hi(pPlayer) /* 0BE660 7F089B30 8C42A0B0 */ lw $v0, %lo(pPlayer)($v0) /* 0BE664 7F089B34 C44800E0 */ lwc1 $f8, 0xe0($v0) -/* 0BE668 7F089B38 0FC26919 */ jal get_num_players +/* 0BE668 7F089B38 0FC26919 */ jal getPlayerCount /* 0BE66C 7F089B3C E44800E8 */ swc1 $f8, 0xe8($v0) /* 0BE670 7F089B40 28410002 */ slti $at, $v0, 2 /* 0BE674 7F089B44 54200035 */ bnezl $at, .L7F089C1C @@ -31158,12 +28965,12 @@ glabel record_damage_kills /* 0BE6A4 7F089B74 460A0182 */ mul.s $f6, $f0, $f10 /* 0BE6A8 7F089B78 8FA80038 */ lw $t0, 0x38($sp) /* 0BE6AC 7F089B7C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BE6B0 7F089B80 3C0A8008 */ lui $t2, %hi(ptr_BONDdata_p1) +/* 0BE6B0 7F089B80 3C0A8008 */ lui $t2, %hi(players) /* 0BE6B4 7F089B84 00084880 */ sll $t1, $t0, 2 /* 0BE6B8 7F089B88 44812000 */ mtc1 $at, $f4 /* 0BE6BC 7F089B8C 01495021 */ addu $t2, $t2, $t1 /* 0BE6C0 7F089B90 46103483 */ div.s $f18, $f6, $f16 -/* 0BE6C4 7F089B94 8D4A9EE0 */ lw $t2, %lo(ptr_BONDdata_p1)($t2) +/* 0BE6C4 7F089B94 8D4A9EE0 */ lw $t2, %lo(players)($t2) /* 0BE6C8 7F089B98 44806000 */ mtc1 $zero, $f12 /* 0BE6CC 7F089B9C 8FAB004C */ lw $t3, 0x4c($sp) /* 0BE6D0 7F089BA0 C54A0148 */ lwc1 $f10, 0x148($t2) @@ -31251,7 +29058,7 @@ glabel record_damage_kills /* 0BE804 7F089CD4 00000000 */ nop /* 0BE808 7F089CD8 45020040 */ bc1fl .L7F089DDC /* 0BE80C 7F089CDC 8C4B00F4 */ lw $t3, 0xf4($v0) -/* 0BE810 7F089CE0 0FC26919 */ jal get_num_players +/* 0BE810 7F089CE0 0FC26919 */ jal getPlayerCount /* 0BE814 7F089CE4 00000000 */ nop /* 0BE818 7F089CE8 28410002 */ slti $at, $v0, 2 /* 0BE81C 7F089CEC 14200036 */ bnez $at, .L7F089DC8 @@ -31397,7 +29204,7 @@ glabel record_damage_kills /* 0BEBDC 7F08A06C 0FC28EB4 */ jal sub_GAME_7F0A2F30 /* 0BEBE0 7F08A070 24841598 */ addiu $a0, $a0, 0x1598 .Ljp7F08A074: -/* 0BEBE4 7F08A074 0FC26C01 */ jal get_num_players +/* 0BEBE4 7F08A074 0FC26C01 */ jal getPlayerCount /* 0BEBE8 7F08A078 00000000 */ nop /* 0BEBEC 7F08A07C 28410002 */ slti $at, $v0, 2 /* 0BEBF0 7F08A080 14200007 */ bnez $at, .Ljp7F08A0A0 @@ -31440,14 +29247,14 @@ glabel record_damage_kills /* 0BEC7C 7F08A10C 00000000 */ nop /* 0BEC80 7F08A110 0FC26F3C */ jal get_cur_playernum /* 0BEC84 7F08A114 00000000 */ nop -/* 0BEC88 7F08A118 0FC26C01 */ jal get_num_players +/* 0BEC88 7F08A118 0FC26C01 */ jal getPlayerCount /* 0BEC8C 7F08A11C AFA2001C */ sw $v0, 0x1c($sp) /* 0BEC90 7F08A120 8FAC001C */ lw $t4, 0x1c($sp) /* 0BEC94 7F08A124 3C053E80 */ lui $a1, 0x3e80 /* 0BEC98 7F08A128 0C00322E */ jal controller_7000C854 /* 0BEC9C 7F08A12C 004C2021 */ addu $a0, $v0, $t4 .Ljp7F08A130: -/* 0BECA0 7F08A130 0FC26C01 */ jal get_num_players +/* 0BECA0 7F08A130 0FC26C01 */ jal getPlayerCount /* 0BECA4 7F08A134 00000000 */ nop /* 0BECA8 7F08A138 28410002 */ slti $at, $v0, 2 /* 0BECAC 7F08A13C 14200010 */ bnez $at, .Ljp7F08A180 @@ -31487,7 +29294,7 @@ glabel record_damage_kills /* 0BED30 7F08A1C0 00000000 */ nop /* 0BED34 7F08A1C4 4503000E */ bc1tl .Ljp7F08A200 /* 0BED38 7F08A1C8 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BED3C 7F08A1CC 0FC26C01 */ jal get_num_players +/* 0BED3C 7F08A1CC 0FC26C01 */ jal getPlayerCount /* 0BED40 7F08A1D0 00000000 */ nop /* 0BED44 7F08A1D4 28410002 */ slti $at, $v0, 2 /* 0BED48 7F08A1D8 142000DA */ bnez $at, .Ljp7F08A544 @@ -31511,7 +29318,7 @@ glabel record_damage_kills /* 0BED8C 7F08A21C 3C028008 */ lui $v0, %hi(pPlayer) # $v0, 0x8008 /* 0BED90 7F08A220 8C42A120 */ lw $v0, %lo(pPlayer)($v0) /* 0BED94 7F08A224 C45200E0 */ lwc1 $f18, 0xe0($v0) -/* 0BED98 7F08A228 0FC26C01 */ jal get_num_players +/* 0BED98 7F08A228 0FC26C01 */ jal getPlayerCount /* 0BED9C 7F08A22C E45200E8 */ swc1 $f18, 0xe8($v0) /* 0BEDA0 7F08A230 28410002 */ slti $at, $v0, 2 /* 0BEDA4 7F08A234 54200035 */ bnezl $at, .Ljp7F08A30C @@ -31529,12 +29336,12 @@ glabel record_damage_kills /* 0BEDD4 7F08A264 46040202 */ mul.s $f8, $f0, $f4 /* 0BEDD8 7F08A268 8FB80038 */ lw $t8, 0x38($sp) /* 0BEDDC 7F08A26C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BEDE0 7F08A270 3C088008 */ lui $t0, %hi(ptr_BONDdata_p1) +/* 0BEDE0 7F08A270 3C088008 */ lui $t0, %hi(players) /* 0BEDE4 7F08A274 0018C880 */ sll $t9, $t8, 2 /* 0BEDE8 7F08A278 44818000 */ mtc1 $at, $f16 /* 0BEDEC 7F08A27C 01194021 */ addu $t0, $t0, $t9 /* 0BEDF0 7F08A280 460A4183 */ div.s $f6, $f8, $f10 -/* 0BEDF4 7F08A284 8D089F50 */ lw $t0, %lo(ptr_BONDdata_p1)($t0) +/* 0BEDF4 7F08A284 8D089F50 */ lw $t0, %lo(players)($t0) /* 0BEDF8 7F08A288 44806000 */ mtc1 $zero, $f12 /* 0BEDFC 7F08A28C 8FA9004C */ lw $t1, 0x4c($sp) /* 0BEE00 7F08A290 C5040148 */ lwc1 $f4, 0x148($t0) @@ -31622,7 +29429,7 @@ glabel record_damage_kills /* 0BEF34 7F08A3C4 00000000 */ nop /* 0BEF38 7F08A3C8 45020041 */ bc1fl .Ljp7F08A4D0 /* 0BEF3C 7F08A3CC C44800F4 */ lwc1 $f8, 0xf4($v0) -/* 0BEF40 7F08A3D0 0FC26C01 */ jal get_num_players +/* 0BEF40 7F08A3D0 0FC26C01 */ jal getPlayerCount /* 0BEF44 7F08A3D4 00000000 */ nop /* 0BEF48 7F08A3D8 28410002 */ slti $at, $v0, 2 /* 0BEF4C 7F08A3DC 14200036 */ bnez $at, .Ljp7F08A4B8 @@ -31828,7 +29635,7 @@ glabel check_if_healthbar_timer_greater_than_0 f32 get_BONDdata_bondfadefracnew(void) { - return pPlayer->bondfadefracnew; + return pPlayer->field_19C; } @@ -31993,11 +29800,11 @@ glabel sub_GAME_7F08A03C /* 0BEBB0 7F08A080 8FA50024 */ lw $a1, 0x24($sp) /* 0BEBB4 7F08A084 8FB8001C */ lw $t8, 0x1c($sp) .L7F08A088: -/* 0BEBB8 7F08A088 3C088008 */ lui $t0, %hi(ptr_BONDdata_p1) +/* 0BEBB8 7F08A088 3C088008 */ lui $t0, %hi(players) /* 0BEBBC 7F08A08C 8FAF0024 */ lw $t7, 0x24($sp) /* 0BEBC0 7F08A090 0018C880 */ sll $t9, $t8, 2 /* 0BEBC4 7F08A094 01194021 */ addu $t0, $t0, $t9 -/* 0BEBC8 7F08A098 8D089EE0 */ lw $t0, %lo(ptr_BONDdata_p1)($t0) +/* 0BEBC8 7F08A098 8D089EE0 */ lw $t0, %lo(players)($t0) /* 0BEBCC 7F08A09C AD0F00AC */ sw $t7, 0xac($t0) /* 0BEBD0 7F08A0A0 8FBF0014 */ lw $ra, 0x14($sp) /* 0BEBD4 7F08A0A4 27BD0020 */ addiu $sp, $sp, 0x20 @@ -32024,19 +29831,19 @@ glabel sub_GAME_7F08A0B0 /* 0BEBEC 7F08A0BC AFA60028 */ sw $a2, 0x28($sp) /* 0BEBF0 7F08A0C0 0FC26C57 */ jal sub_GAME_7F09B15C /* 0BEBF4 7F08A0C4 AFA7002C */ sw $a3, 0x2c($sp) -/* 0BEBF8 7F08A0C8 3C048008 */ lui $a0, %hi(ptr_BONDdata_p1) -/* 0BEBFC 7F08A0CC 24849EE0 */ addiu $a0, %lo(ptr_BONDdata_p1) # addiu $a0, $a0, -0x6120 +/* 0BEBF8 7F08A0C8 3C048008 */ lui $a0, %hi(players) +/* 0BEBFC 7F08A0CC 24849EE0 */ addiu $a0, %lo(players) # addiu $a0, $a0, -0x6120 /* 0BEC00 7F08A0D0 00027080 */ sll $t6, $v0, 2 /* 0BEC04 7F08A0D4 008E7821 */ addu $t7, $a0, $t6 /* 0BEC08 7F08A0D8 8DF80000 */ lw $t8, ($t7) /* 0BEC0C 7F08A0DC 8F1900AC */ lw $t9, 0xac($t8) /* 0BEC10 7F08A0E0 53200029 */ beql $t9, $zero, .L7F08A188 /* 0BEC14 7F08A0E4 8FAE0028 */ lw $t6, 0x28($sp) -/* 0BEC18 7F08A0E8 0FC26919 */ jal get_num_players +/* 0BEC18 7F08A0E8 0FC26919 */ jal getPlayerCount /* 0BEC1C 7F08A0EC AFA2001C */ sw $v0, 0x1c($sp) -/* 0BEC20 7F08A0F0 3C048008 */ lui $a0, %hi(ptr_BONDdata_p1) +/* 0BEC20 7F08A0F0 3C048008 */ lui $a0, %hi(players) /* 0BEC24 7F08A0F4 24050001 */ li $a1, 1 -/* 0BEC28 7F08A0F8 24849EE0 */ addiu $a0, %lo(ptr_BONDdata_p1) # addiu $a0, $a0, -0x6120 +/* 0BEC28 7F08A0F8 24849EE0 */ addiu $a0, %lo(players) # addiu $a0, $a0, -0x6120 /* 0BEC2C 7F08A0FC 10450006 */ beq $v0, $a1, .L7F08A118 /* 0BEC30 7F08A100 8FA3001C */ lw $v1, 0x1c($sp) /* 0BEC34 7F08A104 00034080 */ sll $t0, $v1, 2 @@ -32173,8 +29980,8 @@ glabel sub_GAME_7F08A274 /* 0BEDB0 7F08A280 AFA60020 */ sw $a2, 0x20($sp) /* 0BEDB4 7F08A284 0FC26C57 */ jal sub_GAME_7F09B15C /* 0BEDB8 7F08A288 AFA70024 */ sw $a3, 0x24($sp) -/* 0BEDBC 7F08A28C 3C0F8008 */ lui $t7, %hi(ptr_BONDdata_p1) -/* 0BEDC0 7F08A290 25EF9EE0 */ addiu $t7, %lo(ptr_BONDdata_p1) # addiu $t7, $t7, -0x6120 +/* 0BEDBC 7F08A28C 3C0F8008 */ lui $t7, %hi(players) +/* 0BEDC0 7F08A290 25EF9EE0 */ addiu $t7, %lo(players) # addiu $t7, $t7, -0x6120 /* 0BEDC4 7F08A294 00027080 */ sll $t6, $v0, 2 /* 0BEDC8 7F08A298 01CF1821 */ addu $v1, $t6, $t7 /* 0BEDCC 7F08A29C 8C780000 */ lw $t8, ($v1) @@ -32351,21 +30158,11 @@ glabel set_flags_in_BONDdata_stationary_intro_cam #ifdef VERSION_US -#ifdef NONMATCHING -void sub_GAME_7F08A3B4(void) { - +void setFontTables(s32 arg0, s32 arg1) +{ + copy_2ndfonttable = arg0; + copy_1stfonttable = arg1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F08A3B4 -/* 0BEEE4 7F08A3B4 3C018003 */ lui $at, %hi(copy_2ndfonttable) -/* 0BEEE8 7F08A3B8 AC2468A4 */ sw $a0, %lo(copy_2ndfonttable)($at) -/* 0BEEEC 7F08A3BC 3C018003 */ lui $at, %hi(copy_1stfonttable) -/* 0BEEF0 7F08A3C0 03E00008 */ jr $ra -/* 0BEEF4 7F08A3C4 AC2568A0 */ sw $a1, %lo(copy_1stfonttable)($at) -) -#endif #endif @@ -32382,7 +30179,7 @@ GLOBAL_ASM( glabel display_string_in_lower_left_corner /* 0BEEF8 7F08A3C8 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0BEEFC 7F08A3CC AFBF0014 */ sw $ra, 0x14($sp) -/* 0BEF00 7F08A3D0 0FC26919 */ jal get_num_players +/* 0BEF00 7F08A3D0 0FC26919 */ jal getPlayerCount /* 0BEF04 7F08A3D4 AFA40028 */ sw $a0, 0x28($sp) /* 0BEF08 7F08A3D8 24010001 */ li $at, 1 /* 0BEF0C 7F08A3DC 14410020 */ bne $v0, $at, .L7F08A460 @@ -32468,7 +30265,7 @@ glabel display_string_in_lower_left_corner /* 0BF640 7F08AAD0 AFBF0014 */ sw $ra, 0x14($sp) /* 0BF644 7F08AAD4 AFA40028 */ sw $a0, 0x28($sp) /* 0BF648 7F08AAD8 AFA5002C */ sw $a1, 0x2c($sp) -/* 0BF64C 7F08AADC 0FC26C01 */ jal get_num_players +/* 0BF64C 7F08AADC 0FC26C01 */ jal getPlayerCount /* 0BF650 7F08AAE0 AFA60030 */ sw $a2, 0x30($sp) /* 0BF654 7F08AAE4 24010001 */ li $at, 1 /* 0BF658 7F08AAE8 1441002B */ bne $v0, $at, .L7F08AB98 @@ -32596,7 +30393,7 @@ glabel sub_GAME_7F08A4E4 /* 0BF048 7F08A518 00000000 */ nop /* 0BF04C 7F08A51C 8F188374 */ lw $t8, %lo(clock_timer)($t8) /* 0BF050 7F08A520 0078C823 */ subu $t9, $v1, $t8 -/* 0BF054 7F08A524 0FC26919 */ jal get_num_players +/* 0BF054 7F08A524 0FC26919 */ jal getPlayerCount /* 0BF058 7F08A528 AC5911DC */ sw $t9, 0x11dc($v0) /* 0BF05C 7F08A52C 24010001 */ li $at, 1 /* 0BF060 7F08A530 1441001B */ bne $v0, $at, .L7F08A5A0 @@ -32629,7 +30426,7 @@ glabel sub_GAME_7F08A4E4 /* 0BF0C8 7F08A598 240E001E */ li $t6, 30 /* 0BF0CC 7F08A59C AC4E11DC */ sw $t6, 0x11dc($v0) .L7F08A5A0: -/* 0BF0D0 7F08A5A0 0FC26919 */ jal get_num_players +/* 0BF0D0 7F08A5A0 0FC26919 */ jal getPlayerCount /* 0BF0D4 7F08A5A4 00000000 */ nop /* 0BF0D8 7F08A5A8 24010001 */ li $at, 1 /* 0BF0DC 7F08A5AC 1441000F */ bne $v0, $at, .L7F08A5EC @@ -32685,7 +30482,7 @@ glabel sub_GAME_7F08A5FC /* 0BF158 7F08A628 8C5829C4 */ lw $t8, 0x29c4($v0) /* 0BF15C 7F08A62C 570000B0 */ bnezl $t8, .L7F08A8F0 /* 0BF160 7F08A630 8FBF0034 */ lw $ra, 0x34($sp) -/* 0BF164 7F08A634 0FC26919 */ jal get_num_players +/* 0BF164 7F08A634 0FC26919 */ jal getPlayerCount /* 0BF168 7F08A638 AFA0005C */ sw $zero, 0x5c($sp) /* 0BF16C 7F08A63C 24010001 */ li $at, 1 /* 0BF170 7F08A640 14410010 */ bne $v0, $at, .L7F08A684 @@ -32744,12 +30541,12 @@ glabel sub_GAME_7F08A5FC /* 0BF23C 7F08A70C AFA00014 */ sw $zero, 0x14($sp) /* 0BF240 7F08A710 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0BF244 7F08A714 AFAF0010 */ sw $t7, 0x10($sp) -/* 0BF248 7F08A718 0FC26919 */ jal get_num_players +/* 0BF248 7F08A718 0FC26919 */ jal getPlayerCount /* 0BF24C 7F08A71C 00000000 */ nop /* 0BF250 7F08A720 28410003 */ slti $at, $v0, 3 /* 0BF254 7F08A724 10200005 */ beqz $at, .L7F08A73C /* 0BF258 7F08A728 00000000 */ nop -/* 0BF25C 7F08A72C 0C001145 */ jal get_video2_settings_ulx +/* 0BF25C 7F08A72C 0C001145 */ jal viGetViewLeft /* 0BF260 7F08A730 00000000 */ nop /* 0BF264 7F08A734 1000000D */ b .L7F08A76C /* 0BF268 7F08A738 2443001E */ addiu $v1, $v0, 0x1e @@ -32759,19 +30556,19 @@ glabel sub_GAME_7F08A5FC /* 0BF274 7F08A744 30580001 */ andi $t8, $v0, 1 /* 0BF278 7F08A748 13000005 */ beqz $t8, .L7F08A760 /* 0BF27C 7F08A74C 00000000 */ nop -/* 0BF280 7F08A750 0C001145 */ jal get_video2_settings_ulx +/* 0BF280 7F08A750 0C001145 */ jal viGetViewLeft /* 0BF284 7F08A754 00000000 */ nop /* 0BF288 7F08A758 10000004 */ b .L7F08A76C /* 0BF28C 7F08A75C 2443000A */ addiu $v1, $v0, 0xa .L7F08A760: -/* 0BF290 7F08A760 0C001145 */ jal get_video2_settings_ulx +/* 0BF290 7F08A760 0C001145 */ jal viGetViewLeft /* 0BF294 7F08A764 00000000 */ nop /* 0BF298 7F08A768 2443001E */ addiu $v1, $v0, 0x1e .L7F08A76C: /* 0BF29C 7F08A76C 8FB90044 */ lw $t9, 0x44($sp) /* 0BF2A0 7F08A770 AFA30058 */ sw $v1, 0x58($sp) /* 0BF2A4 7F08A774 00794021 */ addu $t0, $v1, $t9 -/* 0BF2A8 7F08A778 0FC26919 */ jal get_num_players +/* 0BF2A8 7F08A778 0FC26919 */ jal getPlayerCount /* 0BF2AC 7F08A77C AFA80050 */ sw $t0, 0x50($sp) /* 0BF2B0 7F08A780 28410003 */ slti $at, $v0, 3 /* 0BF2B4 7F08A784 10200024 */ beqz $at, .L7F08A818 @@ -32786,9 +30583,9 @@ glabel sub_GAME_7F08A5FC /* 0BF2D8 7F08A7A8 00000000 */ nop /* 0BF2DC 7F08A7AC 1440000A */ bnez $v0, .L7F08A7D8 /* 0BF2E0 7F08A7B0 00000000 */ nop -/* 0BF2E4 7F08A7B4 0C001149 */ jal get_video2_settings_uly +/* 0BF2E4 7F08A7B4 0C001149 */ jal viGetViewTop /* 0BF2E8 7F08A7B8 00000000 */ nop -/* 0BF2EC 7F08A7BC 0C00112B */ jal get_video2_settings_height +/* 0BF2EC 7F08A7BC 0C00112B */ jal viGetViewHeight /* 0BF2F0 7F08A7C0 A7A2003E */ sh $v0, 0x3e($sp) /* 0BF2F4 7F08A7C4 87A9003E */ lh $t1, 0x3e($sp) /* 0BF2F8 7F08A7C8 00495021 */ addu $t2, $v0, $t1 @@ -32796,9 +30593,9 @@ glabel sub_GAME_7F08A5FC /* 0BF300 7F08A7D0 10000009 */ b .L7F08A7F8 /* 0BF304 7F08A7D4 AFAB004C */ sw $t3, 0x4c($sp) .L7F08A7D8: -/* 0BF308 7F08A7D8 0C001149 */ jal get_video2_settings_uly +/* 0BF308 7F08A7D8 0C001149 */ jal viGetViewTop /* 0BF30C 7F08A7DC 00000000 */ nop -/* 0BF310 7F08A7E0 0C00112B */ jal get_video2_settings_height +/* 0BF310 7F08A7E0 0C00112B */ jal viGetViewHeight /* 0BF314 7F08A7E4 A7A2003E */ sh $v0, 0x3e($sp) /* 0BF318 7F08A7E8 87AC003E */ lh $t4, 0x3e($sp) /* 0BF31C 7F08A7EC 004C6821 */ addu $t5, $v0, $t4 @@ -32814,7 +30611,7 @@ glabel sub_GAME_7F08A5FC /* 0BF340 7F08A810 10000005 */ b .L7F08A828 /* 0BF344 7F08A814 AFB8004C */ sw $t8, 0x4c($sp) .L7F08A818: -/* 0BF348 7F08A818 0C001149 */ jal get_video2_settings_uly +/* 0BF348 7F08A818 0C001149 */ jal viGetViewTop /* 0BF34C 7F08A81C 00000000 */ nop /* 0BF350 7F08A820 24590010 */ addiu $t9, $v0, 0x10 /* 0BF354 7F08A824 AFB9004C */ sw $t9, 0x4c($sp) @@ -32895,7 +30692,7 @@ glabel sub_GAME_7F08A5FC /* 0BF920 7F08ADB0 8C5829C4 */ lw $t8, 0x29c4($v0) /* 0BF924 7F08ADB4 570000C5 */ bnezl $t8, .Ljp7F08B0CC /* 0BF928 7F08ADB8 8FBF0034 */ lw $ra, 0x34($sp) -/* 0BF92C 7F08ADBC 0FC26C01 */ jal get_num_players +/* 0BF92C 7F08ADBC 0FC26C01 */ jal getPlayerCount /* 0BF930 7F08ADC0 AFA0005C */ sw $zero, 0x5c($sp) /* 0BF934 7F08ADC4 24010001 */ li $at, 1 /* 0BF938 7F08ADC8 14410010 */ bne $v0, $at, .Ljp7F08AE0C @@ -32957,12 +30754,12 @@ glabel sub_GAME_7F08A5FC /* 0BFA10 7F08AEA0 AFA00014 */ sw $zero, 0x14($sp) /* 0BFA14 7F08AEA4 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0BFA18 7F08AEA8 AFAF0010 */ sw $t7, 0x10($sp) -/* 0BFA1C 7F08AEAC 0FC26C01 */ jal get_num_players +/* 0BFA1C 7F08AEAC 0FC26C01 */ jal getPlayerCount /* 0BFA20 7F08AEB0 00000000 */ nop /* 0BFA24 7F08AEB4 28410003 */ slti $at, $v0, 3 /* 0BFA28 7F08AEB8 10200005 */ beqz $at, .Ljp7F08AED0 /* 0BFA2C 7F08AEBC 00000000 */ nop -/* 0BFA30 7F08AEC0 0C001145 */ jal get_video2_settings_ulx +/* 0BFA30 7F08AEC0 0C001145 */ jal viGetViewLeft /* 0BFA34 7F08AEC4 00000000 */ nop /* 0BFA38 7F08AEC8 1000000D */ b .Ljp7F08AF00 /* 0BFA3C 7F08AECC 2443001E */ addiu $v1, $v0, 0x1e @@ -32972,19 +30769,19 @@ glabel sub_GAME_7F08A5FC /* 0BFA48 7F08AED8 30580001 */ andi $t8, $v0, 1 /* 0BFA4C 7F08AEDC 13000005 */ beqz $t8, .Ljp7F08AEF4 /* 0BFA50 7F08AEE0 00000000 */ nop -/* 0BFA54 7F08AEE4 0C001145 */ jal get_video2_settings_ulx +/* 0BFA54 7F08AEE4 0C001145 */ jal viGetViewLeft /* 0BFA58 7F08AEE8 00000000 */ nop /* 0BFA5C 7F08AEEC 10000004 */ b .Ljp7F08AF00 /* 0BFA60 7F08AEF0 2443000A */ addiu $v1, $v0, 0xa .Ljp7F08AEF4: -/* 0BFA64 7F08AEF4 0C001145 */ jal get_video2_settings_ulx +/* 0BFA64 7F08AEF4 0C001145 */ jal viGetViewLeft /* 0BFA68 7F08AEF8 00000000 */ nop /* 0BFA6C 7F08AEFC 2443001E */ addiu $v1, $v0, 0x1e .Ljp7F08AF00: /* 0BFA70 7F08AF00 8FB90044 */ lw $t9, 0x44($sp) /* 0BFA74 7F08AF04 AFA30058 */ sw $v1, 0x58($sp) /* 0BFA78 7F08AF08 00794821 */ addu $t1, $v1, $t9 -/* 0BFA7C 7F08AF0C 0FC26C01 */ jal get_num_players +/* 0BFA7C 7F08AF0C 0FC26C01 */ jal getPlayerCount /* 0BFA80 7F08AF10 AFA90050 */ sw $t1, 0x50($sp) /* 0BFA84 7F08AF14 28410003 */ slti $at, $v0, 3 /* 0BFA88 7F08AF18 10200024 */ beqz $at, .Ljp7F08AFAC @@ -32999,9 +30796,9 @@ glabel sub_GAME_7F08A5FC /* 0BFAAC 7F08AF3C 00000000 */ nop /* 0BFAB0 7F08AF40 1440000A */ bnez $v0, .Ljp7F08AF6C /* 0BFAB4 7F08AF44 00000000 */ nop -/* 0BFAB8 7F08AF48 0C001149 */ jal get_video2_settings_uly +/* 0BFAB8 7F08AF48 0C001149 */ jal viGetViewTop /* 0BFABC 7F08AF4C 00000000 */ nop -/* 0BFAC0 7F08AF50 0C00112B */ jal get_video2_settings_height +/* 0BFAC0 7F08AF50 0C00112B */ jal viGetViewHeight /* 0BFAC4 7F08AF54 A7A2003E */ sh $v0, 0x3e($sp) /* 0BFAC8 7F08AF58 87A3003E */ lh $v1, 0x3e($sp) /* 0BFACC 7F08AF5C 00435821 */ addu $t3, $v0, $v1 @@ -33009,9 +30806,9 @@ glabel sub_GAME_7F08A5FC /* 0BFAD4 7F08AF64 10000009 */ b .Ljp7F08AF8C /* 0BFAD8 7F08AF68 AFAC004C */ sw $t4, 0x4c($sp) .Ljp7F08AF6C: -/* 0BFADC 7F08AF6C 0C001149 */ jal get_video2_settings_uly +/* 0BFADC 7F08AF6C 0C001149 */ jal viGetViewTop /* 0BFAE0 7F08AF70 00000000 */ nop -/* 0BFAE4 7F08AF74 0C00112B */ jal get_video2_settings_height +/* 0BFAE4 7F08AF74 0C00112B */ jal viGetViewHeight /* 0BFAE8 7F08AF78 A7A2003E */ sh $v0, 0x3e($sp) /* 0BFAEC 7F08AF7C 87A3003E */ lh $v1, 0x3e($sp) /* 0BFAF0 7F08AF80 00437021 */ addu $t6, $v0, $v1 @@ -33027,7 +30824,7 @@ glabel sub_GAME_7F08A5FC /* 0BFB14 7F08AFA4 10000014 */ b .Ljp7F08AFF8 /* 0BFB18 7F08AFA8 AFB9004C */ sw $t9, 0x4c($sp) .Ljp7F08AFAC: -/* 0BFB1C 7F08AFAC 0C001149 */ jal get_video2_settings_uly +/* 0BFB1C 7F08AFAC 0C001149 */ jal viGetViewTop /* 0BFB20 7F08AFB0 00000000 */ nop /* 0BFB24 7F08AFB4 3C0A8005 */ lui $t2, %hi(j_text_trigger) # $t2, 0x8005 /* 0BFB28 7F08AFB8 8D4A8500 */ lw $t2, %lo(j_text_trigger)($t2) @@ -33381,10 +31178,10 @@ glabel sub_GAME_7F08AAE8 /* 0BF6F4 7F08ABC4 8DEF642C */ lw $t7, %lo(camera_8003642C)($t7) /* 0BF6F8 7F08ABC8 11E0001B */ beqz $t7, .L7F08AC38 /* 0BF6FC 7F08ABCC 00000000 */ nop -/* 0BF700 7F08ABD0 0C001145 */ jal get_video2_settings_ulx +/* 0BF700 7F08ABD0 0C001145 */ jal viGetViewLeft /* 0BF704 7F08ABD4 00000000 */ nop /* 0BF708 7F08ABD8 24580046 */ addiu $t8, $v0, 0x46 -/* 0BF70C 7F08ABDC 0C001149 */ jal get_video2_settings_uly +/* 0BF70C 7F08ABDC 0C001149 */ jal viGetViewTop /* 0BF710 7F08ABE0 AFB800E4 */ sw $t8, 0xe4($sp) /* 0BF714 7F08ABE4 00401825 */ move $v1, $v0 /* 0BF718 7F08ABE8 24630020 */ addiu $v1, $v1, 0x20 @@ -33410,10 +31207,10 @@ glabel sub_GAME_7F08AAE8 /* 0BF760 7F08AC30 10000008 */ b .L7F08AC54 /* 0BF764 7F08AC34 8FA800D8 */ lw $t0, 0xd8($sp) .L7F08AC38: -/* 0BF768 7F08AC38 0C001145 */ jal get_video2_settings_ulx +/* 0BF768 7F08AC38 0C001145 */ jal viGetViewLeft /* 0BF76C 7F08AC3C 00000000 */ nop /* 0BF770 7F08AC40 2459001E */ addiu $t9, $v0, 0x1e -/* 0BF774 7F08AC44 0C001149 */ jal get_video2_settings_uly +/* 0BF774 7F08AC44 0C001149 */ jal viGetViewTop /* 0BF778 7F08AC48 AFB900E4 */ sw $t9, 0xe4($sp) /* 0BF77C 7F08AC4C 2443000D */ addiu $v1, $v0, 0xd /* 0BF780 7F08AC50 8FA800D8 */ lw $t0, 0xd8($sp) @@ -33561,10 +31358,10 @@ glabel sub_GAME_7F08AAE8 /* 0BF9B0 7F08AE80 24A54FDC */ addiu $a1, %lo(aS3d) # addiu $a1, $a1, 0x4fdc /* 0BF9B4 7F08AE84 0C002B25 */ jal sprintf /* 0BF9B8 7F08AE88 27A40084 */ addiu $a0, $sp, 0x84 -/* 0BF9BC 7F08AE8C 0C001145 */ jal get_video2_settings_ulx +/* 0BF9BC 7F08AE8C 0C001145 */ jal viGetViewLeft /* 0BF9C0 7F08AE90 00000000 */ nop /* 0BF9C4 7F08AE94 244F0011 */ addiu $t7, $v0, 0x11 -/* 0BF9C8 7F08AE98 0C001149 */ jal get_video2_settings_uly +/* 0BF9C8 7F08AE98 0C001149 */ jal viGetViewTop /* 0BF9CC 7F08AE9C AFAF0080 */ sw $t7, 0x80($sp) /* 0BF9D0 7F08AEA0 24460011 */ addiu $a2, $v0, 0x11 /* 0BF9D4 7F08AEA4 24D8000A */ addiu $t8, $a2, 0xa @@ -33606,7 +31403,7 @@ glabel sub_GAME_7F08AAE8 /* 0BFA64 7F08AF34 AFAA0010 */ sw $t2, 0x10($sp) /* 0BFA68 7F08AF38 0FC2B6AF */ jal en_text_write_stuff /* 0BFA6C 7F08AF3C AFAB001C */ sw $t3, 0x1c($sp) -/* 0BFA70 7F08AF40 0C001145 */ jal get_video2_settings_ulx +/* 0BFA70 7F08AF40 0C001145 */ jal viGetViewLeft /* 0BFA74 7F08AF44 00408025 */ move $s0, $v0 /* 0BFA78 7F08AF48 244C0057 */ addiu $t4, $v0, 0x57 /* 0BFA7C 7F08AF4C 0C001107 */ jal get_video2_settings_txtClipW @@ -33631,7 +31428,7 @@ glabel sub_GAME_7F08AAE8 /* 0BFAC8 7F08AF98 AFAF0010 */ sw $t7, 0x10($sp) /* 0BFACC 7F08AF9C 0FC2B6AF */ jal en_text_write_stuff /* 0BFAD0 7F08AFA0 AFA8001C */ sw $t0, 0x1c($sp) -/* 0BFAD4 7F08AFA4 0C001145 */ jal get_video2_settings_ulx +/* 0BFAD4 7F08AFA4 0C001145 */ jal viGetViewLeft /* 0BFAD8 7F08AFA8 00408025 */ move $s0, $v0 /* 0BFADC 7F08AFAC 2449008D */ addiu $t1, $v0, 0x8d /* 0BFAE0 7F08AFB0 0C001107 */ jal get_video2_settings_txtClipW @@ -33656,7 +31453,7 @@ glabel sub_GAME_7F08AAE8 /* 0BFB2C 7F08AFFC AFAA0010 */ sw $t2, 0x10($sp) /* 0BFB30 7F08B000 0FC2B6AF */ jal en_text_write_stuff /* 0BFB34 7F08B004 AFAB001C */ sw $t3, 0x1c($sp) -/* 0BFB38 7F08B008 0C001145 */ jal get_video2_settings_ulx +/* 0BFB38 7F08B008 0C001145 */ jal viGetViewLeft /* 0BFB3C 7F08B00C 00408025 */ move $s0, $v0 /* 0BFB40 7F08B010 244C00C3 */ addiu $t4, $v0, 0xc3 /* 0BFB44 7F08B014 0C001107 */ jal get_video2_settings_txtClipW @@ -33681,7 +31478,7 @@ glabel sub_GAME_7F08AAE8 /* 0BFB90 7F08B060 AFAF0010 */ sw $t7, 0x10($sp) /* 0BFB94 7F08B064 0FC2B6AF */ jal en_text_write_stuff /* 0BFB98 7F08B068 AFA8001C */ sw $t0, 0x1c($sp) -/* 0BFB9C 7F08B06C 0C001145 */ jal get_video2_settings_ulx +/* 0BFB9C 7F08B06C 0C001145 */ jal viGetViewLeft /* 0BFBA0 7F08B070 00408025 */ move $s0, $v0 /* 0BFBA4 7F08B074 244900F9 */ addiu $t1, $v0, 0xf9 /* 0BFBA8 7F08B078 0C001107 */ jal get_video2_settings_txtClipW @@ -33783,10 +31580,10 @@ glabel sub_GAME_7F08AAE8 /* 0BFF10 7F08B3A0 8DEF646C */ lw $t7, %lo(camera_8003642C)($t7) /* 0BFF14 7F08B3A4 11E0001B */ beqz $t7, .Ljp7F08B414 /* 0BFF18 7F08B3A8 00000000 */ nop -/* 0BFF1C 7F08B3AC 0C001145 */ jal get_video2_settings_ulx +/* 0BFF1C 7F08B3AC 0C001145 */ jal viGetViewLeft /* 0BFF20 7F08B3B0 00000000 */ nop /* 0BFF24 7F08B3B4 24580046 */ addiu $t8, $v0, 0x46 -/* 0BFF28 7F08B3B8 0C001149 */ jal get_video2_settings_uly +/* 0BFF28 7F08B3B8 0C001149 */ jal viGetViewTop /* 0BFF2C 7F08B3BC AFB800E4 */ sw $t8, 0xe4($sp) /* 0BFF30 7F08B3C0 00401825 */ move $v1, $v0 /* 0BFF34 7F08B3C4 24630020 */ addiu $v1, $v1, 0x20 @@ -33812,10 +31609,10 @@ glabel sub_GAME_7F08AAE8 /* 0BFF7C 7F08B40C 10000008 */ b .Ljp7F08B430 /* 0BFF80 7F08B410 8FA800D8 */ lw $t0, 0xd8($sp) .Ljp7F08B414: -/* 0BFF84 7F08B414 0C001145 */ jal get_video2_settings_ulx +/* 0BFF84 7F08B414 0C001145 */ jal viGetViewLeft /* 0BFF88 7F08B418 00000000 */ nop /* 0BFF8C 7F08B41C 2459001E */ addiu $t9, $v0, 0x1e -/* 0BFF90 7F08B420 0C001149 */ jal get_video2_settings_uly +/* 0BFF90 7F08B420 0C001149 */ jal viGetViewTop /* 0BFF94 7F08B424 AFB900E4 */ sw $t9, 0xe4($sp) /* 0BFF98 7F08B428 2443000D */ addiu $v1, $v0, 0xd /* 0BFF9C 7F08B42C 8FA800D8 */ lw $t0, 0xd8($sp) @@ -34008,10 +31805,10 @@ glabel sub_GAME_7F08AAE8 /* 0C0278 7F08B708 24A5500C */ addiu $a1, %lo(aS3d) # addiu $a1, $a1, 0x500c /* 0C027C 7F08B70C 0C002B29 */ jal sprintf /* 0C0280 7F08B710 27A40084 */ addiu $a0, $sp, 0x84 -/* 0C0284 7F08B714 0C001145 */ jal get_video2_settings_ulx +/* 0C0284 7F08B714 0C001145 */ jal viGetViewLeft /* 0C0288 7F08B718 00000000 */ nop /* 0C028C 7F08B71C 244E0011 */ addiu $t6, $v0, 0x11 -/* 0C0290 7F08B720 0C001149 */ jal get_video2_settings_uly +/* 0C0290 7F08B720 0C001149 */ jal viGetViewTop /* 0C0294 7F08B724 AFAE0080 */ sw $t6, 0x80($sp) /* 0C0298 7F08B728 24460011 */ addiu $a2, $v0, 0x11 /* 0C029C 7F08B72C 24CF000A */ addiu $t7, $a2, 0xa @@ -34053,7 +31850,7 @@ glabel sub_GAME_7F08AAE8 /* 0C032C 7F08B7BC AFA90010 */ sw $t1, 0x10($sp) /* 0C0330 7F08B7C0 0FC2B99B */ jal en_text_write_stuff /* 0C0334 7F08B7C4 AFAA001C */ sw $t2, 0x1c($sp) -/* 0C0338 7F08B7C8 0C001145 */ jal get_video2_settings_ulx +/* 0C0338 7F08B7C8 0C001145 */ jal viGetViewLeft /* 0C033C 7F08B7CC 00408025 */ move $s0, $v0 /* 0C0340 7F08B7D0 244B0057 */ addiu $t3, $v0, 0x57 /* 0C0344 7F08B7D4 0C001107 */ jal get_video2_settings_txtClipW @@ -34078,7 +31875,7 @@ glabel sub_GAME_7F08AAE8 /* 0C0390 7F08B820 AFAE0010 */ sw $t6, 0x10($sp) /* 0C0394 7F08B824 0FC2B99B */ jal en_text_write_stuff /* 0C0398 7F08B828 AFB9001C */ sw $t9, 0x1c($sp) -/* 0C039C 7F08B82C 0C001145 */ jal get_video2_settings_ulx +/* 0C039C 7F08B82C 0C001145 */ jal viGetViewLeft /* 0C03A0 7F08B830 00408025 */ move $s0, $v0 /* 0C03A4 7F08B834 2448008D */ addiu $t0, $v0, 0x8d /* 0C03A8 7F08B838 0C001107 */ jal get_video2_settings_txtClipW @@ -34103,7 +31900,7 @@ glabel sub_GAME_7F08AAE8 /* 0C03F4 7F08B884 AFA90010 */ sw $t1, 0x10($sp) /* 0C03F8 7F08B888 0FC2B99B */ jal en_text_write_stuff /* 0C03FC 7F08B88C AFAA001C */ sw $t2, 0x1c($sp) -/* 0C0400 7F08B890 0C001145 */ jal get_video2_settings_ulx +/* 0C0400 7F08B890 0C001145 */ jal viGetViewLeft /* 0C0404 7F08B894 00408025 */ move $s0, $v0 /* 0C0408 7F08B898 244B00C3 */ addiu $t3, $v0, 0xc3 /* 0C040C 7F08B89C 0C001107 */ jal get_video2_settings_txtClipW @@ -34128,7 +31925,7 @@ glabel sub_GAME_7F08AAE8 /* 0C0458 7F08B8E8 AFAE0010 */ sw $t6, 0x10($sp) /* 0C045C 7F08B8EC 0FC2B99B */ jal en_text_write_stuff /* 0C0460 7F08B8F0 AFB9001C */ sw $t9, 0x1c($sp) -/* 0C0464 7F08B8F4 0C001145 */ jal get_video2_settings_ulx +/* 0C0464 7F08B8F4 0C001145 */ jal viGetViewLeft /* 0C0468 7F08B8F8 00408025 */ move $s0, $v0 /* 0C046C 7F08B8FC 244800F9 */ addiu $t0, $v0, 0xf9 /* 0C0470 7F08B900 0C001107 */ jal get_video2_settings_txtClipW @@ -34214,10 +32011,10 @@ glabel sub_GAME_7F08B0F0 /* 0BFC74 7F08B144 8FA900F0 */ lw $t1, 0xf0($sp) .L7F08B148: /* 0BFC78 7F08B148 8FAA00F4 */ lw $t2, 0xf4($sp) -/* 0BFC7C 7F08B14C 3C0C8008 */ lui $t4, %hi(ptr_BONDdata_p1) +/* 0BFC7C 7F08B14C 3C0C8008 */ lui $t4, %hi(players) /* 0BFC80 7F08B150 1120004D */ beqz $t1, .L7F08B288 /* 0BFC84 7F08B154 000A5880 */ sll $t3, $t2, 2 -/* 0BFC88 7F08B158 258C9EE0 */ addiu $t4, %lo(ptr_BONDdata_p1) # addiu $t4, $t4, -0x6120 +/* 0BFC88 7F08B158 258C9EE0 */ addiu $t4, %lo(players) # addiu $t4, $t4, -0x6120 /* 0BFC8C 7F08B15C 016C8821 */ addu $s1, $t3, $t4 /* 0BFC90 7F08B160 8E2D0000 */ lw $t5, ($s1) /* 0BFC94 7F08B164 8DAE00D4 */ lw $t6, 0xd4($t5) @@ -34266,7 +32063,7 @@ glabel sub_GAME_7F08B0F0 /* 0BFD3C 7F08B20C 00000000 */ nop /* 0BFD40 7F08B210 8E2A0000 */ lw $t2, ($s1) /* 0BFD44 7F08B214 8D4B00D4 */ lw $t3, 0xd4($t2) -/* 0BFD48 7F08B218 0FC1E111 */ jal sub_GAME_7F078444 +/* 0BFD48 7F08B218 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0BFD4C 7F08B21C 8D70000C */ lw $s0, 0xc($t3) /* 0BFD50 7F08B220 00402025 */ move $a0, $v0 /* 0BFD54 7F08B224 02002825 */ move $a1, $s0 @@ -34299,16 +32096,16 @@ glabel sub_GAME_7F08B0F0 /* 0BFDB8 7F08B288 8FAF00F0 */ lw $t7, 0xf0($sp) .L7F08B28C: /* 0BFDBC 7F08B28C 8FB800F4 */ lw $t8, 0xf4($sp) -/* 0BFDC0 7F08B290 3C098008 */ lui $t1, %hi(ptr_BONDdata_p1) +/* 0BFDC0 7F08B290 3C098008 */ lui $t1, %hi(players) /* 0BFDC4 7F08B294 11E0027E */ beqz $t7, .L7F08BC90 /* 0BFDC8 7F08B298 0018C880 */ sll $t9, $t8, 2 -/* 0BFDCC 7F08B29C 25299EE0 */ addiu $t1, %lo(ptr_BONDdata_p1) # addiu $t1, $t1, -0x6120 +/* 0BFDCC 7F08B29C 25299EE0 */ addiu $t1, %lo(players) # addiu $t1, $t1, -0x6120 /* 0BFDD0 7F08B2A0 03298821 */ addu $s1, $t9, $t1 /* 0BFDD4 7F08B2A4 8E2A0000 */ lw $t2, ($s1) /* 0BFDD8 7F08B2A8 8D4B00D4 */ lw $t3, 0xd4($t2) /* 0BFDDC 7F08B2AC 51600279 */ beql $t3, $zero, .L7F08BC94 /* 0BFDE0 7F08B2B0 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 0BFDE4 7F08B2B4 0FC26919 */ jal get_num_players +/* 0BFDE4 7F08B2B4 0FC26919 */ jal getPlayerCount /* 0BFDE8 7F08B2B8 00000000 */ nop /* 0BFDEC 7F08B2BC 28410002 */ slti $at, $v0, 2 /* 0BFDF0 7F08B2C0 54200274 */ bnezl $at, .L7F08BC94 @@ -34492,12 +32289,12 @@ glabel sub_GAME_7F08B0F0 /* 0C0078 7F08B548 00008025 */ move $s0, $zero /* 0C007C 7F08B54C 24100001 */ li $s0, 1 .L7F08B550: -/* 0C0080 7F08B550 0FC1E687 */ jal sub_GAME_7F079A1C +/* 0C0080 7F08B550 0FC1E687 */ jal playerGetCrouchPos /* 0C0084 7F08B554 8FA400F4 */ lw $a0, 0xf4($sp) /* 0C0088 7F08B558 24010001 */ li $at, 1 /* 0C008C 7F08B55C 50410005 */ beql $v0, $at, .L7F08B574 /* 0C0090 7F08B560 3C013F80 */ lui $at, 0x3f80 -/* 0C0094 7F08B564 0FC1E687 */ jal sub_GAME_7F079A1C +/* 0C0094 7F08B564 0FC1E687 */ jal playerGetCrouchPos /* 0C0098 7F08B568 8FA400F4 */ lw $a0, 0xf4($sp) /* 0C009C 7F08B56C 14400006 */ bnez $v0, .L7F08B588 /* 0C00A0 7F08B570 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -35291,7 +33088,7 @@ glabel sub_GAME_7F08BEEC /* 0C0A54 7F08BF24 00808025 */ move $s0, $a0 /* 0C0A58 7F08BF28 27B20040 */ addiu $s2, $sp, 0x40 .L7F08BF2C: -/* 0C0A5C 7F08BF2C 0FC1E111 */ jal sub_GAME_7F078444 +/* 0C0A5C 7F08BF2C 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0C0A60 7F08BF30 00000000 */ nop /* 0C0A64 7F08BF34 00402025 */ move $a0, $v0 /* 0C0A68 7F08BF38 02002825 */ move $a1, $s0 diff --git a/src/game/bond.h b/src/game/bond.h index bf06437..e4ffb08 100644 --- a/src/game/bond.h +++ b/src/game/bond.h @@ -3,8 +3,10 @@ #include "ultra64.h" #include "game/chr.h" +#include "game/matrixmath.h" +#include "structs.h" -struct xyzpoint +struct coord { f32 x; f32 y; @@ -299,31 +301,27 @@ typedef struct textoverride { } textoverride; -struct Player +struct player { s32 unknown; - s32 xpos; - s32 ypos; - s32 zpos; - s32 xpos2; - s32 ypos2; - s32 zpos2; - s32 xoffset; - s32 yoffset; - s32 zoffset; - s32 xpos3; - s32 ypos3; - s32 zpos3; + f32 xpos; + f32 ypos; + f32 zpos; + f32 xpos2; + f32 ypos2; + f32 zpos2; + f32 xoffset; + f32 yoffset; + f32 zoffset; + f32 xpos3; + f32 ypos3; + f32 zpos3; s32 room_pointer; - s32 current_model_xpos; - s32 current_model_ypos; - s32 current_model_zpos; - s32 previous_model_xpos; - s32 previous_model_ypos; - s32 previous_model_zpos; - s32 current_room_xpos; - s32 current_room_ypos; - s32 current_room_zpos; + vec3 current_model_pos; + vec3 previous_model_pos; + f32 current_room_xpos; + f32 current_room_ypos; + f32 current_room_zpos; s32 field_5C; s32 field_60; s32 field_64; @@ -334,16 +332,16 @@ struct Player s32 field_78; s32 field_7C; s32 field_80; - s32 field_84; - s32 field_88; + f32 field_84; + f32 field_88; s32 field_8C; - s32 field_90; + f32 field_90; s32 field_94; - s32 field_98; - s32 crouchposition; - s32 ducking_height_offset; - s32 field_A4; - s32 position_data_pointer; + f32 field_98; + s32 crouchpos; + f32 ducking_height_offset; + f32 field_A4; + struct prop* prop; s32 field_AC; s32 field_B0; s32 zpos_0; @@ -356,12 +354,12 @@ struct Player s32 field_D0; s32 ptr_char_objectinstance; s32 bonddead; - s32 bondhealth; + f32 bondhealth; f32 bondarmour; - s32 oldhealth; - s32 oldarmour; - s32 apparenthealth; - s32 apparentarmour; + f32 oldhealth; + f32 oldarmour; + f32 apparenthealth; + f32 apparentarmour; s32 damageshowtime; s32 healthshowtime; s32 healthshowmode; @@ -385,26 +383,26 @@ struct Player s32 autoxaimtime60; f32 vv_theta; f32 speedtheta; - s32 vv_costheta; - s32 vv_sintheta; + f32 vv_costheta; + f32 vv_sintheta; f32 vv_verta; - s32 vv_verta360; + f32 vv_verta360; f32 speedverta; - s32 vv_cosverta; - s32 vv_sinverta; + f32 vv_cosverta; + f32 vv_sinverta; f32 speedsideways; f32 speedstrafe; f32 speedforwards; - s32 speedboost; + f32 speedboost; s32 speedmaxtime60; - s32 boost_factor_x; - s32 boost_factor_y; - s32 boost_factor_z; - s32 viewport_alpha; - s32 bondfadetime60; - s32 bondfadetimemax; - s32 bondfadefracold; + f32 boost_factor_x; + f32 boost_factor_y; + f32 boost_factor_z; + f32 bondfadetime60; + f32 bondfadetimemax60; + f32 bondfadefracold; f32 bondfadefracnew; + f32 field_19C; s32 field_1A0; s32 field_1A4; s32 field_1A8; @@ -431,14 +429,14 @@ struct Player s32 field_1FC; s32 pausing_flag; f32 pause_starting_angle; - s32 field_208; - s32 pause_target_angle; + f32 field_208; + f32 pause_target_angle; f32 field_210; f32 field_214; s32 field_218; s32 field_21C; s32 step_in_view_watch_animation; - s32 pause_animation_counter; + f32 pause_animation_counter; s32 field_228; s32 field_22C; s32 something_with_watch_object_instance; @@ -543,23 +541,23 @@ struct Player s32 field_3B8; s32 field_3BC; s32 field_3C0; - s32 field_3C4; - s32 field_3C8; - s32 field_3CC; - s32 tint_red; - s32 tint_green; - s32 tint_blue; - f32 tint_alpha; - s32 screen_fade_timer; - f32 screen_fade_max_time; - s32 field_3E8; - s32 field_3EC; - s32 field_3F0; - s32 field_3F4; - s32 field_3F8; - s32 field_3FC; - s32 field_400; - s32 field_404; + f32 field_3C4; + f32 field_3C8; + f32 field_3CC; + s32 colourscreenred; + s32 colourscreengreen; + s32 colourscreenblue; + f32 colourscreenfrac; + f32 colourfadetime60; + f32 colourfadetimemax60; + s32 colourfaderedold; + s32 colourfaderednew; + s32 colourfadegreenold; + s32 colourfadegreennew; + s32 colourfadeblueold; + s32 colourfadebluenew; + f32 colourfadefracold; + f32 colourfadefracnew; s32 field_408; s32 field_40C; s32 field_410; @@ -613,32 +611,20 @@ struct Player s32 field_4D0; s32 field_4D4; s32 current_tile_ptr_for_portals; - s32 field_4DC; - s32 field_4E0; + u32 resetheadpos; // bool + u32 resetheadrot; // bool s32 field_4E4; s32 field_4E8; - f32 field_4EC; + f32 headdamp; s32 field_4F0; s32 field_4F4; s32 field_4F8; - struct xyzpoint scaled_velocity; - //f32 field_500; - //f32 field_504; - struct xyzpoint field_508; - //s32 field_50C; - //s32 field_510; - struct xyzpoint field_514; - //s32 field_518; - //s32 field_51C; - struct xyzpoint velocity; - //f32 field_524; - //f32 field_528; - struct xyzpoint field_52C; - //s32 field_530; - //s32 field_534; - struct xyzpoint field_538; - //s32 field_53C; - //s32 field_540; + vec3 headpos; + vec3 headlook; + vec3 headup; + vec3 headpossum; + vec3 headlooksum; + vec3 headupsum; s32 field_544; s32 field_548; s32 field_54C; @@ -647,19 +633,9 @@ struct Player s32 field_558; s32 field_55C; s32 field_560; - s32 field_564; - s32 field_568; - s32 field_56C; - s32 field_570; - s32 field_574; - s32 field_578; - s32 field_57C; - s32 field_580; - s32 field_584; - s32 field_588; - s32 field_58C; - s32 field_590; - s32 field_594; + vec3 standlook[2]; + vec3 standup[2]; + s32 standcnt; s32 field_598; s32 field_59C; s32 field_5A0; @@ -805,14 +781,7 @@ struct Player s32 field_7C4; s32 field_7C8; s32 field_7CC; - s32 field_7D0; - s32 field_7D4; - s32 field_7D8; - s32 field_7DC; - s32 field_7E0; - s32 field_7E4; - s32 field_7E8; - s32 field_7EC; + Vp viewports[2]; s16 viewx; s16 viewy; s16 viewleft; @@ -899,24 +868,23 @@ struct Player f32 c_scaley; f32 c_recipscalex; f32 c_recipscaley; - s32 field_10C4; - s32 field_10C8; - s32 field_10CC; - s32 field_10D0; - s32 field_10D4; - s32 field_10D8; - s32 field_10DC; - s32 field_10E0; - s32 field_10E4; - s32 field_10E8; - s32 field_10EC; + Mtx* field_10C4; + Mtx* field_10C8; + Mtxf* field_10CC; + s32 field_10D0; // ptr + Mtxf* field_10D4; + Mtx* projmatrix; + Mtxf* projmatrixf; + s32 field_10E0; // ptr + s32 field_10E4; // ptr + Mtxf* field_10E8; + Mtxf* field_10EC; f32 c_scalelod60; f32 c_scalelod; f32 c_lodscalez; u32 c_lodscalezu32; - struct xyzpoint c_cameratopnorm; - struct xyzpoint c_cameraleftnorm; - + struct coord c_cameratopnorm; + struct coord c_cameraleftnorm; f32 screenxminf; f32 screenyminf; f32 screenxmaxf; @@ -1004,9 +972,9 @@ struct Player s32 field_1268; s32 field_126C; s32 field_1270; - s32 field_1274; - s32 field_1278; - s32 field_127C; + f32 swaytarget; + f32 field_1278; + f32 field_127C; s32 field_1280; s32 players_cur_animation; s32 field_1288; @@ -2498,7 +2466,7 @@ struct Player s32 field_29B4; s32 field_29B8; s32 field_29BC; - s32 field_29C0; + f32 field_29C0; s32 mpmenuon; s32 mpmenumode; s32 mpquitconfirm; @@ -2513,11 +2481,11 @@ struct Player s32 field_29F0; s32 field_29F4; s32 field_29F8; - s32 field_29FC; + s32 autocrouchpos; s32 healthdisplaytime; s16 field_2A04; - s32 field_2A08; - s32 field_2A0C; + f32 field_2A08; + f32 field_2A0C; s32 ptr_text_first_mp_award; s32 ptr_text_second_mp_award; s32 field_2A18; @@ -2873,4 +2841,6 @@ void sub_GAME_7F07E46C(f32 param); void trigger_watch_zoom(f32 final, f32 time); +struct prop* get_curplayer_positiondata(void); + #endif diff --git a/src/game/bondinv.c b/src/game/bondinv.c index 989c045..c9a9cfd 100644 --- a/src/game/bondinv.c +++ b/src/game/bondinv.c @@ -288,7 +288,7 @@ s32 check_if_item_for_hand_available(ITEM_IDS item,int hand) { #ifdef VERSION_US if (((pPlayer->equipallguns && (item < ITEM_BOMBCASE)) && - (item == hand)) && ((get_num_players() == 1 && + (item == hand)) && ((getPlayerCount() == 1 && (bondwalkItemCheckBitflags(item,0x100000) != 0)))) { return 1; @@ -303,7 +303,7 @@ s32 check_if_item_for_hand_available(ITEM_IDS item,int hand) else { if ((((pPlayer->equipallguns != 0) && (item < ITEM_BOMBCASE)) && - (item == hand)) && (((get_num_players() == 1 && + (item == hand)) && (((getPlayerCount() == 1 && (bondwalkItemCheckBitflags(item,0x100000) != 0)) && ((j_text_trigger == 0 || (item != ITEM_KNIFE)))))) { @@ -716,7 +716,7 @@ glabel sub_GAME_7F08C86C /* 0C14CC 7F08C99C 8FA90028 */ lw $t1, 0x28($sp) /* 0C14D0 7F08C9A0 51000051 */ beql $t0, $zero, .L7F08CAE8 /* 0C14D4 7F08C9A4 8FAB0028 */ lw $t3, 0x28($sp) -/* 0C14D8 7F08C9A8 0FC26919 */ jal get_num_players +/* 0C14D8 7F08C9A8 0FC26919 */ jal getPlayerCount /* 0C14DC 7F08C9AC 8D300000 */ lw $s0, ($t1) /* 0C14E0 7F08C9B0 24010001 */ li $at, 1 /* 0C14E4 7F08C9B4 5441001E */ bnel $v0, $at, .L7F08CA30 @@ -914,7 +914,7 @@ glabel sub_GAME_7F08C86C /* 0C1E04 7F08D294 8FA90028 */ lw $t1, 0x28($sp) /* 0C1E08 7F08D298 5100005E */ beql $t0, $zero, .Ljp7F08D414 /* 0C1E0C 7F08D29C 8FAD0028 */ lw $t5, 0x28($sp) -/* 0C1E10 7F08D2A0 0FC26C01 */ jal get_num_players +/* 0C1E10 7F08D2A0 0FC26C01 */ jal getPlayerCount /* 0C1E14 7F08D2A4 8D300000 */ lw $s0, ($t1) /* 0C1E18 7F08D2A8 24010001 */ li $at, 1 /* 0C1E1C 7F08D2AC 14410023 */ bne $v0, $at, .Ljp7F08D33C @@ -1183,7 +1183,7 @@ glabel sub_GAME_7F08CB10 .L7F08CCE4: /* 0C1814 7F08CCE4 1611001E */ bne $s0, $s1, .L7F08CD60 /* 0C1818 7F08CCE8 00000000 */ nop -/* 0C181C 7F08CCEC 0FC26919 */ jal get_num_players +/* 0C181C 7F08CCEC 0FC26919 */ jal getPlayerCount /* 0C1820 7F08CCF0 00000000 */ nop /* 0C1824 7F08CCF4 24010001 */ li $at, 1 /* 0C1828 7F08CCF8 14410052 */ bne $v0, $at, .L7F08CE44 @@ -1222,7 +1222,7 @@ glabel sub_GAME_7F08CB10 /* 0C18A0 7F08CD70 10400018 */ beqz $v0, .L7F08CDD4 /* 0C18A4 7F08CD74 24030021 */ li $v1, 33 .L7F08CD78: -/* 0C18A8 7F08CD78 0FC26919 */ jal get_num_players +/* 0C18A8 7F08CD78 0FC26919 */ jal getPlayerCount /* 0C18AC 7F08CD7C 00000000 */ nop /* 0C18B0 7F08CD80 24010001 */ li $at, 1 /* 0C18B4 7F08CD84 14410010 */ bne $v0, $at, .L7F08CDC8 @@ -1436,7 +1436,7 @@ glabel sub_GAME_7F08CB10 .Ljp7F08D614: /* 0C2184 7F08D614 16110024 */ bne $s0, $s1, .Ljp7F08D6A8 /* 0C2188 7F08D618 00000000 */ nop -/* 0C218C 7F08D61C 0FC26C01 */ jal get_num_players +/* 0C218C 7F08D61C 0FC26C01 */ jal getPlayerCount /* 0C2190 7F08D620 00000000 */ nop /* 0C2194 7F08D624 24010001 */ li $at, 1 /* 0C2198 7F08D628 1441005F */ bne $v0, $at, .Ljp7F08D7A8 @@ -1490,7 +1490,7 @@ glabel sub_GAME_7F08CB10 /* 0C2244 7F08D6D4 52010019 */ beql $s0, $at, .Ljp7F08D73C /* 0C2248 7F08D6D8 260E0020 */ addiu $t6, $s0, 0x20 .Ljp7F08D6DC: -/* 0C224C 7F08D6DC 0FC26C01 */ jal get_num_players +/* 0C224C 7F08D6DC 0FC26C01 */ jal getPlayerCount /* 0C2250 7F08D6E0 00000000 */ nop /* 0C2254 7F08D6E4 24010001 */ li $at, 1 /* 0C2258 7F08D6E8 14410010 */ bne $v0, $at, .Ljp7F08D72C diff --git a/src/game/bondwalk.c b/src/game/bondwalk.c index 4f6ff45..dce201b 100644 --- a/src/game/bondwalk.c +++ b/src/game/bondwalk.c @@ -2201,7 +2201,7 @@ glabel likely_change_weapon_in_hand /* 092064 7F05D534 8C4F0890 */ lw $t7, 0x890($v0) /* 092068 7F05D538 AC4F08B0 */ sw $t7, 0x8b0($v0) /* 09206C 7F05D53C AFA7001C */ sw $a3, 0x1c($sp) -/* 092070 7F05D540 0FC26919 */ jal get_num_players +/* 092070 7F05D540 0FC26919 */ jal getPlayerCount /* 092074 7F05D544 AFA40020 */ sw $a0, 0x20($sp) /* 092078 7F05D548 3C088008 */ lui $t0, %hi(pPlayer) /* 09207C 7F05D54C 24010001 */ li $at, 1 @@ -2650,7 +2650,7 @@ glabel remove_hands_item /* 092740 7F05DC10 01706021 */ addu $t4, $t3, $s0 /* 092744 7F05DC14 AD860878 */ sw $a2, 0x878($t4) .L7F05DC18: -/* 092748 7F05DC18 0FC26919 */ jal get_num_players +/* 092748 7F05DC18 0FC26919 */ jal getPlayerCount /* 09274C 7F05DC1C 00000000 */ nop /* 092750 7F05DC20 28410002 */ slti $at, $v0, 2 /* 092754 7F05DC24 14200003 */ bnez $at, .L7F05DC34 @@ -3846,7 +3846,7 @@ glabel sub_GAME_7F05EE24 /* 093990 7F05EE60 27A50088 */ addiu $a1, $sp, 0x88 /* 093994 7F05EE64 0FC1A073 */ jal sub_GAME_7F0681CC /* 093998 7F05EE68 8FA60140 */ lw $a2, 0x140($sp) -/* 09399C 7F05EE6C 0FC1E111 */ jal sub_GAME_7F078444 +/* 09399C 7F05EE6C 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0939A0 7F05EE70 00000000 */ nop /* 0939A4 7F05EE74 00402025 */ move $a0, $v0 /* 0939A8 7F05EE78 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -4028,7 +4028,7 @@ glabel sub_GAME_7F05F09C /* 093BF8 7F05F0C8 27A50078 */ addiu $a1, $sp, 0x78 /* 093BFC 7F05F0CC 0FC1A073 */ jal sub_GAME_7F0681CC /* 093C00 7F05F0D0 8FA60130 */ lw $a2, 0x130($sp) -/* 093C04 7F05F0D4 0FC1E111 */ jal sub_GAME_7F078444 +/* 093C04 7F05F0D4 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 093C08 7F05F0D8 00000000 */ nop /* 093C0C 7F05F0DC 00402025 */ move $a0, $v0 /* 093C10 7F05F0E0 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -4319,7 +4319,7 @@ glabel generate_player_thrown_object /* 093EE8 7F05F3B8 27A50088 */ addiu $a1, $sp, 0x88 /* 093EEC 7F05F3BC 0FC1A073 */ jal sub_GAME_7F0681CC /* 093EF0 7F05F3C0 8FA60140 */ lw $a2, 0x140($sp) -/* 093EF4 7F05F3C4 0FC1E111 */ jal sub_GAME_7F078444 +/* 093EF4 7F05F3C4 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 093EF8 7F05F3C8 00000000 */ nop /* 093EFC 7F05F3CC 00402025 */ move $a0, $v0 /* 093F00 7F05F3D0 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -4464,7 +4464,7 @@ create_instance: /* 0940F8 7F05F5C8 01200008 */ jr $t1 /* 0940FC 7F05F5CC 00000000 */ nop generate_temp_remote_mine: -/* 094100 7F05F5D0 0FC26919 */ jal get_num_players +/* 094100 7F05F5D0 0FC26919 */ jal getPlayerCount /* 094104 7F05F5D4 00000000 */ nop /* 094108 7F05F5D8 24010001 */ li $at, 1 /* 09410C 7F05F5DC 14410004 */ bne $v0, $at, .L7F05F5F0 @@ -4476,7 +4476,7 @@ generate_temp_remote_mine: /* 094120 7F05F5F0 10000024 */ b .L7F05F684 /* 094124 7F05F5F4 A60B0082 */ sh $t3, 0x82($s0) generate_temp_proximity_mine: -/* 094128 7F05F5F8 0FC26919 */ jal get_num_players +/* 094128 7F05F5F8 0FC26919 */ jal getPlayerCount /* 09412C 7F05F5FC 00000000 */ nop /* 094130 7F05F600 24010001 */ li $at, 1 /* 094134 7F05F604 14410004 */ bne $v0, $at, .L7F05F618 @@ -4488,7 +4488,7 @@ generate_temp_proximity_mine: /* 094148 7F05F618 1000001A */ b .L7F05F684 /* 09414C 7F05F61C A60D0082 */ sh $t5, 0x82($s0) generate_temp_timed_mine: -/* 094150 7F05F620 0FC26919 */ jal get_num_players +/* 094150 7F05F620 0FC26919 */ jal getPlayerCount /* 094154 7F05F624 00000000 */ nop /* 094158 7F05F628 24010001 */ li $at, 1 /* 09415C 7F05F62C 14410004 */ bne $v0, $at, .L7F05F640 @@ -4500,7 +4500,7 @@ generate_temp_timed_mine: /* 094170 7F05F640 10000010 */ b .L7F05F684 /* 094174 7F05F644 A60F0082 */ sh $t7, 0x82($s0) generate_temp_bombcase: -/* 094178 7F05F648 0FC26919 */ jal get_num_players +/* 094178 7F05F648 0FC26919 */ jal getPlayerCount /* 09417C 7F05F64C 00000000 */ nop /* 094180 7F05F650 24010001 */ li $at, 1 /* 094184 7F05F654 14410004 */ bne $v0, $at, .L7F05F668 @@ -4616,7 +4616,7 @@ glabel sub_GAME_7F05F73C /* 0942C8 7F05F798 27A50038 */ addiu $a1, $sp, 0x38 /* 0942CC 7F05F79C 0FC1A073 */ jal sub_GAME_7F0681CC /* 0942D0 7F05F7A0 8FA600E8 */ lw $a2, 0xe8($sp) -/* 0942D4 7F05F7A4 0FC1E111 */ jal sub_GAME_7F078444 +/* 0942D4 7F05F7A4 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0942D8 7F05F7A8 00000000 */ nop /* 0942DC 7F05F7AC 00402025 */ move $a0, $v0 /* 0942E0 7F05F7B0 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -4792,7 +4792,7 @@ glabel sub_GAME_7F05F928 /* 094540 7F05FA10 26040058 */ addiu $a0, $s0, 0x58 /* 094544 7F05FA14 0FC16266 */ jal matrix_4x4_set_position /* 094548 7F05FA18 02402825 */ move $a1, $s2 -/* 09454C 7F05FA1C 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 09454C 7F05FA1C 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 094550 7F05FA20 00000000 */ nop /* 094554 7F05FA24 00402025 */ move $a0, $v0 /* 094558 7F05FA28 02402825 */ move $a1, $s2 @@ -4975,7 +4975,7 @@ glabel sub_GAME_7F05FB64 .L7F05FC10: /* 094740 7F05FC10 0FC1A064 */ jal sub_GAME_7F068190 /* 094744 7F05FC14 27A5004C */ addiu $a1, $sp, 0x4c -/* 094748 7F05FC18 0FC1E111 */ jal sub_GAME_7F078444 +/* 094748 7F05FC18 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 09474C 7F05FC1C 00000000 */ nop /* 094750 7F05FC20 00402025 */ move $a0, $v0 /* 094754 7F05FC24 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -5038,7 +5038,7 @@ glabel sub_GAME_7F05FB64 /* 094830 7F05FD00 8C480014 */ lw $t0, 0x14($v0) /* 094834 7F05FD04 8D09000C */ lw $t1, 0xc($t0) /* 094838 7F05FD08 C52A0138 */ lwc1 $f10, 0x138($t1) -/* 09483C 7F05FD0C 0FC1E111 */ jal sub_GAME_7F078444 +/* 09483C 7F05FD0C 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 094840 7F05FD10 E7AA003C */ swc1 $f10, 0x3c($sp) /* 094844 7F05FD14 00402025 */ move $a0, $v0 /* 094848 7F05FD18 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -5060,7 +5060,7 @@ glabel sub_GAME_7F05FB64 .L7F05FD50: /* 094880 7F05FD50 0FC1A073 */ jal sub_GAME_7F0681CC /* 094884 7F05FD54 8FA60108 */ lw $a2, 0x108($sp) -/* 094888 7F05FD58 0FC1E111 */ jal sub_GAME_7F078444 +/* 094888 7F05FD58 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 09488C 7F05FD5C 00000000 */ nop /* 094890 7F05FD60 00402025 */ move $a0, $v0 /* 094894 7F05FD64 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -6077,7 +6077,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 095674 7F060B44 C60600DC */ lwc1 $f6, 0xdc($s0) /* 095678 7F060B48 E7A60020 */ swc1 $f6, 0x20($sp) /* 09567C 7F060B4C C60A00E0 */ lwc1 $f10, 0xe0($s0) -/* 095680 7F060B50 0FC16642 */ jal sub_GAME_7F059908 +/* 095680 7F060B50 0FC16642 */ jal matrix_4x4_7F059908 /* 095684 7F060B54 E7AA0024 */ swc1 $f10, 0x24($sp) /* 095688 7F060B58 27A401A4 */ addiu $a0, $sp, 0x1a4 /* 09568C 7F060B5C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -6114,7 +6114,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 095708 7F060BD8 AFA40040 */ sw $a0, 0x40($sp) /* 09570C 7F060BDC 0FC16008 */ jal matrix_4x4_copy /* 095710 7F060BE0 260502A8 */ addiu $a1, $s0, 0x2a8 -/* 095714 7F060BE4 0FC1E111 */ jal sub_GAME_7F078444 +/* 095714 7F060BE4 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 095718 7F060BE8 00000000 */ nop /* 09571C 7F060BEC 00402025 */ move $a0, $v0 /* 095720 7F060BF0 8FA50044 */ lw $a1, 0x44($sp) @@ -6466,7 +6466,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 095C2C 7F0610FC C7B20258 */ lwc1 $f18, 0x258($sp) /* 095C30 7F061100 E61202EC */ swc1 $f18, 0x2ec($s0) /* 095C34 7F061104 C7AA025C */ lwc1 $f10, 0x25c($sp) -/* 095C38 7F061108 0FC1E111 */ jal sub_GAME_7F078444 +/* 095C38 7F061108 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 095C3C 7F06110C E60A02F0 */ swc1 $f10, 0x2f0($s0) /* 095C40 7F061110 00402025 */ move $a0, $v0 /* 095C44 7F061114 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -6577,7 +6577,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 095DE0 7F0612B0 46128281 */ sub.s $f10, $f16, $f18 /* 095DE4 7F0612B4 44074000 */ mfc1 $a3, $f8 /* 095DE8 7F0612B8 24050000 */ li $a1, 0 -/* 095DEC 7F0612BC 0FC166D6 */ jal sub_GAME_7F059B58 +/* 095DEC 7F0612BC 0FC166D6 */ jal matrix_4x4_7F059B58 /* 095DF0 7F0612C0 E7AA0010 */ swc1 $f10, 0x10($sp) /* 095DF4 7F0612C4 27A40114 */ addiu $a0, $sp, 0x114 /* 095DF8 7F0612C8 0FC1601A */ jal matrix_4x4_multiply_in_place @@ -6700,7 +6700,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 095FC4 7F061494 46088101 */ sub.s $f4, $f16, $f8 /* 095FC8 7F061498 44073000 */ mfc1 $a3, $f6 /* 095FCC 7F06149C 24050000 */ li $a1, 0 -/* 095FD0 7F0614A0 0FC166D6 */ jal sub_GAME_7F059B58 +/* 095FD0 7F0614A0 0FC166D6 */ jal matrix_4x4_7F059B58 /* 095FD4 7F0614A4 E7A40010 */ swc1 $f4, 0x10($sp) /* 095FD8 7F0614A8 27A40114 */ addiu $a0, $sp, 0x114 /* 095FDC 7F0614AC 0FC1601A */ jal matrix_4x4_multiply_in_place @@ -7861,7 +7861,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 095BD4 7F061064 C60600DC */ lwc1 $f6, 0xdc($s0) /* 095BD8 7F061068 E7A60020 */ swc1 $f6, 0x20($sp) /* 095BDC 7F06106C C60A00E0 */ lwc1 $f10, 0xe0($s0) -/* 095BE0 7F061070 0FC1678A */ jal sub_GAME_7F059908 +/* 095BE0 7F061070 0FC1678A */ jal matrix_4x4_7F059908 /* 095BE4 7F061074 E7AA0024 */ swc1 $f10, 0x24($sp) /* 095BE8 7F061078 27A401A4 */ addiu $a0, $sp, 0x1a4 /* 095BEC 7F06107C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place @@ -7898,7 +7898,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 095C68 7F0610F8 AFA40040 */ sw $a0, 0x40($sp) /* 095C6C 7F0610FC 0FC16150 */ jal matrix_4x4_copy /* 095C70 7F061100 260502A8 */ addiu $a1, $s0, 0x2a8 -/* 095C74 7F061104 0FC1E28D */ jal sub_GAME_7F078444 +/* 095C74 7F061104 0FC1E28D */ jal currentPlayerGetMatrix10D4 /* 095C78 7F061108 00000000 */ nop /* 095C7C 7F06110C 00402025 */ move $a0, $v0 /* 095C80 7F061110 8FA50044 */ lw $a1, 0x44($sp) @@ -8250,7 +8250,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 09618C 7F06161C C7B20258 */ lwc1 $f18, 0x258($sp) /* 096190 7F061620 E61202EC */ swc1 $f18, 0x2ec($s0) /* 096194 7F061624 C7AA025C */ lwc1 $f10, 0x25c($sp) -/* 096198 7F061628 0FC1E28D */ jal sub_GAME_7F078444 +/* 096198 7F061628 0FC1E28D */ jal currentPlayerGetMatrix10D4 /* 09619C 7F06162C E60A02F0 */ swc1 $f10, 0x2f0($s0) /* 0961A0 7F061630 00402025 */ move $a0, $v0 /* 0961A4 7F061634 0FC16265 */ jal matrix_4x4_transform_vector_in_place @@ -8361,7 +8361,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 096340 7F0617D0 46128281 */ sub.s $f10, $f16, $f18 /* 096344 7F0617D4 44074000 */ mfc1 $a3, $f8 /* 096348 7F0617D8 24050000 */ li $a1, 0 -/* 09634C 7F0617DC 0FC1681E */ jal sub_GAME_7F059B58 +/* 09634C 7F0617DC 0FC1681E */ jal matrix_4x4_7F059B58 /* 096350 7F0617E0 E7AA0010 */ swc1 $f10, 0x10($sp) /* 096354 7F0617E4 27A40114 */ addiu $a0, $sp, 0x114 /* 096358 7F0617E8 0FC16162 */ jal matrix_4x4_multiply_in_place @@ -8484,7 +8484,7 @@ glabel handles_firing_or_throwing_weapon_in_hand /* 096524 7F0619B4 46088101 */ sub.s $f4, $f16, $f8 /* 096528 7F0619B8 44073000 */ mfc1 $a3, $f6 /* 09652C 7F0619BC 24050000 */ li $a1, 0 -/* 096530 7F0619C0 0FC1681E */ jal sub_GAME_7F059B58 +/* 096530 7F0619C0 0FC1681E */ jal matrix_4x4_7F059B58 /* 096534 7F0619C4 E7A40010 */ swc1 $f4, 0x10($sp) /* 096538 7F0619C8 27A40114 */ addiu $a0, $sp, 0x114 /* 09653C 7F0619CC 0FC16162 */ jal matrix_4x4_multiply_in_place @@ -9063,7 +9063,7 @@ glabel sub_GAME_7F061BF4 /* 096754 7F061C24 AFB10018 */ sw $s1, 0x18($sp) /* 096758 7F061C28 01CF8021 */ addu $s0, $t6, $t7 /* 09675C 7F061C2C 00808825 */ move $s1, $a0 -/* 096760 7F061C30 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 096760 7F061C30 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 096764 7F061C34 26100870 */ addiu $s0, $s0, 0x870 /* 096768 7F061C38 C604039C */ lwc1 $f4, 0x39c($s0) /* 09676C 7F061C3C C4460008 */ lwc1 $f6, 8($v0) @@ -9098,7 +9098,7 @@ glabel sub_GAME_7F061BF4 /* 0967E0 7F061CB0 8F280004 */ lw $t0, 4($t9) /* 0967E4 7F061CB4 51000054 */ beql $t0, $zero, .L7F061E08 /* 0967E8 7F061CB8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0967EC 7F061CBC 0FC26919 */ jal get_num_players +/* 0967EC 7F061CBC 0FC26919 */ jal getPlayerCount /* 0967F0 7F061CC0 00000000 */ nop /* 0967F4 7F061CC4 28410002 */ slti $at, $v0, 2 /* 0967F8 7F061CC8 1420004E */ bnez $at, .L7F061E04 @@ -9272,7 +9272,7 @@ glabel sub_GAME_7F061E18 /* 096A00 7F061ED0 8D8CD0D0 */ lw $t4, %lo(flareimage3)($t4) /* 096A04 7F061ED4 E7A000E8 */ swc1 $f0, 0xe8($sp) /* 096A08 7F061ED8 E7A400B4 */ swc1 $f4, 0xb4($sp) -/* 096A0C 7F061EDC 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 096A0C 7F061EDC 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 096A10 7F061EE0 AFAC00B0 */ sw $t4, 0xb0($sp) /* 096A14 7F061EE4 AFA200A8 */ sw $v0, 0xa8($sp) /* 096A18 7F061EE8 82230001 */ lb $v1, 1($s1) @@ -9644,7 +9644,7 @@ glabel sub_GAME_7F061E18 /* 096F98 7F062468 E7AC00A0 */ swc1 $f12, 0xa0($sp) /* 096F9C 7F06246C E7AE00A4 */ swc1 $f14, 0xa4($sp) .L7F062470: -/* 096FA0 7F062470 0FC1E111 */ jal sub_GAME_7F078444 +/* 096FA0 7F062470 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 096FA4 7F062474 00000000 */ nop /* 096FA8 7F062478 00402025 */ move $a0, $v0 /* 096FAC 7F06247C 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -10417,7 +10417,7 @@ glabel sub_GAME_7F062BE4 /* 0979C4 7F062E94 01EA5825 */ or $t3, $t7, $t2 /* 0979C8 7F062E98 AFAB00C0 */ sw $t3, 0xc0($sp) /* 0979CC 7F062E9C AFA00090 */ sw $zero, 0x90($sp) -/* 0979D0 7F062EA0 0FC16319 */ jal sub_GAME_7F058C64 +/* 0979D0 7F062EA0 0FC16319 */ jal matrix_4x4_7F058C64 /* 0979D4 7F062EA4 267102F8 */ addiu $s1, $s3, 0x2f8 /* 0979D8 7F062EA8 24010019 */ li $at, 25 /* 0979DC 7F062EAC 56810011 */ bnel $s4, $at, .L7F062EF4 @@ -10476,7 +10476,7 @@ glabel sub_GAME_7F062BE4 /* 097AA0 7F062F70 8E640304 */ lw $a0, 0x304($s3) /* 097AA4 7F062F74 0FC22F52 */ jal sub_GAME_7F08BD48 /* 097AA8 7F062F78 85A5000E */ lh $a1, 0xe($t5) -/* 097AAC 7F062F7C 0FC16322 */ jal sub_GAME_7F058C88 +/* 097AAC 7F062F7C 0FC16322 */ jal matrix_4x4_7F058C88 /* 097AB0 7F062F80 00000000 */ nop /* 097AB4 7F062F84 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 /* 097AB8 7F062F88 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe @@ -10828,7 +10828,7 @@ glabel set_enviro_fog_for_items_in_solo_watch_menu /* 097F80 7F063450 0FC1D1A1 */ jal subdraw /* 097F84 7F063454 02602825 */ move $a1, $s3 /* 097F88 7F063458 8FAF0164 */ lw $t7, 0x164($sp) -/* 097F8C 7F06345C 0FC16319 */ jal sub_GAME_7F058C64 +/* 097F8C 7F06345C 0FC16319 */ jal matrix_4x4_7F058C64 /* 097F90 7F063460 AFAF0198 */ sw $t7, 0x198($sp) /* 097F94 7F063464 864E000E */ lh $t6, 0xe($s2) /* 097F98 7F063468 00008025 */ move $s0, $zero @@ -10851,7 +10851,7 @@ glabel set_enviro_fog_for_items_in_solo_watch_menu /* 097FD8 7F0634A8 5420FFF3 */ bnezl $at, .L7F063478 /* 097FDC 7F0634AC 8FA90144 */ lw $t1, 0x144($sp) .L7F0634B0: -/* 097FE0 7F0634B0 0FC16322 */ jal sub_GAME_7F058C88 +/* 097FE0 7F0634B0 0FC16322 */ jal matrix_4x4_7F058C88 /* 097FE4 7F0634B4 00000000 */ nop .L7F0634B8: /* 097FE8 7F0634B8 8FA20198 */ lw $v0, 0x198($sp) @@ -11174,7 +11174,7 @@ glabel sub_GAME_7F06359C /* 098324 7F0637F4 0FC1D1A1 */ jal subdraw /* 098328 7F0637F8 27A504D8 */ addiu $a1, $sp, 0x4d8 /* 09832C 7F0637FC 8FB90504 */ lw $t9, 0x504($sp) -/* 098330 7F063800 0FC16319 */ jal sub_GAME_7F058C64 +/* 098330 7F063800 0FC16319 */ jal matrix_4x4_7F058C64 /* 098334 7F063804 AFB90538 */ sw $t9, 0x538($sp) /* 098338 7F063808 8FB803D8 */ lw $t8, 0x3d8($sp) /* 09833C 7F06380C 00008825 */ move $s1, $zero @@ -11200,7 +11200,7 @@ glabel sub_GAME_7F06359C /* 098388 7F063858 5420FFF2 */ bnezl $at, .L7F063824 /* 09838C 7F06385C 8FAF04E4 */ lw $t7, 0x4e4($sp) .L7F063860: -/* 098390 7F063860 0FC16322 */ jal sub_GAME_7F058C88 +/* 098390 7F063860 0FC16322 */ jal matrix_4x4_7F058C88 /* 098394 7F063864 00000000 */ nop /* 098398 7F063868 126002AE */ beqz $s3, .L7F064324 /* 09839C 7F06386C 8FAC03D8 */ lw $t4, 0x3d8($sp) @@ -11247,7 +11247,7 @@ glabel sub_GAME_7F06359C /* 098438 7F063908 E7B80020 */ swc1 $f24, 0x20($sp) /* 09843C 7F06390C E7A00010 */ swc1 $f0, 0x10($sp) /* 098440 7F063910 E7A20018 */ swc1 $f2, 0x18($sp) -/* 098444 7F063914 0FC165A5 */ jal sub_GAME_7F059694 +/* 098444 7F063914 0FC165A5 */ jal matrix_4x4_7F059694 /* 098448 7F063918 E7B00024 */ swc1 $f16, 0x24($sp) /* 09844C 7F06391C 3C01C0A0 */ li $at, 0xC0A00000 # -5.000000 /* 098450 7F063920 44810000 */ mtc1 $at, $f0 @@ -11264,7 +11264,7 @@ glabel sub_GAME_7F06359C /* 09847C 7F06394C E7B80020 */ swc1 $f24, 0x20($sp) /* 098480 7F063950 E7A00010 */ swc1 $f0, 0x10($sp) /* 098484 7F063954 E7A20018 */ swc1 $f2, 0x18($sp) -/* 098488 7F063958 0FC165A5 */ jal sub_GAME_7F059694 +/* 098488 7F063958 0FC165A5 */ jal matrix_4x4_7F059694 /* 09848C 7F06395C E7B20024 */ swc1 $f18, 0x24($sp) /* 098490 7F063960 0FC15FF4 */ jal matrix_4x4_set_identity /* 098494 7F063964 02602025 */ move $a0, $s3 @@ -11894,7 +11894,7 @@ glabel sub_GAME_7F06359C /* 098DE0 7F0642B0 0FC1D1A1 */ jal subdraw /* 098DE4 7F0642B4 AFA90504 */ sw $t1, 0x504($sp) /* 098DE8 7F0642B8 8FAE0504 */ lw $t6, 0x504($sp) -/* 098DEC 7F0642BC 0FC16319 */ jal sub_GAME_7F058C64 +/* 098DEC 7F0642BC 0FC16319 */ jal matrix_4x4_7F058C64 /* 098DF0 7F0642C0 AFAE0538 */ sw $t6, 0x538($sp) /* 098DF4 7F0642C4 8FAB03D8 */ lw $t3, 0x3d8($sp) /* 098DF8 7F0642C8 00008825 */ move $s1, $zero @@ -11920,7 +11920,7 @@ glabel sub_GAME_7F06359C /* 098E44 7F064314 5420FFF2 */ bnezl $at, .L7F0642E0 /* 098E48 7F064318 8FB904E4 */ lw $t9, 0x4e4($sp) .L7F06431C: -/* 098E4C 7F06431C 0FC16322 */ jal sub_GAME_7F058C88 +/* 098E4C 7F06431C 0FC16322 */ jal matrix_4x4_7F058C88 /* 098E50 7F064320 00000000 */ nop .L7F064324: /* 098E54 7F064324 8FA20538 */ lw $v0, 0x538($sp) @@ -13571,7 +13571,7 @@ Weapon_function_camera: /* 09992C 7F064DFC 00002825 */ move $a1, $zero /* 099930 7F064E00 15800005 */ bnez $t4, .L7F064E18 /* 099934 7F064E04 00003025 */ move $a2, $zero -/* 099938 7F064E08 0FC201EC */ jal set_rgba_tint +/* 099938 7F064E08 0FC201EC */ jal currentPlayerSetFadeColour /* 09993C 7F064E0C 3C073F80 */ lui $a3, 0x3f80 /* 099940 7F064E10 10000063 */ b .L7F064FA0 /* 099944 7F064E14 AE000398 */ sw $zero, 0x398($s0) @@ -13584,7 +13584,7 @@ Weapon_function_camera: /* 09995C 7F064E2C 44802000 */ mtc1 $zero, $f4 /* 099960 7F064E30 44816000 */ mtc1 $at, $f12 /* 099964 7F064E34 00003825 */ move $a3, $zero -/* 099968 7F064E38 0FC201F8 */ jal sub_GAME_7F0807E0 +/* 099968 7F064E38 0FC201F8 */ jal currentPlayerAdjustFade /* 09996C 7F064E3C E7A40010 */ swc1 $f4, 0x10($sp) /* 099970 7F064E40 240F0002 */ li $t7, 2 /* 099974 7F064E44 AE0F0024 */ sw $t7, 0x24($s0) @@ -13739,7 +13739,7 @@ Weapon_shooting_pistol: /* 099B68 7F065038 24190003 */ li $t9, 3 /* 099B6C 7F06503C 5560001E */ bnezl $t3, .L7F0650B8 /* 099B70 7F065040 AE190024 */ sw $t9, 0x24($s0) -/* 099B74 7F065044 0FC26919 */ jal get_num_players +/* 099B74 7F065044 0FC26919 */ jal getPlayerCount /* 099B78 7F065048 00000000 */ nop /* 099B7C 7F06504C 24010001 */ li $at, 1 /* 099B80 7F065050 50410009 */ beql $v0, $at, .L7F065078 @@ -13816,7 +13816,7 @@ Weapon_shooting_machinegun: .L7F065150: /* 099C80 7F065150 5700004F */ bnezl $t8, .L7F065290 /* 099C84 7F065154 820F000C */ lb $t7, 0xc($s0) -/* 099C88 7F065158 0FC26919 */ jal get_num_players +/* 099C88 7F065158 0FC26919 */ jal getPlayerCount /* 099C8C 7F06515C 00000000 */ nop /* 099C90 7F065160 24010001 */ li $at, 1 /* 099C94 7F065164 50410009 */ beql $v0, $at, .L7F06518C @@ -13926,7 +13926,7 @@ Weapon_shooting_throwable: /* 099DFC 7F0652CC 8E18002C */ lw $t8, 0x2c($s0) /* 099E00 7F0652D0 0FC26C54 */ jal get_cur_playernum /* 099E04 7F0652D4 00000000 */ nop -/* 099E08 7F0652D8 0FC26919 */ jal get_num_players +/* 099E08 7F0652D8 0FC26919 */ jal getPlayerCount /* 099E0C 7F0652DC AFA20048 */ sw $v0, 0x48($sp) /* 099E10 7F0652E0 8FAE0048 */ lw $t6, 0x48($sp) /* 099E14 7F0652E4 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc @@ -13979,7 +13979,7 @@ Weapon_shooting_throwable: /* 099EC4 7F065394 00000000 */ nop /* 099EC8 7F065398 AFB901B4 */ sw $t9, 0x1b4($sp) .L7F06539C: -/* 099ECC 7F06539C 0FC26919 */ jal get_num_players +/* 099ECC 7F06539C 0FC26919 */ jal getPlayerCount /* 099ED0 7F0653A0 00000000 */ nop /* 099ED4 7F0653A4 24010001 */ li $at, 1 /* 099ED8 7F0653A8 5041000A */ beql $v0, $at, .L7F0653D4 @@ -14081,7 +14081,7 @@ Weapon_shooting_throwable: /* 09A03C 7F06550C AE190024 */ sw $t9, 0x24($s0) .L7F065510: /* 09A040 7F065510 AE000020 */ sw $zero, 0x20($s0) -/* 09A044 7F065514 0FC26919 */ jal get_num_players +/* 09A044 7F065514 0FC26919 */ jal getPlayerCount /* 09A048 7F065518 AE00001C */ sw $zero, 0x1c($s0) /* 09A04C 7F06551C 24010001 */ li $at, 1 /* 09A050 7F065520 10410004 */ beq $v0, $at, .L7F065534 @@ -14441,7 +14441,7 @@ Weapon_shooting_throwable: /* 09A584 7F065A54 24040010 */ li $a0, 16 /* 09A588 7F065A58 54A2005E */ bnel $a1, $v0, .L7F065BD4 /* 09A58C 7F065A5C 24060006 */ li $a2, 6 -/* 09A590 7F065A60 0FC26919 */ jal get_num_players +/* 09A590 7F065A60 0FC26919 */ jal getPlayerCount /* 09A594 7F065A64 AFA40188 */ sw $a0, 0x188($sp) /* 09A598 7F065A68 28410002 */ slti $at, $v0, 2 /* 09A59C 7F065A6C 14200002 */ bnez $at, .L7F065A78 @@ -14451,7 +14451,7 @@ Weapon_shooting_throwable: /* 09A5A8 7F065A78 8E19001C */ lw $t9, 0x1c($s0) /* 09A5AC 7F065A7C 5720000C */ bnezl $t9, .L7F065AB0 /* 09A5B0 7F065A80 8E030020 */ lw $v1, 0x20($s0) -/* 09A5B4 7F065A84 0FC26919 */ jal get_num_players +/* 09A5B4 7F065A84 0FC26919 */ jal getPlayerCount /* 09A5B8 7F065A88 AFA40188 */ sw $a0, 0x188($sp) /* 09A5BC 7F065A8C 24010001 */ li $at, 1 /* 09A5C0 7F065A90 14410004 */ bne $v0, $at, .L7F065AA4 @@ -14478,7 +14478,7 @@ Weapon_shooting_throwable: /* 09A608 7F065AD8 8C6F1130 */ lw $t7, 0x1130($v1) /* 09A60C 7F065ADC 01F8C821 */ addu $t9, $t7, $t8 /* 09A610 7F065AE0 AC791130 */ sw $t9, 0x1130($v1) -/* 09A614 7F065AE4 0FC26919 */ jal get_num_players +/* 09A614 7F065AE4 0FC26919 */ jal getPlayerCount /* 09A618 7F065AE8 AE00002C */ sw $zero, 0x2c($s0) /* 09A61C 7F065AEC 28410002 */ slti $at, $v0, 2 /* 09A620 7F065AF0 14200003 */ bnez $at, .L7F065B00 @@ -14661,7 +14661,7 @@ Weapon_shooting_throwable: .L7F065D78: /* 09A8A8 7F065D78 14410088 */ bne $v0, $at, .L7F065F9C /* 09A8AC 7F065D7C 240C0017 */ li $t4, 23 -/* 09A8B0 7F065D80 0FC26919 */ jal get_num_players +/* 09A8B0 7F065D80 0FC26919 */ jal getPlayerCount /* 09A8B4 7F065D84 AFAC0178 */ sw $t4, 0x178($sp) /* 09A8B8 7F065D88 28410002 */ slti $at, $v0, 2 /* 09A8BC 7F065D8C 14200002 */ bnez $at, .L7F065D98 @@ -14671,7 +14671,7 @@ Weapon_shooting_throwable: /* 09A8C8 7F065D98 8E0E001C */ lw $t6, 0x1c($s0) /* 09A8CC 7F065D9C 55C00048 */ bnezl $t6, .L7F065EC0 /* 09A8D0 7F065DA0 8E0E0020 */ lw $t6, 0x20($s0) -/* 09A8D4 7F065DA4 0FC26919 */ jal get_num_players +/* 09A8D4 7F065DA4 0FC26919 */ jal getPlayerCount /* 09A8D8 7F065DA8 00000000 */ nop /* 09A8DC 7F065DAC 28410002 */ slti $at, $v0, 2 /* 09A8E0 7F065DB0 14200003 */ bnez $at, .L7F065DC0 @@ -15245,7 +15245,7 @@ weapon_reload_none_sfx: /* 09B0EC 7F0665BC 8E0D0020 */ lw $t5, 0x20($s0) /* 09B0F0 7F0665C0 5020000E */ beql $at, $zero, .L7F0665FC /* 09B0F4 7F0665C4 8E0D0020 */ lw $t5, 0x20($s0) -/* 09B0F8 7F0665C8 0FC26919 */ jal get_num_players +/* 09B0F8 7F0665C8 0FC26919 */ jal getPlayerCount /* 09B0FC 7F0665CC 00000000 */ nop /* 09B100 7F0665D0 28410002 */ slti $at, $v0, 2 /* 09B104 7F0665D4 14200003 */ bnez $at, .L7F0665E4 @@ -16417,7 +16417,7 @@ Weapon_function_camera: /* 099F00 7F065390 00002825 */ move $a1, $zero /* 099F04 7F065394 15C00005 */ bnez $t6, .Ljp7F0653AC /* 099F08 7F065398 00003025 */ move $a2, $zero -/* 099F0C 7F06539C 0FC20370 */ jal set_rgba_tint +/* 099F0C 7F06539C 0FC20370 */ jal currentPlayerSetFadeColour /* 099F10 7F0653A0 3C073F80 */ lui $a3, 0x3f80 /* 099F14 7F0653A4 10000063 */ b .Ljp7F065534 /* 099F18 7F0653A8 AE000398 */ sw $zero, 0x398($s0) @@ -16430,7 +16430,7 @@ Weapon_function_camera: /* 099F30 7F0653C0 44802000 */ mtc1 $zero, $f4 /* 099F34 7F0653C4 44816000 */ mtc1 $at, $f12 /* 099F38 7F0653C8 00003825 */ move $a3, $zero -/* 099F3C 7F0653CC 0FC2037C */ jal sub_GAME_7F0807E0 +/* 099F3C 7F0653CC 0FC2037C */ jal currentPlayerAdjustFade /* 099F40 7F0653D0 E7A40010 */ swc1 $f4, 0x10($sp) /* 099F44 7F0653D4 240F0002 */ li $t7, 2 /* 099F48 7F0653D8 AE0F0024 */ sw $t7, 0x24($s0) @@ -16584,7 +16584,7 @@ Weapon_shooting_pistol: /* 09A13C 7F0655CC 24190003 */ li $t9, 3 /* 09A140 7F0655D0 5700001E */ bnezl $t8, .Ljp7F06564C /* 09A144 7F0655D4 AE190024 */ sw $t9, 0x24($s0) -/* 09A148 7F0655D8 0FC26C01 */ jal get_num_players +/* 09A148 7F0655D8 0FC26C01 */ jal getPlayerCount /* 09A14C 7F0655DC 00000000 */ nop /* 09A150 7F0655E0 24010001 */ li $at, 1 /* 09A154 7F0655E4 50410009 */ beql $v0, $at, .Ljp7F06560C @@ -16661,7 +16661,7 @@ Weapon_shooting_machinegun: .Ljp7F0656E4: /* 09A254 7F0656E4 5700004F */ bnezl $t8, .Ljp7F065824 /* 09A258 7F0656E8 820F000C */ lb $t7, 0xc($s0) -/* 09A25C 7F0656EC 0FC26C01 */ jal get_num_players +/* 09A25C 7F0656EC 0FC26C01 */ jal getPlayerCount /* 09A260 7F0656F0 00000000 */ nop /* 09A264 7F0656F4 24010001 */ li $at, 1 /* 09A268 7F0656F8 50410009 */ beql $v0, $at, .Ljp7F065720 @@ -16770,7 +16770,7 @@ Weapon_shooting_throwable: /* 09A3D0 7F065860 8E0E002C */ lw $t6, 0x2c($s0) /* 09A3D4 7F065864 0FC26F3C */ jal get_cur_playernum /* 09A3D8 7F065868 00000000 */ nop -/* 09A3DC 7F06586C 0FC26C01 */ jal get_num_players +/* 09A3DC 7F06586C 0FC26C01 */ jal getPlayerCount /* 09A3E0 7F065870 AFA2004C */ sw $v0, 0x4c($sp) /* 09A3E4 7F065874 8FB8004C */ lw $t8, 0x4c($sp) /* 09A3E8 7F065878 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc @@ -16823,7 +16823,7 @@ Weapon_shooting_throwable: /* 09A498 7F065928 00000000 */ nop /* 09A49C 7F06592C AFB801C4 */ sw $t8, 0x1c4($sp) .Ljp7F065930: -/* 09A4A0 7F065930 0FC26C01 */ jal get_num_players +/* 09A4A0 7F065930 0FC26C01 */ jal getPlayerCount /* 09A4A4 7F065934 00000000 */ nop /* 09A4A8 7F065938 24010001 */ li $at, 1 /* 09A4AC 7F06593C 5041000A */ beql $v0, $at, .Ljp7F065968 @@ -16925,7 +16925,7 @@ Weapon_shooting_throwable: /* 09A610 7F065AA0 AE0F0024 */ sw $t7, 0x24($s0) .Ljp7F065AA4: /* 09A614 7F065AA4 AE000020 */ sw $zero, 0x20($s0) -/* 09A618 7F065AA8 0FC26C01 */ jal get_num_players +/* 09A618 7F065AA8 0FC26C01 */ jal getPlayerCount /* 09A61C 7F065AAC AE00001C */ sw $zero, 0x1c($s0) /* 09A620 7F065AB0 24010001 */ li $at, 1 /* 09A624 7F065AB4 10410008 */ beq $v0, $at, .Ljp7F065AD8 @@ -17289,7 +17289,7 @@ Weapon_shooting_throwable: /* 09AB68 7F065FF8 24040010 */ li $a0, 16 /* 09AB6C 7F065FFC 54A2005E */ bnel $a1, $v0, .Ljp7F066178 /* 09AB70 7F066000 24060006 */ li $a2, 6 -/* 09AB74 7F066004 0FC26C01 */ jal get_num_players +/* 09AB74 7F066004 0FC26C01 */ jal getPlayerCount /* 09AB78 7F066008 AFA4018C */ sw $a0, 0x18c($sp) /* 09AB7C 7F06600C 28410002 */ slti $at, $v0, 2 /* 09AB80 7F066010 14200002 */ bnez $at, .Ljp7F06601C @@ -17299,7 +17299,7 @@ Weapon_shooting_throwable: /* 09AB8C 7F06601C 8E18001C */ lw $t8, 0x1c($s0) /* 09AB90 7F066020 5700000C */ bnezl $t8, .Ljp7F066054 /* 09AB94 7F066024 8E030020 */ lw $v1, 0x20($s0) -/* 09AB98 7F066028 0FC26C01 */ jal get_num_players +/* 09AB98 7F066028 0FC26C01 */ jal getPlayerCount /* 09AB9C 7F06602C AFA4018C */ sw $a0, 0x18c($sp) /* 09ABA0 7F066030 24010001 */ li $at, 1 /* 09ABA4 7F066034 14410004 */ bne $v0, $at, .Ljp7F066048 @@ -17326,7 +17326,7 @@ Weapon_shooting_throwable: /* 09ABEC 7F06607C 8C6E1130 */ lw $t6, 0x1130($v1) /* 09ABF0 7F066080 01CFC821 */ addu $t9, $t6, $t7 /* 09ABF4 7F066084 AC791130 */ sw $t9, 0x1130($v1) -/* 09ABF8 7F066088 0FC26C01 */ jal get_num_players +/* 09ABF8 7F066088 0FC26C01 */ jal getPlayerCount /* 09ABFC 7F06608C AE00002C */ sw $zero, 0x2c($s0) /* 09AC00 7F066090 28410002 */ slti $at, $v0, 2 /* 09AC04 7F066094 14200003 */ bnez $at, .Ljp7F0660A4 @@ -17509,7 +17509,7 @@ Weapon_shooting_throwable: .Ljp7F06631C: /* 09AE8C 7F06631C 1441008D */ bne $v0, $at, .Ljp7F066554 /* 09AE90 7F066320 24190017 */ li $t9, 23 -/* 09AE94 7F066324 0FC26C01 */ jal get_num_players +/* 09AE94 7F066324 0FC26C01 */ jal getPlayerCount /* 09AE98 7F066328 AFB9017C */ sw $t9, 0x17c($sp) /* 09AE9C 7F06632C 28410002 */ slti $at, $v0, 2 /* 09AEA0 7F066330 14200002 */ bnez $at, .Ljp7F06633C @@ -17519,7 +17519,7 @@ Weapon_shooting_throwable: /* 09AEAC 7F06633C 8E0E001C */ lw $t6, 0x1c($s0) /* 09AEB0 7F066340 55C0004D */ bnezl $t6, .Ljp7F066478 /* 09AEB4 7F066344 8E0F0020 */ lw $t7, 0x20($s0) -/* 09AEB8 7F066348 0FC26C01 */ jal get_num_players +/* 09AEB8 7F066348 0FC26C01 */ jal getPlayerCount /* 09AEBC 7F06634C 00000000 */ nop /* 09AEC0 7F066350 28410002 */ slti $at, $v0, 2 /* 09AEC4 7F066354 14200003 */ bnez $at, .Ljp7F066364 @@ -18103,7 +18103,7 @@ weapon_reload_none_sfx: /* 09B704 7F066B94 8E0F0020 */ lw $t7, 0x20($s0) /* 09B708 7F066B98 5020000E */ beql $at, $zero, .Ljp7F066BD4 /* 09B70C 7F066B9C 8E0F0020 */ lw $t7, 0x20($s0) -/* 09B710 7F066BA0 0FC26C01 */ jal get_num_players +/* 09B710 7F066BA0 0FC26C01 */ jal getPlayerCount /* 09B714 7F066BA4 00000000 */ nop /* 09B718 7F066BA8 28410002 */ slti $at, $v0, 2 /* 09B71C 7F066BAC 14200003 */ bnez $at, .Ljp7F066BBC @@ -19612,7 +19612,7 @@ void sub_GAME_7F067AA4(s32 param_1) } -void sub_GAME_7F067AB4(struct xyzpoint *param_1) +void sub_GAME_7F067AB4(struct coord *param_1) { pPlayer->hands[RIGHT_HAND].field_A38 = sub_GAME_7F05DCB8(RIGHT_HAND) + param_1->x; pPlayer->hands[RIGHT_HAND].field_A3C = param_1->y; @@ -20219,7 +20219,7 @@ void sub_GAME_7F0681CC(void *arg0, s32 arg1, s32 arg2) { } } // Node 3 - sp24 = (f32) ((120.0f * sp28) / video_related_23()); + sp24 = (f32) ((120.0f * sp28) / viGetFovY()); sp1C = get_random_value(); temp_ret = get_random_value(); temp_f10 = (f32) sp1C; @@ -20312,7 +20312,7 @@ glabel sub_GAME_7F0681CC /* 09CD8C 7F06825C 46083282 */ mul.s $f10, $f6, $f8 /* 09CD90 7F068260 E7AA0028 */ swc1 $f10, 0x28($sp) .L7F068264: -/* 09CD94 7F068264 0C001177 */ jal video_related_23 +/* 09CD94 7F068264 0C001177 */ jal viGetFovY /* 09CD98 7F068268 00000000 */ nop /* 09CD9C 7F06826C 3C0142F0 */ li $at, 0x42F00000 # 120.000000 /* 09CDA0 7F068270 44818000 */ mtc1 $at, $f16 @@ -20624,7 +20624,7 @@ glabel sub_GAME_7F068508 /* 09D060 7F068530 8C430028 */ lw $v1, 0x28($v0) /* 09D064 7F068534 506001F6 */ beql $v1, $zero, .L7F068D10 /* 09D068 7F068538 8FBF001C */ lw $ra, 0x1c($sp) -/* 09D06C 7F06853C 0FC26919 */ jal get_num_players +/* 09D06C 7F06853C 0FC26919 */ jal getPlayerCount /* 09D070 7F068540 AFA30070 */ sw $v1, 0x70($sp) /* 09D074 7F068544 28410002 */ slti $at, $v0, 2 /* 09D078 7F068548 102001F0 */ beqz $at, .L7F068D0C @@ -21469,7 +21469,7 @@ glabel sub_GAME_7F068EC4 /* 09DAB0 7F068F80 27A5003C */ addiu $a1, $sp, 0x3c /* 09DAB4 7F068F84 0FC16266 */ jal matrix_4x4_set_position /* 09DAB8 7F068F88 24840004 */ addiu $a0, $a0, 4 -/* 09DABC 7F068F8C 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 09DABC 7F068F8C 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 09DAC0 7F068F90 00000000 */ nop /* 09DAC4 7F068F94 00402025 */ move $a0, $v0 /* 09DAC8 7F068F98 27A5003C */ addiu $a1, $sp, 0x3c @@ -22949,7 +22949,7 @@ s32 generate_ammo_total_microcode(s32 arg0) { // Node 2 sp64 = get_item_in_hand(1); sp60 = get_item_in_hand(0); - if (get_num_players() < 3) + if (getPlayerCount() < 3) { // Node 3 sp58 = 0x3b; @@ -22998,8 +22998,8 @@ s32 generate_ammo_total_microcode(s32 arg0) { sp48 = (void *) (temp_v1->unk4 + globalbank_rdram_offset); sp30 = getPlayer_c_screenleft(); sp34 = getPlayer_c_screenwidth(); - sp38 = get_video2_settings_uly(); - arg0 = set_rgba_redirect_generate_microcode(arg0, sp48, ((sp34 + sp30) - (f32) sp54), 0xbf800000, (f32) ((get_video2_settings_height() + sp38) + -0x14), 0, (f32) sp28->unk8, 1); + sp38 = viGetViewTop(); + arg0 = set_rgba_redirect_generate_microcode(arg0, sp48, ((sp34 + sp30) - (f32) sp54), 0xbf800000, (f32) ((viGetViewHeight() + sp38) + -0x14), 0, (f32) sp28->unk8, 1); sp44 = (s32) sp48->unk4; } // Node 14 @@ -23028,10 +23028,10 @@ s32 generate_ammo_total_microcode(s32 arg0) { if (bondwalkItemCheckBitflags(sp60, 0x400000) == 0) { // Node 20 - sp2C = get_video2_settings_ulx(); - sp2E = get_video2_settings_width(); - sp38 = get_video2_settings_uly(); - get_video2_settings_height(); + sp2C = viGetViewLeft(); + sp2E = viGetViewWidth(); + sp38 = viGetViewTop(); + viGetViewHeight(); phi_t9 = (sp44 >> 1); if (sp44 < 0) { @@ -23045,10 +23045,10 @@ s32 generate_ammo_total_microcode(s32 arg0) { if ((sp50 > 0) || (bondwalkItemCheckBitflags(sp60, 0x400000) != 0)) { // Node 25 - sp2C = get_video2_settings_ulx(); - sp2E = get_video2_settings_width(); - sp38 = get_video2_settings_uly(); - get_video2_settings_height(); + sp2C = viGetViewLeft(); + sp2E = viGetViewWidth(); + sp38 = viGetViewTop(); + viGetViewHeight(); temp_t3 = (sp44 + 1); phi_t0 = (temp_t3 >> 1); if (temp_t3 < 0) @@ -23096,8 +23096,8 @@ s32 generate_ammo_total_microcode(s32 arg0) { sp28 = temp_v1_2; sp40 = (void *) (temp_v1_2->unk4 + globalbank_rdram_offset); sp34 = getPlayer_c_screenleft(); - sp38 = get_video2_settings_uly(); - get_video2_settings_height(); + sp38 = viGetViewTop(); + viGetViewHeight(); arg0 = set_rgba_redirect_generate_microcode(sp28->unk8, arg0, sp40, (sp34 + (f32) sp58), 0xbf800000, 1, 1); sp3C = (s32) sp40->unk4; } @@ -23127,9 +23127,9 @@ s32 generate_ammo_total_microcode(s32 arg0) { if (bondwalkItemCheckBitflags(sp64, 0x400000) == 0) { // Node 42 - sp2E = get_video2_settings_ulx(); - sp38 = get_video2_settings_uly(); - get_video2_settings_height(); + sp2E = viGetViewLeft(); + sp38 = viGetViewTop(); + viGetViewHeight(); phi_t3 = (sp3C >> 1); if (sp3C < 0) { @@ -23143,9 +23143,9 @@ s32 generate_ammo_total_microcode(s32 arg0) { if ((sp50 > 0) || (bondwalkItemCheckBitflags(sp64, 0x400000) != 0)) { // Node 47 - sp2E = get_video2_settings_ulx(); - sp38 = get_video2_settings_uly(); - get_video2_settings_height(); + sp2E = viGetViewLeft(); + sp38 = viGetViewTop(); + viGetViewHeight(); temp_t1 = (sp3C + 1); phi_t0_2 = (temp_t1 >> 1); if (temp_t1 < 0) @@ -23192,7 +23192,7 @@ glabel generate_ammo_total_microcode /* 09E858 7F069D28 AFA20064 */ sw $v0, 0x64($sp) /* 09E85C 7F069D2C 0FC17674 */ jal get_item_in_hand /* 09E860 7F069D30 00002025 */ move $a0, $zero -/* 09E864 7F069D34 0FC26919 */ jal get_num_players +/* 09E864 7F069D34 0FC26919 */ jal getPlayerCount /* 09E868 7F069D38 AFA20060 */ sw $v0, 0x60($sp) /* 09E86C 7F069D3C 28410003 */ slti $at, $v0, 3 /* 09E870 7F069D40 10200005 */ beqz $at, .L7F069D58 @@ -23254,9 +23254,9 @@ glabel generate_ammo_total_microcode /* 09E944 7F069E14 AFA20048 */ sw $v0, 0x48($sp) /* 09E948 7F069E18 0FC1E129 */ jal getPlayer_c_screenwidth /* 09E94C 7F069E1C E7A00030 */ swc1 $f0, 0x30($sp) -/* 09E950 7F069E20 0C001149 */ jal get_video2_settings_uly +/* 09E950 7F069E20 0C001149 */ jal viGetViewTop /* 09E954 7F069E24 E7A00034 */ swc1 $f0, 0x34($sp) -/* 09E958 7F069E28 0C00112B */ jal get_video2_settings_height +/* 09E958 7F069E28 0C00112B */ jal viGetViewHeight /* 09E95C 7F069E2C A7A20038 */ sh $v0, 0x38($sp) /* 09E960 7F069E30 8FAA0054 */ lw $t2, 0x54($sp) /* 09E964 7F069E34 87AB0038 */ lh $t3, 0x38($sp) @@ -23327,13 +23327,13 @@ glabel generate_ammo_total_microcode /* 09EA58 7F069F28 8FA40060 */ lw $a0, 0x60($sp) /* 09EA5C 7F069F2C 54400023 */ bnezl $v0, .L7F069FBC /* 09EA60 7F069F30 8FAD0050 */ lw $t5, 0x50($sp) -/* 09EA64 7F069F34 0C001145 */ jal get_video2_settings_ulx +/* 09EA64 7F069F34 0C001145 */ jal viGetViewLeft /* 09EA68 7F069F38 00000000 */ nop -/* 09EA6C 7F069F3C 0C001127 */ jal get_video2_settings_width +/* 09EA6C 7F069F3C 0C001127 */ jal viGetViewWidth /* 09EA70 7F069F40 A7A2002C */ sh $v0, 0x2c($sp) -/* 09EA74 7F069F44 0C001149 */ jal get_video2_settings_uly +/* 09EA74 7F069F44 0C001149 */ jal viGetViewTop /* 09EA78 7F069F48 A7A2002E */ sh $v0, 0x2e($sp) -/* 09EA7C 7F069F4C 0C00112B */ jal get_video2_settings_height +/* 09EA7C 7F069F4C 0C00112B */ jal viGetViewHeight /* 09EA80 7F069F50 A7A20038 */ sh $v0, 0x38($sp) /* 09EA84 7F069F54 87A8002E */ lh $t0, 0x2e($sp) /* 09EA88 7F069F58 87AC002C */ lh $t4, 0x2c($sp) @@ -23371,13 +23371,13 @@ glabel generate_ammo_total_microcode /* 09EB00 7F069FD0 10400023 */ beqz $v0, .L7F06A060 /* 09EB04 7F069FD4 00000000 */ nop .L7F069FD8: -/* 09EB08 7F069FD8 0C001145 */ jal get_video2_settings_ulx +/* 09EB08 7F069FD8 0C001145 */ jal viGetViewLeft /* 09EB0C 7F069FDC 00000000 */ nop -/* 09EB10 7F069FE0 0C001127 */ jal get_video2_settings_width +/* 09EB10 7F069FE0 0C001127 */ jal viGetViewWidth /* 09EB14 7F069FE4 A7A2002C */ sh $v0, 0x2c($sp) -/* 09EB18 7F069FE8 0C001149 */ jal get_video2_settings_uly +/* 09EB18 7F069FE8 0C001149 */ jal viGetViewTop /* 09EB1C 7F069FEC A7A2002E */ sh $v0, 0x2e($sp) -/* 09EB20 7F069FF0 0C00112B */ jal get_video2_settings_height +/* 09EB20 7F069FF0 0C00112B */ jal viGetViewHeight /* 09EB24 7F069FF4 A7A20038 */ sh $v0, 0x38($sp) /* 09EB28 7F069FF8 87AE002E */ lh $t6, 0x2e($sp) /* 09EB2C 7F069FFC 87B8002C */ lh $t8, 0x2c($sp) @@ -23447,9 +23447,9 @@ glabel generate_ammo_total_microcode /* 09EC1C 7F06A0EC 004C1021 */ addu $v0, $v0, $t4 /* 09EC20 7F06A0F0 0FC1E131 */ jal getPlayer_c_screenleft /* 09EC24 7F06A0F4 AFA20040 */ sw $v0, 0x40($sp) -/* 09EC28 7F06A0F8 0C001149 */ jal get_video2_settings_uly +/* 09EC28 7F06A0F8 0C001149 */ jal viGetViewTop /* 09EC2C 7F06A0FC E7A00034 */ swc1 $f0, 0x34($sp) -/* 09EC30 7F06A100 0C00112B */ jal get_video2_settings_height +/* 09EC30 7F06A100 0C00112B */ jal viGetViewHeight /* 09EC34 7F06A104 A7A20038 */ sh $v0, 0x38($sp) /* 09EC38 7F06A108 8FAD0058 */ lw $t5, 0x58($sp) /* 09EC3C 7F06A10C 87AE0038 */ lh $t6, 0x38($sp) @@ -23519,11 +23519,11 @@ glabel generate_ammo_total_microcode /* 09ED2C 7F06A1FC 8FA40064 */ lw $a0, 0x64($sp) /* 09ED30 7F06A200 5440001F */ bnezl $v0, .L7F06A280 /* 09ED34 7F06A204 8FAC0050 */ lw $t4, 0x50($sp) -/* 09ED38 7F06A208 0C001145 */ jal get_video2_settings_ulx +/* 09ED38 7F06A208 0C001145 */ jal viGetViewLeft /* 09ED3C 7F06A20C 00000000 */ nop -/* 09ED40 7F06A210 0C001149 */ jal get_video2_settings_uly +/* 09ED40 7F06A210 0C001149 */ jal viGetViewTop /* 09ED44 7F06A214 A7A2002E */ sh $v0, 0x2e($sp) -/* 09ED48 7F06A218 0C00112B */ jal get_video2_settings_height +/* 09ED48 7F06A218 0C00112B */ jal viGetViewHeight /* 09ED4C 7F06A21C A7A20038 */ sh $v0, 0x38($sp) /* 09ED50 7F06A220 87AC002E */ lh $t4, 0x2e($sp) /* 09ED54 7F06A224 8FAF0058 */ lw $t7, 0x58($sp) @@ -23559,11 +23559,11 @@ glabel generate_ammo_total_microcode /* 09EDC4 7F06A294 1040001F */ beqz $v0, .L7F06A314 /* 09EDC8 7F06A298 00000000 */ nop .L7F06A29C: -/* 09EDCC 7F06A29C 0C001145 */ jal get_video2_settings_ulx +/* 09EDCC 7F06A29C 0C001145 */ jal viGetViewLeft /* 09EDD0 7F06A2A0 00000000 */ nop -/* 09EDD4 7F06A2A4 0C001149 */ jal get_video2_settings_uly +/* 09EDD4 7F06A2A4 0C001149 */ jal viGetViewTop /* 09EDD8 7F06A2A8 A7A2002E */ sh $v0, 0x2e($sp) -/* 09EDDC 7F06A2AC 0C00112B */ jal get_video2_settings_height +/* 09EDDC 7F06A2AC 0C00112B */ jal viGetViewHeight /* 09EDE0 7F06A2B0 A7A20038 */ sh $v0, 0x38($sp) /* 09EDE4 7F06A2B4 87AF002E */ lh $t7, 0x2e($sp) /* 09EDE8 7F06A2B8 8FAA0058 */ lw $t2, 0x58($sp) @@ -23669,9 +23669,9 @@ s32 sub_GAME_7F06A334(s32 arg0) { { // Node 6 sp40 = (void *) (sp40 + globalbank_rdram_offset); - sp34 = get_video2_settings_uly(); + sp34 = viGetViewTop(); sp3C = (s32) sp40->unk4; - phi_s0 = set_rgba_redirect_generate_microcode(arg0, sp40, 0x43480000, 0x43340000, (f32) ((get_video2_settings_height() + sp34) + -0x14), 0, (f32) sp30->unk8, 1); + phi_s0 = set_rgba_redirect_generate_microcode(arg0, sp40, 0x43480000, 0x43340000, (f32) ((viGetViewHeight() + sp34) + -0x14), 0, (f32) sp30->unk8, 1); } // Node 7 temp_s0 = microcode_constructor(phi_s0); @@ -23787,9 +23787,9 @@ glabel sub_GAME_7F06A334 /* 09EF10 7F06A3E0 00000000 */ nop /* 09EF14 7F06A3E4 8D4AD0B0 */ lw $t2, %lo(globalbank_rdram_offset)($t2) /* 09EF18 7F06A3E8 006A1821 */ addu $v1, $v1, $t2 -/* 09EF1C 7F06A3EC 0C001149 */ jal get_video2_settings_uly +/* 09EF1C 7F06A3EC 0C001149 */ jal viGetViewTop /* 09EF20 7F06A3F0 AFA30040 */ sw $v1, 0x40($sp) -/* 09EF24 7F06A3F4 0C00112B */ jal get_video2_settings_height +/* 09EF24 7F06A3F4 0C00112B */ jal viGetViewHeight /* 09EF28 7F06A3F8 A7A20034 */ sh $v0, 0x34($sp) /* 09EF2C 7F06A3FC 87AB0034 */ lh $t3, 0x34($sp) /* 09EF30 7F06A400 8FAE0030 */ lw $t6, 0x30($sp) @@ -24201,7 +24201,7 @@ void *increment_num_kills_display_text_in_MP(void) { // Node 0 pPlayersPerm->killcount = (s32) (pPlayersPerm->killcount + 1); pPlayer->field_29F8 = (s32) (pPlayer->field_29F8 + 1); - temp_ret = get_num_players(); + temp_ret = getPlayerCount(); phi_return_reg = temp_ret; if (temp_ret >= 2) { @@ -24292,7 +24292,7 @@ glabel increment_num_kills_display_text_in_MP /* 09F2D8 7F06A7A8 8E020000 */ lw $v0, ($s0) /* 09F2DC 7F06A7AC 8C5829F8 */ lw $t8, 0x29f8($v0) /* 09F2E0 7F06A7B0 27190001 */ addiu $t9, $t8, 1 -/* 09F2E4 7F06A7B4 0FC26919 */ jal get_num_players +/* 09F2E4 7F06A7B4 0FC26919 */ jal getPlayerCount /* 09F2E8 7F06A7B8 AC5929F8 */ sw $t9, 0x29f8($v0) /* 09F2EC 7F06A7BC 28410002 */ slti $at, $v0, 2 /* 09F2F0 7F06A7C0 54200054 */ bnezl $at, .L7F06A914 @@ -24407,7 +24407,7 @@ glabel increment_num_kills_display_text_in_MP /* 09F2D8 7F06A7A8 8E020000 */ lw $v0, ($s0) /* 09F2DC 7F06A7AC 8C5829F8 */ lw $t8, 0x29f8($v0) /* 09F2E0 7F06A7B0 27190001 */ addiu $t9, $t8, 1 -/* 09F2E4 7F06A7B4 0FC26919 */ jal get_num_players +/* 09F2E4 7F06A7B4 0FC26919 */ jal getPlayerCount /* 09F2E8 7F06A7B8 AC5929F8 */ sw $t9, 0x29f8($v0) /* 09F2EC 7F06A7BC 28410002 */ slti $at, $v0, 2 /* 09F2F0 7F06A7C0 54200054 */ bnezl $at, .L7F06A914 @@ -24524,7 +24524,7 @@ void increment_num_deaths(void) { char acStack256 [256] pPlayer->deathcount = (s32) (pPlayer->deathcount + 1); - if (get_num_players() >= 2) + if (getPlayerCount() >= 2) { if (pPlayer->deathcount == 1) { @@ -24548,7 +24548,7 @@ glabel increment_num_deaths /* 09F498 7F06A968 AFBF001C */ sw $ra, 0x1c($sp) /* 09F49C 7F06A96C 8C4E29D8 */ lw $t6, 0x29d8($v0) /* 09F4A0 7F06A970 25CF0001 */ addiu $t7, $t6, 1 -/* 09F4A4 7F06A974 0FC26919 */ jal get_num_players +/* 09F4A4 7F06A974 0FC26919 */ jal getPlayerCount /* 09F4A8 7F06A978 AC4F29D8 */ sw $t7, 0x29d8($v0) /* 09F4AC 7F06A97C 28410002 */ slti $at, $v0, 2 /* 09F4B0 7F06A980 1420001D */ bnez $at, .L7F06A9F8 @@ -24600,7 +24600,7 @@ glabel increment_num_deaths /* 09F498 7F06A968 AFBF001C */ sw $ra, 0x1c($sp) /* 09F49C 7F06A96C 8C4E29D8 */ lw $t6, 0x29d8($v0) /* 09F4A0 7F06A970 25CF0001 */ addiu $t7, $t6, 1 -/* 09F4A4 7F06A974 0FC26919 */ jal get_num_players +/* 09F4A4 7F06A974 0FC26919 */ jal getPlayerCount /* 09F4A8 7F06A978 AC4F29D8 */ sw $t7, 0x29d8($v0) /* 09F4AC 7F06A97C 28410002 */ slti $at, $v0, 2 /* 09F4B0 7F06A980 1420001D */ bnez $at, .L7F06A9F8 @@ -24660,7 +24660,7 @@ void *increment_num_suicides_display_MP(void) { // Node 0 pPlayer->num_suicides = (s32) (pPlayer->num_suicides + 1); - temp_ret = get_num_players(); + temp_ret = getPlayerCount(); phi_return_reg = temp_ret; if (temp_ret >= 2) { @@ -24747,7 +24747,7 @@ glabel increment_num_suicides_display_MP /* 09F55C 7F06AA2C AFBF001C */ sw $ra, 0x1c($sp) /* 09F560 7F06AA30 8C4E29DC */ lw $t6, 0x29dc($v0) /* 09F564 7F06AA34 25CF0001 */ addiu $t7, $t6, 1 -/* 09F568 7F06AA38 0FC26919 */ jal get_num_players +/* 09F568 7F06AA38 0FC26919 */ jal getPlayerCount /* 09F56C 7F06AA3C AC4F29DC */ sw $t7, 0x29dc($v0) /* 09F570 7F06AA40 28410002 */ slti $at, $v0, 2 /* 09F574 7F06AA44 54200052 */ bnezl $at, .L7F06AB90 @@ -24856,7 +24856,7 @@ glabel increment_num_suicides_display_MP /* 09F55C 7F06AA2C AFBF001C */ sw $ra, 0x1c($sp) /* 09F560 7F06AA30 8C4E29DC */ lw $t6, 0x29dc($v0) /* 09F564 7F06AA34 25CF0001 */ addiu $t7, $t6, 1 -/* 09F568 7F06AA38 0FC26919 */ jal get_num_players +/* 09F568 7F06AA38 0FC26919 */ jal getPlayerCount /* 09F56C 7F06AA3C AC4F29DC */ sw $t7, 0x29dc($v0) /* 09F570 7F06AA40 28410002 */ slti $at, $v0, 2 /* 09F574 7F06AA44 54200052 */ bnezl $at, .L7F06AB90 diff --git a/src/game/cheat_buttons.c b/src/game/cheat_buttons.c index a85ff99..86566c6 100644 --- a/src/game/cheat_buttons.c +++ b/src/game/cheat_buttons.c @@ -262,7 +262,7 @@ glabel cheatButton_7F09177C /* 0C62E4 7F0917B4 10000008 */ b .L7F0917D8 /* 0C62E8 7F0917B8 24130001 */ li $s3, 1 .L7F0917BC: -/* 0C62EC 7F0917BC 0FC26919 */ jal get_num_players +/* 0C62EC 7F0917BC 0FC26919 */ jal getPlayerCount /* 0C62F0 7F0917C0 00000000 */ nop /* 0C62F4 7F0917C4 24010001 */ li $at, 1 /* 0C62F8 7F0917C8 14410003 */ bne $v0, $at, .L7F0917D8 @@ -521,7 +521,7 @@ void turn_on_cheat_for_players(u32 cheatindex) uVar1 = D_8003F80C[cheatindex]; playernum = get_cur_playernum(); - numplayers = get_num_players(); + numplayers = getPlayerCount(); if (numplayers == 1) { handle_cheats_turned_on(cheatindex); } @@ -565,7 +565,7 @@ glabel turn_on_cheat_for_players /* 0C65FC 7F091ACC AFB1001C */ sw $s1, 0x1c($sp) /* 0C6600 7F091AD0 0FC26C54 */ jal get_cur_playernum /* 0C6604 7F091AD4 8E10F808 */ lw $s0, %lo(D_8003F808)($s0) -/* 0C6608 7F091AD8 0FC26919 */ jal get_num_players +/* 0C6608 7F091AD8 0FC26919 */ jal getPlayerCount /* 0C660C 7F091ADC AFA20028 */ sw $v0, 0x28($sp) /* 0C6610 7F091AE0 24010001 */ li $at, 1 /* 0C6614 7F091AE4 14410005 */ bne $v0, $at, .L7F091AFC @@ -638,7 +638,7 @@ void handle_cheats_turned_on(CHEAT_IDS cheat) uVar1 = (&D_8003F808)[cheat * 4]; playernum = get_cur_playernum(); - numplayers = get_num_players(); + numplayers = getPlayerCount(); if ((uVar1 & 0x10) == 0) { if ((uVar1 & 0x20) == 0) { cheatl_ARRAY_80079e30[cheat] = cheatl_ARRAY_80079e30[cheat] | (byte)(1 << (playernum & 0x1f)); @@ -792,7 +792,7 @@ void handle_cheats_turned_on(CHEAT_IDS cheat) } break; case cheats_cheat_invisibility_mp: - set_curplayer_fade(300.00000000, 0.5f); + currentPlayerStartChrFade(300.00000000, 0.5f); break; case cheats_cheat_fast: if (get_debug_fast_bond_flag() == FALSE) @@ -1022,7 +1022,7 @@ glabel handle_cheats_turned_on /* 0C66AC 7F091B7C AFA40040 */ sw $a0, 0x40($sp) /* 0C66B0 7F091B80 0FC26C54 */ jal get_cur_playernum /* 0C66B4 7F091B84 AFAF003C */ sw $t7, 0x3c($sp) -/* 0C66B8 7F091B88 0FC26919 */ jal get_num_players +/* 0C66B8 7F091B88 0FC26919 */ jal getPlayerCount /* 0C66BC 7F091B8C AFA20038 */ sw $v0, 0x38($sp) /* 0C66C0 7F091B90 8FA3003C */ lw $v1, 0x3c($sp) /* 0C66C4 7F091B94 8FA60040 */ lw $a2, 0x40($sp) @@ -1421,7 +1421,7 @@ cheats_cheat_invisibility_mp: /* 0C6C74 7F092144 3C014396 */ li $at, 0x43960000 # 300.000000 /* 0C6C78 7F092148 44816000 */ mtc1 $at, $f12 /* 0C6C7C 7F09214C 3C018005 */ lui $at, %hi(finalamount) -/* 0C6C80 7F092150 0FC20284 */ jal set_curplayer_fade +/* 0C6C80 7F092150 0FC20284 */ jal currentPlayerStartChrFade /* 0C6C84 7F092154 C42E73D8 */ lwc1 $f14, %lo(finalamount)($at) /* 0C6C88 7F092158 100000B4 */ b .L7F09242C /* 0C6C8C 7F09215C 8FBF0014 */ lw $ra, 0x14($sp) @@ -1723,7 +1723,7 @@ glabel handle_cheats_turned_on /* 0C71CC 7F09265C AFA40040 */ sw $a0, 0x40($sp) /* 0C71D0 7F092660 0FC26F3C */ jal get_cur_playernum /* 0C71D4 7F092664 AFAF003C */ sw $t7, 0x3c($sp) -/* 0C71D8 7F092668 0FC26C01 */ jal get_num_players +/* 0C71D8 7F092668 0FC26C01 */ jal getPlayerCount /* 0C71DC 7F09266C AFA20038 */ sw $v0, 0x38($sp) /* 0C71E0 7F092670 8FA3003C */ lw $v1, 0x3c($sp) /* 0C71E4 7F092674 8FA60040 */ lw $a2, 0x40($sp) @@ -2122,7 +2122,7 @@ cheats_cheat_invisibility_mp: /* 0C7794 7F092C24 3C014396 */ li $at, 0x43960000 # 300.000000 /* 0C7798 7F092C28 44816000 */ mtc1 $at, $f12 /* 0C779C 7F092C2C 3C018005 */ lui $at, %hi(finalamount) # $at, 0x8005 -/* 0C77A0 7F092C30 0FC20408 */ jal set_curplayer_fade +/* 0C77A0 7F092C30 0FC20408 */ jal currentPlayerStartChrFade /* 0C77A4 7F092C34 C42E7408 */ lwc1 $f14, %lo(finalamount)($at) /* 0C77A8 7F092C38 100000DC */ b .Ljp7F092FAC /* 0C77AC 7F092C3C 8FBF0014 */ lw $ra, 0x14($sp) @@ -2470,7 +2470,7 @@ glabel cheatDisplayMessageActivateCheat /* 0C6F80 7F092450 AFA40020 */ sw $a0, 0x20($sp) /* 0C6F84 7F092454 0FC26C54 */ jal get_cur_playernum /* 0C6F88 7F092458 AFAF001C */ sw $t7, 0x1c($sp) -/* 0C6F8C 7F09245C 0FC26919 */ jal get_num_players +/* 0C6F8C 7F09245C 0FC26919 */ jal getPlayerCount /* 0C6F90 7F092460 AFA20018 */ sw $v0, 0x18($sp) /* 0C6F94 7F092464 8FA3001C */ lw $v1, 0x1c($sp) /* 0C6F98 7F092468 8FA40020 */ lw $a0, 0x20($sp) @@ -2608,7 +2608,7 @@ cheat_button_mp_invis: /* 0C717C 7F09264C 44816000 */ mtc1 $at, $f12 /* 0C7180 7F092650 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0C7184 7F092654 44817000 */ mtc1 $at, $f14 -/* 0C7188 7F092658 0FC20284 */ jal set_curplayer_fade +/* 0C7188 7F092658 0FC20284 */ jal currentPlayerStartChrFade /* 0C718C 7F09265C 00000000 */ nop /* 0C7190 7F092660 10000014 */ b .L7F0926B4 /* 0C7194 7F092664 8FBF0014 */ lw $ra, 0x14($sp) @@ -2732,7 +2732,7 @@ glabel cheatDisplayMessageActivateCheat /* 0C6F80 7F092450 AFA40020 */ sw $a0, 0x20($sp) /* 0C6F84 7F092454 0FC26C54 */ jal get_cur_playernum /* 0C6F88 7F092458 AFAF001C */ sw $t7, 0x1c($sp) -/* 0C6F8C 7F09245C 0FC26919 */ jal get_num_players +/* 0C6F8C 7F09245C 0FC26919 */ jal getPlayerCount /* 0C6F90 7F092460 AFA20018 */ sw $v0, 0x18($sp) /* 0C6F94 7F092464 8FA3001C */ lw $v1, 0x1c($sp) /* 0C6F98 7F092468 8FA40020 */ lw $a0, 0x20($sp) @@ -2870,7 +2870,7 @@ cheat_button_mp_invis: /* 0C717C 7F09264C 44816000 */ mtc1 $at, $f12 /* 0C7180 7F092650 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0C7184 7F092654 44817000 */ mtc1 $at, $f14 -/* 0C7188 7F092658 0FC20284 */ jal set_curplayer_fade +/* 0C7188 7F092658 0FC20284 */ jal currentPlayerStartChrFade /* 0C718C 7F09265C 00000000 */ nop /* 0C7190 7F092660 10000014 */ b .L7F0926B4 /* 0C7194 7F092664 8FBF0014 */ lw $ra, 0x14($sp) @@ -2920,7 +2920,7 @@ void cheatDisableAllCheats(void) { s32 phi_s0; // Node 0 - temp_s4 = get_num_players(); + temp_s4 = getPlayerCount(); sp30 = get_cur_playernum(); if (temp_s4 > 0) { @@ -2994,7 +2994,7 @@ glabel cheatDisableAllCheats /* 0C71FC 7F0926CC AFB30024 */ sw $s3, 0x24($sp) /* 0C7200 7F0926D0 AFB20020 */ sw $s2, 0x20($sp) /* 0C7204 7F0926D4 AFB1001C */ sw $s1, 0x1c($sp) -/* 0C7208 7F0926D8 0FC26919 */ jal get_num_players +/* 0C7208 7F0926D8 0FC26919 */ jal getPlayerCount /* 0C720C 7F0926DC AFB00018 */ sw $s0, 0x18($sp) /* 0C7210 7F0926E0 0FC26C54 */ jal get_cur_playernum /* 0C7214 7F0926E4 0040A025 */ move $s4, $v0 diff --git a/src/game/chr.c b/src/game/chr.c index 2fcf4f0..c619e9b 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -36,8 +36,8 @@ struct animation_something D_8002CC2C = {0xFFFFFFFF, 0, 0, 0.0, 0, 0, 0.0, NULL, s32 D_8002CC58 = 0; s32 show_patrols_flag = FALSE; -s32 player1_guardID = 0x1388; -s32 ptr_guard_data = 0; +s32 player1_guardID = 5000; +struct chrdata *ptr_guard_data = 0; s32 num_guards = 0; s32 D_8002CC6C[] = {0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; s32 D_8002CCA8 = 0; @@ -1219,7 +1219,7 @@ glabel sub_GAME_7F01F614 .L7F01F708: /* 054238 7F01F708 AFA0004C */ sw $zero, 0x4c($sp) /* 05423C 7F01F70C 27A40078 */ addiu $a0, $sp, 0x78 -/* 054240 7F01F710 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 054240 7F01F710 0FC2CA2C */ jal getCollisionEdge_maybe /* 054244 7F01F714 27A5006C */ addiu $a1, $sp, 0x6c /* 054248 7F01F718 50400130 */ beql $v0, $zero, .L7F01FBDC /* 05424C 7F01F71C 8FA40098 */ lw $a0, 0x98($sp) @@ -2201,139 +2201,45 @@ glabel sub_GAME_7F01FC10 #endif #endif +s32 chrGetNumFree(void) +{ + s32 count = 0; + s32 i; -#ifdef NONMATCHING -void get_next_available_guardID(void) { + for (i = 0; i < num_guards; i++) { + if (ptr_guard_data[i].model == 0) { + count++; + } + } + return count; } -#else -GLOBAL_ASM( -.text -glabel get_next_available_guardID -/* 054AF0 7F01FFC0 3C048003 */ lui $a0, %hi(num_guards) -/* 054AF4 7F01FFC4 8C84CC68 */ lw $a0, %lo(num_guards)($a0) -/* 054AF8 7F01FFC8 00001825 */ move $v1, $zero -/* 054AFC 7F01FFCC 00001025 */ move $v0, $zero -/* 054B00 7F01FFD0 1880000F */ blez $a0, .L7F020010 -/* 054B04 7F01FFD4 3C058003 */ lui $a1, %hi(ptr_guard_data) -/* 054B08 7F01FFD8 00043100 */ sll $a2, $a0, 4 -/* 054B0C 7F01FFDC 00C43023 */ subu $a2, $a2, $a0 -/* 054B10 7F01FFE0 000630C0 */ sll $a2, $a2, 3 -/* 054B14 7F01FFE4 00C43023 */ subu $a2, $a2, $a0 -/* 054B18 7F01FFE8 00063080 */ sll $a2, $a2, 2 -/* 054B1C 7F01FFEC 8CA5CC64 */ lw $a1, %lo(ptr_guard_data)($a1) -.L7F01FFF0: -/* 054B20 7F01FFF0 8CAE001C */ lw $t6, 0x1c($a1) -/* 054B24 7F01FFF4 244201DC */ addiu $v0, $v0, 0x1dc -/* 054B28 7F01FFF8 0046082A */ slt $at, $v0, $a2 -/* 054B2C 7F01FFFC 15C00002 */ bnez $t6, .L7F020008 -/* 054B30 7F020000 00000000 */ nop -/* 054B34 7F020004 24630001 */ addiu $v1, $v1, 1 -.L7F020008: -/* 054B38 7F020008 1420FFF9 */ bnez $at, .L7F01FFF0 -/* 054B3C 7F02000C 24A501DC */ addiu $a1, $a1, 0x1dc -.L7F020010: -/* 054B40 7F020010 03E00008 */ jr $ra -/* 054B44 7F020014 00601025 */ move $v0, $v1 -) -#endif +f32 get_007_health_mod(void); - -#ifdef NONMATCHING -void sub_GAME_7F020018(void) { - +void chrSetMaxDamage(struct chrdata *chr, f32 maxdamage) +{ + chr->maxdamage = (get_007_health_mod() * maxdamage); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F020018 -/* 054B48 7F020018 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 054B4C 7F02001C AFBF0014 */ sw $ra, 0x14($sp) -/* 054B50 7F020020 AFA40018 */ sw $a0, 0x18($sp) -/* 054B54 7F020024 0FC074BA */ jal get_007_health_mod -/* 054B58 7F020028 AFA5001C */ sw $a1, 0x1c($sp) -/* 054B5C 7F02002C C7A4001C */ lwc1 $f4, 0x1c($sp) -/* 054B60 7F020030 8FAE0018 */ lw $t6, 0x18($sp) -/* 054B64 7F020034 46040182 */ mul.s $f6, $f0, $f4 -/* 054B68 7F020038 E5C60100 */ swc1 $f6, 0x100($t6) -/* 054B6C 7F02003C 8FBF0014 */ lw $ra, 0x14($sp) -/* 054B70 7F020040 27BD0018 */ addiu $sp, $sp, 0x18 -/* 054B74 7F020044 03E00008 */ jr $ra -/* 054B78 7F020048 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F02004C(void) { +f32 chrGetMaxDamage(struct chrdata *chr) +{ + return chr->maxdamage; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F02004C -/* 054B7C 7F02004C 03E00008 */ jr $ra -/* 054B80 7F020050 C4800100 */ lwc1 $f0, 0x100($a0) -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F020054(void) { +void chrAddHealth(struct chrdata *chr, f32 health) +{ + chr->damage -= (health * get_007_health_mod()); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F020054 -/* 054B84 7F020054 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 054B88 7F020058 AFBF0014 */ sw $ra, 0x14($sp) -/* 054B8C 7F02005C AFA40018 */ sw $a0, 0x18($sp) -/* 054B90 7F020060 0FC074BA */ jal get_007_health_mod -/* 054B94 7F020064 AFA5001C */ sw $a1, 0x1c($sp) -/* 054B98 7F020068 C7A6001C */ lwc1 $f6, 0x1c($sp) -/* 054B9C 7F02006C 8FA20018 */ lw $v0, 0x18($sp) -/* 054BA0 7F020070 46003202 */ mul.s $f8, $f6, $f0 -/* 054BA4 7F020074 C44400FC */ lwc1 $f4, 0xfc($v0) -/* 054BA8 7F020078 46082281 */ sub.s $f10, $f4, $f8 -/* 054BAC 7F02007C E44A00FC */ swc1 $f10, 0xfc($v0) -/* 054BB0 7F020080 8FBF0014 */ lw $ra, 0x14($sp) -/* 054BB4 7F020084 27BD0018 */ addiu $sp, $sp, 0x18 -/* 054BB8 7F020088 03E00008 */ jr $ra -/* 054BBC 7F02008C 00000000 */ nop -) -#endif +f32 chrGetArmor(struct chrdata *chr) +{ + if (chr->damage < 0) { + return -chr->damage; + } - -#ifdef NONMATCHING -void sub_GAME_7F020090(void) { - + return 0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F020090 -/* 054BC0 7F020090 44806000 */ mtc1 $zero, $f12 -/* 054BC4 7F020094 C48200FC */ lwc1 $f2, 0xfc($a0) -/* 054BC8 7F020098 460C103C */ c.lt.s $f2, $f12 -/* 054BCC 7F02009C 00000000 */ nop -/* 054BD0 7F0200A0 45020004 */ bc1fl .L7F0200B4 -/* 054BD4 7F0200A4 46006006 */ mov.s $f0, $f12 -/* 054BD8 7F0200A8 03E00008 */ jr $ra -/* 054BDC 7F0200AC 46001007 */ neg.s $f0, $f2 - -/* 054BE0 7F0200B0 46006006 */ mov.s $f0, $f12 -.L7F0200B4: -/* 054BE4 7F0200B4 03E00008 */ jr $ra -/* 054BE8 7F0200B8 00000000 */ nop -) -#endif - - #ifdef NONMATCHING void init_GUARDdata_with_set_values(void) { @@ -3338,7 +3244,7 @@ glabel sub_GAME_7F02083C /* 055720 7F020BF0 460A6300 */ add.s $f12, $f12, $f10 /* 055724 7F020BF4 E7AC008C */ swc1 $f12, 0x8c($sp) .L7F020BF8: -/* 055728 7F020BF8 0FC1E111 */ jal sub_GAME_7F078444 +/* 055728 7F020BF8 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 05572C 7F020BFC E7AE0090 */ swc1 $f14, 0x90($sp) /* 055730 7F020C00 00402025 */ move $a0, $v0 /* 055734 7F020C04 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -3439,7 +3345,7 @@ glabel sub_GAME_7F02083C /* 055894 7F020D64 C7A80078 */ lwc1 $f8, 0x78($sp) /* 055898 7F020D68 E5080034 */ swc1 $f8, 0x34($t0) /* 05589C 7F020D6C C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 0558A0 7F020D70 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0558A0 7F020D70 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0558A4 7F020D74 E5040038 */ swc1 $f4, 0x38($t0) /* 0558A8 7F020D78 00402025 */ move $a0, $v0 /* 0558AC 7F020D7C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -3732,7 +3638,7 @@ glabel sub_GAME_7F02083C /* 0559F8 7F020E88 460A6300 */ add.s $f12, $f12, $f10 /* 0559FC 7F020E8C E7AC008C */ swc1 $f12, 0x8c($sp) .L7F020E90: -/* 055A00 7F020E90 0FC1E28D */ jal sub_GAME_7F078444 +/* 055A00 7F020E90 0FC1E28D */ jal currentPlayerGetMatrix10D4 /* 055A04 7F020E94 E7AE0090 */ swc1 $f14, 0x90($sp) /* 055A08 7F020E98 00402025 */ move $a0, $v0 /* 055A0C 7F020E9C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place @@ -3833,7 +3739,7 @@ glabel sub_GAME_7F02083C /* 055B6C 7F020FFC C7A80078 */ lwc1 $f8, 0x78($sp) /* 055B70 7F021000 E5280034 */ swc1 $f8, 0x34($t1) /* 055B74 7F021004 C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 055B78 7F021008 0FC1E26D */ jal get_BONDdata_field_10CC +/* 055B78 7F021008 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 055B7C 7F02100C E5240038 */ swc1 $f4, 0x38($t1) /* 055B80 7F021010 00402025 */ move $a0, $v0 /* 055B84 7F021014 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place @@ -4113,9 +4019,9 @@ glabel sub_GAME_7F020EF0 /* 055C18 7F0210E8 0FC26C57 */ jal sub_GAME_7F09B15C /* 055C1C 7F0210EC 01802025 */ move $a0, $t4 /* 055C20 7F0210F0 0002C880 */ sll $t9, $v0, 2 -/* 055C24 7F0210F4 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) +/* 055C24 7F0210F4 3C188008 */ lui $t8, %hi(players) /* 055C28 7F0210F8 0319C021 */ addu $t8, $t8, $t9 -/* 055C2C 7F0210FC 8F189EE0 */ lw $t8, %lo(ptr_BONDdata_p1)($t8) +/* 055C2C 7F0210FC 8F189EE0 */ lw $t8, %lo(players)($t8) /* 055C30 7F021100 24010001 */ li $at, 1 /* 055C34 7F021104 8F080000 */ lw $t0, ($t8) /* 055C38 7F021108 51010005 */ beql $t0, $at, .L7F021120 @@ -4369,7 +4275,7 @@ glabel sub_GAME_7F020EF0 /* 055FA8 7F021478 3C018003 */ lui $at, %hi(D_80036090) /* 055FAC 7F02147C AC2A6090 */ sw $t2, %lo(D_80036090)($at) /* 055FB0 7F021480 3C018007 */ lui $at, %hi(dword_CODE_bss_80069B60) -/* 055FB4 7F021484 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 055FB4 7F021484 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 055FB8 7F021488 AC309B60 */ sw $s0, %lo(dword_CODE_bss_80069B60)($at) /* 055FBC 7F02148C 8FAB0110 */ lw $t3, 0x110($sp) /* 055FC0 7F021490 AFA20118 */ sw $v0, 0x118($sp) @@ -4965,9 +4871,9 @@ glabel sub_GAME_7F020EF0 /* 055EF0 7F021380 0FC26F3F */ jal sub_GAME_7F09B15C /* 055EF4 7F021384 01802025 */ move $a0, $t4 /* 055EF8 7F021388 0002C880 */ sll $t9, $v0, 2 -/* 055EFC 7F02138C 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) +/* 055EFC 7F02138C 3C188008 */ lui $t8, %hi(players) /* 055F00 7F021390 0319C021 */ addu $t8, $t8, $t9 -/* 055F04 7F021394 8F189F50 */ lw $t8, %lo(ptr_BONDdata_p1)($t8) +/* 055F04 7F021394 8F189F50 */ lw $t8, %lo(players)($t8) /* 055F08 7F021398 24010001 */ li $at, 1 /* 055F0C 7F02139C 8F080000 */ lw $t0, ($t8) /* 055F10 7F0213A0 51010005 */ beql $t0, $at, .Ljp7F0213B8 @@ -5241,7 +5147,7 @@ glabel sub_GAME_7F020EF0 /* 0562D0 7F021760 3C018003 */ lui $at, %hi(D_80036090) # $at, 0x8003 /* 0562D4 7F021764 AC2D60D0 */ sw $t5, %lo(D_80036090)($at) /* 0562D8 7F021768 3C018007 */ lui $at, %hi(dword_CODE_bss_80069B60) # $at, 0x8007 -/* 0562DC 7F02176C 0FC1E26D */ jal get_BONDdata_field_10CC +/* 0562DC 7F02176C 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 0562E0 7F021770 AC309BA0 */ sw $s0, %lo(dword_CODE_bss_80069B60)($at) /* 0562E4 7F021774 8FAC0110 */ lw $t4, 0x110($sp) /* 0562E8 7F021778 AFA20118 */ sw $v0, 0x118($sp) @@ -6195,7 +6101,7 @@ glabel sub_GAME_7F022078 /* 056C98 7F022168 E7B00040 */ swc1 $f16, 0x40($sp) /* 056C9C 7F02216C C4D20008 */ lwc1 $f18, 8($a2) /* 056CA0 7F022170 46029102 */ mul.s $f4, $f18, $f2 -/* 056CA4 7F022174 0FC1E111 */ jal sub_GAME_7F078444 +/* 056CA4 7F022174 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 056CA8 7F022178 E7A40044 */ swc1 $f4, 0x44($sp) /* 056CAC 7F02217C 00402025 */ move $a0, $v0 /* 056CB0 7F022180 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -6691,7 +6597,7 @@ glabel sub_GAME_7F022648 /* 057360 7F022830 C6520010 */ lwc1 $f18, 0x10($s2) /* 057364 7F022834 E7B20078 */ swc1 $f18, 0x78($sp) /* 057368 7F022838 C6440014 */ lwc1 $f4, 0x14($s2) -/* 05736C 7F02283C 0FC1E111 */ jal sub_GAME_7F078444 +/* 05736C 7F02283C 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 057370 7F022840 E7A4007C */ swc1 $f4, 0x7c($sp) /* 057374 7F022844 00402025 */ move $a0, $v0 /* 057378 7F022848 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -6846,7 +6752,7 @@ glabel sub_GAME_7F022980 /* 057590 7F022A60 46023202 */ mul.s $f8, $f6, $f2 /* 057594 7F022A64 E7A400A8 */ swc1 $f4, 0xa8($sp) /* 057598 7F022A68 E7B000AC */ swc1 $f16, 0xac($sp) -/* 05759C 7F022A6C 0FC1E111 */ jal sub_GAME_7F078444 +/* 05759C 7F022A6C 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0575A0 7F022A70 E7A800B0 */ swc1 $f8, 0xb0($sp) /* 0575A4 7F022A74 27B000A8 */ addiu $s0, $sp, 0xa8 /* 0575A8 7F022A78 02002825 */ move $a1, $s0 @@ -7072,7 +6978,7 @@ glabel sub_GAME_7F022980 /* 0578E8 7F022DB8 02002025 */ move $a0, $s0 /* 0578EC 7F022DBC 46082402 */ mul.s $f16, $f4, $f8 /* 0578F0 7F022DC0 46105181 */ sub.s $f6, $f10, $f16 -/* 0578F4 7F022DC4 0FC16799 */ jal sub_GAME_7F059E64 +/* 0578F4 7F022DC4 0FC16799 */ jal matrix_4x4_7F059E64 /* 0578F8 7F022DC8 E7A60078 */ swc1 $f6, 0x78($sp) /* 0578FC 7F022DCC 27B00070 */ addiu $s0, $sp, 0x70 /* 057900 7F022DD0 02002825 */ move $a1, $s0 @@ -7252,7 +7158,7 @@ glabel sub_GAME_7F022EEC /* 057A7C 7F022F4C 44812000 */ mtc1 $at, $f4 /* 057A80 7F022F50 02302021 */ addu $a0, $s1, $s0 /* 057A84 7F022F54 4604B502 */ mul.s $f20, $f22, $f4 -/* 057A88 7F022F58 0FC0CB79 */ jal sub_GAME_7F032DE4 +/* 057A88 7F022F58 0FC0CB79 */ jal distToBond3D /* 057A8C 7F022F5C 00000000 */ nop /* 057A90 7F022F60 8E700000 */ lw $s0, ($s3) /* 057A94 7F022F64 0211C821 */ addu $t9, $s0, $s1 diff --git a/src/game/chr.h b/src/game/chr.h index e82007a..0f39f38 100644 --- a/src/game/chr.h +++ b/src/game/chr.h @@ -2,10 +2,12 @@ #define _CHR_H_ #include "ultra64.h" #include "bondgame.h" +#include "chrai.h" +#include "bondtypes.h" // chrdata -struct animation_something -{ - s32 anonymous_0; + struct animation_something + { + s32 anonymous_0; s32 field_4; s32 field_8; f32 field_C; @@ -16,7 +18,7 @@ struct animation_something s32 field_20; struct struck_animation_table *field_24; s32 field_28; -}; + }; struct struck_animation_table { @@ -173,7 +175,7 @@ extern s32 D_8002C910; extern s32 D_8002CC58; extern s32 show_patrols_flag; extern s32 player1_guardID; -extern s32 ptr_guard_data; +extern struct chrdata *ptr_guard_data; extern s32 num_guards; extern s32 D_8002CC6C[]; extern s32 D_8002CCA8; diff --git a/src/game/chr2.c b/src/game/chr2.c index 40a8f7e..870d0d0 100644 --- a/src/game/chr2.c +++ b/src/game/chr2.c @@ -2,6 +2,8 @@ #include "bondgame.h" #include "game/chr.h" #include "game/bondwalk.h" +#include "game/lvl.h" +#include "bondconstants.h" #ifdef NONMATCHING void load_body_head_if_not_loaded(void) { @@ -4032,7 +4034,7 @@ glabel sub_GAME_7F02624C /* 05AD88 7F026258 AFA5003C */ sw $a1, 0x3c($sp) /* 05AD8C 7F02625C AFA60040 */ sw $a2, 0x40($sp) /* 05AD90 7F026260 27A50020 */ addiu $a1, $sp, 0x20 -/* 05AD94 7F026264 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 05AD94 7F026264 0FC2CA2C */ jal getCollisionEdge_maybe /* 05AD98 7F026268 27A4002C */ addiu $a0, $sp, 0x2c /* 05AD9C 7F02626C 8FAE0040 */ lw $t6, 0x40($sp) /* 05ADA0 7F026270 27A4002C */ addiu $a0, $sp, 0x2c @@ -4064,7 +4066,7 @@ glabel sub_GAME_7F026298 /* 05ADD4 7F0262A4 AFA5003C */ sw $a1, 0x3c($sp) /* 05ADD8 7F0262A8 27A50020 */ addiu $a1, $sp, 0x20 /* 05ADDC 7F0262AC 27A4002C */ addiu $a0, $sp, 0x2c -/* 05ADE0 7F0262B0 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 05ADE0 7F0262B0 0FC2CA2C */ jal getCollisionEdge_maybe /* 05ADE4 7F0262B4 AFA60040 */ sw $a2, 0x40($sp) /* 05ADE8 7F0262B8 8FA30038 */ lw $v1, 0x38($sp) /* 05ADEC 7F0262BC C7A40020 */ lwc1 $f4, 0x20($sp) @@ -4291,7 +4293,7 @@ glabel triggered_on_shot_hit /* 05B078 7F026548 57010009 */ bnel $t8, $at, .L7F026570 /* 05B07C 7F02654C 82020007 */ lb $v0, 7($s0) /* 05B080 7F026550 AFA700AC */ sw $a3, 0xac($sp) -/* 05B084 7F026554 0FC26919 */ jal get_num_players +/* 05B084 7F026554 0FC26919 */ jal getPlayerCount /* 05B088 7F026558 E7AC00A8 */ swc1 $f12, 0xa8($sp) /* 05B08C 7F02655C 28410002 */ slti $at, $v0, 2 /* 05B090 7F026560 8FA700AC */ lw $a3, 0xac($sp) @@ -5079,9 +5081,9 @@ glabel play_sound_for_shot_actor /* 05BBB8 7F027088 0FC26C57 */ jal sub_GAME_7F09B15C /* 05BBBC 7F02708C AFA00060 */ sw $zero, 0x60($sp) /* 05BBC0 7F027090 0002C080 */ sll $t8, $v0, 2 -/* 05BBC4 7F027094 3C198008 */ lui $t9, %hi(ptr_BONDdata_p1) +/* 05BBC4 7F027094 3C198008 */ lui $t9, %hi(players) /* 05BBC8 7F027098 0338C821 */ addu $t9, $t9, $t8 -/* 05BBCC 7F02709C 8F399EE0 */ lw $t9, %lo(ptr_BONDdata_p1)($t9) +/* 05BBCC 7F02709C 8F399EE0 */ lw $t9, %lo(players)($t9) /* 05BBD0 7F0270A0 8FA30060 */ lw $v1, 0x60($sp) /* 05BBD4 7F0270A4 8F2800D8 */ lw $t0, 0xd8($t9) /* 05BBD8 7F0270A8 55000071 */ bnezl $t0, .L7F027270 @@ -5094,7 +5096,7 @@ glabel play_sound_for_shot_actor /* 05BBF0 7F0270C0 914B0000 */ lbu $t3, ($t2) /* 05BBF4 7F0270C4 5561001D */ bnel $t3, $at, .L7F02713C /* 05BBF8 7F0270C8 8328000F */ lb $t0, 0xf($t9) -/* 05BBFC 7F0270CC 0FC26919 */ jal get_num_players +/* 05BBFC 7F0270CC 0FC26919 */ jal getPlayerCount /* 05BC00 7F0270D0 AFA30060 */ sw $v1, 0x60($sp) /* 05BC04 7F0270D4 24010001 */ li $at, 1 /* 05BC08 7F0270D8 1441000D */ bne $v0, $at, .L7F027110 @@ -5359,7 +5361,7 @@ glabel handles_shot_actors /* 05BF70 7F027440 46000086 */ mov.s $f2, $f0 /* 05BF74 7F027444 51A0000B */ beql $t5, $zero, .L7F027474 /* 05BF78 7F027448 8FA20070 */ lw $v0, 0x70($sp) -/* 05BF7C 7F02744C 0FC26919 */ jal get_num_players +/* 05BF7C 7F02744C 0FC26919 */ jal getPlayerCount /* 05BF80 7F027450 E7A2003C */ swc1 $f2, 0x3c($sp) /* 05BF84 7F027454 24010001 */ li $at, 1 /* 05BF88 7F027458 14410005 */ bne $v0, $at, .L7F027470 @@ -7808,20 +7810,11 @@ glabel set_actor_on_path -#ifdef NONMATCHING -void update_GUARDdata_timer_to_current(void) { - +void setSeenBondTimeToNow(struct chrdata *guardData) +{ + guardData->timeshooter = global_timer; + return; } -#else -GLOBAL_ASM( -.text -glabel update_GUARDdata_timer_to_current -/* 05DDC8 7F029298 3C0E8005 */ lui $t6, %hi(global_timer) -/* 05DDCC 7F02929C 8DCE837C */ lw $t6, %lo(global_timer)($t6) -/* 05DDD0 7F0292A0 03E00008 */ jr $ra -/* 05DDD4 7F0292A4 AC8E00E8 */ sw $t6, 0xe8($a0) -) -#endif @@ -7901,7 +7894,7 @@ glabel sub_GAME_7F0292A8 /* 05DED4 7F0293A4 8FAF0040 */ lw $t7, 0x40($sp) /* 05DED8 7F0293A8 15CF0005 */ bne $t6, $t7, .L7F0293C0 /* 05DEDC 7F0293AC 00000000 */ nop -/* 05DEE0 7F0293B0 0FC0A4A6 */ jal update_GUARDdata_timer_to_current +/* 05DEE0 7F0293B0 0FC0A4A6 */ jal setSeenBondTimeToNow /* 05DEE4 7F0293B4 8FA40050 */ lw $a0, 0x50($sp) /* 05DEE8 7F0293B8 24180001 */ li $t8, 1 /* 05DEEC 7F0293BC AFB8004C */ sw $t8, 0x4c($sp) @@ -8039,7 +8032,7 @@ glabel sub_GAME_7F0294BC /* 05E0B0 7F029580 8D2A0014 */ lw $t2, 0x14($t1) /* 05E0B4 7F029584 550A0006 */ bnel $t0, $t2, .L7F0295A0 /* 05E0B8 7F029588 02002025 */ move $a0, $s0 -/* 05E0BC 7F02958C 0FC0A4A6 */ jal update_GUARDdata_timer_to_current +/* 05E0BC 7F02958C 0FC0A4A6 */ jal setSeenBondTimeToNow /* 05E0C0 7F029590 02002025 */ move $a0, $s0 /* 05E0C4 7F029594 240B0001 */ li $t3, 1 /* 05E0C8 7F029598 AFAB004C */ sw $t3, 0x4c($sp) @@ -9110,7 +9103,7 @@ glabel sub_GAME_7F02A1E8 -s32 true_if_actor_dying_fading_limping_shot(PCHRdata chr) { +s32 true_if_actor_dying_fading_limping_shot(struct chrdata *chr) { s8 currentaction = chr->actiontype; if ((currentaction == ACT_DIE) || (currentaction == ACT_DEAD) || (currentaction == ACT_PREARGH) || (currentaction == ACT_ARGH) && !(chr->chrflags & CHRFLAG_00000200)) @@ -9120,7 +9113,7 @@ s32 true_if_actor_dying_fading_limping_shot(PCHRdata chr) { -s32 true_if_actor_dying_fading(PCHRdata chr) { +s32 true_if_actor_dying_fading(struct chrdata *chr) { s8 currentaction = chr->actiontype; return ((currentaction == ACT_DIE) || (currentaction == ACT_DEAD)); @@ -9922,7 +9915,7 @@ glabel actor_moves_to_preset_at_speed /* 05F71C 7F02ABEC 29C1000A */ slti $at, $t6, 0xa /* 05F720 7F02ABF0 50200053 */ beql $at, $zero, .L7F02AD40 /* 05F724 7F02ABF4 00001025 */ move $v0, $zero -/* 05F728 7F02ABF8 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 05F728 7F02ABF8 0FC0CBE5 */ jal convertPadIf9000 /* 05F72C 7F02ABFC 02002825 */ move $a1, $s0 /* 05F730 7F02AC00 28412710 */ slti $at, $v0, 0x2710 /* 05F734 7F02AC04 1020000A */ beqz $at, .L7F02AC30 @@ -10584,7 +10577,7 @@ glabel sub_GAME_7F02AD98 -void actor_reset_sleep(PCHRdata actor) { +void actor_reset_sleep(struct chrdata *actor) { actor->sleep = 0; } @@ -10645,7 +10638,7 @@ glabel sub_GAME_7F02B4E8 /* 0600C4 7F02B594 314B0001 */ andi $t3, $t2, 1 /* 0600C8 7F02B598 55600012 */ bnezl $t3, .L7F02B5E4 /* 0600CC 7F02B59C 8E0C0014 */ lw $t4, 0x14($s0) -/* 0600D0 7F02B5A0 0FC0CB79 */ jal sub_GAME_7F032DE4 +/* 0600D0 7F02B5A0 0FC0CB79 */ jal distToBond3D /* 0600D4 7F02B5A4 02002025 */ move $a0, $s0 /* 0600D8 7F02B5A8 3C014448 */ li $at, 0x44480000 # 800.000000 /* 0600DC 7F02B5AC 44814000 */ mtc1 $at, $f8 @@ -12658,7 +12651,7 @@ glabel sub_GAME_7F02C4C0 /* 061788 7F02CC58 8F290004 */ lw $t1, 4($t9) /* 06178C 7F02CC5C 0FC1639E */ jal sub_GAME_7F058E78 /* 061790 7F02CC60 AFA900B8 */ sw $t1, 0xb8($sp) -/* 061794 7F02CC64 0FC1E115 */ jal sub_GAME_7F078454 +/* 061794 7F02CC64 0FC1E115 */ jal currentPlayerGetMatrix10EC /* 061798 7F02CC68 00000000 */ nop /* 06179C 7F02CC6C 00402025 */ move $a0, $v0 /* 0617A0 7F02CC70 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -12692,7 +12685,7 @@ glabel sub_GAME_7F02C4C0 /* 06180C 7F02CCDC 00402025 */ move $a0, $v0 /* 061810 7F02CCE0 0FC1639E */ jal sub_GAME_7F058E78 /* 061814 7F02CCE4 27A50068 */ addiu $a1, $sp, 0x68 -/* 061818 7F02CCE8 0FC1E115 */ jal sub_GAME_7F078454 +/* 061818 7F02CCE8 0FC1E115 */ jal currentPlayerGetMatrix10EC /* 06181C 7F02CCEC 00000000 */ nop /* 061820 7F02CCF0 00402025 */ move $a0, $v0 /* 061824 7F02CCF4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -13760,7 +13753,7 @@ glabel sub_GAME_7F02D630 /* 0621D0 7F02D6A0 C4660004 */ lwc1 $f6, 4($v1) /* 0621D4 7F02D6A4 E6060004 */ swc1 $f6, 4($s0) /* 0621D8 7F02D6A8 C4680008 */ lwc1 $f8, 8($v1) -/* 0621DC 7F02D6AC 0FC1E111 */ jal sub_GAME_7F078444 +/* 0621DC 7F02D6AC 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0621E0 7F02D6B0 E6080008 */ swc1 $f8, 8($s0) /* 0621E4 7F02D6B4 00402025 */ move $a0, $v0 /* 0621E8 7F02D6B8 8FA500B4 */ lw $a1, 0xb4($sp) @@ -13777,7 +13770,7 @@ glabel sub_GAME_7F02D630 /* 062210 7F02D6E0 8FBF001C */ lw $ra, 0x1c($sp) /* 062214 7F02D6E4 0FC1B198 */ jal sub_GAME_7F06C660 /* 062218 7F02D6E8 00003025 */ move $a2, $zero -/* 06221C 7F02D6EC 0FC1E111 */ jal sub_GAME_7F078444 +/* 06221C 7F02D6EC 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 062220 7F02D6F0 AFA2006C */ sw $v0, 0x6c($sp) /* 062224 7F02D6F4 00402025 */ move $a0, $v0 /* 062228 7F02D6F8 8FA5006C */ lw $a1, 0x6c($sp) @@ -14443,7 +14436,7 @@ glabel sub_GAME_7F02D734 /* 062B44 7F02E014 8FA80230 */ lw $t0, 0x230($sp) .L7F02E018: /* 062B48 7F02E018 8FA50270 */ lw $a1, 0x270($sp) -/* 062B4C 7F02E01C 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007BA04) +/* 062B4C 7F02E01C 3C038008 */ lui $v1, %hi(stanSavedColl_posData) /* 062B50 7F02E020 1100000F */ beqz $t0, .L7F02E060 /* 062B54 7F02E024 00000000 */ nop /* 062B58 7F02E028 C4A60008 */ lwc1 $f6, 8($a1) @@ -14461,7 +14454,7 @@ glabel sub_GAME_7F02D734 /* 062B88 7F02E058 10000012 */ b .L7F02E0A4 /* 062B8C 7F02E05C 8FAC022C */ lw $t4, 0x22c($sp) .L7F02E060: -/* 062B90 7F02E060 8C63BA04 */ lw $v1, %lo(dword_CODE_bss_8007BA04)($v1) +/* 062B90 7F02E060 8C63BA04 */ lw $v1, %lo(stanSavedColl_posData)($v1) /* 062B94 7F02E064 C7A8020C */ lwc1 $f8, 0x20c($sp) /* 062B98 7F02E068 10600006 */ beqz $v1, .L7F02E084 /* 062B9C 7F02E06C 00000000 */ nop @@ -14491,8 +14484,8 @@ glabel sub_GAME_7F02D734 /* 062BF0 7F02E0C0 0FC28F87 */ jal sub_GAME_7F0A3E1C /* 062BF4 7F02E0C4 91A70003 */ lbu $a3, 3($t5) .L7F02E0C8: -/* 062BF8 7F02E0C8 3C058008 */ lui $a1, %hi(dword_CODE_bss_8007BA04) -/* 062BFC 7F02E0CC 8CA5BA04 */ lw $a1, %lo(dword_CODE_bss_8007BA04)($a1) +/* 062BF8 7F02E0C8 3C058008 */ lui $a1, %hi(stanSavedColl_posData) +/* 062BFC 7F02E0CC 8CA5BA04 */ lw $a1, %lo(stanSavedColl_posData)($a1) /* 062C00 7F02E0D0 8FAE0274 */ lw $t6, 0x274($sp) /* 062C04 7F02E0D4 2406FFFF */ li $a2, -1 /* 062C08 7F02E0D8 10A0002D */ beqz $a1, .L7F02E190 @@ -14500,8 +14493,8 @@ glabel sub_GAME_7F02D734 /* 062C10 7F02E0E0 00E02025 */ move $a0, $a3 /* 062C14 7F02E0E4 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag /* 062C18 7F02E0E8 2406FFFF */ li $a2, -1 -/* 062C1C 7F02E0EC 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007BA04) -/* 062C20 7F02E0F0 8C63BA04 */ lw $v1, %lo(dword_CODE_bss_8007BA04)($v1) +/* 062C1C 7F02E0EC 3C038008 */ lui $v1, %hi(stanSavedColl_posData) +/* 062C20 7F02E0F0 8C63BA04 */ lw $v1, %lo(stanSavedColl_posData)($v1) /* 062C24 7F02E0F4 24010003 */ li $at, 3 /* 062C28 7F02E0F8 8FAF0288 */ lw $t7, 0x288($sp) /* 062C2C 7F02E0FC 90620000 */ lbu $v0, ($v1) @@ -14532,8 +14525,8 @@ glabel sub_GAME_7F02D734 /* 062C88 7F02E158 81240080 */ lb $a0, 0x80($t1) /* 062C8C 7F02E15C 0FC26C54 */ jal get_cur_playernum /* 062C90 7F02E160 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 062C94 7F02E164 3C0B8008 */ lui $t3, %hi(dword_CODE_bss_8007BA04) -/* 062C98 7F02E168 8D6BBA04 */ lw $t3, %lo(dword_CODE_bss_8007BA04)($t3) +/* 062C94 7F02E164 3C0B8008 */ lui $t3, %hi(stanSavedColl_posData) +/* 062C98 7F02E168 8D6BBA04 */ lw $t3, %lo(stanSavedColl_posData)($t3) /* 062C9C 7F02E16C 8FAA0274 */ lw $t2, 0x274($sp) /* 062CA0 7F02E170 8FA5004C */ lw $a1, 0x4c($sp) /* 062CA4 7F02E174 8D640004 */ lw $a0, 4($t3) @@ -17853,7 +17846,7 @@ glabel sub_GAME_7F03081C /* 065588 7F030A58 24080001 */ li $t0, 1 /* 06558C 7F030A5C AFA80088 */ sw $t0, 0x88($sp) /* 065590 7F030A60 27A40078 */ addiu $a0, $sp, 0x78 -/* 065594 7F030A64 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 065594 7F030A64 0FC2CA2C */ jal getCollisionEdge_maybe /* 065598 7F030A68 27A5006C */ addiu $a1, $sp, 0x6c /* 06559C 7F030A6C 27A40078 */ addiu $a0, $sp, 0x78 /* 0655A0 7F030A70 27A5006C */ addiu $a1, $sp, 0x6c @@ -17928,7 +17921,7 @@ glabel sub_GAME_7F03081C /* 0656AC 7F030B7C 240C0001 */ li $t4, 1 /* 0656B0 7F030B80 AFAC0084 */ sw $t4, 0x84($sp) /* 0656B4 7F030B84 27A40060 */ addiu $a0, $sp, 0x60 -/* 0656B8 7F030B88 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 0656B8 7F030B88 0FC2CA2C */ jal getCollisionEdge_maybe /* 0656BC 7F030B8C 27A50054 */ addiu $a1, $sp, 0x54 /* 0656C0 7F030B90 27A40060 */ addiu $a0, $sp, 0x60 /* 0656C4 7F030B94 27A50054 */ addiu $a1, $sp, 0x54 @@ -18040,7 +18033,7 @@ glabel sub_GAME_7F03081C /* 06585C 7F030D2C AFAB0050 */ sw $t3, 0x50($sp) .L7F030D30: /* 065860 7F030D30 8FA400C0 */ lw $a0, 0xc0($sp) -/* 065864 7F030D34 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 065864 7F030D34 0FC2CA2C */ jal getCollisionEdge_maybe /* 065868 7F030D38 8FA500C4 */ lw $a1, 0xc4($sp) /* 06586C 7F030D3C 8FA400C0 */ lw $a0, 0xc0($sp) /* 065870 7F030D40 8FA500C4 */ lw $a1, 0xc4($sp) @@ -18228,14 +18221,14 @@ glabel sub_GAME_7F030D70 /* 065ADC 7F030FAC 24080001 */ li $t0, 1 /* 065AE0 7F030FB0 AFA80090 */ sw $t0, 0x90($sp) /* 065AE4 7F030FB4 27A40080 */ addiu $a0, $sp, 0x80 -/* 065AE8 7F030FB8 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 065AE8 7F030FB8 0FC2CA2C */ jal getCollisionEdge_maybe /* 065AEC 7F030FBC 27A50074 */ addiu $a1, $sp, 0x74 /* 065AF0 7F030FC0 27A40080 */ addiu $a0, $sp, 0x80 /* 065AF4 7F030FC4 27A50074 */ addiu $a1, $sp, 0x74 /* 065AF8 7F030FC8 0FC0C1D3 */ jal sub_GAME_7F03074C /* 065AFC 7F030FCC 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 065B00 7F030FD0 3C018008 */ lui $at, %hi(flt_CODE_bss_8007BA00) -/* 065B04 7F030FD4 C42ABA00 */ lwc1 $f10, %lo(flt_CODE_bss_8007BA00)($at) +/* 065B00 7F030FD0 3C018008 */ lui $at, %hi(stanSavedColl_someMin) +/* 065B04 7F030FD4 C42ABA00 */ lwc1 $f10, %lo(stanSavedColl_someMin)($at) /* 065B08 7F030FD8 E7AA0054 */ swc1 $f10, 0x54($sp) .L7F030FDC: /* 065B0C 7F030FDC 8FA900C0 */ lw $t1, 0xc0($sp) @@ -18306,14 +18299,14 @@ glabel sub_GAME_7F030D70 /* 065C0C 7F0310DC 240C0001 */ li $t4, 1 /* 065C10 7F0310E0 AFAC008C */ sw $t4, 0x8c($sp) /* 065C14 7F0310E4 27A40068 */ addiu $a0, $sp, 0x68 -/* 065C18 7F0310E8 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 065C18 7F0310E8 0FC2CA2C */ jal getCollisionEdge_maybe /* 065C1C 7F0310EC 27A5005C */ addiu $a1, $sp, 0x5c /* 065C20 7F0310F0 27A40068 */ addiu $a0, $sp, 0x68 /* 065C24 7F0310F4 27A5005C */ addiu $a1, $sp, 0x5c /* 065C28 7F0310F8 0FC0C1D3 */ jal sub_GAME_7F03074C /* 065C2C 7F0310FC 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 065C30 7F031100 3C018008 */ lui $at, %hi(flt_CODE_bss_8007BA00) -/* 065C34 7F031104 C428BA00 */ lwc1 $f8, %lo(flt_CODE_bss_8007BA00)($at) +/* 065C30 7F031100 3C018008 */ lui $at, %hi(stanSavedColl_someMin) +/* 065C34 7F031104 C428BA00 */ lwc1 $f8, %lo(stanSavedColl_someMin)($at) /* 065C38 7F031108 E7A80050 */ swc1 $f8, 0x50($sp) .L7F03110C: /* 065C3C 7F03110C 8FAD0090 */ lw $t5, 0x90($sp) @@ -18434,7 +18427,7 @@ glabel sub_GAME_7F030D70 /* 065DF8 7F0312C8 AFAB0058 */ sw $t3, 0x58($sp) .L7F0312CC: /* 065DFC 7F0312CC 8FA400C8 */ lw $a0, 0xc8($sp) -/* 065E00 7F0312D0 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 065E00 7F0312D0 0FC2CA2C */ jal getCollisionEdge_maybe /* 065E04 7F0312D4 8FA500CC */ lw $a1, 0xcc($sp) /* 065E08 7F0312D8 8FA400C8 */ lw $a0, 0xc8($sp) /* 065E0C 7F0312DC 8FA500CC */ lw $a1, 0xcc($sp) @@ -20449,7 +20442,7 @@ glabel sub_GAME_7F032C78 /* 067800 7F032CD0 30A90008 */ andi $t1, $a1, 8 /* 067804 7F032CD4 1120001C */ beqz $t1, .L7F032D48 /* 067808 7F032CD8 00000000 */ nop -/* 06780C 7F032CDC 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 06780C 7F032CDC 0FC0CBE5 */ jal convertPadIf9000 /* 067810 7F032CE0 00C02825 */ move $a1, $a2 /* 067814 7F032CE4 28412710 */ slti $at, $v0, 0x2710 /* 067818 7F032CE8 1020000A */ beqz $at, .L7F032D14 @@ -20540,43 +20533,21 @@ glabel get_angle_between_actor_cur_player #endif - -#ifdef NONMATCHING -void sub_GAME_7F032DE4(void) { - +float distToBond3D(struct chrdata *guardData) +{ + struct prop *guardPosData; + struct prop *playerPosData; + float xDiff; + float yDiff; + float zDiff; + + guardPosData = guardData->posdata; + playerPosData = get_curplayer_positiondata(); + xDiff = (playerPosData->position).x - (guardPosData->position).x; + yDiff = (playerPosData->position).y - (guardPosData->position).y; + zDiff = (playerPosData->position).z - (guardPosData->position).z; + return sqrtf(xDiff * xDiff + yDiff * yDiff + zDiff * zDiff); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F032DE4 -/* 067914 7F032DE4 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 067918 7F032DE8 AFBF0014 */ sw $ra, 0x14($sp) -/* 06791C 7F032DEC 8C830018 */ lw $v1, 0x18($a0) -/* 067920 7F032DF0 0FC225E6 */ jal get_curplayer_positiondata -/* 067924 7F032DF4 AFA3001C */ sw $v1, 0x1c($sp) -/* 067928 7F032DF8 8FA3001C */ lw $v1, 0x1c($sp) -/* 06792C 7F032DFC C4440008 */ lwc1 $f4, 8($v0) -/* 067930 7F032E00 C448000C */ lwc1 $f8, 0xc($v0) -/* 067934 7F032E04 C4660008 */ lwc1 $f6, 8($v1) -/* 067938 7F032E08 C46A000C */ lwc1 $f10, 0xc($v1) -/* 06793C 7F032E0C C4500010 */ lwc1 $f16, 0x10($v0) -/* 067940 7F032E10 46062001 */ sub.s $f0, $f4, $f6 -/* 067944 7F032E14 C4720010 */ lwc1 $f18, 0x10($v1) -/* 067948 7F032E18 460A4081 */ sub.s $f2, $f8, $f10 -/* 06794C 7F032E1C 46000102 */ mul.s $f4, $f0, $f0 -/* 067950 7F032E20 46128381 */ sub.s $f14, $f16, $f18 -/* 067954 7F032E24 46021182 */ mul.s $f6, $f2, $f2 -/* 067958 7F032E28 46062200 */ add.s $f8, $f4, $f6 -/* 06795C 7F032E2C 460E7282 */ mul.s $f10, $f14, $f14 -/* 067960 7F032E30 0C007DF8 */ jal sqrtf -/* 067964 7F032E34 460A4300 */ add.s $f12, $f8, $f10 -/* 067968 7F032E38 8FBF0014 */ lw $ra, 0x14($sp) -/* 06796C 7F032E3C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 067970 7F032E40 03E00008 */ jr $ra -/* 067974 7F032E44 00000000 */ nop -) -#endif - #ifdef NONMATCHING @@ -20590,7 +20561,7 @@ glabel sub_GAME_7F032E48 /* 067978 7F032E48 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 06797C 7F032E4C AFBF0014 */ sw $ra, 0x14($sp) /* 067980 7F032E50 8C860018 */ lw $a2, 0x18($a0) -/* 067984 7F032E54 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 067984 7F032E54 0FC0CBE5 */ jal convertPadIf9000 /* 067988 7F032E58 AFA6001C */ sw $a2, 0x1c($sp) /* 06798C 7F032E5C 28412710 */ slti $at, $v0, 0x2710 /* 067990 7F032E60 1020000A */ beqz $at, .L7F032E8C @@ -20649,7 +20620,7 @@ GLOBAL_ASM( glabel check_if_room_for_preset_loaded /* 067A2C 7F032EFC 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 067A30 7F032F00 AFBF0014 */ sw $ra, 0x14($sp) -/* 067A34 7F032F04 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 067A34 7F032F04 0FC0CBE5 */ jal convertPadIf9000 /* 067A38 7F032F08 00000000 */ nop /* 067A3C 7F032F0C 28412710 */ slti $at, $v0, 0x2710 /* 067A40 7F032F10 1020000A */ beqz $at, .L7F032F3C @@ -20677,7 +20648,7 @@ glabel check_if_room_for_preset_loaded /* 067A90 7F032F60 00001025 */ move $v0, $zero /* 067A94 7F032F64 10800007 */ beqz $a0, .L7F032F84 /* 067A98 7F032F68 00000000 */ nop -/* 067A9C 7F032F6C 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 067A9C 7F032F6C 0FC2CBF6 */ jal getTileRoom /* 067AA0 7F032F70 00000000 */ nop /* 067AA4 7F032F74 0FC2D794 */ jal sub_GAME_7F0B5E50 /* 067AA8 7F032F78 00402025 */ move $a0, $v0 @@ -20693,25 +20664,14 @@ glabel check_if_room_for_preset_loaded #endif - -#ifdef NONMATCHING -void sub_GAME_7F032F94(void) { - +s32 convertPadIf9000(struct chrdata *guardData,s32 padNo) +{ + // Guard's target pad. + if (padNo == PAD_PRESET) { + padNo = (s32)guardData->padpreset1; + } + return padNo; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F032F94 -/* 067AC4 7F032F94 24012328 */ li $at, 9000 -/* 067AC8 7F032F98 14A10002 */ bne $a1, $at, .L7F032FA4 -/* 067ACC 7F032F9C 00000000 */ nop -/* 067AD0 7F032FA0 84850114 */ lh $a1, 0x114($a0) -.L7F032FA4: -/* 067AD4 7F032FA4 03E00008 */ jr $ra -/* 067AD8 7F032FA8 00A01025 */ move $v0, $a1 -) -#endif - #ifdef NONMATCHING @@ -20891,7 +20851,7 @@ glabel get_distance_between_actor_and_preset /* 067C94 7F033164 AFA50024 */ sw $a1, 0x24($sp) /* 067C98 7F033168 8FA40020 */ lw $a0, 0x20($sp) /* 067C9C 7F03316C 8FA50024 */ lw $a1, 0x24($sp) -/* 067CA0 7F033170 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 067CA0 7F033170 0FC0CBE5 */ jal convertPadIf9000 /* 067CA4 7F033174 AFA2001C */ sw $v0, 0x1c($sp) /* 067CA8 7F033178 28412710 */ slti $at, $v0, 0x2710 /* 067CAC 7F03317C 1020000A */ beqz $at, .L7F0331A8 @@ -21277,7 +21237,7 @@ glabel sub_GAME_7F0333F8 /* 067F68 7F033438 8FA40044 */ lw $a0, 0x44($sp) /* 067F6C 7F03343C 0FC1B2E6 */ jal getsuboffset /* 067F70 7F033440 27A50020 */ addiu $a1, $sp, 0x20 -/* 067F74 7F033444 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 067F74 7F033444 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 067F78 7F033448 00000000 */ nop /* 067F7C 7F03344C 00402025 */ move $a0, $v0 /* 067F80 7F033450 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -22205,7 +22165,7 @@ GLOBAL_ASM( glabel sub_GAME_7F033D5C /* 06888C 7F033D5C 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 068890 7F033D60 AFBF0014 */ sw $ra, 0x14($sp) -/* 068894 7F033D64 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 068894 7F033D64 0FC0CBE5 */ jal convertPadIf9000 /* 068898 7F033D68 AFA40018 */ sw $a0, 0x18($sp) /* 06889C 7F033D6C 8FAE0018 */ lw $t6, 0x18($sp) /* 0688A0 7F033D70 A5C20114 */ sh $v0, 0x114($t6) @@ -22234,7 +22194,7 @@ glabel sub_GAME_7F033D84 /* 0688C8 7F033D98 10400006 */ beqz $v0, .L7F033DB4 /* 0688CC 7F033D9C 8FA40020 */ lw $a0, 0x20($sp) /* 0688D0 7F033DA0 8FA50028 */ lw $a1, 0x28($sp) -/* 0688D4 7F033DA4 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 0688D4 7F033DA4 0FC0CBE5 */ jal convertPadIf9000 /* 0688D8 7F033DA8 AFA2001C */ sw $v0, 0x1c($sp) /* 0688DC 7F033DAC 8FA3001C */ lw $v1, 0x1c($sp) /* 0688E0 7F033DB0 A4620114 */ sh $v0, 0x114($v1) @@ -22280,7 +22240,7 @@ glabel sub_GAME_7F033DC4 /* 068948 7F033E18 1000001F */ b .L7F033E98 /* 06894C 7F033E1C 00001025 */ move $v0, $zero .L7F033E20: -/* 068950 7F033E20 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 068950 7F033E20 0FC2CA2C */ jal getCollisionEdge_maybe /* 068954 7F033E24 27A5003C */ addiu $a1, $sp, 0x3c /* 068958 7F033E28 8E060014 */ lw $a2, 0x14($s0) /* 06895C 7F033E2C 26230008 */ addiu $v1, $s1, 8 @@ -22336,7 +22296,7 @@ glabel sub_GAME_7F033EAC /* 0689E8 7F033EB8 240E0001 */ li $t6, 1 /* 0689EC 7F033EBC AFA50034 */ sw $a1, 0x34($sp) /* 0689F0 7F033EC0 AFAE002C */ sw $t6, 0x2c($sp) -/* 0689F4 7F033EC4 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 0689F4 7F033EC4 0FC2CBF6 */ jal getTileRoom /* 0689F8 7F033EC8 00A02025 */ move $a0, $a1 /* 0689FC 7F033ECC 0FC2D794 */ jal sub_GAME_7F0B5E50 /* 068A00 7F033ED0 00402025 */ move $a0, $v0 @@ -22346,7 +22306,7 @@ glabel sub_GAME_7F033EAC /* 068A10 7F033EE0 24050000 */ li $a1, 0 /* 068A14 7F033EE4 50400014 */ beql $v0, $zero, .L7F033F38 /* 068A18 7F033EE8 8FBF0014 */ lw $ra, 0x14($sp) -/* 068A1C 7F033EEC 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 068A1C 7F033EEC 0FC2CBF6 */ jal getTileRoom /* 068A20 7F033EF0 8FA40034 */ lw $a0, 0x34($sp) /* 068A24 7F033EF4 00402025 */ move $a0, $v0 /* 068A28 7F033EF8 0FC2CF03 */ jal sub_GAME_7F0B3C0C @@ -22549,7 +22509,7 @@ glabel actionblock_guard_constructor_BDBE /* 068C94 7F034164 AFA40040 */ sw $a0, 0x40($sp) /* 068C98 7F034168 AFA50044 */ sw $a1, 0x44($sp) /* 068C9C 7F03416C AFA60048 */ sw $a2, 0x48($sp) -/* 068CA0 7F034170 0FC07FF0 */ jal get_next_available_guardID +/* 068CA0 7F034170 0FC07FF0 */ jal chrGetNumFree /* 068CA4 7F034174 AFA7004C */ sw $a3, 0x4c($sp) /* 068CA8 7F034178 28410003 */ slti $at, $v0, 3 /* 068CAC 7F03417C 14200031 */ bnez $at, .L7F034244 @@ -22627,7 +22587,7 @@ glabel guard_constructor_BD /* 068D8C 7F03425C AFBF0024 */ sw $ra, 0x24($sp) /* 068D90 7F034260 AFA50034 */ sw $a1, 0x34($sp) /* 068D94 7F034264 AFA60038 */ sw $a2, 0x38($sp) -/* 068D98 7F034268 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 068D98 7F034268 0FC0CBE5 */ jal convertPadIf9000 /* 068D9C 7F03426C 00E02825 */ move $a1, $a3 /* 068DA0 7F034270 28412710 */ slti $at, $v0, 0x2710 /* 068DA4 7F034274 1020000A */ beqz $at, .L7F0342A0 @@ -22736,7 +22696,7 @@ glabel check_if_actorID_is_at_preset /* 068EC8 7F034398 AFA60028 */ sw $a2, 0x28($sp) /* 068ECC 7F03439C 8FA40020 */ lw $a0, 0x20($sp) /* 068ED0 7F0343A0 8FA50028 */ lw $a1, 0x28($sp) -/* 068ED4 7F0343A4 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 068ED4 7F0343A4 0FC0CBE5 */ jal convertPadIf9000 /* 068ED8 7F0343A8 AFA20018 */ sw $v0, 0x18($sp) /* 068EDC 7F0343AC 28412710 */ slti $at, $v0, 0x2710 /* 068EE0 7F0343B0 1020000A */ beqz $at, .L7F0343DC @@ -22801,7 +22761,7 @@ glabel check_if_actor_is_at_preset /* 068F8C 7F03445C AFA50024 */ sw $a1, 0x24($sp) /* 068F90 7F034460 AFA2001C */ sw $v0, 0x1c($sp) /* 068F94 7F034464 8FA40020 */ lw $a0, 0x20($sp) -/* 068F98 7F034468 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 068F98 7F034468 0FC0CBE5 */ jal convertPadIf9000 /* 068F9C 7F03446C 8FA50024 */ lw $a1, 0x24($sp) /* 068FA0 7F034470 28412710 */ slti $at, $v0, 0x2710 /* 068FA4 7F034474 1020000A */ beqz $at, .L7F0344A0 @@ -22883,7 +22843,7 @@ glabel removed_animation_routine_2B { s32 temp_ret; - arg1 = sub_GAME_7F032F94(); + arg1 = convertPadIf9000(); if (true_if_actor_dying_fading_limping_shot(arg0) != 0) { temp_ret = scan_position_data_table_for_normal_object_at_preset(arg1); @@ -22904,7 +22864,7 @@ GLOBAL_ASM( glabel sub_GAME_7F034514 /* 069044 7F034514 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 069048 7F034518 AFBF0014 */ sw $ra, 0x14($sp) -/* 06904C 7F03451C 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 06904C 7F03451C 0FC0CBE5 */ jal convertPadIf9000 /* 069050 7F034520 AFA40018 */ sw $a0, 0x18($sp) /* 069054 7F034524 AFA2001C */ sw $v0, 0x1c($sp) /* 069058 7F034528 0FC0A896 */ jal true_if_actor_dying_fading_limping_shot @@ -22950,7 +22910,7 @@ glabel sub_GAME_7F034514 { return 0; } - if (sub_GAME_7F032DE4(arg0) < 10.0f) + if (distToBond3D(arg0) < 10.0f) { return 0; } @@ -23022,7 +22982,7 @@ glabel actor_draws_throws_grenade_at_player_if_possible /* 0690DC 7F0345AC 1000004E */ b .L7F0346E8 /* 0690E0 7F0345B0 00001025 */ move $v0, $zero .L7F0345B4: -/* 0690E4 7F0345B4 0FC0CB79 */ jal sub_GAME_7F032DE4 +/* 0690E4 7F0345B4 0FC0CB79 */ jal distToBond3D /* 0690E8 7F0345B8 02002025 */ move $a0, $s0 /* 0690EC 7F0345BC 3C014120 */ li $at, 0x41200000 # 10.000000 /* 0690F0 7F0345C0 44812000 */ mtc1 $at, $f4 @@ -23132,7 +23092,7 @@ glabel actor_draws_throws_grenade_at_player_if_possible temp_a0 = temp_ret->unk14; sp1C = temp_ret; set_obj_instance_controller_scale(temp_a0, temp_a0->unk14); - sub_GAME_7F03A5A4(sp1C->unk10, arg0->unk18); + attachNewChild(sp1C->unk10, arg0->unk18); sp1C->unk82 = (u16)0xb4; sub_GAME_7F04BFD0(sp1C->unk10, 1); arg0->unk12 = (s16) (arg0->unk12 | 1); @@ -23165,7 +23125,7 @@ glabel actor_drops_itemtype_setting_timer /* 069270 7F034740 8FA3001C */ lw $v1, 0x1c($sp) /* 069274 7F034744 8FB80020 */ lw $t8, 0x20($sp) /* 069278 7F034748 8C640010 */ lw $a0, 0x10($v1) -/* 06927C 7F03474C 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 06927C 7F03474C 0FC0E969 */ jal attachNewChild /* 069280 7F034750 8F050018 */ lw $a1, 0x18($t8) /* 069284 7F034754 8FA3001C */ lw $v1, 0x1c($sp) /* 069288 7F034758 241900B4 */ li $t9, 180 diff --git a/src/game/chrai.c b/src/game/chrai.c index 7f4662a..7bc93f4 100644 --- a/src/game/chrai.c +++ b/src/game/chrai.c @@ -140,7 +140,7 @@ char dword_CODE_bss_80075C10[0x78]; char dword_CODE_bss_80075C88[0x78]; //CODE.bss:80075D00 -void * ptr_setup_path_tbl; +struct Pad * ptr_setup_path_tbl; //CODE.bss:80075D04 void * ptr_setup_path_link; //CODE.bss:80075D08 @@ -4023,7 +4023,7 @@ action42_If_Current_Guard_On_Screen_In_Loaded_Room_RVL_2: /* 06B0E0 7F0365B0 26310002 */ addiu $s1, $s1, 2 action43_If_Guard_In_A_Room_Currently_Loaded_RVL_2: /* 06B0E4 7F0365B4 8EEC0018 */ lw $t4, 0x18($s7) -/* 06B0E8 7F0365B8 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 06B0E8 7F0365B8 0FC2CBF6 */ jal getTileRoom /* 06B0EC 7F0365BC 8D840014 */ lw $a0, 0x14($t4) /* 06B0F0 7F0365C0 0FC2D794 */ jal sub_GAME_7F0B5E50 /* 06B0F4 7F0365C4 00402025 */ move $a0, $v0 @@ -4227,7 +4227,7 @@ action4B_RVL_If_In_Proximity_Of_Bond_4: /* 06B3BC 7F03688C 00000000 */ nop /* 06B3C0 7F036890 468042A0 */ cvt.s.w $f10, $f8 /* 06B3C4 7F036894 46185402 */ mul.s $f16, $f10, $f24 -/* 06B3C8 7F036898 0FC0CB79 */ jal sub_GAME_7F032DE4 +/* 06B3C8 7F036898 0FC0CB79 */ jal distToBond3D /* 06B3CC 7F03689C E7B005FC */ swc1 $f16, 0x5fc($sp) /* 06B3D0 7F0368A0 C7B205FC */ lwc1 $f18, 0x5fc($sp) /* 06B3D4 7F0368A4 02C02025 */ move $a0, $s6 @@ -4255,7 +4255,7 @@ action4C_RVL_If_Not_In_Proximity_Of_Bond_4: /* 06B424 7F0368F4 00000000 */ nop /* 06B428 7F0368F8 468021A0 */ cvt.s.w $f6, $f4 /* 06B42C 7F0368FC 46183202 */ mul.s $f8, $f6, $f24 -/* 06B430 7F036900 0FC0CB79 */ jal sub_GAME_7F032DE4 +/* 06B430 7F036900 0FC0CB79 */ jal distToBond3D /* 06B434 7F036904 E7A805F4 */ swc1 $f8, 0x5f4($sp) /* 06B438 7F036908 C7AA05F4 */ lwc1 $f10, 0x5f4($sp) /* 06B43C 7F03690C 02C02025 */ move $a0, $s6 @@ -4932,7 +4932,7 @@ action64_Type_16_Object_Equipped_On_Guard_3: /* 06BDB4 7F037284 26520003 */ addiu $s2, $s2, 3 /* 06BDB8 7F037288 8E040010 */ lw $a0, 0x10($s0) .L7F03728C: -/* 06BDBC 7F03728C 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 06BDBC 7F03728C 0FC0E969 */ jal attachNewChild /* 06BDC0 7F037290 8E650018 */ lw $a1, 0x18($s3) .L7F037294: /* 06BDC4 7F037294 26520003 */ addiu $s2, $s2, 3 @@ -4994,7 +4994,7 @@ action65_Object_Moved_To_Preset_4: /* 06BE94 7F037364 C60A0010 */ lwc1 $f10, 0x10($s0) /* 06BE98 7F037368 E7AA0020 */ swc1 $f10, 0x20($sp) /* 06BE9C 7F03736C C6100014 */ lwc1 $f16, 0x14($s0) -/* 06BEA0 7F037370 0FC16642 */ jal sub_GAME_7F059908 +/* 06BEA0 7F037370 0FC16642 */ jal matrix_4x4_7F059908 /* 06BEA4 7F037374 E7B00024 */ swc1 $f16, 0x24($sp) /* 06BEA8 7F037378 8E620014 */ lw $v0, 0x14($s3) /* 06BEAC 7F03737C 27A504B8 */ addiu $a1, $sp, 0x4b8 @@ -5881,7 +5881,7 @@ action8F_Set_Guard_Health_3: /* 06CAF8 7F037FC8 468054A0 */ cvt.s.w $f18, $f10 /* 06CAFC 7F037FCC 46069002 */ mul.s $f0, $f18, $f6 /* 06CB00 7F037FD0 44050000 */ mfc1 $a1, $f0 -/* 06CB04 7F037FD4 0FC08006 */ jal sub_GAME_7F020018 +/* 06CB04 7F037FD4 0FC08006 */ jal chrSetMaxDamage /* 06CB08 7F037FD8 00000000 */ nop /* 06CB0C 7F037FDC 26520003 */ addiu $s2, $s2, 3 /* 06CB10 7F037FE0 1000F56A */ b GetByteS1_ParseCommandByte_SwitchCase @@ -5898,7 +5898,7 @@ action90_Set_Guard_Armor_Amount_3: /* 06CB38 7F038008 46808220 */ cvt.s.w $f8, $f16 /* 06CB3C 7F03800C 46044002 */ mul.s $f0, $f8, $f4 /* 06CB40 7F038010 44050000 */ mfc1 $a1, $f0 -/* 06CB44 7F038014 0FC08015 */ jal sub_GAME_7F020054 +/* 06CB44 7F038014 0FC08015 */ jal chrAddHealth /* 06CB48 7F038018 00000000 */ nop /* 06CB4C 7F03801C 26520003 */ addiu $s2, $s2, 3 /* 06CB50 7F038020 1000F55A */ b GetByteS1_ParseCommandByte_SwitchCase @@ -7560,7 +7560,7 @@ actionD9_GuardIDMovedToPresetReturnLoopIfSuccessful_5: /* 06E2EC 7F0397BC 1040005E */ beqz $v0, .L7F039938 /* 06E2F0 7F0397C0 00408025 */ move $s0, $v0 /* 06E2F4 7F0397C4 02E02025 */ move $a0, $s7 -/* 06E2F8 7F0397C8 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 06E2F8 7F0397C8 0FC0CBE5 */ jal convertPadIf9000 /* 06E2FC 7F0397CC 02602825 */ move $a1, $s3 /* 06E300 7F0397D0 28412710 */ slti $at, $v0, 0x2710 /* 06E304 7F0397D4 1020000A */ beqz $at, .L7F039800 @@ -7676,11 +7676,11 @@ actionDA_Fade_Out_From_Cut_Scene_1: /* 06E4A4 7F039974 11A10008 */ beq $t5, $at, .L7F039998 /* 06E4A8 7F039978 00002825 */ move $a1, $zero /* 06E4AC 7F03997C 4407A000 */ mfc1 $a3, $f20 -/* 06E4B0 7F039980 0FC201EC */ jal set_rgba_tint +/* 06E4B0 7F039980 0FC201EC */ jal currentPlayerSetFadeColour /* 06E4B4 7F039984 00003025 */ move $a2, $zero /* 06E4B8 7F039988 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 06E4BC 7F03998C 44817000 */ mtc1 $at, $f14 -/* 06E4C0 7F039990 0FC20216 */ jal fade_to_over_seconds +/* 06E4C0 7F039990 0FC20216 */ jal currentPlayerSetFadeFrac /* 06E4C4 7F039994 4600B306 */ mov.s $f12, $f22 .L7F039998: /* 06E4C8 7F039998 26520001 */ addiu $s2, $s2, 1 @@ -7694,10 +7694,10 @@ actionDB_Fade_In_From_Black_Reset_DA_1: /* 06E4E4 7F0399B4 11C10007 */ beq $t6, $at, .L7F0399D4 /* 06E4E8 7F0399B8 00002825 */ move $a1, $zero /* 06E4EC 7F0399BC 00003025 */ move $a2, $zero -/* 06E4F0 7F0399C0 0FC201EC */ jal set_rgba_tint +/* 06E4F0 7F0399C0 0FC201EC */ jal currentPlayerSetFadeColour /* 06E4F4 7F0399C4 3C073F80 */ li $a3, 0x3F800000 # 1.000000 /* 06E4F8 7F0399C8 4600B306 */ mov.s $f12, $f22 -/* 06E4FC 7F0399CC 0FC20216 */ jal fade_to_over_seconds +/* 06E4FC 7F0399CC 0FC20216 */ jal currentPlayerSetFadeFrac /* 06E500 7F0399D0 4600A386 */ mov.s $f14, $f20 .L7F0399D4: /* 06E504 7F0399D4 26520001 */ addiu $s2, $s2, 1 @@ -7812,7 +7812,7 @@ actionE0_Guard_ID_Draws_Weapon_num_3: /* 06E680 7F039B50 1000EE8E */ b GetByteS1_ParseCommandByte_SwitchCase /* 06E684 7F039B54 26310003 */ addiu $s1, $s1, 3 actionE1_If_Fewer_than_This_Many_Players_Playing_RVL_3: -/* 06E688 7F039B58 0FC26919 */ jal get_num_players +/* 06E688 7F039B58 0FC26919 */ jal getPlayerCount /* 06E68C 7F039B5C 00000000 */ nop /* 06E690 7F039B60 822A0001 */ lb $t2, 1($s1) /* 06E694 7F039B64 02C02025 */ move $a0, $s6 @@ -9890,7 +9890,7 @@ action42_If_Current_Guard_On_Screen_In_Loaded_Room_RVL_2: /* 06B0E0 7F0365B0 26310002 */ addiu $s1, $s1, 2 action43_If_Guard_In_A_Room_Currently_Loaded_RVL_2: /* 06B0E4 7F0365B4 8EEC0018 */ lw $t4, 0x18($s7) -/* 06B0E8 7F0365B8 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 06B0E8 7F0365B8 0FC2CBF6 */ jal getTileRoom /* 06B0EC 7F0365BC 8D840014 */ lw $a0, 0x14($t4) /* 06B0F0 7F0365C0 0FC2D794 */ jal sub_GAME_7F0B5E50 /* 06B0F4 7F0365C4 00402025 */ move $a0, $v0 @@ -10094,7 +10094,7 @@ action4B_RVL_If_In_Proximity_Of_Bond_4: /* 06B3BC 7F03688C 00000000 */ nop /* 06B3C0 7F036890 468042A0 */ cvt.s.w $f10, $f8 /* 06B3C4 7F036894 46185402 */ mul.s $f16, $f10, $f24 -/* 06B3C8 7F036898 0FC0CB79 */ jal sub_GAME_7F032DE4 +/* 06B3C8 7F036898 0FC0CB79 */ jal distToBond3D /* 06B3CC 7F03689C E7B005FC */ swc1 $f16, 0x5fc($sp) /* 06B3D0 7F0368A0 C7B205FC */ lwc1 $f18, 0x5fc($sp) /* 06B3D4 7F0368A4 02C02025 */ move $a0, $s6 @@ -10122,7 +10122,7 @@ action4C_RVL_If_Not_In_Proximity_Of_Bond_4: /* 06B424 7F0368F4 00000000 */ nop /* 06B428 7F0368F8 468021A0 */ cvt.s.w $f6, $f4 /* 06B42C 7F0368FC 46183202 */ mul.s $f8, $f6, $f24 -/* 06B430 7F036900 0FC0CB79 */ jal sub_GAME_7F032DE4 +/* 06B430 7F036900 0FC0CB79 */ jal distToBond3D /* 06B434 7F036904 E7A805F4 */ swc1 $f8, 0x5f4($sp) /* 06B438 7F036908 C7AA05F4 */ lwc1 $f10, 0x5f4($sp) /* 06B43C 7F03690C 02C02025 */ move $a0, $s6 @@ -10799,7 +10799,7 @@ action64_Type_16_Object_Equipped_On_Guard_3: /* 06BDB4 7F037284 26520003 */ addiu $s2, $s2, 3 /* 06BDB8 7F037288 8E040010 */ lw $a0, 0x10($s0) .L7F03728C: -/* 06BDBC 7F03728C 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 06BDBC 7F03728C 0FC0E969 */ jal attachNewChild /* 06BDC0 7F037290 8E650018 */ lw $a1, 0x18($s3) .L7F037294: /* 06BDC4 7F037294 26520003 */ addiu $s2, $s2, 3 @@ -10861,7 +10861,7 @@ action65_Object_Moved_To_Preset_4: /* 06BE94 7F037364 C60A0010 */ lwc1 $f10, 0x10($s0) /* 06BE98 7F037368 E7AA0020 */ swc1 $f10, 0x20($sp) /* 06BE9C 7F03736C C6100014 */ lwc1 $f16, 0x14($s0) -/* 06BEA0 7F037370 0FC16642 */ jal sub_GAME_7F059908 +/* 06BEA0 7F037370 0FC16642 */ jal matrix_4x4_7F059908 /* 06BEA4 7F037374 E7B00024 */ swc1 $f16, 0x24($sp) /* 06BEA8 7F037378 8E620014 */ lw $v0, 0x14($s3) /* 06BEAC 7F03737C 27A504B8 */ addiu $a1, $sp, 0x4b8 @@ -11748,7 +11748,7 @@ action8F_Set_Guard_Health_3: /* 06CAF8 7F037FC8 468054A0 */ cvt.s.w $f18, $f10 /* 06CAFC 7F037FCC 46069002 */ mul.s $f0, $f18, $f6 /* 06CB00 7F037FD0 44050000 */ mfc1 $a1, $f0 -/* 06CB04 7F037FD4 0FC08006 */ jal sub_GAME_7F020018 +/* 06CB04 7F037FD4 0FC08006 */ jal chrSetMaxDamage /* 06CB08 7F037FD8 00000000 */ nop /* 06CB0C 7F037FDC 26520003 */ addiu $s2, $s2, 3 /* 06CB10 7F037FE0 1000F56A */ b GetByteS1_ParseCommandByte_SwitchCase @@ -11765,7 +11765,7 @@ action90_Set_Guard_Armor_Amount_3: /* 06CB38 7F038008 46808220 */ cvt.s.w $f8, $f16 /* 06CB3C 7F03800C 46044002 */ mul.s $f0, $f8, $f4 /* 06CB40 7F038010 44050000 */ mfc1 $a1, $f0 -/* 06CB44 7F038014 0FC08015 */ jal sub_GAME_7F020054 +/* 06CB44 7F038014 0FC08015 */ jal chrAddHealth /* 06CB48 7F038018 00000000 */ nop /* 06CB4C 7F03801C 26520003 */ addiu $s2, $s2, 3 /* 06CB50 7F038020 1000F55A */ b GetByteS1_ParseCommandByte_SwitchCase @@ -13427,7 +13427,7 @@ actionD9_GuardIDMovedToPresetReturnLoopIfSuccessful_5: /* 06E2EC 7F0397BC 1040005E */ beqz $v0, .L7F039938 /* 06E2F0 7F0397C0 00408025 */ move $s0, $v0 /* 06E2F4 7F0397C4 02E02025 */ move $a0, $s7 -/* 06E2F8 7F0397C8 0FC0CBE5 */ jal sub_GAME_7F032F94 +/* 06E2F8 7F0397C8 0FC0CBE5 */ jal convertPadIf9000 /* 06E2FC 7F0397CC 02602825 */ move $a1, $s3 /* 06E300 7F0397D0 28412710 */ slti $at, $v0, 0x2710 /* 06E304 7F0397D4 1020000A */ beqz $at, .L7F039800 @@ -13543,11 +13543,11 @@ actionDA_Fade_Out_From_Cut_Scene_1: /* 06E4A4 7F039974 11A10008 */ beq $t5, $at, .L7F039998 /* 06E4A8 7F039978 00002825 */ move $a1, $zero /* 06E4AC 7F03997C 4407A000 */ mfc1 $a3, $f20 -/* 06E4B0 7F039980 0FC201EC */ jal set_rgba_tint +/* 06E4B0 7F039980 0FC201EC */ jal currentPlayerSetFadeColour /* 06E4B4 7F039984 00003025 */ move $a2, $zero /* 06E4B8 7F039988 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 06E4BC 7F03998C 44817000 */ mtc1 $at, $f14 -/* 06E4C0 7F039990 0FC20216 */ jal fade_to_over_seconds +/* 06E4C0 7F039990 0FC20216 */ jal currentPlayerSetFadeFrac /* 06E4C4 7F039994 4600B306 */ mov.s $f12, $f22 .L7F039998: /* 06E4C8 7F039998 26520001 */ addiu $s2, $s2, 1 @@ -13561,10 +13561,10 @@ actionDB_Fade_In_From_Black_Reset_DA_1: /* 06E4E4 7F0399B4 11C10007 */ beq $t6, $at, .L7F0399D4 /* 06E4E8 7F0399B8 00002825 */ move $a1, $zero /* 06E4EC 7F0399BC 00003025 */ move $a2, $zero -/* 06E4F0 7F0399C0 0FC201EC */ jal set_rgba_tint +/* 06E4F0 7F0399C0 0FC201EC */ jal currentPlayerSetFadeColour /* 06E4F4 7F0399C4 3C073F80 */ li $a3, 0x3F800000 # 1.000000 /* 06E4F8 7F0399C8 4600B306 */ mov.s $f12, $f22 -/* 06E4FC 7F0399CC 0FC20216 */ jal fade_to_over_seconds +/* 06E4FC 7F0399CC 0FC20216 */ jal currentPlayerSetFadeFrac /* 06E500 7F0399D0 4600A386 */ mov.s $f14, $f20 .L7F0399D4: /* 06E504 7F0399D4 26520001 */ addiu $s2, $s2, 1 @@ -13679,7 +13679,7 @@ actionE0_Guard_ID_Draws_Weapon_num_3: /* 06E680 7F039B50 1000EE8E */ b GetByteS1_ParseCommandByte_SwitchCase /* 06E684 7F039B54 26310003 */ addiu $s1, $s1, 3 actionE1_If_Fewer_than_This_Many_Players_Playing_RVL_3: -/* 06E688 7F039B58 0FC26919 */ jal get_num_players +/* 06E688 7F039B58 0FC26919 */ jal getPlayerCount /* 06E68C 7F039B5C 00000000 */ nop /* 06E690 7F039B60 822A0001 */ lb $t2, 1($s1) /* 06E694 7F039B64 02C02025 */ move $a0, $s6 @@ -14540,28 +14540,22 @@ glabel sub_GAME_7F03A538 -#ifdef NONMATCHING -void sub_GAME_7F03A5A4(void) { +void attachNewChild(struct prop *newChild,struct prop *host) +{ + newChild->host = host; + // Link the newChild into its siblings + if (host->child) { + host->child->prevSibling = newChild; + } + newChild->nextSibling = host->child; + newChild->prevSibling = 0x0; + + newChild->standTile = 0x0; + host->child = newChild; + + return; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03A5A4 -/* 06F0D4 7F03A5A4 AC85001C */ sw $a1, 0x1c($a0) -/* 06F0D8 7F03A5A8 8CA20020 */ lw $v0, 0x20($a1) -/* 06F0DC 7F03A5AC 50400004 */ beql $v0, $zero, .L7F03A5C0 -/* 06F0E0 7F03A5B0 AC820024 */ sw $v0, 0x24($a0) -/* 06F0E4 7F03A5B4 AC440028 */ sw $a0, 0x28($v0) -/* 06F0E8 7F03A5B8 8CA20020 */ lw $v0, 0x20($a1) -/* 06F0EC 7F03A5BC AC820024 */ sw $v0, 0x24($a0) -.L7F03A5C0: -/* 06F0F0 7F03A5C0 AC800028 */ sw $zero, 0x28($a0) -/* 06F0F4 7F03A5C4 AC800014 */ sw $zero, 0x14($a0) -/* 06F0F8 7F03A5C8 03E00008 */ jr $ra -/* 06F0FC 7F03A5CC ACA40020 */ sw $a0, 0x20($a1) -) -#endif @@ -15549,7 +15543,7 @@ glabel sub_GAME_7F03B15C /* 06FD54 7F03B224 C7AA019C */ lwc1 $f10, 0x19c($sp) /* 06FD58 7F03B228 E7A601B0 */ swc1 $f6, 0x1b0($sp) /* 06FD5C 7F03B22C E7A801B4 */ swc1 $f8, 0x1b4($sp) -/* 06FD60 7F03B230 0FC1E111 */ jal sub_GAME_7F078444 +/* 06FD60 7F03B230 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 06FD64 7F03B234 E7AA01B8 */ swc1 $f10, 0x1b8($sp) /* 06FD68 7F03B238 00402025 */ move $a0, $v0 /* 06FD6C 7F03B23C 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -15559,7 +15553,7 @@ glabel sub_GAME_7F03B15C /* 06FD7C 7F03B24C C7A401A8 */ lwc1 $f4, 0x1a8($sp) /* 06FD80 7F03B250 E7B001BC */ swc1 $f16, 0x1bc($sp) /* 06FD84 7F03B254 E7B201C0 */ swc1 $f18, 0x1c0($sp) -/* 06FD88 7F03B258 0FC1E111 */ jal sub_GAME_7F078444 +/* 06FD88 7F03B258 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 06FD8C 7F03B25C E7A401C4 */ swc1 $f4, 0x1c4($sp) /* 06FD90 7F03B260 00402025 */ move $a0, $v0 /* 06FD94 7F03B264 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -15645,7 +15639,7 @@ glabel sub_GAME_7F03B15C /* 06FECC 7F03B39C C6080008 */ lwc1 $f8, 8($s0) /* 06FED0 7F03B3A0 AFA4055C */ sw $a0, 0x55c($sp) /* 06FED4 7F03B3A4 46004402 */ mul.s $f16, $f8, $f0 -/* 06FED8 7F03B3A8 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 06FED8 7F03B3A8 0FC2CBF6 */ jal getTileRoom /* 06FEDC 7F03B3AC E7B00084 */ swc1 $f16, 0x84($sp) /* 06FEE0 7F03B3B0 00408825 */ move $s1, $v0 /* 06FEE4 7F03B3B4 27A2018C */ addiu $v0, $sp, 0x18c @@ -15678,7 +15672,7 @@ glabel sub_GAME_7F03B15C /* 06FF48 7F03B418 00000000 */ nop /* 06FF4C 7F03B41C 0FC225E6 */ jal get_curplayer_positiondata /* 06FF50 7F03B420 00000000 */ nop -/* 06FF54 7F03B424 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 06FF54 7F03B424 0FC2CBF6 */ jal getTileRoom /* 06FF58 7F03B428 8C440014 */ lw $a0, 0x14($v0) /* 06FF5C 7F03B42C 27AC007C */ addiu $t4, $sp, 0x7c /* 06FF60 7F03B430 27AD008C */ addiu $t5, $sp, 0x8c @@ -15696,7 +15690,7 @@ glabel sub_GAME_7F03B15C .L7F03B460: /* 06FF90 7F03B460 0FC225E6 */ jal get_curplayer_positiondata /* 06FF94 7F03B464 00000000 */ nop -/* 06FF98 7F03B468 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 06FF98 7F03B468 0FC2CBF6 */ jal getTileRoom /* 06FF9C 7F03B46C 8C440014 */ lw $a0, 0x14($v0) /* 06FFA0 7F03B470 27AF007C */ addiu $t7, $sp, 0x7c /* 06FFA4 7F03B474 27B8008C */ addiu $t8, $sp, 0x8c @@ -15774,7 +15768,7 @@ glabel sub_GAME_7F03B15C /* 0700B0 7F03B580 5300000B */ beql $t8, $zero, .L7F03B5B0 /* 0700B4 7F03B584 8FB901AC */ lw $t9, 0x1ac($sp) .L7F03B588: -/* 0700B8 7F03B588 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0700B8 7F03B588 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0700BC 7F03B58C 00000000 */ nop /* 0700C0 7F03B590 00402025 */ move $a0, $v0 /* 0700C4 7F03B594 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -16528,7 +16522,7 @@ glabel sub_GAME_7F03BDEC /* 070B14 7F03BFE4 8E090014 */ lw $t1, 0x14($s0) /* 070B18 7F03BFE8 15090024 */ bne $t0, $t1, .L7F03C07C /* 070B1C 7F03BFEC 00000000 */ nop -/* 070B20 7F03BFF0 0FC1E67C */ jal sub_GAME_7F0799F0 +/* 070B20 7F03BFF0 0FC1E67C */ jal currentPlayerGetCrouchPos /* 070B24 7F03BFF4 2411000F */ li $s1, 15 /* 070B28 7F03BFF8 24010001 */ li $at, 1 /* 070B2C 7F03BFFC 14410003 */ bne $v0, $at, .L7F03C00C @@ -16536,7 +16530,7 @@ glabel sub_GAME_7F03BDEC /* 070B34 7F03C004 10000006 */ b .L7F03C020 /* 070B38 7F03C008 241100C8 */ li $s1, 200 .L7F03C00C: -/* 070B3C 7F03C00C 0FC1E67C */ jal sub_GAME_7F0799F0 +/* 070B3C 7F03C00C 0FC1E67C */ jal currentPlayerGetCrouchPos /* 070B40 7F03C010 00000000 */ nop /* 070B44 7F03C014 54400003 */ bnezl $v0, .L7F03C024 /* 070B48 7F03C018 27A40084 */ addiu $a0, $sp, 0x84 @@ -16547,7 +16541,7 @@ glabel sub_GAME_7F03BDEC /* 070B54 7F03C024 02A02825 */ move $a1, $s5 /* 070B58 7F03C028 0FC1A073 */ jal sub_GAME_7F0681CC /* 070B5C 7F03C02C 8FA600C8 */ lw $a2, 0xc8($sp) -/* 070B60 7F03C030 0FC1E111 */ jal sub_GAME_7F078444 +/* 070B60 7F03C030 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 070B64 7F03C034 00000000 */ nop /* 070B68 7F03C038 00402025 */ move $a0, $v0 /* 070B6C 7F03C03C 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -16847,7 +16841,7 @@ glabel sub_GAME_7F03C2BC /* 070F04 7F03C3D4 0FC225E6 */ jal get_curplayer_positiondata /* 070F08 7F03C3D8 00000000 */ nop /* 070F0C 7F03C3DC 02002025 */ move $a0, $s0 -/* 070F10 7F03C3E0 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 070F10 7F03C3E0 0FC0E969 */ jal attachNewChild /* 070F14 7F03C3E4 00402825 */ move $a1, $v0 /* 070F18 7F03C3E8 8FBF001C */ lw $ra, 0x1c($sp) .L7F03C3EC: @@ -17025,7 +17019,7 @@ glabel sub_GAME_7F03C574 /* 0710B4 7F03C584 AFB30028 */ sw $s3, 0x28($sp) /* 0710B8 7F03C588 AFB10020 */ sw $s1, 0x20($sp) /* 0710BC 7F03C58C AFB0001C */ sw $s0, 0x1c($sp) -/* 0710C0 7F03C590 0FC26919 */ jal get_num_players +/* 0710C0 7F03C590 0FC26919 */ jal getPlayerCount /* 0710C4 7F03C594 F7B40010 */ sdc1 $f20, 0x10($sp) /* 0710C8 7F03C598 240E0001 */ li $t6, 1 /* 0710CC 7F03C59C 00409825 */ move $s3, $v0 @@ -17033,9 +17027,9 @@ glabel sub_GAME_7F03C574 /* 0710D4 7F03C5A4 1840001F */ blez $v0, .L7F03C624 /* 0710D8 7F03C5A8 00008025 */ move $s0, $zero /* 0710DC 7F03C5AC 3C0143C8 */ li $at, 0x43C80000 # 400.000000 -/* 0710E0 7F03C5B0 3C118008 */ lui $s1, %hi(ptr_BONDdata_p1) +/* 0710E0 7F03C5B0 3C118008 */ lui $s1, %hi(players) /* 0710E4 7F03C5B4 4481A000 */ mtc1 $at, $f20 -/* 0710E8 7F03C5B8 26319EE0 */ addiu $s1, %lo(ptr_BONDdata_p1) # addiu $s1, $s1, -0x6120 +/* 0710E8 7F03C5B8 26319EE0 */ addiu $s1, %lo(players) # addiu $s1, $s1, -0x6120 .L7F03C5BC: /* 0710EC 7F03C5BC 8E2F0000 */ lw $t7, ($s1) /* 0710F0 7F03C5C0 C6460008 */ lwc1 $f6, 8($s2) @@ -17219,7 +17213,7 @@ glabel handle_mp_respawn_and_some_things /* 071354 7F03C824 AFA20028 */ sw $v0, 0x28($sp) /* 071358 7F03C828 8FA30028 */ lw $v1, 0x28($sp) /* 07135C 7F03C82C 8E040010 */ lw $a0, 0x10($s0) -/* 071360 7F03C830 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 071360 7F03C830 0FC0E969 */ jal attachNewChild /* 071364 7F03C834 8C650010 */ lw $a1, 0x10($v1) /* 071368 7F03C838 1000001C */ b .L7F03C8AC /* 07136C 7F03C83C 24130001 */ li $s3, 1 @@ -17305,23 +17299,23 @@ glabel handle_mp_respawn_and_some_things /* 07147C 7F03C94C 0FC26C57 */ jal sub_GAME_7F09B15C /* 071480 7F03C950 02202025 */ move $a0, $s1 /* 071484 7F03C954 00024080 */ sll $t0, $v0, 2 -/* 071488 7F03C958 3C048008 */ lui $a0, %hi(ptr_BONDdata_p1) +/* 071488 7F03C958 3C048008 */ lui $a0, %hi(players) /* 07148C 7F03C95C 00882021 */ addu $a0, $a0, $t0 -/* 071490 7F03C960 8C849EE0 */ lw $a0, %lo(ptr_BONDdata_p1)($a0) +/* 071490 7F03C960 8C849EE0 */ lw $a0, %lo(players)($a0) /* 071494 7F03C964 0FC18AC0 */ jal sub_GAME_7F062B00 /* 071498 7F03C968 24840A54 */ addiu $a0, $a0, 0xa54 /* 07149C 7F03C96C 0FC26C57 */ jal sub_GAME_7F09B15C /* 0714A0 7F03C970 02202025 */ move $a0, $s1 /* 0714A4 7F03C974 00024880 */ sll $t1, $v0, 2 -/* 0714A8 7F03C978 3C048008 */ lui $a0, %hi(ptr_BONDdata_p1) +/* 0714A8 7F03C978 3C048008 */ lui $a0, %hi(players) /* 0714AC 7F03C97C 00892021 */ addu $a0, $a0, $t1 -/* 0714B0 7F03C980 8C849EE0 */ lw $a0, %lo(ptr_BONDdata_p1)($a0) +/* 0714B0 7F03C980 8C849EE0 */ lw $a0, %lo(players)($a0) /* 0714B4 7F03C984 0FC18AC0 */ jal sub_GAME_7F062B00 /* 0714B8 7F03C988 24840DFC */ addiu $a0, $a0, 0xdfc /* 0714BC 7F03C98C 8E2A0004 */ lw $t2, 4($s1) /* 0714C0 7F03C990 5140000C */ beql $t2, $zero, .L7F03C9C4 /* 0714C4 7F03C994 24010005 */ li $at, 5 -/* 0714C8 7F03C998 0FC26919 */ jal get_num_players +/* 0714C8 7F03C998 0FC26919 */ jal getPlayerCount /* 0714CC 7F03C99C 00000000 */ nop /* 0714D0 7F03C9A0 28410002 */ slti $at, $v0, 2 /* 0714D4 7F03C9A4 54200007 */ bnezl $at, .L7F03C9C4 @@ -17904,10 +17898,10 @@ glabel sub_GAME_7F03CFE8 /* 071B4C 7F03D01C 0FC26C57 */ jal sub_GAME_7F09B15C /* 071B50 7F03D020 00000000 */ nop /* 071B54 7F03D024 00027080 */ sll $t6, $v0, 2 -/* 071B58 7F03D028 3C048008 */ lui $a0, %hi(ptr_BONDdata_p1) +/* 071B58 7F03D028 3C048008 */ lui $a0, %hi(players) /* 071B5C 7F03D02C 008E2021 */ addu $a0, $a0, $t6 /* 071B60 7F03D030 0FC225DE */ jal sub_GAME_7F089778 -/* 071B64 7F03D034 8C849EE0 */ lw $a0, %lo(ptr_BONDdata_p1)($a0) +/* 071B64 7F03D034 8C849EE0 */ lw $a0, %lo(players)($a0) /* 071B68 7F03D038 10000004 */ b .L7F03D04C /* 071B6C 7F03D03C 8FBF0014 */ lw $ra, 0x14($sp) /* 071B70 7F03D040 44800000 */ mtc1 $zero, $f0 @@ -18199,7 +18193,7 @@ glabel sub_GAME_7F03D188 /* 071EBC 7F03D38C 44814000 */ mtc1 $at, $f8 /* 071EC0 7F03D390 00000000 */ nop /* 071EC4 7F03D394 46083282 */ mul.s $f10, $f6, $f8 -/* 071EC8 7F03D398 0FC26919 */ jal get_num_players +/* 071EC8 7F03D398 0FC26919 */ jal getPlayerCount /* 071ECC 7F03D39C E7AA0058 */ swc1 $f10, 0x58($sp) /* 071ED0 7F03D3A0 24010001 */ li $at, 1 /* 071ED4 7F03D3A4 14410005 */ bne $v0, $at, .L7F03D3BC @@ -19334,7 +19328,7 @@ glabel sub_GAME_7F03E134 #ifdef NONMATCHING void sub_GAME_7F03E18C(void) { - + // Duplicate of the below function with a small extension. } #else GLOBAL_ASM( @@ -19384,8 +19378,31 @@ glabel sub_GAME_7F03E18C #ifdef NONMATCHING -void sub_GAME_7F03E210(void) { +/* +Main missing these kinds of instructions: +- sll $a1, $s0, 0x10 +- sra $t6, $a1, 0x10 +.. +- sll $a1, $s0, 0x10 + +So it looks like a conversion from u32 to u16, but we're reading a u8? +I tried u32 room but no joy. +*/ +void sub_GAME_7F03E210(struct prop *posData) +{ + u8 room; + u8 *roomIter; + + roomIter = posData->rooms; + room = roomIter[0]; + + while (room != 0xff) { + FUN_7f03dd9c(posData,(u16)room); + roomIter += 1; + room = *roomIter; + } + return; } #else GLOBAL_ASM( diff --git a/src/game/chrai.h b/src/game/chrai.h index 7d273dd..3872508 100644 --- a/src/game/chrai.h +++ b/src/game/chrai.h @@ -71,6 +71,14 @@ struct struct_20 { void * anonymous_19; }; +struct Pad { + u32 padNumber; + s32* neighbours; + u32 pathSetIndex; + s32 dist_tmp; +}; + +extern struct Pad * ptr_setup_path_tbl; extern u32 D_800312A0[]; extern u32 D_800312B4[]; extern u32 D_800312C8[]; diff --git a/src/game/chrobjdata.c b/src/game/chrobjdata.c index b60d234..35edbc4 100644 --- a/src/game/chrobjdata.c +++ b/src/game/chrobjdata.c @@ -27,7 +27,7 @@ u8 dword_D_80037084[] = { // GLIST_DETECT_BOND_SPAWN_CLONE_ON_HEARD_GUNFIRE: wai goto_loop_repeat(0x01) label(0x06) if_guard_sees_bond(0x07) - if_guard_was_shot_within_last_10_secs(0x0D) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x0D) if_guard_heard_bond_within_last_10_secs(0x0E) if_guard_shot_from_bond_missed(0x10) if_guard_see_another_guard_shot(0x0D) @@ -113,7 +113,7 @@ u8 dword_D_8003717C[] = { // GLIST_DETECT_BOND_DEAF_NO_CLONE_NO_IDLE_ANIM: wait goto_loop_repeat(0x01) label(0x06) if_guard_sees_bond(0x07) - if_guard_was_shot_within_last_10_secs(0x0D) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x0D) if_guard_shot_from_bond_missed(0x10) if_guard_see_another_guard_shot(0x0D) if_guard_see_another_guard_die(0x0D) @@ -212,7 +212,7 @@ u8 dword_D_80037248[] = { // GLIST_RUN_TO_BOND_AND_FIRE: run to bond and fire u8 dword_D_80037250[] = { // GLIST_DETECT_BOND_NO_CLONE_NO_IDLE_ANIM: wait for bond detection (no clones/no idling) goto_loop_start(0x01) // wait for guard to stop moving before branching to next logic if_guard_sees_bond(0x07) - if_guard_was_shot_within_last_10_secs(0x0D) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x0D) if_guard_heard_bond_within_last_10_secs(0x0D) if_guard_shot_from_bond_missed(0x0D) if_guard_see_another_guard_shot(0x0D) diff --git a/src/game/chrobjhandler.c b/src/game/chrobjhandler.c index 0d67acd..761e009 100644 --- a/src/game/chrobjhandler.c +++ b/src/game/chrobjhandler.c @@ -2493,7 +2493,7 @@ glabel sub_GAME_7F041160 /* 075DCC 7F04129C 02202025 */ move $a0, $s1 /* 075DD0 7F0412A0 0FC1611D */ jal matrix_4x4_transform_vector_in_place /* 075DD4 7F0412A4 E4A80008 */ swc1 $f8, 8($a1) -/* 075DD8 7F0412A8 0FC1E111 */ jal sub_GAME_7F078444 +/* 075DD8 7F0412A8 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 075DDC 7F0412AC 00000000 */ nop /* 075DE0 7F0412B0 00402025 */ move $a0, $v0 /* 075DE4 7F0412B4 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -2531,7 +2531,7 @@ glabel sub_GAME_7F041160 /* 075E64 7F041334 E60A0004 */ swc1 $f10, 4($s0) /* 075E68 7F041338 E6120008 */ swc1 $f18, 8($s0) .L7F04133C: -/* 075E6C 7F04133C 0FC1E111 */ jal sub_GAME_7F078444 +/* 075E6C 7F04133C 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 075E70 7F041340 00000000 */ nop /* 075E74 7F041344 00402025 */ move $a0, $v0 /* 075E78 7F041348 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -3401,7 +3401,7 @@ glabel sub_GAME_7F041E0C /* 076A44 7F041F14 C6880004 */ lwc1 $f8, 4($s4) /* 076A48 7F041F18 E7A8008C */ swc1 $f8, 0x8c($sp) /* 076A4C 7F041F1C C68A0008 */ lwc1 $f10, 8($s4) -/* 076A50 7F041F20 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 076A50 7F041F20 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 076A54 7F041F24 E7AA0090 */ swc1 $f10, 0x90($sp) /* 076A58 7F041F28 00402025 */ move $a0, $v0 /* 076A5C 7F041F2C 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -3411,7 +3411,7 @@ glabel sub_GAME_7F041E0C /* 076A6C 7F041F3C C7B000A0 */ lwc1 $f16, 0xa0($sp) /* 076A70 7F041F40 E7A6007C */ swc1 $f6, 0x7c($sp) /* 076A74 7F041F44 E7B20080 */ swc1 $f18, 0x80($sp) -/* 076A78 7F041F48 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 076A78 7F041F48 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 076A7C 7F041F4C E7B00084 */ swc1 $f16, 0x84($sp) /* 076A80 7F041F50 00402025 */ move $a0, $v0 /* 076A84 7F041F54 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -3513,9 +3513,9 @@ glabel sub_GAME_7F041E0C /* 076BE8 7F0420B8 0FC26C57 */ jal sub_GAME_7F09B15C /* 076BEC 7F0420BC 02002025 */ move $a0, $s0 /* 076BF0 7F0420C0 00025880 */ sll $t3, $v0, 2 -/* 076BF4 7F0420C4 3C0C8008 */ lui $t4, %hi(ptr_BONDdata_p1) +/* 076BF4 7F0420C4 3C0C8008 */ lui $t4, %hi(players) /* 076BF8 7F0420C8 018B6021 */ addu $t4, $t4, $t3 -/* 076BFC 7F0420CC 8D8C9EE0 */ lw $t4, %lo(ptr_BONDdata_p1)($t4) +/* 076BFC 7F0420CC 8D8C9EE0 */ lw $t4, %lo(players)($t4) /* 076C00 7F0420D0 324E0004 */ andi $t6, $s2, 4 /* 076C04 7F0420D4 8D8D00AC */ lw $t5, 0xac($t4) /* 076C08 7F0420D8 51A00037 */ beql $t5, $zero, .L7F0421B8 @@ -3560,9 +3560,9 @@ glabel sub_GAME_7F041E0C /* 076C94 7F042164 0FC26C57 */ jal sub_GAME_7F09B15C /* 076C98 7F042168 02002025 */ move $a0, $s0 /* 076C9C 7F04216C 00025880 */ sll $t3, $v0, 2 -/* 076CA0 7F042170 3C0C8008 */ lui $t4, %hi(ptr_BONDdata_p1) +/* 076CA0 7F042170 3C0C8008 */ lui $t4, %hi(players) /* 076CA4 7F042174 018B6021 */ addu $t4, $t4, $t3 -/* 076CA8 7F042178 8D8C9EE0 */ lw $t4, %lo(ptr_BONDdata_p1)($t4) +/* 076CA8 7F042178 8D8C9EE0 */ lw $t4, %lo(players)($t4) /* 076CAC 7F04217C 02002025 */ move $a0, $s0 /* 076CB0 7F042180 02802825 */ move $a1, $s4 /* 076CB4 7F042184 8D8D00AC */ lw $t5, 0xac($t4) @@ -4319,7 +4319,7 @@ glabel sub_GAME_7F042A0C /* 077734 7F042C04 E440005C */ swc1 $f0, 0x5c($v0) .L7F042C08: /* 077738 7F042C08 27A40080 */ addiu $a0, $sp, 0x80 -/* 07773C 7F042C0C 0FC2CA2C */ jal sub_GAME_7F0B28B0 +/* 07773C 7F042C0C 0FC2CA2C */ jal getCollisionEdge_maybe /* 077740 7F042C10 27A50074 */ addiu $a1, $sp, 0x74 /* 077744 7F042C14 C7A8007C */ lwc1 $f8, 0x7c($sp) /* 077748 7F042C18 C7B00088 */ lwc1 $f16, 0x88($sp) @@ -5479,7 +5479,7 @@ glabel sub_GAME_7F043A6C /* 078624 7F043AF4 8E0C0014 */ lw $t4, 0x14($s0) /* 078628 7F043AF8 8FAB00FC */ lw $t3, 0xfc($sp) /* 07862C 7F043AFC AD8B001C */ sw $t3, 0x1c($t4) -/* 078630 7F043B00 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 078630 7F043B00 0FC0E969 */ jal attachNewChild /* 078634 7F043B04 8FA500F4 */ lw $a1, 0xf4($sp) /* 078638 7F043B08 27B100AC */ addiu $s1, $sp, 0xac /* 07863C 7F043B0C 02202825 */ move $a1, $s1 @@ -5488,7 +5488,7 @@ glabel sub_GAME_7F043A6C /* 078648 7F043B18 26040058 */ addiu $a0, $s0, 0x58 /* 07864C 7F043B1C 0FC16266 */ jal matrix_4x4_set_position /* 078650 7F043B20 02202825 */ move $a1, $s1 -/* 078654 7F043B24 0FC1E111 */ jal sub_GAME_7F078444 +/* 078654 7F043B24 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 078658 7F043B28 00000000 */ nop /* 07865C 7F043B2C 00402025 */ move $a0, $v0 /* 078660 7F043B30 8FA50028 */ lw $a1, 0x28($sp) @@ -5570,7 +5570,7 @@ glabel generate_explosion_at_position /* 07873C 7F043C0C C4460034 */ lwc1 $f6, 0x34($v0) /* 078740 7F043C10 E7A60048 */ swc1 $f6, 0x48($sp) /* 078744 7F043C14 C4480038 */ lwc1 $f8, 0x38($v0) -/* 078748 7F043C18 0FC1E111 */ jal sub_GAME_7F078444 +/* 078748 7F043C18 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 07874C 7F043C1C E7A8004C */ swc1 $f8, 0x4c($sp) /* 078750 7F043C20 27B00044 */ addiu $s0, $sp, 0x44 /* 078754 7F043C24 02002825 */ move $a1, $s0 @@ -5710,7 +5710,7 @@ glabel generate_explosion_at_position /* 078A7C 7F043F0C C4460034 */ lwc1 $f6, 0x34($v0) /* 078A80 7F043F10 E7A60044 */ swc1 $f6, 0x44($sp) /* 078A84 7F043F14 C4480038 */ lwc1 $f8, 0x38($v0) -/* 078A88 7F043F18 0FC1E28D */ jal sub_GAME_7F078444 +/* 078A88 7F043F18 0FC1E28D */ jal currentPlayerGetMatrix10D4 /* 078A8C 7F043F1C E7A80048 */ swc1 $f8, 0x48($sp) /* 078A90 7F043F20 27B00040 */ addiu $s0, $sp, 0x40 /* 078A94 7F043F24 02002825 */ move $a1, $s0 @@ -7055,13 +7055,13 @@ glabel sub_GAME_7F044718 /* 07930C 7F0447DC 46000507 */ neg.s $f20, $f0 /* 079310 7F0447E0 C62C0000 */ lwc1 $f12, ($s1) .L7F0447E4: -/* 079314 7F0447E4 0FC2C5E5 */ jal sub_GAME_7F0B1794 +/* 079314 7F0447E4 0FC2C5E5 */ jal distBetweenPoints2d /* 079318 7F0447E8 C62E0004 */ lwc1 $f14, 4($s1) /* 07931C 7F0447EC 4406B000 */ mfc1 $a2, $f22 /* 079320 7F0447F0 4407C000 */ mfc1 $a3, $f24 /* 079324 7F0447F4 46000686 */ mov.s $f26, $f0 /* 079328 7F0447F8 C60C0000 */ lwc1 $f12, ($s0) -/* 07932C 7F0447FC 0FC2C5E5 */ jal sub_GAME_7F0B1794 +/* 07932C 7F0447FC 0FC2C5E5 */ jal distBetweenPoints2d /* 079330 7F044800 C60E0004 */ lwc1 $f14, 4($s0) /* 079334 7F044804 461CA03C */ c.lt.s $f20, $f28 /* 079338 7F044808 00000000 */ nop @@ -7999,7 +7999,7 @@ glabel object_interaction /* 079E34 7F045304 8E340014 */ lw $s4, 0x14($s1) /* 079E38 7F045308 AFA00690 */ sw $zero, 0x690($sp) /* 079E3C 7F04530C AFA00680 */ sw $zero, 0x680($sp) -/* 079E40 7F045310 0FC26919 */ jal get_num_players +/* 079E40 7F045310 0FC26919 */ jal getPlayerCount /* 079E44 7F045314 E7B6067C */ swc1 $f22, 0x67c($sp) /* 079E48 7F045318 240C0001 */ li $t4, 1 /* 079E4C 7F04531C AFA20674 */ sw $v0, 0x674($sp) @@ -8578,7 +8578,7 @@ glabel object_interaction /* 07A6C0 7F045B90 00409025 */ move $s2, $v0 /* 07A6C4 7F045B94 E7A605CC */ swc1 $f6, 0x5cc($sp) /* 07A6C8 7F045B98 E7A805D0 */ swc1 $f8, 0x5d0($sp) -/* 07A6CC 7F045B9C 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 07A6CC 7F045B9C 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 07A6D0 7F045BA0 E7A405D4 */ swc1 $f4, 0x5d4($sp) /* 07A6D4 7F045BA4 00402025 */ move $a0, $v0 /* 07A6D8 7F045BA8 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -8646,7 +8646,7 @@ glabel object_interaction /* 07A7D0 7F045CA0 27A5058C */ addiu $a1, $sp, 0x58c /* 07A7D4 7F045CA4 46045182 */ mul.s $f6, $f10, $f4 /* 07A7D8 7F045CA8 46064281 */ sub.s $f10, $f8, $f6 -/* 07A7DC 7F045CAC 0FC16799 */ jal sub_GAME_7F059E64 +/* 07A7DC 7F045CAC 0FC16799 */ jal matrix_4x4_7F059E64 /* 07A7E0 7F045CB0 E7AA05D4 */ swc1 $f10, 0x5d4($sp) /* 07A7E4 7F045CB4 27A4058C */ addiu $a0, $sp, 0x58c /* 07A7E8 7F045CB8 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -11399,7 +11399,7 @@ glabel object_interaction /* 07CFB0 7F048480 00402825 */ move $a1, $v0 /* 07CFB4 7F048484 0FC149BB */ jal sub_GAME_7F0526EC /* 07CFB8 7F048488 AFA4039C */ sw $a0, 0x39c($sp) -/* 07CFBC 7F04848C 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 07CFBC 7F04848C 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 07CFC0 7F048490 00000000 */ nop /* 07CFC4 7F048494 00402025 */ move $a0, $v0 /* 07CFC8 7F048498 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -11579,7 +11579,7 @@ glabel object_interaction /* 07D26C 7F04873C 8FA40070 */ lw $a0, 0x70($sp) /* 07D270 7F048740 0FC16266 */ jal matrix_4x4_set_position /* 07D274 7F048744 27A503A4 */ addiu $a1, $sp, 0x3a4 -/* 07D278 7F048748 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 07D278 7F048748 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 07D27C 7F04874C 00000000 */ nop /* 07D280 7F048750 00402025 */ move $a0, $v0 /* 07D284 7F048754 27A503A4 */ addiu $a1, $sp, 0x3a4 @@ -11628,7 +11628,7 @@ glabel object_interaction /* 07D328 7F0487F8 02402025 */ move $a0, $s2 /* 07D32C 7F0487FC 0FC16266 */ jal matrix_4x4_set_position /* 07D330 7F048800 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D334 7F048804 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 07D334 7F048804 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 07D338 7F048808 00000000 */ nop /* 07D33C 7F04880C 00402025 */ move $a0, $v0 /* 07D340 7F048810 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -11679,7 +11679,7 @@ glabel object_interaction /* 07D3EC 7F0488BC 8D4E0014 */ lw $t6, 0x14($t2) /* 07D3F0 7F0488C0 0FC1629F */ jal matrix_scalar_multiply /* 07D3F4 7F0488C4 C5CC0014 */ lwc1 $f12, 0x14($t6) -/* 07D3F8 7F0488C8 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 07D3F8 7F0488C8 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 07D3FC 7F0488CC 00000000 */ nop /* 07D400 7F0488D0 00402025 */ move $a0, $v0 /* 07D404 7F0488D4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -12107,7 +12107,7 @@ glabel object_interaction /* 07DA38 7F048F08 15EBFFF8 */ bne $t7, $t3, .L7F048EEC /* 07DA3C 7F048F0C AD21FFFC */ sw $at, -4($t1) /* 07DA40 7F048F10 8DE10000 */ lw $at, ($t7) -/* 07DA44 7F048F14 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 07DA44 7F048F14 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 07DA48 7F048F18 AD210000 */ sw $at, ($t1) /* 07DA4C 7F048F1C AFA201B0 */ sw $v0, 0x1b0($sp) /* 07DA50 7F048F20 AFB201C0 */ sw $s2, 0x1c0($sp) @@ -12258,7 +12258,7 @@ glabel object_interaction /* 07DC74 7F049144 8FA4006C */ lw $a0, 0x6c($sp) /* 07DC78 7F049148 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07DC7C 7F04914C 8FA50068 */ lw $a1, 0x68($sp) -/* 07DC80 7F049150 0FC1E111 */ jal sub_GAME_7F078444 +/* 07DC80 7F049150 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 07DC84 7F049154 00000000 */ nop /* 07DC88 7F049158 27B0016C */ addiu $s0, $sp, 0x16c /* 07DC8C 7F04915C 02003025 */ move $a2, $s0 @@ -12522,7 +12522,7 @@ glabel object_interaction /* 07E04C 7F04951C C4660004 */ lwc1 $f6, 4($v1) /* 07E050 7F049520 E7A60130 */ swc1 $f6, 0x130($sp) /* 07E054 7F049524 C4680008 */ lwc1 $f8, 8($v1) -/* 07E058 7F049528 0FC1E111 */ jal sub_GAME_7F078444 +/* 07E058 7F049528 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 07E05C 7F04952C E7A80134 */ swc1 $f8, 0x134($sp) /* 07E060 7F049530 27B100B8 */ addiu $s1, $sp, 0xb8 /* 07E064 7F049534 02203025 */ move $a2, $s1 @@ -13092,7 +13092,7 @@ glabel object_interaction /* 07A248 7F0456D8 8E340014 */ lw $s4, 0x14($s1) /* 07A24C 7F0456DC AFA00698 */ sw $zero, 0x698($sp) /* 07A250 7F0456E0 AFA00688 */ sw $zero, 0x688($sp) -/* 07A254 7F0456E4 0FC26C01 */ jal get_num_players +/* 07A254 7F0456E4 0FC26C01 */ jal getPlayerCount /* 07A258 7F0456E8 E7B60684 */ swc1 $f22, 0x684($sp) /* 07A25C 7F0456EC 240F0001 */ li $t7, 1 /* 07A260 7F0456F0 AFA2067C */ sw $v0, 0x67c($sp) @@ -13675,7 +13675,7 @@ glabel object_interaction /* 07AAE4 7F045F74 00409025 */ move $s2, $v0 /* 07AAE8 7F045F78 E7A605D4 */ swc1 $f6, 0x5d4($sp) /* 07AAEC 7F045F7C E7A805D8 */ swc1 $f8, 0x5d8($sp) -/* 07AAF0 7F045F80 0FC1E26D */ jal get_BONDdata_field_10CC +/* 07AAF0 7F045F80 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 07AAF4 7F045F84 E7A405DC */ swc1 $f4, 0x5dc($sp) /* 07AAF8 7F045F88 00402025 */ move $a0, $v0 /* 07AAFC 7F045F8C 0FC16265 */ jal matrix_4x4_transform_vector_in_place @@ -13743,7 +13743,7 @@ glabel object_interaction /* 07ABF4 7F046084 27A50594 */ addiu $a1, $sp, 0x594 /* 07ABF8 7F046088 46045182 */ mul.s $f6, $f10, $f4 /* 07ABFC 7F04608C 46064281 */ sub.s $f10, $f8, $f6 -/* 07AC00 7F046090 0FC168E1 */ jal sub_GAME_7F059E64 +/* 07AC00 7F046090 0FC168E1 */ jal matrix_4x4_7F059E64 /* 07AC04 7F046094 E7AA05DC */ swc1 $f10, 0x5dc($sp) /* 07AC08 7F046098 27A40594 */ addiu $a0, $sp, 0x594 /* 07AC0C 7F04609C 0FC16265 */ jal matrix_4x4_transform_vector_in_place @@ -16505,7 +16505,7 @@ glabel object_interaction /* 07D3F4 7F048884 00402825 */ move $a1, $v0 /* 07D3F8 7F048888 0FC14AFA */ jal sub_GAME_7F0526EC /* 07D3FC 7F04888C AFA403A0 */ sw $a0, 0x3a0($sp) -/* 07D400 7F048890 0FC1E26D */ jal get_BONDdata_field_10CC +/* 07D400 7F048890 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 07D404 7F048894 00000000 */ nop /* 07D408 7F048898 00402025 */ move $a0, $v0 /* 07D40C 7F04889C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place @@ -16685,7 +16685,7 @@ glabel object_interaction /* 07D6B0 7F048B40 8FA40074 */ lw $a0, 0x74($sp) /* 07D6B4 7F048B44 0FC163AE */ jal matrix_4x4_set_position /* 07D6B8 7F048B48 27A503A8 */ addiu $a1, $sp, 0x3a8 -/* 07D6BC 7F048B4C 0FC1E26D */ jal get_BONDdata_field_10CC +/* 07D6BC 7F048B4C 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 07D6C0 7F048B50 00000000 */ nop /* 07D6C4 7F048B54 00402025 */ move $a0, $v0 /* 07D6C8 7F048B58 27A503A8 */ addiu $a1, $sp, 0x3a8 @@ -16734,7 +16734,7 @@ glabel object_interaction /* 07D76C 7F048BFC 02402025 */ move $a0, $s2 /* 07D770 7F048C00 0FC163AE */ jal matrix_4x4_set_position /* 07D774 7F048C04 8FA50070 */ lw $a1, 0x70($sp) -/* 07D778 7F048C08 0FC1E26D */ jal get_BONDdata_field_10CC +/* 07D778 7F048C08 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 07D77C 7F048C0C 00000000 */ nop /* 07D780 7F048C10 00402025 */ move $a0, $v0 /* 07D784 7F048C14 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place @@ -16785,7 +16785,7 @@ glabel object_interaction /* 07D830 7F048CC0 8F090014 */ lw $t1, 0x14($t8) /* 07D834 7F048CC4 0FC163E7 */ jal matrix_scalar_multiply /* 07D838 7F048CC8 C52C0014 */ lwc1 $f12, 0x14($t1) -/* 07D83C 7F048CCC 0FC1E26D */ jal get_BONDdata_field_10CC +/* 07D83C 7F048CCC 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 07D840 7F048CD0 00000000 */ nop /* 07D844 7F048CD4 00402025 */ move $a0, $v0 /* 07D848 7F048CD8 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place @@ -17213,7 +17213,7 @@ glabel object_interaction /* 07DE7C 7F04930C 158FFFF8 */ bne $t4, $t7, .Ljp7F0492F0 /* 07DE80 7F049310 ADA1FFFC */ sw $at, -4($t5) /* 07DE84 7F049314 8D810000 */ lw $at, ($t4) -/* 07DE88 7F049318 0FC1E26D */ jal get_BONDdata_field_10CC +/* 07DE88 7F049318 0FC1E26D */ jal currentPlayerGetMatrix10CC /* 07DE8C 7F04931C ADA10000 */ sw $at, ($t5) /* 07DE90 7F049320 AFA201B4 */ sw $v0, 0x1b4($sp) /* 07DE94 7F049324 AFB201C4 */ sw $s2, 0x1c4($sp) @@ -17364,7 +17364,7 @@ glabel object_interaction /* 07E0B8 7F049548 8FA40070 */ lw $a0, 0x70($sp) /* 07E0BC 7F04954C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place /* 07E0C0 7F049550 8FA5006C */ lw $a1, 0x6c($sp) -/* 07E0C4 7F049554 0FC1E28D */ jal sub_GAME_7F078444 +/* 07E0C4 7F049554 0FC1E28D */ jal currentPlayerGetMatrix10D4 /* 07E0C8 7F049558 00000000 */ nop /* 07E0CC 7F04955C 27B00170 */ addiu $s0, $sp, 0x170 /* 07E0D0 7F049560 02003025 */ move $a2, $s0 @@ -17628,7 +17628,7 @@ glabel object_interaction /* 07E490 7F049920 C4660004 */ lwc1 $f6, 4($v1) /* 07E494 7F049924 E7A60134 */ swc1 $f6, 0x134($sp) /* 07E498 7F049928 C4680008 */ lwc1 $f8, 8($v1) -/* 07E49C 7F04992C 0FC1E28D */ jal sub_GAME_7F078444 +/* 07E49C 7F04992C 0FC1E28D */ jal currentPlayerGetMatrix10D4 /* 07E4A0 7F049930 E7A80138 */ swc1 $f8, 0x138($sp) /* 07E4A4 7F049934 27B100BC */ addiu $s1, $sp, 0xbc /* 07E4A8 7F049938 02203025 */ move $a2, $s1 @@ -20656,7 +20656,7 @@ glabel sub_GAME_7F04AC20 /* 07FBD4 7F04B0A4 24E70008 */ addiu $a3, $a3, 8 /* 07FBD8 7F04B0A8 AC790000 */ sw $t9, ($v1) /* 07FBDC 7F04B0AC AFA70064 */ sw $a3, 0x64($sp) -/* 07FBE0 7F04B0B0 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 07FBE0 7F04B0B0 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 07FBE4 7F04B0B4 AFA3002C */ sw $v1, 0x2c($sp) /* 07FBE8 7F04B0B8 8FA3002C */ lw $v1, 0x2c($sp) /* 07FBEC 7F04B0BC 8FA70064 */ lw $a3, 0x64($sp) @@ -21791,7 +21791,7 @@ glabel sub_GAME_7F04BCDC /* 080A8C 7F04BF5C C4520004 */ lwc1 $f18, 4($v0) /* 080A90 7F04BF60 E7B20048 */ swc1 $f18, 0x48($sp) /* 080A94 7F04BF64 C4440008 */ lwc1 $f4, 8($v0) -/* 080A98 7F04BF68 0FC1E111 */ jal sub_GAME_7F078444 +/* 080A98 7F04BF68 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 080A9C 7F04BF6C E7A4004C */ swc1 $f4, 0x4c($sp) /* 080AA0 7F04BF70 00402025 */ move $a0, $v0 /* 080AA4 7F04BF74 0FC160F6 */ jal matrix_4x4_rotate_vector_in_place @@ -22496,7 +22496,7 @@ glabel sub_GAME_7F04C130 /* 081374 7F04C844 8FA400F8 */ lw $a0, 0xf8($sp) /* 081378 7F04C848 240E001F */ li $t6, 31 /* 08137C 7F04C84C AFA20058 */ sw $v0, 0x58($sp) -/* 081380 7F04C850 0FC1E111 */ jal sub_GAME_7F078444 +/* 081380 7F04C850 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 081384 7F04C854 AFAE0054 */ sw $t6, 0x54($sp) /* 081388 7F04C858 00402025 */ move $a0, $v0 /* 08138C 7F04C85C 8FA50058 */ lw $a1, 0x58($sp) @@ -24256,7 +24256,7 @@ glabel sub_GAME_7F04DE18 /* 082988 7F04DE58 8D230004 */ lw $v1, 4($t1) /* 08298C 7F04DE5C 0FC1B198 */ jal sub_GAME_7F06C660 /* 082990 7F04DE60 AFA30088 */ sw $v1, 0x88($sp) -/* 082994 7F04DE64 0FC1E111 */ jal sub_GAME_7F078444 +/* 082994 7F04DE64 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 082998 7F04DE68 AFA20084 */ sw $v0, 0x84($sp) /* 08299C 7F04DE6C 00402025 */ move $a0, $v0 /* 0829A0 7F04DE70 8FA50084 */ lw $a1, 0x84($sp) @@ -24818,7 +24818,7 @@ glabel maybe_detonate_object /* 08303C 7F04E50C AFA600C0 */ sw $a2, 0xc0($sp) /* 083040 7F04E510 8FA600C0 */ lw $a2, 0xc0($sp) /* 083044 7F04E514 8E050010 */ lw $a1, 0x10($s0) -/* 083048 7F04E518 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 083048 7F04E518 0FC0E969 */ jal attachNewChild /* 08304C 7F04E51C 8CC40010 */ lw $a0, 0x10($a2) /* 083050 7F04E520 10000008 */ b .L7F04E544 /* 083054 7F04E524 92020003 */ lbu $v0, 3($s0) @@ -25288,7 +25288,7 @@ glabel sub_GAME_7F04EA68 /* 083660 7F04EB30 AFA3005C */ sw $v1, 0x5c($sp) /* 083664 7F04EB34 46080482 */ mul.s $f18, $f0, $f8 /* 083668 7F04EB38 46123281 */ sub.s $f10, $f6, $f18 -/* 08366C 7F04EB3C 0FC1E111 */ jal sub_GAME_7F078444 +/* 08366C 7F04EB3C 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 083670 7F04EB40 E7AA0068 */ swc1 $f10, 0x68($sp) /* 083674 7F04EB44 00402025 */ move $a0, $v0 /* 083678 7F04EB48 0FC1611D */ jal matrix_4x4_transform_vector_in_place @@ -26492,14 +26492,14 @@ void prepare_ammo_type_collection_text(u8 *finaltext, AMMOTYPES ammotype, u32 qu if (j_text_trigger != 0) { apped_text_ammotype(finaltext,ammotype,quantity); - if (get_num_players() < 3) + if (getPlayerCount() < 3) { append_text_picked_up(finaltext, ammotype, quantity); } string_append_from_obseg_textbank(finaltext, (char *)D_800529D0); return; } - if (get_num_players() < 3) + if (getPlayerCount() < 3) { append_text_picked_up(finaltext, ammotype, quantity); append_text_ammo_amount_word(finaltext, ammotype, quantity); @@ -26527,7 +26527,7 @@ glabel prepare_ammo_type_collection_text /* 08447C 7F04F94C 00C09025 */ move $s2, $a2 /* 084480 7F04F950 0FC13D03 */ jal apped_text_ammotype /* 084484 7F04F954 00000000 */ nop -/* 084488 7F04F958 0FC26919 */ jal get_num_players +/* 084488 7F04F958 0FC26919 */ jal getPlayerCount /* 08448C 7F04F95C 00000000 */ nop /* 084490 7F04F960 28410003 */ slti $at, $v0, 3 /* 084494 7F04F964 10200004 */ beqz $at, .L7F04F978 @@ -26543,7 +26543,7 @@ glabel prepare_ammo_type_collection_text /* 0844B8 7F04F988 10000016 */ b .L7F04F9E4 /* 0844BC 7F04F98C 8FBF0024 */ lw $ra, 0x24($sp) .L7F04F990: -/* 0844C0 7F04F990 0FC26919 */ jal get_num_players +/* 0844C0 7F04F990 0FC26919 */ jal getPlayerCount /* 0844C4 7F04F994 00000000 */ nop /* 0844C8 7F04F998 28410003 */ slti $at, $v0, 3 /* 0844CC 7F04F99C 10200008 */ beqz $at, .L7F04F9C0 @@ -26791,7 +26791,7 @@ magazine_has_default_ammo_rounds: /* 0847D4 7F04FCA4 28610002 */ slti $at, $v1, 2 /* 0847D8 7F04FCA8 5420000F */ bnezl $at, .L7F04FCE8 /* 0847DC 7F04FCAC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0847E0 7F04FCB0 0FC26919 */ jal get_num_players +/* 0847E0 7F04FCB0 0FC26919 */ jal getPlayerCount /* 0847E4 7F04FCB4 AFA3001C */ sw $v1, 0x1c($sp) /* 0847E8 7F04FCB8 24010001 */ li $at, 1 /* 0847EC 7F04FCBC 14410009 */ bne $v0, $at, .L7F04FCE4 @@ -26895,7 +26895,7 @@ weapon_has_default_ammo: /* 0848BC 7F04FD8C 28610002 */ slti $at, $v1, 2 /* 0848C0 7F04FD90 5420000F */ bnezl $at, .L7F04FDD0 /* 0848C4 7F04FD94 00601025 */ move $v0, $v1 -/* 0848C8 7F04FD98 0FC26919 */ jal get_num_players +/* 0848C8 7F04FD98 0FC26919 */ jal getPlayerCount /* 0848CC 7F04FD9C AFA30018 */ sw $v1, 0x18($sp) /* 0848D0 7F04FDA0 24010001 */ li $at, 1 /* 0848D4 7F04FDA4 14410009 */ bne $v0, $at, .L7F04FDCC @@ -26933,7 +26933,7 @@ void generate_language_specific_text_for_weapon(char *finalstring,ITEM_IDS itemt morethan2players = false; if (j_text_trigger == 0) { - numplayers = get_num_players(); + numplayers = getPlayerCount(); if ((int)numplayers < 3) { textfiletext = get_textptr_for_textID(0xa400); textpointer_load_parse_something(finalstring,textfiletext); @@ -26941,7 +26941,7 @@ void generate_language_specific_text_for_weapon(char *finalstring,ITEM_IDS itemt } else { textpointer_load_parse_something(finalstring,""); - numplayers = get_num_players(); + numplayers = getPlayerCount(); if (2 < (int)numplayers) { morethan2players = true; } @@ -27194,7 +27194,7 @@ glabel generate_language_specific_text_for_weapon /* 084934 7F04FE04 3C058005 */ lui $a1, %hi(D_80052A3C) /* 084938 7F04FE08 0C0029DC */ jal textpointer_load_parse_something /* 08493C 7F04FE0C 24A52A3C */ addiu $a1, %lo(D_80052A3C) # addiu $a1, $a1, 0x2a3c -/* 084940 7F04FE10 0FC26919 */ jal get_num_players +/* 084940 7F04FE10 0FC26919 */ jal getPlayerCount /* 084944 7F04FE14 00000000 */ nop /* 084948 7F04FE18 28410003 */ slti $at, $v0, 3 /* 08494C 7F04FE1C 1420000D */ bnez $at, .L7F04FE54 @@ -27202,7 +27202,7 @@ glabel generate_language_specific_text_for_weapon /* 084954 7F04FE24 1000000B */ b .L7F04FE54 /* 084958 7F04FE28 AFAF0024 */ sw $t7, 0x24($sp) .L7F04FE2C: -/* 08495C 7F04FE2C 0FC26919 */ jal get_num_players +/* 08495C 7F04FE2C 0FC26919 */ jal getPlayerCount /* 084960 7F04FE30 00000000 */ nop /* 084964 7F04FE34 28410003 */ slti $at, $v0, 3 /* 084968 7F04FE38 50200007 */ beql $at, $zero, .L7F04FE58 @@ -27652,7 +27652,7 @@ interact_ammobox_object: /* 084E84 7F050354 96050082 */ lhu $a1, 0x82($s0) /* 084E88 7F050358 AFA4004C */ sw $a0, 0x4c($sp) /* 084E8C 7F05035C AFA30020 */ sw $v1, 0x20($sp) -/* 084E90 7F050360 0FC26919 */ jal get_num_players +/* 084E90 7F050360 0FC26919 */ jal getPlayerCount /* 084E94 7F050364 AFA50050 */ sw $a1, 0x50($sp) /* 084E98 7F050368 24010001 */ li $at, 1 /* 084E9C 7F05036C 8FA30020 */ lw $v1, 0x20($sp) @@ -27830,7 +27830,7 @@ interact_bodyarmor_object: /* 085110 7F0505E0 8FA4006C */ lw $a0, 0x6c($sp) /* 085114 7F0505E4 1440000D */ bnez $v0, .L7F05061C /* 085118 7F0505E8 00402025 */ move $a0, $v0 -/* 08511C 7F0505EC 0FC26919 */ jal get_num_players +/* 08511C 7F0505EC 0FC26919 */ jal getPlayerCount /* 085120 7F0505F0 00000000 */ nop /* 085124 7F0505F4 28410003 */ slti $at, $v0, 3 /* 085128 7F0505F8 10200005 */ beqz $at, .L7F050610 @@ -28032,7 +28032,7 @@ interact_ammobox_object: /* 084E84 7F050354 96050082 */ lhu $a1, 0x82($s0) /* 084E88 7F050358 AFA4004C */ sw $a0, 0x4c($sp) /* 084E8C 7F05035C AFA30020 */ sw $v1, 0x20($sp) -/* 084E90 7F050360 0FC26919 */ jal get_num_players +/* 084E90 7F050360 0FC26919 */ jal getPlayerCount /* 084E94 7F050364 AFA50050 */ sw $a1, 0x50($sp) /* 084E98 7F050368 24010001 */ li $at, 1 /* 084E9C 7F05036C 8FA30020 */ lw $v1, 0x20($sp) @@ -28210,7 +28210,7 @@ interact_bodyarmor_object: /* 085110 7F0505E0 8FA4006C */ lw $a0, 0x6c($sp) /* 085114 7F0505E4 1440000D */ bnez $v0, .L7F05061C /* 085118 7F0505E8 00402025 */ move $a0, $v0 -/* 08511C 7F0505EC 0FC26919 */ jal get_num_players +/* 08511C 7F0505EC 0FC26919 */ jal getPlayerCount /* 085120 7F0505F0 00000000 */ nop /* 085124 7F0505F4 28410003 */ slti $at, $v0, 3 /* 085128 7F0505F8 10200005 */ beqz $at, .L7F050610 @@ -28566,7 +28566,7 @@ glabel object_collectability_routines /* 0855A0 7F050A70 1000001A */ b .L7F050ADC /* 0855A4 7F050A74 AFB9005C */ sw $t9, 0x5c($sp) .L7F050A78: -/* 0855A8 7F050A78 0FC26919 */ jal get_num_players +/* 0855A8 7F050A78 0FC26919 */ jal getPlayerCount /* 0855AC 7F050A7C 00000000 */ nop /* 0855B0 7F050A80 28410002 */ slti $at, $v0, 2 /* 0855B4 7F050A84 54200016 */ bnezl $at, .L7F050AE0 @@ -29108,7 +29108,7 @@ glabel object_collectability_routines /* 085AE4 7F050F74 10000019 */ b .Ljp7F050FDC /* 085AE8 7F050F78 AFAF0064 */ sw $t7, 0x64($sp) .Ljp7F050F7C: -/* 085AEC 7F050F7C 0FC26C01 */ jal get_num_players +/* 085AEC 7F050F7C 0FC26C01 */ jal getPlayerCount /* 085AF0 7F050F80 00000000 */ nop /* 085AF4 7F050F84 28410002 */ slti $at, $v0, 2 /* 085AF8 7F050F88 54200015 */ bnezl $at, .Ljp7F050FE0 @@ -29534,7 +29534,7 @@ glabel sub_GAME_7F050F50 /* 085B24 7F050FF4 8D090008 */ lw $t1, 8($t0) /* 085B28 7F050FF8 8D2A0018 */ lw $t2, 0x18($t1) /* 085B2C 7F050FFC AD6A001C */ sw $t2, 0x1c($t3) -/* 085B30 7F051000 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 085B30 7F051000 0FC0E969 */ jal attachNewChild /* 085B34 7F051004 8C450018 */ lw $a1, 0x18($v0) /* 085B38 7F051008 8FAC0024 */ lw $t4, 0x24($sp) /* 085B3C 7F05100C AD9101D8 */ sw $s1, 0x1d8($t4) @@ -30883,7 +30883,7 @@ glabel sub_GAME_7F051E1C /* 086A3C 7F051F0C 10000004 */ b .L7F051F20 /* 086A40 7F051F10 00001025 */ move $v0, $zero .L7F051F14: -/* 086A44 7F051F14 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 086A44 7F051F14 0FC0E969 */ jal attachNewChild /* 086A48 7F051F18 8CE50018 */ lw $a1, 0x18($a3) /* 086A4C 7F051F1C 24020001 */ li $v0, 1 .L7F051F20: @@ -33004,11 +33004,11 @@ glabel sub_GAME_7F053894 /* 0883E0 7F0538B0 AFB20024 */ sw $s2, 0x24($sp) /* 0883E4 7F0538B4 AFB0001C */ sw $s0, 0x1c($sp) /* 0883E8 7F0538B8 AFA50034 */ sw $a1, 0x34($sp) -/* 0883EC 7F0538BC 0FC26919 */ jal get_num_players +/* 0883EC 7F0538BC 0FC26919 */ jal getPlayerCount /* 0883F0 7F0538C0 C7B40038 */ lwc1 $f20, 0x38($sp) /* 0883F4 7F0538C4 1840001D */ blez $v0, .L7F05393C -/* 0883F8 7F0538C8 3C0E8008 */ lui $t6, %hi(ptr_BONDdata_p1) -/* 0883FC 7F0538CC 25D09EE0 */ addiu $s0, $t6, %lo(ptr_BONDdata_p1) +/* 0883F8 7F0538C8 3C0E8008 */ lui $t6, %hi(players) +/* 0883FC 7F0538CC 25D09EE0 */ addiu $s0, $t6, %lo(players) /* 088400 7F0538D0 00027880 */ sll $t7, $v0, 2 /* 088404 7F0538D4 01F09021 */ addu $s2, $t7, $s0 /* 088408 7F0538D8 8E180000 */ lw $t8, ($s0) @@ -34777,7 +34777,7 @@ glabel sub_GAME_7F054C58 /* 0897A8 7F054C78 8FBF0014 */ lw $ra, 0x14($sp) /* 0897AC 7F054C7C 0FC227F5 */ jal get_BONDdata_position /* 0897B0 7F054C80 AFA20030 */ sw $v0, 0x30($sp) -/* 0897B4 7F054C84 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0897B4 7F054C84 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0897B8 7F054C88 AFA2001C */ sw $v0, 0x1c($sp) /* 0897BC 7F054C8C 8FA3001C */ lw $v1, 0x1c($sp) /* 0897C0 7F054C90 8FA50038 */ lw $a1, 0x38($sp) @@ -36718,11 +36718,11 @@ glabel sub_GAME_7F056210 /* 08AE3C 7F05630C AFA8003C */ sw $t0, 0x3c($sp) /* 08AE40 7F056310 0FC2B366 */ jal microcode_constructor /* 08AE44 7F056314 02202025 */ move $a0, $s1 -/* 08AE48 7F056318 0C001149 */ jal get_video2_settings_uly +/* 08AE48 7F056318 0C001149 */ jal viGetViewTop /* 08AE4C 7F05631C 00408825 */ move $s1, $v0 /* 08AE50 7F056320 00028400 */ sll $s0, $v0, 0x10 /* 08AE54 7F056324 00105403 */ sra $t2, $s0, 0x10 -/* 08AE58 7F056328 0C00112B */ jal get_video2_settings_height +/* 08AE58 7F056328 0C00112B */ jal viGetViewHeight /* 08AE5C 7F05632C 01408025 */ move $s0, $t2 /* 08AE60 7F056330 8FA50044 */ lw $a1, 0x44($sp) /* 08AE64 7F056334 24010064 */ li $at, 100 @@ -36742,11 +36742,11 @@ glabel sub_GAME_7F056210 /* 08AE9C 7F05636C 24060082 */ li $a2, 130 /* 08AEA0 7F056370 0FC1A723 */ jal display_ammo_total_in_a1 /* 08AEA4 7F056374 24070002 */ li $a3, 2 -/* 08AEA8 7F056378 0C001149 */ jal get_video2_settings_uly +/* 08AEA8 7F056378 0C001149 */ jal viGetViewTop /* 08AEAC 7F05637C 00408825 */ move $s1, $v0 /* 08AEB0 7F056380 00028400 */ sll $s0, $v0, 0x10 /* 08AEB4 7F056384 0010C403 */ sra $t8, $s0, 0x10 -/* 08AEB8 7F056388 0C00112B */ jal get_video2_settings_height +/* 08AEB8 7F056388 0C00112B */ jal viGetViewHeight /* 08AEBC 7F05638C 03008025 */ move $s0, $t8 /* 08AEC0 7F056390 8FA50044 */ lw $a1, 0x44($sp) /* 08AEC4 7F056394 2401000A */ li $at, 10 @@ -36763,11 +36763,11 @@ glabel sub_GAME_7F056210 /* 08AEF0 7F0563C0 2406008A */ li $a2, 138 /* 08AEF4 7F0563C4 0FC1A723 */ jal display_ammo_total_in_a1 /* 08AEF8 7F0563C8 24070002 */ li $a3, 2 -/* 08AEFC 7F0563CC 0C001149 */ jal get_video2_settings_uly +/* 08AEFC 7F0563CC 0C001149 */ jal viGetViewTop /* 08AF00 7F0563D0 00408825 */ move $s1, $v0 /* 08AF04 7F0563D4 00028400 */ sll $s0, $v0, 0x10 /* 08AF08 7F0563D8 00107403 */ sra $t6, $s0, 0x10 -/* 08AF0C 7F0563DC 0C00112B */ jal get_video2_settings_height +/* 08AF0C 7F0563DC 0C00112B */ jal viGetViewHeight /* 08AF10 7F0563E0 01C08025 */ move $s0, $t6 /* 08AF14 7F0563E4 00506821 */ addu $t5, $v0, $s0 /* 08AF18 7F0563E8 25AFFFEE */ addiu $t7, $t5, -0x12 @@ -36782,11 +36782,11 @@ glabel sub_GAME_7F056210 /* 08AF3C 7F05640C 24060093 */ li $a2, 147 /* 08AF40 7F056410 0FC1A694 */ jal some_kind_of_display_routine /* 08AF44 7F056414 24070002 */ li $a3, 2 -/* 08AF48 7F056418 0C001149 */ jal get_video2_settings_uly +/* 08AF48 7F056418 0C001149 */ jal viGetViewTop /* 08AF4C 7F05641C 00408825 */ move $s1, $v0 /* 08AF50 7F056420 00028400 */ sll $s0, $v0, 0x10 /* 08AF54 7F056424 00104C03 */ sra $t1, $s0, 0x10 -/* 08AF58 7F056428 0C00112B */ jal get_video2_settings_height +/* 08AF58 7F056428 0C00112B */ jal viGetViewHeight /* 08AF5C 7F05642C 01208025 */ move $s0, $t1 /* 08AF60 7F056430 8FA50040 */ lw $a1, 0x40($sp) /* 08AF64 7F056434 2401003C */ li $at, 60 @@ -36806,11 +36806,11 @@ glabel sub_GAME_7F056210 /* 08AF9C 7F05646C 2406009C */ li $a2, 156 /* 08AFA0 7F056470 0FC1A723 */ jal display_ammo_total_in_a1 /* 08AFA4 7F056474 24070002 */ li $a3, 2 -/* 08AFA8 7F056478 0C001149 */ jal get_video2_settings_uly +/* 08AFA8 7F056478 0C001149 */ jal viGetViewTop /* 08AFAC 7F05647C 00408825 */ move $s1, $v0 /* 08AFB0 7F056480 00028400 */ sll $s0, $v0, 0x10 /* 08AFB4 7F056484 00107C03 */ sra $t7, $s0, 0x10 -/* 08AFB8 7F056488 0C00112B */ jal get_video2_settings_height +/* 08AFB8 7F056488 0C00112B */ jal viGetViewHeight /* 08AFBC 7F05648C 01E08025 */ move $s0, $t7 /* 08AFC0 7F056490 8FA50040 */ lw $a1, 0x40($sp) /* 08AFC4 7F056494 2401000A */ li $at, 10 @@ -36827,11 +36827,11 @@ glabel sub_GAME_7F056210 /* 08AFF0 7F0564C0 240600A4 */ li $a2, 164 /* 08AFF4 7F0564C4 0FC1A723 */ jal display_ammo_total_in_a1 /* 08AFF8 7F0564C8 24070002 */ li $a3, 2 -/* 08AFFC 7F0564CC 0C001149 */ jal get_video2_settings_uly +/* 08AFFC 7F0564CC 0C001149 */ jal viGetViewTop /* 08B000 7F0564D0 00408825 */ move $s1, $v0 /* 08B004 7F0564D4 00028400 */ sll $s0, $v0, 0x10 /* 08B008 7F0564D8 00105C03 */ sra $t3, $s0, 0x10 -/* 08B00C 7F0564DC 0C00112B */ jal get_video2_settings_height +/* 08B00C 7F0564DC 0C00112B */ jal viGetViewHeight /* 08B010 7F0564E0 01608025 */ move $s0, $t3 /* 08B014 7F0564E4 00506021 */ addu $t4, $v0, $s0 /* 08B018 7F0564E8 258EFFEE */ addiu $t6, $t4, -0x12 @@ -36846,11 +36846,11 @@ glabel sub_GAME_7F056210 /* 08B03C 7F05650C 240600AD */ li $a2, 173 /* 08B040 7F056510 0FC1A694 */ jal some_kind_of_display_routine /* 08B044 7F056514 24070002 */ li $a3, 2 -/* 08B048 7F056518 0C001149 */ jal get_video2_settings_uly +/* 08B048 7F056518 0C001149 */ jal viGetViewTop /* 08B04C 7F05651C 00408825 */ move $s1, $v0 /* 08B050 7F056520 00028400 */ sll $s0, $v0, 0x10 /* 08B054 7F056524 0010CC03 */ sra $t9, $s0, 0x10 -/* 08B058 7F056528 0C00112B */ jal get_video2_settings_height +/* 08B058 7F056528 0C00112B */ jal viGetViewHeight /* 08B05C 7F05652C 03208025 */ move $s0, $t9 /* 08B060 7F056530 8FA5003C */ lw $a1, 0x3c($sp) /* 08B064 7F056534 24010064 */ li $at, 100 @@ -36870,11 +36870,11 @@ glabel sub_GAME_7F056210 /* 08B09C 7F05656C 240600B6 */ li $a2, 182 /* 08B0A0 7F056570 0FC1A723 */ jal display_ammo_total_in_a1 /* 08B0A4 7F056574 24070002 */ li $a3, 2 -/* 08B0A8 7F056578 0C001149 */ jal get_video2_settings_uly +/* 08B0A8 7F056578 0C001149 */ jal viGetViewTop /* 08B0AC 7F05657C 00408825 */ move $s1, $v0 /* 08B0B0 7F056580 00028400 */ sll $s0, $v0, 0x10 /* 08B0B4 7F056584 00107403 */ sra $t6, $s0, 0x10 -/* 08B0B8 7F056588 0C00112B */ jal get_video2_settings_height +/* 08B0B8 7F056588 0C00112B */ jal viGetViewHeight /* 08B0BC 7F05658C 01C08025 */ move $s0, $t6 /* 08B0C0 7F056590 8FA5003C */ lw $a1, 0x3c($sp) /* 08B0C4 7F056594 2401000A */ li $at, 10 diff --git a/src/game/debugmenu_090490.c b/src/game/debugmenu_090490.c index ff6d4d7..0fad92a 100644 --- a/src/game/debugmenu_090490.c +++ b/src/game/debugmenu_090490.c @@ -760,7 +760,7 @@ debug_collisions: /* 0C540C 7F0908DC 10000166 */ b .L7F090E78 /* 0C5410 7F0908E0 8FB80018 */ lw $t8, 0x18($sp) debug_allguns: -/* 0C5414 7F0908E4 0FC26919 */ jal get_num_players +/* 0C5414 7F0908E4 0FC26919 */ jal getPlayerCount /* 0C5418 7F0908E8 AFA0005C */ sw $zero, 0x5c($sp) /* 0C541C 7F0908EC 58400162 */ blezl $v0, .L7F090E78 /* 0C5420 7F0908F0 8FB80018 */ lw $t8, 0x18($sp) @@ -773,7 +773,7 @@ debug_allguns: /* 0C5438 7F090908 2C440001 */ sltiu $a0, $v0, 1 /* 0C543C 7F09090C 8FAA005C */ lw $t2, 0x5c($sp) /* 0C5440 7F090910 254B0001 */ addiu $t3, $t2, 1 -/* 0C5444 7F090914 0FC26919 */ jal get_num_players +/* 0C5444 7F090914 0FC26919 */ jal getPlayerCount /* 0C5448 7F090918 AFAB005C */ sw $t3, 0x5c($sp) /* 0C544C 7F09091C 8FAC005C */ lw $t4, 0x5c($sp) /* 0C5450 7F090920 0182082A */ slt $at, $t4, $v0 @@ -785,7 +785,7 @@ debug_maxammo: /* 0C5464 7F090934 0FC26C54 */ jal get_cur_playernum /* 0C5468 7F090938 00000000 */ nop /* 0C546C 7F09093C AFA20054 */ sw $v0, 0x54($sp) -/* 0C5470 7F090940 0FC26919 */ jal get_num_players +/* 0C5470 7F090940 0FC26919 */ jal getPlayerCount /* 0C5474 7F090944 AFA00058 */ sw $zero, 0x58($sp) /* 0C5478 7F090948 1840000D */ blez $v0, .L7F090980 /* 0C547C 7F09094C 00000000 */ nop @@ -796,7 +796,7 @@ debug_maxammo: /* 0C548C 7F09095C 00000000 */ nop /* 0C5490 7F090960 8FAD0058 */ lw $t5, 0x58($sp) /* 0C5494 7F090964 25AE0001 */ addiu $t6, $t5, 1 -/* 0C5498 7F090968 0FC26919 */ jal get_num_players +/* 0C5498 7F090968 0FC26919 */ jal getPlayerCount /* 0C549C 7F09096C AFAE0058 */ sw $t6, 0x58($sp) /* 0C54A0 7F090970 8FAF0058 */ lw $t7, 0x58($sp) /* 0C54A4 7F090974 01E2082A */ slt $at, $t7, $v0 diff --git a/src/game/dyn.c b/src/game/dyn.c index cea3a03..9d0a7c4 100644 --- a/src/game/dyn.c +++ b/src/game/dyn.c @@ -52,20 +52,20 @@ void set_vtx_gfx_mem_alloc(void) { if (check_token(1, "-mgfx") != 0) { - dyn_c_debug_notice_list_entry[get_num_players()] = strtol(check_token(1, "-mgfx"), 0, 0) << 0xa; + dyn_c_debug_notice_list_entry[getPlayerCount()] = strtol(check_token(1, "-mgfx"), 0, 0) << 0xa; } if (check_token(1, "-mvtx") != 0) { - D_800482F0[get_num_players()] = strtol(check_token(1, "-mvtx"), 0, 0) << 0xa; + D_800482F0[getPlayerCount()] = strtol(check_token(1, "-mvtx"), 0, 0) << 0xa; } mempAllocBytesInBank(dyn_c_debug_notice_list_entry[sVar1] << 1, 4); - ptr_mgfx0_alloc_start.unk4 = (s32) ((0x80050000 + (get_num_players() * 4))->unk-7D20 + ptr_mgfx0_alloc_start); - ptr_mgfx0_alloc_start.unk8 = (s32) ((0x80050000 + (get_num_players() * 4))->unk-7D20 + ptr_mgfx0_alloc_start.unk4); - ptr_mvtx0_alloc_start = mempAllocBytesInBank(((0x80050000 + (get_num_players() * 4))->unk-7D10 * 2), 4); - ptr_mvtx0_alloc_start.unk4 = (s32) ((0x80050000 + (get_num_players() * 4))->unk-7D10 + ptr_mvtx0_alloc_start); - temp_ret = get_num_players(); + ptr_mgfx0_alloc_start.unk4 = (s32) ((0x80050000 + (getPlayerCount() * 4))->unk-7D20 + ptr_mgfx0_alloc_start); + ptr_mgfx0_alloc_start.unk8 = (s32) ((0x80050000 + (getPlayerCount() * 4))->unk-7D20 + ptr_mgfx0_alloc_start.unk4); + ptr_mvtx0_alloc_start = mempAllocBytesInBank(((0x80050000 + (getPlayerCount() * 4))->unk-7D10 * 2), 4); + ptr_mvtx0_alloc_start.unk4 = (s32) ((0x80050000 + (getPlayerCount() * 4))->unk-7D10 + ptr_mvtx0_alloc_start); + temp_ret = getPlayerCount(); ptr_mvtx0_alloc_start.unk8 = (s32) ((0x80050000 + (temp_ret * 4))->unk-7D10 + ptr_mvtx0_alloc_start.unk4); bank_in_mgfx_alloc_table = (u8)0; dword_CODE_bss_8008C254 = 0; @@ -105,7 +105,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F1FD0 7F0BD4A0 24040001 */ li $a0, 1 /* 0F1FD4 7F0BD4A4 10400012 */ beqz $v0, .L7F0BD4F0 /* 0F1FD8 7F0BD4A8 00000000 */ nop -/* 0F1FDC 7F0BD4AC 0FC26919 */ jal get_num_players +/* 0F1FDC 7F0BD4AC 0FC26919 */ jal getPlayerCount /* 0F1FE0 7F0BD4B0 00000000 */ nop /* 0F1FE4 7F0BD4B4 3C058006 */ lui $a1, %hi(aMgfx_1) /* 0F1FE8 7F0BD4B8 24A5B694 */ addiu $a1, %lo(aMgfx_1) # addiu $a1, $a1, -0x496c @@ -129,7 +129,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F202C 7F0BD4FC 24040001 */ li $a0, 1 /* 0F2030 7F0BD500 10400012 */ beqz $v0, .L7F0BD54C /* 0F2034 7F0BD504 00000000 */ nop -/* 0F2038 7F0BD508 0FC26919 */ jal get_num_players +/* 0F2038 7F0BD508 0FC26919 */ jal getPlayerCount /* 0F203C 7F0BD50C 00000000 */ nop /* 0F2040 7F0BD510 3C058006 */ lui $a1, %hi(aMvtx_0) /* 0F2044 7F0BD514 24A5B6A4 */ addiu $a1, %lo(aMvtx_0) # addiu $a1, $a1, -0x495c @@ -147,7 +147,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F2074 7F0BD544 00290821 */ addu $at, $at, $t1 /* 0F2078 7F0BD548 AC3982F0 */ sw $t9, %lo(D_800482F0)($at) .L7F0BD54C: -/* 0F207C 7F0BD54C 0FC26919 */ jal get_num_players +/* 0F207C 7F0BD54C 0FC26919 */ jal getPlayerCount /* 0F2080 7F0BD550 00000000 */ nop /* 0F2084 7F0BD554 00025080 */ sll $t2, $v0, 2 /* 0F2088 7F0BD558 3C048005 */ lui $a0, %hi(D_800482E0) @@ -158,7 +158,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F209C 7F0BD56C 0C0025C8 */ jal mempAllocBytesInBank /* 0F20A0 7F0BD570 01602025 */ move $a0, $t3 /* 0F20A4 7F0BD574 3C018009 */ lui $at, %hi(ptr_mgfx0_alloc_start) -/* 0F20A8 7F0BD578 0FC26919 */ jal get_num_players +/* 0F20A8 7F0BD578 0FC26919 */ jal getPlayerCount /* 0F20AC 7F0BD57C AC22C230 */ sw $v0, %lo(ptr_mgfx0_alloc_start)($at) /* 0F20B0 7F0BD580 3C038009 */ lui $v1, %hi(ptr_mgfx0_alloc_start) /* 0F20B4 7F0BD584 00026080 */ sll $t4, $v0, 2 @@ -168,7 +168,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F20C4 7F0BD594 8C6F0000 */ lw $t7, ($v1) /* 0F20C8 7F0BD598 8DAD82E0 */ lw $t5, %lo(D_800482E0)($t5) /* 0F20CC 7F0BD59C 01AF7021 */ addu $t6, $t5, $t7 -/* 0F20D0 7F0BD5A0 0FC26919 */ jal get_num_players +/* 0F20D0 7F0BD5A0 0FC26919 */ jal getPlayerCount /* 0F20D4 7F0BD5A4 AC6E0004 */ sw $t6, 4($v1) /* 0F20D8 7F0BD5A8 3C038009 */ lui $v1, %hi(ptr_mgfx0_alloc_start) /* 0F20DC 7F0BD5AC 0002C080 */ sll $t8, $v0, 2 @@ -178,7 +178,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F20EC 7F0BD5BC 8C790004 */ lw $t9, 4($v1) /* 0F20F0 7F0BD5C0 8D0882E0 */ lw $t0, %lo(D_800482E0)($t0) /* 0F20F4 7F0BD5C4 01194821 */ addu $t1, $t0, $t9 -/* 0F20F8 7F0BD5C8 0FC26919 */ jal get_num_players +/* 0F20F8 7F0BD5C8 0FC26919 */ jal getPlayerCount /* 0F20FC 7F0BD5CC AC690008 */ sw $t1, 8($v1) /* 0F2100 7F0BD5D0 00025080 */ sll $t2, $v0, 2 /* 0F2104 7F0BD5D4 3C048005 */ lui $a0, %hi(D_800482F0) @@ -190,7 +190,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F211C 7F0BD5EC 01602025 */ move $a0, $t3 /* 0F2120 7F0BD5F0 3C038009 */ lui $v1, %hi(ptr_mvtx0_alloc_start) /* 0F2124 7F0BD5F4 2463C240 */ addiu $v1, %lo(ptr_mvtx0_alloc_start) # addiu $v1, $v1, -0x3dc0 -/* 0F2128 7F0BD5F8 0FC26919 */ jal get_num_players +/* 0F2128 7F0BD5F8 0FC26919 */ jal getPlayerCount /* 0F212C 7F0BD5FC AC620000 */ sw $v0, ($v1) /* 0F2130 7F0BD600 3C038009 */ lui $v1, %hi(ptr_mvtx0_alloc_start) /* 0F2134 7F0BD604 00026080 */ sll $t4, $v0, 2 @@ -200,7 +200,7 @@ glabel set_vtx_gfx_mem_alloc /* 0F2144 7F0BD614 8C6F0000 */ lw $t7, ($v1) /* 0F2148 7F0BD618 8DAD82F0 */ lw $t5, %lo(D_800482F0)($t5) /* 0F214C 7F0BD61C 01AF7021 */ addu $t6, $t5, $t7 -/* 0F2150 7F0BD620 0FC26919 */ jal get_num_players +/* 0F2150 7F0BD620 0FC26919 */ jal getPlayerCount /* 0F2154 7F0BD624 AC6E0004 */ sw $t6, 4($v1) /* 0F2158 7F0BD628 3C038009 */ lui $v1, %hi(ptr_mvtx0_alloc_start) /* 0F215C 7F0BD62C 0002C080 */ sll $t8, $v0, 2 diff --git a/src/game/fog.c b/src/game/fog.c index e9c3c1c..0b74e2b 100644 --- a/src/game/fog.c +++ b/src/game/fog.c @@ -476,7 +476,7 @@ glabel load_enviroment /* 0EF598 7F0BAA68 AFBF0014 */ sw $ra, 0x14($sp) /* 0EF59C 7F0BAA6C AFA5002C */ sw $a1, 0x2c($sp) /* 0EF5A0 7F0BAA70 AFA0001C */ sw $zero, 0x1c($sp) -/* 0EF5A4 7F0BAA74 0FC26919 */ jal get_num_players +/* 0EF5A4 7F0BAA74 0FC26919 */ jal getPlayerCount /* 0EF5A8 7F0BAA78 AFA40028 */ sw $a0, 0x28($sp) /* 0EF5AC 7F0BAA7C 24010001 */ li $at, 1 /* 0EF5B0 7F0BAA80 8FA6001C */ lw $a2, 0x1c($sp) @@ -1126,7 +1126,7 @@ glabel sub_GAME_7F0BB2C8 .L7F0BB2E8: /* 0EFE18 7F0BB2E8 0FC227F5 */ jal get_BONDdata_position /* 0EFE1C 7F0BB2EC AFA40030 */ sw $a0, 0x30($sp) -/* 0EFE20 7F0BB2F0 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0EFE20 7F0BB2F0 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0EFE24 7F0BB2F4 AFA2001C */ sw $v0, 0x1c($sp) /* 0EFE28 7F0BB2F8 8FA3001C */ lw $v1, 0x1c($sp) /* 0EFE2C 7F0BB2FC 8FA40030 */ lw $a0, 0x30($sp) diff --git a/src/game/gamefile.c b/src/game/gamefile.c index 0ac8cba..0c9b46e 100644 --- a/src/game/gamefile.c +++ b/src/game/gamefile.c @@ -111,34 +111,23 @@ f32 get_007_accuracy_mod(void) #ifdef NONMATCHING void end_of_mission_briefing(void) - { - short sVar1; - int iVar3; - save_file *folder; - ulonglong uVar2; - - if (((-1 < briefingpage) && (selected_difficulty != DIFFICULTY_007)) && (append_cheat_sp == FALSE) - ) { - sVar1 = (&solo_target_times_ARRAY_8002b564 - [mission_folder_setup_entries[briefingpage].mission_num].agent_time) - [selected_difficulty]; + if (((-1 < briefingpage) && (selected_difficulty != DIFFICULTY_007)) && (append_cheat_sp == FALSE)) + { + unlock_stage_in_folder_on_difficulty(selected_folder_num, mission_folder_setup_entries[briefingpage].mission_num, selected_difficulty, get_mission_timer() / 0x3c); - unlock_stage_in_folder_on_difficulty - (selected_folder_num,(longlong)mission_folder_setup_entries[briefingpage].mission_num, - (longlong)selected_difficulty,getMissiontime() / 0x3c); - - if ((longlong)(getMissiontime() / 0x3c) <= (longlong)sVar1) { - folder = getEEPROMforFoldernum(selected_folder_num); - if (check_if_cheat_unlocked(folder,(longlong)mission_folder_setup_entries[briefingpage].mission_num) == 0) { - proc_7F01E760(selected_folder_num,(longlong)mission_folder_setup_entries[briefingpage].mission_num); - newcheatunlocked = 1; - return; - } + if ((get_mission_timer() / 0x3c) <= (&solo_target_time_array[mission_folder_setup_entries[briefingpage].mission_num].agent_time)[selected_difficulty]) + { + if (check_if_cheat_unlocked(get_save_folder_ptr(selected_folder_num), mission_folder_setup_entries[briefingpage].mission_num) == 0) + { + sub_GAME_7F01E760(selected_folder_num, mission_folder_setup_entries[briefingpage].mission_num); + newcheatunlocked = 1; + return; + } + } + newcheatunlocked = 0; } - newcheatunlocked = 0; - } - return; + return; } #else @@ -363,115 +352,51 @@ void set_selected_folder_num(u32 foldernum) selected_folder_num = foldernum; } - - - -#ifdef NONMATCHING void set_selected_difficulty(DIFFICULTY difficulty) { - if (difficulty != DIFFICULTY_AGENT) - { - if (difficulty == DIFFICULTY_SECRET) + switch(difficulty) { - selected_difficulty = DIFFICULTY_SECRET; - return; + case DIFFICULTY_AGENT: + default: + selected_difficulty = DIFFICULTY_AGENT; + return; + case DIFFICULTY_SECRET: + selected_difficulty = DIFFICULTY_SECRET; + return; + case DIFFICULTY_00: + selected_difficulty = DIFFICULTY_00; + return; + case DIFFICULTY_007: + selected_difficulty = DIFFICULTY_007; + return; } - if (difficulty == DIFFICULTY_00) - { - selected_difficulty = DIFFICULTY_00; - return; - } - if (difficulty == DIFFICULTY_007) - { - selected_difficulty = DIFFICULTY_007; - return; - } - } - else - { - selected_difficulty = DIFFICULTY_AGENT; - } } -#else -GLOBAL_ASM( -.text -glabel set_selected_difficulty -/* 0520CC 7F01D59C 10800009 */ beqz $a0, .L7F01D5C4 -/* 0520D0 7F01D5A0 24020001 */ li $v0, 1 -/* 0520D4 7F01D5A4 1082000A */ beq $a0, $v0, .L7F01D5D0 -/* 0520D8 7F01D5A8 3C018003 */ lui $at, %hi(selected_difficulty) -/* 0520DC 7F01D5AC 24020002 */ li $v0, 2 -/* 0520E0 7F01D5B0 10820009 */ beq $a0, $v0, .L7F01D5D8 -/* 0520E4 7F01D5B4 3C018003 */ lui $at, %hi(selected_difficulty) -/* 0520E8 7F01D5B8 24020003 */ li $v0, 3 -/* 0520EC 7F01D5BC 10820008 */ beq $a0, $v0, .L7F01D5E0 -/* 0520F0 7F01D5C0 3C018003 */ lui $at, %hi(selected_difficulty) -.L7F01D5C4: -/* 0520F4 7F01D5C4 3C018003 */ lui $at, %hi(selected_difficulty) -/* 0520F8 7F01D5C8 03E00008 */ jr $ra -/* 0520FC 7F01D5CC AC20A8FC */ sw $zero, %lo(selected_difficulty)($at) - -.L7F01D5D0: -/* 052100 7F01D5D0 03E00008 */ jr $ra -/* 052104 7F01D5D4 AC22A8FC */ sw $v0, %lo(selected_difficulty)($at) - -.L7F01D5D8: -/* 052108 7F01D5D8 03E00008 */ jr $ra -/* 05210C 7F01D5DC AC22A8FC */ sw $v0, %lo(selected_difficulty)($at) - -.L7F01D5E0: -/* 052110 7F01D5E0 AC22A8FC */ sw $v0, %lo(selected_difficulty)($at) -/* 052114 7F01D5E4 03E00008 */ jr $ra -/* 052118 7F01D5E8 00000000 */ nop -) -#endif - - - void set_solo_and_ptr_briefing(LEVELID stage) { - gamemode = GAMEMODE_SOLO; - selected_stage = stage; - briefingpage = pull_and_display_text_for_folder_a0(stage); + gamemode = GAMEMODE_SOLO; + selected_stage = stage; + briefingpage = pull_and_display_text_for_folder_a0(stage); } void sub_GAME_7F01D61C(struct save_file *savefile) { - copy_eeprom_from_to(selected_folder_num,savefile); + copy_eeprom_from_to(selected_folder_num,savefile); } -#ifdef NONMATCHING +//this feels fake, generated with a permuter session i forgot was running void sub_GAME_7F01D644(struct save_file *eeprom) { - selected_folder_num_copy = selected_folder_num; - selected_folder_num = 100; - copy_eepromfile_a0_from_a1_to_buffer(100,eeprom); - return; + int new_var; + long long new_var2; + new_var2 = (long long) 0x64; + new_var = new_var2; + selected_folder_num_copy = (s32) selected_folder_num; + selected_folder_num = new_var; + copy_eepromfile_a0_from_a1_to_buffer(new_var, eeprom); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F01D644 -/* 052174 7F01D644 3C028003 */ lui $v0, %hi(selected_folder_num) -/* 052178 7F01D648 2442A8E8 */ addiu $v0, %lo(selected_folder_num) # addiu $v0, $v0, -0x5718 -/* 05217C 7F01D64C 8C4E0000 */ lw $t6, ($v0) -/* 052180 7F01D650 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 052184 7F01D654 00802825 */ move $a1, $a0 -/* 052188 7F01D658 3C018003 */ lui $at, %hi(selected_folder_num_copy) -/* 05218C 7F01D65C AFBF0014 */ sw $ra, 0x14($sp) -/* 052190 7F01D660 24040064 */ li $a0, 100 -/* 052194 7F01D664 AC2EA8EC */ sw $t6, %lo(selected_folder_num_copy)($at) -/* 052198 7F01D668 0FC07D17 */ jal copy_eepromfile_a0_from_a1_to_buffer -/* 05219C 7F01D66C AC440000 */ sw $a0, ($v0) -/* 0521A0 7F01D670 8FBF0014 */ lw $ra, 0x14($sp) -/* 0521A4 7F01D674 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0521A8 7F01D678 03E00008 */ jr $ra -/* 0521AC 7F01D67C 00000000 */ nop -) -#endif void store_favorite_weapon_current_player(u32 right,u32 left) @@ -479,6 +404,6 @@ void store_favorite_weapon_current_player(u32 right,u32 left) u32 playerNum; playerNum = get_cur_playernum(); - array_favweapon[playerNum][0] = right; - array_favweapon[playerNum][1] = left; + array_favweapon[playerNum][RIGHT_HAND] = right; + array_favweapon[playerNum][LEFT_HAND] = left; } \ No newline at end of file diff --git a/src/game/gamefile.h b/src/game/gamefile.h index cb88080..436d0c5 100644 --- a/src/game/gamefile.h +++ b/src/game/gamefile.h @@ -6,7 +6,7 @@ struct save_data { int chksum1; int chksum2; - char completion_bitflags; + u8 completion_bitflags; char flag_007; char music_vol; char sfx_vol; diff --git a/src/game/gamefile2.c b/src/game/gamefile2.c index 4538745..143e4f1 100644 --- a/src/game/gamefile2.c +++ b/src/game/gamefile2.c @@ -188,21 +188,11 @@ glabel sub_GAME_7F01D840 #endif - -#ifdef NONMATCHING -void get_foldernum_of_eeprom(void) { - +u32 get_foldernum_of_eeprom(struct save_data *eeprom) +{ + return eeprom->completion_bitflags & 7; } -#else -GLOBAL_ASM( -.text -glabel get_foldernum_of_eeprom -/* 0523F8 7F01D8C8 90820008 */ lbu $v0, 8($a0) -/* 0523FC 7F01D8CC 304E0007 */ andi $t6, $v0, 7 -/* 052400 7F01D8D0 03E00008 */ jr $ra -/* 052404 7F01D8D4 01C01025 */ move $v0, $t6 -) -#endif + @@ -225,21 +215,11 @@ glabel set_eeprom_to_folder_num #endif - -#ifdef NONMATCHING -void set_eeprom_flag_0x18(void) { - +u32 set_eeprom_flag_0x18(struct save_data *folder) +{ + return (folder->completion_bitflags & 0x18) >> 3; } -#else -GLOBAL_ASM( -.text -glabel set_eeprom_flag_0x18 -/* 052424 7F01D8F4 90820008 */ lbu $v0, 8($a0) -/* 052428 7F01D8F8 304E0018 */ andi $t6, $v0, 0x18 -/* 05242C 7F01D8FC 03E00008 */ jr $ra -/* 052430 7F01D900 000E10C3 */ sra $v0, $t6, 3 -) -#endif + @@ -264,20 +244,12 @@ glabel reset_eeprom_flag_0x18 -#ifdef NONMATCHING -void get_selected_bond(void) { +u32 get_selected_bond(struct save_data *folder) +{ + return (folder->completion_bitflags & 0x60) >> 5; } -#else -GLOBAL_ASM( -.text -glabel get_selected_bond -/* 052454 7F01D924 90820008 */ lbu $v0, 8($a0) -/* 052458 7F01D928 304E0060 */ andi $t6, $v0, 0x60 -/* 05245C 7F01D92C 03E00008 */ jr $ra -/* 052460 7F01D930 000E1143 */ sra $v0, $t6, 5 -) -#endif + @@ -302,46 +274,23 @@ glabel set_selected_bond -#ifdef NONMATCHING -void check_if_eeprom_flag_set_0x80(void) { +u32 check_if_eeprom_flag_set_0x80(struct save_data *folder) +{ + return ((folder->completion_bitflags & 0x80) != 0); } -#else -GLOBAL_ASM( -.text -glabel check_if_eeprom_flag_set_0x80 -/* 052484 7F01D954 90820008 */ lbu $v0, 8($a0) -/* 052488 7F01D958 304E0080 */ andi $t6, $v0, 0x80 -/* 05248C 7F01D95C 03E00008 */ jr $ra -/* 052490 7F01D960 000E102B */ sltu $v0, $zero, $t6 -) -#endif - -#ifdef NONMATCHING -void toggle_eeprom_flag_set_0x80(void) { - +void toggle_eeprom_flag_set_0x80(struct save_data *folder,u32 mode) +{ + if (mode != 0) { + folder->completion_bitflags = folder->completion_bitflags | 0x80; + return; + } + folder->completion_bitflags = folder->completion_bitflags & 0xff7f; + return; } -#else -GLOBAL_ASM( -.text -glabel toggle_eeprom_flag_set_0x80 -/* 052494 7F01D964 50A00006 */ beql $a1, $zero, .L7F01D980 -/* 052498 7F01D968 90980008 */ lbu $t8, 8($a0) -/* 05249C 7F01D96C 908E0008 */ lbu $t6, 8($a0) -/* 0524A0 7F01D970 35CF0080 */ ori $t7, $t6, 0x80 -/* 0524A4 7F01D974 03E00008 */ jr $ra -/* 0524A8 7F01D978 A08F0008 */ sb $t7, 8($a0) -/* 0524AC 7F01D97C 90980008 */ lbu $t8, 8($a0) -.L7F01D980: -/* 0524B0 7F01D980 3319FF7F */ andi $t9, $t8, 0xff7f -/* 0524B4 7F01D984 A0990008 */ sb $t9, 8($a0) -/* 0524B8 7F01D988 03E00008 */ jr $ra -/* 0524BC 7F01D98C 00000000 */ nop -) -#endif @@ -649,7 +598,7 @@ glabel sub_GAME_7F01DCB0 #ifdef NONMATCHING -void check_if_cheat_unlocked(void) { +u32 check_if_cheat_unlocked(save_file *folder,s32 cheat) { } #else @@ -1105,34 +1054,18 @@ glabel sub_GAME_7F01DF90 -#ifdef NONMATCHING -void check_if_valid_folder_num(void) { - +s32 check_if_valid_folder_num(s32 folder) +{ + if ((folder >= 0) && (folder < 4)) + { + return 1; + } + if (folder == 100) + { + return 1; + } + return 0; } -#else -GLOBAL_ASM( -.text -glabel check_if_valid_folder_num -/* 052DBC 7F01E28C 04800005 */ bltz $a0, .L7F01E2A4 -/* 052DC0 7F01E290 28810004 */ slti $at, $a0, 4 -/* 052DC4 7F01E294 50200004 */ beql $at, $zero, .L7F01E2A8 -/* 052DC8 7F01E298 24010064 */ li $at, 100 -/* 052DCC 7F01E29C 03E00008 */ jr $ra -/* 052DD0 7F01E2A0 24020001 */ li $v0, 1 - -.L7F01E2A4: -/* 052DD4 7F01E2A4 24010064 */ li $at, 100 -.L7F01E2A8: -/* 052DD8 7F01E2A8 14810003 */ bne $a0, $at, .L7F01E2B8 -/* 052DDC 7F01E2AC 00001025 */ move $v0, $zero -/* 052DE0 7F01E2B0 03E00008 */ jr $ra -/* 052DE4 7F01E2B4 24020001 */ li $v0, 1 - -.L7F01E2B8: -/* 052DE8 7F01E2B8 03E00008 */ jr $ra -/* 052DEC 7F01E2BC 00000000 */ nop -) -#endif @@ -2187,7 +2120,7 @@ glabel update_eeprom_to_current_solo_watch_settings /* 053A44 7F01EF14 AFBF001C */ sw $ra, 0x1c($sp) /* 053A48 7F01EF18 AFB00018 */ sw $s0, 0x18($sp) /* 053A4C 7F01EF1C AFA40020 */ sw $a0, 0x20($sp) -/* 053A50 7F01EF20 0FC2A4D6 */ jal sub_GAME_7F0A9358 +/* 053A50 7F01EF20 0FC2A4D6 */ jal get_mTrack2Vol /* 053A54 7F01EF24 00008025 */ move $s0, $zero /* 053A58 7F01EF28 8FAF0020 */ lw $t7, 0x20($sp) /* 053A5C 7F01EF2C 000271C3 */ sra $t6, $v0, 7 @@ -2289,7 +2222,7 @@ glabel get_screen_ratio_settings_for_mpgame_from_folder /* 053B84 7F01F054 00027843 */ sra $t7, $v0, 1 /* 053B88 7F01F058 01CF2025 */ or $a0, $t6, $t7 /* 053B8C 7F01F05C 3098FFFF */ andi $t8, $a0, 0xffff -/* 053B90 7F01F060 0FC2A4D9 */ jal sub_GAME_7F0A9364 +/* 053B90 7F01F060 0FC2A4D9 */ jal set_mTrack2Vol /* 053B94 7F01F064 03002025 */ move $a0, $t8 /* 053B98 7F01F068 8FB00024 */ lw $s0, 0x24($sp) /* 053B9C 7F01F06C 9202000B */ lbu $v0, 0xb($s0) @@ -2300,7 +2233,7 @@ glabel get_screen_ratio_settings_for_mpgame_from_folder /* 053BB0 7F01F080 0FC2A468 */ jal sub_GAME_7F0A91A0 /* 053BB4 7F01F084 01202025 */ move $a0, $t1 /* 053BB8 7F01F088 960A000C */ lhu $t2, 0xc($s0) -/* 053BBC 7F01F08C 0FC26919 */ jal get_num_players +/* 053BBC 7F01F08C 0FC26919 */ jal getPlayerCount /* 053BC0 7F01F090 A7AA0020 */ sh $t2, 0x20($sp) /* 053BC4 7F01F094 24010001 */ li $at, 1 /* 053BC8 7F01F098 14410007 */ bne $v0, $at, .L7F01F0B8 diff --git a/src/game/initBondDATA.c b/src/game/initBondDATA.c index 5ea39df..f011210 100644 --- a/src/game/initBondDATA.c +++ b/src/game/initBondDATA.c @@ -58,7 +58,7 @@ glabel init_player_BONDdata_stats /* 039C50 7F005120 3C108008 */ lui $s0, %hi(pPlayer) /* 039C54 7F005124 2610A0B0 */ addiu $s0, %lo(pPlayer) # addiu $s0, $s0, -0x5f50 /* 039C58 7F005128 8E090000 */ lw $t1, ($s0) -/* 039C5C 7F00512C 0FC26919 */ jal get_num_players +/* 039C5C 7F00512C 0FC26919 */ jal getPlayerCount /* 039C60 7F005130 AD220808 */ sw $v0, 0x808($t1) /* 039C64 7F005134 24010001 */ li $at, 1 /* 039C68 7F005138 14410006 */ bne $v0, $at, .L7F005154 diff --git a/src/game/initBondDATAdefaults.c b/src/game/initBondDATAdefaults.c index 4b9b20e..f865378 100644 --- a/src/game/initBondDATAdefaults.c +++ b/src/game/initBondDATAdefaults.c @@ -347,11 +347,11 @@ glabel sets_a_bunch_of_BONDdata_values_to_default /* 03B2A4 7F006774 0FC1BF7A */ jal sub_GAME_7F06FDE8 /* 03B2A8 7F006778 8DC50008 */ lw $a1, 8($t6) /* 03B2AC 7F00677C 8E240000 */ lw $a0, ($s1) -/* 03B2B0 7F006780 3C057F09 */ lui $a1, %hi(sub_GAME_7F08DBB0) # $a1, 0x7f09 -/* 03B2B4 7F006784 24A5DBB0 */ addiu $a1, %lo(sub_GAME_7F08DBB0) # addiu $a1, $a1, -0x2450 +/* 03B2B0 7F006780 3C057F09 */ lui $a1, %hi(currentPlayerToggle5BC) # $a1, 0x7f09 +/* 03B2B4 7F006784 24A5DBB0 */ addiu $a1, %lo(currentPlayerToggle5BC) # addiu $a1, $a1, -0x2450 /* 03B2B8 7F006788 0FC1BF8F */ jal sub_GAME_7F06FE3C /* 03B2BC 7F00678C 24840598 */ addiu $a0, $a0, 0x598 -/* 03B2C0 7F006790 0FC236F2 */ jal sub_GAME_7F08DBC8 +/* 03B2C0 7F006790 0FC236F2 */ jal currentPlayerUpdateIdleHeadRoll /* 03B2C4 7F006794 00000000 */ nop /* 03B2C8 7F006798 8FBF0044 */ lw $ra, 0x44($sp) /* 03B2CC 7F00679C D7B40020 */ ldc1 $f20, 0x20($sp) @@ -640,11 +640,11 @@ glabel sets_a_bunch_of_BONDdata_values_to_default /* 03B300 7F006790 0FC1C0F6 */ jal sub_GAME_7F06FDE8 /* 03B304 7F006794 8DC50008 */ lw $a1, 8($t6) /* 03B308 7F006798 8E240000 */ lw $a0, ($s1) -/* 03B30C 7F00679C 3C057F09 */ lui $a1, %hi(sub_GAME_7F08DBB0) # $a1, 0x7f09 -/* 03B310 7F0067A0 24A5E690 */ addiu $a1, %lo(sub_GAME_7F08DBB0) # addiu $a1, $a1, -0x1970 +/* 03B30C 7F00679C 3C057F09 */ lui $a1, %hi(currentPlayerToggle5BC) # $a1, 0x7f09 +/* 03B310 7F0067A0 24A5E690 */ addiu $a1, %lo(currentPlayerToggle5BC) # addiu $a1, $a1, -0x1970 /* 03B314 7F0067A4 0FC1C10B */ jal sub_GAME_7F06FE3C /* 03B318 7F0067A8 24840598 */ addiu $a0, $a0, 0x598 -/* 03B31C 7F0067AC 0FC239AA */ jal sub_GAME_7F08DBC8 +/* 03B31C 7F0067AC 0FC239AA */ jal currentPlayerUpdateIdleHeadRoll /* 03B320 7F0067B0 00000000 */ nop /* 03B324 7F0067B4 8FBF0044 */ lw $ra, 0x44($sp) /* 03B328 7F0067B8 D7B40020 */ ldc1 $f20, 0x20($sp) diff --git a/src/game/initcameraandthrown.c b/src/game/initcameraandthrown.c index 0259153..4af3411 100644 --- a/src/game/initcameraandthrown.c +++ b/src/game/initcameraandthrown.c @@ -644,7 +644,7 @@ def_7F005A74: /* 03A9C8 7F005E98 8D089C68 */ lw $t0, %lo(dword_CODE_bss_80079C68)($t0) /* 03A9CC 7F005E9C 5900002C */ blezl $t0, .L7F005F50 /* 03A9D0 7F005EA0 27A4008C */ addiu $a0, $sp, 0x8c -/* 03A9D4 7F005EA4 0FC26919 */ jal get_num_players +/* 03A9D4 7F005EA4 0FC26919 */ jal getPlayerCount /* 03A9D8 7F005EA8 00000000 */ nop /* 03A9DC 7F005EAC 28410002 */ slti $at, $v0, 2 /* 03A9E0 7F005EB0 14200008 */ bnez $at, .L7F005ED4 @@ -813,7 +813,7 @@ def_7F005A74: /* 03AC58 7F006128 8E420000 */ lw $v0, ($s2) /* 03AC5C 7F00612C C45204BC */ lwc1 $f18, 0x4bc($v0) /* 03AC60 7F006130 46009103 */ div.s $f4, $f18, $f0 -/* 03AC64 7F006134 0FC26919 */ jal get_num_players +/* 03AC64 7F006134 0FC26919 */ jal getPlayerCount /* 03AC68 7F006138 E44403C0 */ swc1 $f4, 0x3c0($v0) /* 03AC6C 7F00613C 24010001 */ li $at, 1 /* 03AC70 7F006140 14410005 */ bne $v0, $at, .L7F006158 @@ -1406,7 +1406,7 @@ def_7F005A74: /* 03AA04 7F005E94 8F399CD8 */ lw $t9, %lo(dword_CODE_bss_80079C68)($t9) /* 03AA08 7F005E98 5B20002C */ blezl $t9, .L7F005F4C /* 03AA0C 7F005E9C 27A40094 */ addiu $a0, $sp, 0x94 -/* 03AA10 7F005EA0 0FC26C01 */ jal get_num_players +/* 03AA10 7F005EA0 0FC26C01 */ jal getPlayerCount /* 03AA14 7F005EA4 00000000 */ nop /* 03AA18 7F005EA8 28410002 */ slti $at, $v0, 2 /* 03AA1C 7F005EAC 14200008 */ bnez $at, .L7F005ED0 @@ -1574,7 +1574,7 @@ def_7F005A74: /* 03AC90 7F006120 8E420000 */ lw $v0, ($s2) /* 03AC94 7F006124 C45204BC */ lwc1 $f18, 0x4bc($v0) /* 03AC98 7F006128 46009203 */ div.s $f8, $f18, $f0 -/* 03AC9C 7F00612C 0FC26C01 */ jal get_num_players +/* 03AC9C 7F00612C 0FC26C01 */ jal getPlayerCount /* 03ACA0 7F006130 E44803C0 */ swc1 $f8, 0x3c0($v0) /* 03ACA4 7F006134 24010001 */ li $at, 1 /* 03ACA8 7F006138 14410005 */ bne $v0, $at, .L7F006150 diff --git a/src/game/initexplosioncasing.c b/src/game/initexplosioncasing.c index e1d4356..953baaf 100644 --- a/src/game/initexplosioncasing.c +++ b/src/game/initexplosioncasing.c @@ -161,7 +161,7 @@ glabel alloc_explosion_smoke_casing_scorch_impact_buffers /* 03BB00 7F006FD0 28810014 */ slti $at, $a0, 0x14 /* 03BB04 7F006FD4 1420FFB7 */ bnez $at, .L7F006EB4 /* 03BB08 7F006FD8 24C60198 */ addiu $a2, $a2, 0x198 -/* 03BB0C 7F006FDC 0FC26919 */ jal get_num_players +/* 03BB0C 7F006FDC 0FC26919 */ jal getPlayerCount /* 03BB10 7F006FE0 00000000 */ nop /* 03BB14 7F006FE4 24010001 */ li $at, 1 /* 03BB18 7F006FE8 14410017 */ bne $v0, $at, .L7F007048 @@ -205,7 +205,7 @@ glabel alloc_explosion_smoke_casing_scorch_impact_buffers /* 03BBA4 7F007074 28611F40 */ slti $at, $v1, 0x1f40 /* 03BBA8 7F007078 1420FFFB */ bnez $at, .L7F007068 /* 03BBAC 7F00707C A5E60000 */ sh $a2, ($t7) -/* 03BBB0 7F007080 0FC26919 */ jal get_num_players +/* 03BBB0 7F007080 0FC26919 */ jal getPlayerCount /* 03BBB4 7F007084 00000000 */ nop /* 03BBB8 7F007088 241800C8 */ li $t8, 200 /* 03BBBC 7F00708C 0302001A */ div $zero, $t8, $v0 diff --git a/src/game/initpathtablesomething.c b/src/game/initpathtablesomething.c index 9933b41..74afe87 100644 --- a/src/game/initpathtablesomething.c +++ b/src/game/initpathtablesomething.c @@ -24,7 +24,7 @@ glabel init_pathtable_something /* 03B314 7F0067E4 AE220000 */ sw $v0, ($s1) /* 03B318 7F0067E8 00402025 */ move $a0, $v0 /* 03B31C 7F0067EC 8E050000 */ lw $a1, ($s0) -/* 03B320 7F0067F0 0FC2C0DB */ jal sub_GAME_7F0B036C +/* 03B320 7F0067F0 0FC2C0DB */ jal isPointInsideTriStandTileUnscaled_Maybe /* 03B324 7F0067F4 8E060008 */ lw $a2, 8($s0) /* 03B328 7F0067F8 5440001D */ bnezl $v0, .L7F006870 /* 03B32C 7F0067FC 24020001 */ li $v0, 1 diff --git a/src/game/initunk_007180.c b/src/game/initunk_007180.c index a4a5992..d35de06 100644 --- a/src/game/initunk_007180.c +++ b/src/game/initunk_007180.c @@ -14,7 +14,7 @@ glabel sub_GAME_7F007180 /* 03BCB4 7F007184 AFBF0014 */ sw $ra, 0x14($sp) /* 03BCB8 7F007188 0FC2F7C1 */ jal sub_GAME_7F0BDF04 /* 03BCBC 7F00718C 00000000 */ nop -/* 03BCC0 7F007190 0FC26919 */ jal get_num_players +/* 03BCC0 7F007190 0FC26919 */ jal getPlayerCount /* 03BCC4 7F007194 AFA20018 */ sw $v0, 0x18($sp) /* 03BCC8 7F007198 240E00C8 */ li $t6, 200 /* 03BCCC 7F00719C 01C2001A */ div $zero, $t6, $v0 diff --git a/src/game/intro_logos.c b/src/game/intro_logos.c index 46edb8c..43397db 100644 --- a/src/game/intro_logos.c +++ b/src/game/intro_logos.c @@ -880,7 +880,7 @@ glabel insert_bond_eye_intro /* 03CFB8 7F008488 27A40060 */ addiu $a0, $sp, 0x60 /* 03CFBC 7F00848C E7B00020 */ swc1 $f16, 0x20($sp) /* 03CFC0 7F008490 E7B20024 */ swc1 $f18, 0x24($sp) -/* 03CFC4 7F008494 0FC165A5 */ jal sub_GAME_7F059694 +/* 03CFC4 7F008494 0FC165A5 */ jal matrix_4x4_7F059694 /* 03CFC8 7F008498 E7AA001C */ swc1 $f10, 0x1c($sp) /* 03CFCC 7F00849C 02002025 */ move $a0, $s0 /* 03CFD0 7F0084A0 24050002 */ li $a1, 2 diff --git a/src/game/lightfixture.c b/src/game/lightfixture.c index d00098b..ceb2459 100644 --- a/src/game/lightfixture.c +++ b/src/game/lightfixture.c @@ -1,5 +1,6 @@ #include "ultra64.h" #include "game/lightfixture.h" +#include "assets/images/image_externs.h" // bss //CODE.bss:80082660 @@ -19,50 +20,57 @@ s32 dword_CODE_bss_80083318; //D:80046030 s32 D_80046030[] = {0, 0, 0, 0, 0, 0, 0, 0}; - +//this mostly matches 4 bytes different +#ifdef NONMATCHING void init_lightfixture_tables(void) { s32 i; - - for (i=0;i<0x64;i++) - { - light_fixture_table[i].index = 0; - } - - for (i=0;i<0x400;i=i+8) - { - word_CODE_bss_80082B18[i+2] = 0; - word_CODE_bss_80082B18[i+4] = 0; - word_CODE_bss_80082B18[i+6] = 0; - word_CODE_bss_80082B18[i+0] = 0; - } - + for (i=0;i<0x64;i++) {light_fixture_table[i].index = 0;} + for (i=0;i<0x400;i++) {word_CODE_bss_80082B18[i] = 0;} D_80046030[0] = 0; } +#else +GLOBAL_ASM( +.text +glabel init_lightfixture_tables +/* 0F0000 7F0BB4D0 3C038008 */ lui $v1, %hi(light_fixture_table) +/* 0F0004 7F0BB4D4 3C028008 */ lui $v0, %hi(cur_entry_lightfixture_table) +/* 0F0008 7F0BB4D8 24422B10 */ addiu $v0, %lo(cur_entry_lightfixture_table) # addiu $v0, $v0, 0x2b10 +/* 0F000C 7F0BB4DC 24632660 */ addiu $v1, %lo(light_fixture_table) # addiu $v1, $v1, 0x2660 +.L7F0BB4E0: +/* 0F0010 7F0BB4E0 2463000C */ addiu $v1, $v1, 0xc +/* 0F0014 7F0BB4E4 0062082B */ sltu $at, $v1, $v0 +/* 0F0018 7F0BB4E8 1420FFFD */ bnez $at, .L7F0BB4E0 +/* 0F001C 7F0BB4EC A460FFF4 */ sh $zero, -0xc($v1) +/* 0F0020 7F0BB4F0 3C038008 */ lui $v1, %hi(word_CODE_bss_80082B18) +/* 0F0024 7F0BB4F4 3C028008 */ lui $v0, %hi(dword_CODE_bss_80083318) +/* 0F0028 7F0BB4F8 24423318 */ addiu $v0, %lo(dword_CODE_bss_80083318) # addiu $v0, $v0, 0x3318 +/* 0F002C 7F0BB4FC 24632B18 */ addiu $v1, %lo(word_CODE_bss_80082B18) # addiu $v1, $v1, 0x2b18 +.L7F0BB500: + /*v1 offsets don't match*/ +/* 0F0030 7F0BB500 24630010 */ addiu $v1, $v1, 0x10 +/* 0F0034 7F0BB504 A460FFF4 */ sh $zero, -0xc($v1) +/* 0F0038 7F0BB508 A460FFF8 */ sh $zero, -8($v1) +/* 0F003C 7F0BB50C A460FFFC */ sh $zero, -4($v1) +/* 0F0040 7F0BB510 1462FFFB */ bne $v1, $v0, .L7F0BB500 +/* 0F0044 7F0BB514 A460FFF0 */ sh $zero, -0x10($v1) +/* 0F0048 7F0BB518 3C018004 */ lui $at, %hi(D_80046030) +/* 0F004C 7F0BB51C 03E00008 */ jr $ra +/* 0F0050 7F0BB520 AC206030 */ sw $zero, %lo(D_80046030)($at) +) +#endif s32 get_index_of_current_entry_in_init_lightfixture_table(void) { s32 i; - for (i = 0; i != 0x64; i+=4) + for (i = 0; i != 0x64; i++) { if (light_fixture_table[i].index == 0) { return i; } - if (light_fixture_table[i+1].index == 0) - { - return i + 1; - } - if (light_fixture_table[i+2].index == 0) - { - return i + 2; - } - if (light_fixture_table[i+3].index == 0) - { - return i + 3; - } } return 0x64; } @@ -86,87 +94,27 @@ void save_ptrDL_enpoint_to_current_init_lightfixture_table(Gfx *param_1) } - -#ifdef NONMATCHING s32 check_if_imageID_is_light(s32 imageID) { - if (imageID == 0xC9) + if ((imageID == _image201_ID_LIGHT) || + (imageID == _image203_ID_LIGHT) || + (imageID == _image205_ID_LIGHT) || + (imageID == _image252_ID_LIGHT) || + (imageID == _image254_ID_LIGHT) || + (imageID == _image255_ID_LIGHT) || + (imageID == _image256_ID_LIGHT) || + (imageID == _image428_ID_LIGHT) || + (imageID == _image982_ID_LIGHT) || + (imageID == _image1383_ID_LIGHT)) { return 1; - } - if (imageID == 0xCB) + } + else { - return 1; + return 0; } - if (imageID == 0xCD) - { - return 1; - } - if (imageID == 0xFC) - { - return 1; - } - if (imageID == 0xFE) - { - return 1; - } - if (imageID == 0xFF) - { - return 1; - } - if (imageID == 0x100) - { - return 1; - } - if (imageID == 0x1AC) - { - return 1; - } - if (imageID == 0x3D6) - { - return 1; - } - if (imageID == 0x567) - { - return 1; - } - return 0; } -#else -GLOBAL_ASM( -.text -glabel check_if_imageID_is_light -/* 0F0160 7F0BB630 240100C9 */ li $at, 201 -/* 0F0164 7F0BB634 10810013 */ beq $a0, $at, .L7F0BB684 -/* 0F0168 7F0BB638 240100CB */ li $at, 203 -/* 0F016C 7F0BB63C 10810011 */ beq $a0, $at, .L7F0BB684 -/* 0F0170 7F0BB640 240100CD */ li $at, 205 -/* 0F0174 7F0BB644 1081000F */ beq $a0, $at, .L7F0BB684 -/* 0F0178 7F0BB648 240100FC */ li $at, 252 -/* 0F017C 7F0BB64C 1081000D */ beq $a0, $at, .L7F0BB684 -/* 0F0180 7F0BB650 240100FE */ li $at, 254 -/* 0F0184 7F0BB654 1081000B */ beq $a0, $at, .L7F0BB684 -/* 0F0188 7F0BB658 240100FF */ li $at, 255 -/* 0F018C 7F0BB65C 10810009 */ beq $a0, $at, .L7F0BB684 -/* 0F0190 7F0BB660 24010100 */ li $at, 256 -/* 0F0194 7F0BB664 10810007 */ beq $a0, $at, .L7F0BB684 -/* 0F0198 7F0BB668 240101AC */ li $at, 428 -/* 0F019C 7F0BB66C 10810005 */ beq $a0, $at, .L7F0BB684 -/* 0F01A0 7F0BB670 240103D6 */ li $at, 982 -/* 0F01A4 7F0BB674 10810003 */ beq $a0, $at, .L7F0BB684 -/* 0F01A8 7F0BB678 24010567 */ li $at, 1383 -/* 0F01AC 7F0BB67C 14810003 */ bne $a0, $at, .L7F0BB68C -/* 0F01B0 7F0BB680 00001025 */ move $v0, $zero -.L7F0BB684: -/* 0F01B4 7F0BB684 03E00008 */ jr $ra -/* 0F01B8 7F0BB688 24020001 */ li $v0, 1 - -.L7F0BB68C: -/* 0F01BC 7F0BB68C 03E00008 */ jr $ra -/* 0F01C0 7F0BB690 00000000 */ nop -) -#endif diff --git a/src/game/lvl.c b/src/game/lvl.c index 7a1a509..4551e9e 100644 --- a/src/game/lvl.c +++ b/src/game/lvl.c @@ -490,7 +490,7 @@ glabel stage_load /* 0F27BC 7F0BDC8C 0240A025 */ move $s4, $s2 /* 0F27C0 7F0BDC90 24130004 */ li $s3, 4 .L7F0BDC94: -/* 0F27C4 7F0BDC94 0FC26919 */ jal get_num_players +/* 0F27C4 7F0BDC94 0FC26919 */ jal getPlayerCount /* 0F27C8 7F0BDC98 00000000 */ nop /* 0F27CC 7F0BDC9C 24010001 */ li $at, 1 /* 0F27D0 7F0BDCA0 14410009 */ bne $v0, $at, .L7F0BDCC8 @@ -605,7 +605,7 @@ glabel stage_load /* 0F2968 7F0BDE38 00000000 */ nop /* 0F296C 7F0BDE3C 0FC01410 */ jal something_with_ejected_cartridges /* 0F2970 7F0BDE40 00000000 */ nop -/* 0F2974 7F0BDE44 0FC26919 */ jal get_num_players +/* 0F2974 7F0BDE44 0FC26919 */ jal getPlayerCount /* 0F2978 7F0BDE48 00008025 */ move $s0, $zero /* 0F297C 7F0BDE4C 18400016 */ blez $v0, .L7F0BDEA8 /* 0F2980 7F0BDE50 00000000 */ nop @@ -626,7 +626,7 @@ glabel stage_load /* 0F29B8 7F0BDE88 00000000 */ nop /* 0F29BC 7F0BDE8C 0FC01CBE */ jal disable_onscreen_cheat_text /* 0F29C0 7F0BDE90 00000000 */ nop -/* 0F29C4 7F0BDE94 0FC26919 */ jal get_num_players +/* 0F29C4 7F0BDE94 0FC26919 */ jal getPlayerCount /* 0F29C8 7F0BDE98 26100001 */ addiu $s0, $s0, 1 /* 0F29CC 7F0BDE9C 0202082A */ slt $at, $s0, $v0 /* 0F29D0 7F0BDEA0 1420FFEC */ bnez $at, .L7F0BDE54 @@ -637,7 +637,7 @@ glabel stage_load .L7F0BDEB0: /* 0F29E0 7F0BDEB0 0FC0154D */ jal set_contents_of_80036078 /* 0F29E4 7F0BDEB4 00002025 */ move $a0, $zero -/* 0F29E8 7F0BDEB8 0FC348E0 */ jal remove_viewport_buffer +/* 0F29E8 7F0BDEB8 0FC348E0 */ jal zbufDeallocate /* 0F29EC 7F0BDEBC 00000000 */ nop /* 0F29F0 7F0BDEC0 0C000EEC */ jal setVideoWidthHeightToMode /* 0F29F4 7F0BDEC4 24040001 */ li $a0, 1 @@ -795,7 +795,7 @@ glabel stage_load /* 0F33BC 7F0BE84C 0240A025 */ move $s4, $s2 /* 0F33C0 7F0BE850 24130004 */ li $s3, 4 .Ljp7F0BE854: -/* 0F33C4 7F0BE854 0FC26C01 */ jal get_num_players +/* 0F33C4 7F0BE854 0FC26C01 */ jal getPlayerCount /* 0F33C8 7F0BE858 00000000 */ nop /* 0F33CC 7F0BE85C 24010001 */ li $at, 1 /* 0F33D0 7F0BE860 14410009 */ bne $v0, $at, .Ljp7F0BE888 @@ -910,7 +910,7 @@ glabel stage_load /* 0F3568 7F0BE9F8 00000000 */ nop /* 0F356C 7F0BE9FC 0FC01418 */ jal something_with_ejected_cartridges /* 0F3570 7F0BEA00 00000000 */ nop -/* 0F3574 7F0BEA04 0FC26C01 */ jal get_num_players +/* 0F3574 7F0BEA04 0FC26C01 */ jal getPlayerCount /* 0F3578 7F0BEA08 00008025 */ move $s0, $zero /* 0F357C 7F0BEA0C 18400016 */ blez $v0, .Ljp7F0BEA68 /* 0F3580 7F0BEA10 00000000 */ nop @@ -931,7 +931,7 @@ glabel stage_load /* 0F35B8 7F0BEA48 00000000 */ nop /* 0F35BC 7F0BEA4C 0FC01CC6 */ jal disable_onscreen_cheat_text /* 0F35C0 7F0BEA50 00000000 */ nop -/* 0F35C4 7F0BEA54 0FC26C01 */ jal get_num_players +/* 0F35C4 7F0BEA54 0FC26C01 */ jal getPlayerCount /* 0F35C8 7F0BEA58 26100001 */ addiu $s0, $s0, 1 /* 0F35CC 7F0BEA5C 0202082A */ slt $at, $s0, $v0 /* 0F35D0 7F0BEA60 1420FFEC */ bnez $at, .Ljp7F0BEA14 @@ -942,7 +942,7 @@ glabel stage_load .Ljp7F0BEA70: /* 0F35E0 7F0BEA70 0FC01555 */ jal set_contents_of_80036078 /* 0F35E4 7F0BEA74 00002025 */ move $a0, $zero -/* 0F35E8 7F0BEA78 0FC34C18 */ jal remove_viewport_buffer +/* 0F35E8 7F0BEA78 0FC34C18 */ jal zbufDeallocate /* 0F35EC 7F0BEA7C 00000000 */ nop /* 0F35F0 7F0BEA80 0C000EEC */ jal setVideoWidthHeightToMode /* 0F35F4 7F0BEA84 24040001 */ li $a0, 1 @@ -1348,7 +1348,7 @@ glabel sub_GAME_7F0BE30C /* 0F2F68 7F0BE438 10000102 */ b .L7F0BE844 /* 0F2F6C 7F0BE43C AFA20060 */ sw $v0, 0x60($sp) .L7F0BE440: -/* 0F2F70 7F0BE440 0FC26919 */ jal get_num_players +/* 0F2F70 7F0BE440 0FC26919 */ jal getPlayerCount /* 0F2F74 7F0BE444 00000000 */ nop /* 0F2F78 7F0BE448 8FAA0060 */ lw $t2, 0x60($sp) /* 0F2F7C 7F0BE44C AFA20044 */ sw $v0, 0x44($sp) @@ -1402,7 +1402,7 @@ glabel sub_GAME_7F0BE30C /* 0F3038 7F0BE508 0C001151 */ jal setvideo_far /* 0F303C 7F0BE50C C5CC11D0 */ lwc1 $f12, 0x11d0($t6) /* 0F3040 7F0BE510 8E0F0000 */ lw $t7, ($s0) -/* 0F3044 7F0BE514 0C001164 */ jal video_related_21 +/* 0F3044 7F0BE514 0C001164 */ jal set_page_aspect /* 0F3048 7F0BE518 C5EC11D4 */ lwc1 $f12, 0x11d4($t7) /* 0F304C 7F0BE51C 0C000FAD */ jal video_related_10 /* 0F3050 7F0BE520 8FA40060 */ lw $a0, 0x60($sp) @@ -1741,7 +1741,7 @@ glabel sub_GAME_7F0BE30C /* 0F3B68 7F0BEFF8 1000010B */ b .Ljp7F0BF428 /* 0F3B6C 7F0BEFFC AFA20060 */ sw $v0, 0x60($sp) .Ljp7F0BF000: -/* 0F3B70 7F0BF000 0FC26C01 */ jal get_num_players +/* 0F3B70 7F0BF000 0FC26C01 */ jal getPlayerCount /* 0F3B74 7F0BF004 00000000 */ nop /* 0F3B78 7F0BF008 8FAA0060 */ lw $t2, 0x60($sp) /* 0F3B7C 7F0BF00C AFA20044 */ sw $v0, 0x44($sp) @@ -1795,7 +1795,7 @@ glabel sub_GAME_7F0BE30C /* 0F3C38 7F0BF0C8 0C001151 */ jal setvideo_far /* 0F3C3C 7F0BF0CC C5CC11D0 */ lwc1 $f12, 0x11d0($t6) /* 0F3C40 7F0BF0D0 8E0F0000 */ lw $t7, ($s0) -/* 0F3C44 7F0BF0D4 0C001164 */ jal video_related_21 +/* 0F3C44 7F0BF0D4 0C001164 */ jal set_page_aspect /* 0F3C48 7F0BF0D8 C5EC11D4 */ lwc1 $f12, 0x11d4($t7) /* 0F3C4C 7F0BF0DC 0C000FAD */ jal video_related_10 /* 0F3C50 7F0BF0E0 8FA40060 */ lw $a0, 0x60($sp) @@ -2581,7 +2581,7 @@ glabel manage_mp_game /* 0F37CC 7F0BEC9C 1481FFEF */ bne $a0, $at, .L7F0BEC5C /* 0F37D0 7F0BECA0 24630001 */ addiu $v1, $v1, 1 .L7F0BECA4: -/* 0F37D4 7F0BECA4 0FC26919 */ jal get_num_players +/* 0F37D4 7F0BECA4 0FC26919 */ jal getPlayerCount /* 0F37D8 7F0BECA8 00000000 */ nop /* 0F37DC 7F0BECAC 28410002 */ slti $at, $v0, 2 /* 0F37E0 7F0BECB0 1420014B */ bnez $at, .L7F0BF1E0 @@ -2597,14 +2597,14 @@ glabel manage_mp_game /* 0F3808 7F0BECD8 00000000 */ nop /* 0F380C 7F0BECDC AFA00190 */ sw $zero, 0x190($sp) /* 0F3810 7F0BECE0 AFA0018C */ sw $zero, 0x18c($sp) -/* 0F3814 7F0BECE4 0FC26919 */ jal get_num_players +/* 0F3814 7F0BECE4 0FC26919 */ jal getPlayerCount /* 0F3818 7F0BECE8 AFA00188 */ sw $zero, 0x188($sp) /* 0F381C 7F0BECEC 8FA30190 */ lw $v1, 0x190($sp) /* 0F3820 7F0BECF0 8FA5018C */ lw $a1, 0x18c($sp) /* 0F3824 7F0BECF4 1840001B */ blez $v0, .L7F0BED64 /* 0F3828 7F0BECF8 8FA60188 */ lw $a2, 0x188($sp) -/* 0F382C 7F0BECFC 3C0E8008 */ lui $t6, %hi(ptr_BONDdata_p1) -/* 0F3830 7F0BED00 25CE9EE0 */ addiu $t6, %lo(ptr_BONDdata_p1) # addiu $t6, $t6, -0x6120 +/* 0F382C 7F0BECFC 3C0E8008 */ lui $t6, %hi(players) +/* 0F3830 7F0BED00 25CE9EE0 */ addiu $t6, %lo(players) # addiu $t6, $t6, -0x6120 /* 0F3834 7F0BED04 0003C880 */ sll $t9, $v1, 2 /* 0F3838 7F0BED08 032E2021 */ addu $a0, $t9, $t6 .L7F0BED0C: @@ -2623,7 +2623,7 @@ glabel manage_mp_game .L7F0BED3C: /* 0F386C 7F0BED3C AFA4001C */ sw $a0, 0x1c($sp) /* 0F3870 7F0BED40 AFA5018C */ sw $a1, 0x18c($sp) -/* 0F3874 7F0BED44 0FC26919 */ jal get_num_players +/* 0F3874 7F0BED44 0FC26919 */ jal getPlayerCount /* 0F3878 7F0BED48 AFA60188 */ sw $a2, 0x188($sp) /* 0F387C 7F0BED4C 8FA30190 */ lw $v1, 0x190($sp) /* 0F3880 7F0BED50 8FA4001C */ lw $a0, 0x1c($sp) @@ -2656,7 +2656,7 @@ glabel manage_mp_game /* 0F38E4 7F0BEDB4 01C4082A */ slt $at, $t6, $a0 /* 0F38E8 7F0BEDB8 14200012 */ bnez $at, .L7F0BEE04 /* 0F38EC 7F0BEDBC 00000000 */ nop -/* 0F38F0 7F0BEDC0 0FC26919 */ jal get_num_players +/* 0F38F0 7F0BEDC0 0FC26919 */ jal getPlayerCount /* 0F38F4 7F0BEDC4 AFA0017C */ sw $zero, 0x17c($sp) /* 0F38F8 7F0BEDC8 1840000E */ blez $v0, .L7F0BEE04 /* 0F38FC 7F0BEDCC 00000000 */ nop @@ -2668,7 +2668,7 @@ glabel manage_mp_game /* 0F3910 7F0BEDE0 2484B704 */ addiu $a0, %lo(aOneMinuteLeft) # addiu $a0, $a0, -0x48fc /* 0F3914 7F0BEDE4 8FAF017C */ lw $t7, 0x17c($sp) /* 0F3918 7F0BEDE8 25F80001 */ addiu $t8, $t7, 1 -/* 0F391C 7F0BEDEC 0FC26919 */ jal get_num_players +/* 0F391C 7F0BEDEC 0FC26919 */ jal getPlayerCount /* 0F3920 7F0BEDF0 AFB8017C */ sw $t8, 0x17c($sp) /* 0F3924 7F0BEDF4 8FB9017C */ lw $t9, 0x17c($sp) /* 0F3928 7F0BEDF8 0322082A */ slt $at, $t9, $v0 @@ -2730,16 +2730,16 @@ glabel manage_mp_game /* 0F39F8 7F0BEEC8 8F398374 */ lw $t9, %lo(clock_timer)($t9) /* 0F39FC 7F0BEECC 1320003A */ beqz $t9, .L7F0BEFB8 /* 0F3A00 7F0BEED0 00000000 */ nop -/* 0F3A04 7F0BEED4 0FC26919 */ jal get_num_players +/* 0F3A04 7F0BEED4 0FC26919 */ jal getPlayerCount /* 0F3A08 7F0BEED8 00000000 */ nop /* 0F3A0C 7F0BEEDC 00403825 */ move $a3, $v0 /* 0F3A10 7F0BEEE0 00002825 */ move $a1, $zero /* 0F3A14 7F0BEEE4 00003025 */ move $a2, $zero /* 0F3A18 7F0BEEE8 18400029 */ blez $v0, .L7F0BEF90 /* 0F3A1C 7F0BEEEC 00002025 */ move $a0, $zero -/* 0F3A20 7F0BEEF0 3C038008 */ lui $v1, %hi(ptr_BONDdata_p1) +/* 0F3A20 7F0BEEF0 3C038008 */ lui $v1, %hi(players) /* 0F3A24 7F0BEEF4 44800000 */ mtc1 $zero, $f0 -/* 0F3A28 7F0BEEF8 24639EE0 */ addiu $v1, %lo(ptr_BONDdata_p1) # addiu $v1, $v1, -0x6120 +/* 0F3A28 7F0BEEF8 24639EE0 */ addiu $v1, %lo(players) # addiu $v1, $v1, -0x6120 .L7F0BEEFC: /* 0F3A2C 7F0BEEFC 8C620000 */ lw $v0, ($v1) /* 0F3A30 7F0BEF00 8C4F00D8 */ lw $t7, 0xd8($v0) @@ -2802,7 +2802,7 @@ glabel manage_mp_game /* 0F3AFC 7F0BEFCC 8DEF8374 */ lw $t7, %lo(clock_timer)($t7) /* 0F3B00 7F0BEFD0 11E00083 */ beqz $t7, .L7F0BF1E0 /* 0F3B04 7F0BEFD4 00000000 */ nop -/* 0F3B08 7F0BEFD8 0FC26919 */ jal get_num_players +/* 0F3B08 7F0BEFD8 0FC26919 */ jal getPlayerCount /* 0F3B0C 7F0BEFDC 00000000 */ nop /* 0F3B10 7F0BEFE0 44800000 */ mtc1 $zero, $f0 /* 0F3B14 7F0BEFE4 00405025 */ move $t2, $v0 @@ -2818,8 +2818,8 @@ glabel manage_mp_game /* 0F3B38 7F0BF008 30490003 */ andi $t1, $v0, 3 /* 0F3B3C 7F0BF00C 11200019 */ beqz $t1, .L7F0BF074 /* 0F3B40 7F0BF010 000C5880 */ sll $t3, $t4, 2 -/* 0F3B44 7F0BF014 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) -/* 0F3B48 7F0BF018 27189EE0 */ addiu $t8, %lo(ptr_BONDdata_p1) # addiu $t8, $t8, -0x6120 +/* 0F3B44 7F0BF014 3C188008 */ lui $t8, %hi(players) +/* 0F3B48 7F0BF018 27189EE0 */ addiu $t8, %lo(players) # addiu $t8, $t8, -0x6120 /* 0F3B4C 7F0BF01C 00007080 */ sll $t6, $zero, 2 /* 0F3B50 7F0BF020 0000C8C0 */ sll $t9, $zero, 3 /* 0F3B54 7F0BF024 0320C823 */ subu $t9, $t9, $zero @@ -2845,10 +2845,10 @@ glabel manage_mp_game /* 0F3B9C 7F0BF06C 00AF2821 */ addu $a1, $a1, $t7 /* 0F3BA0 7F0BF070 10E2002C */ beq $a3, $v0, .L7F0BF124 .L7F0BF074: -/* 0F3BA4 7F0BF074 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) +/* 0F3BA4 7F0BF074 3C188008 */ lui $t8, %hi(players) /* 0F3BA8 7F0BF078 0007C8C0 */ sll $t9, $a3, 3 /* 0F3BAC 7F0BF07C 0327C823 */ subu $t9, $t9, $a3 -/* 0F3BB0 7F0BF080 27189EE0 */ addiu $t8, %lo(ptr_BONDdata_p1) # addiu $t8, $t8, -0x6120 +/* 0F3BB0 7F0BF080 27189EE0 */ addiu $t8, %lo(players) # addiu $t8, $t8, -0x6120 /* 0F3BB4 7F0BF084 00077080 */ sll $t6, $a3, 2 /* 0F3BB8 7F0BF088 01D81821 */ addu $v1, $t6, $t8 /* 0F3BBC 7F0BF08C 0019C900 */ sll $t9, $t9, 4 @@ -2904,8 +2904,8 @@ glabel manage_mp_game /* 0F3C6C 7F0BF13C 000F7900 */ sll $t7, $t7, 4 /* 0F3C70 7F0BF140 01EE1821 */ addu $v1, $t7, $t6 /* 0F3C74 7F0BF144 906F0068 */ lbu $t7, 0x68($v1) -/* 0F3C78 7F0BF148 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) -/* 0F3C7C 7F0BF14C 27189EE0 */ addiu $t8, %lo(ptr_BONDdata_p1) # addiu $t8, $t8, -0x6120 +/* 0F3C78 7F0BF148 3C188008 */ lui $t8, %hi(players) +/* 0F3C7C 7F0BF14C 27189EE0 */ addiu $t8, %lo(players) # addiu $t8, $t8, -0x6120 /* 0F3C80 7F0BF150 000CC880 */ sll $t9, $t4, 2 /* 0F3C84 7F0BF154 15E00003 */ bnez $t7, .L7F0BF164 /* 0F3C88 7F0BF158 03382021 */ addu $a0, $t9, $t8 @@ -3458,7 +3458,7 @@ glabel manage_mp_game /* 0F4440 7F0BF8D0 1481FFEF */ bne $a0, $at, .Ljp7F0BF890 /* 0F4444 7F0BF8D4 24630001 */ addiu $v1, $v1, 1 .Ljp7F0BF8D8: -/* 0F4448 7F0BF8D8 0FC26C01 */ jal get_num_players +/* 0F4448 7F0BF8D8 0FC26C01 */ jal getPlayerCount /* 0F444C 7F0BF8DC 00000000 */ nop /* 0F4450 7F0BF8E0 28410002 */ slti $at, $v0, 2 /* 0F4454 7F0BF8E4 1420014C */ bnez $at, .Ljp7F0BFE18 @@ -3474,14 +3474,14 @@ glabel manage_mp_game /* 0F447C 7F0BF90C 00000000 */ nop /* 0F4480 7F0BF910 AFA00190 */ sw $zero, 0x190($sp) /* 0F4484 7F0BF914 AFA0018C */ sw $zero, 0x18c($sp) -/* 0F4488 7F0BF918 0FC26C01 */ jal get_num_players +/* 0F4488 7F0BF918 0FC26C01 */ jal getPlayerCount /* 0F448C 7F0BF91C AFA00188 */ sw $zero, 0x188($sp) /* 0F4490 7F0BF920 8FA30190 */ lw $v1, 0x190($sp) /* 0F4494 7F0BF924 8FA5018C */ lw $a1, 0x18c($sp) /* 0F4498 7F0BF928 1840001B */ blez $v0, .Ljp7F0BF998 /* 0F449C 7F0BF92C 8FA60188 */ lw $a2, 0x188($sp) -/* 0F44A0 7F0BF930 3C0E8008 */ lui $t6, %hi(ptr_BONDdata_p1) # $t6, 0x8008 -/* 0F44A4 7F0BF934 25CE9F50 */ addiu $t6, %lo(ptr_BONDdata_p1) # addiu $t6, $t6, -0x60b0 +/* 0F44A0 7F0BF930 3C0E8008 */ lui $t6, %hi(players) # $t6, 0x8008 +/* 0F44A4 7F0BF934 25CE9F50 */ addiu $t6, %lo(players) # addiu $t6, $t6, -0x60b0 /* 0F44A8 7F0BF938 0003C880 */ sll $t9, $v1, 2 /* 0F44AC 7F0BF93C 032E2021 */ addu $a0, $t9, $t6 .Ljp7F0BF940: @@ -3500,7 +3500,7 @@ glabel manage_mp_game .Ljp7F0BF970: /* 0F44E0 7F0BF970 AFA4001C */ sw $a0, 0x1c($sp) /* 0F44E4 7F0BF974 AFA5018C */ sw $a1, 0x18c($sp) -/* 0F44E8 7F0BF978 0FC26C01 */ jal get_num_players +/* 0F44E8 7F0BF978 0FC26C01 */ jal getPlayerCount /* 0F44EC 7F0BF97C AFA60188 */ sw $a2, 0x188($sp) /* 0F44F0 7F0BF980 8FA30190 */ lw $v1, 0x190($sp) /* 0F44F4 7F0BF984 8FA4001C */ lw $a0, 0x1c($sp) @@ -3533,7 +3533,7 @@ glabel manage_mp_game /* 0F4558 7F0BF9E8 01C4082A */ slt $at, $t6, $a0 /* 0F455C 7F0BF9EC 14200013 */ bnez $at, .Ljp7F0BFA3C /* 0F4560 7F0BF9F0 00000000 */ nop -/* 0F4564 7F0BF9F4 0FC26C01 */ jal get_num_players +/* 0F4564 7F0BF9F4 0FC26C01 */ jal getPlayerCount /* 0F4568 7F0BF9F8 AFA0017C */ sw $zero, 0x17c($sp) /* 0F456C 7F0BF9FC 1840000F */ blez $v0, .Ljp7F0BFA3C /* 0F4570 7F0BFA00 00000000 */ nop @@ -3546,7 +3546,7 @@ glabel manage_mp_game /* 0F4588 7F0BFA18 00402025 */ move $a0, $v0 /* 0F458C 7F0BFA1C 8FAF017C */ lw $t7, 0x17c($sp) /* 0F4590 7F0BFA20 25F80001 */ addiu $t8, $t7, 1 -/* 0F4594 7F0BFA24 0FC26C01 */ jal get_num_players +/* 0F4594 7F0BFA24 0FC26C01 */ jal getPlayerCount /* 0F4598 7F0BFA28 AFB8017C */ sw $t8, 0x17c($sp) /* 0F459C 7F0BFA2C 8FB9017C */ lw $t9, 0x17c($sp) /* 0F45A0 7F0BFA30 0322082A */ slt $at, $t9, $v0 @@ -3608,16 +3608,16 @@ glabel manage_mp_game /* 0F4670 7F0BFB00 8F3983A4 */ lw $t9, %lo(clock_timer)($t9) /* 0F4674 7F0BFB04 1320003A */ beqz $t9, .Ljp7F0BFBF0 /* 0F4678 7F0BFB08 00000000 */ nop -/* 0F467C 7F0BFB0C 0FC26C01 */ jal get_num_players +/* 0F467C 7F0BFB0C 0FC26C01 */ jal getPlayerCount /* 0F4680 7F0BFB10 00000000 */ nop /* 0F4684 7F0BFB14 00403825 */ move $a3, $v0 /* 0F4688 7F0BFB18 00002825 */ move $a1, $zero /* 0F468C 7F0BFB1C 00003025 */ move $a2, $zero /* 0F4690 7F0BFB20 18400029 */ blez $v0, .Ljp7F0BFBC8 /* 0F4694 7F0BFB24 00002025 */ move $a0, $zero -/* 0F4698 7F0BFB28 3C038008 */ lui $v1, %hi(ptr_BONDdata_p1) # $v1, 0x8008 +/* 0F4698 7F0BFB28 3C038008 */ lui $v1, %hi(players) # $v1, 0x8008 /* 0F469C 7F0BFB2C 44800000 */ mtc1 $zero, $f0 -/* 0F46A0 7F0BFB30 24639F50 */ addiu $v1, %lo(ptr_BONDdata_p1) # addiu $v1, $v1, -0x60b0 +/* 0F46A0 7F0BFB30 24639F50 */ addiu $v1, %lo(players) # addiu $v1, $v1, -0x60b0 .Ljp7F0BFB34: /* 0F46A4 7F0BFB34 8C620000 */ lw $v0, ($v1) /* 0F46A8 7F0BFB38 8C4F00D8 */ lw $t7, 0xd8($v0) @@ -3680,7 +3680,7 @@ glabel manage_mp_game /* 0F4774 7F0BFC04 8DEF83A4 */ lw $t7, %lo(clock_timer)($t7) /* 0F4778 7F0BFC08 11E00083 */ beqz $t7, .Ljp7F0BFE18 /* 0F477C 7F0BFC0C 00000000 */ nop -/* 0F4780 7F0BFC10 0FC26C01 */ jal get_num_players +/* 0F4780 7F0BFC10 0FC26C01 */ jal getPlayerCount /* 0F4784 7F0BFC14 00000000 */ nop /* 0F4788 7F0BFC18 44800000 */ mtc1 $zero, $f0 /* 0F478C 7F0BFC1C 00405025 */ move $t2, $v0 @@ -3696,8 +3696,8 @@ glabel manage_mp_game /* 0F47B0 7F0BFC40 30490003 */ andi $t1, $v0, 3 /* 0F47B4 7F0BFC44 11200019 */ beqz $t1, .Ljp7F0BFCAC /* 0F47B8 7F0BFC48 000C5880 */ sll $t3, $t4, 2 -/* 0F47BC 7F0BFC4C 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) # $t8, 0x8008 -/* 0F47C0 7F0BFC50 27189F50 */ addiu $t8, %lo(ptr_BONDdata_p1) # addiu $t8, $t8, -0x60b0 +/* 0F47BC 7F0BFC4C 3C188008 */ lui $t8, %hi(players) # $t8, 0x8008 +/* 0F47C0 7F0BFC50 27189F50 */ addiu $t8, %lo(players) # addiu $t8, $t8, -0x60b0 /* 0F47C4 7F0BFC54 00007080 */ sll $t6, $zero, 2 /* 0F47C8 7F0BFC58 0000C8C0 */ sll $t9, $zero, 3 /* 0F47CC 7F0BFC5C 0320C823 */ subu $t9, $t9, $zero @@ -3723,10 +3723,10 @@ glabel manage_mp_game /* 0F4814 7F0BFCA4 00AF2821 */ addu $a1, $a1, $t7 /* 0F4818 7F0BFCA8 10E2002C */ beq $a3, $v0, .Ljp7F0BFD5C .Ljp7F0BFCAC: -/* 0F481C 7F0BFCAC 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) # $t8, 0x8008 +/* 0F481C 7F0BFCAC 3C188008 */ lui $t8, %hi(players) # $t8, 0x8008 /* 0F4820 7F0BFCB0 0007C8C0 */ sll $t9, $a3, 3 /* 0F4824 7F0BFCB4 0327C823 */ subu $t9, $t9, $a3 -/* 0F4828 7F0BFCB8 27189F50 */ addiu $t8, %lo(ptr_BONDdata_p1) # addiu $t8, $t8, -0x60b0 +/* 0F4828 7F0BFCB8 27189F50 */ addiu $t8, %lo(players) # addiu $t8, $t8, -0x60b0 /* 0F482C 7F0BFCBC 00077080 */ sll $t6, $a3, 2 /* 0F4830 7F0BFCC0 01D81821 */ addu $v1, $t6, $t8 /* 0F4834 7F0BFCC4 0019C900 */ sll $t9, $t9, 4 @@ -3782,8 +3782,8 @@ glabel manage_mp_game /* 0F48E4 7F0BFD74 000F7900 */ sll $t7, $t7, 4 /* 0F48E8 7F0BFD78 01EE1821 */ addu $v1, $t7, $t6 /* 0F48EC 7F0BFD7C 906F0068 */ lbu $t7, 0x68($v1) -/* 0F48F0 7F0BFD80 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) # $t8, 0x8008 -/* 0F48F4 7F0BFD84 27189F50 */ addiu $t8, %lo(ptr_BONDdata_p1) # addiu $t8, $t8, -0x60b0 +/* 0F48F0 7F0BFD80 3C188008 */ lui $t8, %hi(players) # $t8, 0x8008 +/* 0F48F4 7F0BFD84 27189F50 */ addiu $t8, %lo(players) # addiu $t8, $t8, -0x60b0 /* 0F48F8 7F0BFD88 000CC880 */ sll $t9, $t4, 2 /* 0F48FC 7F0BFD8C 15E00003 */ bnez $t7, .Ljp7F0BFD9C /* 0F4900 7F0BFD90 03382021 */ addu $a0, $t9, $t8 diff --git a/src/game/mainmenu.c b/src/game/mainmenu.c index 354f79b..90346e8 100644 --- a/src/game/mainmenu.c +++ b/src/game/mainmenu.c @@ -9,6 +9,7 @@ #include "game/bond.h" #include "game/chrobjdata.h" #include "joy.h" +#include "video.h" struct point { f32 x; f32 y; @@ -327,29 +328,14 @@ u8 cheat_activated_78; s32 array_favweapon[4][2]; //CODE.bss:80069710 -s32 mp_char_cur_select_player1; -//CODE.bss:80069714 -s32 mp_char_cur_select_player2; -//CODE.bss:80069718 -s32 mp_char_cur_select_player3; -//CODE.bss:8006971C -s32 mp_char_cur_select_player4; +s32 mp_char_cur_select_player[4]; + //CODE.bss:80069720 -s32 mp_char_prev_select_player1; -//CODE.bss:80069724 -s32 mp_char_prev_select_player2; -//CODE.bss:80069728 -s32 mp_char_prev_select_player3; -//CODE.bss:8006972C -s32 mp_char_prev_select_player4; +s32 mp_char_prev_select_player[4]; + //CODE.bss:80069730 -s32 dword_CODE_bss_80069730; -//CODE.bss:80069734 -s32 dword_CODE_bss_80069734; -//CODE.bss:80069738 -s32 dword_CODE_bss_80069738; -//CODE.bss:8006973C -s32 dword_CODE_bss_8006973C; +s32 dword_CODE_bss_80069730[4]; + //CODE.bss:80069740 s32 has_selected_char_player1; //CODE.bss:80069744 @@ -439,9 +425,9 @@ s32 highlight_aimadjustment; char dword_CODE_bss_800697F0[0x130]; -s32 current_menu = -1; -s32 menu_update = -1; -s32 maybe_prev_menu = -1; +MENU current_menu = MENU_INVALID; +MENU menu_update = MENU_INVALID; +MENU maybe_prev_menu = MENU_INVALID; s32 menu_timer = 0; s32 tab_1_selected = FALSE; @@ -454,7 +440,7 @@ s32 tab_3_highlight = FALSE; s32 selected_folder_num = 0; s32 selected_folder_num_copy = 0; -s32 gamemode = GAMEMODE_INTRO; +GAMEMODE gamemode = GAMEMODE_INTRO; s32 selected_stage = -1; s32 briefingpage = -1; DIFFICULTY selected_difficulty = DIFFICULTY_MULTI; @@ -3022,31 +3008,35 @@ void update_menu00_legalscreen(void) #ifdef NONMATCHING -void interface_menu00_legalscreen(void) { - s32 temp; - setvideo_far(60.0f); - video_related_21(1.3333334f); - set_page_height(100.0f, 10000.0f); - set_video2_settings_offset_24(0); - temp = menu_timer + clock_timer; - menu_timer = temp; - if (temp >= 0xF1) { - if (get_attached_controller_count() > 0) { - while (is_first_time_on_legal_screen == 0) { - set_menu_to_mode(MENU_NINTENDO_LOGO,1); - return; - } - set_menu_to_mode(MENU_NO_CONTROLLERS,1); - return; - } - if (get_controller_buttons_pressed(0, 0xFFFF)) { - if ((is_first_time_on_legal_screen == 0) && (is_first_time_on_main_menu == 0)) { - set_menu_to_mode(MENU_FILE_SELECT,1); - return; - } - set_menu_to_mode(MENU_NINTENDO_LOGO,1); - } - } +void interface_menu00_legalscreen(void) +{ + setvideo_far(60.0f); + set_page_aspect(1.333333f); + set_page_height(100.0f, 10000.0f); + set_video2_settings_offset_24(0); + + menu_timer += clock_timer; + if (menu_timer >= 0xF1) + { + if ((get_attached_controller_count() > 0) && (is_first_time_on_legal_screen == 0)) + { + set_menu_to_mode(MENU_NINTENDO_LOGO,1); + return; + } else + { + set_menu_to_mode(MENU_NO_CONTROLLERS,1); + return; + } + } + if (get_controller_buttons_pressed(0, 0xFFFF)) + { + if ((is_first_time_on_legal_screen == 0) && (is_first_time_on_main_menu == 0)) + { + set_menu_to_mode(MENU_FILE_SELECT,1); + return; + } + set_menu_to_mode(MENU_NINTENDO_LOGO,1); + } } #else GLOBAL_ASM( @@ -3064,7 +3054,7 @@ glabel interface_menu00_legalscreen /* 03F21C 7F00A6EC 0C001151 */ jal setvideo_far /* 03F220 7F00A6F0 00000000 */ nop /* 03F224 7F00A6F4 3C018005 */ lui $at, %hi(D_800519E4) -/* 03F228 7F00A6F8 0C001164 */ jal video_related_21 +/* 03F228 7F00A6F8 0C001164 */ jal set_page_aspect /* 03F22C 7F00A6FC C42C19E4 */ lwc1 $f12, %lo(D_800519E4)($at) /* 03F230 7F00A700 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 03F234 7F00A704 44816000 */ mtc1 $at, $f12 @@ -3280,7 +3270,7 @@ loop_1: } temp_t0->unk0 = (s32) temp_t6->unk0; insert_imageDL(arg0); - sub_GAME_7F059694(&spA0, 0.0f, 0.0f, 0x457a0000, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); + matrix_4x4_7F059694(&spA0, 0.0f, 0.0f, 0x457a0000, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); temp_ret = sub_GAME_7F0BD714(something_legalscreen_constructor->unk8->unkE << 6); spF4 = temp_ret; matrix_4x4_copy(&spA0, temp_ret); @@ -3360,7 +3350,7 @@ glabel constructor_menu00_legalscreen /* 03F4A4 7F00A974 E7A00018 */ swc1 $f0, 0x18($sp) /* 03F4A8 7F00A978 E7A0001C */ swc1 $f0, 0x1c($sp) /* 03F4AC 7F00A97C E7A00024 */ swc1 $f0, 0x24($sp) -/* 03F4B0 7F00A980 0FC165A5 */ jal sub_GAME_7F059694 +/* 03F4B0 7F00A980 0FC165A5 */ jal matrix_4x4_7F059694 /* 03F4B4 7F00A984 E7A40020 */ swc1 $f4, 0x20($sp) /* 03F4B8 7F00A988 3C138003 */ lui $s3, %hi(something_legalscreen_constructor) /* 03F4BC 7F00A98C 2673A958 */ addiu $s3, %lo(something_legalscreen_constructor) # addiu $s3, $s3, -0x56a8 @@ -3471,87 +3461,20 @@ void dummy7F00AAF8(void) { -#ifdef NONMATCHING -void *interface_menu17_switchscreens(void) +void interface_menu17_switchscreens(void) { - s32 temp_t7; - - setvideo_far(0x42700000); - video_related_21(D_800519EC); - set_page_height(0x42c80000, D_800519F0); + setvideo_far(60.0f); + set_page_aspect(1.3333334f); + set_page_height(100.0f, 10000.0f); set_video2_settings_offset_24(0); - temp_t7 = menu_timer + 1; - menu_timer = temp_t7; - if (temp_t7 >= 4) + + menu_timer++; + if ((menu_timer >= 4) && (spectrum_related_flag == 0) && (is_emulating_spectrum == 0)) { - if (spectrum_related_flag == 0) - { - if (is_emulating_spectrum == 0) - { - maybe_prev_menu = (s32) menu_update; - menu_update = -1; - } - } + maybe_prev_menu = menu_update; + menu_update = -1; } - return &menu_timer; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800519EC -.word 0x3FAAAAAB /* 1.3333334;*/ -glabel D_800519F0 -.word 0x461C4000 /* 10000.0;*/ -.text -glabel interface_menu17_switchscreens -/* 03F630 7F00AB00 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 03F634 7F00AB04 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 03F638 7F00AB08 AFBF0014 */ sw $ra, 0x14($sp) -/* 03F63C 7F00AB0C 44816000 */ mtc1 $at, $f12 -/* 03F640 7F00AB10 0C001151 */ jal setvideo_far -/* 03F644 7F00AB14 00000000 */ nop -/* 03F648 7F00AB18 3C018005 */ lui $at, %hi(D_800519EC) -/* 03F64C 7F00AB1C 0C001164 */ jal video_related_21 -/* 03F650 7F00AB20 C42C19EC */ lwc1 $f12, %lo(D_800519EC)($at) -/* 03F654 7F00AB24 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 03F658 7F00AB28 44816000 */ mtc1 $at, $f12 -/* 03F65C 7F00AB2C 3C018005 */ lui $at, %hi(D_800519F0) -/* 03F660 7F00AB30 0C001194 */ jal set_page_height -/* 03F664 7F00AB34 C42E19F0 */ lwc1 $f14, %lo(D_800519F0)($at) -/* 03F668 7F00AB38 0C00114D */ jal set_video2_settings_offset_24 -/* 03F66C 7F00AB3C 00002025 */ move $a0, $zero -/* 03F670 7F00AB40 3C028003 */ lui $v0, %hi(menu_timer) -/* 03F674 7F00AB44 2442A8CC */ addiu $v0, %lo(menu_timer) # addiu $v0, $v0, -0x5734 -/* 03F678 7F00AB48 8C4E0000 */ lw $t6, ($v0) -/* 03F67C 7F00AB4C 3C198003 */ lui $t9, %hi(spectrum_related_flag) -/* 03F680 7F00AB50 25CF0001 */ addiu $t7, $t6, 1 -/* 03F684 7F00AB54 29E10004 */ slti $at, $t7, 4 -/* 03F688 7F00AB58 1420000F */ bnez $at, .L7F00AB98 -/* 03F68C 7F00AB5C AC4F0000 */ sw $t7, ($v0) -/* 03F690 7F00AB60 8F39A944 */ lw $t9, %lo(spectrum_related_flag)($t9) -/* 03F694 7F00AB64 3C088003 */ lui $t0, %hi(is_emulating_spectrum) -/* 03F698 7F00AB68 5720000C */ bnezl $t9, .L7F00AB9C -/* 03F69C 7F00AB6C 8FBF0014 */ lw $ra, 0x14($sp) -/* 03F6A0 7F00AB70 8D08A948 */ lw $t0, %lo(is_emulating_spectrum)($t0) -/* 03F6A4 7F00AB74 3C028003 */ lui $v0, %hi(menu_update) -/* 03F6A8 7F00AB78 2442A8C4 */ addiu $v0, %lo(menu_update) # addiu $v0, $v0, -0x573c -/* 03F6AC 7F00AB7C 55000007 */ bnezl $t0, .L7F00AB9C -/* 03F6B0 7F00AB80 8FBF0014 */ lw $ra, 0x14($sp) -/* 03F6B4 7F00AB84 8C490000 */ lw $t1, ($v0) -/* 03F6B8 7F00AB88 3C018003 */ lui $at, %hi(maybe_prev_menu) -/* 03F6BC 7F00AB8C 240AFFFF */ li $t2, -1 -/* 03F6C0 7F00AB90 AC29A8C8 */ sw $t1, %lo(maybe_prev_menu)($at) -/* 03F6C4 7F00AB94 AC4A0000 */ sw $t2, ($v0) -.L7F00AB98: -/* 03F6C8 7F00AB98 8FBF0014 */ lw $ra, 0x14($sp) -.L7F00AB9C: -/* 03F6CC 7F00AB9C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 03F6D0 7F00ABA0 03E00008 */ jr $ra -/* 03F6D4 7F00ABA4 00000000 */ nop -) -#endif - - void constructor_menu17_switchscreens(Gfx * DL) @@ -3568,7 +3491,7 @@ void constructor_menu17_switchscreens(Gfx * DL) #ifdef NONMATCHING void init_menu01_nintendo(void) { - struct xyzpoint local_c; + struct coord local_c; menu_timer = 0; local_c.x = xyzpoint_8002aafc.x; @@ -3663,107 +3586,30 @@ void update_menu01_nintendo(void) -#ifdef NONMATCHING -extern f32 menu01_aspect; -extern f32 menu01_pageheight; - void interface_menu01_nintendo(void) { setvideo_far(60.0f); - video_related_21(menu01_aspect); - set_page_height(100.0f, menu01_pageheight); - set_video2_settings_offset_24(0.0f); + set_page_aspect(1.3333334f); + set_page_height(100.0f, 10000.0f); + set_video2_settings_offset_24(0); menu_timer = menu_timer + clock_timer; - if (menu_timer < 501) - { - if (get_controller_buttons_pressed(0, 0xffff) != 0) - { - if (is_first_time_on_main_menu == 0) - { - set_menu_to_mode(MENU_FILE_SELECT, 1); - } - else - { - prev_keypresses = 1; - set_menu_to_mode(MENU_RAREWARE_LOGO, 1); - } - } - } - else + if (menu_timer >= 0x1F5) { set_menu_to_mode(MENU_RAREWARE_LOGO, 1); return; } + if (get_controller_buttons_pressed(0, 0xFFFF)) + { + if (is_first_time_on_main_menu == 0) + { + set_menu_to_mode(MENU_FILE_SELECT, 1); + return; + } + prev_keypresses = 1; + set_menu_to_mode(MENU_RAREWARE_LOGO, 1); + } } -#else -GLOBAL_ASM( -.late_rodata -glabel menu01_aspect -.word 0x3FAAAAAB /* 1.3333334;*/ -glabel menu01_pageheight -.word 0x461C4000 /* 10000.0;*/ -.text -glabel interface_menu01_nintendo -/* 03F7F8 7F00ACC8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 03F7FC 7F00ACCC 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 03F800 7F00ACD0 AFBF0014 */ sw $ra, 0x14($sp) -/* 03F804 7F00ACD4 44816000 */ mtc1 $at, $f12 -/* 03F808 7F00ACD8 0C001151 */ jal setvideo_far -/* 03F80C 7F00ACDC 00000000 */ nop -/* 03F810 7F00ACE0 3C018005 */ lui $at, %hi(menu01_aspect) -/* 03F814 7F00ACE4 0C001164 */ jal video_related_21 -/* 03F818 7F00ACE8 C42C19FC */ lwc1 $f12, %lo(menu01_aspect)($at) -/* 03F81C 7F00ACEC 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 03F820 7F00ACF0 44816000 */ mtc1 $at, $f12 -/* 03F824 7F00ACF4 3C018005 */ lui $at, %hi(menu01_pageheight) -/* 03F828 7F00ACF8 0C001194 */ jal set_page_height -/* 03F82C 7F00ACFC C42E1A00 */ lwc1 $f14, %lo(menu01_pageheight)($at) -/* 03F830 7F00AD00 0C00114D */ jal set_video2_settings_offset_24 -/* 03F834 7F00AD04 00002025 */ move $a0, $zero -/* 03F838 7F00AD08 3C028003 */ lui $v0, %hi(menu_timer) -/* 03F83C 7F00AD0C 2442A8CC */ addiu $v0, %lo(menu_timer) # addiu $v0, $v0, -0x5734 -/* 03F840 7F00AD10 3C0F8005 */ lui $t7, %hi(clock_timer) -/* 03F844 7F00AD14 8DEF8374 */ lw $t7, %lo(clock_timer)($t7) -/* 03F848 7F00AD18 8C4E0000 */ lw $t6, ($v0) -/* 03F84C 7F00AD1C 24050001 */ li $a1, 1 -/* 03F850 7F00AD20 00002025 */ move $a0, $zero -/* 03F854 7F00AD24 01CFC021 */ addu $t8, $t6, $t7 -/* 03F858 7F00AD28 2B0101F5 */ slti $at, $t8, 0x1f5 -/* 03F85C 7F00AD2C 14200005 */ bnez $at, .L7F00AD44 -/* 03F860 7F00AD30 AC580000 */ sw $t8, ($v0) -/* 03F864 7F00AD34 0FC06975 */ jal set_menu_to_mode -/* 03F868 7F00AD38 24040002 */ li $a0, 2 -/* 03F86C 7F00AD3C 10000013 */ b .L7F00AD8C -/* 03F870 7F00AD40 8FBF0014 */ lw $ra, 0x14($sp) -.L7F00AD44: -/* 03F874 7F00AD44 0C0030EB */ jal get_controller_buttons_pressed -/* 03F878 7F00AD48 3405FFFF */ li $a1, 65535 -/* 03F87C 7F00AD4C 1040000E */ beqz $v0, .L7F00AD88 -/* 03F880 7F00AD50 3C088003 */ lui $t0, %hi(is_first_time_on_main_menu) -/* 03F884 7F00AD54 8D08A930 */ lw $t0, %lo(is_first_time_on_main_menu)($t0) -/* 03F888 7F00AD58 24090001 */ li $t1, 1 -/* 03F88C 7F00AD5C 3C018003 */ lui $at, %hi(prev_keypresses) -/* 03F890 7F00AD60 15000006 */ bnez $t0, .L7F00AD7C -/* 03F894 7F00AD64 24040002 */ li $a0, 2 -/* 03F898 7F00AD68 24040005 */ li $a0, 5 -/* 03F89C 7F00AD6C 0FC06975 */ jal set_menu_to_mode -/* 03F8A0 7F00AD70 24050001 */ li $a1, 1 -/* 03F8A4 7F00AD74 10000005 */ b .L7F00AD8C -/* 03F8A8 7F00AD78 8FBF0014 */ lw $ra, 0x14($sp) -.L7F00AD7C: -/* 03F8AC 7F00AD7C AC29A934 */ sw $t1, %lo(prev_keypresses)($at) -/* 03F8B0 7F00AD80 0FC06975 */ jal set_menu_to_mode -/* 03F8B4 7F00AD84 24050001 */ li $a1, 1 -.L7F00AD88: -/* 03F8B8 7F00AD88 8FBF0014 */ lw $ra, 0x14($sp) -.L7F00AD8C: -/* 03F8BC 7F00AD8C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 03F8C0 7F00AD90 03E00008 */ jr $ra -/* 03F8C4 7F00AD94 00000000 */ nop -) -#endif - @@ -3840,7 +3686,7 @@ loop_1: { flt_CODE_bss_80069618 = (f32) D_80051A08; } - sub_GAME_7F059694(&spE0, 0.0f, 0.0f, 0x457a0000, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); + matrix_4x4_7F059694(&spE0, 0.0f, 0.0f, 0x457a0000, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); matrix_4x4_multiply_in_place(&spE0, &sp90); matrix_4x4_copy(&sp90, &spE0); temp_ret_2 = sub_GAME_7F0BD714(something_legalscreen_constructor->unk8->unkE << 6); @@ -3994,7 +3840,7 @@ glabel constructor_menu01_nintendo /* 03FA70 7F00AF40 E7A00014 */ swc1 $f0, 0x14($sp) /* 03FA74 7F00AF44 E7A00018 */ swc1 $f0, 0x18($sp) /* 03FA78 7F00AF48 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 03FA7C 7F00AF4C 0FC165A5 */ jal sub_GAME_7F059694 +/* 03FA7C 7F00AF4C 0FC165A5 */ jal matrix_4x4_7F059694 /* 03FA80 7F00AF50 E7A00024 */ swc1 $f0, 0x24($sp) /* 03FA84 7F00AF54 02002025 */ move $a0, $s0 /* 03FA88 7F00AF58 0FC1601A */ jal matrix_4x4_multiply_in_place @@ -4227,7 +4073,7 @@ void interface_menu04_goldeneyelogo(void) u32 uVar1; setvideo_far(60.00000000); - video_related_21(menu04_aspect); + set_page_aspect(menu04_aspect); set_page_height(100.00000000,(f32)menu04_pageheight); set_video2_settings_offset_24(0); menu_timer += clock_timer; @@ -4281,7 +4127,7 @@ glabel interface_menu04_goldeneyelogo /* 03FE70 7F00B340 0C001151 */ jal setvideo_far /* 03FE74 7F00B344 00000000 */ nop /* 03FE78 7F00B348 3C018005 */ lui $at, %hi(D_80051A10) -/* 03FE7C 7F00B34C 0C001164 */ jal video_related_21 +/* 03FE7C 7F00B34C 0C001164 */ jal set_page_aspect /* 03FE80 7F00B350 C42C1A10 */ lwc1 $f12, %lo(D_80051A10)($at) /* 03FE84 7F00B354 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 03FE88 7F00B358 44816000 */ mtc1 $at, $f12 @@ -4430,7 +4276,7 @@ loop_1: temp_s4 = temp_s4 + 8; temp_s4->unk4 = (s32) (temp_s0 + 0x10); temp_s4->unk0 = 0x3820010; - sub_GAME_7F059694(&spF8, 0.0f, 0.0f, 0x453b8000, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); + matrix_4x4_7F059694(&spF8, 0.0f, 0.0f, 0x453b8000, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); sp150 = sub_GAME_7F0BD714(something_legalscreen_constructor->unk8->unkE << 6); matrix_scalar_multiply(D_80051A18, &spF8); matrix_4x4_copy(&spF8, sp150); @@ -4567,7 +4413,7 @@ glabel constructor_menu04_goldeneyelogo /* 04013C 7F00B60C E7A00018 */ swc1 $f0, 0x18($sp) /* 040140 7F00B610 E7A00014 */ swc1 $f0, 0x14($sp) /* 040144 7F00B614 E7A00010 */ swc1 $f0, 0x10($sp) -/* 040148 7F00B618 0FC165A5 */ jal sub_GAME_7F059694 +/* 040148 7F00B618 0FC165A5 */ jal matrix_4x4_7F059694 /* 04014C 7F00B61C E7A80020 */ swc1 $f8, 0x20($sp) /* 040150 7F00B620 3C138003 */ lui $s3, %hi(something_legalscreen_constructor) /* 040154 7F00B624 2673A958 */ addiu $s3, %lo(something_legalscreen_constructor) # addiu $s3, $s3, -0x56a8 @@ -5213,7 +5059,7 @@ s32 interface_menu05_fileselect(void) menu_timer = (s32) (menu_timer + clock_timer); } setvideo_far(0x42700000); - video_related_21(D_80051A1C); + set_page_aspect(D_80051A1C); set_page_height(0x42c80000, D_80051A20); set_video2_settings_offset_24(0); sp54 = &D_8002AB94; @@ -5221,7 +5067,7 @@ s32 interface_menu05_fileselect(void) phi_s1 = &dword_CODE_bss_80069620; phi_s2 = 0; loop_8: - sub_GAME_7F059694(&spC8, 0, 0, 0x457a0000, 1.0f); + matrix_4x4_7F059694(&spC8, 0, 0, 0x457a0000, 1.0f); matrix_4x4_set_identity_and_position(sp54, &sp88); matrix_scalar_multiply(D_80051A24, &sp88); matrix_4x4_multiply_in_place(&spC8, &sp88); @@ -5416,7 +5262,7 @@ loop_38: if (selected_folder_num >= 0) { set_menu_to_mode(MENU_MODE_SELECT, 0); - return set_menu_cursor_pos_to_setting(0); + return setCursorPOSforMode(0); } if (menu_timer >= 0x709) { @@ -5484,7 +5330,7 @@ glabel interface_menu05_fileselect /* 0407A8 7F00BC78 0C001151 */ jal setvideo_far /* 0407AC 7F00BC7C 00000000 */ nop /* 0407B0 7F00BC80 3C018005 */ lui $at, %hi(D_80051A1C) -/* 0407B4 7F00BC84 0C001164 */ jal video_related_21 +/* 0407B4 7F00BC84 0C001164 */ jal set_page_aspect /* 0407B8 7F00BC88 C42C1A1C */ lwc1 $f12, %lo(D_80051A1C)($at) /* 0407BC 7F00BC8C 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 0407C0 7F00BC90 44816000 */ mtc1 $at, $f12 @@ -5515,7 +5361,7 @@ glabel interface_menu05_fileselect /* 040820 7F00BCF0 E7B40018 */ swc1 $f20, 0x18($sp) /* 040824 7F00BCF4 E7B4001C */ swc1 $f20, 0x1c($sp) /* 040828 7F00BCF8 E7B40024 */ swc1 $f20, 0x24($sp) -/* 04082C 7F00BCFC 0FC165A5 */ jal sub_GAME_7F059694 +/* 04082C 7F00BCFC 0FC165A5 */ jal matrix_4x4_7F059694 /* 040830 7F00BD00 E7A40020 */ swc1 $f4, 0x20($sp) /* 040834 7F00BD04 8FA40054 */ lw $a0, 0x54($sp) /* 040838 7F00BD08 0FC16259 */ jal matrix_4x4_set_identity_and_position @@ -5937,7 +5783,7 @@ glabel interface_menu05_fileselect /* 040E58 7F00C328 24040006 */ li $a0, 6 /* 040E5C 7F00C32C 0FC06975 */ jal set_menu_to_mode /* 040E60 7F00C330 00002825 */ move $a1, $zero -/* 040E64 7F00C334 0FC035FF */ jal set_menu_cursor_pos_to_setting +/* 040E64 7F00C334 0FC035FF */ jal setCursorPOSforMode /* 040E68 7F00C338 00002025 */ move $a0, $zero /* 040E6C 7F00C33C 1000000A */ b .L7F00C368 /* 040E70 7F00C340 8FBF0044 */ lw $ra, 0x44($sp) @@ -7401,79 +7247,83 @@ void interface_menu06_modesel(void) is_cheat_menu_available = TRUE; } } - - setvideo_far(60.0f); - video_related_21((1.33333337f); + setvideo_far(60.f); + set_page_aspect(1.333333f); set_page_height(100.0f, 10000.0f); set_video2_settings_offset_24(0); + disable_all_switches(ptr_folder_object_instance); - select_load_bond_picture(ptr_folder_object_instance, removed_would_have_returned_bond_for_folder_num(selected_folder_num)); set_item_visibility_in_objinstance(ptr_folder_object_instance, 0, 1); set_item_visibility_in_objinstance(ptr_folder_object_instance, 1, 1); set_item_visibility_in_objinstance(ptr_folder_object_instance, 3, 1); set_item_visibility_in_objinstance(ptr_folder_object_instance, 7, 1); set_item_visibility_in_objinstance(ptr_folder_object_instance, 2, 1); - tab_3_highlight = FALSE; - mission_difficulty_highlighted = DIFFICULTY_MULTI; - if (isontab3() == 0) { - if ((is_cheat_menu_available == FALSE) || (cursor_v_pos < 275.0f)) { - if ((cursor_v_pos < 243.0f) || - (get_attached_controller_count() < 2)) { - mission_difficulty_highlighted = DIFFICULTY_AGENT; - if (get_controller_buttons_pressed('\0', START_BUTTON|Z_TRIG|A_BUTTON)) { - gamemode = GAMEMODE_SOLO; - play_sfx_a1(ptr_sfx_buf, 0xc5, NULL); - } - } - else { - mission_difficulty_highlighted = DIFFICULTY_SECRET; - if (get_controller_buttons_pressed('\0', START_BUTTON|Z_TRIG|A_BUTTON)) { - gamemode = GAMEMODE_MULTI; - play_sfx_a1(ptr_sfx_buf, 0xc5, NULL); - } - } - } - else { - mission_difficulty_highlighted = DIFFICULTY_00; - if (get_controller_buttons_pressed('\0', START_BUTTON|Z_TRIG|A_BUTTON)) { - gamemode = GAMEMODE_CHEATS; - play_sfx_a1(ptr_sfx_buf, 0xc5, NULL); - } + tab_3_highlight = 0; + mission_difficulty_highlighted = -1; + if (isontab3() != 0) + { + tab_3_highlight = 1; + if (get_controller_buttons_pressed(0, START_BUTTON|Z_TRIG|A_BUTTON) != 0) + { + tab_3_selected = 1; + play_sfx_a1(ptr_sfx_buf, 0xC7, 0); } } - else { - tab_3_highlight = TRUE; - if (get_controller_buttons_pressed('\0', START_BUTTON|Z_TRIG|A_BUTTON)) { - tab_3_selected = TRUE; - play_sfx_a1(ptr_sfx_buf, 199, NULL); + else if ((is_cheat_menu_available != 0) && (275.0f <= cursor_v_pos)) + { + mission_difficulty_highlighted = 2; + if (get_controller_buttons_pressed(0, START_BUTTON|Z_TRIG|A_BUTTON) != 0) + { + gamemode = 2; + play_sfx_a1(ptr_sfx_buf, 0xC5, 0); } } - if (get_controller_buttons_pressed('\0',B_BUTTON)) { - tab_3_selected = TRUE; - play_sfx_a1(ptr_sfx_buf, 199, NULL); + else if ((243.0f <= cursor_v_pos) && (get_attached_controller_count() >= 2)) + { + mission_difficulty_highlighted = 1; + if (get_controller_buttons_pressed(0, START_BUTTON|Z_TRIG|A_BUTTON) != 0) + { + gamemode = 1; + play_sfx_a1(ptr_sfx_buf, 0xC5, 0); + } + } + else + { + mission_difficulty_highlighted = 0; + if (get_controller_buttons_pressed(0, START_BUTTON|Z_TRIG|A_BUTTON) != 0) + { + gamemode = 0; + play_sfx_a1(ptr_sfx_buf, 0xC5, 0); + } + } + + if (get_controller_buttons_pressed(0, B_BUTTON) != 0) + { + tab_3_selected = 1; + play_sfx_a1(ptr_sfx_buf, 0xC7, 0); } menu_control_stick_tracking(); - if (gamemode == GAMEMODE_SOLO) { + if (gamemode == GAMEMODE_SOLO) + { set_menu_to_mode(MENU_MISSION_SELECT, 0); set_cursor_to_stage_solo(0); + return; } - else { - if (gamemode == GAMEMODE_MULTI) { - set_menu_to_mode(MENU_MP_OPTIONS, 0); - } - else { - if (gamemode == GAMEMODE_CHEATS) { - set_menu_to_mode(MENU_CHEAT, 0); - } - else { - if (tab_3_selected != FALSE) { - set_menu_to_mode(MENU_FILE_SELECT, 0); - } - } - } + if (gamemode == GAMEMODE_MULTI) + { + set_menu_to_mode(MENU_MP_OPTIONS, 0); + return; + } + if (gamemode == GAMEMODE_CHEATS) + { + set_menu_to_mode(MENU_CHEAT, 0); + return; + } + if (tab_3_selected != 0) + { + set_menu_to_mode(MENU_FILE_SELECT, 0); } - return; } #else GLOBAL_ASM( @@ -7518,7 +7368,7 @@ glabel interface_menu06_modesel /* 041E30 7F00D300 0C001151 */ jal setvideo_far /* 041E34 7F00D304 00000000 */ nop /* 041E38 7F00D308 3C018005 */ lui $at, %hi(D_80051A38) -/* 041E3C 7F00D30C 0C001164 */ jal video_related_21 +/* 041E3C 7F00D30C 0C001164 */ jal set_page_aspect /* 041E40 7F00D310 C42C1A38 */ lwc1 $f12, %lo(D_80051A38)($at) /* 041E44 7F00D314 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 041E48 7F00D318 44816000 */ mtc1 $at, $f12 @@ -7758,7 +7608,7 @@ loop_1: temp_t8->unk0 = (s32) temp_t9->unk0; temp_f0 = temp_v0->unk0 + D_8002AFC4; temp_f2 = temp_v0->unk4 + D_8002AFC8; - sub_GAME_7F059694(0, &spC8, temp_f0, temp_f2, 4000.0f + D_8002AFCC, temp_f0, temp_f2, 1.0f); + matrix_4x4_7F059694(0, &spC8, temp_f0, temp_f2, 4000.0f + D_8002AFCC, temp_f0, temp_f2, 1.0f); matrix_4x4_set_identity_and_position(&D_8002AB94 + (selected_folder_num * 0xc), &sp88); matrix_scalar_multiply(0x3e800000, &sp88); matrix_4x4_multiply_in_place(&spC8, &sp88); @@ -7849,7 +7699,7 @@ glabel sub_GAME_7F00D5E8 /* 0421EC 7F00D6BC 44078000 */ mfc1 $a3, $f16 /* 0421F0 7F00D6C0 E7AC001C */ swc1 $f12, 0x1c($sp) /* 0421F4 7F00D6C4 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0421F8 7F00D6C8 0FC165A5 */ jal sub_GAME_7F059694 +/* 0421F8 7F00D6C8 0FC165A5 */ jal matrix_4x4_7F059694 /* 0421FC 7F00D6CC E7B20020 */ swc1 $f18, 0x20($sp) /* 042200 7F00D6D0 8E4B0000 */ lw $t3, ($s2) /* 042204 7F00D6D4 27B00088 */ addiu $s0, $sp, 0x88 @@ -7933,32 +7783,11 @@ glabel sub_GAME_7F00D5E8 -#ifdef NONMATCHING -void set_menu_cursor_pos_to_setting(s32 arg0) { - // Node 0 +void setCursorPOSforMode(int mode) +{ cursor_h_pos = 126.0f; - cursor_v_pos = (f32) ((arg0 << 5) + 0xe2); - return; - // (function likely void) + cursor_v_pos = mode * 0x20 + 0xe2; } -#else -GLOBAL_ASM( -.text -glabel set_menu_cursor_pos_to_setting -/* 04232C 7F00D7FC 00047140 */ sll $t6, $a0, 5 -/* 042330 7F00D800 25CF00E2 */ addiu $t7, $t6, 0xe2 -/* 042334 7F00D804 448F3000 */ mtc1 $t7, $f6 -/* 042338 7F00D808 3C0142FC */ li $at, 0x42FC0000 # 126.000000 -/* 04233C 7F00D80C 44812000 */ mtc1 $at, $f4 -/* 042340 7F00D810 46803220 */ cvt.s.w $f8, $f6 -/* 042344 7F00D814 3C018003 */ lui $at, %hi(cursor_h_pos) -/* 042348 7F00D818 E424A908 */ swc1 $f4, %lo(cursor_h_pos)($at) -/* 04234C 7F00D81C 3C018003 */ lui $at, %hi(cursor_v_pos) -/* 042350 7F00D820 03E00008 */ jr $ra -/* 042354 7F00D824 E428A90C */ swc1 $f8, %lo(cursor_v_pos)($at) -) -#endif - @@ -8664,7 +8493,7 @@ void interface_menu07_missionsel(void) s32 phi_s5; setvideo_far(0x42700000); - video_related_21(D_80051A44); + set_page_aspect(D_80051A44); set_page_height(0x42c80000, D_80051A48); set_video2_settings_offset_24(0); disable_all_switches(ptr_folder_object_instance); @@ -8879,7 +8708,7 @@ loop_29: if (tab_3_selected != 0) { set_menu_to_mode(MENU_MODE_SELECT, 0); - set_menu_cursor_pos_to_setting(0); + setCursorPOSforMode(0); } } #else @@ -8905,7 +8734,7 @@ glabel interface_menu07_missionsel /* 042A0C 7F00DEDC 0C001151 */ jal setvideo_far /* 042A10 7F00DEE0 AFB00014 */ sw $s0, 0x14($sp) /* 042A14 7F00DEE4 3C018005 */ lui $at, %hi(D_80051A44) -/* 042A18 7F00DEE8 0C001164 */ jal video_related_21 +/* 042A18 7F00DEE8 0C001164 */ jal set_page_aspect /* 042A1C 7F00DEEC C42C1A44 */ lwc1 $f12, %lo(D_80051A44)($at) /* 042A20 7F00DEF0 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 042A24 7F00DEF4 44816000 */ mtc1 $at, $f12 @@ -9239,7 +9068,7 @@ glabel interface_menu07_missionsel /* 042ED8 7F00E3A8 8FBF002C */ lw $ra, 0x2c($sp) /* 042EDC 7F00E3AC 0FC06975 */ jal set_menu_to_mode /* 042EE0 7F00E3B0 00002825 */ move $a1, $zero -/* 042EE4 7F00E3B4 0FC035FF */ jal set_menu_cursor_pos_to_setting +/* 042EE4 7F00E3B4 0FC035FF */ jal setCursorPOSforMode /* 042EE8 7F00E3B8 00002025 */ move $a0, $zero /* 042EEC 7F00E3BC 8FBF002C */ lw $ra, 0x2c($sp) .L7F00E3C0: @@ -9275,7 +9104,7 @@ glabel interface_menu07_missionsel /* 042A6C 7F00DEFC 0C001151 */ jal setvideo_far /* 042A70 7F00DF00 AFB00014 */ sw $s0, 0x14($sp) /* 042A74 7F00DF04 3C018005 */ lui $at, %hi(D_80051A44) # $at, 0x8005 -/* 042A78 7F00DF08 0C001164 */ jal video_related_21 +/* 042A78 7F00DF08 0C001164 */ jal set_page_aspect /* 042A7C 7F00DF0C C42C1A74 */ lwc1 $f12, %lo(D_80051A44)($at) /* 042A80 7F00DF10 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 042A84 7F00DF14 44816000 */ mtc1 $at, $f12 @@ -9618,7 +9447,7 @@ glabel interface_menu07_missionsel /* 042F58 7F00E3E8 8FBF002C */ lw $ra, 0x2c($sp) /* 042F5C 7F00E3EC 0FC069E2 */ jal set_menu_to_mode /* 042F60 7F00E3F0 00002825 */ move $a1, $zero -/* 042F64 7F00E3F4 0FC03607 */ jal set_menu_cursor_pos_to_setting +/* 042F64 7F00E3F4 0FC03607 */ jal setCursorPOSforMode /* 042F68 7F00E3F8 00002025 */ move $a0, $zero /* 042F6C 7F00E3FC 8FBF002C */ lw $ra, 0x2c($sp) .L7F00E400: @@ -10033,7 +9862,7 @@ void interface_menu08_difficulty(void) sp1C = get_highest_unlocked_difficulty_for_level((0x80030000 + (briefingpage * 0x1c))->unk-5408); setvideo_far(0x42700000); - video_related_21(D_80051A4C); + set_page_aspect(D_80051A4C); set_page_height(0x42c80000, D_80051A50); set_video2_settings_offset_24(0); disable_all_switches(ptr_folder_object_instance); @@ -10143,7 +9972,7 @@ glabel interface_menu08_difficulty /* 043324 7F00E7F4 0C001151 */ jal setvideo_far /* 043328 7F00E7F8 AFA2001C */ sw $v0, 0x1c($sp) /* 04332C 7F00E7FC 3C018005 */ lui $at, %hi(D_80051A4C) -/* 043330 7F00E800 0C001164 */ jal video_related_21 +/* 043330 7F00E800 0C001164 */ jal set_page_aspect /* 043334 7F00E804 C42C1A4C */ lwc1 $f12, %lo(D_80051A4C)($at) /* 043338 7F00E808 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04333C 7F00E80C 44816000 */ mtc1 $at, $f12 @@ -11244,7 +11073,7 @@ void interface_menu09_007options(void) f32 phi_f0_2; setvideo_far(0x42700000); - video_related_21(D_80051A58); + set_page_aspect(D_80051A58); set_page_height(0x42c80000, D_80051A5C); set_video2_settings_offset_24(0); if (get_controller_buttons_held(0, 0xa000) == 0) @@ -11423,7 +11252,7 @@ glabel interface_menu09_007options /* 043EB4 7F00F384 0C001151 */ jal setvideo_far /* 043EB8 7F00F388 00000000 */ nop /* 043EBC 7F00F38C 3C018005 */ lui $at, %hi(D_80051A58) -/* 043EC0 7F00F390 0C001164 */ jal video_related_21 +/* 043EC0 7F00F390 0C001164 */ jal set_page_aspect /* 043EC4 7F00F394 C42C1A58 */ lwc1 $f12, %lo(D_80051A58)($at) /* 043EC8 7F00F398 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 043ECC 7F00F39C 44816000 */ mtc1 $at, $f12 @@ -13004,13 +12833,13 @@ void interface_menu0E_mpoptions(void) controlstyle_selected = 0; aimadjustment_selected = 0; setvideo_far(60.0f); - video_related_21(menu0E_aspect); + set_page_aspect(menu0E_aspect); set_page_height(100.0f, menu0E_pageheight); set_video2_settings_offset_24(0); if (get_attached_controller_count() < 2) { set_menu_to_mode(MENU_MODE_SELECT, 0); - set_menu_cursor_pos_to_setting(gamemode); + setCursorPOSforMode(gamemode); } if (get_attached_controller_count() < selected_num_players) { @@ -13159,7 +12988,7 @@ void interface_menu0E_mpoptions(void) if (tab_3_selected != 0) { set_menu_to_mode(MENU_MODE_SELECT, 0); - set_menu_cursor_pos_to_setting(gamemode); + setCursorPOSforMode(gamemode); return; } if (tab_1_selected != 0) @@ -13252,7 +13081,7 @@ glabel interface_menu0E_mpoptions /* 0453A8 7F010878 0C001151 */ jal setvideo_far /* 0453AC 7F01087C AFA0001C */ sw $zero, 0x1c($sp) /* 0453B0 7F010880 3C018005 */ lui $at, %hi(menu0E_aspect) -/* 0453B4 7F010884 0C001164 */ jal video_related_21 +/* 0453B4 7F010884 0C001164 */ jal set_page_aspect /* 0453B8 7F010888 C42C1A80 */ lwc1 $f12, %lo(menu0E_aspect)($at) /* 0453BC 7F01088C 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 0453C0 7F010890 44816000 */ mtc1 $at, $f12 @@ -13269,7 +13098,7 @@ glabel interface_menu0E_mpoptions /* 0453EC 7F0108BC 0FC06975 */ jal set_menu_to_mode /* 0453F0 7F0108C0 00002825 */ move $a1, $zero /* 0453F4 7F0108C4 3C048003 */ lui $a0, %hi(gamemode) -/* 0453F8 7F0108C8 0FC035FF */ jal set_menu_cursor_pos_to_setting +/* 0453F8 7F0108C8 0FC035FF */ jal setCursorPOSforMode /* 0453FC 7F0108CC 8C84A8F0 */ lw $a0, %lo(gamemode)($a0) .L7F0108D0: /* 045400 7F0108D0 0C002E7E */ jal get_attached_controller_count @@ -13586,7 +13415,7 @@ glabel interface_menu0E_mpoptions /* 04585C 7F010D2C 0FC06975 */ jal set_menu_to_mode /* 045860 7F010D30 00002825 */ move $a1, $zero /* 045864 7F010D34 3C048003 */ lui $a0, %hi(gamemode) -/* 045868 7F010D38 0FC035FF */ jal set_menu_cursor_pos_to_setting +/* 045868 7F010D38 0FC035FF */ jal setCursorPOSforMode /* 04586C 7F010D3C 8C84A8F0 */ lw $a0, %lo(gamemode)($a0) /* 045870 7F010D40 10000070 */ b .L7F010F04 /* 045874 7F010D44 8FBF0014 */ lw $ra, 0x14($sp) @@ -15052,24 +14881,24 @@ loop_16: } } } - mp_char_cur_select_player1 = (s32) player_1_char; - mp_char_prev_select_player1 = (s32) player_1_char; + mp_char_cur_select_player = (s32) player_1_char; + mp_char_prev_select_player = (s32) player_1_char; dword_CODE_bss_80069730 = 0; has_selected_char_player1 = 0; size_mp_select_image_player1 = 0; - mp_char_cur_select_player2 = (s32) player_2_char; - mp_char_prev_select_player2 = (s32) player_2_char; - dword_CODE_bss_80069734 = 0; + mp_char_cur_select_player+0x4 = (s32) player_2_char; + mp_char_prev_select_player+0x4 = (s32) player_2_char; + dword_CODE_bss_80069730+0x4 = 0; has_selected_char_player2 = 0; size_mp_select_image_player2 = 0; - mp_char_cur_select_player3 = (s32) player_3_char; - mp_char_prev_select_player3 = (s32) player_3_char; - dword_CODE_bss_80069738 = 0; + mp_char_cur_select_player+0x8 = (s32) player_3_char; + mp_char_prev_select_player+0x8 = (s32) player_3_char; + dword_CODE_bss_80069730+0x8 = 0; has_selected_char_player3 = 0; size_mp_select_image_player3 = 0; - mp_char_cur_select_player4 = (s32) player_4_char; - mp_char_prev_select_player4 = (s32) player_4_char; - dword_CODE_bss_8006973C = 0; + mp_char_cur_select_player+0xc = (s32) player_4_char; + mp_char_prev_select_player+0xC = (s32) player_4_char; + dword_CODE_bss_80069730+0xC = 0; has_selected_char_player4 = 0; size_mp_select_image_player4 = 0; load_walletbond(player_3_char, player_4_char); @@ -15199,11 +15028,11 @@ glabel init_menu0f_mpcharsel .L7F011DE8: /* 046918 7F011DE8 3C028003 */ lui $v0, %hi(player_1_char) /* 04691C 7F011DEC 8C42B524 */ lw $v0, %lo(player_1_char)($v0) -/* 046920 7F011DF0 3C018007 */ lui $at, %hi(mp_char_cur_select_player1) +/* 046920 7F011DF0 3C018007 */ lui $at, %hi(mp_char_cur_select_player) /* 046924 7F011DF4 3C038003 */ lui $v1, %hi(player_2_char) -/* 046928 7F011DF8 AC229710 */ sw $v0, %lo(mp_char_cur_select_player1)($at) -/* 04692C 7F011DFC 3C018007 */ lui $at, %hi(mp_char_prev_select_player1) -/* 046930 7F011E00 AC229720 */ sw $v0, %lo(mp_char_prev_select_player1)($at) +/* 046928 7F011DF8 AC229710 */ sw $v0, %lo(mp_char_cur_select_player)($at) +/* 04692C 7F011DFC 3C018007 */ lui $at, %hi(mp_char_prev_select_player) +/* 046930 7F011E00 AC229720 */ sw $v0, %lo(mp_char_prev_select_player)($at) /* 046934 7F011E04 3C018007 */ lui $at, %hi(dword_CODE_bss_80069730) /* 046938 7F011E08 AC209730 */ sw $zero, %lo(dword_CODE_bss_80069730)($at) /* 04693C 7F011E0C 3C018007 */ lui $at, %hi(has_selected_char_player1) @@ -15211,36 +15040,36 @@ glabel init_menu0f_mpcharsel /* 046944 7F011E14 8C63B528 */ lw $v1, %lo(player_2_char)($v1) /* 046948 7F011E18 3C018007 */ lui $at, %hi(size_mp_select_image_player1) /* 04694C 7F011E1C AC209750 */ sw $zero, %lo(size_mp_select_image_player1)($at) -/* 046950 7F011E20 3C018007 */ lui $at, %hi(mp_char_cur_select_player2) -/* 046954 7F011E24 AC239714 */ sw $v1, %lo(mp_char_cur_select_player2)($at) -/* 046958 7F011E28 3C018007 */ lui $at, %hi(mp_char_prev_select_player2) -/* 04695C 7F011E2C AC239724 */ sw $v1, %lo(mp_char_prev_select_player2)($at) -/* 046960 7F011E30 3C018007 */ lui $at, %hi(dword_CODE_bss_80069734) -/* 046964 7F011E34 AC209734 */ sw $zero, %lo(dword_CODE_bss_80069734)($at) +/* 046950 7F011E20 3C018007 */ lui $at, %hi(mp_char_cur_select_player+0x4) +/* 046954 7F011E24 AC239714 */ sw $v1, %lo(mp_char_cur_select_player+0x4)($at) +/* 046958 7F011E28 3C018007 */ lui $at, %hi(mp_char_prev_select_player+0x4) +/* 04695C 7F011E2C AC239724 */ sw $v1, %lo(mp_char_prev_select_player+0x4)($at) +/* 046960 7F011E30 3C018007 */ lui $at, %hi(dword_CODE_bss_80069730+0x4) +/* 046964 7F011E34 AC209734 */ sw $zero, %lo(dword_CODE_bss_80069730+0x4)($at) /* 046968 7F011E38 3C018007 */ lui $at, %hi(has_selected_char_player2) /* 04696C 7F011E3C AC209744 */ sw $zero, %lo(has_selected_char_player2)($at) /* 046970 7F011E40 3C048003 */ lui $a0, %hi(player_3_char) /* 046974 7F011E44 8C84B52C */ lw $a0, %lo(player_3_char)($a0) /* 046978 7F011E48 3C018007 */ lui $at, %hi(size_mp_select_image_player2) /* 04697C 7F011E4C AC209754 */ sw $zero, %lo(size_mp_select_image_player2)($at) -/* 046980 7F011E50 3C018007 */ lui $at, %hi(mp_char_cur_select_player3) -/* 046984 7F011E54 AC249718 */ sw $a0, %lo(mp_char_cur_select_player3)($at) -/* 046988 7F011E58 3C018007 */ lui $at, %hi(mp_char_prev_select_player3) -/* 04698C 7F011E5C AC249728 */ sw $a0, %lo(mp_char_prev_select_player3)($at) -/* 046990 7F011E60 3C018007 */ lui $at, %hi(dword_CODE_bss_80069738) -/* 046994 7F011E64 AC209738 */ sw $zero, %lo(dword_CODE_bss_80069738)($at) +/* 046980 7F011E50 3C018007 */ lui $at, %hi(mp_char_cur_select_player+0x8) +/* 046984 7F011E54 AC249718 */ sw $a0, %lo(mp_char_cur_select_player+0x8)($at) +/* 046988 7F011E58 3C018007 */ lui $at, %hi(mp_char_prev_select_player+0x8) +/* 04698C 7F011E5C AC249728 */ sw $a0, %lo(mp_char_prev_select_player+0x8)($at) +/* 046990 7F011E60 3C018007 */ lui $at, %hi(dword_CODE_bss_80069730+0x8) +/* 046994 7F011E64 AC209738 */ sw $zero, %lo(dword_CODE_bss_80069730+0x8)($at) /* 046998 7F011E68 3C018007 */ lui $at, %hi(has_selected_char_player3) /* 04699C 7F011E6C AC209748 */ sw $zero, %lo(has_selected_char_player3)($at) /* 0469A0 7F011E70 3C058003 */ lui $a1, %hi(player_4_char) /* 0469A4 7F011E74 8CA5B530 */ lw $a1, %lo(player_4_char)($a1) /* 0469A8 7F011E78 3C018007 */ lui $at, %hi(size_mp_select_image_player3) /* 0469AC 7F011E7C AC209758 */ sw $zero, %lo(size_mp_select_image_player3)($at) -/* 0469B0 7F011E80 3C018007 */ lui $at, %hi(mp_char_cur_select_player4) -/* 0469B4 7F011E84 AC25971C */ sw $a1, %lo(mp_char_cur_select_player4)($at) -/* 0469B8 7F011E88 3C018007 */ lui $at, %hi(mp_char_prev_select_player4) -/* 0469BC 7F011E8C AC25972C */ sw $a1, %lo(mp_char_prev_select_player4)($at) -/* 0469C0 7F011E90 3C018007 */ lui $at, %hi(dword_CODE_bss_8006973C) -/* 0469C4 7F011E94 AC20973C */ sw $zero, %lo(dword_CODE_bss_8006973C)($at) +/* 0469B0 7F011E80 3C018007 */ lui $at, %hi(mp_char_cur_select_player+0xc) +/* 0469B4 7F011E84 AC25971C */ sw $a1, %lo(mp_char_cur_select_player+0xc)($at) +/* 0469B8 7F011E88 3C018007 */ lui $at, %hi(mp_char_prev_select_player+0xC) +/* 0469BC 7F011E8C AC25972C */ sw $a1, %lo(mp_char_prev_select_player+0xC)($at) +/* 0469C0 7F011E90 3C018007 */ lui $at, %hi(dword_CODE_bss_80069730+0xC) +/* 0469C4 7F011E94 AC20973C */ sw $zero, %lo(dword_CODE_bss_80069730+0xC)($at) /* 0469C8 7F011E98 3C018007 */ lui $at, %hi(has_selected_char_player4) /* 0469CC 7F011E9C AC20974C */ sw $zero, %lo(has_selected_char_player4)($at) /* 0469D0 7F011EA0 3C018007 */ lui $at, %hi(size_mp_select_image_player4) @@ -15289,15 +15118,15 @@ void interface_menu0F_mpcharsel(void) iVar4 = get_selected_num_players(); iStack12 = 0; setvideo_far(60.00000000); - video_related_21((f32)flt_80051A88); + set_page_aspect((f32)flt_80051A88); set_page_height(100.00000000,(f32)flt_80051A8C); set_video2_settings_offset_24(0); iVar13 = 0; iVar10 = 0; if (0 < iVar4) { piVar9 = &mp_unknown1_player1; - piVar8 = &mp_char_cur_select_player1; - piVar12 = &mp_char_prev_select_player1; + piVar8 = &mp_char_cur_select_player; + piVar12 = &mp_char_prev_select_player; pBVar11 = &has_selected_char_player1; do { controller = (char)iVar13; @@ -15437,7 +15266,7 @@ glabel interface_menu0F_mpcharsel /* 046A40 7F011F10 0C001151 */ jal setvideo_far /* 046A44 7F011F14 AFA00044 */ sw $zero, 0x44($sp) /* 046A48 7F011F18 3C018005 */ lui $at, %hi(D_80051A88) -/* 046A4C 7F011F1C 0C001164 */ jal video_related_21 +/* 046A4C 7F011F1C 0C001164 */ jal set_page_aspect /* 046A50 7F011F20 C42C1A88 */ lwc1 $f12, %lo(D_80051A88)($at) /* 046A54 7F011F24 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 046A58 7F011F28 44816000 */ mtc1 $at, $f12 @@ -15451,16 +15280,16 @@ glabel interface_menu0F_mpcharsel /* 046A78 7F011F48 00009825 */ move $s3, $zero /* 046A7C 7F011F4C 19C000B6 */ blez $t6, .L7F012228 /* 046A80 7F011F50 3C148007 */ lui $s4, %hi(has_selected_char_player1) -/* 046A84 7F011F54 3C158007 */ lui $s5, %hi(mp_char_prev_select_player1) -/* 046A88 7F011F58 3C118007 */ lui $s1, %hi(mp_char_cur_select_player1) +/* 046A84 7F011F54 3C158007 */ lui $s5, %hi(mp_char_prev_select_player) +/* 046A88 7F011F58 3C118007 */ lui $s1, %hi(mp_char_cur_select_player) /* 046A8C 7F011F5C 3C128007 */ lui $s2, %hi(dword_CODE_bss_80069730) /* 046A90 7F011F60 3C1E8006 */ lui $fp, %hi(ptr_sfx_buf) /* 046A94 7F011F64 3C178007 */ lui $s7, %hi(size_mp_select_image_player1) /* 046A98 7F011F68 26F79750 */ addiu $s7, %lo(size_mp_select_image_player1) # addiu $s7, $s7, -0x68b0 /* 046A9C 7F011F6C 27DE3720 */ addiu $fp, %lo(ptr_sfx_buf) # addiu $fp, $fp, 0x3720 /* 046AA0 7F011F70 26529730 */ addiu $s2, %lo(dword_CODE_bss_80069730) # addiu $s2, $s2, -0x68d0 -/* 046AA4 7F011F74 26319710 */ addiu $s1, %lo(mp_char_cur_select_player1) # addiu $s1, $s1, -0x68f0 -/* 046AA8 7F011F78 26B59720 */ addiu $s5, %lo(mp_char_prev_select_player1) # addiu $s5, $s5, -0x68e0 +/* 046AA4 7F011F74 26319710 */ addiu $s1, %lo(mp_char_cur_select_player) # addiu $s1, $s1, -0x68f0 +/* 046AA8 7F011F78 26B59720 */ addiu $s5, %lo(mp_char_prev_select_player) # addiu $s5, $s5, -0x68e0 /* 046AAC 7F011F7C 26949740 */ addiu $s4, %lo(has_selected_char_player1) # addiu $s4, $s4, -0x68c0 .L7F011F80: /* 046AB0 7F011F80 8E8F0000 */ lw $t7, ($s4) @@ -16288,9 +16117,9 @@ void constructor_menu0F_mpcharsel(s32 arg0) if (spE4 > 0) { sp88 = &has_selected_char_player1; - sp80 = &mp_char_cur_select_player1; + sp80 = &mp_char_cur_select_player; sp74 = &dword_CODE_bss_80069730; - sp70 = &mp_char_prev_select_player1; + sp70 = &mp_char_prev_select_player; spE0 = 0; loop_4: if (spE4 == 2) @@ -16498,13 +16327,13 @@ glabel constructor_menu0F_mpcharsel .L7F01285C: /* 04738C 7F01285C 19000165 */ blez $t0, .L7F012DF4 /* 047390 7F012860 3C098007 */ lui $t1, %hi(has_selected_char_player1) -/* 047394 7F012864 3C0A8007 */ lui $t2, %hi(mp_char_cur_select_player1) +/* 047394 7F012864 3C0A8007 */ lui $t2, %hi(mp_char_cur_select_player) /* 047398 7F012868 3C0B8007 */ lui $t3, %hi(dword_CODE_bss_80069730) -/* 04739C 7F01286C 3C0C8007 */ lui $t4, %hi(mp_char_prev_select_player1) +/* 04739C 7F01286C 3C0C8007 */ lui $t4, %hi(mp_char_prev_select_player) /* 0473A0 7F012870 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0473A4 7F012874 258C9720 */ addiu $t4, %lo(mp_char_prev_select_player1) # addiu $t4, $t4, -0x68e0 +/* 0473A4 7F012874 258C9720 */ addiu $t4, %lo(mp_char_prev_select_player) # addiu $t4, $t4, -0x68e0 /* 0473A8 7F012878 256B9730 */ addiu $t3, %lo(dword_CODE_bss_80069730) # addiu $t3, $t3, -0x68d0 -/* 0473AC 7F01287C 254A9710 */ addiu $t2, %lo(mp_char_cur_select_player1) # addiu $t2, $t2, -0x68f0 +/* 0473AC 7F01287C 254A9710 */ addiu $t2, %lo(mp_char_cur_select_player) # addiu $t2, $t2, -0x68f0 /* 0473B0 7F012880 25299740 */ addiu $t1, %lo(has_selected_char_player1) # addiu $t1, $t1, -0x68c0 /* 0473B4 7F012884 3C1E8007 */ lui $fp, %hi(size_mp_select_image_player1) /* 0473B8 7F012888 4481A000 */ mtc1 $at, $f20 @@ -16939,7 +16768,7 @@ void interface_menu10_mphandicap(void) sp44 = get_selected_num_players(); setvideo_far(0x42700000); - video_related_21(D_80051A90); + set_page_aspect(D_80051A90); set_page_height(0x42c80000, D_80051A94); set_video2_settings_offset_24(0); phi_fp = 0; @@ -17066,7 +16895,7 @@ glabel interface_menu10_mphandicap /* 047A30 7F012F00 0C001151 */ jal setvideo_far /* 047A34 7F012F04 0000F025 */ move $fp, $zero /* 047A38 7F012F08 3C018005 */ lui $at, %hi(D_80051A90) -/* 047A3C 7F012F0C 0C001164 */ jal video_related_21 +/* 047A3C 7F012F0C 0C001164 */ jal set_page_aspect /* 047A40 7F012F10 C42C1A90 */ lwc1 $f12, %lo(D_80051A90)($at) /* 047A44 7F012F14 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 047A48 7F012F18 44816000 */ mtc1 $at, $f12 @@ -17678,7 +17507,7 @@ void interface_menu11_mpcontrols(void) temp_s6 = get_selected_num_players(); sp44 = 0; setvideo_far(0x42700000); - video_related_21(D_80051A98); + set_page_aspect(D_80051A98); set_page_height(0x42c80000, D_80051A9C); set_video2_settings_offset_24(0); if (temp_s6 > 0) @@ -17858,7 +17687,7 @@ glabel interface_menu11_mpcontrols /* 048174 7F013644 0C001151 */ jal setvideo_far /* 048178 7F013648 AFA00044 */ sw $zero, 0x44($sp) /* 04817C 7F01364C 3C018005 */ lui $at, %hi(D_80051A98) -/* 048180 7F013650 0C001164 */ jal video_related_21 +/* 048180 7F013650 0C001164 */ jal set_page_aspect /* 048184 7F013654 C42C1A98 */ lwc1 $f12, %lo(D_80051A98)($at) /* 048188 7F013658 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04818C 7F01365C 44816000 */ mtc1 $at, $f12 @@ -18112,7 +17941,7 @@ glabel interface_menu11_mpcontrols /* 0481F4 7F013684 0C001151 */ jal setvideo_far /* 0481F8 7F013688 AFA00054 */ sw $zero, 0x54($sp) /* 0481FC 7F01368C 3C018005 */ lui $at, %hi(D_80051A98) # $at, 0x8005 -/* 048200 7F013690 0C001164 */ jal video_related_21 +/* 048200 7F013690 0C001164 */ jal set_page_aspect /* 048204 7F013694 C42C1AC8 */ lwc1 $f12, %lo(D_80051A98)($at) /* 048208 7F013698 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04820C 7F01369C 44816000 */ mtc1 $at, $f12 @@ -18800,7 +18629,7 @@ void interface_menu12_mpstage(void) s32 phi_v0; setvideo_far(0x42700000); - video_related_21(D_80051AA0); + set_page_aspect(D_80051AA0); set_page_height(0x42c80000, D_80051AA4); set_video2_settings_offset_24(0); if (get_controller_buttons_held(0, 0xb000) == 0) @@ -18917,7 +18746,7 @@ glabel interface_menu12_mpstage /* 048914 7F013DE4 0C001151 */ jal setvideo_far /* 048918 7F013DE8 AFB00018 */ sw $s0, 0x18($sp) /* 04891C 7F013DEC 3C018005 */ lui $at, %hi(D_80051AA0) -/* 048920 7F013DF0 0C001164 */ jal video_related_21 +/* 048920 7F013DF0 0C001164 */ jal set_page_aspect /* 048924 7F013DF4 C42C1AA0 */ lwc1 $f12, %lo(D_80051AA0)($at) /* 048928 7F013DF8 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04892C 7F013DFC 44816000 */ mtc1 $at, $f12 @@ -19817,7 +19646,7 @@ void interface_menu13_mpscenario(void) sp2C = 0; setvideo_far(0x42700000); - video_related_21(D_80051AA8); + set_page_aspect(D_80051AA8); set_page_height(0x42c80000, D_80051AAC); set_video2_settings_offset_24(0); if (get_controller_buttons_held(0, 0xa000) == 0) @@ -19918,7 +19747,7 @@ glabel interface_menu13_mpscenario /* 049304 7F0147D4 0C001151 */ jal setvideo_far /* 049308 7F0147D8 AFA0002C */ sw $zero, 0x2c($sp) /* 04930C 7F0147DC 3C018005 */ lui $at, %hi(D_80051AA8) -/* 049310 7F0147E0 0C001164 */ jal video_related_21 +/* 049310 7F0147E0 0C001164 */ jal set_page_aspect /* 049314 7F0147E4 C42C1AA8 */ lwc1 $f12, %lo(D_80051AA8)($at) /* 049318 7F0147E8 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04931C 7F0147EC 44816000 */ mtc1 $at, $f12 @@ -20396,7 +20225,7 @@ void interface_menu14_mpteams(void) s32 phi_s0_2; setvideo_far(0x42700000); - video_related_21(D_80051AB0); + set_page_aspect(D_80051AB0); set_page_height(0x42c80000, D_80051AB4); set_video2_settings_offset_24(0); D_8002B560 = (s32) ((s32) (D_8002B560 + 1) % 0x14); @@ -20547,7 +20376,7 @@ glabel interface_menu14_mpteams /* 04988C 7F014D5C 0C001151 */ jal setvideo_far /* 049890 7F014D60 AFB00014 */ sw $s0, 0x14($sp) /* 049894 7F014D64 3C018005 */ lui $at, %hi(D_80051AB0) -/* 049898 7F014D68 0C001164 */ jal video_related_21 +/* 049898 7F014D68 0C001164 */ jal set_page_aspect /* 04989C 7F014D6C C42C1AB0 */ lwc1 $f12, %lo(D_80051AB0)($at) /* 0498A0 7F014D70 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 0498A4 7F014D74 44816000 */ mtc1 $at, $f12 @@ -21361,7 +21190,7 @@ void update_menu0A_briefing(void) void interface_menu0A_briefing(void) { setvideo_far(0x42700000); - video_related_21(D_80051AB8); + set_page_aspect(D_80051AB8); set_page_height(0x42c80000, D_80051ABC); set_video2_settings_offset_24(0); tab_3_highlight = 0; @@ -21483,7 +21312,7 @@ glabel interface_menu0A_briefing /* 04A1DC 7F0156AC 0C001151 */ jal setvideo_far /* 04A1E0 7F0156B0 00000000 */ nop /* 04A1E4 7F0156B4 3C018005 */ lui $at, %hi(D_80051AB8) -/* 04A1E8 7F0156B8 0C001164 */ jal video_related_21 +/* 04A1E8 7F0156B8 0C001164 */ jal set_page_aspect /* 04A1EC 7F0156BC C42C1AB8 */ lwc1 $f12, %lo(D_80051AB8)($at) /* 04A1F0 7F0156C0 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04A1F4 7F0156C4 44816000 */ mtc1 $at, $f12 @@ -22405,7 +22234,7 @@ void interface_menu0C_missionfailed(void) const f32 menu0C_pageheight = 10000.0; setvideo_far(60.00000000); - video_related_21(menu0C_aspect); + set_page_aspect(menu0C_aspect); set_page_height(100.00000000, menu0C_pageheight); set_video2_settings_offset_24(0); tab_2_highlight = 0; @@ -22482,7 +22311,7 @@ glabel interface_menu0C_missionfailed /* 04AC50 7F016120 0C001151 */ jal setvideo_far /* 04AC54 7F016124 00000000 */ nop /* 04AC58 7F016128 3C018005 */ lui $at, %hi(menu0C_aspect) -/* 04AC5C 7F01612C 0C001164 */ jal video_related_21 +/* 04AC5C 7F01612C 0C001164 */ jal set_page_aspect /* 04AC60 7F016130 C42C1AD4 */ lwc1 $f12, %lo(menu0C_aspect)($at) /* 04AC64 7F016134 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04AC68 7F016138 44816000 */ mtc1 $at, $f12 @@ -23000,7 +22829,7 @@ void interface_menu0D_missioncomplete(u32 param_1,u32 param_2) int iVar7; setvideo_far(60.00000000); - video_related_21((f32)menu0D_aspect); + set_page_aspect((f32)menu0D_aspect); set_page_height(100.00000000,(f32)menu0D_pageheight); set_video2_settings_offset_24(0); tab_3_highlight = FALSE; @@ -23106,7 +22935,7 @@ glabel interface_menu0D_missioncomplete /* 04B218 7F0166E8 0C001151 */ jal setvideo_far /* 04B21C 7F0166EC 00000000 */ nop /* 04B220 7F0166F0 3C018005 */ lui $at, %hi(menu0D_aspect) -/* 04B224 7F0166F4 0C001164 */ jal video_related_21 +/* 04B224 7F0166F4 0C001164 */ jal set_page_aspect /* 04B228 7F0166F8 C42C1ADC */ lwc1 $f12, %lo(menu0D_aspect)($at) /* 04B22C 7F0166FC 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04B230 7F016700 44816000 */ mtc1 $at, $f12 @@ -24642,7 +24471,7 @@ void interface_menu15_cheat(u32 param_1,u32 param_2) int iVar5; setvideo_far(60.00000000); - video_related_21(menu15_aspect); + set_page_aspect(menu15_aspect); set_page_height(100.00000000, menu15_pageheight); set_video2_settings_offset_24(0); MP_menu_selected_option = 0; @@ -24723,7 +24552,7 @@ void interface_menu15_cheat(u32 param_1,u32 param_2) } else { set_menu_to_mode(MENU_MODE_SELECT,0); - set_menu_cursor_pos_to_setting(gamemode); + setCursorPOSforMode(gamemode); } } #else @@ -24742,7 +24571,7 @@ glabel interface_menu15_cheat /* 04C7C8 7F017C98 0C001151 */ jal setvideo_far /* 04C7CC 7F017C9C 00000000 */ nop /* 04C7D0 7F017CA0 3C018005 */ lui $at, %hi(menu15_aspect) -/* 04C7D4 7F017CA4 0C001164 */ jal video_related_21 +/* 04C7D4 7F017CA4 0C001164 */ jal set_page_aspect /* 04C7D8 7F017CA8 C42C1AE4 */ lwc1 $f12, %lo(menu15_aspect)($at) /* 04C7DC 7F017CAC 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04C7E0 7F017CB0 44816000 */ mtc1 $at, $f12 @@ -24905,7 +24734,7 @@ glabel interface_menu15_cheat /* 04CA20 7F017EF0 0FC06975 */ jal set_menu_to_mode /* 04CA24 7F017EF4 00002825 */ move $a1, $zero /* 04CA28 7F017EF8 3C048003 */ lui $a0, %hi(gamemode) -/* 04CA2C 7F017EFC 0FC035FF */ jal set_menu_cursor_pos_to_setting +/* 04CA2C 7F017EFC 0FC035FF */ jal setCursorPOSforMode /* 04CA30 7F017F00 8C84A8F0 */ lw $a0, %lo(gamemode)($a0) /* 04CA34 7F017F04 10000012 */ b .L7F017F50 /* 04CA38 7F017F08 8FBF0014 */ lw $ra, 0x14($sp) @@ -26159,7 +25988,7 @@ set_body_mp_choice_maybe: /* 04D424 7F0188F4 3B04003F */ xori $a0, $t8, 0x3f /* 04D428 7F0188F8 AFA200B0 */ sw $v0, 0xb0($sp) /* 04D42C 7F0188FC 240501B8 */ li $a1, 440 -/* 04D430 7F018900 0FC34912 */ jal sub_GAME_7F0D2448 +/* 04D430 7F018900 0FC34912 */ jal zbufSetBuffer /* 04D434 7F018904 2406014A */ li $a2, 330 /* 04D438 7F018908 3C060001 */ lui $a2, (0x00019000 >> 16) # lui $a2, 1 /* 04D43C 7F01890C 34C69000 */ ori $a2, (0x00019000 & 0xFFFF) # ori $a2, $a2, 0x9000 @@ -26599,7 +26428,7 @@ void interface_menu18_displaycast(u32 param_1,u32 param_2) setvideo_far(46.00000000); set_page_height(10.00000000,2000.00000000); set_video2_settings_offset_24(1); - video_related_21((f32)flt_80051B08); + set_page_aspect((f32)flt_80051B08); set_cur_player_screen_size(0x1b8,0x14a); set_video2_width_height(0x1b8,0x14a); set_cur_player_viewport_size(0,0); @@ -26717,7 +26546,7 @@ glabel interface_menu18_displaycast /* 04DACC 7F018F9C 0C00114D */ jal set_video2_settings_offset_24 /* 04DAD0 7F018FA0 24040001 */ li $a0, 1 /* 04DAD4 7F018FA4 3C018005 */ lui $at, %hi(D_80051B08) -/* 04DAD8 7F018FA8 0C001164 */ jal video_related_21 +/* 04DAD8 7F018FA8 0C001164 */ jal set_page_aspect /* 04DADC 7F018FAC C42C1B08 */ lwc1 $f12, %lo(D_80051B08)($at) /* 04DAE0 7F018FB0 240401B8 */ li $a0, 440 /* 04DAE4 7F018FB4 0FC26C77 */ jal set_cur_player_screen_size @@ -27551,7 +27380,7 @@ glabel constructor_menu18_displaycast /* 04E710 7F019BE0 E7A8001C */ swc1 $f8, 0x1c($sp) /* 04E714 7F019BE4 E7A60018 */ swc1 $f6, 0x18($sp) /* 04E718 7F019BE8 E7A40024 */ swc1 $f4, 0x24($sp) -/* 04E71C 7F019BEC 0FC165A5 */ jal sub_GAME_7F059694 +/* 04E71C 7F019BEC 0FC165A5 */ jal matrix_4x4_7F059694 /* 04E720 7F019BF0 E7AA0020 */ swc1 $f10, 0x20($sp) /* 04E724 7F019BF4 8E8E0000 */ lw $t6, ($s4) /* 04E728 7F019BF8 AFB201A8 */ sw $s2, 0x1a8($sp) @@ -28223,7 +28052,7 @@ void update_menu19_spectrum(void) { #ifdef NONMATCHING void interface_menu19_spectrum(void) { setvideo_far(60.0f); - video_related_21(D_80051B3C); + set_page_aspect(D_80051B3C); set_page_height(100.0f, D_80051B40); set_video2_settings_offset_24(0); run_spectrum_game(); @@ -28239,7 +28068,7 @@ glabel interface_menu19_spectrum /* 04EFC8 7F01A498 0C001151 */ jal setvideo_far /* 04EFCC 7F01A49C 00000000 */ nop /* 04EFD0 7F01A4A0 3C018005 */ lui $at, %hi(D_80051B3C) -/* 04EFD4 7F01A4A4 0C001164 */ jal video_related_21 +/* 04EFD4 7F01A4A4 0C001164 */ jal set_page_aspect /* 04EFD8 7F01A4A8 C42C1B3C */ lwc1 $f12, %lo(D_80051B3C)($at) /* 04EFDC 7F01A4AC 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 04EFE0 7F01A4B0 44816000 */ mtc1 $at, $f12 @@ -28368,7 +28197,7 @@ glabel constructor_menu19_spectrum #ifdef NONMATCHING -void set_menu_to_mode(MENU menu, u32 mode) +void set_menu_to_mode(MENU menu, s32 mode) { if ((menu == MENU_RUN_STAGE) || (menu == MENU_SPECTRUM_EMU)) { is_emulating_spectrum = TRUE; @@ -28424,13 +28253,13 @@ void menu_init(u32 param_1,u32 param_2) if (current_menu == MENU_SWITCH_SCREENS) { if (spectrum_related_flag == FALSE) { if ((is_emulating_spectrum != FALSE) && - (get_video_settings2_frameb() == cfb_16_a)) { + (get_video_settings2_frameb() == cfb_16)) { screen_size = SCREEN_SIZE_320x240; is_emulating_spectrum = FALSE; } } else { - if (get_video_settings2_frameb() == cfb_16_b) { + if (get_video_settings2_frameb() == cfb_16[1]) { screen_size = SCREEN_SIZE_440x330; spectrum_related_flag = FALSE; } @@ -28438,7 +28267,7 @@ void menu_init(u32 param_1,u32 param_2) } if (screen_size == SCREEN_SIZE_320x240) { - video_related_21((f32)flt_80051B48); + set_page_aspect((f32)flt_80051B48); set_video2_text_clip_size(320,240); set_video2_settings_offset_18_1A(320,240); set_cur_player_screen_size(320,240); @@ -28447,10 +28276,10 @@ void menu_init(u32 param_1,u32 param_2) set_video2_ulx_uly(0,0); } else { - if (get_video_settings2_frameb() == cfb_16_b) { + if (get_video_settings2_frameb() == cfb_16[1]) { set_video_settings2_frameb(ptr_menu_videobuffer); } - video_related_21((f32)flt_80051B44); + set_page_aspect((f32)flt_80051B44); set_video2_text_clip_size(440,330); set_video2_settings_offset_18_1A(440,330); set_cur_player_screen_size(440,330); @@ -28821,8 +28650,8 @@ glabel menu_init /* 04F174 7F01A644 00000000 */ nop /* 04F178 7F01A648 0C000F07 */ jal get_video_settings2_frameb /* 04F17C 7F01A64C 00000000 */ nop -/* 04F180 7F01A650 3C18803E */ lui $t8, %hi(cfb_16_b) # $t8, 0x803e -/* 04F184 7F01A654 2718A800 */ addiu $t8, %lo(cfb_16_b) # addiu $t8, $t8, -0x5800 +/* 04F180 7F01A650 3C18803E */ lui $t8, %hi(cfb_16+0x25800) # $t8, 0x803e +/* 04F184 7F01A654 2718A800 */ addiu $t8, %lo(cfb_16+0x25800) # addiu $t8, $t8, -0x5800 /* 04F188 7F01A658 14580012 */ bne $v0, $t8, .L7F01A6A4 /* 04F18C 7F01A65C 24190001 */ li $t9, 1 /* 04F190 7F01A660 3C018003 */ lui $at, %hi(screen_size) @@ -28836,8 +28665,8 @@ glabel menu_init /* 04F1AC 7F01A67C 00000000 */ nop /* 04F1B0 7F01A680 0C000F07 */ jal get_video_settings2_frameb /* 04F1B4 7F01A684 00000000 */ nop -/* 04F1B8 7F01A688 3C09803B */ lui $t1, %hi(cfb_16_a) # $t1, 0x803b -/* 04F1BC 7F01A68C 25295000 */ addiu $t1, %lo(cfb_16_a) # addiu $t1, $t1, 0x5000 +/* 04F1B8 7F01A688 3C09803B */ lui $t1, %hi(cfb_16) # $t1, 0x803b +/* 04F1BC 7F01A68C 25295000 */ addiu $t1, %lo(cfb_16) # addiu $t1, $t1, 0x5000 /* 04F1C0 7F01A690 14490004 */ bne $v0, $t1, .L7F01A6A4 /* 04F1C4 7F01A694 3C018003 */ lui $at, %hi(screen_size) /* 04F1C8 7F01A698 AC20A940 */ sw $zero, %lo(screen_size)($at) @@ -28851,15 +28680,15 @@ glabel menu_init /* 04F1E4 7F01A6B4 00000000 */ nop /* 04F1E8 7F01A6B8 0C000F07 */ jal get_video_settings2_frameb /* 04F1EC 7F01A6BC 00000000 */ nop -/* 04F1F0 7F01A6C0 3C0B803E */ lui $t3, %hi(cfb_16_b) # $t3, 0x803e -/* 04F1F4 7F01A6C4 256BA800 */ addiu $t3, %lo(cfb_16_b) # addiu $t3, $t3, -0x5800 +/* 04F1F0 7F01A6C0 3C0B803E */ lui $t3, %hi(cfb_16+0x25800) # $t3, 0x803e +/* 04F1F4 7F01A6C4 256BA800 */ addiu $t3, %lo(cfb_16+0x25800) # addiu $t3, $t3, -0x5800 /* 04F1F8 7F01A6C8 144B0003 */ bne $v0, $t3, .L7F01A6D8 /* 04F1FC 7F01A6CC 3C048003 */ lui $a0, %hi(ptr_menu_videobuffer) /* 04F200 7F01A6D0 0C000F0F */ jal set_video2buf_frameb /* 04F204 7F01A6D4 8C84A954 */ lw $a0, %lo(ptr_menu_videobuffer)($a0) .L7F01A6D8: /* 04F208 7F01A6D8 3C018005 */ lui $at, %hi(D_80051B48) -/* 04F20C 7F01A6DC 0C001164 */ jal video_related_21 +/* 04F20C 7F01A6DC 0C001164 */ jal set_page_aspect /* 04F210 7F01A6E0 C42C1B44 */ lwc1 $f12, %lo(D_80051B44)($at) /* 04F214 7F01A6E4 240401B8 */ li $a0, 440 /* 04F218 7F01A6E8 0C0010FE */ jal set_video2_text_clip_size @@ -28882,7 +28711,7 @@ glabel menu_init /* 04F25C 7F01A72C 10000015 */ b .L7F01A784 /* 04F260 7F01A730 00000000 */ nop .L7F01A734: -/* 04F264 7F01A734 0C001164 */ jal video_related_21 +/* 04F264 7F01A734 0C001164 */ jal set_page_aspect /* 04F268 7F01A738 C42C1B48 */ lwc1 $f12, %lo(D_80051B48)($at) /* 04F26C 7F01A73C 24040140 */ li $a0, 320 /* 04F270 7F01A740 0C0010FE */ jal set_video2_text_clip_size diff --git a/src/game/mainmenu.h b/src/game/mainmenu.h index 6ca60c5..26d03e1 100644 --- a/src/game/mainmenu.h +++ b/src/game/mainmenu.h @@ -361,29 +361,14 @@ extern u8 cheat_activated_78; //CODE.bss:800696F0 extern s32 array_favweapon[4][2]; //CODE.bss:80069710 -extern s32 mp_char_cur_select_player1; -//CODE.bss:80069714 -extern s32 mp_char_cur_select_player2; -//CODE.bss:80069718 -extern s32 mp_char_cur_select_player3; -//CODE.bss:8006971C -extern s32 mp_char_cur_select_player4; +extern s32 mp_char_cur_select_player[4]; + //CODE.bss:80069720 -extern s32 mp_char_prev_select_player1; -//CODE.bss:80069724 -extern s32 mp_char_prev_select_player2; -//CODE.bss:80069728 -extern s32 mp_char_prev_select_player3; -//CODE.bss:8006972C -extern s32 mp_char_prev_select_player4; +extern s32 mp_char_prev_select_player[4]; + //CODE.bss:80069730 -extern s32 dword_CODE_bss_80069730; -//CODE.bss:80069734 -extern s32 dword_CODE_bss_80069734; -//CODE.bss:80069738 -extern s32 dword_CODE_bss_80069738; -//CODE.bss:8006973C -extern s32 dword_CODE_bss_8006973C; +extern s32 dword_CODE_bss_80069730[4]; + //CODE.bss:80069740 extern s32 has_selected_char_player1; //CODE.bss:80069744 @@ -472,9 +457,9 @@ extern s32 highlight_aimadjustment; CODE.bss:800697F0 dword_CODE_bss_800697F0:.space 0x130 */ -extern s32 current_menu; -extern s32 menu_update; -extern s32 maybe_prev_menu; +extern MENU current_menu; +extern MENU menu_update; +extern MENU maybe_prev_menu; extern s32 menu_timer; extern s32 tab_1_selected; extern s32 tab_2_selected; @@ -489,7 +474,7 @@ extern f32 tab2_bottom_y_coord; extern s32 selected_folder_num; extern s32 selected_folder_num_copy; -extern s32 gamemode; +extern GAMEMODE gamemode; extern s32 selected_stage; extern s32 briefingpage; extern DIFFICULTY selected_difficulty; @@ -538,6 +523,8 @@ extern f32 slider_007_mode_health; extern f32 slider_007_mode_damage; extern f32 slider_007_mode_accuracy; + +extern struct mission_folder_setup mission_folder_setup_entries[]; /* dword_D_8002A9B0:.word 0xA0000000 dword_D_8002A9B4:.word 0x96000000 @@ -760,6 +747,7 @@ extern s32 unlock_weapon_select; extern s32 unlock_handicap; extern s32 unlock_control_style; extern s32 unlock_aim_sight; +extern struct solo_target_times solo_target_time_array[]; /* dword_D_8002B560:.word 0 solo_target_times <0, 160, 0> @@ -792,6 +780,6 @@ extern u32 intro_animation_count; extern u32 objinstance; extern u32 ptrobjinstance; extern u32 full_actor_intro; -void set_menu_to_mode(MENU menu, u32 mode); +void set_menu_to_mode(MENU menu, s32 mode); #endif diff --git a/src/game/matrixmath.c b/src/game/matrixmath.c index 7e1612c..70f9a0a 100644 --- a/src/game/matrixmath.c +++ b/src/game/matrixmath.c @@ -1,4 +1,4 @@ -#include "ultra64.h" +#include "matrixmath.h" // bss //CODE.bss:80075DA0 @@ -17,216 +17,101 @@ f32 D_80032310[2] = {65536.0f, 65536.0f}; // rodata //D:800536F0 -typedef f32 vec3[3]; -typedef f32 mat44[4][4]; - -void matrix_4x4_set_identity(mat44 matrix) { - matrix[0][0] = 1.0f; - matrix[0][1] = 0.0f; - matrix[0][2] = 0.0f; - matrix[0][3] = 0.0f; - matrix[1][0] = 0.0f; - matrix[1][1] = 1.0f; - matrix[1][2] = 0.0f; - matrix[1][3] = 0.0f; - matrix[2][0] = 0.0f; - matrix[2][1] = 0.0f; - matrix[2][2] = 1.0f; - matrix[2][3] = 0.0f; - matrix[3][0] = 0.0f; - matrix[3][1] = 0.0f; - matrix[3][2] = 0.0f; - matrix[3][3] = 1.0f; +void matrix_4x4_set_identity(Mtxf *matrix) { + matrix->m[0][0] = 1.0f; + matrix->m[0][1] = 0.0f; + matrix->m[0][2] = 0.0f; + matrix->m[0][3] = 0.0f; + matrix->m[1][0] = 0.0f; + matrix->m[1][1] = 1.0f; + matrix->m[1][2] = 0.0f; + matrix->m[1][3] = 0.0f; + matrix->m[2][0] = 0.0f; + matrix->m[2][1] = 0.0f; + matrix->m[2][2] = 1.0f; + matrix->m[2][3] = 0.0f; + matrix->m[3][0] = 0.0f; + matrix->m[3][1] = 0.0f; + matrix->m[3][2] = 0.0f; + matrix->m[3][3] = 1.0f; } -void matrix_4x4_copy(mat44 src, mat44 dst) { - s32 i; - for (i = 0; i < 4; i++) { - dst[i][0] = src[i][0]; - dst[i][1] = src[i][1]; - dst[i][2] = src[i][2]; - dst[i][3] = src[i][3]; - } -} - -void matrix_4x4_multiply(mat44 lhs, mat44 rhs, mat44 result); - -void matrix_4x4_multiply_in_place(mat44 lhs, mat44 rhs) { - mat44 result; - matrix_4x4_multiply(lhs, rhs, result); - matrix_4x4_copy(result, rhs); -} - -void matrix_4x4_multiply_homogeneous_in_place(mat44 lhs, mat44 rhs) { - mat44 result; - matrix_4x4_multiply_homogeneous(lhs, rhs, result); - matrix_4x4_copy(result, rhs); -} - -#ifdef NONMATCHING -// 8cbf8: move v1,zero 8cbf8: move v1,zero -// 8cbfc: move t0,a0 r 8cbfc: move t1,a0 -// 8cc00: li t2,0x10 r 8cc00: li t3,0x10 -// 8cc04: li t1,4 r 8cc04: li t2,0x40 -// 8cc08: move v0,zero | 8cc08: addu a0,a2,v1 -// 8cc0c: addu a0,a2,v1 | 8cc0c: move a3,zero -// 8cc10: move a3,a1 r 8cc10: move t0,a1 -// 8cc14: lwc1 $f18,0(t0) r 8cc14: lwc1 $f18,0(t1) -// 8cc18: lwc1 $f16,0(a3) r 8cc18: lwc1 $f16,0(t0) -// 8cc1c: lwc1 $f14,0x10(t0) r 8cc1c: lwc1 $f14,0x10(t1) -// 8cc20: lwc1 $f12,4(a3) r 8cc20: lwc1 $f12,4(t0) -// 8cc24: mul.s $f16,$f18,$f16 8cc24: mul.s $f16,$f18,$f16 -// 8cc28: lwc1 $f18,0x20(t0) r 8cc28: lwc1 $f18,0x20(t1) -// 8cc2c: lwc1 $f10,8(a3) r 8cc2c: lwc1 $f10,8(t0) -// 8cc30: mul.s $f12,$f14,$f12 8cc30: mul.s $f12,$f14,$f12 -// 8cc34: lwc1 $f14,0xc(a3) r 8cc34: lwc1 $f14,0xc(t0) -// 8cc38: lwc1 $f8,0x30(t0) r 8cc38: lwc1 $f8,0x30(t1) -// 8cc3c: mul.s $f10,$f18,$f10 8cc3c: mul.s $f10,$f18,$f10 -// 8cc40: addiu v0,v0,2 r 8cc40: addiu a3,a3,0x20 -// 8cc44: addiu a0,a0,0x20 8cc44: addiu a0,a0,0x20 -// 8cc48: mul.s $f8,$f14,$f8 8cc48: mul.s $f8,$f14,$f8 -// 8cc4c: addiu a3,a3,0x20 r 8cc4c: addiu t0,t0,0x20 -// 8cc50: add.s $f12,$f16,$f12 8cc50: add.s $f12,$f16,$f12 -// 8cc54: add.s $f10,$f12,$f10 8cc54: add.s $f10,$f12,$f10 -// 8cc58: add.s $f10,$f8,$f10 8cc58: add.s $f10,$f8,$f10 -// 8cc5c: swc1 $f10,-0x20(a0) 8cc5c: swc1 $f10,-0x20(a0) -// 8cc60: lwc1 $f10,0(t0) r 8cc60: lwc1 $f10,0(t1) -// 8cc64: lwc1 $f8,-0x10(a3) r 8cc64: lwc1 $f8,-0x10(t0) -// 8cc68: lwc1 $f12,0x10(t0) r 8cc68: lwc1 $f12,0x10(t1) -// 8cc6c: lwc1 $f16,-0xc(a3) r 8cc6c: lwc1 $f16,-0xc(t0) -// 8cc70: mul.s $f8,$f10,$f8 8cc70: mul.s $f8,$f10,$f8 -// 8cc74: lwc1 $f10,0x20(t0) r 8cc74: lwc1 $f10,0x20(t1) -// 8cc78: lwc1 $f14,-8(a3) r 8cc78: lwc1 $f14,-8(t0) -// 8cc7c: mul.s $f16,$f12,$f16 8cc7c: mul.s $f16,$f12,$f16 -// 8cc80: lwc1 $f12,-4(a3) r 8cc80: lwc1 $f12,-4(t0) -// 8cc84: lwc1 $f18,0x30(t0) r 8cc84: lwc1 $f18,0x30(t1) -// 8cc88: mul.s $f14,$f10,$f14 8cc88: mul.s $f14,$f10,$f14 -// 8cc8c: nop 8cc8c: nop -// 8cc90: mul.s $f18,$f12,$f18 8cc90: mul.s $f18,$f12,$f18 -// 8cc94: add.s $f16,$f8,$f16 8cc94: add.s $f16,$f8,$f16 -// 8cc98: add.s $f14,$f16,$f14 8cc98: add.s $f14,$f16,$f14 -// 8cc9c: add.s $f14,$f18,$f14 8cc9c: add.s $f14,$f18,$f14 -// 8cca0: bne v0,t1,0x8cc14 ~> r 8cca0: bne a3,t2,0x8cc14 ~> -// 8cca4: swc1 $f14,-0x10(a0) 8cca4: swc1 $f14,-0x10(a0) -// 8cca8: addiu v1,v1,4 8cca8: addiu v1,v1,4 -// 8ccac: bne v1,t2,0x8cc08 ~> r 8ccac: bne v1,t3,0x8cc08 ~> -// 8ccb0: addiu t0,t0,4 r 8ccb0: addiu t1,t1,4 -// 8ccb4: jr ra 8ccb4: jr ra -void matrix_4x4_multiply(mat44 lhs, mat44 rhs, mat44 result) { +void matrix_4x4_copy(Mtxf *src, Mtxf *dst) { s32 i, j; for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j += 2) { - result[j + 0][i] = lhs[0][i] * rhs[j + 0][0] + lhs[1][i] * rhs[j + 0][1] + lhs[2][i] * rhs[j + 0][2] + lhs[3][i] * rhs[j + 0][3]; - result[j + 1][i] = lhs[0][i] * rhs[j + 1][0] + lhs[1][i] * rhs[j + 1][1] + lhs[2][i] * rhs[j + 1][2] + lhs[3][i] * rhs[j + 1][3]; + for (j = 0; j < 4; j++) { + dst->m[i][j] = src->m[i][j]; } } } -#else -GLOBAL_ASM( -.text -glabel matrix_4x4_multiply -/* 08CBF8 7F0580C8 00001825 */ move $v1, $zero -/* 08CBFC 7F0580CC 00804025 */ move $t0, $a0 -/* 08CC00 7F0580D0 240A0010 */ li $t2, 16 -/* 08CC04 7F0580D4 24090004 */ li $t1, 4 -.L7F0580D8: -/* 08CC08 7F0580D8 00001025 */ move $v0, $zero -/* 08CC0C 7F0580DC 00C32021 */ addu $a0, $a2, $v1 -/* 08CC10 7F0580E0 00A03825 */ move $a3, $a1 -.L7F0580E4: -/* 08CC14 7F0580E4 C5120000 */ lwc1 $f18, ($t0) -/* 08CC18 7F0580E8 C4F00000 */ lwc1 $f16, ($a3) -/* 08CC1C 7F0580EC C50E0010 */ lwc1 $f14, 0x10($t0) -/* 08CC20 7F0580F0 C4EC0004 */ lwc1 $f12, 4($a3) -/* 08CC24 7F0580F4 46109402 */ mul.s $f16, $f18, $f16 -/* 08CC28 7F0580F8 C5120020 */ lwc1 $f18, 0x20($t0) -/* 08CC2C 7F0580FC C4EA0008 */ lwc1 $f10, 8($a3) -/* 08CC30 7F058100 460C7302 */ mul.s $f12, $f14, $f12 -/* 08CC34 7F058104 C4EE000C */ lwc1 $f14, 0xc($a3) -/* 08CC38 7F058108 C5080030 */ lwc1 $f8, 0x30($t0) -/* 08CC3C 7F05810C 460A9282 */ mul.s $f10, $f18, $f10 -/* 08CC40 7F058110 24420002 */ addiu $v0, $v0, 2 -/* 08CC44 7F058114 24840020 */ addiu $a0, $a0, 0x20 -/* 08CC48 7F058118 46087202 */ mul.s $f8, $f14, $f8 -/* 08CC4C 7F05811C 24E70020 */ addiu $a3, $a3, 0x20 -/* 08CC50 7F058120 460C8300 */ add.s $f12, $f16, $f12 -/* 08CC54 7F058124 460A6280 */ add.s $f10, $f12, $f10 -/* 08CC58 7F058128 460A4280 */ add.s $f10, $f8, $f10 -/* 08CC5C 7F05812C E48AFFE0 */ swc1 $f10, -0x20($a0) -/* 08CC60 7F058130 C50A0000 */ lwc1 $f10, ($t0) -/* 08CC64 7F058134 C4E8FFF0 */ lwc1 $f8, -0x10($a3) -/* 08CC68 7F058138 C50C0010 */ lwc1 $f12, 0x10($t0) -/* 08CC6C 7F05813C C4F0FFF4 */ lwc1 $f16, -0xc($a3) -/* 08CC70 7F058140 46085202 */ mul.s $f8, $f10, $f8 -/* 08CC74 7F058144 C50A0020 */ lwc1 $f10, 0x20($t0) -/* 08CC78 7F058148 C4EEFFF8 */ lwc1 $f14, -8($a3) -/* 08CC7C 7F05814C 46106402 */ mul.s $f16, $f12, $f16 -/* 08CC80 7F058150 C4ECFFFC */ lwc1 $f12, -4($a3) -/* 08CC84 7F058154 C5120030 */ lwc1 $f18, 0x30($t0) -/* 08CC88 7F058158 460E5382 */ mul.s $f14, $f10, $f14 -/* 08CC8C 7F05815C 00000000 */ nop -/* 08CC90 7F058160 46126482 */ mul.s $f18, $f12, $f18 -/* 08CC94 7F058164 46104400 */ add.s $f16, $f8, $f16 -/* 08CC98 7F058168 460E8380 */ add.s $f14, $f16, $f14 -/* 08CC9C 7F05816C 460E9380 */ add.s $f14, $f18, $f14 -/* 08CCA0 7F058170 1449FFDC */ bne $v0, $t1, .L7F0580E4 -/* 08CCA4 7F058174 E48EFFF0 */ swc1 $f14, -0x10($a0) -/* 08CCA8 7F058178 24630004 */ addiu $v1, $v1, 4 -/* 08CCAC 7F05817C 146AFFD6 */ bne $v1, $t2, .L7F0580D8 -/* 08CCB0 7F058180 25080004 */ addiu $t0, $t0, 4 -/* 08CCB4 7F058184 03E00008 */ jr $ra -/* 08CCB8 7F058188 00000000 */ nop -) -#endif -s32 matrix_4x4_multiply_homogeneous(mat44 lhs, mat44 rhs, mat44 result) { +void matrix_4x4_multiply(Mtxf *lhs, Mtxf *rhs, Mtxf *result); + +void matrix_4x4_multiply_in_place(Mtxf *lhs, Mtxf *rhs) { + Mtxf result; + matrix_4x4_multiply(lhs, rhs, &result); + matrix_4x4_copy(&result, rhs); +} + +void matrix_4x4_multiply_homogeneous_in_place(Mtxf *lhs, Mtxf *rhs) { + Mtxf result; + matrix_4x4_multiply_homogeneous(lhs, rhs, &result); + matrix_4x4_copy(&result, rhs); +} + +void matrix_4x4_multiply(Mtxf *lhs, Mtxf *rhs, Mtxf *result) { + s32 i, j; + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + result->m[j][i] = lhs->m[0][i] * rhs->m[j][0] + lhs->m[1][i] * rhs->m[j][1] + lhs->m[2][i] * rhs->m[j][2] + lhs->m[3][i] * rhs->m[j][3]; + } + } +} + +s32 matrix_4x4_multiply_homogeneous(Mtxf *lhs, Mtxf *rhs, Mtxf *result) { s32 i, j; for (i = 0; i < 3; i++) { - for (j = 0; j < 4; j += 2) { - result[j + 0][i] = (lhs[0][i] * rhs[j + 0][0]) + (lhs[1][i] * rhs[j + 0][1]) + (lhs[2][i] * rhs[j + 0][2]); + for (j = 0; j < 4; j++) { + result->m[j][i] = (lhs->m[0][i] * rhs->m[j][0]) + (lhs->m[1][i] * rhs->m[j][1]) + (lhs->m[2][i] * rhs->m[j][2]); if (j == 3) { - result[j + 0][i] += lhs[3][i]; - } - result[j + 1][i] = (lhs[0][i] * rhs[j + 1][0]) + (lhs[1][i] * rhs[j + 1][1]) + (lhs[2][i] * rhs[j + 1][2]); - if (j == 2) { - result[j + 1][i] += lhs[3][i]; + result->m[j][i] += lhs->m[3][i]; } } } - result[0][3] = 0.0f; - result[1][3] = 0.0f; - result[2][3] = 0.0f; - result[3][3] = 1.0f; + result->m[0][3] = 0.0f; + result->m[1][3] = 0.0f; + result->m[2][3] = 0.0f; + result->m[3][3] = 1.0f; } -void sub_GAME_7F058274(mat44 arg0, mat44 arg1, mat44 arg2) { - arg2[0][0] = (arg0[0][0] * arg1[0][0]); - arg2[1][0] = (arg0[0][0] * arg1[1][0]); - arg2[2][0] = (arg0[0][0] * arg1[2][0]); - arg2[3][0] = (arg0[0][0] * arg1[3][0]); - arg2[0][1] = (arg0[1][1] * arg1[0][1]); - arg2[1][1] = (arg0[1][1] * arg1[1][1]); - arg2[2][1] = (arg0[1][1] * arg1[2][1]); - arg2[3][1] = (arg0[1][1] * arg1[3][1]); - arg2[0][2] = (arg0[2][2] * arg1[0][2]); - arg2[1][2] = (arg0[2][2] * arg1[1][2]); - arg2[2][2] = (arg0[2][2] * arg1[2][2]); - arg2[3][2] = (arg0[2][2] * arg1[3][2]) + arg0[3][2]; - arg2[0][3] = (arg0[2][3] * arg1[0][2]); - arg2[1][3] = (arg0[2][3] * arg1[1][2]); - arg2[2][3] = (arg0[2][3] * arg1[2][2]); - arg2[3][3] = (arg0[2][3] * arg1[3][2]); +void matrix_4x4_7F058274(Mtxf *arg0, Mtxf *arg1, Mtxf *arg2) { + arg2->m[0][0] = (arg0->m[0][0] * arg1->m[0][0]); + arg2->m[1][0] = (arg0->m[0][0] * arg1->m[1][0]); + arg2->m[2][0] = (arg0->m[0][0] * arg1->m[2][0]); + arg2->m[3][0] = (arg0->m[0][0] * arg1->m[3][0]); + arg2->m[0][1] = (arg0->m[1][1] * arg1->m[0][1]); + arg2->m[1][1] = (arg0->m[1][1] * arg1->m[1][1]); + arg2->m[2][1] = (arg0->m[1][1] * arg1->m[2][1]); + arg2->m[3][1] = (arg0->m[1][1] * arg1->m[3][1]); + arg2->m[0][2] = (arg0->m[2][2] * arg1->m[0][2]); + arg2->m[1][2] = (arg0->m[2][2] * arg1->m[1][2]); + arg2->m[2][2] = (arg0->m[2][2] * arg1->m[2][2]); + arg2->m[3][2] = (arg0->m[2][2] * arg1->m[3][2]) + arg0->m[3][2]; + arg2->m[0][3] = (arg0->m[2][3] * arg1->m[0][2]); + arg2->m[1][3] = (arg0->m[2][3] * arg1->m[1][2]); + arg2->m[2][3] = (arg0->m[2][3] * arg1->m[2][2]); + arg2->m[3][3] = (arg0->m[2][3] * arg1->m[3][2]); } -void matrix_4x4_rotate_vector(mat44 matrix, vec3 vector, vec3 result) { +void matrix_4x4_rotate_vector(Mtxf *matrix, vec3 vector, vec3 result) { s32 i; for (i = 0; i < 3; i++) { - result[i] = matrix[0][i] * vector[0] + matrix[1][i] * vector[1] + matrix[2][i] * vector[2]; + result[i] = matrix->m[0][i] * vector[0] + matrix->m[1][i] * vector[1] + matrix->m[2][i] * vector[2]; } } -void matrix_4x4_rotate_vector_in_place(mat44 matrix, vec3 vector) { +void matrix_4x4_rotate_vector_in_place(Mtxf *matrix, vec3 vector) { vec3 result; matrix_4x4_rotate_vector(matrix, vector, result); vector[0] = result[0]; @@ -234,291 +119,170 @@ void matrix_4x4_rotate_vector_in_place(mat44 matrix, vec3 vector) { vector[2] = result[2]; } -void matrix_4x4_transform_vector(mat44 matrix, vec3 vector, vec3 result) { +void matrix_4x4_transform_vector(Mtxf *matrix, vec3 vector, vec3 result) { matrix_4x4_rotate_vector(matrix, vector, result); - result[0] += matrix[3][0]; - result[1] += matrix[3][1]; - result[2] += matrix[3][2]; + result[0] += matrix->m[3][0]; + result[1] += matrix->m[3][1]; + result[2] += matrix->m[3][2]; } -void matrix_4x4_transform_vector_in_place(mat44 matrix, vec3 vector) { +void matrix_4x4_transform_vector_in_place(Mtxf *matrix, vec3 vector) { matrix_4x4_rotate_vector_in_place(matrix, vector); - vector[0] += matrix[3][0]; - vector[1] += matrix[3][1]; - vector[2] += matrix[3][2]; + vector[0] += matrix->m[3][0]; + vector[1] += matrix->m[3][1]; + vector[2] += matrix->m[3][2]; } -void matrix_4x4_set_position_and_rotation_around_y(f32* position, f32 angle, mat44 matrix) { +void matrix_4x4_set_position_and_rotation_around_y(f32* position, f32 angle, Mtxf *matrix) { f32 cosine = cosf(angle); f32 sine = sinf(angle); - matrix[0][0] = cosine; - matrix[0][1] = 0.0f; - matrix[0][2] = -sine; - matrix[0][3] = 0.0f; - matrix[1][0] = 0.0f; - matrix[1][1] = 1.0f; - matrix[1][2] = 0.0f; - matrix[1][3] = 0.0f; - matrix[2][0] = sine; - matrix[2][1] = 0.0f; - matrix[2][2] = cosine; - matrix[2][3] = 0.0f; - matrix[3][0] = position[0]; - matrix[3][1] = position[1]; - matrix[3][2] = position[2]; - matrix[3][3] = 1.0f; + matrix->m[0][0] = cosine; + matrix->m[0][1] = 0.0f; + matrix->m[0][2] = -sine; + matrix->m[0][3] = 0.0f; + matrix->m[1][0] = 0.0f; + matrix->m[1][1] = 1.0f; + matrix->m[1][2] = 0.0f; + matrix->m[1][3] = 0.0f; + matrix->m[2][0] = sine; + matrix->m[2][1] = 0.0f; + matrix->m[2][2] = cosine; + matrix->m[2][3] = 0.0f; + matrix->m[3][0] = position[0]; + matrix->m[3][1] = position[1]; + matrix->m[3][2] = position[2]; + matrix->m[3][3] = 1.0f; } -void matrix_4x4_set_rotation_around_x(f32 angle, mat44 matrix) { +void matrix_4x4_set_rotation_around_x(f32 angle, Mtxf *matrix) { f32 cosine = cosf(angle); f32 sine = sinf(angle); - matrix[0][0] = 1.0f; - matrix[0][1] = 0.0f; - matrix[0][2] = 0.0f; - matrix[0][3] = 0.0f; - matrix[1][0] = 0.0f; - matrix[1][1] = cosine; - matrix[1][2] = sine; - matrix[1][3] = 0.0f; - matrix[2][0] = 0.0f; - matrix[2][1] = -sine; - matrix[2][2] = cosine; - matrix[2][3] = 0.0f; - matrix[3][0] = 0.0f; - matrix[3][1] = 0.0f; - matrix[3][2] = 0.0f; - matrix[3][3] = 1.0f; + matrix->m[0][0] = 1.0f; + matrix->m[0][1] = 0.0f; + matrix->m[0][2] = 0.0f; + matrix->m[0][3] = 0.0f; + matrix->m[1][0] = 0.0f; + matrix->m[1][1] = cosine; + matrix->m[1][2] = sine; + matrix->m[1][3] = 0.0f; + matrix->m[2][0] = 0.0f; + matrix->m[2][1] = -sine; + matrix->m[2][2] = cosine; + matrix->m[2][3] = 0.0f; + matrix->m[3][0] = 0.0f; + matrix->m[3][1] = 0.0f; + matrix->m[3][2] = 0.0f; + matrix->m[3][3] = 1.0f; } -void matrix_4x4_set_rotation_around_y(f32 angle, mat44 matrix) { +void matrix_4x4_set_rotation_around_y(f32 angle, Mtxf *matrix) { f32 cosine = cosf(angle); f32 sine = sinf(angle); - matrix[0][0] = cosine; - matrix[0][1] = 0.0f; - matrix[0][2] = -sine; - matrix[0][3] = 0.0f; - matrix[1][0] = 0.0f; - matrix[1][1] = 1.0f; - matrix[1][2] = 0.0f; - matrix[1][3] = 0.0f; - matrix[2][0] = sine; - matrix[2][1] = 0.0f; - matrix[2][2] = cosine; - matrix[2][3] = 0.0f; - matrix[3][0] = 0.0f; - matrix[3][1] = 0.0f; - matrix[3][2] = 0.0f; - matrix[3][3] = 1.0f; + matrix->m[0][0] = cosine; + matrix->m[0][1] = 0.0f; + matrix->m[0][2] = -sine; + matrix->m[0][3] = 0.0f; + matrix->m[1][0] = 0.0f; + matrix->m[1][1] = 1.0f; + matrix->m[1][2] = 0.0f; + matrix->m[1][3] = 0.0f; + matrix->m[2][0] = sine; + matrix->m[2][1] = 0.0f; + matrix->m[2][2] = cosine; + matrix->m[2][3] = 0.0f; + matrix->m[3][0] = 0.0f; + matrix->m[3][1] = 0.0f; + matrix->m[3][2] = 0.0f; + matrix->m[3][3] = 1.0f; } -void matrix_4x4_set_rotation_around_z(f32 angle, mat44 matrix) { +void matrix_4x4_set_rotation_around_z(f32 angle, Mtxf *matrix) { f32 cosine = cosf(angle); f32 sine = sinf(angle); - matrix[0][0] = cosine; - matrix[0][1] = sine; - matrix[0][2] = 0.0f; - matrix[0][3] = 0.0f; - matrix[1][0] = -sine; - matrix[1][1] = cosine; - matrix[1][2] = 0.0f; - matrix[1][3] = 0.0f; - matrix[2][0] = 0.0f; - matrix[2][1] = 0.0f; - matrix[2][2] = 1.0f; - matrix[2][3] = 0.0f; - matrix[3][0] = 0.0f; - matrix[3][1] = 0.0f; - matrix[3][2] = 0.0f; - matrix[3][3] = 1.0f; + matrix->m[0][0] = cosine; + matrix->m[0][1] = sine; + matrix->m[0][2] = 0.0f; + matrix->m[0][3] = 0.0f; + matrix->m[1][0] = -sine; + matrix->m[1][1] = cosine; + matrix->m[1][2] = 0.0f; + matrix->m[1][3] = 0.0f; + matrix->m[2][0] = 0.0f; + matrix->m[2][1] = 0.0f; + matrix->m[2][2] = 1.0f; + matrix->m[2][3] = 0.0f; + matrix->m[3][0] = 0.0f; + matrix->m[3][1] = 0.0f; + matrix->m[3][2] = 0.0f; + matrix->m[3][3] = 1.0f; } -#ifdef NONMATCHING -// 8d300: lwc1 $f10,0x54(sp) r 8d300: lwc1 $f8,0x54(sp) -// 8d304: mul.s $f18,$f4,$f0 r 8d304: mul.s $f10,$f4,$f0 -// 8d308: nop 8d308: nop -// 8d30c: mul.s $f8,$f10,$f16 r 8d30c: mul.s $f18,$f8,$f16 -// 8d310: nop 8d310: nop -// 8d314: mul.s $f6,$f18,$f2 r 8d314: mul.s $f6,$f10,$f2 -// 8d318: swc1 $f8,0x20(sp) r 8d318: swc1 $f10,0x20(sp) -// 8d31c: add.s $f4,$f6,$f8 r 8d31c: add.s $f4,$f6,$f18 -// 8d320: swc1 $f4,0x14(s0) 8d320: swc1 $f4,0x14(s0) -// 8d324: lwc1 $f10,0x50(sp) r 8d324: lwc1 $f8,0x50(sp) -// 8d328: swc1 $f12,0x1c(s0) 8d328: swc1 $f12,0x1c(s0) -// 8d32c: mul.s $f6,$f10,$f14 r 8d32c: mul.s $f10,$f8,$f14 -// 8d330: swc1 $f6,0x18(s0) r 8d330: swc1 $f10,0x18(s0) -// 8d334: lwc1 $f8,0x20(sp) | 8d334: mul.s $f6,$f18,$f2 -// 8d338: mul.s $f4,$f8,$f2 | 8d338: lwc1 $f4,0x20(sp) -// 8d33c: add.s $f10,$f4,$f18 r 8d33c: add.s $f8,$f6,$f4 -// 8d340: swc1 $f10,0x20(s0) r 8d340: swc1 $f8,0x20(s0) -// 8d344: lwc1 $f6,0x28(sp) r 8d344: lwc1 $f10,0x28(sp) -// 8d348: lwc1 $f4,0x24(sp) 8d348: lwc1 $f4,0x24(sp) -// 8d34c: mul.s $f8,$f6,$f2 r 8d34c: mul.s $f6,$f10,$f2 -// 8d350: sub.s $f10,$f8,$f4 r 8d350: sub.s $f8,$f6,$f4 -// 8d354: mtc1 at,$f4 8d354: mtc1 at,$f4 -// 8d358: swc1 $f10,0x24(s0) r 8d358: swc1 $f8,0x24(s0) -// 8d35c: lwc1 $f6,0x54(sp) r 8d35c: lwc1 $f10,0x54(sp) -// 8d360: swc1 $f12,0x2c(s0) 8d360: swc1 $f12,0x2c(s0) -// 8d364: swc1 $f12,0x30(s0) 8d364: swc1 $f12,0x30(s0) -// 8d368: mul.s $f8,$f6,$f14 r 8d368: mul.s $f6,$f10,$f14 -// 8d36c: swc1 $f12,0x34(s0) 8d36c: swc1 $f12,0x34(s0) -// 8d370: swc1 $f12,0x38(s0) 8d370: swc1 $f12,0x38(s0) -// 8d374: swc1 $f4,0x3c(s0) 8d374: swc1 $f4,0x3c(s0) -// 8d378: swc1 $f8,0x28(s0) r 8d378: swc1 $f6,0x28(s0) -// void matrix_4x4_set_rotation_around_xyz(vec3 angles, mat44 matrix) { -// f32 cos_x = cosf(angles[0]); -// f32 sin_x = sinf(angles[0]); -// f32 cos_y = cosf(angles[1]); -// f32 sin_y = sinf(angles[1]); -// f32 cos_z = cosf(angles[2]); -// f32 sin_z = sinf(angles[2]); -// f32 cos_x_cos_z = cos_x * cos_z; -// f32 cos_x_sin_z = cos_x * sin_z; -// f32 sin_x_cos_z = sin_x * cos_z; -// f32 sin_x_sin_z = sin_x * sin_z; -// matrix[0][0] = (cos_y * cos_z); -// matrix[0][1] = (cos_y * sin_z); -// matrix[0][2] = -sin_y; -// matrix[0][3] = 0.0f; -// matrix[1][0] = ((sin_x_cos_z * sin_y) - cos_x_sin_z); -// matrix[1][1] = ((sin_x_sin_z * sin_y) + cos_x_cos_z); -// matrix[1][2] = sin_x * cos_y; -// matrix[1][3] = 0.0f; -// matrix[2][0] = ((cos_x_cos_z * sin_y) + sin_x_sin_z); -// matrix[2][1] = ((cos_x_sin_z * sin_y) - sin_x_cos_z); -// matrix[2][2] = cos_x * cos_y; -// matrix[2][3] = 0.0f; -// matrix[3][0] = 0.0f; -// matrix[3][1] = 0.0f; -// matrix[3][2] = 0.0f; -// matrix[3][3] = 1.0f; -// } -#else -GLOBAL_ASM( -.text -glabel matrix_4x4_set_rotation_around_xyz -/* 08D244 7F058714 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 08D248 7F058718 AFBF001C */ sw $ra, 0x1c($sp) -/* 08D24C 7F05871C AFB10018 */ sw $s1, 0x18($sp) -/* 08D250 7F058720 AFB00014 */ sw $s0, 0x14($sp) -/* 08D254 7F058724 00A08025 */ move $s0, $a1 -/* 08D258 7F058728 00808825 */ move $s1, $a0 -/* 08D25C 7F05872C 0FC15FA8 */ jal cosf -/* 08D260 7F058730 C48C0000 */ lwc1 $f12, ($a0) -/* 08D264 7F058734 E7A00054 */ swc1 $f0, 0x54($sp) -/* 08D268 7F058738 0FC15FAB */ jal sinf -/* 08D26C 7F05873C C62C0000 */ lwc1 $f12, ($s1) -/* 08D270 7F058740 E7A00050 */ swc1 $f0, 0x50($sp) -/* 08D274 7F058744 0FC15FA8 */ jal cosf -/* 08D278 7F058748 C62C0004 */ lwc1 $f12, 4($s1) -/* 08D27C 7F05874C C62C0004 */ lwc1 $f12, 4($s1) -/* 08D280 7F058750 0FC15FAB */ jal sinf -/* 08D284 7F058754 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 08D288 7F058758 C62C0008 */ lwc1 $f12, 8($s1) -/* 08D28C 7F05875C 0FC15FA8 */ jal cosf -/* 08D290 7F058760 E7A00048 */ swc1 $f0, 0x48($sp) -/* 08D294 7F058764 C62C0008 */ lwc1 $f12, 8($s1) -/* 08D298 7F058768 0FC15FAB */ jal sinf -/* 08D29C 7F05876C E7A00044 */ swc1 $f0, 0x44($sp) -/* 08D2A0 7F058770 C7AE004C */ lwc1 $f14, 0x4c($sp) -/* 08D2A4 7F058774 C7B00044 */ lwc1 $f16, 0x44($sp) -/* 08D2A8 7F058778 C7A20048 */ lwc1 $f2, 0x48($sp) -/* 08D2AC 7F05877C 44806000 */ mtc1 $zero, $f12 -/* 08D2B0 7F058780 46107102 */ mul.s $f4, $f14, $f16 -/* 08D2B4 7F058784 46001207 */ neg.s $f8, $f2 -/* 08D2B8 7F058788 E60C000C */ swc1 $f12, 0xc($s0) -/* 08D2BC 7F05878C 46007182 */ mul.s $f6, $f14, $f0 -/* 08D2C0 7F058790 E6080008 */ swc1 $f8, 8($s0) -/* 08D2C4 7F058794 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 08D2C8 7F058798 E6040000 */ swc1 $f4, ($s0) -/* 08D2CC 7F05879C E6060004 */ swc1 $f6, 4($s0) -/* 08D2D0 7F0587A0 C7AA0050 */ lwc1 $f10, 0x50($sp) -/* 08D2D4 7F0587A4 C7A60054 */ lwc1 $f6, 0x54($sp) -/* 08D2D8 7F0587A8 46105102 */ mul.s $f4, $f10, $f16 -/* 08D2DC 7F0587AC 00000000 */ nop -/* 08D2E0 7F0587B0 46003202 */ mul.s $f8, $f6, $f0 -/* 08D2E4 7F0587B4 00000000 */ nop -/* 08D2E8 7F0587B8 46022282 */ mul.s $f10, $f4, $f2 -/* 08D2EC 7F0587BC E7A40024 */ swc1 $f4, 0x24($sp) -/* 08D2F0 7F0587C0 E7A80028 */ swc1 $f8, 0x28($sp) -/* 08D2F4 7F0587C4 46085181 */ sub.s $f6, $f10, $f8 -/* 08D2F8 7F0587C8 E6060010 */ swc1 $f6, 0x10($s0) -/* 08D2FC 7F0587CC C7A40050 */ lwc1 $f4, 0x50($sp) -/* 08D300 7F0587D0 C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 08D304 7F0587D4 46002482 */ mul.s $f18, $f4, $f0 -/* 08D308 7F0587D8 00000000 */ nop -/* 08D30C 7F0587DC 46105202 */ mul.s $f8, $f10, $f16 -/* 08D310 7F0587E0 00000000 */ nop -/* 08D314 7F0587E4 46029182 */ mul.s $f6, $f18, $f2 -/* 08D318 7F0587E8 E7A80020 */ swc1 $f8, 0x20($sp) -/* 08D31C 7F0587EC 46083100 */ add.s $f4, $f6, $f8 -/* 08D320 7F0587F0 E6040014 */ swc1 $f4, 0x14($s0) -/* 08D324 7F0587F4 C7AA0050 */ lwc1 $f10, 0x50($sp) -/* 08D328 7F0587F8 E60C001C */ swc1 $f12, 0x1c($s0) -/* 08D32C 7F0587FC 460E5182 */ mul.s $f6, $f10, $f14 -/* 08D330 7F058800 E6060018 */ swc1 $f6, 0x18($s0) -/* 08D334 7F058804 C7A80020 */ lwc1 $f8, 0x20($sp) -/* 08D338 7F058808 46024102 */ mul.s $f4, $f8, $f2 -/* 08D33C 7F05880C 46122280 */ add.s $f10, $f4, $f18 -/* 08D340 7F058810 E60A0020 */ swc1 $f10, 0x20($s0) -/* 08D344 7F058814 C7A60028 */ lwc1 $f6, 0x28($sp) -/* 08D348 7F058818 C7A40024 */ lwc1 $f4, 0x24($sp) -/* 08D34C 7F05881C 46023202 */ mul.s $f8, $f6, $f2 -/* 08D350 7F058820 46044281 */ sub.s $f10, $f8, $f4 -/* 08D354 7F058824 44812000 */ mtc1 $at, $f4 -/* 08D358 7F058828 E60A0024 */ swc1 $f10, 0x24($s0) -/* 08D35C 7F05882C C7A60054 */ lwc1 $f6, 0x54($sp) -/* 08D360 7F058830 E60C002C */ swc1 $f12, 0x2c($s0) -/* 08D364 7F058834 E60C0030 */ swc1 $f12, 0x30($s0) -/* 08D368 7F058838 460E3202 */ mul.s $f8, $f6, $f14 -/* 08D36C 7F05883C E60C0034 */ swc1 $f12, 0x34($s0) -/* 08D370 7F058840 E60C0038 */ swc1 $f12, 0x38($s0) -/* 08D374 7F058844 E604003C */ swc1 $f4, 0x3c($s0) -/* 08D378 7F058848 E6080028 */ swc1 $f8, 0x28($s0) -/* 08D37C 7F05884C 8FBF001C */ lw $ra, 0x1c($sp) -/* 08D380 7F058850 8FB10018 */ lw $s1, 0x18($sp) -/* 08D384 7F058854 8FB00014 */ lw $s0, 0x14($sp) -/* 08D388 7F058858 03E00008 */ jr $ra -/* 08D38C 7F05885C 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif +void matrix_4x4_set_rotation_around_xyz(vec3 angles, Mtxf *matrix) { + f32 cos_x = cosf(angles[0]); + f32 sin_x = sinf(angles[0]); + f32 cos_y = cosf(angles[1]); + f32 sin_y = sinf(angles[1]); + f32 cos_z = cosf(angles[2]); + f32 sin_z = sinf(angles[2]); + f32 sin_x_sin_z = sin_x * sin_z; + f32 cos_x_sin_z = cos_x * sin_z; + f32 sin_x_cos_z = sin_x * cos_z; + f32 cos_x_cos_z = cos_x * cos_z; + matrix->m[0][0] = (cos_y * cos_z); + matrix->m[0][1] = (cos_y * sin_z); + matrix->m[0][2] = -sin_y; + matrix->m[0][3] = 0.0f; + matrix->m[1][0] = ((sin_x_cos_z * sin_y) - cos_x_sin_z); + matrix->m[1][1] = ((sin_x_sin_z * sin_y) + cos_x_cos_z); + matrix->m[1][2] = sin_x * cos_y; + matrix->m[1][3] = 0.0f; + matrix->m[2][0] = ((cos_x_cos_z * sin_y) + sin_x_sin_z); + matrix->m[2][1] = ((cos_x_sin_z * sin_y) - sin_x_cos_z); + matrix->m[2][2] = cos_x * cos_y; + matrix->m[2][3] = 0.0f; + matrix->m[3][0] = 0.0f; + matrix->m[3][1] = 0.0f; + matrix->m[3][2] = 0.0f; + matrix->m[3][3] = 1.0f; +} f32 atan2f(f32, f32); #define EPSILON 0.0000019073486f // https://stackoverflow.com/a/15029416 -void matrix_4x4_get_rotation_around_xyz(mat44 matrix, vec3 angles) { +void matrix_4x4_get_rotation_around_xyz(Mtxf *matrix, vec3 angles) { f32 norm; - f32 sin_x_cos_y = matrix[1][2]; - f32 cos_x_cos_y = matrix[2][2]; + f32 sin_x_cos_y = matrix->m[1][2]; + f32 cos_x_cos_y = matrix->m[2][2]; norm = sqrtf((sin_x_cos_y * sin_x_cos_y) + (cos_x_cos_y * cos_x_cos_y)); if (EPSILON < norm) { - angles[0] = atan2f(matrix[1][2], matrix[2][2]); - angles[1] = atan2f(-matrix[0][2], norm); - angles[2] = atan2f(matrix[0][1], matrix[0][0]); + angles[0] = atan2f(matrix->m[1][2], matrix->m[2][2]); + angles[1] = atan2f(-matrix->m[0][2], norm); + angles[2] = atan2f(matrix->m[0][1], matrix->m[0][0]); } else { angles[0] = 0.0f; - angles[1] = atan2f(-matrix[0][2], norm); - angles[2] = atan2f(-matrix[1][0], matrix[1][1]); + angles[1] = atan2f(-matrix->m[0][2], norm); + angles[2] = atan2f(-matrix->m[1][0], matrix->m[1][1]); } } -void matrix_4x4_set_position(vec3 position, mat44 matrix); +void matrix_4x4_set_position(vec3 position, Mtxf *matrix); -void matrix_4x4_set_position_and_rotation_around_xyz(vec3 position, vec3 rotation, mat44 matrix) { +void matrix_4x4_set_position_and_rotation_around_xyz(vec3 position, vec3 rotation, Mtxf *matrix) { matrix_4x4_set_rotation_around_xyz(rotation, matrix); matrix_4x4_set_position(position, matrix); } -void matrix_4x4_set_identity_and_position(vec3 position, mat44 matrix) { +void matrix_4x4_set_identity_and_position(vec3 position, Mtxf *matrix) { matrix_4x4_set_identity(matrix); matrix_4x4_set_position(position, matrix); } -void matrix_4x4_set_position(vec3 position, mat44 matrix) { - matrix[3][0] = position[0]; - matrix[3][1] = position[1]; - matrix[3][2] = position[2]; +void matrix_4x4_set_position(vec3 position, Mtxf *matrix) { + matrix->m[3][0] = position[0]; + matrix->m[3][1] = position[1]; + matrix->m[3][2] = position[2]; } void matrix_column_1_scalar_multiply(f32 scalar, f32* matrix) { @@ -595,16 +359,16 @@ void matrix_scalar_multiply_3(f32 scalar, f32* matrix) { matrix[14] *= scalar; } -void sub_GAME_7F058C4C(f32 arg0) { +void matrix_4x4_7F058C4C(f32 arg0) { D_80032310[0] = (65536.0f * arg0); } -void sub_GAME_7F058C64(void) { +void matrix_4x4_7F058C64(void) { flt_CODE_bss_80075DA0 = D_80032310[0]; D_80032310[0] = 65536.0f; } -void sub_GAME_7F058C88(void) { +void matrix_4x4_7F058C88(void) { D_80032310[0] = flt_CODE_bss_80075DA0; } @@ -617,7 +381,26 @@ void sub_GAME_7F058C88(void) { // var2 = (s32)(matrix[(index) * 2 + 1] * D_80032310[(index) & 1]); \ // result[index + 0] = GET_HIGH_S16(var1, var2); \ // result[index + 8] = GET_LOW_S16(var1, var2); -// void sub_GAME_7F058C9C(f32* matrix, s32* result) { +#define FTOFIX32(x) (long)((x) * D_80032310[0]) + +void sub_GAME_7F058C9C(f32 mf[4][4], s32 ms[4][4]) { + int i, j; + int e1,e2; + int *ai,*af; + + ai=(int*)&ms[0][0]; + af=(int*)&ms[2][0]; + + for (i=0; i<4; i++) + for (j=0; j<2; j++) { + e1=FTOFIX32(mf[i][j*2]); + e2=FTOFIX32(mf[i][j*2+1]); + *(ai++) = (e1 & 0xffff0000 ) | ((e2 >> 16)&0xffff); + *(af++) = ((e1 << 16) & 0xffff0000) | (e2 & 0xffff); + } +} + + // // s32 i; // // s32 x; // // s32 y; @@ -921,175 +704,203 @@ glabel sub_GAME_7F058E78 ) #endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F059044(void) { - +void matrix_4x4_7F059044(Mtxf *arg0, Mtx* arg1) { + s32 i, j; + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + arg1->m[i][j] = arg0->m[i][j] * 65536.0f; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F059044 -/* 08DB74 7F059044 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 08DB78 7F059048 00803025 */ move $a2, $a0 -/* 08DB7C 7F05904C 44810000 */ mtc1 $at, $f0 -/* 08DB80 7F059050 24040004 */ li $a0, 4 -/* 08DB84 7F059054 00001025 */ move $v0, $zero -/* 08DB88 7F059058 00A01825 */ move $v1, $a1 -/* 08DB8C 7F05905C C4D00000 */ lwc1 $f16, ($a2) -/* 08DB90 7F059060 24420001 */ addiu $v0, $v0, 1 -/* 08DB94 7F059064 46008482 */ mul.s $f18, $f16, $f0 -/* 08DB98 7F059068 5044001F */ beql $v0, $a0, .L7F0590E8 -/* 08DB9C 7F05906C 4600940D */ trunc.w.s $f16, $f18 -/* 08DBA0 7F059070 4600940D */ trunc.w.s $f16, $f18 -.L7F059074: -/* 08DBA4 7F059074 24420001 */ addiu $v0, $v0, 1 -/* 08DBA8 7F059078 24630010 */ addiu $v1, $v1, 0x10 -/* 08DBAC 7F05907C 24C60010 */ addiu $a2, $a2, 0x10 -/* 08DBB0 7F059080 440F8000 */ mfc1 $t7, $f16 -/* 08DBB4 7F059084 00000000 */ nop -/* 08DBB8 7F059088 AC6FFFF0 */ sw $t7, -0x10($v1) -/* 08DBBC 7F05908C C4D0FFF4 */ lwc1 $f16, -0xc($a2) -/* 08DBC0 7F059090 46008402 */ mul.s $f16, $f16, $f0 -/* 08DBC4 7F059094 4600840D */ trunc.w.s $f16, $f16 -/* 08DBC8 7F059098 44198000 */ mfc1 $t9, $f16 -/* 08DBCC 7F05909C 00000000 */ nop -/* 08DBD0 7F0590A0 AC79FFF4 */ sw $t9, -0xc($v1) -/* 08DBD4 7F0590A4 C4D0FFF8 */ lwc1 $f16, -8($a2) -/* 08DBD8 7F0590A8 46008402 */ mul.s $f16, $f16, $f0 -/* 08DBDC 7F0590AC 4600840D */ trunc.w.s $f16, $f16 -/* 08DBE0 7F0590B0 44098000 */ mfc1 $t1, $f16 -/* 08DBE4 7F0590B4 00000000 */ nop -/* 08DBE8 7F0590B8 AC69FFF8 */ sw $t1, -8($v1) -/* 08DBEC 7F0590BC C4D0FFFC */ lwc1 $f16, -4($a2) -/* 08DBF0 7F0590C0 46008402 */ mul.s $f16, $f16, $f0 -/* 08DBF4 7F0590C4 4600840D */ trunc.w.s $f16, $f16 -/* 08DBF8 7F0590C8 440B8000 */ mfc1 $t3, $f16 -/* 08DBFC 7F0590CC 00000000 */ nop -/* 08DC00 7F0590D0 AC6BFFFC */ sw $t3, -4($v1) -/* 08DC04 7F0590D4 C4D00000 */ lwc1 $f16, ($a2) -/* 08DC08 7F0590D8 46008482 */ mul.s $f18, $f16, $f0 -/* 08DC0C 7F0590DC 5444FFE5 */ bnel $v0, $a0, .L7F059074 -/* 08DC10 7F0590E0 4600940D */ trunc.w.s $f16, $f18 -/* 08DC14 7F0590E4 4600940D */ trunc.w.s $f16, $f18 -.L7F0590E8: -/* 08DC18 7F0590E8 24630010 */ addiu $v1, $v1, 0x10 -/* 08DC1C 7F0590EC 24C60010 */ addiu $a2, $a2, 0x10 -/* 08DC20 7F0590F0 440F8000 */ mfc1 $t7, $f16 -/* 08DC24 7F0590F4 00000000 */ nop -/* 08DC28 7F0590F8 AC6FFFF0 */ sw $t7, -0x10($v1) -/* 08DC2C 7F0590FC C4D0FFF4 */ lwc1 $f16, -0xc($a2) -/* 08DC30 7F059100 46008402 */ mul.s $f16, $f16, $f0 -/* 08DC34 7F059104 4600840D */ trunc.w.s $f16, $f16 -/* 08DC38 7F059108 44198000 */ mfc1 $t9, $f16 -/* 08DC3C 7F05910C 00000000 */ nop -/* 08DC40 7F059110 AC79FFF4 */ sw $t9, -0xc($v1) -/* 08DC44 7F059114 C4D0FFF8 */ lwc1 $f16, -8($a2) -/* 08DC48 7F059118 46008402 */ mul.s $f16, $f16, $f0 -/* 08DC4C 7F05911C 4600840D */ trunc.w.s $f16, $f16 -/* 08DC50 7F059120 44098000 */ mfc1 $t1, $f16 -/* 08DC54 7F059124 00000000 */ nop -/* 08DC58 7F059128 AC69FFF8 */ sw $t1, -8($v1) -/* 08DC5C 7F05912C C4D0FFFC */ lwc1 $f16, -4($a2) -/* 08DC60 7F059130 46008402 */ mul.s $f16, $f16, $f0 -/* 08DC64 7F059134 4600840D */ trunc.w.s $f16, $f16 -/* 08DC68 7F059138 440B8000 */ mfc1 $t3, $f16 -/* 08DC6C 7F05913C 00000000 */ nop -/* 08DC70 7F059140 AC6BFFFC */ sw $t3, -4($v1) -/* 08DC74 7F059144 03E00008 */ jr $ra -/* 08DC78 7F059148 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F05914C(void) { +void matrix_4x4_7F05914C(Mtx* arg0, Mtxf *arg1) { + s32 i, j; + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + arg1->m[i][j] = arg0->m[i][j] / 65536.0f; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F05914C -/* 08DC7C 7F05914C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 08DC80 7F059150 00803025 */ move $a2, $a0 -/* 08DC84 7F059154 44810000 */ mtc1 $at, $f0 -/* 08DC88 7F059158 24040004 */ li $a0, 4 -/* 08DC8C 7F05915C 00001025 */ move $v0, $zero -/* 08DC90 7F059160 00A01825 */ move $v1, $a1 -/* 08DC94 7F059164 24420001 */ addiu $v0, $v0, 1 -/* 08DC98 7F059168 1044001C */ beq $v0, $a0, .L7F0591DC -/* 08DC9C 7F05916C 8CCE0000 */ lw $t6, ($a2) -.L7F059170: -/* 08DCA0 7F059170 448E9000 */ mtc1 $t6, $f18 -/* 08DCA4 7F059174 24420001 */ addiu $v0, $v0, 1 -/* 08DCA8 7F059178 24630010 */ addiu $v1, $v1, 0x10 -/* 08DCAC 7F05917C 468094A0 */ cvt.s.w $f18, $f18 -/* 08DCB0 7F059180 24C60010 */ addiu $a2, $a2, 0x10 -/* 08DCB4 7F059184 46009483 */ div.s $f18, $f18, $f0 -/* 08DCB8 7F059188 E472FFF0 */ swc1 $f18, -0x10($v1) -/* 08DCBC 7F05918C 8CCFFFF4 */ lw $t7, -0xc($a2) -/* 08DCC0 7F059190 448F9000 */ mtc1 $t7, $f18 -/* 08DCC4 7F059194 00000000 */ nop -/* 08DCC8 7F059198 468094A0 */ cvt.s.w $f18, $f18 -/* 08DCCC 7F05919C 46009483 */ div.s $f18, $f18, $f0 -/* 08DCD0 7F0591A0 E472FFF4 */ swc1 $f18, -0xc($v1) -/* 08DCD4 7F0591A4 8CD8FFF8 */ lw $t8, -8($a2) -/* 08DCD8 7F0591A8 44989000 */ mtc1 $t8, $f18 -/* 08DCDC 7F0591AC 00000000 */ nop -/* 08DCE0 7F0591B0 468094A0 */ cvt.s.w $f18, $f18 -/* 08DCE4 7F0591B4 46009483 */ div.s $f18, $f18, $f0 -/* 08DCE8 7F0591B8 E472FFF8 */ swc1 $f18, -8($v1) -/* 08DCEC 7F0591BC 8CD9FFFC */ lw $t9, -4($a2) -/* 08DCF0 7F0591C0 44999000 */ mtc1 $t9, $f18 -/* 08DCF4 7F0591C4 00000000 */ nop -/* 08DCF8 7F0591C8 468094A0 */ cvt.s.w $f18, $f18 -/* 08DCFC 7F0591CC 46009483 */ div.s $f18, $f18, $f0 -/* 08DD00 7F0591D0 E472FFFC */ swc1 $f18, -4($v1) -/* 08DD04 7F0591D4 1444FFE6 */ bne $v0, $a0, .L7F059170 -/* 08DD08 7F0591D8 8CCE0000 */ lw $t6, ($a2) -.L7F0591DC: -/* 08DD0C 7F0591DC 448E9000 */ mtc1 $t6, $f18 -/* 08DD10 7F0591E0 24630010 */ addiu $v1, $v1, 0x10 -/* 08DD14 7F0591E4 24C60010 */ addiu $a2, $a2, 0x10 -/* 08DD18 7F0591E8 468094A0 */ cvt.s.w $f18, $f18 -/* 08DD1C 7F0591EC 46009483 */ div.s $f18, $f18, $f0 -/* 08DD20 7F0591F0 E472FFF0 */ swc1 $f18, -0x10($v1) -/* 08DD24 7F0591F4 8CCFFFF4 */ lw $t7, -0xc($a2) -/* 08DD28 7F0591F8 448F9000 */ mtc1 $t7, $f18 -/* 08DD2C 7F0591FC 00000000 */ nop -/* 08DD30 7F059200 468094A0 */ cvt.s.w $f18, $f18 -/* 08DD34 7F059204 46009483 */ div.s $f18, $f18, $f0 -/* 08DD38 7F059208 E472FFF4 */ swc1 $f18, -0xc($v1) -/* 08DD3C 7F05920C 8CD8FFF8 */ lw $t8, -8($a2) -/* 08DD40 7F059210 44989000 */ mtc1 $t8, $f18 -/* 08DD44 7F059214 00000000 */ nop -/* 08DD48 7F059218 468094A0 */ cvt.s.w $f18, $f18 -/* 08DD4C 7F05921C 46009483 */ div.s $f18, $f18, $f0 -/* 08DD50 7F059220 E472FFF8 */ swc1 $f18, -8($v1) -/* 08DD54 7F059224 8CD9FFFC */ lw $t9, -4($a2) -/* 08DD58 7F059228 44999000 */ mtc1 $t9, $f18 -/* 08DD5C 7F05922C 00000000 */ nop -/* 08DD60 7F059230 468094A0 */ cvt.s.w $f18, $f18 -/* 08DD64 7F059234 46009483 */ div.s $f18, $f18, $f0 -/* 08DD68 7F059238 E472FFFC */ swc1 $f18, -4($v1) -/* 08DD6C 7F05923C 03E00008 */ jr $ra -/* 08DD70 7F059240 00000000 */ nop -) -#endif + +//#ifdef NONMATCHING +#if 0 +#define MTX_INTPART_PACK(w1, w2) (((w1) & 0xFFFF0000) | ((w2) >> 16)) +#define MTX_FRACPART_PACK(w1, w2) (((w1) << 16) | ((w2) & 0xFFFF)) + +void sub_GAME_7F059244(Mtx* a0, Mtx* a1) { + // s32 i; + // s32 j; + // u32 w1; + // u32 w2; + // for (i = 0; i < 2; i++) { + // for (j = 0; j < 4; j++) { + // w1 = a0->m[i * 2 + j / 2][((j * 2) % 4) + 0]; + // w2 = a0->m[i * 2 + j / 2][((j * 2) % 4) + 1]; + // a1->m[i + 0][j] = MTX_INTPART_PACK(w1, w2); + // a1->m[i + 2][j] = MTX_FRACPART_PACK(w1, w2); + // } + // } + + // Reg alloc and iteration mostly! + // s32 i; + // s32 j; + // for (i = 0; i < 2; i++) { + // for (j = 0; j < 4; j++) { + // u32 w1 = a0[i * 2 + j / 2][(j % 2) * 2 + 0]; + // u32 w2 = a0[i * 2 + j / 2][(j % 2) * 2 + 1]; + // a1[i + 0][j] = MTX_INTPART_PACK(w1, w2); + // a1[i + 2][j] = MTX_FRACPART_PACK(w1, w2); + // } + // } + + // s32 i; + // s32 j; + // s32 *mtxInt = (s32 *)&a1[0][0]; + // s32 *mtxFrc = (s32 *)&a1[2][0]; + // for (i = 0; i < 8; i++) { + // *mtxInt++ = MTX_INTPART_PACK(a0[i * 2], (u32)a0[i * 2 + 1]); + // *mtxFrc++ = MTX_FRACPART_PACK(a0[i * 2], a0[i * 2 + 1]); + // } + + // s32 i; + // s32 j; + // s32 *mtxInt = (s32 *)&a1[0][0]; + // s32 *mtxFrc = (s32 *)&a1[2][0]; + // for (i = 0; i < 8; i++) { + // *mtxInt++ = MTX_INTPART_PACK(a0[i * 2], (u32)a0[i * 2 + 1]); + // *mtxFrc++ = MTX_FRACPART_PACK(a0[i * 2], a0[i * 2 + 1]); + // } + // s32 i; + // s32 j; + // for (i = 0; i < 2; i++) { + // for (j = 0; j < 4; j++) { + // a1[i + 0][j] = MTX_INTPART_PACK(a0[i * 8 + j * 2], (u32)a0[i * 8 + j*2 + 1]); + // a1[i + 2][j] = MTX_FRACPART_PACK(a0[i * 8 + j * 2], a0[i * 8 + j*2 + 1]); + // } + // } + + s32 i; + s32 j; + s32* ptr = &a0->m[0][0]; + for (i = 0; i < 2; i++) { + for (j = 0; j < 4; j++) { + s32 w1 = *ptr++; + s32 w2 = *ptr++; + a1->m[i + 0][j] = MTX_INTPART_PACK(w1, (u32)w2); + a1->m[i + 2][j] = MTX_FRACPART_PACK(w1, w2); + } + } + + // s32 i; + // s32 j; + // s32 w1; + // s32 w2; + // for (i = 0; i < 2; i++) { + // for (j = 0; j < 4; j++) { + // w1 = a0[i * 8 + j * 2 + 0]; + // w2 = a0[i * 8 + j * 2 + 1]; + // a1[i + 0][j] = MTX_INTPART_PACK(w1, (u32)w2); + // a1[i + 2][j] = MTX_FRACPART_PACK(w1, w2); + // } + // } + + // s32 i = 0; + // s32 *w1 = &a0[0][0]; + // s32 *w2 = &a0[0][1]; + // for (i = 0; i < 2; i++) { + // a1[i + 0][0] = MTX_INTPART_PACK(*w1, (u32)*w2); + // a1[i + 2][0] = MTX_FRACPART_PACK(*w1, *w2); + // w1 += 2; + // w2 += 2; + // a1[i + 0][1] = MTX_INTPART_PACK(*w1, (u32)*w2); + // a1[i + 2][1] = MTX_FRACPART_PACK(*w1, *w2); + // w1 += 2; + // w2 += 2; + // a1[i + 0][2] = MTX_INTPART_PACK(*w1, (u32)*w2); + // a1[i + 2][2] = MTX_FRACPART_PACK(*w1, *w2); + // w1 += 2; + // w2 += 2; + // a1[i + 0][3] = MTX_INTPART_PACK(*w1, (u32)*w2); + // a1[i + 2][3] = MTX_FRACPART_PACK(*w1, *w2); + // } + + // s32 i = 0; + // s32 w1; + // s32 w2; + // for (i = 0; i < 2; i++) { + // w1 = a0[i * 2 + 0][0]; + // w2 = a0[i * 2 + 0][1]; + // a1[i + 0][0] = MTX_INTPART_PACK(w1, (u32)w2); + // a1[i + 2][0] = MTX_FRACPART_PACK(w1, w2); + // w1 = a0[i * 2 + 0][2]; + // w2 = a0[i * 2 + 0][3]; + // a1[i + 0][1] = MTX_INTPART_PACK(w1, (u32)w2); + // a1[i + 2][1] = MTX_FRACPART_PACK(w1, w2); + // w1 = a0[i * 2 + 1][0]; + // w2 = a0[i * 2 + 1][1]; + // a1[i + 0][2] = MTX_INTPART_PACK(w1, (u32)w2); + // a1[i + 2][2] = MTX_FRACPART_PACK(w1, w2); + // w1 = a0[i * 2 + 1][2]; + // w2 = a0[i * 2 + 1][3]; + // a1[i + 0][3] = MTX_INTPART_PACK(w1, (u32)w2); + // a1[i + 2][3] = MTX_FRACPART_PACK(w1, w2); + // } + // s32 i; + // for (i = 0; i < 2; i++) { + // a1[i + 0][0] = MTX_INTPART_PACK(a0[i * 2 + 0][0], (u32)a0[i * 2 + 0][1]); + // a1[i + 2][0] = MTX_FRACPART_PACK(a0[i * 2 + 0][0], a0[i * 2 + 0][1]); + // a1[i + 0][1] = MTX_INTPART_PACK(a0[i * 2 + 0][2], (u32)a0[i * 2 + 0][3]); + // a1[i + 2][1] = MTX_FRACPART_PACK(a0[i * 2 + 0][2], a0[i * 2 + 0][3]); + // a1[i + 0][2] = MTX_INTPART_PACK(a0[i * 2 + 1][0], (u32)a0[i * 2 + 1][1]); + // a1[i + 2][2] = MTX_FRACPART_PACK(a0[i * 2 + 1][0], a0[i * 2 + 1][1]); + // a1[i + 0][3] = MTX_INTPART_PACK(a0[i * 2 + 1][2], (u32)a0[i * 2 + 1][3]); + // a1[i + 2][3] = MTX_FRACPART_PACK(a0[i * 2 + 1][2], a0[i * 2 + 1][3]); + // } + // a1[0][0] = MTX_INTPART_PACK(a0[0][0], (u32)a0[0][1]); + // a1[2][0] = MTX_FRACPART_PACK(a0[0][0], a0[0][1]); + // a1[0][1] = MTX_INTPART_PACK(a0[0][2], (u32)a0[0][3]); + // a1[2][1] = MTX_FRACPART_PACK(a0[0][2], a0[0][3]); + // a1[0][2] = MTX_INTPART_PACK(a0[1][0], (u32)a0[1][1]); + // a1[2][2] = MTX_FRACPART_PACK(a0[1][0], a0[1][1]); + // a1[0][3] = MTX_INTPART_PACK(a0[1][2], (u32)a0[1][3]); + // a1[2][3] = MTX_FRACPART_PACK(a0[1][2], a0[1][3]); -#ifdef NONMATCHING -void sub_GAME_7F059244(void) { + // a1[1][0] = MTX_INTPART_PACK(a0[2][0], (u32)a0[2][1]); + // a1[3][0] = MTX_FRACPART_PACK(a0[2][0], a0[2][1]); + // a1[1][1] = MTX_INTPART_PACK(a0[2][2], (u32)a0[2][3]); + // a1[3][1] = MTX_FRACPART_PACK(a0[2][2], a0[2][3]); + // a1[1][2] = MTX_INTPART_PACK(a0[3][0], (u32)a0[3][1]); + // a1[3][2] = MTX_FRACPART_PACK(a0[3][0], a0[3][1]); + // a1[1][3] = MTX_INTPART_PACK(a0[3][2], (u32)a0[3][3]); + // a1[3][3] = MTX_FRACPART_PACK(a0[3][2], a0[3][3]); +/* $v0 = 0 + loop: + $a1 += 0x10 + $v1 = *($a0 + $v0 * 8 + 0x00) + $a2 = *($a0 + $v0 * 8 + 0x04) + *($a1 - 0x10) = MTX_INTPART_PACK($v1, (u32)$a2) + *($a1 + 0x10) = MTX_FRACPART_PACK($v1, $a2) + $v1 = *($a0 + ($v0 + 1) * 8 + 0x00) + $a2 = *($a0 + ($v0 + 1) * 8 + 0x04) + *($a1 - 0x0C) = MTX_INTPART_PACK($v1, (u32)$a2) + *($a1 + 0x14) = MTX_FRACPART_PACK($v1, $a2) + $v1 = *($a0 + ($v0 + 2) * 8 + 0x00) + $a2 = *($a0 + ($v0 + 2) * 8 + 0x04) + *($a1 - 0x08) = MTX_INTPART_PACK($v1, (u32)$a2) + *($a1 + 0x18) = MTX_FRACPART_PACK($v1, $a2) + $v1 = *($a0 + ($v0 + 3) * 8 + 0x00) + $a2 = *($a0 + ($v0 + 3) * 8 + 0x04) + *($a1 - 0x04) = MTX_INTPART_PACK($v1, (u32)$a2) + *($a1 + 0x1C) = MTX_FRACPART_PACK($v1, $a2) + $v0 += 4 + if ($v0 != 8) { + goto loop; + }*/ } #else GLOBAL_ASM( @@ -1206,53 +1017,90 @@ loop: return */ -//typedef s32 mat4s[4][4]; +/* +0, 0 +0, 1 +0, 2 +0, 3 +1, 0 +1, 1 +1, 2 +1, 3 +2, 0 +*/ -//void sub_GAME_7F059334(mat4s arg0, mat4s arg1) { -//sub_GAME_7F059334(s32* arg0, s32* arg1) { - //s32* var1 = arg0; - //s32* var2 = arg1; - //for (i = 0; i < 2; i++) { - // for (; var1 < (arg0 + 8); var1++, var2 += 4) - // var1 = arg0[i + 0][0]; - // var2 = arg0[i + 2][0]; - // arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][1]; - // var2 = arg0[i + 2][1]; - // arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][2]; - // var2 = arg0[i + 2][2]; - // arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); - // arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][3]; - // var2 = arg0[i + 2][3]; - // arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); - // } +// void sub_GAME_7F059334(mat4s arg0, mat4s arg1) { +// s32 var1; +// s32 var2; +// s32 i, j; +// for (i = 0; i < 2; i++) { +// for (j = 0; j < 2; j++) { +// var1 = arg0[i + 0][j + 0]; +// var2 = arg0[i + 2][j + 0]; +// arg1[i * 2 + 0][] [i * 8 + j * 2 + 0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 0] * 2 + 1] = ((var1 << 16) | (var2 & 0xFFFF)); +// var1 = arg0[i + 0][j + 1]; +// var2 = arg0[i + 2][j + 1]; +// arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xFFFF)); +// // var1 = arg0[i + 0][2]; +// // var2 = arg0[i + 2][2]; +// // arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); +// // arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); +// // var1 = arg0[i + 0][3]; +// // var2 = arg0[i + 2][3]; +// // arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// // arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); +// } +// } - // s32 var1; - // s32 var2; - // s32 i; - // for (i = 0; i < 2; i++) { - // var1 = arg0[i + 0][0]; - // var2 = arg0[i + 2][0]; - // arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][1]; - // var2 = arg0[i + 2][1]; - // arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][2]; - // var2 = arg0[i + 2][2]; - // arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); - // arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][3]; - // var2 = arg0[i + 2][3]; - // arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); - // } + + + +// sub_GAME_7F059334(s32* arg0, s32* arg1) { +// s32* var1 = arg0; +// s32* var2 = arg1; +// for (i = 0; i < 2; i++) { +// for (; var1 < (arg0 + 8); var1++, var2 += 4) +// var1 = arg0[i + 0][0]; +// var2 = arg0[i + 2][0]; +// arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); +// var1 = arg0[i + 0][1]; +// var2 = arg0[i + 2][1]; +// arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); +// var1 = arg0[i + 0][2]; +// var2 = arg0[i + 2][2]; +// arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); +// arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); +// var1 = arg0[i + 0][3]; +// var2 = arg0[i + 2][3]; +// arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); +// } + +// s32 var1; +// s32 var2; +// s32 i; +// for (i = 0; i < 2; i++) { +// var1 = arg0[i + 0][0]; +// var2 = arg0[i + 2][0]; +// arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); +// var1 = arg0[i + 0][1]; +// var2 = arg0[i + 2][1]; +// arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); +// var1 = arg0[i + 0][2]; +// var2 = arg0[i + 2][2]; +// arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); +// arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); +// var1 = arg0[i + 0][3]; +// var2 = arg0[i + 2][3]; +// arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); +// arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); +// } // s32 temp_v1; // s32 temp_v1_2; @@ -1285,9 +1133,79 @@ return //} #ifdef NONMATCHING -void sub_GAME_7F059334(void) { +#define MTX_INTPART_PACK(w1, w2) (((w1) & 0xFFFF0000) | (((w2) >> 16)/* & 0xFFFF*/)) +#define MTX_FRACPART_PACK(w1, w2) ((((w1) << 16) & 0xFFFF0000) | ((w2) & 0xFFFF)) -} +// void sub_GAME_7F059334(s32 arg0[4][4], s32 arg1[4][4]) { +// s32 i; +// s32 j; +// u32 *m1 = (u32*)&arg0[0][0]; +// u32 *m2 = (u32*)&arg0[2][0]; +// for (i = 0; i < 4; i++) { +// for (j = 0; j < 2; j++) { +// arg1[i][j * 2 + 0] = MTX_INTPART_PACK((*m1), (*m2)); +// m1++; +// arg1[i][j * 2 + 1] = MTX_FRACPART_PACK((*m1), (*m2)); +// m2++; +// } +// } + + + // s32 var1; + // u32 var2; + // s32 i; + // for () + // for (i = 0; i < 2; i++) { + // var1 = arg0[i + 0][0]; + // var2 = arg0[i + 2][0]; + // arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); + // arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); + // var1 = arg0[i + 0][1]; + // var2 = arg0[i + 2][1]; + // arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); + // arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); + // var1 = arg0[i + 0][2]; + // var2 = arg0[i + 2][2]; + // arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); + // arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); + // var1 = arg0[i + 0][3]; + // var2 = arg0[i + 2][3]; + // arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); + // arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); + // } +//} +// void sub_GAME_7F059334(s32 m1[4][4], s32 m2[4][4]) { +// int i; +// int j; +// int *ai = &m1[0][0]; +// u32 *af = &m1[2][0]; + +// for (j=0; j<2; j++) { +// for (i=0; i<4; i++) { +// m2[i][j*2+0] = (*ai & 0xffff0000) | ((*af >> 16) & 0xffff); +// m2[i][j*2+1] = ((*(ai++) << 16) & 0xffff0000) | (*(af++) & 0xffff); +// } +// } +// } + +//void sub_GAME_7F059334(s32 m1[16], s32 m2[16]) { + // s32 i; + // for (i = 0; i < 8; i++) { + // s32 t1 = m1[i+0]; + // s32 t2 = m1[i+8]; + // m2[i * 2 + 0] = MTX_INTPART_PACK(t1, t2); + // m2[i * 2 + 1] = MTX_FRACPART_PACK(t1, t2); + // } + // s32 i, j; + // for (i = 0; i < 2; i++) { + // for (j = 0; j < 4; j++) { + // s32 t1 = m1[i+0][j]; + // s32 t2 = m1[i+2][j]; + // m2[i*8+j*2+0] = MTX_INTPART_PACK(t1, t2); + // m2[i*8+j*2+1] = MTX_FRACPART_PACK(t1, t2); + // } + // } +//} #else GLOBAL_ASM( .text @@ -1356,7 +1274,7 @@ glabel sub_GAME_7F059334 ) #endif -void sub_GAME_7F059424(mat44 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { +void matrix_4x4_7F059424(Mtxf *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { f32 temp_f26; f32 temp_f28; f32 temp_f2_2; @@ -1380,31 +1298,31 @@ void sub_GAME_7F059424(mat44 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 a arg7 *= temp_f2_3; arg8 *= temp_f2_3; arg9 *= temp_f2_3; - arg0[0][0] = temp_f26; - arg0[1][0] = temp_f28; - arg0[2][0] = temp_f30; - arg0[3][0] = -((arg1 * temp_f26) + (arg2 * temp_f28) + (arg3 * temp_f30)); - arg0[0][1] = arg7; - arg0[1][1] = arg8; - arg0[2][1] = arg9; - arg0[3][1] = -((arg1 * arg7) + (arg2 * arg8) + (arg3 * arg9)); - arg0[0][2] = arg4; - arg0[1][2] = arg5; - arg0[2][2] = arg6; - arg0[3][2] = -((arg1 * arg4) + (arg2 * arg5) + (arg3 * arg6)); - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; - arg0[3][3] = 1.0f; + arg0->m[0][0] = temp_f26; + arg0->m[1][0] = temp_f28; + arg0->m[2][0] = temp_f30; + arg0->m[3][0] = -((arg1 * temp_f26) + (arg2 * temp_f28) + (arg3 * temp_f30)); + arg0->m[0][1] = arg7; + arg0->m[1][1] = arg8; + arg0->m[2][1] = arg9; + arg0->m[3][1] = -((arg1 * arg7) + (arg2 * arg8) + (arg3 * arg9)); + arg0->m[0][2] = arg4; + arg0->m[1][2] = arg5; + arg0->m[2][2] = arg6; + arg0->m[3][2] = -((arg1 * arg4) + (arg2 * arg5) + (arg3 * arg6)); + arg0->m[0][3] = 0.0f; + arg0->m[1][3] = 0.0f; + arg0->m[2][3] = 0.0f; + arg0->m[3][3] = 1.0f; } -void sub_GAME_7F059424(mat44 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9); +void matrix_4x4_7F059424(Mtxf *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9); -void sub_GAME_7F059694(mat44 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { - sub_GAME_7F059424(arg0, arg1, arg2, arg3, arg4 - arg1, arg5 - arg2, arg6 - arg3, arg7, arg8, arg9); +void matrix_4x4_7F059694(Mtxf *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { + matrix_4x4_7F059424(arg0, arg1, arg2, arg3, arg4 - arg1, arg5 - arg2, arg6 - arg3, arg7, arg8, arg9); } -void sub_GAME_7F059708(mat44 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { +void matrix_4x4_7F059708(Mtxf *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { f32 temp_f26; f32 temp_f28; f32 temp_f2_2; @@ -1428,52 +1346,40 @@ void sub_GAME_7F059708(mat44 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 a arg7 *= temp_f2_3; arg8 *= temp_f2_3; arg9 *= temp_f2_3; - arg0[0][0] = temp_f26; - arg0[1][0] = arg7; - arg0[2][0] = arg4; - arg0[3][0] = arg1; - arg0[0][1] = temp_f28; - arg0[1][1] = arg8; - arg0[2][1] = arg5; - arg0[3][1] = arg2; - arg0[0][2] = temp_f30; - arg0[1][2] = arg9; - arg0[2][2] = arg6; - arg0[3][2] = arg3; - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; - arg0[3][3] = 1.0f; + arg0->m[0][0] = temp_f26; + arg0->m[1][0] = arg7; + arg0->m[2][0] = arg4; + arg0->m[3][0] = arg1; + arg0->m[0][1] = temp_f28; + arg0->m[1][1] = arg8; + arg0->m[2][1] = arg5; + arg0->m[3][1] = arg2; + arg0->m[0][2] = temp_f30; + arg0->m[1][2] = arg9; + arg0->m[2][2] = arg6; + arg0->m[3][2] = arg3; + arg0->m[0][3] = 0.0f; + arg0->m[1][3] = 0.0f; + arg0->m[2][3] = 0.0f; + arg0->m[3][3] = 1.0f; } -void sub_GAME_7F059908(mat44 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { - sub_GAME_7F059708(arg0, arg1, arg2, arg3, arg4 - arg1, arg5 - arg2, arg6 - arg3, arg7, arg8, arg9); +void matrix_4x4_7F059908(Mtxf *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9) { + matrix_4x4_7F059708(arg0, arg1, arg2, arg3, arg4 - arg1, arg5 - arg2, arg6 - arg3, arg7, arg8, arg9); } #ifdef NONMATCHING -//< 8e568: 3043ffff andi v1,v0,0xffff -//--- -//> 8e568: 31e3ffff andi v1,t7,0xffff -//57,58c57,58 -//< 8e570: 03e00008 jr ra -//< 8e574: 00601025 move v0,v1 -//--- -//> 8e570: 00601025 move v0,v1 -//> 8e574: 03e00008 jr ra -s32 sub_GAME_7F05997C(f32 arg0, f32 arg1) { - f32 temp_f0; - u32 temp_v0; - s32 phi_v1; - - temp_f0 = arg0 + arg1; - if (temp_f0 <= 2.0f) { - return 0xFFFF; - } - temp_v0 = (u32) (131072.0f / temp_f0) & 0xFFFF; - phi_v1 = temp_v0 & 0xFFFF; - if ((s32)temp_v0 <= 0) { +// > 8e570: move v0,v1 +// 8e570: jr ra 8e574: jr ra +// 8e574: move v0,v1 | 8e578: nop +u16 sub_GAME_7F05997C(f32 arg0, f32 arg1) { + u16 phi_v1; + f32 temp_f0 = arg0 + arg1; + if (temp_f0 <= 2.0f) + return -1; + phi_v1 = (131072.0f / temp_f0); + if (phi_v1 <= 0) phi_v1 = 1; - } return phi_v1; } #else @@ -1540,27 +1446,27 @@ glabel sub_GAME_7F05997C ) #endif -s16 sub_GAME_7F05997C(f32 arg0, f32 arg1); +u16 sub_GAME_7F05997C(f32 arg0, f32 arg1); -void sub_GAME_7F059A48(mat44 matrix, s16* arg1, f32 angle, f32 arg3, f32 arg4, f32 arg5, f32 arg6) { +void matrix_4x4_7F059A48(Mtxf *matrix, u16* arg1, f32 angle, f32 arg3, f32 arg4, f32 arg5, f32 arg6) { f32 temp_f12_2 = cosf(angle * 0.5f) / sinf(angle * 0.5f); arg6 *= 65536.0f; - matrix[0][0] = ((temp_f12_2 / arg3) * arg6); - matrix[1][1] = (temp_f12_2 * arg6); - matrix[1][0] = 0.0f; - matrix[2][0] = 0.0f; - matrix[3][0] = 0.0f; - matrix[0][1] = 0.0f; - matrix[2][1] = 0.0f; - matrix[3][1] = 0.0f; - matrix[0][2] = 0.0f; - matrix[1][2] = 0.0f; - matrix[2][2] = (((arg4 + arg5) / (arg4 - arg5)) * arg6); - matrix[3][2] = ((((arg4 + arg4) * arg5) / (arg4 - arg5)) * arg6); - matrix[2][3] = -arg6; - matrix[0][3] = 0.0f; - matrix[1][3] = 0.0f; - matrix[3][3] = 0.0f; + matrix->m[0][0] = ((temp_f12_2 / arg3) * arg6); + matrix->m[1][1] = (temp_f12_2 * arg6); + matrix->m[1][0] = 0.0f; + matrix->m[2][0] = 0.0f; + matrix->m[3][0] = 0.0f; + matrix->m[0][1] = 0.0f; + matrix->m[2][1] = 0.0f; + matrix->m[3][1] = 0.0f; + matrix->m[0][2] = 0.0f; + matrix->m[1][2] = 0.0f; + matrix->m[2][2] = (((arg4 + arg5) / (arg4 - arg5)) * arg6); + matrix->m[3][2] = ((((arg4 + arg4) * arg5) / (arg4 - arg5)) * arg6); + matrix->m[2][3] = -arg6; + matrix->m[0][3] = 0.0f; + matrix->m[1][3] = 0.0f; + matrix->m[3][3] = 0.0f; if (arg1 != 0) { *arg1 = sub_GAME_7F05997C(arg4, arg5); } @@ -1568,7 +1474,7 @@ void sub_GAME_7F059A48(mat44 matrix, s16* arg1, f32 angle, f32 arg3, f32 arg4, f void guNormalize(f32 *x, f32 *y, f32 *z); -void sub_GAME_7F059B58(mat44 matrix, f32 angle, f32 x, f32 y, f32 z) { +void matrix_4x4_7F059B58(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z) { f32 sine; f32 cosine; f32 norm; @@ -1587,22 +1493,22 @@ void sub_GAME_7F059B58(mat44 matrix, f32 angle, f32 x, f32 y, f32 z) { cos_z = z * cosine; sin_z = z * sine; invnorm = 1.0f / norm; - matrix[0][0] = ((-cos_z - (y * sin_x)) * invnorm); - matrix[1][0] = (sine * norm); - matrix[2][0] = ((cos_x - (y * sin_z)) * invnorm); - matrix[3][0] = 0.0f; - matrix[0][1] = ((sin_z - (y * cos_x)) * invnorm); - matrix[1][1] = (cosine * norm); - matrix[2][1] = ((-sin_x - (y * cos_z)) * invnorm); - matrix[3][1] = 0.0f; - matrix[0][2] = -x; - matrix[1][2] = -y; - matrix[2][2] = -z; - matrix[3][2] = 0.0f; - matrix[0][3] = 0.0f; - matrix[1][3] = 0.0f; - matrix[2][3] = 0.0f; - matrix[3][3] = 1.0f; + matrix->m[0][0] = ((-cos_z - (y * sin_x)) * invnorm); + matrix->m[1][0] = (sine * norm); + matrix->m[2][0] = ((cos_x - (y * sin_z)) * invnorm); + matrix->m[3][0] = 0.0f; + matrix->m[0][1] = ((sin_z - (y * cos_x)) * invnorm); + matrix->m[1][1] = (cosine * norm); + matrix->m[2][1] = ((-sin_x - (y * cos_z)) * invnorm); + matrix->m[3][1] = 0.0f; + matrix->m[0][2] = -x; + matrix->m[1][2] = -y; + matrix->m[2][2] = -z; + matrix->m[3][2] = 0.0f; + matrix->m[0][3] = 0.0f; + matrix->m[1][3] = 0.0f; + matrix->m[2][3] = 0.0f; + matrix->m[3][3] = 1.0f; return; } matrix_4x4_set_identity(matrix); @@ -1612,97 +1518,97 @@ void guAlignF(float mf[4][4], float a, float x, float y, float z); #define RAD2DEG(x) x * 57.295776f -void matrix_4x4_align(mat44 matrix, f32 angle, f32 x, f32 y, f32 z) { +void matrix_4x4_align(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z) { angle = RAD2DEG(angle); - guAlignF(matrix, angle, x, y, z); + guAlignF(matrix->m, angle, x, y, z); } -void sub_GAME_7F059D30(u32 arg0) { +void matrix_4x4_7F059D30(u32 arg0) { return; } -void matrix_4x4_set_rotation_inverse(mat44 rotation, mat44 transpose) { - transpose[0][0] = rotation[0][0]; - transpose[0][1] = rotation[1][0]; - transpose[0][2] = rotation[2][0]; - transpose[1][0] = rotation[0][1]; - transpose[1][1] = rotation[1][1]; - transpose[1][2] = rotation[2][1]; - transpose[2][0] = rotation[0][2]; - transpose[2][1] = rotation[1][2]; - transpose[2][2] = rotation[2][2]; - transpose[3][0] = 0.0f; - transpose[3][1] = 0.0f; - transpose[3][2] = 0.0f; - transpose[0][3] = 0.0f; - transpose[1][3] = 0.0f; - transpose[2][3] = 0.0f; - transpose[3][3] = 1.0f; +void matrix_4x4_set_rotation_inverse(Mtxf *rotation, Mtxf *transpose) { + transpose->m[0][0] = rotation->m[0][0]; + transpose->m[0][1] = rotation->m[1][0]; + transpose->m[0][2] = rotation->m[2][0]; + transpose->m[1][0] = rotation->m[0][1]; + transpose->m[1][1] = rotation->m[1][1]; + transpose->m[1][2] = rotation->m[2][1]; + transpose->m[2][0] = rotation->m[0][2]; + transpose->m[2][1] = rotation->m[1][2]; + transpose->m[2][2] = rotation->m[2][2]; + transpose->m[3][0] = 0.0f; + transpose->m[3][1] = 0.0f; + transpose->m[3][2] = 0.0f; + transpose->m[0][3] = 0.0f; + transpose->m[1][3] = 0.0f; + transpose->m[2][3] = 0.0f; + transpose->m[3][3] = 1.0f; } -void sub_GAME_7F059DAC(mat44 arg0, mat44 arg1) { - f32 temp_f0 = ((arg0[0][0] * arg0[0][0]) + (arg0[1][0] * arg0[1][0]) + (arg0[2][0] * arg0[2][0])); +void matrix_4x4_7F059DAC(Mtxf *arg0, Mtxf *arg1) { + f32 temp_f0 = ((arg0->m[0][0] * arg0->m[0][0]) + (arg0->m[1][0] * arg0->m[1][0]) + (arg0->m[2][0] * arg0->m[2][0])); temp_f0 = 1.0f / temp_f0; - arg1[0][0] = (arg0[0][0] * temp_f0); - arg1[0][1] = (arg0[1][0] * temp_f0); - arg1[0][2] = (arg0[2][0] * temp_f0); - arg1[1][0] = (arg0[0][1] * temp_f0); - arg1[1][1] = (arg0[1][1] * temp_f0); - arg1[1][2] = (arg0[2][1] * temp_f0); - arg1[2][0] = (arg0[0][2] * temp_f0); - arg1[2][1] = (arg0[1][2] * temp_f0); - arg1[2][2] = (arg0[2][2] * temp_f0); - arg1[3][0] = 0.0f; - arg1[3][1] = 0.0f; - arg1[3][2] = 0.0f; - arg1[0][3] = 0.0f; - arg1[1][3] = 0.0f; - arg1[2][3] = 0.0f; - arg1[3][3] = 1.0f; + arg1->m[0][0] = (arg0->m[0][0] * temp_f0); + arg1->m[0][1] = (arg0->m[1][0] * temp_f0); + arg1->m[0][2] = (arg0->m[2][0] * temp_f0); + arg1->m[1][0] = (arg0->m[0][1] * temp_f0); + arg1->m[1][1] = (arg0->m[1][1] * temp_f0); + arg1->m[1][2] = (arg0->m[2][1] * temp_f0); + arg1->m[2][0] = (arg0->m[0][2] * temp_f0); + arg1->m[2][1] = (arg0->m[1][2] * temp_f0); + arg1->m[2][2] = (arg0->m[2][2] * temp_f0); + arg1->m[3][0] = 0.0f; + arg1->m[3][1] = 0.0f; + arg1->m[3][2] = 0.0f; + arg1->m[0][3] = 0.0f; + arg1->m[1][3] = 0.0f; + arg1->m[2][3] = 0.0f; + arg1->m[3][3] = 1.0f; } -void sub_GAME_7F059E64(mat44 arg0, mat44 arg1) { - f32 temp_f0 = (arg0[0][0] * arg0[0][0]) + (arg0[1][0] * arg0[1][0]) + (arg0[2][0] * arg0[2][0]); +void matrix_4x4_7F059E64(Mtxf *arg0, Mtxf *arg1) { + f32 temp_f0 = (arg0->m[0][0] * arg0->m[0][0]) + (arg0->m[1][0] * arg0->m[1][0]) + (arg0->m[2][0] * arg0->m[2][0]); temp_f0 = 1.0f / temp_f0; - arg1[0][0] = (arg0[0][0] * temp_f0); - arg1[0][1] = (arg0[1][0] * temp_f0); - arg1[0][2] = (arg0[2][0] * temp_f0); - arg1[1][0] = (arg0[0][1] * temp_f0); - arg1[1][1] = (arg0[1][1] * temp_f0); - arg1[1][2] = (arg0[2][1] * temp_f0); - arg1[2][0] = (arg0[0][2] * temp_f0); - arg1[2][1] = (arg0[1][2] * temp_f0); - arg1[2][2] = (arg0[2][2] * temp_f0); - arg1[3][0] = -((arg1[0][0] * arg0[3][0]) + (arg1[1][0] * arg0[3][1]) + (arg1[2][0] * arg0[3][2])); - arg1[3][1] = -((arg1[0][1] * arg0[3][0]) + (arg1[1][1] * arg0[3][1]) + (arg1[2][1] * arg0[3][2])); - arg1[3][2] = -((arg1[0][2] * arg0[3][0]) + (arg1[1][2] * arg0[3][1]) + (arg1[2][2] * arg0[3][2])); - arg1[3][3] = 1.0f; - arg1[0][3] = 0.0f; - arg1[1][3] = 0.0f; - arg1[2][3] = 0.0f; + arg1->m[0][0] = (arg0->m[0][0] * temp_f0); + arg1->m[0][1] = (arg0->m[1][0] * temp_f0); + arg1->m[0][2] = (arg0->m[2][0] * temp_f0); + arg1->m[1][0] = (arg0->m[0][1] * temp_f0); + arg1->m[1][1] = (arg0->m[1][1] * temp_f0); + arg1->m[1][2] = (arg0->m[2][1] * temp_f0); + arg1->m[2][0] = (arg0->m[0][2] * temp_f0); + arg1->m[2][1] = (arg0->m[1][2] * temp_f0); + arg1->m[2][2] = (arg0->m[2][2] * temp_f0); + arg1->m[3][0] = -((arg1->m[0][0] * arg0->m[3][0]) + (arg1->m[1][0] * arg0->m[3][1]) + (arg1->m[2][0] * arg0->m[3][2])); + arg1->m[3][1] = -((arg1->m[0][1] * arg0->m[3][0]) + (arg1->m[1][1] * arg0->m[3][1]) + (arg1->m[2][1] * arg0->m[3][2])); + arg1->m[3][2] = -((arg1->m[0][2] * arg0->m[3][0]) + (arg1->m[1][2] * arg0->m[3][1]) + (arg1->m[2][2] * arg0->m[3][2])); + arg1->m[3][3] = 1.0f; + arg1->m[0][3] = 0.0f; + arg1->m[1][3] = 0.0f; + arg1->m[2][3] = 0.0f; } #ifdef NONMATCHING -void sub_GAME_7F059FB8(mat44 arg0, mat44 arg1) { - f32 temp_f0 = (arg0[0][0] * arg0[1][1] * arg0[2][2]) + (arg0[0][1] * arg0[1][2] * arg0[2][0]) + (arg0[0][2] * arg0[1][0] * arg0[2][1]) - (arg0[0][2] * arg0[1][1] * arg0[2][0]) - (arg0[0][1] * arg0[1][0] * arg0[2][2]) - (arg0[0][0] * arg0[1][2] * arg0[2][1]); +void sub_GAME_7F059FB8(Mtxf *arg0, Mtxf *arg1) { + f32 temp_f0 = (arg0->m[0][0] * arg0->m[1][1] * arg0->m[2][2]) + (arg0->m[0][1] * arg0->m[1][2] * arg0->m[2][0]) + (arg0->m[0][2] * arg0->m[1][0] * arg0->m[2][1]) - (arg0->m[0][2] * arg0->m[1][1] * arg0->m[2][0]) - (arg0->m[0][1] * arg0->m[1][0] * arg0->m[2][2]) - (arg0->m[0][0] * arg0->m[1][2] * arg0->m[2][1]); temp_f0 = 1.0f / temp_f0; - arg1[0][0] = (((arg0[1][1] * arg0[2][2]) - (arg0[2][1] * arg0[1][2])) * temp_f0); - arg1[1][0] = (((arg0[1][2] * arg0[2][0]) - (arg0[2][2] * arg0[1][0])) * temp_f0); - arg1[2][0] = (((arg0[1][0] * arg0[2][1]) - (arg0[2][0] * arg0[1][1])) * temp_f0); - arg1[0][1] = (((arg0[0][2] * arg0[2][1]) - (arg0[2][2] * arg0[0][1])) * temp_f0); - arg1[1][1] = (((arg0[0][0] * arg0[2][2]) - (arg0[2][0] * arg0[0][2])) * temp_f0); - arg1[2][1] = (((arg0[0][1] * arg0[2][0]) - (arg0[2][1] * arg0[0][0])) * temp_f0); - arg1[0][2] = (((arg0[0][1] * arg0[1][2]) - (arg0[1][1] * arg0[0][2])) * temp_f0); - arg1[1][2] = (((arg0[0][2] * arg0[1][0]) - (arg0[1][2] * arg0[0][0])) * temp_f0); - arg1[2][2] = (((arg0[0][0] * arg0[1][1]) - (arg0[1][0] * arg0[0][1])) * temp_f0); - arg1[3][0] = -((arg1[0][0] * arg0[3][0]) + (arg1[1][0] * arg0[3][1]) + (arg1[2][0] * arg0[3][2])); - arg1[3][1] = -((arg1[0][1] * arg0[3][0]) + (arg1[1][1] * arg0[3][1]) + (arg1[2][1] * arg0[3][2])); - arg1[3][2] = -((arg1[0][2] * arg0[3][0]) + (arg1[1][2] * arg0[3][1]) + (arg1[2][2] * arg0[3][2])); - arg1[3][3] = 1.0f; - arg1[0][3] = 0.0f; - arg1[1][3] = 0.0f; - arg1[2][3] = 0.0f; + arg1->m[0][0] = (((arg0->m[1][1] * arg0->m[2][2]) - (arg0->m[2][1] * arg0->m[1][2])) * temp_f0); + arg1->m[1][0] = (((arg0->m[1][2] * arg0->m[2][0]) - (arg0->m[2][2] * arg0->m[1][0])) * temp_f0); + arg1->m[2][0] = (((arg0->m[1][0] * arg0->m[2][1]) - (arg0->m[2][0] * arg0->m[1][1])) * temp_f0); + arg1->m[0][1] = (((arg0->m[0][2] * arg0->m[2][1]) - (arg0->m[2][2] * arg0->m[0][1])) * temp_f0); + arg1->m[1][1] = (((arg0->m[0][0] * arg0->m[2][2]) - (arg0->m[2][0] * arg0->m[0][2])) * temp_f0); + arg1->m[2][1] = (((arg0->m[0][1] * arg0->m[2][0]) - (arg0->m[2][1] * arg0->m[0][0])) * temp_f0); + arg1->m[0][2] = (((arg0->m[0][1] * arg0->m[1][2]) - (arg0->m[1][1] * arg0->m[0][2])) * temp_f0); + arg1->m[1][2] = (((arg0->m[0][2] * arg0->m[1][0]) - (arg0->m[1][2] * arg0->m[0][0])) * temp_f0); + arg1->m[2][2] = (((arg0->m[0][0] * arg0->m[1][1]) - (arg0->m[1][0] * arg0->m[0][1])) * temp_f0); + arg1->m[3][0] = -((arg1->m[0][0] * arg0->m[3][0]) + (arg1->m[1][0] * arg0->m[3][1]) + (arg1->m[2][0] * arg0->m[3][2])); + arg1->m[3][1] = -((arg1->m[0][1] * arg0->m[3][0]) + (arg1->m[1][1] * arg0->m[3][1]) + (arg1->m[2][1] * arg0->m[3][2])); + arg1->m[3][2] = -((arg1->m[0][2] * arg0->m[3][0]) + (arg1->m[1][2] * arg0->m[3][1]) + (arg1->m[2][2] * arg0->m[3][2])); + arg1->m[3][3] = 1.0f; + arg1->m[0][3] = 0.0f; + arg1->m[1][3] = 0.0f; + arg1->m[2][3] = 0.0f; } #else GLOBAL_ASM( @@ -1877,83 +1783,63 @@ glabel sub_GAME_7F059FB8 ) #endif +void matrix_4x4_7F05A310(Mtxf *arg0, Mtxf *arg1); +f32 matrix_4x4_determinant(Mtxf *matrix); - +void matrix_4x4_7F05A250(Mtxf *arg0, Mtxf *arg1) { + s32 i, j; + f32 inv_det; + matrix_4x4_7F05A310(arg0, arg1); + inv_det = 1.0f / matrix_4x4_determinant(arg0); + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + arg1->m[i][j] *= inv_det; + } + } +} #ifdef NONMATCHING -void sub_GAME_7F05A250(void) { - +f32 matrix_3x3_determinant(f32 a, f32 d, f32 g, f32 b, f32 e, f32 h, f32 c, f32 f, f32 i); +// Stack pointer mostly +void matrix_4x4_7F05A310(Mtxf arg0, Mtxf arg1) { + f32 m00 = arg0->m[0][0]; + f32 m01 = arg0->m[0][1]; + f32 m02 = arg0->m[0][2]; + f32 m03 = arg0->m[0][3]; + f32 m10 = arg0->m[1][0]; + f32 m11 = arg0->m[1][1]; + f32 m12 = arg0->m[1][2]; + f32 m13 = arg0->m[1][3]; + f32 m20 = arg0->m[2][0]; + f32 m21 = arg0->m[2][1]; + f32 m22 = arg0->m[2][2]; + f32 m23 = arg0->m[2][3]; + f32 m30 = arg0->m[3][0]; + f32 m31 = arg0->m[3][1]; + f32 m32 = arg0->m[3][2]; + f32 m33 = arg0->m[3][3]; + arg1->m[0][0] = matrix_3x3_determinant(m11, m21, m31, m12, m22, m32, m13, m23, m33); + arg1->m[1][0] = -matrix_3x3_determinant(m10, m20, m30, m12, m22, m32, m13, m23, m33); + arg1->m[2][0] = matrix_3x3_determinant(m10, m20, m30, m11, m21, m31, m13, m23, m33); + arg1->m[3][0] = -matrix_3x3_determinant(m10, m20, m30, m11, m21, m31, m12, m22, m32); + arg1->m[0][1] = -matrix_3x3_determinant(m01, m21, m31, m02, m22, m32, m03, m23, m33); + arg1->m[1][1] = matrix_3x3_determinant(m00, m20, m30, m02, m22, m32, m03, m23, m33); + arg1->m[2][1] = -matrix_3x3_determinant(m00, m20, m30, m01, m21, m31, m03, m23, m33); + arg1->m[3][1] = matrix_3x3_determinant(m00, m20, m30, m01, m21, m31, m02, m22, m32); + arg1->m[0][2] = matrix_3x3_determinant(m01, m11, m31, m02, m12, m32, m03, m13, m33); + arg1->m[1][2] = -matrix_3x3_determinant(m00, m10, m30, m02, m12, m32, m03, m13, m33); + arg1->m[2][2] = matrix_3x3_determinant(m00, m10, m30, m01, m11, m31, m03, m13, m33); + arg1->m[3][2] = -matrix_3x3_determinant(m00, m10, m30, m01, m11, m31, m02, m12, m32); + arg1->m[0][3] = -matrix_3x3_determinant(m01, m11, m21, m02, m12, m22, m03, m13, m23); + arg1->m[1][3] = matrix_3x3_determinant(m00, m10, m20, m02, m12, m22, m03, m13, m23); + arg1->m[2][3] = -matrix_3x3_determinant(m00, m10, m20, m01, m11, m21, m03, m13, m23); + arg1->m[3][3] = matrix_3x3_determinant(m00, m10, m20, m01, m11, m21, m02, m12, m22); } #else GLOBAL_ASM( .text -glabel sub_GAME_7F05A250 -/* 08ED80 7F05A250 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 08ED84 7F05A254 AFBF0014 */ sw $ra, 0x14($sp) -/* 08ED88 7F05A258 AFA40018 */ sw $a0, 0x18($sp) -/* 08ED8C 7F05A25C 0FC168C4 */ jal sub_GAME_7F05A310 -/* 08ED90 7F05A260 AFA5001C */ sw $a1, 0x1c($sp) -/* 08ED94 7F05A264 0FC169DD */ jal matrix_4x4_determinant -/* 08ED98 7F05A268 8FA40018 */ lw $a0, 0x18($sp) -/* 08ED9C 7F05A26C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 08EDA0 7F05A270 44812000 */ mtc1 $at, $f4 -/* 08EDA4 7F05A274 00001825 */ move $v1, $zero -/* 08EDA8 7F05A278 8FA2001C */ lw $v0, 0x1c($sp) -/* 08EDAC 7F05A27C 24040004 */ li $a0, 4 -/* 08EDB0 7F05A280 46002083 */ div.s $f2, $f4, $f0 -/* 08EDB4 7F05A284 C4480000 */ lwc1 $f8, ($v0) -/* 08EDB8 7F05A288 24630001 */ addiu $v1, $v1, 1 -/* 08EDBC 7F05A28C C44E0004 */ lwc1 $f14, 4($v0) -/* 08EDC0 7F05A290 46024402 */ mul.s $f16, $f8, $f2 -/* 08EDC4 7F05A294 C44C0008 */ lwc1 $f12, 8($v0) -/* 08EDC8 7F05A298 10640010 */ beq $v1, $a0, .L7F05A2DC -/* 08EDCC 7F05A29C C452000C */ lwc1 $f18, 0xc($v0) -.L7F05A2A0: -/* 08EDD0 7F05A2A0 46027282 */ mul.s $f10, $f14, $f2 -/* 08EDD4 7F05A2A4 C4480010 */ lwc1 $f8, 0x10($v0) -/* 08EDD8 7F05A2A8 C44E0014 */ lwc1 $f14, 0x14($v0) -/* 08EDDC 7F05A2AC 46026182 */ mul.s $f6, $f12, $f2 -/* 08EDE0 7F05A2B0 C44C0018 */ lwc1 $f12, 0x18($v0) -/* 08EDE4 7F05A2B4 24630001 */ addiu $v1, $v1, 1 -/* 08EDE8 7F05A2B8 46029102 */ mul.s $f4, $f18, $f2 -/* 08EDEC 7F05A2BC C452001C */ lwc1 $f18, 0x1c($v0) -/* 08EDF0 7F05A2C0 E4500000 */ swc1 $f16, ($v0) -/* 08EDF4 7F05A2C4 46024402 */ mul.s $f16, $f8, $f2 -/* 08EDF8 7F05A2C8 E44A0004 */ swc1 $f10, 4($v0) -/* 08EDFC 7F05A2CC E4460008 */ swc1 $f6, 8($v0) -/* 08EE00 7F05A2D0 24420010 */ addiu $v0, $v0, 0x10 -/* 08EE04 7F05A2D4 1464FFF2 */ bne $v1, $a0, .L7F05A2A0 -/* 08EE08 7F05A2D8 E444FFFC */ swc1 $f4, -4($v0) -.L7F05A2DC: -/* 08EE0C 7F05A2DC 46027282 */ mul.s $f10, $f14, $f2 -/* 08EE10 7F05A2E0 24420010 */ addiu $v0, $v0, 0x10 -/* 08EE14 7F05A2E4 E450FFF0 */ swc1 $f16, -0x10($v0) -/* 08EE18 7F05A2E8 46026182 */ mul.s $f6, $f12, $f2 -/* 08EE1C 7F05A2EC 00000000 */ nop -/* 08EE20 7F05A2F0 46029102 */ mul.s $f4, $f18, $f2 -/* 08EE24 7F05A2F4 E44AFFF4 */ swc1 $f10, -0xc($v0) -/* 08EE28 7F05A2F8 E446FFF8 */ swc1 $f6, -8($v0) -/* 08EE2C 7F05A2FC E444FFFC */ swc1 $f4, -4($v0) -/* 08EE30 7F05A300 8FBF0014 */ lw $ra, 0x14($sp) -/* 08EE34 7F05A304 27BD0018 */ addiu $sp, $sp, 0x18 -/* 08EE38 7F05A308 03E00008 */ jr $ra -/* 08EE3C 7F05A30C 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F05A310(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F05A310 +glabel matrix_4x4_7F05A310 /* 08EE40 7F05A310 27BDFF58 */ addiu $sp, $sp, -0xa8 /* 08EE44 7F05A314 AFBF0064 */ sw $ra, 0x64($sp) /* 08EE48 7F05A318 AFB00060 */ sw $s0, 0x60($sp) @@ -2238,29 +2124,29 @@ glabel sub_GAME_7F05A310 ) #endif -f32 matrix_3x3_determinant(f32 m11, f32 m21, f32 m31, f32 m12, f32 m22, f32 m32, f32 m13, f32 m23, f32 m33); - #ifdef NONMATCHING +f32 matrix_3x3_determinant(f32 a, f32 d, f32 g, f32 b, f32 e, f32 h, f32 c, f32 f, f32 i); // Stack pointer mostly -f32 matrix_4x4_determinant(mat44 matrix) { +f32 matrix_4x4_determinant(Mtxf *matrix) { f32 det; - f32 a = matrix[0][0]; - f32 b = matrix[0][1]; - f32 c = matrix[0][2]; - f32 d = matrix[0][3]; - f32 e = matrix[1][0]; - f32 f = matrix[1][1]; - f32 g = matrix[1][2]; - f32 h = matrix[1][3]; - f32 i = matrix[2][0]; - f32 j = matrix[2][1]; - f32 k = matrix[2][2]; - f32 l = matrix[2][3]; - f32 m = matrix[3][0]; - f32 n = matrix[3][1]; - f32 o = matrix[3][2]; - f32 p = matrix[3][3]; + f32 a = matrix->m[0][0]; + f32 b = matrix->m[0][1]; + f32 c = matrix->m[0][2]; + f32 d = matrix->m[0][3]; + f32 e = matrix->m[1][0]; + f32 f = matrix->m[1][1]; + f32 g = matrix->m[1][2]; + f32 h = matrix->m[1][3]; + f32 i = matrix->m[2][0]; + f32 j = matrix->m[2][1]; + f32 k = matrix->m[2][2]; + f32 l = matrix->m[2][3]; + f32 m = matrix->m[3][0]; + f32 n = matrix->m[3][1]; + f32 o = matrix->m[3][2]; + f32 p = matrix->m[3][3]; det = (a * matrix_3x3_determinant(f, j, n, g, k, o, h, l, p)) - (b * matrix_3x3_determinant(e, i, m, g, k, o, h, l, p)) + (c * matrix_3x3_determinant(e, i, m, f, j, n, h, l, p)) - (d * matrix_3x3_determinant(e, i, m, f, j, n, g, k, o)); + // det = (a * matrix_3x3_determinant(f, g, h, j, k, l, n, o, p)) - (b * matrix_3x3_determinant(e, g, h, i, k, l, m, o, p)) + (c * matrix_3x3_determinant(e, f, h, i, j, l, m, n, p)) - (d * matrix_3x3_determinant(e, f, g, i, j, k, m, n, o)); return det; } #else diff --git a/src/game/matrixmath.h b/src/game/matrixmath.h new file mode 100644 index 0000000..3d547e8 --- /dev/null +++ b/src/game/matrixmath.h @@ -0,0 +1,19 @@ +#ifndef MATRIXMATH_H +#define MATRIXMATH_H + +#include "ultra64.h" + +typedef f32 vec3[3]; + +// Float version of a graphics matrix, which has higher precision than an Mtx. +// Matrices are stored as Mtxfs then converted to an Mtx when passed to the GPU. +// Mtxs use a union and a long long int to force alignments. Mtxfs are not +// aligned but still use the union for consistency with Mtx. +typedef union { + f32 m[4][4]; + s32 unused; +} Mtxf; + +void matrix_4x4_rotate_vector_in_place(Mtxf *matrix, vec3 vector); + +#endif diff --git a/src/game/mp_watch.c b/src/game/mp_watch.c index 0c9aa63..edc45e6 100644 --- a/src/game/mp_watch.c +++ b/src/game/mp_watch.c @@ -761,7 +761,7 @@ GLOBAL_ASM( glabel sub_GAME_7F0C24BC /* 0F6FEC 7F0C24BC 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0F6FF0 7F0C24C0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0F6FF4 7F0C24C4 0FC26919 */ jal get_num_players +/* 0F6FF4 7F0C24C4 0FC26919 */ jal getPlayerCount /* 0F6FF8 7F0C24C8 00000000 */ nop /* 0F6FFC 7F0C24CC 24010001 */ li $at, 1 /* 0F7000 7F0C24D0 14410003 */ bne $v0, $at, .L7F0C24E0 @@ -827,7 +827,7 @@ glabel sub_GAME_7F0C2530 /* 0F7080 7F0C2550 AFB40030 */ sw $s4, 0x30($sp) /* 0F7084 7F0C2554 AFB3002C */ sw $s3, 0x2c($sp) /* 0F7088 7F0C2558 AFB20028 */ sw $s2, 0x28($sp) -/* 0F708C 7F0C255C 0FC26919 */ jal get_num_players +/* 0F708C 7F0C255C 0FC26919 */ jal getPlayerCount /* 0F7090 7F0C2560 AFB00020 */ sw $s0, 0x20($sp) /* 0F7094 7F0C2564 0FC22FEE */ jal get_mission_timer /* 0F7098 7F0C2568 0040F025 */ move $fp, $v0 @@ -1370,9 +1370,9 @@ glabel sub_GAME_7F0C2530 /* 0F7868 7F0C2D38 1320000F */ beqz $t9, .L7F0C2D78 /* 0F786C 7F0C2D3C 00405827 */ not $t3, $v0 /* 0F7870 7F0C2D40 00056840 */ sll $t5, $a1, 1 -/* 0F7874 7F0C2D44 3C188008 */ lui $t8, %hi(ptr_BONDdata_p1) +/* 0F7874 7F0C2D44 3C188008 */ lui $t8, %hi(players) /* 0F7878 7F0C2D48 020B6024 */ and $t4, $s0, $t3 -/* 0F787C 7F0C2D4C 27189EE0 */ addiu $t8, %lo(ptr_BONDdata_p1) # addiu $t8, $t8, -0x6120 +/* 0F787C 7F0C2D4C 27189EE0 */ addiu $t8, %lo(players) # addiu $t8, $t8, -0x6120 /* 0F7880 7F0C2D50 028D7021 */ addu $t6, $s4, $t5 /* 0F7884 7F0C2D54 00167880 */ sll $t7, $s6, 2 /* 0F7888 7F0C2D58 AE4C002C */ sw $t4, 0x2c($s2) @@ -1420,9 +1420,9 @@ glabel sub_GAME_7F0C2530 /* 0F791C 7F0C2DEC 006B6004 */ sllv $t4, $t3, $v1 /* 0F7920 7F0C2DF0 01806827 */ not $t5, $t4 /* 0F7924 7F0C2DF4 00037840 */ sll $t7, $v1, 1 -/* 0F7928 7F0C2DF8 3C098008 */ lui $t1, %hi(ptr_BONDdata_p1) +/* 0F7928 7F0C2DF8 3C098008 */ lui $t1, %hi(players) /* 0F792C 7F0C2DFC 020D7024 */ and $t6, $s0, $t5 -/* 0F7930 7F0C2E00 25299EE0 */ addiu $t1, %lo(ptr_BONDdata_p1) # addiu $t1, $t1, -0x6120 +/* 0F7930 7F0C2E00 25299EE0 */ addiu $t1, %lo(players) # addiu $t1, $t1, -0x6120 /* 0F7934 7F0C2E04 028FC021 */ addu $t8, $s4, $t7 /* 0F7938 7F0C2E08 00164080 */ sll $t0, $s6, 2 /* 0F793C 7F0C2E0C AE4E002C */ sw $t6, 0x2c($s2) @@ -1477,7 +1477,7 @@ glabel sub_GAME_7F0C2E80 /* 0F79B4 7F0C2E84 AFBF0014 */ sw $ra, 0x14($sp) /* 0F79B8 7F0C2E88 0FC26C54 */ jal get_cur_playernum /* 0F79BC 7F0C2E8C 00000000 */ nop -/* 0F79C0 7F0C2E90 0FC26919 */ jal get_num_players +/* 0F79C0 7F0C2E90 0FC26919 */ jal getPlayerCount /* 0F79C4 7F0C2E94 AFA20034 */ sw $v0, 0x34($sp) /* 0F79C8 7F0C2E98 83A40037 */ lb $a0, 0x37($sp) /* 0F79CC 7F0C2E9C 2405FFFE */ li $a1, -2 @@ -1801,8 +1801,8 @@ glabel sub_GAME_7F0C2E80 /* 0F7E74 7F0C3344 31070003 */ andi $a3, $t0, 3 /* 0F7E78 7F0C3348 10E0000E */ beqz $a3, .L7F0C3384 /* 0F7E7C 7F0C334C 00E02825 */ move $a1, $a3 -/* 0F7E80 7F0C3350 3C0B8008 */ lui $t3, %hi(ptr_BONDdata_p1) -/* 0F7E84 7F0C3354 256B9EE0 */ addiu $t3, %lo(ptr_BONDdata_p1) # addiu $t3, $t3, -0x6120 +/* 0F7E80 7F0C3350 3C0B8008 */ lui $t3, %hi(players) +/* 0F7E84 7F0C3354 256B9EE0 */ addiu $t3, %lo(players) # addiu $t3, $t3, -0x6120 /* 0F7E88 7F0C3358 00005080 */ sll $t2, $zero, 2 /* 0F7E8C 7F0C335C 014B1021 */ addu $v0, $t2, $t3 .L7F0C3360: @@ -1817,8 +1817,8 @@ glabel sub_GAME_7F0C2E80 /* 0F7EAC 7F0C337C 24420004 */ addiu $v0, $v0, 4 /* 0F7EB0 7F0C3380 1088001D */ beq $a0, $t0, .L7F0C33F8 .L7F0C3384: -/* 0F7EB4 7F0C3384 3C0F8008 */ lui $t7, %hi(ptr_BONDdata_p1) -/* 0F7EB8 7F0C3388 25EF9EE0 */ addiu $t7, %lo(ptr_BONDdata_p1) # addiu $t7, $t7, -0x6120 +/* 0F7EB4 7F0C3384 3C0F8008 */ lui $t7, %hi(players) +/* 0F7EB8 7F0C3388 25EF9EE0 */ addiu $t7, %lo(players) # addiu $t7, $t7, -0x6120 /* 0F7EBC 7F0C338C 00046880 */ sll $t5, $a0, 2 /* 0F7EC0 7F0C3390 0008C080 */ sll $t8, $t0, 2 /* 0F7EC4 7F0C3394 030F2821 */ addu $a1, $t8, $t7 @@ -2246,7 +2246,7 @@ glabel get_points_for_mp_player /* 0F8428 7F0C38F8 AFBF0014 */ sw $ra, 0x14($sp) /* 0F842C 7F0C38FC AFAB0018 */ sw $t3, 0x18($sp) /* 0F8430 7F0C3900 AFA40038 */ sw $a0, 0x38($sp) -/* 0F8434 7F0C3904 0FC26919 */ jal get_num_players +/* 0F8434 7F0C3904 0FC26919 */ jal getPlayerCount /* 0F8438 7F0C3908 AFA70034 */ sw $a3, 0x34($sp) /* 0F843C 7F0C390C AFA00024 */ sw $zero, 0x24($sp) /* 0F8440 7F0C3910 0FC051D6 */ jal get_scenario @@ -2532,7 +2532,7 @@ glabel write_playerrank_to_buffer /* 0F87D0 7F0C3CA0 AFA40080 */ sw $a0, 0x80($sp) /* 0F87D4 7F0C3CA4 0FC051D6 */ jal get_scenario /* 0F87D8 7F0C3CA8 AFA50084 */ sw $a1, 0x84($sp) -/* 0F87DC 7F0C3CAC 0FC26919 */ jal get_num_players +/* 0F87DC 7F0C3CAC 0FC26919 */ jal getPlayerCount /* 0F87E0 7F0C3CB0 AFA2007C */ sw $v0, 0x7c($sp) /* 0F87E4 7F0C3CB4 00405825 */ move $t3, $v0 /* 0F87E8 7F0C3CB8 18400013 */ blez $v0, .L7F0C3D08 @@ -2876,7 +2876,7 @@ glabel mp_watch_menu_display /* 0F8B60 7F0C4030 00808825 */ move $s1, $a0 /* 0F8B64 7F0C4034 0FC26C54 */ jal get_cur_playernum /* 0F8B68 7F0C4038 AFB00034 */ sw $s0, 0x34($sp) -/* 0F8B6C 7F0C403C 0FC26919 */ jal get_num_players +/* 0F8B6C 7F0C403C 0FC26919 */ jal getPlayerCount /* 0F8B70 7F0C4040 AFA200D4 */ sw $v0, 0xd4($sp) /* 0F8B74 7F0C4044 24010001 */ li $at, 1 /* 0F8B78 7F0C4048 00404025 */ move $t0, $v0 @@ -2965,7 +2965,7 @@ text_pause_unpause: text_exit: /* 0F8CA0 7F0C4170 0FC30776 */ jal get_textptr_for_textID /* 0F8CA4 7F0C4174 3404A01A */ li $a0, 40986 -/* 0F8CA8 7F0C4178 0C001145 */ jal get_video2_settings_ulx +/* 0F8CA8 7F0C4178 0C001145 */ jal viGetViewLeft /* 0F8CAC 7F0C417C AFA200A4 */ sw $v0, 0xa4($sp) /* 0F8CB0 7F0C4180 8FAF00A8 */ lw $t7, 0xa8($sp) /* 0F8CB4 7F0C4184 004F2021 */ addu $a0, $v0, $t7 @@ -2983,7 +2983,7 @@ def_7F0C40C0: /* 0F8CDC 7F0C41AC AFA00014 */ sw $zero, 0x14($sp) /* 0F8CE0 7F0C41B0 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0F8CE4 7F0C41B4 AFB80010 */ sw $t8, 0x10($sp) -/* 0F8CE8 7F0C41B8 0C001145 */ jal get_video2_settings_ulx +/* 0F8CE8 7F0C41B8 0C001145 */ jal viGetViewLeft /* 0F8CEC 7F0C41BC 00000000 */ nop /* 0F8CF0 7F0C41C0 8FB900A8 */ lw $t9, 0xa8($sp) /* 0F8CF4 7F0C41C4 8FAA00C0 */ lw $t2, 0xc0($sp) @@ -2991,7 +2991,7 @@ def_7F0C40C0: /* 0F8CFC 7F0C41CC 000A5843 */ sra $t3, $t2, 1 /* 0F8D00 7F0C41D0 012B2023 */ subu $a0, $t1, $t3 /* 0F8D04 7F0C41D4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F8D08 7F0C41D8 0C001149 */ jal get_video2_settings_uly +/* 0F8D08 7F0C41D8 0C001149 */ jal viGetViewTop /* 0F8D0C 7F0C41DC AFA400CC */ sw $a0, 0xcc($sp) /* 0F8D10 7F0C41E0 8FAC00BC */ lw $t4, 0xbc($sp) /* 0F8D14 7F0C41E4 000C6843 */ sra $t5, $t4, 1 @@ -3059,7 +3059,7 @@ def_7F0C40C0: /* 0F8E04 7F0C42D4 00000000 */ nop /* 0F8E08 7F0C42D8 10400056 */ beqz $v0, .L7F0C4434 /* 0F8E0C 7F0C42DC 00000000 */ nop -/* 0F8E10 7F0C42E0 0C001145 */ jal get_video2_settings_ulx +/* 0F8E10 7F0C42E0 0C001145 */ jal viGetViewLeft /* 0F8E14 7F0C42E4 00000000 */ nop /* 0F8E18 7F0C42E8 3C038009 */ lui $v1, %hi(is_gameover_flag) /* 0F8E1C 7F0C42EC 8C63C704 */ lw $v1, %lo(is_gameover_flag)($v1) @@ -3082,7 +3082,7 @@ def_7F0C40C0: /* 0F8E5C 7F0C432C 2484FFF8 */ addiu $a0, $a0, -8 /* 0F8E60 7F0C4330 AFA400CC */ sw $a0, 0xcc($sp) .L7F0C4334: -/* 0F8E64 7F0C4334 0C001149 */ jal get_video2_settings_uly +/* 0F8E64 7F0C4334 0C001149 */ jal viGetViewTop /* 0F8E68 7F0C4338 00000000 */ nop /* 0F8E6C 7F0C433C 3C0E8009 */ lui $t6, %hi(dword_CODE_bss_8008C708) /* 0F8E70 7F0C4340 8DCEC708 */ lw $t6, %lo(dword_CODE_bss_8008C708)($t6) @@ -3152,7 +3152,7 @@ def_7F0C40C0: /* 0F8F68 7F0C4438 00000000 */ nop /* 0F8F6C 7F0C443C 10400056 */ beqz $v0, .L7F0C4598 /* 0F8F70 7F0C4440 00000000 */ nop -/* 0F8F74 7F0C4444 0C001145 */ jal get_video2_settings_ulx +/* 0F8F74 7F0C4444 0C001145 */ jal viGetViewLeft /* 0F8F78 7F0C4448 00000000 */ nop /* 0F8F7C 7F0C444C 3C038009 */ lui $v1, %hi(is_gameover_flag) /* 0F8F80 7F0C4450 8C63C704 */ lw $v1, %lo(is_gameover_flag)($v1) @@ -3175,7 +3175,7 @@ def_7F0C40C0: /* 0F8FC0 7F0C4490 24840008 */ addiu $a0, $a0, 8 /* 0F8FC4 7F0C4494 AFA400CC */ sw $a0, 0xcc($sp) .L7F0C4498: -/* 0F8FC8 7F0C4498 0C001149 */ jal get_video2_settings_uly +/* 0F8FC8 7F0C4498 0C001149 */ jal viGetViewTop /* 0F8FCC 7F0C449C 00000000 */ nop /* 0F8FD0 7F0C44A0 3C0D8009 */ lui $t5, %hi(dword_CODE_bss_8008C708) /* 0F8FD4 7F0C44A4 8DADC708 */ lw $t5, %lo(dword_CODE_bss_8008C708)($t5) @@ -3293,7 +3293,7 @@ def_7F0C40C0: /* 0F917C 7F0C464C AFA00014 */ sw $zero, 0x14($sp) /* 0F9180 7F0C4650 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0F9184 7F0C4654 AFAA0010 */ sw $t2, 0x10($sp) -/* 0F9188 7F0C4658 0C001145 */ jal get_video2_settings_ulx +/* 0F9188 7F0C4658 0C001145 */ jal viGetViewLeft /* 0F918C 7F0C465C 00000000 */ nop /* 0F9190 7F0C4660 8FA900A8 */ lw $t1, 0xa8($sp) /* 0F9194 7F0C4664 8FAC00C0 */ lw $t4, 0xc0($sp) @@ -3301,7 +3301,7 @@ def_7F0C40C0: /* 0F919C 7F0C466C 000C6843 */ sra $t5, $t4, 1 /* 0F91A0 7F0C4670 016D2023 */ subu $a0, $t3, $t5 /* 0F91A4 7F0C4674 24840050 */ addiu $a0, $a0, 0x50 -/* 0F91A8 7F0C4678 0C001149 */ jal get_video2_settings_uly +/* 0F91A8 7F0C4678 0C001149 */ jal viGetViewTop /* 0F91AC 7F0C467C AFA400CC */ sw $a0, 0xcc($sp) /* 0F91B0 7F0C4680 8FAE00BC */ lw $t6, 0xbc($sp) /* 0F91B4 7F0C4684 000E7843 */ sra $t7, $t6, 1 @@ -3363,7 +3363,7 @@ def_7F0C40C0: /* 0F928C 7F0C475C AFA00014 */ sw $zero, 0x14($sp) /* 0F9290 7F0C4760 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0F9294 7F0C4764 AFAF0010 */ sw $t7, 0x10($sp) -/* 0F9298 7F0C4768 0C001145 */ jal get_video2_settings_ulx +/* 0F9298 7F0C4768 0C001145 */ jal viGetViewLeft /* 0F929C 7F0C476C 00000000 */ nop /* 0F92A0 7F0C4770 8FB900A8 */ lw $t9, 0xa8($sp) /* 0F92A4 7F0C4774 8FAA00C0 */ lw $t2, 0xc0($sp) @@ -3371,7 +3371,7 @@ def_7F0C40C0: /* 0F92AC 7F0C477C 000A4843 */ sra $t1, $t2, 1 /* 0F92B0 7F0C4780 03092023 */ subu $a0, $t8, $t1 /* 0F92B4 7F0C4784 24840050 */ addiu $a0, $a0, 0x50 -/* 0F92B8 7F0C4788 0C001149 */ jal get_video2_settings_uly +/* 0F92B8 7F0C4788 0C001149 */ jal viGetViewTop /* 0F92BC 7F0C478C AFA400CC */ sw $a0, 0xcc($sp) /* 0F92C0 7F0C4790 8FAC00BC */ lw $t4, 0xbc($sp) /* 0F92C4 7F0C4794 000C5843 */ sra $t3, $t4, 1 @@ -3447,11 +3447,11 @@ def_7F0C40C0: /* 0F93CC 7F0C489C 24010002 */ li $at, 2 /* 0F93D0 7F0C48A0 1581004E */ bne $t4, $at, .L7F0C49DC /* 0F93D4 7F0C48A4 00000000 */ nop -/* 0F93D8 7F0C48A8 0C001145 */ jal get_video2_settings_ulx +/* 0F93D8 7F0C48A8 0C001145 */ jal viGetViewLeft /* 0F93DC 7F0C48AC 00000000 */ nop /* 0F93E0 7F0C48B0 00028400 */ sll $s0, $v0, 0x10 /* 0F93E4 7F0C48B4 00105C03 */ sra $t3, $s0, 0x10 -/* 0F93E8 7F0C48B8 0C001149 */ jal get_video2_settings_uly +/* 0F93E8 7F0C48B8 0C001149 */ jal viGetViewTop /* 0F93EC 7F0C48BC 01608025 */ move $s0, $t3 /* 0F93F0 7F0C48C0 8FA800D4 */ lw $t0, 0xd4($sp) /* 0F93F4 7F0C48C4 00021C00 */ sll $v1, $v0, 0x10 @@ -3487,11 +3487,11 @@ def_7F0C40C0: /* 0F9460 7F0C4930 8FA70094 */ lw $a3, 0x94($sp) /* 0F9464 7F0C4934 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu /* 0F9468 7F0C4938 AFA90010 */ sw $t1, 0x10($sp) -/* 0F946C 7F0C493C 0C001145 */ jal get_video2_settings_ulx +/* 0F946C 7F0C493C 0C001145 */ jal viGetViewLeft /* 0F9470 7F0C4940 00408825 */ move $s1, $v0 /* 0F9474 7F0C4944 00028400 */ sll $s0, $v0, 0x10 /* 0F9478 7F0C4948 00106403 */ sra $t4, $s0, 0x10 -/* 0F947C 7F0C494C 0C001149 */ jal get_video2_settings_uly +/* 0F947C 7F0C494C 0C001149 */ jal viGetViewTop /* 0F9480 7F0C4950 01808025 */ move $s0, $t4 /* 0F9484 7F0C4954 8FA400D4 */ lw $a0, 0xd4($sp) /* 0F9488 7F0C4958 00021C00 */ sll $v1, $v0, 0x10 @@ -3531,11 +3531,11 @@ def_7F0C40C0: /* 0F9504 7F0C49D4 1000009E */ b .L7F0C4C50 /* 0F9508 7F0C49D8 00408825 */ move $s1, $v0 .L7F0C49DC: -/* 0F950C 7F0C49DC 0C001145 */ jal get_video2_settings_ulx +/* 0F950C 7F0C49DC 0C001145 */ jal viGetViewLeft /* 0F9510 7F0C49E0 00000000 */ nop /* 0F9514 7F0C49E4 00028400 */ sll $s0, $v0, 0x10 /* 0F9518 7F0C49E8 00106403 */ sra $t4, $s0, 0x10 -/* 0F951C 7F0C49EC 0C001149 */ jal get_video2_settings_uly +/* 0F951C 7F0C49EC 0C001149 */ jal viGetViewTop /* 0F9520 7F0C49F0 01808025 */ move $s0, $t4 /* 0F9524 7F0C49F4 8FA800D4 */ lw $t0, 0xd4($sp) /* 0F9528 7F0C49F8 00021C00 */ sll $v1, $v0, 0x10 @@ -3571,11 +3571,11 @@ def_7F0C40C0: /* 0F9594 7F0C4A64 8FA70094 */ lw $a3, 0x94($sp) /* 0F9598 7F0C4A68 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu /* 0F959C 7F0C4A6C AFB80010 */ sw $t8, 0x10($sp) -/* 0F95A0 7F0C4A70 0C001145 */ jal get_video2_settings_ulx +/* 0F95A0 7F0C4A70 0C001145 */ jal viGetViewLeft /* 0F95A4 7F0C4A74 00408825 */ move $s1, $v0 /* 0F95A8 7F0C4A78 00028400 */ sll $s0, $v0, 0x10 /* 0F95AC 7F0C4A7C 00104C03 */ sra $t1, $s0, 0x10 -/* 0F95B0 7F0C4A80 0C001149 */ jal get_video2_settings_uly +/* 0F95B0 7F0C4A80 0C001149 */ jal viGetViewTop /* 0F95B4 7F0C4A84 01208025 */ move $s0, $t1 /* 0F95B8 7F0C4A88 8FA800D4 */ lw $t0, 0xd4($sp) /* 0F95BC 7F0C4A8C 00021C00 */ sll $v1, $v0, 0x10 @@ -3612,11 +3612,11 @@ def_7F0C40C0: /* 0F962C 7F0C4AFC 8FA70098 */ lw $a3, 0x98($sp) /* 0F9630 7F0C4B00 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu /* 0F9634 7F0C4B04 AFAA0010 */ sw $t2, 0x10($sp) -/* 0F9638 7F0C4B08 0C001145 */ jal get_video2_settings_ulx +/* 0F9638 7F0C4B08 0C001145 */ jal viGetViewLeft /* 0F963C 7F0C4B0C 00408825 */ move $s1, $v0 /* 0F9640 7F0C4B10 00028400 */ sll $s0, $v0, 0x10 /* 0F9644 7F0C4B14 0010C403 */ sra $t8, $s0, 0x10 -/* 0F9648 7F0C4B18 0C001149 */ jal get_video2_settings_uly +/* 0F9648 7F0C4B18 0C001149 */ jal viGetViewTop /* 0F964C 7F0C4B1C 03008025 */ move $s0, $t8 /* 0F9650 7F0C4B20 8FA800D4 */ lw $t0, 0xd4($sp) /* 0F9654 7F0C4B24 00021C00 */ sll $v1, $v0, 0x10 @@ -3658,11 +3658,11 @@ def_7F0C40C0: /* 0F96D8 7F0C4BA8 00408825 */ move $s1, $v0 /* 0F96DC 7F0C4BAC 15410028 */ bne $t2, $at, .L7F0C4C50 /* 0F96E0 7F0C4BB0 00000000 */ nop -/* 0F96E4 7F0C4BB4 0C001145 */ jal get_video2_settings_ulx +/* 0F96E4 7F0C4BB4 0C001145 */ jal viGetViewLeft /* 0F96E8 7F0C4BB8 00000000 */ nop /* 0F96EC 7F0C4BBC 00028400 */ sll $s0, $v0, 0x10 /* 0F96F0 7F0C4BC0 0010C403 */ sra $t8, $s0, 0x10 -/* 0F96F4 7F0C4BC4 0C001149 */ jal get_video2_settings_uly +/* 0F96F4 7F0C4BC4 0C001149 */ jal viGetViewTop /* 0F96F8 7F0C4BC8 03008025 */ move $s0, $t8 /* 0F96FC 7F0C4BCC 8FA400D4 */ lw $a0, 0xd4($sp) /* 0F9700 7F0C4BD0 00021C00 */ sll $v1, $v0, 0x10 @@ -3733,7 +3733,7 @@ def_7F0C40C0: /* 0F97EC 7F0C4CBC AFA00014 */ sw $zero, 0x14($sp) /* 0F97F0 7F0C4CC0 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0F97F4 7F0C4CC4 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F97F8 7F0C4CC8 0C001145 */ jal get_video2_settings_ulx +/* 0F97F8 7F0C4CC8 0C001145 */ jal viGetViewLeft /* 0F97FC 7F0C4CCC 00000000 */ nop /* 0F9800 7F0C4CD0 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0F9804 7F0C4CD4 8FAF00C0 */ lw $t7, 0xc0($sp) @@ -3741,7 +3741,7 @@ def_7F0C40C0: /* 0F980C 7F0C4CDC 000FC843 */ sra $t9, $t7, 1 /* 0F9810 7F0C4CE0 01B92023 */ subu $a0, $t5, $t9 /* 0F9814 7F0C4CE4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9818 7F0C4CE8 0C001149 */ jal get_video2_settings_uly +/* 0F9818 7F0C4CE8 0C001149 */ jal viGetViewTop /* 0F981C 7F0C4CEC AFA400CC */ sw $a0, 0xcc($sp) /* 0F9820 7F0C4CF0 8FAE00BC */ lw $t6, 0xbc($sp) /* 0F9824 7F0C4CF4 000E5043 */ sra $t2, $t6, 1 @@ -3796,7 +3796,7 @@ def_7F0C40C0: /* 0F98E4 7F0C4DB4 AFA00014 */ sw $zero, 0x14($sp) /* 0F98E8 7F0C4DB8 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0F98EC 7F0C4DBC AFB90010 */ sw $t9, 0x10($sp) -/* 0F98F0 7F0C4DC0 0C001145 */ jal get_video2_settings_ulx +/* 0F98F0 7F0C4DC0 0C001145 */ jal viGetViewLeft /* 0F98F4 7F0C4DC4 00000000 */ nop /* 0F98F8 7F0C4DC8 8FAE00A8 */ lw $t6, 0xa8($sp) /* 0F98FC 7F0C4DCC 8FB800C0 */ lw $t8, 0xc0($sp) @@ -3804,7 +3804,7 @@ def_7F0C40C0: /* 0F9904 7F0C4DD4 00184843 */ sra $t1, $t8, 1 /* 0F9908 7F0C4DD8 01492023 */ subu $a0, $t2, $t1 /* 0F990C 7F0C4DDC 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9910 7F0C4DE0 0C001149 */ jal get_video2_settings_uly +/* 0F9910 7F0C4DE0 0C001149 */ jal viGetViewTop /* 0F9914 7F0C4DE4 AFA400CC */ sw $a0, 0xcc($sp) /* 0F9918 7F0C4DE8 8FAC00BC */ lw $t4, 0xbc($sp) /* 0F991C 7F0C4DEC 000C5843 */ sra $t3, $t4, 1 @@ -3842,11 +3842,11 @@ def_7F0C40C0: /* 0F999C 7F0C4E6C 8FA200D4 */ lw $v0, 0xd4($sp) /* 0F99A0 7F0C4E70 50400018 */ beql $v0, $zero, .L7F0C4ED4 /* 0F99A4 7F0C4E74 24010001 */ li $at, 1 -/* 0F99A8 7F0C4E78 0C001145 */ jal get_video2_settings_ulx +/* 0F99A8 7F0C4E78 0C001145 */ jal viGetViewLeft /* 0F99AC 7F0C4E7C 00000000 */ nop /* 0F99B0 7F0C4E80 00028400 */ sll $s0, $v0, 0x10 /* 0F99B4 7F0C4E84 00106403 */ sra $t4, $s0, 0x10 -/* 0F99B8 7F0C4E88 0C001149 */ jal get_video2_settings_uly +/* 0F99B8 7F0C4E88 0C001149 */ jal viGetViewTop /* 0F99BC 7F0C4E8C 01808025 */ move $s0, $t4 /* 0F99C0 7F0C4E90 8FAF00D4 */ lw $t7, 0xd4($sp) /* 0F99C4 7F0C4E94 8FAB00A8 */ lw $t3, 0xa8($sp) @@ -3873,11 +3873,11 @@ def_7F0C40C0: /* 0F9A14 7F0C4EE4 25CE9EF0 */ addiu $t6, %lo(player1_player_data) # addiu $t6, $t6, -0x6110 /* 0F9A18 7F0C4EE8 0019C900 */ sll $t9, $t9, 4 /* 0F9A1C 7F0C4EEC 032EC021 */ addu $t8, $t9, $t6 -/* 0F9A20 7F0C4EF0 0C001145 */ jal get_video2_settings_ulx +/* 0F9A20 7F0C4EF0 0C001145 */ jal viGetViewLeft /* 0F9A24 7F0C4EF4 AFB80044 */ sw $t8, 0x44($sp) /* 0F9A28 7F0C4EF8 00028400 */ sll $s0, $v0, 0x10 /* 0F9A2C 7F0C4EFC 00105403 */ sra $t2, $s0, 0x10 -/* 0F9A30 7F0C4F00 0C001149 */ jal get_video2_settings_uly +/* 0F9A30 7F0C4F00 0C001149 */ jal viGetViewTop /* 0F9A34 7F0C4F04 01408025 */ move $s0, $t2 /* 0F9A38 7F0C4F08 8FA900A8 */ lw $t1, 0xa8($sp) /* 0F9A3C 7F0C4F0C 8FAC0044 */ lw $t4, 0x44($sp) @@ -3893,11 +3893,11 @@ def_7F0C40C0: .L7F0C4F34: /* 0F9A64 7F0C4F34 50400018 */ beql $v0, $zero, .L7F0C4F98 /* 0F9A68 7F0C4F38 24010001 */ li $at, 1 -/* 0F9A6C 7F0C4F3C 0C001145 */ jal get_video2_settings_ulx +/* 0F9A6C 7F0C4F3C 0C001145 */ jal viGetViewLeft /* 0F9A70 7F0C4F40 00000000 */ nop /* 0F9A74 7F0C4F44 00028400 */ sll $s0, $v0, 0x10 /* 0F9A78 7F0C4F48 00105C03 */ sra $t3, $s0, 0x10 -/* 0F9A7C 7F0C4F4C 0C001149 */ jal get_video2_settings_uly +/* 0F9A7C 7F0C4F4C 0C001149 */ jal viGetViewTop /* 0F9A80 7F0C4F50 01608025 */ move $s0, $t3 /* 0F9A84 7F0C4F54 8FAD00D4 */ lw $t5, 0xd4($sp) /* 0F9A88 7F0C4F58 8FAF00A8 */ lw $t7, 0xa8($sp) @@ -3924,11 +3924,11 @@ def_7F0C40C0: /* 0F9AD8 7F0C4FA8 27189EF0 */ addiu $t8, %lo(player1_player_data) # addiu $t8, $t8, -0x6110 /* 0F9ADC 7F0C4FAC 000E7100 */ sll $t6, $t6, 4 /* 0F9AE0 7F0C4FB0 01D85021 */ addu $t2, $t6, $t8 -/* 0F9AE4 7F0C4FB4 0C001145 */ jal get_video2_settings_ulx +/* 0F9AE4 7F0C4FB4 0C001145 */ jal viGetViewLeft /* 0F9AE8 7F0C4FB8 AFAA0044 */ sw $t2, 0x44($sp) /* 0F9AEC 7F0C4FBC 00028400 */ sll $s0, $v0, 0x10 /* 0F9AF0 7F0C4FC0 00104C03 */ sra $t1, $s0, 0x10 -/* 0F9AF4 7F0C4FC4 0C001149 */ jal get_video2_settings_uly +/* 0F9AF4 7F0C4FC4 0C001149 */ jal viGetViewTop /* 0F9AF8 7F0C4FC8 01208025 */ move $s0, $t1 /* 0F9AFC 7F0C4FCC 8FAC00A8 */ lw $t4, 0xa8($sp) /* 0F9B00 7F0C4FD0 8FAB0044 */ lw $t3, 0x44($sp) @@ -3950,11 +3950,11 @@ def_7F0C40C0: /* 0F9B3C 7F0C500C 25AD9EF0 */ addiu $t5, %lo(player1_player_data) # addiu $t5, $t5, -0x6110 /* 0F9B40 7F0C5010 000F7900 */ sll $t7, $t7, 4 /* 0F9B44 7F0C5014 01EDC821 */ addu $t9, $t7, $t5 -/* 0F9B48 7F0C5018 0C001145 */ jal get_video2_settings_ulx +/* 0F9B48 7F0C5018 0C001145 */ jal viGetViewLeft /* 0F9B4C 7F0C501C AFB90044 */ sw $t9, 0x44($sp) /* 0F9B50 7F0C5020 00028400 */ sll $s0, $v0, 0x10 /* 0F9B54 7F0C5024 00107403 */ sra $t6, $s0, 0x10 -/* 0F9B58 7F0C5028 0C001149 */ jal get_video2_settings_uly +/* 0F9B58 7F0C5028 0C001149 */ jal viGetViewTop /* 0F9B5C 7F0C502C 01C08025 */ move $s0, $t6 /* 0F9B60 7F0C5030 8FB800A8 */ lw $t8, 0xa8($sp) /* 0F9B64 7F0C5034 8FAA0044 */ lw $t2, 0x44($sp) @@ -3979,11 +3979,11 @@ def_7F0C40C0: /* 0F9BAC 7F0C507C 256B9EF0 */ addiu $t3, %lo(player1_player_data) # addiu $t3, $t3, -0x6110 /* 0F9BB0 7F0C5080 000C6100 */ sll $t4, $t4, 4 /* 0F9BB4 7F0C5084 018B7821 */ addu $t7, $t4, $t3 -/* 0F9BB8 7F0C5088 0C001145 */ jal get_video2_settings_ulx +/* 0F9BB8 7F0C5088 0C001145 */ jal viGetViewLeft /* 0F9BBC 7F0C508C AFAF0044 */ sw $t7, 0x44($sp) /* 0F9BC0 7F0C5090 00028400 */ sll $s0, $v0, 0x10 /* 0F9BC4 7F0C5094 00106C03 */ sra $t5, $s0, 0x10 -/* 0F9BC8 7F0C5098 0C001149 */ jal get_video2_settings_uly +/* 0F9BC8 7F0C5098 0C001149 */ jal viGetViewTop /* 0F9BCC 7F0C509C 01A08025 */ move $s0, $t5 /* 0F9BD0 7F0C50A0 8FB900A8 */ lw $t9, 0xa8($sp) /* 0F9BD4 7F0C50A4 8FAE0044 */ lw $t6, 0x44($sp) @@ -4028,7 +4028,7 @@ def_7F0C40C0: /* 0F9C64 7F0C5134 AFA00014 */ sw $zero, 0x14($sp) /* 0F9C68 7F0C5138 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0F9C6C 7F0C513C AFA90010 */ sw $t1, 0x10($sp) -/* 0F9C70 7F0C5140 0C001145 */ jal get_video2_settings_ulx +/* 0F9C70 7F0C5140 0C001145 */ jal viGetViewLeft /* 0F9C74 7F0C5144 00000000 */ nop /* 0F9C78 7F0C5148 8FAC00A8 */ lw $t4, 0xa8($sp) /* 0F9C7C 7F0C514C 8FAF00C0 */ lw $t7, 0xc0($sp) @@ -4036,7 +4036,7 @@ def_7F0C40C0: /* 0F9C84 7F0C5154 000F6843 */ sra $t5, $t7, 1 /* 0F9C88 7F0C5158 016D2023 */ subu $a0, $t3, $t5 /* 0F9C8C 7F0C515C 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9C90 7F0C5160 0C001149 */ jal get_video2_settings_uly +/* 0F9C90 7F0C5160 0C001149 */ jal viGetViewTop /* 0F9C94 7F0C5164 AFA400CC */ sw $a0, 0xcc($sp) /* 0F9C98 7F0C5168 8FB900BC */ lw $t9, 0xbc($sp) /* 0F9C9C 7F0C516C 00197043 */ sra $t6, $t9, 1 @@ -4091,7 +4091,7 @@ def_7F0C40C0: /* 0F9D5C 7F0C522C AFA00014 */ sw $zero, 0x14($sp) /* 0F9D60 7F0C5230 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0F9D64 7F0C5234 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F9D68 7F0C5238 0C001145 */ jal get_video2_settings_ulx +/* 0F9D68 7F0C5238 0C001145 */ jal viGetViewLeft /* 0F9D6C 7F0C523C 00000000 */ nop /* 0F9D70 7F0C5240 8FB900A8 */ lw $t9, 0xa8($sp) /* 0F9D74 7F0C5244 8FB800C0 */ lw $t8, 0xc0($sp) @@ -4099,7 +4099,7 @@ def_7F0C40C0: /* 0F9D7C 7F0C524C 00185043 */ sra $t2, $t8, 1 /* 0F9D80 7F0C5250 01CA2023 */ subu $a0, $t6, $t2 /* 0F9D84 7F0C5254 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9D88 7F0C5258 0C001149 */ jal get_video2_settings_uly +/* 0F9D88 7F0C5258 0C001149 */ jal viGetViewTop /* 0F9D8C 7F0C525C AFA400CC */ sw $a0, 0xcc($sp) /* 0F9D90 7F0C5260 8FA900BC */ lw $t1, 0xbc($sp) /* 0F9D94 7F0C5264 00096043 */ sra $t4, $t1, 1 @@ -4138,11 +4138,11 @@ def_7F0C40C0: /* 0F9E18 7F0C52E8 3C0D8008 */ lui $t5, %hi(player1_player_data + 0x24) /* 0F9E1C 7F0C52EC 10400016 */ beqz $v0, .L7F0C5348 /* 0F9E20 7F0C52F0 00000000 */ nop -/* 0F9E24 7F0C52F4 0C001145 */ jal get_video2_settings_ulx +/* 0F9E24 7F0C52F4 0C001145 */ jal viGetViewLeft /* 0F9E28 7F0C52F8 00000000 */ nop /* 0F9E2C 7F0C52FC 00028400 */ sll $s0, $v0, 0x10 /* 0F9E30 7F0C5300 00104C03 */ sra $t1, $s0, 0x10 -/* 0F9E34 7F0C5304 0C001149 */ jal get_video2_settings_uly +/* 0F9E34 7F0C5304 0C001149 */ jal viGetViewTop /* 0F9E38 7F0C5308 01208025 */ move $s0, $t1 /* 0F9E3C 7F0C530C 8FAF00D4 */ lw $t7, 0xd4($sp) /* 0F9E40 7F0C5310 8FAC00A8 */ lw $t4, 0xa8($sp) @@ -4163,11 +4163,11 @@ def_7F0C40C0: /* 0F9E78 7F0C5348 8DAD9F14 */ lw $t5, %lo(player1_player_data + 0x24)($t5) /* 0F9E7C 7F0C534C 59A00017 */ blezl $t5, .L7F0C53AC /* 0F9E80 7F0C5350 24010001 */ li $at, 1 -/* 0F9E84 7F0C5354 0C001145 */ jal get_video2_settings_ulx +/* 0F9E84 7F0C5354 0C001145 */ jal viGetViewLeft /* 0F9E88 7F0C5358 00000000 */ nop /* 0F9E8C 7F0C535C 00028400 */ sll $s0, $v0, 0x10 /* 0F9E90 7F0C5360 0010CC03 */ sra $t9, $s0, 0x10 -/* 0F9E94 7F0C5364 0C001149 */ jal get_video2_settings_uly +/* 0F9E94 7F0C5364 0C001149 */ jal viGetViewTop /* 0F9E98 7F0C5368 03208025 */ move $s0, $t9 /* 0F9E9C 7F0C536C 8FAE00D4 */ lw $t6, 0xd4($sp) /* 0F9EA0 7F0C5370 8FB800A8 */ lw $t8, 0xa8($sp) @@ -4193,11 +4193,11 @@ def_7F0C40C0: /* 0F9EE8 7F0C53B8 25EF9EF0 */ addiu $t7, %lo(player1_player_data) # addiu $t7, $t7, -0x6110 /* 0F9EEC 7F0C53BC 00026080 */ sll $t4, $v0, 2 /* 0F9EF0 7F0C53C0 018F5821 */ addu $t3, $t4, $t7 -/* 0F9EF4 7F0C53C4 0C001145 */ jal get_video2_settings_ulx +/* 0F9EF4 7F0C53C4 0C001145 */ jal viGetViewLeft /* 0F9EF8 7F0C53C8 AFAB0044 */ sw $t3, 0x44($sp) /* 0F9EFC 7F0C53CC 00028400 */ sll $s0, $v0, 0x10 /* 0F9F00 7F0C53D0 00106C03 */ sra $t5, $s0, 0x10 -/* 0F9F04 7F0C53D4 0C001149 */ jal get_video2_settings_uly +/* 0F9F04 7F0C53D4 0C001149 */ jal viGetViewTop /* 0F9F08 7F0C53D8 01A08025 */ move $s0, $t5 /* 0F9F0C 7F0C53DC 8FB900A8 */ lw $t9, 0xa8($sp) /* 0F9F10 7F0C53E0 8FB80044 */ lw $t8, 0x44($sp) @@ -4217,11 +4217,11 @@ def_7F0C40C0: /* 0F9F44 7F0C5414 19C000D7 */ blez $t6, .L7F0C5774 /* 0F9F48 7F0C5418 00025080 */ sll $t2, $v0, 2 /* 0F9F4C 7F0C541C 01496021 */ addu $t4, $t2, $t1 -/* 0F9F50 7F0C5420 0C001145 */ jal get_video2_settings_ulx +/* 0F9F50 7F0C5420 0C001145 */ jal viGetViewLeft /* 0F9F54 7F0C5424 AFAC0044 */ sw $t4, 0x44($sp) /* 0F9F58 7F0C5428 00028400 */ sll $s0, $v0, 0x10 /* 0F9F5C 7F0C542C 00107C03 */ sra $t7, $s0, 0x10 -/* 0F9F60 7F0C5430 0C001149 */ jal get_video2_settings_uly +/* 0F9F60 7F0C5430 0C001149 */ jal viGetViewTop /* 0F9F64 7F0C5434 01E08025 */ move $s0, $t7 /* 0F9F68 7F0C5438 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0F9F6C 7F0C543C 8FAD0044 */ lw $t5, 0x44($sp) @@ -4238,11 +4238,11 @@ def_7F0C40C0: .L7F0C5468: /* 0F9F98 7F0C5468 13000015 */ beqz $t8, .L7F0C54C0 /* 0F9F9C 7F0C546C 3C0F8008 */ lui $t7, %hi(player1_player_data + 0x24) -/* 0F9FA0 7F0C5470 0C001145 */ jal get_video2_settings_ulx +/* 0F9FA0 7F0C5470 0C001145 */ jal viGetViewLeft /* 0F9FA4 7F0C5474 00000000 */ nop /* 0F9FA8 7F0C5478 00028400 */ sll $s0, $v0, 0x10 /* 0F9FAC 7F0C547C 00107403 */ sra $t6, $s0, 0x10 -/* 0F9FB0 7F0C5480 0C001149 */ jal get_video2_settings_uly +/* 0F9FB0 7F0C5480 0C001149 */ jal viGetViewTop /* 0F9FB4 7F0C5484 01C08025 */ move $s0, $t6 /* 0F9FB8 7F0C5488 8FA900D4 */ lw $t1, 0xd4($sp) /* 0F9FBC 7F0C548C 8FAA00A8 */ lw $t2, 0xa8($sp) @@ -4262,11 +4262,11 @@ def_7F0C40C0: /* 0F9FF0 7F0C54C0 8DEF9F14 */ lw $t7, %lo(player1_player_data + 0x24)($t7) /* 0F9FF4 7F0C54C4 59E00016 */ blezl $t7, .L7F0C5520 /* 0F9FF8 7F0C54C8 8FAA00D4 */ lw $t2, 0xd4($sp) -/* 0F9FFC 7F0C54CC 0C001145 */ jal get_video2_settings_ulx +/* 0F9FFC 7F0C54CC 0C001145 */ jal viGetViewLeft /* 0FA000 7F0C54D0 00000000 */ nop /* 0FA004 7F0C54D4 00028400 */ sll $s0, $v0, 0x10 /* 0FA008 7F0C54D8 00105C03 */ sra $t3, $s0, 0x10 -/* 0FA00C 7F0C54DC 0C001149 */ jal get_video2_settings_uly +/* 0FA00C 7F0C54DC 0C001149 */ jal viGetViewTop /* 0FA010 7F0C54E0 01608025 */ move $s0, $t3 /* 0FA014 7F0C54E4 8FB900D4 */ lw $t9, 0xd4($sp) /* 0FA018 7F0C54E8 8FAD00A8 */ lw $t5, 0xa8($sp) @@ -4292,11 +4292,11 @@ def_7F0C40C0: /* 0FA060 7F0C5530 3C0C8008 */ lui $t4, %hi(player1_player_data) /* 0FA064 7F0C5534 258C9EF0 */ addiu $t4, %lo(player1_player_data) # addiu $t4, $t4, -0x6110 /* 0FA068 7F0C5538 012C7821 */ addu $t7, $t1, $t4 -/* 0FA06C 7F0C553C 0C001145 */ jal get_video2_settings_ulx +/* 0FA06C 7F0C553C 0C001145 */ jal viGetViewLeft /* 0FA070 7F0C5540 AFAF0044 */ sw $t7, 0x44($sp) /* 0FA074 7F0C5544 00028400 */ sll $s0, $v0, 0x10 /* 0FA078 7F0C5548 00105C03 */ sra $t3, $s0, 0x10 -/* 0FA07C 7F0C554C 0C001149 */ jal get_video2_settings_uly +/* 0FA07C 7F0C554C 0C001149 */ jal viGetViewTop /* 0FA080 7F0C5550 01608025 */ move $s0, $t3 /* 0FA084 7F0C5554 8FAD00A8 */ lw $t5, 0xa8($sp) /* 0FA088 7F0C5558 8FB90044 */ lw $t9, 0x44($sp) @@ -4317,11 +4317,11 @@ def_7F0C40C0: /* 0FA0C0 7F0C5590 000E5080 */ sll $t2, $t6, 2 /* 0FA0C4 7F0C5594 25299EF0 */ addiu $t1, %lo(player1_player_data) # addiu $t1, $t1, -0x6110 /* 0FA0C8 7F0C5598 01496021 */ addu $t4, $t2, $t1 -/* 0FA0CC 7F0C559C 0C001145 */ jal get_video2_settings_ulx +/* 0FA0CC 7F0C559C 0C001145 */ jal viGetViewLeft /* 0FA0D0 7F0C55A0 AFAC0044 */ sw $t4, 0x44($sp) /* 0FA0D4 7F0C55A4 00028400 */ sll $s0, $v0, 0x10 /* 0FA0D8 7F0C55A8 00107C03 */ sra $t7, $s0, 0x10 -/* 0FA0DC 7F0C55AC 0C001149 */ jal get_video2_settings_uly +/* 0FA0DC 7F0C55AC 0C001149 */ jal viGetViewTop /* 0FA0E0 7F0C55B0 01E08025 */ move $s0, $t7 /* 0FA0E4 7F0C55B4 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0FA0E8 7F0C55B8 8FAD0044 */ lw $t5, 0x44($sp) @@ -4343,11 +4343,11 @@ def_7F0C40C0: /* 0FA124 7F0C55F4 3C0A8008 */ lui $t2, %hi(player1_player_data) /* 0FA128 7F0C55F8 254A9EF0 */ addiu $t2, %lo(player1_player_data) # addiu $t2, $t2, -0x6110 /* 0FA12C 7F0C55FC 01CA4821 */ addu $t1, $t6, $t2 -/* 0FA130 7F0C5600 0C001145 */ jal get_video2_settings_ulx +/* 0FA130 7F0C5600 0C001145 */ jal viGetViewLeft /* 0FA134 7F0C5604 AFA90044 */ sw $t1, 0x44($sp) /* 0FA138 7F0C5608 00028400 */ sll $s0, $v0, 0x10 /* 0FA13C 7F0C560C 00106403 */ sra $t4, $s0, 0x10 -/* 0FA140 7F0C5610 0C001149 */ jal get_video2_settings_uly +/* 0FA140 7F0C5610 0C001149 */ jal viGetViewTop /* 0FA144 7F0C5614 01808025 */ move $s0, $t4 /* 0FA148 7F0C5618 8FAF00A8 */ lw $t7, 0xa8($sp) /* 0FA14C 7F0C561C 8FAB0044 */ lw $t3, 0x44($sp) @@ -4368,11 +4368,11 @@ def_7F0C40C0: /* 0FA184 7F0C5654 0019C080 */ sll $t8, $t9, 2 /* 0FA188 7F0C5658 25CE9EF0 */ addiu $t6, %lo(player1_player_data) # addiu $t6, $t6, -0x6110 /* 0FA18C 7F0C565C 030E5021 */ addu $t2, $t8, $t6 -/* 0FA190 7F0C5660 0C001145 */ jal get_video2_settings_ulx +/* 0FA190 7F0C5660 0C001145 */ jal viGetViewLeft /* 0FA194 7F0C5664 AFAA0044 */ sw $t2, 0x44($sp) /* 0FA198 7F0C5668 00028400 */ sll $s0, $v0, 0x10 /* 0FA19C 7F0C566C 00104C03 */ sra $t1, $s0, 0x10 -/* 0FA1A0 7F0C5670 0C001149 */ jal get_video2_settings_uly +/* 0FA1A0 7F0C5670 0C001149 */ jal viGetViewTop /* 0FA1A4 7F0C5674 01208025 */ move $s0, $t1 /* 0FA1A8 7F0C5678 8FAC00A8 */ lw $t4, 0xa8($sp) /* 0FA1AC 7F0C567C 8FAF0044 */ lw $t7, 0x44($sp) @@ -4397,11 +4397,11 @@ def_7F0C40C0: /* 0FA1F4 7F0C56C4 25CE9EF0 */ addiu $t6, %lo(player1_player_data) # addiu $t6, $t6, -0x6110 /* 0FA1F8 7F0C56C8 0019C080 */ sll $t8, $t9, 2 /* 0FA1FC 7F0C56CC 030E5021 */ addu $t2, $t8, $t6 -/* 0FA200 7F0C56D0 0C001145 */ jal get_video2_settings_ulx +/* 0FA200 7F0C56D0 0C001145 */ jal viGetViewLeft /* 0FA204 7F0C56D4 AFAA0044 */ sw $t2, 0x44($sp) /* 0FA208 7F0C56D8 00028400 */ sll $s0, $v0, 0x10 /* 0FA20C 7F0C56DC 00104C03 */ sra $t1, $s0, 0x10 -/* 0FA210 7F0C56E0 0C001149 */ jal get_video2_settings_uly +/* 0FA210 7F0C56E0 0C001149 */ jal viGetViewTop /* 0FA214 7F0C56E4 01208025 */ move $s0, $t1 /* 0FA218 7F0C56E8 8FAC00A8 */ lw $t4, 0xa8($sp) /* 0FA21C 7F0C56EC 8FAF0044 */ lw $t7, 0x44($sp) @@ -4422,11 +4422,11 @@ def_7F0C40C0: /* 0FA254 7F0C5724 000DC880 */ sll $t9, $t5, 2 /* 0FA258 7F0C5728 27189EF0 */ addiu $t8, %lo(player1_player_data) # addiu $t8, $t8, -0x6110 /* 0FA25C 7F0C572C 03387021 */ addu $t6, $t9, $t8 -/* 0FA260 7F0C5730 0C001145 */ jal get_video2_settings_ulx +/* 0FA260 7F0C5730 0C001145 */ jal viGetViewLeft /* 0FA264 7F0C5734 AFAE0044 */ sw $t6, 0x44($sp) /* 0FA268 7F0C5738 00028400 */ sll $s0, $v0, 0x10 /* 0FA26C 7F0C573C 00105403 */ sra $t2, $s0, 0x10 -/* 0FA270 7F0C5740 0C001149 */ jal get_video2_settings_uly +/* 0FA270 7F0C5740 0C001149 */ jal viGetViewTop /* 0FA274 7F0C5744 01408025 */ move $s0, $t2 /* 0FA278 7F0C5748 8FA900A8 */ lw $t1, 0xa8($sp) /* 0FA27C 7F0C574C 8FAC0044 */ lw $t4, 0x44($sp) @@ -4475,7 +4475,7 @@ def_7F0C40C0: /* 0FA318 7F0C57E8 AFA00014 */ sw $zero, 0x14($sp) /* 0FA31C 7F0C57EC 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0FA320 7F0C57F0 AFAC0010 */ sw $t4, 0x10($sp) -/* 0FA324 7F0C57F4 0C001145 */ jal get_video2_settings_ulx +/* 0FA324 7F0C57F4 0C001145 */ jal viGetViewLeft /* 0FA328 7F0C57F8 00000000 */ nop /* 0FA32C 7F0C57FC 8FAF0074 */ lw $t7, 0x74($sp) /* 0FA330 7F0C5800 8FB90078 */ lw $t9, 0x78($sp) @@ -4483,7 +4483,7 @@ def_7F0C40C0: /* 0FA338 7F0C5808 0019C043 */ sra $t8, $t9, 1 /* 0FA33C 7F0C580C 01B82023 */ subu $a0, $t5, $t8 /* 0FA340 7F0C5810 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA344 7F0C5814 0C001149 */ jal get_video2_settings_uly +/* 0FA344 7F0C5814 0C001149 */ jal viGetViewTop /* 0FA348 7F0C5818 AFA400CC */ sw $a0, 0xcc($sp) /* 0FA34C 7F0C581C 8FAB007C */ lw $t3, 0x7c($sp) /* 0FA350 7F0C5820 000B7043 */ sra $t6, $t3, 1 @@ -4528,7 +4528,7 @@ def_7F0C40C0: /* 0FA3EC 7F0C58BC AFA00014 */ sw $zero, 0x14($sp) /* 0FA3F0 7F0C58C0 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0FA3F4 7F0C58C4 AFB80010 */ sw $t8, 0x10($sp) -/* 0FA3F8 7F0C58C8 0C001145 */ jal get_video2_settings_ulx +/* 0FA3F8 7F0C58C8 0C001145 */ jal viGetViewLeft /* 0FA3FC 7F0C58CC 00000000 */ nop /* 0FA400 7F0C58D0 8FAB0074 */ lw $t3, 0x74($sp) /* 0FA404 7F0C58D4 8FAA0078 */ lw $t2, 0x78($sp) @@ -4536,7 +4536,7 @@ def_7F0C40C0: /* 0FA40C 7F0C58DC 000A4843 */ sra $t1, $t2, 1 /* 0FA410 7F0C58E0 01C92023 */ subu $a0, $t6, $t1 /* 0FA414 7F0C58E4 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA418 7F0C58E8 0C001149 */ jal get_video2_settings_uly +/* 0FA418 7F0C58E8 0C001149 */ jal viGetViewTop /* 0FA41C 7F0C58EC AFA400CC */ sw $a0, 0xcc($sp) /* 0FA420 7F0C58F0 3C0F8005 */ lui $t7, %hi(j_text_trigger) /* 0FA424 7F0C58F4 8DEF84D0 */ lw $t7, %lo(j_text_trigger)($t7) @@ -4594,7 +4594,7 @@ def_7F0C40C0: /* 0FA4EC 7F0C59BC AFA800A4 */ sw $t0, 0xa4($sp) /* 0FA4F0 7F0C59C0 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0FA4F4 7F0C59C4 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA4F8 7F0C59C8 0C001145 */ jal get_video2_settings_ulx +/* 0FA4F8 7F0C59C8 0C001145 */ jal viGetViewLeft /* 0FA4FC 7F0C59CC 00000000 */ nop /* 0FA500 7F0C59D0 8FB90074 */ lw $t9, 0x74($sp) /* 0FA504 7F0C59D4 8FAB0078 */ lw $t3, 0x78($sp) @@ -4602,7 +4602,7 @@ def_7F0C40C0: /* 0FA50C 7F0C59DC 000B5043 */ sra $t2, $t3, 1 /* 0FA510 7F0C59E0 030A2023 */ subu $a0, $t8, $t2 /* 0FA514 7F0C59E4 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA518 7F0C59E8 0C001149 */ jal get_video2_settings_uly +/* 0FA518 7F0C59E8 0C001149 */ jal viGetViewTop /* 0FA51C 7F0C59EC AFA400CC */ sw $a0, 0xcc($sp) /* 0FA520 7F0C59F0 8FAE007C */ lw $t6, 0x7c($sp) /* 0FA524 7F0C59F4 000E4843 */ sra $t1, $t6, 1 @@ -4649,7 +4649,7 @@ def_7F0C40C0: /* 0FA5C4 7F0C5A94 AFA200A4 */ sw $v0, 0xa4($sp) /* 0FA5C8 7F0C5A98 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0FA5CC 7F0C5A9C AFAA0010 */ sw $t2, 0x10($sp) -/* 0FA5D0 7F0C5AA0 0C001145 */ jal get_video2_settings_ulx +/* 0FA5D0 7F0C5AA0 0C001145 */ jal viGetViewLeft /* 0FA5D4 7F0C5AA4 00000000 */ nop /* 0FA5D8 7F0C5AA8 8FAE0074 */ lw $t6, 0x74($sp) /* 0FA5DC 7F0C5AAC 8FAC0078 */ lw $t4, 0x78($sp) @@ -4657,7 +4657,7 @@ def_7F0C40C0: /* 0FA5E4 7F0C5AB4 000C7843 */ sra $t7, $t4, 1 /* 0FA5E8 7F0C5AB8 012F2023 */ subu $a0, $t1, $t7 /* 0FA5EC 7F0C5ABC 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA5F0 7F0C5AC0 0C001149 */ jal get_video2_settings_uly +/* 0FA5F0 7F0C5AC0 0C001149 */ jal viGetViewTop /* 0FA5F4 7F0C5AC4 AFA400CC */ sw $a0, 0xcc($sp) /* 0FA5F8 7F0C5AC8 8FAD007C */ lw $t5, 0x7c($sp) /* 0FA5FC 7F0C5ACC 000DC843 */ sra $t9, $t5, 1 @@ -4709,7 +4709,7 @@ def_7F0C40C0: /* 0FA6AC 7F0C5B7C AFA00014 */ sw $zero, 0x14($sp) /* 0FA6B0 7F0C5B80 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0FA6B4 7F0C5B84 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA6B8 7F0C5B88 0C001145 */ jal get_video2_settings_ulx +/* 0FA6B8 7F0C5B88 0C001145 */ jal viGetViewLeft /* 0FA6BC 7F0C5B8C 00000000 */ nop /* 0FA6C0 7F0C5B90 8FB900A8 */ lw $t9, 0xa8($sp) /* 0FA6C4 7F0C5B94 8FB800C0 */ lw $t8, 0xc0($sp) @@ -4717,7 +4717,7 @@ def_7F0C40C0: /* 0FA6CC 7F0C5B9C 00185043 */ sra $t2, $t8, 1 /* 0FA6D0 7F0C5BA0 016A2023 */ subu $a0, $t3, $t2 /* 0FA6D4 7F0C5BA4 24840036 */ addiu $a0, $a0, 0x36 -/* 0FA6D8 7F0C5BA8 0C001149 */ jal get_video2_settings_uly +/* 0FA6D8 7F0C5BA8 0C001149 */ jal viGetViewTop /* 0FA6DC 7F0C5BAC AFA400CC */ sw $a0, 0xcc($sp) /* 0FA6E0 7F0C5BB0 8FAE00BC */ lw $t6, 0xbc($sp) /* 0FA6E4 7F0C5BB4 3C0D8008 */ lui $t5, %hi(pPlayer) @@ -4798,7 +4798,7 @@ def_7F0C40C0: /* 0FA808 7F0C5CD8 AFA00014 */ sw $zero, 0x14($sp) /* 0FA80C 7F0C5CDC 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0FA810 7F0C5CE0 AFB80010 */ sw $t8, 0x10($sp) -/* 0FA814 7F0C5CE4 0C001145 */ jal get_video2_settings_ulx +/* 0FA814 7F0C5CE4 0C001145 */ jal viGetViewLeft /* 0FA818 7F0C5CE8 00000000 */ nop /* 0FA81C 7F0C5CEC 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0FA820 7F0C5CF0 8FAE00C0 */ lw $t6, 0xc0($sp) @@ -4806,7 +4806,7 @@ def_7F0C40C0: /* 0FA828 7F0C5CF8 000E6043 */ sra $t4, $t6, 1 /* 0FA82C 7F0C5CFC 014C2023 */ subu $a0, $t2, $t4 /* 0FA830 7F0C5D00 24840068 */ addiu $a0, $a0, 0x68 -/* 0FA834 7F0C5D04 0C001149 */ jal get_video2_settings_uly +/* 0FA834 7F0C5D04 0C001149 */ jal viGetViewTop /* 0FA838 7F0C5D08 AFA400CC */ sw $a0, 0xcc($sp) /* 0FA83C 7F0C5D0C 8FA900BC */ lw $t1, 0xbc($sp) /* 0FA840 7F0C5D10 3C188008 */ lui $t8, %hi(pPlayer) @@ -4970,9 +4970,9 @@ def_7F0C40C0: /* 0FAA98 7F0C5F68 AFA00014 */ sw $zero, 0x14($sp) /* 0FAA9C 7F0C5F6C 0FC2BA63 */ jal sub_GAME_7F0AE98C /* 0FAAA0 7F0C5F70 AFA90010 */ sw $t1, 0x10($sp) -/* 0FAAA4 7F0C5F74 0C001145 */ jal get_video2_settings_ulx +/* 0FAAA4 7F0C5F74 0C001145 */ jal viGetViewLeft /* 0FAAA8 7F0C5F78 00000000 */ nop -/* 0FAAAC 7F0C5F7C 0C001127 */ jal get_video2_settings_width +/* 0FAAAC 7F0C5F7C 0C001127 */ jal viGetViewWidth /* 0FAAB0 7F0C5F80 A7A20056 */ sh $v0, 0x56($sp) /* 0FAAB4 7F0C5F84 87A30056 */ lh $v1, 0x56($sp) /* 0FAAB8 7F0C5F88 8FAD0068 */ lw $t5, 0x68($sp) @@ -4980,9 +4980,9 @@ def_7F0C40C0: /* 0FAAC0 7F0C5F90 01E3C821 */ addu $t9, $t7, $v1 /* 0FAAC4 7F0C5F94 000DC043 */ sra $t8, $t5, 1 /* 0FAAC8 7F0C5F98 03385823 */ subu $t3, $t9, $t8 -/* 0FAACC 7F0C5F9C 0C001149 */ jal get_video2_settings_uly +/* 0FAACC 7F0C5F9C 0C001149 */ jal viGetViewTop /* 0FAAD0 7F0C5FA0 AFAB0070 */ sw $t3, 0x70($sp) -/* 0FAAD4 7F0C5FA4 0C00112B */ jal get_video2_settings_height +/* 0FAAD4 7F0C5FA4 0C00112B */ jal viGetViewHeight /* 0FAAD8 7F0C5FA8 A7A20056 */ sh $v0, 0x56($sp) /* 0FAADC 7F0C5FAC 87A30056 */ lh $v1, 0x56($sp) /* 0FAAE0 7F0C5FB0 8FAC0064 */ lw $t4, 0x64($sp) @@ -5053,7 +5053,7 @@ glabel mp_watch_menu_display /* 0F9850 7F0C4CE0 00808825 */ move $s1, $a0 /* 0F9854 7F0C4CE4 0FC26F3C */ jal get_cur_playernum /* 0F9858 7F0C4CE8 AFB00034 */ sw $s0, 0x34($sp) -/* 0F985C 7F0C4CEC 0FC26C01 */ jal get_num_players +/* 0F985C 7F0C4CEC 0FC26C01 */ jal getPlayerCount /* 0F9860 7F0C4CF0 AFA200D4 */ sw $v0, 0xd4($sp) /* 0F9864 7F0C4CF4 24010001 */ li $at, 1 /* 0F9868 7F0C4CF8 00404025 */ move $t0, $v0 @@ -5142,7 +5142,7 @@ text_pause_unpause: text_exit: /* 0F9990 7F0C4E20 0FC30AA2 */ jal get_textptr_for_textID /* 0F9994 7F0C4E24 3404A01A */ li $a0, 40986 -/* 0F9998 7F0C4E28 0C001145 */ jal get_video2_settings_ulx +/* 0F9998 7F0C4E28 0C001145 */ jal viGetViewLeft /* 0F999C 7F0C4E2C AFA200A4 */ sw $v0, 0xa4($sp) /* 0F99A0 7F0C4E30 8FB900A8 */ lw $t9, 0xa8($sp) /* 0F99A4 7F0C4E34 00592021 */ addu $a0, $v0, $t9 @@ -5160,7 +5160,7 @@ def_7F0C40C0: /* 0F99CC 7F0C4E5C AFA00014 */ sw $zero, 0x14($sp) /* 0F99D0 7F0C4E60 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0F99D4 7F0C4E64 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F99D8 7F0C4E68 0C001145 */ jal get_video2_settings_ulx +/* 0F99D8 7F0C4E68 0C001145 */ jal viGetViewLeft /* 0F99DC 7F0C4E6C 00000000 */ nop /* 0F99E0 7F0C4E70 8FAC00A8 */ lw $t4, 0xa8($sp) /* 0F99E4 7F0C4E74 8FAE00C0 */ lw $t6, 0xc0($sp) @@ -5168,7 +5168,7 @@ def_7F0C40C0: /* 0F99EC 7F0C4E7C 000E7843 */ sra $t7, $t6, 1 /* 0F99F0 7F0C4E80 01AF2023 */ subu $a0, $t5, $t7 /* 0F99F4 7F0C4E84 24840050 */ addiu $a0, $a0, 0x50 -/* 0F99F8 7F0C4E88 0C001149 */ jal get_video2_settings_uly +/* 0F99F8 7F0C4E88 0C001149 */ jal viGetViewTop /* 0F99FC 7F0C4E8C AFA400CC */ sw $a0, 0xcc($sp) /* 0F9A00 7F0C4E90 8FB800BC */ lw $t8, 0xbc($sp) /* 0F9A04 7F0C4E94 0018C843 */ sra $t9, $t8, 1 @@ -5236,7 +5236,7 @@ def_7F0C40C0: /* 0F9AF4 7F0C4F84 00000000 */ nop /* 0F9AF8 7F0C4F88 10400056 */ beqz $v0, .Ljp7F0C50E4 /* 0F9AFC 7F0C4F8C 00000000 */ nop -/* 0F9B00 7F0C4F90 0C001145 */ jal get_video2_settings_ulx +/* 0F9B00 7F0C4F90 0C001145 */ jal viGetViewLeft /* 0F9B04 7F0C4F94 00000000 */ nop /* 0F9B08 7F0C4F98 3C038009 */ lui $v1, %hi(is_gameover_flag) # $v1, 0x8009 /* 0F9B0C 7F0C4F9C 8C63C774 */ lw $v1, %lo(is_gameover_flag)($v1) @@ -5259,7 +5259,7 @@ def_7F0C40C0: /* 0F9B4C 7F0C4FDC 2484FFF8 */ addiu $a0, $a0, -8 /* 0F9B50 7F0C4FE0 AFA400CC */ sw $a0, 0xcc($sp) .Ljp7F0C4FE4: -/* 0F9B54 7F0C4FE4 0C001149 */ jal get_video2_settings_uly +/* 0F9B54 7F0C4FE4 0C001149 */ jal viGetViewTop /* 0F9B58 7F0C4FE8 00000000 */ nop /* 0F9B5C 7F0C4FEC 3C0F8009 */ lui $t7, %hi(dword_CODE_bss_8008C708) # $t7, 0x8009 /* 0F9B60 7F0C4FF0 8DEFC778 */ lw $t7, %lo(dword_CODE_bss_8008C708)($t7) @@ -5329,7 +5329,7 @@ def_7F0C40C0: /* 0F9C58 7F0C50E8 00000000 */ nop /* 0F9C5C 7F0C50EC 10400056 */ beqz $v0, .Ljp7F0C5248 /* 0F9C60 7F0C50F0 00000000 */ nop -/* 0F9C64 7F0C50F4 0C001145 */ jal get_video2_settings_ulx +/* 0F9C64 7F0C50F4 0C001145 */ jal viGetViewLeft /* 0F9C68 7F0C50F8 00000000 */ nop /* 0F9C6C 7F0C50FC 3C038009 */ lui $v1, %hi(is_gameover_flag) # $v1, 0x8009 /* 0F9C70 7F0C5100 8C63C774 */ lw $v1, %lo(is_gameover_flag)($v1) @@ -5352,7 +5352,7 @@ def_7F0C40C0: /* 0F9CB0 7F0C5140 24840008 */ addiu $a0, $a0, 8 /* 0F9CB4 7F0C5144 AFA400CC */ sw $a0, 0xcc($sp) .Ljp7F0C5148: -/* 0F9CB8 7F0C5148 0C001149 */ jal get_video2_settings_uly +/* 0F9CB8 7F0C5148 0C001149 */ jal viGetViewTop /* 0F9CBC 7F0C514C 00000000 */ nop /* 0F9CC0 7F0C5150 3C0B8009 */ lui $t3, %hi(dword_CODE_bss_8008C708) # $t3, 0x8009 /* 0F9CC4 7F0C5154 8D6BC778 */ lw $t3, %lo(dword_CODE_bss_8008C708)($t3) @@ -5470,7 +5470,7 @@ def_7F0C40C0: /* 0F9E6C 7F0C52FC AFA00014 */ sw $zero, 0x14($sp) /* 0F9E70 7F0C5300 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0F9E74 7F0C5304 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F9E78 7F0C5308 0C001145 */ jal get_video2_settings_ulx +/* 0F9E78 7F0C5308 0C001145 */ jal viGetViewLeft /* 0F9E7C 7F0C530C 00000000 */ nop /* 0F9E80 7F0C5310 8FAE00A8 */ lw $t6, 0xa8($sp) /* 0F9E84 7F0C5314 8FAD00C0 */ lw $t5, 0xc0($sp) @@ -5478,7 +5478,7 @@ def_7F0C40C0: /* 0F9E8C 7F0C531C 000D7843 */ sra $t7, $t5, 1 /* 0F9E90 7F0C5320 018F2023 */ subu $a0, $t4, $t7 /* 0F9E94 7F0C5324 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9E98 7F0C5328 0C001149 */ jal get_video2_settings_uly +/* 0F9E98 7F0C5328 0C001149 */ jal viGetViewTop /* 0F9E9C 7F0C532C AFA400CC */ sw $a0, 0xcc($sp) /* 0F9EA0 7F0C5330 8FB800BC */ lw $t8, 0xbc($sp) /* 0F9EA4 7F0C5334 0018C843 */ sra $t9, $t8, 1 @@ -5540,7 +5540,7 @@ def_7F0C40C0: /* 0F9F7C 7F0C540C AFA00014 */ sw $zero, 0x14($sp) /* 0F9F80 7F0C5410 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0F9F84 7F0C5414 AFAE0010 */ sw $t6, 0x10($sp) -/* 0F9F88 7F0C5418 0C001145 */ jal get_video2_settings_ulx +/* 0F9F88 7F0C5418 0C001145 */ jal viGetViewLeft /* 0F9F8C 7F0C541C 00000000 */ nop /* 0F9F90 7F0C5420 8FAD00A8 */ lw $t5, 0xa8($sp) /* 0F9F94 7F0C5424 8FAF00C0 */ lw $t7, 0xc0($sp) @@ -5548,7 +5548,7 @@ def_7F0C40C0: /* 0F9F9C 7F0C542C 000FC043 */ sra $t8, $t7, 1 /* 0F9FA0 7F0C5430 01982023 */ subu $a0, $t4, $t8 /* 0F9FA4 7F0C5434 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9FA8 7F0C5438 0C001149 */ jal get_video2_settings_uly +/* 0F9FA8 7F0C5438 0C001149 */ jal viGetViewTop /* 0F9FAC 7F0C543C AFA400CC */ sw $a0, 0xcc($sp) /* 0F9FB0 7F0C5440 8FB900BC */ lw $t9, 0xbc($sp) /* 0F9FB4 7F0C5444 00195843 */ sra $t3, $t9, 1 @@ -5624,11 +5624,11 @@ def_7F0C40C0: /* 0FA0BC 7F0C554C 24010002 */ li $at, 2 /* 0FA0C0 7F0C5550 15E1004E */ bne $t7, $at, .Ljp7F0C568C /* 0FA0C4 7F0C5554 00000000 */ nop -/* 0FA0C8 7F0C5558 0C001145 */ jal get_video2_settings_ulx +/* 0FA0C8 7F0C5558 0C001145 */ jal viGetViewLeft /* 0FA0CC 7F0C555C 00000000 */ nop /* 0FA0D0 7F0C5560 00028400 */ sll $s0, $v0, 0x10 /* 0FA0D4 7F0C5564 00106403 */ sra $t4, $s0, 0x10 -/* 0FA0D8 7F0C5568 0C001149 */ jal get_video2_settings_uly +/* 0FA0D8 7F0C5568 0C001149 */ jal viGetViewTop /* 0FA0DC 7F0C556C 01808025 */ move $s0, $t4 /* 0FA0E0 7F0C5570 8FA300D4 */ lw $v1, 0xd4($sp) /* 0FA0E4 7F0C5574 00024400 */ sll $t0, $v0, 0x10 @@ -5664,11 +5664,11 @@ def_7F0C40C0: /* 0FA150 7F0C55E0 8FA70094 */ lw $a3, 0x94($sp) /* 0FA154 7F0C55E4 0FC31094 */ jal display_text_for_playerdata_on_MP_menu /* 0FA158 7F0C55E8 AFAC0010 */ sw $t4, 0x10($sp) -/* 0FA15C 7F0C55EC 0C001145 */ jal get_video2_settings_ulx +/* 0FA15C 7F0C55EC 0C001145 */ jal viGetViewLeft /* 0FA160 7F0C55F0 00408825 */ move $s1, $v0 /* 0FA164 7F0C55F4 00028400 */ sll $s0, $v0, 0x10 /* 0FA168 7F0C55F8 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA16C 7F0C55FC 0C001149 */ jal get_video2_settings_uly +/* 0FA16C 7F0C55FC 0C001149 */ jal viGetViewTop /* 0FA170 7F0C5600 03008025 */ move $s0, $t8 /* 0FA174 7F0C5604 8FA300D4 */ lw $v1, 0xd4($sp) /* 0FA178 7F0C5608 00024400 */ sll $t0, $v0, 0x10 @@ -5708,11 +5708,11 @@ def_7F0C40C0: /* 0FA1F4 7F0C5684 1000009E */ b .Ljp7F0C5900 /* 0FA1F8 7F0C5688 00408825 */ move $s1, $v0 .Ljp7F0C568C: -/* 0FA1FC 7F0C568C 0C001145 */ jal get_video2_settings_ulx +/* 0FA1FC 7F0C568C 0C001145 */ jal viGetViewLeft /* 0FA200 7F0C5690 00000000 */ nop /* 0FA204 7F0C5694 00028400 */ sll $s0, $v0, 0x10 /* 0FA208 7F0C5698 00107403 */ sra $t6, $s0, 0x10 -/* 0FA20C 7F0C569C 0C001149 */ jal get_video2_settings_uly +/* 0FA20C 7F0C569C 0C001149 */ jal viGetViewTop /* 0FA210 7F0C56A0 01C08025 */ move $s0, $t6 /* 0FA214 7F0C56A4 8FA300D4 */ lw $v1, 0xd4($sp) /* 0FA218 7F0C56A8 00024400 */ sll $t0, $v0, 0x10 @@ -5748,11 +5748,11 @@ def_7F0C40C0: /* 0FA284 7F0C5714 8FA70094 */ lw $a3, 0x94($sp) /* 0FA288 7F0C5718 0FC31094 */ jal display_text_for_playerdata_on_MP_menu /* 0FA28C 7F0C571C AFAE0010 */ sw $t6, 0x10($sp) -/* 0FA290 7F0C5720 0C001145 */ jal get_video2_settings_ulx +/* 0FA290 7F0C5720 0C001145 */ jal viGetViewLeft /* 0FA294 7F0C5724 00408825 */ move $s1, $v0 /* 0FA298 7F0C5728 00028400 */ sll $s0, $v0, 0x10 /* 0FA29C 7F0C572C 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA2A0 7F0C5730 0C001149 */ jal get_video2_settings_uly +/* 0FA2A0 7F0C5730 0C001149 */ jal viGetViewTop /* 0FA2A4 7F0C5734 01A08025 */ move $s0, $t5 /* 0FA2A8 7F0C5738 8FA300D4 */ lw $v1, 0xd4($sp) /* 0FA2AC 7F0C573C 00024400 */ sll $t0, $v0, 0x10 @@ -5789,11 +5789,11 @@ def_7F0C40C0: /* 0FA31C 7F0C57AC 8FA70098 */ lw $a3, 0x98($sp) /* 0FA320 7F0C57B0 0FC31094 */ jal display_text_for_playerdata_on_MP_menu /* 0FA324 7F0C57B4 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA328 7F0C57B8 0C001145 */ jal get_video2_settings_ulx +/* 0FA328 7F0C57B8 0C001145 */ jal viGetViewLeft /* 0FA32C 7F0C57BC 00408825 */ move $s1, $v0 /* 0FA330 7F0C57C0 00028400 */ sll $s0, $v0, 0x10 /* 0FA334 7F0C57C4 00107C03 */ sra $t7, $s0, 0x10 -/* 0FA338 7F0C57C8 0C001149 */ jal get_video2_settings_uly +/* 0FA338 7F0C57C8 0C001149 */ jal viGetViewTop /* 0FA33C 7F0C57CC 01E08025 */ move $s0, $t7 /* 0FA340 7F0C57D0 8FA300D4 */ lw $v1, 0xd4($sp) /* 0FA344 7F0C57D4 00024400 */ sll $t0, $v0, 0x10 @@ -5835,11 +5835,11 @@ def_7F0C40C0: /* 0FA3C8 7F0C5858 00408825 */ move $s1, $v0 /* 0FA3CC 7F0C585C 15810028 */ bne $t4, $at, .Ljp7F0C5900 /* 0FA3D0 7F0C5860 00000000 */ nop -/* 0FA3D4 7F0C5864 0C001145 */ jal get_video2_settings_ulx +/* 0FA3D4 7F0C5864 0C001145 */ jal viGetViewLeft /* 0FA3D8 7F0C5868 00000000 */ nop /* 0FA3DC 7F0C586C 00028400 */ sll $s0, $v0, 0x10 /* 0FA3E0 7F0C5870 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA3E4 7F0C5874 0C001149 */ jal get_video2_settings_uly +/* 0FA3E4 7F0C5874 0C001149 */ jal viGetViewTop /* 0FA3E8 7F0C5878 03008025 */ move $s0, $t8 /* 0FA3EC 7F0C587C 8FA300D4 */ lw $v1, 0xd4($sp) /* 0FA3F0 7F0C5880 00024400 */ sll $t0, $v0, 0x10 @@ -5910,7 +5910,7 @@ def_7F0C40C0: /* 0FA4DC 7F0C596C AFA00014 */ sw $zero, 0x14($sp) /* 0FA4E0 7F0C5970 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FA4E4 7F0C5974 AFAF0010 */ sw $t7, 0x10($sp) -/* 0FA4E8 7F0C5978 0C001145 */ jal get_video2_settings_ulx +/* 0FA4E8 7F0C5978 0C001145 */ jal viGetViewLeft /* 0FA4EC 7F0C597C 00000000 */ nop /* 0FA4F0 7F0C5980 8FAE00A8 */ lw $t6, 0xa8($sp) /* 0FA4F4 7F0C5984 8FB800C0 */ lw $t8, 0xc0($sp) @@ -5918,7 +5918,7 @@ def_7F0C40C0: /* 0FA4FC 7F0C598C 0018C843 */ sra $t9, $t8, 1 /* 0FA500 7F0C5990 01992023 */ subu $a0, $t4, $t9 /* 0FA504 7F0C5994 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA508 7F0C5998 0C001149 */ jal get_video2_settings_uly +/* 0FA508 7F0C5998 0C001149 */ jal viGetViewTop /* 0FA50C 7F0C599C AFA400CC */ sw $a0, 0xcc($sp) /* 0FA510 7F0C59A0 8FAB00BC */ lw $t3, 0xbc($sp) /* 0FA514 7F0C59A4 000B6843 */ sra $t5, $t3, 1 @@ -5973,7 +5973,7 @@ def_7F0C40C0: /* 0FA5D4 7F0C5A64 AFA00014 */ sw $zero, 0x14($sp) /* 0FA5D8 7F0C5A68 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FA5DC 7F0C5A6C AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA5E0 7F0C5A70 0C001145 */ jal get_video2_settings_ulx +/* 0FA5E0 7F0C5A70 0C001145 */ jal viGetViewLeft /* 0FA5E4 7F0C5A74 00000000 */ nop /* 0FA5E8 7F0C5A78 8FAF00A8 */ lw $t7, 0xa8($sp) /* 0FA5EC 7F0C5A7C 8FB800C0 */ lw $t8, 0xc0($sp) @@ -5981,7 +5981,7 @@ def_7F0C40C0: /* 0FA5F4 7F0C5A84 00186043 */ sra $t4, $t8, 1 /* 0FA5F8 7F0C5A88 01CC2023 */ subu $a0, $t6, $t4 /* 0FA5FC 7F0C5A8C 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA600 7F0C5A90 0C001149 */ jal get_video2_settings_uly +/* 0FA600 7F0C5A90 0C001149 */ jal viGetViewTop /* 0FA604 7F0C5A94 AFA400CC */ sw $a0, 0xcc($sp) /* 0FA608 7F0C5A98 8FB900BC */ lw $t9, 0xbc($sp) /* 0FA60C 7F0C5A9C 00195843 */ sra $t3, $t9, 1 @@ -6019,11 +6019,11 @@ def_7F0C40C0: /* 0FA68C 7F0C5B1C 8FA200D4 */ lw $v0, 0xd4($sp) /* 0FA690 7F0C5B20 50400018 */ beql $v0, $zero, .Ljp7F0C5B84 /* 0FA694 7F0C5B24 24010001 */ li $at, 1 -/* 0FA698 7F0C5B28 0C001145 */ jal get_video2_settings_ulx +/* 0FA698 7F0C5B28 0C001145 */ jal viGetViewLeft /* 0FA69C 7F0C5B2C 00000000 */ nop /* 0FA6A0 7F0C5B30 00028400 */ sll $s0, $v0, 0x10 /* 0FA6A4 7F0C5B34 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA6A8 7F0C5B38 0C001149 */ jal get_video2_settings_uly +/* 0FA6A8 7F0C5B38 0C001149 */ jal viGetViewTop /* 0FA6AC 7F0C5B3C 01A08025 */ move $s0, $t5 /* 0FA6B0 7F0C5B40 8FB800D4 */ lw $t8, 0xd4($sp) /* 0FA6B4 7F0C5B44 8FAF00A8 */ lw $t7, 0xa8($sp) @@ -6050,11 +6050,11 @@ def_7F0C40C0: /* 0FA704 7F0C5B94 27399F60 */ addiu $t9, %lo(player1_player_data) # addiu $t9, $t9, -0x60a0 /* 0FA708 7F0C5B98 000C6100 */ sll $t4, $t4, 4 /* 0FA70C 7F0C5B9C 01995821 */ addu $t3, $t4, $t9 -/* 0FA710 7F0C5BA0 0C001145 */ jal get_video2_settings_ulx +/* 0FA710 7F0C5BA0 0C001145 */ jal viGetViewLeft /* 0FA714 7F0C5BA4 AFAB0044 */ sw $t3, 0x44($sp) /* 0FA718 7F0C5BA8 00028400 */ sll $s0, $v0, 0x10 /* 0FA71C 7F0C5BAC 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA720 7F0C5BB0 0C001149 */ jal get_video2_settings_uly +/* 0FA720 7F0C5BB0 0C001149 */ jal viGetViewTop /* 0FA724 7F0C5BB4 01A08025 */ move $s0, $t5 /* 0FA728 7F0C5BB8 8FAF00A8 */ lw $t7, 0xa8($sp) /* 0FA72C 7F0C5BBC 8FB80044 */ lw $t8, 0x44($sp) @@ -6070,11 +6070,11 @@ def_7F0C40C0: .Ljp7F0C5BE4: /* 0FA754 7F0C5BE4 50400018 */ beql $v0, $zero, .Ljp7F0C5C48 /* 0FA758 7F0C5BE8 24010001 */ li $at, 1 -/* 0FA75C 7F0C5BEC 0C001145 */ jal get_video2_settings_ulx +/* 0FA75C 7F0C5BEC 0C001145 */ jal viGetViewLeft /* 0FA760 7F0C5BF0 00000000 */ nop /* 0FA764 7F0C5BF4 00028400 */ sll $s0, $v0, 0x10 /* 0FA768 7F0C5BF8 00107403 */ sra $t6, $s0, 0x10 -/* 0FA76C 7F0C5BFC 0C001149 */ jal get_video2_settings_uly +/* 0FA76C 7F0C5BFC 0C001149 */ jal viGetViewTop /* 0FA770 7F0C5C00 01C08025 */ move $s0, $t6 /* 0FA774 7F0C5C04 8FB900D4 */ lw $t9, 0xd4($sp) /* 0FA778 7F0C5C08 8FAC00A8 */ lw $t4, 0xa8($sp) @@ -6101,11 +6101,11 @@ def_7F0C40C0: /* 0FA7C8 7F0C5C58 25EF9F60 */ addiu $t7, %lo(player1_player_data) # addiu $t7, $t7, -0x60a0 /* 0FA7CC 7F0C5C5C 000D6900 */ sll $t5, $t5, 4 /* 0FA7D0 7F0C5C60 01AFC021 */ addu $t8, $t5, $t7 -/* 0FA7D4 7F0C5C64 0C001145 */ jal get_video2_settings_ulx +/* 0FA7D4 7F0C5C64 0C001145 */ jal viGetViewLeft /* 0FA7D8 7F0C5C68 AFB80044 */ sw $t8, 0x44($sp) /* 0FA7DC 7F0C5C6C 00028400 */ sll $s0, $v0, 0x10 /* 0FA7E0 7F0C5C70 00107403 */ sra $t6, $s0, 0x10 -/* 0FA7E4 7F0C5C74 0C001149 */ jal get_video2_settings_uly +/* 0FA7E4 7F0C5C74 0C001149 */ jal viGetViewTop /* 0FA7E8 7F0C5C78 01C08025 */ move $s0, $t6 /* 0FA7EC 7F0C5C7C 8FAC00A8 */ lw $t4, 0xa8($sp) /* 0FA7F0 7F0C5C80 8FB90044 */ lw $t9, 0x44($sp) @@ -6127,11 +6127,11 @@ def_7F0C40C0: /* 0FA82C 7F0C5CBC 25AD9F60 */ addiu $t5, %lo(player1_player_data) # addiu $t5, $t5, -0x60a0 /* 0FA830 7F0C5CC0 000B5900 */ sll $t3, $t3, 4 /* 0FA834 7F0C5CC4 016D7821 */ addu $t7, $t3, $t5 -/* 0FA838 7F0C5CC8 0C001145 */ jal get_video2_settings_ulx +/* 0FA838 7F0C5CC8 0C001145 */ jal viGetViewLeft /* 0FA83C 7F0C5CCC AFAF0044 */ sw $t7, 0x44($sp) /* 0FA840 7F0C5CD0 00028400 */ sll $s0, $v0, 0x10 /* 0FA844 7F0C5CD4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA848 7F0C5CD8 0C001149 */ jal get_video2_settings_uly +/* 0FA848 7F0C5CD8 0C001149 */ jal viGetViewTop /* 0FA84C 7F0C5CDC 03008025 */ move $s0, $t8 /* 0FA850 7F0C5CE0 8FAE00A8 */ lw $t6, 0xa8($sp) /* 0FA854 7F0C5CE4 8FAC0044 */ lw $t4, 0x44($sp) @@ -6156,11 +6156,11 @@ def_7F0C40C0: /* 0FA89C 7F0C5D2C 25AD9F60 */ addiu $t5, %lo(player1_player_data) # addiu $t5, $t5, -0x60a0 /* 0FA8A0 7F0C5D30 000B5900 */ sll $t3, $t3, 4 /* 0FA8A4 7F0C5D34 016D7821 */ addu $t7, $t3, $t5 -/* 0FA8A8 7F0C5D38 0C001145 */ jal get_video2_settings_ulx +/* 0FA8A8 7F0C5D38 0C001145 */ jal viGetViewLeft /* 0FA8AC 7F0C5D3C AFAF0044 */ sw $t7, 0x44($sp) /* 0FA8B0 7F0C5D40 00028400 */ sll $s0, $v0, 0x10 /* 0FA8B4 7F0C5D44 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA8B8 7F0C5D48 0C001149 */ jal get_video2_settings_uly +/* 0FA8B8 7F0C5D48 0C001149 */ jal viGetViewTop /* 0FA8BC 7F0C5D4C 03008025 */ move $s0, $t8 /* 0FA8C0 7F0C5D50 8FAE00A8 */ lw $t6, 0xa8($sp) /* 0FA8C4 7F0C5D54 8FAC0044 */ lw $t4, 0x44($sp) @@ -6205,7 +6205,7 @@ def_7F0C40C0: /* 0FA954 7F0C5DE4 AFA00014 */ sw $zero, 0x14($sp) /* 0FA958 7F0C5DE8 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FA95C 7F0C5DEC AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA960 7F0C5DF0 0C001145 */ jal get_video2_settings_ulx +/* 0FA960 7F0C5DF0 0C001145 */ jal viGetViewLeft /* 0FA964 7F0C5DF4 00000000 */ nop /* 0FA968 7F0C5DF8 8FAF00A8 */ lw $t7, 0xa8($sp) /* 0FA96C 7F0C5DFC 8FAE00C0 */ lw $t6, 0xc0($sp) @@ -6213,7 +6213,7 @@ def_7F0C40C0: /* 0FA974 7F0C5E04 000E6043 */ sra $t4, $t6, 1 /* 0FA978 7F0C5E08 030C2023 */ subu $a0, $t8, $t4 /* 0FA97C 7F0C5E0C 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA980 7F0C5E10 0C001149 */ jal get_video2_settings_uly +/* 0FA980 7F0C5E10 0C001149 */ jal viGetViewTop /* 0FA984 7F0C5E14 AFA400CC */ sw $a0, 0xcc($sp) /* 0FA988 7F0C5E18 8FB900BC */ lw $t9, 0xbc($sp) /* 0FA98C 7F0C5E1C 00195843 */ sra $t3, $t9, 1 @@ -6268,7 +6268,7 @@ def_7F0C40C0: /* 0FAA4C 7F0C5EDC AFA00014 */ sw $zero, 0x14($sp) /* 0FAA50 7F0C5EE0 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FAA54 7F0C5EE4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0FAA58 7F0C5EE8 0C001145 */ jal get_video2_settings_ulx +/* 0FAA58 7F0C5EE8 0C001145 */ jal viGetViewLeft /* 0FAA5C 7F0C5EEC 00000000 */ nop /* 0FAA60 7F0C5EF0 8FAD00A8 */ lw $t5, 0xa8($sp) /* 0FAA64 7F0C5EF4 8FAE00C0 */ lw $t6, 0xc0($sp) @@ -6276,7 +6276,7 @@ def_7F0C40C0: /* 0FAA6C 7F0C5EFC 000EC043 */ sra $t8, $t6, 1 /* 0FAA70 7F0C5F00 01F82023 */ subu $a0, $t7, $t8 /* 0FAA74 7F0C5F04 24840050 */ addiu $a0, $a0, 0x50 -/* 0FAA78 7F0C5F08 0C001149 */ jal get_video2_settings_uly +/* 0FAA78 7F0C5F08 0C001149 */ jal viGetViewTop /* 0FAA7C 7F0C5F0C AFA400CC */ sw $a0, 0xcc($sp) /* 0FAA80 7F0C5F10 8FAC00BC */ lw $t4, 0xbc($sp) /* 0FAA84 7F0C5F14 000CC843 */ sra $t9, $t4, 1 @@ -6315,11 +6315,11 @@ def_7F0C40C0: /* 0FAB08 7F0C5F98 3C188008 */ lui $t8, %hi(player1_player_data + 0x24) # $t8, 0x8008 /* 0FAB0C 7F0C5F9C 10400016 */ beqz $v0, .Ljp7F0C5FF8 /* 0FAB10 7F0C5FA0 00000000 */ nop -/* 0FAB14 7F0C5FA4 0C001145 */ jal get_video2_settings_ulx +/* 0FAB14 7F0C5FA4 0C001145 */ jal viGetViewLeft /* 0FAB18 7F0C5FA8 00000000 */ nop /* 0FAB1C 7F0C5FAC 00028400 */ sll $s0, $v0, 0x10 /* 0FAB20 7F0C5FB0 00105C03 */ sra $t3, $s0, 0x10 -/* 0FAB24 7F0C5FB4 0C001149 */ jal get_video2_settings_uly +/* 0FAB24 7F0C5FB4 0C001149 */ jal viGetViewTop /* 0FAB28 7F0C5FB8 01608025 */ move $s0, $t3 /* 0FAB2C 7F0C5FBC 8FAE00D4 */ lw $t6, 0xd4($sp) /* 0FAB30 7F0C5FC0 8FAD00A8 */ lw $t5, 0xa8($sp) @@ -6340,11 +6340,11 @@ def_7F0C40C0: /* 0FAB68 7F0C5FF8 8F189F84 */ lw $t8, %lo(player1_player_data + 0x24)($t8) /* 0FAB6C 7F0C5FFC 5B000017 */ blezl $t8, .Ljp7F0C605C /* 0FAB70 7F0C6000 24010001 */ li $at, 1 -/* 0FAB74 7F0C6004 0C001145 */ jal get_video2_settings_ulx +/* 0FAB74 7F0C6004 0C001145 */ jal viGetViewLeft /* 0FAB78 7F0C6008 00000000 */ nop /* 0FAB7C 7F0C600C 00028400 */ sll $s0, $v0, 0x10 /* 0FAB80 7F0C6010 00106403 */ sra $t4, $s0, 0x10 -/* 0FAB84 7F0C6014 0C001149 */ jal get_video2_settings_uly +/* 0FAB84 7F0C6014 0C001149 */ jal viGetViewTop /* 0FAB88 7F0C6018 01808025 */ move $s0, $t4 /* 0FAB8C 7F0C601C 8FAB00D4 */ lw $t3, 0xd4($sp) /* 0FAB90 7F0C6020 8FB900A8 */ lw $t9, 0xa8($sp) @@ -6370,11 +6370,11 @@ def_7F0C40C0: /* 0FABD8 7F0C6068 27189F60 */ addiu $t8, %lo(player1_player_data) # addiu $t8, $t8, -0x60a0 /* 0FABDC 7F0C606C 00027880 */ sll $t7, $v0, 2 /* 0FABE0 7F0C6070 01F86021 */ addu $t4, $t7, $t8 -/* 0FABE4 7F0C6074 0C001145 */ jal get_video2_settings_ulx +/* 0FABE4 7F0C6074 0C001145 */ jal viGetViewLeft /* 0FABE8 7F0C6078 AFAC0044 */ sw $t4, 0x44($sp) /* 0FABEC 7F0C607C 00028400 */ sll $s0, $v0, 0x10 /* 0FABF0 7F0C6080 0010CC03 */ sra $t9, $s0, 0x10 -/* 0FABF4 7F0C6084 0C001149 */ jal get_video2_settings_uly +/* 0FABF4 7F0C6084 0C001149 */ jal viGetViewTop /* 0FABF8 7F0C6088 03208025 */ move $s0, $t9 /* 0FABFC 7F0C608C 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0FAC00 7F0C6090 8FAD0044 */ lw $t5, 0x44($sp) @@ -6394,11 +6394,11 @@ def_7F0C40C0: /* 0FAC34 7F0C60C4 19C000D7 */ blez $t6, .Ljp7F0C6424 /* 0FAC38 7F0C60C8 00027880 */ sll $t7, $v0, 2 /* 0FAC3C 7F0C60CC 01F86021 */ addu $t4, $t7, $t8 -/* 0FAC40 7F0C60D0 0C001145 */ jal get_video2_settings_ulx +/* 0FAC40 7F0C60D0 0C001145 */ jal viGetViewLeft /* 0FAC44 7F0C60D4 AFAC0044 */ sw $t4, 0x44($sp) /* 0FAC48 7F0C60D8 00028400 */ sll $s0, $v0, 0x10 /* 0FAC4C 7F0C60DC 0010CC03 */ sra $t9, $s0, 0x10 -/* 0FAC50 7F0C60E0 0C001149 */ jal get_video2_settings_uly +/* 0FAC50 7F0C60E0 0C001149 */ jal viGetViewTop /* 0FAC54 7F0C60E4 03208025 */ move $s0, $t9 /* 0FAC58 7F0C60E8 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0FAC5C 7F0C60EC 8FAD0044 */ lw $t5, 0x44($sp) @@ -6415,11 +6415,11 @@ def_7F0C40C0: .Ljp7F0C6118: /* 0FAC88 7F0C6118 11E00015 */ beqz $t7, .Ljp7F0C6170 /* 0FAC8C 7F0C611C 3C0D8008 */ lui $t5, %hi(player1_player_data + 0x24) # $t5, 0x8008 -/* 0FAC90 7F0C6120 0C001145 */ jal get_video2_settings_ulx +/* 0FAC90 7F0C6120 0C001145 */ jal viGetViewLeft /* 0FAC94 7F0C6124 00000000 */ nop /* 0FAC98 7F0C6128 00028400 */ sll $s0, $v0, 0x10 /* 0FAC9C 7F0C612C 0010C403 */ sra $t8, $s0, 0x10 -/* 0FACA0 7F0C6130 0C001149 */ jal get_video2_settings_uly +/* 0FACA0 7F0C6130 0C001149 */ jal viGetViewTop /* 0FACA4 7F0C6134 03008025 */ move $s0, $t8 /* 0FACA8 7F0C6138 8FB900D4 */ lw $t9, 0xd4($sp) /* 0FACAC 7F0C613C 8FAC00A8 */ lw $t4, 0xa8($sp) @@ -6439,11 +6439,11 @@ def_7F0C40C0: /* 0FACE0 7F0C6170 8DAD9F84 */ lw $t5, %lo(player1_player_data + 0x24)($t5) /* 0FACE4 7F0C6174 59A00016 */ blezl $t5, .Ljp7F0C61D0 /* 0FACE8 7F0C6178 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0FACEC 7F0C617C 0C001145 */ jal get_video2_settings_ulx +/* 0FACEC 7F0C617C 0C001145 */ jal viGetViewLeft /* 0FACF0 7F0C6180 00000000 */ nop /* 0FACF4 7F0C6184 00028400 */ sll $s0, $v0, 0x10 /* 0FACF8 7F0C6188 00107403 */ sra $t6, $s0, 0x10 -/* 0FACFC 7F0C618C 0C001149 */ jal get_video2_settings_uly +/* 0FACFC 7F0C618C 0C001149 */ jal viGetViewTop /* 0FAD00 7F0C6190 01C08025 */ move $s0, $t6 /* 0FAD04 7F0C6194 8FB800D4 */ lw $t8, 0xd4($sp) /* 0FAD08 7F0C6198 8FAF00A8 */ lw $t7, 0xa8($sp) @@ -6468,11 +6468,11 @@ def_7F0C40C0: /* 0FAD4C 7F0C61DC 000B6880 */ sll $t5, $t3, 2 /* 0FAD50 7F0C61E0 25CE9F60 */ addiu $t6, %lo(player1_player_data) # addiu $t6, $t6, -0x60a0 /* 0FAD54 7F0C61E4 01AE7821 */ addu $t7, $t5, $t6 -/* 0FAD58 7F0C61E8 0C001145 */ jal get_video2_settings_ulx +/* 0FAD58 7F0C61E8 0C001145 */ jal viGetViewLeft /* 0FAD5C 7F0C61EC AFAF0044 */ sw $t7, 0x44($sp) /* 0FAD60 7F0C61F0 00028400 */ sll $s0, $v0, 0x10 /* 0FAD64 7F0C61F4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FAD68 7F0C61F8 0C001149 */ jal get_video2_settings_uly +/* 0FAD68 7F0C61F8 0C001149 */ jal viGetViewTop /* 0FAD6C 7F0C61FC 03008025 */ move $s0, $t8 /* 0FAD70 7F0C6200 8FAC00A8 */ lw $t4, 0xa8($sp) /* 0FAD74 7F0C6204 8FB90044 */ lw $t9, 0x44($sp) @@ -6494,11 +6494,11 @@ def_7F0C40C0: /* 0FADB0 7F0C6240 000D7080 */ sll $t6, $t5, 2 /* 0FADB4 7F0C6244 25EF9F60 */ addiu $t7, %lo(player1_player_data) # addiu $t7, $t7, -0x60a0 /* 0FADB8 7F0C6248 01CFC021 */ addu $t8, $t6, $t7 -/* 0FADBC 7F0C624C 0C001145 */ jal get_video2_settings_ulx +/* 0FADBC 7F0C624C 0C001145 */ jal viGetViewLeft /* 0FADC0 7F0C6250 AFB80044 */ sw $t8, 0x44($sp) /* 0FADC4 7F0C6254 00028400 */ sll $s0, $v0, 0x10 /* 0FADC8 7F0C6258 00106403 */ sra $t4, $s0, 0x10 -/* 0FADCC 7F0C625C 0C001149 */ jal get_video2_settings_uly +/* 0FADCC 7F0C625C 0C001149 */ jal viGetViewTop /* 0FADD0 7F0C6260 01808025 */ move $s0, $t4 /* 0FADD4 7F0C6264 8FB900A8 */ lw $t9, 0xa8($sp) /* 0FADD8 7F0C6268 8FAB0044 */ lw $t3, 0x44($sp) @@ -6519,11 +6519,11 @@ def_7F0C40C0: /* 0FAE10 7F0C62A0 000E7880 */ sll $t7, $t6, 2 /* 0FAE14 7F0C62A4 27189F60 */ addiu $t8, %lo(player1_player_data) # addiu $t8, $t8, -0x60a0 /* 0FAE18 7F0C62A8 01F86021 */ addu $t4, $t7, $t8 -/* 0FAE1C 7F0C62AC 0C001145 */ jal get_video2_settings_ulx +/* 0FAE1C 7F0C62AC 0C001145 */ jal viGetViewLeft /* 0FAE20 7F0C62B0 AFAC0044 */ sw $t4, 0x44($sp) /* 0FAE24 7F0C62B4 00028400 */ sll $s0, $v0, 0x10 /* 0FAE28 7F0C62B8 0010CC03 */ sra $t9, $s0, 0x10 -/* 0FAE2C 7F0C62BC 0C001149 */ jal get_video2_settings_uly +/* 0FAE2C 7F0C62BC 0C001149 */ jal viGetViewTop /* 0FAE30 7F0C62C0 03208025 */ move $s0, $t9 /* 0FAE34 7F0C62C4 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0FAE38 7F0C62C8 8FAD0044 */ lw $t5, 0x44($sp) @@ -6545,11 +6545,11 @@ def_7F0C40C0: /* 0FAE74 7F0C6304 000FC080 */ sll $t8, $t7, 2 /* 0FAE78 7F0C6308 258C9F60 */ addiu $t4, %lo(player1_player_data) # addiu $t4, $t4, -0x60a0 /* 0FAE7C 7F0C630C 030CC821 */ addu $t9, $t8, $t4 -/* 0FAE80 7F0C6310 0C001145 */ jal get_video2_settings_ulx +/* 0FAE80 7F0C6310 0C001145 */ jal viGetViewLeft /* 0FAE84 7F0C6314 AFB90044 */ sw $t9, 0x44($sp) /* 0FAE88 7F0C6318 00028400 */ sll $s0, $v0, 0x10 /* 0FAE8C 7F0C631C 00105C03 */ sra $t3, $s0, 0x10 -/* 0FAE90 7F0C6320 0C001149 */ jal get_video2_settings_uly +/* 0FAE90 7F0C6320 0C001149 */ jal viGetViewTop /* 0FAE94 7F0C6324 01608025 */ move $s0, $t3 /* 0FAE98 7F0C6328 8FAD00A8 */ lw $t5, 0xa8($sp) /* 0FAE9C 7F0C632C 8FAE0044 */ lw $t6, 0x44($sp) @@ -6573,11 +6573,11 @@ def_7F0C40C0: /* 0FAEE0 7F0C6370 3C0B8008 */ lui $t3, %hi(player1_player_data) # $t3, 0x8008 /* 0FAEE4 7F0C6374 256B9F60 */ addiu $t3, %lo(player1_player_data) # addiu $t3, $t3, -0x60a0 /* 0FAEE8 7F0C6378 032B6821 */ addu $t5, $t9, $t3 -/* 0FAEEC 7F0C637C 0C001145 */ jal get_video2_settings_ulx +/* 0FAEEC 7F0C637C 0C001145 */ jal viGetViewLeft /* 0FAEF0 7F0C6380 AFAD0044 */ sw $t5, 0x44($sp) /* 0FAEF4 7F0C6384 00028400 */ sll $s0, $v0, 0x10 /* 0FAEF8 7F0C6388 00107403 */ sra $t6, $s0, 0x10 -/* 0FAEFC 7F0C638C 0C001149 */ jal get_video2_settings_uly +/* 0FAEFC 7F0C638C 0C001149 */ jal viGetViewTop /* 0FAF00 7F0C6390 01C08025 */ move $s0, $t6 /* 0FAF04 7F0C6394 8FAF00A8 */ lw $t7, 0xa8($sp) /* 0FAF08 7F0C6398 8FB80044 */ lw $t8, 0x44($sp) @@ -6599,11 +6599,11 @@ def_7F0C40C0: /* 0FAF44 7F0C63D4 00195880 */ sll $t3, $t9, 2 /* 0FAF48 7F0C63D8 25AD9F60 */ addiu $t5, %lo(player1_player_data) # addiu $t5, $t5, -0x60a0 /* 0FAF4C 7F0C63DC 016D7021 */ addu $t6, $t3, $t5 -/* 0FAF50 7F0C63E0 0C001145 */ jal get_video2_settings_ulx +/* 0FAF50 7F0C63E0 0C001145 */ jal viGetViewLeft /* 0FAF54 7F0C63E4 AFAE0044 */ sw $t6, 0x44($sp) /* 0FAF58 7F0C63E8 00028400 */ sll $s0, $v0, 0x10 /* 0FAF5C 7F0C63EC 00107C03 */ sra $t7, $s0, 0x10 -/* 0FAF60 7F0C63F0 0C001149 */ jal get_video2_settings_uly +/* 0FAF60 7F0C63F0 0C001149 */ jal viGetViewTop /* 0FAF64 7F0C63F4 01E08025 */ move $s0, $t7 /* 0FAF68 7F0C63F8 8FB800A8 */ lw $t8, 0xa8($sp) /* 0FAF6C 7F0C63FC 8FAC0044 */ lw $t4, 0x44($sp) @@ -6652,7 +6652,7 @@ def_7F0C40C0: /* 0FB008 7F0C6498 AFA00014 */ sw $zero, 0x14($sp) /* 0FB00C 7F0C649C 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FB010 7F0C64A0 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FB014 7F0C64A4 0C001145 */ jal get_video2_settings_ulx +/* 0FB014 7F0C64A4 0C001145 */ jal viGetViewLeft /* 0FB018 7F0C64A8 00000000 */ nop /* 0FB01C 7F0C64AC 8FAE0074 */ lw $t6, 0x74($sp) /* 0FB020 7F0C64B0 8FAB0078 */ lw $t3, 0x78($sp) @@ -6660,7 +6660,7 @@ def_7F0C40C0: /* 0FB028 7F0C64B8 000BC043 */ sra $t8, $t3, 1 /* 0FB02C 7F0C64BC 01F82023 */ subu $a0, $t7, $t8 /* 0FB030 7F0C64C0 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB034 7F0C64C4 0C001149 */ jal get_video2_settings_uly +/* 0FB034 7F0C64C4 0C001149 */ jal viGetViewTop /* 0FB038 7F0C64C8 AFA400CC */ sw $a0, 0xcc($sp) /* 0FB03C 7F0C64CC 8FAC007C */ lw $t4, 0x7c($sp) /* 0FB040 7F0C64D0 000CC843 */ sra $t9, $t4, 1 @@ -6705,7 +6705,7 @@ def_7F0C40C0: /* 0FB0DC 7F0C656C AFA00014 */ sw $zero, 0x14($sp) /* 0FB0E0 7F0C6570 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FB0E4 7F0C6574 AFB90010 */ sw $t9, 0x10($sp) -/* 0FB0E8 7F0C6578 0C001145 */ jal get_video2_settings_ulx +/* 0FB0E8 7F0C6578 0C001145 */ jal viGetViewLeft /* 0FB0EC 7F0C657C 00000000 */ nop /* 0FB0F0 7F0C6580 8FAD0074 */ lw $t5, 0x74($sp) /* 0FB0F4 7F0C6584 8FAB0078 */ lw $t3, 0x78($sp) @@ -6713,7 +6713,7 @@ def_7F0C40C0: /* 0FB0FC 7F0C658C 000B7843 */ sra $t7, $t3, 1 /* 0FB100 7F0C6590 01CF2023 */ subu $a0, $t6, $t7 /* 0FB104 7F0C6594 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB108 7F0C6598 0C001149 */ jal get_video2_settings_uly +/* 0FB108 7F0C6598 0C001149 */ jal viGetViewTop /* 0FB10C 7F0C659C AFA400CC */ sw $a0, 0xcc($sp) /* 0FB110 7F0C65A0 3C0C8005 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8005 /* 0FB114 7F0C65A4 8D8C8500 */ lw $t4, %lo(j_text_trigger)($t4) @@ -6771,7 +6771,7 @@ def_7F0C40C0: /* 0FB1DC 7F0C666C AFA800A4 */ sw $t0, 0xa4($sp) /* 0FB1E0 7F0C6670 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FB1E4 7F0C6674 AFAB0010 */ sw $t3, 0x10($sp) -/* 0FB1E8 7F0C6678 0C001145 */ jal get_video2_settings_ulx +/* 0FB1E8 7F0C6678 0C001145 */ jal viGetViewLeft /* 0FB1EC 7F0C667C 00000000 */ nop /* 0FB1F0 7F0C6680 8FAE0074 */ lw $t6, 0x74($sp) /* 0FB1F4 7F0C6684 8FB80078 */ lw $t8, 0x78($sp) @@ -6779,7 +6779,7 @@ def_7F0C40C0: /* 0FB1FC 7F0C668C 00186043 */ sra $t4, $t8, 1 /* 0FB200 7F0C6690 01EC2023 */ subu $a0, $t7, $t4 /* 0FB204 7F0C6694 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB208 7F0C6698 0C001149 */ jal get_video2_settings_uly +/* 0FB208 7F0C6698 0C001149 */ jal viGetViewTop /* 0FB20C 7F0C669C AFA400CC */ sw $a0, 0xcc($sp) /* 0FB210 7F0C66A0 8FAD007C */ lw $t5, 0x7c($sp) /* 0FB214 7F0C66A4 000DC843 */ sra $t9, $t5, 1 @@ -6826,7 +6826,7 @@ def_7F0C40C0: /* 0FB2B4 7F0C6744 AFA200A4 */ sw $v0, 0xa4($sp) /* 0FB2B8 7F0C6748 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FB2BC 7F0C674C AFB90010 */ sw $t9, 0x10($sp) -/* 0FB2C0 7F0C6750 0C001145 */ jal get_video2_settings_ulx +/* 0FB2C0 7F0C6750 0C001145 */ jal viGetViewLeft /* 0FB2C4 7F0C6754 00000000 */ nop /* 0FB2C8 7F0C6758 8FAB0074 */ lw $t3, 0x74($sp) /* 0FB2CC 7F0C675C 8FB80078 */ lw $t8, 0x78($sp) @@ -6834,7 +6834,7 @@ def_7F0C40C0: /* 0FB2D4 7F0C6764 00187843 */ sra $t7, $t8, 1 /* 0FB2D8 7F0C6768 01CF2023 */ subu $a0, $t6, $t7 /* 0FB2DC 7F0C676C 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB2E0 7F0C6770 0C001149 */ jal get_video2_settings_uly +/* 0FB2E0 7F0C6770 0C001149 */ jal viGetViewTop /* 0FB2E4 7F0C6774 AFA400CC */ sw $a0, 0xcc($sp) /* 0FB2E8 7F0C6778 8FAC007C */ lw $t4, 0x7c($sp) /* 0FB2EC 7F0C677C 000C6843 */ sra $t5, $t4, 1 @@ -6886,7 +6886,7 @@ def_7F0C40C0: /* 0FB39C 7F0C682C AFA00014 */ sw $zero, 0x14($sp) /* 0FB3A0 7F0C6830 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FB3A4 7F0C6834 AFB90010 */ sw $t9, 0x10($sp) -/* 0FB3A8 7F0C6838 0C001145 */ jal get_video2_settings_ulx +/* 0FB3A8 7F0C6838 0C001145 */ jal viGetViewLeft /* 0FB3AC 7F0C683C 00000000 */ nop /* 0FB3B0 7F0C6840 8FAB00A8 */ lw $t3, 0xa8($sp) /* 0FB3B4 7F0C6844 8FAE00C0 */ lw $t6, 0xc0($sp) @@ -6894,7 +6894,7 @@ def_7F0C40C0: /* 0FB3BC 7F0C684C 000E7843 */ sra $t7, $t6, 1 /* 0FB3C0 7F0C6850 030F2023 */ subu $a0, $t8, $t7 /* 0FB3C4 7F0C6854 24840036 */ addiu $a0, $a0, 0x36 -/* 0FB3C8 7F0C6858 0C001149 */ jal get_video2_settings_uly +/* 0FB3C8 7F0C6858 0C001149 */ jal viGetViewTop /* 0FB3CC 7F0C685C AFA400CC */ sw $a0, 0xcc($sp) /* 0FB3D0 7F0C6860 8FAC00BC */ lw $t4, 0xbc($sp) /* 0FB3D4 7F0C6864 3C0E8008 */ lui $t6, %hi(pPlayer) # $t6, 0x8008 @@ -6975,7 +6975,7 @@ def_7F0C40C0: /* 0FB4F8 7F0C6988 AFA00014 */ sw $zero, 0x14($sp) /* 0FB4FC 7F0C698C 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FB500 7F0C6990 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FB504 7F0C6994 0C001145 */ jal get_video2_settings_ulx +/* 0FB504 7F0C6994 0C001145 */ jal viGetViewLeft /* 0FB508 7F0C6998 00000000 */ nop /* 0FB50C 7F0C699C 8FB900A8 */ lw $t9, 0xa8($sp) /* 0FB510 7F0C69A0 8FAE00C0 */ lw $t6, 0xc0($sp) @@ -6983,7 +6983,7 @@ def_7F0C40C0: /* 0FB518 7F0C69A8 000EC043 */ sra $t8, $t6, 1 /* 0FB51C 7F0C69AC 01782023 */ subu $a0, $t3, $t8 /* 0FB520 7F0C69B0 24840068 */ addiu $a0, $a0, 0x68 -/* 0FB524 7F0C69B4 0C001149 */ jal get_video2_settings_uly +/* 0FB524 7F0C69B4 0C001149 */ jal viGetViewTop /* 0FB528 7F0C69B8 AFA400CC */ sw $a0, 0xcc($sp) /* 0FB52C 7F0C69BC 8FAF00BC */ lw $t7, 0xbc($sp) /* 0FB530 7F0C69C0 3C0E8008 */ lui $t6, %hi(pPlayer) # $t6, 0x8008 @@ -7147,9 +7147,9 @@ def_7F0C40C0: /* 0FB788 7F0C6C18 AFA00014 */ sw $zero, 0x14($sp) /* 0FB78C 7F0C6C1C 0FC2BD4F */ jal sub_GAME_7F0AE98C /* 0FB790 7F0C6C20 AFB80010 */ sw $t8, 0x10($sp) -/* 0FB794 7F0C6C24 0C001145 */ jal get_video2_settings_ulx +/* 0FB794 7F0C6C24 0C001145 */ jal viGetViewLeft /* 0FB798 7F0C6C28 00000000 */ nop -/* 0FB79C 7F0C6C2C 0C001127 */ jal get_video2_settings_width +/* 0FB79C 7F0C6C2C 0C001127 */ jal viGetViewWidth /* 0FB7A0 7F0C6C30 A7A20056 */ sh $v0, 0x56($sp) /* 0FB7A4 7F0C6C34 87A80056 */ lh $t0, 0x56($sp) /* 0FB7A8 7F0C6C38 8FAE0068 */ lw $t6, 0x68($sp) @@ -7157,9 +7157,9 @@ def_7F0C40C0: /* 0FB7B0 7F0C6C40 01A8C821 */ addu $t9, $t5, $t0 /* 0FB7B4 7F0C6C44 000E7843 */ sra $t7, $t6, 1 /* 0FB7B8 7F0C6C48 032F5023 */ subu $t2, $t9, $t7 -/* 0FB7BC 7F0C6C4C 0C001149 */ jal get_video2_settings_uly +/* 0FB7BC 7F0C6C4C 0C001149 */ jal viGetViewTop /* 0FB7C0 7F0C6C50 AFAA0070 */ sw $t2, 0x70($sp) -/* 0FB7C4 7F0C6C54 0C00112B */ jal get_video2_settings_height +/* 0FB7C4 7F0C6C54 0C00112B */ jal viGetViewHeight /* 0FB7C8 7F0C6C58 A7A20056 */ sh $v0, 0x56($sp) /* 0FB7CC 7F0C6C5C 87A80056 */ lh $t0, 0x56($sp) /* 0FB7D0 7F0C6C60 8FA90064 */ lw $t1, 0x64($sp) diff --git a/src/game/objecthandler_2.c b/src/game/objecthandler_2.c index 0b2e6c7..421e354 100644 --- a/src/game/objecthandler_2.c +++ b/src/game/objecthandler_2.c @@ -1,4 +1,5 @@ #include "ultra64.h" +#include "structs.h" //D:80054600 const char aGetsubmatrixNoObjinst[] = "getsubmatrix: no objinst!\n"; @@ -1072,38 +1073,14 @@ glabel getinstsize - -#ifdef NONMATCHING -void sub_GAME_7F06D07C(void) { - +// Also matches with float*s +void interpolate3dVectors(struct float3 *v,struct float3 *w,float k) +{ + v->x += (w->x - v->x) * k; + v->y += (w->y - v->y) * k; + v->z += (w->z - v->z) * k; + return; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06D07C -/* 0A1BAC 7F06D07C C4800000 */ lwc1 $f0, ($a0) -/* 0A1BB0 7F06D080 C4A40000 */ lwc1 $f4, ($a1) -/* 0A1BB4 7F06D084 44866000 */ mtc1 $a2, $f12 -/* 0A1BB8 7F06D088 C4820004 */ lwc1 $f2, 4($a0) -/* 0A1BBC 7F06D08C 46002181 */ sub.s $f6, $f4, $f0 -/* 0A1BC0 7F06D090 C48E0008 */ lwc1 $f14, 8($a0) -/* 0A1BC4 7F06D094 460C3202 */ mul.s $f8, $f6, $f12 -/* 0A1BC8 7F06D098 46080280 */ add.s $f10, $f0, $f8 -/* 0A1BCC 7F06D09C E48A0000 */ swc1 $f10, ($a0) -/* 0A1BD0 7F06D0A0 C4B00004 */ lwc1 $f16, 4($a1) -/* 0A1BD4 7F06D0A4 46028481 */ sub.s $f18, $f16, $f2 -/* 0A1BD8 7F06D0A8 460C9102 */ mul.s $f4, $f18, $f12 -/* 0A1BDC 7F06D0AC 46041180 */ add.s $f6, $f2, $f4 -/* 0A1BE0 7F06D0B0 E4860004 */ swc1 $f6, 4($a0) -/* 0A1BE4 7F06D0B4 C4A80008 */ lwc1 $f8, 8($a1) -/* 0A1BE8 7F06D0B8 460E4281 */ sub.s $f10, $f8, $f14 -/* 0A1BEC 7F06D0BC 460C5402 */ mul.s $f16, $f10, $f12 -/* 0A1BF0 7F06D0C0 46107480 */ add.s $f18, $f14, $f16 -/* 0A1BF4 7F06D0C4 03E00008 */ jr $ra -/* 0A1BF8 7F06D0C8 E4920008 */ swc1 $f18, 8($a0) -) -#endif - @@ -1485,7 +1462,7 @@ glabel sub_GAME_7F06D490 /* 0A2028 7F06D4F8 51E0000B */ beql $t7, $zero, .L7F06D528 /* 0A202C 7F06D4FC 8E380054 */ lw $t8, 0x54($s1) /* 0A2030 7F06D500 44060000 */ mfc1 $a2, $f0 -/* 0A2034 7F06D504 0FC1B41F */ jal sub_GAME_7F06D07C +/* 0A2034 7F06D504 0FC1B41F */ jal interpolate3dVectors /* 0A2038 7F06D508 24450024 */ addiu $a1, $v0, 0x24 /* 0A203C 7F06D50C C60C0030 */ lwc1 $f12, 0x30($s0) /* 0A2040 7F06D510 C60E0020 */ lwc1 $f14, 0x20($s0) diff --git a/src/game/playerstats_007770.c b/src/game/playerstats_007770.c index 60b9ecb..f78db68 100644 --- a/src/game/playerstats_007770.c +++ b/src/game/playerstats_007770.c @@ -15,7 +15,7 @@ glabel sub_GAME_7F007770 /* 03C2A8 7F007778 AFB30020 */ sw $s3, 0x20($sp) /* 03C2AC 7F00777C AFB2001C */ sw $s2, 0x1c($sp) /* 03C2B0 7F007780 AFB10018 */ sw $s1, 0x18($sp) -/* 03C2B4 7F007784 0FC26919 */ jal get_num_players +/* 03C2B4 7F007784 0FC26919 */ jal getPlayerCount /* 03C2B8 7F007788 AFB00014 */ sw $s0, 0x14($sp) /* 03C2BC 7F00778C 0FC26C54 */ jal get_cur_playernum /* 03C2C0 7F007790 00409825 */ move $s3, $v0 diff --git a/src/game/prop.c b/src/game/prop.c index 69f80e6..785686c 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -286,7 +286,7 @@ glabel prepare_load_objects /* 036938 7F001E08 00000000 */ nop /* 03693C 7F001E0C 468041A0 */ cvt.s.w $f6, $f8 /* 036940 7F001E10 460A3103 */ div.s $f4, $f6, $f10 -/* 036944 7F001E14 0FC26919 */ jal get_num_players +/* 036944 7F001E14 0FC26919 */ jal getPlayerCount /* 036948 7F001E18 E6240074 */ swc1 $f4, 0x74($s1) /* 03694C 7F001E1C 28410002 */ slti $at, $v0, 2 /* 036950 7F001E20 1420001B */ bnez $at, .L7F001E90 @@ -407,7 +407,7 @@ glabel prepare_load_objects /* 036AF8 7F001FC8 00000000 */ nop /* 036AFC 7F001FCC 8FAE006C */ lw $t6, 0x6c($sp) /* 036B00 7F001FD0 02002025 */ move $a0, $s0 -/* 036B04 7F001FD4 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 036B04 7F001FD4 0FC0E969 */ jal attachNewChild /* 036B08 7F001FD8 8DC50018 */ lw $a1, 0x18($t6) /* 036B0C 7F001FDC 100001D2 */ b .L7F002728 /* 036B10 7F001FE0 8FBF0034 */ lw $ra, 0x34($sp) @@ -445,7 +445,7 @@ glabel prepare_load_objects /* 036B8C 7F00205C E7A60020 */ swc1 $f6, 0x20($sp) /* 036B90 7F002060 C44A0014 */ lwc1 $f10, 0x14($v0) /* 036B94 7F002064 AFA20064 */ sw $v0, 0x64($sp) -/* 036B98 7F002068 0FC16642 */ jal sub_GAME_7F059908 +/* 036B98 7F002068 0FC16642 */ jal matrix_4x4_7F059908 /* 036B9C 7F00206C E7AA0024 */ swc1 $f10, 0x24($sp) /* 036BA0 7F002070 8FA20064 */ lw $v0, 0x64($sp) /* 036BA4 7F002074 C4440000 */ lwc1 $f4, ($v0) @@ -503,7 +503,7 @@ glabel prepare_load_objects /* 036C68 7F002138 C6040010 */ lwc1 $f4, 0x10($s0) /* 036C6C 7F00213C E7A40020 */ swc1 $f4, 0x20($sp) /* 036C70 7F002140 C6080014 */ lwc1 $f8, 0x14($s0) -/* 036C74 7F002144 0FC16642 */ jal sub_GAME_7F059908 +/* 036C74 7F002144 0FC16642 */ jal matrix_4x4_7F059908 /* 036C78 7F002148 E7A80024 */ swc1 $f8, 0x24($sp) /* 036C7C 7F00214C 8E2C000C */ lw $t4, 0xc($s1) /* 036C80 7F002150 02002025 */ move $a0, $s0 @@ -1025,7 +1025,7 @@ glabel expand_08_obj_set_guard_MP_weapons /* 037330 7F002800 24050001 */ li $a1, 1 .L7F002804: /* 037334 7F002804 AFA50018 */ sw $a1, 0x18($sp) -/* 037338 7F002808 0FC26919 */ jal get_num_players +/* 037338 7F002808 0FC26919 */ jal getPlayerCount /* 03733C 7F00280C AFA7002C */ sw $a3, 0x2c($sp) /* 037340 7F002810 28410002 */ slti $at, $v0, 2 /* 037344 7F002814 8FA50018 */ lw $a1, 0x18($sp) @@ -1327,7 +1327,7 @@ glabel sub_GAME_7F002A3C /* 037698 7F002B68 46062281 */ sub.s $f10, $f4, $f6 /* 03769C 7F002B6C E7A0001C */ swc1 $f0, 0x1c($sp) /* 0376A0 7F002B70 E7A80020 */ swc1 $f8, 0x20($sp) -/* 0376A4 7F002B74 0FC16642 */ jal sub_GAME_7F059908 +/* 0376A4 7F002B74 0FC16642 */ jal matrix_4x4_7F059908 /* 0376A8 7F002B78 E7AA0018 */ swc1 $f10, 0x18($sp) /* 0376AC 7F002B7C 8E0F0014 */ lw $t7, 0x14($s0) /* 0376B0 7F002B80 8FA5003C */ lw $a1, 0x3c($sp) @@ -1597,7 +1597,7 @@ glabel sub_GAME_7F002E3C /* 037A5C 7F002F2C 00000000 */ nop /* 037A60 7F002F30 46809120 */ cvt.s.w $f4, $f18 /* 037A64 7F002F34 46082183 */ div.s $f6, $f4, $f8 -/* 037A68 7F002F38 0FC26919 */ jal get_num_players +/* 037A68 7F002F38 0FC26919 */ jal getPlayerCount /* 037A6C 7F002F3C E6060074 */ swc1 $f6, 0x74($s0) /* 037A70 7F002F40 28410002 */ slti $at, $v0, 2 /* 037A74 7F002F44 14200004 */ bnez $at, .L7F002F58 @@ -1670,7 +1670,7 @@ glabel sub_GAME_7F002E3C /* 037B70 7F003040 ADAC001C */ sw $t4, 0x1c($t5) .L7F003044: /* 037B74 7F003044 8FA40024 */ lw $a0, 0x24($sp) -/* 037B78 7F003048 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 037B78 7F003048 0FC0E969 */ jal attachNewChild /* 037B7C 7F00304C 8E250010 */ lw $a1, 0x10($s1) /* 037B80 7F003050 8E05006C */ lw $a1, 0x6c($s0) /* 037B84 7F003054 3C018005 */ lui $at, %hi(D_8004EF58) @@ -2178,7 +2178,7 @@ glabel sub_GAME_7F003480 /* 03828C 7F00375C C6040010 */ lwc1 $f4, 0x10($s0) /* 038290 7F003760 E7A40020 */ swc1 $f4, 0x20($sp) /* 038294 7F003764 C6080014 */ lwc1 $f8, 0x14($s0) -/* 038298 7F003768 0FC16642 */ jal sub_GAME_7F059908 +/* 038298 7F003768 0FC16642 */ jal matrix_4x4_7F059908 /* 03829C 7F00376C E7A80024 */ swc1 $f8, 0x24($sp) /* 0382A0 7F003770 8FA801D0 */ lw $t0, 0x1d0($sp) /* 0382A4 7F003774 3C0A8004 */ lui $t2, %hi(PitemZ_entries) @@ -2687,7 +2687,7 @@ glabel proplvreset2 /* 03884C 7F003D1C AD410000 */ sw $at, ($t2) /* 038850 7F003D20 904B0000 */ lbu $t3, ($v0) /* 038854 7F003D24 A3A00175 */ sb $zero, 0x175($sp) -/* 038858 7F003D28 0FC26919 */ jal get_num_players +/* 038858 7F003D28 0FC26919 */ jal getPlayerCount /* 03885C 7F003D2C A3AB0174 */ sb $t3, 0x174($sp) /* 038860 7F003D30 28410002 */ slti $at, $v0, 2 /* 038864 7F003D34 14200004 */ bnez $at, .L7F003D48 @@ -3069,7 +3069,7 @@ glabel proplvreset2 /* 038DD8 7F0042A8 02602025 */ move $a0, $s3 /* 038DDC 7F0042AC 0FC01589 */ jal sub_GAME_7F005624 /* 038DE0 7F0042B0 02802025 */ move $a0, $s4 -/* 038DE4 7F0042B4 0FC26919 */ jal get_num_players +/* 038DE4 7F0042B4 0FC26919 */ jal getPlayerCount /* 038DE8 7F0042B8 00008025 */ move $s0, $zero /* 038DEC 7F0042BC 1840000C */ blez $v0, .L7F0042F0 /* 038DF0 7F0042C0 00000000 */ nop @@ -3080,7 +3080,7 @@ glabel proplvreset2 /* 038E00 7F0042D0 2404000E */ li $a0, 14 /* 038E04 7F0042D4 0FC01897 */ jal alloc_additional_item_slots /* 038E08 7F0042D8 00402025 */ move $a0, $v0 -/* 038E0C 7F0042DC 0FC26919 */ jal get_num_players +/* 038E0C 7F0042DC 0FC26919 */ jal getPlayerCount /* 038E10 7F0042E0 26100001 */ addiu $s0, $s0, 1 /* 038E14 7F0042E4 0202082A */ slt $at, $s0, $v0 /* 038E18 7F0042E8 1420FFF6 */ bnez $at, .L7F0042C4 @@ -3094,12 +3094,12 @@ glabel proplvreset2 /* 038E34 7F004304 00000000 */ nop /* 038E38 7F004308 244C0004 */ addiu $t4, $v0, 4 /* 038E3C 7F00430C 240D0001 */ li $t5, 1 -/* 038E40 7F004310 0FC26919 */ jal get_num_players +/* 038E40 7F004310 0FC26919 */ jal getPlayerCount /* 038E44 7F004314 018DA004 */ sllv $s4, $t5, $t4 /* 038E48 7F004318 28410002 */ slti $at, $v0, 2 /* 038E4C 7F00431C 14200007 */ bnez $at, .L7F00433C /* 038E50 7F004320 00000000 */ nop -/* 038E54 7F004324 0FC26919 */ jal get_num_players +/* 038E54 7F004324 0FC26919 */ jal getPlayerCount /* 038E58 7F004328 00000000 */ nop /* 038E5C 7F00432C 244E0014 */ addiu $t6, $v0, 0x14 /* 038E60 7F004330 240F0001 */ li $t7, 1 @@ -3390,7 +3390,7 @@ obj_03_expand: /* 039288 7F004758 100000E8 */ b other_obj_expand /* 03928C 7F00475C 00000000 */ nop ammo_box_expand: -/* 039290 7F004760 0FC26919 */ jal get_num_players +/* 039290 7F004760 0FC26919 */ jal getPlayerCount /* 039294 7F004764 24100001 */ li $s0, 1 /* 039298 7F004768 28410002 */ slti $at, $v0, 2 /* 03929C 7F00476C 1420000E */ bnez $at, .L7F0047A8 @@ -3694,7 +3694,7 @@ other_obj_expand: /* 0396EC 7F004BBC 0FC1B39E */ jal set_obj_instance_controller_scale /* 0396F0 7F004BC0 8C850014 */ lw $a1, 0x14($a0) /* 0396F4 7F004BC4 8E440010 */ lw $a0, 0x10($s2) -/* 0396F8 7F004BC8 0FC0E969 */ jal sub_GAME_7F03A5A4 +/* 0396F8 7F004BC8 0FC0E969 */ jal attachNewChild /* 0396FC 7F004BCC 8E050010 */ lw $a1, 0x10($s0) /* 039700 7F004BD0 10000084 */ b .L7F004DE4 /* 039704 7F004BD4 00000000 */ nop @@ -4080,7 +4080,7 @@ glabel jpt_8004F02C /* 03888C 7F003D1C AD410000 */ sw $at, ($t2) /* 038890 7F003D20 904B0000 */ lbu $t3, ($v0) /* 038894 7F003D24 A3A00175 */ sb $zero, 0x175($sp) -/* 038898 7F003D28 0FC26C01 */ jal get_num_players +/* 038898 7F003D28 0FC26C01 */ jal getPlayerCount /* 03889C 7F003D2C A3AB0174 */ sb $t3, 0x174($sp) /* 0388A0 7F003D30 28410002 */ slti $at, $v0, 2 /* 0388A4 7F003D34 14200004 */ bnez $at, .L7F003D48 @@ -4462,7 +4462,7 @@ glabel jpt_8004F02C /* 038E18 7F0042A8 02602025 */ move $a0, $s3 /* 038E1C 7F0042AC 0FC01591 */ jal sub_GAME_7F005624 /* 038E20 7F0042B0 02802025 */ move $a0, $s4 -/* 038E24 7F0042B4 0FC26C01 */ jal get_num_players +/* 038E24 7F0042B4 0FC26C01 */ jal getPlayerCount /* 038E28 7F0042B8 00008025 */ move $s0, $zero /* 038E2C 7F0042BC 1840000C */ blez $v0, .L7F0042F0 /* 038E30 7F0042C0 00000000 */ nop @@ -4473,7 +4473,7 @@ glabel jpt_8004F02C /* 038E40 7F0042D0 2404000E */ li $a0, 14 /* 038E44 7F0042D4 0FC01897 */ jal alloc_additional_item_slots /* 038E48 7F0042D8 00402025 */ move $a0, $v0 -/* 038E4C 7F0042DC 0FC26C01 */ jal get_num_players +/* 038E4C 7F0042DC 0FC26C01 */ jal getPlayerCount /* 038E50 7F0042E0 26100001 */ addiu $s0, $s0, 1 /* 038E54 7F0042E4 0202082A */ slt $at, $s0, $v0 /* 038E58 7F0042E8 1420FFF6 */ bnez $at, .L7F0042C4 @@ -4487,12 +4487,12 @@ glabel jpt_8004F02C /* 038E74 7F004304 00000000 */ nop /* 038E78 7F004308 244C0004 */ addiu $t4, $v0, 4 /* 038E7C 7F00430C 240D0001 */ li $t5, 1 -/* 038E80 7F004310 0FC26C01 */ jal get_num_players +/* 038E80 7F004310 0FC26C01 */ jal getPlayerCount /* 038E84 7F004314 018DA004 */ sllv $s4, $t5, $t4 /* 038E88 7F004318 28410002 */ slti $at, $v0, 2 /* 038E8C 7F00431C 14200007 */ bnez $at, .L7F00433C /* 038E90 7F004320 00000000 */ nop -/* 038E94 7F004324 0FC26C01 */ jal get_num_players +/* 038E94 7F004324 0FC26C01 */ jal getPlayerCount /* 038E98 7F004328 00000000 */ nop /* 038E9C 7F00432C 244E0014 */ addiu $t6, $v0, 0x14 /* 038EA0 7F004330 240F0001 */ li $t7, 1 @@ -4788,7 +4788,7 @@ obj_03_expand: /* 0392D8 7F004768 100000E8 */ b other_obj_expand /* 0392DC 7F00476C 00000000 */ nop ammo_box_expand: -/* 0392E0 7F004770 0FC26C01 */ jal get_num_players +/* 0392E0 7F004770 0FC26C01 */ jal getPlayerCount /* 0392E4 7F004774 24100001 */ li $s0, 1 /* 0392E8 7F004778 28410002 */ slti $at, $v0, 2 /* 0392EC 7F00477C 1420000E */ bnez $at, .L7F0047B8 @@ -5092,7 +5092,7 @@ other_obj_expand: /* 03973C 7F004BCC 0FC1B51A */ jal set_obj_instance_controller_scale /* 039740 7F004BD0 8C850014 */ lw $a1, 0x14($a0) /* 039744 7F004BD4 8E440010 */ lw $a0, 0x10($s2) -/* 039748 7F004BD8 0FC0EA29 */ jal sub_GAME_7F03A5A4 +/* 039748 7F004BD8 0FC0EA29 */ jal attachNewChild /* 03974C 7F004BDC 8E050010 */ lw $a1, 0x10($s0) /* 039750 7F004BE0 10000084 */ b .L7F004DF4 /* 039754 7F004BE4 00000000 */ nop diff --git a/src/game/radar.c b/src/game/radar.c index 6f7b6e9..6e855ac 100644 --- a/src/game/radar.c +++ b/src/game/radar.c @@ -37,7 +37,7 @@ glabel display_red_blue_on_radar /* 0FAC04 7F0C60D4 AFA40088 */ sw $a0, 0x88($sp) /* 0FAC08 7F0C60D8 0FC26C54 */ jal get_cur_playernum /* 0FAC0C 7F0C60DC 0040A025 */ move $s4, $v0 -/* 0FAC10 7F0C60E0 0FC26919 */ jal get_num_players +/* 0FAC10 7F0C60E0 0FC26919 */ jal getPlayerCount /* 0FAC14 7F0C60E4 AFA20070 */ sw $v0, 0x70($sp) /* 0FAC18 7F0C60E8 24010001 */ li $at, 1 /* 0FAC1C 7F0C60EC 14410003 */ bne $v0, $at, .L7F0C60FC @@ -65,14 +65,14 @@ glabel display_red_blue_on_radar /* 0FAC68 7F0C6138 10000113 */ b .L7F0C6588 /* 0FAC6C 7F0C613C 8FA20088 */ lw $v0, 0x88($sp) .L7F0C6140: -/* 0FAC70 7F0C6140 0C001145 */ jal get_video2_settings_ulx +/* 0FAC70 7F0C6140 0C001145 */ jal viGetViewLeft /* 0FAC74 7F0C6144 00000000 */ nop /* 0FAC78 7F0C6148 00028400 */ sll $s0, $v0, 0x10 /* 0FAC7C 7F0C614C 0010C403 */ sra $t8, $s0, 0x10 -/* 0FAC80 7F0C6150 0C001127 */ jal get_video2_settings_width +/* 0FAC80 7F0C6150 0C001127 */ jal viGetViewWidth /* 0FAC84 7F0C6154 03008025 */ move $s0, $t8 /* 0FAC88 7F0C6158 0050A821 */ addu $s5, $v0, $s0 -/* 0FAC8C 7F0C615C 0C001149 */ jal get_video2_settings_uly +/* 0FAC8C 7F0C615C 0C001149 */ jal viGetViewTop /* 0FAC90 7F0C6160 26B5FFD7 */ addiu $s5, $s5, -0x29 /* 0FAC94 7F0C6164 8FB90074 */ lw $t9, 0x74($sp) /* 0FAC98 7F0C6168 2456001A */ addiu $s6, $v0, 0x1a @@ -217,10 +217,10 @@ glabel display_red_blue_on_radar /* 0FAEA8 7F0C6378 8FAA0070 */ lw $t2, 0x70($sp) .L7F0C637C: /* 0FAEAC 7F0C637C 00135880 */ sll $t3, $s3, 2 -/* 0FAEB0 7F0C6380 3C048008 */ lui $a0, %hi(ptr_BONDdata_p1) +/* 0FAEB0 7F0C6380 3C048008 */ lui $a0, %hi(players) /* 0FAEB4 7F0C6384 126A007A */ beq $s3, $t2, .L7F0C6570 /* 0FAEB8 7F0C6388 008B2021 */ addu $a0, $a0, $t3 -/* 0FAEBC 7F0C638C 8C849EE0 */ lw $a0, %lo(ptr_BONDdata_p1)($a0) +/* 0FAEBC 7F0C638C 8C849EE0 */ lw $a0, %lo(players)($a0) /* 0FAEC0 7F0C6390 8C8C00D8 */ lw $t4, 0xd8($a0) /* 0FAEC4 7F0C6394 55800077 */ bnezl $t4, .L7F0C6574 /* 0FAEC8 7F0C6398 8FB80074 */ lw $t8, 0x74($sp) diff --git a/src/game/stan.c b/src/game/stan.c index 2fb0fb2..dc5ded1 100644 --- a/src/game/stan.c +++ b/src/game/stan.c @@ -1,10 +1,20 @@ #include "ultra64.h" +#include "game/stan.h" +#include "structs.h" +#include "game/bg.h" // bss -//CODE.bss:8007B120 -s32 clippingfile; -//CODE.bss:8007B124 -s32 ptr_firstroom; +struct StanPrefixRecord { + //CODE.bss:8007B120 + s32 clippingfile; + //CODE.bss:8007B124 + struct StandTile* ptr_firstroom; // read as offset 4, hence the struct +}; + +struct StanPrefixRecord stan_prefix; + + + //CODE.bss:8007B128 s32 dword_CODE_bss_8007B128; //CODE.bss:8007B12C @@ -25,40 +35,42 @@ s32 dword_CODE_bss_8007B358[0x1a1]; s32 dword_CODE_bss_8007B9DC; //CODE.bss:8007B9E0 s32 dword_CODE_bss_8007B9E0; + + + +// All relating to a saved collision, but not one struct //CODE.bss:8007B9E4 -s32 dword_CODE_bss_8007B9E4; +struct StandTile* stanSavedColl_tile; //CODE.bss:8007B9E8 -s32 dword_CODE_bss_8007B9E8; +s32 stanSavedColl_pointI; //CODE.bss:8007B9EC -s32 dword_CODE_bss_8007B9EC; +s32 stanSavedColl_unknown; //CODE.bss:8007B9F0 -f32 flt_CODE_bss_8007B9F0; -//CODE.bss:8007B9F4 -f32 flt_CODE_bss_8007B9F4; +struct float2 stanSavedColl_pntA; //CODE.bss:8007B9F8 -f32 flt_CODE_bss_8007B9F8; -//CODE.bss:8007B9FC -f32 flt_CODE_bss_8007B9FC; +struct float2 stanSavedColl_pntB; //CODE.bss:8007BA00 -f32 flt_CODE_bss_8007BA00; +f32 stanSavedColl_someMin; //CODE.bss:8007BA04 -s32 dword_CODE_bss_8007BA04; +s32 stanSavedColl_posData; + + //CODE.bss:8007BA08 s32 dword_CODE_bss_8007BA08; //CODE.bss:8007BA0C s32 dword_CODE_bss_8007BA0C; //CODE.bss:8007BA10 -char dword_CODE_bss_8007BA10[0x580]; +struct StandTile* bfsTileStack[352]; // data //D:80040F30 -s32 D_80040F30[] = {0x8D8604C5, 0x9DA40000, 0, 0}; +u8 D_80040F30[] = {0x8D, 0x86, 0x04, 0xC5, 0x9D, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; s32 stan_c_debug_notice_list_entry = 0; //D:80040F44 -f32 D_80040F44 = 1.0; +f32 level_scale = 1.0; //D:80040F48 -f32 D_80040F48 = 1.0; +f32 inv_level_scale = 1.0; //D:80040F4C u8 list_of_tilesizes[] = { 0x20,0x20,0x20,0x20, @@ -66,7 +78,7 @@ u8 list_of_tilesizes[] = { 0x48,0x50,0x58,0x00 }; //D:80040F58 -s32 base_ptr_connection_vals = 0; +s32 standTileStart = 0; //D:80040F5C s32 ptr_firstroom_0 = 0; //D:80040F60 @@ -273,11 +285,11 @@ loop_1: goto loop_1; } // Node 2 - if (*clippingfile->unk4 != 0) + if (*stan_prefix.ptr_firstroom != 0) { // Node 3 phi_a1 = 0xff; - phi_a0 = clippingfile->unk4; + phi_a0 = stan_prefix.ptr_firstroom; phi_a2 = 0xff; loop_4: // Node 4 @@ -397,8 +409,8 @@ glabel sub_GAME_7F0AF038 /* 0E3BC4 7F0AF094 AC60FFF8 */ sw $zero, -8($v1) /* 0E3BC8 7F0AF098 1462FFFB */ bne $v1, $v0, .L7F0AF088 /* 0E3BCC 7F0AF09C AC60FFFC */ sw $zero, -4($v1) -/* 0E3BD0 7F0AF0A0 3C0E8008 */ lui $t6, %hi(clippingfile) -/* 0E3BD4 7F0AF0A4 8DCEB120 */ lw $t6, %lo(clippingfile)($t6) +/* 0E3BD0 7F0AF0A0 3C0E8008 */ lui $t6, %hi(stan_prefix) +/* 0E3BD4 7F0AF0A4 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) /* 0E3BD8 7F0AF0A8 3C0D8004 */ lui $t5, %hi(list_of_tilesizes) /* 0E3BDC 7F0AF0AC 25AD0F4C */ addiu $t5, %lo(list_of_tilesizes) # addiu $t5, $t5, 0xf4c /* 0E3BE0 7F0AF0B0 8DC40004 */ lw $a0, 4($t6) @@ -540,8 +552,8 @@ glabel sub_GAME_7F0AF20C /* 0E3D84 7F0AF254 AFA500CC */ sw $a1, 0xcc($sp) /* 0E3D88 7F0AF258 AFA600D0 */ sw $a2, 0xd0($sp) /* 0E3D8C 7F0AF25C AFA0009C */ sw $zero, 0x9c($sp) -/* 0E3D90 7F0AF260 3C018004 */ lui $at, %hi(D_80040F44) -/* 0E3D94 7F0AF264 C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) +/* 0E3D90 7F0AF260 3C018004 */ lui $at, %hi(level_scale) +/* 0E3D94 7F0AF264 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) /* 0E3D98 7F0AF268 C4840000 */ lwc1 $f4, ($a0) /* 0E3D9C 7F0AF26C 0080A025 */ move $s4, $a0 /* 0E3DA0 7F0AF270 3C178004 */ lui $s7, %hi(list_of_tilesizes) @@ -671,7 +683,7 @@ glabel sub_GAME_7F0AF20C /* 0E3F6C 7F0AF43C 02202025 */ move $a0, $s1 /* 0E3F70 7F0AF440 44060000 */ mfc1 $a2, $f0 /* 0E3F74 7F0AF444 44071000 */ mfc1 $a3, $f2 -/* 0E3F78 7F0AF448 0FC2BF9C */ jal sub_GAME_7F0AFE70 +/* 0E3F78 7F0AF448 0FC2BF9C */ jal getShortest2dDispToInfTripleEdge /* 0E3F7C 7F0AF44C 02002825 */ move $a1, $s0 /* 0E3F80 7F0AF450 4614003C */ c.lt.s $f0, $f20 /* 0E3F84 7F0AF454 26100001 */ addiu $s0, $s0, 1 @@ -691,7 +703,7 @@ glabel sub_GAME_7F0AF20C /* 0E3FB8 7F0AF488 86220006 */ lh $v0, 6($s1) /* 0E3FBC 7F0AF48C 1240000E */ beqz $s2, .L7F0AF4C8 /* 0E3FC0 7F0AF490 02202025 */ move $a0, $s1 -/* 0E3FC4 7F0AF494 0FC2BE49 */ jal sub_GAME_7F0AF924 +/* 0E3FC4 7F0AF494 0FC2BE49 */ jal getTileMidPoint /* 0E3FC8 7F0AF498 03C02825 */ move $a1, $fp /* 0E3FCC 7F0AF49C AFB100A0 */ sw $s1, 0xa0($sp) /* 0E3FD0 7F0AF4A0 C6900008 */ lwc1 $f16, 8($s4) @@ -782,33 +794,33 @@ glabel sub_GAME_7F0AF20C #ifdef NONMATCHING void stanLoadFile(void *arg0) { stanLoaded = 1; - clippingfile = arg0; - base_ptr_connection_vals = (s32) (arg0->unk4 + -0x80); + stan_prefix.clippingfile = arg0; + standTileStart = (s32) (arg0->unk4 + -0x80); if (check_token(1, "-stanlinelog") != 0) { stanlinelog_flag = 1; } sub_GAME_7F0AF038(); - sub_GAME_7F0B2950(1.0); + setLevelScale(1.0); } #else GLOBAL_ASM( .text glabel stanLoadFile -/* 0E40E8 7F0AF5B8 3C028008 */ lui $v0, %hi(clippingfile) +/* 0E40E8 7F0AF5B8 3C028008 */ lui $v0, %hi(stan_prefix) /* 0E40EC 7F0AF5BC 240E0001 */ li $t6, 1 /* 0E40F0 7F0AF5C0 3C018004 */ lui $at, %hi(stanLoaded) -/* 0E40F4 7F0AF5C4 2442B120 */ addiu $v0, %lo(clippingfile) # addiu $v0, $v0, -0x4ee0 +/* 0E40F4 7F0AF5C4 2442B120 */ addiu $v0, %lo(stan_prefix) # addiu $v0, $v0, -0x4ee0 /* 0E40F8 7F0AF5C8 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0E40FC 7F0AF5CC AC2E0FB0 */ sw $t6, %lo(stanLoaded)($at) /* 0E4100 7F0AF5D0 AFBF0014 */ sw $ra, 0x14($sp) /* 0E4104 7F0AF5D4 AC440000 */ sw $a0, ($v0) /* 0E4108 7F0AF5D8 8C980004 */ lw $t8, 4($a0) -/* 0E410C 7F0AF5DC 3C018004 */ lui $at, %hi(base_ptr_connection_vals) +/* 0E410C 7F0AF5DC 3C018004 */ lui $at, %hi(standTileStart) /* 0E4110 7F0AF5E0 3C058006 */ lui $a1, %hi(aStanlinelog) /* 0E4114 7F0AF5E4 2719FF80 */ addiu $t9, $t8, -0x80 -/* 0E4118 7F0AF5E8 AC390F58 */ sw $t9, %lo(base_ptr_connection_vals)($at) +/* 0E4118 7F0AF5E8 AC390F58 */ sw $t9, %lo(standTileStart)($at) /* 0E411C 7F0AF5EC 24A585BC */ addiu $a1, %lo(aStanlinelog) # addiu $a1, $a1, -0x7a44 /* 0E4120 7F0AF5F0 0C0029A8 */ jal check_token /* 0E4124 7F0AF5F4 24040001 */ li $a0, 1 @@ -821,7 +833,7 @@ glabel stanLoadFile /* 0E413C 7F0AF60C 00000000 */ nop /* 0E4140 7F0AF610 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0E4144 7F0AF614 44816000 */ mtc1 $at, $f12 -/* 0E4148 7F0AF618 0FC2CA54 */ jal sub_GAME_7F0B2950 +/* 0E4148 7F0AF618 0FC2CA54 */ jal setLevelScale /* 0E414C 7F0AF61C 00000000 */ nop /* 0E4150 7F0AF620 8FBF0014 */ lw $ra, 0x14($sp) /* 0E4154 7F0AF624 27BD0018 */ addiu $sp, $sp, 0x18 @@ -919,7 +931,7 @@ loop_5: if ((temp_v0 >> 4) != 0) { // Node 6 - temp_v1 = ((temp_v0 * 8) + base_ptr_connection_vals); + temp_v1 = ((temp_v0 * 8) + standTileStart); phi_a1_2 = phi_a1_3; phi_s2_3 = phi_s2_2; phi_s1_2 = phi_s1_4; @@ -973,12 +985,12 @@ glabel sub_GAME_7F0AF638 /* 0E4188 7F0AF658 AFB30020 */ sw $s3, 0x20($sp) /* 0E418C 7F0AF65C AFB00014 */ sw $s0, 0x14($sp) /* 0E4190 7F0AF660 AFA5003C */ sw $a1, 0x3c($sp) -/* 0E4194 7F0AF664 3C168004 */ lui $s6, %hi(base_ptr_connection_vals) +/* 0E4194 7F0AF664 3C168004 */ lui $s6, %hi(standTileStart) /* 0E4198 7F0AF668 30B400FF */ andi $s4, $a1, 0xff /* 0E419C 7F0AF66C 0000B825 */ move $s7, $zero /* 0E41A0 7F0AF670 ACC40000 */ sw $a0, ($a2) /* 0E41A4 7F0AF674 24110001 */ li $s1, 1 -/* 0E41A8 7F0AF678 26D60F58 */ addiu $s6, %lo(base_ptr_connection_vals) # addiu $s6, $s6, 0xf58 +/* 0E41A8 7F0AF678 26D60F58 */ addiu $s6, %lo(standTileStart) # addiu $s6, $s6, 0xf58 /* 0E41AC 7F0AF67C 24D20004 */ addiu $s2, $a2, 4 /* 0E41B0 7F0AF680 8E53FFFC */ lw $s3, -4($s2) .L7F0AF684: @@ -1049,33 +1061,49 @@ glabel sub_GAME_7F0AF638 #ifdef NONMATCHING -s32 sub_GAME_7F0AF760(void *arg0) { - u32 sp0; - s32 sp8; - s32 sp10; - s32 sp14; - s32 sp1C; - void *temp_t1; - void *temp_t0; - void *temp_t2; - s32 temp_t5; - s32 temp_t8; - u32 temp_t8_2; - // Node 0 - temp_t1 = (arg0 + ((((s32) arg0->unk6 >> 8) & 0xf) * 8)); - temp_t0 = (arg0 + ((((s32) arg0->unk6 >> 4) & 0xf) * 8)); - sp14 = (s32) (temp_t0->unk8 - temp_t1->unk8); - temp_t2 = (arg0 + ((arg0->unk6 & 0xf) * 8)); - sp1C = (s32) (temp_t0->unkC - temp_t1->unkC); - temp_t5 = (temp_t2->unk8 - temp_t1->unk8); - sp8 = temp_t5; - temp_t8 = (temp_t2->unkC - temp_t1->unkC); - sp10 = temp_t8; - temp_t8_2 = ((sp1C * temp_t5) - (temp_t8 * sp14)); - sp0 = temp_t8_2; - return (temp_t8_2 < 1U); +// A decent start, mostly my code isn't saving the AB.x and AB.z to the stack + +struct int3 { + s32 x; + s32 y; + s32 z; +}; + +s32 sub_GAME_7F0AF760(struct StandTile *tile) { + // Perhaps it's a coincidence but there is a gap between their uses of x and z + // Suggests there could be an unused y, which makes sense when their points are 3D + + u32 iA; + u32 iB; + u32 iC; + + s32 crossProduct; + + struct int3 AB; + struct int3 AC; + + + iA = (tile->hdrTail >> 0x8 & 0xf); // t1 + iB = (tile->hdrTail >> 0x4 & 0xf); // t0 + // Actually saving iC somewhere has prevented it being computed early + iC = (tile->hdrTail & 0xf); // t2 + + AB.x = (tile->points[iB].x - tile->points[iA].x); + AB.y = 0; + AB.z = (tile->points[iB].z - tile->points[iA].z); + + + AC.x = (tile->points[iC].x - tile->points[iA].x); + AC.y = 0; + AC.z = (tile->points[iC].z - tile->points[iA].z); + + crossProduct = ((AB.z * AC.x) - (AB.x * AC.z)); // potential overflow. + + return (crossProduct == 0); } + + #else GLOBAL_ASM( .text @@ -1132,14 +1160,50 @@ glabel sub_GAME_7F0AF760 #ifdef NONMATCHING void sub_GAME_7F0AF808(void) { +// Still quite a long way off. +struct StandTile* sub_GAME_7F0AF808(float f1,float f2,float f3,float f4) +{ + // 'findSomeTile' atm + // It seems a silly thing to be doing during runtime. + + struct StandTile* tile; + struct StandTile* tileStack[2]; + + tile = stan_prefix.ptr_firstroom; + + // this test may be reading a field but it could well look like this, + // since 0 signals that there is no more data, so 'tile' isn't really a struct StandTile* + + while (*(u32*)tile != 0) + { + tileStack[0] = tile; + + if ( + (!sub_GAME_7F0AF760(tile)) && + (isPointInsideTriStandTileUnscaled_Maybe(tile,f1,f3) != 0) && + (FUN_7f0b20d0(tileStack,f1,f3,f4) != 0) && + (tile == tileStack[0]) && + (getCrossProductY_and_distToPlaneMaybe(tile,f1,f3) < f2) + ) + { + return tile; + } + + tile = (struct StandTile*) ( + ((s32)tile) + list_of_tilesizes[STAN_POINT_COUNT(tile)] + ); + + } + + return (struct StandTile*)0x0; } #else GLOBAL_ASM( .text glabel sub_GAME_7F0AF808 /* 0E4338 7F0AF808 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0E433C 7F0AF80C 3C0E8008 */ lui $t6, %hi(clippingfile) -/* 0E4340 7F0AF810 8DCEB120 */ lw $t6, %lo(clippingfile)($t6) +/* 0E433C 7F0AF80C 3C0E8008 */ lui $t6, %hi(stan_prefix) +/* 0E4340 7F0AF810 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) /* 0E4344 7F0AF814 AFBF0044 */ sw $ra, 0x44($sp) /* 0E4348 7F0AF818 AFB20040 */ sw $s2, 0x40($sp) /* 0E434C 7F0AF81C AFB1003C */ sw $s1, 0x3c($sp) @@ -1166,7 +1230,7 @@ glabel sub_GAME_7F0AF808 /* 0E439C 7F0AF86C 86020006 */ lh $v0, 6($s0) /* 0E43A0 7F0AF870 4405A000 */ mfc1 $a1, $f20 /* 0E43A4 7F0AF874 4406B000 */ mfc1 $a2, $f22 -/* 0E43A8 7F0AF878 0FC2C0DB */ jal sub_GAME_7F0B036C +/* 0E43A8 7F0AF878 0FC2C0DB */ jal isPointInsideTriStandTileUnscaled_Maybe /* 0E43AC 7F0AF87C 02002025 */ move $a0, $s0 /* 0E43B0 7F0AF880 50400015 */ beql $v0, $zero, .L7F0AF8D8 /* 0E43B4 7F0AF884 86020006 */ lh $v0, 6($s0) @@ -1221,24 +1285,36 @@ glabel sub_GAME_7F0AF808 #ifdef NONMATCHING -f32 sub_GAME_7F0AF924(void *arg0, void *arg1) { - void *temp_t2; - void *temp_t1; - void *temp_t0; +// 2 instructions swapped, regalloc. +// I've tried all orderings of the A,B,C assignments, both as indices and as pointers to StandTilePoints +// Summing the x,y,z components first just makes more regalloc issues +// Placing the macros directly in the indexing doesn't help either. +// Making midPnt a float* did nothing. - // Node 0 - temp_t2 = (arg0 + ((((s32) arg0->unk6 >> 4) & 0xf) * 8)); - temp_t1 = (arg0 + ((((s32) arg0->unk6 >> 8) & 0xf) * 8)); - temp_t0 = (arg0 + ((arg0->unk6 & 0xf) * 8)); - *arg1 = (f32) ((((f32) temp_t0->unk8 + ((f32) temp_t1->unk8 + (f32) temp_t2->unk8)) / 3.0f) * D_80040F48); - arg1->unk4 = (f32) ((((f32) temp_t0->unkA + ((f32) temp_t1->unkA + (f32) temp_t2->unkA)) / 3.0f) * D_80040F48); - arg1->unk8 = (f32) ((((f32) temp_t0->unkC + ((f32) temp_t1->unkC + (f32) temp_t2->unkC)) / 3.0f) * D_80040F48); - return 3.0f; +// I'm out of ideas. +void getTileMidPoint(struct StandTile *tile, struct float3 *midPnt) +{ + short headerTail; + // may be RGB + s32 indexA; + s32 indexB; + s32 indexC; + + indexA = STAN_TRIPLE_TO_PNT_INDEX(tile, 0); + indexB = STAN_TRIPLE_TO_PNT_INDEX(tile, 1); + indexC = STAN_TRIPLE_TO_PNT_INDEX(tile, 2); + + midPnt->x = ((float)tile->points[indexA].x + tile->points[indexB].x + tile->points[indexC].x) / 3 * inv_level_scale; + midPnt->y = ((float)tile->points[indexA].y + tile->points[indexB].y + tile->points[indexC].y) / 3 * inv_level_scale; + midPnt->z = ((float)tile->points[indexA].z + tile->points[indexB].z + tile->points[indexC].z) / 3 * inv_level_scale; + + return; } + #else GLOBAL_ASM( .text -glabel sub_GAME_7F0AF924 +glabel getTileMidPoint /* 0E4454 7F0AF924 84870006 */ lh $a3, 6($a0) /* 0E4458 7F0AF928 3C014040 */ li $at, 0x40400000 # 3.000000 /* 0E445C 7F0AF92C 44810000 */ mtc1 $at, $f0 @@ -1259,9 +1335,9 @@ glabel sub_GAME_7F0AF924 /* 0E4498 7F0AF968 008D4021 */ addu $t0, $a0, $t5 /* 0E449C 7F0AF96C 850C0008 */ lh $t4, 8($t0) /* 0E44A0 7F0AF970 468021A0 */ cvt.s.w $f6, $f4 -/* 0E44A4 7F0AF974 3C0B8004 */ lui $t3, %hi(D_80040F48) +/* 0E44A4 7F0AF974 3C0B8004 */ lui $t3, %hi(inv_level_scale) /* 0E44A8 7F0AF978 448C9000 */ mtc1 $t4, $f18 -/* 0E44AC 7F0AF97C 256B0F48 */ addiu $t3, %lo(D_80040F48) # addiu $t3, $t3, 0xf48 +/* 0E44AC 7F0AF97C 256B0F48 */ addiu $t3, %lo(inv_level_scale) # addiu $t3, $t3, 0xf48 /* 0E44B0 7F0AF980 468042A0 */ cvt.s.w $f10, $f8 /* 0E44B4 7F0AF984 46809120 */ cvt.s.w $f4, $f18 /* 0E44B8 7F0AF988 460A3400 */ add.s $f16, $f6, $f10 @@ -1309,22 +1385,27 @@ glabel sub_GAME_7F0AF924 #ifdef NONMATCHING -f32 sub_GAME_7F0AFA1C(void *arg0, s32 arg1, void *arg2) { - f32 sp1C; - s32 temp_a3; - void *temp_v0; +// Saves a1 (tripleIndex) to the stack completely unnecessarily +// Otherwise just regalloc, but maybe that alone fixes it. +void getPointJustInsideOfTileTriple(struct StandTile* tile, s32 tripleIndex, struct float3* pnt) +{ + struct float3 midPoint; + s32 pntIndex; - // Node 0 - temp_a3 = ((s32) arg0->unk6 >> (8 - (arg1 * 4))); - temp_v0 = (arg0 + ((temp_a3 & 0xf) * 8)); - *arg2 = (f32) ((f32) temp_v0->unk8 * D_80040F48); - arg2->unk4 = (f32) ((f32) temp_v0->unkA * D_80040F48); - arg2->unk8 = (f32) ((f32) temp_v0->unkC * D_80040F48); - sub_GAME_7F0AF924(&sp1C, temp_a3); - *arg2 = (f32) ((sp1C * D_800585D8) + (D_800585DC * *arg2)); - arg2->unk4 = (f32) ((sp20 * D_800585D8) + (D_800585DC * arg2->unk4)); - arg2->unk8 = (f32) ((sp24 * D_800585D8) + (D_800585DC * arg2->unk8)); - return D_800585D8; + pntIndex = STAN_TRIPLE_TO_PNT_INDEX(tile, tripleIndex); + + pnt->x = tile->points[pntIndex].x * inv_level_scale; + pnt->y = tile->points[pntIndex].y * inv_level_scale; + pnt->z = tile->points[pntIndex].z * inv_level_scale; + + getTileMidPoint(tile,&midPoint); + + // 10% of the way from the actual tile point towards the tile's centre. + pnt->x = midPoint.x * 0.1f + pnt->x * 0.9f; + pnt->y = midPoint.y * 0.1f + pnt->y * 0.9f; + pnt->z = midPoint.z * 0.1f + pnt->z * 0.9f; + + return; } #else GLOBAL_ASM( @@ -1334,7 +1415,7 @@ glabel D_800585D8 glabel D_800585DC .word 0x3f666666 /*0.89999998*/ .text -glabel sub_GAME_7F0AFA1C +glabel getPointJustInsideOfTileTriple /* 0E454C 7F0AFA1C 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0E4550 7F0AFA20 AFBF0014 */ sw $ra, 0x14($sp) /* 0E4554 7F0AFA24 848E0006 */ lh $t6, 6($a0) @@ -1346,8 +1427,8 @@ glabel sub_GAME_7F0AFA1C /* 0E456C 7F0AFA3C 000848C0 */ sll $t1, $t0, 3 /* 0E4570 7F0AFA40 00891021 */ addu $v0, $a0, $t1 /* 0E4574 7F0AFA44 844A0008 */ lh $t2, 8($v0) -/* 0E4578 7F0AFA48 3C038004 */ lui $v1, %hi(D_80040F48) -/* 0E457C 7F0AFA4C 24630F48 */ addiu $v1, %lo(D_80040F48) # addiu $v1, $v1, 0xf48 +/* 0E4578 7F0AFA48 3C038004 */ lui $v1, %hi(inv_level_scale) +/* 0E457C 7F0AFA4C 24630F48 */ addiu $v1, %lo(inv_level_scale) # addiu $v1, $v1, 0xf48 /* 0E4580 7F0AFA50 448A2000 */ mtc1 $t2, $f4 /* 0E4584 7F0AFA54 C4680000 */ lwc1 $f8, ($v1) /* 0E4588 7F0AFA58 27A5001C */ addiu $a1, $sp, 0x1c @@ -1368,7 +1449,7 @@ glabel sub_GAME_7F0AFA1C /* 0E45C4 7F0AFA94 468042A0 */ cvt.s.w $f10, $f8 /* 0E45C8 7F0AFA98 46105482 */ mul.s $f18, $f10, $f16 /* 0E45CC 7F0AFA9C E4D20008 */ swc1 $f18, 8($a2) -/* 0E45D0 7F0AFAA0 0FC2BE49 */ jal sub_GAME_7F0AF924 +/* 0E45D0 7F0AFAA0 0FC2BE49 */ jal getTileMidPoint /* 0E45D4 7F0AFAA4 AFA60030 */ sw $a2, 0x30($sp) /* 0E45D8 7F0AFAA8 3C018006 */ lui $at, %hi(D_800585D8) /* 0E45DC 7F0AFAAC C42085D8 */ lwc1 $f0, %lo(D_800585D8)($at) @@ -1407,20 +1488,14 @@ glabel sub_GAME_7F0AFA1C #ifdef NONMATCHING -f32 sub_GAME_7F0AFB1C(void *arg0, void *arg1) { - f32 sp4; - f32 sp8; - f32 spC; - f32 temp_f18; - f32 temp_f8; - - // Node 0 - sp4 = (f32) (*arg1 - *arg0); - temp_f18 = (arg1->unk4 - arg0->unk4); - sp8 = temp_f18; - temp_f8 = (arg1->unk8 - arg0->unk8); - spC = temp_f8; - return ((temp_f8 * temp_f8) + ((sp4 * sp4) + (temp_f18 * temp_f18))); +// Missing addiu sp, sp, -0x10 : I can't get it to use the stack at all. +float sub_GAME_7F0AFB1C(struct float3 *p,struct float3 *q) +{ + float xDiff = q->x - p->x; + float yDiff = q->y - p->y; + float zDiff = q->z - p->z; + + return xDiff*xDiff + yDiff*yDiff + zDiff*zDiff; } #else GLOBAL_ASM( @@ -1479,8 +1554,8 @@ glabel sub_GAME_7F0AFB78 /* 0E46D8 7F0AFBA8 F7B40018 */ sdc1 $f20, 0x18($sp) /* 0E46DC 7F0AFBAC AFA00078 */ sw $zero, 0x78($sp) /* 0E46E0 7F0AFBB0 C4840000 */ lwc1 $f4, ($a0) -/* 0E46E4 7F0AFBB4 3C0E8008 */ lui $t6, %hi(clippingfile) -/* 0E46E8 7F0AFBB8 8DCEB120 */ lw $t6, %lo(clippingfile)($t6) +/* 0E46E4 7F0AFBB4 3C0E8008 */ lui $t6, %hi(stan_prefix) +/* 0E46E8 7F0AFBB8 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) /* 0E46EC 7F0AFBBC E7A40064 */ swc1 $f4, 0x64($sp) /* 0E46F0 7F0AFBC0 C4A60000 */ lwc1 $f6, ($a1) /* 0E46F4 7F0AFBC4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 @@ -1514,13 +1589,13 @@ glabel sub_GAME_7F0AFB78 /* 0E475C 7F0AFC2C 16160006 */ bne $s0, $s6, .L7F0AFC48 /* 0E4760 7F0AFC30 02202025 */ move $a0, $s1 /* 0E4764 7F0AFC34 02202025 */ move $a0, $s1 -/* 0E4768 7F0AFC38 0FC2BE49 */ jal sub_GAME_7F0AF924 +/* 0E4768 7F0AFC38 0FC2BE49 */ jal getTileMidPoint /* 0E476C 7F0AFC3C 02402825 */ move $a1, $s2 /* 0E4770 7F0AFC40 10000005 */ b .L7F0AFC58 /* 0E4774 7F0AFC44 4407B000 */ mfc1 $a3, $f22 .L7F0AFC48: /* 0E4778 7F0AFC48 02002825 */ move $a1, $s0 -/* 0E477C 7F0AFC4C 0FC2BE87 */ jal sub_GAME_7F0AFA1C +/* 0E477C 7F0AFC4C 0FC2BE87 */ jal getPointJustInsideOfTileTriple /* 0E4780 7F0AFC50 02403025 */ move $a2, $s2 /* 0E4784 7F0AFC54 4407B000 */ mfc1 $a3, $f22 .L7F0AFC58: @@ -1584,189 +1659,127 @@ glabel sub_GAME_7F0AFB78 +// Returns the shortest distance from (p_x,p_z) to the infinite extention of tile's index-th edge, projected into XZ. +// Where the edge is vertical (or degenerate) they just return the distance between the points. +float getShortest2dDispToInfTileEdge(struct StandTile *tile,s32 index,float p_x,float p_z) +{ + s32 nextIndex; + float edge_x; + float edge_z; + float edge_len; -#ifdef NONMATCHING -f32 sub_GAME_7F0AFD1C(void *arg0, s32 arg1, f32 arg2, f32 arg3) { - void *sp18; - void *sp1C; - f32 sp40; - s32 temp_hi; - void *temp_v0; - void *temp_v1; - f32 temp_f2; - f32 temp_f14; - ? temp_ret; - f32 temp_f0; - f32 temp_f2_2; + float v_x; + float v_z; + float crossProduct; - // Node 0 - temp_hi = ((s32) (arg1 + 1) % (s32) (((s32) arg0->unk6 >> 0xc) & 0xf)); - temp_v0 = (arg0 + (temp_hi * 8)); - temp_v1 = (arg0 + (arg1 * 8)); - temp_f2 = (f32) (temp_v0->unk8 - temp_v1->unk8); - temp_f14 = (f32) (temp_v0->unkC - temp_v1->unkC); - sp40 = temp_f2; - sp18 = temp_v1; - sp1C = temp_v0; - temp_ret = sqrtf(((temp_f2 * temp_f2) + (temp_f14 * temp_f14)), temp_f14, temp_hi); - if (temp_ret != 0.0f) - { - // Node 2 - // Node 3 - return ((((arg3 - (f32) temp_v1->unkC) * -temp_f2) + (sp3C * (arg2 - (f32) temp_v1->unk8))) / temp_ret); - } - // Node 1 - temp_f0 = (arg2 - (f32) temp_v0->unk8); - temp_f2_2 = (arg3 - (f32) temp_v0->unkC); - return ((((arg3 - (f32) temp_v1->unkC) * -temp_f2) + (sp3C * (arg2 - (f32) temp_v1->unk8))) / temp_ret); -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AFD1C -/* 0E484C 7F0AFD1C 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0E4850 7F0AFD20 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E4854 7F0AFD24 AFA60050 */ sw $a2, 0x50($sp) -/* 0E4858 7F0AFD28 AFA70054 */ sw $a3, 0x54($sp) -/* 0E485C 7F0AFD2C 848F0006 */ lh $t7, 6($a0) -/* 0E4860 7F0AFD30 24AE0001 */ addiu $t6, $a1, 1 -/* 0E4864 7F0AFD34 000548C0 */ sll $t1, $a1, 3 -/* 0E4868 7F0AFD38 000FC303 */ sra $t8, $t7, 0xc -/* 0E486C 7F0AFD3C 3319000F */ andi $t9, $t8, 0xf -/* 0E4870 7F0AFD40 01D9001A */ div $zero, $t6, $t9 -/* 0E4874 7F0AFD44 00003010 */ mfhi $a2 -/* 0E4878 7F0AFD48 000640C0 */ sll $t0, $a2, 3 -/* 0E487C 7F0AFD4C 00881021 */ addu $v0, $a0, $t0 -/* 0E4880 7F0AFD50 00891821 */ addu $v1, $a0, $t1 -/* 0E4884 7F0AFD54 846B0008 */ lh $t3, 8($v1) -/* 0E4888 7F0AFD58 844A0008 */ lh $t2, 8($v0) -/* 0E488C 7F0AFD5C 846F000C */ lh $t7, 0xc($v1) -/* 0E4890 7F0AFD60 844D000C */ lh $t5, 0xc($v0) -/* 0E4894 7F0AFD64 014B6023 */ subu $t4, $t2, $t3 -/* 0E4898 7F0AFD68 448C2000 */ mtc1 $t4, $f4 -/* 0E489C 7F0AFD6C 01AFC023 */ subu $t8, $t5, $t7 -/* 0E48A0 7F0AFD70 44983000 */ mtc1 $t8, $f6 -/* 0E48A4 7F0AFD74 468020A0 */ cvt.s.w $f2, $f4 -/* 0E48A8 7F0AFD78 17200002 */ bnez $t9, .L7F0AFD84 -/* 0E48AC 7F0AFD7C 00000000 */ nop -/* 0E48B0 7F0AFD80 0007000D */ break 7 -.L7F0AFD84: -/* 0E48B4 7F0AFD84 2401FFFF */ li $at, -1 -/* 0E48B8 7F0AFD88 17210004 */ bne $t9, $at, .L7F0AFD9C -/* 0E48BC 7F0AFD8C 3C018000 */ lui $at, 0x8000 -/* 0E48C0 7F0AFD90 15C10002 */ bne $t6, $at, .L7F0AFD9C -/* 0E48C4 7F0AFD94 00000000 */ nop -/* 0E48C8 7F0AFD98 0006000D */ break 6 -.L7F0AFD9C: -/* 0E48CC 7F0AFD9C 468033A0 */ cvt.s.w $f14, $f6 -/* 0E48D0 7F0AFDA0 46021202 */ mul.s $f8, $f2, $f2 -/* 0E48D4 7F0AFDA4 E7A20040 */ swc1 $f2, 0x40($sp) -/* 0E48D8 7F0AFDA8 AFA30018 */ sw $v1, 0x18($sp) -/* 0E48DC 7F0AFDAC AFA2001C */ sw $v0, 0x1c($sp) -/* 0E48E0 7F0AFDB0 460E7282 */ mul.s $f10, $f14, $f14 -/* 0E48E4 7F0AFDB4 E7AE003C */ swc1 $f14, 0x3c($sp) -/* 0E48E8 7F0AFDB8 0C007DF8 */ jal sqrtf -/* 0E48EC 7F0AFDBC 460A4300 */ add.s $f12, $f8, $f10 -/* 0E48F0 7F0AFDC0 44802000 */ mtc1 $zero, $f4 -/* 0E48F4 7F0AFDC4 8FA2001C */ lw $v0, 0x1c($sp) -/* 0E48F8 7F0AFDC8 8FA30018 */ lw $v1, 0x18($sp) -/* 0E48FC 7F0AFDCC 46040032 */ c.eq.s $f0, $f4 -/* 0E4900 7F0AFDD0 C7A20040 */ lwc1 $f2, 0x40($sp) -/* 0E4904 7F0AFDD4 C7AE003C */ lwc1 $f14, 0x3c($sp) -/* 0E4908 7F0AFDD8 C7B20050 */ lwc1 $f18, 0x50($sp) -/* 0E490C 7F0AFDDC 45000011 */ bc1f .L7F0AFE24 -/* 0E4910 7F0AFDE0 46000406 */ mov.s $f16, $f0 -/* 0E4914 7F0AFDE4 844E0008 */ lh $t6, 8($v0) -/* 0E4918 7F0AFDE8 8459000C */ lh $t9, 0xc($v0) -/* 0E491C 7F0AFDEC C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 0E4920 7F0AFDF0 448E3000 */ mtc1 $t6, $f6 -/* 0E4924 7F0AFDF4 44992000 */ mtc1 $t9, $f4 -/* 0E4928 7F0AFDF8 46803220 */ cvt.s.w $f8, $f6 -/* 0E492C 7F0AFDFC 468021A0 */ cvt.s.w $f6, $f4 -/* 0E4930 7F0AFE00 46089001 */ sub.s $f0, $f18, $f8 -/* 0E4934 7F0AFE04 46065081 */ sub.s $f2, $f10, $f6 -/* 0E4938 7F0AFE08 46000202 */ mul.s $f8, $f0, $f0 -/* 0E493C 7F0AFE0C 00000000 */ nop -/* 0E4940 7F0AFE10 46021102 */ mul.s $f4, $f2, $f2 -/* 0E4944 7F0AFE14 0C007DF8 */ jal sqrtf -/* 0E4948 7F0AFE18 46044300 */ add.s $f12, $f8, $f4 -/* 0E494C 7F0AFE1C 10000011 */ b .L7F0AFE64 -/* 0E4950 7F0AFE20 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0AFE24: -/* 0E4954 7F0AFE24 8468000C */ lh $t0, 0xc($v1) -/* 0E4958 7F0AFE28 C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 0E495C 7F0AFE2C 84690008 */ lh $t1, 8($v1) -/* 0E4960 7F0AFE30 44883000 */ mtc1 $t0, $f6 -/* 0E4964 7F0AFE34 00000000 */ nop -/* 0E4968 7F0AFE38 46803220 */ cvt.s.w $f8, $f6 -/* 0E496C 7F0AFE3C 46001187 */ neg.s $f6, $f2 -/* 0E4970 7F0AFE40 46085101 */ sub.s $f4, $f10, $f8 -/* 0E4974 7F0AFE44 44894000 */ mtc1 $t1, $f8 -/* 0E4978 7F0AFE48 46062282 */ mul.s $f10, $f4, $f6 -/* 0E497C 7F0AFE4C 46804120 */ cvt.s.w $f4, $f8 -/* 0E4980 7F0AFE50 46049181 */ sub.s $f6, $f18, $f4 -/* 0E4984 7F0AFE54 46067202 */ mul.s $f8, $f14, $f6 -/* 0E4988 7F0AFE58 46085300 */ add.s $f12, $f10, $f8 -/* 0E498C 7F0AFE5C 46106003 */ div.s $f0, $f12, $f16 -/* 0E4990 7F0AFE60 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0AFE64: -/* 0E4994 7F0AFE64 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0E4998 7F0AFE68 03E00008 */ jr $ra -/* 0E499C 7F0AFE6C 00000000 */ nop -) -#endif + // 3 unused. We use 2 for the points to make our code cleaner, + // though it seems much more likely that the variables were used in the else clause. + struct StandTilePoint* currPnt; + struct StandTilePoint* nextPnt; + float UNUSED; + // Omiting the '& 0xF' is equivalent, but keeping it is necessary to match. + // Perhaps the structure isn't correct but this seems much cleaner than doing an explicit >> 0xC. + nextIndex = (index + 1) % STAN_POINT_COUNT(tile); + nextPnt = &tile->points[nextIndex]; + currPnt = &tile->points[index]; + edge_x = (float)(nextPnt->x - currPnt->x); + edge_z = (float)(nextPnt->z - currPnt->z); + edge_len = sqrtf(edge_x * edge_x + edge_z * edge_z); - -#ifdef NONMATCHING -f32 sub_GAME_7F0AFE70(void *arg0, s32 arg1, f32 arg2, f32 arg3) { - f32 sp40; - s32 temp_a1; - void *temp_a2; - void *temp_a0; - f32 temp_f2; - f32 temp_f14; - ? temp_ret; - f32 temp_f0; - f32 temp_f2_2; - s32 phi_v1; - - // Node 0 - if (arg1 != 2) - { - // Node 1 - phi_v1 = (arg1 + 1); + if (edge_len == 0) { + // Degenerate case, edge is vertical + // They just return the distance between the points, which is sensible and the correct value in 3 dimensions. + v_x = p_x - (float)tile->points[nextIndex].x; + v_z = p_z - (float)tile->points[nextIndex].z; + return sqrtf(v_x * v_x + v_z * v_z); } else { - // Node 2 - phi_v1 = 0; + // | (AP x AB) / ||AB|| | = ||PA|| sin(a), + // so we're returning the SIGNED displacement + crossProduct = ( + edge_z * (p_x - (float)tile->points[index].x) + + + -edge_x * (p_z - (float)tile->points[index].z) + ); + return crossProduct / edge_len; } - // Node 3 - temp_a1 = ((s32) arg0->unk6 >> (8 - (arg1 * 4))); - temp_a2 = (arg0 + ((temp_a1 & 0xf) * 8)); - temp_a0 = (arg0 + ((((s32) arg0->unk6 >> (8 - (phi_v1 * 4))) & 0xf) * 8)); - temp_f2 = (f32) (temp_a0->unk8 - temp_a2->unk8); - temp_f14 = (f32) (temp_a0->unkC - temp_a2->unkC); - sp40 = temp_f2; - temp_ret = sqrtf(((temp_f2 * temp_f2) + (temp_f14 * temp_f14)), temp_f14, temp_a0, temp_a1, temp_a2, arg0); - if (temp_ret != 0.0f) - { - // Node 5 - // Node 6 - return ((((arg3 - (f32) sp18->unkC) * -temp_f2) + (sp3C * (arg2 - (f32) sp18->unk8))) / temp_ret); - } - // Node 4 - temp_f0 = (arg2 - (f32) sp1C->unk8); - temp_f2_2 = (arg3 - (f32) sp1C->unkC); - return ((((arg3 - (f32) sp18->unkC) * -temp_f2) + (sp3C * (arg2 - (f32) sp18->unk8))) / temp_ret); + } + + +// Sig needed for caller matches. +float getShortest2dDispToInfTripleEdge(struct StandTile *tile,s32 start3index,float p_x,float p_z); + +#ifdef NONMATCHING +// Only regalloc incorrect essentially. Any change I make seems to make things much worse though, +// and my ability to reorder statements is very limited. + +// Similar to getShortest2dDispToInfTileEdge +// 2nd arg must be in {0,1,2} +// New name needed though: getShortest2dDispToInfTripleEdge +float getShortest2dDispToInfTripleEdge(struct StandTile *tile,s32 start3index,float p_x,float p_z) +{ + s32 end3index; // types seem correct, changing introduces more instructions + + float edge_x; // 0x40 (8) + float edge_z; // 0x3C + float edge_len; + + s32 currPntI; + s32 nextPntI; + + float v_x; + float v_z; + float crossProduct; + + + // end3index = (start3index + 1) % 3, start3index in [0,3) + if (start3index != 2) { + end3index = start3index + 1; + } + else { + end3index = 0; + } + + // making and reusing macros of these introduces extra instructions later + currPntI = STAN_TRIPLE_TO_PNT_INDEX(tile, start3index); + nextPntI = STAN_TRIPLE_TO_PNT_INDEX(tile, end3index); + + edge_x = (float)(tile->points[nextPntI].x - tile->points[currPntI].x); + edge_z = (float)(tile->points[nextPntI].z - tile->points[currPntI].z); + + + // Identical to getShortest2dDispToInfTileEdge from here + + edge_len = sqrtf(edge_x * edge_x + edge_z * edge_z); + + if (edge_len == 0) { + // Degenerate case, edge is vertical + // They just return the distance between the points, which is sensible and the correct value in 3 dimensions. + v_x = p_x - (float)tile->points[nextPntI].x; + v_z = p_z - (float)tile->points[nextPntI].z; + return sqrtf(v_x * v_x + v_z * v_z); + } + else + { + // - (AP x AB) / ||AB|| = ||PA|| sin(a) + crossProduct = ( + edge_z * (p_x - (float)tile->points[currPntI].x) + + + -edge_x * (p_z - (float)tile->points[currPntI].z) + ); + return crossProduct / edge_len; + } +} + #else GLOBAL_ASM( .text -glabel sub_GAME_7F0AFE70 +glabel getShortest2dDispToInfTripleEdge /* 0E49A0 7F0AFE70 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 0E49A4 7F0AFE74 AFA70054 */ sw $a3, 0x54($sp) /* 0E49A8 7F0AFE78 24010002 */ li $at, 2 @@ -1865,127 +1878,54 @@ glabel sub_GAME_7F0AFE70 -#ifdef NONMATCHING -f32 sub_GAME_7F0AFFCC(f32 arg2, f32 arg3) { - // Node 0 - return (sub_GAME_7F0AFD1C(arg2, arg3, (arg2 * D_80040F44), (arg3 * D_80040F44)) * D_80040F48); +float getShortest2dDispToInfTileEdgeUnscaled(struct StandTile *tile, int index,float x,float z) +{ + float disp; + + disp = getShortest2dDispToInfTileEdge(tile, index, x * level_scale, z * level_scale); + return disp * inv_level_scale; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AFFCC -/* 0E4AFC 7F0AFFCC 3C018004 */ lui $at, %hi(D_80040F44) -/* 0E4B00 7F0AFFD0 44866000 */ mtc1 $a2, $f12 -/* 0E4B04 7F0AFFD4 C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) -/* 0E4B08 7F0AFFD8 44877000 */ mtc1 $a3, $f14 -/* 0E4B0C 7F0AFFDC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E4B10 7F0AFFE0 46006102 */ mul.s $f4, $f12, $f0 -/* 0E4B14 7F0AFFE4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E4B18 7F0AFFE8 46007182 */ mul.s $f6, $f14, $f0 -/* 0E4B1C 7F0AFFEC 44062000 */ mfc1 $a2, $f4 -/* 0E4B20 7F0AFFF0 44073000 */ mfc1 $a3, $f6 -/* 0E4B24 7F0AFFF4 0FC2BF47 */ jal sub_GAME_7F0AFD1C -/* 0E4B28 7F0AFFF8 00000000 */ nop -/* 0E4B2C 7F0AFFFC 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E4B30 7F0B0000 C4280F48 */ lwc1 $f8, %lo(D_80040F48)($at) -/* 0E4B34 7F0B0004 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E4B38 7F0B0008 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E4B3C 7F0B000C 46080002 */ mul.s $f0, $f0, $f8 -/* 0E4B40 7F0B0010 03E00008 */ jr $ra -/* 0E4B44 7F0B0014 00000000 */ nop -) -#endif -#ifdef NONMATCHING -f32 sub_GAME_7F0B0018(f32 arg2, f32 arg3) { - // Node 0 - return (sub_GAME_7F0AFE70(arg2, arg3, (arg2 * D_80040F44), (arg3 * D_80040F44)) * D_80040F48); + +float getShortest2dDispToInfTripleEdgeUnscaled(struct StandTile *tile,s32 start3index,float p_x,float p_z) +{ + float disp; + + disp = getShortest2dDispToInfTripleEdge(tile, start3index, p_x * level_scale, p_z * level_scale); + return disp * inv_level_scale; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0018 -/* 0E4B48 7F0B0018 3C018004 */ lui $at, %hi(D_80040F44) -/* 0E4B4C 7F0B001C 44866000 */ mtc1 $a2, $f12 -/* 0E4B50 7F0B0020 C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) -/* 0E4B54 7F0B0024 44877000 */ mtc1 $a3, $f14 -/* 0E4B58 7F0B0028 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E4B5C 7F0B002C 46006102 */ mul.s $f4, $f12, $f0 -/* 0E4B60 7F0B0030 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E4B64 7F0B0034 46007182 */ mul.s $f6, $f14, $f0 -/* 0E4B68 7F0B0038 44062000 */ mfc1 $a2, $f4 -/* 0E4B6C 7F0B003C 44073000 */ mfc1 $a3, $f6 -/* 0E4B70 7F0B0040 0FC2BF9C */ jal sub_GAME_7F0AFE70 -/* 0E4B74 7F0B0044 00000000 */ nop -/* 0E4B78 7F0B0048 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E4B7C 7F0B004C C4280F48 */ lwc1 $f8, %lo(D_80040F48)($at) -/* 0E4B80 7F0B0050 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E4B84 7F0B0054 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E4B88 7F0B0058 46080002 */ mul.s $f0, $f0, $f8 -/* 0E4B8C 7F0B005C 03E00008 */ jr $ra -/* 0E4B90 7F0B0060 00000000 */ nop -) -#endif - -#ifdef NONMATCHING -void sub_GAME_7F0B0064(s32 arg0, s32 arg1, f32 arg2, f32 arg3) { - void *temp_v0; - f32 temp_f18; - f32 temp_f14; - - // Node 0 - temp_v0 = (arg0 + (arg1 * 8)); - temp_f18 = (arg3 - (f32) temp_v0->unkC); - temp_f14 = (arg2 - (f32) temp_v0->unk8); - arg3 = temp_f18; - return sqrtf(((temp_f14 * temp_f14) + (temp_f18 * temp_f18)), temp_f14); +float distToTilePnt2D(struct StandTile *tile,int pntI,float p_x,float p_z) +{ + float len; + + p_x -= (float)tile->points[pntI].x; + p_z -= (float)tile->points[pntI].z; + return sqrtf(p_x * p_x + p_z * p_z); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0064 -/* 0E4B94 7F0B0064 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E4B98 7F0B0068 000570C0 */ sll $t6, $a1, 3 -/* 0E4B9C 7F0B006C AFBF0014 */ sw $ra, 0x14($sp) -/* 0E4BA0 7F0B0070 AFA70024 */ sw $a3, 0x24($sp) -/* 0E4BA4 7F0B0074 008E1021 */ addu $v0, $a0, $t6 -/* 0E4BA8 7F0B0078 8458000C */ lh $t8, 0xc($v0) -/* 0E4BAC 7F0B007C 844F0008 */ lh $t7, 8($v0) -/* 0E4BB0 7F0B0080 C7A80024 */ lwc1 $f8, 0x24($sp) -/* 0E4BB4 7F0B0084 44985000 */ mtc1 $t8, $f10 -/* 0E4BB8 7F0B0088 448F2000 */ mtc1 $t7, $f4 -/* 0E4BBC 7F0B008C 44867000 */ mtc1 $a2, $f14 -/* 0E4BC0 7F0B0090 46805420 */ cvt.s.w $f16, $f10 -/* 0E4BC4 7F0B0094 468021A0 */ cvt.s.w $f6, $f4 -/* 0E4BC8 7F0B0098 46104481 */ sub.s $f18, $f8, $f16 -/* 0E4BCC 7F0B009C 46067381 */ sub.s $f14, $f14, $f6 -/* 0E4BD0 7F0B00A0 46129102 */ mul.s $f4, $f18, $f18 -/* 0E4BD4 7F0B00A4 E7B20024 */ swc1 $f18, 0x24($sp) -/* 0E4BD8 7F0B00A8 460E7182 */ mul.s $f6, $f14, $f14 -/* 0E4BDC 7F0B00AC 0C007DF8 */ jal sqrtf -/* 0E4BE0 7F0B00B0 46043300 */ add.s $f12, $f6, $f4 -/* 0E4BE4 7F0B00B4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E4BE8 7F0B00B8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E4BEC 7F0B00BC 03E00008 */ jr $ra -/* 0E4BF0 7F0B00C0 00000000 */ nop -) -#endif - #ifdef NONMATCHING -void sub_GAME_7F0B00C4(void) { - +float sub_GAME_7F0B00C4(struct StandTile* tile,s32 index,float p_x,float p_z) +{ + float v_x; + float v_z; + float dist; + + v_x = p_x * level_scale - (float)tile->points[index].x; + v_z = p_z * level_scale - (float)tile->points[index].z; + dist = sqrtf(v_x * v_x + v_z * v_z); + + return dist * inv_level_scale; } #else GLOBAL_ASM( @@ -1997,9 +1937,9 @@ glabel sub_GAME_7F0B00C4 /* 0E4C00 7F0B00D0 F7B40010 */ sdc1 $f20, 0x10($sp) /* 0E4C04 7F0B00D4 008E1021 */ addu $v0, $a0, $t6 /* 0E4C08 7F0B00D8 844F0008 */ lh $t7, 8($v0) -/* 0E4C0C 7F0B00DC 3C018004 */ lui $at, %hi(D_80040F44) +/* 0E4C0C 7F0B00DC 3C018004 */ lui $at, %hi(level_scale) /* 0E4C10 7F0B00E0 44867000 */ mtc1 $a2, $f14 -/* 0E4C14 7F0B00E4 C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) +/* 0E4C14 7F0B00E4 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) /* 0E4C18 7F0B00E8 8458000C */ lh $t8, 0xc($v0) /* 0E4C1C 7F0B00EC 448F2000 */ mtc1 $t7, $f4 /* 0E4C20 7F0B00F0 46007382 */ mul.s $f14, $f14, $f0 @@ -2015,8 +1955,8 @@ glabel sub_GAME_7F0B00C4 /* 0E4C48 7F0B0118 4614A482 */ mul.s $f18, $f20, $f20 /* 0E4C4C 7F0B011C 0C007DF8 */ jal sqrtf /* 0E4C50 7F0B0120 46128300 */ add.s $f12, $f16, $f18 -/* 0E4C54 7F0B0124 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E4C58 7F0B0128 C4240F48 */ lwc1 $f4, %lo(D_80040F48)($at) +/* 0E4C54 7F0B0124 3C018004 */ lui $at, %hi(inv_level_scale) +/* 0E4C58 7F0B0128 C4240F48 */ lwc1 $f4, %lo(inv_level_scale)($at) /* 0E4C5C 7F0B012C 8FBF001C */ lw $ra, 0x1c($sp) /* 0E4C60 7F0B0130 D7B40010 */ ldc1 $f20, 0x10($sp) /* 0E4C64 7F0B0134 46040002 */ mul.s $f0, $f0, $f4 @@ -2030,21 +1970,26 @@ glabel sub_GAME_7F0B00C4 #ifdef NONMATCHING -f32 sub_GAME_7F0B0140(s32 arg0, s32 arg1, f32 arg2, f32 arg3) { - void *temp_v0; - // Node 0 - temp_v0 = (arg0 + (arg1 * 8)); - return ((((f32) temp_v0->unkC * (arg3 * D_80040F44)) + ((arg2 * D_80040F44) * (f32) temp_v0->unk8)) * D_80040F48); +// dot product +f32 sub_GAME_7F0B0140(struct StandTile* tile, s32 index, float p_x, float p_z) +{ + float d_x; + float d_z; + + d_x = (p_x * level_scale) * tile->points[index].x; + d_z = (p_z * level_scale) * tile->points[index].z; // was originally commuted + + return (d_x + d_z) * inv_level_scale); } #else GLOBAL_ASM( .text glabel sub_GAME_7F0B0140 -/* 0E4C70 7F0B0140 3C018004 */ lui $at, %hi(D_80040F44) +/* 0E4C70 7F0B0140 3C018004 */ lui $at, %hi(level_scale) /* 0E4C74 7F0B0144 000570C0 */ sll $t6, $a1, 3 /* 0E4C78 7F0B0148 44866000 */ mtc1 $a2, $f12 -/* 0E4C7C 7F0B014C C4220F44 */ lwc1 $f2, %lo(D_80040F44)($at) +/* 0E4C7C 7F0B014C C4220F44 */ lwc1 $f2, %lo(level_scale)($at) /* 0E4C80 7F0B0150 008E1021 */ addu $v0, $a0, $t6 /* 0E4C84 7F0B0154 844F000C */ lh $t7, 0xc($v0) /* 0E4C88 7F0B0158 46026302 */ mul.s $f12, $f12, $f2 @@ -2053,11 +1998,11 @@ glabel sub_GAME_7F0B0140 /* 0E4C94 7F0B0164 448F2000 */ mtc1 $t7, $f4 /* 0E4C98 7F0B0168 46027382 */ mul.s $f14, $f14, $f2 /* 0E4C9C 7F0B016C 44985000 */ mtc1 $t8, $f10 -/* 0E4CA0 7F0B0170 3C018004 */ lui $at, %hi(D_80040F48) +/* 0E4CA0 7F0B0170 3C018004 */ lui $at, %hi(inv_level_scale) /* 0E4CA4 7F0B0174 468021A0 */ cvt.s.w $f6, $f4 /* 0E4CA8 7F0B0178 46805420 */ cvt.s.w $f16, $f10 /* 0E4CAC 7F0B017C 460E3202 */ mul.s $f8, $f6, $f14 -/* 0E4CB0 7F0B0180 C4260F48 */ lwc1 $f6, %lo(D_80040F48)($at) +/* 0E4CB0 7F0B0180 C4260F48 */ lwc1 $f6, %lo(inv_level_scale)($at) /* 0E4CB4 7F0B0184 46106482 */ mul.s $f18, $f12, $f16 /* 0E4CB8 7F0B0188 46124100 */ add.s $f4, $f8, $f18 /* 0E4CBC 7F0B018C 46062002 */ mul.s $f0, $f4, $f6 @@ -2071,6 +2016,7 @@ glabel sub_GAME_7F0B0140 #ifdef NONMATCHING +// Similar to others f32 sub_GAME_7F0B0198(void *arg0, s32 arg1, f32 arg2, f32 arg3) { void *temp_v0; void *temp_v0_2; @@ -2252,117 +2198,48 @@ glabel sub_GAME_7F0B0198 -#ifdef NONMATCHING -void sub_GAME_7F0B02D8(void) { +// Determines if inside (presumably - it effectively does an && of the checks on signs of cross products) +// based on the 3 edges. So probably only for triangular tiles. +s32 isPointInsideTriStandTile_Maybe(struct StandTile *tile, float p_x, float p_z) +{ + float disp; + s32 i; + for (i = 0; i != 3; i++) + { + disp = getShortest2dDispToInfTripleEdge(tile,i,p_x,p_z); + if (disp < 0) { + return 0; + } + } + + return 1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B02D8 -/* 0E4E08 7F0B02D8 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E4E0C 7F0B02DC F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0E4E10 7F0B02E0 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0E4E14 7F0B02E4 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0E4E18 7F0B02E8 AFB20038 */ sw $s2, 0x38($sp) -/* 0E4E1C 7F0B02EC AFB10034 */ sw $s1, 0x34($sp) -/* 0E4E20 7F0B02F0 AFB00030 */ sw $s0, 0x30($sp) -/* 0E4E24 7F0B02F4 4485A000 */ mtc1 $a1, $f20 -/* 0E4E28 7F0B02F8 4486B000 */ mtc1 $a2, $f22 -/* 0E4E2C 7F0B02FC 4480C000 */ mtc1 $zero, $f24 -/* 0E4E30 7F0B0300 00808825 */ move $s1, $a0 -/* 0E4E34 7F0B0304 AFBF003C */ sw $ra, 0x3c($sp) -/* 0E4E38 7F0B0308 00008025 */ move $s0, $zero -/* 0E4E3C 7F0B030C 24120003 */ li $s2, 3 -/* 0E4E40 7F0B0310 4406A000 */ mfc1 $a2, $f20 -.L7F0B0314: -/* 0E4E44 7F0B0314 4407B000 */ mfc1 $a3, $f22 -/* 0E4E48 7F0B0318 02202025 */ move $a0, $s1 -/* 0E4E4C 7F0B031C 0FC2BF9C */ jal sub_GAME_7F0AFE70 -/* 0E4E50 7F0B0320 02002825 */ move $a1, $s0 -/* 0E4E54 7F0B0324 4618003C */ c.lt.s $f0, $f24 -/* 0E4E58 7F0B0328 26100001 */ addiu $s0, $s0, 1 -/* 0E4E5C 7F0B032C 45000003 */ bc1f .L7F0B033C -/* 0E4E60 7F0B0330 00000000 */ nop -/* 0E4E64 7F0B0334 10000004 */ b .L7F0B0348 -/* 0E4E68 7F0B0338 00001025 */ move $v0, $zero -.L7F0B033C: -/* 0E4E6C 7F0B033C 5612FFF5 */ bnel $s0, $s2, .L7F0B0314 -/* 0E4E70 7F0B0340 4406A000 */ mfc1 $a2, $f20 -/* 0E4E74 7F0B0344 24020001 */ li $v0, 1 -.L7F0B0348: -/* 0E4E78 7F0B0348 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E4E7C 7F0B034C D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0E4E80 7F0B0350 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0E4E84 7F0B0354 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0E4E88 7F0B0358 8FB00030 */ lw $s0, 0x30($sp) -/* 0E4E8C 7F0B035C 8FB10034 */ lw $s1, 0x34($sp) -/* 0E4E90 7F0B0360 8FB20038 */ lw $s2, 0x38($sp) -/* 0E4E94 7F0B0364 03E00008 */ jr $ra -/* 0E4E98 7F0B0368 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif +s32 isPointInsideTriStandTileUnscaled_Maybe(struct StandTile *tile, float p_x, float p_z) +{ + float disp; + s32 i; + for (i = 0; i != 3; i++) + { + disp = getShortest2dDispToInfTripleEdgeUnscaled(tile,i,p_x,p_z); + if (disp < 0) { + return 0; + } + } -#ifdef NONMATCHING -void sub_GAME_7F0B036C(void) { - + return 1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B036C -/* 0E4E9C 7F0B036C 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E4EA0 7F0B0370 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0E4EA4 7F0B0374 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0E4EA8 7F0B0378 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0E4EAC 7F0B037C AFB20038 */ sw $s2, 0x38($sp) -/* 0E4EB0 7F0B0380 AFB10034 */ sw $s1, 0x34($sp) -/* 0E4EB4 7F0B0384 AFB00030 */ sw $s0, 0x30($sp) -/* 0E4EB8 7F0B0388 4485A000 */ mtc1 $a1, $f20 -/* 0E4EBC 7F0B038C 4486B000 */ mtc1 $a2, $f22 -/* 0E4EC0 7F0B0390 4480C000 */ mtc1 $zero, $f24 -/* 0E4EC4 7F0B0394 00808825 */ move $s1, $a0 -/* 0E4EC8 7F0B0398 AFBF003C */ sw $ra, 0x3c($sp) -/* 0E4ECC 7F0B039C 00008025 */ move $s0, $zero -/* 0E4ED0 7F0B03A0 24120003 */ li $s2, 3 -/* 0E4ED4 7F0B03A4 4406A000 */ mfc1 $a2, $f20 -.L7F0B03A8: -/* 0E4ED8 7F0B03A8 4407B000 */ mfc1 $a3, $f22 -/* 0E4EDC 7F0B03AC 02202025 */ move $a0, $s1 -/* 0E4EE0 7F0B03B0 0FC2C006 */ jal sub_GAME_7F0B0018 -/* 0E4EE4 7F0B03B4 02002825 */ move $a1, $s0 -/* 0E4EE8 7F0B03B8 4618003C */ c.lt.s $f0, $f24 -/* 0E4EEC 7F0B03BC 26100001 */ addiu $s0, $s0, 1 -/* 0E4EF0 7F0B03C0 45000003 */ bc1f .L7F0B03D0 -/* 0E4EF4 7F0B03C4 00000000 */ nop -/* 0E4EF8 7F0B03C8 10000004 */ b .L7F0B03DC -/* 0E4EFC 7F0B03CC 00001025 */ move $v0, $zero -.L7F0B03D0: -/* 0E4F00 7F0B03D0 5612FFF5 */ bnel $s0, $s2, .L7F0B03A8 -/* 0E4F04 7F0B03D4 4406A000 */ mfc1 $a2, $f20 -/* 0E4F08 7F0B03D8 24020001 */ li $v0, 1 -.L7F0B03DC: -/* 0E4F0C 7F0B03DC 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E4F10 7F0B03E0 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0E4F14 7F0B03E4 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0E4F18 7F0B03E8 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0E4F1C 7F0B03EC 8FB00030 */ lw $s0, 0x30($sp) -/* 0E4F20 7F0B03F0 8FB10034 */ lw $s1, 0x34($sp) -/* 0E4F24 7F0B03F4 8FB20038 */ lw $s2, 0x38($sp) -/* 0E4F28 7F0B03F8 03E00008 */ jr $ra -/* 0E4F2C 7F0B03FC 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif - - +// Sig for caller matches +float sub_GAME_7F0B0400(struct StandTile *tile, s32 start3index, float p_x,float p_z); #ifdef NONMATCHING +// Similar to a prev func, but simplier. f32 sub_GAME_7F0B0400(void *arg0, s32 arg1, f32 arg2, f32 arg3) { f32 sp38; s32 temp_a1; @@ -2488,173 +2365,55 @@ glabel sub_GAME_7F0B0400 -#ifdef NONMATCHING -void sub_GAME_7F0B0518(void) { +s32 sub_GAME_7F0B0518(struct StandTile *tile, float p_x, float p_z) +{ + float unk; + s32 i; + p_x *= level_scale; + p_z *= level_scale; + + for (i = 0; i != 3; i++) + { + unk = sub_GAME_7F0B0400(tile,i,p_x,p_z); + if (unk < -2) { + return 0; + } + } + + return 1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0518 -/* 0E5048 7F0B0518 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E504C 7F0B051C F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0E5050 7F0B0520 3C018004 */ lui $at, %hi(D_80040F44) -/* 0E5054 7F0B0524 4485A000 */ mtc1 $a1, $f20 -/* 0E5058 7F0B0528 C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) -/* 0E505C 7F0B052C F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0E5060 7F0B0530 4486B000 */ mtc1 $a2, $f22 -/* 0E5064 7F0B0534 4600A502 */ mul.s $f20, $f20, $f0 -/* 0E5068 7F0B0538 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0E506C 7F0B053C 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 0E5070 7F0B0540 AFB20038 */ sw $s2, 0x38($sp) -/* 0E5074 7F0B0544 AFB10034 */ sw $s1, 0x34($sp) -/* 0E5078 7F0B0548 AFB00030 */ sw $s0, 0x30($sp) -/* 0E507C 7F0B054C 4481C000 */ mtc1 $at, $f24 -/* 0E5080 7F0B0550 4600B582 */ mul.s $f22, $f22, $f0 -/* 0E5084 7F0B0554 00808825 */ move $s1, $a0 -/* 0E5088 7F0B0558 AFBF003C */ sw $ra, 0x3c($sp) -/* 0E508C 7F0B055C 00008025 */ move $s0, $zero -/* 0E5090 7F0B0560 24120003 */ li $s2, 3 -/* 0E5094 7F0B0564 4406A000 */ mfc1 $a2, $f20 -.L7F0B0568: -/* 0E5098 7F0B0568 4407B000 */ mfc1 $a3, $f22 -/* 0E509C 7F0B056C 02202025 */ move $a0, $s1 -/* 0E50A0 7F0B0570 0FC2C100 */ jal sub_GAME_7F0B0400 -/* 0E50A4 7F0B0574 02002825 */ move $a1, $s0 -/* 0E50A8 7F0B0578 4618003C */ c.lt.s $f0, $f24 -/* 0E50AC 7F0B057C 26100001 */ addiu $s0, $s0, 1 -/* 0E50B0 7F0B0580 45000003 */ bc1f .L7F0B0590 -/* 0E50B4 7F0B0584 00000000 */ nop -/* 0E50B8 7F0B0588 10000004 */ b .L7F0B059C -/* 0E50BC 7F0B058C 00001025 */ move $v0, $zero -.L7F0B0590: -/* 0E50C0 7F0B0590 5612FFF5 */ bnel $s0, $s2, .L7F0B0568 -/* 0E50C4 7F0B0594 4406A000 */ mfc1 $a2, $f20 -/* 0E50C8 7F0B0598 24020001 */ li $v0, 1 -.L7F0B059C: -/* 0E50CC 7F0B059C 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E50D0 7F0B05A0 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0E50D4 7F0B05A4 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0E50D8 7F0B05A8 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0E50DC 7F0B05AC 8FB00030 */ lw $s0, 0x30($sp) -/* 0E50E0 7F0B05B0 8FB10034 */ lw $s1, 0x34($sp) -/* 0E50E4 7F0B05B4 8FB20038 */ lw $s2, 0x38($sp) -/* 0E50E8 7F0B05B8 03E00008 */ jr $ra -/* 0E50EC 7F0B05BC 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif - - -#ifdef NONMATCHING -void sub_GAME_7F0B05C0(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - f32 temp_f0; - f32 temp_f2; - - // Node 0 - temp_f0 = (arg1 * arg2); - temp_f2 = (arg0 * arg3); - if (temp_f0 < temp_f2) - { - // Node 1 +// A->B ACWS returns 1, CWS (including opposite) returns -1. +// Identical direction and |A| >= |B| returns 0 +int getRotationalDirectionBetween(float a_x,float a_z,float b_x,float b_z) +{ + // The main 2 cases : return the sign of AxB where it's non-zero + if (a_z * b_x < a_x * b_z) { return 1; } - // Node 2 - if (temp_f2 < temp_f0) - { - // Node 3 + if (a_x * b_z < a_z * b_x) { return -1; } - // Node 4 - if ((arg0 * arg2) < 0.0f) - { - // Node 6 - return -1; + + // [AxB == 0 now] + + // If the vectors are opposite, default to clockwise + if ((a_x * b_x < 0) || (a_z * b_z < 0)) { + return -1; } - // Node 5 - if ((arg1 * arg3) < 0.0f) - { - // Node 6 - return -1; + + // If A is shorter, return anti-clockwise + if (a_x * a_x + a_z * a_z < b_x * b_x + b_z * b_z) { + return 1; // ACWS } - // Node 7 - if (((arg0 * arg0) + (arg1 * arg1)) < ((arg2 * arg2) + (arg3 * arg3))) - { - // Node 8 - return 1; - } - // Node 9 + + // Identical direction, |A| >= |B| return 0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B05C0 -/* 0E50F0 7F0B05C0 AFA60008 */ sw $a2, 8($sp) -/* 0E50F4 7F0B05C4 C7A40008 */ lwc1 $f4, 8($sp) -/* 0E50F8 7F0B05C8 AFA7000C */ sw $a3, 0xc($sp) -/* 0E50FC 7F0B05CC C7A6000C */ lwc1 $f6, 0xc($sp) -/* 0E5100 7F0B05D0 46047002 */ mul.s $f0, $f14, $f4 -/* 0E5104 7F0B05D4 00000000 */ nop -/* 0E5108 7F0B05D8 46066082 */ mul.s $f2, $f12, $f6 -/* 0E510C 7F0B05DC 4602003C */ c.lt.s $f0, $f2 -/* 0E5110 7F0B05E0 00000000 */ nop -/* 0E5114 7F0B05E4 45000003 */ bc1f .L7F0B05F4 -/* 0E5118 7F0B05E8 00000000 */ nop -/* 0E511C 7F0B05EC 03E00008 */ jr $ra -/* 0E5120 7F0B05F0 24020001 */ li $v0, 1 - -.L7F0B05F4: -/* 0E5124 7F0B05F4 4600103C */ c.lt.s $f2, $f0 -/* 0E5128 7F0B05F8 C7A80008 */ lwc1 $f8, 8($sp) -/* 0E512C 7F0B05FC 45000003 */ bc1f .L7F0B060C -/* 0E5130 7F0B0600 00000000 */ nop -/* 0E5134 7F0B0604 03E00008 */ jr $ra -/* 0E5138 7F0B0608 2402FFFF */ li $v0, -1 - -.L7F0B060C: -/* 0E513C 7F0B060C 46086282 */ mul.s $f10, $f12, $f8 -/* 0E5140 7F0B0610 44800000 */ mtc1 $zero, $f0 -/* 0E5144 7F0B0614 C7B0000C */ lwc1 $f16, 0xc($sp) -/* 0E5148 7F0B0618 4600503C */ c.lt.s $f10, $f0 -/* 0E514C 7F0B061C 00000000 */ nop -/* 0E5150 7F0B0620 45010006 */ bc1t .L7F0B063C -/* 0E5154 7F0B0624 00000000 */ nop -/* 0E5158 7F0B0628 46107482 */ mul.s $f18, $f14, $f16 -/* 0E515C 7F0B062C 4600903C */ c.lt.s $f18, $f0 -/* 0E5160 7F0B0630 00000000 */ nop -/* 0E5164 7F0B0634 45000003 */ bc1f .L7F0B0644 -/* 0E5168 7F0B0638 00000000 */ nop -.L7F0B063C: -/* 0E516C 7F0B063C 03E00008 */ jr $ra -/* 0E5170 7F0B0640 2402FFFF */ li $v0, -1 - -.L7F0B0644: -/* 0E5174 7F0B0644 460C6102 */ mul.s $f4, $f12, $f12 -/* 0E5178 7F0B0648 C7AA0008 */ lwc1 $f10, 8($sp) -/* 0E517C 7F0B064C C7B2000C */ lwc1 $f18, 0xc($sp) -/* 0E5180 7F0B0650 460E7182 */ mul.s $f6, $f14, $f14 -/* 0E5184 7F0B0654 00001025 */ move $v0, $zero -/* 0E5188 7F0B0658 460A5402 */ mul.s $f16, $f10, $f10 -/* 0E518C 7F0B065C 46062200 */ add.s $f8, $f4, $f6 -/* 0E5190 7F0B0660 46129102 */ mul.s $f4, $f18, $f18 -/* 0E5194 7F0B0664 46048180 */ add.s $f6, $f16, $f4 -/* 0E5198 7F0B0668 4606403C */ c.lt.s $f8, $f6 -/* 0E519C 7F0B066C 00000000 */ nop -/* 0E51A0 7F0B0670 45000003 */ bc1f .L7F0B0680 -/* 0E51A4 7F0B0674 00000000 */ nop -/* 0E51A8 7F0B0678 03E00008 */ jr $ra -/* 0E51AC 7F0B067C 24020001 */ li $v0, 1 - -.L7F0B0680: -/* 0E51B0 7F0B0680 03E00008 */ jr $ra -/* 0E51B4 7F0B0684 00000000 */ nop -) -#endif - @@ -2675,14 +2434,14 @@ s32 sub_GAME_7F0B0688(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5 temp_f2 = (arg1 - arg5); sp24 = temp_f0; sp20 = temp_f2; - sp2C = sub_GAME_7F0B05C0((arg2 - arg0), (arg3 - arg1), -temp_f0, -temp_f2); - temp_t7 = ((sub_GAME_7F0B05C0(sp1C, sp18, (arg6 - arg0), (arg7 - arg1)) * sp2C) < 1); + sp2C = getRotationalDirectionBetween((arg2 - arg0), (arg3 - arg1), -temp_f0, -temp_f2); + temp_t7 = ((getRotationalDirectionBetween(sp1C, sp18, (arg6 - arg0), (arg7 - arg1)) * sp2C) < 1); phi_return = temp_t7; if (temp_t7 != 0) { // Node 1 - sp28 = sub_GAME_7F0B05C0((arg6 - arg4), (arg7 - arg5), sp24, sp20); - phi_return = ((sub_GAME_7F0B05C0(sp1C, sp18, (arg2 - arg4), (arg3 - arg5)) * sp28) < 1); + sp28 = getRotationalDirectionBetween((arg6 - arg4), (arg7 - arg5), sp24, sp20); + phi_return = ((getRotationalDirectionBetween(sp1C, sp18, (arg2 - arg4), (arg3 - arg5)) * sp28) < 1); } // Node 2 return phi_return; @@ -2715,7 +2474,7 @@ glabel sub_GAME_7F0B0688 /* 0E5208 7F0B06D8 46001407 */ neg.s $f16, $f2 /* 0E520C 7F0B06DC 44064000 */ mfc1 $a2, $f8 /* 0E5210 7F0B06E0 44078000 */ mfc1 $a3, $f16 -/* 0E5214 7F0B06E4 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E5214 7F0B06E4 0FC2C170 */ jal getRotationalDirectionBetween /* 0E5218 7F0B06E8 E7AE0018 */ swc1 $f14, 0x18($sp) /* 0E521C 7F0B06EC C7A60060 */ lwc1 $f6, 0x60($sp) /* 0E5220 7F0B06F0 C7B00048 */ lwc1 $f16, 0x48($sp) @@ -2728,7 +2487,7 @@ glabel sub_GAME_7F0B0688 /* 0E523C 7F0B070C 44069000 */ mfc1 $a2, $f18 /* 0E5240 7F0B0710 AFA2002C */ sw $v0, 0x2c($sp) /* 0E5244 7F0B0714 44074000 */ mfc1 $a3, $f8 -/* 0E5248 7F0B0718 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E5248 7F0B0718 0FC2C170 */ jal getRotationalDirectionBetween /* 0E524C 7F0B071C 00000000 */ nop /* 0E5250 7F0B0720 8FAE002C */ lw $t6, 0x2c($sp) /* 0E5254 7F0B0724 C7A60060 */ lwc1 $f6, 0x60($sp) @@ -2745,7 +2504,7 @@ glabel sub_GAME_7F0B0688 /* 0E5280 7F0B0750 8FA70020 */ lw $a3, 0x20($sp) /* 0E5284 7F0B0754 460A9381 */ sub.s $f14, $f18, $f10 /* 0E5288 7F0B0758 E7AC001C */ swc1 $f12, 0x1c($sp) -/* 0E528C 7F0B075C 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E528C 7F0B075C 0FC2C170 */ jal getRotationalDirectionBetween /* 0E5290 7F0B0760 E7AE0018 */ swc1 $f14, 0x18($sp) /* 0E5294 7F0B0764 C7A40050 */ lwc1 $f4, 0x50($sp) /* 0E5298 7F0B0768 C7A80058 */ lwc1 $f8, 0x58($sp) @@ -2758,7 +2517,7 @@ glabel sub_GAME_7F0B0688 /* 0E52B4 7F0B0784 44063000 */ mfc1 $a2, $f6 /* 0E52B8 7F0B0788 AFA20028 */ sw $v0, 0x28($sp) /* 0E52BC 7F0B078C 44075000 */ mfc1 $a3, $f10 -/* 0E52C0 7F0B0790 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E52C0 7F0B0790 0FC2C170 */ jal getRotationalDirectionBetween /* 0E52C4 7F0B0794 00000000 */ nop /* 0E52C8 7F0B0798 8FB80028 */ lw $t8, 0x28($sp) /* 0E52CC 7F0B079C 00580019 */ multu $v0, $t8 @@ -2794,9 +2553,9 @@ glabel sub_GAME_7F0B0688 sp44 = 1; sp28 = temp_f0; sp24 = temp_f2; - sp2C = sub_GAME_7F0B05C0((arg2 - arg0), (arg3 - arg1), -temp_f0, -temp_f2); - sp4C = (s32) (sub_GAME_7F0B05C0(sp20, sp1C, (arg6 - arg0), (arg7 - arg1)) * sp2C); - sp2C = sub_GAME_7F0B05C0((arg6 - arg4), (arg7 - arg5), sp28, sp24); + sp2C = getRotationalDirectionBetween((arg2 - arg0), (arg3 - arg1), -temp_f0, -temp_f2); + sp4C = (s32) (getRotationalDirectionBetween(sp20, sp1C, (arg6 - arg0), (arg7 - arg1)) * sp2C); + sp2C = getRotationalDirectionBetween((arg6 - arg4), (arg7 - arg5), sp28, sp24); if (sp4C >= arg8) { // Node 1 @@ -2804,7 +2563,7 @@ glabel sub_GAME_7F0B0688 } // Node 2 phi_a0 = sp44; - if ((sub_GAME_7F0B05C0(sp20, sp1C, (arg2 - arg4), (arg3 - arg5)) * sp2C) >= arg8) + if ((getRotationalDirectionBetween(sp20, sp1C, (arg2 - arg4), (arg3 - arg5)) * sp2C) >= arg8) { // Node 3 phi_a0 = 0; @@ -2842,7 +2601,7 @@ glabel sub_GAME_7F0B07BC /* 0E5344 7F0B0814 44074000 */ mfc1 $a3, $f8 /* 0E5348 7F0B0818 44069000 */ mfc1 $a2, $f18 /* 0E534C 7F0B081C E7AE001C */ swc1 $f14, 0x1c($sp) -/* 0E5350 7F0B0820 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E5350 7F0B0820 0FC2C170 */ jal getRotationalDirectionBetween /* 0E5354 7F0B0824 E7AC0020 */ swc1 $f12, 0x20($sp) /* 0E5358 7F0B0828 C7A60080 */ lwc1 $f6, 0x80($sp) /* 0E535C 7F0B082C C7B00068 */ lwc1 $f16, 0x68($sp) @@ -2855,7 +2614,7 @@ glabel sub_GAME_7F0B07BC /* 0E5378 7F0B0848 44069000 */ mfc1 $a2, $f18 /* 0E537C 7F0B084C AFA2002C */ sw $v0, 0x2c($sp) /* 0E5380 7F0B0850 44074000 */ mfc1 $a3, $f8 -/* 0E5384 7F0B0854 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E5384 7F0B0854 0FC2C170 */ jal getRotationalDirectionBetween /* 0E5388 7F0B0858 00000000 */ nop /* 0E538C 7F0B085C 8FAF002C */ lw $t7, 0x2c($sp) /* 0E5390 7F0B0860 C7A60080 */ lwc1 $f6, 0x80($sp) @@ -2870,7 +2629,7 @@ glabel sub_GAME_7F0B07BC /* 0E53B4 7F0B0884 E7AC0020 */ swc1 $f12, 0x20($sp) /* 0E53B8 7F0B0888 0000C012 */ mflo $t8 /* 0E53BC 7F0B088C AFB8004C */ sw $t8, 0x4c($sp) -/* 0E53C0 7F0B0890 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E53C0 7F0B0890 0FC2C170 */ jal getRotationalDirectionBetween /* 0E53C4 7F0B0894 E7AE001C */ swc1 $f14, 0x1c($sp) /* 0E53C8 7F0B0898 C7A40070 */ lwc1 $f4, 0x70($sp) /* 0E53CC 7F0B089C C7A80078 */ lwc1 $f8, 0x78($sp) @@ -2883,7 +2642,7 @@ glabel sub_GAME_7F0B07BC /* 0E53E8 7F0B08B8 44063000 */ mfc1 $a2, $f6 /* 0E53EC 7F0B08BC AFA2002C */ sw $v0, 0x2c($sp) /* 0E53F0 7F0B08C0 44075000 */ mfc1 $a3, $f10 -/* 0E53F4 7F0B08C4 0FC2C170 */ jal sub_GAME_7F0B05C0 +/* 0E53F4 7F0B08C4 0FC2C170 */ jal getRotationalDirectionBetween /* 0E53F8 7F0B08C8 00000000 */ nop /* 0E53FC 7F0B08CC 8FA30088 */ lw $v1, 0x88($sp) /* 0E5400 7F0B08D0 8FB9004C */ lw $t9, 0x4c($sp) @@ -2911,6 +2670,11 @@ glabel sub_GAME_7F0B07BC +// 'walkTilesBetweenPoints_withCallback' +// sig declared for caller matches +s32 sub_GAME_7F0B0914(struct StandTile **tileStack, float start_x, float start_z, float dest_x, float dest_z, + standTileWalkCallback_t func, struct StandTileWalkCallbackRecord *funcData); + #ifdef NONMATCHING void sub_GAME_7F0B0914(void) { @@ -2922,9 +2686,9 @@ GLOBAL_ASM( glabel sub_GAME_7F0B0914 /* 0E5444 7F0B0914 27BDFF48 */ addiu $sp, $sp, -0xb8 /* 0E5448 7F0B0918 F7B40030 */ sdc1 $f20, 0x30($sp) -/* 0E544C 7F0B091C 3C018004 */ lui $at, %hi(D_80040F44) +/* 0E544C 7F0B091C 3C018004 */ lui $at, %hi(level_scale) /* 0E5450 7F0B0920 4485A000 */ mtc1 $a1, $f20 -/* 0E5454 7F0B0924 C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) +/* 0E5454 7F0B0924 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) /* 0E5458 7F0B0928 F7B60038 */ sdc1 $f22, 0x38($sp) /* 0E545C 7F0B092C 4486B000 */ mtc1 $a2, $f22 /* 0E5460 7F0B0930 4600A502 */ mul.s $f20, $f20, $f0 @@ -3036,8 +2800,8 @@ glabel sub_GAME_7F0B0914 /* 0E55F4 7F0B0AC4 50400012 */ beql $v0, $zero, .L7F0B0B10 /* 0E55F8 7F0B0AC8 86640006 */ lh $a0, 6($s3) /* 0E55FC 7F0B0ACC 9603000E */ lhu $v1, 0xe($s0) -/* 0E5600 7F0B0AD0 3C198004 */ lui $t9, %hi(base_ptr_connection_vals) -/* 0E5604 7F0B0AD4 8F390F58 */ lw $t9, %lo(base_ptr_connection_vals)($t9) +/* 0E5600 7F0B0AD0 3C198004 */ lui $t9, %hi(standTileStart) +/* 0E5604 7F0B0AD4 8F390F58 */ lw $t9, %lo(standTileStart)($t9) /* 0E5608 7F0B0AD8 0003C0C0 */ sll $t8, $v1, 3 /* 0E560C 7F0B0ADC 26940001 */ addiu $s4, $s4, 1 /* 0E5610 7F0B0AE0 03191021 */ addu $v0, $t8, $t9 @@ -3085,10 +2849,10 @@ glabel sub_GAME_7F0B0914 /* 0E56A0 7F0B0B70 16800007 */ bnez $s4, .L7F0B0B90 /* 0E56A4 7F0B0B74 00008825 */ move $s1, $zero .L7F0B0B78: -/* 0E56A8 7F0B0B78 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B9E4) -/* 0E56AC 7F0B0B7C AC36B9E4 */ sw $s6, %lo(dword_CODE_bss_8007B9E4)($at) -/* 0E56B0 7F0B0B80 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B9E8) -/* 0E56B4 7F0B0B84 AC3EB9E8 */ sw $fp, %lo(dword_CODE_bss_8007B9E8)($at) +/* 0E56A8 7F0B0B78 3C018008 */ lui $at, %hi(stanSavedColl_tile) +/* 0E56AC 7F0B0B7C AC36B9E4 */ sw $s6, %lo(stanSavedColl_tile)($at) +/* 0E56B0 7F0B0B80 3C018008 */ lui $at, %hi(stanSavedColl_pointI) +/* 0E56B4 7F0B0B84 AC3EB9E8 */ sw $fp, %lo(stanSavedColl_pointI)($at) /* 0E56B8 7F0B0B88 10000004 */ b .L7F0B0B9C /* 0E56BC 7F0B0B8C 00001025 */ move $v0, $zero .L7F0B0B90: @@ -3119,211 +2883,123 @@ glabel sub_GAME_7F0B0914 - - -#ifdef NONMATCHING -void sub_GAME_7F0B0BE4(s32 arg1, ? arg2, ? arg3, f32 arg4) { - sub_GAME_7F0B0914(arg1, arg2, arg1, arg2, arg4, 0, 0); +// 'walkTilesBetweenPoints_NoCallback' +s32 sub_GAME_7F0B0BE4(struct StandTile **tileStack, float start_x, float start_z, float dest_x, float dest_z) +{ + return sub_GAME_7F0B0914(tileStack, start_x, start_z, dest_x, dest_z, 0, 0); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0BE4 -/* 0E5714 7F0B0BE4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0E5718 7F0B0BE8 44856000 */ mtc1 $a1, $f12 -/* 0E571C 7F0B0BEC 44867000 */ mtc1 $a2, $f14 -/* 0E5720 7F0B0BF0 C7A40038 */ lwc1 $f4, 0x38($sp) -/* 0E5724 7F0B0BF4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0E5728 7F0B0BF8 44056000 */ mfc1 $a1, $f12 -/* 0E572C 7F0B0BFC 44067000 */ mfc1 $a2, $f14 -/* 0E5730 7F0B0C00 AFA70034 */ sw $a3, 0x34($sp) -/* 0E5734 7F0B0C04 AFA00014 */ sw $zero, 0x14($sp) -/* 0E5738 7F0B0C08 AFA00018 */ sw $zero, 0x18($sp) -/* 0E573C 7F0B0C0C 0FC2C245 */ jal sub_GAME_7F0B0914 -/* 0E5740 7F0B0C10 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0E5744 7F0B0C14 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E5748 7F0B0C18 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0E574C 7F0B0C1C 03E00008 */ jr $ra -/* 0E5750 7F0B0C20 00000000 */ nop -) -#endif +// 'walkTilesBetweenPoints_NotingRooms' +s32 sub_GAME_7F0B0C24(struct StandTile **tileStack, float start_x, float start_z, float dest_x, float dest_z, s32 *roomBuffer, s32 *rtnCountSize, s32 maxBufSize) +{ + struct StandTileWalkCallbackRecord callbackData; + s32 rtn; -#ifdef NONMATCHING -void sub_GAME_7F0B0C24(s32 arg1, ? arg2, ? arg3, f32 arg4, ?32 arg5, void *arg6, ?32 arg7) { - ?32 sp30; - ?32 sp34; - ?32 sp38; - ?32 sp3C; + callbackData.roomBuf = roomBuffer; + callbackData.count = 0; + callbackData.bufMax = maxBufSize; + callbackData.lastRoom = -1; - // Node 0 - sp34 = 0; - sp3C = -1; - sp30 = arg5; - sp38 = arg7; - *arg6 = sp34; - return sub_GAME_7F0B0914(arg1, arg2, arg1, arg2, arg4, &sub_GAME_7F0B0C98, &sp30); + rtn = sub_GAME_7F0B0914(tileStack, start_x, start_z, dest_x, dest_z, noteTileRoomIfDifferentToPrev, &callbackData); + + *rtnCountSize = callbackData.count; + return rtn; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0C24 -/* 0E5754 7F0B0C24 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E5758 7F0B0C28 44856000 */ mtc1 $a1, $f12 -/* 0E575C 7F0B0C2C 44867000 */ mtc1 $a2, $f14 -/* 0E5760 7F0B0C30 8FAE0054 */ lw $t6, 0x54($sp) -/* 0E5764 7F0B0C34 8FAF005C */ lw $t7, 0x5c($sp) -/* 0E5768 7F0B0C38 C7A40050 */ lwc1 $f4, 0x50($sp) -/* 0E576C 7F0B0C3C 3C197F0B */ lui $t9, %hi(sub_GAME_7F0B0C98) # $t9, 0x7f0b -/* 0E5770 7F0B0C40 AFBF0024 */ sw $ra, 0x24($sp) -/* 0E5774 7F0B0C44 2418FFFF */ li $t8, -1 -/* 0E5778 7F0B0C48 27390C98 */ addiu $t9, %lo(sub_GAME_7F0B0C98) # addiu $t9, $t9, 0xc98 -/* 0E577C 7F0B0C4C 27A80030 */ addiu $t0, $sp, 0x30 -/* 0E5780 7F0B0C50 44056000 */ mfc1 $a1, $f12 -/* 0E5784 7F0B0C54 44067000 */ mfc1 $a2, $f14 -/* 0E5788 7F0B0C58 AFA7004C */ sw $a3, 0x4c($sp) -/* 0E578C 7F0B0C5C AFA00034 */ sw $zero, 0x34($sp) -/* 0E5790 7F0B0C60 AFB8003C */ sw $t8, 0x3c($sp) -/* 0E5794 7F0B0C64 AFA80018 */ sw $t0, 0x18($sp) -/* 0E5798 7F0B0C68 AFB90014 */ sw $t9, 0x14($sp) -/* 0E579C 7F0B0C6C AFAE0030 */ sw $t6, 0x30($sp) -/* 0E57A0 7F0B0C70 AFAF0038 */ sw $t7, 0x38($sp) -/* 0E57A4 7F0B0C74 0FC2C245 */ jal sub_GAME_7F0B0914 -/* 0E57A8 7F0B0C78 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0E57AC 7F0B0C7C 8FA90034 */ lw $t1, 0x34($sp) -/* 0E57B0 7F0B0C80 8FAA0058 */ lw $t2, 0x58($sp) -/* 0E57B4 7F0B0C84 AD490000 */ sw $t1, ($t2) -/* 0E57B8 7F0B0C88 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E57BC 7F0B0C8C 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0E57C0 7F0B0C90 03E00008 */ jr $ra -/* 0E57C4 7F0B0C94 00000000 */ nop -) -#endif +void noteTileRoomIfDifferentToPrev(struct StandTile *tile, struct StandTile *unused, struct StandTileWalkCallbackRecord *data) +{ + s32 newRoom; - - -#ifdef NONMATCHING -s32 sub_GAME_7F0B0C98(void *arg0, s32 arg1, void *arg2) { - // Node 0 - if (arg2->unkC != arg0->unk3) + if (tile->room != data->lastRoom && data->count < data->bufMax) { - // Node 1 - if (arg2->unk4 < arg2->unk8) - { - // Node 2 - **arg2 = (s32) arg0->unk3; - arg2->unkC = (s32) arg0->unk3; - *arg2 = (void *) (*arg2 + 4); - arg2->unk4 = (s32) (arg2->unk4 + 1); + newRoom = (s32)tile->room; + *data->roomBuf = newRoom; + data->lastRoom = newRoom; + data->roomBuf += 1; + data->count += 1; + } + + return; +} + + + + +void noteTileRoomIfDifferentToPrev_2(struct StandTile *tile, struct StandTile *unused, struct StandTileWalkCallbackRecord *data) { + noteTileRoomIfDifferentToPrev(tile, unused, data); +} + + + + + + +#ifdef NONMATCHING +// Not too close + +s32 sub_GAME_7F0B0D0C(struct StandTile *tile, float start_x, float start_z, struct StandTile **tilePtr, + float end_x, float end_z, s32 *roomBuf, s32 maxBufSize) +{ + s32 roomA; + s32 roomB; + s32 bufCount; + struct StandTile* tileStack[2]; // unknown size + struct StandTile* unkTile; + + + bufCount = 0; + tileStack[0] = tile; + + if (*tilePtr != 0x0) { + + roomA = tile->room; + roomB = (*tilePtr)->room; + + if (roomA == roomB) { + *roomBuf = roomA; + return 1; + } + + // function related to portals + // funny & 0xFFs here which we can't reproduce + if (FUN_7f0b8fd0(roomA & 0xFF, roomB & 0xFF) != 0) { + *roomBuf = (s32)tile->room; + roomBuf[1] = (s32)(*tilePtr)->room; + return 2; + } + + } + + if (sub_GAME_7F0B0C24(tileStack,start_x,start_z,end_x,end_z, + roomBuf,&bufCount,maxBufSize) == 0 ) + { + bufCount = 0; + } + else { + if (maxBufSize < bufCount) { + bufCount = maxBufSize; } - } - // Node 3 - return arg0->unk3; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0C98 -/* 0E57C8 7F0B0C98 AFA50004 */ sw $a1, 4($sp) -/* 0E57CC 7F0B0C9C 8CCE000C */ lw $t6, 0xc($a2) -/* 0E57D0 7F0B0CA0 90820003 */ lbu $v0, 3($a0) -/* 0E57D4 7F0B0CA4 11C2000F */ beq $t6, $v0, .L7F0B0CE4 -/* 0E57D8 7F0B0CA8 00000000 */ nop -/* 0E57DC 7F0B0CAC 8CCF0004 */ lw $t7, 4($a2) -/* 0E57E0 7F0B0CB0 8CD80008 */ lw $t8, 8($a2) -/* 0E57E4 7F0B0CB4 01F8082A */ slt $at, $t7, $t8 -/* 0E57E8 7F0B0CB8 1020000A */ beqz $at, .L7F0B0CE4 -/* 0E57EC 7F0B0CBC 00000000 */ nop -/* 0E57F0 7F0B0CC0 8CD90000 */ lw $t9, ($a2) -/* 0E57F4 7F0B0CC4 AF220000 */ sw $v0, ($t9) -/* 0E57F8 7F0B0CC8 8CC80000 */ lw $t0, ($a2) -/* 0E57FC 7F0B0CCC 8CCA0004 */ lw $t2, 4($a2) -/* 0E5800 7F0B0CD0 ACC2000C */ sw $v0, 0xc($a2) -/* 0E5804 7F0B0CD4 25090004 */ addiu $t1, $t0, 4 -/* 0E5808 7F0B0CD8 254B0001 */ addiu $t3, $t2, 1 -/* 0E580C 7F0B0CDC ACC90000 */ sw $t1, ($a2) -/* 0E5810 7F0B0CE0 ACCB0004 */ sw $t3, 4($a2) -.L7F0B0CE4: -/* 0E5814 7F0B0CE4 03E00008 */ jr $ra -/* 0E5818 7F0B0CE8 00000000 */ nop -) -#endif + // Not sure what's going on here. + unkTile = *tilePtr; - - - -void sub_GAME_7F0B0CEC(void) { - sub_GAME_7F0B0C98(); -} - - - - - - -#ifdef NONMATCHING -s32 sub_GAME_7F0B0D0C(void *arg0, s32 arg1, ? arg2, void *arg3, ? arg4, f32 arg5, void *arg6, s32 arg7) { - s32 sp40; - void *sp44; - void *phi_v0; - - // Node 0 - sp40 = 0; - if (*arg3 != 0) - { - // Node 1 - if (arg0->unk3 == *arg3->unk3) - { - // Node 2 - *arg6 = (s32) arg0->unk3; - return sp40; + if (unkTile == 0) { + *tilePtr = tileStack[0]; + unkTile = tileStack[0]; } - // Node 3 - if (sub_GAME_7F0B8FD0((arg0->unk3 & 0xff), (*arg3->unk3 & 0xff), arg0->unk3, *arg3->unk3) != 0) - { - // Node 4 - *arg6 = (s32) arg0->unk3; - arg6->unk4 = (s32) *arg3->unk3; - return sp40; + + if (tileStack[0] != unkTile) { + bufCount = 0; } - } - // Node 5 - if (sub_GAME_7F0B0C24(&sp44, arg1, arg2, arg4, arg5, arg6, &sp40, arg7) == 0) - { - // Node 6 - return sp40; - } - // Node 7 - if (arg7 < sp40) - { - // Node 8 - sp40 = arg7; - } - // Node 9 - phi_v0 = *arg3; - if (*arg3 == 0) - { - // Node 10 - *arg3 = sp44; - phi_v0 = sp44; - } - // Node 11 - if (sp44 == phi_v0) - { - // Node 13 - // Node 14 - return sp40; - } - // Node 12 - return sp40; + } + + return bufCount; } #else GLOBAL_ASM( @@ -3410,11 +3086,14 @@ glabel sub_GAME_7F0B0D0C #endif - - +// sig for caller matches +int sub_GAME_7F0B0E24(struct StandTile **pTile, float p_x, float p_z, float dest_x, float dest_z, + int objFlags, float unkHeight, float unkA, float unkB, float unkC); #ifdef NONMATCHING -void sub_GAME_7F0B0E24(void) { +// 'testLineUnobstructed' +int sub_GAME_7F0B0E24(struct StandTile **pTile, float p_x, float p_z, float dest_x, float dest_z, + int objFlags, float unkHeight, float unkA, float unkB, float unkC) { } #else @@ -3477,20 +3156,20 @@ glabel sub_GAME_7F0B0E24 /* 0E5A24 7F0B0EF4 0FC2C309 */ jal sub_GAME_7F0B0C24 /* 0E5A28 7F0B0EF8 AFB80154 */ sw $t8, 0x154($sp) /* 0E5A2C 7F0B0EFC 8FAC0124 */ lw $t4, 0x124($sp) -/* 0E5A30 7F0B0F00 3C078008 */ lui $a3, %hi(flt_CODE_bss_8007B9F8) +/* 0E5A30 7F0B0F00 3C078008 */ lui $a3, %hi(stanSavedColl_pntB) /* 0E5A34 7F0B0F04 AFA20158 */ sw $v0, 0x158($sp) /* 0E5A38 7F0B0F08 29810015 */ slti $at, $t4, 0x15 /* 0E5A3C 7F0B0F0C 14200003 */ bnez $at, .L7F0B0F1C -/* 0E5A40 7F0B0F10 24E7B9F8 */ addiu $a3, %lo(flt_CODE_bss_8007B9F8) # addiu $a3, $a3, -0x4608 +/* 0E5A40 7F0B0F10 24E7B9F8 */ addiu $a3, %lo(stanSavedColl_pntB) # addiu $a3, $a3, -0x4608 /* 0E5A44 7F0B0F14 240D0014 */ li $t5, 20 /* 0E5A48 7F0B0F18 AFAD0124 */ sw $t5, 0x124($sp) .L7F0B0F1C: /* 0E5A4C 7F0B0F1C 1440003B */ bnez $v0, .L7F0B100C -/* 0E5A50 7F0B0F20 3C1E8008 */ lui $fp, %hi(flt_CODE_bss_8007B9F0) -/* 0E5A54 7F0B0F24 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007B9E4) -/* 0E5A58 7F0B0F28 8C42B9E4 */ lw $v0, %lo(dword_CODE_bss_8007B9E4)($v0) -/* 0E5A5C 7F0B0F2C 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007B9E8) -/* 0E5A60 7F0B0F30 8C63B9E8 */ lw $v1, %lo(dword_CODE_bss_8007B9E8)($v1) +/* 0E5A50 7F0B0F20 3C1E8008 */ lui $fp, %hi(stanSavedColl_pntA) +/* 0E5A54 7F0B0F24 3C028008 */ lui $v0, %hi(stanSavedColl_tile) +/* 0E5A58 7F0B0F28 8C42B9E4 */ lw $v0, %lo(stanSavedColl_tile)($v0) +/* 0E5A5C 7F0B0F2C 3C038008 */ lui $v1, %hi(stanSavedColl_pointI) +/* 0E5A60 7F0B0F30 8C63B9E8 */ lw $v1, %lo(stanSavedColl_pointI)($v1) /* 0E5A64 7F0B0F34 844F0006 */ lh $t7, 6($v0) /* 0E5A68 7F0B0F38 240B0001 */ li $t3, 1 /* 0E5A6C 7F0B0F3C 246E0001 */ addiu $t6, $v1, 1 @@ -3499,7 +3178,7 @@ glabel sub_GAME_7F0B0E24 /* 0E5A78 7F0B0F48 01D9001A */ div $zero, $t6, $t9 /* 0E5A7C 7F0B0F4C 000360C0 */ sll $t4, $v1, 3 /* 0E5A80 7F0B0F50 004C4021 */ addu $t0, $v0, $t4 -/* 0E5A84 7F0B0F54 27DEB9F0 */ addiu $fp, %lo(flt_CODE_bss_8007B9F0) # addiu $fp, $fp, -0x4610 +/* 0E5A84 7F0B0F54 27DEB9F0 */ addiu $fp, %lo(stanSavedColl_pntA) # addiu $fp, $fp, -0x4610 /* 0E5A88 7F0B0F58 17200002 */ bnez $t9, .L7F0B0F64 /* 0E5A8C 7F0B0F5C 00000000 */ nop /* 0E5A90 7F0B0F60 0007000D */ break 7 @@ -3514,8 +3193,8 @@ glabel sub_GAME_7F0B0E24 /* 0E5AAC 7F0B0F7C 3C018004 */ lui $at, %hi(D_800413BC) /* 0E5AB0 7F0B0F80 AC2B13BC */ sw $t3, %lo(D_800413BC)($at) /* 0E5AB4 7F0B0F84 850D0008 */ lh $t5, 8($t0) -/* 0E5AB8 7F0B0F88 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E5ABC 7F0B0F8C C4200F48 */ lwc1 $f0, %lo(D_80040F48)($at) +/* 0E5AB8 7F0B0F88 3C018004 */ lui $at, %hi(inv_level_scale) +/* 0E5ABC 7F0B0F8C C4200F48 */ lwc1 $f0, %lo(inv_level_scale)($at) /* 0E5AC0 7F0B0F90 448D4000 */ mtc1 $t5, $f8 /* 0E5AC4 7F0B0F94 00005010 */ mfhi $t2 /* 0E5AC8 7F0B0F98 000AC0C0 */ sll $t8, $t2, 3 @@ -3548,12 +3227,12 @@ glabel sub_GAME_7F0B0E24 /* 0E5B34 7F0B1004 10000003 */ b .L7F0B1014 /* 0E5B38 7F0B1008 46000706 */ mov.s $f28, $f0 .L7F0B100C: -/* 0E5B3C 7F0B100C 3C1E8008 */ lui $fp, %hi(flt_CODE_bss_8007B9F0) -/* 0E5B40 7F0B1010 27DEB9F0 */ addiu $fp, %lo(flt_CODE_bss_8007B9F0) # addiu $fp, $fp, -0x4610 +/* 0E5B3C 7F0B100C 3C1E8008 */ lui $fp, %hi(stanSavedColl_pntA) +/* 0E5B40 7F0B1010 27DEB9F0 */ addiu $fp, %lo(stanSavedColl_pntA) # addiu $fp, $fp, -0x4610 .L7F0B1014: /* 0E5B44 7F0B1014 8FAB0174 */ lw $t3, 0x174($sp) -/* 0E5B48 7F0B1018 3C178008 */ lui $s7, %hi(dword_CODE_bss_8007BA04) -/* 0E5B4C 7F0B101C 26F7BA04 */ addiu $s7, %lo(dword_CODE_bss_8007BA04) # addiu $s7, $s7, -0x45fc +/* 0E5B48 7F0B1018 3C178008 */ lui $s7, %hi(stanSavedColl_posData) +/* 0E5B4C 7F0B101C 26F7BA04 */ addiu $s7, %lo(stanSavedColl_posData) # addiu $s7, $s7, -0x45fc /* 0E5B50 7F0B1020 116000CF */ beqz $t3, .L7F0B1360 /* 0E5B54 7F0B1024 AEE00000 */ sw $zero, ($s7) /* 0E5B58 7F0B1028 8FAD0124 */ lw $t5, 0x124($sp) @@ -3742,19 +3421,19 @@ glabel sub_GAME_7F0B0E24 /* 0E5E14 7F0B12E4 AC2D13BC */ sw $t5, %lo(D_800413BC)($at) /* 0E5E18 7F0B12E8 8E610000 */ lw $at, ($s3) /* 0E5E1C 7F0B12EC 8E780004 */ lw $t8, 4($s3) -/* 0E5E20 7F0B12F0 3C0E8008 */ lui $t6, %hi(flt_CODE_bss_8007B9F8) +/* 0E5E20 7F0B12F0 3C0E8008 */ lui $t6, %hi(stanSavedColl_pntB) /* 0E5E24 7F0B12F4 AFC10000 */ sw $at, ($fp) /* 0E5E28 7F0B12F8 8E810000 */ lw $at, ($s4) -/* 0E5E2C 7F0B12FC 25CEB9F8 */ addiu $t6, %lo(flt_CODE_bss_8007B9F8) # addiu $t6, $t6, -0x4608 +/* 0E5E2C 7F0B12FC 25CEB9F8 */ addiu $t6, %lo(stanSavedColl_pntB) # addiu $t6, $t6, -0x4608 /* 0E5E30 7F0B1300 AFD80004 */ sw $t8, 4($fp) /* 0E5E34 7F0B1304 ADC10000 */ sw $at, ($t6) /* 0E5E38 7F0B1308 8E8D0004 */ lw $t5, 4($s4) -/* 0E5E3C 7F0B130C 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B9E4) +/* 0E5E3C 7F0B130C 3C018008 */ lui $at, %hi(stanSavedColl_tile) /* 0E5E40 7F0B1310 4600B706 */ mov.s $f28, $f22 /* 0E5E44 7F0B1314 ADCD0004 */ sw $t5, 4($t6) -/* 0E5E48 7F0B1318 AC20B9E4 */ sw $zero, %lo(dword_CODE_bss_8007B9E4)($at) -/* 0E5E4C 7F0B131C 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B9E8) -/* 0E5E50 7F0B1320 AC20B9E8 */ sw $zero, %lo(dword_CODE_bss_8007B9E8)($at) +/* 0E5E48 7F0B1318 AC20B9E4 */ sw $zero, %lo(stanSavedColl_tile)($at) +/* 0E5E4C 7F0B131C 3C018008 */ lui $at, %hi(stanSavedColl_pointI) +/* 0E5E50 7F0B1320 AC20B9E8 */ sw $zero, %lo(stanSavedColl_pointI)($at) /* 0E5E54 7F0B1324 AEF60000 */ sw $s6, ($s7) /* 0E5E58 7F0B1328 AFA00154 */ sw $zero, 0x154($sp) .L7F0B132C: @@ -3799,10 +3478,10 @@ glabel sub_GAME_7F0B0E24 /* 0E5EE0 7F0B13B0 8FAB0154 */ lw $t3, 0x154($sp) .L7F0B13B4: /* 0E5EE4 7F0B13B4 8FB90160 */ lw $t9, 0x160($sp) -/* 0E5EE8 7F0B13B8 3C018008 */ lui $at, %hi(flt_CODE_bss_8007BA00) +/* 0E5EE8 7F0B13B8 3C018008 */ lui $at, %hi(stanSavedColl_someMin) /* 0E5EEC 7F0B13BC AF2B0000 */ sw $t3, ($t9) /* 0E5EF0 7F0B13C0 8FBF007C */ lw $ra, 0x7c($sp) -/* 0E5EF4 7F0B13C4 E43CBA00 */ swc1 $f28, %lo(flt_CODE_bss_8007BA00)($at) +/* 0E5EF4 7F0B13C4 E43CBA00 */ swc1 $f28, %lo(stanSavedColl_someMin)($at) /* 0E5EF8 7F0B13C8 D7BC0048 */ ldc1 $f28, 0x48($sp) /* 0E5EFC 7F0B13CC 8FBE0078 */ lw $fp, 0x78($sp) /* 0E5F00 7F0B13D0 8FB70074 */ lw $s7, 0x74($sp) @@ -4027,32 +3706,41 @@ glabel sub_GAME_7F0B1410 #ifdef NONMATCHING -f32 sub_GAME_7F0B16C4(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { - f32 sp1C; - f32 sp20; - f32 temp_f2; - f32 temp_f16; - ? temp_ret; - f32 temp_f0; - f32 temp_f2_2; +// general regalloc +float sub_GAME_7F0B16C4(float a_x,float a_z,float b_x,float b_z,float c_x,float c_z) +{ + float AB_x; + float AB_y; // unused + float AB_z; - // Node 0 - temp_f2 = (arg2 - arg0); - temp_f16 = (arg3 - arg1); - sp20 = temp_f2; - sp1C = temp_f16; - temp_ret = sqrtf(((temp_f2 * temp_f2) + (temp_f16 * temp_f16))); - if (temp_ret != 0.0f) - { - // Node 2 - // Node 3 - return (((temp_f16 * (arg4 - arg0)) + (-temp_f2 * (arg5 - arg1))) / temp_ret); + float dist; + + float BC_x; + float BC_y; // unused + float BC_z; + + float AC_x; + float AC_y; // unused + float AC_z; + + AB_x = b_x - a_x; + AB_z = b_z - a_z; + dist = sqrtf(AB_x * AB_x + AB_z * AB_z); + + if (dist == 0) { + BC_x = c_x - b_x; + BC_z = c_z - b_z; + return sqrtf(BC_x*BC_x + BC_z*BC_z); } - // Node 1 - temp_f0 = (arg4 - arg2); - temp_f2_2 = (arg5 - arg3); - return (((temp_f16 * (arg4 - arg0)) + (-temp_f2 * (arg5 - arg1))) / temp_ret); + else { + AC_x = c_x - a_x; + AC_z = c_z - a_z; + return (AB_z * AC_x + -AB_x * AC_z) / dist; + } + + return dist; } + #else GLOBAL_ASM( .text @@ -4117,125 +3805,50 @@ glabel sub_GAME_7F0B16C4 - -#ifdef NONMATCHING -void sub_GAME_7F0B1794(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - f32 temp_f8; - f32 temp_f16; - - // Node 0 - temp_f8 = (arg2 - arg0); - temp_f16 = (arg3 - arg1); - arg2 = temp_f8; - arg3 = temp_f16; - sqrtf(((temp_f8 * temp_f8) + (temp_f16 * temp_f16))); +float distBetweenPoints2d(float o_x,float o_z,float p_x,float p_z) +{ + p_x -= o_x; + p_z -= o_z; + return sqrtf(p_x*p_x + p_z*p_z); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B1794 -/* 0E62C4 7F0B1794 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E62C8 7F0B1798 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0E62CC 7F0B179C AFA60020 */ sw $a2, 0x20($sp) -/* 0E62D0 7F0B17A0 C7A40020 */ lwc1 $f4, 0x20($sp) -/* 0E62D4 7F0B17A4 C7A60018 */ lwc1 $f6, 0x18($sp) -/* 0E62D8 7F0B17A8 AFA70024 */ sw $a3, 0x24($sp) -/* 0E62DC 7F0B17AC C7AA0024 */ lwc1 $f10, 0x24($sp) -/* 0E62E0 7F0B17B0 46062201 */ sub.s $f8, $f4, $f6 -/* 0E62E4 7F0B17B4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E62E8 7F0B17B8 460E5401 */ sub.s $f16, $f10, $f14 -/* 0E62EC 7F0B17BC 46084482 */ mul.s $f18, $f8, $f8 -/* 0E62F0 7F0B17C0 E7A80020 */ swc1 $f8, 0x20($sp) -/* 0E62F4 7F0B17C4 46108102 */ mul.s $f4, $f16, $f16 -/* 0E62F8 7F0B17C8 E7B00024 */ swc1 $f16, 0x24($sp) -/* 0E62FC 7F0B17CC 0C007DF8 */ jal sqrtf -/* 0E6300 7F0B17D0 46049300 */ add.s $f12, $f18, $f4 -/* 0E6304 7F0B17D4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E6308 7F0B17D8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E630C 7F0B17DC 03E00008 */ jr $ra -/* 0E6310 7F0B17E0 00000000 */ nop -) -#endif #ifdef NONMATCHING -s32 sub_GAME_7F0B17E4(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { - f32 temp_f6; - f32 temp_f10; - f32 temp_f0; - f32 temp_f2; - f32 temp_f18; - f32 temp_f16; - s32 phi_v0; - s32 phi_v0_2; - s32 phi_v0_3; +// Not 100% sure it's logically equivalent. +// Pretty sure the test at least needs rephrasing to match. +s32 sub_GAME_7F0B17E4(float a_x,float a_z,float b_x,float b_z,float c_x,float c_z) +{ + float AB_x; + float AB_z; + float len_AB_sq; + float AC_x; + float AC_z; + float AC_dot_AB; + + AB_x = b_x - a_x; + AB_z = b_z - a_z; + len_AB_sq = AB_x * AB_x + AB_z * AB_z; - // Node 0 - temp_f6 = (arg4 - arg0); - temp_f10 = (arg5 - arg1); - arg4 = temp_f6; - temp_f0 = (arg2 - arg0); - arg5 = temp_f10; - temp_f2 = (arg3 - arg1); - temp_f18 = ((temp_f0 * temp_f0) + (temp_f2 * temp_f2)); - temp_f16 = ((temp_f6 * temp_f0) + (temp_f10 * temp_f2)); - phi_v0 = 0; - if (temp_f18 < temp_f16) - { - // Node 1 - phi_v0 = 1; + AC_x = c_x - a_x; + AC_z = c_z - a_z; + AC_dot_AB = AC_x * AB_x + AC_z * AB_z; + + // This appears to be A correct formulation, but the first statement is obviously false (requires length < 0) + // + if ( + ((AC_dot_AB > len_AB_sq) && (AC_dot_AB < 0)) // = false + || (0 < AC_dot_AB && AC_dot_AB < len_AB_sq) // AC_dot_AB in (0, len_AB_sq) + ){ + return 1; } - // Node 2 - if ((phi_v0 != 0) && (temp_f16 < 0.0f)) - { - // Node 4 - phi_v0_2 = 1; - // Node 5 - if (phi_v0_2 == 0) - { - // Node 6 - phi_v0_3 = 0; - if (0.0f < temp_f16) - { - // Node 7 - phi_v0_3 = 1; - } - // Node 8 - if (phi_v0_3 != 0) - { - // Node 9 - if (temp_f16 < temp_f18) - { - // Node 10 - } - } - } - } - else - { - // Node 6 - phi_v0_3 = 0; - if (0.0f < temp_f16) - { - // Node 7 - phi_v0_3 = 1; - } - // Node 8 - if (phi_v0_3 != 0) - { - // Node 9 - if (temp_f16 < temp_f18) - { - // Node 10 - } - } - } - // Node 11 + return 0; + } + #else GLOBAL_ASM( .text @@ -4365,8 +3978,8 @@ glabel sub_GAME_7F0B18B8 /* 0E64A4 7F0B1974 AFB900FC */ sw $t9, 0xfc($sp) .L7F0B1978: /* 0E64A8 7F0B1978 8FA80130 */ lw $t0, 0x130($sp) -/* 0E64AC 7F0B197C 3C018008 */ lui $at, %hi(dword_CODE_bss_8007BA04) -/* 0E64B0 7F0B1980 AC20BA04 */ sw $zero, %lo(dword_CODE_bss_8007BA04)($at) +/* 0E64AC 7F0B197C 3C018008 */ lui $at, %hi(stanSavedColl_posData) +/* 0E64B0 7F0B1980 AC20BA04 */ sw $zero, %lo(stanSavedColl_posData)($at) /* 0E64B4 7F0B1984 510000BD */ beql $t0, $zero, .L7F0B1C7C /* 0E64B8 7F0B1988 2402FFFE */ li $v0, -2 /* 0E64BC 7F0B198C 5200000C */ beql $s0, $zero, .L7F0B19C0 @@ -4391,17 +4004,17 @@ glabel sub_GAME_7F0B18B8 /* 0E6504 7F0B19D4 AD890000 */ sw $t1, ($t4) /* 0E6508 7F0B19D8 3C038007 */ lui $v1, %hi(ptr_list_object_lookup_indices) /* 0E650C 7F0B19DC 8C639C30 */ lw $v1, %lo(ptr_list_object_lookup_indices)($v1) -/* 0E6510 7F0B19E0 3C1E8008 */ lui $fp, %hi(dword_CODE_bss_8007B9E4) +/* 0E6510 7F0B19E0 3C1E8008 */ lui $fp, %hi(stanSavedColl_tile) /* 0E6514 7F0B19E4 3C168004 */ lui $s6, %hi(D_800413BC) /* 0E6518 7F0B19E8 84620000 */ lh $v0, ($v1) /* 0E651C 7F0B19EC 26D613BC */ addiu $s6, %lo(D_800413BC) # addiu $s6, $s6, 0x13bc -/* 0E6520 7F0B19F0 27DEB9E4 */ addiu $fp, %lo(dword_CODE_bss_8007B9E4) # addiu $fp, $fp, -0x461c +/* 0E6520 7F0B19F0 27DEB9E4 */ addiu $fp, %lo(stanSavedColl_tile) # addiu $fp, $fp, -0x461c /* 0E6524 7F0B19F4 044000A0 */ bltz $v0, .L7F0B1C78 /* 0E6528 7F0B19F8 24170001 */ li $s7, 1 -/* 0E652C 7F0B19FC 3C148008 */ lui $s4, %hi(flt_CODE_bss_8007B9F8) -/* 0E6530 7F0B1A00 3C138008 */ lui $s3, %hi(flt_CODE_bss_8007B9F0) -/* 0E6534 7F0B1A04 2673B9F0 */ addiu $s3, %lo(flt_CODE_bss_8007B9F0) # addiu $s3, $s3, -0x4610 -/* 0E6538 7F0B1A08 2694B9F8 */ addiu $s4, %lo(flt_CODE_bss_8007B9F8) # addiu $s4, $s4, -0x4608 +/* 0E652C 7F0B19FC 3C148008 */ lui $s4, %hi(stanSavedColl_pntB) +/* 0E6530 7F0B1A00 3C138008 */ lui $s3, %hi(stanSavedColl_pntA) +/* 0E6534 7F0B1A04 2673B9F0 */ addiu $s3, %lo(stanSavedColl_pntA) # addiu $s3, $s3, -0x4610 +/* 0E6538 7F0B1A08 2694B9F8 */ addiu $s4, %lo(stanSavedColl_pntB) # addiu $s4, $s4, -0x4608 /* 0E653C 7F0B1A0C AFA30100 */ sw $v1, 0x100($sp) /* 0E6540 7F0B1A10 00026880 */ sll $t5, $v0, 2 .L7F0B1A14: @@ -4490,7 +4103,7 @@ glabel sub_GAME_7F0B18B8 /* 0E6678 7F0B1B48 4407E000 */ mfc1 $a3, $f28 /* 0E667C 7F0B1B4C 01911021 */ addu $v0, $t4, $s1 /* 0E6680 7F0B1B50 C44C0000 */ lwc1 $f12, ($v0) -/* 0E6684 7F0B1B54 0FC2C5E5 */ jal sub_GAME_7F0B1794 +/* 0E6684 7F0B1B54 0FC2C5E5 */ jal distBetweenPoints2d /* 0E6688 7F0B1B58 C44E0004 */ lwc1 $f14, 4($v0) /* 0E668C 7F0B1B5C 8FAD00A4 */ lw $t5, 0xa4($sp) /* 0E6690 7F0B1B60 001280C0 */ sll $s0, $s2, 3 @@ -4499,7 +4112,7 @@ glabel sub_GAME_7F0B18B8 /* 0E669C 7F0B1B6C 01B01821 */ addu $v1, $t5, $s0 /* 0E66A0 7F0B1B70 46000586 */ mov.s $f22, $f0 /* 0E66A4 7F0B1B74 C46C0000 */ lwc1 $f12, ($v1) -/* 0E66A8 7F0B1B78 0FC2C5E5 */ jal sub_GAME_7F0B1794 +/* 0E66A8 7F0B1B78 0FC2C5E5 */ jal distBetweenPoints2d /* 0E66AC 7F0B1B7C C46E0004 */ lwc1 $f14, 4($v1) /* 0E66B0 7F0B1B80 461EA03C */ c.lt.s $f20, $f30 /* 0E66B4 7F0B1B84 00000000 */ nop @@ -4532,7 +4145,7 @@ glabel sub_GAME_7F0B18B8 /* 0E671C 7F0B1BEC 01F11021 */ addu $v0, $t7, $s1 /* 0E6720 7F0B1BF0 C4520000 */ lwc1 $f18, ($v0) /* 0E6724 7F0B1BF4 03101821 */ addu $v1, $t8, $s0 -/* 0E6728 7F0B1BF8 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B9E8) +/* 0E6728 7F0B1BF8 3C018008 */ lui $at, %hi(stanSavedColl_pointI) /* 0E672C 7F0B1BFC E6720000 */ swc1 $f18, ($s3) /* 0E6730 7F0B1C00 C4440004 */ lwc1 $f4, 4($v0) /* 0E6734 7F0B1C04 4600A606 */ mov.s $f24, $f20 @@ -4542,9 +4155,9 @@ glabel sub_GAME_7F0B18B8 /* 0E6744 7F0B1C14 C4680004 */ lwc1 $f8, 4($v1) /* 0E6748 7F0B1C18 AFC00000 */ sw $zero, ($fp) /* 0E674C 7F0B1C1C E6880004 */ swc1 $f8, 4($s4) -/* 0E6750 7F0B1C20 AC20B9E8 */ sw $zero, %lo(dword_CODE_bss_8007B9E8)($at) -/* 0E6754 7F0B1C24 3C018008 */ lui $at, %hi(dword_CODE_bss_8007BA04) -/* 0E6758 7F0B1C28 AC35BA04 */ sw $s5, %lo(dword_CODE_bss_8007BA04)($at) +/* 0E6750 7F0B1C20 AC20B9E8 */ sw $zero, %lo(stanSavedColl_pointI)($at) +/* 0E6754 7F0B1C24 3C018008 */ lui $at, %hi(stanSavedColl_posData) +/* 0E6758 7F0B1C28 AC35BA04 */ sw $s5, %lo(stanSavedColl_posData)($at) .L7F0B1C2C: /* 0E675C 7F0B1C2C 52400004 */ beql $s2, $zero, .L7F0B1C40 /* 0E6760 7F0B1C30 3C01BF80 */ lui $at, 0xbf80 @@ -4598,48 +4211,55 @@ glabel sub_GAME_7F0B18B8 void sub_GAME_7F0B1CC4(void) { - dword_CODE_bss_8007B9E4 = 0; - dword_CODE_bss_8007B9E8 = 0; + stanSavedColl_tile = 0; + stanSavedColl_pointI = 0; D_800413BC = 0; } -s32 sub_GAME_7F0B1CE0(void) { - return dword_CODE_bss_8007B9E4; +struct StandTile* sub_GAME_7F0B1CE0(void) { + return stanSavedColl_tile; } s32 sub_GAME_7F0B1CEC(void) { - return dword_CODE_bss_8007B9E8; + return stanSavedColl_pointI; } - - +// sig for caller matches +void getTileEdgePoints(struct StandTile *tile, s32 pointI, struct float3 *currPntRtn, struct float3 *nextPointRtn); #ifdef NONMATCHING -void *sub_GAME_7F0B1CF8(void *arg0, s32 arg1, void *arg2, void *arg3) { - void *temp_v0; - void *temp_v0_2; +// Not debugged at all - can't be far wrong though. +void getTileEdgePoints(struct StandTile *tile, s32 pointI, struct float3 *currPntRtn, struct float3 *nextPointRtn) +{ + struct StandTilePoint *tilePntA; + struct StandTilePoint *tilePntB; + s32 pointCount; + + tilePntA = &tile->points[pointI]; - // Node 0 - temp_v0 = (arg0 + (arg1 * 8)); - *arg2 = (f32) ((f32) temp_v0->unk8 * D_80040F48); - arg2->unk4 = (f32) ((f32) temp_v0->unkA * D_80040F48); - arg2->unk8 = (f32) ((f32) temp_v0->unkC * D_80040F48); - temp_v0_2 = (arg0 + (((s32) (arg1 + 1) % (s32) (((s32) arg0->unk6 >> 0xc) & 0xf)) * 8)); - *arg3 = (f32) ((f32) temp_v0_2->unk8 * D_80040F48); - arg3->unk4 = (f32) ((f32) temp_v0_2->unkA * D_80040F48); - arg3->unk8 = (f32) ((f32) temp_v0_2->unkC * D_80040F48); - return temp_v0_2; + currPntRtn->x = (float)tilePntA->x * inv_level_scale; + currPntRtn->y = (float)tilePntA->y * inv_level_scale; + currPntRtn->z = (float)tilePntA->z * inv_level_scale; + + pointCount = STAN_POINT_COUNT(tile); + tilePntB = &tile->points[(pointI + 1) % pointCount]; + + + nextPointRtn->x = (float)tilePntB->x * inv_level_scale; + nextPointRtn->y = (float)tilePntB->y * inv_level_scale; + nextPointRtn->z = (float)tilePntB->z * inv_level_scale; + } #else GLOBAL_ASM( .text -glabel sub_GAME_7F0B1CF8 +glabel getTileEdgePoints /* 0E6828 7F0B1CF8 000570C0 */ sll $t6, $a1, 3 /* 0E682C 7F0B1CFC 008E1021 */ addu $v0, $a0, $t6 /* 0E6830 7F0B1D00 844F0008 */ lh $t7, 8($v0) -/* 0E6834 7F0B1D04 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E6838 7F0B1D08 C4200F48 */ lwc1 $f0, %lo(D_80040F48)($at) +/* 0E6834 7F0B1D04 3C018004 */ lui $at, %hi(inv_level_scale) +/* 0E6838 7F0B1D08 C4200F48 */ lwc1 $f0, %lo(inv_level_scale)($at) /* 0E683C 7F0B1D0C 448F2000 */ mtc1 $t7, $f4 /* 0E6840 7F0B1D10 24A80001 */ addiu $t0, $a1, 1 /* 0E6844 7F0B1D14 468021A0 */ cvt.s.w $f6, $f4 @@ -4697,9 +4317,12 @@ glabel sub_GAME_7F0B1CF8 ) #endif - - - +// Sig for caller matches +// Note it's not clear from caller usage alone what the type of C's 5th parameter is +s32 sub_GAME_7F0B1DDC(struct StandTile**, float, float, float, + standTileLocusCallback_A_t, standTileLocusCallback_B_t, standTileLocusCallback_C_t, + struct StandTileLocusCallbackRecord* +); #ifdef NONMATCHING void sub_GAME_7F0B1DDC(void) { @@ -4711,9 +4334,9 @@ GLOBAL_ASM( glabel sub_GAME_7F0B1DDC /* 0E690C 7F0B1DDC 27BDFEB0 */ addiu $sp, $sp, -0x150 /* 0E6910 7F0B1DE0 F7BA0038 */ sdc1 $f26, 0x38($sp) -/* 0E6914 7F0B1DE4 3C018004 */ lui $at, %hi(D_80040F44) +/* 0E6914 7F0B1DE4 3C018004 */ lui $at, %hi(level_scale) /* 0E6918 7F0B1DE8 4485D000 */ mtc1 $a1, $f26 -/* 0E691C 7F0B1DEC C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) +/* 0E691C 7F0B1DEC C4200F44 */ lwc1 $f0, %lo(level_scale)($at) /* 0E6920 7F0B1DF0 F7BC0040 */ sdc1 $f28, 0x40($sp) /* 0E6924 7F0B1DF4 4486E000 */ mtc1 $a2, $f28 /* 0E6928 7F0B1DF8 4600D682 */ mul.s $f26, $f26, $f0 @@ -4782,19 +4405,19 @@ glabel sub_GAME_7F0B1DDC .L7F0B1EE4: /* 0E6A14 7F0B1EE4 4407E000 */ mfc1 $a3, $f28 /* 0E6A18 7F0B1EE8 02602025 */ move $a0, $s3 -/* 0E6A1C 7F0B1EEC 0FC2BF47 */ jal sub_GAME_7F0AFD1C +/* 0E6A1C 7F0B1EEC 0FC2BF47 */ jal getShortest2dDispToInfTileEdge /* 0E6A20 7F0B1EF0 02002825 */ move $a1, $s0 /* 0E6A24 7F0B1EF4 4406D000 */ mfc1 $a2, $f26 /* 0E6A28 7F0B1EF8 4407E000 */ mfc1 $a3, $f28 /* 0E6A2C 7F0B1EFC 46000586 */ mov.s $f22, $f0 /* 0E6A30 7F0B1F00 02602025 */ move $a0, $s3 -/* 0E6A34 7F0B1F04 0FC2C019 */ jal sub_GAME_7F0B0064 +/* 0E6A34 7F0B1F04 0FC2C019 */ jal distToTilePnt2D /* 0E6A38 7F0B1F08 02002825 */ move $a1, $s0 /* 0E6A3C 7F0B1F0C 4406D000 */ mfc1 $a2, $f26 /* 0E6A40 7F0B1F10 4407E000 */ mfc1 $a3, $f28 /* 0E6A44 7F0B1F14 46000506 */ mov.s $f20, $f0 /* 0E6A48 7F0B1F18 02602025 */ move $a0, $s3 -/* 0E6A4C 7F0B1F1C 0FC2C019 */ jal sub_GAME_7F0B0064 +/* 0E6A4C 7F0B1F1C 0FC2C019 */ jal distToTilePnt2D /* 0E6A50 7F0B1F20 02202825 */ move $a1, $s1 /* 0E6A54 7F0B1F24 461EB03C */ c.lt.s $f22, $f30 /* 0E6A58 7F0B1F28 46000606 */ mov.s $f24, $f0 @@ -4828,12 +4451,12 @@ glabel sub_GAME_7F0B1DDC /* 0E6AC0 7F0B1F90 001068C0 */ sll $t5, $s0, 3 /* 0E6AC4 7F0B1F94 026D7021 */ addu $t6, $s3, $t5 /* 0E6AC8 7F0B1F98 95C4000E */ lhu $a0, 0xe($t6) -/* 0E6ACC 7F0B1F9C 3C088004 */ lui $t0, %hi(base_ptr_connection_vals) +/* 0E6ACC 7F0B1F9C 3C088004 */ lui $t0, %hi(standTileStart) /* 0E6AD0 7F0B1FA0 2682FFFF */ addiu $v0, $s4, -1 /* 0E6AD4 7F0B1FA4 00047903 */ sra $t7, $a0, 4 /* 0E6AD8 7F0B1FA8 11E00014 */ beqz $t7, .L7F0B1FFC /* 0E6ADC 7F0B1FAC 0004C8C0 */ sll $t9, $a0, 3 -/* 0E6AE0 7F0B1FB0 8D080F58 */ lw $t0, %lo(base_ptr_connection_vals)($t0) +/* 0E6AE0 7F0B1FB0 8D080F58 */ lw $t0, %lo(standTileStart)($t0) /* 0E6AE4 7F0B1FB4 00402825 */ move $a1, $v0 /* 0E6AE8 7F0B1FB8 0440000B */ bltz $v0, .L7F0B1FE8 /* 0E6AEC 7F0B1FBC 03281821 */ addu $v1, $t9, $t0 @@ -4855,11 +4478,11 @@ glabel sub_GAME_7F0B1DDC /* 0E6B24 7F0B1FF4 1000000F */ b .L7F0B2034 /* 0E6B28 7F0B1FF8 26940001 */ addiu $s4, $s4, 1 .L7F0B1FFC: -/* 0E6B2C 7F0B1FFC 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B9E4) -/* 0E6B30 7F0B2000 AC33B9E4 */ sw $s3, %lo(dword_CODE_bss_8007B9E4)($at) -/* 0E6B34 7F0B2004 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B9E8) +/* 0E6B2C 7F0B1FFC 3C018008 */ lui $at, %hi(stanSavedColl_tile) +/* 0E6B30 7F0B2000 AC33B9E4 */ sw $s3, %lo(stanSavedColl_tile)($at) +/* 0E6B34 7F0B2004 3C018008 */ lui $at, %hi(stanSavedColl_pointI) /* 0E6B38 7F0B2008 13C00008 */ beqz $fp, .L7F0B202C -/* 0E6B3C 7F0B200C AC30B9E8 */ sw $s0, %lo(dword_CODE_bss_8007B9E8)($at) +/* 0E6B3C 7F0B200C AC30B9E8 */ sw $s0, %lo(stanSavedColl_pointI)($at) /* 0E6B40 7F0B2010 27A400B0 */ addiu $a0, $sp, 0xb0 /* 0E6B44 7F0B2014 02802825 */ move $a1, $s4 /* 0E6B48 7F0B2018 03C0F809 */ jalr $fp @@ -4921,78 +4544,39 @@ glabel sub_GAME_7F0B1DDC - -#ifdef NONMATCHING -void sub_GAME_7F0B20D0(s32 arg1, ? arg2, ? arg3) { - // Node 0 - sub_GAME_7F0B1DDC(arg1, arg2, arg1, arg2, 0, 0, 0, 0); +s32 sub_GAME_7F0B20D0(struct StandTile** tileStack, float target_x, float target_z, float unknown) { + return sub_GAME_7F0B1DDC(tileStack, target_x, target_z, unknown, 0, 0, 0, 0); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B20D0 -/* 0E6C00 7F0B20D0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0E6C04 7F0B20D4 44856000 */ mtc1 $a1, $f12 -/* 0E6C08 7F0B20D8 44867000 */ mtc1 $a2, $f14 -/* 0E6C0C 7F0B20DC AFBF0024 */ sw $ra, 0x24($sp) -/* 0E6C10 7F0B20E0 44056000 */ mfc1 $a1, $f12 -/* 0E6C14 7F0B20E4 44067000 */ mfc1 $a2, $f14 -/* 0E6C18 7F0B20E8 AFA70034 */ sw $a3, 0x34($sp) -/* 0E6C1C 7F0B20EC AFA00010 */ sw $zero, 0x10($sp) -/* 0E6C20 7F0B20F0 AFA00014 */ sw $zero, 0x14($sp) -/* 0E6C24 7F0B20F4 AFA00018 */ sw $zero, 0x18($sp) -/* 0E6C28 7F0B20F8 0FC2C777 */ jal sub_GAME_7F0B1DDC -/* 0E6C2C 7F0B20FC AFA0001C */ sw $zero, 0x1c($sp) -/* 0E6C30 7F0B2100 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E6C34 7F0B2104 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0E6C38 7F0B2108 03E00008 */ jr $ra -/* 0E6C3C 7F0B210C 00000000 */ nop -) -#endif - - - +// sig for caller matches +s32 sub_GAME_7F0B2110(struct StandTile* tile, struct StandTileLocusCallbackRecord*); #ifdef NONMATCHING -void sub_GAME_7F0B2110(void *arg0, void *arg1) { - s32 temp_v1; - void *phi_t0; - s32 phi_v1; - // Node 0 - if (arg1->unk4 > 0) +// Regalloc and a little reordering to solve, but there just seems to be nothing to work with in the loop. +// Indexing roomBuf makes sense and generates closer code. +// 'addTileRoomIfNew' +s32 sub_GAME_7F0B2110(struct StandTile* tile, struct StandTileLocusCallbackRecord* data) +{ + s32 i; + s32 room; + + for (i = 0; i < data->count; i++) { - // Node 1 - phi_t0 = *arg1; - phi_v1 = 0; -loop_2: - // Node 2 - if (arg0->unk3 == *phi_t0) - { - // Node 3 + if (data->roomBuf[i] == tile->room) { return 0; } - // Node 4 - temp_v1 = (phi_v1 + 1); - phi_t0 = (phi_t0 + 4); - phi_v1 = temp_v1; - if (temp_v1 < arg1->unk4) - { - goto loop_2; - } } - // Node 5 - if (arg1->unk4 < arg1->unk8) - { - // Node 6 - *(*arg1 + (arg1->unk4 * 4)) = (s32) arg0->unk3; - arg1->unk4 = (s32) (arg1->unk4 + 1); + + if (data->count < data->bufMax) { + data->roomBuf[data->count] = tile->room; + data->count++; } - // Node 7 + return 0; } + #else GLOBAL_ASM( .text @@ -5041,111 +4625,53 @@ glabel sub_GAME_7F0B2110 - -#ifdef NONMATCHING -void sub_GAME_7F0B2194(s32 arg0, s32 arg1, void *arg2) { - // Node 0 - arg2->unkC = (s32) (arg2->unkC + 1); +s32 incrNearEdgeCount(struct StandTile** tileStack, s32 stackHeight, struct StandTileLocusCallbackRecord* data) { + data->nearEdgeCount += 1; return 1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2194 -/* 0E6CC4 7F0B2194 AFA40000 */ sw $a0, ($sp) -/* 0E6CC8 7F0B2198 AFA50004 */ sw $a1, 4($sp) -/* 0E6CCC 7F0B219C 8CCE000C */ lw $t6, 0xc($a2) -/* 0E6CD0 7F0B21A0 24020001 */ li $v0, 1 -/* 0E6CD4 7F0B21A4 25CF0001 */ addiu $t7, $t6, 1 -/* 0E6CD8 7F0B21A8 03E00008 */ jr $ra -/* 0E6CDC 7F0B21AC ACCF000C */ sw $t7, 0xc($a2) -) -#endif +s32 sub_GAME_7F0B21B0(struct StandTile **tileStack, float target_x, float target_z, float unknown, s32 *roomBuf, s32 *count_rtn, s32 bufMax){ + struct StandTileLocusCallbackRecord data; + s32 rtn; -#ifdef NONMATCHING -s32 sub_GAME_7F0B21B0(s32 arg1, ? arg2, ? arg3, ?32 arg4, void *arg5, ?32 arg6) { - ?32 sp30; - ?32 sp34; - ?32 sp38; - s32 sp3C; + data.roomBuf = roomBuf; + data.count = 0; + data.bufMax = bufMax; + data.nearEdgeCount = 0; - // Node 0 - sp34 = 0; - sp3C = 0; - sp30 = arg4; - sp38 = arg6; - *arg5 = sp34; - if (sp3C >= 2) - { - // Node 1 + rtn = sub_GAME_7F0B1DDC(tileStack, target_x, target_z, unknown, + sub_GAME_7F0B2110, 0x0, incrNearEdgeCount, &data + ); + + *count_rtn = data.count; + + if (1 < data.nearEdgeCount) { + return 2; } - // Node 2 - return sub_GAME_7F0B1DDC(arg1, arg2, arg1, arg2, &sub_GAME_7F0B2110, 0, &sub_GAME_7F0B2194, &sp30); + + return rtn; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B21B0 -/* 0E6CE0 7F0B21B0 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E6CE4 7F0B21B4 44856000 */ mtc1 $a1, $f12 -/* 0E6CE8 7F0B21B8 44867000 */ mtc1 $a2, $f14 -/* 0E6CEC 7F0B21BC 8FAE0050 */ lw $t6, 0x50($sp) -/* 0E6CF0 7F0B21C0 8FAF0058 */ lw $t7, 0x58($sp) -/* 0E6CF4 7F0B21C4 3C187F0B */ lui $t8, %hi(sub_GAME_7F0B2110) # $t8, 0x7f0b -/* 0E6CF8 7F0B21C8 3C197F0B */ lui $t9, %hi(sub_GAME_7F0B2194) # $t9, 0x7f0b -/* 0E6CFC 7F0B21CC AFBF0024 */ sw $ra, 0x24($sp) -/* 0E6D00 7F0B21D0 27392194 */ addiu $t9, %lo(sub_GAME_7F0B2194) # addiu $t9, $t9, 0x2194 -/* 0E6D04 7F0B21D4 27182110 */ addiu $t8, %lo(sub_GAME_7F0B2110) # addiu $t8, $t8, 0x2110 -/* 0E6D08 7F0B21D8 27A80030 */ addiu $t0, $sp, 0x30 -/* 0E6D0C 7F0B21DC 44056000 */ mfc1 $a1, $f12 -/* 0E6D10 7F0B21E0 44067000 */ mfc1 $a2, $f14 -/* 0E6D14 7F0B21E4 AFA7004C */ sw $a3, 0x4c($sp) -/* 0E6D18 7F0B21E8 AFA00034 */ sw $zero, 0x34($sp) -/* 0E6D1C 7F0B21EC AFA0003C */ sw $zero, 0x3c($sp) -/* 0E6D20 7F0B21F0 AFA8001C */ sw $t0, 0x1c($sp) -/* 0E6D24 7F0B21F4 AFB80010 */ sw $t8, 0x10($sp) -/* 0E6D28 7F0B21F8 AFB90018 */ sw $t9, 0x18($sp) -/* 0E6D2C 7F0B21FC AFA00014 */ sw $zero, 0x14($sp) -/* 0E6D30 7F0B2200 AFAE0030 */ sw $t6, 0x30($sp) -/* 0E6D34 7F0B2204 0FC2C777 */ jal sub_GAME_7F0B1DDC -/* 0E6D38 7F0B2208 AFAF0038 */ sw $t7, 0x38($sp) -/* 0E6D3C 7F0B220C 8FA90034 */ lw $t1, 0x34($sp) -/* 0E6D40 7F0B2210 8FAA0054 */ lw $t2, 0x54($sp) -/* 0E6D44 7F0B2214 00401825 */ move $v1, $v0 -/* 0E6D48 7F0B2218 00601025 */ move $v0, $v1 -/* 0E6D4C 7F0B221C AD490000 */ sw $t1, ($t2) -/* 0E6D50 7F0B2220 8FAB003C */ lw $t3, 0x3c($sp) -/* 0E6D54 7F0B2224 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E6D58 7F0B2228 29610002 */ slti $at, $t3, 2 -/* 0E6D5C 7F0B222C 14200003 */ bnez $at, .L7F0B223C -/* 0E6D60 7F0B2230 00000000 */ nop -/* 0E6D64 7F0B2234 10000001 */ b .L7F0B223C -/* 0E6D68 7F0B2238 24020002 */ li $v0, 2 -.L7F0B223C: -/* 0E6D6C 7F0B223C 03E00008 */ jr $ra -/* 0E6D70 7F0B2240 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif #ifdef NONMATCHING -void sub_GAME_7F0B2244(void *arg0, void *arg1) { - // Node 0 - if ((*(&D_80040F30 + ((s32) arg0->unk4 >> 0xc)) & 2) != 0) + +// TODO +// s16 headerA : 4 gives just regalloc +s32 sub_GAME_7F0B2244(struct StandTile *tile, u8 *rtn) { + if (D_80040F30[tile->headerMid >> 0xC] & 2) { - // Node 1 - *arg1 = 1; + *rtn = 1; } - // Node 2 + return 0; } + #else GLOBAL_ASM( .text @@ -5169,8 +4695,8 @@ glabel sub_GAME_7F0B2244 - #ifdef NONMATCHING +// TODO void sub_GAME_7F0B2274(s32 arg0, s32 arg1, ? arg2, ? arg3, void *arg5) { void *temp_t7; void *temp_v1; @@ -5180,7 +4706,7 @@ void sub_GAME_7F0B2274(s32 arg0, s32 arg1, ? arg2, ? arg3, void *arg5) { if (((s32) temp_t7->unkE >> 4) != 0) { // Node 1 - temp_v1 = ((temp_t7->unkE * 8) + base_ptr_connection_vals); + temp_v1 = ((temp_t7->unkE * 8) + standTileStart); if ((*(&D_80040F30 + ((s32) temp_v1->unk4 >> 0xc)) & 2) != 0) { // Node 2 @@ -5208,11 +4734,11 @@ glabel sub_GAME_7F0B2274 /* 0E6DAC 7F0B227C AFA7000C */ sw $a3, 0xc($sp) /* 0E6DB0 7F0B2280 008E7821 */ addu $t7, $a0, $t6 /* 0E6DB4 7F0B2284 95E2000E */ lhu $v0, 0xe($t7) -/* 0E6DB8 7F0B2288 3C088004 */ lui $t0, %hi(base_ptr_connection_vals) +/* 0E6DB8 7F0B2288 3C088004 */ lui $t0, %hi(standTileStart) /* 0E6DBC 7F0B228C 0002C103 */ sra $t8, $v0, 4 /* 0E6DC0 7F0B2290 5300001E */ beql $t8, $zero, .L7F0B230C /* 0E6DC4 7F0B2294 00001025 */ move $v0, $zero -/* 0E6DC8 7F0B2298 8D080F58 */ lw $t0, %lo(base_ptr_connection_vals)($t0) +/* 0E6DC8 7F0B2298 8D080F58 */ lw $t0, %lo(standTileStart)($t0) /* 0E6DCC 7F0B229C 0002C8C0 */ sll $t9, $v0, 3 /* 0E6DD0 7F0B22A0 3C058004 */ lui $a1, %hi(D_80040F30) /* 0E6DD4 7F0B22A4 03281821 */ addu $v1, $t9, $t0 @@ -5256,6 +4782,8 @@ glabel sub_GAME_7F0B2274 #ifdef NONMATCHING +// I think they might have abused c a little here, which is what's led to the strange zero-ing. +// The use the struct (size 0x10) to just hold a bool. void sub_GAME_7F0B2314(s32 arg0, s32 arg1, ? arg2, ? arg3, void *arg4) { s32 temp_v1; void *phi_v0; @@ -5363,16 +4891,18 @@ glabel sub_GAME_7F0B23A4 #ifdef NONMATCHING -f32 sub_GAME_7F0B23AC(void *arg0, s32 arg1, void *arg2) { - void *temp_v0; +// regalloc only really +// Duplicating the macro does nothing +void sub_GAME_7F0B23AC(struct StandTile *tile, s32 tripleIndex, struct float3 *pnt) +{ + s32 pntIndex = STAN_TRIPLE_TO_PNT_INDEX(tile, tripleIndex); - // Node 0 - temp_v0 = (arg0 + ((((s32) arg0->unk6 >> (8 - (arg1 * 4))) & 0xf) * 8)); - *arg2 = (f32) ((f32) temp_v0->unk8 * D_80040F48); - arg2->unk4 = (f32) ((f32) temp_v0->unkA * D_80040F48); - arg2->unk8 = (f32) ((f32) temp_v0->unkC * D_80040F48); - return D_80040F48; + pnt->x = (float)tile->points[pntIndex].x * inv_level_scale; + pnt->y = (float)tile->points[pntIndex].y * inv_level_scale; + pnt->z = (float)tile->points[pntIndex].z * inv_level_scale; + return; } + #else GLOBAL_ASM( .text @@ -5386,8 +4916,8 @@ glabel sub_GAME_7F0B23AC /* 0E6EF4 7F0B23C4 000848C0 */ sll $t1, $t0, 3 /* 0E6EF8 7F0B23C8 00891021 */ addu $v0, $a0, $t1 /* 0E6EFC 7F0B23CC 844A0008 */ lh $t2, 8($v0) -/* 0E6F00 7F0B23D0 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E6F04 7F0B23D4 C4200F48 */ lwc1 $f0, %lo(D_80040F48)($at) +/* 0E6F00 7F0B23D0 3C018004 */ lui $at, %hi(inv_level_scale) +/* 0E6F04 7F0B23D4 C4200F48 */ lwc1 $f0, %lo(inv_level_scale)($at) /* 0E6F08 7F0B23D8 448A2000 */ mtc1 $t2, $f4 /* 0E6F0C 7F0B23DC 00000000 */ nop /* 0E6F10 7F0B23E0 468021A0 */ cvt.s.w $f6, $f4 @@ -5414,6 +4944,7 @@ glabel sub_GAME_7F0B23AC #ifdef NONMATCHING +// TODO void sub_GAME_7F0B2420(void) { } @@ -5442,10 +4973,10 @@ glabel sub_GAME_7F0B2420 /* 0E6F98 7F0B2468 00C0A825 */ move $s5, $a2 /* 0E6F9C 7F0B246C 1900005B */ blez $t0, .L7F0B25DC /* 0E6FA0 7F0B2470 00003825 */ move $a3, $zero -/* 0E6FA4 7F0B2474 3C048004 */ lui $a0, %hi(base_ptr_connection_vals) +/* 0E6FA4 7F0B2474 3C048004 */ lui $a0, %hi(standTileStart) /* 0E6FA8 7F0B2478 3C058004 */ lui $a1, %hi(D_80040F30) /* 0E6FAC 7F0B247C 24A50F30 */ addiu $a1, %lo(D_80040F30) # addiu $a1, $a1, 0xf30 -/* 0E6FB0 7F0B2480 8C840F58 */ lw $a0, %lo(base_ptr_connection_vals)($a0) +/* 0E6FB0 7F0B2480 8C840F58 */ lw $a0, %lo(standTileStart)($a0) /* 0E6FB4 7F0B2484 01201825 */ move $v1, $t1 .L7F0B2488: /* 0E6FB8 7F0B2488 9462000E */ lhu $v0, 0xe($v1) @@ -5560,20 +5091,22 @@ glabel sub_GAME_7F0B2420 #ifdef NONMATCHING -void sub_GAME_7F0B260C(void *arg0, s32 arg1, ? arg2, ? arg3, void *arg5) { - // Node 0 - if (*arg5 < (f32) (arg0 + (arg1 * 8))->unkA) - { - // Node 1 - if (*arg5 < (f32) (arg0 + (((s32) (arg1 + 1) % (s32) (((s32) arg0->unk6 >> 0xc) & 0xf)) * 8))->unkA) +// Tests do appear to be lts +s32 sub_GAME_7F0B260C(struct StandTile *tile, s32 index, float p_x,float p_z, void, float *rtn) +{ + s32 nextIndex; + + if (*rtn < (float)tile->points[index].y) { + if (*rtn < (float)tile->points[(index + 1) % STAN_POINT_COUNT(tile)].y) { - // Node 2 return 1; } } - // Node 3 - return 0; + else { + return 0; + } } + #else GLOBAL_ASM( .text @@ -5633,20 +5166,26 @@ glabel sub_GAME_7F0B260C #ifdef NONMATCHING -void sub_GAME_7F0B26B8(s32 arg1, ? arg2, ? arg3, f32 arg4) { - f32 sp2C; - - // Node 0 - sp2C = (f32) (arg4 * D_80040F44); - sub_GAME_7F0B1DDC(arg1, arg2, arg1, arg2, 0, &sub_GAME_7F0B260C, 0, &sp2C); +// We'll wait to decomp sub_GAME_7F0B260C properly, the reference to the float seems to be misbehaving and pointless. +void sub_GAME_7F0B26B8(struct StandTile **tile, float target_x, float target_z, float b_z, float param_5) +{ + float unk_float; + + unk_float = param_5 * level_scale; + + return sub_GAME_7F0B1DDC( + tile, target_x, target_z, b_z, + 0x0, sub_GAME_7F0B260C, 0x0, &unk_float + ); } + #else GLOBAL_ASM( .text glabel sub_GAME_7F0B26B8 /* 0E71E8 7F0B26B8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0E71EC 7F0B26BC 3C018004 */ lui $at, %hi(D_80040F44) -/* 0E71F0 7F0B26C0 C4260F44 */ lwc1 $f6, %lo(D_80040F44)($at) +/* 0E71EC 7F0B26BC 3C018004 */ lui $at, %hi(level_scale) +/* 0E71F0 7F0B26C0 C4260F44 */ lwc1 $f6, %lo(level_scale)($at) /* 0E71F4 7F0B26C4 C7A40040 */ lwc1 $f4, 0x40($sp) /* 0E71F8 7F0B26C8 44856000 */ mtc1 $a1, $f12 /* 0E71FC 7F0B26CC 44867000 */ mtc1 $a2, $f14 @@ -5673,11 +5212,93 @@ glabel sub_GAME_7F0B26B8 - - #ifdef NONMATCHING -void sub_GAME_7F0B2718(void) { +// Horrifc BFS on tiles +struct StandTile* sub_GAME_7F0B2718(struct StandTile* srcTile, tilePredicate_t tilePred) +{ + struct StandTile* tile; + u32 i; + u32 pointCount; + s32 link; + struct StandTile* linkTile; + s32 countForIter; + + s32 pntI; + s32 seenCount; + s32 linkI; + s32 linkOffset; + s32 madeProgress; // bool + + // 0x44(sp) looks to be the ptr onto the stack + + // madeProgress = + if (tilePred(srcTile)) { + return srcTile; + } + + bfsTileStack[0] = srcTile; + seenCount = 1; + countForIter = seenCount; + + do { + // Loop over everyone for this iteration + for(pntI=0; pntI < countForIter; pntI++) + { + + tile = bfsTileStack[pntI]; + pointCount = STAN_POINT_COUNT(tile); + + // Loop over linked tiles + for (linkI = 0; linkI < pointCount; linkI++) + { + link = tile->points[linkI].link; + linkOffset = link * 8; // somehow it's doing this << 3 before testing the >> 4, but this isn't working. + + if (link >> 4 != 0) { + linkTile = (struct StandTile*)((s32)standTileStart + linkOffset); + + // Loop to see if this is a new tile (disgusting) + // If was a < and the while was a != though + for (i = 0; i < seenCount; i++) + { + if (bfsTileStack[i] == linkTile) { + goto LAB_7f0b283c; // continue named loop? + } + } + + if (tilePred(linkTile)) { + return linkTile; + } + + bfsTileStack[seenCount] = linkTile; + if (350 < seenCount + 1) { // as written + return 0; + } + + pointCount = STAN_POINT_COUNT(tile); + seenCount = seenCount + 1; + + } + + // they may also have needed something to put by the label + LAB_7f0b283c: linkI = linkI; + } + + } + + // We only continue if we made progress with this iteration + if (seenCount == countForIter){ + break; + } + + // does appear to be down here - two li,X,1s initially and a mov zero in the delay slot + countForIter = seenCount; + + } while (1); + + + return 0; } #else GLOBAL_ASM( @@ -5698,23 +5319,23 @@ glabel sub_GAME_7F0B2718 /* 0E7278 7F0B2748 00A0F809 */ jalr $a1 /* 0E727C 7F0B274C AFB00018 */ sw $s0, 0x18($sp) /* 0E7280 7F0B2750 10400003 */ beqz $v0, .L7F0B2760 -/* 0E7284 7F0B2754 3C018008 */ lui $at, %hi(dword_CODE_bss_8007BA10) +/* 0E7284 7F0B2754 3C018008 */ lui $at, %hi(bfsTileStack) /* 0E7288 7F0B2758 10000049 */ b .L7F0B2880 /* 0E728C 7F0B275C 02801025 */ move $v0, $s4 .L7F0B2760: /* 0E7290 7F0B2760 240E0001 */ li $t6, 1 -/* 0E7294 7F0B2764 3C178008 */ lui $s7, %hi(dword_CODE_bss_8007BA10) -/* 0E7298 7F0B2768 3C168004 */ lui $s6, %hi(base_ptr_connection_vals) -/* 0E729C 7F0B276C AC34BA10 */ sw $s4, %lo(dword_CODE_bss_8007BA10)($at) +/* 0E7294 7F0B2764 3C178008 */ lui $s7, %hi(bfsTileStack) +/* 0E7298 7F0B2768 3C168004 */ lui $s6, %hi(standTileStart) +/* 0E729C 7F0B276C AC34BA10 */ sw $s4, %lo(bfsTileStack)($at) /* 0E72A0 7F0B2770 24110001 */ li $s1, 1 -/* 0E72A4 7F0B2774 26D60F58 */ addiu $s6, %lo(base_ptr_connection_vals) # addiu $s6, $s6, 0xf58 -/* 0E72A8 7F0B2778 26F7BA10 */ addiu $s7, %lo(dword_CODE_bss_8007BA10) # addiu $s7, $s7, -0x45f0 +/* 0E72A4 7F0B2774 26D60F58 */ addiu $s6, %lo(standTileStart) # addiu $s6, $s6, 0xf58 +/* 0E72A8 7F0B2778 26F7BA10 */ addiu $s7, %lo(bfsTileStack) # addiu $s7, $s7, -0x45f0 /* 0E72AC 7F0B277C AFAE0058 */ sw $t6, 0x58($sp) /* 0E72B0 7F0B2780 0000F025 */ move $fp, $zero .L7F0B2784: /* 0E72B4 7F0B2784 1A200037 */ blez $s1, .L7F0B2864 -/* 0E72B8 7F0B2788 3C0F8008 */ lui $t7, %hi(dword_CODE_bss_8007BA10) -/* 0E72BC 7F0B278C 25EFBA10 */ addiu $t7, %lo(dword_CODE_bss_8007BA10) # addiu $t7, $t7, -0x45f0 +/* 0E72B8 7F0B2788 3C0F8008 */ lui $t7, %hi(bfsTileStack) +/* 0E72BC 7F0B278C 25EFBA10 */ addiu $t7, %lo(bfsTileStack) # addiu $t7, $t7, -0x45f0 /* 0E72C0 7F0B2790 AFAF0044 */ sw $t7, 0x44($sp) .L7F0B2794: /* 0E72C4 7F0B2794 8FB80044 */ lw $t8, 0x44($sp) @@ -5735,8 +5356,8 @@ glabel sub_GAME_7F0B2718 /* 0E72FC 7F0B27CC 012A8021 */ addu $s0, $t1, $t2 /* 0E7300 7F0B27D0 1A200009 */ blez $s1, .L7F0B27F8 /* 0E7304 7F0B27D4 00001025 */ move $v0, $zero -/* 0E7308 7F0B27D8 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007BA10) -/* 0E730C 7F0B27DC 2463BA10 */ addiu $v1, %lo(dword_CODE_bss_8007BA10) # addiu $v1, $v1, -0x45f0 +/* 0E7308 7F0B27D8 3C038008 */ lui $v1, %hi(bfsTileStack) +/* 0E730C 7F0B27DC 2463BA10 */ addiu $v1, %lo(bfsTileStack) # addiu $v1, $v1, -0x45f0 .L7F0B27E0: /* 0E7310 7F0B27E0 8C6C0000 */ lw $t4, ($v1) /* 0E7314 7F0B27E4 24420001 */ addiu $v0, $v0, 1 @@ -5805,112 +5426,44 @@ glabel sub_GAME_7F0B2718 -#ifdef NONMATCHING -void sub_GAME_7F0B28B0(void *arg0, void *arg1) { - s32 sp1C; +s32 getCollisionEdge_maybe(struct float3 *pntA, struct float3 *pntB) +{ + // The moral is that they prefer == 0 tests? - // Node 0 - sp1C = (s32) dword_CODE_bss_8007B9E4; - if (dword_CODE_bss_8007B9E4 != 0) - { - // Node 1 - sub_GAME_7F0B1CF8(dword_CODE_bss_8007B9E4, dword_CODE_bss_8007B9E8, arg0, arg1); - return 0; + if (stanSavedColl_tile) { + getTileEdgePoints(stanSavedColl_tile, stanSavedColl_pointI, pntA, pntB); + return 1; } - // Node 2 - if (D_800413BC == 0) - { - // Node 4 - // Node 5 - return 0; + else { + if (D_800413BC) { + pntA->x = stanSavedColl_pntA.x; + pntA->y = 0; + pntA->z = stanSavedColl_pntA.z; + + pntB->x = stanSavedColl_pntB.x; + pntB->y = 0; + pntB->z = stanSavedColl_pntB.z; + + return 1; + } + else { + return 0; + } } - // Node 3 - arg0->unk4 = 0.0f; - *arg0 = (f32) flt_CODE_bss_8007B9F0; - arg0->unk8 = (f32) flt_CODE_bss_8007B9F0.unk4; - arg1->unk4 = 0.0f; - *arg1 = (f32) flt_CODE_bss_8007B9F8; - arg1->unk8 = (f32) flt_CODE_bss_8007B9F8.unk4; - return 0; + } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B28B0 -/* 0E73E0 7F0B28B0 3C0E8008 */ lui $t6, %hi(dword_CODE_bss_8007B9E4) -/* 0E73E4 7F0B28B4 8DCEB9E4 */ lw $t6, %lo(dword_CODE_bss_8007B9E4)($t6) -/* 0E73E8 7F0B28B8 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0E73EC 7F0B28BC AFBF0014 */ sw $ra, 0x14($sp) -/* 0E73F0 7F0B28C0 00803025 */ move $a2, $a0 -/* 0E73F4 7F0B28C4 00A03825 */ move $a3, $a1 -/* 0E73F8 7F0B28C8 11C00007 */ beqz $t6, .L7F0B28E8 -/* 0E73FC 7F0B28CC AFAE001C */ sw $t6, 0x1c($sp) -/* 0E7400 7F0B28D0 3C058008 */ lui $a1, %hi(dword_CODE_bss_8007B9E8) -/* 0E7404 7F0B28D4 8CA5B9E8 */ lw $a1, %lo(dword_CODE_bss_8007B9E8)($a1) -/* 0E7408 7F0B28D8 0FC2C73E */ jal sub_GAME_7F0B1CF8 -/* 0E740C 7F0B28DC 01C02025 */ move $a0, $t6 -/* 0E7410 7F0B28E0 10000017 */ b .L7F0B2940 -/* 0E7414 7F0B28E4 24020001 */ li $v0, 1 -.L7F0B28E8: -/* 0E7418 7F0B28E8 3C0F8004 */ lui $t7, %hi(D_800413BC) -/* 0E741C 7F0B28EC 8DEF13BC */ lw $t7, %lo(D_800413BC)($t7) -/* 0E7420 7F0B28F0 3C038008 */ lui $v1, %hi(flt_CODE_bss_8007B9F0) -/* 0E7424 7F0B28F4 2463B9F0 */ addiu $v1, %lo(flt_CODE_bss_8007B9F0) # addiu $v1, $v1, -0x4610 -/* 0E7428 7F0B28F8 51E00011 */ beql $t7, $zero, .L7F0B2940 -/* 0E742C 7F0B28FC 00001025 */ move $v0, $zero -/* 0E7430 7F0B2900 44800000 */ mtc1 $zero, $f0 -/* 0E7434 7F0B2904 C4640000 */ lwc1 $f4, ($v1) -/* 0E7438 7F0B2908 3C048008 */ lui $a0, %hi(flt_CODE_bss_8007B9F8) -/* 0E743C 7F0B290C E4C00004 */ swc1 $f0, 4($a2) -/* 0E7440 7F0B2910 E4C40000 */ swc1 $f4, ($a2) -/* 0E7444 7F0B2914 C4660004 */ lwc1 $f6, 4($v1) -/* 0E7448 7F0B2918 2484B9F8 */ addiu $a0, %lo(flt_CODE_bss_8007B9F8) # addiu $a0, $a0, -0x4608 -/* 0E744C 7F0B291C 24020001 */ li $v0, 1 -/* 0E7450 7F0B2920 E4C60008 */ swc1 $f6, 8($a2) -/* 0E7454 7F0B2924 C4880000 */ lwc1 $f8, ($a0) -/* 0E7458 7F0B2928 E4E00004 */ swc1 $f0, 4($a3) -/* 0E745C 7F0B292C E4E80000 */ swc1 $f8, ($a3) -/* 0E7460 7F0B2930 C48A0004 */ lwc1 $f10, 4($a0) -/* 0E7464 7F0B2934 10000002 */ b .L7F0B2940 -/* 0E7468 7F0B2938 E4EA0008 */ swc1 $f10, 8($a3) -/* 0E746C 7F0B293C 00001025 */ move $v0, $zero -.L7F0B2940: -/* 0E7470 7F0B2940 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E7474 7F0B2944 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0E7478 7F0B2948 03E00008 */ jr $ra -/* 0E747C 7F0B294C 00000000 */ nop -) -#endif - - -#ifdef NONMATCHING -void sub_GAME_7F0B2950(f32 arg0) { - // Node 0 - D_80040F44 = arg0; - D_80040F48 = (f32) (1.0f / arg0); +void setLevelScale(float ls) { + level_scale = ls; + inv_level_scale = (1.0f / ls); return; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2950 -/* 0E7480 7F0B2950 3C018004 */ lui $at, %hi(D_80040F44) -/* 0E7484 7F0B2954 E42C0F44 */ swc1 $f12, %lo(D_80040F44)($at) -/* 0E7488 7F0B2958 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0E748C 7F0B295C 44812000 */ mtc1 $at, $f4 -/* 0E7490 7F0B2960 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E7494 7F0B2964 460C2183 */ div.s $f6, $f4, $f12 -/* 0E7498 7F0B2968 03E00008 */ jr $ra -/* 0E749C 7F0B296C E4260F48 */ swc1 $f6, %lo(D_80040F48)($at) -) -#endif - +float sub_GAME_7F0B2970(struct StandTile* tile, float p_x, float p_z); #ifdef NONMATCHING f32 sub_GAME_7F0B2970(void *arg0, s32 arg1, f32 arg2) { @@ -5958,7 +5511,7 @@ f32 sub_GAME_7F0B2970(void *arg0, s32 arg1, f32 arg2) { // Node 0 temp_a1 = ((s32) arg0->unk6 >> 8); temp_a2 = ((s32) arg0->unk6 >> 4); - arg2 = (f32) (arg2 * D_80040F44); + arg2 = (f32) (arg2 * level_scale); temp_s0 = (arg0 + ((temp_a1 & 0xf) * 8)); temp_v1 = (arg0 + ((temp_a2 & 0xf) * 8)); temp_a3 = (arg0->unk6 & 0xf); @@ -5974,7 +5527,7 @@ f32 sub_GAME_7F0B2970(void *arg0, s32 arg1, f32 arg2) { sp7C = temp_f4; temp_f10_2 = (f32) (temp_t0->unkC - temp_s0->unkC); sp80 = temp_f10_2; - temp_ret = __f_to_ll(((temp_f18 * temp_f10_2) - (temp_f4 * temp_f6)), (arg1 * D_80040F44), temp_a1, temp_a2, temp_a3); + temp_ret = __f_to_ll(((temp_f18 * temp_f10_2) - (temp_f4 * temp_f6)), (arg1 * level_scale), temp_a1, temp_a2, temp_a3); sp60 = temp_ret; sp64 = temp_ret; temp_ret_2 = __f_to_ll(((sp8C * temp_f10) - (sp80 * sp84))); @@ -6001,7 +5554,7 @@ f32 sub_GAME_7F0B2970(void *arg0, s32 arg1, f32 arg2) { sp28 = __ll_to_d(sp60, sp64); sp30 = __ll_to_d(sp58, sp5C); // Node 4 - return ((f32) (((sp30 - ((f64) arg1 * sp28)) - ((f64) arg2 * sp20)) / __ll_to_d(sp68, sp6C)) * D_80040F48); + return ((f32) (((sp30 - ((f64) arg1 * sp28)) - ((f64) arg2 * sp20)) / __ll_to_d(sp68, sp6C)) * inv_level_scale); } // Node 1 if (sp6C != 0) @@ -6011,18 +5564,18 @@ f32 sub_GAME_7F0B2970(void *arg0, s32 arg1, f32 arg2) { sp28 = __ll_to_d(sp60, sp64); sp30 = __ll_to_d(sp58, sp5C); // Node 4 - return ((f32) (((sp30 - ((f64) arg1 * sp28)) - ((f64) arg2 * sp20)) / __ll_to_d(sp68, sp6C)) * D_80040F48); + return ((f32) (((sp30 - ((f64) arg1 * sp28)) - ((f64) arg2 * sp20)) / __ll_to_d(sp68, sp6C)) * inv_level_scale); } // Node 2 - return ((f32) (((sp30 - ((f64) arg1 * sp28)) - ((f64) arg2 * sp20)) / __ll_to_d(sp68, sp6C)) * D_80040F48); + return ((f32) (((sp30 - ((f64) arg1 * sp28)) - ((f64) arg2 * sp20)) / __ll_to_d(sp68, sp6C)) * inv_level_scale); } #else GLOBAL_ASM( .text glabel sub_GAME_7F0B2970 -/* 0E74A0 7F0B2970 3C018004 */ lui $at, %hi(D_80040F44) +/* 0E74A0 7F0B2970 3C018004 */ lui $at, %hi(level_scale) /* 0E74A4 7F0B2974 44857000 */ mtc1 $a1, $f14 -/* 0E74A8 7F0B2978 C4200F44 */ lwc1 $f0, %lo(D_80040F44)($at) +/* 0E74A8 7F0B2978 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) /* 0E74AC 7F0B297C 27BDFF70 */ addiu $sp, $sp, -0x90 /* 0E74B0 7F0B2980 AFA60098 */ sw $a2, 0x98($sp) /* 0E74B4 7F0B2984 46007382 */ mul.s $f14, $f14, $f0 @@ -6150,8 +5703,8 @@ glabel sub_GAME_7F0B2970 /* 0E769C 7F0B2B6C 55E0000B */ bnezl $t7, .L7F0B2B9C /* 0E76A0 7F0B2B70 8FA40070 */ lw $a0, 0x70($sp) /* 0E76A4 7F0B2B74 8609000A */ lh $t1, 0xa($s0) -/* 0E76A8 7F0B2B78 3C018004 */ lui $at, %hi(D_80040F48) -/* 0E76AC 7F0B2B7C C4300F48 */ lwc1 $f16, %lo(D_80040F48)($at) +/* 0E76A8 7F0B2B78 3C018004 */ lui $at, %hi(inv_level_scale) +/* 0E76AC 7F0B2B7C C4300F48 */ lwc1 $f16, %lo(inv_level_scale)($at) /* 0E76B0 7F0B2B80 44899000 */ mtc1 $t1, $f18 /* 0E76B4 7F0B2B84 00000000 */ nop /* 0E76B8 7F0B2B88 468092A0 */ cvt.s.w $f10, $f18 @@ -6183,10 +5736,10 @@ glabel sub_GAME_7F0B2970 /* 0E7718 7F0B2BE8 46283482 */ mul.d $f18, $f6, $f8 /* 0E771C 7F0B2BEC 46005421 */ cvt.d.s $f16, $f10 /* 0E7720 7F0B2BF0 D7AC0030 */ ldc1 $f12, 0x30($sp) -/* 0E7724 7F0B2BF4 3C018004 */ lui $at, %hi(D_80040F48) +/* 0E7724 7F0B2BF4 3C018004 */ lui $at, %hi(inv_level_scale) /* 0E7728 7F0B2BF8 46228102 */ mul.d $f4, $f16, $f2 /* 0E772C 7F0B2BFC 46246181 */ sub.d $f6, $f12, $f4 -/* 0E7730 7F0B2C00 C4240F48 */ lwc1 $f4, %lo(D_80040F48)($at) +/* 0E7730 7F0B2C00 C4240F48 */ lwc1 $f4, %lo(inv_level_scale)($at) /* 0E7734 7F0B2C04 46323201 */ sub.d $f8, $f6, $f18 /* 0E7738 7F0B2C08 46204283 */ div.d $f10, $f8, $f0 /* 0E773C 7F0B2C0C 46205420 */ cvt.s.d $f16, $f10 @@ -6206,21 +5759,22 @@ glabel sub_GAME_7F0B2970 #ifdef NONMATCHING -s32 copy_tile_RGB_as_24bit(void *arg0, s32 arg1, ? arg2, void *arg3) { - s32 temp_v0; - s32 temp_t7; - s32 temp_t9; - s32 temp_t3; - // Node 0 - temp_v0 = ((s32) arg0->unk4 >> 8); - temp_t7 = (temp_v0 & 0xf); - temp_t9 = (((s32) arg0->unk4 >> 4) & 0xf); - temp_t3 = (arg0->unk4 & 0xf); - *arg3 = (s8) ((temp_t7 * 0x10) | temp_t7); - arg3->unk1 = (s8) ((temp_t9 * 0x10) | temp_t9); - arg3->unk2 = (s8) ((temp_t3 * 0x10) | temp_t3); - return temp_v0; +// Some instructions misordered +s32 copy_tile_RGB_as_24bit(struct StandTile* tile, float p_x, float p_z, u8* rtn) { + + u8 B; + u8 C; + u8 D; + + B = tile->headerMid >> 0x8 & 0xF; + C = tile->headerMid >> 0x4 & 0xF; + D = tile->headerMid & 0xF; + + rtn[0] = (B << 4) | B; + rtn[1] = (C << 4) | C; + rtn[2] = (D << 4) | D; + } #else GLOBAL_ASM( @@ -6249,51 +5803,33 @@ glabel copy_tile_RGB_as_24bit - +float sub_GAME_7F0B2C74(struct StandTile *tile, float *heights); #ifdef NONMATCHING -f32 sub_GAME_7F0B2C74(void *arg0, void *arg1) { - f32 temp_f2; - f32 phi_f16; - f32 phi_f2; - // Node 0 - temp_f2 = (f32) (arg0 + ((((s32) arg0->unk6 >> 8) & 0xf) * 8))->unkA; - if (temp_f2 < temp_f2) - { - // Node 1 - } - // Node 2 - phi_f16 = temp_f2; - if (temp_f2 < temp_f2) - { - // Node 3 - phi_f16 = temp_f2; - } - // Node 4 - if (temp_f2 < temp_f2) - { - // Node 5 - } - // Node 6 - phi_f2 = temp_f2; - if (temp_f2 < temp_f2) - { - // Node 7 - phi_f2 = temp_f2; - } - // Node 8 - *arg1 = (f32) (phi_f16 * D_80040F48); - arg1->unk4 = (f32) (phi_f2 * D_80040F48); - return temp_f2; +// Very interesting. The target has a load of filler crap including instructions like "c.lt.S f2,f2" +// Presumably something has been generated from a macro but using the fixed value 0 + +float sub_GAME_7F0B2C74(struct StandTile *tile, float *heights) +{ + float y; + + y = tile->points[STAN_TRIPLE_TO_PNT_INDEX(tile, 0)].y; + + heights[0] = y * inv_level_scale; + heights[1] = y * inv_level_scale; + + return; + } + #else GLOBAL_ASM( .text glabel sub_GAME_7F0B2C74 /* 0E77A4 7F0B2C74 848E0006 */ lh $t6, 6($a0) -/* 0E77A8 7F0B2C78 3C028004 */ lui $v0, %hi(D_80040F48) -/* 0E77AC 7F0B2C7C 24420F48 */ addiu $v0, %lo(D_80040F48) # addiu $v0, $v0, 0xf48 +/* 0E77A8 7F0B2C78 3C028004 */ lui $v0, %hi(inv_level_scale) +/* 0E77AC 7F0B2C7C 24420F48 */ addiu $v0, %lo(inv_level_scale) # addiu $v0, $v0, 0xf48 /* 0E77B0 7F0B2C80 000E7A03 */ sra $t7, $t6, 8 /* 0E77B4 7F0B2C84 31F8000F */ andi $t8, $t7, 0xf /* 0E77B8 7F0B2C88 0018C8C0 */ sll $t9, $t8, 3 @@ -6341,31 +5877,12 @@ glabel sub_GAME_7F0B2C74 +float sub_GAME_7F0B2D14(struct StandTile* tile) { + float vs[2]; -#ifdef NONMATCHING -void sub_GAME_7F0B2D14(void) { - ? sp18; - - // Node 0 - sub_GAME_7F0B2C74(&sp18); - return sp18; + sub_GAME_7F0B2C74(tile, vs); + return vs[0]; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2D14 -/* 0E7844 7F0B2D14 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0E7848 7F0B2D18 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E784C 7F0B2D1C 0FC2CB1D */ jal sub_GAME_7F0B2C74 -/* 0E7850 7F0B2D20 27A50018 */ addiu $a1, $sp, 0x18 -/* 0E7854 7F0B2D24 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E7858 7F0B2D28 C7A00018 */ lwc1 $f0, 0x18($sp) -/* 0E785C 7F0B2D2C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0E7860 7F0B2D30 03E00008 */ jr $ra -/* 0E7864 7F0B2D34 00000000 */ nop -) -#endif - @@ -6581,6 +6098,7 @@ glabel stanConvertNameStringToS32 #ifdef NONMATCHING +// TODO void stanMatchTileName(void) { } @@ -6599,8 +6117,8 @@ glabel stanMatchTileName .L7F0B2E78: /* 0E79A8 7F0B2E78 0FC2CB54 */ jal stanConvertNameStringToS32 /* 0E79AC 7F0B2E7C 27A60021 */ addiu $a2, $sp, 0x21 -/* 0E79B0 7F0B2E80 3C0F8008 */ lui $t7, %hi(clippingfile) -/* 0E79B4 7F0B2E84 8DEFB120 */ lw $t7, %lo(clippingfile)($t7) +/* 0E79B0 7F0B2E80 3C0F8008 */ lui $t7, %hi(stan_prefix) +/* 0E79B4 7F0B2E84 8DEFB120 */ lw $t7, %lo(stan_prefix)($t7) /* 0E79B8 7F0B2E88 3C058004 */ lui $a1, %hi(list_of_tilesizes) /* 0E79BC 7F0B2E8C 24A50F4C */ addiu $a1, %lo(list_of_tilesizes) # addiu $a1, $a1, 0xf4c /* 0E79C0 7F0B2E90 8DE30004 */ lw $v1, 4($t7) @@ -6673,6 +6191,7 @@ glabel sub_GAME_7F0B2F00 #ifdef NONMATCHING +// To try void *stanDetermineEOF(void *arg0, s32 arg1, s32 arg2) { s32 temp_v0; void *temp_a3; @@ -6686,9 +6205,9 @@ void *stanDetermineEOF(void *arg0, s32 arg1, s32 arg2) { void *phi_v0; // Node 0 - clippingfile = arg0; + stan_prefix.clippingfile = arg0; temp_v0 = (arg2 - arg1); - base_ptr_connection_vals = (s32) ((arg0->unk4 + temp_v0) + -0x80); + standTileStart = (s32) ((arg0->unk4 + temp_v0) + -0x80); ptr_firstroom_0 = (s32) (arg0->unk4 + temp_v0); temp_a3 = (arg0 + 4); phi_a3_2 = temp_a3; @@ -6726,22 +6245,22 @@ loop_4: } } // Node 5 - clippingfile = arg0; + stan_prefix.clippingfile = arg0; return temp_v0_2; } #else GLOBAL_ASM( .text glabel stanDetermineEOF -/* 0E7A5C 7F0B2F2C 3C088008 */ lui $t0, %hi(clippingfile) -/* 0E7A60 7F0B2F30 2508B120 */ addiu $t0, %lo(clippingfile) # addiu $t0, $t0, -0x4ee0 +/* 0E7A5C 7F0B2F2C 3C088008 */ lui $t0, %hi(stan_prefix) +/* 0E7A60 7F0B2F30 2508B120 */ addiu $t0, %lo(stan_prefix) # addiu $t0, $t0, -0x4ee0 /* 0E7A64 7F0B2F34 AD040000 */ sw $a0, ($t0) /* 0E7A68 7F0B2F38 8C8E0004 */ lw $t6, 4($a0) /* 0E7A6C 7F0B2F3C 00C51023 */ subu $v0, $a2, $a1 -/* 0E7A70 7F0B2F40 3C018004 */ lui $at, %hi(base_ptr_connection_vals) +/* 0E7A70 7F0B2F40 3C018004 */ lui $at, %hi(standTileStart) /* 0E7A74 7F0B2F44 01C27821 */ addu $t7, $t6, $v0 /* 0E7A78 7F0B2F48 25F8FF80 */ addiu $t8, $t7, -0x80 -/* 0E7A7C 7F0B2F4C AC380F58 */ sw $t8, %lo(base_ptr_connection_vals)($at) +/* 0E7A7C 7F0B2F4C AC380F58 */ sw $t8, %lo(standTileStart)($at) /* 0E7A80 7F0B2F50 8C990004 */ lw $t9, 4($a0) /* 0E7A84 7F0B2F54 3C018004 */ lui $at, %hi(ptr_firstroom_0) /* 0E7A88 7F0B2F58 3C068004 */ lui $a2, %hi(list_of_tilesizes) @@ -6785,68 +6304,29 @@ glabel stanDetermineEOF - - -#ifdef NONMATCHING -s32 sub_GAME_7F0B2FD8(void *arg0) { - return arg0->unk3; +u8 getTileRoom(struct StandTile* tile) { + return tile->room; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2FD8 -/* 0E7B08 7F0B2FD8 03E00008 */ jr $ra -/* 0E7B0C 7F0B2FDC 90820003 */ lbu $v0, 3($a0) -) -#endif +s32 sub_GAME_7F0B2FE0(struct StandTile* tile) { + // u8 -> s32 -> u8 causes the odd asm -#ifdef NONMATCHING -void sub_GAME_7F0B2FE0(void *arg0) { - sub_GAME_7F0B4F9C(arg0->unk3); + s32 room = tile->room; + + return sub_GAME_7F0B4F9C(room); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2FE0 -/* 0E7B10 7F0B2FE0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E7B14 7F0B2FE4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E7B18 7F0B2FE8 90820003 */ lbu $v0, 3($a0) -/* 0E7B1C 7F0B2FEC 0FC2D3E7 */ jal sub_GAME_7F0B4F9C -/* 0E7B20 7F0B2FF0 00402025 */ move $a0, $v0 -/* 0E7B24 7F0B2FF4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E7B28 7F0B2FF8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E7B2C 7F0B2FFC 03E00008 */ jr $ra -/* 0E7B30 7F0B3000 00000000 */ nop -) -#endif -#ifdef NONMATCHING -void sub_GAME_7F0B3004(void) { - sub_GAME_7F0B2D14(); +float sub_GAME_7F0B3004(struct StandTile* tile) { + return sub_GAME_7F0B2D14(tile); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B3004 -/* 0E7B34 7F0B3004 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E7B38 7F0B3008 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E7B3C 7F0B300C 0FC2CB45 */ jal sub_GAME_7F0B2D14 -/* 0E7B40 7F0B3010 00000000 */ nop -/* 0E7B44 7F0B3014 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E7B48 7F0B3018 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E7B4C 7F0B301C 03E00008 */ jr $ra -/* 0E7B50 7F0B3020 00000000 */ nop -) -#endif @@ -6983,9 +6463,12 @@ glabel sub_GAME_7F0B312C #ifdef NONMATCHING -void sub_GAME_7F0B3138(s32 arg0, s32 arg1, ? arg2, ? arg3, ? arg4, f32 arg5, ?32 arg6, f32 arg7, f32 arg8) { - // Node 0 - return sub_GAME_7F0B0E24(arg2, arg3, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, 0.0f, 1.0f); +// Only difference is an extra sw a1,0x34(sp) appearing. +// There is the unused first argument which may have the wrong type +int sub_GAME_7F0B3138(void* unused, struct StandTile **pTile, float p_x, float p_z, float dest_x, float dest_z, + int objFlags, float unkHeight, float unkA) { + + return sub_GAME_7F0B0E24(pTile, p_x, p_z, dest_x, dest_z, objFlags, unkHeight, unkA, 0, 1); } #else GLOBAL_ASM( diff --git a/src/game/stan.h b/src/game/stan.h index f758b23..78db378 100644 --- a/src/game/stan.h +++ b/src/game/stan.h @@ -2,6 +2,65 @@ #define _STAN_H_ #include "ultra64.h" + +struct StandTilePoint { + s16 x; + s16 y; + s16 z; + u16 link; +}; + +struct StandTileHeaderTail { + s16 pointCount : 4; // seen lh, not lhu. Also seen with an explicit unnecessary '& 0xF' + s16 headerC : 4; + s16 headerD : 4; + s16 headerE : 4; +}; + +struct StandTile { + u16 name1; + u8 name2; + u8 room; // compared to 0xFF, not -1 in a function. Seen LBUs. + s16 headerMid; + + /* 0x06 */ + // They appear to have performed the bit field work themselves here, + // but we provide the StandTileHeaderTail member for clarity - it should be unused I believe. + s16 hdrTail; + + /* 0x08 */ + struct StandTilePoint points[1]; +}; + +// RGB? I've called them 'triple' because I don't really know what RGB is +// No parens around params +#define STAN_TRIPLE_TO_PNT_INDEX(tile, tripleIndex) (tile->hdrTail >> (8 - 4*tripleIndex) & 0xF) +#define STAN_POINT_COUNT(tile) (tile->hdrTail >> 0xC & 0xF) + +// May be internal only, nice here. +struct StandTileWalkCallbackRecord { + s32 * roomBuf; + s32 count; + s32 bufMax; + s32 lastRoom; +}; +typedef void (*standTileWalkCallback_t)(struct StandTile*, struct StandTile*, struct StandTileWalkCallbackRecord*); +// Necessary forward declaration +void noteTileRoomIfDifferentToPrev(struct StandTile *tile, struct StandTile *unused, struct StandTileWalkCallbackRecord *data); + +// Very similar but definitely different to the above? +struct StandTileLocusCallbackRecord { + s32 * roomBuf; + s32 count; + s32 bufMax; + s32 nearEdgeCount; +}; +typedef s32 (*standTileLocusCallback_A_t)(struct StandTile*, struct StandTileLocusCallbackRecord*); +typedef s32 (*standTileLocusCallback_B_t)(struct StandTile*, s32, float, float, void, float*); // 5th parameter uncertain +typedef s32 (*standTileLocusCallback_C_t)(struct StandTile**, s32, struct StandTileLocusCallbackRecord*); + +typedef s32 (*tilePredicate_t)(struct StandTile*); + void stanInitDebugNoticeList(void); #endif diff --git a/src/game/unk_007980.c b/src/game/unk_007980.c index 31558a5..2716675 100644 --- a/src/game/unk_007980.c +++ b/src/game/unk_007980.c @@ -16,12 +16,12 @@ void cleanupplayersoundrelated(void) { ? phi_return; // Node 0 - temp_ret = get_num_players(); + temp_ret = getPlayerCount(); phi_return = temp_ret; if (temp_ret > 0) { // Node 1 - phi_s2 = ((0 * 4) + &ptr_BONDdata_p1); + phi_s2 = ((0 * 4) + &players); phi_s4 = 0; loop_2: // Node 2 @@ -47,7 +47,7 @@ loop_3: } // Node 7 temp_s4 = (phi_s4 + 1); - temp_ret_2 = get_num_players(); + temp_ret_2 = getPlayerCount(); phi_s2 = (phi_s2 + 4); phi_s4 = temp_s4; phi_return = temp_ret_2; @@ -71,12 +71,12 @@ glabel cleanupplayersoundrelated /* 03C4C0 7F007990 AFB20020 */ sw $s2, 0x20($sp) /* 03C4C4 7F007994 AFB1001C */ sw $s1, 0x1c($sp) /* 03C4C8 7F007998 AFB00018 */ sw $s0, 0x18($sp) -/* 03C4CC 7F00799C 0FC26919 */ jal get_num_players +/* 03C4CC 7F00799C 0FC26919 */ jal getPlayerCount /* 03C4D0 7F0079A0 0000A025 */ move $s4, $zero /* 03C4D4 7F0079A4 1840001B */ blez $v0, .L7F007A14 /* 03C4D8 7F0079A8 00147080 */ sll $t6, $s4, 2 -/* 03C4DC 7F0079AC 3C0F8008 */ lui $t7, %hi(ptr_BONDdata_p1) -/* 03C4E0 7F0079B0 25EF9EE0 */ addiu $t7, %lo(ptr_BONDdata_p1) # addiu $t7, $t7, -0x6120 +/* 03C4DC 7F0079AC 3C0F8008 */ lui $t7, %hi(players) +/* 03C4E0 7F0079B0 25EF9EE0 */ addiu $t7, %lo(players) # addiu $t7, $t7, -0x6120 /* 03C4E4 7F0079B4 01CF9021 */ addu $s2, $t6, $t7 /* 03C4E8 7F0079B8 24130750 */ li $s3, 1872 /* 03C4EC 7F0079BC 00008825 */ move $s1, $zero @@ -99,7 +99,7 @@ glabel cleanupplayersoundrelated /* 03C524 7F0079F4 5633FFF3 */ bnel $s1, $s3, .L7F0079C4 /* 03C528 7F0079F8 8E580000 */ lw $t8, ($s2) /* 03C52C 7F0079FC 26940001 */ addiu $s4, $s4, 1 -/* 03C530 7F007A00 0FC26919 */ jal get_num_players +/* 03C530 7F007A00 0FC26919 */ jal getPlayerCount /* 03C534 7F007A04 26520004 */ addiu $s2, $s2, 4 /* 03C538 7F007A08 0282082A */ slt $at, $s4, $v0 /* 03C53C 7F007A0C 5420FFEC */ bnezl $at, .L7F0079C0 diff --git a/src/game/unk_08DBB0.c b/src/game/unk_08DBB0.c index 96a979d..a20d024 100644 --- a/src/game/unk_08DBB0.c +++ b/src/game/unk_08DBB0.c @@ -1,6 +1,7 @@ #include "ultra64.h" #include "game/lvl.h" #include "game/unk_093880.h" +#include "game/chrai.h" // data //D:80036AD0 @@ -60,388 +61,98 @@ u32 D_80036B6C = 0; // rodata +void currentPlayerToggle5BC() { + pPlayer->field_5BC = !pPlayer->field_5BC; +} +u32 get_random_value(); +#define U32_MAX 4294967295 +void currentPlayerUpdateIdleHeadRoll() { + f32 mult = 1.0f / U32_MAX; -#ifdef NONMATCHING// -void sub_GAME_7F08DBB0(void) + pPlayer->standlook[pPlayer->standcnt][0] = ((f32)get_random_value() * mult - 0.5f) * 0.02f; + pPlayer->standlook[pPlayer->standcnt][2] = 1; + pPlayer->standup[pPlayer->standcnt][0] = ((f32)get_random_value() * mult - 0.5f) * 0.02f; + pPlayer->standup[pPlayer->standcnt][1] = 1; + + if (pPlayer->standcnt) { + pPlayer->standlook[pPlayer->standcnt][1] = (f32)get_random_value() * mult * 0.01f; + pPlayer->standup[pPlayer->standcnt][2] = (f32)get_random_value() * mult * -0.01f; + } else { + pPlayer->standlook[pPlayer->standcnt][1] = (f32)get_random_value() * mult * -0.01f; + pPlayer->standup[pPlayer->standcnt][2] = (f32)get_random_value() * mult * 0.01f; + } + + pPlayer->standcnt = 1 - pPlayer->standcnt; +} + +void currentPlayerUpdateHeadPos(vec3 vel) { + s32 i; + + if (pPlayer->resetheadpos) { + pPlayer->headpossum[0] = 0.0f; + pPlayer->headpossum[1] = (vel[1] / (1.0f - 0.93f)); + pPlayer->headpossum[2] = 0.0f; + + pPlayer->resetheadpos = FALSE; + } + + for (i = 0; i < clock_timer; i++) { + pPlayer->headpossum[0] = ((0.93f * pPlayer->headpossum[0]) + vel[0]); + pPlayer->headpossum[1] = ((0.93f * pPlayer->headpossum[1]) + vel[1]); + pPlayer->headpossum[2] = ((0.93f * pPlayer->headpossum[2]) + vel[2]); + } + + pPlayer->headpos[0] = (pPlayer->headpossum[0] * (1.0f - 0.93f)); + pPlayer->headpos[1] = (pPlayer->headpossum[1] * (1.0f - 0.93f)); + pPlayer->headpos[2] = (pPlayer->headpossum[2] * (1.0f - 0.93f)); +} + +void currentPlayerUpdateHeadRot(vec3 lookvel, vec3 upvel) { - pPlayer->field_5BC = (pPlayer->field_5BC == 0); + s32 i; + + if (pPlayer->resetheadrot) { + pPlayer->headlooksum[0] = lookvel[0] / (1.0f - pPlayer->headdamp); + pPlayer->headlooksum[1] = lookvel[1] / (1.0f - pPlayer->headdamp); + pPlayer->headlooksum[2] = lookvel[2] / (1.0f - pPlayer->headdamp); + pPlayer->headupsum[0] = upvel[0] / (1.0f - pPlayer->headdamp); + pPlayer->headupsum[1] = upvel[1] / (1.0f - pPlayer->headdamp); + pPlayer->headupsum[2] = upvel[2] / (1.0f - pPlayer->headdamp); + + pPlayer->resetheadrot = FALSE; + } + + for (i = 0; i < clock_timer; i++) { + pPlayer->headlooksum[0] = pPlayer->headdamp * pPlayer->headlooksum[0] + lookvel[0]; + pPlayer->headlooksum[1] = pPlayer->headdamp * pPlayer->headlooksum[1] + lookvel[1]; + pPlayer->headlooksum[2] = pPlayer->headdamp * pPlayer->headlooksum[2] + lookvel[2]; + pPlayer->headupsum[0] = pPlayer->headdamp * pPlayer->headupsum[0] + upvel[0]; + pPlayer->headupsum[1] = pPlayer->headdamp * pPlayer->headupsum[1] + upvel[1]; + pPlayer->headupsum[2] = pPlayer->headdamp * pPlayer->headupsum[2] + upvel[2]; + } + + pPlayer->headlook[0] = pPlayer->headlooksum[0] * (1.0f - pPlayer->headdamp); + pPlayer->headlook[1] = pPlayer->headlooksum[1] * (1.0f - pPlayer->headdamp); + pPlayer->headlook[2] = pPlayer->headlooksum[2] * (1.0f - pPlayer->headdamp); + pPlayer->headup[0] = pPlayer->headupsum[0] * (1.0f - pPlayer->headdamp); + pPlayer->headup[1] = pPlayer->headupsum[1] * (1.0f - pPlayer->headdamp); + pPlayer->headup[2] = pPlayer->headupsum[2] * (1.0f - pPlayer->headdamp); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F08DBB0 -/* 0C26E0 7F08DBB0 3C038008 */ lui $v1, %hi(pPlayer) -/* 0C26E4 7F08DBB4 8C63A0B0 */ lw $v1, %lo(pPlayer)($v1) -/* 0C26E8 7F08DBB8 806205BC */ lb $v0, 0x5bc($v1) -/* 0C26EC 7F08DBBC 2C4E0001 */ sltiu $t6, $v0, 1 -/* 0C26F0 7F08DBC0 03E00008 */ jr $ra -/* 0C26F4 7F08DBC4 A06E05BC */ sb $t6, 0x5bc($v1) -) -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F08DBC8(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_800552E0 -.word 0x3ca3d70a /*0.02*/ -glabel D_800552E4 -.word 0x3ca3d70a /*0.02*/ -glabel D_800552E8 -.word 0x3c23d70a /*0.0099999998*/ -glabel D_800552EC -.word 0xbc23d70a /*-0.0099999998*/ -glabel D_800552F0 -.word 0xbc23d70a /*-0.0099999998*/ -glabel D_800552F4 -.word 0x3c23d70a /*0.0099999998*/ -.text -glabel sub_GAME_7F08DBC8 -/* 0C26F8 7F08DBC8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0C26FC 7F08DBCC AFBF002C */ sw $ra, 0x2c($sp) -/* 0C2700 7F08DBD0 AFB20028 */ sw $s2, 0x28($sp) -/* 0C2704 7F08DBD4 AFB10024 */ sw $s1, 0x24($sp) -/* 0C2708 7F08DBD8 AFB00020 */ sw $s0, 0x20($sp) -/* 0C270C 7F08DBDC 0C002914 */ jal get_random_value -/* 0C2710 7F08DBE0 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0C2714 7F08DBE4 44822000 */ mtc1 $v0, $f4 -/* 0C2718 7F08DBE8 3C118008 */ lui $s1, %hi(pPlayer) -/* 0C271C 7F08DBEC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0C2720 7F08DBF0 4481A000 */ mtc1 $at, $f20 -/* 0C2724 7F08DBF4 2631A0B0 */ addiu $s1, %lo(pPlayer) # addiu $s1, $s1, -0x5f50 -/* 0C2728 7F08DBF8 8E300000 */ lw $s0, ($s1) -/* 0C272C 7F08DBFC 2412000C */ li $s2, 12 -/* 0C2730 7F08DC00 04410005 */ bgez $v0, .L7F08DC18 -/* 0C2734 7F08DC04 468021A0 */ cvt.s.w $f6, $f4 -/* 0C2738 7F08DC08 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C273C 7F08DC0C 44814000 */ mtc1 $at, $f8 -/* 0C2740 7F08DC10 00000000 */ nop -/* 0C2744 7F08DC14 46083180 */ add.s $f6, $f6, $f8 -.L7F08DC18: -/* 0C2748 7F08DC18 46143282 */ mul.s $f10, $f6, $f20 -/* 0C274C 7F08DC1C 8E0E0594 */ lw $t6, 0x594($s0) -/* 0C2750 7F08DC20 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0C2754 7F08DC24 44818000 */ mtc1 $at, $f16 -/* 0C2758 7F08DC28 01D20019 */ multu $t6, $s2 -/* 0C275C 7F08DC2C 3C018005 */ lui $at, %hi(D_800552E0) -/* 0C2760 7F08DC30 C42452E0 */ lwc1 $f4, %lo(D_800552E0)($at) -/* 0C2764 7F08DC34 46105481 */ sub.s $f18, $f10, $f16 -/* 0C2768 7F08DC38 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0C276C 7F08DC3C 44813000 */ mtc1 $at, $f6 -/* 0C2770 7F08DC40 46049202 */ mul.s $f8, $f18, $f4 -/* 0C2774 7F08DC44 00007812 */ mflo $t7 -/* 0C2778 7F08DC48 020FC021 */ addu $t8, $s0, $t7 -/* 0C277C 7F08DC4C E7080564 */ swc1 $f8, 0x564($t8) -/* 0C2780 7F08DC50 8E300000 */ lw $s0, ($s1) -/* 0C2784 7F08DC54 8E190594 */ lw $t9, 0x594($s0) -/* 0C2788 7F08DC58 03320019 */ multu $t9, $s2 -/* 0C278C 7F08DC5C 00004012 */ mflo $t0 -/* 0C2790 7F08DC60 02084821 */ addu $t1, $s0, $t0 -/* 0C2794 7F08DC64 0C002914 */ jal get_random_value -/* 0C2798 7F08DC68 E526056C */ swc1 $f6, 0x56c($t1) -/* 0C279C 7F08DC6C 44825000 */ mtc1 $v0, $f10 -/* 0C27A0 7F08DC70 8E300000 */ lw $s0, ($s1) -/* 0C27A4 7F08DC74 04410005 */ bgez $v0, .L7F08DC8C -/* 0C27A8 7F08DC78 46805420 */ cvt.s.w $f16, $f10 -/* 0C27AC 7F08DC7C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C27B0 7F08DC80 44819000 */ mtc1 $at, $f18 -/* 0C27B4 7F08DC84 00000000 */ nop -/* 0C27B8 7F08DC88 46128400 */ add.s $f16, $f16, $f18 -.L7F08DC8C: -/* 0C27BC 7F08DC8C 46148102 */ mul.s $f4, $f16, $f20 -/* 0C27C0 7F08DC90 8E0A0594 */ lw $t2, 0x594($s0) -/* 0C27C4 7F08DC94 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0C27C8 7F08DC98 44814000 */ mtc1 $at, $f8 -/* 0C27CC 7F08DC9C 01520019 */ multu $t2, $s2 -/* 0C27D0 7F08DCA0 3C018005 */ lui $at, %hi(D_800552E4) -/* 0C27D4 7F08DCA4 C42A52E4 */ lwc1 $f10, %lo(D_800552E4)($at) -/* 0C27D8 7F08DCA8 46082181 */ sub.s $f6, $f4, $f8 -/* 0C27DC 7F08DCAC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0C27E0 7F08DCB0 44818000 */ mtc1 $at, $f16 -/* 0C27E4 7F08DCB4 460A3482 */ mul.s $f18, $f6, $f10 -/* 0C27E8 7F08DCB8 00005812 */ mflo $t3 -/* 0C27EC 7F08DCBC 020B6021 */ addu $t4, $s0, $t3 -/* 0C27F0 7F08DCC0 E592057C */ swc1 $f18, 0x57c($t4) -/* 0C27F4 7F08DCC4 8E300000 */ lw $s0, ($s1) -/* 0C27F8 7F08DCC8 8E0D0594 */ lw $t5, 0x594($s0) -/* 0C27FC 7F08DCCC 01B20019 */ multu $t5, $s2 -/* 0C2800 7F08DCD0 00007012 */ mflo $t6 -/* 0C2804 7F08DCD4 020E7821 */ addu $t7, $s0, $t6 -/* 0C2808 7F08DCD8 E5F00580 */ swc1 $f16, 0x580($t7) -/* 0C280C 7F08DCDC 8E380000 */ lw $t8, ($s1) -/* 0C2810 7F08DCE0 8F190594 */ lw $t9, 0x594($t8) -/* 0C2814 7F08DCE4 13200027 */ beqz $t9, .L7F08DD84 -/* 0C2818 7F08DCE8 00000000 */ nop -/* 0C281C 7F08DCEC 0C002914 */ jal get_random_value -/* 0C2820 7F08DCF0 00000000 */ nop -/* 0C2824 7F08DCF4 44822000 */ mtc1 $v0, $f4 -/* 0C2828 7F08DCF8 8E300000 */ lw $s0, ($s1) -/* 0C282C 7F08DCFC 04410005 */ bgez $v0, .L7F08DD14 -/* 0C2830 7F08DD00 46802220 */ cvt.s.w $f8, $f4 -/* 0C2834 7F08DD04 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C2838 7F08DD08 44813000 */ mtc1 $at, $f6 -/* 0C283C 7F08DD0C 00000000 */ nop -/* 0C2840 7F08DD10 46064200 */ add.s $f8, $f8, $f6 -.L7F08DD14: -/* 0C2844 7F08DD14 8E080594 */ lw $t0, 0x594($s0) -/* 0C2848 7F08DD18 46144282 */ mul.s $f10, $f8, $f20 -/* 0C284C 7F08DD1C 3C018005 */ lui $at, %hi(D_800552E8) -/* 0C2850 7F08DD20 01120019 */ multu $t0, $s2 -/* 0C2854 7F08DD24 C43252E8 */ lwc1 $f18, %lo(D_800552E8)($at) -/* 0C2858 7F08DD28 46125402 */ mul.s $f16, $f10, $f18 -/* 0C285C 7F08DD2C 00004812 */ mflo $t1 -/* 0C2860 7F08DD30 02095021 */ addu $t2, $s0, $t1 -/* 0C2864 7F08DD34 0C002914 */ jal get_random_value -/* 0C2868 7F08DD38 E5500568 */ swc1 $f16, 0x568($t2) -/* 0C286C 7F08DD3C 44822000 */ mtc1 $v0, $f4 -/* 0C2870 7F08DD40 8E300000 */ lw $s0, ($s1) -/* 0C2874 7F08DD44 04410005 */ bgez $v0, .L7F08DD5C -/* 0C2878 7F08DD48 468021A0 */ cvt.s.w $f6, $f4 -/* 0C287C 7F08DD4C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C2880 7F08DD50 44814000 */ mtc1 $at, $f8 -/* 0C2884 7F08DD54 00000000 */ nop -/* 0C2888 7F08DD58 46083180 */ add.s $f6, $f6, $f8 -.L7F08DD5C: -/* 0C288C 7F08DD5C 8E0B0594 */ lw $t3, 0x594($s0) -/* 0C2890 7F08DD60 46143282 */ mul.s $f10, $f6, $f20 -/* 0C2894 7F08DD64 3C018005 */ lui $at, %hi(D_800552EC) -/* 0C2898 7F08DD68 01720019 */ multu $t3, $s2 -/* 0C289C 7F08DD6C C43252EC */ lwc1 $f18, %lo(D_800552EC)($at) -/* 0C28A0 7F08DD70 46125402 */ mul.s $f16, $f10, $f18 -/* 0C28A4 7F08DD74 00006012 */ mflo $t4 -/* 0C28A8 7F08DD78 020C6821 */ addu $t5, $s0, $t4 -/* 0C28AC 7F08DD7C 10000026 */ b .L7F08DE18 -/* 0C28B0 7F08DD80 E5B00584 */ swc1 $f16, 0x584($t5) -.L7F08DD84: -/* 0C28B4 7F08DD84 0C002914 */ jal get_random_value -/* 0C28B8 7F08DD88 00000000 */ nop -/* 0C28BC 7F08DD8C 44822000 */ mtc1 $v0, $f4 -/* 0C28C0 7F08DD90 8E300000 */ lw $s0, ($s1) -/* 0C28C4 7F08DD94 04410005 */ bgez $v0, .L7F08DDAC -/* 0C28C8 7F08DD98 46802220 */ cvt.s.w $f8, $f4 -/* 0C28CC 7F08DD9C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C28D0 7F08DDA0 44813000 */ mtc1 $at, $f6 -/* 0C28D4 7F08DDA4 00000000 */ nop -/* 0C28D8 7F08DDA8 46064200 */ add.s $f8, $f8, $f6 -.L7F08DDAC: -/* 0C28DC 7F08DDAC 8E0E0594 */ lw $t6, 0x594($s0) -/* 0C28E0 7F08DDB0 46144282 */ mul.s $f10, $f8, $f20 -/* 0C28E4 7F08DDB4 3C018005 */ lui $at, %hi(D_800552F0) -/* 0C28E8 7F08DDB8 01D20019 */ multu $t6, $s2 -/* 0C28EC 7F08DDBC C43252F0 */ lwc1 $f18, %lo(D_800552F0)($at) -/* 0C28F0 7F08DDC0 46125402 */ mul.s $f16, $f10, $f18 -/* 0C28F4 7F08DDC4 00007812 */ mflo $t7 -/* 0C28F8 7F08DDC8 020FC021 */ addu $t8, $s0, $t7 -/* 0C28FC 7F08DDCC 0C002914 */ jal get_random_value -/* 0C2900 7F08DDD0 E7100568 */ swc1 $f16, 0x568($t8) -/* 0C2904 7F08DDD4 44822000 */ mtc1 $v0, $f4 -/* 0C2908 7F08DDD8 8E300000 */ lw $s0, ($s1) -/* 0C290C 7F08DDDC 04410005 */ bgez $v0, .L7F08DDF4 -/* 0C2910 7F08DDE0 468021A0 */ cvt.s.w $f6, $f4 -/* 0C2914 7F08DDE4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0C2918 7F08DDE8 44814000 */ mtc1 $at, $f8 -/* 0C291C 7F08DDEC 00000000 */ nop -/* 0C2920 7F08DDF0 46083180 */ add.s $f6, $f6, $f8 -.L7F08DDF4: -/* 0C2924 7F08DDF4 8E190594 */ lw $t9, 0x594($s0) -/* 0C2928 7F08DDF8 46143282 */ mul.s $f10, $f6, $f20 -/* 0C292C 7F08DDFC 3C018005 */ lui $at, %hi(D_800552F4) -/* 0C2930 7F08DE00 03320019 */ multu $t9, $s2 -/* 0C2934 7F08DE04 C43252F4 */ lwc1 $f18, %lo(D_800552F4)($at) -/* 0C2938 7F08DE08 46125402 */ mul.s $f16, $f10, $f18 -/* 0C293C 7F08DE0C 00004012 */ mflo $t0 -/* 0C2940 7F08DE10 02084821 */ addu $t1, $s0, $t0 -/* 0C2944 7F08DE14 E5300584 */ swc1 $f16, 0x584($t1) -.L7F08DE18: -/* 0C2948 7F08DE18 8E300000 */ lw $s0, ($s1) -/* 0C294C 7F08DE1C 240B0001 */ li $t3, 1 -/* 0C2950 7F08DE20 8E0A0594 */ lw $t2, 0x594($s0) -/* 0C2954 7F08DE24 016A6023 */ subu $t4, $t3, $t2 -/* 0C2958 7F08DE28 AE0C0594 */ sw $t4, 0x594($s0) -/* 0C295C 7F08DE2C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0C2960 7F08DE30 8FB20028 */ lw $s2, 0x28($sp) -/* 0C2964 7F08DE34 8FB10024 */ lw $s1, 0x24($sp) -/* 0C2968 7F08DE38 8FB00020 */ lw $s0, 0x20($sp) -/* 0C296C 7F08DE3C D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0C2970 7F08DE40 03E00008 */ jr $ra -/* 0C2974 7F08DE44 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F08DE48(struct xyzpoint *param_1) +void currentPlayerSetHeadDamp(f32 headdamp) { - int i; - - if (pPlayer->field_4DC != 0) - { - (pPlayer->velocity).x = 0.00000000f; - (pPlayer->velocity).y = param_1->y / 0.06999999f; - (pPlayer->velocity).z = 0.00000000f; - pPlayer->field_4DC = 0; - } - for (i = 0; i < clock_timer; ++i) - { - //wrong register allocation for mult - (pPlayer->velocity).x = param_1->x + ((pPlayer->velocity).x * 0.93f); - (pPlayer->velocity).y = param_1->y + ((pPlayer->velocity).y * 0.93f); - (pPlayer->velocity).z = param_1->z + ((pPlayer->velocity).z * 0.93f); - } - (pPlayer->scaled_velocity).x = (pPlayer->velocity).x * 0.06999999f; - (pPlayer->scaled_velocity).y = (pPlayer->velocity).y * 0.06999999f; - (pPlayer->scaled_velocity).z = (pPlayer->velocity).z * 0.06999999f; + if (headdamp != pPlayer->headdamp) { + f32 divisor = 1.0f - headdamp; + pPlayer->headlooksum[0] = (pPlayer->headlooksum[0] * (1.0f - pPlayer->headdamp)) / divisor; + pPlayer->headlooksum[1] = (pPlayer->headlooksum[1] * (1.0f - pPlayer->headdamp)) / divisor; + pPlayer->headlooksum[2] = (pPlayer->headlooksum[2] * (1.0f - pPlayer->headdamp)) / divisor; + pPlayer->headupsum[0] = (pPlayer->headupsum[0] * (1.0f - pPlayer->headdamp)) / divisor; + pPlayer->headupsum[1] = (pPlayer->headupsum[1] * (1.0f - pPlayer->headdamp)) / divisor; + pPlayer->headupsum[2] = (pPlayer->headupsum[2] * (1.0f - pPlayer->headdamp)) / divisor; + pPlayer->headdamp = headdamp; + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800552F8 -.word 0x3d8f5c28 /*0.069999993*/ -glabel master_player_perspective -.word 0x3d8f5c28 /*0.069999993*/ -glabel D_80055300 -.word 0x3f6e147b /*0.93000001*/ -.text -glabel sub_GAME_7F08DE48 -/* 0C2978 7F08DE48 3C058008 */ lui $a1, %hi(pPlayer) -/* 0C297C 7F08DE4C 24A5A0B0 */ addiu $a1, %lo(pPlayer) # addiu $a1, $a1, -0x5f50 -/* 0C2980 7F08DE50 8CA20000 */ lw $v0, ($a1) -/* 0C2984 7F08DE54 3C068005 */ lui $a2, %hi(clock_timer) -/* 0C2988 7F08DE58 24C68374 */ addiu $a2, %lo(clock_timer) # addiu $a2, $a2, -0x7c8c -/* 0C298C 7F08DE5C 8C4E04DC */ lw $t6, 0x4dc($v0) -/* 0C2990 7F08DE60 51C0000E */ beql $t6, $zero, .L7F08DE9C -/* 0C2994 7F08DE64 8CC80000 */ lw $t0, ($a2) -/* 0C2998 7F08DE68 44800000 */ mtc1 $zero, $f0 -/* 0C299C 7F08DE6C 3C018005 */ lui $at, %hi(D_800552F8) -/* 0C29A0 7F08DE70 C42252F8 */ lwc1 $f2, %lo(D_800552F8)($at) -/* 0C29A4 7F08DE74 E4400520 */ swc1 $f0, 0x520($v0) -/* 0C29A8 7F08DE78 C4840004 */ lwc1 $f4, 4($a0) -/* 0C29AC 7F08DE7C 8CAF0000 */ lw $t7, ($a1) -/* 0C29B0 7F08DE80 46022183 */ div.s $f6, $f4, $f2 -/* 0C29B4 7F08DE84 E5E60524 */ swc1 $f6, 0x524($t7) -/* 0C29B8 7F08DE88 8CB80000 */ lw $t8, ($a1) -/* 0C29BC 7F08DE8C E7000528 */ swc1 $f0, 0x528($t8) -/* 0C29C0 7F08DE90 8CB90000 */ lw $t9, ($a1) -/* 0C29C4 7F08DE94 AF2004DC */ sw $zero, 0x4dc($t9) -/* 0C29C8 7F08DE98 8CC80000 */ lw $t0, ($a2) -.L7F08DE9C: -/* 0C29CC 7F08DE9C 3C018005 */ lui $at, %hi(master_player_perspective) -/* 0C29D0 7F08DEA0 C42252FC */ lwc1 $f2, %lo(master_player_perspective)($at) -/* 0C29D4 7F08DEA4 1900001A */ blez $t0, .L7F08DF10 -/* 0C29D8 7F08DEA8 00001825 */ move $v1, $zero -/* 0C29DC 7F08DEAC 3C018005 */ lui $at, %hi(D_80055300) -/* 0C29E0 7F08DEB0 C4205300 */ lwc1 $f0, %lo(D_80055300)($at) -/* 0C29E4 7F08DEB4 8CA20000 */ lw $v0, ($a1) -.L7F08DEB8: -/* 0C29E8 7F08DEB8 C4880000 */ lwc1 $f8, ($a0) -/* 0C29EC 7F08DEBC 24630001 */ addiu $v1, $v1, 1 -/* 0C29F0 7F08DEC0 C44A0520 */ lwc1 $f10, 0x520($v0) -/* 0C29F4 7F08DEC4 460A0402 */ mul.s $f16, $f0, $f10 -/* 0C29F8 7F08DEC8 46104480 */ add.s $f18, $f8, $f16 -/* 0C29FC 7F08DECC E4520520 */ swc1 $f18, 0x520($v0) -/* 0C2A00 7F08DED0 8CA20000 */ lw $v0, ($a1) -/* 0C2A04 7F08DED4 C4840004 */ lwc1 $f4, 4($a0) -/* 0C2A08 7F08DED8 C4460524 */ lwc1 $f6, 0x524($v0) -/* 0C2A0C 7F08DEDC 46060282 */ mul.s $f10, $f0, $f6 -/* 0C2A10 7F08DEE0 460A2200 */ add.s $f8, $f4, $f10 -/* 0C2A14 7F08DEE4 E4480524 */ swc1 $f8, 0x524($v0) -/* 0C2A18 7F08DEE8 8CA20000 */ lw $v0, ($a1) -/* 0C2A1C 7F08DEEC C4900008 */ lwc1 $f16, 8($a0) -/* 0C2A20 7F08DEF0 C4520528 */ lwc1 $f18, 0x528($v0) -/* 0C2A24 7F08DEF4 46120182 */ mul.s $f6, $f0, $f18 -/* 0C2A28 7F08DEF8 46068100 */ add.s $f4, $f16, $f6 -/* 0C2A2C 7F08DEFC E4440528 */ swc1 $f4, 0x528($v0) -/* 0C2A30 7F08DF00 8CC90000 */ lw $t1, ($a2) -/* 0C2A34 7F08DF04 0069082A */ slt $at, $v1, $t1 -/* 0C2A38 7F08DF08 5420FFEB */ bnezl $at, .L7F08DEB8 -/* 0C2A3C 7F08DF0C 8CA20000 */ lw $v0, ($a1) -.L7F08DF10: -/* 0C2A40 7F08DF10 8CA20000 */ lw $v0, ($a1) -/* 0C2A44 7F08DF14 C44A0520 */ lwc1 $f10, 0x520($v0) -/* 0C2A48 7F08DF18 46025202 */ mul.s $f8, $f10, $f2 -/* 0C2A4C 7F08DF1C E44804FC */ swc1 $f8, 0x4fc($v0) -/* 0C2A50 7F08DF20 8CA20000 */ lw $v0, ($a1) -/* 0C2A54 7F08DF24 C4520524 */ lwc1 $f18, 0x524($v0) -/* 0C2A58 7F08DF28 46029402 */ mul.s $f16, $f18, $f2 -/* 0C2A5C 7F08DF2C E4500500 */ swc1 $f16, 0x500($v0) -/* 0C2A60 7F08DF30 8CA20000 */ lw $v0, ($a1) -/* 0C2A64 7F08DF34 C4460528 */ lwc1 $f6, 0x528($v0) -/* 0C2A68 7F08DF38 46023102 */ mul.s $f4, $f6, $f2 -/* 0C2A6C 7F08DF3C 03E00008 */ jr $ra -/* 0C2A70 7F08DF40 E4440504 */ swc1 $f4, 0x504($v0) -) -#endif - - - - - - -void sub_GAME_7F08DF44(struct xyzpoint *param_1, struct xyzpoint *param_2) -{ - int i; - - if (pPlayer->field_4E0 != 0) - { - (pPlayer->field_52C).x = param_1->x / (1.0f - pPlayer->field_4EC); - (pPlayer->field_52C).y = param_1->y / (1.0f - pPlayer->field_4EC); - (pPlayer->field_52C).z = param_1->z / (1.0f - pPlayer->field_4EC); - (pPlayer->field_538).x = param_2->x / (1.0f - pPlayer->field_4EC); - (pPlayer->field_538).y = param_2->y / (1.0f - pPlayer->field_4EC); - (pPlayer->field_538).z = param_2->z / (1.0f - pPlayer->field_4EC); - pPlayer->field_4E0 = 0; - } - - for (i = 0; i < clock_timer; ++i) - { - (pPlayer->field_52C).x = param_1->x + pPlayer->field_4EC * (pPlayer->field_52C).x; - (pPlayer->field_52C).y = param_1->y + pPlayer->field_4EC * (pPlayer->field_52C).y; - (pPlayer->field_52C).z = param_1->z + pPlayer->field_4EC * (pPlayer->field_52C).z; - (pPlayer->field_538).x = param_2->x + pPlayer->field_4EC * (pPlayer->field_538).x; - (pPlayer->field_538).y = param_2->y + pPlayer->field_4EC * (pPlayer->field_538).y; - (pPlayer->field_538).z = param_2->z + pPlayer->field_4EC * (pPlayer->field_538).z; - } - - (pPlayer->field_508).x = (pPlayer->field_52C).x * (1.0f - pPlayer->field_4EC); - (pPlayer->field_508).y = (pPlayer->field_52C).y * (1.0f - pPlayer->field_4EC); - (pPlayer->field_508).z = (pPlayer->field_52C).z * (1.0f - pPlayer->field_4EC); - (pPlayer->field_514).x = (pPlayer->field_538).x * (1.0f - pPlayer->field_4EC); - (pPlayer->field_514).y = (pPlayer->field_538).y * (1.0f - pPlayer->field_4EC); - (pPlayer->field_514).z = (pPlayer->field_538).z * (1.0f - pPlayer->field_4EC); - -} - - -void sub_GAME_7F08E164(float param_1) -{ - float fVar1; - - if (param_1 != pPlayer->field_4EC) { - fVar1 = 1.0f - param_1; - (pPlayer->field_52C).x = ((pPlayer->field_52C).x * (1.0f - pPlayer->field_4EC)) / fVar1; - (pPlayer->field_52C).y = ((pPlayer->field_52C).y * (1.0f - pPlayer->field_4EC)) / fVar1; - (pPlayer->field_52C).z = ((pPlayer->field_52C).z * (1.0f - pPlayer->field_4EC)) / fVar1; - - (pPlayer->field_538).x = ((pPlayer->field_538).x * (1.0f - pPlayer->field_4EC)) / fVar1; - (pPlayer->field_538).y = ((pPlayer->field_538).y * (1.0f - pPlayer->field_4EC)) / fVar1; - (pPlayer->field_538).z = ((pPlayer->field_538).z * (1.0f - pPlayer->field_4EC)) / fVar1; - pPlayer->field_4EC = param_1; - } -} - - - #ifdef NONMATCHING void sub_GAME_7F08E240(void) { @@ -745,13 +456,13 @@ glabel sub_GAME_7F08E240 /* 0C3174 7F08E644 2B01003D */ slti $at, $t8, 0x3d /* 0C3178 7F08E648 14200005 */ bnez $at, .L7F08E660 /* 0C317C 7F08E64C 3C018005 */ lui $at, %hi(D_80055320) -/* 0C3180 7F08E650 0FC23859 */ jal sub_GAME_7F08E164 +/* 0C3180 7F08E650 0FC23859 */ jal currentPlayerSetHeadDamp /* 0C3184 7F08E654 C42C5320 */ lwc1 $f12, %lo(D_80055320)($at) /* 0C3188 7F08E658 1000008E */ b .L7F08E894 /* 0C318C 7F08E65C 00000000 */ nop .L7F08E660: /* 0C3190 7F08E660 3C018005 */ lui $at, %hi(D_80055324) -/* 0C3194 7F08E664 0FC23859 */ jal sub_GAME_7F08E164 +/* 0C3194 7F08E664 0FC23859 */ jal currentPlayerSetHeadDamp /* 0C3198 7F08E668 C42C5324 */ lwc1 $f12, %lo(D_80055324)($at) /* 0C319C 7F08E66C 10000089 */ b .L7F08E894 /* 0C31A0 7F08E670 00000000 */ nop @@ -769,7 +480,7 @@ glabel sub_GAME_7F08E240 /* 0C31CC 7F08E69C C44806E4 */ lwc1 $f8, 0x6e4($v0) /* 0C31D0 7F08E6A0 E7A800C8 */ swc1 $f8, 0xc8($sp) /* 0C31D4 7F08E6A4 C44A06E8 */ lwc1 $f10, 0x6e8($v0) -/* 0C31D8 7F08E6A8 0FC23859 */ jal sub_GAME_7F08E164 +/* 0C31D8 7F08E6A8 0FC23859 */ jal currentPlayerSetHeadDamp /* 0C31DC 7F08E6AC E7AA00CC */ swc1 $f10, 0xcc($sp) /* 0C31E0 7F08E6B0 10000078 */ b .L7F08E894 /* 0C31E4 7F08E6B4 00000000 */ nop @@ -790,7 +501,7 @@ glabel sub_GAME_7F08E240 /* 0C321C 7F08E6EC E7A000E4 */ swc1 $f0, 0xe4($sp) /* 0C3220 7F08E6F0 E7A600E0 */ swc1 $f6, 0xe0($sp) /* 0C3224 7F08E6F4 AC4004F0 */ sw $zero, 0x4f0($v0) -/* 0C3228 7F08E6F8 0FC23859 */ jal sub_GAME_7F08E164 +/* 0C3228 7F08E6F8 0FC23859 */ jal currentPlayerSetHeadDamp /* 0C322C 7F08E6FC C42C532C */ lwc1 $f12, %lo(D_8005532C)($at) /* 0C3230 7F08E700 0FC227B5 */ jal get_BONDdata_bondfadefracnew /* 0C3234 7F08E704 00000000 */ nop @@ -816,7 +527,7 @@ glabel sub_GAME_7F08E240 /* 0C3284 7F08E754 00000000 */ nop /* 0C3288 7F08E758 4502000C */ bc1fl .L7F08E78C /* 0C328C 7F08E75C 8C430594 */ lw $v1, 0x594($v0) -/* 0C3290 7F08E760 0FC236F2 */ jal sub_GAME_7F08DBC8 +/* 0C3290 7F08E760 0FC236F2 */ jal currentPlayerUpdateIdleHeadRoll /* 0C3294 7F08E764 00000000 */ nop /* 0C3298 7F08E768 8E020000 */ lw $v0, ($s0) /* 0C329C 7F08E76C 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -895,10 +606,10 @@ glabel sub_GAME_7F08E240 /* 0C33BC 7F08E88C 46049282 */ mul.s $f10, $f18, $f4 /* 0C33C0 7F08E890 E7AA00CC */ swc1 $f10, 0xcc($sp) .L7F08E894: -/* 0C33C4 7F08E894 0FC23792 */ jal sub_GAME_7F08DE48 +/* 0C33C4 7F08E894 0FC23792 */ jal currentPlayerUpdateHeadPos /* 0C33C8 7F08E898 27A400DC */ addiu $a0, $sp, 0xdc /* 0C33CC 7F08E89C 27A400D0 */ addiu $a0, $sp, 0xd0 -/* 0C33D0 7F08E8A0 0FC237D1 */ jal sub_GAME_7F08DF44 +/* 0C33D0 7F08E8A0 0FC237D1 */ jal currentPlayerUpdateHeadRot /* 0C33D4 7F08E8A4 27A500C4 */ addiu $a1, $sp, 0xc4 /* 0C33D8 7F08E8A8 8FBF001C */ lw $ra, 0x1c($sp) /* 0C33DC 7F08E8AC 8FB00018 */ lw $s0, 0x18($sp) @@ -990,8 +701,8 @@ glabel sub_GAME_7F08E8BC /* 0C34F0 7F08E9C0 24840598 */ addiu $a0, $a0, 0x598 /* 0C34F4 7F08E9C4 3C048008 */ lui $a0, %hi(pPlayer) /* 0C34F8 7F08E9C8 8C84A0B0 */ lw $a0, %lo(pPlayer)($a0) -/* 0C34FC 7F08E9CC 3C057F09 */ lui $a1, %hi(sub_GAME_7F08DBB0) # $a1, 0x7f09 -/* 0C3500 7F08E9D0 24A5DBB0 */ addiu $a1, %lo(sub_GAME_7F08DBB0) # addiu $a1, $a1, -0x2450 +/* 0C34FC 7F08E9CC 3C057F09 */ lui $a1, %hi(currentPlayerToggle5BC) # $a1, 0x7f09 +/* 0C3500 7F08E9D0 24A5DBB0 */ addiu $a1, %lo(currentPlayerToggle5BC) # addiu $a1, $a1, -0x2450 /* 0C3504 7F08E9D4 0FC1BF8F */ jal sub_GAME_7F06FE3C /* 0C3508 7F08E9D8 24840598 */ addiu $a0, $a0, 0x598 /* 0C350C 7F08E9DC 3C198008 */ lui $t9, %hi(pPlayer) @@ -1637,12 +1348,28 @@ glabel sub_GAME_7F08EFA0 #endif - - - #ifdef NONMATCHING -void sub_GAME_7F08F090(void) { +struct Pad* sub_GAME_7F08F090(s32 *padNumList,s32 desiredDist, u32 setIndex) // findPadWithDistAndSet +{ + s32 padNum; + struct Pad *currPad; + padNum = padNumList[0]; + + while (padNum >= 0) + { + currPad = ptr_setup_path_tbl + padNum; + if (setIndex == currPad->pathSetIndex) { + if (desiredDist == currPad->dist_tmp) { + return currPad; + } + } + + padNumList += 1; + padNum = *padNumList; + } + + return (struct Pad*)0; } #else GLOBAL_ASM( @@ -1680,7 +1407,6 @@ glabel sub_GAME_7F08F090 - #ifdef NONMATCHING void sub_GAME_7F08F0E8(void) { @@ -1859,9 +1585,26 @@ glabel sub_GAME_7F08F1D8 -#ifdef NONMATCHING -void sub_GAME_7F08F2CC(void) { + +#ifdef NONMATCHING +void sub_GAME_7F08F2CC(struct Pad *startPad,struct Pad *endPad) +{ + s32 dist; + + sub_GAME_7F08F1D8(startPad,endPad,0); // do_BFS_withinPathSet + dist = endPad->dist_tmp + -1; + + while (dist >= 0) { + endPad->dist_tmp = endPad->dist_tmp + 10000; + endPad = sub_GAME_7F08F090(endPad->neighbours,dist,startPad->pathSetIndex); // findPadWithDistAndSet + dist = dist + -1; + } + + + dist = endPad->dist_tmp; + endPad->dist_tmp = dist + 10000; + return; } #else GLOBAL_ASM( diff --git a/src/game/unk_091080.c b/src/game/unk_091080.c index 1947e39..0c2597d 100644 --- a/src/game/unk_091080.c +++ b/src/game/unk_091080.c @@ -610,7 +610,7 @@ glabel sub_GAME_7F09166C #ifdef NONMATCHING void sub_GAME_7F0916F4(void) { - struct xyzpoint *pos; + struct coord *pos; pos = get_BONDdata_position(); stanbondx.x = pos->x; diff --git a/src/game/unk_093880.c b/src/game/unk_093880.c index 73921c8..e6d3eee 100644 --- a/src/game/unk_093880.c +++ b/src/game/unk_093880.c @@ -8,17 +8,14 @@ s32 copyof_stagenum; s32 dword_CODE_bss_80079E94; char dword_CODE_bss_80079E98[0x48]; -u32 *ptr_BONDdata_p1; -u32 *ptr_BONDdata_p2; -u32 *ptr_BONDdata_p3; -u32 *ptr_BONDdata_p4; +struct player *players[4]; struct player_data player1_player_data; struct player_data player2_player_data; struct player_data player3_player_data; struct player_data player4_player_data; -struct Player *pPlayer; +struct player *pPlayer; struct player_data *pPlayersPerm; s32 player_num; s32 random_byte; @@ -38,7 +35,7 @@ void sub_GAME_7F093880(f32 arg0, f32 arg1, ? arg2) { s32 sp24; // Node 0 - sp24 = sub_GAME_7F078444(); + sp24 = currentPlayerGetMatrix10D4(); sp1C = (f32) (getPlayer_c_screenleft() + arg0); sp18 = getPlayer_c_screentop(); sp20 = (f32) (get_ptr_currentdata()->unk38 + (arg1 + sp18)); @@ -54,7 +51,7 @@ glabel sub_GAME_7F093880 /* 0C83B4 7F093884 AFBF0014 */ sw $ra, 0x14($sp) /* 0C83B8 7F093888 E7AC0028 */ swc1 $f12, 0x28($sp) /* 0C83BC 7F09388C E7AE002C */ swc1 $f14, 0x2c($sp) -/* 0C83C0 7F093890 0FC1E111 */ jal sub_GAME_7F078444 +/* 0C83C0 7F093890 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0C83C4 7F093894 AFA60030 */ sw $a2, 0x30($sp) /* 0C83C8 7F093898 0FC1E131 */ jal getPlayer_c_screenleft /* 0C83CC 7F09389C AFA20024 */ sw $v0, 0x24($sp) @@ -1178,7 +1175,7 @@ glabel sub_GAME_7F094488 /* 0C9004 7F0944D4 8FA406B0 */ lw $a0, 0x6b0($sp) /* 0C9008 7F0944D8 55C0007B */ bnezl $t6, .L7F0946C8 /* 0C900C 7F0944DC 92050008 */ lbu $a1, 8($s0) -/* 0C9010 7F0944E0 0FC26919 */ jal get_num_players +/* 0C9010 7F0944E0 0FC26919 */ jal getPlayerCount /* 0C9014 7F0944E4 00000000 */ nop /* 0C9018 7F0944E8 24010001 */ li $at, 1 /* 0C901C 7F0944EC 1441003B */ bne $v0, $at, .L7F0945DC @@ -1198,15 +1195,15 @@ glabel sub_GAME_7F094488 /* 0C9054 7F094524 8FA406B0 */ lw $a0, 0x6b0($sp) /* 0C9058 7F094528 244B0008 */ addiu $t3, $v0, 8 /* 0C905C 7F09452C AFAB06B0 */ sw $t3, 0x6b0($sp) -/* 0C9060 7F094530 0C001127 */ jal get_video2_settings_width +/* 0C9060 7F094530 0C001127 */ jal viGetViewWidth /* 0C9064 7F094534 00408825 */ move $s1, $v0 -/* 0C9068 7F094538 0C001145 */ jal get_video2_settings_ulx +/* 0C9068 7F094538 0C001145 */ jal viGetViewLeft /* 0C906C 7F09453C A7A2007A */ sh $v0, 0x7a($sp) -/* 0C9070 7F094540 0C001149 */ jal get_video2_settings_uly +/* 0C9070 7F094540 0C001149 */ jal viGetViewTop /* 0C9074 7F094544 A7A2007C */ sh $v0, 0x7c($sp) /* 0C9078 7F094548 00028400 */ sll $s0, $v0, 0x10 /* 0C907C 7F09454C 00106403 */ sra $t4, $s0, 0x10 -/* 0C9080 7F094550 0C00112B */ jal get_video2_settings_height +/* 0C9080 7F094550 0C00112B */ jal viGetViewHeight /* 0C9084 7F094554 01808025 */ move $s0, $t4 /* 0C9088 7F094558 87AD007C */ lh $t5, 0x7c($sp) /* 0C908C 7F09455C 87AE007A */ lh $t6, 0x7a($sp) @@ -1221,11 +1218,11 @@ glabel sub_GAME_7F094488 /* 0C90B0 7F094580 01C17825 */ or $t7, $t6, $at /* 0C90B4 7F094584 00195380 */ sll $t2, $t9, 0xe /* 0C90B8 7F094588 01EAC025 */ or $t8, $t7, $t2 -/* 0C90BC 7F09458C 0C001145 */ jal get_video2_settings_ulx +/* 0C90BC 7F09458C 0C001145 */ jal viGetViewLeft /* 0C90C0 7F094590 AE380000 */ sw $t8, ($s1) /* 0C90C4 7F094594 00028400 */ sll $s0, $v0, 0x10 /* 0C90C8 7F094598 0010CC03 */ sra $t9, $s0, 0x10 -/* 0C90CC 7F09459C 0C001149 */ jal get_video2_settings_uly +/* 0C90CC 7F09459C 0C001149 */ jal viGetViewTop /* 0C90D0 7F0945A0 03208025 */ move $s0, $t9 /* 0C90D4 7F0945A4 304B03FF */ andi $t3, $v0, 0x3ff /* 0C90D8 7F0945A8 320D03FF */ andi $t5, $s0, 0x3ff @@ -2409,9 +2406,9 @@ def_7F094A38: .L7F0957AC: /* 0CA2DC 7F0957AC 5A20018E */ blezl $s1, .L7F095DE8 /* 0CA2E0 7F0957B0 8FAA005C */ lw $t2, 0x5c($sp) -/* 0CA2E4 7F0957B4 0FC1E0F9 */ jal get_BONDdata_field_10DC +/* 0CA2E4 7F0957B4 0FC1E0F9 */ jal currentPlayerGetProjectionMatrixF /* 0CA2E8 7F0957B8 00000000 */ nop -/* 0CA2EC 7F0957BC 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0CA2EC 7F0957BC 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0CA2F0 7F0957C0 00408025 */ move $s0, $v0 /* 0CA2F4 7F0957C4 02002025 */ move $a0, $s0 /* 0CA2F8 7F0957C8 00402825 */ move $a1, $v0 @@ -3939,9 +3936,9 @@ def_7F095E0C: /* 0CBA18 7F096EE8 3739FE81 */ ori $t9, (0xFC40FE81 & 0xFFFF) # ori $t9, $t9, 0xfe81 /* 0CBA1C 7F096EEC 35ADF97C */ ori $t5, (0x55FEF97C & 0xFFFF) # ori $t5, $t5, 0xf97c /* 0CBA20 7F096EF0 ADED0004 */ sw $t5, 4($t7) -/* 0CBA24 7F096EF4 0FC1E0F9 */ jal get_BONDdata_field_10DC +/* 0CBA24 7F096EF4 0FC1E0F9 */ jal currentPlayerGetProjectionMatrixF /* 0CBA28 7F096EF8 ADF90000 */ sw $t9, ($t7) -/* 0CBA2C 7F096EFC 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0CBA2C 7F096EFC 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0CBA30 7F096F00 00408025 */ move $s0, $v0 /* 0CBA34 7F096F04 02002025 */ move $a0, $s0 /* 0CBA38 7F096F08 00402825 */ move $a1, $v0 @@ -7516,10 +7513,10 @@ glabel default_player_perspective_and_height #ifdef NONMATCHING void reset_play_data_ptrs(void) { - ptr_BONDdata_p1[0] = NULL; - ptr_BONDdata_p1[1] = NULL; - ptr_BONDdata_p1[2] = NULL; - ptr_BONDdata_p1[3] = NULL; + players[0] = NULL; + players[1] = NULL; + players[2] = NULL; + players[3] = NULL; pPlayer = NULL; pPlayersPerm = NULL; player_num = 0; @@ -7533,8 +7530,8 @@ void reset_play_data_ptrs(void) GLOBAL_ASM( .text glabel reset_play_data_ptrs -/* 0CEE5C 7F09A32C 3C028008 */ lui $v0, %hi(ptr_BONDdata_p1) -/* 0CEE60 7F09A330 24429EE0 */ addiu $v0, %lo(ptr_BONDdata_p1) # addiu $v0, $v0, -0x6120 +/* 0CEE5C 7F09A32C 3C028008 */ lui $v0, %hi(players) +/* 0CEE60 7F09A330 24429EE0 */ addiu $v0, %lo(players) # addiu $v0, $v0, -0x6120 /* 0CEE64 7F09A334 AC400000 */ sw $zero, ($v0) /* 0CEE68 7F09A338 AC400004 */ sw $zero, 4($v0) /* 0CEE6C 7F09A33C AC400008 */ sw $zero, 8($v0) @@ -7568,17 +7565,17 @@ void init_player_data_ptrs_construct_viewports(int playercount) { int player; - ptr_BONDdata_p1[0] = NULL; - ptr_BONDdata_p1[1] = NULL; - ptr_BONDdata_p1[2] = NULL; - ptr_BONDdata_p1[3] = NULL; + players[0] = NULL; + players[1] = NULL; + players[2] = NULL; + players[3] = NULL; random_byte = get_random_value() & 0xff; if (playercount < 1) { initBONDdataforPlayer(0); set_cur_player(0); - set_cur_player_screen_size( get_video2_settings_width(), get_video2_settings_height() ); - set_cur_player_viewport_size( get_video2_settings_ulx(), get_video2_settings_uly() ); + set_cur_player_screen_size( viGetViewWidth(), viGetViewHeight() ); + set_cur_player_viewport_size( viGetViewLeft(), viGetViewTop() ); } else { for (player = 0; player != playercount; player++) @@ -7593,8 +7590,8 @@ void init_player_data_ptrs_construct_viewports(int playercount) GLOBAL_ASM( .text glabel init_player_data_ptrs_construct_viewports -/* 0CEEBC 7F09A38C 3C028008 */ lui $v0, %hi(ptr_BONDdata_p1) -/* 0CEEC0 7F09A390 24429EE0 */ addiu $v0, %lo(ptr_BONDdata_p1) # addiu $v0, $v0, -0x6120 +/* 0CEEBC 7F09A38C 3C028008 */ lui $v0, %hi(players) +/* 0CEEC0 7F09A390 24429EE0 */ addiu $v0, %lo(players) # addiu $v0, $v0, -0x6120 /* 0CEEC4 7F09A394 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0CEEC8 7F09A398 AFBF001C */ sw $ra, 0x1c($sp) /* 0CEECC 7F09A39C AFB10018 */ sw $s1, 0x18($sp) @@ -7627,20 +7624,20 @@ glabel init_player_data_ptrs_construct_viewports /* 0CEF2C 7F09A3FC 00002025 */ move $a0, $zero /* 0CEF30 7F09A400 0FC26C43 */ jal set_cur_player /* 0CEF34 7F09A404 00002025 */ move $a0, $zero -/* 0CEF38 7F09A408 0C001127 */ jal get_video2_settings_width +/* 0CEF38 7F09A408 0C001127 */ jal viGetViewWidth /* 0CEF3C 7F09A40C 00000000 */ nop /* 0CEF40 7F09A410 00028400 */ sll $s0, $v0, 0x10 /* 0CEF44 7F09A414 00107C03 */ sra $t7, $s0, 0x10 -/* 0CEF48 7F09A418 0C00112B */ jal get_video2_settings_height +/* 0CEF48 7F09A418 0C00112B */ jal viGetViewHeight /* 0CEF4C 7F09A41C 01E08025 */ move $s0, $t7 /* 0CEF50 7F09A420 02002025 */ move $a0, $s0 /* 0CEF54 7F09A424 0FC26C77 */ jal set_cur_player_screen_size /* 0CEF58 7F09A428 00402825 */ move $a1, $v0 -/* 0CEF5C 7F09A42C 0C001145 */ jal get_video2_settings_ulx +/* 0CEF5C 7F09A42C 0C001145 */ jal viGetViewLeft /* 0CEF60 7F09A430 00000000 */ nop /* 0CEF64 7F09A434 00028400 */ sll $s0, $v0, 0x10 /* 0CEF68 7F09A438 0010C403 */ sra $t8, $s0, 0x10 -/* 0CEF6C 7F09A43C 0C001149 */ jal get_video2_settings_uly +/* 0CEF6C 7F09A43C 0C001149 */ jal viGetViewTop /* 0CEF70 7F09A440 03008025 */ move $s0, $t8 /* 0CEF74 7F09A444 02002025 */ move $a0, $s0 /* 0CEF78 7F09A448 0FC26C7E */ jal set_cur_player_viewport_size @@ -7654,74 +7651,28 @@ glabel init_player_data_ptrs_construct_viewports ) #endif - - - - -#ifdef NONMATCHING -u32 get_num_players(void) +s32 getPlayerCount(void) { - u32 uVar1; - - uVar1 = (u32)(ptr_BONDdata_p1[0] != NULL); - if (ptr_BONDdata_p1[1] != NULL) { - uVar1 = (uint)(ptr_BONDdata_p1[0] != NULL) + 1; + s32 count = 0; + s32 i; + for (i = 0; i < 4; i++) { + if (players[i] != NULL) { + count++; + } } - if (ptr_BONDdata_p1[2] != NULL) { - uVar1 = uVar1 + 1; - } - if (ptr_BONDdata_p1[3] != NULL) { - uVar1 = uVar1 + 1; - } - return uVar1; + return count; } -#else -GLOBAL_ASM( -.text -glabel get_num_players -/* 0CEF94 7F09A464 3C0E8008 */ lui $t6, %hi(ptr_BONDdata_p1) -/* 0CEF98 7F09A468 8DCE9EE0 */ lw $t6, %lo(ptr_BONDdata_p1)($t6) -/* 0CEF9C 7F09A46C 00001825 */ move $v1, $zero -/* 0CEFA0 7F09A470 3C0F8008 */ lui $t7, %hi(ptr_BONDdata_p2) -/* 0CEFA4 7F09A474 11C00002 */ beqz $t6, .L7F09A480 -/* 0CEFA8 7F09A478 3C188008 */ lui $t8, %hi(ptr_BONDdata_p3) -/* 0CEFAC 7F09A47C 24030001 */ li $v1, 1 -.L7F09A480: -/* 0CEFB0 7F09A480 8DEF9EE4 */ lw $t7, %lo(ptr_BONDdata_p2)($t7) -/* 0CEFB4 7F09A484 3C198008 */ lui $t9, %hi(ptr_BONDdata_p4) -/* 0CEFB8 7F09A488 11E00002 */ beqz $t7, .L7F09A494 -/* 0CEFBC 7F09A48C 00000000 */ nop -/* 0CEFC0 7F09A490 24630001 */ addiu $v1, $v1, 1 -.L7F09A494: -/* 0CEFC4 7F09A494 8F189EE8 */ lw $t8, %lo(ptr_BONDdata_p3)($t8) -/* 0CEFC8 7F09A498 13000002 */ beqz $t8, .L7F09A4A4 -/* 0CEFCC 7F09A49C 00000000 */ nop -/* 0CEFD0 7F09A4A0 24630001 */ addiu $v1, $v1, 1 -.L7F09A4A4: -/* 0CEFD4 7F09A4A4 8F399EEC */ lw $t9, %lo(ptr_BONDdata_p4)($t9) -/* 0CEFD8 7F09A4A8 13200002 */ beqz $t9, .L7F09A4B4 -/* 0CEFDC 7F09A4AC 00000000 */ nop -/* 0CEFE0 7F09A4B0 24630001 */ addiu $v1, $v1, 1 -.L7F09A4B4: -/* 0CEFE4 7F09A4B4 03E00008 */ jr $ra -/* 0CEFE8 7F09A4B8 00601025 */ move $v0, $v1 -) -#endif - - - - #ifdef NONMATCHING void initBONDdataforPlayer(PLAYER_ID player) { int iVar1; int iVar2; - Player **ppPVar3; + player **ppPVar3; int *dest; int *src; int *src_next; - Player *pPVar4; + player *pPVar4; int array234undefined4 [234]; int iStack4; f32 temp_3f36e15f8e; @@ -7736,8 +7687,8 @@ void initBONDdataforPlayer(PLAYER_ID player) src = src_next; dest = dest + 3; } while (src_next != (int *)0x80040148); - pPVar4 = (Player *)mempAllocBytesInBank(0x2a80,4); - ppPVar3 = ptr_BONDdata_p1 + player; + pPVar4 = (player *)mempAllocBytesInBank(0x2a80,4); + ppPVar3 = players + player; *ppPVar3 = pPVar4; pPVar4->unknown = 0; (*ppPVar3)->xpos = 0.00000000; @@ -7774,14 +7725,14 @@ void initBONDdataforPlayer(PLAYER_ID player) (*ppPVar3)->field_90 = 0.00000000; (*ppPVar3)->field_94 = 0; (*ppPVar3)->field_98 = 0.00000000; - (*ppPVar3)->field_1274 = 0.00000000; + (*ppPVar3)->swaytarget = 0.00000000; (*ppPVar3)->field_1278 = 0.00000000; (*ppPVar3)->field_127C = 0.00000000; - (*ppPVar3)->crouchposition = 2; - (*ppPVar3)->field_29FC = 2; + (*ppPVar3)->crouchpos = 2; + (*ppPVar3)->autocrouchpos = 2; (*ppPVar3)->ducking_height_offset = 0.00000000; (*ppPVar3)->field_A4 = 0.00000000; - (*ppPVar3)->position_data_pointer = 0; + (*ppPVar3)->prop = 0; (*ppPVar3)->field_AC = 1; (*ppPVar3)->field_D0 = 0; (*ppPVar3)->ptr_char_objectinstance = 0; @@ -7828,11 +7779,11 @@ void initBONDdataforPlayer(PLAYER_ID player) (*ppPVar3)->boost_factor_x = 0.00000000; (*ppPVar3)->boost_factor_y = 0.00000000; (*ppPVar3)->boost_factor_z = 0.00000000; - (*ppPVar3)->viewport_alpha = -1.00000000; (*ppPVar3)->bondfadetime60 = -1.00000000; - (*ppPVar3)->bondfadetimemax = 0.00000000; + (*ppPVar3)->bondfadetimemax60 = -1.00000000; (*ppPVar3)->bondfadefracold = 0.00000000; (*ppPVar3)->bondfadefracnew = 0.00000000; + (*ppPVar3)->field_19C = 0.00000000; (*ppPVar3)->field_1A0 = 0; (*ppPVar3)->field_1C0 = 0; (*ppPVar3)->field_1C4 = 0; @@ -7866,20 +7817,20 @@ void initBONDdataforPlayer(PLAYER_ID player) (*ppPVar3)->field_3C4 = 0.00000000; (*ppPVar3)->field_3C8 = 0.00000000; (*ppPVar3)->field_3CC = 1.00000000; - (*ppPVar3)->tint_red = 0xff; - (*ppPVar3)->tint_green = 0xff; - (*ppPVar3)->tint_blue = 0xff; - (*ppPVar3)->tint_alpha = 0.00000000; + (*ppPVar3)->colourscreenred = 0xff; + (*ppPVar3)->colourscreengreen = 0xff; + (*ppPVar3)->colourscreenblue = 0xff; + (*ppPVar3)->colourscreenfrac = 0.00000000; (*ppPVar3)->field_3E0 = -1.00000000; (*ppPVar3)->timer_for_fade = -1.00000000; - (*ppPVar3)->field_3E8 = 0xff; - (*ppPVar3)->field_3EC = 0xff; - (*ppPVar3)->field_3F0 = 0xff; - (*ppPVar3)->field_3F4 = 0xff; - (*ppPVar3)->field_3F8 = 0xff; - (*ppPVar3)->field_3FC = 0xff; - (*ppPVar3)->field_400 = 0.00000000; - (*ppPVar3)->field_404 = 0.00000000; + (*ppPVar3)->colourfaderedold = 0xff; + (*ppPVar3)->colourfaderednew = 0xff; + (*ppPVar3)->colourfadegreenold = 0xff; + (*ppPVar3)->colourfadegreennew = 0xff; + (*ppPVar3)->colourfadeblueold = 0xff; + (*ppPVar3)->colourfadebluenew = 0xff; + (*ppPVar3)->colourfadefracold = 0.00000000; + (*ppPVar3)->colourfadefracnew = 0.00000000; (*ppPVar3)->cuff_value = CUFF_BLUE; (*ppPVar3)->field_420 = 1; (*ppPVar3)->field_424 = 0; @@ -7894,7 +7845,7 @@ void initBONDdataforPlayer(PLAYER_ID player) (*ppPVar3)->field_4F0 = 0; (*ppPVar3)->field_4F4 = 1.00000000; (*ppPVar3)->field_4F8 = 1.00000000; - (*ppPVar3)->scaled_velocity = 0.00000000; + (*ppPVar3)->headpos = 0.00000000; (*ppPVar3)->field_500 = 0.00000000; (*ppPVar3)->field_504 = 0.00000000; (*ppPVar3)->field_508 = 0.00000000; @@ -7903,7 +7854,7 @@ void initBONDdataforPlayer(PLAYER_ID player) (*ppPVar3)->field_514 = 0.00000000; (*ppPVar3)->field_518 = 1.00000000; (*ppPVar3)->field_51C = 0.00000000; - (*ppPVar3)->velocity = 0.00000000; + (*ppPVar3)->headpossum = 0.00000000; (*ppPVar3)->field_524 = 0.00000000; (*ppPVar3)->field_528 = 0.00000000; (*ppPVar3)->field_52C = 0.00000000; @@ -7932,7 +7883,7 @@ void initBONDdataforPlayer(PLAYER_ID player) (*ppPVar3)->field_588 = 0.00000000; (*ppPVar3)->field_58C = 1.00000000; (*ppPVar3)->field_590 = 0.00000000; - (*ppPVar3)->field_594 = 0; + (*ppPVar3)->standcnt = 0; iVar1 = 0; do { *(undefined2 *)((int)&((*ppPVar3)->field_7D0).field_7D0 + iVar1) = 0x280; @@ -7967,7 +7918,7 @@ void initBONDdataforPlayer(PLAYER_ID player) pPVar4->right_weapon = *src; pPVar4->right_weapon_attack = src[1]; pPVar4->previous_right_weapon = src[2]; - pPVar4 = (Player *)&pPVar4->zpos; + pPVar4 = (player *)&pPVar4->zpos; src = dest; } while (dest != &iStack4); src = array234undefined4; @@ -7978,7 +7929,7 @@ void initBONDdataforPlayer(PLAYER_ID player) pPVar4->left_weapon_attack = src[1]; pPVar4->left_weapon_previous = src[2]; src = dest; - pPVar4 = (Player *)&pPVar4->zpos; + pPVar4 = (player *)&pPVar4->zpos; } while (dest != &iStack4); (*ppPVar3)->field_FC0 = 1.00000000; (*ppPVar3)->field_FC4 = 1.00000000; @@ -8036,8 +7987,8 @@ void initBONDdataforPlayer(PLAYER_ID player) (*ppPVar3)->field_10CC = 0; (*ppPVar3)->field_10D0 = 0; (*ppPVar3)->field_10D4 = 0; - (*ppPVar3)->field_10D8 = 0; - (*ppPVar3)->field_10DC = 0; + (*ppPVar3)->projmatrix = 0; + (*ppPVar3)->projmatrixf = 0; (*ppPVar3)->field_10E0 = 0; (*ppPVar3)->field_10E4 = 0; (*ppPVar3)->field_10E8 = 0; @@ -8142,8 +8093,8 @@ glabel initBONDdataforPlayer /* 0CF030 7F09A500 0C0025C8 */ jal mempAllocBytesInBank /* 0CF034 7F09A504 24050004 */ li $a1, 4 /* 0CF038 7F09A508 8FAC03D0 */ lw $t4, 0x3d0($sp) -/* 0CF03C 7F09A50C 3C198008 */ lui $t9, %hi(ptr_BONDdata_p1) -/* 0CF040 7F09A510 27399EE0 */ addiu $t9, %lo(ptr_BONDdata_p1) # addiu $t9, $t9, -0x6120 +/* 0CF03C 7F09A50C 3C198008 */ lui $t9, %hi(players) +/* 0CF040 7F09A510 27399EE0 */ addiu $t9, %lo(players) # addiu $t9, $t9, -0x6120 /* 0CF044 7F09A514 000C6880 */ sll $t5, $t4, 2 /* 0CF048 7F09A518 01B91821 */ addu $v1, $t5, $t9 /* 0CF04C 7F09A51C AC620000 */ sw $v0, ($v1) @@ -8956,8 +8907,8 @@ glabel initBONDdataforPlayer /* 0CFC10 7F09B0A0 0C0025CC */ jal mempAllocBytesInBank /* 0CFC14 7F09B0A4 24050004 */ li $a1, 4 /* 0CFC18 7F09B0A8 8FAC03D0 */ lw $t4, 0x3d0($sp) -/* 0CFC1C 7F09B0AC 3C198008 */ lui $t9, %hi(ptr_BONDdata_p1) # $t9, 0x8008 -/* 0CFC20 7F09B0B0 27399F50 */ addiu $t9, %lo(ptr_BONDdata_p1) # addiu $t9, $t9, -0x60b0 +/* 0CFC1C 7F09B0AC 3C198008 */ lui $t9, %hi(players) # $t9, 0x8008 +/* 0CFC20 7F09B0B0 27399F50 */ addiu $t9, %lo(players) # addiu $t9, $t9, -0x60b0 /* 0CFC24 7F09B0B4 000C6880 */ sll $t5, $t4, 2 /* 0CFC28 7F09B0B8 01B91821 */ addu $v1, $t5, $t9 /* 0CFC2C 7F09B0BC AC620000 */ sw $v0, ($v1) @@ -9737,7 +9688,7 @@ glabel initBONDdataforPlayer #ifdef NONMATCHING void set_cur_player(PLAYER_ID playernum) { - pPlayer = ptr_BONDdata_p1[playernum]; + pPlayer = players[playernum]; pPlayersPerm = player1_playerdata[playernum]; player_num = playernum; return; @@ -9747,9 +9698,9 @@ GLOBAL_ASM( .text glabel set_cur_player /* 0CFC3C 7F09B10C 00047080 */ sll $t6, $a0, 2 -/* 0CFC40 7F09B110 3C0F8008 */ lui $t7, %hi(ptr_BONDdata_p1) +/* 0CFC40 7F09B110 3C0F8008 */ lui $t7, %hi(players) /* 0CFC44 7F09B114 01EE7821 */ addu $t7, $t7, $t6 -/* 0CFC48 7F09B118 8DEF9EE0 */ lw $t7, %lo(ptr_BONDdata_p1)($t7) +/* 0CFC48 7F09B118 8DEF9EE0 */ lw $t7, %lo(players)($t7) /* 0CFC4C 7F09B11C 3C018008 */ lui $at, %hi(player_num) /* 0CFC50 7F09B120 AC24A0B8 */ sw $a0, %lo(player_num)($at) /* 0CFC54 7F09B124 0004C0C0 */ sll $t8, $a0, 3 @@ -9779,21 +9730,21 @@ s32 get_cur_playernum(void) { #ifdef NONMATCHING -void proc_7F09B15C(int position_data_pointer) +void proc_7F09B15C(int prop) { - Player *pPVar1; + player *pPVar1; s32 numplayers; - Player **ppPVar2; + player **ppPVar2; int i; i = 0; - numplayers = get_num_players(); + numplayers = getPlayerCount(); if (0 < numplayers) { - ppPVar2 = ptr_BONDdata_p1; - pPVar1 = ptr_BONDdata_p1[0]; - while (ppPVar2 = ppPVar2 + 1, position_data_pointer != pPVar1->position_data_pointer) { + ppPVar2 = players; + pPVar1 = players[0]; + while (ppPVar2 = ppPVar2 + 1, prop != pPVar1->prop) { i = i + 1; - numplayers = get_num_players(); + numplayers = getPlayerCount(); if (numplayers <= i) { return; } @@ -9812,12 +9763,12 @@ glabel sub_GAME_7F09B15C /* 0CFC98 7F09B168 AFB1001C */ sw $s1, 0x1c($sp) /* 0CFC9C 7F09B16C 00809025 */ move $s2, $a0 /* 0CFCA0 7F09B170 AFB00018 */ sw $s0, 0x18($sp) -/* 0CFCA4 7F09B174 0FC26919 */ jal get_num_players +/* 0CFCA4 7F09B174 0FC26919 */ jal getPlayerCount /* 0CFCA8 7F09B178 00008825 */ move $s1, $zero /* 0CFCAC 7F09B17C 18400010 */ blez $v0, .L7F09B1C0 /* 0CFCB0 7F09B180 00117080 */ sll $t6, $s1, 2 -/* 0CFCB4 7F09B184 3C0F8008 */ lui $t7, %hi(ptr_BONDdata_p1) -/* 0CFCB8 7F09B188 25EF9EE0 */ addiu $t7, %lo(ptr_BONDdata_p1) # addiu $t7, $t7, -0x6120 +/* 0CFCB4 7F09B184 3C0F8008 */ lui $t7, %hi(players) +/* 0CFCB8 7F09B188 25EF9EE0 */ addiu $t7, %lo(players) # addiu $t7, $t7, -0x6120 /* 0CFCBC 7F09B18C 01CF8021 */ addu $s0, $t6, $t7 /* 0CFCC0 7F09B190 8E180000 */ lw $t8, ($s0) .L7F09B194: @@ -9828,7 +9779,7 @@ glabel sub_GAME_7F09B15C /* 0CFCD4 7F09B1A4 10000007 */ b .L7F09B1C4 /* 0CFCD8 7F09B1A8 02201025 */ move $v0, $s1 .L7F09B1AC: -/* 0CFCDC 7F09B1AC 0FC26919 */ jal get_num_players +/* 0CFCDC 7F09B1AC 0FC26919 */ jal getPlayerCount /* 0CFCE0 7F09B1B0 26310001 */ addiu $s1, $s1, 1 /* 0CFCE4 7F09B1B4 0222082A */ slt $at, $s1, $v0 /* 0CFCE8 7F09B1B8 5420FFF6 */ bnezl $at, .L7F09B194 @@ -10284,7 +10235,7 @@ loop_1: { // Node 2 phi_v1_2 = phi_v1_3; - if (*(&ptr_BONDdata_p1 + (temp_v0 * 4)) != 0) + if (*(&players + (temp_v0 * 4)) != 0) { // Node 3 phi_v1_2 = (phi_v1_3 + 1); @@ -10307,9 +10258,9 @@ GLOBAL_ASM( glabel sub_GAME_7F09B4D8 /* 0D0008 7F09B4D8 3C058008 */ lui $a1, %hi(dword_CODE_bss_8007A0C0) /* 0D000C 7F09B4DC 3C078008 */ lui $a3, %hi(dword_CODE_bss_8007A0D0) -/* 0D0010 7F09B4E0 3C068008 */ lui $a2, %hi(ptr_BONDdata_p1) +/* 0D0010 7F09B4E0 3C068008 */ lui $a2, %hi(players) /* 0D0014 7F09B4E4 00001825 */ move $v1, $zero -/* 0D0018 7F09B4E8 24C69EE0 */ addiu $a2, %lo(ptr_BONDdata_p1) # addiu $a2, $a2, -0x6120 +/* 0D0018 7F09B4E8 24C69EE0 */ addiu $a2, %lo(players) # addiu $a2, $a2, -0x6120 /* 0D001C 7F09B4EC 24E7A0D0 */ addiu $a3, %lo(dword_CODE_bss_8007A0D0) # addiu $a3, $a3, -0x5f30 /* 0D0020 7F09B4F0 24A5A0C0 */ addiu $a1, %lo(dword_CODE_bss_8007A0C0) # addiu $a1, $a1, -0x5f40 /* 0D0024 7F09B4F4 8CA20000 */ lw $v0, ($a1) @@ -10338,25 +10289,25 @@ glabel sub_GAME_7F09B4D8 #ifdef NONMATCHING int proc_7F09B528(int param_1) { - if (ptr_BONDdata_p1[dword_CODE_bss_8007A0C0] != NULL) { + if (players[dword_CODE_bss_8007A0C0] != NULL) { if (param_1 == 0) { return dword_CODE_bss_8007A0C0; } param_1--; } - if (ptr_BONDdata_p1[dword_CODE_bss_8007A0C4] != NULL) { + if (players[dword_CODE_bss_8007A0C4] != NULL) { if (param_1 == 0) { return dword_CODE_bss_8007A0C4; } param_1--; } - if (ptr_BONDdata_p1[dword_CODE_bss_8007A0C8] != NULL) { + if (players[dword_CODE_bss_8007A0C8] != NULL) { if (param_1 == 0) { return dword_CODE_bss_8007A0C8; } param_1--; } - if ((ptr_BONDdata_p1[dword_CODE_bss_8007A0CC] != NULL) && (param_1 == 0)) { + if ((players[dword_CODE_bss_8007A0CC] != NULL) && (param_1 == 0)) { return dword_CODE_bss_8007A0CC; } return 0; @@ -10367,8 +10318,8 @@ GLOBAL_ASM( glabel sub_GAME_7F09B528 /* 0D0058 7F09B528 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007A0C0) /* 0D005C 7F09B52C 8C63A0C0 */ lw $v1, %lo(dword_CODE_bss_8007A0C0)($v1) -/* 0D0060 7F09B530 3C028008 */ lui $v0, %hi(ptr_BONDdata_p1) -/* 0D0064 7F09B534 24429EE0 */ addiu $v0, %lo(ptr_BONDdata_p1) # addiu $v0, $v0, -0x6120 +/* 0D0060 7F09B530 3C028008 */ lui $v0, %hi(players) +/* 0D0064 7F09B534 24429EE0 */ addiu $v0, %lo(players) # addiu $v0, $v0, -0x6120 /* 0D0068 7F09B538 00037080 */ sll $t6, $v1, 2 /* 0D006C 7F09B53C 004E7821 */ addu $t7, $v0, $t6 /* 0D0070 7F09B540 8DF80000 */ lw $t8, ($t7) diff --git a/src/game/unk_093880.h b/src/game/unk_093880.h index 61e3374..2e473c3 100644 --- a/src/game/unk_093880.h +++ b/src/game/unk_093880.h @@ -37,11 +37,13 @@ struct player_data { int killed_civilians; }; +extern struct player *players[4]; + extern struct player_data player1_player_data; extern struct player_data player2_player_data; extern struct player_data player3_player_data; extern struct player_data player4_player_data; -extern struct Player * pPlayer; +extern struct player *pPlayer; extern struct player_data *pPlayersPerm; #endif diff --git a/src/game/unk_09B7A0.c b/src/game/unk_09B7A0.c index d322af8..b9c146b 100644 --- a/src/game/unk_09B7A0.c +++ b/src/game/unk_09B7A0.c @@ -105,7 +105,7 @@ GLOBAL_ASM( glabel sub_GAME_7F09B820 /* 0D0350 7F09B820 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0D0354 7F09B824 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D0358 7F09B828 0FC26919 */ jal get_num_players +/* 0D0358 7F09B828 0FC26919 */ jal getPlayerCount /* 0D035C 7F09B82C 00000000 */ nop /* 0D0360 7F09B830 28410002 */ slti $at, $v0, 2 /* 0D0364 7F09B834 1420000F */ bnez $at, .L7F09B874 diff --git a/src/game/unk_09C250.c b/src/game/unk_09C250.c index f179fdf..0bfe218 100644 --- a/src/game/unk_09C250.c +++ b/src/game/unk_09C250.c @@ -345,7 +345,7 @@ glabel sub_GAME_7F09C250 /* 0D0FBC 7F09C48C E51203D4 */ swc1 $f18, 0x3d4($t0) /* 0D0FC0 7F09C490 C5240010 */ lwc1 $f4, 0x10($t1) /* 0D0FC4 7F09C494 E50403D8 */ swc1 $f4, 0x3d8($t0) -/* 0D0FC8 7F09C498 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 0D0FC8 7F09C498 0FC2CBF6 */ jal getTileRoom /* 0D0FCC 7F09C49C 8D240014 */ lw $a0, 0x14($t1) /* 0D0FD0 7F09C4A0 8FA80040 */ lw $t0, 0x40($sp) /* 0D0FD4 7F09C4A4 10000016 */ b .L7F09C500 @@ -365,7 +365,7 @@ glabel sub_GAME_7F09C250 /* 0D1008 7F09C4D8 E50A03D4 */ swc1 $f10, 0x3d4($t0) /* 0D100C 7F09C4DC C6700008 */ lwc1 $f16, 8($s3) /* 0D1010 7F09C4E0 E51003D8 */ swc1 $f16, 0x3d8($t0) -/* 0D1014 7F09C4E4 0FC2CBF6 */ jal sub_GAME_7F0B2FD8 +/* 0D1014 7F09C4E4 0FC2CBF6 */ jal getTileRoom /* 0D1018 7F09C4E8 8FA40050 */ lw $a0, 0x50($sp) /* 0D101C 7F09C4EC 8FA80040 */ lw $t0, 0x40($sp) /* 0D1020 7F09C4F0 10000003 */ b .L7F09C500 @@ -450,7 +450,7 @@ glabel sub_GAME_7F09C250 /* 0D1148 7F09C618 5420FFF5 */ bnezl $at, .L7F09C5F0 /* 0D114C 7F09C61C C6280028 */ lwc1 $f8, 0x28($s1) .L7F09C620: -/* 0D1150 7F09C620 0FC26919 */ jal get_num_players +/* 0D1150 7F09C620 0FC26919 */ jal getPlayerCount /* 0D1154 7F09C624 00000000 */ nop /* 0D1158 7F09C628 28410002 */ slti $at, $v0, 2 /* 0D115C 7F09C62C 14200058 */ bnez $at, .L7F09C790 @@ -714,7 +714,7 @@ glabel sub_GAME_7F09C250 /* 0D1B7C 7F09D00C E69203D4 */ swc1 $f18, 0x3d4($s4) /* 0D1B80 7F09D010 C5040010 */ lwc1 $f4, 0x10($t0) /* 0D1B84 7F09D014 E68403D8 */ swc1 $f4, 0x3d8($s4) -/* 0D1B88 7F09D018 0FC2CEE2 */ jal sub_GAME_7F0B2FD8 +/* 0D1B88 7F09D018 0FC2CEE2 */ jal getTileRoom /* 0D1B8C 7F09D01C 8D040014 */ lw $a0, 0x14($t0) /* 0D1B90 7F09D020 10000014 */ b .Ljp7F09D074 /* 0D1B94 7F09D024 A68203DC */ sh $v0, 0x3dc($s4) @@ -732,7 +732,7 @@ glabel sub_GAME_7F09C250 /* 0D1BC0 7F09D050 E68A03D4 */ swc1 $f10, 0x3d4($s4) /* 0D1BC4 7F09D054 C6700008 */ lwc1 $f16, 8($s3) /* 0D1BC8 7F09D058 E69003D8 */ swc1 $f16, 0x3d8($s4) -/* 0D1BCC 7F09D05C 0FC2CEE2 */ jal sub_GAME_7F0B2FD8 +/* 0D1BCC 7F09D05C 0FC2CEE2 */ jal getTileRoom /* 0D1BD0 7F09D060 8FA40058 */ lw $a0, 0x58($sp) /* 0D1BD4 7F09D064 10000003 */ b .Ljp7F09D074 /* 0D1BD8 7F09D068 A68203DC */ sh $v0, 0x3dc($s4) @@ -814,7 +814,7 @@ glabel sub_GAME_7F09C250 /* 0D1CF4 7F09D184 5420FFF5 */ bnezl $at, .Ljp7F09D15C /* 0D1CF8 7F09D188 C6280028 */ lwc1 $f8, 0x28($s1) .Ljp7F09D18C: -/* 0D1CFC 7F09D18C 0FC26C01 */ jal get_num_players +/* 0D1CFC 7F09D18C 0FC26C01 */ jal getPlayerCount /* 0D1D00 7F09D190 00000000 */ nop /* 0D1D04 7F09D194 28410002 */ slti $at, $v0, 2 /* 0D1D08 7F09D198 14200058 */ bnez $at, .Ljp7F09D2FC @@ -1568,7 +1568,7 @@ glabel sub_GAME_7F09C9D8 /* 0D195C 7F09CE2C 02002025 */ move $a0, $s0 /* 0D1960 7F09CE30 0FC26C43 */ jal set_cur_player /* 0D1964 7F09CE34 00402025 */ move $a0, $v0 -/* 0D1968 7F09CE38 0FC26919 */ jal get_num_players +/* 0D1968 7F09CE38 0FC26919 */ jal getPlayerCount /* 0D196C 7F09CE3C 00000000 */ nop /* 0D1970 7F09CE40 14540004 */ bne $v0, $s4, .L7F09CE54 /* 0D1974 7F09CE44 3C018004 */ lui $at, %hi(D_80040178) @@ -2066,7 +2066,7 @@ GLOBAL_ASM( glabel sub_GAME_7F09D4EC /* 0D201C 7F09D4EC 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0D2020 7F09D4F0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D2024 7F09D4F4 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0D2024 7F09D4F4 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0D2028 7F09D4F8 AFA40018 */ sw $a0, 0x18($sp) /* 0D202C 7F09D4FC 8FA40018 */ lw $a0, 0x18($sp) /* 0D2030 7F09D500 C4440008 */ lwc1 $f4, 8($v0) @@ -2244,7 +2244,7 @@ glabel sub_GAME_7F09D5A0 /* 0D227C 7F09D74C 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 /* 0D2280 7F09D750 02809025 */ move $s2, $s4 /* 0D2284 7F09D754 AE580000 */ sw $t8, ($s2) -/* 0D2288 7F09D758 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0D2288 7F09D758 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0D228C 7F09D75C 26940008 */ addiu $s4, $s4, 8 /* 0D2290 7F09D760 0C003A2C */ jal osVirtualToPhysical /* 0D2294 7F09D764 00402025 */ move $a0, $v0 @@ -2336,7 +2336,7 @@ glabel sub_GAME_7F09D82C /* 0D2398 7F09D868 00C08825 */ move $s1, $a2 /* 0D239C 7F09D86C 00A09025 */ move $s2, $a1 /* 0D23A0 7F09D870 ADC8000C */ sw $t0, 0xc($t6) -/* 0D23A4 7F09D874 0FC1E111 */ jal sub_GAME_7F078444 +/* 0D23A4 7F09D874 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0D23A8 7F09D878 ADC10008 */ sw $at, 8($t6) /* 0D23AC 7F09D87C 0FC227F5 */ jal get_BONDdata_position /* 0D23B0 7F09D880 AFA2009C */ sw $v0, 0x9c($sp) @@ -2716,7 +2716,7 @@ glabel sub_GAME_7F09DDA4 /* 0D2924 7F09DDF4 00809025 */ move $s2, $a0 /* 0D2928 7F09DDF8 00E09825 */ move $s3, $a3 /* 0D292C 7F09DDFC ADC8000C */ sw $t0, 0xc($t6) -/* 0D2930 7F09DE00 0FC1E111 */ jal sub_GAME_7F078444 +/* 0D2930 7F09DE00 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0D2934 7F09DE04 ADC10008 */ sw $at, 8($t6) /* 0D2938 7F09DE08 0FC227F5 */ jal get_BONDdata_position /* 0D293C 7F09DE0C AFA200BC */ sw $v0, 0xbc($sp) @@ -3328,7 +3328,7 @@ glabel sub_GAME_7F09E700 /* 0D323C 7F09E70C AFA50034 */ sw $a1, 0x34($sp) /* 0D3240 7F09E710 AFA60038 */ sw $a2, 0x38($sp) /* 0D3244 7F09E714 AFA7003C */ sw $a3, 0x3c($sp) -/* 0D3248 7F09E718 0FC26919 */ jal get_num_players +/* 0D3248 7F09E718 0FC26919 */ jal getPlayerCount /* 0D324C 7F09E71C AFA0002C */ sw $zero, 0x2c($sp) /* 0D3250 7F09E720 3C0B8004 */ lui $t3, %hi(D_8004017C) /* 0D3254 7F09E724 3C078008 */ lui $a3, %hi(ptr_smoke_buf) @@ -3962,7 +3962,7 @@ GLOBAL_ASM( glabel sub_GAME_7F09EF9C /* 0D3ACC 7F09EF9C 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0D3AD0 7F09EFA0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D3AD4 7F09EFA4 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0D3AD4 7F09EFA4 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0D3AD8 7F09EFA8 AFA40018 */ sw $a0, 0x18($sp) /* 0D3ADC 7F09EFAC 8FA40018 */ lw $a0, 0x18($sp) /* 0D3AE0 7F09EFB0 C4440008 */ lwc1 $f4, 8($v0) @@ -4140,7 +4140,7 @@ glabel sub_GAME_7F09F03C /* 0D3D38 7F09F208 35EF0040 */ ori $t7, (0x01030040 & 0xFFFF) # ori $t7, $t7, 0x40 /* 0D3D3C 7F09F20C 02408025 */ move $s0, $s2 /* 0D3D40 7F09F210 AE0F0000 */ sw $t7, ($s0) -/* 0D3D44 7F09F214 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0D3D44 7F09F214 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0D3D48 7F09F218 26520008 */ addiu $s2, $s2, 8 /* 0D3D4C 7F09F21C 0C003A2C */ jal osVirtualToPhysical /* 0D3D50 7F09F220 00402025 */ move $a0, $v0 @@ -5213,7 +5213,7 @@ glabel sub_GAME_7F0A0034 /* 0D4C64 7F0A0134 00000000 */ nop /* 0D4C68 7F0A0138 0FC1624B */ jal matrix_4x4_set_position_and_rotation_around_xyz /* 0D4C6C 7F0A013C 02803025 */ move $a2, $s4 -/* 0D4C70 7F0A0140 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0D4C70 7F0A0140 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0D4C74 7F0A0144 00000000 */ nop /* 0D4C78 7F0A0148 00402025 */ move $a0, $v0 /* 0D4C7C 7F0A014C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place @@ -5364,7 +5364,7 @@ glabel sub_GAME_7F0A027C /* 0D4E5C 7F0A032C A3AA004B */ sb $t2, 0x4b($sp) /* 0D4E60 7F0A0330 0FC2F285 */ jal sub_GAME_7F0BCA14 /* 0D4E64 7F0A0334 87A40072 */ lh $a0, 0x72($sp) -/* 0D4E68 7F0A0338 0FC26919 */ jal get_num_players +/* 0D4E68 7F0A0338 0FC26919 */ jal getPlayerCount /* 0D4E6C 7F0A033C 00408025 */ move $s0, $v0 /* 0D4E70 7F0A0340 28410002 */ slti $at, $v0, 2 /* 0D4E74 7F0A0344 102001D2 */ beqz $at, .L7F0A0A90 @@ -5872,7 +5872,7 @@ glabel sub_GAME_7F0A0AB4 /* 0D5604 7F0A0AD4 AFB10020 */ sw $s1, 0x20($sp) /* 0D5608 7F0A0AD8 AFB0001C */ sw $s0, 0x1c($sp) /* 0D560C 7F0A0ADC AFA40040 */ sw $a0, 0x40($sp) -/* 0D5610 7F0A0AE0 0FC26919 */ jal get_num_players +/* 0D5610 7F0A0AE0 0FC26919 */ jal getPlayerCount /* 0D5614 7F0A0AE4 2413FFFF */ li $s3, -1 /* 0D5618 7F0A0AE8 28410002 */ slti $at, $v0, 2 /* 0D561C 7F0A0AEC 14200003 */ bnez $at, .L7F0A0AFC diff --git a/src/game/unk_0A1DA0.c b/src/game/unk_0A1DA0.c index 09f4e15..37351fc 100644 --- a/src/game/unk_0A1DA0.c +++ b/src/game/unk_0A1DA0.c @@ -41,8 +41,8 @@ u32 D_80040988 = 0; u32 D_8004098C = 0; u32 D_80040990 = 0; u32 watch_screen_index = 0; -u32 D_80040998 = 0; -u32 D_8004099C = 0; +u32 controller_options_index = 0; +u32 game_options_index = 0; // rodata @@ -1264,7 +1264,7 @@ glabel sub_GAME_7F0A2C44 /* 0D79F4 7F0A2EC4 356B0040 */ ori $t3, (0x01030040 & 0xFFFF) # ori $t3, $t3, 0x40 /* 0D79F8 7F0A2EC8 260A0008 */ addiu $t2, $s0, 8 /* 0D79FC 7F0A2ECC AFAA00D0 */ sw $t2, 0xd0($sp) -/* 0D7A00 7F0A2ED0 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0D7A00 7F0A2ED0 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0D7A04 7F0A2ED4 AE0B0000 */ sw $t3, ($s0) /* 0D7A08 7F0A2ED8 AE020004 */ sw $v0, 4($s0) /* 0D7A0C 7F0A2EDC 8FB100D0 */ lw $s1, 0xd0($sp) @@ -1272,7 +1272,7 @@ glabel sub_GAME_7F0A2C44 /* 0D7A14 7F0A2EE4 35CE0040 */ ori $t6, (0x01020040 & 0xFFFF) # ori $t6, $t6, 0x40 /* 0D7A18 7F0A2EE8 262D0008 */ addiu $t5, $s1, 8 /* 0D7A1C 7F0A2EEC AFAD00D0 */ sw $t5, 0xd0($sp) -/* 0D7A20 7F0A2EF0 0FC1E0D5 */ jal get_BONDdata_field_10C8 +/* 0D7A20 7F0A2EF0 0FC1E0D5 */ jal currentPlayerGetMatrix10C8 /* 0D7A24 7F0A2EF4 AE2E0000 */ sw $t6, ($s1) /* 0D7A28 7F0A2EF8 AE220004 */ sw $v0, 4($s1) /* 0D7A2C 7F0A2EFC 8FBF0044 */ lw $ra, 0x44($sp) @@ -2595,7 +2595,7 @@ glabel sub_GAME_7F0A3F04 /* 0D8A98 7F0A3F68 8F29000C */ lw $t1, 0xc($t9) /* 0D8A9C 7F0A3F6C 8F210008 */ lw $at, 8($t9) /* 0D8AA0 7F0A3F70 AF09000C */ sw $t1, 0xc($t8) -/* 0D8AA4 7F0A3F74 0FC1E111 */ jal sub_GAME_7F078444 +/* 0D8AA4 7F0A3F74 0FC1E111 */ jal currentPlayerGetMatrix10D4 /* 0D8AA8 7F0A3F78 AF010008 */ sw $at, 8($t8) /* 0D8AAC 7F0A3F7C 8FAA00BC */ lw $t2, 0xbc($sp) /* 0D8AB0 7F0A3F80 24040004 */ li $a0, 4 @@ -2946,7 +2946,7 @@ glabel sub_GAME_7F0A3F04 /* 0D9014 7F0A44E4 358C0040 */ ori $t4, (0x01030040 & 0xFFFF) # ori $t4, $t4, 0x40 /* 0D9018 7F0A44E8 262D0008 */ addiu $t5, $s1, 8 /* 0D901C 7F0A44EC AFAD00A0 */ sw $t5, 0xa0($sp) -/* 0D9020 7F0A44F0 0FC1E0DD */ jal get_BONDdata_field_10D8 +/* 0D9020 7F0A44F0 0FC1E0DD */ jal currentPlayerGetProjectionMatrix /* 0D9024 7F0A44F4 AE2C0000 */ sw $t4, ($s1) /* 0D9028 7F0A44F8 0C003A2C */ jal osVirtualToPhysical /* 0D902C 7F0A44FC 00402025 */ move $a0, $v0 @@ -3027,7 +3027,7 @@ glabel sub_GAME_7F0A4594 /* 0D90D4 7F0A45A4 C4860014 */ lwc1 $f6, 0x14($a0) /* 0D90D8 7F0A45A8 E7A60020 */ swc1 $f6, 0x20($sp) /* 0D90DC 7F0A45AC C4880018 */ lwc1 $f8, 0x18($a0) -/* 0D90E0 7F0A45B0 0FC1E0F1 */ jal get_BONDdata_field_10CC +/* 0D90E0 7F0A45B0 0FC1E0F1 */ jal currentPlayerGetMatrix10CC /* 0D90E4 7F0A45B4 E7A80024 */ swc1 $f8, 0x24($sp) /* 0D90E8 7F0A45B8 00402025 */ move $a0, $v0 /* 0D90EC 7F0A45BC 0FC1611D */ jal matrix_4x4_transform_vector_in_place diff --git a/src/game/unk_0A1DA0.h b/src/game/unk_0A1DA0.h index c118f9d..9cab70a 100644 --- a/src/game/unk_0A1DA0.h +++ b/src/game/unk_0A1DA0.h @@ -10,7 +10,7 @@ extern u32 D_80040988; extern u32 D_8004098C; extern u32 D_80040990; extern u32 watch_screen_index; -extern u32 D_80040998; -extern u32 D_8004099C; +extern u32 controller_options_index; +extern u32 game_options_index; #endif diff --git a/src/game/unk_0B3200.c b/src/game/unk_0B3200.c index 426bb68..4c0d5d5 100644 --- a/src/game/unk_0B3200.c +++ b/src/game/unk_0B3200.c @@ -90,7 +90,7 @@ glabel sub_GAME_7F0B3200 #ifdef NONMATCHING -f32 sub_GAME_7F0B32D8(struct xyzpoint *param_1,struct xyzpoint *param_2,struct xyzpoint *param_3) +f32 sub_GAME_7F0B32D8(struct coord *param_1,struct coord *param_2,struct coord *param_3) { diff --git a/src/game/unk_0BC530.c b/src/game/unk_0BC530.c index d346af3..7d273f0 100644 --- a/src/game/unk_0BC530.c +++ b/src/game/unk_0BC530.c @@ -22,19 +22,19 @@ glabel sub_GAME_7F0BC530 /* 0F1068 7F0BC538 AFB00018 */ sw $s0, 0x18($sp) /* 0F106C 7F0BC53C AFB20020 */ sw $s2, 0x20($sp) /* 0F1070 7F0BC540 AFB1001C */ sw $s1, 0x1c($sp) -/* 0F1074 7F0BC544 0FC26919 */ jal get_num_players +/* 0F1074 7F0BC544 0FC26919 */ jal getPlayerCount /* 0F1078 7F0BC548 00008025 */ move $s0, $zero /* 0F107C 7F0BC54C 1840000D */ blez $v0, .L7F0BC584 /* 0F1080 7F0BC550 00107080 */ sll $t6, $s0, 2 -/* 0F1084 7F0BC554 3C0F8008 */ lui $t7, %hi(ptr_BONDdata_p1) -/* 0F1088 7F0BC558 25EF9EE0 */ addiu $t7, %lo(ptr_BONDdata_p1) # addiu $t7, $t7, -0x6120 +/* 0F1084 7F0BC554 3C0F8008 */ lui $t7, %hi(players) +/* 0F1088 7F0BC558 25EF9EE0 */ addiu $t7, %lo(players) # addiu $t7, $t7, -0x6120 /* 0F108C 7F0BC55C 01CF8821 */ addu $s1, $t6, $t7 /* 0F1090 7F0BC560 2412FFFF */ li $s2, -1 /* 0F1094 7F0BC564 8E380000 */ lw $t8, ($s1) .L7F0BC568: /* 0F1098 7F0BC568 26100001 */ addiu $s0, $s0, 1 /* 0F109C 7F0BC56C 26310004 */ addiu $s1, $s1, 4 -/* 0F10A0 7F0BC570 0FC26919 */ jal get_num_players +/* 0F10A0 7F0BC570 0FC26919 */ jal getPlayerCount /* 0F10A4 7F0BC574 AF12108C */ sw $s2, 0x108c($t8) /* 0F10A8 7F0BC578 0202082A */ slt $at, $s0, $v0 /* 0F10AC 7F0BC57C 5420FFFA */ bnezl $at, .L7F0BC568 diff --git a/src/game/unk_0C0A70.c b/src/game/unk_0C0A70.c index 2b1c671..fab73ec 100644 --- a/src/game/unk_0C0A70.c +++ b/src/game/unk_0C0A70.c @@ -207,7 +207,7 @@ void sub_GAME_7F0C0BE4(s32 arg0) { } void sub_GAME_7F0C0BF0(void) { - sub_GAME_7F0A9358(); + get_mTrack2Vol(); } diff --git a/src/game/viewport.c b/src/game/viewport.c index fd2a2c5..05bf545 100644 --- a/src/game/viewport.c +++ b/src/game/viewport.c @@ -2,298 +2,81 @@ #include "game/bond.h" // bss -s32 viewport_img_width; -s32 viewport_img_height; - +s32 z_buffer_width; +s32 z_buffer_height; // data -s32 viewport_img = 0; +s32 z_buffer = 0; - -void remove_viewport_buffer(void) { - viewport_img = 0; +void zbufDeallocate(void) { + z_buffer = 0; } - -#ifdef NONMATCHING -void allocate_viewport_buffer(void) { - -} -#else -GLOBAL_ASM( -.text -glabel allocate_viewport_buffer -/* 106EBC 7F0D238C 3C0E8003 */ lui $t6, %hi(resolution) -/* 106EC0 7F0D2390 8DCE6428 */ lw $t6, %lo(resolution)($t6) -/* 106EC4 7F0D2394 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 106EC8 7F0D2398 AFBF0014 */ sw $ra, 0x14($sp) -/* 106ECC 7F0D239C 11C00008 */ beqz $t6, .L7F0D23C0 -/* 106ED0 7F0D23A0 3C028009 */ lui $v0, %hi(viewport_img_height) -/* 106ED4 7F0D23A4 240F01B8 */ li $t7, 440 -/* 106ED8 7F0D23A8 3C018009 */ lui $at, %hi(viewport_img_width) -/* 106EDC 7F0D23AC 2442E314 */ addiu $v0, %lo(viewport_img_height) # addiu $v0, $v0, -0x1cec -/* 106EE0 7F0D23B0 AC2FE310 */ sw $t7, %lo(viewport_img_width)($at) -/* 106EE4 7F0D23B4 2418014A */ li $t8, 330 -/* 106EE8 7F0D23B8 10000010 */ b .L7F0D23FC -/* 106EEC 7F0D23BC AC580000 */ sw $t8, ($v0) -.L7F0D23C0: -/* 106EF0 7F0D23C0 24190140 */ li $t9, 320 -/* 106EF4 7F0D23C4 3C018009 */ lui $at, %hi(viewport_img_width) -/* 106EF8 7F0D23C8 0FC26919 */ jal get_num_players -/* 106EFC 7F0D23CC AC39E310 */ sw $t9, %lo(viewport_img_width)($at) -/* 106F00 7F0D23D0 24010001 */ li $at, 1 -/* 106F04 7F0D23D4 14410005 */ bne $v0, $at, .L7F0D23EC -/* 106F08 7F0D23D8 3C028009 */ lui $v0, %hi(viewport_img_height) -/* 106F0C 7F0D23DC 2442E314 */ addiu $v0, %lo(viewport_img_height) # addiu $v0, $v0, -0x1cec -/* 106F10 7F0D23E0 240800F0 */ li $t0, 240 -/* 106F14 7F0D23E4 10000005 */ b .L7F0D23FC -/* 106F18 7F0D23E8 AC480000 */ sw $t0, ($v0) -.L7F0D23EC: -/* 106F1C 7F0D23EC 3C028009 */ lui $v0, %hi(viewport_img_height) -/* 106F20 7F0D23F0 2442E314 */ addiu $v0, %lo(viewport_img_height) # addiu $v0, $v0, -0x1cec -/* 106F24 7F0D23F4 24090078 */ li $t1, 120 -/* 106F28 7F0D23F8 AC490000 */ sw $t1, ($v0) -.L7F0D23FC: -/* 106F2C 7F0D23FC 3C0A8009 */ lui $t2, %hi(viewport_img_width) -/* 106F30 7F0D2400 8D4AE310 */ lw $t2, %lo(viewport_img_width)($t2) -/* 106F34 7F0D2404 8C4B0000 */ lw $t3, ($v0) -/* 106F38 7F0D2408 24050004 */ li $a1, 4 -/* 106F3C 7F0D240C 014B0019 */ multu $t2, $t3 -/* 106F40 7F0D2410 00002012 */ mflo $a0 -/* 106F44 7F0D2414 00046040 */ sll $t4, $a0, 1 -/* 106F48 7F0D2418 0C0025C8 */ jal mempAllocBytesInBank -/* 106F4C 7F0D241C 25840040 */ addiu $a0, $t4, 0x40 -/* 106F50 7F0D2420 8FBF0014 */ lw $ra, 0x14($sp) -/* 106F54 7F0D2424 3C038005 */ lui $v1, %hi(viewport_img) -/* 106F58 7F0D2428 2463EB00 */ addiu $v1, %lo(viewport_img) # addiu $v1, $v1, -0x1500 -/* 106F5C 7F0D242C 244E003F */ addiu $t6, $v0, 0x3f -/* 106F60 7F0D2430 2401FFC0 */ li $at, -64 -/* 106F64 7F0D2434 AC620000 */ sw $v0, ($v1) -/* 106F68 7F0D2438 01C17824 */ and $t7, $t6, $at -/* 106F6C 7F0D243C AC6F0000 */ sw $t7, ($v1) -/* 106F70 7F0D2440 03E00008 */ jr $ra -/* 106F74 7F0D2444 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif - - -void sub_GAME_7F0D2448(s32 vp_image, s32 vp_width, s32 vp_height) { - viewport_img = vp_image; - viewport_img_width = vp_width; - viewport_img_height = vp_height; +#define ALIGN64(val) (((val) + 0x3F) & ~0x3F) +u32 mempAllocBytesInBank(u32 bytes,u8 bank); +s32 getPlayerCount(void); +void zbufAllocate(void) { + if (resolution != 0) { + z_buffer_width = 440; + z_buffer_height = 330; + } else { + z_buffer_width = 320; + if (getPlayerCount() == 1) { + z_buffer_height = 240; + } else { + z_buffer_height = 120; + } + } + z_buffer = mempAllocBytesInBank((z_buffer_width * z_buffer_height * 2) + 64, 4); + z_buffer = ALIGN64(z_buffer); } - - - -#ifdef NONMATCHING -void sub_GAME_7F0D2464(void) { - +void zbufSetBuffer(s32 buffer, s32 width, s32 height) { + z_buffer = buffer; + z_buffer_width = width; + z_buffer_height = height; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D2464 -/* 106F94 7F0D2464 3C0E8005 */ lui $t6, %hi(viewport_img) -/* 106F98 7F0D2468 8DCEEB00 */ lw $t6, %lo(viewport_img)($t6) -/* 106F9C 7F0D246C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 106FA0 7F0D2470 AFBF0014 */ sw $ra, 0x14($sp) -/* 106FA4 7F0D2474 15C00004 */ bnez $t6, .L7F0D2488 -/* 106FA8 7F0D2478 00803025 */ move $a2, $a0 -/* 106FAC 7F0D247C 0FC348E3 */ jal allocate_viewport_buffer -/* 106FB0 7F0D2480 AFA40018 */ sw $a0, 0x18($sp) -/* 106FB4 7F0D2484 8FA60018 */ lw $a2, 0x18($sp) -.L7F0D2488: -/* 106FB8 7F0D2488 0FC26C54 */ jal get_cur_playernum -/* 106FBC 7F0D248C AFA60018 */ sw $a2, 0x18($sp) -/* 106FC0 7F0D2490 28410002 */ slti $at, $v0, 2 -/* 106FC4 7F0D2494 1020000B */ beqz $at, .L7F0D24C4 -/* 106FC8 7F0D2498 8FA60018 */ lw $a2, 0x18($sp) -/* 106FCC 7F0D249C 0FC26919 */ jal get_num_players -/* 106FD0 7F0D24A0 AFA60018 */ sw $a2, 0x18($sp) -/* 106FD4 7F0D24A4 24010002 */ li $at, 2 -/* 106FD8 7F0D24A8 14410009 */ bne $v0, $at, .L7F0D24D0 -/* 106FDC 7F0D24AC 8FA60018 */ lw $a2, 0x18($sp) -/* 106FE0 7F0D24B0 0FC26C54 */ jal get_cur_playernum -/* 106FE4 7F0D24B4 AFA60018 */ sw $a2, 0x18($sp) -/* 106FE8 7F0D24B8 24010001 */ li $at, 1 -/* 106FEC 7F0D24BC 14410004 */ bne $v0, $at, .L7F0D24D0 -/* 106FF0 7F0D24C0 8FA60018 */ lw $a2, 0x18($sp) -.L7F0D24C4: -/* 106FF4 7F0D24C4 3C070001 */ lui $a3, (0x00012C00 >> 16) # lui $a3, 1 -/* 106FF8 7F0D24C8 10000002 */ b .L7F0D24D4 -/* 106FFC 7F0D24CC 34E72C00 */ ori $a3, (0x00012C00 & 0xFFFF) # ori $a3, $a3, 0x2c00 -.L7F0D24D0: -/* 107000 7F0D24D0 00003825 */ move $a3, $zero -.L7F0D24D4: -/* 107004 7F0D24D4 3C0F8005 */ lui $t7, %hi(viewport_img) -/* 107008 7F0D24D8 8DEFEB00 */ lw $t7, %lo(viewport_img)($t7) -/* 10700C 7F0D24DC 3C19E700 */ lui $t9, 0xe700 -/* 107010 7F0D24E0 2401FFC0 */ li $at, -64 -/* 107014 7F0D24E4 ACD90000 */ sw $t9, ($a2) -/* 107018 7F0D24E8 ACC00004 */ sw $zero, 4($a2) -/* 10701C 7F0D24EC 24C50008 */ addiu $a1, $a2, 8 -/* 107020 7F0D24F0 01E71823 */ subu $v1, $t7, $a3 -/* 107024 7F0D24F4 0061C024 */ and $t8, $v1, $at -/* 107028 7F0D24F8 3C08FE00 */ lui $t0, 0xfe00 -/* 10702C 7F0D24FC ACA80000 */ sw $t0, ($a1) -/* 107030 7F0D2500 ACB80004 */ sw $t8, 4($a1) -/* 107034 7F0D2504 8FBF0014 */ lw $ra, 0x14($sp) -/* 107038 7F0D2508 24A20008 */ addiu $v0, $a1, 8 -/* 10703C 7F0D250C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 107040 7F0D2510 03E00008 */ jr $ra -/* 107044 7F0D2514 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0D2518(void) { +Gfx *zbufInit(Gfx *gdl) { + s32 phi_a3; + s32 test; + if (z_buffer == 0) { + zbufAllocate(); + } + if (!(get_cur_playernum() < 2) || ((getPlayerCount() == 2) && (get_cur_playernum() == 1))) { + phi_a3 = 320 * 240; + } else { + phi_a3 = 0; + } + test = (z_buffer - phi_a3); + test = test & ~0x3F; + gDPPipeSync(gdl++); + gDPSetDepthImage(gdl++, test); + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D2518 -/* 107048 7F0D2518 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 10704C 7F0D251C AFB00018 */ sw $s0, 0x18($sp) -/* 107050 7F0D2520 AFBF001C */ sw $ra, 0x1c($sp) -/* 107054 7F0D2524 24900008 */ addiu $s0, $a0, 8 -/* 107058 7F0D2528 3C0EE700 */ lui $t6, 0xe700 -/* 10705C 7F0D252C AC8E0000 */ sw $t6, ($a0) -/* 107060 7F0D2530 AC800004 */ sw $zero, 4($a0) -/* 107064 7F0D2534 02001825 */ move $v1, $s0 -/* 107068 7F0D2538 3C0FB900 */ lui $t7, (0xB900031D >> 16) # lui $t7, 0xb900 -/* 10706C 7F0D253C 35EF031D */ ori $t7, (0xB900031D & 0xFFFF) # ori $t7, $t7, 0x31d -/* 107070 7F0D2540 AC6F0000 */ sw $t7, ($v1) -/* 107074 7F0D2544 AC600004 */ sw $zero, 4($v1) -/* 107078 7F0D2548 3C188009 */ lui $t8, %hi(viewport_img_width) -/* 10707C 7F0D254C 8F18E310 */ lw $t8, %lo(viewport_img_width)($t8) -/* 107080 7F0D2550 26100008 */ addiu $s0, $s0, 8 -/* 107084 7F0D2554 3C01FF10 */ lui $at, 0xff10 -/* 107088 7F0D2558 2719FFFF */ addiu $t9, $t8, -1 -/* 10708C 7F0D255C 33280FFF */ andi $t0, $t9, 0xfff -/* 107090 7F0D2560 01014825 */ or $t1, $t0, $at -/* 107094 7F0D2564 02002825 */ move $a1, $s0 -/* 107098 7F0D2568 ACA90000 */ sw $t1, ($a1) -/* 10709C 7F0D256C 3C0A8005 */ lui $t2, %hi(viewport_img) -/* 1070A0 7F0D2570 8D4AEB00 */ lw $t2, %lo(viewport_img)($t2) -/* 1070A4 7F0D2574 26100008 */ addiu $s0, $s0, 8 -/* 1070A8 7F0D2578 3C018000 */ lui $at, 0x8000 -/* 1070AC 7F0D257C 02003025 */ move $a2, $s0 -/* 1070B0 7F0D2580 01415821 */ addu $t3, $t2, $at -/* 1070B4 7F0D2584 ACAB0004 */ sw $t3, 4($a1) -/* 1070B8 7F0D2588 26100008 */ addiu $s0, $s0, 8 -/* 1070BC 7F0D258C 3C0CBA00 */ lui $t4, (0xBA001402 >> 16) # lui $t4, 0xba00 -/* 1070C0 7F0D2590 358C1402 */ ori $t4, (0xBA001402 & 0xFFFF) # ori $t4, $t4, 0x1402 -/* 1070C4 7F0D2594 3C0D0030 */ lui $t5, 0x30 -/* 1070C8 7F0D2598 02003825 */ move $a3, $s0 -/* 1070CC 7F0D259C ACCD0004 */ sw $t5, 4($a2) -/* 1070D0 7F0D25A0 ACCC0000 */ sw $t4, ($a2) -/* 1070D4 7F0D25A4 3C0FFFFC */ lui $t7, (0xFFFCFFFC >> 16) # lui $t7, 0xfffc -/* 1070D8 7F0D25A8 35EFFFFC */ ori $t7, (0xFFFCFFFC & 0xFFFF) # ori $t7, $t7, 0xfffc -/* 1070DC 7F0D25AC 26100008 */ addiu $s0, $s0, 8 -/* 1070E0 7F0D25B0 3C0EF700 */ lui $t6, 0xf700 -/* 1070E4 7F0D25B4 ACEE0000 */ sw $t6, ($a3) -/* 1070E8 7F0D25B8 ACEF0004 */ sw $t7, 4($a3) -/* 1070EC 7F0D25BC 02001025 */ move $v0, $s0 -/* 1070F0 7F0D25C0 3C18ED00 */ lui $t8, 0xed00 -/* 1070F4 7F0D25C4 AC580000 */ sw $t8, ($v0) -/* 1070F8 7F0D25C8 AFA20030 */ sw $v0, 0x30($sp) -/* 1070FC 7F0D25CC 0C001107 */ jal get_video2_settings_txtClipW -/* 107100 7F0D25D0 26100008 */ addiu $s0, $s0, 8 -/* 107104 7F0D25D4 0C00110B */ jal get_video2_settings_txtClipH -/* 107108 7F0D25D8 A7A20026 */ sh $v0, 0x26($sp) -/* 10710C 7F0D25DC 44822000 */ mtc1 $v0, $f4 -/* 107110 7F0D25E0 87AA0026 */ lh $t2, 0x26($sp) -/* 107114 7F0D25E4 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 107118 7F0D25E8 468021A0 */ cvt.s.w $f6, $f4 -/* 10711C 7F0D25EC 448A8000 */ mtc1 $t2, $f16 -/* 107120 7F0D25F0 44810000 */ mtc1 $at, $f0 -/* 107124 7F0D25F4 8FB80030 */ lw $t8, 0x30($sp) -/* 107128 7F0D25F8 468084A0 */ cvt.s.w $f18, $f16 -/* 10712C 7F0D25FC 46003202 */ mul.s $f8, $f6, $f0 -/* 107130 7F0D2600 00000000 */ nop -/* 107134 7F0D2604 46009102 */ mul.s $f4, $f18, $f0 -/* 107138 7F0D2608 4600428D */ trunc.w.s $f10, $f8 -/* 10713C 7F0D260C 4600218D */ trunc.w.s $f6, $f4 -/* 107140 7F0D2610 44085000 */ mfc1 $t0, $f10 -/* 107144 7F0D2614 440C3000 */ mfc1 $t4, $f6 -/* 107148 7F0D2618 31090FFF */ andi $t1, $t0, 0xfff -/* 10714C 7F0D261C 318D0FFF */ andi $t5, $t4, 0xfff -/* 107150 7F0D2620 000D7300 */ sll $t6, $t5, 0xc -/* 107154 7F0D2624 012E7825 */ or $t7, $t1, $t6 -/* 107158 7F0D2628 0FC26919 */ jal get_num_players -/* 10715C 7F0D262C AF0F0004 */ sw $t7, 4($t8) -/* 107160 7F0D2630 28410003 */ slti $at, $v0, 3 -/* 107164 7F0D2634 10200005 */ beqz $at, .L7F0D264C -/* 107168 7F0D2638 00000000 */ nop -/* 10716C 7F0D263C 0C001107 */ jal get_video2_settings_txtClipW -/* 107170 7F0D2640 AFA0004C */ sw $zero, 0x4c($sp) -/* 107174 7F0D2644 1000001B */ b .L7F0D26B4 -/* 107178 7F0D2648 2445FFFF */ addiu $a1, $v0, -1 -.L7F0D264C: -/* 10717C 7F0D264C 0FC26C54 */ jal get_cur_playernum -/* 107180 7F0D2650 00000000 */ nop -/* 107184 7F0D2654 10400006 */ beqz $v0, .L7F0D2670 -/* 107188 7F0D2658 00000000 */ nop -/* 10718C 7F0D265C 0FC26C54 */ jal get_cur_playernum -/* 107190 7F0D2660 00000000 */ nop -/* 107194 7F0D2664 24010002 */ li $at, 2 -/* 107198 7F0D2668 14410009 */ bne $v0, $at, .L7F0D2690 -/* 10719C 7F0D266C 00000000 */ nop -.L7F0D2670: -/* 1071A0 7F0D2670 0C001107 */ jal get_video2_settings_txtClipW -/* 1071A4 7F0D2674 AFA0004C */ sw $zero, 0x4c($sp) -/* 1071A8 7F0D2678 04410003 */ bgez $v0, .L7F0D2688 -/* 1071AC 7F0D267C 00022843 */ sra $a1, $v0, 1 -/* 1071B0 7F0D2680 24410001 */ addiu $at, $v0, 1 -/* 1071B4 7F0D2684 00012843 */ sra $a1, $at, 1 -.L7F0D2688: -/* 1071B8 7F0D2688 1000000A */ b .L7F0D26B4 -/* 1071BC 7F0D268C 24A5FFFF */ addiu $a1, $a1, -1 -.L7F0D2690: -/* 1071C0 7F0D2690 0C001107 */ jal get_video2_settings_txtClipW -/* 1071C4 7F0D2694 00000000 */ nop -/* 1071C8 7F0D2698 04410003 */ bgez $v0, .L7F0D26A8 -/* 1071CC 7F0D269C 0002C843 */ sra $t9, $v0, 1 -/* 1071D0 7F0D26A0 24410001 */ addiu $at, $v0, 1 -/* 1071D4 7F0D26A4 0001C843 */ sra $t9, $at, 1 -.L7F0D26A8: -/* 1071D8 7F0D26A8 0C001107 */ jal get_video2_settings_txtClipW -/* 1071DC 7F0D26AC AFB9004C */ sw $t9, 0x4c($sp) -/* 1071E0 7F0D26B0 2445FFFF */ addiu $a1, $v0, -1 -.L7F0D26B4: -/* 1071E4 7F0D26B4 3C0C8009 */ lui $t4, %hi(viewport_img_height) -/* 1071E8 7F0D26B8 8D8CE314 */ lw $t4, %lo(viewport_img_height)($t4) -/* 1071EC 7F0D26BC 30A803FF */ andi $t0, $a1, 0x3ff -/* 1071F0 7F0D26C0 00085380 */ sll $t2, $t0, 0xe -/* 1071F4 7F0D26C4 258DFFFF */ addiu $t5, $t4, -1 -/* 1071F8 7F0D26C8 31A903FF */ andi $t1, $t5, 0x3ff -/* 1071FC 7F0D26CC 3C01F600 */ lui $at, 0xf600 -/* 107200 7F0D26D0 01415825 */ or $t3, $t2, $at -/* 107204 7F0D26D4 00097080 */ sll $t6, $t1, 2 -/* 107208 7F0D26D8 016E7825 */ or $t7, $t3, $t6 -/* 10720C 7F0D26DC 02001825 */ move $v1, $s0 -/* 107210 7F0D26E0 AC6F0000 */ sw $t7, ($v1) -/* 107214 7F0D26E4 8FB8004C */ lw $t8, 0x4c($sp) -/* 107218 7F0D26E8 26100008 */ addiu $s0, $s0, 8 -/* 10721C 7F0D26EC 02002025 */ move $a0, $s0 -/* 107220 7F0D26F0 331903FF */ andi $t9, $t8, 0x3ff -/* 107224 7F0D26F4 00194380 */ sll $t0, $t9, 0xe -/* 107228 7F0D26F8 AC680004 */ sw $t0, 4($v1) -/* 10722C 7F0D26FC 3C0AE700 */ lui $t2, 0xe700 -/* 107230 7F0D2700 AC8A0000 */ sw $t2, ($a0) -/* 107234 7F0D2704 AC800004 */ sw $zero, 4($a0) -/* 107238 7F0D2708 8FBF001C */ lw $ra, 0x1c($sp) -/* 10723C 7F0D270C 26020008 */ addiu $v0, $s0, 8 -/* 107240 7F0D2710 8FB00018 */ lw $s0, 0x18($sp) -/* 107244 7F0D2714 03E00008 */ jr $ra -/* 107248 7F0D2718 27BD0050 */ addiu $sp, $sp, 0x50 -) -#endif - +s16 get_video2_settings_txtClipW(void); +s16 get_video2_settings_txtClipH(void); +Gfx *zbufClearCurrentPlayer(Gfx *gdl) { + s32 start_x; + s32 end_x; + gDPPipeSync(gdl++); + gDPSetRenderMode(gdl++, G_RM_NOOP, G_RM_NOOP2); + gDPSetColorImage(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, z_buffer_width, (z_buffer + 0x80000000)); + gDPSetCycleType(gdl++, G_CYC_FILL); + gDPSetFillColor(gdl++, (GPACK_ZDZ(G_MAXFBZ, 0) << 16 | GPACK_ZDZ(G_MAXFBZ, 0))); + gDPSetScissor(gdl++, G_SC_NON_INTERLACE, 0, 0, get_video2_settings_txtClipW(), get_video2_settings_txtClipH()); + if (getPlayerCount() < 3) { + start_x = 0; + end_x = get_video2_settings_txtClipW() - 1; + } else if ((get_cur_playernum() == 0) || (get_cur_playernum() == 2)) { + start_x = 0; + end_x = (get_video2_settings_txtClipW() / 2) - 1; + } else { + start_x = get_video2_settings_txtClipW() / 2; + end_x = get_video2_settings_txtClipW() - 1; + } + gDPFillRectangle(gdl++, start_x, 0, end_x, (z_buffer_height - 1)); + gDPPipeSync(gdl++); + return gdl; +} diff --git a/src/game/watch.c b/src/game/watch.c index ad64232..d7d9245 100644 --- a/src/game/watch.c +++ b/src/game/watch.c @@ -2,9 +2,12 @@ #include "game/watch.h" #include "game/unk_093880.h" #include "game/unk_0A1DA0.h" +#include "game/unk_0C0A70.h" #include "game/mainmenu.h" #include "game/lvl_text.h" +#include "game/textrelated.h" #include "music.h" +#include "bondconstants.h" // bss char dword_CODE_bss_8007B0A0[0x40]; @@ -13,7 +16,7 @@ char dword_CODE_bss_8007B0E0[0x40]; // data //D:800409A0 -s32 D_800409A0 = 4; +s32 mission_brief_index = BRIEF_INDEX_OBJECTIVES; //D:800409A4 s32 D_800409A4 = 0; //D:800409A8 @@ -44,60 +47,27 @@ f32 D_800409D4 = 0.0f; s32 D_800409D8 = 8; //D:800409DC u16 D_800409DC[] = { - 0xAC09, 0xAC03, 0xAC02, 0xAC00, - 0xAC01, 0xAC01, 0xAC06, 0xAC06, - 0xAC04, 0xAC05, 0xAC0A, 0xAC03, - 0xAC02, 0xAC00, 0xAC01, 0xAC01, - 0xAC05, 0xAC05, 0xAC04, 0xAC06, - 0xAC0B, 0xAC00, 0xAC02, 0xAC01, - 0xAC03, 0xAC03, 0xAC06, 0xAC06, - 0xAC04, 0xAC05, 0xAC0C, 0xAC00, - 0xAC02, 0xAC01, 0xAC03, 0xAC03, - 0xAC05, 0xAC05, 0xAC04, 0xAC06, - 0xAC0D, 0xAC07, 0xAC07, 0xAC07, - 0xAC07, 0xAC07, 0xAC07, 0xAC07, - 0xAC07, 0xAC07, 0xAC0E, 0xAC07, - 0xAC07, 0xAC07, 0xAC07, 0xAC07, - 0xAC07, 0xAC07, 0xAC07, 0xAC07, - 0xAC0F, 0xAC07, 0xAC07, 0xAC07, - 0xAC07, 0xAC07, 0xAC07, 0xAC07, - 0xAC07, 0xAC07, 0xAC10, 0xAC07, - 0xAC07, 0xAC07, 0xAC07, 0xAC07, - 0xAC07, 0xAC07, 0xAC07, 0xAC07 + /*1.1 honey*/ TEXT(LOPTIONS,0x9), /*weapon*/TEXT(LOPTIONS,0x3), /*action*/TEXT(LOPTIONS,0x2), /*fire*/TEXT(LOPTIONS,0x0), /*aim*/TEXT(LOPTIONS,0x1), /*aim*/TEXT(LOPTIONS,0x1), /*look*/TEXT(LOPTIONS,0x6), /*look*/TEXT(LOPTIONS,0x6), /*pause*/TEXT(LOPTIONS,0x4), /*move*/TEXT(LOPTIONS,0x5), + /*1.2 solitaire*/TEXT(LOPTIONS,0xA), /*weapon*/TEXT(LOPTIONS,0x3), /*action*/TEXT(LOPTIONS,0x2), /*fire*/TEXT(LOPTIONS,0x0), /*aim*/TEXT(LOPTIONS,0x1), /*aim*/TEXT(LOPTIONS,0x1), /*move*/TEXT(LOPTIONS,0x5), /*move*/TEXT(LOPTIONS,0x5), /*pause*/TEXT(LOPTIONS,0x4), /*look*/TEXT(LOPTIONS,0x6), + /*1.3 kissy*/ TEXT(LOPTIONS,0xB), /*fire*/TEXT(LOPTIONS,0x0), /*action*/TEXT(LOPTIONS,0x2), /*aim*/TEXT(LOPTIONS,0x1), /*weapon*/TEXT(LOPTIONS,0x3), /*weapon*/TEXT(LOPTIONS,0x3), /*look*/TEXT(LOPTIONS,0x6), /*look*/TEXT(LOPTIONS,0x6), /*pause*/TEXT(LOPTIONS,0x4), /*move*/TEXT(LOPTIONS,0x5), + /*1.4 goodnight*/TEXT(LOPTIONS,0xC), /*fire*/TEXT(LOPTIONS,0x0), /*action*/TEXT(LOPTIONS,0x2), /*aim*/TEXT(LOPTIONS,0x1), /*weapon*/TEXT(LOPTIONS,0x3), /*weapon*/TEXT(LOPTIONS,0x3), /*move*/TEXT(LOPTIONS,0x5), /*move*/TEXT(LOPTIONS,0x5), /*pause*/TEXT(LOPTIONS,0x4), /*look*/TEXT(LOPTIONS,0x6), + /*2.1 plenty*/ TEXT(LOPTIONS,0xD), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), + /*2.2 galore*/ TEXT(LOPTIONS,0xE), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), + /*2.3 domino*/ TEXT(LOPTIONS,0xF), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), + /*2.4 goodhead*/ TEXT(LOPTIONS,0x10), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7), /*?*/TEXT(LOPTIONS,0x7) +}; + +struct game_options game_options_entries[] = { + { {TEXT(LOPTIONS,0x11), TEXT(LOPTIONS,0x1C), TEXT(LOPTIONS,0x1B), 0}, 0}, //look up/down, reverse, upright + { {TEXT(LOPTIONS,0x12), TEXT(LOPTIONS,0x1A), TEXT(LOPTIONS,0x19), 0}, 1}, //autoaim, off, on + { {TEXT(LOPTIONS,0x14), TEXT(LOPTIONS,0x1E), TEXT(LOPTIONS,0x1D), 0}, 0}, //aim control, hold, toggle + { {TEXT(LOPTIONS,0x15), TEXT(LOPTIONS,0x1A), TEXT(LOPTIONS,0x19), 0}, 1}, //sight on screen, off, on + { {TEXT(LOPTIONS,0x13), TEXT(LOPTIONS,0x1A), TEXT(LOPTIONS,0x19), 0}, 1}, //look ahead, off, on + { {TEXT(LOPTIONS,0x16), TEXT(LOPTIONS,0x1A), TEXT(LOPTIONS,0x19), 0}, 1}, //ammo on screen, off, on + { {TEXT(LOPTIONS,0x17), TEXT(LOPTIONS,0x1F), TEXT(LOPTIONS,0x20), TEXT(LOPTIONS,0x21)}, 0}, //screen, full, wide, cinema + { {TEXT(LOPTIONS,0x18), TEXT(LOPTIONS,0x22), TEXT(LOPTIONS,0x23), 0}, 0} //ratio, normal, 16:9 }; -//D:80040A7C -u16 D_80040A7C[] = {0xAC11, 0xAC1C, 0xAC1B, 0}; -//D:80040A84 -u32 cur_player_look_vertical_inverted = 0; -//D:80040A88 -u16 D_80040A88[] = {0xAC12, 0xAC1A, 0xAC19, 0}; -//D:80040A90 -u32 cur_player_autoaim_setting = 1; -//D:80040A94 -u16 D_80040A94[] = {0xAC14, 0xAC1E, 0xAC1D, 0}; -//D:80040A9C -u32 cur_player_aim_control = 0; -//D:80040AA0 -u16 D_80040AA0[] = {0xAC15, 0xAC1A, 0xAC19, 0}; -//D:80040AA8 -u32 cur_player_sight_onscreen = 1; -//D:80040AAC -u16 D_80040AAC[] = {0xAC13, 0xAC1A, 0xAC19, 0}; -//D:80040AB4 -u32 cur_player_lookahead_setting = 1; -//D:80040AB8 -u16 D_80040AB8[] = {0xAC16, 0xAC1A, 0xAC19, 0}; -//D:80040AC0 -u32 cur_player_ammo_onscreen_setting = 1; -//D:80040AC4 -u16 D_80040AC4[] = {0xAC17, 0xAC1F, 0xAC20, 0xAC21}; -//D:80040ACC -u32 cur_player_screen_setting = 0; -//D:80040AD0 -u16 D_80040AD0[] = {0xAC18, 0xAC22, 0xAC23, 0}; -//D:80040AD8 -u32 screen_ratio = 0; //D:80040ADC u32 controlstick_lr_enabled = 0; //D:80040AE0 @@ -119,7 +89,7 @@ u32 D_80040AFC = 0xFF; //D:80040B00 u32 D_80040B00 = 0xA; //D:80040B04 -u32 D_80040B04 = 0xE0; +s32 D_80040B04 = 0xE0; //D:80040B08 u32 D_80040B08 = 0; //D:80040B0C @@ -149,9 +119,9 @@ f32 D_80040B38 = 0.0f; //D:80040B3C u32 D_80040B3C = 0; //D:80040B40 -u32 D_80040B40 = 0; +s32 D_80040B40 = 0; //D:80040B44 -u32 D_80040B44 = 0x10000; +s16 D_80040B44 = 0x1; //D:80040B48 u32 D_80040B48 = 0x32; //D:80040B4C @@ -324,33 +294,9 @@ const u32 D_800577C4[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -//D:80057FC0 -const u32 D_80057FC0[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; -//D:80058440 -const char D_80058440[] = " \n"; -//D:80058444 -const char D_80058444[] = " \n\n"; -//D:80058448 -const char aC_2[] = "%c: "; -//D:80058450 -const char D_80058450[] = " \n"; -//D:80058454 -const char D_80058454[] = " \n\n"; + + @@ -367,10 +313,10 @@ void nullsub_7F0A4860(void) { #ifdef NONMATCHING void init_watch_at_start_of_stage(void) { - watch_screen_index = 0; - D_80040998 = 0; - D_8004099C = 0; - D_800409A0 = 4; + watch_screen_index = WATCH_INDEX_MISSION_STATUS; + controller_options_index = CONTROLLER_OPTIONS_INDEX_STYLE; + game_options_index = GAME_OPTIONS_INDEX_MUSIC; + mission_brief_index = BRIEF_INDEX_OBJECTIVES; D_800409A4 = 0; watch_soundrelated_maybe = 0; D_800409AC = 0; @@ -437,13 +383,13 @@ GLOBAL_ASM( glabel init_watch_at_start_of_stage /* 0D9398 7F0A4868 3C018004 */ lui $at, %hi(watch_screen_index) /* 0D939C 7F0A486C AC200994 */ sw $zero, %lo(watch_screen_index)($at) -/* 0D93A0 7F0A4870 3C018004 */ lui $at, %hi(D_80040998) -/* 0D93A4 7F0A4874 AC200998 */ sw $zero, %lo(D_80040998)($at) -/* 0D93A8 7F0A4878 3C018004 */ lui $at, %hi(D_8004099C) -/* 0D93AC 7F0A487C AC20099C */ sw $zero, %lo(D_8004099C)($at) -/* 0D93B0 7F0A4880 3C018004 */ lui $at, %hi(D_800409A0) +/* 0D93A0 7F0A4870 3C018004 */ lui $at, %hi(controller_options_index) +/* 0D93A4 7F0A4874 AC200998 */ sw $zero, %lo(controller_options_index)($at) +/* 0D93A8 7F0A4878 3C018004 */ lui $at, %hi(game_options_index) +/* 0D93AC 7F0A487C AC20099C */ sw $zero, %lo(game_options_index)($at) +/* 0D93B0 7F0A4880 3C018004 */ lui $at, %hi(mission_brief_index) /* 0D93B4 7F0A4884 240E0004 */ li $t6, 4 -/* 0D93B8 7F0A4888 AC2E09A0 */ sw $t6, %lo(D_800409A0)($at) +/* 0D93B8 7F0A4888 AC2E09A0 */ sw $t6, %lo(mission_brief_index)($at) /* 0D93BC 7F0A488C 3C018004 */ lui $at, %hi(D_800409A4) /* 0D93C0 7F0A4890 AC2009A4 */ sw $zero, %lo(D_800409A4)($at) /* 0D93C4 7F0A4894 3C018004 */ lui $at, %hi(watch_soundrelated_maybe) @@ -843,29 +789,78 @@ void cur_player_set_control_type(int type) } -u32 get_cur_player_look_vertical_inverted(void) {return cur_player_look_vertical_inverted;} -void set_cur_player_look_vertical_inverted(u32 param_1) {cur_player_look_vertical_inverted = param_1;} +u32 get_cur_player_look_vertical_inverted(void) +{ + return game_options_entries[PLAYER_OPTION_LOOK].current_value; +} +void set_cur_player_look_vertical_inverted(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_LOOK].current_value = param_1; +} -u32 cur_player_get_autoaim(void) {return cur_player_autoaim_setting;} -void cur_player_set_autoaim(u32 uParm1) {cur_player_autoaim_setting = uParm1;} +u32 cur_player_get_autoaim(void) +{ + return game_options_entries[PLAYER_OPTION_AUTOAIM].current_value; +} +void cur_player_set_autoaim(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_AUTOAIM].current_value = param_1; +} -u32 cur_player_get_lookahead(void) {return cur_player_lookahead_setting;} -void cur_player_set_lookahead(u32 uParm1) {cur_player_lookahead_setting = uParm1;} +u32 cur_player_get_lookahead(void) +{ + return game_options_entries[PLAYER_OPTION_LOOKAHEAD].current_value; +} +void cur_player_set_lookahead(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_LOOKAHEAD].current_value = param_1; +} -u32 cur_player_get_aim_control(void) {return cur_player_aim_control;} -void cur_player_set_aim_control(u32 uParm1) {cur_player_aim_control = uParm1;} +u32 cur_player_get_aim_control(void) +{ + return game_options_entries[PLAYER_OPTION_AIM].current_value; +} +void cur_player_set_aim_control(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_AIM].current_value = param_1; +} -u32 cur_player_get_sight_onscreen_control(void) {return cur_player_sight_onscreen;} -void cur_player_set_sight_onscreen_control(u32 uParm1) {cur_player_sight_onscreen = uParm1;} +u32 cur_player_get_sight_onscreen_control(void) +{ + return game_options_entries[PLAYER_OPTION_SIGHT].current_value; +} +void cur_player_set_sight_onscreen_control(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_SIGHT].current_value = param_1; +} -u32 cur_player_get_ammo_onscreen_setting(void) {return cur_player_ammo_onscreen_setting;} -void cur_player_set_ammo_onscreen_setting(u32 uParm1) {cur_player_ammo_onscreen_setting = uParm1;} +u32 cur_player_get_ammo_onscreen_setting(void) +{ + return game_options_entries[PLAYER_OPTION_AMMODISPLAY].current_value; +} +void cur_player_set_ammo_onscreen_setting(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_AMMODISPLAY].current_value = param_1; +} -u32 cur_player_get_screen_setting(void) {return cur_player_screen_setting;} -void cur_player_set_screen_setting(u32 uParm1) {cur_player_screen_setting = uParm1;} +u32 cur_player_get_screen_setting(void) +{ + return game_options_entries[PLAYER_OPTION_SCREEN].current_value; +} +void cur_player_set_screen_setting(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_SCREEN].current_value = param_1; +} + +u32 get_screen_ratio(void) +{ + return game_options_entries[PLAYER_OPTION_RATIO].current_value; +} +void set_screen_ratio(u32 param_1) +{ + game_options_entries[PLAYER_OPTION_RATIO].current_value = param_1; +} -u32 get_screen_ratio(void) {return screen_ratio;} -void set_screen_ratio(u32 uParm1) {screen_ratio = uParm1;} void sub_GAME_7F0A4EF8(void) { @@ -879,7 +874,7 @@ void sub_GAME_7F0A4EF8(void) { } } -void sub_GAME_7F0A4F44(void){ +void reset_watch_soundrelated_maybe(void){ watch_soundrelated_maybe = 0; } @@ -994,41 +989,41 @@ void watch_screen0_navigation(void) if (watch_soundrelated_maybe == 0) { - goto_watch_screen_index_4 = 0; - goto_watch_screen_index_1 = 0; + goto_watch_screen_index_4 = FALSE; + goto_watch_screen_index_1 = FALSE; if (get_debug_gunwatchpos_flag() == 0) { if (get_controller_buttons_pressed(0, L_TRIG|L_CBUTTONS)) { - goto_watch_screen_index_4 = 1; + goto_watch_screen_index_4 = TRUE; } if (get_controller_buttons_pressed(0, R_TRIG|R_CBUTTONS)) { - goto_watch_screen_index_1 = 1; + goto_watch_screen_index_1 = TRUE; } } if ((get_controller_buttons_pressed(0, L_JPAD)) || (sub_GAME_7F0A4FB0())) { - goto_watch_screen_index_4 = 1; + goto_watch_screen_index_4 = TRUE; } if ((get_controller_buttons_pressed(0, R_JPAD)) || (sub_GAME_7F0A4FEC())) { - goto_watch_screen_index_1 = 1; + goto_watch_screen_index_1 = TRUE; } if (goto_watch_screen_index_4) { - watch_screen_index = 4; + watch_screen_index = WATCH_INDEX_MISSION_BRIEFING; sub_GAME_7F0A5210(); trigger_watch_zoom(4.6f, 15.0f); } if (goto_watch_screen_index_1) { - watch_screen_index = 1; + watch_screen_index = WATCH_INDEX_INVENTORY; sub_GAME_7F0A5210(); trigger_watch_zoom(4.6f, 15.0f); return; @@ -1079,7 +1074,7 @@ void watch_screen1_navigation(void) if (goto_watch_screen_index_0) { - watch_screen_index = 0; + watch_screen_index = WATCH_INDEX_MISSION_STATUS; zero_D_800409A4(); sub_GAME_7F0A5210(); trigger_watch_zoom(5.9f, 15.0f); @@ -1087,7 +1082,7 @@ void watch_screen1_navigation(void) if (goto_watch_screen_index_2) { - watch_screen_index = 2; + watch_screen_index = WATCH_INDEX_CONTROL_OPTIONS; set_controlstick_lr_disabled(); sub_GAME_7F0A5210(); trigger_watch_zoom(3.95f, 15.0f); @@ -1102,7 +1097,7 @@ void unused_watch_screen_navigation(void) { { if (watch_soundrelated_maybe == 0) { - watch_screen_index = 1; + watch_screen_index = WATCH_INDEX_INVENTORY; set_controlstick_lr_disabled(); return; } @@ -1111,8 +1106,8 @@ void unused_watch_screen_navigation(void) { { if (watch_soundrelated_maybe == 0) { - watch_screen_index = 2; - zero_D_80040998(); + watch_screen_index = WATCH_INDEX_CONTROL_OPTIONS; + reset_controller_options_index(); sub_GAME_7F0A5210(); trigger_watch_zoom(3.95f, 15.0f); } @@ -1126,7 +1121,7 @@ void watch_screen2_navigation(void) { { if ((get_controller_buttons_held(0, Z_TRIG) == 0) && (watch_soundrelated_maybe == 0)) { - watch_screen_index = 1; + watch_screen_index = WATCH_INDEX_INVENTORY; sub_GAME_7F0A5210(); trigger_watch_zoom(4.6f, 15.0f); return; @@ -1136,8 +1131,8 @@ void watch_screen2_navigation(void) { { if ((get_controller_buttons_held(0, Z_TRIG) == 0) && (watch_soundrelated_maybe == 0)) { - watch_screen_index = 3; - zero_D_8004099C(); + watch_screen_index = WATCH_INDEX_GAME_OPTIONS; + reset_game_options_index(); set_controlstick_lr_disabled(); } } @@ -1150,8 +1145,8 @@ void watch_screen3_navigation(void) { { if ((get_controller_buttons_held(0, Z_TRIG) == 0) && (watch_soundrelated_maybe == 0)) { - watch_screen_index = 2; - zero_D_80040998(); + watch_screen_index = WATCH_INDEX_CONTROL_OPTIONS; + reset_controller_options_index(); set_controlstick_lr_disabled(); return; } @@ -1160,7 +1155,7 @@ void watch_screen3_navigation(void) { { if ((get_controller_buttons_held(0, Z_TRIG) == 0) && (watch_soundrelated_maybe == 0)) { - watch_screen_index = 4; + watch_screen_index = WATCH_INDEX_MISSION_BRIEFING; sub_GAME_7F0A5210(); trigger_watch_zoom(4.6f, 15.0f); } @@ -1174,8 +1169,8 @@ void watch_screen4_navigation(void) { { if (watch_soundrelated_maybe == 0) { - watch_screen_index = 3; - zero_D_8004099C(); + watch_screen_index = WATCH_INDEX_GAME_OPTIONS; + reset_game_options_index(); sub_GAME_7F0A5210(); trigger_watch_zoom(3.95f, 15.0f); return; @@ -1185,7 +1180,7 @@ void watch_screen4_navigation(void) { { if (watch_soundrelated_maybe == 0) { - watch_screen_index = 0; + watch_screen_index = WATCH_INDEX_MISSION_STATUS; zero_D_800409A4(); sub_GAME_7F0A5210(); trigger_watch_zoom(5.9f, 15.0f); @@ -1194,13 +1189,13 @@ void watch_screen4_navigation(void) { } -void sub_GAME_7F0A5860(void) +void controller_options_controlstyle_navigation(void) { if ((get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD)) || (sub_GAME_7F0A5088())) { if (watch_soundrelated_maybe == 0) { - D_80040998 = 1; + controller_options_index = CONTROLLER_OPTIONS_INDEX_INPUTS; set_D_80040AE0_0(); return; } @@ -1209,19 +1204,19 @@ void sub_GAME_7F0A5860(void) { if (watch_soundrelated_maybe == 0) { - D_80040998 = 1; + controller_options_index = CONTROLLER_OPTIONS_INDEX_INPUTS; set_D_80040AE0_0(); } } } -void sub_GAME_7F0A5900(void) +void controller_options_inputs_navigation(void) { if ((get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD)) || (sub_GAME_7F0A5088())) { if (watch_soundrelated_maybe == 0) { - D_80040998 = 0; + controller_options_index = CONTROLLER_OPTIONS_INDEX_STYLE; set_D_80040AE0_0(); return; } @@ -1230,251 +1225,78 @@ void sub_GAME_7F0A5900(void) { if (watch_soundrelated_maybe == 0) { - D_80040998 = 0; + controller_options_index = CONTROLLER_OPTIONS_INDEX_STYLE; set_D_80040AE0_0(); } } } - - - - -#ifdef NONMATCHING void sub_GAME_7F0A5998(void) { - if ((get_controller_buttons_pressed('\0',U_CBUTTONS|U_JPAD) != 0) || (sub_GAME_7F0A5088() != 0)) - { - D_8004099C = (s32) (D_8004099C - 1); - set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); - } - else - { - if ((get_controller_buttons_pressed('\0',D_CBUTTONS|D_JPAD) != 0) || (sub_GAME_7F0A50C4() != 0)) - { - D_8004099C = (s32) (D_8004099C + 1); - set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); - } - else - { + s32 aux; - } - } - if (D_8004099C >= 0xa) + if ((get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD)) || (sub_GAME_7F0A5088())) { - D_8004099C = 0; + game_options_index = game_options_index - 1; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + } + else if ((get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD)) || (sub_GAME_7F0A50C4())) + { + game_options_index = game_options_index + 1; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + } + + aux = game_options_index; + + if (aux >= 10) + { + game_options_index = GAME_OPTIONS_INDEX_MUSIC; return; } - if (D_8004099C < 0) + + if (aux < 0) { - D_8004099C = 9; + game_options_index = GAME_OPTIONS_INDEX_RATIO; } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A5998 -/* 0DA4C8 7F0A5998 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DA4CC 7F0A599C AFBF0014 */ sw $ra, 0x14($sp) -/* 0DA4D0 7F0A59A0 00002025 */ move $a0, $zero -/* 0DA4D4 7F0A59A4 0C0030EB */ jal get_controller_buttons_pressed -/* 0DA4D8 7F0A59A8 24050808 */ li $a1, 2056 -/* 0DA4DC 7F0A59AC 14400005 */ bnez $v0, .L7F0A59C4 -/* 0DA4E0 7F0A59B0 00000000 */ nop -/* 0DA4E4 7F0A59B4 0FC29422 */ jal sub_GAME_7F0A5088 -/* 0DA4E8 7F0A59B8 00000000 */ nop -/* 0DA4EC 7F0A59BC 1040000B */ beqz $v0, .L7F0A59EC -/* 0DA4F0 7F0A59C0 00002025 */ move $a0, $zero -.L7F0A59C4: -/* 0DA4F4 7F0A59C4 3C028004 */ lui $v0, %hi(D_8004099C) -/* 0DA4F8 7F0A59C8 2442099C */ addiu $v0, %lo(D_8004099C) # addiu $v0, $v0, 0x99c -/* 0DA4FC 7F0A59CC 8C4E0000 */ lw $t6, ($v0) -/* 0DA500 7F0A59D0 25CFFFFF */ addiu $t7, $t6, -1 -/* 0DA504 7F0A59D4 0FC2941F */ jal set_D_80040AE0_0 -/* 0DA508 7F0A59D8 AC4F0000 */ sw $t7, ($v0) -/* 0DA50C 7F0A59DC 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DA510 7F0A59E0 00000000 */ nop -/* 0DA514 7F0A59E4 10000010 */ b .L7F0A5A28 -/* 0DA518 7F0A59E8 00000000 */ nop -.L7F0A59EC: -/* 0DA51C 7F0A59EC 0C0030EB */ jal get_controller_buttons_pressed -/* 0DA520 7F0A59F0 24050404 */ li $a1, 1028 -/* 0DA524 7F0A59F4 14400004 */ bnez $v0, .L7F0A5A08 -/* 0DA528 7F0A59F8 00000000 */ nop -/* 0DA52C 7F0A59FC 0FC29431 */ jal sub_GAME_7F0A50C4 -/* 0DA530 7F0A5A00 00000000 */ nop -/* 0DA534 7F0A5A04 10400008 */ beqz $v0, .L7F0A5A28 -.L7F0A5A08: -/* 0DA538 7F0A5A08 3C188004 */ lui $t8, %hi(D_8004099C) -/* 0DA53C 7F0A5A0C 8F18099C */ lw $t8, %lo(D_8004099C)($t8) -/* 0DA540 7F0A5A10 3C018004 */ lui $at, %hi(D_8004099C) -/* 0DA544 7F0A5A14 27190001 */ addiu $t9, $t8, 1 -/* 0DA548 7F0A5A18 0FC2941F */ jal set_D_80040AE0_0 -/* 0DA54C 7F0A5A1C AC39099C */ sw $t9, %lo(D_8004099C)($at) -/* 0DA550 7F0A5A20 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DA554 7F0A5A24 00000000 */ nop -.L7F0A5A28: -/* 0DA558 7F0A5A28 3C038004 */ lui $v1, %hi(D_8004099C) -/* 0DA55C 7F0A5A2C 2463099C */ addiu $v1, %lo(D_8004099C) # addiu $v1, $v1, 0x99c -/* 0DA560 7F0A5A30 8C620000 */ lw $v0, ($v1) -/* 0DA564 7F0A5A34 2841000A */ slti $at, $v0, 0xa -/* 0DA568 7F0A5A38 14200003 */ bnez $at, .L7F0A5A48 -/* 0DA56C 7F0A5A3C 00000000 */ nop -/* 0DA570 7F0A5A40 10000004 */ b .L7F0A5A54 -/* 0DA574 7F0A5A44 AC600000 */ sw $zero, ($v1) -.L7F0A5A48: -/* 0DA578 7F0A5A48 04410002 */ bgez $v0, .L7F0A5A54 -/* 0DA57C 7F0A5A4C 24080009 */ li $t0, 9 -/* 0DA580 7F0A5A50 AC680000 */ sw $t0, ($v1) -.L7F0A5A54: -/* 0DA584 7F0A5A54 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DA588 7F0A5A58 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DA58C 7F0A5A5C 03E00008 */ jr $ra -/* 0DA590 7F0A5A60 00000000 */ nop -) -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A5A64(void) +void game_options_music_volume_navigation(void) { - if ((get_controller_buttons_pressed('\0',U_CBUTTONS|U_JPAD) == 0) && (sub_GAME_7F0A5088() == 0)) { - if ((get_controller_buttons_pressed('\0',D_CBUTTONS|D_JPAD) != 0) || (sub_GAME_7F0A50C4() != 0)) { - D_8004099C = 1; - set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); - } - } - else { - D_8004099C = 9; + if (get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) + { + game_options_index = GAME_OPTIONS_INDEX_RATIO; set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); + reset_watch_soundrelated_maybe(); + return; + } + + if (get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) + { + game_options_index = GAME_OPTIONS_INDEX_FX; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); } - return; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A5A64 -/* 0DA594 7F0A5A64 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DA598 7F0A5A68 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DA59C 7F0A5A6C 00002025 */ move $a0, $zero -/* 0DA5A0 7F0A5A70 0C0030EB */ jal get_controller_buttons_pressed -/* 0DA5A4 7F0A5A74 24050808 */ li $a1, 2056 -/* 0DA5A8 7F0A5A78 54400006 */ bnezl $v0, .L7F0A5A94 -/* 0DA5AC 7F0A5A7C 240E0009 */ li $t6, 9 -/* 0DA5B0 7F0A5A80 0FC29422 */ jal sub_GAME_7F0A5088 -/* 0DA5B4 7F0A5A84 00000000 */ nop -/* 0DA5B8 7F0A5A88 10400009 */ beqz $v0, .L7F0A5AB0 -/* 0DA5BC 7F0A5A8C 00002025 */ move $a0, $zero -/* 0DA5C0 7F0A5A90 240E0009 */ li $t6, 9 -.L7F0A5A94: -/* 0DA5C4 7F0A5A94 3C018004 */ lui $at, %hi(D_8004099C) -/* 0DA5C8 7F0A5A98 0FC2941F */ jal set_D_80040AE0_0 -/* 0DA5CC 7F0A5A9C AC2E099C */ sw $t6, %lo(D_8004099C)($at) -/* 0DA5D0 7F0A5AA0 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DA5D4 7F0A5AA4 00000000 */ nop -/* 0DA5D8 7F0A5AA8 1000000F */ b .L7F0A5AE8 -/* 0DA5DC 7F0A5AAC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A5AB0: -/* 0DA5E0 7F0A5AB0 0C0030EB */ jal get_controller_buttons_pressed -/* 0DA5E4 7F0A5AB4 24050404 */ li $a1, 1028 -/* 0DA5E8 7F0A5AB8 54400005 */ bnezl $v0, .L7F0A5AD0 -/* 0DA5EC 7F0A5ABC 240F0001 */ li $t7, 1 -/* 0DA5F0 7F0A5AC0 0FC29431 */ jal sub_GAME_7F0A50C4 -/* 0DA5F4 7F0A5AC4 00000000 */ nop -/* 0DA5F8 7F0A5AC8 10400006 */ beqz $v0, .L7F0A5AE4 -/* 0DA5FC 7F0A5ACC 240F0001 */ li $t7, 1 -.L7F0A5AD0: -/* 0DA600 7F0A5AD0 3C018004 */ lui $at, %hi(D_8004099C) -/* 0DA604 7F0A5AD4 0FC2941F */ jal set_D_80040AE0_0 -/* 0DA608 7F0A5AD8 AC2F099C */ sw $t7, %lo(D_8004099C)($at) -/* 0DA60C 7F0A5ADC 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DA610 7F0A5AE0 00000000 */ nop -.L7F0A5AE4: -/* 0DA614 7F0A5AE4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A5AE8: -/* 0DA618 7F0A5AE8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DA61C 7F0A5AEC 03E00008 */ jr $ra -/* 0DA620 7F0A5AF0 00000000 */ nop -) -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A5AF4(void) +void game_options_fx_volume_navigation(void) { - if ((get_controller_buttons_pressed('\0',U_CBUTTONS|U_JPAD) == 0) && (sub_GAME_7F0A5088() == 0)) { - if ((get_controller_buttons_pressed('\0',D_CBUTTONS|D_JPAD) != 0) || (sub_GAME_7F0A50C4() != 0)) { - D_8004099c = 2; - set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); - } - } - else { - D_8004099c = 0; + if (get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) + { + game_options_index = GAME_OPTIONS_INDEX_MUSIC; set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); + reset_watch_soundrelated_maybe(); + return; + } + + if (get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) + { + game_options_index = GAME_OPTIONS_INDEX_LOOK_UPDOWN; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); } - return; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A5AF4 -/* 0DA624 7F0A5AF4 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DA628 7F0A5AF8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DA62C 7F0A5AFC 00002025 */ move $a0, $zero -/* 0DA630 7F0A5B00 0C0030EB */ jal get_controller_buttons_pressed -/* 0DA634 7F0A5B04 24050808 */ li $a1, 2056 -/* 0DA638 7F0A5B08 14400005 */ bnez $v0, .L7F0A5B20 -/* 0DA63C 7F0A5B0C 00000000 */ nop -/* 0DA640 7F0A5B10 0FC29422 */ jal sub_GAME_7F0A5088 -/* 0DA644 7F0A5B14 00000000 */ nop -/* 0DA648 7F0A5B18 10400008 */ beqz $v0, .L7F0A5B3C -/* 0DA64C 7F0A5B1C 00002025 */ move $a0, $zero -.L7F0A5B20: -/* 0DA650 7F0A5B20 3C018004 */ lui $at, %hi(D_8004099C) -/* 0DA654 7F0A5B24 0FC2941F */ jal set_D_80040AE0_0 -/* 0DA658 7F0A5B28 AC20099C */ sw $zero, %lo(D_8004099C)($at) -/* 0DA65C 7F0A5B2C 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DA660 7F0A5B30 00000000 */ nop -/* 0DA664 7F0A5B34 1000000F */ b .L7F0A5B74 -/* 0DA668 7F0A5B38 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A5B3C: -/* 0DA66C 7F0A5B3C 0C0030EB */ jal get_controller_buttons_pressed -/* 0DA670 7F0A5B40 24050404 */ li $a1, 1028 -/* 0DA674 7F0A5B44 54400005 */ bnezl $v0, .L7F0A5B5C -/* 0DA678 7F0A5B48 240E0002 */ li $t6, 2 -/* 0DA67C 7F0A5B4C 0FC29431 */ jal sub_GAME_7F0A50C4 -/* 0DA680 7F0A5B50 00000000 */ nop -/* 0DA684 7F0A5B54 10400006 */ beqz $v0, .L7F0A5B70 -/* 0DA688 7F0A5B58 240E0002 */ li $t6, 2 -.L7F0A5B5C: -/* 0DA68C 7F0A5B5C 3C018004 */ lui $at, %hi(D_8004099C) -/* 0DA690 7F0A5B60 0FC2941F */ jal set_D_80040AE0_0 -/* 0DA694 7F0A5B64 AC2E099C */ sw $t6, %lo(D_8004099C)($at) -/* 0DA698 7F0A5B68 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DA69C 7F0A5B6C 00000000 */ nop -.L7F0A5B70: -/* 0DA6A0 7F0A5B70 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A5B74: -/* 0DA6A4 7F0A5B74 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DA6A8 7F0A5B78 03E00008 */ jr $ra -/* 0DA6AC 7F0A5B7C 00000000 */ nop -) -#endif - - - #ifdef NONMATCHING @@ -2260,247 +2082,96 @@ glabel sub_GAME_7F0A611C -void sub_GAME_7F0A6618(void) +void mission_brief_background_navigation(void) { if ((get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD)) || (sub_GAME_7F0A5088())) { - D_800409A0 = 4; + mission_brief_index = BRIEF_INDEX_OBJECTIVES; set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); + reset_watch_soundrelated_maybe(); } if ((get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD)) || (sub_GAME_7F0A50C4())) { - D_800409A0 = 1; + mission_brief_index = BRIEF_INDEX_M; set_D_80040AE0_0(); - sub_GAME_7F0A4F44(); + reset_watch_soundrelated_maybe(); } } - - - -#ifdef NONMATCHING -void sub_GAME_7F0A66A0(void) { - +void mission_brief_m_briefing_navigation(void) +{ + if (get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) + { + mission_brief_index = BRIEF_INDEX_BACKGROUND; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + return; + } + + if (get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) + { + mission_brief_index = BRIEF_INDEX_Q; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A66A0 -/* 0DB1D0 7F0A66A0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DB1D4 7F0A66A4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DB1D8 7F0A66A8 00002025 */ move $a0, $zero -/* 0DB1DC 7F0A66AC 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB1E0 7F0A66B0 24050808 */ li $a1, 2056 -/* 0DB1E4 7F0A66B4 14400005 */ bnez $v0, .L7F0A66CC -/* 0DB1E8 7F0A66B8 00000000 */ nop -/* 0DB1EC 7F0A66BC 0FC29422 */ jal sub_GAME_7F0A5088 -/* 0DB1F0 7F0A66C0 00000000 */ nop -/* 0DB1F4 7F0A66C4 10400008 */ beqz $v0, .L7F0A66E8 -/* 0DB1F8 7F0A66C8 00002025 */ move $a0, $zero -.L7F0A66CC: -/* 0DB1FC 7F0A66CC 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB200 7F0A66D0 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB204 7F0A66D4 AC2009A0 */ sw $zero, %lo(D_800409A0)($at) -/* 0DB208 7F0A66D8 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB20C 7F0A66DC 00000000 */ nop -/* 0DB210 7F0A66E0 1000000F */ b .L7F0A6720 -/* 0DB214 7F0A66E4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A66E8: -/* 0DB218 7F0A66E8 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB21C 7F0A66EC 24050404 */ li $a1, 1028 -/* 0DB220 7F0A66F0 54400005 */ bnezl $v0, .L7F0A6708 -/* 0DB224 7F0A66F4 240E0002 */ li $t6, 2 -/* 0DB228 7F0A66F8 0FC29431 */ jal sub_GAME_7F0A50C4 -/* 0DB22C 7F0A66FC 00000000 */ nop -/* 0DB230 7F0A6700 10400006 */ beqz $v0, .L7F0A671C -/* 0DB234 7F0A6704 240E0002 */ li $t6, 2 -.L7F0A6708: -/* 0DB238 7F0A6708 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB23C 7F0A670C 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB240 7F0A6710 AC2E09A0 */ sw $t6, %lo(D_800409A0)($at) -/* 0DB244 7F0A6714 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB248 7F0A6718 00000000 */ nop -.L7F0A671C: -/* 0DB24C 7F0A671C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6720: -/* 0DB250 7F0A6720 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DB254 7F0A6724 03E00008 */ jr $ra -/* 0DB258 7F0A6728 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F0A672C(void) { - +void mission_brief_q_branch_navigation(void) +{ + if (get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) + { + mission_brief_index = BRIEF_INDEX_M; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + return; + } + + if (get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) + { + mission_brief_index = BRIEF_INDEX_MONEYPENNY; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A672C -/* 0DB25C 7F0A672C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DB260 7F0A6730 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DB264 7F0A6734 00002025 */ move $a0, $zero -/* 0DB268 7F0A6738 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB26C 7F0A673C 24050808 */ li $a1, 2056 -/* 0DB270 7F0A6740 54400006 */ bnezl $v0, .L7F0A675C -/* 0DB274 7F0A6744 240E0001 */ li $t6, 1 -/* 0DB278 7F0A6748 0FC29422 */ jal sub_GAME_7F0A5088 -/* 0DB27C 7F0A674C 00000000 */ nop -/* 0DB280 7F0A6750 10400009 */ beqz $v0, .L7F0A6778 -/* 0DB284 7F0A6754 00002025 */ move $a0, $zero -/* 0DB288 7F0A6758 240E0001 */ li $t6, 1 -.L7F0A675C: -/* 0DB28C 7F0A675C 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB290 7F0A6760 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB294 7F0A6764 AC2E09A0 */ sw $t6, %lo(D_800409A0)($at) -/* 0DB298 7F0A6768 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB29C 7F0A676C 00000000 */ nop -/* 0DB2A0 7F0A6770 1000000F */ b .L7F0A67B0 -/* 0DB2A4 7F0A6774 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6778: -/* 0DB2A8 7F0A6778 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB2AC 7F0A677C 24050404 */ li $a1, 1028 -/* 0DB2B0 7F0A6780 54400005 */ bnezl $v0, .L7F0A6798 -/* 0DB2B4 7F0A6784 240F0003 */ li $t7, 3 -/* 0DB2B8 7F0A6788 0FC29431 */ jal sub_GAME_7F0A50C4 -/* 0DB2BC 7F0A678C 00000000 */ nop -/* 0DB2C0 7F0A6790 10400006 */ beqz $v0, .L7F0A67AC -/* 0DB2C4 7F0A6794 240F0003 */ li $t7, 3 -.L7F0A6798: -/* 0DB2C8 7F0A6798 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB2CC 7F0A679C 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB2D0 7F0A67A0 AC2F09A0 */ sw $t7, %lo(D_800409A0)($at) -/* 0DB2D4 7F0A67A4 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB2D8 7F0A67A8 00000000 */ nop -.L7F0A67AC: -/* 0DB2DC 7F0A67AC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A67B0: -/* 0DB2E0 7F0A67B0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DB2E4 7F0A67B4 03E00008 */ jr $ra -/* 0DB2E8 7F0A67B8 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A67BC(void) { +void mission_brief_moneypenny_navigation(void) +{ + if (get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) + { + mission_brief_index = BRIEF_INDEX_Q; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + return; + } + + if (get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) + { + mission_brief_index = BRIEF_INDEX_OBJECTIVES; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A67BC -/* 0DB2EC 7F0A67BC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DB2F0 7F0A67C0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DB2F4 7F0A67C4 00002025 */ move $a0, $zero -/* 0DB2F8 7F0A67C8 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB2FC 7F0A67CC 24050808 */ li $a1, 2056 -/* 0DB300 7F0A67D0 54400006 */ bnezl $v0, .L7F0A67EC -/* 0DB304 7F0A67D4 240E0002 */ li $t6, 2 -/* 0DB308 7F0A67D8 0FC29422 */ jal sub_GAME_7F0A5088 -/* 0DB30C 7F0A67DC 00000000 */ nop -/* 0DB310 7F0A67E0 10400009 */ beqz $v0, .L7F0A6808 -/* 0DB314 7F0A67E4 00002025 */ move $a0, $zero -/* 0DB318 7F0A67E8 240E0002 */ li $t6, 2 -.L7F0A67EC: -/* 0DB31C 7F0A67EC 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB320 7F0A67F0 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB324 7F0A67F4 AC2E09A0 */ sw $t6, %lo(D_800409A0)($at) -/* 0DB328 7F0A67F8 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB32C 7F0A67FC 00000000 */ nop -/* 0DB330 7F0A6800 1000000F */ b .L7F0A6840 -/* 0DB334 7F0A6804 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6808: -/* 0DB338 7F0A6808 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB33C 7F0A680C 24050404 */ li $a1, 1028 -/* 0DB340 7F0A6810 54400005 */ bnezl $v0, .L7F0A6828 -/* 0DB344 7F0A6814 240F0004 */ li $t7, 4 -/* 0DB348 7F0A6818 0FC29431 */ jal sub_GAME_7F0A50C4 -/* 0DB34C 7F0A681C 00000000 */ nop -/* 0DB350 7F0A6820 10400006 */ beqz $v0, .L7F0A683C -/* 0DB354 7F0A6824 240F0004 */ li $t7, 4 -.L7F0A6828: -/* 0DB358 7F0A6828 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB35C 7F0A682C 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB360 7F0A6830 AC2F09A0 */ sw $t7, %lo(D_800409A0)($at) -/* 0DB364 7F0A6834 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB368 7F0A6838 00000000 */ nop -.L7F0A683C: -/* 0DB36C 7F0A683C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6840: -/* 0DB370 7F0A6840 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DB374 7F0A6844 03E00008 */ jr $ra -/* 0DB378 7F0A6848 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A684C(void) { +void mission_brief_objectives_navigation(void) +{ + if (get_controller_buttons_pressed(0, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) + { + mission_brief_index = BRIEF_INDEX_MONEYPENNY; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + return; + } + + if (get_controller_buttons_pressed(0, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) + { + mission_brief_index = BRIEF_INDEX_BACKGROUND; + set_D_80040AE0_0(); + reset_watch_soundrelated_maybe(); + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A684C -/* 0DB37C 7F0A684C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DB380 7F0A6850 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DB384 7F0A6854 00002025 */ move $a0, $zero -/* 0DB388 7F0A6858 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB38C 7F0A685C 24050808 */ li $a1, 2056 -/* 0DB390 7F0A6860 54400006 */ bnezl $v0, .L7F0A687C -/* 0DB394 7F0A6864 240E0003 */ li $t6, 3 -/* 0DB398 7F0A6868 0FC29422 */ jal sub_GAME_7F0A5088 -/* 0DB39C 7F0A686C 00000000 */ nop -/* 0DB3A0 7F0A6870 10400009 */ beqz $v0, .L7F0A6898 -/* 0DB3A4 7F0A6874 00002025 */ move $a0, $zero -/* 0DB3A8 7F0A6878 240E0003 */ li $t6, 3 -.L7F0A687C: -/* 0DB3AC 7F0A687C 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB3B0 7F0A6880 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB3B4 7F0A6884 AC2E09A0 */ sw $t6, %lo(D_800409A0)($at) -/* 0DB3B8 7F0A6888 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB3BC 7F0A688C 00000000 */ nop -/* 0DB3C0 7F0A6890 1000000E */ b .L7F0A68CC -/* 0DB3C4 7F0A6894 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6898: -/* 0DB3C8 7F0A6898 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB3CC 7F0A689C 24050404 */ li $a1, 1028 -/* 0DB3D0 7F0A68A0 14400004 */ bnez $v0, .L7F0A68B4 -/* 0DB3D4 7F0A68A4 00000000 */ nop -/* 0DB3D8 7F0A68A8 0FC29431 */ jal sub_GAME_7F0A50C4 -/* 0DB3DC 7F0A68AC 00000000 */ nop -/* 0DB3E0 7F0A68B0 10400005 */ beqz $v0, .L7F0A68C8 -.L7F0A68B4: -/* 0DB3E4 7F0A68B4 3C018004 */ lui $at, %hi(D_800409A0) -/* 0DB3E8 7F0A68B8 0FC2941F */ jal set_D_80040AE0_0 -/* 0DB3EC 7F0A68BC AC2009A0 */ sw $zero, %lo(D_800409A0)($at) -/* 0DB3F0 7F0A68C0 0FC293D1 */ jal sub_GAME_7F0A4F44 -/* 0DB3F4 7F0A68C4 00000000 */ nop -.L7F0A68C8: -/* 0DB3F8 7F0A68C8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A68CC: -/* 0DB3FC 7F0A68CC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DB400 7F0A68D0 03E00008 */ jr $ra -/* 0DB404 7F0A68D4 00000000 */ nop -) -#endif - - - #ifdef NONMATCHING @@ -2582,421 +2253,185 @@ void sub_GAME_7F0A69A8(void) { D_800409D8 = 8; } - sub_GAME_7F0A4F44(); - watch_screen_index = 0; - D_800409A0 = 4; + reset_watch_soundrelated_maybe(); + watch_screen_index = WATCH_INDEX_MISSION_STATUS; + mission_brief_index = BRIEF_INDEX_OBJECTIVES; D_800409C8 = 0.999f; D_800409CC = 0.9999f; calculate_equip_cur_item(); } -#ifdef NONMATCHING -f32 sub_GAME_7F0A6A2C(f32 arg0) { - f32 phi_f12; - - if (3.1415927f < arg0) { - return arg0 - 6.2831855f; +f32 sub_GAME_7F0A6A2C(f32 arg0) +{ + if (arg0 > 3.1415927f) + { + arg0 = arg0 - 6.2831855f; } - - phi_f12 = arg0; - - if (-3.1415927f > arg0) { - return arg0 + 6.2831855f; + else if (arg0 < -3.1415927f) + { + arg0 = arg0 + 6.2831855f; } - return phi_f12; + return arg0; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800584B8 -.word 0x40490fdb /*3.1415927*/ -glabel D_800584BC -.word 0x40c90fdb /*6.2831855*/ -glabel D_800584C0 -.word 0xc0490fdb /*-3.1415927*/ -glabel D_800584C4 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F0A6A2C -/* 0DB55C 7F0A6A2C 3C018006 */ lui $at, %hi(D_800584B8) -/* 0DB560 7F0A6A30 C42484B8 */ lwc1 $f4, %lo(D_800584B8)($at) -/* 0DB564 7F0A6A34 3C018006 */ lui $at, %hi(D_800584C0) -/* 0DB568 7F0A6A38 460C203C */ c.lt.s $f4, $f12 -/* 0DB56C 7F0A6A3C 00000000 */ nop -/* 0DB570 7F0A6A40 45000005 */ bc1f .L7F0A6A58 -/* 0DB574 7F0A6A44 00000000 */ nop -/* 0DB578 7F0A6A48 3C018006 */ lui $at, %hi(D_800584BC) -/* 0DB57C 7F0A6A4C C42684BC */ lwc1 $f6, %lo(D_800584BC)($at) -/* 0DB580 7F0A6A50 03E00008 */ jr $ra -/* 0DB584 7F0A6A54 46066001 */ sub.s $f0, $f12, $f6 - -.L7F0A6A58: -/* 0DB588 7F0A6A58 C42884C0 */ lwc1 $f8, %lo(D_800584C0)($at) -/* 0DB58C 7F0A6A5C 3C018006 */ lui $at, %hi(D_800584C4) -/* 0DB590 7F0A6A60 4608603C */ c.lt.s $f12, $f8 -/* 0DB594 7F0A6A64 00000000 */ nop -/* 0DB598 7F0A6A68 45000003 */ bc1f .L7F0A6A78 -/* 0DB59C 7F0A6A6C 00000000 */ nop -/* 0DB5A0 7F0A6A70 C42A84C4 */ lwc1 $f10, %lo(D_800584C4)($at) -/* 0DB5A4 7F0A6A74 460A6300 */ add.s $f12, $f12, $f10 -.L7F0A6A78: -/* 0DB5A8 7F0A6A78 03E00008 */ jr $ra -/* 0DB5AC 7F0A6A7C 46006006 */ mov.s $f0, $f12 -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F0A6A80(void) { - -} -#else #ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_800584C8 -.word 0x40c90fdb /*6.2831855*/ +void sub_GAME_7F0A6A80(void) +{ + u32 temp_1; + s32 temp_2; + s32 temp_3; + u32 random_value; -/*D:800584CC*/ -glabel jpt_800584CC -.word .L7F0A6E04 -.word .L7F0A6ED0 -.word .L7F0A6E14 -.word .L7F0A6E60 -.word .L7F0A6EC0 + if (get_controller_buttons_pressed(0, 0x1000)) + { + set_open_close_solo_watch_menu_to1(); + } -/*D:800584E0*/ -glabel jpt_800584E0 -.word .L7F0A6E88 -.word .L7F0A6E98 -.word .L7F0A6EA8 -.word .L7F0A6EA8 -.word .L7F0A6EA8 -.word .L7F0A6EA8 -.word .L7F0A6EA8 -.word .L7F0A6EA8 -.word .L7F0A6EA8 -.word .L7F0A6EA8 + if (controlstick_lr_enabled == 0) + { + if ((get_cur_controller_horz_stick_pos(0) >= -0xA) && (get_cur_controller_horz_stick_pos(0) < 0xB)) + { + controlstick_lr_enabled = 1; + } + else if ((get_cur_controller_horz_stick_pos(0) < 0xB) && (controller_7000C174(0) >= 0xB)) + { + controlstick_lr_enabled = 1; + } + else if ((get_cur_controller_horz_stick_pos(0) >= -0xA) && (controller_7000C174(0) < -0xA)) + { + controlstick_lr_enabled = 1; + } + } -.text -glabel sub_GAME_7F0A6A80 -/* 0DB5B0 7F0A6A80 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0DB5B4 7F0A6A84 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DB5B8 7F0A6A88 00002025 */ move $a0, $zero -/* 0DB5BC 7F0A6A8C 0C0030EB */ jal get_controller_buttons_pressed -/* 0DB5C0 7F0A6A90 24051000 */ li $a1, 4096 -/* 0DB5C4 7F0A6A94 10400003 */ beqz $v0, .L7F0A6AA4 -/* 0DB5C8 7F0A6A98 00000000 */ nop -/* 0DB5CC 7F0A6A9C 0FC1FE18 */ jal set_open_close_solo_watch_menu_to1 -/* 0DB5D0 7F0A6AA0 00000000 */ nop -.L7F0A6AA4: -/* 0DB5D4 7F0A6AA4 3C0E8004 */ lui $t6, %hi(controlstick_lr_enabled) -/* 0DB5D8 7F0A6AA8 8DCE0ADC */ lw $t6, %lo(controlstick_lr_enabled)($t6) -/* 0DB5DC 7F0A6AAC 15C00027 */ bnez $t6, .L7F0A6B4C -/* 0DB5E0 7F0A6AB0 00000000 */ nop -/* 0DB5E4 7F0A6AB4 0C00303B */ jal get_cur_controller_horz_stick_pos -/* 0DB5E8 7F0A6AB8 00002025 */ move $a0, $zero -/* 0DB5EC 7F0A6ABC 2841FFF6 */ slti $at, $v0, -0xa -/* 0DB5F0 7F0A6AC0 14200009 */ bnez $at, .L7F0A6AE8 -/* 0DB5F4 7F0A6AC4 00000000 */ nop -/* 0DB5F8 7F0A6AC8 0C00303B */ jal get_cur_controller_horz_stick_pos -/* 0DB5FC 7F0A6ACC 00002025 */ move $a0, $zero -/* 0DB600 7F0A6AD0 2841000B */ slti $at, $v0, 0xb -/* 0DB604 7F0A6AD4 10200004 */ beqz $at, .L7F0A6AE8 -/* 0DB608 7F0A6AD8 240F0001 */ li $t7, 1 -/* 0DB60C 7F0A6ADC 3C018004 */ lui $at, %hi(controlstick_lr_enabled) -/* 0DB610 7F0A6AE0 1000001A */ b .L7F0A6B4C -/* 0DB614 7F0A6AE4 AC2F0ADC */ sw $t7, %lo(controlstick_lr_enabled)($at) -.L7F0A6AE8: -/* 0DB618 7F0A6AE8 0C00303B */ jal get_cur_controller_horz_stick_pos -/* 0DB61C 7F0A6AEC 00002025 */ move $a0, $zero -/* 0DB620 7F0A6AF0 2841000B */ slti $at, $v0, 0xb -/* 0DB624 7F0A6AF4 10200009 */ beqz $at, .L7F0A6B1C -/* 0DB628 7F0A6AF8 00000000 */ nop -/* 0DB62C 7F0A6AFC 0C00305D */ jal controller_7000C174 -/* 0DB630 7F0A6B00 00002025 */ move $a0, $zero -/* 0DB634 7F0A6B04 2841000B */ slti $at, $v0, 0xb -/* 0DB638 7F0A6B08 14200004 */ bnez $at, .L7F0A6B1C -/* 0DB63C 7F0A6B0C 24180001 */ li $t8, 1 -/* 0DB640 7F0A6B10 3C018004 */ lui $at, %hi(controlstick_lr_enabled) -/* 0DB644 7F0A6B14 1000000D */ b .L7F0A6B4C -/* 0DB648 7F0A6B18 AC380ADC */ sw $t8, %lo(controlstick_lr_enabled)($at) -.L7F0A6B1C: -/* 0DB64C 7F0A6B1C 0C00303B */ jal get_cur_controller_horz_stick_pos -/* 0DB650 7F0A6B20 00002025 */ move $a0, $zero -/* 0DB654 7F0A6B24 2841FFF6 */ slti $at, $v0, -0xa -/* 0DB658 7F0A6B28 14200008 */ bnez $at, .L7F0A6B4C -/* 0DB65C 7F0A6B2C 00000000 */ nop -/* 0DB660 7F0A6B30 0C00305D */ jal controller_7000C174 -/* 0DB664 7F0A6B34 00002025 */ move $a0, $zero -/* 0DB668 7F0A6B38 2841FFF6 */ slti $at, $v0, -0xa -/* 0DB66C 7F0A6B3C 10200003 */ beqz $at, .L7F0A6B4C -/* 0DB670 7F0A6B40 24190001 */ li $t9, 1 -/* 0DB674 7F0A6B44 3C018004 */ lui $at, %hi(controlstick_lr_enabled) -/* 0DB678 7F0A6B48 AC390ADC */ sw $t9, %lo(controlstick_lr_enabled)($at) -.L7F0A6B4C: -/* 0DB67C 7F0A6B4C 3C088004 */ lui $t0, %hi(D_80040AE0) -/* 0DB680 7F0A6B50 8D080AE0 */ lw $t0, %lo(D_80040AE0)($t0) -/* 0DB684 7F0A6B54 15000027 */ bnez $t0, .L7F0A6BF4 -/* 0DB688 7F0A6B58 00000000 */ nop -/* 0DB68C 7F0A6B5C 0C00307F */ jal get_cur_controller_vert_stick_pos -/* 0DB690 7F0A6B60 00002025 */ move $a0, $zero -/* 0DB694 7F0A6B64 2841FFF6 */ slti $at, $v0, -0xa -/* 0DB698 7F0A6B68 14200009 */ bnez $at, .L7F0A6B90 -/* 0DB69C 7F0A6B6C 00000000 */ nop -/* 0DB6A0 7F0A6B70 0C00307F */ jal get_cur_controller_vert_stick_pos -/* 0DB6A4 7F0A6B74 00002025 */ move $a0, $zero -/* 0DB6A8 7F0A6B78 2841000B */ slti $at, $v0, 0xb -/* 0DB6AC 7F0A6B7C 10200004 */ beqz $at, .L7F0A6B90 -/* 0DB6B0 7F0A6B80 24090001 */ li $t1, 1 -/* 0DB6B4 7F0A6B84 3C018004 */ lui $at, %hi(D_80040AE0) -/* 0DB6B8 7F0A6B88 1000001A */ b .L7F0A6BF4 -/* 0DB6BC 7F0A6B8C AC290AE0 */ sw $t1, %lo(D_80040AE0)($at) -.L7F0A6B90: -/* 0DB6C0 7F0A6B90 0C00307F */ jal get_cur_controller_vert_stick_pos -/* 0DB6C4 7F0A6B94 00002025 */ move $a0, $zero -/* 0DB6C8 7F0A6B98 2841000B */ slti $at, $v0, 0xb -/* 0DB6CC 7F0A6B9C 10200009 */ beqz $at, .L7F0A6BC4 -/* 0DB6D0 7F0A6BA0 00000000 */ nop -/* 0DB6D4 7F0A6BA4 0C0030A1 */ jal controller_7000C284 -/* 0DB6D8 7F0A6BA8 00002025 */ move $a0, $zero -/* 0DB6DC 7F0A6BAC 2841000B */ slti $at, $v0, 0xb -/* 0DB6E0 7F0A6BB0 14200004 */ bnez $at, .L7F0A6BC4 -/* 0DB6E4 7F0A6BB4 240A0001 */ li $t2, 1 -/* 0DB6E8 7F0A6BB8 3C018004 */ lui $at, %hi(D_80040AE0) -/* 0DB6EC 7F0A6BBC 1000000D */ b .L7F0A6BF4 -/* 0DB6F0 7F0A6BC0 AC2A0AE0 */ sw $t2, %lo(D_80040AE0)($at) -.L7F0A6BC4: -/* 0DB6F4 7F0A6BC4 0C00307F */ jal get_cur_controller_vert_stick_pos -/* 0DB6F8 7F0A6BC8 00002025 */ move $a0, $zero -/* 0DB6FC 7F0A6BCC 2841FFF6 */ slti $at, $v0, -0xa -/* 0DB700 7F0A6BD0 14200008 */ bnez $at, .L7F0A6BF4 -/* 0DB704 7F0A6BD4 00000000 */ nop -/* 0DB708 7F0A6BD8 0C0030A1 */ jal controller_7000C284 -/* 0DB70C 7F0A6BDC 00002025 */ move $a0, $zero -/* 0DB710 7F0A6BE0 2841FFF6 */ slti $at, $v0, -0xa -/* 0DB714 7F0A6BE4 10200003 */ beqz $at, .L7F0A6BF4 -/* 0DB718 7F0A6BE8 240B0001 */ li $t3, 1 -/* 0DB71C 7F0A6BEC 3C018004 */ lui $at, %hi(D_80040AE0) -/* 0DB720 7F0A6BF0 AC2B0AE0 */ sw $t3, %lo(D_80040AE0)($at) -.L7F0A6BF4: -/* 0DB724 7F0A6BF4 3C038004 */ lui $v1, %hi(D_80040AF8) -/* 0DB728 7F0A6BF8 24630AF8 */ addiu $v1, %lo(D_80040AF8) # addiu $v1, $v1, 0xaf8 -/* 0DB72C 7F0A6BFC 8C620000 */ lw $v0, ($v1) -/* 0DB730 7F0A6C00 04410007 */ bgez $v0, .L7F0A6C20 -/* 0DB734 7F0A6C04 244EFFFF */ addiu $t6, $v0, -1 -/* 0DB738 7F0A6C08 3C048004 */ lui $a0, %hi(D_80040AF4) -/* 0DB73C 7F0A6C0C 24840AF4 */ addiu $a0, %lo(D_80040AF4) # addiu $a0, $a0, 0xaf4 -/* 0DB740 7F0A6C10 8C8C0000 */ lw $t4, ($a0) -/* 0DB744 7F0A6C14 3C01FFF0 */ lui $at, 0xfff0 -/* 0DB748 7F0A6C18 01816821 */ addu $t5, $t4, $at -/* 0DB74C 7F0A6C1C AC8D0000 */ sw $t5, ($a0) -.L7F0A6C20: -/* 0DB750 7F0A6C20 3C048004 */ lui $a0, %hi(D_80040AF4) -/* 0DB754 7F0A6C24 24840AF4 */ addiu $a0, %lo(D_80040AF4) # addiu $a0, $a0, 0xaf4 -/* 0DB758 7F0A6C28 8C8F0000 */ lw $t7, ($a0) -/* 0DB75C 7F0A6C2C 3C01005F */ lui $at, (0x005F00A1 >> 16) # lui $at, 0x5f -/* 0DB760 7F0A6C30 342100A1 */ ori $at, (0x005F00A1 & 0xFFFF) # ori $at, $at, 0xa1 -/* 0DB764 7F0A6C34 01E1082B */ sltu $at, $t7, $at -/* 0DB768 7F0A6C38 10200006 */ beqz $at, .L7F0A6C54 -/* 0DB76C 7F0A6C3C AC6E0000 */ sw $t6, ($v1) -/* 0DB770 7F0A6C40 3C1800FF */ lui $t8, (0x00FF00A0 >> 16) # lui $t8, 0xff -/* 0DB774 7F0A6C44 371800A0 */ ori $t8, (0x00FF00A0 & 0xFFFF) # ori $t8, $t8, 0xa0 -/* 0DB778 7F0A6C48 2419000F */ li $t9, 15 -/* 0DB77C 7F0A6C4C AC980000 */ sw $t8, ($a0) -/* 0DB780 7F0A6C50 AC790000 */ sw $t9, ($v1) -.L7F0A6C54: -/* 0DB784 7F0A6C54 3C038004 */ lui $v1, %hi(D_80040B00) -/* 0DB788 7F0A6C58 24630B00 */ addiu $v1, %lo(D_80040B00) # addiu $v1, $v1, 0xb00 -/* 0DB78C 7F0A6C5C 8C620000 */ lw $v0, ($v1) -/* 0DB790 7F0A6C60 3C048004 */ lui $a0, %hi(D_80040AFC) -/* 0DB794 7F0A6C64 24840AFC */ addiu $a0, %lo(D_80040AFC) # addiu $a0, $a0, 0xafc -/* 0DB798 7F0A6C68 04410004 */ bgez $v0, .L7F0A6C7C -/* 0DB79C 7F0A6C6C 3C0E8005 */ lui $t6, %hi(D_80048498) -/* 0DB7A0 7F0A6C70 8C880000 */ lw $t0, ($a0) -/* 0DB7A4 7F0A6C74 2509FFF0 */ addiu $t1, $t0, -0x10 -/* 0DB7A8 7F0A6C78 AC890000 */ sw $t1, ($a0) -.L7F0A6C7C: -/* 0DB7AC 7F0A6C7C 3C048004 */ lui $a0, %hi(D_80040AFC) -/* 0DB7B0 7F0A6C80 24840AFC */ addiu $a0, %lo(D_80040AFC) # addiu $a0, $a0, 0xafc -/* 0DB7B4 7F0A6C84 8C8B0000 */ lw $t3, ($a0) -/* 0DB7B8 7F0A6C88 244AFFFF */ addiu $t2, $v0, -1 -/* 0DB7BC 7F0A6C8C AC6A0000 */ sw $t2, ($v1) -/* 0DB7C0 7F0A6C90 2D610060 */ sltiu $at, $t3, 0x60 -/* 0DB7C4 7F0A6C94 10200004 */ beqz $at, .L7F0A6CA8 -/* 0DB7C8 7F0A6C98 240C00FF */ li $t4, 255 -/* 0DB7CC 7F0A6C9C 240D000F */ li $t5, 15 -/* 0DB7D0 7F0A6CA0 AC8C0000 */ sw $t4, ($a0) -/* 0DB7D4 7F0A6CA4 AC6D0000 */ sw $t5, ($v1) -.L7F0A6CA8: -/* 0DB7D8 7F0A6CA8 8DCE8498 */ lw $t6, %lo(D_80048498)($t6) -/* 0DB7DC 7F0A6CAC 3C018004 */ lui $at, %hi(D_80040B1C) -/* 0DB7E0 7F0A6CB0 C4240B1C */ lwc1 $f4, %lo(D_80040B1C)($at) -/* 0DB7E4 7F0A6CB4 448E3000 */ mtc1 $t6, $f6 -/* 0DB7E8 7F0A6CB8 3C018006 */ lui $at, %hi(D_800584C8) -/* 0DB7EC 7F0A6CBC C43084C8 */ lwc1 $f16, %lo(D_800584C8)($at) -/* 0DB7F0 7F0A6CC0 46803220 */ cvt.s.w $f8, $f6 -/* 0DB7F4 7F0A6CC4 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DB7F8 7F0A6CC8 44813000 */ mtc1 $at, $f6 -/* 0DB7FC 7F0A6CCC 3C028004 */ lui $v0, %hi(D_80040B14) -/* 0DB800 7F0A6CD0 24420B14 */ addiu $v0, %lo(D_80040B14) # addiu $v0, $v0, 0xb14 -/* 0DB804 7F0A6CD4 46082282 */ mul.s $f10, $f4, $f8 -/* 0DB808 7F0A6CD8 C4480000 */ lwc1 $f8, ($v0) -/* 0DB80C 7F0A6CDC 46105482 */ mul.s $f18, $f10, $f16 -/* 0DB810 7F0A6CE0 46069103 */ div.s $f4, $f18, $f6 -/* 0DB814 7F0A6CE4 46044280 */ add.s $f10, $f8, $f4 -/* 0DB818 7F0A6CE8 E44A0000 */ swc1 $f10, ($v0) -/* 0DB81C 7F0A6CEC 0FC29A8B */ jal sub_GAME_7F0A6A2C -/* 0DB820 7F0A6CF0 C44C0000 */ lwc1 $f12, ($v0) -/* 0DB824 7F0A6CF4 3C028004 */ lui $v0, %hi(D_80040B14) -/* 0DB828 7F0A6CF8 24420B14 */ addiu $v0, %lo(D_80040B14) # addiu $v0, $v0, 0xb14 -/* 0DB82C 7F0A6CFC E4400000 */ swc1 $f0, ($v0) -/* 0DB830 7F0A6D00 3C0F8004 */ lui $t7, %hi(D_80040B0C) -/* 0DB834 7F0A6D04 8DEF0B0C */ lw $t7, %lo(D_80040B0C)($t7) -/* 0DB838 7F0A6D08 000FC400 */ sll $t8, $t7, 0x10 -/* 0DB83C 7F0A6D0C 0C002914 */ jal get_random_value -/* 0DB840 7F0A6D10 AFB8001C */ sw $t8, 0x1c($sp) -/* 0DB844 7F0A6D14 8FB9001C */ lw $t9, 0x1c($sp) -/* 0DB848 7F0A6D18 0322082B */ sltu $at, $t9, $v0 -/* 0DB84C 7F0A6D1C 10200003 */ beqz $at, .L7F0A6D2C -/* 0DB850 7F0A6D20 00000000 */ nop -/* 0DB854 7F0A6D24 0FC29476 */ jal sub_GAME_7F0A51D8 -/* 0DB858 7F0A6D28 00000000 */ nop -.L7F0A6D2C: -/* 0DB85C 7F0A6D2C 3C048004 */ lui $a0, %hi(D_80040B04) -/* 0DB860 7F0A6D30 24840B04 */ addiu $a0, %lo(D_80040B04) # addiu $a0, $a0, 0xb04 -/* 0DB864 7F0A6D34 8C830000 */ lw $v1, ($a0) -/* 0DB868 7F0A6D38 286100E0 */ slti $at, $v1, 0xe0 -/* 0DB86C 7F0A6D3C 5020000A */ beql $at, $zero, .L7F0A6D68 -/* 0DB870 7F0A6D40 286100E1 */ slti $at, $v1, 0xe1 -/* 0DB874 7F0A6D44 0C002914 */ jal get_random_value -/* 0DB878 7F0A6D48 00000000 */ nop -/* 0DB87C 7F0A6D4C 3C048004 */ lui $a0, %hi(D_80040B04) -/* 0DB880 7F0A6D50 24840B04 */ addiu $a0, %lo(D_80040B04) # addiu $a0, $a0, 0xb04 -/* 0DB884 7F0A6D54 8C880000 */ lw $t0, ($a0) -/* 0DB888 7F0A6D58 00024F82 */ srl $t1, $v0, 0x1e -/* 0DB88C 7F0A6D5C 01091821 */ addu $v1, $t0, $t1 -/* 0DB890 7F0A6D60 AC830000 */ sw $v1, ($a0) -/* 0DB894 7F0A6D64 286100E1 */ slti $at, $v1, 0xe1 -.L7F0A6D68: -/* 0DB898 7F0A6D68 14200003 */ bnez $at, .L7F0A6D78 -/* 0DB89C 7F0A6D6C 24080156 */ li $t0, 342 -/* 0DB8A0 7F0A6D70 240300E0 */ li $v1, 224 -/* 0DB8A4 7F0A6D74 AC830000 */ sw $v1, ($a0) -.L7F0A6D78: -/* 0DB8A8 7F0A6D78 00036023 */ negu $t4, $v1 -/* 0DB8AC 7F0A6D7C 000C6880 */ sll $t5, $t4, 2 -/* 0DB8B0 7F0A6D80 3C048004 */ lui $a0, %hi(D_80040B40) -/* 0DB8B4 7F0A6D84 25AE0380 */ addiu $t6, $t5, 0x380 -/* 0DB8B8 7F0A6D88 3C018004 */ lui $at, %hi(D_80040B08) -/* 0DB8BC 7F0A6D8C 24840B40 */ addiu $a0, %lo(D_80040B40) # addiu $a0, $a0, 0xb40 -/* 0DB8C0 7F0A6D90 AC2E0B08 */ sw $t6, %lo(D_80040B08)($at) -/* 0DB8C4 7F0A6D94 8C8F0000 */ lw $t7, ($a0) -/* 0DB8C8 7F0A6D98 25E2FFFC */ addiu $v0, $t7, -4 -/* 0DB8CC 7F0A6D9C 28410157 */ slti $at, $v0, 0x157 -/* 0DB8D0 7F0A6DA0 14200003 */ bnez $at, .L7F0A6DB0 -/* 0DB8D4 7F0A6DA4 AC820000 */ sw $v0, ($a0) -/* 0DB8D8 7F0A6DA8 2402FEAA */ li $v0, -342 -/* 0DB8DC 7F0A6DAC AC820000 */ sw $v0, ($a0) -.L7F0A6DB0: -/* 0DB8E0 7F0A6DB0 2841FEAA */ slti $at, $v0, -0x156 -/* 0DB8E4 7F0A6DB4 10200002 */ beqz $at, .L7F0A6DC0 -/* 0DB8E8 7F0A6DB8 3C028004 */ lui $v0, %hi(D_80040B44) -/* 0DB8EC 7F0A6DBC AC880000 */ sw $t0, ($a0) -.L7F0A6DC0: -/* 0DB8F0 7F0A6DC0 24420B44 */ addiu $v0, %lo(D_80040B44) # addiu $v0, $v0, 0xb44 -/* 0DB8F4 7F0A6DC4 84490000 */ lh $t1, ($v0) -/* 0DB8F8 7F0A6DC8 3C0D8004 */ lui $t5, %hi(watch_screen_index) -/* 0DB8FC 7F0A6DCC 252A0001 */ addiu $t2, $t1, 1 -/* 0DB900 7F0A6DD0 A44A0000 */ sh $t2, ($v0) -/* 0DB904 7F0A6DD4 844B0000 */ lh $t3, ($v0) -/* 0DB908 7F0A6DD8 316C0001 */ andi $t4, $t3, 1 -/* 0DB90C 7F0A6DDC A44C0000 */ sh $t4, ($v0) -/* 0DB910 7F0A6DE0 8DAD0994 */ lw $t5, %lo(watch_screen_index)($t5) -/* 0DB914 7F0A6DE4 2DA10005 */ sltiu $at, $t5, 5 -/* 0DB918 7F0A6DE8 1020003B */ beqz $at, .L7F0A6ED8 -/* 0DB91C 7F0A6DEC 000D6880 */ sll $t5, $t5, 2 -/* 0DB920 7F0A6DF0 3C018006 */ lui $at, %hi(jpt_800584CC) -/* 0DB924 7F0A6DF4 002D0821 */ addu $at, $at, $t5 -/* 0DB928 7F0A6DF8 8C2D84CC */ lw $t5, %lo(jpt_800584CC)($at) -/* 0DB92C 7F0A6DFC 01A00008 */ jr $t5 -/* 0DB930 7F0A6E00 00000000 */ nop -.L7F0A6E04: -/* 0DB934 7F0A6E04 0FC2949B */ jal watch_screen0_navigation -/* 0DB938 7F0A6E08 00000000 */ nop -/* 0DB93C 7F0A6E0C 10000033 */ b .L7F0A6EDC -/* 0DB940 7F0A6E10 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6E14: -/* 0DB944 7F0A6E14 3C028004 */ lui $v0, %hi(D_80040998) -/* 0DB948 7F0A6E18 8C420998 */ lw $v0, %lo(D_80040998)($v0) -/* 0DB94C 7F0A6E1C 24010001 */ li $at, 1 -/* 0DB950 7F0A6E20 10400005 */ beqz $v0, .L7F0A6E38 -/* 0DB954 7F0A6E24 00000000 */ nop -/* 0DB958 7F0A6E28 10410007 */ beq $v0, $at, .L7F0A6E48 -/* 0DB95C 7F0A6E2C 00000000 */ nop -/* 0DB960 7F0A6E30 10000007 */ b .L7F0A6E50 -/* 0DB964 7F0A6E34 00000000 */ nop -.L7F0A6E38: -/* 0DB968 7F0A6E38 0FC29618 */ jal sub_GAME_7F0A5860 -/* 0DB96C 7F0A6E3C 00000000 */ nop -/* 0DB970 7F0A6E40 10000003 */ b .L7F0A6E50 -/* 0DB974 7F0A6E44 00000000 */ nop -.L7F0A6E48: -/* 0DB978 7F0A6E48 0FC29640 */ jal sub_GAME_7F0A5900 -/* 0DB97C 7F0A6E4C 00000000 */ nop -.L7F0A6E50: -/* 0DB980 7F0A6E50 0FC29571 */ jal watch_screen2_navigation -/* 0DB984 7F0A6E54 00000000 */ nop -/* 0DB988 7F0A6E58 10000020 */ b .L7F0A6EDC -/* 0DB98C 7F0A6E5C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6E60: -/* 0DB990 7F0A6E60 3C0E8004 */ lui $t6, %hi(D_8004099C) -/* 0DB994 7F0A6E64 8DCE099C */ lw $t6, %lo(D_8004099C)($t6) -/* 0DB998 7F0A6E68 2DC1000A */ sltiu $at, $t6, 0xa -/* 0DB99C 7F0A6E6C 10200010 */ beqz $at, .L7F0A6EB0 -/* 0DB9A0 7F0A6E70 000E7080 */ sll $t6, $t6, 2 -/* 0DB9A4 7F0A6E74 3C018006 */ lui $at, %hi(jpt_800584E0) -/* 0DB9A8 7F0A6E78 002E0821 */ addu $at, $at, $t6 -/* 0DB9AC 7F0A6E7C 8C2E84E0 */ lw $t6, %lo(jpt_800584E0)($at) -/* 0DB9B0 7F0A6E80 01C00008 */ jr $t6 -/* 0DB9B4 7F0A6E84 00000000 */ nop -.L7F0A6E88: -/* 0DB9B8 7F0A6E88 0FC29699 */ jal sub_GAME_7F0A5A64 -/* 0DB9BC 7F0A6E8C 00000000 */ nop -/* 0DB9C0 7F0A6E90 10000007 */ b .L7F0A6EB0 -/* 0DB9C4 7F0A6E94 00000000 */ nop -.L7F0A6E98: -/* 0DB9C8 7F0A6E98 0FC296BD */ jal sub_GAME_7F0A5AF4 -/* 0DB9CC 7F0A6E9C 00000000 */ nop -/* 0DB9D0 7F0A6EA0 10000003 */ b .L7F0A6EB0 -/* 0DB9D4 7F0A6EA4 00000000 */ nop -.L7F0A6EA8: -/* 0DB9D8 7F0A6EA8 0FC29666 */ jal sub_GAME_7F0A5998 -/* 0DB9DC 7F0A6EAC 00000000 */ nop -.L7F0A6EB0: -/* 0DB9E0 7F0A6EB0 0FC295A9 */ jal watch_screen3_navigation -/* 0DB9E4 7F0A6EB4 00000000 */ nop -/* 0DB9E8 7F0A6EB8 10000008 */ b .L7F0A6EDC -/* 0DB9EC 7F0A6EBC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6EC0: -/* 0DB9F0 7F0A6EC0 0FC295E1 */ jal watch_screen4_navigation -/* 0DB9F4 7F0A6EC4 00000000 */ nop -/* 0DB9F8 7F0A6EC8 10000004 */ b .L7F0A6EDC -/* 0DB9FC 7F0A6ECC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6ED0: -/* 0DBA00 7F0A6ED0 0FC294F6 */ jal watch_screen1_navigation -/* 0DBA04 7F0A6ED4 00000000 */ nop -.L7F0A6ED8: -/* 0DBA08 7F0A6ED8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6EDC: -/* 0DBA0C 7F0A6EDC 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0DBA10 7F0A6EE0 03E00008 */ jr $ra -/* 0DBA14 7F0A6EE4 00000000 */ nop -) + if (D_80040AE0 == 0) + { + if ((get_cur_controller_vert_stick_pos(0) >= -0xA) && (get_cur_controller_vert_stick_pos(0) < 0xB)) + { + D_80040AE0 = 1; + } + else if ((get_cur_controller_vert_stick_pos(0) < 0xB) && (controller_7000C284(0) >= 0xB)) + { + D_80040AE0 = 1; + } + else if ((get_cur_controller_vert_stick_pos(0) >= -0xA) && (controller_7000C284(0) < -0xA)) + { + D_80040AE0 = 1; + } + } + + temp_2 = D_80040AF8; + if (temp_2 < 0) + { + D_80040AF4 = D_80040AF4 + 0xFFF00000; + } + D_80040AF8 = temp_2 - 1; + + if (D_80040AF4 < 0x5F00A1U) + { + D_80040AF4 = 0xFF00A0U; + D_80040AF8 = 0xF; + } + + temp_3 = D_80040B00; + if (temp_3 < 0) + { + D_80040AFC = D_80040AFC - 0x10; + } + D_80040B00 = temp_3 - 1; + + if (D_80040AFC < 0x60U) + { + D_80040AFC = 0xFFU; + D_80040B00 = 0xF; + } + + D_80040B14 += ((D_80040B1C * D_80048498 * 6.2831855f) / 360.0f); + + D_80040B14 = sub_GAME_7F0A6A2C(D_80040B14); + + temp_1 = D_80040B0C << 0x10; + if (temp_1 < get_random_value()) + { + sub_GAME_7F0A51D8(); + } + + if (D_80040B04 < 0xE0) + { + random_value = get_random_value(); + D_80040B04 += (random_value >> 0x1E); + } + + if (D_80040B04 > 0xe0) { + D_80040B04 = 0xe0; + } + + D_80040B08 = ((-D_80040B04 * 4) + 0x380); + D_80040B40 = D_80040B40 - 4; + + if (D_80040B40 >= 0x157) { + D_80040B40 = -0x156; + } + + if (D_80040B40 < -0x156) { + D_80040B40 = 0x156; + } + + D_80040B44 = D_80040B44 + 1; + D_80040B44 = D_80040B44 & 1; + + switch (watch_screen_index) + { + case WATCH_INDEX_MISSION_STATUS: + watch_screen0_navigation(); + break; + + case WATCH_INDEX_CONTROL_OPTIONS: + switch (controller_options_index) + { + case CONTROLLER_OPTIONS_INDEX_STYLE: + controller_options_controlstyle_navigation(); + break; + + case CONTROLLER_OPTIONS_INDEX_INPUTS: + controller_options_inputs_navigation(); + } + watch_screen2_navigation(); + break; + + case WATCH_INDEX_GAME_OPTIONS: + switch (game_options_index) + { + case GAME_OPTIONS_INDEX_MUSIC: + game_options_music_volume_navigation(); + break; + + case GAME_OPTIONS_INDEX_FX: + game_options_fx_volume_navigation(); + break; + + case GAME_OPTIONS_INDEX_LOOK_UPDOWN: + case GAME_OPTIONS_INDEX_AUTO_AIM: + case GAME_OPTIONS_INDEX_AIM_CONTROL: + case GAME_OPTIONS_INDEX_SIGHT_ONSCREEN: + case GAME_OPTIONS_INDEX_LOOK_AHEAD: + case GAME_OPTIONS_INDEX_AMMO_ONSCREEN: + case GAME_OPTIONS_INDEX_SCREEN_SIZE: + case GAME_OPTIONS_INDEX_RATIO: + sub_GAME_7F0A5998(); + } + watch_screen3_navigation(); + break; + + case WATCH_INDEX_MISSION_BRIEFING: + watch_screen4_navigation(); + break; + + case WATCH_INDEX_INVENTORY: + watch_screen1_navigation(); + } +} #endif #ifdef VERSION_JP @@ -3273,8 +2708,8 @@ glabel sub_GAME_7F0A6A80 /* 0DC514 7F0A79A4 10000033 */ b .Ljp7F0A7A74 /* 0DC518 7F0A79A8 8FBF0014 */ lw $ra, 0x14($sp) .Ljp7F0A6E14: -/* 0DC51C 7F0A79AC 3C028004 */ lui $v0, %hi(D_80040998) # $v0, 0x8004 -/* 0DC520 7F0A79B0 8C4209C8 */ lw $v0, %lo(D_80040998)($v0) +/* 0DC51C 7F0A79AC 3C028004 */ lui $v0, %hi(controller_options_index) # $v0, 0x8004 +/* 0DC520 7F0A79B0 8C4209C8 */ lw $v0, %lo(controller_options_index)($v0) /* 0DC524 7F0A79B4 24010001 */ li $at, 1 /* 0DC528 7F0A79B8 10400005 */ beqz $v0, .Ljp7F0A79D0 /* 0DC52C 7F0A79BC 00000000 */ nop @@ -3283,12 +2718,12 @@ glabel sub_GAME_7F0A6A80 /* 0DC538 7F0A79C8 10000007 */ b .Ljp7F0A79E8 /* 0DC53C 7F0A79CC 00000000 */ nop .Ljp7F0A79D0: -/* 0DC540 7F0A79D0 0FC29900 */ jal sub_GAME_7F0A5860 +/* 0DC540 7F0A79D0 0FC29900 */ jal controller_options_controlstyle_navigation /* 0DC544 7F0A79D4 00000000 */ nop /* 0DC548 7F0A79D8 10000003 */ b .Ljp7F0A79E8 /* 0DC54C 7F0A79DC 00000000 */ nop .Ljp7F0A79E0: -/* 0DC550 7F0A79E0 0FC29928 */ jal sub_GAME_7F0A5900 +/* 0DC550 7F0A79E0 0FC29928 */ jal controller_options_inputs_navigation /* 0DC554 7F0A79E4 00000000 */ nop .Ljp7F0A79E8: /* 0DC558 7F0A79E8 0FC29859 */ jal watch_screen2_navigation @@ -3296,8 +2731,8 @@ glabel sub_GAME_7F0A6A80 /* 0DC560 7F0A79F0 10000020 */ b .Ljp7F0A7A74 /* 0DC564 7F0A79F4 8FBF0014 */ lw $ra, 0x14($sp) .Ljp7F0A6E60: -/* 0DC568 7F0A79F8 3C0D8004 */ lui $t5, %hi(D_8004099C) # $t5, 0x8004 -/* 0DC56C 7F0A79FC 8DAD09CC */ lw $t5, %lo(D_8004099C)($t5) +/* 0DC568 7F0A79F8 3C0D8004 */ lui $t5, %hi(game_options_index) # $t5, 0x8004 +/* 0DC56C 7F0A79FC 8DAD09CC */ lw $t5, %lo(game_options_index)($t5) /* 0DC570 7F0A7A00 2DA1000A */ sltiu $at, $t5, 0xa /* 0DC574 7F0A7A04 10200010 */ beqz $at, .Ljp7F0A7A48 /* 0DC578 7F0A7A08 000D6880 */ sll $t5, $t5, 2 @@ -3307,12 +2742,12 @@ glabel sub_GAME_7F0A6A80 /* 0DC588 7F0A7A18 01A00008 */ jr $t5 /* 0DC58C 7F0A7A1C 00000000 */ nop .Ljp7F0A6E88: -/* 0DC590 7F0A7A20 0FC29981 */ jal sub_GAME_7F0A5A64 +/* 0DC590 7F0A7A20 0FC29981 */ jal game_options_music_volume_navigation /* 0DC594 7F0A7A24 00000000 */ nop /* 0DC598 7F0A7A28 10000007 */ b .Ljp7F0A7A48 /* 0DC59C 7F0A7A2C 00000000 */ nop .Ljp7F0A6E98: -/* 0DC5A0 7F0A7A30 0FC299A5 */ jal sub_GAME_7F0A5AF4 +/* 0DC5A0 7F0A7A30 0FC299A5 */ jal game_options_fx_volume_navigation /* 0DC5A4 7F0A7A34 00000000 */ nop /* 0DC5A8 7F0A7A38 10000003 */ b .Ljp7F0A7A48 /* 0DC5AC 7F0A7A3C 00000000 */ nop @@ -3341,8 +2776,6 @@ glabel sub_GAME_7F0A6A80 ) #endif -#endif - #ifdef NONMATCHING @@ -3533,7 +2966,7 @@ glabel sub_GAME_7F0A70AC #ifdef NONMATCHING -void sub_GAME_7F0A714C(void) { +void draw_background_health_and_armor(void) { } #else @@ -3542,7 +2975,7 @@ GLOBAL_ASM( glabel D_80058508 .word 0x3d4ccccd /*0.050000001*/ .text -glabel sub_GAME_7F0A714C +glabel draw_background_health_and_armor /* 0DBC7C 7F0A714C 27BDFFB0 */ addiu $sp, $sp, -0x50 /* 0DBC80 7F0A7150 AFB00018 */ sw $s0, 0x18($sp) /* 0DBC84 7F0A7154 00808025 */ move $s0, $a0 @@ -3972,7 +3405,7 @@ glabel sub_GAME_7F0A714C void sub_GAME_7F0A77A8(u32 param_1,u32 param_2) { - sub_GAME_7F0A714C(param_1,param_2,1); + draw_background_health_and_armor(param_1,param_2,1); } @@ -4395,155 +3828,76 @@ glabel sub_GAME_7F0A77C8 #endif +s32 draw_text_mission_status(s32 arg0) +{ + s32 txtptr_1; + s32 txtptr_2; + s32 sp64; + s32 sp60; + s32 sp5C; + s32 sp58; + s32 ptr_first_font; + s32 ptr_second_font; + s32 sp4C; + s32 joffset; + + txtptr_1 = get_textptr_for_textID(0xAC27); + ptr_first_font = ptrFirstFontTableSmall; + ptr_second_font = ptrSecondFontTableSmall; + + if (check_objectives_complete()) + { + sp4C = 0xFF00B0; + txtptr_2 = get_textptr_for_textID(0xAC28); + } + else + { + sp4C = D_80040AF4; + txtptr_2 = get_textptr_for_textID(0xAC29); + } + arg0 = microcode_constructor(arg0); + sub_GAME_7F0AE98C(&sp5C, &sp58, txtptr_1, ptr_second_font, ptr_first_font, 0); + sp64 = 0x51; + sp60 = 0x41; + arg0 = en_text_write_stuff(arg0, &sp64, &sp60, txtptr_1, ptr_second_font, ptr_first_font, 0xFF00B0, sp58, sp5C, 0, 0); + + if (j_text_trigger) + { + joffset = 0x22; + } + else + { + joffset = 0; + } + + sp64 = sp64 + sp58 + joffset + 4; + sp60 = sp60 - sp5C; + sub_GAME_7F0AE98C(&sp5C, &sp58, txtptr_2, ptr_second_font, ptr_first_font, 0); + arg0 = en_text_write_stuff(arg0, &sp64, &sp60, txtptr_2, ptr_second_font, ptr_first_font, sp4C, sp58, sp5C, 0, 0); + arg0 = sub_GAME_7F0A77C8(arg0); - -#ifdef NONMATCHING -void sub_GAME_7F0A7C18(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A7C18 -/* 0DC748 7F0A7C18 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 0DC74C 7F0A7C1C AFB20040 */ sw $s2, 0x40($sp) -/* 0DC750 7F0A7C20 00809025 */ move $s2, $a0 -/* 0DC754 7F0A7C24 AFBF0044 */ sw $ra, 0x44($sp) -/* 0DC758 7F0A7C28 AFB1003C */ sw $s1, 0x3c($sp) -/* 0DC75C 7F0A7C2C AFB00038 */ sw $s0, 0x38($sp) -/* 0DC760 7F0A7C30 0FC30776 */ jal get_textptr_for_textID -/* 0DC764 7F0A7C34 3404AC27 */ li $a0, 44071 -/* 0DC768 7F0A7C38 3C108004 */ lui $s0, %hi(ptrFirstFontTableSmall) -/* 0DC76C 7F0A7C3C 3C118004 */ lui $s1, %hi(ptrSecondFontTableSmall) -/* 0DC770 7F0A7C40 AFA2006C */ sw $v0, 0x6c($sp) -/* 0DC774 7F0A7C44 8E100EAC */ lw $s0, %lo(ptrFirstFontTableSmall)($s0) -/* 0DC778 7F0A7C48 0FC15D2E */ jal check_objectives_complete -/* 0DC77C 7F0A7C4C 8E310EB0 */ lw $s1, %lo(ptrSecondFontTableSmall)($s1) -/* 0DC780 7F0A7C50 10400008 */ beqz $v0, .L7F0A7C74 -/* 0DC784 7F0A7C54 3C0F8004 */ lui $t7, %hi(D_80040AF4) -/* 0DC788 7F0A7C58 3C0E00FF */ lui $t6, (0x00FF00B0 >> 16) # lui $t6, 0xff -/* 0DC78C 7F0A7C5C 35CE00B0 */ ori $t6, (0x00FF00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DC790 7F0A7C60 AFAE004C */ sw $t6, 0x4c($sp) -/* 0DC794 7F0A7C64 0FC30776 */ jal get_textptr_for_textID -/* 0DC798 7F0A7C68 3404AC28 */ li $a0, 44072 -/* 0DC79C 7F0A7C6C 10000006 */ b .L7F0A7C88 -/* 0DC7A0 7F0A7C70 AFA20068 */ sw $v0, 0x68($sp) -.L7F0A7C74: -/* 0DC7A4 7F0A7C74 8DEF0AF4 */ lw $t7, %lo(D_80040AF4)($t7) -/* 0DC7A8 7F0A7C78 3404AC29 */ li $a0, 44073 -/* 0DC7AC 7F0A7C7C 0FC30776 */ jal get_textptr_for_textID -/* 0DC7B0 7F0A7C80 AFAF004C */ sw $t7, 0x4c($sp) -/* 0DC7B4 7F0A7C84 AFA20068 */ sw $v0, 0x68($sp) -.L7F0A7C88: -/* 0DC7B8 7F0A7C88 0FC2B366 */ jal microcode_constructor -/* 0DC7BC 7F0A7C8C 02402025 */ move $a0, $s2 -/* 0DC7C0 7F0A7C90 00409025 */ move $s2, $v0 -/* 0DC7C4 7F0A7C94 27A4005C */ addiu $a0, $sp, 0x5c -/* 0DC7C8 7F0A7C98 27A50058 */ addiu $a1, $sp, 0x58 -/* 0DC7CC 7F0A7C9C 8FA6006C */ lw $a2, 0x6c($sp) -/* 0DC7D0 7F0A7CA0 02203825 */ move $a3, $s1 -/* 0DC7D4 7F0A7CA4 AFB00010 */ sw $s0, 0x10($sp) -/* 0DC7D8 7F0A7CA8 0FC2BA63 */ jal sub_GAME_7F0AE98C -/* 0DC7DC 7F0A7CAC AFA00014 */ sw $zero, 0x14($sp) -/* 0DC7E0 7F0A7CB0 8FA90058 */ lw $t1, 0x58($sp) -/* 0DC7E4 7F0A7CB4 8FAA005C */ lw $t2, 0x5c($sp) -/* 0DC7E8 7F0A7CB8 3C0800FF */ lui $t0, (0x00FF00B0 >> 16) # lui $t0, 0xff -/* 0DC7EC 7F0A7CBC 24180051 */ li $t8, 81 -/* 0DC7F0 7F0A7CC0 24190041 */ li $t9, 65 -/* 0DC7F4 7F0A7CC4 350800B0 */ ori $t0, (0x00FF00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DC7F8 7F0A7CC8 AFB80064 */ sw $t8, 0x64($sp) -/* 0DC7FC 7F0A7CCC AFB90060 */ sw $t9, 0x60($sp) -/* 0DC800 7F0A7CD0 AFA80018 */ sw $t0, 0x18($sp) -/* 0DC804 7F0A7CD4 02402025 */ move $a0, $s2 -/* 0DC808 7F0A7CD8 27A50064 */ addiu $a1, $sp, 0x64 -/* 0DC80C 7F0A7CDC 27A60060 */ addiu $a2, $sp, 0x60 -/* 0DC810 7F0A7CE0 8FA7006C */ lw $a3, 0x6c($sp) -/* 0DC814 7F0A7CE4 AFB10010 */ sw $s1, 0x10($sp) -/* 0DC818 7F0A7CE8 AFB00014 */ sw $s0, 0x14($sp) -/* 0DC81C 7F0A7CEC AFA00024 */ sw $zero, 0x24($sp) -/* 0DC820 7F0A7CF0 AFA00028 */ sw $zero, 0x28($sp) -/* 0DC824 7F0A7CF4 AFA9001C */ sw $t1, 0x1c($sp) -/* 0DC828 7F0A7CF8 0FC2B6AF */ jal en_text_write_stuff -/* 0DC82C 7F0A7CFC AFAA0020 */ sw $t2, 0x20($sp) -/* 0DC830 7F0A7D00 3C0B8005 */ lui $t3, %hi(j_text_trigger) -/* 0DC834 7F0A7D04 8D6B84D0 */ lw $t3, %lo(j_text_trigger)($t3) -/* 0DC838 7F0A7D08 00409025 */ move $s2, $v0 -/* 0DC83C 7F0A7D0C 8FAC0064 */ lw $t4, 0x64($sp) -/* 0DC840 7F0A7D10 11600003 */ beqz $t3, .L7F0A7D20 -/* 0DC844 7F0A7D14 8FAD0058 */ lw $t5, 0x58($sp) -/* 0DC848 7F0A7D18 10000002 */ b .L7F0A7D24 -/* 0DC84C 7F0A7D1C 24020022 */ li $v0, 34 -.L7F0A7D20: -/* 0DC850 7F0A7D20 00001025 */ move $v0, $zero -.L7F0A7D24: -/* 0DC854 7F0A7D24 8FB90060 */ lw $t9, 0x60($sp) -/* 0DC858 7F0A7D28 8FA8005C */ lw $t0, 0x5c($sp) -/* 0DC85C 7F0A7D2C 018D7021 */ addu $t6, $t4, $t5 -/* 0DC860 7F0A7D30 01C27821 */ addu $t7, $t6, $v0 -/* 0DC864 7F0A7D34 25F80004 */ addiu $t8, $t7, 4 -/* 0DC868 7F0A7D38 03284823 */ subu $t1, $t9, $t0 -/* 0DC86C 7F0A7D3C AFB80064 */ sw $t8, 0x64($sp) -/* 0DC870 7F0A7D40 AFA90060 */ sw $t1, 0x60($sp) -/* 0DC874 7F0A7D44 27A4005C */ addiu $a0, $sp, 0x5c -/* 0DC878 7F0A7D48 27A50058 */ addiu $a1, $sp, 0x58 -/* 0DC87C 7F0A7D4C 8FA60068 */ lw $a2, 0x68($sp) -/* 0DC880 7F0A7D50 02203825 */ move $a3, $s1 -/* 0DC884 7F0A7D54 AFB00010 */ sw $s0, 0x10($sp) -/* 0DC888 7F0A7D58 0FC2BA63 */ jal sub_GAME_7F0AE98C -/* 0DC88C 7F0A7D5C AFA00014 */ sw $zero, 0x14($sp) -/* 0DC890 7F0A7D60 8FAA004C */ lw $t2, 0x4c($sp) -/* 0DC894 7F0A7D64 8FAB0058 */ lw $t3, 0x58($sp) -/* 0DC898 7F0A7D68 8FAC005C */ lw $t4, 0x5c($sp) -/* 0DC89C 7F0A7D6C 02402025 */ move $a0, $s2 -/* 0DC8A0 7F0A7D70 27A50064 */ addiu $a1, $sp, 0x64 -/* 0DC8A4 7F0A7D74 27A60060 */ addiu $a2, $sp, 0x60 -/* 0DC8A8 7F0A7D78 8FA70068 */ lw $a3, 0x68($sp) -/* 0DC8AC 7F0A7D7C AFB10010 */ sw $s1, 0x10($sp) -/* 0DC8B0 7F0A7D80 AFB00014 */ sw $s0, 0x14($sp) -/* 0DC8B4 7F0A7D84 AFA00024 */ sw $zero, 0x24($sp) -/* 0DC8B8 7F0A7D88 AFA00028 */ sw $zero, 0x28($sp) -/* 0DC8BC 7F0A7D8C AFAA0018 */ sw $t2, 0x18($sp) -/* 0DC8C0 7F0A7D90 AFAB001C */ sw $t3, 0x1c($sp) -/* 0DC8C4 7F0A7D94 0FC2B6AF */ jal en_text_write_stuff -/* 0DC8C8 7F0A7D98 AFAC0020 */ sw $t4, 0x20($sp) -/* 0DC8CC 7F0A7D9C 0FC29DF2 */ jal sub_GAME_7F0A77C8 -/* 0DC8D0 7F0A7DA0 00402025 */ move $a0, $v0 -/* 0DC8D4 7F0A7DA4 8FBF0044 */ lw $ra, 0x44($sp) -/* 0DC8D8 7F0A7DA8 8FB00038 */ lw $s0, 0x38($sp) -/* 0DC8DC 7F0A7DAC 8FB1003C */ lw $s1, 0x3c($sp) -/* 0DC8E0 7F0A7DB0 8FB20040 */ lw $s2, 0x40($sp) -/* 0DC8E4 7F0A7DB4 03E00008 */ jr $ra -/* 0DC8E8 7F0A7DB8 27BD0070 */ addiu $sp, $sp, 0x70 -) -#endif - - - - - -u32 sub_GAME_7F0A7DBC(u32 uParm1) { - return uParm1; + return arg0; } +u32 empty_draw_function(u32 param) { + return param; +} - - - -#ifdef NONMATCHING -void sub_GAME_7F0A7DC4(s32 arg0) +s32 draw_text_q_watch_v201_beta(s32 arg0) { s32 txtptr; s32 sp50; - ?32 sp4C; + s32 sp4C; s32 sp48; s32 sp44; s32 pFirstFontTable; s32 pSecondFontTable; s32 joffset; - txtptr = get_textptr_for_textID(0xac2b); - if (j_text_trigger != 0) + txtptr = get_textptr_for_textID(0xAC2B); + + if (j_text_trigger) { joffset = -5; } @@ -4551,88 +3905,19 @@ void sub_GAME_7F0A7DC4(s32 arg0) { joffset = 0; } - sp50 = (s32) (joffset + 0x65); + sp50 = joffset + 0x65; sp4C = 0x31; sp48 = 0; sp44 = 0; - pFirstFontTable = (s32) ptrFirstFontTableSmall; - pSecondFontTable = (s32) ptrSecondFontTableSmall; + pFirstFontTable = ptrFirstFontTableSmall; + pSecondFontTable = ptrSecondFontTableSmall; arg0 = microcode_constructor(arg0); sub_GAME_7F0AE98C(&sp48, &sp44, txtptr, pSecondFontTable, pFirstFontTable, 0); - en_text_write_stuff(arg0, &sp50, &sp4C, txtptr, pSecondFontTable, pFirstFontTable, 0xff00b0, sp44, sp48, 0, 0); + return en_text_write_stuff(arg0, &sp50, &sp4C, txtptr, pSecondFontTable, pFirstFontTable, 0xFF00B0, sp44, sp48, 0, 0); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A7DC4 -/* 0DC8F4 7F0A7DC4 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0DC8F8 7F0A7DC8 AFBF0034 */ sw $ra, 0x34($sp) -/* 0DC8FC 7F0A7DCC AFA40058 */ sw $a0, 0x58($sp) -/* 0DC900 7F0A7DD0 0FC30776 */ jal get_textptr_for_textID -/* 0DC904 7F0A7DD4 3404AC2B */ li $a0, 44075 -/* 0DC908 7F0A7DD8 3C0E8005 */ lui $t6, %hi(j_text_trigger) -/* 0DC90C 7F0A7DDC 8DCE84D0 */ lw $t6, %lo(j_text_trigger)($t6) -/* 0DC910 7F0A7DE0 AFA20054 */ sw $v0, 0x54($sp) -/* 0DC914 7F0A7DE4 24180031 */ li $t8, 49 -/* 0DC918 7F0A7DE8 11C00003 */ beqz $t6, .L7F0A7DF8 -/* 0DC91C 7F0A7DEC 3C198004 */ lui $t9, %hi(ptrFirstFontTableSmall) -/* 0DC920 7F0A7DF0 10000002 */ b .L7F0A7DFC -/* 0DC924 7F0A7DF4 2402FFFB */ li $v0, -5 -.L7F0A7DF8: -/* 0DC928 7F0A7DF8 00001025 */ move $v0, $zero -.L7F0A7DFC: -/* 0DC92C 7F0A7DFC 3C088004 */ lui $t0, %hi(ptrSecondFontTableSmall) -/* 0DC930 7F0A7E00 8F390EAC */ lw $t9, %lo(ptrFirstFontTableSmall)($t9) -/* 0DC934 7F0A7E04 8D080EB0 */ lw $t0, %lo(ptrSecondFontTableSmall)($t0) -/* 0DC938 7F0A7E08 244F0065 */ addiu $t7, $v0, 0x65 -/* 0DC93C 7F0A7E0C AFAF0050 */ sw $t7, 0x50($sp) -/* 0DC940 7F0A7E10 AFB8004C */ sw $t8, 0x4c($sp) -/* 0DC944 7F0A7E14 AFA00048 */ sw $zero, 0x48($sp) -/* 0DC948 7F0A7E18 AFA00044 */ sw $zero, 0x44($sp) -/* 0DC94C 7F0A7E1C 8FA40058 */ lw $a0, 0x58($sp) -/* 0DC950 7F0A7E20 AFB90040 */ sw $t9, 0x40($sp) -/* 0DC954 7F0A7E24 0FC2B366 */ jal microcode_constructor -/* 0DC958 7F0A7E28 AFA8003C */ sw $t0, 0x3c($sp) -/* 0DC95C 7F0A7E2C 8FA90040 */ lw $t1, 0x40($sp) -/* 0DC960 7F0A7E30 AFA20058 */ sw $v0, 0x58($sp) -/* 0DC964 7F0A7E34 27A40048 */ addiu $a0, $sp, 0x48 -/* 0DC968 7F0A7E38 27A50044 */ addiu $a1, $sp, 0x44 -/* 0DC96C 7F0A7E3C 8FA60054 */ lw $a2, 0x54($sp) -/* 0DC970 7F0A7E40 8FA7003C */ lw $a3, 0x3c($sp) -/* 0DC974 7F0A7E44 AFA00014 */ sw $zero, 0x14($sp) -/* 0DC978 7F0A7E48 0FC2BA63 */ jal sub_GAME_7F0AE98C -/* 0DC97C 7F0A7E4C AFA90010 */ sw $t1, 0x10($sp) -/* 0DC980 7F0A7E50 8FAA003C */ lw $t2, 0x3c($sp) -/* 0DC984 7F0A7E54 8FAB0040 */ lw $t3, 0x40($sp) -/* 0DC988 7F0A7E58 8FAD0044 */ lw $t5, 0x44($sp) -/* 0DC98C 7F0A7E5C 8FAE0048 */ lw $t6, 0x48($sp) -/* 0DC990 7F0A7E60 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0DC994 7F0A7E64 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0DC998 7F0A7E68 AFAC0018 */ sw $t4, 0x18($sp) -/* 0DC99C 7F0A7E6C 8FA40058 */ lw $a0, 0x58($sp) -/* 0DC9A0 7F0A7E70 27A50050 */ addiu $a1, $sp, 0x50 -/* 0DC9A4 7F0A7E74 27A6004C */ addiu $a2, $sp, 0x4c -/* 0DC9A8 7F0A7E78 8FA70054 */ lw $a3, 0x54($sp) -/* 0DC9AC 7F0A7E7C AFA00024 */ sw $zero, 0x24($sp) -/* 0DC9B0 7F0A7E80 AFA00028 */ sw $zero, 0x28($sp) -/* 0DC9B4 7F0A7E84 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DC9B8 7F0A7E88 AFAB0014 */ sw $t3, 0x14($sp) -/* 0DC9BC 7F0A7E8C AFAD001C */ sw $t5, 0x1c($sp) -/* 0DC9C0 7F0A7E90 0FC2B6AF */ jal en_text_write_stuff -/* 0DC9C4 7F0A7E94 AFAE0020 */ sw $t6, 0x20($sp) -/* 0DC9C8 7F0A7E98 8FBF0034 */ lw $ra, 0x34($sp) -/* 0DC9CC 7F0A7E9C 27BD0058 */ addiu $sp, $sp, 0x58 -/* 0DC9D0 7F0A7EA0 03E00008 */ jr $ra -/* 0DC9D4 7F0A7EA4 00000000 */ nop -) -#endif - - - - #ifdef NONMATCHING -void debug_gun_watch_move_related(void) { +void draw_current_hand_item_and_ammo(void) { } #else @@ -4659,7 +3944,7 @@ glabel D_8005852C glabel D_80058530 .word 0x40c90fdb /*6.2831855*/ .text -glabel debug_gun_watch_move_related +glabel draw_current_hand_item_and_ammo /* 0DC9D8 7F0A7EA8 27BDFEE8 */ addiu $sp, $sp, -0x118 /* 0DC9DC 7F0A7EAC AFBF003C */ sw $ra, 0x3c($sp) /* 0DC9E0 7F0A7EB0 AFB00038 */ sw $s0, 0x38($sp) @@ -4848,7 +4133,7 @@ glabel debug_gun_watch_move_related /* 0DCCA0 7F0A8170 E7A0001C */ swc1 $f0, 0x1c($sp) /* 0DCCA4 7F0A8174 E7A00024 */ swc1 $f0, 0x24($sp) /* 0DCCA8 7F0A8178 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0DCCAC 7F0A817C 0FC165A5 */ jal sub_GAME_7F059694 +/* 0DCCAC 7F0A817C 0FC165A5 */ jal matrix_4x4_7F059694 /* 0DCCB0 7F0A8180 E7B20020 */ swc1 $f18, 0x20($sp) /* 0DCCB4 7F0A8184 27A40090 */ addiu $a0, $sp, 0x90 /* 0DCCB8 7F0A8188 0FC1601A */ jal matrix_4x4_multiply_in_place @@ -4954,142 +4239,44 @@ glabel debug_gun_watch_move_related #endif - - - -#ifdef NONMATCHING -s32 sub_GAME_7F0A830C(void) +s32 draw_watch_mission_status_page(s32 param_1, s32 param_2) { - s32 temp_s0; - s32 phi_s0; - - temp_s0 = sub_GAME_7F0A714C(0); + param_1 = draw_background_health_and_armor(param_1, param_2, 0); + if (check_watch_page_transistion_running() != 1) { - phi_s0 = debug_gun_watch_move_related(sub_GAME_7F0A7DBC(sub_GAME_7F0A7C18(sub_GAME_7F0A7DC4(temp_s0)))); + param_1 = draw_text_q_watch_v201_beta(param_1); + param_1 = draw_text_mission_status(param_1); + param_1 = draw_current_hand_item_and_ammo(empty_draw_function(param_1)); } else { check_watch_page_transistion_running(); - phi_s0 = temp_s0; } - return phi_s0; + + return param_1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A830C -/* 0DCE3C 7F0A830C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0DCE40 7F0A8310 AFBF001C */ sw $ra, 0x1c($sp) -/* 0DCE44 7F0A8314 AFB00018 */ sw $s0, 0x18($sp) -/* 0DCE48 7F0A8318 0FC29C53 */ jal sub_GAME_7F0A714C -/* 0DCE4C 7F0A831C 00003025 */ move $a2, $zero -/* 0DCE50 7F0A8320 0FC1F97F */ jal check_watch_page_transistion_running -/* 0DCE54 7F0A8324 00408025 */ move $s0, $v0 -/* 0DCE58 7F0A8328 24010001 */ li $at, 1 -/* 0DCE5C 7F0A832C 1041000B */ beq $v0, $at, .L7F0A835C -/* 0DCE60 7F0A8330 00000000 */ nop -/* 0DCE64 7F0A8334 0FC29F71 */ jal sub_GAME_7F0A7DC4 -/* 0DCE68 7F0A8338 02002025 */ move $a0, $s0 -/* 0DCE6C 7F0A833C 0FC29F06 */ jal sub_GAME_7F0A7C18 -/* 0DCE70 7F0A8340 00402025 */ move $a0, $v0 -/* 0DCE74 7F0A8344 0FC29F6F */ jal sub_GAME_7F0A7DBC -/* 0DCE78 7F0A8348 00402025 */ move $a0, $v0 -/* 0DCE7C 7F0A834C 0FC29FAA */ jal debug_gun_watch_move_related -/* 0DCE80 7F0A8350 00402025 */ move $a0, $v0 -/* 0DCE84 7F0A8354 10000003 */ b .L7F0A8364 -/* 0DCE88 7F0A8358 00408025 */ move $s0, $v0 -.L7F0A835C: -/* 0DCE8C 7F0A835C 0FC1F97F */ jal check_watch_page_transistion_running -/* 0DCE90 7F0A8360 00000000 */ nop -.L7F0A8364: -/* 0DCE94 7F0A8364 8FBF001C */ lw $ra, 0x1c($sp) -/* 0DCE98 7F0A8368 02001025 */ move $v0, $s0 -/* 0DCE9C 7F0A836C 8FB00018 */ lw $s0, 0x18($sp) -/* 0DCEA0 7F0A8370 03E00008 */ jr $ra -/* 0DCEA4 7F0A8374 27BD0020 */ addiu $sp, $sp, 0x20 -) -#endif - - -#ifdef NONMATCHING void sub_GAME_7F0A8378(void) { - s32 sp1C; - - if ((get_controller_buttons_pressed(0, 0xa000) == 0) && (get_controller_buttons_pressed(0, 0x1000) != 0)) - { - sp1C = get_item_in_hand(0); - if (get_weaponnum_by_inv_index(D_800409B8) != sp1C) + if (get_controller_buttons_pressed('\0', 0xa000) == 0) { + if (get_controller_buttons_pressed('\0', START_BUTTON) == 0) { - remove_hands_item(0, get_weaponnum_by_inv_index(D_800409B8)); - remove_hands_item(1, 0); - set_BONDdata_equipcuritem(D_800409B8); - D_800409C4 = 0xa; - play_sfx_a1(ptr_sfx_buf, 0x9f, 0); + return; + } + + if (get_item_in_hand(0) == get_weaponnum_by_inv_index(D_800409B8)) + { + return; } } - else - { - } + remove_hands_item(0, get_weaponnum_by_inv_index(D_800409B8)); + remove_hands_item(1, 0); + set_BONDdata_equipcuritem(D_800409B8); + D_800409C4 = 10; + play_sfx_a1(ptr_sfx_buf, 0x9F, 0); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A8378 -/* 0DCEA8 7F0A8378 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0DCEAC 7F0A837C AFBF0014 */ sw $ra, 0x14($sp) -/* 0DCEB0 7F0A8380 00002025 */ move $a0, $zero -/* 0DCEB4 7F0A8384 0C0030EB */ jal get_controller_buttons_pressed -/* 0DCEB8 7F0A8388 3405A000 */ li $a1, 40960 -/* 0DCEBC 7F0A838C 1440000D */ bnez $v0, .L7F0A83C4 -/* 0DCEC0 7F0A8390 00002025 */ move $a0, $zero -/* 0DCEC4 7F0A8394 0C0030EB */ jal get_controller_buttons_pressed -/* 0DCEC8 7F0A8398 24051000 */ li $a1, 4096 -/* 0DCECC 7F0A839C 5040001E */ beql $v0, $zero, .L7F0A8418 -/* 0DCED0 7F0A83A0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DCED4 7F0A83A4 0FC17674 */ jal get_item_in_hand -/* 0DCED8 7F0A83A8 00002025 */ move $a0, $zero -/* 0DCEDC 7F0A83AC 3C048004 */ lui $a0, %hi(D_800409B8) -/* 0DCEE0 7F0A83B0 8C8409B8 */ lw $a0, %lo(D_800409B8)($a0) -/* 0DCEE4 7F0A83B4 0FC234AA */ jal get_weaponnum_by_inv_index -/* 0DCEE8 7F0A83B8 AFA2001C */ sw $v0, 0x1c($sp) -/* 0DCEEC 7F0A83BC 8FAE001C */ lw $t6, 0x1c($sp) -/* 0DCEF0 7F0A83C0 104E0014 */ beq $v0, $t6, .L7F0A8414 -.L7F0A83C4: -/* 0DCEF4 7F0A83C4 3C048004 */ lui $a0, %hi(D_800409B8) -/* 0DCEF8 7F0A83C8 0FC234AA */ jal get_weaponnum_by_inv_index -/* 0DCEFC 7F0A83CC 8C8409B8 */ lw $a0, %lo(D_800409B8)($a0) -/* 0DCF00 7F0A83D0 00002025 */ move $a0, $zero -/* 0DCF04 7F0A83D4 0FC176D5 */ jal remove_hands_item -/* 0DCF08 7F0A83D8 00402825 */ move $a1, $v0 -/* 0DCF0C 7F0A83DC 24040001 */ li $a0, 1 -/* 0DCF10 7F0A83E0 0FC176D5 */ jal remove_hands_item -/* 0DCF14 7F0A83E4 00002825 */ move $a1, $zero -/* 0DCF18 7F0A83E8 3C048004 */ lui $a0, %hi(D_800409B8) -/* 0DCF1C 7F0A83EC 0FC23634 */ jal set_BONDdata_equipcuritem -/* 0DCF20 7F0A83F0 8C8409B8 */ lw $a0, %lo(D_800409B8)($a0) -/* 0DCF24 7F0A83F4 240F000A */ li $t7, 10 -/* 0DCF28 7F0A83F8 3C018004 */ lui $at, %hi(D_800409C4) -/* 0DCF2C 7F0A83FC 3C048006 */ lui $a0, %hi(ptr_sfx_buf) -/* 0DCF30 7F0A8400 AC2F09C4 */ sw $t7, %lo(D_800409C4)($at) -/* 0DCF34 7F0A8404 8C843720 */ lw $a0, %lo(ptr_sfx_buf)($a0) -/* 0DCF38 7F0A8408 2405009F */ li $a1, 159 -/* 0DCF3C 7F0A840C 0C002382 */ jal play_sfx_a1 -/* 0DCF40 7F0A8410 00003025 */ move $a2, $zero -.L7F0A8414: -/* 0DCF44 7F0A8414 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A8418: -/* 0DCF48 7F0A8418 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0DCF4C 7F0A841C 03E00008 */ jr $ra -/* 0DCF50 7F0A8420 00000000 */ nop -) -#endif - - - #ifdef NONMATCHING @@ -5104,7 +4291,7 @@ glabel debug_gun_watch_move_related2 /* 0DCF54 7F0A8424 27BDF6D8 */ addiu $sp, $sp, -0x928 /* 0DCF58 7F0A8428 AFBF003C */ sw $ra, 0x3c($sp) /* 0DCF5C 7F0A842C AFB00038 */ sw $s0, 0x38($sp) -/* 0DCF60 7F0A8430 0FC29C53 */ jal sub_GAME_7F0A714C +/* 0DCF60 7F0A8430 0FC29C53 */ jal draw_background_health_and_armor /* 0DCF64 7F0A8434 00003025 */ move $a2, $zero /* 0DCF68 7F0A8438 0FC1F97F */ jal check_watch_page_transistion_running /* 0DCF6C 7F0A843C AFA20928 */ sw $v0, 0x928($sp) @@ -5288,7 +4475,7 @@ glabel debug_gun_watch_move_related2 /* 0DD218 7F0A86E8 44075000 */ mfc1 $a3, $f10 /* 0DD21C 7F0A86EC E7A20024 */ swc1 $f2, 0x24($sp) /* 0DD220 7F0A86F0 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0DD224 7F0A86F4 0FC165A5 */ jal sub_GAME_7F059694 +/* 0DD224 7F0A86F4 0FC165A5 */ jal matrix_4x4_7F059694 /* 0DD228 7F0A86F8 E7B00020 */ swc1 $f16, 0x20($sp) /* 0DD22C 7F0A86FC 02002025 */ move $a0, $s0 /* 0DD230 7F0A8700 0FC1601A */ jal matrix_4x4_multiply_in_place @@ -5587,7 +4774,7 @@ glabel debug_gun_watch_move_related2 /* 0DDB2C 7F0A8FBC 27BDF6D0 */ addiu $sp, $sp, -0x930 /* 0DDB30 7F0A8FC0 AFBF003C */ sw $ra, 0x3c($sp) /* 0DDB34 7F0A8FC4 AFB00038 */ sw $s0, 0x38($sp) -/* 0DDB38 7F0A8FC8 0FC29F39 */ jal sub_GAME_7F0A714C +/* 0DDB38 7F0A8FC8 0FC29F39 */ jal draw_background_health_and_armor /* 0DDB3C 7F0A8FCC 00003025 */ move $a2, $zero /* 0DDB40 7F0A8FD0 0FC1FB08 */ jal check_watch_page_transistion_running /* 0DDB44 7F0A8FD4 AFA20930 */ sw $v0, 0x930($sp) @@ -5771,7 +4958,7 @@ glabel debug_gun_watch_move_related2 /* 0DDDF0 7F0A9280 44075000 */ mfc1 $a3, $f10 /* 0DDDF4 7F0A9284 E7A20024 */ swc1 $f2, 0x24($sp) /* 0DDDF8 7F0A9288 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0DDDFC 7F0A928C 0FC166ED */ jal sub_GAME_7F059694 +/* 0DDDFC 7F0A928C 0FC166ED */ jal matrix_4x4_7F059694 /* 0DDE00 7F0A9290 E7B00020 */ swc1 $f16, 0x20($sp) /* 0DDE04 7F0A9294 02002025 */ move $a0, $s0 /* 0DDE08 7F0A9298 0FC16162 */ jal matrix_4x4_multiply_in_place @@ -6106,7 +5293,7 @@ glabel sub_GAME_7F0A8B10 /* 0DD680 7F0A8B50 AFA20048 */ sw $v0, 0x48($sp) /* 0DD684 7F0A8B54 02002025 */ move $a0, $s0 /* 0DD688 7F0A8B58 8FA5007C */ lw $a1, 0x7c($sp) -/* 0DD68C 7F0A8B5C 0FC29C53 */ jal sub_GAME_7F0A714C +/* 0DD68C 7F0A8B5C 0FC29C53 */ jal draw_background_health_and_armor /* 0DD690 7F0A8B60 00003025 */ move $a2, $zero /* 0DD694 7F0A8B64 0FC1F97F */ jal check_watch_page_transistion_running /* 0DD698 7F0A8B68 00408025 */ move $s0, $v0 @@ -6480,10 +5667,10 @@ glabel sub_GAME_7F0A8FEC /* 0DDB3C 7F0A900C 3C0E8004 */ lui $t6, %hi(watch_soundrelated_maybe) /* 0DDB40 7F0A9010 8DCE09A8 */ lw $t6, %lo(watch_soundrelated_maybe)($t6) /* 0DDB44 7F0A9014 A7A20046 */ sh $v0, 0x46($sp) -/* 0DDB48 7F0A9018 3C0F8004 */ lui $t7, %hi(D_8004099C) +/* 0DDB48 7F0A9018 3C0F8004 */ lui $t7, %hi(game_options_index) /* 0DDB4C 7F0A901C 51C00008 */ beql $t6, $zero, .L7F0A9040 /* 0DDB50 7F0A9020 97B80046 */ lhu $t8, 0x46($sp) -/* 0DDB54 7F0A9024 8DEF099C */ lw $t7, %lo(D_8004099C)($t7) +/* 0DDB54 7F0A9024 8DEF099C */ lw $t7, %lo(game_options_index)($t7) /* 0DDB58 7F0A9028 24010001 */ li $at, 1 /* 0DDB5C 7F0A902C 55E10004 */ bnel $t7, $at, .L7F0A9040 /* 0DDB60 7F0A9030 97B80046 */ lhu $t8, 0x46($sp) @@ -6576,22 +5763,16 @@ glabel sub_GAME_7F0A8FEC #endif - - - void call_sfx_c_700091C8(void) { sfx_c_700091C8(); } - - - - #ifdef NONMATCHING +//TODO: Use t6 instead of a1 void sub_GAME_7F0A91A0(u16 arg0) { - sfx_c_700091E8(0xffff & arg0); + sfx_c_700091E8(arg0); } #else GLOBAL_ASM( @@ -6631,15 +5812,15 @@ glabel sub_GAME_7F0A91C8 /* 0DDD04 7F0A91D4 AFBF002C */ sw $ra, 0x2c($sp) /* 0DDD08 7F0A91D8 0FC2F5B1 */ jal sub_GAME_7F0BD6C4 /* 0DDD0C 7F0A91DC 2404000C */ li $a0, 12 -/* 0DDD10 7F0A91E0 0FC2A4D6 */ jal sub_GAME_7F0A9358 +/* 0DDD10 7F0A91E0 0FC2A4D6 */ jal get_mTrack2Vol /* 0DDD14 7F0A91E4 AFA2003C */ sw $v0, 0x3c($sp) /* 0DDD18 7F0A91E8 3C0E8004 */ lui $t6, %hi(watch_soundrelated_maybe) /* 0DDD1C 7F0A91EC 8DCE09A8 */ lw $t6, %lo(watch_soundrelated_maybe)($t6) /* 0DDD20 7F0A91F0 A7A20046 */ sh $v0, 0x46($sp) -/* 0DDD24 7F0A91F4 3C0F8004 */ lui $t7, %hi(D_8004099C) +/* 0DDD24 7F0A91F4 3C0F8004 */ lui $t7, %hi(game_options_index) /* 0DDD28 7F0A91F8 51C00007 */ beql $t6, $zero, .L7F0A9218 /* 0DDD2C 7F0A91FC 97B80046 */ lhu $t8, 0x46($sp) -/* 0DDD30 7F0A9200 8DEF099C */ lw $t7, %lo(D_8004099C)($t7) +/* 0DDD30 7F0A9200 8DEF099C */ lw $t7, %lo(game_options_index)($t7) /* 0DDD34 7F0A9204 55E00004 */ bnezl $t7, .L7F0A9218 /* 0DDD38 7F0A9208 97B80046 */ lhu $t8, 0x46($sp) /* 0DDD3C 7F0A920C 0FC2A3B4 */ jal sub_GAME_7F0A8ED0 @@ -6658,7 +5839,7 @@ glabel sub_GAME_7F0A91C8 /* 0DDD68 7F0A9238 C42A853C */ lwc1 $f10, %lo(D_8005853C)($at) /* 0DDD6C 7F0A923C 03002025 */ move $a0, $t8 /* 0DDD70 7F0A9240 460A3403 */ div.s $f16, $f6, $f10 -/* 0DDD74 7F0A9244 0FC2A4D9 */ jal sub_GAME_7F0A9364 +/* 0DDD74 7F0A9244 0FC2A4D9 */ jal set_mTrack2Vol /* 0DDD78 7F0A9248 E7B00040 */ swc1 $f16, 0x40($sp) /* 0DDD7C 7F0A924C 02001025 */ move $v0, $s0 /* 0DDD80 7F0A9250 3C19B900 */ lui $t9, (0xB900031D >> 16) # lui $t9, 0xb900 @@ -6731,43 +5912,16 @@ glabel sub_GAME_7F0A91C8 #endif -u16 sub_GAME_7F0A9358(void) +u16 get_mTrack2Vol(void) { return mTrack2Vol; } - - -#ifdef NONMATCHING -void sub_GAME_7F0A9364(s16 param_1) - +void set_mTrack2Vol(u16 param_1) { mTrack2Vol = param_1; - musicTrack2Vol(param_1); - return; + musicTrack2Vol(mTrack2Vol); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A9364 -/* 0DDE94 7F0A9364 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DDE98 7F0A9368 3C028004 */ lui $v0, %hi(mTrack2Vol) -/* 0DDE9C 7F0A936C 24420B58 */ addiu $v0, %lo(mTrack2Vol) # addiu $v0, $v0, 0xb58 -/* 0DDEA0 7F0A9370 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DDEA4 7F0A9374 AFA40018 */ sw $a0, 0x18($sp) -/* 0DDEA8 7F0A9378 00802825 */ move $a1, $a0 -/* 0DDEAC 7F0A937C A4450000 */ sh $a1, ($v0) -/* 0DDEB0 7F0A9380 0C001CF1 */ jal musicTrack2Vol -/* 0DDEB4 7F0A9384 30A4FFFF */ andi $a0, $a1, 0xffff -/* 0DDEB8 7F0A9388 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DDEBC 7F0A938C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DDEC0 7F0A9390 03E00008 */ jr $ra -/* 0DDEC4 7F0A9394 00000000 */ nop -) -#endif - - - #ifdef NONMATCHING @@ -6930,101 +6084,31 @@ glabel sub_GAME_7F0A9398 - - -#ifdef NONMATCHING -f32 sub_GAME_7F0A95C4(f32 param_1,f32 param_2,f32 param_3) +f32 sub_GAME_7F0A95C4(f32 param_1, f32 param_2, f32 param_3) { if (param_1 < param_2) { - return param_1 + (param_2 - param_1) / param_3; + param_1 += (param_2 - param_1) / param_3; + } else if (param_2 < param_1) { + param_1 -= (param_1 - param_2) / param_3; } - if (param_2 < param_1) { - return param_1 - (param_1 - param_2) / param_3; + + return param_1; +} + + +s32 sub_GAME_7F0A9610(void) { + + if ((D_80040B24 < 0.1f) && + (D_80040B24 > -0.1f) && + (D_80040B20 < 0.1f) && + (D_80040B20 > -0.1f)) + { + + return 1; + } + return 0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A95C4 -/* 0DE0F4 7F0A95C4 460E603C */ c.lt.s $f12, $f14 -/* 0DE0F8 7F0A95C8 AFA60008 */ sw $a2, 8($sp) -/* 0DE0FC 7F0A95CC 45020007 */ bc1fl .L7F0A95EC -/* 0DE100 7F0A95D0 460C703C */ c.lt.s $f14, $f12 -/* 0DE104 7F0A95D4 460C7101 */ sub.s $f4, $f14, $f12 -/* 0DE108 7F0A95D8 C7A60008 */ lwc1 $f6, 8($sp) -/* 0DE10C 7F0A95DC 46062203 */ div.s $f8, $f4, $f6 -/* 0DE110 7F0A95E0 03E00008 */ jr $ra -/* 0DE114 7F0A95E4 46086000 */ add.s $f0, $f12, $f8 - -/* 0DE118 7F0A95E8 460C703C */ c.lt.s $f14, $f12 -.L7F0A95EC: -/* 0DE11C 7F0A95EC 00000000 */ nop -/* 0DE120 7F0A95F0 45000005 */ bc1f .L7F0A9608 -/* 0DE124 7F0A95F4 00000000 */ nop -/* 0DE128 7F0A95F8 460E6281 */ sub.s $f10, $f12, $f14 -/* 0DE12C 7F0A95FC C7B00008 */ lwc1 $f16, 8($sp) -/* 0DE130 7F0A9600 46105483 */ div.s $f18, $f10, $f16 -/* 0DE134 7F0A9604 46126301 */ sub.s $f12, $f12, $f18 -.L7F0A9608: -/* 0DE138 7F0A9608 03E00008 */ jr $ra -/* 0DE13C 7F0A960C 46006006 */ mov.s $f0, $f12 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A9610(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80058540 -.word 0x3dcccccd /*0.1*/ -glabel D_80058544 -.word 0xbdcccccd /*-0.1*/ -.text -glabel sub_GAME_7F0A9610 -/* 0DE140 7F0A9610 3C018006 */ lui $at, %hi(D_80058540) -/* 0DE144 7F0A9614 C4228540 */ lwc1 $f2, %lo(D_80058540)($at) -/* 0DE148 7F0A9618 3C018004 */ lui $at, %hi(D_80040B24) -/* 0DE14C 7F0A961C C4200B24 */ lwc1 $f0, %lo(D_80040B24)($at) -/* 0DE150 7F0A9620 3C018006 */ lui $at, %hi(D_80058544) -/* 0DE154 7F0A9624 00001025 */ move $v0, $zero -/* 0DE158 7F0A9628 4602003C */ c.lt.s $f0, $f2 -/* 0DE15C 7F0A962C 00000000 */ nop -/* 0DE160 7F0A9630 45000012 */ bc1f .L7F0A967C -/* 0DE164 7F0A9634 00000000 */ nop -/* 0DE168 7F0A9638 C42C8544 */ lwc1 $f12, %lo(D_80058544)($at) -/* 0DE16C 7F0A963C 3C018004 */ lui $at, %hi(D_80040B20) -/* 0DE170 7F0A9640 4600603C */ c.lt.s $f12, $f0 -/* 0DE174 7F0A9644 00000000 */ nop -/* 0DE178 7F0A9648 4500000C */ bc1f .L7F0A967C -/* 0DE17C 7F0A964C 00000000 */ nop -/* 0DE180 7F0A9650 C4200B20 */ lwc1 $f0, %lo(D_80040B20)($at) -/* 0DE184 7F0A9654 4602003C */ c.lt.s $f0, $f2 -/* 0DE188 7F0A9658 00000000 */ nop -/* 0DE18C 7F0A965C 45000007 */ bc1f .L7F0A967C -/* 0DE190 7F0A9660 00000000 */ nop -/* 0DE194 7F0A9664 4600603C */ c.lt.s $f12, $f0 -/* 0DE198 7F0A9668 00000000 */ nop -/* 0DE19C 7F0A966C 45000003 */ bc1f .L7F0A967C -/* 0DE1A0 7F0A9670 00000000 */ nop -/* 0DE1A4 7F0A9674 03E00008 */ jr $ra -/* 0DE1A8 7F0A9678 24020001 */ li $v0, 1 - -.L7F0A967C: -/* 0DE1AC 7F0A967C 03E00008 */ jr $ra -/* 0DE1B0 7F0A9680 00000000 */ nop -) -#endif - - - - #ifdef NONMATCHING void sub_GAME_7F0A9684(void) { @@ -7059,10 +6143,10 @@ glabel sub_GAME_7F0A9684 .L7F0A96C8: /* 0DE1F8 7F0A96C8 3C0E8004 */ lui $t6, %hi(watch_soundrelated_maybe) /* 0DE1FC 7F0A96CC 8DCE09A8 */ lw $t6, %lo(watch_soundrelated_maybe)($t6) -/* 0DE200 7F0A96D0 3C0F8004 */ lui $t7, %hi(D_80040998) +/* 0DE200 7F0A96D0 3C0F8004 */ lui $t7, %hi(controller_options_index) /* 0DE204 7F0A96D4 51C00007 */ beql $t6, $zero, .L7F0A96F4 /* 0DE208 7F0A96D8 8CA20000 */ lw $v0, ($a1) -/* 0DE20C 7F0A96DC 8DEF0998 */ lw $t7, %lo(D_80040998)($t7) +/* 0DE20C 7F0A96DC 8DEF0998 */ lw $t7, %lo(controller_options_index)($t7) /* 0DE210 7F0A96E0 24010001 */ li $at, 1 /* 0DE214 7F0A96E4 00001025 */ move $v0, $zero /* 0DE218 7F0A96E8 51E10009 */ beql $t7, $at, .L7F0A9710 @@ -7096,10 +6180,10 @@ glabel sub_GAME_7F0A9684 /* 0DE27C 7F0A974C E5200000 */ swc1 $f0, ($t1) .L7F0A9750: /* 0DE280 7F0A9750 8D4A09A8 */ lw $t2, %lo(watch_soundrelated_maybe)($t2) -/* 0DE284 7F0A9754 3C0B8004 */ lui $t3, %hi(D_80040998) +/* 0DE284 7F0A9754 3C0B8004 */ lui $t3, %hi(controller_options_index) /* 0DE288 7F0A9758 5140001A */ beql $t2, $zero, .L7F0A97C4 /* 0DE28C 7F0A975C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DE290 7F0A9760 8D6B0998 */ lw $t3, %lo(D_80040998)($t3) +/* 0DE290 7F0A9760 8D6B0998 */ lw $t3, %lo(controller_options_index)($t3) /* 0DE294 7F0A9764 24010001 */ li $at, 1 /* 0DE298 7F0A9768 55610016 */ bnel $t3, $at, .L7F0A97C4 /* 0DE29C 7F0A976C 8FBF0014 */ lw $ra, 0x14($sp) @@ -7180,10 +6264,10 @@ glabel sub_GAME_7F0A97D0 .L7F0A9850: /* 0DE380 7F0A9850 3C188004 */ lui $t8, %hi(watch_soundrelated_maybe) /* 0DE384 7F0A9854 8F1809A8 */ lw $t8, %lo(watch_soundrelated_maybe)($t8) -/* 0DE388 7F0A9858 3C198004 */ lui $t9, %hi(D_80040998) +/* 0DE388 7F0A9858 3C198004 */ lui $t9, %hi(controller_options_index) /* 0DE38C 7F0A985C 13000019 */ beqz $t8, .L7F0A98C4 /* 0DE390 7F0A9860 00000000 */ nop -/* 0DE394 7F0A9864 8F390998 */ lw $t9, %lo(D_80040998)($t9) +/* 0DE394 7F0A9864 8F390998 */ lw $t9, %lo(controller_options_index)($t9) /* 0DE398 7F0A9868 3C118005 */ lui $s1, %hi(j_text_trigger) /* 0DE39C 7F0A986C 263184D0 */ addiu $s1, %lo(j_text_trigger) # addiu $s1, $s1, -0x7b30 /* 0DE3A0 7F0A9870 17200014 */ bnez $t9, .L7F0A98C4 @@ -7361,8 +6445,8 @@ void sub_GAME_7F0A9AB8(void) { GLOBAL_ASM( .text glabel sub_GAME_7F0A9AB8 -/* 0DE5E8 7F0A9AB8 3C0E8004 */ lui $t6, %hi(cur_player_look_vertical_inverted) -/* 0DE5EC 7F0A9ABC 8DCE0A84 */ lw $t6, %lo(cur_player_look_vertical_inverted)($t6) +/* 0DE5E8 7F0A9AB8 3C0E8004 */ lui $t6, %hi(game_options_entries) +/* 0DE5EC 7F0A9ABC 8DCE0A84 */ lw $t6, %lo(game_options_entries + 0x8)($t6) /* 0DE5F0 7F0A9AC0 27BDFF50 */ addiu $sp, $sp, -0xb0 /* 0DE5F4 7F0A9AC4 AFB00038 */ sw $s0, 0x38($sp) /* 0DE5F8 7F0A9AC8 24010001 */ li $at, 1 @@ -7529,8 +6613,8 @@ glabel sub_GAME_7F0A9AB8 /* 0DE870 7F0A9D40 AFA00028 */ sw $zero, 0x28($sp) /* 0DE874 7F0A9D44 00408025 */ move $s0, $v0 .L7F0A9D48: -/* 0DE878 7F0A9D48 3C098004 */ lui $t1, %hi(D_80040998) -/* 0DE87C 7F0A9D4C 8D290998 */ lw $t1, %lo(D_80040998)($t1) +/* 0DE878 7F0A9D48 3C098004 */ lui $t1, %hi(controller_options_index) +/* 0DE87C 7F0A9D4C 8D290998 */ lw $t1, %lo(controller_options_index)($t1) /* 0DE880 7F0A9D50 2418006B */ li $t8, 107 /* 0DE884 7F0A9D54 24010001 */ li $at, 1 /* 0DE888 7F0A9D58 1521000A */ bne $t1, $at, .L7F0A9D84 @@ -7861,8 +6945,8 @@ glabel sub_GAME_7F0A9AB8 .L7F0AA234: /* 0DED64 7F0AA234 8FA9004C */ lw $t1, 0x4c($sp) .L7F0AA238: -/* 0DED68 7F0AA238 3C0B8004 */ lui $t3, %hi(D_80040998) -/* 0DED6C 7F0AA23C 8D6B0998 */ lw $t3, %lo(D_80040998)($t3) +/* 0DED68 7F0AA238 3C0B8004 */ lui $t3, %hi(controller_options_index) +/* 0DED6C 7F0AA23C 8D6B0998 */ lw $t3, %lo(controller_options_index)($t3) /* 0DED70 7F0AA240 24010001 */ li $at, 1 /* 0DED74 7F0AA244 252A0019 */ addiu $t2, $t1, 0x19 /* 0DED78 7F0AA248 1561000A */ bne $t3, $at, .L7F0AA274 @@ -8238,512 +7322,107 @@ glabel sub_GAME_7F0A9AB8 #endif - - - -#ifdef NONMATCHING -void sub_GAME_7F0AA7C8(u32 * displayList) +s32 display_text_buttons_dual_control(s32 param_1) { - u32 * DL; - u8 * txtptr; - - DL = microcode_constructor(displayList); - if (get_controller_buttons_held('\0',A_BUTTON) != 0) + s32 textptr_aux; + + param_1 = microcode_constructor(param_1); + + if (get_controller_buttons_held(0, A_BUTTON)) { - sub_GAME_7F0A9398(DL, 0x5a, 0xa7, get_textptr_for_textID(0xac03), -1, 1, 0x7000a0, 0, 0, 0x3000b0, 0); - } else { - sub_GAME_7F0A9398(DL, 0x5a, 0xa7, get_textptr_for_textID(0xac03), 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 0); + param_1 = sub_GAME_7F0A9398(param_1, 0x5A, 0xA7, get_textptr_for_textID(0xAC03), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); } - - if (get_controller_buttons_held('\0',B_BUTTON) != 0) + else { - sub_GAME_7F0A9398(DL, 0x5a, 0x95, get_textptr_for_textID(0xac02), -1, 1, 0x7000a0, 0, 0, 0x3000b0, 0); - } else { - sub_GAME_7F0A9398(DL, 0x5a, 0x95, get_textptr_for_textID(0xac02), 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 0); + param_1 = sub_GAME_7F0A9398(param_1, 0x5A, 0xA7, get_textptr_for_textID(0xAC03), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + } + + if (get_controller_buttons_held(0, B_BUTTON)) + { + param_1 = sub_GAME_7F0A9398(param_1, 0x5A, 0x95, get_textptr_for_textID(0xAC02), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); + } + else + { + param_1 = sub_GAME_7F0A9398(param_1, 0x5A, 0x95, get_textptr_for_textID(0xAC02), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); } - - if ((pPlayer->cur_player_control_type_0 == 4) || (pPlayer->cur_player_control_type_0 == 5)) { - txtptr = get_textptr_for_textID(0xac00); - } else { - txtptr = get_textptr_for_textID(0xac01); + textptr_aux = get_textptr_for_textID(0xAC00); } - - if (get_controller_buttons_held('\0',Z_TRIG) != 0) + else { - sub_GAME_7F0A9398(DL, 0x5a, 0xb9, txtptr, -1, 1, 0x7000a0, 0, 0, 0x3000b0, 0); - } else { - sub_GAME_7F0A9398(DL, 0x5a, 0xb9, txtptr, 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 0); + textptr_aux = get_textptr_for_textID(0xAC01); } - - - + + if (get_controller_buttons_held(0, Z_TRIG)) + { + param_1 = sub_GAME_7F0A9398(param_1, 0x5A, 0xB9, textptr_aux, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); + } + else + { + param_1 = sub_GAME_7F0A9398(param_1, 0x5A, 0xB9, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + } + if ((pPlayer->cur_player_control_type_0 == 4) || (pPlayer->cur_player_control_type_0 == 6)) { - txtptr = get_textptr_for_textID(0xac05); - } else { - txtptr = get_textptr_for_textID(0xac06); + textptr_aux = get_textptr_for_textID(0xAC05); } - - sub_GAME_7F0A9398(DL, 0x5a, 0xcb, txtptr, 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 0); - if (get_controller_buttons_held('\x01',A_BUTTON) != 0) + else { - sub_GAME_7F0A9398(DL, 0xe6, 0xa7, get_textptr_for_textID(0xac03), -1, 1, 0x7000a0, 0, 0, 0x3000b0, 1); - } else { - sub_GAME_7F0A9398(DL, 0xe6, 0xa7, get_textptr_for_textID(0xac03), 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 1); + textptr_aux = get_textptr_for_textID(0xAC06); } - - if (get_controller_buttons_held('\x01',B_BUTTON) != 0) + + param_1 = sub_GAME_7F0A9398(param_1, 0x5A, 0xCB, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + + if (get_controller_buttons_held(1, A_BUTTON)) { - sub_GAME_7F0A9398(DL, 0xe6, 0x95, get_textptr_for_textID(0xac02), -1, 1, 0x7000a0, 0, 0, 0x3000b0, 1); - } else { - sub_GAME_7F0A9398(DL, 0xe6, 0x95, get_textptr_for_textID(0xac02), 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 1); + param_1 = sub_GAME_7F0A9398(param_1, 0xE6, 0xA7, get_textptr_for_textID(0xAC03), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); } - - - + else + { + param_1 = sub_GAME_7F0A9398(param_1, 0xE6, 0xA7, get_textptr_for_textID(0xAC03), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + + if (get_controller_buttons_held(1, B_BUTTON)) + { + param_1 = sub_GAME_7F0A9398(param_1, 0xE6, 0x95, get_textptr_for_textID(0xAC02), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + } + else + { + param_1 = sub_GAME_7F0A9398(param_1, 0xE6, 0x95, get_textptr_for_textID(0xAC02), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + if ((pPlayer->cur_player_control_type_0 == 4) || (pPlayer->cur_player_control_type_0 == 5)) { - txtptr = get_textptr_for_textID(0xac01); - } else { - txtptr = get_textptr_for_textID(0xac00); + textptr_aux = get_textptr_for_textID(0xAC01); } - - if (get_controller_buttons_held('\x01',Z_TRIG) != 0) + else { - sub_GAME_7F0A9398(DL, 0xe6, 0xb9, txtptr, -1, 1, 0x7000a0, 0, 0, 0x3000b0, 1); - } else { - sub_GAME_7F0A9398(DL, 0xe6, 0xb9, txtptr, 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 1); + textptr_aux = get_textptr_for_textID(0xAC00); + } + + if (get_controller_buttons_held(1, Z_TRIG)) + { + param_1 = sub_GAME_7F0A9398(param_1, 0xE6, 0xB9, textptr_aux, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + } + else + { + param_1 = sub_GAME_7F0A9398(param_1, 0xE6, 0xB9, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); } - - if ((pPlayer->cur_player_control_type_0 == 4) || (pPlayer->cur_player_control_type_0 == 6)) { - txtptr = get_textptr_for_textID(0xac06); - } else { - txtptr = get_textptr_for_textID(0xac05); + textptr_aux = get_textptr_for_textID(0xAC06); } - - sub_GAME_7F0A9398(DL, 0xe6, 0xcb, txtptr, 0xaa00b0, 0, -1, 0, 0, 0x3000b0, 1); + else + { + textptr_aux = get_textptr_for_textID(0xAC05); + } + + param_1 = sub_GAME_7F0A9398(param_1, 0xE6, 0xCB, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + return param_1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AA7C8 -/* 0DF2F8 7F0AA7C8 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0DF2FC 7F0AA7CC AFBF003C */ sw $ra, 0x3c($sp) -/* 0DF300 7F0AA7D0 0FC2B366 */ jal microcode_constructor -/* 0DF304 7F0AA7D4 AFB00038 */ sw $s0, 0x38($sp) -/* 0DF308 7F0AA7D8 00408025 */ move $s0, $v0 -/* 0DF30C 7F0AA7DC 00002025 */ move $a0, $zero -/* 0DF310 7F0AA7E0 0C0030C3 */ jal get_controller_buttons_held -/* 0DF314 7F0AA7E4 34058000 */ li $a1, 32768 -/* 0DF318 7F0AA7E8 10400017 */ beqz $v0, .L7F0AA848 -/* 0DF31C 7F0AA7EC 00000000 */ nop -/* 0DF320 7F0AA7F0 0FC30776 */ jal get_textptr_for_textID -/* 0DF324 7F0AA7F4 3404AC03 */ li $a0, 44035 -/* 0DF328 7F0AA7F8 3C180070 */ lui $t8, (0x007000A0 >> 16) # lui $t8, 0x70 -/* 0DF32C 7F0AA7FC 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DF330 7F0AA800 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DF334 7F0AA804 371800A0 */ ori $t8, (0x007000A0 & 0xFFFF) # ori $t8, $t8, 0xa0 -/* 0DF338 7F0AA808 240EFFFF */ li $t6, -1 -/* 0DF33C 7F0AA80C 240F0001 */ li $t7, 1 -/* 0DF340 7F0AA810 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DF344 7F0AA814 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DF348 7F0AA818 AFB80018 */ sw $t8, 0x18($sp) -/* 0DF34C 7F0AA81C AFB90024 */ sw $t9, 0x24($sp) -/* 0DF350 7F0AA820 02002025 */ move $a0, $s0 -/* 0DF354 7F0AA824 2405005A */ li $a1, 90 -/* 0DF358 7F0AA828 240600A7 */ li $a2, 167 -/* 0DF35C 7F0AA82C 00403825 */ move $a3, $v0 -/* 0DF360 7F0AA830 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF364 7F0AA834 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF368 7F0AA838 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF36C 7F0AA83C AFA00028 */ sw $zero, 0x28($sp) -/* 0DF370 7F0AA840 10000015 */ b .L7F0AA898 -/* 0DF374 7F0AA844 00408025 */ move $s0, $v0 -.L7F0AA848: -/* 0DF378 7F0AA848 0FC30776 */ jal get_textptr_for_textID -/* 0DF37C 7F0AA84C 3404AC03 */ li $a0, 44035 -/* 0DF380 7F0AA850 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DF384 7F0AA854 3C0A0030 */ lui $t2, (0x003000B0 >> 16) # lui $t2, 0x30 -/* 0DF388 7F0AA858 354A00B0 */ ori $t2, (0x003000B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0DF38C 7F0AA85C 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DF390 7F0AA860 2409FFFF */ li $t1, -1 -/* 0DF394 7F0AA864 AFA90018 */ sw $t1, 0x18($sp) -/* 0DF398 7F0AA868 AFA80010 */ sw $t0, 0x10($sp) -/* 0DF39C 7F0AA86C AFAA0024 */ sw $t2, 0x24($sp) -/* 0DF3A0 7F0AA870 02002025 */ move $a0, $s0 -/* 0DF3A4 7F0AA874 2405005A */ li $a1, 90 -/* 0DF3A8 7F0AA878 240600A7 */ li $a2, 167 -/* 0DF3AC 7F0AA87C 00403825 */ move $a3, $v0 -/* 0DF3B0 7F0AA880 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF3B4 7F0AA884 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF3B8 7F0AA888 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF3BC 7F0AA88C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF3C0 7F0AA890 AFA00028 */ sw $zero, 0x28($sp) -/* 0DF3C4 7F0AA894 00408025 */ move $s0, $v0 -.L7F0AA898: -/* 0DF3C8 7F0AA898 00002025 */ move $a0, $zero -/* 0DF3CC 7F0AA89C 0C0030C3 */ jal get_controller_buttons_held -/* 0DF3D0 7F0AA8A0 24054000 */ li $a1, 16384 -/* 0DF3D4 7F0AA8A4 10400017 */ beqz $v0, .L7F0AA904 -/* 0DF3D8 7F0AA8A8 00000000 */ nop -/* 0DF3DC 7F0AA8AC 0FC30776 */ jal get_textptr_for_textID -/* 0DF3E0 7F0AA8B0 3404AC02 */ li $a0, 44034 -/* 0DF3E4 7F0AA8B4 3C0D0070 */ lui $t5, (0x007000A0 >> 16) # lui $t5, 0x70 -/* 0DF3E8 7F0AA8B8 3C0E0030 */ lui $t6, (0x003000B0 >> 16) # lui $t6, 0x30 -/* 0DF3EC 7F0AA8BC 35CE00B0 */ ori $t6, (0x003000B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DF3F0 7F0AA8C0 35AD00A0 */ ori $t5, (0x007000A0 & 0xFFFF) # ori $t5, $t5, 0xa0 -/* 0DF3F4 7F0AA8C4 240BFFFF */ li $t3, -1 -/* 0DF3F8 7F0AA8C8 240C0001 */ li $t4, 1 -/* 0DF3FC 7F0AA8CC AFAC0014 */ sw $t4, 0x14($sp) -/* 0DF400 7F0AA8D0 AFAB0010 */ sw $t3, 0x10($sp) -/* 0DF404 7F0AA8D4 AFAD0018 */ sw $t5, 0x18($sp) -/* 0DF408 7F0AA8D8 AFAE0024 */ sw $t6, 0x24($sp) -/* 0DF40C 7F0AA8DC 02002025 */ move $a0, $s0 -/* 0DF410 7F0AA8E0 2405005A */ li $a1, 90 -/* 0DF414 7F0AA8E4 24060095 */ li $a2, 149 -/* 0DF418 7F0AA8E8 00403825 */ move $a3, $v0 -/* 0DF41C 7F0AA8EC AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF420 7F0AA8F0 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF424 7F0AA8F4 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF428 7F0AA8F8 AFA00028 */ sw $zero, 0x28($sp) -/* 0DF42C 7F0AA8FC 10000015 */ b .L7F0AA954 -/* 0DF430 7F0AA900 00408025 */ move $s0, $v0 -.L7F0AA904: -/* 0DF434 7F0AA904 0FC30776 */ jal get_textptr_for_textID -/* 0DF438 7F0AA908 3404AC02 */ li $a0, 44034 -/* 0DF43C 7F0AA90C 3C0F00AA */ lui $t7, (0x00AA00B0 >> 16) # lui $t7, 0xaa -/* 0DF440 7F0AA910 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DF444 7F0AA914 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DF448 7F0AA918 35EF00B0 */ ori $t7, (0x00AA00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DF44C 7F0AA91C 2418FFFF */ li $t8, -1 -/* 0DF450 7F0AA920 AFB80018 */ sw $t8, 0x18($sp) -/* 0DF454 7F0AA924 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DF458 7F0AA928 AFB90024 */ sw $t9, 0x24($sp) -/* 0DF45C 7F0AA92C 02002025 */ move $a0, $s0 -/* 0DF460 7F0AA930 2405005A */ li $a1, 90 -/* 0DF464 7F0AA934 24060095 */ li $a2, 149 -/* 0DF468 7F0AA938 00403825 */ move $a3, $v0 -/* 0DF46C 7F0AA93C AFA00014 */ sw $zero, 0x14($sp) -/* 0DF470 7F0AA940 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF474 7F0AA944 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF478 7F0AA948 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF47C 7F0AA94C AFA00028 */ sw $zero, 0x28($sp) -/* 0DF480 7F0AA950 00408025 */ move $s0, $v0 -.L7F0AA954: -/* 0DF484 7F0AA954 3C088008 */ lui $t0, %hi(pPlayer) -/* 0DF488 7F0AA958 8D08A0B0 */ lw $t0, %lo(pPlayer)($t0) -/* 0DF48C 7F0AA95C 24010004 */ li $at, 4 -/* 0DF490 7F0AA960 8D022A58 */ lw $v0, 0x2a58($t0) -/* 0DF494 7F0AA964 10410003 */ beq $v0, $at, .L7F0AA974 -/* 0DF498 7F0AA968 24010005 */ li $at, 5 -/* 0DF49C 7F0AA96C 14410005 */ bne $v0, $at, .L7F0AA984 -/* 0DF4A0 7F0AA970 00000000 */ nop -.L7F0AA974: -/* 0DF4A4 7F0AA974 0FC30776 */ jal get_textptr_for_textID -/* 0DF4A8 7F0AA978 3404AC00 */ li $a0, 44032 -/* 0DF4AC 7F0AA97C 10000004 */ b .L7F0AA990 -/* 0DF4B0 7F0AA980 00403825 */ move $a3, $v0 -.L7F0AA984: -/* 0DF4B4 7F0AA984 0FC30776 */ jal get_textptr_for_textID -/* 0DF4B8 7F0AA988 3404AC01 */ li $a0, 44033 -/* 0DF4BC 7F0AA98C 00403825 */ move $a3, $v0 -.L7F0AA990: -/* 0DF4C0 7F0AA990 00002025 */ move $a0, $zero -/* 0DF4C4 7F0AA994 24052000 */ li $a1, 8192 -/* 0DF4C8 7F0AA998 0C0030C3 */ jal get_controller_buttons_held -/* 0DF4CC 7F0AA99C AFA70044 */ sw $a3, 0x44($sp) -/* 0DF4D0 7F0AA9A0 10400014 */ beqz $v0, .L7F0AA9F4 -/* 0DF4D4 7F0AA9A4 8FA70044 */ lw $a3, 0x44($sp) -/* 0DF4D8 7F0AA9A8 3C0B0070 */ lui $t3, (0x007000A0 >> 16) # lui $t3, 0x70 -/* 0DF4DC 7F0AA9AC 3C0C0030 */ lui $t4, (0x003000B0 >> 16) # lui $t4, 0x30 -/* 0DF4E0 7F0AA9B0 358C00B0 */ ori $t4, (0x003000B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0DF4E4 7F0AA9B4 356B00A0 */ ori $t3, (0x007000A0 & 0xFFFF) # ori $t3, $t3, 0xa0 -/* 0DF4E8 7F0AA9B8 2409FFFF */ li $t1, -1 -/* 0DF4EC 7F0AA9BC 240A0001 */ li $t2, 1 -/* 0DF4F0 7F0AA9C0 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DF4F4 7F0AA9C4 AFA90010 */ sw $t1, 0x10($sp) -/* 0DF4F8 7F0AA9C8 AFAB0018 */ sw $t3, 0x18($sp) -/* 0DF4FC 7F0AA9CC AFAC0024 */ sw $t4, 0x24($sp) -/* 0DF500 7F0AA9D0 02002025 */ move $a0, $s0 -/* 0DF504 7F0AA9D4 2405005A */ li $a1, 90 -/* 0DF508 7F0AA9D8 240600B9 */ li $a2, 185 -/* 0DF50C 7F0AA9DC AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF510 7F0AA9E0 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF514 7F0AA9E4 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF518 7F0AA9E8 AFA00028 */ sw $zero, 0x28($sp) -/* 0DF51C 7F0AA9EC 10000012 */ b .L7F0AAA38 -/* 0DF520 7F0AA9F0 00408025 */ move $s0, $v0 -.L7F0AA9F4: -/* 0DF524 7F0AA9F4 3C0D00AA */ lui $t5, (0x00AA00B0 >> 16) # lui $t5, 0xaa -/* 0DF528 7F0AA9F8 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DF52C 7F0AA9FC 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DF530 7F0AAA00 35AD00B0 */ ori $t5, (0x00AA00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0DF534 7F0AAA04 240EFFFF */ li $t6, -1 -/* 0DF538 7F0AAA08 AFAE0018 */ sw $t6, 0x18($sp) -/* 0DF53C 7F0AAA0C AFAD0010 */ sw $t5, 0x10($sp) -/* 0DF540 7F0AAA10 AFAF0024 */ sw $t7, 0x24($sp) -/* 0DF544 7F0AAA14 02002025 */ move $a0, $s0 -/* 0DF548 7F0AAA18 2405005A */ li $a1, 90 -/* 0DF54C 7F0AAA1C 240600B9 */ li $a2, 185 -/* 0DF550 7F0AAA20 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF554 7F0AAA24 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF558 7F0AAA28 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF55C 7F0AAA2C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF560 7F0AAA30 AFA00028 */ sw $zero, 0x28($sp) -/* 0DF564 7F0AAA34 00408025 */ move $s0, $v0 -.L7F0AAA38: -/* 0DF568 7F0AAA38 3C188008 */ lui $t8, %hi(pPlayer) -/* 0DF56C 7F0AAA3C 8F18A0B0 */ lw $t8, %lo(pPlayer)($t8) -/* 0DF570 7F0AAA40 24010004 */ li $at, 4 -/* 0DF574 7F0AAA44 8F022A58 */ lw $v0, 0x2a58($t8) -/* 0DF578 7F0AAA48 10410003 */ beq $v0, $at, .L7F0AAA58 -/* 0DF57C 7F0AAA4C 24010006 */ li $at, 6 -/* 0DF580 7F0AAA50 14410005 */ bne $v0, $at, .L7F0AAA68 -/* 0DF584 7F0AAA54 00000000 */ nop -.L7F0AAA58: -/* 0DF588 7F0AAA58 0FC30776 */ jal get_textptr_for_textID -/* 0DF58C 7F0AAA5C 3404AC05 */ li $a0, 44037 -/* 0DF590 7F0AAA60 10000004 */ b .L7F0AAA74 -/* 0DF594 7F0AAA64 00403825 */ move $a3, $v0 -.L7F0AAA68: -/* 0DF598 7F0AAA68 0FC30776 */ jal get_textptr_for_textID -/* 0DF59C 7F0AAA6C 3404AC06 */ li $a0, 44038 -/* 0DF5A0 7F0AAA70 00403825 */ move $a3, $v0 -.L7F0AAA74: -/* 0DF5A4 7F0AAA74 3C1900AA */ lui $t9, (0x00AA00B0 >> 16) # lui $t9, 0xaa -/* 0DF5A8 7F0AAA78 3C090030 */ lui $t1, (0x003000B0 >> 16) # lui $t1, 0x30 -/* 0DF5AC 7F0AAA7C 352900B0 */ ori $t1, (0x003000B0 & 0xFFFF) # ori $t1, $t1, 0xb0 -/* 0DF5B0 7F0AAA80 373900B0 */ ori $t9, (0x00AA00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DF5B4 7F0AAA84 2408FFFF */ li $t0, -1 -/* 0DF5B8 7F0AAA88 AFA80018 */ sw $t0, 0x18($sp) -/* 0DF5BC 7F0AAA8C AFB90010 */ sw $t9, 0x10($sp) -/* 0DF5C0 7F0AAA90 AFA90024 */ sw $t1, 0x24($sp) -/* 0DF5C4 7F0AAA94 02002025 */ move $a0, $s0 -/* 0DF5C8 7F0AAA98 2405005A */ li $a1, 90 -/* 0DF5CC 7F0AAA9C 240600CB */ li $a2, 203 -/* 0DF5D0 7F0AAAA0 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF5D4 7F0AAAA4 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF5D8 7F0AAAA8 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF5DC 7F0AAAAC 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF5E0 7F0AAAB0 AFA00028 */ sw $zero, 0x28($sp) -/* 0DF5E4 7F0AAAB4 00408025 */ move $s0, $v0 -/* 0DF5E8 7F0AAAB8 24040001 */ li $a0, 1 -/* 0DF5EC 7F0AAABC 0C0030C3 */ jal get_controller_buttons_held -/* 0DF5F0 7F0AAAC0 34058000 */ li $a1, 32768 -/* 0DF5F4 7F0AAAC4 10400018 */ beqz $v0, .L7F0AAB28 -/* 0DF5F8 7F0AAAC8 00000000 */ nop -/* 0DF5FC 7F0AAACC 0FC30776 */ jal get_textptr_for_textID -/* 0DF600 7F0AAAD0 3404AC03 */ li $a0, 44035 -/* 0DF604 7F0AAAD4 3C0C0070 */ lui $t4, (0x007000A0 >> 16) # lui $t4, 0x70 -/* 0DF608 7F0AAAD8 3C0D0030 */ lui $t5, (0x003000B0 >> 16) # lui $t5, 0x30 -/* 0DF60C 7F0AAADC 35AD00B0 */ ori $t5, (0x003000B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0DF610 7F0AAAE0 358C00A0 */ ori $t4, (0x007000A0 & 0xFFFF) # ori $t4, $t4, 0xa0 -/* 0DF614 7F0AAAE4 240AFFFF */ li $t2, -1 -/* 0DF618 7F0AAAE8 240B0001 */ li $t3, 1 -/* 0DF61C 7F0AAAEC 240E0001 */ li $t6, 1 -/* 0DF620 7F0AAAF0 AFAE0028 */ sw $t6, 0x28($sp) -/* 0DF624 7F0AAAF4 AFAB0014 */ sw $t3, 0x14($sp) -/* 0DF628 7F0AAAF8 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DF62C 7F0AAAFC AFAC0018 */ sw $t4, 0x18($sp) -/* 0DF630 7F0AAB00 AFAD0024 */ sw $t5, 0x24($sp) -/* 0DF634 7F0AAB04 02002025 */ move $a0, $s0 -/* 0DF638 7F0AAB08 240500E6 */ li $a1, 230 -/* 0DF63C 7F0AAB0C 240600A7 */ li $a2, 167 -/* 0DF640 7F0AAB10 00403825 */ move $a3, $v0 -/* 0DF644 7F0AAB14 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF648 7F0AAB18 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF64C 7F0AAB1C AFA00020 */ sw $zero, 0x20($sp) -/* 0DF650 7F0AAB20 10000016 */ b .L7F0AAB7C -/* 0DF654 7F0AAB24 00408025 */ move $s0, $v0 -.L7F0AAB28: -/* 0DF658 7F0AAB28 0FC30776 */ jal get_textptr_for_textID -/* 0DF65C 7F0AAB2C 3404AC03 */ li $a0, 44035 -/* 0DF660 7F0AAB30 3C0F00AA */ lui $t7, (0x00AA00B0 >> 16) # lui $t7, 0xaa -/* 0DF664 7F0AAB34 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DF668 7F0AAB38 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DF66C 7F0AAB3C 35EF00B0 */ ori $t7, (0x00AA00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DF670 7F0AAB40 2418FFFF */ li $t8, -1 -/* 0DF674 7F0AAB44 24080001 */ li $t0, 1 -/* 0DF678 7F0AAB48 AFA80028 */ sw $t0, 0x28($sp) -/* 0DF67C 7F0AAB4C AFB80018 */ sw $t8, 0x18($sp) -/* 0DF680 7F0AAB50 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DF684 7F0AAB54 AFB90024 */ sw $t9, 0x24($sp) -/* 0DF688 7F0AAB58 02002025 */ move $a0, $s0 -/* 0DF68C 7F0AAB5C 240500E6 */ li $a1, 230 -/* 0DF690 7F0AAB60 240600A7 */ li $a2, 167 -/* 0DF694 7F0AAB64 00403825 */ move $a3, $v0 -/* 0DF698 7F0AAB68 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF69C 7F0AAB6C AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF6A0 7F0AAB70 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF6A4 7F0AAB74 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF6A8 7F0AAB78 00408025 */ move $s0, $v0 -.L7F0AAB7C: -/* 0DF6AC 7F0AAB7C 24040001 */ li $a0, 1 -/* 0DF6B0 7F0AAB80 0C0030C3 */ jal get_controller_buttons_held -/* 0DF6B4 7F0AAB84 24054000 */ li $a1, 16384 -/* 0DF6B8 7F0AAB88 10400018 */ beqz $v0, .L7F0AABEC -/* 0DF6BC 7F0AAB8C 00000000 */ nop -/* 0DF6C0 7F0AAB90 0FC30776 */ jal get_textptr_for_textID -/* 0DF6C4 7F0AAB94 3404AC02 */ li $a0, 44034 -/* 0DF6C8 7F0AAB98 3C0B0070 */ lui $t3, (0x007000A0 >> 16) # lui $t3, 0x70 -/* 0DF6CC 7F0AAB9C 3C0C0030 */ lui $t4, (0x003000B0 >> 16) # lui $t4, 0x30 -/* 0DF6D0 7F0AABA0 358C00B0 */ ori $t4, (0x003000B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0DF6D4 7F0AABA4 356B00A0 */ ori $t3, (0x007000A0 & 0xFFFF) # ori $t3, $t3, 0xa0 -/* 0DF6D8 7F0AABA8 2409FFFF */ li $t1, -1 -/* 0DF6DC 7F0AABAC 240A0001 */ li $t2, 1 -/* 0DF6E0 7F0AABB0 240D0001 */ li $t5, 1 -/* 0DF6E4 7F0AABB4 AFAD0028 */ sw $t5, 0x28($sp) -/* 0DF6E8 7F0AABB8 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DF6EC 7F0AABBC AFA90010 */ sw $t1, 0x10($sp) -/* 0DF6F0 7F0AABC0 AFAB0018 */ sw $t3, 0x18($sp) -/* 0DF6F4 7F0AABC4 AFAC0024 */ sw $t4, 0x24($sp) -/* 0DF6F8 7F0AABC8 02002025 */ move $a0, $s0 -/* 0DF6FC 7F0AABCC 240500E6 */ li $a1, 230 -/* 0DF700 7F0AABD0 24060095 */ li $a2, 149 -/* 0DF704 7F0AABD4 00403825 */ move $a3, $v0 -/* 0DF708 7F0AABD8 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF70C 7F0AABDC 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF710 7F0AABE0 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF714 7F0AABE4 10000016 */ b .L7F0AAC40 -/* 0DF718 7F0AABE8 00408025 */ move $s0, $v0 -.L7F0AABEC: -/* 0DF71C 7F0AABEC 0FC30776 */ jal get_textptr_for_textID -/* 0DF720 7F0AABF0 3404AC02 */ li $a0, 44034 -/* 0DF724 7F0AABF4 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DF728 7F0AABF8 3C180030 */ lui $t8, (0x003000B0 >> 16) # lui $t8, 0x30 -/* 0DF72C 7F0AABFC 371800B0 */ ori $t8, (0x003000B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DF730 7F0AAC00 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DF734 7F0AAC04 240FFFFF */ li $t7, -1 -/* 0DF738 7F0AAC08 24190001 */ li $t9, 1 -/* 0DF73C 7F0AAC0C AFB90028 */ sw $t9, 0x28($sp) -/* 0DF740 7F0AAC10 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DF744 7F0AAC14 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DF748 7F0AAC18 AFB80024 */ sw $t8, 0x24($sp) -/* 0DF74C 7F0AAC1C 02002025 */ move $a0, $s0 -/* 0DF750 7F0AAC20 240500E6 */ li $a1, 230 -/* 0DF754 7F0AAC24 24060095 */ li $a2, 149 -/* 0DF758 7F0AAC28 00403825 */ move $a3, $v0 -/* 0DF75C 7F0AAC2C AFA00014 */ sw $zero, 0x14($sp) -/* 0DF760 7F0AAC30 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF764 7F0AAC34 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF768 7F0AAC38 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF76C 7F0AAC3C 00408025 */ move $s0, $v0 -.L7F0AAC40: -/* 0DF770 7F0AAC40 3C088008 */ lui $t0, %hi(pPlayer) -/* 0DF774 7F0AAC44 8D08A0B0 */ lw $t0, %lo(pPlayer)($t0) -/* 0DF778 7F0AAC48 24010004 */ li $at, 4 -/* 0DF77C 7F0AAC4C 8D022A58 */ lw $v0, 0x2a58($t0) -/* 0DF780 7F0AAC50 10410003 */ beq $v0, $at, .L7F0AAC60 -/* 0DF784 7F0AAC54 24010005 */ li $at, 5 -/* 0DF788 7F0AAC58 14410005 */ bne $v0, $at, .L7F0AAC70 -/* 0DF78C 7F0AAC5C 00000000 */ nop -.L7F0AAC60: -/* 0DF790 7F0AAC60 0FC30776 */ jal get_textptr_for_textID -/* 0DF794 7F0AAC64 3404AC01 */ li $a0, 44033 -/* 0DF798 7F0AAC68 10000004 */ b .L7F0AAC7C -/* 0DF79C 7F0AAC6C 00403825 */ move $a3, $v0 -.L7F0AAC70: -/* 0DF7A0 7F0AAC70 0FC30776 */ jal get_textptr_for_textID -/* 0DF7A4 7F0AAC74 3404AC00 */ li $a0, 44032 -/* 0DF7A8 7F0AAC78 00403825 */ move $a3, $v0 -.L7F0AAC7C: -/* 0DF7AC 7F0AAC7C 24040001 */ li $a0, 1 -/* 0DF7B0 7F0AAC80 24052000 */ li $a1, 8192 -/* 0DF7B4 7F0AAC84 0C0030C3 */ jal get_controller_buttons_held -/* 0DF7B8 7F0AAC88 AFA70044 */ sw $a3, 0x44($sp) -/* 0DF7BC 7F0AAC8C 10400015 */ beqz $v0, .L7F0AACE4 -/* 0DF7C0 7F0AAC90 8FA70044 */ lw $a3, 0x44($sp) -/* 0DF7C4 7F0AAC94 3C0B0070 */ lui $t3, (0x007000A0 >> 16) # lui $t3, 0x70 -/* 0DF7C8 7F0AAC98 3C0C0030 */ lui $t4, (0x003000B0 >> 16) # lui $t4, 0x30 -/* 0DF7CC 7F0AAC9C 358C00B0 */ ori $t4, (0x003000B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0DF7D0 7F0AACA0 356B00A0 */ ori $t3, (0x007000A0 & 0xFFFF) # ori $t3, $t3, 0xa0 -/* 0DF7D4 7F0AACA4 2409FFFF */ li $t1, -1 -/* 0DF7D8 7F0AACA8 240A0001 */ li $t2, 1 -/* 0DF7DC 7F0AACAC 240D0001 */ li $t5, 1 -/* 0DF7E0 7F0AACB0 AFAD0028 */ sw $t5, 0x28($sp) -/* 0DF7E4 7F0AACB4 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DF7E8 7F0AACB8 AFA90010 */ sw $t1, 0x10($sp) -/* 0DF7EC 7F0AACBC AFAB0018 */ sw $t3, 0x18($sp) -/* 0DF7F0 7F0AACC0 AFAC0024 */ sw $t4, 0x24($sp) -/* 0DF7F4 7F0AACC4 02002025 */ move $a0, $s0 -/* 0DF7F8 7F0AACC8 240500E6 */ li $a1, 230 -/* 0DF7FC 7F0AACCC 240600B9 */ li $a2, 185 -/* 0DF800 7F0AACD0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF804 7F0AACD4 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF808 7F0AACD8 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF80C 7F0AACDC 10000013 */ b .L7F0AAD2C -/* 0DF810 7F0AACE0 00408025 */ move $s0, $v0 -.L7F0AACE4: -/* 0DF814 7F0AACE4 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DF818 7F0AACE8 3C180030 */ lui $t8, (0x003000B0 >> 16) # lui $t8, 0x30 -/* 0DF81C 7F0AACEC 371800B0 */ ori $t8, (0x003000B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DF820 7F0AACF0 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DF824 7F0AACF4 240FFFFF */ li $t7, -1 -/* 0DF828 7F0AACF8 24190001 */ li $t9, 1 -/* 0DF82C 7F0AACFC AFB90028 */ sw $t9, 0x28($sp) -/* 0DF830 7F0AAD00 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DF834 7F0AAD04 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DF838 7F0AAD08 AFB80024 */ sw $t8, 0x24($sp) -/* 0DF83C 7F0AAD0C 02002025 */ move $a0, $s0 -/* 0DF840 7F0AAD10 240500E6 */ li $a1, 230 -/* 0DF844 7F0AAD14 240600B9 */ li $a2, 185 -/* 0DF848 7F0AAD18 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF84C 7F0AAD1C AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF850 7F0AAD20 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF854 7F0AAD24 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF858 7F0AAD28 00408025 */ move $s0, $v0 -.L7F0AAD2C: -/* 0DF85C 7F0AAD2C 3C088008 */ lui $t0, %hi(pPlayer) -/* 0DF860 7F0AAD30 8D08A0B0 */ lw $t0, %lo(pPlayer)($t0) -/* 0DF864 7F0AAD34 24010004 */ li $at, 4 -/* 0DF868 7F0AAD38 8D022A58 */ lw $v0, 0x2a58($t0) -/* 0DF86C 7F0AAD3C 10410003 */ beq $v0, $at, .L7F0AAD4C -/* 0DF870 7F0AAD40 24010006 */ li $at, 6 -/* 0DF874 7F0AAD44 14410005 */ bne $v0, $at, .L7F0AAD5C -/* 0DF878 7F0AAD48 00000000 */ nop -.L7F0AAD4C: -/* 0DF87C 7F0AAD4C 0FC30776 */ jal get_textptr_for_textID -/* 0DF880 7F0AAD50 3404AC06 */ li $a0, 44038 -/* 0DF884 7F0AAD54 10000004 */ b .L7F0AAD68 -/* 0DF888 7F0AAD58 00403825 */ move $a3, $v0 -.L7F0AAD5C: -/* 0DF88C 7F0AAD5C 0FC30776 */ jal get_textptr_for_textID -/* 0DF890 7F0AAD60 3404AC05 */ li $a0, 44037 -/* 0DF894 7F0AAD64 00403825 */ move $a3, $v0 -.L7F0AAD68: -/* 0DF898 7F0AAD68 3C0900AA */ lui $t1, (0x00AA00B0 >> 16) # lui $t1, 0xaa -/* 0DF89C 7F0AAD6C 3C0B0030 */ lui $t3, (0x003000B0 >> 16) # lui $t3, 0x30 -/* 0DF8A0 7F0AAD70 356B00B0 */ ori $t3, (0x003000B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0DF8A4 7F0AAD74 352900B0 */ ori $t1, (0x00AA00B0 & 0xFFFF) # ori $t1, $t1, 0xb0 -/* 0DF8A8 7F0AAD78 240AFFFF */ li $t2, -1 -/* 0DF8AC 7F0AAD7C 240C0001 */ li $t4, 1 -/* 0DF8B0 7F0AAD80 AFAC0028 */ sw $t4, 0x28($sp) -/* 0DF8B4 7F0AAD84 AFAA0018 */ sw $t2, 0x18($sp) -/* 0DF8B8 7F0AAD88 AFA90010 */ sw $t1, 0x10($sp) -/* 0DF8BC 7F0AAD8C AFAB0024 */ sw $t3, 0x24($sp) -/* 0DF8C0 7F0AAD90 02002025 */ move $a0, $s0 -/* 0DF8C4 7F0AAD94 240500E6 */ li $a1, 230 -/* 0DF8C8 7F0AAD98 240600CB */ li $a2, 203 -/* 0DF8CC 7F0AAD9C AFA00014 */ sw $zero, 0x14($sp) -/* 0DF8D0 7F0AADA0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF8D4 7F0AADA4 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF8D8 7F0AADA8 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF8DC 7F0AADAC 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DF8E0 7F0AADB0 8FB00038 */ lw $s0, 0x38($sp) -/* 0DF8E4 7F0AADB4 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0DF8E8 7F0AADB8 03E00008 */ jr $ra -/* 0DF8EC 7F0AADBC 00000000 */ nop -) -#endif - - - #ifdef NONMATCHING @@ -8874,8 +7553,8 @@ glabel sub_GAME_7F0AADC0 /* 0DFA70 7F0AAF40 3C0F8004 */ lui $t7, %hi(watch_soundrelated_maybe) /* 0DFA74 7F0AAF44 8DEF09A8 */ lw $t7, %lo(watch_soundrelated_maybe)($t7) /* 0DFA78 7F0AAF48 11E00016 */ beqz $t7, .L7F0AAFA4 -/* 0DFA7C 7F0AAF4C 3C098004 */ lui $t1, %hi(D_80040998) -/* 0DFA80 7F0AAF50 8D290998 */ lw $t1, %lo(D_80040998)($t1) +/* 0DFA7C 7F0AAF4C 3C098004 */ lui $t1, %hi(controller_options_index) +/* 0DFA80 7F0AAF50 8D290998 */ lw $t1, %lo(controller_options_index)($t1) /* 0DFA84 7F0AAF54 24010001 */ li $at, 1 /* 0DFA88 7F0AAF58 15210012 */ bne $t1, $at, .L7F0AAFA4 /* 0DFA8C 7F0AAF5C 00000000 */ nop @@ -8951,7 +7630,7 @@ glabel sub_GAME_7F0AADC0 /* 0DFB9C 7F0AB06C E7A20014 */ swc1 $f2, 0x14($sp) /* 0DFBA0 7F0AB070 E7A2001C */ swc1 $f2, 0x1c($sp) /* 0DFBA4 7F0AB074 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0DFBA8 7F0AB078 0FC165A5 */ jal sub_GAME_7F059694 +/* 0DFBA8 7F0AB078 0FC165A5 */ jal matrix_4x4_7F059694 /* 0DFBAC 7F0AB07C E7B00024 */ swc1 $f16, 0x24($sp) /* 0DFBB0 7F0AB080 10000017 */ b .L7F0AB0E0 /* 0DFBB4 7F0AB084 27A4032C */ addiu $a0, $sp, 0x32c @@ -8975,7 +7654,7 @@ glabel sub_GAME_7F0AADC0 /* 0DFBF8 7F0AB0C8 E7A80024 */ swc1 $f8, 0x24($sp) /* 0DFBFC 7F0AB0CC E7A60014 */ swc1 $f6, 0x14($sp) /* 0DFC00 7F0AB0D0 E7B2001C */ swc1 $f18, 0x1c($sp) -/* 0DFC04 7F0AB0D4 0FC165A5 */ jal sub_GAME_7F059694 +/* 0DFC04 7F0AB0D4 0FC165A5 */ jal matrix_4x4_7F059694 /* 0DFC08 7F0AB0D8 E7A40020 */ swc1 $f4, 0x20($sp) /* 0DFC0C 7F0AB0DC 27A4032C */ addiu $a0, $sp, 0x32c .L7F0AB0E0: @@ -9074,8 +7753,8 @@ glabel sub_GAME_7F0AADC0 /* 0DFD78 7F0AB248 3C088004 */ lui $t0, %hi(watch_soundrelated_maybe) /* 0DFD7C 7F0AB24C 8D0809A8 */ lw $t0, %lo(watch_soundrelated_maybe)($t0) /* 0DFD80 7F0AB250 11000016 */ beqz $t0, .L7F0AB2AC -/* 0DFD84 7F0AB254 3C0F8004 */ lui $t7, %hi(D_80040998) -/* 0DFD88 7F0AB258 8DEF0998 */ lw $t7, %lo(D_80040998)($t7) +/* 0DFD84 7F0AB254 3C0F8004 */ lui $t7, %hi(controller_options_index) +/* 0DFD88 7F0AB258 8DEF0998 */ lw $t7, %lo(controller_options_index)($t7) /* 0DFD8C 7F0AB25C 24010001 */ li $at, 1 /* 0DFD90 7F0AB260 15E10012 */ bne $t7, $at, .L7F0AB2AC /* 0DFD94 7F0AB264 00000000 */ nop @@ -9145,7 +7824,7 @@ glabel sub_GAME_7F0AADC0 /* 0DFE8C 7F0AB35C E7A2001C */ swc1 $f2, 0x1c($sp) /* 0DFE90 7F0AB360 E7A20020 */ swc1 $f2, 0x20($sp) /* 0DFE94 7F0AB364 E7B00018 */ swc1 $f16, 0x18($sp) -/* 0DFE98 7F0AB368 0FC165A5 */ jal sub_GAME_7F059694 +/* 0DFE98 7F0AB368 0FC165A5 */ jal matrix_4x4_7F059694 /* 0DFE9C 7F0AB36C E7A40024 */ swc1 $f4, 0x24($sp) /* 0DFEA0 7F0AB370 27A402EC */ addiu $a0, $sp, 0x2ec /* 0DFEA4 7F0AB374 27A503BC */ addiu $a1, $sp, 0x3bc @@ -9208,7 +7887,7 @@ glabel sub_GAME_7F0AADC0 /* 0DFF80 7F0AB450 00000000 */ nop /* 0DFF84 7F0AB454 10400005 */ beqz $v0, .L7F0AB46C /* 0DFF88 7F0AB458 00000000 */ nop -/* 0DFF8C 7F0AB45C 0FC2A9F2 */ jal sub_GAME_7F0AA7C8 +/* 0DFF8C 7F0AB45C 0FC2A9F2 */ jal display_text_buttons_dual_control /* 0DFF90 7F0AB460 02002025 */ move $a0, $s0 /* 0DFF94 7F0AB464 10000004 */ b .L7F0AB478 /* 0DFF98 7F0AB468 00408025 */ move $s0, $v0 @@ -9345,8 +8024,8 @@ glabel sub_GAME_7F0AADC0 /* 0E0664 7F0ABAF4 3C088004 */ lui $t0, %hi(watch_soundrelated_maybe) # $t0, 0x8004 /* 0E0668 7F0ABAF8 8D0809D8 */ lw $t0, %lo(watch_soundrelated_maybe)($t0) /* 0E066C 7F0ABAFC 11000016 */ beqz $t0, .Ljp7F0ABB58 -/* 0E0670 7F0ABB00 3C0F8004 */ lui $t7, %hi(D_80040998) # $t7, 0x8004 -/* 0E0674 7F0ABB04 8DEF09C8 */ lw $t7, %lo(D_80040998)($t7) +/* 0E0670 7F0ABB00 3C0F8004 */ lui $t7, %hi(controller_options_index) # $t7, 0x8004 +/* 0E0674 7F0ABB04 8DEF09C8 */ lw $t7, %lo(controller_options_index)($t7) /* 0E0678 7F0ABB08 24010001 */ li $at, 1 /* 0E067C 7F0ABB0C 15E10012 */ bne $t7, $at, .Ljp7F0ABB58 /* 0E0680 7F0ABB10 00000000 */ nop @@ -9422,7 +8101,7 @@ glabel sub_GAME_7F0AADC0 /* 0E0790 7F0ABC20 E7A20014 */ swc1 $f2, 0x14($sp) /* 0E0794 7F0ABC24 E7A2001C */ swc1 $f2, 0x1c($sp) /* 0E0798 7F0ABC28 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0E079C 7F0ABC2C 0FC166ED */ jal sub_GAME_7F059694 +/* 0E079C 7F0ABC2C 0FC166ED */ jal matrix_4x4_7F059694 /* 0E07A0 7F0ABC30 E7AA0024 */ swc1 $f10, 0x24($sp) /* 0E07A4 7F0ABC34 10000017 */ b .Ljp7F0ABC94 /* 0E07A8 7F0ABC38 27A4032C */ addiu $a0, $sp, 0x32c @@ -9446,7 +8125,7 @@ glabel sub_GAME_7F0AADC0 /* 0E07EC 7F0ABC7C E7A60024 */ swc1 $f6, 0x24($sp) /* 0E07F0 7F0ABC80 E7B20014 */ swc1 $f18, 0x14($sp) /* 0E07F4 7F0ABC84 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 0E07F8 7F0ABC88 0FC166ED */ jal sub_GAME_7F059694 +/* 0E07F8 7F0ABC88 0FC166ED */ jal matrix_4x4_7F059694 /* 0E07FC 7F0ABC8C E7A40020 */ swc1 $f4, 0x20($sp) /* 0E0800 7F0ABC90 27A4032C */ addiu $a0, $sp, 0x32c .Ljp7F0ABC94: @@ -9542,8 +8221,8 @@ glabel sub_GAME_7F0AADC0 /* 0E0960 7F0ABDF0 3C0C8004 */ lui $t4, %hi(watch_soundrelated_maybe) # $t4, 0x8004 /* 0E0964 7F0ABDF4 8D8C09D8 */ lw $t4, %lo(watch_soundrelated_maybe)($t4) /* 0E0968 7F0ABDF8 11800016 */ beqz $t4, .Ljp7F0ABE54 -/* 0E096C 7F0ABDFC 3C0D8004 */ lui $t5, %hi(D_80040998) # $t5, 0x8004 -/* 0E0970 7F0ABE00 8DAD09C8 */ lw $t5, %lo(D_80040998)($t5) +/* 0E096C 7F0ABDFC 3C0D8004 */ lui $t5, %hi(controller_options_index) # $t5, 0x8004 +/* 0E0970 7F0ABE00 8DAD09C8 */ lw $t5, %lo(controller_options_index)($t5) /* 0E0974 7F0ABE04 24010001 */ li $at, 1 /* 0E0978 7F0ABE08 15A10012 */ bne $t5, $at, .Ljp7F0ABE54 /* 0E097C 7F0ABE0C 00000000 */ nop @@ -9613,7 +8292,7 @@ glabel sub_GAME_7F0AADC0 /* 0E0A74 7F0ABF04 E7A2001C */ swc1 $f2, 0x1c($sp) /* 0E0A78 7F0ABF08 E7A20020 */ swc1 $f2, 0x20($sp) /* 0E0A7C 7F0ABF0C E7A80018 */ swc1 $f8, 0x18($sp) -/* 0E0A80 7F0ABF10 0FC166ED */ jal sub_GAME_7F059694 +/* 0E0A80 7F0ABF10 0FC166ED */ jal matrix_4x4_7F059694 /* 0E0A84 7F0ABF14 E7B20024 */ swc1 $f18, 0x24($sp) /* 0E0A88 7F0ABF18 27A402EC */ addiu $a0, $sp, 0x2ec /* 0E0A8C 7F0ABF1C 27A503BC */ addiu $a1, $sp, 0x3bc @@ -9676,7 +8355,7 @@ glabel sub_GAME_7F0AADC0 /* 0E0B68 7F0ABFF8 00000000 */ nop /* 0E0B6C 7F0ABFFC 10400005 */ beqz $v0, .Ljp7F0AC014 /* 0E0B70 7F0AC000 00000000 */ nop -/* 0E0B74 7F0AC004 0FC2ACE2 */ jal sub_GAME_7F0AA7C8 +/* 0E0B74 7F0AC004 0FC2ACE2 */ jal display_text_buttons_dual_control /* 0E0B78 7F0AC008 02002025 */ move $a0, $s0 /* 0E0B7C 7F0AC00C 10000004 */ b .Ljp7F0AC020 /* 0E0B80 7F0AC010 00408025 */ move $s0, $v0 @@ -9699,12 +8378,12 @@ glabel sub_GAME_7F0AADC0 -void zero_D_80040998(void) { - D_80040998 = 0; +void reset_controller_options_index(void) { + controller_options_index = 0; } -void zero_D_8004099C(void) { - D_8004099C = 0; +void reset_game_options_index(void) { + game_options_index = 0; } void zero_D_800409A4(void) { @@ -9734,7 +8413,7 @@ void proc_7F0AB4B8(u32 param_1,u32 param_2) ?32 phi_s1_2; - DL = sub_GAME_7F0A714C(param_1, param_2, 0); + DL = draw_background_health_and_armor(param_1, param_2, 0); if (check_watch_page_transistion_running() != 1) { pFirstFontTableSmall = (s32) ptrFirstFontTableSmall; @@ -9744,7 +8423,7 @@ void proc_7F0AB4B8(u32 param_1,u32 param_2) sp5C = 0x40; sp58 = 0x1a; phi_s1 = 0xff00b0; - if (D_80040998 == 0) + if (controller_options_index == 0) { phi_s1 = 0xa0ffa0f0; if (watch_soundrelated_maybe != 0) @@ -9753,7 +8432,7 @@ void proc_7F0AB4B8(u32 param_1,u32 param_2) } } sub_GAME_7F0AE98C(&sp50, &sp54, txtptr, pSecondFontTableSmall, pFirstFontTableSmall, 0); - if ((watch_soundrelated_maybe != 0) && (D_80040998 == 0)) + if ((watch_soundrelated_maybe != 0) && (controller_options_index == 0)) { jp_text_write_stuff(DL, &sp5C, &sp58, txtptr, pSecondFontTableSmall, pFirstFontTableSmall, (?32) phi_s1, 0x7000a0, (s32) (sp54 + 1), sp50, 0, 0); } @@ -9769,7 +8448,7 @@ void proc_7F0AB4B8(u32 param_1,u32 param_2) } sp5C = 0x40; sp58 = 0x2b; - if (D_80040998 == 1) + if (controller_options_index == 1) { phi_s1_2 = 0xa0ffa0f0; if (watch_soundrelated_maybe != 0) @@ -9778,7 +8457,7 @@ void proc_7F0AB4B8(u32 param_1,u32 param_2) } } sub_GAME_7F0AE98C(&sp50, &sp54, txtptr, pSecondFontTableSmall, pFirstFontTableSmall, 0); - if ((watch_soundrelated_maybe != 0) && (D_80040998 == 1)) + if ((watch_soundrelated_maybe != 0) && (controller_options_index == 1)) { jp_text_write_stuff(DL, &sp5C, &sp58, txtptr, pSecondFontTableSmall, pFirstFontTableSmall, (?32) phi_s1_2, 0x7000a0, (s32) (sp54 + 1), sp50, 0, 0); } @@ -9798,7 +8477,7 @@ glabel sub_GAME_7F0AB4B8 /* 0DFFF0 7F0AB4C0 AFB20040 */ sw $s2, 0x40($sp) /* 0DFFF4 7F0AB4C4 AFB1003C */ sw $s1, 0x3c($sp) /* 0DFFF8 7F0AB4C8 AFB00038 */ sw $s0, 0x38($sp) -/* 0DFFFC 7F0AB4CC 0FC29C53 */ jal sub_GAME_7F0A714C +/* 0DFFFC 7F0AB4CC 0FC29C53 */ jal draw_background_health_and_armor /* 0E0000 7F0AB4D0 00003025 */ move $a2, $zero /* 0E0004 7F0AB4D4 0FC1F97F */ jal check_watch_page_transistion_running /* 0E0008 7F0AB4D8 00408025 */ move $s0, $v0 @@ -9818,8 +8497,8 @@ glabel sub_GAME_7F0AB4B8 /* 0E0040 7F0AB510 00408025 */ move $s0, $v0 /* 0E0044 7F0AB514 0FC30776 */ jal get_textptr_for_textID /* 0E0048 7F0AB518 3404AC32 */ li $a0, 44082 -/* 0E004C 7F0AB51C 3C088004 */ lui $t0, %hi(D_80040998) -/* 0E0050 7F0AB520 8D080998 */ lw $t0, %lo(D_80040998)($t0) +/* 0E004C 7F0AB51C 3C088004 */ lui $t0, %hi(controller_options_index) +/* 0E0050 7F0AB520 8D080998 */ lw $t0, %lo(controller_options_index)($t0) /* 0E0054 7F0AB524 24180040 */ li $t8, 64 /* 0E0058 7F0AB528 2419001A */ li $t9, 26 /* 0E005C 7F0AB52C 3C1100FF */ lui $s1, (0x00FF00B0 >> 16) # lui $s1, 0xff @@ -9847,11 +8526,11 @@ glabel sub_GAME_7F0AB4B8 /* 0E00AC 7F0AB57C AFAA0010 */ sw $t2, 0x10($sp) /* 0E00B0 7F0AB580 3C0B8004 */ lui $t3, %hi(watch_soundrelated_maybe) /* 0E00B4 7F0AB584 8D6B09A8 */ lw $t3, %lo(watch_soundrelated_maybe)($t3) -/* 0E00B8 7F0AB588 3C0C8004 */ lui $t4, %hi(D_80040998) +/* 0E00B8 7F0AB588 3C0C8004 */ lui $t4, %hi(controller_options_index) /* 0E00BC 7F0AB58C 02002025 */ move $a0, $s0 /* 0E00C0 7F0AB590 1160001B */ beqz $t3, .L7F0AB600 /* 0E00C4 7F0AB594 27A5005C */ addiu $a1, $sp, 0x5c -/* 0E00C8 7F0AB598 8D8C0998 */ lw $t4, %lo(D_80040998)($t4) +/* 0E00C8 7F0AB598 8D8C0998 */ lw $t4, %lo(controller_options_index)($t4) /* 0E00CC 7F0AB59C 27A60058 */ addiu $a2, $sp, 0x58 /* 0E00D0 7F0AB5A0 02403825 */ move $a3, $s2 /* 0E00D4 7F0AB5A4 15800016 */ bnez $t4, .L7F0AB600 @@ -9909,8 +8588,8 @@ glabel sub_GAME_7F0AB4B8 /* 0E019C 7F0AB66C 3404AC34 */ li $a0, 44084 /* 0E01A0 7F0AB670 00409025 */ move $s2, $v0 .L7F0AB674: -/* 0E01A4 7F0AB674 3C0F8004 */ lui $t7, %hi(D_80040998) -/* 0E01A8 7F0AB678 8DEF0998 */ lw $t7, %lo(D_80040998)($t7) +/* 0E01A4 7F0AB674 3C0F8004 */ lui $t7, %hi(controller_options_index) +/* 0E01A8 7F0AB678 8DEF0998 */ lw $t7, %lo(controller_options_index)($t7) /* 0E01AC 7F0AB67C 240D0040 */ li $t5, 64 /* 0E01B0 7F0AB680 240E002B */ li $t6, 43 /* 0E01B4 7F0AB684 24010001 */ li $at, 1 @@ -9936,11 +8615,11 @@ glabel sub_GAME_7F0AB4B8 /* 0E01FC 7F0AB6CC AFB90010 */ sw $t9, 0x10($sp) /* 0E0200 7F0AB6D0 3C088004 */ lui $t0, %hi(watch_soundrelated_maybe) /* 0E0204 7F0AB6D4 8D0809A8 */ lw $t0, %lo(watch_soundrelated_maybe)($t0) -/* 0E0208 7F0AB6D8 3C098004 */ lui $t1, %hi(D_80040998) +/* 0E0208 7F0AB6D8 3C098004 */ lui $t1, %hi(controller_options_index) /* 0E020C 7F0AB6DC 02002025 */ move $a0, $s0 /* 0E0210 7F0AB6E0 1100001A */ beqz $t0, .L7F0AB74C /* 0E0214 7F0AB6E4 27A5005C */ addiu $a1, $sp, 0x5c -/* 0E0218 7F0AB6E8 8D290998 */ lw $t1, %lo(D_80040998)($t1) +/* 0E0218 7F0AB6E8 8D290998 */ lw $t1, %lo(controller_options_index)($t1) /* 0E021C 7F0AB6EC 24010001 */ li $at, 1 /* 0E0220 7F0AB6F0 27A60058 */ addiu $a2, $sp, 0x58 /* 0E0224 7F0AB6F4 15210015 */ bne $t1, $at, .L7F0AB74C @@ -9994,122 +8673,196 @@ glabel sub_GAME_7F0AB4B8 #endif - - - - -void set_pparam1toparam2_disablejoylr_playsfx(u32 *param_1,u32 param_2) +void game_option_select_value(u32 *param_1, u32 param_2) { *param_1 = param_2; set_controlstick_lr_disabled(); - play_sfx_a1(ptr_sfx_buf,0x2b,NULL); + play_sfx_a1(ptr_sfx_buf, 0x2b, NULL); +} + + +void game_option_toggle_input(s32 option_index) +{ + if ( (get_controller_buttons_pressed(0, L_CBUTTONS|L_TRIG|L_JPAD) || sub_GAME_7F0A4FB0()) && watch_soundrelated_maybe ) + { + if (game_options_entries[option_index].current_value == 1) + { + game_option_select_value(&game_options_entries[option_index].current_value, 0); + } + else if (game_options_entries[option_index].current_value == 2) + { + game_option_select_value(&game_options_entries[option_index].current_value, 1); + } + } + else + { + if ( (get_controller_buttons_pressed(0, R_CBUTTONS|R_TRIG|R_JPAD) || sub_GAME_7F0A4FEC()) && watch_soundrelated_maybe ) + { + if (game_options_entries[option_index].current_value == 0) + { + game_option_select_value(&game_options_entries[option_index].current_value, 1); + } + else if ( (game_options_entries[option_index].current_value == 1) && game_options_entries[option_index].text[3] ) + { + game_option_select_value(&game_options_entries[option_index].current_value, 2); + } + } + } } - #ifdef NONMATCHING -void sub_GAME_7F0AB7D8(void) { +void sub_GAME_7F0AB908(s32 param_1, u32 param_2, int param_3, s32 param_4) +{ +// u32 uVar1; + u8 pbVar2; + u32 puVar3; + u32 uVar4; + + //s32 puVar5; + s32 puVar6; + s32 puVar7; + + u32 local_res0; + u32 local_14; + s32 local_c; + + puVar7 = 0x800080; + puVar6 = 0x800080; + local_c = 0x800080; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AB7D8 -/* 0E0308 7F0AB7D8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E030C 7F0AB7DC AFBF0014 */ sw $ra, 0x14($sp) -/* 0E0310 7F0AB7E0 AFA40018 */ sw $a0, 0x18($sp) -/* 0E0314 7F0AB7E4 00002025 */ move $a0, $zero -/* 0E0318 7F0AB7E8 0C0030EB */ jal get_controller_buttons_pressed -/* 0E031C 7F0AB7EC 24050222 */ li $a1, 546 -/* 0E0320 7F0AB7F0 14400004 */ bnez $v0, .L7F0AB804 -/* 0E0324 7F0AB7F4 00000000 */ nop -/* 0E0328 7F0AB7F8 0FC293EC */ jal sub_GAME_7F0A4FB0 -/* 0E032C 7F0AB7FC 00000000 */ nop -/* 0E0330 7F0AB800 1040001A */ beqz $v0, .L7F0AB86C -.L7F0AB804: -/* 0E0334 7F0AB804 3C0E8004 */ lui $t6, %hi(watch_soundrelated_maybe) -/* 0E0338 7F0AB808 8DCE09A8 */ lw $t6, %lo(watch_soundrelated_maybe)($t6) -/* 0E033C 7F0AB80C 8FAF0018 */ lw $t7, 0x18($sp) -/* 0E0340 7F0AB810 3C198004 */ lui $t9, %hi(D_80040A7C) -/* 0E0344 7F0AB814 11C00015 */ beqz $t6, .L7F0AB86C -/* 0E0348 7F0AB818 000FC080 */ sll $t8, $t7, 2 -/* 0E034C 7F0AB81C 030FC023 */ subu $t8, $t8, $t7 -/* 0E0350 7F0AB820 0018C080 */ sll $t8, $t8, 2 -/* 0E0354 7F0AB824 27390A7C */ addiu $t9, %lo(D_80040A7C) # addiu $t9, $t9, 0xa7c -/* 0E0358 7F0AB828 03191021 */ addu $v0, $t8, $t9 -/* 0E035C 7F0AB82C 8C430008 */ lw $v1, 8($v0) -/* 0E0360 7F0AB830 24010001 */ li $at, 1 -/* 0E0364 7F0AB834 24440008 */ addiu $a0, $v0, 8 -/* 0E0368 7F0AB838 54610006 */ bnel $v1, $at, .L7F0AB854 -/* 0E036C 7F0AB83C 24010002 */ li $at, 2 -/* 0E0370 7F0AB840 0FC2ADE9 */ jal set_pparam1toparam2_disablejoylr_playsfx -/* 0E0374 7F0AB844 00002825 */ move $a1, $zero -/* 0E0378 7F0AB848 1000002C */ b .L7F0AB8FC -/* 0E037C 7F0AB84C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E0380 7F0AB850 24010002 */ li $at, 2 -.L7F0AB854: -/* 0E0384 7F0AB854 14610028 */ bne $v1, $at, .L7F0AB8F8 -/* 0E0388 7F0AB858 24440008 */ addiu $a0, $v0, 8 -/* 0E038C 7F0AB85C 0FC2ADE9 */ jal set_pparam1toparam2_disablejoylr_playsfx -/* 0E0390 7F0AB860 24050001 */ li $a1, 1 -/* 0E0394 7F0AB864 10000025 */ b .L7F0AB8FC -/* 0E0398 7F0AB868 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0AB86C: -/* 0E039C 7F0AB86C 00002025 */ move $a0, $zero -/* 0E03A0 7F0AB870 0C0030EB */ jal get_controller_buttons_pressed -/* 0E03A4 7F0AB874 24050111 */ li $a1, 273 -/* 0E03A8 7F0AB878 14400004 */ bnez $v0, .L7F0AB88C -/* 0E03AC 7F0AB87C 00000000 */ nop -/* 0E03B0 7F0AB880 0FC293FB */ jal sub_GAME_7F0A4FEC -/* 0E03B4 7F0AB884 00000000 */ nop -/* 0E03B8 7F0AB888 1040001B */ beqz $v0, .L7F0AB8F8 -.L7F0AB88C: -/* 0E03BC 7F0AB88C 3C088004 */ lui $t0, %hi(watch_soundrelated_maybe) -/* 0E03C0 7F0AB890 8D0809A8 */ lw $t0, %lo(watch_soundrelated_maybe)($t0) -/* 0E03C4 7F0AB894 8FA90018 */ lw $t1, 0x18($sp) -/* 0E03C8 7F0AB898 3C0B8004 */ lui $t3, %hi(D_80040A7C) -/* 0E03CC 7F0AB89C 11000016 */ beqz $t0, .L7F0AB8F8 -/* 0E03D0 7F0AB8A0 00095080 */ sll $t2, $t1, 2 -/* 0E03D4 7F0AB8A4 01495023 */ subu $t2, $t2, $t1 -/* 0E03D8 7F0AB8A8 000A5080 */ sll $t2, $t2, 2 -/* 0E03DC 7F0AB8AC 256B0A7C */ addiu $t3, %lo(D_80040A7C) # addiu $t3, $t3, 0xa7c -/* 0E03E0 7F0AB8B0 014B1021 */ addu $v0, $t2, $t3 -/* 0E03E4 7F0AB8B4 8C430008 */ lw $v1, 8($v0) -/* 0E03E8 7F0AB8B8 24440008 */ addiu $a0, $v0, 8 -/* 0E03EC 7F0AB8BC 24010001 */ li $at, 1 -/* 0E03F0 7F0AB8C0 14600005 */ bnez $v1, .L7F0AB8D8 -/* 0E03F4 7F0AB8C4 00000000 */ nop -/* 0E03F8 7F0AB8C8 0FC2ADE9 */ jal set_pparam1toparam2_disablejoylr_playsfx -/* 0E03FC 7F0AB8CC 24050001 */ li $a1, 1 -/* 0E0400 7F0AB8D0 1000000A */ b .L7F0AB8FC -/* 0E0404 7F0AB8D4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0AB8D8: -/* 0E0408 7F0AB8D8 54610008 */ bnel $v1, $at, .L7F0AB8FC -/* 0E040C 7F0AB8DC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E0410 7F0AB8E0 944C0006 */ lhu $t4, 6($v0) -/* 0E0414 7F0AB8E4 24440008 */ addiu $a0, $v0, 8 -/* 0E0418 7F0AB8E8 51800004 */ beql $t4, $zero, .L7F0AB8FC -/* 0E041C 7F0AB8EC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E0420 7F0AB8F0 0FC2ADE9 */ jal set_pparam1toparam2_disablejoylr_playsfx -/* 0E0424 7F0AB8F4 24050002 */ li $a1, 2 -.L7F0AB8F8: -/* 0E0428 7F0AB8F8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0AB8FC: -/* 0E042C 7F0AB8FC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E0430 7F0AB900 03E00008 */ jr $ra -/* 0E0434 7F0AB904 00000000 */ nop -) -#endif + if (j_text_trigger != 0) + { + uVar4 = 0xAA; + } + else + { + uVar4 = 0xB4; + } + + if (j_text_trigger != 0) + { + local_14 = 0xDC; + } + else + { + local_14 = 0xE1; + } + //L7F0AB958 - GOOD TEXT + if (param_4 != 0) { + + if (param_4 != 1) { + + if (param_4 != 2) { + + // puVar5 = game_options_entries[param_3]; + // puVar6 = puVar7; + + puVar6 = 0x800080; + puVar7 = 0x800080; + + } else { + + game_option_toggle_input(param_3); + + // puVar5 = game_options_entries[param_3]; + // uVar1 = game_options_entries[param_3].current_value; + + puVar6 = 0x800080; + puVar7 = 0x800080; + + if (game_options_entries[param_3].current_value == 0) { + puVar6 = 0xa0ffa0f0; + } + else { + if (game_options_entries[param_3].current_value == 1) { + puVar7 = 0xa0ffa0f0; + } + else { + if (game_options_entries[param_3].current_value == 2) { + local_c = 0xa0ffa0f0; + } + } + } + } + + } + else { + // puVar5 = game_options_entries[param_3].text; + // uVar1 = game_options_entries[param_3].current_value; + if (game_options_entries[param_3].current_value == 0) { + puVar6 = 0xff00b0; + } + else { + if (game_options_entries[param_3].current_value == 1) { + puVar7 = 0xff00b0; + } + else { + if (game_options_entries[param_3].current_value == 2) { + local_c = 0xff00b0; + } + } + } + } + + } else { + // puVar5 = game_options_entries[param_3].text; + // uVar1 = game_options_entries[param_3].current_value; + + if (game_options_entries[param_3].current_value == 0) { + puVar6 = 0xff00b0; + } + + else { + if (game_options_entries[param_3].current_value == 1) { + puVar7 = 0xff00b0; + } + else { + if (game_options_entries[param_3].current_value == 2) { + local_c = 0xff00b0; + } + } + } + } + if (game_options_entries[param_3].text[3] == 0) + { + uVar4 = 0xC8; + if (j_text_trigger != 0) + { + uVar4 = 0xBE; + } -#ifdef NONMATCHING -void sub_GAME_7F0AB908(void) { + if (j_text_trigger != 0) + { + local_14 = 0xFA; + } + else + { + local_14 = 0xFA; + } + } + + + pbVar2 = get_textptr_for_textID(game_options_entries[param_3].text[1]); + puVar3 = proc_7F0A9398(param_1, uVar4, param_2, pbVar2, puVar6, 0, 0xffffffff,1,0, 0x3000B0,0); + //arg0 = sub_GAME_7F0A9398(arg0, phi_a1_2, arg1, get_textptr_for_textID(game_options_entries[PLAYER_OPTION_AUTOAIM].text, phi_a1_2, arg2), phi_t1, 0, -1, 1, 0, 0x3000B0, 0); + + pbVar2 = get_textptr_for_textID(game_options_entries[param_3].text[2]); + local_res0 = proc_7F0A9398(puVar3, local_14, param_2, pbVar2, puVar7,0,0xffffffff,1,0, 0x3000B0, 0); + + if (game_options_entries[param_3].text[3] != 0) { + pbVar2 = get_textptr_for_textID(game_options_entries[param_3].text[3]); + local_res0 = proc_7F0A9398(local_res0, 0x10e, param_2, pbVar2, local_c,0,0xffffffff,1,0, 0x3000B0, 0); + } + + //return local_res0; } #else GLOBAL_ASM( @@ -10148,15 +8901,15 @@ glabel sub_GAME_7F0AB908 /* 0E04A0 7F0AB970 10E10032 */ beq $a3, $at, .L7F0ABA3C /* 0E04A4 7F0AB974 0006C080 */ sll $t8, $a2, 2 /* 0E04A8 7F0AB978 0306C023 */ subu $t8, $t8, $a2 -/* 0E04AC 7F0AB97C 3C198004 */ lui $t9, %hi(D_80040A7C) -/* 0E04B0 7F0AB980 27390A7C */ addiu $t9, %lo(D_80040A7C) # addiu $t9, $t9, 0xa7c +/* 0E04AC 7F0AB97C 3C198004 */ lui $t9, %hi(game_options_entries) +/* 0E04B0 7F0AB980 27390A7C */ addiu $t9, %lo(game_options_entries) # addiu $t9, $t9, 0xa7c /* 0E04B4 7F0AB984 0018C080 */ sll $t8, $t8, 2 /* 0E04B8 7F0AB988 1000004B */ b .L7F0ABAB8 /* 0E04BC 7F0AB98C 03194021 */ addu $t0, $t8, $t9 .L7F0AB990: /* 0E04C0 7F0AB990 01665823 */ subu $t3, $t3, $a2 -/* 0E04C4 7F0AB994 3C0C8004 */ lui $t4, %hi(D_80040A7C) -/* 0E04C8 7F0AB998 258C0A7C */ addiu $t4, %lo(D_80040A7C) # addiu $t4, $t4, 0xa7c +/* 0E04C4 7F0AB994 3C0C8004 */ lui $t4, %hi(game_options_entries) +/* 0E04C8 7F0AB998 258C0A7C */ addiu $t4, %lo(game_options_entries) # addiu $t4, $t4, 0xa7c /* 0E04CC 7F0AB99C 000B5880 */ sll $t3, $t3, 2 /* 0E04D0 7F0AB9A0 016C4021 */ addu $t0, $t3, $t4 /* 0E04D4 7F0AB9A4 8D020008 */ lw $v0, 8($t0) @@ -10180,8 +8933,8 @@ glabel sub_GAME_7F0AB908 /* 0E0514 7F0AB9E4 AFAD0054 */ sw $t5, 0x54($sp) .L7F0AB9E8: /* 0E0518 7F0AB9E8 01C67023 */ subu $t6, $t6, $a2 -/* 0E051C 7F0AB9EC 3C0F8004 */ lui $t7, %hi(D_80040A7C) -/* 0E0520 7F0AB9F0 25EF0A7C */ addiu $t7, %lo(D_80040A7C) # addiu $t7, $t7, 0xa7c +/* 0E051C 7F0AB9EC 3C0F8004 */ lui $t7, %hi(game_options_entries) +/* 0E0520 7F0AB9F0 25EF0A7C */ addiu $t7, %lo(game_options_entries) # addiu $t7, $t7, 0xa7c /* 0E0524 7F0AB9F4 000E7080 */ sll $t6, $t6, 2 /* 0E0528 7F0AB9F8 01CF4021 */ addu $t0, $t6, $t7 /* 0E052C 7F0AB9FC 8D020008 */ lw $v0, 8($t0) @@ -10207,11 +8960,11 @@ glabel sub_GAME_7F0AB908 /* 0E0570 7F0ABA40 AFA50050 */ sw $a1, 0x50($sp) /* 0E0574 7F0ABA44 AFA60068 */ sw $a2, 0x68($sp) /* 0E0578 7F0ABA48 AFA9005C */ sw $t1, 0x5c($sp) -/* 0E057C 7F0ABA4C 0FC2ADF6 */ jal sub_GAME_7F0AB7D8 +/* 0E057C 7F0ABA4C 0FC2ADF6 */ jal game_option_toggle_input /* 0E0580 7F0ABA50 AFAA0058 */ sw $t2, 0x58($sp) /* 0E0584 7F0ABA54 8FA60068 */ lw $a2, 0x68($sp) -/* 0E0588 7F0ABA58 3C0B8004 */ lui $t3, %hi(D_80040A7C) -/* 0E058C 7F0ABA5C 256B0A7C */ addiu $t3, %lo(D_80040A7C) # addiu $t3, $t3, 0xa7c +/* 0E0588 7F0ABA58 3C0B8004 */ lui $t3, %hi(game_options_entries) +/* 0E058C 7F0ABA5C 256B0A7C */ addiu $t3, %lo(game_options_entries) # addiu $t3, $t3, 0xa7c /* 0E0590 7F0ABA60 0006C880 */ sll $t9, $a2, 2 /* 0E0594 7F0ABA64 0326C823 */ subu $t9, $t9, $a2 /* 0E0598 7F0ABA68 0019C880 */ sll $t9, $t9, 2 @@ -10336,143 +9089,36 @@ glabel sub_GAME_7F0AB908 -#ifdef NONMATCHING -void sub_GAME_7F0ABC1C(void) { +s32 draw_toggle_options(s32 param_1) +{ + s32 y_offset; + s32 i; + + param_1 = microcode_constructor(param_1); + for (i = 0, y_offset = 80; i < 8; i = i + 1, y_offset = y_offset + 15) { + + if ( i == game_options_index - 2) + { + if (watch_soundrelated_maybe) + { + param_1 = sub_GAME_7F0AB908(sub_GAME_7F0A9398(param_1, 0x40, y_offset, get_textptr_for_textID(game_options_entries[i].text[0]), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0), y_offset, i, 2); + } + else + { + + param_1 = sub_GAME_7F0AB908(sub_GAME_7F0A9398(param_1, 0x40, y_offset, get_textptr_for_textID(game_options_entries[i].text[0]), 0xA0FFA0F0, 0, -1, 0, 0, 0x3000B0, 0), y_offset, i, 1); + } + } + else + { + param_1 = sub_GAME_7F0AB908(sub_GAME_7F0A9398(param_1, 0x40, y_offset, get_textptr_for_textID(game_options_entries[i].text[0]), 0xFF00B0, 0, -1, 0, 0, 0x3000B0, 0), y_offset, i, 0); + } + + } + + return param_1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0ABC1C -/* 0E074C 7F0ABC1C 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0E0750 7F0ABC20 AFBF005C */ sw $ra, 0x5c($sp) -/* 0E0754 7F0ABC24 AFBE0058 */ sw $fp, 0x58($sp) -/* 0E0758 7F0ABC28 AFB70054 */ sw $s7, 0x54($sp) -/* 0E075C 7F0ABC2C AFB60050 */ sw $s6, 0x50($sp) -/* 0E0760 7F0ABC30 AFB5004C */ sw $s5, 0x4c($sp) -/* 0E0764 7F0ABC34 AFB40048 */ sw $s4, 0x48($sp) -/* 0E0768 7F0ABC38 AFB30044 */ sw $s3, 0x44($sp) -/* 0E076C 7F0ABC3C AFB20040 */ sw $s2, 0x40($sp) -/* 0E0770 7F0ABC40 AFB1003C */ sw $s1, 0x3c($sp) -/* 0E0774 7F0ABC44 0FC2B366 */ jal microcode_constructor -/* 0E0778 7F0ABC48 AFB00038 */ sw $s0, 0x38($sp) -/* 0E077C 7F0ABC4C 3C138004 */ lui $s3, %hi(D_80040A7C) -/* 0E0780 7F0ABC50 3C170070 */ lui $s7, (0x007000A0 >> 16) # lui $s7, 0x70 -/* 0E0784 7F0ABC54 3C168004 */ lui $s6, %hi(watch_soundrelated_maybe) -/* 0E0788 7F0ABC58 3C158004 */ lui $s5, %hi(D_8004099C) -/* 0E078C 7F0ABC5C 3C140030 */ lui $s4, (0x003000B0 >> 16) # lui $s4, 0x30 -/* 0E0790 7F0ABC60 00409025 */ move $s2, $v0 -/* 0E0794 7F0ABC64 369400B0 */ ori $s4, (0x003000B0 & 0xFFFF) # ori $s4, $s4, 0xb0 -/* 0E0798 7F0ABC68 26B5099C */ addiu $s5, %lo(D_8004099C) # addiu $s5, $s5, 0x99c -/* 0E079C 7F0ABC6C 26D609A8 */ addiu $s6, %lo(watch_soundrelated_maybe) # addiu $s6, $s6, 0x9a8 -/* 0E07A0 7F0ABC70 36F700A0 */ ori $s7, (0x007000A0 & 0xFFFF) # ori $s7, $s7, 0xa0 -/* 0E07A4 7F0ABC74 26730A7C */ addiu $s3, %lo(D_80040A7C) # addiu $s3, $s3, 0xa7c -/* 0E07A8 7F0ABC78 00008825 */ move $s1, $zero -/* 0E07AC 7F0ABC7C 24100050 */ li $s0, 80 -/* 0E07B0 7F0ABC80 241E0008 */ li $fp, 8 -.L7F0ABC84: -/* 0E07B4 7F0ABC84 8EAF0000 */ lw $t7, ($s5) -/* 0E07B8 7F0ABC88 262E0002 */ addiu $t6, $s1, 2 -/* 0E07BC 7F0ABC8C 15CF0033 */ bne $t6, $t7, .L7F0ABD5C -/* 0E07C0 7F0ABC90 00000000 */ nop -/* 0E07C4 7F0ABC94 8ED80000 */ lw $t8, ($s6) -/* 0E07C8 7F0ABC98 13000018 */ beqz $t8, .L7F0ABCFC -/* 0E07CC 7F0ABC9C 00000000 */ nop -/* 0E07D0 7F0ABCA0 0FC30776 */ jal get_textptr_for_textID -/* 0E07D4 7F0ABCA4 96640000 */ lhu $a0, ($s3) -/* 0E07D8 7F0ABCA8 2419FFFF */ li $t9, -1 -/* 0E07DC 7F0ABCAC 24080001 */ li $t0, 1 -/* 0E07E0 7F0ABCB0 AFA80014 */ sw $t0, 0x14($sp) -/* 0E07E4 7F0ABCB4 AFB90010 */ sw $t9, 0x10($sp) -/* 0E07E8 7F0ABCB8 02402025 */ move $a0, $s2 -/* 0E07EC 7F0ABCBC 24050040 */ li $a1, 64 -/* 0E07F0 7F0ABCC0 02003025 */ move $a2, $s0 -/* 0E07F4 7F0ABCC4 00403825 */ move $a3, $v0 -/* 0E07F8 7F0ABCC8 AFB70018 */ sw $s7, 0x18($sp) -/* 0E07FC 7F0ABCCC AFA0001C */ sw $zero, 0x1c($sp) -/* 0E0800 7F0ABCD0 AFA00020 */ sw $zero, 0x20($sp) -/* 0E0804 7F0ABCD4 AFB40024 */ sw $s4, 0x24($sp) -/* 0E0808 7F0ABCD8 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0E080C 7F0ABCDC AFA00028 */ sw $zero, 0x28($sp) -/* 0E0810 7F0ABCE0 00402025 */ move $a0, $v0 -/* 0E0814 7F0ABCE4 02002825 */ move $a1, $s0 -/* 0E0818 7F0ABCE8 02203025 */ move $a2, $s1 -/* 0E081C 7F0ABCEC 0FC2AE42 */ jal sub_GAME_7F0AB908 -/* 0E0820 7F0ABCF0 24070002 */ li $a3, 2 -/* 0E0824 7F0ABCF4 10000030 */ b .L7F0ABDB8 -/* 0E0828 7F0ABCF8 00409025 */ move $s2, $v0 -.L7F0ABCFC: -/* 0E082C 7F0ABCFC 0FC30776 */ jal get_textptr_for_textID -/* 0E0830 7F0ABD00 96640000 */ lhu $a0, ($s3) -/* 0E0834 7F0ABD04 3C09A0FF */ lui $t1, (0xA0FFA0F0 >> 16) # lui $t1, 0xa0ff -/* 0E0838 7F0ABD08 3529A0F0 */ ori $t1, (0xA0FFA0F0 & 0xFFFF) # ori $t1, $t1, 0xa0f0 -/* 0E083C 7F0ABD0C 240AFFFF */ li $t2, -1 -/* 0E0840 7F0ABD10 AFAA0018 */ sw $t2, 0x18($sp) -/* 0E0844 7F0ABD14 AFA90010 */ sw $t1, 0x10($sp) -/* 0E0848 7F0ABD18 02402025 */ move $a0, $s2 -/* 0E084C 7F0ABD1C 24050040 */ li $a1, 64 -/* 0E0850 7F0ABD20 02003025 */ move $a2, $s0 -/* 0E0854 7F0ABD24 00403825 */ move $a3, $v0 -/* 0E0858 7F0ABD28 AFA00014 */ sw $zero, 0x14($sp) -/* 0E085C 7F0ABD2C AFA0001C */ sw $zero, 0x1c($sp) -/* 0E0860 7F0ABD30 AFA00020 */ sw $zero, 0x20($sp) -/* 0E0864 7F0ABD34 AFB40024 */ sw $s4, 0x24($sp) -/* 0E0868 7F0ABD38 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0E086C 7F0ABD3C AFA00028 */ sw $zero, 0x28($sp) -/* 0E0870 7F0ABD40 00402025 */ move $a0, $v0 -/* 0E0874 7F0ABD44 02002825 */ move $a1, $s0 -/* 0E0878 7F0ABD48 02203025 */ move $a2, $s1 -/* 0E087C 7F0ABD4C 0FC2AE42 */ jal sub_GAME_7F0AB908 -/* 0E0880 7F0ABD50 24070001 */ li $a3, 1 -/* 0E0884 7F0ABD54 10000018 */ b .L7F0ABDB8 -/* 0E0888 7F0ABD58 00409025 */ move $s2, $v0 -.L7F0ABD5C: -/* 0E088C 7F0ABD5C 0FC30776 */ jal get_textptr_for_textID -/* 0E0890 7F0ABD60 96640000 */ lhu $a0, ($s3) -/* 0E0894 7F0ABD64 3C0B00FF */ lui $t3, (0x00FF00B0 >> 16) # lui $t3, 0xff -/* 0E0898 7F0ABD68 356B00B0 */ ori $t3, (0x00FF00B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0E089C 7F0ABD6C 240CFFFF */ li $t4, -1 -/* 0E08A0 7F0ABD70 AFAC0018 */ sw $t4, 0x18($sp) -/* 0E08A4 7F0ABD74 AFAB0010 */ sw $t3, 0x10($sp) -/* 0E08A8 7F0ABD78 02402025 */ move $a0, $s2 -/* 0E08AC 7F0ABD7C 24050040 */ li $a1, 64 -/* 0E08B0 7F0ABD80 02003025 */ move $a2, $s0 -/* 0E08B4 7F0ABD84 00403825 */ move $a3, $v0 -/* 0E08B8 7F0ABD88 AFA00014 */ sw $zero, 0x14($sp) -/* 0E08BC 7F0ABD8C AFA0001C */ sw $zero, 0x1c($sp) -/* 0E08C0 7F0ABD90 AFA00020 */ sw $zero, 0x20($sp) -/* 0E08C4 7F0ABD94 AFB40024 */ sw $s4, 0x24($sp) -/* 0E08C8 7F0ABD98 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0E08CC 7F0ABD9C AFA00028 */ sw $zero, 0x28($sp) -/* 0E08D0 7F0ABDA0 00402025 */ move $a0, $v0 -/* 0E08D4 7F0ABDA4 02002825 */ move $a1, $s0 -/* 0E08D8 7F0ABDA8 02203025 */ move $a2, $s1 -/* 0E08DC 7F0ABDAC 0FC2AE42 */ jal sub_GAME_7F0AB908 -/* 0E08E0 7F0ABDB0 00003825 */ move $a3, $zero -/* 0E08E4 7F0ABDB4 00409025 */ move $s2, $v0 -.L7F0ABDB8: -/* 0E08E8 7F0ABDB8 26310001 */ addiu $s1, $s1, 1 -/* 0E08EC 7F0ABDBC 2673000C */ addiu $s3, $s3, 0xc -/* 0E08F0 7F0ABDC0 163EFFB0 */ bne $s1, $fp, .L7F0ABC84 -/* 0E08F4 7F0ABDC4 2610000F */ addiu $s0, $s0, 0xf -/* 0E08F8 7F0ABDC8 8FBF005C */ lw $ra, 0x5c($sp) -/* 0E08FC 7F0ABDCC 02401025 */ move $v0, $s2 -/* 0E0900 7F0ABDD0 8FB20040 */ lw $s2, 0x40($sp) -/* 0E0904 7F0ABDD4 8FB00038 */ lw $s0, 0x38($sp) -/* 0E0908 7F0ABDD8 8FB1003C */ lw $s1, 0x3c($sp) -/* 0E090C 7F0ABDDC 8FB30044 */ lw $s3, 0x44($sp) -/* 0E0910 7F0ABDE0 8FB40048 */ lw $s4, 0x48($sp) -/* 0E0914 7F0ABDE4 8FB5004C */ lw $s5, 0x4c($sp) -/* 0E0918 7F0ABDE8 8FB60050 */ lw $s6, 0x50($sp) -/* 0E091C 7F0ABDEC 8FB70054 */ lw $s7, 0x54($sp) -/* 0E0920 7F0ABDF0 8FBE0058 */ lw $fp, 0x58($sp) -/* 0E0924 7F0ABDF4 03E00008 */ jr $ra -/* 0E0928 7F0ABDF8 27BD0060 */ addiu $sp, $sp, 0x60 -) -#endif - - - #ifdef NONMATCHING @@ -10486,7 +9132,7 @@ glabel sub_GAME_7F0ABDFC /* 0E092C 7F0ABDFC 27BDFFA0 */ addiu $sp, $sp, -0x60 /* 0E0930 7F0ABE00 AFBF003C */ sw $ra, 0x3c($sp) /* 0E0934 7F0ABE04 AFB00038 */ sw $s0, 0x38($sp) -/* 0E0938 7F0ABE08 0FC29C53 */ jal sub_GAME_7F0A714C +/* 0E0938 7F0ABE08 0FC29C53 */ jal draw_background_health_and_armor /* 0E093C 7F0ABE0C 00003025 */ move $a2, $zero /* 0E0940 7F0ABE10 0FC1F97F */ jal check_watch_page_transistion_running /* 0E0944 7F0ABE14 00408025 */ move $s0, $v0 @@ -10508,8 +9154,8 @@ glabel sub_GAME_7F0ABDFC /* 0E0984 7F0ABE54 00408025 */ move $s0, $v0 /* 0E0988 7F0ABE58 0FC30776 */ jal get_textptr_for_textID /* 0E098C 7F0ABE5C 3404AC35 */ li $a0, 44085 -/* 0E0990 7F0ABE60 3C088004 */ lui $t0, %hi(D_8004099C) -/* 0E0994 7F0ABE64 8D08099C */ lw $t0, %lo(D_8004099C)($t0) +/* 0E0990 7F0ABE60 3C088004 */ lui $t0, %hi(game_options_index) +/* 0E0994 7F0ABE64 8D08099C */ lw $t0, %lo(game_options_index)($t0) /* 0E0998 7F0ABE68 24180040 */ li $t8, 64 /* 0E099C 7F0ABE6C 24190025 */ li $t9, 37 /* 0E09A0 7F0ABE70 3C0300FF */ lui $v1, (0x00FF00B0 >> 16) # lui $v1, 0xff @@ -10541,8 +9187,8 @@ glabel sub_GAME_7F0ABDFC /* 0E0A00 7F0ABED0 8FA3005C */ lw $v1, 0x5c($sp) /* 0E0A04 7F0ABED4 8FA70058 */ lw $a3, 0x58($sp) /* 0E0A08 7F0ABED8 1160001C */ beqz $t3, .L7F0ABF4C -/* 0E0A0C 7F0ABEDC 3C0C8004 */ lui $t4, %hi(D_8004099C) -/* 0E0A10 7F0ABEE0 8D8C099C */ lw $t4, %lo(D_8004099C)($t4) +/* 0E0A0C 7F0ABEDC 3C0C8004 */ lui $t4, %hi(game_options_index) +/* 0E0A10 7F0ABEE0 8D8C099C */ lw $t4, %lo(game_options_index)($t4) /* 0E0A14 7F0ABEE4 02002025 */ move $a0, $s0 /* 0E0A18 7F0ABEE8 27A50054 */ addiu $a1, $sp, 0x54 /* 0E0A1C 7F0ABEEC 15800017 */ bnez $t4, .L7F0ABF4C @@ -10594,8 +9240,8 @@ glabel sub_GAME_7F0ABDFC /* 0E0ACC 7F0ABF9C 3404AC36 */ li $a0, 44086 /* 0E0AD0 7F0ABFA0 0FC30776 */ jal get_textptr_for_textID /* 0E0AD4 7F0ABFA4 AFA3005C */ sw $v1, 0x5c($sp) -/* 0E0AD8 7F0ABFA8 3C0F8004 */ lui $t7, %hi(D_8004099C) -/* 0E0ADC 7F0ABFAC 8DEF099C */ lw $t7, %lo(D_8004099C)($t7) +/* 0E0AD8 7F0ABFA8 3C0F8004 */ lui $t7, %hi(game_options_index) +/* 0E0ADC 7F0ABFAC 8DEF099C */ lw $t7, %lo(game_options_index)($t7) /* 0E0AE0 7F0ABFB0 240D0040 */ li $t5, 64 /* 0E0AE4 7F0ABFB4 240E003B */ li $t6, 59 /* 0E0AE8 7F0ABFB8 24010001 */ li $at, 1 @@ -10627,8 +9273,8 @@ glabel sub_GAME_7F0ABDFC /* 0E0B48 7F0AC018 8FA3005C */ lw $v1, 0x5c($sp) /* 0E0B4C 7F0AC01C 8FA70058 */ lw $a3, 0x58($sp) /* 0E0B50 7F0AC020 11000019 */ beqz $t0, .L7F0AC088 -/* 0E0B54 7F0AC024 3C098004 */ lui $t1, %hi(D_8004099C) -/* 0E0B58 7F0AC028 8D29099C */ lw $t1, %lo(D_8004099C)($t1) +/* 0E0B54 7F0AC024 3C098004 */ lui $t1, %hi(game_options_index) +/* 0E0B58 7F0AC028 8D29099C */ lw $t1, %lo(game_options_index)($t1) /* 0E0B5C 7F0AC02C 24010001 */ li $at, 1 /* 0E0B60 7F0AC030 02002025 */ move $a0, $s0 /* 0E0B64 7F0AC034 15210014 */ bne $t1, $at, .L7F0AC088 @@ -10670,7 +9316,7 @@ glabel sub_GAME_7F0ABDFC /* 0E0BF0 7F0AC0C0 AFA90020 */ sw $t1, 0x20($sp) /* 0E0BF4 7F0AC0C4 00408025 */ move $s0, $v0 .L7F0AC0C8: -/* 0E0BF8 7F0AC0C8 0FC2AF07 */ jal sub_GAME_7F0ABC1C +/* 0E0BF8 7F0AC0C8 0FC2AF07 */ jal draw_toggle_options /* 0E0BFC 7F0AC0CC 02002025 */ move $a0, $s0 /* 0E0C00 7F0AC0D0 00408025 */ move $s0, $v0 /* 0E0C04 7F0AC0D4 8FBF003C */ lw $ra, 0x3c($sp) @@ -10759,6 +9405,32 @@ void sub_GAME_7F0AC168(void) { } #else +//D:80057FC0 +const u32 D_80057FC0[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; +//D:80058440 +const char D_80058440[] = " \n"; +//D:80058444 +const char D_80058444[] = " \n\n"; +//D:80058448 +const char aC_2[] = "%c: "; +//D:80058450 +const char D_80058450[] = " \n"; +//D:80058454 +const char D_80058454[] = " \n\n"; GLOBAL_ASM( .late_rodata /*D:80058570*/ @@ -10782,7 +9454,7 @@ glabel sub_GAME_7F0AC168 /* 0E0CB8 7F0AC188 AFB20040 */ sw $s2, 0x40($sp) /* 0E0CBC 7F0AC18C AFB1003C */ sw $s1, 0x3c($sp) /* 0E0CC0 7F0AC190 AFB00038 */ sw $s0, 0x38($sp) -/* 0E0CC4 7F0AC194 0FC29C53 */ jal sub_GAME_7F0A714C +/* 0E0CC4 7F0AC194 0FC29C53 */ jal draw_background_health_and_armor /* 0E0CC8 7F0AC198 00003025 */ move $a2, $zero /* 0E0CCC 7F0AC19C 0FC1F97F */ jal check_watch_page_transistion_running /* 0E0CD0 7F0AC1A0 AFA20DE8 */ sw $v0, 0xde8($sp) @@ -10910,8 +9582,8 @@ glabel sub_GAME_7F0AC168 /* 0E0EA8 7F0AC378 AFAD001C */ sw $t5, 0x1c($sp) /* 0E0EAC 7F0AC37C 0FC2B6AF */ jal en_text_write_stuff /* 0E0EB0 7F0AC380 AFAC0020 */ sw $t4, 0x20($sp) -/* 0E0EB4 7F0AC384 3C0F8004 */ lui $t7, %hi(D_800409A0) -/* 0E0EB8 7F0AC388 8DEF09A0 */ lw $t7, %lo(D_800409A0)($t7) +/* 0E0EB4 7F0AC384 3C0F8004 */ lui $t7, %hi(mission_brief_index) +/* 0E0EB8 7F0AC388 8DEF09A0 */ lw $t7, %lo(mission_brief_index)($t7) /* 0E0EBC 7F0AC38C 24030041 */ li $v1, 65 /* 0E0EC0 7F0AC390 AFA20DE8 */ sw $v0, 0xde8($sp) /* 0E0EC4 7F0AC394 2DE10005 */ sltiu $at, $t7, 5 @@ -10938,7 +9610,7 @@ glabel sub_GAME_7F0AC168 /* 0E0F14 7F0AC3E4 8FA70D48 */ lw $a3, 0xd48($sp) /* 0E0F18 7F0AC3E8 0FC2BAD9 */ jal sub_GAME_7F0AEB64 /* 0E0F1C 7F0AC3EC AFAE0010 */ sw $t6, 0x10($sp) -/* 0E0F20 7F0AC3F0 0FC29986 */ jal sub_GAME_7F0A6618 +/* 0E0F20 7F0AC3F0 0FC29986 */ jal mission_brief_background_navigation /* 0E0F24 7F0AC3F4 00000000 */ nop /* 0E0F28 7F0AC3F8 1000013D */ b .L7F0AC8F0 /* 0E0F2C 7F0AC3FC 8FAA0D4C */ lw $t2, 0xd4c($sp) @@ -10957,7 +9629,7 @@ glabel sub_GAME_7F0AC168 /* 0E0F5C 7F0AC42C 8FA70D48 */ lw $a3, 0xd48($sp) /* 0E0F60 7F0AC430 0FC2BAD9 */ jal sub_GAME_7F0AEB64 /* 0E0F64 7F0AC434 AFAB0010 */ sw $t3, 0x10($sp) -/* 0E0F68 7F0AC438 0FC299A8 */ jal sub_GAME_7F0A66A0 +/* 0E0F68 7F0AC438 0FC299A8 */ jal mission_brief_m_briefing_navigation /* 0E0F6C 7F0AC43C 00000000 */ nop /* 0E0F70 7F0AC440 1000012B */ b .L7F0AC8F0 /* 0E0F74 7F0AC444 8FAA0D4C */ lw $t2, 0xd4c($sp) @@ -10976,7 +9648,7 @@ glabel sub_GAME_7F0AC168 /* 0E0FA4 7F0AC474 8FA70D48 */ lw $a3, 0xd48($sp) /* 0E0FA8 7F0AC478 0FC2BAD9 */ jal sub_GAME_7F0AEB64 /* 0E0FAC 7F0AC47C AFA90010 */ sw $t1, 0x10($sp) -/* 0E0FB0 7F0AC480 0FC299CB */ jal sub_GAME_7F0A672C +/* 0E0FB0 7F0AC480 0FC299CB */ jal mission_brief_q_branch_navigation /* 0E0FB4 7F0AC484 00000000 */ nop /* 0E0FB8 7F0AC488 10000119 */ b .L7F0AC8F0 /* 0E0FBC 7F0AC48C 8FAA0D4C */ lw $t2, 0xd4c($sp) @@ -10995,7 +9667,7 @@ glabel sub_GAME_7F0AC168 /* 0E0FEC 7F0AC4BC 8FA70D48 */ lw $a3, 0xd48($sp) /* 0E0FF0 7F0AC4C0 0FC2BAD9 */ jal sub_GAME_7F0AEB64 /* 0E0FF4 7F0AC4C4 AFB80010 */ sw $t8, 0x10($sp) -/* 0E0FF8 7F0AC4C8 0FC299EF */ jal sub_GAME_7F0A67BC +/* 0E0FF8 7F0AC4C8 0FC299EF */ jal mission_brief_moneypenny_navigation /* 0E0FFC 7F0AC4CC 00000000 */ nop /* 0E1000 7F0AC4D0 10000107 */ b .L7F0AC8F0 /* 0E1004 7F0AC4D4 8FAA0D4C */ lw $t2, 0xd4c($sp) @@ -11284,7 +9956,7 @@ glabel sub_GAME_7F0AC168 .L7F0AC8DC: /* 0E140C 7F0AC8DC 0FC2B2E8 */ jal setTextOverlapCorrection /* 0E1410 7F0AC8E0 2404FFFF */ li $a0, -1 -/* 0E1414 7F0AC8E4 0FC29A13 */ jal sub_GAME_7F0A684C +/* 0E1414 7F0AC8E4 0FC29A13 */ jal mission_brief_objectives_navigation /* 0E1418 7F0AC8E8 00000000 */ nop .L7F0AC8EC: /* 0E141C 7F0AC8EC 8FAA0D4C */ lw $t2, 0xd4c($sp) @@ -11376,8 +10048,48 @@ glabel sub_GAME_7F0AC168 #ifdef NONMATCHING -void sub_GAME_7F0ACA28(void) { +//TODO: Uses v0 instead of v1 +s32 sub_GAME_7F0ACA28(s32 arg0, s32 arg1, s32 arg2) +{ + sub_GAME_7F0A70AC(watch_screen_index, &pPlayer->buffer_for_watch_greenbackdrop_vertices); + + if (arg2 == 1) + { + set_BONDdata_paused_flag(0); + sub_GAME_7F0BD8FC(0); + if ((watch_screen_index != 1) && (get_controller_buttons_pressed(0, 0xA000) != 0)) + { + sub_GAME_7F0A4EF8(); + } + + switch (watch_screen_index) + { + case WATCH_INDEX_MISSION_STATUS: + arg0 = draw_watch_mission_status_page(arg0, arg1); + break; + case WATCH_INDEX_INVENTORY: + arg0 = debug_gun_watch_move_related2(arg0, arg1); + break; + case WATCH_INDEX_CONTROL_OPTIONS: + arg0 = sub_GAME_7F0AB4B8(arg0, arg1); + break; + case WATCH_INDEX_GAME_OPTIONS: + arg0 = sub_GAME_7F0ABDFC(arg0, arg1); + break; + case WATCH_INDEX_MISSION_BRIEFING: + arg0 = sub_GAME_7F0AC168(arg0, arg1); + } + } + else if (arg2 == 0) + { + + sub_GAME_7F0BD8FC(1); + set_BONDdata_paused_flag(1); + arg0 = sub_GAME_7F0A77A8(arg0, arg1); + + } + return arg0; } #else GLOBAL_ASM( @@ -11436,7 +10148,7 @@ glabel sub_GAME_7F0ACA28 /* 0E15FC 7F0ACACC 00000000 */ nop .L7F0ACAD0: /* 0E1600 7F0ACAD0 02002025 */ move $a0, $s0 -/* 0E1604 7F0ACAD4 0FC2A0C3 */ jal sub_GAME_7F0A830C +/* 0E1604 7F0ACAD4 0FC2A0C3 */ jal draw_watch_mission_status_page /* 0E1608 7F0ACAD8 8FA50024 */ lw $a1, 0x24($sp) /* 0E160C 7F0ACADC 1000001F */ b .L7F0ACB5C /* 0E1610 7F0ACAE0 00408025 */ move $s0, $v0 diff --git a/src/game/watch.h b/src/game/watch.h index 40254df..18c011c 100644 --- a/src/game/watch.h +++ b/src/game/watch.h @@ -2,12 +2,57 @@ #define _WATCH_H_ #include "ultra64.h" -void zero_D_80040998(); +typedef enum WATCH_INDEX { + WATCH_INDEX_MISSION_STATUS = 0, + WATCH_INDEX_INVENTORY, + WATCH_INDEX_CONTROL_OPTIONS, + WATCH_INDEX_GAME_OPTIONS, + WATCH_INDEX_MISSION_BRIEFING +} WATCH_INDEX; -void zero_D_8004099C(); +typedef enum WATCH_CONTROLLER_OPTIONS_INDEX { + CONTROLLER_OPTIONS_INDEX_STYLE = 0, + CONTROLLER_OPTIONS_INDEX_INPUTS +} WATCH_CONTROLLER_OPTIONS_INDEX; + +typedef enum WATCH_GAME_OPTIONS_INDEX { + GAME_OPTIONS_INDEX_MUSIC = 0, + GAME_OPTIONS_INDEX_FX, + GAME_OPTIONS_INDEX_LOOK_UPDOWN, + GAME_OPTIONS_INDEX_AUTO_AIM, + GAME_OPTIONS_INDEX_AIM_CONTROL, + GAME_OPTIONS_INDEX_SIGHT_ONSCREEN, + GAME_OPTIONS_INDEX_LOOK_AHEAD, + GAME_OPTIONS_INDEX_AMMO_ONSCREEN, + GAME_OPTIONS_INDEX_SCREEN_SIZE, + GAME_OPTIONS_INDEX_RATIO +} WATCH_GAME_OPTIONS_INDEX; + +typedef enum WATCH_BRIEF_INDEX { + BRIEF_INDEX_BACKGROUND = 0, + BRIEF_INDEX_M, + BRIEF_INDEX_Q, + BRIEF_INDEX_MONEYPENNY, + BRIEF_INDEX_OBJECTIVES +} WATCH_BRIEF_INDEX; + +struct game_options { + u16 text[4]; + u32 current_value; +}; + +extern struct game_options game_options_entries[]; + +void reset_controller_options_index(); + +void reset_game_options_index(); void zero_D_800409A4(); +f32 sub_GAME_7F0A6A2C(f32 arg0); + +f32 sub_GAME_7F0A95C4(f32 param_1, f32 param_2, f32 param_3); + #endif diff --git a/src/joy.c b/src/joy.c index 6f8661a..f91974f 100644 --- a/src/joy.c +++ b/src/joy.c @@ -1909,7 +1909,7 @@ glabel get_controller_buttons_held #ifdef NONMATCHING -s32 get_controller_buttons_pressed(s32 arg0, s32 arg1) { +s32 get_controller_buttons_pressed(s8 arg0, s32 arg1) { s32 temp_t7; void *temp_v1; diff --git a/src/joy.h b/src/joy.h index 69dfef8..09498a2 100644 --- a/src/joy.h +++ b/src/joy.h @@ -4,6 +4,6 @@ #include "ultra64.h" void *joyInitDebugNoticeList(void); s32 get_attached_controller_count(void); -s32 get_controller_buttons_pressed(s32 arg0, s32 arg1); +s32 get_controller_buttons_pressed(s8 arg0, s32 arg1); #endif diff --git a/src/libultra/ai.c b/src/libultra/ai.c new file mode 100644 index 0000000..261fcba --- /dev/null +++ b/src/libultra/ai.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" +#include "hardware.h" + +s32 __osAiDeviceBusy(void) { + register s32 status = HW_REG(AI_STATUS_REG, u32); + if ((status & AI_STATUS_AI_FULL) != 0) { + return 1; + } else { + return 0; + } +} diff --git a/src/libultra/ai.s b/src/libultra/ai.s deleted file mode 100644 index 792456e..0000000 --- a/src/libultra/ai.s +++ /dev/null @@ -1,28 +0,0 @@ -# Goldeneye 007 (U) disassembly and split file -# generated by n64split v0.4a - N64 ROM splitter - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -.section .text -glabel __osAiDeviceBusy -/* 019CF0 700190F0 3C0EA450 */ lui $t6, %hi(AI_STATUS_REG) # $t6, 0xa450 -/* 019CF4 700190F4 8DC4000C */ lw $a0, %lo(AI_STATUS_REG)($t6) -/* 019CF8 700190F8 3C018000 */ lui $at, 0x8000 -/* 019CFC 700190FC 27BDFFF8 */ addiu $sp, $sp, -8 -/* 019D00 70019100 00817824 */ and $t7, $a0, $at -/* 019D04 70019104 11E00003 */ beqz $t7, .L70019114 -/* 019D08 70019108 00000000 */ nop -/* 019D0C 7001910C 10000002 */ b .L70019118 -/* 019D10 70019110 24020001 */ li $v0, 1 -.L70019114: -/* 019D14 70019114 00001025 */ move $v0, $zero -.L70019118: -/* 019D18 70019118 03E00008 */ jr $ra -/* 019D1C 7001911C 27BD0008 */ addiu $sp, $sp, 8 diff --git a/src/libultra/aigetlen.c b/src/libultra/aigetlen.c new file mode 100644 index 0000000..08458a7 --- /dev/null +++ b/src/libultra/aigetlen.c @@ -0,0 +1,7 @@ +#include "libultra_internal.h" +#include "osAi.h" +#include "hardware.h" + +u32 osAiGetLength() { + return HW_REG(AI_LEN_REG, u32); +} diff --git a/src/libultra/aigetlen.s b/src/libultra/aigetlen.s deleted file mode 100644 index f363dab..0000000 --- a/src/libultra/aigetlen.s +++ /dev/null @@ -1,15 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" - -glabel osAiGetLength -/* 00FBB0 7000EFB0 3C0EA450 */ lui $t6, 0xa450 -/* 00FBB4 7000EFB4 03E00008 */ jr $ra -/* 00FBB8 7000EFB8 8DC20004 */ lw $v0, 4($t6) - diff --git a/src/libultra/aisetfreq.c b/src/libultra/aisetfreq.c new file mode 100644 index 0000000..373c1a1 --- /dev/null +++ b/src/libultra/aisetfreq.c @@ -0,0 +1,30 @@ +#include "libultra_internal.h" +#include "osAi.h" +#include "hardware.h" + +extern s32 osViClock; + +s32 osAiSetFrequency(u32 freq) { + register u32 a1; + register s32 a2; + register float ftmp; + ftmp = osViClock / (float) freq + .5f; + + a1 = ftmp; + + if (a1 < 0x84) { + return -1; + } + + a2 = (a1 / 66) & 0xff; + if (a2 > 16) { + a2 = 16; + } + + HW_REG(AI_DACRATE_REG, u32) = a1 - 1; + HW_REG(AI_BITRATE_REG, u32) = a2 - 1; + HW_REG(AI_CONTROL_REG, u32) = 1; // enable dma + return osViClock / (s32) a1; +} + + diff --git a/src/libultra/aisetfreq.s b/src/libultra/aisetfreq.s deleted file mode 100644 index bd786cc..0000000 --- a/src/libultra/aisetfreq.s +++ /dev/null @@ -1,106 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osAiSetFrequency -/* 00F530 7000E930 3C0E8003 */ lui $t6, %hi(osViClock)#%hi(osViClock) -/* 00F534 7000E934 8DCE804C */ lw $t6, %lo(osViClock)($t6)#%lo(osViClock)($t6) -/* 00F538 7000E938 44844000 */ mtc1 $a0, $f8 -/* 00F53C 7000E93C 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 00F540 7000E940 448E2000 */ mtc1 $t6, $f4 -/* 00F544 7000E944 468042A0 */ cvt.s.w $f10, $f8 -/* 00F548 7000E948 04810005 */ bgez $a0, .L7000E960 -/* 00F54C 7000E94C 468021A0 */ cvt.s.w $f6, $f4 -/* 00F550 7000E950 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 00F554 7000E954 44818000 */ mtc1 $at, $f16 -/* 00F558 7000E958 00000000 */ nop -/* 00F55C 7000E95C 46105280 */ add.s $f10, $f10, $f16 -.L7000E960: -/* 00F560 7000E960 460A3483 */ div.s $f18, $f6, $f10 -/* 00F564 7000E964 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 00F568 7000E968 44812000 */ mtc1 $at, $f4 -/* 00F56C 7000E96C 24050001 */ li $a1, 1 -/* 00F570 7000E970 46049300 */ add.s $f12, $f18, $f4 -/* 00F574 7000E974 444FF800 */ cfc1 $t7, $31 -/* 00F578 7000E978 44C5F800 */ ctc1 $a1, $31 -/* 00F57C 7000E97C 00000000 */ nop -/* 00F580 7000E980 46006224 */ cvt.w.s $f8, $f12 -/* 00F584 7000E984 4445F800 */ cfc1 $a1, $31 -/* 00F588 7000E988 00000000 */ nop -/* 00F58C 7000E98C 30A10004 */ andi $at, $a1, 4 -/* 00F590 7000E990 30A50078 */ andi $a1, $a1, 0x78 -/* 00F594 7000E994 10A00013 */ beqz $a1, .L7000E9E4 -/* 00F598 7000E998 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 00F59C 7000E99C 44814000 */ mtc1 $at, $f8 -/* 00F5A0 7000E9A0 24050001 */ li $a1, 1 -/* 00F5A4 7000E9A4 46086201 */ sub.s $f8, $f12, $f8 -/* 00F5A8 7000E9A8 44C5F800 */ ctc1 $a1, $31 -/* 00F5AC 7000E9AC 00000000 */ nop -/* 00F5B0 7000E9B0 46004224 */ cvt.w.s $f8, $f8 -/* 00F5B4 7000E9B4 4445F800 */ cfc1 $a1, $31 -/* 00F5B8 7000E9B8 00000000 */ nop -/* 00F5BC 7000E9BC 30A10004 */ andi $at, $a1, 4 -/* 00F5C0 7000E9C0 30A50078 */ andi $a1, $a1, 0x78 -/* 00F5C4 7000E9C4 14A00005 */ bnez $a1, .L7000E9DC -/* 00F5C8 7000E9C8 00000000 */ nop -/* 00F5CC 7000E9CC 44054000 */ mfc1 $a1, $f8 -/* 00F5D0 7000E9D0 3C018000 */ lui $at, 0x8000 -/* 00F5D4 7000E9D4 10000007 */ b .L7000E9F4 -/* 00F5D8 7000E9D8 00A12825 */ or $a1, $a1, $at -.L7000E9DC: -/* 00F5DC 7000E9DC 10000005 */ b .L7000E9F4 -/* 00F5E0 7000E9E0 2405FFFF */ li $a1, -1 -.L7000E9E4: -/* 00F5E4 7000E9E4 44054000 */ mfc1 $a1, $f8 -/* 00F5E8 7000E9E8 00000000 */ nop -/* 00F5EC 7000E9EC 04A0FFFB */ bltz $a1, .L7000E9DC -/* 00F5F0 7000E9F0 00000000 */ nop -.L7000E9F4: -/* 00F5F4 7000E9F4 44CFF800 */ ctc1 $t7, $31 -/* 00F5F8 7000E9F8 2CA10084 */ sltiu $at, $a1, 0x84 -/* 00F5FC 7000E9FC 10200003 */ beqz $at, .L7000EA0C -/* 00F600 7000EA00 00000000 */ nop -/* 00F604 7000EA04 10000020 */ b .L7000EA88 -/* 00F608 7000EA08 2402FFFF */ li $v0, -1 -.L7000EA0C: -/* 00F60C 7000EA0C 24010042 */ li $at, 66 -/* 00F610 7000EA10 00A1001B */ divu $zero, $a1, $at -/* 00F614 7000EA14 00003012 */ mflo $a2 -/* 00F618 7000EA18 30D800FF */ andi $t8, $a2, 0xff -/* 00F61C 7000EA1C 03003025 */ move $a2, $t8 -/* 00F620 7000EA20 28C10011 */ slti $at, $a2, 0x11 -/* 00F624 7000EA24 14200002 */ bnez $at, .L7000EA30 -/* 00F628 7000EA28 00000000 */ nop -/* 00F62C 7000EA2C 24060010 */ li $a2, 16 -.L7000EA30: -/* 00F630 7000EA30 24B9FFFF */ addiu $t9, $a1, -1 -/* 00F634 7000EA34 3C08A450 */ lui $t0, %hi(AI_DACRATE_REG) # $t0, 0xa450 -/* 00F638 7000EA38 AD190010 */ sw $t9, %lo(AI_DACRATE_REG)($t0) -/* 00F63C 7000EA3C 24C9FFFF */ addiu $t1, $a2, -1 -/* 00F640 7000EA40 3C0AA450 */ lui $t2, %hi(AI_BITRATE_REG) # $t2, 0xa450 -/* 00F644 7000EA44 AD490014 */ sw $t1, %lo(AI_BITRATE_REG)($t2) -/* 00F648 7000EA48 240B0001 */ li $t3, 1 -/* 00F64C 7000EA4C 3C0CA450 */ lui $t4, %hi(AI_CONTROL_REG) # $t4, 0xa450 -/* 00F650 7000EA50 AD8B0008 */ sw $t3, %lo(AI_CONTROL_REG)($t4) -/* 00F654 7000EA54 3C0D8003 */ lui $t5, %hi(osViClock) #osViClock -/* 00F658 7000EA58 8DAD804C */ lw $t5, %lo(osViClock)($t5) #osViClock -/* 00F65C 7000EA5C 01A5001A */ div $zero, $t5, $a1 -/* 00F660 7000EA60 00001012 */ mflo $v0 -/* 00F664 7000EA64 14A00002 */ bnez $a1, .L7000EA70 -/* 00F668 7000EA68 00000000 */ nop -/* 00F66C 7000EA6C 0007000D */ break 7 -.L7000EA70: -/* 00F670 7000EA70 2401FFFF */ li $at, -1 -/* 00F674 7000EA74 14A10004 */ bne $a1, $at, .L7000EA88 -/* 00F678 7000EA78 3C018000 */ lui $at, 0x8000 -/* 00F67C 7000EA7C 15A10002 */ bne $t5, $at, .L7000EA88 -/* 00F680 7000EA80 00000000 */ nop -/* 00F684 7000EA84 0006000D */ break 6 -.L7000EA88: -/* 00F688 7000EA88 03E00008 */ jr $ra -/* 00F68C 7000EA8C 27BD0010 */ addiu $sp, $sp, 0x10 diff --git a/src/libultra/aisetnextbuf.c b/src/libultra/aisetnextbuf.c new file mode 100644 index 0000000..cc27ae4 --- /dev/null +++ b/src/libultra/aisetnextbuf.c @@ -0,0 +1,40 @@ +#include "libultra_internal.h" +#include "osAi.h" +#include "hardware.h" + +u8 D_80334820 = 0; + +/** + * It is worth noting that a previous hardware bug has been fixed by a software + * patch in osAiSetNextBuffer. This bug occurred when the address of the end of the + * buffer specified by osAiSetNextBuffer was at a specific value. This value + * occurred when the following was true: + * + * (vaddr + nbytes) & 0x00003FFF == 0x00002000 + * + * (when the buffer ends with address of lower 14 bits 0x2000) In this case, the + * DMA transfer does not complete successfully. This can cause clicks and pops in + * the audio output. This bug no longer requires special handling by the application + * because it is now patched by osAiSetNextBuffer. + */ + +s32 osAiSetNextBuffer(void *buff, u32 len) { + u8 *sp1c = buff; + if (D_80334820 != 0) { + sp1c -= 0x2000; + } + + if ((((uintptr_t) buff + len) & 0x3fff) == 0x2000) { + D_80334820 = 1; + } else { + D_80334820 = 0; + } + + if (__osAiDeviceBusy()) { + return -1; + } + + HW_REG(AI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(sp1c); + HW_REG(AI_LEN_REG, u32) = len; + return 0; +} diff --git a/src/libultra/aisetnextbuf.s b/src/libultra/aisetnextbuf.s deleted file mode 100644 index 53492e4..0000000 --- a/src/libultra/aisetnextbuf.s +++ /dev/null @@ -1,63 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osAiSetNextBuffer -/* 00FB00 7000EF00 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 00FB04 7000EF04 3C0F8002 */ lui $t7, %hi(B_800276F0) -/* 00FB08 7000EF08 91EF76F0 */ lbu $t7, %lo(B_800276F0)($t7) -/* 00FB0C 7000EF0C AFA40020 */ sw $a0, 0x20($sp) -/* 00FB10 7000EF10 8FAE0020 */ lw $t6, 0x20($sp) -/* 00FB14 7000EF14 AFBF0014 */ sw $ra, 0x14($sp) -/* 00FB18 7000EF18 AFA50024 */ sw $a1, 0x24($sp) -/* 00FB1C 7000EF1C 11E00003 */ beqz $t7, .L7000EF2C -/* 00FB20 7000EF20 AFAE001C */ sw $t6, 0x1c($sp) -/* 00FB24 7000EF24 25D8E000 */ addiu $t8, $t6, -0x2000 -/* 00FB28 7000EF28 AFB8001C */ sw $t8, 0x1c($sp) -.L7000EF2C: -/* 00FB2C 7000EF2C 8FB90020 */ lw $t9, 0x20($sp) -/* 00FB30 7000EF30 8FA80024 */ lw $t0, 0x24($sp) -/* 00FB34 7000EF34 24012000 */ li $at, 8192 -/* 00FB38 7000EF38 03284821 */ addu $t1, $t9, $t0 -/* 00FB3C 7000EF3C 312A3FFF */ andi $t2, $t1, 0x3fff -/* 00FB40 7000EF40 15410005 */ bne $t2, $at, .L7000EF58 -/* 00FB44 7000EF44 00000000 */ nop -/* 00FB48 7000EF48 240B0001 */ li $t3, 1 -/* 00FB4C 7000EF4C 3C018002 */ lui $at, %hi(B_800276F0) -/* 00FB50 7000EF50 10000003 */ b .L7000EF60 -/* 00FB54 7000EF54 A02B76F0 */ sb $t3, %lo(B_800276F0)($at) -.L7000EF58: -/* 00FB58 7000EF58 3C018002 */ lui $at, %hi(B_800276F0) -/* 00FB5C 7000EF5C A02076F0 */ sb $zero, %lo(B_800276F0)($at) -.L7000EF60: -/* 00FB60 7000EF60 0C00643C */ jal __osAiDeviceBusy -/* 00FB64 7000EF64 00000000 */ nop -/* 00FB68 7000EF68 10400003 */ beqz $v0, .L7000EF78 -/* 00FB6C 7000EF6C 00000000 */ nop -/* 00FB70 7000EF70 10000009 */ b .L7000EF98 -/* 00FB74 7000EF74 2402FFFF */ li $v0, -1 -.L7000EF78: -/* 00FB78 7000EF78 0C003A2C */ jal osVirtualToPhysical -/* 00FB7C 7000EF7C 8FA4001C */ lw $a0, 0x1c($sp) -/* 00FB80 7000EF80 3C0CA450 */ lui $t4, 0xa450 -/* 00FB84 7000EF84 AD820000 */ sw $v0, ($t4) -/* 00FB88 7000EF88 8FAD0024 */ lw $t5, 0x24($sp) -/* 00FB8C 7000EF8C 3C0FA450 */ lui $t7, %hi(AI_LEN_REG) # $t7, 0xa450 -/* 00FB90 7000EF90 00001025 */ move $v0, $zero -/* 00FB94 7000EF94 ADED0004 */ sw $t5, %lo(AI_LEN_REG)($t7) -.L7000EF98: -/* 00FB98 7000EF98 8FBF0014 */ lw $ra, 0x14($sp) -/* 00FB9C 7000EF9C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 00FBA0 7000EFA0 03E00008 */ jr $ra -/* 00FBA4 7000EFA4 00000000 */ nop - -/* 00FBA8 7000EFA8 00000000 */ nop -/* 00FBAC 7000EFAC 00000000 */ nop -.section .data -glabel B_800276F0 -.byte 0 diff --git a/src/libultra/bstring.h b/src/libultra/bstring.h new file mode 100644 index 0000000..01486d9 --- /dev/null +++ b/src/libultra/bstring.h @@ -0,0 +1,36 @@ +#ifndef __BSTRING_H__ +#define __BSTRING_H__ +#ifdef __cplusplus +extern "C" { +#endif + +/* + * bstring(3C) -- byte string operations + * + * Copyright 1990, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.; + * the contents of this file may not be disclosed to third parties, copied or + * duplicated in any form, in whole or in part, without the prior written + * permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to restrictions + * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data + * and Computer Software clause at DFARS 252.227-7013, and/or in similar or + * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - + * rights reserved under the Copyright Laws of the United States. + */ + +#ident "$Revision: 1.4 $" + +extern void bcopy(const void *, void *, size_t); +extern int bcmp(const void *, const void *, int); +extern void bzero(void *, size_t); +extern void blkclr(void *, int); + +#ifdef __cplusplus +} +#endif +#endif /* !__BSTRING_H__ */ diff --git a/src/libultra/controller.h b/src/libultra/controller.h new file mode 100644 index 0000000..3956dff --- /dev/null +++ b/src/libultra/controller.h @@ -0,0 +1,208 @@ +#ifndef _CONTROLLER_H +#define _CONTROLLER_H +#include "PR/os_internal.h" +#include "os.h" +#include "PR/rcp.h" + +//should go somewhere else but +#define ARRLEN(x) ((s32)(sizeof(x) / sizeof(x[0]))) +#define CHNL_ERR(format) ((format.rxsize & CHNL_ERR_MASK) >> 4) + +typedef struct +{ + /* 0x0 */ u32 ramarray[15]; + /* 0x3C */ u32 pifstatus; +} OSPifRam; + +typedef struct +{ + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u16 button; + /* 0x6 */ s8 stick_x; + /* 0x7 */ s8 stick_y; +} __OSContReadFormat; + +typedef struct +{ + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u8 typeh; + /* 0x5 */ u8 typel; + /* 0x6 */ u8 status; + /* 0x7 */ u8 dummy1; +} __OSContRequesFormat; + +typedef struct +{ + /* 0x0 */ u8 txsize; + /* 0x1 */ u8 rxsize; + /* 0x2 */ u8 cmd; + /* 0x3 */ u8 typeh; + /* 0x4 */ u8 typel; + /* 0x5 */ u8 status; +} __OSContRequesFormatShort; + +typedef struct +{ + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u16 address; + /* 0x6 */ u8 data[BLOCKSIZE]; + /* 0x26 */ u8 datacrc; +} __OSContRamReadFormat; + +typedef union { + /* 0x0 */ struct + { + /* 0x0 */ u8 bank; + /* 0x1 */ u8 page; + } inode_t; + /* 0x0 */ u16 ipage; +} __OSInodeUnit; + +typedef struct +{ + /* 0x0 */ u32 game_code; + /* 0x4 */ u16 company_code; + /* 0x6 */ __OSInodeUnit start_page; + /* 0x8 */ u8 status; + /* 0x9 */ s8 reserved; + /* 0xA */ u16 data_sum; + /* 0xC */ u8 ext_name[PFS_FILE_EXT_LEN]; + /* 0x10 */ u8 game_name[PFS_FILE_NAME_LEN]; +} __OSDir; + +typedef struct +{ + /* 0x0 */ __OSInodeUnit inode_page[128]; +} __OSInode; + +typedef struct +{ + /* 0x0 */ u32 repaired; + /* 0x4 */ u32 random; + /* 0x8 */ u64 serial_mid; + /* 0x10 */ u64 serial_low; + /* 0x18 */ u16 deviceid; + /* 0x1A */ u8 banks; + /* 0x1B */ u8 version; + /* 0x1C */ u16 checksum; + /* 0x1E */ u16 inverted_checksum; +} __OSPackId; + +typedef struct +{ + /* 0x0 */ u8 txsize; + /* 0x1 */ u8 rxsize; + /* 0x2 */ u8 cmd; + /* 0x3 */ u8 address; + /* 0x4 */ u8 data[EEPROM_BLOCK_SIZE]; +} __OSContEepromFormat; + +//from: http://en64.shoutwiki.com/wiki/SI_Registers_Detailed#CONT_CMD_Usage +#define CONT_CMD_REQUEST_STATUS 0 +#define CONT_CMD_READ_BUTTON 1 +#define CONT_CMD_READ_MEMPACK 2 +#define CONT_CMD_WRITE_MEMPACK 3 +#define CONT_CMD_READ_EEPROM 4 +#define CONT_CMD_WRITE_EEPROM 5 +#define CONT_CMD_RESET 0xff + +#define CONT_CMD_REQUEST_STATUS_TX 1 +#define CONT_CMD_READ_BUTTON_TX 1 +#define CONT_CMD_READ_MEMPACK_TX 3 +#define CONT_CMD_WRITE_MEMPACK_TX 35 +#define CONT_CMD_READ_EEPROM_TX 2 +#define CONT_CMD_WRITE_EEPROM_TX 10 +#define CONT_CMD_RESET_TX 1 + +#define CONT_CMD_REQUEST_STATUS_RX 3 +#define CONT_CMD_READ_BUTTON_RX 4 +#define CONT_CMD_READ_MEMPACK_RX 33 +#define CONT_CMD_WRITE_MEMPACK_RX 1 +#define CONT_CMD_READ_EEPROM_RX 8 +#define CONT_CMD_WRITE_EEPROM_RX 1 +#define CONT_CMD_RESET_RX 3 + +#define CONT_CMD_NOP 0xff +#define CONT_CMD_END 0xfe //indicates end of a command +#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command + +#define DIR_STATUS_EMPTY 0 +#define DIR_STATUS_UNKNOWN 1 +#define DIR_STATUS_OCCUPIED 2 + + +typedef struct +{ + /* 0x0 */ __OSInode inode; + /* 0x100 */ u8 bank; + /* 0x101 */ u8 map[256]; +} __OSInodeCache; + +extern s32 __osEepStatus(OSMesgQueue *, OSContStatus *); +u16 __osSumcalc(u8 *ptr, int length); +s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum); +s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid); +s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp); +s32 __osGetId(OSPfs *pfs); +s32 __osCheckId(OSPfs *pfs); +s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank); +s32 __osPfsSelectBank(OSPfs *pfs); +s32 __osPfsDeclearPage(OSPfs *pfs, __OSInode *inode, int file_size_in_pages, int *first_page, u8 bank, int *decleared, int *last_page); +s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 start_page, u16 *sum, u8 bank, __OSInodeUnit *last_page, int flag); +s32 __osBlockSum(OSPfs *pfs, u8 page_no, u16 *sum, u8 bank); +s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer); +s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force); +void __osContGetInitData(u8 *pattern, OSContStatus *data); +void __osPackRequestData(u8 cmd); +void __osPfsRequestData(u8 cmd); +void __osPfsGetInitData(u8* pattern, OSContStatus* data); +u8 __osContAddressCrc(u16 addr); +u8 __osContDataCrc(u8 *data); +s32 __osPfsGetStatus(OSMesgQueue *queue, int channel); + +extern u8 __osContLastCmd; +extern OSTimer __osEepromTimer; +extern OSMesg __osEepromTimerMsg; +extern OSMesgQueue __osEepromTimerQ; +extern OSPifRam __osEepPifRam; +extern OSPifRam __osContPifRam; +extern OSPifRam __osPfsPifRam; +extern u8 _osContNumControllers; + +//some version of this almost certainly existed since there's plenty of times where it's used right before a return 0 +#define ERRCK(fn) \ + ret = fn; \ + if (ret != 0) \ + return ret; + +#define SET_ACTIVEBANK_TO_ZERO \ + if (pfs->activebank != 0) \ + { \ + pfs->activebank = 0; \ + ERRCK(__osPfsSelectBank(pfs)) \ + } + +#define PFS_CHECK_ID \ + if (__osCheckId(pfs) == PFS_ERR_NEW_PACK) \ + return PFS_ERR_NEW_PACK; +#endif + +#define PFS_CHECK_STATUS \ + if ((pfs->status & PFS_INITIALIZED) == 0) \ + return PFS_ERR_INVALID; + +#define PFS_GET_STATUS \ + __osSiGetAccess(); \ + ret = __osPfsGetStatus(queue, channel); \ + __osSiRelAccess(); \ + if (ret != 0) \ + return ret; diff --git a/src/libultra/crc.c b/src/libultra/crc.c new file mode 100644 index 0000000..c90c5de --- /dev/null +++ b/src/libultra/crc.c @@ -0,0 +1,47 @@ +#include "libultra_internal.h" + +u8 __osContAddressCrc(u16 addr) { + u8 temp; + u8 temp2; + int i; + temp = 0; + for (i = 0; i < 16; i++) { + if (temp & 0x10) { + temp2 = 21; + } else { + temp2 = 0; + } + + temp <<= 1; + temp |= (u8)((addr & 0x400) ? 1 : 0); + addr <<= 1; + temp ^= temp2; + } + return temp & 0x1f; +} + +u8 __osContDataCrc(u8 *data) { + u8 temp; + u8 temp2; + int i; + int j; + temp = 0; + for (i = 0; i <= 32; i++, data++) { + for (j = 7; j >= 0; j--) { + if (temp & 0x80) { + temp2 = 133; + } else { + temp2 = 0; + } + temp <<= 1; + if (i == 32) { + temp &= -1; + } else { + temp |= ((*data & (1 << j)) ? 1 : 0); + } + temp ^= temp2; + } + } + return temp; +} + diff --git a/src/libultra/crc.s b/src/libultra/crc.s deleted file mode 100644 index 0efbad2..0000000 --- a/src/libultra/crc.s +++ /dev/null @@ -1,125 +0,0 @@ -# Goldeneye 007 (U) disassembly and split file -# generated by n64split v0.4a - N64 ROM splitter - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -.section .text -glabel __osContAddressCrc -/* 016B80 70015F80 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 016B84 70015F84 3084FFFF */ andi $a0, $a0, 0xffff -/* 016B88 70015F88 A3A0000F */ sb $zero, 0xf($sp) -/* 016B8C 70015F8C AFA00008 */ sw $zero, 8($sp) -.L70015F90: -/* 016B90 70015F90 93AE000F */ lbu $t6, 0xf($sp) -/* 016B94 70015F94 31CF0010 */ andi $t7, $t6, 0x10 -/* 016B98 70015F98 11E00004 */ beqz $t7, .L70015FAC -/* 016B9C 70015F9C 00000000 */ nop -/* 016BA0 70015FA0 24180015 */ li $t8, 21 -/* 016BA4 70015FA4 10000002 */ b .L70015FB0 -/* 016BA8 70015FA8 A3B8000E */ sb $t8, 0xe($sp) -.L70015FAC: -/* 016BAC 70015FAC A3A0000E */ sb $zero, 0xe($sp) -.L70015FB0: -/* 016BB0 70015FB0 93B9000F */ lbu $t9, 0xf($sp) -/* 016BB4 70015FB4 30890400 */ andi $t1, $a0, 0x400 -/* 016BB8 70015FB8 00194040 */ sll $t0, $t9, 1 -/* 016BBC 70015FBC 11200003 */ beqz $t1, .L70015FCC -/* 016BC0 70015FC0 A3A8000F */ sb $t0, 0xf($sp) -/* 016BC4 70015FC4 10000002 */ b .L70015FD0 -/* 016BC8 70015FC8 24050001 */ li $a1, 1 -.L70015FCC: -/* 016BCC 70015FCC 00002825 */ move $a1, $zero -.L70015FD0: -/* 016BD0 70015FD0 93AA000F */ lbu $t2, 0xf($sp) -/* 016BD4 70015FD4 8FA80008 */ lw $t0, 8($sp) -/* 016BD8 70015FD8 93AF000E */ lbu $t7, 0xe($sp) -/* 016BDC 70015FDC 30AB00FF */ andi $t3, $a1, 0xff -/* 016BE0 70015FE0 00046840 */ sll $t5, $a0, 1 -/* 016BE4 70015FE4 014B6025 */ or $t4, $t2, $t3 -/* 016BE8 70015FE8 01A02025 */ move $a0, $t5 -/* 016BEC 70015FEC 319800FF */ andi $t8, $t4, 0xff -/* 016BF0 70015FF0 25090001 */ addiu $t1, $t0, 1 -/* 016BF4 70015FF4 29210010 */ slti $at, $t1, 0x10 -/* 016BF8 70015FF8 A3AC000F */ sb $t4, 0xf($sp) -/* 016BFC 70015FFC 308EFFFF */ andi $t6, $a0, 0xffff -/* 016C00 70016000 030FC826 */ xor $t9, $t8, $t7 -/* 016C04 70016004 AFA90008 */ sw $t1, 8($sp) -/* 016C08 70016008 01C02025 */ move $a0, $t6 -/* 016C0C 7001600C 1420FFE0 */ bnez $at, .L70015F90 -/* 016C10 70016010 A3B9000F */ sb $t9, 0xf($sp) -/* 016C14 70016014 93A2000F */ lbu $v0, 0xf($sp) -/* 016C18 70016018 27BD0010 */ addiu $sp, $sp, 0x10 -/* 016C1C 7001601C 304A001F */ andi $t2, $v0, 0x1f -/* 016C20 70016020 01401025 */ move $v0, $t2 -/* 016C24 70016024 304B00FF */ andi $t3, $v0, 0xff -/* 016C28 70016028 03E00008 */ jr $ra -/* 016C2C 7001602C 01601025 */ move $v0, $t3 - -glabel __osContDataCrc -/* 016C30 70016030 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 016C34 70016034 A3A0000F */ sb $zero, 0xf($sp) -/* 016C38 70016038 AFA00008 */ sw $zero, 8($sp) -.L7001603C: -/* 016C3C 7001603C 240E0007 */ li $t6, 7 -/* 016C40 70016040 AFAE0004 */ sw $t6, 4($sp) -.L70016044: -/* 016C44 70016044 93AF000F */ lbu $t7, 0xf($sp) -/* 016C48 70016048 31F80080 */ andi $t8, $t7, 0x80 -/* 016C4C 7001604C 13000004 */ beqz $t8, .L70016060 -/* 016C50 70016050 00000000 */ nop -/* 016C54 70016054 24190085 */ li $t9, 133 -/* 016C58 70016058 10000002 */ b .L70016064 -/* 016C5C 7001605C A3B9000E */ sb $t9, 0xe($sp) -.L70016060: -/* 016C60 70016060 A3A0000E */ sb $zero, 0xe($sp) -.L70016064: -/* 016C64 70016064 93A8000F */ lbu $t0, 0xf($sp) -/* 016C68 70016068 8FAA0008 */ lw $t2, 8($sp) -/* 016C6C 7001606C 24010020 */ li $at, 32 -/* 016C70 70016070 00084840 */ sll $t1, $t0, 1 -/* 016C74 70016074 15410004 */ bne $t2, $at, .L70016088 -/* 016C78 70016078 A3A9000F */ sb $t1, 0xf($sp) -/* 016C7C 7001607C 312B00FF */ andi $t3, $t1, 0xff -/* 016C80 70016080 1000000E */ b .L700160BC -/* 016C84 70016084 A3AB000F */ sb $t3, 0xf($sp) -.L70016088: -/* 016C88 70016088 8FAD0004 */ lw $t5, 4($sp) -/* 016C8C 7001608C 908C0000 */ lbu $t4, ($a0) -/* 016C90 70016090 240E0001 */ li $t6, 1 -/* 016C94 70016094 01AE7804 */ sllv $t7, $t6, $t5 -/* 016C98 70016098 018FC024 */ and $t8, $t4, $t7 -/* 016C9C 7001609C 13000003 */ beqz $t8, .L700160AC -/* 016CA0 700160A0 00000000 */ nop -/* 016CA4 700160A4 10000002 */ b .L700160B0 -/* 016CA8 700160A8 24050001 */ li $a1, 1 -.L700160AC: -/* 016CAC 700160AC 00002825 */ move $a1, $zero -.L700160B0: -/* 016CB0 700160B0 93B9000F */ lbu $t9, 0xf($sp) -/* 016CB4 700160B4 03254025 */ or $t0, $t9, $a1 -/* 016CB8 700160B8 A3A8000F */ sb $t0, 0xf($sp) -.L700160BC: -/* 016CBC 700160BC 8FAE0004 */ lw $t6, 4($sp) -/* 016CC0 700160C0 93AA000F */ lbu $t2, 0xf($sp) -/* 016CC4 700160C4 93A9000E */ lbu $t1, 0xe($sp) -/* 016CC8 700160C8 25CDFFFF */ addiu $t5, $t6, -1 -/* 016CCC 700160CC AFAD0004 */ sw $t5, 4($sp) -/* 016CD0 700160D0 01495826 */ xor $t3, $t2, $t1 -/* 016CD4 700160D4 05A1FFDB */ bgez $t5, .L70016044 -/* 016CD8 700160D8 A3AB000F */ sb $t3, 0xf($sp) -/* 016CDC 700160DC 8FAC0008 */ lw $t4, 8($sp) -/* 016CE0 700160E0 24840001 */ addiu $a0, $a0, 1 -/* 016CE4 700160E4 258F0001 */ addiu $t7, $t4, 1 -/* 016CE8 700160E8 29E10021 */ slti $at, $t7, 0x21 -/* 016CEC 700160EC 1420FFD3 */ bnez $at, .L7001603C -/* 016CF0 700160F0 AFAF0008 */ sw $t7, 8($sp) -/* 016CF4 700160F4 93A2000F */ lbu $v0, 0xf($sp) -/* 016CF8 700160F8 03E00008 */ jr $ra -/* 016CFC 700160FC 27BD0010 */ addiu $sp, $sp, 0x10 diff --git a/src/libultra/getthreadpri.c b/src/libultra/getthreadpri.c new file mode 100644 index 0000000..43a0145 --- /dev/null +++ b/src/libultra/getthreadpri.c @@ -0,0 +1,8 @@ +#include "libultra_internal.h" + +OSPri osGetThreadPri(OSThread *thread) { + if (thread == NULL) { + thread = __osRunningThread; + } + return thread->priority; +} diff --git a/src/libultra/getthreadpri.s b/src/libultra/getthreadpri.s deleted file mode 100644 index bd8c5db..0000000 --- a/src/libultra/getthreadpri.s +++ /dev/null @@ -1,24 +0,0 @@ -# Goldeneye 007 (U) disassembly and split file -# generated by n64split v0.4a - N64 ROM splitter - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -.section .text -glabel osGetThreadPri -/* 019630 70018A30 14800003 */ bnez $a0, .L70018A40 -/* 019634 70018A34 00000000 */ nop -/* 019638 70018A38 3C048002 */ lui $a0, %hi(__osRunningThread) -/* 01963C 70018A3C 8C847730 */ lw $a0, %lo(__osRunningThread)($a0) -.L70018A40: -/* 019640 70018A40 03E00008 */ jr $ra -/* 019644 70018A44 8C820004 */ lw $v0, 4($a0) - -/* 019648 70018A48 00000000 */ nop -/* 01964C 70018A4C 00000000 */ nop diff --git a/src/libultra/hardware.h b/src/libultra/hardware.h new file mode 100644 index 0000000..14848ca --- /dev/null +++ b/src/libultra/hardware.h @@ -0,0 +1,127 @@ +#ifndef _HARDWARE_H_ +#define _HARDWARE_H_ + +#define HW_REG(reg, type) *(volatile type *)(uintptr_t)(reg | 0xa0000000) + +#define AI_DRAM_ADDR_REG 0x04500000 +#define AI_LEN_REG 0x04500004 +#define AI_CONTROL_REG 0x04500008 +#define AI_STATUS_REG 0x0450000C +#define AI_STATUS_AI_FULL (1 << 31) +#define AI_STATUS_AI_BUSY (1 << 30) +#define AI_DACRATE_REG 0x04500010 +#define AI_BITRATE_REG 0x04500014 + +#define VI_STATUS_REG 0x04400000 +#define VI_CONTROL_REG 0x04400000 +#define VI_ORIGIN_REG 0x04400004 +#define VI_DRAM_ADDR_REG 0x04400004 +#define VI_WIDTH_REG 0x04400008 +#define VI_H_WIDTH_REG 0x04400008 +#define VI_INTR_REG 0x0440000C +#define VI_V_INTER_REG 0x0440000C +#define VI_CURRENT_REG 0x04400010 +#define VI_V_CURRENT_LINE_REG 0x04400010 +#define VI_BURST_REG 0x04400014 +#define VI_TIMING_REG 0x04400014 +#define VI_V_SYNC_REG 0x04400018 //VI vertical sync +#define VI_H_SYNC_REG 0x0440001C //VI horizontal sync +#define VI_LEAP_REG 0x04400020 //VI horizontal sync leap +#define VI_H_SYNC_LEAP_REG 0x04400020 +#define VI_H_START_REG 0x04400024 //VI horizontal video +#define VI_H_VIDEO_REG 0x04400024 +#define VI_V_START_REG 0x04400028 //VI vertical video +#define VI_V_VIDEO_REG 0x04400028 +#define VI_V_BURST_REG 0x0440002C //VI vertical burst +#define VI_X_SCALE_REG 0x04400030 //VI x-scale +#define VI_Y_SCALE_REG 0x04400034 //VI y-scale + +#define SP_IMEM_START 0x04001000 +#define SP_DMEM_START 0x04000000 + +#define SP_MEM_ADDR_REG 0x04040000 +#define SP_DRAM_ADDR_REG 0x04040004 +#define SP_RD_LEN_REG 0x04040008 +#define SP_WR_LEN_REG 0x0404000C +#define SP_STATUS_REG 0x04040010 +#define SP_PC_REG 0x04080000 + +#define PI_DRAM_ADDR_REG 0x04600000 //PI DRAM address +#define PI_CART_ADDR_REG 0x04600004 //PI pbus (cartridge) address +#define PI_RD_LEN_REG 0x04600008 //PI read length +#define PI_WR_LEN_REG 0x0460000C //PI write length +#define PI_STATUS_REG 0x04600010 //PI status +#define PI_BSD_DOM1_LAT_REG 0x04600014 //PI dom1 latency +#define PI_DOMAIN1_REG 0x04600014 +#define PI_BSD_DOM1_PWD_REG 0x04600018 //PI dom1 pulse width +#define PI_BSD_DOM1_PGS_REG 0x0460001C //PI dom1 page size +#define PI_BSD_DOM1_RLS_REG 0x04600020 //PI dom1 release +#define PI_BSD_DOM2_LAT_REG 0x04600024 //PI dom2 latency +#define PI_DOMAIN2_REG 0x04600024 +#define PI_BSD_DOM2_PWD_REG 0x04600028 //PI dom2 pulse width +#define PI_BSD_DOM2_PGS_REG 0x0460002C //PI dom2 page size +#define PI_BSD_DOM2_RLS_REG 0x04600030 //PI dom2 release + +#define PI_STATUS_BUSY 0x1 +#define PI_STATUS_IOBUSY 0x2 +#define PI_STATUS_ERROR 0x3 + +#define PI_STATUS_RESET_CONTROLLER 0x1 +#define PI_STATUS_CLEAR_INTR 0x2 + +#define SI_DRAM_ADDR_REG 0x04800000 +#define SI_PIF_ADDR_RD64B_REG 0x04800004 +#define SI_PIF_ADDR_WR64B_REG 0x04800010 +#define SI_STATUS_REG 0x04800018 + +#define SI_STATUS_DMA_BUSY 0x1 +#define SI_STATUS_IO_READ_BUSY 0x2 +#define SI_STATUS_DMA_ERROR 0x8 +#define SI_STATUS_INTERRUPT (1 << 12) + +#define MI_INIT_MODE_REG 0x04300000 +#define MI_MODE_REG MI_INIT_MODE_REG +#define MI_VERSION_REG 0x04300004 +#define MI_INTR_REG 0x04300008 +#define MI_INTR_MASK_REG 0x0430000C + +//https://github.com/LuigiBlood/64dd/wiki/Registers +#define ASIC_STATUS 0x05000508 + +#define DATA_REQUEST 0x40000000 +#define C2_TRANSFER 0x10000000 +#define BUFFER_MANAGER_ERROR 0x08000000 +#define BUFFER_MANAGER_INTERRUPT 0x04000000 +#define MECHANIC_INTERRUPT 0x02000000 +#define DISK_PRESENT 0x01000000 +#define BUSY_STATE 0x00800000 +#define RESET_STATE 0x00400000 +#define MOTOR_NOT_SPINNING 0x00100000 +#define HEAD_RETRACTED 0x00080000 +#define WRITE_PROTECT_ERROR 0x00040000 +#define MECHANIC_ERROR 0x00020000 +#define DISK_CHANGE 0x00010000 + +#define _64DD_PRESENT_MASK 0xFFFF + + +//ro +#define ASIC_BM_STATUS 0x05000510 + +#define MICRO_STATUS 0x02000000 +#define C1_DOUBLE 0x00400000 +#define C1_SINGLE 0x00200000 + +//wo +#define ASIC_BM_CTL 0x05000510 +#define BUFFER_MANAGER_RESET 0x10000000 +#define MECHANIC_INTERRUPT_RESET 0x01000000 +/*- Start Buffer Manager (0x80000000) +- Buffer Manager Mode (0x40000000) +- BM Interrupt Mask (0x20000000) +- Buffer Manager Reset (0x10000000) +- Disable OR Check? (0x08000000) +- Disable C1 Correction (0x04000000) +- Block Transfer (0x02000000) +- Mechanic Interrupt Reset (0x01000000)*/ +#endif diff --git a/src/libultra/libaudio_internal.h b/src/libultra/libaudio_internal.h new file mode 100644 index 0000000..ea63322 --- /dev/null +++ b/src/libultra/libaudio_internal.h @@ -0,0 +1,127 @@ +#ifndef _LIBAUDIO_INTERNAL_H_ +#define _LIBAUDIO_INTERNAL_H_ +#include +#define AL_BANK_VERSION 0x4231 /* 'B1' */ + +typedef u8 ALPan; +typedef s32 ALMicroTime; + +/* Possible wavetable types */ +enum +{ + AL_ADPCM_WAVE = 0, + AL_RAW16_WAVE +}; + +typedef struct +{ + u32 start; + u32 end; + u32 count; +} ALRawLoop; + +typedef struct +{ + u32 start; + u32 end; + u32 count; + ADPCM_STATE state; +} ALADPCMloop; + +typedef struct +{ + s32 order; + s32 npredictors; + s16 book[1]; // variable size, 8-byte aligned +} ALADPCMBook; + +typedef struct +{ + ALMicroTime attackTime; + ALMicroTime decayTime; + ALMicroTime releaseTime; + u8 attackVolume; + u8 decayVolume; +} ALEnvelope; + +typedef struct +{ + u8 velocityMin; + u8 velocityMax; + u8 keyMin; + u8 keyMax; + u8 keyBase; + s8 detune; +} ALKeyMap; + +typedef struct +{ + ALADPCMloop *loop; + ALADPCMBook *book; +} ALADPCMWaveInfo; + +typedef struct +{ + ALRawLoop *loop; +} ALRAWWaveInfo; + +typedef struct ALWaveTable_s +{ + u8 *base; /* ptr to start of wave data */ + s32 len; /* length of data in bytes */ + u8 type; /* compression type */ + u8 flags; /* offset/address flags */ + union { + ALADPCMWaveInfo adpcmWave; + ALRAWWaveInfo rawWave; + } waveInfo; +} ALWaveTable; + +typedef struct ALSound_s +{ + ALEnvelope *envelope; + ALKeyMap *keyMap; + ALWaveTable *wavetable; /* offset to wavetable struct */ + ALPan samplePan; + u8 sampleVolume; + u8 flags; +} ALSound; + +typedef struct +{ + u8 volume; /* overall volume for this instrument */ + ALPan pan; /* 0 = hard left, 127 = hard right */ + u8 priority; /* voice priority for this instrument */ + u8 flags; + u8 tremType; /* the type of tremelo osc. to use */ + u8 tremRate; /* the rate of the tremelo osc. */ + u8 tremDepth; /* the depth of the tremelo osc */ + u8 tremDelay; /* the delay for the tremelo osc */ + u8 vibType; /* the type of tremelo osc. to use */ + u8 vibRate; /* the rate of the tremelo osc. */ + u8 vibDepth; /* the depth of the tremelo osc */ + u8 vibDelay; /* the delay for the tremelo osc */ + s16 bendRange; /* pitch bend range in cents */ + s16 soundCount; /* number of sounds in this array */ + ALSound *soundArray[1]; +} ALInstrument; + +typedef struct ALBank_s +{ + s16 instCount; /* number of programs in this bank */ + u8 flags; + u8 pad; + s32 sampleRate; /* e.g. 44100, 22050, etc... */ + ALInstrument *percussion; /* default percussion for GM */ + ALInstrument *instArray[1]; /* ARRAY of instruments */ +} ALBank; + +typedef struct +{ /* Note: sizeof won't be correct */ + s16 revision; /* format revision of this file */ + s16 bankCount; /* number of banks */ + ALBank *bankArray[1]; /* ARRAY of bank offsets */ +} ALBankFile; + +void alBnkfNew(ALBankFile *f, u8 *table); +#endif diff --git a/src/libultra/libultra_internal.h b/src/libultra/libultra_internal.h new file mode 100644 index 0000000..5bb434d --- /dev/null +++ b/src/libultra/libultra_internal.h @@ -0,0 +1,99 @@ +#ifndef _LIBULTRA_INTERNAL_H_ +#define _LIBULTRA_INTERNAL_H_ +#include + +/* + * This define is needed because the original definitions in __osDequeueThread.c are declared + * seperately instead of part of a single struct, however some code alises over this memory + * assuming a unified structure. To fix this, we declare the full type here and then alias the + * symbol names to the correct members in AVOID_UB. + */ +#ifdef AVOID_UB +typedef struct OSThread_ListHead_s +{ + /*0x00*/ struct OSThread_s *next; + /*0x04*/ OSPri priority; + /*0x08*/ struct OSThread_s *queue; + /*0x0C*/ struct OSThread_s *tlnext; + /*0x10*/ struct OSThread_s *unk10; + /*0x14*/ u32 unk14; +} OSThread_ListHead; + +// Now fix the symbols to the new one. +extern OSThread_ListHead D_80334890_fix; + +#define D_80334890 D_80334890_fix.next +#define D_80334894 D_80334890_fix.priority +#define __osRunQueue D_80334890_fix.queue +#define D_8033489C D_80334890_fix.tlnext +#define D_803348A0 D_80334890_fix.unk10 + +// Fix for the EEPROM array. +extern u32 D_80365E00[16]; + +// alias the last array element correctly +#define D_80365E3C D_80365E00[15] +#else +// Original OSThread_ListHead definitions +extern OSThread *D_80334890; +extern u32 D_80334894; +extern OSThread *__osRunQueue; +extern OSThread *D_8033489C; +extern OSThread *__osRunningThread; + +// Original EEPROM definitions +extern u32 D_80365E00[15]; +extern u32 D_80365E3C; +#endif + +typedef struct { + u32 initialized; // probably something like initialized? + OSThread *mgrThread; + OSMesgQueue *cmdQueue; + OSMesgQueue *eventQueue; + OSMesgQueue *accessQueue; + s32 (*dma_func)(s32, u32, void *, size_t); +#if defined(VERSION_EU) || defined(VERSION_SH) + s32 (*edma_func)(OSPiHandle*, s32, u32, void *, size_t); +#else + u64 force_align; +#endif +} OSMgrArgs; + +s32 __osDisableInt(void); +void __osRestoreInt(s32); +void __osEnqueueAndYield(OSThread **); +void __osDequeueThread(OSThread **, OSThread *); +void __osEnqueueThread(OSThread **, OSThread *); +OSThread *__osPopThread(OSThread **); +s32 __osSiRawStartDma(s32, void *); +void __osSiCreateAccessQueue(void); +void __osSiGetAccess(void); +void __osSiRelAccess(void); +u32 __osProbeTLB(void *); +void __osPiCreateAccessQueue(void); +void __osPiGetAccess(void); +void __osSetSR(u32); +u32 __osGetSR(void); +void __osSetFpcCsr(u32); +s32 __osSiRawReadIo(void *, u32 *); +s32 __osSiRawWriteIo(void *, u32); +s32 osPiRawReadIo(u32 a0, u32 *a1); +void __osSpSetStatus(u32); +u32 __osSpGetStatus(void); +s32 __osSpSetPc(void *); +s32 __osSpDeviceBusy(void); +s32 __osSiDeviceBusy(void); +s32 __osSpRawStartDma(u32 dir, void *sp_ptr, void *dram_ptr, size_t size); +void __osViInit(void); +OSViContext *__osViGetCurrentContext(void); +OSViContext *__osViGetCurrentContext2(void); +void __osViSwapContext(void); +void __osSetTimerIntr(u64); +u64 __osInsertTimer(OSTimer *); +void __osSetCompare(u32); +s32 __osAiDeviceBusy(void); +void __osDispatchThread(void); +u32 __osGetCause(void); +s32 __osAtomicDec(u32 *); +#endif diff --git a/src/libultra/new_func.h b/src/libultra/new_func.h new file mode 100644 index 0000000..f966f6d --- /dev/null +++ b/src/libultra/new_func.h @@ -0,0 +1,28 @@ +#ifndef NEW_FUNC_H +#define NEW_FUNC_H + +#include "libultra_internal.h" +#include "hardware.h" + +#define WAIT_ON_IOBUSY(var) \ + var = HW_REG(PI_STATUS_REG, u32); \ + while (var & PI_STATUS_IOBUSY) \ + var = HW_REG(PI_STATUS_REG, u32); + +extern u32 EU_D_80302090; + +extern OSPiHandle *__osDiskHandle; //possibly __osPiTable + +extern volatile u32 __OSGlobalIntMask; +s32 osEPiRawStartDma(OSPiHandle *arg0, s32 dir, u32 cart_addr, void *dram_addr, u32 size); +void func_802F4B08(void); +void func_802F4A20(void); +void __osResetGlobalIntMask(u32 mask); +void __osEPiRawWriteIo(OSPiHandle*, u32, u32); +void func_802F71F0(void); +#ifdef VERSION_SH +void __osSetGlobalIntMask(s32 arg0); +s32 __osEPiRawReadIo(OSPiHandle *arg0, u32 devAddr, u32 *arg2); +#endif + +#endif diff --git a/src/libultra/os.h b/src/libultra/os.h new file mode 100644 index 0000000..3126f48 --- /dev/null +++ b/src/libultra/os.h @@ -0,0 +1,800 @@ + +/*==================================================================== + * os.h + * + * Copyright 1995, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ + +/************************************************************************** + * + * $Revision: 1.149 $ + * $Date: 1997/12/15 04:30:52 $ + * $Source: /disk6/Master/cvsmdev2/PR/include/os.h,v $ + * + **************************************************************************/ + + +#ifndef _OS_H_ +#define _OS_H_ + +#ifdef _LANGUAGE_C_PLUS_PLUS +extern "C" { +#endif + +#include +#include "PR/os_message.h" + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Type definitions + * + */ + +/* + * Structure for device manager block + */ +typedef struct { + s32 active; /* Status flag */ + OSThread *thread; /* Calling thread */ + OSMesgQueue *cmdQueue; /* Command queue */ + OSMesgQueue *evtQueue; /* Event queue */ + OSMesgQueue *acsQueue; /* Access queue */ + /* Raw DMA routine */ + s32 (*dma)(s32, u32, void *, u32); + s32 (*edma)(OSPiHandle *, s32, u32, void *, u32); +} OSDevMgr; + +/* + * Structure for file system + */ + + + +typedef struct { + int status; + OSMesgQueue *queue; + int channel; + u8 id[32]; + u8 label[32]; + int version; + int dir_size; + int inode_table; /* block location */ + int minode_table; /* mirrioring inode_table */ + int dir_table; /* block location */ + int inode_start_page; /* page # */ + u8 banks; + u8 activebank; +} OSPfs; + + +typedef struct { + u32 file_size; /* bytes */ + u32 game_code; + u16 company_code; + char ext_name[4]; + char game_name[16]; +} OSPfsState; + +/* + * Structure for Profiler + */ +typedef struct { + u16 *histo_base; /* histogram base */ + u32 histo_size; /* histogram size */ + u32 *text_start; /* start of text segment */ + u32 *text_end; /* end of text segment */ +} OSProf; + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +/************************************************************************** + * + * Global definitions + * + */ + +/* Thread states */ + +#define OS_STATE_STOPPED 1 +#define OS_STATE_RUNNABLE 2 +#define OS_STATE_RUNNING 4 +#define OS_STATE_WAITING 8 + +/* Events */ +#ifdef _FINALROM +#define OS_NUM_EVENTS 15 +#else +#define OS_NUM_EVENTS 23 +#endif + +#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */ +#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */ +#define OS_EVENT_CART 2 /* Cartridge interrupt: used by rmon */ +#define OS_EVENT_COUNTER 3 /* Counter int: used by VI/Timer Mgr */ +#define OS_EVENT_SP 4 /* SP task done interrupt */ +#define OS_EVENT_SI 5 /* SI (controller) interrupt */ +#define OS_EVENT_AI 6 /* AI interrupt */ +#define OS_EVENT_VI 7 /* VI interrupt: used by VI/Timer Mgr */ +#define OS_EVENT_PI 8 /* PI interrupt: used by PI Manager */ +#define OS_EVENT_DP 9 /* DP full sync interrupt */ +#define OS_EVENT_CPU_BREAK 10 /* CPU breakpoint: used by rmon */ +#define OS_EVENT_SP_BREAK 11 /* SP breakpoint: used by rmon */ +#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */ +#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */ +#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */ +#ifndef _FINALROM +#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */ +#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */ +#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */ +#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */ +#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */ +#define OS_EVENT_RDB_DBG_DONE 20 +#define OS_EVENT_RDB_FLUSH_PROF 21 +#define OS_EVENT_RDB_ACK_PROF 22 +#endif + +/* Flags for debugging purpose */ + +#define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */ +#define OS_FLAG_FAULT 2 /* CPU fault has occurred */ + +/* Interrupt masks */ + +#define OS_IM_NONE 0x00000001 +#define OS_IM_SW1 0x00000501 +#define OS_IM_SW2 0x00000601 +#define OS_IM_CART 0x00000c01 +#define OS_IM_PRENMI 0x00001401 +#define OS_IM_RDBWRITE 0x00002401 +#define OS_IM_RDBREAD 0x00004401 +#define OS_IM_COUNTER 0x00008401 +#define OS_IM_CPU 0x0000ff01 +#define OS_IM_SP 0x00010401 +#define OS_IM_SI 0x00020401 +#define OS_IM_AI 0x00040401 +#define OS_IM_VI 0x00080401 +#define OS_IM_PI 0x00100401 +#define OS_IM_DP 0x00200401 +#define OS_IM_ALL 0x003fff01 +#define RCP_IMASK 0x003f0000 +#define RCP_IMASKSHIFT 16 + +/* Recommended thread priorities for the system threads */ + +#define OS_PRIORITY_MAX 255 +#define OS_PRIORITY_VIMGR 254 +#define OS_PRIORITY_RMON 250 +#define OS_PRIORITY_RMONSPIN 200 +#define OS_PRIORITY_PIMGR 150 +#define OS_PRIORITY_SIMGR 140 +#define OS_PRIORITY_APPMAX 127 +#define OS_PRIORITY_IDLE 0 /* Must be 0 */ + + +/* Flags to turn blocking on/off when sending/receiving message */ + +#define OS_MESG_NOBLOCK 0 +#define OS_MESG_BLOCK 1 + +/* Flags to indicate direction of data transfer */ + +#define OS_READ 0 /* device -> RDRAM */ +#define OS_WRITE 1 /* device <- RDRAM */ +#define OS_OTHERS 2 /* for Leo disk only */ + +/* + * I/O message types + */ +#define OS_MESG_TYPE_BASE (10) +#define OS_MESG_TYPE_LOOPBACK (OS_MESG_TYPE_BASE+0) +#define OS_MESG_TYPE_DMAREAD (OS_MESG_TYPE_BASE+1) +#define OS_MESG_TYPE_DMAWRITE (OS_MESG_TYPE_BASE+2) +#define OS_MESG_TYPE_VRETRACE (OS_MESG_TYPE_BASE+3) +#define OS_MESG_TYPE_COUNTER (OS_MESG_TYPE_BASE+4) +#define OS_MESG_TYPE_EDMAREAD (OS_MESG_TYPE_BASE+5) +#define OS_MESG_TYPE_EDMAWRITE (OS_MESG_TYPE_BASE+6) + +/* + * I/O message priority + */ +#define OS_MESG_PRI_NORMAL 0 +#define OS_MESG_PRI_HIGH 1 + +/* + * Page size argument for TLB routines + */ +#define OS_PM_4K 0x0000000 +#define OS_PM_16K 0x0006000 +#define OS_PM_64K 0x001e000 +#define OS_PM_256K 0x007e000 +#define OS_PM_1M 0x01fe000 +#define OS_PM_4M 0x07fe000 +#define OS_PM_16M 0x1ffe000 + +/* + * Stack size for I/O device managers: PIM (PI Manager), VIM (VI Manager), + * SIM (SI Manager) + * + */ +#define OS_PIM_STACKSIZE 4096 +#define OS_VIM_STACKSIZE 4096 +#define OS_SIM_STACKSIZE 4096 + +#define OS_MIN_STACKSIZE 72 + +/* + * Values for osTvType + */ +#define OS_TV_PAL 0 +#define OS_TV_NTSC 1 +#define OS_TV_MPAL 2 + +/* + * Video Interface (VI) mode type + */ +#define OS_VI_NTSC_LPN1 0 /* NTSC */ +#define OS_VI_NTSC_LPF1 1 +#define OS_VI_NTSC_LAN1 2 +#define OS_VI_NTSC_LAF1 3 +#define OS_VI_NTSC_LPN2 4 +#define OS_VI_NTSC_LPF2 5 +#define OS_VI_NTSC_LAN2 6 +#define OS_VI_NTSC_LAF2 7 +#define OS_VI_NTSC_HPN1 8 +#define OS_VI_NTSC_HPF1 9 +#define OS_VI_NTSC_HAN1 10 +#define OS_VI_NTSC_HAF1 11 +#define OS_VI_NTSC_HPN2 12 +#define OS_VI_NTSC_HPF2 13 + +#define OS_VI_PAL_LPN1 14 /* PAL */ +#define OS_VI_PAL_LPF1 15 +#define OS_VI_PAL_LAN1 16 +#define OS_VI_PAL_LAF1 17 +#define OS_VI_PAL_LPN2 18 +#define OS_VI_PAL_LPF2 19 +#define OS_VI_PAL_LAN2 20 +#define OS_VI_PAL_LAF2 21 +#define OS_VI_PAL_HPN1 22 +#define OS_VI_PAL_HPF1 23 +#define OS_VI_PAL_HAN1 24 +#define OS_VI_PAL_HAF1 25 +#define OS_VI_PAL_HPN2 26 +#define OS_VI_PAL_HPF2 27 + +#define OS_VI_MPAL_LPN1 28 /* MPAL - mainly Brazil */ +#define OS_VI_MPAL_LPF1 29 +#define OS_VI_MPAL_LAN1 30 +#define OS_VI_MPAL_LAF1 31 +#define OS_VI_MPAL_LPN2 32 +#define OS_VI_MPAL_LPF2 33 +#define OS_VI_MPAL_LAN2 34 +#define OS_VI_MPAL_LAF2 35 +#define OS_VI_MPAL_HPN1 36 +#define OS_VI_MPAL_HPF1 37 +#define OS_VI_MPAL_HAN1 38 +#define OS_VI_MPAL_HAF1 39 +#define OS_VI_MPAL_HPN2 40 +#define OS_VI_MPAL_HPF2 41 + +/* + * Video Interface (VI) special features + */ +#define OS_VI_GAMMA_ON 0x0001 +#define OS_VI_GAMMA_OFF 0x0002 +#define OS_VI_GAMMA_DITHER_ON 0x0004 +#define OS_VI_GAMMA_DITHER_OFF 0x0008 +#define OS_VI_DIVOT_ON 0x0010 +#define OS_VI_DIVOT_OFF 0x0020 +#define OS_VI_DITHER_FILTER_ON 0x0040 +#define OS_VI_DITHER_FILTER_OFF 0x0080 + +/* + * Video Interface (VI) mode attribute bit + */ +#define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */ +#define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */ +#define OS_VI_BIT_NORMALINTERLACE 0x0004 /* hi-res */ +#define OS_VI_BIT_DEFLICKINTERLACE 0x0008 /* hi-res */ +#define OS_VI_BIT_ANTIALIAS 0x0010 +#define OS_VI_BIT_POINTSAMPLE 0x0020 +#define OS_VI_BIT_16PIXEL 0x0040 +#define OS_VI_BIT_32PIXEL 0x0080 +#define OS_VI_BIT_LORES 0x0100 +#define OS_VI_BIT_HIRES 0x0200 +#define OS_VI_BIT_NTSC 0x0400 +#define OS_VI_BIT_PAL 0x0800 + +/* + * Leo Disk + */ + +/* transfer mode */ + +#define LEO_BLOCK_MODE 1 +#define LEO_TRACK_MODE 2 +#define LEO_SECTOR_MODE 3 + +/* + * Controllers number + */ + +#ifndef _HW_VERSION_1 +#define MAXCONTROLLERS 4 +#else +#define MAXCONTROLLERS 6 +#endif + +/* controller errors */ +#define CONT_NO_RESPONSE_ERROR 0x8 +#define CONT_OVERRUN_ERROR 0x4 +#ifdef _HW_VERSION_1 +#define CONT_FRAME_ERROR 0x2 +#define CONT_COLLISION_ERROR 0x1 +#endif + +/* Controller type */ + +#define CONT_ABSOLUTE 0x0001 +#define CONT_RELATIVE 0x0002 +#define CONT_JOYPORT 0x0004 +#define CONT_EEPROM 0x8000 +#define CONT_EEP16K 0x4000 +#define CONT_TYPE_MASK 0x1f07 +#define CONT_TYPE_NORMAL 0x0005 +#define CONT_TYPE_MOUSE 0x0002 + +/* Controller status */ + +#define CONT_CARD_ON 0x01 +#define CONT_CARD_PULL 0x02 +#define CONT_ADDR_CRC_ER 0x04 +#define CONT_EEPROM_BUSY 0x80 + +/* EEPROM TYPE */ + +#define EEPROM_TYPE_4K 0x01 +#define EEPROM_TYPE_16K 0x02 + +/* Buttons */ + +#define CONT_A 0x8000 +#define CONT_B 0x4000 +#define CONT_G 0x2000 +#define CONT_START 0x1000 +#define CONT_UP 0x0800 +#define CONT_DOWN 0x0400 +#define CONT_LEFT 0x0200 +#define CONT_RIGHT 0x0100 +#define CONT_L 0x0020 +#define CONT_R 0x0010 +#define CONT_E 0x0008 +#define CONT_D 0x0004 +#define CONT_C 0x0002 +#define CONT_F 0x0001 + +/* Nintendo's official button names */ + +#define A_BUTTON CONT_A +#define B_BUTTON CONT_B +#define L_TRIG CONT_L +#define R_TRIG CONT_R +#define Z_TRIG CONT_G +#define START_BUTTON CONT_START +#define U_JPAD CONT_UP +#define L_JPAD CONT_LEFT +#define R_JPAD CONT_RIGHT +#define D_JPAD CONT_DOWN +#define U_CBUTTONS CONT_E +#define L_CBUTTONS CONT_C +#define R_CBUTTONS CONT_F +#define D_CBUTTONS CONT_D + +/* File System size */ +#define OS_PFS_VERSION 0x0200 +#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8) +#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255) + +#define PFS_FILE_NAME_LEN 16 +#define PFS_FILE_EXT_LEN 4 +#define BLOCKSIZE 32 /* bytes */ +#define PFS_ONE_PAGE 8 /* blocks */ +#define PFS_MAX_BANKS 62 + +/* File System flag */ + +#define PFS_READ 0 +#define PFS_WRITE 1 +#define PFS_CREATE 2 + +/* File System status */ +#define PFS_INITIALIZED 0x1 +#define PFS_CORRUPTED 0x2 /* File system was corrupted */ + +/* File System error number */ + +#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */ +#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a */ + /* different one */ +#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */ +#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR +#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/ +#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/ +#define PFS_DATA_FULL 7 /* no free pages on ram pack */ +#define PFS_DIR_FULL 8 /* no free directories on ram pack*/ +#define PFS_ERR_EXIST 9 /* file exists */ +#define PFS_ERR_ID_FATAL 10 /* dead ram pack */ +#define PFS_ERR_DEVICE 11 /* wrong device type*/ + +/* definition for EEPROM */ + +#define EEPROM_MAXBLOCKS 64 +#define EEP16K_MAXBLOCKS 256 +#define EEPROM_BLOCK_SIZE 8 + +/* + * PI/EPI + */ +#define PI_DOMAIN1 0 +#define PI_DOMAIN2 1 + +/* + * Profiler constants + */ +#define PROF_MIN_INTERVAL 50 /* microseconds */ + +/* + * Boot addresses + */ +#define BOOT_ADDRESS_ULTRA 0x80000400 +#define BOOT_ADDRESS_COSIM 0x80002000 +#define BOOT_ADDRESS_EMU 0x20010000 +#define BOOT_ADDRESS_INDY 0x88100000 + +/* + * Size of buffer the retains contents after NMI + */ +#define OS_APP_NMI_BUFSIZE 64 + +#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) + +/************************************************************************** + * + * Macro definitions + * + */ + +/* PARTNER-N64 */ +#ifdef PTN64 +#define osReadHost osReadHost_pt +#define osWriteHost osWriteHost_pt +#endif + +/* Get count of valid messages in queue */ +#define MQ_GET_COUNT(mq) ((mq)->validCount) + +/* Figure out if message queue is empty or full */ +#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0) +#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount) + +/* + * CPU counter increments at 3/4 of bus clock rate: + * + * Bus Clock Proc Clock Counter (1/2 Proc Clock) + * --------- ---------- ------------------------ + * 62.5 Mhz 93.75 Mhz 46.875 Mhz + */ +extern u64 osClockRate; + +#define OS_CLOCK_RATE 62500000LL +#define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4) +#define OS_NSEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL)) +#define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL)) +#define OS_CYCLES_TO_NSEC(c) (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL)) +#define OS_CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL)) + +/************************************************************************** + * + * Extern variables + * + */ +extern OSViMode osViModeTable[]; /* Global VI mode table */ + +extern OSViMode osViModeNtscLpn1; /* Individual VI NTSC modes */ +extern OSViMode osViModeNtscLpf1; +extern OSViMode osViModeNtscLan1; +extern OSViMode osViModeNtscLaf1; +extern OSViMode osViModeNtscLpn2; +extern OSViMode osViModeNtscLpf2; +extern OSViMode osViModeNtscLan2; +extern OSViMode osViModeNtscLaf2; +extern OSViMode osViModeNtscHpn1; +extern OSViMode osViModeNtscHpf1; +extern OSViMode osViModeNtscHan1; +extern OSViMode osViModeNtscHaf1; +extern OSViMode osViModeNtscHpn2; +extern OSViMode osViModeNtscHpf2; + +extern OSViMode osViModePalLpn1; /* Individual VI PAL modes */ +extern OSViMode osViModePalLpf1; +extern OSViMode osViModePalLan1; +extern OSViMode osViModePalLaf1; +extern OSViMode osViModePalLpn2; +extern OSViMode osViModePalLpf2; +extern OSViMode osViModePalLan2; +extern OSViMode osViModePalLaf2; +extern OSViMode osViModePalHpn1; +extern OSViMode osViModePalHpf1; +extern OSViMode osViModePalHan1; +extern OSViMode osViModePalHaf1; +extern OSViMode osViModePalHpn2; +extern OSViMode osViModePalHpf2; + +extern OSViMode osViModeMpalLpn1; /* Individual VI MPAL modes */ +extern OSViMode osViModeMpalLpf1; +extern OSViMode osViModeMpalLan1; +extern OSViMode osViModeMpalLaf1; +extern OSViMode osViModeMpalLpn2; +extern OSViMode osViModeMpalLpf2; +extern OSViMode osViModeMpalLan2; +extern OSViMode osViModeMpalLaf2; +extern OSViMode osViModeMpalHpn1; +extern OSViMode osViModeMpalHpf1; +extern OSViMode osViModeMpalHan1; +extern OSViMode osViModeMpalHaf1; +extern OSViMode osViModeMpalHpn2; +extern OSViMode osViModeMpalHpf2; + +extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */ +extern u32 osRomBase; /* Rom base address of the game image */ +extern u32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */ +extern u32 osResetType; /* 0 = cold reset, 1 = NMI */ +extern s32 osCicId; +extern s32 osVersion; +extern u32 osMemSize; /* Memory Size */ +extern s32 osAppNMIBuffer[]; + +extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */ +extern OSPiHandle *__osPiTable; /* The head of OSPiHandle link list */ +extern OSPiHandle *__osDiskHandle; /* For exceptasm to get disk info*/ + + + +/************************************************************************** + * + * Function prototypes + * + */ + +/* Thread operations */ + +extern void osCreateThread(OSThread *, OSId, void (*)(void *), + void *, void *, OSPri); +extern void osDestroyThread(OSThread *); +extern void osYieldThread(void); +extern void osStartThread(OSThread *); +extern void osStopThread(OSThread *); +extern OSId osGetThreadId(OSThread *); +extern void osSetThreadPri(OSThread *, OSPri); +extern OSPri osGetThreadPri(OSThread *); + +/* Message operations */ + +extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32); +extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32); +extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32); +extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32); + +/* Event operations */ + +extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg); + +/* Interrupt operations */ + +extern OSIntMask osGetIntMask(void); +extern OSIntMask osSetIntMask(OSIntMask); + +/* RDB port operations */ + +extern void osInitRdb(u8 *sendBuf, u32 sendSize); + +/* Cache operations and macros */ + +extern void osInvalDCache(void *, size_t); +extern void osInvalICache(void *, size_t); +extern void osWritebackDCache(void *, size_t); +extern void osWritebackDCacheAll(void); + +#define OS_DCACHE_ROUNDUP_ADDR(x) (void *)(((((u32)(x)+0xf)/0x10)*0x10)) +#define OS_DCACHE_ROUNDUP_SIZE(x) (u32)(((((u32)(x)+0xf)/0x10)*0x10)) + +/* TLB management routines */ + +extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32); +extern void osMapTLBRdb(void); +extern void osUnmapTLB(s32); +extern void osUnmapTLBAll(void); +extern void osSetTLBASID(s32); + +/* Address translation routines and macros */ + +extern u32 osVirtualToPhysical(void *); +extern void * osPhysicalToVirtual(u32); + +#define OS_K0_TO_PHYSICAL(x) (u32)(((char *)(x)-0x80000000)) +#define OS_K1_TO_PHYSICAL(x) (u32)(((char *)(x)-0xa0000000)) + +#define OS_PHYSICAL_TO_K0(x) (void *)(((u32)(x)+0x80000000)) +#define OS_PHYSICAL_TO_K1(x) (void *)(((u32)(x)+0xa0000000)) + +/* I/O operations */ + +/* Audio interface (Ai) */ +extern u32 osAiGetStatus(void); +extern u32 osAiGetLength(void); +extern s32 osAiSetFrequency(u32); +extern s32 osAiSetNextBuffer(void *, u32); + +/* Display processor interface (Dp) */ +extern u32 osDpGetStatus(void); +extern void osDpSetStatus(u32); +extern void osDpGetCounters(u32 *); +extern s32 osDpSetNextBuffer(void *, u64); + +/* Peripheral interface (Pi) */ +extern u32 osPiGetStatus(void); +extern s32 osPiGetDeviceType(void); +extern s32 osPiRawWriteIo(u32, u32); +extern s32 osPiRawReadIo(u32, u32 *); +extern s32 osPiRawStartDma(s32, u32, void *, u32); +extern s32 osPiWriteIo(u32, u32); +extern s32 osPiReadIo(u32, u32 *); +extern s32 osPiStartDma(OSIoMesg *, s32, s32, u32, void *, u32, + OSMesgQueue *); +extern void osCreatePiManager(OSPri, OSMesgQueue *, OSMesg *, s32); + +/* Video interface (Vi) */ +extern u32 osViGetStatus(void); +extern u32 osViGetCurrentMode(void); +extern u32 osViGetCurrentLine(void); +extern u32 osViGetCurrentField(void); +extern void *osViGetCurrentFramebuffer(void); +extern void *osViGetNextFramebuffer(void); +extern void osViSetXScale(f32); +extern void osViSetYScale(f32); +extern void osViSetSpecialFeatures(u32); +extern void osViSetMode(OSViMode *); +extern void osViSetEvent(OSMesgQueue *, OSMesg, u32); +extern void osViSwapBuffer(void *); +extern void osViBlack(u8); +extern void osViFade(u8, u16); +extern void osViRepeatLine(u8); +extern void osCreateViManager(OSPri); + +/* Timer interface */ + +extern OSTime osGetTime(void); +extern void osSetTime(OSTime); +extern u32 osSetTimer(OSTimer *, OSTime, OSTime, + OSMesgQueue *, OSMesg); +extern int osStopTimer(OSTimer *); + +/* Controller interface */ + +extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *); +extern s32 osContReset(OSMesgQueue *, OSContStatus *); +extern s32 osContStartQuery(OSMesgQueue *); +extern s32 osContStartReadData(OSMesgQueue *); +#ifndef _HW_VERSION_1 +extern s32 osContSetCh(u8); +#endif +extern void osContGetQuery(OSContStatus *); +extern void osContGetReadData(OSContPad *); + +/* file system interface */ + +extern s32 osPfsInitPak(OSMesgQueue *, OSPfs *, int); +extern s32 osPfsRepairId(OSPfs *); +extern s32 osPfsInit(OSMesgQueue *, OSPfs *, int); +extern s32 osPfsReFormat(OSPfs *, OSMesgQueue *, int); +extern s32 osPfsChecker(OSPfs *); +extern s32 osPfsAllocateFile(OSPfs *, u16, u32, u8 *, u8 *, int, s32 *); +extern s32 osPfsFindFile(OSPfs *, u16, u32, u8 *, u8 *, s32 *); +extern s32 osPfsDeleteFile(OSPfs *, u16, u32, u8 *, u8 *); +extern s32 osPfsReadWriteFile(OSPfs *, s32, u8, int, int, u8 *); +extern s32 osPfsFileState(OSPfs *, s32, OSPfsState *); +extern s32 osPfsGetLabel(OSPfs *, u8 *, int *); +extern s32 osPfsSetLabel(OSPfs *, u8 *); +extern s32 osPfsIsPlug(OSMesgQueue *, u8 *); +extern s32 osPfsFreeBlocks(OSPfs *, s32 *); +extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *); + +/* EEPROM interface */ + +extern s32 osEepromProbe(OSMesgQueue *); +extern s32 osEepromRead(OSMesgQueue *, u8, u8 *); +extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *); +extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int); +extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int); + +/* MOTOR interface */ + +extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int); +extern s32 osMotorStop(OSPfs *); +extern s32 osMotorStart(OSPfs *); + +/* Enhanced PI interface */ + +extern OSPiHandle *osCartRomInit(void); +extern OSPiHandle *osLeoDiskInit(void); +extern OSPiHandle *osDriveRomInit(void); + +extern s32 osEPiDeviceType(OSPiHandle *, OSPiInfo *); +extern s32 osEPiRawWriteIo(OSPiHandle *, u32 , u32); +extern s32 osEPiRawReadIo(OSPiHandle *, u32 , u32 *); +extern s32 osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 ); +extern s32 osEPiWriteIo(OSPiHandle *, u32 , u32 ); +extern s32 osEPiReadIo(OSPiHandle *, u32 , u32 *); +extern s32 osEPiStartDma(OSPiHandle *, OSIoMesg *, s32); +extern s32 osEPiLinkHandle(OSPiHandle *); + +/* Profiler Interface */ + +extern void osProfileInit(OSProf *, u32 profcnt); +extern void osProfileStart(u32); +extern void osProfileFlush(void); +extern void osProfileStop(void); + +/* Game <> Host data transfer functions */ + +extern s32 osTestHost(void); +extern void osReadHost(void *, u32); +extern void osWriteHost(void *, u32); +extern void osAckRamromRead(void); +extern void osAckRamromWrite(void); + + +/* byte string operations */ + +extern void bcopy(const void *, void *, size_t); +extern int bcmp(const void *, const void *, int); +extern void bzero(void *, size_t); + +/* Miscellaneous operations */ + +extern void osInitialize(void); +extern u32 osGetCount(void); +extern void osExit(void); +extern u32 osGetMemSize(void); + +/* Printf */ + +extern int sprintf(char *s, const char *fmt, ...); +extern void osSyncPrintf(const char *fmt, ...); +extern void osAsyncPrintf(const char *fmt, ...); +extern int osSyncGetChars(char *buf); +extern int osAsyncGetChars(char *buf); + +#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ + +#ifdef _LANGUAGE_C_PLUS_PLUS +} +#endif + +#endif /* !_OS_H */ diff --git a/include/ultra64/os_ai.h b/src/libultra/osAi.h similarity index 67% rename from include/ultra64/os_ai.h rename to src/libultra/osAi.h index 02e8ce8..276fa07 100644 --- a/include/ultra64/os_ai.h +++ b/src/libultra/osAi.h @@ -1,8 +1,7 @@ -#ifndef _ULTRA64_AI_H_ -#define _ULTRA64_AI_H_ +#ifndef _OSAI_H_ +#define _OSAI_H_ -u32 osAiGetLength(void); -s32 osAiSetNextBuffer(void *, u32); s32 osAiSetFrequency(u32); - +s32 osAiSetNextBuffer(void *, u32); +u32 osAiGetLength(void); #endif diff --git a/src/libultra/osContInternal.h b/src/libultra/osContInternal.h new file mode 100644 index 0000000..0f62820 --- /dev/null +++ b/src/libultra/osContInternal.h @@ -0,0 +1,47 @@ +#ifndef _ULTRA64_CONTROLLER_INTERNAL_H_ +#define _ULTRA64_CONTROLLER_INTERNAL_H_ + +#include + +typedef struct +{ + u8 padOrEnd; + u8 txLen; + u8 rxLen; //includes errno + u8 command; + u16 button; + s8 rawStickX; + s8 rawStickY; +} OSContPackedRead; + +typedef struct +{ + u8 padOrEnd; + u8 txLen; + u8 rxLen; + u8 command; + u8 data1; + u8 data2; + u8 data3; + u8 data4; +} OSContPackedRequest; + +typedef union { + OSContPackedRead read; + OSContPackedRequest request; + u32 as_raw[2]; +} OSContPackedStruct; + +#ifdef AVOID_UB +// Fix the OSContPackedStruct array +extern OSContPackedStruct _osContCmdBuf[8]; + +// And fix the last element +#define _osContPifCtrl _osContCmdBuf[7].as_raw[1] +#else +// Original OSContPackedStruct definitions +extern OSContPackedStruct _osContCmdBuf[7]; +extern u32 _osContPifCtrl; +#endif + +#endif diff --git a/src/libultra/osint.h b/src/libultra/osint.h new file mode 100644 index 0000000..49234d7 --- /dev/null +++ b/src/libultra/osint.h @@ -0,0 +1,53 @@ +#ifndef _OSINT_H +#define _OSINT_H +#include "libultra_internal.h" + +typedef struct __OSEventState +{ + OSMesgQueue *messageQueue; + OSMesg message; +} __OSEventState; +extern struct __osThreadTail +{ + OSThread *next; + OSPri priority; +} __osThreadTail; + +//maybe should be in exceptasm.h? +extern void __osEnqueueAndYield(OSThread **); +extern void __osDequeueThread(OSThread **, OSThread *); +extern void __osEnqueueThread(OSThread **, OSThread *); +extern OSThread *__osPopThread(OSThread **); +extern void __osDispatchThread(void); + +extern void __osSetTimerIntr(OSTime); +extern OSTime __osInsertTimer(OSTimer *); +extern void __osTimerInterrupt(void); +extern u32 __osProbeTLB(void *); +extern int __osSpDeviceBusy(void); + +#ifdef AVOID_UB +extern OSThread_ListHead D_80334890_fix; +#else +extern OSThread *__osRunningThread; +extern OSThread *D_8033489C; +extern OSThread *__osFaultedThread; +extern OSThread *__osRunQueue; +#endif + +extern OSTimer *__osTimerList; +extern OSTimer __osBaseTimer; +extern OSTime __osCurrentTime; +extern u32 __osBaseCounter; +extern u32 __osViIntrCount; +extern u32 __osTimerCounter; + +extern __OSEventState __osEventStateTab[OS_NUM_EVENTS]; + + +//not sure if this should be here +extern s32 osViClock; +extern void __osTimerServicesInit(void); +extern s32 __osAiDeviceBusy(void); +extern int __osDpDeviceBusy(void); +#endif diff --git a/src/libultra/piint.h b/src/libultra/piint.h new file mode 100644 index 0000000..b3fee34 --- /dev/null +++ b/src/libultra/piint.h @@ -0,0 +1,147 @@ +#ifndef _PIINT_H +#define _PIINT_H +#include "PR/os_internal.h" +#include "PR/rcp.h" +#include "PR/os_pi.h" +#include "os.h" + +//https://github.com/LuigiBlood/64dd/wiki/Memory-Map + +#define LEO_BASE_REG 0x05000000 + +#define LEO_CMD (LEO_BASE_REG + 0x508) +#define LEO_STATUS (LEO_BASE_REG + 0x508) + +#define LEO_BM_CTL (LEO_BASE_REG + 0x510) +#define LEO_BM_STATUS (LEO_BASE_REG + 0x510) + +#define LEO_SEQ_CTL (LEO_BASE_REG + 0x518) +#define LEO_SEQ_STATUS (LEO_BASE_REG + 0x518) + +#define LEO_C2_BUFF (LEO_BASE_REG + 0x000) //C2 Sector Buffer +#define LEO_SECTOR_BUFF (LEO_BASE_REG + 0x400) //Data Sector Buffer +#define LEO_DATA (LEO_BASE_REG + 0x500) //Data +#define LEO_MISC_REG (LEO_BASE_REG + 0x504) //Misc Register +#define LEO_CUR_TK (LEO_BASE_REG + 0x50C) //Current Track +#define LEO_ERR_SECTOR (LEO_BASE_REG + 0x514) //Sector Error Status +#define LEO_CUR_SECTOR (LEO_BASE_REG + 0x51C) //Current Sector +#define LEO_HARD_RESET (LEO_BASE_REG + 0x520) //Hard Reset +#define LEO_C1_S0 (LEO_BASE_REG + 0x524) //C1 +#define LEO_HOST_SECBYTE (LEO_BASE_REG + 0x528) //Sector Size (in bytes) +#define LEO_C1_S2 (LEO_BASE_REG + 0x52C) //C1 +#define LEO_SEC_BYTE (LEO_BASE_REG + 0x530) //Sectors per Block, Full Size +#define LEO_C1_S4 (LEO_BASE_REG + 0x534) //C1 +#define LEO_C1_S6 (LEO_BASE_REG + 0x538) //C1 +#define LEO_CUR_ADDR (LEO_BASE_REG + 0x53C) //Current Address? +#define LEO_ID_REG (LEO_BASE_REG + 0x540) //ID +#define LEO_TEST_REG (LEO_BASE_REG + 0x544) //Test Read +#define LEO_TEST_PIN_SEL (LEO_BASE_REG + 0x548) //Test Write +#define LEO_RAM_ADDR (LEO_BASE_REG + 0x580) //Microsequencer RAM + +#define LEO_STATUS_PRESENCE_MASK 0xFFFF + +#define LEO_STATUS_DATA_REQUEST 0x40000000 +#define LEO_STATUS_C2_TRANSFER 0x10000000 +#define LEO_STATUS_BUFFER_MANAGER_ERROR 0x08000000 +#define LEO_STATUS_BUFFER_MANAGER_INTERRUPT 0x04000000 +#define LEO_STATUS_MECHANIC_INTERRUPT 0x02000000 +#define LEO_STATUS_DISK_PRESENT 0x01000000 +#define LEO_STATUS_BUSY_STATE 0x00800000 +#define LEO_STATUS_RESET_STATE 0x00400000 +#define LEO_STATUS_MOTOR_NOT_SPINNING 0x00100000 +#define LEO_STATUS_HEAD_RETRACTED 0x00080000 +#define LEO_STATUS_WRITE_PROTECT_ERROR 0x00040000 +#define LEO_STATUS_MECHANIC_ERROR 0x00020000 +#define LEO_STATUS_DISK_CHANGE 0x00010000 + +#define LEO_STATUS_MODE_MASK (LEO_STATUS_MOTOR_NOT_SPINNING | LEO_STATUS_HEAD_RETRACTED) +#define LEO_STATUS_MODE_SLEEP (LEO_STATUS_MOTOR_NOT_SPINNING | LEO_STATUS_HEAD_RETRACTED) +#define LEO_STATUS_MODE_STANDBY (LEO_STATUS_HEAD_RETRACTED) +#define LEO_STATUS_MODE_ACTIVE 0 + +#define LEO_CUR_TK_INDEX_LOCK 0x60000000 + +#define LEO_BM_STATUS_RUNNING 0x80000000 //Running +#define LEO_BM_STATUS_ERROR 0x04000000 //Error +#define LEO_BM_STATUS_MICRO 0x02000000 //Micro Status? +#define LEO_BM_STATUS_BLOCK 0x01000000 //Block Transfer +#define LEO_BM_STATUS_C1CORRECTION 0x00800000 //C1 Correction +#define LEO_BM_STATUS_C1DOUBLE 0x00400000 //C1 Double +#define LEO_BM_STATUS_C1SINGLE 0x00200000 //C1 Single +#define LEO_BM_STATUS_C1ERROR 0x00010000 //C1 Error + +#define LEO_BM_CTL_START 0x80000000 //Start Buffer Manager +#define LEO_BM_CTL_MODE 0x40000000 //Buffer Manager Mode +#define LEO_BM_CTL_IMASK 0x20000000 //BM Interrupt Mask +#define LEO_BM_CTL_RESET 0x10000000 //Buffer Manager Reset +#define LEO_BM_CTL_DISABLE_OR 0x08000000 //Disable OR Check? +#define LEO_BM_CTL_DISABLE_C1 0x04000000 //Disable C1 Correction +#define LEO_BM_CTL_BLOCK 0x02000000 //Block Transfer +#define LEO_BM_CTL_CLR_MECHANIC_INTR 0x01000000 //Mechanic Interrupt Reset + +#define LEO_BM_CTL_CONTROL_MASK 0xFF000000 +#define LEO_BM_CTL_SECTOR_MASK 0x00FF0000 +#define LEO_BM_CTL_SECTOR_SHIFT 16 + +#define LEO_CMD_TYPE_0 0 //TODO: name +#define LEO_CMD_TYPE_1 1 //TODO: name +#define LEO_CMD_TYPE_2 2 //TODO: name + +#define LEO_ERROR_GOOD 0 +#define LEO_ERROR_4 4 //maybe busy? +#define LEO_ERROR_22 22 // +#define LEO_ERROR_23 23 //unrecovered read error? +#define LEO_ERROR_24 24 //no reference position found? +#define LEO_ERROR_29 29 // + +extern OSDevMgr __osPiDevMgr; +extern OSPiHandle *__osCurrentHandle[2]; +extern OSPiHandle CartRomHandle; +extern OSPiHandle LeoDiskHandle; +extern OSMesgQueue __osPiAccessQueue; +extern u32 __osPiAccessQueueEnabled; + +int __osPiDeviceBusy(void); +void __osDevMgrMain(void *); +void __osPiCreateAccessQueue(void); +void __osPiRelAccess(void); +void __osPiGetAccess(void); +OSMesgQueue *osPiGetCmdQueue(void); + +#define OS_RAMROM_STACKSIZE 1024 + +#define WAIT_ON_IOBUSY(stat) \ + stat = IO_READ(PI_STATUS_REG); \ + while (stat & (PI_STATUS_IO_BUSY | PI_STATUS_DMA_BUSY)) \ + stat = IO_READ(PI_STATUS_REG); + +#define UPDATE_REG(reg, var) \ + if (cHandle->var != pihandle->var) \ + IO_WRITE(reg, pihandle->var); + +#define EPI_SYNC(pihandle, stat, domain) \ + \ + WAIT_ON_IOBUSY(stat) \ + \ + domain = pihandle->domain; \ + if (__osCurrentHandle[domain] != pihandle) \ + { \ + OSPiHandle *cHandle = __osCurrentHandle[domain]; \ + if (domain == PI_DOMAIN1) \ + { \ + UPDATE_REG(PI_BSD_DOM1_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM1_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM1_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM1_PWD_REG, pulse); \ + } \ + else \ + { \ + UPDATE_REG(PI_BSD_DOM2_LAT_REG, latency); \ + UPDATE_REG(PI_BSD_DOM2_PGS_REG, pageSize); \ + UPDATE_REG(PI_BSD_DOM2_RLS_REG, relDuration); \ + UPDATE_REG(PI_BSD_DOM2_PWD_REG, pulse); \ + } \ + __osCurrentHandle[domain] = pihandle; \ + } + +#endif diff --git a/src/libultra/printf.h b/src/libultra/printf.h new file mode 100644 index 0000000..5d798a1 --- /dev/null +++ b/src/libultra/printf.h @@ -0,0 +1,36 @@ +#ifndef _PRINTF_H_ +#define _PRINTF_H_ +#include + +typedef struct +{ + union { + /* 00 */ s64 s64; + u64 u64; + f64 f64; + u32 u32; + u16 u16; + } value; + /* 08 */ char *buff; + /* 0c */ s32 part1_len; + /* 10 */ s32 num_leading_zeros; + /* 14 */ s32 part2_len; + /* 18 */ s32 num_mid_zeros; + /* 1c */ s32 part3_len; + /* 20 */ s32 num_trailing_zeros; + /* 24 */ s32 precision; + /* 28 */ s32 width; + /* 2c */ u32 size; + /* 30 */ u32 flags; + /* 34 */ u8 length; +} printf_struct; + +#define FLAGS_SPACE 1 +#define FLAGS_PLUS 2 +#define FLAGS_MINUS 4 +#define FLAGS_HASH 8 +#define FLAGS_ZERO 16 +s32 _Printf(char *(*prout)(char *, const char *, size_t), char *dst, const char *fmt, va_list args); +void _Litob(printf_struct *args, u8 type); +void _Ldtob(printf_struct *args, u8 type); +#endif diff --git a/src/libultra/seteventmesg.c b/src/libultra/seteventmesg.c new file mode 100644 index 0000000..4610b4b --- /dev/null +++ b/src/libultra/seteventmesg.c @@ -0,0 +1,18 @@ +#include "libultra_internal.h" + +typedef struct OSEventMessageStruct_0_s { + OSMesgQueue *queue; + OSMesg msg; +} OSEventMessageStruct_0; + +OSEventMessageStruct_0 __osEventStateTab[16]; + +void osSetEventMesg(OSEvent e, OSMesgQueue *mq, OSMesg msg) { + register u32 int_disabled; + OSEventMessageStruct_0 *msgs; + int_disabled = __osDisableInt(); + msgs = __osEventStateTab + e; + msgs->queue = mq; + msgs->msg = msg; + __osRestoreInt(int_disabled); +} diff --git a/src/libultra/seteventmesg.s b/src/libultra/seteventmesg.s deleted file mode 100644 index ad7ad44..0000000 --- a/src/libultra/seteventmesg.s +++ /dev/null @@ -1,162 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osSetEventMesg -/* 00E850 7000DC50 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 00E854 7000DC54 AFBF001C */ sw $ra, 0x1c($sp) -/* 00E858 7000DC58 AFA40028 */ sw $a0, 0x28($sp) -/* 00E85C 7000DC5C AFA5002C */ sw $a1, 0x2c($sp) -/* 00E860 7000DC60 AFA60030 */ sw $a2, 0x30($sp) -/* 00E864 7000DC64 0C00617C */ jal __osDisableInt -/* 00E868 7000DC68 AFB00018 */ sw $s0, 0x18($sp) -/* 00E86C 7000DC6C 8FAE0028 */ lw $t6, 0x28($sp) -/* 00E870 7000DC70 3C188006 */ lui $t8, %hi(__osEventStateTab) -/* 00E874 7000DC74 8FA8002C */ lw $t0, 0x2c($sp) -/* 00E878 7000DC78 27186A10 */ addiu $t8, %lo(__osEventStateTab) # addiu $t8, $t8, 0x6a10 -/* 00E87C 7000DC7C 000E78C0 */ sll $t7, $t6, 3 -/* 00E880 7000DC80 01F8C821 */ addu $t9, $t7, $t8 -/* 00E884 7000DC84 AFB90020 */ sw $t9, 0x20($sp) -/* 00E888 7000DC88 AF280000 */ sw $t0, ($t9) -/* 00E88C 7000DC8C 8FAA0020 */ lw $t2, 0x20($sp) -/* 00E890 7000DC90 8FA90030 */ lw $t1, 0x30($sp) -/* 00E894 7000DC94 00408025 */ move $s0, $v0 -/* 00E898 7000DC98 02002025 */ move $a0, $s0 -/* 00E89C 7000DC9C 0C006184 */ jal __osRestoreInt -/* 00E8A0 7000DCA0 AD490004 */ sw $t1, 4($t2) -/* 00E8A4 7000DCA4 8FBF001C */ lw $ra, 0x1c($sp) -/* 00E8A8 7000DCA8 8FB00018 */ lw $s0, 0x18($sp) -/* 00E8AC 7000DCAC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 00E8B0 7000DCB0 03E00008 */ jr $ra -/* 00E8B4 7000DCB4 00000000 */ nop - -.section .bss -glabel __osEventStateTab -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 -.byte 0 - - - diff --git a/src/libultra/setthreadpri.c b/src/libultra/setthreadpri.c new file mode 100644 index 0000000..84a9a4c --- /dev/null +++ b/src/libultra/setthreadpri.c @@ -0,0 +1,24 @@ +#include "libultra_internal.h" + +void osSetThreadPri(OSThread *thread, OSPri pri) { + register u32 int_disabled = __osDisableInt(); + if (thread == NULL) { + thread = __osRunningThread; + } + + if (thread->priority != pri) { + thread->priority = pri; + if (thread != __osRunningThread) { + if (thread->state != OS_STATE_STOPPED) { + __osDequeueThread(thread->queue, thread); + __osEnqueueThread(thread->queue, thread); + } + } + if (__osRunningThread->priority < __osRunQueue->priority) { + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + } + } + + __osRestoreInt(int_disabled); +} diff --git a/src/libultra/setthreadpri.s b/src/libultra/setthreadpri.s deleted file mode 100644 index e015c47..0000000 --- a/src/libultra/setthreadpri.s +++ /dev/null @@ -1,70 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" - -glabel osSetThreadPri -/* 00E400 7000D800 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 00E404 7000D804 AFBF001C */ sw $ra, 0x1c($sp) -/* 00E408 7000D808 AFA40028 */ sw $a0, 0x28($sp) -/* 00E40C 7000D80C AFA5002C */ sw $a1, 0x2c($sp) -/* 00E410 7000D810 0C00617C */ jal __osDisableInt -/* 00E414 7000D814 AFB00018 */ sw $s0, 0x18($sp) -/* 00E418 7000D818 8FAE0028 */ lw $t6, 0x28($sp) -/* 00E41C 7000D81C 00408025 */ move $s0, $v0 -/* 00E420 7000D820 15C00004 */ bnez $t6, .L7000D834 -/* 00E424 7000D824 00000000 */ nop -/* 00E428 7000D828 3C0F8002 */ lui $t7, %hi(__osRunningThread) -/* 00E42C 7000D82C 8DEF7730 */ lw $t7, %lo(__osRunningThread)($t7) -/* 00E430 7000D830 AFAF0028 */ sw $t7, 0x28($sp) -.L7000D834: -/* 00E434 7000D834 8FB80028 */ lw $t8, 0x28($sp) -/* 00E438 7000D838 8FA8002C */ lw $t0, 0x2c($sp) -/* 00E43C 7000D83C 8F190004 */ lw $t9, 4($t8) -/* 00E440 7000D840 13280020 */ beq $t9, $t0, .L7000D8C4 -/* 00E444 7000D844 00000000 */ nop -/* 00E448 7000D848 AF080004 */ sw $t0, 4($t8) -/* 00E44C 7000D84C 3C0A8002 */ lui $t2, %hi(__osRunningThread) -/* 00E450 7000D850 8D4A7730 */ lw $t2, %lo(__osRunningThread)($t2) -/* 00E454 7000D854 8FA90028 */ lw $t1, 0x28($sp) -/* 00E458 7000D858 112A000C */ beq $t1, $t2, .L7000D88C -/* 00E45C 7000D85C 00000000 */ nop -/* 00E460 7000D860 952B0010 */ lhu $t3, 0x10($t1) -/* 00E464 7000D864 24010001 */ li $at, 1 -/* 00E468 7000D868 11610008 */ beq $t3, $at, .L7000D88C -/* 00E46C 7000D86C 00000000 */ nop -/* 00E470 7000D870 8D240008 */ lw $a0, 8($t1) -/* 00E474 7000D874 0C0042A4 */ jal __osDequeueThread -/* 00E478 7000D878 01202825 */ move $a1, $t1 -/* 00E47C 7000D87C 8FAC0028 */ lw $t4, 0x28($sp) -/* 00E480 7000D880 8D840008 */ lw $a0, 8($t4) -/* 00E484 7000D884 0C00422B */ jal __osEnqueueThread -/* 00E488 7000D888 01802825 */ move $a1, $t4 -.L7000D88C: -/* 00E48C 7000D88C 3C0D8002 */ lui $t5, %hi(__osRunningThread) -/* 00E490 7000D890 3C0F8002 */ lui $t7, %hi(__osRunQueue) -/* 00E494 7000D894 8DEF7728 */ lw $t7, %lo(__osRunQueue)($t7) -/* 00E498 7000D898 8DAD7730 */ lw $t5, %lo(__osRunningThread)($t5) -/* 00E49C 7000D89C 8DF90004 */ lw $t9, 4($t7) -/* 00E4A0 7000D8A0 8DAE0004 */ lw $t6, 4($t5) -/* 00E4A4 7000D8A4 01D9082A */ slt $at, $t6, $t9 -/* 00E4A8 7000D8A8 10200006 */ beqz $at, .L7000D8C4 -/* 00E4AC 7000D8AC 00000000 */ nop -/* 00E4B0 7000D8B0 24080002 */ li $t0, 2 -/* 00E4B4 7000D8B4 3C048002 */ lui $a0, %hi(__osRunQueue) -/* 00E4B8 7000D8B8 A5A80010 */ sh $t0, 0x10($t5) -/* 00E4BC 7000D8BC 0C0041EB */ jal __osEnqueueAndYield -/* 00E4C0 7000D8C0 24847728 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, 0x7728 -.L7000D8C4: -/* 00E4C4 7000D8C4 0C006184 */ jal __osRestoreInt -/* 00E4C8 7000D8C8 02002025 */ move $a0, $s0 -/* 00E4CC 7000D8CC 8FBF001C */ lw $ra, 0x1c($sp) -/* 00E4D0 7000D8D0 8FB00018 */ lw $s0, 0x18($sp) -/* 00E4D4 7000D8D4 27BD0028 */ addiu $sp, $sp, 0x28 -/* 00E4D8 7000D8D8 03E00008 */ jr $ra -/* 00E4DC 7000D8DC 00000000 */ nop diff --git a/src/libultra/settimer.c b/src/libultra/settimer.c new file mode 100644 index 0000000..dda659f --- /dev/null +++ b/src/libultra/settimer.c @@ -0,0 +1,23 @@ +#include "libultra_internal.h" + +extern OSTimer *__osTimerList; +extern u64 __osInsertTimer(OSTimer *); + +u32 osSetTimer(OSTimer *a0, OSTime a1, u64 a2, OSMesgQueue *a3, OSMesg a4) { + u64 sp18; + a0->next = NULL; + a0->prev = NULL; + a0->interval = a2; + if (a1 != 0) { + a0->remaining = a1; + } else { + a0->remaining = a2; + } + a0->mq = a3; + a0->msg = a4; + sp18 = __osInsertTimer(a0); + if (__osTimerList->next == a0) { + __osSetTimerIntr(sp18); + } + return 0; +} diff --git a/src/libultra/settimer.s b/src/libultra/settimer.s deleted file mode 100644 index 5b04978..0000000 --- a/src/libultra/settimer.s +++ /dev/null @@ -1,67 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osSetTimer -/* 011850 70010C50 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 011854 70010C54 AFA40020 */ sw $a0, 0x20($sp) -/* 011858 70010C58 8FAE0020 */ lw $t6, 0x20($sp) -/* 01185C 70010C5C AFBF0014 */ sw $ra, 0x14($sp) -/* 011860 70010C60 AFA60028 */ sw $a2, 0x28($sp) -/* 011864 70010C64 AFA7002C */ sw $a3, 0x2c($sp) -/* 011868 70010C68 ADC00000 */ sw $zero, ($t6) -/* 01186C 70010C6C 8FAF0020 */ lw $t7, 0x20($sp) -/* 011870 70010C70 ADE00004 */ sw $zero, 4($t7) -/* 011874 70010C74 8FA80020 */ lw $t0, 0x20($sp) -/* 011878 70010C78 8FB90034 */ lw $t9, 0x34($sp) -/* 01187C 70010C7C 8FB80030 */ lw $t8, 0x30($sp) -/* 011880 70010C80 AD19000C */ sw $t9, 0xc($t0) -/* 011884 70010C84 AD180008 */ sw $t8, 8($t0) -/* 011888 70010C88 8FAA0028 */ lw $t2, 0x28($sp) -/* 01188C 70010C8C 8FAB002C */ lw $t3, 0x2c($sp) -/* 011890 70010C90 15400003 */ bnez $t2, .L70010CA0 -/* 011894 70010C94 00000000 */ nop -/* 011898 70010C98 11600005 */ beqz $t3, .L70010CB0 -/* 01189C 70010C9C 00000000 */ nop -.L70010CA0: -/* 0118A0 70010CA0 8FA90020 */ lw $t1, 0x20($sp) -/* 0118A4 70010CA4 AD2A0010 */ sw $t2, 0x10($t1) -/* 0118A8 70010CA8 10000006 */ b .L70010CC4 -/* 0118AC 70010CAC AD2B0014 */ sw $t3, 0x14($t1) -.L70010CB0: -/* 0118B0 70010CB0 8FAE0020 */ lw $t6, 0x20($sp) -/* 0118B4 70010CB4 8FAC0030 */ lw $t4, 0x30($sp) -/* 0118B8 70010CB8 8FAD0034 */ lw $t5, 0x34($sp) -/* 0118BC 70010CBC ADCC0010 */ sw $t4, 0x10($t6) -/* 0118C0 70010CC0 ADCD0014 */ sw $t5, 0x14($t6) -.L70010CC4: -/* 0118C4 70010CC4 8FAF0038 */ lw $t7, 0x38($sp) -/* 0118C8 70010CC8 8FB80020 */ lw $t8, 0x20($sp) -/* 0118CC 70010CCC AF0F0018 */ sw $t7, 0x18($t8) -/* 0118D0 70010CD0 8FA80020 */ lw $t0, 0x20($sp) -/* 0118D4 70010CD4 8FB9003C */ lw $t9, 0x3c($sp) -/* 0118D8 70010CD8 AD19001C */ sw $t9, 0x1c($t0) -/* 0118DC 70010CDC 0C00622A */ jal __osInsertTimer -/* 0118E0 70010CE0 8FA40020 */ lw $a0, 0x20($sp) -/* 0118E4 70010CE4 3C0A8002 */ lui $t2, %hi(__osTimerList) -/* 0118E8 70010CE8 8D4A7FD0 */ lw $t2, %lo(__osTimerList)($t2) -/* 0118EC 70010CEC AFA20018 */ sw $v0, 0x18($sp) -/* 0118F0 70010CF0 AFA3001C */ sw $v1, 0x1c($sp) -/* 0118F4 70010CF4 8FA90020 */ lw $t1, 0x20($sp) -/* 0118F8 70010CF8 8D4B0000 */ lw $t3, ($t2) -/* 0118FC 70010CFC 15690004 */ bne $t3, $t1, .L70010D10 -/* 011900 70010D00 00000000 */ nop -/* 011904 70010D04 8FA40018 */ lw $a0, 0x18($sp) -/* 011908 70010D08 0C00620D */ jal __osSetTimerIntr -/* 01190C 70010D0C 8FA5001C */ lw $a1, 0x1c($sp) -.L70010D10: -/* 011910 70010D10 8FBF0014 */ lw $ra, 0x14($sp) -/* 011914 70010D14 27BD0020 */ addiu $sp, $sp, 0x20 -/* 011918 70010D18 00001025 */ move $v0, $zero -/* 01191C 70010D1C 03E00008 */ jr $ra -/* 011920 70010D20 00000000 */ nop diff --git a/src/libultra/sptaskyield.c b/src/libultra/sptaskyield.c new file mode 100644 index 0000000..92546a8 --- /dev/null +++ b/src/libultra/sptaskyield.c @@ -0,0 +1,5 @@ +#include "libultra_internal.h" + +void osSpTaskYield(void) { + __osSpSetStatus(SPSTATUS_SET_SIGNAL0); +} diff --git a/src/libultra/sptaskyield.s b/src/libultra/sptaskyield.s deleted file mode 100644 index 1721c3c..0000000 --- a/src/libultra/sptaskyield.s +++ /dev/null @@ -1,18 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osSpTaskYield -/* 00F460 7000E860 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 00F464 7000E864 AFBF0014 */ sw $ra, 0x14($sp) -/* 00F468 7000E868 0C0063B8 */ jal __osSpSetStatus -/* 00F46C 7000E86C 24040400 */ li $a0, 1024 -/* 00F470 7000E870 8FBF0014 */ lw $ra, 0x14($sp) -/* 00F474 7000E874 27BD0018 */ addiu $sp, $sp, 0x18 -/* 00F478 7000E878 03E00008 */ jr $ra -/* 00F47C 7000E87C 00000000 */ nop diff --git a/src/libultra/sptaskyielded.c b/src/libultra/sptaskyielded.c new file mode 100644 index 0000000..fa0dcbc --- /dev/null +++ b/src/libultra/sptaskyielded.c @@ -0,0 +1,17 @@ +#include "libultra_internal.h" + +OSYieldResult osSpTaskYielded(OSTask *task) { + s32 status; + u32 int_disabledult; + status = __osSpGetStatus(); + if (status & SPSTATUS_SIGNAL1_SET) { + int_disabledult = 1; + } else { + int_disabledult = 0; + } + if (status & SPSTATUS_SIGNAL0_SET) { + task->t.flags |= int_disabledult; + task->t.flags &= ~(M_TASK_FLAG1); + } + return int_disabledult; +} diff --git a/src/libultra/sptaskyielded.s b/src/libultra/sptaskyielded.s deleted file mode 100644 index 7ba8d94..0000000 --- a/src/libultra/sptaskyielded.s +++ /dev/null @@ -1,46 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" - -glabel osSpTaskYielded -/* 00EF40 7000E340 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 00EF44 7000E344 AFBF0014 */ sw $ra, 0x14($sp) -/* 00EF48 7000E348 0C0063B4 */ jal __osSpGetStatus -/* 00EF4C 7000E34C AFA40020 */ sw $a0, 0x20($sp) -/* 00EF50 7000E350 AFA2001C */ sw $v0, 0x1c($sp) -/* 00EF54 7000E354 8FAE001C */ lw $t6, 0x1c($sp) -/* 00EF58 7000E358 31CF0100 */ andi $t7, $t6, 0x100 -/* 00EF5C 7000E35C 11E00004 */ beqz $t7, .L7000E370 -/* 00EF60 7000E360 00000000 */ nop -/* 00EF64 7000E364 24180001 */ li $t8, 1 -/* 00EF68 7000E368 10000002 */ b .L7000E374 -/* 00EF6C 7000E36C AFB80018 */ sw $t8, 0x18($sp) -.L7000E370: -/* 00EF70 7000E370 AFA00018 */ sw $zero, 0x18($sp) -.L7000E374: -/* 00EF74 7000E374 8FB9001C */ lw $t9, 0x1c($sp) -/* 00EF78 7000E378 33280080 */ andi $t0, $t9, 0x80 -/* 00EF7C 7000E37C 1100000B */ beqz $t0, .L7000E3AC -/* 00EF80 7000E380 00000000 */ nop -/* 00EF84 7000E384 8FA90020 */ lw $t1, 0x20($sp) -/* 00EF88 7000E388 8FAB0018 */ lw $t3, 0x18($sp) -/* 00EF8C 7000E38C 2401FFFD */ li $at, -3 -/* 00EF90 7000E390 8D2A0004 */ lw $t2, 4($t1) -/* 00EF94 7000E394 014B6025 */ or $t4, $t2, $t3 -/* 00EF98 7000E398 AD2C0004 */ sw $t4, 4($t1) -/* 00EF9C 7000E39C 8FAD0020 */ lw $t5, 0x20($sp) -/* 00EFA0 7000E3A0 8DAE0004 */ lw $t6, 4($t5) -/* 00EFA4 7000E3A4 01C17824 */ and $t7, $t6, $at -/* 00EFA8 7000E3A8 ADAF0004 */ sw $t7, 4($t5) -.L7000E3AC: -/* 00EFAC 7000E3AC 8FBF0014 */ lw $ra, 0x14($sp) -/* 00EFB0 7000E3B0 8FA20018 */ lw $v0, 0x18($sp) -/* 00EFB4 7000E3B4 27BD0020 */ addiu $sp, $sp, 0x20 -/* 00EFB8 7000E3B8 03E00008 */ jr $ra -/* 00EFBC 7000E3BC 00000000 */ nop diff --git a/src/libultra/startthread.c b/src/libultra/startthread.c new file mode 100644 index 0000000..a9a8ce8 --- /dev/null +++ b/src/libultra/startthread.c @@ -0,0 +1,37 @@ +#include "libultra_internal.h" + +void osStartThread(OSThread *thread) { + register u32 int_disabled; + register uintptr_t state; + int_disabled = __osDisableInt(); + state = thread->state; + + if (state != OS_STATE_STOPPED) { + if (state == OS_STATE_WAITING) { + do { + } while (0); + thread->state = OS_STATE_RUNNABLE; + __osEnqueueThread(&__osRunQueue, thread); + } + } else { + if (thread->queue == NULL || thread->queue == &__osRunQueue) { + thread->state = OS_STATE_RUNNABLE; + + __osEnqueueThread(&__osRunQueue, thread); + } else { + thread->state = OS_STATE_WAITING; + __osEnqueueThread(thread->queue, thread); + state = (uintptr_t) __osPopThread(thread->queue); + __osEnqueueThread(&__osRunQueue, (OSThread *) state); + } + } + if (__osRunningThread == NULL) { + __osDispatchThread(); + } else { + if (__osRunningThread->priority < __osRunQueue->priority) { + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + } + } + __osRestoreInt(int_disabled); +} diff --git a/src/libultra/startthread.s b/src/libultra/startthread.s deleted file mode 100644 index 0cc8be4..0000000 --- a/src/libultra/startthread.s +++ /dev/null @@ -1,100 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osStartThread -/* 00E180 7000D580 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 00E184 7000D584 AFBF001C */ sw $ra, 0x1c($sp) -/* 00E188 7000D588 AFA40028 */ sw $a0, 0x28($sp) -/* 00E18C 7000D58C AFB10018 */ sw $s1, 0x18($sp) -/* 00E190 7000D590 0C00617C */ jal __osDisableInt -/* 00E194 7000D594 AFB00014 */ sw $s0, 0x14($sp) -/* 00E198 7000D598 8FAE0028 */ lw $t6, 0x28($sp) -/* 00E19C 7000D59C 24010001 */ li $at, 1 -/* 00E1A0 7000D5A0 00408025 */ move $s0, $v0 -/* 00E1A4 7000D5A4 95D10010 */ lhu $s1, 0x10($t6) -/* 00E1A8 7000D5A8 1221000C */ beq $s1, $at, .L7000D5DC -/* 00E1AC 7000D5AC 24010008 */ li $at, 8 -/* 00E1B0 7000D5B0 1621002A */ bne $s1, $at, .L7000D65C -/* 00E1B4 7000D5B4 00000000 */ nop -/* 00E1B8 7000D5B8 8FB80028 */ lw $t8, 0x28($sp) -/* 00E1BC 7000D5BC 240F0002 */ li $t7, 2 -/* 00E1C0 7000D5C0 3C048002 */ lui $a0, %hi(__osRunQueue) -/* 00E1C4 7000D5C4 A70F0010 */ sh $t7, 0x10($t8) -/* 00E1C8 7000D5C8 8FA50028 */ lw $a1, 0x28($sp) -/* 00E1CC 7000D5CC 0C00422B */ jal __osEnqueueThread -/* 00E1D0 7000D5D0 24847728 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, 0x7728 -/* 00E1D4 7000D5D4 10000021 */ b .L7000D65C -/* 00E1D8 7000D5D8 00000000 */ nop -.L7000D5DC: -/* 00E1DC 7000D5DC 8FB90028 */ lw $t9, 0x28($sp) -/* 00E1E0 7000D5E0 8F280008 */ lw $t0, 8($t9) -/* 00E1E4 7000D5E4 11000005 */ beqz $t0, .L7000D5FC -/* 00E1E8 7000D5E8 00000000 */ nop -/* 00E1EC 7000D5EC 3C098002 */ lui $t1, %hi(__osRunQueue) -/* 00E1F0 7000D5F0 25297728 */ addiu $t1, %lo(__osRunQueue) # addiu $t1, $t1, 0x7728 -/* 00E1F4 7000D5F4 1509000A */ bne $t0, $t1, .L7000D620 -/* 00E1F8 7000D5F8 00000000 */ nop -.L7000D5FC: -/* 00E1FC 7000D5FC 8FAB0028 */ lw $t3, 0x28($sp) -/* 00E200 7000D600 240A0002 */ li $t2, 2 -/* 00E204 7000D604 3C048002 */ lui $a0, %hi(__osRunQueue) -/* 00E208 7000D608 A56A0010 */ sh $t2, 0x10($t3) -/* 00E20C 7000D60C 8FA50028 */ lw $a1, 0x28($sp) -/* 00E210 7000D610 0C00422B */ jal __osEnqueueThread -/* 00E214 7000D614 24847728 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, 0x7728 -/* 00E218 7000D618 10000010 */ b .L7000D65C -/* 00E21C 7000D61C 00000000 */ nop -.L7000D620: -/* 00E220 7000D620 8FAD0028 */ lw $t5, 0x28($sp) -/* 00E224 7000D624 240C0008 */ li $t4, 8 -/* 00E228 7000D628 A5AC0010 */ sh $t4, 0x10($t5) -/* 00E22C 7000D62C 8FAE0028 */ lw $t6, 0x28($sp) -/* 00E230 7000D630 8DC40008 */ lw $a0, 8($t6) -/* 00E234 7000D634 0C00422B */ jal __osEnqueueThread -/* 00E238 7000D638 01C02825 */ move $a1, $t6 -/* 00E23C 7000D63C 8FAF0028 */ lw $t7, 0x28($sp) -/* 00E240 7000D640 0C00423D */ jal __osPopThread -/* 00E244 7000D644 8DE40008 */ lw $a0, 8($t7) -/* 00E248 7000D648 00408825 */ move $s1, $v0 -/* 00E24C 7000D64C 3C048002 */ lui $a0, %hi(__osRunQueue) -/* 00E250 7000D650 24847728 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, 0x7728 -/* 00E254 7000D654 0C00422B */ jal __osEnqueueThread -/* 00E258 7000D658 02202825 */ move $a1, $s1 -.L7000D65C: -/* 00E25C 7000D65C 3C188002 */ lui $t8, %hi(__osRunningThread) -/* 00E260 7000D660 8F187730 */ lw $t8, %lo(__osRunningThread)($t8) -/* 00E264 7000D664 17000005 */ bnez $t8, .L7000D67C -/* 00E268 7000D668 00000000 */ nop -/* 00E26C 7000D66C 0C004241 */ jal __osDispatchThread -/* 00E270 7000D670 00000000 */ nop -/* 00E274 7000D674 1000000F */ b .L7000D6B4 -/* 00E278 7000D678 00000000 */ nop -.L7000D67C: -/* 00E27C 7000D67C 3C198002 */ lui $t9, %hi(__osRunningThread) -/* 00E280 7000D680 3C098002 */ lui $t1, %hi(__osRunQueue) -/* 00E284 7000D684 8D297728 */ lw $t1, %lo(__osRunQueue)($t1) -/* 00E288 7000D688 8F397730 */ lw $t9, %lo(__osRunningThread)($t9) -/* 00E28C 7000D68C 8D2A0004 */ lw $t2, 4($t1) -/* 00E290 7000D690 8F280004 */ lw $t0, 4($t9) -/* 00E294 7000D694 010A082A */ slt $at, $t0, $t2 -/* 00E298 7000D698 10200006 */ beqz $at, .L7000D6B4 -/* 00E29C 7000D69C 00000000 */ nop -/* 00E2A0 7000D6A0 240B0002 */ li $t3, 2 -/* 00E2A4 7000D6A4 3C048002 */ lui $a0, %hi(__osRunQueue) -/* 00E2A8 7000D6A8 A72B0010 */ sh $t3, 0x10($t9) -/* 00E2AC 7000D6AC 0C0041EB */ jal __osEnqueueAndYield -/* 00E2B0 7000D6B0 24847728 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, 0x7728 -.L7000D6B4: -/* 00E2B4 7000D6B4 0C006184 */ jal __osRestoreInt -/* 00E2B8 7000D6B8 02002025 */ move $a0, $s0 -/* 00E2BC 7000D6BC 8FBF001C */ lw $ra, 0x1c($sp) -/* 00E2C0 7000D6C0 8FB00014 */ lw $s0, 0x14($sp) -/* 00E2C4 7000D6C4 8FB10018 */ lw $s1, 0x18($sp) -/* 00E2C8 7000D6C8 03E00008 */ jr $ra -/* 00E2CC 7000D6CC 27BD0028 */ addiu $sp, $sp, 0x28 diff --git a/src/libultra/viblack.c b/src/libultra/viblack.c new file mode 100644 index 0000000..277dfed --- /dev/null +++ b/src/libultra/viblack.c @@ -0,0 +1,14 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +// TODO: name magic constants +void osViBlack(u8 active) { + register u32 int_disabled = __osDisableInt(); + if (active) { + __osViNext->unk00 |= 0x20; + } else { + __osViNext->unk00 &= ~0x20; + } + __osRestoreInt(int_disabled); +} diff --git a/src/libultra/viblack.s b/src/libultra/viblack.s deleted file mode 100644 index c3c1a99..0000000 --- a/src/libultra/viblack.s +++ /dev/null @@ -1,40 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osViBlack -/* 00EED0 7000E2D0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 00EED4 7000E2D4 AFBF001C */ sw $ra, 0x1c($sp) -/* 00EED8 7000E2D8 AFA40028 */ sw $a0, 0x28($sp) -/* 00EEDC 7000E2DC 0C00617C */ jal __osDisableInt -/* 00EEE0 7000E2E0 AFB00018 */ sw $s0, 0x18($sp) -/* 00EEE4 7000E2E4 93AE002B */ lbu $t6, 0x2b($sp) -/* 00EEE8 7000E2E8 00408025 */ move $s0, $v0 -/* 00EEEC 7000E2EC 11C00007 */ beqz $t6, .L7000E30C -/* 00EEF0 7000E2F0 00000000 */ nop -/* 00EEF4 7000E2F4 3C0F8003 */ lui $t7, %hi(__osViNext) -/* 00EEF8 7000E2F8 8DEF8044 */ lw $t7, %lo(__osViNext)($t7) -/* 00EEFC 7000E2FC 95F80000 */ lhu $t8, ($t7) -/* 00EF00 7000E300 37190020 */ ori $t9, $t8, 0x20 -/* 00EF04 7000E304 10000007 */ b .L7000E324 -/* 00EF08 7000E308 A5F90000 */ sh $t9, ($t7) -.L7000E30C: -/* 00EF0C 7000E30C 3C088003 */ lui $t0, %hi(__osViNext) -/* 00EF10 7000E310 8D088044 */ lw $t0, %lo(__osViNext)($t0) -/* 00EF14 7000E314 2401FFDF */ li $at, -33 -/* 00EF18 7000E318 95090000 */ lhu $t1, ($t0) -/* 00EF1C 7000E31C 01215024 */ and $t2, $t1, $at -/* 00EF20 7000E320 A50A0000 */ sh $t2, ($t0) -.L7000E324: -/* 00EF24 7000E324 0C006184 */ jal __osRestoreInt -/* 00EF28 7000E328 02002025 */ move $a0, $s0 -/* 00EF2C 7000E32C 8FBF001C */ lw $ra, 0x1c($sp) -/* 00EF30 7000E330 8FB00018 */ lw $s0, 0x18($sp) -/* 00EF34 7000E334 27BD0028 */ addiu $sp, $sp, 0x28 -/* 00EF38 7000E338 03E00008 */ jr $ra -/* 00EF3C 7000E33C 00000000 */ nop diff --git a/src/libultra/virtualtophysical.c b/src/libultra/virtualtophysical.c new file mode 100644 index 0000000..b1fb1a5 --- /dev/null +++ b/src/libultra/virtualtophysical.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" + +uintptr_t osVirtualToPhysical(void *addr) { + if ((uintptr_t) addr >= 0x80000000 && (uintptr_t) addr < 0xa0000000) { + return ((uintptr_t) addr & 0x1fffffff); + } else if ((uintptr_t) addr >= 0xa0000000 && (uintptr_t) addr < 0xc0000000) { + return ((uintptr_t) addr & 0x1fffffff); + } else { + return __osProbeTLB(addr); + } +} diff --git a/src/libultra/virtualtophysical.s b/src/libultra/virtualtophysical.s deleted file mode 100644 index f558646..0000000 --- a/src/libultra/virtualtophysical.s +++ /dev/null @@ -1,44 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osVirtualToPhysical -/* 00F4B0 7000E8B0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 00F4B4 7000E8B4 AFA40018 */ sw $a0, 0x18($sp) -/* 00F4B8 7000E8B8 8FAE0018 */ lw $t6, 0x18($sp) -/* 00F4BC 7000E8BC 3C018000 */ lui $at, 0x8000 -/* 00F4C0 7000E8C0 AFBF0014 */ sw $ra, 0x14($sp) -/* 00F4C4 7000E8C4 01C1082B */ sltu $at, $t6, $at -/* 00F4C8 7000E8C8 14200007 */ bnez $at, .L7000E8E8 -/* 00F4CC 7000E8CC 3C01A000 */ lui $at, 0xa000 -/* 00F4D0 7000E8D0 01C1082B */ sltu $at, $t6, $at -/* 00F4D4 7000E8D4 10200004 */ beqz $at, .L7000E8E8 -/* 00F4D8 7000E8D8 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 00F4DC 7000E8DC 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 00F4E0 7000E8E0 1000000E */ b .L7000E91C -/* 00F4E4 7000E8E4 01C11024 */ and $v0, $t6, $at -.L7000E8E8: -/* 00F4E8 7000E8E8 8FAF0018 */ lw $t7, 0x18($sp) -/* 00F4EC 7000E8EC 3C01A000 */ lui $at, 0xa000 -/* 00F4F0 7000E8F0 01E1082B */ sltu $at, $t7, $at -/* 00F4F4 7000E8F4 14200007 */ bnez $at, .L7000E914 -/* 00F4F8 7000E8F8 3C01C000 */ lui $at, 0xc000 -/* 00F4FC 7000E8FC 01E1082B */ sltu $at, $t7, $at -/* 00F500 7000E900 10200004 */ beqz $at, .L7000E914 -/* 00F504 7000E904 3C011FFF */ lui $at, (0x1FFFFFFF >> 16) # lui $at, 0x1fff -/* 00F508 7000E908 3421FFFF */ ori $at, (0x1FFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 00F50C 7000E90C 10000003 */ b .L7000E91C -/* 00F510 7000E910 01E11024 */ and $v0, $t7, $at -.L7000E914: -/* 00F514 7000E914 0C006408 */ jal __osProbeTLB -/* 00F518 7000E918 8FA40018 */ lw $a0, 0x18($sp) -.L7000E91C: -/* 00F51C 7000E91C 8FBF0014 */ lw $ra, 0x14($sp) -/* 00F520 7000E920 27BD0018 */ addiu $sp, $sp, 0x18 -/* 00F524 7000E924 03E00008 */ jr $ra -/* 00F528 7000E928 00000000 */ nop diff --git a/src/libultra/visetevent.c b/src/libultra/visetevent.c new file mode 100644 index 0000000..6969ec8 --- /dev/null +++ b/src/libultra/visetevent.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +void osViSetEvent(OSMesgQueue *mq, OSMesg msg, u32 retraceCount) { + register u32 int_disabled = __osDisableInt(); + (__osViNext)->mq = mq; + (__osViNext)->msg = msg; + (__osViNext)->retraceCount = retraceCount; + __osRestoreInt(int_disabled); +} diff --git a/src/libultra/visetevent.s b/src/libultra/visetevent.s deleted file mode 100644 index e0ae7cd..0000000 --- a/src/libultra/visetevent.s +++ /dev/null @@ -1,40 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" - -glabel osViSetEvent -/* 00E8C0 7000DCC0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 00E8C4 7000DCC4 AFBF001C */ sw $ra, 0x1c($sp) -/* 00E8C8 7000DCC8 AFA40028 */ sw $a0, 0x28($sp) -/* 00E8CC 7000DCCC AFA5002C */ sw $a1, 0x2c($sp) -/* 00E8D0 7000DCD0 AFA60030 */ sw $a2, 0x30($sp) -/* 00E8D4 7000DCD4 0C00617C */ jal __osDisableInt -/* 00E8D8 7000DCD8 AFB00018 */ sw $s0, 0x18($sp) -/* 00E8DC 7000DCDC 3C0F8003 */ lui $t7, %hi(__osViNext) -/* 00E8E0 7000DCE0 8DEF8044 */ lw $t7, %lo(__osViNext)($t7) -/* 00E8E4 7000DCE4 8FAE0028 */ lw $t6, 0x28($sp) -/* 00E8E8 7000DCE8 3C198003 */ lui $t9, %hi(__osViNext) -/* 00E8EC 7000DCEC 3C098003 */ lui $t1, %hi(__osViNext) -/* 00E8F0 7000DCF0 ADEE0010 */ sw $t6, 0x10($t7) -/* 00E8F4 7000DCF4 8F398044 */ lw $t9, %lo(__osViNext)($t9) -/* 00E8F8 7000DCF8 8FB8002C */ lw $t8, 0x2c($sp) -/* 00E8FC 7000DCFC 00408025 */ move $s0, $v0 -/* 00E900 7000DD00 02002025 */ move $a0, $s0 -/* 00E904 7000DD04 AF380014 */ sw $t8, 0x14($t9) -/* 00E908 7000DD08 8D298044 */ lw $t1, %lo(__osViNext)($t1) -/* 00E90C 7000DD0C 8FA80030 */ lw $t0, 0x30($sp) -/* 00E910 7000DD10 0C006184 */ jal __osRestoreInt -/* 00E914 7000DD14 A5280002 */ sh $t0, 2($t1) -/* 00E918 7000DD18 8FBF001C */ lw $ra, 0x1c($sp) -/* 00E91C 7000DD1C 8FB00018 */ lw $s0, 0x18($sp) -/* 00E920 7000DD20 27BD0028 */ addiu $sp, $sp, 0x28 -/* 00E924 7000DD24 03E00008 */ jr $ra -/* 00E928 7000DD28 00000000 */ nop - - \ No newline at end of file diff --git a/src/libultra/visetmode.c b/src/libultra/visetmode.c new file mode 100644 index 0000000..716596f --- /dev/null +++ b/src/libultra/visetmode.c @@ -0,0 +1,11 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +void osViSetMode(OSViMode *mode) { + register u32 int_disabled = __osDisableInt(); + __osViNext->modep = mode; + __osViNext->unk00 = 1; + __osViNext->features = __osViNext->modep->comRegs.ctrl; + __osRestoreInt(int_disabled); +} diff --git a/src/libultra/visetmode.s b/src/libultra/visetmode.s deleted file mode 100644 index 86ab2bf..0000000 --- a/src/libultra/visetmode.s +++ /dev/null @@ -1,36 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -glabel osViSetMode -/* 00EC60 7000E060 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 00EC64 7000E064 AFBF001C */ sw $ra, 0x1c($sp) -/* 00EC68 7000E068 AFA40028 */ sw $a0, 0x28($sp) -/* 00EC6C 7000E06C 0C00617C */ jal __osDisableInt -/* 00EC70 7000E070 AFB00018 */ sw $s0, 0x18($sp) -/* 00EC74 7000E074 3C0F8003 */ lui $t7, %hi(__osViNext) -/* 00EC78 7000E078 8DEF8044 */ lw $t7, %lo(__osViNext)($t7) -/* 00EC7C 7000E07C 8FAE0028 */ lw $t6, 0x28($sp) -/* 00EC80 7000E080 3C198003 */ lui $t9, %hi(__osViNext) -/* 00EC84 7000E084 24180001 */ li $t8, 1 -/* 00EC88 7000E088 ADEE0008 */ sw $t6, 8($t7) -/* 00EC8C 7000E08C 8F398044 */ lw $t9, %lo(__osViNext)($t9) -/* 00EC90 7000E090 3C088003 */ lui $t0, %hi(__osViNext) -/* 00EC94 7000E094 00408025 */ move $s0, $v0 -/* 00EC98 7000E098 A7380000 */ sh $t8, ($t9) -/* 00EC9C 7000E09C 8D088044 */ lw $t0, %lo(__osViNext)($t0) -/* 00ECA0 7000E0A0 02002025 */ move $a0, $s0 -/* 00ECA4 7000E0A4 8D090008 */ lw $t1, 8($t0) -/* 00ECA8 7000E0A8 8D2A0004 */ lw $t2, 4($t1) -/* 00ECAC 7000E0AC 0C006184 */ jal __osRestoreInt -/* 00ECB0 7000E0B0 AD0A000C */ sw $t2, 0xc($t0) -/* 00ECB4 7000E0B4 8FBF001C */ lw $ra, 0x1c($sp) -/* 00ECB8 7000E0B8 8FB00018 */ lw $s0, 0x18($sp) -/* 00ECBC 7000E0BC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 00ECC0 7000E0C0 03E00008 */ jr $ra -/* 00ECC4 7000E0C4 00000000 */ nop diff --git a/src/libultra/viswapbuf.c b/src/libultra/viswapbuf.c new file mode 100644 index 0000000..c2cb1d5 --- /dev/null +++ b/src/libultra/viswapbuf.c @@ -0,0 +1,10 @@ +#include "libultra_internal.h" + +extern OSViContext *__osViNext; + +void osViSwapBuffer(void *vaddr) { + u32 int_disabled = __osDisableInt(); + __osViNext->buffer = vaddr; + __osViNext->unk00 |= 0x10; // TODO: figure out what this flag means + __osRestoreInt(int_disabled); +} diff --git a/src/libultra/viswapbuf.s b/src/libultra/viswapbuf.s deleted file mode 100644 index 46b439b..0000000 --- a/src/libultra/viswapbuf.s +++ /dev/null @@ -1,31 +0,0 @@ -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" - -glabel osViSwapBuffer -/* 00F090 7000E490 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 00F094 7000E494 AFBF0014 */ sw $ra, 0x14($sp) -/* 00F098 7000E498 0C00617C */ jal __osDisableInt -/* 00F09C 7000E49C AFA40020 */ sw $a0, 0x20($sp) -/* 00F0A0 7000E4A0 3C0F8003 */ lui $t7, %hi(__osViNext) -/* 00F0A4 7000E4A4 8DEF8044 */ lw $t7, %lo(__osViNext)($t7) -/* 00F0A8 7000E4A8 8FAE0020 */ lw $t6, 0x20($sp) -/* 00F0AC 7000E4AC AFA2001C */ sw $v0, 0x1c($sp) -/* 00F0B0 7000E4B0 3C188003 */ lui $t8, %hi(__osViNext) -/* 00F0B4 7000E4B4 ADEE0004 */ sw $t6, 4($t7) -/* 00F0B8 7000E4B8 8F188044 */ lw $t8, %lo(__osViNext)($t8) -/* 00F0BC 7000E4BC 97190000 */ lhu $t9, ($t8) -/* 00F0C0 7000E4C0 37280010 */ ori $t0, $t9, 0x10 -/* 00F0C4 7000E4C4 A7080000 */ sh $t0, ($t8) -/* 00F0C8 7000E4C8 0C006184 */ jal __osRestoreInt -/* 00F0CC 7000E4CC 8FA4001C */ lw $a0, 0x1c($sp) -/* 00F0D0 7000E4D0 8FBF0014 */ lw $ra, 0x14($sp) -/* 00F0D4 7000E4D4 27BD0020 */ addiu $sp, $sp, 0x20 -/* 00F0D8 7000E4D8 03E00008 */ jr $ra -/* 00F0DC 7000E4DC 00000000 */ nop diff --git a/src/motor.c b/src/motor.c index 436cd0b..5c15b3a 100644 --- a/src/motor.c +++ b/src/motor.c @@ -1,4 +1,5 @@ #include "ultra64.h" +#include "libultra/controller.h" //0x800655a0 char _MotorStopData[256]; //800656a0 diff --git a/src/sched.c b/src/sched.c index 357edeb..0d868ca 100644 --- a/src/sched.c +++ b/src/sched.c @@ -105,8 +105,8 @@ void CheckDisplayErrorBufferEvery16Frames(u32 framecount) { if (userCompareValue < (osGetCount() - currentcount)) { - write_stderr_to_buffer((u32*)cfb_16_a); - write_stderr_to_buffer((u32*)cfb_16_b); + write_stderr_to_buffer((u32*)cfb_16[0]); + write_stderr_to_buffer((u32*)cfb_16[1]); } } } diff --git a/src/structs.h b/src/structs.h new file mode 100644 index 0000000..2d8c1c5 --- /dev/null +++ b/src/structs.h @@ -0,0 +1,56 @@ +#ifndef _TED_H_ +#define _TED_H_ + +#include "ultra64.h" +#include "game/stan.h" + +// Staying here for the moment. + +enum EObjectClass { // u8 + Zero, + NormalObj1, + Door, + Guard, + NormalObject2, + Unknown, + OtherPlayer +}; + +struct float3 { + float x; + float y; + float z; +}; + +struct float2 { + float x; + float z; +}; + +struct prop { + u8 type; // enum EObjectClass + u8 flags; + s16 timetoregen; + union { + struct chrdata* chr; + // struct defaultobj *obj; + // struct doorobj *door; + // struct weaponobj *weapon; + // struct explosion *explosion; + // struct smoke *smoke; + }; + /* 0x08 */ + struct float3 position; + /* 0x14 */ + struct StandTile * standTile; + /* 0x18 */ + u32 unknown_0x18; + /* 0x1C */ + struct prop * host; + struct prop * child; + struct prop * nextSibling; + struct prop * prevSibling; + u8 rooms[4]; +}; + +#endif diff --git a/src/tlb_hardwire.c b/src/tlb_hardwire.c deleted file mode 100644 index c9c2b5e..0000000 --- a/src/tlb_hardwire.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "ultra64.h" -#include "tlb_hardwire.h" - -/** - * @file tlb_hardwire.c - * This file contains code to set tlb entries to 2 - * -it should become an assembly file - */ - - -/** - * 29B0 70001BB0 - * sets #hardwired TLB entries to 2 - */ -#ifdef NONMATCHING -void set_hardwire_TLB_to_2(void) { - setCopReg(0,Wired,2,0); - setCopReg(0,Context,0,0); -} -#else -GLOBAL_ASM( -.text -glabel set_hardwire_TLB_to_2 -/* 0027B0 70001BB0 24080002 */ li $t0, 2 -/* 0027B4 70001BB4 40883000 */ mtc0 $t0, $6 -/* 0027B8 70001BB8 24080000 */ li $t0, 0 -/* 0027BC 70001BBC 40882000 */ mtc0 $t0, $4 -/* 0027C0 70001BC0 03E00008 */ jr $ra -/* 0027C4 70001BC4 00000000 */ nop -) -#endif \ No newline at end of file diff --git a/src/tlb_hardwire.s b/src/tlb_hardwire.s new file mode 100644 index 0000000..c77d5c2 --- /dev/null +++ b/src/tlb_hardwire.s @@ -0,0 +1,20 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + + +.section .text, "ax" +/** + * 29B0 70001BB0 + * sets hardwired TLB entries to 2 + */ +glabel set_hardwire_TLB_to_2 +/* 0027B0 70001BB0 24080002 */ li $t0, 2 +/* 0027B4 70001BB4 40883000 */ mtc0 $t0, $6 +/* 0027B8 70001BB8 24080000 */ li $t0, 0 +/* 0027BC 70001BBC 40882000 */ mtc0 $t0, $4 +/* 0027C0 70001BC0 03E00008 */ jr $ra +/* 0027C4 70001BC4 00000000 */ nop diff --git a/src/tlb_resolve.c b/src/tlb_resolve.s similarity index 59% rename from src/tlb_resolve.c rename to src/tlb_resolve.s index b00d91d..5454c03 100644 --- a/src/tlb_resolve.c +++ b/src/tlb_resolve.s @@ -1,29 +1,12 @@ -#include "ultra64.h" -#include "tlb_resolve.h" +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 -/** - * @file tlb_resolve.c - * This file contains code to load/resolve TLBaddress. - */ +.include "macros.inc" -/** - * 2760 70001B60 - * loads/resolves TLB address, writting random entry - */ -#ifdef NONMATCHING -//i should probably remain as assembly, maybe even moved to a .s -void resolve_TLBaddress_for_InvalidHit(void) -{ - setCopReg(0,PageMask,0,0); - setCopReg(0,EntryLo0,(longlong)*(int *)(Context + TLB_manager_mapping_table_end),0); - setCopReg(0,EntryLo1,(longlong)(*(int *)(Context + TLB_manager_mapping_table_end) + 0x40),0); - TLB_write_random_entry(Random,EntryHi,EntryLo0,EntryLo1,PageMask); - return; -} -#else -GLOBAL_ASM( -.text +.section .text, "ax" glabel resolve_TLBaddress_for_InvalidHit /* 002760 70001B60 40802800 */ mtc0 $zero, $5 /* 002764 70001B64 00000000 */ nop @@ -44,8 +27,7 @@ glabel resolve_TLBaddress_for_InvalidHit /* 0027A0 70001BA0 00000000 */ nop /* 0027A4 70001BA4 00000000 */ nop /* 0027A8 70001BA8 42000018 */ eret -) -#endif + diff --git a/src/vi.c b/src/vi.c index f660d1d..09f65a1 100644 --- a/src/vi.c +++ b/src/vi.c @@ -1,5 +1,5 @@ #include "ultra64.h" -#include "gbi.h" +#include "PR/gbi.h" OSMesg vi_c_debug_MSG[0x8]; OSMesgQueue vi_c_debug_MQ; diff --git a/src/video.c b/src/video.c index 69266bc..5e8fbed 100644 --- a/src/video.c +++ b/src/video.c @@ -3,6 +3,7 @@ #include "vi.h" #include "video.h" #include "bondgame.h" +#include "unk_093880.h" // pPlayer /** * @file video.c @@ -12,12 +13,15 @@ //data u32 D_80023240 = 0; -struct video_settings video1_settings = {0, 320, 240, 60.0f, 1.3333334f, 30.0f, 10000.0f, 320, 240, 320, 240, 0, 0, 1, 0}; -struct video_settings video2_settings = {0, 320, 240, 60.0f, 1.3333334f, 30.0f, 10000.0f, 320, 240, 320, 240, 0, 0, 1, 0}; +struct video_settings video1_settings[] = +{ + {0, 0, 0, 0, 320, 240, 60.0f, 1.3333334f, 30.0f, 10000.0f, 320, 240, 320, 240, 0, 0, 1, 0}, + {0, 0, 0, 0, 320, 240, 60.0f, 1.3333334f, 30.0f, 10000.0f, 320, 240, 320, 240, 0, 0, 1, 0} +}; s32 D_8002329C = 0; s32 D_800232A0 = 0; -video_settings * ptr_video_settings1 = &video1_settings; -video_settings * ptr_video_settings2 = &video1_settings; +video_settings *ptr_video_settings1 = &video1_settings[0]; +video_settings *ptr_video_settings2 = &video1_settings[0]; s32 coloroutputmode = 1; s32 D_800232B0 = 1; s32 D_800232B4 = 0; @@ -31,21 +35,14 @@ s32 rgb_32bit_grabnum = 1; //rodata - - - - - - //bss -char dword_CODE_bss_800607E0[0x40]; -Mtx *m; -u16 word_CODE_bss_80060824; +f32 projectionMatrixF[4][4]; +Mtx *projectionMatrix; +u16 perspNorm; char dword_CODE_bss_80060828[0x50]; u8 off_CODE_bss_80060878; u8 off_CODE_bss_80060879; -//struct osViMode viMode; -s32 viMode; +OSViMode *viMode; s32 dword_CODE_bss_80060880; s32 dword_CODE_bss_80060884; s32 dword_CODE_bss_80060888; @@ -56,16 +53,21 @@ char dword_CODE_bss_80060890[0x400];//CC[0x3C4]; * 3C60 70003060 */ #ifdef NONMATCHING +// regalloc void init_video_settings(void) { - video1_settings.frameb = cfb_16_a; - D_8002329C = 0; - D_800232A0 = 0; - ptr_video_settings1 = &video1_settings; - ptr_video_settings2 = &video2_settings; + video_settings* v1; + video_settings* v2; off_CODE_bss_80060878 = 0; off_CODE_bss_80060879 = 1; - video2_settings.frameb = cfb_16_b; + v1 = &video1_settings[off_CODE_bss_80060878]; + ptr_video_settings1 = v1; + ptr_video_settings1->framebuf = cfb_16[off_CODE_bss_80060878]; + v2 = &video1_settings[off_CODE_bss_80060879]; + ptr_video_settings2 = v2; + ptr_video_settings2->framebuf = cfb_16[off_CODE_bss_80060879]; + D_8002329C = 0; + D_800232A0 = 0; } #else GLOBAL_ASM( @@ -85,9 +87,9 @@ glabel init_video_settings /* 003C8C 7000308C 3C058006 */ lui $a1, %hi(off_CODE_bss_80060879) /* 003C90 70003090 00007812 */ mflo $t7 /* 003C94 70003094 3C068002 */ lui $a2, %hi(ptr_video_settings1) -/* 003C98 70003098 3C09803B */ lui $t1, %hi(cfb_16_a) # $t1, 0x803b +/* 003C98 70003098 3C09803B */ lui $t1, %hi(cfb_16) # $t1, 0x803b /* 003C9C 7000309C 0322C823 */ subu $t9, $t9, $v0 -/* 003CA0 700030A0 25295000 */ addiu $t1, %lo(cfb_16_a) # addiu $t1, $t1, 0x5000 +/* 003CA0 700030A0 25295000 */ addiu $t1, %lo(cfb_16) # addiu $t1, $t1, 0x5000 /* 003CA4 700030A4 24C632A4 */ addiu $a2, %lo(ptr_video_settings1) # addiu $a2, $a2, 0x32a4 /* 003CA8 700030A8 24A50879 */ addiu $a1, %lo(off_CODE_bss_80060879) # addiu $a1, $a1, 0x879 /* 003CAC 700030AC 24840878 */ addiu $a0, %lo(off_CODE_bss_80060878) # addiu $a0, $a0, 0x878 @@ -123,116 +125,49 @@ glabel init_video_settings ) #endif - - -/** - * 3D24 70003124 initialize both video buffers - */ -#ifdef NONMATCHING void init_both_video_buffers(void) { s32 i; - - remove_viewport_buffer(); - for (i = 0; i != 0x25800; i += 4) - { - cfb_16_a[i] = 0; - cfb_16_b[i] = 0; - cfb_16_a[i + 1] = 0; - cfb_16_b[i + 1] = 0; - cfb_16_a[i + 2] = 0; - cfb_16_b[i + 2] = 0; - cfb_16_a[i + 3] = 0; - cfb_16_b[i + 3] = 0; - }; + u8* p1 = cfb_16[0]; + u8* p2 = cfb_16[1]; + zbufDeallocate(); + for (i = 0; i < 320*240*2; i++) { + p1[i] = 0; + p2[i] = 0; + } } -#else -GLOBAL_ASM( -.text -glabel init_both_video_buffers -/* 003D24 70003124 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 003D28 70003128 AFBF0014 */ sw $ra, 0x14($sp) -/* 003D2C 7000312C 0FC348E0 */ jal remove_viewport_buffer -/* 003D30 70003130 00000000 */ nop -/* 003D34 70003134 3C070002 */ lui $a3, (0x00025800 >> 16) # lui $a3, 2 -/* 003D38 70003138 3C06803E */ lui $a2, %hi(cfb_16_b) # $a2, 0x803e -/* 003D3C 7000313C 3C05803B */ lui $a1, %hi(cfb_16_a) # $a1, 0x803b -/* 003D40 70003140 24A55000 */ addiu $a1, %lo(cfb_16_a) # addiu $a1, $a1, 0x5000 -/* 003D44 70003144 24C6A800 */ addiu $a2, %lo(cfb_16_b) # addiu $a2, $a2, -0x5800 -/* 003D48 70003148 34E75800 */ ori $a3, (0x00025800 & 0xFFFF) # ori $a3, $a3, 0x5800 -/* 003D4C 7000314C 00002025 */ move $a0, $zero -.L70003150: -/* 003D50 70003150 00A41021 */ addu $v0, $a1, $a0 -/* 003D54 70003154 A0400000 */ sb $zero, ($v0) -/* 003D58 70003158 00C41821 */ addu $v1, $a2, $a0 -/* 003D5C 7000315C A0600000 */ sb $zero, ($v1) -/* 003D60 70003160 A0400001 */ sb $zero, 1($v0) -/* 003D64 70003164 A0600001 */ sb $zero, 1($v1) -/* 003D68 70003168 A0400002 */ sb $zero, 2($v0) -/* 003D6C 7000316C A0600002 */ sb $zero, 2($v1) -/* 003D70 70003170 A0400003 */ sb $zero, 3($v0) -/* 003D74 70003174 24840004 */ addiu $a0, $a0, 4 -/* 003D78 70003178 1487FFF5 */ bne $a0, $a3, .L70003150 -/* 003D7C 7000317C A0600003 */ sb $zero, 3($v1) -/* 003D80 70003180 8FBF0014 */ lw $ra, 0x14($sp) -/* 003D84 70003184 27BD0018 */ addiu $sp, $sp, 0x18 -/* 003D88 70003188 03E00008 */ jr $ra -/* 003D8C 7000318C 00000000 */ nop -) -#endif -/** - * 3D90 70003190 ???; 2->800232BC - */ -#ifdef NONMATCHING void video_related_6(s32 arg0) { - D_800232BC = (s32) (arg0 + 2); + arg0 += 2; + D_800232BC = arg0; } -#else -GLOBAL_ASM( -.text -glabel video_related_6 -/* 003D90 70003190 24840002 */ addiu $a0, $a0, 2 -/* 003D94 70003194 3C018002 */ lui $at, %hi(D_800232BC) -/* 003D98 70003198 03E00008 */ jr $ra -/* 003D9C 7000319C AC2432BC */ sw $a0, %lo(D_800232BC)($at) -) -#endif /** * 3DA0 700031A0 */ #ifdef NONMATCHING -void *video_related_7(void) -{ +// regalloc +void video_related_7(void) { s32 temp_lo; - s32 temp_t6; - - if (D_800232B8 != 0) - { - temp_t6 = D_800232B8 + -1; - D_800232B8 = temp_t6; - if (temp_t6 == 0) - { + if (D_800232B8 != 0) { + D_800232B8--; + if (D_800232B8 == 0) { D_800232B4 = 0; } } temp_lo = D_800232B0 * D_800232B4; - viMode->OSViCommonRegs.hstart /*unk30*/ = (s32) (((((s32) viMode+0x8 >> 0x10) + temp_lo) << 0x10) | ((viMode+0x8 + temp_lo) & 0xffff)); - viMode->OSViFieldRegs[0].origin /*unk44*/ = (s32) (((((s32) viMode+0xC >> 0x10) + temp_lo) << 0x10) | ((viMode+0xC + temp_lo) & 0xffff)); - osViSetMode(viMode, &viMode); - osViBlack(*(D_800232BC + 3)); - if (D_800232BC != 0) - { - if (D_800232BC < 3) - { - D_800232BC = (s32) (D_800232BC + -1); + viMode->fldRegs[0].vStart = (((dword_CODE_bss_80060884 >> 16) + temp_lo) << 16) | ((dword_CODE_bss_80060884 + temp_lo) & 0xffff); + viMode->fldRegs[1].vStart = (((dword_CODE_bss_80060888 >> 16) + temp_lo) << 16) | ((dword_CODE_bss_80060888 + temp_lo) & 0xffff); + osViSetMode(viMode); + osViBlack(D_800232BC); + if (D_800232BC != 0) { + if (D_800232BC < 3) { + D_800232BC--; } } - osViSetSpecialFeatures(0x42); - D_800232B0 = (s32) -(s32) D_800232B0; - return &D_800232B0; + osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); + D_800232B0 = -D_800232B0; } #else GLOBAL_ASM( @@ -501,7 +436,7 @@ block_19: phi_f0 = 1.0f; } temp_t1 = (D_800232C0 * 4); - (0x80020000 + temp_t1)->unk30B4 = (f32) ((f32) ptr_video_settings2->unk4 / (f32) ptr_video_settings2->unk18); + (0x80020000 + temp_t1)->unk30B4 = (f32) ((f32) ptr_video_settings1->unk4 / (f32) ptr_video_settings2->unk18); (0x80020000 + temp_t1)->unk30BC = (f32) phi_f0; if (*ptr_video_settings2 == 1) { @@ -634,11 +569,11 @@ block_43: D_800232C0 = (s32) phi_t9_4; if (coloroutputmode != 0) { - fast3d_related_array->unk58 = (void *) ptr_video_settings2->frameb; + fast3d_related_array->unk58 = (void *) ptr_video_settings2->framebuf; } else { - fast3d_related_array->unk58 = &cfb_16_a; + fast3d_related_array->unk58 = &cfb_16; } temp_t7_4 = (off_CODE_bss_80060878 + 1); temp_t8_6 = (off_CODE_bss_80060879 + 1); @@ -668,7 +603,7 @@ block_43: temp_a1 = (&video1_settings + (off_CODE_bss_80060879 * 0x2c)); *&ptr_video_settings2 = temp_a1; bcopy(*&ptr_video_settings2, temp_a1, 0x2c, &video1_settings); - ptr_video_settings2->frameb = (s32) ((off_CODE_bss_80060879 * 0x25800) + &cfb_16_a); + ptr_video_settings2->framebuf = (s32) ((off_CODE_bss_80060879 * 0x25800) + &cfb_16); } #else GLOBAL_ASM( @@ -1197,8 +1132,8 @@ glabel video_related_8 .L70003A0C: /* 00460C 70003A0C 3C198005 */ lui $t9, %hi(fast3d_related_array) /* 004610 70003A10 8F39EAB0 */ lw $t9, %lo(fast3d_related_array)($t9) -/* 004614 70003A14 3C0E803B */ lui $t6, %hi(cfb_16_a) # $t6, 0x803b -/* 004618 70003A18 25CE5000 */ addiu $t6, %lo(cfb_16_a) # addiu $t6, $t6, 0x5000 +/* 004614 70003A14 3C0E803B */ lui $t6, %hi(cfb_16) # $t6, 0x803b +/* 004618 70003A18 25CE5000 */ addiu $t6, %lo(cfb_16) # addiu $t6, $t6, 0x5000 /* 00461C 70003A1C AF2E0058 */ sw $t6, 0x58($t9) .L70003A20: /* 004620 70003A20 3C028006 */ lui $v0, %hi(off_CODE_bss_80060878) @@ -1243,8 +1178,8 @@ glabel video_related_8 /* 0046B4 70003AB4 3C038006 */ lui $v1, %hi(off_CODE_bss_80060879) /* 0046B8 70003AB8 24630879 */ addiu $v1, %lo(off_CODE_bss_80060879) # addiu $v1, $v1, 0x879 /* 0046BC 70003ABC 90780000 */ lbu $t8, ($v1) -/* 0046C0 70003AC0 3C0E803B */ lui $t6, %hi(cfb_16_a) # $t6, 0x803b -/* 0046C4 70003AC4 25CE5000 */ addiu $t6, %lo(cfb_16_a) # addiu $t6, $t6, 0x5000 +/* 0046C0 70003AC0 3C0E803B */ lui $t6, %hi(cfb_16) # $t6, 0x803b +/* 0046C4 70003AC4 25CE5000 */ addiu $t6, %lo(cfb_16) # addiu $t6, $t6, 0x5000 /* 0046C8 70003AC8 00187880 */ sll $t7, $t8, 2 /* 0046CC 70003ACC 01F87821 */ addu $t7, $t7, $t8 /* 0046D0 70003AD0 000F7880 */ sll $t7, $t7, 2 @@ -1263,124 +1198,33 @@ glabel video_related_8 ) #endif - -/** - * 4704 70003B04 ???; 800232B4=(word)F12, 800232B8=0xA - * accepts: F12= - */ -#ifdef NONMATCHING -void video_related_9(float param_1) +void video_related_9(f32 param_1) { - float fVar1; - - fVar1 = 14.00000000; - if (param_1 <= 14.00000000) { - fVar1 = param_1; + if (param_1 > 14.0f) { + param_1 = 14.0f; } - if (fVar1 < 0.00000000) { - D_800232B4 = 0; - } - else { - D_800232B4 = (int)fVar1; + if (param_1 < 0.0f) { + param_1 = 0.0f; } + D_800232B4 = param_1; D_800232B8 = 10; } -#else -GLOBAL_ASM( -.text -glabel video_related_9 -/* 004704 70003B04 3C014160 */ li $at, 0x41600000 # 14.000000 -/* 004708 70003B08 44810000 */ mtc1 $at, $f0 -/* 00470C 70003B0C 00000000 */ nop -/* 004710 70003B10 460C003C */ c.lt.s $f0, $f12 -/* 004714 70003B14 00000000 */ nop -/* 004718 70003B18 45020003 */ bc1fl .L70003B28 -/* 00471C 70003B1C 44800000 */ mtc1 $zero, $f0 -/* 004720 70003B20 46000306 */ mov.s $f12, $f0 -/* 004724 70003B24 44800000 */ mtc1 $zero, $f0 -.L70003B28: -/* 004728 70003B28 00000000 */ nop -/* 00472C 70003B2C 4600603C */ c.lt.s $f12, $f0 -/* 004730 70003B30 00000000 */ nop -/* 004734 70003B34 45020003 */ bc1fl .L70003B44 -/* 004738 70003B38 4600610D */ trunc.w.s $f4, $f12 -/* 00473C 70003B3C 46000306 */ mov.s $f12, $f0 -/* 004740 70003B40 4600610D */ trunc.w.s $f4, $f12 -.L70003B44: -/* 004744 70003B44 3C018002 */ lui $at, %hi(D_800232B4) -/* 004748 70003B48 2418000A */ li $t8, 10 -/* 00474C 70003B4C 440F2000 */ mfc1 $t7, $f4 -/* 004750 70003B50 00000000 */ nop -/* 004754 70003B54 AC2F32B4 */ sw $t7, %lo(D_800232B4)($at) -/* 004758 70003B58 3C018002 */ lui $at, %hi(D_800232B8) -/* 00475C 70003B5C 03E00008 */ jr $ra -/* 004760 70003B60 AC3832B8 */ sw $t8, %lo(D_800232B8)($at) -) -#endif - - - -/** - * 4764 70003B64 - */ -//Even though this is defined in vi.h, it also must be in this file to be seen?? -extern OSMesgQueue vi_c_debug_MQ; -void receive_vi_c_msgs(int msgcount){ - do { - osRecvMesg(&vi_c_debug_MQ,NULL,1); - msgcount += -1; - } while (0 < msgcount); +void receive_vi_c_msgs(int msgcount) { + do { + osRecvMesg(&vi_c_debug_MQ, NULL, 1); + msgcount--; + } while (msgcount > 0); } - -/** - * 47B0 70003BB0 - */ -#ifdef NONMATCHING +const s16 widths_80028480[] = {320, 320, 640}; +const s16 heights_80028488[] = {240, 240, 480}; void setVideoWidthHeightToMode(s32 videomode) { - u16 widths_80028480[] = {320, 320, 640}; - u16 heights_80028488[] = {240, 240, 480}; - ptr_video_settings2->mode = videomode; - - ptr_video_settings2->somethingW = widths_80028480[videomode]; - ptr_video_settings2->txtClipW = widths_80028480[videomode]; - - ptr_video_settings2->somethingH = heights_80028488[videomode]; - ptr_video_settings2->txtClipH = heights_80028488[videomode]; + ptr_video_settings2->x = ptr_video_settings2->bufx = widths_80028480[videomode]; + ptr_video_settings2->y = ptr_video_settings2->bufy = heights_80028488[videomode]; } -#else -const u16 widths_80028480[] = {320, 320, 640}; -const u16 heights_80028488[] = {240, 240, 480}; //is this not 16bit and a list of 320x240 and 640x480 - 3 widths, 3 heights -GLOBAL_ASM( -.text -glabel setVideoWidthHeightToMode -/* 0047B0 70003BB0 3C058002 */ lui $a1, %hi(ptr_video_settings2) -/* 0047B4 70003BB4 24A532A8 */ addiu $a1, %lo(ptr_video_settings2) # addiu $a1, $a1, 0x32a8 -/* 0047B8 70003BB8 8CAE0000 */ lw $t6, ($a1) -/* 0047BC 70003BBC 00041840 */ sll $v1, $a0, 1 -/* 0047C0 70003BC0 3C028003 */ lui $v0, %hi(widths_80028480) -/* 0047C4 70003BC4 A1C40000 */ sb $a0, ($t6) -/* 0047C8 70003BC8 00431021 */ addu $v0, $v0, $v1 -/* 0047CC 70003BCC 84428480 */ lh $v0, %lo(widths_80028480)($v0) -/* 0047D0 70003BD0 8CAF0000 */ lw $t7, ($a1) -/* 0047D4 70003BD4 A5E20018 */ sh $v0, 0x18($t7) -/* 0047D8 70003BD8 8CB80000 */ lw $t8, ($a1) -/* 0047DC 70003BDC A7020004 */ sh $v0, 4($t8) -/* 0047E0 70003BE0 3C028003 */ lui $v0, %hi(heights_80028488) -/* 0047E4 70003BE4 00431021 */ addu $v0, $v0, $v1 -/* 0047E8 70003BE8 84428488 */ lh $v0, %lo(heights_80028488)($v0) -/* 0047EC 70003BEC 8CB90000 */ lw $t9, ($a1) -/* 0047F0 70003BF0 A722001A */ sh $v0, 0x1a($t9) -/* 0047F4 70003BF4 8CA80000 */ lw $t0, ($a1) -/* 0047F8 70003BF8 03E00008 */ jr $ra -/* 0047FC 70003BFC A5020006 */ sh $v0, 6($t0) -) -#endif - - /** * 4800 70003C00 sets colour output mode to 16bit [800232AC=1] @@ -1403,7 +1247,7 @@ void set_coloroutputmode_32bit(void) */ u8 * get_video_settings2_frameb(void) { - return ptr_video_settings2->frameb; + return ptr_video_settings2->framebuf; } /** @@ -1411,7 +1255,7 @@ u8 * get_video_settings2_frameb(void) */ u8 * get_video_settings1_frameb(void) { - return ptr_video_settings1->frameb; + return ptr_video_settings1->framebuf; } /** @@ -1419,344 +1263,56 @@ u8 * get_video_settings1_frameb(void) */ void set_video2buf_frameb(u8 *arg0) { - ptr_video_settings2->frameb = arg0; + ptr_video_settings2->framebuf = arg0; } /** * 484C 70003C4C V0= halfword [80060824] */ u16 get_80060824(void) { - return word_CODE_bss_80060824; + return perspNorm; } -/** - * 4858 70003C58 - */ -#ifdef NONMATCHING -void *video_related_F(void *arg0) -{ - void *temp_s0; - void *temp_v0; - void *temp_v0_2; - void *temp_v0_3; - void *temp_v1; - void *phi_s0; - - if (pPlayer != 0) - { - (pPlayer + (off_CODE_bss_80060879 * 0x10))->unk7D0 = (s16) (ptr_video_settings2->unk1C * 2); - (pPlayer + (off_CODE_bss_80060879 * 0x10))->unk7D8 = (s16) ((ptr_video_settings2->unk1C * 2) + (ptr_video_settings2->unk20 * 4)); - (pPlayer + (off_CODE_bss_80060879 * 0x10))->unk7D2 = (s16) (ptr_video_settings2->unk1E * 2); - (pPlayer + (off_CODE_bss_80060879 * 0x10))->unk7DA = (s16) ((ptr_video_settings2->unk1E * 2) + (ptr_video_settings2->unk22 * 4)); +Gfx *video_related_F(Gfx *gdl) { + if (pPlayer != NULL) { + pPlayer->viewports[off_CODE_bss_80060879].vp.vscale[0] = (ptr_video_settings2->viewx * 2); + pPlayer->viewports[off_CODE_bss_80060879].vp.vtrans[0] = (ptr_video_settings2->viewx * 2) + (ptr_video_settings2->viewleft * 4); + pPlayer->viewports[off_CODE_bss_80060879].vp.vscale[1] = (ptr_video_settings2->viewy * 2); + pPlayer->viewports[off_CODE_bss_80060879].vp.vtrans[1] = (ptr_video_settings2->viewy * 2) + (ptr_video_settings2->viewtop * 4); } - arg0->unk0 = 0x3800010; - arg0->unk4 = (s32) ((pPlayer + (off_CODE_bss_80060879 * 0x10)) + 0x800007d0); - temp_s0 = arg0 + 8; - m = sub_GAME_7F0BD6E0(&off_CODE_bss_80060879, &pPlayer); - guPerspectiveF(&dword_CODE_bss_800607E0, &word_CODE_bss_80060824, ptr_video_settings2->far, ptr_video_settings2->scale, (f32) ptr_video_settings2->aspect, (f32) ptr_video_settings2->unk14, 1.0f); - guMtxF2L(&dword_CODE_bss_800607E0, m); - temp_v0 = temp_s0; - temp_v0->unk0 = 0x1030040; - temp_s0 = temp_s0 + 8; - temp_v0->unk4 = (s32) (m + 0x80000000); - temp_v1 = temp_s0; - temp_v1->unk0 = 0xbc00000e; - temp_s0 = temp_s0 + 8; - temp_v1->unk4 = (?32) word_CODE_bss_80060824; - set_BONDdata_field_10D8(m, &m); - set_BONDdata_field_10DC(&dword_CODE_bss_800607E0); - temp_v0_2 = temp_s0; - if (coloroutputmode != 0) - { - temp_v0_3 = temp_s0; - temp_v0_3->unk0 = (s32) (((ptr_video_settings2->unk18 + -1) & 0xfff) | 0xff100000); - temp_v0_3->unk4 = (s32) (ptr_video_settings2->frameb + 0x80000000); - phi_s0 = temp_s0 + 8; + gSPViewport(gdl++, ((s32)&pPlayer->viewports[off_CODE_bss_80060879] + 0x80000000)); + projectionMatrix = sub_GAME_7F0BD6E0(); + guPerspectiveF(projectionMatrixF, &perspNorm, ptr_video_settings2->fovy, ptr_video_settings2->aspect, ptr_video_settings2->near, ptr_video_settings2->far, 1.0f); + guMtxF2L(projectionMatrixF, projectionMatrix); + gSPMatrix(gdl++, ((s32)projectionMatrix + 0x80000000), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPPerspNormalize(gdl++, perspNorm); + currentPlayerSetProjectionMatrix(projectionMatrix); + currentPlayerSetProjectionMatrixF(projectionMatrixF); + if (coloroutputmode != MODE_32BIT) { + gDPSetColorImage(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, ptr_video_settings2->bufx, (ptr_video_settings2->framebuf + 0x80000000)); } - else - { - temp_v0_2->unk4 = 0x3b5000; - temp_v0_2->unk0 = (s32) (((ptr_video_settings2->unk18 + -1) & 0xfff) | 0xff180000); - phi_s0 = temp_s0 + 8; + else { + gDPSetColorImage(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_32b, ptr_video_settings2->bufx, (cfb_16[0] + 0x80000000)); } - return phi_s0; -} -#else -GLOBAL_ASM( -.text -glabel video_related_F -/* 004858 70003C58 3C058008 */ lui $a1, %hi(pPlayer) -/* 00485C 70003C5C 24A5A0B0 */ addiu $a1, %lo(pPlayer) # addiu $a1, $a1, -0x5f50 -/* 004860 70003C60 8CA20000 */ lw $v0, ($a1) -/* 004864 70003C64 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 004868 70003C68 AFB00024 */ sw $s0, 0x24($sp) -/* 00486C 70003C6C 00808025 */ move $s0, $a0 -/* 004870 70003C70 AFBF002C */ sw $ra, 0x2c($sp) -/* 004874 70003C74 1040002A */ beqz $v0, .L70003D20 -/* 004878 70003C78 AFB10028 */ sw $s1, 0x28($sp) -/* 00487C 70003C7C 3C118002 */ lui $s1, %hi(ptr_video_settings2) -/* 004880 70003C80 263132A8 */ addiu $s1, %lo(ptr_video_settings2) # addiu $s1, $s1, 0x32a8 -/* 004884 70003C84 8E2E0000 */ lw $t6, ($s1) -/* 004888 70003C88 3C048006 */ lui $a0, %hi(off_CODE_bss_80060879) -/* 00488C 70003C8C 24840879 */ addiu $a0, %lo(off_CODE_bss_80060879) # addiu $a0, $a0, 0x879 -/* 004890 70003C90 90990000 */ lbu $t9, ($a0) -/* 004894 70003C94 85CF001C */ lh $t7, 0x1c($t6) -/* 004898 70003C98 00194100 */ sll $t0, $t9, 4 -/* 00489C 70003C9C 00484821 */ addu $t1, $v0, $t0 -/* 0048A0 70003CA0 000FC040 */ sll $t8, $t7, 1 -/* 0048A4 70003CA4 A53807D0 */ sh $t8, 0x7d0($t1) -/* 0048A8 70003CA8 8E230000 */ lw $v1, ($s1) -/* 0048AC 70003CAC 90990000 */ lbu $t9, ($a0) -/* 0048B0 70003CB0 8CAF0000 */ lw $t7, ($a1) -/* 0048B4 70003CB4 846A001C */ lh $t2, 0x1c($v1) -/* 0048B8 70003CB8 846C0020 */ lh $t4, 0x20($v1) -/* 0048BC 70003CBC 00194100 */ sll $t0, $t9, 4 -/* 0048C0 70003CC0 000A5840 */ sll $t3, $t2, 1 -/* 0048C4 70003CC4 000C6880 */ sll $t5, $t4, 2 -/* 0048C8 70003CC8 016D7021 */ addu $t6, $t3, $t5 -/* 0048CC 70003CCC 01E8C021 */ addu $t8, $t7, $t0 -/* 0048D0 70003CD0 A70E07D8 */ sh $t6, 0x7d8($t8) -/* 0048D4 70003CD4 8E290000 */ lw $t1, ($s1) -/* 0048D8 70003CD8 908D0000 */ lbu $t5, ($a0) -/* 0048DC 70003CDC 8CAB0000 */ lw $t3, ($a1) -/* 0048E0 70003CE0 852A001E */ lh $t2, 0x1e($t1) -/* 0048E4 70003CE4 000DC900 */ sll $t9, $t5, 4 -/* 0048E8 70003CE8 01797821 */ addu $t7, $t3, $t9 -/* 0048EC 70003CEC 000A6040 */ sll $t4, $t2, 1 -/* 0048F0 70003CF0 A5EC07D2 */ sh $t4, 0x7d2($t7) -/* 0048F4 70003CF4 8E230000 */ lw $v1, ($s1) -/* 0048F8 70003CF8 908B0000 */ lbu $t3, ($a0) -/* 0048FC 70003CFC 8CAD0000 */ lw $t5, ($a1) -/* 004900 70003D00 8468001E */ lh $t0, 0x1e($v1) -/* 004904 70003D04 84780022 */ lh $t8, 0x22($v1) -/* 004908 70003D08 000BC900 */ sll $t9, $t3, 4 -/* 00490C 70003D0C 00087040 */ sll $t6, $t0, 1 -/* 004910 70003D10 00184880 */ sll $t1, $t8, 2 -/* 004914 70003D14 01C95021 */ addu $t2, $t6, $t1 -/* 004918 70003D18 01B96021 */ addu $t4, $t5, $t9 -/* 00491C 70003D1C A58A07DA */ sh $t2, 0x7da($t4) -.L70003D20: -/* 004920 70003D20 3C0F0380 */ lui $t7, (0x03800010 >> 16) # lui $t7, 0x380 -/* 004924 70003D24 3C048006 */ lui $a0, %hi(off_CODE_bss_80060879) -/* 004928 70003D28 35EF0010 */ ori $t7, (0x03800010 & 0xFFFF) # ori $t7, $t7, 0x10 -/* 00492C 70003D2C 02001025 */ move $v0, $s0 -/* 004930 70003D30 24840879 */ addiu $a0, %lo(off_CODE_bss_80060879) # addiu $a0, $a0, 0x879 -/* 004934 70003D34 AC4F0000 */ sw $t7, ($v0) -/* 004938 70003D38 90980000 */ lbu $t8, ($a0) -/* 00493C 70003D3C 8CA80000 */ lw $t0, ($a1) -/* 004940 70003D40 3C018000 */ lui $at, (0x800007D0 >> 16) -/* 004944 70003D44 00187100 */ sll $t6, $t8, 4 -/* 004948 70003D48 342107D0 */ ori $at, (0x800007D0 & 0xFFFF) # ori $at, $at, 0x7d0 -/* 00494C 70003D4C 010E4821 */ addu $t1, $t0, $t6 -/* 004950 70003D50 3C118002 */ lui $s1, %hi(ptr_video_settings2) -/* 004954 70003D54 01215821 */ addu $t3, $t1, $at -/* 004958 70003D58 263132A8 */ addiu $s1, %lo(ptr_video_settings2) # addiu $s1, $s1, 0x32a8 -/* 00495C 70003D5C AC4B0004 */ sw $t3, 4($v0) -/* 004960 70003D60 0FC2F5B8 */ jal sub_GAME_7F0BD6E0 -/* 004964 70003D64 26100008 */ addiu $s0, $s0, 8 -/* 004968 70003D68 3C018006 */ lui $at, %hi(m) -/* 00496C 70003D6C AC220820 */ sw $v0, %lo(m)($at) -/* 004970 70003D70 8E230000 */ lw $v1, ($s1) -/* 004974 70003D74 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 004978 70003D78 44814000 */ mtc1 $at, $f8 -/* 00497C 70003D7C C4640010 */ lwc1 $f4, 0x10($v1) -/* 004980 70003D80 8C660008 */ lw $a2, 8($v1) -/* 004984 70003D84 8C67000C */ lw $a3, 0xc($v1) -/* 004988 70003D88 E7A40010 */ swc1 $f4, 0x10($sp) -/* 00498C 70003D8C C4660014 */ lwc1 $f6, 0x14($v1) -/* 004990 70003D90 3C048006 */ lui $a0, %hi(dword_CODE_bss_800607E0) -/* 004994 70003D94 3C058006 */ lui $a1, %hi(word_CODE_bss_80060824) -/* 004998 70003D98 24A50824 */ addiu $a1, %lo(word_CODE_bss_80060824) # addiu $a1, $a1, 0x824 -/* 00499C 70003D9C 248407E0 */ addiu $a0, %lo(dword_CODE_bss_800607E0) # addiu $a0, $a0, 0x7e0 -/* 0049A0 70003DA0 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0049A4 70003DA4 0C003F20 */ jal guPerspectiveF -/* 0049A8 70003DA8 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0049AC 70003DAC 3C048006 */ lui $a0, %hi(dword_CODE_bss_800607E0) -/* 0049B0 70003DB0 3C058006 */ lui $a1, %hi(m) -/* 0049B4 70003DB4 8CA50820 */ lw $a1, %lo(m)($a1) -/* 0049B8 70003DB8 0C003FC4 */ jal guMtxF2L -/* 0049BC 70003DBC 248407E0 */ addiu $a0, %lo(dword_CODE_bss_800607E0) # addiu $a0, $a0, 0x7e0 -/* 0049C0 70003DC0 3C0D0103 */ lui $t5, (0x01030040 >> 16) # lui $t5, 0x103 -/* 0049C4 70003DC4 3C058006 */ lui $a1, %hi(m) -/* 0049C8 70003DC8 35AD0040 */ ori $t5, (0x01030040 & 0xFFFF) # ori $t5, $t5, 0x40 -/* 0049CC 70003DCC 02001025 */ move $v0, $s0 -/* 0049D0 70003DD0 24A50820 */ addiu $a1, %lo(m) # addiu $a1, $a1, 0x820 -/* 0049D4 70003DD4 AC4D0000 */ sw $t5, ($v0) -/* 0049D8 70003DD8 8CB90000 */ lw $t9, ($a1) -/* 0049DC 70003DDC 3C018000 */ lui $at, 0x8000 -/* 0049E0 70003DE0 26100008 */ addiu $s0, $s0, 8 -/* 0049E4 70003DE4 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 -/* 0049E8 70003DE8 03215021 */ addu $t2, $t9, $at -/* 0049EC 70003DEC AC4A0004 */ sw $t2, 4($v0) -/* 0049F0 70003DF0 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe -/* 0049F4 70003DF4 02001825 */ move $v1, $s0 -/* 0049F8 70003DF8 AC6C0000 */ sw $t4, ($v1) -/* 0049FC 70003DFC 3C0F8006 */ lui $t7, %hi(word_CODE_bss_80060824) -/* 004A00 70003E00 95EF0824 */ lhu $t7, %lo(word_CODE_bss_80060824)($t7) -/* 004A04 70003E04 26100008 */ addiu $s0, $s0, 8 -/* 004A08 70003E08 AC6F0004 */ sw $t7, 4($v1) -/* 004A0C 70003E0C 0FC1E0D9 */ jal set_BONDdata_field_10D8 -/* 004A10 70003E10 8CA40000 */ lw $a0, ($a1) -/* 004A14 70003E14 3C048006 */ lui $a0, %hi(dword_CODE_bss_800607E0) -/* 004A18 70003E18 0FC1E0F5 */ jal set_BONDdata_field_10DC -/* 004A1C 70003E1C 248407E0 */ addiu $a0, %lo(dword_CODE_bss_800607E0) # addiu $a0, $a0, 0x7e0 -/* 004A20 70003E20 3C188002 */ lui $t8, %hi(coloroutputmode) -/* 004A24 70003E24 8F1832AC */ lw $t8, %lo(coloroutputmode)($t8) -/* 004A28 70003E28 02001025 */ move $v0, $s0 -/* 004A2C 70003E2C 3C01FF18 */ lui $at, 0xff18 -/* 004A30 70003E30 53000011 */ beql $t8, $zero, .L70003E78 -/* 004A34 70003E34 8E2F0000 */ lw $t7, ($s1) -/* 004A38 70003E38 8E280000 */ lw $t0, ($s1) -/* 004A3C 70003E3C 3C01FF10 */ lui $at, 0xff10 -/* 004A40 70003E40 02001025 */ move $v0, $s0 -/* 004A44 70003E44 850E0018 */ lh $t6, 0x18($t0) -/* 004A48 70003E48 26100008 */ addiu $s0, $s0, 8 -/* 004A4C 70003E4C 25C9FFFF */ addiu $t1, $t6, -1 -/* 004A50 70003E50 312B0FFF */ andi $t3, $t1, 0xfff -/* 004A54 70003E54 01616825 */ or $t5, $t3, $at -/* 004A58 70003E58 AC4D0000 */ sw $t5, ($v0) -/* 004A5C 70003E5C 8E390000 */ lw $t9, ($s1) -/* 004A60 70003E60 3C018000 */ lui $at, 0x8000 -/* 004A64 70003E64 8F2A0028 */ lw $t2, 0x28($t9) -/* 004A68 70003E68 01416021 */ addu $t4, $t2, $at -/* 004A6C 70003E6C 1000000B */ b .L70003E9C -/* 004A70 70003E70 AC4C0004 */ sw $t4, 4($v0) -/* 004A74 70003E74 8E2F0000 */ lw $t7, ($s1) -.L70003E78: -/* 004A78 70003E78 3C0B003B */ lui $t3, %hi(0x003B5000) # $t3, 0x3b -/* 004A7C 70003E7C 256B5000 */ addiu $t3, %lo(0x003B5000) # addiu $t3, $t3, 0x5000 -/* 004A80 70003E80 85F80018 */ lh $t8, 0x18($t7) -/* 004A84 70003E84 AC4B0004 */ sw $t3, 4($v0) -/* 004A88 70003E88 26100008 */ addiu $s0, $s0, 8 -/* 004A8C 70003E8C 2708FFFF */ addiu $t0, $t8, -1 -/* 004A90 70003E90 310E0FFF */ andi $t6, $t0, 0xfff -/* 004A94 70003E94 01C14825 */ or $t1, $t6, $at -/* 004A98 70003E98 AC490000 */ sw $t1, ($v0) -.L70003E9C: -/* 004A9C 70003E9C 8FBF002C */ lw $ra, 0x2c($sp) -/* 004AA0 70003EA0 02001025 */ move $v0, $s0 -/* 004AA4 70003EA4 8FB00024 */ lw $s0, 0x24($sp) -/* 004AA8 70003EA8 8FB10028 */ lw $s1, 0x28($sp) -/* 004AAC 70003EAC 03E00008 */ jr $ra -/* 004AB0 70003EB0 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - - - -/** - * 4AB4 70003EB4 - */ -#ifdef NONMATCHING -s32 video_related_10(s32 arg0) -{ - s32 phi_a0; - - phi_a0 = arg0; - if (ptr_video_settings2->unk24 != 0) - { - phi_a0 = sub_GAME_7F0D2518(sub_GAME_7F0D2464()); - } - return phi_a0; -} -#else -GLOBAL_ASM( -.text -glabel video_related_10 -/* 004AB4 70003EB4 3C0E8002 */ lui $t6, %hi(ptr_video_settings2) -/* 004AB8 70003EB8 8DCE32A8 */ lw $t6, %lo(ptr_video_settings2)($t6) -/* 004ABC 70003EBC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 004AC0 70003EC0 AFBF0014 */ sw $ra, 0x14($sp) -/* 004AC4 70003EC4 8DCF0024 */ lw $t7, 0x24($t6) -/* 004AC8 70003EC8 51E00007 */ beql $t7, $zero, .L70003EE8 -/* 004ACC 70003ECC 8FBF0014 */ lw $ra, 0x14($sp) -/* 004AD0 70003ED0 0FC34919 */ jal sub_GAME_7F0D2464 -/* 004AD4 70003ED4 00000000 */ nop -/* 004AD8 70003ED8 0FC34946 */ jal sub_GAME_7F0D2518 -/* 004ADC 70003EDC 00402025 */ move $a0, $v0 -/* 004AE0 70003EE0 00402025 */ move $a0, $v0 -/* 004AE4 70003EE4 8FBF0014 */ lw $ra, 0x14($sp) -.L70003EE8: -/* 004AE8 70003EE8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 004AEC 70003EEC 00801025 */ move $v0, $a0 -/* 004AF0 70003EF0 03E00008 */ jr $ra -/* 004AF4 70003EF4 00000000 */ nop -) -#endif - - -/** - * 4AF8 70003EF8 generate a generic fillrect; fries: AT,A1,A2,A3,T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 - * V0=new display list address - * accepts: A0=p->display list - */ -#ifdef NONMATCHING -s32 insert_generic_fillrect(void *arg0) //either of type Dynamic Struct or GFX Array, however Im betting Dynamic since Dynamic can contain a GFX plus other settings -{ - void *temp_a1; - void *temp_a3; - - // copied from a demo of what is probably going on here - /* - * pointers to build the display list. - / - dynamicp = &dynamic; //glist[0]); - */ - // so arg0 is probably pointer to dynamic struct containing glist. - // nothing is actually returned per say since its added to glist at a higher level. - - //arg0->unk4 = 0x300000; - //arg0->unk0 = 0xba001402; - gDPSetCycleType(glistp++, G_CYC_1CYCLE); - - //temp_a1 = arg0 + 8; - //temp_a3 = temp_a1 + 8; - //temp_a1->unk0 = (s32) (((((ptr_video_settings2->unk18 + -1) & 0x3ff) << 0xe) | 0xf6000000) | (((ptr_video_settings2->unk1A + -1) & 0x3ff) * 4)); - //temp_a1->unk4 = 0; - gDPFillRectangle(glistp++, 0, 0, SCREEN_WD-1, SCREEN_HT-1); - //temp_a3->unk0 = 0xe7000000; - //temp_a3->unk4 = 0; - gDPPipeSync(glistp++); - //return temp_a3 + 8; + return gdl; } -#else -GLOBAL_ASM( -.text -glabel insert_generic_fillrect -/* 004AF8 70003EF8 3C0EBA00 */ lui $t6, (0xBA001402 >> 16) # lui $t6, 0xba00 #gsDPSetCycleType -/* 004AFC 70003EFC 35CE1402 */ ori $t6, (0xBA001402 & 0xFFFF) # ori $t6, $t6, 0x1402 -/* 004B00 70003F00 3C0F0030 */ lui $t7, 0x30 #G_CYC_1CYCLE -/* 004B04 70003F04 AC8F0004 */ sw $t7, 4($a0) -/* 004B08 70003F08 AC8E0000 */ sw $t6, ($a0) -/* 004B0C 70003F0C 3C068002 */ lui $a2, %hi(ptr_video_settings2) -/* 004B10 70003F10 8CC632A8 */ lw $a2, %lo(ptr_video_settings2)($a2) -/* 004B14 70003F14 24850008 */ addiu $a1, $a0, 8 -/* 004B18 70003F18 3C01F600 */ lui $at, 0xf600 -/* 004B1C 70003F1C 84D80018 */ lh $t8, 0x18($a2) -/* 004B20 70003F20 84CB001A */ lh $t3, 0x1a($a2) -/* 004B24 70003F24 24A70008 */ addiu $a3, $a1, 8 -/* 004B28 70003F28 2719FFFF */ addiu $t9, $t8, -1 -/* 004B2C 70003F2C 332803FF */ andi $t0, $t9, 0x3ff -/* 004B30 70003F30 256CFFFF */ addiu $t4, $t3, -1 -/* 004B34 70003F34 318D03FF */ andi $t5, $t4, 0x3ff -/* 004B38 70003F38 00084B80 */ sll $t1, $t0, 0xe -/* 004B3C 70003F3C 01215025 */ or $t2, $t1, $at -/* 004B40 70003F40 000D7080 */ sll $t6, $t5, 2 -/* 004B44 70003F44 014E7825 */ or $t7, $t2, $t6 -/* 004B48 70003F48 ACAF0000 */ sw $t7, ($a1) -/* 004B4C 70003F4C ACA00004 */ sw $zero, 4($a1) -/* 004B50 70003F50 3C18E700 */ lui $t8, 0xe700 -/* 004B54 70003F54 ACF80000 */ sw $t8, ($a3) -/* 004B58 70003F58 ACE00004 */ sw $zero, 4($a3) -/* 004B5C 70003F5C 03E00008 */ jr $ra -/* 004B60 70003F60 24E20008 */ addiu $v0, $a3, 8 -) -#endif - +Gfx *zbufClearCurrentPlayer(Gfx *gdl); +Gfx *zbufInit(Gfx *gdl); +Gfx *video_related_10(Gfx *gdl) { + if (ptr_video_settings2->usezbuf != 0) { + gdl = zbufClearCurrentPlayer(zbufInit(gdl)); + } + return gdl; +} +Gfx *insert_generic_fillrect(Gfx *gdl) { + gDPSetCycleType(gdl++, G_CYC_FILL); + gDPFillRectangle(gdl++, 0, 0, ptr_video_settings2->bufx - 1, ptr_video_settings2->bufy - 1); + gDPPipeSync(gdl++); + return gdl; +} /** * 4B64 70003F64 @@ -1793,28 +1349,28 @@ void *setupscreensfornumplayers(void *arg0) temp_v1->unk4 = 0x10001; temp_v1->unk0 = 0xf7000000; phi_s0 = temp_s0; - if (get_video2_settings_uly() > 0) + if (viGetViewTop() > 0) { phi_s0 = temp_s0; if (sub_GAME_7F09B4D8(get_cur_playernum()) == 0) { temp_s0 = temp_s0 + 8; - sp58->unk0 = (s32) (((((get_video2_settings_uly() + -1) & 0x3ff) * 4) | 0xf6000000) | (((((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10) + -1) & 0x3ff) << 0xe)); + sp58->unk0 = (s32) (((((viGetViewTop() + -1) & 0x3ff) * 4) | 0xf6000000) | (((((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10) + -1) & 0x3ff) << 0xe)); sp58->unk4 = 0; temp_s0->unk0 = 0xe7000000; temp_s0->unk4 = 0; phi_s0 = temp_s0 + 8; } } - if (get_num_players() == 1) + if (getPlayerCount() == 1) { - sp22 = get_video2_settings_height(); + sp22 = viGetViewHeight(); phi_s0_4 = phi_s0; - if ((((s32) (get_video2_settings_uly() << 0x10) >> 0x10) + sp22) < get_video2_settings_txtClipH()) + if ((((s32) (viGetViewTop() << 0x10) >> 0x10) + sp22) < get_video2_settings_txtClipH()) { temp_s0_2 = phi_s0 + 8; sp50->unk0 = (s32) (((((get_video2_settings_txtClipH() + -1) & 0x3ff) * 4) | 0xf6000000) | (((((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10) + -1) & 0x3ff) << 0xe)); - sp50->unk4 = (s32) (((get_video2_settings_height() + ((s32) (get_video2_settings_uly() << 0x10) >> 0x10)) & 0x3ff) * 4); + sp50->unk4 = (s32) (((viGetViewHeight() + ((s32) (viGetViewTop() << 0x10) >> 0x10)) & 0x3ff) * 4); temp_s0_2->unk4 = 0; temp_s0_2->unk0 = 0xe7000000; phi_s0_4 = temp_s0_2 + 8; @@ -1825,15 +1381,15 @@ void *setupscreensfornumplayers(void *arg0) phi_s0_4 = phi_s0; if (sub_GAME_7F09B4D8(get_cur_playernum()) == 0) { - sp20 = get_video2_settings_height(); - sp22 = get_video2_settings_height(); + sp20 = viGetViewHeight(); + sp22 = viGetViewHeight(); phi_s0_2 = phi_s0; - if (((((s32) (get_video2_settings_uly() << 0x10) >> 0x10) + sp22) + sp20) < get_video2_settings_txtClipH()) + if (((((s32) (viGetViewTop() << 0x10) >> 0x10) + sp22) + sp20) < get_video2_settings_txtClipH()) { temp_s0_3 = phi_s0 + 8; sp48->unk0 = (s32) (((((get_video2_settings_txtClipH() + -1) & 0x3ff) * 4) | 0xf6000000) | (((((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10) + -1) & 0x3ff) << 0xe)); - sp22 = get_video2_settings_height(); - sp48->unk4 = (s32) ((((get_video2_settings_height() + ((s32) (get_video2_settings_uly() << 0x10) >> 0x10)) + sp22) & 0x3ff) * 4); + sp22 = viGetViewHeight(); + sp48->unk4 = (s32) ((((viGetViewHeight() + ((s32) (viGetViewTop() << 0x10) >> 0x10)) + sp22) & 0x3ff) * 4); temp_s0_3->unk0 = 0xe7000000; temp_s0_3->unk4 = 0; phi_s0_2 = temp_s0_3 + 8; @@ -1847,7 +1403,7 @@ void *setupscreensfornumplayers(void *arg0) temp_s0_4 = temp_s0_4 + 8; temp_s1_2 = temp_s0_4; phi_s0_3 = temp_s0_4; - if (get_num_players() >= 3) + if (getPlayerCount() >= 3) { temp_s0_4 = temp_s0_4 + 8; temp_s1_2->unk0 = (s32) ((((get_video2_settings_txtClipH() + -1) & 0x3ff) * 4) | 0xf6280000); @@ -1857,7 +1413,7 @@ void *setupscreensfornumplayers(void *arg0) phi_s0_3 = temp_s0_4 + 8; } phi_s0_4 = phi_s0_3; - if (get_num_players() == 3) + if (getPlayerCount() == 3) { temp_s0_5 = phi_s0_3 + 8; sp30->unk0 = (s32) (((((get_video2_settings_txtClipH() + -1) & 0x3ff) * 4) | 0xf6000000) | (((((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10) + -1) & 0x3ff) << 0xe)); @@ -1918,7 +1474,7 @@ glabel setupscreensfornumplayers /* 004C08 70004008 014E7825 */ or $t7, $t2, $t6 /* 004C0C 7000400C AF0F0004 */ sw $t7, 4($t8) /* 004C10 70004010 AC680004 */ sw $t0, 4($v1) -/* 004C14 70004014 0C001149 */ jal get_video2_settings_uly +/* 004C14 70004014 0C001149 */ jal viGetViewTop /* 004C18 70004018 AC790000 */ sw $t9, ($v1) /* 004C1C 7000401C 1840001F */ blez $v0, .L7000409C /* 004C20 70004020 00000000 */ nop @@ -1933,7 +1489,7 @@ glabel setupscreensfornumplayers /* 004C44 70004044 26100008 */ addiu $s0, $s0, 8 /* 004C48 70004048 00028C00 */ sll $s1, $v0, 0x10 /* 004C4C 7000404C 00114C03 */ sra $t1, $s1, 0x10 -/* 004C50 70004050 0C001149 */ jal get_video2_settings_uly +/* 004C50 70004050 0C001149 */ jal viGetViewTop /* 004C54 70004054 01208825 */ move $s1, $t1 /* 004C58 70004058 244BFFFF */ addiu $t3, $v0, -1 /* 004C5C 7000405C 8FA40058 */ lw $a0, 0x58($sp) @@ -1953,14 +1509,14 @@ glabel setupscreensfornumplayers /* 004C94 70004094 AC600004 */ sw $zero, 4($v1) /* 004C98 70004098 26100008 */ addiu $s0, $s0, 8 .L7000409C: -/* 004C9C 7000409C 0FC26919 */ jal get_num_players +/* 004C9C 7000409C 0FC26919 */ jal getPlayerCount /* 004CA0 700040A0 00000000 */ nop /* 004CA4 700040A4 24010001 */ li $at, 1 /* 004CA8 700040A8 14410030 */ bne $v0, $at, .L7000416C /* 004CAC 700040AC 00000000 */ nop -/* 004CB0 700040B0 0C00112B */ jal get_video2_settings_height +/* 004CB0 700040B0 0C00112B */ jal viGetViewHeight /* 004CB4 700040B4 00000000 */ nop -/* 004CB8 700040B8 0C001149 */ jal get_video2_settings_uly +/* 004CB8 700040B8 0C001149 */ jal viGetViewTop /* 004CBC 700040BC A7A20022 */ sh $v0, 0x22($sp) /* 004CC0 700040C0 00028C00 */ sll $s1, $v0, 0x10 /* 004CC4 700040C4 00114C03 */ sra $t1, $s1, 0x10 @@ -1988,11 +1544,11 @@ glabel setupscreensfornumplayers /* 004D1C 7000411C 0141C025 */ or $t8, $t2, $at /* 004D20 70004120 00084B80 */ sll $t1, $t0, 0xe /* 004D24 70004124 03095825 */ or $t3, $t8, $t1 -/* 004D28 70004128 0C001149 */ jal get_video2_settings_uly +/* 004D28 70004128 0C001149 */ jal viGetViewTop /* 004D2C 7000412C AD8B0000 */ sw $t3, ($t4) /* 004D30 70004130 00028C00 */ sll $s1, $v0, 0x10 /* 004D34 70004134 00116C03 */ sra $t5, $s1, 0x10 -/* 004D38 70004138 0C00112B */ jal get_video2_settings_height +/* 004D38 70004138 0C00112B */ jal viGetViewHeight /* 004D3C 7000413C 01A08825 */ move $s1, $t5 /* 004D40 70004140 8FB90050 */ lw $t9, 0x50($sp) /* 004D44 70004144 00517021 */ addu $t6, $v0, $s1 @@ -2012,11 +1568,11 @@ glabel setupscreensfornumplayers /* 004D78 70004178 00402025 */ move $a0, $v0 /* 004D7C 7000417C 5440007C */ bnezl $v0, .L70004370 /* 004D80 70004180 8FBF001C */ lw $ra, 0x1c($sp) -/* 004D84 70004184 0C00112B */ jal get_video2_settings_height +/* 004D84 70004184 0C00112B */ jal viGetViewHeight /* 004D88 70004188 00000000 */ nop -/* 004D8C 7000418C 0C00112B */ jal get_video2_settings_height +/* 004D8C 7000418C 0C00112B */ jal viGetViewHeight /* 004D90 70004190 A7A20020 */ sh $v0, 0x20($sp) -/* 004D94 70004194 0C001149 */ jal get_video2_settings_uly +/* 004D94 70004194 0C001149 */ jal viGetViewTop /* 004D98 70004198 A7A20022 */ sh $v0, 0x22($sp) /* 004D9C 7000419C 00028C00 */ sll $s1, $v0, 0x10 /* 004DA0 700041A0 0011C403 */ sra $t8, $s1, 0x10 @@ -2046,13 +1602,13 @@ glabel setupscreensfornumplayers /* 004E00 70004200 03214025 */ or $t0, $t9, $at /* 004E04 70004204 00095B80 */ sll $t3, $t1, 0xe /* 004E08 70004208 010B6025 */ or $t4, $t0, $t3 -/* 004E0C 7000420C 0C00112B */ jal get_video2_settings_height +/* 004E0C 7000420C 0C00112B */ jal viGetViewHeight /* 004E10 70004210 ADAC0000 */ sw $t4, ($t5) -/* 004E14 70004214 0C001149 */ jal get_video2_settings_uly +/* 004E14 70004214 0C001149 */ jal viGetViewTop /* 004E18 70004218 A7A20022 */ sh $v0, 0x22($sp) /* 004E1C 7000421C 00028C00 */ sll $s1, $v0, 0x10 /* 004E20 70004220 00117403 */ sra $t6, $s1, 0x10 -/* 004E24 70004224 0C00112B */ jal get_video2_settings_height +/* 004E24 70004224 0C00112B */ jal viGetViewHeight /* 004E28 70004228 01C08825 */ move $s1, $t6 /* 004E2C 7000422C 87AA0022 */ lh $t2, 0x22($sp) /* 004E30 70004230 00517821 */ addu $t7, $v0, $s1 @@ -2083,7 +1639,7 @@ glabel setupscreensfornumplayers /* 004E90 70004290 3C18E700 */ lui $t8, 0xe700 /* 004E94 70004294 AC780000 */ sw $t8, ($v1) /* 004E98 70004298 AC600004 */ sw $zero, 4($v1) -/* 004E9C 7000429C 0FC26919 */ jal get_num_players +/* 004E9C 7000429C 0FC26919 */ jal getPlayerCount /* 004EA0 700042A0 26100008 */ addiu $s0, $s0, 8 /* 004EA4 700042A4 28410003 */ slti $at, $v0, 3 /* 004EA8 700042A8 14200011 */ bnez $at, .L700042F0 @@ -2105,7 +1661,7 @@ glabel setupscreensfornumplayers /* 004EE8 700042E8 AC600004 */ sw $zero, 4($v1) /* 004EEC 700042EC 26100008 */ addiu $s0, $s0, 8 .L700042F0: -/* 004EF0 700042F0 0FC26919 */ jal get_num_players +/* 004EF0 700042F0 0FC26919 */ jal getPlayerCount /* 004EF4 700042F4 00000000 */ nop /* 004EF8 700042F8 24010003 */ li $at, 3 /* 004EFC 700042FC 5441001C */ bnel $v0, $at, .L70004370 @@ -2190,8 +1746,8 @@ s32 get_D_8002329C(void) */ void set_video2_settings_offset_18_1A(s16 arg0, s16 arg1) { - ptr_video_settings2->somethingW = arg0; - ptr_video_settings2->somethingH = arg1; + ptr_video_settings2->bufx = arg0; + ptr_video_settings2->bufy = arg1; } /** @@ -2200,7 +1756,7 @@ void set_video2_settings_offset_18_1A(s16 arg0, s16 arg1) */ s16 get_video2_settings_offset_18(void) { - return ptr_video_settings2->somethingW; + return ptr_video_settings2->bufx; } /** @@ -2209,7 +1765,7 @@ s16 get_video2_settings_offset_18(void) */ s16 get_video2_settings_offset_1A(void) { - return ptr_video_settings2->somethingH; + return ptr_video_settings2->bufy; } /** @@ -2218,9 +1774,9 @@ s16 get_video2_settings_offset_1A(void) * A0->[p@800232A8+4], SP+0 * A1->[p@800232A8+6], SP+4 */ -void set_video2_text_clip_size(s16 txtClipW, s16 txtClipH) { - ptr_video_settings2->txtClipW = txtClipW; - ptr_video_settings2->txtClipH = txtClipH; +void set_video2_text_clip_size(s16 x, s16 y) { + ptr_video_settings2->x = x; + ptr_video_settings2->y = y; } /** @@ -2228,7 +1784,7 @@ void set_video2_text_clip_size(s16 txtClipW, s16 txtClipH) { * V0= video2 text clip width [p@800232A8+4]; fry T6 */ s16 get_video2_settings_txtClipW(void) { - return ptr_video_settings2->txtClipW; + return ptr_video_settings2->x; } /** @@ -2236,7 +1792,7 @@ s16 get_video2_settings_txtClipW(void) { * V0= video2 text clip height [p@800232A8+6]; fry T6 */ s16 get_video2_settings_txtClipH(void) { - return ptr_video_settings2->txtClipH; + return ptr_video_settings2->y; } /** @@ -2244,11 +1800,11 @@ s16 get_video2_settings_txtClipH(void) { * set video2 width (A0) and height (A1) */ #ifdef NONMATCHING -void set_video2_width_height(short width,short height) { - ptr_video_settings2->width = width; - ptr_video_settings2->height = height; - set_BONDdata_screensize(ptr_video_settings2->width,ptr_video_settings2->height); - sub_GAME_7F077C5C(); +void set_video2_width_height(short viewx,short viewy) { + ptr_video_settings2->viewx = viewx; + ptr_video_settings2->viewy = viewy; + currentPlayerSetScreenSize(ptr_video_settings2->viewx,ptr_video_settings2->viewy); + currentPlayerSetCameraScale(); return; } #else @@ -2271,9 +1827,9 @@ glabel set_video2_width_height /* 005070 70004470 448A2000 */ mtc1 $t2, $f4 /* 005074 70004474 448B3000 */ mtc1 $t3, $f6 /* 005078 70004478 46802320 */ cvt.s.w $f12, $f4 -/* 00507C 7000447C 0FC1DEF6 */ jal set_BONDdata_screensize +/* 00507C 7000447C 0FC1DEF6 */ jal currentPlayerSetScreenSize /* 005080 70004480 468033A0 */ cvt.s.w $f14, $f6 -/* 005084 70004484 0FC1DF17 */ jal sub_GAME_7F077C5C +/* 005084 70004484 0FC1DF17 */ jal currentPlayerSetCameraScale /* 005088 70004488 00000000 */ nop /* 00508C 7000448C 8FBF0014 */ lw $ra, 0x14($sp) /* 005090 70004490 27BD0018 */ addiu $sp, $sp, 0x18 @@ -2288,16 +1844,16 @@ glabel set_video2_width_height * 509C 7000449C * V0= video2 lrx [p@800232A8+1C]; fry T6 */ -s16 get_video2_settings_width(void) { - return ptr_video_settings2->width; +s16 viGetViewWidth(void) { + return ptr_video_settings2->viewx; } /** * 50AC 700044AC * V0= video2 lry [p@800232A8+1E]; fry T6 */ -s16 get_video2_settings_height(void) { - return ptr_video_settings2->height; +s16 viGetViewHeight(void) { + return ptr_video_settings2->viewy; } /** @@ -2305,11 +1861,11 @@ s16 get_video2_settings_height(void) { * set video2 ulx (A0) and uly (A1) */ #ifdef NONMATCHING -void set_video2_ulx_uly(s16 ulx, s16 uly) +void set_video2_ulx_uly(s16 viewleft, s16 viewtop) { - ptr_video_settings2->ulx = ulx; - ptr_video_settings2->ulx = uly; - set_ulx_uly((f32) ptr_video_settings2->ulx, (f32) ptr_video_settings2->uly); + ptr_video_settings2->viewleft = viewleft; + ptr_video_settings2->viewleft = viewtop; + currentPlayerSetScreenPosition((f32) ptr_video_settings2->viewleft, (f32) ptr_video_settings2->viewtop); } #else GLOBAL_ASM( @@ -2331,7 +1887,7 @@ glabel set_video2_ulx_uly /* 0050F0 700044F0 448A2000 */ mtc1 $t2, $f4 /* 0050F4 700044F4 448B3000 */ mtc1 $t3, $f6 /* 0050F8 700044F8 46802320 */ cvt.s.w $f12, $f4 -/* 0050FC 700044FC 0FC1DF05 */ jal set_ulx_uly +/* 0050FC 700044FC 0FC1DF05 */ jal currentPlayerSetScreenPosition /* 005100 70004500 468033A0 */ cvt.s.w $f14, $f6 /* 005104 70004504 8FBF0014 */ lw $ra, 0x14($sp) /* 005108 70004508 27BD0018 */ addiu $sp, $sp, 0x18 @@ -2346,16 +1902,16 @@ glabel set_video2_ulx_uly * 5114 70004514 * V0= video2 ulx [p@800232A8+20]; fry T6 */ -s16 get_video2_settings_ulx(void) { - return ptr_video_settings2->ulx; +s16 viGetViewLeft(void) { + return ptr_video_settings2->viewleft; } /** * 5124 70004524 * V0= video2 uly [p@800232A8+22]; fry T6 */ -s16 get_video2_settings_uly(void) { - return ptr_video_settings2->uly; +s16 viGetViewTop(void) { + return ptr_video_settings2->viewtop; } /** @@ -2363,7 +1919,7 @@ s16 get_video2_settings_uly(void) { * A0->[p@800232A8+24]; fry T6 */ void set_video2_settings_offset_24(int param_1) { - ptr_video_settings2->anonymous_12 = param_1; + ptr_video_settings2->usezbuf = param_1; } /** @@ -2372,9 +1928,9 @@ void set_video2_settings_offset_24(int param_1) { #ifdef NONMATCHING void setvideo_far(f32 arg0) { - ptr_video_settings2->far = arg0; - sub_GAME_7F077C30(ptr_video_settings2->aspect, ptr_video_settings2->far, ptr_video_settings2->scale); - sub_GAME_7F077C5C(); + ptr_video_settings2->fovy = arg0; + currentPlayerSetPerspective(ptr_video_settings2->near, ptr_video_settings2->fovy, ptr_video_settings2->aspect); + currentPlayerSetCameraScale(); } #else GLOBAL_ASM( @@ -2391,9 +1947,9 @@ glabel setvideo_far /* 005164 70004564 8C620000 */ lw $v0, ($v1) /* 005168 70004568 C44C0010 */ lwc1 $f12, 0x10($v0) /* 00516C 7000456C C44E0008 */ lwc1 $f14, 8($v0) -/* 005170 70004570 0FC1DF0C */ jal sub_GAME_7F077C30 +/* 005170 70004570 0FC1DF0C */ jal currentPlayerSetPerspective /* 005174 70004574 8C46000C */ lw $a2, 0xc($v0) -/* 005178 70004578 0FC1DF17 */ jal sub_GAME_7F077C5C +/* 005178 70004578 0FC1DF17 */ jal currentPlayerSetCameraScale /* 00517C 7000457C 00000000 */ nop /* 005180 70004580 8FBF0014 */ lw $ra, 0x14($sp) /* 005184 70004584 27BD0018 */ addiu $sp, $sp, 0x18 @@ -2408,16 +1964,16 @@ glabel setvideo_far * F12->video2 page width [p@800232A8+C] and something else... */ #ifdef NONMATCHING -void video_related_21(f32 arg0) +void set_page_aspect(f32 arg0) { - ptr_video_settings2->scale = arg0; - sub_GAME_7F077C30(ptr_video_settings2->aspect, ptr_video_settings2->far, ptr_video_settings2->scale); - sub_GAME_7F077C5C(); + ptr_video_settings2->aspect = arg0; + currentPlayerSetPerspective(ptr_video_settings2->near, ptr_video_settings2->fovy, ptr_video_settings2->aspect); + currentPlayerSetCameraScale(); } #else GLOBAL_ASM( .text -glabel video_related_21 +glabel set_page_aspect /* 005190 70004590 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 005194 70004594 3C038002 */ lui $v1, %hi(ptr_video_settings2) /* 005198 70004598 246332A8 */ addiu $v1, %lo(ptr_video_settings2) # addiu $v1, $v1, 0x32a8 @@ -2429,9 +1985,9 @@ glabel video_related_21 /* 0051B0 700045B0 8C620000 */ lw $v0, ($v1) /* 0051B4 700045B4 C44C0010 */ lwc1 $f12, 0x10($v0) /* 0051B8 700045B8 C44E0008 */ lwc1 $f14, 8($v0) -/* 0051BC 700045BC 0FC1DF0C */ jal sub_GAME_7F077C30 +/* 0051BC 700045BC 0FC1DF0C */ jal currentPlayerSetPerspective /* 0051C0 700045C0 8C46000C */ lw $a2, 0xc($v0) -/* 0051C4 700045C4 0FC1DF17 */ jal sub_GAME_7F077C5C +/* 0051C4 700045C4 0FC1DF17 */ jal currentPlayerSetCameraScale /* 0051C8 700045C8 00000000 */ nop /* 0051CC 700045CC 8FBF0014 */ lw $ra, 0x14($sp) /* 0051D0 700045D0 27BD0018 */ addiu $sp, $sp, 0x18 @@ -2444,9 +2000,9 @@ glabel video_related_21 * 51DC 700045DC * F0= [p@800232A8+8]; fry T6 */ -f32 video_related_23(void) +f32 viGetFovY(void) { - return ptr_video_settings2->far; + return ptr_video_settings2->fovy; } /** @@ -2455,10 +2011,10 @@ f32 video_related_23(void) #ifdef NONMATCHING void video_related_24(f32 arg0, f32 arg1) { - ptr_video_settings2->far = arg1; - ptr_video_settings2->scale = (f32) (arg0 / arg1); - sub_GAME_7F077C30(ptr_video_settings2->aspect, ptr_video_settings2->far, ptr_video_settings2->scale); - sub_GAME_7F077C5C(); + ptr_video_settings2->fovy = arg1; + ptr_video_settings2->aspect = (f32) (arg0 / arg1); + currentPlayerSetPerspective(ptr_video_settings2->near, ptr_video_settings2->fovy, ptr_video_settings2->aspect); + currentPlayerSetCameraScale(); } #else GLOBAL_ASM( @@ -2481,9 +2037,9 @@ glabel video_related_24 /* 005224 70004624 8C620000 */ lw $v0, ($v1) /* 005228 70004628 C44C0010 */ lwc1 $f12, 0x10($v0) /* 00522C 7000462C C44E0008 */ lwc1 $f14, 8($v0) -/* 005230 70004630 0FC1DF0C */ jal sub_GAME_7F077C30 +/* 005230 70004630 0FC1DF0C */ jal currentPlayerSetPerspective /* 005234 70004634 8C46000C */ lw $a2, 0xc($v0) -/* 005238 70004638 0FC1DF17 */ jal sub_GAME_7F077C5C +/* 005238 70004638 0FC1DF17 */ jal currentPlayerSetCameraScale /* 00523C 7000463C 00000000 */ nop /* 005240 70004640 8FBF0014 */ lw $ra, 0x14($sp) /* 005244 70004644 27BD0018 */ addiu $sp, $sp, 0x18 @@ -2498,10 +2054,10 @@ glabel video_related_24 #ifdef NONMATCHING void set_page_height(f32 arg0, f32 arg1) { - ptr_video_settings2->aspect = arg0; + ptr_video_settings2->near = arg0; ptr_video_settings2->unk14 = arg1; - sub_GAME_7F077C30(ptr_video_settings2->aspect, ptr_video_settings2->far, ptr_video_settings2->scale); - sub_GAME_7F077C5C(); + currentPlayerSetPerspective(ptr_video_settings2->near, ptr_video_settings2->fovy, ptr_video_settings2->aspect); + currentPlayerSetCameraScale(); } #else GLOBAL_ASM( @@ -2522,9 +2078,9 @@ glabel set_page_height /* 005280 70004680 8C620000 */ lw $v0, ($v1) /* 005284 70004684 C44C0010 */ lwc1 $f12, 0x10($v0) /* 005288 70004688 C44E0008 */ lwc1 $f14, 8($v0) -/* 00528C 7000468C 0FC1DF0C */ jal sub_GAME_7F077C30 +/* 00528C 7000468C 0FC1DF0C */ jal currentPlayerSetPerspective /* 005290 70004690 8C46000C */ lw $a2, 0xc($v0) -/* 005294 70004694 0FC1DF17 */ jal sub_GAME_7F077C5C +/* 005294 70004694 0FC1DF17 */ jal currentPlayerSetCameraScale /* 005298 70004698 00000000 */ nop /* 00529C 7000469C 8FBF0014 */ lw $ra, 0x14($sp) /* 0052A0 700046A0 27BD0018 */ addiu $sp, $sp, 0x18 @@ -2540,7 +2096,7 @@ glabel set_page_height #ifdef NONMATCHING void *video_related_27(void *arg0) { - arg0->unk0 = (f32) ptr_video_settings2->aspect; + arg0->unk0 = (f32) ptr_video_settings2->near; arg0->unk4 = (f32) ptr_video_settings2->unk14; return &ptr_video_settings2; } @@ -2643,7 +2199,7 @@ void indy_grab_jpg_16bit(void) jpg_16bit_grabnum++; } sprintf(&iFileName, "grab.%d.temp.uix", jpg_16bit_grabnum); - indy_send_capture_data(&iFileName, ptr_video_settings2->frameb, (get_video2_settings_txtClipH() * get_video2_settings_txtClipW() * 2)); + indy_send_capture_data(&iFileName, ptr_video_settings2->framebuf, (get_video2_settings_txtClipH() * get_video2_settings_txtClipW() * 2)); sprintf(&iFileName, "uix2pix grab.%d.temp.uix", jpg_16bit_grabnum); response_from_command_string(&iFileName); sprintf(&iFileName, "fromalias grab.%d.temp.pix grab.%d.temp.rgb", jpg_16bit_grabnum, jpg_16bit_grabnum); @@ -2784,7 +2340,7 @@ loop_1: goto loop_1; } sprintf(&iFileName, "grab.%d.temp.Uix", jpg_32bit_grabnum); - indy_send_capture_data(&iFileName, &cfb_16_a, (get_video2_settings_txtClipH() * ((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10)) * 4); + indy_send_capture_data(&iFileName, &cfb_16, (get_video2_settings_txtClipH() * ((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10)) * 4); sprintf(&iFileName, "Uix2pix -xs%d grab.%d.temp.Uix", get_video2_settings_txtClipW(), jpg_32bit_grabnum); response_from_command_string(&iFileName); sprintf(&iFileName, "fromalias grab.%d.temp.pix grab.%d.temp.rgb", jpg_32bit_grabnum, jpg_32bit_grabnum); @@ -2847,8 +2403,8 @@ glabel indy_grab_jpg_32bit /* 005560 70004960 0C00110B */ jal get_video2_settings_txtClipH /* 005564 70004964 01C08825 */ move $s1, $t6 /* 005568 70004968 00510019 */ multu $v0, $s1 -/* 00556C 7000496C 3C05803B */ lui $a1, %hi(cfb_16_a) # $a1, 0x803b -/* 005570 70004970 24A55000 */ addiu $a1, %lo(cfb_16_a) # addiu $a1, $a1, 0x5000 +/* 00556C 7000496C 3C05803B */ lui $a1, %hi(cfb_16) # $a1, 0x803b +/* 005570 70004970 24A55000 */ addiu $a1, %lo(cfb_16) # addiu $a1, $a1, 0x5000 /* 005574 70004974 02002025 */ move $a0, $s0 /* 005578 70004978 00003012 */ mflo $a2 /* 00557C 7000497C 00067880 */ sll $t7, $a2, 2 @@ -2929,7 +2485,7 @@ loop_1: goto loop_1; } sprintf(&sp30, "grab.%d.temp.uix", rgb_16bit_grabnum); - indy_send_capture_data(&sp30, ptr_video_settings2->frameb, (get_video2_settings_txtClipH() * ((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10)) * 2); + indy_send_capture_data(&sp30, ptr_video_settings2->framebuf, (get_video2_settings_txtClipH() * ((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10)) * 2); sprintf(&sp30, "uix2pix grab.%d.temp.uix", rgb_16bit_grabnum); response_from_command_string(&sp30); sprintf(&sp30, "fromalias grab.%d.temp.pix grab.%d.rgb", rgb_16bit_grabnum, rgb_16bit_grabnum); @@ -3057,7 +2613,7 @@ loop_1: goto loop_1; } sprintf(&sp30, "grab.%d.temp.Uix", rgb_32bit_grabnum); - indy_send_capture_data(&sp30, &cfb_16_a, (get_video2_settings_txtClipH() * ((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10)) * 4); + indy_send_capture_data(&sp30, &cfb_16, (get_video2_settings_txtClipH() * ((s32) (get_video2_settings_txtClipW() << 0x10) >> 0x10)) * 4); sprintf(&sp30, "Uix2pix -xs%d grab.%d.temp.Uix", get_video2_settings_txtClipW(), rgb_32bit_grabnum); response_from_command_string(&sp30); sprintf(&sp30, "fromalias grab.%d.temp.pix grab.%d.rgb", rgb_32bit_grabnum, rgb_32bit_grabnum); @@ -3117,8 +2673,8 @@ glabel indy_grab_rgb_32bit /* 005840 70004C40 0C00110B */ jal get_video2_settings_txtClipH /* 005844 70004C44 01C08825 */ move $s1, $t6 /* 005848 70004C48 00510019 */ multu $v0, $s1 -/* 00584C 70004C4C 3C05803B */ lui $a1, %hi(cfb_16_a) # $a1, 0x803b -/* 005850 70004C50 24A55000 */ addiu $a1, %lo(cfb_16_a) # addiu $a1, $a1, 0x5000 +/* 00584C 70004C4C 3C05803B */ lui $a1, %hi(cfb_16) # $a1, 0x803b +/* 005850 70004C50 24A55000 */ addiu $a1, %lo(cfb_16) # addiu $a1, $a1, 0x5000 /* 005854 70004C54 02002025 */ move $a0, $s0 /* 005858 70004C58 00003012 */ mflo $a2 /* 00585C 70004C5C 00067880 */ sll $t7, $a2, 2 diff --git a/src/video.h b/src/video.h index 1e65243..fdc757c 100644 --- a/src/video.h +++ b/src/video.h @@ -5,23 +5,30 @@ typedef struct video_settings video_settings, *Pvideo_settings; struct video_settings { - int mode; - short txtClipW; - short txtClipH; - f32 far; - f32 scale; + s8 mode; + s8 test1; + s8 test2; + s8 test3; + s16 x; + s16 y; + f32 fovy; f32 aspect; - f32 anonymous_6; - short somethingW; - short somethingH; - short width; - short height; - short ulx; - short uly; - int anonymous_12; - u8* frameb; + f32 near; + f32 far; + s16 bufx; + s16 bufy; + s16 viewx; + s16 viewy; + s16 viewleft; + s16 viewtop; + s32 usezbuf; + u8* framebuf; }; +void setvideo_far(f32 arg0); +void set_page_aspect(f32 arg0); +void set_page_height(f32 arg0, f32 arg1); +void set_video2_settings_offset_24(int param_1); #endif diff --git a/tools/aaa_rip/main.c b/tools/aaa_rip/main.c new file mode 100644 index 0000000..4ddad3a --- /dev/null +++ b/tools/aaa_rip/main.c @@ -0,0 +1,157 @@ +#include +#include +#include + +#define LINE "__________________________________________________________________" + +int main(int argc, char **argv) +{ + /************************/ + FILE *input, *output; + long int filesize, offset, length, offset_output; + unsigned char *in_buf, *out_buf; + /************************/ + + if((argc != 5) && (argc != 6)) /* no file provided or too many arguments */ + { + printf("\n AAA RIP - Lite DD Clone\n%s\n\n About: Extract sub-binary from binary\n\n Syntax: %s \"in\" \"out\" \"offset\" \"length\" \"out offset\"\n\n Usage:\n Setting length argument to 0 will write until end of input file.\n Omitting output offset will overwrite output file.\n All arguments assume decimal values.", LINE, argv[0]); + goto exit; + } + printf("%s\n", LINE); + + /* load input from argument */ + input = fopen(argv[1], "rb"); + if(input == NULL) + { + printf("\n Error: Aborted, input cannot be opened"); + goto exit; + } + if(fseek(input, 0, SEEK_END) != 0) + { + printf("\n Error: Aborted, could not find end to input file"); + goto error_input; + } + + /* load length/offset arguments */ + offset = atol(argv[3]); + length = atol(argv[4]); + offset_output = (argc == 6) ? atol(argv[5]) : 0; + if(offset < 0) + { + printf("\n Error: Aborted, invalid offset argument"); + goto error_input; + } + + /* get input filesize */ + filesize = ftell(input); + if(filesize == -1) + { + printf("\n Error: Aborted, could not find length of input file"); + goto error_input; + } + if(fseek(input, offset, SEEK_SET) != 0) + { + printf("\n Error: Aborted, could not set offset position"); + goto error_input; + } + if(length <= 0) + { + length = filesize - offset; + } + if(offset >= filesize) + { + printf("\n Error: Aborted, offset goes beyond end of file"); + goto error_input; + } + if(offset + length > filesize) + { + printf("\n Error: Aborted, length goes beyond end of file"); + goto error_input; + } + printf("\n Input File: %s\n Output File: %s\n Offset: %ld\n Length: %ld", argv[1], argv[2], offset, length); + if(argc == 6) + { + printf("\n Output Offset: %ld", offset_output); + } + + /* read input to file buffer */ + in_buf = (unsigned char *)malloc((size_t)length); + if(in_buf == NULL) + { + printf("\n Error: Aborted, not enough memory to load input"); + goto error_input; + } + fread(in_buf, (size_t)length, 1, input); + + /* open output file */ + if(argc == 6) + { + output = fopen(argv[2], "rb"); + if(output == NULL) + { + printf("\n Error: Aborted, output file cannot be written"); + goto error_output; + } + if(fseek(output, 0, SEEK_END) != 0) + { + printf("\n Error: Aborted, could not find end to output file"); + goto error_offset_output; + } + filesize = ftell(output); + if(fseek(output, 0, SEEK_SET) != 0) + { + printf("\n Error: Aborted, could not set offset position"); + goto error_offset_output; + } + if(filesize == -1) + { + printf("\n Error: Aborted, could not find length of output file"); + goto error_offset_output; + } + if(filesize < offset_output + offset + length) + { + filesize = offset_output + offset + length; + } + + /* read output file to buffer */ + out_buf = (unsigned char *)calloc((size_t)filesize, 1); + if(out_buf == NULL) + { + printf("\n Error: Aborted, not enough memory to load output"); + goto error_offset_output; + } + fread(out_buf, (size_t)filesize, 1, output); + memcpy(&out_buf[offset_output], &in_buf[offset], (size_t)length); + fclose(output); + + output = fopen(argv[2], "wb"); + if(output == NULL) + { + printf("\n Error: Aborted, output file cannot be written"); + free(out_buf); + goto error_output; + } + fwrite(out_buf, (size_t)filesize, 1, output); + free(out_buf); + } + else + { + output = fopen(argv[2], "wb"); + if(output == NULL) + { + printf("\n Error: Aborted, output file cannot be written"); + goto error_output; + } + fwrite(in_buf, (size_t)length, 1, output); + } + +error_offset_output: + fclose(output); +error_output: + free(in_buf); +error_input: + fclose(input); +exit: + printf("\n%s\n", LINE); + return 0; +} diff --git a/tools/aaa_rip/makefile b/tools/aaa_rip/makefile new file mode 100644 index 0000000..34580fe --- /dev/null +++ b/tools/aaa_rip/makefile @@ -0,0 +1,35 @@ +#Compiler +CC = @gcc + +#Source directories +SRCDIR = ./ +OUTNAME = aaa_rip + +#Compiler flags +CFLAGS = -shared -ansi -Os -std=c89 +CFLAGSDBG = -shared -ansi -g -std=c89 +WFLAGS = -W -Wall -Wextra -pedantic -Wunreachable-code -Wno-unused-result + +#Linker flags +OBJS = $(SRCDIR)main.o +LFLAGS = $(OBJS) -o $(OUTNAME) -s +LFLAGSDBG = $(OBJS) -o $(OUTNAME) + +#Main recipes +all: aaa_rip + +debug: CC = gcc +debug: CFLAGS = $(CFLAGSDBG) +debug: LFLAGS = $(LFLAGSDBG) +debug: aaa_rip + +aaa_rip: $(OBJS) + $(CC) $(LFLAGS) + +clean: + @rm $(OUTNAME) + @rm $(SRCDIR)*.o + +#Individual recipes +$(OBJDIR)main.o: $(SRCDIR)main.c + $(CC) -c $(SRCDIR)main.c -o $(SRCDIR)main.o $(CFLAGS) $(WFLAGS) \ No newline at end of file diff --git a/tools/data_compress.sh b/tools/data_compress.sh index c0096c0..e1c7c27 100644 --- a/tools/data_compress.sh +++ b/tools/data_compress.sh @@ -5,11 +5,12 @@ MAPFILE="./build/ge007."$2".map" DATASEG_START=$(printf "%d\n" 0x$(grep ${MAPFILE} -e '__csegtempPos =' | cut -d "x" -f3)) DATASEG_LEN=$(printf "%d\n" 0x$(grep ${MAPFILE} -e 'load address 0x0000000000c00000' | cut -d "x" -f3 | cut -d " " -f1)) +#build/rebuild aaa_rip +[ ! -x tools/aaa_rip/aaa_rip ] && make -C tools/aaa_rip echo "patching $1" echo "extract data segment" -echo "one byte at a time is slow, sorry" -dd skip=${DATASEG_START} count=${DATASEG_LEN} if=$1 of=data_seg bs=1 +[ -x tools/aaa_rip/aaa_rip ] && tools/aaa_rip/aaa_rip $1 data_seg ${DATASEG_START} ${DATASEG_LEN} || dd skip=${DATASEG_START} count=${DATASEG_LEN} if=$1 of=data_seg bs=1 echo "truncate $1 to 0x$(printf "%x\n" ${DATASEG_START})" cat $1 | head --bytes=${DATASEG_START} > $1.tmp @@ -30,9 +31,7 @@ CDATA_MAX_SIZE=72704 echo "maxsize=${CDATA_MAX_SIZE}" -echo "one byte at a time is slow, sorry" -dd if=data_seg.rz of=$1.tmp obs=1 seek=${CDATA_POS} conv=notrunc -#rm data_seg data_seg.rz +[ -x tools/aaa_rip/aaa_rip ] && tools/aaa_rip/aaa_rip data_seg.rz $1.tmp 0 0 ${CDATA_POS} || dd if=data_seg.rz of=$1.tmp obs=1 seek=${CDATA_POS} conv=notrunc mv $1.tmp $1 diff --git a/tools/extractor/fread_csv_line.c b/tools/extractor/fread_csv_line.c new file mode 100644 index 0000000..a6a0c59 --- /dev/null +++ b/tools/extractor/fread_csv_line.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include "fread_csv_line.h" + +#define READ_BLOCK_SIZE 65536 +#define QUICK_GETC( ch, fp )\ +do\ +{\ + if ( read_ptr == read_end ) {\ + fread_len = fread( read_buf, sizeof(char), READ_BLOCK_SIZE, fp );\ + if ( fread_len < READ_BLOCK_SIZE ) {\ + read_buf[fread_len] = '\0';\ + }\ + read_ptr = read_buf;\ + }\ + ch = *read_ptr++;\ +}\ +while(0) + +/* + * Given a file pointer, read a CSV line from that file. + * File may include newlines escaped with "double quotes". + * + * Warning: This function is optimized for the use case where + * you repeatedly call it until the file is exhausted. It is + * very suboptimal for the use case of just grabbing one single + * line of CSV and stopping. Also, this function advances the + * file position (in the fseek/ftell sense) unpredictably. You + * should not change the file position between calls to + * fread_csv_line (e.g., don't use "getc" on the file in between + * calls to fread_csv_line). + * + * Other arguments: + * int *done: Pointer to an int that will be set to 1 when file is exhausted. + * + * Warning: Calling this function on an exhausted file (as indicated by the + * 'done' flag) is undefined behavior. + */ + +char *buf = NULL; +int max_line_size = 0; + +int fread_csv_alloc(int size) { + max_line_size = size; + buf = malloc( max_line_size ); + return buf != NULL ? 1 : 0; +} + +void fread_csv_free(void) { + free( buf ); +} + +char *fread_csv_line(FILE *fp, int *done) { + static FILE *bookmark; + static char read_buf[READ_BLOCK_SIZE], *read_ptr, *read_end; + static int fread_len; + char *bptr, *limit; + char ch; + int fQuote; + + bptr = buf; + limit = buf + max_line_size; + + if ( bookmark != fp ) { + read_ptr = read_end = read_buf + READ_BLOCK_SIZE; + bookmark = fp; + } + + for ( fQuote = 0; ; ) { + QUICK_GETC(ch, fp); + + if ( !ch || (ch == '\n' && !fQuote)) { + break; + } + + if ( bptr >= limit ) { + return NULL; + } + *bptr++ = ch; + + if ( fQuote ) { + if ( ch == '\"' ) { + QUICK_GETC(ch, fp); + + if ( ch != '\"' ) { + if ( !ch || ch == '\n' ) { + break; + } + fQuote = 0; + } + *bptr++ = ch; + } + } else if ( ch == '\"' ) { + fQuote = 1; + } + } + + *done = !ch; + *bptr = '\0'; + return buf; +} diff --git a/tools/extractor/fread_csv_line.h b/tools/extractor/fread_csv_line.h new file mode 100644 index 0000000..8211bb7 --- /dev/null +++ b/tools/extractor/fread_csv_line.h @@ -0,0 +1,8 @@ +#ifndef CSV_DOT_H_INCLUDE_GUARD +#define CSV_DOT_H_INCLUDE_GUARD + +int fread_csv_alloc(int size); +void fread_csv_free(void); +char *fread_csv_line(FILE *fp, int *done); + +#endif diff --git a/tools/extractor/main.c b/tools/extractor/main.c new file mode 100644 index 0000000..2b24253 --- /dev/null +++ b/tools/extractor/main.c @@ -0,0 +1,332 @@ +#include +#include +#include +#include +#include "puff.h" +#include "fread_csv_line.h" + +#ifdef _WIN32 + #include + #define MAX_THREADS 32 +#elif __APPLE__ + #include + #include + #define MAX_THREADS 32 +#else + #include + #ifdef __linux__ + #define MAX_THREADS 32 + #else + #define MAX_THREADS 1 + #endif +#endif + +#define CLAMP_VAL(value, min, max) (((value) < (min)) ? (min) : (((value) > (max)) ? (max) : ((value) < (min)) ? (min) : (value))) +#define MBTOBYTES(megs) (megs*0x100000) +#define LINE "__________________________________________________________________" + +#define MIN_ROM_SIZE MBTOBYTES(12) /* minimum ROM filesize supported (12MB) */ +#define MAX_FILENAME 256 /* max filename supported */ +#define GE_1172_HEADER_LENGTH 2 /* header length of GE 1172 zip */ + +unsigned char *rom_buf; +unsigned char tmp_buf[MAX_THREADS][MBTOBYTES(2)] = {0}; /* holds our input/output for gzip inflate (max output file supported 2MB) */ +pthread_t puff_threads[MAX_THREADS]; +unsigned long int counted = 0, success_thread[MAX_THREADS] = {0}, failed_thread[MAX_THREADS] = {0}; + +struct pthread_arg +{ + unsigned long int offset, size; + char *name; + int compress, thread_id, ready; +}; + +typedef struct pthread_arg arg_thread; + +void *extract_thread(void *arg) +{ + /************************/ + arg_thread *thread_arg = (arg_thread *)arg; + int compress, thread_id, puff_return; + unsigned long offset, size, out_size; + char name[MAX_FILENAME]; + FILE *output; + /************************/ + + memcpy(name, thread_arg->name, MAX_FILENAME); + offset = thread_arg->offset; + compress = thread_arg->compress; + size = thread_arg->size; + thread_id = thread_arg->thread_id; + printf("\n Extracting %s %s, %lu bytes...", compress ? "compressed" : "uncompressed", name, size); + thread_arg->ready = 1; + + output = fopen(name, "wb"); + if(output == NULL) + { + printf("\n Error: Could not output file %s", name); + failed_thread[thread_id]++; + goto error_thread_output; + } + if(compress) /* unzip */ + { + puff_return = puff(tmp_buf[thread_id], (unsigned long)MBTOBYTES(2), &rom_buf[offset + GE_1172_HEADER_LENGTH], size, &out_size); + if(puff_return != 0) + { + switch(puff_return) + { + case 2: printf("\n\n Error: Could not uncompress file %s\n Available inflate data did not terminate\n", name); break; + case 1: printf("\n\n Error: Could not uncompress file %s\n Output space exhausted before completing inflate\n", name); break; + case -1: printf("\n\n Error: Could not uncompress file %s\n Invalid block type (type == 3)\n", name); break; + case -2: printf("\n\n Error: Could not uncompress file %s\n Stored block length did not match one's complement\n", name); break; + case -3: printf("\n\n Error: Could not uncompress file %s\n Dynamic block code description: too many length or distance codes\n", name); break; + case -4: printf("\n\n Error: Could not uncompress file %s\n Dynamic block code description: code lengths codes incomplete\n", name); break; + case -5: printf("\n\n Error: Could not uncompress file %s\n Dynamic block code description: repeat lengths with no first length\n", name); break; + case -6: printf("\n\n Error: Could not uncompress file %s\n Dynamic block code description: repeat more than specified lengths\n", name); break; + case -7: printf("\n\n Error: Could not uncompress file %s\n Dynamic block code description: invalid literal/length code lengths\n", name); break; + case -8: printf("\n\n Error: Could not uncompress file %s\n Dynamic block code description: invalid distance code lengths\n", name); break; + case -9: printf("\n\n Error: Could not uncompress file %s\n Dynamic block code description: missing end-of-block code\n", name); break; + case -10: printf("\n\n Error: Could not uncompress file %s\n Invalid literal/length or distance code in fixed or dynamic block\n", name); break; + case -11: printf("\n\n Error: Could not uncompress file %s\n Distance is too far back in fixed or dynamic block\n", name); break; + default: printf("\n\n Error: Could not uncompress file %s\n Unknown error\n", name); break; + } + failed_thread[thread_id]++; + goto error_thread_unzip; + } + fwrite(tmp_buf[thread_id], out_size, 1, output); + } + else /* uncompressed */ + { + fwrite(&rom_buf[offset], size, 1, output); + } + success_thread[thread_id]++; + +error_thread_unzip: + fclose(output); +error_thread_output: + return NULL; +} + +int detect_threads(void) +{ +#ifdef WIN32 + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; +#elif __APPLE__ + int nm[2]; + size_t len = 4; + uint32_t count; + + nm[0] = CTL_HW; nm[1] = HW_AVAILCPU; + sysctl(nm, 2, &count, &len, NULL, 0); + + if(count < 1) + { + nm[1] = HW_NCPU; + sysctl(nm, 2, &count, &len, NULL, 0); + if(count < 1) + { + count = 1; + } + } + return count; +#elif __linux__ + #if defined (_SC_NPROCESSORS_ONLN) + return sysconf(_SC_NPROCESSORS_ONLN); + #elif defined (_SC_NPROC_ONLN) + return sysconf(_SC_NPROC_ONLN); + #else + return 1; + #endif +#else + return 1; +#endif +} + +void extract_files(FILE *csvfile, const int max_threads) +{ + /************************/ + int cur_line_entry = 0, max_line_entry = 0; + int eof = 0, index, cur_thread = 0, check_threads = 0; + char *csv_buf, cur_line; + unsigned long int offset, size; + int compress, extract; + char name[MAX_FILENAME] = {'\0'}; + volatile arg_thread thread_arg; + /************************/ + + /* get max line entry in csv file (required for allocation) */ + while(fread(&cur_line, 1, 1, csvfile)) + { + if(cur_line == '\n') + { + if(cur_line_entry > max_line_entry) + max_line_entry = cur_line_entry; + cur_line_entry = 0; + continue; + } + cur_line_entry++; + } + if(fseek(csvfile, 0, SEEK_SET) != 0) + { + printf("\n Error: Aborted, could not set to beginning of csv file"); + return; + } + + if(!fread_csv_alloc(max_line_entry)) + { + printf("\n Error: Aborted, could not allocate memory for csv file"); + return; + } + while(!eof) + { + csv_buf = fread_csv_line(csvfile, &eof); + if(csv_buf == NULL) + { + printf("\n Error: Aborted, could not read csv line"); + break; + } + + for(index = 0; index < max_line_entry; index++) /* replace commas with new line characters for sscanf */ + { + if(csv_buf[index] == ',') + csv_buf[index] = '\n'; + } + if(sscanf(csv_buf, "%lu\n%lu\n%s\n%d\n%d", &offset, &size, name, &compress, &extract) != 5) /* error or reached end of csv file, abort */ + break; + counted++; + if(extract != 1) + continue; + + if(check_threads) + { + if(pthread_join(puff_threads[cur_thread], NULL) != 0) + { + printf("\n Error: Aborted, could not create thread %d", cur_thread); + break; + } + } + thread_arg.ready = 0; + thread_arg.name = name; + thread_arg.size = size; + thread_arg.offset = offset; + thread_arg.compress = !(!compress); + thread_arg.thread_id = (short)cur_thread; + pthread_create(&puff_threads[cur_thread], NULL, extract_thread, (void *)&thread_arg); + for(;;) /* wait for thread to finish copy arguments */ + { + if(thread_arg.ready) + { + break; + } + } + + cur_thread++; + if(cur_thread >= max_threads) + { + cur_thread = 0; + check_threads = 1; + } + } + fread_csv_free(); + + cur_thread = 0; + while(cur_thread < max_threads) /* wait for thread to finish task */ + { + if(pthread_join(puff_threads[cur_thread], NULL) != 0) + { + continue; + } + cur_thread++; + } +} + +int main(int argc, char **argv) +{ + /************************/ + FILE *romfile, *csvfile; + long int filesize; + int threads_total, index; + unsigned long success_total = 0, failed_total = 0; + /************************/ + + /* set threads total */ + threads_total = CLAMP_VAL(detect_threads(), 1, MAX_THREADS); + + printf("\n GoldenEye 007 Extractor\n%s\n", LINE); + if(argc != 3) /* no file provided or too many arguments */ + { + printf("\n About: Extract GoldenEye 007 files\n\n Syntax: %s \"input ROM\" \"input csv file\"\n Multithread Mode: %sabled", argv[0], threads_total > 1 ? "En" : "Dis"); + goto exit; + } + + /* load ROM from argument */ + romfile = fopen(argv[1], "rb"); + if(romfile == NULL) + { + printf("\n Error: Aborted, ROM cannot be opened"); + goto exit; + } + if(fseek(romfile, 0, SEEK_END) != 0) + { + printf("\n Error: Aborted, could not find end to ROM file"); + goto error_rom; + } + + /* get ROM filesize */ + filesize = ftell(romfile); + if(filesize == -1) + { + printf("\n Error: Aborted, could not find length to ROM file"); + goto error_rom; + } + if(filesize < MIN_ROM_SIZE) /* if ROM filesize is under supported filesize, abort */ + { + printf("\n Error: Aborted, ROM is invalid"); + goto error_rom; + } + if(fseek(romfile, 0, SEEK_SET) != 0) + { + printf("\n Error: Aborted, could not find beginning of ROM file"); + goto error_rom; + } + printf("\n Input ROM: %s", argv[1]); + + /* load csv file from argument */ + csvfile = fopen(argv[2], "rb"); + if(csvfile == NULL) + { + printf("\n Error: Aborted, csv file cannot be opened"); + goto error_rom; + } + + /* read ROM to file buffer */ + rom_buf = (unsigned char *)malloc(filesize); + if(rom_buf == NULL) + { + printf("\n Error: Aborted, not enough memory to load ROM"); + goto error_csv; + } + fread(rom_buf, filesize, 1, romfile); + + extract_files(csvfile, threads_total); + + for(index = 0; index < threads_total; index++) + { + success_total += success_thread[index]; + failed_total += failed_thread[index]; + } + printf("\n\n Total Files: %lu\n\n Extracted: %lu\n Skipped: %lu", counted, success_total, counted - success_total); + if(failed_total) + printf("\n Failed: %lu", failed_total); + + free(rom_buf); +error_csv: + fclose(csvfile); +error_rom: + fclose(romfile); +exit: + printf("\n%s\n", LINE); + return 0; +} diff --git a/tools/extractor/makefile b/tools/extractor/makefile new file mode 100644 index 0000000..b53f814 --- /dev/null +++ b/tools/extractor/makefile @@ -0,0 +1,42 @@ +#Compiler +CC = @gcc + +#Source directories +SRCDIR = ./ +OUTNAME = extractor + +#Compiler flags +CFLAGS = -shared -ansi -Os -std=c89 +CFLAGSDBG = -shared -ansi -g -std=c89 +WFLAGS = -W -Wall -Wextra -pedantic -Wunreachable-code -Wno-unused-result + +#Linker flags +OBJS = $(SRCDIR)main.o $(SRCDIR)puff.o $(SRCDIR)fread_csv_line.o +LIBS = -lpthread +LFLAGS = $(OBJS) -o $(OUTNAME) $(LIBS) -s +LFLAGSDBG = $(OBJS) -o $(OUTNAME) $(LIBS) + +#Main recipes +all: extractor + +debug: CC = gcc +debug: CFLAGS = $(CFLAGSDBG) +debug: LFLAGS = $(LFLAGSDBG) +debug: extractor + +extractor: $(OBJS) + $(CC) $(LFLAGS) + +clean: + @rm $(OUTNAME) + @rm $(SRCDIR)*.o + +#Individual recipes +$(OBJDIR)main.o: $(SRCDIR)main.c $(SRCDIR)puff.h $(SRCDIR)fread_csv_line.h + $(CC) -c $(SRCDIR)main.c -o $(SRCDIR)main.o $(CFLAGS) $(WFLAGS) + +$(OBJDIR)puff.o: $(SRCDIR)puff.c $(SRCDIR)puff.h + $(CC) -c $(SRCDIR)puff.c -o $(SRCDIR)puff.o $(CFLAGS) $(WFLAGS) + +$(OBJDIR)fread_csv_line.o: $(SRCDIR)fread_csv_line.c $(SRCDIR)fread_csv_line.h + $(CC) -c $(SRCDIR)fread_csv_line.c -o $(SRCDIR)fread_csv_line.o $(CFLAGS) $(WFLAGS) diff --git a/tools/extractor/puff.c b/tools/extractor/puff.c new file mode 100644 index 0000000..33eea31 --- /dev/null +++ b/tools/extractor/puff.c @@ -0,0 +1,843 @@ +/* + THIS FILE HAS BEEN MODIFIED + puff has been modified to write length to argument pointer +*/ + +/* + * puff.c + * Copyright (C) 2002-2013 Mark Adler + * For conditions of distribution and use, see copyright notice in puff.h + * version 2.3, 21 Jan 2013 + * + * puff.c is a simple inflate written to be an unambiguous way to specify the + * deflate format. It is not written for speed but rather simplicity. As a + * side benefit, this code might actually be useful when small code is more + * important than speed, such as bootstrap applications. For typical deflate + * data, zlib's inflate() is about four times as fast as puff(). zlib's + * inflate compiles to around 20K on my machine, whereas puff.c compiles to + * around 4K on my machine (a PowerPC using GNU cc). If the faster decode() + * function here is used, then puff() is only twice as slow as zlib's + * inflate(). + * + * All dynamically allocated memory comes from the stack. The stack required + * is less than 2K bytes. This code is compatible with 16-bit int's and + * assumes that long's are at least 32 bits. puff.c uses the short data type, + * assumed to be 16 bits, for arrays in order to conserve memory. The code + * works whether integers are stored big endian or little endian. + * + * In the comments below are "Format notes" that describe the inflate process + * and document some of the less obvious aspects of the format. This source + * code is meant to supplement RFC 1951, which formally describes the deflate + * format: + * + * http://www.zlib.org/rfc-deflate.html + */ + +/* + * Change history: + * + * 1.0 10 Feb 2002 - First version + * 1.1 17 Feb 2002 - Clarifications of some comments and notes + * - Update puff() dest and source pointers on negative + * errors to facilitate debugging deflators + * - Remove longest from struct huffman -- not needed + * - Simplify offs[] index in construct() + * - Add input size and checking, using longjmp() to + * maintain easy readability + * - Use short data type for large arrays + * - Use pointers instead of long to specify source and + * destination sizes to avoid arbitrary 4 GB limits + * 1.2 17 Mar 2002 - Add faster version of decode(), doubles speed (!), + * but leave simple version for readabilty + * - Make sure invalid distances detected if pointers + * are 16 bits + * - Fix fixed codes table error + * - Provide a scanning mode for determining size of + * uncompressed data + * 1.3 20 Mar 2002 - Go back to lengths for puff() parameters [Gailly] + * - Add a puff.h file for the interface + * - Add braces in puff() for else do [Gailly] + * - Use indexes instead of pointers for readability + * 1.4 31 Mar 2002 - Simplify construct() code set check + * - Fix some comments + * - Add FIXLCODES #define + * 1.5 6 Apr 2002 - Minor comment fixes + * 1.6 7 Aug 2002 - Minor format changes + * 1.7 3 Mar 2003 - Added test code for distribution + * - Added zlib-like license + * 1.8 9 Jan 2004 - Added some comments on no distance codes case + * 1.9 21 Feb 2008 - Fix bug on 16-bit integer architectures [Pohland] + * - Catch missing end-of-block symbol error + * 2.0 25 Jul 2008 - Add #define to permit distance too far back + * - Add option in TEST code for puff to write the data + * - Add option in TEST code to skip input bytes + * - Allow TEST code to read from piped stdin + * 2.1 4 Apr 2010 - Avoid variable initialization for happier compilers + * - Avoid unsigned comparisons for even happier compilers + * 2.2 25 Apr 2010 - Fix bug in variable initializations [Oberhumer] + * - Add const where appropriate [Oberhumer] + * - Split if's and ?'s for coverage testing + * - Break out test code to separate file + * - Move NIL to puff.h + * - Allow incomplete code only if single code length is 1 + * - Add full code coverage test to Makefile + * 2.3 21 Jan 2013 - Check for invalid code length codes in dynamic blocks + */ + +#include /* for setjmp(), longjmp(), and jmp_buf */ +#include "puff.h" /* prototype for puff() */ + +#define local static /* for local function definitions */ + +/* + * Maximums for allocations and loops. It is not useful to change these -- + * they are fixed by the deflate format. + */ +#define MAXBITS 15 /* maximum bits in a code */ +#define MAXLCODES 286 /* maximum number of literal/length codes */ +#define MAXDCODES 30 /* maximum number of distance codes */ +#define MAXCODES (MAXLCODES+MAXDCODES) /* maximum codes lengths to read */ +#define FIXLCODES 288 /* number of fixed literal/length codes */ + +/* input and output state */ +struct state { + /* output state */ + unsigned char *out; /* output buffer */ + unsigned long outlen; /* available space at out */ + unsigned long outcnt; /* bytes written to out so far */ + + /* input state */ + const unsigned char *in; /* input buffer */ + unsigned long inlen; /* available input at in */ + unsigned long incnt; /* bytes read so far */ + int bitbuf; /* bit buffer */ + int bitcnt; /* number of bits in bit buffer */ + + /* input limit error return state for bits() and decode() */ + jmp_buf env; +}; + +/* + * Return need bits from the input stream. This always leaves less than + * eight bits in the buffer. bits() works properly for need == 0. + * + * Format notes: + * + * - Bits are stored in bytes from the least significant bit to the most + * significant bit. Therefore bits are dropped from the bottom of the bit + * buffer, using shift right, and new bytes are appended to the top of the + * bit buffer, using shift left. + */ +local int bits(struct state *s, int need) +{ + long val; /* bit accumulator (can use up to 20 bits) */ + + /* load at least need bits into val */ + val = s->bitbuf; + while (s->bitcnt < need) { + if (s->incnt == s->inlen) + longjmp(s->env, 1); /* out of input */ + val |= (long)(s->in[s->incnt++]) << s->bitcnt; /* load eight bits */ + s->bitcnt += 8; + } + + /* drop need bits and update buffer, always zero to seven bits left */ + s->bitbuf = (int)(val >> need); + s->bitcnt -= need; + + /* return need bits, zeroing the bits above that */ + return (int)(val & ((1L << need) - 1)); +} + +/* + * Process a stored block. + * + * Format notes: + * + * - After the two-bit stored block type (00), the stored block length and + * stored bytes are byte-aligned for fast copying. Therefore any leftover + * bits in the byte that has the last bit of the type, as many as seven, are + * discarded. The value of the discarded bits are not defined and should not + * be checked against any expectation. + * + * - The second inverted copy of the stored block length does not have to be + * checked, but it's probably a good idea to do so anyway. + * + * - A stored block can have zero length. This is sometimes used to byte-align + * subsets of the compressed data for random access or partial recovery. + */ +local int stored(struct state *s) +{ + unsigned len; /* length of stored block */ + + /* discard leftover bits from current byte (assumes s->bitcnt < 8) */ + s->bitbuf = 0; + s->bitcnt = 0; + + /* get length and check against its one's complement */ + if (s->incnt + 4 > s->inlen) + return 2; /* not enough input */ + len = s->in[s->incnt++]; + len |= s->in[s->incnt++] << 8; + if (s->in[s->incnt++] != (~len & 0xff) || + s->in[s->incnt++] != ((~len >> 8) & 0xff)) + return -2; /* didn't match complement! */ + + /* copy len bytes from in to out */ + if (s->incnt + len > s->inlen) + return 2; /* not enough input */ + if (s->out != NIL) { + if (s->outcnt + len > s->outlen) + return 1; /* not enough output space */ + while (len--) + s->out[s->outcnt++] = s->in[s->incnt++]; + } + else { /* just scanning */ + s->outcnt += len; + s->incnt += len; + } + + /* done with a valid stored block */ + return 0; +} + +/* + * Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of + * each length, which for a canonical code are stepped through in order. + * symbol[] are the symbol values in canonical order, where the number of + * entries is the sum of the counts in count[]. The decoding process can be + * seen in the function decode() below. + */ +struct huffman { + short *count; /* number of symbols of each length */ + short *symbol; /* canonically ordered symbols */ +}; + +/* + * Decode a code from the stream s using huffman table h. Return the symbol or + * a negative value if there is an error. If all of the lengths are zero, i.e. + * an empty code, or if the code is incomplete and an invalid code is received, + * then -10 is returned after reading MAXBITS bits. + * + * Format notes: + * + * - The codes as stored in the compressed data are bit-reversed relative to + * a simple integer ordering of codes of the same lengths. Hence below the + * bits are pulled from the compressed data one at a time and used to + * build the code value reversed from what is in the stream in order to + * permit simple integer comparisons for decoding. A table-based decoding + * scheme (as used in zlib) does not need to do this reversal. + * + * - The first code for the shortest length is all zeros. Subsequent codes of + * the same length are simply integer increments of the previous code. When + * moving up a length, a zero bit is appended to the code. For a complete + * code, the last code of the longest length will be all ones. + * + * - Incomplete codes are handled by this decoder, since they are permitted + * in the deflate format. See the format notes for fixed() and dynamic(). + */ +#ifdef SLOW +local int decode(struct state *s, const struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + + code = first = index = 0; + for (len = 1; len <= MAXBITS; len++) { + code |= bits(s, 1); /* get next bit */ + count = h->count[len]; + if (code - count < first) /* if length len, return symbol */ + return h->symbol[index + (code - first)]; + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + } + return -10; /* ran out of codes */ +} + +/* + * A faster version of decode() for real applications of this code. It's not + * as readable, but it makes puff() twice as fast. And it only makes the code + * a few percent larger. + */ +#else /* !SLOW */ +local int decode(struct state *s, const struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + int bitbuf; /* bits from stream */ + int left; /* bits left in next or left to process */ + short *next; /* next number of codes */ + + bitbuf = s->bitbuf; + left = s->bitcnt; + code = first = index = 0; + len = 1; + next = h->count + 1; + while (1) { + while (left--) { + code |= bitbuf & 1; + bitbuf >>= 1; + count = *next++; + if (code - count < first) { /* if length len, return symbol */ + s->bitbuf = bitbuf; + s->bitcnt = (s->bitcnt - len) & 7; + return h->symbol[index + (code - first)]; + } + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + len++; + } + left = (MAXBITS+1) - len; + if (left == 0) + break; + if (s->incnt == s->inlen) + longjmp(s->env, 1); /* out of input */ + bitbuf = s->in[s->incnt++]; + if (left > 8) + left = 8; + } + return -10; /* ran out of codes */ +} +#endif /* SLOW */ + +/* + * Given the list of code lengths length[0..n-1] representing a canonical + * Huffman code for n symbols, construct the tables required to decode those + * codes. Those tables are the number of codes of each length, and the symbols + * sorted by length, retaining their original order within each length. The + * return value is zero for a complete code set, negative for an over- + * subscribed code set, and positive for an incomplete code set. The tables + * can be used if the return value is zero or positive, but they cannot be used + * if the return value is negative. If the return value is zero, it is not + * possible for decode() using that table to return an error--any stream of + * enough bits will resolve to a symbol. If the return value is positive, then + * it is possible for decode() using that table to return an error for received + * codes past the end of the incomplete lengths. + * + * Not used by decode(), but used for error checking, h->count[0] is the number + * of the n symbols not in the code. So n - h->count[0] is the number of + * codes. This is useful for checking for incomplete codes that have more than + * one symbol, which is an error in a dynamic block. + * + * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS + * This is assured by the construction of the length arrays in dynamic() and + * fixed() and is not verified by construct(). + * + * Format notes: + * + * - Permitted and expected examples of incomplete codes are one of the fixed + * codes and any code with a single symbol which in deflate is coded as one + * bit instead of zero bits. See the format notes for fixed() and dynamic(). + * + * - Within a given code length, the symbols are kept in ascending order for + * the code bits definition. + */ +local int construct(struct huffman *h, const short *length, int n) +{ + int symbol; /* current symbol when stepping through length[] */ + int len; /* current length when stepping through h->count[] */ + int left; /* number of possible codes left of current length */ + short offs[MAXBITS+1]; /* offsets in symbol table for each length */ + + /* count number of codes of each length */ + for (len = 0; len <= MAXBITS; len++) + h->count[len] = 0; + for (symbol = 0; symbol < n; symbol++) + (h->count[length[symbol]])++; /* assumes lengths are within bounds */ + if (h->count[0] == n) /* no codes! */ + return 0; /* complete, but decode() will fail */ + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; /* one possible code of zero length */ + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; /* one more bit, double codes left */ + left -= h->count[len]; /* deduct count from possible codes */ + if (left < 0) + return left; /* over-subscribed--return negative */ + } /* left > 0 means incomplete */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + h->count[len]; + + /* + * put symbols in table sorted by length, by symbol order within each + * length + */ + for (symbol = 0; symbol < n; symbol++) + if (length[symbol] != 0) + h->symbol[offs[length[symbol]]++] = symbol; + + /* return zero for complete set, positive for incomplete set */ + return left; +} + +/* + * Decode literal/length and distance codes until an end-of-block code. + * + * Format notes: + * + * - Compressed data that is after the block type if fixed or after the code + * description if dynamic is a combination of literals and length/distance + * pairs terminated by and end-of-block code. Literals are simply Huffman + * coded bytes. A length/distance pair is a coded length followed by a + * coded distance to represent a string that occurs earlier in the + * uncompressed data that occurs again at the current location. + * + * - Literals, lengths, and the end-of-block code are combined into a single + * code of up to 286 symbols. They are 256 literals (0..255), 29 length + * symbols (257..285), and the end-of-block symbol (256). + * + * - There are 256 possible lengths (3..258), and so 29 symbols are not enough + * to represent all of those. Lengths 3..10 and 258 are in fact represented + * by just a length symbol. Lengths 11..257 are represented as a symbol and + * some number of extra bits that are added as an integer to the base length + * of the length symbol. The number of extra bits is determined by the base + * length symbol. These are in the static arrays below, lens[] for the base + * lengths and lext[] for the corresponding number of extra bits. + * + * - The reason that 258 gets its own symbol is that the longest length is used + * often in highly redundant files. Note that 258 can also be coded as the + * base value 227 plus the maximum extra value of 31. While a good deflate + * should never do this, it is not an error, and should be decoded properly. + * + * - If a length is decoded, including its extra bits if any, then it is + * followed a distance code. There are up to 30 distance symbols. Again + * there are many more possible distances (1..32768), so extra bits are added + * to a base value represented by the symbol. The distances 1..4 get their + * own symbol, but the rest require extra bits. The base distances and + * corresponding number of extra bits are below in the static arrays dist[] + * and dext[]. + * + * - Literal bytes are simply written to the output. A length/distance pair is + * an instruction to copy previously uncompressed bytes to the output. The + * copy is from distance bytes back in the output stream, copying for length + * bytes. + * + * - Distances pointing before the beginning of the output data are not + * permitted. + * + * - Overlapped copies, where the length is greater than the distance, are + * allowed and common. For example, a distance of one and a length of 258 + * simply copies the last byte 258 times. A distance of four and a length of + * twelve copies the last four bytes three times. A simple forward copy + * ignoring whether the length is greater than the distance or not implements + * this correctly. You should not use memcpy() since its behavior is not + * defined for overlapped arrays. You should not use memmove() or bcopy() + * since though their behavior -is- defined for overlapping arrays, it is + * defined to do the wrong thing in this case. + */ +local int codes(struct state *s, + const struct huffman *lencode, + const struct huffman *distcode) +{ + int symbol; /* decoded symbol */ + int len; /* length for copy */ + unsigned dist; /* distance for copy */ + static const short lens[29] = { /* Size base for length codes 257..285 */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258}; + static const short lext[29] = { /* Extra bits for length codes 257..285 */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; + static const short dists[30] = { /* Offset base for distance codes 0..29 */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577}; + static const short dext[30] = { /* Extra bits for distance codes 0..29 */ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + + /* decode literals and length/distance pairs */ + do { + symbol = decode(s, lencode); + if (symbol < 0) + return symbol; /* invalid symbol */ + if (symbol < 256) { /* literal: symbol is the byte */ + /* write out the literal */ + if (s->out != NIL) { + if (s->outcnt == s->outlen) + return 1; + s->out[s->outcnt] = symbol; + } + s->outcnt++; + } + else if (symbol > 256) { /* length */ + /* get and compute length */ + symbol -= 257; + if (symbol >= 29) + return -10; /* invalid fixed code */ + len = lens[symbol] + bits(s, lext[symbol]); + + /* get and check distance */ + symbol = decode(s, distcode); + if (symbol < 0) + return symbol; /* invalid symbol */ + dist = dists[symbol] + bits(s, dext[symbol]); +#ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (dist > s->outcnt) + return -11; /* distance too far back */ +#endif + + /* copy length bytes from distance bytes back */ + if (s->out != NIL) { + if (s->outcnt + len > s->outlen) + return 1; + while (len--) { + s->out[s->outcnt] = +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + dist > s->outcnt ? + 0 : +#endif + s->out[s->outcnt - dist]; + s->outcnt++; + } + } + else + s->outcnt += len; + } + } while (symbol != 256); /* end of block symbol */ + + /* done with a valid fixed or dynamic block */ + return 0; +} + +/* + * Process a fixed codes block. + * + * Format notes: + * + * - This block type can be useful for compressing small amounts of data for + * which the size of the code descriptions in a dynamic block exceeds the + * benefit of custom codes for that block. For fixed codes, no bits are + * spent on code descriptions. Instead the code lengths for literal/length + * codes and distance codes are fixed. The specific lengths for each symbol + * can be seen in the "for" loops below. + * + * - The literal/length code is complete, but has two symbols that are invalid + * and should result in an error if received. This cannot be implemented + * simply as an incomplete code since those two symbols are in the "middle" + * of the code. They are eight bits long and the longest literal/length\ + * code is nine bits. Therefore the code must be constructed with those + * symbols, and the invalid symbols must be detected after decoding. + * + * - The fixed distance codes also have two invalid symbols that should result + * in an error if received. Since all of the distance codes are the same + * length, this can be implemented as an incomplete code. Then the invalid + * codes are detected while decoding. + */ +local int fixed(struct state *s) +{ + static int virgin = 1; + static short lencnt[MAXBITS+1], lensym[FIXLCODES]; + static short distcnt[MAXBITS+1], distsym[MAXDCODES]; + static struct huffman lencode, distcode; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + int symbol; + short lengths[FIXLCODES]; + + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + + /* literal/length table */ + for (symbol = 0; symbol < 144; symbol++) + lengths[symbol] = 8; + for (; symbol < 256; symbol++) + lengths[symbol] = 9; + for (; symbol < 280; symbol++) + lengths[symbol] = 7; + for (; symbol < FIXLCODES; symbol++) + lengths[symbol] = 8; + construct(&lencode, lengths, FIXLCODES); + + /* distance table */ + for (symbol = 0; symbol < MAXDCODES; symbol++) + lengths[symbol] = 5; + construct(&distcode, lengths, MAXDCODES); + + /* do this just once */ + virgin = 0; + } + + /* decode data until end-of-block code */ + return codes(s, &lencode, &distcode); +} + +/* + * Process a dynamic codes block. + * + * Format notes: + * + * - A dynamic block starts with a description of the literal/length and + * distance codes for that block. New dynamic blocks allow the compressor to + * rapidly adapt to changing data with new codes optimized for that data. + * + * - The codes used by the deflate format are "canonical", which means that + * the actual bits of the codes are generated in an unambiguous way simply + * from the number of bits in each code. Therefore the code descriptions + * are simply a list of code lengths for each symbol. + * + * - The code lengths are stored in order for the symbols, so lengths are + * provided for each of the literal/length symbols, and for each of the + * distance symbols. + * + * - If a symbol is not used in the block, this is represented by a zero as + * as the code length. This does not mean a zero-length code, but rather + * that no code should be created for this symbol. There is no way in the + * deflate format to represent a zero-length code. + * + * - The maximum number of bits in a code is 15, so the possible lengths for + * any code are 1..15. + * + * - The fact that a length of zero is not permitted for a code has an + * interesting consequence. Normally if only one symbol is used for a given + * code, then in fact that code could be represented with zero bits. However + * in deflate, that code has to be at least one bit. So for example, if + * only a single distance base symbol appears in a block, then it will be + * represented by a single code of length one, in particular one 0 bit. This + * is an incomplete code, since if a 1 bit is received, it has no meaning, + * and should result in an error. So incomplete distance codes of one symbol + * should be permitted, and the receipt of invalid codes should be handled. + * + * - It is also possible to have a single literal/length code, but that code + * must be the end-of-block code, since every dynamic block has one. This + * is not the most efficient way to create an empty block (an empty fixed + * block is fewer bits), but it is allowed by the format. So incomplete + * literal/length codes of one symbol should also be permitted. + * + * - If there are only literal codes and no lengths, then there are no distance + * codes. This is represented by one distance code with zero bits. + * + * - The list of up to 286 length/literal lengths and up to 30 distance lengths + * are themselves compressed using Huffman codes and run-length encoding. In + * the list of code lengths, a 0 symbol means no code, a 1..15 symbol means + * that length, and the symbols 16, 17, and 18 are run-length instructions. + * Each of 16, 17, and 18 are follwed by extra bits to define the length of + * the run. 16 copies the last length 3 to 6 times. 17 represents 3 to 10 + * zero lengths, and 18 represents 11 to 138 zero lengths. Unused symbols + * are common, hence the special coding for zero lengths. + * + * - The symbols for 0..18 are Huffman coded, and so that code must be + * described first. This is simply a sequence of up to 19 three-bit values + * representing no code (0) or the code length for that symbol (1..7). + * + * - A dynamic block starts with three fixed-size counts from which is computed + * the number of literal/length code lengths, the number of distance code + * lengths, and the number of code length code lengths (ok, you come up with + * a better name!) in the code descriptions. For the literal/length and + * distance codes, lengths after those provided are considered zero, i.e. no + * code. The code length code lengths are received in a permuted order (see + * the order[] array below) to make a short code length code length list more + * likely. As it turns out, very short and very long codes are less likely + * to be seen in a dynamic code description, hence what may appear initially + * to be a peculiar ordering. + * + * - Given the number of literal/length code lengths (nlen) and distance code + * lengths (ndist), then they are treated as one long list of nlen + ndist + * code lengths. Therefore run-length coding can and often does cross the + * boundary between the two sets of lengths. + * + * - So to summarize, the code description at the start of a dynamic block is + * three counts for the number of code lengths for the literal/length codes, + * the distance codes, and the code length codes. This is followed by the + * code length code lengths, three bits each. This is used to construct the + * code length code which is used to read the remainder of the lengths. Then + * the literal/length code lengths and distance lengths are read as a single + * set of lengths using the code length codes. Codes are constructed from + * the resulting two sets of lengths, and then finally you can start + * decoding actual compressed data in the block. + * + * - For reference, a "typical" size for the code description in a dynamic + * block is around 80 bytes. + */ +local int dynamic(struct state *s) +{ + int nlen, ndist, ncode; /* number of lengths in descriptor */ + int index; /* index of lengths[] */ + int err; /* construct() return value */ + short lengths[MAXCODES]; /* descriptor code lengths */ + short lencnt[MAXBITS+1], lensym[MAXLCODES]; /* lencode memory */ + short distcnt[MAXBITS+1], distsym[MAXDCODES]; /* distcode memory */ + struct huffman lencode, distcode; /* length and distance codes */ + static const short order[19] = /* permutation of code length codes */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + + /* get number of lengths in each table, check lengths */ + nlen = bits(s, 5) + 257; + ndist = bits(s, 5) + 1; + ncode = bits(s, 4) + 4; + if (nlen > MAXLCODES || ndist > MAXDCODES) + return -3; /* bad counts */ + + /* read code length code lengths (really), missing lengths are zero */ + for (index = 0; index < ncode; index++) + lengths[order[index]] = bits(s, 3); + for (; index < 19; index++) + lengths[order[index]] = 0; + + /* build huffman table for code lengths codes (use lencode temporarily) */ + err = construct(&lencode, lengths, 19); + if (err != 0) /* require complete code set here */ + return -4; + + /* read length/literal and distance code length tables */ + index = 0; + while (index < nlen + ndist) { + int symbol; /* decoded value */ + int len; /* last length to repeat */ + + symbol = decode(s, &lencode); + if (symbol < 0) + return symbol; /* invalid symbol */ + if (symbol < 16) /* length in 0..15 */ + lengths[index++] = symbol; + else { /* repeat instruction */ + len = 0; /* assume repeating zeros */ + if (symbol == 16) { /* repeat last length 3..6 times */ + if (index == 0) + return -5; /* no last length! */ + len = lengths[index - 1]; /* last length */ + symbol = 3 + bits(s, 2); + } + else if (symbol == 17) /* repeat zero 3..10 times */ + symbol = 3 + bits(s, 3); + else /* == 18, repeat zero 11..138 times */ + symbol = 11 + bits(s, 7); + if (index + symbol > nlen + ndist) + return -6; /* too many lengths! */ + while (symbol--) /* repeat last or zero symbol times */ + lengths[index++] = len; + } + } + + /* check for end-of-block code -- there better be one! */ + if (lengths[256] == 0) + return -9; + + /* build huffman table for literal/length codes */ + err = construct(&lencode, lengths, nlen); + if (err && (err < 0 || nlen != lencode.count[0] + lencode.count[1])) + return -7; /* incomplete code ok only for single length 1 code */ + + /* build huffman table for distance codes */ + err = construct(&distcode, lengths + nlen, ndist); + if (err && (err < 0 || ndist != distcode.count[0] + distcode.count[1])) + return -8; /* incomplete code ok only for single length 1 code */ + + /* decode data until end-of-block code */ + return codes(s, &lencode, &distcode); +} + +/* + * Inflate source to dest. On return, destlen and sourcelen are updated to the + * size of the uncompressed data and the size of the deflate data respectively. + * On success, the return value of puff() is zero. If there is an error in the + * source data, i.e. it is not in the deflate format, then a negative value is + * returned. If there is not enough input available or there is not enough + * output space, then a positive error is returned. In that case, destlen and + * sourcelen are not updated to facilitate retrying from the beginning with the + * provision of more input data or more output space. In the case of invalid + * inflate data (a negative error), the dest and source pointers are updated to + * facilitate the debugging of deflators. + * + * puff() also has a mode to determine the size of the uncompressed output with + * no output written. For this dest must be (unsigned char *)0. In this case, + * the input value of *destlen is ignored, and on return *destlen is set to the + * size of the uncompressed output. + * + * The return codes are: + * + * 2: available inflate data did not terminate + * 1: output space exhausted before completing inflate + * 0: successful inflate + * -1: invalid block type (type == 3) + * -2: stored block length did not match one's complement + * -3: dynamic block code description: too many length or distance codes + * -4: dynamic block code description: code lengths codes incomplete + * -5: dynamic block code description: repeat lengths with no first length + * -6: dynamic block code description: repeat more than specified lengths + * -7: dynamic block code description: invalid literal/length code lengths + * -8: dynamic block code description: invalid distance code lengths + * -9: dynamic block code description: missing end-of-block code + * -10: invalid literal/length or distance code in fixed or dynamic block + * -11: distance is too far back in fixed or dynamic block + * + * Format notes: + * + * - Three bits are read for each block to determine the kind of block and + * whether or not it is the last block. Then the block is decoded and the + * process repeated if it was not the last block. + * + * - The leftover bits in the last byte of the deflate data after the last + * block (if it was a fixed or dynamic block) are undefined and have no + * expected values to check. + */ +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long destlen, /* amount of output space */ + const unsigned char *source, /* pointer to source data pointer */ + unsigned long sourcelen, /* amount of input available */ + unsigned long *outlen) /* output length */ +{ + struct state s; /* input/output state */ + int last, type; /* block information */ + int err; /* return value */ + + /* initialize output state */ + s.out = dest; + s.outlen = destlen; /* ignored if dest is NIL */ + s.outcnt = 0; + + /* initialize input state */ + s.in = source; + s.inlen = sourcelen; + s.incnt = 0; + s.bitbuf = 0; + s.bitcnt = 0; + + /* return if bits() or decode() tries to read past available input */ + if (setjmp(s.env) != 0) /* if came back here via longjmp() */ + err = 2; /* then skip do-loop, return error */ + else { + /* process blocks until last block or error */ + do { + last = bits(&s, 1); /* one if last block */ + type = bits(&s, 2); /* block type 0..3 */ + err = type == 0 ? + stored(&s) : + (type == 1 ? + fixed(&s) : + (type == 2 ? + dynamic(&s) : + -1)); /* type == 3, invalid */ + if (err != 0) + break; /* return with error */ + } while (!last); + } + + /* update the lengths and return */ + *outlen = s.outcnt; + return err; +} diff --git a/tools/extractor/puff.h b/tools/extractor/puff.h new file mode 100644 index 0000000..43455fc --- /dev/null +++ b/tools/extractor/puff.h @@ -0,0 +1,41 @@ +/* + THIS FILE HAS BEEN MODIFIED + puff has been modified to write length to argument pointer +*/ + +/* puff.h + Copyright (C) 2002-2013 Mark Adler, all rights reserved + version 2.3, 21 Jan 2013 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + + +/* + * See puff.c for purpose and usage. + */ +#ifndef NIL +# define NIL ((unsigned char *)0) /* for no output option */ +#endif + +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long destlen, /* amount of output space */ + const unsigned char *source, /* pointer to source data pointer */ + unsigned long sourcelen, /* amount of input available */ + unsigned long *outlen); /* output length */ diff --git a/tools/ge-stats.py b/tools/ge-stats.py new file mode 100644 index 0000000..6eec98c --- /dev/null +++ b/tools/ge-stats.py @@ -0,0 +1,258 @@ +import re +import os +import sys +import subprocess +import shlex +import getopt + + +# -------------------------- +# Read Map File and return +# all function lenghts +# -------------------------- +def parse_map(version): + + if version not in ("us", "jp"): + print('fatal: version', version, 'not supported!') + sys.exit(2) + + version_code = version[0] + + infile = False + prevromaddr = 0 + lengths = {} + + p1 = re.compile(r"^ \.text\s+0x00000000([0-9a-f]{8})\s+0x([0-9a-f]+)\s+build\/" + re.escape(version_code) + r"\/(.*)\/\S+.\w$") + p2 = re.compile(r"\s+0x00000000([0-9a-f]{8})\s+(\S+)$") + + map_file = open('build/ge007.' + version_code + '.map', 'r') + lines = map_file.readlines() + + for line in lines: + + m1 = p1.findall(line) + m2 = p2.findall(line) + + if m1: + filestart = int(m1[0][0], 16) + filelen = int(m1[0][1], 16) + segment = m1[0][2] + infile = True + prevromaddr = 0 + prevfuncname = None + + if segment not in lengths.keys(): + lengths[segment] = {} + + elif infile and m2: + romaddr = int(m2[0][0], 16) + funcname = m2[0][1] + + if prevfuncname: + lengths[segment][prevfuncname] = romaddr - prevromaddr + + prevromaddr = romaddr + prevfuncname = funcname + + elif infile: + infile = False + + if prevfuncname: + lengths[segment][prevfuncname] = (filestart + filelen) - prevromaddr + + return lengths + +# -------------------------- +# Find and return all +# ASM Function names that still +# exists in Source Files +# -------------------------- +def find_asm_functions(): + + p = re.compile(r"^glabel (\S+)$") + asm_functions = [] + + for root, dirs, files in os.walk('src'): + for file in files: + with open(os.path.join(root, file)) as _file: + for i, line in enumerate(_file.readlines()): + m = p.findall(line) + if m: + asm_functions.append(m[0]) + + return asm_functions + +# -------------------------- +# Find and return the number of completed files +# Only scans for C and S files +# -------------------------- +def find_files_completed(): + + p = re.compile(r"^glabel (\S+)$") + files_complete = {} + + files_complete['completed'] = 0 + files_complete['total'] = 0 + + for root, dirs, files in os.walk('src'): + for file in files: + if file.endswith(".c") or file.endswith(".s"): + with open(os.path.join(root, file)) as _file: + + completed = True + files_complete['total'] += 1 + + for i, line in enumerate(_file.readlines()): + if p.findall(line): + completed = False + break + + if completed: + files_complete['completed'] += 1 + + return files_complete + +# -------------------------- +# Find and return the Name of most recent file +# Only scans for C and S files +# -------------------------- +def find_last_modified_file(): + lastdate = 0 + lastname = '' + timestamp = 0 + + for root, dirs, files in os.walk('src'): + for file in files: + if file.endswith(".c") or file.endswith(".s"): + _file = os.path.join(root, file) + + result = subprocess.run(['git', 'log', '-1', '--format=\"%ct\"', '--', _file], stdout=subprocess.PIPE, universal_newlines=True) + + timestamp = int(result.stdout.rstrip().replace('"', ''), 16) + + if timestamp > lastdate: + lastdate = timestamp + lastname = _file + + return lastname + +# -------------------------- +# Calculate the decomp stats +# on each folder +# -------------------------- +def do_stats(map_file, analyse_folders): + + asm_functions = find_asm_functions() + segments = {} + + for folder in analyse_folders: + + segments[folder] = {} + segments[folder]['done'] = 0 + segments[folder]['left'] = 0 + segments[folder]['total'] = 0 + + num_done = 0 + num_left = 0 + + for function in map_file[folder]: + if function in asm_functions: + num_left += map_file[folder][function] + else: + num_done += map_file[folder][function] + + segments[folder]['done'] = num_done / 4 + segments[folder]['left'] = num_left / 4 + segments[folder]['total'] = segments[folder]['done'] + segments[folder]['left'] + + return segments + +def generate_report(segments, files_completed, last_modified_file): + printstring = "./tools/report/report " + + totals = {} + totals['done'] = 0 + totals['total'] = 0 + + for key in segments.keys(): + printstring = printstring + str(segments[key]['done']) + ' ' + str(segments[key]['total']) + ' ' + totals['done'] += segments[key]['done'] + totals['total'] += segments[key]['total'] + + printstring = printstring + str(totals['done']) + ' ' + str(totals['total']) + ' ' + printstring = printstring + str(files_completed['completed']) + ' ' + str(files_completed['total']) + ' ' + printstring = printstring + './tools/report/index.html ' + last_modified_file + ' 0' + subprocess.Popen(printstring.split()) + +def print_stats(version, segments, files_completed, last_modified_file): + totals = {} + totals['done'] = 0 + totals['total'] = 0 + + print() + print('~> Decomp Statistics for ' + version.upper() +' version') + print('__________________________________________________________________') + print() + + print('FILES') + print('\tlast modified file\t' + last_modified_file ) + print('\ttotal files\t{:10,} / {:,} \t{:.2f}%'.format(int(files_completed['completed']), int(files_completed['total']), (files_completed['completed'] / files_completed['total'] * 100))) + + print('__________________________________________________________________') + print() + + print('WORDS') + for key in segments.keys(): + print('\t{:10}\t{:10,} / {:,} \t{:.2f}%'.format(key, int(segments[key]['done']), int(segments[key]['total']), (segments[key]['done'] / segments[key]['total'] * 100))) + totals['done'] += segments[key]['done'] + totals['total'] += segments[key]['total'] + + print('\t----------------------------------------------------------') + print('\tTOTAL\t\t{:10,} / {:,} \t{:.2f}%'.format(int(totals['done']), int(totals['total']), (totals['done'] / totals['total'] * 100))) + print('__________________________________________________________________') + print() + +def print_help(): + print('Usage: python3 ge-stats.py [OPTION]') + print('Generate Decompilation Stats for Goldeneye 007') + print('Example: python3 ge-stats.py --version us') + print(' ') + print('Options:') + print(' -v, --version=CODE generate decomp stats for version CODE (us or jp). Default is us') + print(' -r, --report generate html report using report tool') + print(' -h, --help display this help text and exit') + +def main(): + + version = 'us' + run_report = False + + if (len(sys.argv) > 1): + arguments, values = getopt.getopt(sys.argv[1:], "hv:r", ["help", "version=", "report"]) + + for current_argument, current_value in arguments: + if current_argument in ("-h", "--help"): + print_help() + sys.exit() + elif current_argument in ("-v", "--version"): + version = current_value + elif current_argument in ("-r", "--report"): + run_report = True + + files_completed = find_files_completed() + + last_modified_file = find_last_modified_file() + + map_file = parse_map(version) + + folders = ['src', 'src/game', 'src/inflate', 'src/libultra'] + + segments = do_stats(map_file, folders) + + print_stats(version, segments, files_completed, last_modified_file) + + if run_report: + generate_report(segments, files_completed, last_modified_file) + +if __name__ == '__main__': + main() diff --git a/tools/report/background.jpg b/tools/report/background.jpg new file mode 100644 index 0000000..cc7145c Binary files /dev/null and b/tools/report/background.jpg differ diff --git a/tools/report/cursor.cur b/tools/report/cursor.cur new file mode 100644 index 0000000..48589c1 Binary files /dev/null and b/tools/report/cursor.cur differ diff --git a/tools/report/main.c b/tools/report/main.c new file mode 100644 index 0000000..429e2b5 --- /dev/null +++ b/tools/report/main.c @@ -0,0 +1,300 @@ +#include +#include +#include "objectives.h" + +#define LINE "__________________________________________________________________" + +#define PERCENTF(val, val_max) (((float)val / (float)val_max) * 100.f) +#define CLAMP_VAL(value, min, max) (((value) < (min)) ? (min) : (((value) > (max)) ? (max) : ((value) < (min)) ? (min) : (value))) + +enum PROGRAM_ARGUMENTS +{ + PROGRAM_NAME = 0, + SRC_DIR, + SRC_DIR_MAX, + GAME_DIR, + GAME_DIR_MAX, + INFLATE_DIR, + INFLATE_DIR_MAX, + LIBULTRA_DIR, + LIBULTRA_DIR_MAX, + DECOMPILED_WORDS, + DECOMPILED_WORDS_MAX, + DECOMPILED_FILES, + DECOMPILED_FILES_MAX, + HTML_OUTPUT, + LAST_MODIFIED_FILE, + LOG_LEVEL, + ARGS_MAX +}; + +enum VERBOSITY_LOGGING +{ + LOG_MIN = 0, + LOG_DEF, + LOG_MAX +}; + +int total_objectives(void) +{ + /************************/ + int tmp_mis = 0; + int tmp_obj = OBJ_A; + int max_objs = 0; + /************************/ + + for(;;) + { + if(missions[tmp_mis].obj[tmp_obj][LINE1] == NULL) /* reached end of mission's objectives, check next mission */ + { + if(missions[tmp_mis + 1].obj[OBJ_A][LINE1] == NULL) /* reached end of struct, stop counting */ + { + break; + } + tmp_mis++; + tmp_obj = OBJ_A; + } + tmp_obj++; + max_objs++; + } + return max_objs; +} + +void calc_mission_and_objective(int *cur_mis, int *cur_obj, int decomp_progress) +{ + /************************/ + int max_objs = 0; + /************************/ + + for(;;) + { + if(missions[*cur_mis].obj[*cur_obj][LINE1] == NULL) /* reached end of mission's objectives, check next mission */ + { + if(missions[*cur_mis + 1].obj[OBJ_A][LINE1] == NULL) /* reached end of struct, stop counting */ + { + break; + } + *cur_mis += 1; + *cur_obj = OBJ_A; + } + *cur_obj += 1; + max_objs += 1; + if(max_objs >= decomp_progress) + { + break; + } + } +} + +int max_objectives(const int cur_mis) +{ + /************************/ + int cur_obj = OBJ_A; + /************************/ + + for(;;) + { + if(missions[cur_mis].obj[cur_obj][LINE1] == NULL) /* reached end of mission's objectives, break */ + { + break; + } + cur_obj++; + } + return cur_obj; +} + +int main(int argc, char **argv) +{ + /************************/ + long int src_dir, src_dir_max; + long int game_dir, game_dir_max; + long int inflate_dir, inflate_dir_max; + long int libultra_dir, libultra_dir_max; + long int decompiled_words, decompiled_words_max; + long int decompiled_files, decompiled_files_max; + int cur_mis = 0, cur_obj = OBJ_A; + int cur_mis_objs_max = 0, max_objs = 0; + int tmp_obj, cur_line = 0; + int last_modified_file_arg_active = 0; + int verbosity_level = LOG_DEF; + float total_complete, obj_remaining; + FILE *html; + /************************/ + + /* read logging level */ + if(argc == ARGS_MAX) + { + verbosity_level = CLAMP_VAL(atoi(argv[LOG_LEVEL]), 0, 2); + } + if(verbosity_level != LOG_MIN) + { + printf("\n GoldenEye 007 Decompiled Statistics Generator\n%s\n", LINE); + } + if(argc != ARGS_MAX) /* incorrect number of arguments */ + { + printf("\n About: Generate decompiled statistics website\n\n Syntax: %s src max game max inflate max libultra max decompiled_words max_words decompiled_files all_files html_output last_modified_file verbosity_level (0-2)\n\n Note: Each dir's statistic must be followed with the total words for the dir.\n Example: 1481 15854 12641 232276 564 1312 556 20330 15242 269772 49 336 ./index.html \"src/game/bond.c\" 1", argv[PROGRAM_NAME]); + goto exit; + } + + /* read arguments */ + src_dir = atol(argv[SRC_DIR]), src_dir_max = atol(argv[SRC_DIR_MAX]); + game_dir = atol(argv[GAME_DIR]), game_dir_max = atol(argv[GAME_DIR_MAX]); + inflate_dir = atol(argv[INFLATE_DIR]), inflate_dir_max = atol(argv[INFLATE_DIR_MAX]); + libultra_dir = atol(argv[LIBULTRA_DIR]), libultra_dir_max = atol(argv[LIBULTRA_DIR_MAX]); + decompiled_words = atol(argv[DECOMPILED_WORDS]), decompiled_words_max = atol(argv[DECOMPILED_WORDS_MAX]); + decompiled_files = atol(argv[DECOMPILED_FILES]), decompiled_files_max = atol(argv[DECOMPILED_FILES_MAX]); + if(src_dir > src_dir_max) + { + printf("\n Error: Aborted, src larger than src max argument"); + goto exit; + } + if(game_dir > game_dir_max) + { + printf("\n Error: Aborted, game larger than game max argument"); + goto exit; + } + if(inflate_dir > inflate_dir_max) + { + printf("\n Error: Aborted, inflate larger than inflate max argument"); + goto exit; + } + if(libultra_dir > libultra_dir_max) + { + printf("\n Error: Aborted, libultra larger than libultra max argument"); + goto exit; + } + if(decompiled_words > decompiled_words_max) + { + printf("\n Error: Aborted, decompiled words larger than total words argument"); + goto exit; + } + if(decompiled_files > decompiled_files_max) + { + printf("\n Error: Aborted, decompiled files larger than total files argument"); + goto exit; + } + if(src_dir < 0 || src_dir_max < 0 || game_dir < 0 || game_dir_max < 0 || inflate_dir < 0 || inflate_dir_max < 0 || libultra_dir < 0 || libultra_dir_max < 0 || decompiled_words < 0 || decompiled_words_max < 0|| decompiled_files < 0 || decompiled_files_max < 0) + { + printf("\n Error: Aborted, detected negative arguments (invalid or overflow)"); + goto exit; + } + last_modified_file_arg_active = (argv[LAST_MODIFIED_FILE] != NULL); + + /* print all arguments */ + if(verbosity_level == LOG_MAX) + { + printf("\n src_dir:\t\t%ld / %ld", src_dir, src_dir_max); + printf("\n game_dir:\t\t%ld / %ld", game_dir, game_dir_max); + printf("\n inflate_dir:\t\t%ld / %ld", inflate_dir, inflate_dir_max); + printf("\n libultra_dir:\t\t%ld / %ld", libultra_dir, libultra_dir_max); + printf("\n decompiled_words:\t%ld / %ld", decompiled_words, decompiled_words_max); + printf("\n decompiled_files:\t%ld / %ld", decompiled_files, decompiled_files_max); + printf("\n last_modified_file:\t%s\n%s\n", last_modified_file_arg_active ? argv[LAST_MODIFIED_FILE] : "NULL", LINE); + } + + html = fopen(argv[HTML_OUTPUT], "ab"); + if(html == NULL) + { + printf("\n Error: Aborted, %s cannot be opened", argv[HTML_OUTPUT]); + goto exit; + } + + max_objs = total_objectives(); + total_complete = ((float)decompiled_words / (float)decompiled_words_max) * (float)max_objs; + obj_remaining = total_complete - (float)((int)total_complete); + calc_mission_and_objective(&cur_mis, &cur_obj, (int)total_complete); + cur_mis_objs_max = max_objectives(cur_mis); + + fprintf(html, "%s\n", missions[cur_mis].diff); + fprintf(html, "%s\n", missions[cur_mis].title); + fprintf(html, "%s\n", missions[cur_mis].part); + fprintf(html, "REPORT:\n"); + fprintf(html, "Mission status:\n"); + fprintf(html, "\n", cur_obj == cur_mis_objs_max ? ">Completed" : " class=\"failed\">FAILED"); + + for(tmp_obj = OBJ_A; tmp_obj < cur_mis_objs_max; tmp_obj++, cur_line++) + { + fprintf(html, "%s\n", line_rows[cur_line], diff_char[tmp_obj]); + fprintf(html, "%s\n", line_rows[cur_line], missions[cur_mis].obj[tmp_obj][LINE1]); + fprintf(html, "\n", line_rows[cur_line], tmp_obj < cur_obj ? ">Completed" : " class=\"failed\">FAILED"); + if(missions[cur_mis].obj[tmp_obj][LINE2] != NULL) /* if objective took up two lines, skip an extra line for next objective */ + { + fprintf(html, "%s\n", line_rows[cur_line+1], missions[cur_mis].obj[tmp_obj][LINE2]); + cur_line++; + } + } + + fprintf(html, "\n"); + fprintf(html, "\n"); + fprintf(html, "\n"); + fprintf(html, "%s\n", missions[cur_mis].diff); + fprintf(html, "%s\n", missions[cur_mis].title); + fprintf(html, "%s\n", missions[cur_mis].part); + fprintf(html, "STATISTICS:\n"); + fprintf(html, "Time:\n"); + fprintf(html, "00:02\n"); + fprintf(html, "Target:\n"); + fprintf(html, "04:00\n"); + fprintf(html, "(Best Time: 00:10)\n"); + fprintf(html, "Decomp:\n"); + fprintf(html, "%0.1f%%\n", PERCENTF(decompiled_words, decompiled_words_max)); + if(last_modified_file_arg_active) + { + fprintf(html, "Last modified file:\n"); + fprintf(html, "%s\n", argv[14]); + } + else + { + fprintf(html, "Weapon of choice:\n"); + fprintf(html, "PP7 (silenced)\n"); + } + fprintf(html, "Files done:\n"); + fprintf(html, "%ld\n", decompiled_files); + fprintf(html, "Files total:\n"); + fprintf(html, "%ld\n", decompiled_files_max); + fprintf(html, "src:\n"); + fprintf(html, "%ld (%0.1f%%)\n", src_dir, PERCENTF(src_dir, src_dir_max)); + fprintf(html, "src/game:\n"); + fprintf(html, "%ld (%0.1f%%)\n", game_dir, PERCENTF(game_dir, game_dir_max)); + fprintf(html, "src/inflate:\n"); + fprintf(html, "%ld (%0.1f%%)\n", inflate_dir, PERCENTF(inflate_dir, inflate_dir_max)); + fprintf(html, "src/libultra:\n"); + fprintf(html, "%ld (%0.1f%%)\n", libultra_dir, PERCENTF(libultra_dir, libultra_dir_max)); + fprintf(html, "\n"); + fprintf(html, "\n"); + fprintf(html, "\n"); + fprintf(html, "\n"); + fprintf(html, ""); + fclose(html); + + if(verbosity_level != LOG_MIN) + { + printf("\n Successfully written stats to %s\n\n", argv[13]); + } + printf(" %s\n", missions[cur_mis].out_name); + for(tmp_obj = OBJ_A; tmp_obj < cur_mis_objs_max; tmp_obj++) + { + printf("\n [%s] %s", tmp_obj < cur_obj ? "X" : " ", missions[cur_mis].obj[tmp_obj][LINE1]); + if(missions[cur_mis].obj[tmp_obj][LINE2] != NULL) + { + printf(" %s", missions[cur_mis].obj[tmp_obj][LINE2]); + } + if(tmp_obj == cur_obj) + { + printf(" - %0.1f%%", obj_remaining * 100.f); + } + } + + printf("\n\n Mission Status: %s", cur_obj == cur_mis_objs_max ? "Completed" : "FAILED"); + if(total_complete == max_objs) + { + printf("\n\n Baron has been defeated - decomp is complete!!"); + } + +exit: + if(verbosity_level != LOG_MIN) + { + printf("\n%s\n\n", LINE); + } + return 0; +} diff --git a/tools/report/makefile b/tools/report/makefile new file mode 100644 index 0000000..cfb371c --- /dev/null +++ b/tools/report/makefile @@ -0,0 +1,42 @@ +#Compiler +CC = @gcc + +#Source directories +SRCDIR = ./ +OUTNAME = $(SRCDIR)report +TEMPLATE = $(SRCDIR)template.html +OUTHTML = $(SRCDIR)index.html + +#Compiler flags +CFLAGS = -shared -ansi -Os -std=c89 +CFLAGSDBG = -shared -ansi -g -std=c89 +WFLAGS = -W -Wall -Wextra -pedantic -Wunreachable-code + +#Linker flags +OBJS = $(SRCDIR)main.o +LFLAGS = $(OBJS) -o $(OUTNAME) -s +LFLAGSDBG = $(OBJS) -o $(OUTNAME) + +#Main recipes +all: copy_html report + +debug: CC = gcc +debug: CFLAGS = $(CFLAGSDBG) +debug: LFLAGS = $(LFLAGSDBG) +debug: copy_html +debug: report + +report: $(OBJS) + $(CC) $(LFLAGS) + +clean: + @rm $(OUTNAME) + @rm $(OUTHTML) + @rm $(SRCDIR)*.o + +copy_html: + @cp -f $(TEMPLATE) $(OUTHTML) + +#Individual recipes +$(OBJDIR)main.o: $(SRCDIR)main.c $(SRCDIR)objectives.h + $(CC) -c $(SRCDIR)main.c -o $(SRCDIR)main.o $(CFLAGS) $(WFLAGS) \ No newline at end of file diff --git a/tools/report/objectives.h b/tools/report/objectives.h new file mode 100644 index 0000000..770dec7 --- /dev/null +++ b/tools/report/objectives.h @@ -0,0 +1,753 @@ +#define MISSIONS_A_MAX 18 +#define MISSIONS_SA_MAX 19 +#define MISSIONS_00A_MAX 20 +#define MISSIONS_MAX (MISSIONS_A_MAX + MISSIONS_SA_MAX + MISSIONS_00A_MAX + 1) +#define OBJECTIVES_MAX (OBJ_MAX + 1) + +enum OBJECTIVES +{ + OBJ_A = 0, + OBJ_B, + OBJ_C, + OBJ_D, + OBJ_E, + OBJ_MAX +}; + +enum OBJECTIVE_LINES +{ + LINE1 = 0, + LINE2, + LINE_MAX +}; + +struct mission +{ + char *out_name; + char *diff; + char *title; + char *part; + char *obj[OBJECTIVES_MAX][LINE_MAX]; +}; + +char *diff_char[OBJECTIVES_MAX] = {"a.", "b.", "c.", "d.", "e.", NULL}; +int line_rows[] = {1330, 1428, 1527, 1625, 1724, 1822, 1921, 2020, 2119}; + +struct mission missions[MISSIONS_MAX] = +{ + { + "Dam (Agent)", + "Agent: James Bond", + "Mission 1: Arkangelsk", + "Part i: Dam", + { + {"Bungee jump from platform", NULL}, + {NULL, NULL} + } + }, + { + "Facility (Agent)", + "Agent: James Bond", + "Mission 1: Arkangelsk", + "Part ii: Facility", + { + {"Gain access to laboratory area", NULL}, + {"Rendezvous with 006", NULL}, + {"Destroy all tanks in bottling room", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Runway (Agent)", + "Agent: James Bond", + "Mission 1: Arkangelsk", + "Part iii: Runway", + { + {"Find plane ignition key", NULL}, + {"Escape in plane", NULL}, + {NULL, NULL} + } + }, + { + "Surface i (Agent)", + "Agent: James Bond", + "Mission 2: Severnaya", + "Part i: Surface", + { + {"Power down communications", "dish"}, + {"Enter base via ventilation tower", NULL}, + {NULL, NULL} + } + }, + { + "Bunker i (Agent)", + "Agent: James Bond", + "Mission 2: Severnaya", + "Part ii: Bunker", + { + {"Copy Goldeneye key and leave", "original"}, + {"Photograph main video screen", NULL}, + {NULL, NULL} + } + }, + { + "Silo (Agent)", + "Agent: James Bond", + "Mission 3: Kirghizstan", + "Part i: Launch Silo #4", + { + {"Photograph satellite", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Frigate (Agent)", + "Agent: James Bond", + "Mission 4: Monte Carlo", + "Part i: Frigate", + { + {"Rescue hostages", NULL}, + {"Plant tracking bug on helicopter", NULL}, + {NULL, NULL} + } + }, + { + "Surface ii (Agent)", + "Agent: James Bond", + "Mission 5: Severnaya", + "Part i: Surface", + { + {"Break communications link to", "bunker"}, + {"Gain entry to bunker", NULL}, + {NULL, NULL} + } + }, + { + "Bunker ii (Agent)", + "Agent: James Bond", + "Mission 5: Severnaya", + "Part ii: Bunker", + { + {"Recover CCTV tape", NULL}, + {"Escape with Natalya", NULL}, + {NULL, NULL} + } + }, + { + "Statue (Agent)", + "Agent: James Bond", + "Mission 6: St. Petersburg", + "Part i: Statue Park", + { + {"Contact Valentin", NULL}, + {"Confront and unmask Janus", NULL}, + {"Locate helicopter", NULL}, + {"Rescue Natalya", NULL}, + {"Find flight recorder", NULL}, + {NULL, NULL} + } + }, + { + "Archives (Agent)", + "Agent: James Bond", + "Mission 6: St. Petersburg", + "Part ii: Military Archives", + { + {"Escape from interrogation room", NULL}, + {"Find Natalya", NULL}, + {"Escape with Natalya", NULL}, + {NULL, NULL} + } + }, + { + "Streets (Agent)", + "Agent: James Bond", + "Mission 6: St. Petersburg", + "Part iii: Streets", + { + {"Pursue Ourumov and Natalya", NULL}, + {"Minimize civilian casualties", NULL}, + {NULL, NULL} + } + }, + { + "Depot (Agent)", + "Agent: James Bond", + "Mission 6: St. Petersburg", + "Part iv: Depot", + { + {"Locate Trevelyan's train", NULL}, + {NULL, NULL} + } + }, + { + "Train (Agent)", + "Agent: James Bond", + "Mission 6: St. Petersburg", + "Part v: Train", + { + {"Destroy brake units", NULL}, + {"Rescue Natalya", NULL}, + {"Escape to safety", NULL}, + {NULL, NULL} + } + }, + { + "Jungle (Agent)", + "Agent: James Bond", + "Mission 7: Cuba", + "Part i: Jungle", + { + {"Destroy drone guns", NULL}, + {"Eliminate Xenia", NULL}, + {"Escort Natalya to Janus base", NULL}, + {NULL, NULL} + } + }, + { + "Control (Agent)", + "Agent: James Bond", + "Mission 7: Cuba", + "Part ii: Control", + { + {"Protect Natalya", NULL}, + {"Disable Goldeneye satellite", NULL}, + {"Destroy armored mainframes", NULL}, + {NULL, NULL} + } + }, + { + "Caverns (Agent)", + "Agent: James Bond", + "Mission 7: Cuba", + "Part iii: Water Caverns", + { + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Cradle (Agent)", + "Agent: James Bond", + "Mission 7: Cuba", + "Part iv: Antenna Cradle", + { + {"Destroy control console", NULL}, + {"Settle the score with Trevelyan", NULL}, + {NULL, NULL} + } + }, + + { + "Dam (Secret Agent)", + "Secret Agent: James Bond", + "Mission 1: Arkangelsk", + "Part i: Dam", + { + {"Neutralize all alarms", NULL}, + {"Bungee jump from platform", NULL}, + {NULL, NULL} + } + }, + { + "Facility (Secret Agent)", + "Secret Agent: James Bond", + "Mission 1: Arkangelsk", + "Part ii: Facility", + { + {"Gain access to laboratory area", NULL}, + {"Contact double Agent: James Bond", NULL}, + {"Rendezvous with 006", NULL}, + {"Destroy all tanks in bottling room", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Runway (Secret Agent)", + "Secret Agent: James Bond", + "Mission 1: Arkangelsk", + "Part iii: Runway", + { + {"Find plane ignition key", NULL}, + {"Destroy missile battery", NULL}, + {"Escape in plane", NULL}, + {NULL, NULL} + } + }, + { + "Surface i (Secret Agent)", + "Secret Agent: James Bond", + "Mission 2: Severnaya", + "Part i: Surface", + { + {"Power down communications", "dish"}, + {"Obtain safe key", NULL}, + {"Steal building plans", NULL}, + {"Enter base via ventilation tower", NULL}, + {NULL, NULL} + } + }, + { + "Bunker i (Secret Agent)", + "Secret Agent: James Bond", + "Mission 2: Severnaya", + "Part ii: Bunker", + { + {"Disrupt all surveillance equipment", NULL}, + {"Copy Goldeneye key and leave", "original"}, + {"Photograph main video screen", NULL}, + {NULL, NULL} + } + }, + { + "Silo (Secret Agent)", + "Secret Agent: James Bond", + "Mission 3: Kirghizstan", + "Part i: Launch Silo #4", + { + {"Photograph satellite", NULL}, + {"Obtain telemetric data", NULL}, + {"Retrieve satellite circuitry", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Frigate (Secret Agent)", + "Secret Agent: James Bond", + "Mission 4: Monte Carlo", + "Part i: Frigate", + { + {"Rescue hostages", NULL}, + {"Disarm bridge bomb", NULL}, + {"Disarm engine room bomb", NULL}, + {"Plant tracking bug on helicopter", NULL}, + {NULL, NULL} + } + }, + { + "Surface ii (Secret Agent)", + "Secret Agent: James Bond", + "Mission 5: Severnaya", + "Part i: Surface", + { + {"Break communications link to", "bunker"}, + {"Disable Spetznaz support aircraft", NULL}, + {"Gain entry to bunker", NULL}, + {NULL, NULL} + } + }, + { + "Bunker ii (Secret Agent)", + "Secret Agent: James Bond", + "Mission 5: Severnaya", + "Part ii: Bunker", + { + {"Compare staff / casualty lists", NULL}, + {"Recover CCTV tape", NULL}, + {"Disable all security cameras", NULL}, + {"Escape with Natalya", NULL}, + {NULL, NULL} + } + }, + { + "Statue (Secret Agent)", + "Secret Agent: James Bond", + "Mission 6: St. Petersburg", + "Part i: Statue Park", + { + {"Contact Valentin", NULL}, + {"Confront and unmask Janus", NULL}, + {"Locate helicopter", NULL}, + {"Rescue Natalya", NULL}, + {"Find flight recorder", NULL}, + {NULL, NULL} + } + }, + { + "Archives (Secret Agent)", + "Secret Agent: James Bond", + "Mission 6: St. Petersburg", + "Part ii: Military Archives", + { + {"Escape from interrogation room", NULL}, + {"Find Natalya", NULL}, + {"Recover helicopter black box", NULL}, + {"Escape with Natalya", NULL}, + {NULL, NULL} + } + }, + { + "Streets (Secret Agent)", + "Secret Agent: James Bond", + "Mission 6: St. Petersburg", + "Part iii: Streets", + { + {"Contact Valentin", NULL}, + {"Pursue Ourumov and Natalya", NULL}, + {"Minimize civilian casualties", NULL}, + {NULL, NULL} + } + }, + { + "Depot (Secret Agent)", + "Secret Agent: James Bond", + "Mission 6: St. Petersburg", + "Part iv: Depot", + { + {"Destroy computer network", NULL}, + {"Obtain safe key", NULL}, + {"Recover helicopter blueprints", NULL}, + {"Locate Trevelyan's train", NULL}, + {NULL, NULL} + } + }, + { + "Train (Secret Agent)", + "Secret Agent: James Bond", + "Mission 6: St. Petersburg", + "Part v: Train", + { + {"Destroy brake units", NULL}, + {"Rescue Natalya", NULL}, + {"Locate Janus secret base", NULL}, + {"Escape to safety", NULL}, + {NULL, NULL} + } + }, + { + "Jungle (Secret Agent)", + "Secret Agent: James Bond", + "Mission 7: Cuba", + "Part i: Jungle", + { + {"Destroy drone guns", NULL}, + {"Eliminate Xenia", NULL}, + {"Blow up ammo dump", NULL}, + {"Escort Natalya to Janus base", NULL}, + {NULL, NULL} + } + }, + { + "Control (Secret Agent)", + "Secret Agent: James Bond", + "Mission 7: Cuba", + "Part ii: Control", + { + {"Protect Natalya", NULL}, + {"Disable Goldeneye satellite", NULL}, + {"Destroy armored mainframes", NULL}, + {NULL, NULL} + } + }, + { + "Caverns (Secret Agent)", + "Secret Agent: James Bond", + "Mission 7: Cuba", + "Part iii: Water Caverns", + { + {"Destroy inlet pump controls", NULL}, + {"Destroy outlet pump controls", NULL}, + {"Destroy master pump console", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Cradle (Secret Agent)", + "Secret Agent: James Bond", + "Mission 7: Cuba", + "Part iv: Antenna Cradle", + { + {"Destroy control console", NULL}, + {"Settle the score with Trevelyan", NULL}, + {NULL, NULL} + } + }, + { + "Aztec (Secret Agent)", + "Secret Agent: James Bond", + "Mission 8: Teotihuaca'n", + "Part i: Aztec Complex", + { + {"Reprogram shuttle guidance", NULL}, + {"Launch shuttle", NULL}, + {NULL, NULL} + } + }, + + { + "Dam (00 Agent)", + "00 Agent: James Bond", + "Mission 1: Arkangelsk", + "Part i: Dam", + { + {"Neutralize all alarms", NULL}, + {"Install covert modem", NULL}, + {"Intercept data backup", NULL}, + {"Bungee jump from platform", NULL}, + {NULL, NULL} + } + }, + { + "Facility (00 Agent)", + "00 Agent: James Bond", + "Mission 1: Arkangelsk", + "Part ii: Facility", + { + {"Gain access to laboratory area", NULL}, + {"Contact double Agent: James Bond", NULL}, + {"Rendezvous with 006", NULL}, + {"Destroy all tanks in bottling room", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Runway (00 Agent)", + "00 Agent: James Bond", + "Mission 1: Arkangelsk", + "Part iii: Runway", + { + {"Find plane ignition key", NULL}, + {"Destroy heavy gun emplacements", NULL}, + {"Destroy missile battery", NULL}, + {"Escape in plane", NULL}, + {NULL, NULL} + } + }, + { + "Surface i (00 Agent)", + "00 Agent: James Bond", + "Mission 2: Severnaya", + "Part i: Surface", + { + {"Power down communications", "dish"}, + {"Obtain safe key", NULL}, + {"Steal building plans", NULL}, + {"Enter base via ventilation tower", NULL}, + {NULL, NULL} + } + }, + { + "Bunker i (00 Agent)", + "00 Agent: James Bond", + "Mission 2: Severnaya", + "Part ii: Bunker", + { + {"Disrupt all surveillance equipment", NULL}, + {"Copy Goldeneye key and leave", "original"}, + {"Get personnel to activate", "computer"}, + {"Download data from computer", NULL}, + {"Photograph main video screen", NULL}, + {NULL, NULL} + } + }, + { + "Silo (00 Agent)", + "00 Agent: James Bond", + "Mission 3: Kirghizstan", + "Part i: Launch Silo #4", + { + {"Plant bombs in fuel rooms", NULL}, + {"Photograph satellite", NULL}, + {"Obtain telemetric data", NULL}, + {"Retrieve satellite circuitry", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Frigate (00 Agent)", + "00 Agent: James Bond", + "Mission 4: Monte Carlo", + "Part i: Frigate", + { + {"Rescue hostages", NULL}, + {"Disarm bridge bomb", NULL}, + {"Disarm engine room bomb", NULL}, + {"Plant tracking bug on helicopter", NULL}, + {NULL, NULL} + } + }, + { + "Surface ii (00 Agent)", + "00 Agent: James Bond", + "Mission 5: Severnaya", + "Part i: Surface", + { + {"Disrupt all surveillance equipment", NULL}, + {"Break communications link to", "bunker"}, + {"Disable Spetznaz support aircraft", NULL}, + {"Gain entry to bunker", NULL}, + {NULL, NULL} + } + }, + { + "Bunker ii (00 Agent)", + "00 Agent: James Bond", + "Mission 5: Severnaya", + "Part ii: Bunker", + { + {"Compare staff / casualty lists", NULL}, + {"Recover CCTV tape", NULL}, + {"Disable all security cameras", NULL}, + {"Recover Goldeneye operations", "manual"}, + {"Escape with Natalya", NULL}, + {NULL, NULL} + } + }, + { + "Statue (00 Agent)", + "00 Agent: James Bond", + "Mission 6: St. Petersburg", + "Part i: Statue Park", + { + {"Contact Valentin", NULL}, + {"Confront and unmask Janus", NULL}, + {"Locate helicopter", NULL}, + {"Rescue Natalya", NULL}, + {"Find flight recorder", NULL}, + {NULL, NULL} + } + }, + { + "Archives (00 Agent)", + "00 Agent: James Bond", + "Mission 6: St. Petersburg", + "Part ii: Military Archives", + { + {"Escape from interrogation room", NULL}, + {"Find Natalya", NULL}, + {"Recover helicopter black box", NULL}, + {"Escape with Natalya", NULL}, + {NULL, NULL} + } + }, + { + "Streets (00 Agent)", + "00 Agent: James Bond", + "Mission 6: St. Petersburg", + "Part iii: Streets", + { + {"Contact Valentin", NULL}, + {"Pursue Ourumov and Natalya", NULL}, + {"Minimize civilian casualties", NULL}, + {NULL, NULL} + } + }, + { + "Depot (00 Agent)", + "00 Agent: James Bond", + "Mission 6: St. Petersburg", + "Part iv: Depot", + { + {"Destroy illegal arms cache", NULL}, + {"Destroy computer network", NULL}, + {"Obtain safe key", NULL}, + {"Recover helicopter blueprints", NULL}, + {"Locate Trevelyan's train", NULL}, + {NULL, NULL} + } + }, + { + "Train (00 Agent)", + "00 Agent: James Bond", + "Mission 6: St. Petersburg", + "Part v: Train", + { + {"Destroy brake units", NULL}, + {"Rescue Natalya", NULL}, + {"Locate Janus secret base", NULL}, + {"Crack Boris' password", NULL}, + {"Escape to safety", NULL}, + {NULL, NULL} + } + }, + { + "Jungle (00 Agent)", + "00 Agent: James Bond", + "Mission 7: Cuba", + "Part i: Jungle", + { + {"Destroy drone guns", NULL}, + {"Eliminate Xenia", NULL}, + {"Blow up ammo dump", NULL}, + {"Escort Natalya to Janus base", NULL}, + {NULL, NULL} + } + }, + { + "Control (00 Agent)", + "00 Agent: James Bond", + "Mission 7: Cuba", + "Part ii: Control", + { + {"Protect Natalya", NULL}, + {"Disable Goldeneye satellite", NULL}, + {"Destroy armored mainframes", NULL}, + {NULL, NULL} + } + }, + { + "Caverns (00 Agent)", + "00 Agent: James Bond", + "Mission 7: Cuba", + "Part iii: Water Caverns", + { + {"Destroy inlet pump controls", NULL}, + {"Destroy outlet pump controls", NULL}, + {"Destroy master pump console", NULL}, + {"Use radio to contact Jack Wade", NULL}, + {"Minimize scientist casualties", NULL}, + {NULL, NULL} + } + }, + { + "Cradle (00 Agent)", + "00 Agent: James Bond", + "Mission 7: Cuba", + "Part iv: Antenna Cradle", + { + {"Destroy control console", NULL}, + {"Settle the score with Trevelyan", NULL}, + {NULL, NULL} + } + }, + { + "Aztec (00 Agent)", + "00 Agent: James Bond", + "Mission 8: Teotihuaca'n", + "Part i: Aztec Complex", + { + {"Reprogram shuttle guidance", NULL}, + {"Launch shuttle", NULL}, + {NULL, NULL} + } + }, + { + "Egypt (00 Agent)", + "00 Agent: James Bond", + "Mission 9: el-Saghira", + "Part i: Egyptian Temple", + { + {"Recover the golden gun", NULL}, + {"Defeat Baron Samedi?", NULL}, + {NULL, NULL} + } + }, + + /* End of struct */ + { + NULL, + NULL, + NULL, + NULL, + { + {NULL, NULL} + } + } +}; diff --git a/tools/report/sfx.ogg b/tools/report/sfx.ogg new file mode 100644 index 0000000..ae8bf3c Binary files /dev/null and b/tools/report/sfx.ogg differ diff --git a/tools/report/template.html b/tools/report/template.html new file mode 100644 index 0000000..b5973c1 --- /dev/null +++ b/tools/report/template.html @@ -0,0 +1,18 @@ + + + +GoldenEye 007 Decompilation Status + + + + + + +
+ +
+